{"version":3,"file":"index.umd.cjs","names":["namespaces","namespace","selector","Selection","array","empty","array","selectorAll","Selection","filter","matcher","Selection","Selection","sparse","constant","Selection","Selection","sparse","Selection","ascending","Selection","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","namespace","styleRemove","styleConstant","styleFunction","defaultView","textConstant","textFunction","creator","creator","selector","parseTypenames","defaultView","root","Selection","selection_select","selection_selectAll","selection_selectChild","selection_selectChildren","selection_filter","selection_data","selection_enter","selection_exit","selection_join","selection_merge","selection_order","selection_sort","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","selection_attr","selection_style","selection_property","selection_classed","selection_text","selection_html","selection_raise","selection_lower","selection_append","selection_insert","selection_remove","selection_clone","selection_datum","selection_on","selection_dispatch","selection_iterator","Selection","root","select","creator","sourceEvent","sourceEvent","pointer","Selection","array","root","get","set","now","set","timeout","degrees","t0","t1","lab","degrees","degrees","linear","constant","rgb","colorRgb","basis","basisClosed","numberArray","value","value","zero","number","constant","number","rgb","string","date","numberArray","object","identity","identity","decompose","number","hsl","colorHsl","color","color","colorLab","hcl","colorHcl","color","cubehelix","colorCubehelix","color","value","set","interpolateNumber","interpolateRgb","interpolateString","namespace","interpolateTransform","interpolate","namespace","matcher","Transition","Transition","set","selector","Transition","selectorAll","Transition","Selection","style","set","interpolateTransform","interpolate","Transition","set","Transition","transition_select","transition_selectAll","transition_filter","transition_merge","transition_selection","transition_transition","transition_on","transition_attr","transition_attrTween","transition_style","transition_styleTween","transition_text","transition_textTween","transition_remove","transition_tween","transition_delay","transition_duration","transition_ease","transition_easeVarying","transition_end","easeCubicInOut","Transition","now","selection_interrupt","selection_transition","Transition","number","number","length","empty","identity","identity","flatten","map","identity","sturges","bisect","number","pad","formatYear","dsv","dsv","formatDecimal","formatRounded","formatPrefixAuto","map","identity","formatGroup","formatNumerals","formatTypes","formatTrim","exponent","locale","formatLocale","exponent","exponent","exponent","defaultLocale","classID2Meta","hashSum","d3Select","isArray","d3Descending","d3Ascending","d3TimeFormat","d3Min","d3Max","d3Mean","d3Median","d3Variance","d3Deviation","d3Sum","Utility.checksum","format","d3TimeFormat","d3Format","d3CsvFormatRows","Utility.removeHTMLFromString","d3CsvParse","d3TsvFormatRows","d3TsvParse","d3TimeParse","d3Select","d3Select","d3CubicInOut","rgb","d3Rgb","d3Select","Utility.faChar","Utility.faKeys","index","sequence","number","identity","constant","bisect","copy","transformer","interpolateValue","interpolateNumber","number","interpolateRound","precisionPrefix","precisionRound","precisionFixed","linear","copy","number","nice","nice","transformer","copy","transformer","copy","identity","transformer","copy","number","quantile","threshold","bisect","bisect","bisect","nice","copy","timeWeek","timeSecond","utcWeek","utcSecond","transformer","identity","interpolate","interpolateRound","identity","bisect","identity","interpolate","interpolateRound","colors","colors","colors","colors","colors","colors","colors","colors","colors","colors","colors","interpolateRgbBasis","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","scheme","colors","ramp","interpolateCubehelixLong","interpolateCubehelixLong","c","colors","d3SchemeCategory10","colorbrewer","d3InterpolateViridis","d3InterpolateMagma","d3InterpolateInferno","d3InterpolatePlasma","d3ScaleOrdinal","ordinal","d3ScaleLinear","d3InterpolateLab","d3ScaleQuantize","d3ScaleSequential","rgb","d3RGB","d3Select","d3Local","d3Local","Image","d3Select","nopropagation","select","noevent","defaultFilter","defaultTouchable","pointer","constant","d3Select","d3Dispatch","d3Drag","identity","nopropagation","defaultFilter","defaultExtent","identity","defaultTouchable","interpolateZoom","select","pointer","constant","d3Zoom","d3ZoomIdentity","d3Pointer","local","interpolate","select","pointer","min","max","constant","factory","global","exports","__defProp","target","name","all","no_symbols","PKG_NAME","PKG_VERSION","BUILD_VERSION","namespaces_default","prefix","i","document","uri","fullname","selector","select","groups","m","subgroups","j","group","n","subgroup","node","subnode","x","parents","find","match","filter$1","update","parent","datum","child","next","groupLength","dataLength","data","nodeByKeyValue","keyValues","keyValue","key","bind","value","enter","exit","enterGroup","updateGroup","i0","i1","previous","onenter","onupdate","onexit","selection","context","groups0","groups1","m0","m1","merges","group0","group1","merge","compare","a","b","sortgroups","sortgroup","callback","size","v","priority","string","list","names","create","before","clone","deep","listener","event","typenames","t","on","typename","o","options","window","type","params","root$1","nextId","id","sourceEvent","svg","point","rect","events","noop","_","types","T","copy","args","that","c","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","f","time","delay","e","now","t0","t1","t2","elapsed","emptyOn","emptyTween","schedules","timing","schedule","tween","self","active","empty","prototype","constructor","definition","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","channels","l","format","r","g","opacity","k","s","h","min","max","m2","radians","degrees$1","K","Xn","Yn","Zn","t0$1","t1$1","t3","y","z","A","B","C","D","E","ED","EB","BC_DA","bl","cosh","sinh","v0","v1","v2","v3","values","constant_default$3","d","rgb_default","color","start","end","colors","spline","rgbBasis","rgbBasisClosed","nb","na","reA","reB","bi","am","bm","bs","q","range","degrees","identity$4","scaleX","scaleY","skewX","svgNode","xa","xb","ya","yb","pxComma","pxParen","degParen","parse","interpolateTransformCss","interpolateTransformSvg","epsilon2","zoom_default","ux0","p0","uy0","w0","ux1","p1","uy1","w1","dx","dy","d2","S","rho","d1","b0","rho4","rho2","b1","r0","coshr0","u","_1","_2","hue","hsl_default","hslLong","hcl_default","hclLong","cubehelix_default","cubehelixLong","interpolate","I","samples","interpolator","tween0","tween1","transition","string00","string1","value1","interpolate0","string0","string10","on0","on1","sit","children","inherit","Selection$1","listener0","remove","id0","id1","cancel","reject","resolve","selection_prototype","exponent","polyIn","polyOut","polyInOut","pi","halfPi","b2","b3","b4","b5","b6","b7","b8","b9","overshoot","backIn","backOut","backInOut","tau","amplitude","period","elasticIn","p","elasticOut","elasticInOut","defaultTiming","root","compare1","lo","hi","mid","valueof","index","ascendingBisect","bisectRight","bisectLeft","bisectCenter","length","blur","temp","blur2","blurImage","rx","ry","width","height","blurx","blury","w","radius","stop","step","radius0","sum","s0","s1","count","array","reduce","lengths","product","delta","mean","adder","entries","_key","_intern","keys","keyof","map","source","F","ak","av","bk","bv","slice","e10","e5","e2","power","error","factor","i2","inc","reverse","ticks","prestep","domain","threshold","xz","x0","x1","tz","tn","bins","bin","maxIndex","minIndex","left","right","sd","newLeft","newRight","defined","maxValue","element","value0","numbers","arrays","counts","modeValue","modeCount","pairs","first","pairof","V","R","minValue","shuffle_default","random","matrix","transpose","row","test","mapper","reducer","iterator","done","others","other","set","io","ivalue","EOL","EOF","QUOTE","NEWLINE","RETURN","columns","object","columnSet","rows","column","year","hours","date","minutes","seconds","milliseconds","reFormat","delimiter","DELIMITER","convert","text","N","eof","eol","csv","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","csvFormatRow","csvFormatValue","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","tsvFormatRow","tsvFormatValue","number","fixtz","coefficient","grouping","thousands","numerals","re","specifier","prefixExponent","formatTypes_default","\"b\"","\"c\"","\"d\"","\"e\"","\"f\"","\"g\"","\"o\"","\"p\"","\"r\"","\"s\"","\"X\"","\"x\"","map$1","prefixes","locale","currencyPrefix","currencySuffix","decimal","percent","minus","nan","fill","align","sign","symbol","zero","comma","precision","trim","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","locale$1","formatPrefix","floori","offseti","d0","field","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","timeMinute","utcMinute","timeHour","utcHour","timeDay","utcDay","unixDay","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","utcMonth","timeYear","utcYear","tickIntervals","minute","hour","day","week","month","utcTicks","utcTickInterval","timeTicks","timeTickInterval","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","\"a\"","\"A\"","\"B\"","\"G\"","\"H\"","\"I\"","\"j\"","\"L\"","\"m\"","\"M\"","\"q\"","\"Q\"","\"S\"","\"u\"","\"U\"","\"V\"","\"w\"","\"W\"","\"y\"","\"Y\"","\"Z\"","utcFormats","parses","pad","pads","Z","\"_\"","numberRe","percentRe","requoteRe","dow","timeFormat","timeParse","utcFormat","utcParse","isoSpecifier","formatIso","parseIso","baseCtors","baseCtor","descriptor","derivedCtor","_hpcc_js_util","mixinClass","methodID","origMethod","newMethod","arrA","arrB","dateA","dateB","regexpA","regexpB","__meta_","__private_","__prop_","__prop_data_","__default_","obj","defaultValue","ext","description","proxy","method","meta","propExtID","PropertyExt","protoStack","__proto__","item","includePrivate","expandProxies","selfProp","visitor","publishItem","widget","widgets","filter","retVal","prop","val","serialization","props","currVal","privateArr","exceptionsArr","isPrivateItem","isException","WidgetType","propID","func","newVal","oldVal","idx","monitor","monitor2","theme","clsArr","paramName","param","ignore","more","properties","eventID","origFunc","stopPropagation","arg","retVal2","Utility_exports","Selection","sre","dre","ore","sortCaseSensitive","xN","yN","xD","yD","oFxNcL","oFyNcL","order","cLoc","numS","itemArray","evt","widgetElement","skipBringToTop","elements","selected","domNode","wasSelected","isSelected","state","perf","faCharMap","faClassMap","defChar","_removeHTMLFromStringDiv","div","str","nargs","nargs2","tpl","matches","tplField","result","sortBy","lVal","rVal","url","paramParts","subjectString","pos","searchStr","lastIndex","tagName","selectors","refIdx","referenceNode","\"msSaveBlob\"","blob","filename","currentdate","mimeType","classID","parts","classParts","chk","dest","scope","propParts","testScope","cache","_dummyArgs","execAsap","_sp","versionString","g_fontSizeContext","g_fontSizeContextCache","_text","hash","bold","fontSize","fontName","textMeasurement","line","g_fontCanvas","g_fontRectContextCache","font","canvas","top","bottom","nextSibling","Database_exports","Field","Grid","LegacyView","d3Aggr","accessor","depth","nativeMap","lastFoundFormat","format$1","fieldsArr","asDefault","dataChecksum","fields","ignoreCase","cell","col","mappedColumns","hasRollup","mappedColumn","mapping","param1","param2","leaves","columnIndicies","rollupFunc","aggrType","colIdx","aggrColumn","deltaIdx","aggrDeltaColumn","nest","rollup","filterIdx","fieldsOrig","grid","opts","entry","prevRow","cells","dateTimeFormats","dateFormats","timeFormats","Platform_exports","ieVersion","isIE","svgMarkerGlitch","_version","ua","tem","M","_scrollBarWidth","outer","widthNoScroll","inner","widthWithScroll","callback2","mutation","config","widgetID","Widget","watchArray","newNode","destructObserver","leaks","mutations","pNode","defValue","newItem","style","x2","gridSize2","gridSize","snapSize","classIDArr","ctm","newPos","xScale","yScale","transform","context2","classed","renderCount","debouncedCallback","origClassed","str_obj","refresh","round","overlay","bbox","uaT","a1","ubT","a2","uB","ub","cc","deter","u1","u2","rgb$2","enable","transitionDuration","svgDefs","transX","transY","center","pointA","pointB","TL","TR","BR","BL","intersection","rect1","rect2","xLimit","yLimit","fontAwsesomeStyle","origSvg","cloneSVG","origNodes","compStyles","styleName","styleValue","stylePriority","extraStyles","defs","extraStyle","extraWidgets","sizes","prev","curr","ctx","xPos","image","textParts","lineHeight","widths","textLine","clipPos","index$1","implicit","unknown","scale","ordinalRange","r1","bandwidth","paddingInner","paddingOuter","unit","untransform","clamp","piecewise","output","input","maxIter","base","logs","pows","squared","thresholds","invert","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","tickInterval","k10","k21","r2","category10_default","Accent_default","Dark2_default","observable10_default","Paired_default","Pastel1_default","Pastel2_default","Set1_default","Set2_default","Set3_default","Tableau10_default","ramp_default","scheme","scheme$1","BrBG_default","scheme$9","PRGn_default","scheme$10","PiYG_default","scheme$13","PuOr_default","scheme$16","RdBu_default","scheme$17","RdGy_default","scheme$19","RdYlBu_default","scheme$20","RdYlGn_default","scheme$22","Spectral_default","scheme$2","BuGn_default","scheme$3","BuPu_default","scheme$4","GnBu_default","scheme$7","OrRd_default","scheme$12","PuBuGn_default","scheme$11","PuBu_default","scheme$14","PuRd_default","scheme$18","RdPu_default","scheme$24","YlGnBu_default","scheme$23","YlGn_default","scheme$25","YlOrBr_default","scheme$26","YlOrRd_default","Blues_default","scheme$5","Greens_default","scheme$6","Greys_default","scheme$15","Purples_default","scheme$21","Reds_default","scheme$8","Oranges_default","cubehelix_default$1","warm","cool","c$1","ts","pi_1_3","pi_2_3","viridis_default","magma","inferno","plasma","Palette_exports","ordinal$1","rainbow","d3SchemeCategory20","d3Schemes","m_colorbrewer","m_d3","d3Ordinal","brewerOrdinal","hpccOrdinal","flatuiSchemes","flatuiOrdinal","ordinalCache","newColors","largestPalette","ordinal$2","newID","_id","_colors","rainbowCache","steps","subPaletteSize","prevColor","_steps","low","high","ordinalDivID","brewerDivID","palette","customArr","customDivID","\"RdWhGr\"","rgb$1","backgroundColor","shape","element2","_shape","arrow_h","arrow_w","arrow_b","_origRadius","diameter","el","annoXPos","annotations","anno","annoDiam","x_offset","y_offset","icon_bbox","title_bbox","desc_bbox","anno_w","anno_h","anno_gap","_background_h","_background_w","is_hovering","_anno_h","background_bbox","icon_y","title_y","desc_y","anno_y","remove_padding","annotations_bbox","iconWidth","titleX","annoWidth","titleW","idxColumns","idxs","idxColumn","margin","entityRect","textBBox","text_bbox","_icon_x","_icon_y","img","lineEnter","newTextBox","listHeight","listWidth","yPos","menuBBox","bar_size","bar_color","blur_opacity","blur_opacity_hex","blur_color","blur_size","blur_fx","perc","halflife","_remaining","nonpassive","nonpassivecapture","view","noclick","constant_default$2","subject","identifier","dispatch","container","touchable","gestures","listeners","mousedownx","mousedowny","mousemoving","touchending","clickDistance2","gesture","touches","touch","_domNode","_element","surfaceButtons","button","buttonClientHeight","iconClientSize","textClientSize","menuClientSize","_titleRegionHeight","titleRegionHeight","yTitle","titleTextHeight","titleTextWidth","topMargin","leftMargin","xOffset","yOffset","content","hits","i3","nearest","_dx","_dy","posSize","sizeHandles","sizeHandlesEnter","constant_default$1","location","identity$1","dx0","extent","translateExtent","dx1","dy0","dy1","constrain","wheelDelta","scaleExtent","duration","touchstarting","touchfirst","touchDelay","wheelDelay","tapDistance","collection","k1","clean","currentTarget","y0","started","l0","l1","dp","dl","optionUpdate","buttons","icons","SelectionButton","sb","targetel","tbbox","translate","newScale","widthOnly","_origMouseMode","constant_default","mode","MODE_DRAG","MODE_SPACE","MODE_HANDLE","MODE_CENTER","max$1","min$1","X","xy","Y","XY","cursors","flipX","flipY","signsX","signsY","handleSize","handle","dim","emit","selection0","selection1","signX","signY","W","n0","n1","e0","e1","moving","shifting","lockX","lockY","points","pts","abs","point0"],"sources":["../src/__package__.ts","../../../node_modules/d3-selection/src/namespaces.js","../../../node_modules/d3-selection/src/namespace.js","../../../node_modules/d3-selection/src/creator.js","../../../node_modules/d3-selection/src/selector.js","../../../node_modules/d3-selection/src/selection/select.js","../../../node_modules/d3-selection/src/array.js","../../../node_modules/d3-selection/src/selectorAll.js","../../../node_modules/d3-selection/src/selection/selectAll.js","../../../node_modules/d3-selection/src/matcher.js","../../../node_modules/d3-selection/src/selection/selectChild.js","../../../node_modules/d3-selection/src/selection/selectChildren.js","../../../node_modules/d3-selection/src/selection/filter.js","../../../node_modules/d3-selection/src/selection/sparse.js","../../../node_modules/d3-selection/src/selection/enter.js","../../../node_modules/d3-selection/src/constant.js","../../../node_modules/d3-selection/src/selection/data.js","../../../node_modules/d3-selection/src/selection/exit.js","../../../node_modules/d3-selection/src/selection/join.js","../../../node_modules/d3-selection/src/selection/merge.js","../../../node_modules/d3-selection/src/selection/order.js","../../../node_modules/d3-selection/src/selection/sort.js","../../../node_modules/d3-selection/src/selection/call.js","../../../node_modules/d3-selection/src/selection/nodes.js","../../../node_modules/d3-selection/src/selection/node.js","../../../node_modules/d3-selection/src/selection/size.js","../../../node_modules/d3-selection/src/selection/empty.js","../../../node_modules/d3-selection/src/selection/each.js","../../../node_modules/d3-selection/src/selection/attr.js","../../../node_modules/d3-selection/src/window.js","../../../node_modules/d3-selection/src/selection/style.js","../../../node_modules/d3-selection/src/selection/property.js","../../../node_modules/d3-selection/src/selection/classed.js","../../../node_modules/d3-selection/src/selection/text.js","../../../node_modules/d3-selection/src/selection/html.js","../../../node_modules/d3-selection/src/selection/raise.js","../../../node_modules/d3-selection/src/selection/lower.js","../../../node_modules/d3-selection/src/selection/append.js","../../../node_modules/d3-selection/src/selection/insert.js","../../../node_modules/d3-selection/src/selection/remove.js","../../../node_modules/d3-selection/src/selection/clone.js","../../../node_modules/d3-selection/src/selection/datum.js","../../../node_modules/d3-selection/src/selection/on.js","../../../node_modules/d3-selection/src/selection/dispatch.js","../../../node_modules/d3-selection/src/selection/iterator.js","../../../node_modules/d3-selection/src/selection/index.js","../../../node_modules/d3-selection/src/select.js","../../../node_modules/d3-selection/src/create.js","../../../node_modules/d3-selection/src/local.js","../../../node_modules/d3-selection/src/sourceEvent.js","../../../node_modules/d3-selection/src/pointer.js","../../../node_modules/d3-selection/src/pointers.js","../../../node_modules/d3-selection/src/selectAll.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-timer/src/timeout.js","../../../node_modules/d3-transition/src/transition/schedule.js","../../../node_modules/d3-transition/src/interrupt.js","../../../node_modules/d3-transition/src/selection/interrupt.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-color/src/math.js","../../../node_modules/d3-color/src/lab.js","../../../node_modules/d3-color/src/cubehelix.js","../../../node_modules/d3-interpolate/src/basis.js","../../../node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/discrete.js","../../../node_modules/d3-interpolate/src/hue.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-interpolate/src/zoom.js","../../../node_modules/d3-interpolate/src/hsl.js","../../../node_modules/d3-interpolate/src/lab.js","../../../node_modules/d3-interpolate/src/hcl.js","../../../node_modules/d3-interpolate/src/cubehelix.js","../../../node_modules/d3-interpolate/src/piecewise.js","../../../node_modules/d3-interpolate/src/quantize.js","../../../node_modules/d3-transition/src/transition/tween.js","../../../node_modules/d3-transition/src/transition/interpolate.js","../../../node_modules/d3-transition/src/transition/attr.js","../../../node_modules/d3-transition/src/transition/attrTween.js","../../../node_modules/d3-transition/src/transition/delay.js","../../../node_modules/d3-transition/src/transition/duration.js","../../../node_modules/d3-transition/src/transition/ease.js","../../../node_modules/d3-transition/src/transition/easeVarying.js","../../../node_modules/d3-transition/src/transition/filter.js","../../../node_modules/d3-transition/src/transition/merge.js","../../../node_modules/d3-transition/src/transition/on.js","../../../node_modules/d3-transition/src/transition/remove.js","../../../node_modules/d3-transition/src/transition/select.js","../../../node_modules/d3-transition/src/transition/selectAll.js","../../../node_modules/d3-transition/src/transition/selection.js","../../../node_modules/d3-transition/src/transition/style.js","../../../node_modules/d3-transition/src/transition/styleTween.js","../../../node_modules/d3-transition/src/transition/text.js","../../../node_modules/d3-transition/src/transition/textTween.js","../../../node_modules/d3-transition/src/transition/transition.js","../../../node_modules/d3-transition/src/transition/end.js","../../../node_modules/d3-transition/src/transition/index.js","../../../node_modules/d3-ease/src/linear.js","../../../node_modules/d3-ease/src/quad.js","../../../node_modules/d3-ease/src/cubic.js","../../../node_modules/d3-ease/src/poly.js","../../../node_modules/d3-ease/src/sin.js","../../../node_modules/d3-ease/src/math.js","../../../node_modules/d3-ease/src/exp.js","../../../node_modules/d3-ease/src/circle.js","../../../node_modules/d3-ease/src/bounce.js","../../../node_modules/d3-ease/src/back.js","../../../node_modules/d3-ease/src/elastic.js","../../../node_modules/d3-transition/src/selection/transition.js","../../../node_modules/d3-transition/src/selection/index.js","../../../node_modules/d3-transition/src/active.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/descending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/blur.js","../../../node_modules/d3-array/src/count.js","../../../node_modules/d3-array/src/cross.js","../../../node_modules/d3-array/src/cumsum.js","../../../node_modules/d3-array/src/variance.js","../../../node_modules/d3-array/src/deviation.js","../../../node_modules/d3-array/src/extent.js","../../../node_modules/d3-array/src/fsum.js","../../../node_modules/internmap/src/index.js","../../../node_modules/d3-array/src/identity.js","../../../node_modules/d3-array/src/group.js","../../../node_modules/d3-array/src/permute.js","../../../node_modules/d3-array/src/sort.js","../../../node_modules/d3-array/src/groupSort.js","../../../node_modules/d3-array/src/array.js","../../../node_modules/d3-array/src/constant.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-array/src/nice.js","../../../node_modules/d3-array/src/threshold/sturges.js","../../../node_modules/d3-array/src/bin.js","../../../node_modules/d3-array/src/max.js","../../../node_modules/d3-array/src/maxIndex.js","../../../node_modules/d3-array/src/min.js","../../../node_modules/d3-array/src/minIndex.js","../../../node_modules/d3-array/src/quickselect.js","../../../node_modules/d3-array/src/greatest.js","../../../node_modules/d3-array/src/quantile.js","../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js","../../../node_modules/d3-array/src/threshold/scott.js","../../../node_modules/d3-array/src/mean.js","../../../node_modules/d3-array/src/median.js","../../../node_modules/d3-array/src/merge.js","../../../node_modules/d3-array/src/mode.js","../../../node_modules/d3-array/src/pairs.js","../../../node_modules/d3-array/src/range.js","../../../node_modules/d3-array/src/rank.js","../../../node_modules/d3-array/src/least.js","../../../node_modules/d3-array/src/leastIndex.js","../../../node_modules/d3-array/src/greatestIndex.js","../../../node_modules/d3-array/src/scan.js","../../../node_modules/d3-array/src/shuffle.js","../../../node_modules/d3-array/src/sum.js","../../../node_modules/d3-array/src/transpose.js","../../../node_modules/d3-array/src/zip.js","../../../node_modules/d3-array/src/every.js","../../../node_modules/d3-array/src/some.js","../../../node_modules/d3-array/src/filter.js","../../../node_modules/d3-array/src/map.js","../../../node_modules/d3-array/src/reduce.js","../../../node_modules/d3-array/src/reverse.js","../../../node_modules/d3-array/src/difference.js","../../../node_modules/d3-array/src/disjoint.js","../../../node_modules/d3-array/src/intersection.js","../../../node_modules/d3-array/src/superset.js","../../../node_modules/d3-array/src/subset.js","../../../node_modules/d3-array/src/union.js","../../../node_modules/d3-dsv/src/dsv.js","../../../node_modules/d3-dsv/src/csv.js","../../../node_modules/d3-dsv/src/tsv.js","../../../node_modules/d3-dsv/src/autoType.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/ticks.js","../../../node_modules/d3-time-format/src/locale.js","../../../node_modules/d3-time-format/src/defaultLocale.js","../../../node_modules/d3-time-format/src/isoFormat.js","../../../node_modules/d3-time-format/src/isoParse.js","../src/Class.ts","../src/PropertyExt.ts","../src/Utility.ts","../src/Database.ts","../src/Platform.ts","../src/Widget.ts","../src/HTMLWidget.ts","../src/CanvasWidget.ts","../src/Transition.ts","../src/SVGWidget.ts","../src/Text.ts","../src/FAChar.ts","../../../node_modules/colorbrewer/index.es.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-scale/src/band.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/identity.js","../../../node_modules/d3-scale/src/nice.js","../../../node_modules/d3-scale/src/log.js","../../../node_modules/d3-scale/src/symlog.js","../../../node_modules/d3-scale/src/pow.js","../../../node_modules/d3-scale/src/radial.js","../../../node_modules/d3-scale/src/quantile.js","../../../node_modules/d3-scale/src/quantize.js","../../../node_modules/d3-scale/src/threshold.js","../../../node_modules/d3-scale/src/time.js","../../../node_modules/d3-scale/src/utcTime.js","../../../node_modules/d3-scale/src/sequential.js","../../../node_modules/d3-scale/src/sequentialQuantile.js","../../../node_modules/d3-scale/src/diverging.js","../../../node_modules/d3-scale-chromatic/src/colors.js","../../../node_modules/d3-scale-chromatic/src/categorical/category10.js","../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","../../../node_modules/d3-scale-chromatic/src/categorical/observable10.js","../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","../../../node_modules/d3-scale-chromatic/src/ramp.js","../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","../src/Palette.ts","../src/Shape.ts","../src/Icon.ts","../src/Entity.ts","../src/EntityCard.ts","../src/EntityPin.ts","../src/EntityRect.ts","../src/TextBox.ts","../src/EntityVertex.ts","../src/Image.ts","../src/List.ts","../src/Menu.ts","../src/ProgressBar.ts","../../../node_modules/d3-drag/src/noevent.js","../../../node_modules/d3-drag/src/nodrag.js","../../../node_modules/d3-drag/src/constant.js","../../../node_modules/d3-drag/src/event.js","../../../node_modules/d3-drag/src/drag.js","../src/Surface.ts","../src/ResizeSurface.ts","../../../node_modules/d3-zoom/src/constant.js","../../../node_modules/d3-zoom/src/event.js","../../../node_modules/d3-zoom/src/transform.js","../../../node_modules/d3-zoom/src/noevent.js","../../../node_modules/d3-zoom/src/zoom.js","../src/TitleBar.ts","../src/SVGZoomWidget.ts","../src/WidgetArray.ts","../../../node_modules/d3-brush/src/constant.js","../../../node_modules/d3-brush/src/event.js","../../../node_modules/d3-brush/src/noevent.js","../../../node_modules/d3-brush/src/brush.js"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/common\";\r\nexport const PKG_VERSION = \"3.12.3\";\r\nexport const BUILD_VERSION = \"3.38.0\";\r\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n  return select(creator(name).call(document.documentElement));\n}\n","var nextId = 0;\n\nexport default function local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n  if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n    events = sourceEvent(events);\n    if (node === undefined) node = events.currentTarget;\n    events = events.touches || [events];\n  }\n  return Array.from(events, event => pointer(event, node));\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([array(selector)], root);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export const linear = t => +t;\n","export function quadIn(t) {\n  return t * t;\n}\n\nexport function quadOut(t) {\n  return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n    halfPi = pi / 2;\n\nexport function sinIn(t) {\n  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n","// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n","import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n  return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n  return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n","export function circleIn(t) {\n  return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n  return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n    b2 = 6 / 11,\n    b3 = 8 / 11,\n    b4 = 3 / 4,\n    b5 = 9 / 11,\n    b6 = 10 / 11,\n    b7 = 15 / 16,\n    b8 = 21 / 22,\n    b9 = 63 / 64,\n    b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n  return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return (t = +t) * t * (s * (t - 1) + t);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((t + 1) * s + t) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n","import {tpmt} from \"./math.js\";\n\nvar tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * tpmt(-t) * Math.sin((s - t) / p)\n        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      i;\n\n  if (schedules) {\n    name = name == null ? null : name + \"\";\n    for (i in schedules) {\n      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n        return new Transition([[node]], root, name, +i);\n      }\n    }\n  }\n\n  return null;\n}\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export function blur(values, r) {\n  if (!((r = +r) >= 0)) throw new RangeError(\"invalid r\");\n  let length = values.length;\n  if (!((length = Math.floor(length)) >= 0)) throw new RangeError(\"invalid length\");\n  if (!length || !r) return values;\n  const blur = blurf(r);\n  const temp = values.slice();\n  blur(values, temp, 0, length, 1);\n  blur(temp, values, 0, length, 1);\n  blur(values, temp, 0, length, 1);\n  return values;\n}\n\nexport const blur2 = Blur2(blurf);\n\nexport const blurImage = Blur2(blurfImage);\n\nfunction Blur2(blur) {\n  return function(data, rx, ry = rx) {\n    if (!((rx = +rx) >= 0)) throw new RangeError(\"invalid rx\");\n    if (!((ry = +ry) >= 0)) throw new RangeError(\"invalid ry\");\n    let {data: values, width, height} = data;\n    if (!((width = Math.floor(width)) >= 0)) throw new RangeError(\"invalid width\");\n    if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError(\"invalid height\");\n    if (!width || !height || (!rx && !ry)) return data;\n    const blurx = rx && blur(rx);\n    const blury = ry && blur(ry);\n    const temp = values.slice();\n    if (blurx && blury) {\n      blurh(blurx, temp, values, width, height);\n      blurh(blurx, values, temp, width, height);\n      blurh(blurx, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n      blurv(blury, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n    } else if (blurx) {\n      blurh(blurx, values, temp, width, height);\n      blurh(blurx, temp, values, width, height);\n      blurh(blurx, values, temp, width, height);\n    } else if (blury) {\n      blurv(blury, values, temp, width, height);\n      blurv(blury, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n    }\n    return data;\n  };\n}\n\nfunction blurh(blur, T, S, w, h) {\n  for (let y = 0, n = w * h; y < n;) {\n    blur(T, S, y, y += w, 1);\n  }\n}\n\nfunction blurv(blur, T, S, w, h) {\n  for (let x = 0, n = w * h; x < w; ++x) {\n    blur(T, S, x, x + n, w);\n  }\n}\n\nfunction blurfImage(radius) {\n  const blur = blurf(radius);\n  return (T, S, start, stop, step) => {\n    start <<= 2, stop <<= 2, step <<= 2;\n    blur(T, S, start + 0, stop + 0, step);\n    blur(T, S, start + 1, stop + 1, step);\n    blur(T, S, start + 2, stop + 2, step);\n    blur(T, S, start + 3, stop + 3, step);\n  };\n}\n\n// Given a target array T, a source array S, sets each value T[i] to the average\n// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,\n// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between\n// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an\n// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted\n// according to r - ⌊radius⌋.\nfunction blurf(radius) {\n  const radius0 = Math.floor(radius);\n  if (radius0 === radius) return bluri(radius);\n  const t = radius - radius0;\n  const w = 2 * radius + 1;\n  return (T, S, start, stop, step) => { // stop must be aligned!\n    if (!((stop -= step) >= start)) return; // inclusive stop\n    let sum = radius0 * S[start];\n    const s0 = step * radius0;\n    const s1 = s0 + step;\n    for (let i = start, j = start + s0; i < j; i += step) {\n      sum += S[Math.min(stop, i)];\n    }\n    for (let i = start, j = stop; i <= j; i += step) {\n      sum += S[Math.min(stop, i + s0)];\n      T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;\n      sum -= S[Math.max(start, i - s0)];\n    }\n  };\n}\n\n// Like blurf, but optimized for integer radius.\nfunction bluri(radius) {\n  const w = 2 * radius + 1;\n  return (T, S, start, stop, step) => { // stop must be aligned!\n    if (!((stop -= step) >= start)) return; // inclusive stop\n    let sum = radius * S[start];\n    const s = step * radius;\n    for (let i = start, j = start + s; i < j; i += step) {\n      sum += S[Math.min(stop, i)];\n    }\n    for (let i = start, j = stop; i <= j; i += step) {\n      sum += S[Math.min(stop, i + s)];\n      T[i] = sum / w;\n      sum -= S[Math.max(start, i - s)];\n    }\n  };\n}\n","export default function count(values, valueof) {\n  let count = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  }\n  return count;\n}\n","function length(array) {\n  return array.length | 0;\n}\n\nfunction empty(length) {\n  return !(length > 0);\n}\n\nfunction arrayify(values) {\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n  return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n  values = values.map(arrayify);\n  const lengths = values.map(length);\n  const j = values.length - 1;\n  const index = new Array(j + 1).fill(0);\n  const product = [];\n  if (j < 0 || lengths.some(empty)) return product;\n  while (true) {\n    product.push(index.map((j, i) => values[i][j]));\n    let i = j;\n    while (++index[i] === lengths[i]) {\n      if (i === 0) return reduce ? product.map(reduce) : product;\n      index[i--] = 0;\n    }\n  }\n}\n","export default function cumsum(values, valueof) {\n  var sum = 0, index = 0;\n  return Float64Array.from(values, valueof === undefined\n    ? v => (sum += +v || 0)\n    : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function variance(values, valueof) {\n  let count = 0;\n  let delta;\n  let mean = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n  if (count > 1) return sum / (count - 1);\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n  const v = variance(values, valueof);\n  return v ? Math.sqrt(v) : v;\n}\n","export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function identity(x) {\n  return x;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n","export default function permute(source, keys) {\n  return Array.from(keys, key => source[key]);\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n  return (reduce.length !== 2\n    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n    .map(([key]) => key);\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function constant(x) {\n  return () => x;\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n  let prestep;\n  while (true) {\n    const step = tickIncrement(start, stop, count);\n    if (step === prestep || step === 0 || !isFinite(step)) {\n      return [start, stop];\n    } else if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n    }\n    prestep = step;\n  }\n}\n","import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    if (!Array.isArray(data)) data = Array.from(data);\n\n    var i,\n        n = data.length,\n        x,\n        step,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds, and nice the\n    // default domain accordingly.\n    if (!Array.isArray(tz)) {\n      const max = x1, tn = +tz;\n      if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n      tz = ticks(x0, x1, tn);\n\n      // If the domain is aligned with the first tick (which it will by\n      // default), then we can use quantization rather than bisection to bin\n      // values, which is substantially faster.\n      if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n      // If the last threshold is coincident with the domain’s upper bound, the\n      // last bin will be zero-width. If the default domain is used, and this\n      // last threshold is coincident with the maximum input value, we can\n      // extend the niced upper bound by one tick to ensure uniform bin widths;\n      // otherwise, we simply remove the last threshold. Note that we don’t\n      // coerce values or the domain to numbers, and thus must be careful to\n      // compare order (>=) rather than strict equality (===)!\n      if (tz[tz.length - 1] >= x1) {\n        if (max >= x1 && domain === extent) {\n          const step = tickIncrement(x0, x1, tn);\n          if (isFinite(step)) {\n            if (step > 0) {\n              x1 = (Math.floor(x1 / step) + 1) * step;\n            } else if (step < 0) {\n              x1 = (Math.ceil(x1 * -step) + 1) / -step;\n            }\n          }\n        } else {\n          tz.pop();\n        }\n      }\n    }\n\n    // Remove any thresholds outside the domain.\n    // Be careful not to mutate an array owned by the user!\n    var m = tz.length, a = 0, b = m;\n    while (tz[a] <= x0) ++a;\n    while (tz[b - 1] > x1) --b;\n    if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    if (isFinite(step)) {\n      if (step > 0) {\n        for (i = 0; i < n; ++i) {\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\n            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n          }\n        }\n      } else if (step < 0) {\n        for (i = 0; i < n; ++i) {\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\n            const j = Math.floor((x0 - x) * step);\n            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n          }\n        }\n      }\n    } else {\n      for (i = 0; i < n; ++i) {\n        if ((x = values[i]) != null && x0 <= x && x <= x1) {\n          bins[bisect(tz, x, 0, m)].push(data[i]);\n        }\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n  };\n\n  return histogram;\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function maxIndex(values, valueof) {\n  let max;\n  let maxIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  }\n  return maxIndex;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","export default function minIndex(values, valueof) {\n  let min;\n  let minIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  }\n  return minIndex;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n  let max;\n  let defined = false;\n  if (compare.length === 1) {\n    let maxValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, maxValue) > 0\n          : ascending(value, value) === 0) {\n        max = element;\n        maxValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, max) > 0\n          : compare(value, value) === 0) {\n        max = value;\n        defined = true;\n      }\n    }\n  }\n  return max;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -1;\n}\n","import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function thresholdFreedmanDiaconis(values, min, max) {\n  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);\n  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n","import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function thresholdScott(values, min, max) {\n  const c = count(values), d = deviation(values);\n  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n","export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n  return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n  return quantileIndex(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n  const counts = new InternMap();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  }\n  let modeValue;\n  let modeCount = 0;\n  for (const [value, count] of counts) {\n    if (count > modeCount) {\n      modeCount = count;\n      modeValue = value;\n    }\n  }\n  return modeValue;\n}\n","export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","import ascending from \"./ascending.js\";\nimport {ascendingDefined, compareDefined} from \"./sort.js\";\n\nexport default function rank(values, valueof = ascending) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  let V = Array.from(values);\n  const R = new Float64Array(V.length);\n  if (valueof.length !== 2) V = V.map(valueof), valueof = ascending;\n  const compareIndex = (i, j) => valueof(V[i], V[j]);\n  let k, r;\n  values = Uint32Array.from(V, (_, i) => i);\n  // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123\n  values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));\n  values.forEach((j, i) => {\n      const c = compareIndex(j, k === undefined ? j : k);\n      if (c >= 0) {\n        if (k === undefined || c > 0) k = j, r = i;\n        R[j] = r;\n      } else {\n        R[j] = NaN;\n      }\n    });\n  return R;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function least(values, compare = ascending) {\n  let min;\n  let defined = false;\n  if (compare.length === 1) {\n    let minValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, minValue) < 0\n          : ascending(value, value) === 0) {\n        min = element;\n        minValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, min) < 0\n          : compare(value, value) === 0) {\n        min = value;\n        defined = true;\n      }\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\nimport minIndex from \"./minIndex.js\";\n\nexport default function leastIndex(values, compare = ascending) {\n  if (compare.length === 1) return minIndex(values, compare);\n  let minValue;\n  let min = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (min < 0\n        ? compare(value, value) === 0\n        : compare(value, minValue) < 0) {\n      minValue = value;\n      min = index;\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\nimport maxIndex from \"./maxIndex.js\";\n\nexport default function greatestIndex(values, compare = ascending) {\n  if (compare.length === 1) return maxIndex(values, compare);\n  let maxValue;\n  let max = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (max < 0\n        ? compare(value, value) === 0\n        : compare(value, maxValue) > 0) {\n      maxValue = value;\n      max = index;\n    }\n  }\n  return max;\n}\n","import leastIndex from \"./leastIndex.js\";\n\nexport default function scan(values, compare) {\n  const index = leastIndex(values, compare);\n  return index < 0 ? undefined : index;\n}\n","export default shuffler(Math.random);\n\nexport function shuffler(random) {\n  return function shuffle(array, i0 = 0, i1 = array.length) {\n    let m = i1 - (i0 = +i0);\n    while (m) {\n      const i = random() * m-- | 0, t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n    return array;\n  };\n}\n","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","import min from \"./min.js\";\n\nexport default function transpose(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n","import transpose from \"./transpose.js\";\n\nexport default function zip() {\n  return transpose(arguments);\n}\n","export default function every(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (!test(value, ++index, values)) {\n      return false;\n    }\n  }\n  return true;\n}\n","export default function some(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      return true;\n    }\n  }\n  return false;\n}\n","export default function filter(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  const array = [];\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      array.push(value);\n    }\n  }\n  return array;\n}\n","export default function map(values, mapper) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n  return Array.from(values, (value, index) => mapper(value, index, values));\n}\n","export default function reduce(values, reducer, value) {\n  if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n  const iterator = values[Symbol.iterator]();\n  let done, next, index = -1;\n  if (arguments.length < 3) {\n    ({done, value} = iterator.next());\n    if (done) return;\n    ++index;\n  }\n  while (({done, value: next} = iterator.next()), !done) {\n    value = reducer(value, next, ++index, values);\n  }\n  return value;\n}\n","export default function reverse(values) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).reverse();\n}\n","import {InternSet} from \"internmap\";\n\nexport default function difference(values, ...others) {\n  values = new InternSet(values);\n  for (const other of others) {\n    for (const value of other) {\n      values.delete(value);\n    }\n  }\n  return values;\n}\n","import {InternSet} from \"internmap\";\n\nexport default function disjoint(values, other) {\n  const iterator = other[Symbol.iterator](), set = new InternSet();\n  for (const v of values) {\n    if (set.has(v)) return false;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) break;\n      if (Object.is(v, value)) return false;\n      set.add(value);\n    }\n  }\n  return true;\n}\n","import {InternSet} from \"internmap\";\n\nexport default function intersection(values, ...others) {\n  values = new InternSet(values);\n  others = others.map(set);\n  out: for (const value of values) {\n    for (const other of others) {\n      if (!other.has(value)) {\n        values.delete(value);\n        continue out;\n      }\n    }\n  }\n  return values;\n}\n\nfunction set(values) {\n  return values instanceof InternSet ? values : new InternSet(values);\n}\n","export default function superset(values, other) {\n  const iterator = values[Symbol.iterator](), set = new Set();\n  for (const o of other) {\n    const io = intern(o);\n    if (set.has(io)) continue;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) return false;\n      const ivalue = intern(value);\n      set.add(ivalue);\n      if (Object.is(io, ivalue)) break;\n    }\n  }\n  return true;\n}\n\nfunction intern(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import superset from \"./superset.js\";\n\nexport default function subset(values, other) {\n  return superset(other, values);\n}\n","import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n  const set = new InternSet();\n  for (const other of others) {\n    for (const o of other) {\n      set.add(o);\n    }\n  }\n  return set;\n}\n","var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows,\n    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export default function autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number, m;\n    if (!value) value = null;\n    else if (value === \"true\") value = true;\n    else if (value === \"false\") value = false;\n    else if (value === \"NaN\") value = NaN;\n    else if (!isNaN(number = +value)) value = number;\n    else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n      if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n      value = new Date(value);\n    }\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\n  var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return prefixExponent = undefined, x.toPrecision(p);\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier, options) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n        suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n    return function(value) {\n      return f(k * value);\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {utcFormat} from \"./defaultLocale.js\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat.js\";\nimport {utcParse} from \"./defaultLocale.js\";\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import { classID2Meta, ClassMeta } from \"@hpcc-js/util\";\r\n\r\nfunction applyMixins(derivedCtor: any, baseCtors: any[]) {\r\n    baseCtors.forEach(baseCtor => {\r\n        Object.getOwnPropertyNames(baseCtor).forEach(name => {\r\n            if (name !== \"constructor\") {\r\n                const descriptor = Object.getOwnPropertyDescriptor(baseCtor, name);\r\n                Object.defineProperty(derivedCtor, name, descriptor);\r\n            }\r\n        });\r\n    });\r\n}\r\n\r\nexport class Class {\r\n    static _class: string;\r\n    _class: string;\r\n\r\n    constructor() {\r\n        this._class = Object.getPrototypeOf(this)._class;\r\n    }\r\n\r\n    class(): string;\r\n    class(_: string): this;\r\n    class(_?: string): string | this {\r\n        if (!arguments.length) return this._class;\r\n        this._class = _;\r\n        return this;\r\n    }\r\n\r\n    classID() {\r\n        return this._class.split(\" \").pop();\r\n    }\r\n\r\n    classMeta(): ClassMeta {\r\n        return classID2Meta(this.classID());\r\n    }\r\n\r\n    implements(source) {\r\n        applyMixins(this, [source]);\r\n    }\r\n\r\n    mixin(mixinClass) {\r\n        this.implements(mixinClass.prototype);\r\n        //  Special case mixins  ---\r\n        if (mixinClass.prototype.hasOwnProperty(\"_class\")) {\r\n            this._class += \" \" + mixinClass.prototype._class.split(\" \").pop();\r\n        }\r\n    }\r\n\r\n    overrideMethod<M extends keyof this>(methodID: M, newMethod: this[M]): this {\r\n        if (this[methodID] === undefined) {\r\n            throw new Error(`Method:  ${methodID.toString()} does not exist.`);\r\n        }\r\n        const origMethod = this[methodID];\r\n        this[methodID] = function () {\r\n            arguments[arguments.length] = origMethod;\r\n            arguments.length++;\r\n            return (newMethod as any).apply(this, arguments);\r\n        } as any;\r\n        return this;\r\n    }\r\n\r\n    cssTag(id: string): string {\r\n        return (\"\" + id).replace(/[^a-z0-9]/g, (s) => {\r\n            const c = s.charCodeAt(0);\r\n            if (c === 32) return \"-\";\r\n            if (c >= 65 && c <= 90) return \"_\" + s.toLowerCase();\r\n            return \"_0x\" + c.toString(16);\r\n        });\r\n    }\r\n}\r\nClass.prototype._class = \"common_Class\";\r\n","import { hashSum } from \"@hpcc-js/util\";\r\nimport { Class } from \"./Class.ts\";\r\n\r\nconst GEN_PUB_STUBS: boolean = false;\r\n\r\nfunction deepEqual(a, b) {\r\n    if (a === b) return true;\r\n\r\n    const arrA = Array.isArray(a);\r\n    const arrB = Array.isArray(b);\r\n    let i;\r\n\r\n    if (arrA && arrB) {\r\n        if (a.length !== b.length) return false;\r\n        for (i = 0; i < a.length; i++)\r\n            if (!deepEqual(a[i], b[i])) return false;\r\n        return true;\r\n    }\r\n\r\n    if (arrA != arrB) return false;\r\n\r\n    if (a && b && typeof a === \"object\" && typeof b === \"object\") {\r\n        const keys = Object.keys(a);\r\n        if (keys.length !== Object.keys(b).length) return false;\r\n\r\n        const dateA = a instanceof Date;\r\n        const dateB = b instanceof Date;\r\n        if (dateA && dateB) return a.getTime() === b.getTime();\r\n        if (dateA != dateB) return false;\r\n\r\n        const regexpA = a instanceof RegExp;\r\n        const regexpB = b instanceof RegExp;\r\n        if (regexpA && regexpB) return a.toString() === b.toString();\r\n        if (regexpA != regexpB) return false;\r\n\r\n        for (i = 0; i < keys.length; i++)\r\n            if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\r\n\r\n        for (i = 0; i < keys.length; i++)\r\n            if (!deepEqual(a[keys[i]], b[keys[i]])) return false;\r\n\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nconst __meta_ = \"__meta_\";\r\nconst __private_ = \"__private_\";\r\nconst __prop_ = \"_\";\r\nconst __prop_data_ = \"__prop_\";\r\nconst __default_ = \"__default_\";\r\n\r\nfunction isMeta(key) {\r\n    return key.indexOf(__meta_) === 0;\r\n}\r\n\r\nfunction isPrivate(obj, key) {\r\n    return obj[__private_ + key] || obj[__private_ + __meta_ + key];\r\n}\r\n\r\nexport interface IAutoExpand extends PropertyExt {\r\n    //  AutoExpand items may have \"incomplete\" instances while the user is editing them in the PropertyEditor\r\n    owner(): PropertyExt;\r\n    owner(_: PropertyExt): this;\r\n    valid(): boolean;\r\n}\r\n\r\nexport type TagTypes = \"Private\" | \"Shared\" | \"Basic\" | \"Intermediate\" | \"Advanced\" | \"Theme\" | \"Serial\";\r\nexport type PublishTypes = \"any\" | \"number\" | \"boolean\" | \"string\" | \"set\" | \"array\" | \"object\" | \"widget\" | \"widgetArray\" | \"propertyArray\" | \"html-color\" | \"proxy\";\r\nexport interface IPublishExt {\r\n    override?: boolean;\r\n    disable?: (w) => boolean;\r\n    validate?: (w) => boolean;\r\n    hidden?: (w) => boolean;\r\n    optional?: boolean;\r\n    tags?: TagTypes[];\r\n    autoExpand?: new () => IAutoExpand;\r\n    noDeserialize?: boolean;\r\n    render?: boolean;\r\n    icons?: string[];\r\n    editor_input?: (context, widget, cell, param) => void;\r\n    saveButton?: string;\r\n    saveButtonID?: string;\r\n    number?: any;\r\n    reset?: boolean;\r\n    //  Amcharts - really needed?\r\n    min?: number;\r\n    max?: number;\r\n    step?: number;\r\n    inputType?: string;\r\n    internal?: boolean;\r\n    range?: { min: number, max: number, step: number };\r\n    multiline?: boolean;\r\n}\r\n\r\nexport class Meta {\r\n    id;\r\n    type: PublishTypes;\r\n    origDefaultValue;\r\n    defaultValue;\r\n    description;\r\n    set;\r\n    ext: IPublishExt;\r\n    checkedAssign;\r\n\r\n    constructor(id, defaultValue, type, description, set, ext?: IPublishExt) {\r\n        ext = ext || {};\r\n        this.id = id;\r\n        this.type = type;\r\n        this.origDefaultValue = defaultValue;\r\n        this.defaultValue = ext.optional && defaultValue === null ? undefined : defaultValue;\r\n        this.description = description;\r\n        this.set = set;\r\n        this.ext = ext;\r\n\r\n        switch (type) {\r\n            case \"any\":\r\n                this.checkedAssign = _ => _;\r\n                break;\r\n            case \"set\":\r\n                this.checkedAssign = function (_) {\r\n                    if ((window as any).__hpcc_debug) {\r\n                        const options = typeof set === \"function\" ? set.call(this) : set;\r\n                        if (options && options.length && options.indexOf(_) < 0) {\r\n                            console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + JSON.stringify(options));\r\n                        }\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            case \"html-color\":\r\n                this.checkedAssign = function (_) {\r\n                    if ((window as any).__hpcc_debug && _ && _ !== \"red\") {\r\n                        const litmus = \"red\";\r\n                        const d = document.createElement(\"div\");\r\n                        d.style.color = litmus;\r\n                        d.style.color = _;\r\n                        // Element's style.color will be reverted to litmus or set to \"\" if an invalid color is given\r\n                        if (d.style.color === litmus || d.style.color === \"\") {\r\n                            console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                        }\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            case \"boolean\":\r\n                this.checkedAssign = function (_) {\r\n                    return typeof (_) === \"string\" && [\"false\", \"off\", \"0\"].indexOf(_.toLowerCase()) >= 0 ? false : Boolean(_);\r\n                };\r\n                break;\r\n            case \"number\":\r\n                this.checkedAssign = function (_) {\r\n                    return Number(_);\r\n                };\r\n                break;\r\n            case \"string\":\r\n                this.checkedAssign = function (_) {\r\n                    return String(_);\r\n                };\r\n                break;\r\n            case \"array\":\r\n                this.checkedAssign = function (_) {\r\n                    if (!(_ instanceof Array)) {\r\n                        console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            case \"object\":\r\n                this.checkedAssign = function (_) {\r\n                    if (!(_ instanceof Object)) {\r\n                        console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            case \"widget\":\r\n                this.checkedAssign = function (_) {\r\n                    if (!_._class || _._class.indexOf(\"common_PropertyExt\") < 0) {\r\n                        console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            case \"widgetArray\":\r\n                this.checkedAssign = function (_) {\r\n                    if (_.some(function (row) { return (!row._class || row._class.indexOf(\"common_Widget\") < 0); })) {\r\n                        console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            case \"propertyArray\":\r\n                this.checkedAssign = function (_) {\r\n                    if (_.some(function (row) { return !row.publishedProperties; })) {\r\n                        console.error(\"Invalid value for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n            default:\r\n                this.checkedAssign = function (_) {\r\n                    if ((window as any).__hpcc_debug) {\r\n                        console.error(\"Unchecked property type for '\" + this.classID() + \".\" + id + \"':  \" + _ + \" expected \" + type);\r\n                    }\r\n                    return _;\r\n                };\r\n                break;\r\n        }\r\n    }\r\n}\r\n\r\nclass MetaProxy {\r\n    id: string;\r\n    type;\r\n    proxy;\r\n    method;\r\n    defaultValue;\r\n    ext: IPublishExt;\r\n\r\n    constructor(id: string, proxy, method, defaultValue, ext?: IPublishExt) {\r\n        this.id = id;\r\n        this.type = \"proxy\";\r\n        this.proxy = proxy;\r\n        this.method = method;\r\n        this.defaultValue = defaultValue;\r\n        this.ext = ext || {};\r\n    }\r\n}\r\n\r\nfunction isMetaProxy(meta: Meta | MetaProxy): meta is MetaProxy {\r\n    return meta.type === \"proxy\";\r\n}\r\n\r\nexport interface IMonitorHandle {\r\n    remove(): void;\r\n}\r\n\r\nlet propExtID = 0;\r\nexport class PropertyExt extends Class {\r\n    protected _id: string;\r\n    private _watchArrIdx: number;\r\n    private _watchArr: any;\r\n    private _publishedProperties: Meta[] = [];\r\n\r\n    constructor() {\r\n        super();\r\n        this.calcPublishedProperties();\r\n\r\n        this._id = \"_pe\" + (++propExtID);\r\n        this._watchArrIdx = 0;\r\n        this._watchArr = {};\r\n\r\n        this.publishedProperties(true).forEach(function (meta) {\r\n            switch (meta.type) {\r\n                case \"array\":\r\n                case \"widgetArray\":\r\n                case \"propertyArray\":\r\n                    this[meta.id + \"_reset\"]();\r\n                    break;\r\n            }\r\n        }, this);\r\n    }\r\n\r\n    id(): string;\r\n    id(_: string): this;\r\n    id(_?): string | this {\r\n        if (!arguments.length) return this._id;\r\n        this._id = _;\r\n        return this;\r\n    }\r\n\r\n    // Publish Properties  ---\r\n    calcPublishedProperties(includePrivate = false, expandProxies = false): void {\r\n        this._publishedProperties = [];\r\n        const protoStack = [];\r\n        let __proto__ = Object.getPrototypeOf(this);\r\n        while (__proto__) {\r\n            if (__proto__ === PropertyExt.prototype) {\r\n                break;\r\n            }\r\n            protoStack.unshift(__proto__);\r\n            __proto__ = Object.getPrototypeOf(__proto__);\r\n        }\r\n        for (__proto__ of protoStack) {\r\n            for (const key in __proto__) {\r\n                if (__proto__.hasOwnProperty(key)) {\r\n                    if (isMeta(key)) {\r\n                        this._publishedProperties.push(this[key]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    resolvePublishedProxy(meta: Meta | MetaProxy) {\r\n        let item = this;\r\n        while (meta instanceof MetaProxy) {\r\n            item = item[meta.proxy];\r\n            meta = item.publishedProperty(meta.method);\r\n        }\r\n        return meta;\r\n    }\r\n\r\n    publishedProperties(includePrivate = false, expandProxies = false): Meta[] {\r\n        return this._publishedProperties.filter(meta => includePrivate || !isPrivate(this, meta.id)).map(meta => {\r\n            if (expandProxies && isMetaProxy(meta)) {\r\n                const selfProp = meta;\r\n                let item = this;\r\n                while (meta.type === \"proxy\") {\r\n                    item = item[(meta as any).proxy];\r\n                    meta = item.publishedProperty((meta as any).method);\r\n                }\r\n                if (meta.id !== selfProp.id) {\r\n                    meta = JSON.parse(JSON.stringify(meta));  //  Clone meta so we can safely replace the id.\r\n                    meta.id = selfProp.id;\r\n                }\r\n            }\r\n            return meta;\r\n        });\r\n    }\r\n\r\n    widgetWalker(visitor: (item: PropertyExt) => void) {\r\n        visitor(this);\r\n        this.publishedProperties(false, true).forEach(publishItem => {\r\n            switch (publishItem.type) {\r\n                case \"widget\":\r\n                    const widget: PropertyExt = this[publishItem.id]();\r\n                    if (widget) {\r\n                        widget.widgetWalker(visitor);\r\n                    }\r\n                    break;\r\n                case \"widgetArray\":\r\n                case \"propertyArray\":\r\n                    const widgets: PropertyExt[] = this[publishItem.id]();\r\n                    if (widgets) {\r\n                        widgets.forEach((widget) => {\r\n                            widget.widgetWalker(visitor);\r\n                        });\r\n                    }\r\n                    break;\r\n            }\r\n        });\r\n    }\r\n\r\n    propertyWalker(visitor: (context: this, publishItem: Meta) => void, filter?: (context: this, publishItem: Meta) => boolean) {\r\n        const context = this;\r\n        this.publishedProperties(false, true).forEach(function (publishItem) {\r\n            if (typeof (filter) !== \"function\" || filter(context, publishItem)) {\r\n                visitor(context, publishItem);\r\n            }\r\n        });\r\n    }\r\n\r\n    serialize(): { __class, [id: string]: any } {\r\n        const retVal = {\r\n            __class: this.classID()\r\n        };\r\n        for (const prop of this.publishedProperties()) {\r\n            if (prop.id === \"fields\") continue;\r\n            const val = (this as any)[prop.id]();\r\n            switch (prop.type) {\r\n                case \"propertyArray\":\r\n                    if ((this as any)[`${prop.id}_modified`]()) {\r\n                    }\r\n                    const serialization = val.filter(item => item.valid()).map(item => item.serialize()).filter(item => item !== undefined);\r\n                    if (serialization) {\r\n                        retVal[prop.id] = serialization;\r\n                    }\r\n                    break;\r\n                case \"widget\":\r\n                    retVal[prop.id] = val?.serialize();\r\n                    break;\r\n                default:\r\n                    if ((this as any)[`${prop.id}_modified`]()) {\r\n                        if (!(val instanceof Object)) {\r\n                            retVal[prop.id] = val;\r\n                        }\r\n                    }\r\n            }\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    deserialize(props?: { __class, [id: string]: any }): this {\r\n        if (!props) return this;\r\n        for (const prop of this.publishedProperties()) {\r\n            const val = props[prop.id];\r\n            if (val !== undefined) {\r\n                switch (prop.type) {\r\n                    case \"propertyArray\":\r\n                        if (prop.ext && prop.ext.autoExpand) {\r\n                            this[`${prop.id}`](val.map(item => new prop.ext.autoExpand().deserialize(item)));\r\n                        }\r\n                        break;\r\n                    case \"widget\":\r\n                        const currVal = this[`${prop.id}`]();\r\n                        if (currVal.classID() === val.__class) {\r\n                            currVal.deserialize(val);\r\n                        } else {\r\n                            console.warn(\"Dynamic class initialization not supported.\");\r\n                        }\r\n                        break;\r\n                    default:\r\n                        this[`${prop.id}`](val);\r\n                }\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    publishedProperty(id) {\r\n        return this[__meta_ + id];\r\n    }\r\n\r\n    publishedModified() {\r\n        return this.publishedProperties().some(function (prop) {\r\n            return this[prop.id + \"_modified\"]();\r\n        }, this);\r\n    }\r\n\r\n    publishReset(privateArr?, exceptionsArr?) {\r\n        privateArr = (privateArr || []).map(function (id) { return __meta_ + id; });\r\n        exceptionsArr = (exceptionsArr || []).map(function (id) { return __meta_ + id; });\r\n        for (const key in this) {\r\n            if (isMeta(key)) {\r\n                const isPrivateItem = !privateArr.length || (privateArr.length && privateArr.indexOf(key) >= 0);\r\n                const isException = exceptionsArr.indexOf(key) >= 0;\r\n                if (isPrivateItem && !isException) {\r\n                    this[__private_ + key] = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    static prevClassID: string = \"\";\r\n    publish(id: string, defaultValue, type?: PublishTypes, description?: string, set?: string[] | (() => string[] | Array<{ value: string, text: string }>) | IPublishExt, ext: IPublishExt = {}): void {\r\n        if (GEN_PUB_STUBS) {\r\n            if (PropertyExt.prevClassID !== (this as any).constructor.name) {\r\n                PropertyExt.prevClassID = (this as any).constructor.name;\r\n                console.info(`//  ${PropertyExt.prevClassID}  ---`);\r\n            }\r\n            let jsType: string = type;\r\n            switch (type) {\r\n                case \"set\":\r\n                case \"html-color\":\r\n                    jsType = \"string\";\r\n                    break;\r\n                case \"array\":\r\n                case \"widgetArray\":\r\n                case \"propertyArray\":\r\n                    jsType = \"any[]\";\r\n                    break;\r\n            }\r\n            console.info(`    ${id}(): ${jsType};\r\n    ${id}(_: ${jsType}): this;\r\n    ${id}_exists(): boolean;`);\r\n        }\r\n        if (id.indexOf(\"_\") === 0) {\r\n            id = id.slice(1);\r\n        }\r\n        if (this[__meta_ + id] !== undefined && !ext.override) {\r\n            throw new Error(id + \" is already published.\");\r\n        }\r\n        const meta = this[__meta_ + id] = new Meta(id, defaultValue, type, description, set, ext);\r\n        if (meta.ext.internal) {\r\n            this[__private_ + id] = true;\r\n        }\r\n        Object.defineProperty(this, __prop_ + id, {\r\n            set(_) {\r\n                if (_ === undefined) {\r\n                    _ = null;\r\n                } else if (_ === \"\" && meta.ext.optional) {\r\n                    _ = null;\r\n                } else if (_ !== null) {\r\n                    _ = meta.checkedAssign.call(this, _);\r\n                }\r\n                this.broadcast(id, _, this[__prop_data_ + id]);\r\n                if (_ === null) {\r\n                    delete this[__prop_data_ + id];\r\n                } else {\r\n                    this[__prop_data_ + id] = _;\r\n                }\r\n            },\r\n\r\n            get() {\r\n                if (this[id + \"_disabled\"]()) return this[id + \"_default\"]();\r\n                return this[__prop_data_ + id] !== undefined ? this[__prop_data_ + id] : this[id + \"_default\"]();\r\n            },\r\n            configurable: true\r\n        });\r\n        if (this[id]) {\r\n        } else {\r\n            if (type === \"propertyArray\") {\r\n                this[id] = function (_?) {\r\n                    if (!arguments.length) return this[__prop_ + id];\r\n                    this[__prop_ + id] = _.map(item => {\r\n                        if (!meta.ext.noDeserialize && meta.ext.autoExpand && !(item instanceof meta.ext.autoExpand)) {\r\n                            item = new meta.ext.autoExpand().deserialize(item);\r\n                        }\r\n                        item.owner(this);\r\n                        return item;\r\n                    });\r\n                    return this;\r\n                };\r\n            } else {\r\n                this[id] = function (_?) {\r\n                    if (!arguments.length) return this[__prop_ + id] ?? this[id + \"_default\"]();\r\n                    this[__prop_ + id] = _;\r\n                    return this;\r\n                };\r\n            }\r\n        }\r\n        this[id + \"_disabled\"] = function () {\r\n            return ext && ext.disable ? !!ext.disable(this) : false;\r\n        };\r\n        this[id + \"_hidden\"] = function () {\r\n            return ext && ext.hidden ? !!ext.hidden(this) : false;\r\n        };\r\n        this[id + \"_valid\"] = function () {\r\n            return ext && ext.validate ? this[id + \"_disabled\"]() || (ext.optional && !this[id + \"_exists\"]()) || (ext.autoExpand && !this.valid()) || !!ext.validate(this) : true;\r\n        };\r\n        this[id + \"_modified\"] = function () {\r\n            if (type === \"propertyArray\") {\r\n                return this[__prop_data_ + id] && (this[__prop_data_ + id].some(item => item.valid()));\r\n            }\r\n            return this[__prop_data_ + id] !== undefined;\r\n        };\r\n        this[id + \"_exists\"] = function () {\r\n            if (this[__prop_data_ + id] != null && !(this[__prop_data_ + id] === \"\" && ext.optional === true)) return true;\r\n            if (this[id + \"_default\"]() != null && !(this[id + \"_default\"]() === \"\" && ext.optional === true)) return true;\r\n            return false;\r\n        };\r\n        this[id + \"_default\"] = function (_?) {\r\n            if (!arguments.length) return this[__default_ + id] !== undefined ? this[__default_ + id] : meta.defaultValue;\r\n            if (_ === \"\") {\r\n                _ = null;\r\n            }\r\n            if (_ === null) {\r\n                delete this[__default_ + id];\r\n            } else {\r\n                this[__default_ + id] = _;\r\n            }\r\n            return this;\r\n        };\r\n        this[id + \"_reset\"] = function () {\r\n            switch (type) {\r\n                case \"widget\":\r\n                    if (this[__prop_data_ + id]) {\r\n                        this[__prop_data_ + id].target(null);\r\n                    }\r\n                    break;\r\n                case \"widgetArray\":\r\n                    if (this[__prop_data_ + id]) {\r\n                        this[__prop_data_ + id].forEach(function (widget) {\r\n                            widget.target(null);\r\n                        });\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            switch (type) {\r\n                case \"array\":\r\n                case \"widgetArray\":\r\n                case \"propertyArray\":\r\n                    this[__default_ + id] = this[id + \"_default\"]().map(function (row) { return row; });\r\n                    break;\r\n            }\r\n            delete this[__prop_data_ + id];\r\n            return this;\r\n        };\r\n        this[id + \"_options\"] = function () {\r\n            if (typeof set === \"function\") {\r\n                const retVal = meta.ext.optional ? [null] : [];\r\n                return retVal.concat(set.apply(this, arguments));\r\n            }\r\n            return set;\r\n        };\r\n    }\r\n\r\n    publishWidget(prefix, WidgetType, id) {\r\n        for (const key in WidgetType.prototype) {\r\n            if (key.indexOf(\"__meta\") === 0) {\r\n                const publishItem = WidgetType.prototype[key];\r\n                this.publishProxy(prefix + __prop_data_ + publishItem.id, id, publishItem.method || publishItem.id);\r\n            }\r\n        }\r\n    }\r\n\r\n    publishProxy(id: string, proxy, method?, defaultValue?) {\r\n        method = method || id;\r\n        if (this[__meta_ + id] !== undefined) {\r\n            throw new Error(id + \" is already published.\");\r\n        }\r\n        this[__meta_ + id] = new MetaProxy(id, proxy, method, defaultValue);\r\n        this[id] = function (_?) {\r\n            if (!arguments.length) return defaultValue === undefined || this[id + \"_modified\"]() ? this[proxy][method]() : defaultValue;\r\n            if (defaultValue !== undefined && _ === defaultValue) {\r\n                this[proxy][method + \"_reset\"]();\r\n            } else {\r\n                this[proxy][method](_);\r\n            }\r\n            return this;\r\n        };\r\n        this[id + \"_disabled\"] = function () {\r\n            return this[proxy][method + \"_disabled\"]();\r\n        };\r\n        this[id + \"_modified\"] = function () {\r\n            return this[proxy][method + \"_modified\"]() && (defaultValue === undefined || this[proxy][method]() !== defaultValue);\r\n        };\r\n        this[id + \"_exists\"] = function () {\r\n            return this[proxy][method + \"_exists\"]();\r\n        };\r\n        this[id + \"_default\"] = function (_?) {\r\n            if (!arguments.length) return this[proxy][method + \"_default\"]();\r\n            this[proxy][method + \"_default\"](_);\r\n            return this;\r\n        };\r\n        this[id + \"_reset\"] = function () {\r\n            this[proxy][method + \"_reset\"]();\r\n            return this;\r\n        };\r\n        this[id + \"_options\"] = function () {\r\n            return this[proxy][method + \"_options\"]();\r\n        };\r\n    }\r\n\r\n    monitorProperty(propID: string, func: (id: string, newVal: any, oldVal: any) => void): IMonitorHandle {\r\n        const meta = this.publishedProperty(propID);\r\n        switch (meta.type) {\r\n            case \"proxy\":\r\n                if (this[meta.proxy]) {\r\n                    return this[meta.proxy].monitorProperty(meta.method, function (_key, newVal, oldVal) {\r\n                        func(meta.id, newVal, oldVal);\r\n                    });\r\n                } else {\r\n                    return {\r\n                        remove: () => { }\r\n                    };\r\n                }\r\n            default:\r\n                const idx = this._watchArrIdx++;\r\n                this._watchArr[idx] = { propertyID: propID, callback: func };\r\n                const context = this;\r\n                return {\r\n                    remove: () => {\r\n                        delete context._watchArr[idx];\r\n                    }\r\n                };\r\n        }\r\n    }\r\n\r\n    monitor(func: (id: string, newVal: any, oldVal: any, source: PropertyExt) => void): { remove: () => void } {\r\n        const idx = this._watchArrIdx++;\r\n        this._watchArr[idx] = { propertyID: undefined, callback: func };\r\n        return {\r\n            remove: () => {\r\n                delete this._watchArr[idx];\r\n            }\r\n        };\r\n    }\r\n\r\n    broadcast(key, newVal, oldVal, source?) {\r\n        source = source || this;\r\n        if (!deepEqual(newVal, oldVal)) {\r\n            for (const idx in this._watchArr) {\r\n                const monitor = this._watchArr[idx];\r\n                if ((monitor.propertyID === undefined || monitor.propertyID === key) && monitor.callback) {\r\n                    // console.log(`${this.classID()}->broadcast(${key}, ${newVal}, ${oldVal})`);\r\n                    setTimeout(function (monitor2) {\r\n                        monitor2.callback(key, newVal, oldVal, source);\r\n                    }, 0, monitor);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    applyTheme(theme) {\r\n        if (!theme) {\r\n            return;\r\n        }\r\n        const clsArr = this._class.split(\" \");\r\n        for (const i in clsArr) {\r\n            if (theme[clsArr[i]]) {\r\n                for (const paramName in theme[clsArr[i]]) {\r\n                    if (paramName === \"overrideTags\" && theme[clsArr[i]][paramName] instanceof Object) {\r\n                        for (const param in theme[clsArr[i]][paramName]) {\r\n                            if (this.publishedProperty(paramName).ext) {\r\n                                this.publishedProperty(paramName).ext.tags = theme[clsArr[i]][paramName][param];\r\n                            }\r\n                        }\r\n                        continue;\r\n                    }\r\n                    if (this.publishedProperty(paramName)) {\r\n                        this.publishedProperty(paramName).defaultValue = theme[clsArr[i]][paramName];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    copyPropsTo(other: PropertyExt, ignore: string[] = []): this {\r\n        this.publishedProperties(false).filter(meta => ignore.indexOf(meta.id) < 0).forEach(meta => {\r\n            if (this[meta.id + \"_exists\"]()) {\r\n                other[meta.id](this[meta.id]());\r\n            } else {\r\n                other[meta.id + \"_reset\"]();\r\n            }\r\n        });\r\n        return this;\r\n    }\r\n\r\n    private metaHash(meta): string {\r\n        if (this[meta.id + \"_exists\"]()) {\r\n            let value = this[meta.id]();\r\n            const proxyMeta = this.resolvePublishedProxy(meta);\r\n            switch (proxyMeta.type) {\r\n                case \"widget\":\r\n                    value = value.hashSum();\r\n                    break;\r\n                case \"widgetArray\":\r\n                case \"propertyArray\":\r\n                    value = hashSum(value.map(v => v.hashSum()));\r\n                    break;\r\n                default:\r\n            }\r\n            return value;\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    propertyHash(properties: string[] = [], more = {}): string {\r\n        const props: { [key: string]: any } = more;\r\n        this.publishedProperties(false).filter(meta => properties.length === 0 || properties.indexOf(meta.id) >= 0).forEach(meta => {\r\n            props[meta.id] = this.metaHash(meta);\r\n        });\r\n        return hashSum(props);\r\n    }\r\n\r\n    hashSum(ignore: string[] = [], more = {}): string {\r\n        ignore = [...ignore, \"classed\"];\r\n        const props: { [key: string]: any } = more;\r\n        this.publishedProperties(false).filter(meta => ignore.indexOf(meta.id) < 0).forEach(meta => {\r\n            props[meta.id] = this.metaHash(meta);\r\n        });\r\n        return hashSum(props);\r\n    }\r\n\r\n    //  Events  ---\r\n    on(eventID, func, stopPropagation = false): this {\r\n        const context = this;\r\n        this.overrideMethod(eventID, function (...args: any[]) {\r\n            const origFunc = args[args.length - 1];\r\n            let retVal;\r\n            if (stopPropagation) {\r\n                const event = args.find(arg => arg && typeof arg.stopPropagation === \"function\");\r\n                event?.stopPropagation();\r\n                [].push.call(args, origFunc);\r\n            } else {\r\n                retVal = origFunc.apply(context, args);\r\n            }\r\n            const retVal2 = func.apply(context, args);\r\n            return retVal2 !== undefined ? retVal2 : retVal;\r\n        });\r\n        return this;\r\n    }\r\n}\r\nPropertyExt.prototype._class += \" common_PropertyExt\";\r\n","import { isArray } from \"@hpcc-js/util\";\r\nimport { ascending as d3Ascending, descending as d3Descending } from \"d3-array\";\r\nimport { select as d3Select, Selection as d3SelectionT } from \"d3-selection\";\r\nimport { timeFormat as d3TimeFormat } from \"d3-time-format\";\r\n\r\nfunction _naturalSort(a, b, order, idx, sortCaseSensitive) {\r\n    const re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi;\r\n    const sre = /(^[ ]*|[ ]*$)/g;\r\n    const dre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/;\r\n    const ore = /^0/;\r\n    const i = function (s) { return !sortCaseSensitive && (\"\" + s).toLowerCase() || \"\" + s; };\r\n    // convert all to strings strip whitespace\r\n    const x = i(idx ? a[idx] : a).replace(sre, \"\") || \"\";\r\n    const y = i(idx ? b[idx] : b).replace(sre, \"\") || \"\";\r\n    // chunk/tokenize\r\n    const xN = x.replace(re, \"\\0$1\\0\").replace(/\\0$/, \"\").replace(/^\\0/, \"\").split(\"\\0\");\r\n    const yN = y.replace(re, \"\\0$1\\0\").replace(/\\0$/, \"\").replace(/^\\0/, \"\").split(\"\\0\");\r\n    // numeric or date detection\r\n    const xD = (xN.length !== 1 && x.match(dre) && Date.parse(x));\r\n    const yD = xD && y.match(dre) && Date.parse(y) || null;\r\n    let oFxNcL;\r\n    let oFyNcL;\r\n    // first try and sort Hex codes or Dates\r\n    if (yD) {\r\n        if (xD < yD) {\r\n            return order === \"ascending\" ? -1 : 1;\r\n        } else if (xD > yD) {\r\n            return order === \"ascending\" ? 1 : -1;\r\n        }\r\n    }\r\n    // natural sorting through split numeric strings and default strings\r\n    for (let cLoc = 0, numS = Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n        // find floats not starting with \"0\", string or 0 if not defined (Clint Priest)\r\n        oFxNcL = !(xN[cLoc] || \"\").match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n        oFyNcL = !(yN[cLoc] || \"\").match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n        // handle numeric vs string comparison - number < string - (Kyle Adams)\r\n        if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {\r\n            return (isNaN(oFxNcL)) ? 1 : -1;\r\n        } else if (typeof oFxNcL !== typeof oFyNcL) {\r\n            // rely on string comparison if different types - i.e. \"02\" < 2 != \"02\" < \"2\"\r\n            oFxNcL += \"\";\r\n            oFyNcL += \"\";\r\n        }\r\n        if (oFxNcL < oFyNcL) { return order === \"ascending\" ? -1 : 1; }\r\n        if (oFxNcL > oFyNcL) { return order === \"ascending\" ? 1 : -1; }\r\n    }\r\n    return 0;\r\n}\r\n\r\n//  Selection Bag(s)  ---\r\nexport class SelectionBase {\r\n    protected __widget;\r\n    private __svgGlowID: string;\r\n\r\n    constructor(widget) {\r\n        //  Can't import Widget or SVGWidget as it breaks AMD loading...\r\n        this.__widget = widget;\r\n    }\r\n\r\n    svgGlowID(): string {\r\n        if (this.__svgGlowID === undefined) {\r\n            this.__svgGlowID = this.__widget.svgGlowID && this.__widget.svgGlowID() || \"\";\r\n        }\r\n        return this.__svgGlowID;\r\n    }\r\n}\r\n\r\nexport interface ISelectionItem {\r\n    _id: string;\r\n    element(): d3SelectionT<Element, any, Element, any>;\r\n}\r\n\r\nexport class SelectionBag extends SelectionBase {\r\n    items: { [key: string]: ISelectionItem };\r\n    constructor(widget) {\r\n        super(widget);\r\n        this.items = {};\r\n    }\r\n\r\n    clear() {\r\n        for (const key in this.items) {\r\n            this.items[key].element()\r\n                .classed(\"selected\", false)\r\n                .attr(\"filter\", null)\r\n                ;\r\n        }\r\n        this.items = {};\r\n    }\r\n\r\n    isEmpty() {\r\n        for (const _key in this.items) { // jshint ignore:line\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    append(item: ISelectionItem) {\r\n        this.items[item._id] = item;\r\n        item.element()\r\n            .classed(\"selected\", true)\r\n            .attr(\"filter\", this.svgGlowID() ? `url(#${this.svgGlowID()})` : null)\r\n            ;\r\n    }\r\n\r\n    remove(item: ISelectionItem) {\r\n        this.items[item._id].element()\r\n            .classed(\"selected\", false)\r\n            .attr(\"filter\", null)\r\n            ;\r\n        delete this.items[item._id];\r\n    }\r\n\r\n    isSelected(item: ISelectionItem) {\r\n        return this.items[item._id] !== undefined;\r\n    }\r\n\r\n    get() {\r\n        const retVal = [];\r\n        for (const key in this.items) {\r\n            retVal.push(this.items[key]);\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    set(itemArray: ISelectionItem[]) {\r\n        this.clear();\r\n        itemArray.forEach(function (item) {\r\n            this.append(item);\r\n        }, this);\r\n    }\r\n\r\n    click = function (item: ISelectionItem, evt) {\r\n        if (evt.ctrlKey) {\r\n            if (this.items[item._id]) {\r\n                this.remove(item);\r\n            } else {\r\n                this.append(item);\r\n            }\r\n        } else {\r\n            this.clear();\r\n            this.append(item);\r\n        }\r\n    };\r\n}\r\n\r\nexport class SimpleSelection extends SelectionBase {\r\n    constructor(widget, widgetElement, skipBringToTop?) {\r\n        super(widget);\r\n        this.widgetElement(widgetElement);\r\n        this.skipBringToTop(skipBringToTop);\r\n    }\r\n\r\n    _widgetElement;\r\n    widgetElement(_?) {\r\n        if (!arguments.length) return this._widgetElement;\r\n        this._widgetElement = _;\r\n        return this;\r\n    }\r\n\r\n    _skipBringToTop;\r\n    skipBringToTop(_?) {\r\n        if (!arguments.length) return this._skipBringToTop;\r\n        this._skipBringToTop = _;\r\n        return this;\r\n    }\r\n\r\n    _initialSelection: (d) => boolean;\r\n    enter(elements) {\r\n        const context = this;\r\n        elements\r\n            .each(function (d) {\r\n                const selected: boolean = context._initialSelection ? context._initialSelection(d.data) : false;\r\n                d3Select(this)\r\n                    .classed(\"selected\", selected)\r\n                    .classed(\"deselected\", !selected)\r\n                    .attr(\"filter\", context.svgGlowID() && selected ? `url(#${context.svgGlowID()})` : null)\r\n                    ;\r\n            })\r\n            .on(\"click.SimpleSelection\", function () {\r\n                context.click(this);\r\n            })\r\n            .on(\"mouseover.SimpleSelection\", function () {\r\n                context.mouseOver(this);\r\n            })\r\n            .on(\"mouseout.SimpleSelection\", function () {\r\n                context.mouseOut(this);\r\n            })\r\n            ;\r\n    }\r\n    click(domNode): boolean {\r\n        if (!this._skipBringToTop) {\r\n            domNode.parentNode.appendChild(domNode);\r\n        }\r\n        const element = d3Select(domNode);\r\n        const wasSelected = element.classed(\"selected\");\r\n        this._widgetElement.selectAll(\".selected\")\r\n            .classed(\"selected\", false)\r\n            .classed(\"deselected\", true)\r\n            .attr(\"filter\", null)\r\n            ;\r\n        if (!wasSelected) {\r\n            element\r\n                .classed(\"selected\", true)\r\n                .classed(\"deselected\", false)\r\n                .attr(\"filter\", this.svgGlowID() ? `url(#${this.svgGlowID()})` : null)\r\n                ;\r\n        }\r\n        return !wasSelected;\r\n    }\r\n    mouseOver(domNode) {\r\n        d3Select(domNode)\r\n            .classed(\"over\", true)\r\n            ;\r\n    }\r\n    mouseOut(domNode) {\r\n        d3Select(domNode)\r\n            .classed(\"over\", null)\r\n            ;\r\n    }\r\n    selected(domNode) {\r\n        return d3Select(domNode).classed(\"selected\");\r\n    }\r\n    selection(_?) {\r\n        if (!arguments.length) {\r\n            return this.selection2().map(row => JSON.stringify(row));\r\n        }\r\n        this.selection2(d => _.indexOf(JSON.stringify(d)) >= 0);\r\n        return this;\r\n    }\r\n    selection2(): any[];\r\n    selection2(isSelected: (d) => boolean): this;\r\n    selection2(isSelected?: (d) => boolean): any[] | this {\r\n        if (!arguments.length) {\r\n            const retVal: any[] = [];\r\n            if (this._widgetElement) {\r\n                this._widgetElement.selectAll(\".selected\")\r\n                    .each(d => retVal.push(d))\r\n                    ;\r\n            }\r\n            return retVal;\r\n        }\r\n        if (this._widgetElement) {\r\n            const context = this;\r\n            this._widgetElement.selectAll(\".selected,.deselected\")\r\n                .each(function (d) {\r\n                    const selected = isSelected(d);\r\n                    d3Select(this)\r\n                        .classed(\"selected\", selected)\r\n                        .classed(\"deselected\", !selected)\r\n                        .attr(\"filter\", (selected && context.svgGlowID()) ? `url(#${context.svgGlowID()})` : null)\r\n                        ;\r\n                    if (selected && !context._skipBringToTop) {\r\n                        safeRaise(this);\r\n                    }\r\n                })\r\n                ;\r\n        } else {\r\n            this._initialSelection = isSelected;\r\n        }\r\n        return this;\r\n    }\r\n}\r\n\r\nexport function SimpleSelectionMixin(skipBringToTop) {\r\n    this._selection = new SimpleSelection(this, null, skipBringToTop);\r\n}\r\n\r\nSimpleSelectionMixin.prototype.serializeState = function () {\r\n    return {\r\n        selection: this._selection.selection(),\r\n        data: this.data()\r\n    };\r\n};\r\n\r\nSimpleSelectionMixin.prototype.deserializeState = function (state) {\r\n    if (state) {\r\n        this._selection.selection(state.selection);\r\n        if (state.data) {\r\n            this.data(state.data);\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\nconst perf: any = window.performance;\r\nconst now = perf && (perf.now || perf.mozNow || perf.msNow || perf.oNow || perf.webkitNow);\r\n\r\nconst faCharMap = { \"fa-500px\": \"\", \"fa-address-book\": \"\", \"fa-address-book-o\": \"\", \"fa-address-card\": \"\", \"fa-address-card-o\": \"\", \"fa-adjust\": \"\", \"fa-adn\": \"\", \"fa-align-center\": \"\", \"fa-align-justify\": \"\", \"fa-align-left\": \"\", \"fa-align-right\": \"\", \"fa-amazon\": \"\", \"fa-ambulance\": \"\", \"fa-american-sign-language-interpreting\": \"\", \"fa-anchor\": \"\", \"fa-android\": \"\", \"fa-angellist\": \"\", \"fa-angle-double-down\": \"\", \"fa-angle-double-left\": \"\", \"fa-angle-double-right\": \"\", \"fa-angle-double-up\": \"\", \"fa-angle-down\": \"\", \"fa-angle-left\": \"\", \"fa-angle-right\": \"\", \"fa-angle-up\": \"\", \"fa-apple\": \"\", \"fa-archive\": \"\", \"fa-area-chart\": \"\", \"fa-arrow-circle-down\": \"\", \"fa-arrow-circle-left\": \"\", \"fa-arrow-circle-o-down\": \"\", \"fa-arrow-circle-o-left\": \"\", \"fa-arrow-circle-o-right\": \"\", \"fa-arrow-circle-o-up\": \"\", \"fa-arrow-circle-right\": \"\", \"fa-arrow-circle-up\": \"\", \"fa-arrow-down\": \"\", \"fa-arrow-left\": \"\", \"fa-arrow-right\": \"\", \"fa-arrow-up\": \"\", \"fa-arrows\": \"\", \"fa-arrows-alt\": \"\", \"fa-arrows-h\": \"\", \"fa-arrows-v\": \"\", \"fa-asl-interpreting\": \"\", \"fa-assistive-listening-systems\": \"\", \"fa-asterisk\": \"\", \"fa-at\": \"\", \"fa-audio-description\": \"\", \"fa-automobile\": \"\", \"fa-backward\": \"\", \"fa-balance-scale\": \"\", \"fa-ban\": \"\", \"fa-bandcamp\": \"\", \"fa-bank\": \"\", \"fa-bar-chart\": \"\", \"fa-bar-chart-o\": \"\", \"fa-barcode\": \"\", \"fa-bars\": \"\", \"fa-bath\": \"\", \"fa-bathtub\": \"\", \"fa-battery\": \"\", \"fa-battery-0\": \"\", \"fa-battery-1\": \"\", \"fa-battery-2\": \"\", \"fa-battery-3\": \"\", \"fa-battery-4\": \"\", \"fa-battery-empty\": \"\", \"fa-battery-full\": \"\", \"fa-battery-half\": \"\", \"fa-battery-quarter\": \"\", \"fa-battery-three-quarters\": \"\", \"fa-bed\": \"\", \"fa-beer\": \"\", \"fa-behance\": \"\", \"fa-behance-square\": \"\", \"fa-bell\": \"\", \"fa-bell-o\": \"\", \"fa-bell-slash\": \"\", \"fa-bell-slash-o\": \"\", \"fa-bicycle\": \"\", \"fa-binoculars\": \"\", \"fa-birthday-cake\": \"\", \"fa-bitbucket\": \"\", \"fa-bitbucket-square\": \"\", \"fa-bitcoin\": \"\", \"fa-black-tie\": \"\", \"fa-blind\": \"\", \"fa-bluetooth\": \"\", \"fa-bluetooth-b\": \"\", \"fa-bold\": \"\", \"fa-bolt\": \"\", \"fa-bomb\": \"\", \"fa-book\": \"\", \"fa-bookmark\": \"\", \"fa-bookmark-o\": \"\", \"fa-braille\": \"\", \"fa-briefcase\": \"\", \"fa-btc\": \"\", \"fa-bug\": \"\", \"fa-building\": \"\", \"fa-building-o\": \"\", \"fa-bullhorn\": \"\", \"fa-bullseye\": \"\", \"fa-bus\": \"\", \"fa-buysellads\": \"\", \"fa-cab\": \"\", \"fa-calculator\": \"\", \"fa-calendar\": \"\", \"fa-calendar-check-o\": \"\", \"fa-calendar-minus-o\": \"\", \"fa-calendar-o\": \"\", \"fa-calendar-plus-o\": \"\", \"fa-calendar-times-o\": \"\", \"fa-camera\": \"\", \"fa-camera-retro\": \"\", \"fa-car\": \"\", \"fa-caret-down\": \"\", \"fa-caret-left\": \"\", \"fa-caret-right\": \"\", \"fa-caret-square-o-down\": \"\", \"fa-caret-square-o-left\": \"\", \"fa-caret-square-o-right\": \"\", \"fa-caret-square-o-up\": \"\", \"fa-caret-up\": \"\", \"fa-cart-arrow-down\": \"\", \"fa-cart-plus\": \"\", \"fa-cc\": \"\", \"fa-cc-amex\": \"\", \"fa-cc-diners-club\": \"\", \"fa-cc-discover\": \"\", \"fa-cc-jcb\": \"\", \"fa-cc-mastercard\": \"\", \"fa-cc-paypal\": \"\", \"fa-cc-stripe\": \"\", \"fa-cc-visa\": \"\", \"fa-certificate\": \"\", \"fa-chain\": \"\", \"fa-chain-broken\": \"\", \"fa-check\": \"\", \"fa-check-circle\": \"\", \"fa-check-circle-o\": \"\", \"fa-check-square\": \"\", \"fa-check-square-o\": \"\", \"fa-chevron-circle-down\": \"\", \"fa-chevron-circle-left\": \"\", \"fa-chevron-circle-right\": \"\", \"fa-chevron-circle-up\": \"\", \"fa-chevron-down\": \"\", \"fa-chevron-left\": \"\", \"fa-chevron-right\": \"\", \"fa-chevron-up\": \"\", \"fa-child\": \"\", \"fa-chrome\": \"\", \"fa-circle\": \"\", \"fa-circle-o\": \"\", \"fa-circle-o-notch\": \"\", \"fa-circle-thin\": \"\", \"fa-clipboard\": \"\", \"fa-clock-o\": \"\", \"fa-clone\": \"\", \"fa-close\": \"\", \"fa-cloud\": \"\", \"fa-cloud-download\": \"\", \"fa-cloud-upload\": \"\", \"fa-cny\": \"\", \"fa-code\": \"\", \"fa-code-fork\": \"\", \"fa-codepen\": \"\", \"fa-codiepie\": \"\", \"fa-coffee\": \"\", \"fa-cog\": \"\", \"fa-cogs\": \"\", \"fa-columns\": \"\", \"fa-comment\": \"\", \"fa-comment-o\": \"\", \"fa-commenting\": \"\", \"fa-commenting-o\": \"\", \"fa-comments\": \"\", \"fa-comments-o\": \"\", \"fa-compass\": \"\", \"fa-compress\": \"\", \"fa-connectdevelop\": \"\", \"fa-contao\": \"\", \"fa-copy\": \"\", \"fa-copyright\": \"\", \"fa-creative-commons\": \"\", \"fa-credit-card\": \"\", \"fa-credit-card-alt\": \"\", \"fa-crop\": \"\", \"fa-crosshairs\": \"\", \"fa-css3\": \"\", \"fa-cube\": \"\", \"fa-cubes\": \"\", \"fa-cut\": \"\", \"fa-cutlery\": \"\", \"fa-dashboard\": \"\", \"fa-dashcube\": \"\", \"fa-database\": \"\", \"fa-deaf\": \"\", \"fa-deafness\": \"\", \"fa-dedent\": \"\", \"fa-delicious\": \"\", \"fa-desktop\": \"\", \"fa-deviantart\": \"\", \"fa-diamond\": \"\", \"fa-digg\": \"\", \"fa-dollar\": \"\", \"fa-dot-circle-o\": \"\", \"fa-download\": \"\", \"fa-dribbble\": \"\", \"fa-drivers-license\": \"\", \"fa-drivers-license-o\": \"\", \"fa-dropbox\": \"\", \"fa-drupal\": \"\", \"fa-edge\": \"\", \"fa-edit\": \"\", \"fa-eercast\": \"\", \"fa-eject\": \"\", \"fa-ellipsis-h\": \"\", \"fa-ellipsis-v\": \"\", \"fa-empire\": \"\", \"fa-envelope\": \"\", \"fa-envelope-o\": \"\", \"fa-envelope-open\": \"\", \"fa-envelope-open-o\": \"\", \"fa-envelope-square\": \"\", \"fa-envira\": \"\", \"fa-eraser\": \"\", \"fa-etsy\": \"\", \"fa-eur\": \"\", \"fa-euro\": \"\", \"fa-exchange\": \"\", \"fa-exclamation\": \"\", \"fa-exclamation-circle\": \"\", \"fa-exclamation-triangle\": \"\", \"fa-expand\": \"\", \"fa-expeditedssl\": \"\", \"fa-external-link\": \"\", \"fa-external-link-square\": \"\", \"fa-eye\": \"\", \"fa-eye-slash\": \"\", \"fa-eyedropper\": \"\", \"fa-fa\": \"\", \"fa-facebook\": \"\", \"fa-facebook-f\": \"\", \"fa-facebook-official\": \"\", \"fa-facebook-square\": \"\", \"fa-fast-backward\": \"\", \"fa-fast-forward\": \"\", \"fa-fax\": \"\", \"fa-feed\": \"\", \"fa-female\": \"\", \"fa-fighter-jet\": \"\", \"fa-file\": \"\", \"fa-file-archive-o\": \"\", \"fa-file-audio-o\": \"\", \"fa-file-code-o\": \"\", \"fa-file-excel-o\": \"\", \"fa-file-image-o\": \"\", \"fa-file-movie-o\": \"\", \"fa-file-o\": \"\", \"fa-file-pdf-o\": \"\", \"fa-file-photo-o\": \"\", \"fa-file-picture-o\": \"\", \"fa-file-powerpoint-o\": \"\", \"fa-file-sound-o\": \"\", \"fa-file-text\": \"\", \"fa-file-text-o\": \"\", \"fa-file-video-o\": \"\", \"fa-file-word-o\": \"\", \"fa-file-zip-o\": \"\", \"fa-files-o\": \"\", \"fa-film\": \"\", \"fa-filter\": \"\", \"fa-fire\": \"\", \"fa-fire-extinguisher\": \"\", \"fa-firefox\": \"\", \"fa-first-order\": \"\", \"fa-flag\": \"\", \"fa-flag-checkered\": \"\", \"fa-flag-o\": \"\", \"fa-flash\": \"\", \"fa-flask\": \"\", \"fa-flickr\": \"\", \"fa-floppy-o\": \"\", \"fa-folder\": \"\", \"fa-folder-o\": \"\", \"fa-folder-open\": \"\", \"fa-folder-open-o\": \"\", \"fa-font\": \"\", \"fa-font-awesome\": \"\", \"fa-fonticons\": \"\", \"fa-fort-awesome\": \"\", \"fa-forumbee\": \"\", \"fa-forward\": \"\", \"fa-foursquare\": \"\", \"fa-free-code-camp\": \"\", \"fa-frown-o\": \"\", \"fa-futbol-o\": \"\", \"fa-gamepad\": \"\", \"fa-gavel\": \"\", \"fa-gbp\": \"\", \"fa-ge\": \"\", \"fa-gear\": \"\", \"fa-gears\": \"\", \"fa-genderless\": \"\", \"fa-get-pocket\": \"\", \"fa-gg\": \"\", \"fa-gg-circle\": \"\", \"fa-gift\": \"\", \"fa-git\": \"\", \"fa-git-square\": \"\", \"fa-github\": \"\", \"fa-github-alt\": \"\", \"fa-github-square\": \"\", \"fa-gitlab\": \"\", \"fa-gittip\": \"\", \"fa-glass\": \"\", \"fa-glide\": \"\", \"fa-glide-g\": \"\", \"fa-globe\": \"\", \"fa-google\": \"\", \"fa-google-plus\": \"\", \"fa-google-plus-circle\": \"\", \"fa-google-plus-official\": \"\", \"fa-google-plus-square\": \"\", \"fa-google-wallet\": \"\", \"fa-graduation-cap\": \"\", \"fa-gratipay\": \"\", \"fa-grav\": \"\", \"fa-group\": \"\", \"fa-h-square\": \"\", \"fa-hacker-news\": \"\", \"fa-hand-grab-o\": \"\", \"fa-hand-lizard-o\": \"\", \"fa-hand-o-down\": \"\", \"fa-hand-o-left\": \"\", \"fa-hand-o-right\": \"\", \"fa-hand-o-up\": \"\", \"fa-hand-paper-o\": \"\", \"fa-hand-peace-o\": \"\", \"fa-hand-pointer-o\": \"\", \"fa-hand-rock-o\": \"\", \"fa-hand-scissors-o\": \"\", \"fa-hand-spock-o\": \"\", \"fa-hand-stop-o\": \"\", \"fa-handshake-o\": \"\", \"fa-hard-of-hearing\": \"\", \"fa-hashtag\": \"\", \"fa-hdd-o\": \"\", \"fa-header\": \"\", \"fa-headphones\": \"\", \"fa-heart\": \"\", \"fa-heart-o\": \"\", \"fa-heartbeat\": \"\", \"fa-history\": \"\", \"fa-home\": \"\", \"fa-hospital-o\": \"\", \"fa-hotel\": \"\", \"fa-hourglass\": \"\", \"fa-hourglass-1\": \"\", \"fa-hourglass-2\": \"\", \"fa-hourglass-3\": \"\", \"fa-hourglass-end\": \"\", \"fa-hourglass-half\": \"\", \"fa-hourglass-o\": \"\", \"fa-hourglass-start\": \"\", \"fa-houzz\": \"\", \"fa-html5\": \"\", \"fa-i-cursor\": \"\", \"fa-id-badge\": \"\", \"fa-id-card\": \"\", \"fa-id-card-o\": \"\", \"fa-ils\": \"\", \"fa-image\": \"\", \"fa-imdb\": \"\", \"fa-inbox\": \"\", \"fa-indent\": \"\", \"fa-industry\": \"\", \"fa-info\": \"\", \"fa-info-circle\": \"\", \"fa-inr\": \"\", \"fa-instagram\": \"\", \"fa-institution\": \"\", \"fa-internet-explorer\": \"\", \"fa-intersex\": \"\", \"fa-ioxhost\": \"\", \"fa-italic\": \"\", \"fa-joomla\": \"\", \"fa-jpy\": \"\", \"fa-jsfiddle\": \"\", \"fa-key\": \"\", \"fa-keyboard-o\": \"\", \"fa-krw\": \"\", \"fa-language\": \"\", \"fa-laptop\": \"\", \"fa-lastfm\": \"\", \"fa-lastfm-square\": \"\", \"fa-leaf\": \"\", \"fa-leanpub\": \"\", \"fa-legal\": \"\", \"fa-lemon-o\": \"\", \"fa-level-down\": \"\", \"fa-level-up\": \"\", \"fa-life-bouy\": \"\", \"fa-life-buoy\": \"\", \"fa-life-ring\": \"\", \"fa-life-saver\": \"\", \"fa-lightbulb-o\": \"\", \"fa-line-chart\": \"\", \"fa-link\": \"\", \"fa-linkedin\": \"\", \"fa-linkedin-square\": \"\", \"fa-linode\": \"\", \"fa-linux\": \"\", \"fa-list\": \"\", \"fa-list-alt\": \"\", \"fa-list-ol\": \"\", \"fa-list-ul\": \"\", \"fa-location-arrow\": \"\", \"fa-lock\": \"\", \"fa-long-arrow-down\": \"\", \"fa-long-arrow-left\": \"\", \"fa-long-arrow-right\": \"\", \"fa-long-arrow-up\": \"\", \"fa-low-vision\": \"\", \"fa-magic\": \"\", \"fa-magnet\": \"\", \"fa-mail-forward\": \"\", \"fa-mail-reply\": \"\", \"fa-mail-reply-all\": \"\", \"fa-male\": \"\", \"fa-map\": \"\", \"fa-map-marker\": \"\", \"fa-map-o\": \"\", \"fa-map-pin\": \"\", \"fa-map-signs\": \"\", \"fa-mars\": \"\", \"fa-mars-double\": \"\", \"fa-mars-stroke\": \"\", \"fa-mars-stroke-h\": \"\", \"fa-mars-stroke-v\": \"\", \"fa-maxcdn\": \"\", \"fa-meanpath\": \"\", \"fa-medium\": \"\", \"fa-medkit\": \"\", \"fa-meetup\": \"\", \"fa-meh-o\": \"\", \"fa-mercury\": \"\", \"fa-microchip\": \"\", \"fa-microphone\": \"\", \"fa-microphone-slash\": \"\", \"fa-minus\": \"\", \"fa-minus-circle\": \"\", \"fa-minus-square\": \"\", \"fa-minus-square-o\": \"\", \"fa-mixcloud\": \"\", \"fa-mobile\": \"\", \"fa-mobile-phone\": \"\", \"fa-modx\": \"\", \"fa-money\": \"\", \"fa-moon-o\": \"\", \"fa-mortar-board\": \"\", \"fa-motorcycle\": \"\", \"fa-mouse-pointer\": \"\", \"fa-music\": \"\", \"fa-navicon\": \"\", \"fa-neuter\": \"\", \"fa-newspaper-o\": \"\", \"fa-object-group\": \"\", \"fa-object-ungroup\": \"\", \"fa-odnoklassniki\": \"\", \"fa-odnoklassniki-square\": \"\", \"fa-opencart\": \"\", \"fa-openid\": \"\", \"fa-opera\": \"\", \"fa-optin-monster\": \"\", \"fa-outdent\": \"\", \"fa-pagelines\": \"\", \"fa-paint-brush\": \"\", \"fa-paper-plane\": \"\", \"fa-paper-plane-o\": \"\", \"fa-paperclip\": \"\", \"fa-paragraph\": \"\", \"fa-paste\": \"\", \"fa-pause\": \"\", \"fa-pause-circle\": \"\", \"fa-pause-circle-o\": \"\", \"fa-paw\": \"\", \"fa-paypal\": \"\", \"fa-pencil\": \"\", \"fa-pencil-square\": \"\", \"fa-pencil-square-o\": \"\", \"fa-percent\": \"\", \"fa-phone\": \"\", \"fa-phone-square\": \"\", \"fa-photo\": \"\", \"fa-picture-o\": \"\", \"fa-pie-chart\": \"\", \"fa-pied-piper\": \"\", \"fa-pied-piper-alt\": \"\", \"fa-pied-piper-pp\": \"\", \"fa-pinterest\": \"\", \"fa-pinterest-p\": \"\", \"fa-pinterest-square\": \"\", \"fa-plane\": \"\", \"fa-play\": \"\", \"fa-play-circle\": \"\", \"fa-play-circle-o\": \"\", \"fa-plug\": \"\", \"fa-plus\": \"\", \"fa-plus-circle\": \"\", \"fa-plus-square\": \"\", \"fa-plus-square-o\": \"\", \"fa-podcast\": \"\", \"fa-power-off\": \"\", \"fa-print\": \"\", \"fa-product-hunt\": \"\", \"fa-puzzle-piece\": \"\", \"fa-qq\": \"\", \"fa-qrcode\": \"\", \"fa-question\": \"\", \"fa-question-circle\": \"\", \"fa-question-circle-o\": \"\", \"fa-quora\": \"\", \"fa-quote-left\": \"\", \"fa-quote-right\": \"\", \"fa-ra\": \"\", \"fa-random\": \"\", \"fa-ravelry\": \"\", \"fa-rebel\": \"\", \"fa-recycle\": \"\", \"fa-reddit\": \"\", \"fa-reddit-alien\": \"\", \"fa-reddit-square\": \"\", \"fa-refresh\": \"\", \"fa-registered\": \"\", \"fa-remove\": \"\", \"fa-renren\": \"\", \"fa-reorder\": \"\", \"fa-repeat\": \"\", \"fa-reply\": \"\", \"fa-reply-all\": \"\", \"fa-resistance\": \"\", \"fa-retweet\": \"\", \"fa-rmb\": \"\", \"fa-road\": \"\", \"fa-rocket\": \"\", \"fa-rotate-left\": \"\", \"fa-rotate-right\": \"\", \"fa-rouble\": \"\", \"fa-rss\": \"\", \"fa-rss-square\": \"\", \"fa-rub\": \"\", \"fa-ruble\": \"\", \"fa-rupee\": \"\", \"fa-s15\": \"\", \"fa-safari\": \"\", \"fa-save\": \"\", \"fa-scissors\": \"\", \"fa-scribd\": \"\", \"fa-search\": \"\", \"fa-search-minus\": \"\", \"fa-search-plus\": \"\", \"fa-sellsy\": \"\", \"fa-send\": \"\", \"fa-send-o\": \"\", \"fa-server\": \"\", \"fa-share\": \"\", \"fa-share-alt\": \"\", \"fa-share-alt-square\": \"\", \"fa-share-square\": \"\", \"fa-share-square-o\": \"\", \"fa-shekel\": \"\", \"fa-sheqel\": \"\", \"fa-shield\": \"\", \"fa-ship\": \"\", \"fa-shirtsinbulk\": \"\", \"fa-shopping-bag\": \"\", \"fa-shopping-basket\": \"\", \"fa-shopping-cart\": \"\", \"fa-shower\": \"\", \"fa-sign-in\": \"\", \"fa-sign-language\": \"\", \"fa-sign-out\": \"\", \"fa-signal\": \"\", \"fa-signing\": \"\", \"fa-simplybuilt\": \"\", \"fa-sitemap\": \"\", \"fa-skyatlas\": \"\", \"fa-skype\": \"\", \"fa-slack\": \"\", \"fa-sliders\": \"\", \"fa-slideshare\": \"\", \"fa-smile-o\": \"\", \"fa-snapchat\": \"\", \"fa-snapchat-ghost\": \"\", \"fa-snapchat-square\": \"\", \"fa-snowflake-o\": \"\", \"fa-soccer-ball-o\": \"\", \"fa-sort\": \"\", \"fa-sort-alpha-asc\": \"\", \"fa-sort-alpha-desc\": \"\", \"fa-sort-amount-asc\": \"\", \"fa-sort-amount-desc\": \"\", \"fa-sort-asc\": \"\", \"fa-sort-desc\": \"\", \"fa-sort-down\": \"\", \"fa-sort-numeric-asc\": \"\", \"fa-sort-numeric-desc\": \"\", \"fa-sort-up\": \"\", \"fa-soundcloud\": \"\", \"fa-space-shuttle\": \"\", \"fa-spinner\": \"\", \"fa-spoon\": \"\", \"fa-spotify\": \"\", \"fa-square\": \"\", \"fa-square-o\": \"\", \"fa-stack-exchange\": \"\", \"fa-stack-overflow\": \"\", \"fa-star\": \"\", \"fa-star-half\": \"\", \"fa-star-half-empty\": \"\", \"fa-star-half-full\": \"\", \"fa-star-half-o\": \"\", \"fa-star-o\": \"\", \"fa-steam\": \"\", \"fa-steam-square\": \"\", \"fa-step-backward\": \"\", \"fa-step-forward\": \"\", \"fa-stethoscope\": \"\", \"fa-sticky-note\": \"\", \"fa-sticky-note-o\": \"\", \"fa-stop\": \"\", \"fa-stop-circle\": \"\", \"fa-stop-circle-o\": \"\", \"fa-street-view\": \"\", \"fa-strikethrough\": \"\", \"fa-stumbleupon\": \"\", \"fa-stumbleupon-circle\": \"\", \"fa-subscript\": \"\", \"fa-subway\": \"\", \"fa-suitcase\": \"\", \"fa-sun-o\": \"\", \"fa-superpowers\": \"\", \"fa-superscript\": \"\", \"fa-support\": \"\", \"fa-table\": \"\", \"fa-tablet\": \"\", \"fa-tachometer\": \"\", \"fa-tag\": \"\", \"fa-tags\": \"\", \"fa-tasks\": \"\", \"fa-taxi\": \"\", \"fa-telegram\": \"\", \"fa-television\": \"\", \"fa-tencent-weibo\": \"\", \"fa-terminal\": \"\", \"fa-text-height\": \"\", \"fa-text-width\": \"\", \"fa-th\": \"\", \"fa-th-large\": \"\", \"fa-th-list\": \"\", \"fa-themeisle\": \"\", \"fa-thermometer\": \"\", \"fa-thermometer-0\": \"\", \"fa-thermometer-1\": \"\", \"fa-thermometer-2\": \"\", \"fa-thermometer-3\": \"\", \"fa-thermometer-4\": \"\", \"fa-thermometer-empty\": \"\", \"fa-thermometer-full\": \"\", \"fa-thermometer-half\": \"\", \"fa-thermometer-quarter\": \"\", \"fa-thermometer-three-quarters\": \"\", \"fa-thumb-tack\": \"\", \"fa-thumbs-down\": \"\", \"fa-thumbs-o-down\": \"\", \"fa-thumbs-o-up\": \"\", \"fa-thumbs-up\": \"\", \"fa-ticket\": \"\", \"fa-times\": \"\", \"fa-times-circle\": \"\", \"fa-times-circle-o\": \"\", \"fa-times-rectangle\": \"\", \"fa-times-rectangle-o\": \"\", \"fa-tint\": \"\", \"fa-toggle-down\": \"\", \"fa-toggle-left\": \"\", \"fa-toggle-off\": \"\", \"fa-toggle-on\": \"\", \"fa-toggle-right\": \"\", \"fa-toggle-up\": \"\", \"fa-trademark\": \"\", \"fa-train\": \"\", \"fa-transgender\": \"\", \"fa-transgender-alt\": \"\", \"fa-trash\": \"\", \"fa-trash-o\": \"\", \"fa-tree\": \"\", \"fa-trello\": \"\", \"fa-tripadvisor\": \"\", \"fa-trophy\": \"\", \"fa-truck\": \"\", \"fa-try\": \"\", \"fa-tty\": \"\", \"fa-tumblr\": \"\", \"fa-tumblr-square\": \"\", \"fa-turkish-lira\": \"\", \"fa-tv\": \"\", \"fa-twitch\": \"\", \"fa-twitter\": \"\", \"fa-twitter-square\": \"\", \"fa-umbrella\": \"\", \"fa-underline\": \"\", \"fa-undo\": \"\", \"fa-universal-access\": \"\", \"fa-university\": \"\", \"fa-unlink\": \"\", \"fa-unlock\": \"\", \"fa-unlock-alt\": \"\", \"fa-unsorted\": \"\", \"fa-upload\": \"\", \"fa-usb\": \"\", \"fa-usd\": \"\", \"fa-user\": \"\", \"fa-user-circle\": \"\", \"fa-user-circle-o\": \"\", \"fa-user-md\": \"\", \"fa-user-o\": \"\", \"fa-user-plus\": \"\", \"fa-user-secret\": \"\", \"fa-user-times\": \"\", \"fa-users\": \"\", \"fa-vcard\": \"\", \"fa-vcard-o\": \"\", \"fa-venus\": \"\", \"fa-venus-double\": \"\", \"fa-venus-mars\": \"\", \"fa-viacoin\": \"\", \"fa-viadeo\": \"\", \"fa-viadeo-square\": \"\", \"fa-video-camera\": \"\", \"fa-vimeo\": \"\", \"fa-vimeo-square\": \"\", \"fa-vine\": \"\", \"fa-vk\": \"\", \"fa-volume-control-phone\": \"\", \"fa-volume-down\": \"\", \"fa-volume-off\": \"\", \"fa-volume-up\": \"\", \"fa-warning\": \"\", \"fa-wechat\": \"\", \"fa-weibo\": \"\", \"fa-weixin\": \"\", \"fa-whatsapp\": \"\", \"fa-wheelchair\": \"\", \"fa-wheelchair-alt\": \"\", \"fa-wifi\": \"\", \"fa-wikipedia-w\": \"\", \"fa-window-close\": \"\", \"fa-window-close-o\": \"\", \"fa-window-maximize\": \"\", \"fa-window-minimize\": \"\", \"fa-window-restore\": \"\", \"fa-windows\": \"\", \"fa-won\": \"\", \"fa-wordpress\": \"\", \"fa-wpbeginner\": \"\", \"fa-wpexplorer\": \"\", \"fa-wpforms\": \"\", \"fa-wrench\": \"\", \"fa-xing\": \"\", \"fa-xing-square\": \"\", \"fa-y-combinator\": \"\", \"fa-y-combinator-square\": \"\", \"fa-yahoo\": \"\", \"fa-yc\": \"\", \"fa-yc-square\": \"\", \"fa-yelp\": \"\", \"fa-yen\": \"\", \"fa-yoast\": \"\", \"fa-youtube\": \"\", \"fa-youtube-play\": \"\", \"fa-youtube-square\": \"\" };\r\nconst faClassMap = {\r\n    \"fa-arrows\": \"fas fa-arrows-alt\",\r\n    \"fa-address-book-o\": \"fa fa-address-book\",\r\n    \"fa-address-card-o\": \"fa fa-address-card\",\r\n    \"fa-arrow-circle-o-down\": \"fa fa-arrow-alt-circle-down\",\r\n    \"fa-arrow-circle-o-left\": \"fa fa-arrow-alt-circle-left\",\r\n    \"fa-arrow-circle-o-right\": \"fa fa-arrow-alt-circle-right\",\r\n    \"fa-arrow-circle-o-up\": \"fa fa-arrow-alt-circle-up\",\r\n    \"fa-arrows-h\": \"fas fa-arrows-alt-h\",\r\n    \"fa-arrows-v\": \"fas fa-arrows-alt-v\",\r\n    \"fa-bell-o\": \"fa fa-bell\",\r\n    \"fa-bell-slash-o\": \"fa fa-bell-slash\",\r\n    \"fa-bitbucket-square\": \"fab fa-bitbucket\",\r\n    \"fa-bookmark-o\": \"fa fa-bookmark\",\r\n    \"fa-building-o\": \"fa fa-building\",\r\n    \"fa-check-circle-o\": \"fa fa-check-circle\",\r\n    \"fa-check-square-o\": \"fa fa-check-square\",\r\n    \"fa-circle-o\": \"fa fa-circle\",\r\n    \"fa-circle-thin\": \"fa fa-circle\",\r\n    \"fa-cloud-download\": \"fas fa-cloud-download-alt\",\r\n    \"fa-cloud-upload\": \"fas fa-cloud-upload-alt\",\r\n    \"fa-comment-o\": \"fa fa-comment\",\r\n    \"fa-commenting-o\": \"fa fa-comment-dots\",\r\n    \"fa-comments-o\": \"fa fa-comments\",\r\n    \"fa-credit-card-alt\": \"fas fa-credit-card\",\r\n    \"fa-cutlery\": \"fas fa-utensils\",\r\n    \"fa-dashboard\": \"fas fa-tachometer-alt\",\r\n    \"fa-diamond\": \"fa fa-gem\",\r\n    \"fa-drivers-license-o\": \"fa fa-address-card\",\r\n    \"fa-envelope-o\": \"fa fa-envelope\",\r\n    \"fa-envelope-open-o\": \"fa fa-envelope-open\",\r\n    \"fa-exchange\": \"fas fa-exchange-alt\",\r\n    \"fa-external-link\": \"fas fa-external-link-alt\",\r\n    \"fa-external-link-square\": \"fas fa-external-link-square-alt\",\r\n    \"fa-facebook-official\": \"fab fa-facebook-square\",\r\n    \"fa-file-o\": \"fa fa-file\",\r\n    \"fa-file-text-o\": \"fa fa-file-alt\",\r\n    \"fa-flag-o\": \"fa fa-flag\",\r\n    \"fa-folder-o\": \"fa fa-folder\",\r\n    \"fa-folder-open-o\": \"fa fa-folder-open\",\r\n    \"fa-heart-o\": \"fa fa-heart\",\r\n    \"fa-hourglass-o\": \"fa fa-hourglass\",\r\n    \"fa-id-card-o\": \"fa fa-id-card\",\r\n    \"fa-level-down\": \"fas fa-level-down-alt\",\r\n    \"fa-level-up\": \"fas fa-level-up-alt\",\r\n    \"fa-long-arrow-down\": \"fas fa-long-arrow-alt-down\",\r\n    \"fa-long-arrow-left\": \"fas fa-long-arrow-alt-left\",\r\n    \"fa-long-arrow-right\": \"fas fa-long-arrow-alt-right\",\r\n    \"fa-long-arrow-up\": \"fas fa-long-arrow-alt-up\",\r\n    \"fa-mail-reply\": \"fas fa-reply\",\r\n    \"fa-map-o\": \"fa fa-map\",\r\n    \"fa-meanpath\": \"fas fa-square\",\r\n    \"fa-minus-square-o\": \"fa fa-minus-square\",\r\n    \"fa-paper-plane-o\": \"fa fa-paper-plane\",\r\n    \"fa-pause-circle-o\": \"fa fa-pause-circle\",\r\n    \"fa-pencil\": \"fas fa-pencil-alt\",\r\n    \"fa-play-circle-o\": \"fa fa-play-circle\",\r\n    \"fa-plus-square-o\": \"fa fa-plus-square\",\r\n    \"fa-question-circle-o\": \"fa fa-question-circle\",\r\n    \"fa-reply\": \"fas fa-reply\",\r\n    \"fa-send-o\": \"fa fa-paper-plane\",\r\n    \"fa-share-square-o\": \"fa fa-share-square\",\r\n    \"fa-shield\": \"fas fa-shield-alt\",\r\n    \"fa-sign-in\": \"fas fa-sign-in-alt\",\r\n    \"fa-sign-out\": \"fas fa-sign-out-alt\",\r\n    \"fa-spoon\": \"fas fa-utensil-spoon\",\r\n    \"fa-square-o\": \"fa fa-square\",\r\n    \"fa-star-half-empty\": \"fa fa-star-half\",\r\n    \"fa-star-half-full\": \"fas fa-star-half-alt\",\r\n    \"fa-star-half-o\": \"fa fa-star-half\",\r\n    \"fa-star-o\": \"fa fa-star\",\r\n    \"fa-sticky-note-o\": \"fa fa-sticky-note\",\r\n    \"fa-stop-circle-o\": \"fa fa-stop-circle\",\r\n    \"fa-tachometer\": \"fas fa-tachometer-alt\",\r\n    \"fa-thumbs-o-down\": \"fa fa-thumbs-down\",\r\n    \"fa-thumbs-o-up\": \"fa fa-thumbs-up\",\r\n    \"fa-ticket\": \"fas fa-ticket-alt\",\r\n    \"fa-times-circle-o\": \"fa fa-times-circle\",\r\n    \"fa-times-rectangle\": \"fas fa-window-close\",\r\n    \"fa-times-rectangle-o\": \"fa fa-window-close\",\r\n    \"fa-trash-o\": \"fa fa-trash-alt\",\r\n    \"fa-user-circle-o\": \"fa fa-user-circle\",\r\n    \"fa-user-o\": \"fa fa-user\",\r\n    \"fa-vcard-o\": \"fa fa-address-card\",\r\n    \"fa-wheelchair-alt\": \"fas fa-wheelchair\",\r\n    \"fa-window-close\": \"fas fa-window-close\",\r\n    \"fa-window-close-o\": \"fa fa-window-close\",\r\n    \"fa-youtube-play\": \"fab fa-youtube\",\r\n    \"fa-youtube-square\": \"fab fa-youtube-square\"\r\n};\r\nexport function faKeys(): string[] {\r\n    return Object.keys(faCharMap);\r\n}\r\n\r\nexport function fa5Class(key: string): string {\r\n    return faClassMap[key] ? faClassMap[key] : key;\r\n}\r\n\r\nexport function faChar(key: string, defChar: string = \"fa-question\"): string {\r\n    if (key.indexOf(\"fa-\") === 0) {\r\n        return faCharMap[key] || faCharMap[defChar];\r\n    }\r\n    return key;\r\n}\r\n\r\nexport function faCode(key: string): number {\r\n    return faChar(key).charCodeAt(0);\r\n}\r\n\r\nlet _removeHTMLFromStringDiv: HTMLDivElement;\r\nexport function removeHTMLFromString(str: string, div?: HTMLDivElement) {\r\n    if (div === undefined && _removeHTMLFromStringDiv === undefined) {\r\n        _removeHTMLFromStringDiv = document.createElement(\"div\");\r\n    }\r\n    div = div ?? _removeHTMLFromStringDiv;\r\n    div.innerHTML = str;\r\n    return div.textContent ?? div.innerText ?? \"\";\r\n}\r\n\r\n//  Template   ---\r\n//  https://github.com/Matt-Esch/string-template (MIT)\r\nconst nargs = /\\{([0-9a-zA-Z_\\s\\[\\]]+)\\}/g;\r\nconst nargs2 = /\\{\\{([0-9a-zA-Z_\\s\\[\\]]+)\\}\\}/g;\r\n\r\nexport function templateFields(tpl: string): string[] {\r\n    if (!tpl) return [];\r\n    const retVal: string[] = [];\r\n    const matches = tpl.match(nargs);\r\n    if (matches && matches.length) {\r\n        for (const tplField of matches) {\r\n            retVal.push(tplField.substring(1, tplField.length - 1));\r\n        }\r\n    }\r\n    return retVal;\r\n}\r\n\r\nexport function template(tpl?: string, _args?) {\r\n    if (!tpl) return \"\";\r\n    let args;\r\n\r\n    if (arguments.length === 2 && typeof arguments[1] === \"object\") {\r\n        args = arguments[1];\r\n    } else {\r\n        args = new Array(arguments.length - 1);\r\n        for (let i = 1; i < arguments.length; ++i) {\r\n            args[i - 1] = arguments[i];\r\n        }\r\n    }\r\n\r\n    if (!args || !args.hasOwnProperty) {\r\n        args = {};\r\n    }\r\n\r\n    //  Array handling\r\n    for (const key in args) {\r\n        if (isArray(args[key])) {\r\n            args[key].forEach(function (row, idx) {\r\n                args[key + \"[\" + idx + \"]\"] = row;\r\n            });\r\n        }\r\n    }\r\n\r\n    return tpl\r\n        .replace(nargs2, function replaceArg(match, i) {\r\n            const result = args.hasOwnProperty(i) ? args[i] : null;\r\n            if (result === null || result === undefined) {\r\n                return match;\r\n            }\r\n            return removeHTMLFromString(result);\r\n        })\r\n        .replace(nargs, function replaceArg(match, i, index) {\r\n            const result = args.hasOwnProperty(i) ? args[i] : null;\r\n            if (result === null || result === undefined) {\r\n                return \"\";\r\n            }\r\n            return result;\r\n        })\r\n        ;\r\n}\r\n\r\nexport function naturalSort(data, order, idx, sortCaseSensitive) {\r\n    return data.slice(0).sort(function (a, b) {\r\n        return _naturalSort(a, b, order, idx, sortCaseSensitive);\r\n    });\r\n}\r\n\r\nexport function multiSort(data, sortBy) {\r\n    if (sortBy && sortBy.length) {\r\n        data.sort(function (l, r) {\r\n            for (let i = 0; i < sortBy.length; ++i) {\r\n                const lVal = l[sortBy[i].idx];\r\n                const rVal = r[sortBy[i].idx];\r\n                if (lVal !== rVal) {\r\n                    return sortBy[i].reverse ? d3Descending(lVal, rVal) : d3Ascending(lVal, rVal);\r\n                }\r\n            }\r\n            return 0;\r\n        });\r\n    }\r\n    return data;\r\n}\r\n\r\nexport const Selection = SelectionBag;\r\n\r\nexport function urlParams() {\r\n    const retVal = {};\r\n    const url = window.location.href;\r\n    const idx = url.indexOf(\"?\");\r\n    if (idx >= 0) {\r\n        url.substring(idx + 1).split(\"&\").forEach(function (param) {\r\n            const paramParts = param.split(\"=\");\r\n            switch (paramParts.length) {\r\n                case 1:\r\n                    retVal[decodeURIComponent(paramParts[0])] = undefined;\r\n                    break;\r\n                case 2:\r\n                    retVal[decodeURIComponent(paramParts[0])] = decodeURIComponent(paramParts[1]);\r\n                    break;\r\n                default:\r\n                    throw new Error(\"Invalid URL Param:  \" + param);\r\n            }\r\n        });\r\n    }\r\n    return retVal;\r\n}\r\n\r\nexport function endsWith(str: string, searchStr: string, pos?: number) {\r\n    const subjectString = str.toString();\r\n    if (typeof pos !== \"number\" || !isFinite(pos) || Math.floor(pos) !== pos || pos > subjectString.length) {\r\n        pos = subjectString.length;\r\n    }\r\n    pos -= searchStr.length;\r\n    const lastIndex = subjectString.indexOf(searchStr, pos);\r\n    return lastIndex !== -1 && lastIndex === pos;\r\n}\r\n\r\nexport function d3ArrayAdapter(array) {\r\n    return {\r\n        ownerDocument: {\r\n            createElement(_tagName) {\r\n                return {\r\n                    get __data__() { return this.row; },\r\n                    set __data__(_) { this.row = array[this.index] = _; }\r\n                };\r\n            },\r\n\r\n            createElementNS(_ns, tagName) {\r\n                return this.createElement(tagName);\r\n            }\r\n        },\r\n\r\n        querySelectorAll(selectors) {\r\n            if (selectors) throw new Error(\"unsupported\");\r\n            const context = this;\r\n            return array.map(function (row, idx) {\r\n                return {\r\n                    ownerDocument: context.ownerDocument,\r\n                    parentNode: context,\r\n                    get __data__() { return row; },\r\n                    set __data__(_) { array[idx] = _; }\r\n                };\r\n            });\r\n        },\r\n\r\n        appendChild(node) {\r\n            node.parentNode = this;\r\n            node.index = array.length;\r\n            array.push(null);\r\n            return node;\r\n        },\r\n\r\n        insertBefore(node, referenceNode) {\r\n            const idx = array.indexOf(node.__data__);\r\n            const refIdx = array.indexOf(referenceNode.__data__);\r\n            if (idx > refIdx) {\r\n                array.splice(refIdx, 0, array.splice(idx, 1)[0]);\r\n            } else if (idx < refIdx - 1) {\r\n                array.splice(refIdx - 1, 0, array.splice(idx, 1)[0]);\r\n            }\r\n            return node;\r\n        },\r\n\r\n        removeChild(node) {\r\n            array.splice(array.indexOf(node.__data__), 1);\r\n            return node;\r\n        }\r\n    };\r\n}\r\n\r\nexport function downloadBlob(blob: Blob, filename: string) {\r\n    let a = document.createElement(\"a\");\r\n    if (navigator[\"msSaveBlob\"]) { // IE10+\r\n        a = null;\r\n        return navigator[\"msSaveBlob\"](blob, filename);\r\n    } else if (\"download\" in a) { // html 5\r\n        a.href = URL.createObjectURL(blob);\r\n        a.setAttribute(\"download\", filename);\r\n        document.body.appendChild(a);\r\n        setTimeout(function () {\r\n            a.click();\r\n            document.body.removeChild(a);\r\n        }, 10);\r\n        return true;\r\n    }\r\n}\r\n\r\nexport function timestamp() {\r\n    const currentdate = new Date();\r\n    const timeFormat = d3TimeFormat(\"%Y-%m-%dT%H_%M_%S\");\r\n    return timeFormat(currentdate);\r\n}\r\n\r\nexport function downloadString(format: \"CSV\" | \"TSV\" | \"JSON\" | \"TEXT\" | \"SVG\", blob: string, id?: string) {\r\n    const filename = id || (\"data_\" + timestamp()) + \".\" + format.toLowerCase();\r\n\r\n    let mimeType: string;\r\n    switch (format) {\r\n        case \"TSV\":\r\n            mimeType = \"text/tab-seperated-values\";\r\n            break;\r\n        case \"JSON\":\r\n            mimeType = \"application/json\";\r\n            break;\r\n        case \"SVG\":\r\n            mimeType = \"image/svg+xml\";\r\n            break;\r\n        case \"CSV\":\r\n        case \"TEXT\":\r\n        default:\r\n            mimeType = \"text/csv\";\r\n    }\r\n    downloadBlob(new Blob([blob], { type: mimeType }), filename);\r\n}\r\n\r\nexport function widgetPath(classID) {\r\n    return \"../\" + classID.split(\"_\").join(\"/\");\r\n}\r\n\r\nexport function parseClassID(classID, prefix = \"..\") {\r\n    const parts = classID.split(\".\");\r\n    const classParts = parts[0].split(\"_\");\r\n    return {\r\n        package: `@hpcc-js/${classParts[0]}`,\r\n        path: prefix + \"/\" + parts[0].split(\"_\").join(\"/\"),\r\n        widgetID: classParts.length > 1 ? classParts[1] : null,\r\n        memberWidgetID: parts.length > 1 ? parts[1] : null\r\n    };\r\n}\r\n\r\nexport function checksum(s) {\r\n    if (s instanceof Array) {\r\n        s = s.join(\"\") + s.length;\r\n    }\r\n    switch (typeof s) {\r\n        case \"string\":\r\n            break;\r\n        default:\r\n            s = \"\" + s;\r\n    }\r\n    let chk = 0x12345678;\r\n    for (let i = 0, l = s.length; i < l; ++i) {\r\n        chk += (s.charCodeAt(i) * (i + 1));\r\n    }\r\n    return (chk & 0xffffffff).toString(16);\r\n}\r\nexport function getTime() {\r\n    return (now && now.call(perf)) || (new Date().getTime());\r\n}\r\nexport function mixin(dest, _sources) {\r\n    dest = dest || {};\r\n    for (let i = 1, l = arguments.length; i < l; i++) {\r\n        _mixin(dest, arguments[i]);\r\n    }\r\n    return dest;\r\n}\r\n\r\nfunction _mixin(dest, source) {\r\n    let s;\r\n    const empty = {};\r\n    for (const key in source) {\r\n        s = source[key];\r\n        if (!(key in dest) || (dest[key] !== s && (!(key in empty) || empty[key] !== s))) {\r\n            dest[key] = s;\r\n        }\r\n    }\r\n    return dest;\r\n}\r\n\r\nexport function exists(prop, scope) {\r\n    if (!prop || !scope) {\r\n        return false;\r\n    }\r\n    const propParts = prop.split(\".\");\r\n    let testScope = scope;\r\n    for (let i = 0; i < propParts.length; ++i) {\r\n        const item = propParts[i];\r\n        if (testScope[item] === undefined) {\r\n            return false;\r\n        }\r\n        testScope = testScope[item];\r\n    }\r\n    return true;\r\n}\r\n\r\nexport function logStringify(obj) {\r\n    const cache = [];\r\n    return JSON.stringify(obj, function (_key, value) {\r\n        if (typeof value === \"object\" && value !== null) {\r\n            if (cache.indexOf(value) !== -1) {\r\n                return;\r\n            }\r\n\r\n            cache.push(value);\r\n        }\r\n        return value;\r\n    });\r\n}\r\n\r\nexport function debounce(func, threshold = 100, execAsap = false) {\r\n    return function debounced(..._dummyArgs) {\r\n        const obj = this || {};\r\n        const args = arguments;\r\n        function delayed() {\r\n            if (!execAsap)\r\n                func.apply(obj, args);\r\n            obj.__hpcc_debounce_timeout = null;\r\n        }\r\n        if (obj.__hpcc_debounce_timeout)\r\n            clearTimeout(obj.__hpcc_debounce_timeout);\r\n        else if (execAsap)\r\n            func.apply(obj, args);\r\n        obj.__hpcc_debounce_timeout = setTimeout(delayed, threshold);\r\n    };\r\n}\r\n\r\nexport function parseVersionString(versionString) {\r\n    const _sp = versionString.split(\".\");\r\n    return {\r\n        major: parseInt(_sp[0].replace(\"v\", \"\")),\r\n        minor: parseInt(_sp[1]),\r\n        patch: parseInt(_sp[2].split(\"-\")[0])\r\n    };\r\n}\r\n\r\nexport type TextSize = { width: number; height: number; };\r\nlet g_fontSizeContext: CanvasRenderingContext2D;\r\nconst g_fontSizeContextCache: { [key: string]: TextSize } = {};\r\n\r\nexport function textSize(_text: string | string[], fontName: string = \"Verdana\", fontSize: number = 12, bold: boolean = false): Readonly<TextSize> {\r\n    g_fontSizeContext = globalCanvasContext();\r\n    const text = _text instanceof Array ? _text : [_text];\r\n    const hash = `${bold}::${fontSize}::${fontName}::${text.join(\"::\")}`;\r\n    let retVal = g_fontSizeContextCache[hash];\r\n    if (!retVal) {\r\n        retVal = { width: 0, height: 0 };\r\n        g_fontSizeContext.font = `${bold ? \"bold \" : \"\"}${fontSize}px ${fontName}`;\r\n        text.forEach(line => {\r\n            const textMeasurement = g_fontSizeContext.measureText(\"\" + line);\r\n            const width = textMeasurement.width;\r\n            const height = (textMeasurement.fontBoundingBoxDescent + textMeasurement.fontBoundingBoxAscent) * text.length;\r\n            g_fontSizeContextCache[hash] = retVal = {\r\n                width: width > retVal.width ? width : retVal.width,\r\n                height: height > retVal.height ? height : retVal.height\r\n            };\r\n        });\r\n    }\r\n    return retVal;\r\n}\r\n\r\nexport type TextRect = { width: number; height: number; top: number; right: number; bottom: number; left: number; };\r\nlet g_fontCanvas;\r\nconst g_fontRectContextCache: { [key: string]: TextRect } = {};\r\nexport function textRect(text: string, fontName: string = \"Verdana\", fontSize: number = 12, bold: boolean = false): Readonly<TextRect> {\r\n    // This function is relatively expensive and should be used conservatively\r\n    g_fontCanvas = globalCanvasElement();\r\n    g_fontSizeContext = globalCanvasContext();\r\n    const hash = `${bold}::${fontSize}::${fontName}::${text}`;\r\n    let retVal = g_fontRectContextCache[hash];\r\n    if (!retVal) {\r\n        const font = `${bold ? \"bold \" : \"\"}${fontSize}px '${fontName}'`;\r\n        g_fontSizeContext.font = font;\r\n        const m = g_fontSizeContext.measureText(text);\r\n        const w = g_fontCanvas.width = Math.ceil(m.width);\r\n        const h = g_fontCanvas.height = fontSize * 1.5;\r\n        const canvas = document.createElement(\"canvas\");\r\n        canvas.width = w;\r\n        canvas.height = h;\r\n        g_fontSizeContext.font = font;\r\n        g_fontSizeContext.fillStyle = \"black\";\r\n        g_fontSizeContext.textAlign = \"start\";\r\n        g_fontSizeContext.textBaseline = \"top\";\r\n        g_fontSizeContext.fillText(text, 0, 0);\r\n\r\n        let top, right, bottom, left = 0;\r\n        if (w > 0) {\r\n            const data = g_fontSizeContext.getImageData(0, 0, w, h).data;\r\n            for (let y = 0; y < h; y++) {\r\n                for (let x = 0; x < w; x++) {\r\n                    const i = (x + y * w) * 4;\r\n                    if (data[i + 3] !== 0) {\r\n                        if (top === undefined) {\r\n                            top = y;\r\n                        }\r\n                        if (left === undefined || left > x) {\r\n                            left = x;\r\n                        }\r\n                        if (right === undefined || right < x) {\r\n                            right = x;\r\n                        }\r\n                        bottom = y;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        retVal = {\r\n            width: right - left + 1,\r\n            height: bottom - top + 1,\r\n            top,\r\n            right,\r\n            bottom,\r\n            left\r\n        };\r\n        g_fontRectContextCache[hash] = retVal;\r\n    }\r\n    return retVal;\r\n}\r\n\r\nfunction globalCanvasElement() {\r\n    if (!g_fontCanvas) {\r\n        g_fontCanvas = document.getElementById(\"hpcc_js_font_size\");\r\n        if (!g_fontCanvas) {\r\n            g_fontCanvas = document.createElement(\"canvas\");\r\n            g_fontCanvas.id = \"hpcc_js_font_size\";\r\n            document.body.appendChild(g_fontCanvas);\r\n        }\r\n    }\r\n    return g_fontCanvas;\r\n}\r\n\r\nfunction globalCanvasContext() {\r\n    if (!g_fontSizeContext) {\r\n        g_fontCanvas = globalCanvasElement();\r\n        g_fontSizeContext = (g_fontCanvas as HTMLCanvasElement).getContext(\"2d\");\r\n    }\r\n    return g_fontSizeContext;\r\n}\r\n\r\nexport function safeRaise(domNode: Element) {\r\n    const target = domNode;\r\n    let nextSibling = target.nextSibling;\r\n    while (nextSibling) {\r\n        target.parentNode.insertBefore(nextSibling, target);\r\n        nextSibling = target.nextSibling;\r\n    }\r\n}\r\n","import { deviation as d3Deviation, max as d3Max, mean as d3Mean, median as d3Median, min as d3Min, sum as d3Sum, variance as d3Variance } from \"d3-array\";\r\nimport { csvFormatRows as d3CsvFormatRows, csvParse as d3CsvParse, tsvFormatRows as d3TsvFormatRows, tsvParse as d3TsvParse } from \"d3-dsv\";\r\nimport { format as d3Format } from \"d3-format\";\r\nimport { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\r\nimport { PropertyExt } from \"./PropertyExt.ts\";\r\nimport * as Utility from \"./Utility.ts\";\r\n\r\nconst d3Aggr = {\r\n    min: d3Min,\r\n    max: d3Max,\r\n    mean: d3Mean,\r\n    median: d3Median,\r\n    variance: d3Variance,\r\n    deviation: d3Deviation,\r\n    sum: d3Sum\r\n};\r\n\r\nclass Nest {\r\n    private _keys: Array<(row: any) => any> = [];\r\n    private _rollup?: (rows: any[]) => any;\r\n\r\n    key(accessor: (row: any) => any): this {\r\n        this._keys.push(accessor);\r\n        return this;\r\n    }\r\n\r\n    rollup(callback: (rows: any[]) => any): this {\r\n        this._rollup = callback;\r\n        return this;\r\n    }\r\n\r\n    private groups(rows: any[], depth: number): Map<string, any[]> {\r\n        const groups = new Map<string, any[]>();\r\n        for (const row of rows) {\r\n            const key = `${this._keys[depth](row)}`;\r\n            const values = groups.get(key);\r\n            if (values) {\r\n                values.push(row);\r\n            } else {\r\n                groups.set(key, [row]);\r\n            }\r\n        }\r\n        return groups;\r\n    }\r\n\r\n    private value(rows: any[], depth: number, map: boolean): any {\r\n        if (depth >= this._keys.length) {\r\n            return this._rollup ? this._rollup(rows) : rows;\r\n        }\r\n        const groups = this.groups(rows, depth);\r\n        if (map) {\r\n            return new Map(Array.from(groups, ([key, values]) => [key, this.value(values, depth + 1, true)]));\r\n        }\r\n        if (this._rollup && depth === this._keys.length - 1) {\r\n            return Array.from(groups, ([key, values]) => ({ key, value: this.value(values, depth + 1, false) }));\r\n        }\r\n        return Array.from(groups, ([key, values]) => ({ key, values: this.value(values, depth + 1, false) }));\r\n    }\r\n\r\n    entries(rows: any[]): any[] {\r\n        return this.value(rows, 0, false);\r\n    }\r\n\r\n    map(rows: any[], nativeMap = false): any {\r\n        const result = this.value(rows, 0, true);\r\n        if (nativeMap) return result;\r\n        const toObject = (value: any): any => value instanceof Map ? Object.fromEntries(Array.from(value, ([key, child]) => [key, toObject(child)])) : value;\r\n        return toObject(result);\r\n    }\r\n}\r\n\r\nlet lastFoundFormat = null;\r\n\r\nexport interface INestedColumn {\r\n    label: string;\r\n    columns: Array<string | INestedColumn>;\r\n}\r\n\r\n//  Field  ---\r\nexport type FieldType = \"string\" | \"number\" | \"boolean\" | \"date\" | \"time\" | \"hidden\" | \"nested\";\r\n\r\nexport class Field extends PropertyExt {\r\n    private _owner: Grid;\r\n    idx: number;\r\n    protected _children: Field[] = [];\r\n\r\n    constructor(id?) {\r\n        super();\r\n\r\n        this._id = id || this._id;\r\n    }\r\n\r\n    owner(): Grid;\r\n    owner(_: Grid): this;\r\n    owner(_?: Grid): Grid | this {\r\n        if (!arguments.length) return this._owner;\r\n        this._owner = _;\r\n        return this;\r\n    }\r\n\r\n    valid(): boolean {\r\n        return !!this.label();\r\n    }\r\n\r\n    checksum(): string {\r\n        return Utility.checksum(this.label() + this.type() + this.mask() + this.format());\r\n    }\r\n\r\n    typeTransformer(_: any) {\r\n        switch (this.type()) {\r\n            case \"number\":\r\n                return Number(_);\r\n            case \"string\":\r\n                return String(_);\r\n            case \"boolean\":\r\n                return typeof (_) === \"string\" && [\"false\", \"off\", \"0\"].indexOf(_.toLowerCase()) >= 0 ? false : Boolean(_);\r\n            case \"time\":\r\n            case \"date\":\r\n                return this.maskTransformer(_);\r\n        }\r\n        return _;\r\n    }\r\n\r\n    maskTransformer(_) {\r\n        return this.formatter(this.mask()).parse(String(_));\r\n    }\r\n\r\n    formatTransformer(_) {\r\n        return this.formatter(this.format())(_);\r\n    }\r\n\r\n    parse(_) {\r\n        if (!_) {\r\n            return _;\r\n        }\r\n        try {\r\n            return this.typeTransformer(_);\r\n        } catch (e) {\r\n            console.warn(\"Unable to parse:  \" + _);\r\n            return null;\r\n        }\r\n    }\r\n\r\n    transform(_) {\r\n        if (!_) {\r\n            return _;\r\n        }\r\n        try {\r\n            return this.formatTransformer(this.typeTransformer(_));\r\n        } catch (e) {\r\n            console.warn(\"Unable to transform:  \" + _);\r\n            return null;\r\n        }\r\n    }\r\n\r\n    clone() {\r\n        const context = this;\r\n        const retVal = new Field(this._id);\r\n        cloneProp(retVal, \"label\");\r\n        cloneProp(retVal, \"type\");\r\n        cloneProp(retVal, \"mask\");\r\n        cloneProp(retVal, \"format\");\r\n\r\n        function cloneProp(dest, key) {\r\n            dest[key + \"_default\"](context[key + \"_default\"]());\r\n            if (context[key + \"_exists\"]()) {\r\n                dest[key](context[key]());\r\n            }\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    formatter(format) {\r\n        let retVal;\r\n        if (!format) {\r\n            retVal = function (_) {\r\n                return _;\r\n            };\r\n            retVal.parse = function (_) {\r\n                return _;\r\n            };\r\n            return retVal;\r\n        }\r\n        switch (this.type()) {\r\n            case \"time\":\r\n            case \"date\":\r\n                return d3TimeFormat(format);\r\n        }\r\n        retVal = d3Format(format);\r\n        retVal.parse = function (_) {\r\n            return _;\r\n        };\r\n        return retVal;\r\n    }\r\n\r\n    children(): Field[];\r\n    children(_: Array<string | INestedColumn | Field>, asDefault?: boolean): this;\r\n    children(_?: Array<string | INestedColumn | Field>, asDefault?: boolean): Field[] | this {\r\n        if (_ === void 0) return this._children;\r\n        this.type(\"nested\");\r\n        const fieldsArr = this._children;\r\n        this._children = _.map((field: string | INestedColumn | Field, idx): Field => {\r\n            if (field instanceof Field) {\r\n                fieldsArr[idx] = field;\r\n                return field;\r\n            } else if (typeof field === \"string\") {\r\n                if (asDefault) {\r\n                    return (fieldsArr[idx] || new Field()).label_default(field);\r\n                } else {\r\n                    return (fieldsArr[idx] || new Field()).label(field);\r\n                }\r\n            } else {\r\n                if (asDefault) {\r\n                    return (fieldsArr[idx] || new Field())\r\n                        .label_default(field.label)\r\n                        .children(field.columns) as Field\r\n                        ;\r\n                } else {\r\n                    return (fieldsArr[idx] || new Field())\r\n                        .label(field.label)\r\n                        .children(field.columns) as Field\r\n                        ;\r\n                }\r\n            }\r\n        }, this);\r\n        return this;\r\n    }\r\n\r\n}\r\nField.prototype._class += \" common_Database.Field\";\r\n\r\nexport interface Field {\r\n    label(): string;\r\n    label(_: string): this;\r\n    label_default(): string;\r\n    label_default(_: string): this;\r\n    type(): FieldType;\r\n    type(_: FieldType): this;\r\n    mask(): string;\r\n    mask(_: string): this;\r\n    format(): string;\r\n    format(_: string): this;\r\n}\r\n\r\nField.prototype.publish(\"label\", \"\", \"string\", \"Label\", null, { optional: true });\r\nField.prototype.publish(\"type\", \"\", \"set\", \"Type\", [\"\", \"string\", \"number\", \"boolean\", \"date\", \"time\", \"hidden\", \"nested\"], { optional: true });\r\nField.prototype.publish(\"mask\", \"\", \"string\", \"Time Mask\", null, { disable: (w: any) => w.type() !== \"time\", optional: true });\r\nField.prototype.publish(\"format\", \"\", \"string\", \"Format\", null, { optional: true });\r\n\r\n//  Grid  ---\r\nexport class Grid extends PropertyExt {\r\n    _dataChecksum: boolean;\r\n    _dataVersion: number;\r\n\r\n    private _data = [];\r\n    private _dataChecksums = [];\r\n\r\n    constructor(dataChecksum?) {\r\n        super();\r\n        dataChecksum = dataChecksum || false;\r\n        this._dataChecksum = dataChecksum;\r\n        this._dataVersion = 0;\r\n        this.clear();\r\n    }\r\n\r\n    clear() {\r\n        this.fields([]);\r\n        this._data = [];\r\n        this._dataChecksums = [];\r\n        ++this._dataVersion;\r\n        return this;\r\n    }\r\n\r\n    //  Backward compatability  ---\r\n    resetColumns() {\r\n        const fields = this.fields() as Field[];\r\n        this.legacyColumns([]);\r\n        this.legacyColumns(fields.map(function (field) {\r\n            return field.label();\r\n        }));\r\n    }\r\n\r\n    legacyColumns(_?, asDefault?): any | Grid {\r\n        if (!arguments.length) return this.row(0);\r\n        this.row(0, _, asDefault);\r\n        return this;\r\n    }\r\n\r\n    legacyData(_?, _clone?) {\r\n        return Grid.prototype.data.apply(this, arguments);\r\n    }\r\n\r\n    //  Meta  ---\r\n    schema() {\r\n    }\r\n\r\n    field(idx) {\r\n        return this.fields()[idx];\r\n    }\r\n\r\n    fieldByLabel(_, ignoreCase?) {\r\n        return this.fields().filter(function (field: Field, idx) {\r\n            field.idx = idx;\r\n            return ignoreCase ? field.label().toLowerCase() === _.toLowerCase() : field.label() === _;\r\n        })[0];\r\n    }\r\n\r\n    data(_?, clone?): any | Grid {\r\n        if (!arguments.length) return this._data;\r\n        this._data = clone ? _.map(function (d) { return d.map(function (d2) { return d2; }); }) : _;\r\n        this._dataCalcChecksum();\r\n        return this;\r\n    }\r\n\r\n    parsedData() {\r\n        const context = this;\r\n        return this._data.map(function (row) {\r\n            return row.map(function (cell, idx) {\r\n                return context.fields()[idx].parse(cell);\r\n            });\r\n        });\r\n    }\r\n\r\n    formattedData() {\r\n        return this._data.map(row => {\r\n            return this.fields().map((field, idx) => {\r\n                return field.transform(row[idx]);\r\n            });\r\n        });\r\n    }\r\n\r\n    fieldsChecksum() {\r\n        return Utility.checksum(this.fields().map(function (field) { return field.checksum(); }));\r\n    }\r\n\r\n    dataChecksum() {\r\n        return Utility.checksum(this._dataChecksum ? this._dataChecksums : this._dataVersion);\r\n    }\r\n\r\n    checksum() {\r\n        return Utility.checksum([this.dataChecksum(), this.fieldsChecksum()]);\r\n    }\r\n\r\n    //  Row Access  ---\r\n    private _dataCalcChecksum(idx?) {\r\n        ++this._dataVersion;\r\n        if (this._dataChecksum) {\r\n            if (arguments.length) {\r\n                this._dataChecksums[idx] = Utility.checksum(this._data[idx]);\r\n            } else {\r\n                this._dataChecksums = this._data.map(function (row) { return Utility.checksum(row); });\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    row(row?, _?, asDefault?): any | Grid {\r\n        if (arguments.length < 2) return row === 0 ? this.fields().map(function (d) { return d.label(); }) : this._data[row - 1];\r\n        if (row === 0) {\r\n            const fieldsArr = this.fields();\r\n            this.fields(_.map(function (field: string | INestedColumn, idx) {\r\n                if (typeof field === \"string\") {\r\n                    if (asDefault) {\r\n                        return (fieldsArr[idx] || new Field()).label_default(field);\r\n                    } else {\r\n                        return (fieldsArr[idx] || new Field()).label(field);\r\n                    }\r\n                } else {\r\n                    if (asDefault) {\r\n                        return (fieldsArr[idx] || new Field())\r\n                            .label_default(field.label)\r\n                            .children(field.columns)\r\n                            ;\r\n                    } else {\r\n                        return (fieldsArr[idx] || new Field())\r\n                            .label(field.label)\r\n                            .children(field.columns)\r\n                            ;\r\n                    }\r\n                }\r\n            }, this));\r\n        } else {\r\n            this._data[row - 1] = _;\r\n            this._dataCalcChecksum(row - 1);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    rows(_?): any | Grid {\r\n        if (!arguments.length) return [this.row(0)].concat(this._data);\r\n        this.row(0, _[0]);\r\n        this._data = _.filter(function (_row, idx) { return idx > 0; });\r\n        this._dataCalcChecksum();\r\n        return this;\r\n    }\r\n\r\n    //  Column Access  ---\r\n    column(col, _?): any | Grid {\r\n        if (arguments.length < 2) return [this.fields()[col].label()].concat(this._data.map(function (row, _idx) { return row[col]; }));\r\n        _.forEach(function (d, idx) {\r\n            if (idx === 0) {\r\n                this.fields()[col] = new Field().label(_[0]);\r\n            } else {\r\n                this._data[idx - 1][col] = d;\r\n                this._dataCalcChecksum(idx - 1);\r\n            }\r\n        }, this);\r\n        return this;\r\n    }\r\n\r\n    columnData(col, _): any | Grid {\r\n        if (arguments.length < 2) return this._data.map(function (row, _idx) { return row[col]; });\r\n        _.forEach(function (d, idx) {\r\n            this._data[idx][col] = d;\r\n            this._dataCalcChecksum(idx);\r\n        }, this);\r\n        return this;\r\n    }\r\n\r\n    columns(_?): any | Grid {\r\n        if (!arguments.length) return this.fields().map(function (_col, idx) {\r\n            return this.column(idx);\r\n        }, this);\r\n        _.forEach(function (_col, idx) {\r\n            this.column(idx, _[idx]);\r\n        }, this);\r\n        return this;\r\n    }\r\n\r\n    //  Cell Access  ---\r\n    cell(row, col, _) {\r\n        if (arguments.length < 3) return this.row(row)[col];\r\n        if (row === 0) {\r\n            this.fields()[col] = new Field().label(_);\r\n        } else {\r\n            this._data[row][col] = _;\r\n            this._dataCalcChecksum(row);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    //  Grid Access  ---\r\n    grid(_?) {\r\n        return Grid.prototype.rows.apply(this, arguments);\r\n    }\r\n\r\n    //  Hipie Helpers  ---\r\n\r\n    hipieMappings(columns, _missingDataString?) {\r\n        if (!this.fields().length || !this._data.length) {\r\n            return [];\r\n        }\r\n        const mappedColumns = [];\r\n        let hasRollup = false;\r\n        columns.forEach(function (mapping, idx) {\r\n            const mappedColumn = {\r\n                groupby: false,\r\n                func: \"\",\r\n                params: []\r\n            };\r\n            if (mapping.hasFunction()) {\r\n                mappedColumn.func = mapping.function();\r\n                if (mappedColumn.func === \"SCALE\") {\r\n                    mappedColumn.groupby = true;\r\n                } else {\r\n                    hasRollup = true;\r\n                }\r\n\r\n                mapping.params().forEach(function (param) {\r\n                    const field = this.fieldByLabel(param, true);\r\n                    mappedColumn.params.push(field ? field.idx : -1);\r\n                }, this);\r\n            } else {\r\n                mappedColumn.groupby = true;\r\n                const field = this.fieldByLabel(mapping.id(), true);\r\n                mappedColumn.params.push(field ? field.idx : -1);\r\n            }\r\n            mappedColumns.push(mappedColumn);\r\n        }, this);\r\n\r\n        if (hasRollup) {\r\n            const retVal = [];\r\n            this.rollup(mappedColumns.filter(function (mappedColumn) {\r\n                return mappedColumn.groupby === true;\r\n            }).map(function (d) {\r\n                return d.params[0];\r\n            }), function (leaves) {\r\n                const row = mappedColumns.map(function (mappedColumn) {\r\n                    const param1 = mappedColumn.params[0];\r\n                    const param2 = mappedColumn.params[1];\r\n                    switch (mappedColumn.func) {\r\n                        case \"SUM\":\r\n                            return d3Sum(leaves, function (d) { return d[param1]; });\r\n                        case \"AVE\":\r\n                            return d3Mean(leaves, function (d) { return d[param1] / d[param2]; });\r\n                        case \"MIN\":\r\n                            return d3Min(leaves, function (d) { return d[param1]; });\r\n                        case \"MAX\":\r\n                            return d3Max(leaves, function (d) { return d[param1]; });\r\n                        case \"SCALE\":\r\n                            console.warn(\"Unexpected function:  \" + mappedColumn.func);\r\n                            //  All leaves should have the same values, use mean just in case they don't?\r\n                            return d3Mean(leaves, function (d) { return d[param1] / +param2; });\r\n                    }\r\n                    //  All leaves should have the same value.\r\n                    return leaves[0][param1];\r\n                });\r\n                retVal.push(row);\r\n                return row;\r\n            });\r\n            return retVal;\r\n        } else {\r\n            return this._data.map(function (row) {\r\n                return mappedColumns.map(function (mappedColumn) {\r\n                    const param1 = mappedColumn.params[0];\r\n                    const param2 = mappedColumn.params[1];\r\n                    switch (mappedColumn.func) {\r\n                        case \"SCALE\":\r\n                            return row[param1] / +param2;\r\n                        case \"SUM\":\r\n                        case \"AVE\":\r\n                        case \"MIN\":\r\n                        case \"MAX\":\r\n                            console.warn(\"Unexpected function:  \" + mappedColumn.func);\r\n                    }\r\n                    return row[param1];\r\n                });\r\n            });\r\n        }\r\n    }\r\n\r\n    legacyView() {\r\n        return new LegacyView(this);\r\n    }\r\n\r\n    nestView(columnIndicies) {\r\n        return new RollupView(this, columnIndicies);\r\n    }\r\n\r\n    rollupView(columnIndicies, rollupFunc?) {\r\n        return new RollupView(this, columnIndicies, rollupFunc);\r\n    }\r\n\r\n    aggregateView(columnIndicies, aggrType, aggrColumn, aggrDeltaColumn = \"\") {\r\n        const context = this;\r\n        return new RollupView(this, columnIndicies, function (values) {\r\n            switch (aggrType) {\r\n                case null:\r\n                case undefined:\r\n                case \"\":\r\n                    values.aggregate = values.length;\r\n                    return values;\r\n                default:\r\n                    const columns = context.legacyColumns();\r\n                    const colIdx = columns.indexOf(aggrColumn);\r\n                    const deltaIdx = columns.indexOf(aggrDeltaColumn);\r\n                    values.aggregate = d3Aggr[aggrType](values, function (value) {\r\n                        return (+value[colIdx] - (deltaIdx >= 0 ? +value[deltaIdx] : 0)) / (deltaIdx >= 0 ? +value[deltaIdx] : 1);\r\n                    });\r\n                    return values;\r\n            }\r\n        });\r\n    }\r\n\r\n    //  Nesting  ---\r\n    private _nest(columnIndicies, _rollup?) {\r\n        if (!(columnIndicies instanceof Array)) {\r\n            columnIndicies = [columnIndicies];\r\n        }\r\n        const nest = new Nest();\r\n        columnIndicies.forEach(function (idx) {\r\n            nest.key(function (d) {\r\n                return d[idx];\r\n            });\r\n        });\r\n        return nest;\r\n    }\r\n\r\n    nest(columnIndicies) {\r\n        return this._nest(columnIndicies)\r\n            .entries(this._data)\r\n            ;\r\n    }\r\n\r\n    rollup(columnIndicies, rollup) {\r\n        return this._nest(columnIndicies)\r\n            .rollup(rollup)\r\n            .entries(this._data)\r\n            ;\r\n    }\r\n\r\n    //  Util  ---\r\n    length() {\r\n        return this._data.length + 1;\r\n    }\r\n\r\n    width() {\r\n        return this.fields().length;\r\n    }\r\n\r\n    pivot() {\r\n        this.resetColumns();\r\n        this.rows(this.columns());\r\n        return this;\r\n    }\r\n\r\n    clone(deep) {\r\n        return new Grid()\r\n            .fields(this.fields(), deep)\r\n            .data(this.data(), deep)\r\n            ;\r\n    }\r\n\r\n    filter(filter) {\r\n        const filterIdx = {};\r\n        this.row(0).forEach(function (col, idx) {\r\n            filterIdx[col] = idx;\r\n        });\r\n        return new Grid()\r\n            .fields(this.fields(), true)\r\n            .data(this.data().filter(function (row) {\r\n                for (const key in filter) {\r\n                    if (filter[key] !== row[filterIdx[key]]) {\r\n                        return false;\r\n                    }\r\n                }\r\n                return true;\r\n            }))\r\n            ;\r\n    }\r\n\r\n    analyse(columns) {\r\n        if (!(columns instanceof Array)) {\r\n            columns = [columns];\r\n        }\r\n        const retVal = [];\r\n        columns.forEach(function (col) {\r\n            const rollup = this.rollup(col, function (leaves) {\r\n                return leaves.length;\r\n            });\r\n            retVal.push(rollup);\r\n            const keys = rollup.map(function (d) { return d.key; });\r\n            this.fields()[col].isBoolean = typeTest(keys, isBoolean);\r\n            this.fields()[col].isNumber = typeTest(keys, isNumber);\r\n            this.fields()[col].isString = !this.fields()[col].isNumber && typeTest(keys, isString);\r\n            this.fields()[col].isUSState = this.fields()[col].isString && typeTest(keys, isUSState);\r\n            this.fields()[col].isDateTime = this.fields()[col].isString && typeTest(keys, isDateTime);\r\n            this.fields()[col].isDateTimeFormat = lastFoundFormat;\r\n            this.fields()[col].isDate = !this.fields()[col].isDateTime && typeTest(keys, isDate);\r\n            this.fields()[col].isDateFormat = lastFoundFormat;\r\n            this.fields()[col].isTime = this.fields()[col].isString && !this.fields()[col].isDateTime && !this.fields()[col].isDate && typeTest(keys, isTime);\r\n            this.fields()[col].isTimeFormat = lastFoundFormat;\r\n        }, this);\r\n        return retVal;\r\n    }\r\n\r\n    //  Import/Export  ---\r\n    jsonObj(_?): any | Grid {\r\n        if (!arguments.length) return this._data.map(function (row) {\r\n            const retVal = {};\r\n            this.row(0).forEach(function (col, idx) {\r\n                retVal[col] = row[idx];\r\n            });\r\n            return retVal;\r\n        }, this);\r\n        this.clear();\r\n        this.data(_.map(function (row) {\r\n            const retVal = [];\r\n            for (const key in row) {\r\n                let colIdx = this.row(0).indexOf(key);\r\n                if (colIdx < 0) {\r\n                    colIdx = this.fields().length;\r\n                    this.fields().push(new Field().label(key));\r\n                }\r\n                retVal[colIdx] = row[key];\r\n            }\r\n            return retVal;\r\n        }, this));\r\n        return this;\r\n    }\r\n\r\n    json(_: string | object): this;\r\n    json(): string;\r\n    json(_?: string | object): string | this {\r\n        if (!arguments.length) return JSON.stringify(this.jsonObj(), null, \"  \");\r\n        if (typeof (_) === \"string\") {\r\n            _ = JSON.parse(_);\r\n        }\r\n        this.jsonObj(_);\r\n        return this;\r\n    }\r\n\r\n    csv(_: string): this;\r\n    csv(): string;\r\n    csv(_?: string): string | this {\r\n        if (!arguments.length) {\r\n            const temp = document.createElement(\"div\");\r\n            return d3CsvFormatRows(this.grid().map(row => {\r\n                return row.map(cell => {\r\n                    return Utility.removeHTMLFromString(cell, temp);\r\n                });\r\n            }));\r\n        }\r\n        this.jsonObj(d3CsvParse(_));\r\n        return this;\r\n    }\r\n\r\n    tsv(_: string): this;\r\n    tsv(): string;\r\n    tsv(_?: string): string | this {\r\n        if (!arguments.length) return d3TsvFormatRows(this.grid());\r\n        this.jsonObj(d3TsvParse(_));\r\n        return this;\r\n    }\r\n}\r\nGrid.prototype._class += \" common_Database.Grid\";\r\nexport interface Grid {\r\n    fields(): Field[];\r\n    fields(_: Field[], clone?: boolean): this;\r\n}\r\n\r\nGrid.prototype.publish(\"fields\", [], \"propertyArray\", \"Fields\");\r\nconst fieldsOrig = Grid.prototype.fields;\r\nGrid.prototype.fields = function (_?, clone?) {\r\n    if (!arguments.length) return fieldsOrig.apply(this, arguments);\r\n    return fieldsOrig.call(this, clone ? _.map(function (d) { return d.clone(); }) : _);\r\n};\r\n\r\n//  Views  ---\r\nexport class LegacyView {\r\n    _grid;\r\n    _parsedData;\r\n    _parsedDataChecksum;\r\n    _formattedData;\r\n    _formattedDataChecksum;\r\n\r\n    constructor(grid) {\r\n        this._grid = grid;\r\n    }\r\n\r\n    checksum() {\r\n        const value = this._grid.on.apply(this._grid, arguments);\r\n        return value === this._grid ? this : value;\r\n    }\r\n\r\n    fields() {\r\n        const value = this._grid.on.apply(this._grid, arguments);\r\n        return value === this._grid ? this : value;\r\n    }\r\n\r\n    grid() {\r\n        return this._grid;\r\n    }\r\n    columns(_?) {\r\n        if (!arguments.length) return this._grid.legacyColumns();\r\n        this._grid.legacyColumns(_);\r\n        return this;\r\n    }\r\n    rawData(_?) {\r\n        if (!arguments.length) return this._grid.legacyData();\r\n        this._grid.legacyData(_);\r\n        return this;\r\n    }\r\n    formattedData() {\r\n        if (this._formattedDataChecksum !== this._grid.checksum()) {\r\n            this._formattedDataChecksum = this._grid.checksum();\r\n            this._formattedData = this._grid.formattedData();\r\n        }\r\n        return this._formattedData;\r\n    }\r\n    parsedData() {\r\n        if (this._parsedDataChecksum !== this._grid.checksum()) {\r\n            this._parsedDataChecksum = this._grid.checksum();\r\n            this._parsedData = this._grid.parsedData();\r\n        }\r\n        return this._parsedData;\r\n    }\r\n    protected _whichData(opts?) {\r\n        if (opts) {\r\n            if (opts.parsed) {\r\n                return this.formattedData();\r\n            } else if (opts.formatted) {\r\n                return this.formattedData();\r\n            }\r\n        }\r\n        return this.rawData();\r\n    }\r\n    data(_) {\r\n        return LegacyView.prototype.rawData.apply(this, arguments);\r\n    }\r\n}\r\n\r\nexport class RollupView extends LegacyView {\r\n    _columnIndicies;\r\n    _rollup;\r\n    _nestChecksum;\r\n    _nest;\r\n\r\n    constructor(grid, columns, rollup?) {\r\n        super(grid);\r\n        if (!(columns instanceof Array)) {\r\n            columns = [columns];\r\n        }\r\n        this._columnIndicies = columns.filter(function (column) { return column; }).map(function (column) {\r\n            switch (typeof column) {\r\n                case \"string\":\r\n                    return this._grid.fieldByLabel(column).idx;\r\n            }\r\n            return column;\r\n        }, this);\r\n\r\n        rollup = rollup || function (d) { return d; };\r\n        this._rollup = rollup;\r\n    }\r\n\r\n    nest() {\r\n        if (this._nestChecksum !== this._grid.checksum()) {\r\n            this._nestChecksum = this._grid.checksum();\r\n\r\n            const nest = new Nest();\r\n            this._columnIndicies.forEach(function (idx) {\r\n                nest.key(function (d) {\r\n                    return d[idx];\r\n                });\r\n            });\r\n            this._nest = nest\r\n                .rollup(this._rollup)\r\n                ;\r\n        }\r\n        return this._nest;\r\n    }\r\n    entries(opts?) {\r\n        return this.nest().entries(this._whichData(opts));\r\n    }\r\n    map(opts) {\r\n        return this.nest().map(this._whichData(opts));\r\n    }\r\n    d3Map(opts) {\r\n        return this.nest().map(this._whichData(opts), true);\r\n    }\r\n    _walkData(entries, prevRow = []) {\r\n        let retVal = [];\r\n        entries.forEach(function (entry) {\r\n            if (entry instanceof Array) {\r\n                retVal.push(prevRow.concat([entry]));\r\n            } else if (entry.values instanceof Array) {\r\n                retVal = retVal.concat(this._walkData(entry.values, prevRow.concat([entry.key])));\r\n            } else if (entry.value instanceof Array) {\r\n                retVal = retVal.concat(this._walkData(entry.value, prevRow.concat([entry.key])));\r\n            }\r\n        }, this);\r\n        return retVal;\r\n    }\r\n    data(opts) {\r\n        return this._walkData(this.entries(opts));\r\n    }\r\n}\r\n\r\n//  --- --- ---\r\nfunction typeTest(cells, test) {\r\n    if (!(cells instanceof Array)) {\r\n        cells = [cells];\r\n    }\r\n    return cells.filter(function (d) { return d !== \"\"; }).every(test);\r\n}\r\nfunction isBoolean(cell) {\r\n    return typeof cell === \"boolean\";\r\n}\r\nfunction isNumber(cell) {\r\n    return typeof cell === \"number\" || !isNaN(cell);\r\n}\r\nfunction isString(cell) {\r\n    return typeof cell === \"string\";\r\n}\r\nconst dateTimeFormats = [\r\n];\r\nconst dateFormats = [\r\n    \"%Y-%m-%d\",\r\n    \"%Y%m%d\"\r\n];\r\nconst timeFormats = [\r\n    \"%H:%M:%S.%LZ\",\r\n    \"%H:%M:%SZ\",\r\n    \"%H:%M:%S\"\r\n];\r\ndateFormats.forEach(function (d) {\r\n    timeFormats.forEach(function (t) {\r\n        dateTimeFormats.push(d + \"T\" + t);\r\n    });\r\n});\r\nfunction formatPicker(formats, cell) {\r\n    for (let i = 0; i < formats.length; ++i) {\r\n        const date = d3TimeParse(formats[i])(cell);\r\n        if (date) {\r\n            lastFoundFormat = formats[i];\r\n            return formats[i];\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction isDateTime(cell) {\r\n    return formatPicker(dateTimeFormats, cell);\r\n}\r\nfunction isDate(cell) {\r\n    return formatPicker(dateFormats, cell);\r\n}\r\nfunction isTime(cell) {\r\n    return formatPicker(timeFormats, cell);\r\n}\r\nfunction isUSState(cell) {\r\n    return [\"AL\", \"AK\", \"AZ\", \"AR\", \"CA\", \"CO\", \"CT\", \"DE\", \"FL\", \"GA\", \"HI\", \"ID\", \"IL\", \"IN\", \"IA\", \"KS\", \"KY\", \"LA\", \"ME\", \"MD\", \"MA\", \"MI\", \"MN\", \"MS\", \"MO\", \"MT\", \"NE\", \"NV\", \"NH\", \"NJ\", \"NM\", \"NY\", \"NC\", \"ND\", \"OH\", \"OK\", \"OR\", \"PA\", \"RI\", \"SC\", \"SD\", \"TN\", \"TX\", \"UT\", \"VT\", \"VA\", \"WA\", \"WV\", \"WI\", \"WY\", \"AS\", \"DC\", \"FM\", \"GU\", \"MH\", \"MP\", \"PW\", \"PR\", \"VI\"].indexOf(String(cell).toUpperCase()) >= 0;\r\n}\r\n","const _version = \"1.14.2-dev\";\r\nexport function version() {\r\n    return _version;\r\n}\r\n\r\nexport const ieVersion = (function () {\r\n    const ua = navigator.userAgent;\r\n    let tem;\r\n    const M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\r\n    if (/trident/i.test(M[1])) {\r\n        tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n        return parseFloat(tem[1]);\r\n    }\r\n    if (/msie/i.test(M[1])) {\r\n        return parseFloat(M[2]);\r\n    }\r\n    return null;\r\n})();\r\n\r\nexport const isIE = ieVersion !== null;\r\nexport const svgMarkerGlitch = isIE && ieVersion <= 12;\r\n\r\nlet _scrollBarWidth = null;\r\nexport function getScrollbarWidth() {\r\n    if (_scrollBarWidth === null) {\r\n        const outer = document.createElement(\"div\");\r\n        outer.style.visibility = \"hidden\";\r\n        outer.style.width = \"100px\";\r\n        // @ts-ignore\r\n        outer.style.msOverflowStyle = \"scrollbar\";\r\n\r\n        document.body.appendChild(outer);\r\n\r\n        const widthNoScroll = outer.offsetWidth;\r\n        outer.style.overflow = \"scroll\";\r\n\r\n        const inner = document.createElement(\"div\");\r\n        inner.style.width = \"100%\";\r\n        outer.appendChild(inner);\r\n\r\n        const widthWithScroll = inner.offsetWidth;\r\n\r\n        outer.parentNode.removeChild(outer);\r\n\r\n        _scrollBarWidth = widthNoScroll - widthWithScroll;\r\n    }\r\n    return _scrollBarWidth;\r\n}\r\n\r\n//  Polyfills  ---\r\n(window as any).MutationObserver = (window as any).MutationObserver || (window as any).WebKitMutationObserver || (window as any).MozMutationObserver || function (callback) {\r\n    //  Just enough for HTMLOverlay and C3  ---\r\n    this.callback = callback;\r\n    this.listeners = [];\r\n\r\n    const MutationListener = function (callback2, domNode, type) {\r\n        this.callback = callback2;\r\n        this.domNode = domNode;\r\n        this.type = type;\r\n    };\r\n    MutationListener.prototype = {\r\n        handleEvent(evt) {\r\n            const mutation = {\r\n                type: this.type,\r\n                target: this.domNode,\r\n                addedNodes: [],\r\n                removedNodes: [],\r\n                previousSibling: evt.target.previousSibling,\r\n                nextSibling: evt.target.nextSibling,\r\n                attributeName: null,\r\n                attributeNamespace: null,\r\n                oldValue: null\r\n            };\r\n            this.callback([mutation]);\r\n        }\r\n    };\r\n\r\n    this.observe = function (domNode, config) {\r\n        if (config.attributes) {\r\n            const listener = new MutationListener(this.callback, domNode, \"attributes\");\r\n            this.listeners.push(listener);\r\n            domNode.addEventListener(\"DOMAttrModified\", listener, true);\r\n        }\r\n\r\n        if (config.characterData) {\r\n            const listener = new MutationListener(this.callback, domNode, \"characterData\");\r\n            this.listeners.push(listener);\r\n            domNode.addEventListener(\"DOMCharacterDataModified\", listener, true);\r\n        }\r\n\r\n        if (config.childList) {\r\n            const listener = new MutationListener(this.callback, domNode, \"childList\");\r\n            this.listeners.push(listener);\r\n            domNode.addEventListener(\"DOMNodeInserted\", listener, true);\r\n            domNode.addEventListener(\"DOMNodeRemoved\", listener, true);\r\n        }\r\n    };\r\n\r\n    this.disconnect = function () {\r\n        this.listeners.forEach(function (item) {\r\n            switch (item.type) {\r\n                case \"attributes\":\r\n                    item.domNode.removeEventListener(\"DOMAttrModified\", item, true);\r\n                    break;\r\n                case \"characterData\":\r\n                    item.domNode.removeEventListener(\"DOMCharacterDataModified\", item, true);\r\n                    break;\r\n                case \"childList\":\r\n                    item.domNode.removeEventListener(\"DOMNodeRemoved\", item, true);\r\n                    item.domNode.removeEventListener(\"DOMNodeInserted\", item, true);\r\n                    break;\r\n            }\r\n        });\r\n        this.listeners = [];\r\n    };\r\n};\r\n\r\n(Math as any).sign = (Math as any).sign || function (x) {\r\n    x = +x; // convert to a number\r\n    if (x === 0 || isNaN(x)) {\r\n        return x;\r\n    }\r\n    return x > 0 ? 1 : -1;\r\n};\r\n","import { select as d3Select } from \"d3-selection\";\r\nimport \"d3-transition\";\r\nimport { Field, Grid } from \"./Database.ts\";\r\nimport { } from \"./Platform.ts\";\r\nimport { PropertyExt } from \"./PropertyExt.ts\";\r\nimport { debounce, textRect, TextRect, textSize, TextSize } from \"./Utility.ts\";\r\n\r\nimport \"../src/Widget.css\";\r\n\r\nexport { Field };\r\n\r\nexport type IPrimative = boolean | number | string | object;\r\nexport type IFieldType = \"boolean\" | \"number\" | \"string\" | \"dataset\" | \"object\" | \"any\";\r\nexport interface InputField {\r\n    id: string;\r\n    type: IFieldType;\r\n    multi?: boolean;\r\n    default?: IPrimative | InputField[];\r\n    children?: InputField[];\r\n}\r\n\r\nexport interface IPos {\r\n    x: number;\r\n    y: number;\r\n}\r\n\r\nexport interface ISize {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\nexport interface BBox {\r\n    x: number;\r\n    y: number;\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\nexport interface DataMetaT {\r\n    min?: number;\r\n    max?: number;\r\n    mean?: number;\r\n    stdDev?: number;\r\n    sum?: number;\r\n}\r\n\r\nlet widgetID = 0;\r\nexport abstract class Widget extends PropertyExt {\r\n    static _idSeed: string;\r\n\r\n    protected _tag: string;\r\n    protected _isRootNode: boolean = true;\r\n\r\n    protected _db = new Grid();\r\n    protected _pos;\r\n    protected _prevPos;\r\n    protected _size;\r\n    protected _widgetScale;\r\n    protected _visible;\r\n    protected _display;\r\n    protected _dataMeta: DataMetaT = {};\r\n\r\n    protected _target: null | HTMLElement | SVGElement;\r\n    protected _placeholderElement;\r\n    protected _parentWidget;\r\n\r\n    protected _element;\r\n\r\n    protected _renderCount;\r\n\r\n    protected _overlayElement;\r\n\r\n    constructor() {\r\n        super();\r\n        this._id = Widget._idSeed + widgetID++;\r\n\r\n        this._db = new Grid();\r\n        this._pos = { x: 0, y: 0 };\r\n        this._size = { width: 0, height: 0 };\r\n        this._widgetScale = 1;\r\n        this._visible = true;\r\n\r\n        this._target = null;\r\n        this._placeholderElement = null;\r\n        this._parentWidget = null;\r\n\r\n        this._element = d3Select(null);\r\n\r\n        this._renderCount = 0;\r\n\r\n        if ((window as any).__hpcc_debug) {\r\n            if ((window as any).g_all === undefined) {\r\n                (window as any).g_all = {};\r\n            }\r\n            (window as any).g_all[this._id] = this;\r\n        }\r\n        if ((window as any).__hpcc_theme) {\r\n            this.applyTheme((window as any).__hpcc_theme);\r\n        }\r\n    }\r\n\r\n    columnChecksum() {\r\n        return this._db.fieldsChecksum();\r\n    }\r\n\r\n    dataChecksum() {\r\n        return this._db.dataChecksum();\r\n    }\r\n\r\n    importJSON(_: string | object): this {\r\n        this._db.json(_);\r\n        return this;\r\n    }\r\n\r\n    importCSV(_: string): this {\r\n        this._db.csv(_);\r\n        return this;\r\n    }\r\n\r\n    importTSV(_: string): this {\r\n        this._db.tsv(_);\r\n        return this;\r\n    }\r\n\r\n    export(_: \"JSON\" | \"CSV\" | \"TSV\" = \"JSON\") {\r\n        switch (_) {\r\n            case \"CSV\":\r\n                return this._db.csv();\r\n            case \"TSV\":\r\n                return this._db.tsv();\r\n            case \"JSON\":\r\n            default:\r\n                return this._db.json();\r\n        }\r\n    }\r\n\r\n    leakCheck(newNode) {\r\n        const context = this;\r\n        const watchArray = [newNode];\r\n        const destructObserver = new MutationObserver(function (mutations) {\r\n            let leaks = false;\r\n            mutations.forEach(function (mutation) {\r\n                for (let i = 0; i < mutation.removedNodes.length; ++i) {\r\n                    const node = mutation.removedNodes.item(i);\r\n                    if (watchArray.indexOf(node) >= 0 && context._target) {\r\n                        leaks = true;\r\n                        destructObserver.disconnect();\r\n                    }\r\n                }\r\n            });\r\n            if (leaks) {\r\n                console.error(\"leak:  \" + context.id() + \" - \" + context.classID() + \"\\t\\twidget.target(null); was not called for this widget before it was removed from the page.\");\r\n            }\r\n        });\r\n        let pNode = newNode.parentNode;\r\n        while (pNode) {\r\n            destructObserver.observe(pNode, { childList: true });\r\n            watchArray.push(pNode);\r\n            pNode = pNode.parentNode;\r\n        }\r\n    }\r\n\r\n    renderCount(): number {\r\n        return this._renderCount;\r\n    }\r\n\r\n    //  Implementation  ---\r\n    columns(): string[];\r\n    columns(_: string[], asDefault?: boolean): this;\r\n    columns(_?: string[], asDefault?: boolean): string[] | this {\r\n        if (!arguments.length) return this._db.legacyColumns();\r\n        this._db.legacyColumns(_, asDefault);\r\n        return this;\r\n    }\r\n\r\n    protected columnIdx(column: string): number {\r\n        return this.columns().indexOf(column);\r\n    }\r\n\r\n    protected cellIdxFunc<T>(colIdx: number, defValue?: T): (row: any) => T {\r\n        return colIdx < 0 ? () => defValue : row => row[colIdx];\r\n    }\r\n\r\n    protected cellFunc<T>(column: string, defValue?: T): (row: any) => T {\r\n        return this.cellIdxFunc<T>(this.columnIdx(column), defValue);\r\n    }\r\n\r\n    parsedData() {\r\n        return this._db.parsedData();\r\n    }\r\n\r\n    formattedData() {\r\n        return this._db.formattedData();\r\n    }\r\n\r\n    data(): any;\r\n    data(_: any): this;\r\n    data(_?: any): any | this {\r\n        if (!arguments.length) return this._db.legacyData();\r\n        this._db.legacyData(_);\r\n        return this;\r\n    }\r\n\r\n    cloneData() {\r\n        return this.data().map(function (row) { return row.slice(0); });\r\n    }\r\n\r\n    flattenData(columns: string[] = this.columns(), data: any = this.data()) {\r\n        const retVal = [];\r\n        data.forEach(function (row, rowIdx) {\r\n            columns.filter(function (_col, idx) { return idx > 0; }).forEach(function (_col, idx) {\r\n                const val = row[idx + 1];\r\n                if (typeof val !== \"undefined\") {\r\n                    const newItem = {\r\n                        rowIdx,\r\n                        colIdx: idx + 1,\r\n                        label: row[0],\r\n                        value: val\r\n                    };\r\n                    retVal.push(newItem);\r\n                }\r\n            }, this);\r\n        }, this);\r\n        return retVal;\r\n    }\r\n\r\n    rowToObj(row: any[]): object {\r\n        if (!row) return {};\r\n        const retVal: any = {};\r\n        this.fields().forEach(function (field, idx) {\r\n            retVal[field.label_default() || field.label()] = row[idx];\r\n        });\r\n        if (row.length === this.columns().length + 1) {\r\n            retVal.__lparam = row[this.columns().length];\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    pos(): IPos;\r\n    pos(_: IPos): this;\r\n    pos(_?: IPos): IPos | this {\r\n        if (!arguments.length) return this._pos;\r\n        this._pos = _;\r\n        if (this._overlayElement) {\r\n            this._overlayElement\r\n                .attr(\"transform\", \"translate(\" + _.x + \",\" + _.y + \")scale(\" + this._widgetScale + \")\")\r\n                ;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    x(): number;\r\n    x(_): this;\r\n    x(_?): number | this {\r\n        if (!arguments.length) return this._pos.x;\r\n        this.pos({ x: _, y: this._pos.y });\r\n        return this;\r\n    }\r\n\r\n    y(): number;\r\n    y(_): this;\r\n    y(_?): number | this {\r\n        if (!arguments.length) return this._pos.y;\r\n        this.pos({ x: this._pos.x, y: _ });\r\n        return this;\r\n    }\r\n\r\n    size(): ISize;\r\n    size(_): this;\r\n    size(_?): ISize | this {\r\n        if (!arguments.length) return this._size;\r\n        this._size = _;\r\n        if (this._overlayElement) {\r\n            this._overlayElement\r\n                .attr(\"width\", _.width)\r\n                .attr(\"height\", _.height)\r\n                ;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    width(): number;\r\n    width(_): this;\r\n    width(_?): number | this {\r\n        if (!arguments.length) return this._size.width;\r\n        this.size({ width: _, height: this._size.height });\r\n        return this;\r\n    }\r\n\r\n    height(): number;\r\n    height(_): this;\r\n    height(_?): number | this {\r\n        if (!arguments.length) return this._size.height;\r\n        this.size({ width: this._size.width, height: _ });\r\n        return this;\r\n    }\r\n\r\n    resize(size?: ISize, delta: ISize = { width: 0, height: 0 }) {\r\n        let width;\r\n        let height;\r\n        if (size && size.width && size.height) {\r\n            width = size.width;\r\n            height = size.height;\r\n        } else {\r\n            const style = window.getComputedStyle(this._target, null);\r\n            width = parseFloat(style.getPropertyValue(\"width\")) - delta.width;\r\n            height = parseFloat(style.getPropertyValue(\"height\")) - delta.height;\r\n        }\r\n        this.size({\r\n            width,\r\n            height\r\n        });\r\n        return this;\r\n    }\r\n\r\n    scale(): number;\r\n    scale(_): this;\r\n    scale(_?): number | this {\r\n        if (!arguments.length) return this._widgetScale;\r\n        this._widgetScale = _;\r\n        if (this._overlayElement) {\r\n            this._overlayElement\r\n                .attr(\"transform\", \"translate(\" + _.x + \",\" + _.y + \")scale(\" + this._widgetScale + \")\")\r\n                ;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    visible(): boolean;\r\n    visible(_): this;\r\n    visible(_?): boolean | this {\r\n        if (!arguments.length) return this._visible;\r\n        this._visible = _;\r\n        if (this._element) {\r\n            this._element\r\n                .style(\"visibility\", this._visible ? null : \"hidden\")\r\n                .style(\"opacity\", this._visible ? null : 0)\r\n                ;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    display(): boolean;\r\n    display(_): this;\r\n    display(_?): boolean | this {\r\n        if (!arguments.length) return this._display;\r\n        this._display = _;\r\n        if (this._element) {\r\n            this._element.style(\"display\", this._display ? null : \"none\");\r\n        }\r\n        return this;\r\n    }\r\n\r\n    dataMeta(): DataMetaT;\r\n    dataMeta(_): this;\r\n    dataMeta(_?): DataMetaT | this {\r\n        if (!arguments.length) return this._dataMeta;\r\n        this._dataMeta = _;\r\n        return this;\r\n    }\r\n\r\n    private _appData = new Object({});\r\n    appData(key: string): any;\r\n    appData(key: string, value: any): this;\r\n    appData(key: string, value?: any): any | this {\r\n        if (arguments.length < 2) return this._appData[key];\r\n        this._appData[key] = value;\r\n        return this;\r\n    }\r\n\r\n    calcSnap(snapSize) {\r\n        function snap(x, gridSize) {\r\n            function snapDelta(x2, gridSize2) {\r\n                let dx = x2 % gridSize2;\r\n                if (Math.abs(dx) > gridSize2 - Math.abs(dx)) {\r\n                    dx = (gridSize2 - Math.abs(dx)) * (dx < 0 ? 1 : -1);\r\n                }\r\n                return dx;\r\n            }\r\n            return x - snapDelta(x, gridSize);\r\n        }\r\n        const l = snap(this._pos.x - this._size.width / 2, snapSize);\r\n        const t = snap(this._pos.y - this._size.height / 2, snapSize);\r\n        const r = snap(this._pos.x + this._size.width / 2, snapSize);\r\n        const b = snap(this._pos.y + this._size.height / 2, snapSize);\r\n        const w = r - l;\r\n        const h = b - t;\r\n        return [{ x: l + w / 2, y: t + h / 2 }, { width: w, height: h }];\r\n    }\r\n\r\n    //  DOM/SVG Node Helpers  ---\r\n    toWidget(domNode): Widget | null {\r\n        if (!domNode) {\r\n            return null;\r\n        }\r\n        const element = d3Select(domNode);\r\n        if (element) {\r\n            const widget = element.datum();\r\n            if (widget && widget instanceof Widget) {\r\n                return widget;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    parentOverlay() {\r\n        return null;\r\n    }\r\n\r\n    locateParentWidget(domNode?): Widget | null {\r\n        domNode = domNode || (this._target ? this._target.parentNode : null);\r\n        if (domNode) {\r\n            const widget = this.toWidget(domNode);\r\n            if (widget) {\r\n                return widget;\r\n            } else if (domNode.parentNode) {\r\n                return this.locateParentWidget(domNode.parentNode);\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    locateSVGNode(domNode): SVGSVGElement | null {\r\n        if (!domNode) {\r\n            return null;\r\n        }\r\n        if (domNode.tagName === \"svg\") {\r\n            return domNode;\r\n        }\r\n        return this.locateSVGNode(domNode.parentNode);\r\n    }\r\n\r\n    locateOverlayNode() {\r\n        let widget = this.locateParentWidget(this._target);\r\n        while (widget) {\r\n            const retVal = widget.parentOverlay();\r\n            if (retVal) {\r\n                return retVal;\r\n            }\r\n            widget = this.locateParentWidget(widget._target.parentNode);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    locateAncestor(classID): Widget | null {\r\n        return this.locateClosestAncestor([classID]);\r\n    }\r\n\r\n    locateClosestAncestor(classIDArr): Widget | null {\r\n        let widget = this.locateParentWidget(this._target);\r\n        while (widget) {\r\n            if (classIDArr.indexOf(widget.classID()) !== -1) {\r\n                return widget;\r\n            }\r\n            widget = this.locateParentWidget(widget._target.parentNode);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    getAbsolutePos(domNode, w, h) {\r\n        const root = this.locateSVGNode(domNode);\r\n        if (!root) {\r\n            return null;\r\n        }\r\n        let pos = root.createSVGPoint();\r\n        const ctm = domNode.getCTM();\r\n        pos = pos.matrixTransform(ctm);\r\n        const retVal: any = {\r\n            x: pos.x,\r\n            y: pos.y\r\n        };\r\n        if (w !== undefined && h !== undefined) {\r\n            let size = root.createSVGPoint();\r\n            size.x = w;\r\n            size.y = h;\r\n            size = size.matrixTransform(ctm);\r\n            retVal.width = size.x - pos.x;\r\n            retVal.height = size.y - pos.y;\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    hasOverlay() {\r\n        return this._overlayElement;\r\n    }\r\n\r\n    syncOverlay() {\r\n        if (this._size.width && this._size.height) {\r\n            const newPos = this.getAbsolutePos(this._overlayElement.node(), this._size.width, this._size.height);\r\n            if (newPos && (!this._prevPos || newPos.x !== this._prevPos.x || newPos.y !== this._prevPos.y || newPos.width !== this._prevPos.width || newPos.height !== this._prevPos.height)) {\r\n                const xScale = newPos.width / this._size.width;\r\n                const yScale = newPos.height / this._size.height;\r\n                this._placeholderElement\r\n                    .style(\"left\", newPos.x - (newPos.width / xScale) / 2 + \"px\")\r\n                    .style(\"top\", newPos.y - (newPos.height / yScale) / 2 + \"px\")\r\n                    .style(\"width\", newPos.width / xScale + \"px\")\r\n                    .style(\"height\", newPos.height / yScale + \"px\")\r\n                    ;\r\n                const transform = \"scale(\" + xScale + \",\" + yScale + \")\";\r\n                this._placeholderElement\r\n                    .style(\"transform\", transform)\r\n                    .style(\"-moz-transform\", transform)\r\n                    .style(\"-ms-transform\", transform)\r\n                    .style(\"-webkit-transform\", transform)\r\n                    .style(\"-o-transform\", transform)\r\n                    ;\r\n            }\r\n            this._prevPos = newPos;\r\n        }\r\n    }\r\n\r\n    getBBox(refresh = false, round = false): BBox {\r\n        return {\r\n            x: 0,\r\n            y: 0,\r\n            width: 0,\r\n            height: 0\r\n        };\r\n    }\r\n\r\n    textSize(_text: string | string[], fontName: string = \"Verdana\", fontSize: number = 12, bold: boolean = false): Readonly<TextSize> {\r\n        return textSize(_text, fontName, fontSize, bold);\r\n    }\r\n\r\n    textRect(_text: string, fontName: string = \"Verdana\", fontSize: number = 12, bold: boolean = false): Readonly<TextRect> {\r\n        return textRect(_text, fontName, fontSize, bold);\r\n    }\r\n\r\n    element() {\r\n        return this._element;\r\n    }\r\n\r\n    node() {\r\n        return this._element.node();\r\n    }\r\n\r\n    target(): null | HTMLElement | SVGElement;\r\n    target(_: null | string | HTMLElement | SVGElement): this;\r\n    target(_?: null | string | HTMLElement | SVGElement): null | HTMLElement | SVGElement | this {\r\n        if (!arguments.length) return this._target;\r\n        if (this._target && _) {\r\n            throw new Error(\"Target can only be assigned once.\");\r\n        }\r\n        if (_ === null) {\r\n            this._target = null;\r\n            if (this.renderCount()) {\r\n                this.exit();\r\n            }\r\n        } else if (typeof _ === \"string\") {\r\n            this._target = document.getElementById(_);\r\n        } else if (_ instanceof HTMLElement || _ instanceof SVGElement) {\r\n            this._target = _;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    isDOMHidden(): boolean {\r\n        // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\r\n        // Note:  Will return false for visible===hidden (which is ok as it still takes up space on the page)\r\n        return this._isRootNode && this._placeholderElement.node().offsetParent === null;\r\n    }\r\n\r\n    hasSize() {\r\n        return !isNaN(this.width()) && !isNaN(this.height());\r\n    }\r\n\r\n    protected publishedWidgets(): Widget[] {\r\n        let widgets = [];\r\n        this.publishedProperties(true).forEach(function (meta) {\r\n            if (!meta.ext || meta.ext.render !== false) {\r\n                switch (meta.type) {\r\n                    case \"widget\":\r\n                        const widget = this[meta.id]();\r\n                        if (widget) {\r\n                            widgets.push(widget);\r\n                        }\r\n                        break;\r\n                    case \"widgetArray\":\r\n                        widgets = widgets.concat(this[meta.id]());\r\n                        break;\r\n                }\r\n            }\r\n        }, this);\r\n        return widgets;\r\n    }\r\n\r\n    //  Render  ---\r\n    private _prevNow = 0;\r\n    render(callback?: (w: Widget) => void) {\r\n        if ((window as any).__hpcc_debug) {\r\n            const now = Date.now();\r\n            if (now - this._prevNow < 500) {\r\n                console.error(\"Double Render:  \" + (now - this._prevNow) + \" - \" + this.id() + \" - \" + this.classID());\r\n            }\r\n            this._prevNow = now;\r\n        }\r\n\r\n        callback = callback || function () { };\r\n        if (!this._placeholderElement || !this.visible() || this.isDOMHidden() || !this.hasSize()) {\r\n            callback(this);\r\n            return this;\r\n        }\r\n        if (this._placeholderElement) {\r\n            if (!this._tag)\r\n                throw new Error(\"No DOM tag specified\");\r\n\r\n            const elements = this._placeholderElement.selectAll(\"#\" + this._id).data([this], function (d) { return d._id; });\r\n            elements.enter().append(this._tag)\r\n                .classed(this._class, true)\r\n                .attr(\"id\", this._id)\r\n                // .attr(\"opacity\", 0.50)  //  Uncomment to debug position offsets  ---\r\n                .each(function (context2) {\r\n                    context2._element = d3Select(this);\r\n                    context2.enter(this, context2._element);\r\n                    if ((window as any).__hpcc_debug) {\r\n                        context2.leakCheck(this);\r\n                    }\r\n                })\r\n                .merge(elements)\r\n                .each(function (context2) {\r\n                    const element = d3Select(this);\r\n                    const classed = context2.classed();\r\n                    for (const key in classed) {\r\n                        element.classed(key, classed[key]);\r\n                    }\r\n                    context2.preUpdate(this, context2._element);\r\n                    context2.update(this, context2._element);\r\n                    context2.postUpdate(this, context2._element);\r\n                })\r\n                ;\r\n            elements.exit()\r\n                .each(function (context2) {\r\n                    d3Select(this).datum(null);\r\n                    context2.exit(this, context2._element);\r\n                })\r\n                .remove()\r\n                ;\r\n            this._renderCount++;\r\n        }\r\n\r\n        //  ASync Render Contained Widgets  ---\r\n        const widgets = this.publishedWidgets();\r\n\r\n        const context = this;\r\n        switch (widgets.length) {\r\n            case 0:\r\n                callback(this);\r\n                break;\r\n            case 1:\r\n                widgets[0].render(function () {\r\n                    callback(context);\r\n                });\r\n                break;\r\n            default:\r\n                let renderCount = widgets.length;\r\n                widgets.forEach(function (widget, _idx) {\r\n                    setTimeout(function () {\r\n                        widget.render(function () {\r\n                            if (--renderCount === 0) {\r\n                                callback(context);\r\n                            }\r\n                        });\r\n                    }, 0);\r\n                });\r\n                break;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    renderPromise(): Promise<Widget> {\r\n        return new Promise((resolve, reject) => {\r\n            this.render((w: Widget) => {\r\n                resolve(w);\r\n            });\r\n        });\r\n    }\r\n\r\n    private _lazyRender = debounce(function (debouncedCallback?: (w: Widget) => void) {\r\n        this.render(debouncedCallback);\r\n    }, 100);\r\n\r\n    lazyRender(callback?: (w: Widget) => void): this {\r\n        this._lazyRender(callback);\r\n        return this;\r\n    }\r\n\r\n    animationFrameRender(): this {\r\n        if (requestAnimationFrame) {\r\n            requestAnimationFrame(() => {\r\n                this.render();\r\n            });\r\n        } else {\r\n            //  Not a real replacement for requestAnimationFrame  ---\r\n            this.renderPromise();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    enter(_domNode: HTMLElement, _element) { }\r\n    preUpdate(_domNode: HTMLElement, _element) { }\r\n    update(_domNode: HTMLElement, _element) { }\r\n    postUpdate(_domNode: HTMLElement, _element) { }\r\n    exit(_domNode?: HTMLElement, _element?) {\r\n        this.publishedWidgets().forEach(w => w.target(null));\r\n    }\r\n}\r\nWidget.prototype._class += \" common_Widget\";\r\n\r\nexport interface Widget {\r\n    fields(): Field[];\r\n    fields(_: Field[]): this;\r\n    classed(classID: string): boolean;\r\n    classed(classID: string, _: boolean): this;\r\n    classed(): { [classID: string]: boolean };\r\n    classed(_: { [classID: string]: boolean }): this;\r\n}\r\n\r\nWidget._idSeed = \"_w\";\r\n\r\nWidget.prototype.publishProxy(\"fields\", \"_db\", \"fields\");\r\nWidget.prototype.publish(\"classed\", {}, \"object\", \"HTML Classes\", null, { tags: [\"Private\"] });\r\nconst origClassed = Widget.prototype.classed;\r\nWidget.prototype.classed = function (this: Widget, str_obj?: string | { [classID: string]: boolean }, _?: boolean) {\r\n    if (typeof str_obj === \"string\") {\r\n        if (arguments.length === 1) return origClassed.call(this)[str_obj];\r\n        const classed = origClassed.call(this);\r\n        origClassed.call(this, { ...classed, [str_obj]: _ });\r\n        return this;\r\n    }\r\n    return origClassed.apply(this, arguments);\r\n};\r\n","import { select as d3Select } from \"d3-selection\";\r\nimport { Widget } from \"./Widget.ts\";\r\n\r\nexport class HTMLWidget extends Widget {\r\n\r\n    private observer;\r\n    protected _drawStartPos: \"origin\" | \"center\";\r\n    protected _boundingBox;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._drawStartPos = \"origin\";\r\n        this._tag = \"div\";\r\n        this._boundingBox = null;\r\n    }\r\n\r\n    calcFrameWidth(element) {\r\n        const retVal = parseFloat(element.style(\"padding-left\")) +\r\n            parseFloat(element.style(\"padding-right\")) +\r\n            parseFloat(element.style(\"margin-left\")) +\r\n            parseFloat(element.style(\"margin-right\")) +\r\n            parseFloat(element.style(\"border-left-width\")) +\r\n            parseFloat(element.style(\"border-right-width\"))\r\n            ;\r\n        return retVal;\r\n    }\r\n\r\n    calcWidth(element) {\r\n        return parseFloat(element.style(\"width\")) - this.calcFrameWidth(element);\r\n    }\r\n\r\n    calcFrameHeight(element) {\r\n        const retVal = parseFloat(element.style(\"padding-top\")) +\r\n            parseFloat(element.style(\"padding-bottom\")) +\r\n            parseFloat(element.style(\"margin-top\")) +\r\n            parseFloat(element.style(\"margin-bottom\")) +\r\n            parseFloat(element.style(\"border-top-width\")) +\r\n            parseFloat(element.style(\"border-bottom-width\"))\r\n            ;\r\n        return retVal;\r\n    }\r\n\r\n    calcHeight(element) {\r\n        return parseFloat(element.style(\"height\")) + this.calcFrameHeight(element);\r\n    }\r\n\r\n    hasHScroll(element?) {\r\n        element = element || this._element;\r\n        return element.property(\"scrollWidth\") > element.property(\"clientWidth\");\r\n    }\r\n\r\n    hasVScroll(element?) {\r\n        element = element || this._element;\r\n        return element.property(\"scrollHeight\") > element.property(\"clientHeight\");\r\n    }\r\n\r\n    clientWidth() {\r\n        return this._size.width - this.calcFrameWidth(this._element);\r\n    }\r\n\r\n    clientHeight() {\r\n        return this._size.height - this.calcFrameHeight(this._element);\r\n    }\r\n\r\n    getBBox(refresh = false, round = false) {\r\n        if (refresh || this._boundingBox === null) {\r\n            const domNode = this._element.node() ? this._element.node().firstElementChild : null;   //  Needs to be first child, as element has its width/height forced onto it.\r\n            if (domNode instanceof Element) {\r\n                const rect = domNode.getBoundingClientRect();\r\n                this._boundingBox = {\r\n                    x: rect.left,\r\n                    y: rect.top,\r\n                    width: rect.width,\r\n                    height: rect.height\r\n                };\r\n            }\r\n        }\r\n        if (this._boundingBox === null) {\r\n            return {\r\n                x: 0,\r\n                y: 0,\r\n                width: 0,\r\n                height: 0\r\n            };\r\n        }\r\n        return {\r\n            x: (round ? Math.round(this._boundingBox.x) : this._boundingBox.x) * this._widgetScale,\r\n            y: (round ? Math.round(this._boundingBox.y) : this._boundingBox.y) * this._widgetScale,\r\n            width: (round ? Math.round(this._boundingBox.width) : this._boundingBox.width) * this._widgetScale,\r\n            height: (round ? Math.round(this._boundingBox.height) : this._boundingBox.height) * this._widgetScale\r\n        };\r\n    }\r\n\r\n    reposition(pos?) {\r\n        // const retVal = super.reposition(pos);\r\n        if (this._placeholderElement) {\r\n            this._placeholderElement\r\n                .style(\"left\", pos.x + \"px\")\r\n                .style(\"top\", pos.y + \"px\")\r\n                ;\r\n        }\r\n        return this;\r\n    }\r\n\r\n    resize(size?) {\r\n        const retVal = super.resize(size);\r\n        if (this._placeholderElement) {\r\n            this._placeholderElement\r\n                .style(\"width\", this._size.width + \"px\")\r\n                .style(\"height\", this._size.height + \"px\")\r\n                ;\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    //  Properties  ---\r\n    target(): null | HTMLElement | SVGElement;\r\n    target(_: null | string | HTMLElement | SVGElement): this;\r\n    target(_?: null | string | HTMLElement | SVGElement): null | HTMLElement | SVGElement | this {\r\n        const retVal = super.target.apply(this, arguments);\r\n        if (arguments.length) {\r\n            if (this._target instanceof SVGElement) {\r\n                //  Target is a SVG Node, so create an item in the Overlay and force it \"over\" the overlay element (cough)  ---\r\n                this._isRootNode = false;\r\n                const overlay = this.locateOverlayNode();\r\n                this._placeholderElement = overlay.append(\"div\")\r\n                    .style(\"position\", \"absolute\")\r\n                    .style(\"top\", \"0px\")\r\n                    .style(\"left\", \"0px\")\r\n                    .style(\"overflow\", \"hidden\")\r\n                    ;\r\n                this._overlayElement = d3Select(this._target);\r\n\r\n                this._prevPos = null;\r\n                this.observer = new MutationObserver(_mutation => {\r\n                    this.syncOverlay();\r\n                });\r\n\r\n                let domNode = this._overlayElement.node();\r\n                while (domNode) {\r\n                    this.observer.observe(domNode, { attributes: true });\r\n                    domNode = domNode.parentNode;\r\n                }\r\n            } else if (this._target) {  //  HTMLElement\r\n                this._placeholderElement = d3Select(this._target);\r\n                if (!this._size.width && !this._size.height) {\r\n                    const width = parseFloat(this._placeholderElement.style(\"width\"))\r\n                        - (parseFloat(this._placeholderElement.style(\"margin-left\")) + parseFloat(this._placeholderElement.style(\"margin-right\")))\r\n                        - (parseFloat(this._placeholderElement.style(\"border-left\")) + parseFloat(this._placeholderElement.style(\"border-right\")))\r\n                        - (parseFloat(this._placeholderElement.style(\"padding-left\")) + parseFloat(this._placeholderElement.style(\"padding-right\")))\r\n                        ;\r\n                    const height = parseFloat(this._placeholderElement.style(\"height\"))\r\n                        - (parseFloat(this._placeholderElement.style(\"margin-top\")) + parseFloat(this._placeholderElement.style(\"margin-bottom\")))\r\n                        - (parseFloat(this._placeholderElement.style(\"border-top\")) + parseFloat(this._placeholderElement.style(\"border-bottom\")))\r\n                        - (parseFloat(this._placeholderElement.style(\"padding-top\")) + parseFloat(this._placeholderElement.style(\"padding-bottom\")))\r\n                        ;\r\n                    this.size({\r\n                        width,\r\n                        height\r\n                    });\r\n                }\r\n                this._placeholderElement = d3Select(this._target).append(\"div\");\r\n            }\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    postUpdate(domNode, element) {\r\n        super.postUpdate(domNode, element);\r\n        if (this._drawStartPos === \"origin\") {\r\n            this._element\r\n                .style(\"position\", \"relative\")\r\n                .style(\"left\", this._pos.x + \"px\")\r\n                .style(\"top\", this._pos.y + \"px\")\r\n                ;\r\n        } else {\r\n            const bbox = this.getBBox(true);\r\n            this._element\r\n                .style(\"position\", \"relative\")\r\n                .style(\"float\", \"left\")\r\n                .style(\"left\", this._pos.x + (this._size.width - bbox.width) / 2 + \"px\")\r\n                .style(\"top\", this._pos.y + (this._size.height - bbox.height) / 2 + \"px\")\r\n                ;\r\n        }\r\n    }\r\n\r\n    exit(domNode?, element?) {\r\n        if (this.observer) {\r\n            this.observer.disconnect();\r\n        }\r\n        this._prevPos = null;\r\n        if (this._placeholderElement) {\r\n            this._placeholderElement.remove();\r\n        }\r\n        super.exit(domNode, element);\r\n    }\r\n}\r\nHTMLWidget.prototype._class += \" common_HTMLWidget\";\r\n","import { HTMLWidget } from \"./HTMLWidget.ts\";\r\n\r\nexport class CanvasWidget extends HTMLWidget {\r\n\r\n    _ctx: CanvasRenderingContext2D;\r\n    constructor() {\r\n        super();\r\n        this._tag = \"canvas\";\r\n    }\r\n\r\n    resize(size) {\r\n        const retVal = super.resize(size);\r\n        try {\r\n            this._element.attr(\"width\", this._size.width);\r\n            this._element.attr(\"height\", this._size.height);\r\n            this.resetContext();\r\n        } catch (e) {\r\n            console.error(e);\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    resetContext() {\r\n        this._ctx = this._element.node().getContext(\"2d\");\r\n    }\r\n\r\n    click(d, c) {\r\n        // console.log(d);\r\n    }\r\n}\r\nCanvasWidget.prototype._class += \" common_CanvasWidget\";\r\n","import { easeCubicInOut as d3CubicInOut } from \"d3-ease\";\r\n\r\nexport class Transition {\r\n\r\n    protected _widget;\r\n    protected _duration;\r\n    protected _delay;\r\n    protected _ease;\r\n\r\n    constructor(widget) {\r\n        this._widget = widget;\r\n        this._duration = 250;\r\n        this._delay = 0;\r\n        this._ease = d3CubicInOut;\r\n    }\r\n\r\n    duration(_?) {\r\n        if (!arguments.length) return this._duration;\r\n        this._duration = _;\r\n        return this._widget;\r\n    }\r\n\r\n    delay(_?) {\r\n        if (!arguments.length) return this._delay;\r\n        this._delay = _;\r\n        return this._widget;\r\n    }\r\n\r\n    ease(_?) {\r\n        if (!arguments.length) return this._ease;\r\n        this._ease = _;\r\n        return this._widget;\r\n    }\r\n\r\n    apply(selection) {\r\n        if (this._duration || this._delay) {\r\n            return selection.transition()\r\n                .duration(this._duration)\r\n                .delay(this._delay)\r\n                .ease(this._ease)\r\n                ;\r\n        }\r\n        return selection;\r\n    }\r\n}\r\n","import { rgb as d3Rgb } from \"d3-color\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { fontAwsesomeStyle } from \"./FAChar.ts\";\r\nimport { svgMarkerGlitch } from \"./Platform.ts\";\r\nimport { Transition } from \"./Transition.ts\";\r\nimport { debounce, downloadBlob, downloadString, timestamp } from \"./Utility.ts\";\r\nimport { ISize, Widget } from \"./Widget.ts\";\r\n\r\ntype Point = { x: number, y: number };\r\ntype Rect = { x: number, y: number, width: number, height: number };\r\n\r\nconst lerp = function (point: Point, that: Point, t: number): Point {\r\n    //  From https://github.com/thelonious/js-intersections\r\n    return {\r\n        x: point.x + (that.x - point.x) * t,\r\n        y: point.y + (that.y - point.y) * t\r\n    };\r\n};\r\n\r\ntype LineIntersection = { type: \"Intersection\" | \"No Intersection\" | \"Coincident\" | \"Parallel\", points: Point[] };\r\nconst intersectLineLine = function (a1: Point, a2: Point, b1: Point, b2: Point): LineIntersection {\r\n    //  From https://github.com/thelonious/js-intersections\r\n    const result: LineIntersection = { type: \"Parallel\", points: [] };\r\n    const uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\r\n    const ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\r\n    const uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\r\n\r\n    if (uB !== 0) {\r\n        const ua = uaT / uB;\r\n        const ub = ubT / uB;\r\n\r\n        if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\r\n            result.type = \"Intersection\";\r\n            result.points.push({\r\n                x: a1.x + ua * (a2.x - a1.x),\r\n                y: a1.y + ua * (a2.y - a1.y)\r\n            });\r\n        } else {\r\n            result.type = \"No Intersection\";\r\n        }\r\n    } else {\r\n        if (uaT === 0 || ubT === 0) {\r\n            result.type = \"Coincident\";\r\n        } else {\r\n            result.type = \"Parallel\";\r\n        }\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\ntype CircleIntersection = { type: \"Outside\" | \"Tangent\" | \"Inside\" | \"Intersection\", points: Point[] };\r\nconst intersectCircleLine = function (c: Point, r: number, a1: Point, a2: Point): CircleIntersection {\r\n    //  From https://github.com/thelonious/js-intersections\r\n    const result: CircleIntersection = { type: \"Intersection\", points: [] };\r\n    const a = (a2.x - a1.x) * (a2.x - a1.x) +\r\n        (a2.y - a1.y) * (a2.y - a1.y);\r\n    const b = 2 * ((a2.x - a1.x) * (a1.x - c.x) +\r\n        (a2.y - a1.y) * (a1.y - c.y));\r\n    const cc = c.x * c.x + c.y * c.y + a1.x * a1.x + a1.y * a1.y -\r\n        2 * (c.x * a1.x + c.y * a1.y) - r * r;\r\n    const deter = b * b - 4 * a * cc;\r\n\r\n    if (deter < 0) {\r\n        result.type = \"Outside\";\r\n    } else if (deter === 0) {\r\n        result.type = \"Tangent\";\r\n        // NOTE: should calculate this point\r\n    } else {\r\n        const e = Math.sqrt(deter);\r\n        const u1 = (-b + e) / (2 * a);\r\n        const u2 = (-b - e) / (2 * a);\r\n\r\n        if ((u1 < 0 || u1 > 1) && (u2 < 0 || u2 > 1)) {\r\n            if ((u1 < 0 && u2 < 0) || (u1 > 1 && u2 > 1)) {\r\n                result.type = \"Outside\";\r\n            } else {\r\n                result.type = \"Inside\";\r\n            }\r\n        } else {\r\n            result.type = \"Intersection\";\r\n\r\n            if (0 <= u1 && u1 <= 1)\r\n                result.points.push(lerp(a1, a2, u1));\r\n\r\n            if (0 <= u2 && u2 <= 1)\r\n                result.points.push(lerp(a1, a2, u2));\r\n        }\r\n    }\r\n\r\n    return result;\r\n};\r\n\r\nexport class SVGGlowFilter {\r\n    protected id;\r\n    protected filter;\r\n    protected feOffset;\r\n    protected feColorMatrix;\r\n    protected feGaussianBlur;\r\n    protected feBlend;\r\n\r\n    constructor(target, id: string) {\r\n        this.id = id;\r\n        this.filter = target.append(\"filter\")\r\n            .attr(\"id\", id)\r\n            .attr(\"width\", \"130%\")\r\n            .attr(\"height\", \"130%\");\r\n        this.feOffset = this.filter.append(\"feOffset\")\r\n            .attr(\"result\", \"offOut\")\r\n            .attr(\"in\", \"SourceGraphic\")\r\n            .attr(\"dx\", \"0\")\r\n            .attr(\"dy\", \"0\");\r\n        this.feColorMatrix = this.filter.append(\"feColorMatrix\")\r\n            .attr(\"result\", \"matrixOut\")\r\n            .attr(\"in\", \"offOut\")\r\n            .attr(\"type\", \"matrix\")\r\n            .attr(\"values\", this.rgb2ColorMatrix(\"red\"))\r\n            ;\r\n        this.feGaussianBlur = this.filter.append(\"feGaussianBlur\")\r\n            .attr(\"result\", \"blurOut\")\r\n            .attr(\"in\", \"matrixOut\")\r\n            .attr(\"stdDeviation\", \"3\")\r\n            ;\r\n        this.feBlend = this.filter.append(\"feBlend\")\r\n            .attr(\"in\", \"SourceGraphic\")\r\n            .attr(\"in2\", \"blurOut\")\r\n            .attr(\"mode\", \"normal\")\r\n            ;\r\n    }\r\n\r\n    rgb2ColorMatrix(color: string): string {\r\n        const rgb = d3Rgb(color);\r\n        return [\r\n            rgb.r / 255, 0, 0, 0, rgb.r ? 1 : 0,\r\n            0, rgb.g / 255, 0, 0, rgb.g ? 1 : 0,\r\n            0, 0, rgb.b / 255, 0, rgb.b ? 1 : 0,\r\n            0, 0, 0, 1, 0\r\n        ].join(\" \");\r\n    }\r\n\r\n    enable(enable: boolean) {\r\n        this.filter.attr(\"id\", enable ? this.id : `disabled_${this.id}`);\r\n        return this;\r\n    }\r\n\r\n    update(color: string) {\r\n        this.feColorMatrix.attr(\"values\", this.rgb2ColorMatrix(color));\r\n        return this;\r\n    }\r\n}\r\n\r\nexport class SVGWidget extends Widget {\r\n    static _class = \"common_SVGWidget\";\r\n\r\n    protected _boundingBox;\r\n    protected transition;\r\n    protected _drawStartPos: \"center\" | \"origin\";\r\n    protected _svgSelectionFilter: SVGGlowFilter;\r\n    protected _parentRelativeDiv;\r\n    protected _parentOverlay;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._tag = \"g\";\r\n\r\n        this._boundingBox = null;\r\n\r\n        this.transition = new Transition(this);\r\n\r\n        this._drawStartPos = \"center\";\r\n    }\r\n\r\n    //  Properties  ---\r\n    move(_?, transitionDuration?) {\r\n        const retVal = this.pos(_);\r\n        if (arguments.length) {\r\n            (transitionDuration ? this._element.transition().duration(transitionDuration) : this._element)\r\n                .attr(\"transform\", `translate(${_.x} ${_.y})scale(${this._widgetScale})`)\r\n                ;\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    _enableOverflow = false;\r\n    enableOverflow(): boolean;\r\n    enableOverflow(_: boolean): this;\r\n    enableOverflow(_?: boolean): boolean | this {\r\n        if (!arguments.length) return this._enableOverflow;\r\n        this._enableOverflow = _;\r\n        return this;\r\n    }\r\n\r\n    _enableOverflowScroll = true;\r\n    enableOverflowScroll(): boolean;\r\n    enableOverflowScroll(_: boolean): this;\r\n    enableOverflowScroll(_?: boolean): boolean | this {\r\n        if (!arguments.length) return this._enableOverflowScroll;\r\n        this._enableOverflowScroll = _;\r\n        return this;\r\n    }\r\n\r\n    size(): ISize;\r\n    size(_): this;\r\n    size(_?): ISize | this {\r\n        const retVal = super.size.apply(this, arguments);\r\n        if (arguments.length) {\r\n            this._boundingBox = null;\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    resize(_size?: { width: number, height: number }) {\r\n        const retVal = super.resize.apply(this, arguments);\r\n        if (this._parentRelativeDiv) {\r\n            this._parentRelativeDiv\r\n                .style(\"width\", this._size.width + \"px\")\r\n                .style(\"height\", this._size.height + \"px\")\r\n                ;\r\n            switch (this._drawStartPos) {\r\n                case \"origin\":\r\n                    this.pos({\r\n                        x: 0,\r\n                        y: 0\r\n                    });\r\n                    break;\r\n                case \"center\":\r\n                /* falls through */\r\n                default:\r\n                    this.pos({\r\n                        x: this._size.width / 2,\r\n                        y: this._size.height / 2\r\n                    });\r\n                    break;\r\n            }\r\n        }\r\n        if (!isNaN(this._size.width)) this._placeholderElement.attr(\"width\", this._size.width);\r\n        if (!isNaN(this._size.height)) this._placeholderElement.attr(\"height\", this._size.height);\r\n        return retVal;\r\n    }\r\n    //  Glow Highlighting  ---\r\n    svgGlowID(): string {\r\n        return `sel${this.id()}_glow`;\r\n    }\r\n\r\n    target(): null | HTMLElement | SVGElement;\r\n    target(_: null | string | HTMLElement | SVGElement): this;\r\n    target(_?: null | string | HTMLElement | SVGElement): null | HTMLElement | SVGElement | this {\r\n        const retVal = super.target.apply(this, arguments);\r\n        if (arguments.length) {\r\n            if (this._target instanceof SVGElement) {\r\n                this._isRootNode = false;\r\n                this._placeholderElement = d3Select(this._target);\r\n                this._parentWidget = this._placeholderElement.datum();\r\n                if (!this._parentWidget || this._parentWidget._id === this._id) {\r\n                    this._parentWidget = this.locateParentWidget(this._target.parentNode);\r\n                }\r\n                this._parentOverlay = this.locateOverlayNode();\r\n                const svg = this.locateSVGNode(this._target);\r\n                const svgDefs = d3Select(svg).select<SVGDefsElement>(\"defs\");\r\n                this._svgSelectionFilter = new SVGGlowFilter(svgDefs, this.svgGlowID());\r\n            } else if (this._target) {\r\n                //  Target is a DOM Node, so create a SVG Element  ---\r\n                this._parentRelativeDiv = d3Select(this._target).append(\"div\")\r\n                    .style(\"position\", \"relative\")\r\n                    ;\r\n                this._placeholderElement = this._parentRelativeDiv.append(\"svg\")\r\n                    .style(\"position\", \"absolute\")\r\n                    .style(\"top\", \"0px\")\r\n                    .style(\"left\", \"0px\")\r\n                    ;\r\n                const svgDefs = this._placeholderElement.append(\"defs\");\r\n                this._svgSelectionFilter = new SVGGlowFilter(svgDefs, this.svgGlowID());\r\n                this._parentOverlay = this._parentRelativeDiv.append(\"div\")\r\n                    .style(\"position\", \"absolute\")\r\n                    .style(\"top\", \"0px\")\r\n                    .style(\"left\", \"0px\")\r\n                    ;\r\n                if (this._size.width && this._size.height) {\r\n                    this.resize(this._size);\r\n                } else {\r\n                    this.resize({ width: 0, height: 0 });\r\n                }\r\n            }\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    get parentRelativeDiv() {\r\n        return this._parentRelativeDiv;\r\n    }\r\n\r\n    parentOverlay() {\r\n        return this._parentOverlay;\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        if (this._svgSelectionFilter) {\r\n            this._svgSelectionFilter\r\n                .enable(this.selectionGlow())\r\n                .update(this.selectionGlowColor())\r\n                ;\r\n        }\r\n    }\r\n\r\n    postUpdate(domNode, element) {\r\n        super.postUpdate(domNode, element);\r\n        let transX;\r\n        let transY;\r\n        if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\r\n            transX = (this._pos.x - this._size.width / 2);\r\n            transY = (this._pos.y - this._size.height / 2);\r\n            this._element.attr(\"transform\", \"translate(\" + transX + \",\" + transY + \")scale(\" + this._widgetScale + \")\");\r\n        } else {\r\n            transX = this._pos.x;\r\n            transY = this._pos.y;\r\n            if (this._enableOverflow) {\r\n                //  Individual Widgets will need to size and position themselves corrrectly (and have calculated a BBox) ---\r\n                if ((transX < 0 || transY < 0) && this._boundingBox) {\r\n                    transX = transX < 0 ? 0 : transX;\r\n                    transY = transY < 0 ? 0 : transY;\r\n                    if (this._enableOverflowScroll) {\r\n                        this._parentRelativeDiv.style(\"overflow\", \"scroll\");\r\n                    }\r\n                    this._placeholderElement.attr(\"width\", this._boundingBox.width);\r\n                    this._placeholderElement.attr(\"height\", this._boundingBox.height);\r\n                } else {\r\n                    this._parentRelativeDiv.style(\"overflow\", null);\r\n                }\r\n            }\r\n            this._element.attr(\"transform\", \"translate(\" + transX + \",\" + transY + \")scale(\" + this._widgetScale + \")\");\r\n        }\r\n    }\r\n\r\n    exit(domNode?, element?) {\r\n        if (this._parentRelativeDiv) {\r\n            this._parentOverlay.remove();\r\n            this._placeholderElement.remove();\r\n            this._parentRelativeDiv.remove();\r\n        }\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    getOffsetPos(): Point {\r\n        let retVal = { x: 0, y: 0 };\r\n        if (this._parentWidget) {\r\n            retVal = this._parentWidget.getOffsetPos();\r\n            retVal.x += this._pos.x;\r\n            retVal.y += this._pos.y;\r\n            return retVal;\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    getBBox(refresh = false, round = false): Rect {\r\n        if (refresh || this._boundingBox === null) {\r\n            const svgNode: SVGElement = this._element.node();\r\n            if (svgNode instanceof SVGElement) {\r\n                this._boundingBox = (svgNode as any).getBBox();\r\n            }\r\n        }\r\n        if (this._boundingBox === null) {\r\n            return {\r\n                x: 0,\r\n                y: 0,\r\n                width: 0,\r\n                height: 0\r\n            };\r\n        }\r\n        return {\r\n            x: (round ? Math.round(this._boundingBox.x) : this._boundingBox.x) * this._widgetScale,\r\n            y: (round ? Math.round(this._boundingBox.y) : this._boundingBox.y) * this._widgetScale,\r\n            width: (round ? Math.round(this._boundingBox.width) : this._boundingBox.width) * this._widgetScale,\r\n            height: (round ? Math.round(this._boundingBox.height) : this._boundingBox.height) * this._widgetScale\r\n        };\r\n    }\r\n\r\n    //  Intersections  ---\r\n    contains(point: Point): boolean {\r\n        return this.containsRect(point);\r\n    }\r\n\r\n    containsRect(point: Point): boolean {\r\n        const size = this.getBBox();\r\n        return point.x >= size.x && point.x <= size.x + size.width && point.y >= size.y && point.y <= size.y + size.height;\r\n    }\r\n\r\n    containsCircle(radius: number, point: Point) {\r\n        const center = this.getOffsetPos();\r\n        return this.distance(center, point) <= radius;\r\n    }\r\n\r\n    intersection(pointA: Point, pointB: Point): Point | null {\r\n        return this.intersectRect(pointA, pointB);\r\n    }\r\n\r\n    intersectRect(pointA: Point, pointB: Point): Point | null {\r\n        const center = this.getOffsetPos();\r\n        const size = this.getBBox();\r\n        if (pointA.x === pointB.x && pointA.y === pointB.y) {\r\n            return pointA;\r\n        }\r\n        const TL = { x: center.x - size.width / 2, y: center.y - size.height / 2 };\r\n        const TR = { x: center.x + size.width / 2, y: center.y - size.height / 2 };\r\n        const BR = { x: center.x + size.width / 2, y: center.y + size.height / 2 };\r\n        const BL = { x: center.x - size.width / 2, y: center.y + size.height / 2 };\r\n        let intersection = intersectLineLine(TL, TR, pointA, pointB);\r\n        if (intersection.points.length) {\r\n            return { x: intersection.points[0].x, y: intersection.points[0].y };\r\n        }\r\n        intersection = intersectLineLine(TR, BR, pointA, pointB);\r\n        if (intersection.points.length) {\r\n            return { x: intersection.points[0].x, y: intersection.points[0].y };\r\n        }\r\n        intersection = intersectLineLine(BR, BL, pointA, pointB);\r\n        if (intersection.points.length) {\r\n            return { x: intersection.points[0].x, y: intersection.points[0].y };\r\n        }\r\n        intersection = intersectLineLine(BL, TL, pointA, pointB);\r\n        if (intersection.points.length) {\r\n            return { x: intersection.points[0].x, y: intersection.points[0].y };\r\n        }\r\n        return null;\r\n    }\r\n\r\n    intersectRectRect(rect1: Rect, rect2: Rect): Rect {\r\n        const x = Math.max(rect1.x, rect2.x);\r\n        const y = Math.max(rect1.y, rect2.y);\r\n        const xLimit = (rect1.x < rect2.x) ? Math.min(rect1.x + rect1.width, rect2.x + rect2.width) : Math.min(rect2.x + rect2.width, rect1.x + rect1.width);\r\n        const yLimit = (rect1.y < rect2.y) ? Math.min(rect1.y + rect1.height, rect2.y + rect2.height) : Math.min(rect2.y + rect2.height, rect1.y + rect1.height);\r\n        return {\r\n            x,\r\n            y,\r\n            width: xLimit - x,\r\n            height: yLimit - y\r\n        };\r\n    }\r\n\r\n    intersectCircle(radius: number, pointA: Point, pointB: Point): Point | null {\r\n        const center = this.getOffsetPos();\r\n        const intersection = intersectCircleLine(center, radius, pointA, pointB);\r\n        if (intersection.points.length) {\r\n            return { x: intersection.points[0].x, y: intersection.points[0].y };\r\n        }\r\n        return null;\r\n    }\r\n\r\n    distance(pointA: Point, pointB: Point): number {\r\n        return Math.sqrt((pointA.x - pointB.x) * (pointA.x - pointB.x) + (pointA.y - pointB.y) * (pointA.y - pointB.y));\r\n    }\r\n\r\n    //  Download  ---\r\n    serializeSVG(extraStyles: string = fontAwsesomeStyle): string {\r\n        const origSvg = this.locateSVGNode(this._element.node());\r\n        const cloneSVG = origSvg.cloneNode(true) as SVGSVGElement;\r\n        const origNodes = d3Select(origSvg).selectAll(\"*\").nodes();\r\n        d3Select(cloneSVG).selectAll(\"*\").each(function (this: SVGElement, d, i) {\r\n            const compStyles = window.getComputedStyle(origNodes[i] as SVGElement);\r\n            for (let i = 0; i < compStyles.length; ++i) {\r\n                const styleName = compStyles.item(i);\r\n                const styleValue = compStyles.getPropertyValue(styleName);\r\n                const stylePriority = compStyles.getPropertyPriority(styleName);\r\n                this.style.setProperty(styleName, styleValue, stylePriority);\r\n            }\r\n        });\r\n\r\n        if (extraStyles) {\r\n            const defs = cloneSVG.getElementsByTagName(\"defs\");\r\n            if (defs.length) {\r\n                const extraStyle = document.createElement(\"style\");\r\n                extraStyle.setAttribute(\"type\", \"text/css\");\r\n                extraStyle.innerText = extraStyles;\r\n                defs[0].appendChild(extraStyle);\r\n            }\r\n        }\r\n\r\n        const serializer = new XMLSerializer();\r\n        return serializer.serializeToString(cloneSVG);\r\n    }\r\n\r\n    toBlob(extraStyles: string = fontAwsesomeStyle): Blob {\r\n        return new Blob([this.serializeSVG(extraStyles)], { type: \"image/svg+xml\" });\r\n    }\r\n\r\n    rasterize(extraStyles: string = fontAwsesomeStyle, ...extraWidgets: SVGWidget[]): Promise<Blob> {\r\n        const widgets = [this, ...extraWidgets];\r\n        const sizes = widgets.map(widget => widget.locateSVGNode(widget.element().node()).getBoundingClientRect());\r\n        const width = sizes.reduce((prev, curr) => prev + curr.width, 0);\r\n        const height = Math.max(...sizes.map(s => s.height));\r\n\r\n        const canvas = document.createElement(\"canvas\");\r\n        canvas.width = width;\r\n        canvas.height = height;\r\n        canvas.style.width = width + \"px\";\r\n        const ctx = canvas.getContext(\"2d\");\r\n        ctx.fillStyle = \"white\";\r\n        ctx.fillRect(0, 0, width, height);\r\n        ctx.fillStyle = \"transparent\";\r\n        return new Promise((resolve, reject) => {\r\n            let xPos = 0;\r\n            Promise.all(widgets.map((widget, i) => {\r\n                const x = xPos;\r\n                const y = (height - sizes[i].height) / 2;\r\n                xPos += sizes[i].width;\r\n                return new Promise<void>((resolve, reject) => {\r\n                    const image = new Image();\r\n                    image.onerror = reject;\r\n                    image.onload = () => {\r\n                        ctx.drawImage(image, 0, 0, sizes[i].width, sizes[i].height, x, y, sizes[i].width, sizes[i].height);\r\n                        resolve();\r\n                    };\r\n                    image.src = URL.createObjectURL(widget.toBlob(extraStyles));\r\n                });\r\n            })).then(() => {\r\n                ctx.canvas.toBlob(resolve);  // Not supported by Edge browser\r\n            });\r\n        });\r\n    }\r\n\r\n    downloadSVG(extraStyles: string = fontAwsesomeStyle) {\r\n        downloadString(\"SVG\", this.serializeSVG(extraStyles));\r\n    }\r\n\r\n    downloadPNG(filename: string = `image_${timestamp()}`, extraStyles: string = fontAwsesomeStyle, ...extraWidgets: SVGWidget[]) {\r\n        this.rasterize(extraStyles, ...extraWidgets).then(blob => downloadBlob(blob, `${filename}.png`));\r\n    }\r\n\r\n    //  IE Fixers  ---\r\n    _pushMarkers(element?) {\r\n        if (svgMarkerGlitch) {\r\n            element = element || this._element;\r\n            element.selectAll(\"path[marker-start],path[marker-end]\")\r\n                .attr(\"fixme-start\", function () { return this.getAttribute(\"marker-start\"); })\r\n                .attr(\"fixme-end\", function () { return this.getAttribute(\"marker-end\"); })\r\n                .attr(\"marker-start\", null)\r\n                .attr(\"marker-end\", null)\r\n                ;\r\n        }\r\n    }\r\n\r\n    _popMarkers(element?) {\r\n        if (svgMarkerGlitch) {\r\n            element = element || this._element;\r\n            element.selectAll(\"path[fixme-start],path[fixme-end]\")\r\n                .attr(\"marker-start\", function () {\r\n                    return this.getAttribute(\"fixme-start\");\r\n                })\r\n                .attr(\"marker-end\", function () { return this.getAttribute(\"fixme-end\"); })\r\n                .attr(\"fixme-start\", null)\r\n                .attr(\"fixme-end\", null)\r\n                ;\r\n        }\r\n    }\r\n\r\n    _popMarkersDebounced = debounce(function (element) {\r\n        if (svgMarkerGlitch) {\r\n            this._popMarkers(element);\r\n        }\r\n    }, 250);\r\n\r\n    _fixIEMarkers(element?) {\r\n        if (svgMarkerGlitch) {\r\n            this._pushMarkers(element);\r\n            this._popMarkersDebounced(element);\r\n        }\r\n    }\r\n}\r\nSVGWidget.prototype._class += \" common_SVGWidget\";\r\n\r\nexport interface SVGWidget {\r\n    selectionGlow(): boolean;\r\n    selectionGlow(_: boolean): this;\r\n    selectionGlowColor(): string;\r\n    selectionGlowColor(_: string): this;\r\n}\r\n\r\nSVGWidget.prototype.publish(\"selectionGlow\", true, \"boolean\", \"Selection Glow\");\r\nSVGWidget.prototype.publish(\"selectionGlowColor\", \"red\", \"html-color\", \"Selection Glow Color\");\r\n","import { SVGWidget } from \"./SVGWidget.ts\";\r\n\r\nimport \"../src/Text.css\";\r\n\r\nexport class Text extends SVGWidget {\r\n\r\n    private _textElement;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    getBBox(refresh = false, round = false) {\r\n        const textParts = this.text().split(\"\\n\");\r\n        const lineHeight = this.fontSize() || 12;\r\n        const height = lineHeight * textParts.length;\r\n        const widths: number[] = textParts.map(line => {\r\n            return this.textSize(line, this.fontFamily() || \"Verdana\", lineHeight).width;\r\n        });\r\n        const width = Math.max(...widths);\r\n        const retVal = {\r\n            x: - width / 2,\r\n            y: - height / 2 - lineHeight / (this.fontFamily() === \"FontAwesome\" ? 4 : 6), // baseLine offset\r\n            width,\r\n            height\r\n        };\r\n        switch (this.anchor()) {\r\n            case \"start\":\r\n                retVal.x = 0;\r\n                break;\r\n            case \"end\":\r\n                retVal.x = -width;\r\n                break;\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        delete this._prevHash;\r\n        this._textElement = element.append(\"text\")\r\n            .on(\"click\", () => {\r\n                this.click();\r\n            })\r\n            .on(\"dblclick\", () => {\r\n                this.dblclick();\r\n            })\r\n            ;\r\n    }\r\n\r\n    _prevHash;\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const hash = this.hashSum([], { width: this.width() });\r\n        if (this._prevHash !== hash) {\r\n            this._prevHash = hash;\r\n\r\n            const bbox = this.getBBox();\r\n\r\n            this._textElement\r\n                .style(\"font-size\", this.fontSize())\r\n                .style(\"text-anchor\", this.anchor())\r\n                .attr(\"transform\", d => `rotate(${this.rotation()}) translate(0,${bbox.y})`)\r\n                ;\r\n\r\n            const width = this.width();\r\n            const context = this;\r\n            const textParts = this.text().split(\"\\n\");\r\n            const textLine = this._textElement.selectAll(\"tspan\").data(textParts);\r\n            textLine.enter().append(\"tspan\")\r\n                .attr(\"class\", function (_d, i) { return \"tspan_\" + i; })\r\n                .attr(\"dy\", \"1em\")\r\n                .attr(\"x\", \"0\")\r\n                .merge(textLine)\r\n                .style(\"font-family\", this.fontFamily())\r\n                .style(\"fill\", this.colorFill())\r\n                .style(\"stroke\", this.colorStroke())\r\n                .text((d: string) => {\r\n                    if (!width) return d;\r\n                    let retVal = d;\r\n                    const lineHeight = context.fontSize() || 12;\r\n                    let clipPos = retVal.length - 1;\r\n                    while (clipPos > -3 && this.textSize(retVal, this.fontFamily() || \"Verdana\", lineHeight).width > width) {\r\n                        retVal = retVal.substr(0, --clipPos) + \"...\".substr(0, clipPos + 3);\r\n                    }\r\n                    return retVal;\r\n                })\r\n                ;\r\n            textLine.exit()\r\n                .remove()\r\n                ;\r\n\r\n        }\r\n    }\r\n\r\n    click() {\r\n    }\r\n\r\n    dblclick() {\r\n    }\r\n}\r\nText.prototype._class += \" common_Text\";\r\n\r\nexport interface Text {\r\n    text(): string;\r\n    text(_: string): this;\r\n    fontFamily(): string;\r\n    fontFamily(_: string): this;\r\n    fontSize(): number;\r\n    fontSize(_: number): this;\r\n    anchor(): \"start\" | \"middle\" | \"end\";\r\n    anchor(_: \"start\" | \"middle\" | \"end\"): this;\r\n    colorFill(): string;\r\n    colorFill(_: string): this;\r\n    colorFill_default(): string;\r\n    colorFill_default(_: string): this;\r\n    colorStroke(): string;\r\n    colorStroke(_: string): this;\r\n    colorStroke_default(): string;\r\n    colorStroke_default(_: string): this;\r\n    rotation(): number;\r\n    rotation(_: number): Text;\r\n}\r\n\r\nText.prototype.publish(\"text\", \"\", \"string\", \"Display Text\", null, { tags: [\"Basic\"] });\r\nText.prototype.publish(\"fontFamily\", null, \"string\", \"Font Family\", null, { tags: [\"Intermediate\"], optional: true });\r\nText.prototype.publish(\"fontSize\", null, \"number\", \"Font Size (pixels)\", null, { tags: [\"Intermediate\"] });\r\nText.prototype.publish(\"anchor\", \"middle\", \"set\", \"Anchor Position\", [\"start\", \"middle\", \"end\"], { tags: [\"Intermediate\"] });\r\nText.prototype.publish(\"colorFill\", null, \"html-color\", \"Fill Color\", null, { tags: [\"Basic\"] });\r\nText.prototype.publish(\"colorStroke\", null, \"html-color\", \"Fill Color\", null, { tags: [\"Basic\"] });\r\nText.prototype.publish(\"rotation\", 0, \"number\", \"Degrees of rotation\", null, { tags: [\"Basic\"] });\r\n","import { SVGWidget } from \"./SVGWidget.ts\";\r\nimport { Text } from \"./Text.ts\";\r\nimport * as Utility from \"./Utility.ts\";\r\n\r\nimport \"../src/FAChar.css\";\r\n\r\nexport class FAChar extends SVGWidget {\r\n\r\n    protected _text;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._text = new Text()\r\n            .fontFamily(\"FontAwesome\")\r\n            ;\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        this._text\r\n            .target(domNode)\r\n            ;\r\n        element\r\n            .on(\"click\", () => {\r\n                this.click();\r\n            })\r\n            .on(\"dblclick\", () => {\r\n                this.dblclick();\r\n            })\r\n            ;\r\n    }\r\n\r\n    calcChar(): string {\r\n        return Utility.faChar(this.char());\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        this._text\r\n            .text(this.calcChar())\r\n            .fontFamily(this.text_fontFamily())\r\n            .scale((this.fontSize() || 14) / 14) //  Scale rather than fontSize to prevent Chrome glitch  ---\r\n            .render()\r\n            ;\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        this._text\r\n            .target(null)\r\n            ;\r\n\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    click() {\r\n        // console.log(\"Click:\", this);\r\n    }\r\n\r\n    dblclick() {\r\n        // console.log(\"Double click:\", this);\r\n    }\r\n\r\n}\r\nFAChar.prototype._class += \" common_FAChar\";\r\n\r\nexport interface FAChar {\r\n    char(): string;\r\n    char(_: string): this;\r\n    fontSize(): number;\r\n    fontSize(_: number): this;\r\n    text_colorFill(): string;\r\n    text_colorFill(_: string): this;\r\n    text_fontFamily(): string;\r\n    text_fontFamily(_: string): this;\r\n}\r\n\r\nFAChar.prototype.publish(\"char\", \"\", \"set\", \"Font Awesome Item\", Utility.faKeys(), { tags: [\"Private\"] });\r\nFAChar.prototype.publish(\"fontSize\", null, \"number\", \"Font Size\", null, { tags: [\"Private\"] });\r\nFAChar.prototype.publishProxy(\"text_colorFill\", \"_text\", \"colorFill\");\r\nFAChar.prototype.publishProxy(\"text_fontFamily\", \"_text\", \"fontFamily\", \"FontAwesome\");\r\n\r\n//  openssl base64 -A -in fontawesome-webfont.ttf -out tmp.txt\r\nconst fontAwesomeOpenType = \"AAEAAAANAIAAAwBQRkZUTWu+R7kAAoaQAAAAHEdERUYC8AAEAAKGcAAAACBPUy8yiDJ6QAAAAVgAAABgY21hcAq/On8AAAyoAAAC8mdhc3D//wADAAKGaAAAAAhnbHlmj/euTQAAGqwAAky8aGVhZBCJ5S0AAADcAAAANmhoZWEPAwq1AAABFAAAACRobXR4RXkYhQAAAbgAAArwbG9jYQL1olwAAA+cAAALEG1heHADLAIcAAABOAAAACBuYW1l45eLrAACZ2gAAASGcG9zdK+Pm6EAAmvwAAAadQABAAAABAHLkM94WV8PPPUACwcAAAAAANQzzTIAAAAA1DPNMv///wAJAQYAAAAACAACAAEAAAAAAAEAAAYA/wAAAAkA/////wkBAAEAAAAAAAAAAAAAAAAAAAK1AAEAAALDAhkAJwAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAwZpAZAABQAABIwEMwAAAIYEjAQzAAACcwAAAYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHlycwBAACD1AAYA/wAAAAYAAQAAAAABAAAAAAAAAAAAAAAgAAEDgABwAAAAAAJVAAABwAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAXQYAAAAGgAAABwAAAAcAAAAGgAAABoAAAAUAAAAHgAAABoAAAAcAAAAHAAAABwAAeQWAAG4GgAAABoAAAAYAAAAHAAAABgAAAAWAAAAGgAAaBgAAAAYAAAAHgAAyBoAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAEgAAABwAAQAaAAAADAAAABIAAAAaAAAAFgAAABwAAAAYAAAAHgAAABoAACgUAAAAGgAAAB4AAAAaAAAAFgAAABAAAAAcAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHgAAABgAAAAQAAAAGAAAABAAAAAcAAAAGgAAABoAAAAcAAAAEAAAABwAAAAaAAHoFgAAABgAAAAYAAAAGgAAABwAAAAQAAAAGAgABBQAAmgUAAFoGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAQAYAAAAGgAA1BoAANQcAAAAGAAAABgAADQWAAAAFgAAABoAAegYAAAAGAAAABwAAAAWAAAAHAAAABwAAAAcAABAFgAAABoAAAAcAAAAHAAAABgAAAAcAAFoHAABaB4AAAAaAAAAGgAAAB4AAAAMAAEAHAAAACAAAAAYAAAAGAAAABwAAAAcAAAAHgAAABwAAAAYAAAAGAAAAA4AAAAcAAAAGgAAABgAAAASAAAAHAAAABgAAAAaAAAAGAAAABoAAAAYAAAAFgAAABYAAAAUAAAAGAAAABoAALAQAAF8GAAAABoAAAAeAAAAFgAAABgAAAAcAAAAHAABABgAAAgcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAaAABUHAAAABYAABQcAAAAGAAAAB4AAAAaAABAHgAAABoAAcwcAAAEHAAAABYAABAYAAAAGAAAABgAAAAcAAAAHAAAPBwAAAAYAAAAGgAAABoAAGwcAAEAGAAAABgAAAAYAAAAJAAAAB4AAAAQAAAAEAAAAAoAAQAKAAAAGgAAABAAAAAQAAAAEAAAABwAAAAYAAAAGAAAABwAAKAcAAAAHAAAABwAAAAOAAAEHAAAABoAAAAcAAAAEAAAABwAAAAeAAAAHgAAABYAAAAWAAAAHAAAABwAAQAeAAAAFgAAABgAAAAWAAAAFgAAAB4AAQAcAAAAHgAAABoAAQAYAAAAGAAAABAAALQQAAA0EgABNBIAATQKAAC0CgAANBIAATQSAAE0HgAAAB4AAAASAAAADAAAABgAAAAaAAAAGgAAABwAAQAYAAAAHAAAABoAAAAaAAAAHgAAABwAAAAcAAAAGAAAABgAAAAYAAAAHgAAAB4AAAAcAAEAHAABABoAADQeAAC0HAAAABoAAAgWAAAIGgAAABAAAAAaAAAAEAABgAoAAAAKAAGIGAAAFBgAABQeAAAEGgAAABIAAAAWAAA0FAAAABoAAAAWAAAMGgAAkBwAAAAYAAAAGAAAABgAAAAYAAAAFgAAABwAADAcAAAAEgAAABgAAAAWAAAABgAAABgAAAAYAAAAHAAA2BgAAAAWAAAAEAAADBAAAAwYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABAAAAAQAAAAEAAA0A4IAAAQDAAQFAAAABwAAAAUAADgGAAAABgAAAAaAACIGgAAiBwAAIgcAACIGAAAiBgAAIgaAAAAGgAAABgAAAAYAABsFgAAFBgAAAAcAAAAHAABABgAACwYAAAAGAAAABgAAAAWAAAAGAAAABAAARAYAAAADAAADAwAAAwcAAEAHAAAABYAAAAaAAAAFgAAABgAACwYAAAAGAAAABQAALAYAAAAFAAAABAAAAAYAAAAHAAAsBgAAAAcAAEAGgAAgB4D//wcAAAAGAAAABYAAAAUAABUGAAAABgAAAAYAAAAGAAAABoAAAAYAAAAEgAAABYAAAAiAAAAGgAAABgAAAAcAAAAHAAAACAAAAAkAAAAGAABtBgAAAAcAAAAGAAAABgAAAAeAAAAGAAAACAAAAAYAAAAH9gApBgAAAAYAAAAGAAAABwAAAAYAAAAFAABABoAAAAMAAEAHAAAACQAAAAgAAAAGAAAABwAAAAYAAAAHAAAQCAAAAAgAAAAGAAAgBgAAAAQAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAACcHAAAACAAAAAcAAAAHAAAgBwAAEwcAAAAGAAAABwAARAYAAAAFAAA5BwAAEggAAAAHAAAABwAAAAYAAAAGAAAABwAAPgUAABgGAAAABgAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAABkHAABkBgAAWQgAAAAIAAAqBwAAAAYAAAkHAAAnCQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACAAADggAAA4FgAAABgAAAAYAAAAHAAAABwAAAAcAAAAIAAAABwAAAAgAAAAHAAAABgAAAAgAAAAIAAAACQAAAAYAAAAIAAAABQAACwgAAAAGAAAABgAAAAYAAAAIAAAABgAAAAYAAAAIAAAACAAAAAYAAAAIAAAACAAAAAaAAAAGgAAACAAAAAgAABMGAAAACQAAAAYAAAAHAAAABQAAAgYAAAAFAAAABgAAAgcAAAAHAAACB4AAAQgAAAYGAAAABQAAAggAAAQFAAAABQAAAAcAAAAHAAAABgAAAAUAAAAGAAAABwAAAAgAAAAIAAAACAAAAAYAAAAGAAAABgAAAAcAAAAGAAAACPgAVAkAAAAHAAAACQAAAAkAAAAJAAAACQAAAAkAAAAFAAAABAAAAAgAAAAJAAAABgAAAAYAAAAJAAAACQAAAAcAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAAcAAAAIAAAA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AAD8uAAA/QwAAP1gAAD9tAAA/ggAAP64AAD/CAABABQAAQW0AAEG9AABB/gAAQjQAAEJZAABChAAAQqYAAELGAABDAQAAQykAAENLAABDgAAAQ+IAAERLAABEaAAARLMAAETOAABE+QAARSQAAEVKAABFaQAARZYAAEW/AABF8AAARiEAAEZeAABGnwAARtUAAEc1AABHUAAAR3UAAEekAABHwQAAR98AAEgpAABIcAAASJ4AAEjCAABI2wAASQEAAEkzAABJ2gAASjoAAEqTAABLFQAAS5MAAExdAABMfQAATLgAAEzMAABM7AAATSoAAE1dAABNlQAATckAAE4DAABOUgAAToQAAE68AABO5AAATyEAAE82AABP1gAAUAcAAFBwAABQsgAAUPIAAFEnAABRUgAAUZIAAFHcAABSEgAAUl4AAFKIAABSuQAAUvUAAFMoAABTRgAAU5AAAFQQAABUaAAAVLgAAFTRAABVCAAAVVMAAFWYAABVtQAAVdYAAFYNAABWKAAAVoEAAFaiAABW2QAAVvgAAFcfAABXdgAAV6gAAFglAABYUgAAWG8AAFi8AABY1gAAWSsAAFldAABZmgAAWfcAAFotAABaVwAAWp4AAFuhAABcEAAAXPgAAF2EAABd8gAAXiQAAF5iAABeowAAXtoAAF8jAABfRwAAX2kAAF/XAABf5gAAX/4AAGAbAABgXQAAYKQAAGDNAABg6QAAYTIAAGFsAABhqQAAYh0AAGJjAABijgAAYs4AAGLoAABjkwAAY6oAAGPVAABkBAAAZEUAAGTkAABlBQAAZUEAAGV/AABlvgAAZegAAGZfAABmsgAAZwQAAGdCAABndgAAZ58AAGfGAABn+gAAaDEAAGiDAABozQAAaR4AAGlsAABpoAAAadMAAGoHAABqJAAAajsAAGo7AABqOwAAalYAAGqKAABqyAAAavMAAGsrAABragAAa4gAAGuiAABrwQAAa+oAAGwQAABsIgAAba8AAG3bAABuOAAAbl0AAG6BAABupQAAbskAAG7pAABvAgAAbx4AAG9TAABvkwAAb6kAAG/IAABwEgAAcEYAAHBxAABwwQAAcPkAAHEoAABxVQAAcYoAAHG7AAByAwAAckMAAHKiAABy6AAAcz4AAHOHAABz5QAAdBsAAHRZAAB0twAAdNQAAHT+AAB1YQAAdZ4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AgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwDSAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQCUBWdsYXNzBW11c2ljBnNlYXJjaAhlbnZlbG9wZQVoZWFydARzdGFyCnN0YXJfZW1wdHkEdXNlcgRmaWxtCHRoX2xhcmdlAnRoB3RoX2xpc3QCb2sGcmVtb3ZlB3pvb21faW4Iem9vbV9vdXQDb2ZmBnNpZ25hbANjb2cFdHJhc2gEaG9tZQhmaWxlX2FsdAR0aW1lBHJvYWQMZG93bmxvYWRfYWx0CGRvd25sb2FkBnVwbG9hZAVpbmJveAtwbGF5X2NpcmNsZQZyZXBlYXQHcmVmcmVzaAhsaXN0X2FsdARsb2NrBGZsYWcKaGVhZHBob25lcwp2b2x1bWVfb2ZmC3ZvbHVtZV9kb3duCXZvbHVtZV91cAZxcmNvZGUHYmFyY29kZQN0YWcEdGFncwRib29rCGJvb2ttYXJrBXByaW50BmNhbWVyYQRmb250BGJvbGQGaXRhbGljC3RleHRfaGVpZ2h0CnRleHRfd2lkdGgKYWxpZ25fbGVmdAxhbGlnbl9jZW50ZXILYWxpZ25fcmlnaHQNYWxpZ25fanVzdGlmeQRsaXN0C2luZGVudF9sZWZ0DGluZGVudF9yaWdodA5mYWNldGltZV92aWRlbwdwaWN0dXJlBnBlbmNpbAptYXBfbWFya2VyBmFkanVzdAR0aW50BGVkaXQFc2hhcmUFY2hlY2sEbW92ZQ1zdGVwX2JhY2t3YXJkDWZhc3RfYmFja3dhcmQIYmFja3dhcmQEcGxheQVwYXVzZQRzdG9wB2ZvcndhcmQMZmFzdF9mb3J3YXJkDHN0ZXBfZm9yd2FyZAVlamVjdAxjaGV2cm9uX2xlZnQNY2hldnJvbl9yaWdodAlwbHVzX3NpZ24KbWludXNfc2lnbgtyZW1vdmVfc2lnbgdva19zaWduDXF1ZXN0aW9uX3NpZ24JaW5mb19zaWduCnNjcmVlbnNob3QNcmVtb3ZlX2NpcmNsZQlva19jaXJjbGUKYmFuX2NpcmNsZQphcnJvd19sZWZ0C2Fycm93X3JpZ2h0CGFycm93X3VwCmFycm93X2Rvd24Jc2hhcmVfYWx0C3Jlc2l6ZV9mdWxsDHJlc2l6ZV9zbWFsbBBleGNsYW1hdGlvbl9zaWduBGdpZnQEbGVhZgRmaXJlCGV5ZV9vcGVuCWV5ZV9jbG9zZQx3YXJuaW5nX3NpZ24FcGxhbmUIY2FsZW5kYXIGcmFuZG9tB2NvbW1lbnQGbWFnbmV0CmNoZXZyb25fdXAMY2hldnJvbl9kb3duB3JldHdlZXQNc2hvcHBpbmdfY2FydAxmb2xkZXJfY2xvc2ULZm9sZGVyX29wZW4PcmVzaXplX3ZlcnRpY2FsEXJlc2l6ZV9ob3Jpem9udGFsCWJhcl9jaGFydAx0d2l0dGVyX3NpZ24NZmFjZWJvb2tfc2lnbgxjYW1lcmFfcmV0cm8Da2V5BGNvZ3MIY29tbWVudHMNdGh1bWJzX3VwX2FsdA90aHVtYnNfZG93bl9hbHQJc3Rhcl9oYWxmC2hlYXJ0X2VtcHR5B3NpZ25vdXQNbGlua2VkaW5fc2lnbgdwdXNocGluDWV4dGVybmFsX2xpbmsGc2lnbmluBnRyb3BoeQtnaXRodWJfc2lnbgp1cGxvYWRfYWx0BWxlbW9uBXBob25lC2NoZWNrX2VtcHR5DmJvb2ttYXJrX2VtcHR5CnBob25lX3NpZ24HdHdpdHRlcghmYWNlYm9vawZnaXRodWIGdW5sb2NrC2NyZWRpdF9jYXJkA3JzcwNoZGQIYnVsbGhvcm4EYmVsbAtjZXJ0aWZpY2F0ZQpoYW5kX3JpZ2h0CWhhbmRfbGVmdAdoYW5kX3VwCWhhbmRfZG93bhFjaXJjbGVfYXJyb3dfbGVmdBJjaXJjbGVfYXJyb3dfcmlnaHQPY2lyY2xlX2Fycm93X3VwEWNpcmNsZV9hcnJvd19kb3duBWdsb2JlBndyZW5jaAV0YXNrcwZmaWx0ZXIJYnJpZWZjYXNlCmZ1bGxzY3JlZW4FZ3JvdXAEbGluawVjbG91ZAZiZWFrZXIDY3V0BGNvcHkKcGFwZXJfY2xpcARzYXZlCnNpZ25fYmxhbmsHcmVvcmRlcgJ1bAJvbA1zdHJpa2V0aHJvdWdoCXVuZGVybGluZQV0YWJsZQVtYWdpYwV0cnVjawlwaW50ZXJlc3QOcGludGVyZXN0X3NpZ24QZ29vZ2xlX3BsdXNfc2lnbgtnb29nbGVfcGx1cwVtb25leQpjYXJldF9kb3duCGNhcmV0X3VwCmNhcmV0X2xlZnQLY2FyZXRfcmlnaHQHY29sdW1ucwRzb3J0CXNvcnRfZG93bgdzb3J0X3VwDGVudmVsb3BlX2FsdAhsaW5rZWRpbgR1bmRvBWxlZ2FsCWRhc2hib2FyZAtjb21tZW50X2FsdAxjb21tZW50c19hbHQEYm9sdAdzaXRlbWFwCHVtYnJlbGxhBXBhc3RlCmxpZ2h0X2J1bGIIZXhjaGFuZ2UOY2xvdWRfZG93bmxvYWQMY2xvdWRfdXBsb2FkB3VzZXJfbWQLc3RldGhvc2NvcGUIc3VpdGNhc2UIYmVsbF9hbHQGY29mZmVlBGZvb2QNZmlsZV90ZXh0X2FsdAhidWlsZGluZwhob3NwaXRhbAlhbWJ1bGFuY2UGbWVka2l0C2ZpZ2h0ZXJfamV0BGJlZXIGaF9zaWduBGYwZmURZG91YmxlX2FuZ2xlX2xlZnQSZG91YmxlX2FuZ2xlX3JpZ2h0D2RvdWJsZV9hbmdsZV91cBFkb3VibGVfYW5nbGVfZG93bgphbmdsZV9sZWZ0C2FuZ2xlX3JpZ2h0CGFuZ2xlX3VwCmFuZ2xlX2Rvd24HZGVza3RvcAZsYXB0b3AGdGFibGV0DG1vYmlsZV9waG9uZQxjaXJjbGVfYmxhbmsKcXVvdGVfbGVmdAtxdW90ZV9yaWdodAdzcGlubmVyBmNpcmNsZQVyZXBseQpnaXRodWJfYWx0EGZvbGRlcl9jbG9zZV9hbHQPZm9sZGVyX29wZW5fYWx0CmV4cGFuZF9hbHQMY29sbGFwc2VfYWx0BXNtaWxlBWZyb3duA21laAdnYW1lcGFkCGtleWJvYXJkCGZsYWdfYWx0DmZsYWdfY2hlY2tlcmVkCHRlcm1pbmFsBGNvZGUJcmVwbHlfYWxsD3N0YXJfaGFsZl9lbXB0eQ5sb2NhdGlvbl9hcnJvdwRjcm9wCWNvZGVfZm9yawZ1bmxpbmsEXzI3OQtleGNsYW1hdGlvbgtzdXBlcnNjcmlwdAlzdWJzY3JpcHQEXzI4MwxwdXp6bGVfcGllY2UKbWljcm9waG9uZQ5taWNyb3Bob25lX29mZgZzaGllbGQOY2FsZW5kYXJfZW1wdHkRZmlyZV9leHRpbmd1aXNoZXIGcm9ja2V0Bm1heGNkbhFjaGV2cm9uX3NpZ25fbGVmdBJjaGV2cm9uX3NpZ25fcmlnaHQPY2hldnJvbl9zaWduX3VwEWNoZXZyb25fc2lnbl9kb3duBWh0bWw1BGNzczMGYW5jaG9yCnVubG9ja19hbHQIYnVsbHNleWUTZWxsaXBzaXNfaG9yaXpvbnRhbBFlbGxpcHNpc192ZXJ0aWNhbARfMzAzCXBsYXlfc2lnbgZ0aWNrZXQObWludXNfc2lnbl9hbHQLY2hlY2tfbWludXMIbGV2ZWxfdXAKbGV2ZWxfZG93bgpjaGVja19zaWduCWVkaXRfc2lnbgRfMzEyCnNoYXJlX3NpZ24HY29tcGFzcwhjb2xsYXBzZQxjb2xsYXBzZV90b3AEXzMxNwNldXIDZ2JwA3VzZANpbnIDanB5A3J1YgNrcncDYnRjBGZpbGUJZmlsZV90ZXh0EHNvcnRfYnlfYWxwaGFiZXQEXzMyORJzb3J0X2J5X2F0dHJpYnV0ZXMWc29ydF9ieV9hdHRyaWJ1dGVzX2FsdA1zb3J0X2J5X29yZGVyEXNvcnRfYnlfb3JkZXJfYWx0BF8zMzQEXzMzNQx5b3V0dWJlX3NpZ24HeW91dHViZQR4aW5nCXhpbmdfc2lnbgx5b3V0dWJlX3BsYXkHZHJvcGJveA1zdGFja2V4Y2hhbmdlCWluc3RhZ3JhbQZmbGlja3IDYWRuBGYxNzEOYml0YnVja2V0X3NpZ24GdHVtYmxyC3R1bWJscl9zaWduD2xvbmdfYXJyb3dfZG93bg1sb25nX2Fycm93X3VwD2xvbmdfYXJyb3dfbGVmdBBsb25nX2Fycm93X3JpZ2h0B3dpbmRvd3MHYW5kcm9pZAVsaW51eAdkcmliYmxlBXNreXBlCmZvdXJzcXVhcmUGdHJlbGxvBmZlbWFsZQRtYWxlBmdpdHRpcANzdW4EXzM2NgdhcmNoaXZlA2J1ZwJ2awV3ZWlibwZyZW5yZW4EXzM3Mg5zdGFja19leGNoYW5nZQRfMzc0FWFycm93X2NpcmNsZV9hbHRfbGVmdARfMzc2DmRvdF9jaXJjbGVfYWx0BF8zNzgMdmltZW9fc3F1YXJlBF8zODANcGx1c19zcXVhcmVfbwRfMzgyBF8zODMEXzM4NARfMzg1BF8zODYEXzM4NwRfMzg4BF8zODkHdW5pRjFBMARmMWExBF8zOTIEXzM5MwRmMWE0BF8zOTUEXzM5NgRfMzk3BF8zOTgEXzM5OQRfNDAwBGYxYWIEXzQwMgRfNDAzBF80MDQHdW5pRjFCMQRfNDA2BF80MDcEXzQwOARfNDA5BF80MTAEXzQxMQRfNDEyBF80MTMEXzQxNARfNDE1BF80MTYEXzQxNwRfNDE4BF80MTkHdW5pRjFDMAd1bmlGMUMxBF80MjIEXzQyMwRfNDI0BF80MjUEXzQyNgRfNDI3BF80MjgEXzQyOQRfNDMwBF80MzEEXzQzMgRfNDMzBF80MzQHdW5pRjFEMAd1bmlGMUQxB3VuaUYxRDIEXzQzOARfNDM5B3VuaUYxRDUHdW5pRjFENgd1bmlGMUQ3BF80NDMEXzQ0NARfNDQ1BF80NDYEXzQ0NwRfNDQ4BF80NDkHdW5pRjFFMARfNDUxBF80NTIEXzQ1MwRfNDU0BF80NTUEXzQ1NgRfNDU3BF80NTgEXzQ1OQRfNDYwBF80NjEEXzQ2MgRfNDYzBF80NjQHdW5pRjFGMARfNDY2BF80NjcEZjFmMwRfNDY5BF80NzAEXzQ3MQRfNDcyBF80NzMEXzQ3NARfNDc1BF80NzYEZjFmYwRfNDc4BF80NzkEXzQ4MARfNDgxBF80ODIEXzQ4MwRfNDg0BF80ODUEXzQ4NgRfNDg3BF80ODgEXzQ4OQRfNDkwBF80OTEEXzQ5MgRfNDkzBF80OTQEZjIxMARfNDk2BGYyMTIEXzQ5OARfNDk5BF81MDAEXzUwMQRfNTAyBF81MDMEXzUwNARfNTA1BF81MDYEXzUwNwRfNTA4BF81MDkFdmVudXMEXzUxMQRfNTEyBF81MTMEXzUxNARfNTE1BF81MTYEXzUxNwRfNTE4BF81MTkEXzUyMARfNTIxBF81MjIEXzUyMwRfNTI0BF81MjUEXzUyNgRfNTI3BF81MjgEXzUyOQRfNTMwBF81MzEEXzUzMgRfNTMzBF81MzQEXzUzNQRfNTM2BF81MzcEXzUzOARfNTM5BF81NDAEXzU0MQRfNTQyBF81NDMEXzU0NARfNTQ1BF81NDYEXzU0NwRfNTQ4BF81NDkEXzU1MARfNTUxBF81NTIEXzU1MwRfNTU0BF81NTUEXzU1NgRfNTU3BF81NTgEXzU1OQRfNTYwBF81NjEEXzU2MgRfNTYzBF81NjQEXzU2NQRfNTY2BF81NjcEXzU2OARfNTY5BGYyNjAEZjI2MQRfNTcyBGYyNjMEXzU3NARfNTc1BF81NzYEXzU3NwRfNTc4BF81NzkEXzU4MARfNTgxBF81ODIEXzU4MwRfNTg0BF81ODUEXzU4NgRfNTg3BF81ODgEXzU4OQRfNTkwBF81OTEEXzU5MgRfNTkzBF81OTQEXzU5NQRfNTk2BF81OTcEXzU5OARmMjdlB3VuaUYyODAHdW5pRjI4MQRfNjAyBF82MDMEXzYwNAd1bmlGMjg1B3VuaUYyODYEXzYwNwRfNjA4BF82MDkEXzYxMARfNjExBF82MTIEXzYxMwRfNjE0BF82MTUEXzYxNgRfNjE3BF82MTgEXzYxOQRfNjIwBF82MjEEXzYyMgRfNjIzBF82MjQEXzYyNQRfNjI2BF82MjcEXzYyOARfNjI5B3VuaUYyQTAHdW5pRjJBMQd1bmlGMkEyB3VuaUYyQTMHdW5pRjJBNAd1bmlGMkE1B3VuaUYyQTYHdW5pRjJBNwd1bmlGMkE4B3VuaUYyQTkHdW5pRjJBQQd1bmlGMkFCB3VuaUYyQUMHdW5pRjJBRAd1bmlGMkFFB3VuaUYyQjAHdW5pRjJCMQd1bmlGMkIyB3VuaUYyQjMHdW5pRjJCNAd1bmlGMkI1B3VuaUYyQjYHdW5pRjJCNwd1bmlGMkI4B3VuaUYyQjkHdW5pRjJCQQd1bmlGMkJCB3VuaUYyQkMHdW5pRjJCRAd1bmlGMkJFB3VuaUYyQzAHdW5pRjJDMQd1bmlGMkMyB3VuaUYyQzMHdW5pRjJDNAd1bmlGMkM1B3VuaUYyQzYHdW5pRjJDNwd1bmlGMkM4B3VuaUYyQzkHdW5pRjJDQQd1bmlGMkNCB3VuaUYyQ0MHdW5pRjJDRAd1bmlGMkNFB3VuaUYyRDAHdW5pRjJEMQd1bmlGMkQyB3VuaUYyRDMHdW5pRjJENAd1bmlGMkQ1B3VuaUYyRDYHdW5pRjJENwd1bmlGMkQ4B3VuaUYyRDkHdW5pRjJEQQd1bmlGMkRCB3VuaUYyREMHdW5pRjJERAd1bmlGMkRFB3VuaUYyRTAHdW5pRjJFMQd1bmlGMkUyB3VuaUYyRTMHdW5pRjJFNAd1bmlGMkU1B3VuaUYyRTYHdW5pRjJFNwRfNjk4B3VuaUYyRTkHdW5pRjJFQQd1bmlGMkVCB3VuaUYyRUMHdW5pRjJFRAd1bmlGMkVFAAAAAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAQLCAAEABAAAAAIAAAAAAAEAAAAAzD2izwAAAADLTzwwAAAAANQxaLk=\";\r\nexport const fontAwsesomeStyle = `\\\r\n@font-face {\\\r\n    font-family: \"FontAwesome\";\\\r\n    src: url(\"data:font/opentype;base64,${fontAwesomeOpenType}\") format(\"opentype\");\\\r\n}`;\r\n","var index = {\n    schemeGroups: {\n        sequential: [\"BuGn\", \"BuPu\", \"GnBu\", \"OrRd\", \"PuBu\", \"PuBuGn\", \"PuRd\", \"RdPu\", \"YlGn\", \"YlGnBu\", \"YlOrBr\", \"YlOrRd\"],\n        singlehue: [\"Blues\", \"Greens\", \"Greys\", \"Oranges\", \"Purples\", \"Reds\"],\n        diverging: [\"BrBG\", \"PiYG\", \"PRGn\", \"PuOr\", \"RdBu\", \"RdGy\", \"RdYlBu\", \"RdYlGn\", \"Spectral\"],\n        qualitative: [\"Accent\", \"Dark2\", \"Paired\", \"Pastel1\", \"Pastel2\", \"Set1\", \"Set2\", \"Set3\"]\n    }, YlGn: {\n        3: [\"#f7fcb9\", \"#addd8e\", \"#31a354\"],\n        4: [\"#ffffcc\", \"#c2e699\", \"#78c679\", \"#238443\"],\n        5: [\"#ffffcc\", \"#c2e699\", \"#78c679\", \"#31a354\", \"#006837\"],\n        6: [\"#ffffcc\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#31a354\", \"#006837\"],\n        7: [\"#ffffcc\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#41ab5d\", \"#238443\", \"#005a32\"],\n        8: [\"#ffffe5\", \"#f7fcb9\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#41ab5d\", \"#238443\", \"#005a32\"],\n        9: [\"#ffffe5\", \"#f7fcb9\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#41ab5d\", \"#238443\", \"#006837\", \"#004529\"]\n    }, YlGnBu: {\n        3: [\"#edf8b1\", \"#7fcdbb\", \"#2c7fb8\"],\n        4: [\"#ffffcc\", \"#a1dab4\", \"#41b6c4\", \"#225ea8\"],\n        5: [\"#ffffcc\", \"#a1dab4\", \"#41b6c4\", \"#2c7fb8\", \"#253494\"],\n        6: [\"#ffffcc\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#2c7fb8\", \"#253494\"],\n        7: [\"#ffffcc\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#1d91c0\", \"#225ea8\", \"#0c2c84\"],\n        8: [\"#ffffd9\", \"#edf8b1\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#1d91c0\", \"#225ea8\", \"#0c2c84\"],\n        9: [\"#ffffd9\", \"#edf8b1\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#1d91c0\", \"#225ea8\", \"#253494\", \"#081d58\"]\n    }, GnBu: {\n        3: [\"#e0f3db\", \"#a8ddb5\", \"#43a2ca\"],\n        4: [\"#f0f9e8\", \"#bae4bc\", \"#7bccc4\", \"#2b8cbe\"],\n        5: [\"#f0f9e8\", \"#bae4bc\", \"#7bccc4\", \"#43a2ca\", \"#0868ac\"],\n        6: [\"#f0f9e8\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#43a2ca\", \"#0868ac\"],\n        7: [\"#f0f9e8\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#4eb3d3\", \"#2b8cbe\", \"#08589e\"],\n        8: [\"#f7fcf0\", \"#e0f3db\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#4eb3d3\", \"#2b8cbe\", \"#08589e\"],\n        9: [\"#f7fcf0\", \"#e0f3db\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#4eb3d3\", \"#2b8cbe\", \"#0868ac\", \"#084081\"]\n    }, BuGn: {\n        3: [\"#e5f5f9\", \"#99d8c9\", \"#2ca25f\"],\n        4: [\"#edf8fb\", \"#b2e2e2\", \"#66c2a4\", \"#238b45\"],\n        5: [\"#edf8fb\", \"#b2e2e2\", \"#66c2a4\", \"#2ca25f\", \"#006d2c\"],\n        6: [\"#edf8fb\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#2ca25f\", \"#006d2c\"],\n        7: [\"#edf8fb\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#41ae76\", \"#238b45\", \"#005824\"],\n        8: [\"#f7fcfd\", \"#e5f5f9\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#41ae76\", \"#238b45\", \"#005824\"],\n        9: [\"#f7fcfd\", \"#e5f5f9\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#41ae76\", \"#238b45\", \"#006d2c\", \"#00441b\"]\n    }, PuBuGn: {\n        3: [\"#ece2f0\", \"#a6bddb\", \"#1c9099\"],\n        4: [\"#f6eff7\", \"#bdc9e1\", \"#67a9cf\", \"#02818a\"],\n        5: [\"#f6eff7\", \"#bdc9e1\", \"#67a9cf\", \"#1c9099\", \"#016c59\"],\n        6: [\"#f6eff7\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#1c9099\", \"#016c59\"],\n        7: [\"#f6eff7\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#3690c0\", \"#02818a\", \"#016450\"],\n        8: [\"#fff7fb\", \"#ece2f0\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#3690c0\", \"#02818a\", \"#016450\"],\n        9: [\"#fff7fb\", \"#ece2f0\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#3690c0\", \"#02818a\", \"#016c59\", \"#014636\"]\n    }, PuBu: {\n        3: [\"#ece7f2\", \"#a6bddb\", \"#2b8cbe\"],\n        4: [\"#f1eef6\", \"#bdc9e1\", \"#74a9cf\", \"#0570b0\"],\n        5: [\"#f1eef6\", \"#bdc9e1\", \"#74a9cf\", \"#2b8cbe\", \"#045a8d\"],\n        6: [\"#f1eef6\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#2b8cbe\", \"#045a8d\"],\n        7: [\"#f1eef6\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#3690c0\", \"#0570b0\", \"#034e7b\"],\n        8: [\"#fff7fb\", \"#ece7f2\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#3690c0\", \"#0570b0\", \"#034e7b\"],\n        9: [\"#fff7fb\", \"#ece7f2\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#3690c0\", \"#0570b0\", \"#045a8d\", \"#023858\"]\n    }, BuPu: {\n        3: [\"#e0ecf4\", \"#9ebcda\", \"#8856a7\"],\n        4: [\"#edf8fb\", \"#b3cde3\", \"#8c96c6\", \"#88419d\"],\n        5: [\"#edf8fb\", \"#b3cde3\", \"#8c96c6\", \"#8856a7\", \"#810f7c\"],\n        6: [\"#edf8fb\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8856a7\", \"#810f7c\"],\n        7: [\"#edf8fb\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8c6bb1\", \"#88419d\", \"#6e016b\"],\n        8: [\"#f7fcfd\", \"#e0ecf4\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8c6bb1\", \"#88419d\", \"#6e016b\"],\n        9: [\"#f7fcfd\", \"#e0ecf4\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8c6bb1\", \"#88419d\", \"#810f7c\", \"#4d004b\"]\n    }, RdPu: {\n        3: [\"#fde0dd\", \"#fa9fb5\", \"#c51b8a\"],\n        4: [\"#feebe2\", \"#fbb4b9\", \"#f768a1\", \"#ae017e\"],\n        5: [\"#feebe2\", \"#fbb4b9\", \"#f768a1\", \"#c51b8a\", \"#7a0177\"],\n        6: [\"#feebe2\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#c51b8a\", \"#7a0177\"],\n        7: [\"#feebe2\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#dd3497\", \"#ae017e\", \"#7a0177\"],\n        8: [\"#fff7f3\", \"#fde0dd\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#dd3497\", \"#ae017e\", \"#7a0177\"],\n        9: [\"#fff7f3\", \"#fde0dd\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#dd3497\", \"#ae017e\", \"#7a0177\", \"#49006a\"]\n    }, PuRd: {\n        3: [\"#e7e1ef\", \"#c994c7\", \"#dd1c77\"],\n        4: [\"#f1eef6\", \"#d7b5d8\", \"#df65b0\", \"#ce1256\"],\n        5: [\"#f1eef6\", \"#d7b5d8\", \"#df65b0\", \"#dd1c77\", \"#980043\"],\n        6: [\"#f1eef6\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#dd1c77\", \"#980043\"],\n        7: [\"#f1eef6\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#e7298a\", \"#ce1256\", \"#91003f\"],\n        8: [\"#f7f4f9\", \"#e7e1ef\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#e7298a\", \"#ce1256\", \"#91003f\"],\n        9: [\"#f7f4f9\", \"#e7e1ef\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#e7298a\", \"#ce1256\", \"#980043\", \"#67001f\"]\n    }, OrRd: {\n        3: [\"#fee8c8\", \"#fdbb84\", \"#e34a33\"],\n        4: [\"#fef0d9\", \"#fdcc8a\", \"#fc8d59\", \"#d7301f\"],\n        5: [\"#fef0d9\", \"#fdcc8a\", \"#fc8d59\", \"#e34a33\", \"#b30000\"],\n        6: [\"#fef0d9\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#e34a33\", \"#b30000\"],\n        7: [\"#fef0d9\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#ef6548\", \"#d7301f\", \"#990000\"],\n        8: [\"#fff7ec\", \"#fee8c8\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#ef6548\", \"#d7301f\", \"#990000\"],\n        9: [\"#fff7ec\", \"#fee8c8\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#ef6548\", \"#d7301f\", \"#b30000\", \"#7f0000\"]\n    }, YlOrRd: {\n        3: [\"#ffeda0\", \"#feb24c\", \"#f03b20\"],\n        4: [\"#ffffb2\", \"#fecc5c\", \"#fd8d3c\", \"#e31a1c\"],\n        5: [\"#ffffb2\", \"#fecc5c\", \"#fd8d3c\", \"#f03b20\", \"#bd0026\"],\n        6: [\"#ffffb2\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#f03b20\", \"#bd0026\"],\n        7: [\"#ffffb2\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#fc4e2a\", \"#e31a1c\", \"#b10026\"],\n        8: [\"#ffffcc\", \"#ffeda0\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#fc4e2a\", \"#e31a1c\", \"#b10026\"],\n        9: [\"#ffffcc\", \"#ffeda0\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#fc4e2a\", \"#e31a1c\", \"#bd0026\", \"#800026\"]\n    }, YlOrBr: {\n        3: [\"#fff7bc\", \"#fec44f\", \"#d95f0e\"],\n        4: [\"#ffffd4\", \"#fed98e\", \"#fe9929\", \"#cc4c02\"],\n        5: [\"#ffffd4\", \"#fed98e\", \"#fe9929\", \"#d95f0e\", \"#993404\"],\n        6: [\"#ffffd4\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#d95f0e\", \"#993404\"],\n        7: [\"#ffffd4\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#ec7014\", \"#cc4c02\", \"#8c2d04\"],\n        8: [\"#ffffe5\", \"#fff7bc\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#ec7014\", \"#cc4c02\", \"#8c2d04\"],\n        9: [\"#ffffe5\", \"#fff7bc\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#ec7014\", \"#cc4c02\", \"#993404\", \"#662506\"]\n    }, Purples: {\n        3: [\"#efedf5\", \"#bcbddc\", \"#756bb1\"],\n        4: [\"#f2f0f7\", \"#cbc9e2\", \"#9e9ac8\", \"#6a51a3\"],\n        5: [\"#f2f0f7\", \"#cbc9e2\", \"#9e9ac8\", \"#756bb1\", \"#54278f\"],\n        6: [\"#f2f0f7\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#756bb1\", \"#54278f\"],\n        7: [\"#f2f0f7\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#807dba\", \"#6a51a3\", \"#4a1486\"],\n        8: [\"#fcfbfd\", \"#efedf5\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#807dba\", \"#6a51a3\", \"#4a1486\"],\n        9: [\"#fcfbfd\", \"#efedf5\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#807dba\", \"#6a51a3\", \"#54278f\", \"#3f007d\"]\n    }, Blues: {\n        3: [\"#deebf7\", \"#9ecae1\", \"#3182bd\"],\n        4: [\"#eff3ff\", \"#bdd7e7\", \"#6baed6\", \"#2171b5\"],\n        5: [\"#eff3ff\", \"#bdd7e7\", \"#6baed6\", \"#3182bd\", \"#08519c\"],\n        6: [\"#eff3ff\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#3182bd\", \"#08519c\"],\n        7: [\"#eff3ff\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#4292c6\", \"#2171b5\", \"#084594\"],\n        8: [\"#f7fbff\", \"#deebf7\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#4292c6\", \"#2171b5\", \"#084594\"],\n        9: [\"#f7fbff\", \"#deebf7\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#4292c6\", \"#2171b5\", \"#08519c\", \"#08306b\"]\n    }, Greens: {\n        3: [\"#e5f5e0\", \"#a1d99b\", \"#31a354\"],\n        4: [\"#edf8e9\", \"#bae4b3\", \"#74c476\", \"#238b45\"],\n        5: [\"#edf8e9\", \"#bae4b3\", \"#74c476\", \"#31a354\", \"#006d2c\"],\n        6: [\"#edf8e9\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#31a354\", \"#006d2c\"],\n        7: [\"#edf8e9\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#41ab5d\", \"#238b45\", \"#005a32\"],\n        8: [\"#f7fcf5\", \"#e5f5e0\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#41ab5d\", \"#238b45\", \"#005a32\"],\n        9: [\"#f7fcf5\", \"#e5f5e0\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#41ab5d\", \"#238b45\", \"#006d2c\", \"#00441b\"]\n    }, Oranges: {\n        3: [\"#fee6ce\", \"#fdae6b\", \"#e6550d\"],\n        4: [\"#feedde\", \"#fdbe85\", \"#fd8d3c\", \"#d94701\"],\n        5: [\"#feedde\", \"#fdbe85\", \"#fd8d3c\", \"#e6550d\", \"#a63603\"],\n        6: [\"#feedde\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#e6550d\", \"#a63603\"],\n        7: [\"#feedde\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#f16913\", \"#d94801\", \"#8c2d04\"],\n        8: [\"#fff5eb\", \"#fee6ce\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#f16913\", \"#d94801\", \"#8c2d04\"],\n        9: [\"#fff5eb\", \"#fee6ce\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#f16913\", \"#d94801\", \"#a63603\", \"#7f2704\"]\n    }, Reds: {\n        3: [\"#fee0d2\", \"#fc9272\", \"#de2d26\"],\n        4: [\"#fee5d9\", \"#fcae91\", \"#fb6a4a\", \"#cb181d\"],\n        5: [\"#fee5d9\", \"#fcae91\", \"#fb6a4a\", \"#de2d26\", \"#a50f15\"],\n        6: [\"#fee5d9\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#de2d26\", \"#a50f15\"],\n        7: [\"#fee5d9\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#ef3b2c\", \"#cb181d\", \"#99000d\"],\n        8: [\"#fff5f0\", \"#fee0d2\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#ef3b2c\", \"#cb181d\", \"#99000d\"],\n        9: [\"#fff5f0\", \"#fee0d2\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#ef3b2c\", \"#cb181d\", \"#a50f15\", \"#67000d\"]\n    }, Greys: {\n        3: [\"#f0f0f0\", \"#bdbdbd\", \"#636363\"],\n        4: [\"#f7f7f7\", \"#cccccc\", \"#969696\", \"#525252\"],\n        5: [\"#f7f7f7\", \"#cccccc\", \"#969696\", \"#636363\", \"#252525\"],\n        6: [\"#f7f7f7\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#636363\", \"#252525\"],\n        7: [\"#f7f7f7\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#737373\", \"#525252\", \"#252525\"],\n        8: [\"#ffffff\", \"#f0f0f0\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#737373\", \"#525252\", \"#252525\"],\n        9: [\"#ffffff\", \"#f0f0f0\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#737373\", \"#525252\", \"#252525\", \"#000000\"]\n    }, PuOr: {\n        3: [\"#f1a340\", \"#f7f7f7\", \"#998ec3\"],\n        4: [\"#e66101\", \"#fdb863\", \"#b2abd2\", \"#5e3c99\"],\n        5: [\"#e66101\", \"#fdb863\", \"#f7f7f7\", \"#b2abd2\", \"#5e3c99\"],\n        6: [\"#b35806\", \"#f1a340\", \"#fee0b6\", \"#d8daeb\", \"#998ec3\", \"#542788\"],\n        7: [\"#b35806\", \"#f1a340\", \"#fee0b6\", \"#f7f7f7\", \"#d8daeb\", \"#998ec3\", \"#542788\"],\n        8: [\"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\"],\n        9: [\"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#f7f7f7\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\"],\n        10: [\"#7f3b08\", \"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\", \"#2d004b\"],\n        11: [\"#7f3b08\", \"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#f7f7f7\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\", \"#2d004b\"]\n    }, BrBG: {\n        3: [\"#d8b365\", \"#f5f5f5\", \"#5ab4ac\"],\n        4: [\"#a6611a\", \"#dfc27d\", \"#80cdc1\", \"#018571\"],\n        5: [\"#a6611a\", \"#dfc27d\", \"#f5f5f5\", \"#80cdc1\", \"#018571\"],\n        6: [\"#8c510a\", \"#d8b365\", \"#f6e8c3\", \"#c7eae5\", \"#5ab4ac\", \"#01665e\"],\n        7: [\"#8c510a\", \"#d8b365\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#5ab4ac\", \"#01665e\"],\n        8: [\"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\"],\n        9: [\"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\"],\n        10: [\"#543005\", \"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\", \"#003c30\"],\n        11: [\"#543005\", \"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\", \"#003c30\"]\n    }, PRGn: {\n        3: [\"#af8dc3\", \"#f7f7f7\", \"#7fbf7b\"],\n        4: [\"#7b3294\", \"#c2a5cf\", \"#a6dba0\", \"#008837\"],\n        5: [\"#7b3294\", \"#c2a5cf\", \"#f7f7f7\", \"#a6dba0\", \"#008837\"],\n        6: [\"#762a83\", \"#af8dc3\", \"#e7d4e8\", \"#d9f0d3\", \"#7fbf7b\", \"#1b7837\"],\n        7: [\"#762a83\", \"#af8dc3\", \"#e7d4e8\", \"#f7f7f7\", \"#d9f0d3\", \"#7fbf7b\", \"#1b7837\"],\n        8: [\"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\"],\n        9: [\"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#f7f7f7\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\"],\n        10: [\"#40004b\", \"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\", \"#00441b\"],\n        11: [\"#40004b\", \"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#f7f7f7\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\", \"#00441b\"]\n    }, PiYG: {\n        3: [\"#e9a3c9\", \"#f7f7f7\", \"#a1d76a\"],\n        4: [\"#d01c8b\", \"#f1b6da\", \"#b8e186\", \"#4dac26\"],\n        5: [\"#d01c8b\", \"#f1b6da\", \"#f7f7f7\", \"#b8e186\", \"#4dac26\"],\n        6: [\"#c51b7d\", \"#e9a3c9\", \"#fde0ef\", \"#e6f5d0\", \"#a1d76a\", \"#4d9221\"],\n        7: [\"#c51b7d\", \"#e9a3c9\", \"#fde0ef\", \"#f7f7f7\", \"#e6f5d0\", \"#a1d76a\", \"#4d9221\"],\n        8: [\"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\"],\n        9: [\"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#f7f7f7\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\"],\n        10: [\"#8e0152\", \"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\", \"#276419\"],\n        11: [\"#8e0152\", \"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#f7f7f7\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\", \"#276419\"]\n    }, RdBu: {\n        3: [\"#ef8a62\", \"#f7f7f7\", \"#67a9cf\"],\n        4: [\"#ca0020\", \"#f4a582\", \"#92c5de\", \"#0571b0\"],\n        5: [\"#ca0020\", \"#f4a582\", \"#f7f7f7\", \"#92c5de\", \"#0571b0\"],\n        6: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#d1e5f0\", \"#67a9cf\", \"#2166ac\"],\n        7: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#67a9cf\", \"#2166ac\"],\n        8: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\"],\n        9: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\"],\n        10: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\", \"#053061\"],\n        11: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\", \"#053061\"]\n    }, RdGy: {\n        3: [\"#ef8a62\", \"#ffffff\", \"#999999\"],\n        4: [\"#ca0020\", \"#f4a582\", \"#bababa\", \"#404040\"],\n        5: [\"#ca0020\", \"#f4a582\", \"#ffffff\", \"#bababa\", \"#404040\"],\n        6: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#e0e0e0\", \"#999999\", \"#4d4d4d\"],\n        7: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#ffffff\", \"#e0e0e0\", \"#999999\", \"#4d4d4d\"],\n        8: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\"],\n        9: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#ffffff\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\"],\n        10: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\", \"#1a1a1a\"],\n        11: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#ffffff\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\", \"#1a1a1a\"]\n    }, RdYlBu: {\n        3: [\"#fc8d59\", \"#ffffbf\", \"#91bfdb\"],\n        4: [\"#d7191c\", \"#fdae61\", \"#abd9e9\", \"#2c7bb6\"],\n        5: [\"#d7191c\", \"#fdae61\", \"#ffffbf\", \"#abd9e9\", \"#2c7bb6\"],\n        6: [\"#d73027\", \"#fc8d59\", \"#fee090\", \"#e0f3f8\", \"#91bfdb\", \"#4575b4\"],\n        7: [\"#d73027\", \"#fc8d59\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#91bfdb\", \"#4575b4\"],\n        8: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\"],\n        9: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\"],\n        10: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\", \"#313695\"],\n        11: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\", \"#313695\"]\n    }, Spectral: {\n        3: [\"#fc8d59\", \"#ffffbf\", \"#99d594\"],\n        4: [\"#d7191c\", \"#fdae61\", \"#abdda4\", \"#2b83ba\"],\n        5: [\"#d7191c\", \"#fdae61\", \"#ffffbf\", \"#abdda4\", \"#2b83ba\"],\n        6: [\"#d53e4f\", \"#fc8d59\", \"#fee08b\", \"#e6f598\", \"#99d594\", \"#3288bd\"],\n        7: [\"#d53e4f\", \"#fc8d59\", \"#fee08b\", \"#ffffbf\", \"#e6f598\", \"#99d594\", \"#3288bd\"],\n        8: [\"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\"],\n        9: [\"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\"],\n        10: [\"#9e0142\", \"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\", \"#5e4fa2\"],\n        11: [\"#9e0142\", \"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\", \"#5e4fa2\"]\n    }, RdYlGn: {\n        3: [\"#fc8d59\", \"#ffffbf\", \"#91cf60\"],\n        4: [\"#d7191c\", \"#fdae61\", \"#a6d96a\", \"#1a9641\"],\n        5: [\"#d7191c\", \"#fdae61\", \"#ffffbf\", \"#a6d96a\", \"#1a9641\"],\n        6: [\"#d73027\", \"#fc8d59\", \"#fee08b\", \"#d9ef8b\", \"#91cf60\", \"#1a9850\"],\n        7: [\"#d73027\", \"#fc8d59\", \"#fee08b\", \"#ffffbf\", \"#d9ef8b\", \"#91cf60\", \"#1a9850\"],\n        8: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\"],\n        9: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\"],\n        10: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\", \"#006837\"],\n        11: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\", \"#006837\"]\n    }, Accent: {\n        3: [\"#7fc97f\", \"#beaed4\", \"#fdc086\"],\n        4: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\"],\n        5: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\"],\n        6: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\", \"#f0027f\"],\n        7: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\", \"#f0027f\", \"#bf5b17\"],\n        8: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\", \"#f0027f\", \"#bf5b17\", \"#666666\"]\n    }, Dark2: {\n        3: [\"#1b9e77\", \"#d95f02\", \"#7570b3\"],\n        4: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\"],\n        5: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\"],\n        6: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\", \"#e6ab02\"],\n        7: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\", \"#e6ab02\", \"#a6761d\"],\n        8: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\", \"#e6ab02\", \"#a6761d\", \"#666666\"]\n    }, Paired: {\n        3: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\"],\n        4: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\"],\n        5: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\"],\n        6: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\"],\n        7: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\"],\n        8: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\"],\n        9: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\"],\n        10: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\", \"#6a3d9a\"],\n        11: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\", \"#6a3d9a\", \"#ffff99\"],\n        12: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\", \"#6a3d9a\", \"#ffff99\", \"#b15928\"]\n    }, Pastel1: {\n        3: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\"],\n        4: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\"],\n        5: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\"],\n        6: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\"],\n        7: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\", \"#e5d8bd\"],\n        8: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\", \"#e5d8bd\", \"#fddaec\"],\n        9: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\", \"#e5d8bd\", \"#fddaec\", \"#f2f2f2\"]\n    }, Pastel2: {\n        3: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\"],\n        4: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\"],\n        5: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\"],\n        6: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\", \"#fff2ae\"],\n        7: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\", \"#fff2ae\", \"#f1e2cc\"],\n        8: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\", \"#fff2ae\", \"#f1e2cc\", \"#cccccc\"]\n    }, Set1: {\n        3: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\"],\n        4: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\"],\n        5: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\"],\n        6: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\"],\n        7: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\", \"#a65628\"],\n        8: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\", \"#a65628\", \"#f781bf\"],\n        9: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\", \"#a65628\", \"#f781bf\", \"#999999\"]\n    }, Set2: {\n        3: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\"],\n        4: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\"],\n        5: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\"],\n        6: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\", \"#ffd92f\"],\n        7: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\", \"#ffd92f\", \"#e5c494\"],\n        8: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\", \"#ffd92f\", \"#e5c494\", \"#b3b3b3\"]\n    }, Set3: {\n        3: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\"],\n        4: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\"],\n        5: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\"],\n        6: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\"],\n        7: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\"],\n        8: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\"],\n        9: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\"],\n        10: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\", \"#bc80bd\"],\n        11: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\", \"#bc80bd\", \"#ccebc5\"],\n        12: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\", \"#bc80bd\", \"#ccebc5\", \"#ffed6f\"]\n    }\n};\n\nexport { index as default };\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.range = function() {\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n  };\n\n  scale.quantiles = function(n) {\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export default function(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n      + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c.r = 255 * (x = Math.sin(t)) * x;\n  c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c + \"\";\n}\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n      + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colorbrewer from \"colorbrewer\";\r\nimport { rgb as d3RGB } from \"d3-color\";\r\nimport { interpolateLab as d3InterpolateLab } from \"d3-interpolate\";\r\nimport { scaleLinear as d3ScaleLinear, scaleOrdinal as d3ScaleOrdinal, scaleQuantize as d3ScaleQuantize, scaleSequential as d3ScaleSequential } from \"d3-scale\";\r\nimport { interpolateInferno as d3InterpolateInferno, interpolateMagma as d3InterpolateMagma, interpolatePlasma as d3InterpolatePlasma, interpolateViridis as d3InterpolateViridis, schemeCategory10 as d3SchemeCategory10 } from \"d3-scale-chromatic\";\r\nimport { select as d3Select } from \"d3-selection\";\r\n\r\nconst d3SchemeCategory20 = [\"#1f77b4\", \"#aec7e8\", \"#ff7f0e\", \"#ffbb78\", \"#2ca02c\", \"#98df8a\", \"#d62728\", \"#ff9896\", \"#9467bd\", \"#c5b0d5\", \"#8c564b\", \"#c49c94\", \"#e377c2\", \"#f7b6d2\", \"#7f7f7f\", \"#c7c7c7\", \"#bcbd22\", \"#dbdb8d\", \"#17becf\", \"#9edae5\"];\r\nconst d3SchemeCategory20b = [\"#393b79\", \"#5254a3\", \"#6b6ecf\", \"#9c9ede\", \"#637939\", \"#8ca252\", \"#b5cf6b\", \"#cedb9c\", \"#8c6d31\", \"#bd9e39\", \"#e7ba52\", \"#e7cb94\", \"#843c39\", \"#ad494a\", \"#d6616b\", \"#e7969c\", \"#7b4173\", \"#a55194\", \"#ce6dbd\", \"#de9ed6\"];\r\nconst d3SchemeCategory20c = [\"#3182bd\", \"#6baed6\", \"#9ecae1\", \"#c6dbef\", \"#e6550d\", \"#fd8d3c\", \"#fdae6b\", \"#fdd0a2\", \"#31a354\", \"#74c476\", \"#a1d99b\", \"#c7e9c0\", \"#756bb1\", \"#9e9ac8\", \"#bcbddc\", \"#dadaeb\", \"#636363\", \"#969696\", \"#bdbdbd\", \"#d9d9d9\"];\r\n\r\nconst d3Schemes = {\r\n    category10: d3SchemeCategory10,\r\n    category20: d3SchemeCategory20,\r\n    category20b: d3SchemeCategory20b,\r\n    category20c: d3SchemeCategory20c\r\n};\r\n\r\nconst m_colorbrewer = colorbrewer;\r\n\r\nconst m_d3 = {\r\n    Viridis: d3InterpolateViridis,\r\n    Magma: d3InterpolateMagma,\r\n    Inferno: d3InterpolateInferno,\r\n    Plasma: d3InterpolatePlasma\r\n};\r\n\r\nconst d3Ordinal = [\r\n    \"category10\", \"category20\", \"category20b\", \"category20c\"\r\n];\r\n\r\nconst brewerOrdinal = [\r\n    \"Accent\", \"Dark2\", \"Paired\", \"Pastel1\", \"Pastel2\", \"Set1\", \"Set2\", \"Set3\"\r\n];\r\n\r\nconst hpccOrdinal = [\r\n    \"hpcc10\", \"hpcc20\"\r\n];\r\n\r\n// These color schemes are from www.flatuicolors.com\r\nconst flatuiSchemes = {\r\n    FlatUI_default: [\"rgb(26, 188, 156)\", \"rgb(46, 204, 113)\", \"rgb(52, 152, 219)\", \"rgb(155, 89, 182)\", \"rgb(52, 73, 94)\", \"rgb(22, 160, 133)\", \"rgb(39, 174, 96)\", \"rgb(41, 128, 185)\", \"rgb(142, 68, 173)\", \"rgb(44, 62, 80)\", \"rgb(241, 196, 15)\", \"rgb(230, 126, 34)\", \"rgb(231, 76, 60)\", \"rgb(236, 240, 241)\", \"rgb(149, 165, 166)\", \"rgb(243, 156, 18)\", \"rgb(211, 84, 0)\", \"rgb(192, 57, 43)\", \"rgb(189, 195, 199)\", \"rgb(127, 140, 141)\"],\r\n    FlatUI_American: [\"rgb(85, 239, 196)\", \"rgb(129, 236, 236)\", \"rgb(116, 185, 255)\", \"rgb(162, 155, 254)\", \"rgb(223, 230, 233)\", \"rgb(0, 184, 148)\", \"rgb(0, 206, 201)\", \"rgb(9, 132, 227)\", \"rgb(108, 92, 231)\", \"rgb(178, 190, 195)\", \"rgb(255, 234, 167)\", \"rgb(250, 177, 160)\", \"rgb(255, 118, 117)\", \"rgb(253, 121, 168)\", \"rgb(99, 110, 114)\", \"rgb(253, 203, 110)\", \"rgb(225, 112, 85)\", \"rgb(214, 48, 49)\", \"rgb(232, 67, 147)\", \"rgb(45, 52, 54)\"],\r\n    FlatUI_Aussie: [\"rgb(246, 229, 141)\", \"rgb(255, 190, 118)\", \"rgb(255, 121, 121)\", \"rgb(186, 220, 88)\", \"rgb(223, 249, 251)\", \"rgb(249, 202, 36)\", \"rgb(240, 147, 43)\", \"rgb(235, 77, 75)\", \"rgb(106, 176, 76)\", \"rgb(199, 236, 238)\", \"rgb(126, 214, 223)\", \"rgb(224, 86, 253)\", \"rgb(104, 109, 224)\", \"rgb(48, 51, 107)\", \"rgb(149, 175, 192)\", \"rgb(34, 166, 179)\", \"rgb(190, 46, 221)\", \"rgb(72, 52, 212)\", \"rgb(19, 15, 64)\", \"rgb(83, 92, 104)\"],\r\n    FlatUI_British: [\"rgb(0, 168, 255)\", \"rgb(156, 136, 255)\", \"rgb(251, 197, 49)\", \"rgb(76, 209, 55)\", \"rgb(72, 126, 176)\", \"rgb(0, 151, 230)\", \"rgb(140, 122, 230)\", \"rgb(225, 177, 44)\", \"rgb(68, 189, 50)\", \"rgb(64, 115, 158)\", \"rgb(232, 65, 24)\", \"rgb(245, 246, 250)\", \"rgb(127, 143, 166)\", \"rgb(39, 60, 117)\", \"rgb(53, 59, 72)\", \"rgb(194, 54, 22)\", \"rgb(220, 221, 225)\", \"rgb(113, 128, 147)\", \"rgb(25, 42, 86)\", \"rgb(47, 54, 64)\"],\r\n    FlatUI_Canadian: [\"rgb(255, 159, 243)\", \"rgb(254, 202, 87)\", \"rgb(255, 107, 107)\", \"rgb(72, 219, 251)\", \"rgb(29, 209, 161)\", \"rgb(243, 104, 224)\", \"rgb(255, 159, 67)\", \"rgb(238, 82, 83)\", \"rgb(10, 189, 227)\", \"rgb(16, 172, 132)\", \"rgb(0, 210, 211)\", \"rgb(84, 160, 255)\", \"rgb(95, 39, 205)\", \"rgb(200, 214, 229)\", \"rgb(87, 101, 116)\", \"rgb(1, 163, 164)\", \"rgb(46, 134, 222)\", \"rgb(52, 31, 151)\", \"rgb(131, 149, 167)\", \"rgb(34, 47, 62)\"],\r\n    FlatUI_Chinese: [\"rgb(236, 204, 104)\", \"rgb(255, 127, 80)\", \"rgb(255, 107, 129)\", \"rgb(164, 176, 190)\", \"rgb(87, 96, 111)\", \"rgb(255, 165, 2)\", \"rgb(255, 99, 72)\", \"rgb(255, 71, 87)\", \"rgb(116, 125, 140)\", \"rgb(47, 53, 66)\", \"rgb(123, 237, 159)\", \"rgb(112, 161, 255)\", \"rgb(83, 82, 237)\", \"rgb(255, 255, 255)\", \"rgb(223, 228, 234)\", \"rgb(46, 213, 115)\", \"rgb(30, 144, 255)\", \"rgb(55, 66, 250)\", \"rgb(241, 242, 246)\", \"rgb(206, 214, 224)\"],\r\n    FlatUI_Dutch: [\"rgb(255, 195, 18)\", \"rgb(196, 229, 56)\", \"rgb(18, 203, 196)\", \"rgb(253, 167, 223)\", \"rgb(237, 76, 103)\", \"rgb(247, 159, 31)\", \"rgb(163, 203, 56)\", \"rgb(18, 137, 167)\", \"rgb(217, 128, 250)\", \"rgb(181, 52, 113)\", \"rgb(238, 90, 36)\", \"rgb(0, 148, 50)\", \"rgb(6, 82, 221)\", \"rgb(153, 128, 250)\", \"rgb(131, 52, 113)\", \"rgb(234, 32, 39)\", \"rgb(0, 98, 102)\", \"rgb(27, 20, 100)\", \"rgb(87, 88, 187)\", \"rgb(111, 30, 81)\"],\r\n    FlatUI_French: [\"rgb(250, 211, 144)\", \"rgb(248, 194, 145)\", \"rgb(106, 137, 204)\", \"rgb(130, 204, 221)\", \"rgb(184, 233, 148)\", \"rgb(246, 185, 59)\", \"rgb(229, 80, 57)\", \"rgb(74, 105, 189)\", \"rgb(96, 163, 188)\", \"rgb(120, 224, 143)\", \"rgb(250, 152, 58)\", \"rgb(235, 47, 6)\", \"rgb(30, 55, 153)\", \"rgb(60, 99, 130)\", \"rgb(56, 173, 169)\", \"rgb(229, 142, 38)\", \"rgb(183, 21, 64)\", \"rgb(12, 36, 97)\", \"rgb(10, 61, 98)\", \"rgb(7, 153, 146)\"],\r\n    FlatUI_German: [\"rgb(252, 92, 101)\", \"rgb(253, 150, 68)\", \"rgb(254, 211, 48)\", \"rgb(38, 222, 129)\", \"rgb(43, 203, 186)\", \"rgb(235, 59, 90)\", \"rgb(250, 130, 49)\", \"rgb(247, 183, 49)\", \"rgb(32, 191, 107)\", \"rgb(15, 185, 177)\", \"rgb(69, 170, 242)\", \"rgb(75, 123, 236)\", \"rgb(165, 94, 234)\", \"rgb(209, 216, 224)\", \"rgb(119, 140, 163)\", \"rgb(45, 152, 218)\", \"rgb(56, 103, 214)\", \"rgb(136, 84, 208)\", \"rgb(165, 177, 194)\", \"rgb(75, 101, 132)\"],\r\n    FlatUI_Indian: [\"rgb(254, 164, 127)\", \"rgb(37, 204, 247)\", \"rgb(234, 181, 67)\", \"rgb(85, 230, 193)\", \"rgb(202, 211, 200)\", \"rgb(249, 127, 81)\", \"rgb(27, 156, 252)\", \"rgb(248, 239, 186)\", \"rgb(88, 177, 159)\", \"rgb(44, 58, 71)\", \"rgb(179, 55, 113)\", \"rgb(59, 59, 152)\", \"rgb(253, 114, 114)\", \"rgb(154, 236, 219)\", \"rgb(214, 162, 232)\", \"rgb(109, 33, 79)\", \"rgb(24, 44, 97)\", \"rgb(252, 66, 123)\", \"rgb(189, 197, 129)\", \"rgb(130, 88, 159)\"],\r\n    FlatUI_Russian: [\"rgb(243, 166, 131)\", \"rgb(247, 215, 148)\", \"rgb(119, 139, 235)\", \"rgb(231, 127, 103)\", \"rgb(207, 106, 135)\", \"rgb(241, 144, 102)\", \"rgb(245, 205, 121)\", \"rgb(84, 109, 229)\", \"rgb(225, 95, 65)\", \"rgb(196, 69, 105)\", \"rgb(120, 111, 166)\", \"rgb(248, 165, 194)\", \"rgb(99, 205, 218)\", \"rgb(234, 134, 133)\", \"rgb(89, 98, 117)\", \"rgb(87, 75, 144)\", \"rgb(247, 143, 179)\", \"rgb(61, 193, 211)\", \"rgb(230, 103, 103)\", \"rgb(48, 57, 82)\"],\r\n    FlatUI_Spanish: [\"rgb(64, 64, 122)\", \"rgb(112, 111, 211)\", \"rgb(247, 241, 227)\", \"rgb(52, 172, 224)\", \"rgb(51, 217, 178)\", \"rgb(44, 44, 84)\", \"rgb(71, 71, 135)\", \"rgb(170, 166, 157)\", \"rgb(34, 112, 147)\", \"rgb(33, 140, 116)\", \"rgb(255, 82, 82)\", \"rgb(255, 121, 63)\", \"rgb(209, 204, 192)\", \"rgb(255, 177, 66)\", \"rgb(255, 218, 121)\", \"rgb(179, 57, 57)\", \"rgb(205, 97, 51)\", \"rgb(132, 129, 122)\", \"rgb(204, 142, 53)\", \"rgb(204, 174, 98)\"],\r\n    FlatUI_Swedish: [\"rgb(239, 87, 119)\", \"rgb(87, 95, 207)\", \"rgb(75, 207, 250)\", \"rgb(52, 231, 228)\", \"rgb(11, 232, 129)\", \"rgb(245, 59, 87)\", \"rgb(60, 64, 198)\", \"rgb(15, 188, 249)\", \"rgb(0, 216, 214)\", \"rgb(5, 196, 107)\", \"rgb(255, 192, 72)\", \"rgb(255, 221, 89)\", \"rgb(255, 94, 87)\", \"rgb(210, 218, 226)\", \"rgb(72, 84, 96)\", \"rgb(255, 168, 1)\", \"rgb(255, 211, 42)\", \"rgb(255, 63, 52)\", \"rgb(128, 142, 155)\", \"rgb(30, 39, 46)\"],\r\n    FlatUI_Turkish: [\"rgb(205, 132, 241)\", \"rgb(255, 204, 204)\", \"rgb(255, 77, 77)\", \"rgb(255, 175, 64)\", \"rgb(255, 250, 101)\", \"rgb(197, 108, 240)\", \"rgb(255, 184, 184)\", \"rgb(255, 56, 56)\", \"rgb(255, 159, 26)\", \"rgb(255, 242, 0)\", \"rgb(50, 255, 126)\", \"rgb(126, 255, 245)\", \"rgb(24, 220, 255)\", \"rgb(125, 95, 255)\", \"rgb(75, 75, 75)\", \"rgb(58, 227, 116)\", \"rgb(103, 230, 220)\", \"rgb(23, 192, 235)\", \"rgb(113, 88, 226)\", \"rgb(61, 61, 61)\"]\r\n};\r\nconst flatuiOrdinal = Object.keys(flatuiSchemes);\r\n\r\nconst ordinalCache = {};\r\n\r\nexport interface PaletteFunc {\r\n    switch(id?: string, colors?: string[]);\r\n    type(): \"ordinal\" | \"rainbow\";\r\n}\r\n\r\nexport interface OrdinalPaletteFunc extends PaletteFunc {\r\n    (label: string): string;\r\n}\r\nexport function fetchOrdinalItem(): string[];\r\nexport function fetchOrdinalItem(id: string, colors?: string[]): OrdinalPaletteFunc;\r\nexport function fetchOrdinalItem(id?: string, colors?: string[]): string[] | OrdinalPaletteFunc {\r\n    if (!id) return palette_ordinal();\r\n    let retVal = ordinalCache[id];\r\n    if (!retVal) {\r\n        retVal = palette_ordinal(id, colors);\r\n        ordinalCache[id] = retVal;\r\n    }\r\n    return retVal;\r\n}\r\n\r\nfunction palette_ordinal(id?, colors?): any {\r\n    if (!id) return [\"default\"].concat(d3Ordinal.concat(brewerOrdinal).concat(hpccOrdinal).concat(flatuiOrdinal));\r\n    let scale = null;\r\n\r\n    if (colors) {\r\n        scale = d3ScaleOrdinal().range(colors);\r\n    } else {\r\n        if (d3Ordinal.indexOf(id) >= 0) {\r\n            scale = d3ScaleOrdinal(d3Schemes[id]);\r\n        } else if (flatuiOrdinal.indexOf(id) >= 0) {\r\n            scale = d3ScaleOrdinal().range(flatuiSchemes[id]);\r\n        } else if (hpccOrdinal.indexOf(id) >= 0) {\r\n            let newColors = [];\r\n            switch (id) {\r\n                case \"hpcc10\":\r\n                    const defColors = palette_ordinal(\"default\").colors();\r\n                    newColors = defColors.filter(function (_item, idx) {\r\n                        if (idx % 2) {\r\n                            return true;\r\n                        }\r\n                        return false;\r\n                    });\r\n                    break;\r\n                case \"hpcc20\":\r\n                    newColors = palette_ordinal(\"category10\").colors().concat(palette_ordinal(\"hpcc10\").colors());\r\n                    break;\r\n            }\r\n            scale = d3ScaleOrdinal().range(newColors);\r\n        } else if (brewerOrdinal.indexOf(id) >= 0) {\r\n            let largestPalette = 12;\r\n            while (largestPalette > 0) {\r\n                if (m_colorbrewer[id][largestPalette]) {\r\n                    scale = d3ScaleOrdinal().range(m_colorbrewer[id][largestPalette]);\r\n                    break;\r\n                }\r\n                --largestPalette;\r\n            }\r\n        }\r\n        if (!scale) {\r\n            //  Default to Category20  ---\r\n            scale = d3ScaleOrdinal(d3SchemeCategory20);\r\n        }\r\n        colors = scale.range();\r\n    }\r\n    const ordinal: any = function (_) {\r\n        return scale(_);\r\n    };\r\n    ordinal.type = function () {\r\n        return \"ordinal\";\r\n    };\r\n    ordinal.id = function (_?) {\r\n        if (!arguments.length) return id;\r\n        id = _;\r\n        return ordinal;\r\n    };\r\n    ordinal.colors = function (_?) {\r\n        if (!arguments.length) return colors;\r\n        colors = _;\r\n        return ordinal;\r\n    };\r\n    ordinal.clone = function (newID) {\r\n        ordinalCache[newID] = palette_ordinal(newID, this.colors());\r\n        return ordinalCache[newID];\r\n\r\n    };\r\n    ordinal.cloneNotExists = function (newID) {\r\n        if (ordinalCache[newID]) {\r\n            return ordinalCache[newID];\r\n        }\r\n        return this.clone(newID);\r\n    };\r\n    ordinal.switch = function (_id?, _colors?) {\r\n        if (id === _id) {\r\n            return this;\r\n        }\r\n        return arguments.length ? fetchOrdinalItem(_id, _colors) : fetchOrdinalItem();\r\n    };\r\n\r\n    return ordinal;\r\n}\r\n\r\nconst rainbowCache = {};\r\nexport interface RainbowPaletteFunc extends PaletteFunc {\r\n    (value: number, domainLow: number, domainHigh: number): string;\r\n}\r\nexport function fetchRainbowItem(): string[];\r\nexport function fetchRainbowItem(id: string): RainbowPaletteFunc;\r\nexport function fetchRainbowItem(id: string, colors: string[], steps?: number): RainbowPaletteFunc;\r\nexport function fetchRainbowItem(id?: string, colors?: string[], steps?: number): string[] | RainbowPaletteFunc {\r\n    if (!id) return palette_rainbow();\r\n    let retVal = rainbowCache[id];\r\n    if (!retVal) {\r\n        retVal = palette_rainbow(id, colors, steps);\r\n        rainbowCache[id] = retVal;\r\n    }\r\n    return retVal;\r\n}\r\n\r\nfunction palette_rainbow(id?, _colors?, _steps?) {\r\n    if (!arguments.length) {\r\n        const retVal = [\"default\"];\r\n        for (const key in m_colorbrewer) {\r\n            if (brewerOrdinal.indexOf(key) === -1) {\r\n                retVal.push(key);\r\n            }\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    let scale = null;\r\n    let colors = _colors;\r\n\r\n    const _custom = function (colors, steps?) {\r\n        steps = steps || 32;\r\n        const subPaletteSize = Math.ceil(steps / (colors.length - 1));\r\n        const range = [];\r\n        let prevColor = null;\r\n        colors.forEach(function (color) {\r\n            if (prevColor) {\r\n                const scale = d3ScaleLinear()\r\n                    .domain([0, subPaletteSize])\r\n                    .range([prevColor, color])\r\n                    .interpolate(d3InterpolateLab as any)\r\n                    ;\r\n                for (let i = 0; i < subPaletteSize; ++i) {\r\n                    range.push(scale(i));\r\n                }\r\n            }\r\n            prevColor = color;\r\n        });\r\n        scale = d3ScaleQuantize().domain([0, 100]).range(range);\r\n        return scale;\r\n    };\r\n\r\n    if (_colors) {\r\n        scale = _custom(_colors, _steps);\r\n    } else {\r\n        if (m_colorbrewer[id]) {\r\n            let largestPalette = 12;\r\n            while (largestPalette > 0) {\r\n                if (m_colorbrewer[id][largestPalette]) {\r\n                    scale = _custom(m_colorbrewer[id][largestPalette]);\r\n                    break;\r\n                }\r\n                --largestPalette;\r\n            }\r\n        }\r\n        if (m_d3[id]) {\r\n            scale = d3ScaleSequential(m_d3[id]).domain([0, 100]);\r\n        }\r\n        if (!scale) {\r\n            scale = _custom(m_colorbrewer.RdYlGn[11]);\r\n        }\r\n        colors = scale.range ? scale.range() : scale;\r\n\r\n    }\r\n    const rainbow: any = function (x, low, high) {\r\n        if (low === high) {\r\n            return scale.domain([low - 1, high + 1])(x);\r\n        }\r\n        return scale.domain([low, high])(x);\r\n    };\r\n    rainbow.type = function () {\r\n        return \"rainbow\";\r\n    };\r\n    rainbow.id = function (_?) {\r\n        if (!arguments.length) return id;\r\n        id = _;\r\n        return rainbow;\r\n    };\r\n    rainbow.colors = function (_?) {\r\n        if (!arguments.length) return colors;\r\n        colors = _;\r\n        return rainbow;\r\n    };\r\n    rainbow.clone = function (newID) {\r\n        rainbowCache[newID] = palette_rainbow(newID, this.colors());\r\n        return rainbowCache[newID];\r\n    };\r\n    rainbow.cloneNotExists = function (newID) {\r\n        if (rainbowCache[newID]) {\r\n            return rainbowCache[newID];\r\n        }\r\n        return this.clone(newID);\r\n    };\r\n    rainbow.switch = function (_id?, _colors?) {\r\n        if (id === _id) {\r\n            return this;\r\n        }\r\n        return arguments.length ? fetchRainbowItem(_id, _colors) : fetchRainbowItem();\r\n    };\r\n\r\n    return rainbow;\r\n}\r\n\r\nexport function test(ordinalDivID, brewerDivID, customDivID, customArr, steps) {\r\n    d3Select(ordinalDivID)\r\n        .selectAll(\".palette\")\r\n        .data(palette_ordinal(), function (d: any) { return d; })\r\n        .enter().append(\"span\")\r\n        .attr(\"class\", \"palette\")\r\n        .attr(\"title\", function (d: any) { return d; })\r\n        .on(\"click\", function (_event, d: any) {\r\n            console.info(Object.values(d.value).map(JSON.stringify as any).join(\"\\n\"));\r\n        })\r\n        .selectAll(\".swatch\").data(function (d) { return palette_ordinal(d).colors(); })\r\n        .enter().append(\"span\")\r\n        .attr(\"class\", \"swatch\")\r\n        .style(\"background-color\", function (d: any) { return d; });\r\n\r\n    d3Select(brewerDivID)\r\n        .selectAll(\".palette\")\r\n        .data(palette_rainbow(), function (d: any) { return d; })\r\n        .enter().append(\"span\")\r\n        .attr(\"class\", \"palette\")\r\n        .attr(\"title\", function (d: any) { return d; })\r\n        .on(\"click\", function (_event, d: any) {\r\n            console.info(Object.values(d.value).map(JSON.stringify as any).join(\"\\n\"));\r\n        })\r\n        .selectAll(\".swatch2\").data(function (d) { return palette_rainbow(d).colors(); })\r\n        .enter().append(\"span\")\r\n        .attr(\"class\", \"swatch2\")\r\n        .style(\"height\", (256 / 32) + \"px\")\r\n        .style(\"background-color\", function (d: any) { return d; });\r\n\r\n    const palette = { id: customArr.join(\"_\") + steps, scale: palette_rainbow(\"custom\", customArr, steps) };\r\n    d3Select(customDivID)\r\n        .selectAll(\".palette\")\r\n        .data([palette], function (d: any) { return d.id; })\r\n        .enter().append(\"span\")\r\n        .attr(\"class\", \"palette\")\r\n        .attr(\"title\", function () { return \"aaa\"; /*d.from + \"->\" + d.to;*/ })\r\n        .on(\"click\", function (_event, d) {\r\n            console.info(Object.values(d.id).map(JSON.stringify as any).join(\"\\n\"));\r\n        })\r\n        .selectAll(\".swatch2\").data(function () {\r\n            const retVal = [];\r\n            for (let i = 0; i <= 255; ++i) {\r\n                retVal.push(palette.scale(i, 0, 255));\r\n            }\r\n            return retVal;\r\n        })\r\n        .enter().append(\"span\")\r\n        .attr(\"class\", \"swatch2\")\r\n        .style(\"background-color\", function (d) { return d; });\r\n}\r\n\r\nm_colorbrewer[\"RdWhGr\"] = {\r\n    3: [\"red\", \"white\", \"green\"]\r\n};\r\n\r\nexport const ordinal = fetchOrdinalItem;\r\nexport const rainbow = fetchRainbowItem;\r\nexport function textColor(backgroundColor: string): string {\r\n    let rgb;\r\n    switch (backgroundColor) {\r\n        case \"\":\r\n        case \"transparent\":\r\n            rgb = d3RGB(\"white\");\r\n            break;\r\n        default:\r\n            rgb = d3RGB(backgroundColor);\r\n    }\r\n    return ((rgb.r * 0.299 + rgb.g * 0.587 + rgb.b * 0.114) > 149) ? \"black\" : \"white\";\r\n}\r\n","import { select as d3Select } from \"d3-selection\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\n\r\nimport \"../src/Shape.css\";\r\n\r\nexport class Shape extends SVGWidget {\r\n    protected _tooltipElement;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    contains(point) {\r\n        switch (this.shape()) {\r\n            case \"circle\":\r\n                return this.containsCircle(this.radius(), point);\r\n        }\r\n        return SVGWidget.prototype.intersection.apply(this, arguments);\r\n    }\r\n\r\n    intersection(pointA, pointB) {\r\n        switch (this.shape()) {\r\n            case \"circle\":\r\n                return this.intersectCircle(this.radius(), pointA, pointB);\r\n        }\r\n        return SVGWidget.prototype.intersection.apply(this, arguments);\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        delete this._prevHash;\r\n    }\r\n\r\n    _prevHash;\r\n    update(_domNode, element) {\r\n        const shape = element.selectAll(\"rect,circle,ellipse,path\").data([this.shape()], function (d) { return d; });\r\n        const hash = this.hashSum();\r\n        if (this._prevHash !== hash) {\r\n            this._prevHash = hash;\r\n\r\n            const context = this;\r\n            shape.enter().append(this.getShapeElementTag(this.shape()))\r\n                .attr(\"class\", \"common_Shape\")\r\n                .each(function () {\r\n                    const element2 = d3Select(this);\r\n                    context._tooltipElement = element2.append(\"title\");\r\n                })\r\n                .on(\"click\", () => {\r\n                    this.click();\r\n                })\r\n                .on(\"dblclick\", () => {\r\n                    this.dblclick();\r\n                })\r\n                .merge(shape)\r\n                .style(\"fill\", this.colorFill())\r\n                .style(\"stroke\", this.colorStroke())\r\n                .each(function () {\r\n                    const element2 = d3Select(this);\r\n                    context._tooltipElement.text(context.tooltip());\r\n                    switch (context.shape()) {\r\n                        case \"circle\":\r\n                            const radius = context.radius();\r\n                            element2\r\n                                .attr(\"r\", radius)\r\n                                ;\r\n                            break;\r\n                        case \"square\":\r\n                            const width = Math.max(context.width(), context.height());\r\n                            element2\r\n                                .attr(\"x\", -width / 2)\r\n                                .attr(\"y\", -width / 2)\r\n                                .attr(\"rx\", context.cornerRadius())\r\n                                .attr(\"ry\", context.cornerRadius())\r\n                                .attr(\"width\", width)\r\n                                .attr(\"height\", width)\r\n                                ;\r\n                            break;\r\n                        case \"rect\":\r\n                            element2\r\n                                .attr(\"x\", -context.width() / 2)\r\n                                .attr(\"y\", -context.height() / 2)\r\n                                .attr(\"rx\", context.cornerRadius())\r\n                                .attr(\"ry\", context.cornerRadius())\r\n                                .attr(\"width\", context.width())\r\n                                .attr(\"height\", context.height())\r\n                                ;\r\n                            break;\r\n                        case \"ellipse\":\r\n                            element2\r\n                                .attr(\"rx\", context.width() / 2)\r\n                                .attr(\"ry\", context.height() / 2)\r\n                                ;\r\n                            break;\r\n                        case \"pin\":\r\n                            element2\r\n                                .attr(\"d\", context.pinPath())\r\n                                ;\r\n                            break;\r\n                    }\r\n                })\r\n                ;\r\n            shape.exit().remove();\r\n        }\r\n    }\r\n    getShapeElementTag(_shape) {\r\n        switch (_shape) {\r\n            case \"square\":\r\n                return \"rect\";\r\n            case \"pin\":\r\n                return \"path\";\r\n        }\r\n        return _shape;\r\n    }\r\n    pinPath() {\r\n        const radius = this.cornerRadius();\r\n        const arrow_h = this.arrowHeight();\r\n        const arrow_w = this.arrowWidth();\r\n        const width = this.width();\r\n        const height = this.height() - arrow_h;\r\n        const x = 0 - width / 2;\r\n        const y = 0 - height;\r\n        const arrow_b = (width - radius * 2 - arrow_w) / 2;\r\n        return \"M\" + x + \",\" + y +\r\n            \"a\" + -radius + \",\" + -radius + \" 0 0 1 \" + radius + \",\" + -radius +\r\n            \"h\" + (width + -radius * 2) +\r\n            \"a\" + radius + \",\" + radius + \" 0 0 1 \" + radius + \",\" + radius +\r\n            \"v\" + (height + -radius * 2) +\r\n            \"a\" + radius + \",\" + radius + \" 0 0 1 \" + -radius + \",\" + radius +\r\n            \"h\" + -arrow_b +\r\n            \"l\" + -arrow_w / 2 + \",\" + arrow_h +\r\n            \"l\" + -arrow_w / 2 + \",\" + -arrow_h +\r\n            \"h\" + -arrow_b +\r\n            \"a\" + -radius + \",\" + -radius + \" 0 0 1 \" + -radius + \",\" + -radius +\r\n            \"z\";\r\n    }\r\n\r\n    click() {\r\n    }\r\n\r\n    dblclick() {\r\n    }\r\n\r\n}\r\nShape.prototype._class += \" common_Shape\";\r\n\r\nexport interface Shape {\r\n    shape(): string;\r\n    shape(_: string): this;\r\n    colorStroke(): string;\r\n    colorStroke(_: string): this;\r\n    colorFill(): string;\r\n    colorFill(_: string): this;\r\n    colorFill_exists(): boolean;\r\n    radius(): number;\r\n    radius(_: number): this;\r\n    cornerRadius(): number;\r\n    cornerRadius(_: number): this;\r\n    arrowHeight(): number;\r\n    arrowHeight(_: number): this;\r\n    arrowWidth(): number;\r\n    arrowWidth(_: number): this;\r\n    tooltip(): string;\r\n    tooltip(_: string): this;\r\n}\r\n\r\nShape.prototype.publish(\"shape\", \"circle\", \"set\", \"Shape Type\", [\"circle\", \"square\", \"rect\", \"ellipse\", \"pin\"], { tags: [\"Private\"] });\r\nShape.prototype.publish(\"width\", 24, \"number\", \"Width\", null, { tags: [\"Private\"] });\r\nShape.prototype.publish(\"height\", 24, \"number\", \"Height\", null, { tags: [\"Private\"] });\r\nShape.prototype.publish(\"colorStroke\", null, \"html-color\", \"Stroke Color\", null, { optional: true });\r\nShape.prototype.publish(\"colorFill\", null, \"html-color\", \"Fill Color\", null, { optional: true });\r\nShape.prototype.publish(\"radius\", null, \"number\", \"Radius\", null, { tags: [\"Private\"] });\r\nShape.prototype.publish(\"cornerRadius\", 3, \"number\", \"cornerRadius\");\r\nShape.prototype.publish(\"arrowHeight\", 5, \"number\", \"arrowHeight\");\r\nShape.prototype.publish(\"arrowWidth\", 10, \"number\", \"arrowWidth\");\r\nShape.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\r\n\r\nconst _origRadius = Shape.prototype.radius;\r\nShape.prototype.radius = function (_?) {\r\n    const retVal = _origRadius.apply(this, arguments);\r\n    if (arguments.length) {\r\n        this.width(_);\r\n        this.height(_);\r\n        return retVal;\r\n    }\r\n    return Math.max(this.width(), this.height()) / 2;\r\n};\r\n","import { FAChar } from \"./FAChar.ts\";\r\nimport { textColor } from \"./Palette.ts\";\r\nimport { Shape } from \"./Shape.ts\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\n\r\nimport \"../src/Icon.css\";\r\n\r\nexport class Icon extends SVGWidget {\r\n\r\n    protected _shapeWidget;\r\n    protected _faChar;\r\n    protected _defs;\r\n    protected _root;\r\n    protected _tooltipElement;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._shapeWidget = new Shape();\r\n        this._faChar = new FAChar();\r\n    }\r\n\r\n    getBBox(refresh = false, round = false) {\r\n        const diameter = this.diameter();\r\n        return {\r\n            x: - diameter / 2,\r\n            y: - diameter / 2,\r\n            width: diameter,\r\n            height: diameter\r\n        };\r\n    }\r\n\r\n    contains(point) {\r\n        return this._shapeWidget.contains(point);\r\n    }\r\n\r\n    intersection(pointA, pointB) {\r\n        return this._shapeWidget.intersection(pointA, pointB);\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        delete this._prevHash;\r\n        this._defs = element.append(\"defs\");\r\n        this._defs.append(\"clipPath\")\r\n            .attr(\"id\", \"clip_\" + this.id() + \"_circle\")\r\n            .append(\"circle\")\r\n            .attr(\"x\", 0)\r\n            .attr(\"y\", 0)\r\n            ;\r\n        this._defs.append(\"clipPath\")\r\n            .attr(\"id\", \"clip_\" + this.id() + \"_square\")\r\n            .append(\"rect\")\r\n            ;\r\n        this._root = element.append(\"g\");\r\n        this._shapeWidget\r\n            .target(this._root.node())\r\n            ;\r\n        this._faChar\r\n            .target(element.node())\r\n            ;\r\n        this._tooltipElement = element.append(\"title\");\r\n        const context = this;\r\n        element\r\n            .on(\"click\", function (el) {\r\n                context.click(el);\r\n            })\r\n            .on(\"dblclick\", function (el) {\r\n                context.dblclick(el);\r\n            })\r\n            ;\r\n    }\r\n\r\n    click(_domNode) {\r\n        // console.log(\"Clicked the icon\");\r\n    }\r\n\r\n    dblclick(_domNode) {\r\n        // console.log(\"Double clicked the icon\");\r\n    }\r\n\r\n    _prevHash;\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const hash = this.hashSum();\r\n        if (this._prevHash !== hash) {\r\n            this._prevHash = hash;\r\n\r\n            const diameter = this.diameter();\r\n            const radius = diameter / 2;\r\n            this._defs.select(\"circle\")\r\n                .attr(\"r\", radius)\r\n                ;\r\n            this._defs.select(\"rect\")\r\n                .attr(\"x\", -radius)\r\n                .attr(\"y\", -radius)\r\n                .attr(\"width\", diameter)\r\n                .attr(\"height\", diameter)\r\n                ;\r\n            this._faChar\r\n                .fontSize(diameter * (100 - this.paddingPercent()) / 100)\r\n                .render()\r\n                ;\r\n            this._shapeWidget\r\n                .shape(this.shape())\r\n                .width(diameter)\r\n                .height(diameter)\r\n                .render()\r\n                ;\r\n            const image = this._root.selectAll(\"image\").data(this.imageUrl() ? [this.imageUrl()] : [], function (d) { return d; });\r\n            image.enter()\r\n                .append(\"image\")\r\n                .attr(\"xlink:href\", this.imageUrl())\r\n                .merge(image)\r\n                .attr(\"clip-path\", \"url(#clip_\" + this.id() + \"_\" + this.shape() + \")\")\r\n                .attr(\"x\", -radius)\r\n                .attr(\"y\", -radius)\r\n                .attr(\"width\", diameter)\r\n                .attr(\"height\", diameter)\r\n                ;\r\n            if (this.shape_colorFill_exists() && !this.image_colorFill_exists()) {\r\n                this.image_colorFill(textColor(this.shape_colorFill()));\r\n            }\r\n            image.exit()\r\n                .remove()\r\n                ;\r\n            this._tooltipElement.text(this.tooltip());\r\n        }\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        super.exit(domNode, element);\r\n        this._shapeWidget\r\n            .target(null)\r\n            ;\r\n        this._faChar\r\n            .target(null)\r\n            ;\r\n    }\r\n\r\n}\r\nIcon.prototype._class += \" common_Icon\";\r\n\r\nexport interface Icon {\r\n    shape(): string;\r\n    shape(_: string): this;\r\n    faChar(): string;\r\n    faChar(_: string): this;\r\n    imageUrl(): string;\r\n    imageUrl(_: string): this;\r\n    image_colorFill(): string;\r\n    image_colorFill(_: string): this;\r\n    image_colorFill_exists(): boolean;\r\n    tooltip(): string;\r\n    tooltip(_: string): this;\r\n    diameter(): number;\r\n    diameter(_: number): this;\r\n    paddingPercent(): number;\r\n    paddingPercent(_: number): this;\r\n    shape_colorFill(): string;\r\n    shape_colorFill(_: string): this;\r\n    shape_colorFill_exists(): boolean;\r\n    shape_colorStroke(): string;\r\n    shape_colorStroke(_: string): this;\r\n}\r\n\r\nIcon.prototype.publish(\"shape\", \"circle\", \"set\", \"Shape Type\", [\"circle\", \"square\"], { tags: [\"Private\"] });\r\nIcon.prototype.publishProxy(\"faChar\", \"_faChar\", \"char\");\r\nIcon.prototype.publishProxy(\"fontFamily\", \"_faChar\", \"text_fontFamily\");\r\nIcon.prototype.publish(\"imageUrl\", null, \"string\", \"Image URL\", null, { optional: true });\r\nIcon.prototype.publishProxy(\"image_colorFill\", \"_faChar\", \"text_colorFill\");\r\nIcon.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\r\nIcon.prototype.publish(\"diameter\", 24, \"number\", \"Diameter\", null, { tags: [\"Private\"] });\r\nIcon.prototype.publish(\"paddingPercent\", 45, \"number\", \"Padding Percent\", null, { tags: [\"Private\"] });\r\nIcon.prototype.publishProxy(\"shape_colorFill\", \"_shapeWidget\", \"colorFill\");\r\nIcon.prototype.publishProxy(\"shape_colorStroke\", \"_shapeWidget\", \"colorStroke\");\r\n","import { local as d3Local } from \"d3-selection\";\r\nimport { Icon } from \"./Icon.ts\";\r\nimport { Shape } from \"./Shape.ts\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\nimport { Text } from \"./Text.ts\";\r\nimport { BBox, Widget } from \"./Widget.ts\";\r\n\r\nexport interface IAnnotation {\r\n    faChar: string;\r\n    tooltip?: string;\r\n    shape_colorFill?: string;\r\n    shape_colorStroke?: string;\r\n    image_colorFill?: string;\r\n    shape?: string;\r\n}\r\n\r\nexport class Entity extends SVGWidget {\r\n    protected _icon_widget: Icon;\r\n    protected _background_widget: Shape;\r\n    protected _title_widget: Text;\r\n    protected _desc_widget: Text;\r\n    protected _annotation_widgets: { [idx: number]: { widget: SVGWidget, bbox: BBox } };\r\n    protected _element_anno;\r\n    protected _element_background;\r\n    protected _element_desc;\r\n    protected _element_icon;\r\n    protected _element_title;\r\n\r\n    private _annotationLocal = d3Local<Icon>();\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._background_widget = new Shape();\r\n        this._icon_widget = new Icon();\r\n        this._title_widget = new Text();\r\n        this._desc_widget = new Text();\r\n        this._annotation_widgets = {};\r\n    }\r\n    getAnnotationsBBox(): BBox {\r\n        let retVal: BBox;\r\n        for (const key in this._annotation_widgets) {\r\n            const bbox = this._annotation_widgets[key].bbox;\r\n            if (!retVal) {\r\n                retVal = bbox;\r\n            } else {\r\n                retVal.x = Math.min(retVal.x, bbox.x);\r\n                retVal.y = Math.min(retVal.y, bbox.y);\r\n                retVal.width = Math.max(retVal.width, bbox.width);\r\n                retVal.height = Math.max(retVal.height, bbox.height);\r\n            }\r\n        }\r\n        return retVal || { x: 0, y: 0, width: 0, height: 0 };\r\n    }\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        element\r\n            .on(\"mouseover\", () => {\r\n                element.classed(\"hovering\", true);\r\n                this.render();\r\n            })\r\n            .on(\"mouseout\", () => {\r\n                element.classed(\"hovering\", false);\r\n                this.render();\r\n            })\r\n            ;\r\n\r\n        this._element_background = element.append(\"g\").attr(\"class\", \"entity_shape\");\r\n        this._element_icon = element.append(\"g\").attr(\"class\", \"entity_icon\");\r\n        this._element_title = element.append(\"g\").attr(\"class\", \"entity_title\");\r\n        this._element_desc = element.append(\"g\").attr(\"class\", \"entity_desc\");\r\n        this._element_anno = element.append(\"g\").attr(\"class\", \"entity_anno\");\r\n\r\n        this._background_widget\r\n            .target(this._element_background.node());\r\n        this._icon_widget\r\n            .shape_colorFill(\"none\")\r\n            .shape_colorStroke(\"none\")\r\n            .target(this._element_icon.node());\r\n        this._title_widget\r\n            .target(this._element_title.node());\r\n        this._desc_widget\r\n            .target(this._element_desc.node());\r\n    }\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        this._desc_widget\r\n            .fontSize(this.descriptionFontSize());\r\n        const context = this;\r\n        this._annotation_widgets = {};\r\n        let annoXPos = 0;\r\n        const annotations = this._element_anno.selectAll(\".annotation\").data([...this.annotationIcons()].reverse());\r\n        annotations.enter().append(\"g\")\r\n            .attr(\"class\", \"annotation\")\r\n            .each(function (this: SVGGElement, d, idx) {\r\n                const anno = new Icon()\r\n                    .diameter(context.annotationDiameter())\r\n                    .paddingPercent(context.annotationPaddingPercent())\r\n                    .target(this)\r\n                    .shape(\"square\")\r\n                    ;\r\n                context._annotationLocal.set(this, anno);\r\n            })\r\n            .merge(annotations)\r\n            .each(function (this: SVGGElement, d, idx) {\r\n                const anno = context._annotationLocal.get(this);\r\n                if (typeof d.faChar !== \"undefined\") anno.faChar(d.faChar);\r\n                if (typeof d.shape !== \"undefined\") anno.shape(d.shape);\r\n                if (typeof d.image_colorFill !== \"undefined\") anno.image_colorFill(d.image_colorFill);\r\n                if (typeof d.shape_colorFill !== \"undefined\") anno.shape_colorFill(d.shape_colorFill);\r\n                if (typeof d.shape_colorStroke !== \"undefined\") anno.shape_colorStroke(d.shape_colorStroke);\r\n                const annoDiam = anno.diameter();\r\n                anno\r\n                    .x(annoXPos - annoDiam)\r\n                    .y(annoDiam / 2)\r\n                    .render()\r\n                    ;\r\n                annoXPos -= annoDiam + context.annotationSpacing();\r\n                context._annotation_widgets[idx] = {\r\n                    widget: anno,\r\n                    bbox: anno.getBBox(true)\r\n                };\r\n            });\r\n        annotations.exit()\r\n            .each(function (this: HTMLElement, d, idx) {\r\n                const anno = context._annotationLocal.get(this);\r\n                anno.target(null);\r\n            })\r\n            .remove();\r\n    }\r\n    exit(domNode, element) {\r\n        this._desc_widget.target(null);\r\n        this._title_widget.target(null);\r\n        this._icon_widget.target(null);\r\n        this._background_widget.target(null);\r\n        super.exit(domNode, element);\r\n    }\r\n    moveAnnotations(x_offset: number, y_offset: number) {\r\n        this._element_anno.attr(\"transform\", `translate(${x_offset}, ${y_offset})`);\r\n    }\r\n    render(callback?: (w: Widget) => void) {\r\n        return super.render(w => {\r\n            this._background_widget.render();\r\n            this._icon_widget.render();\r\n            this._title_widget.render();\r\n            this._desc_widget.render();\r\n            if (callback) {\r\n                callback(w);\r\n            }\r\n        });\r\n    }\r\n}\r\nEntity.prototype._class += \" common_Entity\";\r\n\r\nexport interface Entity {\r\n    arrowHeight(): number;\r\n    arrowHeight(_: number): this;\r\n    arrowWidth(): number;\r\n    arrowWidth(_: number): this;\r\n    cornerRadius(): number;\r\n    cornerRadius(_: number): this;\r\n    padding(): number;\r\n    padding(_: number): this;\r\n    paddingPercent(): number;\r\n    paddingPercent(_: number): this;\r\n\r\n    annotationIcons(): IAnnotation[];\r\n    annotationIcons(_: IAnnotation[]): this;\r\n    annotationDiameter(): number;\r\n    annotationDiameter(_: number): this;\r\n    annotationSpacing(): number;\r\n    annotationSpacing(_: number): this;\r\n    annotationPaddingPercent(): number;\r\n    annotationPaddingPercent(_: number): this;\r\n    icon(): string;\r\n    icon(_: string): this;\r\n    iconColor(): string;\r\n    iconColor(_: string): this;\r\n    iconDiameter(): number;\r\n    iconDiameter(_: number): this;\r\n    iconPaddingPercent(): number;\r\n    iconPaddingPercent(_: number): this;\r\n    description(): string;\r\n    description(_: string): this;\r\n    descriptionColor(): string;\r\n    descriptionColor(_: string): this;\r\n    descriptionFontFamily(): string;\r\n    descriptionFontFamily(_: string): this;\r\n    descriptionFontSize(): number;\r\n    descriptionFontSize(_: number): this;\r\n    title(): string;\r\n    title(_: string): this;\r\n    titleColor(): string;\r\n    titleColor(_: string): this;\r\n    titleFontFamily(): string;\r\n    titleFontFamily(_: string): this;\r\n    titleFontSize(): number;\r\n    titleFontSize(_: number): this;\r\n    backgroundShape(): string;\r\n    backgroundShape(_: string): this;\r\n    backgroundColorFill(): string;\r\n    backgroundColorFill(_: string): this;\r\n    backgroundColorStroke(): string;\r\n    backgroundColorStroke(_: string): this;\r\n}\r\n\r\nEntity.prototype.publish(\"padding\", 8, \"number\", \"padding\");\r\n\r\nEntity.prototype.publish(\"annotationPaddingPercent\", 38, \"number\", \"annotationPaddingPercent\");\r\nEntity.prototype.publish(\"annotationDiameter\", 14, \"number\", \"Annotation Diameter\");\r\nEntity.prototype.publish(\"annotationIcons\", [], \"array\", \"annotationIcons\"); // TODO: is this really used?\r\nEntity.prototype.publish(\"annotationSpacing\", 3, \"number\", \"annotationSpacing\");\r\n\r\nEntity.prototype.publishProxy(\"icon\", \"_icon_widget\", \"faChar\");\r\nEntity.prototype.publishProxy(\"iconColor\", \"_icon_widget\", \"image_colorFill\");\r\nEntity.prototype.publishProxy(\"iconDiameter\", \"_icon_widget\", \"diameter\");\r\nEntity.prototype.publishProxy(\"iconPaddingPercent\", \"_icon_widget\", \"paddingPercent\");\r\n\r\nEntity.prototype.publishProxy(\"title\", \"_title_widget\", \"text\");\r\nEntity.prototype.publishProxy(\"titleColor\", \"_title_widget\", \"colorFill\");\r\nEntity.prototype.publishProxy(\"titleFontFamily\", \"_title_widget\", \"fontFamily\");\r\nEntity.prototype.publishProxy(\"titleFontSize\", \"_title_widget\", \"fontSize\");\r\n\r\nEntity.prototype.publishProxy(\"description\", \"_desc_widget\", \"text\");\r\nEntity.prototype.publishProxy(\"descriptionColor\", \"_desc_widget\", \"colorFill\");\r\nEntity.prototype.publishProxy(\"descriptionFontFamily\", \"_desc_widget\", \"fontFamily\");\r\nEntity.prototype.publishProxy(\"descriptionFontSize\", \"_desc_widget\", \"fontSize\");\r\n\r\nEntity.prototype.publishProxy(\"backgroundShape\", \"_background_widget\", \"shape\");\r\nEntity.prototype.publishProxy(\"backgroundColorFill\", \"_background_widget\", \"colorFill\");\r\nEntity.prototype.publishProxy(\"backgroundColorStroke\", \"_background_widget\", \"colorStroke\");\r\n\r\nEntity.prototype.publishProxy(\"cornerRadius\", \"_background_widget\");\r\nEntity.prototype.publishProxy(\"arrowHeight\", \"_background_widget\");\r\nEntity.prototype.publishProxy(\"arrowWidth\", \"_background_widget\");\r\n","import { Entity } from \"./Entity.ts\";\r\n\r\nexport class EntityCard extends Entity {\r\n    protected _element_textbox;\r\n    constructor() {\r\n        super();\r\n    }\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n    }\r\n    update() {\r\n        super.update.apply(this, arguments);\r\n\r\n        this._icon_widget.render();\r\n        this._title_widget.render();\r\n        this._desc_widget.render();\r\n        const icon_bbox = this._icon_widget.getBBox(true);\r\n        const title_bbox = this._title_widget.getBBox(true);\r\n        const desc_bbox = this._desc_widget.getBBox(true);\r\n\r\n        let anno_w = 0;\r\n        let anno_h = 0;\r\n        const anno_gap = this.annotationSpacing();\r\n        for (const i of Object.keys(this._annotation_widgets)) {\r\n            anno_w += this._annotation_widgets[i].bbox.width + anno_gap;\r\n            anno_h = anno_h > this._annotation_widgets[i].bbox.height ? anno_h : this._annotation_widgets[i].bbox.height;\r\n        }\r\n\r\n        const _background_h = this.fixedHeight() !== null ? this.fixedHeight() : Math.max(\r\n            title_bbox.height + desc_bbox.height + (this.padding() * 3),\r\n            anno_h + icon_bbox.height + (this.padding() * 3)\r\n        );\r\n        const _background_w = this.fixedWidth() !== null ? this.fixedWidth() : Math.max(\r\n            title_bbox.width + icon_bbox.width + (this.padding() * 3),\r\n            anno_w + desc_bbox.width + (this.padding() * 3)\r\n        );\r\n        this._background_widget\r\n            .height(_background_h)\r\n            .width(_background_w);\r\n\r\n        this._title_widget.move({\r\n            x: -(_background_w / 2) + (title_bbox.width / 2) + this.padding(),\r\n            y: -(_background_h / 2) + (title_bbox.height / 2) + this.padding()\r\n        });\r\n        this._icon_widget.move({\r\n            x: (_background_w / 2) - (icon_bbox.width / 2) - this.padding(),\r\n            y: -(_background_h / 2) + (icon_bbox.height / 2) + this.padding()\r\n        });\r\n        this._desc_widget.move({\r\n            x: -(_background_w / 2) + (desc_bbox.width / 2) + this.padding(),\r\n            y: (_background_h / 2) - (desc_bbox.height / 2) - this.padding()\r\n        });\r\n        this.moveAnnotations((_background_w / 2), (_background_h / 2) - anno_h - this.padding());\r\n    }\r\n}\r\nEntityCard.prototype._class += \" common_EntityCard\";\r\n\r\nexport interface EntityCard {\r\n    fixedWidth(): number;\r\n    fixedWidth(_: number): this;\r\n    fixedHeight(): number;\r\n    fixedHeight(_: number): this;\r\n}\r\n\r\nEntityCard.prototype.publish(\"fixedWidth\", null, \"number\", \"fixedWidth\");\r\nEntityCard.prototype.publish(\"fixedHeight\", null, \"number\", \"fixedHeight\");\r\n","import { Entity } from \"./Entity.ts\";\r\n\r\nexport class EntityPin extends Entity {\r\n    protected _element_textbox;\r\n    constructor() {\r\n        super();\r\n    }\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n    }\r\n    update(domNode, element) {\r\n        super.update.apply(this, arguments);\r\n\r\n        const is_hovering = element.classed(\"hovering\");\r\n\r\n        this._icon_widget.render();\r\n        this._desc_widget.render();\r\n        this._title_widget.render();\r\n        const title_bbox = !this.titleOnlyShowOnHover() || is_hovering ? this._title_widget.getBBox(true) : { height: 0, width: 0 };\r\n        const icon_bbox = !this.iconOnlyShowOnHover() || is_hovering ? this._icon_widget.getBBox(true) : { height: 0, width: 0 };\r\n        const desc_bbox = !this.descriptionOnlyShowOnHover() || is_hovering ? this._desc_widget.getBBox(true) : { height: 0, width: 0 };\r\n        const _anno_h = !this.annotationOnlyShowOnHover() || is_hovering ? this.annotationIcons().length > 0 ? this.annotationDiameter() + this.padding() : 0 : 0;\r\n        const background_bbox = this.calcBackgroundBBox(is_hovering, title_bbox, icon_bbox, desc_bbox, _anno_h);\r\n\r\n        this._title_widget.display(!this.titleOnlyShowOnHover() || is_hovering);\r\n        this._icon_widget.display(!this.iconOnlyShowOnHover() || is_hovering);\r\n        this._desc_widget.display(!this.descriptionOnlyShowOnHover() || is_hovering);\r\n\r\n        this._background_widget\r\n            .height(background_bbox.height)\r\n            .width(background_bbox.width);\r\n        const icon_y = -background_bbox.height + icon_bbox.height + (this.padding() / 2);\r\n        const title_y = icon_y + (icon_bbox.height / 2) + (title_bbox.height / 2) + this.padding();\r\n        const desc_y = title_y + (title_bbox.height / 2) + (desc_bbox.height / 2) + this.padding();\r\n        const anno_y = desc_y + (desc_bbox.height / 2) + this.padding();\r\n        this._title_widget.move({\r\n            x: 0,\r\n            y: title_y\r\n        });\r\n        this._desc_widget.move({\r\n            x: 0,\r\n            y: desc_y\r\n        });\r\n        this._icon_widget.move({\r\n            x: 0,\r\n            y: icon_y\r\n        });\r\n        this.moveAnnotations(background_bbox.width / 2, anno_y);\r\n\r\n    }\r\n    calcHeight() {\r\n        const is_hovering = true;\r\n        this._icon_widget.render();\r\n        this._desc_widget.render();\r\n        this._title_widget.render();\r\n        const title_bbox = !this.titleOnlyShowOnHover() || is_hovering ? this._title_widget.getBBox(true) : { height: 0, width: 0 };\r\n        const icon_bbox = !this.iconOnlyShowOnHover() || is_hovering ? this._icon_widget.getBBox(true) : { height: 0, width: 0 };\r\n        const desc_bbox = !this.descriptionOnlyShowOnHover() || is_hovering ? this._desc_widget.getBBox(true) : { height: 0, width: 0 };\r\n        const _anno_h = !this.annotationOnlyShowOnHover() || is_hovering ? this.annotationIcons().length > 0 ? this.annotationDiameter() + this.padding() : 0 : 0;\r\n        const background_bbox = this.calcBackgroundBBox(is_hovering, title_bbox, icon_bbox, desc_bbox, _anno_h);\r\n\r\n        return background_bbox.height;\r\n    }\r\n    calcBackgroundBBox(is_hovering, title_bbox, icon_bbox, desc_bbox, _anno_h) {\r\n        const content_width = Math.max(title_bbox.width, icon_bbox.width, desc_bbox.width);\r\n        const background_bbox = {\r\n            width: content_width + (this.padding() * 2),\r\n            height: icon_bbox.height + title_bbox.height + _anno_h + this.arrowHeight() + desc_bbox.height + (this.padding() * 5)\r\n        };\r\n        let remove_padding = 0;\r\n        if (this.titleOnlyShowOnHover() && !is_hovering) {\r\n            remove_padding += this.padding();\r\n        }\r\n        if (this.iconOnlyShowOnHover() && !is_hovering) {\r\n            remove_padding += this.padding();\r\n        }\r\n        if (this.descriptionOnlyShowOnHover() && !is_hovering) {\r\n            remove_padding += this.padding();\r\n        }\r\n        if (this.annotationIcons().length === 0 || this.annotationOnlyShowOnHover() && !is_hovering) {\r\n            remove_padding += this.padding();\r\n        }\r\n        background_bbox.height -= remove_padding;\r\n        return background_bbox;\r\n    }\r\n}\r\nEntityPin.prototype._class += \" common_EntityPin\";\r\n\r\nexport interface EntityPin {\r\n    titleOnlyShowOnHover(): boolean;\r\n    titleOnlyShowOnHover(_: boolean): this;\r\n    iconOnlyShowOnHover(): boolean;\r\n    iconOnlyShowOnHover(_: boolean): this;\r\n    descriptionOnlyShowOnHover(): boolean;\r\n    descriptionOnlyShowOnHover(_: boolean): this;\r\n    annotationOnlyShowOnHover(): boolean;\r\n    annotationOnlyShowOnHover(_: boolean): this;\r\n}\r\n\r\nEntityPin.prototype.publish(\"titleOnlyShowOnHover\", false, \"boolean\", \"titleOnlyShowOnHover\");\r\nEntityPin.prototype.publish(\"iconOnlyShowOnHover\", false, \"boolean\", \"iconOnlyShowOnHover\");\r\nEntityPin.prototype.publish(\"descriptionOnlyShowOnHover\", false, \"boolean\", \"descriptionOnlyShowOnHover\");\r\nEntityPin.prototype.publish(\"annotationOnlyShowOnHover\", false, \"boolean\", \"annotationOnlyShowOnHover\");\r\n","import { local as d3Local, select as d3Select } from \"d3-selection\";\r\nimport { Entity } from \"./Entity.ts\";\r\nimport { HTMLWidget } from \"./HTMLWidget.ts\";\r\nimport * as Utility from \"./Utility.ts\";\r\nimport { InputField } from \"./Widget.ts\";\r\n\r\nimport \"../src/EntityRect.css\";\r\n\r\nexport class EntityRect extends Entity {\r\n    protected _element_textbox;\r\n    constructor() {\r\n        super();\r\n    }\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n    }\r\n    update(domNode, element) {\r\n        this._desc_widget.text(\"\");\r\n        super.update(domNode, element);\r\n    }\r\n    render(callback?: (w: EntityRect) => void) {\r\n        return super.render((w: EntityRect) => {\r\n            const icon_bbox = w.icon() === \"\" ? { width: 0, height: 0 } : this._icon_widget.getBBox(true);\r\n            const title_bbox = this._title_widget.getBBox(true);\r\n            const annotations_bbox = this.getAnnotationsBBox();\r\n\r\n            let width = this.fixedWidth();\r\n            if (!width) {\r\n                width = icon_bbox.width + title_bbox.width + annotations_bbox.width + this.padding() * 4;\r\n            }\r\n\r\n            let height = this.fixedHeight();\r\n            if (!height) {\r\n                height = Math.max(icon_bbox.height, title_bbox.height, annotations_bbox.height) + this.padding() * 2;\r\n            }\r\n\r\n            this._background_widget\r\n                .width(width)\r\n                .height(height)\r\n                .render()\r\n                ;\r\n\r\n            this._icon_widget.move({\r\n                x: -(width / 2) + (icon_bbox.width),\r\n                y: 0\r\n            });\r\n\r\n            this.moveAnnotations(width / 2, -annotations_bbox.height / 2);\r\n            const iconWidth = icon_bbox.width > 0 ? icon_bbox.width + this.padding() : 0;\r\n            const titleX = -(width / 2) + iconWidth + this.padding();\r\n            const annoWidth = this.padding() / 2 + annotations_bbox.width + this.padding();\r\n            const titleW = width - iconWidth - annoWidth;\r\n\r\n            this._title_widget\r\n                .move({\r\n                    x: titleX,\r\n                    y: 0\r\n                })\r\n                .anchor(\"start\")\r\n                .width(titleW)\r\n                .render()\r\n                ;\r\n\r\n            if (callback) {\r\n                callback(w);\r\n            }\r\n        });\r\n    }\r\n}\r\nEntityRect.prototype._class += \" common_EntityRect\";\r\n\r\nexport interface EntityRect {\r\n    fixedWidth(): number;\r\n    fixedWidth(_: number): this;\r\n    fixedHeight(): number;\r\n    fixedHeight(_: number): this;\r\n}\r\n\r\nEntityRect.prototype.publish(\"fixedWidth\", null, \"number\", \"fixedWidth\");\r\nEntityRect.prototype.publish(\"fixedHeight\", null, \"number\", \"fixedHeight\");\r\n\r\nexport class EntityRectList extends HTMLWidget {\r\n    static __inputs: InputField[] = [{\r\n        id: \"borderColor\",\r\n        type: \"string\"\r\n    }, {\r\n        id: \"icon\",\r\n        type: \"string\"\r\n    }, {\r\n        id: \"iconColor\",\r\n        type: \"string\"\r\n    }, {\r\n        id: \"title\",\r\n        type: \"string\"\r\n    }];\r\n\r\n    private _enityRectLocal = d3Local<EntityRect>();\r\n\r\n    constructor() {\r\n        super();\r\n        Utility.SimpleSelectionMixin.call(this, true);\r\n    }\r\n\r\n    entityRectData() {\r\n        const columns = this.columns();\r\n        const idxColumns = [\r\n            \"backgroundColor\",\r\n            \"borderColor\",\r\n            \"icon\",\r\n            \"iconColor\",\r\n            \"title\",\r\n            \"titleColor\",\r\n            \"description\",\r\n            \"descriptionColor\"\r\n        ];\r\n        const idxs = idxColumns.map(idxColumn => columns.indexOf(this[`${idxColumn}Column`]()));\r\n        return this.data().map(row => {\r\n            const retVal = {\r\n                origRow: row\r\n            };\r\n            for (let i = 0; i < idxColumns.length; ++i) {\r\n                retVal[idxColumns[i]] = idxs[i] >= 0 ? row[idxs[i]] : typeof this[`${idxColumns[i]}`] === \"function\" ? this[`${idxColumns[i]}`]() : \"\";\r\n            }\r\n            return retVal;\r\n        }, this);\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        d3Select(domNode.parentNode)\r\n            .style(\"overflow-x\", \"hidden\")\r\n            .style(\"overflow-y\", \"scroll\")\r\n            ;\r\n        this._selection.widgetElement(element);\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const context = this;\r\n\r\n        const margin = { left: 8, top: 8, right: 8, bottom: 8 };\r\n        const width = this.width() - margin.left - margin.right - 20; //  -20 for VScroll (could do better)\r\n        const height = this.fixedHeight() - margin.top - margin.bottom;\r\n\r\n        const svg = element.selectAll(\"svg\").data(this.entityRectData());\r\n        svg.enter().append(\"svg\")\r\n            .attr(\"class\", \"entityRectItem\")\r\n            .call(this._selection.enter.bind(this._selection))\r\n            .on(\"click\", function (d) {\r\n                context.click(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\r\n            })\r\n            .on(\"dblclick\", function (d) {\r\n                context.dblclick(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\r\n            })\r\n            .each(function () {\r\n                const entityRect = new EntityRect()\r\n                    .target(this)\r\n                    ;\r\n                context._enityRectLocal.set(this, entityRect);\r\n            })\r\n            .merge(svg)\r\n            .style(\"border-color\", d => d.borderColor)\r\n            .each(function (d) {\r\n                context._enityRectLocal.get(this)\r\n                    .pos({ x: width / 2, y: height / 2 })\r\n                    .resize({ width, height })\r\n                    .fixedWidth(width)\r\n                    .fixedHeight(height)\r\n                    .backgroundShape(\"rect\")\r\n                    .backgroundColorFill(d.backgroundColor)\r\n                    .backgroundColorStroke(\"none\")\r\n                    .icon(d.icon)\r\n                    .iconColor(d.iconColor)\r\n                    .iconDiameter(height / 2.6666)\r\n                    .iconPaddingPercent(0)\r\n                    .title(d.title)\r\n                    .titleFontSize(height / 2.6666)\r\n                    .titleColor(d.titleColor)\r\n                    .description(d.description)\r\n                    .descriptionColor(d.descriptionColor)\r\n                    .render()\r\n                    ;\r\n            })\r\n            ;\r\n        svg.exit().remove();\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    //  Events ---\r\n    click(row, column, selected) {\r\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\r\n    }\r\n\r\n    dblclick(row, column, selected) {\r\n        // console.log(\"Double click:  \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\r\n    }\r\n\r\n    //  SimpleSelectionMixin\r\n    _selection;\r\n}\r\nEntityRectList.prototype._class += \" common_EntityRectList\";\r\n\r\nexport interface EntityRectList {\r\n    fixedHeight(): number;\r\n    fixedHeight(_: number): this;\r\n    backgroundColor(): string;\r\n    backgroundColor(_: string): this;\r\n    backgroundColorColumn(): string;\r\n    backgroundColorColumn(_: string): this;\r\n    borderColor(): string;\r\n    borderColor(_: string): this;\r\n    borderColorColumn(): string;\r\n    borderColorColumn(_: string): this;\r\n    icon(): string;\r\n    icon(_: string): this;\r\n    iconColumn(): string;\r\n    iconColumn(_: string): this;\r\n    iconColor(): string;\r\n    iconColor(_: string): this;\r\n    iconColorColumn(): string;\r\n    iconColorColumn(_: string): this;\r\n    titleColumn(): string;\r\n    titleColumn(_: string): this;\r\n    titleColor(): string;\r\n    titleColor(_: string): this;\r\n    titleColorColumn(): string;\r\n    titleColorColumn(_: string): this;\r\n    descriptionColumn(): string;\r\n    descriptionColumn(_: string): this;\r\n    descriptionColor(): string;\r\n    descriptionColor(_: string): this;\r\n    descriptionColorColumn(): string;\r\n    descriptionColorColumn(_: string): this;\r\n}\r\n\r\nEntityRectList.prototype.publish(\"fixedHeight\", 64, \"number\", \"fixedHeight\");\r\nEntityRectList.prototype.publish(\"backgroundColor\", \"#f8f8f8\", \"string\", \"Default Background Color\", null, { inputType: \"html-color\" });\r\nEntityRectList.prototype.publish(\"backgroundColorColumn\", null, \"set\", \"Background Color Column\", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"borderColor\", \"black\", \"string\", \"Default Border Color\", null, { inputType: \"html-color\" });\r\nEntityRectList.prototype.publish(\"borderColorColumn\", null, \"set\", \"Border Color Column\", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"icon\", \"\", \"string\", \"Icon\");\r\nEntityRectList.prototype.publish(\"iconColumn\", null, \"set\", \"Icon Column\", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"iconColor\", \"red\", \"string\", \"Default Icon Color\", null, { inputType: \"html-color\" });\r\nEntityRectList.prototype.publish(\"iconColorColumn\", null, \"set\", \"Icon Color Column \", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"titleColumn\", null, \"set\", \"Title Column\", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"titleColor\", \"black\", \"string\", \"Default Title Color\", null, { inputType: \"html-color\" });\r\nEntityRectList.prototype.publish(\"titleColorColumn\", null, \"set\", \"Title Color Column \", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"descriptionColumn\", null, \"set\", \"Description Column\", function () { return this.columns(); }, { optional: true });\r\nEntityRectList.prototype.publish(\"descriptionColor\", \"black\", \"string\", \"Default Description Color\", null, { inputType: \"html-color\" });\r\nEntityRectList.prototype.publish(\"descriptionColorColumn\", null, \"set\", \"Description Color Column \", function () { return this.columns(); }, { optional: true });\r\n\r\n","import { textColor } from \"./Palette.ts\";\r\nimport { Shape } from \"./Shape.ts\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\nimport { Text } from \"./Text.ts\";\r\nimport { ISize } from \"./Widget.ts\";\r\n\r\nimport \"../src/TextBox.css\";\r\n\r\nexport class TextBox extends SVGWidget {\r\n\r\n    protected _shape: Shape;\r\n    protected _text: Text;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._shape = new Shape()\r\n            .shape(\"rect\")\r\n            .on(\"click\", () => {\r\n                this.click();\r\n            })\r\n            .on(\"dblclick\", () => {\r\n                this.dblclick();\r\n            })\r\n            ;\r\n        this._text = new Text()\r\n            .on(\"click\", () => {\r\n                this.click();\r\n            })\r\n            .on(\"dblclick\", () => {\r\n                this.dblclick();\r\n            })\r\n            ;\r\n    }\r\n\r\n    padding(_) {\r\n        this.paddingLeft(_);\r\n        this.paddingRight(_);\r\n        this.paddingTop(_);\r\n        this.paddingBottom(_);\r\n        return this;\r\n    }\r\n\r\n    getTextX(width) {\r\n        switch (this.anchor()) {\r\n            case \"start\":\r\n                return -width / 2;\r\n            case \"end\":\r\n                return width / 2;\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    getBBox(refresh = false, round = false) {\r\n        const textBBox = this._text.getBBox(true);\r\n        const width = this.fixedSize() ? this.fixedSize().width : textBBox.width + this.paddingLeft() + this.paddingRight();\r\n        const height = this.fixedSize() ? this.fixedSize().height : textBBox.height + this.paddingTop() + this.paddingBottom();\r\n        return {\r\n            x: -width - 2,\r\n            y: -height - 2,\r\n            width,\r\n            height\r\n        };\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        delete this._prevHash;\r\n        this._shape\r\n            .target(domNode)\r\n            .tooltip(this.tooltip())\r\n            ;\r\n        this._text\r\n            .target(domNode)\r\n            ;\r\n    }\r\n\r\n    _prevHash;\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const hash = this.hashSum();\r\n        if (this._prevHash !== hash) {\r\n            this._prevHash = hash;\r\n\r\n            const textBBox = this._text.getBBox(true);\r\n            const size = {\r\n                width: this.fixedSize() ? this.fixedSize().width : textBBox.width + this.paddingLeft() + this.paddingRight(),\r\n                height: this.fixedSize() ? this.fixedSize().height : textBBox.height + this.paddingTop() + this.paddingBottom()\r\n            };\r\n\r\n            this._shape\r\n                .width(size.width)\r\n                .height(size.height)\r\n                .render()\r\n                ;\r\n\r\n            this._text\r\n                .x(this.getTextX(textBBox.width))\r\n                .colorFill_default(this._shape.colorFill_exists() ? textColor(this._shape.colorFill()) : undefined)\r\n                .render()\r\n                ;\r\n\r\n            if (this.fixedSize()) {\r\n                switch (this.anchor()) {\r\n                    case \"start\":\r\n                        this._text\r\n                            .x(-this.fixedSize().width / 2 + textBBox.width / 2 + (this.paddingLeft() + this.paddingRight()) / 2)\r\n                            .render()\r\n                            ;\r\n                        break;\r\n                    case \"end\":\r\n                        this._text\r\n                            .x(this.fixedSize().width / 2 - textBBox.width / 2 - (this.paddingLeft() + this.paddingRight()) / 2)\r\n                            .render()\r\n                            ;\r\n                        break;\r\n                }\r\n            }\r\n            this._text.visible(textBBox.width <= size.width && textBBox.height <= size.height);\r\n        }\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        this._shape\r\n            .target(null)\r\n            ;\r\n        this._text\r\n            .target(null)\r\n            ;\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    click() {\r\n    }\r\n\r\n    dblclick() {\r\n    }\r\n}\r\nTextBox.prototype._class += \" common_TextBox\";\r\n\r\nexport interface TextBox {\r\n    text(): string;\r\n    text(_: string): this;\r\n    fontSize(): number;\r\n    fontSize(_: number): this;\r\n    shape_colorFill(): string;\r\n    shape_colorFill(_: string): this;\r\n    shape_colorStroke(): string;\r\n    shape_colorStroke(_: string): this;\r\n    text_colorFill(): string;\r\n    text_colorFill(_: string): this;\r\n    text_fontFamily(): string;\r\n    text_fontFamily(_: string): this;\r\n    paddingLeft(): number;\r\n    paddingLeft(_: number): this;\r\n    paddingRight(): number;\r\n    paddingRight(_: number): this;\r\n    paddingTop(): number;\r\n    paddingTop(_: number): this;\r\n    paddingBottom(): number;\r\n    paddingBottom(_: number): this;\r\n    anchor(): \"start\" | \"middle\" | \"end\";\r\n    anchor(_: \"start\" | \"middle\" | \"end\"): this;\r\n    fixedSize(): ISize;\r\n    fixedSize(_: ISize): this;\r\n    tooltip(): string;\r\n    tooltip(_: string): this;\r\n}\r\n\r\nTextBox.prototype.publishProxy(\"text\", \"_text\");\r\nTextBox.prototype.publishProxy(\"fontSize\", \"_text\", \"fontSize\");\r\nTextBox.prototype.publishProxy(\"shape_colorStroke\", \"_shape\", \"colorStroke\");\r\nTextBox.prototype.publishProxy(\"shape_colorFill\", \"_shape\", \"colorFill\");\r\nTextBox.prototype.publishProxy(\"text_colorFill\", \"_text\", \"colorFill\");\r\nTextBox.prototype.publishProxy(\"text_fontFamily\", \"_text\", \"fontFamily\");\r\nTextBox.prototype.publish(\"paddingLeft\", 4, \"number\", \"Left padding (in pixels)\", null, { tags: [\"Private\"] });\r\nTextBox.prototype.publish(\"paddingRight\", 4, \"number\", \"Right padding (in pixels)\", null, { tags: [\"Private\"] });\r\nTextBox.prototype.publish(\"paddingTop\", 4, \"number\", \"Top padding (in pixels)\", null, { tags: [\"Private\"] });\r\nTextBox.prototype.publish(\"paddingBottom\", 4, \"number\", \"Bottom padding (in pixels)\", null, { tags: [\"Private\"] });\r\nTextBox.prototype.publishProxy(\"anchor\", \"_text\");\r\nTextBox.prototype.publish(\"fixedSize\", null);\r\n\r\nTextBox.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\", null, { tags: [\"Private\"] });\r\n","import { Entity } from \"./Entity.ts\";\r\nimport { TextBox } from \"./TextBox.ts\";\r\n\r\nexport class EntityVertex extends Entity {\r\n    protected _textbox_widget: TextBox;\r\n    protected _element_textbox;\r\n    constructor() {\r\n        super();\r\n        this._textbox_widget = new TextBox();\r\n    }\r\n    enter(domNode, element) {\r\n        this._element_textbox = element.append(\"g\").attr(\"class\", \"entity_textbox\");\r\n        super.enter(domNode, element);\r\n        this._textbox_widget.target(this._element_textbox.node());\r\n    }\r\n    update() {\r\n        super.update.apply(this, arguments);\r\n        this._textbox_widget\r\n            .text(this._title_widget.text());\r\n        this._icon_widget\r\n            .shape_colorFill(this.iconColorFill())\r\n            .shape_colorStroke(this.iconColorStroke());\r\n        this._background_widget\r\n            .colorFill(\"none\")\r\n            .colorStroke(\"none\");\r\n\r\n        this._icon_widget.render();\r\n        this._textbox_widget.render();\r\n        const icon_bbox = this._icon_widget.getBBox(true);\r\n        const text_bbox = this._textbox_widget.getBBox(true);\r\n        let _icon_x = 0;\r\n        let _icon_y = -(text_bbox.height / 2) - (icon_bbox.height / 3);\r\n        switch (this.iconAnchor()) {\r\n            case \"start\":\r\n                _icon_x = -(text_bbox.width / 2) + (icon_bbox.width / 3);\r\n                break;\r\n            case \"end\":\r\n                _icon_x = (text_bbox.width / 2) - (icon_bbox.width / 3);\r\n                break;\r\n            case \"left\":\r\n                _icon_x = -(text_bbox.width / 2) - (icon_bbox.width / 2);\r\n                _icon_y = 0;\r\n                break;\r\n        }\r\n        this._icon_widget.move({\r\n            x: _icon_x,\r\n            y: _icon_y\r\n        });\r\n        this.moveAnnotations(text_bbox.width / 2, text_bbox.height / 2);\r\n    }\r\n    exit(domNode, element) {\r\n        this._textbox_widget.target(null);\r\n        super.exit(domNode, element);\r\n    }\r\n}\r\nEntityVertex.prototype._class += \" common_EntityVertex\";\r\n\r\nexport interface EntityVertex {\r\n    iconAnchor(): string;\r\n    iconAnchor(_: string): this;\r\n    iconColorFill(): string;\r\n    iconColorFill(_: string): this;\r\n    iconColorStroke(): string;\r\n    iconColorStroke(_: string): this;\r\n    shape_colorStroke(): string;\r\n    shape_colorStroke(_: string): this;\r\n    shape_colorFill(): string;\r\n    shape_colorFill(_: string): this;\r\n    text_colorFill(): string;\r\n    text_colorFill(_: string): this;\r\n\r\n    textboxColorStroke(): string;\r\n    textboxColorStroke(_: string): this;\r\n    textboxColorFill(): string;\r\n    textboxColorFill(_: string): this;\r\n    textboxFontColor(): string;\r\n    textboxFontColor(_: string): this;\r\n}\r\n\r\nEntityVertex.prototype.publish(\"iconAnchor\", \"start\", \"set\", \"Horizontal anchor position of icon\", [\"\", \"start\", \"middle\", \"end\", \"left\"]);\r\nEntityVertex.prototype.publish(\"iconColorFill\", null, \"html-color\", \"iconColorFill\");\r\nEntityVertex.prototype.publish(\"iconColorStroke\", null, \"html-color\", \"iconColorStroke\");\r\n\r\nEntityVertex.prototype.publishProxy(\"textboxColorStroke\", \"_textbox_widget\", \"shape_colorStroke\");\r\nEntityVertex.prototype.publishProxy(\"textboxColorFill\", \"_textbox_widget\", \"shape_colorFill\");\r\nEntityVertex.prototype.publishProxy(\"textboxFontColor\", \"_textbox_widget\", \"text_colorFill\");\r\n","import { select as d3Select } from \"d3-selection\";\r\nimport { HTMLWidget } from \"./HTMLWidget.ts\";\r\n\r\nexport class Image extends HTMLWidget {\r\n    private _imgElement;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const context = this;\r\n        const img = element.selectAll(\"img\").data(this.source() ? [this.source()] : [], function (d) { return d; });\r\n        img.enter()\r\n            .append(\"img\")\r\n            .attr(\"src\", this.source())\r\n            .style(\"opacity\", 0)\r\n            .on(\"load\", function () {\r\n                context._imgElement = d3Select(this);\r\n                context.styleImageElement();\r\n                context._imgElement.style(\"opacity\", 1);\r\n            })\r\n            ;\r\n        this.styleImageElement();\r\n        img.exit()\r\n            .remove()\r\n            ;\r\n    }\r\n\r\n    styleImageElement() {\r\n        if (!this._imgElement) return;\r\n        switch (this.sizing()) {\r\n            case \"actual\":\r\n                this._imgElement.style(\"width\", \"auto\");\r\n                this._imgElement.style(\"height\", \"auto\");\r\n                break;\r\n            case \"fit\":\r\n                if (this.lockAspectRatio()) {\r\n                    this._imgElement.style(\"width\", \"auto\");\r\n                    this._imgElement.style(\"height\", \"auto\");\r\n                    const bbox = this._imgElement.node().getBoundingClientRect();\r\n                    const xScale = bbox.width / this.width();\r\n                    const yScale = bbox.height / this.height();\r\n                    if (xScale > yScale) {\r\n                        this._imgElement.style(\"width\", this.width() + \"px\");\r\n                        this._imgElement.style(\"height\", (bbox.height / xScale) + \"px\");\r\n                    } else {\r\n                        this._imgElement.style(\"width\", (bbox.width / yScale) + \"px\");\r\n                        this._imgElement.style(\"height\", this.height() + \"px\");\r\n                    }\r\n                } else {\r\n                    this._imgElement.style(\"width\", this.width() + \"px\");\r\n                    this._imgElement.style(\"height\", this.height() + \"px\");\r\n                }\r\n                break;\r\n            case \"custom\":\r\n                this._imgElement.style(\"width\", this.customWidth());\r\n                this._imgElement.style(\"height\", this.customHeight());\r\n                break;\r\n        }\r\n        switch (this.alignment()) {\r\n            case \"origin\":\r\n                break;\r\n            case \"center\":\r\n                const bbox = this._imgElement.node().getBoundingClientRect();\r\n                this._imgElement.style(\"margin-left\", `${(this.width() - bbox.width) / 2}px`);\r\n                this._imgElement.style(\"margin-top\", `${(this.height() - bbox.height) / 2}px`);\r\n                break;\r\n        }\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n}\r\nImage.prototype._class += \" common_Image\";\r\n\r\nexport interface Image {\r\n    source(): string;\r\n    source(_: string): this;\r\n    sizing(): \"actual\" | \"fit\" | \"custom\";\r\n    sizing(_: \"actual\" | \"fit\" | \"custom\"): this;\r\n    customWidth(): string;\r\n    customWidth(_: string): this;\r\n    customHeight(): string;\r\n    customHeight(_: string): this;\r\n    lockAspectRatio(): boolean;\r\n    lockAspectRatio(_: boolean): this;\r\n    alignment(): \"center\" | \"origin\";\r\n    alignment(_: \"center\" | \"origin\"): this;\r\n}\r\n\r\nImage.prototype.publish(\"source\", null, \"string\", \"Image Source\", null, { tags: [\"Basic\"] });\r\nImage.prototype.publish(\"sizing\", \"actual\", \"set\", \"Controls sizing mode\", [\"actual\", \"fit\", \"custom\"], { tags: [\"Basic\"] });\r\nImage.prototype.publish(\"customWidth\", \"50%\", \"string\", \"Applies this width to IMG element if 'sizing' is set to 'custom' (user should set 'px' or 'em' etc.)\", null, { tags: [\"Basic\"], disable: (w) => w.sizing() !== \"custom\" });\r\nImage.prototype.publish(\"customHeight\", \"20%\", \"string\", \"Applies this height to IMG element if 'sizing' is set to 'custom' (user should set 'px' or 'em' etc.)\", null, { tags: [\"Basic\"], disable: (w) => w.sizing() !== \"custom\" });\r\nImage.prototype.publish(\"lockAspectRatio\", true, \"boolean\", \"Locks the aspect ratio when scaling/stretching\", null, { tags: [\"Basic\"], disable: (w) => w.sizing() !== \"fit\" });\r\nImage.prototype.publish(\"alignment\", \"center\", \"set\", \"Image Alignment\", [\"center\", \"origin\"], { tags: [\"Basic\"] });\r\n","import { IList } from \"./IList.ts\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\nimport { TextBox } from \"./TextBox.ts\";\r\n\r\nimport \"../src/List.css\";\r\n\r\nexport class List extends SVGWidget implements IList {\r\n\r\n    protected _listWidgets;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._listWidgets = {};\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const context = this;\r\n\r\n        const line = element.selectAll(\".line\").data(this.data(), function (d) { return d; });\r\n        const lineEnter = line.enter().append(\"g\")\r\n            .attr(\"class\", \"line\")\r\n            .each(function (d) {\r\n                const newTextBox = new TextBox()\r\n                    .target(this)\r\n                    .paddingTop(0)\r\n                    .paddingBottom(0)\r\n                    .paddingLeft(8)\r\n                    .paddingRight(8)\r\n                    .text(d)\r\n                    .render()\r\n                    ;\r\n                newTextBox.element()\r\n                    .on(\"click\", function (event, d2) {\r\n                        context.click(d2.text(), event);\r\n                    })\r\n                    .on(\"dblclick\", function (event, d2) {\r\n                        context.dblclick(d2.text(), event);\r\n                    })\r\n                    ;\r\n                context._listWidgets[d] = newTextBox;\r\n            })\r\n            ;\r\n\r\n        let listHeight = 0;\r\n        let listWidth = 0;\r\n        for (const key in this._listWidgets) {\r\n            if (!this._listWidgets.hasOwnProperty(key)) continue;\r\n            const bbox = this._listWidgets[key].getBBox();\r\n            listHeight += bbox.height;\r\n            if (listWidth < bbox.width)\r\n                listWidth = bbox.width;\r\n        }\r\n\r\n        let yPos = -listHeight / 2; // + lineHeight / 2;\r\n        lineEnter.merge(line).each(function (d) {\r\n            const widget = context._listWidgets[d];\r\n            const bbox = widget.getBBox();\r\n            widget\r\n                .pos({ x: 0, y: yPos + bbox.height / 2 })\r\n                .anchor(context.anchor())\r\n                .fixedSize({ width: listWidth, height: bbox.height })\r\n                .render()\r\n                ;\r\n            yPos += bbox.height;\r\n        });\r\n        line.exit()\r\n            .remove()\r\n            .each(function (d) {\r\n                context._listWidgets[d].target(null);\r\n                delete context._listWidgets[d];\r\n            })\r\n            ;\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        for (const key in this._listWidgets) {\r\n            if (this._listWidgets.hasOwnProperty(key)) {\r\n                this._listWidgets[key].target(null);\r\n            }\r\n        }\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    //  Events  ---\r\n    click(d, event?) {\r\n        // console.log(\"Click:  \" + d);\r\n    }\r\n\r\n    dblclick(d, event?) {\r\n        // console.log(\"Double click:  \" + d);\r\n    }\r\n}\r\nList.prototype._class += \" common_List\";\r\n\r\nexport interface List {\r\n    anchor(): \"\" | \"start\" | \"middle\" | \"end\";\r\n    anchor(_: \"\" | \"start\" | \"middle\" | \"end\"): this;\r\n}\r\n\r\nList.prototype.publish(\"anchor\", \"start\", \"set\", \"Anchor Position\", [\"\", \"start\", \"middle\", \"end\"], { tags: [\"Private\"] });\r\n","import { select as d3Select } from \"d3-selection\";\r\nimport { Icon } from \"./Icon.ts\";\r\nimport { IMenu } from \"./IMenu.ts\";\r\nimport { List } from \"./List.ts\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\n\r\nimport \"../src/Menu.css\";\r\n\r\nexport class Menu extends SVGWidget implements IMenu {\r\n    protected _icon = new Icon().shape(\"square\").diameter(14).paddingPercent(0);\r\n    protected _list = new List();\r\n    protected _open;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        const context = this;\r\n        this._list.click = function (d, event) {\r\n            event.stopPropagation();\r\n            context.hideMenu();\r\n            context.click(d);\r\n        };\r\n        this._open = false;\r\n    }\r\n\r\n    toggleMenu() {\r\n        if (!this._open) {\r\n            this.showMenu();\r\n        } else {\r\n            this.hideMenu();\r\n        }\r\n    }\r\n\r\n    showMenu() {\r\n        this.preShowMenu();\r\n        this._open = true;\r\n        this._list\r\n            .data(this.data())\r\n            .render()\r\n            ;\r\n\r\n        const bbox = this._icon.getBBox(true);\r\n        const menuBBox = this._list.getBBox(true);\r\n        const pos = {\r\n            x: bbox.width / 2 - menuBBox.width / 2,\r\n            y: bbox.height / 2 + menuBBox.height / 2\r\n        };\r\n        this._list\r\n            .move(pos)\r\n            ;\r\n        const context = this;\r\n        d3Select(\"body\")\r\n            .on(\"click.\" + this._id, function () {\r\n                if (context._open) {\r\n                    context.hideMenu();\r\n                }\r\n            })\r\n            ;\r\n    }\r\n\r\n    hideMenu() {\r\n        d3Select(\"body\")\r\n            .on(\"click.\" + this._id, null)\r\n            ;\r\n        this._open = false;\r\n        this._list\r\n            .data([])\r\n            .render()\r\n            ;\r\n        this.postHideMenu();\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n\r\n        this._icon\r\n            .target(domNode)\r\n            .render()\r\n            ;\r\n\r\n        this._list\r\n            .target(domNode)\r\n            .render()\r\n            ;\r\n\r\n        const context = this;\r\n        this._icon.element()\r\n            .on(\"click\", function (event) {\r\n                event.stopPropagation();\r\n                context.toggleMenu();\r\n            })\r\n            ;\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        element\r\n            .classed(\"disabled\", this.data().length === 0)\r\n            ;\r\n\r\n        this._icon\r\n            .faChar(this.faChar())\r\n            .paddingPercent(this.paddingPercent())\r\n            .render()\r\n            ;\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        this._icon\r\n            .target(null)\r\n            ;\r\n\r\n        this._list\r\n            .target(null)\r\n            ;\r\n\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    //  Events  ---\r\n    click(d) {\r\n    }\r\n    preShowMenu() {\r\n    }\r\n    postHideMenu() {\r\n    }\r\n\r\n}\r\nMenu.prototype._class += \" common_Menu\";\r\n\r\nexport interface Menu {\r\n    faChar(): string;\r\n    faChar(_: string): this;\r\n    paddingPercent(): number;\r\n    paddingPercent(_: number): this;\r\n}\r\n\r\nMenu.prototype.publishProxy(\"faChar\", \"_icon\", null, \"\\uf0c9\");\r\nMenu.prototype.publishProxy(\"paddingPercent\", \"_icon\", null, 10);\r\n","import { PropertyExt } from \"./PropertyExt.ts\";\r\n\r\nexport class ProgressBar extends PropertyExt {\r\n\r\n    protected _elementID: string;\r\n    protected _running: boolean = false;\r\n    protected _style;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    calcCSS(halflife: number, perc: number) {\r\n        const bar_size = this.size();\r\n        const bar_color = this.color();\r\n        const blur_opacity = this.blurOpacity();\r\n        const blur_opacity_hex = blur_opacity * 255 >= 16 ? Math.floor(blur_opacity * 255).toString(16).slice(-2) : \"00\";\r\n        const blur_color = this.blurColor() || bar_color;\r\n        const blur_size = this.blurSize();\r\n        const blur_fx = this.blurBar() ? `background: radial-gradient(ellipse at 50% 50%, ${blur_color}${blur_opacity_hex}, ${blur_color}00, #00000000 ${blur_size}px);` : \"\";\r\n        return `\r\n            #${this._elementID}::before{\r\n                content:\" \";display:block;position:absolute;\r\n                height:${bar_size}px;width:${perc}%;\r\n                left:0;top:0;\r\n                background-color: ${bar_color};\r\n                transition: width ${(halflife / 1000)}s;\r\n            }\r\n            #${this._elementID}::after{\r\n                content:\" \";display:block;position:absolute;\r\n                height:${blur_size}px;width:${blur_size * 2}px;\r\n                left:calc(${perc}% - ${blur_size}px);\r\n                top:${-((blur_size / 2) - (bar_size / 2))}px;\r\n                background-color: ${bar_color};\r\n                transition: left ${(halflife / 1000)}s;\r\n                transform: rotate(1deg) translate(-${blur_size / 2.5}px,0px) scale(1.5,0.5);\r\n                ${blur_fx}\r\n            }\r\n        `;\r\n    }\r\n\r\n    start() {\r\n        this._running = true;\r\n        this.updateProgress(this.halfLife(), 10);\r\n    }\r\n\r\n    finish() {\r\n        this.updateProgress(100, 100);\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        this._elementID = element.attr(\"id\");\r\n        if (!this._elementID) throw new Error(\"Target element requires an id attribute.\");\r\n        this._style = element.insert(\"style\");\r\n    }\r\n\r\n    exit(_domNode, _element) {\r\n        this._running = false;\r\n        if (this._style)\r\n            this._style.remove();\r\n        delete this._style;\r\n    }\r\n\r\n    protected updateProgress(halflife: number, perc: number) {\r\n        if (!this._running) return;\r\n        if (this._style) {\r\n            this._style.html(this.calcCSS(halflife, perc));\r\n        }\r\n\r\n        const percLimit = 95;\r\n        halflife *= this.decay();\r\n        perc = perc ? perc : 10;\r\n        if (perc < percLimit) {\r\n            setTimeout(() => {\r\n                const _remaining = 100 - perc;\r\n                this.updateProgress(halflife, perc + (_remaining / 2));\r\n            }, perc === 10 ? 100 : halflife);\r\n        } else if (perc === 100) {\r\n            setTimeout(() => {\r\n                this._running = false;\r\n                if (this._style) {\r\n                    this._style.html(\"\");\r\n                }\r\n            }, halflife);\r\n        }\r\n    }\r\n}\r\nProgressBar.prototype._class += \" common_ProgressBar\";\r\n\r\nexport interface ProgressBar {\r\n    halfLife(): number;\r\n    halfLife(_: number): this;\r\n    decay(): number;\r\n    decay(_: number): this;\r\n    size(): number;\r\n    size(_: number): this;\r\n    color(): string;\r\n    color(_: string): this;\r\n    blurBar(): boolean;\r\n    blurBar(_: boolean): this;\r\n    blurSize(): number;\r\n    blurSize(_: number): this;\r\n    blurColor(): string;\r\n    blurColor(_: string): this;\r\n    blurOpacity(): number;\r\n    blurOpacity(_: number): this;\r\n}\r\nProgressBar.prototype.publish(\"halfLife\", 5000, \"number\", \"Half Life\");\r\nProgressBar.prototype.publish(\"decay\", 1.2, \"number\", \"Decay\");\r\nProgressBar.prototype.publish(\"size\", 2, \"number\", \"Size\");\r\nProgressBar.prototype.publish(\"color\", \"#2ed573\", \"string\", \"Color\");\r\nProgressBar.prototype.publish(\"blurBar\", true, \"boolean\", \"Bar Blur\");\r\nProgressBar.prototype.publish(\"blurSize\", 50, \"number\", \"Blur Size\");\r\nProgressBar.prototype.publish(\"blurColor\", \"#7bed9f\", \"string\", \"Blur Color (hex)\", null, { optional: true });\r\nProgressBar.prototype.publish(\"blurOpacity\", 0.35, \"number\", \"Blur Opacity\");\r\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n  sourceEvent,\n  subject,\n  target,\n  identifier,\n  active,\n  x, y, dx, dy,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    subject: {value: subject, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    identifier: {value: identifier, enumerable: true, configurable: true},\n    active: {value: active, enumerable: true, configurable: true},\n    x: {value: x, enumerable: true, configurable: true},\n    y: {value: y, enumerable: true, configurable: true},\n    dx: {value: dx, enumerable: true, configurable: true},\n    dy: {value: dy, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved, nonpassive)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned(event, d) {\n    if (touchending || !filter.call(this, event, d)) return;\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n    if (!gesture) return;\n    select(event.view)\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n    nodrag(event.view);\n    nopropagation(event);\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\", event);\n  }\n\n  function mousemoved(event) {\n    noevent(event);\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\", event);\n  }\n\n  function mouseupped(event) {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent(event);\n    gestures.mouse(\"end\", event);\n  }\n\n  function touchstarted(event, d) {\n    if (!filter.call(this, event, d)) return;\n    var touches = event.changedTouches,\n        c = container.call(this, event, d),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n        nopropagation(event);\n        gesture(\"start\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchmoved(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent(event);\n        gesture(\"drag\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchended(event) {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation(event);\n        gesture(\"end\", event, touches[i]);\n      }\n    }\n  }\n\n  function beforestart(that, container, event, d, identifier, touch) {\n    var dispatch = listeners.copy(),\n        p = pointer(touch || event, container), dx, dy,\n        s;\n\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n        sourceEvent: event,\n        target: drag,\n        identifier,\n        active,\n        x: p[0],\n        y: p[1],\n        dx: 0,\n        dy: 0,\n        dispatch\n      }), d)) == null) return;\n\n    dx = s.x - p[0] || 0;\n    dy = s.y - p[1] || 0;\n\n    return function gesture(type, event, touch) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\n        case \"end\": delete gestures[identifier], --active; // falls through\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\n      }\n      dispatch.call(\n        type,\n        that,\n        new DragEvent(type, {\n          sourceEvent: event,\n          subject: s,\n          target: drag,\n          identifier,\n          active: n,\n          x: p[0] + dx,\n          y: p[1] + dy,\n          dx: p[0] - p0[0],\n          dy: p[1] - p0[1],\n          dispatch\n        }),\n        d\n      );\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","import { select as d3Select } from \"d3-selection\";\r\nimport \"d3-transition\";\r\nimport { Icon } from \"./Icon.ts\";\r\nimport { Menu } from \"./Menu.ts\";\r\nimport { Shape } from \"./Shape.ts\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\nimport { Text } from \"./Text.ts\";\r\n\r\nimport \"../src/Surface.css\";\r\n\r\nexport class Surface extends SVGWidget {\r\n    _origMenuParam;\r\n    _origShowContent;\r\n\r\n    protected _iconWidget;\r\n    protected _containerWidget;\r\n    protected _titleRectWidget;\r\n    protected _textWidget;\r\n    _menuWidget;\r\n    protected _surfaceButtons;\r\n\r\n    protected _clipRect;\r\n    protected buttonContainer;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._iconWidget = new Icon()\r\n            .faChar(\"\\uf07b\")\r\n            .paddingPercent(50)\r\n            ;\r\n        this._containerWidget = new Shape()\r\n            .class(\"container\")\r\n            .shape(\"rect\")\r\n            ;\r\n        this._titleRectWidget = new Shape()\r\n            .class(\"title\")\r\n            .shape(\"rect\")\r\n            ;\r\n        this._textWidget = new Text()\r\n            .class(\"title\")\r\n            ;\r\n        this._menuWidget = new Menu()\r\n            .paddingPercent(0)\r\n            ;\r\n        const context = this;\r\n        this._menuWidget.preShowMenu = function () {\r\n            if (context.content() && context.content().hasOverlay()) {\r\n                context.content().visible(false);\r\n            }\r\n        };\r\n        this._menuWidget.postHideMenu = function () {\r\n            if (context.content() && context.content().hasOverlay()) {\r\n                context.content().visible(true);\r\n            }\r\n        };\r\n\r\n        this._surfaceButtons = [];\r\n    }\r\n\r\n    enter(_domNode, _element) {\r\n        super.enter(_domNode, _element);\r\n        const element = _element.append(\"g\").attr(\"class\", \"frame\");\r\n        const domNode = element.node();\r\n        this._clipRect = element.append(\"defs\").append(\"clipPath\")\r\n            .attr(\"id\", this.id() + \"_clip\")\r\n            .append(\"rect\")\r\n            .attr(\"x\", 0)\r\n            .attr(\"y\", 0)\r\n            .attr(\"width\", this._size.width)\r\n            .attr(\"height\", this._size.height)\r\n            ;\r\n        this._titleRectWidget\r\n            .target(domNode)\r\n            .render()\r\n            .display(this.showTitle() && this.showIcon())\r\n            ;\r\n        this._iconWidget\r\n            .target(domNode)\r\n            .render()\r\n            ;\r\n        this._menuWidget\r\n            .target(_domNode)\r\n            ;\r\n        this._textWidget\r\n            .target(domNode)\r\n            ;\r\n        this._containerWidget\r\n            .target(domNode)\r\n            ;\r\n        this.buttonContainer = d3Select(this._target).append(\"div\").attr(\"class\", \"svg-button-container\");\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        const context = this;\r\n\r\n        let width = this.width() - 1;\r\n        const height = this.height() - 1;\r\n\r\n        this._iconWidget\r\n            .display(this.showTitle() && this.showIcon())\r\n            .shape(this.icon_shape())\r\n            .render()\r\n            ;\r\n        this._menuWidget\r\n            .render()\r\n            ;\r\n        this._textWidget\r\n            .text(this.title())\r\n            .display(this.showTitle())\r\n            .render()\r\n            ;\r\n\r\n        const surfaceButtons = this.buttonContainer.selectAll(\".surface-button\").data(this.buttonAnnotations());\r\n        surfaceButtons.enter().append(\"button\").attr(\"class\", \"surface-button\")\r\n            .each(function (button, idx) {\r\n                const el = context._surfaceButtons[idx] = d3Select(this)\r\n                    .attr(\"class\", \"surface-button \" + (button.class ? button.class : \"\"))\r\n                    .attr(\"id\", button.id)\r\n                    .style(\"padding\", button.padding)\r\n                    .style(\"width\", button.width)\r\n                    .style(\"height\", button.height)\r\n                    .style(\"cursor\", \"pointer\")\r\n                    .on(\"click\", function (d) { context.click(d); });\r\n                if (button.font === \"FontAwesome\") {\r\n                    el\r\n                        .append(\"i\")\r\n                        .attr(\"class\", \"fa\")\r\n                        .text(function () { return button.label; });\r\n                } else {\r\n                    el\r\n                        .text(function () { return button.label; });\r\n                }\r\n            })\r\n            ;\r\n        surfaceButtons.exit()\r\n            .each(function (_d, idx) {\r\n                const element2 = d3Select(this);\r\n                delete context._surfaceButtons[idx];\r\n                element2.remove();\r\n            })\r\n            ;\r\n\r\n        const buttonClientHeight = this.showTitle() ? Math.max.apply(null, this._surfaceButtons.map(function (d) { return d.node().offsetHeight; })) : 0;\r\n        const iconClientSize = this.showTitle() && this.showIcon() ? this._iconWidget.getBBox(true) : { width: 0, height: 0 };\r\n        const textClientSize = this._textWidget.getBBox(true);\r\n        const menuClientSize = this._menuWidget.getBBox(true);\r\n        const _titleRegionHeight = Math.max(iconClientSize.height, textClientSize.height, menuClientSize.height, buttonClientHeight);\r\n        const titleRegionHeight = this.showTitle() ? _titleRegionHeight : 0;\r\n        const yTitle = (-height + _titleRegionHeight) / 2;\r\n\r\n        const titleTextHeight = this.showTitle() ? Math.max(textClientSize.height, menuClientSize.height, buttonClientHeight) : 0;\r\n        const titleTextWidth = this.showTitle() ? textClientSize.width + menuClientSize.width : 0;\r\n        if (titleTextWidth > width) {\r\n            width = titleTextWidth;\r\n        }\r\n\r\n        const topMargin = titleRegionHeight <= titleTextHeight ? 0 : (titleRegionHeight - titleTextHeight) / 2;\r\n        const leftMargin = topMargin;\r\n\r\n        this._titleRectWidget\r\n            .pos({ x: leftMargin, y: yTitle })\r\n            .width(width - leftMargin * 2)\r\n            .height(titleTextHeight)\r\n            .display(this.showTitle())\r\n            .render()\r\n            ;\r\n        this._iconWidget\r\n            .move({ x: -width / 2 + iconClientSize.width / 2, y: yTitle })\r\n            ;\r\n        this._menuWidget\r\n            .move({ x: width / 2 - menuClientSize.width / 2 - this.menuPadding(), y: yTitle })\r\n            ;\r\n        this._textWidget\r\n            .move({ x: (iconClientSize.width / 2 - menuClientSize.width / 2) / 2, y: yTitle })\r\n            ;\r\n\r\n        const xPos = context._titleRectWidget.node().getBoundingClientRect().left + (context._size.width - leftMargin * 2) - context.buttonGutter() - this.buttonContainer.node().offsetWidth;\r\n        const yPos = context._titleRectWidget.node().getBoundingClientRect().top + ((titleTextHeight - this.buttonContainer.node().offsetHeight) / 2);\r\n        if (!isNaN(xPos)) {\r\n            this.buttonContainer.style(\"left\", xPos + \"px\");\r\n        }\r\n        if (!isNaN(yPos)) {\r\n            this.buttonContainer.style(\"top\", yPos + \"px\");\r\n        }\r\n\r\n        if (this.showTitle()) {\r\n            this._containerWidget\r\n                .pos({ x: leftMargin / 2, y: titleRegionHeight / 2 - topMargin / 2 })\r\n                .width(width - leftMargin)\r\n                .height(height - titleRegionHeight + topMargin)\r\n                .render()\r\n                ;\r\n        } else {\r\n            this._containerWidget\r\n                .pos({ x: 0, y: 0 })\r\n                .width(width)\r\n                .height(height)\r\n                .render()\r\n                ;\r\n        }\r\n\r\n        if (this.showContent()) {\r\n            const xOffset = leftMargin;\r\n            const yOffset = titleRegionHeight - topMargin;\r\n\r\n            const content = element.selectAll(\".content\").data(this.content() ? [this.content()] : [], function (d) { return d._id; });\r\n            content.enter().append(\"g\")\r\n                .attr(\"class\", \"content\")\r\n                .attr(\"clip-path\", \"url(#\" + this.id() + \"_clip)\")\r\n                .each(function (d) {\r\n                    d.target(this);\r\n                })\r\n                .merge(content)\r\n                .attr(\"transform\", \"translate(\" + (leftMargin / 2) + \", \" + (titleRegionHeight / 2 - topMargin / 2) + \")\")\r\n                .each(function (d) {\r\n                    const padding = {\r\n                        left: 0,\r\n                        top: 0,\r\n                        right: 1,\r\n                        bottom: 1\r\n                    };\r\n                    d\r\n                        .resize({\r\n                            width: width - xOffset - (padding.left + padding.right),\r\n                            height: height - yOffset - (padding.top + padding.bottom)\r\n                        })\r\n                        ;\r\n                })\r\n                ;\r\n            if (this.content()) {\r\n                this._clipRect\r\n                    .attr(\"x\", -(width - xOffset) / 2)\r\n                    .attr(\"y\", -(height - yOffset) / 2)\r\n                    .attr(\"width\", width - xOffset)\r\n                    .attr(\"height\", height - yOffset)\r\n                    ;\r\n            }\r\n            content.exit().transition()\r\n                .each(function (d) { d.target(null); })\r\n                .remove()\r\n                ;\r\n        }\r\n\r\n        if (this._menuWidget.element() && this._menuWidget.element().node() && this._menuWidget.element().node().parentNode) {\r\n            this._menuWidget.element().node().parentNode.appendChild(this._menuWidget.element().node()); // Make sure menu is on top (Z-Order POV)\r\n        }\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        this._titleRectWidget\r\n            .target(null)\r\n            ;\r\n        this._iconWidget\r\n            .target(null)\r\n            ;\r\n        this._menuWidget\r\n            .target(null)\r\n            ;\r\n        this._textWidget\r\n            .target(null)\r\n            ;\r\n        this._containerWidget\r\n            .target(null)\r\n            ;\r\n        if (this.content()) {\r\n            this.content().target(null);\r\n        }\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    intersection(pointA, pointB) {\r\n        const hits = [];\r\n        const i1 = this._iconWidget.intersection(pointA, pointB, this._pos);\r\n        if (i1) {\r\n            hits.push({ i: i1, d: this.distance(i1, pointB) });\r\n        }\r\n        const i2 = this._titleRectWidget.intersection(pointA, pointB);\r\n        if (i2) {\r\n            hits.push({ i: i2, d: this.distance(i2, pointB) });\r\n        }\r\n        const i3 = this._containerWidget.intersection(pointA, pointB);\r\n        if (i3) {\r\n            hits.push({ i: i3, d: this.distance(i3, pointB) });\r\n        }\r\n        let nearest = null;\r\n        hits.forEach(function (item) {\r\n            if (nearest === null || nearest.d > item.d) {\r\n                nearest = item;\r\n            }\r\n        });\r\n        return nearest && nearest.i ? nearest.i : null;\r\n    }\r\n\r\n    click(d) {\r\n    }\r\n\r\n}\r\nSurface.prototype._class += \" common_Surface\";\r\n\r\nexport interface Surface {\r\n    showTitle(): boolean;\r\n    showTitle(_: boolean): this;\r\n    title(): string;\r\n    title(_: string): this;\r\n    titleFontSize(): string;\r\n    titleFontSize(_: string): this;\r\n    showIcon(): boolean;\r\n    showIcon(_: boolean): this;\r\n    icon_faChar(): string;\r\n    icon_faChar(_: string): this;\r\n    icon_shape(): string;\r\n    icon_shape(_: string): this;\r\n    content(): any;\r\n    content(_: any): this;\r\n    buttonAnnotations(): any[];\r\n    buttonAnnotations(_: any[]): this;\r\n    buttonGutter(): number;\r\n    buttonGutter(_: number): this;\r\n    showContent(): boolean;\r\n    showContent(_: boolean): this;\r\n    menu(): any[];\r\n    menu(_: any[]): this;\r\n    menuPadding(): number;\r\n    menuPadding(_: number): this;\r\n}\r\n\r\nSurface.prototype.publish(\"showTitle\", true, \"boolean\", \"Show Title\", null, { tags: [\"Basic\"] });\r\nSurface.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Basic\"] });\r\nSurface.prototype.publishProxy(\"titleFontSize\", \"_textWidget\", \"fontSize\");\r\nSurface.prototype.publish(\"showIcon\", true, \"boolean\", \"Show Title\", null, { tags: [\"Advanced\"] });\r\nSurface.prototype.publishProxy(\"icon_faChar\", \"_iconWidget\", \"faChar\");\r\nSurface.prototype.publishProxy(\"icon_shape\", \"_iconWidget\", \"shape\");\r\n\r\nSurface.prototype.publish(\"content\", null, \"widget\", \"Content\", null, { tags: [\"Private\"] });\r\n\r\nSurface.prototype.publish(\"buttonAnnotations\", [], \"array\", \"Button Array\", null, { tags: [\"Intermediate\"] });\r\nSurface.prototype.publish(\"buttonGutter\", 25, \"number\", \"Space Between Menu and Buttons\", null, { tags: [\"Intermediate\"] });\r\n\r\nSurface.prototype.publish(\"showContent\", true, \"boolean\", \"Show Content\", null, { tags: [\"Intermediate\"] });\r\nSurface.prototype.publish(\"menu\", [], \"array\", \"Menu List Data\", null, { tags: [\"Intermediate\"] });\r\nSurface.prototype.publish(\"menuPadding\", 2, \"number\", \"Menu Padding\", null, { tags: [\"Advanced\"] });\r\n\r\nSurface.prototype._origMenuParam = Surface.prototype.menu;\r\nSurface.prototype.menu = function (this: Surface, _?) {\r\n    Surface.prototype._origMenuParam.apply(this, arguments);\r\n    if (arguments.length) {\r\n        this._menuWidget.data(_);\r\n        return this;\r\n    }\r\n    return this._menuWidget.data();\r\n};\r\n\r\nSurface.prototype._origShowContent = Surface.prototype.showContent;\r\nSurface.prototype.showContent = function (_?) {\r\n    const retVal = Surface.prototype._origShowContent.apply(this, arguments);\r\n    if (arguments.length) {\r\n        if (this.content()) {\r\n            this.content().visible(this.showContent());\r\n        }\r\n    }\r\n    return retVal;\r\n};\r\n","import { dispatch as d3Dispatch } from \"d3-dispatch\";\r\nimport { drag as d3Drag } from \"d3-drag\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { Surface } from \"./Surface.ts\";\r\n\r\nimport \"../src/ResizeSurface.css\";\r\n\r\nexport class ResizeSurface extends Surface {\r\n\r\n    protected handleWidth;\r\n    protected handles;\r\n    protected dispatch;\r\n    protected drag;\r\n    protected _domNode;\r\n    protected _dragHandlePos;\r\n    protected _dragStartPos;\r\n    protected _dragStartSize;\r\n    protected _prevPosSize;\r\n    protected _textPosSize;\r\n    protected _iconPosSize;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.handleWidth = 8;\r\n        this.handles = [{ loc: \"NW\" }, { loc: \"N\" }, { loc: \"NE\" }, { loc: \"E\" }, { loc: \"SE\" }, { loc: \"S\" }, { loc: \"SW\" }, { loc: \"W\" }];\r\n\r\n        const context = this;\r\n        this.dispatch = d3Dispatch(\"sizestart\", \"size\", \"sizeend\");\r\n        this.drag = d3Drag()\r\n            .subject(function (_event, d) { return d; })\r\n            ;\r\n        this.drag\r\n            .on(\"start\", function (event, d) {\r\n                context.dispatch.call(\"sizestart\", context, d.loc);\r\n                if (context.allowResize()) {\r\n                    event.sourceEvent.stopPropagation();\r\n                    context._dragHandlePos = { x: d.x, y: d.y };\r\n                    context._dragStartPos = context.pos();\r\n                    context._dragStartSize = context.size();\r\n                    context._prevPosSize = {\r\n                        x: context._dragStartPos.x,\r\n                        y: context._dragStartPos.y,\r\n                        width: context._dragStartSize.width,\r\n                        height: context._dragStartSize.height\r\n                    };\r\n                    context._textPosSize = context._textWidget.getBBox(true);\r\n                    context._iconPosSize = context._iconWidget.getBBox(true);\r\n                    context.showContent(false);\r\n                }\r\n            })\r\n            .on(\"drag\", function (event, d) {\r\n                if (context.allowResize()) {\r\n                    event.sourceEvent.stopPropagation();\r\n                    const _dx = event.x - context._dragHandlePos.x;\r\n                    const _dy = event.y - context._dragHandlePos.y;\r\n                    const delta = { x: 0, y: 0, w: 0, h: 0 };\r\n                    switch (d.loc) {\r\n                        case \"NW\":\r\n                            delta.x = _dx / 2;\r\n                            delta.w = -_dx;\r\n                        /* falls through */\r\n                        case \"N\":\r\n                            delta.y = _dy / 2;\r\n                            delta.h = -_dy;\r\n                            break;\r\n                        case \"NE\":\r\n                            delta.y = _dy / 2;\r\n                            delta.h = -_dy;\r\n                        /* falls through */\r\n                        case \"E\":\r\n                            delta.x = _dx / 2;\r\n                            delta.w = _dx;\r\n                            break;\r\n                        case \"SE\":\r\n                            delta.x = _dx / 2;\r\n                            delta.w = _dx;\r\n                        /* falls through */\r\n                        case \"S\":\r\n                            delta.y = _dy / 2;\r\n                            delta.h = _dy;\r\n                            break;\r\n                        case \"SW\":\r\n                            delta.y = _dy / 2;\r\n                            delta.h = _dy;\r\n                        /* falls through */\r\n                        case \"W\":\r\n                            delta.x = _dx / 2;\r\n                            delta.w = -_dx;\r\n                            break;\r\n                    }\r\n                    const posSize = {\r\n                        x: context._dragStartPos.x + delta.x,\r\n                        y: context._dragStartPos.y + delta.y,\r\n                        width: context._dragStartSize.width + delta.w,\r\n                        height: context._dragStartSize.height + delta.h\r\n                    };\r\n                    if (posSize.width < context._iconPosSize.width * 2 + context._textPosSize.width) {\r\n                        posSize.x = context._prevPosSize.x;\r\n                        posSize.width = context._prevPosSize.width;\r\n                    }\r\n                    if (posSize.height < context._textPosSize.height + 48) {\r\n                        posSize.y = context._prevPosSize.y;\r\n                        posSize.height = context._prevPosSize.height;\r\n                    }\r\n                    context\r\n                        .pos({ x: posSize.x, y: posSize.y })\r\n                        .size({ width: posSize.width, height: posSize.height })\r\n                        .render()\r\n                        .getBBox(true)\r\n                        ;\r\n                    context.dispatch.call(\"size\", context, d.loc);\r\n                    context._prevPosSize = posSize;\r\n                }\r\n            })\r\n            .on(\"end\", function (event, d) {\r\n                if (context.allowResize()) {\r\n                    event.sourceEvent.stopPropagation();\r\n                    context\r\n                        .showContent(true)\r\n                        .render()\r\n                        ;\r\n                    context._containerWidget.getBBox(true);\r\n                    context._titleRectWidget.getBBox(true);\r\n                    context.dispatch.call(\"sizeend\", context, d.loc);\r\n                }\r\n            })\r\n            ;\r\n    }\r\n\r\n    move(_) {\r\n        const retVal = super.move.apply(this, arguments);\r\n        this.updateHandles(this._domNode, this._element);\r\n        return retVal;\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n        this.updateHandles(domNode, element);\r\n    }\r\n\r\n    updateHandles(_domNode, _element) {\r\n        const sizeHandles = this._placeholderElement.selectAll(\"rect\").data(this.handles, function (d) { return d.loc; });\r\n        const sizeHandlesEnter = sizeHandles.enter().append(\"rect\")\r\n            .attr(\"class\", function (d) { return \"resize\" + d.loc; })\r\n            .call(this.drag)\r\n            ;\r\n\r\n        const l = this._pos.x + this._containerWidget._pos.x - this._containerWidget.width() / 2;\r\n        const t = this._pos.y + this._titleRectWidget._pos.y - this._titleRectWidget.height() / 2;\r\n        const r = this._pos.x + this._containerWidget._pos.x + this._containerWidget.width() / 2;\r\n        const b = this._pos.y + this._containerWidget._pos.y + this._containerWidget.height() / 2;\r\n        const w = r - l;\r\n        const h = b - t;\r\n        const context = this;\r\n        sizeHandlesEnter.merge(sizeHandles)\r\n            .each(function (d) {\r\n                switch (d.loc) {\r\n                    case \"NW\":\r\n                        d.x = l - context.handleWidth / 2;\r\n                        d.y = t - context.handleWidth / 2;\r\n                        d.width = context.handleWidth;\r\n                        d.height = context.handleWidth;\r\n                        break;\r\n                    case \"N\":\r\n                        d.x = l + context.handleWidth / 2;\r\n                        d.y = t - context.handleWidth / 2;\r\n                        d.width = w - context.handleWidth;\r\n                        d.height = context.handleWidth;\r\n                        break;\r\n                    case \"NE\":\r\n                        d.x = r - context.handleWidth / 2;\r\n                        d.y = t - context.handleWidth / 2;\r\n                        d.width = context.handleWidth;\r\n                        d.height = context.handleWidth;\r\n                        break;\r\n                    case \"E\":\r\n                        d.x = r - context.handleWidth / 2;\r\n                        d.y = t + context.handleWidth / 2;\r\n                        d.width = context.handleWidth;\r\n                        d.height = h - context.handleWidth;\r\n                        break;\r\n                    case \"SE\":\r\n                        d.x = r - context.handleWidth / 2;\r\n                        d.y = b - context.handleWidth / 2;\r\n                        d.width = context.handleWidth;\r\n                        d.height = context.handleWidth;\r\n                        break;\r\n                    case \"S\":\r\n                        d.x = l + context.handleWidth / 2;\r\n                        d.y = b - context.handleWidth / 2;\r\n                        d.width = w - context.handleWidth;\r\n                        d.height = context.handleWidth;\r\n                        break;\r\n                    case \"SW\":\r\n                        d.x = l - context.handleWidth / 2;\r\n                        d.y = b - context.handleWidth / 2;\r\n                        d.width = context.handleWidth;\r\n                        d.height = context.handleWidth;\r\n                        break;\r\n                    case \"W\":\r\n                        d.x = l - context.handleWidth / 2;\r\n                        d.y = t + context.handleWidth / 2;\r\n                        d.width = context.handleWidth;\r\n                        d.height = h - context.handleWidth;\r\n                        break;\r\n                }\r\n                d3Select(this)\r\n                    .attr(\"x\", d.x)\r\n                    .attr(\"y\", d.y)\r\n                    .attr(\"width\", d.width)\r\n                    .attr(\"height\", d.height)\r\n                    ;\r\n            })\r\n            ;\r\n    }\r\n}\r\nResizeSurface.prototype._class += \" common_ResizeSurface\";\r\n\r\nexport interface ResizeSurface {\r\n    allowResize(): boolean;\r\n    allowResize(_: boolean): this;\r\n}\r\n\r\nResizeSurface.prototype.publish(\"allowResize\", true, \"boolean\", \"Sets if surface can be resized\", null, { tags: [\"Private\", \"Shared\"] });\r\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","import { HTMLWidget } from \"./HTMLWidget.ts\";\r\nimport { fa5Class } from \"./Utility.ts\";\r\nimport { Widget } from \"./Widget.ts\";\r\n\r\nimport \"../src/TitleBar.css\";\r\n\r\n//  Lite button for titlebar  ---\r\nexport class Button extends HTMLWidget {\r\n    private _enabled = true;\r\n    private _i;\r\n\r\n    constructor() {\r\n        super();\r\n        this._tag = \"a\";\r\n    }\r\n\r\n    enter(domNode: HTMLElement, element) {\r\n        super.enter(domNode, element);\r\n        const context = this;\r\n        this._i = this._element\r\n            .attr(\"href\", \"#\")\r\n            .on(\"click\", function (event) {\r\n                context.click();\r\n                event.preventDefault();\r\n            })\r\n            .on(\"keydown\", function (this: HTMLElement, event) {\r\n                if (event.key === \" \" || event.key === \"Spacebar\" || event.code === \"Space\" || event.key === \"Enter\") {\r\n                    this.click();\r\n                    event.preventDefault();\r\n                }\r\n            })\r\n            .on(\"mousemove\", this.mouseMove)\r\n            .on(\"mouseout\", this.mouseOut)\r\n            .append(\"i\")\r\n            ;\r\n    }\r\n\r\n    update(domNode: HTMLElement, element) {\r\n        super.update(domNode, element);\r\n        element\r\n            .classed(\"disabled\", !this.enabled())\r\n            .attr(\"title\", this.tooltip())\r\n            ;\r\n        this._i.attr(\"class\", `fa ${fa5Class(this.faChar())} fa-lg fa-fw`);\r\n    }\r\n\r\n    //  Events  ---\r\n    click() {\r\n    }\r\n\r\n    mouseMove(d, idx, groups) {\r\n    }\r\n\r\n    mouseOut(d, idx, groups) {\r\n    }\r\n\r\n    enabled(): boolean;\r\n    enabled(_: boolean): this;\r\n    enabled(_?: boolean): boolean | this {\r\n        if (!arguments.length) return this._enabled;\r\n        this._enabled = _;\r\n        return this;\r\n    }\r\n}\r\nButton.prototype._class += \" common_Button\";\r\nexport interface Button {\r\n    faChar(): string;\r\n    faChar(_: string): this;\r\n    tooltip(): string;\r\n    tooltip(_: string): this;\r\n}\r\nButton.prototype.publish(\"faChar\", \"\", \"string\", \"FontAwesome class\");\r\nButton.prototype.publish(\"tooltip\", \"\", \"string\", \"Displays as the button alt text attribute\");\r\n\r\n//  Sticky button  ---\r\nexport class StickyButton extends Button {\r\n\r\n    enter(domNode: HTMLElement, element) {\r\n        super.enter(domNode, element);\r\n    }\r\n\r\n    update(domNode: HTMLElement, element) {\r\n        super.update(domNode, element);\r\n        element.classed(\"selected\", this.selected());\r\n    }\r\n}\r\nStickyButton.prototype._class += \" common_StickyButton\";\r\nexport interface StickyButton {\r\n    selected(): boolean;\r\n    selected(_: boolean): this;\r\n}\r\nStickyButton.prototype.publish(\"selected\", false, \"boolean\");\r\n\r\n//  Toggle button  ---\r\nexport class ToggleButton extends StickyButton {\r\n\r\n    enter(domNode: HTMLElement, element) {\r\n        element.on(\"click.sel\", (event) => {\r\n            this\r\n                .selected(!this.selected())\r\n                .render()\r\n                ;\r\n            event.preventDefault();\r\n        });\r\n        super.enter(domNode, element);\r\n    }\r\n}\r\nToggleButton.prototype._class += \" common_ToggleButton\";\r\n\r\n//  Spacer  ---\r\nexport class Spacer extends HTMLWidget {\r\n\r\n    enter(domNode: HTMLElement, element) {\r\n        super.enter(domNode, element);\r\n        element\r\n            .attr(\"class\", this.vline() ? \"spacer vline\" : \"spacer\")\r\n            .attr(\"href\", \"#\")\r\n            .append(\"i\")\r\n            ;\r\n    }\r\n}\r\nSpacer.prototype._class += \" common_Spacer\";\r\n\r\nexport interface Spacer {\r\n    vline(): boolean;\r\n    vline(_: boolean): this;\r\n}\r\nSpacer.prototype.publish(\"vline\", true, \"boolean\");\r\n\r\nexport class SelectDropDown extends HTMLWidget {\r\n    private _enabled = true;\r\n\r\n    constructor() {\r\n        super();\r\n        this._tag = \"select\";\r\n    }\r\n\r\n    enabled(): boolean;\r\n    enabled(_: boolean): this;\r\n    enabled(_?: boolean): boolean | this {\r\n        if (!arguments.length) return this._enabled;\r\n        this._enabled = _;\r\n        return this;\r\n    }\r\n\r\n    enter(domNode: HTMLSelectElement, element) {\r\n        super.enter(domNode, element);\r\n        const context = this;\r\n        element.on(\"change\", function (d) {\r\n            const values = context.values();\r\n            for (const key in context.values()) {\r\n                if (this.value === values[key]) {\r\n                    context.selected(key);\r\n                    break;\r\n                }\r\n            }\r\n            context.click(this.value);\r\n        });\r\n    }\r\n\r\n    update(domNode: HTMLElement, element) {\r\n        super.update(domNode, element);\r\n        element\r\n            .classed(\"disabled\", !this.enabled())\r\n            .attr(\"title\", this.tooltip())\r\n            ;\r\n\r\n        const values = this.values();\r\n\r\n        const options = element.selectAll(\".icon-bar-select-option\").data(Object.keys(values));\r\n        const optionUpdate = options.enter().append(\"option\")\r\n            .attr(\"class\", \"icon-bar-select-option\")\r\n            .merge(options)\r\n            .attr(\"value\", r => values[r])\r\n            .attr(\"selected\", r => r === this.selected() ? \"selected\" : null)\r\n            .text(r => r)\r\n            ;\r\n        options.exit().remove();\r\n        optionUpdate.order();\r\n    }\r\n\r\n    //  Events  ---\r\n    click(value) {\r\n    }\r\n\r\n    mouseMove(d, idx, groups) {\r\n    }\r\n\r\n    mouseOut(d, idx, groups) {\r\n    }\r\n}\r\nSelectDropDown.prototype._class += \" common_SelectDropDown\";\r\nexport interface SelectDropDown {\r\n    values(): { [key: string]: string };\r\n    values(_: { [key: string]: string }): this;\r\n    selected(): string;\r\n    selected(_: string): this;\r\n    tooltip(): string;\r\n    tooltip(_: string): this;\r\n}\r\nSelectDropDown.prototype.publish(\"values\", {}, \"object\", \"Label, Values\");\r\nSelectDropDown.prototype.publish(\"selected\", \"\", \"string\", \"Selected Item\");\r\nSelectDropDown.prototype.publish(\"tooltip\", \"\", \"string\", \"Displays as the button alt text attribute\");\r\n\r\n//  IconBar  ---\r\nexport class IconBar extends HTMLWidget {\r\n    _divIconBar;\r\n    _buttons: Widget[] = [];\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        super.enter(domNode, element);\r\n        this._divIconBar = element.append(\"div\")\r\n            .attr(\"class\", \"icon-bar\")\r\n            ;\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n\r\n        let buttons = this.buttons().filter(button => this.hiddenButtons().indexOf(button) < 0);\r\n        buttons = buttons.reduce((prev, item, idx) => {\r\n            if (item instanceof Spacer) {\r\n                if ((prev.length === 0 || idx === buttons.length - 1)) {\r\n                    return prev;\r\n                } else if (buttons[idx + 1] instanceof Spacer) {\r\n                    return prev;\r\n                }\r\n            }\r\n            prev.push(item);\r\n            return prev;\r\n        }, []);\r\n        const icons = this._divIconBar.selectAll(\".icon-bar-item\").data(buttons, (d: Widget) => d.id());\r\n        icons.enter().append(\"div\")\r\n            .attr(\"class\", \"icon-bar-item\")\r\n            .each(function (this: HTMLElement, d: Widget) {\r\n                d.target(this);\r\n            })\r\n            .merge(icons)\r\n            .each(function (d: Widget) {\r\n                d.render();\r\n            })\r\n            ;\r\n        icons.exit()\r\n            .each(function (d: Widget) {\r\n                d.target(null);\r\n            })\r\n            .remove()\r\n            ;\r\n        icons.order();\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        this.buttons().forEach(b => b.target(null));\r\n        super.exit(domNode, element);\r\n    }\r\n}\r\nIconBar.prototype._class += \" common_IconBar\";\r\n\r\nexport interface IconBar {\r\n    buttons(): Widget[];\r\n    buttons(_: Widget[]): this;\r\n    hiddenButtons(): Widget[];\r\n    hiddenButtons(_: Widget[]): this;\r\n}\r\nIconBar.prototype.publish(\"buttons\", [], \"widgetArray\", null, { internal: true });\r\nIconBar.prototype.publish(\"hiddenButtons\", [], \"widgetArray\", null, { internal: true });\r\n\r\n//  SelectionBar  ---\r\nexport class SelectionButton extends StickyButton {\r\n    _owner: SelectionBar;\r\n\r\n    enter(domNode: HTMLElement, element) {\r\n        element.on(\"click.sel\", (event) => {\r\n            this.selected(true).render();\r\n            event.preventDefault();\r\n        });\r\n        super.enter(domNode, element);\r\n    }\r\n\r\n    selected(): boolean;\r\n    selected(_: boolean): this;\r\n    selected(_?: boolean): boolean | this {\r\n        const retVal = super.selected.apply(this, arguments);\r\n        if (_ && this._owner) {\r\n            this._owner.buttons().filter(sb => sb !== this && sb instanceof SelectionButton).forEach((sb: SelectionButton) => sb.selected(false).render());\r\n            this._owner.selected(this);\r\n        }\r\n        return retVal;\r\n    }\r\n}\r\nSelectionButton.prototype._class += \" common_SelectionButton\";\r\n\r\nexport class SelectionBar extends IconBar {\r\n\r\n    buttons(): Array<SelectionButton | Spacer>;\r\n    buttons(_: Array<SelectionButton | Spacer>): this;\r\n    buttons(_?: Array<SelectionButton | Spacer>): Array<SelectionButton | Spacer> | this {\r\n        const retVal = super.buttons.apply(this, arguments);\r\n        if (arguments.length) {\r\n            _.filter(b => b instanceof SelectionButton).forEach((sb: SelectionButton) => {\r\n                sb._owner = this;\r\n            });\r\n        }\r\n        return retVal;\r\n    }\r\n\r\n    //  Events ---\r\n    selected(row: SelectionButton) {\r\n    }\r\n}\r\nSelectionBar.prototype._class += \" common_SelectionBar\";\r\n\r\n//  Titlebar  ---\r\nexport class TitleBar extends IconBar {\r\n\r\n    _divTitle;\r\n    _divTitleIcon;\r\n    _divTitleText;\r\n    _divDescriptionText;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    enter(domNode, element) {\r\n        this._divTitle = element.append(\"div\")\r\n            .attr(\"class\", \"title-title\")\r\n            .style(\"min-width\", \"0px\")\r\n            ;\r\n        this._divTitleIcon = this._divTitle.append(\"div\")\r\n            .attr(\"class\", \"title-icon\")\r\n            .style(\"font-family\", this.titleIconFont())\r\n            .style(\"font-size\", `${this.titleIconFontSize()}px`)\r\n            .style(\"width\", `${this.titleIconFontSize()}px`)\r\n            ;\r\n        this._divTitle.append(\"div\")\r\n            .attr(\"class\", \"data-count\")\r\n            ;\r\n        this._divTitleText = this._divTitle.append(\"div\")\r\n            .attr(\"class\", \"title-text\")\r\n            .style(\"font-family\", this.titleFont())\r\n            .style(\"font-size\", `${this.titleFontSize()}px`)\r\n            ;\r\n        this._divDescriptionText = this._divTitle.append(\"div\")\r\n            .attr(\"class\", \"description-text\")\r\n            .style(\"font-family\", this.descriptionFont())\r\n            ;\r\n\r\n        super.enter(domNode, element);\r\n    }\r\n\r\n    update(domNode, element) {\r\n        this._divTitleIcon\r\n            .text(this.titleIcon())\r\n            .style(\"display\", this.titleIcon() !== \"\" ? \"inline-block\" : \"none\")\r\n            ;\r\n        this._divTitleText\r\n            .text(this.title())\r\n            .attr(\"title\", this.title())\r\n            ;\r\n        this._divDescriptionText\r\n            .style(\"display\", this.description_exists() ? \"block\" : \"none\")\r\n            .style(\"font-size\", this.description_exists() ? `${this.descriptionFontSize()}px` : null)\r\n            .style(\"line-height\", this.description_exists() ? `${this.descriptionFontSize()}px` : null)\r\n            .text(this.description())\r\n            ;\r\n\r\n        super.update(domNode, element);\r\n    }\r\n}\r\nTitleBar.prototype._class += \" common_TitleBar\";\r\n\r\nexport interface TitleBar {\r\n    title(): string;\r\n    title(_: string): this;\r\n    titleIcon(): string;\r\n    titleIcon(_: string): this;\r\n    titleIconFont(): string;\r\n    titleIconFont(_: string): this;\r\n    titleFont(): string;\r\n    titleFont(_: string): this;\r\n    titleIconFontSize(): number;\r\n    titleIconFontSize(_: number): this;\r\n    titleFontSize(): number;\r\n    titleFontSize(_: number): this;\r\n    description(): string;\r\n    description(_: string): this;\r\n    description_exists(): boolean;\r\n    descriptionFont(): string;\r\n    descriptionFont(_: string): this;\r\n    descriptionFontSize(): number;\r\n    descriptionFontSize(_: number): this;\r\n}\r\nTitleBar.prototype.publish(\"titleIcon\", \"\", \"string\", \"Icon text\");\r\nTitleBar.prototype.publish(\"titleIconFont\", \"\", \"string\", \"Icon font-family\");\r\nTitleBar.prototype.publish(\"titleIconFontSize\", 28, \"number\", \"Icon font-size (pixels)\");\r\nTitleBar.prototype.publish(\"title\", \"\", \"string\", \"Title text\");\r\nTitleBar.prototype.publish(\"titleFont\", \"\", \"string\", \"Title font-family\");\r\nTitleBar.prototype.publish(\"titleFontSize\", 20, \"number\", \"Title font-size (pixels)\");\r\nTitleBar.prototype.publish(\"description\", null, \"string\", \"Description text\", null, { optional: true });\r\nTitleBar.prototype.publish(\"descriptionFont\", \"\", \"string\", \"Description font-family\");\r\nTitleBar.prototype.publish(\"descriptionFontSize\", 10, \"number\", \"Description font-size (pixels)\");\r\n","﻿import { pointer as d3Pointer } from \"d3-selection\";\r\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from \"d3-zoom\";\r\nimport { SVGWidget } from \"./SVGWidget.ts\";\r\nimport { safeRaise } from \"./Utility.ts\";\r\nimport { Button, IconBar, Spacer, ToggleButton } from \"./TitleBar.ts\";\r\n\r\nimport \"../src/SVGZoomWidget.css\";\r\n\r\nexport type MouseMode = \"zoom\" | \"marqueeSelection\";\r\n\r\nexport class SVGZoomWidget extends SVGWidget {\r\n\r\n    protected _renderElement;\r\n\r\n    private _currZoom;\r\n    protected _zoomScale = 1;\r\n    protected _zoomTranslate = [0, 0];\r\n    protected _zoomRoot;\r\n    protected _zoomGrab;\r\n    protected _zoomG;\r\n    private _prevZoomable;\r\n\r\n    protected _marqueeSelectionRoot;\r\n    protected _marqueeSelection;\r\n    protected _marqueeAnchor: { x: number, y: number } | null = null;\r\n\r\n    protected _autoSelectionMode = false;\r\n\r\n    protected _toggleMarqueeSelection = new ToggleButton().faChar(\"fa-square-o\").tooltip(\"Marquee Selection\")\r\n        .on(\"click\", () => {\r\n            if (this._toggleMarqueeSelection.selected()) {\r\n                this.mouseMode(\"marqueeSelection\");\r\n            }\r\n            this.updateIconBar();\r\n        })\r\n        ;\r\n\r\n    protected _toggleZoom = new ToggleButton().faChar(\"fa-mouse-pointer\").tooltip(\"Zoom\")\r\n        .on(\"click\", () => {\r\n            if (this._toggleZoom.selected()) {\r\n                this.mouseMode(\"zoom\");\r\n            }\r\n            this.updateIconBar();\r\n        })\r\n        ;\r\n\r\n    _iconBar = new IconBar()\r\n        .buttons([\r\n            this._toggleMarqueeSelection,\r\n            this._toggleZoom,\r\n            new Spacer().vline(false),\r\n            new Button().faChar(\"fa-arrows-alt\").tooltip(\"Zoom to fit\")\r\n                .on(\"click\", () => {\r\n                    this.zoomToFit();\r\n                }),\r\n            new Spacer().vline(false),\r\n            new Button().faChar(\"fa-plus\").tooltip(\"Zoom in\")\r\n                .on(\"click\", () => {\r\n                    this.zoomPlus();\r\n                }),\r\n            new Button().faChar(\"fa-minus\").tooltip(\"Zoom out\")\r\n                .on(\"click\", () => {\r\n                    this.zoomMinus();\r\n                })\r\n        ])\r\n        ;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._currZoom = d3Zoom()\r\n            .scaleExtent([0.05, 20])\r\n            .on(\"zoom end\", (event) => {\r\n                this.onZoomed(event);\r\n            })\r\n            ;\r\n    }\r\n\r\n    getScreenBBox(target: any) {\r\n        let targetel = target;\r\n\r\n        while (targetel.getScreenCTM == null && targetel.parentNode == null) {\r\n            targetel = targetel.parentNode;\r\n        }\r\n\r\n        const bbox: any = {};\r\n        const matrix = targetel.getScreenCTM();\r\n        const tbbox = targetel.getBBox();\r\n        const width = tbbox.width;\r\n        const height = tbbox.height;\r\n        const x = tbbox.x;\r\n        const y = tbbox.y;\r\n        const point = this._placeholderElement.node().createSVGPoint();\r\n        point.x = x;\r\n        point.y = y;\r\n\r\n        bbox.nw = point.matrixTransform(matrix);\r\n        point.x += width;\r\n        bbox.ne = point.matrixTransform(matrix);\r\n        point.y += height;\r\n        bbox.se = point.matrixTransform(matrix);\r\n        point.x -= width;\r\n        bbox.sw = point.matrixTransform(matrix);\r\n        point.y -= height / 2;\r\n        bbox.w = point.matrixTransform(matrix);\r\n        point.x += width;\r\n        bbox.e = point.matrixTransform(matrix);\r\n        point.x -= width / 2;\r\n        point.y -= height / 2;\r\n        bbox.n = point.matrixTransform(matrix);\r\n        point.y += height;\r\n        bbox.s = point.matrixTransform(matrix);\r\n\r\n        return {\r\n            x: bbox.nw.x,\r\n            y: bbox.nw.y,\r\n            width: bbox.se.x - bbox.nw.x,\r\n            height: bbox.se.y - bbox.nw.y\r\n        };\r\n    }\r\n\r\n    zoomScale(): number {\r\n        return this._zoomScale;\r\n    }\r\n\r\n    zoomTranslate(): number[] {\r\n        return this._zoomTranslate;\r\n    }\r\n\r\n    zoomExtent(range): void {\r\n        this._currZoom.scaleExtent(range);\r\n    }\r\n\r\n    zoomTo(translate?, scale?, transitionDuration = 250) {\r\n        translate = translate || this._zoomTranslate;\r\n        scale = scale || this._zoomScale;\r\n        transitionDuration = transitionDuration === undefined ? this.zoomDuration() : transitionDuration;\r\n\r\n        if (this._zoomRoot) {\r\n            this._zoomRoot.transition().duration(transitionDuration)\r\n                .call(this._currZoom.transform, d3ZoomIdentity.translate(translate[0], translate[1]).scale(scale))\r\n                ;\r\n        }\r\n    }\r\n\r\n    zoomPlus() {\r\n        this._zoomRoot.transition()\r\n            .call(this._currZoom.scaleBy, 1.33)\r\n            ;\r\n    }\r\n\r\n    zoomMinus() {\r\n        this._zoomRoot.transition()\r\n            .call(this._currZoom.scaleBy, 1 / 1.33)\r\n            ;\r\n    }\r\n\r\n    centerOnBBox(bbox, transitionDuration?) {\r\n        if (bbox.width && bbox.height) {\r\n            const x = bbox.x + bbox.width / 2;\r\n            const y = bbox.y + bbox.height / 2;\r\n            const width = this.width();\r\n            const height = this.height();\r\n\r\n            const scale = this.zoomScale();\r\n            const translate = [width / 2 - scale * x, height / 2 - scale * y];\r\n            this.zoomTo(translate, scale, transitionDuration);\r\n        }\r\n    }\r\n\r\n    getRenderElementBBox() {\r\n        return this._renderElement.node().getBBox();\r\n    }\r\n\r\n    calcZoomToBBox(bbox, widthOnly: boolean = false, scale?: number) {\r\n        const width = this.width();\r\n        const height = this.height();\r\n        if (bbox.width && bbox.height) {\r\n            const x = bbox.x + bbox.width / 2;\r\n            const y = bbox.y + bbox.height / 2;\r\n            const dx = bbox.width;\r\n            const dy = bbox.height;\r\n\r\n            let newScale = scale || 1 / (widthOnly ? dx / width : Math.max(dx / width, dy / height));\r\n            if (this.zoomToFitLimit_exists() && newScale > this.zoomToFitLimit()) {\r\n                newScale = this.zoomToFitLimit();\r\n            }\r\n            const translate = [width / 2 - newScale * x, height / 2 - newScale * y];\r\n            return { translate, newScale };\r\n        }\r\n        return { translate: [width / 2, height / 2], newScale: scale };\r\n    }\r\n\r\n    zoomToBBox(bbox, transitionDuration?, widthOnly: boolean = false, scale?: number) {\r\n        const { translate, newScale } = this.calcZoomToBBox(bbox, widthOnly, scale);\r\n        this.zoomTo(translate, newScale, transitionDuration);\r\n    }\r\n\r\n    zoomToScale(scale, transitionDuration?) {\r\n        if (this._renderElement) {\r\n            const bbox = this.getRenderElementBBox();\r\n            this.zoomToBBox(bbox, transitionDuration, undefined, scale);\r\n        }\r\n    }\r\n\r\n    zoomToWidth(transitionDuration?) {\r\n        if (this._renderElement) {\r\n            const bbox = this.getRenderElementBBox();\r\n            this.zoomToBBox(bbox, transitionDuration, true);\r\n        }\r\n    }\r\n\r\n    zoomToFit(transitionDuration?) {\r\n        if (this._renderElement) {\r\n            const bbox = this.getRenderElementBBox();\r\n            this.zoomToBBox(bbox, transitionDuration);\r\n        }\r\n    }\r\n\r\n    onZoomed(event) {\r\n        if (event?.transform && this.mouseMode() === \"zoom\") {\r\n            this.zoomed(event.transform);\r\n        }\r\n    }\r\n\r\n    zoomed(transform) {\r\n        this._zoomScale = transform.k;\r\n        this._zoomTranslate = [transform.x, transform.y];\r\n        this._zoomG.attr(\"transform\", transform);\r\n    }\r\n\r\n    updateIconBar() {\r\n        this._toggleMarqueeSelection.selected(this.mouseMode() === \"marqueeSelection\").render();\r\n        this._toggleZoom.selected(this.mouseMode() === \"zoom\").render();\r\n    }\r\n\r\n    mousedownMarqueeSelection(event) {\r\n        const p = d3Pointer(event, this._marqueeSelectionRoot.node());\r\n        this._marqueeAnchor = { x: p[0], y: p[1] };\r\n        this._marqueeSelection = this.element().append(\"rect\")\r\n            .attr(\"class\", \"marqueeSelection\")\r\n            .attr(\"rx\", 6)\r\n            .attr(\"ry\", 6)\r\n            .attr(\"x\", p[0])\r\n            .attr(\"y\", p[1])\r\n            .attr(\"width\", 0)\r\n            .attr(\"height\", 0)\r\n            ;\r\n        this.startMarqueeSelection();\r\n    }\r\n\r\n    mousemoveMarqueeSelection(event) {\r\n        if (this._marqueeSelection && this._marqueeAnchor) {\r\n            const p = d3Pointer(event, this._marqueeSelectionRoot.node());\r\n\r\n            const x = Math.min(p[0], this._marqueeAnchor.x);\r\n            const y = Math.min(p[1], this._marqueeAnchor.y);\r\n            const w = Math.abs(p[0] - this._marqueeAnchor.x);\r\n            const h = Math.abs(p[1] - this._marqueeAnchor.y);\r\n\r\n            this._marqueeSelection\r\n                .attr(\"x\", x)\r\n                .attr(\"y\", y)\r\n                .attr(\"width\", w)\r\n                .attr(\"height\", h)\r\n                ;\r\n\r\n            this.updateMarqueeSelection({\r\n                x: (x - this._zoomTranslate[0]) / this._zoomScale,\r\n                y: (y - this._zoomTranslate[1]) / this._zoomScale,\r\n                width: w / this._zoomScale,\r\n                height: h / this._zoomScale\r\n            });\r\n        }\r\n    }\r\n\r\n    mouseupMarqueeSelection() {\r\n        if (this._marqueeSelection) {\r\n            this._marqueeSelection.remove();\r\n            delete this._marqueeSelection;\r\n            if (this._autoSelectionMode) {\r\n                this._autoSelectionMode = false;\r\n                this.mouseMode(\"zoom\");\r\n                this.updateIconBar();\r\n            }\r\n            this.endMarqueeSelection();\r\n        }\r\n    }\r\n\r\n    enter(domNode, _element) {\r\n        super.enter(domNode, _element);\r\n        _element.style(\"user-select\", \"none\");\r\n\r\n        this._marqueeSelectionRoot = _element.append(\"rect\")\r\n            .attr(\"class\", \"zoomBackground\")\r\n            .attr(\"width\", this.width())\r\n            .attr(\"height\", this.height())\r\n            .style(\"fill\", \"transparent\")\r\n            .style(\"cursor\", \"crosshair\")\r\n            .on(\"mousedown\", (event) => {\r\n                this.mousedownMarqueeSelection(event);\r\n            })\r\n            .on(\"mousemove\", (event) => {\r\n                this.mousemoveMarqueeSelection(event);\r\n            })\r\n            .on(\"mouseup mouseout\", () => {\r\n                this.mouseupMarqueeSelection();\r\n            })\r\n            ;\r\n\r\n        this._zoomRoot = _element.append(\"g\");\r\n\r\n        this._zoomGrab = this._zoomRoot.append(\"rect\")\r\n            .attr(\"class\", \"zoomBackground\")\r\n            .attr(\"width\", this.width())\r\n            .attr(\"height\", this.height())\r\n            .style(\"fill\", \"transparent\")\r\n            .on(\"mousedown\", (event) => {\r\n                if (event.shiftKey && this.mouseMode() === \"zoom\") {\r\n                    event.stopPropagation();\r\n                    this.mouseMode(\"marqueeSelection\");\r\n                    this._autoSelectionMode = true;\r\n                    this.mousedownMarqueeSelection(event);\r\n                }\r\n            })\r\n            ;\r\n        this._zoomG = this._zoomRoot.append(\"g\");\r\n        this._renderElement = this._zoomG.append(\"g\");\r\n\r\n        if (this._prevZoomable !== this.zoomable()) {\r\n            if (this.zoomable()) {\r\n                this._zoomRoot.call(this._currZoom);\r\n            } else {\r\n                this._zoomRoot.on(\".zoom\", null);\r\n            }\r\n            this._prevZoomable = this.zoomable();\r\n        }\r\n\r\n        this._iconBar.target(this._zoomRoot.node());\r\n    }\r\n\r\n    update(domNode, element) {\r\n        super.update(domNode, element);\r\n\r\n        this._zoomGrab\r\n            .attr(\"width\", this.width())\r\n            .attr(\"height\", this.height())\r\n            ;\r\n\r\n        this._marqueeSelectionRoot\r\n            .attr(\"width\", this.width())\r\n            .attr(\"height\", this.height())\r\n            ;\r\n\r\n        this._iconBar\r\n            .visible(this.zoomable() && this.showToolbar())\r\n            .render((w: IconBar) => {\r\n                const bbox = w.getBBox();\r\n                w.reposition({ x: this.width() - bbox.width - 4, y: -4 });\r\n            })\r\n            ;\r\n    }\r\n\r\n    exit(domNode, element) {\r\n        this._iconBar.target(null);\r\n        super.exit(domNode, element);\r\n    }\r\n\r\n    //  Events\r\n    startMarqueeSelection() {\r\n    }\r\n\r\n    updateMarqueeSelection(rect: { x: number, y: number, width: number, height: number }) {\r\n    }\r\n\r\n    endMarqueeSelection() {\r\n    }\r\n}\r\nSVGZoomWidget.prototype._class += \" common_SVGZoomWidget\";\r\n\r\nexport interface SVGZoomWidget {\r\n    showToolbar(): boolean;\r\n    showToolbar(_: boolean): this;\r\n    zoomable(): boolean;\r\n    zoomable(_: boolean): this;\r\n    zoomDuration(): number;\r\n    zoomDuration(_: number): this;\r\n    zoomToFitLimit(): number;\r\n    zoomToFitLimit(_: number): this;\r\n    zoomToFitLimit_exists(): boolean;\r\n    mouseMode(_: MouseMode): this;\r\n    mouseMode(): MouseMode;\r\n}\r\nSVGZoomWidget.prototype.publish(\"showToolbar\", true, \"boolean\", \"Show Toolbar\");\r\nSVGZoomWidget.prototype.publish(\"zoomable\", true, \"boolean\", \"Enable/Disable Zooming\");\r\nSVGZoomWidget.prototype.publish(\"zoomDuration\", 250, \"number\", \"Transition Duration\");\r\nSVGZoomWidget.prototype.publish(\"zoomToFitLimit\", undefined, \"number\", \"Zoom to fit limit\", undefined, { optional: true });\r\nSVGZoomWidget.prototype.publish(\"mouseMode\", \"zoom\", \"set\", \"Mouse Mode (zoom | marqueeSelection)\", [\"zoom\", \"marqueeSelection\"]);\r\n\r\nconst _origMouseMode = SVGZoomWidget.prototype.mouseMode;\r\nSVGZoomWidget.prototype.mouseMode = function (_?, transitionDuration?) {\r\n    const retVal = _origMouseMode.apply(this, arguments);\r\n    if (arguments.length) {\r\n        if (_ === \"zoom\") {\r\n            safeRaise(this._zoomRoot.node());\r\n        } else {\r\n            safeRaise(this._marqueeSelectionRoot.node());\r\n        }\r\n        this.updateIconBar();\r\n    }\r\n    return retVal;\r\n};\r\n","import { Widget } from \"./Widget.ts\";\r\n\r\nexport class WidgetArray extends Widget {\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n}\r\nWidgetArray.prototype._class += \" common_WidgetArray\";\r\n\r\nexport interface WidgetArray {\r\n    content(): Widget[];\r\n    content(_: Widget[]): this;\r\n}\r\nWidgetArray.prototype.publish(\"content\", [], \"widgetArray\", \"Widget Array\");\r\n","export default x => () => x;\n","export default function BrushEvent(type, {\n  sourceEvent,\n  target,\n  selection,\n  mode,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    selection: {value: selection, enumerable: true, configurable: true},\n    mode: {value: mode, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n"],"ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,314,315,316,317,318,321,322,323,324,325,329,330,331,332],"mappings":"C,yiBAAa6b,EAAW,kBACXC,EAAc,SACdC,EAAgB,SCA7BC,EAAe,CACb,IAAK,6BACE,qCACP,MAAO,+BACP,IAAK,uCACL,MAAO,+BACT,ECNA,SAAA,kBAAwB,EAAM,CAC5B,IAAIC,EAAS,GAAQ,GAAIC,EAAID,EAAO,QAAQ,GAAG,EAE/C,OADIC,GAAK,IAAM,EAASR,EAAK,MAAM,EAAGQ,CAAC,KAAO,UAAS,EAAOR,EAAK,MAAMQ,EAAI,CAAC,GACvElc,EAAW,eAAeic,CAAM,EAAI,CAAC,MAAOjc,EAAWic,GAAS,MAAOP,CAAI,EAAIA,CACxF,C,oCCHA,SAAS,eAAe,EAAM,CAC5B,OAAO,UAAW,CAChB,IAAIS,EAAW,KAAK,cAChBC,EAAM,KAAK,aACf,OAAOA,IAAA,gCAAiBD,EAAS,gBAAgB,eAAA,+BAC3CA,EAAS,cAAcT,CAAI,EAC3BS,EAAS,gBAAgBC,EAAKV,CAAI,CAC1C,CACF,CAEA,SAAS,aAAa,EAAU,CAC9B,OAAO,UAAW,CAChB,OAAO,KAAK,cAAc,gBAAgBW,EAAS,MAAOA,EAAS,KAAK,CAC1E,CACF,CAEA,SAAA,gBAAwB,EAAM,CAC5B,IAAIA,EAAWpc,kBAAUyb,CAAI,EAC7B,OAAQW,EAAS,MACX,aACA,eAAA,CAAgBA,CAAQ,CAChC,C,kCCxBA,SAAS,MAAO,CAAC,CAEjB,SAAA,iBAAwB,EAAU,CAChC,OAAOC,GAAY,KAAO,KAAO,UAAW,CAC1C,OAAO,KAAK,cAAcA,CAAQ,CACpC,CACF,C,mCCHA,SAAA,iBAAwB,EAAQ,CAC1B,OAAOC,GAAW,aAAY,EAASrc,iBAASqc,CAAM,GAE1D,IAAK,IAAIC,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQE,EAAgB,MAAMD,CAAC,EAAGE,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAC3F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQE,EAAW,EAAUH,GAAS,MAAME,CAAC,EAAGE,EAAMC,EAASd,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GAC9G,EAAOU,EAAMV,MAAQ,EAAUK,EAAO,KAAKQ,EAAMA,EAAK,SAAUb,EAAGU,CAAK,KACvE,aAAcG,IAAM,EAAQ,SAAWA,EAAK,UAChD,EAASb,GAAKc,GAKpB,OAAO,IAAI7c,YAAUuc,EAAW,KAAK,QAAQ,CAC/C,C,mCCVA,SAAwBtc,QAAM,EAAG,CAC/B,OAAO6c,GAAK,KAAO,CAAC,EAAI,MAAM,QAAQA,CAAC,EAAIA,EAAI,MAAM,KAAKA,CAAC,CAC7D,C,wBCRA,SAAS5c,SAAQ,CACf,MAAO,CAAC,CACV,C,8DAEA,SAAA,oBAAwB,EAAU,CAChC,OAAOic,GAAY,KAAOjc,QAAQ,UAAW,CAC3C,OAAO,KAAK,iBAAiBic,CAAQ,CACvC,CACF,CCJA,SAAS,SAAS,EAAQ,CACxB,OAAO,UAAW,CAChB,OAAOhc,QAAMic,EAAO,MAAM,KAAM,SAAS,CAAC,CAC5C,CACF,CAEA,SAAA,oBAAwB,EAAQ,CAC9B,AACKA,EADD,OAAOA,GAAW,WAAqB,SAASA,CAAM,EAC5Chc,oBAAYgc,CAAM,EAEhC,IAAK,IAAIC,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQE,EAAY,CAAC,EAAGQ,EAAU,CAAC,EAAGP,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAC/F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQG,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GAC9D,EAAOU,EAAMV,MACfQ,EAAU,KAAKH,EAAO,KAAKQ,EAAMA,EAAK,SAAUb,EAAGU,CAAK,CAAC,EACzDM,EAAQ,KAAKH,CAAI,GAKvB,OAAO,IAAIvc,YAAUkc,EAAWQ,CAAO,CACzC,C,sCCxBA,SAAA,gBAAwB,EAAU,CAChC,OAAO,UAAW,CAChB,OAAO,KAAK,QAAQZ,CAAQ,CAC9B,CACF,C,kCAEA,SAAgB,aAAa,EAAU,CACrC,OAAO,SAAS,EAAM,CACpB,OAAOS,EAAK,QAAQT,CAAQ,CAC9B,CACF,CCRA,IAAIa,EAAO,MAAM,UAAU,KAE3B,SAAS,UAAU,EAAO,CACxB,OAAO,UAAW,CAChB,OAAOA,EAAK,KAAK,KAAK,SAAUC,CAAK,CACvC,CACF,CAEA,SAAS,YAAa,CACpB,OAAO,KAAK,iBACd,CAEA,SAAA,oBAAwB,EAAO,CAC7B,OAAO,KAAK,OAAOA,GAAS,KAAO,WAC7B,UAAU,OAAOA,GAAU,WAAaA,EAAQ,aAAaA,CAAK,CAAC,CAAC,CAC5E,C,sCCfA,IAAI3c,EAAS,MAAM,UAAU,OAE7B,SAAS,UAAW,CAClB,OAAO,MAAM,KAAK,KAAK,QAAQ,CACjC,CAEA,SAAS,eAAe,EAAO,CAC7B,OAAO,UAAW,CAChB,OAAOA,EAAO,KAAK,KAAK,SAAU2c,CAAK,CACzC,CACF,CAEA,SAAA,uBAAwB,EAAO,CAC7B,OAAO,KAAK,UAAUA,GAAS,KAAO,SAChC,eAAe,OAAOA,GAAU,WAAaA,EAAQ,aAAaA,CAAK,CAAC,CAAC,CACjF,C,yCCdA,SAAA,iBAAwB,EAAO,CACzB,OAAOA,GAAU,aAAY,EAAQ1c,gBAAQ0c,CAAK,GAEtD,IAAK,IAAIZ,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQE,EAAgB,MAAMD,CAAC,EAAGE,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAC3F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQE,EAAW,EAAUH,GAAK,CAAC,EAAGI,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GAC3F,EAAOU,EAAMV,KAAOkB,EAAM,KAAKL,EAAMA,EAAK,SAAUb,EAAGU,CAAK,GAC/DE,EAAS,KAAKC,CAAI,EAKxB,OAAO,IAAIpc,YAAU+b,EAAW,KAAK,QAAQ,CAC/C,C,mCCfA,SAAA,eAAwB,EAAQ,CAC9B,OAAW,MAAMY,EAAO,MAAM,CAChC,C,iCCCA,SAAA,eAA0B,CACxB,OAAO,IAAI1c,YAAU,KAAK,QAAU,KAAK,QAAQ,IAAIC,cAAM,EAAG,KAAK,QAAQ,CAC7E,C,gCAEA,SAAgB,UAAU,EAAQ,EAAO,CACvC,KAAK,cAAgB0c,EAAO,cAC5B,KAAK,aAAeA,EAAO,aAC3B,KAAK,MAAQ,KACb,KAAK,QAAUA,EACf,KAAK,SAAWC,CAClB,CAEA,UAAU,UAAY,CACpB,YAAa,UACb,YAAa,SAAS,EAAO,CAAE,OAAO,KAAK,QAAQ,aAAaC,EAAO,KAAK,KAAK,CAAG,EACpF,aAAc,SAAS,EAAO,EAAM,CAAE,OAAO,KAAK,QAAQ,aAAaA,EAAOC,CAAI,CAAG,EACrF,cAAe,SAAS,EAAU,CAAE,OAAO,KAAK,QAAQ,cAAcpB,CAAQ,CAAG,EACjF,iBAAkB,SAAS,EAAU,CAAE,OAAO,KAAK,QAAQ,iBAAiBA,CAAQ,CAAG,CACzF,ECrBA,SAAA,mBAAwB,EAAG,CACzB,OAAO,UAAW,CAChB,OAAOW,CACT,CACF,C,qCCAA,SAAS,UAAU,EAAQ,EAAO,EAAO,EAAQ,EAAM,EAAM,CAS3D,IARA,IAAIf,EAAI,EACJa,EACAY,EAAcf,EAAM,OACpBgB,EAAaC,EAAK,OAKf3B,EAAI0B,EAAY,EAAE1B,GACnB,EAAOU,EAAMV,KACf,EAAK,SAAW2B,EAAK3B,GACrB,EAAOA,GAAKa,GAEZ,EAAMb,GAAK,IAAI,UAAUqB,EAAQM,EAAK3B,EAAE,EAK5C,KAAOA,EAAIyB,EAAa,EAAEzB,GACpB,EAAOU,EAAMV,MACf,EAAKA,GAAKa,EAGhB,CAEA,SAAS,QAAQ,EAAQ,EAAO,EAAO,EAAQ,EAAM,EAAM,EAAK,CAC9D,IAAIb,EACAa,EACAe,EAAiB,IAAI,IACrBH,EAAcf,EAAM,OACpBgB,EAAaC,EAAK,OAClBE,EAAgB,MAAMJ,CAAW,EACjCK,EAIJ,IAAK,EAAI,EAAG9B,EAAIyB,EAAa,EAAEzB,GACzB,EAAOU,EAAMV,MACf,EAAUA,GAAK,EAAW+B,EAAI,KAAKlB,EAAMA,EAAK,SAAUb,EAAGU,CAAK,EAAI,GAChEkB,EAAe,IAAIE,CAAQ,EAC7B,EAAK9B,GAAKa,EAEVe,EAAe,IAAIE,EAAUjB,CAAI,GAQvC,IAAK,EAAI,EAAGb,EAAI0B,EAAY,EAAE1B,EAC5B,EAAW+B,EAAI,KAAKV,EAAQM,EAAK3B,GAAIA,EAAG2B,CAAI,EAAI,IAC5C,EAAOC,EAAe,IAAIE,CAAQ,IACpC,EAAO9B,GAAKa,EACZ,EAAK,SAAWc,EAAK3B,GACrB4B,EAAe,OAAOE,CAAQ,GAE9B,EAAM9B,GAAK,IAAI,UAAUqB,EAAQM,EAAK3B,EAAE,EAK5C,IAAK,EAAI,EAAGA,EAAIyB,EAAa,EAAEzB,GACxB,EAAOU,EAAMV,KAAQ4B,EAAe,IAAIC,EAAU7B,EAAE,IAAMa,IAC7D,EAAKb,GAAKa,EAGhB,CAEA,SAAS,MAAM,EAAM,CACnB,OAAOA,EAAK,QACd,CAEA,SAAA,aAAwB,EAAO,EAAK,CAClC,GAAI,CAAC,UAAU,OAAQ,OAAO,MAAM,KAAK,KAAM,KAAK,EAEpD,IAAImB,EAAOD,EAAM,QAAU,UACvBf,EAAU,KAAK,SACfV,EAAS,KAAK,QAEd,OAAO2B,GAAU,aAAY,EAAQrd,mBAASqd,CAAK,GAEvD,IAAK,IAAI1B,EAAID,EAAO,OAAQc,EAAa,MAAMb,CAAC,EAAG2B,EAAY,MAAM3B,CAAC,EAAG4B,EAAW,MAAM5B,CAAC,EAAGE,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAAG,CAC/G,IAAIY,EAASL,EAAQP,GACjBC,EAAQJ,EAAOG,GACfgB,EAAcf,EAAM,OACpBiB,EAAO,UAAUM,EAAM,KAAKZ,EAAQA,GAAUA,EAAO,SAAUZ,EAAGO,CAAO,CAAC,EAC1EU,EAAaC,EAAK,OAClBS,EAAa,EAAM3B,GAAS,MAAMiB,CAAU,EAC5CW,EAAc,EAAO5B,GAAS,MAAMiB,CAAU,EAGlDM,EAAKX,EAAQX,EAAO0B,EAAYC,EAAa,EAFxB5B,GAAS,MAAMgB,CAAW,EAESE,EAAMI,CAAG,EAKjE,IAAK,IAAIO,EAAK,EAAGC,EAAK,EAAGC,EAAUhB,EAAMc,EAAKZ,EAAY,EAAEY,EAC1D,GAAI,EAAWF,EAAWE,GAAK,CAE7B,IADIA,GAAMC,IAAI,EAAKD,EAAK,GACjB,EAAE,EAAOD,EAAYE,KAAQ,EAAEA,EAAKb,IAC3C,EAAS,MAAQF,GAAQ,IAC3B,CAEJ,CAKA,MAHA,GAAS,IAAI3c,YAAUuc,EAAQJ,CAAO,EACtC,EAAO,OAASkB,EAChB,EAAO,MAAQC,EACRf,CACT,C,+BAQA,SAAS,UAAU,EAAM,CACvB,OAAO,OAAOO,GAAS,UAAY,WAAYA,EAC3CA,EACA,MAAM,KAAKA,CAAI,CACrB,CC5HA,SAAA,cAA0B,CACxB,OAAO,IAAI7c,YAAU,KAAK,OAAS,KAAK,QAAQ,IAAIC,cAAM,EAAG,KAAK,QAAQ,CAC5E,C,+BCLA,SAAA,aAAwB,EAAS,EAAU,EAAQ,CACjD,IAAImd,EAAQ,KAAK,MAAM,EAAGd,EAAS,KAAMe,EAAO,KAAK,KAAK,EAY1D,OAXI,OAAOM,GAAY,YACrB,EAAQA,EAAQP,CAAK,EACrB,AAAWA,IAAQA,EAAM,UAAU,GAEnC,EAAQA,EAAM,OAAOO,EAAU,EAAE,EAE/BC,GAAY,OACd,EAASA,EAAStB,CAAM,EACxB,AAAYA,IAASA,EAAO,UAAU,GAEpCuB,GAAU,KAAMR,EAAK,OAAO,EAAQQ,EAAOR,CAAI,EAC5CD,GAASd,EAASc,EAAM,MAAMd,CAAM,CAAC,CAAC,MAAM,EAAIA,CACzD,C,+BCZA,SAAA,gBAAwB,EAAS,CAG/B,IAAK,IAFDwB,EAAYC,EAAQ,UAAYA,EAAQ,UAAU,EAAIA,EAEjDC,EAAU,KAAK,QAASC,EAAUH,EAAU,QAASI,EAAKF,EAAQ,OAAQG,EAAKF,EAAQ,OAAQxC,EAAI,KAAK,IAAIyC,EAAIC,CAAE,EAAGC,EAAa,MAAMF,CAAE,EAAGvC,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EACpK,IAAK,IAAI0C,EAASL,EAAQrC,GAAI2C,EAASL,EAAQtC,GAAIE,EAAIwC,EAAO,OAAQE,EAAQ,EAAO5C,GAAS,MAAME,CAAC,EAAGE,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GACxH,EAAOmD,EAAOnD,IAAMoD,EAAOpD,MAC7B,EAAMA,GAAKa,GAKjB,KAAOJ,EAAIuC,EAAI,EAAEvC,EACf,EAAOA,GAAKqC,EAAQrC,GAGtB,OAAO,IAAIzb,YAAUke,EAAQ,KAAK,QAAQ,CAC5C,C,kCClBA,SAAA,eAA0B,CAExB,IAAK,IAAI5C,EAAS,KAAK,QAASG,EAAI,GAAIF,EAAID,EAAO,OAAQ,EAAEG,EAAIF,GAC/D,IAAK,IAAIG,EAAQJ,EAAOG,GAAIT,EAAIU,EAAM,OAAS,EAAGc,EAAOd,EAAMV,GAAIa,EAAM,EAAEb,GAAK,IAC1E,EAAOU,EAAMV,MACXwB,GAAQX,EAAK,wBAAwBW,CAAI,EAAI,GAAGA,EAAK,WAAW,aAAaX,EAAMW,CAAI,EAC3F,EAAOX,GAKb,OAAO,IACT,C,gCCVA,SAAA,aAAwB,EAAS,CAC/B,AAAcyC,IAAUre,YAExB,SAAS,YAAY,EAAG,EAAG,CACzB,OAAOse,GAAKC,EAAIF,EAAQC,EAAE,SAAUC,EAAE,QAAQ,EAAI,CAACD,EAAI,CAACC,CAC1D,CAEA,IAAK,IAAIlD,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQmD,EAAiB,MAAMlD,CAAC,EAAGE,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAAG,CAC/F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQgD,EAAY,EAAWjD,GAAS,MAAME,CAAC,EAAGE,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GACxG,EAAOU,EAAMV,MACf,EAAUA,GAAKa,GAGnB6C,EAAU,KAAK,WAAW,CAC5B,CAEA,OAAO,IAAIxe,YAAUue,EAAY,KAAK,QAAQ,CAAC,CAAC,MAAM,CACxD,C,+BAEA,SAASxe,YAAU,EAAG,EAAG,CACvB,OAAOse,EAAIC,EAAI,GAAKD,EAAIC,EAAI,EAAID,GAAKC,EAAI,EAAI,GAC/C,C,gCCvBA,SAAA,cAA0B,CACxB,IAAIG,EAAW,UAAU,GAGzB,MAFA,WAAU,GAAK,KACfA,EAAS,MAAM,KAAM,SAAS,EACvB,IACT,C,+BCLA,SAAA,eAA0B,CACxB,OAAO,MAAM,KAAK,IAAI,CACxB,C,gCCFA,SAAA,cAA0B,CAExB,IAAK,IAAIrD,EAAS,KAAK,QAASG,EAAI,EAAGF,EAAID,EAAO,OAAQG,EAAIF,EAAG,EAAEE,EACjE,IAAK,IAAIC,EAAQJ,EAAOG,GAAIT,EAAI,EAAGW,EAAID,EAAM,OAAQV,EAAIW,EAAG,EAAEX,EAAG,CAC/D,IAAIa,EAAOH,EAAMV,GACjB,GAAIa,EAAM,OAAOA,CACnB,CAGF,OAAO,IACT,C,+BCVA,SAAA,cAA0B,CACxB,IAAI+C,EAAO,EACX,IAAK,IAAM/C,KAAQ,KAAM,EAAE+C,EAC3B,OAAOA,CACT,C,+BCJA,SAAA,eAA0B,CACxB,MAAO,CAAC,KAAK,KAAK,CACpB,C,gCCFA,SAAA,aAAwB,EAAU,CAEhC,IAAK,IAAItD,EAAS,KAAK,QAASG,EAAI,EAAGF,EAAID,EAAO,OAAQG,EAAIF,EAAG,EAAEE,EACjE,IAAK,IAAIC,EAAQJ,EAAOG,GAAIT,EAAI,EAAGW,EAAID,EAAM,OAAQG,EAAMb,EAAIW,EAAG,EAAEX,GAC9D,EAAOU,EAAMV,KAAI2D,EAAS,KAAK9C,EAAMA,EAAK,SAAUb,EAAGU,CAAK,EAIpE,OAAO,IACT,C,+BCPA,SAASvb,aAAW,EAAM,CACxB,OAAO,UAAW,CAChB,KAAK,gBAAgBqa,CAAI,CAC3B,CACF,C,kCAEA,SAASpa,eAAa,EAAU,CAC9B,OAAO,UAAW,CAChB,KAAK,kBAAkB+a,EAAS,MAAOA,EAAS,KAAK,CACvD,CACF,C,sCAEA,SAAS9a,eAAa,EAAM,EAAO,CACjC,OAAO,UAAW,CAChB,KAAK,aAAama,EAAMyC,CAAK,CAC/B,CACF,C,sCAEA,SAAS3c,iBAAe,EAAU,EAAO,CACvC,OAAO,UAAW,CAChB,KAAK,eAAe6a,EAAS,MAAOA,EAAS,MAAO8B,CAAK,CAC3D,CACF,C,2EAEA,SAAS1c,eAAa,EAAM,EAAO,CACjC,OAAO,UAAW,CAChB,IAAIse,EAAI5B,EAAM,MAAM,KAAM,SAAS,EAC/B4B,GAAK,KAAM,KAAK,gBAAgBrE,CAAI,EACnC,KAAK,aAAaA,EAAMqE,CAAC,CAChC,CACF,C,sCAEA,SAASre,iBAAe,EAAU,EAAO,CACvC,OAAO,UAAW,CAChB,IAAIqe,EAAI5B,EAAM,MAAM,KAAM,SAAS,EAC/B4B,GAAK,KAAM,KAAK,kBAAkB1D,EAAS,MAAOA,EAAS,KAAK,EAC/D,KAAK,eAAeA,EAAS,MAAOA,EAAS,MAAO0D,CAAC,CAC5D,CACF,C,0CAEA,SAAA,eAAwB,EAAM,EAAO,CACnC,IAAI1D,EAAW1a,kBAAU+Z,CAAI,EAE7B,GAAI,UAAU,OAAS,EAAG,CACxB,IAAIqB,EAAO,KAAK,KAAK,EACrB,OAAOV,EAAS,MACVU,EAAK,eAAeV,EAAS,MAAOA,EAAS,KAAK,EAClDU,EAAK,aAAaV,CAAQ,CAClC,CAEA,OAAO,KAAK,MAAM8B,GAAS,KACpB9B,EAAS,MAAQ/a,eAAeD,aAAe,OAAO8c,GAAU,WAChE9B,EAAS,MAAQ3a,iBAAiBD,eAClC4a,EAAS,MAAQ7a,iBAAiBD,eAAAA,CAAgB8a,EAAU8B,CAAK,CAAC,CAC3E,CCxDA,SAAA,eAAwB,EAAM,CAC5B,OAAQpB,EAAK,eAAiBA,EAAK,cAAc,aACzCA,EAAK,UAAYA,GAClBA,EAAK,WACd,C,iCCFA,SAASnb,cAAY,EAAM,CACzB,OAAO,UAAW,CAChB,KAAK,MAAM,eAAe8Z,CAAI,CAChC,CACF,C,oCAEA,SAAS7Z,gBAAc,EAAM,EAAO,EAAU,CAC5C,OAAO,UAAW,CAChB,KAAK,MAAM,YAAY6Z,EAAMyC,EAAO6B,CAAQ,CAC9C,CACF,C,0EAEA,SAASle,gBAAc,EAAM,EAAO,EAAU,CAC5C,OAAO,UAAW,CAChB,IAAIie,EAAI5B,EAAM,MAAM,KAAM,SAAS,EAC/B4B,GAAK,KAAM,KAAK,MAAM,eAAerE,CAAI,EACxC,KAAK,MAAM,YAAYA,EAAMqE,EAAGC,CAAQ,CAC/C,CACF,C,wCAEA,SAAA,gBAAwB,EAAM,EAAO,EAAU,CAC7C,OAAO,UAAU,OAAS,EACpB,KAAK,MAAM7B,GAAS,KACdvc,cAAc,OAAOuc,GAAU,WAC/Brc,gBACAD,gBAAAA,CAAe6Z,EAAMyC,EAAO6B,GAAmB,EAAa,CAAC,EACnE,WAAW,KAAK,KAAK,EAAGtE,CAAI,CACpC,CAEA,SAAgB,WAAW,EAAM,EAAM,CACrC,OAAOqB,EAAK,MAAM,iBAAiBrB,CAAI,GAChC3Z,eAAYgb,CAAI,CAAC,CAAC,iBAAiBA,EAAM,IAAI,CAAC,CAAC,iBAAiBrB,CAAI,CAC7E,CClCA,SAAS,eAAe,EAAM,CAC5B,OAAO,UAAW,CAChB,OAAO,KAAKA,EACd,CACF,CAEA,SAAS,iBAAiB,EAAM,EAAO,CACrC,OAAO,UAAW,CAChB,KAAKA,GAAQyC,CACf,CACF,CAEA,SAAS,iBAAiB,EAAM,EAAO,CACrC,OAAO,UAAW,CAChB,IAAI4B,EAAI5B,EAAM,MAAM,KAAM,SAAS,EAC/B4B,GAAK,KAAM,OAAO,KAAKrE,GACtB,KAAKA,GAAQqE,CACpB,CACF,CAEA,SAAA,iBAAwB,EAAM,EAAO,CACnC,OAAO,UAAU,OAAS,EACpB,KAAK,MAAM5B,GAAS,KAChB,eAAiB,OAAOA,GAAU,WAClC,iBACA,iBAAA,CAAkBzC,EAAMyC,CAAK,CAAC,EAClC,KAAK,KAAK,CAAC,CAACzC,EACpB,C,mCC3BA,SAAS,WAAW,EAAQ,CAC1B,OAAOuE,EAAO,KAAK,CAAC,CAAC,MAAM,OAAO,CACpC,CAEA,SAAS,UAAU,EAAM,CACvB,OAAOlD,EAAK,WAAa,IAAI,UAAUA,CAAI,CAC7C,CAEA,SAAS,UAAU,EAAM,CACvB,KAAK,MAAQA,EACb,KAAK,OAAS,WAAWA,EAAK,aAAa,OAAO,GAAK,EAAE,CAC3D,CAEA,UAAU,UAAY,CACpB,IAAK,SAAS,EAAM,CACV,KAAK,OAAO,QAAQrB,CACxB,EAAI,IACN,KAAK,OAAO,KAAKA,CAAI,EACrB,KAAK,MAAM,aAAa,QAAS,KAAK,OAAO,KAAK,GAAG,CAAC,EAE1D,EACA,OAAQ,SAAS,EAAM,CACrB,IAAIQ,EAAI,KAAK,OAAO,QAAQR,CAAI,EAC5BQ,GAAK,IACP,KAAK,OAAO,OAAOA,EAAG,CAAC,EACvB,KAAK,MAAM,aAAa,QAAS,KAAK,OAAO,KAAK,GAAG,CAAC,EAE1D,EACA,SAAU,SAAS,EAAM,CACvB,OAAO,KAAK,OAAO,QAAQR,CAAI,GAAK,CACtC,CACF,EAEA,SAAS,WAAW,EAAM,EAAO,CAE/B,IADA,IAAIwE,EAAO,UAAUnD,CAAI,EAAGb,EAAI,GAAIW,EAAIsD,EAAM,OACvC,EAAEjE,EAAIW,GAAGqD,EAAK,IAAIC,EAAMjE,EAAE,CACnC,CAEA,SAAS,cAAc,EAAM,EAAO,CAElC,IADA,IAAIgE,EAAO,UAAUnD,CAAI,EAAGb,EAAI,GAAIW,EAAIsD,EAAM,OACvC,EAAEjE,EAAIW,GAAGqD,EAAK,OAAOC,EAAMjE,EAAE,CACtC,CAEA,SAAS,YAAY,EAAO,CAC1B,OAAO,UAAW,CAChB,WAAW,KAAMiE,CAAK,CACxB,CACF,CAEA,SAAS,aAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,cAAc,KAAMA,CAAK,CAC3B,CACF,CAEA,SAAS,gBAAgB,EAAO,EAAO,CACrC,OAAO,UAAW,EACfhC,EAAM,MAAM,KAAM,SAAS,EAAI,WAAa,cAAA,CAAe,KAAMgC,CAAK,CACzE,CACF,CAEA,SAAA,gBAAwB,EAAM,EAAO,CACnC,IAAIA,EAAQ,WAAWzE,EAAO,EAAE,EAEhC,GAAI,UAAU,OAAS,EAAG,CAExB,IADA,IAAIwE,EAAO,UAAU,KAAK,KAAK,CAAC,EAAGhE,EAAI,GAAIW,EAAIsD,EAAM,OAC9C,EAAEjE,EAAIW,GAAG,GAAI,CAACqD,EAAK,SAASC,EAAMjE,EAAE,EAAG,MAAO,GACrD,MAAO,EACT,CAEA,OAAO,KAAK,MAAM,OAAOiC,GAAU,WAC7B,gBAAkBA,EAClB,YACA,aAAA,CAAcgC,EAAOhC,CAAK,CAAC,CACnC,C,kCC1EA,SAAS,YAAa,CACpB,KAAK,YAAc,EACrB,CAEA,SAASnc,eAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,KAAK,YAAcmc,CACrB,CACF,C,sCAEA,SAASlc,eAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,IAAI8d,EAAI5B,EAAM,MAAM,KAAM,SAAS,EACnC,KAAK,YAAc4B,GAAY,EACjC,CACF,C,uEAEA,SAAA,eAAwB,EAAO,CAC7B,OAAO,UAAU,OACX,KAAK,KAAK5B,GAAS,KACf,YAAc,OAAOA,GAAU,WAC/Blc,eACAD,eAAAA,CAAcmc,CAAK,CAAC,EACxB,KAAK,KAAK,CAAC,CAAC,WACpB,CCxBA,SAAS,YAAa,CACpB,KAAK,UAAY,EACnB,CAEA,SAAS,aAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,KAAK,UAAYA,CACnB,CACF,CAEA,SAAS,aAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,IAAI4B,EAAI5B,EAAM,MAAM,KAAM,SAAS,EACnC,KAAK,UAAY4B,GAAY,EAC/B,CACF,CAEA,SAAA,aAAwB,EAAO,CAC7B,OAAO,UAAU,OACX,KAAK,KAAK5B,GAAS,KACf,YAAc,OAAOA,GAAU,WAC/B,aACA,aAAA,CAAcA,CAAK,CAAC,EACxB,KAAK,KAAK,CAAC,CAAC,SACpB,C,+BCxBA,SAAS,OAAQ,CACX,KAAK,aAAa,KAAK,WAAW,YAAY,IAAI,CACxD,CAEA,SAAA,eAA0B,CACxB,OAAO,KAAK,KAAK,KAAK,CACxB,C,gCCNA,SAAS,OAAQ,CACX,KAAK,iBAAiB,KAAK,WAAW,aAAa,KAAM,KAAK,WAAW,UAAU,CACzF,CAEA,SAAA,eAA0B,CACxB,OAAO,KAAK,KAAK,KAAK,CACxB,C,gCCJA,SAAA,eAAwB,EAAM,CAC5B,IAAIiC,EAAS,OAAO1E,GAAS,WAAaA,EAAOxZ,gBAAQwZ,CAAI,EAC7D,OAAO,KAAK,OAAO,UAAW,CAC5B,OAAO,KAAK,YAAY0E,EAAO,MAAM,KAAM,SAAS,CAAC,CACvD,CAAC,CACH,C,iCCJA,SAAS,cAAe,CACtB,OAAO,IACT,CAEA,SAAA,eAAwB,EAAM,EAAQ,CACpC,IAAIA,EAAS,OAAO1E,GAAS,WAAaA,EAAOvZ,gBAAQuZ,CAAI,EACzDa,EAAS8D,GAAU,KAAO,aAAe,OAAOA,GAAW,WAAaA,EAASje,iBAASie,CAAM,EACpG,OAAO,KAAK,OAAO,UAAW,CAC5B,OAAO,KAAK,aAAaD,EAAO,MAAM,KAAM,SAAS,EAAG7D,EAAO,MAAM,KAAM,SAAS,GAAK,IAAI,CAC/F,CAAC,CACH,C,iCCbA,SAAS,QAAS,CAChB,IAAIgB,EAAS,KAAK,WACdA,GAAQA,EAAO,YAAY,IAAI,CACrC,CAEA,SAAA,kBAA0B,CACxB,OAAO,KAAK,KAAK,MAAM,CACzB,C,mCCPA,SAAS,wBAAyB,CAChC,IAAI+C,EAAQ,KAAK,UAAU,EAAK,EAAG/C,EAAS,KAAK,WACjD,OAAOA,EAASA,EAAO,aAAa+C,EAAO,KAAK,WAAW,EAAIA,CACjE,CAEA,SAAS,qBAAsB,CAC7B,IAAIA,EAAQ,KAAK,UAAU,EAAI,EAAG/C,EAAS,KAAK,WAChD,OAAOA,EAASA,EAAO,aAAa+C,EAAO,KAAK,WAAW,EAAIA,CACjE,CAEA,SAAA,cAAwB,EAAM,CAC5B,OAAO,KAAK,OAAOC,EAAO,oBAAsB,sBAAsB,CACxE,C,gCCZA,SAAA,cAAwB,EAAO,CAC7B,OAAO,UAAU,OACX,KAAK,SAAS,WAAYpC,CAAK,EAC/B,KAAK,KAAK,CAAC,CAAC,QACpB,C,gCCJA,SAAS,gBAAgB,EAAU,CACjC,OAAO,SAAS,EAAO,CACrBqC,EAAS,KAAK,KAAMC,EAAO,KAAK,QAAQ,CAC1C,CACF,CAEA,SAASpe,iBAAe,EAAW,CACjC,OAAOqe,EAAU,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,IAAI,SAAS,EAAG,CACrD,IAAIhF,EAAO,GAAIQ,EAAIyE,EAAE,QAAQ,GAAG,EAEhC,OADIzE,GAAK,IAAG,EAAOyE,EAAE,MAAMzE,EAAI,CAAC,EAAG,EAAIyE,EAAE,MAAM,EAAGzE,CAAC,GAC5C,CAAC,KAAMyE,EAAS,MAAI,CAC7B,CAAC,CACH,C,0CAEA,SAAS,SAAS,EAAU,CAC1B,OAAO,UAAW,CAChB,IAAIC,EAAK,KAAK,KACd,GAAKA,EACL,KAAK,IAAIjE,EAAI,EAAGT,EAAI,GAAIO,EAAImE,EAAG,OAAQ,EAAGjE,EAAIF,EAAG,EAAEE,EAC7C,EAAIiE,EAAGjE,IAAK,CAACkE,EAAS,MAAQ,EAAE,OAASA,EAAS,OAAS,EAAE,OAASA,EAAS,KACjF,KAAK,oBAAoB,EAAE,KAAM,EAAE,SAAU,EAAE,OAAO,EAEtD,EAAG,EAAE3E,GAAK,EAGV,EAAEA,EAAG,EAAG,OAASA,EAChB,OAAO,KAAK,IAJH,CAKhB,CACF,CAEA,SAAS,MAAM,EAAU,EAAO,EAAS,CACvC,OAAO,UAAW,CAChB,IAAI0E,EAAK,KAAK,KAAME,EAAGN,EAAW,gBAAgBrC,CAAK,EACvD,GAAIyC,EAAS,KAAA,IAAIjE,EAAI,EAAGF,EAAImE,EAAG,OAAQjE,EAAIF,EAAG,EAAEE,EAC9C,IAAK,EAAIiE,EAAGjE,GAAA,CAAI,OAASkE,EAAS,MAAQC,EAAE,OAASD,EAAS,KAAM,CAClE,KAAK,oBAAoBC,EAAE,KAAMA,EAAE,SAAUA,EAAE,OAAO,EACtD,KAAK,iBAAiBA,EAAE,KAAM,EAAE,SAAWN,EAAU,EAAE,QAAUO,CAAO,EACxE,EAAE,MAAQ5C,EACV,MACF,EAEF,KAAK,iBAAiB0C,EAAS,KAAML,EAAUO,CAAO,EACtD,EAAI,CAAC,KAAMF,EAAS,KAAM,KAAMA,EAAS,KAAa,QAAiB,WAAmB,SAAO,EAC5FD,EACAA,EAAG,KAAKE,CAAC,EADL,KAAK,KAAO,CAACA,CAAC,CAEzB,CACF,C,+BAEA,SAAA,aAAwB,EAAU,EAAO,EAAS,CAChD,IAAIJ,EAAYre,iBAAewe,EAAW,EAAE,EAAG3E,EAAGW,EAAI6D,EAAU,OAAQC,EAExE,GAAI,UAAU,OAAS,EAAG,CACxB,IAAIC,EAAK,KAAK,KAAK,CAAC,CAAC,KACrB,GAAIA,EAAS,KAAA,IAAIjE,EAAI,EAAGF,EAAImE,EAAG,OAAQE,EAAGnE,EAAIF,EAAG,EAAEE,EACjD,IAAK,EAAI,EAAG,EAAIiE,EAAGjE,GAAIT,EAAIW,EAAG,EAAEX,EAC9B,IAAK,EAAIwE,EAAUxE,GAAA,CAAI,OAAS4E,EAAE,MAAQH,EAAE,OAASG,EAAE,KACrD,OAAOA,EAAE,KAAA,CAKjB,KAEA,CACA,IADA,EAAK3C,EAAQ,MAAQ,SAChB,EAAI,EAAGjC,EAAIW,EAAG,EAAEX,EAAG,KAAK,KAAK0E,EAAGF,EAAUxE,GAAIiC,EAAO4C,CAAO,CAAC,EAClE,OAAO,IAFc,CAGvB,CChEA,SAAS,cAAc,EAAM,EAAM,EAAQ,CACzC,IAAIC,EAAS1e,eAAYya,CAAI,EACzB0D,EAAQO,EAAO,YAEf,OAAOP,GAAU,WACnB,EAAQ,IAAIA,EAAMQ,EAAMC,CAAM,GAE9B,EAAQF,EAAO,SAAS,YAAY,OAAO,EACvCE,GAAQT,EAAM,UAAUQ,EAAMC,EAAO,QAASA,EAAO,UAAU,EAAG,EAAM,OAASA,EAAO,QACvFT,EAAM,UAAUQ,EAAM,GAAO,EAAK,GAGzClE,EAAK,cAAc0D,CAAK,CAC1B,CAEA,SAAS,iBAAiB,EAAM,EAAQ,CACtC,OAAO,UAAW,CAChB,OAAO,cAAc,KAAMQ,EAAMC,CAAM,CACzC,CACF,CAEA,SAAS,iBAAiB,EAAM,EAAQ,CACtC,OAAO,UAAW,CAChB,OAAO,cAAc,KAAMD,EAAMC,EAAO,MAAM,KAAM,SAAS,CAAC,CAChE,CACF,CAEA,SAAA,iBAAwB,EAAM,EAAQ,CACpC,OAAO,KAAK,MAAM,OAAOA,GAAW,WAC9B,iBACA,iBAAA,CAAkBD,EAAMC,CAAM,CAAC,CACvC,C,mCCjCA,SAAA,kBAA2B,CACzB,IAAK,IAAI1E,EAAS,KAAK,QAASG,EAAI,EAAGF,EAAID,EAAO,OAAQG,EAAIF,EAAG,EAAEE,EACjE,IAAK,IAAIC,EAAQJ,EAAOG,GAAIT,EAAI,EAAGW,EAAID,EAAM,OAAQG,EAAMb,EAAIW,EAAG,EAAEX,GAC9D,EAAOU,EAAMV,MAAI,MAAMa,EAGjC,C,mCC6BA,IAAWxa,EAAO,CAAC,IAAI,EAEvB,SAAgBC,YAAU,EAAQ,EAAS,CACzC,KAAK,QAAUga,EACf,KAAK,SAAWU,CAClB,C,gCAEA,SAAS,WAAY,CACnB,OAAO,IAAI1a,YAAU,CAAC,CAAC,SAAS,eAAe,CAAC,EAAGD,CAAI,CACzD,CAEA,SAAS,qBAAsB,CAC7B,OAAO,IACT,CAEA,YAAU,UAAY,UAAU,UAAY,CAC1C,YAAaC,YACb,OAAQC,iBACR,UAAWC,oBACX,YAAaC,oBACb,eAAgBC,uBAChB,OAAQC,iBACR,KAAMC,aACN,MAAOC,cACP,KAAMC,aACN,KAAMC,aACN,MAAOC,gBACP,UAAW,oBACX,MAAOC,cACP,KAAMC,aACN,KAAMC,aACN,MAAOC,cACP,KAAMC,aACN,KAAMC,aACN,MAAOC,cACP,KAAMC,aACN,KAAMC,eACN,MAAOC,gBACP,SAAUC,iBACV,QAASC,gBACT,KAAMC,eACN,KAAMC,aACN,MAAOC,cACP,MAAOC,cACP,OAAQC,eACR,OAAQC,eACR,OAAQC,iBACR,MAAOC,cACP,MAAOC,cACP,GAAIC,aACJ,SAAUC,kBACT,OAAO,UAAWC,gBACrB,ECrFA,SAAA,eAAwB,EAAU,CAChC,OAAO,OAAO4X,GAAa,SACrB,IAAI3X,YAAU,CAAC,CAAC,SAAS,cAAc2X,CAAQ,CAAC,CAAC,EAAG,CAAC,SAAS,eAAe,CAAC,EAC9E,IAAI3X,YAAU,CAAC,CAAC2X,CAAQ,CAAC,EAAG1X,CAAI,CACxC,C,iCCHA,SAAA,eAAwB,EAAM,CAC5B,OAAOC,eAAOC,gBAAQ4W,CAAI,CAAC,CAAC,KAAK,SAAS,eAAe,CAAC,CAC5D,C,iCCLA,IAAI0F,EAAS,EAEb,SAAwB,OAAQ,CAC9B,OAAO,IAAI,KACb,CAEA,SAAS,OAAQ,CACf,KAAK,EAAI,KAAO,EAAEA,EAAA,CAAQ,SAAS,EAAE,CACvC,CAEA,MAAM,UAAY,MAAM,UAAY,CAClC,YAAa,MACb,IAAK,SAAS,EAAM,CAElB,IADA,IAAIC,EAAK,KAAK,EACP,EAAEA,KAAMtE,IAAO,GAAI,EAAE,EAAOA,EAAK,YAAa,OACrD,OAAOA,EAAKsE,EACd,EACA,IAAK,SAAS,EAAM,EAAO,CACzB,MAAO,GAAK,KAAK,GAAKlD,CACxB,EACA,OAAQ,SAAS,EAAM,CACrB,OAAO,KAAK,KAAKpB,GAAQ,OAAOA,EAAK,KAAK,EAC5C,EACA,SAAU,UAAW,CACnB,OAAO,KAAK,CACd,CACF,EC1BA,SAAA,oBAAwB,EAAO,CAC7B,IAAIuE,EACJ,KAAO,EAAcb,EAAM,aAAa,EAAQa,EAChD,OAAOb,CACT,C,sCCFA,SAAA,gBAAwB,EAAO,EAAM,CAGnC,GAFA,EAAQ1b,oBAAY0b,CAAK,EACrB1D,IAAS,IAAA,KAAW,EAAO0D,EAAM,eACjC1D,EAAM,CACR,IAAIwE,EAAMxE,EAAK,iBAAmBA,EAClC,GAAIwE,EAAI,eAAgB,CACtB,IAAIC,EAAQD,EAAI,eAAe,EAG/B,MAFA,GAAM,EAAId,EAAM,QAAS,EAAM,EAAIA,EAAM,QACzC,EAAQe,EAAM,gBAAgBzE,EAAK,aAAa,CAAC,CAAC,QAAQ,CAAC,EACpD,CAACyE,EAAM,EAAGA,EAAM,CAAC,CAC1B,CACA,GAAIzE,EAAK,sBAAuB,CAC9B,IAAI0E,EAAO1E,EAAK,sBAAsB,EACtC,MAAO,CAAC0D,EAAM,QAAUgB,EAAK,KAAO1E,EAAK,WAAY0D,EAAM,QAAUgB,EAAK,IAAM1E,EAAK,SAAS,CAChG,CACF,CACA,MAAO,CAAC0D,EAAM,MAAOA,EAAM,KAAK,CAClC,C,kCChBA,SAAA,iBAAwB,EAAQ,EAAM,CAMpC,OALIiB,EAAO,SACT,EAAS1c,oBAAY0c,CAAM,EACvB3E,IAAS,IAAA,KAAW,EAAO2E,EAAO,eACtC,EAASA,EAAO,SAAW,CAACA,CAAM,GAE7B,MAAM,KAAKA,EAAQ,GAASzc,gBAAQwb,EAAO1D,CAAI,CAAC,CACzD,C,mCCPA,SAAA,kBAAwB,EAAU,CAChC,OAAO,OAAOT,GAAa,SACrB,IAAIpX,YAAU,CAAC,SAAS,iBAAiBoX,CAAQ,CAAC,EAAG,CAAC,SAAS,eAAe,CAAC,EAC/E,IAAIpX,YAAU,CAACC,QAAMmX,CAAQ,CAAC,EAAGlX,CAAI,CAC7C,C,oCCPA,IAAIuc,EAAO,CAAC,UAAa,CAAC,CAAC,EAE3B,SAAS,UAAW,CAClB,IAAK,IAAIzF,EAAI,EAAGW,EAAI,UAAU,OAAQ+E,EAAI,CAAC,EAAGjB,EAAGzE,EAAIW,EAAG,EAAEX,EAAG,CAC3D,GAAI,EAAE,EAAI,UAAUA,GAAK,KAAQyE,KAAKiB,GAAM,QAAQ,KAAKjB,CAAC,EAAG,MAAU,MAAM,iBAAmBA,CAAC,EACjG,EAAEA,GAAK,CAAC,CACV,CACA,OAAO,IAAI,SAASiB,CAAC,CACvB,CAEA,SAAS,SAAS,EAAG,CACnB,KAAK,EAAIA,CACX,CAEA,SAAS,eAAe,EAAW,EAAO,CACxC,OAAOlB,EAAU,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,IAAI,SAAS,EAAG,CACrD,IAAIhF,EAAO,GAAIQ,EAAIyE,EAAE,QAAQ,GAAG,EAEhC,GADIzE,GAAK,IAAG,EAAOyE,EAAE,MAAMzE,EAAI,CAAC,EAAG,EAAIyE,EAAE,MAAM,EAAGzE,CAAC,GAC/CyE,GAAK,CAACkB,EAAM,eAAelB,CAAC,EAAG,MAAU,MAAM,iBAAmBA,CAAC,EACvE,MAAO,CAAC,KAAMA,EAAS,MAAI,CAC7B,CAAC,CACH,CAEA,SAAS,UAAY,SAAS,UAAY,CACxC,YAAa,SACb,GAAI,SAAS,EAAU,EAAU,CAC/B,IAAIiB,EAAI,KAAK,EACTE,EAAI,eAAejB,EAAW,GAAIe,CAAC,EACnCjB,EACAzE,EAAI,GACJW,EAAIiF,EAAE,OAGV,GAAI,UAAU,OAAS,EACrB,MAAO,EAAE5F,EAAIW,GAAG,IAAK,GAAK,EAAWiF,EAAE5F,GAAA,CAAI,QAAU,EAAI7W,MAAIuc,EAAEjB,GAAIE,EAAS,IAAI,GAAI,OAAOF,CAAA,KAM7F,IAAId,GAAY,MAAQ,OAAOA,GAAa,WAAY,MAAU,MAAM,qBAAuBA,CAAQ,EACvG,KAAO,EAAE3D,EAAIW,GACX,GAAI,GAAK,EAAWiF,EAAE5F,GAAA,CAAI,KAAM,EAAEyE,GAAKrb,MAAIsc,EAAEjB,GAAIE,EAAS,KAAMhB,CAAQ,OACnE,GAAIA,GAAY,KAAM,IAAKc,KAAKiB,EAAG,EAAEjB,GAAKrb,MAAIsc,EAAEjB,GAAIE,EAAS,KAAM,IAAI,EAG9E,OAAO,IANgG,CAOzG,EACA,KAAM,UAAW,CACf,IAAIkB,EAAO,CAAC,EAAGH,EAAI,KAAK,EACxB,IAAK,IAAIjB,KAAKiB,EAAG,EAAKjB,GAAKiB,EAAEjB,EAAE,CAAC,MAAM,EACtC,OAAO,IAAI,SAASoB,CAAI,CAC1B,EACA,KAAM,SAAS,EAAM,EAAM,CACzB,IAAK,EAAI,UAAU,OAAS,GAAK,EAAG,IAAK,IAAIC,EAAW,MAAMnF,CAAC,EAAGX,EAAI,EAAGW,EAAG8D,EAAGzE,EAAIW,EAAG,EAAEX,EAAG,EAAKA,GAAK,UAAUA,EAAI,GACnH,GAAI,CAAC,KAAK,EAAE,eAAe+E,CAAI,EAAG,MAAU,MAAM,iBAAmBA,CAAI,EACzE,IAAK,EAAI,KAAK,EAAEA,GAAO,EAAI,EAAG,EAAIN,EAAE,OAAQzE,EAAIW,EAAG,EAAEX,EAAGyE,EAAEzE,EAAE,CAAC,MAAM,MAAM+F,EAAMD,CAAI,CACrF,EACA,MAAO,SAAS,EAAM,EAAM,EAAM,CAChC,GAAI,CAAC,KAAK,EAAE,eAAef,CAAI,EAAG,MAAU,MAAM,iBAAmBA,CAAI,EACzE,IAAK,IAAIN,EAAI,KAAK,EAAEM,GAAO/E,EAAI,EAAGW,EAAI8D,EAAE,OAAQzE,EAAIW,EAAG,EAAEX,EAAGyE,EAAEzE,EAAE,CAAC,MAAM,MAAM+F,EAAMD,CAAI,CACzF,CACF,EAEA,SAAS3c,MAAI,EAAM,EAAM,CACvB,IAAK,IAAI6W,EAAI,EAAGW,EAAIoE,EAAK,OAAQiB,EAAGhG,EAAIW,EAAG,EAAEX,EAC3C,IAAK,EAAI+E,EAAK/E,GAAA,CAAI,OAASR,EACzB,OAAOwG,EAAE,KAGf,C,oBAEA,SAAS5c,MAAI,EAAM,EAAM,EAAU,CACjC,IAAK,IAAI4W,EAAI,EAAGW,EAAIoE,EAAK,OAAQ/E,EAAIW,EAAG,EAAEX,EACxC,GAAI+E,EAAK/E,EAAE,CAAC,OAASR,EAAM,CACzB,EAAKQ,GAAKyF,EAAM,EAAOV,EAAK,MAAM,EAAG/E,CAAC,CAAC,CAAC,OAAO+E,EAAK,MAAM/E,EAAI,CAAC,CAAC,EAChE,KACF,CAGF,OADI2D,GAAY,MAAMoB,EAAK,KAAK,CAAO,OAAM,MAAOpB,CAAQ,CAAC,EACtDoB,CACT,C,oBCjFA,IAAIkB,EAAQ,EACRC,EAAU,EACVC,EAAW,EACXC,EAAY,IACZC,EACAC,EACAC,EAAY,EACZC,EAAW,EACXC,EAAY,EACZC,EAAQ,OAAO,aAAgB,UAAY,YAAY,IAAM,YAAc,KAC3EC,EAAW,OAAO,QAAW,UAAY,OAAO,sBAAwB,OAAO,sBAAsB,KAAK,MAAM,EAAI,SAAS,EAAG,CAAE,WAAWC,EAAG,EAAE,CAAG,EAEzJ,SAAgBvd,OAAM,CACpB,MAAO,CAAiCmd,KAApBG,EAAS,QAAQ,EAAcD,EAAM,IAAI,EAAID,EACnE,C,oBAEA,SAAS,UAAW,CAClB,EAAW,CACb,CAEA,SAAgB,OAAQ,CACtB,KAAK,MACL,KAAK,MACL,KAAK,MAAQ,IACf,CAEA,MAAM,UAAY,MAAM,UAAY,CAClC,YAAa,MACb,QAAS,SAAS,EAAU,EAAO,EAAM,CACvC,GAAI,OAAO9C,GAAa,WAAY,MAAU,UAAU,4BAA4B,EACpF,GAAQkD,GAAQ,KAAOxd,MAAI,EAAI,CAACwd,IAASC,GAAS,KAAO,EAAI,CAACA,GAC1D,CAAC,KAAK,OAASR,IAAa,OAC1BA,EAAU,EAAS,MAAQ,KAC1B,EAAW,KAChB,EAAW,MAEb,KAAK,MAAQ3C,EACb,KAAK,MAAQkD,EACb,MAAM,CACR,EACA,KAAM,UAAW,CACX,KAAK,QACP,KAAK,MAAQ,KACb,KAAK,MAAQ,IACb,MAAM,EAEV,CACF,EAEA,SAAgB,MAAM,EAAU,EAAO,EAAM,CAC3C,IAAIpC,EAAI,IAAI,MAEZ,OADAA,EAAE,QAAQd,EAAUmD,EAAOD,CAAI,EACxBpC,CACT,CAEA,SAAgB,YAAa,CAC3B,MAAI,EACJ,EAAEwB,EAEF,IADA,IAAIxB,EAAI4B,EAAUU,EACXtC,IACA,EAAI+B,EAAW/B,EAAE,QAAU,GAAGA,EAAE,MAAM,KAAK,IAAA,GAAWsC,CAAC,EAC5D,EAAItC,EAAE,MAER,EAAEwB,CACJ,CAEA,SAAS,MAAO,CACd,GAAY,EAAYS,EAAM,IAAI,GAAKD,EACvC,EAAQ,EAAU,EAClB,GAAI,CACF,WAAW,CACb,QAAU,CACR,EAAQ,EACR,IAAI,EACJ,EAAW,CACb,CACF,CAEA,SAAS,MAAO,CACd,IAAIO,EAAMN,EAAM,IAAI,EAAGI,EAAQE,EAAMT,EACjCO,EAAQV,IAAW,GAAaU,EAAO,EAAYE,EACzD,CAEA,SAAS,KAAM,CAEb,IADA,IAAIC,EAAIC,EAAKb,EAAUc,EAAIN,EAAO,IAC3BK,GACDA,EAAG,OACDL,EAAOK,EAAG,QAAO,EAAOA,EAAG,OAC/B,EAAKA,EAAI,EAAKA,EAAG,QAEjB,EAAKA,EAAG,MAAO,EAAG,MAAQ,KAC1B,EAAKD,EAAK,EAAG,MAAQE,EAAK,EAAWA,GAGzC,EAAWF,EACX,MAAMJ,CAAI,CACZ,CAEA,SAAS,MAAM,EAAM,CACfZ,IACJ,AAAaC,IAAU,aAAaA,CAAO,EAC/BW,EAAOL,EACP,IACNK,EAAO,MAAU,EAAU,WAAW,KAAMA,EAAOH,EAAM,IAAI,EAAID,CAAS,GAC9E,AAAcN,IAAW,cAAcA,CAAQ,IAE/C,AAAwCA,KAAzB,EAAYO,EAAM,IAAI,EAAc,YAAY,KAAMN,CAAS,GAC9E,EAAQ,EAAGO,EAAS,IAAI,GAE5B,CC3GA,SAAA,gBAAwB,EAAU,EAAO,EAAM,CAC7C,IAAIlC,EAAI,IAAI,MAMZ,MALA,GAAQqC,GAAS,KAAO,EAAI,CAACA,EAC7BrC,EAAE,QAAQ,GAAW,CACnBA,EAAE,KAAK,EACPd,EAASyD,EAAUN,CAAK,CAC1B,EAAGA,EAAOD,CAAI,EACPpC,CACT,C,kCCPA,IAAI4C,EAAU,SAAS,QAAS,MAAO,SAAU,WAAW,EACxDC,EAAa,CAAC,EAUlB,SAAA,iBAAwB,EAAM,EAAM,EAAI,EAAO,EAAO,EAAQ,CAC5D,IAAIC,EAAY1G,EAAK,aACrB,GAAI,CAAC0G,EAAW,EAAK,aAAe,CAAC,OAChC,GAAIpC,KAAMoC,EAAW,OAC1B,OAAO1G,EAAMsE,EAAI,CACT,OACC,QACA,QACP,GAAIkC,EACJ,MAAOC,EACP,KAAME,EAAO,KACb,MAAOA,EAAO,MACd,SAAUA,EAAO,SACjB,KAAMA,EAAO,KACb,MAAO,KACP,MAAA,CACF,CAAC,CACH,C,mCAEA,SAAgB,KAAK,EAAM,EAAI,CAC7B,IAAIC,EAAW,IAAI5G,EAAMsE,CAAE,EAC3B,GAAIsC,EAAS,MAAA,EAAiB,MAAU,MAAM,6BAA6B,EAC3E,OAAOA,CACT,CAEA,SAAgBne,MAAI,EAAM,EAAI,CAC5B,IAAIme,EAAW,IAAI5G,EAAMsE,CAAE,EAC3B,GAAIsC,EAAS,MAAA,EAAiB,MAAU,MAAM,2BAA2B,EACzE,OAAOA,CACT,C,oBAEA,SAAgB,IAAI,EAAM,EAAI,CAC5B,IAAIA,EAAW5G,EAAK,aACpB,GAAI,CAAC4G,GAAY,EAAE,EAAWA,EAAStC,IAAM,MAAU,MAAM,sBAAsB,EACnF,OAAOsC,CACT,CAEA,SAAS,OAAO,EAAM,EAAI,EAAM,CAC9B,IAAIF,EAAY1G,EAAK,aACjB6G,EAIJ,EAAUvC,GAAMwC,EAChB,EAAK,MAAQ,MAAM,SAAU,EAAGA,EAAK,IAAI,EAEzC,SAAS,SAAS,EAAS,CACzB,EAAK,MAAA,EACLA,EAAK,MAAM,QAAQ,MAAOA,EAAK,MAAOA,EAAK,IAAI,EAG3CA,EAAK,OAASP,GAAS,MAAMA,EAAUO,EAAK,KAAK,CACvD,CAEA,SAAS,MAAM,EAAS,CACtB,IAAI3H,EAAGS,EAAGE,EAAGiE,EAGb,GAAI+C,EAAK,QAAA,EAAqB,OAAO,KAAK,EAE1C,IAAK3H,KAAKuH,EAER,GADA,EAAIA,EAAUvH,GACV4E,EAAE,OAAS+C,EAAK,KAKpB,IAAI/C,EAAE,QAAA,EAAmB,OAAOrb,gBAAQ,KAAK,EAGzCqb,EAAE,QAAA,GACJ,EAAE,MAAA,EACFA,EAAE,MAAM,KAAK,EACbA,EAAE,GAAG,KAAK,YAAa/D,EAAMA,EAAK,SAAU+D,EAAE,MAAOA,EAAE,KAAK,EAC5D,OAAO2C,EAAUvH,IAIV,CAACA,EAAImF,IACZ,EAAE,MAAA,EACFP,EAAE,MAAM,KAAK,EACbA,EAAE,GAAG,KAAK,SAAU/D,EAAMA,EAAK,SAAU+D,EAAE,MAAOA,EAAE,KAAK,EACzD,OAAO2C,EAAUvH,GAf0B,CAmC/C,GAZA,gBAAQ,UAAW,CACb2H,EAAK,QAAA,IACP,EAAK,MAAA,EACLA,EAAK,MAAM,QAAQ,KAAMA,EAAK,MAAOA,EAAK,IAAI,EAC9C,KAAKP,CAAO,EAEhB,CAAC,EAID,EAAK,MAAA,EACLO,EAAK,GAAG,KAAK,QAAS9G,EAAMA,EAAK,SAAU8G,EAAK,MAAOA,EAAK,KAAK,EAC7DA,EAAK,QAAA,EACT,CAIA,IAJA,EAAK,MAAA,EAGL,EAAY,MAAM,EAAIA,EAAK,MAAM,MAAM,EAClC,EAAI,EAAG,EAAI,GAAI3H,EAAIW,EAAG,EAAEX,GACvB,EAAI2H,EAAK,MAAM3H,EAAE,CAAC,MAAM,KAAKa,EAAMA,EAAK,SAAU8G,EAAK,MAAOA,EAAK,KAAK,KAC1E,EAAM,EAAElH,GAAKmE,GAGjB,EAAM,OAASnE,EAAI,CATd,CAUP,CAEA,SAAS,KAAK,EAAS,CAKrB,IAJA,IAAIgE,EAAI2C,EAAUO,EAAK,SAAWA,EAAK,KAAK,KAAK,KAAMP,EAAUO,EAAK,QAAQ,GAAKA,EAAK,MAAM,QAAQ,IAAI,EAAG,EAAK,MAAA,EAAgB,GAC9H3H,EAAI,GACJW,EAAI+G,EAAM,OAEP,EAAE1H,EAAIW,GACX+G,EAAM1H,EAAE,CAAC,KAAKa,EAAM4D,CAAC,EAInBkD,EAAK,QAAA,IACPA,EAAK,GAAG,KAAK,MAAO9G,EAAMA,EAAK,SAAU8G,EAAK,MAAOA,EAAK,KAAK,EAC/D,KAAK,EAET,CAEA,SAAS,MAAO,CAId,IAAK,IAAI3H,IAHT,GAAK,MAAA,EACL2H,EAAK,MAAM,KAAK,EAChB,OAAOJ,EAAUpC,GACHoC,EAAW,OACzB,OAAO1G,EAAK,YACd,CACF,CCtJA,SAAA,kBAAwB,EAAM,EAAM,CAClC,IAAI0G,EAAY1G,EAAK,aACjB4G,EACAG,EACAC,EAAQ,GACR7H,EAEJ,GAAKuH,EAEL,CAEA,IAAKvH,IAFL,GAAOR,GAAQ,KAAO,KAAOA,EAAO,GAE1B+H,GACH,EAAWA,EAAUvH,GAAA,CAAI,OAASR,GACvC,EAASiI,EAAS,MAAA,GAAoBA,EAAS,MAAA,EAC/C,EAAS,MAAA,EACTA,EAAS,MAAM,KAAK,EACpBA,EAAS,GAAG,KAAKG,EAAS,YAAc,SAAU/G,EAAMA,EAAK,SAAU4G,EAAS,MAAOA,EAAS,KAAK,EACrG,OAAOF,EAAUvH,IAL8B,EAAQ,GAQrD6H,GAAO,OAAOhH,EAAK,YAXa,CAYtC,C,oCCrBA,SAAA,oBAAwB,EAAM,CAC5B,OAAO,KAAK,KAAK,UAAW,CAC1B,kBAAU,KAAMrB,CAAI,CACtB,CAAC,CACH,C,sCCNA,SAAA,eAAwB,EAAa,EAAS,EAAW,CACvD,EAAY,UAAY,EAAQ,UAAYsI,EAC5C,EAAU,YAAcC,CAC1B,C,iCAEA,SAAgB,OAAO,EAAQ,EAAY,CACzC,IAAID,EAAY,OAAO,OAAOzG,EAAO,SAAS,EAC9C,IAAK,IAAIU,KAAOiG,EAAY,EAAUjG,GAAOiG,EAAWjG,GACxD,OAAO+F,CACT,CCPA,SAAgB,OAAQ,CAAC,CAEzB,IAAWG,EAAS,GACTC,EAAW,EAAID,EAEtBE,EAAM,sBACNC,EAAM,oDACNC,EAAM,qDACNC,GAAQ,qBACRC,EAAmB,OAAO,UAAUJ,EAAI,GAAGA,EAAI,GAAGA,EAAI,KAAK,EAC3DK,GAAmB,OAAO,UAAUH,EAAI,GAAGA,EAAI,GAAGA,EAAI,KAAK,EAC3DI,GAAoB,OAAO,WAAWN,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGC,EAAI,KAAK,EACpEM,GAAoB,OAAO,WAAWL,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGD,EAAI,KAAK,EACpEO,GAAmB,OAAO,UAAUP,EAAI,GAAGC,EAAI,GAAGA,EAAI,KAAK,EAC3DO,GAAoB,OAAO,WAAWR,EAAI,GAAGC,EAAI,GAAGA,EAAI,GAAGD,EAAI,KAAK,EAEpES,GAAQ,CACV,UAAW,SACX,aAAc,SACd,KAAM,MACN,WAAY,QACZ,MAAO,SACP,MAAO,SACP,OAAQ,SACR,MAAO,EACP,eAAgB,SAChB,KAAM,IACN,WAAY,QACZ,MAAO,SACP,UAAW,SACX,UAAW,QACX,WAAY,QACZ,UAAW,SACX,MAAO,SACP,eAAgB,QAChB,SAAU,SACV,QAAS,SACT,KAAM,MACN,SAAU,IACV,SAAU,MACV,cAAe,SACf,SAAU,SACV,UAAW,MACX,SAAU,SACV,UAAW,SACX,YAAa,QACb,eAAgB,QAChB,WAAY,SACZ,WAAY,SACZ,QAAS,QACT,WAAY,SACZ,aAAc,QACd,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,MACf,WAAY,QACZ,SAAU,SACV,YAAa,MACb,QAAS,QACT,QAAS,QACT,WAAY,QACZ,UAAW,SACX,YAAa,SACb,YAAa,QACb,QAAS,SACT,UAAW,SACX,WAAY,SACZ,KAAM,SACN,UAAW,SACX,KAAM,QACN,MAAO,MACP,YAAa,SACb,KAAM,QACN,SAAU,SACV,QAAS,SACT,UAAW,SACX,OAAQ,QACR,MAAO,SACP,MAAO,SACP,SAAU,SACV,cAAe,SACf,UAAW,QACX,aAAc,SACd,UAAW,SACX,WAAY,SACZ,UAAW,SACX,qBAAsB,SACtB,UAAW,SACX,WAAY,QACZ,UAAW,SACX,UAAW,SACX,YAAa,SACb,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,eAAgB,QAChB,eAAgB,SAChB,YAAa,SACb,KAAM,MACN,UAAW,QACX,MAAO,SACP,QAAS,SACT,OAAQ,QACR,iBAAkB,QAClB,WAAY,IACZ,aAAc,SACd,aAAc,QACd,eAAgB,QAChB,gBAAiB,QACjB,kBAAmB,MACnB,gBAAiB,QACjB,gBAAiB,SACjB,aAAc,QACd,UAAW,SACX,UAAW,SACX,SAAU,SACV,YAAa,SACb,KAAM,IACN,QAAS,SACT,MAAO,QACP,UAAW,QACX,OAAQ,SACR,UAAW,SACX,OAAQ,SACR,cAAe,SACf,UAAW,SACX,cAAe,SACf,cAAe,SACf,WAAY,SACZ,UAAW,SACX,KAAM,SACN,KAAM,SACN,KAAM,SACN,WAAY,SACZ,OAAQ,QACR,cAAe,QACf,IAAK,SACL,UAAW,SACX,UAAW,QACX,YAAa,QACb,OAAQ,SACR,WAAY,SACZ,SAAU,QACV,SAAU,SACV,OAAQ,SACR,OAAQ,SACR,QAAS,QACT,UAAW,QACX,UAAW,QACX,UAAW,QACX,KAAM,SACN,YAAa,MACb,UAAW,QACX,IAAK,SACL,KAAM,MACN,QAAS,SACT,OAAQ,SACR,UAAW,QACX,OAAQ,SACR,MAAO,SACP,MAAO,SACP,WAAY,SACZ,OAAQ,SACR,YAAa,QACf,EAEA,eAAO,MAAO,MAAO,CACnB,KAAK,EAAU,CACb,OAAO,OAAO,OAAO,IAAI,KAAK,YAAa,KAAMC,CAAQ,CAC3D,EACA,aAAc,CACZ,OAAO,KAAK,IAAI,CAAC,CAAC,YAAY,CAChC,EACA,IAAK,gBACL,UAAW,gBACX,WAAY,iBACZ,UAAW,gBACX,UAAW,gBACX,SAAU,eACZ,CAAC,EAED,SAAS,iBAAkB,CACzB,OAAO,KAAK,IAAI,CAAC,CAAC,UAAU,CAC9B,CAEA,SAAS,kBAAmB,CAC1B,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,CAC/B,CAEA,SAAS,iBAAkB,CACzB,OAAO,WAAW,IAAI,CAAC,CAAC,UAAU,CACpC,CAEA,SAAS,iBAAkB,CACzB,OAAO,KAAK,IAAI,CAAC,CAAC,UAAU,CAC9B,CAEA,SAAwB,MAAM,EAAQ,CACpC,IAAIvI,EAAGwI,EAEP,MADA,IAAUC,EAAS,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,GAClC,EAAIV,GAAM,KAAKU,CAAM,IAAM,EAAIzI,EAAE,EAAE,CAAC,OAAQ,EAAI,SAASA,EAAE,GAAI,EAAE,EAAGwI,IAAM,EAAI,KAAKxI,CAAC,EACtFwI,IAAM,EAAI,IAAI,IAAKxI,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAQA,EAAI,KAASA,EAAI,KAAQ,EAAMA,EAAI,GAAM,CAAC,EAChHwI,IAAM,EAAI,KAAKxI,GAAK,GAAK,IAAMA,GAAK,GAAK,IAAMA,GAAK,EAAI,KAAOA,EAAI,KAAQ,GAAI,EAC/EwI,IAAM,EAAI,KAAMxI,GAAK,GAAK,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAQA,EAAI,MAAUA,EAAI,KAAQ,EAAMA,EAAI,IAAQ,GAAI,EACtJ,OACC,EAAIgI,EAAa,KAAKS,CAAM,GAAK,IAAI,IAAIzI,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI,CAAC,GAC5D,EAAIiI,GAAa,KAAKQ,CAAM,GAAK,IAAI,IAAIzI,EAAE,GAAK,IAAM,IAAKA,EAAE,GAAK,IAAM,IAAKA,EAAE,GAAK,IAAM,IAAK,CAAC,GAChG,EAAIkI,GAAc,KAAKO,CAAM,GAAK,KAAKzI,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,EAAE,GAC7D,EAAImI,GAAc,KAAKM,CAAM,GAAK,KAAKzI,EAAE,GAAK,IAAM,IAAKA,EAAE,GAAK,IAAM,IAAKA,EAAE,GAAK,IAAM,IAAKA,EAAE,EAAE,GACjG,EAAIoI,GAAa,KAAKK,CAAM,GAAK,KAAKzI,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAK,CAAC,GACrE,EAAIqI,GAAc,KAAKI,CAAM,GAAK,KAAKzI,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,EAAE,EAC1EsI,GAAM,eAAeG,CAAM,EAAI,KAAKH,GAAMG,EAAO,EACjDA,IAAW,cAAgB,IAAI,IAAI,IAAK,IAAK,IAAK,CAAC,EACnD,IACR,CAEA,SAAS,KAAK,EAAG,CACf,OAAO,IAAI,IAAIrI,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAMA,EAAI,IAAM,CAAC,CAC3D,CAEA,SAAS,KAAK,EAAG,EAAG,EAAG,EAAG,CAExB,OADI4C,GAAK,IAAG,EAAI,EAAI,EAAI,KACjB,IAAI,IAAI0F,EAAGC,EAAG1F,EAAGD,CAAC,CAC3B,CAEA,SAAgB,WAAW,EAAG,CAI5B,OAHMqB,aAAa,QAAQ,EAAI,MAAMA,CAAC,GACjCA,GACL,EAAIA,EAAE,IAAI,EACH,IAAI,IAAIA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,OAAO,GAFxB,IAAI,GAGrB,CAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,OAAO,UAAU,SAAW,EAAI,WAAWqE,CAAC,EAAI,IAAI,IAAIA,EAAGC,EAAG1F,EAAG2F,GAAkB,CAAW,CAChG,CAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,KAAK,EAAI,CAACF,EACV,KAAK,EAAI,CAACC,EACV,KAAK,EAAI,CAAC1F,EACV,KAAK,QAAU,CAAC2F,CAClB,CAEA,eAAO,IAAK,IAAK,OAAO,MAAO,CAC7B,SAAS,EAAG,CAEV,MADA,GAAIC,GAAK,KAAOlB,EAAoBA,IAAUkB,EACvC,IAAI,IAAI,KAAK,EAAIA,EAAG,KAAK,EAAIA,EAAG,KAAK,EAAIA,EAAG,KAAK,OAAO,CACjE,EACA,OAAO,EAAG,CAER,MADA,GAAIA,GAAK,KAAOnB,EAAkBA,IAAQmB,EACnC,IAAI,IAAI,KAAK,EAAIA,EAAG,KAAK,EAAIA,EAAG,KAAK,EAAIA,EAAG,KAAK,OAAO,CACjE,EACA,KAAM,CACJ,OAAO,IACT,EACA,OAAQ,CACN,OAAO,IAAI,IAAI,OAAO,KAAK,CAAC,EAAG,OAAO,KAAK,CAAC,EAAG,OAAO,KAAK,CAAC,EAAG,OAAO,KAAK,OAAO,CAAC,CACrF,EACA,aAAc,CACZ,MAAQ,KAAQ,KAAK,GAAK,KAAK,EAAI,OAC3B,KAAQ,KAAK,GAAK,KAAK,EAAI,OAC3B,KAAQ,KAAK,GAAK,KAAK,EAAI,OAC3B,GAAK,KAAK,SAAW,KAAK,SAAW,CAC/C,EACA,IAAK,cACL,UAAW,cACX,WAAY,eACZ,UAAW,cACX,SAAU,aACZ,CAAC,CAAC,EAEF,SAAS,eAAgB,CACvB,MAAO,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GACnD,CAEA,SAAS,gBAAiB,CACxB,MAAO,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,EAAI,EAAI,KAAK,SAAW,GAAG,GACzG,CAEA,SAAS,eAAgB,CACvB,IAAM7F,EAAI,OAAO,KAAK,OAAO,EAC7B,MAAO,GAAGA,IAAM,EAAI,OAAS,UAAU,OAAO,KAAK,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,IAAIA,IAAM,EAAI,IAAM,KAAKA,EAAE,IACvH,CAEA,SAAS,OAAO,EAAS,CACvB,OAAO,MAAM4F,CAAO,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,CAAO,CAAC,CAC9D,CAEA,SAAS,OAAO,EAAO,CACrB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAMlH,CAAK,GAAK,CAAC,CAAC,CAC1D,CAEA,SAAS,IAAI,EAAO,CAElB,MADA,GAAQ,OAAOA,CAAK,GACZA,EAAQ,GAAK,IAAM,IAAMA,EAAM,SAAS,EAAE,CACpD,CAEA,SAAS,KAAK,EAAG,EAAG,EAAG,EAAG,CAIxB,OAHIsB,GAAK,EAAG,EAAI,EAAI,EAAI,IACfwF,GAAK,GAAKA,GAAK,EAAG,EAAI,EAAI,IAC1BM,GAAK,IAAG,EAAI,KACd,IAAI,IAAIC,EAAGD,EAAGN,EAAGxF,CAAC,CAC3B,CAEA,SAAgB,WAAW,EAAG,CAC5B,GAAIqB,aAAa,IAAK,OAAO,IAAI,IAAIA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,OAAO,EAE7D,GADMA,aAAa,QAAQ,EAAI,MAAMA,CAAC,GAClC,CAACA,EAAG,OAAO,IAAI,IACnB,GAAIA,aAAa,IAAK,OAAOA,EAC7B,EAAIA,EAAE,IAAI,EACV,IAAIqE,EAAIrE,EAAE,EAAI,IACVsE,EAAItE,EAAE,EAAI,IACVpB,EAAIoB,EAAE,EAAI,IACV2E,EAAM,KAAK,IAAIN,EAAGC,EAAG1F,CAAC,EACtBgG,EAAM,KAAK,IAAIP,EAAGC,EAAG1F,CAAC,EACtB8F,EAAI,IACJD,EAAIG,EAAMD,EACV,GAAKC,EAAMD,GAAO,EAUtB,OATIF,GACF,AAEKC,EAFDL,IAAMO,GAAUN,EAAI1F,GAAK6F,GAAKH,EAAI1F,GAAK,EAClC0F,IAAMM,GAAUhG,EAAIyF,GAAKI,EAAI,GAC5BJ,EAAIC,GAAKG,EAAI,EACvB,GAAK,EAAI,GAAMG,EAAMD,EAAM,EAAIC,EAAMD,EACrC,GAAK,IAEL,EAAI,EAAI,GAAK,EAAI,EAAI,EAAID,EAEpB,IAAI,IAAIA,EAAGD,EAAG,EAAGzE,EAAE,OAAO,CACnC,CAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,OAAO,UAAU,SAAW,EAAI,WAAW0E,CAAC,EAAI,IAAI,IAAIA,EAAGD,EAAGN,EAAGI,GAAkB,CAAW,CAChG,CAEA,SAAS,IAAI,EAAG,EAAG,EAAG,EAAS,CAC7B,KAAK,EAAI,CAACG,EACV,KAAK,EAAI,CAACD,EACV,KAAK,EAAI,CAACN,EACV,KAAK,QAAU,CAACI,CAClB,CAEA,eAAO,IAAK,IAAK,OAAO,MAAO,CAC7B,SAAS,EAAG,CAEV,MADA,GAAIC,GAAK,KAAOlB,EAAoBA,IAAUkB,EACvC,IAAI,IAAI,KAAK,EAAG,KAAK,EAAG,KAAK,EAAIA,EAAG,KAAK,OAAO,CACzD,EACA,OAAO,EAAG,CAER,MADA,GAAIA,GAAK,KAAOnB,EAAkBA,IAAQmB,EACnC,IAAI,IAAI,KAAK,EAAG,KAAK,EAAG,KAAK,EAAIA,EAAG,KAAK,OAAO,CACzD,EACA,KAAM,CACJ,IAAIE,EAAI,KAAK,EAAI,KAAO,KAAK,EAAI,GAAK,IAClCD,EAAI,MAAMC,CAAC,GAAK,MAAM,KAAK,CAAC,EAAI,EAAI,KAAK,EACzCP,EAAI,KAAK,EACTU,EAAKV,GAAKA,EAAI,GAAMA,EAAI,EAAIA,GAAKM,EACjCpG,EAAK,EAAI8F,EAAIU,EACjB,OAAO,IAAI,IACT,QAAQH,GAAK,IAAMA,EAAI,IAAMA,EAAI,IAAKrG,EAAIwG,CAAE,EAC5C,QAAQH,EAAGrG,EAAIwG,CAAE,EACjB,QAAQH,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAKrG,EAAIwG,CAAE,EAC3C,KAAK,OACP,CACF,EACA,OAAQ,CACN,OAAO,IAAI,IAAI,OAAO,KAAK,CAAC,EAAG,OAAO,KAAK,CAAC,EAAG,OAAO,KAAK,CAAC,EAAG,OAAO,KAAK,OAAO,CAAC,CACrF,EACA,aAAc,CACZ,OAAQ,GAAK,KAAK,GAAK,KAAK,GAAK,GAAK,MAAM,KAAK,CAAC,IAC1C,GAAK,KAAK,GAAK,KAAK,GAAK,GACzB,GAAK,KAAK,SAAW,KAAK,SAAW,CAC/C,EACA,WAAY,CACV,IAAMlG,EAAI,OAAO,KAAK,OAAO,EAC7B,MAAO,GAAGA,IAAM,EAAI,OAAS,UAAU,OAAO,KAAK,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,EAAI,IAAI,KAAK,OAAO,KAAK,CAAC,EAAI,IAAI,GAAGA,IAAM,EAAI,IAAM,KAAKA,EAAE,IACrI,CACF,CAAC,CAAC,EAEF,SAAS,OAAO,EAAO,CAErB,MADA,IAAStB,GAAS,GAAK,IAChBA,EAAQ,EAAIA,EAAQ,IAAMA,CACnC,CAEA,SAAS,OAAO,EAAO,CACrB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,GAAS,CAAC,CAAC,CAC5C,CAGA,SAAS,QAAQ,EAAG,EAAI,EAAI,CAC1B,OAAQqH,EAAI,GAAKrG,GAAMwG,EAAKxG,GAAMqG,EAAI,GAChCA,EAAI,IAAMG,EACVH,EAAI,IAAMrG,GAAMwG,EAAKxG,IAAO,IAAMqG,GAAK,GACvCrG,GAAM,GACd,CC3YA,IAAayG,GAAU,KAAK,GAAK,IACpBlgB,GAAU,IAAM,KAAK,GCI5BogB,GAAI,GACNC,GAAK,OACLC,GAAK,EACLC,GAAK,OACLtgB,GAAK,EAAI,GACTC,GAAK,EAAI,GACTyd,GAAK,EAAIzd,GAAKA,GACdwgB,GAAKxgB,GAAKA,GAAKA,GAEnB,SAAS,WAAW,EAAG,CACrB,GAAIkb,aAAa,IAAK,OAAO,IAAI,IAAIA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,OAAO,EAC7D,GAAIA,aAAa,IAAK,OAAO,QAAQA,CAAC,EAChCA,aAAa,MAAM,EAAI,WAAWA,CAAC,GACzC,IAAIqE,EAAI,SAASrE,EAAE,CAAC,EAChBsE,EAAI,SAAStE,EAAE,CAAC,EAChBpB,EAAI,SAASoB,EAAE,CAAC,EAChBuF,EAAI,SAAS,SAAYlB,EAAI,SAAYC,EAAI,SAAY1F,GAAKsG,EAAE,EAAG/I,EAAGqJ,EAK1E,OAJInB,IAAMC,GAAKA,IAAM1F,EAAG,EAAI,EAAI2G,GAC9B,EAAI,SAAS,SAAYlB,EAAI,SAAYC,EAAI,SAAY1F,GAAKqG,EAAE,EAChE,EAAI,SAAS,SAAYZ,EAAI,SAAYC,EAAI,SAAY1F,GAAKuG,EAAE,GAE3D,IAAI,IAAI,IAAMI,EAAI,GAAI,KAAOpJ,EAAIoJ,GAAI,KAAOA,EAAIC,GAAIxF,EAAE,OAAO,CACtE,CAEA,SAAgB,KAAK,EAAG,EAAS,CAC/B,OAAO,IAAI,IAAImE,EAAG,EAAG,EAAGI,GAAkB,CAAW,CACvD,CAEA,SAAwBxf,MAAI,EAAG,EAAG,EAAG,EAAS,CAC5C,OAAO,UAAU,SAAW,EAAI,WAAWof,CAAC,EAAI,IAAI,IAAIA,EAAGxF,EAAGC,EAAG2F,GAAkB,CAAW,CAChG,C,oBAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,KAAK,EAAI,CAACJ,EACV,KAAK,EAAI,CAACxF,EACV,KAAK,EAAI,CAACC,EACV,KAAK,QAAU,CAAC2F,CAClB,CAEA,eAAO,IAAKxf,MAAK,OAAO,MAAO,CAC7B,SAAS,EAAG,CACV,OAAO,IAAI,IAAI,KAAK,EAAIigB,IAAKR,GAAY,GAAQ,KAAK,EAAG,KAAK,EAAG,KAAK,OAAO,CAC/E,EACA,OAAO,EAAG,CACR,OAAO,IAAI,IAAI,KAAK,EAAIQ,IAAKR,GAAY,GAAQ,KAAK,EAAG,KAAK,EAAG,KAAK,OAAO,CAC/E,EACA,KAAM,CACJ,IAAIe,GAAK,KAAK,EAAI,IAAM,IACpBpJ,EAAI,MAAM,KAAK,CAAC,EAAIoJ,EAAIA,EAAI,KAAK,EAAI,IACrCC,EAAI,MAAM,KAAK,CAAC,EAAID,EAAIA,EAAI,KAAK,EAAI,IAIzC,MAHA,GAAIN,GAAK,QAAQ9I,CAAC,EAClB,EAAI+I,GAAK,QAAQK,CAAC,EAClB,EAAIJ,GAAK,QAAQK,CAAC,EACX,IAAI,IACT,SAAU,UAAYrJ,EAAI,UAAYoJ,EAAI,SAAYC,CAAC,EACvD,SAAS,UAAarJ,EAAI,UAAYoJ,EAAI,QAAYC,CAAC,EACvD,SAAU,SAAYrJ,EAAI,SAAYoJ,EAAI,UAAYC,CAAC,EACvD,KAAK,OACP,CACF,CACF,CAAC,CAAC,EAEF,SAAS,QAAQ,EAAG,CAClB,OAAO3F,EAAIyF,GAAczF,IAAG,EAAI,GAAKA,EAAI0C,GAAK1d,EAChD,CAEA,SAAS,QAAQ,EAAG,CAClB,OAAOgb,EAAI/a,GAAK+a,EAAIA,EAAIA,EAAI0C,IAAM1C,EAAIhb,GACxC,CAEA,SAAS,SAAS,EAAG,CACnB,MAAO,MAAOsX,GAAK,SAAY,MAAQA,EAAI,MAAiBA,IAAG,EAAI,KAAO,KAC5E,CAEA,SAAS,SAAS,EAAG,CACnB,OAAQ,GAAK,MAAQ,OAAUA,EAAI,QAAkBA,EAAI,MAAS,QAAO,GAC3E,CAEA,SAAS,WAAW,EAAG,CACrB,GAAI6D,aAAa,IAAK,OAAO,IAAI,IAAIA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,OAAO,EAE7D,GADMA,aAAa,MAAM,EAAI,WAAWA,CAAC,GACrCA,EAAE,IAAM,GAAKA,EAAE,IAAM,EAAG,OAAO,IAAI,IAAI,IAAK,EAAIA,EAAE,GAAKA,EAAE,EAAI,IAAM,EAAI,IAAKA,EAAE,EAAGA,EAAE,OAAO,EAC9F,IAAI0E,EAAI,KAAK,MAAM1E,EAAE,EAAGA,EAAE,CAAC,EAAIhb,GAC/B,OAAO,IAAI,IAAI0f,EAAI,EAAIA,EAAI,IAAMA,EAAG,KAAK,KAAK1E,EAAE,EAAIA,EAAE,EAAIA,EAAE,EAAIA,EAAE,CAAC,EAAGA,EAAE,EAAGA,EAAE,OAAO,CACtF,CAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,OAAO,UAAU,SAAW,EAAI,WAAWmE,CAAC,EAAI,IAAI,IAAIO,EAAGtD,EAAG+C,EAAGI,GAAkB,CAAW,CAChG,CAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,OAAO,UAAU,SAAW,EAAI,WAAWG,CAAC,EAAI,IAAI,IAAIA,EAAGtD,EAAG+C,EAAGI,GAAkB,CAAW,CAChG,CAEA,SAAgB,IAAI,EAAG,EAAG,EAAG,EAAS,CACpC,KAAK,EAAI,CAACG,EACV,KAAK,EAAI,CAACtD,EACV,KAAK,EAAI,CAAC+C,EACV,KAAK,QAAU,CAACI,CAClB,CAEA,SAAS,QAAQ,EAAG,CAClB,GAAI,MAAMvE,EAAE,CAAC,EAAG,OAAO,IAAI,IAAIA,EAAE,EAAG,EAAG,EAAGA,EAAE,OAAO,EACnD,IAAI0E,EAAI1E,EAAE,EAAI8E,GACd,OAAO,IAAI,IAAI9E,EAAE,EAAG,KAAK,IAAI0E,CAAC,EAAI1E,EAAE,EAAG,KAAK,IAAI0E,CAAC,EAAI1E,EAAE,EAAGA,EAAE,OAAO,CACrE,CAEA,eAAO,IAAK,IAAK,OAAO,MAAO,CAC7B,SAAS,EAAG,CACV,OAAO,IAAI,IAAI,KAAK,EAAG,KAAK,EAAG,KAAK,EAAIgF,IAAKR,GAAY,GAAQ,KAAK,OAAO,CAC/E,EACA,OAAO,EAAG,CACR,OAAO,IAAI,IAAI,KAAK,EAAG,KAAK,EAAG,KAAK,EAAIQ,IAAKR,GAAY,GAAQ,KAAK,OAAO,CAC/E,EACA,KAAM,CACJ,OAAO,QAAQ,IAAI,CAAC,CAAC,IAAI,CAC3B,CACF,CAAC,CAAC,ECtHF,IAAIiB,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAKD,GAAID,GACTG,GAAKF,GAAIH,GACTM,GAAQN,GAAIC,GAAIC,GAAIH,GAExB,SAAS,iBAAiB,EAAG,CAC3B,GAAIzF,aAAa,UAAW,OAAO,IAAI,UAAUA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,OAAO,EACnEA,aAAa,MAAM,EAAI,WAAWA,CAAC,GACzC,IAAIqE,EAAIrE,EAAE,EAAI,IACVsE,EAAItE,EAAE,EAAI,IACVpB,EAAIoB,EAAE,EAAI,IACVmE,GAAK6B,GAAQpH,EAAIkH,GAAKzB,EAAI0B,GAAKzB,IAAM0B,GAAQF,GAAKC,IAClDE,EAAKrH,EAAIuF,EACTK,GAAKqB,IAAKvB,EAAIH,GAAKwB,GAAIM,GAAML,GAC7BnB,EAAI,KAAK,KAAKD,EAAIA,EAAIyB,EAAKA,CAAE,GAAKJ,GAAI1B,GAAK,EAAIA,IAC/CO,EAAID,EAAI,KAAK,MAAMD,EAAGyB,CAAE,EAAIhhB,GAAU,IAAM,IAChD,OAAO,IAAI,UAAUyf,EAAI,EAAIA,EAAI,IAAMA,EAAGD,EAAGN,EAAGnE,EAAE,OAAO,CAC3D,CAEA,SAAwB,UAAU,EAAG,EAAG,EAAG,EAAS,CAClD,OAAO,UAAU,SAAW,EAAI,iBAAiB0E,CAAC,EAAI,IAAI,UAAUA,EAAGD,EAAGN,EAAGI,GAAkB,CAAW,CAC5G,CAEA,SAAgB,UAAU,EAAG,EAAG,EAAG,EAAS,CAC1C,KAAK,EAAI,CAACG,EACV,KAAK,EAAI,CAACD,EACV,KAAK,EAAI,CAACN,EACV,KAAK,QAAU,CAACI,CAClB,CAEA,eAAO,UAAW,UAAW,OAAO,MAAO,CACzC,SAAS,EAAG,CAEV,MADA,GAAIC,GAAK,KAAOlB,EAAoBA,IAAUkB,EACvC,IAAI,UAAU,KAAK,EAAG,KAAK,EAAG,KAAK,EAAIA,EAAG,KAAK,OAAO,CAC/D,EACA,OAAO,EAAG,CAER,MADA,GAAIA,GAAK,KAAOnB,EAAkBA,IAAQmB,EACnC,IAAI,UAAU,KAAK,EAAG,KAAK,EAAG,KAAK,EAAIA,EAAG,KAAK,OAAO,CAC/D,EACA,KAAM,CACJ,IAAIE,EAAI,MAAM,KAAK,CAAC,EAAI,GAAK,KAAK,EAAI,KAAOI,GACzCX,EAAI,CAAC,KAAK,EACVxF,EAAI,MAAM,KAAK,CAAC,EAAI,EAAI,KAAK,EAAIwF,GAAK,EAAIA,GAC1C+B,EAAO,KAAK,IAAIxB,CAAC,EACjByB,EAAO,KAAK,IAAIzB,CAAC,EACrB,OAAO,IAAI,IACT,KAAOP,EAAIxF,GAAK8G,GAAIS,EAAOR,GAAIS,IAC/B,KAAOhC,EAAIxF,GAAKgH,GAAIO,EAAON,GAAIO,IAC/B,KAAOhC,EAAS0B,GAAIK,EAATvH,GACX,KAAK,OACP,CACF,CACF,CAAC,CAAC,EC5DF,SAAgB,MAAM,EAAI,EAAI,EAAI,EAAI,EAAI,CACxC,IAAI4D,EAAKD,EAAKA,EAAIgD,EAAK/C,EAAKD,EAC5B,QAAS,EAAI,EAAIA,EAAK,EAAIC,EAAK+C,GAAMc,GAC9B,EAAI,EAAI7D,EAAK,EAAI+C,GAAMe,GACvB,EAAI,EAAI/D,EAAK,EAAIC,EAAK,EAAI+C,GAAMgB,EACjChB,EAAKiB,GAAM,CACnB,CAEA,SAAA,cAAwB,EAAQ,CAC9B,IAAIxK,EAAIyK,EAAO,OAAS,EACxB,OAAO,SAAS,EAAG,CACjB,IAAIpL,EAAIyE,GAAK,EAAK,EAAI,EAAKA,GAAK,GAAK,EAAI,EAAG9D,EAAI,GAAK,KAAK,MAAM8D,EAAI9D,CAAC,EACjEsK,EAAKG,EAAOpL,GACZkL,EAAKE,EAAOpL,EAAI,GAChBgL,EAAKhL,EAAI,EAAIoL,EAAOpL,EAAI,GAAK,EAAIiL,EAAKC,EACtCC,EAAKnL,EAAIW,EAAI,EAAIyK,EAAOpL,EAAI,GAAK,EAAIkL,EAAKD,EAC9C,OAAO,OAAOxG,EAAIzE,EAAIW,GAAKA,EAAGqK,EAAIC,EAAIC,EAAIC,CAAE,CAC9C,CACF,C,gCChBA,SAAA,oBAAwB,EAAQ,CAC9B,IAAIxK,EAAIyK,EAAO,OACf,OAAO,SAAS,EAAG,CACjB,IAAIpL,EAAI,KAAK,QAAQ,GAAK,GAAK,EAAI,EAAEyE,EAAIA,GAAK9D,CAAC,EAC3CqK,EAAKI,GAAQpL,EAAIW,EAAI,GAAKA,GAC1BsK,EAAKG,EAAOpL,EAAIW,GAChBuK,EAAKE,GAAQpL,EAAI,GAAKW,GACtBwK,EAAKC,GAAQpL,EAAI,GAAKW,GAC1B,OAAO,OAAO8D,EAAIzE,EAAIW,GAAKA,EAAGqK,EAAIC,EAAIC,EAAIC,CAAE,CAC9C,CACF,C,sCCZA,IAAAE,GAAA,OAAe,OAAWtK,EAAA,SAAA,ECE1B,SAASjX,SAAO,EAAG,EAAG,CACpB,OAAO,SAAS,EAAG,CACjB,OAAOyZ,EAAIkB,EAAI6G,CACjB,CACF,C,0BAEA,SAAS,YAAY,EAAG,EAAG,EAAG,CAC5B,MAAO,MAAgBnB,EAAI,EAAa3G,IAAG2G,EAAK5G,EAAG,EAAI,EAAI4G,EAAG,SAAS,EAAG,CACxE,OAAgB5G,EAAIkB,EAAIjB,KAAG2G,CAC7B,CACF,CAEA,SAAgB,IAAI,EAAG,EAAG,CACxB,IAAImB,EAAI9H,EAAID,EACZ,OAAO+H,EAAIxhB,SAAOyZ,EAAG+H,EAAI,KAAOA,EAAI,KAAOA,EAAI,IAAM,KAAK,MAAMA,EAAI,GAAG,EAAIA,CAAC,EAAIvhB,GAAS,MAAMwZ,CAAC,EAAIC,EAAID,CAAC,CAC3G,CAEA,SAAgB,MAAM,EAAG,CACvB,OAAQ,EAAI,CAAC4G,IAAO,EAAI,QAAU,SAAS,EAAG,EAAG,CAC/C,OAAO3G,EAAID,EAAI,YAAYA,EAAGC,EAAG2G,CAAC,EAAIpgB,GAAS,MAAMwZ,CAAC,EAAIC,EAAID,CAAC,CACjE,CACF,CAEA,SAAwB,QAAQ,EAAG,EAAG,CACpC,IAAI+H,EAAI9H,EAAID,EACZ,OAAO+H,EAAIxhB,SAAOyZ,EAAG+H,CAAC,EAAIvhB,GAAS,MAAMwZ,CAAC,EAAIC,EAAID,CAAC,CACrD,CCvBA,IAAAgI,IAAgB,SAAS,SAAS,EAAG,CACnC,IAAIC,EAAQ,MAAMrB,CAAC,EAEnB,SAASngB,MAAI,EAAO,EAAK,CACvB,IAAI,EAAIwhB,GAAO,EAAQvhB,IAASwhB,CAAK,EAAA,CAAG,GAAI,EAAMxhB,IAASyhB,CAAG,EAAA,CAAG,CAAC,EAC9DxC,EAAIsC,EAAMC,EAAM,EAAGC,EAAI,CAAC,EACxBlI,EAAIgI,EAAMC,EAAM,EAAGC,EAAI,CAAC,EACxBvC,EAAU,QAAQsC,EAAM,QAASC,EAAI,OAAO,EAChD,OAAO,SAAS,EAAG,CAKjB,MAJA,GAAM,EAAI,EAAE,CAAC,EACb,EAAM,EAAIxC,EAAE,CAAC,EACb,EAAM,EAAI1F,EAAE,CAAC,EACb,EAAM,QAAU2F,EAAQ,CAAC,EAClBsC,EAAQ,EACjB,CACF,CAIA,O,oBAFA,MAAI,MAAQ,SAELzhB,KACT,EAAA,CAAG,CAAC,EAEJ,SAAS,UAAU,EAAQ,CACzB,OAAO,SAAS,EAAQ,CAMtB,IALA,IAAI,EAAI2hB,EAAO,OACX,EAAQ,MAAM,CAAC,EACfzC,EAAQ,MAAM,CAAC,EACf1F,EAAQ,MAAM,CAAC,EACfxD,EACK,EADFwL,EACKxL,EAAI,EAAG,EAAEA,EACnB,EAAQ/V,IAAS0hB,EAAO3L,EAAE,EAC1B,EAAEA,GAAKwL,EAAM,GAAK,EAClB,EAAExL,GAAKwL,EAAM,GAAK,EAClB,EAAExL,GAAKwL,EAAM,GAAK,EAMpB,MAJA,GAAII,EAAO,CAAC,EACZ,EAAIA,EAAO1C,CAAC,EACZ,EAAI0C,EAAOpI,CAAC,EACZ,EAAM,QAAU,EACT,SAAS,EAAG,CAIjB,MAHA,GAAM,EAAI,EAAEiB,CAAC,EACb,EAAM,EAAIyE,EAAEzE,CAAC,EACb,EAAM,EAAIjB,EAAEiB,CAAC,EACN+G,EAAQ,EACjB,CACF,CACF,CAEA,IAAWK,GAAW,UAAU3hB,aAAK,EAC1B4hB,GAAiB,UAAU3hB,mBAAW,ECtDjD,SAAA,oBAAwB,EAAG,EAAG,CAC5B,AAAQqZ,IAAI,CAAC,EACb,IAAI,EAAID,EAAI,KAAK,IAAIC,EAAE,OAAQD,EAAE,MAAM,EAAI,EACvCyC,EAAIxC,EAAE,MAAM,EACZxD,EACJ,OAAO,SAAS,EAAG,CACjB,IAAK,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,EAAEA,GAAKuD,EAAEvD,IAAM,EAAIyE,GAAKjB,EAAExD,GAAKyE,EACvD,OAAOuB,CACT,CACF,C,sCAEA,SAAgB,cAAc,EAAG,CAC/B,OAAO,YAAY,OAAOjF,CAAC,GAAK,EAAEA,aAAa,SACjD,CCVA,SAAA,cAAwB,EAAG,EAAG,CAC5B,OAAQ,cAAcyC,CAAC,EAAIpZ,oBAAc,aAAA,CAAcmZ,EAAGC,CAAC,CAC7D,C,gCAEA,SAAgB,aAAa,EAAG,EAAG,CAOjC,IANA,IAAIuI,EAAKvI,EAAIA,EAAE,OAAS,EACpBwI,EAAKzI,EAAI,KAAK,IAAIwI,EAAIxI,EAAE,MAAM,EAAI,EAClCxC,EAAQ,MAAMiL,CAAE,EAChBhG,EAAQ,MAAM+F,CAAE,EAChB/L,EAEK,EAAGA,EAAIgM,EAAI,EAAEhM,EAAG,EAAEA,GAAK3V,cAAMkZ,EAAEvD,GAAIwD,EAAExD,EAAE,EAChD,KAAOA,EAAI+L,EAAI,EAAE/L,EAAG,EAAEA,GAAKwD,EAAExD,GAE7B,OAAO,SAAS,EAAG,CACjB,IAAK,EAAI,EAAGA,EAAIgM,EAAI,EAAEhM,EAAG,EAAEA,GAAKe,EAAEf,EAAE,CAACyE,CAAC,EACtC,OAAOuB,CACT,CACF,CCrBA,SAAA,aAAwB,EAAG,EAAG,CAC5B,IAAIsF,EAAI,IAAI,KACZ,MAAO,GAAI,CAAC/H,EAAG,EAAI,CAACC,EAAG,SAAS,EAAG,CACjC,OAAO8H,EAAE,QAAQ/H,GAAK,EAAIkB,GAAKjB,EAAIiB,CAAC,EAAG6G,CACzC,CACF,C,+BCLA,SAAA,eAAwB,EAAG,EAAG,CAC5B,MAAO,GAAI,CAAC/H,EAAG,EAAI,CAACC,EAAG,SAAS,EAAG,CACjC,OAAOD,GAAK,EAAIkB,GAAKjB,EAAIiB,CAC3B,CACF,C,iCCFA,SAAA,eAAwB,EAAG,EAAG,CAC5B,IAAIzE,EAAI,CAAC,EACLgG,EAAI,CAAC,EACLoD,EAKJ,IAAKA,KAHa,OAAO7F,GAAM,WAA3BA,KAAqC,EAAI,CAAC,IAC5B,OAAOC,GAAM,WAA3BA,KAAqC,EAAI,CAAC,GAEpCA,EACJ4F,KAAK7F,EACP,EAAE6F,GAAK9e,cAAMiZ,EAAE6F,GAAI5F,EAAE4F,EAAE,EAEvB,EAAEA,GAAK5F,EAAE4F,GAIb,OAAO,SAAS,EAAG,CACjB,IAAKA,KAAKpJ,EAAG,EAAEoJ,GAAKpJ,EAAEoJ,EAAE,CAAC3E,CAAC,EAC1B,OAAOuB,CACT,CACF,C,iCCpBA,IAAIiG,GAAM,8CACNC,GAAM,IAAI,OAAOD,GAAI,OAAQ,GAAG,EAEpC,SAAS1hB,OAAK,EAAG,CACf,OAAO,UAAW,CAChB,OAAOiZ,CACT,CACF,C,sBAEA,SAAS,IAAI,EAAG,CACd,OAAO,SAAS,EAAG,CACjB,OAAOA,EAAE,CAAC,EAAI,EAChB,CACF,C,iCAEA,SAAA,eAAwB,EAAG,EAAG,CAC5B,IAAI2I,EAAK,GAAI,UAAY,GAAI,UAAY,EACrCC,EACAC,EACAC,EACAtM,EAAI,GACJqJ,EAAI,CAAC,EACLkD,EAAI,CAAC,EAMT,IAHA,GAAQ,GAAI,GAAQ,IAGZ,EAAKN,GAAI,KAAK1I,CAAC,KACf,EAAK2I,GAAI,KAAK1I,CAAC,KAChB,EAAK6I,EAAG,OAASF,IACpB,EAAK3I,EAAE,MAAM2I,EAAIG,CAAE,EACfjD,EAAErJ,GAAI,EAAEA,IAAMsM,EACb,EAAE,EAAEtM,GAAKsM,IAEX,EAAKF,EAAG,OAAS,EAAKC,EAAG,IACxBhD,EAAErJ,GAAI,EAAEA,IAAMqM,EACb,EAAE,EAAErM,GAAKqM,GAEd,EAAE,EAAErM,GAAK,KACTuM,EAAE,KAAK,CAAI,IAAG,EAAG/hB,eAAO4hB,EAAIC,CAAE,CAAC,CAAC,GAElC,EAAKH,GAAI,UAYX,OARIC,EAAK3I,EAAE,SACT,EAAKA,EAAE,MAAM2I,CAAE,EACX9C,EAAErJ,GAAI,EAAEA,IAAMsM,EACb,EAAE,EAAEtM,GAAKsM,GAKTjD,EAAE,OAAS,EAAKkD,EAAE,GACnB,IAAIA,EAAE,EAAE,CAAC,CAAC,EACVhiB,OAAKiZ,CAAC,GACL,EAAI+I,EAAE,OAAQ,SAAS,EAAG,CACzB,IAAK,IAAIvM,EAAI,EAAG4E,EAAG5E,EAAIwD,EAAG,EAAExD,EAAG,GAAG,EAAIuM,EAAEvM,GAAA,CAAI,GAAK4E,EAAE,EAAEH,CAAC,EACtD,OAAO4E,EAAE,KAAK,EAAE,CAClB,EACR,CCrDA,SAAA,cAAwB,EAAG,EAAG,CAC5B,IAAI5E,EAAI,OAAOjB,EAAGwC,EAClB,OAAOxC,GAAK,MAAQiB,IAAM,UAAYha,GAAS+Y,CAAC,GACzCiB,IAAM,SAAW/Z,eAClB+Z,IAAM,UAAa,EAAI,MAAMjB,CAAC,IAAM,EAAIwC,EAAGrb,IAAOC,eAClD4Y,aAAa,MAAQ7Y,GACrB6Y,aAAa,KAAO3Y,aACpB,cAAc2Y,CAAC,EAAI1Y,oBACnB,MAAM,QAAQ0Y,CAAC,EAAI,aACnB,OAAOA,EAAE,SAAY,YAAc,OAAOA,EAAE,UAAa,YAAc,MAAMA,CAAC,EAAIzY,eAClFL,eAAAA,CAAQ6Y,EAAGC,CAAC,CACpB,C,gCCrBA,SAAA,iBAAwB,EAAO,CAC7B,IAAI7C,EAAI6L,EAAM,OACd,OAAO,SAAS,EAAG,CACjB,OAAOA,EAAM,KAAK,IAAI,EAAG,KAAK,IAAI7L,EAAI,EAAG,KAAK,MAAM8D,EAAI9D,CAAC,CAAC,CAAC,EAC7D,CACF,C,mCCHA,SAAA,YAAwB,EAAG,EAAG,CAC5B,IAAIX,EAAI,IAAI,CAACuD,EAAG,CAACC,CAAC,EAClB,OAAO,SAAS,EAAG,CACjB,IAAIzC,EAAIf,EAAEyE,CAAC,EACX,OAAO1D,EAAI,IAAM,KAAK,MAAMA,EAAI,GAAG,CACrC,CACF,C,8BCRA,SAAA,cAAwB,EAAG,EAAG,CAC5B,MAAO,GAAI,CAACwC,EAAG,EAAI,CAACC,EAAG,SAAS,EAAG,CACjC,OAAO,KAAK,MAAMD,GAAK,EAAIkB,GAAKjB,EAAIiB,CAAC,CACvC,CACF,C,gCCJA,IAAIgI,GAAU,IAAM,KAAK,GAEdzhB,GAAW,CACpB,WAAY,EACZ,WAAY,EACZ,OAAQ,EACR,MAAO,EACP,OAAQ,EACR,OAAQ,CACV,EAEA,SAAA,kBAAwB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CACxC,IAAI2hB,EAAQC,EAAQC,EAKpB,OAJI,EAAS,KAAK,KAAKtJ,EAAIA,EAAIC,EAAIA,CAAC,KAAG,GAAKmJ,EAAQ,GAAKA,IACrD,EAAQpJ,EAAIyC,EAAIxC,EAAI8H,KAAG,GAAK/H,EAAIsJ,EAAO,GAAKrJ,EAAIqJ,IAChD,EAAS,KAAK,KAAK7G,EAAIA,EAAIsF,EAAIA,CAAC,KAAG,GAAKsB,EAAQ,GAAKA,EAAQ,GAASA,GACtErJ,EAAI+H,EAAI9H,EAAIwC,IAAG,EAAI,CAACzC,EAAG,EAAI,CAACC,EAAG,EAAQ,CAACqJ,EAAO,EAAS,CAACF,GACtD,CACL,WAAY5F,EACZ,WAAYH,EACZ,OAAQ,KAAK,MAAMpD,EAAGD,CAAC,EAAIkJ,GAC3B,MAAO,KAAK,KAAKI,CAAK,EAAIJ,GAClB,SACA,QACV,CACF,C,oCCvBA,IAAIK,GAGJ,SAAgB,SAAS,EAAO,CAC9B,IAAMvM,EAAI,IAAK,OAAO,WAAc,WAAa,UAAY,iBAAiB0B,EAAQ,EAAE,EACxF,OAAO1B,EAAE,WAAatV,GAAWC,kBAAUqV,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CACzE,CAEA,SAAgB,SAAS,EAAO,CAM9B,OALI0B,GAAS,OACb,AAAc6K,KAAU,SAAS,gBAAgB,6BAA8B,GAAG,EAClFA,GAAQ,aAAa,YAAa7K,CAAK,EACnC,EAAE,EAAQ6K,GAAQ,UAAU,QAAQ,YAAY,IAAW7hB,IAC/D,EAAQgX,EAAM,OACP/W,kBAAU+W,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,EACvE,CCdA,SAAS,qBAAqB,EAAO,EAAS,EAAS,EAAU,CAE/D,SAAS,IAAI,EAAG,CACd,OAAOoH,EAAE,OAASA,EAAE,IAAI,EAAI,IAAM,EACpC,CAEA,SAAS,UAAU,EAAI,EAAI,EAAI,EAAI,EAAG,EAAG,CACvC,GAAI0D,IAAOC,GAAMC,IAAOC,EAAI,CAC1B,IAAIlN,EAAI,EAAE,KAAK,aAAc,KAAMmN,EAAS,KAAMC,CAAO,EACzDb,EAAE,KAAK,CAAC,EAAGvM,EAAI,EAAG,EAAG7U,eAAO4hB,EAAIC,CAAE,CAAC,EAAG,CAAC,EAAGhN,EAAI,EAAG,EAAG7U,eAAO8hB,EAAIC,CAAE,CAAC,CAAC,CACrE,MAAWF,GAAME,IACf,EAAE,KAAK,aAAeF,EAAKG,EAAUD,EAAKE,CAAO,CAErD,CAEA,SAAS,OAAO,EAAG,EAAG,EAAG,EAAG,CACtB7J,IAAMC,EAGCA,GACT6F,EAAE,KAAK,IAAIA,CAAC,EAAI,UAAY7F,EAAI6J,CAAQ,GAHpC9J,EAAIC,EAAI,IAAK,GAAK,IAAcA,EAAID,EAAI,MAAK,GAAK,KACtDgJ,EAAE,KAAK,CAAC,EAAGlD,EAAE,KAAK,IAAIA,CAAC,EAAI,UAAW,KAAMgE,CAAQ,EAAI,EAAG,EAAGliB,eAAOoY,EAAGC,CAAC,CAAC,CAAC,EAI/E,CAEA,SAAS,MAAM,EAAG,EAAG,EAAG,EAAG,CACrBD,IAAMC,EAECA,GACT6F,EAAE,KAAK,IAAIA,CAAC,EAAI,SAAW7F,EAAI6J,CAAQ,EAFvCd,EAAE,KAAK,CAAC,EAAGlD,EAAE,KAAK,IAAIA,CAAC,EAAI,SAAU,KAAMgE,CAAQ,EAAI,EAAG,EAAGliB,eAAOoY,EAAGC,CAAC,CAAC,CAAC,CAI9E,CAEA,SAAS,MAAM,EAAI,EAAI,EAAI,EAAI,EAAG,EAAG,CACnC,GAAIuJ,IAAOC,GAAMC,IAAOC,EAAI,CAC1B,IAAIlN,EAAIqJ,EAAE,KAAK,IAAIA,CAAC,EAAI,SAAU,KAAM,IAAK,KAAM,GAAG,EACtDkD,EAAE,KAAK,CAAC,EAAGvM,EAAI,EAAG,EAAG7U,eAAO4hB,EAAIC,CAAE,CAAC,EAAG,CAAC,EAAGhN,EAAI,EAAG,EAAG7U,eAAO8hB,EAAIC,CAAE,CAAC,CAAC,CACrE,MAAWF,IAAO,GAAKE,IAAO,IAC5B7D,EAAE,KAAK,IAAIA,CAAC,EAAI,SAAW2D,EAAK,IAAME,EAAK,GAAG,CAElD,CAEA,OAAO,SAAS,EAAG,EAAG,CACpB,IAAI7D,EAAI,CAAC,EACLkD,EAAI,CAAC,EAOT,MANA,GAAIe,EAAM/J,CAAC,EAAG,EAAI+J,EAAM9J,CAAC,EACzB,UAAUD,EAAE,WAAYA,EAAE,WAAYC,EAAE,WAAYA,EAAE,WAAY6F,EAAGkD,CAAC,EACtE,OAAOhJ,EAAE,OAAQC,EAAE,OAAQ6F,EAAGkD,CAAC,EAC/B,MAAMhJ,EAAE,MAAOC,EAAE,MAAO6F,EAAGkD,CAAC,EAC5B,MAAMhJ,EAAE,OAAQA,EAAE,OAAQC,EAAE,OAAQA,EAAE,OAAQ6F,EAAGkD,CAAC,EAClD,EAAI,EAAI,KACD,SAAS,EAAG,CAEjB,IADA,IAAIvM,EAAI,GAAI,EAAIuM,EAAE,OAAQ,EACnB,EAAEvM,EAAI,GAAG,GAAG,EAAIuM,EAAEvM,GAAA,CAAI,GAAK,EAAE,EAAEyE,CAAC,EACvC,OAAO4E,EAAE,KAAK,EAAE,CAClB,CACF,CACF,CAEA,IAAWkE,GAA0B,qBAAqB,SAAU,OAAQ,MAAO,MAAM,EAC9EC,GAA0B,qBAAqB,SAAU,KAAM,IAAK,GAAG,EC9D9EC,GAAW,MAEf,SAAS,KAAK,EAAG,CACf,QAAS,EAAI,KAAK,IAAI1M,CAAC,GAAK,EAAIA,GAAK,CACvC,CAEA,SAAS,KAAK,EAAG,CACf,QAAS,EAAI,KAAK,IAAIA,CAAC,GAAK,EAAIA,GAAK,CACvC,CAEA,SAAS,KAAK,EAAG,CACf,QAAS,EAAI,KAAK,IAAI,EAAIA,CAAC,GAAK,IAAMA,EAAI,EAC5C,CAEA,IAAA2M,IAAgB,SAAS,QAAQ,EAAK,EAAM,EAAM,CAIhD,SAAS,KAAK,EAAI,EAAI,CACpB,IAAIC,EAAMC,EAAG,GAAIC,EAAMD,EAAG,GAAIE,EAAKF,EAAG,GAClCG,EAAMC,EAAG,GAAIC,EAAMD,EAAG,GAAIE,EAAKF,EAAG,GAClCG,EAAKJ,EAAMJ,EACXS,EAAKH,EAAMJ,EACXQ,EAAKF,EAAKA,EAAKC,EAAKA,EACpB,EACAE,EAGJ,GAAID,EAAKZ,GACP,EAAI,KAAK,IAAIS,EAAKJ,CAAE,EAAIS,EACxB,EAAI,SAAS,EAAG,CACd,MAAO,CACLZ,EAAM,EAAIQ,EACVN,EAAM,EAAIO,EACVN,EAAK,KAAK,IAAIS,EAAM,EAAID,CAAC,CAC3B,CACF,MAIG,CACH,IAAIE,EAAK,KAAK,KAAKH,CAAE,EACjBI,GAAMP,EAAKA,EAAKJ,EAAKA,EAAKY,EAAOL,IAAO,EAAIP,EAAKa,EAAOH,GACxDI,GAAMV,EAAKA,EAAKJ,EAAKA,EAAKY,EAAOL,IAAO,EAAIH,EAAKS,EAAOH,GACxDK,EAAK,KAAK,IAAI,KAAK,KAAKJ,EAAKA,EAAK,CAAC,EAAIA,CAAE,EAE7C,GADS,KAAK,IAAI,KAAK,KAAKG,EAAKA,EAAK,CAAC,EAAIA,CACrC,EAAIC,GAAMN,EAChB,EAAI,SAAS,EAAG,CACd,IAAIlF,EAAI5E,EAAI6J,EACRQ,EAAS,KAAKD,CAAE,EAChBE,EAAIjB,GAAMa,EAAOH,IAAOM,EAAS,KAAKP,EAAMlF,EAAIwF,CAAE,EAAI,KAAKA,CAAE,GACjE,MAAO,CACLlB,EAAMoB,EAAIZ,EACVN,EAAMkB,EAAIX,EACVN,EAAKgB,EAAS,KAAKP,EAAMlF,EAAIwF,CAAE,CACjC,CACF,CACF,CAIA,MAFA,GAAE,SAAWP,EAAI,IAAOC,EAAM,KAAK,MAE5B,CACT,CAOA,MALA,MAAK,IAAM,SAAS,EAAG,CACrB,IAAIS,EAAK,KAAK,IAAI,KAAM,CAACtJ,CAAC,EAAGuJ,EAAKD,EAAKA,EACvC,OAAO,QAAQA,EAAIC,EAD6BA,EAAKA,CAC5B,CAC3B,EAEO,IACT,EAAA,CAAG,KAAK,MAAO,EAAG,CAAC,ECnEnB,SAAS7jB,MAAI,EAAK,CAChB,OAAO,SAAS,EAAO,EAAK,CAC1B,IAAIke,EAAI4F,GAAK,EAAQ7jB,IAASogB,CAAK,EAAA,CAAG,GAAI,EAAMpgB,IAASqgB,CAAG,EAAA,CAAG,CAAC,EAC5DrC,EAAI/d,QAAMmgB,EAAM,EAAGC,EAAI,CAAC,EACxB3C,EAAIzd,QAAMmgB,EAAM,EAAGC,EAAI,CAAC,EACxBvC,EAAU7d,QAAMmgB,EAAM,QAASC,EAAI,OAAO,EAC9C,OAAO,SAAS,EAAG,CAKjB,MAJA,GAAM,EAAIpC,EAAE7E,CAAC,EACb,EAAM,EAAI4E,EAAE5E,CAAC,EACb,EAAM,EAAIsE,EAAEtE,CAAC,EACb,EAAM,QAAU0E,EAAQ1E,CAAC,EAClBgH,EAAQ,EACjB,CACF,CACF,C,oBAEA,IAAA0D,GAAe/jB,MAAI,GAAG,EACXgkB,GAAUhkB,MAAIE,OAAK,ECjB9B,SAAwB,IAAI,EAAO,EAAK,CACtC,IAAIyd,EAAIxd,SAAO,EAAQC,MAASigB,CAAK,EAAA,CAAG,GAAI,EAAMjgB,MAASkgB,CAAG,EAAA,CAAG,CAAC,EAC9DnI,EAAIhY,QAAMkgB,EAAM,EAAGC,EAAI,CAAC,EACxBlI,EAAIjY,QAAMkgB,EAAM,EAAGC,EAAI,CAAC,EACxBvC,EAAU5d,QAAMkgB,EAAM,QAASC,EAAI,OAAO,EAC9C,OAAO,SAAS,EAAG,CAKjB,MAJA,GAAM,EAAI3C,EAAE,CAAC,EACb,EAAM,EAAIxF,EAAE,CAAC,EACb,EAAM,EAAIC,EAAE,CAAC,EACb,EAAM,QAAU2F,EAAQ,CAAC,EAClBsC,EAAQ,EACjB,CACF,CCZA,SAAShgB,MAAI,EAAK,CAChB,OAAO,SAAS,EAAO,EAAK,CAC1B,IAAI6d,EAAI4F,GAAK,EAAQxjB,IAAS+f,CAAK,EAAA,CAAG,GAAI,EAAM/f,IAASggB,CAAG,EAAA,CAAG,CAAC,EAC5D1F,EAAIra,QAAM8f,EAAM,EAAGC,EAAI,CAAC,EACxB3C,EAAIpd,QAAM8f,EAAM,EAAGC,EAAI,CAAC,EACxBvC,EAAUxd,QAAM8f,EAAM,QAASC,EAAI,OAAO,EAC9C,OAAO,SAAS,EAAG,CAKjB,MAJA,GAAM,EAAIpC,EAAE7E,CAAC,EACb,EAAM,EAAIuB,EAAEvB,CAAC,EACb,EAAM,EAAIsE,EAAEtE,CAAC,EACb,EAAM,QAAU0E,EAAQ1E,CAAC,EAClBgH,EAAQ,EACjB,CACF,CACF,C,oBAEA,IAAA4D,GAAe5jB,MAAI,GAAG,EACX6jB,GAAU7jB,MAAIE,OAAK,ECjB9B,SAASC,YAAU,EAAK,CACtB,OAAQ,SAAS,eAAe,EAAG,CACjC,EAAI,CAACue,EAEL,SAASve,YAAU,EAAO,EAAK,CAC7B,IAAI0d,EAAI4F,GAAK,EAAQrjB,UAAe4f,CAAK,EAAA,CAAG,GAAI,EAAM5f,UAAe6f,CAAG,EAAA,CAAG,CAAC,EACxErC,EAAIvd,QAAM2f,EAAM,EAAGC,EAAI,CAAC,EACxB3C,EAAIjd,QAAM2f,EAAM,EAAGC,EAAI,CAAC,EACxBvC,EAAUrd,QAAM2f,EAAM,QAASC,EAAI,OAAO,EAC9C,OAAO,SAAS,EAAG,CAKjB,MAJA,GAAM,EAAIpC,EAAE7E,CAAC,EACb,EAAM,EAAI4E,EAAE5E,CAAC,EACb,EAAM,EAAIsE,EAAWtE,IAAG0F,CAAE,EAC1B,EAAM,QAAUhB,EAAQ1E,CAAC,EAClBgH,EAAQ,EACjB,CACF,CAIA,O,gCAFA,YAAU,MAAQ,eAEX7f,WACT,EAAA,CAAG,CAAC,CACN,C,gCAEA,IAAA2jB,GAAe3jB,YAAU,GAAG,EACjB4jB,GAAgB5jB,YAAUE,OAAK,EC1B1C,SAAwB,UAAU,EAAa,EAAQ,CACjDsf,IAAW,IAAA,KAAW,EAASqE,EAAa,EAAc1jB,eAE9D,IADA,IAAIiU,EAAI,EAAGW,EAAIyK,EAAO,OAAS,EAAGvH,EAAIuH,EAAO,GAAIsE,EAAQ,MAAM/O,EAAI,EAAI,EAAIA,CAAC,EACrEX,EAAIW,GAAG,EAAEX,GAAKyP,EAAY5L,EAAG,EAAIuH,EAAO,EAAEpL,EAAE,EACnD,OAAO,SAAS,EAAG,CACjB,IAAIA,EAAI,KAAK,IAAI,EAAG,KAAK,IAAIW,EAAI,EAAG,KAAK,MAAM,GAAKA,CAAC,CAAC,CAAC,EACvD,OAAO+O,EAAE1P,EAAE,CAACyE,EAAIzE,CAAC,CACnB,CACF,CCVA,SAAA,iBAAwB,EAAc,EAAG,CAEvC,IAAK,IADD2P,EAAc,MAAMhP,CAAC,EAChBX,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAAG,EAAQA,GAAK4P,EAAa5P,GAAKW,EAAI,EAAE,EACjE,OAAOgP,CACT,C,mCCFA,SAAS,YAAY,EAAI,EAAM,CAC7B,IAAIE,EAAQC,EACZ,OAAO,UAAW,CAChB,IAAIrI,EAAWzb,MAAI,KAAMmZ,CAAE,EACvBuC,EAAQD,EAAS,MAKrB,GAAIC,IAAUmI,EAAQ,CACpB,EAAS,EAASnI,EAClB,IAAK,IAAI1H,EAAI,EAAGW,EAAImP,EAAO,OAAQ9P,EAAIW,EAAG,EAAEX,EAC1C,GAAI8P,EAAO9P,EAAE,CAAC,OAASR,EAAM,CAC3B,EAASsQ,EAAO,MAAM,EACtBA,EAAO,OAAO9P,EAAG,CAAC,EAClB,KACF,CAEJ,CAEA,EAAS,MAAQ8P,CACnB,CACF,CAEA,SAAS,cAAc,EAAI,EAAM,EAAO,CACtC,IAAID,EAAQC,EACZ,GAAI,OAAO7N,GAAU,WAAY,MAAU,MAAI,EAC/C,OAAO,UAAW,CAChB,IAAIwF,EAAWzb,MAAI,KAAMmZ,CAAE,EACvBuC,EAAQD,EAAS,MAKrB,GAAIC,IAAUmI,EAAQ,CACpB,GAAU,EAASnI,EAAA,CAAO,MAAM,EAChC,IAAK,IAAIjD,EAAI,CAAO,OAAa,OAAK,EAAGzE,EAAI,EAAGW,EAAImP,EAAO,OAAQ9P,EAAIW,EAAG,EAAEX,EAC1E,GAAI8P,EAAO9P,EAAE,CAAC,OAASR,EAAM,CAC3B,EAAOQ,GAAKyE,EACZ,KACF,CAEEzE,IAAMW,GAAGmP,EAAO,KAAKrL,CAAC,CAC5B,CAEA,EAAS,MAAQqL,CACnB,CACF,CAEA,SAAA,cAAwB,EAAM,EAAO,CACnC,IAAI3K,EAAK,KAAK,IAId,GAFA,GAAQ,GAEJ,UAAU,OAAS,EAAG,CAExB,IAAK,IADDuC,EAAQ,IAAI,KAAK,KAAK,EAAGvC,CAAE,CAAC,CAAC,MACxBnF,EAAI,EAAGW,EAAI+G,EAAM,OAAQjD,EAAGzE,EAAIW,EAAG,EAAEX,EAC5C,IAAK,EAAI0H,EAAM1H,GAAA,CAAI,OAASR,EAC1B,OAAOiF,EAAE,MAGb,OAAO,IACT,CAEA,OAAO,KAAK,MAAMxC,GAAS,KAAO,YAAc,cAAA,CAAekD,EAAI3F,EAAMyC,CAAK,CAAC,CACjF,C,gCAEA,SAAgB,WAAW,EAAY,EAAM,EAAO,CAClD,IAAIkD,EAAK4K,EAAW,IAOpB,OALAA,EAAW,KAAK,UAAW,CACzB,IAAItI,EAAWzb,MAAI,KAAMmZ,CAAE,EAC3B,CAAC,AAAmBsC,EAAS,QAAQ,CAAC,EAAA,CAAIjI,GAAQyC,EAAM,MAAM,KAAM,SAAS,CAC/E,CAAC,EAEM,SAAS,EAAM,CACpB,OAAO,IAAIpB,EAAMsE,CAAE,CAAC,CAAC,MAAM3F,EAC7B,CACF,CC7EA,SAAA,oBAAwB,EAAG,EAAG,CAC5B,IAAIwG,EACJ,OAAQ,OAAOxC,GAAM,SAAWvX,eAC1BuX,aAAa,MAAQtX,IACpB,EAAI,MAAMsX,CAAC,IAAM,EAAIwC,EAAG9Z,IACzBC,eAAAA,CAAmBoX,EAAGC,CAAC,CAC/B,C,sCCJA,SAAS,WAAW,EAAM,CACxB,OAAO,UAAW,CAChB,KAAK,gBAAgBhE,CAAI,CAC3B,CACF,CAEA,SAAS,aAAa,EAAU,CAC9B,OAAO,UAAW,CAChB,KAAK,kBAAkBW,EAAS,MAAOA,EAAS,KAAK,CACvD,CACF,CAEA,SAAS,aAAa,EAAM,EAAa,EAAQ,CAC/C,IAAI6P,EACAC,EAAUC,EAAS,GACnBC,EACJ,OAAO,UAAW,CAChB,IAAIC,EAAU,KAAK,aAAa5Q,CAAI,EACpC,OAAO4Q,IAAYH,EAAU,KACvBG,IAAYJ,EAAWG,EACvB,EAAeV,EAAY,EAAWW,EAASF,CAAM,CAC7D,CACF,CAEA,SAAS,eAAe,EAAU,EAAa,EAAQ,CACrD,IAAIF,EACAC,EAAUC,EAAS,GACnBC,EACJ,OAAO,UAAW,CAChB,IAAIC,EAAU,KAAK,eAAejQ,EAAS,MAAOA,EAAS,KAAK,EAChE,OAAOiQ,IAAYH,EAAU,KACvBG,IAAYJ,EAAWG,EACvB,EAAeV,EAAY,EAAWW,EAASF,CAAM,CAC7D,CACF,CAEA,SAAS,aAAa,EAAM,EAAa,EAAO,CAC9C,IAAIF,EACAK,EACAF,EACJ,OAAO,UAAW,CAChB,IAAIC,EAASF,EAASjO,EAAM,IAAI,EAAGgO,EAInC,OAHIC,GAAU,KAAa,KAAK,KAAK,gBAAgB1Q,CAAI,GACzD,EAAU,KAAK,aAAaA,CAAI,EAChC,EAAU0Q,EAAS,GACZE,IAAYH,EAAU,KACvBG,IAAYJ,GAAYC,IAAYI,EAAWF,GAC9C,EAAWF,EAAS,EAAeR,EAAY,EAAWW,EAASF,CAAM,GAClF,CACF,CAEA,SAAS,eAAe,EAAU,EAAa,EAAO,CACpD,IAAIF,EACAK,EACAF,EACJ,OAAO,UAAW,CAChB,IAAIC,EAASF,EAASjO,EAAM,IAAI,EAAGgO,EAInC,OAHIC,GAAU,KAAa,KAAK,KAAK,kBAAkB/P,EAAS,MAAOA,EAAS,KAAK,GACrF,EAAU,KAAK,eAAeA,EAAS,MAAOA,EAAS,KAAK,EAC5D,EAAU+P,EAAS,GACZE,IAAYH,EAAU,KACvBG,IAAYJ,GAAYC,IAAYI,EAAWF,GAC9C,EAAWF,EAAS,EAAeR,EAAY,EAAWW,EAASF,CAAM,GAClF,CACF,CAEA,SAAA,aAAwB,EAAM,EAAO,CACnC,IAAI/P,EAAW/T,kBAAUoT,CAAI,EAAGQ,EAAIG,IAAa,YAAc9T,GAAuBC,oBACtF,OAAO,KAAK,UAAUkT,EAAM,OAAOyC,GAAU,YACtC9B,EAAS,MAAQ,eAAiB,aAAA,CAAcA,EAAUH,EAAG,WAAW,KAAM,QAAUR,EAAMyC,CAAK,CAAC,EACrGA,GAAS,MAAQ9B,EAAS,MAAQ,aAAe,WAAA,CAAYA,CAAQ,GACpEA,EAAS,MAAQ,eAAiB,aAAA,CAAcA,EAAUH,EAAGiC,CAAK,CAAC,CAC5E,C,+BC3EA,SAAS,gBAAgB,EAAM,EAAG,CAChC,OAAO,SAAS,EAAG,CACjB,KAAK,aAAazC,EAAMQ,EAAE,KAAK,KAAMyE,CAAC,CAAC,CACzC,CACF,CAEA,SAAS,kBAAkB,EAAU,EAAG,CACtC,OAAO,SAAS,EAAG,CACjB,KAAK,eAAetE,EAAS,MAAOA,EAAS,MAAOH,EAAE,KAAK,KAAMyE,CAAC,CAAC,CACrE,CACF,CAEA,SAAS,YAAY,EAAU,EAAO,CACpC,IAAIwC,EAAI3E,EACR,SAAS,OAAQ,CACf,IAAItC,EAAIiC,EAAM,MAAM,KAAM,SAAS,EAEnC,OADIjC,IAAMsC,IAAI,GAAM,EAAKtC,IAAM,kBAAkBG,EAAUH,CAAC,GACrDiH,CACT,CAEA,MADA,OAAM,OAAShF,EACR,KACT,CAEA,SAAS,UAAU,EAAM,EAAO,CAC9B,IAAIgF,EAAI3E,EACR,SAAS,OAAQ,CACf,IAAItC,EAAIiC,EAAM,MAAM,KAAM,SAAS,EAEnC,OADIjC,IAAMsC,IAAI,GAAM,EAAKtC,IAAM,gBAAgBR,EAAMQ,CAAC,GAC/CiH,CACT,CAEA,MADA,OAAM,OAAShF,EACR,KACT,CAEA,SAAA,kBAAwB,EAAM,EAAO,CACnC,IAAIF,EAAM,QAAUvC,EACpB,GAAI,UAAU,OAAS,EAAG,OAAQ,EAAM,KAAK,MAAMuC,CAAG,IAAMA,EAAI,OAChE,GAAIE,GAAS,KAAM,OAAO,KAAK,MAAMF,EAAK,IAAI,EAC9C,GAAI,OAAOE,GAAU,WAAY,MAAU,MAAI,EAC/C,IAAI9B,EAAW5T,kBAAUiT,CAAI,EAC7B,OAAO,KAAK,MAAMuC,GAAM5B,EAAS,MAAQ,YAAc,UAAA,CAAWA,EAAU8B,CAAK,CAAC,CACpF,C,oCCzCA,SAAS,cAAc,EAAI,EAAO,CAChC,OAAO,UAAW,CAChB,KAAK,KAAMkD,CAAE,CAAC,CAAC,MAAQ,CAAClD,EAAM,MAAM,KAAM,SAAS,CACrD,CACF,CAEA,SAAS,cAAc,EAAI,EAAO,CAChC,MAAO,GAAQ,CAACA,EAAO,UAAW,CAChC,KAAK,KAAMkD,CAAE,CAAC,CAAC,MAAQlD,CACzB,CACF,CAEA,SAAA,cAAwB,EAAO,CAC7B,IAAIkD,EAAK,KAAK,IAEd,OAAO,UAAU,OACX,KAAK,MAAM,OAAOlD,GAAU,WACxB,cACA,cAAA,CAAekD,EAAIlD,CAAK,CAAC,EAC7B,IAAI,KAAK,KAAK,EAAGkD,CAAE,CAAC,CAAC,KAC7B,C,gCCpBA,SAAS,iBAAiB,EAAI,EAAO,CACnC,OAAO,UAAW,CAChB,MAAI,KAAMA,CAAE,CAAC,CAAC,SAAW,CAAClD,EAAM,MAAM,KAAM,SAAS,CACvD,CACF,CAEA,SAAS,iBAAiB,EAAI,EAAO,CACnC,MAAO,GAAQ,CAACA,EAAO,UAAW,CAChC,MAAI,KAAMkD,CAAE,CAAC,CAAC,SAAWlD,CAC3B,CACF,CAEA,SAAA,iBAAwB,EAAO,CAC7B,IAAIkD,EAAK,KAAK,IAEd,OAAO,UAAU,OACX,KAAK,MAAM,OAAOlD,GAAU,WACxB,iBACA,iBAAA,CAAkBkD,EAAIlD,CAAK,CAAC,EAChC,IAAI,KAAK,KAAK,EAAGkD,CAAE,CAAC,CAAC,QAC7B,C,mCCpBA,SAAS,aAAa,EAAI,EAAO,CAC/B,GAAI,OAAOlD,GAAU,WAAY,MAAU,MAAI,EAC/C,OAAO,UAAW,CAChB,MAAI,KAAMkD,CAAE,CAAC,CAAC,KAAOlD,CACvB,CACF,CAEA,SAAA,aAAwB,EAAO,CAC7B,IAAIkD,EAAK,KAAK,IAEd,OAAO,UAAU,OACX,KAAK,KAAK,aAAaA,EAAIlD,CAAK,CAAC,EACjC,IAAI,KAAK,KAAK,EAAGkD,CAAE,CAAC,CAAC,IAC7B,C,+BCbA,SAAS,YAAY,EAAI,EAAO,CAC9B,OAAO,UAAW,CAChB,IAAItB,EAAI5B,EAAM,MAAM,KAAM,SAAS,EACnC,GAAI,OAAO4B,GAAM,WAAY,MAAU,MAAI,EAC3C,MAAI,KAAMsB,CAAE,CAAC,CAAC,KAAOtB,CACvB,CACF,CAEA,SAAA,oBAAwB,EAAO,CAC7B,GAAI,OAAO5B,GAAU,WAAY,MAAU,MAAI,EAC/C,OAAO,KAAK,KAAK,YAAY,KAAK,IAAKA,CAAK,CAAC,CAC/C,C,sCCVA,SAAA,eAAwB,EAAO,CACzB,OAAOf,GAAU,aAAY,EAAQ1U,gBAAQ0U,CAAK,GAEtD,IAAK,IAAIZ,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQE,EAAgB,MAAMD,CAAC,EAAGE,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAC3F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQE,EAAW,EAAUH,GAAK,CAAC,EAAGI,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GAC3F,EAAOU,EAAMV,KAAOkB,EAAM,KAAKL,EAAMA,EAAK,SAAUb,EAAGU,CAAK,GAC/DE,EAAS,KAAKC,CAAI,EAKxB,OAAO,IAAIpU,aAAW+T,EAAW,KAAK,SAAU,KAAK,MAAO,KAAK,GAAG,CACtE,C,iCCbA,SAAA,cAAwB,EAAY,CAClC,GAAIuP,EAAW,MAAQ,KAAK,IAAK,MAAU,MAAI,EAE/C,IAAK,IAAIjN,EAAU,KAAK,QAASC,EAAUgN,EAAW,QAAS/M,EAAKF,EAAQ,OAAQG,EAAKF,EAAQ,OAAQxC,EAAI,KAAK,IAAIyC,EAAIC,CAAE,EAAGC,EAAa,MAAMF,CAAE,EAAGvC,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EACrK,IAAK,IAAI0C,EAASL,EAAQrC,GAAI2C,EAASL,EAAQtC,GAAIE,EAAIwC,EAAO,OAAQE,EAAQ,EAAO5C,GAAS,MAAME,CAAC,EAAGE,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GACxH,EAAOmD,EAAOnD,IAAMoD,EAAOpD,MAC7B,EAAMA,GAAKa,GAKjB,KAAOJ,EAAIuC,EAAI,EAAEvC,EACf,EAAOA,GAAKqC,EAAQrC,GAGtB,OAAO,IAAI/T,aAAWwW,EAAQ,KAAK,SAAU,KAAK,MAAO,KAAK,GAAG,CACnE,C,gCChBA,SAAS,MAAM,EAAM,CACnB,OAAQ1D,EAAO,GAAA,CAAI,KAAK,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,SAAS,EAAG,CACzD,IAAIQ,EAAIyE,EAAE,QAAQ,GAAG,EAErB,OADIzE,GAAK,IAAG,EAAIyE,EAAE,MAAM,EAAGzE,CAAC,GACrB,CAACyE,GAAKA,IAAM,OACrB,CAAC,CACH,CAEA,SAAS,WAAW,EAAI,EAAM,EAAU,CACtC,IAAI6L,EAAKC,EAAKC,EAAM,MAAMhR,CAAI,EAAI,KAAO7S,MACzC,OAAO,UAAW,CAChB,IAAI8a,EAAW+I,EAAI,KAAMrL,CAAE,EACvBT,EAAK+C,EAAS,GAKd/C,IAAO4L,IAAM,GAAO,EAAM5L,EAAA,CAAI,KAAK,EAAA,CAAG,GAAGlF,EAAM8E,CAAQ,EAE3D,EAAS,GAAKiM,CAChB,CACF,CAEA,SAAA,WAAwB,EAAM,EAAU,CACtC,IAAIpL,EAAK,KAAK,IAEd,OAAO,UAAU,OAAS,EACpB,IAAI,KAAK,KAAK,EAAGA,CAAE,CAAC,CAAC,GAAG,GAAG3F,CAAI,EAC/B,KAAK,KAAK,WAAW2F,EAAI3F,EAAM8E,CAAQ,CAAC,CAChD,C,6BC/BA,SAAS,eAAe,EAAI,CAC1B,OAAO,UAAW,CAChB,IAAIjD,EAAS,KAAK,WAClB,IAAK,IAAIrB,KAAK,KAAK,aAAc,GAAI,CAACA,IAAMmF,EAAI,OAC5C9D,GAAQA,EAAO,YAAY,IAAI,CACrC,CACF,CAEA,SAAA,gBAA0B,CACxB,OAAO,KAAK,GAAG,aAAc,eAAe,KAAK,GAAG,CAAC,CACvD,C,iCCNA,SAAA,iBAAwB,EAAQ,CAC9B,IAAI7B,EAAO,KAAK,MACZ2F,EAAK,KAAK,IAEV,OAAO9E,GAAW,aAAY,EAASzT,iBAASyT,CAAM,GAE1D,IAAK,IAAIC,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQE,EAAgB,MAAMD,CAAC,EAAGE,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAC3F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQE,EAAW,EAAUH,GAAS,MAAME,CAAC,EAAGE,EAAMC,EAASd,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GAC9G,EAAOU,EAAMV,MAAQ,EAAUK,EAAO,KAAKQ,EAAMA,EAAK,SAAUb,EAAGU,CAAK,KACvE,aAAcG,IAAM,EAAQ,SAAWA,EAAK,UAChD,EAASb,GAAKc,EACd,iBAASF,EAASZ,GAAIR,EAAM2F,EAAInF,EAAGY,EAAU,IAAIC,EAAMsE,CAAE,CAAC,GAKhE,OAAO,IAAItY,aAAW2T,EAAW,KAAK,SAAUhB,EAAM2F,CAAE,CAC1D,C,mCCjBA,SAAA,oBAAwB,EAAQ,CAC9B,IAAI3F,EAAO,KAAK,MACZ2F,EAAK,KAAK,IAEV,OAAO9E,GAAW,aAAY,EAASvT,oBAAYuT,CAAM,GAE7D,IAAK,IAAIC,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQE,EAAY,CAAC,EAAGQ,EAAU,CAAC,EAAGP,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EAC/F,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQG,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAClE,GAAI,EAAOU,EAAMV,GAAI,CACnB,IAAK,IAAIyQ,EAAWpQ,EAAO,KAAKQ,EAAMA,EAAK,SAAUb,EAAGU,CAAK,EAAGa,EAAOmP,EAAU,IAAI7P,EAAMsE,CAAE,EAAGiE,EAAI,EAAGL,EAAI0H,EAAS,OAAQrH,EAAIL,EAAG,EAAEK,GAC/H,EAAQqH,EAASrH,KACnB,iBAAS7H,EAAO/B,EAAM2F,EAAIiE,EAAGqH,EAAUC,CAAO,EAGlDlQ,EAAU,KAAKiQ,CAAQ,EACvBzP,EAAQ,KAAKH,CAAI,CACnB,CAIJ,OAAO,IAAI9T,aAAWyT,EAAWQ,EAASxB,EAAM2F,CAAE,CACpD,C,sCCvBA,IAAInY,GAAY,UAAU,UAAU,YAEpC,SAAA,mBAA0B,CACxB,OAAO,IAAIA,GAAU,KAAK,QAAS,KAAK,QAAQ,CAClD,C,oCCAA,SAAS,UAAU,EAAM,EAAa,CACpC,IAAIgjB,EACAK,EACAF,EACJ,OAAO,UAAW,CAChB,IAAIC,EAAUnjB,WAAM,KAAMuS,CAAI,EAC1ByQ,GAAW,KAAK,MAAM,eAAezQ,CAAI,EAAGvS,WAAM,KAAMuS,CAAI,GAChE,OAAO4Q,IAAYH,EAAU,KACvBG,IAAYJ,GAAYC,IAAYI,EAAWF,EAC/C,EAAeV,EAAY,EAAWW,EAAS,EAAWH,CAAO,CACzE,CACF,CAEA,SAAS,YAAY,EAAM,CACzB,OAAO,UAAW,CAChB,KAAK,MAAM,eAAezQ,CAAI,CAChC,CACF,CAEA,SAAS,cAAc,EAAM,EAAa,EAAQ,CAChD,IAAIwQ,EACAC,EAAUC,EAAS,GACnBC,EACJ,OAAO,UAAW,CAChB,IAAIC,EAAUnjB,WAAM,KAAMuS,CAAI,EAC9B,OAAO4Q,IAAYH,EAAU,KACvBG,IAAYJ,EAAWG,EACvB,EAAeV,EAAY,EAAWW,EAASF,CAAM,CAC7D,CACF,CAEA,SAAS,cAAc,EAAM,EAAa,EAAO,CAC/C,IAAIF,EACAK,EACAF,EACJ,OAAO,UAAW,CAChB,IAAIC,EAAUnjB,WAAM,KAAMuS,CAAI,EAC1B0Q,EAASjO,EAAM,IAAI,EACnBgO,EAAUC,EAAS,GAEvB,OADIA,IAAgB,EAAU,GAAU,KAAK,MAAM,eAAe1Q,CAAI,EAAGvS,WAAM,KAAMuS,CAAI,IAClF4Q,IAAYH,EAAU,KACvBG,IAAYJ,GAAYC,IAAYI,EAAWF,GAC9C,EAAWF,EAAS,EAAeR,EAAY,EAAWW,EAASF,CAAM,EAClF,CACF,CAEA,SAAS,iBAAiB,EAAI,EAAM,CAClC,IAAII,EAAKC,EAAKK,EAAW7O,EAAM,SAAWvC,EAAM+E,EAAQ,OAASxC,EAAK8O,EACtE,OAAO,UAAW,CAChB,IAAIpJ,EAAWva,MAAI,KAAMiY,CAAE,EACvBT,EAAK+C,EAAS,GACdnD,EAAWmD,EAAS,MAAM1F,IAAQ,KAAO,AAAW8O,IAAS,YAAYrR,CAAI,EAAK,IAAA,IAKlFkF,IAAO4L,GAAOM,IAActM,KAAW,GAAO,EAAMI,EAAA,CAAI,KAAK,EAAA,CAAG,GAAGH,EAAO,EAAYD,CAAQ,EAElG,EAAS,GAAKiM,CAChB,CACF,CAEA,SAAA,cAAwB,EAAM,EAAO,EAAU,CAC7C,IAAIvQ,GAAK,GAAQ,KAAQ,YAAc7S,GAAuBC,oBAC9D,OAAO6U,GAAS,KAAO,KAClB,WAAWzC,EAAM,UAAUA,EAAMQ,CAAC,CAAC,CAAC,CACpC,GAAG,aAAeR,EAAM,YAAYA,CAAI,CAAC,EAC1C,OAAOyC,GAAU,WAAa,KAC7B,WAAWzC,EAAM,cAAcA,EAAMQ,EAAG,WAAW,KAAM,SAAWR,EAAMyC,CAAK,CAAC,CAAC,CAAC,CAClF,KAAK,iBAAiB,KAAK,IAAKzC,CAAI,CAAC,EACtC,KACC,WAAWA,EAAM,cAAcA,EAAMQ,EAAGiC,CAAK,EAAG6B,CAAQ,CAAC,CACzD,GAAG,aAAetE,EAAM,IAAI,CACnC,C,gCC/EA,SAAS,iBAAiB,EAAM,EAAG,EAAU,CAC3C,OAAO,SAAS,EAAG,CACjB,KAAK,MAAM,YAAYA,EAAMQ,EAAE,KAAK,KAAMyE,CAAC,EAAGX,CAAQ,CACxD,CACF,CAEA,SAAS,WAAW,EAAM,EAAO,EAAU,CACzC,IAAIW,EAAGnC,EACP,SAAS,OAAQ,CACf,IAAItC,EAAIiC,EAAM,MAAM,KAAM,SAAS,EAEnC,OADIjC,IAAMsC,IAAI,GAAK,EAAKtC,IAAM,iBAAiBR,EAAMQ,EAAG8D,CAAQ,GACzDW,CACT,CAEA,MADA,OAAM,OAASxC,EACR,KACT,CAEA,SAAA,mBAAwB,EAAM,EAAO,EAAU,CAC7C,IAAIF,EAAM,UAAY,GAAQ,IAC9B,GAAI,UAAU,OAAS,EAAG,OAAQ,EAAM,KAAK,MAAMA,CAAG,IAAMA,EAAI,OAChE,GAAIE,GAAS,KAAM,OAAO,KAAK,MAAMF,EAAK,IAAI,EAC9C,GAAI,OAAOE,GAAU,WAAY,MAAU,MAAI,EAC/C,OAAO,KAAK,MAAMF,EAAK,WAAWvC,EAAMyC,EAAO6B,GAAmB,EAAa,CAAC,CAClF,C,qCCrBA,SAAS,aAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,KAAK,YAAc7B,CACrB,CACF,CAEA,SAAS,aAAa,EAAO,CAC3B,OAAO,UAAW,CAChB,IAAIiO,EAASjO,EAAM,IAAI,EACvB,KAAK,YAAciO,GAAiB,EACtC,CACF,CAEA,SAAA,aAAwB,EAAO,CAC7B,OAAO,KAAK,MAAM,OAAQ,OAAOjO,GAAU,WACrC,aAAa,WAAW,KAAM,OAAQA,CAAK,CAAC,EAC5C,aAAaA,GAAS,KAAO,GAAKA,EAAQ,EAAE,CAAC,CACrD,C,+BCnBA,SAAS,gBAAgB,EAAG,CAC1B,OAAO,SAAS,EAAG,CACjB,KAAK,YAAcjC,EAAE,KAAK,KAAM,CAAC,CACnC,CACF,CAEA,SAAS,UAAU,EAAO,CACxB,IAAIiH,EAAI3E,EACR,SAAS,OAAQ,CACf,IAAItC,EAAIiC,EAAM,MAAM,KAAM,SAAS,EAEnC,OADIjC,IAAMsC,IAAI,GAAM,EAAKtC,IAAM,gBAAgBA,CAAC,GACzCiH,CACT,CAEA,MADA,OAAM,OAAShF,EACR,KACT,CAEA,SAAA,kBAAwB,EAAO,CAC7B,IAAIF,EAAM,OACV,GAAI,UAAU,OAAS,EAAG,OAAQ,EAAM,KAAK,MAAMA,CAAG,IAAMA,EAAI,OAChE,GAAIE,GAAS,KAAM,OAAO,KAAK,MAAMF,EAAK,IAAI,EAC9C,GAAI,OAAOE,GAAU,WAAY,MAAU,MAAI,EAC/C,OAAO,KAAK,MAAMF,EAAK,UAAUE,CAAK,CAAC,CACzC,C,oCCpBA,SAAA,sBAA0B,CAKxB,IAAK,IAJDzC,EAAO,KAAK,MACZsR,EAAM,KAAK,IACXC,EAAM,MAAM,EAEPzQ,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQG,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EACjE,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQG,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAClE,GAAI,EAAOU,EAAMV,GAAI,CACnB,IAAI0Q,EAAU,IAAI7P,EAAMiQ,CAAG,EAC3B,iBAASjQ,EAAMrB,EAAMuR,EAAK/Q,EAAGU,EAAO,CAClC,KAAMgQ,EAAQ,KAAOA,EAAQ,MAAQA,EAAQ,SAC7C,MAAO,EACP,SAAUA,EAAQ,SAClB,KAAMA,EAAQ,IAChB,CAAC,CACH,CAIJ,OAAO,IAAIrjB,aAAWiT,EAAQ,KAAK,SAAUd,EAAMuR,CAAG,CACxD,C,uCCrBA,SAAA,aAA0B,CACxB,IAAIT,EAAKC,EAAKxK,EAAO,KAAMZ,EAAKY,EAAK,IAAKnC,EAAOmC,EAAK,KAAK,EAC3D,OAAO,IAAI,QAAQ,SAAS,EAAS,EAAQ,CAC3C,IAAIiL,EAAS,CAAC,MAAOC,CAAM,EACvBvF,EAAM,CAAC,MAAO,UAAW,CAAM,EAAE9H,IAAS,GAAGsN,EAAQ,CAAG,CAAC,EAE7DnL,EAAK,KAAK,UAAW,CACnB,IAAI0B,EAAWna,MAAI,KAAM6X,CAAE,EACvBT,EAAK+C,EAAS,GAKd/C,IAAO4L,IACT,GAAO,EAAM5L,EAAA,CAAI,KAAK,EACtB6L,EAAI,EAAE,OAAO,KAAKS,CAAM,EACxBT,EAAI,EAAE,UAAU,KAAKS,CAAM,EAC3BT,EAAI,EAAE,IAAI,KAAK7E,CAAG,GAGpB,EAAS,GAAK6E,CAChB,CAAC,EAGG3M,IAAS,GAAGsN,EAAQ,CAC1B,CAAC,CACH,C,8BCNA,IAAI/L,GAAK,EAET,SAAgB5X,aAAW,EAAQ,EAAS,EAAM,EAAI,CACpD,KAAK,QAAU+S,EACf,KAAK,SAAWU,EAChB,KAAK,MAAQxB,EACb,KAAK,IAAM2F,CACb,C,kCAEA,SAAwB,WAAW,EAAM,CACvC,OAAO,UAAU,CAAC,CAAC,WAAW3F,CAAI,CACpC,CAEA,SAAgB,OAAQ,CACtB,MAAO,EAAE2F,EACX,CAEA,IAAIgM,EAAsB,UAAU,UAEpC,aAAW,UAAY,WAAW,UAAY,CAC5C,YAAa5jB,aACb,OAAQC,iBACR,UAAWC,oBACX,YAAa0jB,EAAoB,YACjC,eAAgBA,EAAoB,eACpC,OAAQzjB,eACR,MAAOC,cACP,UAAWC,kBACX,WAAYC,qBACZ,KAAMsjB,EAAoB,KAC1B,MAAOA,EAAoB,MAC3B,KAAMA,EAAoB,KAC1B,KAAMA,EAAoB,KAC1B,MAAOA,EAAoB,MAC3B,KAAMA,EAAoB,KAC1B,GAAIrjB,WACJ,KAAMC,aACN,UAAWC,kBACX,MAAOC,cACP,WAAYC,mBACZ,KAAMC,aACN,UAAWC,kBACX,OAAQC,eACR,MAAOC,cACP,MAAOC,cACP,SAAUC,iBACV,KAAMC,aACN,YAAaC,oBACb,IAAKC,aACJ,OAAO,UAAWwiB,EAAoB,OAAO,SAChD,ECxEA,IAAa,OAAS,GAAK,CAAC1M,ECA5B,SAAgB,OAAO,EAAG,CACxB,OAAOA,EAAIA,CACb,CAEA,SAAgB,QAAQ,EAAG,CACzB,OAAOA,GAAK,EAAIA,EAClB,CAEA,SAAgB,UAAU,EAAG,CAC3B,QAAS,GAAK,IAAM,EAAIA,EAAIA,EAAI,EAAEA,GAAK,EAAIA,GAAK,GAAK,CACvD,CCVA,SAAgB,QAAQ,EAAG,CACzB,OAAOA,EAAIA,EAAIA,CACjB,CAEA,SAAgB,SAAS,EAAG,CAC1B,MAAO,EAAEA,EAAIA,EAAIA,EAAI,CACvB,CAEA,SAAgB,WAAW,EAAG,CAC5B,QAAS,GAAK,IAAM,EAAIA,EAAIA,EAAIA,GAAK,GAAK,GAAKA,EAAIA,EAAI,GAAK,CAC9D,CCVA,IAAI2M,GAAW,EAEJC,IAAU,SAAS,OAAO,EAAG,CACtC,EAAI,CAAC,EAEL,SAAS,OAAO,EAAG,CACjB,OAAgB,IAAG,CACrB,CAIA,MAFA,QAAO,SAAW,OAEX,MACT,EAAA,CAAGD,EAAQ,EAEAE,IAAW,SAAS,OAAO,EAAG,CACvC,EAAI,CAAC,EAEL,SAAS,QAAQ,EAAG,CAClB,MAAO,IAAa,EAAI,IAAG,CAC7B,CAIA,MAFA,SAAQ,SAAW,OAEZ,OACT,EAAA,CAAGF,EAAQ,EAEAG,IAAa,SAAS,OAAO,EAAG,CACzC,EAAI,CAAC,EAEL,SAAS,UAAU,EAAG,CACpB,QAAS,GAAK,IAAM,EAAa,IAAG,EAAK,GAAa,EAAI,IAAG,GAAM,CACrE,CAIA,MAFA,WAAU,SAAW,OAEd,SACT,EAAA,CAAGH,EAAQ,ECpCPI,GAAK,KAAK,GACVC,GAASD,GAAK,EAElB,SAAgB,MAAM,EAAG,CACvB,MAAQ,CAAC/M,GAAM,EAAK,EAAI,EAAI,KAAK,IAAIA,EAAIgN,EAAM,CACjD,CAEA,SAAgB,OAAO,EAAG,CACxB,OAAO,KAAK,IAAIhN,EAAIgN,EAAM,CAC5B,CAEA,SAAgB,SAAS,EAAG,CAC1B,OAAQ,EAAI,KAAK,IAAID,GAAK/M,CAAC,GAAK,CAClC,CCZA,SAAgB,KAAK,EAAG,CACtB,OAAiB,IAAG,IAAM1D,GAAK,aAAgB,kBACjD,CCDA,SAAgB,MAAM,EAAG,CACvB,OAAO,KAAK,EAAK0D,CAAC,CACpB,CAEA,SAAgB,OAAO,EAAG,CACxB,MAAO,GAAI,KAAKA,CAAC,CACnB,CAEA,SAAgB,SAAS,EAAG,CAC1B,QAAS,GAAK,IAAM,EAAI,KAAK,EAAIA,CAAC,EAAI,EAAI,KAAKA,EAAI,CAAC,GAAK,CAC3D,CCZA,SAAgB,SAAS,EAAG,CAC1B,MAAO,GAAI,KAAK,KAAK,EAAIA,EAAIA,CAAC,CAChC,CAEA,SAAgB,UAAU,EAAG,CAC3B,OAAO,KAAK,KAAK,GAAI,EAAEA,EAAIA,CAAC,CAC9B,CAEA,SAAgB,YAAY,EAAG,CAC7B,QAAS,GAAK,IAAM,EAAI,EAAI,KAAK,KAAK,EAAIA,EAAIA,CAAC,EAAI,KAAK,KAAK,GAAK,GAAK,GAAKA,CAAC,EAAI,GAAK,CACxF,CCVA,IAAImK,GAAK,EAAI,GACT8C,GAAK,EAAI,GACTC,GAAK,EAAI,GACTC,GAAK,EAAI,EACTC,GAAK,EAAI,GACTC,GAAK,GAAK,GACVC,GAAK,GAAK,GACVC,GAAK,GAAK,GACVC,GAAK,GAAK,GACVxD,GAAK,EAAIG,GAAKA,GAElB,SAAgB,SAAS,EAAG,CAC1B,MAAO,GAAI,UAAU,EAAInK,CAAC,CAC5B,CAEA,SAAgB,UAAU,EAAG,CAC3B,OAAQ,EAAI,CAACA,GAAKmK,GAAKH,GAAKhK,EAAIA,EAAIA,EAAIkN,GAAKlD,IAAM,GAAKiD,IAAMjN,EAAImN,GAAKnN,EAAIqN,GAAKrD,IAAM,GAAKoD,IAAMpN,EAAIsN,GAAKtD,IAAM,GAAKuD,IAAMvN,EAAIwN,EACjI,CAEA,SAAgB,YAAY,EAAG,CAC7B,QAAS,GAAK,IAAM,EAAI,EAAI,UAAU,EAAIxN,CAAC,EAAI,UAAUA,EAAI,CAAC,EAAI,GAAK,CACzE,CCrBA,IAAIyN,GAAY,QAELC,IAAU,SAAS,OAAO,EAAG,CACtC,EAAI,CAAC9I,EAEL,SAAS,OAAO,EAAG,CACjB,OAAQ,EAAI,CAAC,GAAK,GAAKA,GAAK,EAAI,GAAK,EACvC,CAIA,MAFA,QAAO,UAAY,OAEZ,MACT,EAAA,CAAG6I,EAAS,EAEDE,IAAW,SAAS,OAAO,EAAG,CACvC,EAAI,CAAC/I,EAEL,SAAS,QAAQ,EAAG,CAClB,MAAO,EAAE,EAAI,IAAM,EAAI,GAAKA,EAAI,GAAK,CACvC,CAIA,MAFA,SAAQ,UAAY,OAEb,OACT,EAAA,CAAG6I,EAAS,EAEDG,IAAa,SAAS,OAAO,EAAG,CACzC,EAAI,CAAChJ,EAEL,SAAS,UAAU,EAAG,CACpB,QAAS,GAAK,GAAK,EAAI,EAAI,IAAMA,EAAI,GAAK,EAAIA,IAAM,GAAK,GAAK,IAAMA,EAAI,GAAK,EAAIA,GAAK,GAAK,CAC7F,CAIA,MAFA,WAAU,UAAY,OAEf,SACT,EAAA,CAAG6I,EAAS,EClCRI,GAAM,EAAI,KAAK,GACfC,GAAY,EACZC,GAAS,GAEFC,IAAa,SAAS,OAAO,EAAG,EAAG,CAC5C,IAAIpJ,EAAI,KAAK,KAAK,GAAK,EAAI,KAAK,IAAI,EAAG9F,CAAC,EAAE,GAAK,GAAK+O,IAEpD,SAAS,UAAU,EAAG,CACpB,OAAO/O,EAAI,KAAK,EAAE,EAAEkB,CAAE,EAAI,KAAK,KAAK4E,EAAI5E,GAAKiO,CAAC,CAChD,CAKA,MAHA,WAAU,UAAY,SAAS,EAAG,CAAE,OAAO,OAAOnP,EAAGmP,EAAIJ,EAAG,CAAG,EAC/D,UAAU,OAAS,SAAS,EAAG,CAAE,OAAO,OAAO/O,EAAGmP,CAAC,CAAG,EAE/C,SACT,EAAA,CAAGH,GAAWC,EAAM,EAETG,IAAc,SAAS,OAAO,EAAG,EAAG,CAC7C,IAAItJ,EAAI,KAAK,KAAK,GAAK,EAAI,KAAK,IAAI,EAAG9F,CAAC,EAAE,GAAK,GAAK+O,IAEpD,SAAS,WAAW,EAAG,CACrB,MAAO,GAAI/O,EAAI,KAAK,EAAI,CAACkB,CAAC,EAAI,KAAK,KAAKA,EAAI4E,GAAKqJ,CAAC,CACpD,CAKA,MAHA,YAAW,UAAY,SAAS,EAAG,CAAE,OAAO,OAAOnP,EAAGmP,EAAIJ,EAAG,CAAG,EAChE,WAAW,OAAS,SAAS,EAAG,CAAE,OAAO,OAAO/O,EAAGmP,CAAC,CAAG,EAEhD,UACT,EAAA,CAAGH,GAAWC,EAAM,EAETI,IAAgB,SAAS,OAAO,EAAG,EAAG,CAC/C,IAAIvJ,EAAI,KAAK,KAAK,GAAK,EAAI,KAAK,IAAI,EAAG9F,CAAC,EAAE,GAAK,GAAK+O,IAEpD,SAAS,aAAa,EAAG,CACvB,QAAS,EAAI7N,EAAI,EAAI,GAAK,EACpBlB,EAAI,KAAK,CAACkB,CAAC,EAAI,KAAK,KAAK4E,EAAI5E,GAAKiO,CAAC,EACnC,EAAInP,EAAI,KAAKkB,CAAC,EAAI,KAAK,KAAK4E,EAAI5E,GAAKiO,CAAC,GAAK,CACnD,CAKA,MAHA,cAAa,UAAY,SAAS,EAAG,CAAE,OAAO,OAAOnP,EAAGmP,EAAIJ,EAAG,CAAG,EAClE,aAAa,OAAS,SAAS,EAAG,CAAE,OAAO,OAAO/O,EAAGmP,CAAC,CAAG,EAElD,YACT,EAAA,CAAGH,GAAWC,EAAM,ECxChBK,GAAgB,CAClB,KAAM,KACN,MAAO,EACP,SAAU,IACV,KAAMjkB,UACR,EAEA,SAAS,QAAQ,EAAM,EAAI,CAEzB,IADA,IAAI4Y,EACG,EAAE,EAAS3G,EAAK,eAAiB,EAAE,EAAS2G,EAAOrC,KACxD,GAAI,EAAE,EAAOtE,EAAK,YAChB,MAAU,MAAM,cAAcsE,EAAG,WAAW,EAGhD,OAAOqC,CACT,CAEA,SAAA,mBAAwB,EAAM,CAC5B,IAAIrC,EACAqC,EAEAhI,aAAgB3Q,cAClB,EAAK2Q,EAAK,IAAK,EAAOA,EAAK,QAE3B,EAAK,MAAM,EAAG,CAAC,EAASqT,GAAA,CAAe,KAAO/jB,MAAI,EAAG,EAAO0Q,GAAQ,KAAO,KAAOA,EAAO,IAG3F,IAAK,IAAIc,EAAS,KAAK,QAASC,EAAID,EAAO,OAAQG,EAAI,EAAGA,EAAIF,EAAG,EAAEE,EACjE,IAAK,IAAIC,EAAQJ,EAAOG,GAAIE,EAAID,EAAM,OAAQG,EAAMb,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GAC9D,EAAOU,EAAMV,KACf,iBAASa,EAAMrB,EAAM2F,EAAInF,EAAGU,EAAO8G,GAAU,QAAQ3G,EAAMsE,CAAE,CAAC,EAKpE,OAAO,IAAItW,aAAWyR,EAAQ,KAAK,SAAUd,EAAM2F,CAAE,CACvD,C,qCCrCA,UAAU,UAAU,UAAYpW,oBAChC,UAAU,UAAU,WAAaC,mBCFjC,IAAI8jB,GAAO,CAAC,IAAI,EAEhB,SAAA,eAAwB,EAAM,EAAM,CAClC,IAAIvL,EAAY1G,EAAK,aACjB4G,EACAzH,EAEJ,GAAIuH,EAEF,KAAKvH,IADL,GAAOR,GAAQ,KAAO,KAAOA,EAAO,GAC1B+H,EACR,IAAK,EAAWA,EAAUvH,GAAA,CAAI,MAAA,GAAqByH,EAAS,OAASjI,EACnE,OAAO,IAAIvQ,aAAW,CAAC,CAAC4R,CAAI,CAAC,EAAGiS,GAAMtT,EAAM,CAACQ,CAAC,CAAA,CAKpD,OAAO,IACT,C,iCCpBA,SAAwB,UAAU,EAAG,EAAG,CACtC,OAAOuD,GAAK,MAAQC,GAAK,KAAO,IAAMD,EAAIC,EAAI,GAAKD,EAAIC,EAAI,EAAID,GAAKC,EAAI,EAAI,GAC9E,CCFA,SAAwB,WAAW,EAAG,EAAG,CACvC,OAAOD,GAAK,MAAQC,GAAK,KAAO,IAC5BA,EAAID,EAAI,GACRC,EAAID,EAAI,EACRC,GAAKD,EAAI,EACT,GACN,CCHA,SAAwB,SAAS,EAAG,CAClC,IAAIwP,EAAU,SAAU,MAOpBnM,EAAE,SAAW,GAKf,EAAWA,IAAM,WAAaA,IAAM,WAAaA,EAAI,KACrD,SAAWA,EACX,MAAQA,IANR,EAAW,UACX,UAAY,EAAG,IAAM,UAAUA,EAAE0E,CAAC,EAAGvK,CAAC,EACtC,OAAS,EAAG,IAAM6F,EAAE0E,CAAC,EAAIvK,GAO3B,SAAS,KAAK,EAAG,EAAG,EAAK,EAAG,EAAKwC,EAAE,OAAQ,CACzC,GAAIyP,EAAKC,EAAI,CACX,GAAIF,EAAShS,EAAGA,CAAC,IAAM,EAAG,OAAOkS,EACjC,EAAG,CACD,IAAMC,EAAOF,EAAKC,IAAQ,EACtB,SAAS1P,EAAE2P,GAAMnS,CAAC,EAAI,EAAG,EAAKmS,EAAM,EACnC,EAAKA,CACZ,OAASF,EAAKC,EAChB,CACA,OAAOD,CACT,CAEA,SAAS,MAAM,EAAG,EAAG,EAAK,EAAG,EAAKzP,EAAE,OAAQ,CAC1C,GAAIyP,EAAKC,EAAI,CACX,GAAIF,EAAShS,EAAGA,CAAC,IAAM,EAAG,OAAOkS,EACjC,EAAG,CACD,IAAMC,EAAOF,EAAKC,IAAQ,EACtB,SAAS1P,EAAE2P,GAAMnS,CAAC,GAAK,EAAG,EAAKmS,EAAM,EACpC,EAAKA,CACZ,OAASF,EAAKC,EAChB,CACA,OAAOD,CACT,CAEA,SAAS,OAAO,EAAG,EAAG,EAAK,EAAG,EAAKzP,EAAE,OAAQ,CAC3C,IAAMvD,EAAI,KAAKuD,EAAGxC,EAAGiS,EAAIC,EAAK,CAAC,EAC/B,OAAOjT,EAAIgT,GAAM,MAAMzP,EAAEvD,EAAI,GAAIe,CAAC,EAAI,CAAC,MAAMwC,EAAEvD,GAAIe,CAAC,EAAIf,EAAI,EAAIA,CAClE,CAEA,MAAO,CAAC,KAAM,OAAQ,KAAK,CAC7B,CAEA,SAAS,MAAO,CACd,MAAO,EACT,CCvDA,SAAwB9Q,SAAO,EAAG,CAChC,OAAO6R,IAAM,KAAO,IAAM,CAACA,CAC7B,C,0BAEA,SAAiB,QAAQ,EAAQ,EAAS,CACxC,GAAIoS,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,EACZnJ,GAAS,OAAS,EAAQ,CAACA,IAAUA,IACvC,MAAMA,OAGL,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OAAS,EAAQ,CAACnJ,IAAUA,IAC3E,MAAMA,EAGZ,CACF,CCfA,IAAMoR,GAAkB,SAAS,SAAS,EAC7BC,EAAcD,GAAgB,MAC9BE,GAAaF,GAAgB,KAC7BG,GAAe,SAASrkB,QAAM,CAAC,CAAC,OCP7C,SAAgB,KAAK,EAAQ,EAAG,CAC9B,GAAI,GAAG,EAAI,CAAC8Z,IAAM,GAAI,MAAU,WAAW,WAAW,EACtD,IAAIwK,EAASrI,EAAO,OACpB,GAAI,GAAG,EAAS,KAAK,MAAMqI,CAAM,IAAM,GAAI,MAAU,WAAW,gBAAgB,EAChF,GAAI,CAACA,GAAU,CAACxK,EAAG,OAAOmC,EAC1B,IAAMsI,EAAO,MAAMzK,CAAC,EACd0K,EAAOvI,EAAO,MAAM,EAI1B,OAHAsI,EAAKtI,EAAQuI,EAAM,EAAGF,EAAQ,CAAC,EAC/BC,EAAKC,EAAMvI,EAAQ,EAAGqI,EAAQ,CAAC,EAC/BC,EAAKtI,EAAQuI,EAAM,EAAGF,EAAQ,CAAC,EACxBrI,CACT,CAEA,IAAawI,GAAQ,MAAM,KAAK,EAEnBC,GAAY,MAAM,UAAU,EAEzC,SAAS,MAAM,EAAM,CACnB,OAAO,SAAS,EAAM,EAAI,EAAKC,EAAI,CACjC,GAAI,GAAG,EAAK,CAACA,IAAO,GAAI,MAAU,WAAW,YAAY,EACzD,GAAI,GAAG,EAAK,CAACC,IAAO,GAAI,MAAU,WAAW,YAAY,EACzD,GAAI,CAAC,KAAM3I,EAAQ,QAAO,UAAUzJ,EACpC,GAAI,GAAG,EAAQ,KAAK,MAAMqS,CAAK,IAAM,GAAI,MAAU,WAAW,eAAe,EAC7E,GAAI,GAAG,EAAS,KAAK,MAAMC,IAAW,IAAA,GAAqB7I,EAAO,OAAS4I,EAAzBC,CAA8B,IAAM,GAAI,MAAU,WAAW,gBAAgB,EAC/H,GAAI,CAACD,GAAS,CAACC,GAAW,CAACH,GAAM,CAACC,EAAK,OAAOpS,EAC9C,IAAMuS,EAAQJ,GAAMJ,EAAKI,CAAE,EACrBK,EAAQJ,GAAML,EAAKK,CAAE,EACrBJ,EAAOvI,EAAO,MAAM,EAiB1B,OAhBI8I,GAASC,GACX,MAAMD,EAAOP,EAAMvI,EAAQ4I,EAAOC,CAAM,EACxC,MAAMC,EAAO9I,EAAQuI,EAAMK,EAAOC,CAAM,EACxC,MAAMC,EAAOP,EAAMvI,EAAQ4I,EAAOC,CAAM,EACxC,MAAME,EAAO/I,EAAQuI,EAAMK,EAAOC,CAAM,EACxC,MAAME,EAAOR,EAAMvI,EAAQ4I,EAAOC,CAAM,EACxC,MAAME,EAAO/I,EAAQuI,EAAMK,EAAOC,CAAM,GAC/BC,GACT,MAAMA,EAAO9I,EAAQuI,EAAMK,EAAOC,CAAM,EACxC,MAAMC,EAAOP,EAAMvI,EAAQ4I,EAAOC,CAAM,EACxC,MAAMC,EAAO9I,EAAQuI,EAAMK,EAAOC,CAAM,GAC/BE,IACT,MAAMA,EAAO/I,EAAQuI,EAAMK,EAAOC,CAAM,EACxC,MAAME,EAAOR,EAAMvI,EAAQ4I,EAAOC,CAAM,EACxC,MAAME,EAAO/I,EAAQuI,EAAMK,EAAOC,CAAM,GAEnCtS,CACT,CACF,CAEA,SAAS,MAAM,EAAM,EAAG,EAAG,EAAG,EAAG,CAC/B,IAAK,IAAIwI,EAAI,EAAGxJ,EAAIyT,EAAI9K,EAAGa,EAAIxJ,GAC7B+S,EAAK9N,EAAG0I,EAAGnE,EAAG,GAAKiK,EAAG,CAAC,CAE3B,CAEA,SAAS,MAAM,EAAM,EAAG,EAAG,EAAG,EAAG,CAC/B,IAAK,IAAIrT,EAAI,EAAGJ,EAAIyT,EAAI9K,EAAGvI,EAAIqT,EAAG,EAAErT,EAClC2S,EAAK9N,EAAG0I,EAAGvN,EAAGA,EAAIJ,EAAGyT,CAAC,CAE1B,CAEA,SAAS,WAAW,EAAQ,CAC1B,IAAMV,EAAO,MAAMW,CAAM,EACzB,OAAQ,EAAG,EAAG,EAAO,EAAM,IAAS,CAClC,IAAU,EAAG,IAAS,EAAG,IAAS,EAClCX,EAAK9N,EAAG0I,EAAG7C,EAAQ,EAAG6I,EAAO,EAAGC,CAAI,EACpCb,EAAK9N,EAAG0I,EAAG7C,EAAQ,EAAG6I,EAAO,EAAGC,CAAI,EACpCb,EAAK9N,EAAG0I,EAAG7C,EAAQ,EAAG6I,EAAO,EAAGC,CAAI,EACpCb,EAAK9N,EAAG0I,EAAG7C,EAAQ,EAAG6I,EAAO,EAAGC,CAAI,CACtC,CACF,CAQA,SAAS,MAAM,EAAQ,CACrB,IAAMC,EAAU,KAAK,MAAMH,CAAM,EACjC,GAAIG,IAAYH,EAAQ,OAAO,MAAMA,CAAM,EAC3C,IAAM5P,EAAI4P,EAASG,EACbJ,EAAI,EAAIC,EAAS,EACvB,OAAQ,EAAG,EAAG,EAAO,EAAM,IAAS,CAClC,GAAI,GAAG,GAAQE,IAAS9I,GAAQ,OAChC,IAAIgJ,EAAMD,EAAUlG,EAAE7C,GAChBiJ,EAAKH,EAAOC,EACZG,EAAKD,EAAKH,EAChB,IAAK,IAAIvU,EAAIyL,EAAOhL,EAAIgL,EAAQiJ,EAAI1U,EAAIS,EAAG,GAAK8T,EAC9C,GAAOjG,EAAE,KAAK,IAAIgG,EAAMtU,CAAC,GAE3B,IAAK,IAAIA,EAAIyL,EAAOhL,EAAI6T,EAAMtU,GAAKS,EAAG,GAAK8T,EACzC,GAAOjG,EAAE,KAAK,IAAIgG,EAAMtU,EAAI0U,CAAE,GAC9B,EAAE1U,IAAMyU,EAAMhQ,GAAK6J,EAAE,KAAK,IAAI7C,EAAOzL,EAAI2U,CAAE,GAAKrG,EAAE,KAAK,IAAIgG,EAAMtU,EAAI2U,CAAE,KAAOP,EAC9E,GAAO9F,EAAE,KAAK,IAAI7C,EAAOzL,EAAI0U,CAAE,EAEnC,CACF,CAGA,SAAS,MAAM,EAAQ,CACrB,IAAMN,EAAI,EAAIC,EAAS,EACvB,OAAQ,EAAG,EAAG,EAAO,EAAM,IAAS,CAClC,GAAI,GAAG,GAAQE,IAAS9I,GAAQ,OAChC,IAAIgJ,EAAMJ,EAAS/F,EAAE7C,GACfpC,EAAIkL,EAAOF,EACjB,IAAK,IAAIrU,EAAIyL,EAAOhL,EAAIgL,EAAQpC,EAAGrJ,EAAIS,EAAG,GAAK8T,EAC7C,GAAOjG,EAAE,KAAK,IAAIgG,EAAMtU,CAAC,GAE3B,IAAK,IAAIA,EAAIyL,EAAOhL,EAAI6T,EAAMtU,GAAKS,EAAG,GAAK8T,EACzC,GAAOjG,EAAE,KAAK,IAAIgG,EAAMtU,EAAIqJ,CAAC,GAC7B,EAAErJ,GAAKyU,EAAML,EACb,GAAO9F,EAAE,KAAK,IAAI7C,EAAOzL,EAAIqJ,CAAC,EAElC,CACF,CClHA,SAAwB,MAAM,EAAQ,EAAS,CAC7C,IAAIuL,EAAQ,EACZ,GAAIzB,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,EACZnJ,GAAS,OAAS,EAAQ,CAACA,IAAUA,GACvC,EAAE2S,MAGD,CACL,IAAIxB,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OAAS,EAAQ,CAACnJ,IAAUA,GAC3E,EAAE2S,CAGR,CACA,OAAOA,CACT,CCjBA,SAASxlB,SAAO,EAAO,CACrB,OAAOylB,EAAM,OAAS,CACxB,C,0BAEA,SAASxlB,QAAM,EAAQ,CACrB,MAAO,EAAEokB,EAAS,EACpB,C,wBAEA,SAAS,SAAS,EAAQ,CACxB,OAAO,OAAOrI,GAAW,UAAY,WAAYA,EAASA,EAAS,MAAM,KAAKA,CAAM,CACtF,CAEA,SAAS,QAAQ,EAAQ,CACvB,MAAO,IAAU0J,EAAO,GAAG1J,CAAM,CACnC,CAEA,SAAwB,MAAM,GAAGA,EAAQ,CACvC,IAAM0J,EAAS,OAAO1J,EAAOA,EAAO,OAAS,IAAO,YAAc,QAAQA,EAAO,IAAI,CAAC,EACtF,EAASA,EAAO,IAAI,QAAQ,EAC5B,IAAM2J,EAAU3J,EAAO,IAAIhc,QAAM,EAC3BqR,EAAI2K,EAAO,OAAS,EACpBgI,EAAY,MAAM3S,EAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAC/BuU,EAAU,CAAC,EACjB,GAAIvU,EAAI,GAAKsU,EAAQ,KAAK1lB,OAAK,EAAG,OAAO2lB,EACzC,OAAa,CACXA,EAAQ,KAAK5B,EAAM,KAAK,EAAG,IAAMhI,EAAOpL,EAAE,CAACS,EAAE,CAAC,EAC9C,IAAIT,EAAIS,EACR,KAAO,EAAE2S,EAAMpT,KAAO+U,EAAQ/U,IAAI,CAChC,GAAIA,IAAM,EAAG,OAAO8U,EAASE,EAAQ,IAAIF,CAAM,EAAIE,EACnD,EAAM,KAAO,CACf,CACF,CACF,CChCA,SAAwB,OAAO,EAAQ,EAAS,CAC9C,IAAIP,EAAM,EAAGrB,EAAQ,EACrB,OAAO,aAAa,KAAKhI,EAAQ+H,IAAY,IAAA,GACzC,GAAM,GAAO,CAACtP,GAAK,EACnB,GAAM,GAAO,CAACsP,EAAQtP,EAAG,IAASuH,CAAM,GAAK,CAAE,CACrD,CCLA,SAAwB,SAAS,EAAQ,EAAS,CAChD,IAAIwJ,EAAQ,EACRK,EACAC,EAAO,EACPT,EAAM,EACV,GAAItB,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,EACZnJ,GAAS,OAAS,EAAQ,CAACA,IAAUA,IACvC,EAAQA,EAAQiT,EAChB,GAAQD,EAAQ,EAAEL,EAClB,GAAOK,GAAShT,EAAQiT,QAGvB,CACL,IAAI9B,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OAAS,EAAQ,CAACnJ,IAAUA,IAC3E,EAAQA,EAAQiT,EAChB,GAAQD,EAAQ,EAAEL,EAClB,GAAOK,GAAShT,EAAQiT,GAG9B,CACA,GAAIN,EAAQ,EAAG,OAAOH,GAAOG,EAAQ,EACvC,CCtBA,SAAwB,UAAU,EAAQ,EAAS,CACjD,IAAM/Q,EAAI,SAASuH,EAAQ+H,CAAO,EAClC,OAAOtP,GAAI,KAAK,KAAKA,CAAC,CACxB,CCLA,SAAwB,OAAO,EAAQ,EAAS,CAC9C,IAAI0F,EACAC,EACJ,GAAI2J,IAAY,IAAA,GACT,IAAA,IAAMlR,KAASmJ,EACdnJ,GAAS,OACPsH,IAAQ,IAAA,GACNtH,GAASA,IAAO,EAAM,EAAMA,IAE5BsH,EAAMtH,IAAO,EAAMA,GACnBuH,EAAMvH,IAAO,EAAMA,SAIxB,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OAC3C7B,IAAQ,IAAA,GACNtH,GAASA,IAAO,EAAM,EAAMA,IAE5BsH,EAAMtH,IAAO,EAAMA,GACnBuH,EAAMvH,IAAO,EAAMA,IAI/B,CACA,MAAO,CAACsH,EAAKC,CAAG,CAClB,CC3BA,IAAa,MAAb,KAAmB,CACjB,aAAc,CACZ,KAAK,UAAY,IAAI,aAAa,EAAE,EACpC,KAAK,GAAK,CACZ,CACA,IAAI,EAAG,CACL,IAAMkJ,EAAI,KAAK,UACX1S,EAAI,EACR,IAAK,IAAIS,EAAI,EAAGA,EAAI,KAAK,IAAMA,EAAI,GAAI,IAAK,CAC1C,IAAM0J,EAAIuI,EAAEjS,GACVwS,EAAKlS,EAAIoJ,EACT6I,EAAK,KAAK,IAAIjS,CAAC,EAAI,KAAK,IAAIoJ,CAAC,EAAIpJ,GAAKkS,EAAK9I,GAAKA,GAAK8I,EAAKlS,GACxDiS,IAAI,EAAE,KAAOA,GACjB,EAAIC,CACN,CAGA,MAFA,GAAEjT,GAAKe,EACP,KAAK,GAAKf,EAAI,EACP,IACT,CACA,SAAU,CACR,IAAM0S,EAAI,KAAK,UACX/R,EAAI,KAAK,GAAII,EAAGoJ,EAAG6I,EAAIC,EAAK,EAChC,GAAItS,EAAI,EAAG,CAET,IADA,EAAK+R,EAAE,EAAE/R,GACFA,EAAI,IACT,EAAIsS,EACJ,EAAIP,EAAE,EAAE/R,GACR,EAAKI,EAAIoJ,EACT,EAAKA,GAAK8I,EAAKlS,GACX,MAEFJ,EAAI,IAAOqS,EAAK,GAAKN,EAAE/R,EAAI,GAAK,GAAOqS,EAAK,GAAKN,EAAE/R,EAAI,GAAK,KAC9D,EAAIqS,EAAK,EACT,EAAIC,EAAK9I,EACLA,GAAKpJ,EAAIkS,IAAI,EAAKlS,GAE1B,CACA,OAAOkS,CACT,CACF,EAEA,SAAgB,KAAK,EAAQ,EAAS,CACpC,IAAMkC,EAAQ,IAAI,MAClB,GAAIhC,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,GACZ,EAAQ,CAACnJ,IACXkT,EAAM,IAAIlT,CAAK,MAGd,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACZ,EAAQ,CAAC+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IACzC+J,EAAM,IAAIlT,CAAK,CAGrB,CACA,MAAO,CAACkT,CACV,CAEA,SAAgB,QAAQ,EAAQ,EAAS,CACvC,IAAMA,EAAQ,IAAI,MACd/B,EAAQ,GACZ,OAAO,aAAa,KAAKhI,EAAQ+H,IAAY,IAAA,GACvC,GAAKgC,EAAM,IAAI,CAACtR,GAAK,CAAC,EACtB,GAAKsR,EAAM,IAAI,CAAChC,EAAQtP,EAAG,EAAEuP,EAAOhI,CAAM,GAAK,CAAC,CACtD,CACF,CCpEA,IAAa,UAAb,cAA+B,GAAI,CACjC,YAAY,EAAS,EAAM,MAAO,CAGhC,GAFA,MAAM,EACN,OAAO,iBAAiB,KAAM,CAAC,QAAS,CAAC,MAAO,IAAI,GAAK,EAAG,KAAM,CAAC,MAAOrJ,CAAG,CAAC,CAAC,EAC3EqT,GAAW,KAAM,IAAK,GAAM,CAACrT,EAAKE,KAAUmT,EAAS,KAAK,IAAIrT,EAAKE,CAAK,CAC9E,CACA,IAAI,EAAK,CACP,OAAO,MAAM,IAAI,WAAW,KAAMF,CAAG,CAAC,CACxC,CACA,IAAI,EAAK,CACP,OAAO,MAAM,IAAI,WAAW,KAAMA,CAAG,CAAC,CACxC,CACA,IAAI,EAAK,EAAO,CACd,OAAO,MAAM,IAAI,WAAW,KAAMA,CAAG,EAAGE,CAAK,CAC/C,CACA,OAAO,EAAK,CACV,OAAO,MAAM,OAAO,cAAc,KAAMF,CAAG,CAAC,CAC9C,CACF,EAEa,UAAb,cAA+B,GAAI,CACjC,YAAY,EAAQ,EAAM,MAAO,CAG/B,GAFA,MAAM,EACN,OAAO,iBAAiB,KAAM,CAAC,QAAS,CAAC,MAAO,IAAI,GAAK,EAAG,KAAM,CAAC,MAAOA,CAAG,CAAC,CAAC,EAC3EqJ,GAAU,KAAM,IAAK,IAAMnJ,KAASmJ,EAAQ,KAAK,IAAInJ,CAAK,CAChE,CACA,IAAI,EAAO,CACT,OAAO,MAAM,IAAI,WAAW,KAAMA,CAAK,CAAC,CAC1C,CACA,IAAI,EAAO,CACT,OAAO,MAAM,IAAI,WAAW,KAAMA,CAAK,CAAC,CAC1C,CACA,OAAO,EAAO,CACZ,OAAO,MAAM,OAAO,cAAc,KAAMA,CAAK,CAAC,CAChD,CACF,EAEA,SAAS,WAAW,CAAC,UAAS,QAAO,EAAO,CAC1C,IAAMF,EAAMsT,EAAKpT,CAAK,EACtB,OAAOqT,EAAQ,IAAIvT,CAAG,EAAIuT,EAAQ,IAAIvT,CAAG,EAAIE,CAC/C,CAEA,SAAS,WAAW,CAAC,UAAS,QAAO,EAAO,CAC1C,IAAMF,EAAMsT,EAAKpT,CAAK,EAGtB,OAFIqT,EAAQ,IAAIvT,CAAG,EAAUuT,EAAQ,IAAIvT,CAAG,GAC5CuT,EAAQ,IAAIvT,EAAKE,CAAK,EACfA,EACT,CAEA,SAAS,cAAc,CAAC,UAAS,QAAO,EAAO,CAC7C,IAAMF,EAAMsT,EAAKpT,CAAK,EAKtB,OAJIqT,EAAQ,IAAIvT,CAAG,IACjB,EAAQuT,EAAQ,IAAIvT,CAAG,EACvBuT,EAAQ,OAAOvT,CAAG,GAEbE,CACT,CAEA,SAAS,MAAM,EAAO,CACpB,OAAyB,OAAOA,GAAU,UAAnCA,EAA8CA,EAAM,QAAQ,EAAIA,CACzE,CC5DA,SAAwB3S,WAAS,EAAG,CAClC,OAAOyR,CACT,C,8BCCA,SAAwB,MAAM,EAAQ,GAAGwU,EAAM,CAC7C,OAAO,KAAKnK,EAAQ7b,WAAUA,WAAUgmB,CAAI,CAC9C,CAEA,SAAgB,OAAO,EAAQ,GAAGA,EAAM,CACtC,OAAO,KAAKnK,EAAQ,MAAM,KAAM7b,WAAUgmB,CAAI,CAChD,CAEA,SAAS/lB,UAAQ,EAAQ,EAAM,CAC7B,IAAK,IAAIwQ,EAAI,EAAGW,EAAI4U,EAAK,OAAQvV,EAAIW,EAAG,EAAEX,EACxC,EAASM,EAAO,QAAQ,GAAK4I,EAAE,IAAI,CAAC,CAAC,KAAK,CAACnH,EAAKE,KAAW,CAAC,GAAGiH,EAAGnH,EAAKE,CAAK,CAAC,CAAC,EAEhF,OAAO3B,CACT,C,4BAEA,SAAgB,UAAU,EAAQ,GAAGiV,EAAM,CACzC,OAAO/lB,UAAQ,OAAO4b,EAAQ,GAAGmK,CAAI,EAAGA,CAAI,CAC9C,CAEA,SAAgB,WAAW,EAAQ,EAAQ,GAAGA,EAAM,CAClD,OAAO/lB,UAAQ,QAAQ4b,EAAQ0J,EAAQ,GAAGS,CAAI,EAAGA,CAAI,CACvD,CAEA,SAAgB,OAAO,EAAQ,EAAQ,GAAGA,EAAM,CAC9C,OAAO,KAAKnK,EAAQ7b,WAAUulB,EAAQS,CAAI,CAC5C,CAEA,SAAgB,QAAQ,EAAQ,EAAQ,GAAGA,EAAM,CAC/C,OAAO,KAAKnK,EAAQ,MAAM,KAAM0J,EAAQS,CAAI,CAC9C,CAEA,SAAgB,MAAM,EAAQ,GAAGA,EAAM,CACrC,OAAO,KAAKnK,EAAQ7b,WAAU,OAAQgmB,CAAI,CAC5C,CAEA,SAAgB,QAAQ,EAAQ,GAAGA,EAAM,CACvC,OAAO,KAAKnK,EAAQ,MAAM,KAAM,OAAQmK,CAAI,CAC9C,CAEA,SAAS,OAAO,EAAQ,CACtB,GAAInK,EAAO,SAAW,EAAG,MAAU,MAAM,eAAe,EACxD,OAAOA,EAAO,EAChB,CAEA,SAAS,KAAK,EAAQ,EAAK,EAAQ,EAAM,CACvC,OAAQ,SAAS,QAAQ,EAAQ,EAAG,CAClC,GAAIpL,GAAKuV,EAAK,OAAQ,OAAOT,EAAO1J,CAAM,EAC1C,IAAM9K,EAAS,IAAI,UACbkV,EAAQD,EAAK,KACfnC,EAAQ,GACZ,IAAK,IAAMnR,KAASmJ,EAAQ,CAC1B,IAAMrJ,EAAMyT,EAAMvT,EAAO,EAAEmR,EAAOhI,CAAM,EAClC1K,EAAQJ,EAAO,IAAIyB,CAAG,EACxBrB,EAAOA,EAAM,KAAKuB,CAAK,EACtB3B,EAAO,IAAIyB,EAAK,CAACE,CAAK,CAAC,CAC9B,CACA,IAAK,GAAM,CAACF,EAAKqJ,KAAW9K,EAC1BA,EAAO,IAAIyB,EAAK,QAAQqJ,EAAQpL,CAAC,CAAC,EAEpC,OAAOyV,EAAInV,CAAM,CACnB,EAAA,CAAG8K,EAAQ,CAAC,CACd,CChEA,SAAwB,QAAQ,EAAQ,EAAM,CAC5C,OAAO,MAAM,KAAKmK,EAAM,GAAOG,EAAO3T,EAAI,CAC5C,CCCA,SAAwB,KAAK,EAAQ,GAAG4T,EAAG,CACzC,GAAI,OAAOvK,EAAO,OAAO,WAAc,WAAY,MAAU,UAAU,wBAAwB,EAC/F,EAAS,MAAM,KAAKA,CAAM,EAC1B,GAAI,CAACxE,GAAK+O,EACV,GAAK/O,GAAKA,EAAE,SAAW,GAAM+O,EAAE,OAAS,EAAG,CACzC,IAAMvC,EAAQ,YAAY,KAAKhI,GAAS,EAAG,IAAMpL,CAAC,EAalD,OAZI2V,EAAE,OAAS,GACb,EAAIA,EAAE,IAAI,GAAKvK,EAAO,IAAIxE,CAAC,CAAC,EAC5BwM,EAAM,MAAM,EAAG,IAAM,CACnB,IAAK,IAAMxM,KAAK+O,EAAG,CACjB,IAAM3P,EAAI,iBAAiBY,EAAE5G,GAAI4G,EAAEnG,EAAE,EACrC,GAAIuF,EAAG,OAAOA,CAChB,CACF,CAAC,IAED,EAAIoF,EAAO,IAAIxE,CAAC,EAChBwM,EAAM,MAAM,EAAG,IAAM,iBAAiBxM,EAAE5G,GAAI4G,EAAEnG,EAAE,CAAC,GAE5C,QAAQ2K,EAAQgI,CAAK,CAC9B,CACA,OAAOhI,EAAO,KAAK,eAAexE,CAAC,CAAC,CACtC,CAEA,SAAgB,eAAe,EAAU,UAAW,CAClD,GAAItD,IAAY,UAAW,OAAO,iBAClC,GAAI,OAAOA,GAAY,WAAY,MAAU,UAAU,2BAA2B,EAClF,OAAQ,EAAG,IAAM,CACf,IAAMvC,EAAIuC,EAAQC,EAAGC,CAAC,EAEtB,OADIzC,GAAKA,IAAM,EAAUA,GACjBuC,EAAQE,EAAGA,CAAC,IAAM,IAAMF,EAAQC,EAAGA,CAAC,IAAM,EACpD,CACF,CAEA,SAAgB,iBAAiB,EAAG,EAAG,CACrC,OAAQA,GAAK,MAAQ,EAAEA,GAAKA,KAAOC,GAAK,MAAQ,EAAEA,GAAKA,MAAQD,EAAIC,EAAI,GAAK,IAAIA,GAClF,CClCA,SAAwB,UAAU,EAAQ,EAAQ,EAAK,CACrD,OAAQsR,EAAO,SAAW,EAEtB,KAAK,MAAM1J,EAAQrJ,CAAG,IAAK,CAAC6T,EAAIC,GAAK,CAACC,EAAIC,KAAQjB,EAAOe,EAAIE,CAAE,GAAK,UAAUH,EAAIE,CAAE,EAAE,EADtF,KAAK,OAAO1K,EAAQ0J,EAAQ/S,CAAG,IAAK,CAAC6T,EAAIC,GAAK,CAACC,EAAIC,KAAQ,UAAUF,EAAIE,CAAE,GAAK,UAAUH,EAAIE,CAAE,EAAE,EACZ,CACvF,KAAK,CAAC/T,KAASA,CAAG,CACvB,CCTA,IAAI8S,GAAQ,MAAM,UAEPmB,GAAQnB,GAAM,MACRA,GAAM,ICHvB,SAAwB,SAAS,EAAG,CAClC,UAAa9T,CACf,CCFA,IAAMkV,GAAM,KAAK,KAAK,EAAE,EACpBC,GAAK,KAAK,KAAK,EAAE,EACjBC,GAAK,KAAK,KAAK,CAAC,EAEpB,SAAS,SAAS,EAAO,EAAM,EAAO,CACpC,IAAM5B,GAAQD,EAAO7I,GAAS,KAAK,IAAI,EAAGmJ,CAAK,EAC3CwB,EAAQ,KAAK,MAAM,KAAK,MAAM7B,CAAI,CAAC,EACnC8B,EAAQ9B,EAAgB,IAAI6B,EAC5BE,EAASD,GAASJ,GAAM,GAAKI,GAASH,GAAK,EAAIG,GAASF,GAAK,EAAI,EACjE5T,EAAIgU,EAAIC,EAgBZ,OAfIJ,EAAQ,GACV,EAAe,IAAI,CAACA,EAASE,EAC7B,EAAK,KAAK,MAAM7K,EAAQ+K,CAAG,EAC3B,EAAK,KAAK,MAAMlC,EAAOkC,CAAG,EACtBjU,EAAKiU,EAAM/K,GAAO,EAAElJ,EACpBgU,EAAKC,EAAMlC,GAAM,EAAEiC,EACvB,EAAM,CAACC,IAEP,EAAe,IAAIJ,EAASE,EAC5B,EAAK,KAAK,MAAM7K,EAAQ+K,CAAG,EAC3B,EAAK,KAAK,MAAMlC,EAAOkC,CAAG,EACtBjU,EAAKiU,EAAM/K,GAAO,EAAElJ,EACpBgU,EAAKC,EAAMlC,GAAM,EAAEiC,GAErBA,EAAKhU,GAAM,IAAOqS,GAASA,EAAQ,EAAU,SAASnJ,EAAO6I,EAAMM,EAAQ,CAAC,EACzE,CAACrS,EAAIgU,EAAIC,CAAG,CACrB,CAEA,SAAwB,MAAM,EAAO,EAAM,EAAO,CAEhD,GADA,EAAO,CAAClC,EAAM,EAAQ,CAAC7I,EAAO,EAAQ,CAACmJ,EACnC,EAAEA,EAAQ,GAAI,MAAO,CAAC,EAC1B,GAAInJ,IAAU6I,EAAM,MAAO,CAAC7I,CAAK,EACjC,IAAMgL,EAAUnC,EAAO7I,EAAO,CAAClJ,EAAIgU,EAAIC,GAAOC,EAAU,SAASnC,EAAM7I,EAAOmJ,CAAK,EAAI,SAASnJ,EAAO6I,EAAMM,CAAK,EAClH,GAAI,EAAE2B,GAAMhU,GAAK,MAAO,CAAC,EACzB,IAAM5B,EAAI4V,EAAKhU,EAAK,EAAGmU,EAAY,MAAM/V,CAAC,EAC1C,GAAI8V,EAAS,CACX,GAAID,EAAM,EAAG,IAAK,IAAIxW,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAAG,EAAMA,IAAMuW,EAAKvW,GAAK,CAACwW,OAC3D,IAAK,IAAIxW,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAAG,EAAMA,IAAMuW,EAAKvW,GAAKwW,CACzD,MACE,GAAIA,EAAM,EAAG,IAAK,IAAIxW,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAAG,EAAMA,IAAMuC,EAAKvC,GAAK,CAACwW,OAC3D,IAAK,IAAIxW,EAAI,EAAGA,EAAIW,EAAG,EAAEX,EAAG,EAAMA,IAAMuC,EAAKvC,GAAKwW,EAEzD,OAAOE,CACT,CAEA,SAAgB,cAAc,EAAO,EAAM,EAAO,CAEhD,MADA,GAAO,CAACpC,EAAM,EAAQ,CAAC7I,EAAO,EAAQ,CAACmJ,EAChC,SAASnJ,EAAO6I,EAAMM,CAAK,CAAC,CAAC,EACtC,CAEA,SAAgB,SAAS,EAAO,EAAM,EAAO,CAC3C,EAAO,CAACN,EAAM,EAAQ,CAAC7I,EAAO,EAAQ,CAACmJ,EACvC,IAAM6B,EAAUnC,EAAO7I,EAAO+K,EAAMC,EAAU,cAAcnC,EAAM7I,EAAOmJ,CAAK,EAAI,cAAcnJ,EAAO6I,EAAMM,CAAK,EAClH,OAAQ6B,EAAU,GAAK,IAAMD,EAAM,EAAI,EAAI,CAACA,EAAMA,EACpD,CCpDA,SAAwB,KAAK,EAAO,EAAM,EAAO,CAC/C,IAAIG,EACJ,OAAa,CACX,IAAMpC,EAAO,cAAc9I,EAAO6I,EAAMM,CAAK,EAC7C,GAAIL,IAASoC,GAAWpC,IAAS,GAAK,CAAC,SAASA,CAAI,EAClD,MAAO,CAAC9I,EAAO6I,CAAI,EACVC,EAAO,GAChB,EAAQ,KAAK,MAAM9I,EAAQ8I,CAAI,EAAIA,EACnC,EAAO,KAAK,KAAKD,EAAOC,CAAI,EAAIA,GACvBA,EAAO,IAChB,EAAQ,KAAK,KAAK9I,EAAQ8I,CAAI,EAAIA,EAClC,EAAO,KAAK,MAAMD,EAAOC,CAAI,EAAIA,GAEnC,EAAUA,CACZ,CACF,CCfA,SAAwB,iBAAiB,EAAQ,CAC/C,OAAO,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,IAAI,MAAMnJ,CAAM,CAAC,EAAI,KAAK,GAAG,EAAI,CAAC,CACtE,CCKA,SAAwB,KAAM,CAC5B,IAAInJ,EAAQvS,WACRknB,EAAS,OACTC,EAAYlnB,iBAEhB,SAAS,UAAU,EAAM,CAClB,MAAM,QAAQgS,CAAI,IAAG,EAAO,MAAM,KAAKA,CAAI,GAEhD,IAAI3B,EACAW,EAAIgB,EAAK,OACTZ,EACAwT,EACAnJ,EAAa,MAAMzK,CAAC,EAExB,IAAK,EAAI,EAAGX,EAAIW,EAAG,EAAEX,EACnB,EAAOA,GAAKiC,EAAMN,EAAK3B,GAAIA,EAAG2B,CAAI,EAGpC,IAAImV,EAAKF,EAAOxL,CAAM,EAClB2L,EAAKD,EAAG,GACRE,EAAKF,EAAG,GACRG,EAAKJ,EAAUzL,EAAQ2L,EAAIC,CAAE,EAIjC,GAAI,CAAC,MAAM,QAAQC,CAAE,EAAG,CACtB,IAAMzN,EAAMwN,EAAIE,EAAK,CAACD,EAgBtB,GAfIL,IAAW,SAAQ,CAACG,EAAIC,GAAM,KAAKD,EAAIC,EAAIE,CAAE,GACjD,EAAK,MAAMH,EAAIC,EAAIE,CAAE,EAKjBD,EAAG,IAAMF,IAAI,EAAO,cAAcA,EAAIC,EAAIE,CAAE,GAS5CD,EAAGA,EAAG,OAAS,IAAMD,EAAI,CAC3B,GAAIxN,GAAOwN,GAAMJ,IAAW,OAAQ,CAClC,IAAMrC,EAAO,cAAcwC,EAAIC,EAAIE,CAAE,EACjC,SAAS3C,CAAI,IACXA,EAAO,EACT,GAAM,KAAK,MAAMyC,EAAKzC,CAAI,EAAI,GAAKA,EAC1BA,EAAO,IAChB,GAAM,KAAK,KAAKyC,EAAK,CAACzC,CAAI,EAAI,GAAK,CAACA,GAG1C,MACE0C,EAAG,IAAI,CAEX,CACF,CAKA,IADA,IAAI,EAAIA,EAAG,OAAQ1T,EAAI,EAAGC,EAAI,EACvByT,EAAG1T,IAAMwT,GAAI,EAAExT,EACtB,KAAO0T,EAAGzT,EAAI,GAAKwT,GAAI,EAAExT,GACrBD,GAAKC,EAAI,KAAG,EAAKyT,EAAG,MAAM1T,EAAGC,CAAC,EAAG,EAAIA,EAAID,GAE7C,IAAI4T,EAAW,MAAM,EAAI,CAAC,EACtBC,EAGJ,IAAK,EAAI,EAAGpX,GAAK,EAAG,EAAEA,EACpB,EAAM,EAAKA,GAAK,CAAC,EACjB,EAAI,GAAKA,EAAI,EAAIiX,EAAGjX,EAAI,GAAK+W,EAC7B,EAAI,GAAK/W,EAAI,EAAIiX,EAAGjX,GAAKgX,EAI3B,GAAI,SAASzC,CAAI,EAAG,CAClB,GAAIA,EAAO,EACJ,IAAA,EAAI,EAAGvU,EAAIW,EAAG,EAAEX,GACd,EAAIoL,EAAOpL,KAAO,MAAQ+W,GAAMhW,GAAKA,GAAKiW,GAC7CG,EAAK,KAAK,IAAI,EAAG,KAAK,OAAOpW,EAAIgW,GAAMxC,CAAI,CAAC,EAAE,CAAC,KAAK5S,EAAK3B,EAAE,OAG1D,GAAIuU,EAAO,EACX,KAAA,EAAI,EAAGvU,EAAIW,EAAG,EAAEX,EACnB,IAAK,EAAIoL,EAAOpL,KAAO,MAAQ+W,GAAMhW,GAAKA,GAAKiW,EAAI,CACjD,IAAMvW,EAAI,KAAK,OAAOsW,EAAKhW,GAAKwT,CAAI,EACpC4C,EAAK,KAAK,IAAI,EAAG1W,GAAKwW,EAAGxW,IAAMM,EAAE,EAAE,CAAC,KAAKY,EAAK3B,EAAE,CAClD,EAGN,MACE,IAAK,EAAI,EAAGA,EAAIW,EAAG,EAAEX,GACd,EAAIoL,EAAOpL,KAAO,MAAQ+W,GAAMhW,GAAKA,GAAKiW,GAC7CG,EAAKvnB,EAAOqnB,EAAIlW,EAAG,EAAG,CAAC,EAAE,CAAC,KAAKY,EAAK3B,EAAE,EAK5C,OAAOmX,CACT,CAcA,MAZA,WAAU,MAAQ,SAAS,EAAG,CAC5B,OAAO,UAAU,QAAU,EAAQ,OAAOzR,GAAM,WAAaA,EAAI,SAASA,CAAC,EAAG,WAAazD,CAC7F,EAEA,UAAU,OAAS,SAAS,EAAG,CAC7B,OAAO,UAAU,QAAU,EAAS,OAAOyD,GAAM,WAAaA,EAAI,SAAS,CAACA,EAAE,GAAIA,EAAE,EAAE,CAAC,EAAG,WAAakR,CACzG,EAEA,UAAU,WAAa,SAAS,EAAG,CACjC,OAAO,UAAU,QAAU,EAAY,OAAOlR,GAAM,WAAaA,EAAI,SAAS,MAAM,QAAQA,CAAC,EAAIsQ,GAAM,KAAKtQ,CAAC,EAAIA,CAAC,EAAG,WAAamR,CACpI,EAEO,SACT,CC5HA,SAAwB,IAAI,EAAQ,EAAS,CAC3C,IAAIrN,EACJ,GAAI2J,IAAY,IAAA,GACT,IAAA,IAAMlR,KAASmJ,EACdnJ,GAAS,OACLuH,EAAMvH,GAAUuH,IAAQ,IAAA,IAAavH,GAASA,KACpD,EAAMA,OAGL,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OACzC5B,EAAMvH,GAAUuH,IAAQ,IAAA,IAAavH,GAASA,KACpD,EAAMA,EAGZ,CACA,OAAOuH,CACT,CCnBA,SAAwB,SAAS,EAAQ,EAAS,CAChD,IAAIA,EACA6N,EAAW,GACXjE,EAAQ,GACZ,GAAID,IAAY,IAAA,GACd,IAAK,IAAMlR,KAASmJ,EAClB,EAAEgI,EACEnR,GAAS,OACLuH,EAAMvH,GAAUuH,IAAQ,IAAA,IAAavH,GAASA,KACpD,EAAMA,EAAO,EAAWmR,QAI5B,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OACzC5B,EAAMvH,GAAUuH,IAAQ,IAAA,IAAavH,GAASA,KACpD,EAAMA,EAAO,EAAWmR,GAI9B,OAAOiE,CACT,CCrBA,SAAwB,IAAI,EAAQ,EAAS,CAC3C,IAAI9N,EACJ,GAAI4J,IAAY,IAAA,GACT,IAAA,IAAMlR,KAASmJ,EACdnJ,GAAS,OACLsH,EAAMtH,GAAUsH,IAAQ,IAAA,IAAatH,GAASA,KACpD,EAAMA,OAGL,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OACzC7B,EAAMtH,GAAUsH,IAAQ,IAAA,IAAatH,GAASA,KACpD,EAAMA,EAGZ,CACA,OAAOsH,CACT,CCnBA,SAAwB,SAAS,EAAQ,EAAS,CAChD,IAAIA,EACA+N,EAAW,GACXlE,EAAQ,GACZ,GAAID,IAAY,IAAA,GACd,IAAK,IAAMlR,KAASmJ,EAClB,EAAEgI,EACEnR,GAAS,OACLsH,EAAMtH,GAAUsH,IAAQ,IAAA,IAAatH,GAASA,KACpD,EAAMA,EAAO,EAAWmR,QAI5B,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OACzC7B,EAAMtH,GAAUsH,IAAQ,IAAA,IAAatH,GAASA,KACpD,EAAMA,EAAO,EAAWmR,GAI9B,OAAOkE,CACT,CCjBA,SAAwB,YAAY,EAAO,EAAG,EAAO,EAAG,EAAQ,IAAU,EAAS,CAKjF,GAJA,EAAI,KAAK,MAAMlO,CAAC,EAChB,EAAO,KAAK,MAAM,KAAK,IAAI,EAAGmO,CAAI,CAAC,EACnC,EAAQ,KAAK,MAAM,KAAK,IAAI1C,EAAM,OAAS,EAAG2C,CAAK,CAAC,EAEhD,EAAED,GAAQnO,GAAKA,GAAKoO,GAAQ,OAAO3C,EAIvC,IAFA,EAAUvR,IAAY,IAAA,GAAY,iBAAmB,eAAeA,CAAO,EAEpEkU,EAAQD,GAAM,CACnB,GAAIC,EAAQD,EAAO,IAAK,CACtB,IAAM5W,EAAI6W,EAAQD,EAAO,EACnBhX,EAAI6I,EAAImO,EAAO,EACfnN,EAAI,KAAK,IAAIzJ,CAAC,EACd0I,EAAI,GAAM,KAAK,IAAI,EAAIe,EAAI,CAAC,EAC5BqN,EAAK,GAAM,KAAK,KAAKrN,EAAIf,GAAK1I,EAAI0I,GAAK1I,CAAC,GAAKJ,EAAII,EAAI,EAAI,EAAI,GAAK,GAClE+W,EAAU,KAAK,IAAIH,EAAM,KAAK,MAAMnO,EAAI7I,EAAI8I,EAAI1I,EAAI8W,CAAE,CAAC,EACvDE,EAAW,KAAK,IAAIH,EAAO,KAAK,MAAMpO,GAAKzI,EAAIJ,GAAK8I,EAAI1I,EAAI8W,CAAE,CAAC,EACrE,YAAY5C,EAAOzL,EAAGsO,EAASC,EAAUrU,CAAO,CAClD,CAEA,IAAMmB,EAAIoQ,EAAMzL,GACZpJ,EAAIuX,EACJ9W,EAAI+W,EAKR,IAHA,KAAK3C,EAAO0C,EAAMnO,CAAC,EACf9F,EAAQuR,EAAM2C,GAAQ/S,CAAC,EAAI,GAAG,KAAKoQ,EAAO0C,EAAMC,CAAK,EAElDxX,EAAIS,GAAG,CAEZ,IADA,KAAKoU,EAAO7U,EAAGS,CAAC,EAAG,EAAET,EAAG,EAAES,EACnB6C,EAAQuR,EAAM7U,GAAIyE,CAAC,EAAI,GAAG,EAAEzE,EACnC,KAAOsD,EAAQuR,EAAMpU,GAAIgE,CAAC,EAAI,GAAG,EAAEhE,CACrC,CAEI6C,EAAQuR,EAAM0C,GAAO9S,CAAC,IAAM,EAAG,KAAKoQ,EAAO0C,EAAM9W,CAAC,GACjD,EAAEA,EAAG,KAAKoU,EAAOpU,EAAG+W,CAAK,GAE1B/W,GAAK2I,IAAG,EAAO3I,EAAI,GACnB2I,GAAK3I,IAAG,EAAQA,EAAI,EAC1B,CAEA,OAAOoU,CACT,CAEA,SAAS,KAAK,EAAO,EAAG,EAAG,CACzB,IAAMpQ,EAAIoQ,EAAM7U,GAChB,EAAMA,GAAK6U,EAAMpU,GACjB,EAAMA,GAAKgE,CACb,CClDA,SAAwB,SAAS,EAAQ,EAAU,UAAW,CAC5D,IAAI+E,EACAoO,EAAU,GACd,GAAItU,EAAQ,SAAW,EAAG,CACxB,IAAIuU,EACJ,IAAK,IAAMC,KAAW1M,EAAQ,CAC5B,IAAMnJ,EAAQqB,EAAQwU,CAAO,GACzBF,EACE,UAAU3V,EAAO4V,CAAQ,EAAI,EAC7B,UAAU5V,EAAOA,CAAK,IAAM,KAChC,EAAM6V,EACN,EAAW7V,EACX,EAAU,GAEd,CACF,MACE,IAAK,IAAMA,KAASmJ,GACdwM,EACEtU,EAAQrB,EAAOuH,CAAG,EAAI,EACtBlG,EAAQrB,EAAOA,CAAK,IAAM,KAC9B,EAAMA,EACN,EAAU,IAIhB,OAAOuH,CACT,CCnBA,SAAwB,SAAS,EAAQ,EAAG,EAAS,CAEnD,GADA,EAAS,aAAa,KAAK,QAAQ4B,EAAQ+H,CAAO,CAAC,GAC7C,EAAI/H,EAAO,SAAW,OAAM,EAAI,CAACsH,CAAC,EACxC,IAAIA,GAAK,GAAK/R,EAAI,EAAG,OAAO,IAAIyK,CAAM,EACtC,GAAIsH,GAAK,EAAG,OAAO,IAAItH,CAAM,EAC7B,IAAIzK,EACAX,GAAKW,EAAI,GAAK+R,EACdpQ,EAAK,KAAK,MAAMtC,CAAC,EACjB+X,EAAS,IAAI,YAAY3M,EAAQ9I,CAAE,CAAC,CAAC,SAAS,EAAGA,EAAK,CAAC,CAAC,EAE5D,OAAOyV,GADM,IAAI3M,EAAO,SAAS9I,EAAK,CAAC,CACjB,EAAIyV,IAAW/X,EAAIsC,EAPH,CAQxC,CAEA,SAAgB,eAAe,EAAQ,EAAG,EAAUzS,SAAQ,CAC1D,IAAM,EAAIub,EAAO,SAAW,OAAM,EAAI,CAACsH,CAAC,EACxC,IAAIA,GAAK,GAAK/R,EAAI,EAAG,MAAO,CAACwS,EAAQ/H,EAAO,GAAI,EAAGA,CAAM,EACzD,GAAIsH,GAAK,EAAG,MAAO,CAACS,EAAQ/H,EAAOzK,EAAI,GAAIA,EAAI,EAAGyK,CAAM,EACxD,IAAIzK,EACAX,GAAKW,EAAI,GAAK+R,EACdpQ,EAAK,KAAK,MAAMtC,CAAC,EACjB+X,EAAS,CAAC5E,EAAQ/H,EAAO9I,GAAKA,EAAI8I,CAAM,EAE5C,OAAO2M,GAAU,CADH5E,EAAQ/H,EAAO9I,EAAK,GAAIA,EAAK,EAAG8I,CAAM,EAC1B2M,IAAW/X,EAAIsC,EAPgB,CAQ3D,CAEA,SAAgB,cAAc,EAAQ,EAAG,EAAUzS,SAAQ,CACzD,GAAI,OAAM,EAAI,CAAC6iB,CAAC,EAChB,CACA,GADA,EAAU,aAAa,KAAKtH,GAAS,EAAG,IAAMvb,SAAOsjB,EAAQ/H,EAAOpL,GAAIA,EAAGoL,CAAM,CAAC,CAAC,EAC/EsH,GAAK,EAAG,OAAO,SAASsF,CAAO,EACnC,GAAItF,GAAK,EAAG,OAAO,SAASsF,CAAO,EACnC,IAAIA,EACA5E,EAAQ,YAAY,KAAKhI,GAAS,EAAG,IAAMpL,CAAC,EAC5CS,EAAIuX,EAAQ,OAAS,EACrBhY,EAAI,KAAK,MAAMS,EAAIiS,CAAC,EAGxB,OAFA,YAAYU,EAAOpT,EAAG,EAAGS,GAAI,EAAG,IAAM,iBAAiBuX,EAAQhY,GAAIgY,EAAQvX,EAAE,CAAC,EAC9E,EAAI,SAAS2S,EAAM,SAAS,EAAGpT,EAAI,CAAC,EAAI,GAAMgY,EAAQhY,EAAE,EACjDA,GAAK,EAAIA,EAAI,EAT+D,CAUrF,CC3CA,SAAwB,0BAA0B,EAAQ,EAAK,EAAK,CAClE,IAAMgG,EAAI,MAAMoF,CAAM,EAAGE,EAAI,SAASF,EAAQ,GAAI,EAAI,SAASA,EAAQ,GAAI,EAC3E,OAAOpF,GAAKsF,EAAI,KAAK,MAAM9B,EAAMD,IAAQ,EAAI+B,EAAatF,IAAG,GAAK,GAAG,EAAI,CAC3E,CCHA,SAAwB,eAAe,EAAQ,EAAK,EAAK,CACvD,IAAMA,EAAI,MAAMoF,CAAM,EAAGE,EAAI,UAAUF,CAAM,EAC7C,OAAOpF,GAAKsF,EAAI,KAAK,MAAM9B,EAAMD,GAAO,KAAK,KAAKvD,CAAC,GAAK,KAAOsF,EAAE,EAAI,CACvE,CCNA,SAAwB,KAAK,EAAQ,EAAS,CAC5C,IAAIsJ,EAAQ,EACRH,EAAM,EACV,GAAItB,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,EACZnJ,GAAS,OAAS,EAAQ,CAACA,IAAUA,IACvC,EAAE2S,EAAO,GAAO3S,OAGf,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,OAAS,EAAQ,CAACnJ,IAAUA,IAC3E,EAAE2S,EAAO,GAAO3S,EAGtB,CACA,GAAI2S,EAAO,OAAOH,EAAMG,CAC1B,CChBA,SAAwB,OAAO,EAAQ,EAAS,CAC9C,OAAO,SAASxJ,EAAQ,GAAK+H,CAAO,CACtC,CAEA,SAAgB,YAAY,EAAQ,EAAS,CAC3C,OAAO,cAAc/H,EAAQ,GAAK+H,CAAO,CAC3C,CCRA,SAAU,QAAQ,EAAQ,CACxB,IAAK,IAAM0B,KAASoD,EAClB,MAAOpD,CAEX,CAEA,SAAwB,MAAM,EAAQ,CACpC,OAAO,MAAM,KAAK,QAAQoD,CAAM,CAAC,CACnC,CCNA,SAAwB,KAAK,EAAQ,EAAS,CAC5C,IAAMC,EAAS,IAAI,UACnB,GAAI/E,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,EACZnJ,GAAS,MAAQA,GAASA,GAC5BiW,EAAO,IAAIjW,GAAQiW,EAAO,IAAIjW,CAAK,GAAK,GAAK,CAAC,MAG7C,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACX,EAAQ+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,IAAM,MAAQnJ,GAASA,GAChEiW,EAAO,IAAIjW,GAAQiW,EAAO,IAAIjW,CAAK,GAAK,GAAK,CAAC,CAGpD,CACA,IAAIkW,EACAC,EAAY,EAChB,IAAK,GAAM,CAACnW,EAAO2S,KAAUsD,EACvBtD,EAAQwD,IACV,EAAYxD,EACZ,EAAY3S,GAGhB,OAAOkW,CACT,CC3BA,SAAwB,MAAM,EAAQ,EAAS,KAAM,CACnD,IAAME,EAAQ,CAAC,EACX7V,EACA8V,EAAQ,GACZ,IAAK,IAAMrW,KAASmJ,EACdkN,GAAOD,EAAM,KAAKE,EAAO/V,EAAUP,CAAK,CAAC,EAC7C,EAAWA,EACX,EAAQ,GAEV,OAAOoW,CACT,CAEA,SAAgB,KAAK,EAAG,EAAG,CACzB,MAAO,CAAC9U,EAAGC,CAAC,CACd,CCdA,SAAwB,MAAM,EAAO,EAAM,EAAM,CAC/C,EAAQ,CAACiI,EAAO,EAAO,CAAC6I,EAAM,GAAQ,EAAI,UAAU,QAAU,GAAK,EAAO7I,EAAO,EAAQ,EAAG,GAAK9K,EAAI,EAAI,EAAI,CAAC4T,EAM9G,IAJA,IAAIvU,EAAI,GACJW,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM2T,EAAO7I,GAAS8I,CAAI,CAAC,EAAI,EACpD/H,EAAY,MAAM7L,CAAC,EAEhB,EAAEX,EAAIW,GACX,EAAMX,GAAKyL,EAAQzL,EAAIuU,EAGzB,OAAO/H,CACT,CCTA,SAAwB,KAAK,EAAQ,EAAU,UAAW,CACxD,GAAI,OAAOpB,EAAO,OAAO,WAAc,WAAY,MAAU,UAAU,wBAAwB,EAC/F,IAAIoN,EAAI,MAAM,KAAKpN,CAAM,EACnBqN,EAAI,IAAI,aAAaD,EAAE,MAAM,EAC/BrF,EAAQ,SAAW,IAAG,EAAIqF,EAAE,IAAIrF,CAAO,EAAG,EAAU,WACxD,IAAM,cAAgB,EAAG,IAAMA,EAAQqF,EAAExY,GAAIwY,EAAE/X,EAAE,EAC7C2I,EAAGH,EAaP,MAZA,GAAS,YAAY,KAAKuP,GAAI,EAAG,IAAMxY,CAAC,EAExCoL,EAAO,KAAK+H,IAAY,WAAa,EAAG,IAAM,iBAAiBqF,EAAExY,GAAIwY,EAAE/X,EAAE,EAAI,eAAe,YAAY,CAAC,EACzG2K,EAAO,SAAS,EAAG,IAAM,CACrB,IAAMpF,EAAI,aAAavF,EAAG2I,IAAM,IAAA,GAAY3I,EAAI2I,CAAC,EAC7CpD,GAAK,IACHoD,IAAM,IAAA,IAAapD,EAAI,KAAG,EAAIvF,EAAG,EAAIT,GACzC,EAAES,GAAKwI,GAEP,EAAExI,GAAK,GAEX,CAAC,EACIgY,CACT,CCrBA,SAAwB,MAAM,EAAQ,EAAU,UAAW,CACzD,IAAIlP,EACAqO,EAAU,GACd,GAAItU,EAAQ,SAAW,EAAG,CACxB,IAAIoV,EACJ,IAAK,IAAMZ,KAAW1M,EAAQ,CAC5B,IAAMnJ,EAAQqB,EAAQwU,CAAO,GACzBF,EACE,UAAU3V,EAAOyW,CAAQ,EAAI,EAC7B,UAAUzW,EAAOA,CAAK,IAAM,KAChC,EAAM6V,EACN,EAAW7V,EACX,EAAU,GAEd,CACF,MACE,IAAK,IAAMA,KAASmJ,GACdwM,EACEtU,EAAQrB,EAAOsH,CAAG,EAAI,EACtBjG,EAAQrB,EAAOA,CAAK,IAAM,KAC9B,EAAMA,EACN,EAAU,IAIhB,OAAOsH,CACT,CCzBA,SAAwB,WAAW,EAAQ,EAAU,UAAW,CAC9D,GAAIjG,EAAQ,SAAW,EAAG,OAAO,SAAS8H,EAAQ9H,CAAO,EACzD,IAAIoV,EACAnP,EAAM,GACN6J,EAAQ,GACZ,IAAK,IAAMnR,KAASmJ,EAClB,EAAEgI,GACE7J,EAAM,EACJjG,EAAQrB,EAAOA,CAAK,IAAM,EAC1BqB,EAAQrB,EAAOyW,CAAQ,EAAI,KAC/B,EAAWzW,EACX,EAAMmR,GAGV,OAAO7J,CACT,CCfA,SAAwB,cAAc,EAAQ,EAAU,UAAW,CACjE,GAAIjG,EAAQ,SAAW,EAAG,OAAO,SAAS8H,EAAQ9H,CAAO,EACzD,IAAIuU,EACArO,EAAM,GACN4J,EAAQ,GACZ,IAAK,IAAMnR,KAASmJ,EAClB,EAAEgI,GACE5J,EAAM,EACJlG,EAAQrB,EAAOA,CAAK,IAAM,EAC1BqB,EAAQrB,EAAO4V,CAAQ,EAAI,KAC/B,EAAW5V,EACX,EAAMmR,GAGV,OAAO5J,CACT,CChBA,SAAwB,KAAK,EAAQ,EAAS,CAC5C,IAAM4J,EAAQ,WAAWhI,EAAQ9H,CAAO,EACxC,OAAO8P,EAAQ,EAAI,IAAA,GAAYA,CACjC,CCLA,IAAAuF,GAAe,SAAS,KAAK,MAAM,EAEnC,SAAgB,SAAS,EAAQ,CAC/B,OAAO,SAAS,QAAQ,EAAO,EAAK,EAAG,EAAK9D,EAAM,OAAQ,CACxD,IAAItU,EAAIgC,GAAM,EAAK,CAACD,GACpB,KAAO/B,GAAG,CACR,IAAMP,EAAI4Y,EAAO,EAAI,IAAM,EAAGnU,EAAIoQ,EAAMtU,EAAI+B,GAC5C,EAAM/B,EAAI+B,GAAMuS,EAAM7U,EAAIsC,GAC1B,EAAMtC,EAAIsC,GAAMmC,CAClB,CACA,OAAOoQ,CACT,CACF,CCZA,SAAwB,IAAI,EAAQ,EAAS,CAC3C,IAAIJ,EAAM,EACV,GAAItB,IAAY,IAAA,GACT,IAAA,IAAIlR,KAASmJ,GACZ,EAAQ,CAACnJ,KACX,GAAOA,OAGN,CACL,IAAImR,EAAQ,GACZ,IAAK,IAAInR,KAASmJ,GACZ,EAAQ,CAAC+H,EAAQlR,EAAO,EAAEmR,EAAOhI,CAAM,KACzC,GAAOnJ,EAGb,CACA,OAAOwS,CACT,CCfA,SAAwB,UAAU,EAAQ,CACxC,GAAI,EAAE,EAAIoE,EAAO,QAAS,MAAO,CAAC,EAClC,IAAK,IAAI7Y,EAAI,GAAIO,EAAI,IAAIsY,EAAQ,MAAM,EAAGC,EAAgB,MAAMvY,CAAC,EAAG,EAAEP,EAAIO,GACxE,IAAK,IAAIE,EAAI,GAAIE,EAAGoY,EAAM,EAAU/Y,GAAS,MAAMW,CAAC,EAAG,EAAEF,EAAIE,GAC3D,EAAIF,GAAKoY,EAAOpY,EAAE,CAACT,GAGvB,OAAO8Y,CACT,CAEA,SAAS,OAAO,EAAG,CACjB,OAAOxN,EAAE,MACX,CCZA,SAAwB,KAAM,CAC5B,OAAO,UAAU,SAAS,CAC5B,CCJA,SAAwB,MAAM,EAAQ,EAAM,CAC1C,GAAI,OAAO0N,GAAS,WAAY,MAAU,UAAU,wBAAwB,EAC5E,IAAI5F,EAAQ,GACZ,IAAK,IAAMnR,KAASmJ,EAClB,GAAI,CAAC4N,EAAK/W,EAAO,EAAEmR,EAAOhI,CAAM,EAC9B,MAAO,GAGX,MAAO,EACT,CCTA,SAAwB,KAAK,EAAQ,EAAM,CACzC,GAAI,OAAO4N,GAAS,WAAY,MAAU,UAAU,wBAAwB,EAC5E,IAAI5F,EAAQ,GACZ,IAAK,IAAMnR,KAASmJ,EAClB,GAAI4N,EAAK/W,EAAO,EAAEmR,EAAOhI,CAAM,EAC7B,MAAO,GAGX,MAAO,EACT,CCTA,SAAwB,OAAO,EAAQ,EAAM,CAC3C,GAAI,OAAO4N,GAAS,WAAY,MAAU,UAAU,wBAAwB,EAC5E,IAAMnE,EAAQ,CAAC,EACXzB,EAAQ,GACZ,IAAK,IAAMnR,KAASmJ,EACd4N,EAAK/W,EAAO,EAAEmR,EAAOhI,CAAM,GAC7ByJ,EAAM,KAAK5S,CAAK,EAGpB,OAAO4S,CACT,CCVA,SAAwB,IAAI,EAAQ,EAAQ,CAC1C,GAAI,OAAOzJ,EAAO,OAAO,WAAc,WAAY,MAAU,UAAU,wBAAwB,EAC/F,GAAI,OAAO6N,GAAW,WAAY,MAAU,UAAU,0BAA0B,EAChF,OAAO,MAAM,KAAK7N,GAAS,EAAO,IAAU6N,EAAOhX,EAAOmR,EAAOhI,CAAM,CAAC,CAC1E,CCJA,SAAwB,OAAO,EAAQ,EAAS,EAAO,CACrD,GAAI,OAAO8N,GAAY,WAAY,MAAU,UAAU,2BAA2B,EAClF,IAAMC,EAAW/N,EAAO,OAAO,SAAS,CAAC,EACrCgO,EAAM5X,EAAM4R,EAAQ,GACxB,GAAI,UAAU,OAAS,EAAG,CAExB,GADC,iBAAgB+F,EAAS,KAAK,EAC3BC,EAAM,OACV,EAAEhG,CACJ,CACA,KAAQ,QAAO,MAAO5R,GAAQ2X,EAAS,KAAK,EAAI,CAACC,GAC/C,EAAQF,EAAQjX,EAAOT,EAAM,EAAE4R,EAAOhI,CAAM,EAE9C,OAAOnJ,CACT,CCbA,SAAwB,QAAQ,EAAQ,CACtC,GAAI,OAAOmJ,EAAO,OAAO,WAAc,WAAY,MAAU,UAAU,wBAAwB,EAC/F,OAAO,MAAM,KAAKA,CAAM,CAAC,CAAC,QAAQ,CACpC,CCDA,SAAwB,WAAW,EAAQ,GAAGiO,EAAQ,CACpD,EAAS,IAAI,UAAUjO,CAAM,EAC7B,IAAK,IAAMkO,KAASD,EAClB,IAAK,IAAMpX,KAASqX,EAClBlO,EAAO,OAAOnJ,CAAK,EAGvB,OAAOmJ,CACT,CCRA,SAAwB,SAAS,EAAQ,EAAO,CAC9C,IAAM+N,EAAWG,EAAM,OAAO,SAAS,CAAC,EAAGC,EAAM,IAAI,UACrD,IAAK,IAAM1V,KAAKuH,EAAQ,CACtB,GAAImO,EAAI,IAAI1V,CAAC,EAAG,MAAO,GACvB,IAAI5B,EAAOmX,EACX,MAAQ,iBAAgBD,EAAS,KAAK,IAChC,IADoC,CAExC,GAAI,OAAO,GAAGtV,EAAG5B,CAAK,EAAG,MAAO,GAChCsX,EAAI,IAAItX,CAAK,CACf,CACF,CACA,MAAO,EACT,CCZA,SAAwB,aAAa,EAAQ,GAAGoX,EAAQ,CACtD,EAAS,IAAI,UAAUjO,CAAM,EAC7B,EAASiO,EAAO,IAAI,GAAG,EACvB,IAAK,IAAK,IAAMpX,KAASmJ,EACvB,IAAK,IAAMkO,KAASD,EAClB,GAAI,CAACC,EAAM,IAAIrX,CAAK,EAAG,CACrBmJ,EAAO,OAAOnJ,CAAK,EACnB,SAAS,GACX,CAGJ,OAAOmJ,CACT,CAEA,SAAS,IAAI,EAAQ,CACnB,OAAOA,aAAkB,UAAYA,EAAS,IAAI,UAAUA,CAAM,CACpE,CClBA,SAAwB,SAAS,EAAQ,EAAO,CAC9C,IAAM+N,EAAW/N,EAAO,OAAO,SAAS,CAAC,EAAGmO,EAAM,IAAI,IACtD,IAAK,IAAM3U,KAAK0U,EAAO,CACrB,IAAME,EAAK,OAAO5U,CAAC,EACnB,GAAI2U,EAAI,IAAIC,CAAE,EAAG,SACjB,IAAIvX,EAAOmX,EACX,KAAQ,iBAAgBD,EAAS,KAAK,GAAI,CACxC,GAAIC,EAAM,MAAO,GACjB,IAAMK,EAAS,OAAOxX,CAAK,EAE3B,GADAsX,EAAI,IAAIE,CAAM,EACV,OAAO,GAAGD,EAAIC,CAAM,EAAG,KAC7B,CACF,CACA,MAAO,EACT,CAEA,SAAS,OAAO,EAAO,CACrB,OAAyB,OAAOxX,GAAU,UAAnCA,EAA8CA,EAAM,QAAQ,EAAIA,CACzE,CChBA,SAAwB,OAAO,EAAQ,EAAO,CAC5C,OAAO,SAASqX,EAAOlO,CAAM,CAC/B,CCFA,SAAwB,MAAM,GAAGiO,EAAQ,CACvC,IAAME,EAAM,IAAI,UAChB,IAAK,IAAMD,KAASD,EAClB,IAAK,IAAMzU,KAAK0U,EACdC,EAAI,IAAI3U,CAAC,EAGb,OAAO2U,CACT,CCVA,IAAIG,GAAM,CAAC,EACPC,GAAM,CAAC,EACPC,GAAQ,GACRC,GAAU,GACVC,GAAS,GAEb,SAAS,gBAAgB,EAAS,CAChC,OAAW,SAAS,IAAK,WAAaC,EAAQ,IAAI,SAAS,EAAM,EAAG,CAClE,OAAO,KAAK,UAAUva,CAAI,EAAI,OAASQ,EAAI,SAC7C,CAAC,CAAC,CAAC,KAAK,GAAG,EAAI,GAAG,CACpB,CAEA,SAAS,gBAAgB,EAAS,EAAG,CACnC,IAAIga,EAAS,gBAAgBD,CAAO,EACpC,OAAO,SAAS,EAAK,EAAG,CACtB,OAAOnT,EAAEoT,EAAOjB,CAAG,EAAG/Y,EAAG+Z,CAAO,CAClC,CACF,CAGA,SAAS,aAAa,EAAM,CAC1B,IAAIE,EAAY,OAAO,OAAO,IAAI,EAC9BF,EAAU,CAAC,EAUf,OARAG,EAAK,QAAQ,SAAS,EAAK,CACzB,IAAK,IAAIC,KAAUpB,EACXoB,KAAUF,GACdF,EAAQ,KAAK,EAAUI,GAAUA,CAAM,CAG7C,CAAC,EAEMJ,CACT,CAEA,SAASjqB,MAAI,EAAO,EAAO,CACzB,IAAIuZ,EAAIpH,EAAQ,GAAIwR,EAASpK,EAAE,OAC/B,OAAOoK,EAASO,EAAY,MAAMA,EAAQP,EAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAIpK,EAAIA,CACtE,C,oBAEA,SAAStZ,aAAW,EAAM,CACxB,OAAOqqB,EAAO,EAAI,IAAMtqB,MAAI,CAACsqB,EAAM,CAAC,EAChCA,EAAO,KAAO,IAAMtqB,MAAIsqB,EAAM,CAAC,EAC/BtqB,MAAIsqB,EAAM,CAAC,CACjB,C,gEAEA,SAAS,WAAW,EAAM,CACxB,IAAIC,EAAQC,EAAK,YAAY,EACzBC,EAAUD,EAAK,cAAc,EAC7BE,EAAUF,EAAK,cAAc,EAC7BG,EAAeH,EAAK,mBAAmB,EAC3C,OAAO,MAAMA,CAAI,EAAI,eACfvqB,aAAWuqB,EAAK,eAAe,EAAG,CAAC,EAAI,IAAMxqB,MAAIwqB,EAAK,YAAY,EAAI,EAAG,CAAC,EAAI,IAAMxqB,MAAIwqB,EAAK,WAAW,EAAG,CAAC,GAC3GG,EAAe,IAAM3qB,MAAIuqB,EAAO,CAAC,EAAI,IAAMvqB,MAAIyqB,EAAS,CAAC,EAAI,IAAMzqB,MAAI0qB,EAAS,CAAC,EAAI,IAAM1qB,MAAI2qB,EAAc,CAAC,EAAI,IACnHD,EAAU,IAAM1qB,MAAIuqB,EAAO,CAAC,EAAI,IAAMvqB,MAAIyqB,EAAS,CAAC,EAAI,IAAMzqB,MAAI0qB,EAAS,CAAC,EAAI,IAChFD,GAAWF,EAAQ,IAAMvqB,MAAIuqB,EAAO,CAAC,EAAI,IAAMvqB,MAAIyqB,EAAS,CAAC,EAAI,IACjE,GACR,CAEA,SAAA,YAAwB,EAAW,CACjC,IAAIG,EAAe,OAAO,KAAQC,EAAY;IAAO,EACjDC,EAAYD,EAAU,WAAW,CAAC,EAEtC,SAAS,MAAM,EAAM,EAAG,CACtB,IAAIE,EAASd,EAASG,EAAO,UAAUY,EAAM,SAAS,EAAK,EAAG,CAC5D,GAAID,EAAS,OAAOA,EAAQ9B,EAAK/Y,EAAI,CAAC,EACtC,EAAU+Y,EAAK,EAAUnS,EAAI,gBAAgBmS,EAAKnS,CAAC,EAAI,gBAAgBmS,CAAG,CAC5E,CAAC,EAED,MADA,GAAK,QAAUgB,GAAW,CAAC,EACpBG,CACT,CAEA,SAAS,UAAU,EAAM,EAAG,CAC1B,IAAIA,EAAO,CAAC,EACRa,EAAID,EAAK,OACTpL,EAAI,EACJ/O,EAAI,EACJ8D,EACAuW,EAAMD,GAAK,EACXE,EAAM,GAGNH,EAAK,WAAWC,EAAI,CAAC,IAAMlB,IAAS,EAAEkB,EACtCD,EAAK,WAAWC,EAAI,CAAC,IAAMjB,IAAQ,EAAEiB,EAEzC,SAAS,OAAQ,CACf,GAAIC,EAAK,OAAOrB,GAChB,GAAIsB,EAAK,MAAO,GAAM,GAAOvB,GAG7B,IAAI1Z,EAAGS,EAAIiP,EAAG1J,EACd,GAAI8U,EAAK,WAAWra,CAAC,IAAMmZ,GAAO,CAChC,KAAO,IAAMmB,GAAKD,EAAK,WAAWpL,CAAC,IAAMkK,IAASkB,EAAK,WAAW,EAAEpL,CAAC,IAAMkK,KAI3E,OAHK,EAAIlK,IAAMqL,EAAG,EAAM,IACd,EAAID,EAAK,WAAW,GAAG,KAAOjB,GAAS,EAAM,GAC9C7T,IAAM8T,KAAU,EAAM,GAAUgB,EAAK,WAAWpL,CAAC,IAAMmK,IAAS,EAAEnK,GACpEoL,EAAK,MAAMra,EAAI,EAAGT,EAAI,CAAC,CAAC,CAAC,QAAQ,MAAO,GAAI,CACrD,CAGA,KAAO0P,EAAIqL,GAAG,CACZ,IAAK,EAAID,EAAK,WAAW,EAAI,GAAG,KAAOjB,GAAS,EAAM,QACjD,GAAI7T,IAAM8T,GAAU,EAAM,GAAUgB,EAAK,WAAWpL,CAAC,IAAMmK,IAAS,EAAEnK,OACtE,GAAI1J,IAAM4U,EAAW,SAC1B,OAAOE,EAAK,MAAMra,EAAGT,CAAC,CACxB,CAGA,MAAO,GAAM,GAAM8a,EAAK,MAAMra,EAAGsa,CAAC,CACpC,CAEA,MAAQ,EAAI,MAAM,KAAOpB,IAAK,CAE5B,IADA,IAAIZ,EAAM,CAAC,EACJtU,IAAMiV,IAAOjV,IAAMkV,IAAKZ,EAAI,KAAKtU,CAAC,EAAG,EAAI,MAAM,EAClDmC,IAAM,EAAMA,EAAEmS,EAAK,GAAG,IAAM,MAChCmB,EAAK,KAAKnB,CAAG,CACf,CAEA,OAAOmB,CACT,CAEA,SAAS,cAAc,EAAM,EAAS,CACpC,OAAOA,EAAK,IAAI,SAAS,EAAK,CAC5B,OAAOH,EAAQ,IAAI,SAAS,EAAQ,CAClC,OAAO,YAAYhB,EAAIoB,EAAO,CAChC,CAAC,CAAC,CAAC,KAAKQ,CAAS,CACnB,CAAC,CACH,CAEA,SAAS,OAAO,EAAM,EAAS,CAE7B,MADA,CAAqBZ,IAAU,aAAaG,CAAI,EACzC,CAACH,EAAQ,IAAI,WAAW,CAAC,CAAC,KAAKY,CAAS,CAAC,CAAC,CAAC,OAAO,cAAcT,EAAMH,CAAO,CAAC,CAAC,CAAC,KAAK;CAAI,CAClG,CAEA,SAAS,WAAW,EAAM,EAAS,CAEjC,MADA,CAAqBA,IAAU,aAAaG,CAAI,EACzC,cAAcA,EAAMH,CAAO,CAAC,CAAC,KAAK;CAAI,CAC/C,CAEA,SAAS,WAAW,EAAM,CACxB,OAAOG,EAAK,IAAI,SAAS,CAAC,CAAC,KAAK;CAAI,CACtC,CAEA,SAAS,UAAU,EAAK,CACtB,OAAOnB,EAAI,IAAI,WAAW,CAAC,CAAC,KAAK4B,CAAS,CAC5C,CAEA,SAAS,YAAY,EAAO,CAC1B,OAAO1Y,GAAS,KAAO,GACjBA,aAAiB,KAAO,WAAWA,CAAK,EACxCyY,EAAS,KAAK,GAAS,EAAE,EAAI,IAAOzY,EAAM,QAAQ,KAAM,IAAM,EAAI,IAClEA,CACR,CAEA,MAAO,CACE,MACI,UACH,OACI,WACA,WACD,UACE,WACf,CACF,CCjKA,IAAIiZ,EAAMlrB,YAAI,GAAG,EAENmrB,GAAWD,EAAI,MACfE,GAAeF,EAAI,UACnBG,GAAYH,EAAI,OAChBI,GAAgBJ,EAAI,WACpBK,GAAgBL,EAAI,WACpBM,GAAeN,EAAI,UACnBO,GAAiBP,EAAI,YCR5BQ,GAAMzrB,YAAI,GAAI,EAEP0rB,GAAWD,GAAI,MACfE,GAAeF,GAAI,UACnBG,GAAYH,GAAI,OAChBI,GAAgBJ,GAAI,WACpBK,GAAgBL,GAAI,WACpBM,GAAeN,GAAI,UACnBO,GAAiBP,GAAI,YCVhC,SAAwB,SAAS,EAAQ,CACvC,IAAK,IAAI3Z,KAAOiY,EAAQ,CACtB,IAAI/X,EAAQ+X,EAAOjY,EAAI,CAAC,KAAK,EAAGma,EAAQ3b,EACxC,GAAI,CAAC0B,EAAO,EAAQ,UACf,GAAIA,IAAU,OAAQ,EAAQ,QAC9B,GAAIA,IAAU,QAAS,EAAQ,QAC/B,GAAIA,IAAU,MAAO,EAAQ,SAC7B,GAAI,CAAC,MAAM,EAAS,CAACA,CAAK,EAAG,EAAQia,OACrC,GAAI,EAAIja,EAAM,MAAM,6FAA6F,EAChHka,IAAW5b,EAAE,IAAM,CAACA,EAAE,KAAI,EAAQ0B,EAAM,QAAQ,KAAM,GAAG,CAAC,CAAC,QAAQ,IAAK,GAAG,GAC/E,EAAQ,IAAI,KAAKA,CAAK,OAEnB,SACL,EAAOF,GAAOE,CAChB,CACA,OAAO+X,CACT,CAGA,IAAMmC,GAAQ,IAAI,KAAK,kBAAkB,CAAA,CAAE,SAAS,GAAK,IAAI,KAAK,kBAAkB,CAAA,CAAE,SAAS,ECnB/F,SAAA,sBAAwB,EAAG,CACzB,OAAO,KAAK,IAAI,EAAI,KAAK,MAAMpb,CAAC,CAAC,GAAK,KAChCA,EAAE,eAAe,IAAI,CAAC,CAAC,QAAQ,KAAM,EAAE,EACvCA,EAAE,SAAS,EAAE,CACrB,C,wCAKA,SAAgB,mBAAmB,EAAG,EAAG,CACvC,GAAI,CAAC,SAASA,CAAC,GAAKA,IAAM,EAAG,OAAO,KACpC,IAAIf,GAAK,EAAI0S,EAAI3R,EAAE,cAAc2R,EAAI,CAAC,EAAI3R,EAAE,cAAc,EAAA,CAAG,QAAQ,GAAG,EAAGqb,EAAcrb,EAAE,MAAM,EAAGf,CAAC,EAIrG,MAAO,CACLoc,EAAY,OAAS,EAAIA,EAAY,GAAKA,EAAY,MAAM,CAAC,EAAIA,EACjE,CAACrb,EAAE,MAAMf,EAAI,CAAC,CAChB,CACF,CCjBA,SAAA,iBAAwB,EAAG,CACzB,MAAO,GAAI,mBAAmB,KAAK,IAAIe,CAAC,CAAC,EAAGA,EAAIA,EAAE,GAAK,GACzD,C,mCCJA,SAAA,oBAAwB,EAAU,EAAW,CAC3C,OAAO,SAAS,EAAO,EAAO,CAO5B,IANA,IAAIf,EAAIiC,EAAM,OACVwC,EAAI,CAAC,EACLhE,EAAI,EACJyI,EAAImT,EAAS,GACb5I,EAAS,EAENzT,EAAI,GAAKkJ,EAAI,IACduK,EAASvK,EAAI,EAAI8K,IAAO,EAAI,KAAK,IAAI,EAAGA,EAAQP,CAAM,GAC1DhP,EAAE,KAAKxC,EAAM,UAAU,GAAKiH,EAAGlJ,EAAIkJ,CAAC,CAAC,EACrC,GAAK,GAAUA,EAAI,GAAK8K,KACxB,EAAIqI,EAAS,GAAK5b,EAAI,GAAK4b,EAAS,QAGtC,OAAO5X,EAAE,QAAQ,CAAC,CAAC,KAAK6X,CAAS,CACnC,CACF,C,sCCjBA,SAAA,uBAAwB,EAAU,CAChC,OAAO,SAAS,EAAO,CACrB,OAAOra,EAAM,QAAQ,SAAU,SAAS,EAAG,CACzC,OAAOsa,EAAS,CAACvc,EACnB,CAAC,CACH,CACF,C,yCCLA,IAAIwc,GAAK,2EAET,SAAwB,gBAAgB,EAAW,CACjD,GAAI,EAAE,EAAQA,GAAG,KAAKC,CAAS,GAAI,MAAU,MAAM,mBAAqBA,CAAS,EACjF,IAAIvb,EACJ,OAAO,IAAI,gBAAgB,CACzB,KAAMA,EAAM,GACZ,MAAOA,EAAM,GACb,KAAMA,EAAM,GACZ,OAAQA,EAAM,GACd,KAAMA,EAAM,GACZ,MAAOA,EAAM,GACb,MAAOA,EAAM,GACb,UAAWA,EAAM,IAAMA,EAAM,EAAE,CAAC,MAAM,CAAC,EACvC,KAAMA,EAAM,GACZ,KAAMA,EAAM,GACd,CAAC,CACH,CAEA,gBAAgB,UAAY,gBAAgB,UAE5C,SAAgB,gBAAgB,EAAW,CACzC,KAAK,KAAOub,EAAU,OAAS,IAAA,GAAY,IAAMA,EAAU,KAAO,GAClE,KAAK,MAAQA,EAAU,QAAU,IAAA,GAAY,IAAMA,EAAU,MAAQ,GACrE,KAAK,KAAOA,EAAU,OAAS,IAAA,GAAY,IAAMA,EAAU,KAAO,GAClE,KAAK,OAASA,EAAU,SAAW,IAAA,GAAY,GAAKA,EAAU,OAAS,GACvE,KAAK,KAAO,CAAC,CAACA,EAAU,KACxB,KAAK,MAAQA,EAAU,QAAU,IAAA,GAAY,IAAA,GAAY,CAACA,EAAU,MACpE,KAAK,MAAQ,CAAC,CAACA,EAAU,MACzB,KAAK,UAAYA,EAAU,YAAc,IAAA,GAAY,IAAA,GAAY,CAACA,EAAU,UAC5E,KAAK,KAAO,CAAC,CAACA,EAAU,KACxB,KAAK,KAAOA,EAAU,OAAS,IAAA,GAAY,GAAKA,EAAU,KAAO,EACnE,CAEA,gBAAgB,UAAU,SAAW,UAAW,CAC9C,OAAO,KAAK,KACN,KAAK,MACL,KAAK,KACL,KAAK,QACJ,KAAK,KAAO,IAAM,KAClB,KAAK,QAAU,IAAA,GAAY,GAAK,KAAK,IAAI,EAAG,KAAK,MAAQ,CAAC,IAC1D,KAAK,MAAQ,IAAM,KACnB,KAAK,YAAc,IAAA,GAAY,GAAK,IAAM,KAAK,IAAI,EAAG,KAAK,UAAY,CAAC,IACxE,KAAK,KAAO,IAAM,IACnB,KAAK,IACb,EC7CA,SAAA,mBAAwB,EAAG,CACzB,IAAK,IAAK,IAAI9b,EAAI0I,EAAE,OAAQrJ,EAAI,EAAGsC,EAAK,GAAIC,EAAIvC,EAAIW,EAAG,EAAEX,EACvD,OAAQqJ,EAAErJ,GAAV,CACE,IAAK,IAAK,EAAK,EAAKA,EAAG,MACvB,IAAK,IAASsC,IAAO,IAAG,EAAKtC,GAAG,EAAKA,EAAG,MACxC,QAAS,GAAI,CAAC,CAACqJ,EAAErJ,GAAI,MAAM,IAASsC,EAAK,IAAG,EAAK,EACnD,CAEF,OAAOA,EAAK,EAAI+G,EAAE,MAAM,EAAG/G,CAAE,EAAI+G,EAAE,MAAM9G,EAAK,CAAC,EAAI8G,CACrD,C,qCCRA,IAAWqT,GAEX,SAAA,yBAAwB,EAAG,EAAG,CAC5B,IAAIpR,EAAI,mBAAmBvK,EAAG2R,CAAC,EAC/B,GAAI,CAACpH,EAAG,MAAO,IAAiB,IAAA,GAAWvK,EAAE,YAAY2R,CAAC,EAC1D,IAAI0J,EAAc9Q,EAAE,GAChB8F,EAAW9F,EAAE,GACbtL,EAAIoR,GAAY,GAAiB,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,KAAK,MAAMA,EAAW,CAAC,CAAC,CAAC,EAAI,GAAK,EAC5FzQ,EAAIyb,EAAY,OACpB,OAAOpc,IAAMW,EAAIyb,EACXpc,EAAIW,EAAIyb,EAAkB,MAAMpc,EAAIW,EAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EACnDX,EAAI,EAAIoc,EAAY,MAAM,EAAGpc,CAAC,EAAI,IAAMoc,EAAY,MAAMpc,CAAC,EAC3D,KAAW,MAAM,EAAIA,CAAC,CAAC,CAAC,KAAK,GAAG,EAAI,mBAAmBe,EAAG,KAAK,IAAI,EAAG2R,EAAI1S,EAAI,CAAC,CAAC,CAAC,CAAC,EAC1F,C,2CCbA,SAAA,sBAAwB,EAAG,EAAG,CAC5B,IAAIsL,EAAI,mBAAmBvK,EAAG2R,CAAC,EAC/B,GAAI,CAACpH,EAAG,OAAOvK,EAAI,GACnB,IAAIqb,EAAc9Q,EAAE,GAChB8F,EAAW9F,EAAE,GACjB,OAAO8F,EAAW,EAAI,KAAW,MAAM,CAACA,CAAQ,CAAC,CAAC,KAAK,GAAG,EAAIgL,EACxDA,EAAY,OAAShL,EAAW,EAAIgL,EAAY,MAAM,EAAGhL,EAAW,CAAC,EAAI,IAAMgL,EAAY,MAAMhL,EAAW,CAAC,EAC7GgL,EAAkB,MAAMhL,EAAWgL,EAAY,OAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAC3E,C,wCCNA,IAAAO,GAAe,CACb,KAAM,EAAG,KAAO5b,EAAI,IAAA,CAAK,QAAQ2R,CAAC,EAClCkK,EAAM,GAAM,KAAK,MAAM7b,CAAC,CAAC,CAAC,SAAS,CAAC,EACpC8b,EAAM,GAAM9b,EAAI,GAChB+b,EAAK5sB,sBACL6sB,GAAM,EAAG,IAAMhc,EAAE,cAAc2R,CAAC,EAChCsK,GAAM,EAAG,IAAMjc,EAAE,QAAQ2R,CAAC,EAC1BuK,GAAM,EAAG,IAAMlc,EAAE,YAAY2R,CAAC,EAC9BwK,EAAM,GAAM,KAAK,MAAMnc,CAAC,CAAC,CAAC,SAAS,CAAC,EACpCoc,GAAM,EAAG,IAAMhtB,sBAAc4Q,EAAI,IAAK2R,CAAC,EACvC0K,EAAKjtB,sBACLktB,EAAKjtB,yBACLktB,EAAM,GAAM,KAAK,MAAMvc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,YAAY,EACnDwc,EAAM,GAAM,KAAK,MAAMxc,CAAC,CAAC,CAAC,SAAS,EAAE,CACvC,EClBA,SAAA,iBAAwB,EAAG,CACzB,OAAOA,CACT,C,mCCOA,IAAI1Q,GAAM,MAAM,UAAU,IACtBotB,GAAW,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAElF,SAAA,eAAwB,EAAQ,CAC9B,IAAI/c,EAAQgd,EAAO,WAAa,IAAA,IAAaA,EAAO,YAAc,IAAA,GAAYptB,iBAAWC,oBAAYF,GAAI,KAAKqtB,EAAO,SAAU,MAAM,EAAGA,EAAO,UAAY,EAAE,EACzJC,EAAiBD,EAAO,WAAa,IAAA,GAAY,GAAKA,EAAO,SAAS,GAAK,GAC3EE,EAAiBF,EAAO,WAAa,IAAA,GAAY,GAAKA,EAAO,SAAS,GAAK,GAC3EG,EAAUH,EAAO,UAAY,IAAA,GAAY,IAAMA,EAAO,QAAU,GAChEnB,EAAWmB,EAAO,WAAa,IAAA,GAAYptB,iBAAWE,uBAAeH,GAAI,KAAKqtB,EAAO,SAAU,MAAM,CAAC,EACtGI,EAAUJ,EAAO,UAAY,IAAA,GAAY,IAAMA,EAAO,QAAU,GAChEK,EAAQL,EAAO,QAAU,IAAA,GAAY,IAAMA,EAAO,MAAQ,GAC1DM,EAAMN,EAAO,MAAQ,IAAA,GAAY,MAAQA,EAAO,IAAM,GAE1D,SAAS,UAAU,EAAW,EAAS,CACrC,EAAY,gBAAgBjB,CAAS,EAErC,IAAIwB,EAAOxB,EAAU,KACjByB,EAAQzB,EAAU,MAClB0B,EAAO1B,EAAU,KACjB2B,EAAS3B,EAAU,OACnB4B,EAAO5B,EAAU,KACjBzI,EAAQyI,EAAU,MAClB6B,EAAQ7B,EAAU,MAClB8B,EAAY9B,EAAU,UACtB+B,EAAO/B,EAAU,KACjB1X,EAAO0X,EAAU,KAGjB1X,IAAS,KAAK,EAAQ,GAAM,EAAO,KAG7BtU,GAAYsU,KAAOwZ,IAAc,IAAA,KAAc,EAAY,IAAK,EAAO,GAAM,EAAO,MAG1FF,GAASJ,IAAS,KAAOC,IAAU,OAAM,EAAO,GAAM,EAAO,IAAK,EAAQ,KAI9E,IAAIne,GAAU8E,GAAWA,EAAQ,SAAW,IAAA,GAAYA,EAAQ,OAAS,KAAOuZ,IAAW,IAAMT,EAAiBS,IAAW,KAAO,SAAS,KAAKrZ,CAAI,EAAI,IAAMA,EAAK,YAAY,EAAI,IACjL0Z,GAAUL,IAAW,IAAMR,EAAiB,OAAO,KAAK7Y,CAAI,EAAI+Y,EAAU,KAAOjZ,GAAWA,EAAQ,SAAW,IAAA,GAAYA,EAAQ,OAAS,IAK5I6Z,EAAajuB,GAAYsU,GACzB4Z,EAAc,aAAa,KAAK5Z,CAAI,EAMxC,EAAYwZ,IAAc,IAAA,GAAY,EAChC,SAAS,KAAKxZ,CAAI,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAIwZ,CAAS,CAAC,EACzD,KAAK,IAAI,EAAG,KAAK,IAAI,GAAIA,CAAS,CAAC,EAEzC,SAAS,OAAO,EAAO,CACrB,IAAIK,EAAc7e,EACd8e,EAAcJ,EACdze,EAAGW,EAAGqF,EAEV,GAAIjB,IAAS,IACX,EAAc2Z,EAAWzc,CAAK,EAAI4c,EAClC,EAAQ,OACH,CACL,EAAQ,CAAC5c,EAGT,IAAI6c,EAAgB7c,EAAQ,GAAK,EAAIA,EAAQ,EAiB7C,GAdA,EAAQ,MAAMA,CAAK,EAAI+b,EAAMU,EAAW,KAAK,IAAIzc,CAAK,EAAGsc,CAAS,EAG9DC,IAAM,EAAQ9tB,mBAAWuR,CAAK,GAG9B6c,GAAiB,CAAC7c,GAAU,GAAKkc,IAAS,MAAK,EAAgB,IAGnE,GAAeW,EAAiBX,IAAS,IAAMA,EAAOJ,EAASI,IAAS,KAAOA,IAAS,IAAM,GAAKA,GAAQS,EAC3G,GAAe7Z,IAAS,KAAO,CAAC,MAAM9C,CAAK,GAAKya,KAAmB,IAAA,GAAYe,GAAS,EAAIf,GAAiB,GAAK,IAAMmC,GAAeC,GAAiBX,IAAS,IAAM,IAAM,IAIzKQ,EAEF,KADA,EAAI,GAAI,EAAI1c,EAAM,OACX,EAAEjC,EAAIW,GACX,GAAI,EAAIsB,EAAM,WAAWjC,CAAC,EAAG,GAAKgG,GAAKA,EAAI,GAAI,CAC7C,GAAeA,IAAM,GAAK6X,EAAU5b,EAAM,MAAMjC,EAAI,CAAC,EAAIiC,EAAM,MAAMjC,CAAC,GAAK6e,EAC3E,EAAQ5c,EAAM,MAAM,EAAGjC,CAAC,EACxB,KACF,EAGN,CAGIse,GAAS,CAACD,IAAM,EAAQ3d,EAAMuB,EAAO,GAAQ,GAGjD,IAAIwR,EAASmL,EAAY,OAAS3c,EAAM,OAAS4c,EAAY,OACzDE,EAAUtL,EAASO,EAAY,MAAMA,EAAQP,EAAS,CAAC,CAAC,CAAC,KAAKwK,CAAI,EAAI,GAM1E,OAHIK,GAASD,IAAM,EAAQ3d,EAAMqe,EAAU9c,EAAO8c,EAAQ,OAAS/K,EAAQ6K,EAAY,OAAS,GAAQ,EAAG,EAAU,IAG7GX,EAAR,CACE,IAAK,IAAK,EAAQU,EAAc3c,EAAQ4c,EAAcE,EAAS,MAC/D,IAAK,IAAK,EAAQH,EAAcG,EAAU9c,EAAQ4c,EAAa,MAC/D,IAAK,IAAK,EAAQE,EAAQ,MAAM,EAAG,EAASA,EAAQ,QAAU,CAAC,EAAIH,EAAc3c,EAAQ4c,EAAcE,EAAQ,MAAMtL,CAAM,EAAG,MAC9H,QAAS,EAAQsL,EAAUH,EAAc3c,EAAQ4c,CACnD,CAEA,OAAOtC,EAASta,CAAK,CACvB,CAMA,MAJA,QAAO,SAAW,UAAW,CAC3B,OAAOwa,EAAY,EACrB,EAEO,MACT,CAEA,SAAS,aAAa,EAAW,EAAO,CACtC,IAAI1V,EAAI,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,KAAK,MAAMpW,iBAASsR,CAAK,EAAI,CAAC,CAAC,CAAC,EAAI,EACjEmH,EAAa,IAAI,CAACrC,EAClBH,EAAI,WAAW,EAAY,gBAAgB6V,CAAS,EAAG,EAAU,KAAO,IAAKA,GAAY,CAAC,OAAQgB,GAAS,EAAI1W,EAAI,EAAE,CAAC,EAC1H,OAAO,SAAS,EAAO,CACrB,OAAOH,EAAEwC,EAAInH,CAAK,CACpB,CACF,CAEA,MAAO,CACL,OAAQ,UACM,YAChB,CACF,C,iCChJA,IAAIrR,GACOoY,GACAiW,GAEX,cAAc,CACZ,UAAW,IACX,SAAU,CAAC,CAAC,EACZ,SAAU,CAAC,IAAK,EAAE,CACpB,CAAC,EAED,SAAwB,cAAc,EAAY,CAIhD,MAHA,IAASpuB,eAAamX,CAAU,EAChC,GAASpX,GAAO,OAChB,GAAeA,GAAO,aACfA,EACT,CCfA,SAAA,uBAAwB,EAAM,CAC5B,OAAO,KAAK,IAAI,EAAG,CAACE,iBAAS,KAAK,IAAIyjB,CAAI,CAAC,CAAC,CAC9C,C,yCCFA,SAAA,wBAAwB,EAAM,EAAO,CACnC,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,KAAK,MAAMxjB,iBAASkR,CAAK,EAAI,CAAC,CAAC,CAAC,EAAI,EAAIlR,iBAAS,KAAK,IAAIwjB,CAAI,CAAC,CAAC,CAC9G,C,0CCFA,SAAA,uBAAwB,EAAM,EAAK,CAEjC,MADA,GAAO,KAAK,IAAIA,CAAI,EAAG,EAAM,KAAK,IAAI/K,CAAG,EAAI+K,EACtC,KAAK,IAAI,EAAGvjB,iBAASwY,CAAG,EAAIxY,iBAASujB,CAAI,CAAC,EAAI,CACvD,C,yCCLA,IAAMtN,GAAK,IAAI,KAAMC,GAAK,IAAI,KAE9B,SAAgB,aAAa,EAAQ,EAAS,EAAO,EAAO,CAE1D,SAAS,SAAS,EAAM,CACtB,OAAOgY,EAAO,EAAO,UAAU,SAAW,EAAI,IAAI,KAAO,IAAI,KAAK,CAAC5E,CAAI,CAAC,EAAGA,CAC7E,CA6DA,MA3DA,UAAS,MAAS,IACT4E,EAAO,EAAO,IAAI,KAAK,CAAC5E,CAAI,CAAC,EAAGA,GAGzC,SAAS,KAAQ,IACR4E,EAAO,EAAO,IAAI,KAAK5E,EAAO,CAAC,CAAC,EAAG6E,EAAQ7E,EAAM,CAAC,EAAG4E,EAAO5E,CAAI,EAAGA,GAG5E,SAAS,MAAS,GAAS,CACzB,IAAM8E,EAAK,SAAS9E,CAAI,EAAG9L,EAAK,SAAS,KAAK8L,CAAI,EAClD,OAAOA,EAAO8E,EAAK5Q,EAAK8L,EAAO8E,EAAK5Q,CACtC,EAEA,SAAS,QAAU,EAAM,KAChB2Q,EAAQ,EAAO,IAAI,KAAK,CAAC7E,CAAI,EAAG/F,GAAQ,KAAO,EAAI,KAAK,MAAMA,CAAI,CAAC,EAAG+F,GAG/E,SAAS,OAAS,EAAO,EAAM,IAAS,CACtC,IAAM9N,EAAQ,CAAC,EAGf,GAFA,EAAQ,SAAS,KAAKf,CAAK,EAC3B,EAAO8I,GAAQ,KAAO,EAAI,KAAK,MAAMA,CAAI,EACrC,EAAE9I,EAAQ6I,IAAS,EAAEC,EAAO,GAAI,OAAO/H,EAC3C,IAAIhK,EACJ,GAAGgK,EAAM,KAAK,EAAW,IAAI,KAAK,CAACf,CAAK,CAAC,EAAG0T,EAAQ1T,EAAO8I,CAAI,EAAG2K,EAAOzT,CAAK,QACvEjJ,EAAWiJ,GAASA,EAAQ6I,GACnC,OAAO9H,CACT,EAEA,SAAS,OAAU,GACV,aAAc,GAAS,CAC5B,GAAI8N,GAAQA,EAAM,KAAO4E,EAAO5E,CAAI,EAAG,CAACtB,EAAKsB,CAAI,GAAGA,EAAK,QAAQA,EAAO,CAAC,CAC3E,GAAI,EAAM,IAAS,CACjB,GAAIA,GAAQA,EAAM,CAChB,GAAI/F,EAAO,EAAG,KAAO,EAAEA,GAAQ,GAC7B,KAAO4K,EAAQ7E,EAAM,EAAE,EAAG,CAACtB,EAAKsB,CAAI,SAC/B,KAAO,EAAE/F,GAAQ,GACtB,KAAO4K,EAAQ7E,EAAM,CAAE,EAAG,CAACtB,EAAKsB,CAAI,IAExC,CACF,CAAC,EAGC1F,IACF,SAAS,OAAS,EAAO,KACvB3N,GAAG,QAAQ,CAACwE,CAAK,EAAGvE,GAAG,QAAQ,CAACwE,CAAG,EACnCwT,EAAOjY,EAAE,EAAGiY,EAAOhY,EAAE,EACd,KAAK,MAAM0N,EAAM3N,GAAIC,EAAE,CAAC,GAGjC,SAAS,MAAS,IAChB,EAAO,KAAK,MAAMqN,CAAI,EACf,CAAC,SAASA,CAAI,GAAK,EAAEA,EAAO,GAAK,KAChCA,EAAO,EACT,SAAS,OAAO8K,EACX,GAAMA,EAAM/T,CAAC,EAAIiJ,IAAS,EAC1B,GAAM,SAAS,MAAM,EAAGjJ,CAAC,EAAIiJ,IAAS,CAAC,EAH9B,WAOjB,QACT,CClEA,IAAa+K,GAAc,iBAAmB,CAE9C,GAAI,EAAM,IAAS,CACjBhF,EAAK,QAAQ,CAACA,EAAO/F,CAAI,CAC3B,GAAI,EAAO,IACF7I,EAAMD,CACd,EAGD,GAAY,MAAS,IACnB,EAAI,KAAK,MAAMrC,CAAC,EACZ,CAAC,SAASA,CAAC,GAAK,EAAEA,EAAI,GAAW,KAC/BA,EAAI,EACH,aAAc,GAAS,CAC5BkR,EAAK,QAAQ,KAAK,MAAMA,EAAOlR,CAAC,EAAIA,CAAC,CACvC,GAAI,EAAM,IAAS,CACjBkR,EAAK,QAAQ,CAACA,EAAO/F,EAAOnL,CAAC,CAC/B,GAAI,EAAO,KACDsC,EAAMD,GAASrC,CACxB,EAPoBkW,IAUKA,GAAY,MCxBxC,IAAaC,EAAiB,IACjBC,EAAiBD,EAAiB,GAClCE,EAAeD,EAAiB,GAChCE,EAAcD,EAAe,GAC7BE,GAAeD,EAAc,EAC7BE,GAAgBF,EAAc,GAC9BG,GAAeH,EAAc,ICH7BI,EAAS,aAAc,GAAS,CAC3CxF,EAAK,QAAQA,EAAOA,EAAK,gBAAgB,CAAC,CAC5C,GAAI,EAAM,IAAS,CACjBA,EAAK,QAAQ,CAACA,EAAO/F,EAAOgL,CAAc,CAC5C,GAAI,EAAO,KACD7T,EAAMD,GAAS8T,EACrB,GACKjF,EAAK,cAAc,CAC3B,EAEsBwF,EAAO,MCV9B,IAAaC,GAAa,aAAc,GAAS,CAC/CzF,EAAK,QAAQA,EAAOA,EAAK,gBAAgB,EAAIA,EAAK,WAAW,EAAIiF,CAAc,CACjF,GAAI,EAAM,IAAS,CACjBjF,EAAK,QAAQ,CAACA,EAAO/F,EAAOiL,CAAc,CAC5C,GAAI,EAAO,KACD9T,EAAMD,GAAS+T,EACrB,GACKlF,EAAK,WAAW,CACxB,EAE0ByF,GAAW,MAEtC,IAAaC,GAAY,aAAc,GAAS,CAC9C1F,EAAK,cAAc,EAAG,CAAC,CACzB,GAAI,EAAM,IAAS,CACjBA,EAAK,QAAQ,CAACA,EAAO/F,EAAOiL,CAAc,CAC5C,GAAI,EAAO,KACD9T,EAAMD,GAAS+T,EACrB,GACKlF,EAAK,cAAc,CAC3B,EAEyB0F,GAAU,MCtBpC,IAAaC,GAAW,aAAc,GAAS,CAC7C3F,EAAK,QAAQA,EAAOA,EAAK,gBAAgB,EAAIA,EAAK,WAAW,EAAIiF,EAAiBjF,EAAK,WAAW,EAAIkF,CAAc,CACtH,GAAI,EAAM,IAAS,CACjBlF,EAAK,QAAQ,CAACA,EAAO/F,EAAOkL,CAAY,CAC1C,GAAI,EAAO,KACD/T,EAAMD,GAASgU,EACrB,GACKnF,EAAK,SAAS,CACtB,EAEwB2F,GAAS,MAElC,IAAaC,GAAU,aAAc,GAAS,CAC5C5F,EAAK,cAAc,EAAG,EAAG,CAAC,CAC5B,GAAI,EAAM,IAAS,CACjBA,EAAK,QAAQ,CAACA,EAAO/F,EAAOkL,CAAY,CAC1C,GAAI,EAAO,KACD/T,EAAMD,GAASgU,EACrB,GACKnF,EAAK,YAAY,CACzB,EAEuB4F,GAAQ,MCtBhC,IAAaC,GAAU,aACrB,GAAQ7F,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,GAC/B,EAAM,IAASA,EAAK,QAAQA,EAAK,QAAQ,EAAI/F,CAAI,GACjD,EAAO,KAAS7I,EAAMD,GAASC,EAAI,kBAAkB,EAAID,EAAM,kBAAkB,GAAK+T,GAAkBE,EACzG,GAAQpF,EAAK,QAAQ,EAAI,CAC3B,EAEwB6F,GAAQ,MAEhC,IAAaC,GAAS,aAAc,GAAS,CAC3C9F,EAAK,YAAY,EAAG,EAAG,EAAG,CAAC,CAC7B,GAAI,EAAM,IAAS,CACjBA,EAAK,WAAWA,EAAK,WAAW,EAAI/F,CAAI,CAC1C,GAAI,EAAO,KACD7I,EAAMD,GAASiU,EACrB,GACKpF,EAAK,WAAW,EAAI,CAC5B,EAEsB8F,GAAO,MAE9B,IAAaC,GAAU,aAAc,GAAS,CAC5C/F,EAAK,YAAY,EAAG,EAAG,EAAG,CAAC,CAC7B,GAAI,EAAM,IAAS,CACjBA,EAAK,WAAWA,EAAK,WAAW,EAAI/F,CAAI,CAC1C,GAAI,EAAO,KACD7I,EAAMD,GAASiU,EACrB,GACK,KAAK,MAAMpF,EAAOoF,CAAW,CACrC,EAEuBW,GAAQ,MC/BhC,SAAS,YAAY,EAAG,CACtB,OAAO,aAAc,GAAS,CAC5B/F,EAAK,QAAQA,EAAK,QAAQ,GAAKA,EAAK,OAAO,EAAI,EAAIta,GAAK,CAAC,EACzDsa,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,CAC1B,GAAI,EAAM,IAAS,CACjBA,EAAK,QAAQA,EAAK,QAAQ,EAAI/F,EAAO,CAAC,CACxC,GAAI,EAAO,KACD7I,EAAMD,GAASC,EAAI,kBAAkB,EAAID,EAAM,kBAAkB,GAAK+T,GAAkBG,EACjG,CACH,CAEA,IAAaW,GAAa,YAAY,CAAC,EAC1BC,GAAa,YAAY,CAAC,EAC1BC,GAAc,YAAY,CAAC,EAC3BC,GAAgB,YAAY,CAAC,EAC7BC,GAAe,YAAY,CAAC,EAC5BC,GAAa,YAAY,CAAC,EAC1BC,GAAe,YAAY,CAAC,EAEdN,GAAW,MACXC,GAAW,MACVC,GAAY,MACVC,GAAc,MACfC,GAAa,MACfC,GAAW,MACTC,GAAa,MAE1C,SAAS,WAAW,EAAG,CACrB,OAAO,aAAc,GAAS,CAC5BtG,EAAK,WAAWA,EAAK,WAAW,GAAKA,EAAK,UAAU,EAAI,EAAIta,GAAK,CAAC,EAClEsa,EAAK,YAAY,EAAG,EAAG,EAAG,CAAC,CAC7B,GAAI,EAAM,IAAS,CACjBA,EAAK,WAAWA,EAAK,WAAW,EAAI/F,EAAO,CAAC,CAC9C,GAAI,EAAO,KACD7I,EAAMD,GAASkU,EACxB,CACH,CAEA,IAAakB,GAAY,WAAW,CAAC,EACxBC,GAAY,WAAW,CAAC,EACxBC,GAAa,WAAW,CAAC,EACzBC,GAAe,WAAW,CAAC,EAC3BC,GAAc,WAAW,CAAC,EAC1BC,GAAY,WAAW,CAAC,EACxBC,GAAc,WAAW,CAAC,EAEbN,GAAU,MACVC,GAAU,MACTC,GAAW,MACTC,GAAa,MACdC,GAAY,MACdC,GAAU,MACRC,GAAY,MCrDxC,IAAaC,GAAY,aAAc,GAAS,CAC9C9G,EAAK,QAAQ,CAAC,EACdA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,CAC1B,GAAI,EAAM,IAAS,CACjBA,EAAK,SAASA,EAAK,SAAS,EAAI/F,CAAI,CACtC,GAAI,EAAO,IACF7I,EAAI,SAAS,EAAID,EAAM,SAAS,GAAKC,EAAI,YAAY,EAAID,EAAM,YAAY,GAAK,GACrF,GACK6O,EAAK,SAAS,CACtB,EAEyB8G,GAAU,MAEpC,IAAaC,GAAW,aAAc,GAAS,CAC7C/G,EAAK,WAAW,CAAC,EACjBA,EAAK,YAAY,EAAG,EAAG,EAAG,CAAC,CAC7B,GAAI,EAAM,IAAS,CACjBA,EAAK,YAAYA,EAAK,YAAY,EAAI/F,CAAI,CAC5C,GAAI,EAAO,IACF7I,EAAI,YAAY,EAAID,EAAM,YAAY,GAAKC,EAAI,eAAe,EAAID,EAAM,eAAe,GAAK,GACjG,GACK6O,EAAK,YAAY,CACzB,EAEwB+G,GAAS,MCxBlC,IAAaC,EAAW,aAAc,GAAS,CAC7ChH,EAAK,SAAS,EAAG,CAAC,EAClBA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,CAC1B,GAAI,EAAM,IAAS,CACjBA,EAAK,YAAYA,EAAK,YAAY,EAAI/F,CAAI,CAC5C,GAAI,EAAO,IACF7I,EAAI,YAAY,EAAID,EAAM,YAAY,EAC3C,GACK6O,EAAK,YAAY,CACzB,EAGD,EAAS,MAAS,GACT,CAAC,SAAS,EAAI,KAAK,MAAMlR,CAAC,CAAC,GAAK,EAAEA,EAAI,GAAK,KAAO,aAAc,GAAS,CAC9EkR,EAAK,YAAY,KAAK,MAAMA,EAAK,YAAY,EAAIlR,CAAC,EAAIA,CAAC,EACvDkR,EAAK,SAAS,EAAG,CAAC,EAClBA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,CAC1B,GAAI,EAAM,IAAS,CACjBA,EAAK,YAAYA,EAAK,YAAY,EAAI/F,EAAOnL,CAAC,CAChD,CAAC,EAGsBkY,EAAS,MAElC,IAAaC,EAAU,aAAc,GAAS,CAC5CjH,EAAK,YAAY,EAAG,CAAC,EACrBA,EAAK,YAAY,EAAG,EAAG,EAAG,CAAC,CAC7B,GAAI,EAAM,IAAS,CACjBA,EAAK,eAAeA,EAAK,eAAe,EAAI/F,CAAI,CAClD,GAAI,EAAO,IACF7I,EAAI,eAAe,EAAID,EAAM,eAAe,EACjD,GACK6O,EAAK,eAAe,CAC5B,EAGD,EAAQ,MAAS,GACR,CAAC,SAAS,EAAI,KAAK,MAAMlR,CAAC,CAAC,GAAK,EAAEA,EAAI,GAAK,KAAO,aAAc,GAAS,CAC9EkR,EAAK,eAAe,KAAK,MAAMA,EAAK,eAAe,EAAIlR,CAAC,EAAIA,CAAC,EAC7DkR,EAAK,YAAY,EAAG,CAAC,EACrBA,EAAK,YAAY,EAAG,EAAG,EAAG,CAAC,CAC7B,GAAI,EAAM,IAAS,CACjBA,EAAK,eAAeA,EAAK,eAAe,EAAI/F,EAAOnL,CAAC,CACtD,CAAC,EAGqBmY,EAAQ,MCrChC,SAAS,OAAO,EAAM,EAAO,EAAM,EAAK,EAAM,EAAQ,CAEpD,IAAMC,EAAgB,CACpB,CAAC1B,EAAS,EAAQP,CAAc,EAChC,CAACO,EAAS,EAAI,EAAIP,CAAc,EAChC,CAACO,EAAQ,GAAI,GAAKP,CAAc,EAChC,CAACO,EAAQ,GAAI,GAAKP,CAAc,EAChC,CAACkC,EAAS,EAAQjC,CAAc,EAChC,CAACiC,EAAS,EAAI,EAAIjC,CAAc,EAChC,CAACiC,EAAQ,GAAI,GAAKjC,CAAc,EAChC,CAACiC,EAAQ,GAAI,GAAKjC,CAAc,EAChC,CAAGkC,EAAO,EAAQjC,CAAc,EAChC,CAAGiC,EAAO,EAAI,EAAIjC,CAAc,EAChC,CAAGiC,EAAO,EAAI,EAAIjC,CAAc,EAChC,CAAGiC,EAAM,GAAI,GAAKjC,CAAc,EAChC,CAAIkC,EAAM,EAAQjC,CAAc,EAChC,CAAIiC,EAAM,EAAI,EAAIjC,CAAc,EAChC,CAAGkC,EAAO,EAAQjC,EAAc,EAChC,CAAEkC,EAAQ,EAAQjC,EAAc,EAChC,CAAEiC,EAAQ,EAAI,EAAIjC,EAAc,EAChC,CAAGxF,EAAO,EAAQyF,EAAc,CAClC,EAEA,SAAS,MAAM,EAAO,EAAM,EAAO,CACjC,IAAMpJ,EAAUnC,EAAO7I,EACnBgL,IAAS,CAAChL,EAAO6I,GAAQ,CAACA,EAAM7I,CAAK,GACzC,IAAMtF,EAAWyO,GAAS,OAAOA,EAAM,OAAU,WAAaA,EAAQ,aAAanJ,EAAO6I,EAAMM,CAAK,EAC/F8B,EAAQvQ,EAAWA,EAAS,MAAMsF,EAAO,CAAC6I,EAAO,CAAC,EAAI,CAAC,EAC7D,OAAOmC,EAAUC,EAAM,QAAQ,EAAIA,CACrC,CAEA,SAAS,aAAa,EAAO,EAAM,EAAO,CACxC,IAAMnX,EAAS,KAAK,IAAI+U,EAAO7I,CAAK,EAAImJ,EAClC5U,EAAI,UAAU,GAAIuU,KAAUA,CAAI,CAAC,CAAC,MAAMiN,EAAejiB,CAAM,EACnE,GAAIS,IAAMwhB,EAAc,OAAQ,OAAOpH,EAAK,MAAM,SAAS3O,EAAQoU,GAAcvL,EAAOuL,GAAcjL,CAAK,CAAC,EAC5G,GAAI5U,IAAM,EAAG,OAAOsf,GAAY,MAAM,KAAK,IAAI,SAAS7T,EAAO6I,EAAMM,CAAK,EAAG,CAAC,CAAC,EAC/E,GAAM,CAACnQ,EAAG8P,GAAQiN,EAAcjiB,EAASiiB,EAAcxhB,EAAI,EAAE,CAAC,GAAKwhB,EAAcxhB,EAAE,CAAC,GAAKT,EAASS,EAAI,EAAIA,GAC1G,OAAOyE,EAAE,MAAM8P,CAAI,CACrB,CAEA,MAAO,CAAC,MAAO,YAAY,CAC7B,CAEA,GAAM,CAACuN,GAAUC,IAAmB,OAAOR,EAASF,GAAUR,GAAWR,GAASH,GAASF,EAAS,EAC9F,CAACgC,GAAWC,IAAoB,OAAOX,EAAUF,GAAWd,GAAYH,GAASF,GAAUF,EAAU,EC1C3G,SAAS,UAAU,EAAG,CACpB,GAAI,GAAKzU,EAAE,GAAKA,EAAE,EAAI,IAAK,CACzB,IAAIgP,EAAO,IAAI,KAAK,GAAIhP,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,EAEpD,OADAgP,EAAK,YAAYhP,EAAE,CAAC,EACbgP,CACT,CACA,OAAO,IAAI,KAAKhP,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CACnD,CAEA,SAAS,QAAQ,EAAG,CAClB,GAAI,GAAKA,EAAE,GAAKA,EAAE,EAAI,IAAK,CACzB,IAAIgP,EAAO,IAAI,KAAK,KAAK,IAAI,GAAIhP,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CAAC,EAE9D,OADAgP,EAAK,eAAehP,EAAE,CAAC,EAChBgP,CACT,CACA,OAAO,IAAI,KAAK,KAAK,IAAIhP,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CAAC,CAC7D,CAEA,SAAS,QAAQ,EAAG,EAAG,EAAG,CACxB,MAAO,CAAI,IAAM,IAAM,IAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAClD,CAEA,SAAwB,aAAa,EAAQ,CAC3C,IAAI4W,EAAkBxE,EAAO,SACzByE,EAAczE,EAAO,KACrB0E,EAAc1E,EAAO,KACrB2E,EAAiB3E,EAAO,QACxB4E,EAAkB5E,EAAO,KACzB6E,EAAuB7E,EAAO,UAC9B8E,EAAgB9E,EAAO,OACvB+E,EAAqB/E,EAAO,YAE5BgF,EAAW,SAASL,CAAc,EAClCM,EAAe,aAAaN,CAAc,EAC1CO,EAAY,SAASN,CAAe,EACpCO,EAAgB,aAAaP,CAAe,EAC5CQ,EAAiB,SAASP,CAAoB,EAC9CQ,EAAqB,aAAaR,CAAoB,EACtDS,EAAU,SAASR,CAAa,EAChCS,EAAc,aAAaT,CAAa,EACxCU,EAAe,SAAST,CAAkB,EAC1CU,EAAmB,aAAaV,CAAkB,EAElDW,EAAU,CACZC,EAAK,mBACLC,EAAK,cACL1G,EAAK,iBACL2G,EAAK,YACL1G,EAAK,KACLC,EAAK,iBACLC,EAAK,iBACLC,EAAK,mBACLC,EAAK,cACLuG,EAAK,kBACLC,EAAK,aACLC,EAAK,aACLC,EAAK,gBACLC,EAAK,mBACLC,EAAK,kBACLC,EAAK,cACL3G,EAAK,aACL4G,EAAK,cACLC,EAAK,oBACL3G,EAAK,2BACL4G,EAAK,cACLC,EAAK,0BACLC,EAAK,uBACLC,EAAK,oBACLC,EAAK,0BACLC,EAAK,uBACL/G,EAAK,KACLD,EAAK,KACLiH,EAAK,WACLC,EAAK,eACLC,EAAK,WACL,IAAK,oBACP,EAEIC,EAAa,CACfrB,EAAK,sBACLC,EAAK,iBACL1G,EAAK,oBACL2G,EAAK,eACL1G,EAAK,KACLC,EAAK,oBACLC,EAAK,oBACLC,EAAK,sBACLC,EAAK,iBACLuG,EAAK,qBACLC,EAAK,gBACLC,EAAK,gBACLC,EAAK,mBACLC,EAAK,sBACLC,EAAK,qBACLC,EAAK,iBACL3G,EAAK,gBACL4G,EAAK,iBACLC,EAAK,oBACL3G,EAAK,2BACL4G,EAAK,iBACLC,EAAK,6BACLC,EAAK,0BACLC,EAAK,uBACLC,EAAK,6BACLC,EAAK,0BACL/G,EAAK,KACLD,EAAK,KACLiH,EAAK,cACLC,EAAK,kBACLC,EAAK,cACL,IAAK,oBACP,EAEIE,EAAS,CACXtB,EAAK,kBACLC,EAAK,aACL1G,EAAK,gBACL2G,EAAK,WACL1G,EAAK,oBACLC,EAAK,gBACLC,EAAK,gBACLC,EAAK,kBACLC,EAAK,UACLuG,EAAK,cACLC,EAAK,YACLC,EAAK,YACLC,EAAK,eACLC,EAAK,kBACLC,EAAK,iBACLC,EAAK,aACL3G,EAAK,YACL4G,EAAK,aACLC,EAAK,mBACL3G,EAAK,0BACL4G,EAAK,aACLC,EAAK,yBACLC,EAAK,sBACLC,EAAK,mBACLC,EAAK,yBACLC,EAAK,sBACL/G,EAAK,gBACLD,EAAK,gBACLiH,EAAK,UACLC,EAAK,cACLC,EAAK,UACL,IAAK,mBACP,EAGA,EAAQ,EAAI,UAAUtC,EAAaiB,CAAO,EAC1C,EAAQ,EAAI,UAAUhB,EAAagB,CAAO,EAC1C,EAAQ,EAAI,UAAUlB,EAAiBkB,CAAO,EAC9C,EAAW,EAAI,UAAUjB,EAAauC,CAAU,EAChD,EAAW,EAAI,UAAUtC,EAAasC,CAAU,EAChD,EAAW,EAAI,UAAUxC,EAAiBwC,CAAU,EAEpD,SAAS,UAAU,EAAW,EAAS,CACrC,OAAO,SAAS,EAAM,CACpB,IAAI3gB,EAAS,CAAC,EACV/D,EAAI,GACJS,EAAI,EACJE,EAAI8b,EAAU,OACd,EACAmI,EACA5b,EAIJ,IAFMsR,aAAgB,OAAO,EAAO,IAAI,KAAK,CAACA,CAAI,GAE3C,EAAEta,EAAIW,GACP8b,EAAU,WAAWzc,CAAC,IAAM,KAC9B+D,EAAO,KAAK0Y,EAAU,MAAMhc,EAAGT,CAAC,CAAC,GAC5B,EAAM6kB,GAAK,EAAIpI,EAAU,OAAO,EAAEzc,CAAC,KAAO,KAC1C,EAAM,IAAM,IAAM,IAAM,IADwB,EAAIyc,EAAU,OAAO,EAAEzc,CAAC,GAEzE,EAASojB,EAAQ,MAAI,EAAIpa,EAAOsR,EAAMsK,CAAG,GAC7C7gB,EAAO,KAAK,CAAC,EACb,EAAI/D,EAAI,GAKZ,OADA+D,EAAO,KAAK0Y,EAAU,MAAMhc,EAAGT,CAAC,CAAC,EAC1B+D,EAAO,KAAK,EAAE,CACvB,CACF,CAEA,SAAS,SAAS,EAAW,EAAG,CAC9B,OAAO,SAAS,EAAQ,CACtB,IAAIuH,EAAI,QAAQ,KAAM,IAAA,GAAW,CAAC,EAC9BtL,EAAI,eAAesL,EAAGmR,EAAW,GAAU,GAAI,CAAC,EAChDmF,EAAMD,EACV,GAAI3hB,GAAK+D,EAAO,OAAQ,OAAO,KAG/B,GAAI,MAAOuH,EAAG,OAAO,IAAI,KAAKA,EAAE,CAAC,EACjC,GAAI,MAAOA,EAAG,OAAO,IAAI,KAAKA,EAAE,EAAI,KAAQ,MAAOA,EAAIA,EAAE,EAAI,EAAE,EAY/D,GATIwZ,GAAK,EAAE,MAAOxZ,KAAI,EAAE,EAAI,GAGxB,MAAOA,IAAG,EAAE,EAAIA,EAAE,EAAI,GAAKA,EAAE,EAAI,IAGjCA,EAAE,IAAM,IAAA,KAAW,EAAE,EAAI,MAAOA,EAAIA,EAAE,EAAI,GAG1C,MAAOA,EAAG,CACZ,GAAIA,EAAE,EAAI,GAAKA,EAAE,EAAI,GAAI,OAAO,KAC1B,MAAOA,IAAI,EAAE,EAAI,GACnB,MAAOA,GACT,EAAO,QAAQ,QAAQA,EAAE,EAAG,EAAG,CAAC,CAAC,EAAG,EAAMsW,EAAK,UAAU,EACzD,EAAOD,EAAM,GAAKA,IAAQ,EAAIb,GAAU,KAAKc,CAAI,EAAId,GAAUc,CAAI,EACnE,EAAOxB,GAAO,OAAOwB,GAAOtW,EAAE,EAAI,GAAK,CAAC,EACxC,EAAE,EAAIsW,EAAK,eAAe,EAC1B,EAAE,EAAIA,EAAK,YAAY,EACvB,EAAE,EAAIA,EAAK,WAAW,GAAKtW,EAAE,EAAI,GAAK,IAEtC,EAAO,UAAU,QAAQA,EAAE,EAAG,EAAG,CAAC,CAAC,EAAG,EAAMsW,EAAK,OAAO,EACxD,EAAOD,EAAM,GAAKA,IAAQ,EAAIpB,GAAW,KAAKqB,CAAI,EAAIrB,GAAWqB,CAAI,EACrE,EAAOzB,GAAQ,OAAOyB,GAAOtW,EAAE,EAAI,GAAK,CAAC,EACzC,EAAE,EAAIsW,EAAK,YAAY,EACvB,EAAE,EAAIA,EAAK,SAAS,EACpB,EAAE,EAAIA,EAAK,QAAQ,GAAKtW,EAAE,EAAI,GAAK,EAEvC,MAAW,MAAOA,GAAK,MAAOA,KACtB,MAAOA,IAAI,EAAE,EAAI,MAAOA,EAAIA,EAAE,EAAI,EAAI,QAAOA,IACnD,EAAM,MAAOA,EAAI,QAAQ,QAAQA,EAAE,EAAG,EAAG,CAAC,CAAC,CAAC,CAAC,UAAU,EAAI,UAAU,QAAQA,EAAE,EAAG,EAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAChG,EAAE,EAAI,EACN,EAAE,EAAI,MAAOA,GAAKA,EAAE,EAAI,GAAK,EAAIA,EAAE,EAAI,GAAKqW,EAAM,GAAK,EAAIrW,EAAE,EAAIA,EAAE,EAAI,GAAKqW,EAAM,GAAK,GAYzF,MAPI,MAAOrW,GACT,EAAE,GAAKA,EAAE,EAAI,IAAM,EACnB,EAAE,GAAKA,EAAE,EAAI,IACN,QAAQA,CAAC,GAIX,UAAUA,CAAC,CACpB,CACF,CAEA,SAAS,eAAe,EAAG,EAAW,EAAQ,EAAG,CAO/C,IANA,IAAItL,EAAI,EACJW,EAAI8b,EAAU,OACdlc,EAAIwD,EAAO,OACX,EACAuJ,EAEGtN,EAAIW,GAAG,CACZ,GAAIF,GAAKF,EAAG,MAAO,GAEnB,GADA,EAAIkc,EAAU,WAAW,GAAG,EACxB,IAAM,GAGR,IAFA,EAAIA,EAAU,OAAO,GAAG,EACxB,EAAQkI,EAAO,KAAKE,GAAOpI,EAAU,OAAO,GAAG,EAAI,GAC/C,CAACnP,IAAW,EAAIA,EAAMhC,EAAGvH,EAAQtD,CAAC,GAAK,EAAI,MAAO,EAAA,MACjD,GAAI,GAAKsD,EAAO,WAAW,GAAG,EACnC,MAAO,EAEX,CAEA,OAAOtD,CACT,CAEA,SAAS,YAAY,EAAG,EAAQ,EAAG,CACjC,IAAIE,EAAI+hB,EAAS,KAAK3e,EAAO,MAAM/D,CAAC,CAAC,EACrC,OAAOW,GAAK,EAAE,EAAIgiB,EAAa,IAAIhiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC7E,CAEA,SAAS,kBAAkB,EAAG,EAAQ,EAAG,CACvC,IAAIA,EAAImiB,EAAe,KAAK/e,EAAO,MAAM/D,CAAC,CAAC,EAC3C,OAAOW,GAAK,EAAE,EAAIoiB,EAAmB,IAAIpiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EACnF,CAEA,SAAS,aAAa,EAAG,EAAQ,EAAG,CAClC,IAAIA,EAAIiiB,EAAU,KAAK7e,EAAO,MAAM/D,CAAC,CAAC,EACtC,OAAOW,GAAK,EAAE,EAAIkiB,EAAc,IAAIliB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9E,CAEA,SAAS,gBAAgB,EAAG,EAAQ,EAAG,CACrC,IAAIA,EAAIuiB,EAAa,KAAKnf,EAAO,MAAM/D,CAAC,CAAC,EACzC,OAAOW,GAAK,EAAE,EAAIwiB,EAAiB,IAAIxiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EACjF,CAEA,SAAS,WAAW,EAAG,EAAQ,EAAG,CAChC,IAAIA,EAAIqiB,EAAQ,KAAKjf,EAAO,MAAM/D,CAAC,CAAC,EACpC,OAAOW,GAAK,EAAE,EAAIsiB,EAAY,IAAItiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC5E,CAEA,SAAS,oBAAoB,EAAG,EAAQ,EAAG,CACzC,OAAO,eAAe2K,EAAG4W,EAAiBne,EAAQ/D,CAAC,CACrD,CAEA,SAAS,gBAAgB,EAAG,EAAQ,EAAG,CACrC,OAAO,eAAesL,EAAG6W,EAAape,EAAQ/D,CAAC,CACjD,CAEA,SAAS,gBAAgB,EAAG,EAAQ,EAAG,CACrC,OAAO,eAAesL,EAAG8W,EAAare,EAAQ/D,CAAC,CACjD,CAEA,SAAS,mBAAmB,EAAG,CAC7B,OAAOuiB,EAAqBjX,EAAE,OAAO,EACvC,CAEA,SAAS,cAAc,EAAG,CACxB,OAAOgX,EAAgBhX,EAAE,OAAO,EAClC,CAEA,SAAS,iBAAiB,EAAG,CAC3B,OAAOmX,EAAmBnX,EAAE,SAAS,EACvC,CAEA,SAAS,YAAY,EAAG,CACtB,OAAOkX,EAAclX,EAAE,SAAS,EAClC,CAEA,SAAS,aAAa,EAAG,CACvB,OAAO+W,EAAe,EAAE/W,EAAE,SAAS,GAAK,IAC1C,CAEA,SAAS,cAAc,EAAG,CACxB,MAAO,GAAI,CAAC,EAAEA,EAAE,SAAS,EAAI,EAC/B,CAEA,SAAS,sBAAsB,EAAG,CAChC,OAAOiX,EAAqBjX,EAAE,UAAU,EAC1C,CAEA,SAAS,iBAAiB,EAAG,CAC3B,OAAOgX,EAAgBhX,EAAE,UAAU,EACrC,CAEA,SAAS,oBAAoB,EAAG,CAC9B,OAAOmX,EAAmBnX,EAAE,YAAY,EAC1C,CAEA,SAAS,eAAe,EAAG,CACzB,OAAOkX,EAAclX,EAAE,YAAY,EACrC,CAEA,SAAS,gBAAgB,EAAG,CAC1B,OAAO+W,EAAe,EAAE/W,EAAE,YAAY,GAAK,IAC7C,CAEA,SAAS,iBAAiB,EAAG,CAC3B,MAAO,GAAI,CAAC,EAAEA,EAAE,YAAY,EAAI,EAClC,CAEA,MAAO,CACL,OAAQ,SAAS,EAAW,CAC1B,IAAI1E,EAAI,UAAU,GAAa,GAAIwc,CAAO,EAE1C,MADA,GAAE,SAAW,UAAW,CAAE,OAAO3G,CAAW,EACrC7V,CACT,EACA,MAAO,SAAS,EAAW,CACzB,IAAI8L,EAAI,SAAS,GAAa,GAAI,EAAK,EAEvC,MADA,GAAE,SAAW,UAAW,CAAE,OAAO+J,CAAW,EACrC/J,CACT,EACA,UAAW,SAAS,EAAW,CAC7B,IAAI9L,EAAI,UAAU,GAAa,GAAI8d,CAAU,EAE7C,MADA,GAAE,SAAW,UAAW,CAAE,OAAOjI,CAAW,EACrC7V,CACT,EACA,SAAU,SAAS,EAAW,CAC5B,IAAI8L,EAAI,SAAS,GAAa,GAAI,EAAI,EAEtC,MADA,GAAE,SAAW,UAAW,CAAE,OAAO+J,CAAW,EACrC/J,CACT,CACF,CACF,CAEA,IAAImS,GAAO,CAAC,IAAK,GAAIE,EAAK,IAAK,EAAK,GAAG,EACnCC,EAAW,UACXC,GAAY,KACZC,GAAY,sBAEhB,SAAS,IAAI,EAAO,EAAM,EAAO,CAC/B,IAAI/G,EAAOlc,EAAQ,EAAI,IAAM,GACzB8B,GAAUoa,EAAO,CAAClc,EAAQA,GAAS,GACnCwR,EAAS1P,EAAO,OACpB,OAAOoa,GAAQ1K,EAASO,EAAY,MAAMA,EAAQP,EAAS,CAAC,CAAC,CAAC,KAAKwK,CAAI,EAAIla,EAASA,EACtF,CAEA,SAAS,QAAQ,EAAG,CAClB,OAAOsF,EAAE,QAAQ6b,GAAW,MAAM,CACpC,CAEA,SAAS,SAAS,EAAO,CACvB,OAAW,OAAO,OAASjhB,EAAM,IAAI,OAAO,CAAC,CAAC,KAAK,GAAG,EAAI,IAAK,GAAG,CACpE,CAEA,SAAS,aAAa,EAAO,CAC3B,OAAO,IAAI,IAAIA,EAAM,KAAK,EAAM,IAAM,CAACzE,EAAK,YAAY,EAAGQ,CAAC,CAAC,CAAC,CAChE,CAEA,SAAS,yBAAyB,EAAG,EAAQ,EAAG,CAC9C,IAAIW,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,yBAAyB,EAAG,EAAQ,EAAG,CAC9C,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,sBAAsB,EAAG,EAAQ,EAAG,CAC3C,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,mBAAmB,EAAG,EAAQ,EAAG,CACxC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,sBAAsB,EAAG,EAAQ,EAAG,CAC3C,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,cAAc,EAAG,EAAQ,EAAG,CACnC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,UAAU,EAAG,EAAQ,EAAG,CAC/B,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,IAAM,CAACA,EAAE,GAAK,GAAK,KAAO,KAAOX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC3E,CAEA,SAAS,UAAU,EAAG,EAAQ,EAAG,CAC/B,IAAIA,EAAI,+BAA+B,KAAKoD,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAClE,OAAOW,GAAK,EAAE,EAAIA,EAAE,GAAK,EAAI,EAAEA,EAAE,IAAMA,EAAE,IAAM,OAAQX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC5E,CAEA,SAAS,aAAa,EAAG,EAAQ,EAAG,CAClC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAIA,EAAE,GAAK,EAAI,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EACrD,CAEA,SAAS,iBAAiB,EAAG,EAAQ,EAAG,CACtC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAIA,EAAE,GAAK,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EACjD,CAEA,SAAS,gBAAgB,EAAG,EAAQ,EAAG,CACrC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,eAAe,EAAG,EAAQ,EAAG,CACpC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,EAAG,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EACvD,CAEA,SAAS,YAAY,EAAG,EAAQ,EAAG,CACjC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,aAAa,EAAG,EAAQ,EAAG,CAClC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,aAAa,EAAG,EAAQ,EAAG,CAClC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,kBAAkB,EAAG,EAAQ,EAAG,CACvC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,kBAAkB,EAAG,EAAQ,EAAG,CACvC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC5C,OAAOW,GAAK,EAAE,EAAI,KAAK,MAAMA,EAAE,GAAK,GAAI,EAAGX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAChE,CAEA,SAAS,oBAAoB,EAAG,EAAQ,EAAG,CACzC,IAAIA,EAAIskB,GAAU,KAAKlhB,EAAO,MAAM/D,EAAGA,EAAI,CAAC,CAAC,EAC7C,OAAOW,EAAIX,EAAIW,EAAE,EAAE,CAAC,OAAS,EAC/B,CAEA,SAAS,mBAAmB,EAAG,EAAQ,EAAG,CACxC,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,CAAC,CAAC,EACrC,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,0BAA0B,EAAG,EAAQ,EAAG,CAC/C,IAAIA,EAAIqkB,EAAS,KAAKjhB,EAAO,MAAM/D,CAAC,CAAC,EACrC,OAAOW,GAAK,EAAE,EAAI,CAACA,EAAE,GAAIX,EAAIW,EAAE,EAAE,CAAC,QAAU,EAC9C,CAEA,SAAS,iBAAiB,EAAG,EAAG,CAC9B,OAAO,IAAI2K,EAAE,QAAQ,EAAGoH,EAAG,CAAC,CAC9B,CAEA,SAAS,aAAa,EAAG,EAAG,CAC1B,OAAO,IAAIpH,EAAE,SAAS,EAAGoH,EAAG,CAAC,CAC/B,CAEA,SAAS,aAAa,EAAG,EAAG,CAC1B,OAAO,IAAIpH,EAAE,SAAS,EAAI,IAAM,GAAIoH,EAAG,CAAC,CAC1C,CAEA,SAAS,gBAAgB,EAAG,EAAG,CAC7B,OAAO,IAAI,EAAIyN,GAAQ,MAAMmB,EAAShW,CAAC,EAAGA,CAAC,EAAGoH,EAAG,CAAC,CACpD,CAEA,SAAS,mBAAmB,EAAG,EAAG,CAChC,OAAO,IAAIpH,EAAE,gBAAgB,EAAGoH,EAAG,CAAC,CACtC,CAEA,SAAS,mBAAmB,EAAG,EAAG,CAChC,OAAO,mBAAmBpH,EAAGoH,CAAC,EAAI,KACpC,CAEA,SAAS,kBAAkB,EAAG,EAAG,CAC/B,OAAO,IAAIpH,EAAE,SAAS,EAAI,EAAGoH,EAAG,CAAC,CACnC,CAEA,SAAS,cAAc,EAAG,EAAG,CAC3B,OAAO,IAAIpH,EAAE,WAAW,EAAGoH,EAAG,CAAC,CACjC,CAEA,SAAS,cAAc,EAAG,EAAG,CAC3B,OAAO,IAAIpH,EAAE,WAAW,EAAGoH,EAAG,CAAC,CACjC,CAEA,SAAS,0BAA0B,EAAG,CACpC,IAAIiP,EAAMrW,EAAE,OAAO,EACnB,OAAOqW,IAAQ,EAAI,EAAIA,CACzB,CAEA,SAAS,uBAAuB,EAAG,EAAG,CACpC,OAAO,IAAIrB,GAAW,MAAMgB,EAAShW,CAAC,EAAI,EAAGA,CAAC,EAAGoH,EAAG,CAAC,CACvD,CAEA,SAAS,KAAK,EAAG,CACf,IAAIiP,EAAMrW,EAAE,OAAO,EACnB,OAAQqW,GAAO,GAAKA,IAAQ,EAAKjB,GAAapV,CAAC,EAAIoV,GAAa,KAAKpV,CAAC,CACxE,CAEA,SAAS,oBAAoB,EAAG,EAAG,CAEjC,MADA,GAAI,KAAKA,CAAC,EACH,IAAIoV,GAAa,MAAMY,EAAShW,CAAC,EAAGA,CAAC,GAAKgW,EAAShW,CAAC,CAAC,CAAC,OAAO,IAAM,GAAIoH,EAAG,CAAC,CACpF,CAEA,SAAS,0BAA0B,EAAG,CACpC,OAAOpH,EAAE,OAAO,CAClB,CAEA,SAAS,uBAAuB,EAAG,EAAG,CACpC,OAAO,IAAIiV,GAAW,MAAMe,EAAShW,CAAC,EAAI,EAAGA,CAAC,EAAGoH,EAAG,CAAC,CACvD,CAEA,SAAS,WAAW,EAAG,EAAG,CACxB,OAAO,IAAIpH,EAAE,YAAY,EAAI,IAAKoH,EAAG,CAAC,CACxC,CAEA,SAAS,cAAc,EAAG,EAAG,CAE3B,MADA,GAAI,KAAKpH,CAAC,EACH,IAAIA,EAAE,YAAY,EAAI,IAAKoH,EAAG,CAAC,CACxC,CAEA,SAAS,eAAe,EAAG,EAAG,CAC5B,OAAO,IAAIpH,EAAE,YAAY,EAAI,IAAOoH,EAAG,CAAC,CAC1C,CAEA,SAAS,kBAAkB,EAAG,EAAG,CAC/B,IAAIiP,EAAMrW,EAAE,OAAO,EAEnB,MADA,GAAKqW,GAAO,GAAKA,IAAQ,EAAKjB,GAAapV,CAAC,EAAIoV,GAAa,KAAKpV,CAAC,EAC5D,IAAIA,EAAE,YAAY,EAAI,IAAOoH,EAAG,CAAC,CAC1C,CAEA,SAAS,WAAW,EAAG,CACrB,IAAItI,EAAIkB,EAAE,kBAAkB,EAC5B,OAAQlB,EAAI,EAAI,KAAO,GAAK,GAAI,MAC1B,IAAIA,EAAI,GAAK,EAAG,IAAK,CAAC,EACtB,IAAIA,EAAI,GAAI,IAAK,CAAC,CAC1B,CAEA,SAAS,oBAAoB,EAAG,EAAG,CACjC,OAAO,IAAIkB,EAAE,WAAW,EAAGoH,EAAG,CAAC,CACjC,CAEA,SAAS,gBAAgB,EAAG,EAAG,CAC7B,OAAO,IAAIpH,EAAE,YAAY,EAAGoH,EAAG,CAAC,CAClC,CAEA,SAAS,gBAAgB,EAAG,EAAG,CAC7B,OAAO,IAAIpH,EAAE,YAAY,EAAI,IAAM,GAAIoH,EAAG,CAAC,CAC7C,CAEA,SAAS,mBAAmB,EAAG,EAAG,CAChC,OAAO,IAAI,EAAI0N,GAAO,MAAMmB,EAAQjW,CAAC,EAAGA,CAAC,EAAGoH,EAAG,CAAC,CAClD,CAEA,SAAS,sBAAsB,EAAG,EAAG,CACnC,OAAO,IAAIpH,EAAE,mBAAmB,EAAGoH,EAAG,CAAC,CACzC,CAEA,SAAS,sBAAsB,EAAG,EAAG,CACnC,OAAO,sBAAsBpH,EAAGoH,CAAC,EAAI,KACvC,CAEA,SAAS,qBAAqB,EAAG,EAAG,CAClC,OAAO,IAAIpH,EAAE,YAAY,EAAI,EAAGoH,EAAG,CAAC,CACtC,CAEA,SAAS,iBAAiB,EAAG,EAAG,CAC9B,OAAO,IAAIpH,EAAE,cAAc,EAAGoH,EAAG,CAAC,CACpC,CAEA,SAAS,iBAAiB,EAAG,EAAG,CAC9B,OAAO,IAAIpH,EAAE,cAAc,EAAGoH,EAAG,CAAC,CACpC,CAEA,SAAS,6BAA6B,EAAG,CACvC,IAAIyS,EAAM7Z,EAAE,UAAU,EACtB,OAAO6Z,IAAQ,EAAI,EAAIA,CACzB,CAEA,SAAS,0BAA0B,EAAG,EAAG,CACvC,OAAO,IAAItE,GAAU,MAAMU,EAAQjW,CAAC,EAAI,EAAGA,CAAC,EAAGoH,EAAG,CAAC,CACrD,CAEA,SAAS,QAAQ,EAAG,CAClB,IAAIiP,EAAMrW,EAAE,UAAU,EACtB,OAAQqW,GAAO,GAAKA,IAAQ,EAAKV,GAAY3V,CAAC,EAAI2V,GAAY,KAAK3V,CAAC,CACtE,CAEA,SAAS,uBAAuB,EAAG,EAAG,CAEpC,MADA,GAAI,QAAQA,CAAC,EACN,IAAI2V,GAAY,MAAMM,EAAQjW,CAAC,EAAGA,CAAC,GAAKiW,EAAQjW,CAAC,CAAC,CAAC,UAAU,IAAM,GAAIoH,EAAG,CAAC,CACpF,CAEA,SAAS,6BAA6B,EAAG,CACvC,OAAOpH,EAAE,UAAU,CACrB,CAEA,SAAS,0BAA0B,EAAG,EAAG,CACvC,OAAO,IAAIwV,GAAU,MAAMS,EAAQjW,CAAC,EAAI,EAAGA,CAAC,EAAGoH,EAAG,CAAC,CACrD,CAEA,SAAS,cAAc,EAAG,EAAG,CAC3B,OAAO,IAAIpH,EAAE,eAAe,EAAI,IAAKoH,EAAG,CAAC,CAC3C,CAEA,SAAS,iBAAiB,EAAG,EAAG,CAE9B,MADA,GAAI,QAAQpH,CAAC,EACN,IAAIA,EAAE,eAAe,EAAI,IAAKoH,EAAG,CAAC,CAC3C,CAEA,SAAS,kBAAkB,EAAG,EAAG,CAC/B,OAAO,IAAIpH,EAAE,eAAe,EAAI,IAAOoH,EAAG,CAAC,CAC7C,CAEA,SAAS,qBAAqB,EAAG,EAAG,CAClC,IAAIiP,EAAMrW,EAAE,UAAU,EAEtB,MADA,GAAKqW,GAAO,GAAKA,IAAQ,EAAKV,GAAY3V,CAAC,EAAI2V,GAAY,KAAK3V,CAAC,EAC1D,IAAIA,EAAE,eAAe,EAAI,IAAOoH,EAAG,CAAC,CAC7C,CAEA,SAAS,eAAgB,CACvB,MAAO,OACT,CAEA,SAAS,sBAAuB,CAC9B,MAAO,GACT,CAEA,SAAS,oBAAoB,EAAG,CAC9B,MAAO,CAACpH,CACV,CAEA,SAAS,2BAA2B,EAAG,CACrC,OAAO,KAAK,MAAOA,EAAI,GAAI,CAC7B,CCtrBA,IAAIoS,GACO0H,GACAC,GACAC,GACAC,GAEX,gBAAc,CACZ,SAAU,SACV,KAAM,aACN,KAAM,eACN,QAAS,CAAC,KAAM,IAAI,EACpB,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,UAAU,EACnF,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC3D,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAU,EACjI,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAClG,CAAC,EAED,SAAwBt0B,gBAAc,EAAY,CAMhD,MALA,IAAS,aAAa+W,CAAU,EAChC,GAAa0V,GAAO,OACpB,GAAYA,GAAO,MACnB,GAAYA,GAAO,UACnB,GAAWA,GAAO,SACXA,EACT,C,wCCxBA,IAAW8H,GAAe,wBAE1B,SAAS,gBAAgB,EAAM,CAC7B,OAAOlL,EAAK,YAAY,CAC1B,CAEA,IAAImL,GAAY,KAAK,UAAU,YACzB,gBACAH,GAAUE,EAAY,ECP5B,SAAS,eAAe,EAAQ,CAC9B,IAAIlL,EAAO,IAAI,KAAKvW,CAAM,EAC1B,OAAO,MAAMuW,CAAI,EAAI,KAAOA,CAC9B,CAEA,IAAIoL,GAAW,CAAC,IAAI,KAAK,0BAA0B,EAC7C,eACAH,GAASC,EAAY,ECR3B,SAAS,YAAY,EAAkB,EAAkB,CACrDG,EAAU,QAAQ,GAAY,CAC1B,OAAO,oBAAoBC,CAAQ,CAAC,CAAC,QAAQ,GAAQ,CACjD,GAAIpmB,IAAS,cAAe,CACxB,IAAMqmB,EAAa,OAAO,yBAAyBD,EAAUpmB,CAAI,EACjE,OAAO,eAAesmB,EAAatmB,EAAMqmB,CAAU,CACvD,CACJ,CAAC,CACL,CAAC,CACL,CAEA,IAAa,MAAb,KAAmB,CACf,OAAO,OACP,OAEA,aAAc,CACV,KAAK,OAAS,OAAO,eAAe,IAAI,CAAC,CAAC,MAC9C,CAIA,MAAM,EAA2B,CAG7B,OAFK,UAAU,QACf,KAAK,OAASngB,EACP,MAFuB,KAAK,MAGvC,CAEA,SAAU,CACN,OAAO,KAAK,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,CACtC,CAEA,WAAuB,CACnB,OAAA,EAAOxU,EAAAA,aAAAA,CAAa,KAAK,QAAQ,CAAC,CACtC,CAEA,WAAW,EAAQ,CACf,YAAY,KAAM,CAACwkB,CAAM,CAAC,CAC9B,CAEA,MAAM,EAAY,CACd,KAAK,WAAWsQ,EAAW,SAAS,EAEhCA,EAAW,UAAU,eAAe,QAAQ,IAC5C,KAAK,QAAU,IAAMA,EAAW,UAAU,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,EAExE,CAEA,eAAqC,EAAa,EAA0B,CACxE,GAAI,KAAKC,KAAc,IAAA,GACnB,MAAU,MAAM,YAAYA,EAAS,SAAS,EAAE,iBAAiB,EAErE,IAAMC,EAAa,KAAKD,GAMxB,MALA,MAAKA,GAAY,UAAY,CAGzB,MAFA,WAAU,UAAU,QAAUC,EAC9B,UAAU,SACFC,EAAkB,MAAM,KAAM,SAAS,CACnD,EACO,IACX,CAEA,OAAO,EAAoB,CACvB,OAAQ,GAAKhhB,EAAA,CAAI,QAAQ,aAAe,GAAM,CAC1C,IAAMa,EAAIqD,EAAE,WAAW,CAAC,EAGxB,OAFIrD,IAAM,GAAW,IACjBA,GAAK,IAAMA,GAAK,GAAW,IAAMqD,EAAE,YAAY,EAC5C,MAAQrD,EAAE,SAAS,EAAE,CAChC,CAAC,CACL,CACJ,EACA,MAAM,UAAU,OAAS,eClEzB,SAAS,UAAU,EAAG,EAAG,CACrB,GAAIzC,IAAMC,EAAG,MAAO,GAEpB,IAAM4iB,EAAO,MAAM,QAAQ7iB,CAAC,EACtB8iB,EAAO,MAAM,QAAQ7iB,CAAC,EACxBxD,EAEJ,GAAIomB,GAAQC,EAAM,CACd,GAAI9iB,EAAE,SAAWC,EAAE,OAAQ,MAAO,GAClC,IAAK,EAAI,EAAGxD,EAAIuD,EAAE,OAAQ,IACtB,GAAI,CAAC,UAAUA,EAAEvD,GAAIwD,EAAExD,EAAE,EAAG,MAAO,GACvC,MAAO,EACX,CAEA,GAAIomB,GAAQC,EAAM,MAAO,GAEzB,GAAI9iB,GAAKC,GAAK,OAAOD,GAAM,UAAY,OAAOC,GAAM,SAAU,CAC1D,IAAM+R,EAAO,OAAO,KAAKhS,CAAC,EAC1B,GAAIgS,EAAK,SAAW,OAAO,KAAK/R,CAAC,CAAC,CAAC,OAAQ,MAAO,GAElD,IAAM8iB,EAAQ/iB,aAAa,KACrBgjB,EAAQ/iB,aAAa,KAC3B,GAAI8iB,GAASC,EAAO,OAAOhjB,EAAE,QAAQ,IAAMC,EAAE,QAAQ,EACrD,GAAI8iB,GAASC,EAAO,MAAO,GAE3B,IAAMC,EAAUjjB,aAAa,OACvBkjB,EAAUjjB,aAAa,OAC7B,GAAIgjB,GAAWC,EAAS,OAAOljB,EAAE,SAAS,IAAMC,EAAE,SAAS,EAC3D,GAAIgjB,GAAWC,EAAS,MAAO,GAE/B,IAAK,EAAI,EAAGzmB,EAAIuV,EAAK,OAAQ,IACzB,GAAI,CAAC,OAAO,UAAU,eAAe,KAAK/R,EAAG+R,EAAKvV,EAAE,EAAG,MAAO,GAElE,IAAK,EAAI,EAAGA,EAAIuV,EAAK,OAAQ,IACzB,GAAI,CAAC,UAAUhS,EAAEgS,EAAKvV,IAAKwD,EAAE+R,EAAKvV,GAAG,EAAG,MAAO,GAEnD,MAAO,EACX,CAEA,MAAO,EACX,CAEA,IAAM0mB,EAAU,UACVC,GAAa,aACbC,GAAU,IACVC,EAAe,UACfC,GAAa,aAEnB,SAAS,OAAO,EAAK,CACjB,OAAO/kB,EAAI,QAAQ2kB,CAAO,IAAM,CACpC,CAEA,SAAS,UAAU,EAAK,EAAK,CACzB,OAAOK,EAAIJ,GAAa5kB,IAAQglB,EAAIJ,GAAaD,EAAU3kB,EAC/D,CAqCA,IAAa,KAAb,KAAkB,CACd,GACA,KACA,iBACA,aACA,YACA,IACA,IACA,cAEA,YAAY,EAAI,EAAc,EAAM,EAAa,EAAK,EAAmB,CAUrE,OATA,IAAa,CAAC,EACd,KAAK,GAAKoD,EACV,KAAK,KAAOJ,EACZ,KAAK,iBAAmBiiB,EACxB,KAAK,aAAeC,EAAI,UAAYD,IAAiB,KAAO,IAAA,GAAYA,EACxE,KAAK,YAAcE,EACnB,KAAK,IAAM3N,EACX,KAAK,IAAM0N,EAEHliB,EAAR,CACI,IAAK,MACD,KAAK,cAAgB,GAAKW,EAC1B,MACJ,IAAK,MACD,KAAK,cAAgB,SAAU,EAAG,CAC9B,GAAK,OAAe,aAAc,CAC9B,IAAMb,EAAU,OAAO0U,GAAQ,WAAaA,EAAI,KAAK,IAAI,EAAIA,EACzD1U,GAAWA,EAAQ,QAAUA,EAAQ,QAAQa,CAAC,EAAI,GAClD,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAMP,EAAK,OAASO,EAAI,aAAe,KAAK,UAAUb,CAAO,CAAC,CAE7H,CACA,OAAOa,CACX,EACA,MACJ,IAAK,aACD,KAAK,cAAgB,SAAU,EAAG,CAC9B,GAAK,OAAe,cAAgBA,GAAKA,IAAM,MAAO,CAClD,IACM4F,EAAI,SAAS,cAAc,KAAK,EACtC,EAAE,MAAM,MAAQ,MAChB,EAAE,MAAM,MAAQ5F,GAEZ4F,EAAE,MAAM,QAAU,OAAUA,EAAE,MAAM,QAAU,KAC9C,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAMnG,EAAK,OAASO,EAAI,aAAeX,CAAI,CAE1G,CACA,OAAOW,CACX,EACA,MACJ,IAAK,UACD,KAAK,cAAgB,SAAU,EAAG,CAC9B,OAAO,OAAQA,GAAO,UAAY,CAAC,QAAS,MAAO,GAAG,CAAC,CAAC,QAAQA,EAAE,YAAY,CAAC,GAAK,EAAI,GAAQ,EAAQA,CAC5G,EACA,MACJ,IAAK,SACD,KAAK,cAAgB,SAAU,EAAG,CAC9B,OAAO,OAAOA,CAAC,CACnB,EACA,MACJ,IAAK,SACD,KAAK,cAAgB,SAAU,EAAG,CAC9B,OAAO,OAAOA,CAAC,CACnB,EACA,MACJ,IAAK,QACD,KAAK,cAAgB,SAAU,EAAG,CAI9B,OAHMA,aAAa,OACf,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAMP,EAAK,OAASO,EAAI,aAAeX,CAAI,EAE/FW,CACX,EACA,MACJ,IAAK,SACD,KAAK,cAAgB,SAAU,EAAG,CAI9B,OAHMA,aAAa,QACf,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAMP,EAAK,OAASO,EAAI,aAAeX,CAAI,EAE/FW,CACX,EACA,MACJ,IAAK,SACD,KAAK,cAAgB,SAAU,EAAG,CAI9B,OAHI,CAACA,EAAE,QAAUA,EAAE,OAAO,QAAQ,oBAAoB,EAAI,IACtD,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAMP,EAAK,OAASO,EAAI,aAAeX,CAAI,EAE/FW,CACX,EACA,MACJ,IAAK,cACD,KAAK,cAAgB,SAAU,EAAG,CAI9B,OAHIA,EAAE,KAAK,SAAU,EAAK,CAAE,MAAQ,CAACqT,EAAI,QAAUA,EAAI,OAAO,QAAQ,eAAe,EAAI,CAAI,CAAC,GAC1F,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAM5T,EAAK,OAASO,EAAI,aAAeX,CAAI,EAE/FW,CACX,EACA,MACJ,IAAK,gBACD,KAAK,cAAgB,SAAU,EAAG,CAI9B,OAHIA,EAAE,KAAK,SAAU,EAAK,CAAE,MAAO,CAACqT,EAAI,mBAAqB,CAAC,GAC1D,QAAQ,MAAM,sBAAwB,KAAK,QAAQ,EAAI,IAAM5T,EAAK,OAASO,EAAI,aAAeX,CAAI,EAE/FW,CACX,EACA,MACJ,QACI,KAAK,cAAgB,SAAU,EAAG,CAI9B,OAHK,OAAe,cAChB,QAAQ,MAAM,gCAAkC,KAAK,QAAQ,EAAI,IAAMP,EAAK,OAASO,EAAI,aAAeX,CAAI,EAEzGW,CACX,CAER,CACJ,CACJ,EAEM,UAAN,KAAgB,CACZ,GACA,KACA,MACA,OACA,aACA,IAEA,YAAY,EAAY,EAAO,EAAQ,EAAc,EAAmB,CACpE,KAAK,GAAKP,EACV,KAAK,KAAO,QACZ,KAAK,MAAQgiB,EACb,KAAK,OAASC,EACd,KAAK,aAAeJ,EACpB,KAAK,IAAMC,GAAO,CAAC,CACvB,CACJ,EAEA,SAAS,YAAY,EAA2C,CAC5D,OAAOI,EAAK,OAAS,OACzB,CAMA,IAAIC,GAAY,EACHC,GAAb,MAAa,oBAAoB,KAAM,CACnC,IACA,aACA,UACA,qBAAuC,CAAC,EAExC,aAAc,CACV,MAAM,EACN,KAAK,wBAAwB,EAE7B,KAAK,IAAM,OAAS,EAAED,GACtB,KAAK,aAAe,EACpB,KAAK,UAAY,CAAC,EAElB,KAAK,oBAAoB,EAAI,CAAC,CAAC,QAAQ,SAAU,EAAM,CACnD,OAAQD,EAAK,KAAb,CACI,IAAK,QACL,IAAK,cACL,IAAK,gBACD,KAAKA,EAAK,GAAK,SAAS,CAAC,CAEjC,CACJ,EAAG,IAAI,CACX,CAIA,GAAG,EAAmB,CAGlB,OAFK,UAAU,QACf,KAAK,IAAM3hB,EACJ,MAFuB,KAAK,GAGvC,CAGA,wBAAwB,EAAiB,GAAO,EAAgB,GAAa,CACzE,KAAK,qBAAuB,CAAC,EAC7B,IAAM8hB,EAAa,CAAC,EAChBC,EAAY,OAAO,eAAe,IAAI,EAC1C,KAAOA,GACCA,IAAc,YAAY,WAG9BD,EAAW,QAAQC,CAAS,EAC5B,EAAY,OAAO,eAAeA,CAAS,EAE/C,IAAKA,KAAaD,EACd,IAAK,IAAMzlB,KAAO0lB,EACVA,EAAU,eAAe1lB,CAAG,GACxB,OAAOA,CAAG,GACV,KAAK,qBAAqB,KAAK,KAAKA,EAAI,CAK5D,CAEA,sBAAsB,EAAwB,CAC1C,IAAI2lB,EAAO,KACX,KAAOL,aAAgB,WACnB,EAAOK,EAAKL,EAAK,OACjB,EAAOK,EAAK,kBAAkBL,EAAK,MAAM,EAE7C,OAAOA,CACX,CAEA,oBAAoB,EAAiB,GAAO,EAAgB,GAAe,CACvE,OAAO,KAAK,qBAAqB,OAAO,GAAQM,GAAkB,CAAC,UAAU,KAAMN,EAAK,EAAE,CAAC,CAAC,CAAC,IAAI,GAAQ,CACrG,GAAIO,GAAiB,YAAYP,CAAI,EAAG,CACpC,IAAMQ,EAAWR,EACbK,EAAO,KACX,KAAOL,EAAK,OAAS,SACjB,EAAOK,EAAML,EAAa,OAC1B,EAAOK,EAAK,kBAAmBL,EAAa,MAAM,EAElDA,EAAK,KAAOQ,EAAS,KACrB,EAAO,KAAK,MAAM,KAAK,UAAUR,CAAI,CAAC,EACtC,EAAK,GAAKQ,EAAS,GAE3B,CACA,OAAOR,CACX,CAAC,CACL,CAEA,aAAa,EAAsC,CAC/CS,EAAQ,IAAI,EACZ,KAAK,oBAAoB,GAAO,EAAI,CAAC,CAAC,QAAQ,GAAe,CACzD,OAAQC,EAAY,KAApB,CACI,IAAK,SACD,IAAMC,EAAsB,KAAKD,EAAY,GAAG,CAAC,EAC7CC,GACAA,EAAO,aAAaF,CAAO,EAE/B,MACJ,IAAK,cACL,IAAK,gBACD,IAAMG,EAAyB,KAAKF,EAAY,GAAG,CAAC,EAChDE,GACAA,EAAQ,QAAS,GAAW,CACxBD,EAAO,aAAaF,CAAO,CAC/B,CAAC,CAGb,CACJ,CAAC,CACL,CAEA,eAAe,EAAqD,EAAwD,CACxH,IAAMjlB,EAAU,KAChB,KAAK,oBAAoB,GAAO,EAAI,CAAC,CAAC,QAAQ,SAAU,EAAa,EAC7D,OAAQqlB,GAAY,YAAcA,EAAOrlB,EAASklB,CAAW,IAC7DD,EAAQjlB,EAASklB,CAAW,CAEpC,CAAC,CACL,CAEA,WAA4C,CACxC,IAAMI,EAAS,CACX,QAAS,KAAK,QAAQ,CAC1B,EACA,IAAK,IAAMC,KAAQ,KAAK,oBAAoB,EAAG,CAC3C,GAAIA,EAAK,KAAO,SAAU,SAC1B,IAAMC,EAAO,KAAaD,EAAK,GAAG,CAAC,EACnC,OAAQA,EAAK,KAAb,CACI,IAAK,gBACI,KAAa,GAAGA,EAAK,GAAG,WAAW,CAAC,EAEzC,IAAME,EAAgBD,EAAI,OAAO,GAAQX,EAAK,MAAM,CAAC,CAAC,CAAC,IAAI,GAAQA,EAAK,UAAU,CAAC,CAAC,CAAC,OAAO,GAAQA,IAAS,IAAA,EAAS,EAClHY,IACA,EAAOF,EAAK,IAAME,GAEtB,MACJ,IAAK,SACD,EAAOF,EAAK,IAAMC,GAAK,UAAU,EACjC,MACJ,QACS,KAAa,GAAGD,EAAK,GAAG,WAAW,CAAC,IAC/BC,aAAe,SACjB,EAAOD,EAAK,IAAMC,GAGlC,CACJ,CACA,OAAOF,CACX,CAEA,YAAY,EAA8C,CACtD,GAAI,CAACI,EAAO,OAAO,KACnB,IAAK,IAAMH,KAAQ,KAAK,oBAAoB,EAAG,CAC3C,IAAMC,EAAME,EAAMH,EAAK,IACvB,GAAIC,IAAQ,IAAA,GACR,OAAQD,EAAK,KAAb,CACI,IAAK,gBACGA,EAAK,KAAOA,EAAK,IAAI,YACrB,KAAK,GAAGA,EAAK,KAAK,CAACC,EAAI,IAAI,GAAQ,IAAID,EAAK,IAAI,WAAW,CAAC,CAAC,YAAYV,CAAI,CAAC,CAAC,EAEnF,MACJ,IAAK,SACD,IAAMc,EAAU,KAAK,GAAGJ,EAAK,KAAK,CAAC,EAC/BI,EAAQ,QAAQ,IAAMH,EAAI,QAC1BG,EAAQ,YAAYH,CAAG,EAEvB,QAAQ,KAAK,6CAA6C,EAE9D,MACJ,QACI,KAAK,GAAGD,EAAK,KAAK,CAACC,CAAG,CAC9B,CAER,CACA,OAAO,IACX,CAEA,kBAAkB,EAAI,CAClB,OAAO,KAAK3B,EAAUvhB,EAC1B,CAEA,mBAAoB,CAChB,OAAO,KAAK,oBAAoB,CAAC,CAAC,KAAK,SAAU,EAAM,CACnD,OAAO,KAAKijB,EAAK,GAAK,YAAY,CAAC,CACvC,EAAG,IAAI,CACX,CAEA,aAAa,EAAa,EAAgB,CACtC,GAAcK,GAAc,CAAC,EAAA,CAAG,IAAI,SAAU,EAAI,CAAE,OAAO/B,EAAUvhB,CAAI,CAAC,EAC1E,GAAiBujB,GAAiB,CAAC,EAAA,CAAG,IAAI,SAAU,EAAI,CAAE,OAAOhC,EAAUvhB,CAAI,CAAC,EAChF,IAAK,IAAMpD,KAAO,KACd,GAAI,OAAOA,CAAG,EAAG,CACb,IAAM4mB,EAAgB,CAACF,EAAW,QAAWA,EAAW,QAAUA,EAAW,QAAQ1mB,CAAG,GAAK,EACvF6mB,EAAcF,EAAc,QAAQ3mB,CAAG,GAAK,EAC9C4mB,GAAiB,CAACC,IAClB,KAAKjC,GAAa5kB,GAAO,GAEjC,CAER,CACA,OAAO,YAAsB,GAC7B,QAAQ,EAAY,EAAc,EAAqB,EAAsB,EAA0F,EAAmB,CAAC,EAAS,CAyBhM,GAHIoD,EAAG,QAAQ,GAAG,IAAM,IACpB,EAAKA,EAAG,MAAM,CAAC,GAEf,KAAKuhB,EAAUvhB,KAAQ,IAAA,IAAa,CAAC8hB,EAAI,SACzC,MAAU,MAAM9hB,EAAK,wBAAwB,EAEjD,IAAMkiB,EAAO,KAAKX,EAAUvhB,GAAM,IAAI,KAAKA,EAAI6hB,EAAcjiB,EAAMmiB,EAAa3N,EAAK0N,CAAG,EACpFI,EAAK,IAAI,WACT,KAAKV,GAAaxhB,GAAM,IAE5B,OAAO,eAAe,KAAMyhB,GAAUzhB,EAAI,CACtC,IAAI,EAAG,CACCO,IAAM,IAAA,IAECA,IAAM,IAAM2hB,EAAK,IAAI,SAD5B,EAAI,KAGG3hB,IAAM,OACb,EAAI2hB,EAAK,cAAc,KAAK,KAAM3hB,CAAC,GAEvC,KAAK,UAAUP,EAAIO,EAAG,KAAKmhB,EAAe1hB,EAAG,EACzCO,IAAM,KACN,OAAO,KAAKmhB,EAAe1hB,GAE3B,KAAK0hB,EAAe1hB,GAAMO,CAElC,EAEA,KAAM,CAEF,OADI,KAAKP,EAAK,YAAY,CAAC,GACpB,KAAK0hB,EAAe1hB,KAAQ,IAAA,GADE,KAAKA,EAAK,WAAW,CAAC,EACZ,KAAK0hB,EAAe1hB,EACvE,EACA,aAAc,EAClB,CAAC,EACG,KAAKA,KAEDJ,IAAS,gBACT,KAAKI,GAAM,SAAU,EAAI,CASrB,OARK,UAAU,QACf,KAAKyhB,GAAUzhB,GAAMO,EAAE,IAAI,IACnB,CAAC2hB,EAAK,IAAI,eAAiBA,EAAK,IAAI,YAAc,EAAEK,aAAgBL,EAAK,IAAI,cAC7E,EAAO,IAAIA,EAAK,IAAI,WAAW,CAAC,CAAC,YAAYK,CAAI,GAErDA,EAAK,MAAM,IAAI,EACRA,EACV,EACM,MARuB,KAAKd,GAAUzhB,EASjD,EAEA,KAAKA,GAAM,SAAU,EAAI,CAGrB,OAFK,UAAU,QACf,KAAKyhB,GAAUzhB,GAAMO,EACd,MAFuB,KAAKkhB,GAAUzhB,IAAO,KAAKA,EAAK,WAAW,CAAC,CAG9E,GAGR,KAAKA,EAAK,aAAe,UAAY,CACjC,OAAO8hB,GAAOA,EAAI,QAAU,CAAC,CAACA,EAAI,QAAQ,IAAI,EAAI,EACtD,EACA,KAAK9hB,EAAK,WAAa,UAAY,CAC/B,OAAO8hB,GAAOA,EAAI,OAAS,CAAC,CAACA,EAAI,OAAO,IAAI,EAAI,EACpD,EACA,KAAK9hB,EAAK,UAAY,UAAY,CAC9B,OAAO8hB,GAAOA,EAAI,SAAW,KAAK9hB,EAAK,YAAY,CAAC,GAAM8hB,EAAI,UAAY,CAAC,KAAK9hB,EAAK,UAAU,CAAC,GAAO8hB,EAAI,YAAc,CAAC,KAAK,MAAM,GAAM,CAAC,CAACA,EAAI,SAAS,IAAI,EAAI,EACtK,EACA,KAAK9hB,EAAK,aAAe,UAAY,CAIjC,OAHIJ,IAAS,gBACF,KAAK8hB,EAAe1hB,IAAQ,KAAK0hB,EAAe1hB,EAAG,CAAC,KAAK,GAAQuiB,EAAK,MAAM,CAAC,EAEjF,KAAKb,EAAe1hB,KAAQ,IAAA,EACvC,EACA,KAAKA,EAAK,WAAa,UAAY,CAG/B,OAFI,KAAK0hB,EAAe1hB,IAAO,OAAU,KAAK0hB,EAAe1hB,KAAQ,IAAM8hB,EAAI,WAAa,KACxF,KAAK9hB,EAAK,WAAW,CAAC,GAAK,OAAU,KAAKA,EAAK,WAAW,CAAC,IAAM,IAAM8hB,EAAI,WAAa,GAEhG,EACA,KAAK9hB,EAAK,YAAc,SAAU,EAAI,CAUlC,OATK,UAAU,QACXO,IAAM,KACN,EAAI,MAEJA,IAAM,KACN,OAAO,KAAKohB,GAAa3hB,GAEzB,KAAK2hB,GAAa3hB,GAAMO,EAErB,MATuB,KAAKohB,GAAa3hB,KAAQ,IAAA,GAAoCkiB,EAAK,aAA7B,KAAKP,GAAa3hB,EAU1F,EACA,KAAKA,EAAK,UAAY,UAAY,CAC9B,OAAQJ,EAAR,CACI,IAAK,SACG,KAAK8hB,EAAe1hB,IACpB,KAAK0hB,EAAe1hB,EAAG,CAAC,OAAO,IAAI,EAEvC,MACJ,IAAK,cACG,KAAK0hB,EAAe1hB,IACpB,KAAK0hB,EAAe1hB,EAAG,CAAC,QAAQ,SAAU,EAAQ,CAC9C6iB,EAAO,OAAO,IAAI,CACtB,CAAC,CAGb,CAEA,OAAQjjB,EAAR,CACI,IAAK,QACL,IAAK,cACL,IAAK,gBACD,KAAK+hB,GAAa3hB,GAAM,KAAKA,EAAK,WAAW,CAAC,CAAC,CAAC,IAAI,SAAU,EAAK,CAAE,OAAO4T,CAAK,CAAC,CAE1F,CAEA,OADA,OAAO,KAAK8N,EAAe1hB,GACpB,IACX,EACA,KAAKA,EAAK,YAAc,UAAY,CAKhC,OAJI,OAAOoU,GAAQ,YACA8N,EAAK,IAAI,SAAW,CAAC,IAAI,EAAI,CAAC,EAAA,CAC/B,OAAO9N,EAAI,MAAM,KAAM,SAAS,CAAC,EAE5CA,CACX,CACJ,CAEA,cAAc,EAAQ,EAAY,EAAI,CAClC,IAAK,IAAMxX,KAAO8mB,EAAW,UACzB,GAAI9mB,EAAI,QAAQ,QAAQ,IAAM,EAAG,CAC7B,IAAMgmB,EAAcc,EAAW,UAAU9mB,GACzC,KAAK,aAAahC,EAAS8mB,EAAekB,EAAY,GAAI5iB,EAAI4iB,EAAY,QAAUA,EAAY,EAAE,CACtG,CAER,CAEA,aAAa,EAAY,EAAO,EAAS,EAAe,CAEpD,GADA,IAAmB5iB,EACf,KAAKuhB,EAAUvhB,KAAQ,IAAA,GACvB,MAAU,MAAMA,EAAK,wBAAwB,EAEjD,KAAKuhB,EAAUvhB,GAAM,IAAI,UAAUA,EAAIgiB,EAAOC,EAAQJ,CAAY,EAClE,KAAK7hB,GAAM,SAAU,EAAI,CAOrB,OANK,UAAU,QACX6hB,IAAiB,IAAA,IAAathB,IAAMshB,EACpC,KAAKG,EAAM,CAACC,EAAS,SAAS,CAAC,EAE/B,KAAKD,EAAM,CAACC,EAAO,CAAC1hB,CAAC,EAElB,MANuBshB,IAAiB,IAAA,IAAa,KAAK7hB,EAAK,YAAY,CAAC,EAAI,KAAKgiB,EAAM,CAACC,EAAO,CAAC,EAAIJ,CAOnH,EACA,KAAK7hB,EAAK,aAAe,UAAY,CACjC,OAAO,KAAKgiB,EAAM,CAACC,EAAS,YAAY,CAAC,CAC7C,EACA,KAAKjiB,EAAK,aAAe,UAAY,CACjC,OAAO,KAAKgiB,EAAM,CAACC,EAAS,YAAY,CAAC,IAAMJ,IAAiB,IAAA,IAAa,KAAKG,EAAM,CAACC,EAAO,CAAC,IAAMJ,EAC3G,EACA,KAAK7hB,EAAK,WAAa,UAAY,CAC/B,OAAO,KAAKgiB,EAAM,CAACC,EAAS,UAAU,CAAC,CAC3C,EACA,KAAKjiB,EAAK,YAAc,SAAU,EAAI,CAGlC,OAFK,UAAU,QACf,KAAKgiB,EAAM,CAACC,EAAS,WAAW,CAAC1hB,CAAC,EAC3B,MAFuB,KAAKyhB,EAAM,CAACC,EAAS,WAAW,CAAC,CAGnE,EACA,KAAKjiB,EAAK,UAAY,UAAY,CAE9B,OADA,KAAKgiB,EAAM,CAACC,EAAS,SAAS,CAAC,EACxB,IACX,EACA,KAAKjiB,EAAK,YAAc,UAAY,CAChC,OAAO,KAAKgiB,EAAM,CAACC,EAAS,WAAW,CAAC,CAC5C,CACJ,CAEA,gBAAgB,EAAgB,EAAsE,CAClG,IAAMC,EAAO,KAAK,kBAAkByB,CAAM,EAC1C,OAAQzB,EAAK,KAAb,CACI,IAAK,QAMG,OALA,KAAKA,EAAK,OACH,KAAKA,EAAK,MAAM,CAAC,gBAAgBA,EAAK,OAAQ,SAAU,EAAM,EAAQ,EAAQ,CACjF0B,EAAK1B,EAAK,GAAI2B,EAAQC,CAAM,CAChC,CAAC,EAEM,CACH,WAAc,CAAE,CACpB,EAER,QACI,IAAMC,EAAM,KAAK,eACjB,KAAK,UAAUA,GAAO,CAAE,WAAYJ,EAAQ,SAAUC,CAAK,EAC3D,IAAMlmB,EAAU,KAChB,MAAO,CACH,WAAc,CACV,OAAOA,EAAQ,UAAUqmB,EAC7B,CACJ,CACR,CACJ,CAEA,QAAQ,EAAmG,CACvG,IAAMA,EAAM,KAAK,eAEjB,MADA,MAAK,UAAUA,GAAO,CAAE,WAAY,IAAA,GAAW,SAAUH,CAAK,EACvD,CACH,WAAc,CACV,OAAO,KAAK,UAAUG,EAC1B,CACJ,CACJ,CAEA,UAAU,EAAK,EAAQ,EAAQ,EAAS,CAEpC,GADA,IAAmB,KACf,CAAC,UAAUF,EAAQC,CAAM,EACzB,IAAK,IAAMC,KAAO,KAAK,UAAW,CAC9B,IAAMC,EAAU,KAAK,UAAUD,IAC1BC,EAAQ,aAAe,IAAA,IAAaA,EAAQ,aAAepnB,IAAQonB,EAAQ,UAE5E,WAAW,SAAU,EAAU,CAC3BC,EAAS,SAASrnB,EAAKinB,EAAQC,EAAQvT,CAAM,CACjD,EAAG,EAAGyT,CAAO,CAErB,CAER,CAEA,WAAW,EAAO,CACd,GAAI,CAACE,EACD,OAEJ,IAAMC,EAAS,KAAK,OAAO,MAAM,GAAG,EACpC,IAAK,IAAMtpB,KAAKspB,EACZ,GAAID,EAAMC,EAAOtpB,IACb,IAAK,IAAMupB,KAAaF,EAAMC,EAAOtpB,IACjC,GAAIupB,IAAc,gBAAkBF,EAAMC,EAAOtpB,GAAG,CAACupB,aAAsB,OACvE,IAAK,IAAMC,KAASH,EAAMC,EAAOtpB,GAAG,CAACupB,GAC7B,KAAK,kBAAkBA,CAAS,CAAC,CAAC,MAClC,KAAK,kBAAkBA,CAAS,CAAC,CAAC,IAAI,KAAOF,EAAMC,EAAOtpB,GAAG,CAACupB,EAAU,CAACC,SAKjF,KAAK,kBAAkBD,CAAS,IAChC,KAAK,kBAAkBA,CAAS,CAAC,CAAC,aAAeF,EAAMC,EAAOtpB,GAAG,CAACupB,GAKtF,CAEA,YAAY,EAAoB,EAAmB,CAAC,EAAS,CAQzD,OAPA,KAAK,oBAAoB,EAAK,CAAC,CAAC,OAAO,GAAQE,EAAO,QAAQpC,EAAK,EAAE,EAAI,CAAC,CAAC,CAAC,QAAQ,GAAQ,CACpF,KAAKA,EAAK,GAAK,UAAU,CAAC,EAC1B/N,EAAM+N,EAAK,GAAG,CAAC,KAAKA,EAAK,GAAG,CAAC,CAAC,EAE9B/N,EAAM+N,EAAK,GAAK,SAAS,CAAC,CAElC,CAAC,EACM,IACX,CAEA,SAAiB,EAAc,CAC3B,GAAI,KAAKA,EAAK,GAAK,UAAU,CAAC,EAAG,CAC7B,IAAIplB,EAAQ,KAAKolB,EAAK,GAAG,CAAC,EAE1B,OADkB,KAAK,sBAAsBA,CACrC,CAAA,CAAU,KAAlB,CACI,IAAK,SACD,EAAQplB,EAAM,QAAQ,EACtB,MACJ,IAAK,cACL,IAAK,gBACD,GAAA,EAAQ9Q,EAAAA,QAAAA,CAAQ8Q,EAAM,IAAI,GAAK4B,EAAE,QAAQ,CAAC,CAAC,CAGnD,CACA,OAAO5B,CACX,CACA,MAAO,EACX,CAEA,aAAa,EAAuB,CAAC,EAAG,EAAO,CAAC,EAAW,CACvD,IAAMsmB,EAAgCmB,EAItC,OAHA,KAAK,oBAAoB,EAAK,CAAC,CAAC,OAAO,GAAQC,EAAW,SAAW,GAAKA,EAAW,QAAQtC,EAAK,EAAE,GAAK,CAAC,CAAC,CAAC,QAAQ,GAAQ,CACxH,EAAMA,EAAK,IAAM,KAAK,SAASA,CAAI,CACvC,CAAC,GACD,EAAOl2B,EAAAA,QAAAA,CAAQo3B,CAAK,CACxB,CAEA,QAAQ,EAAmB,CAAC,EAAG,EAAO,CAAC,EAAW,CAC9C,EAAS,CAAC,GAAGkB,EAAQ,SAAS,EAC9B,IAAMlB,EAAgCmB,EAItC,OAHA,KAAK,oBAAoB,EAAK,CAAC,CAAC,OAAO,GAAQD,EAAO,QAAQpC,EAAK,EAAE,EAAI,CAAC,CAAC,CAAC,QAAQ,GAAQ,CACxF,EAAMA,EAAK,IAAM,KAAK,SAASA,CAAI,CACvC,CAAC,GACD,EAAOl2B,EAAAA,QAAAA,CAAQo3B,CAAK,CACxB,CAGA,GAAG,EAAS,EAAM,EAAkB,GAAa,CAC7C,IAAM1lB,EAAU,KAchB,OAbA,KAAK,eAAe+mB,EAAS,SAAU,GAAG9jB,EAAa,CACnD,IAAM+jB,EAAW/jB,EAAKA,EAAK,OAAS,GAChCqiB,EACA2B,GAEAhkB,EADmB,KAAK,GAAOikB,GAAO,OAAOA,EAAI,iBAAoB,UACrE,CAAA,EAAO,gBAAgB,EACvB,CAAC,CAAC,CAAC,KAAK,KAAKjkB,EAAM+jB,CAAQ,GAE3B,EAASA,EAAS,MAAMhnB,EAASiD,CAAI,EAEzC,IAAMkkB,EAAUjB,EAAK,MAAMlmB,EAASiD,CAAI,EACxC,OAAOkkB,IAAY,IAAA,GAAsB7B,EAAV6B,CACnC,CAAC,EACM,IACX,CACJ,EACA,GAAY,UAAU,QAAU,sB,22BC1vBhC,SAAS,aAAa,EAAG,EAAG,EAAO,EAAK,EAAmB,CACvD,IAAMxN,EAAK,8EACL2N,EAAM,iBACNC,EAAM,iHACNC,EAAM,KACN,EAAI,SAAU,EAAG,CAAE,MAAO,CAACC,IAAsB,GAAKjhB,EAAA,CAAG,YAAY,GAAK,GAAKA,CAAG,EAElFtI,EAAI,EAAEmoB,EAAM3lB,EAAE2lB,GAAO3lB,CAAC,CAAC,CAAC,QAAQ4mB,EAAK,EAAE,GAAK,GAC5ChgB,EAAI,EAAE+e,EAAM1lB,EAAE0lB,GAAO1lB,CAAC,CAAC,CAAC,QAAQ2mB,EAAK,EAAE,GAAK,GAE5CI,EAAKxpB,EAAE,QAAQyb,EAAI,QAAQ,CAAC,CAAC,QAAQ,MAAO,EAAE,CAAC,CAAC,QAAQ,MAAO,EAAE,CAAC,CAAC,MAAM,IAAI,EAC7EgO,EAAKrgB,EAAE,QAAQqS,EAAI,QAAQ,CAAC,CAAC,QAAQ,MAAO,EAAE,CAAC,CAAC,QAAQ,MAAO,EAAE,CAAC,CAAC,MAAM,IAAI,EAE7EiO,EAAMF,EAAG,SAAW,GAAKxpB,EAAE,MAAMqpB,CAAG,GAAK,KAAK,MAAMrpB,CAAC,EACrD2pB,EAAKD,GAAMtgB,EAAE,MAAMigB,CAAG,GAAK,KAAK,MAAMjgB,CAAC,GAAK,KAC9CwgB,EACAC,EAEJ,GAAIF,EAAI,CACJ,GAAID,EAAKC,EACL,OAAOG,IAAU,YAAc,GAAK,EACjC,GAAIJ,EAAKC,EACZ,OAAOG,IAAU,YAAc,EAAI,EAE3C,CAEA,IAAK,IAAIC,EAAO,EAAGC,EAAO,KAAK,IAAIR,EAAG,OAAQC,EAAG,MAAM,EAAGM,EAAOC,EAAM,IAAQ,CAK3E,GAHA,EAAS,EAAER,EAAGO,IAAS,GAAA,CAAI,MAAMT,CAAG,GAAK,WAAWE,EAAGO,EAAK,GAAKP,EAAGO,IAAS,EAC7E,EAAS,EAAEN,EAAGM,IAAS,GAAA,CAAI,MAAMT,CAAG,GAAK,WAAWG,EAAGM,EAAK,GAAKN,EAAGM,IAAS,EAEzE,MAAMH,CAAM,IAAM,MAAMC,CAAM,EAC9B,OAAQ,MAAMD,CAAM,EAAK,EAAI,GAMjC,GALW,OAAOA,GAAW,OAAOC,IAEhC,GAAU,GACV,GAAU,IAEVD,EAASC,EAAU,OAAOC,IAAU,YAAc,GAAK,EAC3D,GAAIF,EAASC,EAAU,OAAOC,IAAU,YAAc,EAAI,EAC9D,CACA,MAAO,EACX,CAGA,IAAa,cAAb,KAA2B,CACvB,SACA,YAEA,YAAY,EAAQ,CAEhB,KAAK,SAAW7C,CACpB,CAEA,WAAoB,CAIhB,OAHI,KAAK,cAAgB,IAAA,KACrB,KAAK,YAAc,KAAK,SAAS,WAAa,KAAK,SAAS,UAAU,GAAK,IAExE,KAAK,WAChB,CACJ,EAOa,aAAb,cAAkC,aAAc,CAC5C,MACA,YAAY,EAAQ,CAChB,MAAMA,CAAM,EACZ,KAAK,MAAQ,CAAC,CAClB,CAEA,OAAQ,CACJ,IAAK,IAAMjmB,KAAO,KAAK,MACnB,KAAK,MAAMA,EAAI,CAAC,QAAQ,CAAC,CACpB,QAAQ,WAAY,EAAK,CAAC,CAC1B,KAAK,SAAU,IAAI,EAG5B,KAAK,MAAQ,CAAC,CAClB,CAEA,SAAU,CACN,IAAK,IAAMsT,KAAQ,KAAK,MACpB,MAAO,GAEX,MAAO,EACX,CAEA,OAAO,EAAsB,CACzB,KAAK,MAAMqS,EAAK,KAAOA,EACvBA,EAAK,QAAQ,CAAC,CACT,QAAQ,WAAY,EAAI,CAAC,CACzB,KAAK,SAAU,KAAK,UAAU,EAAI,QAAQ,KAAK,UAAU,EAAE,GAAK,IAAI,CAE7E,CAEA,OAAO,EAAsB,CACzB,KAAK,MAAMA,EAAK,IAAI,CAAC,QAAQ,CAAC,CACzB,QAAQ,WAAY,EAAK,CAAC,CAC1B,KAAK,SAAU,IAAI,EAExB,OAAO,KAAK,MAAMA,EAAK,IAC3B,CAEA,WAAW,EAAsB,CAC7B,OAAO,KAAK,MAAMA,EAAK,OAAS,IAAA,EACpC,CAEA,KAAM,CACF,IAAMS,EAAS,CAAC,EAChB,IAAK,IAAMpmB,KAAO,KAAK,MACnBomB,EAAO,KAAK,KAAK,MAAMpmB,EAAI,EAE/B,OAAOomB,CACX,CAEA,IAAI,EAA6B,CAC7B,KAAK,MAAM,EACX6C,EAAU,QAAQ,SAAU,EAAM,CAC9B,KAAK,OAAOtD,CAAI,CACpB,EAAG,IAAI,CACX,CAEA,MAAQ,SAAU,EAAsB,EAAK,CACrCuD,EAAI,QACA,KAAK,MAAMvD,EAAK,KAChB,KAAK,OAAOA,CAAI,EAEhB,KAAK,OAAOA,CAAI,GAGpB,KAAK,MAAM,EACX,KAAK,OAAOA,CAAI,EAExB,CACJ,EAEa,gBAAb,cAAqC,aAAc,CAC/C,YAAY,EAAQ,EAAe,EAAiB,CAChD,MAAMM,CAAM,EACZ,KAAK,cAAckD,CAAa,EAChC,KAAK,eAAeC,CAAc,CACtC,CAEA,eACA,cAAc,EAAI,CAGd,OAFK,UAAU,QACf,KAAK,eAAiBzlB,EACf,MAFuB,KAAK,cAGvC,CAEA,gBACA,eAAe,EAAI,CAGf,OAFK,UAAU,QACf,KAAK,gBAAkBA,EAChB,MAFuB,KAAK,eAGvC,CAEA,kBACA,MAAM,EAAU,CACZ,IAAM7C,EAAU,KAChBuoB,EACK,KAAK,SAAU,EAAG,CACf,IAAMC,EAAoBxoB,EAAQ,kBAAoBA,EAAQ,kBAAkByI,EAAE,IAAI,EAAI,GAC1F,eAAS,IAAI,CAAC,CACT,QAAQ,WAAY+f,CAAQ,CAAC,CAC7B,QAAQ,aAAc,CAACA,CAAQ,CAAC,CAChC,KAAK,SAAUxoB,EAAQ,UAAU,GAAKwoB,EAAW,QAAQxoB,EAAQ,UAAU,EAAE,GAAK,IAAI,CAE/F,CAAC,CAAC,CACD,GAAG,wBAAyB,UAAY,CACrCA,EAAQ,MAAM,IAAI,CACtB,CAAC,CAAC,CACD,GAAG,4BAA6B,UAAY,CACzCA,EAAQ,UAAU,IAAI,CAC1B,CAAC,CAAC,CACD,GAAG,2BAA4B,UAAY,CACxCA,EAAQ,SAAS,IAAI,CACzB,CAAC,CAET,CACA,MAAM,EAAkB,CACf,KAAK,iBACNyoB,EAAQ,WAAW,YAAYA,CAAO,EAE1C,IAAMxT,EAAU1mB,eAASk6B,CAAO,EAC1BC,EAAczT,EAAQ,QAAQ,UAAU,EAa9C,OAZA,KAAK,eAAe,UAAU,WAAW,CAAC,CACrC,QAAQ,WAAY,EAAK,CAAC,CAC1B,QAAQ,aAAc,EAAI,CAAC,CAC3B,KAAK,SAAU,IAAI,EAEnByT,GACDzT,EACK,QAAQ,WAAY,EAAI,CAAC,CACzB,QAAQ,aAAc,EAAK,CAAC,CAC5B,KAAK,SAAU,KAAK,UAAU,EAAI,QAAQ,KAAK,UAAU,EAAE,GAAK,IAAI,EAGtE,CAACyT,CACZ,CACA,UAAU,EAAS,CACf,eAASD,CAAO,CAAC,CACZ,QAAQ,OAAQ,EAAI,CAE7B,CACA,SAAS,EAAS,CACd,eAASA,CAAO,CAAC,CACZ,QAAQ,OAAQ,IAAI,CAE7B,CACA,SAAS,EAAS,CACd,OAAOl6B,eAASk6B,CAAO,CAAC,CAAC,QAAQ,UAAU,CAC/C,CACA,UAAU,EAAI,CAKV,OAJK,UAAU,QAGf,KAAK,WAAW,GAAK5lB,EAAE,QAAQ,KAAK,UAAU4F,CAAC,CAAC,GAAK,CAAC,EAC/C,MAHI,KAAK,WAAW,CAAC,CAAC,IAAI,GAAO,KAAK,UAAUyN,CAAG,CAAC,CAI/D,CAGA,WAAW,EAA2C,CAClD,GAAI,CAAC,UAAU,OAAQ,CACnB,IAAMoP,EAAgB,CAAC,EAMvB,OALI,KAAK,gBACL,KAAK,eAAe,UAAU,WAAW,CAAC,CACrC,KAAK,GAAKA,EAAO,KAAK7c,CAAC,CAAC,EAG1B6c,CACX,CACA,GAAI,KAAK,eAAgB,CACrB,IAAMtlB,EAAU,KAChB,KAAK,eAAe,UAAU,uBAAuB,CAAC,CACjD,KAAK,SAAU,EAAG,CACf,IAAMwoB,EAAWG,EAAWlgB,CAAC,EAC7B,eAAS,IAAI,CAAC,CACT,QAAQ,WAAY+f,CAAQ,CAAC,CAC7B,QAAQ,aAAc,CAACA,CAAQ,CAAC,CAChC,KAAK,SAAWA,GAAYxoB,EAAQ,UAAU,EAAK,QAAQA,EAAQ,UAAU,EAAE,GAAK,IAAI,EAEzFwoB,GAAY,CAACxoB,EAAQ,iBACrB,UAAU,IAAI,CAEtB,CAAC,CAET,KACI,MAAK,kBAAoB2oB,EAE7B,OAAO,IACX,CACJ,EAEA,SAAgB,qBAAqB,EAAgB,CACjD,KAAK,WAAa,IAAI,gBAAgB,KAAM,KAAML,CAAc,CACpE,CAEA,qBAAqB,UAAU,eAAiB,UAAY,CACxD,MAAO,CACH,UAAW,KAAK,WAAW,UAAU,EACrC,KAAM,KAAK,KAAK,CACpB,CACJ,EAEA,qBAAqB,UAAU,iBAAmB,SAAU,EAAO,CAO/D,OANIM,IACA,KAAK,WAAW,UAAUA,EAAM,SAAS,EACrCA,EAAM,MACN,KAAK,KAAKA,EAAM,IAAI,GAGrB,IACX,EAEA,IAAMC,GAAY,OAAO,YACnB1kB,GAAM0kB,KAASA,GAAK,KAAOA,GAAK,QAAUA,GAAK,OAASA,GAAK,MAAQA,GAAK,WAE1EC,GAAY,CAAE,WAAY,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,YAAa,IAAK,SAAU,IAAK,kBAAmB,IAAK,mBAAoB,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,YAAa,IAAK,eAAgB,IAAK,yCAA0C,IAAK,YAAa,IAAK,aAAc,IAAK,eAAgB,IAAK,uBAAwB,IAAK,uBAAwB,IAAK,wBAAyB,IAAK,qBAAsB,IAAK,gBAAiB,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,cAAe,IAAK,WAAY,IAAK,aAAc,IAAK,gBAAiB,IAAK,uBAAwB,IAAK,uBAAwB,IAAK,yBAA0B,IAAK,yBAA0B,IAAK,0BAA2B,IAAK,uBAAwB,IAAK,wBAAyB,IAAK,qBAAsB,IAAK,gBAAiB,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,cAAe,IAAK,YAAa,IAAK,gBAAiB,IAAK,cAAe,IAAK,cAAe,IAAK,sBAAuB,IAAK,iCAAkC,IAAK,cAAe,IAAK,QAAS,IAAK,uBAAwB,IAAK,gBAAiB,IAAK,cAAe,IAAK,mBAAoB,IAAK,SAAU,IAAK,cAAe,IAAK,UAAW,IAAK,eAAgB,IAAK,iBAAkB,IAAK,aAAc,IAAK,UAAW,IAAK,UAAW,IAAK,aAAc,IAAK,aAAc,IAAK,eAAgB,IAAK,eAAgB,IAAK,eAAgB,IAAK,eAAgB,IAAK,eAAgB,IAAK,mBAAoB,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,qBAAsB,IAAK,4BAA6B,IAAK,SAAU,IAAK,UAAW,IAAK,aAAc,IAAK,oBAAqB,IAAK,UAAW,IAAK,YAAa,IAAK,gBAAiB,IAAK,kBAAmB,IAAK,aAAc,IAAK,gBAAiB,IAAK,mBAAoB,IAAK,eAAgB,IAAK,sBAAuB,IAAK,aAAc,IAAK,eAAgB,IAAK,WAAY,IAAK,eAAgB,IAAK,iBAAkB,IAAK,UAAW,IAAK,UAAW,IAAK,UAAW,IAAK,UAAW,IAAK,cAAe,IAAK,gBAAiB,IAAK,aAAc,IAAK,eAAgB,IAAK,SAAU,IAAK,SAAU,IAAK,cAAe,IAAK,gBAAiB,IAAK,cAAe,IAAK,cAAe,IAAK,SAAU,IAAK,gBAAiB,IAAK,SAAU,IAAK,gBAAiB,IAAK,cAAe,IAAK,sBAAuB,IAAK,sBAAuB,IAAK,gBAAiB,IAAK,qBAAsB,IAAK,sBAAuB,IAAK,YAAa,IAAK,kBAAmB,IAAK,SAAU,IAAK,gBAAiB,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,yBAA0B,IAAK,yBAA0B,IAAK,0BAA2B,IAAK,uBAAwB,IAAK,cAAe,IAAK,qBAAsB,IAAK,eAAgB,IAAK,QAAS,IAAK,aAAc,IAAK,oBAAqB,IAAK,iBAAkB,IAAK,YAAa,IAAK,mBAAoB,IAAK,eAAgB,IAAK,eAAgB,IAAK,aAAc,IAAK,iBAAkB,IAAK,WAAY,IAAK,kBAAmB,IAAK,WAAY,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,yBAA0B,IAAK,yBAA0B,IAAK,0BAA2B,IAAK,uBAAwB,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,mBAAoB,IAAK,gBAAiB,IAAK,WAAY,IAAK,YAAa,IAAK,YAAa,IAAK,cAAe,IAAK,oBAAqB,IAAK,iBAAkB,IAAK,eAAgB,IAAK,aAAc,IAAK,WAAY,IAAK,WAAY,IAAK,WAAY,IAAK,oBAAqB,IAAK,kBAAmB,IAAK,SAAU,IAAK,UAAW,IAAK,eAAgB,IAAK,aAAc,IAAK,cAAe,IAAK,YAAa,IAAK,SAAU,IAAK,UAAW,IAAK,aAAc,IAAK,aAAc,IAAK,eAAgB,IAAK,gBAAiB,IAAK,kBAAmB,IAAK,cAAe,IAAK,gBAAiB,IAAK,aAAc,IAAK,cAAe,IAAK,oBAAqB,IAAK,YAAa,IAAK,UAAW,IAAK,eAAgB,IAAK,sBAAuB,IAAK,iBAAkB,IAAK,qBAAsB,IAAK,UAAW,IAAK,gBAAiB,IAAK,UAAW,IAAK,UAAW,IAAK,WAAY,IAAK,SAAU,IAAK,aAAc,IAAK,eAAgB,IAAK,cAAe,IAAK,cAAe,IAAK,UAAW,IAAK,cAAe,IAAK,YAAa,IAAK,eAAgB,IAAK,aAAc,IAAK,gBAAiB,IAAK,aAAc,IAAK,UAAW,IAAK,YAAa,IAAK,kBAAmB,IAAK,cAAe,IAAK,cAAe,IAAK,qBAAsB,IAAK,uBAAwB,IAAK,aAAc,IAAK,YAAa,IAAK,UAAW,IAAK,UAAW,IAAK,aAAc,IAAK,WAAY,IAAK,gBAAiB,IAAK,gBAAiB,IAAK,YAAa,IAAK,cAAe,IAAK,gBAAiB,IAAK,mBAAoB,IAAK,qBAAsB,IAAK,qBAAsB,IAAK,YAAa,IAAK,YAAa,IAAK,UAAW,IAAK,SAAU,IAAK,UAAW,IAAK,cAAe,IAAK,iBAAkB,IAAK,wBAAyB,IAAK,0BAA2B,IAAK,YAAa,IAAK,kBAAmB,IAAK,mBAAoB,IAAK,0BAA2B,IAAK,SAAU,IAAK,eAAgB,IAAK,gBAAiB,IAAK,QAAS,IAAK,cAAe,IAAK,gBAAiB,IAAK,uBAAwB,IAAK,qBAAsB,IAAK,mBAAoB,IAAK,kBAAmB,IAAK,SAAU,IAAK,UAAW,IAAK,YAAa,IAAK,iBAAkB,IAAK,UAAW,IAAK,oBAAqB,IAAK,kBAAmB,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,YAAa,IAAK,gBAAiB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,uBAAwB,IAAK,kBAAmB,IAAK,eAAgB,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,iBAAkB,IAAK,gBAAiB,IAAK,aAAc,IAAK,UAAW,IAAK,YAAa,IAAK,UAAW,IAAK,uBAAwB,IAAK,aAAc,IAAK,iBAAkB,IAAK,UAAW,IAAK,oBAAqB,IAAK,YAAa,IAAK,WAAY,IAAK,WAAY,IAAK,YAAa,IAAK,cAAe,IAAK,YAAa,IAAK,cAAe,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,UAAW,IAAK,kBAAmB,IAAK,eAAgB,IAAK,kBAAmB,IAAK,cAAe,IAAK,aAAc,IAAK,gBAAiB,IAAK,oBAAqB,IAAK,aAAc,IAAK,cAAe,IAAK,aAAc,IAAK,WAAY,IAAK,SAAU,IAAK,QAAS,IAAK,UAAW,IAAK,WAAY,IAAK,gBAAiB,IAAK,gBAAiB,IAAK,QAAS,IAAK,eAAgB,IAAK,UAAW,IAAK,SAAU,IAAK,gBAAiB,IAAK,YAAa,IAAK,gBAAiB,IAAK,mBAAoB,IAAK,YAAa,IAAK,YAAa,IAAK,WAAY,IAAK,WAAY,IAAK,aAAc,IAAK,WAAY,IAAK,YAAa,IAAK,iBAAkB,IAAK,wBAAyB,IAAK,0BAA2B,IAAK,wBAAyB,IAAK,mBAAoB,IAAK,oBAAqB,IAAK,cAAe,IAAK,UAAW,IAAK,WAAY,IAAK,cAAe,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,eAAgB,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,iBAAkB,IAAK,qBAAsB,IAAK,kBAAmB,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,qBAAsB,IAAK,aAAc,IAAK,WAAY,IAAK,YAAa,IAAK,gBAAiB,IAAK,WAAY,IAAK,aAAc,IAAK,eAAgB,IAAK,aAAc,IAAK,UAAW,IAAK,gBAAiB,IAAK,WAAY,IAAK,eAAgB,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,oBAAqB,IAAK,iBAAkB,IAAK,qBAAsB,IAAK,WAAY,IAAK,WAAY,IAAK,cAAe,IAAK,cAAe,IAAK,aAAc,IAAK,eAAgB,IAAK,SAAU,IAAK,WAAY,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,IAAK,cAAe,IAAK,UAAW,IAAK,iBAAkB,IAAK,SAAU,IAAK,eAAgB,IAAK,iBAAkB,IAAK,uBAAwB,IAAK,cAAe,IAAK,aAAc,IAAK,YAAa,IAAK,YAAa,IAAK,SAAU,IAAK,cAAe,IAAK,SAAU,IAAK,gBAAiB,IAAK,SAAU,IAAK,cAAe,IAAK,YAAa,IAAK,YAAa,IAAK,mBAAoB,IAAK,UAAW,IAAK,aAAc,IAAK,WAAY,IAAK,aAAc,IAAK,gBAAiB,IAAK,cAAe,IAAK,eAAgB,IAAK,eAAgB,IAAK,eAAgB,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,gBAAiB,IAAK,UAAW,IAAK,cAAe,IAAK,qBAAsB,IAAK,YAAa,IAAK,WAAY,IAAK,UAAW,IAAK,cAAe,IAAK,aAAc,IAAK,aAAc,IAAK,oBAAqB,IAAK,UAAW,IAAK,qBAAsB,IAAK,qBAAsB,IAAK,sBAAuB,IAAK,mBAAoB,IAAK,gBAAiB,IAAK,WAAY,IAAK,YAAa,IAAK,kBAAmB,IAAK,gBAAiB,IAAK,oBAAqB,IAAK,UAAW,IAAK,SAAU,IAAK,gBAAiB,IAAK,WAAY,IAAK,aAAc,IAAK,eAAgB,IAAK,UAAW,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,mBAAoB,IAAK,YAAa,IAAK,cAAe,IAAK,YAAa,IAAK,YAAa,IAAK,YAAa,IAAK,WAAY,IAAK,aAAc,IAAK,eAAgB,IAAK,gBAAiB,IAAK,sBAAuB,IAAK,WAAY,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,cAAe,IAAK,YAAa,IAAK,kBAAmB,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,IAAK,kBAAmB,IAAK,gBAAiB,IAAK,mBAAoB,IAAK,WAAY,IAAK,aAAc,IAAK,YAAa,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,mBAAoB,IAAK,0BAA2B,IAAK,cAAe,IAAK,YAAa,IAAK,WAAY,IAAK,mBAAoB,IAAK,aAAc,IAAK,eAAgB,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,eAAgB,IAAK,eAAgB,IAAK,WAAY,IAAK,WAAY,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,SAAU,IAAK,YAAa,IAAK,YAAa,IAAK,mBAAoB,IAAK,qBAAsB,IAAK,aAAc,IAAK,WAAY,IAAK,kBAAmB,IAAK,WAAY,IAAK,eAAgB,IAAK,eAAgB,IAAK,gBAAiB,IAAK,oBAAqB,IAAK,mBAAoB,IAAK,eAAgB,IAAK,iBAAkB,IAAK,sBAAuB,IAAK,WAAY,IAAK,UAAW,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,UAAW,IAAK,UAAW,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,aAAc,IAAK,eAAgB,IAAK,WAAY,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,QAAS,IAAK,YAAa,IAAK,cAAe,IAAK,qBAAsB,IAAK,uBAAwB,IAAK,WAAY,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,QAAS,IAAK,YAAa,IAAK,aAAc,IAAK,WAAY,IAAK,aAAc,IAAK,YAAa,IAAK,kBAAmB,IAAK,mBAAoB,IAAK,aAAc,IAAK,gBAAiB,IAAK,YAAa,IAAK,YAAa,IAAK,aAAc,IAAK,YAAa,IAAK,WAAY,IAAK,eAAgB,IAAK,gBAAiB,IAAK,aAAc,IAAK,SAAU,IAAK,UAAW,IAAK,YAAa,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,YAAa,IAAK,SAAU,IAAK,gBAAiB,IAAK,SAAU,IAAK,WAAY,IAAK,WAAY,IAAK,SAAU,IAAK,YAAa,IAAK,UAAW,IAAK,cAAe,IAAK,YAAa,IAAK,YAAa,IAAK,kBAAmB,IAAK,iBAAkB,IAAK,YAAa,IAAK,UAAW,IAAK,YAAa,IAAK,YAAa,IAAK,WAAY,IAAK,eAAgB,IAAK,sBAAuB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,YAAa,IAAK,YAAa,IAAK,YAAa,IAAK,UAAW,IAAK,kBAAmB,IAAK,kBAAmB,IAAK,qBAAsB,IAAK,mBAAoB,IAAK,YAAa,IAAK,aAAc,IAAK,mBAAoB,IAAK,cAAe,IAAK,YAAa,IAAK,aAAc,IAAK,iBAAkB,IAAK,aAAc,IAAK,cAAe,IAAK,WAAY,IAAK,WAAY,IAAK,aAAc,IAAK,gBAAiB,IAAK,aAAc,IAAK,cAAe,IAAK,oBAAqB,IAAK,qBAAsB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,UAAW,IAAK,oBAAqB,IAAK,qBAAsB,IAAK,qBAAsB,IAAK,sBAAuB,IAAK,cAAe,IAAK,eAAgB,IAAK,eAAgB,IAAK,sBAAuB,IAAK,uBAAwB,IAAK,aAAc,IAAK,gBAAiB,IAAK,mBAAoB,IAAK,aAAc,IAAK,WAAY,IAAK,aAAc,IAAK,YAAa,IAAK,cAAe,IAAK,oBAAqB,IAAK,oBAAqB,IAAK,UAAW,IAAK,eAAgB,IAAK,qBAAsB,IAAK,oBAAqB,IAAK,iBAAkB,IAAK,YAAa,IAAK,WAAY,IAAK,kBAAmB,IAAK,mBAAoB,IAAK,kBAAmB,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,UAAW,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,iBAAkB,IAAK,wBAAyB,IAAK,eAAgB,IAAK,YAAa,IAAK,cAAe,IAAK,WAAY,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,aAAc,IAAK,WAAY,IAAK,YAAa,IAAK,gBAAiB,IAAK,SAAU,IAAK,UAAW,IAAK,WAAY,IAAK,UAAW,IAAK,cAAe,IAAK,gBAAiB,IAAK,mBAAoB,IAAK,cAAe,IAAK,iBAAkB,IAAK,gBAAiB,IAAK,QAAS,IAAK,cAAe,IAAK,aAAc,IAAK,eAAgB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,mBAAoB,IAAK,mBAAoB,IAAK,mBAAoB,IAAK,mBAAoB,IAAK,uBAAwB,IAAK,sBAAuB,IAAK,sBAAuB,IAAK,yBAA0B,IAAK,gCAAiC,IAAK,gBAAiB,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,iBAAkB,IAAK,eAAgB,IAAK,YAAa,IAAK,WAAY,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,qBAAsB,IAAK,uBAAwB,IAAK,UAAW,IAAK,iBAAkB,IAAK,iBAAkB,IAAK,gBAAiB,IAAK,eAAgB,IAAK,kBAAmB,IAAK,eAAgB,IAAK,eAAgB,IAAK,WAAY,IAAK,iBAAkB,IAAK,qBAAsB,IAAK,WAAY,IAAK,aAAc,IAAK,UAAW,IAAK,YAAa,IAAK,iBAAkB,IAAK,YAAa,IAAK,WAAY,IAAK,SAAU,IAAK,SAAU,IAAK,YAAa,IAAK,mBAAoB,IAAK,kBAAmB,IAAK,QAAS,IAAK,YAAa,IAAK,aAAc,IAAK,oBAAqB,IAAK,cAAe,IAAK,eAAgB,IAAK,UAAW,IAAK,sBAAuB,IAAK,gBAAiB,IAAK,YAAa,IAAK,YAAa,IAAK,gBAAiB,IAAK,cAAe,IAAK,YAAa,IAAK,SAAU,IAAK,SAAU,IAAK,UAAW,IAAK,iBAAkB,IAAK,mBAAoB,IAAK,aAAc,IAAK,YAAa,IAAK,eAAgB,IAAK,iBAAkB,IAAK,gBAAiB,IAAK,WAAY,IAAK,WAAY,IAAK,aAAc,IAAK,WAAY,IAAK,kBAAmB,IAAK,gBAAiB,IAAK,aAAc,IAAK,YAAa,IAAK,mBAAoB,IAAK,kBAAmB,IAAK,WAAY,IAAK,kBAAmB,IAAK,UAAW,IAAK,QAAS,IAAK,0BAA2B,IAAK,iBAAkB,IAAK,gBAAiB,IAAK,eAAgB,IAAK,aAAc,IAAK,YAAa,IAAK,WAAY,IAAK,YAAa,IAAK,cAAe,IAAK,gBAAiB,IAAK,oBAAqB,IAAK,UAAW,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,oBAAqB,IAAK,qBAAsB,IAAK,qBAAsB,IAAK,oBAAqB,IAAK,aAAc,IAAK,SAAU,IAAK,eAAgB,IAAK,gBAAiB,IAAK,gBAAiB,IAAK,aAAc,IAAK,YAAa,IAAK,UAAW,IAAK,iBAAkB,IAAK,kBAAmB,IAAK,yBAA0B,IAAK,WAAY,IAAK,QAAS,IAAK,eAAgB,IAAK,UAAW,IAAK,SAAU,IAAK,WAAY,IAAK,aAAc,IAAK,kBAAmB,IAAK,oBAAqB,GAAI,EACtxgBC,GAAa,CACf,YAAa,oBACb,oBAAqB,qBACrB,oBAAqB,qBACrB,yBAA0B,8BAC1B,yBAA0B,8BAC1B,0BAA2B,+BAC3B,uBAAwB,4BACxB,cAAe,sBACf,cAAe,sBACf,YAAa,aACb,kBAAmB,mBACnB,sBAAuB,mBACvB,gBAAiB,iBACjB,gBAAiB,iBACjB,oBAAqB,qBACrB,oBAAqB,qBACrB,cAAe,eACf,iBAAkB,eAClB,oBAAqB,4BACrB,kBAAmB,0BACnB,eAAgB,gBAChB,kBAAmB,qBACnB,gBAAiB,iBACjB,qBAAsB,qBACtB,aAAc,kBACd,eAAgB,wBAChB,aAAc,YACd,uBAAwB,qBACxB,gBAAiB,iBACjB,qBAAsB,sBACtB,cAAe,sBACf,mBAAoB,2BACpB,0BAA2B,kCAC3B,uBAAwB,yBACxB,YAAa,aACb,iBAAkB,iBAClB,YAAa,aACb,cAAe,eACf,mBAAoB,oBACpB,aAAc,cACd,iBAAkB,kBAClB,eAAgB,gBAChB,gBAAiB,wBACjB,cAAe,sBACf,qBAAsB,6BACtB,qBAAsB,6BACtB,sBAAuB,8BACvB,mBAAoB,2BACpB,gBAAiB,eACjB,WAAY,YACZ,cAAe,gBACf,oBAAqB,qBACrB,mBAAoB,oBACpB,oBAAqB,qBACrB,YAAa,oBACb,mBAAoB,oBACpB,mBAAoB,oBACpB,uBAAwB,wBACxB,WAAY,eACZ,YAAa,oBACb,oBAAqB,qBACrB,YAAa,oBACb,aAAc,qBACd,cAAe,sBACf,WAAY,uBACZ,cAAe,eACf,qBAAsB,kBACtB,oBAAqB,uBACrB,iBAAkB,kBAClB,YAAa,aACb,mBAAoB,oBACpB,mBAAoB,oBACpB,gBAAiB,wBACjB,mBAAoB,oBACpB,iBAAkB,kBAClB,YAAa,oBACb,oBAAqB,qBACrB,qBAAsB,sBACtB,uBAAwB,qBACxB,aAAc,kBACd,mBAAoB,oBACpB,YAAa,aACb,aAAc,qBACd,oBAAqB,oBACrB,kBAAmB,sBACnB,oBAAqB,qBACrB,kBAAmB,iBACnB,oBAAqB,uBACzB,EACA,SAAgB,QAAmB,CAC/B,OAAO,OAAO,KAAKD,EAAS,CAChC,CAEA,SAAgB,SAAS,EAAqB,CAC1C,OAAOC,GAAW7pB,GAAO6pB,GAAW7pB,GAAOA,CAC/C,CAEA,SAAgB,OAAO,EAAa,EAAkB,cAAuB,CAIzE,OAHIA,EAAI,QAAQ,KAAK,IAAM,EAChB4pB,GAAU5pB,IAAQ4pB,GAAUE,GAEhC9pB,CACX,CAEA,SAAgB,OAAO,EAAqB,CACxC,OAAO,OAAOA,CAAG,CAAC,CAAC,WAAW,CAAC,CACnC,CAEA,IAAI+pB,GACJ,SAAgB,qBAAqB,EAAa,EAAsB,CAMpE,OALIC,IAAQ,IAAA,IAAaD,KAA6B,IAAA,KAClD,GAA2B,SAAS,cAAc,KAAK,GAE3D,IAAaA,GACb,EAAI,UAAYE,EACTD,EAAI,aAAeA,EAAI,WAAa,EAC/C,CAIA,IAAME,GAAQ,6BACRC,GAAS,iCAEf,SAAgB,eAAe,EAAuB,CAClD,GAAI,CAACC,EAAK,MAAO,CAAC,EAClB,IAAMhE,EAAmB,CAAC,EACpBiE,EAAUD,EAAI,MAAMF,EAAK,EAC/B,GAAIG,GAAWA,EAAQ,OACnB,IAAK,IAAMC,KAAYD,EACnBjE,EAAO,KAAKkE,EAAS,UAAU,EAAGA,EAAS,OAAS,CAAC,CAAC,EAG9D,OAAOlE,CACX,CAEA,SAAgB,SAAS,EAAc,EAAQ,CAC3C,GAAI,CAACgE,EAAK,MAAO,GACjB,IAAIrmB,EAEJ,GAAI,UAAU,SAAW,GAAK,OAAO,UAAU,IAAO,SAClD,EAAO,UAAU,OACd,CACH,EAAW,MAAM,UAAU,OAAS,CAAC,EACrC,IAAK,IAAI9F,EAAI,EAAGA,EAAI,UAAU,OAAQ,EAAEA,EACpC,EAAKA,EAAI,GAAK,UAAUA,EAEhC,EAEI,CAAC8F,GAAQ,CAACA,EAAK,kBACf,EAAO,CAAC,GAIZ,IAAK,IAAM/D,KAAO+D,GACd,EAAIzU,EAAAA,QAAAA,CAAQyU,EAAK/D,EAAI,GACjB+D,EAAK/D,EAAI,CAAC,QAAQ,SAAU,EAAK,EAAK,CAClC,EAAKA,EAAM,IAAMmnB,EAAM,KAAOnQ,CAClC,CAAC,EAIT,OAAOoT,EACF,QAAQD,GAAQ,SAAS,WAAW,EAAO,EAAG,CAC3C,IAAMI,EAASxmB,EAAK,eAAe9F,CAAC,EAAI8F,EAAK9F,GAAK,KAIlD,OAHIssB,GAAW,KACJprB,EAEJ,qBAAqBorB,CAAM,CACtC,CAAC,CAAC,CACD,QAAQL,GAAO,SAAS,WAAW,EAAO,EAAG,EAAO,CAKjD,OAJenmB,EAAK,eAAe9F,CAAC,EAAI8F,EAAK9F,GAAK,OAEvC,EAGf,CAAC,CAET,CAEA,SAAgB,YAAY,EAAM,EAAO,EAAK,EAAmB,CAC7D,OAAO2B,EAAK,MAAM,CAAC,CAAC,CAAC,KAAK,SAAU,EAAG,EAAG,CACtC,OAAO,aAAa4B,EAAGC,EAAGqnB,EAAO3B,EAAKoB,CAAiB,CAC3D,CAAC,CACL,CAEA,SAAgB,UAAU,EAAM,EAAQ,CAapC,OAZIiC,GAAUA,EAAO,QACjB5qB,EAAK,KAAK,SAAU,EAAG,EAAG,CACtB,IAAK,IAAI3B,EAAI,EAAGA,EAAIusB,EAAO,OAAQ,EAAEvsB,EAAG,CACpC,IAAMwsB,EAAOzjB,EAAEwjB,EAAOvsB,EAAE,CAAC,KACnBysB,EAAOxjB,EAAEsjB,EAAOvsB,EAAE,CAAC,KACzB,GAAIwsB,IAASC,EACT,OAAOF,EAAOvsB,EAAE,CAAC,QAAU1O,WAAak7B,EAAMC,CAAI,EAAIl7B,UAAYi7B,EAAMC,CAAI,CAEpF,CACA,MAAO,EACX,CAAC,EAEE9qB,CACX,CAEA,IAAauoB,GAAY,aAEzB,SAAgB,WAAY,CACxB,IAAM/B,EAAS,CAAC,EACVuE,EAAM,OAAO,SAAS,KACtBxD,EAAMwD,EAAI,QAAQ,GAAG,EAgB3B,OAfIxD,GAAO,GACPwD,EAAI,UAAUxD,EAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,SAAU,EAAO,CACvD,IAAMyD,EAAanD,EAAM,MAAM,GAAG,EAClC,OAAQmD,EAAW,OAAnB,CACI,IAAK,GACD,EAAO,mBAAmBA,EAAW,EAAE,GAAK,IAAA,GAC5C,MACJ,IAAK,GACD,EAAO,mBAAmBA,EAAW,EAAE,GAAK,mBAAmBA,EAAW,EAAE,EAC5E,MACJ,QACI,MAAU,MAAM,uBAAyBnD,CAAK,CACtD,CACJ,CAAC,EAEErB,CACX,CAEA,SAAgB,SAAS,EAAa,EAAmB,EAAc,CACnE,IAAMyE,EAAgBZ,EAAI,SAAS,GAC/B,OAAOa,GAAQ,UAAY,CAAC,SAASA,CAAG,GAAK,KAAK,MAAMA,CAAG,IAAMA,GAAOA,EAAMD,EAAc,UAC5F,EAAMA,EAAc,QAExB,GAAOE,EAAU,OACjB,IAAMC,EAAYH,EAAc,QAAQE,EAAWD,CAAG,EACtD,OAAOE,IAAc,IAAMA,IAAcF,CAC7C,CAEA,SAAgB,eAAe,EAAO,CAClC,MAAO,CACH,cAAe,CACX,cAAc,EAAU,CACpB,MAAO,CACH,IAAI,UAAW,CAAE,OAAO,KAAK,GAAK,EAClC,IAAI,SAAS,EAAG,CAAE,KAAK,IAAM,EAAM,KAAK,OAASnnB,CAAG,CACxD,CACJ,EAEA,gBAAgB,EAAK,EAAS,CAC1B,OAAO,KAAK,cAAcsnB,CAAO,CACrC,CACJ,EAEA,iBAAiB,EAAW,CACxB,GAAIC,EAAW,MAAU,MAAM,aAAa,EAC5C,IAAMpqB,EAAU,KAChB,OAAOgS,EAAM,IAAI,SAAU,EAAK,EAAK,CACjC,MAAO,CACH,cAAehS,EAAQ,cACvB,WAAYA,EACZ,IAAI,UAAW,CAAE,OAAOkW,CAAK,EAC7B,IAAI,SAAS,EAAG,CAAE,EAAMmQ,GAAOxjB,CAAG,CACtC,CACJ,CAAC,CACL,EAEA,YAAY,EAAM,CAId,MAHA,GAAK,WAAa,KAClB,EAAK,MAAQmP,EAAM,OACnBA,EAAM,KAAK,IAAI,EACRhU,CACX,EAEA,aAAa,EAAM,EAAe,CAC9B,IAAMqoB,EAAMrU,EAAM,QAAQhU,EAAK,QAAQ,EACjCqsB,EAASrY,EAAM,QAAQsY,EAAc,QAAQ,EAMnD,OALIjE,EAAMgE,EACNrY,EAAM,OAAOqY,EAAQ,EAAGrY,EAAM,OAAOqU,EAAK,CAAC,CAAC,CAAC,EAAE,EACxCA,EAAMgE,EAAS,GACtBrY,EAAM,OAAOqY,EAAS,EAAG,EAAGrY,EAAM,OAAOqU,EAAK,CAAC,CAAC,CAAC,EAAE,EAEhDroB,CACX,EAEA,YAAY,EAAM,CAEd,OADAgU,EAAM,OAAOA,EAAM,QAAQhU,EAAK,QAAQ,EAAG,CAAC,EACrCA,CACX,CACJ,CACJ,CAEA,SAAgB,aAAa,EAAY,EAAkB,CACvD,IAAI0C,EAAI,SAAS,cAAc,GAAG,EAClC,GAAI,UAAU6pB,WAEV,MADA,GAAI,KACG,UAAUA,WAAcC,EAAMC,CAAQ,EAC1C,GAAI,aAAc/pB,EAQrB,MAPA,GAAE,KAAO,IAAI,gBAAgB8pB,CAAI,EACjC9pB,EAAE,aAAa,WAAY+pB,CAAQ,EACnC,SAAS,KAAK,YAAY/pB,CAAC,EAC3B,WAAW,UAAY,CACnBA,EAAE,MAAM,EACR,SAAS,KAAK,YAAYA,CAAC,CAC/B,EAAG,EAAE,EACE,EAEf,CAEA,SAAgB,WAAY,CACxB,IAAMgqB,EAAc,IAAI,KAExB,OADmB/7B,GAAa,mBACzB,CAAA,CAAW+7B,CAAW,CACjC,CAEA,SAAgB,eAAe,EAAiD,EAAc,EAAa,CACvG,IAAMD,EAAWnoB,GAAO,QAAU,UAAU,EAAK,IAAM6D,EAAO,YAAY,EAEtEwkB,EACJ,OAAQxkB,EAAR,CACI,IAAK,MACD,EAAW,4BACX,MACJ,IAAK,OACD,EAAW,mBACX,MACJ,IAAK,MACD,EAAW,gBACX,MAGJ,QACI,EAAW,UACnB,CACA,aAAa,IAAI,KAAK,CAACqkB,CAAI,EAAG,CAAE,KAAMG,CAAS,CAAC,EAAGF,CAAQ,CAC/D,CAEA,SAAgB,WAAW,EAAS,CAChC,MAAO,MAAQG,EAAQ,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAC9C,CAEA,SAAgB,aAAa,EAAS,EAAS,KAAM,CACjD,IAAMC,EAAQD,EAAQ,MAAM,GAAG,EACzBE,EAAaD,EAAM,EAAE,CAAC,MAAM,GAAG,EACrC,MAAO,CACH,QAAS,YAAYC,EAAW,KAChC,KAAM5tB,EAAS,IAAM2tB,EAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EACjD,SAAUC,EAAW,OAAS,EAAIA,EAAW,GAAK,KAClD,eAAgBD,EAAM,OAAS,EAAIA,EAAM,GAAK,IAClD,CACJ,CAEA,SAAgB,SAAS,EAAG,CAIxB,OAHIrkB,aAAa,QACb,EAAIA,EAAE,KAAK,EAAE,EAAIA,EAAE,QAEf,OAAOA,EAAf,CACI,IAAK,SACD,MACJ,QACI,EAAI,GAAKA,CACjB,CACA,IAAIukB,EAAM,UACV,IAAK,IAAI5tB,EAAI,EAAG+I,EAAIM,EAAE,OAAQrJ,EAAI+I,EAAG,EAAE/I,EACnC,GAAQqJ,EAAE,WAAWrJ,CAAC,GAAKA,EAAI,GAEnC,OAAQ4tB,EAAM,EAAA,CAAY,SAAS,EAAE,CACzC,CACA,SAAgB,SAAU,CACtB,OAAQ5mB,IAAOA,GAAI,KAAK0kB,EAAI,GAAO,IAAI,KAAK,CAAA,CAAE,QAAQ,CAC1D,CACA,SAAgB,MAAM,EAAM,EAAU,CAClC,IAAe,CAAC,EAChB,IAAK,IAAI1rB,EAAI,EAAG+I,EAAI,UAAU,OAAQ/I,EAAI+I,EAAG,IACzC,OAAO8kB,EAAM,UAAU7tB,EAAE,EAE7B,OAAO6tB,CACX,CAEA,SAAS,OAAO,EAAM,EAAQ,CAC1B,IAAIxkB,EACExB,EAAQ,CAAC,EACf,IAAK,IAAM9F,KAAO2T,EACd,EAAIA,EAAO3T,IACP,EAAEA,KAAO8rB,IAAUA,EAAK9rB,KAASsH,IAAM,EAAEtH,KAAO8F,IAAUA,EAAM9F,KAASsH,MACzE,EAAKtH,GAAOsH,GAGpB,OAAOwkB,CACX,CAEA,SAAgB,OAAO,EAAM,EAAO,CAChC,GAAI,CAACzF,GAAQ,CAAC0F,EACV,MAAO,GAEX,IAAMC,EAAY3F,EAAK,MAAM,GAAG,EAC5B4F,EAAYF,EAChB,IAAK,IAAI9tB,EAAI,EAAGA,EAAI+tB,EAAU,OAAQ,EAAE/tB,EAAG,CACvC,IAAM0nB,EAAOqG,EAAU/tB,GACvB,GAAIguB,EAAUtG,KAAU,IAAA,GACpB,MAAO,GAEX,EAAYsG,EAAUtG,EAC1B,CACA,MAAO,EACX,CAEA,SAAgB,aAAa,EAAK,CAC9B,IAAMuG,EAAQ,CAAC,EACf,OAAO,KAAK,UAAUlH,EAAK,SAAU,EAAM,EAAO,CAC9C,GAAI,OAAO9kB,GAAU,UAAYA,EAAgB,CAC7C,GAAIgsB,EAAM,QAAQhsB,CAAK,IAAM,GACzB,OAGJgsB,EAAM,KAAKhsB,CAAK,CACpB,CACA,OAAOA,CACX,CAAC,CACL,CAEA,SAAgB,SAAS,EAAM,EAAY,IAAK,EAAW,GAAO,CAC9D,OAAO,SAAS,UAAU,GAAGisB,EAAY,CACrC,IAAMnH,EAAM,MAAQ,CAAC,EACfjhB,EAAO,UACb,SAAS,SAAU,CACVqoB,GACDpF,EAAK,MAAMhC,EAAKjhB,CAAI,EACxB,EAAI,wBAA0B,IAClC,CACIihB,EAAI,wBACJ,aAAaA,EAAI,uBAAuB,EACnCoH,GACLpF,EAAK,MAAMhC,EAAKjhB,CAAI,EACxB,EAAI,wBAA0B,WAAW,QAAS+Q,CAAS,CAC/D,CACJ,CAEA,SAAgB,mBAAmB,EAAe,CAC9C,IAAMuX,EAAMC,EAAc,MAAM,GAAG,EACnC,MAAO,CACH,MAAO,SAASD,EAAI,EAAE,CAAC,QAAQ,IAAK,EAAE,CAAC,EACvC,MAAO,SAASA,EAAI,EAAE,EACtB,MAAO,SAASA,EAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CACxC,CACJ,CAGA,IAAIE,EACEC,GAAsD,CAAC,EAE7D,SAAgB,SAAS,EAA0B,EAAmB,UAAW,EAAmB,GAAI,EAAgB,GAA2B,CAC/I,EAAoB,oBAAoB,EACxC,IAAMzT,EAAO0T,aAAiB,MAAQA,EAAQ,CAACA,CAAK,EAC9CC,EAAO,GAAGC,EAAK,IAAIC,EAAS,IAAIC,EAAS,IAAI9T,EAAK,KAAK,IAAI,IAC7DqN,EAASoG,GAAuBE,GAcpC,OAbKtG,IACD,EAAS,CAAE,MAAO,EAAG,OAAQ,CAAE,EAC/B,EAAkB,KAAO,GAAGuG,EAAO,QAAU,KAAKC,EAAS,KAAKC,IAChE9T,EAAK,QAAQ,GAAQ,CACjB,IAAM+T,EAAkBP,EAAkB,YAAY,GAAKQ,CAAI,EACzD9a,EAAQ6a,EAAgB,MACxB5a,GAAU4a,EAAgB,uBAAyBA,EAAgB,uBAAyB/T,EAAK,OACvG,GAAuB2T,GAAQ,EAAS,CACpC,MAAOza,EAAQmU,EAAO,MAAQnU,EAAQmU,EAAO,MAC7C,OAAQlU,EAASkU,EAAO,OAASlU,EAASkU,EAAO,MACrD,CACJ,CAAC,GAEEA,CACX,CAGA,IAAI4G,EACEC,GAAsD,CAAC,EAC7D,SAAgB,SAAS,EAAc,EAAmB,UAAW,EAAmB,GAAI,EAAgB,GAA2B,CAEnI,EAAe,oBAAoB,EACnC,EAAoB,oBAAoB,EACxC,IAAMP,EAAO,GAAGC,EAAK,IAAIC,EAAS,IAAIC,EAAS,IAAI9T,IAC/CqN,EAAS6G,GAAuBP,GACpC,GAAI,CAACtG,EAAQ,CACT,IAAM8G,EAAO,GAAGP,EAAO,QAAU,KAAKC,EAAS,MAAMC,EAAS,GAC9D,EAAkB,KAAOK,EACzB,IAAM1uB,EAAI+tB,EAAkB,YAAYxT,CAAI,EACtC1G,EAAI,EAAa,MAAQ,KAAK,KAAK7T,EAAE,KAAK,EAC1C+I,EAAI,EAAa,OAASqlB,EAAW,IACrCO,EAAS,SAAS,cAAc,QAAQ,EAC9C,EAAO,MAAQ9a,EACf,EAAO,OAAS9K,EAChB,EAAkB,KAAO2lB,EACzB,EAAkB,UAAY,QAC9B,EAAkB,UAAY,QAC9B,EAAkB,aAAe,MACjCX,EAAkB,SAASxT,EAAM,EAAG,CAAC,EAErC,IAAIqU,EAAK3X,EAAO4X,EAAQ7X,EAAO,EAC/B,GAAInD,EAAI,EAAG,CACP,IAAMzS,EAAO2sB,EAAkB,aAAa,EAAG,EAAGla,EAAG9K,CAAC,CAAC,CAAC,KACxD,IAAK,IAAIa,EAAI,EAAGA,EAAIb,EAAG,IACnB,IAAK,IAAIvI,EAAI,EAAGA,EAAIqT,EAAG,IAEfzS,GADOZ,EAAIoJ,EAAIiK,GAAK,EACX,KAAO,IACZ+a,IAAQ,IAAA,KACR,EAAMhlB,IAENoN,IAAS,IAAA,IAAaA,EAAOxW,KAC7B,EAAOA,IAEPyW,IAAU,IAAA,IAAaA,EAAQzW,KAC/B,EAAQA,GAEZ,EAASoJ,EAIzB,CACA,EAAS,CACL,MAAOqN,EAAQD,EAAO,EACtB,OAAQ6X,EAASD,EAAM,EACvB,MACA,QACA,SACA,MACJ,EACA,GAAuBV,GAAQtG,CACnC,CACA,OAAOA,CACX,CAEA,SAAS,qBAAsB,CAS3B,OARK4G,IACD,EAAe,SAAS,eAAe,mBAAmB,EACrDA,IACD,EAAe,SAAS,cAAc,QAAQ,EAC9C,EAAa,GAAK,oBAClB,SAAS,KAAK,YAAYA,CAAY,IAGvCA,CACX,CAEA,SAAS,qBAAsB,CAK3B,MAJA,CAEIT,KADA,EAAe,oBAAoB,EACdS,EAAmC,WAAW,IAAI,GAEpET,CACX,CAEA,SAAgB,UAAU,EAAkB,CACxC,IAAM/uB,EAAS+rB,EACX+D,EAAc9vB,EAAO,YACzB,KAAO8vB,GACH9vB,EAAO,WAAW,aAAa8vB,EAAa9vB,CAAM,EAClD,EAAcA,EAAO,WAE7B,C,0FCn0BMmwB,GAAS,CACNj+B,IACAC,IACCC,KACEC,OACEC,SACCC,UACNC,GACT,EAEM,KAAN,KAAW,CACP,MAA0C,CAAC,EAC3C,QAEA,IAAI,EAAmC,CAEnC,OADA,KAAK,MAAM,KAAK49B,CAAQ,EACjB,IACX,CAEA,OAAO,EAAsC,CAEzC,MADA,MAAK,QAAUhsB,EACR,IACX,CAEA,OAAe,EAAa,EAAmC,CAC3D,IAAMrD,EAAS,IAAI,IACnB,IAAK,IAAMyY,KAAOmB,EAAM,CACpB,IAAMnY,EAAM,GAAG,KAAK,MAAM6tB,EAAM,CAAC7W,CAAG,IAC9B3N,EAAS9K,EAAO,IAAIyB,CAAG,EACzBqJ,EACAA,EAAO,KAAK2N,CAAG,EAEfzY,EAAO,IAAIyB,EAAK,CAACgX,CAAG,CAAC,CAE7B,CACA,OAAOzY,CACX,CAEA,MAAc,EAAa,EAAe,EAAmB,CACzD,GAAIsvB,GAAS,KAAK,MAAM,OACpB,OAAO,KAAK,QAAU,KAAK,QAAQ1V,CAAI,EAAIA,EAE/C,IAAM5Z,EAAS,KAAK,OAAO4Z,EAAM0V,CAAK,EAOtC,OANIna,EACO,IAAI,IAAI,MAAM,KAAKnV,GAAS,CAACyB,EAAKqJ,KAAY,CAACrJ,EAAK,KAAK,MAAMqJ,EAAQwkB,EAAQ,EAAG,EAAI,CAAC,CAAC,CAAC,EAEhG,KAAK,SAAWA,IAAU,KAAK,MAAM,OAAS,EACvC,MAAM,KAAKtvB,GAAS,CAACyB,EAAKqJ,MAAa,CAAE,MAAK,MAAO,KAAK,MAAMA,EAAQwkB,EAAQ,EAAG,EAAK,CAAE,EAAE,EAEhG,MAAM,KAAKtvB,GAAS,CAACyB,EAAKqJ,MAAa,CAAE,MAAK,OAAQ,KAAK,MAAMA,EAAQwkB,EAAQ,EAAG,EAAK,CAAE,EAAE,CACxG,CAEA,QAAQ,EAAoB,CACxB,OAAO,KAAK,MAAM1V,EAAM,EAAG,EAAK,CACpC,CAEA,IAAI,EAAa,EAAY,GAAY,CACrC,IAAMoS,EAAS,KAAK,MAAMpS,EAAM,EAAG,EAAI,EACvC,GAAI2V,EAAW,OAAOvD,EACtB,IAAM,SAAY,GAAoBrqB,aAAiB,IAAM,OAAO,YAAY,MAAM,KAAKA,GAAQ,CAACF,EAAKR,KAAW,CAACQ,EAAK,SAASR,CAAK,CAAC,CAAC,CAAC,EAAIU,EAC/I,OAAO,SAASqqB,CAAM,CAC1B,CACJ,EAEIwD,GAAkB,KAUTP,EAAb,MAAa,cAAchI,EAAY,CACnC,OACA,IACA,UAA+B,CAAC,EAEhC,YAAY,EAAK,CACb,MAAM,EAEN,KAAK,IAAMpiB,GAAM,KAAK,GAC1B,CAIA,MAAM,EAAuB,CAGzB,OAFK,UAAU,QACf,KAAK,OAASO,EACP,MAFuB,KAAK,MAGvC,CAEA,OAAiB,CACb,MAAO,CAAC,CAAC,KAAK,MAAM,CACxB,CAEA,UAAmB,CACf,OAAO1T,SAAiB,KAAK,MAAM,EAAI,KAAK,KAAK,EAAI,KAAK,KAAK,EAAI,KAAK,OAAO,CAAC,CACpF,CAEA,gBAAgB,EAAQ,CACpB,OAAQ,KAAK,KAAK,EAAlB,CACI,IAAK,SACD,OAAO,OAAO0T,CAAC,EACnB,IAAK,SACD,OAAO,OAAOA,CAAC,EACnB,IAAK,UACD,OAAO,OAAQA,GAAO,UAAY,CAAC,QAAS,MAAO,GAAG,CAAC,CAAC,QAAQA,EAAE,YAAY,CAAC,GAAK,EAAI,GAAQ,EAAQA,EAC5G,IAAK,OACL,IAAK,OACD,OAAO,KAAK,gBAAgBA,CAAC,CACrC,CACA,OAAOA,CACX,CAEA,gBAAgB,EAAG,CACf,OAAO,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,OAAOA,CAAC,CAAC,CACtD,CAEA,kBAAkB,EAAG,CACjB,OAAO,KAAK,UAAU,KAAK,OAAO,CAAC,CAAC,CAACA,CAAC,CAC1C,CAEA,MAAM,EAAG,CACL,GAAI,CAACA,EACD,OAAOA,EAEX,GAAI,CACA,OAAO,KAAK,gBAAgBA,CAAC,CACjC,MAAY,CAER,OADA,QAAQ,KAAK,qBAAuBA,CAAC,EAC9B,IACX,CACJ,CAEA,UAAU,EAAG,CACT,GAAI,CAACA,EACD,OAAOA,EAEX,GAAI,CACA,OAAO,KAAK,kBAAkB,KAAK,gBAAgBA,CAAC,CAAC,CACzD,MAAY,CAER,OADA,QAAQ,KAAK,yBAA2BA,CAAC,EAClC,IACX,CACJ,CAEA,OAAQ,CACJ,IAAM7C,EAAU,KACVslB,EAAS,IAAI,MAAM,KAAK,GAAG,EACjC,UAAUA,EAAQ,OAAO,EACzB,UAAUA,EAAQ,MAAM,EACxB,UAAUA,EAAQ,MAAM,EACxB,UAAUA,EAAQ,QAAQ,EAE1B,SAAS,UAAU,EAAM,EAAK,CAC1B0F,EAAK9rB,EAAM,WAAW,CAACc,EAAQd,EAAM,WAAW,CAAC,CAAC,EAC9Cc,EAAQd,EAAM,UAAU,CAAC,GACzB8rB,EAAK9rB,EAAI,CAACc,EAAQd,EAAI,CAAC,CAAC,CAEhC,CACA,OAAOomB,CACX,CAEA,UAAU,EAAQ,CACd,IAAI,OACJ,GAAI,CAACl2B,EAOD,MANA,QAAS,SAAU,EAAG,CAClB,OAAOyT,CACX,EACA,OAAO,MAAQ,SAAU,EAAG,CACxB,OAAOA,CACX,EACO,OAEX,OAAQ,KAAK,KAAK,EAAlB,CACI,IAAK,OACL,IAAK,OACD,OAAOxT,GAAaD,CAAM,CAClC,CAKA,MAJA,QAASE,GAASF,CAAM,EACxB,OAAO,MAAQ,SAAU,EAAG,CACxB,OAAOyT,CACX,EACO,MACX,CAIA,SAAS,EAA2C,EAAqC,CACrF,GAAIA,IAAM,IAAK,GAAG,OAAO,KAAK,UAC9B,KAAK,KAAK,QAAQ,EAClB,IAAMsqB,EAAY,KAAK,UAyBvB,MAxBA,MAAK,UAAYtqB,EAAE,KAAK,EAAuC,IACvD2Z,aAAiB,OACjB,EAAU6J,GAAO7J,EACVA,GACA,OAAOA,GAAU,SACpB4Q,GACQD,EAAU9G,IAAQ,IAAI,MAAM,CAAG,cAAc7J,CAAK,GAElD2Q,EAAU9G,IAAQ,IAAI,MAAM,CAAG,MAAM7J,CAAK,EAGlD4Q,GACQD,EAAU9G,IAAQ,IAAI,MAAM,CAC/B,cAAc7J,EAAM,KAAK,CAAC,CAC1B,SAASA,EAAM,OAAO,GAGnB2Q,EAAU9G,IAAQ,IAAI,MAAM,CAC/B,MAAM7J,EAAM,KAAK,CAAC,CAClB,SAASA,EAAM,OAAO,EAIpC,IAAI,EACA,IACX,CAEJ,EACA,EAAM,UAAU,QAAU,yBAe1BkQ,EAAM,UAAU,QAAQ,QAAS,GAAI,SAAU,QAAS,KAAM,CAAE,SAAU,EAAK,CAAC,EAChFA,EAAM,UAAU,QAAQ,OAAQ,GAAI,MAAO,OAAQ,CAAC,GAAI,SAAU,SAAU,UAAW,OAAQ,OAAQ,SAAU,QAAQ,EAAG,CAAE,SAAU,EAAK,CAAC,EAC9IA,EAAM,UAAU,QAAQ,OAAQ,GAAI,SAAU,YAAa,KAAM,CAAE,QAAU,GAAWnb,EAAE,KAAK,IAAM,OAAQ,SAAU,EAAK,CAAC,EAC7Hmb,EAAM,UAAU,QAAQ,SAAU,GAAI,SAAU,SAAU,KAAM,CAAE,SAAU,EAAK,CAAC,EAGlF,IAAaC,GAAb,MAAa,aAAajI,EAAY,CAClC,cACA,aAEA,MAAgB,CAAC,EACjB,eAAyB,CAAC,EAE1B,YAAY,EAAe,CACvB,MAAM,EACN,IAA+B,GAC/B,KAAK,cAAgB2I,EACrB,KAAK,aAAe,EACpB,KAAK,MAAM,CACf,CAEA,OAAQ,CAKJ,OAJA,KAAK,OAAO,CAAC,CAAC,EACd,KAAK,MAAQ,CAAC,EACd,KAAK,eAAiB,CAAC,EACvB,EAAE,KAAK,aACA,IACX,CAGA,cAAe,CACX,IAAMC,EAAS,KAAK,OAAO,EAC3B,KAAK,cAAc,CAAC,CAAC,EACrB,KAAK,cAAcA,EAAO,IAAI,SAAU,EAAO,CAC3C,OAAO9Q,EAAM,MAAM,CACvB,CAAC,CAAC,CACN,CAEA,cAAc,EAAI,EAAwB,CAGtC,OAFK,UAAU,QACf,KAAK,IAAI,EAAG3Z,EAAGuqB,CAAS,EACjB,MAFuB,KAAK,IAAI,CAAC,CAG5C,CAEA,WAAW,EAAI,EAAS,CACpB,OAAO,KAAK,UAAU,KAAK,MAAM,KAAM,SAAS,CACpD,CAGA,QAAS,CACT,CAEA,MAAM,EAAK,CACP,OAAO,KAAK,OAAO,CAAC,CAAC/G,EACzB,CAEA,aAAa,EAAG,EAAa,CACzB,OAAO,KAAK,OAAO,CAAC,CAAC,OAAO,SAAU,EAAc,EAAK,CAErD,MADA,GAAM,IAAMA,EACLkH,EAAa/Q,EAAM,MAAM,CAAC,CAAC,YAAY,IAAM3Z,EAAE,YAAY,EAAI2Z,EAAM,MAAM,IAAM3Z,CAC5F,CAAC,CAAC,CAAC,EACP,CAEA,KAAK,EAAI,EAAoB,CAIzB,OAHK,UAAU,QACf,KAAK,MAAQtB,EAAQsB,EAAE,IAAI,SAAU,EAAG,CAAE,OAAO4F,EAAE,IAAI,SAAU,EAAI,CAAE,OAAO+C,CAAI,CAAC,CAAG,CAAC,EAAI3I,EAC3F,KAAK,kBAAkB,EAChB,MAHuB,KAAK,KAIvC,CAEA,YAAa,CACT,IAAM7C,EAAU,KAChB,OAAO,KAAK,MAAM,IAAI,SAAU,EAAK,CACjC,OAAOkW,EAAI,IAAI,SAAU,EAAM,EAAK,CAChC,OAAOlW,EAAQ,OAAO,CAAC,CAACqmB,EAAI,CAAC,MAAMmH,CAAI,CAC3C,CAAC,CACL,CAAC,CACL,CAEA,eAAgB,CACZ,OAAO,KAAK,MAAM,IAAI,GACX,KAAK,OAAO,CAAC,CAAC,KAAK,EAAO,IACtBhR,EAAM,UAAUtG,EAAImQ,EAAI,CAClC,CACJ,CACL,CAEA,gBAAiB,CACb,OAAOl3B,SAAiB,KAAK,OAAO,CAAC,CAAC,IAAI,SAAU,EAAO,CAAE,OAAOqtB,EAAM,SAAS,CAAG,CAAC,CAAC,CAC5F,CAEA,cAAe,CACX,OAAOrtB,SAAiB,KAAK,cAAgB,KAAK,eAAiB,KAAK,YAAY,CACxF,CAEA,UAAW,CACP,OAAOA,SAAiB,CAAC,KAAK,aAAa,EAAG,KAAK,eAAe,CAAC,CAAC,CACxE,CAGA,kBAA0B,EAAM,CAS5B,MARA,EAAE,KAAK,aACH,KAAK,gBACD,UAAU,OACV,KAAK,eAAek3B,GAAOl3B,SAAiB,KAAK,MAAMk3B,EAAI,EAE3D,KAAK,eAAiB,KAAK,MAAM,IAAI,SAAU,EAAK,CAAE,OAAOl3B,SAAiB+mB,CAAG,CAAG,CAAC,GAGtF,IACX,CAEA,IAAI,EAAM,EAAI,EAAwB,CAClC,GAAI,UAAU,OAAS,EAAG,OAAOA,IAAQ,EAAI,KAAK,OAAO,CAAC,CAAC,IAAI,SAAU,EAAG,CAAE,OAAOzN,EAAE,MAAM,CAAG,CAAC,EAAI,KAAK,MAAMyN,EAAM,GACtH,GAAIA,IAAQ,EAAG,CACX,IAAMiX,EAAY,KAAK,OAAO,EAC9B,KAAK,OAAOtqB,EAAE,IAAI,SAAU,EAA+B,EAAK,CAcpD,OAbJ,OAAO2Z,GAAU,SACb4Q,GACQD,EAAU9G,IAAQ,IAAIqG,EAAM,CAAG,cAAclQ,CAAK,GAElD2Q,EAAU9G,IAAQ,IAAIqG,EAAM,CAAG,MAAMlQ,CAAK,EAGlD4Q,GACQD,EAAU9G,IAAQ,IAAIqG,EAAM,CAC/B,cAAclQ,EAAM,KAAK,CAAC,CAC1B,SAASA,EAAM,OAAO,GAGnB2Q,EAAU9G,IAAQ,IAAIqG,EAAM,CAC/B,MAAMlQ,EAAM,KAAK,CAAC,CAClB,SAASA,EAAM,OAAO,CAIvC,EAAG,IAAI,CAAC,CACZ,KACI,MAAK,MAAMtG,EAAM,GAAKrT,EACtB,KAAK,kBAAkBqT,EAAM,CAAC,EAElC,OAAO,IACX,CAEA,KAAK,EAAgB,CAKjB,OAJK,UAAU,QACf,KAAK,IAAI,EAAGrT,EAAE,EAAE,EAChB,KAAK,MAAQA,EAAE,OAAO,SAAU,EAAM,EAAK,CAAE,OAAOwjB,EAAM,CAAG,CAAC,EAC9D,KAAK,kBAAkB,EAChB,MAJuB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAKjE,CAGA,OAAO,EAAK,EAAgB,CAUxB,OATI,UAAU,OAAS,EAAU,CAAC,KAAK,OAAO,CAAC,CAACoH,EAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,SAAU,EAAK,EAAM,CAAE,OAAOvX,EAAIuX,EAAM,CAAC,CAAC,GAC9H5qB,EAAE,QAAQ,SAAU,EAAG,EAAK,CACpBwjB,IAAQ,EACR,KAAK,OAAO,CAAC,CAACoH,GAAO,IAAIf,EAAM,CAAC,CAAC,MAAM7pB,EAAE,EAAE,GAE3C,KAAK,MAAMwjB,EAAM,EAAE,CAACoH,GAAOhlB,EAC3B,KAAK,kBAAkB4d,EAAM,CAAC,EAEtC,EAAG,IAAI,EACA,KACX,CAEA,WAAW,EAAK,EAAe,CAM3B,OALI,UAAU,OAAS,EAAU,KAAK,MAAM,IAAI,SAAU,EAAK,EAAM,CAAE,OAAOnQ,EAAIuX,EAAM,CAAC,GACzF5qB,EAAE,QAAQ,SAAU,EAAG,EAAK,CACxB,KAAK,MAAMwjB,EAAI,CAACoH,GAAOhlB,EACvB,KAAK,kBAAkB4d,CAAG,CAC9B,EAAG,IAAI,EACA,KACX,CAEA,QAAQ,EAAgB,CAOpB,OANK,UAAU,QAGfxjB,EAAE,QAAQ,SAAU,EAAM,EAAK,CAC3B,KAAK,OAAOwjB,EAAKxjB,EAAEwjB,EAAI,CAC3B,EAAG,IAAI,EACA,MANuB,KAAK,OAAO,CAAC,CAAC,IAAI,SAAU,EAAM,EAAK,CACjE,OAAO,KAAK,OAAOA,CAAG,CAC1B,EAAG,IAAI,CAKX,CAGA,KAAK,EAAK,EAAK,EAAG,CAQd,OAPI,UAAU,OAAS,EAAU,KAAK,IAAInQ,CAAG,CAAC,CAACuX,IAC3CvX,IAAQ,EACR,KAAK,OAAO,CAAC,CAACuX,GAAO,IAAIf,EAAM,CAAC,CAAC,MAAM7pB,CAAC,GAExC,KAAK,MAAMqT,EAAI,CAACuX,GAAO5qB,EACvB,KAAK,kBAAkBqT,CAAG,GAEvB,KACX,CAGA,KAAK,EAAI,CACL,OAAO,KAAK,UAAU,KAAK,MAAM,KAAM,SAAS,CACpD,CAIA,cAAc,EAAS,EAAqB,CACxC,GAAI,CAAC,KAAK,OAAO,CAAC,CAAC,QAAU,CAAC,KAAK,MAAM,OACrC,MAAO,CAAC,EAEZ,IAAMwX,EAAgB,CAAC,EACnBC,EAAY,GA2BhB,GA1BAzW,EAAQ,QAAQ,SAAU,EAAS,EAAK,CACpC,IAAM0W,EAAe,CACjB,QAAS,GACT,KAAM,GACN,OAAQ,CAAC,CACb,EACA,GAAIC,EAAQ,YAAY,EACpB,EAAa,KAAOA,EAAQ,SAAS,EACjCD,EAAa,OAAS,QACtB,EAAa,QAAU,GAEvB,EAAY,GAGhBC,EAAQ,OAAO,CAAC,CAAC,QAAQ,SAAU,EAAO,CACtC,IAAMrR,EAAQ,KAAK,aAAamK,EAAO,EAAI,EAC3CiH,EAAa,OAAO,KAAKpR,EAAQA,EAAM,IAAM,EAAE,CACnD,EAAG,IAAI,MACJ,CACH,EAAa,QAAU,GACvB,IAAMA,EAAQ,KAAK,aAAaqR,EAAQ,GAAG,EAAG,EAAI,EAClDD,EAAa,OAAO,KAAKpR,EAAQA,EAAM,IAAM,EAAE,CACnD,CACAkR,EAAc,KAAKE,CAAY,CACnC,EAAG,IAAI,EAEHD,EAAW,CACX,IAAMrI,EAAS,CAAC,EA6BhB,OA5BA,KAAK,OAAOoI,EAAc,OAAO,SAAU,EAAc,CACrD,OAAOE,EAAa,UAAY,EACpC,CAAC,CAAC,CAAC,IAAI,SAAU,EAAG,CAChB,OAAOnlB,EAAE,OAAO,EACpB,CAAC,EAAG,SAAU,EAAQ,CAClB,IAAMyN,EAAMwX,EAAc,IAAI,SAAU,EAAc,CAClD,IAAMI,EAASF,EAAa,OAAO,GAC7BG,EAASH,EAAa,OAAO,GACnC,OAAQA,EAAa,KAArB,CACI,IAAK,MACD,OAAO1+B,IAAM8+B,EAAQ,SAAU,EAAG,CAAE,OAAOvlB,EAAEqlB,EAAS,CAAC,EAC3D,IAAK,MACD,OAAOh/B,KAAOk/B,EAAQ,SAAU,EAAG,CAAE,OAAOvlB,EAAEqlB,GAAUrlB,EAAEslB,EAAS,CAAC,EACxE,IAAK,MACD,OAAOn/B,IAAMo/B,EAAQ,SAAU,EAAG,CAAE,OAAOvlB,EAAEqlB,EAAS,CAAC,EAC3D,IAAK,MACD,OAAOj/B,IAAMm/B,EAAQ,SAAU,EAAG,CAAE,OAAOvlB,EAAEqlB,EAAS,CAAC,EAC3D,IAAK,QAGD,OAFA,QAAQ,KAAK,yBAA2BF,EAAa,IAAI,EAElD9+B,KAAOk/B,EAAQ,SAAU,EAAG,CAAE,OAAOvlB,EAAEqlB,GAAU,CAACC,CAAQ,CAAC,CAC1E,CAEA,OAAOC,EAAO,EAAE,CAACF,EACrB,CAAC,EAED,OADAxI,EAAO,KAAKpP,CAAG,EACRA,CACX,CAAC,EACMoP,CACX,CACI,OAAO,KAAK,MAAM,IAAI,SAAU,EAAK,CACjC,OAAOoI,EAAc,IAAI,SAAU,EAAc,CAC7C,IAAMI,EAASF,EAAa,OAAO,GAC7BG,EAASH,EAAa,OAAO,GACnC,OAAQA,EAAa,KAArB,CACI,IAAK,QACD,OAAO1X,EAAI4X,GAAU,CAACC,EAC1B,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACD,QAAQ,KAAK,yBAA2BH,EAAa,IAAI,CACjE,CACA,OAAO1X,EAAI4X,EACf,CAAC,CACL,CAAC,CAET,CAEA,YAAa,CACT,OAAO,IAAIlB,GAAW,IAAI,CAC9B,CAEA,SAAS,EAAgB,CACrB,OAAO,IAAI,WAAW,KAAMqB,CAAc,CAC9C,CAEA,WAAW,EAAgB,EAAa,CACpC,OAAO,IAAI,WAAW,KAAMA,EAAgBC,CAAU,CAC1D,CAEA,cAAc,EAAgB,EAAU,EAAY,EAAkB,GAAI,CACtE,IAAMluB,EAAU,KAChB,OAAO,IAAI,WAAW,KAAMiuB,EAAgB,SAAU,EAAQ,CAC1D,OAAQE,EAAR,CACI,KAAK,KACL,KAAK,IAAA,GACL,IAAK,GAED,MADA,GAAO,UAAY5lB,EAAO,OACnBA,EACX,QACI,IAAM2O,EAAUlX,EAAQ,cAAc,EAChCouB,EAASlX,EAAQ,QAAQmX,CAAU,EACnCC,EAAWpX,EAAQ,QAAQqX,CAAe,EAIhD,MAHA,GAAO,UAAY1B,GAAOsB,EAAS,CAAC5lB,EAAQ,SAAU,EAAO,CACzD,OAAQ,CAACnJ,EAAMgvB,IAAWE,GAAY,EAAI,CAAClvB,EAAMkvB,GAAY,KAAOA,GAAY,EAAI,CAAClvB,EAAMkvB,GAAY,EAC3G,CAAC,EACM/lB,CACf,CACJ,CAAC,CACL,CAGA,MAAc,EAAgB,EAAU,CAC9B0lB,aAA0B,QAC5B,EAAiB,CAACA,CAAc,GAEpC,IAAMO,EAAO,IAAI,KAMjB,OALAP,EAAe,QAAQ,SAAU,EAAK,CAClCO,EAAK,IAAI,SAAU,EAAG,CAClB,OAAO/lB,EAAE4d,EACb,CAAC,CACL,CAAC,EACMmI,CACX,CAEA,KAAK,EAAgB,CACjB,OAAO,KAAK,MAAMP,CAAc,CAAC,CAC5B,QAAQ,KAAK,KAAK,CAE3B,CAEA,OAAO,EAAgB,EAAQ,CAC3B,OAAO,KAAK,MAAMA,CAAc,CAAC,CAC5B,OAAOQ,CAAM,CAAC,CACd,QAAQ,KAAK,KAAK,CAE3B,CAGA,QAAS,CACL,OAAO,KAAK,MAAM,OAAS,CAC/B,CAEA,OAAQ,CACJ,OAAO,KAAK,OAAO,CAAC,CAAC,MACzB,CAEA,OAAQ,CAGJ,OAFA,KAAK,aAAa,EAClB,KAAK,KAAK,KAAK,QAAQ,CAAC,EACjB,IACX,CAEA,MAAM,EAAM,CACR,OAAO,IAAI,KAAK,CAAC,CACZ,OAAO,KAAK,OAAO,EAAGjtB,CAAI,CAAC,CAC3B,KAAK,KAAK,KAAK,EAAGA,CAAI,CAE/B,CAEA,OAAO,EAAQ,CACX,IAAMktB,EAAY,CAAC,EAInB,OAHA,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,SAAU,EAAK,EAAK,CACpC,EAAUjB,GAAOpH,CACrB,CAAC,EACM,IAAI,KAAK,CAAC,CACZ,OAAO,KAAK,OAAO,EAAG,EAAI,CAAC,CAC3B,KAAK,KAAK,KAAK,CAAC,CAAC,OAAO,SAAU,EAAK,CACpC,IAAK,IAAMnnB,KAAOmmB,EACd,GAAIA,EAAOnmB,KAASgX,EAAIwY,EAAUxvB,IAC9B,MAAO,GAGf,MAAO,EACX,CAAC,CAAC,CAEV,CAEA,QAAQ,EAAS,CACPgY,aAAmB,QACrB,EAAU,CAACA,CAAO,GAEtB,IAAMoO,EAAS,CAAC,EAkBhB,OAjBApO,EAAQ,QAAQ,SAAU,EAAK,CAC3B,IAAMuX,EAAS,KAAK,OAAOhB,EAAK,SAAU,EAAQ,CAC9C,OAAOO,EAAO,MAClB,CAAC,EACD1I,EAAO,KAAKmJ,CAAM,EAClB,IAAM/b,EAAO+b,EAAO,IAAI,SAAU,EAAG,CAAE,OAAOhmB,EAAE,GAAK,CAAC,EACtD,KAAK,OAAO,CAAC,CAACglB,EAAI,CAAC,UAAY,SAAS/a,EAAM,SAAS,EACvD,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,SAAW,SAAS/a,EAAM,QAAQ,EACrD,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,SAAW,CAAC,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,UAAY,SAAS/a,EAAM,QAAQ,EACrF,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,UAAY,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,UAAY,SAAS/a,EAAM,SAAS,EACtF,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,WAAa,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,UAAY,SAAS/a,EAAM,UAAU,EACxF,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,iBAAmBR,GACtC,KAAK,OAAO,CAAC,CAACQ,EAAI,CAAC,OAAS,CAAC,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,YAAc,SAAS/a,EAAM,MAAM,EACnF,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,aAAeR,GAClC,KAAK,OAAO,CAAC,CAACQ,EAAI,CAAC,OAAS,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,UAAY,CAAC,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,YAAc,CAAC,KAAK,OAAO,CAAC,CAACA,EAAI,CAAC,QAAU,SAAS/a,EAAM,MAAM,EAChJ,KAAK,OAAO,CAAC,CAAC+a,EAAI,CAAC,aAAeR,EACtC,EAAG,IAAI,EACA3H,CACX,CAGA,QAAQ,EAAgB,CAqBpB,OApBK,UAAU,QAOf,KAAK,MAAM,EACX,KAAK,KAAKziB,EAAE,IAAI,SAAU,EAAK,CAC3B,IAAMyiB,EAAS,CAAC,EAChB,IAAK,IAAMpmB,KAAOgX,EAAK,CACnB,IAAIkY,EAAS,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQlvB,CAAG,EAChCkvB,EAAS,IACT,EAAS,KAAK,OAAO,CAAC,CAAC,OACvB,KAAK,OAAO,CAAC,CAAC,KAAK,IAAI1B,EAAM,CAAC,CAAC,MAAMxtB,CAAG,CAAC,GAE7C,EAAOkvB,GAAUlY,EAAIhX,EACzB,CACA,OAAOomB,CACX,EAAG,IAAI,CAAC,EACD,MApBuB,KAAK,MAAM,IAAI,SAAU,EAAK,CACxD,IAAMA,EAAS,CAAC,EAIhB,OAHA,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,SAAU,EAAK,EAAK,CACpC,EAAOmI,GAAOvX,EAAImQ,EACtB,CAAC,EACMf,CACX,EAAG,IAAI,CAeX,CAIA,KAAK,EAAoC,CAMrC,OALK,UAAU,QACX,OAAQziB,GAAO,WACf,EAAI,KAAK,MAAMA,CAAC,GAEpB,KAAK,QAAQA,CAAC,EACP,MALuB,KAAK,UAAU,KAAK,QAAQ,EAAG,KAAM,IAAI,CAM3E,CAIA,IAAI,EAA2B,CAC3B,GAAI,CAAC,UAAU,OAAQ,CACnB,IAAMiO,EAAO,SAAS,cAAc,KAAK,EACzC,OAAOvhB,GAAgB,KAAK,KAAK,CAAC,CAAC,IAAI,GAC5B2mB,EAAI,IAAI,GACJ1mB,qBAA6Bg+B,EAAM1c,CAAI,CACjD,CACJ,CAAC,CACN,CAEA,OADA,KAAK,QAAQrhB,GAAWoT,CAAC,CAAC,EACnB,IACX,CAIA,IAAI,EAA2B,CAG3B,OAFK,UAAU,QACf,KAAK,QAAQlT,GAAWkT,CAAC,CAAC,EACnB,MAFuBnT,GAAgB,KAAK,KAAK,CAAC,CAG7D,CACJ,EACA,GAAK,UAAU,QAAU,wBAMzBi9B,GAAK,UAAU,QAAQ,SAAU,CAAC,EAAG,gBAAiB,QAAQ,EAC9D,IAAMgC,GAAahC,GAAK,UAAU,OAClC,GAAK,UAAU,OAAS,SAAU,EAAI,EAAQ,CAE1C,OADK,UAAU,OACRgC,GAAW,KAAK,KAAMptB,EAAQsB,EAAE,IAAI,SAAU,EAAG,CAAE,OAAO4F,EAAE,MAAM,CAAG,CAAC,EAAI5F,CAAC,EADpD8rB,GAAW,MAAM,KAAM,SAAS,CAElE,EAGA,IAAa/B,GAAb,MAAa,UAAW,CACpB,MACA,YACA,oBACA,eACA,uBAEA,YAAY,EAAM,CACd,KAAK,MAAQgC,CACjB,CAEA,UAAW,CACP,IAAMxvB,EAAQ,KAAK,MAAM,GAAG,MAAM,KAAK,MAAO,SAAS,EACvD,OAAOA,IAAU,KAAK,MAAQ,KAAOA,CACzC,CAEA,QAAS,CACL,IAAMA,EAAQ,KAAK,MAAM,GAAG,MAAM,KAAK,MAAO,SAAS,EACvD,OAAOA,IAAU,KAAK,MAAQ,KAAOA,CACzC,CAEA,MAAO,CACH,OAAO,KAAK,KAChB,CACA,QAAQ,EAAI,CAGR,OAFK,UAAU,QACf,KAAK,MAAM,cAAcyD,CAAC,EACnB,MAFuB,KAAK,MAAM,cAAc,CAG3D,CACA,QAAQ,EAAI,CAGR,OAFK,UAAU,QACf,KAAK,MAAM,WAAWA,CAAC,EAChB,MAFuB,KAAK,MAAM,WAAW,CAGxD,CACA,eAAgB,CAKZ,OAJI,KAAK,yBAA2B,KAAK,MAAM,SAAS,IACpD,KAAK,uBAAyB,KAAK,MAAM,SAAS,EAClD,KAAK,eAAiB,KAAK,MAAM,cAAc,GAE5C,KAAK,cAChB,CACA,YAAa,CAKT,OAJI,KAAK,sBAAwB,KAAK,MAAM,SAAS,IACjD,KAAK,oBAAsB,KAAK,MAAM,SAAS,EAC/C,KAAK,YAAc,KAAK,MAAM,WAAW,GAEtC,KAAK,WAChB,CACA,WAAqB,EAAO,CAQxB,OAPIgsB,IACIA,EAAK,QAEEA,EAAK,WACL,KAAK,cAAc,EAG3B,KAAK,QAAQ,CACxB,CACA,KAAK,EAAG,CACJ,OAAO,WAAW,UAAU,QAAQ,MAAM,KAAM,SAAS,CAC7D,CACJ,EAEa,WAAb,cAAgCjC,EAAW,CACvC,gBACA,QACA,cACA,MAEA,YAAY,EAAM,EAAS,OAAS,CAChC,MAAMgC,CAAI,EACJ1X,aAAmB,QACrB,EAAU,CAACA,CAAO,GAEtB,KAAK,gBAAkBA,EAAQ,OAAO,SAAU,EAAQ,CAAE,OAAOI,CAAQ,CAAC,CAAC,CAAC,IAAI,SAAU,EAAQ,CAK9F,OAJQ,OAAOA,GACN,SACM,KAAK,MAAM,aAAaA,CAAM,CAAC,CAAC,IAExCA,CACX,EAAG,IAAI,EAEP,SAAmB,SAAU,EAAG,CAAE,OAAO7O,CAAG,EAC5C,KAAK,QAAU,MACnB,CAEA,MAAO,CACH,GAAI,KAAK,gBAAkB,KAAK,MAAM,SAAS,EAAG,CAC9C,KAAK,cAAgB,KAAK,MAAM,SAAS,EAEzC,IAAM+lB,EAAO,IAAI,KACjB,KAAK,gBAAgB,QAAQ,SAAU,EAAK,CACxCA,EAAK,IAAI,SAAU,EAAG,CAClB,OAAO/lB,EAAE4d,EACb,CAAC,CACL,CAAC,EACD,KAAK,MAAQmI,EACR,OAAO,KAAK,OAAO,CAE5B,CACA,OAAO,KAAK,KAChB,CACA,QAAQ,EAAO,CACX,OAAO,KAAK,KAAK,CAAC,CAAC,QAAQ,KAAK,WAAWK,CAAI,CAAC,CACpD,CACA,IAAI,EAAM,CACN,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,WAAWA,CAAI,CAAC,CAChD,CACA,MAAM,EAAM,CACR,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,WAAWA,CAAI,EAAG,EAAI,CACtD,CACA,UAAU,EAAS,EAAU,CAAC,EAAG,CAC7B,IAAIvJ,EAAS,CAAC,EAUd,OATA/S,EAAQ,QAAQ,SAAU,EAAO,CACzBuc,aAAiB,MACjBxJ,EAAO,KAAKyJ,EAAQ,OAAO,CAACD,CAAK,CAAC,CAAC,EAC5BA,EAAM,kBAAkB,MAC/B,EAASxJ,EAAO,OAAO,KAAK,UAAUwJ,EAAM,OAAQC,EAAQ,OAAO,CAACD,EAAM,GAAG,CAAC,CAAC,CAAC,EACzEA,EAAM,iBAAiB,QAC9B,EAASxJ,EAAO,OAAO,KAAK,UAAUwJ,EAAM,MAAOC,EAAQ,OAAO,CAACD,EAAM,GAAG,CAAC,CAAC,CAAC,EAEvF,EAAG,IAAI,EACAxJ,CACX,CACA,KAAK,EAAM,CACP,OAAO,KAAK,UAAU,KAAK,QAAQuJ,CAAI,CAAC,CAC5C,CACJ,EAGA,SAAS,SAAS,EAAO,EAAM,CAI3B,OAHMG,aAAiB,QACnB,EAAQ,CAACA,CAAK,GAEXA,EAAM,OAAO,SAAU,EAAG,CAAE,OAAOvmB,IAAM,EAAI,CAAC,CAAC,CAAC,MAAM0N,CAAI,CACrE,CACA,SAAS,UAAU,EAAM,CACrB,OAAO,OAAOqX,GAAS,SAC3B,CACA,SAAS,SAAS,EAAM,CACpB,OAAO,OAAOA,GAAS,UAAY,CAAC,MAAMA,CAAI,CAClD,CACA,SAAS,SAAS,EAAM,CACpB,OAAO,OAAOA,GAAS,QAC3B,CACA,IAAMyB,GAAkB,CACxB,EACMC,GAAc,CAChB,WACA,QACJ,EACMC,GAAc,CAChB,eACA,YACA,UACJ,EACAD,GAAY,QAAQ,SAAU,EAAG,CAC7BC,GAAY,QAAQ,SAAU,EAAG,CAC7BF,GAAgB,KAAKxmB,EAAI,IAAM,CAAC,CACpC,CAAC,CACL,CAAC,EACD,SAAS,aAAa,EAAS,EAAM,CACjC,IAAK,IAAItL,EAAI,EAAGA,EAAIojB,EAAQ,OAAQ,EAAEpjB,EAElC,GADavN,GAAY2wB,EAAQpjB,EAAE,CAAC,CAACqwB,CACjC,EAEA,MADA,IAAkBjN,EAAQpjB,GACnBojB,EAAQpjB,GAGvB,OAAO,IACX,CACA,SAAS,WAAW,EAAM,CACtB,OAAO,aAAa8xB,GAAiBzB,CAAI,CAC7C,CACA,SAAS,OAAO,EAAM,CAClB,OAAO,aAAa0B,GAAa1B,CAAI,CACzC,CACA,SAAS,OAAO,EAAM,CAClB,OAAO,aAAa2B,GAAa3B,CAAI,CACzC,CACA,SAAS,UAAU,EAAM,CACrB,MAAO,4LAAiW,CAAC,CAAC,QAAQ,OAAOA,CAAI,CAAC,CAAC,YAAY,CAAC,GAAK,CACrZ,C,sIC/4BMgC,GAAW,aACjB,SAAgB,SAAU,CACtB,OAAOA,EACX,CAEA,IAAaH,IAAa,UAAY,CAClC,IAAMI,EAAK,UAAU,UACjBC,EACEC,EAAIF,EAAG,MAAM,8DAA8D,GAAK,CAAC,EAQvF,MAPI,WAAW,KAAKE,EAAE,EAAE,GACpB,EAAM,kBAAkB,KAAKF,CAAE,GAAK,CAAC,EAC9B,WAAWC,EAAI,EAAE,GAExB,QAAQ,KAAKC,EAAE,EAAE,EACV,WAAWA,EAAE,EAAE,EAEnB,IACX,EAAA,CAAG,EAEUL,GAAOD,KAAc,KACrBE,GAAkBD,IAAQD,IAAa,GAEhDO,GAAkB,KACtB,SAAgB,mBAAoB,CAChC,GAAIA,KAAoB,KAAM,CAC1B,IAAMC,EAAQ,SAAS,cAAc,KAAK,EAC1C,EAAM,MAAM,WAAa,SACzB,EAAM,MAAM,MAAQ,QAEpB,EAAM,MAAM,gBAAkB,YAE9B,SAAS,KAAK,YAAYA,CAAK,EAE/B,IAAMC,EAAgBD,EAAM,YAC5B,EAAM,MAAM,SAAW,SAEvB,IAAME,EAAQ,SAAS,cAAc,KAAK,EAC1C,EAAM,MAAM,MAAQ,OACpBF,EAAM,YAAYE,CAAK,EAEvB,IAAMC,EAAkBD,EAAM,YAE9BF,EAAM,WAAW,YAAYA,CAAK,EAElC,GAAkBC,EAAgBE,CACtC,CACA,OAAOJ,EACX,CAGA,OAAgB,iBAAoB,OAAe,kBAAqB,OAAe,wBAA2B,OAAe,qBAAuB,SAAU,EAAU,CAExK,KAAK,SAAW9uB,EAChB,KAAK,UAAY,CAAC,EAElB,IAAM,iBAAmB,SAAU,EAAW,EAAS,EAAM,CACzD,KAAK,SAAWmvB,EAChB,KAAK,QAAUxH,EACf,KAAK,KAAOvmB,CAChB,EACA,iBAAiB,UAAY,CACzB,YAAY,EAAK,CACb,IAAMguB,EAAW,CACb,KAAM,KAAK,KACX,OAAQ,KAAK,QACb,WAAY,CAAC,EACb,aAAc,CAAC,EACf,gBAAiB9H,EAAI,OAAO,gBAC5B,YAAaA,EAAI,OAAO,YACxB,cAAe,KACf,mBAAoB,KACpB,SAAU,IACd,EACA,KAAK,SAAS,CAAC8H,CAAQ,CAAC,CAC5B,CACJ,EAEA,KAAK,QAAU,SAAU,EAAS,EAAQ,CACtC,GAAIC,EAAO,WAAY,CACnB,IAAM1uB,EAAW,IAAI,iBAAiB,KAAK,SAAUgnB,EAAS,YAAY,EAC1E,KAAK,UAAU,KAAKhnB,CAAQ,EAC5BgnB,EAAQ,iBAAiB,kBAAmBhnB,EAAU,EAAI,CAC9D,CAEA,GAAI0uB,EAAO,cAAe,CACtB,IAAM1uB,EAAW,IAAI,iBAAiB,KAAK,SAAUgnB,EAAS,eAAe,EAC7E,KAAK,UAAU,KAAKhnB,CAAQ,EAC5BgnB,EAAQ,iBAAiB,2BAA4BhnB,EAAU,EAAI,CACvE,CAEA,GAAI0uB,EAAO,UAAW,CAClB,IAAM1uB,EAAW,IAAI,iBAAiB,KAAK,SAAUgnB,EAAS,WAAW,EACzE,KAAK,UAAU,KAAKhnB,CAAQ,EAC5BgnB,EAAQ,iBAAiB,kBAAmBhnB,EAAU,EAAI,EAC1DgnB,EAAQ,iBAAiB,iBAAkBhnB,EAAU,EAAI,CAC7D,CACJ,EAEA,KAAK,WAAa,UAAY,CAC1B,KAAK,UAAU,QAAQ,SAAU,EAAM,CACnC,OAAQojB,EAAK,KAAb,CACI,IAAK,aACDA,EAAK,QAAQ,oBAAoB,kBAAmBA,EAAM,EAAI,EAC9D,MACJ,IAAK,gBACDA,EAAK,QAAQ,oBAAoB,2BAA4BA,EAAM,EAAI,EACvE,MACJ,IAAK,YACDA,EAAK,QAAQ,oBAAoB,iBAAkBA,EAAM,EAAI,EAC7DA,EAAK,QAAQ,oBAAoB,kBAAmBA,EAAM,EAAI,CAEtE,CACJ,CAAC,EACD,KAAK,UAAY,CAAC,CACtB,CACJ,EAEA,KAAc,KAAQ,KAAa,MAAQ,SAAU,EAAG,CAKpD,MAJA,GAAI,CAAC3mB,EACDA,IAAM,GAAK,MAAMA,CAAC,EACXA,EAEJA,EAAI,EAAI,EAAI,EACvB,EC7EA,IAAIkyB,GAAW,EACOC,EAAtB,MAAsB,eAAe3L,EAAY,CAC7C,OAAO,QAEP,KACA,YAAiC,GAEjC,IAAgB,IAAIiI,GACpB,KACA,SACA,MACA,aACA,SACA,SACA,UAAiC,CAAC,EAElC,QACA,oBACA,cAEA,SAEA,aAEA,gBAEA,aAAc,CACV,MAAM,EACN,KAAK,IAAM,OAAO,QAAU,KAE5B,KAAK,IAAM,IAAIA,GACf,KAAK,KAAO,CAAE,EAAG,EAAG,EAAG,CAAE,EACzB,KAAK,MAAQ,CAAE,MAAO,EAAG,OAAQ,CAAE,EACnC,KAAK,aAAe,EACpB,KAAK,SAAW,GAEhB,KAAK,QAAU,KACf,KAAK,oBAAsB,KAC3B,KAAK,cAAgB,KAErB,KAAK,SAAW98B,eAAS,IAAI,EAE7B,KAAK,aAAe,EAEf,OAAe,eACX,OAAe,QAAU,IAAA,KAC1B,OAAgB,MAAQ,CAAC,GAE7B,OAAgB,MAAM,KAAK,KAAO,MAEjC,OAAe,cAChB,KAAK,WAAY,OAAe,YAAY,CAEpD,CAEA,gBAAiB,CACb,OAAO,KAAK,IAAI,eAAe,CACnC,CAEA,cAAe,CACX,OAAO,KAAK,IAAI,aAAa,CACjC,CAEA,WAAW,EAA0B,CAEjC,OADA,KAAK,IAAI,KAAKgT,CAAC,EACR,IACX,CAEA,UAAU,EAAiB,CAEvB,OADA,KAAK,IAAI,IAAIA,CAAC,EACP,IACX,CAEA,UAAU,EAAiB,CAEvB,OADA,KAAK,IAAI,IAAIA,CAAC,EACP,IACX,CAEA,OAAO,EAA4B,OAAQ,CACvC,OAAQA,EAAR,CACI,IAAK,MACD,OAAO,KAAK,IAAI,IAAI,EACxB,IAAK,MACD,OAAO,KAAK,IAAI,IAAI,EAExB,QACI,OAAO,KAAK,IAAI,KAAK,CAC7B,CACJ,CAEA,UAAU,EAAS,CACf,IAAM7C,EAAU,KACVswB,EAAa,CAACC,CAAO,EACrBC,EAAmB,IAAI,iBAAiB,SAAU,EAAW,CAC/D,IAAIC,EAAQ,GACZC,EAAU,QAAQ,SAAU,EAAU,CAClC,IAAK,IAAIvzB,EAAI,EAAGA,EAAI+yB,EAAS,aAAa,OAAQ,EAAE/yB,EAAG,CACnD,IAAMa,EAAOkyB,EAAS,aAAa,KAAK/yB,CAAC,EACrCmzB,EAAW,QAAQtyB,CAAI,GAAK,GAAKgC,EAAQ,UACzC,EAAQ,GACRwwB,EAAiB,WAAW,EAEpC,CACJ,CAAC,EACGC,GACA,QAAQ,MAAM,UAAYzwB,EAAQ,GAAG,EAAI,MAAQA,EAAQ,QAAQ,EAAI,4FAA8F,CAE3K,CAAC,EACG2wB,EAAQJ,EAAQ,WACpB,KAAOI,GACHH,EAAiB,QAAQG,EAAO,CAAE,UAAW,EAAK,CAAC,EACnDL,EAAW,KAAKK,CAAK,EACrB,EAAQA,EAAM,UAEtB,CAEA,aAAsB,CAClB,OAAO,KAAK,YAChB,CAKA,QAAQ,EAAc,EAAsC,CAGxD,OAFK,UAAU,QACf,KAAK,IAAI,cAAc9tB,EAAGuqB,CAAS,EAC5B,MAFuB,KAAK,IAAI,cAAc,CAGzD,CAEA,UAAoB,EAAwB,CACxC,OAAO,KAAK,QAAQ,CAAC,CAAC,QAAQ9V,CAAM,CACxC,CAEA,YAAyB,EAAgB,EAA+B,CACpE,OAAO8W,EAAS,MAAUwC,EAAW,GAAO1a,EAAIkY,EACpD,CAEA,SAAsB,EAAgB,EAA+B,CACjE,OAAO,KAAK,YAAe,KAAK,UAAU9W,CAAM,EAAGsZ,CAAQ,CAC/D,CAEA,YAAa,CACT,OAAO,KAAK,IAAI,WAAW,CAC/B,CAEA,eAAgB,CACZ,OAAO,KAAK,IAAI,cAAc,CAClC,CAIA,KAAK,EAAqB,CAGtB,OAFK,UAAU,QACf,KAAK,IAAI,WAAW/tB,CAAC,EACd,MAFuB,KAAK,IAAI,WAAW,CAGtD,CAEA,WAAY,CACR,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,SAAU,EAAK,CAAE,OAAOqT,EAAI,MAAM,CAAC,CAAG,CAAC,CAClE,CAEA,YAAY,EAAoB,KAAK,QAAQ,EAAG,EAAY,KAAK,KAAK,EAAG,CACrE,IAAMoP,EAAS,CAAC,EAehB,OAdAxmB,EAAK,QAAQ,SAAU,EAAK,EAAQ,CAChCoY,EAAQ,OAAO,SAAU,EAAM,EAAK,CAAE,OAAOmP,EAAM,CAAG,CAAC,CAAC,CAAC,QAAQ,SAAU,EAAM,EAAK,CAClF,IAAMb,EAAMtP,EAAImQ,EAAM,GACtB,GAAWb,IAAQ,OAAa,CAC5B,IAAMqL,EAAU,CACZ,SACA,OAAQxK,EAAM,EACd,MAAOnQ,EAAI,GACX,MAAOsP,CACX,EACAF,EAAO,KAAKuL,CAAO,CACvB,CACJ,EAAG,IAAI,CACX,EAAG,IAAI,EACAvL,CACX,CAEA,SAAS,EAAoB,CACzB,GAAI,CAACpP,EAAK,MAAO,CAAC,EAClB,IAAMoP,EAAc,CAAC,EAOrB,OANA,KAAK,OAAO,CAAC,CAAC,QAAQ,SAAU,EAAO,EAAK,CACxC,EAAO9I,EAAM,cAAc,GAAKA,EAAM,MAAM,GAAKtG,EAAImQ,EACzD,CAAC,EACGnQ,EAAI,SAAW,KAAK,QAAQ,CAAC,CAAC,OAAS,IACvC,EAAO,SAAWA,EAAI,KAAK,QAAQ,CAAC,CAAC,SAElCoP,CACX,CAIA,IAAI,EAAuB,CAQvB,OAPK,UAAU,QACf,KAAK,KAAOziB,EACR,KAAK,iBACL,KAAK,gBACA,KAAK,YAAa,aAAeA,EAAE,EAAI,IAAMA,EAAE,EAAI,UAAY,KAAK,aAAe,GAAG,EAGxF,MAPuB,KAAK,IAQvC,CAIA,EAAE,EAAmB,CAGjB,OAFK,UAAU,QACf,KAAK,IAAI,CAAE,EAAGA,EAAG,EAAG,KAAK,KAAK,CAAE,CAAC,EAC1B,MAFuB,KAAK,KAAK,CAG5C,CAIA,EAAE,EAAmB,CAGjB,OAFK,UAAU,QACf,KAAK,IAAI,CAAE,EAAG,KAAK,KAAK,EAAG,EAAGA,CAAE,CAAC,EAC1B,MAFuB,KAAK,KAAK,CAG5C,CAIA,KAAK,EAAkB,CASnB,OARK,UAAU,QACf,KAAK,MAAQA,EACT,KAAK,iBACL,KAAK,gBACA,KAAK,QAASA,EAAE,KAAK,CAAC,CACtB,KAAK,SAAUA,EAAE,MAAM,EAGzB,MARuB,KAAK,KASvC,CAIA,MAAM,EAAmB,CAGrB,OAFK,UAAU,QACf,KAAK,KAAK,CAAE,MAAOA,EAAG,OAAQ,KAAK,MAAM,MAAO,CAAC,EAC1C,MAFuB,KAAK,MAAM,KAG7C,CAIA,OAAO,EAAmB,CAGtB,OAFK,UAAU,QACf,KAAK,KAAK,CAAE,MAAO,KAAK,MAAM,MAAO,OAAQA,CAAE,CAAC,EACzC,MAFuB,KAAK,MAAM,MAG7C,CAEA,OAAO,EAAc,EAAe,CAAE,MAAO,EAAG,OAAQ,CAAE,EAAG,CACzD,IAAIsO,EACAC,EACJ,GAAIrQ,GAAQA,EAAK,OAASA,EAAK,OAC3B,EAAQA,EAAK,MACb,EAASA,EAAK,WACX,CACH,IAAM+vB,EAAQ,OAAO,iBAAiB,KAAK,QAAS,IAAI,EACxD,EAAQ,WAAWA,EAAM,iBAAiB,OAAO,CAAC,EAAI1e,EAAM,MAC5D,EAAS,WAAW0e,EAAM,iBAAiB,QAAQ,CAAC,EAAI1e,EAAM,MAClE,CAKA,OAJA,KAAK,KAAK,CACN,QACA,QACJ,CAAC,EACM,IACX,CAIA,MAAM,EAAmB,CAQrB,OAPK,UAAU,QACf,KAAK,aAAevP,EAChB,KAAK,iBACL,KAAK,gBACA,KAAK,YAAa,aAAeA,EAAE,EAAI,IAAMA,EAAE,EAAI,UAAY,KAAK,aAAe,GAAG,EAGxF,MAPuB,KAAK,YAQvC,CAIA,QAAQ,EAAoB,CASxB,OARK,UAAU,QACf,KAAK,SAAWA,EACZ,KAAK,UACL,KAAK,SACA,MAAM,aAAc,KAAK,SAAW,KAAO,QAAQ,CAAC,CACpD,MAAM,UAAW,KAAK,SAAW,KAAO,CAAC,EAG3C,MARuB,KAAK,QASvC,CAIA,QAAQ,EAAoB,CAMxB,OALK,UAAU,QACf,KAAK,SAAWA,EACZ,KAAK,UACL,KAAK,SAAS,MAAM,UAAW,KAAK,SAAW,KAAO,MAAM,EAEzD,MALuB,KAAK,QAMvC,CAIA,SAAS,EAAsB,CAG3B,OAFK,UAAU,QACf,KAAK,UAAYA,EACV,MAFuB,KAAK,SAGvC,CAEA,SAAmB,IAAI,OAAO,CAAC,CAAC,EAGhC,QAAQ,EAAa,EAAyB,CAG1C,OAFI,UAAU,OAAS,EAAU,KAAK,SAAS3D,IAC/C,KAAK,SAASA,GAAOE,EACd,KACX,CAEA,SAAS,EAAU,CACf,SAAS,KAAK,EAAG,EAAU,CACvB,SAAS,UAAU,EAAI,EAAW,CAC9B,IAAIkM,EAAKylB,EAAKC,EAId,OAHI,KAAK,IAAI1lB,CAAE,EAAI0lB,EAAY,KAAK,IAAI1lB,CAAE,IACtC,GAAM0lB,EAAY,KAAK,IAAI1lB,CAAE,IAAMA,EAAK,EAAI,EAAI,KAE7CA,CACX,CACA,OAAOpN,EAAI,UAAUA,EAAG+yB,CAAQ,CACpC,CACA,IAAM/qB,EAAI,KAAK,KAAK,KAAK,EAAI,KAAK,MAAM,MAAQ,EAAGgrB,CAAQ,EACrDtvB,EAAI,KAAK,KAAK,KAAK,EAAI,KAAK,MAAM,OAAS,EAAGsvB,CAAQ,EACtD,EAAI,KAAK,KAAK,KAAK,EAAI,KAAK,MAAM,MAAQ,EAAGA,CAAQ,EACrDvwB,EAAI,KAAK,KAAK,KAAK,EAAI,KAAK,MAAM,OAAS,EAAGuwB,CAAQ,EACtD3f,EAAI,EAAIrL,EACRO,EAAI9F,EAAIiB,EACd,MAAO,CAAC,CAAE,EAAGsE,EAAIqL,EAAI,EAAG,EAAG3P,EAAI6E,EAAI,CAAE,EAAG,CAAE,MAAO8K,EAAG,OAAQ9K,CAAE,CAAC,CACnE,CAGA,SAAS,EAAwB,CAC7B,GAAI,CAACgiB,EACD,OAAO,KAEX,IAAMxT,EAAUplB,eAAS44B,CAAO,EAChC,GAAIxT,EAAS,CACT,IAAMkQ,EAASlQ,EAAQ,MAAM,EAC7B,GAAIkQ,GAAUA,aAAkB,OAC5B,OAAOA,CAEf,CACA,OAAO,IACX,CAEA,eAAgB,CACZ,OAAO,IACX,CAEA,mBAAmB,EAAyB,CAExC,GADA,IAAsB,KAAK,QAAU,KAAK,QAAQ,WAAa,KAC3DsD,EAAS,CACT,IAAMtD,EAAS,KAAK,SAASsD,CAAO,EACpC,GAAItD,EACA,OAAOA,EACJ,GAAIsD,EAAQ,WACf,OAAO,KAAK,mBAAmBA,EAAQ,UAAU,CAEzD,CACA,OAAO,IACX,CAEA,cAAc,EAA+B,CAOzC,OANKA,EAGDA,EAAQ,UAAY,MACbA,EAEJ,KAAK,cAAcA,EAAQ,UAAU,EALjC,IAMf,CAEA,mBAAoB,CAChB,IAAItD,EAAS,KAAK,mBAAmB,KAAK,OAAO,EACjD,KAAOA,GAAQ,CACX,IAAMG,EAASH,EAAO,cAAc,EACpC,GAAIG,EACA,OAAOA,EAEX,EAAS,KAAK,mBAAmBH,EAAO,QAAQ,UAAU,CAC9D,CACA,OAAO,IACX,CAEA,eAAe,EAAwB,CACnC,OAAO,KAAK,sBAAsB,CAACyF,CAAO,CAAC,CAC/C,CAEA,sBAAsB,EAA2B,CAC7C,IAAIzF,EAAS,KAAK,mBAAmB,KAAK,OAAO,EACjD,KAAOA,GAAQ,CACX,GAAIgM,EAAW,QAAQhM,EAAO,QAAQ,CAAC,IAAM,GACzC,OAAOA,EAEX,EAAS,KAAK,mBAAmBA,EAAO,QAAQ,UAAU,CAC9D,CACA,OAAO,IACX,CAEA,eAAe,EAAS,EAAG,EAAG,CAC1B,IAAMlV,EAAO,KAAK,cAAcwY,CAAO,EACvC,GAAI,CAACxY,EACD,OAAO,KAEX,IAAI+Z,EAAM/Z,EAAK,eAAe,EACxBmhB,EAAM3I,EAAQ,OAAO,EAC3B,EAAMuB,EAAI,gBAAgBoH,CAAG,EAC7B,IAAM9L,EAAc,CAChB,EAAG0E,EAAI,EACP,EAAGA,EAAI,CACX,EACA,GAAIzY,IAAM,IAAA,IAAa9K,IAAM,IAAA,GAAW,CACpC,IAAI1F,EAAOkP,EAAK,eAAe,EAC/B,EAAK,EAAIsB,EACT,EAAK,EAAI9K,EACT,EAAO1F,EAAK,gBAAgBqwB,CAAG,EAC/B,EAAO,MAAQrwB,EAAK,EAAIipB,EAAI,EAC5B,EAAO,OAASjpB,EAAK,EAAIipB,EAAI,CACjC,CACA,OAAO1E,CACX,CAEA,YAAa,CACT,OAAO,KAAK,eAChB,CAEA,aAAc,CACV,GAAI,KAAK,MAAM,OAAS,KAAK,MAAM,OAAQ,CACvC,IAAM+L,EAAS,KAAK,eAAe,KAAK,gBAAgB,KAAK,EAAG,KAAK,MAAM,MAAO,KAAK,MAAM,MAAM,EACnG,GAAIA,IAAW,CAAC,KAAK,UAAYA,EAAO,IAAM,KAAK,SAAS,GAAKA,EAAO,IAAM,KAAK,SAAS,GAAKA,EAAO,QAAU,KAAK,SAAS,OAASA,EAAO,SAAW,KAAK,SAAS,QAAS,CAC9K,IAAMC,EAASD,EAAO,MAAQ,KAAK,MAAM,MACnCE,EAASF,EAAO,OAAS,KAAK,MAAM,OAC1C,KAAK,oBACA,MAAM,OAAQA,EAAO,EAAKA,EAAO,MAAQC,EAAU,EAAI,IAAI,CAAC,CAC5D,MAAM,MAAOD,EAAO,EAAKA,EAAO,OAASE,EAAU,EAAI,IAAI,CAAC,CAC5D,MAAM,QAASF,EAAO,MAAQC,EAAS,IAAI,CAAC,CAC5C,MAAM,SAAUD,EAAO,OAASE,EAAS,IAAI,EAElD,IAAMC,EAAY,SAAWF,EAAS,IAAMC,EAAS,IACrD,KAAK,oBACA,MAAM,YAAaC,CAAS,CAAC,CAC7B,MAAM,iBAAkBA,CAAS,CAAC,CAClC,MAAM,gBAAiBA,CAAS,CAAC,CACjC,MAAM,oBAAqBA,CAAS,CAAC,CACrC,MAAM,eAAgBA,CAAS,CAExC,CACA,KAAK,SAAWH,CACpB,CACJ,CAEA,QAAQ,EAAU,GAAO,EAAQ,GAAa,CAC1C,MAAO,CACH,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CACZ,CACJ,CAEA,SAAS,EAA0B,EAAmB,UAAW,EAAmB,GAAI,EAAgB,GAA2B,CAC/H,OAAO,SAAS1F,EAAOI,EAAUD,EAAUD,CAAI,CACnD,CAEA,SAAS,EAAe,EAAmB,UAAW,EAAmB,GAAI,EAAgB,GAA2B,CACpH,OAAO,SAASF,EAAOI,EAAUD,EAAUD,CAAI,CACnD,CAEA,SAAU,CACN,OAAO,KAAK,QAChB,CAEA,MAAO,CACH,OAAO,KAAK,SAAS,KAAK,CAC9B,CAIA,OAAO,EAAsF,CACzF,GAAI,CAAC,UAAU,OAAQ,OAAO,KAAK,QACnC,GAAI,KAAK,SAAWhpB,EAChB,MAAU,MAAM,mCAAmC,EAYvD,OAVIA,IAAM,MACN,KAAK,QAAU,KACX,KAAK,YAAY,GACjB,KAAK,KAAK,GAEP,OAAOA,GAAM,SACpB,KAAK,QAAU,SAAS,eAAeA,CAAC,GACjCA,aAAa,aAAeA,aAAa,cAChD,KAAK,QAAUA,GAEZ,IACX,CAEA,aAAuB,CAGnB,OAAO,KAAK,aAAe,KAAK,oBAAoB,KAAK,CAAC,CAAC,eAAiB,IAChF,CAEA,SAAU,CACN,MAAO,CAAC,MAAM,KAAK,MAAM,CAAC,GAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CACvD,CAEA,kBAAuC,CACnC,IAAIuiB,EAAU,CAAC,EAgBf,OAfA,KAAK,oBAAoB,EAAI,CAAC,CAAC,QAAQ,SAAU,EAAM,CACnD,GAAI,CAACZ,EAAK,KAAOA,EAAK,IAAI,SAAW,GACjC,OAAQA,EAAK,KAAb,CACI,IAAK,SACD,IAAMW,EAAS,KAAKX,EAAK,GAAG,CAAC,EACzBW,GACAC,EAAQ,KAAKD,CAAM,EAEvB,MACJ,IAAK,cACD,EAAUC,EAAQ,OAAO,KAAKZ,EAAK,GAAG,CAAC,CAAC,CAEhD,CAER,EAAG,IAAI,EACAY,CACX,CAGA,SAAmB,EACnB,OAAO,SAAgC,CACnC,GAAK,OAAe,aAAc,CAC9B,IAAMjhB,EAAM,KAAK,IAAI,EACjBA,EAAM,KAAK,SAAW,KACtB,QAAQ,MAAM,oBAAsBA,EAAM,KAAK,UAAY,MAAQ,KAAK,GAAG,EAAI,MAAQ,KAAK,QAAQ,CAAC,EAEzG,KAAK,SAAWA,CACpB,CAGA,GADA,WAAuB,UAAY,CAAE,EACjC,CAAC,KAAK,qBAAuB,CAAC,KAAK,QAAQ,GAAK,KAAK,YAAY,GAAK,CAAC,KAAK,QAAQ,EAEpF,OADA,SAAS,IAAI,EACN,KAEX,GAAI,KAAK,oBAAqB,CAC1B,GAAI,CAAC,KAAK,KACN,MAAU,MAAM,sBAAsB,EAE1C,IAAMokB,EAAW,KAAK,oBAAoB,UAAU,IAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAG,SAAU,EAAG,CAAE,OAAO9f,EAAE,GAAK,CAAC,EAC/G8f,EAAS,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAC7B,QAAQ,KAAK,OAAQ,EAAI,CAAC,CAC1B,KAAK,KAAM,KAAK,GAAG,CAAC,CAEpB,KAAK,SAAU,EAAU,CACtB,EAAS,SAAW14B,eAAS,IAAI,EACjC4hC,EAAS,MAAM,KAAMA,EAAS,QAAQ,EACjC,OAAe,cAChBA,EAAS,UAAU,IAAI,CAE/B,CAAC,CAAC,CACD,MAAMlJ,CAAQ,CAAC,CACf,KAAK,SAAU,EAAU,CACtB,IAAMtT,EAAUplB,eAAS,IAAI,EACvB6hC,EAAUD,EAAS,QAAQ,EACjC,IAAK,IAAMvyB,KAAOwyB,EACdzc,EAAQ,QAAQ/V,EAAKwyB,EAAQxyB,EAAI,EAErCuyB,EAAS,UAAU,KAAMA,EAAS,QAAQ,EAC1CA,EAAS,OAAO,KAAMA,EAAS,QAAQ,EACvCA,EAAS,WAAW,KAAMA,EAAS,QAAQ,CAC/C,CAAC,EAELlJ,EAAS,KAAK,CAAC,CACV,KAAK,SAAU,EAAU,CACtB,eAAS,IAAI,CAAC,CAAC,MAAM,IAAI,EACzBkJ,EAAS,KAAK,KAAMA,EAAS,QAAQ,CACzC,CAAC,CAAC,CACD,OAAO,EAEZ,KAAK,cACT,CAGA,IAAMrM,EAAU,KAAK,iBAAiB,EAEhCplB,EAAU,KAChB,OAAQolB,EAAQ,OAAhB,CACI,IAAK,GACD,SAAS,IAAI,EACb,MACJ,IAAK,GACDA,EAAQ,EAAE,CAAC,OAAO,UAAY,CAC1B,SAASplB,CAAO,CACpB,CAAC,EACD,MACJ,QACI,IAAI2xB,EAAcvM,EAAQ,OAC1BA,EAAQ,QAAQ,SAAU,EAAQ,EAAM,CACpC,WAAW,UAAY,CACnBD,EAAO,OAAO,UAAY,CAClB,EAAEwM,IAAgB,GAClB,SAAS3xB,CAAO,CAExB,CAAC,CACL,EAAG,CAAC,CACR,CAAC,CAET,CACA,OAAO,IACX,CAEA,eAAiC,CAC7B,OAAO,IAAI,SAAS,EAAS,IAAW,CACpC,KAAK,OAAQ,GAAc,CACvBqO,EAAQkD,CAAC,CACb,CAAC,CACL,CAAC,CACL,CAEA,YAAsB,SAAS,SAAU,EAAyC,CAC9E,KAAK,OAAOqgB,CAAiB,CACjC,EAAG,GAAG,EAEN,WAAW,EAAsC,CAE7C,OADA,KAAK,YAAY9wB,CAAQ,EAClB,IACX,CAEA,sBAA6B,CASzB,OARI,sBACA,0BAA4B,CACxB,KAAK,OAAO,CAChB,CAAC,EAGD,KAAK,cAAc,EAEhB,IACX,CAEA,MAAM,EAAuB,EAAU,CAAE,CACzC,UAAU,EAAuB,EAAU,CAAE,CAC7C,OAAO,EAAuB,EAAU,CAAE,CAC1C,WAAW,EAAuB,EAAU,CAAE,CAC9C,KAAK,EAAwB,EAAW,CACpC,KAAK,iBAAiB,CAAC,CAAC,QAAQ,GAAKyQ,EAAE,OAAO,IAAI,CAAC,CACvD,CACJ,EACA,EAAO,UAAU,QAAU,iBAW3B,EAAO,QAAU,KAEjB8e,EAAO,UAAU,aAAa,SAAU,MAAO,QAAQ,EACvDA,EAAO,UAAU,QAAQ,UAAW,CAAC,EAAG,SAAU,eAAgB,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAC7F,IAAMwB,GAAcxB,EAAO,UAAU,QACrC,EAAO,UAAU,QAAU,SAAwB,EAAmD,EAAa,CAC/G,GAAI,OAAOyB,GAAY,SAAU,CAC7B,GAAI,UAAU,SAAW,EAAG,OAAOD,GAAY,KAAK,IAAI,CAAC,CAACC,GAC1D,IAAMJ,EAAUG,GAAY,KAAK,IAAI,EAErC,OADAA,GAAY,KAAK,KAAM,CAAE,GAAGH,GAAUI,GAAUjvB,CAAE,CAAC,EAC5C,IACX,CACA,OAAOgvB,GAAY,MAAM,KAAM,SAAS,CAC5C,ECvtBA,IAAa,WAAb,cAAgCxB,CAAO,CAEnC,SACA,cACA,aAEA,aAAc,CACV,MAAM,EAEN,KAAK,cAAgB,SACrB,KAAK,KAAO,MACZ,KAAK,aAAe,IACxB,CAEA,eAAe,EAAS,CAQpB,OAPe,WAAWpb,EAAQ,MAAM,cAAc,CAAC,EACnD,WAAWA,EAAQ,MAAM,eAAe,CAAC,EACzC,WAAWA,EAAQ,MAAM,aAAa,CAAC,EACvC,WAAWA,EAAQ,MAAM,cAAc,CAAC,EACxC,WAAWA,EAAQ,MAAM,mBAAmB,CAAC,EAC7C,WAAWA,EAAQ,MAAM,oBAAoB,CAAC,CAGtD,CAEA,UAAU,EAAS,CACf,OAAO,WAAWA,EAAQ,MAAM,OAAO,CAAC,EAAI,KAAK,eAAeA,CAAO,CAC3E,CAEA,gBAAgB,EAAS,CAQrB,OAPe,WAAWA,EAAQ,MAAM,aAAa,CAAC,EAClD,WAAWA,EAAQ,MAAM,gBAAgB,CAAC,EAC1C,WAAWA,EAAQ,MAAM,YAAY,CAAC,EACtC,WAAWA,EAAQ,MAAM,eAAe,CAAC,EACzC,WAAWA,EAAQ,MAAM,kBAAkB,CAAC,EAC5C,WAAWA,EAAQ,MAAM,qBAAqB,CAAC,CAGvD,CAEA,WAAW,EAAS,CAChB,OAAO,WAAWA,EAAQ,MAAM,QAAQ,CAAC,EAAI,KAAK,gBAAgBA,CAAO,CAC7E,CAEA,WAAW,EAAU,CAEjB,MADA,KAAqB,KAAK,SACnBA,EAAQ,SAAS,aAAa,EAAIA,EAAQ,SAAS,aAAa,CAC3E,CAEA,WAAW,EAAU,CAEjB,MADA,KAAqB,KAAK,SACnBA,EAAQ,SAAS,cAAc,EAAIA,EAAQ,SAAS,cAAc,CAC7E,CAEA,aAAc,CACV,OAAO,KAAK,MAAM,MAAQ,KAAK,eAAe,KAAK,QAAQ,CAC/D,CAEA,cAAe,CACX,OAAO,KAAK,MAAM,OAAS,KAAK,gBAAgB,KAAK,QAAQ,CACjE,CAEA,QAAQ,EAAU,GAAO,EAAQ,GAAO,CACpC,GAAI8c,GAAW,KAAK,eAAiB,KAAM,CACvC,IAAMtJ,EAAU,KAAK,SAAS,KAAK,EAAI,KAAK,SAAS,KAAK,CAAC,CAAC,kBAAoB,KAChF,GAAIA,aAAmB,QAAS,CAC5B,IAAM/lB,EAAO+lB,EAAQ,sBAAsB,EAC3C,KAAK,aAAe,CAChB,EAAG/lB,EAAK,KACR,EAAGA,EAAK,IACR,MAAOA,EAAK,MACZ,OAAQA,EAAK,MACjB,CACJ,CACJ,CASA,OARI,KAAK,eAAiB,KACf,CACH,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CACZ,EAEG,CACH,GAAIsvB,EAAQ,KAAK,MAAM,KAAK,aAAa,CAAC,EAAI,KAAK,aAAa,GAAK,KAAK,aAC1E,GAAIA,EAAQ,KAAK,MAAM,KAAK,aAAa,CAAC,EAAI,KAAK,aAAa,GAAK,KAAK,aAC1E,OAAQA,EAAQ,KAAK,MAAM,KAAK,aAAa,KAAK,EAAI,KAAK,aAAa,OAAS,KAAK,aACtF,QAASA,EAAQ,KAAK,MAAM,KAAK,aAAa,MAAM,EAAI,KAAK,aAAa,QAAU,KAAK,YAC7F,CACJ,CAEA,WAAW,EAAM,CAQb,OANI,KAAK,qBACL,KAAK,oBACA,MAAM,OAAQhI,EAAI,EAAI,IAAI,CAAC,CAC3B,MAAM,MAAOA,EAAI,EAAI,IAAI,EAG3B,IACX,CAEA,OAAO,EAAO,CACV,IAAM1E,EAAS,MAAM,OAAOvkB,CAAI,EAOhC,OANI,KAAK,qBACL,KAAK,oBACA,MAAM,QAAS,KAAK,MAAM,MAAQ,IAAI,CAAC,CACvC,MAAM,SAAU,KAAK,MAAM,OAAS,IAAI,EAG1CukB,CACX,CAKA,OAAO,EAAsF,CACzF,IAAMA,EAAS,MAAM,OAAO,MAAM,KAAM,SAAS,EACjD,GAAI,UAAU,OAAQ,CAClB,GAAI,KAAK,mBAAmB,WAAY,CAEpC,KAAK,YAAc,GACnB,IAAM2M,EAAU,KAAK,kBAAkB,EACvC,KAAK,oBAAsBA,EAAQ,OAAO,KAAK,CAAC,CAC3C,MAAM,WAAY,UAAU,CAAC,CAC7B,MAAM,MAAO,KAAK,CAAC,CACnB,MAAM,OAAQ,KAAK,CAAC,CACpB,MAAM,WAAY,QAAQ,EAE/B,KAAK,gBAAkBniC,eAAS,KAAK,OAAO,EAE5C,KAAK,SAAW,KAChB,KAAK,SAAW,IAAI,iBAAiB,GAAa,CAC9C,KAAK,YAAY,CACrB,CAAC,EAED,IAAI24B,EAAU,KAAK,gBAAgB,KAAK,EACxC,KAAOA,GACH,KAAK,SAAS,QAAQA,EAAS,CAAE,WAAY,EAAK,CAAC,EACnD,EAAUA,EAAQ,UAE1B,MAAO,GAAI,KAAK,QAAS,CAErB,GADA,KAAK,oBAAsB34B,eAAS,KAAK,OAAO,EAC5C,CAAC,KAAK,MAAM,OAAS,CAAC,KAAK,MAAM,OAAQ,CACzC,IAAMqhB,EAAQ,WAAW,KAAK,oBAAoB,MAAM,OAAO,CAAC,GACzD,WAAW,KAAK,oBAAoB,MAAM,aAAa,CAAC,EAAI,WAAW,KAAK,oBAAoB,MAAM,cAAc,CAAC,IACrH,WAAW,KAAK,oBAAoB,MAAM,aAAa,CAAC,EAAI,WAAW,KAAK,oBAAoB,MAAM,cAAc,CAAC,IACrH,WAAW,KAAK,oBAAoB,MAAM,cAAc,CAAC,EAAI,WAAW,KAAK,oBAAoB,MAAM,eAAe,CAAC,GAExHC,EAAS,WAAW,KAAK,oBAAoB,MAAM,QAAQ,CAAC,GAC3D,WAAW,KAAK,oBAAoB,MAAM,YAAY,CAAC,EAAI,WAAW,KAAK,oBAAoB,MAAM,eAAe,CAAC,IACrH,WAAW,KAAK,oBAAoB,MAAM,YAAY,CAAC,EAAI,WAAW,KAAK,oBAAoB,MAAM,eAAe,CAAC,IACrH,WAAW,KAAK,oBAAoB,MAAM,aAAa,CAAC,EAAI,WAAW,KAAK,oBAAoB,MAAM,gBAAgB,CAAC,GAE9H,KAAK,KAAK,CACN,QACA,QACJ,CAAC,CACL,CACA,KAAK,oBAAsBthB,eAAS,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAClE,CACJ,CACA,OAAOw1B,CACX,CAEA,WAAW,EAAS,EAAS,CAEzB,GADA,MAAM,WAAWmD,EAASxT,CAAO,EAC7B,KAAK,gBAAkB,SACvB,KAAK,SACA,MAAM,WAAY,UAAU,CAAC,CAC7B,MAAM,OAAQ,KAAK,KAAK,EAAI,IAAI,CAAC,CACjC,MAAM,MAAO,KAAK,KAAK,EAAI,IAAI,MAEjC,CACH,IAAMid,EAAO,KAAK,QAAQ,EAAI,EAC9B,KAAK,SACA,MAAM,WAAY,UAAU,CAAC,CAC7B,MAAM,QAAS,MAAM,CAAC,CACtB,MAAM,OAAQ,KAAK,KAAK,GAAK,KAAK,MAAM,MAAQA,EAAK,OAAS,EAAI,IAAI,CAAC,CACvE,MAAM,MAAO,KAAK,KAAK,GAAK,KAAK,MAAM,OAASA,EAAK,QAAU,EAAI,IAAI,CAEhF,CACJ,CAEA,KAAK,EAAU,EAAU,CACjB,KAAK,UACL,KAAK,SAAS,WAAW,EAE7B,KAAK,SAAW,KACZ,KAAK,qBACL,KAAK,oBAAoB,OAAO,EAEpC,MAAM,KAAKzJ,EAASxT,CAAO,CAC/B,CACJ,EACA,WAAW,UAAU,QAAU,qBCpM/B,IAAa,aAAb,cAAkC,UAAW,CAEzC,KACA,aAAc,CACV,MAAM,EACN,KAAK,KAAO,QAChB,CAEA,OAAO,EAAM,CACT,IAAMqQ,EAAS,MAAM,OAAOvkB,CAAI,EAChC,GAAI,CACA,KAAK,SAAS,KAAK,QAAS,KAAK,MAAM,KAAK,EAC5C,KAAK,SAAS,KAAK,SAAU,KAAK,MAAM,MAAM,EAC9C,KAAK,aAAa,CACtB,OAAS,EAAG,CACR,QAAQ,MAAM,CAAC,CACnB,CACA,OAAOukB,CACX,CAEA,cAAe,CACX,KAAK,KAAO,KAAK,SAAS,KAAK,CAAC,CAAC,WAAW,IAAI,CACpD,CAEA,MAAM,EAAG,EAAG,CAEZ,CACJ,EACA,aAAa,UAAU,QAAU,uBC5BjC,IAAa,WAAb,KAAwB,CAEpB,QACA,UACA,OACA,MAEA,YAAY,EAAQ,CAChB,KAAK,QAAUH,EACf,KAAK,UAAY,IACjB,KAAK,OAAS,EACd,KAAK,MAAQp1B,UACjB,CAEA,SAAS,EAAI,CAGT,OAFK,UAAU,QACf,KAAK,UAAY8S,EACV,KAAK,SAFkB,KAAK,SAGvC,CAEA,MAAM,EAAI,CAGN,OAFK,UAAU,QACf,KAAK,OAASA,EACP,KAAK,SAFkB,KAAK,MAGvC,CAEA,KAAK,EAAI,CAGL,OAFK,UAAU,QACf,KAAK,MAAQA,EACN,KAAK,SAFkB,KAAK,KAGvC,CAEA,MAAM,EAAW,CAQb,OAPI,KAAK,WAAa,KAAK,OAChB9C,EAAU,WAAW,CAAC,CACxB,SAAS,KAAK,SAAS,CAAC,CACxB,MAAM,KAAK,MAAM,CAAC,CAClB,KAAK,KAAK,KAAK,EAGjBA,CACX,CACJ,ECjCM,KAAO,SAAU,EAAc,EAAa,EAAkB,CAEhE,MAAO,CACH,EAAG0C,EAAM,GAAKS,EAAK,EAAIT,EAAM,GAAKb,EAClC,EAAGa,EAAM,GAAKS,EAAK,EAAIT,EAAM,GAAKb,CACtC,CACJ,EAGM,kBAAoB,SAAU,EAAW,EAAW,EAAW,EAA6B,CAE9F,IAAM6nB,EAA2B,CAAE,KAAM,WAAY,OAAQ,CAAC,CAAE,EAC1D0I,GAAOtjB,EAAG,EAAI9C,EAAG,IAAMqmB,EAAG,EAAIrmB,EAAG,IAAM8C,EAAG,EAAI9C,EAAG,IAAMqmB,EAAG,EAAIrmB,EAAG,GACjEsmB,GAAOC,EAAG,EAAIF,EAAG,IAAMA,EAAG,EAAIrmB,EAAG,IAAMumB,EAAG,EAAIF,EAAG,IAAMA,EAAG,EAAIrmB,EAAG,GACjEwmB,GAAM1jB,EAAG,EAAI9C,EAAG,IAAMumB,EAAG,EAAIF,EAAG,IAAMvjB,EAAG,EAAI9C,EAAG,IAAMumB,EAAG,EAAIF,EAAG,GAEtE,GAAIG,IAAO,EAAG,CACV,IAAM9C,EAAK0C,EAAMI,EACXC,EAAKH,EAAME,EAEb,GAAK9C,GAAMA,GAAM,GAAK,GAAK+C,GAAMA,GAAM,GACvC,EAAO,KAAO,eACd/I,EAAO,OAAO,KAAK,CACf,EAAG2I,EAAG,EAAI3C,GAAM6C,EAAG,EAAIF,EAAG,GAC1B,EAAGA,EAAG,EAAI3C,GAAM6C,EAAG,EAAIF,EAAG,EAC9B,CAAC,GAED,EAAO,KAAO,iBAEtB,KACI,CAGI3I,EAAO,KAHP0I,IAAQ,GAAKE,IAAQ,EACP,aAEA,WAItB,OAAO5I,CACX,EAGM,oBAAsB,SAAU,EAAU,EAAW,EAAW,EAA+B,CAEjG,IAAMA,EAA6B,CAAE,KAAM,eAAgB,OAAQ,CAAC,CAAE,EAChE/oB,GAAK4xB,EAAG,EAAIF,EAAG,IAAME,EAAG,EAAIF,EAAG,IAChCE,EAAG,EAAIF,EAAG,IAAME,EAAG,EAAIF,EAAG,GACzBzxB,EAAI,IAAM2xB,EAAG,EAAIF,EAAG,IAAMA,EAAG,EAAIjvB,EAAE,IACpCmvB,EAAG,EAAIF,EAAG,IAAMA,EAAG,EAAIjvB,EAAE,IACxBsvB,EAAKtvB,EAAE,EAAIA,EAAE,EAAIA,EAAE,EAAIA,EAAE,EAAIivB,EAAG,EAAIA,EAAG,EAAIA,EAAG,EAAIA,EAAG,EACvD,GAAKjvB,EAAE,EAAIivB,EAAG,EAAIjvB,EAAE,EAAIivB,EAAG,GAAKhsB,EAAIA,EAClCssB,EAAQ/xB,EAAIA,EAAI,EAAID,EAAI+xB,EAE9B,GAAIC,EAAQ,EACR,EAAO,KAAO,eACX,GAAIA,IAAU,EACjB,EAAO,KAAO,cAEX,CACH,IAAM,EAAI,KAAK,KAAKA,CAAK,EACnBC,GAAM,CAAChyB,EAAI,IAAM,EAAID,GACrBkyB,GAAM,CAACjyB,EAAI,IAAM,EAAID,IAEtBiyB,EAAK,GAAKA,EAAK,KAAOC,EAAK,GAAKA,EAAK,GACtC,AAGInJ,EAAO,KAHNkJ,EAAK,GAAKC,EAAK,GAAOD,EAAK,GAAKC,EAAK,EACxB,UAEA,UAGlB,EAAO,KAAO,eAEV,GAAKD,GAAMA,GAAM,GACjBlJ,EAAO,OAAO,KAAK,KAAK2I,EAAIE,EAAIK,CAAE,CAAC,EAEnC,GAAKC,GAAMA,GAAM,GACjBnJ,EAAO,OAAO,KAAK,KAAK2I,EAAIE,EAAIM,CAAE,CAAC,EAE/C,CAEA,OAAOnJ,CACX,EAEa,cAAb,KAA2B,CACvB,GACA,OACA,SACA,cACA,eACA,QAEA,YAAY,EAAQ,EAAY,CAC5B,KAAK,GAAKnnB,EACV,KAAK,OAAS5F,EAAO,OAAO,QAAQ,CAAC,CAChC,KAAK,KAAM4F,CAAE,CAAC,CACd,KAAK,QAAS,MAAM,CAAC,CACrB,KAAK,SAAU,MAAM,EAC1B,KAAK,SAAW,KAAK,OAAO,OAAO,UAAU,CAAC,CACzC,KAAK,SAAU,QAAQ,CAAC,CACxB,KAAK,KAAM,eAAe,CAAC,CAC3B,KAAK,KAAM,GAAG,CAAC,CACf,KAAK,KAAM,GAAG,EACnB,KAAK,cAAgB,KAAK,OAAO,OAAO,eAAe,CAAC,CACnD,KAAK,SAAU,WAAW,CAAC,CAC3B,KAAK,KAAM,QAAQ,CAAC,CACpB,KAAK,OAAQ,QAAQ,CAAC,CACtB,KAAK,SAAU,KAAK,gBAAgB,KAAK,CAAC,EAE/C,KAAK,eAAiB,KAAK,OAAO,OAAO,gBAAgB,CAAC,CACrD,KAAK,SAAU,SAAS,CAAC,CACzB,KAAK,KAAM,WAAW,CAAC,CACvB,KAAK,eAAgB,GAAG,EAE7B,KAAK,QAAU,KAAK,OAAO,OAAO,SAAS,CAAC,CACvC,KAAK,KAAM,eAAe,CAAC,CAC3B,KAAK,MAAO,SAAS,CAAC,CACtB,KAAK,OAAQ,QAAQ,CAE9B,CAEA,gBAAgB,EAAuB,CACnC,IAAMtS,EAAMC,IAAM0Y,CAAK,EACvB,MAAO,CACH3Y,EAAI,EAAI,IAAK,EAAG,EAAG,EAAGA,KAAI,EAC1B,EAAGA,EAAI,EAAI,IAAK,EAAG,EAAGA,KAAI,EAC1B,EAAG,EAAGA,EAAI,EAAI,IAAK,EAAGA,KAAI,EAC1B,EAAG,EAAG,EAAG,EAAG,CAChB,CAAC,CAAC,KAAK,GAAG,CACd,CAEA,OAAO,EAAiB,CAEpB,OADA,KAAK,OAAO,KAAK,KAAM8iC,EAAS,KAAK,GAAK,YAAY,KAAK,IAAI,EACxD,IACX,CAEA,OAAO,EAAe,CAElB,OADA,KAAK,cAAc,KAAK,SAAU,KAAK,gBAAgBnqB,CAAK,CAAC,EACtD,IACX,CACJ,EAEa,UAAb,cAA+B0nB,CAAO,CAClC,OAAO,OAAS,mBAEhB,aACA,WACA,cACA,oBACA,mBACA,eAEA,aAAc,CACV,MAAM,EAEN,KAAK,KAAO,IAEZ,KAAK,aAAe,KAEpB,KAAK,WAAa,IAAI,WAAW,IAAI,EAErC,KAAK,cAAgB,QACzB,CAGA,KAAK,EAAI,EAAqB,CAC1B,IAAM/K,EAAS,KAAK,IAAIziB,CAAC,EAMzB,OALI,UAAU,SACTkwB,EAAqB,KAAK,SAAS,WAAW,CAAC,CAAC,SAASA,CAAkB,EAAI,KAAK,SAAA,CAChF,KAAK,YAAa,aAAalwB,EAAE,EAAE,GAAGA,EAAE,EAAE,SAAS,KAAK,aAAa,EAAE,EAGzEyiB,CACX,CAEA,gBAAkB,GAGlB,eAAe,EAA6B,CAGxC,OAFK,UAAU,QACf,KAAK,gBAAkBziB,EAChB,MAFuB,KAAK,eAGvC,CAEA,sBAAwB,GAGxB,qBAAqB,EAA6B,CAG9C,OAFK,UAAU,QACf,KAAK,sBAAwBA,EACtB,MAFuB,KAAK,qBAGvC,CAIA,KAAK,EAAkB,CACnB,IAAMyiB,EAAS,MAAM,KAAK,MAAM,KAAM,SAAS,EAI/C,OAHI,UAAU,SACV,KAAK,aAAe,MAEjBA,CACX,CAEA,OAAO,EAA2C,CAC9C,IAAMA,EAAS,MAAM,OAAO,MAAM,KAAM,SAAS,EACjD,GAAI,KAAK,mBAKL,OAJA,KAAK,mBACA,MAAM,QAAS,KAAK,MAAM,MAAQ,IAAI,CAAC,CACvC,MAAM,SAAU,KAAK,MAAM,OAAS,IAAI,EAErC,KAAK,cAAb,CACI,IAAK,SACD,KAAK,IAAI,CACL,EAAG,EACH,EAAG,CACP,CAAC,EACD,MAGJ,QACI,KAAK,IAAI,CACL,EAAG,KAAK,MAAM,MAAQ,EACtB,EAAG,KAAK,MAAM,OAAS,CAC3B,CAAC,CAET,CAIJ,OAFK,MAAM,KAAK,MAAM,KAAK,GAAG,KAAK,oBAAoB,KAAK,QAAS,KAAK,MAAM,KAAK,EAChF,MAAM,KAAK,MAAM,MAAM,GAAG,KAAK,oBAAoB,KAAK,SAAU,KAAK,MAAM,MAAM,EACjFA,CACX,CAEA,WAAoB,CAChB,MAAO,MAAM,KAAK,GAAG,EAAE,MAC3B,CAIA,OAAO,EAAsF,CACzF,IAAMA,EAAS,MAAM,OAAO,MAAM,KAAM,SAAS,EACjD,GAAI,UAAU,OAAQ,CAClB,GAAI,KAAK,mBAAmB,WAAY,CACpC,KAAK,YAAc,GACnB,KAAK,oBAAsBp1B,eAAS,KAAK,OAAO,EAChD,KAAK,cAAgB,KAAK,oBAAoB,MAAM,GAChD,CAAC,KAAK,eAAiB,KAAK,cAAc,MAAQ,KAAK,OACvD,KAAK,cAAgB,KAAK,mBAAmB,KAAK,QAAQ,UAAU,GAExE,KAAK,eAAiB,KAAK,kBAAkB,EAE7C,IAAM8iC,EAAU9iC,eADJ,KAAK,cAAc,KAAK,OACX,CAAG,CAAC,CAAC,OAAuB,MAAM,EAC3D,KAAK,oBAAsB,IAAI,cAAc8iC,EAAS,KAAK,UAAU,CAAC,CAC1E,MAAO,GAAI,KAAK,QAAS,CAErB,KAAK,mBAAqB9iC,eAAS,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,CACzD,MAAM,WAAY,UAAU,EAEjC,KAAK,oBAAsB,KAAK,mBAAmB,OAAO,KAAK,CAAC,CAC3D,MAAM,WAAY,UAAU,CAAC,CAC7B,MAAM,MAAO,KAAK,CAAC,CACnB,MAAM,OAAQ,KAAK,EAExB,IAAM8iC,EAAU,KAAK,oBAAoB,OAAO,MAAM,EACtD,KAAK,oBAAsB,IAAI,cAAcA,EAAS,KAAK,UAAU,CAAC,EACtE,KAAK,eAAiB,KAAK,mBAAmB,OAAO,KAAK,CAAC,CACtD,MAAM,WAAY,UAAU,CAAC,CAC7B,MAAM,MAAO,KAAK,CAAC,CACnB,MAAM,OAAQ,KAAK,EAEpB,KAAK,MAAM,OAAS,KAAK,MAAM,OAC/B,KAAK,OAAO,KAAK,KAAK,EAEtB,KAAK,OAAO,CAAE,MAAO,EAAG,OAAQ,CAAE,CAAC,CAE3C,CACJ,CACA,OAAO1N,CACX,CAEA,IAAI,mBAAoB,CACpB,OAAO,KAAK,kBAChB,CAEA,eAAgB,CACZ,OAAO,KAAK,cAChB,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMmD,EAASxT,CAAO,CAChC,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOwT,EAASxT,CAAO,EACzB,KAAK,qBACL,KAAK,oBACA,OAAO,KAAK,cAAc,CAAC,CAAC,CAC5B,OAAO,KAAK,mBAAmB,CAAC,CAG7C,CAEA,WAAW,EAAS,EAAS,CACzB,MAAM,WAAWwT,EAASxT,CAAO,EACjC,IAAIge,EACAC,EACA,KAAK,gBAAkB,UAAY,KAAK,mBAAmB,YAC3D,EAAU,KAAK,KAAK,EAAI,KAAK,MAAM,MAAQ,EAC3C,EAAU,KAAK,KAAK,EAAI,KAAK,MAAM,OAAS,EAC5C,KAAK,SAAS,KAAK,YAAa,aAAeD,EAAS,IAAMC,EAAS,UAAY,KAAK,aAAe,GAAG,IAE1G,EAAS,KAAK,KAAK,EACnB,EAAS,KAAK,KAAK,EACf,KAAK,mBAEAD,EAAS,GAAKC,EAAS,IAAM,KAAK,cACnC,EAASD,EAAS,EAAI,EAAIA,EAC1B,EAASC,EAAS,EAAI,EAAIA,EACtB,KAAK,uBACL,KAAK,mBAAmB,MAAM,WAAY,QAAQ,EAEtD,KAAK,oBAAoB,KAAK,QAAS,KAAK,aAAa,KAAK,EAC9D,KAAK,oBAAoB,KAAK,SAAU,KAAK,aAAa,MAAM,GAEhE,KAAK,mBAAmB,MAAM,WAAY,IAAI,GAGtD,KAAK,SAAS,KAAK,YAAa,aAAeD,EAAS,IAAMC,EAAS,UAAY,KAAK,aAAe,GAAG,EAElH,CAEA,KAAK,EAAU,EAAU,CACjB,KAAK,qBACL,KAAK,eAAe,OAAO,EAC3B,KAAK,oBAAoB,OAAO,EAChC,KAAK,mBAAmB,OAAO,GAEnC,MAAM,KAAKzK,EAASxT,CAAO,CAC/B,CAEA,cAAsB,CAClB,IAAIqQ,EAAS,CAAE,EAAG,EAAG,EAAG,CAAE,EAO1B,OANI,KAAK,gBACL,EAAS,KAAK,cAAc,aAAa,EACzC,EAAO,GAAK,KAAK,KAAK,EACtB,EAAO,GAAK,KAAK,KAAK,GACfA,CAGf,CAEA,QAAQ,EAAU,GAAO,EAAQ,GAAa,CAC1C,GAAIyM,GAAW,KAAK,eAAiB,KAAM,CACvC,IAAM9nB,EAAsB,KAAK,SAAS,KAAK,EAC3CA,aAAmB,aACnB,KAAK,aAAgBA,EAAgB,QAAQ,EAErD,CASA,OARI,KAAK,eAAiB,KACf,CACH,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CACZ,EAEG,CACH,GAAI+nB,EAAQ,KAAK,MAAM,KAAK,aAAa,CAAC,EAAI,KAAK,aAAa,GAAK,KAAK,aAC1E,GAAIA,EAAQ,KAAK,MAAM,KAAK,aAAa,CAAC,EAAI,KAAK,aAAa,GAAK,KAAK,aAC1E,OAAQA,EAAQ,KAAK,MAAM,KAAK,aAAa,KAAK,EAAI,KAAK,aAAa,OAAS,KAAK,aACtF,QAASA,EAAQ,KAAK,MAAM,KAAK,aAAa,MAAM,EAAI,KAAK,aAAa,QAAU,KAAK,YAC7F,CACJ,CAGA,SAAS,EAAuB,CAC5B,OAAO,KAAK,aAAavvB,CAAK,CAClC,CAEA,aAAa,EAAuB,CAChC,IAAM1B,EAAO,KAAK,QAAQ,EAC1B,OAAO0B,EAAM,GAAK1B,EAAK,GAAK0B,EAAM,GAAK1B,EAAK,EAAIA,EAAK,OAAS0B,EAAM,GAAK1B,EAAK,GAAK0B,EAAM,GAAK1B,EAAK,EAAIA,EAAK,MAChH,CAEA,eAAe,EAAgB,EAAc,CACzC,IAAMoyB,EAAS,KAAK,aAAa,EACjC,OAAO,KAAK,SAASA,EAAQ1wB,CAAK,GAAK+O,CAC3C,CAEA,aAAa,EAAe,EAA6B,CACrD,OAAO,KAAK,cAAc4hB,EAAQC,CAAM,CAC5C,CAEA,cAAc,EAAe,EAA6B,CACtD,IAAMF,EAAS,KAAK,aAAa,EAC3BpyB,EAAO,KAAK,QAAQ,EAC1B,GAAIqyB,EAAO,IAAMC,EAAO,GAAKD,EAAO,IAAMC,EAAO,EAC7C,OAAOD,EAEX,IAAME,EAAK,CAAE,EAAGH,EAAO,EAAIpyB,EAAK,MAAQ,EAAG,EAAGoyB,EAAO,EAAIpyB,EAAK,OAAS,CAAE,EACnEwyB,EAAK,CAAE,EAAGJ,EAAO,EAAIpyB,EAAK,MAAQ,EAAG,EAAGoyB,EAAO,EAAIpyB,EAAK,OAAS,CAAE,EACnEyyB,EAAK,CAAE,EAAGL,EAAO,EAAIpyB,EAAK,MAAQ,EAAG,EAAGoyB,EAAO,EAAIpyB,EAAK,OAAS,CAAE,EACnE0yB,EAAK,CAAE,EAAGN,EAAO,EAAIpyB,EAAK,MAAQ,EAAG,EAAGoyB,EAAO,EAAIpyB,EAAK,OAAS,CAAE,EACrE2yB,EAAe,kBAAkBJ,EAAIC,EAAIH,EAAQC,CAAM,EAgB3D,OAfIK,EAAa,OAAO,SAGxB,EAAe,kBAAkBH,EAAIC,EAAIJ,EAAQC,CAAM,EACnDK,EAAa,OAAO,UAGxB,EAAe,kBAAkBF,EAAIC,EAAIL,EAAQC,CAAM,EACnDK,EAAa,OAAO,UAGxB,EAAe,kBAAkBD,EAAIH,EAAIF,EAAQC,CAAM,EACnDK,EAAa,OAAO,QACb,CAAE,EAAGA,EAAa,OAAO,EAAE,CAAC,EAAG,EAAGA,EAAa,OAAO,EAAE,CAAC,CAAE,EAE/D,IACX,CAEA,kBAAkB,EAAa,EAAmB,CAC9C,IAAMx1B,EAAI,KAAK,IAAIy1B,EAAM,EAAGC,EAAM,CAAC,EAC7BtsB,EAAI,KAAK,IAAIqsB,EAAM,EAAGC,EAAM,CAAC,EAC7BC,EAAUF,EAAM,EAAIC,EAAM,EAAK,KAAK,IAAID,EAAM,EAAIA,EAAM,MAAOC,EAAM,EAAIA,EAAM,KAAK,EAAI,KAAK,IAAIA,EAAM,EAAIA,EAAM,MAAOD,EAAM,EAAIA,EAAM,KAAK,EAC7IG,EAAUH,EAAM,EAAIC,EAAM,EAAK,KAAK,IAAID,EAAM,EAAIA,EAAM,OAAQC,EAAM,EAAIA,EAAM,MAAM,EAAI,KAAK,IAAIA,EAAM,EAAIA,EAAM,OAAQD,EAAM,EAAIA,EAAM,MAAM,EACvJ,MAAO,CACH,IACA,IACA,MAAOE,EAAS31B,EAChB,OAAQ41B,EAASxsB,CACrB,CACJ,CAEA,gBAAgB,EAAgB,EAAe,EAA6B,CAExE,IAAMosB,EAAe,oBADN,KAAK,aACqB,EAAQliB,EAAQ4hB,EAAQC,CAAM,EAIvE,OAHIK,EAAa,OAAO,OACb,CAAE,EAAGA,EAAa,OAAO,EAAE,CAAC,EAAG,EAAGA,EAAa,OAAO,EAAE,CAAC,CAAE,EAE/D,IACX,CAEA,SAAS,EAAe,EAAuB,CAC3C,OAAO,KAAK,MAAMN,EAAO,EAAIC,EAAO,IAAMD,EAAO,EAAIC,EAAO,IAAMD,EAAO,EAAIC,EAAO,IAAMD,EAAO,EAAIC,EAAO,EAAE,CAClH,CAGA,aAAa,EAAsBU,GAA2B,CAC1D,IAAMC,EAAU,KAAK,cAAc,KAAK,SAAS,KAAK,CAAC,EACjDC,EAAWD,EAAQ,UAAU,EAAI,EACjCE,EAAYhkC,eAAS8jC,CAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,EAWzD,GAVA,eAASC,CAAQ,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,SAA4B,EAAG,EAAG,CACrE,IAAME,EAAa,OAAO,iBAAiBD,EAAU/2B,EAAgB,EACrE,IAAK,IAAIA,EAAI,EAAGA,EAAIg3B,EAAW,OAAQ,EAAEh3B,EAAG,CACxC,IAAMi3B,EAAYD,EAAW,KAAKh3B,CAAC,EAC7Bk3B,EAAaF,EAAW,iBAAiBC,CAAS,EAClDE,EAAgBH,EAAW,oBAAoBC,CAAS,EAC9D,KAAK,MAAM,YAAYA,EAAWC,EAAYC,CAAa,CAC/D,CACJ,CAAC,EAEGC,EAAa,CACb,IAAMC,EAAOP,EAAS,qBAAqB,MAAM,EACjD,GAAIO,EAAK,OAAQ,CACb,IAAMC,EAAa,SAAS,cAAc,OAAO,EACjDA,EAAW,aAAa,OAAQ,UAAU,EAC1C,EAAW,UAAYF,EACvBC,EAAK,EAAE,CAAC,YAAYC,CAAU,CAClC,CACJ,CAGA,OAAO,IADgB,cAChB,CAAA,CAAW,kBAAkBR,CAAQ,CAChD,CAEA,OAAO,EAAsBF,GAAyB,CAClD,OAAO,IAAI,KAAK,CAAC,KAAK,aAAaQ,CAAW,CAAC,EAAG,CAAE,KAAM,eAAgB,CAAC,CAC/E,CAEA,UAAU,EAAsBR,GAAmB,GAAGW,EAA0C,CAC5F,IAAMtP,EAAU,CAAC,KAAM,GAAGsP,CAAY,EAChCC,EAAQvP,EAAQ,IAAI,GAAUD,EAAO,cAAcA,EAAO,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,EACnGhU,EAAQwjB,EAAM,QAAQ,EAAM,IAASC,EAAOC,EAAK,MAAO,CAAC,EACzDzjB,EAAS,KAAK,IAAI,GAAGujB,EAAM,IAAI,GAAKnuB,EAAE,MAAM,CAAC,EAE7C6lB,EAAS,SAAS,cAAc,QAAQ,EAC9C,EAAO,MAAQlb,EACf,EAAO,OAASC,EAChB,EAAO,MAAM,MAAQD,EAAQ,KAC7B,IAAM2jB,EAAMzI,EAAO,WAAW,IAAI,EAIlC,MAHA,GAAI,UAAY,QAChByI,EAAI,SAAS,EAAG,EAAG3jB,EAAOC,CAAM,EAChC,EAAI,UAAY,cACT,IAAI,SAAS,EAAS,IAAW,CACpC,IAAI2jB,EAAO,EACX,QAAQ,IAAI3P,EAAQ,KAAK,EAAQ,IAAM,CACnC,IAAMlnB,EAAI62B,EACJztB,GAAK8J,EAASujB,EAAMx3B,EAAE,CAAC,QAAU,EAEvC,MADA,IAAQw3B,EAAMx3B,EAAE,CAAC,MACV,IAAI,SAAe,EAAS,IAAW,CAC1C,IAAM63B,EAAQ,IAAI,MAClB,EAAM,QAAU5mB,EAChB,EAAM,WAAe,CACjB0mB,EAAI,UAAUE,EAAO,EAAG,EAAGL,EAAMx3B,EAAE,CAAC,MAAOw3B,EAAMx3B,EAAE,CAAC,OAAQe,EAAGoJ,EAAGqtB,EAAMx3B,EAAE,CAAC,MAAOw3B,EAAMx3B,EAAE,CAAC,MAAM,EACjGkR,EAAQ,CACZ,EACA,EAAM,IAAM,IAAI,gBAAgB8W,EAAO,OAAOoP,CAAW,CAAC,CAC9D,CAAC,CACL,CAAC,CAAC,CAAC,CAAC,SAAW,CACXO,EAAI,OAAO,OAAOzmB,CAAO,CAC7B,CAAC,CACL,CAAC,CACL,CAEA,YAAY,EAAsB0lB,GAAmB,CACjD,eAAe,MAAO,KAAK,aAAaQ,CAAW,CAAC,CACxD,CAEA,YAAY,EAAmB,SAAS,UAAU,IAAK,EAAsBR,GAAmB,GAAGW,EAA2B,CAC1H,KAAK,UAAUH,EAAa,GAAGG,CAAY,CAAC,CAAC,KAAK,GAAQ,aAAalK,EAAM,GAAGC,EAAS,KAAK,CAAC,CACnG,CAGA,aAAa,EAAU,CACf8E,KACA,IAAqB,KAAK,SAC1Bta,EAAQ,UAAU,qCAAqC,CAAC,CACnD,KAAK,cAAe,UAAY,CAAE,OAAO,KAAK,aAAa,cAAc,CAAG,CAAC,CAAC,CAC9E,KAAK,YAAa,UAAY,CAAE,OAAO,KAAK,aAAa,YAAY,CAAG,CAAC,CAAC,CAC1E,KAAK,eAAgB,IAAI,CAAC,CAC1B,KAAK,aAAc,IAAI,EAGpC,CAEA,YAAY,EAAU,CACdsa,KACA,IAAqB,KAAK,SAC1Bta,EAAQ,UAAU,mCAAmC,CAAC,CACjD,KAAK,eAAgB,UAAY,CAC9B,OAAO,KAAK,aAAa,aAAa,CAC1C,CAAC,CAAC,CACD,KAAK,aAAc,UAAY,CAAE,OAAO,KAAK,aAAa,WAAW,CAAG,CAAC,CAAC,CAC1E,KAAK,cAAe,IAAI,CAAC,CACzB,KAAK,YAAa,IAAI,EAGnC,CAEA,qBAAuB,SAAS,SAAU,EAAS,CAC3Csa,IACA,KAAK,YAAYta,CAAO,CAEhC,EAAG,GAAG,EAEN,cAAc,EAAU,CAChBsa,KACA,KAAK,aAAata,CAAO,EACzB,KAAK,qBAAqBA,CAAO,EAEzC,CACJ,EACA,UAAU,UAAU,QAAU,oBAS9B,UAAU,UAAU,QAAQ,gBAAiB,GAAM,UAAW,gBAAgB,EAC9E,UAAU,UAAU,QAAQ,qBAAsB,MAAO,aAAc,sBAAsB,EClkB7F,IAAa,KAAb,cAA0B,SAAU,CAEhC,aAEA,aAAc,CACV,MAAM,CACV,CAEA,QAAQ,EAAU,GAAO,EAAQ,GAAO,CACpC,IAAMggB,EAAY,KAAK,KAAK,CAAC,CAAC,MAAM;CAAI,EAClCC,EAAa,KAAK,SAAS,GAAK,GAChC9jB,EAAS8jB,EAAaD,EAAU,OAChCE,EAAmBF,EAAU,IAAI,GAC5B,KAAK,SAAShJ,EAAM,KAAK,WAAW,GAAK,UAAWiJ,CAAU,CAAC,CAAC,KAC1E,EACK/jB,EAAQ,KAAK,IAAI,GAAGgkB,CAAM,EAC1B7P,EAAS,CACX,EAAG,CAAEnU,EAAQ,EACb,EAAG,CAAEC,EAAS,EAAI8jB,GAAc,KAAK,WAAW,IAAM,cAAgB,EAAI,GAC1E,QACA,QACJ,EACA,OAAQ,KAAK,OAAO,EAApB,CACI,IAAK,QACD,EAAO,EAAI,EACX,MACJ,IAAK,MACD,EAAO,EAAI,CAAC/jB,CAEpB,CACA,OAAOmU,CACX,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMmD,EAASxT,CAAO,EAC5B,OAAO,KAAK,UACZ,KAAK,aAAeA,EAAQ,OAAO,MAAM,CAAC,CACrC,GAAG,YAAe,CACf,KAAK,MAAM,CACf,CAAC,CAAC,CACD,GAAG,eAAkB,CAClB,KAAK,SAAS,CAClB,CAAC,CAET,CAEA,UACA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOwT,EAASxT,CAAO,EAC7B,IAAM2W,EAAO,KAAK,QAAQ,CAAC,EAAG,CAAE,MAAO,KAAK,MAAM,CAAE,CAAC,EACrD,GAAI,KAAK,YAAcA,EAAM,CACzB,KAAK,UAAYA,EAEjB,IAAMsG,EAAO,KAAK,QAAQ,EAE1B,KAAK,aACA,MAAM,YAAa,KAAK,SAAS,CAAC,CAAC,CACnC,MAAM,cAAe,KAAK,OAAO,CAAC,CAAC,CACnC,KAAK,YAAa,GAAK,UAAU,KAAK,SAAS,EAAE,gBAAgBA,EAAK,EAAE,EAAE,EAG/E,IAAM/gB,EAAQ,KAAK,MAAM,EACnBnR,EAAU,KACVi1B,EAAY,KAAK,KAAK,CAAC,CAAC,MAAM;CAAI,EAClCG,EAAW,KAAK,aAAa,UAAU,OAAO,CAAC,CAAC,KAAKH,CAAS,EACpEG,EAAS,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,CAC3B,KAAK,QAAS,SAAU,EAAI,EAAG,CAAE,MAAO,SAAWj4B,CAAG,CAAC,CAAC,CACxD,KAAK,KAAM,KAAK,CAAC,CACjB,KAAK,IAAK,GAAG,CAAC,CACd,MAAMi4B,CAAQ,CAAC,CACf,MAAM,cAAe,KAAK,WAAW,CAAC,CAAC,CACvC,MAAM,OAAQ,KAAK,UAAU,CAAC,CAAC,CAC/B,MAAM,SAAU,KAAK,YAAY,CAAC,CAAC,CACnC,KAAM,GAAc,CACjB,GAAI,CAACjkB,EAAO,OAAO1I,EACnB,IAAI6c,EAAS7c,EACPysB,EAAal1B,EAAQ,SAAS,GAAK,GACrCq1B,EAAU/P,EAAO,OAAS,EAC9B,KAAO+P,EAAU,IAAM,KAAK,SAAS/P,EAAQ,KAAK,WAAW,GAAK,UAAW4P,CAAU,CAAC,CAAC,MAAQ/jB,GAC7F,EAASmU,EAAO,OAAO,EAAG,EAAE+P,CAAO,EAAI,MAAM,OAAO,EAAGA,EAAU,CAAC,EAEtE,OAAO/P,CACX,CAAC,EAEL8P,EAAS,KAAK,CAAC,CACV,OAAO,CAGhB,CACJ,CAEA,OAAQ,CACR,CAEA,UAAW,CACX,CACJ,EACA,KAAK,UAAU,QAAU,eAuBzB,KAAK,UAAU,QAAQ,OAAQ,GAAI,SAAU,eAAgB,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EACtF,KAAK,UAAU,QAAQ,aAAc,KAAM,SAAU,cAAe,KAAM,CAAE,KAAM,CAAC,cAAc,EAAG,SAAU,EAAK,CAAC,EACpH,KAAK,UAAU,QAAQ,WAAY,KAAM,SAAU,qBAAsB,KAAM,CAAE,KAAM,CAAC,cAAc,CAAE,CAAC,EACzG,KAAK,UAAU,QAAQ,SAAU,SAAU,MAAO,kBAAmB,CAAC,QAAS,SAAU,KAAK,EAAG,CAAE,KAAM,CAAC,cAAc,CAAE,CAAC,EAC3H,KAAK,UAAU,QAAQ,YAAa,KAAM,aAAc,aAAc,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EAC/F,KAAK,UAAU,QAAQ,cAAe,KAAM,aAAc,aAAc,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EACjG,KAAK,UAAU,QAAQ,WAAY,EAAG,SAAU,sBAAuB,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EC5HhG,IAAa,OAAb,cAA4B,SAAU,CAElC,MAEA,aAAc,CACV,MAAM,EAEN,KAAK,MAAQ,IAAI,KAAK,CAAC,CAClB,WAAW,aAAa,CAEjC,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAM3M,EAASxT,CAAO,EAC5B,KAAK,MACA,OAAOwT,CAAO,EAEnBxT,EACK,GAAG,YAAe,CACf,KAAK,MAAM,CACf,CAAC,CAAC,CACD,GAAG,eAAkB,CAClB,KAAK,SAAS,CAClB,CAAC,CAET,CAEA,UAAmB,CACf,OAAO9kB,OAAe,KAAK,KAAK,CAAC,CACrC,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOs4B,EAASxT,CAAO,EAC7B,KAAK,MACA,KAAK,KAAK,SAAS,CAAC,CAAC,CACrB,WAAW,KAAK,gBAAgB,CAAC,CAAC,CAClC,OAAO,KAAK,SAAS,GAAK,IAAM,EAAE,CAAC,CACnC,OAAO,CAEhB,CAEA,KAAK,EAAS,EAAS,CACnB,KAAK,MACA,OAAO,IAAI,EAGhB,MAAM,KAAKwT,EAASxT,CAAO,CAC/B,CAEA,OAAQ,CAER,CAEA,UAAW,CAEX,CAEJ,EACA,OAAO,UAAU,QAAU,iBAa3B,OAAO,UAAU,QAAQ,OAAQ,GAAI,MAAO,oBAAqB7kB,OAAe,EAAG,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACxG,OAAO,UAAU,QAAQ,WAAY,KAAM,SAAU,YAAa,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAC7F,OAAO,UAAU,aAAa,iBAAkB,QAAS,WAAW,EACpE,OAAO,UAAU,aAAa,kBAAmB,QAAS,aAAc,aAAa,EAIrF,IAAa2jC,GAAoB,yqvNCpF7B1jC,GAAQ,CACR,aAAc,CACV,WAAY,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAAU,OAAQ,OAAQ,OAAQ,SAAU,SAAU,QAAQ,EACnH,UAAW,CAAC,QAAS,SAAU,QAAS,UAAW,UAAW,MAAM,EACpE,UAAW,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAAU,SAAU,UAAU,EAC1F,YAAa,CAAC,SAAU,QAAS,SAAU,UAAW,UAAW,OAAQ,OAAQ,MAAM,CAC3F,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,QAAS,CACR,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,MAAO,CACN,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,QAAS,CACR,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,MAAO,CACN,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,SAAU,CACT,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAChI,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC9F,EAAG,MAAO,CACN,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC9F,EAAG,OAAQ,CACP,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC5H,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC3I,EAAG,QAAS,CACR,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,QAAS,CACR,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC9F,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CACzG,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC9F,EAAG,KAAM,CACL,EAAG,CAAC,UAAW,UAAW,SAAS,EACnC,EAAG,CAAC,UAAW,UAAW,UAAW,SAAS,EAC9C,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EACzD,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACpE,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC/E,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1F,EAAG,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACrG,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACjH,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC5H,GAAI,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC3I,CACJ,ECnTA,SAAgB,UAAU,EAAQ,EAAO,CACvC,OAAQ,UAAU,OAAlB,CACE,IAAK,GAAG,MACR,IAAK,GAAG,KAAK,MAAM0jB,CAAM,EAAG,MAC5B,QAAS,KAAK,MAAMpK,CAAK,CAAC,CAAC,OAAOoK,CAAM,CAC1C,CACA,OAAO,IACT,CAEA,SAAgB,iBAAiB,EAAQ,EAAc,CACrD,OAAQ,UAAU,OAAlB,CACE,IAAK,GAAG,MACR,IAAK,GACC,OAAOA,GAAW,WAAY,KAAK,aAAaA,CAAM,EACrD,KAAK,MAAMA,CAAM,EACtB,MAEF,QACE,KAAK,OAAOA,CAAM,EACd,OAAOhH,GAAiB,WAAY,KAAK,aAAaA,CAAY,EACjE,KAAK,MAAMA,CAAY,CAGhC,CACA,OAAO,IACT,CCtBA,IAAawoB,GAAW,OAAO,UAAU,EAEzC,SAAwB,SAAU,CAChC,IAAIhlB,EAAQ,IAAI,UACZwD,EAAS,CAAC,EACVpK,EAAQ,CAAC,EACT6rB,EAAUD,GAEd,SAAS,MAAM,EAAG,CAChB,IAAIp4B,EAAIoT,EAAM,IAAI9H,CAAC,EACnB,GAAItL,IAAM,IAAA,GAAW,CACnB,GAAIq4B,IAAYD,GAAU,OAAOC,EACjCjlB,EAAM,IAAI9H,EAAG,EAAIsL,EAAO,KAAKtL,CAAC,EAAI,CAAC,CACrC,CACA,OAAOkB,EAAMxM,EAAIwM,EAAM,OACzB,CA0BA,MAxBA,OAAM,OAAS,SAAS,EAAG,CACzB,GAAI,CAAC,UAAU,OAAQ,OAAOoK,EAAO,MAAM,EAC3C,EAAS,CAAC,EAAG,EAAQ,IAAI,UACzB,IAAK,IAAM3U,KAASyD,EACd0N,EAAM,IAAInR,CAAK,GACnBmR,EAAM,IAAInR,EAAO2U,EAAO,KAAK3U,CAAK,EAAI,CAAC,EAEzC,OAAO,KACT,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,MAAM,KAAKyD,CAAC,EAAG,OAAS8G,EAAM,MAAM,CACzE,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAU9G,EAAG,OAAS2yB,CACnD,EAEA,MAAM,KAAO,UAAW,CACtB,OAAO,QAAQzhB,EAAQpK,CAAK,CAAC,CAAC,QAAQ6rB,CAAO,CAC/C,EAEA,UAAU,MAAM,MAAO,SAAS,EAEzB,KACT,CCzCA,SAAwB,MAAO,CAC7B,IAAIC,EAAQ,QAAQ,CAAC,CAAC,QAAQ,IAAA,EAAS,EACnC1hB,EAAS0hB,EAAM,OACfC,EAAeD,EAAM,MACrBzpB,EAAK,EACL2pB,EAAK,EACLjkB,EACAkkB,EACA5D,EAAQ,GACR6D,EAAe,EACfC,EAAe,EACfza,EAAQ,GAEZ,OAAOoa,EAAM,QAEb,SAAS,SAAU,CACjB,IAAI33B,EAAIiW,EAAO,CAAC,CAAC,OACbH,EAAU+hB,EAAK3pB,EACfpD,EAAQgL,EAAU+hB,EAAK3pB,EACvByF,EAAOmC,EAAU5H,EAAK2pB,EAC1B,GAAQlkB,EAAO7I,GAAS,KAAK,IAAI,EAAG9K,EAAI+3B,EAAeC,EAAe,CAAC,EACnE9D,IAAO,EAAO,KAAK,MAAMtgB,CAAI,GACjC,IAAUD,EAAO7I,EAAQ8I,GAAQ5T,EAAI+3B,IAAiBxa,EACtD,EAAY3J,GAAQ,EAAImkB,GACpB7D,IAAO,EAAQ,KAAK,MAAMppB,CAAK,EAAG,EAAY,KAAK,MAAMgtB,CAAS,GACtE,IAAIrtB,EAASjY,MAASwN,CAAC,CAAC,CAAC,IAAI,SAAS,EAAG,CAAE,OAAO8K,EAAQ8I,EAAOvU,CAAG,CAAC,EACrE,OAAOu4B,EAAa9hB,EAAUrL,EAAO,QAAQ,EAAIA,CAAM,CACzD,CAkDA,MAhDA,GAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAUwL,EAAOlR,CAAC,EAAG,QAAQ,GAAKkR,EAAO,CAC5D,EAEA,EAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,CAAC/H,EAAI2pB,GAAM9yB,EAAG,EAAK,CAACmJ,EAAI,EAAK,CAAC2pB,EAAI,QAAQ,GAAK,CAAC3pB,EAAI2pB,CAAE,CACnF,EAEA,EAAM,WAAa,SAAS,EAAG,CAC7B,MAAO,CAAC3pB,EAAI2pB,GAAM9yB,EAAG,EAAK,CAACmJ,EAAI,EAAK,CAAC2pB,EAAI,EAAQ,GAAM,QAAQ,CACjE,EAEA,EAAM,UAAY,UAAW,CAC3B,OAAOC,CACT,EAEA,EAAM,KAAO,UAAW,CACtB,OAAOlkB,CACT,EAEA,EAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,CAAC,CAAC7O,EAAG,QAAQ,GAAKmvB,CACvD,EAEA,EAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAe,KAAK,IAAI,EAAG,EAAe,CAACnvB,CAAC,EAAG,QAAQ,GAAKgzB,CACzF,EAEA,EAAM,aAAe,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,EAAe,KAAK,IAAI,EAAGhzB,CAAC,EAAG,QAAQ,GAAKgzB,CACzE,EAEA,EAAM,aAAe,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,EAAe,CAAChzB,EAAG,QAAQ,GAAKizB,CAC7D,EAEA,EAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGjzB,CAAC,CAAC,EAAG,QAAQ,GAAKwY,CAC/E,EAEA,EAAM,KAAO,UAAW,CACtB,OAAO,KAAKtH,EAAO,EAAG,CAAC/H,EAAI2pB,CAAE,CAAC,CAAC,CAC1B,MAAM3D,CAAK,CAAC,CACZ,aAAa6D,CAAY,CAAC,CAC1B,aAAaC,CAAY,CAAC,CAC1B,MAAMza,CAAK,CAClB,EAEO,UAAU,MAAM,QAAQ,EAAG,SAAS,CAC7C,CAEA,SAAS,SAAS,EAAO,CACvB,IAAIrY,EAAOyyB,EAAM,KAUjB,MARA,GAAM,QAAUA,EAAM,aACtB,OAAOA,EAAM,aACb,OAAOA,EAAM,aAEb,EAAM,KAAO,UAAW,CACtB,OAAO,SAASzyB,EAAK,CAAC,CACxB,EAEOyyB,CACT,CAEA,SAAgB,OAAQ,CACtB,OAAO,SAAS,KAAK,MAAM,KAAM,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAC7D,CCpGA,SAAwB,UAAU,EAAG,CACnC,OAAO,UAAW,CAChB,OAAOv3B,CACT,CACF,CCJA,SAAwB3N,SAAO,EAAG,CAChC,MAAO,CAAC2N,CACV,C,0BCGA,IAAI63B,GAAO,CAAC,EAAG,CAAC,EAEhB,SAAgBvlC,WAAS,EAAG,CAC1B,OAAO0N,CACT,C,8BAEA,SAAS,UAAU,EAAG,EAAG,CACvB,OAAQ,GAAM,EAAI,CAACwC,GACb,SAAS,EAAG,CAAE,OAAQxC,EAAIwC,GAAKC,CAAG,EAClClQ,UAAS,MAAMkQ,CAAC,EAAI,IAAM,EAAG,CACrC,CAEA,SAAS,QAAQ,EAAG,EAAG,CACrB,IAAIiB,EAEJ,OADIlB,EAAIC,IAAG,EAAID,EAAG,EAAIC,EAAG,EAAIiB,GACtB,SAAS,EAAG,CAAE,OAAO,KAAK,IAAIlB,EAAG,KAAK,IAAIC,EAAGzC,CAAC,CAAC,CAAG,CAC3D,CAIA,SAAS,MAAM,EAAQ,EAAO,EAAa,CACzC,IAAIqe,EAAKxI,EAAO,GAAIpI,EAAKoI,EAAO,GAAI/H,EAAKrC,EAAM,GAAIgsB,EAAKhsB,EAAM,GAG9D,OAFIgC,EAAK4Q,GAAI,EAAK,UAAU5Q,EAAI4Q,CAAE,EAAG,EAAK3P,EAAY+oB,EAAI3pB,CAAE,IACvD,EAAK,UAAUuQ,EAAI5Q,CAAE,EAAG,EAAKiB,EAAYZ,EAAI2pB,CAAE,GAC7C,SAAS,EAAG,CAAE,OAAO3pB,EAAGuQ,EAAGre,CAAC,CAAC,CAAG,CACzC,CAEA,SAAS,QAAQ,EAAQ,EAAO,EAAa,CAC3C,IAAIN,EAAI,KAAK,IAAImW,EAAO,OAAQpK,EAAM,MAAM,EAAI,EAC5ClB,EAAQ,MAAM7K,CAAC,EACfwI,EAAQ,MAAMxI,CAAC,EACfT,EAAI,GAQR,IALI4W,EAAOnW,GAAKmW,EAAO,KACrB,EAASA,EAAO,MAAM,CAAC,CAAC,QAAQ,EAChC,EAAQpK,EAAM,MAAM,CAAC,CAAC,QAAQ,GAGzB,EAAExM,EAAIS,GACX,EAAET,GAAK,UAAU4W,EAAO5W,GAAI4W,EAAO5W,EAAI,EAAE,EACzC,EAAEA,GAAKyP,EAAYjD,EAAMxM,GAAIwM,EAAMxM,EAAI,EAAE,EAG3C,OAAO,SAAS,EAAG,CACjB,IAAIA,EAAIzM,EAAOqjB,EAAQ7V,EAAG,EAAGN,CAAC,EAAI,EAClC,OAAOwI,EAAEjJ,EAAE,CAACsL,EAAEtL,EAAE,CAACe,CAAC,CAAC,CACrB,CACF,CAEA,SAAgBvN,OAAK,EAAQ,EAAQ,CACnC,OAAO+L,EACF,OAAOmW,EAAO,OAAO,CAAC,CAAC,CACvB,MAAMA,EAAO,MAAM,CAAC,CAAC,CACrB,YAAYA,EAAO,YAAY,CAAC,CAAC,CACjC,MAAMA,EAAO,MAAM,CAAC,CAAC,CACrB,QAAQA,EAAO,QAAQ,CAAC,CAC/B,C,sBAEA,SAAgBjiB,eAAc,CAC5B,IAAImjB,EAASgiB,GACTpsB,EAAQosB,GACRnpB,EAAc/b,cACd2gC,EACAwE,EACAR,EACAS,EAAQzlC,WACR0lC,EACAC,EACAC,EAEJ,SAAS,SAAU,CACjB,IAAI,EAAI,KAAK,IAAIriB,EAAO,OAAQpK,EAAM,MAAM,EAI5C,OAHIssB,IAAUzlC,aAAU,EAAQ,QAAQujB,EAAO,GAAIA,EAAO,EAAI,EAAE,GAChE,EAAY,EAAI,EAAI,QAAU,MAC9B,EAAS,EAAQ,KACV,KACT,CAEA,SAAS,MAAM,EAAG,CAChB,OAAO7V,GAAK,MAAQ,MAAM,EAAI,CAACA,CAAC,EAAIs3B,GAAW,AAAWW,IAASD,EAAUniB,EAAO,IAAIyd,CAAS,EAAG7nB,EAAOiD,CAAW,EAAA,CAAI4kB,EAAUyE,EAAM/3B,CAAC,CAAC,CAAC,CAC/I,CA8BA,MA5BA,OAAM,OAAS,SAAS,EAAG,CACzB,OAAO+3B,EAAMD,GAAa,AAAUI,IAAQF,EAAUvsB,EAAOoK,EAAO,IAAIyd,CAAS,EAAG1gC,cAAiB,EAAA,CAAIwW,CAAC,CAAC,CAAC,CAC9G,EAEA,MAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,EAAS,MAAM,KAAKzE,EAAG9R,QAAM,EAAG,QAAQ,GAAKgjB,EAAO,MAAM,CACvF,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,MAAM,KAAKlR,CAAC,EAAG,QAAQ,GAAK8G,EAAM,MAAM,CAC7E,EAEA,MAAM,WAAa,SAAS,EAAG,CAC7B,MAAO,GAAQ,MAAM,KAAK9G,CAAC,EAAG,EAAc7R,cAAkB,QAAQ,CACxE,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ6R,EAAI,GAAOrS,WAAU,QAAQ,GAAKylC,IAAUzlC,UACjF,EAEA,MAAM,YAAc,SAAS,EAAG,CAC9B,OAAO,UAAU,QAAU,EAAcqS,EAAG,QAAQ,GAAK+J,CAC3D,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAU/J,EAAG,OAAS2yB,CACnD,EAEO,SAAS,EAAG,EAAG,CAEpB,MADA,GAAY5zB,EAAG,EAAcsK,EACtB,QAAQ,CACjB,CACF,C,oCAEA,SAAwB,YAAa,CACnC,OAAOtb,cAAY,CAAC,CAACJ,WAAUA,UAAQ,CACzC,CCzHA,SAAwB,WAAW,EAAO,EAAM,EAAO,EAAW,CAChE,IAAIkhB,EAAO,SAAS9I,EAAO6I,EAAMM,CAAK,EAClC2J,EAEJ,OADA,EAAY,gBAAgB9B,GAAoB,IAAgB,EACxDA,EAAU,KAAlB,CACE,IAAK,IACH,IAAIxa,EAAQ,KAAK,IAAI,KAAK,IAAIwJ,CAAK,EAAG,KAAK,IAAI6I,CAAI,CAAC,EAEpD,OADImI,EAAU,WAAa,MAAQ,CAAC,MAAM,EAAY3oB,wBAAgBygB,EAAMtS,CAAK,CAAC,IAAG,EAAU,UAAYsc,GACpGU,GAAaxC,EAAWxa,CAAK,EAEtC,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACCwa,EAAU,WAAa,MAAQ,CAAC,MAAM,EAAY1oB,uBAAewgB,EAAM,KAAK,IAAI,KAAK,IAAI9I,CAAK,EAAG,KAAK,IAAI6I,CAAI,CAAC,CAAC,CAAC,IAAG,EAAU,UAAYiK,GAAa9B,EAAU,OAAS,MAC9K,MAEF,IAAK,IACL,IAAK,IACCA,EAAU,WAAa,MAAQ,CAAC,MAAM,EAAYzoB,uBAAeugB,CAAI,CAAC,IAAG,EAAU,UAAYgK,GAAa9B,EAAU,OAAS,KAAO,EAG9I,CACA,OAAOzT,GAAOyT,CAAS,CACzB,CCvBA,SAAgB,UAAU,EAAO,CAC/B,IAAI7F,EAAS0hB,EAAM,OAkDnB,MAhDA,GAAM,MAAQ,SAAS,EAAO,CAC5B,IAAIhtB,EAAIsL,EAAO,EACf,OAAO,MAAMtL,EAAE,GAAIA,EAAEA,EAAE,OAAS,GAAIsJ,GAAgB,EAAU,CAChE,EAEA,EAAM,WAAa,SAAS,EAAO,EAAW,CAC5C,IAAItJ,EAAIsL,EAAO,EACf,OAAO,WAAWtL,EAAE,GAAIA,EAAEA,EAAE,OAAS,GAAIsJ,GAAgB,GAAY6H,CAAS,CAChF,EAEA,EAAM,KAAO,SAAS,EAAO,CAC3B,AAAmB7H,IAAQ,GAE3B,IAAItJ,EAAIsL,EAAO,EACXtU,EAAK,EACLC,EAAK+I,EAAE,OAAS,EAChBG,EAAQH,EAAEhJ,GACVgS,EAAOhJ,EAAE/I,GACToU,EACApC,EACA2kB,EAAU,GAOd,IALI5kB,EAAO7I,IACT,EAAOA,EAAO,EAAQ6I,EAAM,EAAOC,EACnC,EAAOjS,EAAI,EAAKC,EAAI,EAAKgS,GAGpB,IAAY,GAAG,CAEpB,GADA,EAAO,cAAc9I,EAAO6I,EAAMM,CAAK,EACnCL,IAASoC,EAGX,MAFA,GAAErU,GAAMmJ,EACR,EAAElJ,GAAM+R,EACDsC,EAAOtL,CAAC,EACV,GAAIiJ,EAAO,EAChB,EAAQ,KAAK,MAAM9I,EAAQ8I,CAAI,EAAIA,EACnC,EAAO,KAAK,KAAKD,EAAOC,CAAI,EAAIA,OAC3B,GAAIA,EAAO,EAChB,EAAQ,KAAK,KAAK9I,EAAQ8I,CAAI,EAAIA,EAClC,EAAO,KAAK,MAAMD,EAAOC,CAAI,EAAIA,OAEjC,MAEF,EAAUA,CACZ,CAEA,OAAO+jB,CACT,EAEOA,CACT,CAEA,SAAwBrkC,UAAS,CAC/B,IAAIqkC,EAAQ,WAAW,EAQvB,MANA,GAAM,KAAO,UAAW,CACtB,OAAOpkC,OAAKokC,EAAOrkC,SAAO,CAAC,CAC7B,EAEA,UAAU,MAAMqkC,EAAO,SAAS,EAEzB,UAAUA,CAAK,CACxB,C,0BClEA,SAAwB,SAAS,EAAQ,CACvC,IAAID,EAEJ,SAAS,MAAM,EAAG,CAChB,OAAOt3B,GAAK,MAAQ,MAAM,EAAI,CAACA,CAAC,EAAIs3B,EAAUt3B,CAChD,CAkBA,MAhBA,OAAM,OAAS,MAEf,MAAM,OAAS,MAAM,MAAQ,SAAS,EAAG,CACvC,OAAO,UAAU,QAAU,EAAS,MAAM,KAAK2E,EAAGvR,QAAM,EAAG,OAASyiB,EAAO,MAAM,CACnF,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAUlR,EAAG,OAAS2yB,CACnD,EAEA,MAAM,KAAO,UAAW,CACtB,OAAO,SAASzhB,CAAM,CAAC,CAAC,QAAQyhB,CAAO,CACzC,EAEA,EAAS,UAAU,OAAS,MAAM,KAAKzhB,EAAQziB,QAAM,EAAI,CAAC,EAAG,CAAC,EAEvD,UAAU,KAAK,CACxB,CC3BA,SAAwBC,OAAK,EAAQ,EAAU,CAC7C,EAASwiB,EAAO,MAAM,EAEtB,IAAItU,EAAK,EACLC,EAAKqU,EAAO,OAAS,EACrBG,EAAKH,EAAOtU,GACZ0U,EAAKJ,EAAOrU,GACZkC,EASJ,OAPIuS,EAAKD,IACP,EAAIzU,EAAI,EAAKC,EAAI,EAAKkC,EACtB,EAAIsS,EAAI,EAAKC,EAAI,EAAKvS,GAGxB,EAAOnC,GAAM6D,EAAS,MAAM4Q,CAAE,EAC9B,EAAOxU,GAAM4D,EAAS,KAAK6Q,CAAE,EACtBJ,CACT,C,sBCXA,SAAS,aAAa,EAAG,CACvB,OAAO,KAAK,IAAI7V,CAAC,CACnB,CAEA,SAAS,aAAa,EAAG,CACvB,OAAO,KAAK,IAAIA,CAAC,CACnB,CAEA,SAAS,cAAc,EAAG,CACxB,MAAO,CAAC,KAAK,IAAI,CAACA,CAAC,CACrB,CAEA,SAAS,cAAc,EAAG,CACxB,MAAO,CAAC,KAAK,IAAI,CAACA,CAAC,CACrB,CAEA,SAAS,MAAM,EAAG,CAChB,OAAO,SAASA,CAAC,EAAI,EAAE,KAAOA,GAAKA,EAAI,EAAI,EAAIA,CACjD,CAEA,SAAS,KAAK,EAAM,CAClB,OAAOo4B,IAAS,GAAK,MACfA,IAAS,KAAK,EAAI,KAAK,IACvB,GAAcA,IAAMp4B,CAC5B,CAEA,SAAS,KAAK,EAAM,CAClB,OAAOo4B,IAAS,KAAK,EAAI,KAAK,IACxBA,IAAS,IAAM,KAAK,OACnBA,IAAS,GAAK,KAAK,OAClB,EAAO,KAAK,IAAIA,CAAI,EAAG,GAAK,KAAK,IAAIp4B,CAAC,EAAIo4B,EACpD,CAEA,SAAS,QAAQ,EAAG,CAClB,OAAQ,EAAG,IAAM,CAACvyB,EAAE,CAAC7F,EAAGqI,CAAC,CAC3B,CAEA,SAAgB,QAAQ,EAAW,CACjC,IAAMkvB,EAAQjE,EAAU,aAAc,YAAY,EAC5Czd,EAAS0hB,EAAM,OACjBa,EAAO,GACPC,EACAC,EAEJ,SAAS,SAAU,CAQjB,MAPA,GAAO,KAAKF,CAAI,EAAG,EAAO,KAAKA,CAAI,EAC/BviB,EAAO,CAAC,CAAC,GAAK,GAChB,EAAO,QAAQwiB,CAAI,EAAG,EAAO,QAAQC,CAAI,EACzChF,EAAU,cAAe,aAAa,GAEtCA,EAAU,aAAc,YAAY,EAE/BiE,CACT,CAwEA,MAtEA,GAAM,KAAO,SAAS,EAAG,CACvB,OAAO,UAAU,QAAU,EAAO,CAAC5yB,EAAG,QAAQ,GAAKyzB,CACrD,EAEA,EAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAUviB,EAAOlR,CAAC,EAAG,QAAQ,GAAKkR,EAAO,CAC5D,EAEA,EAAM,MAAQ,GAAS,CACrB,IAAMtL,EAAIsL,EAAO,EACb7H,EAAIzD,EAAE,GACNzH,EAAIyH,EAAEA,EAAE,OAAS,GACfrC,EAAIpF,EAAIkL,EAEV9F,IAAG,CAAE8F,EAAGlL,GAAK,CAACA,EAAGkL,CAAC,GAEtB,IAAI/O,EAAIo5B,EAAKrqB,CAAC,EACVtO,EAAI24B,EAAKv1B,CAAC,EACVuF,EACA3E,EACE9D,EAAIiU,GAAS,KAAO,GAAK,CAACA,EAC5BxK,EAAI,CAAC,EAET,GAAI,EAAE+uB,EAAO,IAAM14B,EAAIT,EAAIW,EAAG,CAE5B,GADA,EAAI,KAAK,MAAMX,CAAC,EAAG,EAAI,KAAK,KAAKS,CAAC,EAC9BsO,EAAI,EAAG,MAAO/O,GAAKS,EAAG,EAAET,EAC1B,IAAK,EAAI,EAAGoJ,EAAI+vB,EAAM,EAAE/vB,EAEtB,GADA,EAAIpJ,EAAI,EAAIoJ,EAAIiwB,EAAK,CAACr5B,CAAC,EAAIoJ,EAAIiwB,EAAKr5B,CAAC,EACjC,IAAI+O,GACR,IAAItK,EAAIZ,EAAG,MACXuG,EAAE,KAAK3F,CAAC,CADG,CAEb,MACK,KAAOzE,GAAKS,EAAG,EAAET,EACtB,IAAK,EAAIm5B,EAAO,EAAG/vB,GAAK,EAAG,EAAEA,EAE3B,GADA,EAAIpJ,EAAI,EAAIoJ,EAAIiwB,EAAK,CAACr5B,CAAC,EAAIoJ,EAAIiwB,EAAKr5B,CAAC,EACjC,IAAI+O,GACR,IAAItK,EAAIZ,EAAG,MACXuG,EAAE,KAAK3F,CAAC,CADG,CAIX2F,EAAE,OAAS,EAAIzJ,IAAG,EAAI,MAAMoO,EAAGlL,EAAGlD,CAAC,EACzC,KACE,GAAI,MAAMX,EAAGS,EAAG,KAAK,IAAIA,EAAIT,EAAGW,CAAC,CAAC,CAAC,CAAC,IAAI04B,CAAI,EAE9C,OAAOpwB,EAAImB,EAAE,QAAQ,EAAIA,CAC3B,EAEA,EAAM,YAAc,EAAO,IAAc,CAOvC,GANA,AAAmBwK,IAAQ,GAC3B,AAAuB6H,IAAY0c,IAAS,GAAK,IAAM,IACnD,OAAO1c,GAAc,aACnB,EAAE0c,EAAO,KAAO,EAAY,gBAAgB1c,CAAS,EAAA,CAAG,WAAa,OAAM,EAAU,KAAO,IAChG,EAAYzT,GAAOyT,CAAS,GAE1B7H,IAAU,IAAU,OAAO6H,EAC/B,IAAMrT,EAAI,KAAK,IAAI,EAAG+vB,EAAOvkB,EAAQ0jB,EAAM,MAAM,CAAC,CAAC,MAAM,EACzD,MAAO,IAAK,CACV,IAAIt4B,EAAIsL,EAAI+tB,EAAK,KAAK,MAAMD,EAAK9tB,CAAC,CAAC,CAAC,EAEpC,OADItL,EAAIm5B,EAAOA,EAAO,KAAK,GAAKA,GACzBn5B,GAAKoJ,EAAIqT,EAAUnR,CAAC,EAAI,EACjC,CACF,EAEA,EAAM,SACGsL,EAAOviB,OAAKuiB,EAAO,EAAG,CAC3B,MAAO,GAAKyiB,EAAK,KAAK,MAAMD,EAAKr4B,CAAC,CAAC,CAAC,EACpC,KAAM,GAAKs4B,EAAK,KAAK,KAAKD,EAAKr4B,CAAC,CAAC,CAAC,CACpC,CAAC,CAAC,EAGGu3B,CACT,CAEA,SAAwB,KAAM,CAC5B,IAAMA,EAAQ,QAAQhkC,cAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAG,EAAE,CAAC,EAGnD,MAFA,GAAM,SAAaC,OAAK+jC,EAAO,IAAI,CAAC,CAAC,CAAC,KAAKA,EAAM,KAAK,CAAC,EACvD,UAAU,MAAMA,EAAO,SAAS,EACzBA,CACT,CCvIA,SAAS,gBAAgB,EAAG,CAC1B,OAAO,SAAS,EAAG,CACjB,OAAO,KAAK,KAAKv3B,CAAC,EAAI,KAAK,MAAM,KAAK,IAAIA,EAAIiF,CAAC,CAAC,CAClD,CACF,CAEA,SAAS,gBAAgB,EAAG,CAC1B,OAAO,SAAS,EAAG,CACjB,OAAO,KAAK,KAAKjF,CAAC,EAAI,KAAK,MAAM,KAAK,IAAIA,CAAC,CAAC,EAAIiF,CAClD,CACF,CAEA,SAAgB,UAAU,EAAW,CACnC,IAAIA,EAAI,EAAGsyB,EAAQjE,EAAU,gBAAgBruB,CAAC,EAAG,gBAAgBA,CAAC,CAAC,EAMnE,MAJA,GAAM,SAAW,SAAS,EAAG,CAC3B,OAAO,UAAU,OAASquB,EAAU,gBAAgB,EAAI,CAAC3uB,CAAC,EAAG,gBAAgBM,CAAC,CAAC,EAAIA,CACrF,EAEO,UAAUsyB,CAAK,CACxB,CAEA,SAAwB,QAAS,CAC/B,IAAIA,EAAQ,UAAU9jC,cAAY,CAAC,EAMnC,MAJA,GAAM,KAAO,UAAW,CACtB,OAAOC,OAAK6jC,EAAO,OAAO,CAAC,CAAC,CAAC,SAASA,EAAM,SAAS,CAAC,CACxD,EAEO,UAAU,MAAMA,EAAO,SAAS,CACzC,CC9BA,SAAS,aAAa,EAAU,CAC9B,OAAO,SAAS,EAAG,CACjB,OAAOv3B,EAAI,EAAI,GAAU,CAACA,KAAGqQ,GAAqBrQ,IAAGqQ,CACvD,CACF,CAEA,SAAS,cAAc,EAAG,CACxB,OAAOrQ,EAAI,EAAI,CAAC,KAAK,KAAK,CAACA,CAAC,EAAI,KAAK,KAAKA,CAAC,CAC7C,CAEA,SAAS,gBAAgB,EAAG,CAC1B,OAAOA,EAAI,EAAI,CAACA,EAAIA,EAAIA,EAAIA,CAC9B,CAEA,SAAgB,OAAO,EAAW,CAChC,IAAIu3B,EAAQjE,EAAU3/B,WAAUA,UAAQ,EACpC0c,EAAW,EAEf,SAAS,SAAU,CACjB,OAAOA,IAAa,EAAIijB,EAAU3/B,WAAUA,UAAQ,EAC9C0c,IAAa,GAAMijB,EAAU,cAAe,eAAe,EAC3DA,EAAU,aAAajjB,CAAQ,EAAG,aAAa,EAAIA,CAAQ,CAAC,CACpE,CAMA,MAJA,GAAM,SAAW,SAAS,EAAG,CAC3B,OAAO,UAAU,QAAU,EAAW,CAAC1L,EAAG,QAAQ,GAAK0L,CACzD,EAEO,UAAUknB,CAAK,CACxB,CAEA,SAAwB,KAAM,CAC5B,IAAIA,EAAQ,OAAO3jC,cAAY,CAAC,EAQhC,MANA,GAAM,KAAO,UAAW,CACtB,OAAOC,OAAK0jC,EAAO,IAAI,CAAC,CAAC,CAAC,SAASA,EAAM,SAAS,CAAC,CACrD,EAEA,UAAU,MAAMA,EAAO,SAAS,EAEzBA,CACT,CAEA,SAAgB,MAAO,CACrB,OAAO,IAAI,MAAM,KAAM,SAAS,CAAC,CAAC,SAAS,EAAG,CAChD,CC5CA,SAAS,OAAO,EAAG,CACjB,OAAO,KAAK,KAAKv3B,CAAC,EAAIA,EAAIA,CAC5B,CAEA,SAAS,SAAS,EAAG,CACnB,OAAO,KAAK,KAAKA,CAAC,EAAI,KAAK,KAAK,KAAK,IAAIA,CAAC,CAAC,CAC7C,CAEA,SAAwB,QAAS,CAC/B,IAAIu4B,EAAU,WAAW,EACrB9sB,EAAQ,CAAC,EAAG,CAAC,EACbqoB,EAAQ,GACRwD,EAEJ,SAAS,MAAM,EAAG,CAChB,IAAIluB,EAAI,SAASmvB,EAAQv4B,CAAC,CAAC,EAC3B,OAAO,MAAMoJ,CAAC,EAAIkuB,EAAUxD,EAAQ,KAAK,MAAM1qB,CAAC,EAAIA,CACtD,CAuCA,MArCA,OAAM,OAAS,SAAS,EAAG,CACzB,OAAOmvB,EAAQ,OAAO,OAAOnvB,CAAC,CAAC,CACjC,EAEA,MAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAUmvB,EAAQ,OAAO5zB,CAAC,EAAG,OAAS4zB,EAAQ,OAAO,CACxE,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAUA,EAAQ,OAAO,EAAQ,MAAM,KAAK5zB,EAAG7Q,QAAM,EAAA,CAAG,IAAI,MAAM,CAAC,EAAG,OAAS2X,EAAM,MAAM,CAC9G,EAEA,MAAM,WAAa,SAAS,EAAG,CAC7B,OAAO,MAAM,MAAM9G,CAAC,CAAC,CAAC,MAAM,EAAI,CAClC,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,CAAC,CAACA,EAAG,OAASmvB,CACnD,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAUyE,EAAQ,MAAM5zB,CAAC,EAAG,OAAS4zB,EAAQ,MAAM,CACtE,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAU5zB,EAAG,OAAS2yB,CACnD,EAEA,MAAM,KAAO,UAAW,CACtB,OAAO,OAAOiB,EAAQ,OAAO,EAAG9sB,CAAK,CAAC,CACjC,MAAMqoB,CAAK,CAAC,CACZ,MAAMyE,EAAQ,MAAM,CAAC,CAAC,CACtB,QAAQjB,CAAO,CACtB,EAEA,UAAU,MAAM,MAAO,SAAS,EAEzB,UAAU,KAAK,CACxB,CC3DA,SAAwBvjC,YAAW,CACjC,IAAI8hB,EAAS,CAAC,EACVpK,EAAQ,CAAC,EACT+sB,EAAa,CAAC,EACdlB,EAEJ,SAAS,SAAU,CACjB,IAAIr4B,EAAI,EAAGW,EAAI,KAAK,IAAI,EAAG6L,EAAM,MAAM,EAEvC,IADA,EAAiB,MAAM7L,EAAI,CAAC,EACrB,EAAEX,EAAIW,GAAG,EAAWX,EAAI,GAAKjL,eAAU6hB,EAAQ5W,EAAIW,CAAC,EAC3D,OAAO,KACT,CAEA,SAAS,MAAM,EAAG,CAChB,OAAOI,GAAK,MAAQ,MAAM,EAAI,CAACA,CAAC,EAAIs3B,EAAU7rB,EAAMxX,EAAOukC,EAAYx4B,CAAC,EAC1E,CAqCA,MAnCA,OAAM,aAAe,SAAS,EAAG,CAC/B,IAAIf,EAAIwM,EAAM,QAAQrC,CAAC,EACvB,OAAOnK,EAAI,EAAI,CAAC,IAAK,GAAG,EAAI,CAC1BA,EAAI,EAAIu5B,EAAWv5B,EAAI,GAAK4W,EAAO,GACnC5W,EAAIu5B,EAAW,OAASA,EAAWv5B,GAAK4W,EAAOA,EAAO,OAAS,EACjE,CACF,EAEA,MAAM,OAAS,SAAS,EAAG,CACzB,GAAI,CAAC,UAAU,OAAQ,OAAOA,EAAO,MAAM,EAC3C,EAAS,CAAC,EACV,IAAK,IAAItL,KAAK5F,EAAO4F,GAAK,MAAQ,CAAC,MAAM,EAAI,CAACA,CAAC,GAAGsL,EAAO,KAAKtL,CAAC,EAE/D,OADAsL,EAAO,KAAK,SAAS,EACd,QAAQ,CACjB,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,MAAM,KAAKlR,CAAC,EAAG,QAAQ,GAAK8G,EAAM,MAAM,CAC7E,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAU9G,EAAG,OAAS2yB,CACnD,EAEA,MAAM,UAAY,UAAW,CAC3B,OAAOkB,EAAW,MAAM,CAC1B,EAEA,MAAM,KAAO,UAAW,CACtB,OAAOzkC,WAAS,CAAC,CACZ,OAAO8hB,CAAM,CAAC,CACd,MAAMpK,CAAK,CAAC,CACZ,QAAQ6rB,CAAO,CACtB,EAEO,UAAU,MAAM,MAAO,SAAS,CACzC,C,8BCpDA,SAAwB,UAAW,CACjC,IAAIthB,EAAK,EACLC,EAAK,EACL,EAAI,EACJJ,EAAS,CAAC,EAAG,EACbpK,EAAQ,CAAC,EAAG,CAAC,EACb6rB,EAEJ,SAAS,MAAM,EAAG,CAChB,OAAOt3B,GAAK,MAAQA,GAAKA,EAAIyL,EAAMvX,EAAO2hB,EAAQ7V,EAAG,EAAG,CAAC,GAAKs3B,CAChE,CAEA,SAAS,SAAU,CACjB,IAAIr4B,EAAI,GAER,IADA,EAAa,MAAM,CAAC,EACb,EAAEA,EAAI,GAAG,EAAOA,KAAOA,EAAI,GAAKgX,GAAMhX,EAAI,GAAK+W,IAAO,EAAI,GACjE,OAAO,KACT,CAiCA,MA/BA,OAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,CAACA,EAAIC,GAAMtR,EAAG,EAAK,CAACqR,EAAI,EAAK,CAACC,EAAI,QAAQ,GAAK,CAACD,EAAIC,CAAE,CACnF,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,GAAK,EAAQ,MAAM,KAAKtR,CAAC,EAAA,CAAG,OAAS,EAAG,QAAQ,GAAK8G,EAAM,MAAM,CAC9F,EAEA,MAAM,aAAe,SAAS,EAAG,CAC/B,IAAIxM,EAAIwM,EAAM,QAAQrC,CAAC,EACvB,OAAOnK,EAAI,EAAI,CAAC,IAAK,GAAG,EAClBA,EAAI,EAAI,CAAC+W,EAAIH,EAAO,EAAE,EACtB5W,GAAK,EAAI,CAAC4W,EAAO,EAAI,GAAII,CAAE,EAC3B,CAACJ,EAAO5W,EAAI,GAAI4W,EAAO5W,EAAE,CACjC,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,SAAU,EAAU0F,GAAG,KAC1C,EAEA,MAAM,WAAa,UAAW,CAC5B,OAAOkR,EAAO,MAAM,CACtB,EAEA,MAAM,KAAO,UAAW,CACtB,OAAO,SAAS,CAAC,CACZ,OAAO,CAACG,EAAIC,CAAE,CAAC,CAAC,CAChB,MAAMxK,CAAK,CAAC,CACZ,QAAQ6rB,CAAO,CACtB,EAEO,UAAU,MAAM,UAAU,KAAK,EAAG,SAAS,CACpD,CCpDA,SAAwB,WAAY,CAClC,IAAIzhB,EAAS,CAAC,EAAG,EACbpK,EAAQ,CAAC,EAAG,CAAC,EACb6rB,EACA13B,EAAI,EAER,SAAS,MAAM,EAAG,CAChB,OAAOI,GAAK,MAAQA,GAAKA,EAAIyL,EAAMtX,EAAO0hB,EAAQ7V,EAAG,EAAGJ,CAAC,GAAK03B,CAChE,CA0BA,MAxBA,OAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,EAAS,MAAM,KAAK3yB,CAAC,EAAG,EAAI,KAAK,IAAIkR,EAAO,OAAQpK,EAAM,OAAS,CAAC,EAAG,OAASoK,EAAO,MAAM,CAC1H,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,MAAM,KAAKlR,CAAC,EAAG,EAAI,KAAK,IAAIkR,EAAO,OAAQpK,EAAM,OAAS,CAAC,EAAG,OAASA,EAAM,MAAM,CACxH,EAEA,MAAM,aAAe,SAAS,EAAG,CAC/B,IAAIxM,EAAIwM,EAAM,QAAQrC,CAAC,EACvB,MAAO,CAACyM,EAAO5W,EAAI,GAAI4W,EAAO5W,EAAE,CAClC,EAEA,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAU0F,EAAG,OAAS2yB,CACnD,EAEA,MAAM,KAAO,UAAW,CACtB,OAAO,UAAU,CAAC,CACb,OAAOzhB,CAAM,CAAC,CACd,MAAMpK,CAAK,CAAC,CACZ,QAAQ6rB,CAAO,CACtB,EAEO,UAAU,MAAM,MAAO,SAAS,CACzC,CChCA,SAAS,KAAK,EAAG,CACf,OAAO,IAAI,KAAK5zB,CAAC,CACnB,CAEA,SAAS,OAAO,EAAG,CACjB,OAAOA,aAAa,KAAO,CAACA,EAAI,CAAC,IAAI,KAAK,CAACA,CAAC,CAC9C,CAEA,SAAgB,SAAS,EAAO,EAAc,EAAM,EAAO,EAAM,EAAK,EAAM,EAAQ,EAAQ,EAAQ,CAClG,IAAI6zB,EAAQ,WAAW,EACnBkB,EAASlB,EAAM,OACf1hB,EAAS0hB,EAAM,OAEfmB,EAAoBzwB,EAAO,KAAK,EAChC0wB,EAAe1wB,EAAO,KAAK,EAC3B2wB,EAAe3wB,EAAO,OAAO,EAC7B4wB,EAAa5wB,EAAO,OAAO,EAC3B6wB,EAAY7wB,EAAO,OAAO,EAC1B8wB,EAAa9wB,EAAO,OAAO,EAC3B+wB,EAAc/wB,EAAO,IAAI,EACzBgxB,EAAahxB,EAAO,IAAI,EAE5B,SAAS,WAAW,EAAM,CACxB,OAAQ8W,EAAOxF,CAAI,EAAIA,EAAOmf,EACxBhY,EAAOnH,CAAI,EAAIA,EAAOof,EACtBhY,EAAKpH,CAAI,EAAIA,EAAOqf,EACpBhY,EAAIrH,CAAI,EAAIA,EAAOsf,EACnB/X,EAAMvH,CAAI,EAAIA,EAAQsH,EAAKtH,CAAI,EAAIA,EAAOuf,EAAYC,EACtD1f,EAAKE,CAAI,EAAIA,EAAOyf,EACpBC,EAAA,CAAY1f,CAAI,CACxB,CA6BA,MA3BA,GAAM,OAAS,SAAS,EAAG,CACzB,OAAO,IAAI,KAAKkf,EAAOrvB,CAAC,CAAC,CAC3B,EAEA,EAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,OAASyM,EAAO,MAAM,KAAKlR,EAAG,MAAM,CAAC,EAAIkR,EAAO,CAAC,CAAC,IAAI,IAAI,CAC7E,EAEA,EAAM,MAAQ,SAAS,EAAU,CAC/B,IAAItL,EAAIsL,EAAO,EACf,OAAOF,EAAMpL,EAAE,GAAIA,EAAEA,EAAE,OAAS,GAAInF,GAAmB,EAAa,CACtE,EAEA,EAAM,WAAa,SAAS,EAAO,EAAW,CAC5C,OAAOsW,GAAa,KAAO,WAAazT,EAAOyT,CAAS,CAC1D,EAEA,EAAM,KAAO,SAAS,EAAU,CAC9B,IAAInR,EAAIsL,EAAO,EAEf,OADI,CAACzQ,GAAY,OAAOA,EAAS,OAAU,cAAY,EAAW8zB,EAAa3uB,EAAE,GAAIA,EAAEA,EAAE,OAAS,GAAInF,GAAmB,EAAa,GAC/HA,EAAWyQ,EAAOzhB,OAAKmW,EAAGnF,CAAQ,CAAC,EAAImyB,CAChD,EAEA,EAAM,KAAO,UAAW,CACtB,OAAOljC,OAAKkjC,EAAO,SAAS5hB,EAAOujB,EAAc7f,EAAMyH,EAAOD,EAAMD,EAAKD,EAAMD,EAAQ3B,EAAQ9W,CAAM,CAAC,CACxG,EAEOsvB,CACT,CAEA,SAAwB,MAAO,CAC7B,OAAO,UAAU,MAAM,SAAStW,GAAWC,GAAkBX,EAAUF,GAAW/rB,GAAU8qB,GAASF,GAAUF,GAAYzqB,EAAY8vB,EAAU,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,IAAM,EAAG,CAAC,EAAG,IAAI,KAAK,IAAM,EAAG,CAAC,CAAC,CAAC,EAAG,SAAS,CACpN,CCjEA,SAAwB,SAAU,CAChC,OAAO,UAAU,MAAM,SAAStD,GAAUC,GAAiBR,EAASF,GAAU9rB,GAAS6qB,GAAQF,GAASF,GAAWxqB,EAAW8vB,EAAS,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAM,EAAG,CAAC,EAAG,KAAK,IAAI,IAAM,EAAG,CAAC,CAAC,CAAC,EAAG,SAAS,CAC1M,CCCA,SAAS7vB,eAAc,CACrB,IAAIshB,EAAK,EACLC,EAAK,EACL/P,EACAC,EACAgzB,EACA7F,EACAzkB,EAAela,WACfojC,EAAQ,GACRT,EAEJ,SAAS,MAAM,EAAG,CAChB,OAAOt3B,GAAK,MAAQ,MAAM,EAAI,CAACA,CAAC,EAAIs3B,EAAUzoB,EAAasqB,IAAQ,EAAI,IAAO,GAAK7F,EAAUtzB,CAAC,EAAIkG,GAAMizB,EAAKpB,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG/3B,CAAC,CAAC,EAAIA,EAAE,CACvJ,CAEA,MAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,CAACgW,EAAIC,GAAMtR,EAAG,EAAK2uB,EAAU,EAAK,CAACtd,CAAE,EAAG,EAAKsd,EAAU,EAAK,CAACrd,CAAE,EAAG,EAAM/P,IAAOC,EAAK,EAAI,GAAKA,EAAKD,GAAK,OAAS,CAAC8P,EAAIC,CAAE,CACpJ,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,CAAC,CAACtR,EAAG,OAASozB,CACnD,EAEA,MAAM,aAAe,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,EAAepzB,EAAG,OAASkK,CACxD,EAEA,SAAS,MAAM,EAAa,CAC1B,OAAO,SAAS,EAAG,CACjB,IAAIf,EAAI2pB,EACR,OAAO,UAAU,QAAU,CAAC3pB,EAAI2pB,GAAM9yB,EAAG,EAAe+J,EAAYZ,EAAI2pB,CAAE,EAAG,OAAS,CAAC5oB,EAAa,CAAC,EAAGA,EAAa,CAAC,CAAC,CACzH,CACF,CAUA,MARA,OAAM,MAAQ,MAAMja,aAAW,EAE/B,MAAM,WAAa,MAAMC,aAAgB,EAEzC,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAU8P,EAAG,OAAS2yB,CACnD,EAEO,SAAS,EAAG,CAEjB,MADA,GAAY5zB,EAAG,EAAKA,EAAEsS,CAAE,EAAG,EAAKtS,EAAEuS,CAAE,EAAG,EAAM/P,IAAOC,EAAK,EAAI,GAAKA,EAAKD,GAChE,KACT,CACF,C,oCAEA,SAAgB,KAAK,EAAQ,EAAQ,CACnC,OAAO1H,EACF,OAAOmW,EAAO,OAAO,CAAC,CAAC,CACvB,aAAaA,EAAO,aAAa,CAAC,CAAC,CACnC,MAAMA,EAAO,MAAM,CAAC,CAAC,CACrB,QAAQA,EAAO,QAAQ,CAAC,CAC/B,CAEA,SAAwB,YAAa,CACnC,IAAI4iB,EAAQ,UAAU7iC,cAAY,CAAC,CAACC,UAAQ,CAAC,EAM7C,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAK4iC,EAAO,WAAW,CAAC,CACjC,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,eAAgB,CAC9B,IAAIA,EAAQ,QAAQ7iC,cAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAG,EAAE,CAAC,EAMjD,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAK6iC,EAAO,cAAc,CAAC,CAAC,CAAC,KAAKA,EAAM,KAAK,CAAC,CACvD,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,kBAAmB,CACjC,IAAIA,EAAQ,UAAU7iC,cAAY,CAAC,EAMnC,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAK6iC,EAAO,iBAAiB,CAAC,CAAC,CAAC,SAASA,EAAM,SAAS,CAAC,CAClE,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,eAAgB,CAC9B,IAAIA,EAAQ,OAAO7iC,cAAY,CAAC,EAMhC,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAK6iC,EAAO,cAAc,CAAC,CAAC,CAAC,SAASA,EAAM,SAAS,CAAC,CAC/D,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,gBAAiB,CAC/B,OAAO,cAAc,MAAM,KAAM,SAAS,CAAC,CAAC,SAAS,EAAG,CAC1D,CCtGA,SAAwB,oBAAqB,CAC3C,IAAI1hB,EAAS,CAAC,EACVhH,EAAe/Z,WAEnB,SAAS,MAAM,EAAG,CAChB,GAAIkL,GAAK,MAAQ,CAAC,MAAM,EAAI,CAACA,CAAC,EAAG,OAAO6O,GAAc9Z,EAAO8gB,EAAQ7V,EAAG,CAAC,EAAI,IAAM6V,EAAO,OAAS,EAAE,CACvG,CA0BA,MAxBA,OAAM,OAAS,SAAS,EAAG,CACzB,GAAI,CAAC,UAAU,OAAQ,OAAOA,EAAO,MAAM,EAC3C,EAAS,CAAC,EACV,IAAK,IAAItL,KAAK5F,EAAO4F,GAAK,MAAQ,CAAC,MAAM,EAAI,CAACA,CAAC,GAAGsL,EAAO,KAAKtL,CAAC,EAE/D,OADAsL,EAAO,KAAK,SAAS,EACd,KACT,EAEA,MAAM,aAAe,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,EAAelR,EAAG,OAASkK,CACxD,EAEA,MAAM,MAAQ,UAAW,CACvB,OAAOgH,EAAO,KAAK,EAAG,IAAMhH,EAAa5P,GAAK4W,EAAO,OAAS,EAAE,CAAC,CACnE,EAEA,MAAM,UAAY,SAAS,EAAG,CAC5B,OAAO,MAAM,KAAK,CAAC,OAAQjW,EAAI,CAAC,GAAI,EAAG,IAAM,SAASiW,EAAQ5W,EAAIW,CAAC,CAAC,CACtE,EAEA,MAAM,KAAO,UAAW,CACtB,OAAO,mBAAmBiP,CAAY,CAAC,CAAC,OAAOgH,CAAM,CACvD,EAEO,iBAAiB,MAAM,MAAO,SAAS,CAChD,CC5BA,SAAS,aAAc,CACrB,IAAIG,EAAK,EACLC,EAAK,GACL4c,EAAK,EACLvqB,EAAI,EACJpC,EACAC,EACAC,EACA+yB,EACAC,EACAvqB,EAAe7Z,WACfs+B,EACAyE,EAAQ,GACRT,EAEJ,SAAS,MAAM,EAAG,CAChB,OAAO,MAAM,EAAI,CAACt3B,CAAC,EAAIs3B,GAAW,EAAI,KAAQ,EAAI,CAAChE,EAAUtzB,CAAC,GAAKmG,IAAOmC,EAAItI,EAAIsI,EAAInC,EAAKgzB,EAAMC,GAAMvqB,EAAakpB,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG/3B,CAAC,CAAC,EAAIA,CAAC,EAC7J,CAEA,MAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,CAACgW,EAAIC,EAAI4c,GAAMluB,EAAG,EAAK2uB,EAAU,EAAK,CAACtd,CAAE,EAAG,EAAKsd,EAAU,EAAK,CAACrd,CAAE,EAAG,EAAKqd,EAAU,EAAK,CAACT,CAAE,EAAG,EAAM3sB,IAAOC,EAAK,EAAI,IAAOA,EAAKD,GAAK,EAAMC,IAAOC,EAAK,EAAI,IAAOA,EAAKD,GAAK,EAAIA,EAAKD,EAAK,GAAK,EAAG,OAAS,CAAC8P,EAAIC,EAAI4c,CAAE,CACrP,EAEA,MAAM,MAAQ,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAQ,CAAC,CAACluB,EAAG,OAASozB,CACnD,EAEA,MAAM,aAAe,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,EAAepzB,EAAG,OAASkK,CACxD,EAEA,SAAS,MAAM,EAAa,CAC1B,OAAO,SAAS,EAAG,CACjB,IAAIf,EAAI2pB,EAAI4B,EACZ,OAAO,UAAU,QAAU,CAACvrB,EAAI2pB,EAAI4B,GAAM10B,EAAG,EAAe,UAAU+J,EAAa,CAACZ,EAAI2pB,EAAI4B,CAAE,CAAC,EAAG,OAAS,CAACxqB,EAAa,CAAC,EAAGA,EAAa,EAAG,EAAGA,EAAa,CAAC,CAAC,CACjK,CACF,CAUA,MARA,OAAM,MAAQ,MAAM5Z,aAAW,EAE/B,MAAM,WAAa,MAAMC,aAAgB,EAEzC,MAAM,QAAU,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAUyP,EAAG,OAAS2yB,CACnD,EAEO,SAAS,EAAG,CAEjB,MADA,GAAY5zB,EAAG,EAAKA,EAAEsS,CAAE,EAAG,EAAKtS,EAAEuS,CAAE,EAAG,EAAKvS,EAAEmvB,CAAE,EAAG,EAAM3sB,IAAOC,EAAK,EAAI,IAAOA,EAAKD,GAAK,EAAMC,IAAOC,EAAK,EAAI,IAAOA,EAAKD,GAAK,EAAIA,EAAKD,EAAK,GAAK,EAC7I,KACT,CACF,CAEA,SAAwB,WAAY,CAClC,IAAIqxB,EAAQ,UAAU,YAAY,CAAC,CAACviC,UAAQ,CAAC,EAM7C,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAKuiC,EAAO,UAAU,CAAC,CAChC,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,cAAe,CAC7B,IAAIA,EAAQ,QAAQ,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAK,EAAG,EAAE,CAAC,EAMtD,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAKA,EAAO,aAAa,CAAC,CAAC,CAAC,KAAKA,EAAM,KAAK,CAAC,CACtD,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,iBAAkB,CAChC,IAAIA,EAAQ,UAAU,YAAY,CAAC,EAMnC,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAKA,EAAO,gBAAgB,CAAC,CAAC,CAAC,SAASA,EAAM,SAAS,CAAC,CACjE,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,cAAe,CAC7B,IAAIA,EAAQ,OAAO,YAAY,CAAC,EAMhC,MAJA,GAAM,KAAO,UAAW,CACtB,OAAO,KAAKA,EAAO,aAAa,CAAC,CAAC,CAAC,SAASA,EAAM,SAAS,CAAC,CAC9D,EAEO,iBAAiB,MAAMA,EAAO,SAAS,CAChD,CAEA,SAAgB,eAAgB,CAC9B,OAAO,aAAa,MAAM,KAAM,SAAS,CAAC,CAAC,SAAS,EAAG,CACzD,CCvGA,SAAA,eAAwB,EAAW,CAEjC,IADA,IAAI33B,EAAI8b,EAAU,OAAS,EAAI,EAAG9Q,EAAa,MAAMhL,CAAC,EAAGX,EAAI,EACtDA,EAAIW,GAAG,EAAOX,GAAK,IAAMyc,EAAU,MAAMzc,EAAI,EAAG,EAAEA,EAAI,CAAC,EAC9D,OAAO2L,CACT,C,iCCFA,IAAA0uB,GAAenkC,eAAO,8DAA8D,ECApFokC,GAAenkC,eAAO,kDAAkD,ECAxEokC,GAAenkC,eAAO,kDAAkD,ECAxEokC,GAAenkC,eAAO,8DAA8D,ECApFokC,GAAenkC,eAAO,0EAA0E,ECAhGokC,GAAenkC,eAAO,wDAAwD,ECA9EokC,GAAenkC,eAAO,kDAAkD,ECAxEokC,GAAenkC,eAAO,wDAAwD,ECA9EokC,GAAenkC,eAAO,kDAAkD,ECAxEokC,GAAenkC,eAAO,0EAA0E,ECAhGokC,GAAenkC,eAAO,8DAA8D,ECApFokC,EAAA,OAAe,GAAUnkC,GAAoBokC,EAAOA,EAAO,OAAS,EAAE,EAAA,SAAA,ECC3DnkC,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZokC,GAAenkC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZmkC,GAAelkC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZkkC,GAAejkC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZikC,GAAehkC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZgkC,GAAe/jC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZ+jC,GAAe9jC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZ8jC,GAAe7jC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZ6jC,GAAe5jC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,oEAT6B,CAAC,CAU9B,IAAIC,cAAM,EAEZ4jC,GAAe3jC,EAAKF,EAAM,ECZfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ2jC,GAAe1jC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ0jC,GAAezjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZyjC,GAAexjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZwjC,GAAevjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZujC,GAAetjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZsjC,GAAerjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZqjC,GAAepjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZojC,GAAenjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZmjC,GAAeljC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZkjC,GAAejjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZijC,GAAehjC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZgjC,GAAe/iC,EAAKF,EAAM,ECVfugC,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIpgC,cAAM,EAEZ+iC,GAAe9iC,EAAKmgC,EAAM,ECVflgC,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ8iC,GAAe7iC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ6iC,GAAe5iC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ4iC,GAAe3iC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ2iC,GAAe1iC,EAAKF,EAAM,ECVfG,GAAS,IAClB,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,wDAP6B,CAAC,CAQ9B,IAAIC,cAAM,EAEZ0iC,GAAeziC,EAAKF,EAAM,ECb1B,SAAA,gBAAwB,EAAG,CAEzB,MADA,GAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG8I,CAAC,CAAC,EACvB,OACD,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,MAAQA,GAAK,MAAQA,GAAK,QAAUA,GAAK,OAASA,GAAK,QAAUA,EAAI,WAAW,CAAC,CAAC,EAAI,KAC3H,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,MAAQA,GAAK,OAASA,GAAK,MAAQA,GAAK,OAASA,GAAK,OAASA,EAAI,SAAS,CAAC,CAAC,EAAI,KACvH,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,MAAQA,GAAK,OAASA,GAAK,QAAUA,GAAK,QAAUA,GAAK,QAAUA,EAAI,WAAW,CAAC,CAAC,EACzH,GACR,C,kCCJA,IAAA85B,GAAeziC,GAAyB,UAAU,IAAK,GAAK,CAAG,EAAG,UAAU,KAAM,GAAK,CAAG,CAAC,ECAhF0iC,GAAOziC,GAAyB,UAAU,KAAM,IAAM,GAAI,EAAG,UAAU,GAAI,IAAM,EAAG,CAAC,EAErF0iC,GAAO1iC,GAAyB,UAAU,IAAK,IAAM,GAAI,EAAG,UAAU,GAAI,IAAM,EAAG,CAAC,EAE3FC,GAAI,UAAU,EAElB,SAAA,gBAAwB,EAAG,EACrByI,EAAI,GAAKA,EAAI,KAAG,GAAK,KAAK,MAAMA,CAAC,GACrC,IAAIk6B,EAAK,KAAK,IAAIl6B,EAAI,EAAG,EAIzB,MAHA,IAAE,EAAI,IAAMA,EAAI,IAChB,GAAE,EAAI,IAAM,IAAMk6B,EAClB,GAAE,EAAI,GAAM,GAAMA,EACX3iC,GAAI,EACb,C,kCCdA,IAAIgK,GAAI,IAAI,EACR44B,GAAS,KAAK,GAAK,EACnBC,GAAS,KAAK,GAAK,EAAI,EAE3B,SAAA,gBAAwB,EAAG,CACzB,IAAI99B,EAKJ,MAJA,IAAK,GAAM0D,GAAK,KAAK,GACrB,GAAE,EAAI,KAAO,EAAI,KAAK,IAAIA,CAAC,GAAK1D,EAChC,GAAE,EAAI,KAAO,EAAI,KAAK,IAAI0D,EAAIm6B,EAAM,GAAK79B,EACzC,GAAE,EAAI,KAAO,EAAI,KAAK,IAAI0D,EAAIo6B,EAAM,GAAK99B,EAClCiF,GAAI,EACb,C,kCCbA,SAAA,cAAwB,EAAG,CAEzB,MADA,GAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGvB,CAAC,CAAC,EACvB,OACD,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,MAAQA,GAAK,QAAUA,GAAK,SAAWA,GAAK,SAAWA,GAAK,SAAWA,EAAI,YAAY,CAAC,CAAC,EAAI,KAClI,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,MAAQA,GAAK,OAASA,GAAK,QAAUA,GAAK,QAAUA,GAAK,QAAUA,EAAI,UAAU,CAAC,CAAC,EAAI,KAC5H,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,KAAK,MAAM,KAAOA,GAAK,OAASA,GAAK,SAAWA,GAAK,MAAQA,GAAK,SAAWA,EAAI,WAAW,CAAC,CAAC,EACxH,GACR,C,gCCLA,SAAS,KAAK,EAAO,CACnB,IAAI9D,EAAI6L,EAAM,OACd,OAAO,SAAS,EAAG,CACjB,OAAOA,EAAM,KAAK,IAAI,EAAG,KAAK,IAAI7L,EAAI,EAAG,KAAK,MAAM8D,EAAI9D,CAAC,CAAC,CAAC,EAC7D,CACF,CAEA,IAAAm+B,GAAe,KAAK7iC,eAAO,kgDAAkgD,CAAC,EAEnhD8iC,GAAQ,KAAK9iC,eAAO,kgDAAkgD,CAAC,EAEvhD+iC,GAAU,KAAK/iC,eAAO,kgDAAkgD,CAAC,EAEzhDgjC,GAAS,KAAKhjC,eAAO,kgDAAkgD,CAAC,E,kKCR7hDojC,GAAqB,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAIhPC,GAAY,CACd,WAAYpjC,GACZ,WAAYmjC,GACZ,YAAa,CANY,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAM7N,EACb,YAAa,CANY,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAM7N,CACjB,EAEME,EAAgBpjC,GAEhBqjC,GAAO,CACT,QAASpjC,GACT,MAAOC,GACP,QAASC,GACT,OAAQC,EACZ,EAEMkjC,GAAY,CACd,aAAc,aAAc,cAAe,aAC/C,EAEMC,GAAgB,CAClB,SAAU,QAAS,SAAU,UAAW,UAAW,OAAQ,OAAQ,MACvE,EAEMC,GAAc,CAChB,SAAU,QACd,EAGMC,GAAgB,CAClB,eAAgB,CAAC,oBAAqB,oBAAqB,oBAAqB,oBAAqB,kBAAmB,oBAAqB,mBAAoB,oBAAqB,oBAAqB,kBAAmB,oBAAqB,oBAAqB,mBAAoB,qBAAsB,qBAAsB,oBAAqB,kBAAmB,mBAAoB,qBAAsB,oBAAoB,EAC9a,gBAAiB,CAAC,oBAAqB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,mBAAoB,mBAAoB,mBAAoB,oBAAqB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,oBAAqB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,iBAAiB,EACxb,cAAe,CAAC,qBAAsB,qBAAsB,qBAAsB,oBAAqB,qBAAsB,oBAAqB,oBAAqB,mBAAoB,oBAAqB,qBAAsB,qBAAsB,oBAAqB,qBAAsB,mBAAoB,qBAAsB,oBAAqB,oBAAqB,mBAAoB,kBAAmB,kBAAkB,EACpb,eAAgB,CAAC,mBAAoB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,mBAAoB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,mBAAoB,qBAAsB,qBAAsB,mBAAoB,kBAAmB,mBAAoB,qBAAsB,qBAAsB,kBAAmB,iBAAiB,EAC5a,gBAAiB,CAAC,qBAAsB,oBAAqB,qBAAsB,oBAAqB,oBAAqB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,oBAAqB,mBAAoB,oBAAqB,mBAAoB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,mBAAoB,qBAAsB,iBAAiB,EAClb,eAAgB,CAAC,qBAAsB,oBAAqB,qBAAsB,qBAAsB,mBAAoB,mBAAoB,mBAAoB,mBAAoB,qBAAsB,kBAAmB,qBAAsB,qBAAsB,mBAAoB,qBAAsB,qBAAsB,oBAAqB,oBAAqB,mBAAoB,qBAAsB,oBAAoB,EACrb,aAAc,CAAC,oBAAqB,oBAAqB,oBAAqB,qBAAsB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,qBAAsB,oBAAqB,mBAAoB,kBAAmB,kBAAmB,qBAAsB,oBAAqB,mBAAoB,kBAAmB,mBAAoB,mBAAoB,kBAAkB,EACza,cAAe,CAAC,qBAAsB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,oBAAqB,qBAAsB,oBAAqB,kBAAmB,mBAAoB,mBAAoB,oBAAqB,oBAAqB,mBAAoB,kBAAmB,kBAAmB,kBAAkB,EAC7a,cAAe,CAAC,oBAAqB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,mBAAoB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,oBAAqB,qBAAsB,qBAAsB,oBAAqB,oBAAqB,oBAAqB,qBAAsB,mBAAmB,EACpb,cAAe,CAAC,qBAAsB,oBAAqB,oBAAqB,oBAAqB,qBAAsB,oBAAqB,oBAAqB,qBAAsB,oBAAqB,kBAAmB,oBAAqB,mBAAoB,qBAAsB,qBAAsB,qBAAsB,mBAAoB,kBAAmB,oBAAqB,qBAAsB,mBAAmB,EACnb,eAAgB,CAAC,qBAAsB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,qBAAsB,oBAAqB,mBAAoB,oBAAqB,qBAAsB,qBAAsB,oBAAqB,qBAAsB,mBAAoB,mBAAoB,qBAAsB,oBAAqB,qBAAsB,iBAAiB,EAC1b,eAAgB,CAAC,mBAAoB,qBAAsB,qBAAsB,oBAAqB,oBAAqB,kBAAmB,mBAAoB,qBAAsB,oBAAqB,oBAAqB,mBAAoB,oBAAqB,qBAAsB,oBAAqB,qBAAsB,mBAAoB,mBAAoB,qBAAsB,oBAAqB,mBAAmB,EAClb,eAAgB,CAAC,oBAAqB,mBAAoB,oBAAqB,oBAAqB,oBAAqB,mBAAoB,mBAAoB,oBAAqB,mBAAoB,mBAAoB,oBAAqB,oBAAqB,mBAAoB,qBAAsB,kBAAmB,mBAAoB,oBAAqB,mBAAoB,qBAAsB,iBAAiB,EACza,eAAgB,CAAC,qBAAsB,qBAAsB,mBAAoB,oBAAqB,qBAAsB,qBAAsB,qBAAsB,mBAAoB,oBAAqB,mBAAoB,oBAAqB,qBAAsB,oBAAqB,oBAAqB,kBAAmB,oBAAqB,qBAAsB,oBAAqB,oBAAqB,iBAAiB,CACvb,EACMC,GAAgB,OAAO,KAAKD,EAAa,EAEzCE,GAAe,CAAC,EAYtB,SAAgB,iBAAiB,EAAa,EAAkD,CAC5F,GAAI,CAAC36B,EAAI,OAAO,gBAAgB,EAChC,IAAIgjB,EAAS2X,GAAa36B,GAK1B,OAJKgjB,IACD,EAAS,gBAAgBhjB,EAAIwG,CAAM,EACnC,GAAaxG,GAAMgjB,GAEhBA,CACX,CAEA,SAAS,gBAAgB,EAAK,EAAc,CACxC,GAAI,CAAChjB,EAAI,MAAO,CAAC,SAAS,CAAC,CAAC,OAAOs6B,GAAU,OAAOC,EAAa,CAAC,CAAC,OAAOC,EAAW,CAAC,CAAC,OAAOE,EAAa,CAAC,EAC5G,IAAIvH,EAAQ,KAEZ,GAAI3sB,EACA,EAAQnP,QAAe,CAAC,CAAC,MAAMmP,CAAM,MAClC,CACH,GAAI8zB,GAAU,QAAQt6B,CAAE,GAAK,EACzB,EAAQ3I,QAAe8iC,GAAUn6B,EAAG,OACjC,GAAI06B,GAAc,QAAQ16B,CAAE,GAAK,EACpC,EAAQ3I,QAAe,CAAC,CAAC,MAAMojC,GAAcz6B,EAAG,OAC7C,GAAIw6B,GAAY,QAAQx6B,CAAE,GAAK,EAAG,CACrC,IAAI46B,EAAY,CAAC,EACjB,OAAQ56B,EAAR,CACI,IAAK,SAED,EADkB,gBAAgB,SAAS,CAAC,CAAC,OACjC,CAAA,CAAU,OAAO,SAAU,EAAO,EAAK,CAI/C,MAHA,GAAI+jB,EAAM,EAId,CAAC,EACD,MACJ,IAAK,SACD,EAAY,gBAAgB,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,gBAAgB,QAAQ,CAAC,CAAC,OAAO,CAAC,CAEpG,CACA,EAAQ1sB,QAAe,CAAC,CAAC,MAAMujC,CAAS,CAC5C,MAAO,GAAIL,GAAc,QAAQv6B,CAAE,GAAK,EAAG,CACvC,IAAI66B,EAAiB,GACrB,KAAOA,EAAiB,GAAG,CACvB,GAAIT,EAAcp6B,EAAG,CAAC66B,GAAiB,CACnC,EAAQxjC,QAAe,CAAC,CAAC,MAAM+iC,EAAcp6B,EAAG,CAAC66B,EAAe,EAChE,KACJ,CACA,EAAEA,CACN,CACJ,CACA,AAEI1H,IAAQ97B,QAAe6iC,EAAkB,EAE7C,EAAS/G,EAAM,MAAM,CACzB,CACA,IAAM77B,EAAAA,OAAe,SAAU,EAAG,CAC9B,OAAO67B,EAAM5yB,CAAC,CAClB,EAAA,SAAA,EAgCA,MA/BA,GAAQ,KAAO,UAAY,CACvB,MAAO,SACX,EACA,EAAQ,GAAK,SAAU,EAAI,CAGvB,OAFK,UAAU,QACf,EAAKA,EACEjJ,GAFuB0I,CAGlC,EACA,EAAQ,OAAS,SAAU,EAAI,CAG3B,OAFK,UAAU,QACf,EAASO,EACFjJ,GAFuBkP,CAGlC,EACA,EAAQ,MAAQ,SAAU,EAAO,CAE7B,MADA,IAAau0B,GAAS,gBAAgBA,EAAO,KAAK,OAAO,CAAC,EACnDJ,GAAaI,EAExB,EACA,EAAQ,eAAiB,SAAU,EAAO,CAItC,OAHIJ,GAAaI,GACNJ,GAAaI,GAEjB,KAAK,MAAMA,CAAK,CAC3B,EACA,EAAQ,OAAS,SAAU,EAAM,EAAU,CAIvC,OAHI/6B,IAAOg7B,EACA,KAEJ,UAAU,OAAS,iBAAiBA,EAAKC,CAAO,EAAI,iBAAiB,CAChF,EAEO3jC,CACX,CAEA,IAAM4jC,GAAe,CAAC,EAOtB,SAAgB,iBAAiB,EAAa,EAAmB,EAA+C,CAC5G,GAAI,CAACl7B,EAAI,OAAO,gBAAgB,EAChC,IAAIgjB,EAASkY,GAAal7B,GAK1B,OAJKgjB,IACD,EAAS,gBAAgBhjB,EAAIwG,EAAQ20B,CAAK,EAC1C,GAAan7B,GAAMgjB,GAEhBA,CACX,CAEA,SAAS,gBAAgB,EAAK,EAAU,EAAS,CAC7C,GAAI,CAAC,UAAU,OAAQ,CACnB,IAAMA,EAAS,CAAC,SAAS,EACzB,IAAK,IAAMpmB,KAAOw9B,EACVG,GAAc,QAAQ39B,CAAG,IAAM,IAC/BomB,EAAO,KAAKpmB,CAAG,EAGvB,OAAOomB,CACX,CAEA,IAAImQ,EAAQ,KACR3sB,EAASy0B,EAEP,QAAU,SAAU,EAAQ,EAAQ,CACtC,IAAiB,GACjB,IAAMG,EAAiB,KAAK,KAAKD,GAAS30B,EAAO,OAAS,EAAE,EACtDa,EAAQ,CAAC,EACXg0B,EAAY,KAehB,OAdA70B,EAAO,QAAQ,SAAU,EAAO,CAC5B,GAAI60B,EAAW,CACX,IAAMlI,EAAQ57B,SAAc,CAAC,CACxB,OAAO,CAAC,EAAG6jC,CAAc,CAAC,CAAC,CAC3B,MAAM,CAACC,EAAWh1B,CAAK,CAAC,CAAC,CACzB,YAAY7O,GAAuB,EAExC,IAAK,IAAIqD,EAAI,EAAGA,EAAIugC,EAAgB,EAAEvgC,EAClCwM,EAAM,KAAK8rB,EAAMt4B,CAAC,CAAC,CAE3B,CACA,EAAYwL,CAChB,CAAC,EACD,EAAQ5O,SAAgB,CAAC,CAAC,OAAO,CAAC,EAAG,GAAG,CAAC,CAAC,CAAC,MAAM4P,CAAK,EAC/C8rB,CACX,EAEA,GAAI8H,EACA,EAAQ,QAAQA,EAASK,CAAM,MAC5B,CACH,GAAIlB,EAAcp6B,GAAK,CACnB,IAAI66B,EAAiB,GACrB,KAAOA,EAAiB,GAAG,CACvB,GAAIT,EAAcp6B,EAAG,CAAC66B,GAAiB,CACnC,EAAQ,QAAQT,EAAcp6B,EAAG,CAAC66B,EAAe,EACjD,KACJ,CACA,EAAEA,CACN,CACJ,CACIR,GAAKr6B,KACL,EAAQtI,WAAkB2iC,GAAKr6B,EAAG,CAAC,CAAC,OAAO,CAAC,EAAG,GAAG,CAAC,GAEvD,AACImzB,IAAQ,QAAQiH,EAAc,OAAO,GAAG,EAE5C,EAASjH,EAAM,MAAQA,EAAM,MAAM,EAAIA,CAE3C,CACA,IAAM,QAAe,SAAU,EAAG,EAAK,EAAM,CAIzC,OAHIoI,IAAQC,EACDrI,EAAM,OAAO,CAACoI,EAAM,EAAGC,EAAO,CAAC,CAAC,CAAC,CAAC5/B,CAAC,EAEvCu3B,EAAM,OAAO,CAACoI,EAAKC,CAAI,CAAC,CAAC,CAAC5/B,CAAC,CACtC,EA+BA,MA9BA,SAAQ,KAAO,UAAY,CACvB,MAAO,SACX,EACA,QAAQ,GAAK,SAAU,EAAI,CAGvB,OAFK,UAAU,QACf,EAAK2E,EACE,SAFuBP,CAGlC,EACA,QAAQ,OAAS,SAAU,EAAI,CAG3B,OAFK,UAAU,QACf,EAASO,EACF,SAFuBiG,CAGlC,EACA,QAAQ,MAAQ,SAAU,EAAO,CAE7B,MADA,IAAau0B,GAAS,gBAAgBA,EAAO,KAAK,OAAO,CAAC,EACnDG,GAAaH,EACxB,EACA,QAAQ,eAAiB,SAAU,EAAO,CAItC,OAHIG,GAAaH,GACNG,GAAaH,GAEjB,KAAK,MAAMA,CAAK,CAC3B,EACA,QAAQ,OAAS,SAAU,EAAM,EAAU,CAIvC,OAHI/6B,IAAOg7B,EACA,KAEJ,UAAU,OAAS,iBAAiBA,EAAKC,CAAO,EAAI,iBAAiB,CAChF,EAEO,OACX,CAEA,SAAgB,KAAK,EAAc,EAAa,EAAa,EAAW,EAAO,CAC3E,eAASQ,CAAY,CAAC,CACjB,UAAU,UAAU,CAAC,CACrB,KAAK,gBAAgB,EAAG,SAAU,EAAQ,CAAE,OAAOt1B,CAAG,CAAC,CAAC,CACxD,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtB,KAAK,QAAS,SAAS,CAAC,CACxB,KAAK,QAAS,SAAU,EAAQ,CAAE,OAAOA,CAAG,CAAC,CAAC,CAC9C,GAAG,QAAS,SAAU,EAAQ,EAAQ,CACnC,QAAQ,KAAK,OAAO,OAAOA,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,SAAgB,CAAC,CAAC,KAAK;CAAI,CAAC,CAC7E,CAAC,CAAC,CACD,UAAU,SAAS,CAAC,CAAC,KAAK,SAAU,EAAG,CAAE,OAAO,gBAAgBA,CAAC,CAAC,CAAC,OAAO,CAAG,CAAC,CAAC,CAC/E,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtB,KAAK,QAAS,QAAQ,CAAC,CACvB,MAAM,mBAAoB,SAAU,EAAQ,CAAE,OAAOA,CAAG,CAAC,EAE9D,eAASu1B,CAAW,CAAC,CAChB,UAAU,UAAU,CAAC,CACrB,KAAK,gBAAgB,EAAG,SAAU,EAAQ,CAAE,OAAOv1B,CAAG,CAAC,CAAC,CACxD,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtB,KAAK,QAAS,SAAS,CAAC,CACxB,KAAK,QAAS,SAAU,EAAQ,CAAE,OAAOA,CAAG,CAAC,CAAC,CAC9C,GAAG,QAAS,SAAU,EAAQ,EAAQ,CACnC,QAAQ,KAAK,OAAO,OAAOA,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,SAAgB,CAAC,CAAC,KAAK;CAAI,CAAC,CAC7E,CAAC,CAAC,CACD,UAAU,UAAU,CAAC,CAAC,KAAK,SAAU,EAAG,CAAE,OAAO,gBAAgBA,CAAC,CAAC,CAAC,OAAO,CAAG,CAAC,CAAC,CAChF,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtB,KAAK,QAAS,SAAS,CAAC,CACxB,MAAM,SAAW,KAAgB,CAAC,CAClC,MAAM,mBAAoB,SAAU,EAAQ,CAAE,OAAOA,CAAG,CAAC,EAE9D,IAAMw1B,EAAU,CAAE,GAAIC,EAAU,KAAK,GAAG,EAAIT,EAAO,MAAO,gBAAgB,SAAUS,EAAWT,CAAK,CAAE,EACtG,eAASU,CAAW,CAAC,CAChB,UAAU,UAAU,CAAC,CACrB,KAAK,CAACF,CAAO,EAAG,SAAU,EAAQ,CAAE,OAAOx1B,EAAE,EAAI,CAAC,CAAC,CACnD,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtB,KAAK,QAAS,SAAS,CAAC,CACxB,KAAK,QAAS,UAAY,CAAE,MAAO,KAAiC,CAAC,CAAC,CACtE,GAAG,QAAS,SAAU,EAAQ,EAAG,CAC9B,QAAQ,KAAK,OAAO,OAAOA,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,SAAgB,CAAC,CAAC,KAAK;CAAI,CAAC,CAC1E,CAAC,CAAC,CACD,UAAU,UAAU,CAAC,CAAC,KAAK,UAAY,CACpC,IAAM6c,EAAS,CAAC,EAChB,IAAK,IAAInoB,EAAI,EAAGA,GAAK,IAAK,EAAEA,EACxBmoB,EAAO,KAAK2Y,EAAQ,MAAM9gC,EAAG,EAAG,GAAG,CAAC,EAExC,OAAOmoB,CACX,CAAC,CAAC,CACD,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtB,KAAK,QAAS,SAAS,CAAC,CACxB,MAAM,mBAAoB,SAAU,EAAG,CAAE,OAAO7c,CAAG,CAAC,CAC7D,CAEA,EAAc21B,OAAY,CACtB,EAAG,CAAC,MAAO,QAAS,OAAO,CAC/B,EAEA,IAAaxkC,GAAU,iBACV2iC,GAAU,iBACvB,SAAgB,UAAU,EAAiC,CACvD,IAAItiC,EACJ,OAAQqkC,EAAR,CACI,IAAK,GACL,IAAK,cACD,EAAMpkC,IAAM,OAAO,EACnB,MACJ,QACI,EAAMA,IAAMokC,CAAe,CACnC,CACA,OAASrkC,EAAI,EAAI,KAAQA,EAAI,EAAI,KAAQA,EAAI,EAAI,KAAS,IAAO,QAAU,OAC/E,CCnVA,IAAa,MAAb,cAA2B,SAAU,CACjC,gBAEA,aAAc,CACV,MAAM,CACV,CAEA,SAAS,EAAO,CAKZ,OAJQ,KAAK,MAAM,IACV,SACM,KAAK,eAAe,KAAK,OAAO,EAAGwI,CAAK,EAEhD,UAAU,UAAU,aAAa,MAAM,KAAM,SAAS,CACjE,CAEA,aAAa,EAAQ,EAAQ,CAKzB,OAJQ,KAAK,MAAM,IACV,SACM,KAAK,gBAAgB,KAAK,OAAO,EAAG2wB,EAAQC,CAAM,EAE1D,UAAU,UAAU,aAAa,MAAM,KAAM,SAAS,CACjE,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAM5K,EAASxT,CAAO,EAC5B,OAAO,KAAK,SAChB,CAEA,UACA,OAAO,EAAU,EAAS,CACtB,IAAMspB,EAAQtpB,EAAQ,UAAU,0BAA0B,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,EAAG,SAAU,EAAG,CAAE,OAAOxM,CAAG,CAAC,EACrGmjB,EAAO,KAAK,QAAQ,EAC1B,GAAI,KAAK,YAAcA,EAAM,CACzB,KAAK,UAAYA,EAEjB,IAAM5rB,EAAU,KAChBu+B,EAAM,MAAM,CAAC,CAAC,OAAO,KAAK,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC,CACtD,KAAK,QAAS,cAAc,CAAC,CAC7B,KAAK,UAAY,CACd,IAAMC,EAAWrkC,eAAS,IAAI,EAC9B,EAAQ,gBAAkBqkC,EAAS,OAAO,OAAO,CACrD,CAAC,CAAC,CACD,GAAG,YAAe,CACf,KAAK,MAAM,CACf,CAAC,CAAC,CACD,GAAG,eAAkB,CAClB,KAAK,SAAS,CAClB,CAAC,CAAC,CACD,MAAMD,CAAK,CAAC,CACZ,MAAM,OAAQ,KAAK,UAAU,CAAC,CAAC,CAC/B,MAAM,SAAU,KAAK,YAAY,CAAC,CAAC,CACnC,KAAK,UAAY,CACd,IAAMC,EAAWrkC,eAAS,IAAI,EAE9B,OADA6F,EAAQ,gBAAgB,KAAKA,EAAQ,QAAQ,CAAC,EACtCA,EAAQ,MAAM,EAAtB,CACI,IAAK,SACD,IAAMwR,EAASxR,EAAQ,OAAO,EAC9Bw+B,EACK,KAAK,IAAKhtB,CAAM,EAErB,MACJ,IAAK,SACD,IAAML,EAAQ,KAAK,IAAInR,EAAQ,MAAM,EAAGA,EAAQ,OAAO,CAAC,EACxDw+B,EACK,KAAK,IAAK,CAACrtB,EAAQ,CAAC,CAAC,CACrB,KAAK,IAAK,CAACA,EAAQ,CAAC,CAAC,CACrB,KAAK,KAAMnR,EAAQ,aAAa,CAAC,CAAC,CAClC,KAAK,KAAMA,EAAQ,aAAa,CAAC,CAAC,CAClC,KAAK,QAASmR,CAAK,CAAC,CACpB,KAAK,SAAUA,CAAK,EAEzB,MACJ,IAAK,OACDqtB,EACK,KAAK,IAAK,CAACx+B,EAAQ,MAAM,EAAI,CAAC,CAAC,CAC/B,KAAK,IAAK,CAACA,EAAQ,OAAO,EAAI,CAAC,CAAC,CAChC,KAAK,KAAMA,EAAQ,aAAa,CAAC,CAAC,CAClC,KAAK,KAAMA,EAAQ,aAAa,CAAC,CAAC,CAClC,KAAK,QAASA,EAAQ,MAAM,CAAC,CAAC,CAC9B,KAAK,SAAUA,EAAQ,OAAO,CAAC,EAEpC,MACJ,IAAK,UACDw+B,EACK,KAAK,KAAMx+B,EAAQ,MAAM,EAAI,CAAC,CAAC,CAC/B,KAAK,KAAMA,EAAQ,OAAO,EAAI,CAAC,EAEpC,MACJ,IAAK,MACDw+B,EACK,KAAK,IAAKx+B,EAAQ,QAAQ,CAAC,CAGxC,CACJ,CAAC,EAELu+B,EAAM,KAAK,CAAC,CAAC,OAAO,CACxB,CACJ,CACA,mBAAmB,EAAQ,CACvB,OAAQE,EAAR,CACI,IAAK,SACD,MAAO,OACX,IAAK,MACD,MAAO,MACf,CACA,OAAOA,CACX,CACA,SAAU,CACN,IAAMjtB,EAAS,KAAK,aAAa,EAC3BktB,EAAU,KAAK,YAAY,EAC3BC,EAAU,KAAK,WAAW,EAC1BxtB,EAAQ,KAAK,MAAM,EACnBC,EAAS,KAAK,OAAO,EAAIstB,EACzBxgC,EAAI,EAAIiT,EAAQ,EAChB7J,EAAI,EAAI8J,EACRwtB,GAAWztB,EAAQK,EAAS,EAAImtB,GAAW,EACjD,MAAO,IAAMzgC,EAAI,IAAMoJ,EACnB,IAAM,CAACkK,EAAS,IAAM,CAACA,EAAS,UAAYA,EAAS,IAAM,CAACA,EAC5D,KAAOL,EAAQ,CAACK,EAAS,GACzB,IAAMA,EAAS,IAAMA,EAAS,UAAYA,EAAS,IAAMA,EACzD,KAAOJ,EAAS,CAACI,EAAS,GAC1B,IAAMA,EAAS,IAAMA,EAAS,UAAY,CAACA,EAAS,IAAMA,EAC1D,IAAM,CAACotB,EACP,IAAM,CAACD,EAAU,EAAI,IAAMD,EAC3B,IAAM,CAACC,EAAU,EAAI,IAAM,CAACD,EAC5B,IAAM,CAACE,EACP,IAAM,CAACptB,EAAS,IAAM,CAACA,EAAS,UAAY,CAACA,EAAS,IAAM,CAACA,EAC7D,GACR,CAEA,OAAQ,CACR,CAEA,UAAW,CACX,CAEJ,EACA,MAAM,UAAU,QAAU,gBAsB1B,MAAM,UAAU,QAAQ,QAAS,SAAU,MAAO,aAAc,CAAC,SAAU,SAAU,OAAQ,UAAW,KAAK,EAAG,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACrI,MAAM,UAAU,QAAQ,QAAS,GAAI,SAAU,QAAS,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACnF,MAAM,UAAU,QAAQ,SAAU,GAAI,SAAU,SAAU,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACrF,MAAM,UAAU,QAAQ,cAAe,KAAM,aAAc,eAAgB,KAAM,CAAE,SAAU,EAAK,CAAC,EACnG,MAAM,UAAU,QAAQ,YAAa,KAAM,aAAc,aAAc,KAAM,CAAE,SAAU,EAAK,CAAC,EAC/F,MAAM,UAAU,QAAQ,SAAU,KAAM,SAAU,SAAU,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACvF,MAAM,UAAU,QAAQ,eAAgB,EAAG,SAAU,cAAc,EACnE,MAAM,UAAU,QAAQ,cAAe,EAAG,SAAU,aAAa,EACjE,MAAM,UAAU,QAAQ,aAAc,GAAI,SAAU,YAAY,EAChE,MAAM,UAAU,QAAQ,UAAW,GAAI,SAAU,UAAW,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAEvF,IAAMqtB,GAAc,MAAM,UAAU,OACpC,MAAM,UAAU,OAAS,SAAU,EAAI,CACnC,IAAMvZ,EAASuZ,GAAY,MAAM,KAAM,SAAS,EAMhD,OALI,UAAU,QACV,KAAK,MAAMh8B,CAAC,EACZ,KAAK,OAAOA,CAAC,EACNyiB,GAEJ,KAAK,IAAI,KAAK,MAAM,EAAG,KAAK,OAAO,CAAC,EAAI,CACnD,EClLA,IAAa,KAAb,cAA0B,SAAU,CAEhC,aACA,QACA,MACA,MACA,gBAEA,aAAc,CACV,MAAM,EAEN,KAAK,aAAe,IAAI,MACxB,KAAK,QAAU,IAAI,MACvB,CAEA,QAAQ,EAAU,GAAO,EAAQ,GAAO,CACpC,IAAMwZ,EAAW,KAAK,SAAS,EAC/B,MAAO,CACH,EAAG,CAAEA,EAAW,EAChB,EAAG,CAAEA,EAAW,EAChB,MAAOA,EACP,OAAQA,CACZ,CACJ,CAEA,SAAS,EAAO,CACZ,OAAO,KAAK,aAAa,SAASr8B,CAAK,CAC3C,CAEA,aAAa,EAAQ,EAAQ,CACzB,OAAO,KAAK,aAAa,aAAa2wB,EAAQC,CAAM,CACxD,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAM5K,EAASxT,CAAO,EAC5B,OAAO,KAAK,UACZ,KAAK,MAAQA,EAAQ,OAAO,MAAM,EAClC,KAAK,MAAM,OAAO,UAAU,CAAC,CACxB,KAAK,KAAM,QAAU,KAAK,GAAG,EAAI,SAAS,CAAC,CAC3C,OAAO,QAAQ,CAAC,CAChB,KAAK,IAAK,CAAC,CAAC,CACZ,KAAK,IAAK,CAAC,EAEhB,KAAK,MAAM,OAAO,UAAU,CAAC,CACxB,KAAK,KAAM,QAAU,KAAK,GAAG,EAAI,SAAS,CAAC,CAC3C,OAAO,MAAM,EAElB,KAAK,MAAQA,EAAQ,OAAO,GAAG,EAC/B,KAAK,aACA,OAAO,KAAK,MAAM,KAAK,CAAC,EAE7B,KAAK,QACA,OAAOA,EAAQ,KAAK,CAAC,EAE1B,KAAK,gBAAkBA,EAAQ,OAAO,OAAO,EAC7C,IAAMjV,EAAU,KAChBiV,EACK,GAAG,QAAS,SAAU,EAAI,CACvBjV,EAAQ,MAAM++B,CAAE,CACpB,CAAC,CAAC,CACD,GAAG,WAAY,SAAU,EAAI,CAC1B/+B,EAAQ,SAAS++B,CAAE,CACvB,CAAC,CAET,CAEA,MAAM,EAAU,CAEhB,CAEA,SAAS,EAAU,CAEnB,CAEA,UACA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOtW,EAASxT,CAAO,EAC7B,IAAM2W,EAAO,KAAK,QAAQ,EAC1B,GAAI,KAAK,YAAcA,EAAM,CACzB,KAAK,UAAYA,EAEjB,IAAMkT,EAAW,KAAK,SAAS,EACzBttB,EAASstB,EAAW,EAC1B,KAAK,MAAM,OAAO,QAAQ,CAAC,CACtB,KAAK,IAAKttB,CAAM,EAErB,KAAK,MAAM,OAAO,MAAM,CAAC,CACpB,KAAK,IAAK,CAACA,CAAM,CAAC,CAClB,KAAK,IAAK,CAACA,CAAM,CAAC,CAClB,KAAK,QAASstB,CAAQ,CAAC,CACvB,KAAK,SAAUA,CAAQ,EAE5B,KAAK,QACA,SAASA,GAAY,IAAM,KAAK,eAAe,GAAK,GAAG,CAAC,CACxD,OAAO,EAEZ,KAAK,aACA,MAAM,KAAK,MAAM,CAAC,CAAC,CACnB,MAAMA,CAAQ,CAAC,CACf,OAAOA,CAAQ,CAAC,CAChB,OAAO,EAEZ,IAAM9J,EAAQ,KAAK,MAAM,UAAU,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,EAAI,CAAC,KAAK,SAAS,CAAC,EAAI,CAAC,EAAG,SAAU,EAAG,CAAE,OAAOvsB,CAAG,CAAC,EACrHusB,EAAM,MAAM,CAAC,CACR,OAAO,OAAO,CAAC,CACf,KAAK,aAAc,KAAK,SAAS,CAAC,CAAC,CACnC,MAAMA,CAAK,CAAC,CACZ,KAAK,YAAa,aAAe,KAAK,GAAG,EAAI,IAAM,KAAK,MAAM,EAAI,GAAG,CAAC,CACtE,KAAK,IAAK,CAACxjB,CAAM,CAAC,CAClB,KAAK,IAAK,CAACA,CAAM,CAAC,CAClB,KAAK,QAASstB,CAAQ,CAAC,CACvB,KAAK,SAAUA,CAAQ,EAExB,KAAK,uBAAuB,GAAK,CAAC,KAAK,uBAAuB,GAC9D,KAAK,gBAAgB,UAAU,KAAK,gBAAgB,CAAC,CAAC,EAE1D9J,EAAM,KAAK,CAAC,CACP,OAAO,EAEZ,KAAK,gBAAgB,KAAK,KAAK,QAAQ,CAAC,CAC5C,CACJ,CAEA,KAAK,EAAS,EAAS,CACnB,MAAM,KAAKvM,EAASxT,CAAO,EAC3B,KAAK,aACA,OAAO,IAAI,EAEhB,KAAK,QACA,OAAO,IAAI,CAEpB,CAEJ,EACA,KAAK,UAAU,QAAU,eAyBzB,KAAK,UAAU,QAAQ,QAAS,SAAU,MAAO,aAAc,CAAC,SAAU,QAAQ,EAAG,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAC1G,KAAK,UAAU,aAAa,SAAU,UAAW,MAAM,EACvD,KAAK,UAAU,aAAa,aAAc,UAAW,iBAAiB,EACtE,KAAK,UAAU,QAAQ,WAAY,KAAM,SAAU,YAAa,KAAM,CAAE,SAAU,EAAK,CAAC,EACxF,KAAK,UAAU,aAAa,kBAAmB,UAAW,gBAAgB,EAC1E,KAAK,UAAU,QAAQ,UAAW,GAAI,SAAU,UAAW,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACtF,KAAK,UAAU,QAAQ,WAAY,GAAI,SAAU,WAAY,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACxF,KAAK,UAAU,QAAQ,iBAAkB,GAAI,SAAU,kBAAmB,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACrG,KAAK,UAAU,aAAa,kBAAmB,eAAgB,WAAW,EAC1E,KAAK,UAAU,aAAa,oBAAqB,eAAgB,aAAa,EC/J9E,IAAa,OAAb,cAA4B,SAAU,CAClC,aACA,mBACA,cACA,aACA,oBACA,cACA,oBACA,cACA,cACA,eAEA,iBAA2B7a,MAAc,EAEzC,aAAc,CACV,MAAM,EAEN,KAAK,mBAAqB,IAAI,MAC9B,KAAK,aAAe,IAAI,KACxB,KAAK,cAAgB,IAAI,KACzB,KAAK,aAAe,IAAI,KACxB,KAAK,oBAAsB,CAAC,CAChC,CACA,oBAA2B,CACvB,IAAIkrB,EACJ,IAAK,IAAMpmB,KAAO,KAAK,oBAAqB,CACxC,IAAMgzB,EAAO,KAAK,oBAAoBhzB,EAAI,CAAC,KACtComB,GAGD,EAAO,EAAI,KAAK,IAAIA,EAAO,EAAG4M,EAAK,CAAC,EACpC,EAAO,EAAI,KAAK,IAAI5M,EAAO,EAAG4M,EAAK,CAAC,EACpC,EAAO,MAAQ,KAAK,IAAI5M,EAAO,MAAO4M,EAAK,KAAK,EAChD,EAAO,OAAS,KAAK,IAAI5M,EAAO,OAAQ4M,EAAK,MAAM,GALnD,EAASA,CAOjB,CACA,OAAO5M,GAAU,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAE,CACvD,CACA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMmD,EAASxT,CAAO,EAC5BA,EACK,GAAG,gBAAmB,CACnBA,EAAQ,QAAQ,WAAY,EAAI,EAChC,KAAK,OAAO,CAChB,CAAC,CAAC,CACD,GAAG,eAAkB,CAClBA,EAAQ,QAAQ,WAAY,EAAK,EACjC,KAAK,OAAO,CAChB,CAAC,EAGL,KAAK,oBAAsBA,EAAQ,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,cAAc,EAC3E,KAAK,cAAgBA,EAAQ,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,aAAa,EACpE,KAAK,eAAiBA,EAAQ,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,cAAc,EACtE,KAAK,cAAgBA,EAAQ,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,aAAa,EACpE,KAAK,cAAgBA,EAAQ,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,aAAa,EAEpE,KAAK,mBACA,OAAO,KAAK,oBAAoB,KAAK,CAAC,EAC3C,KAAK,aACA,gBAAgB,MAAM,CAAC,CACvB,kBAAkB,MAAM,CAAC,CACzB,OAAO,KAAK,cAAc,KAAK,CAAC,EACrC,KAAK,cACA,OAAO,KAAK,eAAe,KAAK,CAAC,EACtC,KAAK,aACA,OAAO,KAAK,cAAc,KAAK,CAAC,CACzC,CACA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOwT,EAASxT,CAAO,EAC7B,KAAK,aACA,SAAS,KAAK,oBAAoB,CAAC,EACxC,IAAMjV,EAAU,KAChB,KAAK,oBAAsB,CAAC,EAC5B,IAAIg/B,EAAW,EACTC,EAAc,KAAK,cAAc,UAAU,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAC1GA,EAAY,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAC1B,KAAK,QAAS,YAAY,CAAC,CAC3B,KAAK,SAA6B,EAAG,EAAK,CACvC,IAAMC,EAAO,IAAI,KAAK,CAAC,CAClB,SAASl/B,EAAQ,mBAAmB,CAAC,CAAC,CACtC,eAAeA,EAAQ,yBAAyB,CAAC,CAAC,CAClD,OAAO,IAAI,CAAC,CACZ,MAAM,QAAQ,EAEnBA,EAAQ,iBAAiB,IAAI,KAAMk/B,CAAI,CAC3C,CAAC,CAAC,CACD,MAAMD,CAAW,CAAC,CAClB,KAAK,SAA6B,EAAG,EAAK,CACvC,IAAMC,EAAOl/B,EAAQ,iBAAiB,IAAI,IAAI,EACnCyI,EAAE,SAAW,QAAay2B,EAAK,OAAOz2B,EAAE,MAAM,EAC9CA,EAAE,QAAU,QAAay2B,EAAK,MAAMz2B,EAAE,KAAK,EAC3CA,EAAE,kBAAoB,QAAay2B,EAAK,gBAAgBz2B,EAAE,eAAe,EACzEA,EAAE,kBAAoB,QAAay2B,EAAK,gBAAgBz2B,EAAE,eAAe,EACzEA,EAAE,oBAAsB,QAAay2B,EAAK,kBAAkBz2B,EAAE,iBAAiB,EAC1F,IAAM02B,EAAWD,EAAK,SAAS,EAC/BA,EACK,EAAEF,EAAWG,CAAQ,CAAC,CACtB,EAAEA,EAAW,CAAC,CAAC,CACf,OAAO,EAEZ,GAAYA,EAAWn/B,EAAQ,kBAAkB,EACjD,EAAQ,oBAAoBqmB,GAAO,CAC/B,OAAQ6Y,EACR,KAAMA,EAAK,QAAQ,EAAI,CAC3B,CACJ,CAAC,EACLD,EAAY,KAAK,CAAC,CACb,KAAK,SAA6B,EAAG,EAAK,CAEvCj/B,EADqB,iBAAiB,IAAI,IAC1C,CAAA,CAAK,OAAO,IAAI,CACpB,CAAC,CAAC,CACD,OAAO,CAChB,CACA,KAAK,EAAS,EAAS,CACnB,KAAK,aAAa,OAAO,IAAI,EAC7B,KAAK,cAAc,OAAO,IAAI,EAC9B,KAAK,aAAa,OAAO,IAAI,EAC7B,KAAK,mBAAmB,OAAO,IAAI,EACnC,MAAM,KAAKyoB,EAASxT,CAAO,CAC/B,CACA,gBAAgB,EAAkB,EAAkB,CAChD,KAAK,cAAc,KAAK,YAAa,aAAamqB,EAAS,IAAIC,EAAS,EAAE,CAC9E,CACA,OAAO,EAAgC,CACnC,OAAO,MAAM,OAAO,GAAK,CACrB,KAAK,mBAAmB,OAAO,EAC/B,KAAK,aAAa,OAAO,EACzB,KAAK,cAAc,OAAO,EAC1B,KAAK,aAAa,OAAO,EACrBv+B,GACAA,EAASyQ,CAAC,CAElB,CAAC,CACL,CACJ,EACA,OAAO,UAAU,QAAU,iBAsD3B,OAAO,UAAU,QAAQ,UAAW,EAAG,SAAU,SAAS,EAE1D,OAAO,UAAU,QAAQ,2BAA4B,GAAI,SAAU,0BAA0B,EAC7F,OAAO,UAAU,QAAQ,qBAAsB,GAAI,SAAU,qBAAqB,EAClF,OAAO,UAAU,QAAQ,kBAAmB,CAAC,EAAG,QAAS,iBAAiB,EAC1E,OAAO,UAAU,QAAQ,oBAAqB,EAAG,SAAU,mBAAmB,EAE9E,OAAO,UAAU,aAAa,OAAQ,eAAgB,QAAQ,EAC9D,OAAO,UAAU,aAAa,YAAa,eAAgB,iBAAiB,EAC5E,OAAO,UAAU,aAAa,eAAgB,eAAgB,UAAU,EACxE,OAAO,UAAU,aAAa,qBAAsB,eAAgB,gBAAgB,EAEpF,OAAO,UAAU,aAAa,QAAS,gBAAiB,MAAM,EAC9D,OAAO,UAAU,aAAa,aAAc,gBAAiB,WAAW,EACxE,OAAO,UAAU,aAAa,kBAAmB,gBAAiB,YAAY,EAC9E,OAAO,UAAU,aAAa,gBAAiB,gBAAiB,UAAU,EAE1E,OAAO,UAAU,aAAa,cAAe,eAAgB,MAAM,EACnE,OAAO,UAAU,aAAa,mBAAoB,eAAgB,WAAW,EAC7E,OAAO,UAAU,aAAa,wBAAyB,eAAgB,YAAY,EACnF,OAAO,UAAU,aAAa,sBAAuB,eAAgB,UAAU,EAE/E,OAAO,UAAU,aAAa,kBAAmB,qBAAsB,OAAO,EAC9E,OAAO,UAAU,aAAa,sBAAuB,qBAAsB,WAAW,EACtF,OAAO,UAAU,aAAa,wBAAyB,qBAAsB,aAAa,EAE1F,OAAO,UAAU,aAAa,eAAgB,oBAAoB,EAClE,OAAO,UAAU,aAAa,cAAe,oBAAoB,EACjE,OAAO,UAAU,aAAa,aAAc,oBAAoB,ECxOhE,IAAa,WAAb,cAAgC,MAAO,CACnC,iBACA,aAAc,CACV,MAAM,CACV,CACA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMkX,EAASxT,CAAO,CAChC,CACA,QAAS,CACL,MAAM,OAAO,MAAM,KAAM,SAAS,EAElC,KAAK,aAAa,OAAO,EACzB,KAAK,cAAc,OAAO,EAC1B,KAAK,aAAa,OAAO,EACzB,IAAMqqB,EAAY,KAAK,aAAa,QAAQ,EAAI,EAC1CC,EAAa,KAAK,cAAc,QAAQ,EAAI,EAC5CC,EAAY,KAAK,aAAa,QAAQ,EAAI,EAE5CC,EAAS,EACTC,EAAS,EACPC,EAAW,KAAK,kBAAkB,EACxC,IAAK,IAAMxiC,KAAK,OAAO,KAAK,KAAK,mBAAmB,EAChD,GAAU,KAAK,oBAAoBA,EAAE,CAAC,KAAK,MAAQwiC,EACnD,EAASD,EAAS,KAAK,oBAAoBviC,EAAE,CAAC,KAAK,OAASuiC,EAAS,KAAK,oBAAoBviC,EAAE,CAAC,KAAK,OAG1G,IAAMyiC,EAAgB,KAAK,YAAY,IAAM,KAA4B,KAAK,IAC1EL,EAAW,OAASC,EAAU,OAAU,KAAK,QAAQ,EAAI,EACzDE,EAASJ,EAAU,OAAU,KAAK,QAAQ,EAAI,CAClD,EAHoD,KAAK,YAAY,EAI/DO,EAAgB,KAAK,WAAW,IAAM,KAA2B,KAAK,IACxEN,EAAW,MAAQD,EAAU,MAAS,KAAK,QAAQ,EAAI,EACvDG,EAASD,EAAU,MAAS,KAAK,QAAQ,EAAI,CACjD,EAHmD,KAAK,WAAW,EAInE,KAAK,mBACA,OAAOI,CAAa,CAAC,CACrB,MAAMC,CAAa,EAExB,KAAK,cAAc,KAAK,CACpB,EAAG,EAAEA,EAAgB,GAAMN,EAAW,MAAQ,EAAK,KAAK,QAAQ,EAChE,EAAG,EAAEK,EAAgB,GAAML,EAAW,OAAS,EAAK,KAAK,QAAQ,CACrE,CAAC,EACD,KAAK,aAAa,KAAK,CACnB,EAAIM,EAAgB,EAAMP,EAAU,MAAQ,EAAK,KAAK,QAAQ,EAC9D,EAAG,EAAEM,EAAgB,GAAMN,EAAU,OAAS,EAAK,KAAK,QAAQ,CACpE,CAAC,EACD,KAAK,aAAa,KAAK,CACnB,EAAG,EAAEO,EAAgB,GAAML,EAAU,MAAQ,EAAK,KAAK,QAAQ,EAC/D,EAAII,EAAgB,EAAMJ,EAAU,OAAS,EAAK,KAAK,QAAQ,CACnE,CAAC,EACD,KAAK,gBAAiBK,EAAgB,EAAKD,EAAgB,EAAKF,EAAS,KAAK,QAAQ,CAAC,CAC3F,CACJ,EACA,WAAW,UAAU,QAAU,qBAS/B,WAAW,UAAU,QAAQ,aAAc,KAAM,SAAU,YAAY,EACvE,WAAW,UAAU,QAAQ,cAAe,KAAM,SAAU,aAAa,EC/DzE,IAAa,UAAb,cAA+B,MAAO,CAClC,iBACA,aAAc,CACV,MAAM,CACV,CACA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMjX,EAASxT,CAAO,CAChC,CACA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAO,MAAM,KAAM,SAAS,EAElC,IAAM6qB,EAAc7qB,EAAQ,QAAQ,UAAU,EAE9C,KAAK,aAAa,OAAO,EACzB,KAAK,aAAa,OAAO,EACzB,KAAK,cAAc,OAAO,EAC1B,IAAMsqB,EAAa,CAAC,KAAK,qBAAqB,GAAKO,EAAc,KAAK,cAAc,QAAQ,EAAI,EAAI,CAAE,OAAQ,EAAG,MAAO,CAAE,EACpHR,EAAY,CAAC,KAAK,oBAAoB,GAAKQ,EAAc,KAAK,aAAa,QAAQ,EAAI,EAAI,CAAE,OAAQ,EAAG,MAAO,CAAE,EACjHN,EAAY,CAAC,KAAK,2BAA2B,GAAKM,EAAc,KAAK,aAAa,QAAQ,EAAI,EAAI,CAAE,OAAQ,EAAG,MAAO,CAAE,EACxHC,GAAU,CAAC,KAAK,0BAA0B,GAAKD,IAAc,KAAK,gBAAgB,CAAC,CAAC,OAAS,EAAI,KAAK,mBAAmB,EAAI,KAAK,QAAQ,EAAQ,EAClJE,EAAkB,KAAK,mBAAmBF,EAAaP,EAAYD,EAAWE,EAAWO,CAAO,EAEtG,KAAK,cAAc,QAAQ,CAAC,KAAK,qBAAqB,GAAKD,CAAW,EACtE,KAAK,aAAa,QAAQ,CAAC,KAAK,oBAAoB,GAAKA,CAAW,EACpE,KAAK,aAAa,QAAQ,CAAC,KAAK,2BAA2B,GAAKA,CAAW,EAE3E,KAAK,mBACA,OAAOE,EAAgB,MAAM,CAAC,CAC9B,MAAMA,EAAgB,KAAK,EAChC,IAAMC,EAAS,CAACD,EAAgB,OAASV,EAAU,OAAU,KAAK,QAAQ,EAAI,EACxEY,EAAUD,EAAUX,EAAU,OAAS,EAAMC,EAAW,OAAS,EAAK,KAAK,QAAQ,EACnFY,EAASD,EAAWX,EAAW,OAAS,EAAMC,EAAU,OAAS,EAAK,KAAK,QAAQ,EACnFY,EAASD,EAAUX,EAAU,OAAS,EAAK,KAAK,QAAQ,EAC9D,KAAK,cAAc,KAAK,CACpB,EAAG,EACH,EAAGU,CACP,CAAC,EACD,KAAK,aAAa,KAAK,CACnB,EAAG,EACH,EAAGC,CACP,CAAC,EACD,KAAK,aAAa,KAAK,CACnB,EAAG,EACH,EAAGF,CACP,CAAC,EACD,KAAK,gBAAgBD,EAAgB,MAAQ,EAAGI,CAAM,CAE1D,CACA,YAAa,CAET,KAAK,aAAa,OAAO,EACzB,KAAK,aAAa,OAAO,EACzB,KAAK,cAAc,OAAO,EAC1B,IAAMb,GAAc,KAAK,qBAAqB,EAAmB,KAAK,cAAc,QAAQ,EAAI,GAC1FD,GAAa,KAAK,oBAAoB,EAAmB,KAAK,aAAa,QAAQ,EAAI,GACvFE,GAAa,KAAK,2BAA2B,EAAmB,KAAK,aAAa,QAAQ,EAAI,GAC9FO,GAAW,KAAK,0BAA0B,EAAmB,KAAK,gBAAgB,CAAC,CAAC,OAAS,EAAI,KAAK,mBAAmB,EAAI,KAAK,QAAQ,EAAI,GAGpJ,OAFwB,KAAK,mBAAmB,GAAaR,EAAYD,EAAWE,EAAWO,CAExF,CAAA,CAAgB,MAC3B,CACA,mBAAmB,EAAa,EAAY,EAAW,EAAW,EAAS,CAEvE,IAAMC,EAAkB,CACpB,MAFkB,KAAK,IAAIT,EAAW,MAAOD,EAAU,MAAOE,EAAU,KAEjE,EAAiB,KAAK,QAAQ,EAAI,EACzC,OAAQF,EAAU,OAASC,EAAW,OAASQ,EAAU,KAAK,YAAY,EAAIP,EAAU,OAAU,KAAK,QAAQ,EAAI,CACvH,EACIa,EAAiB,EAcrB,OAbI,KAAK,qBAAqB,GAAK,CAACP,IAChC,GAAkB,KAAK,QAAQ,GAE/B,KAAK,oBAAoB,GAAK,CAACA,IAC/B,GAAkB,KAAK,QAAQ,GAE/B,KAAK,2BAA2B,GAAK,CAACA,IACtC,GAAkB,KAAK,QAAQ,IAE/B,KAAK,gBAAgB,CAAC,CAAC,SAAW,GAAK,KAAK,0BAA0B,GAAK,CAACA,KAC5E,GAAkB,KAAK,QAAQ,GAEnC,EAAgB,QAAUO,EACnBL,CACX,CACJ,EACA,UAAU,UAAU,QAAU,oBAa9B,UAAU,UAAU,QAAQ,uBAAwB,GAAO,UAAW,sBAAsB,EAC5F,UAAU,UAAU,QAAQ,sBAAuB,GAAO,UAAW,qBAAqB,EAC1F,UAAU,UAAU,QAAQ,6BAA8B,GAAO,UAAW,4BAA4B,EACxG,UAAU,UAAU,QAAQ,4BAA6B,GAAO,UAAW,2BAA2B,EC9FtG,IAAa,WAAb,cAAgC,MAAO,CACnC,iBACA,aAAc,CACV,MAAM,CACV,CACA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMvX,EAASxT,CAAO,CAChC,CACA,OAAO,EAAS,EAAS,CACrB,KAAK,aAAa,KAAK,EAAE,EACzB,MAAM,OAAOwT,EAASxT,CAAO,CACjC,CACA,OAAO,EAAoC,CACvC,OAAO,MAAM,OAAQ,GAAkB,CACnC,IAAMqqB,EAAY/tB,EAAE,KAAK,IAAM,GAAK,CAAE,MAAO,EAAG,OAAQ,CAAE,EAAI,KAAK,aAAa,QAAQ,EAAI,EACtFguB,EAAa,KAAK,cAAc,QAAQ,EAAI,EAC5Ce,EAAmB,KAAK,mBAAmB,EAE7CnvB,EAAQ,KAAK,WAAW,EAC5B,AACIA,IAAQmuB,EAAU,MAAQC,EAAW,MAAQe,EAAiB,MAAQ,KAAK,QAAQ,EAAI,EAG3F,IAAIlvB,EAAS,KAAK,YAAY,EAC9B,AACIA,IAAS,KAAK,IAAIkuB,EAAU,OAAQC,EAAW,OAAQe,EAAiB,MAAM,EAAI,KAAK,QAAQ,EAAI,EAGvG,KAAK,mBACA,MAAMnvB,CAAK,CAAC,CACZ,OAAOC,CAAM,CAAC,CACd,OAAO,EAGZ,KAAK,aAAa,KAAK,CACnB,EAAG,EAAED,EAAQ,GAAMmuB,EAAU,MAC7B,EAAG,CACP,CAAC,EAED,KAAK,gBAAgBnuB,EAAQ,EAAG,CAACmvB,EAAiB,OAAS,CAAC,EAC5D,IAAMC,EAAYjB,EAAU,MAAQ,EAAIA,EAAU,MAAQ,KAAK,QAAQ,EAAI,EACrEkB,EAAS,EAAErvB,EAAQ,GAAKovB,EAAY,KAAK,QAAQ,EACjDE,EAAY,KAAK,QAAQ,EAAI,EAAIH,EAAiB,MAAQ,KAAK,QAAQ,EACvEI,EAASvvB,EAAQovB,EAAYE,EAEnC,KAAK,cACA,KAAK,CACF,EAAGD,EACH,EAAG,CACP,CAAC,CAAC,CACD,OAAO,OAAO,CAAC,CACf,MAAME,CAAM,CAAC,CACb,OAAO,EAGR5/B,GACAA,EAASyQ,CAAC,CAElB,CAAC,CACL,CACJ,EACA,WAAW,UAAU,QAAU,qBAS/B,WAAW,UAAU,QAAQ,aAAc,KAAM,SAAU,YAAY,EACvE,WAAW,UAAU,QAAQ,cAAe,KAAM,SAAU,aAAa,EAEzE,IAAa,eAAb,cAAoC,UAAW,CAC3C,OAAO,SAAyB,CAAC,CAC7B,GAAI,cACJ,KAAM,QACV,EAAG,CACC,GAAI,OACJ,KAAM,QACV,EAAG,CACC,GAAI,YACJ,KAAM,QACV,EAAG,CACC,GAAI,QACJ,KAAM,QACV,CAAC,EAED,gBAA0BlX,MAAoB,EAE9C,aAAc,CACV,MAAM,EACN,qBAA6B,KAAK,KAAM,EAAI,CAChD,CAEA,gBAAiB,CACb,IAAM6c,EAAU,KAAK,QAAQ,EACvBypB,EAAa,CACf,kBACA,cACA,OACA,YACA,QACA,aACA,cACA,kBACJ,EACMC,EAAOD,EAAW,IAAI,GAAazpB,EAAQ,QAAQ,KAAK,GAAG2pB,EAAU,QAAQ,CAAC,CAAC,CAAC,EACtF,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,GAAO,CAC1B,IAAMvb,EAAS,CACX,QAASpP,CACb,EACA,IAAK,IAAI/Y,EAAI,EAAGA,EAAIwjC,EAAW,OAAQ,EAAExjC,EACrC,EAAOwjC,EAAWxjC,IAAMyjC,EAAKzjC,IAAM,EAAI+Y,EAAI0qB,EAAKzjC,IAAM,OAAO,KAAK,GAAGwjC,EAAWxjC,OAAU,WAAa,KAAK,GAAGwjC,EAAWxjC,KAAK,CAAC,EAAI,GAExI,OAAOmoB,CACX,EAAG,IAAI,CACX,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMmD,EAASxT,CAAO,EAC5B,eAASwT,EAAQ,UAAU,CAAC,CACvB,MAAM,aAAc,QAAQ,CAAC,CAC7B,MAAM,aAAc,QAAQ,EAEjC,KAAK,WAAW,cAAcxT,CAAO,CACzC,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOwT,EAASxT,CAAO,EAC7B,IAAMjV,EAAU,KAEV8gC,EAAS,CAAE,KAAM,EAAG,IAAK,EAAG,MAAO,EAAG,OAAQ,CAAE,EAChD3vB,EAAQ,KAAK,MAAM,EAAI2vB,EAAO,KAAOA,EAAO,MAAQ,GACpD1vB,EAAS,KAAK,YAAY,EAAI0vB,EAAO,IAAMA,EAAO,OAElDt+B,EAAMyS,EAAQ,UAAU,KAAK,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,EAC/DzS,EAAI,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CACpB,KAAK,QAAS,gBAAgB,CAAC,CAC/B,KAAK,KAAK,WAAW,MAAM,KAAK,KAAK,UAAU,CAAC,CAAC,CACjD,GAAG,QAAS,SAAU,EAAG,CACtBxC,EAAQ,MAAMA,EAAQ,SAASyI,EAAE,OAAO,EAAGzI,EAAQ,YAAY,EAAGA,EAAQ,WAAW,SAAS,IAAI,CAAC,CACvG,CAAC,CAAC,CACD,GAAG,WAAY,SAAU,EAAG,CACzBA,EAAQ,SAASA,EAAQ,SAASyI,EAAE,OAAO,EAAGzI,EAAQ,YAAY,EAAGA,EAAQ,WAAW,SAAS,IAAI,CAAC,CAC1G,CAAC,CAAC,CACD,KAAK,UAAY,CACd,IAAM+gC,EAAa,IAAI,WAAW,CAAC,CAC9B,OAAO,IAAI,EAEhB/gC,EAAQ,gBAAgB,IAAI,KAAM+gC,CAAU,CAChD,CAAC,CAAC,CACD,MAAMv+B,CAAG,CAAC,CACV,MAAM,eAAgB,GAAKiG,EAAE,WAAW,CAAC,CACzC,KAAK,SAAU,EAAG,CACfzI,EAAQ,gBAAgB,IAAI,IAAI,CAAC,CAC5B,IAAI,CAAE,EAAGmR,EAAQ,EAAG,EAAGC,EAAS,CAAE,CAAC,CAAC,CACpC,OAAO,CAAE,QAAO,QAAO,CAAC,CAAC,CACzB,WAAWD,CAAK,CAAC,CACjB,YAAYC,CAAM,CAAC,CACnB,gBAAgB,MAAM,CAAC,CACvB,oBAAoB3I,EAAE,eAAe,CAAC,CACtC,sBAAsB,MAAM,CAAC,CAC7B,KAAKA,EAAE,IAAI,CAAC,CACZ,UAAUA,EAAE,SAAS,CAAC,CACtB,aAAa2I,EAAS,MAAM,CAAC,CAC7B,mBAAmB,CAAC,CAAC,CACrB,MAAM3I,EAAE,KAAK,CAAC,CACd,cAAc2I,EAAS,MAAM,CAAC,CAC9B,WAAW3I,EAAE,UAAU,CAAC,CACxB,YAAYA,EAAE,WAAW,CAAC,CAC1B,iBAAiBA,EAAE,gBAAgB,CAAC,CACpC,OAAO,CAEhB,CAAC,EAELjG,EAAI,KAAK,CAAC,CAAC,OAAO,CACtB,CAEA,KAAK,EAAS,EAAS,CACnB,MAAM,KAAKimB,EAASxT,CAAO,CAC/B,CAGA,MAAM,EAAK,EAAQ,EAAU,CAE7B,CAEA,SAAS,EAAK,EAAQ,EAAU,CAEhC,CAGA,UACJ,EACA,eAAe,UAAU,QAAU,yBAmCnC,eAAe,UAAU,QAAQ,cAAe,GAAI,SAAU,aAAa,EAC3E,eAAe,UAAU,QAAQ,kBAAmB,UAAW,SAAU,2BAA4B,KAAM,CAAE,UAAW,YAAa,CAAC,EACtI,eAAe,UAAU,QAAQ,wBAAyB,KAAM,MAAO,0BAA2B,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EAC5J,eAAe,UAAU,QAAQ,cAAe,QAAS,SAAU,uBAAwB,KAAM,CAAE,UAAW,YAAa,CAAC,EAC5H,eAAe,UAAU,QAAQ,oBAAqB,KAAM,MAAO,sBAAuB,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EACpJ,eAAe,UAAU,QAAQ,OAAQ,IAAK,SAAU,MAAM,EAC9D,eAAe,UAAU,QAAQ,aAAc,KAAM,MAAO,cAAe,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EACrI,eAAe,UAAU,QAAQ,YAAa,MAAO,SAAU,qBAAsB,KAAM,CAAE,UAAW,YAAa,CAAC,EACtH,eAAe,UAAU,QAAQ,kBAAmB,KAAM,MAAO,qBAAsB,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EACjJ,eAAe,UAAU,QAAQ,cAAe,KAAM,MAAO,eAAgB,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EACvI,eAAe,UAAU,QAAQ,aAAc,QAAS,SAAU,sBAAuB,KAAM,CAAE,UAAW,YAAa,CAAC,EAC1H,eAAe,UAAU,QAAQ,mBAAoB,KAAM,MAAO,sBAAuB,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EACnJ,eAAe,UAAU,QAAQ,oBAAqB,KAAM,MAAO,qBAAsB,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,EACnJ,eAAe,UAAU,QAAQ,mBAAoB,QAAS,SAAU,4BAA6B,KAAM,CAAE,UAAW,YAAa,CAAC,EACtI,eAAe,UAAU,QAAQ,yBAA0B,KAAM,MAAO,4BAA6B,UAAY,CAAE,OAAO,KAAK,QAAQ,CAAG,EAAG,CAAE,SAAU,EAAK,CAAC,ECpP/J,IAAa,QAAb,cAA6B,SAAU,CAEnC,OACA,MAEA,aAAc,CACV,MAAM,EAEN,KAAK,OAAS,IAAI,MAAM,CAAC,CACpB,MAAM,MAAM,CAAC,CACb,GAAG,YAAe,CACf,KAAK,MAAM,CACf,CAAC,CAAC,CACD,GAAG,eAAkB,CAClB,KAAK,SAAS,CAClB,CAAC,EAEL,KAAK,MAAQ,IAAI,KAAK,CAAC,CAClB,GAAG,YAAe,CACf,KAAK,MAAM,CACf,CAAC,CAAC,CACD,GAAG,eAAkB,CAClB,KAAK,SAAS,CAClB,CAAC,CAET,CAEA,QAAQ,EAAG,CAKP,OAJA,KAAK,YAAYpS,CAAC,EAClB,KAAK,aAAaA,CAAC,EACnB,KAAK,WAAWA,CAAC,EACjB,KAAK,cAAcA,CAAC,EACb,IACX,CAEA,SAAS,EAAO,CACZ,OAAQ,KAAK,OAAO,EAApB,CACI,IAAK,QACD,MAAO,CAACsO,EAAQ,EACpB,IAAK,MACD,OAAOA,EAAQ,CACvB,CACA,MAAO,EACX,CAEA,QAAQ,EAAU,GAAO,EAAQ,GAAO,CACpC,IAAM6vB,EAAW,KAAK,MAAM,QAAQ,EAAI,EAClC7vB,EAAQ,KAAK,UAAU,EAAI,KAAK,UAAU,CAAC,CAAC,MAAQ6vB,EAAS,MAAQ,KAAK,YAAY,EAAI,KAAK,aAAa,EAC5G5vB,EAAS,KAAK,UAAU,EAAI,KAAK,UAAU,CAAC,CAAC,OAAS4vB,EAAS,OAAS,KAAK,WAAW,EAAI,KAAK,cAAc,EACrH,MAAO,CACH,EAAG,CAAC7vB,EAAQ,EACZ,EAAG,CAACC,EAAS,EACb,QACA,QACJ,CACJ,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMqX,EAASxT,CAAO,EAC5B,OAAO,KAAK,UACZ,KAAK,OACA,OAAOwT,CAAO,CAAC,CACf,QAAQ,KAAK,QAAQ,CAAC,EAE3B,KAAK,MACA,OAAOA,CAAO,CAEvB,CAEA,UACA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOA,EAASxT,CAAO,EAC7B,IAAM2W,EAAO,KAAK,QAAQ,EAC1B,GAAI,KAAK,YAAcA,EAAM,CACzB,KAAK,UAAYA,EAEjB,IAAMoV,EAAW,KAAK,MAAM,QAAQ,EAAI,EAClCjgC,EAAO,CACT,MAAO,KAAK,UAAU,EAAI,KAAK,UAAU,CAAC,CAAC,MAAQigC,EAAS,MAAQ,KAAK,YAAY,EAAI,KAAK,aAAa,EAC3G,OAAQ,KAAK,UAAU,EAAI,KAAK,UAAU,CAAC,CAAC,OAASA,EAAS,OAAS,KAAK,WAAW,EAAI,KAAK,cAAc,CAClH,EAcA,GAZA,KAAK,OACA,MAAMjgC,EAAK,KAAK,CAAC,CACjB,OAAOA,EAAK,MAAM,CAAC,CACnB,OAAO,EAGZ,KAAK,MACA,EAAE,KAAK,SAASigC,EAAS,KAAK,CAAC,CAAC,CAChC,kBAAkB,KAAK,OAAO,iBAAiB,EAAI,UAAU,KAAK,OAAO,UAAU,CAAC,EAAI,IAAA,EAAS,CAAC,CAClG,OAAO,EAGR,KAAK,UAAU,EACf,OAAQ,KAAK,OAAO,EAApB,CACI,IAAK,QACD,KAAK,MACA,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,MAAQ,EAAIA,EAAS,MAAQ,GAAK,KAAK,YAAY,EAAI,KAAK,aAAa,GAAK,CAAC,CAAC,CACpG,OAAO,EAEZ,MACJ,IAAK,MACD,KAAK,MACA,EAAE,KAAK,UAAU,CAAC,CAAC,MAAQ,EAAIA,EAAS,MAAQ,GAAK,KAAK,YAAY,EAAI,KAAK,aAAa,GAAK,CAAC,CAAC,CACnG,OAAO,CAGpB,CAEJ,KAAK,MAAM,QAAQA,EAAS,OAASjgC,EAAK,OAASigC,EAAS,QAAUjgC,EAAK,MAAM,CACrF,CACJ,CAEA,KAAK,EAAS,EAAS,CACnB,KAAK,OACA,OAAO,IAAI,EAEhB,KAAK,MACA,OAAO,IAAI,EAEhB,MAAM,KAAK0nB,EAASxT,CAAO,CAC/B,CAEA,OAAQ,CACR,CAEA,UAAW,CACX,CACJ,EACA,QAAQ,UAAU,QAAU,kBA+B5B,QAAQ,UAAU,aAAa,OAAQ,OAAO,EAC9C,QAAQ,UAAU,aAAa,WAAY,QAAS,UAAU,EAC9D,QAAQ,UAAU,aAAa,oBAAqB,SAAU,aAAa,EAC3E,QAAQ,UAAU,aAAa,kBAAmB,SAAU,WAAW,EACvE,QAAQ,UAAU,aAAa,iBAAkB,QAAS,WAAW,EACrE,QAAQ,UAAU,aAAa,kBAAmB,QAAS,YAAY,EACvE,QAAQ,UAAU,QAAQ,cAAe,EAAG,SAAU,2BAA4B,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAC7G,QAAQ,UAAU,QAAQ,eAAgB,EAAG,SAAU,4BAA6B,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAC/G,QAAQ,UAAU,QAAQ,aAAc,EAAG,SAAU,0BAA2B,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAC3G,QAAQ,UAAU,QAAQ,gBAAiB,EAAG,SAAU,6BAA8B,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EACjH,QAAQ,UAAU,aAAa,SAAU,OAAO,EAChD,QAAQ,UAAU,QAAQ,YAAa,IAAI,EAE3C,QAAQ,UAAU,QAAQ,UAAW,GAAI,SAAU,UAAW,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,ECnLzF,IAAa,aAAb,cAAkC,MAAO,CACrC,gBACA,iBACA,aAAc,CACV,MAAM,EACN,KAAK,gBAAkB,IAAI,OAC/B,CACA,MAAM,EAAS,EAAS,CACpB,KAAK,iBAAmBA,EAAQ,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,gBAAgB,EAC1E,MAAM,MAAMwT,EAASxT,CAAO,EAC5B,KAAK,gBAAgB,OAAO,KAAK,iBAAiB,KAAK,CAAC,CAC5D,CACA,QAAS,CACL,MAAM,OAAO,MAAM,KAAM,SAAS,EAClC,KAAK,gBACA,KAAK,KAAK,cAAc,KAAK,CAAC,EACnC,KAAK,aACA,gBAAgB,KAAK,cAAc,CAAC,CAAC,CACrC,kBAAkB,KAAK,gBAAgB,CAAC,EAC7C,KAAK,mBACA,UAAU,MAAM,CAAC,CACjB,YAAY,MAAM,EAEvB,KAAK,aAAa,OAAO,EACzB,KAAK,gBAAgB,OAAO,EAC5B,IAAMqqB,EAAY,KAAK,aAAa,QAAQ,EAAI,EAC1C2B,EAAY,KAAK,gBAAgB,QAAQ,EAAI,EAC/CC,EAAU,EACVC,EAAU,EAAEF,EAAU,OAAS,GAAM3B,EAAU,OAAS,EAC5D,OAAQ,KAAK,WAAW,EAAxB,CACI,IAAK,QACD,EAAU,EAAE2B,EAAU,MAAQ,GAAM3B,EAAU,MAAQ,EACtD,MACJ,IAAK,MACD,EAAW2B,EAAU,MAAQ,EAAM3B,EAAU,MAAQ,EACrD,MACJ,IAAK,OACD,EAAU,EAAE2B,EAAU,MAAQ,GAAM3B,EAAU,MAAQ,EACtD,EAAU,CAElB,CACA,KAAK,aAAa,KAAK,CACnB,EAAG4B,EACH,EAAGC,CACP,CAAC,EACD,KAAK,gBAAgBF,EAAU,MAAQ,EAAGA,EAAU,OAAS,CAAC,CAClE,CACA,KAAK,EAAS,EAAS,CACnB,KAAK,gBAAgB,OAAO,IAAI,EAChC,MAAM,KAAKxY,EAASxT,CAAO,CAC/B,CACJ,EACA,aAAa,UAAU,QAAU,uBAwBjC,aAAa,UAAU,QAAQ,aAAc,QAAS,MAAO,qCAAsC,CAAC,GAAI,QAAS,SAAU,MAAO,MAAM,CAAC,EACzI,aAAa,UAAU,QAAQ,gBAAiB,KAAM,aAAc,eAAe,EACnF,aAAa,UAAU,QAAQ,kBAAmB,KAAM,aAAc,iBAAiB,EAEvF,aAAa,UAAU,aAAa,qBAAsB,kBAAmB,mBAAmB,EAChG,aAAa,UAAU,aAAa,mBAAoB,kBAAmB,iBAAiB,EAC5F,aAAa,UAAU,aAAa,mBAAoB,kBAAmB,gBAAgB,EClF3F,IAAa3a,QAAb,cAA2B,UAAW,C,4BAClC,YAEA,aAAc,CACV,MAAM,CACV,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMmuB,EAASxT,CAAO,CAChC,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOwT,EAASxT,CAAO,EAC7B,IAAMjV,EAAU,KACVohC,EAAMnsB,EAAQ,UAAU,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,EAAI,CAAC,KAAK,OAAO,CAAC,EAAI,CAAC,EAAG,SAAU,EAAG,CAAE,OAAOxM,CAAG,CAAC,EAC1G24B,EAAI,MAAM,CAAC,CACN,OAAO,KAAK,CAAC,CACb,KAAK,MAAO,KAAK,OAAO,CAAC,CAAC,CAC1B,MAAM,UAAW,CAAC,CAAC,CACnB,GAAG,OAAQ,UAAY,CACpB,EAAQ,YAAc7mC,eAAS,IAAI,EACnCyF,EAAQ,kBAAkB,EAC1BA,EAAQ,YAAY,MAAM,UAAW,CAAC,CAC1C,CAAC,EAEL,KAAK,kBAAkB,EACvBohC,EAAI,KAAK,CAAC,CACL,OAAO,CAEhB,CAEA,mBAAoB,CAChB,GAAK,KAAK,YACV,QAAQ,KAAK,OAAO,EAApB,CACI,IAAK,SACD,KAAK,YAAY,MAAM,QAAS,MAAM,EACtC,KAAK,YAAY,MAAM,SAAU,MAAM,EACvC,MACJ,IAAK,MACD,GAAI,KAAK,gBAAgB,EAAG,CACxB,KAAK,YAAY,MAAM,QAAS,MAAM,EACtC,KAAK,YAAY,MAAM,SAAU,MAAM,EACvC,IAAMlP,EAAO,KAAK,YAAY,KAAK,CAAC,CAAC,sBAAsB,EACrDZ,EAASY,EAAK,MAAQ,KAAK,MAAM,EACjCX,EAASW,EAAK,OAAS,KAAK,OAAO,EACrCZ,EAASC,GACT,KAAK,YAAY,MAAM,QAAS,KAAK,MAAM,EAAI,IAAI,EACnD,KAAK,YAAY,MAAM,SAAWW,EAAK,OAASZ,EAAU,IAAI,IAE9D,KAAK,YAAY,MAAM,QAAUY,EAAK,MAAQX,EAAU,IAAI,EAC5D,KAAK,YAAY,MAAM,SAAU,KAAK,OAAO,EAAI,IAAI,EAE7D,MACI,KAAK,YAAY,MAAM,QAAS,KAAK,MAAM,EAAI,IAAI,EACnD,KAAK,YAAY,MAAM,SAAU,KAAK,OAAO,EAAI,IAAI,EAEzD,MACJ,IAAK,SACD,KAAK,YAAY,MAAM,QAAS,KAAK,YAAY,CAAC,EAClD,KAAK,YAAY,MAAM,SAAU,KAAK,aAAa,CAAC,CAE5D,CACA,OAAQ,KAAK,UAAU,EAAvB,CACI,IAAK,SACD,MACJ,IAAK,SACD,IAAMW,EAAO,KAAK,YAAY,KAAK,CAAC,CAAC,sBAAsB,EAC3D,KAAK,YAAY,MAAM,cAAe,IAAI,KAAK,MAAM,EAAIA,EAAK,OAAS,EAAE,GAAG,EAC5E,KAAK,YAAY,MAAM,aAAc,IAAI,KAAK,OAAO,EAAIA,EAAK,QAAU,EAAE,GAAG,CAErF,CATA,CAUJ,CAEA,KAAK,EAAS,EAAS,CACnB,MAAM,KAAKzJ,EAASxT,CAAO,CAC/B,CAEJ,EACA,QAAM,UAAU,QAAU,gBAiB1B,QAAM,UAAU,QAAQ,SAAU,KAAM,SAAU,eAAgB,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EAC3F,QAAM,UAAU,QAAQ,SAAU,SAAU,MAAO,uBAAwB,CAAC,SAAU,MAAO,QAAQ,EAAG,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EAC3H,QAAM,UAAU,QAAQ,cAAe,MAAO,SAAU,uGAAwG,KAAM,CAAE,KAAM,CAAC,OAAO,EAAG,QAAU,GAAM1D,EAAE,OAAO,IAAM,QAAS,CAAC,EAClO,QAAM,UAAU,QAAQ,eAAgB,MAAO,SAAU,wGAAyG,KAAM,CAAE,KAAM,CAAC,OAAO,EAAG,QAAU,GAAMA,EAAE,OAAO,IAAM,QAAS,CAAC,EACpO,QAAM,UAAU,QAAQ,kBAAmB,GAAM,UAAW,iDAAkD,KAAM,CAAE,KAAM,CAAC,OAAO,EAAG,QAAU,GAAMA,EAAE,OAAO,IAAM,KAAM,CAAC,EAC7K,QAAM,UAAU,QAAQ,YAAa,SAAU,MAAO,kBAAmB,CAAC,SAAU,QAAQ,EAAG,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,ECjGlH,IAAa,KAAb,cAA0B,SAA2B,CAEjD,aAEA,aAAc,CACV,MAAM,EAEN,KAAK,aAAe,CAAC,CACzB,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOkX,EAASxT,CAAO,EAC7B,IAAMjV,EAAU,KAEVisB,EAAOhX,EAAQ,UAAU,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,EAAG,SAAU,EAAG,CAAE,OAAOxM,CAAG,CAAC,EAC9E44B,EAAYpV,EAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CACrC,KAAK,QAAS,MAAM,CAAC,CACrB,KAAK,SAAU,EAAG,CACf,IAAMqV,EAAa,IAAI,QAAQ,CAAC,CAC3B,OAAO,IAAI,CAAC,CACZ,WAAW,CAAC,CAAC,CACb,cAAc,CAAC,CAAC,CAChB,YAAY,CAAC,CAAC,CACd,aAAa,CAAC,CAAC,CACf,KAAK74B,CAAC,CAAC,CACP,OAAO,EAEZ64B,EAAW,QAAQ,CAAC,CACf,GAAG,QAAS,SAAU,EAAO,EAAI,CAC9BthC,EAAQ,MAAMwL,EAAG,KAAK,EAAG9J,CAAK,CAClC,CAAC,CAAC,CACD,GAAG,WAAY,SAAU,EAAO,EAAI,CACjC1B,EAAQ,SAASwL,EAAG,KAAK,EAAG9J,CAAK,CACrC,CAAC,EAEL,EAAQ,aAAa+G,GAAK64B,CAC9B,CAAC,EAGDC,EAAa,EACbC,EAAY,EAChB,IAAK,IAAMtiC,KAAO,KAAK,aAAc,CACjC,GAAI,CAAC,KAAK,aAAa,eAAeA,CAAG,EAAG,SAC5C,IAAMgzB,EAAO,KAAK,aAAahzB,EAAI,CAAC,QAAQ,EAC5C,GAAcgzB,EAAK,OACfsP,EAAYtP,EAAK,QACjB,EAAYA,EAAK,MACzB,CAEA,IAAIuP,EAAO,CAACF,EAAa,EACzBF,EAAU,MAAMpV,CAAI,CAAC,CAAC,KAAK,SAAU,EAAG,CACpC,IAAM9G,EAASnlB,EAAQ,aAAayI,GAC9BypB,EAAO/M,EAAO,QAAQ,EAC5BA,EACK,IAAI,CAAE,EAAG,EAAG,EAAGsc,EAAOvP,EAAK,OAAS,CAAE,CAAC,CAAC,CACxC,OAAOlyB,EAAQ,OAAO,CAAC,CAAC,CACxB,UAAU,CAAE,MAAOwhC,EAAW,OAAQtP,EAAK,MAAO,CAAC,CAAC,CACpD,OAAO,EAEZ,GAAQA,EAAK,MACjB,CAAC,EACDjG,EAAK,KAAK,CAAC,CACN,OAAO,CAAC,CACR,KAAK,SAAU,EAAG,CACfjsB,EAAQ,aAAayI,EAAE,CAAC,OAAO,IAAI,EACnC,OAAOzI,EAAQ,aAAayI,EAChC,CAAC,CAET,CAEA,KAAK,EAAS,EAAS,CACnB,IAAK,IAAMvJ,KAAO,KAAK,aACf,KAAK,aAAa,eAAeA,CAAG,GACpC,KAAK,aAAaA,EAAI,CAAC,OAAO,IAAI,EAG1C,MAAM,KAAKupB,EAASxT,CAAO,CAC/B,CAGA,MAAM,EAAG,EAAQ,CAEjB,CAEA,SAAS,EAAG,EAAQ,CAEpB,CACJ,EACA,KAAK,UAAU,QAAU,eAOzB,KAAK,UAAU,QAAQ,SAAU,QAAS,MAAO,kBAAmB,CAAC,GAAI,QAAS,SAAU,KAAK,EAAG,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EC7FzH,IAAa,KAAb,cAA0B,SAA2B,CACjD,MAAkB,IAAI,KAAK,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,EAC1E,MAAkB,IAAI,KACtB,MAEA,aAAc,CACV,MAAM,EAEN,IAAMjV,EAAU,KAChB,KAAK,MAAM,MAAQ,SAAU,EAAG,EAAO,CACnC0B,EAAM,gBAAgB,EACtB1B,EAAQ,SAAS,EACjBA,EAAQ,MAAMyI,CAAC,CACnB,EACA,KAAK,MAAQ,EACjB,CAEA,YAAa,CACJ,KAAK,MAGN,KAAK,SAAS,EAFd,KAAK,SAAS,CAItB,CAEA,UAAW,CACP,KAAK,YAAY,EACjB,KAAK,MAAQ,GACb,KAAK,MACA,KAAK,KAAK,KAAK,CAAC,CAAC,CACjB,OAAO,EAGZ,IAAMypB,EAAO,KAAK,MAAM,QAAQ,EAAI,EAC9BwP,EAAW,KAAK,MAAM,QAAQ,EAAI,EAClC1X,EAAM,CACR,EAAGkI,EAAK,MAAQ,EAAIwP,EAAS,MAAQ,EACrC,EAAGxP,EAAK,OAAS,EAAIwP,EAAS,OAAS,CAC3C,EACA,KAAK,MACA,KAAK1X,CAAG,EAEb,IAAMhqB,EAAU,KAChB,eAAS,MAAM,CAAC,CACX,GAAG,SAAW,KAAK,IAAK,UAAY,CAC7BA,EAAQ,OACRA,EAAQ,SAAS,CAEzB,CAAC,CAET,CAEA,UAAW,CACP,eAAS,MAAM,CAAC,CACX,GAAG,SAAW,KAAK,IAAK,IAAI,EAEjC,KAAK,MAAQ,GACb,KAAK,MACA,KAAK,CAAC,CAAC,CAAC,CACR,OAAO,EAEZ,KAAK,aAAa,CACtB,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMyoB,EAASxT,CAAO,EAE5B,KAAK,MACA,OAAOwT,CAAO,CAAC,CACf,OAAO,EAGZ,KAAK,MACA,OAAOA,CAAO,CAAC,CACf,OAAO,EAGZ,IAAMzoB,EAAU,KAChB,KAAK,MAAM,QAAQ,CAAC,CACf,GAAG,QAAS,SAAU,EAAO,CAC1B0B,EAAM,gBAAgB,EACtB1B,EAAQ,WAAW,CACvB,CAAC,CAET,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOyoB,EAASxT,CAAO,EAC7BA,EACK,QAAQ,WAAY,KAAK,KAAK,CAAC,CAAC,SAAW,CAAC,EAGjD,KAAK,MACA,OAAO,KAAK,OAAO,CAAC,CAAC,CACrB,eAAe,KAAK,eAAe,CAAC,CAAC,CACrC,OAAO,CAEhB,CAEA,KAAK,EAAS,EAAS,CACnB,KAAK,MACA,OAAO,IAAI,EAGhB,KAAK,MACA,OAAO,IAAI,EAGhB,MAAM,KAAKwT,EAASxT,CAAO,CAC/B,CAGA,MAAM,EAAG,CACT,CACA,aAAc,CACd,CACA,cAAe,CACf,CAEJ,EACA,KAAK,UAAU,QAAU,eASzB,KAAK,UAAU,aAAa,SAAU,QAAS,KAAM,GAAQ,EAC7D,KAAK,UAAU,aAAa,iBAAkB,QAAS,KAAM,EAAE,ECxI/D,IAAa,YAAb,cAAiCyP,EAAY,CAEzC,WACA,SAA8B,GAC9B,OAEA,aAAc,CACV,MAAM,CACV,CAEA,QAAQ,EAAkB,EAAc,CACpC,IAAMid,EAAW,KAAK,KAAK,EACrBC,EAAY,KAAK,MAAM,EACvBC,EAAe,KAAK,YAAY,EAChCC,EAAmBD,EAAe,KAAO,GAAK,KAAK,MAAMA,EAAe,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAI,KACtGE,EAAa,KAAK,UAAU,GAAKH,EACjCI,EAAY,KAAK,SAAS,EAC1BC,EAAU,KAAK,QAAQ,EAAI,mDAAmDF,IAAaD,EAAiB,IAAIC,EAAW,gBAAgBC,EAAU,MAAQ,GACnK,MAAO;eACA,KAAK,WAAW;;yBAENL,EAAS,WAAWO,EAAK;;oCAEdN,EAAU;oCACTO,EAAW,IAAM;;eAEvC,KAAK,WAAW;;yBAENH,EAAU,WAAWA,EAAY,EAAE;4BAChCE,EAAK,MAAMF,EAAU;sBAC3B,EAAGA,EAAY,EAAML,EAAW,GAAI;oCACtBC,EAAU;mCACVO,EAAW,IAAM;qDACAH,EAAY,IAAI;kBACnDC,EAAQ;;SAGtB,CAEA,OAAQ,CACJ,KAAK,SAAW,GAChB,KAAK,eAAe,KAAK,SAAS,EAAG,EAAE,CAC3C,CAEA,QAAS,CACL,KAAK,eAAe,IAAK,GAAG,CAChC,CAEA,MAAM,EAAS,EAAS,CAEpB,GADA,KAAK,WAAahtB,EAAQ,KAAK,IAAI,EAC/B,CAAC,KAAK,WAAY,MAAU,MAAM,0CAA0C,EAChF,KAAK,OAASA,EAAQ,OAAO,OAAO,CACxC,CAEA,KAAK,EAAU,EAAU,CACrB,KAAK,SAAW,GACZ,KAAK,QACL,KAAK,OAAO,OAAO,EACvB,OAAO,KAAK,MAChB,CAEA,eAAyB,EAAkB,EAAc,CAChD,KAAK,WACN,KAAK,QACL,KAAK,OAAO,KAAK,KAAK,QAAQktB,EAAUD,CAAI,CAAC,EAIjD,GAAY,KAAK,MAAM,EACvB,IAAqB,GACjBA,EAAO,GACP,eAAiB,CACb,IAAME,EAAa,IAAMF,EACzB,KAAK,eAAeC,EAAUD,EAAQE,EAAa,CAAE,CACzD,EAAGF,IAAS,GAAK,IAAMC,CAAQ,EACxBD,IAAS,KAChB,eAAiB,CACb,KAAK,SAAW,GACZ,KAAK,QACL,KAAK,OAAO,KAAK,EAAE,CAE3B,EAAGC,CAAQ,EAEnB,CACJ,EACA,YAAY,UAAU,QAAU,sBAoBhC,YAAY,UAAU,QAAQ,WAAY,IAAM,SAAU,WAAW,EACrE,YAAY,UAAU,QAAQ,QAAS,IAAK,SAAU,OAAO,EAC7D,YAAY,UAAU,QAAQ,OAAQ,EAAG,SAAU,MAAM,EACzD,YAAY,UAAU,QAAQ,QAAS,UAAW,SAAU,OAAO,EACnE,YAAY,UAAU,QAAQ,UAAW,GAAM,UAAW,UAAU,EACpE,YAAY,UAAU,QAAQ,WAAY,GAAI,SAAU,WAAW,EACnE,YAAY,UAAU,QAAQ,YAAa,UAAW,SAAU,mBAAoB,KAAM,CAAE,SAAU,EAAK,CAAC,EAC5G,YAAY,UAAU,QAAQ,cAAe,IAAM,SAAU,cAAc,EChH3E,IAAaE,GAAa,CAAC,QAAS,EAAK,EAC5BC,GAAoB,CAAC,QAAS,GAAM,QAAS,EAAK,EAE/D,SAAgB9nC,gBAAc,EAAO,CACnCkH,EAAM,yBAAyB,CACjC,C,4EAEA,SAAA,kBAAwB,EAAO,CAC7BA,EAAM,eAAe,EACrBA,EAAM,yBAAyB,CACjC,CCTA,SAAA,eAAwB,EAAM,CAC5B,IAAIuO,EAAOsyB,EAAK,SAAS,gBACrBxiC,EAAYtF,eAAO8nC,CAAI,CAAC,CAAC,GAAG,iBAAkB7nC,kBAAS4nC,EAAiB,EACxE,kBAAmBryB,EACrBlQ,EAAU,GAAG,mBAAoBrF,kBAAS4nC,EAAiB,GAE3D,EAAK,WAAaryB,EAAK,MAAM,cAC7B,EAAK,MAAM,cAAgB,OAE/B,C,iCAEA,SAAgB,QAAQ,EAAM,EAAS,CACrC,IAAIA,EAAOsyB,EAAK,SAAS,gBACrBxiC,EAAYtF,eAAO8nC,CAAI,CAAC,CAAC,GAAG,iBAAkB,IAAI,EAClDC,IACFziC,EAAU,GAAG,aAAcrF,kBAAS4nC,EAAiB,EACrD,WAAW,UAAW,CAAEviC,EAAU,GAAG,aAAc,IAAI,CAAG,EAAG,CAAC,GAE5D,kBAAmBkQ,EACrBlQ,EAAU,GAAG,mBAAoB,IAAI,GAErC,EAAK,MAAM,cAAgBkQ,EAAK,WAChC,OAAOA,EAAK,WAEhB,CC3BA,IAAAwyB,GAAA,OAAe,OAAWvkC,EAAA,SAAA,ECA1B,SAAwB,UAAU,EAAM,CACtC,cACA,UACA,SACA,aACA,SACA,IAAG,IAAG,KAAI,KACV,YACC,CACD,OAAO,iBAAiB,KAAM,CAC5B,KAAM,CAAC,MAAOgE,EAAM,WAAY,GAAM,aAAc,EAAI,EACxD,YAAa,CAAC,MAAOK,EAAa,WAAY,GAAM,aAAc,EAAI,EACtE,QAAS,CAAC,MAAOmgC,EAAS,WAAY,GAAM,aAAc,EAAI,EAC9D,OAAQ,CAAC,MAAOhmC,EAAQ,WAAY,GAAM,aAAc,EAAI,EAC5D,WAAY,CAAC,MAAOimC,EAAY,WAAY,GAAM,aAAc,EAAI,EACpE,OAAQ,CAAC,MAAO59B,EAAQ,WAAY,GAAM,aAAc,EAAI,EAC5D,EAAG,CAAC,MAAO7G,EAAG,WAAY,GAAM,aAAc,EAAI,EAClD,EAAG,CAAC,MAAOoJ,EAAG,WAAY,GAAM,aAAc,EAAI,EAClD,GAAI,CAAC,MAAOgE,EAAI,WAAY,GAAM,aAAc,EAAI,EACpD,GAAI,CAAC,MAAOC,EAAI,WAAY,GAAM,aAAc,EAAI,EACpD,EAAG,CAAC,MAAOq3B,CAAQ,CACrB,CAAC,CACH,CAEA,UAAU,UAAU,GAAK,UAAW,CAClC,IAAIxjC,EAAQ,KAAK,EAAE,GAAG,MAAM,KAAK,EAAG,SAAS,EAC7C,OAAOA,IAAU,KAAK,EAAI,KAAOA,CACnC,ECnBA,SAASzE,gBAAc,EAAO,CAC5B,MAAO,CAAC+G,EAAM,SAAW,CAACA,EAAM,MAClC,C,wCAEA,SAAS,kBAAmB,CAC1B,OAAO,KAAK,UACd,CAEA,SAAS,eAAe,EAAO,EAAG,CAChC,OAAO+G,GAAY,CAAC,EAAG/G,EAAM,EAAG,EAAGA,EAAM,CAAC,CAC5C,CAEA,SAAS9G,oBAAmB,CAC1B,OAAO,UAAU,gBAAmB,iBAAkB,IACxD,C,6EAEA,SAAA,cAA0B,CACxB,IAAIyqB,EAAS1qB,gBACTkoC,EAAY,iBACZH,EAAU,eACVI,EAAYloC,mBACZmoC,EAAW,CAAC,EACZC,EAAY,SAAS,QAAS,OAAQ,KAAK,EAC3Cj+B,EAAS,EACTk+B,EACAC,EACAC,EACAC,EACAC,EAAiB,EAErB,SAAS,KAAK,EAAW,CACvBtjC,EACK,GAAG,iBAAkB,WAAW,CAAC,CACnC,OAAO+iC,CAAS,CAAC,CACf,GAAG,kBAAmB,YAAY,CAAC,CACnC,GAAG,iBAAkB,WAAYT,EAAU,CAAC,CAC5C,GAAG,iCAAkC,UAAU,CAAC,CAChD,MAAM,eAAgB,MAAM,CAAC,CAC7B,MAAM,8BAA+B,eAAe,CAC3D,CAEA,SAAS,YAAY,EAAO,EAAG,CAC7B,GAAI,IAAgBhd,EAAO,KAAK,KAAM3jB,EAAO+G,CAAC,EAC9C,KAAI66B,EAAU,YAAY,KAAMT,EAAU,KAAK,KAAMnhC,EAAO+G,CAAC,EAAG/G,EAAO+G,EAAG,OAAO,EAC5E66B,IACL,eAAO5hC,EAAM,IAAI,CAAC,CACf,GAAG,iBAAkB,WAAY4gC,EAAiB,CAAC,CACnD,GAAG,eAAgB,WAAYA,EAAiB,EACnD,eAAO5gC,EAAM,IAAI,EACjB,gBAAcA,CAAK,EACnB,EAAc,GACd,EAAaA,EAAM,QACnB,EAAaA,EAAM,QACnB4hC,EAAQ,QAAS5hC,CAAK,EAV2D,CAWnF,CAEA,SAAS,WAAW,EAAO,CAEzB,GADA,kBAAQA,CAAK,EACT,CAACyhC,EAAa,CAChB,IAAI73B,EAAK5J,EAAM,QAAUuhC,EAAY13B,EAAK7J,EAAM,QAAUwhC,EAC1D,EAAc53B,EAAKA,EAAKC,EAAKA,EAAK83B,CACpC,CACAN,EAAS,MAAM,OAAQrhC,CAAK,CAC9B,CAEA,SAAS,WAAW,EAAO,CACzB,eAAOA,EAAM,IAAI,CAAC,CAAC,GAAG,8BAA+B,IAAI,EACzD,QAAQA,EAAM,KAAMyhC,CAAW,EAC/B,kBAAQzhC,CAAK,EACbqhC,EAAS,MAAM,MAAOrhC,CAAK,CAC7B,CAEA,SAAS,aAAa,EAAO,EAAG,CAC9B,GAAK2jB,EAAO,KAAK,KAAM3jB,EAAO+G,CAAC,EAK/B,IAJA,IAAI86B,EAAU7hC,EAAM,eAChByB,EAAI0/B,EAAU,KAAK,KAAMnhC,EAAO+G,CAAC,EACjC3K,EAAIylC,EAAQ,OAAQpmC,EAEf,EAFkBmmC,EAEfnmC,EAAIW,EAAG,EAAEX,GACf,EAAU,YAAY,KAAMgG,EAAGzB,EAAO+G,EAAG86B,EAAQpmC,EAAE,CAAC,WAAYomC,EAAQpmC,EAAE,KAC5E,gBAAcuE,CAAK,EACnB4hC,EAAQ,QAAS5hC,EAAO6hC,EAAQpmC,EAAE,EAGxC,CAEA,SAAS,WAAW,EAAO,CAIzB,IAHA,IAAIomC,EAAU7hC,EAAM,eAChB,EAAI6hC,EAAQ,OAAQpmC,EAEf,EAFkBmmC,EAEfnmC,EAAI,EAAG,EAAEA,GACf,EAAU4lC,EAASQ,EAAQpmC,EAAE,CAAC,eAChC,kBAAQuE,CAAK,EACb4hC,EAAQ,OAAQ5hC,EAAO6hC,EAAQpmC,EAAE,EAGvC,CAEA,SAAS,WAAW,EAAO,CACzB,IAAIomC,EAAU7hC,EAAM,eAChB,EAAI6hC,EAAQ,OAAQpmC,EAAGmmC,EAI3B,IAFIF,GAAa,aAAaA,CAAW,EACzC,EAAc,WAAW,UAAW,CAAE,EAAc,IAAM,EAAG,GAAG,EAC3D,EAAI,EAAGjmC,EAAI,EAAG,EAAEA,GACf,EAAU4lC,EAASQ,EAAQpmC,EAAE,CAAC,eAChC,gBAAcuE,CAAK,EACnB4hC,EAAQ,MAAO5hC,EAAO6hC,EAAQpmC,EAAE,EAGtC,CAEA,SAAS,YAAY,EAAM,EAAW,EAAO,EAAG,EAAY,EAAO,CACjE,IAAIylC,EAAWI,EAAU,KAAK,EAC1BnzB,EAAIhV,gBAAQ2oC,GAAS9hC,EAAOmhC,CAAS,EAAGv3B,EAAIC,EAC5C/E,EAEJ,IAAK,EAAIk8B,EAAQ,KAAKx/B,EAAM,IAAI,UAAU,cAAe,CACrD,YAAaxB,EACb,OAAQ,KACR,aACA,SACA,EAAGmO,EAAE,GACL,EAAGA,EAAE,GACL,GAAI,EACJ,GAAI,EACJ,UACF,CAAC,EAAGpH,CAAC,IAAM,KAKb,MAHA,GAAKjC,EAAE,EAAIqJ,EAAE,IAAM,EACnB,EAAKrJ,EAAE,EAAIqJ,EAAE,IAAM,EAEZ,SAAS,QAAQ,EAAM,EAAO,EAAO,CAC1C,IAAI9E,EAAK8E,EAAG/R,EACZ,OAAQoE,EAAR,CACE,IAAK,QAAS,EAASygC,GAAc,QAAS,EAAI,IAAU,MAC5D,IAAK,MAAO,OAAOI,EAASJ,GAAa,EAAE59B,EAC3C,IAAK,OAAQ,EAAIlK,gBAAQ2oC,GAAS9hC,EAAOmhC,CAAS,EAAG,EAAI99B,CAC3D,CACA69B,EAAS,KACP1gC,EACAgB,EACA,IAAI,UAAUhB,EAAM,CAClB,YAAaR,EACb,QAAS8E,EACT,OAAQ,KACR,aACA,OAAQ1I,EACR,EAAG+R,EAAE,GAAKvE,EACV,EAAGuE,EAAE,GAAKtE,EACV,GAAIsE,EAAE,GAAK9E,EAAG,GACd,GAAI8E,EAAE,GAAK9E,EAAG,GACd,UACF,CAAC,EACDtC,CACF,CACF,CACF,CA2BA,MAzBA,MAAK,OAAS,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAS,OAAO5F,GAAM,WAAaA,EAAI/H,GAAS,CAAC,CAAC+H,CAAC,EAAG,MAAQwiB,CAC3F,EAEA,KAAK,UAAY,SAAS,EAAG,CAC3B,OAAO,UAAU,QAAU,EAAY,OAAOxiB,GAAM,WAAaA,EAAI/H,GAAS+H,CAAC,EAAG,MAAQggC,CAC5F,EAEA,KAAK,QAAU,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,EAAU,OAAOhgC,GAAM,WAAaA,EAAI/H,GAAS+H,CAAC,EAAG,MAAQ6/B,CAC1F,EAEA,KAAK,UAAY,SAAS,EAAG,CAC3B,OAAO,UAAU,QAAU,EAAY,OAAO7/B,GAAM,WAAaA,EAAI/H,GAAS,CAAC,CAAC+H,CAAC,EAAG,MAAQigC,CAC9F,EAEA,KAAK,GAAK,UAAW,CACnB,IAAI1jC,EAAQ4jC,EAAU,GAAG,MAAMA,EAAW,SAAS,EACnD,OAAO5jC,IAAU4jC,EAAY,KAAO5jC,CACtC,EAEA,KAAK,cAAgB,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,GAAkB,EAAI,CAACyD,GAAKA,EAAG,MAAQ,KAAK,KAAKwgC,CAAc,CAC5F,EAEO,IACT,CCvLA,IAAa,QAAb,cAA6B,SAAU,CACnC,eACA,iBAEA,YACA,iBACA,iBACA,YACA,YACA,gBAEA,UACA,gBAEA,aAAc,CACV,MAAM,EAEN,KAAK,YAAc,IAAI,KAAK,CAAC,CACxB,OAAO,GAAQ,CAAC,CAChB,eAAe,EAAE,EAEtB,KAAK,iBAAmB,IAAI,MAAM,CAAC,CAC9B,MAAM,WAAW,CAAC,CAClB,MAAM,MAAM,EAEjB,KAAK,iBAAmB,IAAI,MAAM,CAAC,CAC9B,MAAM,OAAO,CAAC,CACd,MAAM,MAAM,EAEjB,KAAK,YAAc,IAAI,KAAK,CAAC,CACxB,MAAM,OAAO,EAElB,KAAK,YAAc,IAAI,KAAK,CAAC,CACxB,eAAe,CAAC,EAErB,IAAMrjC,EAAU,KAChB,KAAK,YAAY,YAAc,UAAY,CACnCA,EAAQ,QAAQ,GAAKA,EAAQ,QAAQ,CAAC,CAAC,WAAW,GAClDA,EAAQ,QAAQ,CAAC,CAAC,QAAQ,EAAK,CAEvC,EACA,KAAK,YAAY,aAAe,UAAY,CACpCA,EAAQ,QAAQ,GAAKA,EAAQ,QAAQ,CAAC,CAAC,WAAW,GAClDA,EAAQ,QAAQ,CAAC,CAAC,QAAQ,EAAI,CAEtC,EAEA,KAAK,gBAAkB,CAAC,CAC5B,CAEA,MAAM,EAAU,EAAU,CACtB,MAAM,MAAMyjC,EAAUC,CAAQ,EAC9B,IAAMzuB,EAAUyuB,EAAS,OAAO,GAAG,CAAC,CAAC,KAAK,QAAS,OAAO,EACpDjb,EAAUxT,EAAQ,KAAK,EAC7B,KAAK,UAAYA,EAAQ,OAAO,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,CACrD,KAAK,KAAM,KAAK,GAAG,EAAI,OAAO,CAAC,CAC/B,OAAO,MAAM,CAAC,CACd,KAAK,IAAK,CAAC,CAAC,CACZ,KAAK,IAAK,CAAC,CAAC,CACZ,KAAK,QAAS,KAAK,MAAM,KAAK,CAAC,CAC/B,KAAK,SAAU,KAAK,MAAM,MAAM,EAErC,KAAK,iBACA,OAAOwT,CAAO,CAAC,CACf,OAAO,CAAC,CACR,QAAQ,KAAK,UAAU,GAAK,KAAK,SAAS,CAAC,EAEhD,KAAK,YACA,OAAOA,CAAO,CAAC,CACf,OAAO,EAEZ,KAAK,YACA,OAAOgb,CAAQ,EAEpB,KAAK,YACA,OAAOhb,CAAO,EAEnB,KAAK,iBACA,OAAOA,CAAO,EAEnB,KAAK,gBAAkB1tB,eAAS,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,QAAS,sBAAsB,CACpG,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAO0tB,EAASxT,CAAO,EAC7B,IAAMjV,EAAU,KAEZmR,EAAQ,KAAK,MAAM,EAAI,EACrBC,EAAS,KAAK,OAAO,EAAI,EAE/B,KAAK,YACA,QAAQ,KAAK,UAAU,GAAK,KAAK,SAAS,CAAC,CAAC,CAC5C,MAAM,KAAK,WAAW,CAAC,CAAC,CACxB,OAAO,EAEZ,KAAK,YACA,OAAO,EAEZ,KAAK,YACA,KAAK,KAAK,MAAM,CAAC,CAAC,CAClB,QAAQ,KAAK,UAAU,CAAC,CAAC,CACzB,OAAO,EAGZ,IAAMuyB,EAAiB,KAAK,gBAAgB,UAAU,iBAAiB,CAAC,CAAC,KAAK,KAAK,kBAAkB,CAAC,EACtGA,EAAe,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,KAAK,QAAS,gBAAgB,CAAC,CAClE,KAAK,SAAU,EAAQ,EAAK,CACzB,IAAM5E,EAAK,EAAQ,gBAAgB1Y,GAAOtrB,eAAS,IAAI,CAAC,CACnD,KAAK,QAAS,mBAAqB6oC,EAAO,MAAQA,EAAO,MAAQ,GAAG,CAAC,CACrE,KAAK,KAAMA,EAAO,EAAE,CAAC,CACrB,MAAM,UAAWA,EAAO,OAAO,CAAC,CAChC,MAAM,QAASA,EAAO,KAAK,CAAC,CAC5B,MAAM,SAAUA,EAAO,MAAM,CAAC,CAC9B,MAAM,SAAU,SAAS,CAAC,CAC1B,GAAG,QAAS,SAAU,EAAG,CAAE5jC,EAAQ,MAAMyI,CAAC,CAAG,CAAC,EAC/Cm7B,EAAO,OAAS,cAChB7E,EACK,OAAO,GAAG,CAAC,CACX,KAAK,QAAS,IAAI,CAAC,CACnB,KAAK,UAAY,CAAE,OAAO6E,EAAO,KAAO,CAAC,EAE9C7E,EACK,KAAK,UAAY,CAAE,OAAO6E,EAAO,KAAO,CAAC,CAEtD,CAAC,EAELD,EAAe,KAAK,CAAC,CAChB,KAAK,SAAU,EAAI,EAAK,CACrB,IAAMnF,EAAWzjC,eAAS,IAAI,EAC9B,OAAOiF,EAAQ,gBAAgBqmB,GAC/BmY,EAAS,OAAO,CACpB,CAAC,EAGL,IAAMqF,EAAqB,KAAK,UAAU,EAAI,KAAK,IAAI,MAAM,KAAM,KAAK,gBAAgB,IAAI,SAAU,EAAG,CAAE,OAAOp7B,EAAE,KAAK,CAAC,CAAC,YAAc,CAAC,CAAC,EAAI,EACzIq7B,EAAiB,KAAK,UAAU,GAAK,KAAK,SAAS,EAAI,KAAK,YAAY,QAAQ,EAAI,EAAI,CAAE,MAAO,EAAG,OAAQ,CAAE,EAC9GC,EAAiB,KAAK,YAAY,QAAQ,EAAI,EAC9CC,EAAiB,KAAK,YAAY,QAAQ,EAAI,EAC9CC,EAAqB,KAAK,IAAIH,EAAe,OAAQC,EAAe,OAAQC,EAAe,OAAQH,CAAkB,EACrHK,EAAoB,KAAK,UAAU,EAAID,EAAqB,EAC5DE,GAAU,CAAC/yB,EAAS6yB,GAAsB,EAE1CG,EAAkB,KAAK,UAAU,EAAI,KAAK,IAAIL,EAAe,OAAQC,EAAe,OAAQH,CAAkB,EAAI,EAClHQ,EAAiB,KAAK,UAAU,EAAIN,EAAe,MAAQC,EAAe,MAAQ,EACpFK,EAAiBlzB,IACjB,EAAQkzB,GAGZ,IAAMC,EAAYJ,GAAqBE,EAAkB,GAAKF,EAAoBE,GAAmB,EAC/FG,EAAaD,EAEnB,KAAK,iBACA,IAAI,CAAE,EAAGC,EAAY,EAAGJ,CAAO,CAAC,CAAC,CACjC,MAAMhzB,EAAQozB,EAAa,CAAC,CAAC,CAC7B,OAAOH,CAAe,CAAC,CACvB,QAAQ,KAAK,UAAU,CAAC,CAAC,CACzB,OAAO,EAEZ,KAAK,YACA,KAAK,CAAE,EAAG,CAACjzB,EAAQ,EAAI2yB,EAAe,MAAQ,EAAG,EAAGK,CAAO,CAAC,EAEjE,KAAK,YACA,KAAK,CAAE,EAAGhzB,EAAQ,EAAI6yB,EAAe,MAAQ,EAAI,KAAK,YAAY,EAAG,EAAGG,CAAO,CAAC,EAErF,KAAK,YACA,KAAK,CAAE,GAAIL,EAAe,MAAQ,EAAIE,EAAe,MAAQ,GAAK,EAAG,EAAGG,CAAO,CAAC,EAGrF,IAAMpP,EAAO/0B,EAAQ,iBAAiB,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,MAAQA,EAAQ,MAAM,MAAQukC,EAAa,GAAKvkC,EAAQ,aAAa,EAAI,KAAK,gBAAgB,KAAK,CAAC,CAAC,YACpKyhC,EAAOzhC,EAAQ,iBAAiB,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,KAAQokC,EAAkB,KAAK,gBAAgB,KAAK,CAAC,CAAC,cAAgB,EAwB3I,GAvBK,MAAMrP,CAAI,GACX,KAAK,gBAAgB,MAAM,OAAQA,EAAO,IAAI,EAE7C,MAAM0M,CAAI,GACX,KAAK,gBAAgB,MAAM,MAAOA,EAAO,IAAI,EAG7C,KAAK,UAAU,EACf,KAAK,iBACA,IAAI,CAAE,EAAG8C,EAAa,EAAG,EAAGL,EAAoB,EAAII,EAAY,CAAE,CAAC,CAAC,CACpE,MAAMnzB,EAAQozB,CAAU,CAAC,CACzB,OAAOnzB,EAAS8yB,EAAoBI,CAAS,CAAC,CAC9C,OAAO,EAGZ,KAAK,iBACA,IAAI,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,CAAC,CACnB,MAAMnzB,CAAK,CAAC,CACZ,OAAOC,CAAM,CAAC,CACd,OAAO,EAIZ,KAAK,YAAY,EAAG,CACpB,IAAMozB,EAAUD,EACVE,EAAUP,EAAoBI,EAE9BI,EAAUzvB,EAAQ,UAAU,UAAU,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAI,CAAC,KAAK,QAAQ,CAAC,EAAI,CAAC,EAAG,SAAU,EAAG,CAAE,OAAOxM,EAAE,GAAK,CAAC,EACzHi8B,EAAQ,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CACtB,KAAK,QAAS,SAAS,CAAC,CACxB,KAAK,YAAa,QAAU,KAAK,GAAG,EAAI,QAAQ,CAAC,CACjD,KAAK,SAAU,EAAG,CACfj8B,EAAE,OAAO,IAAI,CACjB,CAAC,CAAC,CACD,MAAMi8B,CAAO,CAAC,CACd,KAAK,YAAa,aAAgBH,EAAa,EAAK,MAAQL,EAAoB,EAAII,EAAY,GAAK,GAAG,CAAC,CACzG,KAAK,SAAU,EAAG,CACf,IAAMpoB,EAAU,CACZ,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,CACZ,EACAzT,EACK,OAAO,CACJ,MAAO0I,EAAQqzB,GAAWtoB,EAAQ,KAAOA,EAAQ,OACjD,OAAQ9K,EAASqzB,GAAWvoB,EAAQ,IAAMA,EAAQ,OACtD,CAAC,CAET,CAAC,EAED,KAAK,QAAQ,GACb,KAAK,UACA,KAAK,IAAK,EAAE/K,EAAQqzB,GAAW,CAAC,CAAC,CACjC,KAAK,IAAK,EAAEpzB,EAASqzB,GAAW,CAAC,CAAC,CAClC,KAAK,QAAStzB,EAAQqzB,CAAO,CAAC,CAC9B,KAAK,SAAUpzB,EAASqzB,CAAO,EAGxCC,EAAQ,KAAK,CAAC,CAAC,WAAW,CAAC,CACtB,KAAK,SAAU,EAAG,CAAEj8B,EAAE,OAAO,IAAI,CAAG,CAAC,CAAC,CACtC,OAAO,CAEhB,CAEI,KAAK,YAAY,QAAQ,GAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAK,GAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,YACrG,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,YAAY,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAK,CAAC,CAElG,CAEA,KAAK,EAAS,EAAS,CACnB,KAAK,iBACA,OAAO,IAAI,EAEhB,KAAK,YACA,OAAO,IAAI,EAEhB,KAAK,YACA,OAAO,IAAI,EAEhB,KAAK,YACA,OAAO,IAAI,EAEhB,KAAK,iBACA,OAAO,IAAI,EAEZ,KAAK,QAAQ,GACb,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,EAE9B,MAAM,KAAKggB,EAASxT,CAAO,CAC/B,CAEA,aAAa,EAAQ,EAAQ,CACzB,IAAM0vB,EAAO,CAAC,EACRjlC,EAAK,KAAK,YAAY,aAAa0zB,EAAQC,EAAQ,KAAK,IAAI,EAC9D3zB,GACAilC,EAAK,KAAK,CAAE,EAAGjlC,EAAI,EAAG,KAAK,SAASA,EAAI2zB,CAAM,CAAE,CAAC,EAErD,IAAM3f,EAAK,KAAK,iBAAiB,aAAa0f,EAAQC,CAAM,EACxD3f,GACAixB,EAAK,KAAK,CAAE,EAAGjxB,EAAI,EAAG,KAAK,SAASA,EAAI2f,CAAM,CAAE,CAAC,EAErD,IAAMuR,EAAK,KAAK,iBAAiB,aAAaxR,EAAQC,CAAM,EACxDuR,GACAD,EAAK,KAAK,CAAE,EAAGC,EAAI,EAAG,KAAK,SAASA,EAAIvR,CAAM,CAAE,CAAC,EAErD,IAAIwR,EAAU,KAMd,OALAF,EAAK,QAAQ,SAAU,EAAM,EACrBE,IAAY,MAAQA,EAAQ,EAAIhgB,EAAK,KACrC,EAAUA,EAElB,CAAC,EACMggB,GAAWA,EAAQ,EAAIA,EAAQ,EAAI,IAC9C,CAEA,MAAM,EAAG,CACT,CAEJ,EACA,QAAQ,UAAU,QAAU,kBA6B5B,QAAQ,UAAU,QAAQ,YAAa,GAAM,UAAW,aAAc,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EAC/F,QAAQ,UAAU,QAAQ,QAAS,GAAI,SAAU,QAAS,KAAM,CAAE,KAAM,CAAC,OAAO,CAAE,CAAC,EACnF,QAAQ,UAAU,aAAa,gBAAiB,cAAe,UAAU,EACzE,QAAQ,UAAU,QAAQ,WAAY,GAAM,UAAW,aAAc,KAAM,CAAE,KAAM,CAAC,UAAU,CAAE,CAAC,EACjG,QAAQ,UAAU,aAAa,cAAe,cAAe,QAAQ,EACrE,QAAQ,UAAU,aAAa,aAAc,cAAe,OAAO,EAEnE,QAAQ,UAAU,QAAQ,UAAW,KAAM,SAAU,UAAW,KAAM,CAAE,KAAM,CAAC,SAAS,CAAE,CAAC,EAE3F,QAAQ,UAAU,QAAQ,oBAAqB,CAAC,EAAG,QAAS,eAAgB,KAAM,CAAE,KAAM,CAAC,cAAc,CAAE,CAAC,EAC5G,QAAQ,UAAU,QAAQ,eAAgB,GAAI,SAAU,iCAAkC,KAAM,CAAE,KAAM,CAAC,cAAc,CAAE,CAAC,EAE1H,QAAQ,UAAU,QAAQ,cAAe,GAAM,UAAW,eAAgB,KAAM,CAAE,KAAM,CAAC,cAAc,CAAE,CAAC,EAC1G,QAAQ,UAAU,QAAQ,OAAQ,CAAC,EAAG,QAAS,iBAAkB,KAAM,CAAE,KAAM,CAAC,cAAc,CAAE,CAAC,EACjG,QAAQ,UAAU,QAAQ,cAAe,EAAG,SAAU,eAAgB,KAAM,CAAE,KAAM,CAAC,UAAU,CAAE,CAAC,EAElG,QAAQ,UAAU,eAAiB,QAAQ,UAAU,KACrD,QAAQ,UAAU,KAAO,SAAyB,EAAI,CAMlD,OALA,QAAQ,UAAU,eAAe,MAAM,KAAM,SAAS,EAClD,UAAU,QACV,KAAK,YAAY,KAAKhiC,CAAC,EAChB,MAEJ,KAAK,YAAY,KAAK,CACjC,EAEA,QAAQ,UAAU,iBAAmB,QAAQ,UAAU,YACvD,QAAQ,UAAU,YAAc,SAAU,EAAI,CAC1C,IAAMyiB,EAAS,QAAQ,UAAU,iBAAiB,MAAM,KAAM,SAAS,EAMvE,OALI,UAAU,QACN,KAAK,QAAQ,GACb,KAAK,QAAQ,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,EAG1CA,CACX,ECpWA,IAAa,cAAb,cAAmC,OAAQ,CAEvC,YACA,QACA,SACA,KACA,SACA,eACA,cACA,eACA,aACA,aACA,aAEA,aAAc,CACV,MAAM,EAEN,KAAK,YAAc,EACnB,KAAK,QAAU,CAAC,CAAE,IAAK,IAAK,EAAG,CAAE,IAAK,GAAI,EAAG,CAAE,IAAK,IAAK,EAAG,CAAE,IAAK,GAAI,EAAG,CAAE,IAAK,IAAK,EAAG,CAAE,IAAK,GAAI,EAAG,CAAE,IAAK,IAAK,EAAG,CAAE,IAAK,GAAI,CAAC,EAElI,IAAMtlB,EAAU,KAChB,KAAK,SAAWhF,SAAW,YAAa,OAAQ,SAAS,EACzD,KAAK,KAAOC,aAAO,CAAC,CACf,QAAQ,SAAU,EAAQ,EAAG,CAAE,OAAOwN,CAAG,CAAC,EAE/C,KAAK,KACA,GAAG,QAAS,SAAU,EAAO,EAAG,CAC7BzI,EAAQ,SAAS,KAAK,YAAaA,EAASyI,EAAE,GAAG,EAC7CzI,EAAQ,YAAY,IACpB0B,EAAM,YAAY,gBAAgB,EAClC,EAAQ,eAAiB,CAAE,EAAG+G,EAAE,EAAG,EAAGA,EAAE,CAAE,EAC1C,EAAQ,cAAgBzI,EAAQ,IAAI,EACpC,EAAQ,eAAiBA,EAAQ,KAAK,EACtC,EAAQ,aAAe,CACnB,EAAGA,EAAQ,cAAc,EACzB,EAAGA,EAAQ,cAAc,EACzB,MAAOA,EAAQ,eAAe,MAC9B,OAAQA,EAAQ,eAAe,MACnC,EACA,EAAQ,aAAeA,EAAQ,YAAY,QAAQ,EAAI,EACvD,EAAQ,aAAeA,EAAQ,YAAY,QAAQ,EAAI,EACvDA,EAAQ,YAAY,EAAK,EAEjC,CAAC,CAAC,CACD,GAAG,OAAQ,SAAU,EAAO,EAAG,CAC5B,GAAIA,EAAQ,YAAY,EAAG,CACvB0B,EAAM,YAAY,gBAAgB,EAClC,IAAMojC,EAAMpjC,EAAM,EAAI1B,EAAQ,eAAe,EACvC+kC,EAAMrjC,EAAM,EAAI1B,EAAQ,eAAe,EACvCoS,EAAQ,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACvC,OAAQ3J,EAAE,IAAV,CACI,IAAK,KACD,EAAM,EAAIq8B,EAAM,EAChB,EAAM,EAAI,CAACA,EAEf,IAAK,IACD,EAAM,EAAIC,EAAM,EAChB,EAAM,EAAI,CAACA,EACX,MACJ,IAAK,KACD,EAAM,EAAIA,EAAM,EAChB,EAAM,EAAI,CAACA,EAEf,IAAK,IACD,EAAM,EAAID,EAAM,EAChB,EAAM,EAAIA,EACV,MACJ,IAAK,KACD,EAAM,EAAIA,EAAM,EAChB,EAAM,EAAIA,EAEd,IAAK,IACD,EAAM,EAAIC,EAAM,EAChB,EAAM,EAAIA,EACV,MACJ,IAAK,KACD,EAAM,EAAIA,EAAM,EAChB,EAAM,EAAIA,EAEd,IAAK,IACD,EAAM,EAAID,EAAM,EAChB,EAAM,EAAI,CAACA,CAEnB,CACA,IAAME,EAAU,CACZ,EAAGhlC,EAAQ,cAAc,EAAIoS,EAAM,EACnC,EAAGpS,EAAQ,cAAc,EAAIoS,EAAM,EACnC,MAAOpS,EAAQ,eAAe,MAAQoS,EAAM,EAC5C,OAAQpS,EAAQ,eAAe,OAASoS,EAAM,CAClD,EACI4yB,EAAQ,MAAQhlC,EAAQ,aAAa,MAAQ,EAAIA,EAAQ,aAAa,QACtE,EAAQ,EAAIA,EAAQ,aAAa,EACjC,EAAQ,MAAQA,EAAQ,aAAa,OAErCglC,EAAQ,OAAShlC,EAAQ,aAAa,OAAS,KAC/C,EAAQ,EAAIA,EAAQ,aAAa,EACjC,EAAQ,OAASA,EAAQ,aAAa,QAE1CA,EACK,IAAI,CAAE,EAAGglC,EAAQ,EAAG,EAAGA,EAAQ,CAAE,CAAC,CAAC,CACnC,KAAK,CAAE,MAAOA,EAAQ,MAAO,OAAQA,EAAQ,MAAO,CAAC,CAAC,CACtD,OAAO,CAAC,CACR,QAAQ,EAAI,EAEjBhlC,EAAQ,SAAS,KAAK,OAAQA,EAASyI,EAAE,GAAG,EAC5C,EAAQ,aAAeu8B,CAC3B,CACJ,CAAC,CAAC,CACD,GAAG,MAAO,SAAU,EAAO,EAAG,CACvBhlC,EAAQ,YAAY,IACpB0B,EAAM,YAAY,gBAAgB,EAClC1B,EACK,YAAY,EAAI,CAAC,CACjB,OAAO,EAEZA,EAAQ,iBAAiB,QAAQ,EAAI,EACrCA,EAAQ,iBAAiB,QAAQ,EAAI,EACrCA,EAAQ,SAAS,KAAK,UAAWA,EAASyI,EAAE,GAAG,EAEvD,CAAC,CAET,CAEA,KAAK,EAAG,CACJ,IAAM6c,EAAS,MAAM,KAAK,MAAM,KAAM,SAAS,EAE/C,OADA,KAAK,cAAc,KAAK,SAAU,KAAK,QAAQ,EACxCA,CACX,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOmD,EAASxT,CAAO,EAC7B,KAAK,cAAcwT,EAASxT,CAAO,CACvC,CAEA,cAAc,EAAU,EAAU,CAC9B,IAAMgwB,EAAc,KAAK,oBAAoB,UAAU,MAAM,CAAC,CAAC,KAAK,KAAK,QAAS,SAAU,EAAG,CAAE,OAAOx8B,EAAE,GAAK,CAAC,EAC1Gy8B,EAAmBD,EAAY,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACtD,KAAK,QAAS,SAAU,EAAG,CAAE,MAAO,SAAWx8B,EAAE,GAAK,CAAC,CAAC,CACxD,KAAK,KAAK,IAAI,EAGbvC,EAAI,KAAK,KAAK,EAAI,KAAK,iBAAiB,KAAK,EAAI,KAAK,iBAAiB,MAAM,EAAI,EACjFtE,EAAI,KAAK,KAAK,EAAI,KAAK,iBAAiB,KAAK,EAAI,KAAK,iBAAiB,OAAO,EAAI,EAClFwE,EAAI,KAAK,KAAK,EAAI,KAAK,iBAAiB,KAAK,EAAI,KAAK,iBAAiB,MAAM,EAAI,EACjFzF,EAAI,KAAK,KAAK,EAAI,KAAK,iBAAiB,KAAK,EAAI,KAAK,iBAAiB,OAAO,EAAI,EAClF4Q,EAAInL,EAAIF,EACRO,EAAI9F,EAAIiB,EACR5B,EAAU,KAChBklC,EAAiB,MAAMD,CAAW,CAAC,CAC9B,KAAK,SAAU,EAAG,CACf,OAAQx8B,EAAE,IAAV,CACI,IAAK,KACD,EAAE,EAAIvC,EAAIlG,EAAQ,YAAc,EAChC,EAAE,EAAI4B,EAAI5B,EAAQ,YAAc,EAChC,EAAE,MAAQA,EAAQ,YAClB,EAAE,OAASA,EAAQ,YACnB,MACJ,IAAK,IACD,EAAE,EAAIkG,EAAIlG,EAAQ,YAAc,EAChC,EAAE,EAAI4B,EAAI5B,EAAQ,YAAc,EAChC,EAAE,MAAQuR,EAAIvR,EAAQ,YACtB,EAAE,OAASA,EAAQ,YACnB,MACJ,IAAK,KACD,EAAE,EAAIoG,EAAIpG,EAAQ,YAAc,EAChC,EAAE,EAAI4B,EAAI5B,EAAQ,YAAc,EAChC,EAAE,MAAQA,EAAQ,YAClB,EAAE,OAASA,EAAQ,YACnB,MACJ,IAAK,IACD,EAAE,EAAIoG,EAAIpG,EAAQ,YAAc,EAChC,EAAE,EAAI4B,EAAI5B,EAAQ,YAAc,EAChC,EAAE,MAAQA,EAAQ,YAClB,EAAE,OAASyG,EAAIzG,EAAQ,YACvB,MACJ,IAAK,KACD,EAAE,EAAIoG,EAAIpG,EAAQ,YAAc,EAChC,EAAE,EAAIW,EAAIX,EAAQ,YAAc,EAChC,EAAE,MAAQA,EAAQ,YAClB,EAAE,OAASA,EAAQ,YACnB,MACJ,IAAK,IACD,EAAE,EAAIkG,EAAIlG,EAAQ,YAAc,EAChC,EAAE,EAAIW,EAAIX,EAAQ,YAAc,EAChC,EAAE,MAAQuR,EAAIvR,EAAQ,YACtB,EAAE,OAASA,EAAQ,YACnB,MACJ,IAAK,KACD,EAAE,EAAIkG,EAAIlG,EAAQ,YAAc,EAChC,EAAE,EAAIW,EAAIX,EAAQ,YAAc,EAChC,EAAE,MAAQA,EAAQ,YAClB,EAAE,OAASA,EAAQ,YACnB,MACJ,IAAK,IACD,EAAE,EAAIkG,EAAIlG,EAAQ,YAAc,EAChC,EAAE,EAAI4B,EAAI5B,EAAQ,YAAc,EAChC,EAAE,MAAQA,EAAQ,YAClB,EAAE,OAASyG,EAAIzG,EAAQ,WAE/B,CACA,eAAS,IAAI,CAAC,CACT,KAAK,IAAKyI,EAAE,CAAC,CAAC,CACd,KAAK,IAAKA,EAAE,CAAC,CAAC,CACd,KAAK,QAASA,EAAE,KAAK,CAAC,CACtB,KAAK,SAAUA,EAAE,MAAM,CAEhC,CAAC,CAET,CACJ,EACA,cAAc,UAAU,QAAU,wBAOlC,cAAc,UAAU,QAAQ,cAAe,GAAM,UAAW,iCAAkC,KAAM,CAAE,KAAM,CAAC,UAAW,QAAQ,CAAE,CAAC,EChOvI,IAAA08B,GAAA,OAAe,OAAWjnC,EAAA,SAAA,ECA1B,SAAwB,UAAU,EAAM,CACtC,cACA,SACA,YACA,YACC,CACD,OAAO,iBAAiB,KAAM,CAC5B,KAAM,CAAC,MAAOgE,EAAM,WAAY,GAAM,aAAc,EAAI,EACxD,YAAa,CAAC,MAAOK,EAAa,WAAY,GAAM,aAAc,EAAI,EACtE,OAAQ,CAAC,MAAO7F,EAAQ,WAAY,GAAM,aAAc,EAAI,EAC5D,UAAW,CAAC,MAAO80B,EAAW,WAAY,GAAM,aAAc,EAAI,EAClE,EAAG,CAAC,MAAOoR,CAAQ,CACrB,CAAC,CACH,CCbA,SAAgB,UAAU,EAAG,EAAG,EAAG,CACjC,KAAK,EAAIr8B,EACT,KAAK,EAAIrI,EACT,KAAK,EAAIoJ,CACX,CAEA,UAAU,UAAY,CACpB,YAAa,UACb,MAAO,SAAS,EAAG,CACjB,OAAOf,IAAM,EAAI,KAAO,IAAI,UAAU,KAAK,EAAIA,EAAG,KAAK,EAAG,KAAK,CAAC,CAClE,EACA,UAAW,SAAS,EAAG,EAAG,CACxB,OAAOrI,IAAM,EAAIoJ,IAAM,EAAI,KAAO,IAAI,UAAU,KAAK,EAAG,KAAK,EAAI,KAAK,EAAIpJ,EAAG,KAAK,EAAI,KAAK,EAAIoJ,CAAC,CAClG,EACA,MAAO,SAAS,EAAO,CACrB,MAAO,CAAC7E,EAAM,GAAK,KAAK,EAAI,KAAK,EAAGA,EAAM,GAAK,KAAK,EAAI,KAAK,CAAC,CAChE,EACA,OAAQ,SAAS,EAAG,CAClB,OAAOvE,EAAI,KAAK,EAAI,KAAK,CAC3B,EACA,OAAQ,SAAS,EAAG,CAClB,OAAOoJ,EAAI,KAAK,EAAI,KAAK,CAC3B,EACA,OAAQ,SAAS,EAAU,CACzB,MAAO,EAAE89B,EAAS,GAAK,KAAK,GAAK,KAAK,GAAIA,EAAS,GAAK,KAAK,GAAK,KAAK,CAAC,CAC1E,EACA,QAAS,SAAS,EAAG,CACnB,OAAQlnC,EAAI,KAAK,GAAK,KAAK,CAC7B,EACA,QAAS,SAAS,EAAG,CACnB,OAAQoJ,EAAI,KAAK,GAAK,KAAK,CAC7B,EACA,SAAU,SAAS,EAAG,CACpB,OAAOpJ,EAAE,KAAK,CAAC,CAAC,OAAOA,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,QAAS,IAAI,CAAC,CAAC,IAAIA,EAAE,OAAQA,CAAC,CAAC,CAC3E,EACA,SAAU,SAAS,EAAG,CACpB,OAAOoJ,EAAE,KAAK,CAAC,CAAC,OAAOA,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,QAAS,IAAI,CAAC,CAAC,IAAIA,EAAE,OAAQA,CAAC,CAAC,CAC3E,EACA,SAAU,UAAW,CACnB,MAAO,aAAe,KAAK,EAAI,IAAM,KAAK,EAAI,WAAa,KAAK,EAAI,GACtE,CACF,EAEA,IAAWpM,GAAW,IAAI,UAAU,EAAG,EAAG,CAAC,EAE3C,UAAU,UAAY,UAAU,UAEhC,SAAwB,UAAU,EAAM,CACtC,KAAO,CAAC8C,EAAK,QAAQ,GAAI,EAAE,EAAOA,EAAK,YAAa,OAAO9C,GAC3D,OAAO8C,EAAK,MACd,CClDA,SAAgB7C,gBAAc,EAAO,CACnCuG,EAAM,yBAAyB,CACjC,C,4EAEA,SAAA,kBAAwB,EAAO,CAC7BA,EAAM,eAAe,EACrBA,EAAM,yBAAyB,CACjC,CCKA,SAAStG,gBAAc,EAAO,CAC5B,OAAQ,CAACsG,EAAM,SAAWA,EAAM,OAAS,UAAY,CAACA,EAAM,MAC9D,C,wCAEA,SAASrG,iBAAgB,CACvB,IAAI,EAAI,KASR,OARI,aAAa,YACf,EAAI,EAAE,iBAAmB,EACrB,EAAE,aAAa,SAAS,GAC1B,EAAI,EAAE,QAAQ,QACP,CAAC,CAAC,EAAE,EAAG,EAAE,CAAC,EAAG,CAAC,EAAE,EAAI,EAAE,MAAO,EAAE,EAAI,EAAE,MAAM,CAAC,GAE9C,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,MAAM,QAAQ,MAAO,EAAE,OAAO,QAAQ,KAAK,CAAC,GAE1D,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,YAAa,EAAE,YAAY,CAAC,CACjD,C,wCAEA,SAAS,kBAAmB,CAC1B,OAAO,KAAK,QAAUC,EACxB,CAEA,SAAS,kBAAkB,EAAO,CAChC,MAAO,CAACoG,EAAM,QAAUA,EAAM,YAAc,EAAI,IAAOA,EAAM,UAAY,EAAI,OAAUA,EAAM,QAAU,GAAK,EAC9G,CAEA,SAASnG,oBAAmB,CAC1B,OAAO,UAAU,gBAAmB,iBAAkB,IACxD,C,+EAEA,SAAS,iBAAiB,EAAW,EAAQ,EAAiB,CAC5D,IAAI+pC,EAAM9T,EAAU,QAAQ+T,EAAO,EAAE,CAAC,EAAE,EAAIC,EAAgB,EAAE,CAAC,GAC3DC,EAAMjU,EAAU,QAAQ+T,EAAO,EAAE,CAAC,EAAE,EAAIC,EAAgB,EAAE,CAAC,GAC3DE,EAAMlU,EAAU,QAAQ+T,EAAO,EAAE,CAAC,EAAE,EAAIC,EAAgB,EAAE,CAAC,GAC3DG,EAAMnU,EAAU,QAAQ+T,EAAO,EAAE,CAAC,EAAE,EAAIC,EAAgB,EAAE,CAAC,GAC/D,OAAOhU,EAAU,UACfiU,EAAMH,GAAOA,EAAMG,GAAO,EAAI,KAAK,IAAI,EAAGH,CAAG,GAAK,KAAK,IAAI,EAAGG,CAAG,EACjEE,EAAMD,GAAOA,EAAMC,GAAO,EAAI,KAAK,IAAI,EAAGD,CAAG,GAAK,KAAK,IAAI,EAAGC,CAAG,CACnE,CACF,CAEA,SAAA,gBAA0B,CACxB,IAAItgB,EAASjqB,gBACTmqC,EAASlqC,gBACTuqC,EAAY,iBACZC,EAAa,kBACb/C,EAAYvnC,mBACZuqC,EAAc,CAAC,EAAG,GAAQ,EAC1BN,EAAkB,CAAC,CAAC,KAAW,IAAS,EAAG,CAAC,IAAU,GAAQ,CAAC,EAC/DO,EAAW,IACXn5B,EAAcpR,GACdwnC,EAAY,SAAS,QAAS,OAAQ,KAAK,EAC3CgD,EACAC,EACA7C,EACA8C,EAAa,IACbC,EAAa,IACb9C,EAAiB,EACjB+C,EAAc,GAElB,SAAS,KAAK,EAAW,CACvBrmC,EACK,SAAS,SAAU,gBAAgB,CAAC,CACpC,GAAG,aAAc,QAAS,CAAC,QAAS,EAAK,CAAC,CAAC,CAC3C,GAAG,iBAAkB,WAAW,CAAC,CACjC,GAAG,gBAAiB,UAAU,CAAC,CACjC,OAAO+iC,CAAS,CAAC,CACf,GAAG,kBAAmB,YAAY,CAAC,CACnC,GAAG,iBAAkB,UAAU,CAAC,CAChC,GAAG,iCAAkC,UAAU,CAAC,CAChD,MAAM,8BAA+B,eAAe,CAC3D,CAEA,KAAK,UAAY,SAAS,EAAY,EAAW,EAAO,EAAO,CAC7D,IAAI/iC,EAAYsmC,EAAW,UAAYA,EAAW,UAAU,EAAIA,EAChEtmC,EAAU,SAAS,SAAU,gBAAgB,EACzCsmC,IAAetmC,EAGjBA,EAAU,UAAU,CAAC,CAAC,KAAK,UAAW,CACpC,QAAQ,KAAM,SAAS,CAAC,CACrB,MAAM2B,CAAK,CAAC,CACZ,MAAM,CAAC,CACP,KAAK,KAAM,OAAO8vB,GAAc,WAAaA,EAAU,MAAM,KAAM,SAAS,EAAIA,CAAS,CAAC,CAC1F,IAAI,CACT,CAAC,EARD,SAAS6U,EAAY7U,EAAW/uB,EAAOf,CAAK,CAUhD,EAEA,KAAK,QAAU,SAAS,EAAW,EAAG,EAAG,EAAO,CAC9C,KAAK,QAAQ3B,EAAW,UAAW,CAGjC,OAFS,KAAK,OAAO,GACZ,OAAOwG,GAAM,WAAaA,EAAE,MAAM,KAAM,SAAS,EAAIA,EAEhE,EAAGsJ,EAAGnO,CAAK,CACb,EAEA,KAAK,QAAU,SAAS,EAAW,EAAG,EAAG,EAAO,CAC9C,KAAK,UAAU3B,EAAW,UAAW,CACnC,IAAI,EAAIwlC,EAAO,MAAM,KAAM,SAAS,EAChCnhC,EAAK,KAAK,OACV2G,EAAK8E,GAAK,KAAO,SAAS,CAAC,EAAI,OAAOA,GAAM,WAAaA,EAAE,MAAM,KAAM,SAAS,EAAIA,EACpF1E,EAAK/G,EAAG,OAAO2G,CAAE,EACjBu7B,EAAK,OAAO//B,GAAM,WAAaA,EAAE,MAAM,KAAM,SAAS,EAAIA,EAC9D,OAAOq/B,EAAU,UAAU,MAAMxhC,EAAIkiC,CAAE,EAAGv7B,EAAII,CAAE,EAAG,EAAGq6B,CAAe,CACvE,EAAG31B,EAAGnO,CAAK,CACb,EAEA,KAAK,YAAc,SAAS,EAAW,EAAG,EAAG,EAAO,CAClD,KAAK,UAAU3B,EAAW,UAAW,CACnC,OAAO6lC,EAAU,KAAK,OAAO,UAC3B,OAAO1nC,GAAM,WAAaA,EAAE,MAAM,KAAM,SAAS,EAAIA,EACrD,OAAOoJ,GAAM,WAAaA,EAAE,MAAM,KAAM,SAAS,EAAIA,CACvD,EAAGi+B,EAAO,MAAM,KAAM,SAAS,EAAGC,CAAe,CACnD,EAAG,KAAM9jC,CAAK,CAChB,EAEA,KAAK,YAAc,SAAS,EAAW,EAAG,EAAG,EAAG,EAAO,CACrD,KAAK,UAAU3B,EAAW,UAAW,CACnC,IAAI,EAAIwlC,EAAO,MAAM,KAAM,SAAS,EAChC3jC,EAAI,KAAK,OACTmJ,EAAK8E,GAAK,KAAO,SAAS,CAAC,EAAI,OAAOA,GAAM,WAAaA,EAAE,MAAM,KAAM,SAAS,EAAIA,EACxF,OAAO+1B,EAAUtqC,GAAS,UAAUyP,EAAG,GAAIA,EAAG,EAAE,CAAC,CAAC,MAAMnJ,EAAE,CAAC,CAAC,CAAC,UAC3D,OAAO1D,GAAM,WAAa,CAACA,EAAE,MAAM,KAAM,SAAS,EAAI,CAACA,EACvD,OAAOoJ,GAAM,WAAa,CAACA,EAAE,MAAM,KAAM,SAAS,EAAI,CAACA,CACzD,EAAG,EAAGk+B,CAAe,CACvB,EAAG31B,EAAGnO,CAAK,CACb,EAEA,SAAS,MAAM,EAAW,EAAG,CAE3B,MADA,GAAI,KAAK,IAAIokC,EAAY,GAAI,KAAK,IAAIA,EAAY,GAAIv/B,CAAC,CAAC,EACjDA,IAAMirB,EAAU,EAAIA,EAAY,IAAI,UAAUjrB,EAAGirB,EAAU,EAAGA,EAAU,CAAC,CAClF,CAEA,SAAS,UAAU,EAAW,EAAI,EAAI,CACpC,IAAItzB,EAAI6M,EAAG,GAAKI,EAAG,GAAKqmB,EAAU,EAAGlqB,EAAIyD,EAAG,GAAKI,EAAG,GAAKqmB,EAAU,EACnE,OAAOtzB,IAAMszB,EAAU,GAAKlqB,IAAMkqB,EAAU,EAAIA,EAAY,IAAI,UAAUA,EAAU,EAAGtzB,EAAGoJ,CAAC,CAC7F,CAEA,SAAS,SAAS,EAAQ,CACxB,MAAO,EAAE,CAACi+B,EAAO,EAAE,CAAC,IAAK,CAACA,EAAO,EAAE,CAAC,IAAM,GAAI,CAACA,EAAO,EAAE,CAAC,IAAK,CAACA,EAAO,EAAE,CAAC,IAAM,CAAC,CAClF,CAEA,SAAS,SAAS,EAAY,EAAW,EAAO,EAAO,CACrDr4B,EACK,GAAG,aAAc,UAAW,CAAE,QAAQ,KAAM,SAAS,CAAC,CAAC,MAAMxL,CAAK,CAAC,CAAC,MAAM,CAAG,CAAC,CAAC,CAC/E,GAAG,0BAA2B,UAAW,CAAE,QAAQ,KAAM,SAAS,CAAC,CAAC,MAAMA,CAAK,CAAC,CAAC,IAAI,CAAG,CAAC,CAAC,CAC1F,MAAM,OAAQ,UAAW,CACxB,IAAIwB,EAAO,KACPD,EAAO,UACPoD,EAAI,QAAQnD,EAAMD,CAAI,CAAC,CAAC,MAAMvB,CAAK,EACnCwC,EAAIqhC,EAAO,MAAMriC,EAAMD,CAAI,EAC3B4M,EAAIpN,GAAS,KAAO,SAASyB,CAAC,EAAI,OAAOzB,GAAU,WAAaA,EAAM,MAAMS,EAAMD,CAAI,EAAIR,EAC1F8O,EAAI,KAAK,IAAIrN,EAAE,EAAE,CAAC,GAAKA,EAAE,EAAE,CAAC,GAAIA,EAAE,EAAE,CAAC,GAAKA,EAAE,EAAE,CAAC,EAAE,EACjDxD,EAAIwC,EAAK,OACTvC,EAAI,OAAO6wB,GAAc,WAAaA,EAAU,MAAMtuB,EAAMD,CAAI,EAAIuuB,EACpEr0B,EAAIyP,EAAYlM,EAAE,OAAOmP,CAAC,CAAC,CAAC,OAAO0B,EAAI7Q,EAAE,CAAC,EAAGC,EAAE,OAAOkP,CAAC,CAAC,CAAC,OAAO0B,EAAI5Q,EAAE,CAAC,CAAC,EAC5E,OAAO,SAAS,EAAG,CACjB,GAAIiB,IAAM,EAAG,EAAIjB,MACZ,CAAE,IAAIuF,EAAI/I,EAAEyE,CAAC,EAAG2E,EAAIgL,EAAIrL,EAAE,GAAI,EAAI,IAAI,UAAUK,EAAGsJ,EAAE,GAAK3J,EAAE,GAAKK,EAAGsJ,EAAE,GAAK3J,EAAE,GAAKK,CAAC,CAAG,CAC3FF,EAAE,KAAK,KAAMzE,CAAC,CAChB,CACF,CAAC,CACP,CAEA,SAAS,QAAQ,EAAM,EAAM,EAAO,CAClC,MAAQ,CAAC2kC,GAASrjC,EAAK,WAAc,IAAI,QAAQA,EAAMD,CAAI,CAC7D,CAEA,SAAS,QAAQ,EAAM,EAAM,CAC3B,KAAK,KAAOC,EACZ,KAAK,KAAOD,EACZ,KAAK,OAAS,EACd,KAAK,YAAc,KACnB,KAAK,OAASsiC,EAAO,MAAMriC,EAAMD,CAAI,EACrC,KAAK,KAAO,CACd,CAEA,QAAQ,UAAY,CAClB,MAAO,SAAS,EAAO,CAErB,OADIvB,IAAO,KAAK,YAAcA,GACvB,IACT,EACA,MAAO,UAAW,CAKhB,MAJI,EAAE,KAAK,SAAW,IACpB,KAAK,KAAK,UAAY,KACtB,KAAK,KAAK,OAAO,GAEZ,IACT,EACA,KAAM,SAAS,EAAK,EAAW,CAM7B,OALI,KAAK,OAASxC,IAAQ,UAAS,KAAK,MAAM,GAAKsyB,EAAU,OAAO,KAAK,MAAM,EAAE,GAC7E,KAAK,QAAUtyB,IAAQ,UAAS,KAAK,OAAO,GAAKsyB,EAAU,OAAO,KAAK,OAAO,EAAE,GAChF,KAAK,QAAUtyB,IAAQ,UAAS,KAAK,OAAO,GAAKsyB,EAAU,OAAO,KAAK,OAAO,EAAE,GACpF,KAAK,KAAK,OAASA,EACnB,KAAK,KAAK,MAAM,EACT,IACT,EACA,IAAK,UAAW,CAKd,MAJI,EAAE,KAAK,SAAW,IACpB,OAAO,KAAK,KAAK,UACjB,KAAK,KAAK,KAAK,GAEV,IACT,EACA,KAAM,SAAS,EAAM,CACnB,IAAI/oB,EAAIhN,eAAO,KAAK,IAAI,CAAC,CAAC,MAAM,EAChCunC,EAAU,KACR9gC,EACA,KAAK,KACL,IAAI,UAAUA,EAAM,CAClB,YAAa,KAAK,YAClB,OAAQ,KACR,OACA,UAAW,KAAK,KAAK,OACrB,SAAU8gC,CACZ,CAAC,EACDv6B,CACF,CACF,CACF,EAEA,SAAS,QAAQ,EAAO,GAAGxF,EAAM,CAC/B,GAAI,CAACoiB,EAAO,MAAM,KAAM,SAAS,EAAG,OACpC,IAAIhf,EAAI,QAAQ,KAAMpD,CAAI,CAAC,CAAC,MAAMvB,CAAK,EACnCE,EAAI,KAAK,OACT2E,EAAI,KAAK,IAAIu/B,EAAY,GAAI,KAAK,IAAIA,EAAY,GAAIlkC,EAAE,EAAa,GAAGikC,EAAW,MAAM,KAAM,SAAS,CAAE,CAAC,EAC3Gh2B,EAAInU,gBAAQgG,CAAK,EAIrB,GAAI2E,EAAE,OACAA,EAAE,MAAM,EAAE,CAAC,KAAOwJ,EAAE,IAAMxJ,EAAE,MAAM,EAAE,CAAC,KAAOwJ,EAAE,MAChD,EAAE,MAAM,GAAKjO,EAAE,OAAO,EAAE,MAAM,GAAKiO,CAAC,GAEtC,aAAaxJ,EAAE,KAAK,OAIjB,GAAIzE,EAAE,IAAM2E,EAAG,WAIlB,GAAE,MAAQ,CAACsJ,EAAGjO,EAAE,OAAOiO,CAAC,CAAC,EACzB,kBAAU,IAAI,EACdxJ,EAAE,MAAM,EAGV,kBAAQ3E,CAAK,EACb,EAAE,MAAQ,WAAW,WAAYykC,CAAU,EAC3C9/B,EAAE,KAAK,QAASu/B,EAAU,UAAU,MAAMhkC,EAAG2E,CAAC,EAAGF,EAAE,MAAM,GAAIA,EAAE,MAAM,EAAE,EAAGA,EAAE,OAAQm/B,CAAe,CAAC,EAEpG,SAAS,YAAa,CACpB,EAAE,MAAQ,KACVn/B,EAAE,IAAI,CACR,CACF,CAEA,SAAS,YAAY,EAAO,GAAGpD,EAAM,CACnC,GAAImgC,GAAe,CAAC/d,EAAO,MAAM,KAAM,SAAS,EAAG,OACnD,IAAImhB,EAAgB9kC,EAAM,cACtB2E,EAAI,QAAQ,KAAMpD,EAAM,EAAI,CAAC,CAAC,MAAMvB,CAAK,EACzCV,EAAIvF,eAAOiG,EAAM,IAAI,CAAC,CAAC,GAAG,iBAAkB,WAAY,EAAI,CAAC,CAAC,GAAG,eAAgB,WAAY,EAAI,EACjGmO,EAAInU,gBAAQgG,EAAO8kC,CAAa,EAChCtyB,EAAKxS,EAAM,QACX+kC,EAAK/kC,EAAM,QAEf,eAAYA,EAAM,IAAI,EACtB,gBAAcA,CAAK,EACnB,EAAE,MAAQ,CAACmO,EAAG,KAAK,OAAO,OAAOA,CAAC,CAAC,EACnC,kBAAU,IAAI,EACdxJ,EAAE,MAAM,EAER,SAAS,WAAW,EAAO,CAEzB,GADA,kBAAQ3E,CAAK,EACT,CAAC2E,EAAE,MAAO,CACZ,IAAIiF,EAAK5J,EAAM,QAAUwS,EAAI3I,EAAK7J,EAAM,QAAU+kC,EAClD,EAAE,MAAQn7B,EAAKA,EAAKC,EAAKA,EAAK83B,CAChC,CACAh9B,EAAE,MAAM3E,CAAK,CAAC,CACZ,KAAK,QAASkkC,EAAU,UAAUv/B,EAAE,KAAK,OAAQ,EAAE,MAAM,GAAK3K,gBAAQgG,EAAO8kC,CAAa,EAAGngC,EAAE,MAAM,EAAE,EAAGA,EAAE,OAAQm/B,CAAe,CAAC,CACxI,CAEA,SAAS,WAAW,EAAO,CACzBxkC,EAAE,GAAG,8BAA+B,IAAI,EACxC,QAAWU,EAAM,KAAM2E,EAAE,KAAK,EAC9B,kBAAQ3E,CAAK,EACb2E,EAAE,MAAM3E,CAAK,CAAC,CAAC,IAAI,CACrB,CACF,CAEA,SAAS,WAAW,EAAO,GAAGuB,EAAM,CAClC,GAAKoiB,EAAO,MAAM,KAAM,SAAS,EACjC,KAAIjhB,EAAK,KAAK,OACV2G,EAAKrP,gBAAQgG,EAAM,eAAiBA,EAAM,eAAe,GAAKA,EAAO,IAAI,EACzEyJ,EAAK/G,EAAG,OAAO2G,CAAE,EACjBu7B,EAAKliC,EAAG,GAAK1C,EAAM,SAAW,GAAM,GACpC2C,EAAKuhC,EAAU,UAAU,MAAMxhC,EAAIkiC,CAAE,EAAGv7B,EAAII,CAAE,EAAGo6B,EAAO,MAAM,KAAMtiC,CAAI,EAAGuiC,CAAe,EAE9F,kBAAQ9jC,CAAK,EACTqkC,EAAW,EAAG,eAAO,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,SAASA,CAAQ,CAAC,CAAC,KAAK,SAAU1hC,EAAI0G,EAAIrJ,CAAK,EACtF,eAAO,IAAI,CAAC,CAAC,KAAK,KAAK,UAAW2C,EAAI0G,EAAIrJ,CAAK,CARtC,CAShB,CAEA,SAAS,aAAa,EAAO,GAAGuB,EAAM,CACpC,GAAKoiB,EAAO,MAAM,KAAM,SAAS,EACjC,KAAIke,EAAU7hC,EAAM,QAChB5D,EAAIylC,EAAQ,OACZl9B,EAAI,QAAQ,KAAMpD,EAAMvB,EAAM,eAAe,SAAW5D,CAAC,CAAC,CAAC,MAAM4D,CAAK,EACtEglC,EAASvpC,EAAGyE,EAAGiO,EAGnB,IADA,gBAAcnO,CAAK,EACd,EAAI,EAAGvE,EAAIW,EAAG,EAAEX,EACnB,EAAIomC,EAAQpmC,GAAI,EAAIzB,gBAAQkG,EAAG,IAAI,EACnC,EAAI,CAACiO,EAAG,KAAK,OAAO,OAAOA,CAAC,EAAGjO,EAAE,UAAU,EACtCyE,EAAE,OACE,CAACA,EAAE,QAAUA,EAAE,OAAO,KAAOwJ,EAAE,KAAI,EAAE,OAASA,EAAG,EAAE,KAAO,IADpD,EAAE,OAASA,EAAG,EAAU,GAAM,EAAE,KAAO,EAAI,CAAC,CAACm2B,GAI9D,AAAmBA,IAAgB,aAAaA,CAAa,EAEzDU,IACErgC,EAAE,KAAO,IAAG,EAAawJ,EAAE,GAAI,EAAgB,WAAW,UAAW,CAAE,EAAgB,IAAM,EAAGq2B,CAAU,GAC9G,kBAAU,IAAI,EACd7/B,EAAE,MAAM,EAlBU,CAoBtB,CAEA,SAAS,WAAW,EAAO,GAAGpD,EAAM,CAClC,GAAK,KAAK,UACV,KAAIoD,EAAI,QAAQ,KAAMpD,CAAI,CAAC,CAAC,MAAMvB,CAAK,EACnC6hC,EAAU7hC,EAAM,eAChB5D,EAAIylC,EAAQ,OAAQpmC,EAAGyE,EAAGiO,EAAG3J,EAGjC,IADA,kBAAQxE,CAAK,EACR,EAAI,EAAGvE,EAAIW,EAAG,EAAEX,EACnB,EAAIomC,EAAQpmC,GAAI,EAAIzB,gBAAQkG,EAAG,IAAI,EAC/ByE,EAAE,QAAUA,EAAE,OAAO,KAAOzE,EAAE,WAAY,EAAE,OAAO,GAAKiO,EACnDxJ,EAAE,QAAUA,EAAE,OAAO,KAAOzE,EAAE,aAAY,EAAE,OAAO,GAAKiO,GAGnE,GADA,EAAIxJ,EAAE,KAAK,OACPA,EAAE,OAAQ,CACZ,IAAI0E,EAAK1E,EAAE,OAAO,GAAIsgC,EAAKtgC,EAAE,OAAO,GAChC8E,EAAK9E,EAAE,OAAO,GAAIugC,EAAKvgC,EAAE,OAAO,GAChCwgC,GAAM,EAAK17B,EAAG,GAAKJ,EAAG,IAAM87B,GAAM,EAAK17B,EAAG,GAAKJ,EAAG,IAAM87B,EACxDC,GAAM,EAAKF,EAAG,GAAKD,EAAG,IAAMG,GAAM,EAAKF,EAAG,GAAKD,EAAG,IAAMG,EAC5D,EAAI,MAAMllC,EAAG,KAAK,KAAKilC,EAAKC,CAAE,CAAC,EAC/B,EAAI,EAAE/7B,EAAG,GAAKI,EAAG,IAAM,GAAIJ,EAAG,GAAKI,EAAG,IAAM,CAAC,EAC7C,EAAI,EAAEw7B,EAAG,GAAKC,EAAG,IAAM,GAAID,EAAG,GAAKC,EAAG,IAAM,CAAC,CAC/C,MACK,GAAIvgC,EAAE,OAAQ,EAAIA,EAAE,OAAO,GAAI,EAAIA,EAAE,OAAO,QAC5C,OAELA,EAAE,KAAK,QAASu/B,EAAU,UAAUhkC,EAAGiO,EAAG3J,CAAC,EAAGG,EAAE,OAAQm/B,CAAe,CAAC,CAvBjC,CAwBzC,CAEA,SAAS,WAAW,EAAO,GAAGviC,EAAM,CAClC,GAAK,KAAK,UACV,KAAIoD,EAAI,QAAQ,KAAMpD,CAAI,CAAC,CAAC,MAAMvB,CAAK,EACnC6hC,EAAU7hC,EAAM,eAChB5D,EAAIylC,EAAQ,OAAQpmC,EAAGyE,EAK3B,IAHA,gBAAcF,CAAK,EACf0hC,GAAa,aAAaA,CAAW,EACzC,EAAc,WAAW,UAAW,CAAE,EAAc,IAAM,EAAG8C,CAAU,EAClE,EAAI,EAAG/oC,EAAIW,EAAG,EAAEX,EACnB,EAAIomC,EAAQpmC,GACRkJ,EAAE,QAAUA,EAAE,OAAO,KAAOzE,EAAE,WAAY,OAAOyE,EAAE,OAC9CA,EAAE,QAAUA,EAAE,OAAO,KAAOzE,EAAE,YAAY,OAAOyE,EAAE,OAG9D,GADIA,EAAE,QAAU,CAACA,EAAE,SAAQ,EAAE,OAASA,EAAE,OAAQ,OAAOA,EAAE,QACrDA,EAAE,OAAQ,EAAE,OAAO,GAAK,KAAK,OAAO,OAAOA,EAAE,OAAO,EAAE,OAIxD,GAFAA,EAAE,IAAI,EAEFA,EAAE,OAAS,IACb,EAAI3K,gBAAQkG,EAAG,IAAI,EACf,KAAK,MAAMqkC,EAAW,GAAKrkC,EAAE,GAAIqkC,EAAW,GAAKrkC,EAAE,EAAE,EAAIwkC,GAAa,CACxE,IAAIv2B,EAAIpU,eAAO,IAAI,CAAC,CAAC,GAAG,eAAe,EACnCoU,GAAGA,EAAE,MAAM,KAAM,SAAS,CAChC,CAtBmC,CAyBzC,CAmDA,MAjDA,MAAK,WAAa,SAAS,EAAG,CAC5B,OAAO,UAAU,QAAU,EAAa,OAAOhN,GAAM,WAAaA,EAAIlH,GAAS,CAACkH,CAAC,EAAG,MAAQgjC,CAC9F,EAEA,KAAK,OAAS,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAS,OAAOhjC,GAAM,WAAaA,EAAIlH,GAAS,CAAC,CAACkH,CAAC,EAAG,MAAQwiB,CAC3F,EAEA,KAAK,UAAY,SAAS,EAAG,CAC3B,OAAO,UAAU,QAAU,EAAY,OAAOxiB,GAAM,WAAaA,EAAIlH,GAAS,CAAC,CAACkH,CAAC,EAAG,MAAQigC,CAC9F,EAEA,KAAK,OAAS,SAAS,EAAG,CACxB,OAAO,UAAU,QAAU,EAAS,OAAOjgC,GAAM,WAAaA,EAAIlH,GAAS,CAAC,CAAC,CAACkH,EAAE,EAAE,CAAC,GAAI,CAACA,EAAE,EAAE,CAAC,EAAE,EAAG,CAAC,CAACA,EAAE,EAAE,CAAC,GAAI,CAACA,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAG,MAAQ0iC,CACpI,EAEA,KAAK,YAAc,SAAS,EAAG,CAC7B,OAAO,UAAU,QAAU,EAAY,GAAK,CAAC1iC,EAAE,GAAI,EAAY,GAAK,CAACA,EAAE,GAAI,MAAQ,CAACijC,EAAY,GAAIA,EAAY,EAAE,CACpH,EAEA,KAAK,gBAAkB,SAAS,EAAG,CACjC,OAAO,UAAU,QAAU,EAAgB,EAAE,CAAC,GAAK,CAACjjC,EAAE,EAAE,CAAC,GAAI,EAAgB,EAAE,CAAC,GAAK,CAACA,EAAE,EAAE,CAAC,GAAI,EAAgB,EAAE,CAAC,GAAK,CAACA,EAAE,EAAE,CAAC,GAAI,EAAgB,EAAE,CAAC,GAAK,CAACA,EAAE,EAAE,CAAC,GAAI,MAAQ,CAAC,CAAC2iC,EAAgB,EAAE,CAAC,GAAIA,EAAgB,EAAE,CAAC,EAAE,EAAG,CAACA,EAAgB,EAAE,CAAC,GAAIA,EAAgB,EAAE,CAAC,EAAE,CAAC,CAC5Q,EAEA,KAAK,UAAY,SAAS,EAAG,CAC3B,OAAO,UAAU,QAAU,EAAY3iC,EAAG,MAAQ+iC,CACpD,EAEA,KAAK,SAAW,SAAS,EAAG,CAC1B,OAAO,UAAU,QAAU,EAAW,CAAC/iC,EAAG,MAAQkjC,CACpD,EAEA,KAAK,YAAc,SAAS,EAAG,CAC7B,OAAO,UAAU,QAAU,EAAcljC,EAAG,MAAQ+J,CACtD,EAEA,KAAK,GAAK,UAAW,CACnB,IAAIxN,EAAQ4jC,EAAU,GAAG,MAAMA,EAAW,SAAS,EACnD,OAAO5jC,IAAU4jC,EAAY,KAAO5jC,CACtC,EAEA,KAAK,cAAgB,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,GAAkB,EAAI,CAACyD,GAAKA,EAAG,MAAQ,KAAK,KAAKwgC,CAAc,CAC5F,EAEA,KAAK,YAAc,SAAS,EAAG,CAC7B,OAAO,UAAU,QAAU,EAAc,CAACxgC,EAAG,MAAQujC,CACvD,EAEO,IACT,CCvbA,IAAa,OAAb,cAA4B,UAAW,CACnC,SAAmB,GACnB,GAEA,aAAc,CACV,MAAM,EACN,KAAK,KAAO,GAChB,CAEA,MAAM,EAAsB,EAAS,CACjC,MAAM,MAAM3d,EAASxT,CAAO,EAC5B,IAAMjV,EAAU,KAChB,KAAK,GAAK,KAAK,SACV,KAAK,OAAQ,GAAG,CAAC,CACjB,GAAG,QAAS,SAAU,EAAO,CAC1BA,EAAQ,MAAM,EACd0B,EAAM,eAAe,CACzB,CAAC,CAAC,CACD,GAAG,UAAW,SAA6B,EAAO,EAC3CA,EAAM,MAAQ,KAAOA,EAAM,MAAQ,YAAcA,EAAM,OAAS,SAAWA,EAAM,MAAQ,WACzF,KAAK,MAAM,EACXA,EAAM,eAAe,EAE7B,CAAC,CAAC,CACD,GAAG,YAAa,KAAK,SAAS,CAAC,CAC/B,GAAG,WAAY,KAAK,QAAQ,CAAC,CAC7B,OAAO,GAAG,CAEnB,CAEA,OAAO,EAAsB,EAAS,CAClC,MAAM,OAAO+mB,EAASxT,CAAO,EAC7BA,EACK,QAAQ,WAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CACpC,KAAK,QAAS,KAAK,QAAQ,CAAC,EAEjC,KAAK,GAAG,KAAK,QAAS,MAAM,SAAS,KAAK,OAAO,CAAC,EAAE,aAAa,CACrE,CAGA,OAAQ,CACR,CAEA,UAAU,EAAG,EAAK,EAAQ,CAC1B,CAEA,SAAS,EAAG,EAAK,EAAQ,CACzB,CAIA,QAAQ,EAA6B,CAGjC,OAFK,UAAU,QACf,KAAK,SAAWpS,EACT,MAFuB,KAAK,QAGvC,CACJ,EACA,OAAO,UAAU,QAAU,iBAO3B,OAAO,UAAU,QAAQ,SAAU,GAAI,SAAU,mBAAmB,EACpE,OAAO,UAAU,QAAQ,UAAW,GAAI,SAAU,2CAA2C,EAG7F,IAAa,aAAb,cAAkC,MAAO,CAErC,MAAM,EAAsB,EAAS,CACjC,MAAM,MAAM4lB,EAASxT,CAAO,CAChC,CAEA,OAAO,EAAsB,EAAS,CAClC,MAAM,OAAOwT,EAASxT,CAAO,EAC7BA,EAAQ,QAAQ,WAAY,KAAK,SAAS,CAAC,CAC/C,CACJ,EACA,aAAa,UAAU,QAAU,uBAKjC,aAAa,UAAU,QAAQ,WAAY,GAAO,SAAS,EAG3D,IAAa,aAAb,cAAkC,YAAa,CAE3C,MAAM,EAAsB,EAAS,CACjCA,EAAQ,GAAG,YAAc,GAAU,CAC/B,KACK,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAC1B,OAAO,EAEZvT,EAAM,eAAe,CACzB,CAAC,EACD,MAAM,MAAM+mB,EAASxT,CAAO,CAChC,CACJ,EACA,aAAa,UAAU,QAAU,uBAGjC,IAAa,OAAb,cAA4B,UAAW,CAEnC,MAAM,EAAsB,EAAS,CACjC,MAAM,MAAMwT,EAASxT,CAAO,EAC5BA,EACK,KAAK,QAAS,KAAK,MAAM,EAAI,eAAiB,QAAQ,CAAC,CACvD,KAAK,OAAQ,GAAG,CAAC,CACjB,OAAO,GAAG,CAEnB,CACJ,EACA,OAAO,UAAU,QAAU,iBAM3B,OAAO,UAAU,QAAQ,QAAS,GAAM,SAAS,EAEjD,IAAa,eAAb,cAAoC,UAAW,CAC3C,SAAmB,GAEnB,aAAc,CACV,MAAM,EACN,KAAK,KAAO,QAChB,CAIA,QAAQ,EAA6B,CAGjC,OAFK,UAAU,QACf,KAAK,SAAWpS,EACT,MAFuB,KAAK,QAGvC,CAEA,MAAM,EAA4B,EAAS,CACvC,MAAM,MAAM4lB,EAASxT,CAAO,EAC5B,IAAMjV,EAAU,KAChBiV,EAAQ,GAAG,SAAU,SAAU,EAAG,CAC9B,IAAM1M,EAASvI,EAAQ,OAAO,EAC9B,IAAK,IAAMd,KAAOc,EAAQ,OAAO,EAC7B,GAAI,KAAK,QAAUuI,EAAOrJ,GAAM,CAC5Bc,EAAQ,SAASd,CAAG,EACpB,KACJ,CAEJc,EAAQ,MAAM,KAAK,KAAK,CAC5B,CAAC,CACL,CAEA,OAAO,EAAsB,EAAS,CAClC,MAAM,OAAOyoB,EAASxT,CAAO,EAC7BA,EACK,QAAQ,WAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CACpC,KAAK,QAAS,KAAK,QAAQ,CAAC,EAGjC,IAAM1M,EAAS,KAAK,OAAO,EAErBvG,EAAUiT,EAAQ,UAAU,yBAAyB,CAAC,CAAC,KAAK,OAAO,KAAK1M,CAAM,CAAC,EAC/Ew+B,EAAe/kC,EAAQ,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAChD,KAAK,QAAS,wBAAwB,CAAC,CACvC,MAAMA,CAAO,CAAC,CACd,KAAK,QAAS,GAAKuG,EAAOnC,EAAE,CAAC,CAC7B,KAAK,WAAY,GAAKA,IAAM,KAAK,SAAS,EAAI,WAAa,IAAI,CAAC,CAChE,KAAK,GAAKA,CAAC,EAEhBpE,EAAQ,KAAK,CAAC,CAAC,OAAO,EACtB+kC,EAAa,MAAM,CACvB,CAGA,MAAM,EAAO,CACb,CAEA,UAAU,EAAG,EAAK,EAAQ,CAC1B,CAEA,SAAS,EAAG,EAAK,EAAQ,CACzB,CACJ,EACA,eAAe,UAAU,QAAU,yBASnC,eAAe,UAAU,QAAQ,SAAU,CAAC,EAAG,SAAU,eAAe,EACxE,eAAe,UAAU,QAAQ,WAAY,GAAI,SAAU,eAAe,EAC1E,eAAe,UAAU,QAAQ,UAAW,GAAI,SAAU,2CAA2C,EAGrG,IAAa,QAAb,cAA6B,UAAW,CACpC,YACA,SAAqB,CAAC,EAEtB,aAAc,CACV,MAAM,CACV,CAEA,MAAM,EAAS,EAAS,CACpB,MAAM,MAAMte,EAASxT,CAAO,EAC5B,KAAK,YAAcA,EAAQ,OAAO,KAAK,CAAC,CACnC,KAAK,QAAS,UAAU,CAEjC,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAOwT,EAASxT,CAAO,EAE7B,IAAI+xB,EAAU,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAU,KAAK,cAAc,CAAC,CAAC,QAAQpD,CAAM,EAAI,CAAC,EACtF,EAAUoD,EAAQ,QAAQ,EAAM,EAAM,KAC9BniB,aAAgB,SACX+P,EAAK,SAAW,GAAKvO,IAAQ2gB,EAAQ,OAAS,GAExCA,EAAQ3gB,EAAM,aAAc,SAI3CuO,EAAK,KAAK/P,CAAI,EACP+P,GACR,CAAC,CAAC,EACL,IAAMqS,EAAQ,KAAK,YAAY,UAAU,gBAAgB,CAAC,CAAC,KAAKD,EAAU,GAAcv+B,EAAE,GAAG,CAAC,EAC9Fw+B,EAAM,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CACtB,KAAK,QAAS,eAAe,CAAC,CAC9B,KAAK,SAA6B,EAAW,CAC1Cx+B,EAAE,OAAO,IAAI,CACjB,CAAC,CAAC,CACD,MAAMw+B,CAAK,CAAC,CACZ,KAAK,SAAU,EAAW,CACvBx+B,EAAE,OAAO,CACb,CAAC,EAELw+B,EAAM,KAAK,CAAC,CACP,KAAK,SAAU,EAAW,CACvBx+B,EAAE,OAAO,IAAI,CACjB,CAAC,CAAC,CACD,OAAO,EAEZw+B,EAAM,MAAM,CAChB,CAEA,KAAK,EAAS,EAAS,CACnB,KAAK,QAAQ,CAAC,CAAC,QAAQ,GAAKtmC,EAAE,OAAO,IAAI,CAAC,EAC1C,MAAM,KAAK8nB,EAASxT,CAAO,CAC/B,CACJ,EACA,QAAQ,UAAU,QAAU,kBAQ5B,QAAQ,UAAU,QAAQ,UAAW,CAAC,EAAG,cAAe,KAAM,CAAE,SAAU,EAAK,CAAC,EAChF,QAAQ,UAAU,QAAQ,gBAAiB,CAAC,EAAG,cAAe,KAAM,CAAE,SAAU,EAAK,CAAC,EAGtF,IAAaiyB,GAAb,MAAa,wBAAwB,YAAa,CAC9C,OAEA,MAAM,EAAsB,EAAS,CACjCjyB,EAAQ,GAAG,YAAc,GAAU,CAC/B,KAAK,SAAS,EAAI,CAAC,CAAC,OAAO,EAC3BvT,EAAM,eAAe,CACzB,CAAC,EACD,MAAM,MAAM+mB,EAASxT,CAAO,CAChC,CAIA,SAAS,EAA6B,CAClC,IAAMqQ,EAAS,MAAM,SAAS,MAAM,KAAM,SAAS,EAKnD,OAJIziB,GAAK,KAAK,SACV,KAAK,OAAO,QAAQ,CAAC,CAAC,OAAO,GAAMskC,IAAO,MAAQA,aAAc,eAAe,CAAC,CAAC,QAAS,GAAwBA,EAAG,SAAS,EAAK,CAAC,CAAC,OAAO,CAAC,EAC7I,KAAK,OAAO,SAAS,IAAI,GAEtB7hB,CACX,CACJ,EACA,GAAgB,UAAU,QAAU,0BAEpC,IAAa,aAAb,cAAkC,OAAQ,CAItC,QAAQ,EAA6E,CACjF,IAAMA,EAAS,MAAM,QAAQ,MAAM,KAAM,SAAS,EAMlD,OALI,UAAU,QACVziB,EAAE,OAAO,GAAKlC,aAAaumC,EAAe,CAAC,CAAC,QAAS,GAAwB,CACzE,EAAG,OAAS,IAChB,CAAC,EAEE5hB,CACX,CAGA,SAAS,EAAsB,CAC/B,CACJ,EACA,aAAa,UAAU,QAAU,uBAGjC,IAAa,SAAb,cAA8B,OAAQ,CAElC,UACA,cACA,cACA,oBAEA,aAAc,CACV,MAAM,CACV,CAEA,MAAM,EAAS,EAAS,CACpB,KAAK,UAAYrQ,EAAQ,OAAO,KAAK,CAAC,CACjC,KAAK,QAAS,aAAa,CAAC,CAC5B,MAAM,YAAa,KAAK,EAE7B,KAAK,cAAgB,KAAK,UAAU,OAAO,KAAK,CAAC,CAC5C,KAAK,QAAS,YAAY,CAAC,CAC3B,MAAM,cAAe,KAAK,cAAc,CAAC,CAAC,CAC1C,MAAM,YAAa,GAAG,KAAK,kBAAkB,EAAE,GAAG,CAAC,CACnD,MAAM,QAAS,GAAG,KAAK,kBAAkB,EAAE,GAAG,EAEnD,KAAK,UAAU,OAAO,KAAK,CAAC,CACvB,KAAK,QAAS,YAAY,EAE/B,KAAK,cAAgB,KAAK,UAAU,OAAO,KAAK,CAAC,CAC5C,KAAK,QAAS,YAAY,CAAC,CAC3B,MAAM,cAAe,KAAK,UAAU,CAAC,CAAC,CACtC,MAAM,YAAa,GAAG,KAAK,cAAc,EAAE,GAAG,EAEnD,KAAK,oBAAsB,KAAK,UAAU,OAAO,KAAK,CAAC,CAClD,KAAK,QAAS,kBAAkB,CAAC,CACjC,MAAM,cAAe,KAAK,gBAAgB,CAAC,EAGhD,MAAM,MAAMwT,EAASxT,CAAO,CAChC,CAEA,OAAO,EAAS,EAAS,CACrB,KAAK,cACA,KAAK,KAAK,UAAU,CAAC,CAAC,CACtB,MAAM,UAAW,KAAK,UAAU,IAAM,GAAsB,OAAjB,cAAuB,EAEvE,KAAK,cACA,KAAK,KAAK,MAAM,CAAC,CAAC,CAClB,KAAK,QAAS,KAAK,MAAM,CAAC,EAE/B,KAAK,oBACA,MAAM,UAAW,KAAK,mBAAmB,EAAI,QAAU,MAAM,CAAC,CAC9D,MAAM,YAAa,KAAK,mBAAmB,EAAI,GAAG,KAAK,oBAAoB,EAAE,IAAM,IAAI,CAAC,CACxF,MAAM,cAAe,KAAK,mBAAmB,EAAI,GAAG,KAAK,oBAAoB,EAAE,IAAM,IAAI,CAAC,CAC1F,KAAK,KAAK,YAAY,CAAC,EAG5B,MAAM,OAAOwT,EAASxT,CAAO,CACjC,CACJ,EACA,SAAS,UAAU,QAAU,mBAuB7B,SAAS,UAAU,QAAQ,YAAa,GAAI,SAAU,WAAW,EACjE,SAAS,UAAU,QAAQ,gBAAiB,GAAI,SAAU,kBAAkB,EAC5E,SAAS,UAAU,QAAQ,oBAAqB,GAAI,SAAU,yBAAyB,EACvF,SAAS,UAAU,QAAQ,QAAS,GAAI,SAAU,YAAY,EAC9D,SAAS,UAAU,QAAQ,YAAa,GAAI,SAAU,mBAAmB,EACzE,SAAS,UAAU,QAAQ,gBAAiB,GAAI,SAAU,0BAA0B,EACpF,SAAS,UAAU,QAAQ,cAAe,KAAM,SAAU,mBAAoB,KAAM,CAAE,SAAU,EAAK,CAAC,EACtG,SAAS,UAAU,QAAQ,kBAAmB,GAAI,SAAU,yBAAyB,EACrF,SAAS,UAAU,QAAQ,sBAAuB,GAAI,SAAU,gCAAgC,EC3YhG,IAAa,cAAb,cAAmC,SAAU,CAEzC,eAEA,UACA,WAAuB,EACvB,eAA2B,CAAC,EAAG,CAAC,EAChC,UACA,UACA,OACA,cAEA,sBACA,kBACA,eAA4D,KAE5D,mBAA+B,GAE/B,wBAAoC,IAAI,aAAa,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,QAAQ,mBAAmB,CAAC,CACpG,GAAG,YAAe,CACX,KAAK,wBAAwB,SAAS,GACtC,KAAK,UAAU,kBAAkB,EAErC,KAAK,cAAc,CACvB,CAAC,EAGL,YAAwB,IAAI,aAAa,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,QAAQ,MAAM,CAAC,CAChF,GAAG,YAAe,CACX,KAAK,YAAY,SAAS,GAC1B,KAAK,UAAU,MAAM,EAEzB,KAAK,cAAc,CACvB,CAAC,EAGL,SAAW,IAAI,QAAQ,CAAC,CACnB,QAAQ,CACL,KAAK,wBACL,KAAK,YACL,IAAI,OAAO,CAAC,CAAC,MAAM,EAAK,EACxB,IAAI,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,QAAQ,aAAa,CAAC,CACtD,GAAG,YAAe,CACf,KAAK,UAAU,CACnB,CAAC,EACL,IAAI,OAAO,CAAC,CAAC,MAAM,EAAK,EACxB,IAAI,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,SAAS,CAAC,CAC5C,GAAG,YAAe,CACf,KAAK,SAAS,CAClB,CAAC,EACL,IAAI,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,QAAQ,UAAU,CAAC,CAC9C,GAAG,YAAe,CACf,KAAK,UAAU,CACnB,CAAC,CACT,CAAC,EAGL,aAAc,CACV,MAAM,EAEN,KAAK,UAAYrZ,eAAO,CAAC,CACpB,YAAY,CAAC,IAAM,EAAE,CAAC,CAAC,CACvB,GAAG,WAAa,GAAU,CACvB,KAAK,SAAS8F,CAAK,CACvB,CAAC,CAET,CAEA,cAAc,EAAa,CACvB,IAAI0lC,EAAW1qC,EAEf,KAAO0qC,EAAS,cAAgB,MAAQA,EAAS,YAAc,MAC3D,EAAWA,EAAS,WAGxB,IAAMlV,EAAY,CAAC,EACblc,EAASoxB,EAAS,aAAa,EAC/BC,EAAQD,EAAS,QAAQ,EACzBj2B,EAAQk2B,EAAM,MACdj2B,EAASi2B,EAAM,OACfnpC,EAAImpC,EAAM,EACV//B,EAAI+/B,EAAM,EACV5kC,EAAQ,KAAK,oBAAoB,KAAK,CAAC,CAAC,eAAe,EAqB7D,MApBA,GAAM,EAAIvE,EACV,EAAM,EAAIoJ,EAEV,EAAK,GAAK7E,EAAM,gBAAgBuT,CAAM,EACtC,EAAM,GAAK7E,EACX,EAAK,GAAK1O,EAAM,gBAAgBuT,CAAM,EACtC,EAAM,GAAK5E,EACX,EAAK,GAAK3O,EAAM,gBAAgBuT,CAAM,EACtC,EAAM,GAAK7E,EACX,EAAK,GAAK1O,EAAM,gBAAgBuT,CAAM,EACtC,EAAM,GAAK5E,EAAS,EACpB,EAAK,EAAI3O,EAAM,gBAAgBuT,CAAM,EACrC,EAAM,GAAK7E,EACX,EAAK,EAAI1O,EAAM,gBAAgBuT,CAAM,EACrC,EAAM,GAAK7E,EAAQ,EACnB,EAAM,GAAKC,EAAS,EACpB,EAAK,EAAI3O,EAAM,gBAAgBuT,CAAM,EACrC,EAAM,GAAK5E,EACX,EAAK,EAAI3O,EAAM,gBAAgBuT,CAAM,EAE9B,CACH,EAAGkc,EAAK,GAAG,EACX,EAAGA,EAAK,GAAG,EACX,MAAOA,EAAK,GAAG,EAAIA,EAAK,GAAG,EAC3B,OAAQA,EAAK,GAAG,EAAIA,EAAK,GAAG,CAChC,CACJ,CAEA,WAAoB,CAChB,OAAO,KAAK,UAChB,CAEA,eAA0B,CACtB,OAAO,KAAK,cAChB,CAEA,WAAW,EAAa,CACpB,KAAK,UAAU,YAAYvoB,CAAK,CACpC,CAEA,OAAO,EAAY,EAAQ,EAAqB,IAAK,CACjD,IAAyB,KAAK,eAC9B,IAAiB,KAAK,WACtB,EAAqBopB,IAAuB,IAAA,GAAY,KAAK,aAAa,EAAIA,EAE1E,KAAK,WACL,KAAK,UAAU,WAAW,CAAC,CAAC,SAASA,CAAkB,CAAC,CACnD,KAAK,KAAK,UAAU,UAAWl3B,GAAe,UAAUyrC,EAAU,GAAIA,EAAU,EAAE,CAAC,CAAC,MAAM7R,CAAK,CAAC,CAG7G,CAEA,UAAW,CACP,KAAK,UAAU,WAAW,CAAC,CACtB,KAAK,KAAK,UAAU,QAAS,IAAI,CAE1C,CAEA,WAAY,CACR,KAAK,UAAU,WAAW,CAAC,CACtB,KAAK,KAAK,UAAU,QAAS,EAAI,IAAI,CAE9C,CAEA,aAAa,EAAM,EAAqB,CACpC,GAAIvD,EAAK,OAASA,EAAK,OAAQ,CAC3B,IAAMh0B,EAAIg0B,EAAK,EAAIA,EAAK,MAAQ,EAC1B5qB,EAAI4qB,EAAK,EAAIA,EAAK,OAAS,EAC3B/gB,EAAQ,KAAK,MAAM,EACnBC,EAAS,KAAK,OAAO,EAErBqkB,EAAQ,KAAK,UAAU,EACvB6R,EAAY,CAACn2B,EAAQ,EAAIskB,EAAQv3B,EAAGkT,EAAS,EAAIqkB,EAAQnuB,CAAC,EAChE,KAAK,OAAOggC,EAAW7R,EAAO1C,CAAkB,CACpD,CACJ,CAEA,sBAAuB,CACnB,OAAO,KAAK,eAAe,KAAK,CAAC,CAAC,QAAQ,CAC9C,CAEA,eAAe,EAAM,EAAqB,GAAO,EAAgB,CAC7D,IAAM5hB,EAAQ,KAAK,MAAM,EACnBC,EAAS,KAAK,OAAO,EAC3B,GAAI8gB,EAAK,OAASA,EAAK,OAAQ,CAC3B,IAAMh0B,EAAIg0B,EAAK,EAAIA,EAAK,MAAQ,EAC1B5qB,EAAI4qB,EAAK,EAAIA,EAAK,OAAS,EAC3B5mB,EAAK4mB,EAAK,MACV3mB,EAAK2mB,EAAK,OAEZqV,EAAW9R,GAAS,GAAK+R,EAAYl8B,EAAK6F,EAAQ,KAAK,IAAI7F,EAAK6F,EAAO5F,EAAK6F,CAAM,GAKtF,OAJI,KAAK,sBAAsB,GAAKm2B,EAAW,KAAK,eAAe,IAC/D,EAAW,KAAK,eAAe,GAG5B,CAAE,UAAA,CADUp2B,EAAQ,EAAIo2B,EAAWrpC,EAAGkT,EAAS,EAAIm2B,EAAWjgC,CAC5D,EAAW,UAAS,CACjC,CACA,MAAO,CAAE,UAAW,CAAC6J,EAAQ,EAAGC,EAAS,CAAC,EAAG,SAAUqkB,CAAM,CACjE,CAEA,WAAW,EAAM,EAAqB,EAAqB,GAAO,EAAgB,CAC9E,GAAM,CAAE,YAAW,YAAa,KAAK,eAAevD,EAAMsV,EAAW/R,CAAK,EAC1E,KAAK,OAAO6R,EAAWC,EAAUxU,CAAkB,CACvD,CAEA,YAAY,EAAO,EAAqB,CACpC,GAAI,KAAK,eAAgB,CACrB,IAAMb,EAAO,KAAK,qBAAqB,EACvC,KAAK,WAAWA,EAAMa,EAAoB,IAAA,GAAW0C,CAAK,CAC9D,CACJ,CAEA,YAAY,EAAqB,CAC7B,GAAI,KAAK,eAAgB,CACrB,IAAMvD,EAAO,KAAK,qBAAqB,EACvC,KAAK,WAAWA,EAAMa,EAAoB,EAAI,CAClD,CACJ,CAEA,UAAU,EAAqB,CAC3B,GAAI,KAAK,eAAgB,CACrB,IAAMb,EAAO,KAAK,qBAAqB,EACvC,KAAK,WAAWA,EAAMa,CAAkB,CAC5C,CACJ,CAEA,SAAS,EAAO,CACRrxB,GAAO,WAAa,KAAK,UAAU,IAAM,QACzC,KAAK,OAAOA,EAAM,SAAS,CAEnC,CAEA,OAAO,EAAW,CACd,KAAK,WAAa8vB,EAAU,EAC5B,KAAK,eAAiB,CAACA,EAAU,EAAGA,EAAU,CAAC,EAC/C,KAAK,OAAO,KAAK,YAAaA,CAAS,CAC3C,CAEA,eAAgB,CACZ,KAAK,wBAAwB,SAAS,KAAK,UAAU,IAAM,kBAAkB,CAAC,CAAC,OAAO,EACtF,KAAK,YAAY,SAAS,KAAK,UAAU,IAAM,MAAM,CAAC,CAAC,OAAO,CAClE,CAEA,0BAA0B,EAAO,CAC7B,IAAM3hB,EAAI/T,gBAAU4F,EAAO,KAAK,sBAAsB,KAAK,CAAC,EAC5D,KAAK,eAAiB,CAAE,EAAGmO,EAAE,GAAI,EAAGA,EAAE,EAAG,EACzC,KAAK,kBAAoB,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,CAAC,CACjD,KAAK,QAAS,kBAAkB,CAAC,CACjC,KAAK,KAAM,CAAC,CAAC,CACb,KAAK,KAAM,CAAC,CAAC,CACb,KAAK,IAAKA,EAAE,EAAE,CAAC,CACf,KAAK,IAAKA,EAAE,EAAE,CAAC,CACf,KAAK,QAAS,CAAC,CAAC,CAChB,KAAK,SAAU,CAAC,EAErB,KAAK,sBAAsB,CAC/B,CAEA,0BAA0B,EAAO,CAC7B,GAAI,KAAK,mBAAqB,KAAK,eAAgB,CAC/C,IAAMA,EAAI/T,gBAAU4F,EAAO,KAAK,sBAAsB,KAAK,CAAC,EAEtDxD,EAAI,KAAK,IAAI2R,EAAE,GAAI,KAAK,eAAe,CAAC,EACxCvI,EAAI,KAAK,IAAIuI,EAAE,GAAI,KAAK,eAAe,CAAC,EACxC0B,EAAI,KAAK,IAAI1B,EAAE,GAAK,KAAK,eAAe,CAAC,EACzCpJ,EAAI,KAAK,IAAIoJ,EAAE,GAAK,KAAK,eAAe,CAAC,EAE/C,KAAK,kBACA,KAAK,IAAK3R,CAAC,CAAC,CACZ,KAAK,IAAKoJ,CAAC,CAAC,CACZ,KAAK,QAASiK,CAAC,CAAC,CAChB,KAAK,SAAU9K,CAAC,EAGrB,KAAK,uBAAuB,CACxB,GAAIvI,EAAI,KAAK,eAAe,IAAM,KAAK,WACvC,GAAIoJ,EAAI,KAAK,eAAe,IAAM,KAAK,WACvC,MAAOiK,EAAI,KAAK,WAChB,OAAQ9K,EAAI,KAAK,UACrB,CAAC,CACL,CACJ,CAEA,yBAA0B,CAClB,KAAK,oBACL,KAAK,kBAAkB,OAAO,EAC9B,OAAO,KAAK,kBACR,KAAK,qBACL,KAAK,mBAAqB,GAC1B,KAAK,UAAU,MAAM,EACrB,KAAK,cAAc,GAEvB,KAAK,oBAAoB,EAEjC,CAEA,MAAM,EAAS,EAAU,CACrB,MAAM,MAAMgiB,EAASib,CAAQ,EAC7BA,EAAS,MAAM,cAAe,MAAM,EAEpC,KAAK,sBAAwBA,EAAS,OAAO,MAAM,CAAC,CAC/C,KAAK,QAAS,gBAAgB,CAAC,CAC/B,KAAK,QAAS,KAAK,MAAM,CAAC,CAAC,CAC3B,KAAK,SAAU,KAAK,OAAO,CAAC,CAAC,CAC7B,MAAM,OAAQ,aAAa,CAAC,CAC5B,MAAM,SAAU,WAAW,CAAC,CAC5B,GAAG,YAAc,GAAU,CACxB,KAAK,0BAA0BhiC,CAAK,CACxC,CAAC,CAAC,CACD,GAAG,YAAc,GAAU,CACxB,KAAK,0BAA0BA,CAAK,CACxC,CAAC,CAAC,CACD,GAAG,uBAA0B,CAC1B,KAAK,wBAAwB,CACjC,CAAC,EAGL,KAAK,UAAYgiC,EAAS,OAAO,GAAG,EAEpC,KAAK,UAAY,KAAK,UAAU,OAAO,MAAM,CAAC,CACzC,KAAK,QAAS,gBAAgB,CAAC,CAC/B,KAAK,QAAS,KAAK,MAAM,CAAC,CAAC,CAC3B,KAAK,SAAU,KAAK,OAAO,CAAC,CAAC,CAC7B,MAAM,OAAQ,aAAa,CAAC,CAC5B,GAAG,YAAc,GAAU,CACpBhiC,EAAM,UAAY,KAAK,UAAU,IAAM,SACvCA,EAAM,gBAAgB,EACtB,KAAK,UAAU,kBAAkB,EACjC,KAAK,mBAAqB,GAC1B,KAAK,0BAA0BA,CAAK,EAE5C,CAAC,EAEL,KAAK,OAAS,KAAK,UAAU,OAAO,GAAG,EACvC,KAAK,eAAiB,KAAK,OAAO,OAAO,GAAG,EAExC,KAAK,gBAAkB,KAAK,SAAS,IACjC,KAAK,SAAS,EACd,KAAK,UAAU,KAAK,KAAK,SAAS,EAElC,KAAK,UAAU,GAAG,QAAS,IAAI,EAEnC,KAAK,cAAgB,KAAK,SAAS,GAGvC,KAAK,SAAS,OAAO,KAAK,UAAU,KAAK,CAAC,CAC9C,CAEA,OAAO,EAAS,EAAS,CACrB,MAAM,OAAO+mB,EAASxT,CAAO,EAE7B,KAAK,UACA,KAAK,QAAS,KAAK,MAAM,CAAC,CAAC,CAC3B,KAAK,SAAU,KAAK,OAAO,CAAC,EAGjC,KAAK,sBACA,KAAK,QAAS,KAAK,MAAM,CAAC,CAAC,CAC3B,KAAK,SAAU,KAAK,OAAO,CAAC,EAGjC,KAAK,SACA,QAAQ,KAAK,SAAS,GAAK,KAAK,YAAY,CAAC,CAAC,CAC9C,OAAQ,GAAe,CACpB,IAAMid,EAAO3gB,EAAE,QAAQ,EACvBA,EAAE,WAAW,CAAE,EAAG,KAAK,MAAM,EAAI2gB,EAAK,MAAQ,EAAG,EAAG,EAAG,CAAC,CAC5D,CAAC,CAET,CAEA,KAAK,EAAS,EAAS,CACnB,KAAK,SAAS,OAAO,IAAI,EACzB,MAAM,KAAKzJ,EAASxT,CAAO,CAC/B,CAGA,uBAAwB,CACxB,CAEA,uBAAuB,EAA+D,CACtF,CAEA,qBAAsB,CACtB,CACJ,EACA,cAAc,UAAU,QAAU,wBAelC,cAAc,UAAU,QAAQ,cAAe,GAAM,UAAW,cAAc,EAC9E,cAAc,UAAU,QAAQ,WAAY,GAAM,UAAW,wBAAwB,EACrF,cAAc,UAAU,QAAQ,eAAgB,IAAK,SAAU,qBAAqB,EACpF,cAAc,UAAU,QAAQ,iBAAkB,IAAA,GAAW,SAAU,oBAAqB,IAAA,GAAW,CAAE,SAAU,EAAK,CAAC,EACzH,cAAc,UAAU,QAAQ,YAAa,OAAQ,MAAO,uCAAwC,CAAC,OAAQ,kBAAkB,CAAC,EAEhI,IAAMwyB,GAAiB,cAAc,UAAU,UAC/C,cAAc,UAAU,UAAY,SAAU,EAAI,EAAqB,CACnE,IAAMniB,EAASmiB,GAAe,MAAM,KAAM,SAAS,EASnD,OARI,UAAU,SAEN,UADA5kC,IAAM,OACI,KAAK,UAAU,KAAK,EAEpB,KAAK,sBAAsB,KAAK,CAAC,EAE/C,KAAK,cAAc,GAEhByiB,CACX,ECzZA,IAAa,YAAb,cAAiC+K,CAAO,CAEpC,aAAc,CACV,MAAM,CACV,CACJ,EACA,YAAY,UAAU,QAAU,sBAMhC,YAAY,UAAU,QAAQ,UAAW,CAAC,EAAG,cAAe,cAAc,ECd1E,IAAAqX,GAAA,OAAe,OAAWxpC,EAAA,SAAA,ECA1B,SAAwB,WAAW,EAAM,CACvC,cACA,SACA,YACA,OACA,YACC,CACD,OAAO,iBAAiB,KAAM,CAC5B,KAAM,CAAC,MAAOgE,EAAM,WAAY,GAAM,aAAc,EAAI,EACxD,YAAa,CAAC,MAAOK,EAAa,WAAY,GAAM,aAAc,EAAI,EACtE,OAAQ,CAAC,MAAO7F,EAAQ,WAAY,GAAM,aAAc,EAAI,EAC5D,UAAW,CAAC,MAAOqD,EAAW,WAAY,GAAM,aAAc,EAAI,EAClE,KAAM,CAAC,MAAO4nC,EAAM,WAAY,GAAM,aAAc,EAAI,EACxD,EAAG,CAAC,MAAO/E,CAAQ,CACrB,CAAC,CACH,CCfA,SAAgB,cAAc,EAAO,CACnClhC,EAAM,yBAAyB,CACjC,CAEA,SAAA,gBAAwB,EAAO,CAC7BA,EAAM,eAAe,EACrBA,EAAM,yBAAyB,CACjC,C,kCCEA,IAAIkmC,GAAY,CAAC,KAAM,MAAM,EACzBC,GAAa,CAAC,KAAM,OAAO,EAC3BC,GAAc,CAAC,KAAM,QAAQ,EAC7BC,GAAc,CAAC,KAAM,QAAQ,EAE3B,CAAC,OAAK,IAAAC,EAAK,IAAAC,GAAO,KAExB,SAAS,QAAQ,EAAG,CAClB,MAAO,CAAC,CAAC,EAAE,GAAI,CAAC,EAAE,EAAE,CACtB,CAEA,SAAS,QAAQ,EAAG,CAClB,MAAO,CAAC,QAAQ,EAAE,EAAE,EAAG,QAAQ,EAAE,EAAE,CAAC,CACtC,CAEA,IAAIC,GAAI,CACN,KAAM,IACN,QAAS,CAAC,IAAK,GAAG,CAAC,CAAC,IAAI,IAAI,EAC5B,MAAO,SAAS,EAAG,EAAG,CAAE,OAAOhqC,GAAK,KAAO,KAAO,CAAC,CAAC,CAACA,EAAE,GAAIgG,EAAE,EAAE,CAAC,EAAE,EAAG,CAAC,CAAChG,EAAE,GAAIgG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAG,EACxF,OAAQ,SAAS,EAAI,CAAE,OAAOikC,GAAM,CAACA,EAAG,EAAE,CAAC,GAAIA,EAAG,EAAE,CAAC,EAAE,CAAG,CAC5D,EAEIC,GAAI,CACN,KAAM,IACN,QAAS,CAAC,IAAK,GAAG,CAAC,CAAC,IAAI,IAAI,EAC5B,MAAO,SAAS,EAAG,EAAG,CAAE,OAAO9gC,GAAK,KAAO,KAAO,CAAC,CAACpD,EAAE,EAAE,CAAC,GAAI,CAACoD,EAAE,EAAE,EAAG,CAACpD,EAAE,EAAE,CAAC,GAAI,CAACoD,EAAE,EAAE,CAAC,CAAG,EACxF,OAAQ,SAAS,EAAI,CAAE,OAAO6gC,GAAM,CAACA,EAAG,EAAE,CAAC,GAAIA,EAAG,EAAE,CAAC,EAAE,CAAG,CAC5D,EAEIE,GAAK,CACP,KAAM,KACN,QAAS,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAI,CAAC,CAAC,IAAI,IAAI,EAC9D,MAAO,SAAS,EAAI,CAAE,OAAOF,GAAM,KAAO,KAAO,QAAQA,CAAE,CAAG,EAC9D,OAAQ,SAAS,EAAI,CAAE,OAAOA,CAAI,CACpC,EAEIG,EAAU,CACZ,QAAS,YACT,UAAW,OACX,EAAG,YACH,EAAG,YACH,EAAG,YACH,EAAG,YACH,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,aACN,EAEIC,GAAQ,CACV,EAAG,IACH,EAAG,IACH,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,EAEIC,GAAQ,CACV,EAAG,IACH,EAAG,IACH,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,EAEIC,GAAS,CACX,QAAS,EACT,UAAW,EACX,EAAG,KACH,EAAG,EACH,EAAG,KACH,EAAG,GACH,GAAI,GACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACN,EAEIC,GAAS,CACX,QAAS,EACT,UAAW,EACX,EAAG,GACH,EAAG,KACH,EAAG,EACH,EAAG,KACH,GAAI,GACJ,GAAI,GACJ,GAAI,EACJ,GAAI,CACN,EAEA,SAAS,KAAK,EAAG,CACf,MAAO,CAAC,KAAM9mC,CAAC,CACjB,CAGA,SAAS,cAAc,EAAO,CAC5B,MAAO,CAACF,EAAM,SAAW,CAACA,EAAM,MAClC,CAEA,SAAS,eAAgB,CACvB,IAAIc,EAAM,KAAK,iBAAmB,KAKlC,OAJIA,EAAI,aAAa,SAAS,GAC5B,EAAMA,EAAI,QAAQ,QACX,CAAC,CAACA,EAAI,EAAGA,EAAI,CAAC,EAAG,CAACA,EAAI,EAAIA,EAAI,MAAOA,EAAI,EAAIA,EAAI,MAAM,CAAC,GAE1D,CAAC,CAAC,EAAG,CAAC,EAAG,CAACA,EAAI,MAAM,QAAQ,MAAOA,EAAI,OAAO,QAAQ,KAAK,CAAC,CACrE,CAEA,SAAS,kBAAmB,CAC1B,OAAO,UAAU,gBAAmB,iBAAkB,IACxD,CAGA,SAASzG,QAAM,EAAM,CACnB,KAAO,CAACiC,EAAK,SAAS,GAAI,EAAE,EAAOA,EAAK,YAAa,OACrD,OAAOA,EAAK,OACd,C,wBAEA,SAAS,MAAM,EAAQ,CACrB,OAAOunC,EAAO,EAAE,CAAC,KAAOA,EAAO,EAAE,CAAC,IAC3BA,EAAO,EAAE,CAAC,KAAOA,EAAO,EAAE,CAAC,EACpC,CAEA,SAAgB,eAAe,EAAM,CACnC,IAAI3c,EAAQ5qB,EAAK,QACjB,OAAO4qB,EAAQA,EAAM,IAAI,OAAOA,EAAM,SAAS,EAAI,IACrD,CAEA,SAAgB,QAAS,CACvB,OAAO,MAAMsf,EAAC,CAChB,CAEA,SAAgB,QAAS,CACvB,OAAO,MAAME,EAAC,CAChB,C,gCAEA,SAAA,eAA0B,CACxB,OAAO,MAAMC,EAAE,CACjB,CAEA,SAAS,MAAM,EAAK,CAClB,IAAI9C,EAAS,cACTlgB,EAAS,cACTyd,EAAY,iBACZpwB,EAAO,GACPswB,EAAY,SAAS,QAAS,QAAS,KAAK,EAC5C2F,EAAa,EACbvF,EAEJ,SAAS,MAAM,EAAO,CACpB,IAAInR,EAAUp0B,EACT,SAAS,UAAW,UAAU,CAAC,CACjC,UAAU,UAAU,CAAC,CACrB,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,EAEzBo0B,EAAQ,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACzB,KAAK,QAAS,SAAS,CAAC,CACxB,KAAK,iBAAkB,KAAK,CAAC,CAC7B,KAAK,SAAUqW,EAAQ,OAAO,CAAC,CACjC,MAAMrW,CAAO,CAAC,CACZ,KAAK,UAAW,CACf,IAAIsT,EAASxpC,QAAM,IAAI,CAAC,CAAC,OACzB,eAAO,IAAI,CAAC,CACP,KAAK,IAAKwpC,EAAO,EAAE,CAAC,EAAE,CAAC,CACvB,KAAK,IAAKA,EAAO,EAAE,CAAC,EAAE,CAAC,CACvB,KAAK,QAASA,EAAO,EAAE,CAAC,GAAKA,EAAO,EAAE,CAAC,EAAE,CAAC,CAC1C,KAAK,SAAUA,EAAO,EAAE,CAAC,GAAKA,EAAO,EAAE,CAAC,EAAE,CACjD,CAAC,EAEL1nC,EAAM,UAAU,YAAY,CAAC,CAC1B,KAAK,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CACzB,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACpB,KAAK,QAAS,WAAW,CAAC,CAC1B,KAAK,SAAUyqC,EAAQ,SAAS,CAAC,CACjC,KAAK,OAAQ,MAAM,CAAC,CACpB,KAAK,eAAgB,EAAG,CAAC,CACzB,KAAK,SAAU,MAAM,CAAC,CACtB,KAAK,kBAAmB,YAAY,EAEzC,IAAIM,EAAS/qC,EAAM,UAAU,SAAS,CAAC,CACpC,KAAKgrC,EAAI,QAAS,SAAS,EAAG,CAAE,OAAOpgC,EAAE,IAAM,CAAC,EAEnDmgC,EAAO,KAAK,CAAC,CAAC,OAAO,EAErBA,EAAO,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CACxB,KAAK,QAAS,SAAS,EAAG,CAAE,MAAO,kBAAoBngC,EAAE,IAAM,CAAC,CAAC,CACjE,KAAK,SAAU,SAAS,EAAG,CAAE,OAAO6/B,EAAQ7/B,EAAE,KAAO,CAAC,EAE3D5K,EACK,KAAK,MAAM,CAAC,CACZ,KAAK,OAAQ,MAAM,CAAC,CACpB,KAAK,iBAAkB,KAAK,CAAC,CAC7B,GAAG,kBAAmB,OAAO,CAAC,CAChC,OAAOilC,CAAS,CAAC,CACf,GAAG,mBAAoB,OAAO,CAAC,CAC/B,GAAG,kBAAmB,UAAU,CAAC,CACjC,GAAG,mCAAoC,UAAU,CAAC,CAClD,MAAM,eAAgB,MAAM,CAAC,CAC7B,MAAM,8BAA+B,eAAe,CAC3D,CAEA,MAAM,KAAO,SAAS,EAAO,EAAW,EAAO,CACzCjlC,EAAM,MACRA,EACK,GAAG,cAAe,SAAS,EAAO,CAAE,QAAQ,KAAM,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM6D,CAAK,CAAG,CAAC,CAAC,CAC3F,GAAG,4BAA6B,SAAS,EAAO,CAAE,QAAQ,KAAM,SAAS,CAAC,CAAC,IAAIA,CAAK,CAAG,CAAC,CAAC,CACzF,MAAM,QAAS,UAAW,CACzB,IAAIwB,EAAO,KACP0lB,EAAQ1lB,EAAK,QACb4lC,EAAO,QAAQ5lC,EAAM,SAAS,EAC9B6lC,EAAangB,EAAM,UACnBogB,EAAaH,EAAI,MAAM,OAAO9oC,GAAc,WAAaA,EAAU,MAAM,KAAM,SAAS,EAAIA,EAAW6oB,EAAM,MAAM,EACnHzrB,EAAInB,cAAY+sC,EAAYC,CAAU,EAE1C,SAAS,MAAM,EAAG,CAChB,EAAM,UAAYpnC,IAAM,GAAKonC,IAAe,KAAO,KAAO7rC,EAAEyE,CAAC,EAC7D,OAAO,KAAKsB,CAAI,EAChB4lC,EAAK,MAAM,CACb,CAEA,OAAOC,IAAe,MAAQC,IAAe,KAAO,MAAQ,MAAM,CAAC,CACrE,CAAC,EAELnrC,EACK,KAAK,UAAW,CACf,IAAIqF,EAAO,KACPD,EAAO,UACP2lB,EAAQ1lB,EAAK,QACb8lC,EAAaH,EAAI,MAAM,OAAO9oC,GAAc,WAAaA,EAAU,MAAMmD,EAAMD,CAAI,EAAIlD,EAAW6oB,EAAM,MAAM,EAC9GkgB,EAAO,QAAQ5lC,EAAMD,CAAI,CAAC,CAAC,YAAY,EAE3C,kBAAUC,CAAI,EACd,EAAM,UAAY8lC,IAAe,KAAO,KAAOA,EAC/C,OAAO,KAAK9lC,CAAI,EAChB4lC,EAAK,MAAMpnC,CAAK,CAAC,CAAC,MAAMA,CAAK,CAAC,CAAC,IAAIA,CAAK,CAC1C,CAAC,CAET,EAEA,MAAM,MAAQ,SAAS,EAAO,EAAO,CACnC,MAAM,KAAK7D,EAAO,KAAM6D,CAAK,CAC/B,EAEA,SAAS,QAAS,CAChB,IAAI7D,EAAQ5B,eAAO,IAAI,EACnB8D,EAAYhE,QAAM,IAAI,CAAC,CAAC,UAExBgE,GACFlC,EAAM,UAAU,YAAY,CAAC,CACxB,MAAM,UAAW,IAAI,CAAC,CACtB,KAAK,IAAKkC,EAAU,EAAE,CAAC,EAAE,CAAC,CAC1B,KAAK,IAAKA,EAAU,EAAE,CAAC,EAAE,CAAC,CAC1B,KAAK,QAASA,EAAU,EAAE,CAAC,GAAKA,EAAU,EAAE,CAAC,EAAE,CAAC,CAChD,KAAK,SAAUA,EAAU,EAAE,CAAC,GAAKA,EAAU,EAAE,CAAC,EAAE,EAErDlC,EAAM,UAAU,SAAS,CAAC,CACrB,MAAM,UAAW,IAAI,CAAC,CACtB,KAAK,IAAK,SAAS,EAAG,CAAE,OAAO4K,EAAE,KAAKA,EAAE,KAAK,OAAS,KAAO,IAAM1I,EAAU,EAAE,CAAC,GAAK4oC,EAAa,EAAI5oC,EAAU,EAAE,CAAC,GAAK4oC,EAAa,CAAG,CAAC,CAAC,CAC1I,KAAK,IAAK,SAAS,EAAG,CAAE,OAAOlgC,EAAE,KAAK,KAAO,IAAM1I,EAAU,EAAE,CAAC,GAAK4oC,EAAa,EAAI5oC,EAAU,EAAE,CAAC,GAAK4oC,EAAa,CAAG,CAAC,CAAC,CAC1H,KAAK,QAAS,SAAS,EAAG,CAAE,OAAOlgC,EAAE,OAAS,KAAOA,EAAE,OAAS,IAAM1I,EAAU,EAAE,CAAC,GAAKA,EAAU,EAAE,CAAC,GAAK4oC,EAAaA,CAAY,CAAC,CAAC,CACrI,KAAK,SAAU,SAAS,EAAG,CAAE,OAAOlgC,EAAE,OAAS,KAAOA,EAAE,OAAS,IAAM1I,EAAU,EAAE,CAAC,GAAKA,EAAU,EAAE,CAAC,GAAK4oC,EAAaA,CAAY,CAAC,GAI1I9qC,EAAM,UAAU,oBAAoB,CAAC,CAChC,MAAM,UAAW,MAAM,CAAC,CACxB,KAAK,IAAK,IAAI,CAAC,CACf,KAAK,IAAK,IAAI,CAAC,CACf,KAAK,QAAS,IAAI,CAAC,CACnB,KAAK,SAAU,IAAI,CAE5B,CAEA,SAAS,QAAQ,EAAM,EAAM,EAAO,CAClC,IAAIirC,EAAO5lC,EAAK,QAAQ,QACxB,OAAO4lC,IAAS,CAACvC,GAAS,CAACuC,EAAK,OAASA,EAAO,IAAI,QAAQ5lC,EAAMD,EAAMsjC,CAAK,CAC/E,CAEA,SAAS,QAAQ,EAAM,EAAM,EAAO,CAClC,KAAK,KAAOrjC,EACZ,KAAK,KAAOD,EACZ,KAAK,MAAQC,EAAK,QAClB,KAAK,OAAS,EACd,KAAK,MAAQqjC,CACf,CAEA,QAAQ,UAAY,CAClB,YAAa,UAAW,CAEtB,MADI,EAAE,KAAK,SAAW,IAAG,KAAK,MAAM,QAAU,KAAM,KAAK,SAAW,IAC7D,IACT,EACA,MAAO,SAAS,EAAO,EAAM,CAG3B,OAFI,KAAK,UAAU,KAAK,SAAW,GAAO,KAAK,KAAK,QAAS7kC,EAAOimC,CAAI,GACnE,KAAK,KAAK,QAASjmC,CAAK,EACtB,IACT,EACA,MAAO,SAAS,EAAO,EAAM,CAE3B,OADA,KAAK,KAAK,QAASA,EAAOimC,CAAI,EACvB,IACT,EACA,IAAK,SAAS,EAAO,EAAM,CAEzB,MADI,EAAE,KAAK,SAAW,IAAG,OAAO,KAAK,MAAM,QAAS,KAAK,KAAK,MAAOjmC,EAAOimC,CAAI,GACzE,IACT,EACA,KAAM,SAAS,EAAM,EAAO,EAAM,CAChC,IAAIl/B,EAAIxM,eAAO,KAAK,IAAI,CAAC,CAAC,MAAM,EAChC+mC,EAAU,KACR9gC,EACA,KAAK,KACL,IAAI,WAAWA,EAAM,CACnB,YAAaR,EACb,OAAQ,MACR,UAAWmnC,EAAI,OAAO,KAAK,MAAM,SAAS,EAC1C,OACA,SAAU7F,CACZ,CAAC,EACDv6B,CACF,CACF,CACF,EAEA,SAAS,QAAQ,EAAO,CAEtB,GADI26B,GAAe,CAAC1hC,EAAM,SACtB,CAAC2jB,EAAO,MAAM,KAAM,SAAS,EAAG,OAEpC,IAAIniB,EAAO,KACPhB,EAAOR,EAAM,OAAO,SAAS,KAC7BimC,GAAQj1B,GAAQhR,EAAM,QAAU,EAAO,UAAYQ,KAAU,YAAc0lC,GAAal1B,GAAQhR,EAAM,OAASqmC,GAAcD,GAC7HmB,EAAQJ,IAAQT,GAAI,KAAOK,GAAOvmC,GAClCgnC,EAAQL,IAAQX,GAAI,KAAOQ,GAAOxmC,GAClC0mB,EAAQ7sB,QAAMmH,CAAI,EAClBqiC,EAAS3c,EAAM,OACf7oB,EAAY6oB,EAAM,UAClBugB,EAAI5D,EAAO,EAAE,CAAC,GAAIt6B,EAAII,EACtB6M,EAAIqtB,EAAO,EAAE,CAAC,GAAI6D,EAAIC,EACtBzhC,EAAI29B,EAAO,EAAE,CAAC,GAAI+D,EAAIC,EACtB99B,EAAI85B,EAAO,EAAE,CAAC,GAAI1zB,EAAIC,EACtBxG,EAAK,EACLC,EAAK,EACLi+B,EACAC,EAAWR,GAASC,GAASx2B,GAAQhR,EAAM,SAC3CgoC,EACAC,GACAC,EAAS,MAAM,KAAKloC,EAAM,SAAW,CAACA,CAAK,EAAG,GAAK,CACjD,IAAMvE,EAAIyE,EAAE,WAIZ,MAHA,GAAI1F,gBAAQ0F,EAAGsB,CAAI,EACnB,EAAE,OAAStB,EAAE,MAAM,EACnB,EAAE,WAAazE,EACRyE,CACT,CAAC,EAEL,kBAAUsB,CAAI,EACd,IAAI4lC,GAAO,QAAQ5lC,EAAM,UAAW,EAAI,CAAC,CAAC,YAAY,EAEtD,GAAIhB,IAAS,UAAW,CAClBnC,IAAW,EAAS,IACxB,IAAM8pC,EAAM,CAACD,EAAO,GAAIA,EAAO,IAAMA,EAAO,EAAE,EAC9C,EAAM,UAAY,EAAY,CAAC,CAC3B,EAAKf,IAAQT,GAAIe,EAAIhtC,EAAI0tC,EAAI,EAAE,CAAC,GAAIA,EAAI,EAAE,CAAC,EAAE,EAC7C,EAAKhB,IAAQX,GAAIhwB,EAAI/b,EAAI0tC,EAAI,EAAE,CAAC,GAAIA,EAAI,EAAE,CAAC,EAAE,CAC/C,EAAG,CACD,EAAKhB,IAAQT,GAAIxgC,EAAIxL,EAAIytC,EAAI,EAAE,CAAC,GAAIA,EAAI,EAAE,CAAC,EAAE,EAC7C,EAAKhB,IAAQX,GAAIz8B,EAAIrP,EAAIytC,EAAI,EAAE,CAAC,GAAIA,EAAI,EAAE,CAAC,EAAE,CAC/C,CAAC,EACCD,EAAO,OAAS,GAAG,KAAKloC,CAAK,CACnC,KACE,GAAK3B,EAAU,EAAE,CAAC,GAClB,EAAKA,EAAU,EAAE,CAAC,GAClB,EAAKA,EAAU,EAAE,CAAC,GAClB,EAAKA,EAAU,EAAE,CAAC,GAGpB,EAAKkL,EACL,EAAKm+B,EACL,EAAKE,EACL,EAAKz3B,EAEL,IAAIhU,GAAQ5B,eAAOiH,CAAI,CAAC,CACnB,KAAK,iBAAkB,MAAM,EAE9B+uB,GAAUp0B,GAAM,UAAU,UAAU,CAAC,CACpC,KAAK,SAAUyqC,EAAQpmC,EAAK,EAEjC,GAAIR,EAAM,QACR,GAAK,MAAQ,MACb,GAAK,MAAQ,UACR,CACL,IAAI6gC,GAAOtmC,eAAOyF,EAAM,IAAI,CAAC,CACxB,GAAG,kBAAmB,MAAO,EAAI,CAAC,CAClC,GAAG,gBAAiB,MAAO,EAAI,EAChCgR,GAAM6vB,GACL,GAAG,gBAAiB,UAAW,EAAI,CAAC,CACpC,GAAG,cAAe,SAAU,EAAI,EAErC,eAAY7gC,EAAM,IAAI,CACxB,CAEA,OAAO,KAAKwB,CAAI,EAChB4lC,GAAK,MAAMpnC,EAAOimC,EAAK,IAAI,EAE3B,SAAS,MAAM,EAAO,CACpB,IAAK,IAAM93B,KAAKnO,EAAM,gBAAkB,CAACA,CAAK,EAC5C,IAAK,IAAM+G,KAAKmhC,EACVnhC,EAAE,aAAeoH,EAAE,aAAY,EAAE,IAAM3T,gBAAQ2T,EAAG3M,CAAI,GAE9D,GAAIumC,GAAY,CAACC,GAAS,CAACC,IAASC,EAAO,SAAW,EAAG,CACvD,IAAMnnC,EAAQmnC,EAAO,GACjBE,GAAIrnC,EAAM,IAAI,GAAKA,EAAM,EAAE,EAAIqnC,GAAIrnC,EAAM,IAAI,GAAKA,EAAM,EAAE,EAC5D,GAAQ,GAER,EAAQ,EACZ,CACA,IAAK,IAAMA,KAASmnC,EACdnnC,EAAM,MAAK,EAAM,GAAKA,EAAM,IAAI,GAAI,EAAM,GAAKA,EAAM,IAAI,IAC/D,EAAS,GACT,gBAAQf,CAAK,EACb,KAAKA,CAAK,CACZ,CAEA,SAAS,KAAK,EAAO,CACnB,IAAMe,EAAQmnC,EAAO,GAAIG,EAAStnC,EAAM,OACxC,IAAIb,EAKJ,OAHA,EAAKa,EAAM,GAAKsnC,EAAO,GACvB,EAAKtnC,EAAM,GAAKsnC,EAAO,GAEfpC,EAAR,CACE,KAAKE,GACL,KAAKD,GACCqB,IAAO,EAAK7sC,EAAI+sC,EAAIl+B,EAAI9O,EAAIyL,EAAI0hC,EAAIh+B,CAAE,CAAC,EAAG,EAAKL,EAAKK,EAAI,EAAKg+B,EAAKh+B,GAClE49B,IAAO,EAAK9sC,EAAI8b,EAAIkxB,EAAIjtC,EAAIsP,EAAIoG,EAAItG,CAAE,CAAC,EAAG,EAAK69B,EAAK79B,EAAI,EAAKsG,EAAKtG,GACtE,MAEF,KAAKu8B,GACC8B,EAAO,IACT,AAAiFX,KAAtE,EAAK7sC,EAAI+sC,EAAGhtC,EAAIyL,EAAGgiC,EAAO,EAAE,CAAC,EAAE,CAAC,EAAG,EAAKxtC,EAAI+sC,EAAGhtC,EAAIyL,EAAGgiC,EAAO,EAAE,CAAC,EAAE,CAAC,EAAW,GACzF,AAAiFV,KAAtE,EAAK9sC,EAAI8b,EAAG/b,EAAIsP,EAAGm+B,EAAO,EAAE,CAAC,EAAE,CAAC,EAAG,EAAKxtC,EAAI8b,EAAG/b,EAAIsP,EAAGm+B,EAAO,EAAE,CAAC,EAAE,CAAC,EAAW,KAErFX,EAAQ,GAAG,EAAK7sC,EAAI+sC,EAAIl+B,EAAI9O,EAAIyL,EAAIqD,EAAIK,CAAE,CAAC,EAAG,EAAKL,EAAKK,EAAI,EAAKg+B,GAC5DL,EAAQ,IAAG,EAAK7sC,EAAI+sC,EAAIG,EAAIntC,EAAIyL,EAAI0hC,EAAIh+B,CAAE,CAAC,EAAG,EAAKL,EAAI,EAAKq+B,EAAKh+B,GACtE49B,EAAQ,GAAG,EAAK9sC,EAAI8b,EAAIkxB,EAAIjtC,EAAIsP,EAAI29B,EAAI79B,CAAE,CAAC,EAAG,EAAK69B,EAAK79B,EAAI,EAAKsG,GAC5Dq3B,EAAQ,IAAG,EAAK9sC,EAAI8b,EAAIrG,EAAI1V,EAAIsP,EAAIoG,EAAItG,CAAE,CAAC,EAAG,EAAK69B,EAAI,EAAKv3B,EAAKtG,IAE5E,MAEF,KAAKw8B,GACCkB,IAAO,EAAK7sC,EAAI+sC,EAAGhtC,EAAIyL,EAAGqD,EAAKK,EAAK29B,CAAK,CAAC,EAAG,EAAK7sC,EAAI+sC,EAAGhtC,EAAIyL,EAAG0hC,EAAKh+B,EAAK29B,CAAK,CAAC,GAChFC,IAAO,EAAK9sC,EAAI8b,EAAG/b,EAAIsP,EAAG29B,EAAK79B,EAAK29B,CAAK,CAAC,EAAG,EAAK9sC,EAAI8b,EAAG/b,EAAIsP,EAAGoG,EAAKtG,EAAK29B,CAAK,CAAC,EAGxF,CAEIK,EAAKl+B,IACP,GAAS,GACT,EAAIJ,EAAI,EAAKq+B,EAAI,EAAK1nC,EACtB,EAAIyJ,EAAI,EAAKk+B,EAAI,EAAK3nC,EAClBM,KAAQqmC,IAAOtW,GAAQ,KAAK,SAAUqW,EAAQ,EAAOC,GAAMrmC,GAAM,GAGnE4P,EAAKu3B,IACP,GAAS,GACT,EAAID,EAAI,EAAKv3B,EAAI,EAAKjQ,EACtB,EAAIynC,EAAI,EAAKv3B,EAAI,EAAKlQ,EAClBM,KAAQsmC,IAAOvW,GAAQ,KAAK,SAAUqW,EAAQ,EAAOE,GAAMtmC,GAAM,GAGnE0mB,EAAM,YAAW,EAAYA,EAAM,WACnC8gB,IAAO,EAAK3pC,EAAU,EAAE,CAAC,GAAI,EAAKA,EAAU,EAAE,CAAC,IAC/C4pC,KAAO,EAAK5pC,EAAU,EAAE,CAAC,GAAI,EAAKA,EAAU,EAAE,CAAC,KAE/CA,EAAU,EAAE,CAAC,KAAOsL,GACjBtL,EAAU,EAAE,CAAC,KAAOspC,GACpBtpC,EAAU,EAAE,CAAC,KAAOwpC,GACpBxpC,EAAU,EAAE,CAAC,KAAO+R,KACzB,EAAM,UAAY,CAAC,CAACzG,EAAIg+B,CAAE,EAAG,CAACE,EAAIz3B,CAAE,CAAC,EACrC,OAAO,KAAK5O,CAAI,EAChB4lC,GAAK,MAAMpnC,EAAOimC,EAAK,IAAI,EAE/B,CAEA,SAAS,MAAM,EAAO,CAEpB,GADA,cAAcjmC,CAAK,EACfA,EAAM,QAAS,CACjB,GAAIA,EAAM,QAAQ,OAAQ,OACtB0hC,GAAa,aAAaA,CAAW,EACzC,EAAc,WAAW,UAAW,CAAE,EAAc,IAAM,EAAG,GAAG,CAClE,MACE,QAAW1hC,EAAM,KAAM8nC,CAAM,EAC7BjH,GAAK,GAAG,0DAA2D,IAAI,EAEzE1kC,GAAM,KAAK,iBAAkB,KAAK,EAClCo0B,GAAQ,KAAK,SAAUqW,EAAQ,OAAO,EAClC1f,EAAM,YAAW,EAAYA,EAAM,WACnC,MAAM7oB,CAAS,IAAG,EAAM,UAAY,KAAM,OAAO,KAAKmD,CAAI,GAC9D4lC,GAAK,IAAIpnC,EAAOimC,EAAK,IAAI,CAC3B,CAEA,SAAS,UAAU,EAAO,CACxB,OAAQjmC,EAAM,QAAd,CACE,IAAK,IACH,EAAWunC,GAASC,EACpB,MAEF,IAAK,IACCvB,IAASG,KACPmB,IAAO,EAAKM,EAAKj+B,EAAK29B,EAAO,EAAK59B,EAAKC,EAAK29B,GAC5CC,IAAO,EAAKp3B,EAAKvG,EAAK29B,EAAO,EAAKG,EAAK99B,EAAK29B,GAChD,EAAOnB,GACP,KAAKrmC,CAAK,GAEZ,MAEF,IAAK,KACCimC,IAASG,IAAeH,IAASI,MAC/BkB,EAAQ,EAAG,EAAKM,EAAKj+B,EAAa29B,EAAQ,IAAG,EAAK59B,EAAKC,GACvD49B,EAAQ,EAAG,EAAKp3B,EAAKvG,EAAa29B,EAAQ,IAAG,EAAKG,EAAK99B,GAC3D,EAAOs8B,GACP5V,GAAQ,KAAK,SAAUqW,EAAQ,SAAS,EACxC,KAAK5mC,CAAK,GAEZ,MAEF,QAAS,MACX,CACA,gBAAQA,CAAK,CACf,CAEA,SAAS,SAAS,EAAO,CACvB,OAAQA,EAAM,QAAd,CACE,IAAK,IACC+nC,IACF,EAAQ,GAAQ,EAAW,GAC3B,KAAK/nC,CAAK,GAEZ,MAEF,IAAK,IACCimC,IAASI,KACPkB,EAAQ,EAAG,EAAKM,EAAaN,EAAQ,IAAG,EAAK59B,GAC7C69B,EAAQ,EAAG,EAAKp3B,EAAao3B,EAAQ,IAAG,EAAKG,GACjD,EAAOvB,GACP,KAAKpmC,CAAK,GAEZ,MAEF,IAAK,IACCimC,IAASE,KACPnmC,EAAM,QACJunC,IAAO,EAAKM,EAAKj+B,EAAK29B,EAAO,EAAK59B,EAAKC,EAAK29B,GAC5CC,IAAO,EAAKp3B,EAAKvG,EAAK29B,EAAO,EAAKG,EAAK99B,EAAK29B,GAChD,EAAOnB,KAEHkB,EAAQ,EAAG,EAAKM,EAAaN,EAAQ,IAAG,EAAK59B,GAC7C69B,EAAQ,EAAG,EAAKp3B,EAAao3B,EAAQ,IAAG,EAAKG,GACjD,EAAOvB,IAET7V,GAAQ,KAAK,SAAUqW,EAAQpmC,EAAK,EACpC,KAAKR,CAAK,GAEZ,MAEF,QAAS,MACX,CACA,gBAAQA,CAAK,CACf,CACF,CAEA,SAAS,WAAW,EAAO,CACzB,QAAQ,KAAM,SAAS,CAAC,CAAC,MAAMA,CAAK,CACtC,CAEA,SAAS,WAAW,EAAO,CACzB,QAAQ,KAAM,SAAS,CAAC,CAAC,MAAMA,CAAK,CACtC,CAEA,SAAS,YAAa,CACpB,IAAIknB,EAAQ,KAAK,SAAW,CAAC,UAAW,IAAI,EAG5C,MAFA,GAAM,OAAS,QAAQ2c,EAAO,MAAM,KAAM,SAAS,CAAC,EACpD,EAAM,IAAMsD,EACLjgB,CACT,CA2BA,MAzBA,OAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,EAAS,OAAO/lB,GAAM,WAAaA,EAAIxG,GAAS,QAAQwG,CAAC,CAAC,EAAG,OAAS0iC,CACnG,EAEA,MAAM,OAAS,SAAS,EAAG,CACzB,OAAO,UAAU,QAAU,EAAS,OAAO1iC,GAAM,WAAaA,EAAIxG,GAAS,CAAC,CAACwG,CAAC,EAAG,OAASwiB,CAC5F,EAEA,MAAM,UAAY,SAAS,EAAG,CAC5B,OAAO,UAAU,QAAU,EAAY,OAAOxiB,GAAM,WAAaA,EAAIxG,GAAS,CAAC,CAACwG,CAAC,EAAG,OAASigC,CAC/F,EAEA,MAAM,WAAa,SAAS,EAAG,CAC7B,OAAO,UAAU,QAAU,EAAa,CAACjgC,EAAG,OAAS8lC,CACvD,EAEA,MAAM,aAAe,SAAS,EAAG,CAC/B,OAAO,UAAU,QAAU,EAAO,CAAC,CAAC9lC,EAAG,OAAS6P,CAClD,EAEA,MAAM,GAAK,UAAW,CACpB,IAAItT,EAAQ4jC,EAAU,GAAG,MAAMA,EAAW,SAAS,EACnD,OAAO5jC,IAAU4jC,EAAY,MAAQ5jC,CACvC,EAEO,KACT,C"}