{"version":3,"sources":["webpack:///./node_modules/lottie-web/build/player/lottie.js"],"names":["navigator","root","factory","window","svgNS","locationHref","initialDefaultFrame","subframeEnabled","expressionsPlugin","isSafari","test","userAgent","cachedColors","bm_rounder","Math","round","bm_rnd","bm_pow","pow","bm_sqrt","sqrt","bm_abs","abs","bm_floor","floor","bm_max","max","bm_min","min","blitter","BMMath","ProjectInterface","i","propertyNames","len","length","random","val","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","this","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","BaseEvent","prototype","triggerEvent","eventName","args","_cbs","addEventListener","callback","push","removeEventListener","bind","splice","createTypedArray","Uint8ClampedArray","Float32Array","Int16Array","value","arr","Array","apply","createNS","document","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","container","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","mode","Matrix","_cos","cos","_sin","sin","_tan","tan","_rnd","reset","props","rotate","angle","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","skewFromAxis","scale","sz","setTransform","a","c","e","j","k","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","equals","matr","clone","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","pt1","pt2","pt3","p0","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","pool","math","global","startdenom","significance","overflow","ARC4","key","keylen","me","S","width","count","copy","slice","mixkey","seed","smear","stringseed","charCodeAt","tostring","String","fromCharCode","options","shortseed","flatten","obj","depth","result","typ","entropy","nodecrypto","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","autoseed","arc4","prng","int32","quick","double","pass","is_math_call","state","BezierFactory","ob","nm","str","replace","beziers","bezEasing","BezierEasing","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_mSampleValues","_precomputed","get","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","extendPrototype","sources","destination","sourcePrototype","attr","hasOwnProperty","getDescriptor","object","Object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezier_length_pool","newElement","percents","lengths","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezier_segment_points","getSegmentsLength","shapeData","segmentsLength","segments_length_pool","closed","pathV","pathO","pathI","_length","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","completeText","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","pathData","paths","data","__converted","checkColors","iterateShapes","checkShapes","cl","singleShape","moduleOb","__complete","dataManager","FontManager","emptyChar","w","size","combinedCharacters","setUpNode","font","family","parentNode","fontFamily","node","innerText","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","familyArray","enabledFamilies","join","trimFontOptions","parent","createHelper","def","fontData","tHelper","setAttribute","fFamily","fStyle","fWeight","textContent","fClass","getContext","concat","Font","fonts","typekitLoaded","isLoaded","initTime","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","getCombinedCharacterCodes","addChars","found","ch","addFonts","defs","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","origin","querySelectorAll","href","rel","src","sc","helper","cache","getCharData","char","console","warn","getFontByName","name","fName","measureText","fontName","index","doubleSize","getComputedTextLength","singleSize","loadedCount","removeChild","PropertyFactory","initFrame","math_abs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","fnc","iterationIndex","lastIndex","keyframes","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","quaternionToEuler","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","slerp","createQuaternion","constructor","values","c3","s1","s2","s3","getValueAtCurrentTime","comp","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","processEffectsSequence","elem","globalData","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","arrLen","getProp","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","or","sk","sa","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v1","v2","frameRate","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","ShapePath","_maxLength","setPathData","setLength","point_pool","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","init","cnt","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","shape_pool","releaseShapes","addShape","ShapeProperty","shapeCollection_pool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","convertEllToPath","s0","_cw","_v","StarShapeProperty","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","os","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","convertRectToPath","v0","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","PuckerAndBloatModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segments","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","release","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","shapePath","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","cloned_path","currentV","currentI","currentO","closerV","distance","newPosPerc","amount","centerPoint","pathLength","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","copies","ceil","group","reloadShapes","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","op","comparePoints","buildShapeString","pathNodes","_o","_i","shapeString","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","ImagePreloader","proxyImage","canvas","height","ctx","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","imagesLoadedCb","getAssetsPath","assetData","assetsPath","original_path","imagePath","u","_imageLoaded","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","destroy","getImage","img","createImgData","crossOrigin","createImageData","setAttributeNS","setCacheType","featureSupport","maskType","filtersFactory","createFilter","filId","fil","createAlphaToLuminanceFilter","feColorMatrix","assetLoader","formatResponse","xhr","response","responseText","load","errorCallback","XMLHttpRequest","open","responseType","err","send","onreadystatechange","readyState","status","TextAnimatorProperty","textData","renderType","_hasMaskedPath","_frameId","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimator_animatables","sw","fc","fh","fs","fb","TextSelectorProp","getTextSelectorProp","LetterProps","TextProperty","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","of","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","searchProperties","maskManager","getMaskProperty","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","mask","animators","matrixHelper","mHelper","renderedLettersCount","letters","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","getMult","anIndexes","totalChars","line","extra","an","animatorOffset","add","rot","atan","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","text","charCode","charactersArray","charAt","substr","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","styles","toLowerCase","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","animatorData","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","undefined","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","_currentTextLength","finalS","finalE","xe","ne","textProperty","easer","tot","newCharsFlag","divisor","pool_factory","initialLength","_create","_release","_clone","pooling","cloned","shapeCollection","BaseRenderer","SVGRenderer","animationItem","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","maskElement","layerElement","renderConfig","preserveAspectRatio","imagePreserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","viewBoxSize","className","focusable","filterSize","pendingElements","destroyed","rendererType","CanvasRenderer","clearCanvas","context","dpr","wrapper","devicePixelRatio","currentGlobalAlpha","contextData","CVContextData","transformMat","HybridRenderer","threeDElements","camera","supports3d","MaskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","filterID","expan","lastPath","lastOperator","filterId","lastRadius","createLayerSolidPath","getShapeProp","invRect","drawPath","maskedElement","addRenderableComponent","HierarchyElement","FrameElement","TransformElement","RenderableElement","RenderableDOMElement","ProcessedElement","SVGStyleData","level","lvl","hd","pElem","msElem","SVGShapeData","transformers","caches","lStr","SVGTransformData","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","checkLayers","num","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","Error","AudioElement","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","searchExtraCompositions","xt","initExpressions","registerComposition","setupGlobalData","animData","fontsContainer","getAssetData","imageLoader","imagePreloader","audioController","fr","compSize","NullElement","SVGShapeElement","SVGTextElement","IImageElement","SVGCompElement","ISolidElement","configAnimation","maskId","updateContainerSize","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","getBaseElement","nextElement","insertBefore","hide","show","CVShapeElement","CVTextElement","CVImageElement","CVCompElement","CVSolidElement","ctxTransform","cProps","cTr","trProps","canvasContext","ctxOpacity","globalAlpha","cO","restore","save","actionFlag","cArrPos","duplicate","saved","savedOp","blendMode","popped","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","beginPath","closePath","clip","clearRect","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HShapeElement","HTextElement","HCameraElement","HImageElement","HCompElement","HSolidElement","startPos","endPos","perspectiveElem","createThreeDContainer","webkitTransform","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","svg","setup","cWidth","cHeight","perspective","webkitPerspective","floatingContainer","isFirstFrame","finalMat","finalTransform","mProp","getMaskelement","pathString","pathShapeValue","initHierarchy","_isParent","prepareProperties","isVisible","initTransform","_matMdf","_opMdf","ao","renderTransform","globalToLocal","transforms","ptNew","initRenderable","isInRange","hidden","isTransparent","renderableComponents","component","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","renderRenderable","sourceRectAtTime","getLayerSize","initElement","initBaseData","initRendererElement","createContainerElements","createRenderableComponents","createContent","baseElement","renderElement","renderInnerContent","innerElem","destroyBaseElement","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","stop","gf","cst","opacityId","opFill","ms","ost","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","createRenderFunction","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","_isPlaying","_canPlay","_currentTime","tm","_placeholder","textSpans","shapesData","stylesList","shapeModifiers","itemsData","processedElements","animatedContents","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGGaussianBlurEffect","feGaussianBlur","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feOffset","feFlood","feComposite","originalNodeAdded","sequence","processSequence","processSequences","getNewKey","checkMasks","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","content","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","sr","effectsManager","EffectsManager","getType","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","cp","clipId","cpGroup","renderableEffectsManager","SVGEffects","addShapeToModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","timeRemapped","setElements","elems","getElements","destroyElements","pr","volumeValue","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","time","textBox","getBBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","lc","lj","ml","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","fn","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","sigma","dimensions","sigmaX","sigmaY","edgeMode","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","call","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","ef","filters","CVBaseElement","CVMaskElement","hasMasks","stroke","fill","currentRender","sWidth","fValue","CVEffects","HBaseElement","shapesContainer","currentBBox","textPaths","isMasked","pe","_prevMat","HEffects","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","newLength","currentSavedOp","set","createElements","globalCompositeOperation","hideElement","showElement","forceRealStack","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","drawImage","parentMatrix","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","preTransforms","co","wi","da","do","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","checkBlendMode","tg","addEffects","backgroundColor","_createBaseContainerElements","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","box","changed","compW","compH","innerElemStyle","strokeWidth","lineHeight","tParent","tCont","textPath","margin","Image","imageElem","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","m_rotationX","m_rotationY","hasMatrixChanged","animationManager","registeredAnimations","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","activate","nowTime","elapsedTime","advanceTime","first","loadAnimation","params","setParams","setSpeed","setDirection","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","goToAndStop","isFrame","freeze","unfreeze","getRegisteredAnimations","animations","currentRawFrame","frameMult","playSpeed","playDirection","playCount","autoplay","loop","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","animType","rendererSettings","parseInt","autoloadSegments","initialSegment","lastIndexOf","fileName","trigger","wrapperAttributes","attributes","getNamedItem","prerender","completeData","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","error","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","frameModifier","goToAndPlay","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getDuration","onError","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","ExpressionManager","$bm_isInstanceOfArray","isNumerable","tOfV","Number","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","sum","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","needsVelocity","_needsRandom","elemType","$bm_transform","effect","thisProperty","valueAtTime","defineProperty","frameDuration","displayStartTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","__expression_functions","scoped_bm_rt","xf","eval","expression_function","numKeys","active","wiggle","freq","amp","addedAmps","periods","loopInDuration","duration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","nearestKey","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","_value","frameExpressionId","expressionHelpers","searchExpressions","getSpeedAtTime","speed","_cachingAtTime","getStaticValueAtTime","setGroupProperty","propertyGroup","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","propertyIndex","ix","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","propertyGetShapeProp","trims","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","ShapePathInterface","view","interfaceFunction","_propertyGroup","propertyGroupFactory","PropertyInterface","defineProperties","mn","parentPropertyGroup","propertyName","_name","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","interfaces","numProperties","transformInterface","transformInterfaceFactory","cix","contentsInterfaceFactory","np","ExpressionPropertyInterface","_dashPropertyGroup","dashOb","addPropertyToDashOb","start","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","_sourceText","_thisLayerFunction","sourceText","stringValue","_prevValue","toWorldMat","sampleImage","anchorPointDescriptor","TransformExpressionInterface","anchor_point","startTime","source","MaskManagerInterface","effects","pixelAspect","numLayers","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_transformFactory","_pz","_px","_py","compositions","_thisProjectFunction","createGroupInterface","groupInterface","createValueInterface","enabled","en","expressionProperty","effectsData","MaskInterface","_mask","_data","_masksInterfaces","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","assign","speedAtTime","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TextExpressionSelectorProp","propertyGetTextProp","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","getValueProxy","total","eff","lottie","setLocationHref","setSubframeRendering","setQuality","isNaN","inBrowser","installPlugin","plugin","getFactory","checkReady","clearInterval","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript","setInterval"],"mappings":";2GAAA,sDAAQ,QAER,oBAAQ,QAEa,oBAAdA,WAA6B,SAAUC,EAAMC,QAI/C,KAFD,yCACE,OAAOA,EAAQD,IAChB,kGAJ+B,CAWlCE,QAAU,IAAI,SAAUA,QACxB,aAEA,IAAIC,MAAQ,6BACRC,aAAe,GACfC,qBAAuB,OACvBC,iBAAkB,EAClBC,kBACAC,SAAW,iCAAiCC,KAAKV,UAAUW,WAC3DC,aAAe,GACfC,WAAaC,KAAKC,MAClBC,OACAC,OAASH,KAAKI,IACdC,QAAUL,KAAKM,KACfC,OAASP,KAAKQ,IACdC,SAAWT,KAAKU,MAChBC,OAASX,KAAKY,IACdC,OAASb,KAAKc,IACdC,QAAU,GACVC,OAAS,GAYb,SAASC,mBACP,MAAO,IAXT,WACE,IACIC,EADAC,EAAgB,CAAC,MAAO,OAAQ,QAAS,OAAQ,QAAS,OAAQ,QAAS,QAAS,OAAQ,OAAQ,QAAS,QAAS,MAAO,OAAQ,MAAO,QAAS,SAAU,QAAS,OAAQ,MAAO,QAAS,OAAQ,QAAS,MAAO,MAAO,MAAO,SAAU,QAAS,OAAQ,MAAO,OAAQ,OAAQ,MAAO,OAAQ,QAAS,IAAK,OAAQ,MAAO,SAAU,QAAS,KAAM,UAAW,SAExWC,EAAMD,EAAcE,OAExB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBF,OAAOG,EAAcD,IAAMlB,KAAKmB,EAAcD,IANlD,GAcAF,OAAOM,OAAStB,KAAKsB,OAErBN,OAAOR,IAAM,SAAUe,GAGrB,GAAe,kBAFKA,GAEOA,EAAIF,OAAQ,CACrC,IACIH,EADAM,EAASC,iBAAiBF,EAAIF,QAE9BD,EAAMG,EAAIF,OAEd,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBM,EAAON,GAAKlB,KAAKQ,IAAIe,EAAIL,IAG3B,OAAOM,EAGT,OAAOxB,KAAKQ,IAAIe,IAGlB,IAAIG,qBAAuB,IACvBC,UAAY3B,KAAK4B,GAAK,IACtBC,YAAc,MAElB,SAASC,YAAYC,GAEjB7B,OADE6B,EACO/B,KAAKC,MAEL,SAAgBsB,GACvB,OAAOA,GAOb,SAASS,SAASC,GAChBA,EAAQC,MAAMC,SAAW,WACzBF,EAAQC,MAAME,IAAM,EACpBH,EAAQC,MAAMG,KAAO,EACrBJ,EAAQC,MAAMI,QAAU,QACxBL,EAAQC,MAAMK,gBAAkBN,EAAQC,MAAMM,sBAAwB,MACtEP,EAAQC,MAAMO,mBAAqBR,EAAQC,MAAMQ,yBAA2B,UAC5ET,EAAQC,MAAMS,eAAiBV,EAAQC,MAAMU,qBAAuBX,EAAQC,MAAMW,kBAAoB,cAGxG,SAASC,kBAAkBC,EAAMC,EAAaC,EAAWC,GACvDC,KAAKJ,KAAOA,EACZI,KAAKH,YAAcA,EACnBG,KAAKF,UAAYA,EACjBE,KAAKC,UAAYF,EAAkB,GAAK,EAAI,EAG9C,SAASG,gBAAgBN,EAAMG,GAC7BC,KAAKJ,KAAOA,EACZI,KAAKC,UAAYF,EAAkB,GAAK,EAAI,EAG9C,SAASI,oBAAoBP,EAAMQ,EAAYC,EAAaN,GAC1DC,KAAKJ,KAAOA,EACZI,KAAKK,YAAcA,EACnBL,KAAKI,WAAaA,EAClBJ,KAAKC,UAAYF,EAAkB,GAAK,EAAI,EAG9C,SAASO,oBAAoBV,EAAMW,EAAYC,GAC7CR,KAAKJ,KAAOA,EACZI,KAAKO,WAAaA,EAClBP,KAAKQ,YAAcA,EAGrB,SAASC,eAAeb,EAAMc,GAC5BV,KAAKJ,KAAOA,EACZI,KAAKU,OAASA,EAGhB,SAASC,wBAAwBC,EAAaf,GAC5CG,KAAKJ,KAAO,mBACZI,KAAKY,YAAcA,EACnBZ,KAAKH,YAAcA,EAGrB,SAASgB,mBAAmBD,GAC1BZ,KAAKJ,KAAO,cACZI,KAAKY,YAAcA,EAGrB,SAASE,4BAA4BlB,EAAMgB,GACzCZ,KAAKJ,KAAOA,EACZI,KAAKY,YAAcA,EACnBZ,KAAKH,YAAcA,YAxDrBlB,aAAY,GA2DZ,IAAIoC,iBACEC,OAAS,EACN,WACL,MAAO,uBAAwBA,SAF7BA,OAMN,SAASC,SAASC,EAAGC,EAAGC,GACtB,IAAIC,EAAGC,EAAGC,EAAGxD,EAAGyD,EAAGC,EAAGC,EAAGC,EAOzB,OAJAF,EAAIL,GAAK,EAAID,GACbO,EAAIN,GAAK,GAFTI,EAAQ,EAAJN,GADJnD,EAAIlB,KAAKU,MAAU,EAAJ2D,KAGEC,GACjBQ,EAAIP,GAAK,GAAK,EAAII,GAAKL,GAEfpD,EAAI,GACV,KAAK,EACHsD,EAAID,EACJE,EAAIK,EACJJ,EAAIE,EACJ,MAEF,KAAK,EACHJ,EAAIK,EACJJ,EAAIF,EACJG,EAAIE,EACJ,MAEF,KAAK,EACHJ,EAAII,EACJH,EAAIF,EACJG,EAAII,EACJ,MAEF,KAAK,EACHN,EAAII,EACJH,EAAII,EACJH,EAAIH,EACJ,MAEF,KAAK,EACHC,EAAIM,EACJL,EAAIG,EACJF,EAAIH,EACJ,MAEF,KAAK,EACHC,EAAID,EACJE,EAAIG,EACJF,EAAIG,EAIR,MAAO,CAACL,EAAGC,EAAGC,GAGhB,SAASK,SAASP,EAAGC,EAAGC,GACtB,IAGIL,EAHAzD,EAAMZ,KAAKY,IAAI4D,EAAGC,EAAGC,GACrB5D,EAAMd,KAAKc,IAAI0D,EAAGC,EAAGC,GACrBM,EAAIpE,EAAME,EAEVwD,EAAY,IAAR1D,EAAY,EAAIoE,EAAIpE,EACxB2D,EAAI3D,EAAM,IAEd,OAAQA,GACN,KAAKE,EACHuD,EAAI,EACJ,MAEF,KAAKG,EACHH,EAAII,EAAIC,EAAIM,GAAKP,EAAIC,EAAI,EAAI,GAC7BL,GAAK,EAAIW,EACT,MAEF,KAAKP,EACHJ,EAAIK,EAAIF,EAAQ,EAAJQ,EACZX,GAAK,EAAIW,EACT,MAEF,KAAKN,EACHL,EAAIG,EAAIC,EAAQ,EAAJO,EACZX,GAAK,EAAIW,EAIb,MAAO,CAACX,EAAGC,EAAGC,GAGhB,SAASU,mBAAmBC,EAAOC,GACjC,IAAIC,EAAML,SAAoB,IAAXG,EAAM,GAAqB,IAAXA,EAAM,GAAqB,IAAXA,EAAM,IASzD,OARAE,EAAI,IAAMD,EAENC,EAAI,GAAK,EACXA,EAAI,GAAK,EACAA,EAAI,IAAM,IACnBA,EAAI,GAAK,GAGJhB,SAASgB,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAGtC,SAASC,mBAAmBH,EAAOC,GACjC,IAAIC,EAAML,SAAoB,IAAXG,EAAM,GAAqB,IAAXA,EAAM,GAAqB,IAAXA,EAAM,IASzD,OARAE,EAAI,IAAMD,EAENC,EAAI,GAAK,EACXA,EAAI,GAAK,EACAA,EAAI,GAAK,IAClBA,EAAI,GAAK,GAGJhB,SAASgB,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAGtC,SAASE,YAAYJ,EAAOC,GAC1B,IAAIC,EAAML,SAAoB,IAAXG,EAAM,GAAqB,IAAXA,EAAM,GAAqB,IAAXA,EAAM,IASzD,OARAE,EAAI,IAAMD,EAAS,IAEfC,EAAI,GAAK,EACXA,EAAI,IAAM,EACDA,EAAI,GAAK,IAClBA,EAAI,IAAM,GAGLhB,SAASgB,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAGtC,IAAIG,SAAW,WACb,IACIrE,EACAsE,EAFAC,EAAW,GAIf,IAAKvE,EAAI,EAAGA,EAAI,IAAKA,GAAK,EACxBsE,EAAMtE,EAAEwE,SAAS,IACjBD,EAASvE,GAAmB,GAAdsE,EAAInE,OAAc,IAAMmE,EAAMA,EAG9C,OAAO,SAAUhB,EAAGC,EAAGC,GAarB,OAZIF,EAAI,IACNA,EAAI,GAGFC,EAAI,IACNA,EAAI,GAGFC,EAAI,IACNA,EAAI,GAGC,IAAMe,EAASjB,GAAKiB,EAAShB,GAAKgB,EAASf,IAvBvC,GA2Bf,SAASiB,aAETA,UAAUC,UAAY,CACpBC,aAAc,SAAsBC,EAAWC,GAC7C,GAAI5C,KAAK6C,KAAKF,GAGZ,IAFA,IAAI1E,EAAM+B,KAAK6C,KAAKF,GAAWzE,OAEtBH,EAAI,EAAGA,EAAIE,EAAKF,IACvBiC,KAAK6C,KAAKF,GAAW5E,GAAG6E,IAI9BE,iBAAkB,SAA0BH,EAAWI,GAOrD,OANK/C,KAAK6C,KAAKF,KACb3C,KAAK6C,KAAKF,GAAa,IAGzB3C,KAAK6C,KAAKF,GAAWK,KAAKD,GAEnB,WACL/C,KAAKiD,oBAAoBN,EAAWI,IACpCG,KAAKlD,OAETiD,oBAAqB,SAA6BN,EAAWI,GAC3D,GAAKA,GAEE,GAAI/C,KAAK6C,KAAKF,GAAY,CAI/B,IAHA,IAAI5E,EAAI,EACJE,EAAM+B,KAAK6C,KAAKF,GAAWzE,OAExBH,EAAIE,GACL+B,KAAK6C,KAAKF,GAAW5E,KAAOgF,IAC9B/C,KAAK6C,KAAKF,GAAWQ,OAAOpF,EAAG,GAE/BA,GAAK,EACLE,GAAO,GAGTF,GAAK,EAGFiC,KAAK6C,KAAKF,GAAWzE,SACxB8B,KAAK6C,KAAKF,GAAa,YAjBzB3C,KAAK6C,KAAKF,GAAa,OAuB7B,IAAIS,iBAkC+B,mBAAtBC,mBAA4D,mBAAjBC,aAVtD,SAA0B1D,EAAM3B,GAC9B,MAAa,YAAT2B,EACK,IAAI0D,aAAarF,GACN,UAAT2B,EACF,IAAI2D,WAAWtF,GACJ,WAAT2B,EACF,IAAIyD,kBAAkBpF,QADxB,GA5BT,SAA4B2B,EAAM3B,GAChC,IAEIuF,EAFAzF,EAAI,EACJ0F,EAAM,GAGV,OAAQ7D,GACN,IAAK,QACL,IAAK,SACH4D,EAAQ,EACR,MAEF,QACEA,EAAQ,IAIZ,IAAKzF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAIT,KAAKQ,GAGX,OAAOC,GAoBX,SAASnF,iBAAiBL,GACxB,OAAOyF,MAAMC,MAAM,KAAM,CACvBzF,OAAQD,IAIZ,SAAS2F,SAAShE,GAEhB,OAAOiE,SAASC,gBAAgB3H,MAAOyD,GAGzC,SAASmE,UAAUnE,GAEjB,OAAOiE,SAASG,cAAcpE,GAGhC,SAASqE,4BAGTA,yBAAyBxB,UAAY,CACnCyB,mBAAoB,SAA4BC,IACA,IAA1CnE,KAAKoE,kBAAkBC,QAAQF,KACjCnE,KAAKoE,kBAAkBpB,KAAKmB,GAC5BnE,KAAKsE,UAAUJ,mBAAmBlE,MAClCA,KAAKuE,aAAc,IAGvBC,yBAA0B,WACxBxE,KAAKyE,MAAO,EACZ,IAAI1G,EACAE,EAAM+B,KAAKoE,kBAAkBlG,OAEjC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKoE,kBAAkBrG,GAAG2G,WAEtB1E,KAAKoE,kBAAkBrG,GAAG0G,OAC5BzE,KAAKyE,MAAO,IAIlBE,6BAA8B,SAAsCL,GAClEtE,KAAKsE,UAAYA,EACjBtE,KAAKoE,kBAAoB,GACzBpE,KAAKyE,MAAO,EACZzE,KAAKuE,aAAc,IAIvB,IAAIK,cACEC,eAAiB,CACnBC,EAAG,cACHC,EAAG,WACHC,EAAG,SACHC,EAAG,UACHC,EAAG,SACHC,EAAG,UACHC,EAAG,cACHC,EAAG,aACHC,EAAG,aACHC,EAAG,aACHC,GAAI,aACJC,GAAI,YACJC,GAAI,MACJC,GAAI,aACJC,GAAI,QACJC,GAAI,cAEC,SAAUC,GACf,OAAOjB,eAAeiB,IAAS,KAnB7BjB,eAoDFkB,OAAS,WACX,IAAIC,EAAOnJ,KAAKoJ,IACZC,EAAOrJ,KAAKsJ,IACZC,EAAOvJ,KAAKwJ,IACZC,EAAOzJ,KAAKC,MAEhB,SAASyJ,IAiBP,OAhBAvG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,GAAK,EAChBxG,KAAKwG,MAAM,IAAM,EACjBxG,KAAKwG,MAAM,IAAM,EACjBxG,KAAKwG,MAAM,IAAM,EACjBxG,KAAKwG,MAAM,IAAM,EACjBxG,KAAKwG,MAAM,IAAM,EACjBxG,KAAKwG,MAAM,IAAM,EACVxG,KAGT,SAASyG,EAAOC,GACd,GAAc,IAAVA,EACF,OAAO1G,KAGT,IAAI2G,EAAOX,EAAKU,GAEZE,EAAOV,EAAKQ,GAEhB,OAAO1G,KAAK6G,GAAGF,GAAOC,EAAM,EAAG,EAAGA,EAAMD,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAG3E,SAASG,EAAQJ,GACf,GAAc,IAAVA,EACF,OAAO1G,KAGT,IAAI2G,EAAOX,EAAKU,GAEZE,EAAOV,EAAKQ,GAEhB,OAAO1G,KAAK6G,GAAG,EAAG,EAAG,EAAG,EAAG,EAAGF,GAAOC,EAAM,EAAG,EAAGA,EAAMD,EAAM,EAAG,EAAG,EAAG,EAAG,GAG3E,SAASI,EAAQL,GACf,GAAc,IAAVA,EACF,OAAO1G,KAGT,IAAI2G,EAAOX,EAAKU,GAEZE,EAAOV,EAAKQ,GAEhB,OAAO1G,KAAK6G,GAAGF,EAAM,EAAGC,EAAM,EAAG,EAAG,EAAG,EAAG,GAAIA,EAAM,EAAGD,EAAM,EAAG,EAAG,EAAG,EAAG,GAG3E,SAASK,EAAQN,GACf,GAAc,IAAVA,EACF,OAAO1G,KAGT,IAAI2G,EAAOX,EAAKU,GAEZE,EAAOV,EAAKQ,GAEhB,OAAO1G,KAAK6G,GAAGF,GAAOC,EAAM,EAAG,EAAGA,EAAMD,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAG3E,SAASM,EAAMC,EAAIC,GACjB,OAAOnH,KAAK6G,GAAG,EAAGM,EAAID,EAAI,EAAG,EAAG,GAGlC,SAASE,EAAKC,EAAIC,GAChB,OAAOtH,KAAKiH,MAAMb,EAAKiB,GAAKjB,EAAKkB,IAGnC,SAASC,EAAaF,EAAIX,GACxB,IAAIC,EAAOX,EAAKU,GAEZE,EAAOV,EAAKQ,GAEhB,OAAO1G,KAAK6G,GAAGF,EAAMC,EAAM,EAAG,GAAIA,EAAMD,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAGE,GAAG,EAAG,EAAG,EAAG,EAAGT,EAAKiB,GAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAGR,GAAGF,GAAOC,EAAM,EAAG,EAAGA,EAAMD,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGrM,SAASa,EAAMN,EAAIC,EAAIM,GAKrB,OAJKA,GAAa,IAAPA,IACTA,EAAK,GAGI,IAAPP,GAAmB,IAAPC,GAAmB,IAAPM,EACnBzH,KAGFA,KAAK6G,GAAGK,EAAI,EAAG,EAAG,EAAG,EAAGC,EAAI,EAAG,EAAG,EAAG,EAAGM,EAAI,EAAG,EAAG,EAAG,EAAG,GAGjE,SAASC,EAAaC,EAAGpG,EAAGqG,EAAG/F,EAAGgG,EAAGrG,EAAGF,EAAGJ,EAAGnD,EAAG+J,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAG1G,GAiBjE,OAhBAzB,KAAKwG,MAAM,GAAKmB,EAChB3H,KAAKwG,MAAM,GAAKjF,EAChBvB,KAAKwG,MAAM,GAAKoB,EAChB5H,KAAKwG,MAAM,GAAK3E,EAChB7B,KAAKwG,MAAM,GAAKqB,EAChB7H,KAAKwG,MAAM,GAAKhF,EAChBxB,KAAKwG,MAAM,GAAKlF,EAChBtB,KAAKwG,MAAM,GAAKtF,EAChBlB,KAAKwG,MAAM,GAAKzI,EAChBiC,KAAKwG,MAAM,GAAKsB,EAChB9H,KAAKwG,MAAM,IAAMuB,EACjB/H,KAAKwG,MAAM,IAAMwB,EACjBhI,KAAKwG,MAAM,IAAMyB,EACjBjI,KAAKwG,MAAM,IAAM0B,EACjBlI,KAAKwG,MAAM,IAAM2B,EACjBnI,KAAKwG,MAAM,IAAM/E,EACVzB,KAGT,SAASoI,EAAUC,EAAIC,EAAIC,GAGzB,OAFAA,EAAKA,GAAM,EAEA,IAAPF,GAAmB,IAAPC,GAAmB,IAAPC,EACnBvI,KAAK6G,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGwB,EAAIC,EAAIC,EAAI,GAG1DvI,KAGT,SAASwI,EAAUC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC7E,IAAIC,EAAKzJ,KAAKwG,MAEd,GAAW,IAAPiC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,EAStI,OANAK,EAAG,IAAMA,EAAG,IAAMhB,EAAKgB,EAAG,IAAMJ,EAChCI,EAAG,IAAMA,EAAG,IAAMX,EAAKW,EAAG,IAAMH,EAChCG,EAAG,IAAMA,EAAG,IAAMN,EAAKM,EAAG,IAAMF,EAChCE,EAAG,IAAMA,EAAG,IAAMD,EAElBxJ,KAAK0J,qBAAsB,EACpB1J,KAGT,IAAI2J,EAAKF,EAAG,GACRG,EAAKH,EAAG,GACRI,EAAKJ,EAAG,GACRK,EAAKL,EAAG,GACRM,EAAKN,EAAG,GACRO,EAAKP,EAAG,GACRQ,EAAKR,EAAG,GACRS,EAAKT,EAAG,GACRU,EAAKV,EAAG,GACRW,EAAKX,EAAG,GACRY,EAAKZ,EAAG,IACRa,EAAKb,EAAG,IACRc,EAAKd,EAAG,IACRe,EAAKf,EAAG,IACRgB,EAAKhB,EAAG,IACRiB,EAAKjB,EAAG,IAwBZ,OAjBAA,EAAG,GAAKE,EAAKlB,EAAKmB,EAAKf,EAAKgB,EAAKZ,EAAKa,EAAKT,EAC3CI,EAAG,GAAKE,EAAKjB,EAAKkB,EAAKd,EAAKe,EAAKX,EAAKY,EAAKR,EAC3CG,EAAG,GAAKE,EAAKhB,EAAKiB,EAAKb,EAAKc,EAAKV,EAAKW,EAAKP,EAC3CE,EAAG,GAAKE,EAAKf,EAAKgB,EAAKZ,EAAKa,EAAKT,EAAKU,EAAKN,EAC3CC,EAAG,GAAKM,EAAKtB,EAAKuB,EAAKnB,EAAKoB,EAAKhB,EAAKiB,EAAKb,EAC3CI,EAAG,GAAKM,EAAKrB,EAAKsB,EAAKlB,EAAKmB,EAAKf,EAAKgB,EAAKZ,EAC3CG,EAAG,GAAKM,EAAKpB,EAAKqB,EAAKjB,EAAKkB,EAAKd,EAAKe,EAAKX,EAC3CE,EAAG,GAAKM,EAAKnB,EAAKoB,EAAKhB,EAAKiB,EAAKb,EAAKc,EAAKV,EAC3CC,EAAG,GAAKU,EAAK1B,EAAK2B,EAAKvB,EAAKwB,EAAKpB,EAAKqB,EAAKjB,EAC3CI,EAAG,GAAKU,EAAKzB,EAAK0B,EAAKtB,EAAKuB,EAAKnB,EAAKoB,EAAKhB,EAC3CG,EAAG,IAAMU,EAAKxB,EAAKyB,EAAKrB,EAAKsB,EAAKlB,EAAKmB,EAAKf,EAC5CE,EAAG,IAAMU,EAAKvB,EAAKwB,EAAKpB,EAAKqB,EAAKjB,EAAKkB,EAAKd,EAC5CC,EAAG,IAAMc,EAAK9B,EAAK+B,EAAK3B,EAAK4B,EAAKxB,EAAKyB,EAAKrB,EAC5CI,EAAG,IAAMc,EAAK7B,EAAK8B,EAAK1B,EAAK2B,EAAKvB,EAAKwB,EAAKpB,EAC5CG,EAAG,IAAMc,EAAK5B,EAAK6B,EAAKzB,EAAK0B,EAAKtB,EAAKuB,EAAKnB,EAC5CE,EAAG,IAAMc,EAAK3B,EAAK4B,EAAKxB,EAAKyB,EAAKrB,EAAKsB,EAAKlB,EAC5CxJ,KAAK0J,qBAAsB,EACpB1J,KAGT,SAAS2K,IAMP,OALK3K,KAAK0J,sBACR1J,KAAK4K,YAAgC,IAAlB5K,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA8B,IAAlBxG,KAAKwG,MAAM,IAA+B,IAAnBxG,KAAKwG,MAAM,KAAgC,IAAnBxG,KAAKwG,MAAM,KAAgC,IAAnBxG,KAAKwG,MAAM,KAAgC,IAAnBxG,KAAKwG,MAAM,KAAgC,IAAnBxG,KAAKwG,MAAM,KAAgC,IAAnBxG,KAAKwG,MAAM,KAC5XxG,KAAK0J,qBAAsB,GAGtB1J,KAAK4K,UAGd,SAASC,EAAOC,GAGd,IAFA,IAAI/M,EAAI,EAEDA,EAAI,IAAI,CACb,GAAI+M,EAAKtE,MAAMzI,KAAOiC,KAAKwG,MAAMzI,GAC/B,OAAO,EAGTA,GAAK,EAGP,OAAO,EAGT,SAASgN,EAAMD,GACb,IAAI/M,EAEJ,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB+M,EAAKtE,MAAMzI,GAAKiC,KAAKwG,MAAMzI,GAI/B,SAASiN,EAAexE,GACtB,IAAIzI,EAEJ,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBiC,KAAKwG,MAAMzI,GAAKyI,EAAMzI,GAI1B,SAASkN,EAAaC,EAAGC,EAAGC,GAC1B,MAAO,CACLF,EAAGA,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAC1E2E,EAAGD,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAC1E4E,EAAGF,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,IAAMxG,KAAKwG,MAAM,KAQ/E,SAAS6E,EAASH,EAAGC,EAAGC,GACtB,OAAOF,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAGhF,SAAS8E,EAASJ,EAAGC,EAAGC,GACtB,OAAOF,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAGhF,SAAS+E,EAASL,EAAGC,EAAGC,GACtB,OAAOF,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,IAAMxG,KAAKwG,MAAM,IAGjF,SAASgF,IACP,IAAIC,EAAczL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,GACzEmB,EAAI3H,KAAKwG,MAAM,GAAKiF,EACpBlK,GAAKvB,KAAKwG,MAAM,GAAKiF,EACrB7D,GAAK5H,KAAKwG,MAAM,GAAKiF,EACrB5J,EAAI7B,KAAKwG,MAAM,GAAKiF,EACpB5D,GAAK7H,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAAMxG,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,KAAOiF,EACxEjK,IAAMxB,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAAMxG,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,KAAOiF,EACzEC,EAAgB,IAAI3F,OAOxB,OANA2F,EAAclF,MAAM,GAAKmB,EACzB+D,EAAclF,MAAM,GAAKjF,EACzBmK,EAAclF,MAAM,GAAKoB,EACzB8D,EAAclF,MAAM,GAAK3E,EACzB6J,EAAclF,MAAM,IAAMqB,EAC1B6D,EAAclF,MAAM,IAAMhF,EACnBkK,EAGT,SAASC,EAAaC,GAEpB,OADoB5L,KAAKwL,mBACJK,kBAAkBD,EAAG,GAAIA,EAAG,GAAIA,EAAG,IAAM,GAGhE,SAASE,EAAcC,GACrB,IAAIhO,EACAE,EAAM8N,EAAI7N,OACV8N,EAAS,GAEb,IAAKjO,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiO,EAAOjO,GAAK4N,EAAaI,EAAIhO,IAG/B,OAAOiO,EAGT,SAASC,EAAoBC,EAAKC,EAAKC,GACrC,IAAI3I,EAAML,iBAAiB,UAAW,GAEtC,GAAIpD,KAAK2K,aACPlH,EAAI,GAAKyI,EAAI,GACbzI,EAAI,GAAKyI,EAAI,GACbzI,EAAI,GAAK0I,EAAI,GACb1I,EAAI,GAAK0I,EAAI,GACb1I,EAAI,GAAK2I,EAAI,GACb3I,EAAI,GAAK2I,EAAI,OACR,CACL,IAAIC,EAAKrM,KAAKwG,MAAM,GAChBkE,EAAK1K,KAAKwG,MAAM,GAChB8F,EAAKtM,KAAKwG,MAAM,GAChB+F,EAAKvM,KAAKwG,MAAM,GAChBgG,EAAMxM,KAAKwG,MAAM,IACjBiG,EAAMzM,KAAKwG,MAAM,IACrB/C,EAAI,GAAKyI,EAAI,GAAKG,EAAKH,EAAI,GAAKI,EAAKE,EACrC/I,EAAI,GAAKyI,EAAI,GAAKxB,EAAKwB,EAAI,GAAKK,EAAKE,EACrChJ,EAAI,GAAK0I,EAAI,GAAKE,EAAKF,EAAI,GAAKG,EAAKE,EACrC/I,EAAI,GAAK0I,EAAI,GAAKzB,EAAKyB,EAAI,GAAKI,EAAKE,EACrChJ,EAAI,GAAK2I,EAAI,GAAKC,EAAKD,EAAI,GAAKE,EAAKE,EACrC/I,EAAI,GAAK2I,EAAI,GAAK1B,EAAK0B,EAAI,GAAKG,EAAKE,EAGvC,OAAOhJ,EAGT,SAASoI,EAAkBX,EAAGC,EAAGC,GAS/B,OANIpL,KAAK2K,aACD,CAACO,EAAGC,EAAGC,GAEP,CAACF,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAAK0E,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,GAAKxG,KAAKwG,MAAM,IAAK0E,EAAIlL,KAAKwG,MAAM,GAAK2E,EAAInL,KAAKwG,MAAM,GAAK4E,EAAIpL,KAAKwG,MAAM,IAAMxG,KAAKwG,MAAM,KAM3O,SAASkG,EAAwBxB,EAAGC,GAClC,GAAInL,KAAK2K,aACP,OAAOO,EAAI,IAAMC,EAGnB,IAAI1B,EAAKzJ,KAAKwG,MACd,OAAO3J,KAAKC,MAAyC,KAAlCoO,EAAIzB,EAAG,GAAK0B,EAAI1B,EAAG,GAAKA,EAAG,MAAc,IAAM,IAAM5M,KAAKC,MAAyC,KAAlCoO,EAAIzB,EAAG,GAAK0B,EAAI1B,EAAG,GAAKA,EAAG,MAAc,IAG/H,SAASkD,IAWP,IALA,IAAI5O,EAAI,EACJyI,EAAQxG,KAAKwG,MACboG,EAAW,YAGR7O,EAAI,IACT6O,GAAYtG,EAHN,IAGWE,EAAMzI,IAHjB,IAIN6O,GAAkB,KAAN7O,EAAW,IAAM,IAC7BA,GAAK,EAGP,OAAO6O,EAGT,SAASC,EAAoBzO,GAG3B,OAAIA,EAAM,MAAYA,EAAM,GAAKA,GAAO,MAAYA,EAAM,EACjDkI,EAHD,IAGMlI,GAHN,IAMDA,EAGT,SAAS0O,IAMP,IAAItG,EAAQxG,KAAKwG,MAcjB,MAAO,UAZEqG,EAAoBrG,EAAM,IAYX,IAVfqG,EAAoBrG,EAAM,IAUA,IAR1BqG,EAAoBrG,EAAM,IAQW,IANrCqG,EAAoBrG,EAAM,IAMsB,IAJhDqG,EAAoBrG,EAAM,KAIiC,IAF3DqG,EAAoBrG,EAAM,KAE4C,IAGjF,OAAO,WACLxG,KAAKuG,MAAQA,EACbvG,KAAKyG,OAASA,EACdzG,KAAK8G,QAAUA,EACf9G,KAAK+G,QAAUA,EACf/G,KAAKgH,QAAUA,EACfhH,KAAKoH,KAAOA,EACZpH,KAAKuH,aAAeA,EACpBvH,KAAKiH,MAAQA,EACbjH,KAAKwH,MAAQA,EACbxH,KAAK0H,aAAeA,EACpB1H,KAAKoI,UAAYA,EACjBpI,KAAKwI,UAAYA,EACjBxI,KAAKiL,aAAeA,EACpBjL,KAAKqL,SAAWA,EAChBrL,KAAKsL,SAAWA,EAChBtL,KAAKuL,SAAWA,EAChBvL,KAAK6L,kBAAoBA,EACzB7L,KAAKiM,oBAAsBA,EAC3BjM,KAAK0M,wBAA0BA,EAC/B1M,KAAK2M,MAAQA,EACb3M,KAAK8M,QAAUA,EACf9M,KAAK+K,MAAQA,EACb/K,KAAKgL,eAAiBA,EACtBhL,KAAK6K,OAASA,EACd7K,KAAK8L,cAAgBA,EACrB9L,KAAK2L,aAAeA,EACpB3L,KAAKwL,iBAAmBA,EACxBxL,KAAK6G,GAAK7G,KAAKwI,UACfxI,KAAK2K,WAAaA,EAClB3K,KAAK4K,WAAY,EACjB5K,KAAK0J,qBAAsB,EAC3B1J,KAAKwG,MAAQpD,iBAAiB,UAAW,IACzCpD,KAAKuG,SAtaI,IAkcb,SAAWwG,EAAMC,GAIf,IAAIC,EAASjN,KASbkN,EAAaF,EAAK/P,IARN,IAEH,GAOLkQ,EAAeH,EAAK/P,IAAI,EALnB,IAMLmQ,EAA0B,EAAfD,EA8Ff,SAASE,EAAKC,GACZ,IAAI3L,EACA4L,EAASD,EAAIpP,OACbsP,EAAKxN,KACLjC,EAAI,EACJ+J,EAAI0F,EAAGzP,EAAIyP,EAAG1F,EAAI,EAClB3G,EAAIqM,EAAGC,EAAI,GAOf,IALKF,IACHD,EAAM,CAACC,MAIFxP,EArHG,KAsHRoD,EAAEpD,GAAKA,IAGT,IAAKA,EAAI,EAAGA,EAzHF,IAyHaA,IACrBoD,EAAEpD,GAAKoD,EAAE2G,EA/GF4F,IA+Ga5F,EAAIwF,EAAIvP,EAAIwP,IAAW5L,EAAIR,EAAEpD,KACjDoD,EAAE2G,GAAKnG,EAIT6L,EAAGlM,EAAI,SAAUqM,GAQf,IANA,IAAIhM,EACAN,EAAI,EACJtD,EAAIyP,EAAGzP,EACP+J,EAAI0F,EAAG1F,EACP3G,EAAIqM,EAAGC,EAEJE,KACLhM,EAAIR,EAAEpD,EA7HD2P,IA6HY3P,EAAI,GACrBsD,EAzIM,IAyIFA,EAAYF,EA9HXuM,KA8HqBvM,EAAEpD,GAAKoD,EAAE2G,EA9H9B4F,IA8HyC5F,EAAInG,KAAOR,EAAE2G,GAAKnG,IAKlE,OAFA6L,EAAGzP,EAAIA,EACPyP,EAAG1F,EAAIA,EACAzG,GAUX,SAASuM,EAAKpM,EAAGG,GAIf,OAHAA,EAAE5D,EAAIyD,EAAEzD,EACR4D,EAAEmG,EAAItG,EAAEsG,EACRnG,EAAE8L,EAAIjM,EAAEiM,EAAEI,QACHlM,EA4BT,SAASmM,EAAOC,EAAMT,GAKpB,IAJA,IACIU,EADAC,EAAaF,EAAO,GAEpBjG,EAAI,EAEDA,EAAImG,EAAW/P,QACpBoP,EAnLOI,IAmLI5F,GAnLJ4F,KAmLiBM,GAAyB,GAAhBV,EAnL1BI,IAmLqC5F,IAAWmG,EAAWC,WAAWpG,KAG/E,OAAOqG,EAASb,GA4BlB,SAASa,EAASxG,GAChB,OAAOyG,OAAOC,aAAa1K,MAAM,EAAGgE,GAjItCqF,EAAqB,WA3ErB,SAAoBe,EAAMO,EAASvL,GACjC,IAAIuK,EAAM,GAKNiB,EAAYT,EA2IlB,SAASU,EAAQC,EAAKC,GACpB,IAEIvK,EAFAwK,EAAS,GACTC,SAAaH,EAGjB,GAAIC,GAAgB,UAAPE,EACX,IAAKzK,KAAQsK,EACX,IACEE,EAAO3L,KAAKwL,EAAQC,EAAItK,GAAOuK,EAAQ,IACvC,MAAO7G,IAIb,OAAO8G,EAAOzQ,OAASyQ,EAAgB,UAAPC,EAAkBH,EAAMA,EAAM,KAxJvCD,EAJvBF,GAAsB,IAAZA,EAAmB,CAC3BO,SAAS,GACPP,GAAW,IAEwBO,QAAU,CAACd,EAAMI,EAASpB,IAAkB,OAATgB,EAiL5E,WACE,SA9LEe,EAmMA,IAAIC,EAAM,IAAIC,WA/MN,KAiNR,OADC/B,EAAOgC,QAAUhC,EAAOiC,UAAUC,gBAAgBJ,GAC5CZ,EAASY,GAChB,MAAOlH,GACP,IAAIuH,EAAUnC,EAAOlR,UACjBsT,EAAUD,GAAWA,EAAQC,QACjC,MAAO,EAAE,IAAIC,KAAQrC,EAAQoC,EAASpC,EAAOsC,OAAQpB,EAASpB,KA7L0ByC,GAAazB,EAAM,GAAIT,GAE7GmC,EAAO,IAAIpC,EAAKC,GAGhBoC,EAAO,WAOT,IANA,IAAIxH,EAAIuH,EAAKnO,EA5BR,GA8BLO,EAAIqL,EAEJhC,EAAI,EAEGhD,EAAIiF,GAETjF,EAtCM,KAsCDA,EAAIgD,GAETrJ,GAxCM,IA0CNqJ,EAAIuE,EAAKnO,EAAE,GAGb,KAAO4G,GAAKkF,GAEVlF,GAAK,EAELrG,GAAK,EAELqJ,KAAO,EAGT,OAAQhD,EAAIgD,GAAKrJ,GAenB,OAZA6N,EAAKC,MAAQ,WACX,OAAmB,EAAZF,EAAKnO,EAAE,IAGhBoO,EAAKE,MAAQ,WACX,OAAOH,EAAKnO,EAAE,GAAK,YAGrBoO,EAAKG,OAASH,EAEd5B,EAAOK,EAASsB,EAAKhC,GAAIV,IAEjBuB,EAAQwB,MAAQ/M,GAAY,SAAU2M,EAAM3B,EAAMgC,EAAcC,GAetE,OAdIA,IAEEA,EAAMvC,GACRG,EAAKoC,EAAOP,GAIdC,EAAKM,MAAQ,WACX,OAAOpC,EAAK6B,EAAM,MAMlBM,GACF/C,EAAY,OAAI0C,EACT3B,GAGG2B,IACXA,EAAMnB,EAAW,WAAYD,EAAUA,EAAQrB,OAASjN,MAAQgN,EAAMsB,EAAQ0B,QA8InFlC,EAAOd,EAAK7O,SAAU4O,GA7OxB,CAkPG,GACHlP,QAGA,IAAIoS,cAAgB,WAWlB,IAAIC,EAAK,CACT,gBAGA,SAAyBvI,EAAGpG,EAAGqG,EAAG/F,EAAGsO,GACnC,IAAIC,EAAMD,IAAO,OAASxI,EAAI,IAAMpG,EAAI,IAAMqG,EAAI,IAAM/F,GAAGwO,QAAQ,MAAO,KAE1E,GAAIC,EAAQF,GACV,OAAOE,EAAQF,GAGjB,IAAIG,EAAY,IAAIC,EAAa,CAAC7I,EAAGpG,EAAGqG,EAAG/F,IAE3C,OADAyO,EAAQF,GAAOG,EACRA,IAXLD,EAAU,GAed,IAMIG,EAAgD,mBAAjBnN,aAEnC,SAASoN,EAAEC,EAAKC,GACd,OAAO,EAAM,EAAMA,EAAM,EAAMD,EAGjC,SAASE,EAAEF,EAAKC,GACd,OAAO,EAAMA,EAAM,EAAMD,EAG3B,SAASG,EAAEH,GACT,OAAO,EAAMA,EAIf,SAASI,EAAWC,EAAIL,EAAKC,GAC3B,QAASF,EAAEC,EAAKC,GAAOI,EAAKH,EAAEF,EAAKC,IAAQI,EAAKF,EAAEH,IAAQK,EAI5D,SAASC,EAASD,EAAIL,EAAKC,GACzB,OAAO,EAAMF,EAAEC,EAAKC,GAAOI,EAAKA,EAAK,EAAMH,EAAEF,EAAKC,GAAOI,EAAKF,EAAEH,GAqClE,SAASH,EAAaU,GACpBlR,KAAKyJ,GAAKyH,EACVlR,KAAKmR,eAAiBV,EAAwB,IAAInN,aA9D7B,IA8D8D,IAAII,MA9DlE,IA+DrB1D,KAAKoR,cAAe,EACpBpR,KAAKqR,IAAMrR,KAAKqR,IAAInO,KAAKlD,MAiE3B,OA9DAwQ,EAAa/N,UAAY,CACvB4O,IAAK,SAAanG,GAChB,IAAIoG,EAAMtR,KAAKyJ,GAAG,GACd8H,EAAMvR,KAAKyJ,GAAG,GACd+H,EAAMxR,KAAKyJ,GAAG,GACdgI,EAAMzR,KAAKyJ,GAAG,GAElB,OADKzJ,KAAKoR,cAAcpR,KAAK0R,cACzBJ,IAAQC,GAAOC,IAAQC,EAAYvG,EAG7B,IAANA,EAAgB,EACV,IAANA,EAAgB,EACb6F,EAAW/Q,KAAK2R,UAAUzG,GAAIqG,EAAKE,IAG5CC,YAAa,WACX,IAAIJ,EAAMtR,KAAKyJ,GAAG,GACd8H,EAAMvR,KAAKyJ,GAAG,GACd+H,EAAMxR,KAAKyJ,GAAG,GACdgI,EAAMzR,KAAKyJ,GAAG,GAClBzJ,KAAKoR,cAAe,EAChBE,IAAQC,GAAOC,IAAQC,GAAKzR,KAAK4R,qBAEvCA,kBAAmB,WAIjB,IAHA,IAAIN,EAAMtR,KAAKyJ,GAAG,GACd+H,EAAMxR,KAAKyJ,GAAG,GAET1L,EAAI,EAAGA,EA9FG,KA8FqBA,EACtCiC,KAAKmR,eAAepT,GAAKgT,EA9FT,GA8FoBhT,EAAqBuT,EAAKE,IAOlEG,UAAW,SAAmBE,GAQ5B,IAPA,IAAIP,EAAMtR,KAAKyJ,GAAG,GACd+H,EAAMxR,KAAKyJ,GAAG,GACdqI,EAAgB9R,KAAKmR,eACrBY,EAAgB,EAChBC,EAAgB,EACHC,KAEVD,GAAgCF,EAAcE,IAAkBH,IAAMG,EAC3ED,GA9GgB,GAmHlB,IACIG,EAAYH,EApHE,KAmHNF,EAAKC,IAFfE,KAEgDF,EAAcE,EAAgB,GAAKF,EAAcE,KAE/FG,EAAelB,EAASiB,EAAWZ,EAAKE,GAE5C,OAAIW,GA3He,KAgDvB,SAA8BN,EAAIO,EAASd,EAAKE,GAC9C,IAAK,IAAIzT,EAAI,EAAGA,EAlDM,IAkDmBA,EAAG,CAC1C,IAAIsU,EAAepB,EAASmB,EAASd,EAAKE,GAC1C,GAAqB,IAAjBa,EAAsB,OAAOD,EAEjCA,IADerB,EAAWqB,EAASd,EAAKE,GAAOK,GACzBQ,EAGxB,OAAOD,EAoEIE,CAAqBT,EAAIK,EAAWZ,EAAKE,GACtB,IAAjBW,EACFD,EAjGb,SAAyBL,EAAIU,EAAIC,EAAIlB,EAAKE,GACxC,IAAIiB,EACAC,EACA3U,EAAI,EAER,IAEE0U,EAAW1B,EADX2B,EAAWH,GAAMC,EAAKD,GAAM,EACIjB,EAAKE,GAAOK,GAE7B,EACbW,EAAKE,EAELH,EAAKG,QAEA7V,KAAKQ,IAAIoV,GA1CQ,QA0C+B1U,EAzC1B,IA2C/B,OAAO2U,EAmFIC,CAAgBd,EAAIE,EAAeA,EA5H1B,GA4H2DT,EAAKE,KAI/EtB,EAjKW,GA2LpB,SAAS0C,gBAAgBC,EAASC,GAChC,IAAI/U,EAEAgV,EADA9U,EAAM4U,EAAQ3U,OAGlB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGxB,IAAK,IAAIiV,KAFTD,EAAkBF,EAAQ9U,GAAG0E,UAGvBsQ,EAAgBE,eAAeD,KAAOF,EAAYrQ,UAAUuQ,GAAQD,EAAgBC,IAK9F,SAASE,cAAcC,EAAQhP,GAC7B,OAAOiP,OAAOC,yBAAyBF,EAAQhP,GAGjD,SAASmP,oBAAoB7Q,GAC3B,SAAS8Q,KAGT,OADAA,EAAc9Q,UAAYA,EACnB8Q,EAGT,SAASC,cAEI3W,KAEX,SAAS4W,EAAcC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACzC,IAAIC,EAAON,EAAKG,EAAKF,EAAKG,EAAKF,EAAKG,EAAKD,EAAKD,EAAKE,EAAKL,EAAKE,EAAKD,EAClE,OAAOK,GAAQ,MAASA,EAAO,KA4BjC,IAAIC,EACK,SAAU/H,EAAKC,EAAKC,EAAK8H,GAC9B,IACInM,EACAhK,EAAGE,EACHkW,EACAC,EAEAC,EANAC,EAAgB/V,qBAKhBgW,EAAc,EAEdC,EAAQ,GACRC,EAAY,GACZC,EAAaC,mBAAmBC,aAGpC,IAFA3W,EAAMmO,EAAIlO,OAEL6J,EAAI,EAAGA,EAAIuM,EAAevM,GAAK,EAAG,CAIrC,IAHAqM,EAAOrM,GAAKuM,EAAgB,GAC5BD,EAAa,EAERtW,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBoW,EAAUnX,OAAO,EAAIoX,EAAM,GAAKlI,EAAInO,GAAK,EAAIf,OAAO,EAAIoX,EAAM,GAAKA,EAAOhI,EAAIrO,GAAK,GAAK,EAAIqW,GAAQpX,OAAOoX,EAAM,GAAKF,EAAInW,GAAKf,OAAOoX,EAAM,GAAKjI,EAAIpO,GACrJyW,EAAMzW,GAAKoW,EAEU,OAAjBM,EAAU1W,KACZsW,GAAcrX,OAAOwX,EAAMzW,GAAK0W,EAAU1W,GAAI,IAGhD0W,EAAU1W,GAAKyW,EAAMzW,GAGnBsW,IAEFE,GADAF,EAAanX,QAAQmX,IAIvBK,EAAWG,SAAS9M,GAAKqM,EACzBM,EAAWI,QAAQ/M,GAAKwM,EAI1B,OADAG,EAAWH,YAAcA,EAClBG,GA6BX,SAASK,EAAW7W,GAClB8B,KAAKgV,cAAgB,EACrBhV,KAAKkR,OAAS,IAAIxN,MAAMxF,GAG1B,SAAS+W,EAAUC,EAASV,GAC1BxU,KAAKmV,cAAgBD,EACrBlV,KAAKwU,MAAQA,EAGf,IACMY,EADFC,GACED,EAAa,GACV,SAAUlJ,EAAKC,EAAKC,EAAK8H,GAC9B,IAAIoB,GAAcpJ,EAAI,GAAK,IAAMA,EAAI,GAAK,IAAMC,EAAI,GAAK,IAAMA,EAAI,GAAK,IAAMC,EAAI,GAAK,IAAMA,EAAI,GAAK,IAAM8H,EAAI,GAAK,IAAMA,EAAI,IAAI7D,QAAQ,MAAO,KAElJ,IAAK+E,EAAWE,GAAa,CAC3B,IACIvN,EAAGhK,EAAGE,EACNkW,EACAC,EAEAC,EACAG,EANAF,EAAgB/V,qBAIhBgW,EAAc,EAGdE,EAAY,KAEG,IAAfvI,EAAIhO,SAAiBgO,EAAI,IAAMC,EAAI,IAAMD,EAAI,IAAMC,EAAI,KAAOsH,EAAcvH,EAAI,GAAIA,EAAI,GAAIC,EAAI,GAAIA,EAAI,GAAID,EAAI,GAAKE,EAAI,GAAIF,EAAI,GAAKE,EAAI,KAAOqH,EAAcvH,EAAI,GAAIA,EAAI,GAAIC,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAK+H,EAAI,GAAI/H,EAAI,GAAK+H,EAAI,MAC/NI,EAAgB,GAGlB,IAAIiB,EAAa,IAAIR,EAAWT,GAGhC,IAFArW,EAAMmO,EAAIlO,OAEL6J,EAAI,EAAGA,EAAIuM,EAAevM,GAAK,EAAG,CAKrC,IAJAyM,EAAQlW,iBAAiBL,GACzBmW,EAAOrM,GAAKuM,EAAgB,GAC5BD,EAAa,EAERtW,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBoW,EAAUnX,OAAO,EAAIoX,EAAM,GAAKlI,EAAInO,GAAK,EAAIf,OAAO,EAAIoX,EAAM,GAAKA,GAAQlI,EAAInO,GAAKqO,EAAIrO,IAAM,GAAK,EAAIqW,GAAQpX,OAAOoX,EAAM,IAAMjI,EAAIpO,GAAKmW,EAAInW,IAAMf,OAAOoX,EAAM,GAAKjI,EAAIpO,GAC3KyW,EAAMzW,GAAKoW,EAEO,OAAdM,IACFJ,GAAcrX,OAAOwX,EAAMzW,GAAK0W,EAAU1W,GAAI,IAKlDwW,GADAF,EAAanX,QAAQmX,GAErBkB,EAAWrE,OAAOnJ,GAAK,IAAIkN,EAAUZ,EAAYG,GACjDC,EAAYD,EAGde,EAAWP,cAAgBT,EAC3Ba,EAAWE,GAAcC,EAG3B,OAAOH,EAAWE,KAItB,SAASE,EAAgBpB,EAAMmB,GAC7B,IAAIV,EAAWU,EAAWV,SACtBC,EAAUS,EAAWT,QACrB7W,EAAM4W,EAAS3W,OACfuX,EAAUnY,UAAUW,EAAM,GAAKmW,GAC/BsB,EAAYtB,EAAOmB,EAAWhB,YAC9BoB,EAAQ,EAEZ,GAAIF,IAAYxX,EAAM,GAAiB,IAAZwX,GAAiBC,IAAcZ,EAAQW,GAChE,OAAOZ,EAASY,GAKhB,IAHA,IAAIG,EAAMd,EAAQW,GAAWC,GAAa,EAAI,EAC1C9W,GAAO,EAEJA,GAQL,GAPIkW,EAAQW,IAAYC,GAAaZ,EAAQW,EAAU,GAAKC,GAC1DC,GAASD,EAAYZ,EAAQW,KAAaX,EAAQW,EAAU,GAAKX,EAAQW,IACzE7W,GAAO,GAEP6W,GAAWG,EAGTH,EAAU,GAAKA,GAAWxX,EAAM,EAAG,CAErC,GAAIwX,IAAYxX,EAAM,EACpB,OAAO4W,EAASY,GAGlB7W,GAAO,EAIX,OAAOiW,EAASY,IAAYZ,EAASY,EAAU,GAAKZ,EAASY,IAAYE,EAe7E,IAAIE,EAAwBzS,iBAAiB,UAAW,GAyCxD,MAAO,CACL0S,kBA9KF,SAA2BC,GACzB,IAKIhY,EALAiY,EAAiBC,qBAAqBrB,aACtCsB,EAASH,EAAUnO,EACnBuO,EAAQJ,EAAU3U,EAClBgV,EAAQL,EAAU5N,EAClBkO,EAAQN,EAAUhY,EAElBE,EAAM8X,EAAUO,QAChBxB,EAAUkB,EAAelB,QACzByB,EAAc,EAElB,IAAKxY,EAAI,EAAGA,EAAIE,EAAM,EAAGF,GAAK,EAC5B+W,EAAQ/W,GAAKkW,EAAgBkC,EAAMpY,GAAIoY,EAAMpY,EAAI,GAAIqY,EAAMrY,GAAIsY,EAAMtY,EAAI,IACzEwY,GAAezB,EAAQ/W,GAAGwW,YAS5B,OANI2B,GAAUjY,IACZ6W,EAAQ/W,GAAKkW,EAAgBkC,EAAMpY,GAAIoY,EAAM,GAAIC,EAAMrY,GAAIsY,EAAM,IACjEE,GAAezB,EAAQ/W,GAAGwW,aAG5ByB,EAAeO,YAAcA,EACtBP,GAyJPQ,cAzCF,SAAuBtK,EAAKC,EAAKC,EAAK8H,EAAKuC,EAAWC,EAASnB,GAE7D,IAGIxX,EAHA4Y,EAAKnB,EADTiB,EAAYA,EAAY,EAAI,EAAIA,EAAY,EAAI,EAAIA,EAChBlB,GAEhCqB,EAAKpB,EADTkB,EAAUA,EAAU,EAAI,EAAIA,EACMnB,GAE9BtX,EAAMiO,EAAIhO,OACV2Y,EAAK,EAAIF,EACTG,EAAK,EAAIF,EACTG,EAASF,EAAKA,EAAKA,EACnBG,EAAWL,EAAKE,EAAKA,EAAK,EAC1BI,EAAWN,EAAKA,EAAKE,EAAK,EAC1BK,EAASP,EAAKA,EAAKA,EAEnBQ,EAASN,EAAKA,EAAKC,EACnBM,EAAWT,EAAKE,EAAKC,EAAKD,EAAKF,EAAKG,EAAKD,EAAKA,EAAKD,EACnDS,EAAWV,EAAKA,EAAKG,EAAKD,EAAKF,EAAKC,EAAKD,EAAKE,EAAKD,EACnDU,EAASX,EAAKA,EAAKC,EAEnBW,EAASV,EAAKC,EAAKA,EACnBU,EAAWb,EAAKG,EAAKA,EAAKD,EAAKD,EAAKE,EAAKD,EAAKC,EAAKF,EACnDa,EAAWd,EAAKC,EAAKE,EAAKD,EAAKD,EAAKA,EAAKD,EAAKG,EAAKF,EACnDc,EAASf,EAAKC,EAAKA,EAEnBe,EAASb,EAAKA,EAAKA,EACnBc,EAAWhB,EAAKE,EAAKA,EAAKA,EAAKF,EAAKE,EAAKA,EAAKA,EAAKF,EACnDiB,EAAWjB,EAAKA,EAAKE,EAAKA,EAAKF,EAAKA,EAAKA,EAAKE,EAAKF,EACnDkB,EAASlB,EAAKA,EAAKA,EAEvB,IAAK7Y,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB8X,EAA0B,EAAJ9X,GAASlB,KAAKC,MAAoF,KAA7Eia,EAAS7K,EAAInO,GAAKiZ,EAAW5K,EAAIrO,GAAKkZ,EAAW/C,EAAInW,GAAKmZ,EAAS/K,EAAIpO,KAAc,IAChI8X,EAA0B,EAAJ9X,EAAQ,GAAKlB,KAAKC,MAAoF,KAA7Eqa,EAASjL,EAAInO,GAAKqZ,EAAWhL,EAAIrO,GAAKsZ,EAAWnD,EAAInW,GAAKuZ,EAASnL,EAAIpO,KAAc,IACpI8X,EAA0B,EAAJ9X,EAAQ,GAAKlB,KAAKC,MAAoF,KAA7Eya,EAASrL,EAAInO,GAAKyZ,EAAWpL,EAAIrO,GAAK0Z,EAAWvD,EAAInW,GAAK2Z,EAASvL,EAAIpO,KAAc,IACpI8X,EAA0B,EAAJ9X,EAAQ,GAAKlB,KAAKC,MAAoF,KAA7E6a,EAASzL,EAAInO,GAAK6Z,EAAWxL,EAAIrO,GAAK8Z,EAAW3D,EAAInW,GAAK+Z,EAAS3L,EAAIpO,KAAc,IAGtI,OAAO8X,GAMPkC,kBAvDF,SAA2B7L,EAAKC,EAAKC,EAAK8H,EAAK8D,EAASzC,GACtD,IAAIqB,EAAKpB,EAAgBwC,EAASzC,GAE9BuB,EAAK,EAAIF,EAGb,MAAO,CAFG/Z,KAAKC,MAAwK,KAAjKga,EAAKA,EAAKA,EAAK5K,EAAI,IAAM0K,EAAKE,EAAKA,EAAKA,EAAKF,EAAKE,EAAKA,EAAKA,EAAKF,GAAMxK,EAAI,IAAMwK,EAAKA,EAAKE,EAAKA,EAAKF,EAAKA,EAAKA,EAAKE,EAAKF,GAAM1C,EAAI,GAAK0C,EAAKA,EAAKA,EAAKzK,EAAI,KAAc,IACrLtP,KAAKC,MAAwK,KAAjKga,EAAKA,EAAKA,EAAK5K,EAAI,IAAM0K,EAAKE,EAAKA,EAAKA,EAAKF,EAAKE,EAAKA,EAAKA,EAAKF,GAAMxK,EAAI,IAAMwK,EAAKA,EAAKE,EAAKA,EAAKF,EAAKA,EAAKA,EAAKE,EAAKF,GAAM1C,EAAI,GAAK0C,EAAKA,EAAKA,EAAKzK,EAAI,KAAc,MAmD/LkJ,gBAAiBA,EACjB5B,cAAeA,EACfwE,cAvPF,SAAuBvE,EAAIC,EAAIuE,EAAItE,EAAIC,EAAIsE,EAAIrE,EAAIC,EAAIqE,GACrD,GAAW,IAAPF,GAAmB,IAAPC,GAAmB,IAAPC,EAC1B,OAAO3E,EAAcC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAG3C,IAGIsE,EAHAC,EAAQzb,KAAKM,KAAKN,KAAKI,IAAI2W,EAAKF,EAAI,GAAK7W,KAAKI,IAAI4W,EAAKF,EAAI,GAAK9W,KAAKI,IAAIkb,EAAKD,EAAI,IAClFK,EAAQ1b,KAAKM,KAAKN,KAAKI,IAAI6W,EAAKJ,EAAI,GAAK7W,KAAKI,IAAI8W,EAAKJ,EAAI,GAAK9W,KAAKI,IAAImb,EAAKF,EAAI,IAClFM,EAAQ3b,KAAKM,KAAKN,KAAKI,IAAI6W,EAAKF,EAAI,GAAK/W,KAAKI,IAAI8W,EAAKF,EAAI,GAAKhX,KAAKI,IAAImb,EAAKD,EAAI,IAetF,OAVIE,EAFAC,EAAQC,EACND,EAAQE,EACCF,EAAQC,EAAQC,EAEhBA,EAAQD,EAAQD,EAEpBE,EAAQD,EACNC,EAAQD,EAAQD,EAEhBC,EAAQD,EAAQE,IAGV,MAAUH,EAAW,QA/E5C,WAIE,IAHA,IAAII,EAAW,EACXC,EAAU,CAAC,KAAM,MAAO,SAAU,KAE7BxN,EAAI,EAAGA,EAAIwN,EAAQxa,SAAWhC,OAAOyc,wBAAyBzN,EACrEhP,OAAOyc,sBAAwBzc,OAAOwc,EAAQxN,GAAK,yBACnDhP,OAAO0c,qBAAuB1c,OAAOwc,EAAQxN,GAAK,yBAA2BhP,OAAOwc,EAAQxN,GAAK,+BAG9FhP,OAAOyc,wBAAuBzc,OAAOyc,sBAAwB,SAAU5V,EAAUjE,GACpF,IAAI+Z,GAAW,IAAIvJ,MAAOwJ,UACtBC,EAAalc,KAAKY,IAAI,EAAG,IAAMob,EAAWJ,IAC1CO,EAAKC,YAAW,WAClBlW,EAAS8V,EAAWE,KACnBA,GAEH,OADAN,EAAWI,EAAWE,EACfC,IAEJ9c,OAAO0c,uBAAsB1c,OAAO0c,qBAAuB,SAAUI,GACxEE,aAAaF,KAnBjB,GAoTA,IAAIG,IAAM3F,cAEV,SAAS4F,sBAEP,SAASC,EAAeC,EAAQC,EAAOC,GACrC,IAAIC,EAEA1b,EAEA+J,EAAG4R,EAAM3R,EAAG4R,EADZ1b,EAAMqb,EAAOpb,OAGjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGxB,GAAM,OAFN0b,EAAYH,EAAOvb,MAES0b,EAAUG,UAAtC,CAaA,GATAH,EAAUG,WAAY,EAElBH,EAAUI,KACZP,EAAOvb,EAAI,GAAG+b,GAAKL,EAAUI,IAGnB,IACC,EAETJ,EAAUM,QAAS,CACrB,IAAIC,EAAYP,EAAUQ,gBAG1B,IAFAP,EAAOM,EAAU9b,OAEZ4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB,GAAIkS,EAAUlS,GAAG8D,GAAG7D,EAAEhK,EACpBmc,EAA6BF,EAAUlS,GAAG8D,GAAG7D,QAI7C,IAFA4R,EAAOK,EAAUlS,GAAG8D,GAAG7D,EAAE7J,OAEpB6J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACrBiS,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAG5G,GACvB+Y,EAA6BF,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAG5G,EAAE,IAGlD6Y,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAGF,GACvBqS,EAA6BF,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAGF,EAAE,IAOzC,IAAjB4R,EAAUnR,IACZmR,EAAUH,OAASa,EAAeV,EAAUW,MAAOb,GACnDF,EAAeI,EAAUH,OAAQC,EAAOC,IACd,IAAjBC,EAAUnR,GACnB+R,EAAeZ,EAAUa,QACA,GAAhBb,EAAUnR,IACnBiS,EAAad,EAAWD,IAK9B,SAASW,EAAenB,EAAIO,GAI1B,IAHA,IAAIxb,EAAI,EACJE,EAAMsb,EAAMrb,OAETH,EAAIE,GAAK,CACd,GAAIsb,EAAMxb,GAAGib,KAAOA,EAClB,OAAKO,EAAMxb,GAAGub,OAAOkB,OAKdC,KAAKC,MAAMD,KAAKE,UAAUpB,EAAMxb,GAAGub,UAJxCC,EAAMxb,GAAGub,OAAOkB,QAAS,EAClBjB,EAAMxb,GAAGub,QAMpBvb,GAAK,GAIT,SAASsc,EAAe5W,GACtB,IAAI1F,EAEA+J,EAAG4R,EAGP,IAAK3b,EAJK0F,EAAIvF,OAIC,EAAGH,GAAK,EAAGA,GAAK,EAC7B,GAAiB,MAAb0F,EAAI1F,GAAGuK,GAAY,CACrB,GAAI7E,EAAI1F,GAAG6c,GAAG7S,EAAEhK,EACdmc,EAA6BzW,EAAI1F,GAAG6c,GAAG7S,QAIvC,IAFA2R,EAAOjW,EAAI1F,GAAG6c,GAAG7S,EAAE7J,OAEd4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACrBrE,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAG3G,GACjB+Y,EAA6BzW,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAG3G,EAAE,IAG5CsC,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAGD,GACjBqS,EAA6BzW,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAGD,EAAE,KAKzC,MACW,MAAbpE,EAAI1F,GAAGuK,IAChB+R,EAAe5W,EAAI1F,GAAG8c,IAkB5B,SAASX,EAA6BY,GACpC,IAAI/c,EACAE,EAAM6c,EAAK/c,EAAEG,OAEjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB+c,EAAK/c,EAAEA,GAAG,IAAM+c,EAAK1Z,EAAErD,GAAG,GAC1B+c,EAAK/c,EAAEA,GAAG,IAAM+c,EAAK1Z,EAAErD,GAAG,GAC1B+c,EAAK3S,EAAEpK,GAAG,IAAM+c,EAAK1Z,EAAErD,GAAG,GAC1B+c,EAAK3S,EAAEpK,GAAG,IAAM+c,EAAK1Z,EAAErD,GAAG,GAI9B,SAASgd,EAAaC,EAASC,GAC7B,IAAIC,EAAcD,EAAoBA,EAAkBE,MAAM,KAAO,CAAC,IAAK,IAAK,KAEhF,OAAIH,EAAQ,GAAKE,EAAY,MAElBA,EAAY,GAAKF,EAAQ,MAIhCA,EAAQ,GAAKE,EAAY,MAElBA,EAAY,GAAKF,EAAQ,MAIhCA,EAAQ,GAAKE,EAAY,MAElBA,EAAY,GAAKF,EAAQ,UAA7B,IAKT,IA2CMI,EA3CFC,EAAY,WACd,IAAID,EAAiB,CAAC,EAAG,EAAG,IAY5B,SAASE,EAAchC,GACrB,IAAIvb,EAXmBwd,EACnBC,EAWAvd,EAAMqb,EAAOpb,OAEjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACH,IAAjBub,EAAOvb,GAAGuK,KAfOiT,EAgBHjC,EAAOvb,GAfvByd,WAAeD,EAAU5Z,EAAEE,EAC/B0Z,EAAU5Z,EAAEE,EAAI,CACdkG,EAAG,CAAC,CACF5G,EAAGqa,EACH7Z,EAAG,MAgBT,OAAO,SAAU8Z,GACf,GAAIV,EAAaK,EAAgBK,EAAcra,KAC7Cka,EAAcG,EAAcnC,QAExBmC,EAAcC,QAAQ,CACxB,IAAI3d,EACAE,EAAMwd,EAAcC,OAAOxd,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpB0d,EAAcC,OAAO3d,GAAGub,QAC1BgC,EAAcG,EAAcC,OAAO3d,GAAGub,UAlClC,GA0CZqC,GACEP,EAAiB,CAAC,EAAG,EAAG,IACrB,SAAUK,GACf,GAAIA,EAAcG,QAAUb,EAAaK,EAAgBK,EAAcra,GAAI,CACzE,IAAIrD,EAEA+J,EACA4R,EAGAmC,EAAUC,EALV7d,EAAMwd,EAAcG,MAAM1d,OAO9B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,GAAI0d,EAAcG,MAAM7d,GAAGge,MAAQN,EAAcG,MAAM7d,GAAGge,KAAKzB,OAI7D,IAFAZ,GADAoC,EAAQL,EAAcG,MAAM7d,GAAGge,KAAKzB,OAAO,GAAGO,IACjC3c,OAER4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB+T,EAAWC,EAAMhU,GAAG8S,GAAG7S,GAETiU,cACZ9B,EAA6B4B,EAAMhU,GAAG8S,GAAG7S,GACzC8T,EAASG,aAAc,MASjCC,EAAc,WAChB,IAAIb,EAAiB,CAAC,EAAG,EAAG,GAE5B,SAASc,EAAc5B,GACrB,IAAIvc,EAEA+J,EAAG4R,EADHzb,EAAMqc,EAAOpc,OAGjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,GAAqB,OAAjBuc,EAAOvc,GAAGuK,GACZ4T,EAAc5B,EAAOvc,GAAG8c,SACnB,GAAqB,OAAjBP,EAAOvc,GAAGuK,IAAgC,OAAjBgS,EAAOvc,GAAGuK,GAC5C,GAAIgS,EAAOvc,GAAG6J,EAAEG,GAAKuS,EAAOvc,GAAG6J,EAAEG,EAAE,GAAGhK,EAGpC,IAFA2b,EAAOY,EAAOvc,GAAG6J,EAAEG,EAAE7J,OAEhB4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACrBwS,EAAOvc,GAAG6J,EAAEG,EAAED,GAAG3G,IACnBmZ,EAAOvc,GAAG6J,EAAEG,EAAED,GAAG3G,EAAE,IAAM,IACzBmZ,EAAOvc,GAAG6J,EAAEG,EAAED,GAAG3G,EAAE,IAAM,IACzBmZ,EAAOvc,GAAG6J,EAAEG,EAAED,GAAG3G,EAAE,IAAM,IACzBmZ,EAAOvc,GAAG6J,EAAEG,EAAED,GAAG3G,EAAE,IAAM,KAGvBmZ,EAAOvc,GAAG6J,EAAEG,EAAED,GAAGD,IACnByS,EAAOvc,GAAG6J,EAAEG,EAAED,GAAGD,EAAE,IAAM,IACzByS,EAAOvc,GAAG6J,EAAEG,EAAED,GAAGD,EAAE,IAAM,IACzByS,EAAOvc,GAAG6J,EAAEG,EAAED,GAAGD,EAAE,IAAM,IACzByS,EAAOvc,GAAG6J,EAAEG,EAAED,GAAGD,EAAE,IAAM,UAI7ByS,EAAOvc,GAAG6J,EAAEG,EAAE,IAAM,IACpBuS,EAAOvc,GAAG6J,EAAEG,EAAE,IAAM,IACpBuS,EAAOvc,GAAG6J,EAAEG,EAAE,IAAM,IACpBuS,EAAOvc,GAAG6J,EAAEG,EAAE,IAAM,IAM5B,SAASuT,EAAchC,GACrB,IAAIvb,EACAE,EAAMqb,EAAOpb,OAEjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACH,IAAjBub,EAAOvb,GAAGuK,IACZ4T,EAAc5C,EAAOvb,GAAGuc,QAK9B,OAAO,SAAUmB,GACf,GAAIV,EAAaK,EAAgBK,EAAcra,KAC7Cka,EAAcG,EAAcnC,QAExBmC,EAAcC,QAAQ,CACxB,IAAI3d,EACAE,EAAMwd,EAAcC,OAAOxd,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpB0d,EAAcC,OAAO3d,GAAGub,QAC1BgC,EAAcG,EAAcC,OAAO3d,GAAGub,UA7DhC,GAqEd6C,EAAc,WAChB,IAAIf,EAAiB,CAAC,EAAG,EAAG,IAE5B,SAASf,EAAe5W,GACtB,IAAI1F,EAEA+J,EAAG4R,EAGP,IAAK3b,EAJK0F,EAAIvF,OAIC,EAAGH,GAAK,EAAGA,GAAK,EAC7B,GAAiB,MAAb0F,EAAI1F,GAAGuK,GAAY,CACrB,GAAI7E,EAAI1F,GAAG6c,GAAG7S,EAAEhK,EACd0F,EAAI1F,GAAG6c,GAAG7S,EAAEH,EAAInE,EAAI1F,GAAGmY,YAIvB,IAFAwD,EAAOjW,EAAI1F,GAAG6c,GAAG7S,EAAE7J,OAEd4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACrBrE,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAG3G,IACjBsC,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAG3G,EAAE,GAAGyG,EAAInE,EAAI1F,GAAGmY,QAG7BzS,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAGD,IACjBpE,EAAI1F,GAAG6c,GAAG7S,EAAED,GAAGD,EAAE,GAAGD,EAAInE,EAAI1F,GAAGmY,SAK1B,MACW,MAAbzS,EAAI1F,GAAGuK,IAChB+R,EAAe5W,EAAI1F,GAAG8c,IAK5B,SAASS,EAAchC,GACrB,IAAIG,EACA1b,EAEA+J,EAAG4R,EAAM3R,EAAG4R,EADZ1b,EAAMqb,EAAOpb,OAGjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAG3B,IAFA0b,EAAYH,EAAOvb,IAELgc,QAAS,CACrB,IAAIC,EAAYP,EAAUQ,gBAG1B,IAFAP,EAAOM,EAAU9b,OAEZ4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB,GAAIkS,EAAUlS,GAAG8D,GAAG7D,EAAEhK,EACpBic,EAAUlS,GAAG8D,GAAG7D,EAAEH,EAAIoS,EAAUlS,GAAGsU,QAInC,IAFAzC,EAAOK,EAAUlS,GAAG8D,GAAG7D,EAAE7J,OAEpB6J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACrBiS,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAG5G,IACvB6Y,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAG5G,EAAE,GAAGyG,EAAIoS,EAAUlS,GAAGsU,IAGzCpC,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAGF,IACvBmS,EAAUlS,GAAG8D,GAAG7D,EAAEA,GAAGF,EAAE,GAAGD,EAAIoS,EAAUlS,GAAGsU,IAOhC,IAAjB3C,EAAUnR,IACZ+R,EAAeZ,EAAUa,SAK/B,OAAO,SAAUmB,GACf,GAAIV,EAAaK,EAAgBK,EAAcra,KAC7Cka,EAAcG,EAAcnC,QAExBmC,EAAcC,QAAQ,CACxB,IAAI3d,EACAE,EAAMwd,EAAcC,OAAOxd,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpB0d,EAAcC,OAAO3d,GAAGub,QAC1BgC,EAAcG,EAAcC,OAAO3d,GAAGub,UAlFhC,GAuGlB,SAASiB,EAAawB,EAAMvC,GACF,IAApBuC,EAAKpa,EAAEgG,EAAEzJ,QAAkB,MAAO6d,EAAKpa,EAAEF,IAC3Csa,EAAKM,aAAc,GAIvB,IAAIC,EAAW,CACf,aApBA,SAAsBb,EAAejC,GAC/BiC,EAAcc,aAIlBN,EAAYR,GACZJ,EAAUI,GACVE,EAAWF,GACXU,EAAYV,GACZpC,EAAeoC,EAAcnC,OAAQmC,EAAcC,OAAQlC,GAC3DiC,EAAcc,YAAa,KAe7B,OAJAD,EAASL,YAAcA,EACvBK,EAASX,WAAaA,EACtBW,EAASH,YAAcA,EACvBG,EAASjD,eAAiBA,EACnBiD,EAGT,IAAIE,YAAcpD,sBAEdqD,YAAc,WAChB,IACIC,EAAY,CACdC,EAAG,EACHC,KAAM,EACNtC,OAAQ,IAENuC,EAAqB,GAmBzB,SAASC,EAAUC,EAAMC,GACvB,IAAIC,EAAalZ,UAAU,QAC3BkZ,EAAWle,MAAMme,WAAaF,EAC9B,IAAIG,EAAOpZ,UAAU,QAErBoZ,EAAKC,UAAY,iBAEjBH,EAAWle,MAAMC,SAAW,WAC5Bie,EAAWle,MAAMG,KAAO,WACxB+d,EAAWle,MAAME,IAAM,WAEvBge,EAAWle,MAAMse,SAAW,QAE5BJ,EAAWle,MAAMue,YAAc,SAC/BL,EAAWle,MAAMwe,UAAY,SAC7BN,EAAWle,MAAMye,WAAa,SAC9BP,EAAWle,MAAM0e,cAAgB,IACjCR,EAAWS,YAAYP,GACvBtZ,SAAS8Z,KAAKD,YAAYT,GAE1B,IAAIvP,EAAQyP,EAAKS,YAEjB,OADAT,EAAKpe,MAAMme,WApCb,SAAyBH,GACvB,IACIhf,EADA8f,EAAcd,EAAK5B,MAAM,KAEzBld,EAAM4f,EAAY3f,OAClB4f,EAAkB,GAEtB,IAAK/f,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACD,eAAnB8f,EAAY9f,IAA0C,cAAnB8f,EAAY9f,IACjD+f,EAAgB9a,KAAK6a,EAAY9f,IAIrC,OAAO+f,EAAgBC,KAAK,KAwBJC,CAAgBjB,GAAQ,KAAOC,EAChD,CACLG,KAAMA,EACNR,EAAGjP,EACHuQ,OAAQhB,GAiDZ,SAASiB,EAAaC,EAAKC,GACzB,IAAIC,EAAUza,SAAS,QAmBvB,OAlBAya,EAAQtf,MAAMse,SAAW,QAEzBgB,EAAQC,aAAa,cAAeF,EAASG,SAC7CF,EAAQC,aAAa,aAAcF,EAASI,QAC5CH,EAAQC,aAAa,cAAeF,EAASK,SAC7CJ,EAAQK,YAAc,IAElBN,EAASO,QACXN,EAAQtf,MAAMme,WAAa,UAC3BmB,EAAQC,aAAa,QAASF,EAASO,SAEvCN,EAAQtf,MAAMme,WAAakB,EAASG,QAGtCJ,EAAIT,YAAYW,GACIta,UAAU,UAAU6a,WAAW,MACrC7B,KAAOqB,EAASK,QAAU,IAAML,EAASI,OAAS,UAAYJ,EAASG,QAE9EF,EA/GTxB,EAAqBA,EAAmBgC,OAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAwThP,IAAIC,EAAO,WACT9e,KAAK+e,MAAQ,GACb/e,KAAK4b,MAAQ,KACb5b,KAAKgf,cAAgB,EACrBhf,KAAKif,UAAW,EAChBjf,KAAKkf,SAAW5P,KAAK6P,MACrBnf,KAAKof,kBAAoBpf,KAAKqf,YAAYnc,KAAKlD,MAC/CA,KAAKsf,uBAAyBtf,KAAKuf,iBAAiBrc,KAAKlD,OAe3D,OAXA8e,EAAKU,0BAnBL,WACE,OAAO3C,GA4BTiC,EAAKrc,UATe,CAClBgd,SAlHF,SAAkB7D,GAChB,GAAKA,EAAL,CAIK5b,KAAK4b,QACR5b,KAAK4b,MAAQ,IAGf,IAAI7d,EAEA+J,EAEA4X,EAHAzhB,EAAM2d,EAAM1d,OAEZwb,EAAO1Z,KAAK4b,MAAM1d,OAGtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAI3B,IAHA+J,EAAI,EACJ4X,GAAQ,EAED5X,EAAI4R,GACL1Z,KAAK4b,MAAM9T,GAAG/I,QAAU6c,EAAM7d,GAAGgB,OAASiB,KAAK4b,MAAM9T,GAAGyW,UAAY3C,EAAM7d,GAAGwgB,SAAWve,KAAK4b,MAAM9T,GAAG6X,KAAO/D,EAAM7d,GAAG4hB,KACxHD,GAAQ,GAGV5X,GAAK,EAGF4X,IACH1f,KAAK4b,MAAM5Y,KAAK4Y,EAAM7d,IACtB2b,GAAQ,MAsFZkG,SApNF,SAAkBxB,EAAUyB,GAC1B,GAAKzB,EAAL,CAKA,GAAIpe,KAAK4b,MAGP,OAFA5b,KAAKif,UAAW,OAChBjf,KAAK+e,MAAQX,EAAS0B,MAIxB,IACI/hB,EADAgiB,EAAU3B,EAAS0B,KAEnB7hB,EAAM8hB,EAAQ7hB,OACd8hB,EAAgB/hB,EAEpB,IAAKF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAC3B,IACIkiB,EACAnY,EAFAoY,GAAiB,EAOrB,GAJAH,EAAQhiB,GAAGoiB,QAAS,EACpBJ,EAAQhiB,GAAGqiB,SAAWtD,EAAUiD,EAAQhiB,GAAGwgB,QAAS,aACpDwB,EAAQhiB,GAAGsiB,SAAWvD,EAAUiD,EAAQhiB,GAAGwgB,QAAS,cAE/CwB,EAAQhiB,GAAGuiB,OAGT,GAA2B,MAAvBP,EAAQhiB,GAAGwiB,SAAyC,IAAtBR,EAAQhiB,GAAGyiB,QAOlD,IANAP,EAAiBpc,SAAS4c,iBAAiB,kCAAoCV,EAAQhiB,GAAGwgB,QAAU,qCAAuCwB,EAAQhiB,GAAGwgB,QAAU,OAE7IrgB,OAAS,IAC1BgiB,GAAiB,GAGfA,EAAgB,CAClB,IAAI/e,EAAI4C,UAAU,SAClB5C,EAAEmd,aAAa,YAAayB,EAAQhiB,GAAGwiB,SACvCpf,EAAEmd,aAAa,WAAYyB,EAAQhiB,GAAGyiB,QACtCrf,EAAEmd,aAAa,WAAYyB,EAAQhiB,GAAGwgB,SACtCpd,EAAEvB,KAAO,WACTuB,EAAEic,UAAY,4BAAmC2C,EAAQhiB,GAAGwgB,QAAU,mCAAqCwB,EAAQhiB,GAAGuiB,MAAQ,OAC9HT,EAAKnC,YAAYvc,SAEd,GAA2B,MAAvB4e,EAAQhiB,GAAGwiB,SAAyC,IAAtBR,EAAQhiB,GAAGyiB,OAAc,CAGhE,IAFAP,EAAiBpc,SAAS4c,iBAAiB,2CAEtC3Y,EAAI,EAAGA,EAAImY,EAAe/hB,OAAQ4J,KACqB,IAAtDmY,EAAenY,GAAG4Y,KAAKrc,QAAQ0b,EAAQhiB,GAAGuiB,SAE5CJ,GAAiB,GAIrB,GAAIA,EAAgB,CAClB,IAAIlY,EAAIjE,UAAU,QAClBiE,EAAEsW,aAAa,YAAayB,EAAQhiB,GAAGwiB,SACvCvY,EAAEsW,aAAa,WAAYyB,EAAQhiB,GAAGyiB,QACtCxY,EAAEpI,KAAO,WACToI,EAAE2Y,IAAM,aACR3Y,EAAE0Y,KAAOX,EAAQhiB,GAAGuiB,MACpBzc,SAAS8Z,KAAKD,YAAY1V,SAEvB,GAA2B,MAAvB+X,EAAQhiB,GAAGwiB,SAAyC,IAAtBR,EAAQhiB,GAAGyiB,OAAc,CAGhE,IAFAP,EAAiBpc,SAAS4c,iBAAiB,+CAEtC3Y,EAAI,EAAGA,EAAImY,EAAe/hB,OAAQ4J,IACjCiY,EAAQhiB,GAAGuiB,QAAUL,EAAenY,GAAG8Y,MAEzCV,GAAiB,GAIrB,GAAIA,EAAgB,CAClB,IAAIW,EAAK9c,UAAU,QACnB8c,EAAGvC,aAAa,YAAayB,EAAQhiB,GAAGwiB,SACxCM,EAAGvC,aAAa,WAAYyB,EAAQhiB,GAAGyiB,QACvCK,EAAGvC,aAAa,MAAO,cACvBuC,EAAGvC,aAAa,OAAQyB,EAAQhiB,GAAGuiB,OACnCT,EAAKnC,YAAYmD,UArDnBd,EAAQhiB,GAAGoiB,QAAS,EACpBH,GAAiB,EAwDnBD,EAAQhiB,GAAG+iB,OAAS5C,EAAa2B,EAAME,EAAQhiB,IAC/CgiB,EAAQhiB,GAAGgjB,MAAQ,GACnB/gB,KAAK+e,MAAM/b,KAAK+c,EAAQhiB,IAGJ,IAAlBiiB,EACFhgB,KAAKif,UAAW,EAIhBhG,WAAWjZ,KAAKuf,iBAAiBrc,KAAKlD,MAAO,UA3F7CA,KAAKif,UAAW,GAmNlB+B,YAlFF,SAAqBC,EAAMliB,EAAOge,GAIhC,IAHA,IAAIhf,EAAI,EACJE,EAAM+B,KAAK4b,MAAM1d,OAEdH,EAAIE,GAAK,CACd,GAAI+B,KAAK4b,MAAM7d,GAAG4hB,KAAOsB,GAAQjhB,KAAK4b,MAAM7d,GAAGgB,QAAUA,GAASiB,KAAK4b,MAAM7d,GAAGwgB,UAAYxB,EAC1F,OAAO/c,KAAK4b,MAAM7d,GAGpBA,GAAK,EAOP,OAJqB,iBAATkjB,GAA4C,KAAvBA,EAAK/S,WAAW,KAAc+S,IAASC,SAAWA,QAAQC,MACzFD,QAAQC,KAAK,oDAAqDF,EAAMliB,EAAOge,GAG1EL,GAmEP0E,cAvCF,SAAuBC,GAIrB,IAHA,IAAItjB,EAAI,EACJE,EAAM+B,KAAK+e,MAAM7gB,OAEdH,EAAIE,GAAK,CACd,GAAI+B,KAAK+e,MAAMhhB,GAAGujB,QAAUD,EAC1B,OAAOrhB,KAAK+e,MAAMhhB,GAGpBA,GAAK,EAGP,OAAOiC,KAAK+e,MAAM,IA4BlBwC,YAjEF,SAAqBN,EAAMO,EAAU5E,GACnC,IAAIwB,EAAWpe,KAAKohB,cAAcI,GAC9BC,EAAQR,EAAK/S,WAAW,GAE5B,IAAKkQ,EAAS2C,MAAMU,EAAQ,GAAI,CAC9B,IAAIpD,EAAUD,EAAS0C,OAKvB,GAAa,MAATG,EAAc,CAChB5C,EAAQK,YAAc,IAAMuC,EAAO,IACnC,IAAIS,EAAarD,EAAQsD,wBACzBtD,EAAQK,YAAc,KACtB,IAAIkD,EAAavD,EAAQsD,wBACzBvD,EAAS2C,MAAMU,EAAQ,IAAMC,EAAaE,GAAc,SAExDvD,EAAQK,YAAcuC,EACtB7C,EAAS2C,MAAMU,EAAQ,GAAKpD,EAAQsD,wBAA0B,IAIlE,OAAOvD,EAAS2C,MAAMU,EAAQ,GAAK7E,GA4CnC2C,iBA5RF,WACE,IAAIxhB,EAEAof,EAAMR,EADN1e,EAAM+B,KAAK+e,MAAM7gB,OAEjB2jB,EAAc5jB,EAElB,IAAKF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpBiC,KAAK+e,MAAMhhB,GAAGoiB,OAChB0B,GAAe,EAIa,MAA1B7hB,KAAK+e,MAAMhhB,GAAGwiB,SAA4C,IAAzBvgB,KAAK+e,MAAMhhB,GAAGyiB,OACjDxgB,KAAK+e,MAAMhhB,GAAGoiB,QAAS,GAEvBhD,EAAOnd,KAAK+e,MAAMhhB,GAAGqiB,SAASjD,KAC9BR,EAAI3c,KAAK+e,MAAMhhB,GAAGqiB,SAASzD,EAEvBQ,EAAKS,cAAgBjB,GACvBkF,GAAe,EACf7hB,KAAK+e,MAAMhhB,GAAGoiB,QAAS,IAEvBhD,EAAOnd,KAAK+e,MAAMhhB,GAAGsiB,SAASlD,KAC9BR,EAAI3c,KAAK+e,MAAMhhB,GAAGsiB,SAAS1D,EAEvBQ,EAAKS,cAAgBjB,IACvBkF,GAAe,EACf7hB,KAAK+e,MAAMhhB,GAAGoiB,QAAS,IAIvBngB,KAAK+e,MAAMhhB,GAAGoiB,SAChBngB,KAAK+e,MAAMhhB,GAAGsiB,SAASpC,OAAOhB,WAAW6E,YAAY9hB,KAAK+e,MAAMhhB,GAAGsiB,SAASpC,QAC5Eje,KAAK+e,MAAMhhB,GAAGqiB,SAASnC,OAAOhB,WAAW6E,YAAY9hB,KAAK+e,MAAMhhB,GAAGqiB,SAASnC,UAK9D,IAAhB4D,GAAqBvS,KAAK6P,MAAQnf,KAAKkf,SA5FxB,IA6FjBjG,WAAWjZ,KAAKsf,uBAAwB,IAExCrG,WAAWjZ,KAAKof,kBAAmB,KAoPrCC,YAvBF,WACErf,KAAKif,UAAW,IAyBXH,EAvVS,GA0VdiD,gBAAkB,WACpB,IAAIC,EAAY3lB,oBACZ4lB,EAAWplB,KAAKQ,IAEpB,SAAS6kB,EAAiBC,EAAUC,GAClC,IACIC,EADAC,EAAatiB,KAAKsiB,WAGA,qBAAlBtiB,KAAKuiB,WACPF,EAAWjf,iBAAiB,UAAWpD,KAAKwiB,GAAGtkB,SASjD,IANA,IAIIukB,EAASC,EA4BT3a,EAAG4R,EAAMvF,EAAMsF,EAAM5R,EAAG6a,EAhCxBC,EAAiBR,EAAQS,UACzB9kB,EAAI6kB,EACJ3kB,EAAM+B,KAAK8iB,UAAU5kB,OAAS,EAC9BU,GAAO,EAGJA,GAAM,CAIX,GAHA6jB,EAAUziB,KAAK8iB,UAAU/kB,GACzB2kB,EAAc1iB,KAAK8iB,UAAU/kB,EAAI,GAE7BA,IAAME,EAAM,GAAKkkB,GAAYO,EAAY/gB,EAAI2gB,EAAY,CACvDG,EAAQvhB,IACVuhB,EAAUC,GAGZE,EAAiB,EACjB,MAGF,GAAIF,EAAY/gB,EAAI2gB,EAAaH,EAAU,CACzCS,EAAiB7kB,EACjB,MAGEA,EAAIE,EAAM,EACZF,GAAK,GAEL6kB,EAAiB,EACjBhkB,GAAO,GAKX,IAEImkB,EAFAC,EAAcN,EAAY/gB,EAAI2gB,EAC9BW,EAAUR,EAAQ9gB,EAAI2gB,EAG1B,GAAIG,EAAQS,GAAI,CACTT,EAAQlN,aACXkN,EAAQlN,WAAa4D,IAAI9D,gBAAgBoN,EAAQthB,EAAGuhB,EAAYvhB,GAAKshB,EAAQ5a,EAAG4a,EAAQS,GAAIT,EAAQU,KAGtG,IAAI5N,EAAakN,EAAQlN,WAEzB,GAAI4M,GAAYa,GAAeb,EAAWc,EAAS,CACjD,IAAIG,EAAMjB,GAAYa,EAAczN,EAAWrE,OAAOhT,OAAS,EAAI,EAGnE,IAFAyb,EAAOpE,EAAWrE,OAAOkS,GAAK5O,MAAMtW,OAE/B6J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBsa,EAASta,GAAKwN,EAAWrE,OAAOkS,GAAK5O,MAAMzM,OAGxC,CACD0a,EAAQY,OACVV,EAAMF,EAAQY,QAEdV,EAAM1S,cAAcqT,gBAAgBb,EAAQta,EAAE+C,EAAGuX,EAAQta,EAAEgD,EAAGsX,EAAQ1kB,EAAEmN,EAAGuX,EAAQ1kB,EAAEoN,EAAGsX,EAAQva,GAAGmJ,IACnGoR,EAAQY,OAASV,GAGnBvO,EAAOuO,GAAKR,EAAWc,IAAYD,EAAcC,IACjD,IACIM,EADAC,EAAiBjO,EAAWP,cAAgBZ,EAE5CG,EAAc6N,EAAQqB,UAAYtB,GAAYC,EAAQsB,qBAAuB3lB,EAAIqkB,EAAQuB,iBAAmB,EAKhH,IAJA7b,EAAIsa,EAAQqB,UAAYtB,GAAYC,EAAQsB,qBAAuB3lB,EAAIqkB,EAAQwB,WAAa,EAC5FhlB,GAAO,EACP8a,EAAOnE,EAAWrE,OAAOhT,OAElBU,GAAM,CAGX,GAFA2V,GAAegB,EAAWrE,OAAOpJ,GAAGqN,cAEb,IAAnBqO,GAAiC,IAATpP,GAActM,IAAMyN,EAAWrE,OAAOhT,OAAS,EAAG,CAG5E,IAFAyb,EAAOpE,EAAWrE,OAAOpJ,GAAG0M,MAAMtW,OAE7B6J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBsa,EAASta,GAAKwN,EAAWrE,OAAOpJ,GAAG0M,MAAMzM,GAG3C,MACK,GAAIyb,GAAkBjP,GAAeiP,EAAiBjP,EAAcgB,EAAWrE,OAAOpJ,EAAI,GAAGqN,cAAe,CAIjH,IAHAoO,GAAeC,EAAiBjP,GAAegB,EAAWrE,OAAOpJ,EAAI,GAAGqN,cACxEwE,EAAOpE,EAAWrE,OAAOpJ,GAAG0M,MAAMtW,OAE7B6J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBsa,EAASta,GAAKwN,EAAWrE,OAAOpJ,GAAG0M,MAAMzM,IAAMwN,EAAWrE,OAAOpJ,EAAI,GAAG0M,MAAMzM,GAAKwN,EAAWrE,OAAOpJ,GAAG0M,MAAMzM,IAAMwb,EAGtH,MAGEzb,EAAI4R,EAAO,EACb5R,GAAK,EAELlJ,GAAO,EAIXwjB,EAAQwB,WAAa9b,EACrBsa,EAAQuB,iBAAmBpP,EAAcgB,EAAWrE,OAAOpJ,GAAGqN,cAC9DiN,EAAQsB,mBAAqB3lB,OAE1B,CACL,IAAI8lB,EAAMC,EAAMC,EAAKC,EAAKC,EAI1B,GAHAhmB,EAAMwkB,EAAQthB,EAAEjD,OAChB6kB,EAAWL,EAAYvhB,GAAKshB,EAAQ5a,EAEhC7H,KAAKkkB,IAAoB,IAAdzB,EAAQvhB,EACrB,GAAIihB,GAAYa,EACdX,EAAS,GAAKU,EAAS,GACvBV,EAAS,GAAKU,EAAS,GACvBV,EAAS,GAAKU,EAAS,QAClB,GAAIZ,GAAYc,EACrBZ,EAAS,GAAKI,EAAQthB,EAAE,GACxBkhB,EAAS,GAAKI,EAAQthB,EAAE,GACxBkhB,EAAS,GAAKI,EAAQthB,EAAE,OACnB,EAqGb,SAA2B4N,EAAKoV,GAC9B,IAAIC,EAAKD,EAAK,GACVE,EAAKF,EAAK,GACVG,EAAKH,EAAK,GACVI,EAAKJ,EAAK,GACVK,EAAU3nB,KAAK4nB,MAAM,EAAIJ,EAAKE,EAAK,EAAIH,EAAKE,EAAI,EAAI,EAAID,EAAKA,EAAK,EAAIC,EAAKA,GAC3EI,EAAW7nB,KAAK8nB,KAAK,EAAIP,EAAKC,EAAK,EAAIC,EAAKC,GAC5CK,EAAO/nB,KAAK4nB,MAAM,EAAIL,EAAKG,EAAK,EAAIF,EAAKC,EAAI,EAAI,EAAIF,EAAKA,EAAK,EAAIE,EAAKA,GAC5EvV,EAAI,GAAKyV,EAAUhmB,UACnBuQ,EAAI,GAAK2V,EAAWlmB,UACpBuQ,EAAI,GAAK6V,EAAOpmB,UA3GVqmB,CAAkBxC,EA2D1B,SAAe1a,EAAGpG,EAAGI,GACnB,IASImjB,EAAOC,EAAOC,EAAOC,EAAQC,EAT7BnW,EAAM,GACN1H,EAAKM,EAAE,GACPL,EAAKK,EAAE,GACPwd,EAAKxd,EAAE,GACPyd,EAAKzd,EAAE,GACP0d,EAAK9jB,EAAE,GACP+jB,EAAK/jB,EAAE,GACPgkB,EAAKhkB,EAAE,GACPikB,EAAKjkB,EAAE,IAEXwjB,EAAQ1d,EAAKge,EAAK/d,EAAKge,EAAKH,EAAKI,EAAKH,EAAKI,GAE/B,IACVT,GAASA,EACTM,GAAMA,EACNC,GAAMA,EACNC,GAAMA,EACNC,GAAMA,GAGJ,EAAMT,EAAQ,MAChBD,EAAQjoB,KAAK4oB,KAAKV,GAClBC,EAAQnoB,KAAKsJ,IAAI2e,GACjBG,EAASpoB,KAAKsJ,KAAK,EAAMxE,GAAKmjB,GAASE,EACvCE,EAASroB,KAAKsJ,IAAIxE,EAAImjB,GAASE,IAE/BC,EAAS,EAAMtjB,EACfujB,EAASvjB,GAOX,OAJAoN,EAAI,GAAKkW,EAAS5d,EAAK6d,EAASG,EAChCtW,EAAI,GAAKkW,EAAS3d,EAAK4d,EAASI,EAChCvW,EAAI,GAAKkW,EAASE,EAAKD,EAASK,EAChCxW,EAAI,GAAKkW,EAASG,EAAKF,EAASM,EACzBzW,EA9F2B2W,CAHZC,EAAiBlD,EAAQthB,GAC3BwkB,EAAiB5C,IACnBZ,EAAWc,IAAYD,EAAcC,UAInD,IAAKllB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACN,IAAd0kB,EAAQvhB,IACNihB,GAAYa,EACd5O,EAAO,EACE+N,EAAWc,EACpB7O,EAAO,GAEHqO,EAAQta,EAAE+C,EAAE0a,cAAgBliB,OACzB+e,EAAQY,SACXZ,EAAQY,OAAS,IAGdZ,EAAQY,OAAOtlB,GAQlB4kB,EAAMF,EAAQY,OAAOtlB,IAPrB8lB,OAAiC,IAAnBpB,EAAQta,EAAE+C,EAAEnN,GAAqB0kB,EAAQta,EAAE+C,EAAE,GAAKuX,EAAQta,EAAE+C,EAAEnN,GAC5E+lB,OAAiC,IAAnBrB,EAAQta,EAAEgD,EAAEpN,GAAqB0kB,EAAQta,EAAEgD,EAAE,GAAKsX,EAAQta,EAAEgD,EAAEpN,GAC5EgmB,OAAgC,IAAnBtB,EAAQ1kB,EAAEmN,EAAEnN,GAAqB0kB,EAAQ1kB,EAAEmN,EAAE,GAAKuX,EAAQ1kB,EAAEmN,EAAEnN,GAC3EimB,OAAgC,IAAnBvB,EAAQ1kB,EAAEoN,EAAEpN,GAAqB0kB,EAAQ1kB,EAAEoN,EAAE,GAAKsX,EAAQ1kB,EAAEoN,EAAEpN,GAC3E4kB,EAAM1S,cAAcqT,gBAAgBO,EAAMC,EAAMC,EAAKC,GAAK3S,IAC1DoR,EAAQY,OAAOtlB,GAAK4kB,IAKjBF,EAAQY,OAQXV,EAAMF,EAAQY,QAPdQ,EAAOpB,EAAQta,EAAE+C,EACjB4Y,EAAOrB,EAAQta,EAAEgD,EACjB4Y,EAAMtB,EAAQ1kB,EAAEmN,EAChB8Y,EAAMvB,EAAQ1kB,EAAEoN,EAChBwX,EAAM1S,cAAcqT,gBAAgBO,EAAMC,EAAMC,EAAKC,GAAK3S,IAC1DoR,EAAQY,OAASV,GAMrBvO,EAAOuO,GAAKR,EAAWc,IAAYD,EAAcC,MAIrDF,EAAWL,EAAYvhB,GAAKshB,EAAQ5a,EACpCoc,EAAyB,IAAdxB,EAAQvhB,EAAUuhB,EAAQthB,EAAEpD,GAAK0kB,EAAQthB,EAAEpD,IAAMglB,EAAShlB,GAAK0kB,EAAQthB,EAAEpD,IAAMqW,EAEpE,qBAAlBpU,KAAKuiB,SACPF,EAAStkB,GAAKkmB,EAEd5B,EAAW4B,EAOnB,OADA7B,EAAQS,UAAYD,EACbP,EAuDT,SAASsD,EAAiBE,GACxB,IAAIrB,EAAUqB,EAAO,GAAKrnB,UACtBkmB,EAAWmB,EAAO,GAAKrnB,UACvBomB,EAAOiB,EAAO,GAAKrnB,UACnBqL,EAAKhN,KAAKoJ,IAAIue,EAAU,GACxB7b,EAAK9L,KAAKoJ,IAAIye,EAAW,GACzBoB,EAAKjpB,KAAKoJ,IAAI2e,EAAO,GACrBmB,EAAKlpB,KAAKsJ,IAAIqe,EAAU,GACxBwB,EAAKnpB,KAAKsJ,IAAIue,EAAW,GACzBuB,EAAKppB,KAAKsJ,IAAIye,EAAO,GAKzB,MAAO,CAHCmB,EAAKC,EAAKF,EAAKjc,EAAKlB,EAAKsd,EACzBF,EAAKpd,EAAKmd,EAAKjc,EAAKmc,EAAKC,EACzBpc,EAAKmc,EAAKF,EAAKC,EAAKpd,EAAKsd,EAHzBpc,EAAKlB,EAAKmd,EAAKC,EAAKC,EAAKC,GAOnC,SAASC,IACP,IAAI/D,EAAWniB,KAAKmmB,KAAKC,cAAgBpmB,KAAKsiB,WAC1CpD,EAAWlf,KAAK8iB,UAAU,GAAGnhB,EAAI3B,KAAKsiB,WACtC+D,EAAUrmB,KAAK8iB,UAAU9iB,KAAK8iB,UAAU5kB,OAAS,GAAGyD,EAAI3B,KAAKsiB,WAEjE,KAAMH,IAAaniB,KAAKsmB,SAAS7C,WAAazjB,KAAKsmB,SAAS7C,YAAczB,IAAchiB,KAAKsmB,SAAS7C,WAAa4C,GAAWlE,GAAYkE,GAAWrmB,KAAKsmB,SAAS7C,UAAYvE,GAAYiD,EAAWjD,IAAY,CAC5Mlf,KAAKsmB,SAAS7C,WAAatB,IAC7BniB,KAAKsmB,SAAS5C,oBAAsB,EACpC1jB,KAAKsmB,SAASzD,UAAY,GAG5B,IAAI0D,EAAevmB,KAAKkiB,iBAAiBC,EAAUniB,KAAKsmB,UACxDtmB,KAAKwiB,GAAK+D,EAIZ,OADAvmB,KAAKsmB,SAAS7C,UAAYtB,EACnBniB,KAAKwiB,GAGd,SAASgE,EAAUpoB,GACjB,IAAIqoB,EAEJ,GAAsB,mBAAlBzmB,KAAKuiB,SACPkE,EAAkBroB,EAAM4B,KAAK0mB,KAEzBzE,EAASjiB,KAAKoB,EAAIqlB,GAAmB,OACvCzmB,KAAKoB,EAAIqlB,EACTzmB,KAAKyE,MAAO,QAMd,IAHA,IAAI1G,EAAI,EACJE,EAAM+B,KAAKoB,EAAElD,OAEVH,EAAIE,GACTwoB,EAAkBroB,EAAIL,GAAKiC,KAAK0mB,KAE5BzE,EAASjiB,KAAKoB,EAAErD,GAAK0oB,GAAmB,OAC1CzmB,KAAKoB,EAAErD,GAAK0oB,EACZzmB,KAAKyE,MAAO,GAGd1G,GAAK,EAKX,SAAS4oB,IACP,GAAI3mB,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,SAAY9mB,KAAK+mB,gBAAgB7oB,OAI3E,GAAI8B,KAAKgnB,KACPhnB,KAAKwmB,UAAUxmB,KAAKwiB,QADtB,CAKAxiB,KAAKgnB,MAAO,EACZhnB,KAAKyE,KAAOzE,KAAKinB,cAEjB,IAAIlpB,EACAE,EAAM+B,KAAK+mB,gBAAgB7oB,OAC3BgpB,EAAalnB,KAAKmnB,GAAKnnB,KAAKwiB,GAAKxiB,KAAK+b,KAAKhU,EAE/C,IAAKhK,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBmpB,EAAalnB,KAAK+mB,gBAAgBhpB,GAAGmpB,GAGvClnB,KAAKwmB,UAAUU,GACflnB,KAAKinB,eAAgB,EACrBjnB,KAAKgnB,MAAO,EACZhnB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,SAGtC,SAASM,EAAUC,GACjBrnB,KAAK+mB,gBAAgB/jB,KAAKqkB,GAC1BrnB,KAAKsE,UAAUJ,mBAAmBlE,MAGpC,SAASsnB,EAAcV,EAAM7K,EAAM2K,EAAMpiB,GACvCtE,KAAKuiB,SAAW,iBAChBviB,KAAK0mB,KAAOA,GAAQ,EACpB1mB,KAAK+b,KAAOA,EACZ/b,KAAKoB,EAAIslB,EAAO3K,EAAKhU,EAAI2e,EAAO3K,EAAKhU,EACrC/H,KAAKwiB,GAAKzG,EAAKhU,EACf/H,KAAKyE,MAAO,EACZzE,KAAK4mB,KAAOA,EACZ5mB,KAAKsE,UAAYA,EACjBtE,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK+H,GAAI,EACT/H,KAAKmnB,IAAK,EACVnnB,KAAKunB,IAAM,EACXvnB,KAAK+mB,gBAAkB,GACvB/mB,KAAKinB,eAAgB,EACrBjnB,KAAK0E,SAAWiiB,EAChB3mB,KAAKwmB,UAAYA,EACjBxmB,KAAKonB,UAAYA,EAGnB,SAASI,EAAyBZ,EAAM7K,EAAM2K,EAAMpiB,GAClDtE,KAAKuiB,SAAW,mBAChBviB,KAAK0mB,KAAOA,GAAQ,EACpB1mB,KAAK+b,KAAOA,EACZ/b,KAAKyE,MAAO,EACZzE,KAAK4mB,KAAOA,EACZ5mB,KAAKsE,UAAYA,EACjBtE,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK+H,GAAI,EACT/H,KAAKmnB,IAAK,EACVnnB,KAAK8mB,SAAW,EAChB,IAAI/oB,EACAE,EAAM8d,EAAKhU,EAAE7J,OACjB8B,KAAKoB,EAAIgC,iBAAiB,UAAWnF,GACrC+B,KAAKwiB,GAAKpf,iBAAiB,UAAWnF,GAC5BmF,iBAAiB,UAAWnF,GAGtC,IAFA+B,KAAKunB,IAAMnkB,iBAAiB,UAAWnF,GAElCF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKoB,EAAErD,GAAKge,EAAKhU,EAAEhK,GAAKiC,KAAK0mB,KAC7B1mB,KAAKwiB,GAAGzkB,GAAKge,EAAKhU,EAAEhK,GAGtBiC,KAAKinB,eAAgB,EACrBjnB,KAAK+mB,gBAAkB,GACvB/mB,KAAK0E,SAAWiiB,EAChB3mB,KAAKwmB,UAAYA,EACjBxmB,KAAKonB,UAAYA,EAGnB,SAASK,EAAuBb,EAAM7K,EAAM2K,EAAMpiB,GAChDtE,KAAKuiB,SAAW,iBAChBviB,KAAK8iB,UAAY/G,EAAKhU,EACtB/H,KAAKsiB,WAAasE,EAAK7K,KAAK2L,GAC5B1nB,KAAK8mB,SAAW,EAChB9mB,KAAKsmB,SAAW,CACd7C,UAAWzB,EACXa,UAAW,EACXrf,MAAO,EACPkgB,oBAAqB,GAEvB1jB,KAAK+H,GAAI,EACT/H,KAAKmnB,IAAK,EACVnnB,KAAK+b,KAAOA,EACZ/b,KAAK0mB,KAAOA,GAAQ,EACpB1mB,KAAK4mB,KAAOA,EACZ5mB,KAAKsE,UAAYA,EACjBtE,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAKoB,EAAI4gB,EACThiB,KAAKwiB,GAAKR,EACVhiB,KAAKinB,eAAgB,EACrBjnB,KAAK0E,SAAWiiB,EAChB3mB,KAAKwmB,UAAYA,EACjBxmB,KAAKkiB,iBAAmBA,EACxBliB,KAAK+mB,gBAAkB,CAACb,EAAsBhjB,KAAKlD,OACnDA,KAAKonB,UAAYA,EAGnB,SAASO,EAAkCf,EAAM7K,EAAM2K,EAAMpiB,GAC3DtE,KAAKuiB,SAAW,mBAChB,IAAIxkB,EAEAoD,EAAG0G,EAAGqb,EAAIC,EADVllB,EAAM8d,EAAKhU,EAAE7J,OAGjB,IAAKH,EAAI,EAAGA,EAAIE,EAAM,EAAGF,GAAK,EACxBge,EAAKhU,EAAEhK,GAAGmlB,IAAMnH,EAAKhU,EAAEhK,GAAGoD,GAAK4a,EAAKhU,EAAEhK,EAAI,IAAMge,EAAKhU,EAAEhK,EAAI,GAAGoD,IAChEA,EAAI4a,EAAKhU,EAAEhK,GAAGoD,EACd0G,EAAIkU,EAAKhU,EAAEhK,EAAI,GAAGoD,EAClB+hB,EAAKnH,EAAKhU,EAAEhK,GAAGmlB,GACfC,EAAKpH,EAAKhU,EAAEhK,GAAGolB,IAEE,IAAbhiB,EAAEjD,SAAkBiD,EAAE,KAAO0G,EAAE,IAAM1G,EAAE,KAAO0G,EAAE,KAAOsR,IAAI1F,cAActS,EAAE,GAAIA,EAAE,GAAI0G,EAAE,GAAIA,EAAE,GAAI1G,EAAE,GAAK+hB,EAAG,GAAI/hB,EAAE,GAAK+hB,EAAG,KAAO/J,IAAI1F,cAActS,EAAE,GAAIA,EAAE,GAAI0G,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAKsb,EAAG,GAAItb,EAAE,GAAKsb,EAAG,KAAoB,IAAbhiB,EAAEjD,SAAkBiD,EAAE,KAAO0G,EAAE,IAAM1G,EAAE,KAAO0G,EAAE,IAAM1G,EAAE,KAAO0G,EAAE,KAAOsR,IAAIlB,cAAc9W,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI0G,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI1G,EAAE,GAAK+hB,EAAG,GAAI/hB,EAAE,GAAK+hB,EAAG,GAAI/hB,EAAE,GAAK+hB,EAAG,KAAO/J,IAAIlB,cAAc9W,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI0G,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAKsb,EAAG,GAAItb,EAAE,GAAKsb,EAAG,GAAItb,EAAE,GAAKsb,EAAG,OACldpH,EAAKhU,EAAEhK,GAAGmlB,GAAK,KACfnH,EAAKhU,EAAEhK,GAAGolB,GAAK,MAGbhiB,EAAE,KAAO0G,EAAE,IAAM1G,EAAE,KAAO0G,EAAE,IAAgB,IAAVqb,EAAG,IAAsB,IAAVA,EAAG,IAAsB,IAAVC,EAAG,IAAsB,IAAVA,EAAG,KACnE,IAAbhiB,EAAEjD,QAAgBiD,EAAE,KAAO0G,EAAE,IAAgB,IAAVqb,EAAG,IAAsB,IAAVC,EAAG,MACvDpH,EAAKhU,EAAEhK,GAAGmlB,GAAK,KACfnH,EAAKhU,EAAEhK,GAAGolB,GAAK,OAMvBnjB,KAAK+mB,gBAAkB,CAACb,EAAsBhjB,KAAKlD,OACnDA,KAAK8iB,UAAY/G,EAAKhU,EACtB/H,KAAKsiB,WAAasE,EAAK7K,KAAK2L,GAC5B1nB,KAAK+H,GAAI,EACT/H,KAAKmnB,IAAK,EACVnnB,KAAKinB,eAAgB,EACrBjnB,KAAK0mB,KAAOA,GAAQ,EACpB1mB,KAAK4mB,KAAOA,EACZ5mB,KAAKsE,UAAYA,EACjBtE,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK0E,SAAWiiB,EAChB3mB,KAAKwmB,UAAYA,EACjBxmB,KAAKkiB,iBAAmBA,EACxBliB,KAAK8mB,SAAW,EAChB,IAAIc,EAAS7L,EAAKhU,EAAE,GAAG5G,EAAEjD,OAIzB,IAHA8B,KAAKoB,EAAIgC,iBAAiB,UAAWwkB,GACrC5nB,KAAKwiB,GAAKpf,iBAAiB,UAAWwkB,GAEjC7pB,EAAI,EAAGA,EAAI6pB,EAAQ7pB,GAAK,EAC3BiC,KAAKoB,EAAErD,GAAKikB,EACZhiB,KAAKwiB,GAAGzkB,GAAKikB,EAGfhiB,KAAKsmB,SAAW,CACd7C,UAAWzB,EACXa,UAAW,EACXrf,MAAOJ,iBAAiB,UAAWwkB,IAErC5nB,KAAKonB,UAAYA,EAgCnB,MAHS,CACPS,QA3BF,SAAiBjB,EAAM7K,EAAMnc,EAAM8mB,EAAMpiB,GACvC,IAAI7C,EAEJ,GAAKsa,EAAKhU,EAAE7J,OAEL,GAAyB,iBAAd6d,EAAKhU,EAAE,GACvBtG,EAAI,IAAI+lB,EAAyBZ,EAAM7K,EAAM2K,EAAMpiB,QAEnD,OAAQ1E,GACN,KAAK,EACH6B,EAAI,IAAIgmB,EAAuBb,EAAM7K,EAAM2K,EAAMpiB,GACjD,MAEF,KAAK,EACH7C,EAAI,IAAIkmB,EAAkCf,EAAM7K,EAAM2K,EAAMpiB,QAVhE7C,EAAI,IAAI6lB,EAAcV,EAAM7K,EAAM2K,EAAMpiB,GAmB1C,OAJI7C,EAAEslB,gBAAgB7oB,QACpBoG,EAAUJ,mBAAmBzC,GAGxBA,IA/eW,GAwflBqmB,yBAA2B,WAC7B,IAAIC,EAAgB,CAAC,EAAG,GAgLxB,SAASC,EAAkBpB,EAAM7K,EAAMzX,GAwBrC,GAvBAtE,KAAK4mB,KAAOA,EACZ5mB,KAAK8mB,SAAW,EAChB9mB,KAAKuiB,SAAW,YAChBviB,KAAK+b,KAAOA,EACZ/b,KAAKoB,EAAI,IAAI2E,OAEb/F,KAAKioB,IAAM,IAAIliB,OACf/F,KAAKkoB,uBAAyB,EAC9BloB,KAAK2E,6BAA6BL,GAAasiB,GAE3C7K,EAAKta,GAAKsa,EAAKta,EAAEN,GACnBnB,KAAKmoB,GAAKpG,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,EAAEyJ,EAAG,EAAG,EAAGlL,MACxDA,KAAKooB,GAAKrG,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,EAAE0J,EAAG,EAAG,EAAGnL,MAEpD+b,EAAKta,EAAE2J,IACTpL,KAAKqoB,GAAKtG,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,EAAE2J,EAAG,EAAG,EAAGpL,QAG1DA,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,GAAK,CAC/CsG,EAAG,CAAC,EAAG,EAAG,IACT,EAAG,EAAG/H,MAGP+b,EAAKuM,GAAI,CAKX,GAJAtoB,KAAKsoB,GAAKvG,gBAAgB8F,QAAQjB,EAAM7K,EAAKuM,GAAI,EAAG9pB,UAAWwB,MAC/DA,KAAKuoB,GAAKxG,gBAAgB8F,QAAQjB,EAAM7K,EAAKwM,GAAI,EAAG/pB,UAAWwB,MAC/DA,KAAKwoB,GAAKzG,gBAAgB8F,QAAQjB,EAAM7K,EAAKyM,GAAI,EAAGhqB,UAAWwB,MAE3D+b,EAAK0M,GAAG1gB,EAAE,GAAGob,GAAI,CACnB,IAAIplB,EACAE,EAAM8d,EAAK0M,GAAG1gB,EAAE7J,OAEpB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBge,EAAK0M,GAAG1gB,EAAEhK,GAAGmlB,GAAKnH,EAAK0M,GAAG1gB,EAAEhK,GAAGolB,GAAK,KAIxCnjB,KAAKyoB,GAAK1G,gBAAgB8F,QAAQjB,EAAM7K,EAAK0M,GAAI,EAAGjqB,UAAWwB,MAE/DA,KAAKyoB,GAAGvE,IAAK,OAEblkB,KAAKqB,EAAI0gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK1a,GAAK,CAC/C0G,EAAG,GACF,EAAGvJ,UAAWwB,MAGf+b,EAAK2M,KACP1oB,KAAK0oB,GAAK3G,gBAAgB8F,QAAQjB,EAAM7K,EAAK2M,GAAI,EAAGlqB,UAAWwB,MAC/DA,KAAK2oB,GAAK5G,gBAAgB8F,QAAQjB,EAAM7K,EAAK4M,GAAI,EAAGnqB,UAAWwB,OAGjEA,KAAK2H,EAAIoa,gBAAgB8F,QAAQjB,EAAM7K,EAAKpU,GAAK,CAC/CI,EAAG,CAAC,EAAG,EAAG,IACT,EAAG,EAAG/H,MACTA,KAAKmB,EAAI4gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK5a,GAAK,CAC/C4G,EAAG,CAAC,IAAK,IAAK,MACb,EAAG,IAAM/H,MAER+b,EAAK5T,EACPnI,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,EAAG,EAAG,IAAMye,GAExD5mB,KAAKmI,EAAI,CACP1D,MAAM,EACNrD,EAAG,GAIPpB,KAAK4oB,UAAW,EAEX5oB,KAAKoE,kBAAkBlG,QAC1B8B,KAAK0E,UAAS,GAkBlB,OAdAsjB,EAAkBvlB,UAAY,CAC5BomB,cA1PF,SAAuBC,GACrB,IAAIrkB,EAAOzE,KAAKyE,KAChBzE,KAAKwE,2BACLxE,KAAKyE,KAAOzE,KAAKyE,MAAQA,EAErBzE,KAAK2H,GACPmhB,EAAI1gB,WAAWpI,KAAK2H,EAAEvG,EAAE,IAAKpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAK2H,EAAEvG,EAAE,IAGjDpB,KAAKmB,GACP2nB,EAAIthB,MAAMxH,KAAKmB,EAAEC,EAAE,GAAIpB,KAAKmB,EAAEC,EAAE,GAAIpB,KAAKmB,EAAEC,EAAE,IAG3CpB,KAAK0oB,IACPI,EAAIvhB,cAAcvH,KAAK0oB,GAAGtnB,EAAGpB,KAAK2oB,GAAGvnB,GAGnCpB,KAAKqB,EACPynB,EAAIriB,QAAQzG,KAAKqB,EAAED,GAEnB0nB,EAAI9hB,SAAShH,KAAKwoB,GAAGpnB,GAAG2F,QAAQ/G,KAAKuoB,GAAGnnB,GAAG0F,QAAQ9G,KAAKsoB,GAAGlnB,GAAG4F,SAAShH,KAAKyoB,GAAGrnB,EAAE,IAAI2F,QAAQ/G,KAAKyoB,GAAGrnB,EAAE,IAAI0F,QAAQ9G,KAAKyoB,GAAGrnB,EAAE,IAG3HpB,KAAK+b,KAAKta,EAAEN,EACVnB,KAAK+b,KAAKta,EAAE2J,EACd0d,EAAI1gB,UAAUpI,KAAKmoB,GAAG/mB,EAAGpB,KAAKooB,GAAGhnB,GAAIpB,KAAKqoB,GAAGjnB,GAE7C0nB,EAAI1gB,UAAUpI,KAAKmoB,GAAG/mB,EAAGpB,KAAKooB,GAAGhnB,EAAG,GAGtC0nB,EAAI1gB,UAAUpI,KAAKyB,EAAEL,EAAE,GAAIpB,KAAKyB,EAAEL,EAAE,IAAKpB,KAAKyB,EAAEL,EAAE,KA6NpDsD,SAzNF,SAAqBqkB,GACnB,GAAI/oB,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,QAA1C,CAWA,GAPI9mB,KAAK4oB,WACP5oB,KAAKgpB,qBACLhpB,KAAK4oB,UAAW,GAGlB5oB,KAAKwE,2BAEDxE,KAAKyE,MAAQskB,EAAa,CAqB5B,GApBA/oB,KAAKoB,EAAE4J,eAAehL,KAAKioB,IAAIzhB,OAE3BxG,KAAKkoB,uBAAyB,GAChCloB,KAAKoB,EAAEgH,WAAWpI,KAAK2H,EAAEvG,EAAE,IAAKpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAK2H,EAAEvG,EAAE,IAGpDpB,KAAKkoB,uBAAyB,GAChCloB,KAAKoB,EAAEoG,MAAMxH,KAAKmB,EAAEC,EAAE,GAAIpB,KAAKmB,EAAEC,EAAE,GAAIpB,KAAKmB,EAAEC,EAAE,IAG9CpB,KAAK0oB,IAAM1oB,KAAKkoB,uBAAyB,GAC3CloB,KAAKoB,EAAEmG,cAAcvH,KAAK0oB,GAAGtnB,EAAGpB,KAAK2oB,GAAGvnB,GAGtCpB,KAAKqB,GAAKrB,KAAKkoB,uBAAyB,EAC1CloB,KAAKoB,EAAEqF,QAAQzG,KAAKqB,EAAED,IACZpB,KAAKqB,GAAKrB,KAAKkoB,uBAAyB,GAClDloB,KAAKoB,EAAE4F,SAAShH,KAAKwoB,GAAGpnB,GAAG2F,QAAQ/G,KAAKuoB,GAAGnnB,GAAG0F,QAAQ9G,KAAKsoB,GAAGlnB,GAAG4F,SAAShH,KAAKyoB,GAAGrnB,EAAE,IAAI2F,QAAQ/G,KAAKyoB,GAAGrnB,EAAE,IAAI0F,QAAQ9G,KAAKyoB,GAAGrnB,EAAE,IAG9HpB,KAAKipB,aAAc,CACrB,IAAIC,EACAC,EACAC,EAAYppB,KAAK4mB,KAAKC,WAAWuC,UAErC,GAAIppB,KAAKyB,GAAKzB,KAAKyB,EAAEqhB,WAAa9iB,KAAKyB,EAAE4nB,eACnCrpB,KAAKyB,EAAE6kB,SAAS7C,UAAYzjB,KAAKyB,EAAE6gB,YAActiB,KAAKyB,EAAEqhB,UAAU,GAAGnhB,GACvEunB,EAAKlpB,KAAKyB,EAAE4nB,gBAAgBrpB,KAAKyB,EAAEqhB,UAAU,GAAGnhB,EAAI,KAAQynB,EAAW,GACvED,EAAKnpB,KAAKyB,EAAE4nB,eAAerpB,KAAKyB,EAAEqhB,UAAU,GAAGnhB,EAAIynB,EAAW,IACrDppB,KAAKyB,EAAE6kB,SAAS7C,UAAYzjB,KAAKyB,EAAE6gB,YAActiB,KAAKyB,EAAEqhB,UAAU9iB,KAAKyB,EAAEqhB,UAAU5kB,OAAS,GAAGyD,GACxGunB,EAAKlpB,KAAKyB,EAAE4nB,eAAerpB,KAAKyB,EAAEqhB,UAAU9iB,KAAKyB,EAAEqhB,UAAU5kB,OAAS,GAAGyD,EAAIynB,EAAW,GACxFD,EAAKnpB,KAAKyB,EAAE4nB,gBAAgBrpB,KAAKyB,EAAEqhB,UAAU9iB,KAAKyB,EAAEqhB,UAAU5kB,OAAS,GAAGyD,EAAI,KAAQynB,EAAW,KAEjGF,EAAKlpB,KAAKyB,EAAE+gB,GACZ2G,EAAKnpB,KAAKyB,EAAE4nB,gBAAgBrpB,KAAKyB,EAAE6kB,SAAS7C,UAAYzjB,KAAKyB,EAAE6gB,WAAa,KAAQ8G,EAAWppB,KAAKyB,EAAE6gB,kBAEnG,GAAItiB,KAAKmoB,IAAMnoB,KAAKmoB,GAAGrF,WAAa9iB,KAAKooB,GAAGtF,WAAa9iB,KAAKmoB,GAAGkB,gBAAkBrpB,KAAKooB,GAAGiB,eAAgB,CAChHH,EAAK,GACLC,EAAK,GACL,IAAIhB,EAAKnoB,KAAKmoB,GACVC,EAAKpoB,KAAKooB,GAGVD,EAAG7B,SAAS7C,UAAY0E,EAAG7F,YAAc6F,EAAGrF,UAAU,GAAGnhB,GAC3DunB,EAAG,GAAKf,EAAGkB,gBAAgBlB,EAAGrF,UAAU,GAAGnhB,EAAI,KAAQynB,EAAW,GAClEF,EAAG,GAAKd,EAAGiB,gBAAgBjB,EAAGtF,UAAU,GAAGnhB,EAAI,KAAQynB,EAAW,GAClED,EAAG,GAAKhB,EAAGkB,eAAelB,EAAGrF,UAAU,GAAGnhB,EAAIynB,EAAW,GACzDD,EAAG,GAAKf,EAAGiB,eAAejB,EAAGtF,UAAU,GAAGnhB,EAAIynB,EAAW,IAChDjB,EAAG7B,SAAS7C,UAAY0E,EAAG7F,YAAc6F,EAAGrF,UAAUqF,EAAGrF,UAAU5kB,OAAS,GAAGyD,GACxFunB,EAAG,GAAKf,EAAGkB,eAAelB,EAAGrF,UAAUqF,EAAGrF,UAAU5kB,OAAS,GAAGyD,EAAIynB,EAAW,GAC/EF,EAAG,GAAKd,EAAGiB,eAAejB,EAAGtF,UAAUsF,EAAGtF,UAAU5kB,OAAS,GAAGyD,EAAIynB,EAAW,GAC/ED,EAAG,GAAKhB,EAAGkB,gBAAgBlB,EAAGrF,UAAUqF,EAAGrF,UAAU5kB,OAAS,GAAGyD,EAAI,KAAQynB,EAAW,GACxFD,EAAG,GAAKf,EAAGiB,gBAAgBjB,EAAGtF,UAAUsF,EAAGtF,UAAU5kB,OAAS,GAAGyD,EAAI,KAAQynB,EAAW,KAExFF,EAAK,CAACf,EAAG3F,GAAI4F,EAAG5F,IAChB2G,EAAG,GAAKhB,EAAGkB,gBAAgBlB,EAAG7B,SAAS7C,UAAY0E,EAAG7F,WAAa,KAAQ8G,EAAWjB,EAAG7F,YACzF6G,EAAG,GAAKf,EAAGiB,gBAAgBjB,EAAG9B,SAAS7C,UAAY2E,EAAG9F,WAAa,KAAQ8G,EAAWhB,EAAG9F,kBAG3F4G,EAAKC,EAAKpB,EAGZ/nB,KAAKoB,EAAEqF,QAAQ5J,KAAK4nB,MAAMyE,EAAG,GAAKC,EAAG,GAAID,EAAG,GAAKC,EAAG,KAGlDnpB,KAAK+b,KAAKta,GAAKzB,KAAK+b,KAAKta,EAAEN,EACzBnB,KAAK+b,KAAKta,EAAE2J,EACdpL,KAAKoB,EAAEgH,UAAUpI,KAAKmoB,GAAG/mB,EAAGpB,KAAKooB,GAAGhnB,GAAIpB,KAAKqoB,GAAGjnB,GAEhDpB,KAAKoB,EAAEgH,UAAUpI,KAAKmoB,GAAG/mB,EAAGpB,KAAKooB,GAAGhnB,EAAG,GAGzCpB,KAAKoB,EAAEgH,UAAUpI,KAAKyB,EAAEL,EAAE,GAAIpB,KAAKyB,EAAEL,EAAE,IAAKpB,KAAKyB,EAAEL,EAAE,IAIzDpB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,UAiIpCkC,mBA9HF,WACE,IAAKhpB,KAAK2H,EAAEI,IACV/H,KAAKioB,IAAI7f,WAAWpI,KAAK2H,EAAEvG,EAAE,IAAKpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAK2H,EAAEvG,EAAE,IACxDpB,KAAKkoB,uBAAyB,GAK3BloB,KAAKmB,EAAE4lB,gBAAgB7oB,QAA5B,CAOA,GANE8B,KAAKioB,IAAIzgB,MAAMxH,KAAKmB,EAAEC,EAAE,GAAIpB,KAAKmB,EAAEC,EAAE,GAAIpB,KAAKmB,EAAEC,EAAE,IAClDpB,KAAKkoB,uBAAyB,EAK5BloB,KAAK0oB,GAAI,CACX,GAAK1oB,KAAK0oB,GAAG3B,gBAAgB7oB,QAAW8B,KAAK2oB,GAAG5B,gBAAgB7oB,OAI9D,OAHA8B,KAAKioB,IAAI1gB,cAAcvH,KAAK0oB,GAAGtnB,EAAGpB,KAAK2oB,GAAGvnB,GAC1CpB,KAAKkoB,uBAAyB,EAMlC,GAAIloB,KAAKqB,EAAG,CACV,GAAKrB,KAAKqB,EAAE0lB,gBAAgB7oB,OAI1B,OAHA8B,KAAKioB,IAAIxhB,QAAQzG,KAAKqB,EAAED,GACxBpB,KAAKkoB,uBAAyB,OAItBloB,KAAKwoB,GAAGzB,gBAAgB7oB,QAAW8B,KAAKuoB,GAAGxB,gBAAgB7oB,QAAW8B,KAAKsoB,GAAGvB,gBAAgB7oB,QAAW8B,KAAKyoB,GAAG1B,gBAAgB7oB,SAC3I8B,KAAKioB,IAAIjhB,SAAShH,KAAKwoB,GAAGpnB,GAAG2F,QAAQ/G,KAAKuoB,GAAGnnB,GAAG0F,QAAQ9G,KAAKsoB,GAAGlnB,GAAG4F,SAAShH,KAAKyoB,GAAGrnB,EAAE,IAAI2F,QAAQ/G,KAAKyoB,GAAGrnB,EAAE,IAAI0F,QAAQ9G,KAAKyoB,GAAGrnB,EAAE,IAClIpB,KAAKkoB,uBAAyB,KA8FhCoB,WA1FF,cA4FA1W,gBAAgB,CAAC3O,0BAA2B+jB,GAC5CA,EAAkBvlB,UAAUyB,mBAzF5B,SAA4BC,GAC1BnE,KAAKupB,oBAAoBplB,GAEzBnE,KAAK4mB,KAAK1iB,mBAAmBC,GAC7BnE,KAAK4oB,UAAW,GAsFlBZ,EAAkBvlB,UAAU8mB,oBAAsBtlB,yBAAyBxB,UAAUyB,mBAM9E,CACLslB,qBALF,SAA8B5C,EAAM7K,EAAMzX,GACxC,OAAO,IAAI0jB,EAAkBpB,EAAM7K,EAAMzX,KAvQd,GA+Q/B,SAASmlB,YACPzpB,KAAK4H,GAAI,EACT5H,KAAKsW,QAAU,EACftW,KAAK0pB,WAAa,EAClB1pB,KAAKoB,EAAI9C,iBAAiB0B,KAAK0pB,YAC/B1pB,KAAKmI,EAAI7J,iBAAiB0B,KAAK0pB,YAC/B1pB,KAAKjC,EAAIO,iBAAiB0B,KAAK0pB,YAGjCD,UAAUhnB,UAAUknB,YAAc,SAAUzT,EAAQjY,GAClD+B,KAAK4H,EAAIsO,EACTlW,KAAK4pB,UAAU3rB,GAGf,IAFA,IAAIF,EAAI,EAEDA,EAAIE,GACT+B,KAAKoB,EAAErD,GAAK8rB,WAAWjV,aACvB5U,KAAKmI,EAAEpK,GAAK8rB,WAAWjV,aACvB5U,KAAKjC,EAAEA,GAAK8rB,WAAWjV,aACvB7W,GAAK,GAIT0rB,UAAUhnB,UAAUmnB,UAAY,SAAU3rB,GACxC,KAAO+B,KAAK0pB,WAAazrB,GACvB+B,KAAK8pB,oBAGP9pB,KAAKsW,QAAUrY,GAGjBwrB,UAAUhnB,UAAUqnB,kBAAoB,WACtC9pB,KAAKoB,EAAIpB,KAAKoB,EAAEyd,OAAOvgB,iBAAiB0B,KAAK0pB,aAC7C1pB,KAAKjC,EAAIiC,KAAKjC,EAAE8gB,OAAOvgB,iBAAiB0B,KAAK0pB,aAC7C1pB,KAAKmI,EAAInI,KAAKmI,EAAE0W,OAAOvgB,iBAAiB0B,KAAK0pB,aAC7C1pB,KAAK0pB,YAAc,GAGrBD,UAAUhnB,UAAUsnB,QAAU,SAAU7e,EAAGC,EAAGvL,EAAMoqB,EAAK3Z,GACvD,IAAI5M,EAOJ,OANAzD,KAAKsW,QAAUzZ,KAAKY,IAAIuC,KAAKsW,QAAS0T,EAAM,GAExChqB,KAAKsW,SAAWtW,KAAK0pB,YACvB1pB,KAAK8pB,oBAGClqB,GACN,IAAK,IACH6D,EAAMzD,KAAKoB,EACX,MAEF,IAAK,IACHqC,EAAMzD,KAAKjC,EACX,MAEF,IAAK,IACH0F,EAAMzD,KAAKmI,IAIV1E,EAAIumB,IAAQvmB,EAAIumB,KAAS3Z,KAC5B5M,EAAIumB,GAAOH,WAAWjV,cAGxBnR,EAAIumB,GAAK,GAAK9e,EACdzH,EAAIumB,GAAK,GAAK7e,GAGhBse,UAAUhnB,UAAUwnB,YAAc,SAAUC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIP,EAAK3Z,GACvErQ,KAAK+pB,QAAQG,EAAIC,EAAI,IAAKH,EAAK3Z,GAC/BrQ,KAAK+pB,QAAQK,EAAIC,EAAI,IAAKL,EAAK3Z,GAC/BrQ,KAAK+pB,QAAQO,EAAIC,EAAI,IAAKP,EAAK3Z,IAGjCoZ,UAAUhnB,UAAU+nB,QAAU,WAC5B,IAAIC,EAAU,IAAIhB,UAClBgB,EAAQd,YAAY3pB,KAAK4H,EAAG5H,KAAKsW,SACjC,IAAIoU,EAAW1qB,KAAKoB,EAChBupB,EAAY3qB,KAAKmI,EACjByiB,EAAW5qB,KAAKjC,EAChB8sB,EAAO,EAEP7qB,KAAK4H,IACP6iB,EAAQR,YAAYS,EAAS,GAAG,GAAIA,EAAS,GAAG,GAAIE,EAAS,GAAG,GAAIA,EAAS,GAAG,GAAID,EAAU,GAAG,GAAIA,EAAU,GAAG,GAAI,GAAG,GACzHE,EAAO,GAGT,IAEI9sB,EAFA+sB,EAAM9qB,KAAKsW,QAAU,EACrBrY,EAAM+B,KAAKsW,QAGf,IAAKvY,EAAI8sB,EAAM9sB,EAAIE,EAAKF,GAAK,EAC3B0sB,EAAQR,YAAYS,EAASI,GAAK,GAAIJ,EAASI,GAAK,GAAIF,EAASE,GAAK,GAAIF,EAASE,GAAK,GAAIH,EAAUG,GAAK,GAAIH,EAAUG,GAAK,GAAI/sB,GAAG,GACrI+sB,GAAO,EAGT,OAAOL,GAGT,IAAIM,qBAAuB,WAGzB,SAASC,EAAiB7I,EAAU8I,EAAe7I,GACjD,IACI8I,EAAUC,EAAUC,EAAQtjB,EAAGC,EAAG2R,EAAMC,EAAMvF,EAAMiX,EADpDzI,EAAiBR,EAAQS,UAEzBsE,EAAKnnB,KAAK8iB,UAEd,GAAIX,EAAWgF,EAAG,GAAGxlB,EAAI3B,KAAKsiB,WAC5B4I,EAAW/D,EAAG,GAAGhmB,EAAE,GACnBiqB,GAAS,EACTxI,EAAiB,OACZ,GAAIT,GAAYgF,EAAGA,EAAGjpB,OAAS,GAAGyD,EAAI3B,KAAKsiB,WAChD4I,EAAW/D,EAAGA,EAAGjpB,OAAS,GAAGiD,EAAIgmB,EAAGA,EAAGjpB,OAAS,GAAGiD,EAAE,GAAKgmB,EAAGA,EAAGjpB,OAAS,GAAG2J,EAAE,GAO9EujB,GAAS,MACJ,CAOL,IANA,IAGI3I,EACAC,EAJA3kB,EAAI6kB,EACJ3kB,EAAMkpB,EAAGjpB,OAAS,EAClBU,GAAO,EAIJA,IACL6jB,EAAU0E,EAAGppB,MACb2kB,EAAcyE,EAAGppB,EAAI,IAEL4D,EAAI3B,KAAKsiB,WAAaH,KAIlCpkB,EAAIE,EAAM,EACZF,GAAK,EAELa,GAAO,EAOX,GAFAgkB,EAAiB7kB,IADjBqtB,EAAuB,IAAd3I,EAAQvhB,GAGJ,CACX,GAAIihB,GAAYO,EAAY/gB,EAAI3B,KAAKsiB,WACnClO,EAAO,OACF,GAAI+N,EAAWM,EAAQ9gB,EAAI3B,KAAKsiB,WACrClO,EAAO,MACF,CACL,IAAIuO,EAEAF,EAAQY,OACVV,EAAMF,EAAQY,QAEdV,EAAM1S,cAAcqT,gBAAgBb,EAAQta,EAAE+C,EAAGuX,EAAQta,EAAEgD,EAAGsX,EAAQ1kB,EAAEmN,EAAGuX,EAAQ1kB,EAAEoN,GAAGkG,IACxFoR,EAAQY,OAASV,GAGnBvO,EAAOuO,GAAKR,GAAYM,EAAQ9gB,EAAI3B,KAAKsiB,cAAgBI,EAAY/gB,EAAI3B,KAAKsiB,YAAcG,EAAQ9gB,EAAI3B,KAAKsiB,cAG/G6I,EAAWzI,EAAYvhB,EAAIuhB,EAAYvhB,EAAE,GAAKshB,EAAQ5a,EAAE,GAG1DqjB,EAAWzI,EAAQthB,EAAE,GAOvB,IAJAuY,EAAOuR,EAAc3U,QACrBqD,EAAOuR,EAASntB,EAAE,GAAGG,OACrBkkB,EAAQS,UAAYD,EAEf9a,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB,IAAKC,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBsjB,EAAcD,EAASF,EAASntB,EAAE+J,GAAGC,GAAKmjB,EAASntB,EAAE+J,GAAGC,IAAMojB,EAASptB,EAAE+J,GAAGC,GAAKmjB,EAASntB,EAAE+J,GAAGC,IAAMqM,EACrG6W,EAAcltB,EAAE+J,GAAGC,GAAKsjB,EACxBA,EAAcD,EAASF,EAAS/iB,EAAEL,GAAGC,GAAKmjB,EAAS/iB,EAAEL,GAAGC,IAAMojB,EAAShjB,EAAEL,GAAGC,GAAKmjB,EAAS/iB,EAAEL,GAAGC,IAAMqM,EACrG6W,EAAc9iB,EAAEL,GAAGC,GAAKsjB,EACxBA,EAAcD,EAASF,EAAS9pB,EAAE0G,GAAGC,GAAKmjB,EAAS9pB,EAAE0G,GAAGC,IAAMojB,EAAS/pB,EAAE0G,GAAGC,GAAKmjB,EAAS9pB,EAAE0G,GAAGC,IAAMqM,EACrG6W,EAAc7pB,EAAE0G,GAAGC,GAAKsjB,EAK9B,SAASC,IACP,IAAInJ,EAAWniB,KAAKmmB,KAAKC,cAAgBpmB,KAAKsiB,WAC1CpD,EAAWlf,KAAK8iB,UAAU,GAAGnhB,EAAI3B,KAAKsiB,WACtC+D,EAAUrmB,KAAK8iB,UAAU9iB,KAAK8iB,UAAU5kB,OAAS,GAAGyD,EAAI3B,KAAKsiB,WAC7DmB,EAAYzjB,KAAKsmB,SAAS7C,UAS9B,OAlGc,SA2FRA,IAA4BA,EAAYvE,GAAYiD,EAAWjD,GAAYuE,EAAY4C,GAAWlE,EAAWkE,KAEjHrmB,KAAKsmB,SAASzD,UAAYY,EAAYtB,EAAWniB,KAAKsmB,SAASzD,UAAY,EAC3E7iB,KAAKgrB,iBAAiB7I,EAAUniB,KAAKwiB,GAAIxiB,KAAKsmB,WAGhDtmB,KAAKsmB,SAAS7C,UAAYtB,EACnBniB,KAAKwiB,GAGd,SAAS+I,IACPvrB,KAAK8b,MAAQ9b,KAAKwrB,qBAoBpB,SAAShF,EAAUiE,IAjBnB,SAAqBgB,EAAQC,GAC3B,GAAID,EAAOnV,UAAYoV,EAAOpV,SAAWmV,EAAO7jB,IAAM8jB,EAAO9jB,EAC3D,OAAO,EAGT,IAAI7J,EACAE,EAAMwtB,EAAOnV,QAEjB,IAAKvY,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,GAAI0tB,EAAOrqB,EAAErD,GAAG,KAAO2tB,EAAOtqB,EAAErD,GAAG,IAAM0tB,EAAOrqB,EAAErD,GAAG,KAAO2tB,EAAOtqB,EAAErD,GAAG,IAAM0tB,EAAOtjB,EAAEpK,GAAG,KAAO2tB,EAAOvjB,EAAEpK,GAAG,IAAM0tB,EAAOtjB,EAAEpK,GAAG,KAAO2tB,EAAOvjB,EAAEpK,GAAG,IAAM0tB,EAAO1tB,EAAEA,GAAG,KAAO2tB,EAAO3tB,EAAEA,GAAG,IAAM0tB,EAAO1tB,EAAEA,GAAG,KAAO2tB,EAAO3tB,EAAEA,GAAG,GAC1N,OAAO,EAIX,OAAO,GAIF4tB,CAAY3rB,KAAKoB,EAAGqpB,KACvBzqB,KAAKoB,EAAIwqB,WAAW7gB,MAAM0f,GAC1BzqB,KAAKwrB,qBAAqBK,gBAC1B7rB,KAAKwrB,qBAAqBM,SAAS9rB,KAAKoB,GACxCpB,KAAKyE,MAAO,EACZzE,KAAK8b,MAAQ9b,KAAKwrB,sBAItB,SAAS7E,IACP,GAAI3mB,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,QAEnC,GAAK9mB,KAAK+mB,gBAAgB7oB,OAKjC,GAAI8B,KAAKgnB,KACPhnB,KAAKwmB,UAAUxmB,KAAKwiB,QADtB,CAKAxiB,KAAKgnB,MAAO,EACZhnB,KAAKyE,MAAO,EACZ,IACI1G,EADAmpB,EAAalnB,KAAKmnB,GAAKnnB,KAAKwiB,GAAKxiB,KAAK+b,KAAKnB,GAAK5a,KAAK+b,KAAKnB,GAAG7S,EAAI/H,KAAK+b,KAAKnQ,GAAG7D,EAE9E9J,EAAM+B,KAAK+mB,gBAAgB7oB,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBmpB,EAAalnB,KAAK+mB,gBAAgBhpB,GAAGmpB,GAGvClnB,KAAKwmB,UAAUU,GACflnB,KAAKgnB,MAAO,EACZhnB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,aArBlC9mB,KAAKyE,MAAO,EA0BhB,SAASsnB,EAAcnF,EAAM7K,EAAMnc,GACjCI,KAAKuiB,SAAW,QAChBviB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAKsE,UAAYsiB,EACjB5mB,KAAK4mB,KAAOA,EACZ5mB,KAAK+b,KAAOA,EACZ/b,KAAK+H,GAAI,EACT/H,KAAKmnB,IAAK,EACVnnB,KAAKyE,MAAO,EACZ,IAAIoX,EAAoB,IAATjc,EAAamc,EAAKnQ,GAAG7D,EAAIgU,EAAKnB,GAAG7S,EAChD/H,KAAKoB,EAAIwqB,WAAW7gB,MAAM8Q,GAC1B7b,KAAKwiB,GAAKoJ,WAAW7gB,MAAM/K,KAAKoB,GAChCpB,KAAKwrB,qBAAuBQ,qBAAqBC,qBACjDjsB,KAAK8b,MAAQ9b,KAAKwrB,qBAClBxrB,KAAK8b,MAAMgQ,SAAS9rB,KAAKoB,GACzBpB,KAAKuG,MAAQglB,EACbvrB,KAAK+mB,gBAAkB,GAGzB,SAASK,EAAUC,GACjBrnB,KAAK+mB,gBAAgB/jB,KAAKqkB,GAC1BrnB,KAAKsE,UAAUJ,mBAAmBlE,MAQpC,SAASksB,EAAuBtF,EAAM7K,EAAMnc,GAC1CI,KAAKuiB,SAAW,QAChBviB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK4mB,KAAOA,EACZ5mB,KAAKsE,UAAYsiB,EACjB5mB,KAAKsiB,WAAasE,EAAK7K,KAAK2L,GAC5B1nB,KAAK8iB,UAAqB,IAATljB,EAAamc,EAAKnQ,GAAG7D,EAAIgU,EAAKnB,GAAG7S,EAClD/H,KAAK+H,GAAI,EACT/H,KAAKmnB,IAAK,EACV,IACIlpB,EAAM+B,KAAK8iB,UAAU,GAAG3hB,EAAE,GAAGpD,EAAEG,OACxB8B,KAAK8iB,UAAU,GAAG3hB,EAAE,GAAGpD,EAAE,GAAGG,OACvC8B,KAAKoB,EAAIwqB,WAAWhX,aACpB5U,KAAKoB,EAAEuoB,YAAY3pB,KAAK8iB,UAAU,GAAG3hB,EAAE,GAAGyG,EAAG3J,GAC7C+B,KAAKwiB,GAAKoJ,WAAW7gB,MAAM/K,KAAKoB,GAChCpB,KAAKwrB,qBAAuBQ,qBAAqBC,qBACjDjsB,KAAK8b,MAAQ9b,KAAKwrB,qBAClBxrB,KAAK8b,MAAMgQ,SAAS9rB,KAAKoB,GACzBpB,KAAKyjB,WAjNS,OAkNdzjB,KAAKuG,MAAQglB,EACbvrB,KAAKsmB,SAAW,CACd7C,WApNY,OAqNZZ,UAAW,GAEb7iB,KAAK+mB,gBAAkB,CAACuE,EAA4BpoB,KAAKlD,OA7B3D+rB,EAActpB,UAAUuoB,iBAAmBA,EAC3Ce,EAActpB,UAAUiC,SAAWiiB,EACnCoF,EAActpB,UAAU+jB,UAAYA,EACpCuF,EAActpB,UAAU2kB,UAAYA,EA6BpC8E,EAAuBzpB,UAAUiC,SAAWiiB,EAC5CuF,EAAuBzpB,UAAUuoB,iBAAmBA,EACpDkB,EAAuBzpB,UAAU+jB,UAAYA,EAC7C0F,EAAuBzpB,UAAU2kB,UAAYA,EAE7C,IAAI+E,EAAmB,WACrB,IAAIC,EAAS1tB,YAEb,SAASytB,EAAiBvF,EAAM7K,GAO9B/b,KAAKoB,EAAIwqB,WAAWhX,aACpB5U,KAAKoB,EAAEuoB,aAAY,EAAM,GACzB3pB,KAAKwrB,qBAAuBQ,qBAAqBC,qBACjDjsB,KAAK8b,MAAQ9b,KAAKwrB,qBAClBxrB,KAAKwrB,qBAAqBM,SAAS9rB,KAAKoB,GACxCpB,KAAK6B,EAAIka,EAAKla,EACd7B,KAAK4mB,KAAOA,EACZ5mB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK8mB,SAAW,EAChB9mB,KAAK2E,6BAA6BiiB,GAClC5mB,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,EAAG,EAAG,EAAGzB,MACrDA,KAAKmB,EAAI4gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK5a,EAAG,EAAG,EAAGnB,MAEjDA,KAAKoE,kBAAkBlG,OACzB8B,KAAK+H,GAAI,GAET/H,KAAK+H,GAAI,EACT/H,KAAKqsB,oBAuDT,OAlDAF,EAAiB1pB,UAAY,CAC3B8D,MAAOglB,EACP7mB,SAAU,WACJ1E,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,UAI1C9mB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,QACpC9mB,KAAKwE,2BAEDxE,KAAKyE,MACPzE,KAAKqsB,qBAGTA,iBAAkB,WAChB,IAAIhgB,EAAKrM,KAAKyB,EAAEL,EAAE,GACdsJ,EAAK1K,KAAKyB,EAAEL,EAAE,GACdkrB,EAAKtsB,KAAKmB,EAAEC,EAAE,GAAK,EACnB2kB,EAAK/lB,KAAKmB,EAAEC,EAAE,GAAK,EAEnBmrB,EAAiB,IAAXvsB,KAAK6B,EAEX2qB,EAAKxsB,KAAKoB,EACdorB,EAAGprB,EAAE,GAAG,GAAKiL,EACbmgB,EAAGprB,EAAE,GAAG,GAAKsJ,EAAKqb,EAClByG,EAAGprB,EAAE,GAAG,GAAKmrB,EAAMlgB,EAAKigB,EAAKjgB,EAAKigB,EAClCE,EAAGprB,EAAE,GAAG,GAAKsJ,EACb8hB,EAAGprB,EAAE,GAAG,GAAKiL,EACbmgB,EAAGprB,EAAE,GAAG,GAAKsJ,EAAKqb,EAClByG,EAAGprB,EAAE,GAAG,GAAKmrB,EAAMlgB,EAAKigB,EAAKjgB,EAAKigB,EAClCE,EAAGprB,EAAE,GAAG,GAAKsJ,EACb8hB,EAAGzuB,EAAE,GAAG,GAAKwuB,EAAMlgB,EAAKigB,EAAKF,EAAS/f,EAAKigB,EAAKF,EAChDI,EAAGzuB,EAAE,GAAG,GAAK2M,EAAKqb,EAClByG,EAAGzuB,EAAE,GAAG,GAAKwuB,EAAMlgB,EAAKigB,EAAKjgB,EAAKigB,EAClCE,EAAGzuB,EAAE,GAAG,GAAK2M,EAAKqb,EAAKqG,EACvBI,EAAGzuB,EAAE,GAAG,GAAKwuB,EAAMlgB,EAAKigB,EAAKF,EAAS/f,EAAKigB,EAAKF,EAChDI,EAAGzuB,EAAE,GAAG,GAAK2M,EAAKqb,EAClByG,EAAGzuB,EAAE,GAAG,GAAKwuB,EAAMlgB,EAAKigB,EAAKjgB,EAAKigB,EAClCE,EAAGzuB,EAAE,GAAG,GAAK2M,EAAKqb,EAAKqG,EACvBI,EAAGrkB,EAAE,GAAG,GAAKokB,EAAMlgB,EAAKigB,EAAKF,EAAS/f,EAAKigB,EAAKF,EAChDI,EAAGrkB,EAAE,GAAG,GAAKuC,EAAKqb,EAClByG,EAAGrkB,EAAE,GAAG,GAAKokB,EAAMlgB,EAAKigB,EAAKjgB,EAAKigB,EAClCE,EAAGrkB,EAAE,GAAG,GAAKuC,EAAKqb,EAAKqG,EACvBI,EAAGrkB,EAAE,GAAG,GAAKokB,EAAMlgB,EAAKigB,EAAKF,EAAS/f,EAAKigB,EAAKF,EAChDI,EAAGrkB,EAAE,GAAG,GAAKuC,EAAKqb,EAClByG,EAAGrkB,EAAE,GAAG,GAAKokB,EAAMlgB,EAAKigB,EAAKjgB,EAAKigB,EAClCE,EAAGrkB,EAAE,GAAG,GAAKuC,EAAKqb,EAAKqG,IAG3BxZ,gBAAgB,CAAC3O,0BAA2BkoB,GACrCA,EAlFc,GAqFnBM,EAAoB,WACtB,SAASA,EAAkB7F,EAAM7K,GAC/B/b,KAAKoB,EAAIwqB,WAAWhX,aACpB5U,KAAKoB,EAAEuoB,aAAY,EAAM,GACzB3pB,KAAK4mB,KAAOA,EACZ5mB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK+b,KAAOA,EACZ/b,KAAK8mB,SAAW,EAChB9mB,KAAK6B,EAAIka,EAAKla,EACd7B,KAAK2E,6BAA6BiiB,GAElB,IAAZ7K,EAAK5U,IACPnH,KAAK0sB,GAAK3K,gBAAgB8F,QAAQjB,EAAM7K,EAAK2Q,GAAI,EAAG,EAAG1sB,MACvDA,KAAK2sB,GAAK5K,gBAAgB8F,QAAQjB,EAAM7K,EAAK4Q,GAAI,EAAG,IAAM3sB,MAC1DA,KAAK4sB,cAAgB5sB,KAAK6sB,mBAE1B7sB,KAAK4sB,cAAgB5sB,KAAK8sB,qBAG5B9sB,KAAK4L,GAAKmW,gBAAgB8F,QAAQjB,EAAM7K,EAAKnQ,GAAI,EAAG,EAAG5L,MACvDA,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,EAAG,EAAG,EAAGzB,MACrDA,KAAKqB,EAAI0gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK1a,EAAG,EAAG7C,UAAWwB,MAC7DA,KAAKyoB,GAAK1G,gBAAgB8F,QAAQjB,EAAM7K,EAAK0M,GAAI,EAAG,EAAGzoB,MACvDA,KAAK+sB,GAAKhL,gBAAgB8F,QAAQjB,EAAM7K,EAAKgR,GAAI,EAAG,IAAM/sB,MAC1DA,KAAKwrB,qBAAuBQ,qBAAqBC,qBACjDjsB,KAAKwrB,qBAAqBM,SAAS9rB,KAAKoB,GACxCpB,KAAK8b,MAAQ9b,KAAKwrB,qBAEdxrB,KAAKoE,kBAAkBlG,OACzB8B,KAAK+H,GAAI,GAET/H,KAAK+H,GAAI,EACT/H,KAAK4sB,iBA0FT,OArFAH,EAAkBhqB,UAAY,CAC5B8D,MAAOglB,EACP7mB,SAAU,WACJ1E,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,UAI1C9mB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,QACpC9mB,KAAKwE,2BAEDxE,KAAKyE,MACPzE,KAAK4sB,kBAGTC,kBAAmB,WACjB,IAaI9uB,EACAivB,EACAC,EACAC,EAhBAC,EAAiC,EAAxBtwB,KAAKU,MAAMyC,KAAK4L,GAAGxK,GAC5BsF,EAAkB,EAAV7J,KAAK4B,GAAS0uB,EAKtBC,GAAW,EACXC,EAAUrtB,KAAKyoB,GAAGrnB,EAClBksB,EAAWttB,KAAK0sB,GAAGtrB,EACnBmsB,EAAYvtB,KAAK+sB,GAAG3rB,EACpBosB,EAAaxtB,KAAK2sB,GAAGvrB,EACrBqsB,EAAmB,EAAI5wB,KAAK4B,GAAK4uB,GAAoB,EAATF,GAC5CO,EAAoB,EAAI7wB,KAAK4B,GAAK6uB,GAAqB,EAATH,GAK9CQ,GAAc9wB,KAAK4B,GAAK,EAC5BkvB,GAAc3tB,KAAKqB,EAAED,EACrB,IAAIwU,EAAsB,IAAhB5V,KAAK+b,KAAKla,GAAW,EAAI,EAGnC,IAFA7B,KAAKoB,EAAEkV,QAAU,EAEZvY,EAAI,EAAGA,EAAIovB,EAAQpvB,GAAK,EAAG,CAE9BkvB,EAAYG,EAAWG,EAAYC,EACnCN,EAAeE,EAAWK,EAAmBC,EAC7C,IAAIxiB,GAHJ8hB,EAAMI,EAAWC,EAAUC,GAGbzwB,KAAKoJ,IAAI0nB,GACnBxiB,EAAI6hB,EAAMnwB,KAAKsJ,IAAIwnB,GACnBC,EAAW,IAAN1iB,GAAiB,IAANC,EAAU,EAAIA,EAAItO,KAAKM,KAAK+N,EAAIA,EAAIC,EAAIA,GACxD0iB,EAAW,IAAN3iB,GAAiB,IAANC,EAAU,GAAKD,EAAIrO,KAAKM,KAAK+N,EAAIA,EAAIC,EAAIA,GAC7DD,IAAMlL,KAAKyB,EAAEL,EAAE,GACf+J,IAAMnL,KAAKyB,EAAEL,EAAE,GACfpB,KAAKoB,EAAE6oB,YAAY/e,EAAGC,EAAGD,EAAI0iB,EAAKV,EAAeD,EAAYrX,EAAKzK,EAAI0iB,EAAKX,EAAeD,EAAYrX,EAAK1K,EAAI0iB,EAAKV,EAAeD,EAAYrX,EAAKzK,EAAI0iB,EAAKX,EAAeD,EAAYrX,EAAK7X,GAAG,GAMhMqvB,GAAYA,EACZO,GAAcjnB,EAAQkP,IAG1BkX,qBAAsB,WACpB,IAKI/uB,EALAovB,EAAStwB,KAAKU,MAAMyC,KAAK4L,GAAGxK,GAC5BsF,EAAkB,EAAV7J,KAAK4B,GAAS0uB,EACtBH,EAAMhtB,KAAKyoB,GAAGrnB,EACd6rB,EAAYjtB,KAAK+sB,GAAG3rB,EACpB8rB,EAAe,EAAIrwB,KAAK4B,GAAKuuB,GAAgB,EAATG,GAEpCQ,GAAc9wB,KAAK4B,GAAK,EACxBmX,EAAsB,IAAhB5V,KAAK+b,KAAKla,GAAW,EAAI,EAInC,IAHA8rB,GAAc3tB,KAAKqB,EAAED,EACrBpB,KAAKoB,EAAEkV,QAAU,EAEZvY,EAAI,EAAGA,EAAIovB,EAAQpvB,GAAK,EAAG,CAC9B,IAAImN,EAAI8hB,EAAMnwB,KAAKoJ,IAAI0nB,GACnBxiB,EAAI6hB,EAAMnwB,KAAKsJ,IAAIwnB,GACnBC,EAAW,IAAN1iB,GAAiB,IAANC,EAAU,EAAIA,EAAItO,KAAKM,KAAK+N,EAAIA,EAAIC,EAAIA,GACxD0iB,EAAW,IAAN3iB,GAAiB,IAANC,EAAU,GAAKD,EAAIrO,KAAKM,KAAK+N,EAAIA,EAAIC,EAAIA,GAC7DD,IAAMlL,KAAKyB,EAAEL,EAAE,GACf+J,IAAMnL,KAAKyB,EAAEL,EAAE,GACfpB,KAAKoB,EAAE6oB,YAAY/e,EAAGC,EAAGD,EAAI0iB,EAAKV,EAAeD,EAAYrX,EAAKzK,EAAI0iB,EAAKX,EAAeD,EAAYrX,EAAK1K,EAAI0iB,EAAKV,EAAeD,EAAYrX,EAAKzK,EAAI0iB,EAAKX,EAAeD,EAAYrX,EAAK7X,GAAG,GAChM4vB,GAAcjnB,EAAQkP,EAGxB5V,KAAK8b,MAAM5d,OAAS,EACpB8B,KAAK8b,MAAM,GAAK9b,KAAKoB,IAGzBwR,gBAAgB,CAAC3O,0BAA2BwoB,GACrCA,EA1He,GA6HpBqB,EAAoB,WACtB,SAASA,EAAkBlH,EAAM7K,GAC/B/b,KAAKoB,EAAIwqB,WAAWhX,aACpB5U,KAAKoB,EAAEwG,GAAI,EACX5H,KAAKwrB,qBAAuBQ,qBAAqBC,qBACjDjsB,KAAKwrB,qBAAqBM,SAAS9rB,KAAKoB,GACxCpB,KAAK8b,MAAQ9b,KAAKwrB,qBAClBxrB,KAAK4mB,KAAOA,EACZ5mB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK8mB,SAAW,EAChB9mB,KAAK6B,EAAIka,EAAKla,EACd7B,KAAK2E,6BAA6BiiB,GAClC5mB,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAKta,EAAG,EAAG,EAAGzB,MACrDA,KAAKmB,EAAI4gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK5a,EAAG,EAAG,EAAGnB,MACrDA,KAAKqB,EAAI0gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK1a,EAAG,EAAG,EAAGrB,MAEjDA,KAAKoE,kBAAkBlG,OACzB8B,KAAK+H,GAAI,GAET/H,KAAK+H,GAAI,EACT/H,KAAK+tB,qBA+DT,OA1DAD,EAAkBrrB,UAAY,CAC5BsrB,kBAAmB,WACjB,IAAI1hB,EAAKrM,KAAKyB,EAAEL,EAAE,GACdsJ,EAAK1K,KAAKyB,EAAEL,EAAE,GACd4sB,EAAKhuB,KAAKmB,EAAEC,EAAE,GAAK,EACnB8nB,EAAKlpB,KAAKmB,EAAEC,EAAE,GAAK,EACnBtE,EAAQY,OAAOswB,EAAI9E,EAAIlpB,KAAKqB,EAAED,GAC9BgrB,EAAStvB,GAAS,EAAI4B,aAC1BsB,KAAKoB,EAAEkV,QAAU,EAEF,IAAXtW,KAAK6B,GAAsB,IAAX7B,KAAK6B,GACvB7B,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ,GAAG,GACrGpsB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ/f,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAO,GAAG,GAEvF,IAAVA,GACFkD,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ,GAAG,GACrGpsB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ/f,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAO,GAAG,GACrGkD,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI,GAAG,KAErGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAItjB,EAAKwe,EAAI,GAClFlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAI7c,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ/f,EAAK2hB,EAAItjB,EAAKwe,EAAI,MAGpFlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ/f,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAO,GAAG,GAEvF,IAAVA,GACFkD,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ,GAAG,GACrGpsB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ/f,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAO,GAAG,GACrGkD,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAKlxB,EAAO4N,EAAKwe,EAAI,GAAG,GACrGlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKpsB,EAAOuP,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ,GAAG,KAErGpsB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAItjB,EAAKwe,EAAI,GAAG,GACrFlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAI7c,EAAK2hB,EAAItjB,EAAKwe,EAAKkD,EAAQ/f,EAAK2hB,EAAItjB,EAAKwe,EAAI,GAAG,GACrFlpB,KAAKoB,EAAE6oB,YAAY5d,EAAK2hB,EAAItjB,EAAKwe,EAAI7c,EAAK2hB,EAAK5B,EAAQ1hB,EAAKwe,EAAI7c,EAAK2hB,EAAItjB,EAAKwe,EAAI,GAAG,MAI3FxkB,SAAU,SAAkByd,GACtBniB,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,UAI1C9mB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,QACpC9mB,KAAKwE,2BAEDxE,KAAKyE,MACPzE,KAAK+tB,sBAGTxnB,MAAOglB,GAET3Y,gBAAgB,CAAC3O,0BAA2B6pB,GACrCA,EAnFe,GAyHxB,IAAI5d,EAAK,CACT,aApCA,SAAsB0W,EAAM7K,EAAMnc,GAChC,IAAIuE,EAuBJ,OArBa,IAATvE,GAAuB,IAATA,EAKduE,GAJsB,IAATvE,EAAamc,EAAKnQ,GAAKmQ,EAAKnB,IACvB7S,EAEX7J,OACA,IAAIguB,EAAuBtF,EAAM7K,EAAMnc,GAEvC,IAAImsB,EAAcnF,EAAM7K,EAAMnc,GAErB,IAATA,EACTuE,EAAO,IAAI2pB,EAAkBlH,EAAM7K,GACjB,IAATnc,EACTuE,EAAO,IAAIgoB,EAAiBvF,EAAM7K,GAChB,IAATnc,IACTuE,EAAO,IAAIsoB,EAAkB7F,EAAM7K,IAGjC5X,EAAK4D,GACP6e,EAAK1iB,mBAAmBC,GAGnBA,GAaT,uBAVA,WACE,OAAO4nB,GAUT,gCAPA,WACE,OAAOG,IAOT,OAAOhc,EA/iBkB,GAkjBvB+d,gBACE/d,GAAK,GACLge,UAAY,GAChBhe,GAAGie,iBAGH,SAA0Bhe,EAAIlU,GACvBiyB,UAAU/d,KACb+d,UAAU/d,GAAMlU,IAJpBiU,GAAGke,YAQH,SAAqBje,EAAIyW,EAAM7K,GAC7B,OAAO,IAAImS,UAAU/d,GAAIyW,EAAM7K,IAG1B7L,IAfHA,GACAge,UAiBN,SAASG,iBAmDT,SAASC,gBAoYT,SAASC,wBAqHT,SAASC,0BA6ET,SAASC,oBAqRT,SAASC,kBACP1uB,KAAKsW,QAAU,EACftW,KAAK0pB,WAAa,EAClB1pB,KAAKsa,OAAShc,iBAAiB0B,KAAK0pB,YAuBtC,SAASiF,aAAa/H,EAAM7K,EAAM6S,EAAUtqB,GAC1CtE,KAAK4mB,KAAOA,EACZ5mB,KAAK8mB,SAAW,EAChB9mB,KAAK6uB,UAAYvwB,iBAAiByd,EAAK7d,QACvC8B,KAAK4uB,SAAWA,EAChB5uB,KAAK+H,GAAI,EACT/H,KAAK8uB,QAAU,GACf9uB,KAAK+uB,UAAY3rB,iBAAiB,UAAW2Y,EAAK7d,OAAS6d,EAAK7d,OAAS,EAAI,GAC7E8B,KAAKgvB,WAAa5rB,iBAAiB,UAAW,GAC9CpD,KAAK2E,6BAA6BL,GAClC,IAAIvG,EAEAoG,EADAlG,EAAM8d,EAAK7d,QAAU,EAGzB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBoG,EAAO4d,gBAAgB8F,QAAQjB,EAAM7K,EAAKhe,GAAGqD,EAAG,EAAG,EAAGpB,MACtDA,KAAK+H,EAAI5D,EAAK4D,GAAK/H,KAAK+H,EACxB/H,KAAK6uB,UAAU9wB,GAAK,CAClBmK,EAAG6T,EAAKhe,GAAGmK,EACXzG,EAAG0C,GAIFnE,KAAK+H,GACR/H,KAAK0E,UAAS,GAGhB1E,KAAKuE,YAAcvE,KAAK+H,EAoC1B,SAASknB,iBAAiBrI,EAAM7K,EAAMzX,GACpCtE,KAAK+b,KAAOA,EACZ/b,KAAK4H,EAAIxE,iBAAiB,SAAmB,EAAT2Y,EAAKta,GACzC,IAAIytB,EAAUnT,EAAKhU,EAAEA,EAAE,GAAG5G,EAAI4a,EAAKhU,EAAEA,EAAE,GAAG5G,EAAEjD,OAAkB,EAAT6d,EAAKta,EAAQsa,EAAKhU,EAAEA,EAAE7J,OAAkB,EAAT6d,EAAKta,EACzFzB,KAAKmI,EAAI/E,iBAAiB,UAAW8rB,GACrClvB,KAAKmvB,OAAQ,EACbnvB,KAAKovB,OAAQ,EACbpvB,KAAKqvB,aAAervB,KAAKsvB,mBACzBtvB,KAAKuvB,YAAcL,EACnBlvB,KAAK2E,6BAA6BL,GAClCtE,KAAKmE,KAAO4d,gBAAgB8F,QAAQjB,EAAM7K,EAAKhU,EAAG,EAAG,KAAM/H,MAC3DA,KAAK+H,EAAI/H,KAAKmE,KAAK4D,EACnB/H,KAAK0E,UAAS,GAj/BhB2pB,cAAc5rB,UAAU+sB,uBAAyB,aAEjDnB,cAAc5rB,UAAUgtB,mBAAqB,aAE7CpB,cAAc5rB,UAAUqpB,SAAW,SAAU/P,GAC3C,IAAK/b,KAAKkW,OAAQ,CAEhB6F,EAAKmI,GAAG5f,UAAUJ,mBAAmB6X,EAAKmI,IAC1C,IAAInO,EAAY,CACd2Z,MAAO3T,EAAKmI,GACZnI,KAAMA,EACNyP,qBAAsBQ,qBAAqBC,sBAE7CjsB,KAAKsa,OAAOtX,KAAK+S,GACjB/V,KAAKyvB,mBAAmB1Z,GAEpB/V,KAAKuE,aACPwX,EAAK4T,kBAKXtB,cAAc5rB,UAAUooB,KAAO,SAAUjE,EAAM7K,GAC7C/b,KAAKsa,OAAS,GACdta,KAAK4mB,KAAOA,EACZ5mB,KAAK2E,6BAA6BiiB,GAClC5mB,KAAKwvB,uBAAuB5I,EAAM7K,GAClC/b,KAAK8mB,QAAUzqB,oBACf2D,KAAKkW,QAAS,EACdlW,KAAK+H,GAAI,EAEL/H,KAAKoE,kBAAkBlG,OACzB8B,KAAK+H,GAAI,EAET/H,KAAK0E,UAAS,IAIlB2pB,cAAc5rB,UAAUmtB,YAAc,WAChC5vB,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,UAI1C9mB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,QACpC9mB,KAAKwE,6BAGPoO,gBAAgB,CAAC3O,0BAA2BoqB,eAI5Czb,gBAAgB,CAACyb,eAAgBC,cAEjCA,aAAa7rB,UAAU+sB,uBAAyB,SAAU5I,EAAM7K,GAC9D/b,KAAKmB,EAAI4gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK5a,EAAG,EAAG,IAAMnB,MACxDA,KAAK6H,EAAIka,gBAAgB8F,QAAQjB,EAAM7K,EAAKlU,EAAG,EAAG,IAAM7H,MACxDA,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,EAAG,EAAG,EAAGnI,MACrDA,KAAK6vB,OAAS,EACd7vB,KAAK8vB,OAAS,EACd9vB,KAAK0E,SAAW1E,KAAK4vB,YACrB5vB,KAAKiI,EAAI8T,EAAK9T,EACdjI,KAAKuE,cAAgBvE,KAAKmB,EAAE4lB,gBAAgB7oB,UAAY8B,KAAK6H,EAAEkf,gBAAgB7oB,UAAY8B,KAAKmI,EAAE4e,gBAAgB7oB,QAGpHowB,aAAa7rB,UAAUgtB,mBAAqB,SAAU1Z,GACpDA,EAAUga,UAAY,IAGxBzB,aAAa7rB,UAAUutB,oBAAsB,SAAU7uB,EAAG0G,EAAGooB,EAAa1b,EAAa2b,GACrF,IAAIC,EAAW,GAEXtoB,GAAK,EACPsoB,EAASntB,KAAK,CACZ7B,EAAGA,EACH0G,EAAGA,IAEI1G,GAAK,EACdgvB,EAASntB,KAAK,CACZ7B,EAAGA,EAAI,EACP0G,EAAGA,EAAI,KAGTsoB,EAASntB,KAAK,CACZ7B,EAAGA,EACH0G,EAAG,IAELsoB,EAASntB,KAAK,CACZ7B,EAAG,EACH0G,EAAGA,EAAI,KAIX,IACI9J,EAEAqyB,EAHAC,EAAgB,GAEhBpyB,EAAMkyB,EAASjyB,OAGnB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAIzB,IAAIuyB,EAAQC,EADd,IAFAH,EAAYD,EAASpyB,IAEP8J,EAAIqoB,EAAsB3b,GAAe6b,EAAUjvB,EAAI+uB,EAAsB3b,EAAc0b,QAIrGK,EADEF,EAAUjvB,EAAI+uB,GAAuB3b,EAC9B,GAEC6b,EAAUjvB,EAAI+uB,EAAsB3b,GAAe0b,EAI7DM,EADEH,EAAUvoB,EAAIqoB,GAAuB3b,EAAc0b,EAC5C,GAECG,EAAUvoB,EAAIqoB,EAAsB3b,GAAe0b,EAG/DI,EAAcrtB,KAAK,CAACstB,EAAQC,IAQhC,OAJKF,EAAcnyB,QACjBmyB,EAAcrtB,KAAK,CAAC,EAAG,IAGlBqtB,GAGT/B,aAAa7rB,UAAU+tB,iBAAmB,SAAUT,GAClD,IAAIhyB,EACAE,EAAM8xB,EAAU7xB,OAEpB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBkY,qBAAqBwa,QAAQV,EAAUhyB,IAIzC,OADAgyB,EAAU7xB,OAAS,EACZ6xB,GAGTzB,aAAa7rB,UAAUiuB,cAAgB,SAAUzJ,GAC/C,IAAI9lB,EAAG0G,EA6BH8oB,EA3BJ,GAAI3wB,KAAKyE,MAAQwiB,EAAe,CAC9B,IAAI9e,EAAInI,KAAKmI,EAAE/G,EAAI,IAAM,IAWzB,GATI+G,EAAI,IACNA,GAAK,IAGPhH,GAAKnB,KAAKmB,EAAEC,EAAI,EAAI,EAAIpB,KAAKmB,EAAEC,EAAI,EAAI,EAAIpB,KAAKmB,EAAEC,GAAK+G,IACvDN,GAAK7H,KAAK6H,EAAEzG,EAAI,EAAI,EAAIpB,KAAK6H,EAAEzG,EAAI,EAAI,EAAIpB,KAAK6H,EAAEzG,GAAK+G,GAI5C,CACT,IAAIyoB,EAAKzvB,EACTA,EAAI0G,EACJA,EAAI+oB,EAGNzvB,EAA4B,KAAxBtE,KAAKC,MAAU,IAAJqE,GACf0G,EAA4B,KAAxBhL,KAAKC,MAAU,IAAJ+K,GACf7H,KAAK6vB,OAAS1uB,EACdnB,KAAK8vB,OAASjoB,OAEd1G,EAAInB,KAAK6vB,OACThoB,EAAI7H,KAAK8vB,OAIX,IAAI/xB,EAEA+J,EACA4R,EACAqW,EACAlU,EACAgV,EALA5yB,EAAM+B,KAAKsa,OAAOpc,OAMlBgyB,EAAsB,EAE1B,GAAIroB,IAAM1G,EACR,IAAKpD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKsa,OAAOvc,GAAGytB,qBAAqBK,gBACpC7rB,KAAKsa,OAAOvc,GAAG2xB,MAAMjrB,MAAO,EAC5BzE,KAAKsa,OAAOvc,GAAG2xB,MAAM5T,MAAQ9b,KAAKsa,OAAOvc,GAAGytB,qBAExCxrB,KAAKyE,OACPzE,KAAKsa,OAAOvc,GAAGgyB,UAAU7xB,OAAS,QAGjC,GAAY,IAAN2J,GAAiB,IAAN1G,GAAiB,IAAN0G,GAAiB,IAAN1G,GAyGvC,GAAInB,KAAKyE,KACd,IAAK1G,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGxBiC,KAAKsa,OAAOvc,GAAGgyB,UAAU7xB,OAAS,EAClC8B,KAAKsa,OAAOvc,GAAG2xB,MAAMjrB,MAAO,MA9GwB,CACtD,IACIsR,EACAyV,EAFA2E,EAAW,GAIf,IAAKpyB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGxB,IAFAgY,EAAY/V,KAAKsa,OAAOvc,IAET2xB,MAAMjrB,MAASzE,KAAKyE,MAASwiB,GAA4B,IAAXjnB,KAAKiI,EAE3D,CAKL,GAHAyR,GADAiX,EAAa5a,EAAU2Z,MAAM5T,OACXxF,QAClBua,EAAmB,GAEd9a,EAAU2Z,MAAMjrB,MAAQsR,EAAUga,UAAU7xB,OAC/C2yB,EAAmB9a,EAAU8a,qBACxB,CAGL,IAFAd,EAAY/vB,KAAKwwB,iBAAiBza,EAAUga,WAEvCjoB,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB+T,EAAW1C,IAAIrD,kBAAkB6a,EAAWrW,OAAOxS,IACnDioB,EAAU/sB,KAAK6Y,GACfgV,GAAoBhV,EAAStF,YAG/BR,EAAU8a,iBAAmBA,EAC7B9a,EAAUga,UAAYA,EAGxBG,GAAuBW,EACvB9a,EAAU2Z,MAAMjrB,MAAO,OAtBvBsR,EAAU2Z,MAAM5T,MAAQ/F,EAAUyV,qBA0BtC,IAGIsF,EAHAR,EAASnvB,EACTovB,EAAS1oB,EACT0M,EAAc,EAGlB,IAAKxW,EAAIE,EAAM,EAAGF,GAAK,EAAGA,GAAK,EAG7B,IAFAgY,EAAY/V,KAAKsa,OAAOvc,IAEV2xB,MAAMjrB,KAAM,CAaxB,KAZA+mB,EAAuBzV,EAAUyV,sBACZK,gBAEN,IAAX7rB,KAAKiI,GAAWhK,EAAM,GACxB6yB,EAAQ9wB,KAAKgwB,oBAAoB7uB,EAAG0G,EAAGkO,EAAU8a,iBAAkBtc,EAAa2b,GAChF3b,GAAewB,EAAU8a,kBAEzBC,EAAQ,CAAC,CAACR,EAAQC,IAGpB7W,EAAOoX,EAAM5yB,OAER4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAC5BwoB,EAASQ,EAAMhpB,GAAG,GAClByoB,EAASO,EAAMhpB,GAAG,GAClBqoB,EAASjyB,OAAS,EAEdqyB,GAAU,EACZJ,EAASntB,KAAK,CACZ7B,EAAG4U,EAAU8a,iBAAmBP,EAChCzoB,EAAGkO,EAAU8a,iBAAmBN,IAEzBD,GAAU,EACnBH,EAASntB,KAAK,CACZ7B,EAAG4U,EAAU8a,kBAAoBP,EAAS,GAC1CzoB,EAAGkO,EAAU8a,kBAAoBN,EAAS,MAG5CJ,EAASntB,KAAK,CACZ7B,EAAG4U,EAAU8a,iBAAmBP,EAChCzoB,EAAGkO,EAAU8a,mBAEfV,EAASntB,KAAK,CACZ7B,EAAG,EACH0G,EAAGkO,EAAU8a,kBAAoBN,EAAS,MAI9C,IAAIQ,EAAgB/wB,KAAKgxB,UAAUjb,EAAWoa,EAAS,IAEvD,GAAIA,EAAS,GAAGhvB,IAAMgvB,EAAS,GAAGtoB,EAAG,CACnC,GAAIsoB,EAASjyB,OAAS,EAGpB,GAF4B6X,EAAU2Z,MAAM5T,MAAMxB,OAAOvE,EAAU2Z,MAAM5T,MAAMxF,QAAU,GAE/D1O,EAAG,CAC3B,IAAIqpB,EAAYF,EAAcG,MAC9BlxB,KAAKmxB,SAASJ,EAAevF,GAC7BuF,EAAgB/wB,KAAKgxB,UAAUjb,EAAWoa,EAAS,GAAIc,QAEvDjxB,KAAKmxB,SAASJ,EAAevF,GAC7BuF,EAAgB/wB,KAAKgxB,UAAUjb,EAAWoa,EAAS,IAIvDnwB,KAAKmxB,SAASJ,EAAevF,IAIjCzV,EAAU2Z,MAAM5T,MAAQ0P,KAahC8C,aAAa7rB,UAAU0uB,SAAW,SAAUC,EAAU5F,GACpD,IAAIztB,EACAE,EAAMmzB,EAASlzB,OAEnB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBytB,EAAqBM,SAASsF,EAASrzB,KAI3CuwB,aAAa7rB,UAAU4uB,WAAa,SAAUnlB,EAAKC,EAAKC,EAAK8H,EAAKod,EAAWtH,EAAKuH,GAChFD,EAAUvH,QAAQ5d,EAAI,GAAIA,EAAI,GAAI,IAAK6d,GACvCsH,EAAUvH,QAAQ3d,EAAI,GAAIA,EAAI,GAAI,IAAK4d,EAAM,GAEzCuH,GACFD,EAAUvH,QAAQ7d,EAAI,GAAIA,EAAI,GAAI,IAAK8d,GAGzCsH,EAAUvH,QAAQ7V,EAAI,GAAIA,EAAI,GAAI,IAAK8V,EAAM,IAG/CsE,aAAa7rB,UAAU+uB,oBAAsB,SAAUtgB,EAAQogB,EAAWtH,EAAKuH,GAC7ED,EAAUvH,QAAQ7Y,EAAO,GAAIA,EAAO,GAAI,IAAK8Y,GAC7CsH,EAAUvH,QAAQ7Y,EAAO,GAAIA,EAAO,GAAI,IAAK8Y,EAAM,GAE/CuH,GACFD,EAAUvH,QAAQ7Y,EAAO,GAAIA,EAAO,GAAI,IAAK8Y,GAG/CsH,EAAUvH,QAAQ7Y,EAAO,GAAIA,EAAO,GAAI,IAAK8Y,EAAM,IAGrDsE,aAAa7rB,UAAUuuB,UAAY,SAAUjb,EAAW0b,EAAcH,GACpE,IAEIvzB,EAEA+J,EACA4R,EAEAgY,EAAmBC,EACnB7c,EACA8c,EAEAnc,EAXAsa,EAAYha,EAAUga,UACtBY,EAAa5a,EAAU2Z,MAAM5T,MAAMxB,OAEnCrc,EAAM8X,EAAU2Z,MAAM5T,MAAMxF,QAG5B/B,EAAc,EAId+F,EAAS,GAETiX,GAAW,EAaf,IAXKD,GAKHK,EAAeL,EAAUhb,QACzBb,EAAU6b,EAAUhb,UALpBgb,EAAY1F,WAAWhX,aACvB+c,EAAe,EACflc,EAAU,GAMZ6E,EAAOtX,KAAKsuB,GAEPvzB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAK3B,IAJA+W,EAAUib,EAAUhyB,GAAG+W,QACvBwc,EAAU1pB,EAAI+oB,EAAW5yB,GAAG6J,EAC5B8R,EAAOiX,EAAW5yB,GAAG6J,EAAIkN,EAAQ5W,OAAS4W,EAAQ5W,OAAS,EAEtD4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAGzB,GAAIyM,GAFJmd,EAAoB5c,EAAQhN,EAAI,IAEIyM,YAAckd,EAAatwB,EAC7DoT,GAAemd,EAAkBnd,YACjC+c,EAAU1pB,GAAI,MACT,IAAI2M,EAAckd,EAAa5pB,EAAG,CACvCypB,EAAU1pB,GAAI,EACd,MAEI6pB,EAAatwB,GAAKoT,GAAekd,EAAa5pB,GAAK0M,EAAcmd,EAAkBnd,aACrFvU,KAAKqxB,WAAWV,EAAW5yB,GAAGqD,EAAE0G,EAAI,GAAI6oB,EAAW5yB,GAAGoK,EAAEL,EAAI,GAAI6oB,EAAW5yB,GAAGA,EAAE+J,GAAI6oB,EAAW5yB,GAAGqD,EAAE0G,GAAIwpB,EAAWK,EAAcJ,GACjIA,GAAW,IAEXK,EAAUzY,IAAI3C,cAAcma,EAAW5yB,GAAGqD,EAAE0G,EAAI,GAAI6oB,EAAW5yB,GAAGqD,EAAE0G,GAAI6oB,EAAW5yB,GAAGoK,EAAEL,EAAI,GAAI6oB,EAAW5yB,GAAGA,EAAE+J,IAAK2pB,EAAatwB,EAAIoT,GAAemd,EAAkBnd,aAAckd,EAAa5pB,EAAI0M,GAAemd,EAAkBnd,YAAaO,EAAQhN,EAAI,IAChQ9H,KAAKwxB,oBAAoBI,EAASN,EAAWK,EAAcJ,GAE3DA,GAAW,EACXD,EAAU1pB,GAAI,GAGhB2M,GAAemd,EAAkBnd,YACjCod,GAAgB,EAIpB,GAAIhB,EAAW5yB,GAAG6J,GAAKkN,EAAQ5W,OAAQ,CAGrC,GAFAwzB,EAAoB5c,EAAQhN,EAAI,GAE5ByM,GAAekd,EAAa5pB,EAAG,CACjC,IAAImN,EAAgBF,EAAQhN,EAAI,GAAGyM,YAE/Bkd,EAAatwB,GAAKoT,GAAekd,EAAa5pB,GAAK0M,EAAcS,GACnEhV,KAAKqxB,WAAWV,EAAW5yB,GAAGqD,EAAE0G,EAAI,GAAI6oB,EAAW5yB,GAAGoK,EAAEL,EAAI,GAAI6oB,EAAW5yB,GAAGA,EAAE,GAAI4yB,EAAW5yB,GAAGqD,EAAE,GAAIkwB,EAAWK,EAAcJ,GACjIA,GAAW,IAEXK,EAAUzY,IAAI3C,cAAcma,EAAW5yB,GAAGqD,EAAE0G,EAAI,GAAI6oB,EAAW5yB,GAAGqD,EAAE,GAAIuvB,EAAW5yB,GAAGoK,EAAEL,EAAI,GAAI6oB,EAAW5yB,GAAGA,EAAE,IAAK0zB,EAAatwB,EAAIoT,GAAeS,GAAgByc,EAAa5pB,EAAI0M,GAAeS,EAAeF,EAAQhN,EAAI,IAChO9H,KAAKwxB,oBAAoBI,EAASN,EAAWK,EAAcJ,GAE3DA,GAAW,EACXD,EAAU1pB,GAAI,QAGhB0pB,EAAU1pB,GAAI,EAGhB2M,GAAemd,EAAkBnd,YACjCod,GAAgB,EAQlB,GALIL,EAAUhb,UACZgb,EAAUvH,QAAQuH,EAAUlwB,EAAEqU,GAAS,GAAI6b,EAAUlwB,EAAEqU,GAAS,GAAI,IAAKA,GACzE6b,EAAUvH,QAAQuH,EAAUlwB,EAAEkwB,EAAUhb,QAAU,GAAG,GAAIgb,EAAUlwB,EAAEkwB,EAAUhb,QAAU,GAAG,GAAI,IAAKgb,EAAUhb,QAAU,IAGvH/B,EAAckd,EAAa5pB,EAC7B,MAGE9J,EAAIE,EAAM,IACZqzB,EAAY1F,WAAWhX,aACvB2c,GAAW,EACXjX,EAAOtX,KAAKsuB,GACZK,EAAe,GAInB,OAAOrX,GAGT2T,eAAeE,iBAAiB,KAAMG,cAItC1b,gBAAgB,CAACyb,eAAgBE,sBAEjCA,qBAAqB9rB,UAAU+sB,uBAAyB,SAAU5I,EAAM7K,GACtE/b,KAAK0E,SAAW1E,KAAK4vB,YACrB5vB,KAAK6xB,GAAK9P,gBAAgB8F,QAAQjB,EAAM7K,EAAK1a,EAAG,EAAG,KAAMrB,MACzDA,KAAKuE,cAAgBvE,KAAK6xB,GAAG9K,gBAAgB7oB,QAG/CqwB,qBAAqB9rB,UAAUqvB,YAAc,SAAUhX,EAAMhe,GAC3D,IAAIi1B,EAAcnG,WAAWhX,aAC7Bmd,EAAYnqB,EAAIkT,EAAKlT,EACrB,IAAI7J,EAEAi0B,EACAC,EACAC,EACAC,EAIAC,EACAC,EAEAnI,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAXpBtsB,EAAM6c,EAAKxE,QAUXmL,EAAQ,EAGZ,IAAK1jB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBi0B,EAAWlX,EAAK1Z,EAAErD,GAClBm0B,EAAWpX,EAAK3S,EAAEpK,GAClBk0B,EAAWnX,EAAK/c,EAAEA,GAEdi0B,EAAS,KAAOE,EAAS,IAAMF,EAAS,KAAOE,EAAS,IAAMF,EAAS,KAAOC,EAAS,IAAMD,EAAS,KAAOC,EAAS,GAC7G,IAANl0B,GAAWA,IAAME,EAAM,GAAO6c,EAAKlT,GASpCuqB,EADQ,IAANp0B,EACQ+c,EAAK1Z,EAAEnD,EAAM,GAEb6c,EAAK1Z,EAAErD,EAAI,GAIvBs0B,GADAD,EAAWv1B,KAAKM,KAAKN,KAAKI,IAAI+0B,EAAS,GAAKG,EAAQ,GAAI,GAAKt1B,KAAKI,IAAI+0B,EAAS,GAAKG,EAAQ,GAAI,KACxEt1B,KAAKc,IAAIy0B,EAAW,EAAGt1B,GAASs1B,EAAW,EACnElI,EAAKI,EAAK0H,EAAS,IAAMG,EAAQ,GAAKH,EAAS,IAAMK,EACrDlI,EAAKI,EAAKyH,EAAS,IAAMA,EAAS,GAAKG,EAAQ,IAAME,EACrDjI,EAAKF,GAAMA,EAAK8H,EAAS,IAAMtzB,YAC/B2rB,EAAKF,GAAMA,EAAK6H,EAAS,IAAMtzB,YAC/BqzB,EAAY9H,YAAYC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAI9I,GAChDA,GAAS,EAGP0Q,EADEp0B,IAAME,EAAM,EACJ6c,EAAK1Z,EAAE,GAEP0Z,EAAK1Z,EAAErD,EAAI,GAIvBs0B,GADAD,EAAWv1B,KAAKM,KAAKN,KAAKI,IAAI+0B,EAAS,GAAKG,EAAQ,GAAI,GAAKt1B,KAAKI,IAAI+0B,EAAS,GAAKG,EAAQ,GAAI,KACxEt1B,KAAKc,IAAIy0B,EAAW,EAAGt1B,GAASs1B,EAAW,EACnElI,EAAKE,EAAK4H,EAAS,IAAMG,EAAQ,GAAKH,EAAS,IAAMK,EACrDlI,EAAKE,EAAK2H,EAAS,IAAMG,EAAQ,GAAKH,EAAS,IAAMK,EACrD/H,EAAKJ,GAAMA,EAAK8H,EAAS,IAAMtzB,YAC/B6rB,EAAKJ,GAAMA,EAAK6H,EAAS,IAAMtzB,YAC/BqzB,EAAY9H,YAAYC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAI9I,GAChDA,GAAS,IAnCTsQ,EAAY9H,YAAY+H,EAAS,GAAIA,EAAS,GAAIE,EAAS,GAAIA,EAAS,GAAID,EAAS,GAAIA,EAAS,GAAIxQ,GAKtGA,GAAS,IAiCXsQ,EAAY9H,YAAYnP,EAAK1Z,EAAErD,GAAG,GAAI+c,EAAK1Z,EAAErD,GAAG,GAAI+c,EAAK3S,EAAEpK,GAAG,GAAI+c,EAAK3S,EAAEpK,GAAG,GAAI+c,EAAK/c,EAAEA,GAAG,GAAI+c,EAAK/c,EAAEA,GAAG,GAAI0jB,GAC5GA,GAAS,GAIb,OAAOsQ,GAGTxD,qBAAqB9rB,UAAUiuB,cAAgB,SAAUzJ,GACvD,IAAI0J,EACA5yB,EAEA+J,EAAG4R,EAID3D,EAAqByV,EALvBvtB,EAAM+B,KAAKsa,OAAOpc,OAElB2zB,EAAK7xB,KAAK6xB,GAAGzwB,EAEjB,GAAW,IAAPywB,EAGF,IAAK9zB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAK3B,IAJAgY,EAAY/V,KAAKsa,OAAOvc,IACH2xB,MAAM5T,MAC3B0P,EAAuBzV,EAAUyV,qBAE1BzV,EAAU2Z,MAAMjrB,MAASzE,KAAKyE,MAASwiB,EAM5C,IALAuE,EAAqBK,gBACrB9V,EAAU2Z,MAAMjrB,MAAO,EACvBksB,EAAa5a,EAAU2Z,MAAM5T,MAAMxB,OACnCZ,EAAO3D,EAAU2Z,MAAM5T,MAAMxF,QAExBxO,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB0jB,EAAqBM,SAAS9rB,KAAK8xB,YAAYnB,EAAW7oB,GAAI+pB,IAIlE9b,EAAU2Z,MAAM5T,MAAQ/F,EAAUyV,qBAIjCxrB,KAAKoE,kBAAkBlG,SAC1B8B,KAAKyE,MAAO,IAIhBwpB,eAAeE,iBAAiB,KAAMI,sBAItC3b,gBAAgB,CAACyb,eAAgBG,wBAEjCA,uBAAuB/rB,UAAU+sB,uBAAyB,SAAU5I,EAAM7K,GACxE/b,KAAK0E,SAAW1E,KAAK4vB,YACrB5vB,KAAKsyB,OAASvQ,gBAAgB8F,QAAQjB,EAAM7K,EAAKpU,EAAG,EAAG,KAAM3H,MAC7DA,KAAKuE,cAAgBvE,KAAKsyB,OAAOvL,gBAAgB7oB,QAGnDswB,uBAAuB/rB,UAAUqvB,YAAc,SAAUhX,EAAMwX,GAC7D,IAAIta,EAAUsa,EAAS,IACnBC,EAAc,CAAC,EAAG,GAClBC,EAAa1X,EAAKxE,QAClBvY,EAAI,EAER,IAAKA,EAAI,EAAGA,EAAIy0B,EAAYz0B,GAAK,EAC/Bw0B,EAAY,IAAMzX,EAAK1Z,EAAErD,GAAG,GAC5Bw0B,EAAY,IAAMzX,EAAK1Z,EAAErD,GAAG,GAG9Bw0B,EAAY,IAAMC,EAClBD,EAAY,IAAMC,EAClB,IAEItI,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAFpBwH,EAAcnG,WAAWhX,aAI7B,IAHAmd,EAAYnqB,EAAIkT,EAAKlT,EAGhB7J,EAAI,EAAGA,EAAIy0B,EAAYz0B,GAAK,EAC/BmsB,EAAKpP,EAAK1Z,EAAErD,GAAG,IAAMw0B,EAAY,GAAKzX,EAAK1Z,EAAErD,GAAG,IAAMia,EACtDmS,EAAKrP,EAAK1Z,EAAErD,GAAG,IAAMw0B,EAAY,GAAKzX,EAAK1Z,EAAErD,GAAG,IAAMia,EACtDoS,EAAKtP,EAAK3S,EAAEpK,GAAG,IAAMw0B,EAAY,GAAKzX,EAAK3S,EAAEpK,GAAG,KAAOia,EACvDqS,EAAKvP,EAAK3S,EAAEpK,GAAG,IAAMw0B,EAAY,GAAKzX,EAAK3S,EAAEpK,GAAG,KAAOia,EACvDsS,EAAKxP,EAAK/c,EAAEA,GAAG,IAAMw0B,EAAY,GAAKzX,EAAK/c,EAAEA,GAAG,KAAOia,EACvDuS,EAAKzP,EAAK/c,EAAEA,GAAG,IAAMw0B,EAAY,GAAKzX,EAAK/c,EAAEA,GAAG,KAAOia,EACvD+Z,EAAY9H,YAAYC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIxsB,GAGlD,OAAOg0B,GAGTvD,uBAAuB/rB,UAAUiuB,cAAgB,SAAUzJ,GACzD,IAAI0J,EACA5yB,EAEA+J,EAAG4R,EAID3D,EAAqByV,EALvBvtB,EAAM+B,KAAKsa,OAAOpc,OAElBo0B,EAAStyB,KAAKsyB,OAAOlxB,EAEzB,GAAe,IAAXkxB,EAGF,IAAKv0B,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAK3B,IAJAgY,EAAY/V,KAAKsa,OAAOvc,IACH2xB,MAAM5T,MAC3B0P,EAAuBzV,EAAUyV,qBAE1BzV,EAAU2Z,MAAMjrB,MAASzE,KAAKyE,MAASwiB,EAM5C,IALAuE,EAAqBK,gBACrB9V,EAAU2Z,MAAMjrB,MAAO,EACvBksB,EAAa5a,EAAU2Z,MAAM5T,MAAMxB,OACnCZ,EAAO3D,EAAU2Z,MAAM5T,MAAMxF,QAExBxO,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB0jB,EAAqBM,SAAS9rB,KAAK8xB,YAAYnB,EAAW7oB,GAAIwqB,IAIlEvc,EAAU2Z,MAAM5T,MAAQ/F,EAAUyV,qBAIjCxrB,KAAKoE,kBAAkBlG,SAC1B8B,KAAKyE,MAAO,IAIhBwpB,eAAeE,iBAAiB,KAAMK,wBAItC5b,gBAAgB,CAACyb,eAAgBI,kBAEjCA,iBAAiBhsB,UAAU+sB,uBAAyB,SAAU5I,EAAM7K,GAClE/b,KAAK0E,SAAW1E,KAAK4vB,YACrB5vB,KAAK4H,EAAIma,gBAAgB8F,QAAQjB,EAAM7K,EAAKnU,EAAG,EAAG,KAAM5H,MACxDA,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,EAAG,EAAG,KAAMnI,MACxDA,KAAKyyB,GAAK3K,yBAAyB0B,qBAAqB5C,EAAM7K,EAAK0W,GAAIzyB,MACvEA,KAAK0yB,GAAK3Q,gBAAgB8F,QAAQjB,EAAM7K,EAAK0W,GAAGC,GAAI,EAAG,IAAM1yB,MAC7DA,KAAK2yB,GAAK5Q,gBAAgB8F,QAAQjB,EAAM7K,EAAK0W,GAAGE,GAAI,EAAG,IAAM3yB,MAC7DA,KAAK+b,KAAOA,EAEP/b,KAAKoE,kBAAkBlG,QAC1B8B,KAAK0E,UAAS,GAGhB1E,KAAKuE,cAAgBvE,KAAKoE,kBAAkBlG,OAC5C8B,KAAK4yB,QAAU,IAAI7sB,OACnB/F,KAAK6yB,QAAU,IAAI9sB,OACnB/F,KAAK8yB,QAAU,IAAI/sB,OACnB/F,KAAK+yB,QAAU,IAAIhtB,OACnB/F,KAAKgzB,OAAS,IAAIjtB,QAGpB0oB,iBAAiBhsB,UAAUwwB,gBAAkB,SAAUL,EAASC,EAASC,EAAStqB,EAAW4L,EAAM8e,GACjG,IAAItd,EAAMsd,GAAO,EAAI,EACjBC,EAAS3qB,EAAUrH,EAAEC,EAAE,IAAM,EAAIoH,EAAUrH,EAAEC,EAAE,KAAO,EAAIgT,GAC1Dgf,EAAS5qB,EAAUrH,EAAEC,EAAE,IAAM,EAAIoH,EAAUrH,EAAEC,EAAE,KAAO,EAAIgT,GAC9Dwe,EAAQxqB,UAAUI,EAAU/G,EAAEL,EAAE,GAAKwU,EAAMxB,EAAM5L,EAAU/G,EAAEL,EAAE,GAAKwU,EAAMxB,EAAM5L,EAAU/G,EAAEL,EAAE,IAC9FyxB,EAAQzqB,WAAWI,EAAUb,EAAEvG,EAAE,IAAKoH,EAAUb,EAAEvG,EAAE,GAAIoH,EAAUb,EAAEvG,EAAE,IACtEyxB,EAAQpsB,QAAQ+B,EAAUnH,EAAED,EAAIwU,EAAMxB,GACtCye,EAAQzqB,UAAUI,EAAUb,EAAEvG,EAAE,GAAIoH,EAAUb,EAAEvG,EAAE,GAAIoH,EAAUb,EAAEvG,EAAE,IACpE0xB,EAAQ1qB,WAAWI,EAAUb,EAAEvG,EAAE,IAAKoH,EAAUb,EAAEvG,EAAE,GAAIoH,EAAUb,EAAEvG,EAAE,IACtE0xB,EAAQtrB,MAAM0rB,EAAM,EAAIC,EAASA,EAAQD,EAAM,EAAIE,EAASA,GAC5DN,EAAQ1qB,UAAUI,EAAUb,EAAEvG,EAAE,GAAIoH,EAAUb,EAAEvG,EAAE,GAAIoH,EAAUb,EAAEvG,EAAE,KAGtEqtB,iBAAiBhsB,UAAUooB,KAAO,SAAUjE,EAAMnjB,EAAKumB,EAAKqJ,GAC1DrzB,KAAK4mB,KAAOA,EACZ5mB,KAAKyD,IAAMA,EACXzD,KAAKgqB,IAAMA,EACXhqB,KAAKqzB,UAAYA,EACjBrzB,KAAKszB,eAAiB,EACtBtzB,KAAKuzB,UAAY,GACjBvzB,KAAKwzB,QAAU,GACfxzB,KAAK8mB,SAAW,EAChB9mB,KAAK2E,6BAA6BiiB,GAClC5mB,KAAKwvB,uBAAuB5I,EAAMnjB,EAAIumB,IAGtC,KAAOA,EAAM,GACXA,GAAO,EAEPhqB,KAAKuzB,UAAUE,QAAQhwB,EAAIumB,IAEnB,EAGNhqB,KAAKoE,kBAAkBlG,OACzB8B,KAAK+H,GAAI,EAET/H,KAAK0E,UAAS,IAIlB+pB,iBAAiBhsB,UAAUixB,cAAgB,SAAUC,GACnD,IAAI51B,EACAE,EAAM01B,EAASz1B,OAEnB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB41B,EAAS51B,GAAG61B,YAAa,EAEF,OAAnBD,EAAS51B,GAAGuK,IACdtI,KAAK0zB,cAAcC,EAAS51B,GAAG8c,KAKrC4T,iBAAiBhsB,UAAUoxB,cAAgB,SAAUF,GAEzCA,EAASz1B,OADnB,IAEI41B,EAAcrZ,KAAKC,MAAMD,KAAKE,UAAUgZ,IAE5C,OADA3zB,KAAK0zB,cAAcI,GACZA,GAGTrF,iBAAiBhsB,UAAUsxB,kBAAoB,SAAUJ,EAAUK,GACjE,IAAIj2B,EACAE,EAAM01B,EAASz1B,OAEnB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB41B,EAAS51B,GAAGk2B,QAAUD,EAEC,OAAnBL,EAAS51B,GAAGuK,IACdtI,KAAK+zB,kBAAkBJ,EAAS51B,GAAG8c,GAAImZ,IAK7CvF,iBAAiBhsB,UAAUiuB,cAAgB,SAAUzJ,GACnD,IAAIiN,EAAOC,EAAgBp2B,EAAG6X,EAAKwe,EAEnC,GAAIp0B,KAAKyE,MAAQwiB,EAAe,CAC9B,IAkEI+M,EAlEAK,EAASx3B,KAAKy3B,KAAKt0B,KAAK4H,EAAExG,GAE9B,GAAIpB,KAAKwzB,QAAQt1B,OAASm2B,EAAQ,CAChC,KAAOr0B,KAAKwzB,QAAQt1B,OAASm2B,GAAQ,CACnC,IAAIE,EAAQ,CACV1Z,GAAI7a,KAAK6zB,cAAc7zB,KAAKuzB,WAC5BjrB,GAAI,MAENisB,EAAM1Z,GAAG7X,KAAK,CACZ,EAAK,CACH,EAAK,EACL,GAAM,EACN,EAAK,CAAC,EAAG,IAEX,GAAM,YACN,EAAK,CACH,EAAK,EACL,GAAM,EACN,EAAK,KAEP,EAAK,CACH,EAAK,EACL,GAAM,EACN,EAAK,CAAC,EAAG,IAEX,EAAK,CACH,EAAK,EACL,GAAM,EACN,EAAK,CAAC,CACJ7B,EAAG,EACH0G,EAAG,EACHlG,EAAG,GACF,CACDR,EAAG,EACH0G,EAAG,EACHlG,EAAG,KAGP,EAAK,CACH,EAAK,EACL,GAAM,EACN,EAAK,CAAC,IAAK,MAEb,GAAM,CACJ,EAAK,EACL,GAAM,EACN,EAAK,GAEP,GAAM,CACJ,EAAK,EACL,GAAM,EACN,EAAK,GAEP,GAAM,OAER3B,KAAKyD,IAAIN,OAAO,EAAG,EAAGoxB,GAEtBv0B,KAAKwzB,QAAQrwB,OAAO,EAAG,EAAGoxB,GAE1Bv0B,KAAKszB,gBAAkB,EAGzBtzB,KAAK4mB,KAAK4N,eAMZ,IAHAJ,EAAO,EAGFr2B,EAAI,EAAGA,GAAKiC,KAAKwzB,QAAQt1B,OAAS,EAAGH,GAAK,EAC7Ci2B,EAAaI,EAAOC,EACpBr0B,KAAKwzB,QAAQz1B,GAAGk2B,QAAUD,EAC1Bh0B,KAAK+zB,kBAAkB/zB,KAAKwzB,QAAQz1B,GAAG8c,GAAImZ,GAC3CI,GAAQ,EAGVp0B,KAAKszB,eAAiBe,EAEtB,IAAIryB,EAAShC,KAAKmI,EAAE/G,EAChBqzB,EAAezyB,EAAS,EACxB0yB,EAAc1yB,EAAS,EAAInF,KAAKU,MAAMyE,GAAUnF,KAAKy3B,KAAKtyB,GAG1D2yB,GADO30B,KAAKyyB,GAAGrxB,EAAEoF,MACRxG,KAAK4yB,QAAQpsB,OACtBouB,EAAS50B,KAAK6yB,QAAQrsB,MACtBquB,EAAS70B,KAAK8yB,QAAQtsB,MAC1BxG,KAAK4yB,QAAQrsB,QACbvG,KAAK6yB,QAAQtsB,QACbvG,KAAK8yB,QAAQvsB,QACbvG,KAAK+yB,QAAQxsB,QACbvG,KAAKgzB,OAAOzsB,QACZ,IA2BIuB,EAAG4R,EA3BHob,EAAY,EAEhB,GAAI9yB,EAAS,EAAG,CACd,KAAO8yB,EAAYJ,GACjB10B,KAAKizB,gBAAgBjzB,KAAK4yB,QAAS5yB,KAAK6yB,QAAS7yB,KAAK8yB,QAAS9yB,KAAKyyB,GAAI,GAAG,GAC3EqC,GAAa,EAGXL,IACFz0B,KAAKizB,gBAAgBjzB,KAAK4yB,QAAS5yB,KAAK6yB,QAAS7yB,KAAK8yB,QAAS9yB,KAAKyyB,GAAIgC,GAAc,GACtFK,GAAaL,QAEV,GAAIzyB,EAAS,EAAG,CACrB,KAAO8yB,EAAYJ,GACjB10B,KAAKizB,gBAAgBjzB,KAAK4yB,QAAS5yB,KAAK6yB,QAAS7yB,KAAK8yB,QAAS9yB,KAAKyyB,GAAI,GAAG,GAC3EqC,GAAa,EAGXL,IACFz0B,KAAKizB,gBAAgBjzB,KAAK4yB,QAAS5yB,KAAK6yB,QAAS7yB,KAAK8yB,QAAS9yB,KAAKyyB,IAAKgC,GAAc,GACvFK,GAAaL,GASjB,IALA12B,EAAoB,IAAhBiC,KAAK+b,KAAK9T,EAAU,EAAIjI,KAAKszB,eAAiB,EAClD1d,EAAsB,IAAhB5V,KAAK+b,KAAK9T,EAAU,GAAK,EAC/BmsB,EAAOp0B,KAAKszB,eAGLc,GAAM,CAQX,GALA1a,GADAya,GADAD,EAAQl0B,KAAKqzB,UAAUt1B,GAAG8c,IACHqZ,EAAMh2B,OAAS,GAAGsK,UAAUusB,OAAO3zB,EAAEoF,OACtCtI,OACtBg2B,EAAMA,EAAMh2B,OAAS,GAAGsK,UAAUusB,OAAOtwB,MAAO,EAChDyvB,EAAMA,EAAMh2B,OAAS,GAAGsK,UAAUwsB,GAAGvwB,MAAO,EAC5CyvB,EAAMA,EAAMh2B,OAAS,GAAGsK,UAAUwsB,GAAG5zB,EAAIpB,KAAK0yB,GAAGtxB,GAAKpB,KAAK2yB,GAAGvxB,EAAIpB,KAAK0yB,GAAGtxB,IAAMrD,GAAKiC,KAAKszB,eAAiB,IAEzF,IAAdwB,EAAiB,CASnB,KARU,IAAN/2B,GAAmB,IAAR6X,GAAa7X,IAAMiC,KAAKszB,eAAiB,IAAc,IAAT1d,IAC3D5V,KAAKizB,gBAAgBjzB,KAAK4yB,QAAS5yB,KAAK6yB,QAAS7yB,KAAK8yB,QAAS9yB,KAAKyyB,GAAI,GAAG,GAG7EzyB,KAAKgzB,OAAOxqB,UAAUosB,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,KACvM50B,KAAKgzB,OAAOxqB,UAAUqsB,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,KACvM70B,KAAKgzB,OAAOxqB,UAAUmsB,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,KAElM7sB,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBqsB,EAAersB,GAAK9H,KAAKgzB,OAAOxsB,MAAMsB,GAGxC9H,KAAKgzB,OAAOzsB,aAIZ,IAFAvG,KAAKgzB,OAAOzsB,QAEPuB,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBqsB,EAAersB,GAAK9H,KAAKgzB,OAAOxsB,MAAMsB,GAI1CgtB,GAAa,EACbV,GAAQ,EACRr2B,GAAK6X,QAOP,IAJAwe,EAAOp0B,KAAKszB,eACZv1B,EAAI,EACJ6X,EAAM,EAECwe,GAELD,GADAD,EAAQl0B,KAAKqzB,UAAUt1B,GAAG8c,IACHqZ,EAAMh2B,OAAS,GAAGsK,UAAUusB,OAAO3zB,EAAEoF,MAC5D0tB,EAAMA,EAAMh2B,OAAS,GAAGsK,UAAUusB,OAAOtwB,MAAO,EAChDyvB,EAAMA,EAAMh2B,OAAS,GAAGsK,UAAUwsB,GAAGvwB,MAAO,EAC5C2vB,GAAQ,EACRr2B,GAAK6X,GAKX6Y,iBAAiBhsB,UAAUqpB,SAAW,aAEtCmC,eAAeE,iBAAiB,KAAMM,kBAQtCC,gBAAgBjsB,UAAUqpB,SAAW,SAAU/V,GACzC/V,KAAKsW,UAAYtW,KAAK0pB,aACxB1pB,KAAKsa,OAASta,KAAKsa,OAAOuE,OAAOvgB,iBAAiB0B,KAAK0pB,aACvD1pB,KAAK0pB,YAAc,GAGrB1pB,KAAKsa,OAAOta,KAAKsW,SAAWP,EAC5B/V,KAAKsW,SAAW,GAGlBoY,gBAAgBjsB,UAAUopB,cAAgB,WACxC,IAAI9tB,EAEJ,IAAKA,EAAI,EAAGA,EAAIiC,KAAKsW,QAASvY,GAAK,EACjC6tB,WAAW6E,QAAQzwB,KAAKsa,OAAOvc,IAGjCiC,KAAKsW,QAAU,GAiCjBqY,aAAalsB,UAAUiC,SAAW,SAAUqkB,GAC1C,IAAI/oB,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,SAAYiC,KAItD/oB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,QACpC9mB,KAAKwE,2BACLxE,KAAKyE,KAAOzE,KAAKyE,MAAQskB,EAErB/oB,KAAKyE,MAAM,CACb,IAAI1G,EAAI,EACJE,EAAM+B,KAAK6uB,UAAU3wB,OAMzB,IAJsB,QAAlB8B,KAAK4uB,WACP5uB,KAAK8uB,QAAU,IAGZ/wB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACG,KAAvBiC,KAAK6uB,UAAU9wB,GAAGmK,EACE,QAAlBlI,KAAK4uB,SACP5uB,KAAK8uB,SAAW,IAAM9uB,KAAK6uB,UAAU9wB,GAAG0D,EAAEL,EAE1CpB,KAAK+uB,UAAUhxB,GAAKiC,KAAK6uB,UAAU9wB,GAAG0D,EAAEL,EAG1CpB,KAAKgvB,WAAW,GAAKhvB,KAAK6uB,UAAU9wB,GAAG0D,EAAEL,IAMjDwR,gBAAgB,CAAC3O,0BAA2B0qB,cAiB5CM,iBAAiBxsB,UAAUwyB,cAAgB,SAAUpP,EAAQ3U,GAK3D,IAJA,IAAInT,EAAI,EACJE,EAAM+B,KAAKmI,EAAEjK,OAAS,EAGnBH,EAAIE,GAAK,CAGd,GAFOpB,KAAKQ,IAAIwoB,EAAW,EAAJ9nB,GAAS8nB,EAAgB,EAAT3U,EAAiB,EAAJnT,IAEzC,IACT,OAAO,EAGTA,GAAK,EAGP,OAAO,GAGTkxB,iBAAiBxsB,UAAU6sB,iBAAmB,WAC5C,GAAItvB,KAAKmI,EAAEjK,OAAS,GAAM8B,KAAK4H,EAAE1J,OAAS,EACxC,OAAO,EAGT,GAAI8B,KAAK+b,KAAKhU,EAAEA,EAAE,GAAG5G,EAInB,IAHA,IAAIpD,EAAI,EACJE,EAAM+B,KAAK+b,KAAKhU,EAAEA,EAAE7J,OAEjBH,EAAIE,GAAK,CACd,IAAK+B,KAAKi1B,cAAcj1B,KAAK+b,KAAKhU,EAAEA,EAAEhK,GAAGoD,EAAGnB,KAAK+b,KAAKta,GACpD,OAAO,EAGT1D,GAAK,OAEF,IAAKiC,KAAKi1B,cAAcj1B,KAAK+b,KAAKhU,EAAEA,EAAG/H,KAAK+b,KAAKta,GACtD,OAAO,EAGT,OAAO,GAGTwtB,iBAAiBxsB,UAAUiC,SAAW,SAAUqkB,GAM9C,GALA/oB,KAAKmE,KAAKO,WACV1E,KAAKyE,MAAO,EACZzE,KAAKmvB,OAAQ,EACbnvB,KAAKovB,OAAQ,EAETpvB,KAAKmE,KAAKM,MAAQskB,EAAa,CACjC,IAAIhrB,EAEA2oB,EAAMtoB,EADNH,EAAoB,EAAd+B,KAAK+b,KAAKta,EAGpB,IAAK1D,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB2oB,EAAO3oB,EAAI,GAAM,EAAI,IAAM,IAC3BK,EAAMvB,KAAKC,MAAMkD,KAAKmE,KAAK/C,EAAErD,GAAK2oB,GAE9B1mB,KAAK4H,EAAE7J,KAAOK,IAChB4B,KAAK4H,EAAE7J,GAAKK,EACZ4B,KAAKmvB,OAASpG,GAIlB,GAAI/oB,KAAKmI,EAAEjK,OAGT,IAFAD,EAAM+B,KAAKmE,KAAK/C,EAAElD,OAEbH,EAAkB,EAAdiC,KAAK+b,KAAKta,EAAO1D,EAAIE,EAAKF,GAAK,EACtC2oB,EAAO3oB,EAAI,GAAM,EAAI,IAAM,EAC3BK,EAAML,EAAI,GAAM,EAAIlB,KAAKC,MAAuB,IAAjBkD,KAAKmE,KAAK/C,EAAErD,IAAYiC,KAAKmE,KAAK/C,EAAErD,GAE/DiC,KAAKmI,EAAEpK,EAAkB,EAAdiC,KAAK+b,KAAKta,KAAWrD,IAClC4B,KAAKmI,EAAEpK,EAAkB,EAAdiC,KAAK+b,KAAKta,GAASrD,EAC9B4B,KAAKovB,OAASrG,GAKpB/oB,KAAKyE,MAAQskB,IAIjBnW,gBAAgB,CAAC3O,0BAA2BgrB,kBAE5C,IAAIiG,iBAAmB,SAA0BC,EAAWj3B,EAAQgY,EAAQ4S,GAC1E,GAAe,IAAX5qB,EACF,MAAO,GAGT,IAGIH,EAHAq3B,EAAKD,EAAUhtB,EACfktB,EAAKF,EAAUp3B,EACfyuB,EAAK2I,EAAU/zB,EAEfk0B,EAAc,KAAOxM,EAAIpc,wBAAwB8f,EAAG,GAAG,GAAIA,EAAG,GAAG,IAErE,IAAKzuB,EAAI,EAAGA,EAAIG,EAAQH,GAAK,EAC3Bu3B,GAAe,KAAOxM,EAAIpc,wBAAwB0oB,EAAGr3B,EAAI,GAAG,GAAIq3B,EAAGr3B,EAAI,GAAG,IAAM,IAAM+qB,EAAIpc,wBAAwB2oB,EAAGt3B,GAAG,GAAIs3B,EAAGt3B,GAAG,IAAM,IAAM+qB,EAAIpc,wBAAwB8f,EAAGzuB,GAAG,GAAIyuB,EAAGzuB,GAAG,IAQ5L,OALImY,GAAUhY,IACZo3B,GAAe,KAAOxM,EAAIpc,wBAAwB0oB,EAAGr3B,EAAI,GAAG,GAAIq3B,EAAGr3B,EAAI,GAAG,IAAM,IAAM+qB,EAAIpc,wBAAwB2oB,EAAG,GAAG,GAAIA,EAAG,GAAG,IAAM,IAAMvM,EAAIpc,wBAAwB8f,EAAG,GAAG,GAAIA,EAAG,GAAG,IAC1L8I,GAAe,KAGVA,GAGLC,uBAAyB,WAC3B,SAASC,EAAgBC,GACvBz1B,KAAK01B,OAAS,GACd11B,KAAKy1B,aAAeA,EACpBz1B,KAAK21B,QAAU,EACf31B,KAAK41B,UAAW,EAmFlB,OAhFAJ,EAAgB/yB,UAAY,CAC1BozB,SAAU,SAAkBC,GAC1B91B,KAAK01B,OAAO1yB,KAAK8yB,IAEnBC,MAAO,WACL,IAAIh4B,EACAE,EAAM+B,KAAK01B,OAAOx3B,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK01B,OAAO33B,GAAGg4B,SAGnBC,OAAQ,WACN,IAAIj4B,EACAE,EAAM+B,KAAK01B,OAAOx3B,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK01B,OAAO33B,GAAGi4B,UAGnBC,QAAS,SAAiBC,GACxB,IAAIn4B,EACAE,EAAM+B,KAAK01B,OAAOx3B,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK01B,OAAO33B,GAAGk4B,QAAQC,IAG3BC,YAAa,SAAqBC,GAChC,OAAIp2B,KAAKy1B,aACAz1B,KAAKy1B,aAAaW,GAChBC,KACF,IAAIA,KAAK,CACdzV,IAAK,CAACwV,KAGD,CACLE,WAAW,EACXC,KAAM,WACJv2B,KAAKs2B,WAAY,GAEnBE,KAAM,WACJx2B,KAAKs2B,WAAY,GAEnBG,QAAS,aACTC,KAAM,aACNC,UAAW,eAIjBC,gBAAiB,SAAyBnB,GACxCz1B,KAAKy1B,aAAeA,GAEtBkB,UAAW,SAAmBnzB,GAC5BxD,KAAK21B,QAAUnyB,EAEfxD,KAAK62B,iBAEPC,KAAM,WACJ92B,KAAK41B,UAAW,EAEhB51B,KAAK62B,iBAEPE,OAAQ,WACN/2B,KAAK41B,UAAW,EAEhB51B,KAAK62B,iBAEPG,UAAW,SAAmBxzB,GAC5B,OAAOxD,KAAK21B,SAEdkB,cAAe,WACb,IAAI94B,EACAE,EAAM+B,KAAK01B,OAAOx3B,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK01B,OAAO33B,GAAGk5B,OAAOj3B,KAAK21B,SAAW31B,KAAK41B,SAAW,EAAI,MAIzD,WACL,OAAO,IAAIJ,GAzFc,GA6FzB0B,eAAiB,WACnB,IAAIC,EAAa,WACf,IAAIC,EAASrzB,UAAU,UACvBqzB,EAAO1pB,MAAQ,EACf0pB,EAAOC,OAAS,EAChB,IAAIC,EAAMF,EAAOxY,WAAW,MAG5B,OAFA0Y,EAAIC,UAAY,gBAChBD,EAAIE,SAAS,EAAG,EAAG,EAAG,GACfJ,EAPQ,GAUjB,SAASK,IACPz3B,KAAK03B,cAAgB,EAEjB13B,KAAK03B,eAAiB13B,KAAK23B,aACzB33B,KAAK43B,gBACP53B,KAAK43B,eAAe,MAK1B,SAASC,EAAcC,EAAWC,EAAYC,GAC5C,IAAIld,EAAO,GAEX,GAAIgd,EAAUjwB,EACZiT,EAAOgd,EAAUr2B,OACZ,GAAIs2B,EAAY,CACrB,IAAIE,EAAYH,EAAUr2B,GAEY,IAAlCw2B,EAAU5zB,QAAQ,aACpB4zB,EAAYA,EAAU9c,MAAM,KAAK,IAGnCL,EAAOid,EAAaE,OAEpBnd,EAAOkd,EACPld,GAAQgd,EAAUI,EAAIJ,EAAUI,EAAI,GACpCpd,GAAQgd,EAAUr2B,EAGpB,OAAOqZ,EAyFT,SAASoc,EAAet3B,GACtBI,KAAKm4B,aAAeV,EAAYv0B,KAAKlD,MACrCA,KAAK+3B,WAAa,GAClB/3B,KAAK8a,KAAO,GACZ9a,KAAK23B,YAAc,EACnB33B,KAAK03B,aAAe,EACpB13B,KAAK43B,eAAiB,KACtB53B,KAAKo4B,OAAS,GAgBhB,OAZAlB,EAAez0B,UAAY,CACzB41B,WA/DF,SAAoB3c,EAAQ4c,GAC1Bt4B,KAAK43B,eAAiBU,EACtB,IAAIv6B,EACAE,EAAMyd,EAAOxd,OAEjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACnB2d,EAAO3d,GAAGub,SACbtZ,KAAK23B,aAAe,EACpB33B,KAAKo4B,OAAOp1B,KAAKhD,KAAKu4B,iBAAiB7c,EAAO3d,OAwDlDy6B,cA/CF,SAAuB1d,GACrB9a,KAAK+3B,WAAajd,GAAQ,IA+C1B2d,QApDF,SAAiB3d,GACf9a,KAAK8a,KAAOA,GAAQ,IAoDpBqF,OA3BF,WACE,OAAOngB,KAAK23B,cAAgB33B,KAAK03B,cA2BjCgB,QAjCF,WACE14B,KAAK43B,eAAiB,KACtB53B,KAAKo4B,OAAOl6B,OAAS,GAgCrBy6B,SA/CF,SAAkBb,GAIhB,IAHA,IAAI/5B,EAAI,EACJE,EAAM+B,KAAKo4B,OAAOl6B,OAEfH,EAAIE,GAAK,CACd,GAAI+B,KAAKo4B,OAAOr6B,GAAG+5B,YAAcA,EAC/B,OAAO93B,KAAKo4B,OAAOr6B,GAAG66B,IAGxB76B,GAAK,IAuCP86B,cAvFF,SAAuBf,GACrB,IAAIhd,EAAO+c,EAAcC,EAAW93B,KAAK+3B,WAAY/3B,KAAK8a,MACtD8d,EAAM70B,UAAU,OACpB60B,EAAIE,YAAc,YAClBF,EAAI91B,iBAAiB,OAAQ9C,KAAKm4B,cAAc,GAChDS,EAAI91B,iBAAiB,QAAS,WAC5BoN,EAAG0oB,IAAMzB,EAETn3B,KAAKm4B,gBACLj1B,KAAKlD,OAAO,GACd44B,EAAIhY,IAAM9F,EACV,IAAI5K,EAAK,CACP0oB,IAAKA,EACLd,UAAWA,GAEb,OAAO5nB,GAyEP6oB,gBAzGF,SAAyBjB,GACvB,IAAIhd,EAAO+c,EAAcC,EAAW93B,KAAK+3B,WAAY/3B,KAAK8a,MACtD8d,EAAMh1B,SAAS,SACnBg1B,EAAI91B,iBAAiB,OAAQ9C,KAAKm4B,cAAc,GAChDS,EAAI91B,iBAAiB,QAAS,WAC5BoN,EAAG0oB,IAAMzB,EAETn3B,KAAKm4B,gBACLj1B,KAAKlD,OAAO,GACd44B,EAAII,eAAe,+BAAgC,OAAQle,GAC3D,IAAI5K,EAAK,CACP0oB,IAAKA,EACLd,UAAWA,GAEb,OAAO5nB,GA4FPunB,YAAaA,EACbwB,aA7BF,SAAsBr5B,GAElBI,KAAKu4B,iBADM,QAAT34B,EACsBI,KAAK+4B,gBAAgB71B,KAAKlD,MAE1BA,KAAK64B,cAAc31B,KAAKlD,QA2B7Ck3B,EAxJY,GA2JjBgC,eAAiB,WACnB,IAAIhpB,EAAK,CACPipB,UAAU,GAOZ,OAJI,WAAW18B,KAAKV,UAAUW,YAAc,UAAUD,KAAKV,UAAUW,YAAc,WAAWD,KAAKV,UAAUW,YAAc,aAAaD,KAAKV,UAAUW,cACrJwT,EAAGipB,UAAW,GAGTjpB,EATY,GAYjBkpB,eAAiB,WACnB,IAAIlpB,EAAK,GAuBT,OAtBAA,EAAGmpB,aAGH,SAAsBC,GACpB,IAAIC,EAAM31B,SAAS,UAOnB,OANA21B,EAAIjb,aAAa,KAAMgb,GACvBC,EAAIjb,aAAa,cAAe,qBAChCib,EAAIjb,aAAa,IAAK,MACtBib,EAAIjb,aAAa,IAAK,MACtBib,EAAIjb,aAAa,QAAS,QAC1Bib,EAAIjb,aAAa,SAAU,QACpBib,GAVTrpB,EAAGspB,6BAaH,WACE,IAAIC,EAAgB71B,SAAS,iBAI7B,OAHA61B,EAAcnb,aAAa,OAAQ,UACnCmb,EAAcnb,aAAa,8BAA+B,QAC1Dmb,EAAcnb,aAAa,SAAU,8CAC9Bmb,GAGFvpB,EAxBY,GA2BjBwpB,YAAc,WAChB,SAASC,EAAeC,GACtB,OAAIA,EAAIC,UAAoC,iBAAjBD,EAAIC,SACtBD,EAAIC,SACFD,EAAIC,UAAoC,iBAAjBD,EAAIC,SAC7Bpf,KAAKC,MAAMkf,EAAIC,UACbD,EAAIE,aACNrf,KAAKC,MAAMkf,EAAIE,mBADjB,EAoCT,MAAO,CACLC,KAhCF,SAAmBjf,EAAM/X,EAAUi3B,GACjC,IAAIH,EACAD,EAAM,IAAIK,eACdL,EAAIM,KAAK,MAAOpf,GAAM,GAEtB,IAEE8e,EAAIO,aAAe,OACnB,MAAOC,IAETR,EAAIS,OAEJT,EAAIU,mBAAqB,WACvB,GAAsB,GAAlBV,EAAIW,WACN,GAAkB,KAAdX,EAAIY,OACNX,EAAWF,EAAeC,GAC1B72B,EAAS82B,QAET,IACEA,EAAWF,EAAeC,GAC1B72B,EAAS82B,GACT,MAAOO,GACHJ,GACFA,EAAcI,OAlCV,GA+ClB,SAASK,qBAAqBC,EAAUC,EAAY/T,GAClD5mB,KAAKinB,eAAgB,EACrBjnB,KAAK46B,gBAAiB,EACtB56B,KAAK66B,UAAY,EACjB76B,KAAK86B,UAAYJ,EACjB16B,KAAK+6B,YAAcJ,EACnB36B,KAAKg7B,MAAQpU,EACb5mB,KAAKi7B,eAAiB38B,iBAAiB0B,KAAK86B,UAAUnzB,EAAEzJ,QACxD8B,KAAKk7B,UAAY,GACjBl7B,KAAKm7B,aAAe,CAClBC,UAAW,IAEbp7B,KAAKq7B,gBAAkB,GACvBr7B,KAAKs7B,oBAAqB,EAC1Bt7B,KAAK2E,6BAA6BiiB,GA8nBpC,SAAS2U,yBAAyB3U,EAAM4U,EAAel3B,GACrD,IAAIm3B,EAAc,CAChBlZ,UAAU,GAERsF,EAAU9F,gBAAgB8F,QAC1B6T,EAA2BF,EAAc7zB,EAC7C3H,KAAK2H,EAAI,CACPtG,EAAGq6B,EAAyBr6B,EAAIwmB,EAAQjB,EAAM8U,EAAyBr6B,EAAG,EAAG7C,UAAW8F,GAAam3B,EACrGnT,GAAIoT,EAAyBpT,GAAKT,EAAQjB,EAAM8U,EAAyBpT,GAAI,EAAG9pB,UAAW8F,GAAam3B,EACxGlT,GAAImT,EAAyBnT,GAAKV,EAAQjB,EAAM8U,EAAyBnT,GAAI,EAAG/pB,UAAW8F,GAAam3B,EACxG/S,GAAIgT,EAAyBhT,GAAKb,EAAQjB,EAAM8U,EAAyBhT,GAAI,EAAGlqB,UAAW8F,GAAam3B,EACxG9S,GAAI+S,EAAyB/S,GAAKd,EAAQjB,EAAM8U,EAAyB/S,GAAI,EAAGnqB,UAAW8F,GAAam3B,EACxGt6B,EAAGu6B,EAAyBv6B,EAAI0mB,EAAQjB,EAAM8U,EAAyBv6B,EAAG,EAAG,IAAMmD,GAAam3B,EAChG9zB,EAAG+zB,EAAyB/zB,EAAIkgB,EAAQjB,EAAM8U,EAAyB/zB,EAAG,EAAG,EAAGrD,GAAam3B,EAC7FtzB,EAAGuzB,EAAyBvzB,EAAI0f,EAAQjB,EAAM8U,EAAyBvzB,EAAG,EAAG,IAAM7D,GAAam3B,EAChGh6B,EAAGi6B,EAAyBj6B,EAAIomB,EAAQjB,EAAM8U,EAAyBj6B,EAAG,EAAG,EAAG6C,GAAam3B,EAC7FE,GAAID,EAAyBC,GAAK9T,EAAQjB,EAAM8U,EAAyBC,GAAI,EAAG,EAAGr3B,GAAam3B,EAChG5a,GAAI6a,EAAyB7a,GAAKgH,EAAQjB,EAAM8U,EAAyB7a,GAAI,EAAG,EAAGvc,GAAam3B,EAChGG,GAAIF,EAAyBE,GAAK/T,EAAQjB,EAAM8U,EAAyBE,GAAI,EAAG,EAAGt3B,GAAam3B,EAChGI,GAAIH,EAAyBG,GAAKhU,EAAQjB,EAAM8U,EAAyBG,GAAI,EAAG,EAAGv3B,GAAam3B,EAChGK,GAAIJ,EAAyBI,GAAKjU,EAAQjB,EAAM8U,EAAyBI,GAAI,EAAG,IAAMx3B,GAAam3B,EACnGM,GAAIL,EAAyBK,GAAKlU,EAAQjB,EAAM8U,EAAyBK,GAAI,EAAG,IAAMz3B,GAAam3B,EACnG95B,EAAG+5B,EAAyB/5B,EAAIkmB,EAAQjB,EAAM8U,EAAyB/5B,EAAG,EAAG,EAAG2C,GAAam3B,GAE/Fz7B,KAAKmB,EAAI66B,iBAAiBC,oBAAoBrV,EAAM4U,EAAcr6B,EAAGmD,GACrEtE,KAAKmB,EAAEQ,EAAI65B,EAAcr6B,EAAEQ,EAG7B,SAASu6B,YAAY/zB,EAAGwzB,EAAI9a,EAAI+a,EAAI3zB,EAAGxG,GACrCzB,KAAKmI,EAAIA,EACTnI,KAAK27B,GAAKA,EACV37B,KAAK6gB,GAAKA,EACV7gB,KAAK47B,GAAKA,EACV57B,KAAKiI,EAAIA,EACTjI,KAAKyB,EAAIA,EACTzB,KAAKyE,KAAO,CACV0D,GAAG,EACHwzB,KAAMA,EACN9a,KAAMA,EACN+a,KAAMA,EACN3zB,GAAG,EACHxG,GAAG,GAoDP,SAAS06B,aAAavV,EAAM7K,GAC1B/b,KAAK66B,SAAWx+B,oBAChB2D,KAAKwiB,GAAK,GACVxiB,KAAKoB,EAAI,GACTpB,KAAKmnB,IAAK,EACVnnB,KAAKinB,eAAgB,EACrBjnB,KAAKyE,MAAO,EACZzE,KAAK+b,KAAOA,EACZ/b,KAAK4mB,KAAOA,EACZ5mB,KAAKmmB,KAAOnmB,KAAK4mB,KAAKT,KACtBnmB,KAAKo8B,UAAY,EACjBp8B,KAAKq8B,WAAY,EACjBr8B,KAAKs8B,gBAAkB,EACvBt8B,KAAK+mB,gBAAkB,GACvB/mB,KAAKu8B,YAAc,CACjBC,OAAQ,EACRC,SAAUz8B,KAAK08B,gBACfl7B,EAAG,GACHgd,OAAQ,GACRC,QAAS,GACTmd,GAAI,GACJ9zB,EAAG,GACH60B,cAAe,GACf30B,EAAG,GACH40B,GAAI,EACJC,WAAY,GACZC,GAAI,GACJC,GAAI,GACJ57B,EAAG,GACH0f,GAAI,GACJ8a,GAAI,EACJh6B,EAAG,EACH8wB,GAAI,EACJhrB,GAAI,EACJu1B,GAAI,KACJC,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,QAAS,EACTC,UAAW,EACXC,UAAW,GACXC,gBAAiB,EACjBhhB,YAAY,GAEdvc,KAAKw9B,SAASx9B,KAAKu8B,YAAav8B,KAAK+b,KAAKla,EAAEkG,EAAE,GAAG5G,GAE5CnB,KAAKy9B,kBACRz9B,KAAK09B,iBAAiB19B,KAAKu8B,aAvwB/B9B,qBAAqBh4B,UAAUk7B,iBAAmB,WAChD,IAAI5/B,EAEAy9B,EADAv9B,EAAM+B,KAAK86B,UAAUnzB,EAAEzJ,OAEvB2pB,EAAU9F,gBAAgB8F,QAE9B,IAAK9pB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBy9B,EAAgBx7B,KAAK86B,UAAUnzB,EAAE5J,GACjCiC,KAAKi7B,eAAel9B,GAAK,IAAIw9B,yBAAyBv7B,KAAKg7B,MAAOQ,EAAex7B,MAG/EA,KAAK86B,UAAUr5B,GAAK,MAAOzB,KAAK86B,UAAUr5B,GAC5CzB,KAAKk7B,UAAY,CACf15B,EAAGqmB,EAAQ7nB,KAAKg7B,MAAOh7B,KAAK86B,UAAUr5B,EAAED,EAAG,EAAG,EAAGxB,MACjDgI,EAAG6f,EAAQ7nB,KAAKg7B,MAAOh7B,KAAK86B,UAAUr5B,EAAEuG,EAAG,EAAG,EAAGhI,MACjDqB,EAAGrB,KAAK86B,UAAUr5B,EAAEJ,EACpB4G,EAAGjI,KAAKg7B,MAAM4C,YAAYC,gBAAgB79B,KAAK86B,UAAUr5B,EAAEwG,IAE7DjI,KAAK46B,gBAAiB,GAEtB56B,KAAK46B,gBAAiB,EAGxB56B,KAAKm7B,aAAaC,UAAYvT,EAAQ7nB,KAAKg7B,MAAOh7B,KAAK86B,UAAU7yB,EAAEN,EAAG,EAAG,EAAG3H,OAG9Ey6B,qBAAqBh4B,UAAUq7B,YAAc,SAAUtiB,EAAc8f,GAGnE,GAFAt7B,KAAKs7B,mBAAqBA,EAErBt7B,KAAKyE,MAASzE,KAAKinB,eAAkBqU,GAAwBt7B,KAAK46B,gBAAmB56B,KAAKk7B,UAAUjzB,EAAExD,KAA3G,CAIAzE,KAAKinB,eAAgB,EACrB,IAOI8W,EAAMC,EACNjgC,EAAGE,EAEHggC,EACAC,EACAC,EACAnpB,EACApW,EACAw/B,EACAC,EACAC,EACAptB,EACAif,EACAhb,EACAoB,EACAnC,EACAmqB,EACAC,EAxBApD,EAAYp7B,KAAKm7B,aAAaC,UAAUh6B,EACxCq9B,EAAYz+B,KAAKi7B,eACjBP,EAAW16B,KAAK86B,UAChB4D,EAAe1+B,KAAK2+B,QACpBhE,EAAa36B,KAAK+6B,YAClB6D,EAAuB5+B,KAAKq7B,gBAAgBn9B,OAI5C2gC,GAHO7+B,KAAK+b,KAGFP,EAAaxT,GAiB3B,GAAIhI,KAAK46B,eAAgB,CAGvB,GAFA4D,EAAOx+B,KAAKk7B,UAAUjzB,GAEjBjI,KAAKk7B,UAAUhzB,GAAKlI,KAAKk7B,UAAUz2B,KAAM,CAC5C,IAYI8Q,EAZAuG,EAAQ0iB,EAAKp9B,EAejB,IAbIpB,KAAKk7B,UAAU75B,IACjBya,EAAQA,EAAM0O,WAIhByT,EAAW,CACTa,QAAS,EACT3O,SAAU,IAEZlyB,EAAM6d,EAAMxF,QAAU,EAEtBC,EAAc,EAETxY,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBwX,EAAa4D,IAAI9D,gBAAgByG,EAAM1a,EAAErD,GAAI+d,EAAM1a,EAAErD,EAAI,GAAI,CAAC+d,EAAM3T,EAAEpK,GAAG,GAAK+d,EAAM1a,EAAErD,GAAG,GAAI+d,EAAM3T,EAAEpK,GAAG,GAAK+d,EAAM1a,EAAErD,GAAG,IAAK,CAAC+d,EAAM/d,EAAEA,EAAI,GAAG,GAAK+d,EAAM1a,EAAErD,EAAI,GAAG,GAAI+d,EAAM/d,EAAEA,EAAI,GAAG,GAAK+d,EAAM1a,EAAErD,EAAI,GAAG,KACxMkgC,EAASa,SAAWvpB,EAAWP,cAC/BipB,EAAS9N,SAASntB,KAAKuS,GACvBgB,GAAehB,EAAWP,cAG5BjX,EAAIE,EAEAugC,EAAKp9B,EAAEwG,IACT2N,EAAa4D,IAAI9D,gBAAgByG,EAAM1a,EAAErD,GAAI+d,EAAM1a,EAAE,GAAI,CAAC0a,EAAM3T,EAAEpK,GAAG,GAAK+d,EAAM1a,EAAErD,GAAG,GAAI+d,EAAM3T,EAAEpK,GAAG,GAAK+d,EAAM1a,EAAErD,GAAG,IAAK,CAAC+d,EAAM/d,EAAE,GAAG,GAAK+d,EAAM1a,EAAE,GAAG,GAAI0a,EAAM/d,EAAE,GAAG,GAAK+d,EAAM1a,EAAE,GAAG,KACpL68B,EAASa,SAAWvpB,EAAWP,cAC/BipB,EAAS9N,SAASntB,KAAKuS,GACvBgB,GAAehB,EAAWP,eAG5BhV,KAAKk7B,UAAU6D,GAAKd,EAWtB,GARAA,EAAWj+B,KAAKk7B,UAAU6D,GAC1Bb,EAAgBl+B,KAAKk7B,UAAU15B,EAAEJ,EACjCi9B,EAAa,EACbD,EAAW,EACXppB,EAAgB,EAChBpW,GAAO,EACPuxB,EAAW8N,EAAS9N,SAEhB+N,EAAgB,GAAKM,EAAKp9B,EAAEwG,EAS9B,IARIq2B,EAASa,QAAUjiC,KAAKQ,IAAI6gC,KAC9BA,GAAiBrhC,KAAKQ,IAAI6gC,GAAiBD,EAASa,SAKtDV,GADAltB,EAASif,EADTkO,EAAalO,EAASjyB,OAAS,GACDgT,QACZhT,OAAS,EAEpBggC,EAAgB,GACrBA,GAAiBhtB,EAAOktB,GAAUjpB,eAClCipB,GAAY,GAEG,IAGbA,GADAltB,EAASif,EADTkO,GAAc,GACgBntB,QACZhT,OAAS,GAMjCogC,GADAptB,EAASif,EAASkO,GAAYntB,QACXktB,EAAW,GAE9BjpB,GADAgpB,EAAejtB,EAAOktB,IACOjpB,cAG/BlX,EAAM4gC,EAAQ3gC,OACd6/B,EAAO,EACPC,EAAO,EACP,IAEIxC,EACA1zB,EAAG4R,EACHslB,EAJAC,EAAgC,IAAzBzjB,EAAa6hB,UAAkB,KACtC6B,GAAY,EAIhBxlB,EAAO+kB,EAAUvgC,OAEjB,IAAIwoB,EAEAyY,EACAC,EACAC,EAKAC,EACAze,EAAI8a,EAAIC,EAAI7zB,EAEZw3B,EACAC,EACAC,EAGAC,EAhBAtc,GAAO,EAIPuc,EAAczB,EACd0B,EAAiBvB,EACjBwB,EAAezB,EACf0B,GAAe,EAOfC,GAAU,GACVC,GAAUhgC,KAAKigC,kBAGnB,GAAuB,IAAnBzkB,EAAa1T,GAA8B,IAAnB0T,EAAa1T,EAAS,CAChD,IAAIo4B,GAAwB,EACxBC,GAA0B,EAC1BC,GAAuC,IAAnB5kB,EAAa1T,GAAW,IAAO,EACnD+a,GAAY,EACZwd,IAAY,EAEhB,IAAKtiC,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,GAAI8gC,EAAQ9gC,GAAGmK,EAAG,CAKhB,IAJIg4B,KACFA,IAAyBC,IAGpBtd,GAAY9kB,GACjB8gC,EAAQhc,IAAWqd,sBAAwBA,GAC3Crd,IAAa,EAGfqd,GAAwB,EACxBG,IAAY,MACP,CACL,IAAKv4B,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB0zB,EAAgBiD,EAAU32B,GAAGH,GAEXhG,EAAE4gB,WACd8d,IAAgC,IAAnB7kB,EAAa1T,IAC5Bq4B,IAA2B3E,EAAc75B,EAAEP,EAAIg/B,KAIjD1Z,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,aAEhEtiC,OACPgiC,IAAyB1E,EAAc75B,EAAEP,EAAIslB,EAAK,GAAK0Z,GAEvDF,IAAyB1E,EAAc75B,EAAEP,EAAIslB,EAAO0Z,IAK1DC,IAAY,EAQhB,IAJIH,KACFA,IAAyBC,IAGpBtd,GAAY9kB,GACjB8gC,EAAQhc,IAAWqd,sBAAwBA,GAC3Crd,IAAa,EAKjB,IAAK9kB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAI3B,GAHA2gC,EAAan4B,QACb+4B,EAAc,EAEVT,EAAQ9gC,GAAGmK,EACb61B,EAAO,EACPC,GAAQxiB,EAAa4hB,QACrBY,GAAQkB,EAAY,EAAI,EACxBhB,EAAgByB,EAChBT,GAAY,EACC,EAETl/B,KAAK46B,iBAEPwD,EAAWyB,EAEXvB,GADAptB,EAASif,EAFTkO,EAAauB,GAEiB1uB,QACXktB,EAAW,GAE9BjpB,GADAgpB,EAAejtB,EAAOktB,IACOjpB,cAC7BH,EAAgB,GAGlB0qB,EAAUH,EAAWE,EAAWM,GAAU,GAC1CC,GAAUhgC,KAAKigC,sBACV,CACL,GAAIjgC,KAAK46B,eAAgB,CACvB,GAAIkF,IAAgBjB,EAAQ9gC,GAAG0iC,KAAM,CACnC,OAAQjlB,EAAa1T,GACnB,KAAK,EACHo2B,GAAiB3nB,EAAciF,EAAaqhB,WAAWgC,EAAQ9gC,GAAG0iC,MAClE,MAEF,KAAK,EACHvC,IAAkB3nB,EAAciF,EAAaqhB,WAAWgC,EAAQ9gC,GAAG0iC,OAAS,EAIhFX,EAAcjB,EAAQ9gC,GAAG0iC,KAGvBrd,IAAQyb,EAAQ9gC,GAAGqlB,MACjByb,EAAQzb,KACV8a,GAAiBW,EAAQzb,GAAKsd,OAGhCxC,GAAiBW,EAAQ9gC,GAAG4iC,GAAK,EACjCvd,EAAMyb,EAAQ9gC,GAAGqlB,KAGnB8a,GAAiB9C,EAAU,GAAKyD,EAAQ9gC,GAAG4iC,GAAK,IAChD,IAAIC,GAAiB,EAErB,IAAK94B,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB0zB,EAAgBiD,EAAU32B,GAAGH,GAEXlG,EAAE8gB,YAElBmE,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,aAEhEtiC,OACP0iC,IAAkBpF,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAK,GAE9Cka,IAAkBpF,EAAc/5B,EAAEL,EAAE,GAAKslB,GAIzC8U,EAAc7zB,EAAE4a,YAElBmE,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,aAEhEtiC,OACP0iC,IAAkBpF,EAAc7zB,EAAEvG,EAAE,GAAKslB,EAAK,GAE9Cka,IAAkBpF,EAAc7zB,EAAEvG,EAAE,GAAKslB,GAO/C,IAFA9nB,GAAO,EAEAA,GACDoW,EAAgBG,GAAiB+oB,EAAgB0C,KAAmB1vB,GACtEkD,GAAQ8pB,EAAgB0C,GAAiB5rB,GAAiBmpB,EAAahpB,cACvEiqB,EAAWd,EAAU9pB,MAAM,IAAM2pB,EAAa3pB,MAAM,GAAK8pB,EAAU9pB,MAAM,IAAMJ,EAC/EirB,EAAWf,EAAU9pB,MAAM,IAAM2pB,EAAa3pB,MAAM,GAAK8pB,EAAU9pB,MAAM,IAAMJ,EAC/EsqB,EAAat2B,WAAWgzB,EAAU,GAAKyD,EAAQ9gC,GAAG4iC,GAAK,KAAOvF,EAAU,GAAK6D,EAAO,KACpFrgC,GAAO,GACEsS,IACT8D,GAAiBmpB,EAAahpB,eAC9BipB,GAAY,IAEIltB,EAAOhT,SACrBkgC,EAAW,EAGNjO,EAFLkO,GAAc,GAYZntB,EAASif,EAASkO,GAAYntB,OAT1BstB,EAAKp9B,EAAEwG,GACTw2B,EAAW,EAEXltB,EAASif,EADTkO,EAAa,GACiBntB,SAE9B8D,GAAiBmpB,EAAahpB,cAC9BjE,EAAS,OAOXA,IACFotB,EAAYH,EAEZhpB,GADAgpB,EAAejtB,EAAOktB,IACOjpB,gBAKnCgqB,EAAON,EAAQ9gC,GAAG4iC,GAAK,EAAI9B,EAAQ9gC,GAAG8iC,IACtCnC,EAAat2B,WAAW+2B,EAAM,EAAG,QAEjCA,EAAON,EAAQ9gC,GAAG4iC,GAAK,EAAI9B,EAAQ9gC,GAAG8iC,IACtCnC,EAAat2B,WAAW+2B,EAAM,EAAG,GAEjCT,EAAat2B,WAAWgzB,EAAU,GAAKyD,EAAQ9gC,GAAG4iC,GAAK,KAAMvF,EAAU,GAAK6D,EAAO,IAAK,GAK1F,IAFcJ,EAAQ9gC,GAAGiK,EAAI,EAExBF,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB0zB,EAAgBiD,EAAU32B,GAAGH,GAEXhG,EAAE4gB,WAElBmE,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,YAE5D,IAATzC,GAAiC,IAAnBviB,EAAa1T,IACzB9H,KAAK46B,eACHlU,EAAKxoB,OACPggC,GAAiB1C,EAAc75B,EAAEP,EAAIslB,EAAK,GAE1CwX,GAAiB1C,EAAc75B,EAAEP,EAAIslB,EAGnCA,EAAKxoB,OACP6/B,GAAQvC,EAAc75B,EAAEP,EAAIslB,EAAK,GAEjCqX,GAAQvC,EAAc75B,EAAEP,EAAIslB,IAyBtC,IAlBcmY,EAAQ9gC,GAAGiK,EAAI,EAEzBwT,EAAa2hB,kBACfxB,EAAKngB,EAAamgB,IAAM,GAGtBngB,EAAa0hB,kBAEbrc,EADErF,EAAaqF,GACV,CAACrF,EAAaqF,GAAG,GAAIrF,EAAaqF,GAAG,GAAIrF,EAAaqF,GAAG,IAEzD,CAAC,EAAG,EAAG,IAIZrF,EAAayhB,eAAiBzhB,EAAaogB,KAC7CA,EAAK,CAACpgB,EAAaogB,GAAG,GAAIpgB,EAAaogB,GAAG,GAAIpgB,EAAaogB,GAAG,KAG3D9zB,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB0zB,EAAgBiD,EAAU32B,GAAGH,GAEXA,EAAE4a,YAElBmE,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,aAEhEtiC,OACPwgC,EAAat2B,WAAWozB,EAAc7zB,EAAEvG,EAAE,GAAKslB,EAAK,IAAK8U,EAAc7zB,EAAEvG,EAAE,GAAKslB,EAAK,GAAI8U,EAAc7zB,EAAEvG,EAAE,GAAKslB,EAAK,IAErHgY,EAAat2B,WAAWozB,EAAc7zB,EAAEvG,EAAE,GAAKslB,GAAO8U,EAAc7zB,EAAEvG,EAAE,GAAKslB,EAAM8U,EAAc7zB,EAAEvG,EAAE,GAAKslB,IAKhH,IAAK5e,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB0zB,EAAgBiD,EAAU32B,GAAGH,GAEXxG,EAAEohB,YAElBmE,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,aAEhEtiC,OACPwgC,EAAal3B,MAAM,GAAKg0B,EAAcr6B,EAAEC,EAAE,GAAK,GAAKslB,EAAK,GAAI,GAAK8U,EAAcr6B,EAAEC,EAAE,GAAK,GAAKslB,EAAK,GAAI,GAEvGgY,EAAal3B,MAAM,GAAKg0B,EAAcr6B,EAAEC,EAAE,GAAK,GAAKslB,EAAM,GAAK8U,EAAcr6B,EAAEC,EAAE,GAAK,GAAKslB,EAAM,IAKvG,IAAK5e,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAqD5B,GApDA0zB,EAAgBiD,EAAU32B,GAAGH,EAE7B+e,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,YAErEhF,EAAc9S,GAAGnG,WACfmE,EAAKxoB,OACPwgC,EAAan3B,cAAci0B,EAAc9S,GAAGtnB,EAAIslB,EAAK,GAAI8U,EAAc7S,GAAGvnB,EAAIslB,EAAK,IAEnFgY,EAAan3B,cAAci0B,EAAc9S,GAAGtnB,EAAIslB,EAAM8U,EAAc7S,GAAGvnB,EAAIslB,IAI3E8U,EAAcn6B,EAAEkhB,WACdmE,EAAKxoB,OACPwgC,EAAa13B,SAASw0B,EAAcn6B,EAAED,EAAIslB,EAAK,IAE/CgY,EAAa13B,SAASw0B,EAAcn6B,EAAED,EAAIslB,IAI1C8U,EAAcjT,GAAGhG,WACfmE,EAAKxoB,OACPwgC,EAAa33B,QAAQy0B,EAAcjT,GAAGnnB,EAAIslB,EAAK,IAE/CgY,EAAa33B,QAAQy0B,EAAcjT,GAAGnnB,EAAIslB,IAI1C8U,EAAclT,GAAG/F,WACfmE,EAAKxoB,OACPwgC,EAAa53B,QAAQ00B,EAAclT,GAAGlnB,EAAIslB,EAAK,IAE/CgY,EAAa53B,QAAQ00B,EAAclT,GAAGlnB,EAAIslB,IAI1C8U,EAAcrzB,EAAEoa,WACdmE,EAAKxoB,OACPohC,IAAgB9D,EAAcrzB,EAAE/G,EAAIslB,EAAK,GAAK4Y,GAAe5Y,EAAK,GAElE4Y,IAAgB9D,EAAcrzB,EAAE/G,EAAIslB,EAAO4Y,GAAe5Y,GAI1DlL,EAAa2hB,iBAAmB3B,EAAcG,GAAGpZ,WAC/CmE,EAAKxoB,OACPy9B,GAAMH,EAAcG,GAAGv6B,EAAIslB,EAAK,GAEhCiV,GAAMH,EAAcG,GAAGv6B,EAAIslB,GAI3BlL,EAAa0hB,iBAAmB1B,EAAc3a,GAAG0B,SACnD,IAAKxa,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAClB2e,EAAKxoB,OACP2iB,EAAG9Y,GAAK8Y,EAAG9Y,IAAMyzB,EAAc3a,GAAGzf,EAAE2G,GAAK8Y,EAAG9Y,IAAM2e,EAAK,GAEvD7F,EAAG9Y,GAAK8Y,EAAG9Y,IAAMyzB,EAAc3a,GAAGzf,EAAE2G,GAAK8Y,EAAG9Y,IAAM2e,EAKxD,GAAIlL,EAAayhB,eAAiBzhB,EAAaogB,GAAI,CACjD,GAAIJ,EAAcI,GAAGrZ,SACnB,IAAKxa,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAClB2e,EAAKxoB,OACP09B,EAAG7zB,GAAK6zB,EAAG7zB,IAAMyzB,EAAcI,GAAGx6B,EAAE2G,GAAK6zB,EAAG7zB,IAAM2e,EAAK,GAEvDkV,EAAG7zB,GAAK6zB,EAAG7zB,IAAMyzB,EAAcI,GAAGx6B,EAAE2G,GAAK6zB,EAAG7zB,IAAM2e,EAKpD8U,EAAcK,GAAGtZ,WAEjBqZ,EADElV,EAAKxoB,OACFiE,YAAYy5B,EAAIJ,EAAcK,GAAGz6B,EAAIslB,EAAK,IAE1CvkB,YAAYy5B,EAAIJ,EAAcK,GAAGz6B,EAAIslB,IAI1C8U,EAAcM,GAAGvZ,WAEjBqZ,EADElV,EAAKxoB,OACF4D,mBAAmB85B,EAAIJ,EAAcM,GAAG16B,EAAIslB,EAAK,IAEjD5kB,mBAAmB85B,EAAIJ,EAAcM,GAAG16B,EAAIslB,IAIjD8U,EAAcO,GAAGxZ,WAEjBqZ,EADElV,EAAKxoB,OACFgE,mBAAmB05B,EAAIJ,EAAcO,GAAG36B,EAAIslB,EAAK,IAEjDxkB,mBAAmB05B,EAAIJ,EAAcO,GAAG36B,EAAIslB,KAMzD,IAAK5e,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzB0zB,EAAgBiD,EAAU32B,GAAGH,GAEXlG,EAAE8gB,WAElBmE,EADmB+X,EAAU32B,GAAG3G,EACRm/B,QAAQzB,EAAQ9gC,GAAGwiC,UAAUz4B,GAAI4yB,EAAS/yB,EAAEG,GAAG3G,EAAEq/B,YAErExgC,KAAK46B,eACHlU,EAAKxoB,OACPwgC,EAAat2B,UAAU,EAAGozB,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAK,IAAK8U,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAK,IAEvFgY,EAAat2B,UAAU,EAAGozB,EAAc/5B,EAAEL,EAAE,GAAKslB,GAAO8U,EAAc/5B,EAAEL,EAAE,GAAKslB,GAG7EA,EAAKxoB,OACPwgC,EAAat2B,UAAUozB,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAK,GAAI8U,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAK,IAAK8U,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAK,IAEpHgY,EAAat2B,UAAUozB,EAAc/5B,EAAEL,EAAE,GAAKslB,EAAM8U,EAAc/5B,EAAEL,EAAE,GAAKslB,GAAO8U,EAAc/5B,EAAEL,EAAE,GAAKslB,IAkBjH,GAZIlL,EAAa2hB,kBACfoC,EAAW5D,EAAK,EAAI,EAAIA,GAGtBngB,EAAa0hB,kBACfsC,EAAW,OAAS3iC,KAAKC,MAAc,IAAR+jB,EAAG,IAAY,IAAMhkB,KAAKC,MAAc,IAAR+jB,EAAG,IAAY,IAAMhkB,KAAKC,MAAc,IAAR+jB,EAAG,IAAY,KAG5GrF,EAAayhB,eAAiBzhB,EAAaogB,KAC7C6D,EAAW,OAAS5iC,KAAKC,MAAc,IAAR8+B,EAAG,IAAY,IAAM/+B,KAAKC,MAAc,IAAR8+B,EAAG,IAAY,IAAM/+B,KAAKC,MAAc,IAAR8+B,EAAG,IAAY,KAG5G57B,KAAK46B,eAAgB,CAIvB,GAHA8D,EAAat2B,UAAU,GAAIoT,EAAashB,IACxC4B,EAAat2B,UAAU,EAAGgzB,EAAU,GAAK6D,EAAO,IAAMjB,EAAM,GAExDtD,EAASj5B,EAAEA,EAAG,CAChB88B,GAAYJ,EAAa3pB,MAAM,GAAK8pB,EAAU9pB,MAAM,KAAO2pB,EAAa3pB,MAAM,GAAK8pB,EAAU9pB,MAAM,IACnG,IAAIssB,GAA4B,IAAtBjkC,KAAKkkC,KAAKxC,GAAkB1hC,KAAK4B,GAEvC0/B,EAAa3pB,MAAM,GAAK8pB,EAAU9pB,MAAM,KAC1CssB,IAAO,KAGTpC,EAAaj4B,QAAQq6B,GAAMjkC,KAAK4B,GAAK,KAGvCigC,EAAat2B,UAAUg3B,EAAUC,EAAU,GAC3CnB,GAAiB9C,EAAU,GAAKyD,EAAQ9gC,GAAG4iC,GAAK,IAE5C9B,EAAQ9gC,EAAI,IAAMqlB,IAAQyb,EAAQ9gC,EAAI,GAAGqlB,MAC3C8a,GAAiBW,EAAQ9gC,GAAG4iC,GAAK,EACjCzC,GAAiB1iB,EAAaiX,GAAK,IAAOjX,EAAa6hB,eAEpD,CAQL,OAPAqB,EAAat2B,UAAU21B,EAAMC,EAAM,GAE/BxiB,EAAawhB,IAEf0B,EAAat2B,UAAUoT,EAAawhB,GAAG,GAAIxhB,EAAawhB,GAAG,GAAKxhB,EAAaghB,OAAQ,GAG/EhhB,EAAa1T,GACnB,KAAK,EACH42B,EAAat2B,UAAUy2B,EAAQ9gC,GAAGmiC,sBAAwB1kB,EAAamhB,eAAiBnhB,EAAaihB,SAAWjhB,EAAaqhB,WAAWgC,EAAQ9gC,GAAG0iC,OAAQ,EAAG,GAC9J,MAEF,KAAK,EACH/B,EAAat2B,UAAUy2B,EAAQ9gC,GAAGmiC,sBAAwB1kB,EAAamhB,eAAiBnhB,EAAaihB,SAAWjhB,EAAaqhB,WAAWgC,EAAQ9gC,GAAG0iC,OAAS,EAAG,EAAG,GAItK/B,EAAat2B,UAAU,GAAIoT,EAAashB,IACxC4B,EAAat2B,UAAU+2B,EAAM,EAAG,GAChCT,EAAat2B,UAAUgzB,EAAU,GAAKyD,EAAQ9gC,GAAG4iC,GAAK,IAAKvF,EAAU,GAAK6D,EAAO,IAAK,GACtFlB,GAAQc,EAAQ9gC,GAAGiK,EAAIwT,EAAaiX,GAAK,IAAOjX,EAAa6hB,UAG5C,SAAf1C,EACFoF,GAAUrB,EAAa/xB,QACC,QAAfguB,EACToF,GAAUrB,EAAa5xB,UAEvBkzB,GAAU,CAACtB,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,GAAIk4B,EAAal4B,MAAM,IAAKk4B,EAAal4B,MAAM,IAAKk4B,EAAal4B,MAAM,IAAKk4B,EAAal4B,MAAM,IAAKk4B,EAAal4B,MAAM,IAAKk4B,EAAal4B,MAAM,KAG9Xk5B,EAAUJ,EAGRV,GAAwB7gC,GAC1BihC,EAAc,IAAI9C,YAAYwD,EAASH,EAAUC,EAAUC,EAAUM,GAASC,IAC9EhgC,KAAKq7B,gBAAgBr4B,KAAKg8B,GAC1BJ,GAAwB,EACxB5+B,KAAKs7B,oBAAqB,IAE1B0D,EAAch/B,KAAKq7B,gBAAgBt9B,GACnCiC,KAAKs7B,mBAAqB0D,EAAYgC,OAAOtB,EAASH,EAAUC,EAAUC,EAAUM,GAASC,KAAYhgC,KAAKs7B,uBAKpHb,qBAAqBh4B,UAAUiC,SAAW,WACpC1E,KAAKg7B,MAAMnU,WAAWC,UAAY9mB,KAAK66B,WAI3C76B,KAAK66B,SAAW76B,KAAKg7B,MAAMnU,WAAWC,QACtC9mB,KAAKwE,6BAGPi2B,qBAAqBh4B,UAAUk8B,QAAU,IAAI54B,OAC7C00B,qBAAqBh4B,UAAUw9B,kBAAoB,GACnDrtB,gBAAgB,CAAC3O,0BAA2Bw2B,sBA+C5CyB,YAAYz5B,UAAUu+B,OAAS,SAAU74B,EAAGwzB,EAAI9a,EAAI+a,EAAI3zB,EAAGxG,GACzDzB,KAAKyE,KAAK0D,GAAI,EACdnI,KAAKyE,KAAKk3B,IAAK,EACf37B,KAAKyE,KAAKoc,IAAK,EACf7gB,KAAKyE,KAAKm3B,IAAK,EACf57B,KAAKyE,KAAKwD,GAAI,EACdjI,KAAKyE,KAAKhD,GAAI,EACd,IAAIw/B,GAAU,EAsCd,OApCIjhC,KAAKmI,IAAMA,IACbnI,KAAKmI,EAAIA,EACTnI,KAAKyE,KAAK0D,GAAI,EACd84B,GAAU,GAGRjhC,KAAK27B,KAAOA,IACd37B,KAAK27B,GAAKA,EACV37B,KAAKyE,KAAKk3B,IAAK,EACfsF,GAAU,GAGRjhC,KAAK6gB,KAAOA,IACd7gB,KAAK6gB,GAAKA,EACV7gB,KAAKyE,KAAKoc,IAAK,EACfogB,GAAU,GAGRjhC,KAAK47B,KAAOA,IACd57B,KAAK47B,GAAKA,EACV57B,KAAKyE,KAAKm3B,IAAK,EACfqF,GAAU,GAGRjhC,KAAKiI,IAAMA,IACbjI,KAAKiI,EAAIA,EACTjI,KAAKyE,KAAKwD,GAAI,EACdg5B,GAAU,IAGRx/B,EAAEvD,QAAW8B,KAAKyB,EAAE,KAAOA,EAAE,IAAMzB,KAAKyB,EAAE,KAAOA,EAAE,IAAMzB,KAAKyB,EAAE,KAAOA,EAAE,IAAMzB,KAAKyB,EAAE,KAAOA,EAAE,IAAMzB,KAAKyB,EAAE,MAAQA,EAAE,KAAOzB,KAAKyB,EAAE,MAAQA,EAAE,MAChJzB,KAAKyB,EAAIA,EACTzB,KAAKyE,KAAKhD,GAAI,EACdw/B,GAAU,GAGLA,GAsDT9E,aAAa15B,UAAUi6B,gBAAkB,CAAC,EAAG,GAE7CP,aAAa15B,UAAU+6B,SAAW,SAAU/uB,EAAKsN,GAC/C,IAAK,IAAI5a,KAAK4a,EACRA,EAAK9I,eAAe9R,KACtBsN,EAAItN,GAAK4a,EAAK5a,IAIlB,OAAOsN,GAGT0tB,aAAa15B,UAAUy+B,eAAiB,SAAUnlB,GAC3CA,EAAKQ,YACRvc,KAAK09B,iBAAiB3hB,GAGxB/b,KAAKu8B,YAAcxgB,EACnB/b,KAAKu8B,YAAYE,SAAWz8B,KAAKu8B,YAAYE,UAAYz8B,KAAK08B,gBAC9D18B,KAAKyE,MAAO,GAGd03B,aAAa15B,UAAUg7B,eAAiB,WACtC,OAAOz9B,KAAKmhC,mBAGdhF,aAAa15B,UAAU0+B,gBAAkB,WAOvC,OANAnhC,KAAKmnB,GAAKnnB,KAAK+b,KAAKla,EAAEkG,EAAE7J,OAAS,EAE7B8B,KAAKmnB,IACPnnB,KAAKonB,UAAUpnB,KAAKohC,iBAAiBl+B,KAAKlD,OAGrCA,KAAKmnB,IAGdgV,aAAa15B,UAAU2kB,UAAY,SAAUC,GAC3CrnB,KAAK+mB,gBAAgB/jB,KAAKqkB,GAC1BrnB,KAAK4mB,KAAK1iB,mBAAmBlE,OAG/Bm8B,aAAa15B,UAAUiC,SAAW,SAAU28B,GAC1C,GAAKrhC,KAAK4mB,KAAKC,WAAWC,UAAY9mB,KAAK8mB,SAAY9mB,KAAK+mB,gBAAgB7oB,QAAYmjC,EAAxF,CAIArhC,KAAKu8B,YAAY56B,EAAI3B,KAAK+b,KAAKla,EAAEkG,EAAE/H,KAAKo8B,WAAWj7B,EAAEQ,EACrD,IAAI2/B,EAAethC,KAAKu8B,YACpBgF,EAAevhC,KAAKo8B,UAExB,GAAIp8B,KAAKgnB,KACPhnB,KAAKkhC,eAAelhC,KAAKu8B,iBAD3B,CAKAv8B,KAAKgnB,MAAO,EACZhnB,KAAKyE,MAAO,EAEZ,IAAI1G,EACAE,EAAM+B,KAAK+mB,gBAAgB7oB,OAC3BgpB,EAAama,GAAerhC,KAAK+b,KAAKla,EAAEkG,EAAE/H,KAAKo8B,WAAWj7B,EAE9D,IAAKpD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGtBmpB,EADEqa,IAAiBvhC,KAAKo8B,UACXp8B,KAAK+mB,gBAAgBhpB,GAAGmpB,EAAYA,EAAWvlB,GAE/C3B,KAAK+mB,gBAAgBhpB,GAAGiC,KAAKu8B,YAAarV,EAAWvlB,GAIlE2/B,IAAiBpa,GACnBlnB,KAAKkhC,eAAeha,GAGtBlnB,KAAKwiB,GAAKxiB,KAAKoB,EAAIpB,KAAKu8B,YACxBv8B,KAAKgnB,MAAO,EACZhnB,KAAK8mB,QAAU9mB,KAAK4mB,KAAKC,WAAWC,WAGtCqV,aAAa15B,UAAU2+B,iBAAmB,WAOxC,IANA,IAAII,EAAWxhC,KAAK+b,KAAKla,EAAEkG,EAEvBoa,EAAWniB,KAAK4mB,KAAKT,KAAKC,cAC1BroB,EAAI,EACJE,EAAMujC,EAAStjC,OAEZH,GAAKE,EAAM,IACGujC,EAASzjC,GAAGoD,IAE3BpD,IAAME,EAAM,GAAKujC,EAASzjC,EAAI,GAAG4D,EAAIwgB,KAIzCpkB,GAAK,EAOP,OAJIiC,KAAKo8B,YAAcr+B,IACrBiC,KAAKo8B,UAAYr+B,GAGZiC,KAAK+b,KAAKla,EAAEkG,EAAE/H,KAAKo8B,WAAWj7B,GAGvCg7B,aAAa15B,UAAUg/B,eAAiB,SAAUC,GAOhD,IANA,IAIIC,EAJA9kB,EAAqBJ,YAAY+C,4BACjCoiB,EAAkB,GAClB7jC,EAAI,EACJE,EAAMyjC,EAAKxjC,OAGRH,EAAIE,GACT0jC,EAAWD,EAAKxzB,WAAWnQ,IAEmB,IAA1C8e,EAAmBxY,QAAQs9B,GAC7BC,EAAgBA,EAAgB1jC,OAAS,IAAMwjC,EAAKG,OAAO9jC,GAEvD4jC,GAAY,OAAUA,GAAY,QACpCA,EAAWD,EAAKxzB,WAAWnQ,EAAI,KAEf,OAAU4jC,GAAY,OACpCC,EAAgB5+B,KAAK0+B,EAAKI,OAAO/jC,EAAG,MAClCA,GAKJ6jC,EAAgB5+B,KAAK0+B,EAAKG,OAAO9jC,IAIrCA,GAAK,EAGP,OAAO6jC,GAGTzF,aAAa15B,UAAUi7B,iBAAmB,SAAUliB,GAClDA,EAAae,YAAa,EAC1B,IAGIxe,EAAGE,EACH8jC,EAEA3jC,EAQA0J,EAAG4R,EAEHsoB,EAhBAxoB,EAAcxZ,KAAK4mB,KAAKC,WAAWrN,YACnCuC,EAAO/b,KAAK+b,KACZ8iB,EAAU,GAGVpd,EAAQ,EAERwgB,EAAiBlmB,EAAK9T,EAAE3G,EACxB4gC,EAAc,EACdC,EAAa,EACbrC,EAAc,EACdjD,EAAa,GACbuF,EAAY,EACZC,EAAe,EAEfjkB,EAAW5E,EAAY4H,cAAc5F,EAAaha,GAElD0tB,EAAU,EACVoT,EAASlkB,EAASI,OAASJ,EAASI,OAAOrD,MAAM,KAAO,GACxDsD,EAAU,SACVD,EAAS,SAIb,IAHAvgB,EAAMqkC,EAAOpkC,OAGRH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGxB,OAFYukC,EAAOvkC,GAAGwkC,eAGpB,IAAK,SACH/jB,EAAS,SACT,MAEF,IAAK,OACHC,EAAU,MACV,MAEF,IAAK,QACHA,EAAU,MACV,MAEF,IAAK,SACHA,EAAU,MACV,MAEF,IAAK,UACL,IAAK,SACHA,EAAU,MACV,MAEF,IAAK,QACL,IAAK,OACHA,EAAU,MAKhBjD,EAAaiD,QAAUL,EAASK,SAAWA,EAC3CjD,EAAagD,OAASA,EACtBhD,EAAa6hB,UAAY7hB,EAAara,EACtCqa,EAAa8hB,UAAYt9B,KAAKyhC,eAAejmB,EAAa7Z,GAC1D1D,EAAMud,EAAa8hB,UAAUp/B,OAC7Bsd,EAAa+hB,gBAAkB/hB,EAAaohB,GAC5C,IACI+E,EADAa,EAAiBhnB,EAAaiX,GAAK,IAAOjX,EAAa6hB,UAG3D,GAAI7hB,EAAa/T,GAMf,IALA,IAGIg7B,EAAenF,EAHf1+B,GAAO,EACP69B,EAAWjhB,EAAa/T,GAAG,GAC3Bi7B,EAAYlnB,EAAa/T,GAAG,GAGzB7I,GAAM,CAEX6jC,EAAgB,EAChBL,EAAY,EACZnkC,GAHAq/B,EAAYt9B,KAAKyhC,eAAejmB,EAAa7Z,IAG7BzD,OAChBskC,EAAiBhnB,EAAaiX,GAAK,IAAOjX,EAAa6hB,UACvD,IAAIsF,GAAkB,EAEtB,IAAK5kC,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB4jC,EAAWrE,EAAUv/B,GAAGmQ,WAAW,GACnC6zB,GAAc,EAEO,MAAjBzE,EAAUv/B,GACZ4kC,EAAiB5kC,EACK,KAAb4jC,GAAgC,IAAbA,IAC5BS,EAAY,EACZL,GAAc,EACdU,GAAiBjnB,EAAa+hB,iBAA4C,IAAzB/hB,EAAa6hB,WAG5D7jB,EAAYoC,OACdomB,EAAWxoB,EAAYwH,YAAYsc,EAAUv/B,GAAIqgB,EAASI,OAAQJ,EAASG,SAC3E2Q,EAAU6S,EAAc,EAAIC,EAASrlB,EAAInB,EAAa6hB,UAAY,KAGlEnO,EAAU1V,EAAY+H,YAAY+b,EAAUv/B,GAAIyd,EAAaha,EAAGga,EAAa6hB,WAG3E+E,EAAYlT,EAAUuN,GAA6B,MAAjBa,EAAUv/B,KACtB,IAApB4kC,EACF1kC,GAAO,EAEPF,EAAI4kC,EAGNF,GAAiBjnB,EAAa+hB,iBAA4C,IAAzB/hB,EAAa6hB,UAC9DC,EAAUn6B,OAAOpF,EAAG4kC,IAAmB5kC,EAAI,EAAI,EAAG,MAElD4kC,GAAkB,EAClBP,EAAY,IAEZA,GAAalT,EACbkT,GAAaI,GAIjBC,GAAiBrkB,EAASoe,OAAShhB,EAAa6hB,UAAY,IAExDr9B,KAAKq8B,WAAa7gB,EAAa6hB,UAAYr9B,KAAKs8B,iBAAmBoG,EAAYD,GACjFjnB,EAAa6hB,WAAa,EAC1B7hB,EAAa+hB,gBAAkB/hB,EAAa6hB,UAAY7hB,EAAaohB,GAAKphB,EAAara,IAEvFqa,EAAa8hB,UAAYA,EACzBr/B,EAAMud,EAAa8hB,UAAUp/B,OAC7BU,GAAO,GAKbwjC,GAAaI,EACbtT,EAAU,EACV,IACI0T,EADAC,EAAoB,EAGxB,IAAK9kC,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EA6CxB,GA5CAgkC,GAAc,EAIG,MAFjBJ,GADAiB,EAAcpnB,EAAa8hB,UAAUv/B,IACdmQ,WAAW,KAEE,IAAbyzB,GACrBkB,EAAoB,EACpBhG,EAAW75B,KAAKo/B,GAChBC,EAAeD,EAAYC,EAAeD,EAAYC,EACtDD,GAAa,EAAII,EACjBpkC,EAAM,GACN2jC,GAAc,EACdjC,GAAe,GAEf1hC,EAAMwkC,EAGJppB,EAAYoC,OACdomB,EAAWxoB,EAAYwH,YAAY4hB,EAAaxkB,EAASI,OAAQhF,EAAY4H,cAAc5F,EAAaha,GAAG+c,SAC3G2Q,EAAU6S,EAAc,EAAIC,EAASrlB,EAAInB,EAAa6hB,UAAY,KAIlEnO,EAAU1V,EAAY+H,YAAYnjB,EAAKod,EAAaha,EAAGga,EAAa6hB,WAIlD,MAAhBuF,EACFC,GAAqB3T,EAAUsT,GAE/BJ,GAAalT,EAAUsT,EAAiBK,EACxCA,EAAoB,GAGtBhE,EAAQ77B,KAAK,CACXgF,EAAGknB,EACHyR,GAAIzR,EACJ2R,IAAKqB,EACLh6B,EAAG65B,EACHxB,UAAW,GACXniC,IAAKA,EACLqiC,KAAMX,EACNI,sBAAuB,IAGH,GAAlB+B,GAGF,GAFAC,GAAehT,EAEH,KAAR9wB,GAAsB,MAARA,GAAeL,IAAME,EAAM,EAAG,CAK9C,IAJY,KAARG,GAAsB,MAARA,IAChB8jC,GAAehT,GAGViT,GAAcpkC,GACnB8gC,EAAQsD,GAAYxB,GAAKuB,EACzBrD,EAAQsD,GAAY/e,IAAM3B,EAC1Bod,EAAQsD,GAAYzB,MAAQxR,EAC5BiT,GAAc,EAGhB1gB,GAAS,EACTygB,EAAc,QAEX,GAAsB,GAAlBD,GAGT,GAFAC,GAAehT,EAEH,KAAR9wB,GAAcL,IAAME,EAAM,EAAG,CAK/B,IAJY,KAARG,IACF8jC,GAAehT,GAGViT,GAAcpkC,GACnB8gC,EAAQsD,GAAYxB,GAAKuB,EACzBrD,EAAQsD,GAAY/e,IAAM3B,EAC1Bod,EAAQsD,GAAYzB,MAAQxR,EAC5BiT,GAAc,EAGhBD,EAAc,EACdzgB,GAAS,QAGXod,EAAQpd,GAAO2B,IAAM3B,EACrBod,EAAQpd,GAAOif,MAAQ,EACvBjf,GAAS,EAQb,GAJAjG,EAAaxT,EAAI62B,EACjBwD,EAAeD,EAAYC,EAAeD,EAAYC,EACtDxF,EAAW75B,KAAKo/B,GAEZ5mB,EAAa/T,GACf+T,EAAaihB,SAAWjhB,EAAa/T,GAAG,GACxC+T,EAAamhB,cAAgB,OAI7B,OAFAnhB,EAAaihB,SAAW4F,EAEhB7mB,EAAa1T,GACnB,KAAK,EACH0T,EAAamhB,eAAiBnhB,EAAaihB,SAC3C,MAEF,KAAK,EACHjhB,EAAamhB,eAAiBnhB,EAAaihB,SAAW,EACtD,MAEF,QACEjhB,EAAamhB,cAAgB,EAInCnhB,EAAaqhB,WAAaA,EAC1B,IACIiG,EACAC,EAFAtE,EAAY1iB,EAAKpU,EAGrB+R,EAAO+kB,EAAUvgC,OACjB,IAAI8kC,EACA5f,EACA6f,EAAU,GAEd,IAAKn7B,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAkB5B,KAjBAg7B,EAAerE,EAAU32B,IAERH,EAAEkZ,KACjBrF,EAAa0hB,iBAAkB,GAG7B4F,EAAan7B,EAAEg0B,KACjBngB,EAAa2hB,iBAAkB,IAG7B2F,EAAan7B,EAAEi0B,IAAMkH,EAAan7B,EAAEk0B,IAAMiH,EAAan7B,EAAEm0B,IAAMgH,EAAan7B,EAAEo0B,MAChFvgB,EAAayhB,eAAgB,GAG/B7Z,EAAM,EACN4f,EAAQF,EAAa3hC,EAAEI,EAElBxD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACxBglC,EAAalE,EAAQ9gC,IACVwiC,UAAUz4B,GAAKsb,GAEb,GAAT4f,GAAiC,KAAnBD,EAAW3kC,KAAuB,GAAT4kC,GAAiC,KAAnBD,EAAW3kC,KAAiC,MAAnB2kC,EAAW3kC,KAAwB,GAAT4kC,IAAeD,EAAW76B,GAAuB,KAAlB66B,EAAW3kC,KAAcL,GAAKE,EAAM,IAAe,GAAT+kC,IAAeD,EAAW76B,GAAKnK,GAAKE,EAAM,MACnM,IAAtB6kC,EAAa3hC,EAAE+hC,IACjBD,EAAQjgC,KAAKogB,GAGfA,GAAO,GAIXrH,EAAKpU,EAAEG,GAAG3G,EAAEq/B,WAAapd,EACzB,IACI+f,EADAC,GAAc,EAGlB,GAA0B,IAAtBN,EAAa3hC,EAAE+hC,GACjB,IAAKnlC,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGpBqlC,IAFJL,EAAalE,EAAQ9gC,IAEQwiC,UAAUz4B,KACrCs7B,EAAaL,EAAWxC,UAAUz4B,GAClCq7B,EAASF,EAAQ9/B,OAAOtG,KAAKU,MAAMV,KAAKsB,SAAW8kC,EAAQ/kC,QAAS,GAAG,IAGzE6kC,EAAWxC,UAAUz4B,GAAKq7B,EAKhC3nB,EAAa4hB,QAAU5hB,EAAa+hB,iBAA4C,IAAzB/hB,EAAa6hB,UACpE7hB,EAAashB,GAAKthB,EAAashB,IAAM,EACrCthB,EAAaghB,OAASpe,EAASoe,OAAShhB,EAAa6hB,UAAY,KAGnElB,aAAa15B,UAAU4gC,mBAAqB,SAAUC,EAAS7hB,GAC7DA,OAAkB8hB,IAAV9hB,EAAsBzhB,KAAKo8B,UAAY3a,EAC/C,IAAI+hB,EAAQxjC,KAAKw9B,SAAS,GAAIx9B,KAAK+b,KAAKla,EAAEkG,EAAE0Z,GAAOtgB,GACnDqiC,EAAQxjC,KAAKw9B,SAASgG,EAAOF,GAC7BtjC,KAAK+b,KAAKla,EAAEkG,EAAE0Z,GAAOtgB,EAAIqiC,EACzBxjC,KAAKyjC,YAAYhiB,GACjBzhB,KAAK4mB,KAAK1iB,mBAAmBlE,OAG/Bm8B,aAAa15B,UAAUghC,YAAc,SAAUhiB,GAC7C,IAAI+hB,EAAQxjC,KAAK+b,KAAKla,EAAEkG,EAAE0Z,GAAOtgB,EACjCqiC,EAAMjnB,YAAa,EACnBvc,KAAKo8B,UAAY,EACjBp8B,KAAKinB,eAAgB,EACrBjnB,KAAK0E,SAAS8+B,IAGhBrH,aAAa15B,UAAUihC,cAAgB,SAAUC,GAC/C3jC,KAAKq8B,UAAYsH,EACjB3jC,KAAKyjC,YAAYzjC,KAAKo8B,WACtBp8B,KAAK4mB,KAAK1iB,mBAAmBlE,OAG/Bm8B,aAAa15B,UAAUmhC,mBAAqB,SAAUC,GACpD7jC,KAAKs8B,gBAAkBz/B,KAAKU,MAAMsmC,IAAe,EACjD7jC,KAAKyjC,YAAYzjC,KAAKo8B,WACtBp8B,KAAK4mB,KAAK1iB,mBAAmBlE,OAG/B,IAAIg8B,iBAAmB,WACrB,IAAIv+B,EAAMZ,KAAKY,IACXE,EAAMd,KAAKc,IACXJ,EAAQV,KAAKU,MAEjB,SAASy+B,EAAiBpV,EAAM7K,GAC9B/b,KAAK8jC,oBAAsB,EAC3B9jC,KAAK+H,GAAI,EACT/H,KAAK+b,KAAOA,EACZ/b,KAAK4mB,KAAOA,EACZ5mB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK+jC,OAAS,EACd/jC,KAAKgkC,OAAS,EACdhkC,KAAK2E,6BAA6BiiB,GAClC5mB,KAAKmB,EAAI4gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK5a,GAAK,CAC/C4G,EAAG,GACF,EAAG,EAAG/H,MAGPA,KAAK6H,EADH,MAAOkU,EACAgG,gBAAgB8F,QAAQjB,EAAM7K,EAAKlU,EAAG,EAAG,EAAG7H,MAE5C,CACPoB,EAAG,KAIPpB,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,GAAK,CAC/CJ,EAAG,GACF,EAAG,EAAG/H,MACTA,KAAKikC,GAAKliB,gBAAgB8F,QAAQjB,EAAM7K,EAAKkoB,IAAM,CACjDl8B,EAAG,GACF,EAAG,EAAG/H,MACTA,KAAKkkC,GAAKniB,gBAAgB8F,QAAQjB,EAAM7K,EAAKmoB,IAAM,CACjDn8B,EAAG,GACF,EAAG,EAAG/H,MACTA,KAAK2H,EAAIoa,gBAAgB8F,QAAQjB,EAAM7K,EAAKpU,EAAG,EAAG,IAAM3H,MAEnDA,KAAKoE,kBAAkBlG,QAC1B8B,KAAK0E,WAoIT,OAhIAs3B,EAAiBv5B,UAAY,CAC3B69B,QAAS,SAAiBld,GACpBpjB,KAAK8jC,qBAAuB9jC,KAAK4mB,KAAKud,aAAa5H,YAAYv0B,EAAE9J,QACnE8B,KAAK0E,WAIP,IAAIgP,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EAEL7T,KAAKkkC,GAAG9iC,EAAI,EACdsS,EAAK1T,KAAKkkC,GAAG9iC,EAAI,IAEjBuS,GAAM3T,KAAKkkC,GAAG9iC,EAAI,IAGhBpB,KAAKikC,GAAG7iC,EAAI,EACdwS,EAAK,EAAM5T,KAAKikC,GAAG7iC,EAAI,IAEvByS,EAAK,EAAM7T,KAAKikC,GAAG7iC,EAAI,IAGzB,IAAIgjC,EAAQn0B,cAAcqT,gBAAgB5P,EAAIC,EAAIC,EAAIC,GAAIxC,IACtDqV,EAAO,EACPvlB,EAAInB,KAAK+jC,OACTl8B,EAAI7H,KAAKgkC,OACTpkC,EAAOI,KAAK+b,KAAKmI,GAErB,GAAa,IAATtkB,EAOF8mB,EAAO0d,EALL1d,EADE7e,IAAM1G,EACDiiB,GAAOvb,EAAI,EAAI,EAEfpK,EAAI,EAAGE,EAAI,IAAOkK,EAAI1G,IAAMiiB,EAAMjiB,IAAM0G,EAAI1G,GAAI,UAIpD,GAAa,IAATvB,EAOT8mB,EAAO0d,EALL1d,EADE7e,IAAM1G,EACDiiB,GAAOvb,EAAI,EAAI,EAEf,EAAIpK,EAAI,EAAGE,EAAI,IAAOkK,EAAI1G,IAAMiiB,EAAMjiB,IAAM0G,EAAI1G,GAAI,UAIxD,GAAa,IAATvB,EACLiI,IAAM1G,EACRulB,EAAO,GAEPA,EAAOjpB,EAAI,EAAGE,EAAI,IAAOkK,EAAI1G,IAAMiiB,EAAMjiB,IAAM0G,EAAI1G,GAAI,KAE5C,GACTulB,GAAQ,EAERA,EAAO,EAAI,GAAKA,EAAO,IAI3BA,EAAO0d,EAAM1d,QACR,GAAa,IAAT9mB,EAAY,CACrB,GAAIiI,IAAM1G,EACRulB,EAAO,MACF,CACL,IAAI2d,EAAMx8B,EAAI1G,EAKV+J,GAAKm5B,EAAM,GADfjhB,EAAMzlB,EAAIF,EAAI,EAAG2lB,EAAM,GAAMjiB,GAAI0G,EAAI1G,IAEjCwG,EAAI08B,EAAM,EACd3d,EAAO7pB,KAAKM,KAAK,EAAI+N,EAAIA,GAAKvD,EAAIA,IAGpC+e,EAAO0d,EAAM1d,QACK,IAAT9mB,GACLiI,IAAM1G,EACRulB,EAAO,GAEPtD,EAAMzlB,EAAIF,EAAI,EAAG2lB,EAAM,GAAMjiB,GAAI0G,EAAI1G,GACrCulB,GAAQ,EAAI7pB,KAAKoJ,IAAIpJ,KAAK4B,GAAe,EAAV5B,KAAK4B,GAAS2kB,GAAOvb,EAAI1G,KAAO,GAGjEulB,EAAO0d,EAAM1d,KAETtD,GAAO7lB,EAAM4D,KAEbulB,EAAOjpB,EAAI,EAAGE,EADZylB,EAAMjiB,EAAI,EACMxD,EAAIkK,EAAG,IAAM1G,EAAIiiB,GAEjBvb,EAAIub,EAFmB,KAM7CsD,EAAO0d,EAAM1d,IAGf,OAAOA,EAAO1mB,KAAK2H,EAAEvG,GAEvBsD,SAAU,SAAkB4/B,GAC1BtkC,KAAKwE,2BACLxE,KAAKyE,KAAO6/B,GAAgBtkC,KAAKyE,KACjCzE,KAAK8jC,mBAAqB9jC,KAAK4mB,KAAKud,aAAa5H,YAAYv0B,EAAE9J,QAAU,EAErEomC,GAAgC,IAAhBtkC,KAAK+b,KAAK1a,IAC5BrB,KAAK6H,EAAEzG,EAAIpB,KAAK8jC,oBAGlB,IAAIS,EAA0B,IAAhBvkC,KAAK+b,KAAK1a,EAAU,EAAI,IAAMrB,KAAK+b,KAAKykB,WAClDr4B,EAAInI,KAAKmI,EAAE/G,EAAImjC,EACfpjC,EAAInB,KAAKmB,EAAEC,EAAImjC,EAAUp8B,EACzBN,EAAI7H,KAAK6H,EAAEzG,EAAImjC,EAAUp8B,EAE7B,GAAIhH,EAAI0G,EAAG,CACT,IAAI+oB,EAAKzvB,EACTA,EAAI0G,EACJA,EAAI+oB,EAGN5wB,KAAK+jC,OAAS5iC,EACdnB,KAAKgkC,OAASn8B,IAGlB+K,gBAAgB,CAAC3O,0BAA2B+3B,GAMrC,CACLC,oBALF,SAA6BrV,EAAM7K,EAAMtY,GACvC,OAAO,IAAIu4B,EAAiBpV,EAAM7K,EAAMtY,KAvKrB,GA+KnB+gC,aACK,SAAUC,EAAeC,EAASC,EAAUC,GACjD,IAAItuB,EAAU,EACVoT,EAAa+a,EACb13B,EAAOzO,iBAAiBorB,GAM5B,SAAS9U,IAUP,OAPI0B,EAEQvJ,EADVuJ,GAAW,GAGDouB,IAyBd,MArCS,CACP9vB,WAAYA,EACZ6b,QAgBF,SAAiB3xB,GACXwX,IAAYoT,IACd3c,EAAO83B,QAAQh1B,OAAO9C,GACtB2c,GAA0B,GAGxBib,GACFA,EAAS7lC,GAGXiO,EAAKuJ,GAAWxX,EAChBwX,GAAW,KAYbuuB,QAKK,CACLh1B,OALF,SAAgBpM,GACd,OAAOA,EAAIob,OAAOvgB,iBAAiBmF,EAAIvF,WAQvC2rB,WAKK2a,aAAa,GAJpB,WACE,OAAOphC,iBAAiB,UAAW,MAMnCwoB,YAqCE3vB,QAAUuoC,aAAa,GApC3B,WACE,OAAO,IAAI/a,aAGb,SAAiB6H,GACf,IACIvzB,EADAE,EAAMqzB,EAAUhb,QAGpB,IAAKvY,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB8rB,WAAW4G,QAAQa,EAAUlwB,EAAErD,IAC/B8rB,WAAW4G,QAAQa,EAAUvzB,EAAEA,IAC/B8rB,WAAW4G,QAAQa,EAAUnpB,EAAEpK,IAC/BuzB,EAAUlwB,EAAErD,GAAK,KACjBuzB,EAAUvzB,EAAEA,GAAK,KACjBuzB,EAAUnpB,EAAEpK,GAAK,KAGnBuzB,EAAUhb,QAAU,EACpBgb,EAAU1pB,GAAI,KAmBhB3L,QAAQ8O,MAhBR,SAAe2kB,GACb,IACI3xB,EADA+mC,EAAS7oC,QAAQ2Y,aAEjB3W,OAAwBslC,IAAlB7T,EAAMpZ,QAAwBoZ,EAAMtuB,EAAElD,OAASwxB,EAAMpZ,QAK/D,IAJAwuB,EAAOlb,UAAU3rB,GACjB6mC,EAAOl9B,EAAI8nB,EAAM9nB,EAGZ7J,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB+mC,EAAO7a,YAAYyF,EAAMtuB,EAAErD,GAAG,GAAI2xB,EAAMtuB,EAAErD,GAAG,GAAI2xB,EAAMvnB,EAAEpK,GAAG,GAAI2xB,EAAMvnB,EAAEpK,GAAG,GAAI2xB,EAAM3xB,EAAEA,GAAG,GAAI2xB,EAAM3xB,EAAEA,GAAG,GAAIA,GAG/G,OAAO+mC,GAKF7oC,SAFHA,QAKF+vB,qBAAuB,WACzB,IAAI9b,EAAK,CACP+b,mBAOF,WACE,IAAI8Y,EAIFA,EAFEzuB,EAEgBvJ,EADlBuJ,GAAW,GAGO,IAAIoY,gBAGxB,OAAOqW,GAhBPtU,QAmBF,SAAiBsU,GACf,IAAIhnC,EACAE,EAAM8mC,EAAgBzuB,QAE1B,IAAKvY,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB6tB,WAAW6E,QAAQsU,EAAgBzqB,OAAOvc,IAG5CgnC,EAAgBzuB,QAAU,EAEtBA,IAAYoT,IACd3c,EAAO83B,QAAQh1B,OAAO9C,GACtB2c,GAA0B,GAG5B3c,EAAKuJ,GAAWyuB,EAChBzuB,GAAW,IAjCTA,EAAU,EACVoT,EAAa,EACb3c,EAAOzO,iBAAiBorB,GAkC5B,OAAOxZ,EAzCkB,GA4CvB+F,qBAmBKuuB,aAAa,GAlBpB,WACE,MAAO,CACL1vB,QAAS,GACTyB,YAAa,MAIjB,SAAiBzX,GACf,IAAIf,EACAE,EAAMa,EAAQgW,QAAQ5W,OAE1B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB4W,mBAAmB8b,QAAQ3xB,EAAQgW,QAAQ/W,IAG7Ce,EAAQgW,QAAQ5W,OAAS,KAMzByW,mBASK6vB,aAAa,GARpB,WACE,MAAO,CACLjwB,YAAa,EACbM,SAAUzR,iBAAiB,UAAW7E,sBACtCuW,QAAS1R,iBAAiB,UAAW7E,0BAO3C,SAASymC,gBAoKT,SAASC,YAAYC,EAAeC,GAClCnlC,KAAKklC,cAAgBA,EACrBllC,KAAKsZ,OAAS,KACdtZ,KAAKomB,eAAiB,EACtBpmB,KAAKolC,WAAaxhC,SAAS,OAC3B,IAAIyhC,EAAY,GAEhB,GAAIF,GAAUA,EAAOG,MAAO,CAC1B,IAAIC,EAAe3hC,SAAS,SACxB4hC,EAAUzkC,kBACdwkC,EAAajnB,aAAa,KAAMknB,GAChCD,EAAa7mB,YAAcymB,EAAOG,MAClCtlC,KAAKolC,WAAW1nB,YAAY6nB,GAC5BF,GAAaG,EAGf,GAAIL,GAAUA,EAAOM,YAAa,CAChC,IAAIC,EAAc9hC,SAAS,QACvB+hC,EAAS5kC,kBACb2kC,EAAYpnB,aAAa,KAAMqnB,GAC/BD,EAAYhnB,YAAcymB,EAAOM,YACjCzlC,KAAKolC,WAAW1nB,YAAYgoB,GAC5BL,GAAa,IAAMM,EAGjBN,GACFrlC,KAAKolC,WAAW9mB,aAAa,kBAAmB+mB,GAGlD,IAAIxlB,EAAOjc,SAAS,QACpB5D,KAAKolC,WAAW1nB,YAAYmC,GAC5B,IAAI+lB,EAAchiC,SAAS,KAC3B5D,KAAKolC,WAAW1nB,YAAYkoB,GAC5B5lC,KAAK6lC,aAAeD,EACpB5lC,KAAK8lC,aAAe,CAClBC,oBAAqBZ,GAAUA,EAAOY,qBAAuB,gBAC7DC,yBAA0Bb,GAAUA,EAAOa,0BAA4B,iBACvEC,gBAAiBd,GAAUA,EAAOc,kBAAmB,EACrDC,mBAAmBf,IAAuC,IAA7BA,EAAOe,kBACpCC,YAAahB,GAAUA,EAAOgB,cAAe,EAC7CC,YAAajB,GAAUA,EAAOiB,cAAe,EAC7CC,UAAWlB,GAAUA,EAAOkB,WAAa,GACzCrtB,GAAImsB,GAAUA,EAAOnsB,IAAM,GAC3BstB,UAAWnB,GAAUA,EAAOmB,UAC5BC,WAAY,CACV74B,MAAOy3B,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAW74B,OAAS,OACjE2pB,OAAQ8N,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAWlP,QAAU,OACnEnsB,EAAGi6B,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAWr7B,GAAK,KACzDC,EAAGg6B,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAWp7B,GAAK,OAG7DnL,KAAK6mB,WAAa,CAChBpiB,MAAM,EACN0d,UAAW,EACXtC,KAAMA,EACNimB,aAAc9lC,KAAK8lC,cAErB9lC,KAAK2zB,SAAW,GAChB3zB,KAAKwmC,gBAAkB,GACvBxmC,KAAKymC,WAAY,EACjBzmC,KAAK0mC,aAAe,MAkOtB,SAASC,eAAezB,EAAeC,GACrCnlC,KAAKklC,cAAgBA,EACrBllC,KAAK8lC,aAAe,CAClBc,aAAazB,QAAiC5B,IAAvB4B,EAAOyB,aAA4BzB,EAAOyB,YACjEC,QAAS1B,GAAUA,EAAO0B,SAAW,KACrCZ,gBAAiBd,GAAUA,EAAOc,kBAAmB,EACrDF,oBAAqBZ,GAAUA,EAAOY,qBAAuB,gBAC7DC,yBAA0Bb,GAAUA,EAAOa,0BAA4B,iBACvEK,UAAWlB,GAAUA,EAAOkB,WAAa,GACzCrtB,GAAImsB,GAAUA,EAAOnsB,IAAM,IAE7BhZ,KAAK8lC,aAAagB,IAAM3B,GAAUA,EAAO2B,KAAO,EAE5C9mC,KAAKklC,cAAc6B,UACrB/mC,KAAK8lC,aAAagB,IAAM3B,GAAUA,EAAO2B,KAAO5qC,OAAO8qC,kBAAoB,GAG7EhnC,KAAKomB,eAAiB,EACtBpmB,KAAK6mB,WAAa,CAChB1E,UAAW,EACX1d,MAAM,EACNqhC,aAAc9lC,KAAK8lC,aACnBmB,oBAAqB,GAEvBjnC,KAAKknC,YAAc,IAAIC,cACvBnnC,KAAK2zB,SAAW,GAChB3zB,KAAKwmC,gBAAkB,GACvBxmC,KAAKonC,aAAe,IAAIrhC,OACxB/F,KAAKqZ,gBAAiB,EACtBrZ,KAAK0mC,aAAe,SAsVtB,SAASW,eAAenC,EAAeC,GACrCnlC,KAAKklC,cAAgBA,EACrBllC,KAAKsZ,OAAS,KACdtZ,KAAKomB,eAAiB,EACtBpmB,KAAK8lC,aAAe,CAClBO,UAAWlB,GAAUA,EAAOkB,WAAa,GACzCL,yBAA0Bb,GAAUA,EAAOa,0BAA4B,iBACvEE,mBAAmBf,IAAuC,IAA7BA,EAAOe,kBACpCK,WAAY,CACV74B,MAAOy3B,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAW74B,OAAS,OACjE2pB,OAAQ8N,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAWlP,QAAU,OACnEnsB,EAAGi6B,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAWr7B,GAAK,QACzDC,EAAGg6B,GAAUA,EAAOoB,YAAcpB,EAAOoB,WAAWp7B,GAAK,UAG7DnL,KAAK6mB,WAAa,CAChBpiB,MAAM,EACN0d,UAAW,EACX2jB,aAAc9lC,KAAK8lC,cAErB9lC,KAAKwmC,gBAAkB,GACvBxmC,KAAK2zB,SAAW,GAChB3zB,KAAKsnC,eAAiB,GACtBtnC,KAAKymC,WAAY,EACjBzmC,KAAKunC,OAAS,KACdvnC,KAAKwnC,YAAa,EAClBxnC,KAAK0mC,aAAe,OAwTtB,SAASe,YAAY1rB,EAAMjd,EAAS+nB,GAClC7mB,KAAK+b,KAAOA,EACZ/b,KAAKlB,QAAUA,EACfkB,KAAK6mB,WAAaA,EAClB7mB,KAAKoV,WAAa,GAClBpV,KAAKia,gBAAkBja,KAAK+b,KAAK9B,iBAAmB,GACpDja,KAAK4lC,YAAc,KACnB,IACI7nC,EADA8hB,EAAO7f,KAAK6mB,WAAWhH,KAEvB5hB,EAAM+B,KAAKia,gBAAkBja,KAAKia,gBAAgB/b,OAAS,EAC/D8B,KAAK0nC,SAAWppC,iBAAiBL,GACjC+B,KAAK2nC,UAAY,GACjB,IAAI7sB,EAIAhT,EAAG4R,EAEHkuB,EAAMC,EAAUC,EAAS58B,EALzB68B,EAAa/nC,KAAKia,gBAClBtM,EAAQ,EACRq6B,EAAe,GAEfC,EAAUlnC,kBAEVo4B,EAAW,WACX+O,EAAU,YAEd,IAAKnqC,EAAI,EAAGA,EAAIE,EAAKF,IAkBnB,IAjB2B,MAAvBgqC,EAAWhqC,GAAG+H,MAAuC,MAAvBiiC,EAAWhqC,GAAG+H,MAAgBiiC,EAAWhqC,GAAGm1B,KAA6B,MAAtB6U,EAAWhqC,GAAGoK,EAAEJ,GAAaggC,EAAWhqC,GAAGoK,EAAE+C,KAChIiuB,EAAW,OACX+O,EAAU,QAGe,KAAtBH,EAAWhqC,GAAG+H,MAAqC,KAAtBiiC,EAAWhqC,GAAG+H,MAA0B,IAAV6H,EAO9Di6B,EAAO,OANPA,EAAOhkC,SAAS,SACX0a,aAAa,OAAQ,WAC1BspB,EAAKtpB,aAAa,QAASte,KAAKlB,QAAQqnB,KAAKpK,KAAKY,GAAK,GACvDirB,EAAKtpB,aAAa,SAAUte,KAAKlB,QAAQqnB,KAAKpK,KAAK7a,GAAK,GACxD8mC,EAAahlC,KAAK4kC,IAKpB9sB,EAAOlX,SAAS,QAEU,KAAtBmkC,EAAWhqC,GAAG+H,KAAlB,CAeA,IAAIqiC,EAgCJ,GAnCAx6B,GAAS,EACTmN,EAAKwD,aAAa,OAA+B,MAAvBypB,EAAWhqC,GAAG+H,KAAe,UAAY,WACnEgV,EAAKwD,aAAa,YAAa,WAGL,IAAtBypB,EAAWhqC,GAAGmN,EAAEnD,GAClBoxB,EAAW,OACX+O,EAAU,OACVh9B,EAAI6W,gBAAgB8F,QAAQ7nB,KAAKlB,QAASipC,EAAWhqC,GAAGmN,EAAG,EAAG,KAAMlL,KAAKlB,SACzEqpC,EAAWpnC,mBACX8mC,EAAWjkC,SAAS,WACX0a,aAAa,KAAM6pB,IAC5BL,EAAUlkC,SAAS,iBACX0a,aAAa,WAAY,SACjCwpB,EAAQxpB,aAAa,KAAM,iBAC3BwpB,EAAQxpB,aAAa,SAAU,KAC/BupB,EAASnqB,YAAYoqB,GACrBjoB,EAAKnC,YAAYmqB,GACjB/sB,EAAKwD,aAAa,SAAiC,MAAvBypB,EAAWhqC,GAAG+H,KAAe,UAAY,aAErEgiC,EAAU,KACV58B,EAAI,MAINlL,KAAKoV,WAAWrX,GAAK,CACnB6oB,KAAM9L,EACN5P,EAAGA,EACHk9B,MAAON,EACPO,SAAU,GACVC,aAAc,GACdC,SAAUJ,EACVK,WAAY,GAGY,KAAtBT,EAAWhqC,GAAG+H,KAAa,CAC7B4T,EAAOsuB,EAAa9pC,OACpB,IAAIoD,EAAIsC,SAAS,KAEjB,IAAKkE,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBxG,EAAEoc,YAAYsqB,EAAalgC,IAG7B,IAAI02B,EAAO56B,SAAS,QACpB46B,EAAKlgB,aAAa,YAAa,SAC/BkgB,EAAKlgB,aAAa,KAAM2pB,EAAU,IAAMt6B,GACxC6wB,EAAK9gB,YAAY5C,GACjB+E,EAAKnC,YAAY8gB,GACjBl9B,EAAEgd,aAAa,OAAQ,OAASliB,aAAe,IAAM6rC,EAAU,IAAMt6B,EAAQ,KAC7Eq6B,EAAa9pC,OAAS,EACtB8pC,EAAahlC,KAAK1B,QAElB0mC,EAAahlC,KAAK8X,GAGhBitB,EAAWhqC,GAAGm1B,MAAQlzB,KAAK2nC,YAC7B3nC,KAAK2nC,UAAY3nC,KAAKyoC,wBAIxBzoC,KAAK0nC,SAAS3pC,GAAK,CACjB6oB,KAAM9L,EACNutB,SAAU,GACVrT,GAAIjT,gBAAgB8F,QAAQ7nB,KAAKlB,QAASipC,EAAWhqC,GAAGoK,EAAG,EAAG,IAAMnI,KAAKlB,SACzEqF,KAAM4mB,qBAAqB2d,aAAa1oC,KAAKlB,QAASipC,EAAWhqC,GAAI,GACrE4qC,QAASf,GAGN5nC,KAAK0nC,SAAS3pC,GAAGoG,KAAK4D,GACzB/H,KAAK4oC,SAASb,EAAWhqC,GAAIiC,KAAK0nC,SAAS3pC,GAAGoG,KAAK/C,EAAGpB,KAAK0nC,SAAS3pC,SA/EpEiC,KAAK0nC,SAAS3pC,GAAK,CACjBi3B,GAAIjT,gBAAgB8F,QAAQ7nB,KAAKlB,QAASipC,EAAWhqC,GAAGoK,EAAG,EAAG,IAAMnI,KAAKlB,SACzEqF,KAAM4mB,qBAAqB2d,aAAa1oC,KAAKlB,QAASipC,EAAWhqC,GAAI,GACrE6oB,KAAM9L,EACNutB,SAAU,IAEZxoB,EAAKnC,YAAY5C,GAgFrB,IAHA9a,KAAK4lC,YAAchiC,SAASu1B,GAC5Bl7B,EAAM+pC,EAAa9pC,OAEdH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK4lC,YAAYloB,YAAYsqB,EAAajqC,IAGxC4P,EAAQ,IACV3N,KAAK4lC,YAAYtnB,aAAa,KAAM2pB,GACpCjoC,KAAKlB,QAAQ+pC,cAAcvqB,aAAa4pB,EAAS,OAAS9rC,aAAe,IAAM6rC,EAAU,KACzFpoB,EAAKnC,YAAY1d,KAAK4lC,cAGpB5lC,KAAK0nC,SAASxpC,QAChB8B,KAAKlB,QAAQgqC,uBAAuB9oC,MA4GxC,SAAS+oC,oBAsDT,SAASC,gBAiDT,SAASC,oBAsFT,SAASC,qBAgGT,SAASC,wBAiET,SAASC,iBAAiBtqC,EAASE,GACjCgB,KAAK4mB,KAAO9nB,EACZkB,KAAKgqB,IAAMhrB,EAGb,SAASqqC,aAAattB,EAAMutB,GAC1BtpC,KAAK+b,KAAOA,EACZ/b,KAAKJ,KAAOmc,EAAKzT,GACjBtI,KAAK6B,EAAI,GACT7B,KAAKupC,IAAMD,EACXtpC,KAAKyE,MAAO,EACZzE,KAAKkW,QAAqB,IAAZ6F,EAAKytB,GACnBxpC,KAAKypC,MAAQ7lC,SAAS,QACtB5D,KAAK0pC,OAAS,KAQhB,SAASC,aAAaC,EAAcN,EAAO5Z,GACzC1vB,KAAK6pC,OAAS,GACd7pC,KAAKsiC,OAAS,GACdtiC,KAAK4pC,aAAeA,EACpB5pC,KAAK8pC,KAAO,GACZ9pC,KAAKkkB,GAAKwL,EACV1vB,KAAKupC,IAAMD,EAIXtpC,KAAKuE,cAAgBmrB,EAAM3nB,EAK3B,IAHA,IAAIhK,EAAI,EACJE,EAAM2rC,EAAa1rC,OAEhBH,EAAIE,GAAK,CACd,GAAI2rC,EAAa7rC,GAAGg3B,OAAO3wB,kBAAkBlG,OAAQ,CACnD8B,KAAKuE,aAAc,EACnB,MAGFxG,GAAK,GAQT,SAASgsC,iBAAiBhV,EAAQC,EAAI1wB,GACpCtE,KAAKwI,UAAY,CACfusB,OAAQA,EACRC,GAAIA,EACJ1wB,UAAWA,GAEbtE,KAAK2zB,SAAW,GAChB3zB,KAAKuE,YAAcvE,KAAKwI,UAAUusB,OAAO3wB,kBAAkBlG,QAAU8B,KAAKwI,UAAUwsB,GAAGjO,gBAAgB7oB,OAGzG,SAAS8rC,mBAAmBpjB,EAAM7K,EAAMkuB,GACtCjqC,KAAK2E,6BAA6BiiB,GAClC5mB,KAAK0E,SAAW1E,KAAKwE,yBACrBxE,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,EAAG,EAAG,IAAMnI,MACxDA,KAAK2c,EAAIoF,gBAAgB8F,QAAQjB,EAAM7K,EAAKY,EAAG,EAAG,KAAM3c,MACxDA,KAAK6B,EAAI,IAAI8sB,aAAa/H,EAAM7K,EAAKla,GAAK,GAAI,MAAO7B,MACrDA,KAAK4H,EAAIma,gBAAgB8F,QAAQjB,EAAM7K,EAAKnU,EAAG,EAAG,IAAK5H,MACvDA,KAAKjB,MAAQkrC,EACbjqC,KAAKuE,cAAgBvE,KAAKuE,YAK5B,SAAS2lC,iBAAiBtjB,EAAM7K,EAAMkuB,GACpCjqC,KAAK2E,6BAA6BiiB,GAClC5mB,KAAK0E,SAAW1E,KAAKwE,yBACrBxE,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,EAAG,EAAG,IAAMnI,MACxDA,KAAK4H,EAAIma,gBAAgB8F,QAAQjB,EAAM7K,EAAKnU,EAAG,EAAG,IAAK5H,MACvDA,KAAKjB,MAAQkrC,EAKf,SAASE,yBAAyBvjB,EAAM7K,EAAMkuB,GAC5CjqC,KAAK2E,6BAA6BiiB,GAClC5mB,KAAK0E,SAAW1E,KAAKwE,yBACrBxE,KAAKoqC,iBAAiBxjB,EAAM7K,EAAMkuB,GA4EpC,SAASI,2BAA2BzjB,EAAM7K,EAAMkuB,GAC9CjqC,KAAK2E,6BAA6BiiB,GAClC5mB,KAAK0E,SAAW1E,KAAKwE,yBACrBxE,KAAK2c,EAAIoF,gBAAgB8F,QAAQjB,EAAM7K,EAAKY,EAAG,EAAG,KAAM3c,MACxDA,KAAK6B,EAAI,IAAI8sB,aAAa/H,EAAM7K,EAAKla,GAAK,GAAI,MAAO7B,MACrDA,KAAKoqC,iBAAiBxjB,EAAM7K,EAAMkuB,GAClCjqC,KAAKuE,cAAgBvE,KAAKuE,YAK5B,SAAS+lC,iBACPtqC,KAAK6a,GAAK,GACV7a,KAAKuqC,aAAe,GACpBvqC,KAAKwqC,GAAK5mC,SAAS,KA14DrBohC,aAAaviC,UAAUgoC,YAAc,SAAUC,GAC7C,IAAI3sC,EAEAge,EADA9d,EAAM+B,KAAKsZ,OAAOpb,OAItB,IAFA8B,KAAKqZ,gBAAiB,EAEjBtb,EAAIE,EAAM,EAAGF,GAAK,EAAGA,IACnBiC,KAAK2zB,SAAS51B,KACjBge,EAAO/b,KAAKsZ,OAAOvb,IAEV4sC,GAAK5uB,EAAK2L,IAAMgjB,EAAM1qC,KAAKsZ,OAAOvb,GAAG2pB,IAAM3L,EAAKiZ,GAAKjZ,EAAK2L,GAAKgjB,EAAM1qC,KAAKsZ,OAAOvb,GAAG2pB,IAC3F1nB,KAAK4qC,UAAU7sC,GAInBiC,KAAKqZ,iBAAiBrZ,KAAK2zB,SAAS51B,IAAKiC,KAAKqZ,eAGhDrZ,KAAK6qC,wBAGP7F,aAAaviC,UAAUqoC,WAAa,SAAUC,GAC5C,OAAQA,EAAMziC,IACZ,KAAK,EACH,OAAOtI,KAAKgrC,YAAYD,GAE1B,KAAK,EACH,OAAO/qC,KAAKirC,WAAWF,GAEzB,KAAK,EACH,OAAO/qC,KAAKkrC,YAAYH,GAE1B,KAAK,EACH,OAAO/qC,KAAKmrC,WAAWJ,GAEzB,KAAK,EACH,OAAO/qC,KAAKorC,YAAYL,GAE1B,KAAK,EACH,OAAO/qC,KAAKqrC,WAAWN,GAEzB,KAAK,EACH,OAAO/qC,KAAKm2B,YAAY4U,GAE1B,KAAK,GACH,OAAO/qC,KAAKsrC,aAAaP,GAG7B,OAAO/qC,KAAKmrC,WAAWJ,IAGzB/F,aAAaviC,UAAU6oC,aAAe,WACpC,MAAM,IAAIC,MAAM,qDAGlBvG,aAAaviC,UAAU0zB,YAAc,SAAUpa,GAC7C,OAAO,IAAIyvB,aAAazvB,EAAM/b,KAAK6mB,WAAY7mB,OAGjDglC,aAAaviC,UAAUgpC,cAAgB,WACrC,IAAI1tC,EACAE,EAAM+B,KAAKsZ,OAAOpb,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK4qC,UAAU7sC,GAGjBiC,KAAK6qC,wBAGP7F,aAAaviC,UAAUipC,cAAgB,SAAUC,GAC/C3rC,KAAKqZ,gBAAiB,EACtB,IAAItb,EAEA+J,EADA7J,EAAM0tC,EAAUztC,OAEhBwb,EAAO1Z,KAAKsZ,OAAOpb,OAEvB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGxB,IAFA+J,EAAI,EAEGA,EAAI4R,GAAM,CACf,GAAI1Z,KAAKsZ,OAAOxR,GAAGkR,IAAM2yB,EAAU5tC,GAAGib,GAAI,CACxChZ,KAAKsZ,OAAOxR,GAAK6jC,EAAU5tC,GAC3B,MAGF+J,GAAK,IAKXk9B,aAAaviC,UAAUmpC,oBAAsB,SAAUC,GACrD7rC,KAAK6mB,WAAWilB,iBAAmBD,GAGrC7G,aAAaviC,UAAUspC,UAAY,WAC5B/rC,KAAK6mB,WAAWof,iBACnBjmC,KAAKyrC,iBAITzG,aAAaviC,UAAUupC,sBAAwB,SAAUltC,EAASmtC,EAAYC,GAM5E,IALA,IAAIvY,EAAW3zB,KAAK2zB,SAChBra,EAAStZ,KAAKsZ,OACdvb,EAAI,EACJE,EAAMqb,EAAOpb,OAEVH,EAAIE,GACLqb,EAAOvb,GAAGqlB,KAAO6oB,IACdtY,EAAS51B,KAAsB,IAAhB41B,EAAS51B,IAI3BmuC,EAAUlpC,KAAK2wB,EAAS51B,IACxB41B,EAAS51B,GAAGouC,mBAEa5I,IAArBjqB,EAAOvb,GAAGkgB,OACZje,KAAKgsC,sBAAsBltC,EAASwa,EAAOvb,GAAGkgB,OAAQiuB,GAEtDptC,EAAQstC,aAAaF,KATvBlsC,KAAK4qC,UAAU7sC,GACfiC,KAAKqsC,kBAAkBvtC,KAa3Bf,GAAK,GAITinC,aAAaviC,UAAU4pC,kBAAoB,SAAUvtC,GACnDkB,KAAKwmC,gBAAgBxjC,KAAKlE,IAG5BkmC,aAAaviC,UAAU6pC,wBAA0B,SAAU5wB,GACzD,IAAI3d,EACAE,EAAMyd,EAAOxd,OAEjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,GAAI2d,EAAO3d,GAAGwuC,GAAI,CAChB,IAAIpmB,EAAOnmB,KAAKirC,WAAWvvB,EAAO3d,IAClCooB,EAAKqmB,kBACLxsC,KAAK6mB,WAAWilB,iBAAiBW,oBAAoBtmB,KAK3D6e,aAAaviC,UAAUiqC,gBAAkB,SAAUC,EAAUC,GAC3D5sC,KAAK6mB,WAAWrN,YAAc,IAAIiD,YAClCzc,KAAK6mB,WAAWrN,YAAYiG,SAASktB,EAAS/wB,OAC9C5b,KAAK6mB,WAAWrN,YAAYoG,SAAS+sB,EAAS5tB,MAAO6tB,GACrD5sC,KAAK6mB,WAAWgmB,aAAe7sC,KAAKklC,cAAc2H,aAAa3pC,KAAKlD,KAAKklC,eACzEllC,KAAK6mB,WAAWgR,cAAgB73B,KAAKklC,cAAcrN,cAAc30B,KAAKlD,KAAKklC,eAC3EllC,KAAK6mB,WAAWimB,YAAc9sC,KAAKklC,cAAc6H,eACjD/sC,KAAK6mB,WAAWmmB,gBAAkBhtC,KAAKklC,cAAc8H,gBACrDhtC,KAAK6mB,WAAWC,QAAU,EAC1B9mB,KAAK6mB,WAAWuC,UAAYujB,EAASM,GACrCjtC,KAAK6mB,WAAW1W,GAAKw8B,EAASx8B,GAC9BnQ,KAAK6mB,WAAWqmB,SAAW,CACzBvwB,EAAGgwB,EAAShwB,EACZzb,EAAGyrC,EAASzrC,IAmEhB0R,gBAAgB,CAACoyB,cAAeC,aAEhCA,YAAYxiC,UAAU0oC,WAAa,SAAUpvB,GAC3C,OAAO,IAAIoxB,YAAYpxB,EAAM/b,KAAK6mB,WAAY7mB,OAGhDilC,YAAYxiC,UAAU2oC,YAAc,SAAUrvB,GAC5C,OAAO,IAAIqxB,gBAAgBrxB,EAAM/b,KAAK6mB,WAAY7mB,OAGpDilC,YAAYxiC,UAAU4oC,WAAa,SAAUtvB,GAC3C,OAAO,IAAIsxB,eAAetxB,EAAM/b,KAAK6mB,WAAY7mB,OAGnDilC,YAAYxiC,UAAUuoC,YAAc,SAAUjvB,GAC5C,OAAO,IAAIuxB,cAAcvxB,EAAM/b,KAAK6mB,WAAY7mB,OAGlDilC,YAAYxiC,UAAUwoC,WAAa,SAAUlvB,GAC3C,OAAO,IAAIwxB,eAAexxB,EAAM/b,KAAK6mB,WAAY7mB,OAGnDilC,YAAYxiC,UAAUyoC,YAAc,SAAUnvB,GAC5C,OAAO,IAAIyxB,cAAczxB,EAAM/b,KAAK6mB,WAAY7mB,OAGlDilC,YAAYxiC,UAAUgrC,gBAAkB,SAAUd,GAChD3sC,KAAKolC,WAAW9mB,aAAa,QAAS,8BAElCte,KAAK8lC,aAAaM,YACpBpmC,KAAKolC,WAAW9mB,aAAa,UAAWte,KAAK8lC,aAAaM,aAE1DpmC,KAAKolC,WAAW9mB,aAAa,UAAW,OAASquB,EAAShwB,EAAI,IAAMgwB,EAASzrC,GAG1ElB,KAAK8lC,aAAaK,cACrBnmC,KAAKolC,WAAW9mB,aAAa,QAASquB,EAAShwB,GAC/C3c,KAAKolC,WAAW9mB,aAAa,SAAUquB,EAASzrC,GAChDlB,KAAKolC,WAAWrmC,MAAM2O,MAAQ,OAC9B1N,KAAKolC,WAAWrmC,MAAMs4B,OAAS,OAC/Br3B,KAAKolC,WAAWrmC,MAAMyJ,UAAY,sBAGhCxI,KAAK8lC,aAAaO,WACpBrmC,KAAKolC,WAAW9mB,aAAa,QAASte,KAAK8lC,aAAaO,WAGtDrmC,KAAK8lC,aAAa9sB,IACpBhZ,KAAKolC,WAAW9mB,aAAa,KAAMte,KAAK8lC,aAAa9sB,SAGnBuqB,IAAhCvjC,KAAK8lC,aAAaQ,WACpBtmC,KAAKolC,WAAW9mB,aAAa,YAAate,KAAK8lC,aAAaQ,WAG9DtmC,KAAKolC,WAAW9mB,aAAa,sBAAuBte,KAAK8lC,aAAaC,qBAGtE/lC,KAAKklC,cAAc6B,QAAQrpB,YAAY1d,KAAKolC,YAE5C,IAAIvlB,EAAO7f,KAAK6mB,WAAWhH,KAC3B7f,KAAK0sC,gBAAgBC,EAAU9sB,GAC/B7f,KAAK6mB,WAAWof,gBAAkBjmC,KAAK8lC,aAAaG,gBACpDjmC,KAAK+b,KAAO4wB,EACZ,IAAI/G,EAAchiC,SAAS,YACvBgkC,EAAOhkC,SAAS,QACpBgkC,EAAKtpB,aAAa,QAASquB,EAAShwB,GACpCirB,EAAKtpB,aAAa,SAAUquB,EAASzrC,GACrC0mC,EAAKtpB,aAAa,IAAK,GACvBspB,EAAKtpB,aAAa,IAAK,GACvB,IAAIovB,EAAS3sC,kBACb6kC,EAAYtnB,aAAa,KAAMovB,GAC/B9H,EAAYloB,YAAYkqB,GACxB5nC,KAAK6lC,aAAavnB,aAAa,YAAa,OAASliB,aAAe,IAAMsxC,EAAS,KACnF7tB,EAAKnC,YAAYkoB,GACjB5lC,KAAKsZ,OAASqzB,EAASrzB,OACvBtZ,KAAK2zB,SAAWr1B,iBAAiBquC,EAASrzB,OAAOpb,SAGnD+mC,YAAYxiC,UAAUi2B,QAAU,WAC9B14B,KAAKklC,cAAc6B,QAAQ3pB,UAAY,GACvCpd,KAAK6lC,aAAe,KACpB7lC,KAAK6mB,WAAWhH,KAAO,KACvB,IAAI9hB,EACAE,EAAM+B,KAAKsZ,OAAStZ,KAAKsZ,OAAOpb,OAAS,EAE7C,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,IACfiC,KAAK2zB,SAAS51B,IAChBiC,KAAK2zB,SAAS51B,GAAG26B,UAIrB14B,KAAK2zB,SAASz1B,OAAS,EACvB8B,KAAKymC,WAAY,EACjBzmC,KAAKklC,cAAgB,MAGvBD,YAAYxiC,UAAUkrC,oBAAsB,aAE5C1I,YAAYxiC,UAAUmoC,UAAY,SAAU5gB,GAC1C,IAAI2J,EAAW3zB,KAAK2zB,SAEpB,IAAIA,EAAS3J,IAA+B,IAAvBhqB,KAAKsZ,OAAO0Q,GAAK1hB,GAAtC,CAIAqrB,EAAS3J,IAAO,EAChB,IAAIlrB,EAAUkB,KAAK8qC,WAAW9qC,KAAKsZ,OAAO0Q,IAC1C2J,EAAS3J,GAAOlrB,EAEZvC,oBAC0B,IAAxByD,KAAKsZ,OAAO0Q,GAAK1hB,IACnBtI,KAAK6mB,WAAWilB,iBAAiBW,oBAAoB3tC,GAGvDA,EAAQ0tC,mBAGVxsC,KAAK4tC,mBAAmB9uC,EAASkrB,GAE7BhqB,KAAKsZ,OAAO0Q,GAAKnQ,KACd7Z,KAAK2zB,SAAS3J,EAAM,KAAiC,IAA3BhqB,KAAK2zB,SAAS3J,EAAM,GAIjDlrB,EAAQ+uC,SAASla,EAAS3J,EAAM,GAAGie,UAHnCjoC,KAAK4qC,UAAU5gB,EAAM,GACrBhqB,KAAKqsC,kBAAkBvtC,OAO7BmmC,YAAYxiC,UAAUooC,qBAAuB,WAC3C,KAAO7qC,KAAKwmC,gBAAgBtoC,QAAQ,CAClC,IAAIY,EAAUkB,KAAKwmC,gBAAgBtV,MAGnC,GAFApyB,EAAQgvC,iBAEJhvC,EAAQid,KAAKlC,GAIf,IAHA,IAAI9b,EAAI,EACJE,EAAM+B,KAAK2zB,SAASz1B,OAEjBH,EAAIE,GAAK,CACd,GAAI+B,KAAK2zB,SAAS51B,KAAOe,EAAS,CAChCA,EAAQ+uC,SAAS7tC,KAAK2zB,SAAS51B,EAAI,GAAGkqC,SACtC,MAGFlqC,GAAK,KAMbknC,YAAYxiC,UAAUsrC,YAAc,SAAUrD,GAC5C,GAAI1qC,KAAKomB,gBAAkBskB,IAAO1qC,KAAKymC,UAAvC,CAIY,OAARiE,EACFA,EAAM1qC,KAAKomB,cAEXpmB,KAAKomB,cAAgBskB,EAKvB1qC,KAAK6mB,WAAW1E,SAAWuoB,EAC3B1qC,KAAK6mB,WAAWC,SAAW,EAC3B9mB,KAAK6mB,WAAWilB,iBAAiBkC,aAAetD,EAChD1qC,KAAK6mB,WAAWpiB,MAAO,EACvB,IAAI1G,EACAE,EAAM+B,KAAKsZ,OAAOpb,OAMtB,IAJK8B,KAAKqZ,gBACRrZ,KAAKyqC,YAAYC,GAGd3sC,EAAIE,EAAM,EAAGF,GAAK,EAAGA,KACpBiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,KACvCiC,KAAK2zB,SAAS51B,GAAGkwC,aAAavD,EAAM1qC,KAAKsZ,OAAOvb,GAAG2pB,IAIvD,GAAI1nB,KAAK6mB,WAAWpiB,KAClB,IAAK1G,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACpBiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,KACvCiC,KAAK2zB,SAAS51B,GAAGgwC,gBAMzB9I,YAAYxiC,UAAUmrC,mBAAqB,SAAU9uC,EAASkrB,GAC5D,IAAIpV,EAAa9V,EAAQovC,iBAEzB,GAAKt5B,EAAL,CAOA,IAHA,IACIu5B,EADApwC,EAAI,EAGDA,EAAIisB,GACLhqB,KAAK2zB,SAAS51B,KAA2B,IAArBiC,KAAK2zB,SAAS51B,IAAeiC,KAAK2zB,SAAS51B,GAAGmwC,mBACpEC,EAAcnuC,KAAK2zB,SAAS51B,GAAGmwC,kBAGjCnwC,GAAK,EAGHowC,EACFnuC,KAAK6lC,aAAauI,aAAax5B,EAAYu5B,GAE3CnuC,KAAK6lC,aAAanoB,YAAY9I,KAIlCqwB,YAAYxiC,UAAU4rC,KAAO,WAC3BruC,KAAK6lC,aAAa9mC,MAAMI,QAAU,QAGpC8lC,YAAYxiC,UAAU6rC,KAAO,WAC3BtuC,KAAK6lC,aAAa9mC,MAAMI,QAAU,SAmCpCyT,gBAAgB,CAACoyB,cAAe2B,gBAEhCA,eAAelkC,UAAU2oC,YAAc,SAAUrvB,GAC/C,OAAO,IAAIwyB,eAAexyB,EAAM/b,KAAK6mB,WAAY7mB,OAGnD2mC,eAAelkC,UAAU4oC,WAAa,SAAUtvB,GAC9C,OAAO,IAAIyyB,cAAczyB,EAAM/b,KAAK6mB,WAAY7mB,OAGlD2mC,eAAelkC,UAAUuoC,YAAc,SAAUjvB,GAC/C,OAAO,IAAI0yB,eAAe1yB,EAAM/b,KAAK6mB,WAAY7mB,OAGnD2mC,eAAelkC,UAAUwoC,WAAa,SAAUlvB,GAC9C,OAAO,IAAI2yB,cAAc3yB,EAAM/b,KAAK6mB,WAAY7mB,OAGlD2mC,eAAelkC,UAAUyoC,YAAc,SAAUnvB,GAC/C,OAAO,IAAI4yB,eAAe5yB,EAAM/b,KAAK6mB,WAAY7mB,OAGnD2mC,eAAelkC,UAAU0oC,WAAalG,YAAYxiC,UAAU0oC,WAE5DxE,eAAelkC,UAAUmsC,aAAe,SAAUpoC,GAChD,GAAiB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,IAA0B,IAAdA,EAAM,KAA2B,IAAdA,EAAM,IAIrG,GAAKxG,KAAK8lC,aAAac,YAAvB,CAKA5mC,KAAKonC,aAAap8B,eAAexE,GACjC,IAAIqoC,EAAS7uC,KAAKknC,YAAY4H,IAAItoC,MAClCxG,KAAKonC,aAAa5+B,UAAUqmC,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,IAAKA,EAAO,KAE7M7uC,KAAKknC,YAAY4H,IAAI9jC,eAAehL,KAAKonC,aAAa5gC,OACtD,IAAIuoC,EAAU/uC,KAAKknC,YAAY4H,IAAItoC,MACnCxG,KAAKgvC,cAActnC,aAAaqnC,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,IAAKA,EAAQ,UAVnG/uC,KAAKgvC,cAAcxmC,UAAUhC,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAAKA,EAAM,MAa1FmgC,eAAelkC,UAAUwsC,WAAa,SAAUja,GAI9C,IAAKh1B,KAAK8lC,aAAac,YAGrB,OAFA5mC,KAAKgvC,cAAcE,aAAela,EAAK,EAAI,EAAIA,OAC/Ch1B,KAAK6mB,WAAWogB,mBAAqBjnC,KAAKknC,YAAYiI,IAIxDnvC,KAAKknC,YAAYiI,IAAMna,EAAK,EAAI,EAAIA,EAEhCh1B,KAAK6mB,WAAWogB,qBAAuBjnC,KAAKknC,YAAYiI,KAC1DnvC,KAAKgvC,cAAcE,YAAclvC,KAAKknC,YAAYiI,GAClDnvC,KAAK6mB,WAAWogB,mBAAqBjnC,KAAKknC,YAAYiI,KAI1DxI,eAAelkC,UAAU8D,MAAQ,WAC1BvG,KAAK8lC,aAAac,YAKvB5mC,KAAKknC,YAAY3gC,QAJfvG,KAAKgvC,cAAcI,WAOvBzI,eAAelkC,UAAU4sC,KAAO,SAAUC,GACxC,GAAKtvC,KAAK8lC,aAAac,YAAvB,CAKI0I,GACFtvC,KAAKgvC,cAAcK,OAGrB,IAAI7oC,EAAQxG,KAAKknC,YAAY4H,IAAItoC,MAE7BxG,KAAKknC,YAAY5wB,SAAWtW,KAAKknC,YAAYqI,SAC/CvvC,KAAKknC,YAAYsI,YAGnB,IAAIzxC,EACA0F,EAAMzD,KAAKknC,YAAYuI,MAAMzvC,KAAKknC,YAAYqI,SAElD,IAAKxxC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB0F,EAAI1F,GAAKyI,EAAMzI,GAGjBiC,KAAKknC,YAAYwI,QAAQ1vC,KAAKknC,YAAYqI,SAAWvvC,KAAKknC,YAAYiI,GACtEnvC,KAAKknC,YAAYqI,SAAW,OAtB1BvvC,KAAKgvC,cAAcK,QAyBvB1I,eAAelkC,UAAU2sC,QAAU,SAAUE,GAC3C,GAAKtvC,KAAK8lC,aAAac,YAAvB,CAKI0I,IACFtvC,KAAKgvC,cAAcI,UACnBpvC,KAAK6mB,WAAW8oB,UAAY,eAG9B3vC,KAAKknC,YAAYqI,SAAW,EAC5B,IACIxxC,EADA6xC,EAAS5vC,KAAKknC,YAAYuI,MAAMzvC,KAAKknC,YAAYqI,SAEjD9rC,EAAMzD,KAAKknC,YAAY4H,IAAItoC,MAE/B,IAAKzI,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB0F,EAAI1F,GAAK6xC,EAAO7xC,GAGlBiC,KAAKgvC,cAActnC,aAAakoC,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAAKA,EAAO,KAC/FA,EAAS5vC,KAAKknC,YAAYwI,QAAQ1vC,KAAKknC,YAAYqI,SACnDvvC,KAAKknC,YAAYiI,GAAKS,EAElB5vC,KAAK6mB,WAAWogB,qBAAuB2I,IACzC5vC,KAAKgvC,cAAcE,YAAcU,EACjC5vC,KAAK6mB,WAAWogB,mBAAqB2I,QAxBrC5vC,KAAKgvC,cAAcI,WA4BvBzI,eAAelkC,UAAUgrC,gBAAkB,SAAUd,GAC/C3sC,KAAKklC,cAAc6B,SACrB/mC,KAAKklC,cAAc5gC,UAAYP,UAAU,UACzC/D,KAAKklC,cAAc5gC,UAAUvF,MAAM2O,MAAQ,OAC3C1N,KAAKklC,cAAc5gC,UAAUvF,MAAMs4B,OAAS,OAG5Cr3B,KAAKklC,cAAc5gC,UAAUvF,MAAMK,gBAAkBY,KAAKklC,cAAc5gC,UAAUvF,MAAM8wC,mBAAqB7vC,KAAKklC,cAAc5gC,UAAUvF,MAAMM,sBAAwBW,KAAKklC,cAAc5gC,UAAUvF,MAAM,qBAAuB,cAClOiB,KAAKklC,cAAc6B,QAAQrpB,YAAY1d,KAAKklC,cAAc5gC,WAC1DtE,KAAKgvC,cAAgBhvC,KAAKklC,cAAc5gC,UAAUsa,WAAW,MAEzD5e,KAAK8lC,aAAaO,WACpBrmC,KAAKklC,cAAc5gC,UAAUga,aAAa,QAASte,KAAK8lC,aAAaO,WAGnErmC,KAAK8lC,aAAa9sB,IACpBhZ,KAAKklC,cAAc5gC,UAAUga,aAAa,KAAMte,KAAK8lC,aAAa9sB,KAGpEhZ,KAAKgvC,cAAgBhvC,KAAK8lC,aAAae,QAGzC7mC,KAAK+b,KAAO4wB,EACZ3sC,KAAKsZ,OAASqzB,EAASrzB,OACvBtZ,KAAK8vC,gBAAkB,CACrBnzB,EAAGgwB,EAAShwB,EACZzb,EAAGyrC,EAASzrC,EACZgG,GAAI,EACJC,GAAI,EACJkB,GAAI,EACJC,GAAI,GAENtI,KAAK0sC,gBAAgBC,EAAU9oC,SAAS8Z,MACxC3d,KAAK6mB,WAAWmoB,cAAgBhvC,KAAKgvC,cACrChvC,KAAK6mB,WAAW+H,SAAW5uB,KAC3BA,KAAK6mB,WAAWkpB,UAAW,EAC3B/vC,KAAK6mB,WAAWof,gBAAkBjmC,KAAK8lC,aAAaG,gBACpDjmC,KAAK6mB,WAAWipB,gBAAkB9vC,KAAK8vC,gBACvC9vC,KAAK2zB,SAAWr1B,iBAAiBquC,EAASrzB,OAAOpb,QACjD8B,KAAK2tC,uBAGPhH,eAAelkC,UAAUkrC,oBAAsB,WAE7C,IAAIqC,EAAcC,EAYdC,EAAYC,EAEhB,GAfAnwC,KAAKuG,QAGDvG,KAAKklC,cAAc6B,SAAW/mC,KAAKklC,cAAc5gC,WACnD0rC,EAAehwC,KAAKklC,cAAc6B,QAAQnpB,YAC1CqyB,EAAgBjwC,KAAKklC,cAAc6B,QAAQqJ,aAC3CpwC,KAAKklC,cAAc5gC,UAAUga,aAAa,QAAS0xB,EAAehwC,KAAK8lC,aAAagB,KACpF9mC,KAAKklC,cAAc5gC,UAAUga,aAAa,SAAU2xB,EAAgBjwC,KAAK8lC,aAAagB,OAEtFkJ,EAAehwC,KAAKgvC,cAAc5X,OAAO1pB,MAAQ1N,KAAK8lC,aAAagB,IACnEmJ,EAAgBjwC,KAAKgvC,cAAc5X,OAAOC,OAASr3B,KAAK8lC,aAAagB,MAKR,IAA3D9mC,KAAK8lC,aAAaC,oBAAoB1hC,QAAQ,UAA8E,IAA5DrE,KAAK8lC,aAAaC,oBAAoB1hC,QAAQ,SAAiB,CACjI,IAAIgsC,EAAMrwC,KAAK8lC,aAAaC,oBAAoB5qB,MAAM,KAClDm1B,EAAWD,EAAI,IAAM,OACrBrmB,EAAMqmB,EAAI,IAAM,WAChBtS,EAAO/T,EAAI8X,OAAO,EAAG,GACrB9D,EAAOhU,EAAI8X,OAAO,GACtBoO,EAAaF,EAAeC,GAC5BE,EAAenwC,KAAK8vC,gBAAgBnzB,EAAI3c,KAAK8vC,gBAAgB5uC,GAE1CgvC,GAA2B,SAAbI,GAAuBH,EAAeD,GAA2B,UAAbI,GACnFtwC,KAAK8vC,gBAAgB5oC,GAAK8oC,GAAgBhwC,KAAK8vC,gBAAgBnzB,EAAI3c,KAAK8lC,aAAagB,KACrF9mC,KAAK8vC,gBAAgB3oC,GAAK6oC,GAAgBhwC,KAAK8vC,gBAAgBnzB,EAAI3c,KAAK8lC,aAAagB,OAErF9mC,KAAK8vC,gBAAgB5oC,GAAK+oC,GAAiBjwC,KAAK8vC,gBAAgB5uC,EAAIlB,KAAK8lC,aAAagB,KACtF9mC,KAAK8vC,gBAAgB3oC,GAAK8oC,GAAiBjwC,KAAK8vC,gBAAgB5uC,EAAIlB,KAAK8lC,aAAagB,MAItF9mC,KAAK8vC,gBAAgBznC,GADV,SAAT01B,IAAoBoS,EAAeD,GAA2B,SAAbI,GAAuBH,EAAeD,GAA2B,UAAbI,IAC5EN,EAAehwC,KAAK8vC,gBAAgBnzB,GAAKszB,EAAgBjwC,KAAK8vC,gBAAgB5uC,IAAM,EAAIlB,KAAK8lC,aAAagB,IACnH,SAAT/I,IAAoBoS,EAAeD,GAA2B,SAAbI,GAAuBH,EAAeD,GAA2B,UAAbI,IACnFN,EAAehwC,KAAK8vC,gBAAgBnzB,GAAKszB,EAAgBjwC,KAAK8vC,gBAAgB5uC,IAAMlB,KAAK8lC,aAAagB,IAEvG,EAI1B9mC,KAAK8vC,gBAAgBxnC,GADV,SAAT01B,IAAoBmS,EAAeD,GAA2B,SAAbI,GAAuBH,EAAeD,GAA2B,UAAbI,IAC5EL,EAAgBjwC,KAAK8vC,gBAAgB5uC,GAAK8uC,EAAehwC,KAAK8vC,gBAAgBnzB,IAAM,EAAI3c,KAAK8lC,aAAagB,IACnH,SAAT9I,IAAoBmS,EAAeD,GAA2B,SAAbI,GAAuBH,EAAeD,GAA2B,UAAbI,IACnFL,EAAgBjwC,KAAK8vC,gBAAgB5uC,GAAK8uC,EAAehwC,KAAK8vC,gBAAgBnzB,IAAM3c,KAAK8lC,aAAagB,IAEvG,MAEsB,QAAzC9mC,KAAK8lC,aAAaC,qBAC3B/lC,KAAK8vC,gBAAgB5oC,GAAK8oC,GAAgBhwC,KAAK8vC,gBAAgBnzB,EAAI3c,KAAK8lC,aAAagB,KACrF9mC,KAAK8vC,gBAAgB3oC,GAAK8oC,GAAiBjwC,KAAK8vC,gBAAgB5uC,EAAIlB,KAAK8lC,aAAagB,KACtF9mC,KAAK8vC,gBAAgBznC,GAAK,EAC1BrI,KAAK8vC,gBAAgBxnC,GAAK,IAE1BtI,KAAK8vC,gBAAgB5oC,GAAKlH,KAAK8lC,aAAagB,IAC5C9mC,KAAK8vC,gBAAgB3oC,GAAKnH,KAAK8lC,aAAagB,IAC5C9mC,KAAK8vC,gBAAgBznC,GAAK,EAC1BrI,KAAK8vC,gBAAgBxnC,GAAK,GAG5BtI,KAAK8vC,gBAAgBtpC,MAAQ,CAACxG,KAAK8vC,gBAAgB5oC,GAAI,EAAG,EAAG,EAAG,EAAGlH,KAAK8vC,gBAAgB3oC,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGnH,KAAK8vC,gBAAgBznC,GAAIrI,KAAK8vC,gBAAgBxnC,GAAI,EAAG,GAQnKtI,KAAK4uC,aAAa5uC,KAAK8vC,gBAAgBtpC,OACvCxG,KAAKgvC,cAAcuB,YACnBvwC,KAAKgvC,cAAcpH,KAAK,EAAG,EAAG5nC,KAAK8vC,gBAAgBnzB,EAAG3c,KAAK8vC,gBAAgB5uC,GAC3ElB,KAAKgvC,cAAcwB,YACnBxwC,KAAKgvC,cAAcyB,OACnBzwC,KAAK+tC,YAAY/tC,KAAKomB,eAAe,IAGvCugB,eAAelkC,UAAUi2B,QAAU,WAKjC,IAAI36B,EAGJ,IAPIiC,KAAK8lC,aAAac,cACpB5mC,KAAKklC,cAAc6B,QAAQ3pB,UAAY,IAMpCrf,GAFKiC,KAAKsZ,OAAStZ,KAAKsZ,OAAOpb,OAAS,GAE9B,EAAGH,GAAK,EAAGA,GAAK,EACzBiC,KAAK2zB,SAAS51B,IAChBiC,KAAK2zB,SAAS51B,GAAG26B,UAIrB14B,KAAK2zB,SAASz1B,OAAS,EACvB8B,KAAK6mB,WAAWmoB,cAAgB,KAChChvC,KAAKklC,cAAc5gC,UAAY,KAC/BtE,KAAKymC,WAAY,GAGnBE,eAAelkC,UAAUsrC,YAAc,SAAUrD,EAAK3hB,GACpD,IAAI/oB,KAAKomB,gBAAkBskB,IAAyC,IAAlC1qC,KAAK8lC,aAAac,aAAyB7d,KAAe/oB,KAAKymC,YAAsB,IAATiE,EAA9G,CAIA1qC,KAAKomB,cAAgBskB,EACrB1qC,KAAK6mB,WAAW1E,SAAWuoB,EAAM1qC,KAAKklC,cAAcje,cACpDjnB,KAAK6mB,WAAWC,SAAW,EAC3B9mB,KAAK6mB,WAAWpiB,MAAQzE,KAAK8lC,aAAac,aAAe7d,EACzD/oB,KAAK6mB,WAAWilB,iBAAiBkC,aAAetD,EAGhD,IAAI3sC,EACAE,EAAM+B,KAAKsZ,OAAOpb,OAMtB,IAJK8B,KAAKqZ,gBACRrZ,KAAKyqC,YAAYC,GAGd3sC,EAAI,EAAGA,EAAIE,EAAKF,KACfiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,KACvCiC,KAAK2zB,SAAS51B,GAAGkwC,aAAavD,EAAM1qC,KAAKsZ,OAAOvb,GAAG2pB,IAIvD,GAAI1nB,KAAK6mB,WAAWpiB,KAAM,CAOxB,KANsC,IAAlCzE,KAAK8lC,aAAac,YACpB5mC,KAAKgvC,cAAc0B,UAAU,EAAG,EAAG1wC,KAAK8vC,gBAAgBnzB,EAAG3c,KAAK8vC,gBAAgB5uC,GAEhFlB,KAAKqvC,OAGFtxC,EAAIE,EAAM,EAAGF,GAAK,EAAGA,GAAK,GACzBiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,KACvCiC,KAAK2zB,SAAS51B,GAAGgwC,eAIiB,IAAlC/tC,KAAK8lC,aAAac,aACpB5mC,KAAKovC,aAKXzI,eAAelkC,UAAUmoC,UAAY,SAAU5gB,GAC7C,IAAI2J,EAAW3zB,KAAK2zB,SAEpB,IAAIA,EAAS3J,IAA+B,IAAvBhqB,KAAKsZ,OAAO0Q,GAAK1hB,GAAtC,CAIA,IAAIxJ,EAAUkB,KAAK8qC,WAAW9qC,KAAKsZ,OAAO0Q,GAAMhqB,KAAMA,KAAK6mB,YAC3D8M,EAAS3J,GAAOlrB,EAChBA,EAAQ0tC,oBAMV7F,eAAelkC,UAAUooC,qBAAuB,WAC9C,KAAO7qC,KAAKwmC,gBAAgBtoC,QAAQ,CACpB8B,KAAKwmC,gBAAgBtV,MAC3B4c,mBAIZnH,eAAelkC,UAAU4rC,KAAO,WAC9BruC,KAAKklC,cAAc5gC,UAAUvF,MAAMI,QAAU,QAG/CwnC,eAAelkC,UAAU6rC,KAAO,WAC9BtuC,KAAKklC,cAAc5gC,UAAUvF,MAAMI,QAAU,SAgC/CyT,gBAAgB,CAACoyB,cAAeqC,gBAChCA,eAAe5kC,UAAUmoC,UAAY3F,YAAYxiC,UAAUmoC,UAE3DvD,eAAe5kC,UAAUooC,qBAAuB,WAC9C,KAAO7qC,KAAKwmC,gBAAgBtoC,QAAQ,CACpB8B,KAAKwmC,gBAAgBtV,MAC3B4c,mBAIZzG,eAAe5kC,UAAUmrC,mBAAqB,SAAU9uC,EAASkrB,GAC/D,IAAI2mB,EAAgB7xC,EAAQovC,iBAE5B,GAAKyC,EAAL,CAIA,IAAI5F,EAAQ/qC,KAAKsZ,OAAO0Q,GAExB,GAAK+gB,EAAM6F,KAAQ5wC,KAAKwnC,WA4BtBxnC,KAAK6wC,iBAAiBF,EAAe3mB,QA3BrC,GAAIhqB,KAAKsnC,eACPtnC,KAAK6wC,iBAAiBF,EAAe3mB,OAChC,CAIL,IAHA,IACI8mB,EAAgBC,EADhBhzC,EAAI,EAGDA,EAAIisB,GACLhqB,KAAK2zB,SAAS51B,KAA2B,IAArBiC,KAAK2zB,SAAS51B,IAAeiC,KAAK2zB,SAAS51B,GAAGmwC,iBACpE6C,EAAY/wC,KAAK2zB,SAAS51B,GAE1B+yC,GADgB9wC,KAAKsZ,OAAOvb,GAAG6yC,IAAM5wC,KAAKgxC,wBAAwBjzC,GAAKgzC,EAAU7C,mBAC/C4C,GAGpC/yC,GAAK,EAGH+yC,EACG/F,EAAM6F,KAAQ5wC,KAAKwnC,YACtBxnC,KAAK6lC,aAAauI,aAAauC,EAAeG,GAG3C/F,EAAM6F,KAAQ5wC,KAAKwnC,YACtBxnC,KAAK6lC,aAAanoB,YAAYizB,MASxCtJ,eAAe5kC,UAAU2oC,YAAc,SAAUrvB,GAC/C,OAAK/b,KAAKwnC,WAIH,IAAIyJ,cAAcl1B,EAAM/b,KAAK6mB,WAAY7mB,MAHvC,IAAIotC,gBAAgBrxB,EAAM/b,KAAK6mB,WAAY7mB,OAMtDqnC,eAAe5kC,UAAU4oC,WAAa,SAAUtvB,GAC9C,OAAK/b,KAAKwnC,WAIH,IAAI0J,aAAan1B,EAAM/b,KAAK6mB,WAAY7mB,MAHtC,IAAIqtC,eAAetxB,EAAM/b,KAAK6mB,WAAY7mB,OAMrDqnC,eAAe5kC,UAAU6oC,aAAe,SAAUvvB,GAEhD,OADA/b,KAAKunC,OAAS,IAAI4J,eAAep1B,EAAM/b,KAAK6mB,WAAY7mB,MACjDA,KAAKunC,QAGdF,eAAe5kC,UAAUuoC,YAAc,SAAUjvB,GAC/C,OAAK/b,KAAKwnC,WAIH,IAAI4J,cAAcr1B,EAAM/b,KAAK6mB,WAAY7mB,MAHvC,IAAIstC,cAAcvxB,EAAM/b,KAAK6mB,WAAY7mB,OAMpDqnC,eAAe5kC,UAAUwoC,WAAa,SAAUlvB,GAC9C,OAAK/b,KAAKwnC,WAIH,IAAI6J,aAAat1B,EAAM/b,KAAK6mB,WAAY7mB,MAHtC,IAAIutC,eAAexxB,EAAM/b,KAAK6mB,WAAY7mB,OAMrDqnC,eAAe5kC,UAAUyoC,YAAc,SAAUnvB,GAC/C,OAAK/b,KAAKwnC,WAIH,IAAI8J,cAAcv1B,EAAM/b,KAAK6mB,WAAY7mB,MAHvC,IAAIwtC,cAAczxB,EAAM/b,KAAK6mB,WAAY7mB,OAMpDqnC,eAAe5kC,UAAU0oC,WAAalG,YAAYxiC,UAAU0oC,WAE5D9D,eAAe5kC,UAAUuuC,wBAA0B,SAAUhnB,GAI3D,IAHA,IAAIjsB,EAAI,EACJE,EAAM+B,KAAKsnC,eAAeppC,OAEvBH,EAAIE,GAAK,CACd,GAAI+B,KAAKsnC,eAAevpC,GAAGwzC,UAAYvnB,GAAOhqB,KAAKsnC,eAAevpC,GAAGyzC,QAAUxnB,EAC7E,OAAOhqB,KAAKsnC,eAAevpC,GAAG0zC,gBAGhC1zC,GAAK,IAITspC,eAAe5kC,UAAUivC,sBAAwB,SAAU1nB,EAAKpqB,GAC9D,IAAI6xC,EAAkB1tC,UAAU,OAChClF,SAAS4yC,GACT,IAAIntC,EAAYP,UAAU,OAC1BlF,SAASyF,GAEI,OAAT1E,IACF6xC,EAAgB1yC,MAAM2O,MAAQ1N,KAAK6mB,WAAWqmB,SAASvwB,EAAI,KAC3D80B,EAAgB1yC,MAAMs4B,OAASr3B,KAAK6mB,WAAWqmB,SAAShsC,EAAI,KAC5DuwC,EAAgB1yC,MAAMK,gBAAkBqyC,EAAgB1yC,MAAM8wC,mBAAqB4B,EAAgB1yC,MAAMM,sBAAwB,UACjIiF,EAAUvF,MAAMyJ,UAAYlE,EAAUvF,MAAM4yC,gBAAkB,6CAGhEF,EAAgB/zB,YAAYpZ,GAE5B,IAAIstC,EAAsB,CACxBttC,UAAWA,EACXmtC,gBAAiBA,EACjBF,SAAUvnB,EACVwnB,OAAQxnB,EACRpqB,KAAMA,GAGR,OADAI,KAAKsnC,eAAetkC,KAAK4uC,GAClBA,GAGTvK,eAAe5kC,UAAUovC,kBAAoB,WAC3C,IAAI9zC,EAEA+zC,EADA7zC,EAAM+B,KAAKsZ,OAAOpb,OAElB6zC,EAAmB,GAEvB,IAAKh0C,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpBiC,KAAKsZ,OAAOvb,GAAG6yC,KAA6B,IAAtB5wC,KAAKsZ,OAAOvb,GAAGuK,IACd,OAArBypC,IACFA,EAAmB,KACnBD,EAA0B9xC,KAAK0xC,sBAAsB3zC,EAAG,OAG1D+zC,EAAwBN,OAAS30C,KAAKY,IAAIq0C,EAAwBN,OAAQzzC,KAEjD,OAArBg0C,IACFA,EAAmB,KACnBD,EAA0B9xC,KAAK0xC,sBAAsB3zC,EAAG,OAG1D+zC,EAAwBN,OAAS30C,KAAKY,IAAIq0C,EAAwBN,OAAQzzC,IAM9E,IAAKA,GAFLE,EAAM+B,KAAKsnC,eAAeppC,QAEX,EAAGH,GAAK,EAAGA,IACxBiC,KAAKgyC,YAAYt0B,YAAY1d,KAAKsnC,eAAevpC,GAAG0zC,kBAIxDpK,eAAe5kC,UAAUouC,iBAAmB,SAAUjqB,EAAMoD,GAI1D,IAHA,IAAIjsB,EAAI,EACJE,EAAM+B,KAAKsnC,eAAeppC,OAEvBH,EAAIE,GAAK,CACd,GAAI+rB,GAAOhqB,KAAKsnC,eAAevpC,GAAGyzC,OAAQ,CAIxC,IAHA,IACIrD,EADArmC,EAAI9H,KAAKsnC,eAAevpC,GAAGwzC,SAGxBzpC,EAAIkiB,GACLhqB,KAAK2zB,SAAS7rB,IAAM9H,KAAK2zB,SAAS7rB,GAAGomC,iBACvCC,EAAcnuC,KAAK2zB,SAAS7rB,GAAGomC,kBAGjCpmC,GAAK,EAGHqmC,EACFnuC,KAAKsnC,eAAevpC,GAAGuG,UAAU8pC,aAAaxnB,EAAMunB,GAEpDnuC,KAAKsnC,eAAevpC,GAAGuG,UAAUoZ,YAAYkJ,GAG/C,MAGF7oB,GAAK,IAITspC,eAAe5kC,UAAUgrC,gBAAkB,SAAUd,GACnD,IAAIqF,EAAcjuC,UAAU,OACxBgjC,EAAU/mC,KAAKklC,cAAc6B,QACjCiL,EAAYjzC,MAAM2O,MAAQi/B,EAAShwB,EAAI,KACvCq1B,EAAYjzC,MAAMs4B,OAASsV,EAASzrC,EAAI,KACxClB,KAAKgyC,YAAcA,EACnBnzC,SAASmzC,GACTA,EAAYjzC,MAAMS,eAAiBwyC,EAAYjzC,MAAMU,qBAAuBuyC,EAAYjzC,MAAMW,kBAAoB,OAE9GM,KAAK8lC,aAAaO,WACpB2L,EAAY1zB,aAAa,QAASte,KAAK8lC,aAAaO,WAGtDU,EAAQrpB,YAAYs0B,GACpBA,EAAYjzC,MAAMqO,SAAW,SAC7B,IAAI6kC,EAAMruC,SAAS,OACnBquC,EAAI3zB,aAAa,QAAS,KAC1B2zB,EAAI3zB,aAAa,SAAU,KAC3Bzf,SAASozC,GACTjyC,KAAKgyC,YAAYt0B,YAAYu0B,GAC7B,IAAIpyB,EAAOjc,SAAS,QACpBquC,EAAIv0B,YAAYmC,GAChB7f,KAAK+b,KAAO4wB,EAEZ3sC,KAAK0sC,gBAAgBC,EAAUsF,GAC/BjyC,KAAK6mB,WAAWhH,KAAOA,EACvB7f,KAAKsZ,OAASqzB,EAASrzB,OACvBtZ,KAAK6lC,aAAe7lC,KAAKgyC,YACzBhyC,KAAK6xC,oBACL7xC,KAAK2tC,uBAGPtG,eAAe5kC,UAAUi2B,QAAU,WACjC14B,KAAKklC,cAAc6B,QAAQ3pB,UAAY,GACvCpd,KAAKklC,cAAc5gC,UAAY,KAC/BtE,KAAK6mB,WAAWhH,KAAO,KACvB,IAAI9hB,EACAE,EAAM+B,KAAKsZ,OAAStZ,KAAKsZ,OAAOpb,OAAS,EAE7C,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,IACnBiC,KAAK2zB,SAAS51B,GAAG26B,UAGnB14B,KAAK2zB,SAASz1B,OAAS,EACvB8B,KAAKymC,WAAY,EACjBzmC,KAAKklC,cAAgB,MAGvBmC,eAAe5kC,UAAUkrC,oBAAsB,WAC7C,IAIIzmC,EAAIC,EAAIkB,EAAIC,EAJZ0nC,EAAehwC,KAAKklC,cAAc6B,QAAQnpB,YAC1CqyB,EAAgBjwC,KAAKklC,cAAc6B,QAAQqJ,aAC3CF,EAAaF,EAAeC,EACbjwC,KAAK6mB,WAAWqmB,SAASvwB,EAAI3c,KAAK6mB,WAAWqmB,SAAShsC,EAGtDgvC,GACjBhpC,EAAK8oC,EAAehwC,KAAK6mB,WAAWqmB,SAASvwB,EAC7CxV,EAAK6oC,EAAehwC,KAAK6mB,WAAWqmB,SAASvwB,EAC7CtU,EAAK,EACLC,GAAM2nC,EAAgBjwC,KAAK6mB,WAAWqmB,SAAShsC,GAAK8uC,EAAehwC,KAAK6mB,WAAWqmB,SAASvwB,IAAM,IAElGzV,EAAK+oC,EAAgBjwC,KAAK6mB,WAAWqmB,SAAShsC,EAC9CiG,EAAK8oC,EAAgBjwC,KAAK6mB,WAAWqmB,SAAShsC,EAC9CmH,GAAM2nC,EAAehwC,KAAK6mB,WAAWqmB,SAASvwB,GAAKszB,EAAgBjwC,KAAK6mB,WAAWqmB,SAAShsC,IAAM,EAClGoH,EAAK,GAGPtI,KAAKgyC,YAAYjzC,MAAMyJ,UAAYxI,KAAKgyC,YAAYjzC,MAAM4yC,gBAAkB,YAAczqC,EAAK,YAAcC,EAAK,gBAAkBkB,EAAK,IAAMC,EAAK,SAGtJ++B,eAAe5kC,UAAUsrC,YAAc9I,YAAYxiC,UAAUsrC,YAE7D1G,eAAe5kC,UAAU4rC,KAAO,WAC9BruC,KAAKgyC,YAAYjzC,MAAMI,QAAU,QAGnCkoC,eAAe5kC,UAAU6rC,KAAO,WAC9BtuC,KAAKgyC,YAAYjzC,MAAMI,QAAU,SAGnCkoC,eAAe5kC,UAAUspC,UAAY,WAGnC,GAFA/rC,KAAKyrC,gBAEDzrC,KAAKunC,OACPvnC,KAAKunC,OAAO2K,YACP,CACL,IAEIn0C,EAFAo0C,EAASnyC,KAAK6mB,WAAWqmB,SAASvwB,EAClCy1B,EAAUpyC,KAAK6mB,WAAWqmB,SAAShsC,EAEnCjD,EAAM+B,KAAKsnC,eAAeppC,OAE9B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKsnC,eAAevpC,GAAG0zC,gBAAgB1yC,MAAMszC,YAAcryC,KAAKsnC,eAAevpC,GAAG0zC,gBAAgB1yC,MAAMuzC,kBAAoBz1C,KAAKM,KAAKN,KAAKI,IAAIk1C,EAAQ,GAAKt1C,KAAKI,IAAIm1C,EAAS,IAAM,OAK1L/K,eAAe5kC,UAAU6pC,wBAA0B,SAAU5wB,GAC3D,IAAI3d,EACAE,EAAMyd,EAAOxd,OACbq0C,EAAoBxuC,UAAU,OAElC,IAAKhG,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,GAAI2d,EAAO3d,GAAGwuC,GAAI,CAChB,IAAIpmB,EAAOnmB,KAAKirC,WAAWvvB,EAAO3d,GAAIw0C,EAAmBvyC,KAAK6mB,WAAWV,KAAM,MAC/EA,EAAKqmB,kBACLxsC,KAAK6mB,WAAWilB,iBAAiBW,oBAAoBtmB,KAoJ3DshB,YAAYhlC,UAAUo7B,gBAAkB,SAAU7T,GAChD,OAAOhqB,KAAK0nC,SAAS1d,GAAK7lB,MAG5BsjC,YAAYhlC,UAAUsrC,YAAc,SAAUyE,GAC5C,IACIz0C,EADA00C,EAAWzyC,KAAKlB,QAAQ4zC,eAAe5pB,IAEvC7qB,EAAM+B,KAAKia,gBAAgB/b,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,IASnB,IARIiC,KAAK0nC,SAAS3pC,GAAGoG,KAAKM,MAAQ+tC,IAChCxyC,KAAK4oC,SAAS5oC,KAAKia,gBAAgBlc,GAAIiC,KAAK0nC,SAAS3pC,GAAGoG,KAAK/C,EAAGpB,KAAK0nC,SAAS3pC,KAG5EiC,KAAK0nC,SAAS3pC,GAAGi3B,GAAGvwB,MAAQ+tC,IAC9BxyC,KAAK0nC,SAAS3pC,GAAG6oB,KAAKtI,aAAa,eAAgBte,KAAK0nC,SAAS3pC,GAAGi3B,GAAG5zB,GAGpC,MAAjCpB,KAAKia,gBAAgBlc,GAAG+H,OACtB9F,KAAK0nC,SAAS3pC,GAAG4qC,UAAY3oC,KAAKlB,QAAQ4zC,eAAeC,MAAMluC,MAAQ+tC,IACzExyC,KAAK0nC,SAAS3pC,GAAG4qC,QAAQrqB,aAAa,YAAam0B,EAASjnC,mBAAmBsB,WAG7E9M,KAAKoV,WAAWrX,GAAGmN,IAAMlL,KAAKoV,WAAWrX,GAAGmN,EAAEzG,MAAQ+tC,IAAe,CACvE,IAAI1K,EAAU9nC,KAAKoV,WAAWrX,GAAGqqC,MAE7BpoC,KAAKoV,WAAWrX,GAAGmN,EAAE9J,EAAI,GACa,UAApCpB,KAAKoV,WAAWrX,GAAGuqC,eACrBtoC,KAAKoV,WAAWrX,GAAGuqC,aAAe,QAClCtoC,KAAKoV,WAAWrX,GAAG6oB,KAAKtI,aAAa,SAAU,OAASliB,aAAe,IAAM4D,KAAKoV,WAAWrX,GAAGwqC,SAAW,MAG7GT,EAAQxpB,aAAa,UAAWte,KAAKoV,WAAWrX,GAAGmN,EAAE9J,KAEb,WAApCpB,KAAKoV,WAAWrX,GAAGuqC,eACrBtoC,KAAKoV,WAAWrX,GAAGuqC,aAAe,SAClCtoC,KAAKoV,WAAWrX,GAAG6oB,KAAKtI,aAAa,SAAU,OAGjDte,KAAKoV,WAAWrX,GAAG6oB,KAAKtI,aAAa,eAAyC,EAAzBte,KAAKoV,WAAWrX,GAAGmN,EAAE9J,MAOpFqmC,YAAYhlC,UAAUmwC,eAAiB,WACrC,OAAO5yC,KAAK4lC,aAGd6B,YAAYhlC,UAAUgmC,qBAAuB,WAC3C,IAAI3tB,EAAO,QAKX,OAJAA,GAAQ,KAAO9a,KAAK6mB,WAAWqmB,SAASvwB,EACxC7B,GAAQ,KAAO9a,KAAK6mB,WAAWqmB,SAAShsC,EACxC4Z,GAAQ,MAAQ9a,KAAK6mB,WAAWqmB,SAASvwB,EACzC7B,GAAQ,MAAQ9a,KAAK6mB,WAAWqmB,SAAShsC,EAAI,KAI/CumC,YAAYhlC,UAAUmmC,SAAW,SAAU/sB,EAAUsZ,EAAWuS,GAC9D,IACI3pC,EAAGE,EADH40C,EAAa,KAAO1d,EAAU/zB,EAAE,GAAG,GAAK,IAAM+zB,EAAU/zB,EAAE,GAAG,GAIjE,IAFAnD,EAAMk3B,EAAU7e,QAEXvY,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAExB80C,GAAc,KAAO1d,EAAUhtB,EAAEpK,EAAI,GAAG,GAAK,IAAMo3B,EAAUhtB,EAAEpK,EAAI,GAAG,GAAK,IAAMo3B,EAAUp3B,EAAEA,GAAG,GAAK,IAAMo3B,EAAUp3B,EAAEA,GAAG,GAAK,IAAMo3B,EAAU/zB,EAAErD,GAAG,GAAK,IAAMo3B,EAAU/zB,EAAErD,GAAG,GAShL,GALIo3B,EAAUvtB,GAAK3J,EAAM,IACvB40C,GAAc,KAAO1d,EAAUhtB,EAAEpK,EAAI,GAAG,GAAK,IAAMo3B,EAAUhtB,EAAEpK,EAAI,GAAG,GAAK,IAAMo3B,EAAUp3B,EAAE,GAAG,GAAK,IAAMo3B,EAAUp3B,EAAE,GAAG,GAAK,IAAMo3B,EAAU/zB,EAAE,GAAG,GAAK,IAAM+zB,EAAU/zB,EAAE,GAAG,IAI5KsmC,EAASW,WAAawK,EAAY,CACpC,IAAIC,EAAiB,GAEjBpL,EAAS9gB,OACPuO,EAAUvtB,IACZkrC,EAAiBj3B,EAASqX,IAAMlzB,KAAK2nC,UAAYkL,EAAaA,GAGhEnL,EAAS9gB,KAAKtI,aAAa,IAAKw0B,IAGlCpL,EAASW,SAAWwK,IAIxBpL,YAAYhlC,UAAUi2B,QAAU,WAC9B14B,KAAKlB,QAAU,KACfkB,KAAK6mB,WAAa,KAClB7mB,KAAK4lC,YAAc,KACnB5lC,KAAK+b,KAAO,KACZ/b,KAAKia,gBAAkB,MAWzB8uB,iBAAiBtmC,UAAY,CAM3BswC,cAAe,WAEb/yC,KAAKksC,UAAY,GAEjBlsC,KAAKgzC,WAAY,EACjBhzC,KAAK8tC,kBAUP1B,aAAc,SAAsBF,GAClClsC,KAAKksC,UAAYA,GAQnBC,YAAa,WACXnsC,KAAKgzC,WAAY,GAQnBlF,eAAgB,gBACWvK,IAArBvjC,KAAK+b,KAAKkC,QACZje,KAAKmmB,KAAK6lB,sBAAsBhsC,KAAMA,KAAK+b,KAAKkC,OAAQ,MAa9D+qB,aAAavmC,UAAY,CAMvBuf,UAAW,WAEThiB,KAAKinB,eAAgB,EAErBjnB,KAAKoE,kBAAoB,GAEzBpE,KAAKyE,MAAO,GAadwuC,kBAAmB,SAA2BvI,EAAKwI,GACjD,IAAIn1C,EACAE,EAAM+B,KAAKoE,kBAAkBlG,OAEjC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACpBm1C,GAAalzC,KAAKgzC,WAAoD,cAAvChzC,KAAKoE,kBAAkBrG,GAAGwkB,YAC3DviB,KAAKoE,kBAAkBrG,GAAG2G,WAEtB1E,KAAKoE,kBAAkBrG,GAAG0G,OAC5BzE,KAAK6mB,WAAWpiB,MAAO,EACvBzE,KAAKyE,MAAO,KAKpBP,mBAAoB,SAA4BC,IACA,IAA1CnE,KAAKoE,kBAAkBC,QAAQF,IACjCnE,KAAKoE,kBAAkBpB,KAAKmB,KAOlC8kC,iBAAiBxmC,UAAY,CAC3B0wC,cAAe,WACbnzC,KAAK0yC,eAAiB,CACpBC,MAAO3yC,KAAK+b,KAAKnB,GAAKkN,yBAAyB0B,qBAAqBxpB,KAAMA,KAAK+b,KAAKnB,GAAI5a,MAAQ,CAC9FmI,EAAG,GAELirC,SAAS,EACTC,QAAQ,EACRvqB,IAAK,IAAI/iB,QAGP/F,KAAK+b,KAAKu3B,KACZtzC,KAAK0yC,eAAeC,MAAM1pB,cAAe,GAIvCjpB,KAAK+b,KAAKzT,IAGhBirC,gBAAiB,WAIf,GAHAvzC,KAAK0yC,eAAeW,OAASrzC,KAAK0yC,eAAeC,MAAMxqC,EAAE1D,MAAQzE,KAAKinB,cACtEjnB,KAAK0yC,eAAeU,QAAUpzC,KAAK0yC,eAAeC,MAAMluC,MAAQzE,KAAKinB,cAEjEjnB,KAAKksC,UAAW,CAClB,IAAIpjB,EACA2pB,EAAWzyC,KAAK0yC,eAAe5pB,IAC/B/qB,EAAI,EACJE,EAAM+B,KAAKksC,UAAUhuC,OAEzB,IAAK8B,KAAK0yC,eAAeU,QACvB,KAAOr1C,EAAIE,GAAK,CACd,GAAI+B,KAAKksC,UAAUnuC,GAAG20C,eAAeC,MAAMluC,KAAM,CAC/CzE,KAAK0yC,eAAeU,SAAU,EAC9B,MAGFr1C,GAAK,EAIT,GAAIiC,KAAK0yC,eAAeU,QAItB,IAHAtqB,EAAM9oB,KAAK0yC,eAAeC,MAAMvxC,EAAEoF,MAClCisC,EAASznC,eAAe8d,GAEnB/qB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB+qB,EAAM9oB,KAAKksC,UAAUnuC,GAAG20C,eAAeC,MAAMvxC,EAAEoF,MAC/CisC,EAASjqC,UAAUsgB,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAKA,EAAI,IAAKA,EAAI,IAAKA,EAAI,IAAKA,EAAI,IAAKA,EAAI,OAK5J0qB,cAAe,SAAuB5nC,GACpC,IAAI6nC,EAAa,GACjBA,EAAWzwC,KAAKhD,KAAK0yC,gBAIrB,IAHA,IAAI9zC,GAAO,EACPunB,EAAOnmB,KAAKmmB,KAETvnB,GACDunB,EAAKusB,gBACHvsB,EAAKpK,KAAKhC,SACZ05B,EAAWtwC,OAAO,EAAG,EAAGgjB,EAAKusB,gBAG/BvsB,EAAOA,EAAKA,MAEZvnB,GAAO,EAIX,IAAIb,EAEA21C,EADAz1C,EAAMw1C,EAAWv1C,OAGrB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB21C,EAAQD,EAAW11C,GAAG+qB,IAAIjd,kBAAkB,EAAG,EAAG,GAElDD,EAAK,CAACA,EAAG,GAAK8nC,EAAM,GAAI9nC,EAAG,GAAK8nC,EAAM,GAAI,GAG5C,OAAO9nC,GAET+yB,QAAS,IAAI54B,QAKfmjC,kBAAkBzmC,UAAY,CAC5BkxC,eAAgB,WAEd3zC,KAAK4zC,WAAY,EAEjB5zC,KAAK6zC,QAAS,EAEd7zC,KAAK8zC,eAAgB,EAErB9zC,KAAK+zC,qBAAuB,IAE9BjL,uBAAwB,SAAgCkL,IACA,IAAlDh0C,KAAK+zC,qBAAqB1vC,QAAQ2vC,IACpCh0C,KAAK+zC,qBAAqB/wC,KAAKgxC,IAGnCC,0BAA2B,SAAmCD,IACN,IAAlDh0C,KAAK+zC,qBAAqB1vC,QAAQ2vC,IACpCh0C,KAAK+zC,qBAAqB5wC,OAAOnD,KAAK+zC,qBAAqB1vC,QAAQ2vC,GAAY,IAGnFE,uBAAwB,SAAgCxJ,GACtD1qC,KAAKm0C,iBAAiBzJ,IAExB0J,kBAAmB,WACbp0C,KAAK0yC,eAAeC,MAAMxqC,EAAE/G,GAAK,GAC9BpB,KAAK8zC,eAAiB9zC,KAAK6mB,WAAWif,aAAaI,oBACtDlmC,KAAK8zC,eAAgB,EACrB9zC,KAAKquC,QAEEruC,KAAK8zC,gBACd9zC,KAAK8zC,eAAgB,EACrB9zC,KAAKsuC,SAYT6F,iBAAkB,SAA0BzJ,GACtC1qC,KAAK+b,KAAK4uB,GAAK3qC,KAAK+b,KAAK2L,IAAMgjB,GAAO1qC,KAAK+b,KAAKiZ,GAAKh1B,KAAK+b,KAAK2L,GAAKgjB,GAC/C,IAAnB1qC,KAAK4zC,YACP5zC,KAAK6mB,WAAWpiB,MAAO,EACvBzE,KAAKyE,MAAO,EACZzE,KAAK4zC,WAAY,EACjB5zC,KAAKsuC,SAGgB,IAAnBtuC,KAAK4zC,YACP5zC,KAAK6mB,WAAWpiB,MAAO,EACvBzE,KAAK4zC,WAAY,EACjB5zC,KAAKquC,SAIXgG,iBAAkB,WAChB,IAAIt2C,EACAE,EAAM+B,KAAK+zC,qBAAqB71C,OAEpC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK+zC,qBAAqBh2C,GAAGgwC,YAAY/tC,KAAKinB,gBAMlDqtB,iBAAkB,WAChB,MAAO,CACLr1C,IAAK,EACLC,KAAM,EACNwO,MAAO,IACP2pB,OAAQ,MAGZkd,aAAc,WACZ,OAAqB,IAAjBv0C,KAAK+b,KAAKzT,GACL,CACLqU,EAAG3c,KAAK+b,KAAK2e,SAAShtB,MACtBxM,EAAGlB,KAAK+b,KAAK2e,SAASrD,QAGjB,CACL1a,EAAG3c,KAAK+b,KAAKrO,MACbxM,EAAGlB,KAAK+b,KAAKsb,UAoEnBzkB,gBAAgB,CAACs2B,kBAAmB51B,oBA3DnB,CACfkhC,YAAa,SAAqBz4B,EAAM8K,EAAYV,GAClDnmB,KAAKgiB,YACLhiB,KAAKy0C,aAAa14B,EAAM8K,EAAYV,GACpCnmB,KAAKmzC,cAAcp3B,EAAM8K,EAAYV,GACrCnmB,KAAK+yC,gBACL/yC,KAAK2zC,iBACL3zC,KAAK00C,sBACL10C,KAAK20C,0BACL30C,KAAK40C,6BACL50C,KAAK60C,gBACL70C,KAAKquC,QAEPA,KAAM,WACCruC,KAAK6zC,QAAY7zC,KAAK4zC,YAAa5zC,KAAK8zC,iBAChC9zC,KAAK80C,aAAe90C,KAAK6lC,cAC/B9mC,MAAMI,QAAU,OACrBa,KAAK6zC,QAAS,IAGlBvF,KAAM,WACAtuC,KAAK4zC,YAAc5zC,KAAK8zC,gBACrB9zC,KAAK+b,KAAKytB,MACFxpC,KAAK80C,aAAe90C,KAAK6lC,cAC/B9mC,MAAMI,QAAU,SAGvBa,KAAK6zC,QAAS,EACd7zC,KAAKinB,eAAgB,IAGzB8mB,YAAa,WAGP/tC,KAAK+b,KAAKytB,IAAMxpC,KAAK6zC,SAIzB7zC,KAAKuzC,kBACLvzC,KAAKq0C,mBACLr0C,KAAK+0C,gBACL/0C,KAAKg1C,qBAEDh1C,KAAKinB,gBACPjnB,KAAKinB,eAAgB,KAGzB+tB,mBAAoB,aACpB/G,aAAc,SAAsBvD,GAClC1qC,KAAKyE,MAAO,EACZzE,KAAKk0C,uBAAuBxJ,GAC5B1qC,KAAKizC,kBAAkBvI,EAAK1qC,KAAK4zC,WACjC5zC,KAAKo0C,qBAEP1b,QAAS,WACP14B,KAAKi1C,UAAY,KACjBj1C,KAAKk1C,yBAG6D/L,sBAmBxEE,aAAa5mC,UAAU8D,MAAQ,WAC7BvG,KAAK6B,EAAI,GACT7B,KAAKyE,MAAO,GA4BdklC,aAAalnC,UAAUktB,cAAgB,WACrC3vB,KAAKuE,aAAc,GAwBrBqO,gBAAgB,CAAC3O,0BAA2B+lC,oBAU5Cp3B,gBAAgB,CAAC3O,0BAA2BimC,kBAQ5CC,yBAAyB1nC,UAAU2nC,iBAAmB,SAAUxjB,EAAM7K,EAAMkuB,GAC1EjqC,KAAKmI,EAAI4Z,gBAAgB8F,QAAQjB,EAAM7K,EAAK5T,EAAG,EAAG,IAAMnI,MACxDA,KAAKmB,EAAI4gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK5a,EAAG,EAAG,KAAMnB,MACxDA,KAAK6H,EAAIka,gBAAgB8F,QAAQjB,EAAM7K,EAAKlU,EAAG,EAAG,KAAM7H,MACxDA,KAAKkB,EAAI6gB,gBAAgB8F,QAAQjB,EAAM7K,EAAK7a,GAAK,CAC/C6G,EAAG,GACF,EAAG,IAAM/H,MACZA,KAAK2H,EAAIoa,gBAAgB8F,QAAQjB,EAAM7K,EAAKpU,GAAK,CAC/CI,EAAG,GACF,EAAGvJ,UAAWwB,MACjBA,KAAKsB,EAAI,IAAI2tB,iBAAiBrI,EAAM7K,EAAKza,EAAGtB,MAC5CA,KAAKjB,MAAQkrC,EACbjqC,KAAKm1C,MAAQ,GACbn1C,KAAKo1C,gBAAgBnL,EAAQR,MAAO1tB,GACpC/b,KAAKq1C,mBAAmBt5B,EAAMkuB,GAC9BjqC,KAAKuE,cAAgBvE,KAAKuE,aAG5B4lC,yBAAyB1nC,UAAU2yC,gBAAkB,SAAUE,EAAav5B,GAC1E,IAAIw5B,EAAax0C,kBACby0C,EAAQ5xC,SAAoB,IAAXmY,EAAKpa,EAAU,iBAAmB,kBACvD6zC,EAAMl3B,aAAa,KAAMi3B,GACzBC,EAAMl3B,aAAa,eAAgB,OACnCk3B,EAAMl3B,aAAa,gBAAiB,kBACpC,IACIm3B,EAAM3tC,EAAG4R,EADTy7B,EAAQ,GAIZ,IAFAz7B,EAAkB,EAAXqC,EAAKza,EAAEG,EAETqG,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB2tC,EAAO7xC,SAAS,QAChB4xC,EAAM93B,YAAY+3B,GAClBN,EAAMnyC,KAAKyyC,GAGbH,EAAYh3B,aAAyB,OAAZvC,EAAKzT,GAAc,OAAS,SAAU,OAASlM,aAAe,IAAMm5C,EAAa,KAC1Gv1C,KAAK01C,GAAKF,EACVx1C,KAAK21C,IAAMR,GAGbhL,yBAAyB1nC,UAAU4yC,mBAAqB,SAAUt5B,EAAMkuB,GACtE,GAAIjqC,KAAKsB,EAAEiuB,cAAgBvvB,KAAKsB,EAAE+tB,aAAc,CAC9C,IAAIomB,EAAM3tC,EAAG4R,EACT8kB,EAAO56B,SAAS,QAChBgiC,EAAchiC,SAAS,QAC3B46B,EAAK9gB,YAAYkoB,GACjB,IAAIgQ,EAAY70C,kBACZ2sC,EAAS3sC,kBACby9B,EAAKlgB,aAAa,KAAMovB,GACxB,IAAImI,EAASjyC,SAAoB,IAAXmY,EAAKpa,EAAU,iBAAmB,kBACxDk0C,EAAOv3B,aAAa,KAAMs3B,GAC1BC,EAAOv3B,aAAa,eAAgB,OACpCu3B,EAAOv3B,aAAa,gBAAiB,kBACrC5E,EAAOqC,EAAKza,EAAEyG,EAAEA,EAAE,GAAG5G,EAAI4a,EAAKza,EAAEyG,EAAEA,EAAE,GAAG5G,EAAEjD,OAAS6d,EAAKza,EAAEyG,EAAEA,EAAE7J,OAC7D,IAAIi3C,EAAQn1C,KAAKm1C,MAEjB,IAAKrtC,EAAe,EAAXiU,EAAKza,EAAEG,EAAOqG,EAAI4R,EAAM5R,GAAK,GACpC2tC,EAAO7xC,SAAS,SACX0a,aAAa,aAAc,oBAChCu3B,EAAOn4B,YAAY+3B,GACnBN,EAAMnyC,KAAKyyC,GAGb7P,EAAYtnB,aAAyB,OAAZvC,EAAKzT,GAAc,OAAS,SAAU,OAASlM,aAAe,IAAMw5C,EAAY,KACzG51C,KAAK+8B,GAAK8Y,EACV71C,KAAK81C,GAAKtX,EACVx+B,KAAK+1C,IAAMZ,EACXn1C,KAAK0tC,OAASA,EACdzD,EAAQP,OAAS9D,IAIrBhzB,gBAAgB,CAAC3O,0BAA2BkmC,0BAW5Cv3B,gBAAgB,CAACu3B,yBAA0BlmC,0BAA2BomC,4BAQtE,IAAI2L,oBAAsB,WACxB,IAAIC,EAAkB,IAAIlwC,OAEtBmwC,EAAgB,IAAInwC,OAiCxB,SAASowC,EAAuBC,EAAWC,EAAU7D,IAC/CA,GAAgB6D,EAAS7tC,UAAUwsB,GAAGvwB,OACxC4xC,EAAS7tC,UAAUlE,UAAUga,aAAa,UAAW+3B,EAAS7tC,UAAUwsB,GAAG5zB,IAGzEoxC,GAAgB6D,EAAS7tC,UAAUusB,OAAOtwB,OAC5C4xC,EAAS7tC,UAAUlE,UAAUga,aAAa,YAAa+3B,EAAS7tC,UAAUusB,OAAO3zB,EAAE0L,WAIvF,SAASwpC,EAAWF,EAAWC,EAAU7D,GACvC,IAAI1qC,EACA4R,EACA68B,EACAC,EACArhB,EACAntB,EAGA8T,EAAOgN,EAAKtiB,EAAOiwC,EAAY1uC,EAF/B2uC,EAAOL,EAAS/T,OAAOpkC,OACvBqrC,EAAM8M,EAAS9M,IAGnB,IAAKvhC,EAAI,EAAGA,EAAI0uC,EAAM1uC,GAAK,EAAG,CAG5B,GAFAwuC,EAASH,EAASnyB,GAAGzf,MAAQ+tC,EAEzB6D,EAAS/T,OAAOt6B,GAAGuhC,IAAMA,EAAK,CAKhC,IAJAzgB,EAAMotB,EAAc3vC,QACpBkwC,EAAalN,EAAM8M,EAAS/T,OAAOt6B,GAAGuhC,IACtCxhC,EAAIsuC,EAASzM,aAAa1rC,OAAS,GAE3Bs4C,GAAUC,EAAa,GAC7BD,EAASH,EAASzM,aAAa7hC,GAAGgtB,OAAOtwB,MAAQ+xC,EACjDC,IACA1uC,IAGF,GAAIyuC,EAIF,IAHAC,EAAalN,EAAM8M,EAAS/T,OAAOt6B,GAAGuhC,IACtCxhC,EAAIsuC,EAASzM,aAAa1rC,OAAS,EAE5Bu4C,EAAa,GAClBjwC,EAAQ6vC,EAASzM,aAAa7hC,GAAGgtB,OAAO3zB,EAAEoF,MAC1CsiB,EAAItgB,UAAUhC,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,KAC/KiwC,IACA1uC,SAIJ+gB,EAAMmtB,EAMR,GAFAv8B,GADAoC,EAAQu6B,EAASnyB,GAAGpI,OACPxF,QAETkgC,EAAQ,CAGV,IAFAD,EAAwB,GAEnBzuC,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,GACzBqtB,EAAYrZ,EAAMxB,OAAOxS,KAERqtB,EAAU7e,UACzBigC,GAAyBrhB,iBAAiBC,EAAWA,EAAU7e,QAAS6e,EAAUvtB,EAAGkhB,IAIzFutB,EAASxM,OAAO7hC,GAAKuuC,OAErBA,EAAwBF,EAASxM,OAAO7hC,GAG1CquC,EAAS/T,OAAOt6B,GAAGnG,IAAsB,IAAjBu0C,EAAU5M,GAAc,GAAK+M,EACrDF,EAAS/T,OAAOt6B,GAAGvD,KAAO+xC,GAAUH,EAAS/T,OAAOt6B,GAAGvD,MAI3D,SAASkyC,EAAWP,EAAWC,EAAU7D,GACvC,IAAIoE,EAAYP,EAASt3C,OAErBs3C,EAASzuC,EAAEnD,MAAQ+tC,IACrBoE,EAAUnN,MAAMnrB,aAAa,OAAQ,OAAShhB,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,MAG5Ii1C,EAASluC,EAAE1D,MAAQ+tC,IACrBoE,EAAUnN,MAAMnrB,aAAa,eAAgB+3B,EAASluC,EAAE/G,GAM5D,SAASy1C,EAAqBT,EAAWC,EAAU7D,GACjDsE,EAAeV,EAAWC,EAAU7D,GACpCuE,EAAaX,EAAWC,EAAU7D,GAGpC,SAASsE,EAAeV,EAAWC,EAAU7D,GAC3C,IAsBI2C,EAAOp3C,EAAGE,EAAKw3C,EA+CbzoB,EArEFwoB,EAAQa,EAASX,GACjBsB,EAAaX,EAAS/0C,EAAEiuB,YACxBrjB,EAAMmqC,EAASl1C,EAAEC,EACjB+K,EAAMkqC,EAASxuC,EAAEzG,EAErB,GAAIi1C,EAASluC,EAAE1D,MAAQ+tC,EAAc,CACnC,IAAIx/B,EAAwB,OAAjBojC,EAAU9tC,GAAc,eAAiB,iBACpD+tC,EAASt3C,MAAM0qC,MAAMnrB,aAAatL,EAAMqjC,EAASluC,EAAE/G,GAGrD,GAAIi1C,EAASl1C,EAAEsD,MAAQ+tC,EAAc,CACnC,IAAIyE,EAAwB,IAAhBb,EAAUz0C,EAAU,KAAO,KACnCu1C,EAAkB,OAAVD,EAAiB,KAAO,KACpCzB,EAAMl3B,aAAa24B,EAAO/qC,EAAI,IAC9BspC,EAAMl3B,aAAa44B,EAAOhrC,EAAI,IAE1B8qC,IAAeX,EAAS/0C,EAAE+tB,eAC5BgnB,EAAStZ,GAAGze,aAAa24B,EAAO/qC,EAAI,IACpCmqC,EAAStZ,GAAGze,aAAa44B,EAAOhrC,EAAI,KAMxC,GAAImqC,EAAS/0C,EAAE6tB,OAASqjB,EAAc,CACpC2C,EAAQkB,EAASV,IACjB,IAAIwB,EAAUd,EAAS/0C,EAAEsG,EAGzB,IAFA3J,EAAMk3C,EAAMj3C,OAEPH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACxB03C,EAAON,EAAMp3C,IACRugB,aAAa,SAAU64B,EAAY,EAAJp5C,GAAS,KAC7C03C,EAAKn3B,aAAa,aAAc,OAAS64B,EAAY,EAAJp5C,EAAQ,GAAK,IAAMo5C,EAAY,EAAJp5C,EAAQ,GAAK,IAAMo5C,EAAY,EAAJp5C,EAAQ,GAAK,KAIxH,GAAIi5C,IAAeX,EAAS/0C,EAAE8tB,OAASojB,GAAe,CACpD,IAAI4E,EAAUf,EAAS/0C,EAAE6G,EAUzB,IAFAlK,GALEk3C,EADEkB,EAAS/0C,EAAE+tB,aACLgnB,EAASV,IAETU,EAASN,KAGP73C,OAEPH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB03C,EAAON,EAAMp3C,GAERs4C,EAAS/0C,EAAE+tB,cACdomB,EAAKn3B,aAAa,SAAU84B,EAAY,EAAJr5C,GAAS,KAG/C03C,EAAKn3B,aAAa,eAAgB84B,EAAY,EAAJr5C,EAAQ,IAItD,GAAoB,IAAhBq4C,EAAUz0C,GACR00C,EAASxuC,EAAEpD,MAAQ+tC,KACrBgD,EAAMl3B,aAAa,KAAMnS,EAAI,IAC7BqpC,EAAMl3B,aAAa,KAAMnS,EAAI,IAEzB6qC,IAAeX,EAAS/0C,EAAE+tB,eAC5BgnB,EAAStZ,GAAGze,aAAa,KAAMnS,EAAI,IACnCkqC,EAAStZ,GAAGze,aAAa,KAAMnS,EAAI,WAevC,IATIkqC,EAASl1C,EAAEsD,MAAQ4xC,EAASxuC,EAAEpD,MAAQ+tC,KACxCxlB,EAAMnwB,KAAKM,KAAKN,KAAKI,IAAIiP,EAAI,GAAKC,EAAI,GAAI,GAAKtP,KAAKI,IAAIiP,EAAI,GAAKC,EAAI,GAAI,IACzEqpC,EAAMl3B,aAAa,IAAK0O,GAEpBgqB,IAAeX,EAAS/0C,EAAE+tB,cAC5BgnB,EAAStZ,GAAGze,aAAa,IAAK0O,IAI9BqpB,EAASxuC,EAAEpD,MAAQ4xC,EAASn1C,EAAEuD,MAAQ4xC,EAAS1uC,EAAElD,MAAQ+tC,EAAc,CACpExlB,IACHA,EAAMnwB,KAAKM,KAAKN,KAAKI,IAAIiP,EAAI,GAAKC,EAAI,GAAI,GAAKtP,KAAKI,IAAIiP,EAAI,GAAKC,EAAI,GAAI,KAG3E,IAAIkrC,EAAMx6C,KAAK4nB,MAAMtY,EAAI,GAAKD,EAAI,GAAIC,EAAI,GAAKD,EAAI,IAE/CorC,EAAOtqB,GADGqpB,EAASn1C,EAAEE,GAAK,EAAI,IAAOi1C,EAASn1C,EAAEE,IAAM,GAAK,IAAOi1C,EAASn1C,EAAEE,GAE7E8J,EAAIrO,KAAKoJ,IAAIoxC,EAAMhB,EAAS1uC,EAAEvG,GAAKk2C,EAAOprC,EAAI,GAC9Cf,EAAItO,KAAKsJ,IAAIkxC,EAAMhB,EAAS1uC,EAAEvG,GAAKk2C,EAAOprC,EAAI,GAClDspC,EAAMl3B,aAAa,KAAMpT,GACzBsqC,EAAMl3B,aAAa,KAAMnT,GAErB6rC,IAAeX,EAAS/0C,EAAE+tB,eAC5BgnB,EAAStZ,GAAGze,aAAa,KAAMpT,GAC/BmrC,EAAStZ,GAAGze,aAAa,KAAMnT,KASvC,SAAS4rC,EAAaX,EAAWC,EAAU7D,GACzC,IAAIoE,EAAYP,EAASt3C,MACrB8C,EAAIw0C,EAASx0C,EAEbA,IAAMA,EAAE4C,MAAQ+tC,IAAiB3wC,EAAEitB,UACrC8nB,EAAUnN,MAAMnrB,aAAa,mBAAoBzc,EAAEitB,SACnD8nB,EAAUnN,MAAMnrB,aAAa,oBAAqBzc,EAAEmtB,WAAW,KAG7DqnB,EAASzuC,IAAMyuC,EAASzuC,EAAEnD,MAAQ+tC,IACpCoE,EAAUnN,MAAMnrB,aAAa,SAAU,OAAShhB,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,MAG9Ii1C,EAASluC,EAAE1D,MAAQ+tC,IACrBoE,EAAUnN,MAAMnrB,aAAa,iBAAkB+3B,EAASluC,EAAE/G,IAGxDi1C,EAAS15B,EAAElY,MAAQ+tC,KACrBoE,EAAUnN,MAAMnrB,aAAa,eAAgB+3B,EAAS15B,EAAEvb,GAEpDw1C,EAAUlN,QACZkN,EAAUlN,OAAOprB,aAAa,eAAgB+3B,EAAS15B,EAAEvb,IAM/D,MAhQS,CACPm2C,qBAGF,SAA8Bx7B,GACnBA,EAAKzT,GAEd,OAAQyT,EAAKzT,IACX,IAAK,KACH,OAAOquC,EAET,IAAK,KACH,OAAOG,EAET,IAAK,KACH,OAAOD,EAET,IAAK,KACH,OAAOE,EAET,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACH,OAAOT,EAET,IAAK,KACH,OAAOH,KAhCW,GAwQ1B,SAASqB,wBACPx3C,KAAKy3C,UAAY,GACjBz3C,KAAK03C,aAAe,GACpB13C,KAAK23C,oBAAsB,EAkE7B,SAASC,YAAY94C,EAASid,EAAMumB,EAAQuV,GAC1C73C,KAAK83C,aAAe,GACpB93C,KAAKyyB,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1B,IAAInqB,EAAK,EAEM,MAAXyT,EAAKzT,GACPA,EAAK,EACe,MAAXyT,EAAKzT,GACdA,EAAK,EACe,MAAXyT,EAAKzT,KACdA,EAAK,GAGPtI,KAAKkkB,GAAK6G,qBAAqB2d,aAAa5pC,EAASid,EAAMzT,EAAIxJ,GAC/D,IAAIf,EAEAg6C,EADA95C,EAAMqkC,EAAOpkC,OAGjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACnBukC,EAAOvkC,GAAGmY,SACb6hC,EAAc,CACZtE,WAAYoE,EAAkBG,qBAAqB1V,EAAOvkC,GAAG01C,YAC7DwE,QAAS,IAEXj4C,KAAK83C,aAAa90C,KAAK+0C,GACvBzV,EAAOvkC,GAAG41B,SAAS3wB,KAAK+0C,IAO9B,SAASG,eAiET,SAAS/K,YAAYpxB,EAAM8K,EAAYV,GACrCnmB,KAAKgiB,YACLhiB,KAAKy0C,aAAa14B,EAAM8K,EAAYV,GACpCnmB,KAAKgiB,YACLhiB,KAAKmzC,cAAcp3B,EAAM8K,EAAYV,GACrCnmB,KAAK+yC,gBAqBP,SAASoF,kBAsKT,SAASC,iBAuFT,SAASC,gBAqFT,SAASC,gBA4GT,SAAShL,cAAcvxB,EAAM8K,EAAYV,GACvCnmB,KAAK83B,UAAYjR,EAAWgmB,aAAa9wB,EAAK3B,OAC9Cpa,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GACnCnmB,KAAKu4C,WAAa,CAChBt5C,IAAK,EACLC,KAAM,EACNwO,MAAO1N,KAAK83B,UAAUnb,EACtB0a,OAAQr3B,KAAK83B,UAAU52B,GAoB3B,SAASssC,cAAczxB,EAAM8K,EAAYV,GACvCnmB,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAgBrC,SAASqlB,aAAazvB,EAAM8K,EAAYV,GACtCnmB,KAAKgiB,YACLhiB,KAAK2zC,iBACL3zC,KAAK83B,UAAYjR,EAAWgmB,aAAa9wB,EAAK3B,OAC9Cpa,KAAKy0C,aAAa14B,EAAM8K,EAAYV,GACpCnmB,KAAKw4C,YAAa,EAClBx4C,KAAKy4C,UAAW,EAChB,IAAIriB,EAAYp2B,KAAK6mB,WAAWgR,cAAc73B,KAAK83B,WACnD93B,KAAK81B,MAAQ91B,KAAK6mB,WAAWmmB,gBAAgB7W,YAAYC,GACzDp2B,KAAK04C,aAAe,EACpB14C,KAAK6mB,WAAWmmB,gBAAgBnX,SAAS71B,MACzCA,KAAK24C,GAAK58B,EAAK48B,GAAK52B,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK48B,GAAI,EAAG9xB,EAAWuC,UAAWppB,MAAQ,CAC1F44C,cAAc,GAkElB,SAASrL,eAAexxB,EAAM8K,EAAYV,GACxCnmB,KAAKsZ,OAASyC,EAAKzC,OACnBtZ,KAAKwnC,YAAa,EAClBxnC,KAAKqZ,gBAAiB,EACtBrZ,KAAKwmC,gBAAkB,GACvBxmC,KAAK2zB,SAAW3zB,KAAKsZ,OAAShb,iBAAiB0B,KAAKsZ,OAAOpb,QAAU,GAErE8B,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GACnCnmB,KAAK24C,GAAK58B,EAAK48B,GAAK52B,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK48B,GAAI,EAAG9xB,EAAWuC,UAAWppB,MAAQ,CAC1F44C,cAAc,GAMlB,SAASvL,eAAetxB,EAAM8K,EAAYV,GACxCnmB,KAAK64C,UAAY,GACjB74C,KAAK26B,WAAa,MAClB36B,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GA+OrC,SAASinB,gBAAgBrxB,EAAM8K,EAAYV,GAEzCnmB,KAAKsa,OAAS,GAEdta,KAAK84C,WAAa/8B,EAAKzB,OAEvBta,KAAK+4C,WAAa,GAElB/4C,KAAKg5C,eAAiB,GAEtBh5C,KAAKi5C,UAAY,GAEjBj5C,KAAKk5C,kBAAoB,GAEzBl5C,KAAKm5C,iBAAmB,GACxBn5C,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAGnCnmB,KAAKuqC,aAAe,GAqWtB,SAAS6O,cAAcC,EAAQC,GAC7Bt5C,KAAKs5C,cAAgBA,EACrB,IAAI7f,EAAgB71B,SAAS,iBAc7B,GAbA61B,EAAcnb,aAAa,OAAQ,UACnCmb,EAAcnb,aAAa,8BAA+B,aAC1Dmb,EAAcnb,aAAa,SAAU,wFACrCmb,EAAcnb,aAAa,SAAU,MACrC+6B,EAAO37B,YAAY+b,IACnBA,EAAgB71B,SAAS,kBACX0a,aAAa,OAAQ,UACnCmb,EAAcnb,aAAa,8BAA+B,QAC1Dmb,EAAcnb,aAAa,SAAU,2CACrCmb,EAAcnb,aAAa,SAAU,MACrC+6B,EAAO37B,YAAY+b,GACnBz5B,KAAKu5C,aAAe9f,EAEwB,MAAxC6f,EAAcE,eAAe,GAAG/3C,EAAEL,GAAak4C,EAAcE,eAAe,GAAG/3C,EAAEsG,EAAG,CACtF,IAEI0xC,EAFAC,EAAU91C,SAAS,WACvBy1C,EAAO37B,YAAYg8B,IAEnBD,EAAc71C,SAAS,gBACX0a,aAAa,KAAM,iBAC/Bo7B,EAAQh8B,YAAY+7B,IACpBA,EAAc71C,SAAS,gBACX0a,aAAa,KAAM,MAC/Bo7B,EAAQh8B,YAAY+7B,IAaxB,SAASE,cAAcN,EAAQC,GAC7Bt5C,KAAKs5C,cAAgBA,EACrB,IAAI7f,EAAgB71B,SAAS,iBAC7B61B,EAAcnb,aAAa,OAAQ,UACnCmb,EAAcnb,aAAa,8BAA+B,QAC1Dmb,EAAcnb,aAAa,SAAU,2CACrC+6B,EAAO37B,YAAY+b,GACnBz5B,KAAKu5C,aAAe9f,EAWtB,SAASmgB,sBAAsBP,EAAQC,GAErCD,EAAO/6B,aAAa,IAAK,SACzB+6B,EAAO/6B,aAAa,IAAK,SACzB+6B,EAAO/6B,aAAa,QAAS,QAC7B+6B,EAAO/6B,aAAa,SAAU,QAC9Bte,KAAKs5C,cAAgBA,EACrB,IAAIO,EAAiBj2C,SAAS,kBAC9By1C,EAAO37B,YAAYm8B,GACnB75C,KAAK65C,eAAiBA,EA2BxB,SAASC,gBAAgBlzB,EAAM0yB,GAC7Bt5C,KAAK+5C,aAAc,EACnB/5C,KAAKs5C,cAAgBA,EACrBt5C,KAAK4mB,KAAOA,EACZ5mB,KAAK8b,MAAQ,GA+Hf,SAASk+B,iBAAiBX,EAAQC,GAChCt5C,KAAKs5C,cAAgBA,EACrB,IAAI7f,EAAgB71B,SAAS,iBAC7B61B,EAAcnb,aAAa,OAAQ,UACnCmb,EAAcnb,aAAa,8BAA+B,aAC1Dmb,EAAcnb,aAAa,SAAU,wFACrCmb,EAAcnb,aAAa,SAAU,MACrC+6B,EAAO37B,YAAY+b,GACnB,IAAIwgB,EAAsBr2C,SAAS,uBACnCq2C,EAAoB37B,aAAa,8BAA+B,QAChE+6B,EAAO37B,YAAYu8B,GACnBj6C,KAAKu5C,aAAeU,EACpB,IAAIC,EAAUt2C,SAAS,WACvBs2C,EAAQ57B,aAAa,OAAQ,SAC7B27B,EAAoBv8B,YAAYw8B,GAChCl6C,KAAKk6C,QAAUA,EACf,IAAIC,EAAUv2C,SAAS,WACvBu2C,EAAQ77B,aAAa,OAAQ,SAC7B27B,EAAoBv8B,YAAYy8B,GAChCn6C,KAAKm6C,QAAUA,EACf,IAAIC,EAAUx2C,SAAS,WACvBw2C,EAAQ97B,aAAa,OAAQ,SAC7B27B,EAAoBv8B,YAAY08B,GAChCp6C,KAAKo6C,QAAUA,EAkBjB,SAASC,mBAAmBhB,EAAQC,GAClCt5C,KAAKs5C,cAAgBA,EACrB,IAAIE,EAAiBx5C,KAAKs5C,cAAcE,eACpCS,EAAsBr2C,SAAS,wBAG/B41C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,KACzRpB,KAAKk6C,QAAUl6C,KAAKs6C,aAAa,UAAWL,KAG1CT,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,KACzRpB,KAAKm6C,QAAUn6C,KAAKs6C,aAAa,UAAWL,KAG1CT,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,KACzRpB,KAAKo6C,QAAUp6C,KAAKs6C,aAAa,UAAWL,KAG1CT,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,GAAWo4C,EAAe,IAAI/3C,EAAEsG,GAAgC,IAA3ByxC,EAAe,IAAI/3C,EAAEL,KACzRpB,KAAKu6C,QAAUv6C,KAAKs6C,aAAa,UAAWL,KAG1Cj6C,KAAKk6C,SAAWl6C,KAAKm6C,SAAWn6C,KAAKo6C,SAAWp6C,KAAKu6C,WACvDN,EAAoB37B,aAAa,8BAA+B,QAChE+6B,EAAO37B,YAAYu8B,GACnBA,EAAsBr2C,SAAS,yBAG7B41C,EAAe,GAAG/3C,EAAEsG,GAA+B,IAA1ByxC,EAAe,GAAG/3C,EAAEL,GAAWo4C,EAAe,GAAG/3C,EAAEsG,GAA+B,IAA1ByxC,EAAe,GAAG/3C,EAAEL,GAAWo4C,EAAe,GAAG/3C,EAAEsG,GAA+B,IAA1ByxC,EAAe,GAAG/3C,EAAEL,GAAWo4C,EAAe,GAAG/3C,EAAEsG,GAA+B,IAA1ByxC,EAAe,GAAG/3C,EAAEL,GAAWo4C,EAAe,GAAG/3C,EAAEsG,GAA+B,IAA1ByxC,EAAe,GAAG/3C,EAAEL,KAC/Q64C,EAAoB37B,aAAa,8BAA+B,QAChE+6B,EAAO37B,YAAYu8B,GACnBj6C,KAAKw6C,gBAAkBx6C,KAAKs6C,aAAa,UAAWL,GACpDj6C,KAAKy6C,gBAAkBz6C,KAAKs6C,aAAa,UAAWL,GACpDj6C,KAAK06C,gBAAkB16C,KAAKs6C,aAAa,UAAWL,IA6ExD,SAASU,oBAAoBtB,EAAQC,GACnC,IAAI/S,EAAa+S,EAAch1C,UAAUuiB,WAAWif,aAAaS,WACjE8S,EAAO/6B,aAAa,IAAKioB,EAAWr7B,GACpCmuC,EAAO/6B,aAAa,IAAKioB,EAAWp7B,GACpCkuC,EAAO/6B,aAAa,QAASioB,EAAW74B,OACxC2rC,EAAO/6B,aAAa,SAAUioB,EAAWlP,QACzCr3B,KAAKs5C,cAAgBA,EACrB,IAAIO,EAAiBj2C,SAAS,kBAC9Bi2C,EAAev7B,aAAa,KAAM,eAClCu7B,EAAev7B,aAAa,SAAU,iBACtCu7B,EAAev7B,aAAa,eAAgB,KAC5Cte,KAAK65C,eAAiBA,EACtBR,EAAO37B,YAAYm8B,GACnB,IAAIe,EAAWh3C,SAAS,YACxBg3C,EAASt8B,aAAa,KAAM,MAC5Bs8B,EAASt8B,aAAa,KAAM,KAC5Bs8B,EAASt8B,aAAa,KAAM,iBAC5Bs8B,EAASt8B,aAAa,SAAU,iBAChCte,KAAK46C,SAAWA,EAChBvB,EAAO37B,YAAYk9B,GACnB,IAAIC,EAAUj3C,SAAS,WACvBi3C,EAAQv8B,aAAa,cAAe,WACpCu8B,EAAQv8B,aAAa,gBAAiB,KACtCu8B,EAAQv8B,aAAa,SAAU,iBAC/Bte,KAAK66C,QAAUA,EACfxB,EAAO37B,YAAYm9B,GACnB,IAAIC,EAAcl3C,SAAS,eAC3Bk3C,EAAYx8B,aAAa,KAAM,iBAC/Bw8B,EAAYx8B,aAAa,MAAO,iBAChCw8B,EAAYx8B,aAAa,WAAY,MACrCw8B,EAAYx8B,aAAa,SAAU,iBACnC+6B,EAAO37B,YAAYo9B,GACnB,IAEIrB,EAFAC,EAAU91C,SAAS,WACvBy1C,EAAO37B,YAAYg8B,GAEnBD,EAAc71C,SAAS,eACvB81C,EAAQh8B,YAAY+7B,IACpBA,EAAc71C,SAAS,gBACX0a,aAAa,KAAM,iBAC/Bte,KAAKy5C,YAAcA,EACnBz5C,KAAK05C,QAAUA,EACf15C,KAAK+6C,mBAAoB,EACzBrB,EAAQh8B,YAAY+7B,GA1wDtBjC,sBAAsB/0C,UAAY,CAChCu1C,qBAAsB,SAA8BvE,GAClD,IAAI11C,EACAE,EAAMw1C,EAAWv1C,OACjBoP,EAAM,IAEV,IAAKvP,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBuP,GAAOmmC,EAAW11C,GAAGyK,UAAU8E,IAAM,IAGvC,IAAI0tC,EAAWh7C,KAAKy3C,UAAUnqC,GAY9B,OAVK0tC,IACHA,EAAW,CACTvH,WAAY,GAAG50B,OAAO40B,GACtBf,eAAgB,IAAI3sC,OACpBtB,MAAM,GAERzE,KAAKy3C,UAAUnqC,GAAO0tC,EACtBh7C,KAAK03C,aAAa10C,KAAKg4C,IAGlBA,GAETC,gBAAiB,SAAyBD,EAAUxI,GAKlD,IAJA,IAcMhsC,EAdFzI,EAAI,EACJE,EAAM+8C,EAASvH,WAAWv1C,OAC1BuG,EAAO+tC,EAEJz0C,EAAIE,IAAQu0C,GAAc,CAC/B,GAAIwI,EAASvH,WAAW11C,GAAGyK,UAAUusB,OAAOtwB,KAAM,CAChDA,GAAO,EACP,MAGF1G,GAAK,EAGP,GAAI0G,EAIF,IAFAu2C,EAAStI,eAAensC,QAEnBxI,EAAIE,EAAM,EAAGF,GAAK,EAAGA,GAAK,EAC7ByI,EAAQw0C,EAASvH,WAAW11C,GAAGyK,UAAUusB,OAAO3zB,EAAEoF,MAClDw0C,EAAStI,eAAelqC,UAAUhC,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,KAIvMw0C,EAASv2C,KAAOA,GAElBy2C,iBAAkB,SAA0B1I,GAC1C,IAAIz0C,EACAE,EAAM+B,KAAK03C,aAAax5C,OAE5B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKi7C,gBAAgBj7C,KAAK03C,aAAa35C,GAAIy0C,IAG/C2I,UAAW,WACT,MAAO,IAAMn7C,KAAK23C,wBAkCtBC,YAAYn1C,UAAUktB,cAAgBga,aAAalnC,UAAUktB,cAI7DuoB,YAAYz1C,UAAY,CACtB24C,WAAY,WACV,IAAKp7C,KAAK+b,KAAKhC,QACb,OAAO,EAMT,IAHA,IAAIhc,EAAI,EACJE,EAAM+B,KAAK+b,KAAK9B,gBAAgB/b,OAE7BH,EAAIE,GAAK,CACd,GAA0C,MAAtC+B,KAAK+b,KAAK9B,gBAAgBlc,GAAG+H,OAAoD,IAApC9F,KAAK+b,KAAK9B,gBAAgBlc,GAAGqe,GAC5E,OAAO,EAGTre,GAAK,EAGP,OAAO,GAETyuC,gBAAiB,WACfxsC,KAAKq7C,eAAiBC,yBAAyBt7C,MAE3CA,KAAK+b,KAAKhC,SAAW/Z,KAAK49B,aAC5B59B,KAAKq7C,eAAeE,sBAAsBv7C,KAAK49B,aAGjD,IAAI4d,EAAmBC,2BAA2BC,uBAAuB17C,KAAMA,KAAKq7C,gBACpFr7C,KAAKq7C,eAAeM,yBAAyBH,GAExB,IAAjBx7C,KAAK+b,KAAKzT,IAAYtI,KAAK+b,KAAKwwB,GAClCvsC,KAAK47C,cAAgBC,wBAAwB77C,MACnB,IAAjBA,KAAK+b,KAAKzT,IACnBtI,KAAKq7C,eAAeS,eAAiBC,yBAAyB/7C,KAAK84C,WAAY94C,KAAKi5C,UAAWj5C,KAAKq7C,gBACpGr7C,KAAKq7C,eAAeW,QAAUh8C,KAAKq7C,eAAeS,gBACxB,IAAjB97C,KAAK+b,KAAKzT,KACnBtI,KAAKq7C,eAAeY,cAAgBC,wBAAwBl8C,MAC5DA,KAAKq7C,eAAe3Z,KAAO1hC,KAAKq7C,eAAeY,gBAGnDE,aAAc,WACZ,IAAIC,EAAiBx3C,aAAa5E,KAAK+b,KAAKsgC,KACjCr8C,KAAK80C,aAAe90C,KAAK6lC,cAC/B9mC,MAAM,kBAAoBq9C,GAEjC3H,aAAc,SAAsB14B,EAAM8K,EAAYV,GACpDnmB,KAAK6mB,WAAaA,EAClB7mB,KAAKmmB,KAAOA,EACZnmB,KAAK+b,KAAOA,EACZ/b,KAAKioC,QAAUlnC,kBAEVf,KAAK+b,KAAKugC,KACbt8C,KAAK+b,KAAKugC,GAAK,GAIjBt8C,KAAKu8C,eAAiB,IAAIC,eAAex8C,KAAK+b,KAAM/b,KAAMA,KAAKoE,oBAEjEq4C,QAAS,WACP,OAAOz8C,KAAKJ,MAEd00C,iBAAkB,cAWpBnH,YAAY1qC,UAAUwrC,aAAe,SAAUvD,GAC7C1qC,KAAKizC,kBAAkBvI,GAAK,IAG9ByC,YAAY1qC,UAAUsrC,YAAc,aAEpCZ,YAAY1qC,UAAUyrC,eAAiB,WACrC,OAAO,MAGTf,YAAY1qC,UAAUi2B,QAAU,aAEhCyU,YAAY1qC,UAAU6xC,iBAAmB,aAEzCnH,YAAY1qC,UAAU4rC,KAAO,aAE7Bz7B,gBAAgB,CAACslC,YAAajP,iBAAkBF,iBAAkBC,cAAemE,aAIjFgL,eAAe11C,UAAY,CACzBiyC,oBAAqB,WACnB10C,KAAK6lC,aAAejiC,SAAS,MAE/B+wC,wBAAyB,WACvB30C,KAAK08C,aAAe94C,SAAS,KAC7B5D,KAAK28C,mBAAqB38C,KAAK6lC,aAC/B7lC,KAAK6oC,cAAgB7oC,KAAK6lC,aAC1B7lC,KAAK48C,cAAe,EACpB,IAEItjB,EAAOC,EAAKsjB,EAFZC,EAAqB,KAIzB,GAAI98C,KAAK+b,KAAKjC,IACZ,GAAoB,GAAhB9Z,KAAK+b,KAAKjC,IAA2B,GAAhB9Z,KAAK+b,KAAKjC,GAAS,CAC1C,IAAIijC,EAASn5C,SAAS,QACtBm5C,EAAOz+B,aAAa,KAAMte,KAAKioC,SAC/B8U,EAAOz+B,aAAa,YAA6B,GAAhBte,KAAK+b,KAAKjC,GAAU,YAAc,SACnEijC,EAAOr/B,YAAY1d,KAAK6lC,cACxBiX,EAAqBC,EACrB/8C,KAAK6mB,WAAWhH,KAAKnC,YAAYq/B,GAE5B7jB,eAAeC,UAA4B,GAAhBn5B,KAAK+b,KAAKjC,KACxCijC,EAAOz+B,aAAa,YAAa,aACjCgb,EAAQv4B,kBACRw4B,EAAMH,eAAeC,aAAaC,GAClCt5B,KAAK6mB,WAAWhH,KAAKnC,YAAY6b,GACjCA,EAAI7b,YAAY0b,eAAeI,iCAC/BqjB,EAAKj5C,SAAS,MACX8Z,YAAY1d,KAAK6lC,cACpBiX,EAAqBD,EACrBE,EAAOr/B,YAAYm/B,GACnBA,EAAGv+B,aAAa,SAAU,OAASliB,aAAe,IAAMk9B,EAAQ,WAE7D,GAAoB,GAAhBt5B,KAAK+b,KAAKjC,GAAS,CAC5B,IAAIkjC,EAAYp5C,SAAS,QACzBo5C,EAAU1+B,aAAa,KAAMte,KAAKioC,SAClC+U,EAAU1+B,aAAa,YAAa,SACpC,IAAI2+B,EAAcr5C,SAAS,KAC3Bo5C,EAAUt/B,YAAYu/B,GACtB3jB,EAAQv4B,kBACRw4B,EAAMH,eAAeC,aAAaC,GAUlC,IAAI4jB,EAAQt5C,SAAS,uBACrBs5C,EAAM5+B,aAAa,KAAM,iBACzBib,EAAI7b,YAAYw/B,GAChB,IAAIC,EAASv5C,SAAS,WACtBu5C,EAAO7+B,aAAa,OAAQ,SAC5B6+B,EAAO7+B,aAAa,cAAe,WACnC4+B,EAAMx/B,YAAYy/B,GAElBn9C,KAAK6mB,WAAWhH,KAAKnC,YAAY6b,GACjC,IAAI6jB,EAAYx5C,SAAS,QACzBw5C,EAAU9+B,aAAa,QAASte,KAAKmmB,KAAKpK,KAAKY,GAC/CygC,EAAU9+B,aAAa,SAAUte,KAAKmmB,KAAKpK,KAAK7a,GAChDk8C,EAAU9+B,aAAa,IAAK,KAC5B8+B,EAAU9+B,aAAa,IAAK,KAC5B8+B,EAAU9+B,aAAa,OAAQ,WAC/B8+B,EAAU9+B,aAAa,UAAW,KAClC2+B,EAAY3+B,aAAa,SAAU,OAASliB,aAAe,IAAMk9B,EAAQ,KACzE2jB,EAAYv/B,YAAY0/B,GACxBH,EAAYv/B,YAAY1d,KAAK6lC,cAC7BiX,EAAqBG,EAEhB/jB,eAAeC,WAClB6jB,EAAU1+B,aAAa,YAAa,aACpCib,EAAI7b,YAAY0b,eAAeI,gCAC/BqjB,EAAKj5C,SAAS,KACdq5C,EAAYv/B,YAAY0/B,GACxBP,EAAGn/B,YAAY1d,KAAK6lC,cACpBiX,EAAqBD,EACrBI,EAAYv/B,YAAYm/B,IAG1B78C,KAAK6mB,WAAWhH,KAAKnC,YAAYs/B,SAE1Bh9C,KAAK+b,KAAKlC,IACnB7Z,KAAK08C,aAAah/B,YAAY1d,KAAK6lC,cACnCiX,EAAqB98C,KAAK08C,aAC1B18C,KAAK80C,YAAc90C,KAAK08C,cAExB18C,KAAK80C,YAAc90C,KAAK6lC,aAY1B,GATI7lC,KAAK+b,KAAKshC,IACZr9C,KAAK6lC,aAAavnB,aAAa,KAAMte,KAAK+b,KAAKshC,IAG7Cr9C,KAAK+b,KAAKK,IACZpc,KAAK6lC,aAAavnB,aAAa,QAASte,KAAK+b,KAAKK,IAI/B,IAAjBpc,KAAK+b,KAAKzT,KAAatI,KAAK+b,KAAKytB,GAAI,CACvC,IAAI8T,EAAK15C,SAAS,YACdgI,EAAKhI,SAAS,QAClBgI,EAAG0S,aAAa,IAAK,SAAWte,KAAK+b,KAAKY,EAArB,OAAuC3c,KAAK+b,KAAKY,EAAI,IAAM3c,KAAK+b,KAAK7a,EAAI,OAASlB,KAAK+b,KAAK7a,EAAI,KACrH,IAAIq8C,EAASx8C,kBAKb,GAJAu8C,EAAGh/B,aAAa,KAAMi/B,GACtBD,EAAG5/B,YAAY9R,GACf5L,KAAK6mB,WAAWhH,KAAKnC,YAAY4/B,GAE7Bt9C,KAAKo7C,aAAc,CACrB,IAAIoC,EAAU55C,SAAS,KACvB45C,EAAQl/B,aAAa,YAAa,OAASliB,aAAe,IAAMmhD,EAAS,KACzEC,EAAQ9/B,YAAY1d,KAAK6lC,cACzB7lC,KAAK28C,mBAAqBa,EAEtBV,EACFA,EAAmBp/B,YAAY1d,KAAK28C,oBAEpC38C,KAAK80C,YAAc90C,KAAK28C,wBAG1B38C,KAAK6lC,aAAavnB,aAAa,YAAa,OAASliB,aAAe,IAAMmhD,EAAS,KAIlE,IAAjBv9C,KAAK+b,KAAKsgC,IACZr8C,KAAKm8C,gBAGTpH,cAAe,WACT/0C,KAAK0yC,eAAeU,SACtBpzC,KAAK28C,mBAAmBr+B,aAAa,YAAate,KAAK0yC,eAAe5pB,IAAIhc,WAGxE9M,KAAK0yC,eAAeW,QACtBrzC,KAAK28C,mBAAmBr+B,aAAa,UAAWte,KAAK0yC,eAAeC,MAAMxqC,EAAE/G,IAGhF8zC,mBAAoB,WAClBl1C,KAAK6lC,aAAe,KACpB7lC,KAAK08C,aAAe,KACpB18C,KAAK49B,YAAYlF,WAEnBwV,eAAgB,WACd,OAAIluC,KAAK+b,KAAKytB,GACL,KAGFxpC,KAAK80C,aAEdF,2BAA4B,WAC1B50C,KAAK49B,YAAc,IAAI6J,YAAYznC,KAAK+b,KAAM/b,KAAMA,KAAK6mB,YACzD7mB,KAAKy9C,yBAA2B,IAAIC,WAAW19C,OAEjD6tC,SAAU,SAAkB70B,GACrBhZ,KAAK08C,cAIV18C,KAAK08C,aAAap+B,aAAa,OAAQ,OAASliB,aAAe,IAAM4c,EAAK,OAM9Eo/B,cAAc31C,UAAY,CACxBk7C,oBAAqB,SAA6B5hC,GAChD,IAAIhe,EACAE,EAAM+B,KAAKg5C,eAAe96C,OAE9B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKg5C,eAAej7C,GAAG+tB,SAAS/P,IAGpC6hC,2BAA4B,SAAoC7hC,GAI9D,IAHA,IACI9d,EAAM+B,KAAKg5C,eAAe96C,OADtB,EAGGD,GACT,GAAI+B,KAAKg5C,eAJH,GAIqB6E,oBAAoB9hC,GAC7C,OAAO,EAIX,OAAO,GAET+hC,gBAAiB,WACf,GAAK99C,KAAKg5C,eAAe96C,OAAzB,CAIA,IAAIH,EACAE,EAAM+B,KAAKsa,OAAOpc,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKsa,OAAOvc,GAAGmmB,GAAG3d,QAKpB,IAAKxI,GAFLE,EAAM+B,KAAKg5C,eAAe96C,QAEX,EAAGH,GAAK,EAAGA,GAAK,EAC7BiC,KAAKg5C,eAAej7C,GAAG2yB,cAAc1wB,KAAKinB,iBAG9C82B,OAAQ,CACN,EAAK,OACL,EAAK,QACL,EAAK,UAEPC,OAAQ,CACN,EAAK,QACL,EAAK,QACL,EAAK,SAEPC,uBAAwB,SAAgCr3B,GAKtD,IAJA,IAAI+M,EAAW3zB,KAAKk5C,kBAChBn7C,EAAI,EACJE,EAAM01B,EAASz1B,OAEZH,EAAIE,GAAK,CACd,GAAI01B,EAAS51B,GAAG6oB,OAASA,EACvB,OAAO+M,EAAS51B,GAAGisB,IAGrBjsB,GAAK,EAGP,OAAO,GAETmgD,oBAAqB,SAA6Bt3B,EAAMoD,GAItD,IAHA,IAAI2J,EAAW3zB,KAAKk5C,kBAChBn7C,EAAI41B,EAASz1B,OAEVH,GAGL,GAAI41B,EAFJ51B,GAAK,GAEW6oB,OAASA,EAEvB,YADA+M,EAAS51B,GAAGisB,IAAMA,GAKtB2J,EAAS3wB,KAAK,IAAIomC,iBAAiBxiB,EAAMoD,KAE3CikB,aAAc,SAAsBvD,GAClC1qC,KAAKk0C,uBAAuBxJ,GAC5B1qC,KAAKizC,kBAAkBvI,EAAK1qC,KAAK4zC,aAMrCyE,aAAa51C,UAAU+xC,YAAc,SAAUz4B,EAAM8K,EAAYV,GAC/DnmB,KAAKs7B,oBAAqB,EAC1Bt7B,KAAKgiB,YACLhiB,KAAKy0C,aAAa14B,EAAM8K,EAAYV,GACpCnmB,KAAKmkC,aAAe,IAAIhI,aAAan8B,KAAM+b,EAAKpa,EAAG3B,KAAKoE,mBACxDpE,KAAKm+C,aAAe,IAAI1jB,qBAAqB1e,EAAKpa,EAAG3B,KAAK26B,WAAY36B,MACtEA,KAAKmzC,cAAcp3B,EAAM8K,EAAYV,GACrCnmB,KAAK+yC,gBACL/yC,KAAK2zC,iBACL3zC,KAAK00C,sBACL10C,KAAK20C,0BACL30C,KAAK40C,6BACL50C,KAAK60C,gBACL70C,KAAKquC,OACLruC,KAAKm+C,aAAaxgB,iBAAiB39B,KAAKoE,oBAG1Ci0C,aAAa51C,UAAUwrC,aAAe,SAAUvD,GAC9C1qC,KAAKyE,MAAO,EACZzE,KAAKk0C,uBAAuBxJ,GAC5B1qC,KAAKizC,kBAAkBvI,EAAK1qC,KAAK4zC,YAE7B5zC,KAAKmkC,aAAa1/B,MAAQzE,KAAKmkC,aAAald,iBAC9CjnB,KAAKo+C,eACLp+C,KAAKmkC,aAAald,eAAgB,EAClCjnB,KAAKmkC,aAAa1/B,MAAO,IAI7B4zC,aAAa51C,UAAU47C,gBAAkB,SAAU3f,EAAcpkB,GAC/D,IAAIxS,EAESqtB,EADTzb,EAAOY,EAAOpc,OAEdogD,EAAW,GAEf,IAAKx2C,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBqtB,EAAY7a,EAAOxS,GAAG8S,GAAG7S,EACzBu2C,GAAYppB,iBAAiBC,EAAWA,EAAUp3B,EAAEG,QAAQ,EAAMwgC,GAGpE,OAAO4f,GAGTjG,aAAa51C,UAAU4gC,mBAAqB,SAAUC,EAAS7hB,GAC7DzhB,KAAKmkC,aAAad,mBAAmBC,EAAS7hB,IAGhD42B,aAAa51C,UAAUihC,cAAgB,SAAUC,GAC/C3jC,KAAKmkC,aAAaT,cAAcC,IAGlC0U,aAAa51C,UAAUmhC,mBAAqB,SAAU2a,GACpDv+C,KAAKmkC,aAAaP,mBAAmB2a,IAGvClG,aAAa51C,UAAU+7C,4BAA8B,SAAUhjC,EAAckjB,EAAc+f,EAAY1gB,EAAMC,GAO3G,OANIxiB,EAAawhB,IACf0B,EAAat2B,UAAUoT,EAAawhB,GAAG,GAAIxhB,EAAawhB,GAAG,GAAKxhB,EAAaghB,OAAQ,GAGvFkC,EAAat2B,UAAU,GAAIoT,EAAashB,GAAI,GAEpCthB,EAAa1T,GACnB,KAAK,EACH42B,EAAat2B,UAAUoT,EAAamhB,eAAiBnhB,EAAaihB,SAAWjhB,EAAaqhB,WAAW4hB,IAAc,EAAG,GACtH,MAEF,KAAK,EACH/f,EAAat2B,UAAUoT,EAAamhB,eAAiBnhB,EAAaihB,SAAWjhB,EAAaqhB,WAAW4hB,IAAe,EAAG,EAAG,GAI9H/f,EAAat2B,UAAU21B,EAAMC,EAAM,IAGrCqa,aAAa51C,UAAUi8C,WAAa,SAAUC,GAC5C,MAAO,OAAS9hD,KAAKC,MAAqB,IAAf6hD,EAAU,IAAY,IAAM9hD,KAAKC,MAAqB,IAAf6hD,EAAU,IAAY,IAAM9hD,KAAKC,MAAqB,IAAf6hD,EAAU,IAAY,KAGjItG,aAAa51C,UAAUm8C,UAAY,IAAI1iB,YAEvCmc,aAAa51C,UAAUi2B,QAAU,aAIjC9lB,gBAAgB,CAACslC,YAAajP,iBAAkBF,iBAAkBC,aAAcG,sBAAuBmP,cAEvGA,aAAa71C,UAAU+xC,YAAc,SAAUz4B,EAAM8K,EAAYV,GAC/DnmB,KAAKgiB,YACLhiB,KAAKy0C,aAAa14B,EAAM8K,EAAYV,GACpCnmB,KAAKmzC,cAAcp3B,EAAM8K,EAAYV,GACrCnmB,KAAK2zC,iBACL3zC,KAAK+yC,gBACL/yC,KAAK00C,sBACL10C,KAAK20C,0BACL30C,KAAK40C,8BAED50C,KAAK+b,KAAKwwB,IAAO1lB,EAAWof,iBAC9BjmC,KAAKyrC,gBAGPzrC,KAAKquC,QAePiK,aAAa71C,UAAUwrC,aAAe,SAAUvD,GAK9C,GAJA1qC,KAAKyE,MAAO,EACZzE,KAAKk0C,uBAAuBxJ,GAC5B1qC,KAAKizC,kBAAkBvI,EAAK1qC,KAAK4zC,WAE5B5zC,KAAK4zC,WAAc5zC,KAAK+b,KAAKwwB,GAAlC,CAIA,GAAKvsC,KAAK24C,GAAGC,aASX54C,KAAKomB,cAAgBskB,EAAM1qC,KAAK+b,KAAKugC,OATZ,CACzB,IAAIuC,EAAe7+C,KAAK24C,GAAGv3C,EAEvBy9C,IAAiB7+C,KAAK+b,KAAKiZ,KAC7B6pB,EAAe7+C,KAAK+b,KAAKiZ,GAAK,GAGhCh1B,KAAKomB,cAAgBy4B,EAKvB,IAAI9gD,EACAE,EAAM+B,KAAK2zB,SAASz1B,OAOxB,IALK8B,KAAKqZ,gBACRrZ,KAAKyqC,YAAYzqC,KAAKomB,eAInBroB,EAAIE,EAAM,EAAGF,GAAK,EAAGA,GAAK,GACzBiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,MACvCiC,KAAK2zB,SAAS51B,GAAGkwC,aAAajuC,KAAKomB,cAAgBpmB,KAAKsZ,OAAOvb,GAAG2pB,IAE9D1nB,KAAK2zB,SAAS51B,GAAG0G,OACnBzE,KAAKyE,MAAO,MAMpB6zC,aAAa71C,UAAUuyC,mBAAqB,WAC1C,IAAIj3C,EACAE,EAAM+B,KAAKsZ,OAAOpb,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACpBiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,KACvCiC,KAAK2zB,SAAS51B,GAAGgwC,eAKvBuK,aAAa71C,UAAUq8C,YAAc,SAAUC,GAC7C/+C,KAAK2zB,SAAWorB,GAGlBzG,aAAa71C,UAAUu8C,YAAc,WACnC,OAAOh/C,KAAK2zB,UAGd2kB,aAAa71C,UAAUw8C,gBAAkB,WACvC,IAAIlhD,EACAE,EAAM+B,KAAKsZ,OAAOpb,OAEtB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpBiC,KAAK2zB,SAAS51B,IAChBiC,KAAK2zB,SAAS51B,GAAG26B,WAKvB4f,aAAa71C,UAAUi2B,QAAU,WAC/B14B,KAAKi/C,kBACLj/C,KAAKk1C,sBAcPtiC,gBAAgB,CAACslC,YAAajP,iBAAkBkP,eAAgBpP,iBAAkBC,aAAcG,sBAAuBmE,eAEvHA,cAAc7qC,UAAUoyC,cAAgB,WACtC,IAAIze,EAAYp2B,KAAK6mB,WAAWgR,cAAc73B,KAAK83B,WACnD93B,KAAKi1C,UAAYrxC,SAAS,SAC1B5D,KAAKi1C,UAAU32B,aAAa,QAASte,KAAK83B,UAAUnb,EAAI,MACxD3c,KAAKi1C,UAAU32B,aAAa,SAAUte,KAAK83B,UAAU52B,EAAI,MACzDlB,KAAKi1C,UAAU32B,aAAa,sBAAuBte,KAAK83B,UAAUonB,IAAMl/C,KAAK6mB,WAAWif,aAAaE,0BACrGhmC,KAAKi1C,UAAUjc,eAAe,+BAAgC,OAAQ5C,GACtEp2B,KAAK6lC,aAAanoB,YAAY1d,KAAKi1C,YAGrC3H,cAAc7qC,UAAU6xC,iBAAmB,WACzC,OAAOt0C,KAAKu4C,YAOd3lC,gBAAgB,CAAC06B,eAAgBE,eAEjCA,cAAc/qC,UAAUoyC,cAAgB,WACtC,IAAIjN,EAAOhkC,SAAS,QAIpBgkC,EAAKtpB,aAAa,QAASte,KAAK+b,KAAK4f,IACrCiM,EAAKtpB,aAAa,SAAUte,KAAK+b,KAAKmI,IACtC0jB,EAAKtpB,aAAa,OAAQte,KAAK+b,KAAK8E,IACpC7gB,KAAK6lC,aAAanoB,YAAYkqB,IAmBhC4D,aAAa/oC,UAAUwrC,aAAe,SAAUvD,GAI9C,GAHA1qC,KAAKk0C,uBAAuBxJ,GAAK,GACjC1qC,KAAKizC,kBAAkBvI,GAAK,GAEvB1qC,KAAK24C,GAAGC,aAIX54C,KAAK04C,aAAehO,EAAM1qC,KAAK+b,KAAKugC,OAJX,CACzB,IAAIuC,EAAe7+C,KAAK24C,GAAGv3C,EAC3BpB,KAAK04C,aAAemG,IAMxBjsC,gBAAgB,CAACs2B,kBAAmBgP,YAAalP,cAAewC,cAEhEA,aAAa/oC,UAAUsrC,YAAc,WAC/B/tC,KAAK4zC,WAAa5zC,KAAKy4C,WACpBz4C,KAAKw4C,aAIEx4C,KAAK81B,MAAMW,WAAa55B,KAAKQ,IAAI2C,KAAK04C,aAAe14C,KAAK6mB,WAAWuC,UAAYppB,KAAK81B,MAAMU,QAAU,KAChHx2B,KAAK81B,MAAMU,KAAKx2B,KAAK04C,aAAe14C,KAAK6mB,WAAWuC,YAJpDppB,KAAK81B,MAAMS,OACXv2B,KAAK81B,MAAMU,KAAKx2B,KAAK04C,aAAe14C,KAAK6mB,WAAWuC,WACpDppB,KAAKw4C,YAAa,KAOxBhN,aAAa/oC,UAAU6rC,KAAO,aAG9B9C,aAAa/oC,UAAU4rC,KAAO,WAC5BruC,KAAK81B,MAAMC,QACX/1B,KAAKw4C,YAAa,GAGpBhN,aAAa/oC,UAAUszB,MAAQ,WAC7B/1B,KAAK81B,MAAMC,QACX/1B,KAAKw4C,YAAa,EAClBx4C,KAAKy4C,UAAW,GAGlBjN,aAAa/oC,UAAUuzB,OAAS,WAC9Bh2B,KAAKy4C,UAAW,GAGlBjN,aAAa/oC,UAAUwzB,QAAU,SAAUC,GACzCl2B,KAAK81B,MAAMY,KAAKR,IAGlBsV,aAAa/oC,UAAUw0B,OAAS,SAAUkoB,GACxCn/C,KAAK81B,MAAMmB,OAAOkoB,IAGpB3T,aAAa/oC,UAAUyrC,eAAiB,WACtC,OAAO,MAGT1C,aAAa/oC,UAAUi2B,QAAU,aAEjC8S,aAAa/oC,UAAU6xC,iBAAmB,aAE1C9I,aAAa/oC,UAAU+pC,gBAAkB,aAezC55B,gBAAgB,CAACqyB,YAAaqT,aAAcH,gBAAiB5K,gBAQ7D36B,gBAAgB,CAACslC,YAAajP,iBAAkBkP,eAAgBpP,iBAAkBC,aAAcG,qBAAsBkP,cAAehL,gBAErIA,eAAe5qC,UAAUoyC,cAAgB,WACnC70C,KAAK+b,KAAKM,cAAgBrc,KAAK6mB,WAAWrN,YAAYoC,QACxD5b,KAAKo/C,cAAgBx7C,SAAS,UAIlCypC,eAAe5qC,UAAU48C,kBAAoB,SAAUC,GAMrD,IALA,IAAIvhD,EAAI,EACJE,EAAMqhD,EAAUphD,OAChBqhD,EAAe,GACfC,EAAqB,GAElBzhD,EAAIE,GACLqhD,EAAUvhD,KAAOqQ,OAAOC,aAAa,KAAOixC,EAAUvhD,KAAOqQ,OAAOC,aAAa,IACnFkxC,EAAav8C,KAAKw8C,GAClBA,EAAqB,IAErBA,GAAsBF,EAAUvhD,GAGlCA,GAAK,EAIP,OADAwhD,EAAav8C,KAAKw8C,GACXD,GAGTlS,eAAe5qC,UAAU27C,aAAe,WACtC,IAAIrgD,EAAGE,EACHud,EAAexb,KAAKmkC,aAAa5H,YACrCv8B,KAAKq7B,gBAAkB/8B,iBAAiBkd,EAAeA,EAAaxT,EAAE9J,OAAS,GAE3Esd,EAAaogB,GACf57B,KAAK6lC,aAAavnB,aAAa,OAAQte,KAAK0+C,WAAWljC,EAAaogB,KAEpE57B,KAAK6lC,aAAavnB,aAAa,OAAQ,iBAGrC9C,EAAaqF,KACf7gB,KAAK6lC,aAAavnB,aAAa,SAAUte,KAAK0+C,WAAWljC,EAAaqF,KACtE7gB,KAAK6lC,aAAavnB,aAAa,eAAgB9C,EAAamgB,KAG9D37B,KAAK6lC,aAAavnB,aAAa,YAAa9C,EAAa6hB,WACzD,IAAIjf,EAAWpe,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAEtE,GAAI4c,EAASO,OACX3e,KAAK6lC,aAAavnB,aAAa,QAASF,EAASO,YAC5C,CACL3e,KAAK6lC,aAAavnB,aAAa,cAAeF,EAASG,SACvD,IAAIE,EAAUjD,EAAaiD,QACvBD,EAAShD,EAAagD,OAC1Bxe,KAAK6lC,aAAavnB,aAAa,aAAcE,GAC7Cxe,KAAK6lC,aAAavnB,aAAa,cAAeG,GAGhDze,KAAK6lC,aAAavnB,aAAa,aAAc9C,EAAa7Z,GAC1D,IAGI89C,EAHA5gB,EAAUrjB,EAAaxT,GAAK,GAC5B03C,IAAe1/C,KAAK6mB,WAAWrN,YAAYoC,MAC/C3d,EAAM4gC,EAAQ3gC,OAEd,IACIoc,EADAokB,EAAe1+B,KAAK2+B,QAEpB2f,EAAW,GACXjiC,EAAcrc,KAAK+b,KAAKM,YACxB0hB,EAAO,EACPC,EAAO,EACPkB,GAAY,EACZsD,EAAiBhnB,EAAaiX,GAAK,IAAOjX,EAAa6hB,UAE3D,IAAIhhB,GAAgBqjC,GAAelkC,EAAa/T,GAgCzC,CACL,IACIsO,EAAWisB,EADX2d,EAAoB3/C,KAAK64C,UAAU36C,OAGvC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACnB2hD,GAAerjC,GAAqB,IAANte,IACjC0hD,EAAQE,EAAoB5hD,EAAIiC,KAAK64C,UAAU96C,GAAK6F,SAAS87C,EAAa,OAAS,QAE/EC,GAAqB5hD,IACvB0hD,EAAMnhC,aAAa,iBAAkB,QACrCmhC,EAAMnhC,aAAa,kBAAmB,SACtCmhC,EAAMnhC,aAAa,oBAAqB,KACxCte,KAAK64C,UAAU96C,GAAK0hD,EACpBz/C,KAAK6lC,aAAanoB,YAAY+hC,IAGhCA,EAAM1gD,MAAMI,QAAU,WAGxBu/B,EAAan4B,QACbm4B,EAAal3B,MAAMgU,EAAa6hB,UAAY,IAAK7hB,EAAa6hB,UAAY,KAEtEhhB,IACEwiB,EAAQ9gC,GAAGmK,IACb61B,GAAQyE,EACRxE,GAAQxiB,EAAa4hB,QACrBY,GAAQkB,EAAY,EAAI,EACxBA,GAAY,GAGdl/B,KAAKw+C,4BAA4BhjC,EAAckjB,EAAcG,EAAQ9gC,GAAG0iC,KAAM1C,EAAMC,GACpFD,GAAQc,EAAQ9gC,GAAGiK,GAAK,EAExB+1B,GAAQyE,GAGNkd,GAGFplC,GADAvE,GADAisB,EAAWhiC,KAAK6mB,WAAWrN,YAAYwH,YAAYxF,EAAa8hB,UAAUv/B,GAAIqgB,EAASI,OAAQxe,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAAG+c,WACjIyjB,EAASjmB,MAAQ,IACtBzB,OAASvE,EAAUuE,OAAO,GAAGO,GAAK,GAEhDwB,EAGHiiC,GAAYt+C,KAAKq+C,gBAAgB3f,EAAcpkB,GAF/CmlC,EAAMnhC,aAAa,IAAKte,KAAKq+C,gBAAgB3f,EAAcpkB,MAKzD+B,GACFojC,EAAMnhC,aAAa,YAAa,aAAeogB,EAAal4B,MAAM,IAAM,IAAMk4B,EAAal4B,MAAM,IAAM,KAGzGi5C,EAAM/gC,YAAcmgB,EAAQ9gC,GAAGK,IAC/BqhD,EAAMzmB,eAAe,uCAAwC,YAAa,aAK1E3c,GAAeojC,GACjBA,EAAMnhC,aAAa,IAAKggC,OA1FwB,CAClD,IAAIsB,EAAW5/C,KAAKo/C,cAChBS,EAAU,QAEd,OAAQrkC,EAAa1T,GACnB,KAAK,EACH+3C,EAAU,MACV,MAEF,KAAK,EACHA,EAAU,SAIdD,EAASthC,aAAa,cAAeuhC,GACrCD,EAASthC,aAAa,iBAAkBkkB,GACxC,IAAI9jB,EAAc1e,KAAKq/C,kBAAkB7jC,EAAa8hB,WAItD,IAHAr/B,EAAMygB,EAAYxgB,OAClB8/B,EAAOxiB,EAAawhB,GAAKxhB,EAAawhB,GAAG,GAAKxhB,EAAaghB,OAAS,EAE/Dz+B,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACxB0hD,EAAQz/C,KAAK64C,UAAU96C,IAAM6F,SAAS,UAChC8a,YAAcA,EAAY3gB,GAChC0hD,EAAMnhC,aAAa,IAAK,GACxBmhC,EAAMnhC,aAAa,IAAK0f,GACxByhB,EAAM1gD,MAAMI,QAAU,UACtBygD,EAASliC,YAAY+hC,GACrBz/C,KAAK64C,UAAU96C,GAAK0hD,EACpBzhB,GAAQxiB,EAAa+hB,gBAGvBv9B,KAAK6lC,aAAanoB,YAAYkiC,GA+DhC,KAAO7hD,EAAIiC,KAAK64C,UAAU36C,QACxB8B,KAAK64C,UAAU96C,GAAGgB,MAAMI,QAAU,OAClCpB,GAAK,EAGPiC,KAAK48C,cAAe,GAGtBvP,eAAe5qC,UAAU6xC,iBAAmB,SAAUwL,GAIpD,GAHA9/C,KAAKiuC,aAAajuC,KAAKmmB,KAAKC,cAAgBpmB,KAAK+b,KAAK2L,IACtD1nB,KAAKg1C,qBAEDh1C,KAAK48C,aAAc,CACrB58C,KAAK48C,cAAe,EACpB,IAAImD,EAAU//C,KAAK6lC,aAAama,UAChChgD,KAAKigD,KAAO,CACVhhD,IAAK8gD,EAAQ50C,EACbjM,KAAM6gD,EAAQ70C,EACdwC,MAAOqyC,EAAQryC,MACf2pB,OAAQ0oB,EAAQ1oB,QAIpB,OAAOr3B,KAAKigD,MAGd5S,eAAe5qC,UAAUuyC,mBAAqB,WAC5C,IAAKh1C,KAAK+b,KAAKM,cACbrc,KAAKm+C,aAAargB,YAAY99B,KAAKmkC,aAAa5H,YAAav8B,KAAKs7B,oBAE9Dt7B,KAAKs7B,oBAAsBt7B,KAAKm+C,aAAa7iB,oBAAoB,CAEnE,IAAIv9B,EAAGE,EADP+B,KAAK48C,cAAe,EAEpB,IAGIsD,EAAgBC,EAHhB9kB,EAAkBr7B,KAAKm+C,aAAa9iB,gBACpCwD,EAAU7+B,KAAKmkC,aAAa5H,YAAYv0B,EAI5C,IAHA/J,EAAM4gC,EAAQ3gC,OAGTH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpB8gC,EAAQ9gC,GAAGmK,IAIfg4C,EAAiB7kB,EAAgBt9B,GACjCoiD,EAAWngD,KAAK64C,UAAU96C,GAEtBmiD,EAAez7C,KAAKwD,GACtBk4C,EAAS7hC,aAAa,YAAa4hC,EAAej4C,GAGhDi4C,EAAez7C,KAAK0D,GACtBg4C,EAAS7hC,aAAa,UAAW4hC,EAAe/3C,GAG9C+3C,EAAez7C,KAAKk3B,IACtBwkB,EAAS7hC,aAAa,eAAgB4hC,EAAevkB,IAGnDukB,EAAez7C,KAAKoc,IACtBs/B,EAAS7hC,aAAa,SAAU4hC,EAAer/B,IAG7Cq/B,EAAez7C,KAAKm3B,IACtBukB,EAAS7hC,aAAa,OAAQ4hC,EAAetkB,OA4BvDhpB,gBAAgB,CAACslC,YAAajP,iBAAkBkP,eAAgBC,cAAerP,iBAAkBC,aAAcG,sBAAuBiE,iBAEtIA,gBAAgB3qC,UAAU29C,qBAAuB,aAEjDhT,gBAAgB3qC,UAAU49C,eAAiB,IAAIt6C,OAE/CqnC,gBAAgB3qC,UAAU69C,yBAA2B,aAErDlT,gBAAgB3qC,UAAUoyC,cAAgB,WACxC70C,KAAKugD,aAAavgD,KAAK84C,WAAY94C,KAAKi5C,UAAWj5C,KAAKuqC,aAAcvqC,KAAK6lC,aAAc,EAAG,IAAI,GAChG7lC,KAAKwgD,sBAOPpT,gBAAgB3qC,UAAU+9C,mBAAqB,WAC7C,IAAIziD,EAEA2xB,EACA5nB,EAEA/I,EAJAd,EAAM+B,KAAKsa,OAAOpc,OAGlBwb,EAAO1Z,KAAK+4C,WAAW76C,OAGvBuiD,EAAa,GACbC,GAAc,EAElB,IAAK54C,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAK5B,IAJA/I,EAAQiB,KAAK+4C,WAAWjxC,GACxB44C,GAAc,EACdD,EAAWviD,OAAS,EAEfH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GAGa,KAFrC2xB,EAAQ1vB,KAAKsa,OAAOvc,IAEVukC,OAAOj+B,QAAQtF,KACvB0hD,EAAWz9C,KAAK0sB,GAChBgxB,EAAchxB,EAAMnrB,aAAem8C,GAInCD,EAAWviD,OAAS,GAAKwiD,GAC3B1gD,KAAK2gD,oBAAoBF,KAK/BrT,gBAAgB3qC,UAAUk+C,oBAAsB,SAAUrmC,GACxD,IAAIvc,EACAE,EAAMqc,EAAOpc,OAEjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBuc,EAAOvc,GAAG4xB,iBAIdyd,gBAAgB3qC,UAAUm+C,mBAAqB,SAAU7kC,EAAMutB,GAE7D,IAAIuX,EACA5W,EAAU,IAAIZ,aAAattB,EAAMutB,GACjCgM,EAAcrL,EAAQR,MAE1B,GAAgB,OAAZ1tB,EAAKzT,GACPu4C,EAAc,IAAI7W,mBAAmBhqC,KAAM+b,EAAMkuB,QAC5C,GAAgB,OAAZluB,EAAKzT,GACdu4C,EAAc,IAAI3W,iBAAiBlqC,KAAM+b,EAAMkuB,QAC1C,GAAgB,OAAZluB,EAAKzT,IAA2B,OAAZyT,EAAKzT,GAAa,CAE/Cu4C,EAAc,IADwB,OAAZ9kC,EAAKzT,GAAc6hC,yBAA2BE,4BAClCrqC,KAAM+b,EAAMkuB,GAClDjqC,KAAK6mB,WAAWhH,KAAKnC,YAAYmjC,EAAYnL,IAEzCmL,EAAYnT,SACd1tC,KAAK6mB,WAAWhH,KAAKnC,YAAYmjC,EAAY/K,IAC7C91C,KAAK6mB,WAAWhH,KAAKnC,YAAYmjC,EAAY9jB,IAC7CuY,EAAYh3B,aAAa,OAAQ,OAASliB,aAAe,IAAMykD,EAAYnT,OAAS,MAgCxF,MA5BgB,OAAZ3xB,EAAKzT,IAA2B,OAAZyT,EAAKzT,KAC3BgtC,EAAYh3B,aAAa,iBAAkBte,KAAK+9C,OAAOhiC,EAAK+kC,KAAO,SACnExL,EAAYh3B,aAAa,kBAAmBte,KAAKg+C,OAAOjiC,EAAKglC,KAAO,SACpEzL,EAAYh3B,aAAa,eAAgB,KAEzB,IAAZvC,EAAKglC,IACPzL,EAAYh3B,aAAa,oBAAqBvC,EAAKilC,KAIxC,IAAXjlC,EAAK1a,GACPi0C,EAAYh3B,aAAa,YAAa,WAGpCvC,EAAKshC,IACP/H,EAAYh3B,aAAa,KAAMvC,EAAKshC,IAGlCthC,EAAKK,IACPk5B,EAAYh3B,aAAa,QAASvC,EAAKK,IAGrCL,EAAKsgC,KACP/G,EAAYv2C,MAAM,kBAAoB6F,aAAamX,EAAKsgC,KAG1Dr8C,KAAK+4C,WAAW/1C,KAAKinC,GACrBjqC,KAAKihD,sBAAsBllC,EAAM8kC,GAC1BA,GAGTzT,gBAAgB3qC,UAAUy+C,mBAAqB,SAAUnlC,GACvD,IAAI8kC,EAAc,IAAIvW,eActB,OAZIvuB,EAAKshC,IACPwD,EAAYrW,GAAGlsB,aAAa,KAAMvC,EAAKshC,IAGrCthC,EAAKK,IACPykC,EAAYrW,GAAGlsB,aAAa,QAASvC,EAAKK,IAGxCL,EAAKsgC,KACPwE,EAAYrW,GAAGzrC,MAAM,kBAAoB6F,aAAamX,EAAKsgC,KAGtDwE,GAGTzT,gBAAgB3qC,UAAU0+C,uBAAyB,SAAUplC,EAAMzX,GACjE,IAAI88C,EAAoBt5B,yBAAyB0B,qBAAqBxpB,KAAM+b,EAAM/b,MAC9E6gD,EAAc,IAAI9W,iBAAiBqX,EAAmBA,EAAkBj5C,EAAG7D,GAE/E,OADAtE,KAAKihD,sBAAsBllC,EAAM8kC,GAC1BA,GAGTzT,gBAAgB3qC,UAAU4+C,mBAAqB,SAAUtlC,EAAMulC,EAAiBhY,GAC9E,IAAIhhC,EAAK,EAEO,OAAZyT,EAAKzT,GACPA,EAAK,EACgB,OAAZyT,EAAKzT,GACdA,EAAK,EACgB,OAAZyT,EAAKzT,KACdA,EAAK,GAGP,IACIu4C,EAAc,IAAIlX,aAAa2X,EAAiBhY,EADhCve,qBAAqB2d,aAAa1oC,KAAM+b,EAAMzT,EAAItI,OAKtE,OAHAA,KAAKsa,OAAOtX,KAAK69C,GACjB7gD,KAAK29C,oBAAoBkD,GACzB7gD,KAAKihD,sBAAsBllC,EAAM8kC,GAC1BA,GAGTzT,gBAAgB3qC,UAAUw+C,sBAAwB,SAAUllC,EAAMjd,GAIhE,IAHA,IAAIf,EAAI,EACJE,EAAM+B,KAAKm5C,iBAAiBj7C,OAEzBH,EAAIE,GAAK,CACd,GAAI+B,KAAKm5C,iBAAiBp7C,GAAGe,UAAYA,EACvC,OAGFf,GAAK,EAGPiC,KAAKm5C,iBAAiBn2C,KAAK,CACzBu+C,GAAIvL,oBAAoBuB,qBAAqBx7B,GAC7Cjd,QAASA,EACTid,KAAMA,KAIVqxB,gBAAgB3qC,UAAU++C,iBAAmB,SAAUX,GACrD,IACI/4C,EADArE,EAAMo9C,EAAYve,OAElB5oB,EAAO1Z,KAAK+4C,WAAW76C,OAE3B,IAAK4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACpB9H,KAAK+4C,WAAWjxC,GAAGoO,QACtBzS,EAAIT,KAAKhD,KAAK+4C,WAAWjxC,KAK/BslC,gBAAgB3qC,UAAU+xB,aAAe,WACvCx0B,KAAKinB,eAAgB,EACrB,IAAIlpB,EACAE,EAAM+B,KAAKi5C,UAAU/6C,OAEzB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKuqC,aAAaxsC,GAAKiC,KAAKi5C,UAAUl7C,GAOxC,IAJAiC,KAAKugD,aAAavgD,KAAK84C,WAAY94C,KAAKi5C,UAAWj5C,KAAKuqC,aAAcvqC,KAAK6lC,aAAc,EAAG,IAAI,GAChG7lC,KAAKwgD,qBACLviD,EAAM+B,KAAKoE,kBAAkBlG,OAExBH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKoE,kBAAkBrG,GAAG2G,WAG5B1E,KAAK89C,mBAGP1Q,gBAAgB3qC,UAAU89C,aAAe,SAAU98C,EAAKw1C,EAAW1O,EAAcjmC,EAAWglC,EAAOM,EAAc6X,GAC/G,IACI1jD,EAEA+J,EAAG4R,EAIHgoC,EACAC,EACAC,EATAN,EAAkB,GAAGziC,OAAO+qB,GAE5B3rC,EAAMwF,EAAIvF,OAAS,EAEnB2jD,EAAY,GACZC,EAAe,GAMnB,IAAK/jD,EAAIE,EAAKF,GAAK,EAAGA,GAAK,EAAG,CAS5B,IARA6jD,EAAe5hD,KAAKi+C,uBAAuBx6C,EAAI1F,KAK7Ck7C,EAAUl7C,GAAKwsC,EAAaqX,EAAe,GAF3Cn+C,EAAI1F,GAAGk2B,QAAUwtB,EAKF,MAAbh+C,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,GACnEs5C,EAGH3I,EAAUl7C,GAAGgB,MAAMmX,QAAS,EAF5B+iC,EAAUl7C,GAAKiC,KAAK4gD,mBAAmBn9C,EAAI1F,GAAIurC,GAK7C7lC,EAAI1F,GAAGk2B,SACT3vB,EAAUoZ,YAAYu7B,EAAUl7C,GAAGgB,MAAM0qC,OAG3CoY,EAAU7+C,KAAKi2C,EAAUl7C,GAAGgB,YACvB,GAAiB,MAAb0E,EAAI1F,GAAGuK,GAAY,CAC5B,GAAKs5C,EAKH,IAFAloC,EAAOu/B,EAAUl7C,GAAG8c,GAAG3c,OAElB4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBmxC,EAAUl7C,GAAGwsC,aAAaziC,GAAKmxC,EAAUl7C,GAAG8c,GAAG/S,QALjDmxC,EAAUl7C,GAAKiC,KAAKkhD,mBAAmBz9C,EAAI1F,IAS7CiC,KAAKugD,aAAa98C,EAAI1F,GAAG8c,GAAIo+B,EAAUl7C,GAAG8c,GAAIo+B,EAAUl7C,GAAGwsC,aAAc0O,EAAUl7C,GAAGysC,GAAIlB,EAAQ,EAAGgY,EAAiBG,GAElHh+C,EAAI1F,GAAGk2B,SACT3vB,EAAUoZ,YAAYu7B,EAAUl7C,GAAGysC,QAEf,MAAb/mC,EAAI1F,GAAGuK,IACXs5C,IACH3I,EAAUl7C,GAAKiC,KAAKmhD,uBAAuB19C,EAAI1F,GAAIuG,IAGrDo9C,EAAmBzI,EAAUl7C,GAAGyK,UAChC84C,EAAgBt+C,KAAK0+C,IACC,MAAbj+C,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAC1Es5C,IACH3I,EAAUl7C,GAAKiC,KAAKqhD,mBAAmB59C,EAAI1F,GAAIujD,EAAiBhY,IAGlEtpC,KAAKwhD,iBAAiBvI,EAAUl7C,KACV,MAAb0F,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAC1Es5C,GAMHD,EAAW1I,EAAUl7C,IACZmY,QAAS,IANlByrC,EAAW1zB,eAAeG,YAAY3qB,EAAI1F,GAAGuK,KACpCuiB,KAAK7qB,KAAMyD,EAAI1F,IACxBk7C,EAAUl7C,GAAK4jD,EACf3hD,KAAKg5C,eAAeh2C,KAAK2+C,IAM3BG,EAAa9+C,KAAK2+C,IACI,MAAbl+C,EAAI1F,GAAGuK,KACXs5C,GAOHD,EAAW1I,EAAUl7C,IACZmY,QAAS,GAPlByrC,EAAW1zB,eAAeG,YAAY3qB,EAAI1F,GAAGuK,IAC7C2wC,EAAUl7C,GAAK4jD,EACfA,EAAS92B,KAAK7qB,KAAMyD,EAAK1F,EAAGk7C,GAC5Bj5C,KAAKg5C,eAAeh2C,KAAK2+C,GACzBF,GAAS,GAMXK,EAAa9+C,KAAK2+C,IAGpB3hD,KAAKk+C,oBAAoBz6C,EAAI1F,GAAIA,EAAI,GAKvC,IAFAE,EAAM4jD,EAAU3jD,OAEXH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB8jD,EAAU9jD,GAAGmY,QAAS,EAKxB,IAFAjY,EAAM6jD,EAAa5jD,OAEdH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB+jD,EAAa/jD,GAAGmY,QAAS,GAI7Bk3B,gBAAgB3qC,UAAUuyC,mBAAqB,WAC7Ch1C,KAAK89C,kBACL,IAAI//C,EACAE,EAAM+B,KAAK+4C,WAAW76C,OAE1B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK+4C,WAAWh7C,GAAGwI,QAKrB,IAFAvG,KAAK+hD,cAEAhkD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,GACpBiC,KAAK+4C,WAAWh7C,GAAG0G,MAAQzE,KAAKinB,iBAC9BjnB,KAAK+4C,WAAWh7C,GAAG2rC,SACrB1pC,KAAK+4C,WAAWh7C,GAAG2rC,OAAOprB,aAAa,IAAKte,KAAK+4C,WAAWh7C,GAAG8D,GAE/D7B,KAAK+4C,WAAWh7C,GAAG8D,EAAI,OAAS7B,KAAK+4C,WAAWh7C,GAAG8D,GAGrD7B,KAAK+4C,WAAWh7C,GAAG0rC,MAAMnrB,aAAa,IAAKte,KAAK+4C,WAAWh7C,GAAG8D,GAAK,UAKzEurC,gBAAgB3qC,UAAUs/C,YAAc,WACtC,IAAIhkD,EAEAikD,EADA/jD,EAAM+B,KAAKm5C,iBAAiBj7C,OAGhC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBikD,EAAkBhiD,KAAKm5C,iBAAiBp7C,IAEnCiC,KAAKinB,eAAiB+6B,EAAgBljD,QAAQyF,eAAyC,IAAzBy9C,EAAgBjmC,MACjFimC,EAAgBT,GAAGS,EAAgBjmC,KAAMimC,EAAgBljD,QAASkB,KAAKinB,gBAK7EmmB,gBAAgB3qC,UAAUi2B,QAAU,WAClC14B,KAAKk1C,qBACLl1C,KAAK84C,WAAa,KAClB94C,KAAKi5C,UAAY,MAgCnBG,cAAc32C,UAAUsrC,YAAc,SAAUhlB,GAC9C,GAAIA,GAAe/oB,KAAKs5C,cAAc70C,KAAM,CAC1C,IAAIw9C,EAAajiD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EACpD8gD,EAAaliD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EACpD+gD,EAAUniD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,IACzDpB,KAAKu5C,aAAaj7B,aAAa,SAAU4jC,EAAW,GAAKD,EAAW,GAAK,UAAYA,EAAW,GAAK,KAAOC,EAAW,GAAKD,EAAW,IAAM,UAAYA,EAAW,GAAK,KAAOC,EAAW,GAAKD,EAAW,IAAM,UAAYA,EAAW,GAAK,UAAYE,EAAU,QAcvQxI,cAAcl3C,UAAUsrC,YAAc,SAAUhlB,GAC9C,GAAIA,GAAe/oB,KAAKs5C,cAAc70C,KAAM,CAC1C,IAAI1C,EAAQ/B,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAC/C+gD,EAAUniD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EACrDpB,KAAKu5C,aAAaj7B,aAAa,SAAU,WAAavc,EAAM,GAAK,YAAcA,EAAM,GAAK,YAAcA,EAAM,GAAK,UAAYogD,EAAU,QAgB7IvI,sBAAsBn3C,UAAUsrC,YAAc,SAAUhlB,GACtD,GAAIA,GAAe/oB,KAAKs5C,cAAc70C,KAAM,CAE1C,IACI29C,EADqB,GACbpiD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAO/CihD,EAAariD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EACpDkhD,EAAuB,GAAdD,EAAkB,EAAID,EAC/BG,EAAuB,GAAdF,EAAkB,EAAID,EACnCpiD,KAAK65C,eAAev7B,aAAa,eAAgBgkC,EAAS,IAAMC,GAKhE,IAAIC,EAAuD,GAA5CxiD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAS,OAAS,YACxEpB,KAAK65C,eAAev7B,aAAa,WAAYkkC,KAWjD1I,gBAAgBr3C,UAAUggD,WAAa,WACrC,IACI3nC,EAAM4nC,EAAW3kD,EAAGE,EADpB0kD,EAAe3iD,KAAK4mB,KAAKif,aAAa+c,UAAY5iD,KAAK4mB,KAAKif,aAAagd,WAgB7E,IAbiD,IAA7C7iD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,GACzCnD,EAAM+B,KAAK4mB,KAAKgX,YAAY3jB,gBAAgB/b,OAC5CH,EAAI,GAGJE,GADAF,EAAIiC,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,GACrC,GAGZshD,EAAY9+C,SAAS,MACX0a,aAAa,OAAQ,QAC/BokC,EAAUpkC,aAAa,iBAAkB,SACzCokC,EAAUpkC,aAAa,oBAAqB,GAEpCvgB,EAAIE,EAAKF,GAAK,EACpB+c,EAAOlX,SAAS,QAChB8+C,EAAUhlC,YAAY5C,GACtB9a,KAAK8b,MAAM9Y,KAAK,CACdvB,EAAGqZ,EACH7S,EAAGlK,IAIP,GAAkD,IAA9CiC,KAAKs5C,cAAcE,eAAe,IAAI/3C,EAAEL,EAAS,CACnD,IAAIo9B,EAAO56B,SAAS,QAChBoV,EAAKjY,kBACTy9B,EAAKlgB,aAAa,KAAMtF,GACxBwlB,EAAKlgB,aAAa,YAAa,SAC/BkgB,EAAK9gB,YAAYglC,GACjB1iD,KAAK4mB,KAAKC,WAAWhH,KAAKnC,YAAY8gB,GACtC,IAAIl9B,EAAIsC,SAAS,KAGjB,IAFAtC,EAAEgd,aAAa,OAAQ,OAASliB,aAAe,IAAM4c,EAAK,KAEnD2pC,EAAa,IAClBrhD,EAAEoc,YAAYilC,EAAa,IAG7B3iD,KAAK4mB,KAAKif,aAAanoB,YAAYpc,GACnCtB,KAAK+8C,OAASve,EACdkkB,EAAUpkC,aAAa,SAAU,aAC5B,GAAkD,IAA9Cte,KAAKs5C,cAAcE,eAAe,IAAI/3C,EAAEL,GAAyD,IAA9CpB,KAAKs5C,cAAcE,eAAe,IAAI/3C,EAAEL,EAAS,CAC7G,GAAkD,IAA9CpB,KAAKs5C,cAAcE,eAAe,IAAI/3C,EAAEL,EAG1C,IAFAuhD,EAAe3iD,KAAK4mB,KAAKif,aAAa+c,UAAY5iD,KAAK4mB,KAAKif,aAAagd,WAElEF,EAAazkD,QAClB8B,KAAK4mB,KAAKif,aAAa/jB,YAAY6gC,EAAa,IAIpD3iD,KAAK4mB,KAAKif,aAAanoB,YAAYglC,GACnC1iD,KAAK4mB,KAAKif,aAAaid,gBAAgB,QACvCJ,EAAUpkC,aAAa,SAAU,QAGnCte,KAAK+5C,aAAc,EACnB/5C,KAAK+iD,WAAaL,GAGpB5I,gBAAgBr3C,UAAUsrC,YAAc,SAAUhlB,GAC3C/oB,KAAK+5C,aACR/5C,KAAKyiD,aAGP,IAAI1kD,EAEAygC,EAAM1jB,EADN7c,EAAM+B,KAAK8b,MAAM5d,OAGrB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,IAAyB,IAArBiC,KAAK8b,MAAM/d,GAAGkK,IAIlBu2B,EAAOx+B,KAAK4mB,KAAKgX,YAAY8J,SAAS1nC,KAAK8b,MAAM/d,GAAGkK,GACpD6S,EAAO9a,KAAK8b,MAAM/d,GAAG0D,GAEjBsnB,GAAe/oB,KAAKs5C,cAAc70C,MAAQ+5B,EAAKr6B,KAAKM,OACtDqW,EAAKwD,aAAa,IAAKkgB,EAAK6J,UAG1Btf,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,MAAQzE,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,MAAQzE,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,MAAQzE,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,MAAQ+5B,EAAKr6B,KAAKM,MAAM,CAC7N,IAAIu+C,EAEJ,GAAiD,IAA7ChjD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,GAAwD,MAA7CpB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAW,CACtG,IAAID,EAAItE,KAAKc,IAAIqC,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAGpB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,GAAK,IACnGyG,EAAIhL,KAAKY,IAAIuC,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAGpB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,GAAK,IACnG4G,EAAI8S,EAAKmoC,iBACbD,EAAiB,SAAWh7C,EAAI7G,EAAI,IACpC,IAGI2G,EAHAo7C,EAAal7C,GAAKH,EAAI1G,GACtBywB,EAAU,EAA+C,EAA3C5xB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAQpB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,IACxG+hD,EAAQtmD,KAAKU,MAAM2lD,EAAatxB,GAGpC,IAAK9pB,EAAI,EAAGA,EAAIq7C,EAAOr7C,GAAK,EAC1Bk7C,GAAkB,KAAkD,EAA3ChjD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAQpB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,IAAM,IAG3H4hD,GAAkB,KAAW,GAAJh7C,EAAS,YAElCg7C,EAAiB,KAAkD,EAA3ChjD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAQpB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,IAGpH0Z,EAAKwD,aAAa,mBAAoB0kC,GAY1C,IARIj6B,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,OACxDzE,KAAK+iD,WAAWzkC,aAAa,eAA2D,EAA3Cte,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,IAGlF2nB,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,OACxDzE,KAAK+iD,WAAWzkC,aAAa,UAAWte,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,IAG/B,IAA9CpB,KAAKs5C,cAAcE,eAAe,IAAI/3C,EAAEL,GAAyD,IAA9CpB,KAAKs5C,cAAcE,eAAe,IAAI/3C,EAAEL,KACzF2nB,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,MAAM,CAC9D,IAAI1C,EAAQ/B,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EACnDpB,KAAK+iD,WAAWzkC,aAAa,SAAU,OAAShhB,SAAoB,IAAXyE,EAAM,IAAY,IAAMzE,SAAoB,IAAXyE,EAAM,IAAY,IAAMzE,SAAoB,IAAXyE,EAAM,IAAY,OA+BnJi4C,iBAAiBv3C,UAAUsrC,YAAc,SAAUhlB,GACjD,GAAIA,GAAe/oB,KAAKs5C,cAAc70C,KAAM,CAC1C,IAAI2+C,EAASpjD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAChDiiD,EAASrjD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAChDkiD,EAAStjD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAChDmiD,EAASD,EAAO,GAAK,IAAMD,EAAO,GAAK,IAAMD,EAAO,GACpDI,EAASF,EAAO,GAAK,IAAMD,EAAO,GAAK,IAAMD,EAAO,GACpDK,EAASH,EAAO,GAAK,IAAMD,EAAO,GAAK,IAAMD,EAAO,GACxDpjD,KAAKk6C,QAAQ57B,aAAa,cAAeilC,GACzCvjD,KAAKm6C,QAAQ77B,aAAa,cAAeklC,GACzCxjD,KAAKo6C,QAAQ97B,aAAa,cAAemlC,KA0C7CpJ,mBAAmB53C,UAAU63C,aAAe,SAAU16C,EAAMq6C,GAC1D,IAAIkD,EAASv5C,SAAShE,GAGtB,OAFAu9C,EAAO7+B,aAAa,OAAQ,SAC5B27B,EAAoBv8B,YAAYy/B,GACzBA,GAGT9C,mBAAmB53C,UAAUihD,cAAgB,SAAUC,EAAYC,EAAYC,EAAOC,EAAaC,GAcjG,IAbA,IAEI3vC,EAMA4vC,EARAl5B,EAAM,EAGNntB,EAAMd,KAAKc,IAAIgmD,EAAYC,GAC3BnmD,EAAMZ,KAAKY,IAAIkmD,EAAYC,GAC3BK,EAAQvgD,MAAMwgD,KAAK,KAAM,CAC3BhmD,OALa,MAQX8rB,EAAM,EACNm6B,EAAcJ,EAAcD,EAC5BM,EAAaR,EAAaD,EAEvB74B,GAAO,KAIVk5B,GAHF5vC,EAAO0W,EAAM,MAEDntB,EACGymD,EAAa,EAAIL,EAAcD,EACnC1vC,GAAQ3W,EACJ2mD,EAAa,EAAIN,EAAcC,EAE/BD,EAAcK,EAActnD,KAAKI,KAAKmX,EAAOuvC,GAAcS,EAAY,EAAIP,GAG1FI,EAAMj6B,KAASg6B,EACfl5B,GAAO,IAAM,IAGf,OAAOm5B,EAAMlmC,KAAK,MAGpBs8B,mBAAmB53C,UAAUsrC,YAAc,SAAUhlB,GACnD,GAAIA,GAAe/oB,KAAKs5C,cAAc70C,KAAM,CAC1C,IAAIrG,EACAo7C,EAAiBx5C,KAAKs5C,cAAcE,eAEpCx5C,KAAKw6C,kBAAoBzxB,GAAeywB,EAAe,GAAG/3C,EAAEgD,MAAQ+0C,EAAe,GAAG/3C,EAAEgD,MAAQ+0C,EAAe,GAAG/3C,EAAEgD,MAAQ+0C,EAAe,GAAG/3C,EAAEgD,MAAQ+0C,EAAe,GAAG/3C,EAAEgD,QAC9KrG,EAAM4B,KAAK0jD,cAAclK,EAAe,GAAG/3C,EAAEL,EAAGo4C,EAAe,GAAG/3C,EAAEL,EAAGo4C,EAAe,GAAG/3C,EAAEL,EAAGo4C,EAAe,GAAG/3C,EAAEL,EAAGo4C,EAAe,GAAG/3C,EAAEL,GACzIpB,KAAKw6C,gBAAgBl8B,aAAa,cAAelgB,GACjD4B,KAAKy6C,gBAAgBn8B,aAAa,cAAelgB,GACjD4B,KAAK06C,gBAAgBp8B,aAAa,cAAelgB,IAG/C4B,KAAKk6C,UAAYnxB,GAAeywB,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,QAC3KrG,EAAM4B,KAAK0jD,cAAclK,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,GAC9IpB,KAAKk6C,QAAQ57B,aAAa,cAAelgB,IAGvC4B,KAAKm6C,UAAYpxB,GAAeywB,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,QAC3KrG,EAAM4B,KAAK0jD,cAAclK,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,GAC9IpB,KAAKm6C,QAAQ77B,aAAa,cAAelgB,IAGvC4B,KAAKo6C,UAAYrxB,GAAeywB,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,QAC3KrG,EAAM4B,KAAK0jD,cAAclK,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,GAC9IpB,KAAKo6C,QAAQ97B,aAAa,cAAelgB,IAGvC4B,KAAKu6C,UAAYxxB,GAAeywB,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,MAAQ+0C,EAAe,IAAI/3C,EAAEgD,QAC3KrG,EAAM4B,KAAK0jD,cAAclK,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,EAAGo4C,EAAe,IAAI/3C,EAAEL,GAC9IpB,KAAKu6C,QAAQj8B,aAAa,cAAelgB,MAkD/Cu8C,oBAAoBl4C,UAAUsrC,YAAc,SAAUhlB,GACpD,GAAIA,GAAe/oB,KAAKs5C,cAAc70C,KAAM,CAK1C,IAJIskB,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,OACxDzE,KAAK65C,eAAev7B,aAAa,eAAgBte,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,GAG1F2nB,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,KAAM,CAC9D,IAAI4/C,EAAMrkD,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EACjDpB,KAAK66C,QAAQv8B,aAAa,cAAelc,SAASvF,KAAKC,MAAe,IAATunD,EAAI,IAAWxnD,KAAKC,MAAe,IAATunD,EAAI,IAAWxnD,KAAKC,MAAe,IAATunD,EAAI,MAOvH,IAJIt7B,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,OACxDzE,KAAK66C,QAAQv8B,aAAa,gBAAiBte,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,KAGpF2nB,GAAe/oB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,MAAQzE,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEgD,KAAM,CAC7G,IAAI2tB,EAAWpyB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAClDsF,GAAS1G,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAAI,IAAM5C,UAC1D0M,EAAIknB,EAAWv1B,KAAKoJ,IAAIS,GACxByE,EAAIinB,EAAWv1B,KAAKsJ,IAAIO,GAC5B1G,KAAK46C,SAASt8B,aAAa,KAAMpT,GACjClL,KAAK46C,SAASt8B,aAAa,KAAMnT,MAevC,IAAIm5C,iBAAmB,GAEvB,SAASC,gBAAgBC,EAAYlL,EAAe1yB,GAClD5mB,KAAK+5C,aAAc,EACnB/5C,KAAKs5C,cAAgBA,EACrBt5C,KAAKwkD,WAAaA,EAClBxkD,KAAK4mB,KAAOA,EACZA,EAAK81B,aAAe94C,SAAS,KAC7BgjB,EAAK81B,aAAah/B,YAAYkJ,EAAKif,cACnCjf,EAAK81B,aAAah/B,YAAYkJ,EAAK+1B,oBACnC/1B,EAAKkuB,YAAcluB,EAAK81B,aAsG1B,SAASgB,WAAW92B,GAClB,IAAI7oB,EAMAu7C,EALAr7C,EAAM2oB,EAAK7K,KAAK0oC,GAAK79B,EAAK7K,KAAK0oC,GAAGvmD,OAAS,EAC3Co7B,EAAQv4B,kBACRw4B,EAAMH,eAAeC,aAAaC,GAClC3rB,EAAQ,EAIZ,IAHA3N,KAAK0kD,QAAU,GAGV3mD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBu7C,EAAgB,KAEW,KAAvB1yB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,IAClBqF,GAAS,EACT2rC,EAAgB,IAAIF,cAAc7f,EAAK3S,EAAK21B,eAAe/C,eAAez7C,KAC1C,KAAvB6oB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,IACzBqF,GAAS,EACT2rC,EAAgB,IAAIK,cAAcpgB,EAAK3S,EAAK21B,eAAe/C,eAAez7C,KAC1C,KAAvB6oB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,GACzBgxC,EAAgB,IAAIQ,gBAAgBlzB,EAAMA,EAAK21B,eAAe/C,eAAez7C,IAC7C,KAAvB6oB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,IACzBqF,GAAS,EACT2rC,EAAgB,IAAIU,iBAAiBzgB,EAAK3S,EAAK21B,eAAe/C,eAAez7C,KAC7C,KAAvB6oB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,IACzBqF,GAAS,EACT2rC,EAAgB,IAAIe,mBAAmB9gB,EAAK3S,EAAK21B,eAAe/C,eAAez7C,KAC/C,KAAvB6oB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,IACzBqF,GAAS,EACT2rC,EAAgB,IAAIqB,oBAAoBphB,EAAK3S,EAAK21B,eAAe/C,eAAez7C,KAChD,KAAvB6oB,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,GAEzBgxC,EAAgB,IAAIiL,gBAAgBhrB,EAAK3S,EAAK21B,eAAe/C,eAAez7C,GAAI6oB,GAChD,KAAvBA,EAAK7K,KAAK0oC,GAAG1mD,GAAGuK,KACzBqF,GAAS,EACT2rC,EAAgB,IAAIM,sBAAsBrgB,EAAK3S,EAAK21B,eAAe/C,eAAez7C,KAGhFu7C,GACFt5C,KAAK0kD,QAAQ1hD,KAAKs2C,GAIlB3rC,IACFiZ,EAAKC,WAAWhH,KAAKnC,YAAY6b,GACjC3S,EAAKif,aAAavnB,aAAa,SAAU,OAASliB,aAAe,IAAMk9B,EAAQ,MAG7Et5B,KAAK0kD,QAAQxmD,QACf0oB,EAAKkiB,uBAAuB9oC,MAahC,SAASmnC,gBACPnnC,KAAKyvC,MAAQ,GACbzvC,KAAKuvC,QAAU,EACfvvC,KAAK8uC,IAAM,IAAI/oC,OACf/F,KAAKmvC,GAAK,EACV,IAAIpxC,EAIJ,IAFAiC,KAAK0vC,QAAUtsC,iBAAiB,UADtB,IAGLrF,EAAI,EAAGA,EAHF,GAGWA,GAAK,EACxBiC,KAAKyvC,MAAM1xC,GAAKqF,iBAAiB,UAAW,IAG9CpD,KAAKsW,QAPK,GA8BZ,SAASquC,iBAoET,SAASlW,eAAe1yB,EAAM8K,EAAYV,GACxCnmB,KAAK83B,UAAYjR,EAAWgmB,aAAa9wB,EAAK3B,OAC9Cpa,KAAK44B,IAAM/R,EAAWimB,YAAYnU,SAAS34B,KAAK83B,WAChD93B,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAyCrC,SAASuoB,cAAc3yB,EAAM8K,EAAYV,GACvCnmB,KAAKqZ,gBAAiB,EACtBrZ,KAAKsZ,OAASyC,EAAKzC,OACnBtZ,KAAKwmC,gBAAkB,GACvBxmC,KAAK2zB,SAAWr1B,iBAAiB0B,KAAKsZ,OAAOpb,QAC7C8B,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GACnCnmB,KAAK24C,GAAK58B,EAAK48B,GAAK52B,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK48B,GAAI,EAAG9xB,EAAWuC,UAAWppB,MAAQ,CAC1F44C,cAAc,GAuClB,SAASgM,cAAc7oC,EAAMjd,GAC3BkB,KAAK+b,KAAOA,EACZ/b,KAAKlB,QAAUA,EACfkB,KAAKia,gBAAkBja,KAAK+b,KAAK9B,iBAAmB,GACpDja,KAAK0nC,SAAWppC,iBAAiB0B,KAAKia,gBAAgB/b,QACtD,IAAIH,EACAE,EAAM+B,KAAKia,gBAAgB/b,OAC3B2mD,GAAW,EAEf,IAAK9mD,EAAI,EAAGA,EAAIE,EAAKF,IACkB,MAAjCiC,KAAKia,gBAAgBlc,GAAG+H,OAC1B++C,GAAW,GAGb7kD,KAAK0nC,SAAS3pC,GAAKgtB,qBAAqB2d,aAAa1oC,KAAKlB,QAASkB,KAAKia,gBAAgBlc,GAAI,GAG9FiC,KAAK6kD,SAAWA,EAEZA,GACF7kD,KAAKlB,QAAQgqC,uBAAuB9oC,MAoDxC,SAASuuC,eAAexyB,EAAM8K,EAAYV,GACxCnmB,KAAKsa,OAAS,GACdta,KAAK84C,WAAa/8B,EAAKzB,OACvBta,KAAK+4C,WAAa,GAClB/4C,KAAKi5C,UAAY,GACjBj5C,KAAKuqC,aAAe,GACpBvqC,KAAKg5C,eAAiB,GACtBh5C,KAAKk5C,kBAAoB,GACzBl5C,KAAK63C,kBAAoB,IAAIL,sBAC7Bx3C,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAohBrC,SAASwoB,eAAe5yB,EAAM8K,EAAYV,GACxCnmB,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAarC,SAASqoB,cAAczyB,EAAM8K,EAAYV,GACvCnmB,KAAK64C,UAAY,GACjB74C,KAAKo9B,QAAU,EACfp9B,KAAKi9B,eAAgB,EACrBj9B,KAAKk9B,iBAAkB,EACvBl9B,KAAKm9B,iBAAkB,EACvBn9B,KAAK8kD,QAAS,EACd9kD,KAAK+kD,MAAO,EACZ/kD,KAAK28B,cAAgB,EACrB38B,KAAKglD,cAAgB,KACrBhlD,KAAK26B,WAAa,SAClB36B,KAAK6lB,OAAS,CACZk/B,KAAM,gBACND,OAAQ,gBACRG,OAAQ,EACRC,OAAQ,IAEVllD,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GA0NrC,SAASg/B,aAIT,SAASC,aAAarpC,EAAM8K,EAAYV,IAoFxC,SAASmrB,cAAcv1B,EAAM8K,EAAYV,GACvCnmB,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAyBrC,SAASkrB,aAAat1B,EAAM8K,EAAYV,GACtCnmB,KAAKsZ,OAASyC,EAAKzC,OACnBtZ,KAAKwnC,YAAczrB,EAAKhC,QACxB/Z,KAAKqZ,gBAAiB,EACtBrZ,KAAKwmC,gBAAkB,GACvBxmC,KAAK2zB,SAAW3zB,KAAKsZ,OAAShb,iBAAiB0B,KAAKsZ,OAAOpb,QAAU,GACrE8B,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GACnCnmB,KAAK24C,GAAK58B,EAAK48B,GAAK52B,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK48B,GAAI,EAAG9xB,EAAWuC,UAAWppB,MAAQ,CAC1F44C,cAAc,GAuClB,SAAS3H,cAAcl1B,EAAM8K,EAAYV,GAEvCnmB,KAAKsa,OAAS,GAEdta,KAAK84C,WAAa/8B,EAAKzB,OAEvBta,KAAK+4C,WAAa,GAElB/4C,KAAKg5C,eAAiB,GAEtBh5C,KAAKi5C,UAAY,GAEjBj5C,KAAKk5C,kBAAoB,GAEzBl5C,KAAKm5C,iBAAmB,GACxBn5C,KAAKqlD,gBAAkBzhD,SAAS,KAChC5D,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAGnCnmB,KAAKuqC,aAAe,GACpBvqC,KAAKslD,YAAc,CACjBp6C,EAAG,OACHC,GAAI,OACJjK,EAAG,EACHyb,EAAG,GA2MP,SAASu0B,aAAan1B,EAAM8K,EAAYV,GACtCnmB,KAAK64C,UAAY,GACjB74C,KAAKulD,UAAY,GACjBvlD,KAAKslD,YAAc,CACjBp6C,EAAG,OACHC,GAAI,OACJjK,EAAG,EACHyb,EAAG,GAEL3c,KAAK26B,WAAa,MAClB36B,KAAKwlD,UAAW,EAChBxlD,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GAuQrC,SAASirB,cAAcr1B,EAAM8K,EAAYV,GACvCnmB,KAAK83B,UAAYjR,EAAWgmB,aAAa9wB,EAAK3B,OAC9Cpa,KAAKw0C,YAAYz4B,EAAM8K,EAAYV,GA4BrC,SAASgrB,eAAep1B,EAAM8K,EAAYV,GACxCnmB,KAAKgiB,YACLhiB,KAAKy0C,aAAa14B,EAAM8K,EAAYV,GACpCnmB,KAAK+yC,gBACL,IAAIlrB,EAAU9F,gBAAgB8F,QAe9B,GAdA7nB,KAAKylD,GAAK59B,EAAQ7nB,KAAM+b,EAAK0pC,GAAI,EAAG,EAAGzlD,MAEnC+b,EAAKnB,GAAGnZ,EAAEN,GACZnB,KAAKmoB,GAAKN,EAAQ7nB,KAAM+b,EAAKnB,GAAGnZ,EAAEyJ,EAAG,EAAG,EAAGlL,MAC3CA,KAAKooB,GAAKP,EAAQ7nB,KAAM+b,EAAKnB,GAAGnZ,EAAE0J,EAAG,EAAG,EAAGnL,MAC3CA,KAAKqoB,GAAKR,EAAQ7nB,KAAM+b,EAAKnB,GAAGnZ,EAAE2J,EAAG,EAAG,EAAGpL,OAE3CA,KAAKyB,EAAIomB,EAAQ7nB,KAAM+b,EAAKnB,GAAGnZ,EAAG,EAAG,EAAGzB,MAGtC+b,EAAKnB,GAAGjT,IACV3H,KAAK2H,EAAIkgB,EAAQ7nB,KAAM+b,EAAKnB,GAAGjT,EAAG,EAAG,EAAG3H,OAGtC+b,EAAKnB,GAAG6N,GAAG1gB,EAAE7J,QAAU6d,EAAKnB,GAAG6N,GAAG1gB,EAAE,GAAGmb,GAAI,CAC7C,IAAInlB,EACAE,EAAM8d,EAAKnB,GAAG6N,GAAG1gB,EAAE7J,OAEvB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBge,EAAKnB,GAAG6N,GAAG1gB,EAAEhK,GAAGmlB,GAAK,KACrBnH,EAAKnB,GAAG6N,GAAG1gB,EAAEhK,GAAGolB,GAAK,KAIzBnjB,KAAKyoB,GAAKZ,EAAQ7nB,KAAM+b,EAAKnB,GAAG6N,GAAI,EAAGjqB,UAAWwB,MAClDA,KAAKyoB,GAAGvE,IAAK,EACblkB,KAAKsoB,GAAKT,EAAQ7nB,KAAM+b,EAAKnB,GAAG0N,GAAI,EAAG9pB,UAAWwB,MAClDA,KAAKuoB,GAAKV,EAAQ7nB,KAAM+b,EAAKnB,GAAG2N,GAAI,EAAG/pB,UAAWwB,MAClDA,KAAKwoB,GAAKX,EAAQ7nB,KAAM+b,EAAKnB,GAAG4N,GAAI,EAAGhqB,UAAWwB,MAClDA,KAAK8oB,IAAM,IAAI/iB,OACf/F,KAAK0lD,SAAW,IAAI3/C,OACpB/F,KAAKinB,eAAgB,EAErBjnB,KAAK0yC,eAAiB,CACpBC,MAAO3yC,MAyHX,SAAS2lD,YAphETpB,gBAAgB9hD,UAAUmjD,WAAa,SAAUpnB,GAI/C,IAHA,IAAIzgC,EAAI,EACJE,EAAMqmD,iBAAiBpmD,OAEpBH,EAAIE,GAAK,CACd,GAAIqmD,iBAAiBvmD,KAAOygC,EAC1B,OAAO8lB,iBAAiBvmD,GAG1BA,GAAK,EAGP,OAAO,MAGTwmD,gBAAgB9hD,UAAUojD,gBAAkB,SAAUrnB,EAAMsnB,GAC1D,IAAI7oC,EAAauhB,EAAKqH,aAAa5oB,WAEnC,GAAKA,EAAL,CAQA,IAJA,IAYI8oC,EAZAnD,EAAW3lC,EAAW2lC,SACtB7kD,EAAI,EACJE,EAAM2kD,EAAS1kD,OAEZH,EAAIE,GACL2kD,EAAS7kD,KAAOygC,EAAKqH,cAIzB9nC,GAAK,EAKHA,GAAKE,EAAM,IACb8nD,EAAYnD,EAAS7kD,EAAI,IAG3B,IAAIioD,EAAUpiD,SAAS,OACvBoiD,EAAQ1nC,aAAa,OAAQ,IAAMwnC,GAE/BC,EACF9oC,EAAWmxB,aAAa4X,EAASD,GAEjC9oC,EAAWS,YAAYsoC,KAI3BzB,gBAAgB9hD,UAAUwjD,iBAAmB,SAAUr/B,EAAM4X,GAC3D,IAAKx+B,KAAK4lD,WAAWpnB,GAAO,CAC1B,IAAIsnB,EAAW/kD,kBACXg8C,EAASn5C,SAAS,QACtBm5C,EAAOz+B,aAAa,KAAMkgB,EAAKyJ,SAC/B8U,EAAOz+B,aAAa,YAAa,SAEjCgmC,iBAAiBthD,KAAKw7B,GAEtB,IAAI3e,EAAO+G,EAAKC,WAAWhH,KAC3BA,EAAKnC,YAAYq/B,GACjB,IAAImJ,EAAStiD,SAAS,UACtBsiD,EAAO5nC,aAAa,KAAMwnC,GAC1B9lD,KAAK6lD,gBAAgBrnB,EAAMsnB,GAC3BI,EAAOxoC,YAAY8gB,EAAKqH,cACxBhmB,EAAKnC,YAAYwoC,GACjB,IAAIF,EAAUpiD,SAAS,OACvBoiD,EAAQ1nC,aAAa,OAAQ,IAAMwnC,GACnC/I,EAAOr/B,YAAYsoC,GACnBxnB,EAAKziB,KAAKytB,IAAK,EACfhL,EAAK8P,OAGP1nB,EAAKinB,SAASrP,EAAKyJ,UAGrBsc,gBAAgB9hD,UAAUggD,WAAa,WAMrC,IALA,IAAIr/B,EAAMpjB,KAAKs5C,cAAcE,eAAe,GAAG/3C,EAAEL,EAC7CuyB,EAAW3zB,KAAK4mB,KAAKT,KAAKwN,SAC1B51B,EAAI,EACJE,EAAM01B,EAASz1B,OAEZH,EAAIE,GACL01B,EAAS51B,IAAM41B,EAAS51B,GAAGge,KAAKqH,MAAQA,GAC1CpjB,KAAKimD,iBAAiBjmD,KAAK4mB,KAAM+M,EAAS51B,IAG5CA,GAAK,EAGPiC,KAAK+5C,aAAc,GAGrBwK,gBAAgB9hD,UAAUsrC,YAAc,WACjC/tC,KAAK+5C,aACR/5C,KAAKyiD,cAwDT/E,WAAWj7C,UAAUsrC,YAAc,SAAU9mB,GAC3C,IAAIlpB,EACAE,EAAM+B,KAAK0kD,QAAQxmD,OAEvB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAK0kD,QAAQ3mD,GAAGgwC,YAAY9mB,IAoBhCkgB,cAAc1kC,UAAU+sC,UAAY,WAClC,IAAI2W,EAA2B,EAAfnmD,KAAKsW,QACjB8vC,EAAiBpmD,KAAK0vC,QAC1B1vC,KAAK0vC,QAAUtsC,iBAAiB,UAAW+iD,GAC3CnmD,KAAK0vC,QAAQ2W,IAAID,GACjB,IAAIroD,EAAI,EAER,IAAKA,EAAIiC,KAAKsW,QAASvY,EAAIooD,EAAWpoD,GAAK,EACzCiC,KAAKyvC,MAAM1xC,GAAKqF,iBAAiB,UAAW,IAG9CpD,KAAKsW,QAAU6vC,GAGjBhf,cAAc1kC,UAAU8D,MAAQ,WAC9BvG,KAAKuvC,QAAU,EACfvvC,KAAK8uC,IAAIvoC,QACTvG,KAAKmvC,GAAK,GAKZwV,cAAcliD,UAAY,CACxB6jD,eAAgB,aAChB5R,oBAAqB,aACrBC,wBAAyB,WACvB30C,KAAKgvC,cAAgBhvC,KAAK6mB,WAAWmoB,cACrChvC,KAAKy9C,yBAA2B,IAAI0H,UAAUnlD,OAEhD60C,cAAe,aACfsH,aAAc,WACZ,IAAIt1B,EAAa7mB,KAAK6mB,WAEtB,GAAIA,EAAW8oB,YAAc3vC,KAAK+b,KAAKsgC,GAAI,CACzCx1B,EAAW8oB,UAAY3vC,KAAK+b,KAAKsgC,GACjC,IAAID,EAAiBx3C,aAAa5E,KAAK+b,KAAKsgC,IAC5Cx1B,EAAWmoB,cAAcuX,yBAA2BnK,IAGxDxH,2BAA4B,WAC1B50C,KAAK49B,YAAc,IAAIgnB,cAAc5kD,KAAK+b,KAAM/b,OAElDwmD,YAAa,WACNxmD,KAAK6zC,QAAY7zC,KAAK4zC,YAAa5zC,KAAK8zC,gBAC3C9zC,KAAK6zC,QAAS,IAGlB4S,YAAa,WACPzmD,KAAK4zC,YAAc5zC,KAAK8zC,gBAC1B9zC,KAAK6zC,QAAS,EACd7zC,KAAKinB,eAAgB,EACrBjnB,KAAK49B,YAAY3W,eAAgB,IAGrC8mB,YAAa,WACX,IAAI/tC,KAAK6zC,SAAU7zC,KAAK+b,KAAKytB,GAA7B,CAIAxpC,KAAKuzC,kBACLvzC,KAAKq0C,mBACLr0C,KAAKm8C,eACL,IAAIuK,EAAkC,IAAjB1mD,KAAK+b,KAAKzT,GAC/BtI,KAAK6mB,WAAW+H,SAASygB,KAAKqX,GAC9B1mD,KAAK6mB,WAAW+H,SAASggB,aAAa5uC,KAAK0yC,eAAe5pB,IAAItiB,OAC9DxG,KAAK6mB,WAAW+H,SAASqgB,WAAWjvC,KAAK0yC,eAAeC,MAAMxqC,EAAE/G,GAChEpB,KAAKg1C,qBACLh1C,KAAK6mB,WAAW+H,SAASwgB,QAAQsX,GAE7B1mD,KAAK49B,YAAYinB,UACnB7kD,KAAK6mB,WAAW+H,SAASwgB,SAAQ,GAG/BpvC,KAAKinB,gBACPjnB,KAAKinB,eAAgB,KAGzByR,QAAS,WACP14B,KAAKgvC,cAAgB,KACrBhvC,KAAK+b,KAAO,KACZ/b,KAAK6mB,WAAa,KAClB7mB,KAAK49B,YAAYlF,WAEnBiG,QAAS,IAAI54B,QAEf4+C,cAAcliD,UAAU4rC,KAAOsW,cAAcliD,UAAU+jD,YACvD7B,cAAcliD,UAAU6rC,KAAOqW,cAAcliD,UAAUgkD,YAQvD7zC,gBAAgB,CAACslC,YAAajP,iBAAkB0b,cAAe5b,iBAAkBC,aAAcE,mBAAoBuF,gBACnHA,eAAehsC,UAAU+xC,YAAcpH,gBAAgB3qC,UAAU+xC,YACjE/F,eAAehsC,UAAUwrC,aAAeX,cAAc7qC,UAAUwrC,aAEhEQ,eAAehsC,UAAUoyC,cAAgB,WACvC,GAAI70C,KAAK44B,IAAIlrB,QAAU1N,KAAK83B,UAAUnb,IAAM3c,KAAK44B,IAAIlrB,OAAS1N,KAAK83B,UAAU52B,IAAMlB,KAAK44B,IAAIvB,QAAS,CACnG,IAAID,EAASrzB,UAAU,UACvBqzB,EAAO1pB,MAAQ1N,KAAK83B,UAAUnb,EAC9Bya,EAAOC,OAASr3B,KAAK83B,UAAU52B,EAC/B,IAKIylD,EAAWC,EALXtvB,EAAMF,EAAOxY,WAAW,MACxBioC,EAAO7mD,KAAK44B,IAAIlrB,MAChBo5C,EAAO9mD,KAAK44B,IAAIvB,OAChB0vB,EAASF,EAAOC,EAChBE,EAAYhnD,KAAK83B,UAAUnb,EAAI3c,KAAK83B,UAAU52B,EAE9CmvC,EAAMrwC,KAAK83B,UAAUonB,IAAMl/C,KAAK6mB,WAAWif,aAAaE,yBAExD+gB,EAASC,GAAqB,mBAAR3W,GAA4B0W,EAASC,GAAqB,mBAAR3W,EAE1EsW,GADAC,EAAaE,GACYE,EAGzBJ,GADAD,EAAYE,GACaG,EAG3B1vB,EAAI2vB,UAAUjnD,KAAK44B,KAAMiuB,EAAOF,GAAa,GAAIG,EAAOF,GAAc,EAAGD,EAAWC,EAAY,EAAG,EAAG5mD,KAAK83B,UAAUnb,EAAG3c,KAAK83B,UAAU52B,GACvIlB,KAAK44B,IAAMxB,IAIfqX,eAAehsC,UAAUuyC,mBAAqB,SAAUkS,GACtDlnD,KAAKgvC,cAAciY,UAAUjnD,KAAK44B,IAAK,EAAG,IAG5C6V,eAAehsC,UAAUi2B,QAAU,WACjC14B,KAAK44B,IAAM,MAcbhmB,gBAAgB,CAAC+zB,eAAgB2R,aAAcqM,eAAgBjW,eAE/DA,cAAcjsC,UAAUuyC,mBAAqB,WAC3C,IAQIj3C,EARAu5B,EAAMt3B,KAAKgvC,cAWf,IAVA1X,EAAIiZ,YACJjZ,EAAI6vB,OAAO,EAAG,GACd7vB,EAAI8vB,OAAOpnD,KAAK+b,KAAKY,EAAG,GACxB2a,EAAI8vB,OAAOpnD,KAAK+b,KAAKY,EAAG3c,KAAK+b,KAAK7a,GAClCo2B,EAAI8vB,OAAO,EAAGpnD,KAAK+b,KAAK7a,GACxBo2B,EAAI8vB,OAAO,EAAG,GACd9vB,EAAImZ,OAIC1yC,EAFKiC,KAAKsZ,OAAOpb,OAEP,EAAGH,GAAK,EAAGA,GAAK,GACzBiC,KAAKqZ,gBAAkBrZ,KAAK2zB,SAAS51B,KACvCiC,KAAK2zB,SAAS51B,GAAGgwC,eAKvBW,cAAcjsC,UAAUi2B,QAAU,WAChC,IAAI36B,EAGJ,IAAKA,EAFKiC,KAAKsZ,OAAOpb,OAEP,EAAGH,GAAK,EAAGA,GAAK,EACzBiC,KAAK2zB,SAAS51B,IAChBiC,KAAK2zB,SAAS51B,GAAG26B,UAIrB14B,KAAKsZ,OAAS,KACdtZ,KAAK2zB,SAAW,MA2BlBixB,cAAcniD,UAAUsrC,YAAc,WACpC,GAAK/tC,KAAK6kD,SAAV,CAIA,IAEI9mD,EAEA6N,EAAIG,EAAKgQ,EAJTvT,EAAYxI,KAAKlB,QAAQ4zC,eAAe5pB,IACxCwO,EAAMt3B,KAAKlB,QAAQkwC,cAEnB/wC,EAAM+B,KAAKia,gBAAgB/b,OAI/B,IAFAo5B,EAAIiZ,YAECxyC,EAAI,EAAGA,EAAIE,EAAKF,IACnB,GAAqC,MAAjCiC,KAAKia,gBAAgBlc,GAAG+H,KAAc,CACpC9F,KAAKia,gBAAgBlc,GAAGm1B,MAC1BoE,EAAI6vB,OAAO,EAAG,GACd7vB,EAAI8vB,OAAOpnD,KAAKlB,QAAQ+nB,WAAWqmB,SAASvwB,EAAG,GAC/C2a,EAAI8vB,OAAOpnD,KAAKlB,QAAQ+nB,WAAWqmB,SAASvwB,EAAG3c,KAAKlB,QAAQ+nB,WAAWqmB,SAAShsC,GAChFo2B,EAAI8vB,OAAO,EAAGpnD,KAAKlB,QAAQ+nB,WAAWqmB,SAAShsC,GAC/Co2B,EAAI8vB,OAAO,EAAG,IAGhBrrC,EAAO/b,KAAK0nC,SAAS3pC,GAAGqD,EACxBwK,EAAKpD,EAAUqD,kBAAkBkQ,EAAK3a,EAAE,GAAG,GAAI2a,EAAK3a,EAAE,GAAG,GAAI,GAC7Dk2B,EAAI6vB,OAAOv7C,EAAG,GAAIA,EAAG,IACrB,IAAI9D,EACA4R,EAAOqC,EAAKzF,QAEhB,IAAKxO,EAAI,EAAGA,EAAI4R,EAAM5R,IACpBiE,EAAMvD,EAAUyD,oBAAoB8P,EAAK5T,EAAEL,EAAI,GAAIiU,EAAKhe,EAAE+J,GAAIiU,EAAK3a,EAAE0G,IACrEwvB,EAAI+vB,cAAct7C,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAGhEA,EAAMvD,EAAUyD,oBAAoB8P,EAAK5T,EAAEL,EAAI,GAAIiU,EAAKhe,EAAE,GAAIge,EAAK3a,EAAE,IACrEk2B,EAAI+vB,cAAct7C,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAIlE/L,KAAKlB,QAAQ+nB,WAAW+H,SAASygB,MAAK,GACtC/X,EAAImZ,SAGNmU,cAAcniD,UAAUo7B,gBAAkB4J,YAAYhlC,UAAUo7B,gBAEhE+mB,cAAcniD,UAAUi2B,QAAU,WAChC14B,KAAKlB,QAAU,MAejB8T,gBAAgB,CAACslC,YAAajP,iBAAkB0b,cAAevM,cAAerP,iBAAkBC,aAAcE,mBAAoBqF,gBAClIA,eAAe9rC,UAAU+xC,YAAcrL,qBAAqB1mC,UAAU+xC,YACtEjG,eAAe9rC,UAAU6kD,gBAAkB,CACzCnF,QAAS,EACT9O,QAAQ,GAEV9E,eAAe9rC,UAAU8kD,aAAe,GAExChZ,eAAe9rC,UAAUoyC,cAAgB,WACvC70C,KAAKugD,aAAavgD,KAAK84C,WAAY94C,KAAKi5C,UAAWj5C,KAAKuqC,cAAc,EAAM,KAG9EgE,eAAe9rC,UAAUm+C,mBAAqB,SAAU7kC,EAAM03B,GAC5D,IAAImD,EAAY,CACd76B,KAAMA,EACNnc,KAAMmc,EAAKzT,GACXk/C,cAAexnD,KAAK63C,kBAAkBG,qBAAqBvE,GAC3DA,WAAY,GACZ9f,SAAU,GACVzd,QAAoB,IAAZ6F,EAAKytB,IAEXqX,EAAc,GAsBlB,GApBe,MAAX9kC,EAAKzT,IAAyB,MAAXyT,EAAKzT,IAC1Bu4C,EAAYj5C,EAAIma,gBAAgB8F,QAAQ7nB,KAAM+b,EAAKnU,EAAG,EAAG,IAAK5H,MAEzD6gD,EAAYj5C,EAAEG,IACjB6uC,EAAU6Q,GAAK,OAASnqD,SAASujD,EAAYj5C,EAAExG,EAAE,IAAM,IAAM9D,SAASujD,EAAYj5C,EAAExG,EAAE,IAAM,IAAM9D,SAASujD,EAAYj5C,EAAExG,EAAE,IAAM,MAE9G,OAAZ2a,EAAKzT,IAA2B,OAAZyT,EAAKzT,KAClCu4C,EAAY1/C,EAAI4gB,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK5a,EAAG,EAAG,KAAMnB,MAC/D6gD,EAAYh5C,EAAIka,gBAAgB8F,QAAQ7nB,KAAM+b,EAAKlU,EAAG,EAAG,KAAM7H,MAC/D6gD,EAAY3/C,EAAI6gB,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK7a,GAAK,CACtD6G,EAAG,GACF,EAAG,IAAM/H,MACZ6gD,EAAYl5C,EAAIoa,gBAAgB8F,QAAQ7nB,KAAM+b,EAAKpU,GAAK,CACtDI,EAAG,GACF,EAAGvJ,UAAWwB,MACjB6gD,EAAYv/C,EAAI,IAAI2tB,iBAAiBjvB,KAAM+b,EAAKza,EAAGtB,OAGrD6gD,EAAY14C,EAAI4Z,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK5T,EAAG,EAAG,IAAMnI,MAEhD,MAAX+b,EAAKzT,IAAyB,MAAXyT,EAAKzT,IAc1B,GAbAsuC,EAAUkK,GAAK9gD,KAAK+9C,OAAOhiC,EAAK+kC,KAAO,QACvClK,EAAUmK,GAAK/gD,KAAKg+C,OAAOjiC,EAAKglC,KAAO,QAExB,GAAXhlC,EAAKglC,KACPnK,EAAUoK,GAAKjlC,EAAKilC,IAGtBH,EAAYlkC,EAAIoF,gBAAgB8F,QAAQ7nB,KAAM+b,EAAKY,EAAG,EAAG,KAAM3c,MAE1D6gD,EAAYlkC,EAAE5U,IACjB6uC,EAAU8Q,GAAK7G,EAAYlkC,EAAEvb,GAG3B2a,EAAKla,EAAG,CACV,IAAIA,EAAI,IAAI8sB,aAAa3uB,KAAM+b,EAAKla,EAAG,SAAU7B,MACjD6gD,EAAYh/C,EAAIA,EAEXg/C,EAAYh/C,EAAEkG,IACjB6uC,EAAU+Q,GAAK9G,EAAYh/C,EAAEktB,UAC7B6nB,EAAUgR,GAAK/G,EAAYh/C,EAAEmtB,WAAW,UAI5C4nB,EAAUv1C,EAAe,IAAX0a,EAAK1a,EAAU,UAAY,UAK3C,OAFArB,KAAK+4C,WAAW/1C,KAAK4zC,GACrBiK,EAAY9hD,MAAQ63C,EACbiK,GAGTtS,eAAe9rC,UAAUy+C,mBAAqB,SAAUnlC,GAKtD,MAJkB,CAChBlB,GAAI,GACJ0vB,aAAc,KAKlBgE,eAAe9rC,UAAU0+C,uBAAyB,SAAUplC,GAU1D,MATkB,CAChBvT,UAAW,CACT25C,QAAS,EACT9O,QAAQ,EACR/lC,IAAKtN,KAAK63C,kBAAkBsD,YAC5BnmB,GAAIjT,gBAAgB8F,QAAQ7nB,KAAM+b,EAAK5T,EAAG,EAAG,IAAMnI,MACnD+0B,OAAQjN,yBAAyB0B,qBAAqBxpB,KAAM+b,EAAM/b,SAMxEuuC,eAAe9rC,UAAU4+C,mBAAqB,SAAUtlC,GACtD,IAAI8kC,EAAc,IAAIjJ,YAAY53C,KAAM+b,EAAM/b,KAAK+4C,WAAY/4C,KAAK63C,mBAGpE,OAFA73C,KAAKsa,OAAOtX,KAAK69C,GACjB7gD,KAAK29C,oBAAoBkD,GAClBA,GAGTtS,eAAe9rC,UAAU+xB,aAAe,WACtCx0B,KAAKinB,eAAgB,EACrB,IAAIlpB,EACAE,EAAM+B,KAAKi5C,UAAU/6C,OAEzB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKuqC,aAAaxsC,GAAKiC,KAAKi5C,UAAUl7C,GAMxC,IAHAiC,KAAKugD,aAAavgD,KAAK84C,WAAY94C,KAAKi5C,UAAWj5C,KAAKuqC,cAAc,EAAM,IAC5EtsC,EAAM+B,KAAKoE,kBAAkBlG,OAExBH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKoE,kBAAkBrG,GAAG2G,WAG5B1E,KAAK89C,kBACL99C,KAAK63C,kBAAkBqD,iBAAiBl7C,KAAKinB,gBAG/CsnB,eAAe9rC,UAAUolD,wBAA0B,SAAUr/C,GAC3D,IAAIzK,EACAE,EAAM+B,KAAK+4C,WAAW76C,OAE1B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACnBiC,KAAK+4C,WAAWh7C,GAAGmY,QACtBlW,KAAK+4C,WAAWh7C,GAAG01C,WAAWzwC,KAAKwF,IAKzC+lC,eAAe9rC,UAAUqlD,6BAA+B,WACtD,IAAI/pD,EACAE,EAAM+B,KAAK+4C,WAAW76C,OAE1B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACnBiC,KAAK+4C,WAAWh7C,GAAGmY,QACtBlW,KAAK+4C,WAAWh7C,GAAG01C,WAAWviB,OAKpCqd,eAAe9rC,UAAUslD,YAAc,SAAUzlB,GAC/C,IAAIvkC,EACAE,EAAMqkC,EAAOpkC,OAIjB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBukC,EAAOvkC,GAAGmY,QAAS,GAIvBq4B,eAAe9rC,UAAU89C,aAAe,SAAU98C,EAAKw1C,EAAW1O,EAAcyd,EAAcvU,GAC5F,IAAI11C,EAEA+J,EAAG4R,EAGHkoC,EACAD,EACAD,EANAzjD,EAAMwF,EAAIvF,OAAS,EAEnB2jD,EAAY,GACZC,EAAe,GAIfmG,EAAgB,GAAGppC,OAAO40B,GAE9B,IAAK11C,EAAIE,EAAKF,GAAK,EAAGA,GAAK,EAAG,CAS5B,IARA6jD,EAAe5hD,KAAKi+C,uBAAuBx6C,EAAI1F,KAK7Ck7C,EAAUl7C,GAAKwsC,EAAaqX,EAAe,GAF3Cn+C,EAAI1F,GAAGmqD,cAAgBF,EAKR,MAAbvkD,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,GACnEs5C,EAGH3I,EAAUl7C,GAAGgB,MAAMmX,QAAS,EAF5B+iC,EAAUl7C,GAAKiC,KAAK4gD,mBAAmBn9C,EAAI1F,GAAIkqD,GAKjDpG,EAAU7+C,KAAKi2C,EAAUl7C,GAAGgB,YACvB,GAAiB,MAAb0E,EAAI1F,GAAGuK,GAAY,CAC5B,GAAKs5C,EAKH,IAFAloC,EAAOu/B,EAAUl7C,GAAG8c,GAAG3c,OAElB4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzBmxC,EAAUl7C,GAAGwsC,aAAaziC,GAAKmxC,EAAUl7C,GAAG8c,GAAG/S,QALjDmxC,EAAUl7C,GAAKiC,KAAKkhD,mBAAmBz9C,EAAI1F,IAS7CiC,KAAKugD,aAAa98C,EAAI1F,GAAG8c,GAAIo+B,EAAUl7C,GAAG8c,GAAIo+B,EAAUl7C,GAAGwsC,aAAcyd,EAAcC,OACjE,MAAbxkD,EAAI1F,GAAGuK,IACXs5C,IACHF,EAAmB1hD,KAAKmhD,uBAAuB19C,EAAI1F,IACnDk7C,EAAUl7C,GAAK2jD,GAGjBuG,EAAcjlD,KAAKi2C,EAAUl7C,IAC7BiC,KAAK6nD,wBAAwB5O,EAAUl7C,KACjB,MAAb0F,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,GAC1Es5C,IACH3I,EAAUl7C,GAAKiC,KAAKqhD,mBAAmB59C,EAAI1F,KAEvB,MAAb0F,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IAA2B,MAAb7E,EAAI1F,GAAGuK,IACrDs5C,GAMHD,EAAW1I,EAAUl7C,IACZmY,QAAS,IANlByrC,EAAW1zB,eAAeG,YAAY3qB,EAAI1F,GAAGuK,KACpCuiB,KAAK7qB,KAAMyD,EAAI1F,IACxBk7C,EAAUl7C,GAAK4jD,EACf3hD,KAAKg5C,eAAeh2C,KAAK2+C,IAM3BG,EAAa9+C,KAAK2+C,IACI,MAAbl+C,EAAI1F,GAAGuK,KACXs5C,GAOHD,EAAW1I,EAAUl7C,IACZmY,QAAS,GAPlByrC,EAAW1zB,eAAeG,YAAY3qB,EAAI1F,GAAGuK,IAC7C2wC,EAAUl7C,GAAK4jD,EACfA,EAAS92B,KAAK7qB,KAAMyD,EAAK1F,EAAGk7C,GAC5Bj5C,KAAKg5C,eAAeh2C,KAAK2+C,GACzBqG,GAAe,GAMjBlG,EAAa9+C,KAAK2+C,IAGpB3hD,KAAKk+C,oBAAoBz6C,EAAI1F,GAAIA,EAAI,GAOvC,IAJAiC,KAAK8nD,+BACL9nD,KAAK+nD,YAAYlG,GACjB5jD,EAAM6jD,EAAa5jD,OAEdH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB+jD,EAAa/jD,GAAGmY,QAAS,GAI7Bq4B,eAAe9rC,UAAUuyC,mBAAqB,WAC5Ch1C,KAAKsnD,gBAAgBnF,QAAU,EAC/BniD,KAAKsnD,gBAAgBjU,QAAS,EAC9BrzC,KAAK89C,kBACL99C,KAAK63C,kBAAkBqD,iBAAiBl7C,KAAKinB,eAC7CjnB,KAAK+hD,YAAY/hD,KAAKsnD,gBAAiBtnD,KAAK84C,WAAY94C,KAAKi5C,WAAW,IAG1E1K,eAAe9rC,UAAU0lD,qBAAuB,SAAUC,EAAiBC,IAGrED,EAAgB/U,QAAUgV,EAAerzB,GAAGvwB,MAAQzE,KAAKinB,iBAC3DohC,EAAelG,QAAUiG,EAAgBjG,QACzCkG,EAAelG,SAAWkG,EAAerzB,GAAG5zB,EAC5CinD,EAAehV,QAAS,IAI5B9E,eAAe9rC,UAAU6lD,UAAY,WACnC,IAAIvqD,EAEA+J,EACA4R,EACA3R,EACA4R,EACAolC,EACAwJ,EAGA3oD,EACA4oD,EAVAvqD,EAAM+B,KAAK+4C,WAAW76C,OAOtB0wB,EAAW5uB,KAAK6mB,WAAW+H,SAC3B0I,EAAMt3B,KAAK6mB,WAAWmoB,cAI1B,IAAKjxC,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAQxB,IAAc,QANd6B,GADA4oD,EAAexoD,KAAK+4C,WAAWh7C,IACX6B,OAMW,OAATA,GAAsC,IAApB4oD,EAAad,KAAac,EAAazsC,KAAKmsC,eAAuC,IAAtBM,EAAaC,MAAqD,IAAvCzoD,KAAK6mB,WAAWogB,mBAAhJ,CA0BA,IAtBArY,EAASygB,OACT0P,EAAQyJ,EAAa70B,SAER,OAAT/zB,GAA0B,OAATA,GACnB03B,EAAIoxB,YAAuB,OAAT9oD,EAAgB4oD,EAAaf,GAAKe,EAAaG,IACjErxB,EAAI8K,UAAYomB,EAAad,GAC7BpwB,EAAIsxB,QAAUJ,EAAa1H,GAC3BxpB,EAAIuxB,SAAWL,EAAazH,GAC5BzpB,EAAIwxB,WAAaN,EAAaxH,IAAM,GAEpC1pB,EAAIC,UAAqB,OAAT33B,EAAgB4oD,EAAaf,GAAKe,EAAaG,IAGjE/5B,EAASqgB,WAAWuZ,EAAaC,MAEpB,OAAT7oD,GAA0B,OAATA,GACnB03B,EAAIiZ,YAGN3hB,EAASggB,aAAa4Z,EAAahB,cAAc9U,eAAelsC,OAChEkT,EAAOqlC,EAAM7gD,OAER4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAa5B,IAZa,OAATlI,GAA0B,OAATA,IACnB03B,EAAIiZ,YAEAiY,EAAab,KACfrwB,EAAIyxB,YAAYP,EAAab,IAC7BrwB,EAAI0xB,eAAiBR,EAAaZ,KAKtCjuC,GADA4uC,EAAQxJ,EAAMj3C,GAAGmwC,SACJ/5C,OAER6J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACP,KAAdwgD,EAAMxgD,GAAGpG,EACX21B,EAAI6vB,OAAOoB,EAAMxgD,GAAGtG,EAAE,GAAI8mD,EAAMxgD,GAAGtG,EAAE,IACd,KAAd8mD,EAAMxgD,GAAGpG,EAClB21B,EAAI+vB,cAAckB,EAAMxgD,GAAGgE,IAAI,GAAIw8C,EAAMxgD,GAAGgE,IAAI,GAAIw8C,EAAMxgD,GAAGgE,IAAI,GAAIw8C,EAAMxgD,GAAGgE,IAAI,GAAIw8C,EAAMxgD,GAAGgE,IAAI,GAAIw8C,EAAMxgD,GAAGgE,IAAI,IAEpHurB,EAAIkZ,YAIK,OAAT5wC,GAA0B,OAATA,IACnB03B,EAAIwtB,SAEA0D,EAAab,IACfrwB,EAAIyxB,YAAY/oD,KAAKunD,eAKd,OAAT3nD,GAA0B,OAATA,GACnB03B,EAAIytB,KAAKyD,EAAannD,GAGxButB,EAASwgB,YAIbb,eAAe9rC,UAAUs/C,YAAc,SAAUqG,EAAiBl0B,EAAOnY,EAAMktC,GAC7E,IAAIlrD,EAEAsqD,EAGJ,IAFAA,EAAiBD,EAEZrqD,EAJKm2B,EAAMh2B,OAAS,EAIXH,GAAK,EAAGA,GAAK,EACN,MAAfm2B,EAAMn2B,GAAGuK,IACX+/C,EAAiBtsC,EAAKhe,GAAGyK,UACzBxI,KAAKmoD,qBAAqBC,EAAiBC,IACnB,MAAfn0B,EAAMn2B,GAAGuK,IAA6B,MAAf4rB,EAAMn2B,GAAGuK,IAA6B,MAAf4rB,EAAMn2B,GAAGuK,IAA6B,MAAf4rB,EAAMn2B,GAAGuK,GACvFtI,KAAKs2C,WAAWpiB,EAAMn2B,GAAIge,EAAKhe,IACP,MAAfm2B,EAAMn2B,GAAGuK,GAClBtI,KAAK22C,WAAWziB,EAAMn2B,GAAIge,EAAKhe,GAAIsqD,GACX,MAAfn0B,EAAMn2B,GAAGuK,GAClBtI,KAAK+2C,aAAa7iB,EAAMn2B,GAAIge,EAAKhe,GAAIsqD,GACb,MAAfn0B,EAAMn2B,GAAGuK,IAA6B,MAAf4rB,EAAMn2B,GAAGuK,GACzCtI,KAAKkpD,mBAAmBh1B,EAAMn2B,GAAIge,EAAKhe,GAAIsqD,GACnB,MAAfn0B,EAAMn2B,GAAGuK,GAClBtI,KAAK+hD,YAAYsG,EAAgBn0B,EAAMn2B,GAAG8c,GAAIkB,EAAKhe,GAAG8c,IAC7CqZ,EAAMn2B,GAAGuK,GAIlB2gD,GACFjpD,KAAKsoD,aAIT/Z,eAAe9rC,UAAU0mD,kBAAoB,SAAUpR,EAAaroB,GAClE,GAAI1vB,KAAKinB,eAAiByI,EAAMjrB,MAAQszC,EAAYtE,WAAWhvC,KAAM,CACnE,IAEI1G,EACAE,EACA6J,EAJAshD,EAAarR,EAAYE,QACzBn8B,EAAQ4T,EAAM5T,MAIdpC,EAAOoC,EAAMxF,QACjB8yC,EAAWlrD,OAAS,EACpB,IAAImrD,EAAoBtR,EAAYtE,WAAWf,eAE/C,IAAK5qC,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAC5B,IAAIqtB,EAAYrZ,EAAMxB,OAAOxS,GAE7B,GAAIqtB,GAAaA,EAAU/zB,EAAG,CAG5B,IAFAnD,EAAMk3B,EAAU7e,QAEXvY,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACd,IAANA,GACFqrD,EAAWpmD,KAAK,CACdrB,EAAG,IACHF,EAAG4nD,EAAkBx9C,kBAAkBspB,EAAU/zB,EAAE,GAAG,GAAI+zB,EAAU/zB,EAAE,GAAG,GAAI,KAIjFgoD,EAAWpmD,KAAK,CACdrB,EAAG,IACHoK,IAAKs9C,EAAkBp9C,oBAAoBkpB,EAAUhtB,EAAEpK,EAAI,GAAIo3B,EAAUp3B,EAAEA,GAAIo3B,EAAU/zB,EAAErD,MAInF,IAARE,GACFmrD,EAAWpmD,KAAK,CACdrB,EAAG,IACHF,EAAG4nD,EAAkBx9C,kBAAkBspB,EAAU/zB,EAAE,GAAG,GAAI+zB,EAAU/zB,EAAE,GAAG,GAAI,KAI7E+zB,EAAUvtB,GAAK3J,IACjBmrD,EAAWpmD,KAAK,CACdrB,EAAG,IACHoK,IAAKs9C,EAAkBp9C,oBAAoBkpB,EAAUhtB,EAAEpK,EAAI,GAAIo3B,EAAUp3B,EAAE,GAAIo3B,EAAU/zB,EAAE,MAE7FgoD,EAAWpmD,KAAK,CACdrB,EAAG,QAMXo2C,EAAYE,QAAUmR,IAI1B7a,eAAe9rC,UAAU6zC,WAAa,SAAUz6B,EAAUw6B,GACxD,IAAoB,IAAhBx6B,EAAS2tB,IAAe3tB,EAASqsC,cAAe,CAClD,IAAInqD,EACAE,EAAMo4C,EAASyB,aAAa55C,OAEhC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKmpD,kBAAkB9S,EAASyB,aAAa/5C,GAAIs4C,EAASnyB,MAKhEqqB,eAAe9rC,UAAUk0C,WAAa,SAAUP,EAAWC,EAAUgS,GACnE,IAAIzR,EAAYP,EAASt3C,OAErBs3C,EAASzuC,EAAEnD,MAAQzE,KAAKinB,iBAC1B2vB,EAAU6Q,GAAK,OAASnqD,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,MAGtHi1C,EAASluC,EAAE1D,MAAQ4jD,EAAehV,QAAUrzC,KAAKinB,iBACnD2vB,EAAU6R,KAAOpS,EAASluC,EAAE/G,EAAIinD,EAAelG,UAInD5T,eAAe9rC,UAAUymD,mBAAqB,SAAU9S,EAAWC,EAAUgS,GAC3E,IAAIzR,EAAYP,EAASt3C,MAEzB,IAAK63C,EAAU+R,KAAOtS,EAAS/0C,EAAEmD,MAAQ4xC,EAASl1C,EAAEsD,MAAQ4xC,EAASxuC,EAAEpD,MAAwB,IAAhB2xC,EAAUz0C,IAAY00C,EAASn1C,EAAEuD,MAAQ4xC,EAAS1uC,EAAElD,MAAO,CACxI,IAAI6yB,EAAMt3B,KAAK6mB,WAAWmoB,cAEtB9iC,EAAMmqC,EAASl1C,EAAEC,EACjB+K,EAAMkqC,EAASxuC,EAAEzG,EAErB,GAAoB,IAAhBg1C,EAAUz0C,EACZgnD,EAAMrxB,EAAIgyB,qBAAqBp9C,EAAI,GAAIA,EAAI,GAAIC,EAAI,GAAIA,EAAI,SAE3D,IAAI6gB,EAAMnwB,KAAKM,KAAKN,KAAKI,IAAIiP,EAAI,GAAKC,EAAI,GAAI,GAAKtP,KAAKI,IAAIiP,EAAI,GAAKC,EAAI,GAAI,IACzEkrC,EAAMx6C,KAAK4nB,MAAMtY,EAAI,GAAKD,EAAI,GAAIC,EAAI,GAAKD,EAAI,IAE/CorC,EAAOtqB,GADGqpB,EAASn1C,EAAEE,GAAK,EAAI,IAAOi1C,EAASn1C,EAAEE,IAAM,GAAK,IAAOi1C,EAASn1C,EAAEE,GAE7E8J,EAAIrO,KAAKoJ,IAAIoxC,EAAMhB,EAAS1uC,EAAEvG,GAAKk2C,EAAOprC,EAAI,GAC9Cf,EAAItO,KAAKsJ,IAAIkxC,EAAMhB,EAAS1uC,EAAEvG,GAAKk2C,EAAOprC,EAAI,GAC9Cy8C,EAAMrxB,EAAIiyB,qBAAqBr+C,EAAGC,EAAG,EAAGe,EAAI,GAAIA,EAAI,GAAI8gB,GAG9D,IAAIjvB,EACAE,EAAMm4C,EAAU90C,EAAEG,EAClB01C,EAAUd,EAAS/0C,EAAEsG,EACrBu6C,EAAU,EAEd,IAAKpkD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpBs4C,EAAS/0C,EAAEiuB,aAAe8mB,EAAS/0C,EAAE+tB,eACvC8yB,EAAU9L,EAAS/0C,EAAE6G,EAAM,EAAJpK,EAAQ,IAGjC4qD,EAAIa,aAAarS,EAAY,EAAJp5C,GAAS,IAAK,QAAUo5C,EAAY,EAAJp5C,EAAQ,GAAK,IAAMo5C,EAAY,EAAJp5C,EAAQ,GAAK,IAAMo5C,EAAY,EAAJp5C,EAAQ,GAAK,IAAMokD,EAAU,KAG9IvL,EAAU+R,IAAMA,EAGlB/R,EAAU6R,KAAOpS,EAASluC,EAAE/G,EAAIinD,EAAelG,SAGjD5T,eAAe9rC,UAAUs0C,aAAe,SAAUX,EAAWC,EAAUgS,GACrE,IAAIzR,EAAYP,EAASt3C,MACrB8C,EAAIw0C,EAASx0C,EAEbA,IAAMA,EAAE4C,MAAQzE,KAAKinB,iBACvB2vB,EAAU+Q,GAAK9lD,EAAEktB,UACjB6nB,EAAUgR,GAAK/lD,EAAEmtB,WAAW,KAG1BqnB,EAASzuC,EAAEnD,MAAQzE,KAAKinB,iBAC1B2vB,EAAU6Q,GAAK,OAASnqD,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,IAAM9D,SAAS+4C,EAASzuC,EAAExG,EAAE,IAAM,MAGtHi1C,EAASluC,EAAE1D,MAAQ4jD,EAAehV,QAAUrzC,KAAKinB,iBACnD2vB,EAAU6R,KAAOpS,EAASluC,EAAE/G,EAAIinD,EAAelG,UAG7C9L,EAAS15B,EAAElY,MAAQzE,KAAKinB,iBAC1B2vB,EAAU8Q,GAAKrR,EAAS15B,EAAEvb,IAI9BmtC,eAAe9rC,UAAUi2B,QAAU,WACjC14B,KAAK84C,WAAa,KAClB94C,KAAK6mB,WAAa,KAClB7mB,KAAKgvC,cAAgB,KACrBhvC,KAAK+4C,WAAW76C,OAAS,EACzB8B,KAAKi5C,UAAU/6C,OAAS,GAO1B0U,gBAAgB,CAACslC,YAAajP,iBAAkB0b,cAAe5b,iBAAkBC,aAAcE,mBAAoByF,gBACnHA,eAAelsC,UAAU+xC,YAAcpH,gBAAgB3qC,UAAU+xC,YACjE7F,eAAelsC,UAAUwrC,aAAeX,cAAc7qC,UAAUwrC,aAEhEU,eAAelsC,UAAUuyC,mBAAqB,WAC5C,IAAI1d,EAAMt3B,KAAKgvC,cACf1X,EAAIC,UAAYv3B,KAAK+b,KAAK8E,GAC1ByW,EAAIE,SAAS,EAAG,EAAGx3B,KAAK+b,KAAK4f,GAAI37B,KAAK+b,KAAKmI,KAuB7CtR,gBAAgB,CAACslC,YAAajP,iBAAkB0b,cAAe5b,iBAAkBC,aAAcE,kBAAmBmP,cAAe7J,eACjIA,cAAc/rC,UAAU4b,QAAUta,UAAU,UAAU6a,WAAW,MAEjE4vB,cAAc/rC,UAAU27C,aAAe,WACrC,IAAI5iC,EAAexb,KAAKmkC,aAAa5H,YACrCv8B,KAAKq7B,gBAAkB/8B,iBAAiBkd,EAAaxT,EAAIwT,EAAaxT,EAAE9J,OAAS,GACjF,IAAIurD,GAAU,EAEVjuC,EAAaogB,IACf6tB,GAAU,EACVzpD,KAAK6lB,OAAOk/B,KAAO/kD,KAAK0+C,WAAWljC,EAAaogB,KAEhD57B,KAAK6lB,OAAOk/B,KAAO,gBAGrB/kD,KAAK+kD,KAAO0E,EACZ,IAAIC,GAAY,EAEZluC,EAAaqF,KACf6oC,GAAY,EACZ1pD,KAAK6lB,OAAOi/B,OAAS9kD,KAAK0+C,WAAWljC,EAAaqF,IAClD7gB,KAAK6lB,OAAOo/B,OAASzpC,EAAamgB,IAGpC,IACI59B,EAAGE,EADHmgB,EAAWpe,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAElEq9B,EAAUrjB,EAAaxT,EACvB02B,EAAe1+B,KAAK2+B,QACxB3+B,KAAK8kD,OAAS4E,EACd1pD,KAAK6lB,OAAOq/B,OAAS1pC,EAAa6hB,UAAY,MAAQr9B,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAAG+c,QAChHtgB,EAAMud,EAAa8hB,UAAUp/B,OAE7B,IAAI8jC,EACAjsB,EACAhO,EACA4R,EACAW,EACAxS,EACA4R,EACAyb,EACAw0B,EACAC,EACAvtC,EAAcrc,KAAK+b,KAAKM,YACxBmmB,EAAiBhnB,EAAaiX,GAAK,IAAOjX,EAAa6hB,UACvDU,EAAO,EACPC,EAAO,EACPkB,GAAY,EACZpU,EAAM,EAEV,IAAK/sB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAsB3B,IApBAgY,GADAisB,EAAWhiC,KAAK6mB,WAAWrN,YAAYwH,YAAYxF,EAAa8hB,UAAUv/B,GAAIqgB,EAASI,OAAQxe,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAAG+c,WACjIyjB,EAASjmB,MAAQ,GACzC2iB,EAAan4B,QAET8V,GAAewiB,EAAQ9gC,GAAGmK,IAC5B61B,GAAQyE,EACRxE,GAAQxiB,EAAa4hB,QACrBY,GAAQkB,EAAY,EAAI,EACxBA,GAAY,GAIdxlB,GADAY,EAASvE,EAAUuE,OAASvE,EAAUuE,OAAO,GAAGO,GAAK,IACvC3c,OACdwgC,EAAal3B,MAAMgU,EAAa6hB,UAAY,IAAK7hB,EAAa6hB,UAAY,KAEtEhhB,GACFrc,KAAKw+C,4BAA4BhjC,EAAckjB,EAAcG,EAAQ9gC,GAAG0iC,KAAM1C,EAAMC,GAGtF2rB,EAAWrrD,iBAAiBob,GAEvB5R,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAAG,CAK5B,IAJA6R,EAAOW,EAAOxS,GAAG8S,GAAG7S,EAAEhK,EAAEG,OACxBi3B,EAAY7a,EAAOxS,GAAG8S,GAAG7S,EACzB6hD,EAAU,GAEL7hD,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAChB,GAALA,GACF6hD,EAAQ5mD,KAAK07B,EAAarzB,SAAS8pB,EAAU/zB,EAAE,GAAG,GAAI+zB,EAAU/zB,EAAE,GAAG,GAAI,GAAIs9B,EAAapzB,SAAS6pB,EAAU/zB,EAAE,GAAG,GAAI+zB,EAAU/zB,EAAE,GAAG,GAAI,IAG3IwoD,EAAQ5mD,KAAK07B,EAAarzB,SAAS8pB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAIotB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAI,GAAI22B,EAAapzB,SAAS6pB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAIotB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAI,GAAI22B,EAAarzB,SAAS8pB,EAAUp3B,EAAEgK,GAAG,GAAIotB,EAAUp3B,EAAEgK,GAAG,GAAI,GAAI22B,EAAapzB,SAAS6pB,EAAUp3B,EAAEgK,GAAG,GAAIotB,EAAUp3B,EAAEgK,GAAG,GAAI,GAAI22B,EAAarzB,SAAS8pB,EAAU/zB,EAAE2G,GAAG,GAAIotB,EAAU/zB,EAAE2G,GAAG,GAAI,GAAI22B,EAAapzB,SAAS6pB,EAAU/zB,EAAE2G,GAAG,GAAIotB,EAAU/zB,EAAE2G,GAAG,GAAI,IAG3Z6hD,EAAQ5mD,KAAK07B,EAAarzB,SAAS8pB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAIotB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAI,GAAI22B,EAAapzB,SAAS6pB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAIotB,EAAUhtB,EAAEJ,EAAI,GAAG,GAAI,GAAI22B,EAAarzB,SAAS8pB,EAAUp3B,EAAE,GAAG,GAAIo3B,EAAUp3B,EAAE,GAAG,GAAI,GAAI2gC,EAAapzB,SAAS6pB,EAAUp3B,EAAE,GAAG,GAAIo3B,EAAUp3B,EAAE,GAAG,GAAI,GAAI2gC,EAAarzB,SAAS8pB,EAAU/zB,EAAE,GAAG,GAAI+zB,EAAU/zB,EAAE,GAAG,GAAI,GAAIs9B,EAAapzB,SAAS6pB,EAAU/zB,EAAE,GAAG,GAAI+zB,EAAU/zB,EAAE,GAAG,GAAI,IACzZuoD,EAAS7hD,GAAK8hD,EAGZvtC,IACF0hB,GAAQc,EAAQ9gC,GAAGiK,EACnB+1B,GAAQyE,GAGNxiC,KAAK64C,UAAU/tB,GACjB9qB,KAAK64C,UAAU/tB,GAAKlE,KAAO+iC,EAE3B3pD,KAAK64C,UAAU/tB,GAAO,CACpBlE,KAAM+iC,GAIV7+B,GAAO,IAIX0jB,cAAc/rC,UAAUuyC,mBAAqB,WAC3C,IAWIj3C,EAAGE,EAAK6J,EAAG4R,EAAM3R,EAAG4R,EAXpB2d,EAAMt3B,KAAKgvC,cACAhvC,KAAK0yC,eAAe5pB,IAAItiB,MACvC8wB,EAAIva,KAAO/c,KAAK6lB,OAAOq/B,OACvB5tB,EAAIsxB,QAAU,OACdtxB,EAAIuxB,SAAW,QACfvxB,EAAIwxB,WAAa,EAEZ9oD,KAAK+b,KAAKM,aACbrc,KAAKm+C,aAAargB,YAAY99B,KAAKmkC,aAAa5H,YAAav8B,KAAKs7B,oBAIpE,IAGI4kB,EAHA7kB,EAAkBr7B,KAAKm+C,aAAa9iB,gBACpCwD,EAAU7+B,KAAKmkC,aAAa5H,YAAYv0B,EAC5C/J,EAAM4gC,EAAQ3gC,OAEd,IAGIyrD,EACAC,EAJAC,EAAW,KACXC,EAAa,KACbC,EAAc,KAIlB,IAAKhsD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB,IAAI8gC,EAAQ9gC,GAAGmK,EAAf,CAYA,IARAg4C,EAAiB7kB,EAAgBt9B,MAG/BiC,KAAK6mB,WAAW+H,SAASygB,OACzBrvC,KAAK6mB,WAAW+H,SAASggB,aAAasR,EAAez+C,GACrDzB,KAAK6mB,WAAW+H,SAASqgB,WAAWiR,EAAe/3C,IAGjDnI,KAAK+kD,KAAM,CAeb,IAdI7E,GAAkBA,EAAetkB,GAC/BiuB,IAAa3J,EAAetkB,KAC9BiuB,EAAW3J,EAAetkB,GAC1BtE,EAAIC,UAAY2oB,EAAetkB,IAExBiuB,IAAa7pD,KAAK6lB,OAAOk/B,OAClC8E,EAAW7pD,KAAK6lB,OAAOk/B,KACvBztB,EAAIC,UAAYv3B,KAAK6lB,OAAOk/B,MAI9BrrC,GADAiwC,EAAW3pD,KAAK64C,UAAU96C,GAAG6oB,MACb1oB,OAChB8B,KAAK6mB,WAAWmoB,cAAcuB,YAEzBzoC,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAKzB,IAHA6R,GADAiwC,EAAUD,EAAS7hD,IACJ5J,OACf8B,KAAK6mB,WAAWmoB,cAAcmY,OAAOyC,EAAQ,GAAIA,EAAQ,IAEpD7hD,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB/H,KAAK6mB,WAAWmoB,cAAcqY,cAAcuC,EAAQ7hD,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,IAIxI/H,KAAK6mB,WAAWmoB,cAAcwB,YAC9BxwC,KAAK6mB,WAAWmoB,cAAc+V,OAGhC,GAAI/kD,KAAK8kD,OAAQ,CAyBf,IAxBI5E,GAAkBA,EAAevkB,GAC/BouB,IAAgB7J,EAAevkB,KACjCouB,EAAc7J,EAAevkB,GAC7BrE,EAAI8K,UAAY8d,EAAevkB,IAExBouB,IAAgB/pD,KAAK6lB,OAAOo/B,SACrC8E,EAAc/pD,KAAK6lB,OAAOo/B,OAC1B3tB,EAAI8K,UAAYpiC,KAAK6lB,OAAOo/B,QAG1B/E,GAAkBA,EAAer/B,GAC/BipC,IAAe5J,EAAer/B,KAChCipC,EAAa5J,EAAer/B,GAC5ByW,EAAIoxB,YAAcxI,EAAer/B,IAE1BipC,IAAe9pD,KAAK6lB,OAAOi/B,SACpCgF,EAAa9pD,KAAK6lB,OAAOi/B,OACzBxtB,EAAIoxB,YAAc1oD,KAAK6lB,OAAOi/B,QAIhCprC,GADAiwC,EAAW3pD,KAAK64C,UAAU96C,GAAG6oB,MACb1oB,OAChB8B,KAAK6mB,WAAWmoB,cAAcuB,YAEzBzoC,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAKzB,IAHA6R,GADAiwC,EAAUD,EAAS7hD,IACJ5J,OACf8B,KAAK6mB,WAAWmoB,cAAcmY,OAAOyC,EAAQ,GAAIA,EAAQ,IAEpD7hD,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EACzB/H,KAAK6mB,WAAWmoB,cAAcqY,cAAcuC,EAAQ7hD,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,GAAI6hD,EAAQ7hD,EAAI,IAIxI/H,KAAK6mB,WAAWmoB,cAAcwB,YAC9BxwC,KAAK6mB,WAAWmoB,cAAc8V,SAG5B5E,GACFlgD,KAAK6mB,WAAW+H,SAASwgB,YAO/B+V,UAAU1iD,UAAUsrC,YAAc,aAIlCqX,aAAa3iD,UAAY,CACvBunD,eAAgB,aAChBtV,oBAAqB,WACnB10C,KAAK80C,YAAc/wC,UAAU/D,KAAK+b,KAAKkuC,IAAM,OAEzCjqD,KAAK+b,KAAKhC,SACZ/Z,KAAKolC,WAAaxhC,SAAS,OAC3B5D,KAAK6lC,aAAejiC,SAAS,KAC7B5D,KAAK6oC,cAAgB7oC,KAAK6lC,aAC1B7lC,KAAKolC,WAAW1nB,YAAY1d,KAAK6lC,cACjC7lC,KAAK80C,YAAYp3B,YAAY1d,KAAKolC,aAElCplC,KAAK6lC,aAAe7lC,KAAK80C,YAG3Bj2C,SAASmB,KAAK80C,cAEhBH,wBAAyB,WACvB30C,KAAKy9C,yBAA2B,IAAI0H,UAAUnlD,MAC9CA,KAAK28C,mBAAqB38C,KAAK80C,YAC/B90C,KAAK6oC,cAAgB7oC,KAAK6lC,aAEtB7lC,KAAK+b,KAAKshC,IACZr9C,KAAK6lC,aAAavnB,aAAa,KAAMte,KAAK+b,KAAKshC,IAG7Cr9C,KAAK+b,KAAKK,IACZpc,KAAK6lC,aAAavnB,aAAa,QAASte,KAAK+b,KAAKK,IAG/B,IAAjBpc,KAAK+b,KAAKsgC,IACZr8C,KAAKm8C,gBAGTpH,cAAe,WACT/0C,KAAK0yC,eAAeU,UACtBpzC,KAAK28C,mBAAmB59C,MAAMyJ,UAAYxI,KAAK28C,mBAAmB59C,MAAM4yC,gBAAkB3xC,KAAK0yC,eAAe5pB,IAAInc,SAGhH3M,KAAK0yC,eAAeW,SACtBrzC,KAAK28C,mBAAmB59C,MAAMojD,QAAUniD,KAAK0yC,eAAeC,MAAMxqC,EAAE/G,IAGxE2sC,YAAa,WAGP/tC,KAAK+b,KAAKytB,IAAMxpC,KAAK6zC,SAIzB7zC,KAAKuzC,kBACLvzC,KAAKq0C,mBACLr0C,KAAK+0C,gBACL/0C,KAAKg1C,qBAEDh1C,KAAKinB,gBACPjnB,KAAKinB,eAAgB,KAGzByR,QAAS,WACP14B,KAAK6lC,aAAe,KACpB7lC,KAAK28C,mBAAqB,KAEtB38C,KAAK08C,eACP18C,KAAK08C,aAAe,MAGlB18C,KAAK49B,cACP59B,KAAK49B,YAAYlF,UACjB14B,KAAK49B,YAAc,OAGvBgX,2BAA4B,WAC1B50C,KAAK49B,YAAc,IAAI6J,YAAYznC,KAAK+b,KAAM/b,KAAMA,KAAK6mB,aAE3DqjC,WAAY,aACZrc,SAAU,cAEZuX,aAAa3iD,UAAUyrC,eAAiBiK,eAAe11C,UAAUyrC,eACjEkX,aAAa3iD,UAAUyyC,mBAAqBkQ,aAAa3iD,UAAUi2B,QACnE0sB,aAAa3iD,UAAUupC,sBAAwB3E,eAAe5kC,UAAUupC,sBAMxEp5B,gBAAgB,CAACslC,YAAajP,iBAAkBmc,aAAcrc,iBAAkBC,aAAcG,sBAAuBmI,eAErHA,cAAc7uC,UAAUoyC,cAAgB,WACtC,IAAIjN,EAEA5nC,KAAK+b,KAAKhC,UACZ6tB,EAAOhkC,SAAS,SACX0a,aAAa,QAASte,KAAK+b,KAAK4f,IACrCiM,EAAKtpB,aAAa,SAAUte,KAAK+b,KAAKmI,IACtC0jB,EAAKtpB,aAAa,OAAQte,KAAK+b,KAAK8E,IACpC7gB,KAAKolC,WAAW9mB,aAAa,QAASte,KAAK+b,KAAK4f,IAChD37B,KAAKolC,WAAW9mB,aAAa,SAAUte,KAAK+b,KAAKmI,OAEjD0jB,EAAO7jC,UAAU,QACZhF,MAAM2O,MAAQ1N,KAAK+b,KAAK4f,GAAK,KAClCiM,EAAK7oC,MAAMs4B,OAASr3B,KAAK+b,KAAKmI,GAAK,KACnC0jB,EAAK7oC,MAAMorD,gBAAkBnqD,KAAK+b,KAAK8E,IAGzC7gB,KAAK6lC,aAAanoB,YAAYkqB,IAehCh1B,gBAAgB,CAACy0B,eAAgBiR,aAAc8M,cAAe/T,cAC9DA,aAAa5uC,UAAU2nD,6BAA+B/Y,aAAa5uC,UAAUkyC,wBAE7EtD,aAAa5uC,UAAUkyC,wBAA0B,WAC/C30C,KAAKoqD,+BAGDpqD,KAAK+b,KAAKhC,SACZ/Z,KAAKolC,WAAW9mB,aAAa,QAASte,KAAK+b,KAAKY,GAChD3c,KAAKolC,WAAW9mB,aAAa,SAAUte,KAAK+b,KAAK7a,GACjDlB,KAAK28C,mBAAqB38C,KAAK80C,aAE/B90C,KAAK28C,mBAAqB38C,KAAK6lC,cAInCwL,aAAa5uC,UAAUouC,iBAAmB,SAAUjqB,EAAMoD,GAIxD,IAHA,IACImkB,EADArmC,EAAI,EAGDA,EAAIkiB,GACLhqB,KAAK2zB,SAAS7rB,IAAM9H,KAAK2zB,SAAS7rB,GAAGomC,iBACvCC,EAAcnuC,KAAK2zB,SAAS7rB,GAAGomC,kBAGjCpmC,GAAK,EAGHqmC,EACFnuC,KAAK6lC,aAAauI,aAAaxnB,EAAMunB,GAErCnuC,KAAK6lC,aAAanoB,YAAYkJ,IAgClChU,gBAAgB,CAACslC,YAAajP,iBAAkBqI,cAAelE,gBAAiBgY,aAAcrc,iBAAkBC,aAAcE,mBAAoB+H,eAClJA,cAAcxuC,UAAU4nD,kBAAoBpZ,cAAcxuC,UAAUuyC,mBAEpE/D,cAAcxuC,UAAUoyC,cAAgB,WACtC,IAAIzgB,EAGJ,GAFAp0B,KAAK80C,YAAY/1C,MAAMse,SAAW,EAE9Brd,KAAK+b,KAAKhC,QACZ/Z,KAAK6lC,aAAanoB,YAAY1d,KAAKqlD,iBACnCjxB,EAAOp0B,KAAKolC,eACP,CACLhR,EAAOxwB,SAAS,OAChB,IAAIgZ,EAAO5c,KAAKmmB,KAAKpK,KAAO/b,KAAKmmB,KAAKpK,KAAO/b,KAAK6mB,WAAWqmB,SAC7D9Y,EAAK9V,aAAa,QAAS1B,EAAKD,GAChCyX,EAAK9V,aAAa,SAAU1B,EAAK1b,GACjCkzB,EAAK1W,YAAY1d,KAAKqlD,iBACtBrlD,KAAK6lC,aAAanoB,YAAY0W,GAGhCp0B,KAAKugD,aAAavgD,KAAK84C,WAAY94C,KAAKi5C,UAAWj5C,KAAKuqC,aAAcvqC,KAAKqlD,gBAAiB,EAAG,IAAI,GACnGrlD,KAAKwgD,qBACLxgD,KAAKsqD,UAAYl2B,GAGnB6c,cAAcxuC,UAAU8nD,oBAAsB,SAAU3gB,EAAcp1B,GACpE,IAAIzW,EACAE,EAAM2rC,EAAa1rC,OAEvB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxByW,EAAQo1B,EAAa7rC,GAAGg3B,OAAO3zB,EAAEyK,kBAAkB2I,EAAM,GAAIA,EAAM,GAAI,GAGzE,OAAOA,GAGTy8B,cAAcxuC,UAAU+nD,0BAA4B,SAAUC,EAAMC,GAClE,IAEI3sD,EAEA4sD,EACAC,EACAC,EACAC,EAPAp7B,EAAQ+6B,EAAKvmC,GAAG9iB,EAChBwoC,EAAe6gB,EAAK7gB,aAEpB3rC,EAAMyxB,EAAMpZ,QAOhB,KAAIrY,GAAO,GAAX,CAIA,IAAKF,EAAI,EAAGA,EAAIE,EAAM,EAAGF,GAAK,EAC5B4sD,EAAS3qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAMtuB,EAAErD,IACxD6sD,EAAS5qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAMvnB,EAAEpK,IACxD8sD,EAAa7qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAM3xB,EAAEA,EAAI,IAChE+sD,EAAa9qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAMtuB,EAAErD,EAAI,IAChEiC,KAAK+qD,YAAYJ,EAAQC,EAAQC,EAAYC,EAAYJ,GAGvDh7B,EAAM9nB,IACR+iD,EAAS3qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAMtuB,EAAErD,IACxD6sD,EAAS5qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAMvnB,EAAEpK,IACxD8sD,EAAa7qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAM3xB,EAAE,IAC5D+sD,EAAa9qD,KAAKuqD,oBAAoB3gB,EAAcla,EAAMtuB,EAAE,IAC5DpB,KAAK+qD,YAAYJ,EAAQC,EAAQC,EAAYC,EAAYJ,MAI7DzZ,cAAcxuC,UAAUsoD,YAAc,SAAUJ,EAAQC,EAAQC,EAAYC,EAAYJ,GACtF1qD,KAAKgrD,iBAAiBL,EAAQC,EAAQC,EAAYC,GAClD,IAAIG,EAASjrD,KAAKkrD,iBAClBR,EAAYx/C,EAAIxN,OAAOutD,EAAO/rD,KAAMwrD,EAAYx/C,GAChDw/C,EAAYS,KAAO3tD,OAAOytD,EAAOG,MAAOV,EAAYS,MACpDT,EAAYv/C,EAAIzN,OAAOutD,EAAOhsD,IAAKyrD,EAAYv/C,GAC/Cu/C,EAAYW,KAAO7tD,OAAOytD,EAAOK,OAAQZ,EAAYW,OAGvDpa,cAAcxuC,UAAUyoD,iBAAmB,CACzChsD,KAAM,EACNksD,MAAO,EACPnsD,IAAK,EACLqsD,OAAQ,GAEVra,cAAcxuC,UAAU8oD,gBAAkB,CACxCrgD,EAAG,EACHigD,KAAM,EACNhgD,EAAG,EACHkgD,KAAM,EACN39C,MAAO,EACP2pB,OAAQ,GAGV4Z,cAAcxuC,UAAUuoD,iBAAmB,SAAU3+C,EAAI3B,EAAIlB,EAAIgiD,GAG/D,IAFA,IAES7jD,EAAGpG,EAAGqG,EAAGjG,EAAG8pD,EAAM70C,EAAI80C,EAF3BT,EAAS,CAAC,CAAC5+C,EAAG,GAAIm/C,EAAG,IAAK,CAACn/C,EAAG,GAAIm/C,EAAG,KAENztD,EAAI,EAAGA,EAAI,IAAKA,EAQjD,GAPAwD,EAAI,EAAI8K,EAAGtO,GAAK,GAAK2M,EAAG3M,GAAK,EAAIyL,EAAGzL,GACpC4J,GAAK,EAAI0E,EAAGtO,GAAK,EAAI2M,EAAG3M,GAAK,EAAIyL,EAAGzL,GAAK,EAAIytD,EAAGztD,GAChD6J,EAAI,EAAI8C,EAAG3M,GAAK,EAAIsO,EAAGtO,GACvBwD,GAAQ,EAERqG,GAAQ,EAEE,KAHVD,GAAQ,IAiBR8jD,EAAOlqD,EAAIA,EAAI,EAAIqG,EAAID,GAEZ,IAKP,GADJiP,IAAOrV,EAAIrE,QAAQuuD,KAAU,EAAI9jD,KACnBiP,EAAK,GAAGq0C,EAAOltD,GAAGiF,KAAKhD,KAAK2rD,WAAW/0C,EAAIvK,EAAI3B,EAAIlB,EAAIgiD,EAAIztD,IAErE,GADJ2tD,IAAOnqD,EAAIrE,QAAQuuD,KAAU,EAAI9jD,KACnB+jD,EAAK,GAAGT,EAAOltD,GAAGiF,KAAKhD,KAAK2rD,WAAWD,EAAIr/C,EAAI3B,EAAIlB,EAAIgiD,EAAIztD,SAvBzE,CACE,GAAU,IAANwD,EACF,SAKE,GAFJI,GAAKiG,EAAIrG,IAEII,EAAI,GACfspD,EAAOltD,GAAGiF,KAAKhD,KAAK2rD,WAAWhqD,EAAG0K,EAAI3B,EAAIlB,EAAIgiD,EAAIztD,IAkBxDiC,KAAKkrD,iBAAiBhsD,KAAOxB,OAAOiG,MAAM,KAAMsnD,EAAO,IACvDjrD,KAAKkrD,iBAAiBjsD,IAAMvB,OAAOiG,MAAM,KAAMsnD,EAAO,IACtDjrD,KAAKkrD,iBAAiBE,MAAQ5tD,OAAOmG,MAAM,KAAMsnD,EAAO,IACxDjrD,KAAKkrD,iBAAiBI,OAAS9tD,OAAOmG,MAAM,KAAMsnD,EAAO,KAG3Dha,cAAcxuC,UAAUkpD,WAAa,SAAUhqD,EAAG0K,EAAI3B,EAAIlB,EAAIgiD,EAAIztD,GAChE,OAAOf,OAAO,EAAI2E,EAAG,GAAK0K,EAAGtO,GAAK,EAAIf,OAAO,EAAI2E,EAAG,GAAKA,EAAI+I,EAAG3M,GAAK,GAAK,EAAI4D,GAAK3E,OAAO2E,EAAG,GAAK6H,EAAGzL,GAAKf,OAAO2E,EAAG,GAAK6pD,EAAGztD,IAG9HkzC,cAAcxuC,UAAUmpD,qBAAuB,SAAU3S,EAAWyR,GAClE,IAAI3sD,EACAE,EAAMg7C,EAAU/6C,OAGpB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpBk7C,EAAUl7C,IAAMk7C,EAAUl7C,GAAGmmB,GAC/BlkB,KAAKwqD,0BAA0BvR,EAAUl7C,GAAI2sD,GACpCzR,EAAUl7C,IAAMk7C,EAAUl7C,GAAG8c,IACtC7a,KAAK4rD,qBAAqB3S,EAAUl7C,GAAG8c,GAAI6vC,IAKjDzZ,cAAcxuC,UAAUopD,mBAAqB,SAAUC,GACrD,OAAO9rD,KAAKslD,YAAYp6C,GAAK4gD,EAAI5gD,GAAKlL,KAAKslD,YAAYn6C,GAAK2gD,EAAI3gD,GAAKnL,KAAKslD,YAAY53C,MAAQ1N,KAAKslD,YAAYp6C,GAAK4gD,EAAI5gD,EAAI4gD,EAAIp+C,OAAS1N,KAAKslD,YAAYjuB,OAASr3B,KAAKslD,YAAYn6C,GAAK2gD,EAAI3gD,EAAI2gD,EAAIz0B,QAGvM4Z,cAAcxuC,UAAUuyC,mBAAqB,WAG3C,GAFAh1C,KAAKqqD,qBAEArqD,KAAK6zC,SAAW7zC,KAAKinB,eAAiBjnB,KAAKyE,MAAO,CACrD,IAAI8mD,EAAkBvrD,KAAKurD,gBACvB9tD,EAAM,OASV,GARA8tD,EAAgBrgD,EAAIzN,EACpB8tD,EAAgBJ,MAAQ1tD,EACxB8tD,EAAgBpgD,EAAI1N,EACpB8tD,EAAgBF,MAAQ5tD,EACxBuC,KAAK4rD,qBAAqB5rD,KAAKi5C,UAAWsS,GAC1CA,EAAgB79C,MAAQ69C,EAAgBJ,KAAOI,EAAgBrgD,EAAI,EAAIqgD,EAAgBJ,KAAOI,EAAgBrgD,EAC9GqgD,EAAgBl0B,OAASk0B,EAAgBF,KAAOE,EAAgBpgD,EAAI,EAAIogD,EAAgBF,KAAOE,EAAgBpgD,EAE3GnL,KAAK6rD,mBAAmBN,GAC1B,OAGF,IAAIQ,GAAU,EAEV/rD,KAAKslD,YAAY3oC,IAAM4uC,EAAgB79C,QACzC1N,KAAKslD,YAAY3oC,EAAI4uC,EAAgB79C,MACrC1N,KAAKsqD,UAAUhsC,aAAa,QAASitC,EAAgB79C,OACrDq+C,GAAU,GAGR/rD,KAAKslD,YAAYpkD,IAAMqqD,EAAgBl0B,SACzCr3B,KAAKslD,YAAYpkD,EAAIqqD,EAAgBl0B,OACrCr3B,KAAKsqD,UAAUhsC,aAAa,SAAUitC,EAAgBl0B,QACtD00B,GAAU,IAGRA,GAAW/rD,KAAKslD,YAAYp6C,IAAMqgD,EAAgBrgD,GAAKlL,KAAKslD,YAAYn6C,IAAMogD,EAAgBpgD,KAChGnL,KAAKslD,YAAY3oC,EAAI4uC,EAAgB79C,MACrC1N,KAAKslD,YAAYpkD,EAAIqqD,EAAgBl0B,OACrCr3B,KAAKslD,YAAYp6C,EAAIqgD,EAAgBrgD,EACrClL,KAAKslD,YAAYn6C,EAAIogD,EAAgBpgD,EACrCnL,KAAKsqD,UAAUhsC,aAAa,UAAWte,KAAKslD,YAAYp6C,EAAI,IAAMlL,KAAKslD,YAAYn6C,EAAI,IAAMnL,KAAKslD,YAAY3oC,EAAI,IAAM3c,KAAKslD,YAAYpkD,GACzIlB,KAAKsqD,UAAUvrD,MAAMyJ,UAAYxI,KAAKsqD,UAAUvrD,MAAM4yC,gBAAkB,aAAe3xC,KAAKslD,YAAYp6C,EAAI,MAAQlL,KAAKslD,YAAYn6C,EAAI,SAmB/IyH,gBAAgB,CAACslC,YAAajP,iBAAkBmc,aAAcrc,iBAAkBC,aAAcG,qBAAsBkP,cAAenH,cAEnIA,aAAazuC,UAAUoyC,cAAgB,WAGrC,GAFA70C,KAAKwlD,SAAWxlD,KAAKo7C,aAEjBp7C,KAAKwlD,SAAU,CACjBxlD,KAAK26B,WAAa,MAClB36B,KAAKgsD,MAAQhsD,KAAKmmB,KAAKpK,KAAKY,EAC5B3c,KAAKisD,MAAQjsD,KAAKmmB,KAAKpK,KAAK7a,EAC5BlB,KAAKolC,WAAW9mB,aAAa,QAASte,KAAKgsD,OAC3ChsD,KAAKolC,WAAW9mB,aAAa,SAAUte,KAAKisD,OAC5C,IAAI3qD,EAAIsC,SAAS,KACjB5D,KAAK6oC,cAAcnrB,YAAYpc,GAC/BtB,KAAKi1C,UAAY3zC,OAEjBtB,KAAK26B,WAAa,OAClB36B,KAAKi1C,UAAYj1C,KAAK6lC,aAGxB7lC,KAAK8tC,kBAGPoD,aAAazuC,UAAU27C,aAAe,WACpC,IAAI5iC,EAAexb,KAAKmkC,aAAa5H,YACrCv8B,KAAKq7B,gBAAkB/8B,iBAAiBkd,EAAaxT,EAAIwT,EAAaxT,EAAE9J,OAAS,GACjF,IAAIguD,EAAiBlsD,KAAKi1C,UAAUl2C,MACpCmtD,EAAenqD,MAAQmqD,EAAenH,KAAOvpC,EAAaogB,GAAK57B,KAAK0+C,WAAWljC,EAAaogB,IAAM,gBAE9FpgB,EAAaqF,KACfqrC,EAAepH,OAAS9kD,KAAK0+C,WAAWljC,EAAaqF,IACrDqrC,EAAeC,YAAc3wC,EAAamgB,GAAK,MAGjD,IAiBI59B,EAAGE,EAjBHmgB,EAAWpe,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAEtE,IAAKxB,KAAK6mB,WAAWrN,YAAYoC,MAI/B,GAHAswC,EAAe7uC,SAAW7B,EAAa6hB,UAAY,KACnD6uB,EAAeE,WAAa5wC,EAAa6hB,UAAY,KAEjDjf,EAASO,OACX3e,KAAKi1C,UAAU5O,UAAYjoB,EAASO,WAC/B,CACLutC,EAAehvC,WAAakB,EAASG,QACrC,IAAIE,EAAUjD,EAAaiD,QACvBD,EAAShD,EAAagD,OAC1B0tC,EAAe3uC,UAAYiB,EAC3B0tC,EAAe1uC,WAAaiB,EAKhC,IAEIghC,EAAO4M,EAASC,EAFhBztB,EAAUrjB,EAAaxT,EAC3B/J,EAAM4gC,EAAQ3gC,OAEd,IACIoc,EADAokB,EAAe1+B,KAAK2+B,QAEpB2f,EAAW,GACXxzB,EAAM,EAEV,IAAK/sB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAyC3B,GAxCIiC,KAAK6mB,WAAWrN,YAAYoC,OACzB5b,KAAKulD,UAAUz6B,GAMlB20B,EAAQz/C,KAAKulD,UAAUz6B,KALvB20B,EAAQ77C,SAAS,SACX0a,aAAa,iBAAkB,QACrCmhC,EAAMnhC,aAAa,kBAAmB,SACtCmhC,EAAMnhC,aAAa,oBAAqB,MAKrCte,KAAKwlD,WACJxlD,KAAK64C,UAAU/tB,GAEjBwhC,GADAD,EAAUrsD,KAAK64C,UAAU/tB,IACT83B,SAAS,KAEzByJ,EAAUtoD,UAAU,QACZhF,MAAMqtD,WAAa,GAC3BE,EAAQ1oD,SAAS,QACX8Z,YAAY+hC,GAClB5gD,SAASwtD,MAIRrsD,KAAKwlD,SAYR/F,EAAQz/C,KAAKulD,UAAUz6B,GAAO9qB,KAAKulD,UAAUz6B,GAAOlnB,SAAS,QAXzD5D,KAAK64C,UAAU/tB,IACjBuhC,EAAUrsD,KAAK64C,UAAU/tB,GACzB20B,EAAQz/C,KAAKulD,UAAUz6B,KAGvBjsB,SADAwtD,EAAUtoD,UAAU,SAGpBlF,SADA4gD,EAAQ17C,UAAU,SAElBsoD,EAAQ3uC,YAAY+hC,IAQtBz/C,KAAK6mB,WAAWrN,YAAYoC,MAAO,CACrC,IACI7F,EADAisB,EAAWhiC,KAAK6mB,WAAWrN,YAAYwH,YAAYxF,EAAa8hB,UAAUv/B,GAAIqgB,EAASI,OAAQxe,KAAK6mB,WAAWrN,YAAY4H,cAAc5F,EAAaha,GAAG+c,SAkB7J,GAdExI,EADEisB,EACUA,EAASjmB,KAET,KAGd2iB,EAAan4B,QAETwP,GAAaA,EAAUuE,SACzBA,EAASvE,EAAUuE,OAAO,GAAGO,GAC7B6jB,EAAal3B,MAAMgU,EAAa6hB,UAAY,IAAK7hB,EAAa6hB,UAAY,KAC1EihB,EAAWt+C,KAAKq+C,gBAAgB3f,EAAcpkB,GAC9CmlC,EAAMnhC,aAAa,IAAKggC,IAGrBt+C,KAAKwlD,SAmBRxlD,KAAKi1C,UAAUv3B,YAAY+hC,OAnBT,CAGlB,GAFAz/C,KAAKi1C,UAAUv3B,YAAY2uC,GAEvBt2C,GAAaA,EAAUuE,OAAQ,CAEjCzW,SAAS8Z,KAAKD,YAAY4uC,GAC1B,IAAI5B,EAAc4B,EAAMtM,UACxBsM,EAAMhuC,aAAa,QAASosC,EAAYh9C,MAAQ,GAChD4+C,EAAMhuC,aAAa,SAAUosC,EAAYrzB,OAAS,GAClDi1B,EAAMhuC,aAAa,UAAWosC,EAAYx/C,EAAI,EAAI,KAAOw/C,EAAYv/C,EAAI,GAAK,KAAOu/C,EAAYh9C,MAAQ,GAAK,KAAOg9C,EAAYrzB,OAAS,IAC1Ii1B,EAAMvtD,MAAMyJ,UAAY8jD,EAAMvtD,MAAM4yC,gBAAkB,cAAgB+Y,EAAYx/C,EAAI,GAAK,OAASw/C,EAAYv/C,EAAI,GAAK,MACzH0zB,EAAQ9gC,GAAGq/B,QAAUstB,EAAYv/C,EAAI,OAErCmhD,EAAMhuC,aAAa,QAAS,GAC5BguC,EAAMhuC,aAAa,SAAU,GAG/B+tC,EAAQ3uC,YAAY4uC,SAKtB7M,EAAM/gC,YAAcmgB,EAAQ9gC,GAAGK,IAC/BqhD,EAAMzmB,eAAe,uCAAwC,YAAa,YAErEh5B,KAAKwlD,SAKRxlD,KAAKi1C,UAAUv3B,YAAY+hC,IAJ3Bz/C,KAAKi1C,UAAUv3B,YAAY2uC,GAE3B5M,EAAM1gD,MAAMyJ,UAAYi3C,EAAM1gD,MAAM4yC,gBAAkB,kBAAoBn2B,EAAa6hB,UAAY,IAAM,SAOxGr9B,KAAKwlD,SAGRxlD,KAAK64C,UAAU/tB,GAAO20B,EAFtBz/C,KAAK64C,UAAU/tB,GAAOuhC,EAKxBrsD,KAAK64C,UAAU/tB,GAAK/rB,MAAMI,QAAU,QACpCa,KAAKulD,UAAUz6B,GAAO20B,EACtB30B,GAAO,EAGT,KAAOA,EAAM9qB,KAAK64C,UAAU36C,QAC1B8B,KAAK64C,UAAU/tB,GAAK/rB,MAAMI,QAAU,OACpC2rB,GAAO,GAIXomB,aAAazuC,UAAUuyC,mBAAqB,WAC1C,GAAIh1C,KAAK+b,KAAKM,YAAa,CACzB,IAAKrc,KAAKinB,gBAAkBjnB,KAAKs7B,mBAC/B,OAGIt7B,KAAKwlD,UAAYxlD,KAAK0yC,eAAeU,UACvCpzC,KAAKolC,WAAW9mB,aAAa,WAAYte,KAAK0yC,eAAeC,MAAMlxC,EAAEL,EAAE,GAAK,KAAOpB,KAAK0yC,eAAeC,MAAMlxC,EAAEL,EAAE,GAAK,IAAMpB,KAAKgsD,MAAQ,IAAMhsD,KAAKisD,OACpJjsD,KAAKolC,WAAWrmC,MAAMyJ,UAAYxI,KAAKolC,WAAWrmC,MAAM4yC,gBAAkB,cAAgB3xC,KAAK0yC,eAAeC,MAAMlxC,EAAEL,EAAE,GAAK,OAASpB,KAAK0yC,eAAeC,MAAMlxC,EAAEL,EAAE,GAAK,OAO/K,GAFApB,KAAKm+C,aAAargB,YAAY99B,KAAKmkC,aAAa5H,YAAav8B,KAAKs7B,oBAE7Dt7B,KAAKs7B,oBAAuBt7B,KAAKm+C,aAAa7iB,mBAAnD,CAIA,IAAIv9B,EACAE,EAKAiiD,EAAgBC,EAAUoM,EAJ1B5+C,EAAQ,EACR0tB,EAAkBr7B,KAAKm+C,aAAa9iB,gBACpCwD,EAAU7+B,KAAKmkC,aAAa5H,YAAYv0B,EAI5C,IAHA/J,EAAM4gC,EAAQ3gC,OAGTH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpB8gC,EAAQ9gC,GAAGmK,EACbyF,GAAS,GAIXwyC,EAAWngD,KAAK64C,UAAU96C,GAC1BwuD,EAAWvsD,KAAKulD,UAAUxnD,GAC1BmiD,EAAiB7kB,EAAgB1tB,GACjCA,GAAS,EAELuyC,EAAez7C,KAAKwD,IACjBjI,KAAKwlD,SAGRrF,EAAS7hC,aAAa,YAAa4hC,EAAej4C,GAFlDk4C,EAASphD,MAAMyJ,UAAY23C,EAASphD,MAAM4yC,gBAAkBuO,EAAej4C,GAO/Ek4C,EAASphD,MAAMojD,QAAUjC,EAAe/3C,EAEpC+3C,EAAevkB,IAAMukB,EAAez7C,KAAKk3B,IAC3C4wB,EAASjuC,aAAa,eAAgB4hC,EAAevkB,IAGnDukB,EAAer/B,IAAMq/B,EAAez7C,KAAKoc,IAC3C0rC,EAASjuC,aAAa,SAAU4hC,EAAer/B,IAG7Cq/B,EAAetkB,IAAMskB,EAAez7C,KAAKm3B,KAC3C2wB,EAASjuC,aAAa,OAAQ4hC,EAAetkB,IAC7C2wB,EAASxtD,MAAMgD,MAAQm+C,EAAetkB,KAI1C,GAAI57B,KAAKi1C,UAAU+K,UAAYhgD,KAAK6zC,SAAW7zC,KAAKinB,eAAiBjnB,KAAKyE,MAAO,CAC/E,IAAIimD,EAAc1qD,KAAKi1C,UAAU+K,UAE7BhgD,KAAKslD,YAAY3oC,IAAM+tC,EAAYh9C,QACrC1N,KAAKslD,YAAY3oC,EAAI+tC,EAAYh9C,MACjC1N,KAAKolC,WAAW9mB,aAAa,QAASosC,EAAYh9C,QAGhD1N,KAAKslD,YAAYpkD,IAAMwpD,EAAYrzB,SACrCr3B,KAAKslD,YAAYpkD,EAAIwpD,EAAYrzB,OACjCr3B,KAAKolC,WAAW9mB,aAAa,SAAUosC,EAAYrzB,SAKjDr3B,KAAKslD,YAAY3oC,IAAM+tC,EAAYh9C,MAAQ8+C,GAAcxsD,KAAKslD,YAAYpkD,IAAMwpD,EAAYrzB,OAASm1B,GAAcxsD,KAAKslD,YAAYp6C,IAAMw/C,EAAYx/C,EAF7I,GAE2JlL,KAAKslD,YAAYn6C,IAAMu/C,EAAYv/C,EAF9L,IAGXnL,KAAKslD,YAAY3oC,EAAI+tC,EAAYh9C,MAAQ8+C,EACzCxsD,KAAKslD,YAAYpkD,EAAIwpD,EAAYrzB,OAASm1B,EAC1CxsD,KAAKslD,YAAYp6C,EAAIw/C,EAAYx/C,EALtB,EAMXlL,KAAKslD,YAAYn6C,EAAIu/C,EAAYv/C,EANtB,EAOXnL,KAAKolC,WAAW9mB,aAAa,UAAWte,KAAKslD,YAAYp6C,EAAI,IAAMlL,KAAKslD,YAAYn6C,EAAI,IAAMnL,KAAKslD,YAAY3oC,EAAI,IAAM3c,KAAKslD,YAAYpkD,GAC1IlB,KAAKolC,WAAWrmC,MAAMyJ,UAAYxI,KAAKolC,WAAWrmC,MAAM4yC,gBAAkB,aAAe3xC,KAAKslD,YAAYp6C,EAAI,MAAQlL,KAAKslD,YAAYn6C,EAAI,UAUjJyH,gBAAgB,CAACslC,YAAajP,iBAAkBmc,aAAc9T,cAAevI,iBAAkBC,aAAcE,mBAAoBkI,eAEjIA,cAAc3uC,UAAUoyC,cAAgB,WACtC,IAAIze,EAAYp2B,KAAK6mB,WAAWgR,cAAc73B,KAAK83B,WAC/Cc,EAAM,IAAI6zB,MAEVzsD,KAAK+b,KAAKhC,SACZ/Z,KAAK0sD,UAAY9oD,SAAS,SAC1B5D,KAAK0sD,UAAUpuC,aAAa,QAASte,KAAK83B,UAAUnb,EAAI,MACxD3c,KAAK0sD,UAAUpuC,aAAa,SAAUte,KAAK83B,UAAU52B,EAAI,MACzDlB,KAAK0sD,UAAU1zB,eAAe,+BAAgC,OAAQ5C,GACtEp2B,KAAK6lC,aAAanoB,YAAY1d,KAAK0sD,WACnC1sD,KAAK80C,YAAYx2B,aAAa,QAASte,KAAK83B,UAAUnb,GACtD3c,KAAK80C,YAAYx2B,aAAa,SAAUte,KAAK83B,UAAU52B,IAEvDlB,KAAK6lC,aAAanoB,YAAYkb,GAGhCA,EAAIhY,IAAMwV,EAENp2B,KAAK+b,KAAKshC,IACZr9C,KAAK80C,YAAYx2B,aAAa,KAAMte,KAAK+b,KAAKshC,KA+ClDzqC,gBAAgB,CAACslC,YAAalP,aAAcD,kBAAmBoI,gBAE/DA,eAAe1uC,UAAUyvC,MAAQ,WAC/B,IAAIn0C,EAEAooB,EADAloB,EAAM+B,KAAKmmB,KAAKmhB,eAAeppC,OAGnC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAIN,QAFlBooB,EAAOnmB,KAAKmmB,KAAKmhB,eAAevpC,IAEvB6B,OACPumB,EAAKsrB,gBAAgB1yC,MAAMszC,YAAclsB,EAAKsrB,gBAAgB1yC,MAAMuzC,kBAAoBtyC,KAAKylD,GAAGrkD,EAAI,KACpG+kB,EAAK7hB,UAAUvF,MAAMK,gBAAkB+mB,EAAK7hB,UAAUvF,MAAM8wC,mBAAqB1pB,EAAK7hB,UAAUvF,MAAMM,sBAAwB,cAC9H8mB,EAAKsrB,gBAAgB1yC,MAAMyJ,UAAY2d,EAAKsrB,gBAAgB1yC,MAAM4yC,gBAAkB,8CAK1FR,eAAe1uC,UAAU6jD,eAAiB,aAE1CnV,eAAe1uC,UAAU4rC,KAAO,aAEhC8C,eAAe1uC,UAAUsrC,YAAc,WACrC,IACIhwC,EAAGE,EADHwG,EAAOzE,KAAKinB,cAGhB,GAAIjnB,KAAKksC,UAGP,IAFAjuC,EAAM+B,KAAKksC,UAAUhuC,OAEhBH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0G,EAAOzE,KAAKksC,UAAUnuC,GAAG20C,eAAeC,MAAMluC,MAAQA,EAI1D,GAAIA,GAAQzE,KAAKylD,GAAGhhD,MAAQzE,KAAKyB,GAAKzB,KAAKyB,EAAEgD,MAAQzE,KAAKmoB,KAAOnoB,KAAKmoB,GAAG1jB,MAAQzE,KAAKooB,GAAG3jB,MAAQzE,KAAKqoB,GAAG5jB,OAASzE,KAAKsoB,GAAG7jB,MAAQzE,KAAKuoB,GAAG9jB,MAAQzE,KAAKwoB,GAAG/jB,MAAQzE,KAAKyoB,GAAGhkB,MAAQzE,KAAK2H,GAAK3H,KAAK2H,EAAElD,KAAM,CAGvM,GAFAzE,KAAK8oB,IAAIviB,QAELvG,KAAKksC,UAIP,IAAKnuC,EAFLE,EAAM+B,KAAKksC,UAAUhuC,OAAS,EAEhBH,GAAK,EAAGA,GAAK,EAAG,CAC5B,IAAI4uD,EAAU3sD,KAAKksC,UAAUnuC,GAAG20C,eAAeC,MAC/C3yC,KAAK8oB,IAAI1gB,WAAWukD,EAAQlrD,EAAEL,EAAE,IAAKurD,EAAQlrD,EAAEL,EAAE,GAAIurD,EAAQlrD,EAAEL,EAAE,IACjEpB,KAAK8oB,IAAIhiB,SAAS6lD,EAAQlkC,GAAGrnB,EAAE,IAAI2F,SAAS4lD,EAAQlkC,GAAGrnB,EAAE,IAAI4F,QAAQ2lD,EAAQlkC,GAAGrnB,EAAE,IAClFpB,KAAK8oB,IAAIhiB,SAAS6lD,EAAQrkC,GAAGlnB,GAAG2F,SAAS4lD,EAAQpkC,GAAGnnB,GAAG4F,QAAQ2lD,EAAQnkC,GAAGpnB,GAC1EpB,KAAK8oB,IAAIthB,MAAM,EAAImlD,EAAQxrD,EAAEC,EAAE,GAAI,EAAIurD,EAAQxrD,EAAEC,EAAE,GAAI,EAAIurD,EAAQxrD,EAAEC,EAAE,IACvEpB,KAAK8oB,IAAI1gB,UAAUukD,EAAQhlD,EAAEvG,EAAE,GAAIurD,EAAQhlD,EAAEvG,EAAE,GAAIurD,EAAQhlD,EAAEvG,EAAE,IAUnE,GANIpB,KAAKyB,EACPzB,KAAK8oB,IAAI1gB,WAAWpI,KAAKyB,EAAEL,EAAE,IAAKpB,KAAKyB,EAAEL,EAAE,GAAIpB,KAAKyB,EAAEL,EAAE,IAExDpB,KAAK8oB,IAAI1gB,WAAWpI,KAAKmoB,GAAG/mB,GAAIpB,KAAKooB,GAAGhnB,EAAGpB,KAAKqoB,GAAGjnB,GAGjDpB,KAAK2H,EAAG,CACV,IAAIilD,EAGFA,EADE5sD,KAAKyB,EACM,CAACzB,KAAKyB,EAAEL,EAAE,GAAKpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAKyB,EAAEL,EAAE,GAAKpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAKyB,EAAEL,EAAE,GAAKpB,KAAK2H,EAAEvG,EAAE,IAE9E,CAACpB,KAAKmoB,GAAG/mB,EAAIpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAKooB,GAAGhnB,EAAIpB,KAAK2H,EAAEvG,EAAE,GAAIpB,KAAKqoB,GAAGjnB,EAAIpB,KAAK2H,EAAEvG,EAAE,IAGvF,IAAIyrD,EAAMhwD,KAAKM,KAAKN,KAAKI,IAAI2vD,EAAW,GAAI,GAAK/vD,KAAKI,IAAI2vD,EAAW,GAAI,GAAK/vD,KAAKI,IAAI2vD,EAAW,GAAI,IAElGE,EAAU,CAACF,EAAW,GAAKC,EAAKD,EAAW,GAAKC,EAAKD,EAAW,GAAKC,GACrEE,EAAiBlwD,KAAKM,KAAK2vD,EAAQ,GAAKA,EAAQ,GAAKA,EAAQ,GAAKA,EAAQ,IAC1EE,EAAcnwD,KAAK4nB,MAAMqoC,EAAQ,GAAIC,GACrCE,EAAcpwD,KAAK4nB,MAAMqoC,EAAQ,IAAKA,EAAQ,IAClD9sD,KAAK8oB,IAAI/hB,QAAQkmD,GAAanmD,SAASkmD,GAGzChtD,KAAK8oB,IAAIhiB,SAAS9G,KAAKsoB,GAAGlnB,GAAG2F,SAAS/G,KAAKuoB,GAAGnnB,GAAG4F,QAAQhH,KAAKwoB,GAAGpnB,GACjEpB,KAAK8oB,IAAIhiB,SAAS9G,KAAKyoB,GAAGrnB,EAAE,IAAI2F,SAAS/G,KAAKyoB,GAAGrnB,EAAE,IAAI4F,QAAQhH,KAAKyoB,GAAGrnB,EAAE,IACzEpB,KAAK8oB,IAAI1gB,UAAUpI,KAAK6mB,WAAWqmB,SAASvwB,EAAI,EAAG3c,KAAK6mB,WAAWqmB,SAAShsC,EAAI,EAAG,GACnFlB,KAAK8oB,IAAI1gB,UAAU,EAAG,EAAGpI,KAAKylD,GAAGrkD,GACjC,IAAI8rD,GAAoBltD,KAAK0lD,SAAS76C,OAAO7K,KAAK8oB,KAElD,IAAKokC,GAAoBltD,KAAKylD,GAAGhhD,OAASzE,KAAKmmB,KAAKmhB,eAAgB,CAElE,IAAInhB,EAEJ,IAHAloB,EAAM+B,KAAKmmB,KAAKmhB,eAAeppC,OAG1BH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAGN,QAFlBooB,EAAOnmB,KAAKmmB,KAAKmhB,eAAevpC,IAEvB6B,OACHstD,IACF/mC,EAAK7hB,UAAUvF,MAAMyJ,UAAY2d,EAAK7hB,UAAUvF,MAAM4yC,gBAAkB3xC,KAAK8oB,IAAInc,SAG/E3M,KAAKylD,GAAGhhD,OACV0hB,EAAKsrB,gBAAgB1yC,MAAMszC,YAAclsB,EAAKsrB,gBAAgB1yC,MAAMuzC,kBAAoBtyC,KAAKylD,GAAGrkD,EAAI,OAK1GpB,KAAK8oB,IAAI/d,MAAM/K,KAAK0lD,WAIxB1lD,KAAKinB,eAAgB,GAGvBkqB,eAAe1uC,UAAUwrC,aAAe,SAAUvD,GAChD1qC,KAAKizC,kBAAkBvI,GAAK,IAG9ByG,eAAe1uC,UAAUi2B,QAAU,aAEnCyY,eAAe1uC,UAAUyrC,eAAiB,WACxC,OAAO,MAKTyX,SAASljD,UAAUsrC,YAAc,aAEjC,IAAIof,iBAAmB,WACrB,IAAI7wC,EAAW,GACX8wC,EAAuB,GACvBluC,EAAW,EACXjhB,EAAM,EACNovD,EAAuB,EACvBC,GAAW,EACXC,GAAY,EAEhB,SAASC,EAAcC,GAIrB,IAHA,IAAI1vD,EAAI,EACJ2vD,EAAWD,EAAG/sD,OAEX3C,EAAIE,GACLmvD,EAAqBrvD,GAAG4vD,YAAcD,IACxCN,EAAqBjqD,OAAOpF,EAAG,GAC/BA,GAAK,EACLE,GAAO,EAEFyvD,EAASE,UACZC,KAIJ9vD,GAAK,EAIT,SAAS+vD,EAAkBhvD,EAAS2c,GAClC,IAAK3c,EACH,OAAO,KAKT,IAFA,IAAIf,EAAI,EAEDA,EAAIE,GAAK,CACd,GAAImvD,EAAqBrvD,GAAG6oB,MAAQ9nB,GAA4C,OAAjCsuD,EAAqBrvD,GAAG6oB,KACrE,OAAOwmC,EAAqBrvD,GAAG4vD,UAGjC5vD,GAAK,EAGP,IAAI2vD,EAAW,IAAIK,cAGnB,OAFAC,EAAeN,EAAU5uD,GACzB4uD,EAASO,QAAQnvD,EAAS2c,GACnBiyC,EAeT,SAASQ,IACPb,GAAwB,EACxBc,IAGF,SAASN,IACPR,GAAwB,EAG1B,SAASW,EAAeN,EAAU5uD,GAChC4uD,EAAS5qD,iBAAiB,UAAW0qD,GACrCE,EAAS5qD,iBAAiB,UAAWorD,GACrCR,EAAS5qD,iBAAiB,QAAS+qD,GACnCT,EAAqBpqD,KAAK,CACxB4jB,KAAM9nB,EACN6uD,UAAWD,IAEbzvD,GAAO,EAkCT,SAAS+3B,EAAOo4B,GACd,IACIrwD,EADAswD,EAAcD,EAAUlvC,EAG5B,IAAKnhB,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUW,YAAYD,GAGhDnvC,EAAWkvC,EAEPf,IAAyBE,EAC3BrxD,OAAOyc,sBAAsBqd,GAE7Bs3B,GAAW,EAIf,SAASiB,EAAMH,GACblvC,EAAWkvC,EACXlyD,OAAOyc,sBAAsBqd,GAgF/B,SAASm4B,KACFZ,GAAaF,GACZC,IACFpxD,OAAOyc,sBAAsB41C,GAC7BjB,GAAW,GAyDjB,OAnBAhxC,EAASwxC,kBAAoBA,EAC7BxxC,EAASkyC,cA7KT,SAAuBC,GACrB,IAAIf,EAAW,IAAIK,cAGnB,OAFAC,EAAeN,EAAU,MACzBA,EAASgB,UAAUD,GACZf,GA0KTpxC,EAASqyC,SAvKT,SAAkBvwD,EAAKuvD,GACrB,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUgB,SAASvwD,EAAKuvD,IAoKpDrxC,EAASsyC,aAhKT,SAAsBxwD,EAAKuvD,GACzB,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUiB,aAAaxwD,EAAKuvD,IA6JxDrxC,EAASia,KAzJT,SAAco3B,GACZ,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUp3B,KAAKo3B,IAsJ3CrxC,EAASyZ,MA5HT,SAAe43B,GACb,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAU53B,MAAM43B,IAyH5CrxC,EAASm5B,KA7GT,SAAckY,GACZ,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUlY,KAAKkY,IA0G3CrxC,EAASuyC,YAtGT,SAAqBlB,GACnB,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUkB,YAAYlB,IAmGlDrxC,EAASwyC,iBAvFT,SAA0BrzC,EAAeszC,EAAYngC,GACnD,IACI7wB,EADAixD,EAAe,GAAGnwC,OAAO,GAAGhR,MAAMq2C,KAAKrgD,SAASorD,uBAAuB,WAAY,GAAGphD,MAAMq2C,KAAKrgD,SAASorD,uBAAuB,eAEjIhxD,EAAM+wD,EAAa9wD,OAEvB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACpB6wB,GACFogC,EAAajxD,GAAGugB,aAAa,eAAgBsQ,GAG/Ck/B,EAAkBkB,EAAajxD,GAAI0d,GAGrC,GAAIszC,GAAsB,IAAR9wD,EAAW,CACtB2wB,IACHA,EAAW,OAGb,IAAIjR,EAAO9Z,SAASqrD,qBAAqB,QAAQ,GACjDvxC,EAAKP,UAAY,GACjB,IAAI+xC,EAAMprD,UAAU,OACpBorD,EAAIpwD,MAAM2O,MAAQ,OAClByhD,EAAIpwD,MAAMs4B,OAAS,OACnB83B,EAAI7wC,aAAa,eAAgBsQ,GACjCjR,EAAKD,YAAYyxC,GACjBrB,EAAkBqB,EAAK1zC,KA+D3Ba,EAAS8yC,OA3DT,WACE,IAAIrxD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUyB,UAyDtC9yC,EAAS+yC,YA1HT,SAAqB7rD,EAAO8rD,EAAS3B,GACnC,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAU0B,YAAY7rD,EAAO8rD,EAAS3B,IAuHlErxC,EAASoc,QAnGT,SAAiBi1B,GACf,IAAI5vD,EAEJ,IAAKA,EAAIE,EAAM,EAAGF,GAAK,EAAGA,GAAK,EAC7BqvD,EAAqBrvD,GAAG4vD,UAAUj1B,QAAQi1B,IAgG9CrxC,EAASizC,OA9CT,WACEhC,GAAY,GA8CdjxC,EAASkzC,SA3CT,WACEjC,GAAY,EACZY,KA0CF7xC,EAASqa,UAvCT,SAAmBv4B,EAAKuvD,GACtB,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAUh3B,UAAUv4B,EAAKuvD,IAoCrDrxC,EAASwa,KAhCT,SAAc62B,GACZ,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAU72B,KAAK62B,IA6B3CrxC,EAASya,OAzBT,SAAgB42B,GACd,IAAI5vD,EAEJ,IAAKA,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBqvD,EAAqBrvD,GAAG4vD,UAAU52B,OAAO42B,IAsB7CrxC,EAASmzC,wBA9NT,WACE,IAAI1xD,EACAE,EAAMmvD,EAAqBlvD,OAC3BwxD,EAAa,GAEjB,IAAK3xD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB2xD,EAAW1sD,KAAKoqD,EAAqBrvD,GAAG4vD,WAG1C,OAAO+B,GAsNFpzC,EAhRc,GAmRnByxC,cAAgB,WAClB/tD,KAAK6C,KAAO,GACZ7C,KAAKqhB,KAAO,GACZrhB,KAAK8a,KAAO,GACZ9a,KAAKif,UAAW,EAChBjf,KAAKguC,aAAe,EACpBhuC,KAAK2vD,gBAAkB,EACvB3vD,KAAKO,WAAa,EAClBP,KAAKQ,YAAc,EACnBR,KAAKopB,UAAY,EACjBppB,KAAK4vD,UAAY,EACjB5vD,KAAK6vD,UAAY,EACjB7vD,KAAK8vD,cAAgB,EACrB9vD,KAAK+vD,UAAY,EACjB/vD,KAAKyb,cAAgB,GACrBzb,KAAK0b,OAAS,GACd1b,KAAK4tD,UAAW,EAChB5tD,KAAKgwD,UAAW,EAChBhwD,KAAKiwD,MAAO,EACZjwD,KAAK4uB,SAAW,KAChB5uB,KAAKkwD,YAAcnvD,kBACnBf,KAAK+3B,WAAa,GAClB/3B,KAAKmwD,cAAgB,EACrBnwD,KAAKowD,WAAa,EAClBpwD,KAAKqwD,kBAAoB/zD,gBACzB0D,KAAKmwB,SAAW,GAChBnwB,KAAKswD,OAAQ,EACbtwD,KAAKuwD,gBAAiB,EACtBvwD,KAAK8rC,iBAAmBhuC,mBACxBkC,KAAK+sC,eAAiB,IAAI7V,eAC1Bl3B,KAAKgtC,gBAAkBzX,0BAGzB3iB,gBAAgB,CAACpQ,WAAYurD,eAE7BA,cAActrD,UAAUisD,UAAY,SAAUD,IACxCA,EAAO1nB,SAAW0nB,EAAOnqD,aAC3BtE,KAAK+mC,QAAU0nB,EAAO1nB,SAAW0nB,EAAOnqD,WAG1C,IAAIksD,EAAW/B,EAAO+B,SAAW/B,EAAO+B,SAAW/B,EAAO7/B,SAAW6/B,EAAO7/B,SAAW,MAEvF,OAAQ4hC,GACN,IAAK,SACHxwD,KAAK4uB,SAAW,IAAI+X,eAAe3mC,KAAMyuD,EAAOgC,kBAChD,MAEF,IAAK,MACHzwD,KAAK4uB,SAAW,IAAIqW,YAAYjlC,KAAMyuD,EAAOgC,kBAC7C,MAEF,QACEzwD,KAAK4uB,SAAW,IAAIyY,eAAernC,KAAMyuD,EAAOgC,kBAIpDzwD,KAAK+sC,eAAe9T,aAAau3B,GACjCxwD,KAAK4uB,SAASgd,oBAAoB5rC,KAAK8rC,kBACvC9rC,KAAKwwD,SAAWA,EAEI,KAAhB/B,EAAOwB,MAA+B,OAAhBxB,EAAOwB,WAAiC1sB,IAAhBkrB,EAAOwB,OAAsC,IAAhBxB,EAAOwB,KACpFjwD,KAAKiwD,MAAO,GACa,IAAhBxB,EAAOwB,KAChBjwD,KAAKiwD,MAAO,EAEZjwD,KAAKiwD,KAAOS,SAASjC,EAAOwB,MAG9BjwD,KAAKgwD,WAAW,aAAcvB,IAASA,EAAOuB,SAC9ChwD,KAAKqhB,KAAOotC,EAAOptC,KAAOotC,EAAOptC,KAAO,GACxCrhB,KAAK2wD,kBAAmBlC,EAAOx7C,eAAe,qBAAsBw7C,EAAOkC,iBAC3E3wD,KAAK+3B,WAAa02B,EAAO12B,WACzB/3B,KAAK4wD,eAAiBnC,EAAOmC,eAEzBnC,EAAOh5B,cACTz1B,KAAKgtC,gBAAgBpW,gBAAgB63B,EAAOh5B,cAG1Cg5B,EAAOhzC,cACTzb,KAAKytC,gBAAgBghB,EAAOhzC,eACnBgzC,EAAO3zC,QACuB,IAAnC2zC,EAAO3zC,KAAK+1C,YAAY,MAC1B7wD,KAAK8a,KAAO2zC,EAAO3zC,KAAKgnB,OAAO,EAAG2sB,EAAO3zC,KAAK+1C,YAAY,MAAQ,GAElE7wD,KAAK8a,KAAO2zC,EAAO3zC,KAAKgnB,OAAO,EAAG2sB,EAAO3zC,KAAK+1C,YAAY,KAAO,GAGnE7wD,KAAK8wD,SAAWrC,EAAO3zC,KAAKgnB,OAAO2sB,EAAO3zC,KAAK+1C,YAAY,KAAO,GAClE7wD,KAAK8wD,SAAW9wD,KAAK8wD,SAAShvB,OAAO,EAAG9hC,KAAK8wD,SAASD,YAAY,UAClEn3B,YAAYK,KAAK00B,EAAO3zC,KAAM9a,KAAKytC,gBAAgBvqC,KAAKlD,MAAO,WAC7DA,KAAK+wD,QAAQ,gBACb7tD,KAAKlD,SAIX+tD,cAActrD,UAAUwrD,QAAU,SAAUlnB,EAAStrB,GACnD,IAAIgzC,EAAS,CACX1nB,QAASA,EACTtrB,cAAeA,EAAyC,iBAAlBA,EAA6BA,EAAgBhB,KAAKC,MAAMe,GAAiB,MAE7Gu1C,EAAoBjqB,EAAQkqB,WAChCxC,EAAO3zC,KAAOk2C,EAAkBE,aAAa,uBAAyBF,EAAkBE,aAAa,uBAAuB1tD,MAAQwtD,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgB1tD,MAAQwtD,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAW1tD,MAAQ,GAC1UirD,EAAO+B,SAAWQ,EAAkBE,aAAa,kBAAoBF,EAAkBE,aAAa,kBAAkB1tD,MAAQwtD,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgB1tD,MAAQwtD,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAW1tD,MAAQwtD,EAAkBE,aAAa,oBAAsBF,EAAkBE,aAAa,oBAAoB1tD,MAAQwtD,EAAkBE,aAAa,eAAiBF,EAAkBE,aAAa,eAAe1tD,MAAQ,SAC1hB,IAAIysD,EAAOe,EAAkBE,aAAa,kBAAoBF,EAAkBE,aAAa,kBAAkB1tD,MAAQwtD,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgB1tD,MAAQwtD,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAW1tD,MAAQ,GAEhT,KAATysD,IACFxB,EAAOwB,KAD6B,UAATA,IAET,SAATA,GAGKS,SAAST,KAGzB,IAAID,EAAWgB,EAAkBE,aAAa,sBAAwBF,EAAkBE,aAAa,sBAAsB1tD,MAAQwtD,EAAkBE,aAAa,oBAAsBF,EAAkBE,aAAa,oBAAoB1tD,OAAQwtD,EAAkBE,aAAa,gBAAiBF,EAAkBE,aAAa,eAAe1tD,MACjVirD,EAAOuB,SAAwB,UAAbA,EAClBvB,EAAOptC,KAAO2vC,EAAkBE,aAAa,aAAeF,EAAkBE,aAAa,aAAa1tD,MAAQwtD,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgB1tD,MAAQwtD,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAW1tD,MAAQ,GAGpS,WAFFwtD,EAAkBE,aAAa,uBAAyBF,EAAkBE,aAAa,uBAAuB1tD,MAAQwtD,EAAkBE,aAAa,qBAAuBF,EAAkBE,aAAa,qBAAqB1tD,MAAQwtD,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgB1tD,MAAQ,MAG9VirD,EAAO0C,WAAY,GAGrBnxD,KAAK0uD,UAAUD,IAGjBV,cAActrD,UAAUipC,cAAgB,SAAU3vB,GAC5CA,EAAKiZ,GAAKh1B,KAAKyb,cAAcuZ,KAC/Bh1B,KAAKyb,cAAcuZ,GAAKjZ,EAAKiZ,GAC7Bh1B,KAAKQ,YAAc3D,KAAKU,MAAMwe,EAAKiZ,GAAKh1B,KAAKyb,cAAckvB,KAG7D,IACI5sC,EAGA+J,EAJAwR,EAAStZ,KAAKyb,cAAcnC,OAE5Brb,EAAMqb,EAAOpb,OACbytC,EAAY5vB,EAAKzC,OAEjBI,EAAOiyB,EAAUztC,OAErB,IAAK4J,EAAI,EAAGA,EAAI4R,EAAM5R,GAAK,EAGzB,IAFA/J,EAAI,EAEGA,EAAIE,GAAK,CACd,GAAIqb,EAAOvb,GAAGib,IAAM2yB,EAAU7jC,GAAGkR,GAAI,CACnCM,EAAOvb,GAAK4tC,EAAU7jC,GACtB,MAGF/J,GAAK,EAST,IALIge,EAAKH,OAASG,EAAKgD,SACrB/e,KAAK4uB,SAAS/H,WAAWrN,YAAYiG,SAAS1D,EAAKH,OACnD5b,KAAK4uB,SAAS/H,WAAWrN,YAAYoG,SAAS7D,EAAKgD,MAAO/e,KAAK4uB,SAAS/H,WAAWhH,OAGjF9D,EAAKL,OAGP,IAFAzd,EAAM8d,EAAKL,OAAOxd,OAEbH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKyb,cAAcC,OAAO1Y,KAAK+Y,EAAKL,OAAO3d,IAI/CiC,KAAKyb,cAAcc,YAAa,EAChCC,YAAY40C,aAAapxD,KAAKyb,cAAezb,KAAK4uB,SAAS/H,WAAWrN,aACtExZ,KAAK4uB,SAAS8c,cAAc3vB,EAAKzC,QAE7B/c,mBACFA,kBAAkBiwC,gBAAgBxsC,MAGpCA,KAAKqxD,mBAGPtD,cAActrD,UAAU4uD,gBAAkB,WACxC,IAAIlhC,EAAWnwB,KAAKyb,cAAc0U,SAElC,IAAKA,GAAgC,IAApBA,EAASjyB,SAAiB8B,KAAK2wD,iBAG9C,OAFA3wD,KAAK+wD,QAAQ,mBACb/wD,KAAKmwD,cAAgBnwD,KAAKQ,aAI5B,IAAIoxB,EAAUzB,EAASmhC,QACvBtxD,KAAKmwD,cAAgBv+B,EAAQkuB,KAAO9/C,KAAKopB,UACzC,IAAImoC,EAAcvxD,KAAK8a,KAAO9a,KAAK8wD,SAAW,IAAM9wD,KAAKowD,WAAa,QACtEpwD,KAAKowD,YAAc,EACnB12B,YAAYK,KAAKw3B,EAAavxD,KAAK0rC,cAAcxoC,KAAKlD,MAAO,WAC3DA,KAAK+wD,QAAQ,gBACb7tD,KAAKlD,QAGT+tD,cAActrD,UAAU+uD,aAAe,WACtBxxD,KAAKyb,cAAc0U,WAGhCnwB,KAAKmwD,cAAgBnwD,KAAKQ,aAG5BR,KAAKqxD,mBAGPtD,cAActrD,UAAUgvD,aAAe,WACrCzxD,KAAK+wD,QAAQ,iBACb/wD,KAAK0xD,eAGP3D,cAActrD,UAAUkvD,cAAgB,WACtC3xD,KAAK+sC,eAAevU,cAAcx4B,KAAK+3B,YACvC/3B,KAAK+sC,eAAetU,QAAQz4B,KAAK8a,MACjC9a,KAAK+sC,eAAe1U,WAAWr4B,KAAKyb,cAAcC,OAAQ1b,KAAKyxD,aAAavuD,KAAKlD,QAGnF+tD,cAActrD,UAAUgrC,gBAAkB,SAAUd,GAClD,GAAK3sC,KAAK4uB,SAIV,IACE5uB,KAAKyb,cAAgBkxB,EAEjB3sC,KAAK4wD,gBACP5wD,KAAKQ,YAAc3D,KAAKU,MAAMyC,KAAK4wD,eAAe,GAAK5wD,KAAK4wD,eAAe,IAC3E5wD,KAAKO,WAAa1D,KAAKC,MAAMkD,KAAK4wD,eAAe,MAEjD5wD,KAAKQ,YAAc3D,KAAKU,MAAMyC,KAAKyb,cAAcuZ,GAAKh1B,KAAKyb,cAAckvB,IACzE3qC,KAAKO,WAAa1D,KAAKC,MAAMkD,KAAKyb,cAAckvB,KAGlD3qC,KAAK4uB,SAAS6e,gBAAgBd,GAEzBA,EAASjxB,SACZixB,EAASjxB,OAAS,IAGpB1b,KAAK0b,OAAS1b,KAAKyb,cAAcC,OACjC1b,KAAKopB,UAAYppB,KAAKyb,cAAcwxB,GACpCjtC,KAAK4vD,UAAY5vD,KAAKyb,cAAcwxB,GAAK,IACzCjtC,KAAK4uB,SAAS0d,wBAAwBK,EAASjxB,QAC/C1b,KAAK+wD,QAAQ,gBACb/wD,KAAK2xD,gBACL3xD,KAAKwxD,eACLxxD,KAAK4xD,oBACL5xD,KAAK6xD,qBAED7xD,KAAK4tD,UACP5tD,KAAKgtC,gBAAgBjX,QAEvB,MAAO+7B,GACP9xD,KAAK+xD,mBAAmBD,KAI5B/D,cAActrD,UAAUovD,mBAAqB,WACtC7xD,KAAK4uB,WAIN5uB,KAAK4uB,SAAS/H,WAAWrN,YAAYyF,SACvCjf,KAAK0xD,cAELz4C,WAAWjZ,KAAK6xD,mBAAmB3uD,KAAKlD,MAAO,MAInD+tD,cAActrD,UAAUivD,YAAc,WAC/B1xD,KAAKif,WAAYjf,KAAK4uB,SAAS/H,WAAWrN,YAAYyF,WAAajf,KAAK+sC,eAAe5sB,UAA2C,WAA/BngB,KAAK4uB,SAAS8X,eACpH1mC,KAAKif,UAAW,EAChBzC,YAAY40C,aAAapxD,KAAKyb,cAAezb,KAAK4uB,SAAS/H,WAAWrN,aAElEjd,mBACFA,kBAAkBiwC,gBAAgBxsC,MAGpCA,KAAK4uB,SAASmd,YACd9yB,WAAW,WACTjZ,KAAK+wD,QAAQ,cACb7tD,KAAKlD,MAAO,GACdA,KAAKgyD,YAEDhyD,KAAKgwD,UACPhwD,KAAKu2B,SAKXw3B,cAActrD,UAAU2sD,OAAS,WAC/BpvD,KAAK4uB,SAAS+e,uBAGhBogB,cAActrD,UAAUwvD,YAAc,SAAUrzD,GAC9CoB,KAAKqwD,oBAAsBzxD,GAG7BmvD,cAActrD,UAAUuvD,UAAY,WAClChyD,KAAKguC,aAAehuC,KAAKqwD,kBAAoBrwD,KAAK2vD,kBAAoB3vD,KAAK2vD,gBAEvE3vD,KAAKmwD,gBAAkBnwD,KAAKQ,aAAeR,KAAKguC,aAAehuC,KAAKmwD,gBACtEnwD,KAAKguC,aAAehuC,KAAKmwD,eAG3BnwD,KAAK+wD,QAAQ,cACb/wD,KAAK+tC,eAGPggB,cAActrD,UAAUsrC,YAAc,WACpC,IAAsB,IAAlB/tC,KAAKif,SAIT,IACEjf,KAAK4uB,SAASmf,YAAY/tC,KAAKguC,aAAehuC,KAAKO,YACnD,MAAOuxD,GACP9xD,KAAKkyD,wBAAwBJ,KAIjC/D,cAActrD,UAAU8zB,KAAO,SAAUlV,GACnCA,GAAQrhB,KAAKqhB,MAAQA,IAIH,IAAlBrhB,KAAK4tD,WACP5tD,KAAK4tD,UAAW,EAChB5tD,KAAKgtC,gBAAgBhX,SAEjBh2B,KAAKswD,QACPtwD,KAAKswD,OAAQ,EACbtwD,KAAK+wD,QAAQ,cAKnBhD,cAActrD,UAAUszB,MAAQ,SAAU1U,GACpCA,GAAQrhB,KAAKqhB,MAAQA,IAIH,IAAlBrhB,KAAK4tD,WACP5tD,KAAK4tD,UAAW,EAChB5tD,KAAKswD,OAAQ,EACbtwD,KAAK+wD,QAAQ,SACb/wD,KAAKgtC,gBAAgBjX,UAIzBg4B,cAActrD,UAAUosD,YAAc,SAAUxtC,GAC1CA,GAAQrhB,KAAKqhB,MAAQA,KAIH,IAAlBrhB,KAAK4tD,SACP5tD,KAAKu2B,OAELv2B,KAAK+1B,UAITg4B,cAActrD,UAAUgzC,KAAO,SAAUp0B,GACnCA,GAAQrhB,KAAKqhB,MAAQA,IAIzBrhB,KAAK+1B,QACL/1B,KAAK+vD,UAAY,EACjB/vD,KAAKuwD,gBAAiB,EACtBvwD,KAAKmyD,wBAAwB,KAG/BpE,cAActrD,UAAU4sD,YAAc,SAAU7rD,EAAO8rD,EAASjuC,GAC1DA,GAAQrhB,KAAKqhB,MAAQA,IAIrBiuC,EACFtvD,KAAKmyD,wBAAwB3uD,GAE7BxD,KAAKmyD,wBAAwB3uD,EAAQxD,KAAKoyD,eAG5CpyD,KAAK+1B,UAGPg4B,cAActrD,UAAU4vD,YAAc,SAAU7uD,EAAO8rD,EAASjuC,GAC9DrhB,KAAKqvD,YAAY7rD,EAAO8rD,EAASjuC,GACjCrhB,KAAKu2B,QAGPw3B,cAActrD,UAAU6rD,YAAc,SAAU9qD,GAC9C,IAAsB,IAAlBxD,KAAK4tD,WAAuC,IAAlB5tD,KAAKif,SAAnC,CAIA,IAAIqzC,EAAYtyD,KAAK2vD,gBAAkBnsD,EAAQxD,KAAKoyD,cAChDG,GAAc,EAGdD,GAAatyD,KAAKQ,YAAc,GAAKR,KAAKoyD,cAAgB,EACvDpyD,KAAKiwD,MAAQjwD,KAAK+vD,YAAc/vD,KAAKiwD,KAK/BqC,GAAatyD,KAAKQ,aAC3BR,KAAK+vD,WAAa,EAEb/vD,KAAKwyD,cAAcF,EAAYtyD,KAAKQ,eACvCR,KAAKmyD,wBAAwBG,EAAYtyD,KAAKQ,aAC9CR,KAAKuwD,gBAAiB,EACtBvwD,KAAK+wD,QAAQ,kBAGf/wD,KAAKmyD,wBAAwBG,GAbxBtyD,KAAKwyD,cAAcF,EAAYtyD,KAAKQ,YAAc8xD,EAAYtyD,KAAKQ,YAAc,KACpF+xD,GAAc,EACdD,EAAYtyD,KAAKQ,YAAc,GAa1B8xD,EAAY,EAChBtyD,KAAKwyD,cAAcF,EAAYtyD,KAAKQ,gBACnCR,KAAKiwD,MAAUjwD,KAAK+vD,aAAe,IAAmB,IAAd/vD,KAAKiwD,MAS/CsC,GAAc,EACdD,EAAY,IATZtyD,KAAKmyD,wBAAwBnyD,KAAKQ,YAAc8xD,EAAYtyD,KAAKQ,aAE5DR,KAAKuwD,eAGRvwD,KAAK+wD,QAAQ,gBAFb/wD,KAAKuwD,gBAAiB,IAU5BvwD,KAAKmyD,wBAAwBG,GAG3BC,IACFvyD,KAAKmyD,wBAAwBG,GAC7BtyD,KAAK+1B,QACL/1B,KAAK+wD,QAAQ,eAIjBhD,cAActrD,UAAUgwD,cAAgB,SAAUhvD,EAAKzB,GACrDhC,KAAK+vD,UAAY,EAEbtsD,EAAI,GAAKA,EAAI,IACXzD,KAAKoyD,cAAgB,IACnBpyD,KAAK6vD,UAAY,EACnB7vD,KAAK2uD,UAAU3uD,KAAK6vD,WAEpB7vD,KAAK4uD,cAAc,IAIvB5uD,KAAKmwD,cAAgBnwD,KAAKQ,YAAciD,EAAI,GAAKA,EAAI,GACrDzD,KAAKO,WAAakD,EAAI,GACtBzD,KAAKmyD,wBAAwBnyD,KAAKQ,YAAc,KAAQwB,IAC/CyB,EAAI,GAAKA,EAAI,KAClBzD,KAAKoyD,cAAgB,IACnBpyD,KAAK6vD,UAAY,EACnB7vD,KAAK2uD,UAAU3uD,KAAK6vD,WAEpB7vD,KAAK4uD,aAAa,IAItB5uD,KAAKmwD,cAAgBnwD,KAAKQ,YAAciD,EAAI,GAAKA,EAAI,GACrDzD,KAAKO,WAAakD,EAAI,GACtBzD,KAAKmyD,wBAAwB,KAAQnwD,IAGvChC,KAAK+wD,QAAQ,iBAGfhD,cAActrD,UAAUiwD,WAAa,SAAU7nC,EAAM8nC,GACnD,IAAIC,GAAgB,EAEhB5yD,KAAK4tD,WACH5tD,KAAK2vD,gBAAkB3vD,KAAKO,WAAasqB,EAC3C+nC,EAAe/nC,EACN7qB,KAAK2vD,gBAAkB3vD,KAAKO,WAAaoyD,IAClDC,EAAeD,EAAM9nC,IAIzB7qB,KAAKO,WAAasqB,EAClB7qB,KAAKmwD,cAAgBnwD,KAAKQ,YAAcmyD,EAAM9nC,GAExB,IAAlB+nC,GACF5yD,KAAKqvD,YAAYuD,GAAc,IAInC7E,cAActrD,UAAUowD,aAAe,SAAUpvD,EAAKqvD,GAKpD,GAJIA,IACF9yD,KAAKmwB,SAASjyB,OAAS,GAGH,iBAAXuF,EAAI,GAAiB,CAC9B,IAAI1F,EACAE,EAAMwF,EAAIvF,OAEd,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKmwB,SAASntB,KAAKS,EAAI1F,SAGzBiC,KAAKmwB,SAASntB,KAAKS,GAGjBzD,KAAKmwB,SAASjyB,QAAU40D,GAC1B9yD,KAAKyyD,cAAczyD,KAAKmwB,SAASmhC,QAAS,GAGxCtxD,KAAK4tD,UACP5tD,KAAKu2B,QAITw3B,cAActrD,UAAUswD,cAAgB,SAAUD,GAChD9yD,KAAKmwB,SAASjyB,OAAS,EACvB8B,KAAKmwB,SAASntB,KAAK,CAAChD,KAAKyb,cAAckvB,GAAI3qC,KAAKyb,cAAcuZ,KAE1D89B,GACF9yD,KAAKwyD,cAAc,IAIvBzE,cAActrD,UAAU+vD,cAAgB,SAAUxwD,GAChD,QAAIhC,KAAKmwB,SAASjyB,SAChB8B,KAAKyyD,cAAczyD,KAAKmwB,SAASmhC,QAAStvD,IACnC,IAMX+rD,cAActrD,UAAUi2B,QAAU,SAAUrX,GACtCA,GAAQrhB,KAAKqhB,MAAQA,IAASrhB,KAAK4uB,WAIvC5uB,KAAK4uB,SAAS8J,UACd14B,KAAK+sC,eAAerU,UACpB14B,KAAK+wD,QAAQ,WACb/wD,KAAK6C,KAAO,KACZ7C,KAAKgzD,aAAehzD,KAAKizD,eAAiBjzD,KAAKkzD,WAAalzD,KAAKmzD,eAAiBnzD,KAAKozD,UAAY,KACnGpzD,KAAK4uB,SAAW,OAGlBm/B,cAActrD,UAAU0vD,wBAA0B,SAAU3uD,GAC1DxD,KAAK2vD,gBAAkBnsD,EACvBxD,KAAKgyD,aAGPjE,cAActrD,UAAUksD,SAAW,SAAUvwD,GAC3C4B,KAAK6vD,UAAYzxD,EACjB4B,KAAK4xD,qBAGP7D,cAActrD,UAAUmsD,aAAe,SAAUxwD,GAC/C4B,KAAK8vD,cAAgB1xD,EAAM,GAAK,EAAI,EACpC4B,KAAK4xD,qBAGP7D,cAActrD,UAAUk0B,UAAY,SAAUv4B,EAAKijB,GAC7CA,GAAQrhB,KAAKqhB,OAASA,GAI1BrhB,KAAKgtC,gBAAgBrW,UAAUv4B,IAGjC2vD,cAActrD,UAAUu0B,UAAY,WAClC,OAAOh3B,KAAKgtC,gBAAgBhW,aAG9B+2B,cAActrD,UAAUq0B,KAAO,SAAUzV,GACnCA,GAAQrhB,KAAKqhB,OAASA,GAI1BrhB,KAAKgtC,gBAAgBlW,QAGvBi3B,cAActrD,UAAUs0B,OAAS,SAAU1V,GACrCA,GAAQrhB,KAAKqhB,OAASA,GAI1BrhB,KAAKgtC,gBAAgBjW,UAGvBg3B,cAActrD,UAAUmvD,kBAAoB,WAC1C5xD,KAAKoyD,cAAgBpyD,KAAK4vD,UAAY5vD,KAAK6vD,UAAY7vD,KAAK8vD,cAC5D9vD,KAAKgtC,gBAAgB/W,QAAQj2B,KAAK6vD,UAAY7vD,KAAK8vD,gBAGrD/B,cAActrD,UAAU4wD,QAAU,WAChC,OAAOrzD,KAAK8a,MAGdizC,cAActrD,UAAUo1B,cAAgB,SAAUC,GAChD,IAAIhd,EAAO,GAEX,GAAIgd,EAAUjwB,EACZiT,EAAOgd,EAAUr2B,OACZ,GAAIzB,KAAK+3B,WAAY,CAC1B,IAAIE,EAAYH,EAAUr2B,GAEY,IAAlCw2B,EAAU5zB,QAAQ,aACpB4zB,EAAYA,EAAU9c,MAAM,KAAK,IAGnCL,EAAO9a,KAAK+3B,WAAaE,OAEzBnd,EAAO9a,KAAK8a,KACZA,GAAQgd,EAAUI,EAAIJ,EAAUI,EAAI,GACpCpd,GAAQgd,EAAUr2B,EAGpB,OAAOqZ,GAGTizC,cAActrD,UAAUoqC,aAAe,SAAU7zB,GAI/C,IAHA,IAAIjb,EAAI,EACJE,EAAM+B,KAAK0b,OAAOxd,OAEfH,EAAIE,GAAK,CACd,GAAI+a,GAAMhZ,KAAK0b,OAAO3d,GAAGib,GACvB,OAAOhZ,KAAK0b,OAAO3d,GAGrBA,GAAK,IAITgwD,cAActrD,UAAU4rC,KAAO,WAC7BruC,KAAK4uB,SAASyf,QAGhB0f,cAActrD,UAAU6rC,KAAO,WAC7BtuC,KAAK4uB,SAAS0f,QAGhByf,cAActrD,UAAU6wD,YAAc,SAAUhE,GAC9C,OAAOA,EAAUtvD,KAAKQ,YAAcR,KAAKQ,YAAcR,KAAKopB,WAG9D2kC,cAActrD,UAAUsuD,QAAU,SAAU1vC,GAC1C,GAAIrhB,KAAK6C,MAAQ7C,KAAK6C,KAAKwe,GACzB,OAAQA,GACN,IAAK,aACHrhB,KAAK0C,aAAa2e,EAAM,IAAI1hB,kBAAkB0hB,EAAMrhB,KAAKguC,aAAchuC,KAAKQ,YAAaR,KAAKoyD,gBAC9F,MAEF,IAAK,eACHpyD,KAAK0C,aAAa2e,EAAM,IAAIlhB,oBAAoBkhB,EAAMrhB,KAAKiwD,KAAMjwD,KAAK+vD,UAAW/vD,KAAK4vD,YACtF,MAEF,IAAK,WACH5vD,KAAK0C,aAAa2e,EAAM,IAAInhB,gBAAgBmhB,EAAMrhB,KAAK4vD,YACvD,MAEF,IAAK,eACH5vD,KAAK0C,aAAa2e,EAAM,IAAI/gB,oBAAoB+gB,EAAMrhB,KAAKO,WAAYP,KAAKQ,cAC5E,MAEF,IAAK,UACHR,KAAK0C,aAAa2e,EAAM,IAAI5gB,eAAe4gB,EAAMrhB,OACjD,MAEF,QACEA,KAAK0C,aAAa2e,GAIX,eAATA,GAAyBrhB,KAAKgzD,cAChChzD,KAAKgzD,aAAa9O,KAAKlkD,KAAM,IAAIL,kBAAkB0hB,EAAMrhB,KAAKguC,aAAchuC,KAAKQ,YAAaR,KAAK4vD,YAGxF,iBAATvuC,GAA2BrhB,KAAKizD,gBAClCjzD,KAAKizD,eAAe/O,KAAKlkD,KAAM,IAAIG,oBAAoBkhB,EAAMrhB,KAAKiwD,KAAMjwD,KAAK+vD,UAAW/vD,KAAK4vD,YAGlF,aAATvuC,GAAuBrhB,KAAKkzD,YAC9BlzD,KAAKkzD,WAAWhP,KAAKlkD,KAAM,IAAIE,gBAAgBmhB,EAAMrhB,KAAK4vD,YAG/C,iBAATvuC,GAA2BrhB,KAAKmzD,gBAClCnzD,KAAKmzD,eAAejP,KAAKlkD,KAAM,IAAIM,oBAAoB+gB,EAAMrhB,KAAKO,WAAYP,KAAKQ,cAGxE,YAAT6gB,GAAsBrhB,KAAKozD,WAC7BpzD,KAAKozD,UAAUlP,KAAKlkD,KAAM,IAAIS,eAAe4gB,EAAMrhB,QAIvD+tD,cAActrD,UAAUyvD,wBAA0B,SAAUtxD,GAC1D,IAAIkxD,EAAQ,IAAInxD,wBAAwBC,EAAaZ,KAAKguC,cAC1DhuC,KAAK0C,aAAa,QAASovD,GAEvB9xD,KAAKuzD,SACPvzD,KAAKuzD,QAAQrP,KAAKlkD,KAAM8xD,IAI5B/D,cAActrD,UAAUsvD,mBAAqB,SAAUnxD,GACrD,IAAIkxD,EAAQ,IAAIjxD,mBAAmBD,EAAaZ,KAAKguC,cACrDhuC,KAAK0C,aAAa,QAASovD,GAEvB9xD,KAAKuzD,SACPvzD,KAAKuzD,QAAQrP,KAAKlkD,KAAM8xD,IAI5B,IAAI0B,YAAc,WAChB,IAAItjD,EAAK,GA2CT,OA1CAA,EAAGs8B,gBAEH,SAAyBmhB,GACvB,IAAI8F,EAAa,EACbC,EAAY,GA+BhB/F,EAAU/+B,SAASgtB,cAAgBC,wBAAwB8R,EAAU/+B,UACrE++B,EAAU/+B,SAAS/H,WAAWilB,iBAAiBW,oBAAoBkhB,EAAU/+B,UAC7E++B,EAAU/+B,SAAS/H,WAAW8sC,eA/B9B,WACEF,GAAc,GA+BhB9F,EAAU/+B,SAAS/H,WAAW+sC,cA5B9B,WAGqB,KAFnBH,GAAc,IAahB,WACE,IAAI11D,EACAE,EAAMy1D,EAAUx1D,OAEpB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB21D,EAAU31D,GAAG0yB,UAGfijC,EAAUx1D,OAAS,EAlBjB21D,IAyBJlG,EAAU/+B,SAAS/H,WAAWitC,2BArB9B,SAAoCC,IACK,IAAnCL,EAAUrvD,QAAQ0vD,IACpBL,EAAU1wD,KAAK+wD,KAsBd7jD,EA5CS,GA+ClB3T,kBAAoBi3D,YAEpB,IAAIQ,kBAAoB,WAGtB,IAAI9jD,GAAK,GACLrT,KAAOgB,OACP3B,OAAS,KACT2H,SAAW,KAEf,SAASowD,sBAAsBxwD,GAC7B,OAAOA,EAAImiB,cAAgBliB,OAASD,EAAImiB,cAAgBtiB,aAG1D,SAAS4wD,YAAYC,EAAM/yD,GACzB,MAAgB,WAAT+yD,GAA8B,YAATA,GAA+B,WAATA,GAAqB/yD,aAAagzD,OAGtF,SAASC,QAAQ1sD,GACf,IAAI2sD,SAAc3sD,EAElB,GAAa,WAAT2sD,GAA8B,YAATA,GAAsB3sD,aAAaysD,OAC1D,OAAQzsD,EAGV,GAAIssD,sBAAsBtsD,GAAI,CAC5B,IAAI5J,EACAw2D,EAAO5sD,EAAEzJ,OACTs2D,EAAS,GAEb,IAAKz2D,EAAI,EAAGA,EAAIw2D,EAAMx2D,GAAK,EACzBy2D,EAAOz2D,IAAM4J,EAAE5J,GAGjB,OAAOy2D,EAGT,OAAI7sD,EAAE4a,SACG5a,EAAEvG,OADX,EAKF,IAAIqzD,UAAYxkD,cAAcqT,gBAAgB,KAAO,EAAG,KAAM,KAAM,UAAUjS,IAC1EqjD,WAAazkD,cAAcqT,gBAAgB,KAAO,KAAO,KAAM,EAAG,WAAWjS,IAC7EsjD,aAAe1kD,cAAcqT,gBAAgB,IAAK,EAAG,KAAM,EAAG,aAAajS,IAE/E,SAASujD,IAAIjtD,EAAGpG,GACd,IAAI+yD,SAAc3sD,EACdktD,SAActzD,EAElB,GAAa,WAAT+yD,GAA8B,WAATO,EACvB,OAAOltD,EAAIpG,EAGb,GAAI2yD,YAAYI,EAAM3sD,IAAMusD,YAAYW,EAAMtzD,GAC5C,OAAOoG,EAAIpG,EAGb,GAAI0yD,sBAAsBtsD,IAAMusD,YAAYW,EAAMtzD,GAGhD,OAFAoG,EAAIA,EAAEkG,MAAM,IACV,GAAKlG,EAAE,GAAKpG,EACPoG,EAGT,GAAIusD,YAAYI,EAAM3sD,IAAMssD,sBAAsB1yD,GAGhD,OAFAA,EAAIA,EAAEsM,MAAM,IACV,GAAKlG,EAAIpG,EAAE,GACNA,EAGT,GAAI0yD,sBAAsBtsD,IAAMssD,sBAAsB1yD,GAAI,CAMxD,IALA,IAAIxD,EAAI,EACJw2D,EAAO5sD,EAAEzJ,OACT42D,EAAOvzD,EAAErD,OACTs2D,EAAS,GAENz2D,EAAIw2D,GAAQx2D,EAAI+2D,IACA,iBAATntD,EAAE5J,IAAmB4J,EAAE5J,aAAcq2D,UAA4B,iBAAT7yD,EAAExD,IAAmBwD,EAAExD,aAAcq2D,QACvGI,EAAOz2D,GAAK4J,EAAE5J,GAAKwD,EAAExD,GAErBy2D,EAAOz2D,QAAcwlC,IAAThiC,EAAExD,GAAmB4J,EAAE5J,GAAK4J,EAAE5J,IAAMwD,EAAExD,GAGpDA,GAAK,EAGP,OAAOy2D,EAGT,OAAO,EAGT,IAAI3zB,IAAM+zB,IAEV,SAASG,IAAIptD,EAAGpG,GACd,IAAI+yD,SAAc3sD,EACdktD,SAActzD,EAElB,GAAI2yD,YAAYI,EAAM3sD,IAAMusD,YAAYW,EAAMtzD,GAS5C,MARa,WAAT+yD,IACF3sD,EAAI+oD,SAAS/oD,IAGF,WAATktD,IACFtzD,EAAImvD,SAASnvD,IAGRoG,EAAIpG,EAGb,GAAI0yD,sBAAsBtsD,IAAMusD,YAAYW,EAAMtzD,GAGhD,OAFAoG,EAAIA,EAAEkG,MAAM,IACV,GAAKlG,EAAE,GAAKpG,EACPoG,EAGT,GAAIusD,YAAYI,EAAM3sD,IAAMssD,sBAAsB1yD,GAGhD,OAFAA,EAAIA,EAAEsM,MAAM,IACV,GAAKlG,EAAIpG,EAAE,GACNA,EAGT,GAAI0yD,sBAAsBtsD,IAAMssD,sBAAsB1yD,GAAI,CAMxD,IALA,IAAIxD,EAAI,EACJw2D,EAAO5sD,EAAEzJ,OACT42D,EAAOvzD,EAAErD,OACTs2D,EAAS,GAENz2D,EAAIw2D,GAAQx2D,EAAI+2D,IACA,iBAATntD,EAAE5J,IAAmB4J,EAAE5J,aAAcq2D,UAA4B,iBAAT7yD,EAAExD,IAAmBwD,EAAExD,aAAcq2D,QACvGI,EAAOz2D,GAAK4J,EAAE5J,GAAKwD,EAAExD,GAErBy2D,EAAOz2D,QAAcwlC,IAAThiC,EAAExD,GAAmB4J,EAAE5J,GAAK4J,EAAE5J,IAAMwD,EAAExD,GAGpDA,GAAK,EAGP,OAAOy2D,EAGT,OAAO,EAGT,SAASQ,IAAIrtD,EAAGpG,GACd,IAEIkC,EAMA1F,EAAGE,EARHq2D,SAAc3sD,EACdktD,SAActzD,EAGlB,GAAI2yD,YAAYI,EAAM3sD,IAAMusD,YAAYW,EAAMtzD,GAC5C,OAAOoG,EAAIpG,EAKb,GAAI0yD,sBAAsBtsD,IAAMusD,YAAYW,EAAMtzD,GAAI,CAIpD,IAHAtD,EAAM0J,EAAEzJ,OACRuF,EAAML,iBAAiB,UAAWnF,GAE7BF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,GAAK4J,EAAE5J,GAAKwD,EAGlB,OAAOkC,EAGT,GAAIywD,YAAYI,EAAM3sD,IAAMssD,sBAAsB1yD,GAAI,CAIpD,IAHAtD,EAAMsD,EAAErD,OACRuF,EAAML,iBAAiB,UAAWnF,GAE7BF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,GAAK4J,EAAIpG,EAAExD,GAGjB,OAAO0F,EAGT,OAAO,EAGT,SAAS0rD,IAAIxnD,EAAGpG,GACd,IAEIkC,EAMA1F,EAAGE,EARHq2D,SAAc3sD,EACdktD,SAActzD,EAGlB,GAAI2yD,YAAYI,EAAM3sD,IAAMusD,YAAYW,EAAMtzD,GAC5C,OAAOoG,EAAIpG,EAKb,GAAI0yD,sBAAsBtsD,IAAMusD,YAAYW,EAAMtzD,GAAI,CAIpD,IAHAtD,EAAM0J,EAAEzJ,OACRuF,EAAML,iBAAiB,UAAWnF,GAE7BF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,GAAK4J,EAAE5J,GAAKwD,EAGlB,OAAOkC,EAGT,GAAIywD,YAAYI,EAAM3sD,IAAMssD,sBAAsB1yD,GAAI,CAIpD,IAHAtD,EAAMsD,EAAErD,OACRuF,EAAML,iBAAiB,UAAWnF,GAE7BF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,GAAK4J,EAAIpG,EAAExD,GAGjB,OAAO0F,EAGT,OAAO,EAGT,SAASwxD,IAAIttD,EAAGpG,GASd,MARiB,iBAANoG,IACTA,EAAI+oD,SAAS/oD,IAGE,iBAANpG,IACTA,EAAImvD,SAASnvD,IAGRoG,EAAIpG,EAGb,IAAI2zD,QAAUN,IACVO,QAAUJ,IACVK,QAAUJ,IACVK,QAAUlG,IACVmG,QAAUL,IAEd,SAASM,MAAM7qB,EAAK/sC,EAAKF,GACvB,GAAIE,EAAMF,EAAK,CACb,IAAI+3D,EAAK/3D,EACTA,EAAME,EACNA,EAAM63D,EAGR,OAAO34D,KAAKc,IAAId,KAAKY,IAAIitC,EAAK/sC,GAAMF,GAGtC,SAASg4D,iBAAiBr3D,GACxB,OAAOA,EAAMI,UAGf,IAAIk3D,mBAAqBD,iBAEzB,SAASE,iBAAiBv3D,GACxB,OAAOA,EAAMI,UAGf,IAAIo3D,mBAAqBH,iBACrBI,kBAAoB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAExC,SAAS33D,OAAO43D,EAAMC,GACpB,GAAoB,iBAATD,GAAqBA,aAAgB1B,OAE9C,OADA2B,EAAOA,GAAQ,EACRl5D,KAAKQ,IAAIy4D,EAAOC,GAGpBA,IACHA,EAAOF,mBAGT,IAAI93D,EACAE,EAAMpB,KAAKc,IAAIm4D,EAAK53D,OAAQ63D,EAAK73D,QACjCqW,EAAc,EAElB,IAAKxW,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBwW,GAAe1X,KAAKI,IAAI84D,EAAKh4D,GAAK+3D,EAAK/3D,GAAI,GAG7C,OAAOlB,KAAKM,KAAKoX,GAGnB,SAASyhD,UAAUC,GACjB,OAAO9G,IAAI8G,EAAK/3D,OAAO+3D,IAGzB,SAASC,SAAS93D,GAChB,IAKI8C,EACAC,EANAE,EAAIjD,EAAI,GACRkD,EAAIlD,EAAI,GACRmD,EAAInD,EAAI,GACRX,EAAMZ,KAAKY,IAAI4D,EAAGC,EAAGC,GACrB5D,EAAMd,KAAKc,IAAI0D,EAAGC,EAAGC,GAGrByG,GAAKvK,EAAME,GAAO,EAEtB,GAAIF,GAAOE,EACTuD,EAAIC,EAAI,MACH,CACL,IAAIU,EAAIpE,EAAME,EAGd,OAFAwD,EAAI6G,EAAI,GAAMnG,GAAK,EAAIpE,EAAME,GAAOkE,GAAKpE,EAAME,GAEvCF,GACN,KAAK4D,EACHH,GAAKI,EAAIC,GAAKM,GAAKP,EAAIC,EAAI,EAAI,GAC/B,MAEF,KAAKD,EACHJ,GAAKK,EAAIF,GAAKQ,EAAI,EAClB,MAEF,KAAKN,EACHL,GAAKG,EAAIC,GAAKO,EAAI,EAItBX,GAAK,EAGP,MAAO,CAACA,EAAGC,EAAG6G,EAAG5J,EAAI,IAGvB,SAAS+3D,QAAQ10D,EAAGC,EAAGC,GAGrB,OAFIA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,EAGT,SAAS20D,SAASh4D,GAChB,IAGIiD,EAAGC,EAAGC,EAHNL,EAAI9C,EAAI,GACR+C,EAAI/C,EAAI,GACR4J,EAAI5J,EAAI,GAGZ,GAAU,IAAN+C,EACFE,EAAIC,EAAIC,EAAIyG,MACP,CACL,IAAItG,EAAIsG,EAAI,GAAMA,GAAK,EAAI7G,GAAK6G,EAAI7G,EAAI6G,EAAI7G,EACxCM,EAAI,EAAIuG,EAAItG,EAChBL,EAAI80D,QAAQ10D,EAAGC,EAAGR,EAAI,EAAI,GAC1BI,EAAI60D,QAAQ10D,EAAGC,EAAGR,GAClBK,EAAI40D,QAAQ10D,EAAGC,EAAGR,EAAI,EAAI,GAG5B,MAAO,CAACG,EAAGC,EAAGC,EAAGnD,EAAI,IAGvB,SAASi4D,OAAO10D,EAAG20D,EAAMC,EAAMC,EAAQC,GAQrC,QAPelzB,IAAXizB,QAAmCjzB,IAAXkzB,IAC1BD,EAASF,EACTG,EAASF,EACTD,EAAO,EACPC,EAAO,GAGLA,EAAOD,EAAM,CACf,IAAII,EAAQH,EACZA,EAAOD,EACPA,EAAOI,EAGT,GAAI/0D,GAAK20D,EACP,OAAOE,EACF,GAAI70D,GAAK40D,EACd,OAAOE,EAGT,IAAIriD,EAAOmiD,IAASD,EAAO,GAAK30D,EAAI20D,IAASC,EAAOD,GAEpD,IAAKE,EAAOt4D,OACV,OAAOs4D,GAAUC,EAASD,GAAUpiD,EAGtC,IAAIrW,EACAE,EAAMu4D,EAAOt4D,OACbuF,EAAML,iBAAiB,UAAWnF,GAEtC,IAAKF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,GAAKy4D,EAAOz4D,IAAM04D,EAAO14D,GAAKy4D,EAAOz4D,IAAMqW,EAGjD,OAAO3Q,EAGT,SAAStF,OAAOR,EAAKF,GAWnB,QAVY8lC,IAAR9lC,SACU8lC,IAAR5lC,GACFA,EAAM,EACNF,EAAM,IAENA,EAAME,EACNA,OAAM4lC,IAIN9lC,EAAIS,OAAQ,CACd,IAAIH,EACAE,EAAMR,EAAIS,OAETP,IACHA,EAAMyF,iBAAiB,UAAWnF,IAGpC,IAAIwF,EAAML,iBAAiB,UAAWnF,GAClC04D,EAAM94D,OAAOM,SAEjB,IAAKJ,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,GAAKJ,EAAII,GAAK44D,GAAOl5D,EAAIM,GAAKJ,EAAII,IAGxC,OAAO0F,EAQT,YALY8/B,IAAR5lC,IACFA,EAAM,GAIDA,EADIE,OAAOM,UACGV,EAAME,GAG7B,SAASi5D,WAAW1lD,EAAQ2lD,EAAYC,EAAa5gD,GACnD,IAAInY,EACAE,EAAMiT,EAAOhT,OACb4c,EAAO8Q,WAAWhX,aACtBkG,EAAK6O,cAAczT,EAAQjY,GAC3B,IACI84D,EACAC,EAFAC,EAAiB,CAAC,EAAG,GAIzB,IAAKl5D,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBg5D,EAAgBF,GAAcA,EAAW94D,GAAK84D,EAAW94D,GAAKk5D,EAC9DD,EAAiBF,GAAeA,EAAY/4D,GAAK+4D,EAAY/4D,GAAKk5D,EAClEn8C,EAAKmP,YAAY/Y,EAAOnT,GAAG,GAAImT,EAAOnT,GAAG,GAAIi5D,EAAe,GAAK9lD,EAAOnT,GAAG,GAAIi5D,EAAe,GAAK9lD,EAAOnT,GAAG,GAAIg5D,EAAc,GAAK7lD,EAAOnT,GAAG,GAAIg5D,EAAc,GAAK7lD,EAAOnT,GAAG,GAAIA,GAAG,GAGxL,OAAO+c,EAGT,SAASo8C,mBAAmBtwC,KAAM7K,KAAMo7C,UACtC,IAAI/4D,IAAM2d,KAAK7Q,EACXksD,cAAgB,qBAAqB36D,KAAK2B,KAE1Ci5D,cAA0C,IAA3Bj5D,IAAIiG,QAAQ,UAE3BizD,SAAW1wC,KAAK7K,KAAKzT,GACrBE,UAAW+uD,cAAevb,QAASwb,OACnCC,aAAeN,SACnBM,aAAaC,YAAcD,aAAapuC,eACxCjW,OAAOukD,eAAeF,aAAc,QAAS,CAC3CpmD,IAAK,WACH,OAAOomD,aAAar2D,KAGxBwlB,KAAKT,KAAKyxC,cAAgB,EAAIhxC,KAAKT,KAAKU,WAAWuC,UACnDxC,KAAKT,KAAK0xC,iBAAmB,EAC7B,IAAIC,QAAUlxC,KAAK7K,KAAK4uB,GAAK/jB,KAAKT,KAAKU,WAAWuC,UAC9C2uC,SAAWnxC,KAAK7K,KAAKiZ,GAAKpO,KAAKT,KAAKU,WAAWuC,UAC/C1b,MAAQkZ,KAAK7K,KAAK4f,GAAK/U,KAAK7K,KAAK4f,GAAK,EACtCtE,OAASzQ,KAAK7K,KAAKmI,GAAK0C,KAAK7K,KAAKmI,GAAK,EACvC7C,KAAOuF,KAAK7K,KAAK5L,GACjB6nD,OAAQC,QAASC,QAASC,SAAUC,OACpCC,QAASC,UAAWC,SAAUC,OAAQC,kBAAmBz5D,SAAU05D,SAAUC,YAAanxD,MAAOoxD,UAAWC,SAAUr6B,KAAMk5B,YAAaoB,eACzIC,uBAAyB,GAWzBC,aATJ,GAAIj9C,KAAKk9C,GAAI,CACX,IAAIl7D,EACAE,IAAM8d,KAAKk9C,GAAG/6D,OAElB,IAAKH,EAAI,EAAGA,EAAIE,IAAKF,GAAK,EACxBg7D,uBAAuBh7D,GAAKm7D,KAAK,uBAAyBn9C,KAAKk9C,GAAGl7D,GAAK,QAK3E,IAAIo7D,oBAAsBD,KAAK,oCAAsC96D,IAAtC,0BAA2E,GACtGg7D,QAAUjC,SAAShwC,GAAKpL,KAAKhU,EAAE7J,OAAS,EACxCm7D,QAAUr5D,KAAK+b,OAAyB,IAAjB/b,KAAK+b,KAAKytB,GAEjC8vB,OAAS,SAAgBC,EAAMC,GACjC,IAAIz7D,EACA+J,EACA7J,EAAM+B,KAAKwiB,GAAGtkB,OAAS8B,KAAKwiB,GAAGtkB,OAAS,EACxCu7D,EAAYr2D,iBAAiB,UAAWnF,GAE5C,IAAIw4C,EAAa55C,KAAKU,MADf,EACqBuiD,MAI5B,IAHA/hD,EAAI,EACJ+J,EAAI,EAEG/J,EAAI04C,GAAY,CAErB,IAAK3uC,EAAI,EAAGA,EAAI7J,EAAK6J,GAAK,EACxB2xD,EAAU3xD,KAAO0xD,EAAY,EAANA,EAAU37D,OAAOM,SAG1CJ,GAAK,EAIP,IAAI27D,EAfG,EAeO5Z,KACV1rC,EAAOslD,EAAU78D,KAAKU,MAAMm8D,GAC5Bj2D,EAAML,iBAAiB,UAAWnF,GAEtC,GAAIA,EAAM,EAAG,CACX,IAAK6J,EAAI,EAAGA,EAAI7J,EAAK6J,GAAK,EACxBrE,EAAIqE,GAAK9H,KAAKwiB,GAAG1a,GAAK2xD,EAAU3xD,KAAO0xD,EAAY,EAANA,EAAU37D,OAAOM,UAAYiW,EAI5E,OAAO3Q,EAEP,OAAOzD,KAAKwiB,GAAKi3C,EAAU,KAAOD,EAAY,EAANA,EAAU37D,OAAOM,UAAYiW,GAEvElR,KAAKlD,MAgBP,SAAS25D,eAAe/5D,EAAMg6D,GAC5B,OAAO5B,OAAOp4D,EAAMg6D,GAAU,GAGhC,SAASC,gBAAgBj6D,EAAMg6D,GAC7B,OAAO1B,QAAQt4D,EAAMg6D,GAAU,GAnB7BnC,aAAaO,SACfA,OAASP,aAAaO,OAAO90D,KAAKu0D,cAClCQ,QAAUD,QAGRP,aAAaS,UACfA,QAAUT,aAAaS,QAAQh1D,KAAKu0D,cACpCU,SAAWD,SAGTT,aAAaW,SACfA,OAASX,aAAaW,OAAOl1D,KAAKu0D,eAWhCz3D,KAAKqpB,iBACPquC,YAAc13D,KAAKqpB,eAAenmB,KAAKlD,OAGrCA,KAAK85D,oBACPhB,eAAiB94D,KAAK85D,kBAAkB52D,KAAKlD,OAG/C,IAAImmB,KAAOS,KAAKT,KAAKU,WAAWilB,iBAAiB5oC,KAAK0jB,KAAKT,KAAKU,WAAWilB,kBA+KvEgU,KAAMia,SAAUv2D,MAAOk+B,KAAMs4B,UAAWC,UAAWC,cA7KvD,SAASC,OAAOC,EAAOC,GACrB,IAAIC,EAAO,CAACD,EAAM,GAAKD,EAAM,GAAIC,EAAM,GAAKD,EAAM,GAAIC,EAAM,GAAKD,EAAM,IACnEG,EAAQ19D,KAAK4nB,MAAM61C,EAAK,GAAIz9D,KAAKM,KAAKm9D,EAAK,GAAKA,EAAK,GAAKA,EAAK,GAAKA,EAAK,KAAO97D,UAEpF,MAAO,EADI3B,KAAK4nB,MAAM61C,EAAK,GAAIA,EAAK,IAAM97D,UAC7B+7D,EAAO,GAGtB,SAASC,QAAQ74D,EAAG20D,EAAMC,EAAMkE,EAAMC,GACpC,OAAOC,UAAUjG,WAAY/yD,EAAG20D,EAAMC,EAAMkE,EAAMC,GAGpD,SAASE,OAAOj5D,EAAG20D,EAAMC,EAAMkE,EAAMC,GACnC,OAAOC,UAAUlG,UAAW9yD,EAAG20D,EAAMC,EAAMkE,EAAMC,GAGnD,SAASG,KAAKl5D,EAAG20D,EAAMC,EAAMkE,EAAMC,GACjC,OAAOC,UAAUhG,aAAchzD,EAAG20D,EAAMC,EAAMkE,EAAMC,GAGtD,SAASC,UAAUpZ,EAAI5/C,EAAG20D,EAAMC,EAAMkE,EAAMC,QAC7Bn3B,IAATk3B,GACFA,EAAOnE,EACPoE,EAAOnE,GAEP50D,GAAKA,EAAI20D,IAASC,EAAOD,GAI3B,IAAI5vC,EAAO66B,EADX5/C,EAAIA,EAAI,EAAI,EAAIA,EAAI,EAAI,EAAIA,GAG5B,GAAIsyD,sBAAsBwG,GAAO,CAC/B,IAAI18D,EACAE,EAAMw8D,EAAKv8D,OACXuF,EAAML,iBAAiB,UAAWnF,GAEtC,IAAKF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB0F,EAAI1F,IAAM28D,EAAK38D,GAAK08D,EAAK18D,IAAM2oB,EAAO+zC,EAAK18D,GAG7C,OAAO0F,EAEP,OAAQi3D,EAAOD,GAAQ/zC,EAAO+zC,EAIlC,SAASK,WAAWhb,GAClB,IAAI/hD,EAEA0jB,EACAwB,EAFAhlB,EAAM8d,KAAKhU,EAAE7J,OAIjB,GAAK6d,KAAKhU,EAAE7J,QAA+B,iBAAd6d,KAAKhU,EAAE,GAOlC,GAHA0Z,GAAS,GACTq+B,GAAQl5B,KAAKT,KAAKU,WAAWuC,WAElBrN,KAAKhU,EAAE,GAAGpG,EACnB8f,EAAQ,EACRwB,EAAUlH,KAAKhU,EAAE,GAAGpG,MACf,CACL,IAAK5D,EAAI,EAAGA,EAAIE,EAAM,EAAGF,GAAK,EAAG,CAC/B,GAAI+hD,IAAS/jC,KAAKhU,EAAEhK,GAAG4D,EAAG,CACxB8f,EAAQ1jB,EAAI,EACZklB,EAAUlH,KAAKhU,EAAEhK,GAAG4D,EACpB,MACK,GAAIm+C,EAAO/jC,KAAKhU,EAAEhK,GAAG4D,GAAKm+C,EAAO/jC,KAAKhU,EAAEhK,EAAI,GAAG4D,EAAG,CACnDm+C,EAAO/jC,KAAKhU,EAAEhK,GAAG4D,EAAIoa,KAAKhU,EAAEhK,EAAI,GAAG4D,EAAIm+C,GACzCr+B,EAAQ1jB,EAAI,EACZklB,EAAUlH,KAAKhU,EAAEhK,EAAI,GAAG4D,IAExB8f,EAAQ1jB,EAAI,EACZklB,EAAUlH,KAAKhU,EAAEhK,GAAG4D,GAGtB,QAIW,IAAX8f,IACFA,EAAQ1jB,EAAI,EACZklB,EAAUlH,KAAKhU,EAAEhK,GAAG4D,QA9BxB8f,EAAQ,EACRwB,EAAU,EAkCZ,IAAI/S,EAAK,GAGT,OAFAA,EAAGuR,MAAQA,EACXvR,EAAG4vC,KAAO78B,EAAU2D,KAAKT,KAAKU,WAAWuC,UAClClZ,EAGT,SAAS5C,IAAI8V,GACX,IAAIlT,EAAInS,EAAGE,EAEX,IAAK8d,KAAKhU,EAAE7J,QAA+B,iBAAd6d,KAAKhU,EAAE,GAClC,MAAM,IAAIwjC,MAAM,yCAA2CnoB,GAG7DA,GAAO,EACPlT,EAAK,CACH4vC,KAAM/jC,KAAKhU,EAAEqb,GAAKzhB,EAAIilB,KAAKT,KAAKU,WAAWuC,UAC3C5lB,MAAO,IAET,IAAIC,EAAMsY,KAAKhU,EAAEqb,GAAKnQ,eAAe,KAAO8I,KAAKhU,EAAEqb,GAAKjiB,EAAI4a,KAAKhU,EAAEqb,EAAM,GAAGvb,EAG5E,IAFA5J,EAAMwF,EAAIvF,OAELH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBmS,EAAGnS,GAAK0F,EAAI1F,GACZmS,EAAG1M,MAAMzF,GAAK0F,EAAI1F,GAGpB,OAAOmS,EAGT,SAAS6qD,aAAaC,EAAQC,GAK5B,OAJKA,IACHA,EAAMr0C,KAAKT,KAAKU,WAAWuC,WAGtB4xC,EAASC,EAGlB,SAASC,aAAav5D,EAAGs5D,GASvB,OARKt5D,GAAW,IAANA,IACRA,EAAIm+C,MAGDmb,IACHA,EAAMr0C,KAAKT,KAAKU,WAAWuC,WAGtBznB,EAAIs5D,EAGb,SAASE,WAAWptD,GAClBlQ,OAAOu9D,WAAWC,SAAWttD,GAG/B,SAASumC,mBACP,OAAO1tB,KAAK0tB,mBAGd,SAASgnB,UAAUzwC,EAAM8nC,GACvB,MAAqB,iBAAVnvD,WACG+/B,IAARovB,EACKnvD,MAAM83D,UAAUzwC,GAGlBrnB,MAAM83D,UAAUzwC,EAAM8nC,GAGxB,GAGT,SAAS7wB,OAAOjX,EAAM8nC,GACpB,MAAqB,iBAAVnvD,WACG+/B,IAARovB,EACKnvD,MAAMs+B,OAAOjX,GAGfrnB,MAAMs+B,OAAOjX,EAAM8nC,GAGrB,GAGT,SAAS4I,cAAcC,GACrB1b,KAA2B,IAApB0b,EAAwB,EAAI3+D,KAAKU,MAAMuiD,KAAO0b,GAAmBA,EACxEh4D,MAAQk0D,YAAY5X,MAItB,IAAIr+B,MAAQmF,KAAK7K,KAAKqH,IAClBq4C,aAAe70C,KAAKslB,YAAatlB,KAAKslB,UAAUhuC,QAChD+f,OACAo9C,SAAWx+D,KAAKU,MAAsB,IAAhBV,KAAKsB,UAC3B0oB,WAAaD,KAAKC,WAEtB,SAAS60C,kBAAkBC,GAQzB,OANAn4D,MAAQm4D,EAEJtE,cACF8D,WAAWE,UAGTr7D,KAAK47D,oBAAsBh1C,KAAKC,WAAWC,SAA6B,iBAAlB9mB,KAAKuiB,SACtD/e,OAGa,iBAAlBxD,KAAKuiB,WACPy3C,UAAYh6D,KAAKg6D,UACjBC,UAAYj6D,KAAKi6D,UACjBC,cAAgBl6D,KAAKk6D,eAGlBtB,YACHl3B,KAAO9a,KAAKy0B,eAAe3Z,KAC3Bk3B,UAAYhyC,KAAKy0B,eACjBwd,SAAWjyC,KAAKT,KAAKy1B,cACrByc,QAAUO,UAAUP,QAAQn1D,KAAK01D,WACjCN,UAAYM,UAAUN,UAAUp1D,KAAK01D,WACrCL,SAAWK,UAAUL,SAASr1D,KAAK01D,WACnCJ,OAASI,UAAUJ,OAAOt1D,KAAK01D,WAC/Bp6B,KAAOo6B,UAAUp6B,KAAOo6B,UAAUp6B,KAAKt7B,KAAK01D,WAAa,KACzDH,kBAAoBF,UAGjB/vD,YACHA,UAAYoe,KAAKy0B,eAAe,wBAChCkc,cAAgB/uD,UAEZA,YACFmwD,YAAcnwD,UAAUmwD,cAOX,IAAbrB,UAAmBtb,UACrBA,QAAU4c,UAAU,4BAGjBpB,SACHA,OAASoB,UAAU,KAGrB6C,aAAe70C,KAAKslB,YAAatlB,KAAKslB,UAAUhuC,WAE9B+f,SAChBA,OAAS2I,KAAKslB,UAAU,GAAGmP,gBAG7ByE,KAAO9/C,KAAKmmB,KAAKC,cAAgBpmB,KAAKmmB,KAAKU,WAAWuC,UAElDguC,gBACF2C,SAAWjB,eAAehZ,OAG5BqZ,sBACAn5D,KAAK47D,kBAAoBh1C,KAAKC,WAAWC,QAEX,UAA1BkyC,aAAaz2C,WACfy2C,aAAeA,aAAa53D,GAIvB43D,cAGT,OAAO0C,kBAIT,OADAxrD,GAAGgnD,mBAAqBA,mBACjBhnD,GAjyBe,GAoyBpB2rD,kBAgFK,CACLC,kBAhFF,SAA2Bl1C,EAAM7K,EAAM5X,GACjC4X,EAAK7Q,IACP/G,EAAK4D,GAAI,EACT5D,EAAK+G,GAAI,EACT/G,EAAK+yD,mBAAqBlD,kBAAkBkD,mBAC5C/yD,EAAK4iB,gBAAgB/jB,KAAKmB,EAAK+yD,mBAAmBtwC,EAAM7K,EAAM5X,GAAMjB,KAAKiB,MA4E3E43D,eA3DF,SAAwB55C,GACtB,IACI+G,EAAKlpB,KAAKqpB,eAAelH,GACzBgH,EAAKnpB,KAAKqpB,eAAelH,GAFhB,KAGT65C,EAAQ,EAEZ,GAAI9yC,EAAGhrB,OAAQ,CACb,IAAIH,EAEJ,IAAKA,EAAI,EAAGA,EAAImrB,EAAGhrB,OAAQH,GAAK,EAC9Bi+D,GAASn/D,KAAKI,IAAIksB,EAAGprB,GAAKmrB,EAAGnrB,GAAI,GAGnCi+D,EAA2B,IAAnBn/D,KAAKM,KAAK6+D,QAElBA,EAAQ,EAGV,OAAOA,GA0CPlC,kBAvCF,SAA2B33C,GACzB,QAAiBohB,IAAbvjC,KAAKunB,IACP,OAAOvnB,KAAKunB,IAGd,IAIIwyC,EAIEh8D,EANFmrB,EAAKlpB,KAAKqpB,eAAelH,GACzBgH,EAAKnpB,KAAKqpB,eAAelH,GAHjB,MAMZ,GAAI+G,EAAGhrB,OAIL,IAHA67D,EAAW32D,iBAAiB,UAAW8lB,EAAGhrB,QAGrCH,EAAI,EAAGA,EAAImrB,EAAGhrB,OAAQH,GAAK,EAI9Bg8D,EAASh8D,IAAMorB,EAAGprB,GAAKmrB,EAAGnrB,KAdlB,UAiBVg8D,GAAY5wC,EAAKD,IAjBP,KAoBZ,OAAO6wC,GAeP1wC,eA1EF,SAAwBlH,GAUtB,OATAA,GAAYniB,KAAK4mB,KAAKC,WAAWuC,WACjCjH,GAAYniB,KAAKsiB,cAEAtiB,KAAKi8D,eAAex4C,YACnCzjB,KAAKi8D,eAAep5C,UAAY7iB,KAAKi8D,eAAex4C,UAAYtB,EAAWniB,KAAKi8D,eAAep5C,UAAY,EAC3G7iB,KAAKi8D,eAAez4D,MAAQxD,KAAKkiB,iBAAiBC,EAAUniB,KAAKi8D,gBACjEj8D,KAAKi8D,eAAex4C,UAAYtB,GAG3BniB,KAAKi8D,eAAez4D,OAiE3B04D,qBAbF,WACE,OAAOl8D,KAAKwiB,IAaZ25C,iBAVF,SAA0BC,GACxBp8D,KAAKo8D,cAAgBA,KAazB,WACE,SAASlE,EAAQt4D,EAAMg6D,EAAUyC,GAC/B,IAAKr8D,KAAK+H,IAAM/H,KAAK8iB,UACnB,OAAO9iB,KAAKwiB,GAGd5iB,EAAOA,EAAOA,EAAK2iC,cAAgB,GACnC,IAOM+5B,EAAeC,EAmBfx+D,EAAGE,EAAKu+D,EA1BVxuB,EAAehuC,KAAKmmB,KAAKC,cACzBtD,EAAY9iB,KAAK8iB,UACjB25C,EAAe35C,EAAUA,EAAU5kB,OAAS,GAAGyD,EAEnD,GAAIqsC,GAAgByuB,EAClB,OAAOz8D,KAAKwiB,GAuBZ,GAnBK65C,EAcHE,EAAgBE,GAHdH,EAHG1C,EAGa/8D,KAAKQ,IAAIo/D,EAAe71C,KAAKT,KAAKU,WAAWuC,UAAYwwC,GAFzD/8D,KAAKY,IAAI,EAAGg/D,EAAez8D,KAAK4mB,KAAK7K,KAAK4uB,QARvDivB,GAAYA,EAAW92C,EAAU5kB,OAAS,KAC7C07D,EAAW92C,EAAU5kB,OAAS,GAIhCo+D,EAAgBG,GADhBF,EAAgBz5C,EAAUA,EAAU5kB,OAAS,EAAI07D,GAAUj4D,IAchD,aAAT/B,EAAqB,CAGvB,GAFiB/C,KAAKU,OAAOywC,EAAeuuB,GAAiBD,GAE5C,GAAM,EACrB,OAAOt8D,KAAKqpB,gBAAgBizC,GAAiBtuB,EAAeuuB,GAAiBD,EAAgBC,GAAiBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,OAE3I,IAAa,WAATxpB,EAAmB,CAC5B,IAAI88D,EAAQ18D,KAAKqpB,eAAekzC,EAAgBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAC5EuzC,EAAO38D,KAAKqpB,eAAeozC,EAAez8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAC1EwzC,EAAU58D,KAAKqpB,iBAAiB2kB,EAAeuuB,GAAiBD,EAAgBC,GAAiBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GACjIyzC,EAAUhgE,KAAKU,OAAOywC,EAAeuuB,GAAiBD,GAE1D,GAAIt8D,KAAKwiB,GAAGtkB,OAAQ,CAIlB,IAFAD,GADAu+D,EAAM,IAAI94D,MAAMg5D,EAAMx+D,SACZA,OAELH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBy+D,EAAIz+D,IAAM4+D,EAAK5+D,GAAK2+D,EAAM3+D,IAAM8+D,EAAUD,EAAQ7+D,GAGpD,OAAOy+D,EAGT,OAAQG,EAAOD,GAASG,EAAUD,EAC7B,GAAa,aAATh9D,EAAqB,CAC9B,IAAIk9D,EAAY98D,KAAKqpB,eAAeozC,EAAez8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAC/E2zC,EAAgB/8D,KAAKqpB,gBAAgBozC,EAAe,MAASz8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAEjG,GAAIppB,KAAKwiB,GAAGtkB,OAAQ,CAIlB,IAFAD,GADAu+D,EAAM,IAAI94D,MAAMo5D,EAAU5+D,SAChBA,OAELH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBy+D,EAAIz+D,GAAK++D,EAAU/+D,IAAM++D,EAAU/+D,GAAKg/D,EAAch/D,MAAQiwC,EAAeyuB,GAAgBz8D,KAAKmmB,KAAKU,WAAWuC,WAAa,KAGjI,OAAOozC,EAGT,OAAOM,GAA4C9uB,EAAeyuB,GAAgB,MAA9DK,EAAYC,IAGlC,OAAO/8D,KAAKqpB,iBAAiB2kB,EAAeuuB,GAAiBD,EAAgBC,GAAiBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAIlI,SAAS4uC,EAAOp4D,EAAMg6D,EAAUyC,GAC9B,IAAKr8D,KAAK+H,EACR,OAAO/H,KAAKwiB,GAGd5iB,EAAOA,EAAOA,EAAK2iC,cAAgB,GACnC,IAOM+5B,EAAeG,EAmBf1+D,EAAGE,EAAKu+D,EA1BVxuB,EAAehuC,KAAKmmB,KAAKC,cACzBtD,EAAY9iB,KAAK8iB,UACjBy5C,EAAgBz5C,EAAU,GAAGnhB,EAEjC,GAAIqsC,GAAgBuuB,EAClB,OAAOv8D,KAAKwiB,GAuBZ,GAnBK65C,EAcHI,EAAeF,GAHbD,EAHG1C,EAGa/8D,KAAKQ,IAAIupB,KAAKT,KAAKU,WAAWuC,UAAYwwC,GAF1C/8D,KAAKY,IAAI,EAAGuC,KAAK4mB,KAAK7K,KAAKiZ,GAAKunC,OAR7C3C,GAAYA,EAAW92C,EAAU5kB,OAAS,KAC7C07D,EAAW92C,EAAU5kB,OAAS,GAIhCo+D,GADAG,EAAe35C,EAAU82C,GAAUj4D,GACJ46D,GAapB,aAAT38D,EAAqB,CAGvB,GAFiB/C,KAAKU,OAAOg/D,EAAgBvuB,GAAgBsuB,GAE5C,GAAM,EACrB,OAAOt8D,KAAKqpB,iBAAiBkzC,EAAgBvuB,GAAgBsuB,EAAgBC,GAAiBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,OAE3H,IAAa,WAATxpB,EAAmB,CAC5B,IAAI88D,EAAQ18D,KAAKqpB,eAAekzC,EAAgBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAC5EuzC,EAAO38D,KAAKqpB,eAAeozC,EAAez8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAC1EwzC,EAAU58D,KAAKqpB,gBAAgBizC,GAAiBC,EAAgBvuB,GAAgBsuB,EAAgBC,GAAiBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GACjJyzC,EAAUhgE,KAAKU,OAAOg/D,EAAgBvuB,GAAgBsuB,GAAiB,EAE3E,GAAIt8D,KAAKwiB,GAAGtkB,OAAQ,CAIlB,IAFAD,GADAu+D,EAAM,IAAI94D,MAAMg5D,EAAMx+D,SACZA,OAELH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBy+D,EAAIz+D,GAAK6+D,EAAQ7+D,IAAM4+D,EAAK5+D,GAAK2+D,EAAM3+D,IAAM8+D,EAG/C,OAAOL,EAGT,OAAOI,GAAWD,EAAOD,GAASG,EAC7B,GAAa,aAATj9D,EAAqB,CAC9B,IAAIo9D,EAAah9D,KAAKqpB,eAAekzC,EAAgBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GACjF6zC,EAAiBj9D,KAAKqpB,gBAAgBkzC,EAAgB,MAASv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAEnG,GAAIppB,KAAKwiB,GAAGtkB,OAAQ,CAIlB,IAFAD,GADAu+D,EAAM,IAAI94D,MAAMs5D,EAAW9+D,SACjBA,OAELH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBy+D,EAAIz+D,GAAKi/D,EAAWj/D,IAAMi/D,EAAWj/D,GAAKk/D,EAAel/D,KAAOw+D,EAAgBvuB,GAAgB,KAGlG,OAAOwuB,EAGT,OAAOQ,GAAcA,EAAaC,IAAmBV,EAAgBvuB,GAAgB,MAGvF,OAAOhuC,KAAKqpB,gBAAgBizC,GAAiBC,EAAgBvuB,GAAgBsuB,EAAgBC,GAAiBv8D,KAAKmmB,KAAKU,WAAWuC,UAAW,GAIlJ,SAASgvC,EAAO1qD,EAAOwvD,GACrB,IAAKl9D,KAAK+H,EACR,OAAO/H,KAAKwiB,GAMd,GAHA9U,EAAyB,IAAhBA,GAAS,KAClBwvD,EAAUrgE,KAAKU,MAAM2/D,GAAW,KAEjB,EACb,OAAOl9D,KAAKwiB,GAGd,IAMIhf,EAQA25D,EAdAt9D,EAAcG,KAAKmmB,KAAKC,cAAgBpmB,KAAKmmB,KAAKU,WAAWuC,UAC7DpH,EAAYniB,EAAc6N,EAE1B0vD,EAAkBF,EAAU,GADjBr9D,EAAc6N,EACmBsU,IAAck7C,EAAU,GAAK,EACzEn/D,EAAI,EACJ+J,EAAI,EAWR,IAPEtE,EADExD,KAAKwiB,GAAGtkB,OACFkF,iBAAiB,UAAWpD,KAAKwiB,GAAGtkB,QAEpC,EAKHH,EAAIm/D,GAAS,CAGlB,GAFAC,EAAcn9D,KAAKqpB,eAAerH,EAAYjkB,EAAIq/D,GAE9Cp9D,KAAKwiB,GAAGtkB,OACV,IAAK4J,EAAI,EAAGA,EAAI9H,KAAKwiB,GAAGtkB,OAAQ4J,GAAK,EACnCtE,EAAMsE,IAAMq1D,EAAYr1D,QAG1BtE,GAAS25D,EAGXp/D,GAAK,EAGP,GAAIiC,KAAKwiB,GAAGtkB,OACV,IAAK4J,EAAI,EAAGA,EAAI9H,KAAKwiB,GAAGtkB,OAAQ4J,GAAK,EACnCtE,EAAMsE,IAAMo1D,OAGd15D,GAAS05D,EAGX,OAAO15D,EAgBT,SAAS65D,EAAwBvd,GAC1B9/C,KAAKs9D,0BACRt9D,KAAKs9D,wBAA0B,CAC7Bl8D,EAAG,IAAI2E,SAKX,IAAIitB,EAAShzB,KAAKs9D,wBAAwBl8D,EAG1C,GAFA4xB,EAAOhoB,eAAehL,KAAKioB,IAAIzhB,OAE3BxG,KAAKkoB,uBAAyB,EAAG,CACnC,IAAIq1C,EAASv9D,KAAK2H,EAAE0hB,eAAey2B,GACnC9sB,EAAO5qB,WAAWm1D,EAAO,IAAKA,EAAO,GAAIA,EAAO,IAGlD,GAAIv9D,KAAKkoB,uBAAyB,EAAG,CACnC,IAAI1gB,EAAQxH,KAAKmB,EAAEkoB,eAAey2B,GAClC9sB,EAAOxrB,MAAMA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAGzC,GAAIxH,KAAK0oB,IAAM1oB,KAAKkoB,uBAAyB,EAAG,CAC9C,IAAI9gB,EAAOpH,KAAK0oB,GAAGW,eAAey2B,GAC9B0d,EAAWx9D,KAAK2oB,GAAGU,eAAey2B,GACtC9sB,EAAOzrB,cAAcH,EAAMo2D,GAG7B,GAAIx9D,KAAKqB,GAAKrB,KAAKkoB,uBAAyB,EAAG,CAC7C,IAAIwwC,EAAW14D,KAAKqB,EAAEgoB,eAAey2B,GACrC9sB,EAAOvsB,QAAQiyD,QACV,IAAK14D,KAAKqB,GAAKrB,KAAKkoB,uBAAyB,EAAG,CACrD,IAAIu1C,EAAYz9D,KAAKwoB,GAAGa,eAAey2B,GACnC4d,EAAY19D,KAAKuoB,GAAGc,eAAey2B,GACnC6d,EAAY39D,KAAKsoB,GAAGe,eAAey2B,GACnC8d,EAAc59D,KAAKyoB,GAAGY,eAAey2B,GACzC9sB,EAAOhsB,SAASy2D,EAAUr8D,GAAG2F,QAAQ22D,EAAUt8D,GAAG0F,QAAQ62D,EAAUv8D,GAAG4F,SAAS42D,EAAY,IAAI72D,QAAQ62D,EAAY,IAAI92D,QAAQ82D,EAAY,IAG9I,GAAI59D,KAAK+b,KAAKta,GAAKzB,KAAK+b,KAAKta,EAAEN,EAAG,CAChC,IAAI08D,EAAY79D,KAAKmoB,GAAGkB,eAAey2B,GACnCge,EAAY99D,KAAKooB,GAAGiB,eAAey2B,GAEvC,GAAI9/C,KAAK+b,KAAKta,EAAE2J,EAAG,CACjB,IAAI2yD,EAAY/9D,KAAKqoB,GAAGgB,eAAey2B,GACvC9sB,EAAO5qB,UAAUy1D,EAAWC,GAAYC,QAExC/qC,EAAO5qB,UAAUy1D,EAAWC,EAAW,OAEpC,CACL,IAAI9+D,EAAWgB,KAAKyB,EAAE4nB,eAAey2B,GACrC9sB,EAAO5qB,UAAUpJ,EAAS,GAAIA,EAAS,IAAKA,EAAS,IAGvD,OAAOg0B,EAGT,SAASgrC,EAA8Ble,IAEvC,IAAIt2B,EAAuB1B,yBAAyB0B,qBAEpD1B,yBAAyB0B,qBAAuB,SAAU5C,EAAM7K,EAAMzX,GACpE,IAAIH,EAAOqlB,EAAqB5C,EAAM7K,EAAMzX,GAS5C,OAPIH,EAAKC,kBAAkBlG,OACzBiG,EAAKklB,eAAiBg0C,EAAwBn6D,KAAKiB,GAEnDA,EAAKklB,eAAiB20C,EAA8B96D,KAAKiB,GAG3DA,EAAKg4D,iBAAmBN,kBAAkBM,iBACnCh4D,GAGT,IAAI85D,EAAkBl8C,gBAAgB8F,QAEtC9F,gBAAgB8F,QAAU,SAAUjB,EAAM7K,EAAMnc,EAAM8mB,EAAMpiB,GAC1D,IAAIH,EAAO85D,EAAgBr3C,EAAM7K,EAAMnc,EAAM8mB,EAAMpiB,GAI/CH,EAAKgjB,GACPhjB,EAAKklB,eAAiBwyC,kBAAkBxyC,eAAenmB,KAAKiB,GAE5DA,EAAKklB,eAAiBwyC,kBAAkBK,qBAAqBh5D,KAAKiB,GAGpEA,EAAKg4D,iBAAmBN,kBAAkBM,iBAC1Ch4D,EAAK+zD,QAAUA,EACf/zD,EAAK6zD,OAASA,EACd7zD,EAAKi0D,OAASA,EACdj0D,EAAK21D,kBAAoB+B,kBAAkB/B,kBAAkB52D,KAAKiB,GAClEA,EAAK43D,eAAiBF,kBAAkBE,eAAe74D,KAAKiB,GAC5DA,EAAKi1D,QAAqB,IAAXr9C,EAAKpU,EAAUoU,EAAKhU,EAAE7J,OAAS,EAC9CiG,EAAK+5D,cAAgBniD,EAAKoiD,GAC1B,IAAI36D,EAAQ,EAiBZ,OAfa,IAAT5D,IACF4D,EAAQJ,iBAAiB,UAAsB,IAAX2Y,EAAKpU,EAAUoU,EAAKhU,EAAE,GAAG5G,EAAEjD,OAAS6d,EAAKhU,EAAE7J,SAGjFiG,EAAK83D,eAAiB,CACpBx4C,UAAWpnB,oBACXwmB,UAAW,EACXrf,MAAOA,GAETq4D,kBAAkBC,kBAAkBl1C,EAAM7K,EAAM5X,GAE5CA,EAAK4D,GACPzD,EAAUJ,mBAAmBC,GAGxBA,GAyBT,IAAIi6D,EAAmCrzC,qBAAqBszC,yBACxDC,EAA4CvzC,qBAAqBwzC,kCAErE,SAASC,KAETA,EAAiB/7D,UAAY,CAC3BioB,SAAU,SAAkBvmB,EAAM27C,GAC5B9/C,KAAK+H,GACP/H,KAAK0E,WAGP,IAAI4sB,EAAYtxB,KAAKoB,OAERmiC,IAATuc,IACFxuB,EAAYtxB,KAAKqpB,eAAey2B,EAAM,IAGxC,IAAI/hD,EACAE,EAAMqzB,EAAUhb,QAChBoU,EAAW4G,EAAUntB,GACrB+M,EAASogB,EAAUlwB,EACnBqC,EAAMnF,iBAAiBL,GAE3B,IAAKF,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAEtB0F,EAAI1F,GADO,MAAToG,GAAyB,MAATA,EACT,CAACumB,EAAS3sB,GAAG,GAAKmT,EAAOnT,GAAG,GAAI2sB,EAAS3sB,GAAG,GAAKmT,EAAOnT,GAAG,IAE3D,CAAC2sB,EAAS3sB,GAAG,GAAI2sB,EAAS3sB,GAAG,IAI1C,OAAO0F,GAETyN,OAAQ,SAAgB4uC,GACtB,OAAO9/C,KAAK0qB,SAAS,IAAKo1B,IAE5B+W,WAAY,SAAoB/W,GAC9B,OAAO9/C,KAAK0qB,SAAS,IAAKo1B,IAE5BgX,YAAa,SAAqBhX,GAChC,OAAO9/C,KAAK0qB,SAAS,IAAKo1B,IAE5B2e,SAAU,WACR,OAAOz+D,KAAKoB,EAAEwG,GAEhB82D,YAAa,SAAqBtqD,EAAM0rC,GACtC,IAAIxuB,EAAYtxB,KAAKoB,OAERmiC,IAATuc,IACFxuB,EAAYtxB,KAAKqpB,eAAey2B,EAAM,IAGnC9/C,KAAK2+D,kBACR3+D,KAAK2+D,gBAAkBxlD,IAAIrD,kBAAkBwb,IAa/C,IAVA,IAQI1lB,EARAoK,EAAiBhW,KAAK2+D,gBACtB7pD,EAAUkB,EAAelB,QACzBY,EAAYM,EAAeO,YAAcnC,EACzCrW,EAAI,EACJE,EAAM6W,EAAQ5W,OAGd0gE,EAAoB,EAGjB7gE,EAAIE,GAAK,CACd,GAAI2gE,EAAoB9pD,EAAQ/W,GAAGwW,YAAcmB,EAAW,CAC1D,IAAImpD,EAAY9gE,EACZ+gE,EAAWxtC,EAAU1pB,GAAK7J,IAAME,EAAM,EAAI,EAAIF,EAAI,EAClDwlB,GAAe7N,EAAYkpD,GAAqB9pD,EAAQ/W,GAAGwW,YAC/D3I,EAAKuN,IAAIpB,kBAAkBuZ,EAAUlwB,EAAEy9D,GAAYvtC,EAAUlwB,EAAE09D,GAAWxtC,EAAUnpB,EAAE02D,GAAYvtC,EAAUvzB,EAAE+gE,GAAWv7C,EAAazO,EAAQ/W,IAC9I,MAEA6gE,GAAqB9pD,EAAQ/W,GAAGwW,YAGlCxW,GAAK,EAOP,OAJK6N,IACHA,EAAK0lB,EAAU1pB,EAAI,CAAC0pB,EAAUlwB,EAAE,GAAG,GAAIkwB,EAAUlwB,EAAE,GAAG,IAAM,CAACkwB,EAAUlwB,EAAEkwB,EAAUhb,QAAU,GAAG,GAAIgb,EAAUlwB,EAAEkwB,EAAUhb,QAAU,GAAG,KAGlI1K,GAETmzD,aAAc,SAAsB3qD,EAAM0rC,EAAMkf,GAE9C5qD,EAAe,GAARA,EAAYpU,KAAKoB,EAAEwG,EAAI,EAAI,KAAQwM,EAC1C,IAAIlI,EAAMlM,KAAK0+D,YAAYtqD,EAAM0rC,GAC7B3zC,EAAMnM,KAAK0+D,YAAYtqD,EAAO,KAAO0rC,GACrCmf,EAAU9yD,EAAI,GAAKD,EAAI,GACvBgzD,EAAU/yD,EAAI,GAAKD,EAAI,GACvBizD,EAAYtiE,KAAKM,KAAKN,KAAKI,IAAIgiE,EAAS,GAAKpiE,KAAKI,IAAIiiE,EAAS,IAEnE,OAAkB,IAAdC,EACK,CAAC,EAAG,GAGmB,YAAfH,EAA2B,CAACC,EAAUE,EAAWD,EAAUC,GAAa,EAAED,EAAUC,EAAWF,EAAUE,IAG5HC,cAAe,SAAuBhrD,EAAM0rC,GAC1C,OAAO9/C,KAAK++D,aAAa3qD,EAAM0rC,EAAM,YAEvCuf,aAAc,SAAsBjrD,EAAM0rC,GACxC,OAAO9/C,KAAK++D,aAAa3qD,EAAM0rC,EAAM,WAEvCqc,iBAAkBN,kBAAkBM,iBACpC9yC,eAAgBwyC,kBAAkBK,sBAEpCtpD,gBAAgB,CAAC4rD,GAAmBJ,GACpCxrD,gBAAgB,CAAC4rD,GAAmBF,GACpCA,EAA0C77D,UAAU4mB,eAvIpD,SAA6BlH,GAmB3B,OAjBKniB,KAAKi8D,iBACRj8D,KAAKi8D,eAAiB,CACpBqD,WAAY1zC,WAAW7gB,MAAM/K,KAAKwiB,IAClCK,UAAW,EACXpK,SAAUpc,sBAId8lB,GAAYniB,KAAK4mB,KAAKC,WAAWuC,WACjCjH,GAAYniB,KAAKsiB,cAEAtiB,KAAKi8D,eAAexjD,WACnCzY,KAAKi8D,eAAep5C,UAAY7iB,KAAKi8D,eAAexjD,SAAW0J,EAAWniB,KAAKsmB,SAASzD,UAAY,EACpG7iB,KAAKi8D,eAAexjD,SAAW0J,EAC/BniB,KAAKgrB,iBAAiB7I,EAAUniB,KAAKi8D,eAAeqD,WAAYt/D,KAAKi8D,iBAGhEj8D,KAAKi8D,eAAeqD,YAqH7BhB,EAA0C77D,UAAUy0D,mBAAqBlD,kBAAkBkD,mBAC3F,IAAIqI,EAAuBx0C,qBAAqB2d,aAEhD3d,qBAAqB2d,aAAe,SAAU9hB,EAAM7K,EAAMnc,EAAM6D,EAAK+7D,GACnE,IAAIr7D,EAAOo7D,EAAqB34C,EAAM7K,EAAMnc,EAAM6D,EAAK+7D,GAcvD,OAbAr7D,EAAK+5D,cAAgBniD,EAAKoiD,GAC1Bh6D,EAAK6iB,MAAO,EAEC,IAATpnB,EACFi8D,kBAAkBC,kBAAkBl1C,EAAM7K,EAAKnQ,GAAIzH,GACjC,IAATvE,GACTi8D,kBAAkBC,kBAAkBl1C,EAAM7K,EAAKnB,GAAIzW,GAGjDA,EAAK4D,GACP6e,EAAK1iB,mBAAmBC,GAGnBA,GA/eX,GA4fEg4B,aAAa15B,UAAUg9D,mBAAqB,SAAUn+B,EAAcI,GAClE,IAAIrf,EAAWriB,KAAK0/D,oBAAoBh+B,GAExC,GAAIJ,EAAa3/B,IAAM0gB,EAAU,CAC/B,IAAIihB,EAAU,GAId,OAHAtjC,KAAKw9B,SAAS8F,EAAShC,GACvBgC,EAAQ3hC,EAAI0gB,EAAS9f,WACrB+gC,EAAQ/mB,YAAa,EACd+mB,EAGT,OAAOhC,GAGTnF,aAAa15B,UAAUg7B,eAAiB,WACtC,IAAIkiC,EAAc3/D,KAAKmhC,kBACnBy+B,EAAiB5/D,KAAK87D,oBAE1B,OADA97D,KAAKmnB,GAAKw4C,GAAeC,EAClB5/D,KAAKmnB,IAGdgV,aAAa15B,UAAUq5D,kBA7BvB,WACE,GAAI97D,KAAK+b,KAAKla,EAAEqJ,EAGd,OAFAlL,KAAK0/D,oBAAsB1L,kBAAkBkD,mBAAmBh0D,KAAKlD,KAA1Cg0D,CAAgDh0D,KAAK4mB,KAAM5mB,KAAK+b,KAAKla,EAAG7B,MACnGA,KAAKonB,UAAUpnB,KAAKy/D,mBAAmBv8D,KAAKlD,QACrC,GA4Bb,IAAI6/D,mBACK,SAA8BnwC,EAAOowC,EAAM1D,GAChD,IAAIj4D,EAAO27D,EAAK57C,GAEhB,SAAS67C,EAAkB3hE,GACzB,GAAY,UAARA,GAA2B,UAARA,GAA2B,SAARA,GAA0B,SAARA,GAA0B,sBAARA,GAAuC,IAARA,EAC3G,OAAO2hE,EAAkBjlD,KAI7B,IAAIklD,EAAiBC,qBAAqBF,EAAmB3D,GAsC7D,OApCAj4D,EAAKg4D,iBAAiB+D,kBAAkB,OAAQF,IAChD5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,KAAQ,CACN1uD,IAAK,WAKH,OAJIlN,EAAK4D,GACP5D,EAAKO,WAGAP,IAGX,MAAS,CACPkN,IAAK,WAKH,OAJIlN,EAAK4D,GACP5D,EAAKO,WAGAP,IAGX,MAAS,CACPX,MAAOksB,EAAMvf,IAEf,GAAM,CACJ3M,MAAOksB,EAAMyuC,IAEf,cAAiB,CACf36D,MAAOksB,EAAMyuC,IAEf,GAAM,CACJ36D,MAAOksB,EAAM0wC,IAEf,cAAiB,CACf58D,MAAO44D,KAGJ2D,GAIPE,qBACK,SAAUF,EAAmBM,GAClC,OAAO,SAAUjiE,GAGf,OAFAA,OAAcmlC,IAARnlC,EAAoB,EAAIA,IAEnB,EACF2hE,EAEAM,EAAoBjiE,EAAM,KAMrC8hE,kBACK,SAAUI,EAAclE,GAC7B,IAAI2D,EAAoB,CACtBQ,MAAOD,GAaT,OAVA,SAAwBliE,GAGtB,OAFAA,OAAcmlC,IAARnlC,EAAoB,EAAIA,IAEnB,EACF2hE,EAEA3D,IAAgBh+D,KAQ3B29C,yBAA2B,WAC7B,SAASykB,EAAgBlmD,EAAQwlD,EAAM1D,GACrC,IACIr+D,EADA0F,EAAM,GAENxF,EAAMqc,EAASA,EAAOpc,OAAS,EAEnC,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACJ,MAAhBuc,EAAOvc,GAAGuK,GACZ7E,EAAIT,KAAKy9D,EAAsBnmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IAC1B,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK09D,EAAqBpmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IACzB,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK29D,EAAuBrmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IAC3B,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK49D,EAAqBtmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IACzB,MAAhB9hD,EAAOvc,GAAGuK,KACM,MAAhBgS,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK69D,EAAwBvmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IAC5B,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK89D,EAAqBxmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IACzB,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK68D,mBAAmBvlD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IACvB,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAK+9D,EAAqBzmD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IACzB,MAAhB9hD,EAAOvc,GAAGuK,GACnB7E,EAAIT,KAAKg+D,EAAwB1mD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,IAC5B,MAAhB9hD,EAAOvc,GAAGuK,IACnB7E,EAAIT,KAAKi+D,EAAyB3mD,EAAOvc,GAAI+hE,EAAK/hE,GAAIq+D,KAI1D,OAAO34D,EAiCT,SAASg9D,EAAsB/wC,EAAOowC,EAAM1D,GAC1C,IAAI2D,EAAoB,SAA4Bv8D,GAClD,OAAQA,GACN,IAAK,qBACL,IAAK,WACL,KAAK,EACH,OAAOu8D,EAAkB/jB,QAK3B,QACE,OAAO+jB,EAAkBv3D,YAI/Bu3D,EAAkB3D,cAAgB6D,qBAAqBF,EAAmB3D,GAC1E,IAAIpgB,EA/CN,SAAkCtsB,EAAOowC,EAAM1D,GAC7C,IAAI8E,EAEAnB,EAAoB,SAA4Bv8D,GAIlD,IAHA,IAAIzF,EAAI,EACJE,EAAMijE,EAAWhjE,OAEdH,EAAIE,GAAK,CACd,GAAIijE,EAAWnjE,GAAGwiE,QAAU/8D,GAAS09D,EAAWnjE,GAAGqiE,KAAO58D,GAAS09D,EAAWnjE,GAAGmgE,gBAAkB16D,GAAS09D,EAAWnjE,GAAGogE,KAAO36D,GAAS09D,EAAWnjE,GAAGqlB,MAAQ5f,EAC9J,OAAO09D,EAAWnjE,GAGpBA,GAAK,EAGP,GAAqB,iBAAVyF,EACT,OAAO09D,EAAW19D,EAAQ,IAI9Bu8D,EAAkB3D,cAAgB6D,qBAAqBF,EAAmB3D,GAC1E8E,EAAaV,EAAgB9wC,EAAM7U,GAAIilD,EAAKjlD,GAAIklD,EAAkB3D,eAClE2D,EAAkBoB,cAAgBD,EAAWhjE,OAC7C,IAAIkjE,EAAqBC,EAA0B3xC,EAAM7U,GAAG6U,EAAM7U,GAAG3c,OAAS,GAAI4hE,EAAKjlD,GAAGilD,EAAKjlD,GAAG3c,OAAS,GAAI6hE,EAAkB3D,eAIjI,OAHA2D,EAAkBv3D,UAAY44D,EAC9BrB,EAAkB7B,cAAgBxuC,EAAM4xC,IACxCvB,EAAkBQ,MAAQ7wC,EAAMvf,GACzB4vD,EAoBOwB,CAAyB7xC,EAAOowC,EAAMC,EAAkB3D,eAClEgF,EAAqBC,EAA0B3xC,EAAM7U,GAAG6U,EAAM7U,GAAG3c,OAAS,GAAI4hE,EAAKjlD,GAAGilD,EAAKjlD,GAAG3c,OAAS,GAAI6hE,EAAkB3D,eAajI,OAZA2D,EAAkB/jB,QAAUA,EAC5B+jB,EAAkBv3D,UAAY44D,EAC9BhuD,OAAOukD,eAAeoI,EAAmB,QAAS,CAChD1uD,IAAK,WACH,OAAOqe,EAAMvf,MAIjB4vD,EAAkBoB,cAAgBzxC,EAAM8xC,GACxCzB,EAAkB7B,cAAgBxuC,EAAMyuC,GACxC4B,EAAkB5vD,GAAKuf,EAAMvf,GAC7B4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,SAASW,EAAqBhxC,EAAOowC,EAAM1D,GACzC,SAAS2D,EAAkB3hE,GACzB,MAAY,UAARA,GAA2B,UAARA,EACd2hE,EAAkBh+D,MACR,YAAR3D,GAA6B,YAARA,EACvB2hE,EAAkB5d,aADpB,EAqBT,OAhBA/uC,OAAO+sD,iBAAiBJ,EAAmB,CACzC,MAAS,CACP1uD,IAAKowD,4BAA4B3B,EAAKl4D,IAExC,QAAW,CACTyJ,IAAKowD,4BAA4B3B,EAAK33D,IAExC,MAAS,CACP3E,MAAOksB,EAAMvf,IAEf,GAAM,CACJ3M,MAAOksB,EAAM0wC,MAGjBN,EAAKl4D,EAAEu0D,iBAAiB+D,kBAAkB,QAAS9D,IACnD0D,EAAK33D,EAAEg0D,iBAAiB+D,kBAAkB,UAAW9D,IAC9C2D,EAGT,SAASY,EAAuBjxC,EAAOowC,EAAM1D,GAC3C,IAAI4D,EAAiBC,qBAAqBF,EAAmB3D,GAEzDsF,EAAqBzB,qBAAqB0B,EAAQ3B,GAEtD,SAAS4B,EAAoB7jE,GAC3BqV,OAAOukD,eAAegK,EAAQjyC,EAAM7tB,EAAE9D,GAAGoS,GAAI,CAC3CkB,IAAKowD,4BAA4B3B,EAAKj+D,EAAEgtB,UAAU9wB,GAAG0D,KAIzD,IAAI1D,EACAE,EAAMyxB,EAAM7tB,EAAI6tB,EAAM7tB,EAAE3D,OAAS,EACjCyjE,EAAS,GAEb,IAAK5jE,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB6jE,EAAoB7jE,GACpB+hE,EAAKj+D,EAAEgtB,UAAU9wB,GAAG0D,EAAE06D,iBAAiBuF,GAGzC,SAAS3B,EAAkB3hE,GACzB,MAAY,UAARA,GAA2B,UAARA,EACd2hE,EAAkBh+D,MACR,YAAR3D,GAA6B,YAARA,EACvB2hE,EAAkB5d,QACR,iBAAR/jD,GAAkC,iBAARA,EAC5B2hE,EAAkB5T,iBADpB,EA8BT,OAzBA/4C,OAAO+sD,iBAAiBJ,EAAmB,CACzC,MAAS,CACP1uD,IAAKowD,4BAA4B3B,EAAKl4D,IAExC,QAAW,CACTyJ,IAAKowD,4BAA4B3B,EAAK33D,IAExC,YAAe,CACbkJ,IAAKowD,4BAA4B3B,EAAKnjD,IAExC,KAAQ,CACNtL,IAAK,WACH,OAAOswD,IAGX,MAAS,CACPn+D,MAAOksB,EAAMvf,IAEf,GAAM,CACJ3M,MAAOksB,EAAM0wC,MAGjBN,EAAKl4D,EAAEu0D,iBAAiB+D,kBAAkB,QAASF,IACnDF,EAAK33D,EAAEg0D,iBAAiB+D,kBAAkB,UAAWF,IACrDF,EAAKnjD,EAAEw/C,iBAAiB+D,kBAAkB,eAAgBF,IACnDD,EAGT,SAASa,EAAqBlxC,EAAOowC,EAAM1D,GACzC,SAAS2D,EAAkB3hE,GACzB,OAAIA,IAAQsxB,EAAM7nB,EAAEs2D,IAAc,QAAR//D,GAAyB,QAARA,EAClC2hE,EAAkBpN,IAGvBv0D,IAAQsxB,EAAMvuB,EAAEg9D,GACX4B,EAAkB8B,MAGvBzjE,IAAQsxB,EAAMvnB,EAAEg2D,GACX4B,EAAkB/9D,YAD3B,EAKF,IAAIg+D,EAAiBC,qBAAqBF,EAAmB3D,GAuB7D,OArBA2D,EAAkB7B,cAAgBxuC,EAAMyuC,GACxC2B,EAAK3+D,EAAEg7D,iBAAiB+D,kBAAkB,QAASF,IACnDF,EAAKj4D,EAAEs0D,iBAAiB+D,kBAAkB,MAAOF,IACjDF,EAAK33D,EAAEg0D,iBAAiB+D,kBAAkB,SAAUF,IACpDD,EAAkB7B,cAAgBxuC,EAAMyuC,GACxC4B,EAAkB3D,cAAgBA,EAClChpD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,MAAS,CACP1uD,IAAKowD,4BAA4B3B,EAAK3+D,IAExC,IAAO,CACLkQ,IAAKowD,4BAA4B3B,EAAKj4D,IAExC,OAAU,CACRwJ,IAAKowD,4BAA4B3B,EAAK33D,IAExC,MAAS,CACP3E,MAAOksB,EAAMvf,MAGjB4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,SAASsB,EAA0B3xC,EAAOowC,EAAM1D,GAC9C,SAAS2D,EAAkBv8D,GACzB,OAAIksB,EAAM/nB,EAAEw2D,KAAO36D,GAAmB,iBAAVA,EACnBu8D,EAAkBpH,YAGvBjpC,EAAMvnB,EAAEg2D,KAAO36D,GAAmB,YAAVA,EACnBu8D,EAAkB5d,QAGvBzyB,EAAMjuB,EAAE08D,KAAO36D,GAAmB,aAAVA,EACnBu8D,EAAkB/gE,SAGvB0wB,EAAMruB,EAAE88D,KAAO36D,GAAmB,aAAVA,GAAkC,yBAAVA,EAC3Cu8D,EAAkBrH,SAGvBhpC,EAAMvuB,EAAEg9D,KAAO36D,GAAmB,UAAVA,EACnBu8D,EAAkBv4D,MAGvBkoB,EAAMhH,IAAMgH,EAAMhH,GAAGy1C,KAAO36D,GAAmB,SAAVA,EAChCu8D,EAAkB34D,KAGvBsoB,EAAM/G,IAAM+G,EAAM/G,GAAGw1C,KAAO36D,GAAmB,cAAVA,EAChCu8D,EAAkBvC,cAD3B,EAKF,IAAIwC,EAAiBC,qBAAqBF,EAAmB3D,GA2C7D,OAzCA0D,EAAKt3D,UAAUusB,OAAO5sB,EAAEg0D,iBAAiB+D,kBAAkB,UAAWF,IACtEF,EAAKt3D,UAAUusB,OAAOtzB,EAAE06D,iBAAiB+D,kBAAkB,WAAYF,IACvEF,EAAKt3D,UAAUusB,OAAOptB,EAAEw0D,iBAAiB+D,kBAAkB,eAAgBF,IAC3EF,EAAKt3D,UAAUusB,OAAO5zB,EAAEg7D,iBAAiB+D,kBAAkB,QAASF,IACpEF,EAAKt3D,UAAUusB,OAAO1zB,EAAE86D,iBAAiB+D,kBAAkB,WAAYF,IAEnEF,EAAKt3D,UAAUusB,OAAOrM,KACxBo3C,EAAKt3D,UAAUusB,OAAOrM,GAAGyzC,iBAAiB+D,kBAAkB,OAAQF,IACpEF,EAAKt3D,UAAUusB,OAAOpM,GAAGwzC,iBAAiB+D,kBAAkB,aAAcF,KAG5EF,EAAKt3D,UAAUwsB,GAAGmnC,iBAAiB+D,kBAAkB,UAAWF,IAChE5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,QAAW,CACT1uD,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAO5sB,IAEzD,SAAY,CACVkJ,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAOtzB,IAEzD,YAAe,CACb4P,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAOptB,IAEzD,MAAS,CACP0J,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAO5zB,IAEzD,SAAY,CACVkQ,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAO1zB,IAEzD,KAAQ,CACNgQ,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAOrM,KAEzD,SAAY,CACVrX,IAAKowD,4BAA4B3B,EAAKt3D,UAAUusB,OAAOpM,KAEzD,MAAS,CACPnlB,MAAOksB,EAAMvf,MAGjB4vD,EAAkBz3D,GAAK,KACvBy3D,EAAkBK,GAAK1wC,EAAM0wC,GAC7BL,EAAkB3D,cAAgBA,EAC3B2D,EAGT,SAASc,EAAwBnxC,EAAOowC,EAAM1D,GAC5C,SAAS2D,EAAkBv8D,GACzB,OAAIksB,EAAMjuB,EAAE08D,KAAO36D,EACVu8D,EAAkB/gE,SAGvB0wB,EAAMvuB,EAAEg9D,KAAO36D,EACVu8D,EAAkBnjD,UAD3B,EAKF,IAAIojD,EAAiBC,qBAAqBF,EAAmB3D,GAE7D2D,EAAkB7B,cAAgBxuC,EAAMyuC,GACxC,IAAIh6D,EAAsB,OAAf27D,EAAK57C,GAAG5b,GAAcw3D,EAAK57C,GAAG/f,KAAO27D,EAAK57C,GAerD,OAdA/f,EAAKhD,EAAEg7D,iBAAiB+D,kBAAkB,OAAQF,IAClD77D,EAAK1C,EAAE06D,iBAAiB+D,kBAAkB,WAAYF,IACtD5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,KAAQ,CACN1uD,IAAKowD,4BAA4Bt9D,EAAKhD,IAExC,SAAY,CACVkQ,IAAKowD,4BAA4Bt9D,EAAK1C,IAExC,MAAS,CACP+B,MAAOksB,EAAMvf,MAGjB4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,SAASe,EAAqBpxC,EAAOowC,EAAM1D,GACzC,SAAS2D,EAAkBv8D,GACzB,OAAIksB,EAAMjuB,EAAE08D,KAAO36D,EACVu8D,EAAkB/gE,SAGvB0wB,EAAMruB,EAAE88D,KAAO36D,EACVu8D,EAAkBrH,SAGvBhpC,EAAM9jB,GAAGuyD,KAAO36D,EACXu8D,EAAkB7uD,OAGvBwe,EAAMjH,GAAG01C,KAAO36D,GAAS,kCAAoCA,EACxDu8D,EAAkB+B,YAGvBpyC,EAAM3C,GAAGoxC,KAAO36D,EACXu8D,EAAkBgC,gBAGvBryC,EAAMhD,IAAOgD,EAAMhD,GAAGyxC,KAAO36D,GAAS,kCAAoCA,EAI1EksB,EAAM/C,IAAM+C,EAAM/C,GAAGwxC,KAAO36D,EACvBu8D,EAAkBiC,oBAD3B,EAHSjC,EAAkBkC,YAQ7B,IAAIjC,EAAiBC,qBAAqBF,EAAmB3D,GAEzDj4D,EAAsB,OAAf27D,EAAK57C,GAAG5b,GAAcw3D,EAAK57C,GAAG/f,KAAO27D,EAAK57C,GAwCrD,OAvCA67C,EAAkB7B,cAAgBxuC,EAAMyuC,GACxCh6D,EAAKskB,GAAG0zC,iBAAiB+D,kBAAkB,eAAgBF,IAC3D77D,EAAK4oB,GAAGovC,iBAAiB+D,kBAAkB,kBAAmBF,IAC9D77D,EAAKyH,GAAGuwD,iBAAiB+D,kBAAkB,SAAUF,IACrD77D,EAAK1C,EAAE06D,iBAAiB+D,kBAAkB,WAAYF,IACtD77D,EAAK9C,EAAE86D,iBAAiB+D,kBAAkB,WAAYF,IAElDtwC,EAAMhD,KACRvoB,EAAKuoB,GAAGyvC,iBAAiB+D,kBAAkB,eAAgBF,IAC3D77D,EAAKwoB,GAAGwvC,iBAAiB+D,kBAAkB,kBAAmBF,KAGhE5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,SAAY,CACV1uD,IAAKowD,4BAA4Bt9D,EAAK1C,IAExC,SAAY,CACV4P,IAAKowD,4BAA4Bt9D,EAAK9C,IAExC,OAAU,CACRgQ,IAAKowD,4BAA4Bt9D,EAAKyH,KAExC,YAAe,CACbyF,IAAKowD,4BAA4Bt9D,EAAKskB,KAExC,eAAkB,CAChBpX,IAAKowD,4BAA4Bt9D,EAAK4oB,KAExC,YAAe,CACb1b,IAAKowD,4BAA4Bt9D,EAAKuoB,KAExC,eAAkB,CAChBrb,IAAKowD,4BAA4Bt9D,EAAKwoB,KAExC,MAAS,CACPnpB,MAAOksB,EAAMvf,MAGjB4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,SAASgB,EAAqBrxC,EAAOowC,EAAM1D,GACzC,SAAS2D,EAAkBv8D,GACzB,OAAIksB,EAAMjuB,EAAE08D,KAAO36D,EACVu8D,EAAkB/gE,SAGvB0wB,EAAMruB,EAAE88D,KAAO36D,EACVu8D,EAAkB9yC,UAGvByC,EAAMvuB,EAAEg9D,KAAO36D,GAAmB,SAAVA,GAA8B,0BAAVA,EACvCu8D,EAAkBnjD,UAD3B,EAKF,IAAIojD,EAAiBC,qBAAqBF,EAAmB3D,GAEzDj4D,EAAsB,OAAf27D,EAAK57C,GAAG5b,GAAcw3D,EAAK57C,GAAG/f,KAAO27D,EAAK57C,GAoBrD,OAnBA67C,EAAkB7B,cAAgBxuC,EAAMyuC,GACxCh6D,EAAK1C,EAAE06D,iBAAiB+D,kBAAkB,WAAYF,IACtD77D,EAAKhD,EAAEg7D,iBAAiB+D,kBAAkB,OAAQF,IAClD77D,EAAK9C,EAAE86D,iBAAiB+D,kBAAkB,WAAYF,IACtD5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,SAAY,CACV1uD,IAAKowD,4BAA4Bt9D,EAAK1C,IAExC,UAAa,CACX4P,IAAKowD,4BAA4Bt9D,EAAK9C,IAExC,KAAQ,CACNgQ,IAAKowD,4BAA4Bt9D,EAAKhD,IAExC,MAAS,CACPqC,MAAOksB,EAAMvf,MAGjB4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,SAASiB,EAAwBtxC,EAAOowC,EAAM1D,GAC5C,SAAS2D,EAAkBv8D,GACzB,GAAIksB,EAAMruB,EAAE88D,KAAO36D,GAAS,oBAAsBA,EAChD,OAAOu8D,EAAkBmC,OAI7B,IAAIlC,EAAiBC,qBAAqBF,EAAmB3D,GAEzDj4D,EAAO27D,EAYX,OAXAC,EAAkB7B,cAAgBxuC,EAAMyuC,GACxCh6D,EAAK0tB,GAAGsqC,iBAAiB+D,kBAAkB,SAAUF,IACrD5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,OAAU,CACR1uD,IAAKowD,4BAA4Bt9D,EAAK0tB,KAExC,MAAS,CACPruB,MAAOksB,EAAMvf,MAGjB4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,SAASkB,EAAyBvxC,EAAOowC,EAAM1D,GAC7C,SAAS2D,EAAkBv8D,GACzB,OAAIksB,EAAM9nB,EAAEu2D,KAAO36D,GAAS,WAAaA,EAChCu8D,EAAkB1rC,OAChB3E,EAAMvnB,EAAEg2D,KAAO36D,GAAS,WAAaA,EACvCu8D,EAAkB/9D,YADpB,EAKT,IAAIg+D,EAAiBC,qBAAqBF,EAAmB3D,GAEzDj4D,EAAO27D,EAgBX,OAfAC,EAAkB7B,cAAgBxuC,EAAMyuC,GACxCh6D,EAAKyD,EAAEu0D,iBAAiB+D,kBAAkB,SAAUF,IACpD77D,EAAKgE,EAAEg0D,iBAAiB+D,kBAAkB,SAAUF,IACpD5sD,OAAO+sD,iBAAiBJ,EAAmB,CACzC,OAAU,CACR1uD,IAAKowD,4BAA4Bt9D,EAAKyD,IAExC,OAAU,CACRyJ,IAAKowD,4BAA4Bt9D,EAAKgE,IAExC,MAAS,CACP3E,MAAOksB,EAAMvf,MAGjB4vD,EAAkBK,GAAK1wC,EAAM0wC,GACtBL,EAGT,OAAO,SAAUzlD,EAAQwlD,EAAM1D,GAC7B,IAAI8E,EAEJ,SAASiB,EAAmB3+D,GAC1B,GAAqB,iBAAVA,EAGT,OAAc,KAFdA,OAAkB+/B,IAAV//B,EAAsB,EAAIA,GAGzB44D,EAEA8E,EAAW19D,EAAQ,GAM5B,IAHA,IAAIzF,EAAI,EACJE,EAAMijE,EAAWhjE,OAEdH,EAAIE,GAAK,CACd,GAAIijE,EAAWnjE,GAAGwiE,QAAU/8D,EAC1B,OAAO09D,EAAWnjE,GAGpBA,GAAK,GAQX,OAHAokE,EAAmB/F,cAAgBA,EACnC8E,EAAaV,EAAgBlmD,EAAQwlD,EAAMqC,GAC3CA,EAAmBhB,cAAgBD,EAAWhjE,OACvCikE,GArhBoB,GAyhB3BjmB,wBACK,SAAUt1B,GACf,IAAgBw7C,EAEhB,SAASC,EAAmBhhD,GAC1B,OAAQA,GACN,IAAK,qBACH,OAAOghD,EAAmBC,YAmBhC,OAfAlvD,OAAOukD,eAAe0K,EAAoB,aAAc,CACtDhxD,IAAK,WACHuV,EAAKud,aAAaz/B,WAClB,IAAI69D,EAAc37C,EAAKud,aAAa5H,YAAY56B,EAShD,YArBA6gE,IAcID,IACF37C,EAAKud,aAAa5H,YAAY56B,OAfhC6gE,GAgBEJ,EAAc,IAAIh0D,OAAOm0D,IAEb/+D,MAAQ++D,GAA4B,IAAIn0D,OAAOm0D,IAGtDH,KAGJC,GAIP/mB,yBAA2B,WAC7B,SAAS+c,EAAQ50D,EAAKq8C,GACpB,IAAI2iB,EAAa,IAAI18D,OAWrB,GAVA08D,EAAWl8D,aAGEg9B,IAATuc,EACF2iB,EAAaziE,KAAKg7B,MAAM0X,eAAeC,MAAMtpB,eAAey2B,GAE7C9/C,KAAKg7B,MAAM0X,eAAeC,MAC5B9pB,cAAc45C,GAGzBziE,KAAKg7B,MAAMkR,WAAalsC,KAAKg7B,MAAMkR,UAAUhuC,OAAQ,CACvD,IAAIH,EACAE,EAAM+B,KAAKg7B,MAAMkR,UAAUhuC,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKg7B,MAAMkR,UAAUnuC,GAAG20C,eAAeC,MAAM9pB,cAAc45C,GAG7D,OAAOA,EAAW52D,kBAAkBpI,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,GAGhE,OAAOg/D,EAAW52D,kBAAkBpI,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,GAGhE,SAAS60D,EAAU70D,EAAKq8C,GACtB,IAAI2iB,EAAa,IAAI18D,OAWrB,GAVA08D,EAAWl8D,aAGEg9B,IAATuc,EACF2iB,EAAaziE,KAAKg7B,MAAM0X,eAAeC,MAAMtpB,eAAey2B,GAE7C9/C,KAAKg7B,MAAM0X,eAAeC,MAC5B9pB,cAAc45C,GAGzBziE,KAAKg7B,MAAMkR,WAAalsC,KAAKg7B,MAAMkR,UAAUhuC,OAAQ,CACvD,IAAIH,EACAE,EAAM+B,KAAKg7B,MAAMkR,UAAUhuC,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKg7B,MAAMkR,UAAUnuC,GAAG20C,eAAeC,MAAM9pB,cAAc45C,GAG7D,OAAOA,EAAW92D,aAAalI,GAGjC,OAAOg/D,EAAW92D,aAAalI,GAGjC,SAAS80D,EAAS90D,GAChB,IAAIg/D,EAAa,IAAI18D,OAKrB,GAJA08D,EAAWl8D,QAEXvG,KAAKg7B,MAAM0X,eAAeC,MAAM9pB,cAAc45C,GAE1CziE,KAAKg7B,MAAMkR,WAAalsC,KAAKg7B,MAAMkR,UAAUhuC,OAAQ,CACvD,IAAIH,EACAE,EAAM+B,KAAKg7B,MAAMkR,UAAUhuC,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBiC,KAAKg7B,MAAMkR,UAAUnuC,GAAG20C,eAAeC,MAAM9pB,cAAc45C,GAG7D,OAAOA,EAAW92D,aAAalI,GAGjC,OAAOg/D,EAAW92D,aAAalI,GAGjC,SAASi/D,IACP,MAAO,CAAC,EAAG,EAAG,EAAG,GAGnB,OAAO,SAAU97C,GACf,IAAIw6C,EAUJ,SAASiB,EAAmBhhD,GAC1B,OAAQA,GACN,IAAK,0BACL,IAAK,WACL,KAAK,EACH,OAAOghD,EAAmBvmB,eAE5B,KAAK,EACL,KAAK,EACL,IAAK,YACL,IAAK,YACL,IAAK,uBACH,OAAOslB,EAET,KAAK,EACL,IAAK,qBACL,IAAK,UACL,IAAK,UACH,OAAOiB,EAAmB7K,OAE5B,IAAK,uBACH,OAAO6K,EAAmBpmB,eAIhComB,EAAmBhK,QAAUA,EAC7BgK,EAAmB/J,UAAYA,EAC/B+J,EAAmB7J,OAASH,EAC5BgK,EAAmB9J,SAAWA,EAC9B8J,EAAmBK,YAAcA,EACjCL,EAAmB/tB,iBAAmB1tB,EAAK0tB,iBAAiBpxC,KAAK0jB,GACjEy7C,EAAmBrnC,MAAQpU,EAE3B,IAAI+7C,EAAwBzvD,cAD5BkuD,EAAqBwB,6BAA6Bh8C,EAAK8rB,eAAeC,OACR,eAuC9D,OAtCAv/B,OAAO+sD,iBAAiBkC,EAAoB,CAC1C5G,UAAW,CACTpqD,IAAK,WACH,OAAOuV,EAAKslB,UAAUhuC,SAG1B+f,OAAQ,CACN5M,IAAK,WACH,OAAOuV,EAAKslB,UAAU,GAAGmP,iBAG7Bqd,SAAUxlD,cAAckuD,EAAoB,YAC5C55D,MAAO0L,cAAckuD,EAAoB,SACzCpiE,SAAUkU,cAAckuD,EAAoB,YAC5Cjf,QAASjvC,cAAckuD,EAAoB,WAC3CzI,YAAagK,EACbE,aAAcF,EACdn6D,UAAW,CACT6I,IAAK,WACH,OAAO+vD,IAGX/H,OAAQ,CACNhoD,IAAK,WACH,OAAOuV,EAAKgtB,cAIlByuB,EAAmBS,UAAYl8C,EAAK7K,KAAK2L,GACzC26C,EAAmB5gD,MAAQmF,EAAK7K,KAAKqH,IACrCi/C,EAAmBU,OAASn8C,EAAK7K,KAAK3B,MACtCioD,EAAmBhrC,OAA0B,IAAjBzQ,EAAK7K,KAAKzT,GAAWse,EAAK7K,KAAK7a,EAAI,IAC/DmhE,EAAmB30D,MAAyB,IAAjBkZ,EAAK7K,KAAKzT,GAAWse,EAAK7K,KAAKY,EAAI,IAC9D0lD,EAAmBvK,QAAUlxC,EAAK7K,KAAK4uB,GAAK/jB,EAAKT,KAAKU,WAAWuC,UACjEi5C,EAAmBtK,SAAWnxC,EAAK7K,KAAKiZ,GAAKpO,EAAKT,KAAKU,WAAWuC,UAClEi5C,EAAmB9B,MAAQ35C,EAAK7K,KAAK5L,GACrCkyD,EAAmB9mB,sBA9EnB,SAAgC3d,GAC9BykC,EAAmB7jC,KAAO,IAAIwkC,qBAAqBplC,EAAahX,IA8ElEy7C,EAAmB1mB,yBA3EnB,SAAmCsnB,GACjCZ,EAAmB7K,OAASyL,GA2EvBZ,GAhKoB,GAoK3BxmB,wBACK,SAAU11B,GACf,SAASk8C,EAAmBhhD,GAI1B,IAHA,IAAItjB,EAAI,EACJE,EAAMkoB,EAAK7M,OAAOpb,OAEfH,EAAIE,GAAK,CACd,GAAIkoB,EAAK7M,OAAOvb,GAAGoS,KAAOkR,GAAQ8E,EAAK7M,OAAOvb,GAAGqlB,MAAQ/B,EACvD,OAAO8E,EAAKwN,SAAS51B,GAAGs9C,eAG1Bt9C,GAAK,EAGP,OAAO,KAcT,OAXAqV,OAAOukD,eAAe0K,EAAoB,QAAS,CACjD7+D,MAAO2iB,EAAKpK,KAAK5L,KAEnBkyD,EAAmBt3B,MAAQs3B,EAC3BA,EAAmBa,YAAc,EACjCb,EAAmBhrC,OAASlR,EAAKpK,KAAK7a,GAAKilB,EAAKU,WAAWqmB,SAAShsC,EACpEmhE,EAAmB30D,MAAQyY,EAAKpK,KAAKY,GAAKwJ,EAAKU,WAAWqmB,SAASvwB,EACnE0lD,EAAmBa,YAAc,EACjCb,EAAmBzK,cAAgB,EAAIzxC,EAAKU,WAAWuC,UACvDi5C,EAAmBxK,iBAAmB,EACtCwK,EAAmBc,UAAYh9C,EAAK7M,OAAOpb,OACpCmkE,GAIPO,6BACK,SAAUp6D,GACf,SAAS46D,EAAc/hD,GACrB,OAAQA,GACN,IAAK,QACL,IAAK,QACL,IAAK,aACL,KAAK,EACH,OAAO+hD,EAAc57D,MAEvB,IAAK,WACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,KAAK,GACH,OAAO47D,EAAc1K,SAEvB,IAAK,gBACH,OAAO0K,EAAcC,UAEvB,IAAK,gBACH,OAAOD,EAAcE,UAEvB,IAAK,WACL,IAAK,WACL,IAAK,gBACL,KAAK,EACH,OAAOF,EAAcpkE,SAEvB,IAAK,kBACH,OAAOokE,EAAcG,UAEvB,IAAK,kBACH,OAAOH,EAAcI,UAEvB,IAAK,kBACH,OAAOJ,EAAcK,UAEvB,IAAK,cACL,IAAK,cACL,IAAK,eACL,IAAK,mBACL,KAAK,EACH,OAAOL,EAAczK,YAEvB,IAAK,UACL,IAAK,UACL,KAAK,GACH,OAAOyK,EAAcjhB,SAoB3B,GAhBA/uC,OAAOukD,eAAeyL,EAAe,WAAY,CAC/C/xD,IAAKowD,4BAA4Bj5D,EAAUnH,GAAKmH,EAAUggB,MAE5DpV,OAAOukD,eAAeyL,EAAe,YAAa,CAChD/xD,IAAKowD,4BAA4Bj5D,EAAUggB,IAAMhgB,EAAUnH,KAE7D+R,OAAOukD,eAAeyL,EAAe,YAAa,CAChD/xD,IAAKowD,4BAA4Bj5D,EAAU8f,MAE7ClV,OAAOukD,eAAeyL,EAAe,YAAa,CAChD/xD,IAAKowD,4BAA4Bj5D,EAAU+f,MAE7CnV,OAAOukD,eAAeyL,EAAe,QAAS,CAC5C/xD,IAAKowD,4BAA4Bj5D,EAAUrH,KAGzCqH,EAAU/G,EACZ,IAAIiiE,EAAoBjC,4BAA4Bj5D,EAAU/G,OACzD,CACL,IAIIkiE,EAJAC,EAAMnC,4BAA4Bj5D,EAAU2f,IAE5C07C,EAAMpC,4BAA4Bj5D,EAAU4f,IAI5C5f,EAAU6f,KACZs7C,EAAMlC,4BAA4Bj5D,EAAU6f,KAqChD,OAjCAjV,OAAOukD,eAAeyL,EAAe,WAAY,CAC/C/xD,IAAK,WACH,OAAI7I,EAAU/G,EACLiiE,IAEA,CAACE,IAAOC,IAAOF,EAAMA,IAAQ,MAI1CvwD,OAAOukD,eAAeyL,EAAe,YAAa,CAChD/xD,IAAKowD,4BAA4Bj5D,EAAU2f,MAE7C/U,OAAOukD,eAAeyL,EAAe,YAAa,CAChD/xD,IAAKowD,4BAA4Bj5D,EAAU4f,MAE7ChV,OAAOukD,eAAeyL,EAAe,YAAa,CAChD/xD,IAAKowD,4BAA4Bj5D,EAAU6f,MAE7CjV,OAAOukD,eAAeyL,EAAe,cAAe,CAClD/xD,IAAKowD,4BAA4Bj5D,EAAUb,KAE7CyL,OAAOukD,eAAeyL,EAAe,UAAW,CAC9C/xD,IAAKowD,4BAA4Bj5D,EAAUL,KAE7CiL,OAAOukD,eAAeyL,EAAe,OAAQ,CAC3C/xD,IAAKowD,4BAA4Bj5D,EAAUkgB,MAE7CtV,OAAOukD,eAAeyL,EAAe,WAAY,CAC/C/xD,IAAKowD,4BAA4Bj5D,EAAUmgB,MAE7CvV,OAAOukD,eAAeyL,EAAe,cAAe,CAClD/xD,IAAKowD,4BAA4Bj5D,EAAUigB,MAEtC26C,GAIPtlE,iBAAmB,WACrB,SAAS2uC,EAAoBtmB,GAC3BnmB,KAAK8jE,aAAa9gE,KAAKmjB,GAGzB,OAAO,WACL,SAAS49C,EAAqB1iD,GAI5B,IAHA,IAAItjB,EAAI,EACJE,EAAM+B,KAAK8jE,aAAa5lE,OAErBH,EAAIE,GAAK,CACd,GAAI+B,KAAK8jE,aAAa/lE,GAAGge,MAAQ/b,KAAK8jE,aAAa/lE,GAAGge,KAAK5L,KAAOkR,EAKhE,OAJIrhB,KAAK8jE,aAAa/lE,GAAGkwC,cAAgBjuC,KAAK8jE,aAAa/lE,GAAGge,KAAKwwB,IACjEvsC,KAAK8jE,aAAa/lE,GAAGkwC,aAAajuC,KAAKguC,cAGlChuC,KAAK8jE,aAAa/lE,GAAG69C,cAG9B79C,GAAK,GAOT,OAHAgmE,EAAqBD,aAAe,GACpCC,EAAqB/1B,aAAe,EACpC+1B,EAAqBt3B,oBAAsBA,EACpCs3B,GA1BY,GA8BnBtoB,2BAA6B,WAuC/B,SAASuoB,EAAqBjoD,EAAM4X,EAAUyoC,EAAex1C,GAC3D,SAASq9C,EAAe5iD,GAKtB,IAJA,IAAI4hD,EAAUlnD,EAAK0oC,GACf1mD,EAAI,EACJE,EAAMglE,EAAQ/kE,OAEXH,EAAIE,GAAK,CACd,GAAIojB,IAAS4hD,EAAQllE,GAAGoS,IAAMkR,IAAS4hD,EAAQllE,GAAGqiE,IAAM/+C,IAAS4hD,EAAQllE,GAAGogE,GAC1E,OAAsB,IAAlB8E,EAAQllE,GAAGuK,GACNkxC,EAAez7C,GAEfy7C,EAAez7C,KAI1BA,GAAK,EAGP,MAAM,IAAIwtC,MAKZ,IAGIxtC,EAHAiiE,EAAiBC,qBAAqBgE,EAAgB7H,GAEtD5iB,EAAiB,GAEjBv7C,EAAM8d,EAAK0oC,GAAGvmD,OAElB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACF,IAAlBge,EAAK0oC,GAAG1mD,GAAGuK,GACbkxC,EAAex2C,KAAKghE,EAAqBjoD,EAAK0oC,GAAG1mD,GAAI41B,EAAS6lB,eAAez7C,GAAI41B,EAAS6lB,eAAez7C,GAAGq+D,cAAex1C,IAE3H4yB,EAAex2C,KAAKkhE,EAAqBvwC,EAAS6lB,eAAez7C,GAAIge,EAAK0oC,GAAG1mD,GAAGuK,GAAIse,EAAMo5C,IA0B9F,MAtBgB,uBAAZjkD,EAAKqkD,IACPhtD,OAAOukD,eAAesM,EAAgB,QAAS,CAC7C5yD,IAAK,WACH,OAAOmoC,EAAe,QAK5BpmC,OAAO+sD,iBAAiB8D,EAAgB,CACtC9C,cAAe,CACb9vD,IAAK,WACH,OAAO0K,EAAKylD,KAGhBjB,MAAO,CACL/8D,MAAOuY,EAAK5L,IAEdisD,cAAe,CACb54D,MAAOw8D,KAGXiE,EAAe5K,OAAS4K,EAAeE,QAAsB,IAAZpoD,EAAKqoD,GAC/CH,EAGT,SAASC,EAAqBplE,EAASc,EAAMgnB,EAAMw1C,GACjD,IAAIiI,EAAqB5C,4BAA4B3iE,EAAQ2C,GAc7D,OAJI3C,EAAQ2C,EAAE06D,kBACZr9D,EAAQ2C,EAAE06D,iBAAiB+D,kBAAkB,GAAI9D,IATnD,WACE,OAAa,KAATx8D,EACKgnB,EAAKT,KAAKy1B,cAAc98C,EAAQ2C,EAAEL,GAGpCijE,KAUX,MAtHS,CACP3oB,uBAGF,SAAgC90B,EAAMw1C,GACpC,GAAIx1C,EAAK21B,eAAgB,CACvB,IAEIx+C,EAFAy7C,EAAiB,GACjB8qB,EAAc19C,EAAK7K,KAAK0oC,GAExBxmD,EAAM2oB,EAAK21B,eAAe/C,eAAet7C,OAE7C,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxBy7C,EAAex2C,KAAKghE,EAAqBM,EAAYvmE,GAAI6oB,EAAK21B,eAAe/C,eAAez7C,GAAIq+D,EAAex1C,IAGjH,IAAIq8C,EAAUr8C,EAAK7K,KAAK0oC,IAAM,GAE1Bwf,EAAiB,SAAwB5iD,GAG3C,IAFAtjB,EAAI,EAAGE,EAAMglE,EAAQ/kE,OAEdH,EAAIE,GAAK,CACd,GAAIojB,IAAS4hD,EAAQllE,GAAGoS,IAAMkR,IAAS4hD,EAAQllE,GAAGqiE,IAAM/+C,IAAS4hD,EAAQllE,GAAGogE,GAC1E,OAAO3kB,EAAez7C,GAGxBA,GAAK,IAST,OALAqV,OAAOukD,eAAesM,EAAgB,gBAAiB,CACrD5yD,IAAK,WACH,OAAO4xD,EAAQ/kE,UAGZ+lE,KAnCoB,GA0H7BjB,qBAAuB,WACzB,SAASuB,EAAc/lC,EAAMziB,GAC3B/b,KAAKwkE,MAAQhmC,EACbx+B,KAAKykE,MAAQ1oD,EAGf3I,OAAOukD,eAAe4M,EAAc9hE,UAAW,WAAY,CACzD4O,IAAK,WAKH,OAJIrR,KAAKwkE,MAAMrgE,KAAK4D,GAClB/H,KAAKwkE,MAAMrgE,KAAKO,WAGX1E,KAAKwkE,MAAMrgE,QAGtBiP,OAAOukD,eAAe4M,EAAc9hE,UAAW,cAAe,CAC5D4O,IAAK,WAKH,OAJIrR,KAAKwkE,MAAMxvC,GAAGjtB,GAChB/H,KAAKwkE,MAAMxvC,GAAGtwB,WAGS,IAAlB1E,KAAKwkE,MAAMxvC,GAAG5zB,KAgCzB,OA5BkB,SAAqBw8B,EAAahX,GAClD,IAKI7oB,EAFA2mE,EAAmBpmE,iBAAiBs/B,EAAY8J,SAASxpC,QAGzDD,EAAM2/B,EAAY8J,SAASxpC,OAE/B,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EACxB2mE,EAAiB3mE,GAAK,IAAIwmE,EAAc3mC,EAAY8J,SAAS3pC,GAAI6/B,EAAY3jB,gBAAgBlc,IAe/F,OAZmB,SAAsBsjB,GAGvC,IAFAtjB,EAAI,EAEGA,EAAIE,GAAK,CACd,GAAI2/B,EAAY3jB,gBAAgBlc,GAAGoS,KAAOkR,EACxC,OAAOqjD,EAAiB3mE,GAG1BA,GAAK,KA9Cc,GAwDvB0jE,4BAA8B,WAChC,IAAIkD,EAA6B,CAC/BniD,GAAI,EACJphB,EAAG,EACHslB,KAAM,GAEJk+C,EAA+B,CACjCpiD,GAAI,CAAC,EAAG,EAAG,GACXphB,EAAG,CAAC,EAAG,EAAG,GACVslB,KAAM,GAGR,SAASm+C,EAAiBC,EAAiB3N,EAAUv3D,GACnDwT,OAAOukD,eAAemN,EAAiB,WAAY,CACjDzzD,IAAK,WACH,OAAO8lD,EAAS2C,kBAAkB3C,EAAShxC,KAAK6nB,iBAGpD82B,EAAgB1L,QAAUjC,EAASr0C,UAAYq0C,EAASr0C,UAAU5kB,OAAS,EAE3E4mE,EAAgBx3D,IAAM,SAAU0c,GAC9B,GAAK86C,EAAgB1L,QAEd,CACL,IAAI51D,EAAQ,GAGVA,EADE,MAAO2zD,EAASr0C,UAAUkH,EAAM,GAC1BmtC,EAASr0C,UAAUkH,EAAM,GAAG7oB,EAC3B,MAAOg2D,EAASr0C,UAAUkH,EAAM,GACjCmtC,EAASr0C,UAAUkH,EAAM,GAAGniB,EAE5BsvD,EAASr0C,UAAUkH,EAAM,GAAG7oB,EAGtC,IAAI4jE,EAAqB,mBAATnlE,EAA4B,IAAIw0D,OAAO5wD,GAAS4P,OAAO4xD,OAAO,GAAIxhE,GAGlF,OAFAuhE,EAAUjlB,KAAOqX,EAASr0C,UAAUkH,EAAM,GAAGroB,EAAIw1D,EAASvwC,KAAKT,KAAKU,WAAWuC,UAC/E27C,EAAUvhE,MAAiB,mBAAT5D,EAA4B4D,EAAM,GAAKA,EAClDuhE,EAfP,OAAO,GAmBXD,EAAgBpN,YAAcP,EAAS9tC,eACvCy7C,EAAgBG,YAAc9N,EAAS4E,eACvC+I,EAAgBhM,eAAiB3B,EAAS2C,kBAC1CgL,EAAgB1I,cAAgBjF,EAASiF,cAuD3C,SAAS8I,IACP,OAAOP,EAGT,OAAO,SAAUxN,GACf,OAAKA,EAE4B,mBAAtBA,EAAS50C,SA3DtB,SAAyC40C,GAClCA,GAAc,OAAQA,IACzBA,EAAWwN,GAGb,IAAIj+C,EAAO,EAAIywC,EAASzwC,KACpBtoB,EAAM+4D,EAAS30C,GAAKkE,EACpBo+C,EAAkB,IAAI1Q,OAAOh2D,GAGjC,OAFA0mE,EAAgBthE,MAAQpF,EACxBymE,EAAiBC,EAAiB3N,EAAU,kBACrC,WAaL,OAZIA,EAASpvD,GACXovD,EAASzyD,WAGXtG,EAAM+4D,EAAS/1D,EAAIslB,EAEfo+C,EAAgBthE,QAAUpF,KAC5B0mE,EAAkB,IAAI1Q,OAAOh2D,IACboF,MAAQpF,EACxBymE,EAAiBC,EAAiB3N,EAAU,mBAGvC2N,GAqCAK,CAAgChO,GAjC3C,SAA2CA,GACpCA,GAAc,OAAQA,IACzBA,EAAWyN,GAGb,IAAIl+C,EAAO,EAAIywC,EAASzwC,KACpBzoB,EAAMk5D,EAAS30C,GAAGtkB,OAClB4mE,EAAkB1hE,iBAAiB,UAAWnF,GAC9CmnE,EAAWhiE,iBAAiB,UAAWnF,GAG3C,OAFA6mE,EAAgBthE,MAAQ4hE,EACxBP,EAAiBC,EAAiB3N,EAAU,oBACrC,WACDA,EAASpvD,GACXovD,EAASzyD,WAGX,IAAK,IAAI3G,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAC5B+mE,EAAgB/mE,GAAKqnE,EAASrnE,GAAKo5D,EAAS/1D,EAAErD,GAAK2oB,EAGrD,OAAOo+C,GAeAO,CAAkClO,GAJlC+N,GAzGqB,GAmH5BI,2BAiCAC,oBAWN,SAASC,aAAazpD,EAAM6K,EAAMtiB,GAChCtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASmhE,YAAY1pD,EAAM6K,EAAMtiB,GAC/BtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASohE,YAAY3pD,EAAM6K,EAAMtiB,GAC/BtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASqhE,YAAY5pD,EAAM6K,EAAMtiB,GAC/BtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASshE,iBAAiB7pD,EAAM6K,EAAMtiB,GACpCtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASuhE,gBAAgB9pD,EAAM6K,EAAMtiB,GACnCtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASwhE,eAAe/pD,EAAM6K,EAAMtiB,GAClCtE,KAAKyB,EAAIsgB,gBAAgB8F,QAAQjB,EAAM7K,EAAK3a,EAAG,EAAG,EAAGkD,GAGvD,SAASyhE,gBACP/lE,KAAKyB,EAAI,GAGX,SAAS+6C,kBAET,SAASA,eAAezgC,EAAMjd,GAC5B,IAAImkE,EAAUlnD,EAAK0oC,IAAM,GACzBzkD,KAAKw5C,eAAiB,GACtB,IAAIz7C,EAEAioE,EADA/nE,EAAMglE,EAAQ/kE,OAGlB,IAAKH,EAAI,EAAGA,EAAIE,EAAKF,IACnBioE,EAAa,IAAIC,YAAYhD,EAAQllE,GAAIe,GACzCkB,KAAKw5C,eAAex2C,KAAKgjE,GAI7B,SAASC,YAAYlqD,EAAMjd,GACzBkB,KAAK6qB,KAAK9O,EAAMjd,GA5FZwmE,2BAA6B,WAC/B,SAASY,EAAczkD,EAAO0kD,GAI5B,OAHAnmE,KAAKg6D,UAAYv4C,EAAQ,EACzBzhB,KAAKi6D,UAAYkM,EACjBnmE,KAAKoB,EAAIpB,KAAK0E,WAAa1E,KAAK0mB,KACzB1mB,KAAKoB,EAGd,OAAO,SAAoCwlB,EAAM7K,GAC/C/b,KAAKwiB,GAAK,EACVxiB,KAAKmmB,KAAOS,EAAKT,KACjBnmB,KAAK4mB,KAAOA,EACZ5mB,KAAK0mB,KAAO,IACZ1mB,KAAKuiB,SAAW,eAChBviB,KAAKi6D,UAAYl+C,EAAKykB,WACtBxgC,KAAKk6D,cAAgB,IACrBl6D,KAAK88D,UAAY,CAAC,EAAG,EAAG,GACxB98D,KAAK+H,GAAI,EACT/H,KAAKkL,GAAI,EACTlL,KAAK0E,SAAWsvD,kBAAkBkD,mBAAmBh0D,KAAKlD,KAA1Cg0D,CAAgDptC,EAAM7K,EAAM/b,MAC5EA,KAAKsgC,QAAU4lC,EACflmE,KAAK85D,kBAAoB+B,kBAAkB/B,kBAEvC95D,KAAKmnB,GACPnnB,KAAKqpB,eAAiBwyC,kBAAkBxyC,eAAenmB,KAAKlD,MAE5DA,KAAKqpB,eAAiBwyC,kBAAkBK,qBAAqBh5D,KAAKlD,MAGpEA,KAAKm8D,iBAAmBN,kBAAkBM,kBA7Bb,GAiC7BoJ,oBAAsBvpC,iBAAiBC,oBAE3CD,iBAAiBC,oBAAsB,SAAUrV,EAAM7K,EAAMtY,GAC3D,OAAe,IAAXsY,EAAKpa,EACA,IAAI2jE,2BAA2B1+C,EAAM7K,EAAMtY,GAE3C8hE,oBAAoB3+C,EAAM7K,EAAMtY,IAwD7CmP,gBAAgB,CAAC3O,0BAA2BgiE,aAC5CA,YAAYxjE,UAAUiC,SAAWuhE,YAAYxjE,UAAU+B,yBAEvDyhE,YAAYxjE,UAAUooB,KAAO,SAAU9O,EAAMjd,GAC3CkB,KAAK+b,KAAOA,EACZ/b,KAAKw5C,eAAiB,GACtBx5C,KAAK2E,6BAA6B7F,GAClC,IAAIf,EAEAqoE,EADAnoE,EAAM+B,KAAK+b,KAAK0oC,GAAGvmD,OAEnB+kE,EAAUjjE,KAAK+b,KAAK0oC,GAExB,IAAK1mD,EAAI,EAAGA,EAAIE,EAAKF,GAAK,EAAG,CAG3B,OAFAqoE,EAAM,KAEEnD,EAAQllE,GAAGuK,IACjB,KAAK,EACH89D,EAAM,IAAIZ,aAAavC,EAAQllE,GAAIe,EAASkB,MAC5C,MAEF,KAAK,EACHomE,EAAM,IAAIX,YAAYxC,EAAQllE,GAAIe,EAASkB,MAC3C,MAEF,KAAK,EACHomE,EAAM,IAAIV,YAAYzC,EAAQllE,GAAIe,EAASkB,MAC3C,MAEF,KAAK,EACHomE,EAAM,IAAIT,YAAY1C,EAAQllE,GAAIe,EAASkB,MAC3C,MAEF,KAAK,EACL,KAAK,EACHomE,EAAM,IAAIN,eAAe7C,EAAQllE,GAAIe,EAASkB,MAC9C,MAEF,KAAK,GACHomE,EAAM,IAAIR,iBAAiB3C,EAAQllE,GAAIe,EAASkB,MAChD,MAEF,KAAK,GACHomE,EAAM,IAAIP,gBAAgB5C,EAAQllE,GAAIe,EAASkB,MAC/C,MAEF,KAAK,EACHomE,EAAM,IAAI5pB,eAAeymB,EAAQllE,GAAIe,EAASkB,MAC9C,MAGF,QACEomE,EAAM,IAAIL,cAAc9C,EAAQllE,GAAIe,EAASkB,MAI7ComE,GACFpmE,KAAKw5C,eAAex2C,KAAKojE,KAK/B,IAAIC,OAAS,GACT9Y,WAAY,EAEhB,SAAS+Y,gBAAgB5lD,GACvBtkB,aAAeskB,EAGjB,SAASouC,oBACY,IAAfC,WACF5B,iBAAiB2B,iBAAiBrzC,cAAeszC,WAAYngC,UAE7Du+B,iBAAiB2B,mBAIrB,SAASyX,qBAAqB3nE,GAC5BtC,gBAAkBsC,EAGpB,SAAS4vD,cAAcC,GAKrB,OAJmB,IAAfM,aACFN,EAAOhzC,cAAgBhB,KAAKC,MAAMe,gBAG7B0xC,iBAAiBqB,cAAcC,GAGxC,SAAS+X,WAAWhjE,GAClB,GAAqB,iBAAVA,EACT,OAAQA,GACN,IAAK,OACHjF,qBAAuB,IACvB,MAEF,IAAK,SACHA,qBAAuB,GACvB,MAEF,IAAK,MACHA,qBAAuB,QAGjBkoE,MAAMjjE,IAAUA,EAAQ,IAClCjF,qBAAuBiF,GAIvB7E,cADEJ,sBAAwB,KAO9B,SAASmoE,YACP,MAA4B,oBAAd3qE,UAGhB,SAAS4qE,cAAc/mE,EAAMgnE,GACd,gBAAThnE,IACFrD,kBAAoBqqE,GAIxB,SAASC,WAAWxlD,GAClB,OAAQA,GACN,IAAK,kBACH,OAAOU,gBAET,IAAK,uBACH,OAAOgJ,qBAET,IAAK,SACH,OAAOhlB,QA+Bb,SAAS+gE,aACqB,aAAxBjjE,SAAS02B,aACXwsC,cAAcC,yBACdlY,oBAIJ,SAASmY,iBAAiBC,GAGxB,IAFA,IAAIC,EAAOC,YAAYjsD,MAAM,KAEpBpd,EAAI,EAAGA,EAAIopE,EAAKjpE,OAAQH,IAAK,CACpC,IAAIspE,EAAOF,EAAKppE,GAAGod,MAAM,KAEzB,GAAImsD,mBAAmBD,EAAK,KAAOH,EACjC,OAAOI,mBAAmBD,EAAK,KAzCrChB,OAAO9vC,KAAO42B,iBAAiB52B,KAC/B8vC,OAAOtwC,MAAQo3B,iBAAiBp3B,MAChCswC,OAAOC,gBAAkBA,gBACzBD,OAAOxX,YAAc1B,iBAAiB0B,YACtCwX,OAAO1X,SAAWxB,iBAAiBwB,SACnC0X,OAAOzX,aAAezB,iBAAiByB,aACvCyX,OAAO5wB,KAAO0X,iBAAiB1X,KAC/B4wB,OAAOvX,iBAAmBA,iBAC1BuX,OAAOvY,kBAAoBX,iBAAiBW,kBAC5CuY,OAAO7X,cAAgBA,cACvB6X,OAAOE,qBAAuBA,qBAC9BF,OAAOjX,OAASjC,iBAAiBiC,OAEjCiX,OAAOhX,YAAclC,iBAAiBkC,YACtCgX,OAAO3tC,QAAUy0B,iBAAiBz0B,QAClC2tC,OAAOG,WAAaA,WACpBH,OAAOK,UAAYA,UACnBL,OAAOM,cAAgBA,cACvBN,OAAO9W,OAASpC,iBAAiBoC,OACjC8W,OAAO7W,SAAWrC,iBAAiBqC,SACnC6W,OAAO1vC,UAAYw2B,iBAAiBx2B,UACpC0vC,OAAOvvC,KAAOq2B,iBAAiBr2B,KAC/BuvC,OAAOtvC,OAASo2B,iBAAiBp2B,OACjCsvC,OAAO5W,wBAA0BtC,iBAAiBsC,wBAClD4W,OAAOkB,aAAeV,WACtBR,OAAOmB,QAAU,QAqBjB,IAAIzY,WAAa,mBACbtzC,cAAgB,sBAChBmT,SAAW,GAEf,GAAImgC,WAAY,CACd,IAAI0Y,QAAU5jE,SAASqrD,qBAAqB,UACxCztC,MAAQgmD,QAAQvpE,OAAS,EACzBwpE,SAAWD,QAAQhmD,QAAU,CAC/Bb,IAAK,IAEHwmD,YAAcM,SAAS9mD,IAAIvQ,QAAQ,aAAc,IACrDue,SAAWq4C,iBAAiB,YAG9B,IAAID,wBAA0BW,YAAYb,WAAY,KACtD,OAAOT","file":"ea88be26-70fa6e8ad7f66af59ab9.js","sourcesContent":["require(\"core-js/modules/es.typed-array.set.js\");\n\nrequire(\"core-js/modules/es.typed-array.sort.js\");\n\ntypeof navigator !== \"undefined\" && function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(function () {\n return factory(root);\n });\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory(root);\n } else {\n root.lottie = factory(root);\n root.bodymovin = root.lottie;\n }\n}(window || {}, function (window) {\n \"use strict\";\n\n var svgNS = \"http://www.w3.org/2000/svg\";\n var locationHref = '';\n var initialDefaultFrame = -999999;\n var subframeEnabled = true;\n var expressionsPlugin;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var cachedColors = {};\n var bm_rounder = Math.round;\n var bm_rnd;\n var bm_pow = Math.pow;\n var bm_sqrt = Math.sqrt;\n var bm_abs = Math.abs;\n var bm_floor = Math.floor;\n var bm_max = Math.max;\n var bm_min = Math.min;\n var blitter = 10;\n var BMMath = {};\n\n (function () {\n var propertyNames = [\"abs\", \"acos\", \"acosh\", \"asin\", \"asinh\", \"atan\", \"atanh\", \"atan2\", \"ceil\", \"cbrt\", \"expm1\", \"clz32\", \"cos\", \"cosh\", \"exp\", \"floor\", \"fround\", \"hypot\", \"imul\", \"log\", \"log1p\", \"log2\", \"log10\", \"max\", \"min\", \"pow\", \"random\", \"round\", \"sign\", \"sin\", \"sinh\", \"sqrt\", \"tan\", \"tanh\", \"trunc\", \"E\", \"LN10\", \"LN2\", \"LOG10E\", \"LOG2E\", \"PI\", \"SQRT1_2\", \"SQRT2\"];\n var i,\n len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = typeof val;\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i,\n len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n if (flag) {\n bm_rnd = Math.round;\n } else {\n bm_rnd = function bm_rnd(val) {\n return val;\n };\n }\n }\n\n roundValues(false);\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = element.style.webkitTransformStyle = element.style.mozTransformStyle = \"preserve-3d\";\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n return '__lottie_element_' + ++_count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r, g, b, i, f, p, q, t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b),\n d = max - min,\n h,\n s = max === 0 ? 0 : d / max,\n v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length == 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var len = this._cbs[eventName].length;\n\n for (var i = 0; i < len; i++) {\n this._cbs[eventName][i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0,\n len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0,\n arr = [],\n value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArray(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } else if (type === 'int16') {\n return new Int16Array(len);\n } else if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArray;\n } else {\n return createRegularArray;\n }\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function createNS(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function createTag(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function DynamicPropertyContainer() {}\n\n ;\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); //return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n //NOTE: commenting this condition because TurboFan deoptimizes code when present\n //if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] = _p[15] * p2; //}\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /*return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n };*/\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i,\n len = pts.length,\n retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0],\n p1 = this.props[1],\n p4 = this.props[4],\n p5 = this.props[5],\n p12 = this.props[12],\n p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n //Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /*if(this.isIdentity()) {\r\n return '';\r\n }*/\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n //Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /*if(this.isIdentity()) {\r\n return '';\r\n }*/\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return \"matrix(\" + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + \")\";\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n /*\r\n Copyright 2014 David Bau.\r\n \r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n \r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n \r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n \r\n */\n\n\n (function (pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng.double = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = typeof obj,\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n })([], // pool: entropy pool starts empty\n BMMath // math: package containing random, pow, and seedrandom\n );\n\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === \"function\";\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) this._calcSampleValues();\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n };\n return ob;\n }();\n\n (function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n function extendPrototype(sources, destination) {\n var i,\n len = sources.length,\n sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (sourcePrototype.hasOwnProperty(attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n function bezFunction() {\n var easingFunctions = [];\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2) + Math.pow(z2 - z1, 2));\n var dist2 = Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2) + Math.pow(z3 - z1, 2));\n var dist3 = Math.sqrt(Math.pow(x3 - x2, 2) + Math.pow(y3 - y2, 2) + Math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = defaultCurveSegments;\n var k;\n var i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point = [],\n lastPoint = [];\n var lengthData = bezier_length_pool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bm_pow(perc, 2) * pt4[i] + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bm_sqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segments_length_pool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i,\n len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = defaultCurveSegments;\n var k, i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point,\n lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] != pt2[0] || pt1[1] != pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bm_pow(perc, 2) * (pt2[i] + pt4[i]) + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bm_sqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bm_floor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n } else {\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n //FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u0 = 1;\n var u1 = 1 - t1;\n var ptX = Math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = Math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n function getSegmentArray() {}\n\n var bezier_segment_points = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n startPerc = startPerc < 0 ? 0 : startPerc > 1 ? 1 : startPerc;\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i,\n len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3;\n var t0t0u0_3 = t0 * t0 * u0 * 3;\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1;\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1;\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1;\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1;\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1;\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1;\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezier_segment_points[i * 4] = Math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 1] = Math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 2] = Math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 3] = Math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000;\n }\n\n return bezier_segment_points;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n function dataFunctionManager() {\n //var tCanvasHelper = createTag('canvas').getContext('2d');\n function completeLayers(layers, comps, fontManager) {\n var layerData;\n var animArray, lastFrame;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (!('ks' in layerData) || layerData.completed) {\n continue;\n }\n\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n animArray = [];\n lastFrame = -1;\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps, fontManager);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty == 5) {\n completeText(layerData, fontManager);\n }\n }\n }\n\n function findCompLayers(id, comps) {\n var i = 0,\n len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n if (!comps[i].layers.__used) {\n comps[i].layers.__used = true;\n return comps[i].layers;\n }\n\n return JSON.parse(JSON.stringify(comps[i].layers));\n }\n\n i += 1;\n }\n }\n\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty == 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n /*if(hasPaths){\r\n //mx: distance\r\n //ss: sensitivity\r\n //dc: decay\r\n arr.splice(arr.length-1,0,{\r\n \"ty\": \"ms\",\r\n \"mx\":20,\r\n \"ss\":10,\r\n \"dc\":0.001,\r\n \"maxDist\":200\r\n });\r\n }*/\n\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i,\n len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n } else if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n } else if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n } else if (animVersion[2] > minimum[2]) {\n return false;\n }\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i,\n len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i,\n len = animationData.chars.length,\n j,\n jLen,\n k,\n kLen;\n var pathData, paths;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\n paths = animationData.chars[i].data.shapes[0].it;\n jLen = paths.length;\n\n for (j = 0; j < jLen; j += 1) {\n pathData = paths[j].ks.k;\n\n if (!pathData.__converted) {\n convertPathsToAbsoluteValues(paths[j].ks.k);\n pathData.__converted = true;\n }\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i,\n len = shapes.length;\n var j, jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i,\n len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty == 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i,\n len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData, fontManager) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets, fontManager);\n animationData.__complete = true; //blitAnimation(animationData, animationData.assets, fontManager);\n }\n\n function completeText(data, fontManager) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n var dataManager = dataFunctionManager();\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: []\n };\n var combinedCharacters = []; //Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i,\n len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i,\n len = this.fonts.length;\n var node, w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n continue;\n }\n\n if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(def, fontData) {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; //tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontData.fStyle);\n tHelper.setAttribute('font-weight', fontData.fWeight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n var tCanvasHelper = createTag('canvas').getContext('2d');\n tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily; //tCanvasHelper.font = ' 100px '+ fontData.fFamily;\n\n return tHelper;\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i,\n len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = \"text/css\";\n s.innerText = \"@font-face {\" + \"font-family: \" + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j++) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = \"text/css\";\n l.rel = \"stylesheet\";\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j++) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(defs, fontArr[i]);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n //On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n //Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i,\n len = chars.length;\n var j,\n jLen = this.chars.length,\n found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(char, style, font) {\n var i = 0,\n len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof char === 'string' && char.charCodeAt(0) !== 13 || !char) && console && console.warn) {\n console.warn('Missing character from exported characters list: ', char, style, font);\n }\n\n return emptyChar;\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper; //Canvas version\n //fontData.cache[index] = tHelper.measureText(char).width / 100;\n //SVG version\n //console.log(tHelper.getBBox().width)\n\n if (char === ' ') {\n tHelper.textContent = '|' + char + '|';\n var doubleSize = tHelper.getComputedTextLength();\n tHelper.textContent = '||';\n var singleSize = tHelper.getComputedTextLength();\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n tHelper.textContent = char;\n fontData.cache[index + 1] = tHelper.getComputedTextLength() / 100;\n }\n }\n\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0,\n len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function getCombinedCharacterCodes() {\n return combinedCharacters;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n }; //TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it. \n\n\n Font.getCombinedCharacterCodes = getCombinedCharacterCodes;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var math_abs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1,\n flag = true;\n var keyData, nextKeyData;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n var k, kLen, perc, jLen, j, fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyData.bezierData) {\n keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyData.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyData.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX, outY, inX, inY, keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyData.__fnct) {\n keyData.__fnct = [];\n }\n\n if (!keyData.__fnct[i]) {\n outX = typeof keyData.o.x[i] === 'undefined' ? keyData.o.x[0] : keyData.o.x[i];\n outY = typeof keyData.o.y[i] === 'undefined' ? keyData.o.y[0] : keyData.o.y[i];\n inX = typeof keyData.i.x[i] === 'undefined' ? keyData.i.x[0] : keyData.i.x[i];\n inY = typeof keyData.i.y[i] === 'undefined' ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.__fnct[i] = fnc;\n } else {\n fnc = keyData.__fnct[i];\n }\n } else {\n if (!keyData.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.__fnct = fnc;\n } else {\n fnc = keyData.__fnct;\n }\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } //based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3],\n bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (math_abs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0,\n len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (math_abs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var multipliedValue;\n var i,\n len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i,\n len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n var arr = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i,\n len = data.k.length;\n var s, e, to, ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.keyframes = data.k;\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n function getProp(elem, data, type, mult, container) {\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1,\n v2,\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px,\n py = this.py,\n frameRate;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v1 = v2 = defaultVector;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n } else {\n return;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n //var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); //Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i,\n len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); //sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = point_pool.newElement();\n this.o[i] = point_pool.newElement();\n this.i[i] = point_pool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = point_pool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v,\n outPoints = this.o,\n inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS, keyPropE, isHold, j, k, jLen, kLen, perc, vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /*if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n }*/\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1,\n flag = true,\n keyData,\n nextKeyData;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyData.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n ////\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); ////\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i,\n len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shape_pool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n } else if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue = this.kf ? this.pv : this.data.ks ? this.data.ks.k : this.data.pt.k;\n var i,\n len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n ;\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shape_pool.clone(pathData);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.k = true;\n this.kf = true;\n var i,\n len = this.keyframes[0].s[0].i.length;\n var jLen = this.keyframes[0].s[0].i[0].length;\n this.v = shape_pool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapeProperty(elem, data) {\n /*this.v = {\r\n v: createSizedArray(4),\r\n i: createSizedArray(4),\r\n o: createSizedArray(4),\r\n c: true\r\n };*/\n this.v = shape_pool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n ;\n EllShapeProperty.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0],\n p1 = this.p.v[1],\n s0 = this.s.v[0] / 2,\n s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapeProperty);\n return EllShapeProperty;\n }();\n\n var StarShapeProperty = function () {\n function StarShapeProperty(elem, data) {\n this.v = shape_pool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n ;\n StarShapeProperty.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /*this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts;*/\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i,\n rad,\n roundness,\n perimSegment,\n currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /*this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts;*/\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i,\n currentAng = -Math.PI / 2;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapeProperty);\n return StarShapeProperty;\n }();\n\n var RectShapeProperty = function () {\n function RectShapeProperty(elem, data) {\n this.v = shape_pool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n ;\n RectShapeProperty.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0],\n p1 = this.p.v[1],\n v0 = this.s.v[0] / 2,\n v1 = this.s.v[1] / 2;\n var round = bm_min(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue(frameNum) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapeProperty);\n return RectShapeProperty;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollection_pool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i,\n len = segments.length,\n segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength) {} else {\n var shapeS, shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i,\n len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segments_length_pool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s, e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n s = (this.s.v > 1 ? 1 : this.s.v < 0 ? 0 : this.s.v) + o;\n e = (this.e.v > 1 ? 1 : this.e.v < 0 ? 0 : this.e.v) + o;\n\n if (s === e) {}\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i,\n len = this.shapes.length,\n j,\n jLen;\n var pathsData,\n pathData,\n totalShapeLength,\n totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [],\n shapeData,\n localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s,\n shapeE = e,\n addedLength = 0,\n edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); //if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n //Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n //Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i,\n len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i,\n len = shapeData.shape.paths._length,\n j,\n jLen;\n var addedLength = 0;\n var currentLengthData, segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shape_pool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shape_pool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var cloned_path = shape_pool.newElement();\n cloned_path.c = path.c;\n var i,\n len = path._length;\n var currentV,\n currentI,\n currentO,\n closerV,\n newV,\n newO,\n newI,\n distance,\n newPosPerc,\n index = 0;\n var vX, vY, oX, oY, iX, iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n cloned_path.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /*cloned_path.v[index] = currentV;\r\n cloned_path.o[index] = currentO;\r\n cloned_path.i[index] = currentI;*/\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n vX = iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n vX = oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n cloned_path.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return cloned_path;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData, newPaths, localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length,\n i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var cloned_path = shape_pool.newElement();\n cloned_path.c = path.c;\n var vX, vY, oX, oY, iX, iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return cloned_path;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData, newPaths, localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n var cont = 0;\n\n while (pos > 0) {\n pos -= 1; //this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n\n cont += 1;\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i,\n len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var i,\n len = elements.length;\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i,\n len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items, itemsTransform, i, dir, cont;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n \"a\": {\n \"a\": 0,\n \"ix\": 1,\n \"k\": [0, 0]\n },\n \"nm\": \"Transform\",\n \"o\": {\n \"a\": 0,\n \"ix\": 7,\n \"k\": 100\n },\n \"p\": {\n \"a\": 0,\n \"ix\": 2,\n \"k\": [0, 0]\n },\n \"r\": {\n \"a\": 1,\n \"ix\": 6,\n \"k\": [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n \"s\": {\n \"a\": 0,\n \"ix\": 3,\n \"k\": [100, 100]\n },\n \"sa\": {\n \"a\": 0,\n \"ix\": 5,\n \"k\": 0\n },\n \"sk\": {\n \"a\": 0,\n \"ix\": 4,\n \"k\": 0\n },\n \"ty\": \"tr\"\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n cont += 1;\n }\n\n this._currentCopies = copies; ////\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var k;\n var tMat = this.tr.v.props;\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j, jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shape_pool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i,\n len = data.length || 0,\n prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0,\n len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n != 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0,\n len = this.o.length / 2,\n diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0,\n len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i,\n len = this.data.p * 4;\n var mult, val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i,\n shapeString = \" M\" + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += \" C\" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + \" \" + mat.applyToPointStringified(_i[i][0], _i[i][1]) + \" \" + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += \" C\" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + \" \" + mat.applyToPointStringified(_i[0][0], _i[0][1]) + \" \" + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i,\n len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i,\n len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i,\n len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n } else if (Howl) {\n return new Howl({\n src: [assetPath]\n });\n } else {\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n }\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume(value) {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i,\n len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, original_path) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = original_path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i,\n len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getImage(assetData) {\n var i = 0,\n len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loaded() {\n return this.totalImages === this.loadedAssets;\n }\n\n function setCacheType(type) {\n if (type === 'svg') {\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloader(type) {\n this._imageLoaded = imageLoaded.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.loadedAssets = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ;\n ImagePreloader.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loaded: loaded,\n destroy: destroy,\n getImage: getImage,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloader;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n return ob;\n }();\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var assetLoader = function () {\n function formatResponse(xhr) {\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } else if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } else if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n }\n\n function loadAsset(path, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = \"json\";\n } catch (err) {}\n\n xhr.send();\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState == 4) {\n if (xhr.status == 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n }\n\n return {\n load: loadAsset\n };\n }();\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i,\n len = this._textData.a.length,\n animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: this._textData.p.r,\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var data = this.data;\n var xPos, yPos;\n var i, len;\n var letters = documentData.l,\n pathInfo,\n currentLength,\n currentPoint,\n segmentLength,\n flag,\n pointInd,\n segmentInd,\n prevPoint,\n points,\n segments,\n partialLength,\n totalLength,\n perc,\n tanAngle,\n mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps, animatorSelector;\n var j, jLen;\n var letterValue;\n jLen = animators.length;\n var lastLetter;\n var mult,\n ind = -1,\n offf,\n xPathPos,\n yPathPos;\n var initPathPos = currentLength,\n initSegmentInd = segmentInd,\n initPointInd = pointInd,\n currentLine = -1;\n var elemOpacity;\n var sc, sw, fc, k;\n var lineLength = 0;\n var letterSw,\n letterSc,\n letterFc,\n letterM = '',\n letterP = this.defaultPropsArray,\n letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n lineLength = 0;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterO = letterSw = letterFc = letterM = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an / 200;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true;\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an / 200, -(alignment[1] * yOff / 100));\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an / 200, -alignment[1] * yOff / 100, 0);\n }\n\n lineLength += letters[i].l / 2;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); //This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else {\n if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n }\n\n lineLength += letters[i].l / 2;\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else {\n if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff / 100 + yPos, 0);\n\n if (textData.p.p) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an / 200;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr / 1000 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n //matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an / 200, alignment[1] * yOff / 100, 0);\n xPos += letters[i].l + documentData.tr / 1000 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimator_animatables = animatorProps.a;\n this.a = {\n r: textAnimator_animatables.r ? getProp(elem, textAnimator_animatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimator_animatables.rx ? getProp(elem, textAnimator_animatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimator_animatables.ry ? getProp(elem, textAnimator_animatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimator_animatables.sk ? getProp(elem, textAnimator_animatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimator_animatables.sa ? getProp(elem, textAnimator_animatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimator_animatables.s ? getProp(elem, textAnimator_animatables.s, 1, 0.01, container) : defaultData,\n a: textAnimator_animatables.a ? getProp(elem, textAnimator_animatables.a, 1, 0, container) : defaultData,\n o: textAnimator_animatables.o ? getProp(elem, textAnimator_animatables.o, 0, 0.01, container) : defaultData,\n p: textAnimator_animatables.p ? getProp(elem, textAnimator_animatables.p, 1, 0, container) : defaultData,\n sw: textAnimator_animatables.sw ? getProp(elem, textAnimator_animatables.sw, 0, 0, container) : defaultData,\n sc: textAnimator_animatables.sc ? getProp(elem, textAnimator_animatables.sc, 1, 0, container) : defaultData,\n fc: textAnimator_animatables.fc ? getProp(elem, textAnimator_animatables.fc, 1, 0, container) : defaultData,\n fh: textAnimator_animatables.fh ? getProp(elem, textAnimator_animatables.fh, 0, 0, container) : defaultData,\n fs: textAnimator_animatables.fs ? getProp(elem, textAnimator_animatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimator_animatables.fb ? getProp(elem, textAnimator_animatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimator_animatables.t ? getProp(elem, textAnimator_animatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (data.hasOwnProperty(s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var multipliedValue;\n var i,\n len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n //Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.pv = this.v = this.currentData;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k,\n textDocumentData;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0,\n len = textKeys.length;\n\n while (i <= len - 1) {\n textDocumentData = textKeys[i].s;\n\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var combinedCharacters = FontManager.getCombinedCharacterCodes();\n var charactersArray = [];\n var i = 0,\n len = text.length;\n var charCode;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (combinedCharacters.indexOf(charCode) !== -1) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else {\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n charCode = text.charCodeAt(i + 1);\n\n if (charCode >= 0xDC00 && charCode <= 0xDFFF) {\n charactersArray.push(text.substr(i, 2));\n ++i;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else {\n charactersArray.push(text.charAt(i));\n }\n }\n\n i += 1;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i, len;\n var newLineFlag,\n index = 0,\n val;\n var anchorGrouping = data.m.g;\n var currentSize = 0,\n currentPos = 0,\n currentLine = 0,\n lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j, jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData,\n cLength = 0;\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal',\n fStyle = 'normal';\n len = styles.length;\n var styleName;\n\n for (i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n }\n }\n\n documentData.fWeight = fontData.fWeight || fWeight;\n documentData.fStyle = fStyle;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight, finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n //tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, \"\\r\"); //finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n //var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n //tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a,\n animatorData,\n letterData;\n jLen = animators.length;\n var based,\n ind,\n indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1,\n newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorProp(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorProp.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n } //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\n\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /*ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind;*/\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2;\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorProp);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorProp(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n var pool_factory = function () {\n return function (initialLength, _create, _release, _clone) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n function clone() {\n var clonedElement = newElement();\n return _clone(clonedElement);\n }\n\n return ob;\n };\n }();\n\n var pooling = function () {\n function double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n double: double\n };\n }();\n\n var point_pool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return pool_factory(8, create);\n }();\n\n var shape_pool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length,\n i;\n\n for (i = 0; i < len; i += 1) {\n point_pool.release(shapePath.v[i]);\n point_pool.release(shapePath.i[i]);\n point_pool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i,\n len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n var pt;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = pool_factory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n var shapeCollection_pool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i,\n len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shape_pool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var segments_length_pool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i,\n len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezier_length_pool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return pool_factory(8, create, release);\n }();\n\n var bezier_length_pool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', defaultCurveSegments),\n lengths: createTypedArray('float32', defaultCurveSegments)\n };\n }\n\n return pool_factory(8, create);\n }();\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i,\n len = this.layers.length,\n data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i--) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n }\n\n return this.createNull(layer);\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i,\n len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i,\n len = newLayers.length;\n var j,\n jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id == newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0,\n len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([BaseRenderer], SVGRenderer);\n\n SVGRenderer.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createText = function (data) {\n return new SVGTextElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); //this.layerElement.style.transform = 'translate3d(0,0,0)';\n //this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); //Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute(\"clip-path\", \"url(\" + locationHref + \"#\" + maskId + \")\");\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRenderer.prototype.destroy = function () {\n this.animationItem.wrapper.innerText = '';\n this.layerElement = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRenderer.prototype.updateContainerSize = function () {};\n\n SVGRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty == 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (expressionsPlugin) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0,\n len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRenderer.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i,\n len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i--) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRenderer.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRenderer.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRenderer.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n className: config && config.className || '',\n id: config && config.id || ''\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n }\n\n extendPrototype([BaseRenderer], CanvasRenderer);\n\n CanvasRenderer.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRenderer.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); //this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CanvasRenderer.prototype.ctxOpacity = function (op) {\n /*if(op === 1){\r\n return;\r\n }*/\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n\n this.contextData.cO *= op < 0 ? 0 : op;\n\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n\n CanvasRenderer.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRenderer.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.save();\n }\n\n var props = this.contextData.cTr.props;\n\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n\n var i,\n arr = this.contextData.saved[this.contextData.cArrPos];\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n\n CanvasRenderer.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i,\n arr = this.contextData.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n\n CanvasRenderer.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n this.animationItem.container.style.width = '100%';\n this.animationItem.container.style.height = '100%'; //this.animationItem.container.style.transform = 'translate3d(0,0,0)';\n //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';\n\n this.animationItem.container.style.transformOrigin = this.animationItem.container.style.mozTransformOrigin = this.animationItem.container.style.webkitTransformOrigin = this.animationItem.container.style['-webkit-transform'] = \"0px 0px 0px\";\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRenderer.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth, elementHeight;\n\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n\n var elementRel, animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio == 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /*var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRenderer.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i,\n len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i++) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRenderer.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty == 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /*if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n }*/\n };\n\n CanvasRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRenderer.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRenderer.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRenderer);\n HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRenderer.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement, nextLayer, tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRenderer.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRenderer.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRenderer.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0,\n len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n };\n\n HybridRenderer.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n perspectiveElem.style.width = this.globalData.compSize.w + 'px';\n perspectiveElem.style.height = this.globalData.compSize.h + 'px';\n perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = \"50% 50%\";\n container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n }\n\n perspectiveElem.appendChild(container); //this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRenderer.prototype.build3dContainers = function () {\n var i,\n len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i--) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRenderer.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0,\n len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRenderer.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n resizerElem.style.width = animData.w + 'px';\n resizerElem.style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n resizerElem.style.transformStyle = resizerElem.style.webkitTransformStyle = resizerElem.style.mozTransformStyle = \"flat\";\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n resizerElem.style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; //Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRenderer.prototype.destroy = function () {\n this.animationItem.wrapper.innerText = '';\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i,\n len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRenderer.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx, sy, tx, ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n this.resizerElem.style.transform = this.resizerElem.style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n };\n\n HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRenderer.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRenderer.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRenderer.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i,\n len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n this.threeDElements[i].perspectiveElem.style.perspective = this.threeDElements[i].perspectiveElem.style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n }\n }\n };\n\n HybridRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i,\n len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path,\n properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j, jLen;\n var layerId = createElementID();\n var rect, expansor, feMorph, x;\n var maskType = 'clipPath',\n maskRef = 'clip-path';\n\n for (i = 0; i < len; i++) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode == 's' || properties[i].mode == 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode == 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n continue;\n }\n\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode == 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + locationHref + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, \"url(\" + locationHref + \"#\" + layerId + \")\");\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i,\n len = this.masksProperties.length;\n\n for (i = 0; i < len; i++) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + locationHref + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = \" M\" + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i, len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n //pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += \" C\" + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + \" \" + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + \" \" + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } //pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += \" C\" + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + \" \" + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + \" \" + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } //pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n /**\r\n * @file \r\n * Handles AE's layer parenting property.\r\n *\r\n */\n\n\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function \r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n //element's parent list\n this.hierarchy = []; //if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function \r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function \r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function \r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n /**\r\n * @file \r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function \r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n //set to true when inpoint is rendered\n this._isFirstFrame = false; //list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function \r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n * \r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i,\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } //TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {//this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0,\n len = this.hierarchy.length; //Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i,\n len = transforms.length,\n ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); //ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n //layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; //layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; //list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function \r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * \r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else {\n if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n }\n },\n renderRenderable: function renderRenderable() {\n var i,\n len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /*this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame);*/\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n } else {\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n //If it is exported as hidden (data.hd === true) no need to render\n //If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; //TODO find if there are some cases where _isAnimated can be false. \n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0,\n len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop, j, jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop, j, jLen;\n var mask = createNS(\"mask\");\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + opacityId + ')');\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n var ty = data.ty;\n\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j,\n jLen,\n pathStringTransformed,\n redraw,\n pathNodes,\n l,\n lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths, mat, props, iterations, k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations--;\n k--;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations--;\n k--;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n ;\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v,\n pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops, i, len, stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } //gfill.setAttribute('fy','200');\n\n }\n }\n\n ;\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n ;\n return ob;\n }();\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i,\n len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0,\n len = sequence.transforms.length,\n _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i,\n len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n return '_' + this.transform_key_count++;\n }\n };\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty == 'rc') {\n ty = 5;\n } else if (data.ty == 'el') {\n ty = 6;\n } else if (data.ty == 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i,\n len = styles.length,\n styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0,\n len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); //Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; //If this layer acts as a mask for the following layer\n\n var filId, fil, gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha');\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); ////\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n /*var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix);*/\n ////\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); ////\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } //Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0' + ' L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute(\"mask\", \"url(\" + locationHref + \"#\" + id + \")\");\n }\n };\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i,\n len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0,\n len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i,\n len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.shapeModifiers[i].processShapes(this._isFirstFrame);\n }\n },\n lcEnum: {\n '1': 'butt',\n '2': 'round',\n '3': 'square'\n },\n ljEnum: {\n '1': 'miter',\n '2': 'round',\n '3': 'bevel'\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0,\n len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j,\n jLen = shapes.length;\n var k, kLen, pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /*ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n };*/\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i,\n len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } //This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i,\n len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i,\n len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + \"px\");\n this.innerElem.setAttribute('height', this.assetData.h + \"px\");\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); ////rect.style.width = this.data.sw;\n ////rect.style.height = this.data.sh;\n ////rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this.audio.volume(volumeValue);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : []; //this.layerElement = createNS('g');\n\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\n\n function SVGTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextElement);\n\n SVGTextElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextElement.prototype.buildTextContents = function (textArray) {\n var i = 0,\n len = textArray.length;\n var textContents = [],\n currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextElement.prototype.buildNewText = function () {\n var i, len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight,\n fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapes,\n shapeStr = '',\n singleShape = this.data.singleShape;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i] || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n this.textSpans[i] = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var shapeData, charData;\n\n for (i = 0; i < len; i += 1) {\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i] = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; //xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n\n if (!singleShape) {\n tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\n } else {\n shapeStr += this.createPathShape(matrixHelper, shapes);\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute(\"transform\", \"translate(\" + matrixHelper.props[12] + \",\" + matrixHelper.props[13] + \")\");\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextElement.prototype.sourceRectAtTime = function (time) {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i, len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i];\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n };\n\n function SVGShapeElement(data, globalData, comp) {\n //List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; //List of styles that will be applied to shapes\n\n this.stylesList = []; //List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; //List of items in shape tree\n\n this.itemsData = []; //List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i,\n len = this.shapes.length,\n shape;\n var j,\n jLen = this.stylesList.length;\n var style,\n count = 0;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i,\n len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n //TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var gradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new gradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + locationHref + '#' + elementData.maskId + ')');\n }\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');\n pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0,\n len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j,\n jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i,\n len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i,\n len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n styleOb,\n currentTransform,\n modifier,\n processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty == 'fl' || arr[i].ty == 'st' || arr[i].ty == 'gf' || arr[i].ty == 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n container.appendChild(itemsData[i].style.pElem);\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty == 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n container.appendChild(itemsData[i].gr);\n }\n } else if (arr[i].ty == 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'ms' || arr[i].ty == 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty == 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i,\n len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); //Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i,\n len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function SVGTintFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', 'f1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', 'f2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n\n if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'f2');\n feMerge.appendChild(feMergeNode);\n }\n }\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma;\n var sigmaY = dimensions == 2 ? 0 : sigma;\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + \" \" + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate';\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function SVGStrokeEffect(elem, filterManager) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path, groupPath, i, len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + locationHref + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i,\n len = this.paths.length;\n var mask, path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m === -1) {\n continue;\n }\n\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v / 100;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bm_floor(color[0] * 255) + ',' + bm_floor(color[1] * 255) + ',' + bm_floor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', 'f1');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB); //var opacity = this.filterManager.effectElements[2].p.v/100;\n //this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer');\n var feFuncR, feFuncG, feFuncB;\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n }\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n }\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n }\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n feComponentTransfer = createNS('feComponentTransfer');\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos++] = colorValue;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val, cnt, perc, bezier;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager) {\n var filterSize = filterManager.container.globalData.renderConfig.filterSize;\n filter.setAttribute('x', filterSize.x);\n filter.setAttribute('y', filterSize.y);\n filter.setAttribute('width', filterSize.width);\n filter.setAttribute('height', filterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', 'drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', 'drop_shadow_1');\n feOffset.setAttribute('result', 'drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', 'drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', 'drop_shadow_3');\n feComposite.setAttribute('in2', 'drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', 'drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n this.feMergeNode = feMergeNode;\n this.feMerge = feMerge;\n this.originalNodeAdded = false;\n feMerge.appendChild(feMergeNode);\n }\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n /*if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n }*/\n\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0,\n len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0,\n len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0,\n len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGEffects(elem) {\n var i,\n len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n\n if (elem.data.ef[i].ty === 20) {\n count += 1;\n filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 21) {\n count += 1;\n filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 22) {\n filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 23) {\n count += 1;\n filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 24) {\n count += 1;\n filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 25) {\n count += 1;\n filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 28) {\n //count += 1;\n filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);\n } else if (elem.data.ef[i].ty === 29) {\n count += 1;\n filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i,\n len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i,\n len = 15;\n this.savedOp = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = len;\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n\n function CVBaseElement() {}\n\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getImage(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop, heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function (parentMatrix) {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRenderer, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i,\n len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i,\n len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i,\n len = this.masksProperties.length,\n hasMasks = false;\n\n for (i = 0; i < len; i++) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i,\n len = this.masksProperties.length;\n var pt, pts, data;\n ctx.beginPath();\n\n for (i = 0; i < len; i++) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j,\n jLen = data._length;\n\n for (j = 1; j < jLen; j++) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty == 'fl' || data.ty == 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bm_floor(elementData.c.v[0]) + ',' + bm_floor(elementData.c.v[1]) + ',' + bm_floor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty == 'st' || data.ty == 'gs') {\n styleElem.lc = this.lcEnum[data.lc] || 'round';\n styleElem.lj = this.ljEnum[data.lj] || 'round';\n\n if (data.lj == 1) {\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem.do = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function (data) {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i,\n len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i,\n len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i,\n len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i,\n len = styles.length,\n j,\n jLen;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i,\n len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n processedPos,\n modifier,\n currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty == 'fl' || arr[i].ty == 'st' || arr[i].ty == 'gf' || arr[i].ty == 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty == 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty == 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'pb') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty == 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n var props, groupMatrix;\n\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i,\n len = this.stylesList.length;\n var j,\n jLen,\n k,\n kLen,\n elems,\n nodes,\n renderer = this.globalData.renderer,\n ctx = this.globalData.canvasContext,\n type,\n currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; //Skipping style when\n //Stroke width equals 0\n //style should not be rendered (extra unused repeaters)\n //current opacity equals 0\n //global opacity equals 0\n\n if ((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0) {\n continue;\n }\n\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle.do;\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t == 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t == 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n ctx.stroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n ctx.fill(currentStyle.r);\n }\n\n renderer.restore();\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i,\n len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty == 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty == 'sh' || items[i].ty == 'el' || items[i].ty == 'rc' || items[i].ty == 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty == 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty == 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty == 'gf' || items[i].ty == 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty == 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty == 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i,\n len,\n j,\n jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i,\n len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var grd;\n var pt1 = itemData.s.v,\n pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n var grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i,\n len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem.do = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i, len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; //this.tHelper.font = this.values.fValue;\n\n var charData,\n shapeData,\n k,\n kLen,\n shapes,\n j,\n jLen,\n pathNodes,\n commands,\n pathArr,\n singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen);\n\n for (j = 0; j < jLen; j += 1) {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k == 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[j] = pathArr;\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n var finalMat = this.finalTransform.mat.props;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i, len, j, jLen, k, kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null,\n lastStroke = null,\n lastStrokeW = null,\n commands,\n pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill(); ///ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke(); ///ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n };\n\n function CVEffects() {}\n\n CVEffects.prototype.renderFrame = function () {};\n\n function HBaseElement(data, globalData, comp) {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = this.finalTransform.mat.toCSS();\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.style.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n //If it is exported as hidden (data.hd === true) no need to render\n //If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRenderer, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); //divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n function HShapeElement(data, globalData, comp) {\n //List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; //List of styles that will be applied to shapes\n\n this.stylesList = []; //List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; //List of items in shape tree\n\n this.itemsData = []; //List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); //Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i,\n len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i,\n len = shape._length,\n vPoint,\n oPoint,\n nextIPoint,\n nextVPoint,\n bounds;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bm_min(bounds.left, boundingBox.x);\n boundingBox.xMax = bm_max(bounds.right, boundingBox.xMax);\n boundingBox.y = bm_min(bounds.top, boundingBox.y);\n boundingBox.yMax = bm_max(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b = b | 0;\n a = a | 0;\n c = c | 0;\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n t = -c / b;\n\n if (0 < t && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n\n continue;\n }\n\n b2ac = b * b - 4 * c * a;\n\n if (b2ac < 0) {\n continue;\n }\n\n t1 = (-b + bm_sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bm_sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n\n this.shapeBoundingBox.left = bm_min.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bm_min.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bm_max.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bm_max.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bm_pow(1 - t, 3) * p0[i] + 3 * bm_pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bm_pow(t, 2) * p2[i] + bm_pow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i,\n len = itemsData.length,\n path;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; //var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n this.shapeCont.style.transform = this.shapeCont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight,\n fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i, len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan, tParent, tCont;\n var matrixHelper = this.mHelper;\n var shapes,\n shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else {\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n }\n } //tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n //document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n tCont.style.transform = tCont.style.webkitTransform = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n } else {\n // Todo Benchmark if using this is better than getBBox\n if (this.isMasked && this.finalTransform._matMdf) {\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n }\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i,\n len,\n count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan, textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n continue;\n }\n\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.transform = textSpan.style.webkitTransform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } ////textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + \"px\");\n this.imageElem.setAttribute('height', this.assetData.h + \"px\");\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i,\n len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i,\n len = this.comp.threeDElements.length,\n comp;\n\n for (i = 0; i < len; i += 1) {\n //[perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';\n comp.container.style.transformOrigin = comp.container.style.mozTransformOrigin = comp.container.style.webkitTransformOrigin = \"0px 0px 0px\";\n comp.perspectiveElem.style.transform = comp.perspectiveElem.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i, len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n var mat;\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); //var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var m_rotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var m_rotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(m_rotationY).rotateX(-m_rotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();\n }\n\n if (this.pe._mdf) {\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HEffects() {}\n\n HEffects.prototype.renderFrame = function () {};\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem == element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i,\n len = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < len; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i,\n len = animElements.length;\n\n for (i = 0; i < len; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && len === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; //moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = subframeEnabled;\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';\n\n switch (animType) {\n case 'canvas':\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\n break;\n\n case 'svg':\n this.renderer = new SVGRenderer(this, params.rendererSettings);\n break;\n\n default:\n this.renderer = new HybridRenderer(this, params.rendererSettings);\n break;\n }\n\n this.imagePreloader.setCacheType(animType);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = params.hasOwnProperty('autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.configAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n assetLoader.load(params.path, this.configAnimation.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n }\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n var params = {\n wrapper: wrapper,\n animationData: animationData ? typeof animationData === \"object\" ? animationData : JSON.parse(animationData) : null\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === '') {} else if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else {\n params.loop = parseInt(loop);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== \"false\";\n params.name = wrapperAttributes.getNamedItem('data-name') ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i,\n len = layers.length;\n var newLayers = data.layers;\n var j,\n jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id == newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\n this.renderer.includeLayers(data.layers);\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n assetLoader.load(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loaded() || this.renderer.rendererType !== 'canvas')) {\n this.isLoaded = true;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function () {\n this.renderer.updateContainerSize();\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame;\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false) {\n return;\n }\n\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name != name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name != name) {\n return;\n }\n\n if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n this.goToAndStop(value, isFrame, name);\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.timeCompleted = this.totalFrames = arr[0] - arr[1];\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.timeCompleted = this.totalFrames = arr[1] - arr[0];\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.timeCompleted = this.totalFrames = end - init;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (typeof arr[0] === 'object') {\n var i,\n len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]); //this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name != name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;\n this.renderer = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0,\n len = this.assets.length;\n\n while (i < len) {\n if (id == this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i,\n len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n expressionsPlugin = Expressions;\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = typeof a;\n\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i,\n lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, .833, .833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, .667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(.33, 0, .667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = a[0] + b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0,\n lenA = a.length,\n lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = a[0] - b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0,\n lenA = a.length,\n lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i, len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i, len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i,\n len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r, g, b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n } else if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i,\n len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i,\n len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i,\n len = points.length;\n var path = shape_pool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0],\n inVertexPoint,\n outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform, $bm_transform, content, effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn, loop_in, loopOut, loop_out, smooth;\n var toWorld, fromWorld, fromComp, toComp, fromCompToSurface, position, rotation, anchorPoint, scale, thisLayer, thisComp, mask, valueAtTime, velocityAtTime;\n var __expression_functions = [];\n\n if (data.xf) {\n var i,\n len = data.xf.length;\n\n for (i = 0; i < len; i += 1) {\n __expression_functions[i] = eval('(function(){ return ' + data.xf[i] + '}())');\n }\n }\n\n var scoped_bm_rt;\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}' + ']')[0];\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var i,\n j,\n len = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', len);\n freq = 5;\n var iterations = Math.floor(time * freq);\n i = 0;\n j = 0;\n\n while (i < iterations) {\n //var rnd = BMMath.random();\n for (j = 0; j < len; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); //addedAmps[j] += -amp + amp*2*rnd;\n }\n\n i += 1;\n } //var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', len);\n\n if (len > 1) {\n for (j = 0; j < len; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; //arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n //arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n } else {\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n t = t > 1 ? 1 : t < 0 ? 0 : t;\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var i,\n len = val1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = (val2[i] - val1[i]) * mult + val1[i];\n }\n\n return arr;\n } else {\n return (val2 - val1) * mult + val1;\n }\n }\n\n function nearestKey(time) {\n var i,\n len = data.k.length,\n index,\n keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (i = 0; i < len - 1; i += 1) {\n if (time === data.k[i].t) {\n index = i + 1;\n keyTime = data.k[i].t;\n break;\n } else if (time > data.k[i].t && time < data.k[i + 1].t) {\n if (time - data.k[i].t > data.k[i + 1].t - time) {\n index = i + 2;\n keyTime = data.k[i + 1].t;\n } else {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n }\n }\n\n var ob = {};\n ob.index = index;\n ob.time = keyTime / elem.comp.globalData.frameRate;\n return ob;\n }\n\n function key(ind) {\n var ob, i, len;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n ob = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = data.k[ind].hasOwnProperty('s') ? data.k[ind].s : data.k[ind - 1].e;\n len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n ob[i] = arr[i];\n ob.value[i] = arr[i];\n }\n\n return ob;\n }\n\n function framesToTime(frames, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return frames / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time, velocity, value, text, textIndex, textTotal, selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (_needsRandom) {\n seedRandom(randSeed);\n }\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface(\"ADBE Transform Group\");\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /*position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale;*/\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer(\"ADBE Root Vectors Group\");\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; //TODO: Check if it's possible to return on ShapeInterface the .v value\n\n if (scoped_bm_rt.propType === \"shape\") {\n scoped_bm_rt = scoped_bm_rt.v;\n } // globalData.popExpression();\n\n\n return scoped_bm_rt;\n }\n\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n return ob;\n }();\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; //frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n //removing frameRate\n //if needed, don't add it here\n //velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n (function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n } else {\n var cycleDuration, firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i, len, ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005;\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n }\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n } else {\n var cycleDuration, lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i, len, ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n }\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0,\n j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } ////\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0], scale[1], scale[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew, skewAxis);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ.v).rotateY(rotationY.v).rotateX(rotationX.v).rotateZ(-orientation[2]).rotateY(orientation[1]).rotateX(orientation[0]);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX, positionY, -positionZ);\n } else {\n matrix.translate(positionX, positionY, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0], position[1], -position[2]);\n }\n\n return matrix; ////\n }\n\n function getTransformStaticValueAtTime(time) {}\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); //prop.getVelocityAtTime = getVelocityAtTime;\n //prop.loopOut = loopOut;\n //prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n //For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shape_pool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i,\n len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0,\n len = lengths.length;\n var j = 0,\n jLen;\n var accumulatedLength = 0,\n pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n //perc doesn't use triple equality because it can be a Number object as well as a primitive.\n perc = perc == 1 ? this.v.c ? 0 : 0.999 : perc;\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n })();\n\n (function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n })();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'path': {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n 'shape': {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n '_name': {\n value: shape.nm\n },\n 'ix': {\n value: shape.ix\n },\n 'propertyIndex': {\n value: shape.ix\n },\n 'mn': {\n value: shape.mn\n },\n 'propertyGroup': {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n } else {\n return parentPropertyGroup(val - 1);\n }\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n } else {\n return propertyGroup(--val);\n }\n }\n\n return _propertyGroup;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i,\n len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty == 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'tr') {//arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty == 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty == 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0,\n len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n //Not necessary for now. Keeping them here in case a new case appears\n //case 'ADBE Vector Transform Group':\n //case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); //interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n }\n\n Object.defineProperties(interfaceFunction, {\n 'color': {\n get: ExpressionPropertyInterface(view.c)\n },\n 'opacity': {\n get: ExpressionPropertyInterface(view.o)\n },\n '_name': {\n value: shape.nm\n },\n 'mn': {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i,\n len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n } else if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n }\n\n Object.defineProperties(interfaceFunction, {\n 'color': {\n get: ExpressionPropertyInterface(view.c)\n },\n 'opacity': {\n get: ExpressionPropertyInterface(view.o)\n },\n 'strokeWidth': {\n get: ExpressionPropertyInterface(view.w)\n },\n 'dash': {\n get: function get() {\n return dashOb;\n }\n },\n '_name': {\n value: shape.nm\n },\n 'mn': {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n 'start': {\n get: ExpressionPropertyInterface(view.s)\n },\n 'end': {\n get: ExpressionPropertyInterface(view.e)\n },\n 'offset': {\n get: ExpressionPropertyInterface(view.o)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'opacity': {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n 'position': {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n 'anchorPoint': {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n 'scale': {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n 'rotation': {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n 'skew': {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n 'skewAxis': {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'size': {\n get: ExpressionPropertyInterface(prop.s)\n },\n 'position': {\n get: ExpressionPropertyInterface(prop.p)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || 'ADBE Vector Star Outer Radius' === value) {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || 'ADBE Vector Star Inner Radius' === value)) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n 'position': {\n get: ExpressionPropertyInterface(prop.p)\n },\n 'rotation': {\n get: ExpressionPropertyInterface(prop.r)\n },\n 'points': {\n get: ExpressionPropertyInterface(prop.pt)\n },\n 'outerRadius': {\n get: ExpressionPropertyInterface(prop.or)\n },\n 'outerRoundness': {\n get: ExpressionPropertyInterface(prop.os)\n },\n 'innerRadius': {\n get: ExpressionPropertyInterface(prop.ir)\n },\n 'innerRoundness': {\n get: ExpressionPropertyInterface(prop.is)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'position': {\n get: ExpressionPropertyInterface(prop.p)\n },\n 'roundness': {\n get: ExpressionPropertyInterface(prop.r)\n },\n 'size': {\n get: ExpressionPropertyInterface(prop.s)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || 'Round Corners 1' === value) {\n return interfaceFunction.radius;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'radius': {\n get: ExpressionPropertyInterface(prop.rd)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || 'Copies' === value) {\n return interfaceFunction.copies;\n } else if (shape.o.ix === value || 'Offset' === value) {\n return interfaceFunction.offset;\n }\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n 'copies': {\n get: ExpressionPropertyInterface(prop.c)\n },\n 'offset': {\n get: ExpressionPropertyInterface(prop.o)\n },\n '_name': {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n } else {\n return interfaces[value - 1];\n }\n } else {\n var i = 0,\n len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n }\n }\n\n _interfaceFunction.propertyGroup = propertyGroup;\n interfaces = iterateElements(shapes, view, _interfaceFunction);\n _interfaceFunction.numProperties = interfaces.length;\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _prevValue, _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Text Document\":\n return _thisLayerFunction.sourceText;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, \"sourceText\", {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue ? stringValue : new String(stringValue);\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function toWorld(arr, time) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n var transformMat;\n\n if (time !== undefined) {\n toWorldMat = this._elem.finalTransform.mProp.getValueAtTime(time);\n } else {\n transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n return toWorldMat.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n var transformMat;\n\n if (time !== undefined) {\n toWorldMat = this._elem.finalTransform.mProp.getValueAtTime(time);\n } else {\n transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i,\n len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Root Vectors Group\":\n case \"Contents\":\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case \"Transform\":\n case \"transform\":\n case \"ADBE Transform Group\":\n return transformInterface;\n\n case 4:\n case \"ADBE Effect Parade\":\n case \"effects\":\n case \"Effects\":\n return _thisLayerFunction.effect;\n\n case \"ADBE Text Properties\":\n return _thisLayerFunction.textInterface;\n }\n }\n\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0,\n len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; //return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, \"_name\", {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case \"scale\":\n case \"Scale\":\n case \"ADBE Scale\":\n case 6:\n return _thisFunction.scale;\n\n case \"rotation\":\n case \"Rotation\":\n case \"ADBE Rotation\":\n case \"ADBE Rotate Z\":\n case 10:\n return _thisFunction.rotation;\n\n case \"ADBE Rotate X\":\n return _thisFunction.xRotation;\n\n case \"ADBE Rotate Y\":\n return _thisFunction.yRotation;\n\n case \"position\":\n case \"Position\":\n case \"ADBE Position\":\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case \"anchorPoint\":\n case \"AnchorPoint\":\n case \"Anchor Point\":\n case \"ADBE AnchorPoint\":\n case 1:\n return _thisFunction.anchorPoint;\n\n case \"opacity\":\n case \"Opacity\":\n case 11:\n return _thisFunction.opacity;\n }\n }\n\n Object.defineProperty(_thisFunction, \"rotation\", {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, \"zRotation\", {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, \"xRotation\", {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, \"yRotation\", {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, \"scale\", {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n if (transform.p) {\n var _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n var _px = ExpressionPropertyInterface(transform.px);\n\n var _py = ExpressionPropertyInterface(transform.py);\n\n var _pz;\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, \"position\", {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n } else {\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n }\n });\n Object.defineProperty(_thisFunction, \"xPosition\", {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, \"yPosition\", {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, \"zPosition\", {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, \"anchorPoint\", {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, \"opacity\", {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, \"skew\", {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, \"skewAxis\", {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, \"orientation\", {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0,\n len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i,\n len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0, len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef,\n i = 0,\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n } else {\n return effectElements[i]();\n }\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n ;\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i,\n len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.active = groupInterface.enabled = data.en !== 0;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager, elem) {\n var _maskManager = maskManager;\n var _elem = elem;\n\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i,\n len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n } else {\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value);\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n }\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val);\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val);\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n expressionValue[i] = arrValue[i] = property.v[i] * mult;\n }\n\n return expressionValue;\n };\n } //TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n } else if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n } else {\n return MultidimensionalPropertyInterface(property);\n }\n };\n }();\n\n (function () {\n var TextExpressionSelectorProp = function () {\n function getValueProxy(index, total) {\n this.textIndex = index + 1;\n this.textTotal = total;\n this.v = this.getValue() * this.mult;\n return this.v;\n }\n\n return function TextExpressionSelectorProp(elem, data) {\n this.pv = 1;\n this.comp = elem.comp;\n this.elem = elem;\n this.mult = 0.01;\n this.propType = 'textSelector';\n this.textTotal = data.totalChars;\n this.selectorValue = 100;\n this.lastValue = [1, 1, 1];\n this.k = true;\n this.x = true;\n this.getValue = ExpressionManager.initiateExpression.bind(this)(elem, data, this);\n this.getMult = getValueProxy;\n this.getVelocityAtTime = expressionHelpers.getVelocityAtTime;\n\n if (this.kf) {\n this.getValueAtTime = expressionHelpers.getValueAtTime.bind(this);\n } else {\n this.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(this);\n }\n\n this.setGroupProperty = expressionHelpers.setGroupProperty;\n };\n }();\n\n var propertyGetTextProp = TextSelectorProp.getTextSelectorProp;\n\n TextSelectorProp.getTextSelectorProp = function (elem, data, arr) {\n if (data.t === 1) {\n return new TextExpressionSelectorProp(elem, data, arr);\n } else {\n return propertyGetTextProp(elem, data, arr);\n }\n };\n })();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager() {}\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i,\n len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i++) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i,\n len = this.data.ef.length;\n var eff,\n effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n //case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n var lottie = {};\n var _isFrozen = false;\n\n function setLocationHref(href) {\n locationHref = href;\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n subframeEnabled = flag;\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n defaultCurveSegments = 200;\n break;\n\n case 'medium':\n defaultCurveSegments = 50;\n break;\n\n case 'low':\n defaultCurveSegments = 10;\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n defaultCurveSegments = value;\n }\n\n if (defaultCurveSegments >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n expressionsPlugin = plugin;\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case \"propertyFactory\":\n return PropertyFactory;\n\n case \"shapePropertyFactory\":\n return ShapePropertyFactory;\n\n case \"matrix\":\n return Matrix;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocationHref;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; //lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.__getFactory = getFactory;\n lottie.version = '5.7.3';\n\n function checkReady() {\n if (document.readyState === \"complete\") {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n }\n\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n var queryString = myScript.src.replace(/^[^\\?]+\\??/, '');\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100);\n return lottie;\n});"],"sourceRoot":""}