{"version":3,"sources":["webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/d3/d3.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/pikaday/pikaday.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///(webpack)/buildin/module.js"],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_asyncToGenerator","fn","self","this","args","arguments","apply","err","undefined","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","_createClass","protoProps","staticProps","prototype","_createForOfIteratorHelper","o","Symbol","iterator","isArray","F","s","n","e","_e","f","it","normalCompletion","didErr","step","next","_e2","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_arr","_n","_d","_s","_i","push","unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayWithoutHoles","arrayLikeToArray","_iterableToArray","iter","from","_nonIterableSpread","_unsupportedIterableToArray","minLen","toString","call","slice","constructor","name","test","module","exports","d3","version","d3_arraySlice","d3_array","list","d3_document","document","d3_documentElement","node","ownerDocument","documentElement","d3_window","defaultView","childNodes","nodeType","array","Date","now","createElement","style","setProperty","d3_element_prototype","Element","d3_element_setAttribute","setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","space","local","priority","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","mid","right","ascending","descending","min","max","extent","c","sum","mean","j","quantile","values","p","H","h","Math","floor","v","median","numbers","sort","variance","d","m","deviation","sqrt","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","t","random","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","map","entries","merge","arrays","merged","abs","d3_range_integerScale","k","d3_class","ctor","properties","d3_Map","_","create","range","start","stop","Infinity","Error","object","forEach","set","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","source","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","has","get","remove","empty","nest","sortValues","rollup","sortKeys","mapType","depth","keyValue","setter","valuesByKey","sortKey","keyMap","order","add","behavior","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","event","l","z","on","listener","indexOf","concat","d3_eventPreventDefault","preventDefault","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","hasOwnProperty","requote","replace","d3_requote_re","d3_subclass","__proto__","property","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","selection","select","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","parentNode","__data__","selectAll","d3_nsXhtml","d3_nsPrefix","svg","xhtml","xlink","xml","xmlns","d3_selection_attr","ns","qualify","attrNullNS","removeAttributeNS","attrNull","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","d3_collapse","trim","d3_selection_classedRe","RegExp","d3_selection_classes","split","d3_selection_classed","d3_selection_classedName","classedFunction","classedConstant","re","classList","getAttribute","lastIndex","d3_selection_style","styleNull","removeProperty","styleFunction","styleConstant","d3_selection_property","propertyNull","propertyFunction","propertyConstant","d3_selection_creator","createNS","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","removeChild","d3_selection_dataNode","data","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","callback","d3_selection_enter","d3_selection_enterPrototype","prefix","attr","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","textContent","html","innerHTML","append","appendChild","insert","before","insertBefore","bind","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","update","enter","exit","datum","filter","nextSibling","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","onAdd","addEventListener","removeAll","match","upgroup","nodes","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","w","suppressClick","off","setTimeout","mouse","container","d3_mousePoint","d3_mouse_bug44083","navigator","userAgent","changedTouches","ownerSVGElement","createSVGPoint","point","window","scrollX","scrollY","ctm","position","top","margin","padding","border","getScreenCTM","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","drag","origin","mousedown","dragstart","touchstart","id","subject","move","end","dragOffset","that","correspondingElement","dragged","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","dx","dy","position1","PI","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","acos","d3_asin","asin","d3_cosh","exp","d3_haversin","sin","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","log","d1","b0","b1","r0","r1","coshr0","u","d3_tanh","d3_sinh","duration","zoom","translate0","center0","center","mousewheelTimer","touchtime","x0","x1","y0","y1","view","scaleExtent","d3_behavior_zoomInfinity","zooming","mousemove","mouseup","g","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","pow","transition","rescale","domain","invert","zoomstarted","zoomed","scale","translate","zoomended","location0","d3_selection_interrupt","scale0","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","q","l0","l1","distance1","scale1","clearTimeout","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","cx","cy","copy","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","color","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","r","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","cos","d3_lab_K","lab","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","atan2","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","xhr","headers","request","XMLHttpRequest","responseType","respond","result","status","d3_xhrHasResponse","responseText","load","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","parse","formatRow","formatValue","join","parseRows","Function","JSON","stringify","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","time","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","LN10","flush","d3_formatPrefixes","d3_formatPrefix","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","String","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTime","getTimezoneOffset","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","number","date","d0","offset","dt","times","utc","d3_time_interval_utc","range_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","string","d3_time_formatPads","d3_time_formats","M","L","Z","d3_time_parse","localZ","W","U","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","Y","d3_time_zone","d3_time_parseWeekdayAbbrev","d3_time_parseWeekday","d3_time_parseMonthAbbrev","d3_time_parseMonth","d3_time_parseLocaleFull","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseAmPm","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseLocaleDate","d3_time_parseLocaleTime","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","d3_time_expandYear","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","d3_geo_centroidW0","d3_geo_centroidW1","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_areaRingSum","d3_geo_areaRingStart","nextPoint","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","bounds","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","antimeridian","angle","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","z0","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","entry","points","current","isSubject","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","line","rotatedClipStart","pointRing","polygon","d3_geo_pointInPolygon","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","arc","intersection","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","pop","shift","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","d3_geo_clipAntimeridianLine","d3_geo_clipAntimeridianIntersect","atan","d3_geo_clipAntimeridianInterpolate","to","direction","d3_geo_clipCircle","radius","cr","smallRadius","notHemisphere","visible","c0","v0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","polar","q1","d3_geom_clipLine","ax","ay","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","insidePolygon","wn","inside","a1","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","forward","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBoundsPoint","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","a00","b00","c00","a0","resampleLineTo","x2","y2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","projectResample","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","rotation","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","path","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","distance","graticule","X1","X0","Y1","Y0","DX","DY","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","d3_geo_interpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_lengthLineStart","d3_geo_azimuthal","azimuthal","sinc","cosc","d3_geo_azimuthalEqualArea","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","geom","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","input","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","bx","by","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","d3_geom_voronoiClipEdges","splice","d3_geom_voronoiCloseCells","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","links","triangles","s0","s1","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","delaunay","quadtree","compat","xs","ys","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","linear","poly","d3_ease_poly","quad","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","d3_ease_elastic","back","d3_ease_back","bounce","d3_ease_bounce","d3_ease_mode","out","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","ease","interpolateHcl","d3_interpolateHcl","ah","ac","al","bh","bc","bl","interpolateHsl","d3_interpolateHsl","as","interpolateLab","d3_interpolateLab","aa","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","d3_interpolateTranslate","ta","tb","d3_interpolateRotate","ra","rb","d3_interpolateSkew","wa","wb","d3_interpolateScale","ka","kb","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","d3_layout_bundleLeastCommonAncestor","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","ancestors","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","alpha","charges","charge","pointCharge","interpolateTransform","layout","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","force","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","chargeDistance2","d3_layout_forceChargeDistance2","gravity","theta2","repulse","dw","dn","dragmove","resume","tick","weight","visit","chargeDistance","theta","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","Number","d3_layout_pieSortByValue","padAngle","da","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","bottom","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","d3_layout_packUnlink","d3_layout_packTransform","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","separation","nodeSize","root0","root1","wrapTree","node1","queue","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","treemap","stickies","pad","sticky","mode","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linear","clamp","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","d3_scale_linearRebind","d3_scale_linearTickRange","span","d3_scale_linearPrecision","d3_scale_linearFormatPrecision","d3_scale_linearFormatSignificant","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_pow","powp","d3_scale_powPow","powb","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_scale_quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","quantize","threshold","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","rc","circleSegment","rp","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStep","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","d3_svg_lineBasisOpen","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","d3_svg_lineBasisClosed","d3_svg_lineBundle","cardinal","d3_svg_lineCardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","d3_svg_lineCardinalOpen","d3_svg_lineCardinalClosed","monotone","d3_svg_lineMonotone","d3_svg_lineMonotoneTangents","tangents","d3_svg_lineFiniteDifferences","d3_svg_lineSlope","lp","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","equals","curve","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","count","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","schedule","subnodes","nameNS","attrTween","attrTweenNS","styleString","styleTween","inheritId","id0","id1","axis","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","brush","xExtentDomain","yExtentDomain","xExtent","yExtent","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","eventTarget","event_","resizing","resizingX","resizingY","dragging","keydown","keyup","brushmove","brushend","ex","ey","altKey","keyCode","move1","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","json","responseXML","hookCallback","some","hooks","setHookCallback","isObject","hasOwnProp","isObjectEmpty","obj","getOwnPropertyNames","isUndefined","isNumber","isDate","res","arrLen","extend","createUTC","strict","createLocalOrUTC","defaultParsingFlags","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","prop","val","momentPropertiesLen","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","isFunction","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","func","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LT","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","getPrioritizedUnits","unitsObj","isLeapYear","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","E","createLocal","gg","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","quarters","quarter","isoWeek","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","utcOffset","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","clone","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","period","tmp","isAdding","invalid","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","wholeMonthDiff","anchor","keepOffset","toDate","inspect","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","moment","hasMoment","hasEventListeners","sto","addEvent","el","attachEvent","removeEvent","detachEvent","str","hasClass","cn","className","addClass","removeClass","isWeekend","setToStartOfDay","compareDates","overwrite","hasProp","nodeName","fireEvent","eventName","ev","createEvent","initEvent","dispatchEvent","createEventObject","adjustCalendar","ariaLabel","reposition","defaultDate","setDefaultDate","firstDay","firstWeekOfYearMinDays","formatStrict","minDate","maxDate","yearRange","showWeekNumber","pickWholeWeek","minYear","maxYear","minMonth","maxMonth","startRange","endRange","isRTL","yearSuffix","showMonthAfterYear","showDaysInNextAndPreviousMonths","enableSelectionDaysInNextAndPreviousMonths","numberOfMonths","mainCalendar","blurFieldOnSelect","i18n","previousMonth","nextMonth","theme","events","onSelect","onOpen","onClose","onDraw","keyboardInput","renderDayName","opts","renderDay","ariaSelected","isEmpty","isDisabled","isToday","isSelected","hasEvent","isInRange","isStartRange","isEndRange","yearDay","weekDay","dayInFirstWeek","dayShift","daysPerWeek","prevWeekDay","jan4th","msPerDay","daysBetween","renderWeek","renderRow","isRowSelected","renderBody","renderHead","renderTitle","refYear","randId","monthHtml","yearHtml","_o","isMinYear","isMaxYear","prev","renderTable","Pikaday","options","_onMouseDown","_v","srcElement","prevMonth","hide","blur","_c","returnValue","_onChange","gotoMonth","gotoYear","_onKeyChange","isVisible","adjustDate","_parseFieldValue","_onInputChange","firedBy","show","_onInputFocus","_onInputClick","_onInputBlur","pEl","activeElement","_b","_onClick","onchange","trigger","defDate","gotoDate","disableWeekends","disableDayFn","nom","setMinDate","setMaxDate","fallback","toDateString","getMoment","setMoment","preventOnSelect","draw","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","adjustCalendars","newDay","difference","gotoToday","setStartRange","setEndRange","_y","_m","render","focus","adjustPosition","height","viewportWidth","viewportHeight","scrollTop","clientRect","leftAligned","bottomAligned","offsetWidth","offsetHeight","innerWidth","clientWidth","innerHeight","clientHeight","pageYOffset","pageXOffset","offsetLeft","offsetTop","offsetParent","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","isWeekSelected","dayNumber","monthNumber","yearNumber","dayConfig","destroy","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","state","invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","__await","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","mark","setPrototypeOf","awrap","async","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","webpackPolyfill"],"mappings":";mOAAe,SAASA,kBAAkBC,IAAKC,MAClC,MAAPA,KAAeA,IAAMD,IAAIE,UAAQD,IAAMD,IAAIE,QAE/C,IAAK,IAAIC,EAAI,EAAGC,KAAO,IAAIC,MAAMJ,KAAME,EAAIF,IAAKE,IAC9CC,KAAKD,GAAKH,IAAIG,GAGhB,OAAOC,KAPT,uF,0KCAA,SAASE,mBAAmBC,IAAKC,QAASC,OAAQC,MAAOC,OAAQC,IAAKC,KACpE,IACE,IAAIC,KAAOP,IAAIK,KAAKC,KAChBE,MAAQD,KAAKC,MACjB,MAAOC,OAEP,YADAP,OAAOO,OAILF,KAAKG,KACPT,QAAQO,OAERG,QAAQV,QAAQO,OAAOI,KAAKT,MAAOC,QAIxB,SAASS,kBAAkBC,IACxC,OAAO,WACL,IAAIC,KAAOC,KACPC,KAAOC,UACX,OAAO,IAAIP,SAAQ,SAAUV,QAASC,QACpC,IAAIF,IAAMc,GAAGK,MAAMJ,KAAME,MAEzB,SAASd,MAAMK,OACbT,mBAAmBC,IAAKC,QAASC,OAAQC,MAAOC,OAAQ,OAAQI,OAGlE,SAASJ,OAAOgB,KACdrB,mBAAmBC,IAAKC,QAASC,OAAQC,MAAOC,OAAQ,QAASgB,KAGnEjB,WAAMkB,OA/BZ,uF,wKCAe,SAASC,gBAAgBC,SAAUC,aAChD,KAAMD,oBAAoBC,aACxB,MAAM,IAAIC,UAAU,qCAFxB,qF,qKCAA,SAASC,kBAAkBC,OAAQC,OACjC,IAAK,IAAIhC,EAAI,EAAGA,EAAIgC,MAAMjC,OAAQC,IAAK,CACrC,IAAIiC,WAAaD,MAAMhC,GACvBiC,WAAWC,WAAaD,WAAWC,aAAc,EACjDD,WAAWE,cAAe,EACtB,UAAWF,aAAYA,WAAWG,UAAW,GACjDC,OAAOC,eAAeP,OAAQE,WAAWxB,IAAKwB,aAInC,SAASM,aAAaX,YAAaY,WAAYC,aAG5D,OAFID,YAAYV,kBAAkBF,YAAYc,UAAWF,YACrDC,aAAaX,kBAAkBF,YAAaa,aACzCb,YAbT,kF,mLCAA,+RACe,SAASe,2BAA2BC,GACjD,GAAsB,oBAAXC,QAAgD,MAAtBD,EAAEC,OAAOC,UAAmB,CAC/D,GAAI5C,MAAM6C,QAAQH,KAAOA,EAAI,mEAA2BA,IAAK,CAC3D,IAAI5C,EAAI,EAEJgD,EAAI,SAASA,MAEjB,MAAO,CACLC,EAAGD,EACHE,EAAG,SAASA,IACV,OAAIlD,GAAK4C,EAAE7C,OAAe,CACxBe,MAAM,GAED,CACLA,MAAM,EACNF,MAAOgC,EAAE5C,OAGbmD,EAAG,SAASA,EAAEC,IACZ,MAAMA,IAERC,EAAGL,GAIP,MAAM,IAAInB,UAAU,yIAGtB,IAAIyB,GAGA9B,IAFA+B,kBAAmB,EACnBC,QAAS,EAEb,MAAO,CACLP,EAAG,SAASA,IACVK,GAAKV,EAAEC,OAAOC,aAEhBI,EAAG,SAASA,IACV,IAAIO,KAAOH,GAAGI,OAEd,OADAH,iBAAmBE,KAAK3C,KACjB2C,MAETN,EAAG,SAASA,EAAEQ,KACZH,QAAS,EACThC,IAAMmC,KAERN,EAAG,SAASA,IACV,IACOE,kBAAoC,MAAhBD,GAAW,QAAWA,GAAW,SAC1D,QACA,GAAIE,OAAQ,MAAMhC,S,4ZC9CX,SAASoC,eAAe/D,IAAKG,GAC1C,OCLa,SAAS6D,gBAAgBhE,KACtC,GAAIK,MAAM6C,QAAQlD,KAAM,OAAOA,IDIxB,CAAeA,MELT,SAASiE,sBAAsBjE,IAAKG,GACjD,GAAsB,oBAAX6C,QAA4BA,OAAOC,YAAYT,OAAOxC,KAAjE,CACA,IAAIkE,KAAO,GACPC,IAAK,EACLC,IAAK,EACLb,QAAK3B,EAET,IACE,IAAK,IAAiCyC,GAA7BC,GAAKtE,IAAIgD,OAAOC,cAAmBkB,IAAME,GAAKC,GAAGT,QAAQ5C,QAChEiD,KAAKK,KAAKF,GAAGtD,QAETZ,GAAK+D,KAAKhE,SAAWC,GAH8CgE,IAAK,IAK9E,MAAOxC,KACPyC,IAAK,EACLb,GAAK5B,IACL,QACA,IACOwC,IAAsB,MAAhBG,GAAW,QAAWA,GAAW,SAC5C,QACA,GAAIF,GAAI,MAAMb,IAIlB,OAAOW,MFnBuB,CAAqBlE,IAAKG,IAAM,OAAAqE,2BAAA,GAA2BxE,IAAKG,IGLjF,SAASsE,mBACtB,MAAM,IAAIzC,UAAU,6IHIgF,K,kjBIDvF,SAAS0C,mBAAmB1E,KACzC,OCJa,SAAS2E,mBAAmB3E,KACzC,GAAIK,MAAM6C,QAAQlD,KAAM,OAAO,OAAA4E,iBAAA,GAAiB5E,KDGzC,CAAkBA,MELZ,SAAS6E,iBAAiBC,MACvC,GAAsB,oBAAX9B,QAA0BA,OAAOC,YAAYT,OAAOsC,MAAO,OAAOzE,MAAM0E,KAAKD,MFIvD,CAAgB9E,MAAQ,OAAAwE,2BAAA,GAA2BxE,MGLvE,SAASgF,qBACtB,MAAM,IAAIhD,UAAU,wIHIwE,K,oLIL9F,4QACe,SAASiD,4BAA4BlC,EAAGmC,QACrD,GAAKnC,EAAL,CACA,GAAiB,iBAANA,EAAgB,OAAO,yDAAiBA,EAAGmC,QACtD,IAAI7B,EAAIb,OAAOK,UAAUsC,SAASC,KAAKrC,GAAGsC,MAAM,GAAI,GAEpD,MADU,WAANhC,GAAkBN,EAAEuC,cAAajC,EAAIN,EAAEuC,YAAYC,MAC7C,QAANlC,GAAqB,QAANA,EAAoBhD,MAAM0E,KAAK1B,GACxC,cAANA,GAAqB,2CAA2CmC,KAAKnC,GAAW,yDAAiBN,EAAGmC,aAAxG,K,sICPFO,OAAOC,QAAU,oBAAQ,kD,uECAzB,6EACE,IAAIC,GAAK,CACPC,QAAS,UAEPC,cAAgB,GAAGR,MAAOS,SAAW,SAASC,MAChD,OAAOF,cAAcT,KAAKW,OAExBC,YAAczE,KAAK0E,SACvB,SAASC,mBAAmBC,MAC1B,OAAOA,OAASA,KAAKC,eAAiBD,KAAKF,UAAYE,MAAME,gBAE/D,SAASC,UAAUH,MACjB,OAAOA,OAASA,KAAKC,eAAiBD,KAAKC,cAAcG,aAAeJ,KAAKF,UAAYE,MAAQA,KAAKI,aAExG,GAAIP,YACF,IACEF,SAASE,YAAYK,gBAAgBG,YAAY,GAAGC,SACpD,MAAOnD,GACPwC,SAAW,SAASC,MAElB,IADA,IAAI5F,EAAI4F,KAAK7F,OAAQwG,MAAQ,IAAIrG,MAAMF,GAChCA,KAAKuG,MAAMvG,GAAK4F,KAAK5F,GAC5B,OAAOuG,OAOb,GAHKC,KAAKC,MAAKD,KAAKC,IAAM,WACxB,OAAQ,IAAID,OAEVX,YACF,IACEA,YAAYa,cAAc,OAAOC,MAAMC,YAAY,UAAW,EAAG,IACjE,MAAO/F,OACP,IAAIgG,qBAAuBzF,KAAK0F,QAAQpE,UAAWqE,wBAA0BF,qBAAqBG,aAAcC,0BAA4BJ,qBAAqBK,eAAgBC,mBAAqB/F,KAAKgG,oBAAoB1E,UAAW2E,qBAAuBF,mBAAmBP,YACpRC,qBAAqBG,aAAe,SAAS5B,KAAMxE,OACjDmG,wBAAwB9B,KAAK7D,KAAMgE,KAAMxE,MAAQ,KAEnDiG,qBAAqBK,eAAiB,SAASI,MAAOC,MAAO3G,OAC3DqG,0BAA0BhC,KAAK7D,KAAMkG,MAAOC,MAAO3G,MAAQ,KAE7DuG,mBAAmBP,YAAc,SAASxB,KAAMxE,MAAO4G,UACrDH,qBAAqBpC,KAAK7D,KAAMgE,KAAMxE,MAAQ,GAAI4G,WAKxD,SAASC,aAAaC,EAAGC,GACvB,OAAOD,EAAIC,GAAK,EAAID,EAAIC,EAAI,EAAID,GAAKC,EAAI,EAAIC,IA8D/C,SAASC,UAAUC,GACjB,OAAa,OAANA,EAAaF,KAAOE,EAE7B,SAASC,WAAWD,GAClB,OAAQE,MAAMF,GA0DhB,SAASG,YAAYC,SACnB,MAAO,CACLC,KAAM,SAAST,EAAGI,EAAGM,GAAIC,IAGvB,IAFI/G,UAAUvB,OAAS,IAAGqI,GAAK,GAC3B9G,UAAUvB,OAAS,IAAGsI,GAAKX,EAAE3H,QAC1BqI,GAAKC,IAAI,CACd,IAAIC,IAAMF,GAAKC,KAAO,EAClBH,QAAQR,EAAEY,KAAMR,GAAK,EAAGM,GAAKE,IAAM,EAAQD,GAAKC,IAEtD,OAAOF,IAETG,MAAO,SAASb,EAAGI,EAAGM,GAAIC,IAGxB,IAFI/G,UAAUvB,OAAS,IAAGqI,GAAK,GAC3B9G,UAAUvB,OAAS,IAAGsI,GAAKX,EAAE3H,QAC1BqI,GAAKC,IAAI,CACd,IAAIC,IAAMF,GAAKC,KAAO,EAClBH,QAAQR,EAAEY,KAAMR,GAAK,EAAGO,GAAKC,IAAUF,GAAKE,IAAM,EAExD,OAAOF,KAhJb5C,GAAGgD,UAAYf,aAIfjC,GAAGiD,WAAa,SAASf,EAAGC,GAC1B,OAAOA,EAAID,GAAK,EAAIC,EAAID,EAAI,EAAIC,GAAKD,EAAI,EAAIE,KAE/CpC,GAAGkD,IAAM,SAASnC,MAAOlD,GACvB,IAA8BqE,EAAGC,EAA7B3H,GAAK,EAAGkD,EAAIqD,MAAMxG,OACtB,GAAyB,IAArBuB,UAAUvB,OAAc,CAC1B,OAASC,EAAIkD,MAAyB,OAAjByE,EAAIpB,MAAMvG,KAAe2H,GAAKA,EAAG,CACpDD,EAAIC,EACJ,MAEF,OAAS3H,EAAIkD,GAAyB,OAAjByE,EAAIpB,MAAMvG,KAAe0H,EAAIC,IAAGD,EAAIC,OACpD,CACL,OAAS3H,EAAIkD,MAA2C,OAAnCyE,EAAItE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,KAAe2H,GAAKA,EAAG,CACtED,EAAIC,EACJ,MAEF,OAAS3H,EAAIkD,GAA2C,OAAnCyE,EAAItE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,KAAe0H,EAAIC,IAAGD,EAAIC,GAE7E,OAAOD,GAETlC,GAAGmD,IAAM,SAASpC,MAAOlD,GACvB,IAA8BqE,EAAGC,EAA7B3H,GAAK,EAAGkD,EAAIqD,MAAMxG,OACtB,GAAyB,IAArBuB,UAAUvB,OAAc,CAC1B,OAASC,EAAIkD,MAAyB,OAAjByE,EAAIpB,MAAMvG,KAAe2H,GAAKA,EAAG,CACpDD,EAAIC,EACJ,MAEF,OAAS3H,EAAIkD,GAAyB,OAAjByE,EAAIpB,MAAMvG,KAAe2H,EAAID,IAAGA,EAAIC,OACpD,CACL,OAAS3H,EAAIkD,MAA2C,OAAnCyE,EAAItE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,KAAe2H,GAAKA,EAAG,CACtED,EAAIC,EACJ,MAEF,OAAS3H,EAAIkD,GAA2C,OAAnCyE,EAAItE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,KAAe2H,EAAID,IAAGA,EAAIC,GAE7E,OAAOD,GAETlC,GAAGoD,OAAS,SAASrC,MAAOlD,GAC1B,IAA8BqE,EAAGC,EAAGkB,EAAhC7I,GAAK,EAAGkD,EAAIqD,MAAMxG,OACtB,GAAyB,IAArBuB,UAAUvB,OAAc,CAC1B,OAASC,EAAIkD,MAAyB,OAAjByE,EAAIpB,MAAMvG,KAAe2H,GAAKA,EAAG,CACpDD,EAAImB,EAAIlB,EACR,MAEF,OAAS3H,EAAIkD,GAAyB,OAAjByE,EAAIpB,MAAMvG,MACzB0H,EAAIC,IAAGD,EAAIC,GACXkB,EAAIlB,IAAGkB,EAAIlB,QAEZ,CACL,OAAS3H,EAAIkD,MAA2C,OAAnCyE,EAAItE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,KAAe2H,GAAKA,EAAG,CACtED,EAAImB,EAAIlB,EACR,MAEF,OAAS3H,EAAIkD,GAA2C,OAAnCyE,EAAItE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,MAC3C0H,EAAIC,IAAGD,EAAIC,GACXkB,EAAIlB,IAAGkB,EAAIlB,IAGnB,MAAO,CAAED,EAAGmB,IAQdrD,GAAGsD,IAAM,SAASvC,MAAOlD,GACvB,IAA6BqE,EAAzBzE,EAAI,EAAGC,EAAIqD,MAAMxG,OAAWC,GAAK,EACrC,GAAyB,IAArBsB,UAAUvB,OACZ,OAASC,EAAIkD,GAAO6E,WAAWL,GAAKnB,MAAMvG,MAAKiD,GAAKyE,QAEpD,OAAS1H,EAAIkD,GAAO6E,WAAWL,GAAKrE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,MAAKiD,GAAKyE,GAExE,OAAOzE,GAETuC,GAAGuD,KAAO,SAASxC,MAAOlD,GACxB,IAA6BqE,EAAzBzE,EAAI,EAAGC,EAAIqD,MAAMxG,OAAWC,GAAK,EAAGgJ,EAAI9F,EAC5C,GAAyB,IAArB5B,UAAUvB,OACZ,OAASC,EAAIkD,GAAO6E,WAAWL,EAAIG,UAAUtB,MAAMvG,KAAMiD,GAAKyE,IAAUsB,OAExE,OAAShJ,EAAIkD,GAAO6E,WAAWL,EAAIG,UAAUxE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,KAAMiD,GAAKyE,IAAUsB,EAE5F,GAAIA,EAAG,OAAO/F,EAAI+F,GAEpBxD,GAAGyD,SAAW,SAASC,OAAQC,GAC7B,IAAIC,GAAKF,OAAOnJ,OAAS,GAAKoJ,EAAI,EAAGE,EAAIC,KAAKC,MAAMH,GAAII,GAAKN,OAAOG,EAAI,GAAIlG,EAAIiG,EAAIC,EACpF,OAAOlG,EAAIqG,EAAIrG,GAAK+F,OAAOG,GAAKG,GAAKA,GAEvChE,GAAGiE,OAAS,SAASlD,MAAOlD,GAC1B,IAAoCqE,EAAhCgC,QAAU,GAAIxG,EAAIqD,MAAMxG,OAAWC,GAAK,EAC5C,GAAyB,IAArBsB,UAAUvB,OACZ,OAASC,EAAIkD,GAAO6E,WAAWL,EAAIG,UAAUtB,MAAMvG,MAAM0J,QAAQtF,KAAKsD,QAEtE,OAAS1H,EAAIkD,GAAO6E,WAAWL,EAAIG,UAAUxE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,MAAM0J,QAAQtF,KAAKsD,GAE1F,GAAIgC,QAAQ3J,OAAQ,OAAOyF,GAAGyD,SAASS,QAAQC,KAAKlC,cAAe,KAErEjC,GAAGoE,SAAW,SAASrD,MAAOlD,GAC5B,IAA6BqE,EAAGmC,EAA5B3G,EAAIqD,MAAMxG,OAAQ+J,EAAI,EAAS7G,EAAI,EAAGjD,GAAK,EAAGgJ,EAAI,EACtD,GAAyB,IAArB1H,UAAUvB,OACZ,OAASC,EAAIkD,GACP6E,WAAWL,EAAIG,UAAUtB,MAAMvG,OAGjCiD,IAFA4G,EAAInC,EAAIoC,IAEEpC,GADVoC,GAAKD,IAAMb,UAKf,OAAShJ,EAAIkD,GACP6E,WAAWL,EAAIG,UAAUxE,EAAE4B,KAAKsB,MAAOA,MAAMvG,GAAIA,OAGnDiD,IAFA4G,EAAInC,EAAIoC,IAEEpC,GADVoC,GAAKD,IAAMb,KAKjB,GAAIA,EAAI,EAAG,OAAO/F,GAAK+F,EAAI,IAE7BxD,GAAGuE,UAAY,WACb,IAAIP,EAAIhE,GAAGoE,SAASrI,MAAMH,KAAME,WAChC,OAAOkI,EAAIF,KAAKU,KAAKR,GAAKA,GAwB5B,IAAIS,UAAYhC,YAAYR,cAuC5B,SAASyC,mBAAmBL,GAC1B,OAAOA,EAAE9J,OAvCXyF,GAAG2E,WAAaF,UAAU9B,KAC1B3C,GAAG4E,OAAS5E,GAAG6E,YAAcJ,UAAU1B,MACvC/C,GAAG8E,SAAW,SAASjH,GACrB,OAAO4E,YAAyB,IAAb5E,EAAEtD,OAAe,SAAS8J,EAAG/B,GAC9C,OAAOL,aAAapE,EAAEwG,GAAI/B,IACxBzE,IAENmC,GAAG+E,QAAU,SAAShE,MAAOiE,GAAIC,KAC1BX,EAAIxI,UAAUvB,QAAU,IAC3B0K,GAAKlE,MAAMxG,OACP+J,EAAI,IAAGU,GAAK,IAGlB,IADA,IAAiBE,EAAG1K,EAAhB8J,EAAIW,GAAKD,GACNV,GACL9J,EAAIsJ,KAAKqB,SAAWb,IAAM,EAC1BY,EAAInE,MAAMuD,EAAIU,IAAKjE,MAAMuD,EAAIU,IAAMjE,MAAMvG,EAAIwK,IAAKjE,MAAMvG,EAAIwK,IAAME,EAEpE,OAAOnE,OAETf,GAAGoF,QAAU,SAASrE,MAAOsE,SAE3B,IADA,IAAI7K,EAAI6K,QAAQ9K,OAAQ+K,SAAW,IAAI5K,MAAMF,GACtCA,KAAK8K,SAAS9K,GAAKuG,MAAMsE,QAAQ7K,IACxC,OAAO8K,UAETtF,GAAGuF,MAAQ,SAASxE,OAElB,IADA,IAAIvG,EAAI,EAAGkD,EAAIqD,MAAMxG,OAAS,EAAOiL,GAAKzE,MAAM,GAAIwE,MAAQ,IAAI7K,MAAMgD,EAAI,EAAI,EAAIA,GAC3ElD,EAAIkD,GAAG6H,MAAM/K,GAAK,CAAOgL,GAAIA,GAAKzE,QAAQvG,IACjD,OAAO+K,OAETvF,GAAGyF,UAAY,SAASC,QACtB,KAAMhI,EAAIgI,OAAOnL,QAAS,MAAO,GACjC,IAAK,IAAIC,GAAK,EAAG8J,EAAItE,GAAGkD,IAAIwC,OAAQhB,oBAAqBe,UAAY,IAAI/K,MAAM4J,KAAM9J,EAAI8J,GACvF,IAAK,IAAY5G,EAAR8F,GAAK,EAAMmC,IAAMF,UAAUjL,GAAK,IAAIE,MAAMgD,KAAM8F,EAAI9F,GAC3DiI,IAAInC,GAAKkC,OAAOlC,GAAGhJ,GAGvB,OAAOiL,WAKTzF,GAAG4F,IAAM,WACP,OAAO5F,GAAGyF,UAAU3J,YAEtBkE,GAAG6F,KAAO,SAASC,KACjB,IAAID,KAAO,GACX,IAAK,IAAI5K,OAAO6K,IAAKD,KAAKjH,KAAK3D,KAC/B,OAAO4K,MAET7F,GAAG0D,OAAS,SAASoC,KACnB,IAAIpC,OAAS,GACb,IAAK,IAAIzI,OAAO6K,IAAKpC,OAAO9E,KAAKkH,IAAI7K,MACrC,OAAOyI,QAET1D,GAAG+F,QAAU,SAASD,KACpB,IAAIC,QAAU,GACd,IAAK,IAAI9K,OAAO6K,IAAKC,QAAQnH,KAAK,CAChC3D,IAAKA,IACLG,MAAO0K,IAAI7K,OAEb,OAAO8K,SAET/F,GAAGgG,MAAQ,SAASC,QAElB,IADA,IAAuB3B,EAAkB4B,OAAQnF,MAA7CrD,EAAIuI,OAAO1L,OAAWC,GAAK,EAAGgJ,EAAI,IAC7BhJ,EAAIkD,GAAG8F,GAAKyC,OAAOzL,GAAGD,OAE/B,IADA2L,OAAS,IAAIxL,MAAM8I,KACV9F,GAAK,GAGZ,IADA4G,GADAvD,MAAQkF,OAAOvI,IACLnD,SACD+J,GAAK,GACZ4B,SAAS1C,GAAKzC,MAAMuD,GAGxB,OAAO4B,QAET,IAAIC,IAAMrC,KAAKqC,IAef,SAASC,sBAAsB9D,GAE7B,IADA,IAAI+D,EAAI,EACD/D,EAAI+D,EAAI,GAAGA,GAAK,GACvB,OAAOA,EAET,SAASC,SAASC,KAAMC,YACtB,IAAK,IAAIvL,OAAOuL,WACd3J,OAAOC,eAAeyJ,KAAKrJ,UAAWjC,IAAK,CACzCG,MAAOoL,WAAWvL,KAClByB,YAAY,IAkBlB,SAAS+J,SACP7K,KAAK8K,EAAI7J,OAAO8J,OAAO,MA1CzB3G,GAAG4G,MAAQ,SAASC,MAAOC,KAAM7I,MAQ/B,GAPInC,UAAUvB,OAAS,IACrB0D,KAAO,EACHnC,UAAUvB,OAAS,IACrBuM,KAAOD,MACPA,MAAQ,KAGPC,KAAOD,OAAS5I,MAAS8I,IAAU,MAAM,IAAIC,MAAM,kBACxD,IAA8DxD,EAA1DoD,MAAQ,GAAIP,EAAID,sBAAsBD,IAAIlI,OAAQzD,GAAK,EAE3D,GADAqM,OAASR,EAAGS,MAAQT,GAAGpI,MAAQoI,GACpB,EAAG,MAAQ7C,EAAIqD,MAAQ5I,OAASzD,GAAKsM,MAAMF,MAAMhI,KAAK4E,EAAI6C,QAAS,MAAQ7C,EAAIqD,MAAQ5I,OAASzD,GAAKsM,MAAMF,MAAMhI,KAAK4E,EAAI6C,GACrI,OAAOO,OAeT5G,GAAG8F,IAAM,SAASmB,OAAQpJ,GACxB,IAAIiI,IAAM,IAAIW,OACd,GAAIQ,kBAAkBR,OACpBQ,OAAOC,SAAQ,SAASjM,IAAKG,OAC3B0K,IAAIqB,IAAIlM,IAAKG,eAEV,GAAIV,MAAM6C,QAAQ0J,QAAS,CAChC,IAA+B7J,EAA3B5C,GAAK,EAAGkD,EAAIuJ,OAAO1M,OACvB,GAAyB,IAArBuB,UAAUvB,OAAc,OAASC,EAAIkD,GAAGoI,IAAIqB,IAAI3M,EAAGyM,OAAOzM,SAAU,OAASA,EAAIkD,GAAGoI,IAAIqB,IAAItJ,EAAE4B,KAAKwH,OAAQ7J,EAAI6J,OAAOzM,GAAIA,GAAI4C,QAElI,IAAK,IAAInC,OAAOgM,OAAQnB,IAAIqB,IAAIlM,IAAKgM,OAAOhM,MAE9C,OAAO6K,KAmCT,SAASsB,cAAcnM,KACrB,MA/BiB,cA+BTA,KAAO,KA/B6B,OA+BLA,IAAI,GA/BC,KA+BkCA,IAAMA,IAEtF,SAASoM,gBAAgBpM,KACvB,MAlC4C,QAkCpCA,KAAO,IAAI,GAAqBA,IAAIyE,MAAM,GAAKzE,IAEzD,SAASqM,WAAWrM,KAClB,OAAOmM,cAAcnM,OAAQW,KAAK8K,EAEpC,SAASa,cAActM,KACrB,OAAQA,IAAMmM,cAAcnM,QAASW,KAAK8K,UAAY9K,KAAK8K,EAAEzL,KAE/D,SAASuM,cACP,IAAI3B,KAAO,GACX,IAAK,IAAI5K,OAAOW,KAAK8K,EAAGb,KAAKjH,KAAKyI,gBAAgBpM,MAClD,OAAO4K,KAET,SAAS4B,cACP,IAAIC,KAAO,EACX,IAAK,IAAIzM,OAAOW,KAAK8K,IAAKgB,KAC1B,OAAOA,KAET,SAASC,eACP,IAAK,IAAI1M,OAAOW,KAAK8K,EAAG,OAAO,EAC/B,OAAO,EAsET,SAASkB,SACPhM,KAAK8K,EAAI7J,OAAO8J,OAAO,MAiBzB,SAASkB,YAAYxD,GACnB,OAAOA,EAOT,SAASyD,UAAUvL,OAAQwL,OAAQC,QACjC,OAAO,WACL,IAAI5M,MAAQ4M,OAAOjM,MAAMgM,OAAQjM,WACjC,OAAOV,QAAU2M,OAASxL,OAASnB,OAGvC,SAAS6M,gBAAgBhB,OAAQrH,MAC/B,GAAIA,QAAQqH,OAAQ,OAAOrH,KAC3BA,KAAOA,KAAKsI,OAAO,GAAGC,cAAgBvI,KAAKF,MAAM,GACjD,IAAK,IAAIlF,EAAI,EAAGkD,EAAI0K,kBAAkB7N,OAAQC,EAAIkD,IAAKlD,EAAG,CACxD,IAAI6N,WAAaD,kBAAkB5N,GAAKoF,KACxC,GAAIyI,cAAcpB,OAAQ,OAAOoB,YAhKrC/B,SAASG,OAAQ,CACf6B,IAAKhB,WACLiB,IAAK,SAAStN,KACZ,OAAOW,KAAK8K,EAAEU,cAAcnM,OAE9BkM,IAAK,SAASlM,IAAKG,OACjB,OAAOQ,KAAK8K,EAAEU,cAAcnM,MAAQG,OAEtCoN,OAAQjB,cACR1B,KAAM2B,YACN9D,OAAQ,WACN,IAAIA,OAAS,GACb,IAAK,IAAIzI,OAAOW,KAAK8K,EAAGhD,OAAO9E,KAAKhD,KAAK8K,EAAEzL,MAC3C,OAAOyI,QAETqC,QAAS,WACP,IAAIA,QAAU,GACd,IAAK,IAAI9K,OAAOW,KAAK8K,EAAGX,QAAQnH,KAAK,CACnC3D,IAAKoM,gBAAgBpM,KACrBG,MAAOQ,KAAK8K,EAAEzL,OAEhB,OAAO8K,SAET2B,KAAMD,YACNgB,MAAOd,aACPT,QAAS,SAASrJ,GAChB,IAAK,IAAI5C,OAAOW,KAAK8K,EAAG7I,EAAE4B,KAAK7D,KAAMyL,gBAAgBpM,KAAMW,KAAK8K,EAAEzL,SA6BtE+E,GAAG0I,KAAO,WACR,IAAyCC,WAAYC,OAAjDF,KAAO,GAAI7C,KAAO,GAAIgD,SAAW,GACrC,SAAS/C,IAAIgD,QAAS/H,MAAOgI,OAC3B,GAAIA,OAASlD,KAAKtL,OAAQ,OAAOqO,OAASA,OAAOnJ,KAAKiJ,KAAM3H,OAAS4H,WAAa5H,MAAMoD,KAAKwE,YAAc5H,MAE3G,IADA,IAAmDiI,SAAU/B,OAAQgC,OAAoCvF,OAArGlJ,GAAK,EAAGkD,EAAIqD,MAAMxG,OAAQU,IAAM4K,KAAKkD,SAAoCG,YAAc,IAAIzC,SACtFjM,EAAIkD,IACPgG,OAASwF,YAAYX,IAAIS,SAAW/N,IAAIgM,OAASlG,MAAMvG,MACzDkJ,OAAO9E,KAAKqI,QAEZiC,YAAY/B,IAAI6B,SAAU,CAAE/B,SAehC,OAZI6B,SACF7B,OAAS6B,UACTG,OAAS,SAASD,SAAUtF,QAC1BuD,OAAOE,IAAI6B,SAAUlD,IAAIgD,QAASpF,OAAQqF,WAG5C9B,OAAS,GACTgC,OAAS,SAASD,SAAUtF,QAC1BuD,OAAO+B,UAAYlD,IAAIgD,QAASpF,OAAQqF,SAG5CG,YAAYhC,QAAQ+B,QACbhC,OAET,SAASlB,QAAQD,IAAKiD,OACpB,GAAIA,OAASlD,KAAKtL,OAAQ,OAAOuL,IACjC,IAAI/E,MAAQ,GAAIoI,QAAUN,SAASE,SAOnC,OANAjD,IAAIoB,SAAQ,SAASjM,IAAKmO,QACxBrI,MAAMnC,KAAK,CACT3D,IAAKA,IACLyI,OAAQqC,QAAQqD,OAAQL,YAGrBI,QAAUpI,MAAMoD,MAAK,SAASjC,EAAGC,GACtC,OAAOgH,QAAQjH,EAAEjH,IAAKkH,EAAElH,QACrB8F,MAwBP,OAtBA2H,KAAK5C,IAAM,SAAS/E,MAAO+H,SACzB,OAAOhD,IAAIgD,QAAS/H,MAAO,IAE7B2H,KAAK3C,QAAU,SAAShF,OACtB,OAAOgF,QAAQD,IAAI9F,GAAG8F,IAAK/E,MAAO,GAAI,IAExC2H,KAAKzN,IAAM,SAASoJ,GAElB,OADAwB,KAAKjH,KAAKyF,GACHqE,MAETA,KAAKG,SAAW,SAASQ,OAEvB,OADAR,SAAShD,KAAKtL,OAAS,GAAK8O,MACrBX,MAETA,KAAKC,WAAa,SAASU,OAEzB,OADAV,WAAaU,MACNX,MAETA,KAAKE,OAAS,SAAS/K,GAErB,OADA+K,OAAS/K,EACF6K,MAEFA,MAET1I,GAAGmH,IAAM,SAASpG,OAChB,IAAIoG,IAAM,IAAIS,OACd,GAAI7G,MAAO,IAAK,IAAIvG,EAAI,EAAGkD,EAAIqD,MAAMxG,OAAQC,EAAIkD,IAAKlD,EAAG2M,IAAImC,IAAIvI,MAAMvG,IACvE,OAAO2M,KAKTb,SAASsB,OAAQ,CACfU,IAAKhB,WACLgC,IAAK,SAASrO,KAEZ,OADAW,KAAK8K,EAAEU,cAAcnM,KAAO,MAAO,EAC5BA,KAETuN,OAAQjB,cACR7D,OAAQ8D,YACRE,KAAMD,YACNgB,MAAOd,aACPT,QAAS,SAASrJ,GAChB,IAAK,IAAI5C,OAAOW,KAAK8K,EAAG7I,EAAE4B,KAAK7D,KAAMyL,gBAAgBpM,SAGzD+E,GAAGuJ,SAAW,GAIdvJ,GAAGwJ,OAAS,SAASjN,OAAQwL,QAE3B,IADA,IAAiCC,OAA7BxN,EAAI,EAAGkD,EAAI5B,UAAUvB,SAChBC,EAAIkD,GAAGnB,OAAOyL,OAASlM,UAAUtB,IAAMsN,UAAUvL,OAAQwL,OAAQA,OAAOC,SACjF,OAAOzL,QAgBT,IAAI6L,kBAAoB,CAAE,SAAU,KAAM,MAAO,MAAO,IAAK,KAC7D,SAASqB,WAMT,SAASC,eAeT,SAASC,kBAAkBC,UACzB,IAAIC,UAAY,GAAIC,eAAiB,IAAIrD,OACzC,SAASsD,QAEP,IADA,IAAyCC,EAArCC,EAAIJ,UAAWrP,GAAK,EAAGkD,EAAIuM,EAAE1P,SACxBC,EAAIkD,IAAOsM,EAAIC,EAAEzP,GAAG0P,KAAIF,EAAEjO,MAAMH,KAAME,WAC/C,OAAO8N,SAeT,OAbAG,MAAMG,GAAK,SAAStK,KAAMuK,UACxB,IAAkC3P,EAA9BwP,EAAIF,eAAevB,IAAI3I,MAC3B,OAAI9D,UAAUvB,OAAS,EAAUyP,GAAKA,EAAEE,IACpCF,IACFA,EAAEE,GAAK,KACPL,UAAYA,UAAUnK,MAAM,EAAGlF,EAAIqP,UAAUO,QAAQJ,IAAIK,OAAOR,UAAUnK,MAAMlF,EAAI,IACpFsP,eAAetB,OAAO5I,OAEpBuK,UAAUN,UAAUjL,KAAKkL,eAAe3C,IAAIvH,KAAM,CACpDsK,GAAIC,YAECP,WAEFG,MAGT,SAASO,yBACPtK,GAAG+J,MAAMQ,iBAEX,SAASC,iBAEP,IADA,IAAkB/M,EAAdE,EAAIqC,GAAG+J,MACJtM,EAAIE,EAAE8M,aAAa9M,EAAIF,EAC9B,OAAOE,EAET,SAAS+M,iBAAiBnO,QAExB,IADA,IAAIqN,SAAW,IAAIF,YAAelP,EAAI,EAAGkD,EAAI5B,UAAUvB,SAC9CC,EAAIkD,GAAGkM,SAAS9N,UAAUtB,IAAMmP,kBAAkBC,UAa3D,OAZAA,SAASe,GAAK,SAASC,KAAMC,WAC3B,OAAO,SAASC,IACd,IACE,IAAIC,GAAKD,GAAGL,YAAczK,GAAG+J,MAC7Be,GAAGvO,OAASA,OACZyD,GAAG+J,MAAQe,GACXlB,SAASkB,GAAGE,MAAMjP,MAAM6O,KAAMC,WAC9B,QACA7K,GAAG+J,MAAQgB,MAIVnB,SAlET5J,GAAG4J,SAAW,WAEZ,IADA,IAAIA,SAAW,IAAIF,YAAelP,GAAK,EAAGkD,EAAI5B,UAAUvB,SAC/CC,EAAIkD,GAAGkM,SAAS9N,UAAUtB,IAAMmP,kBAAkBC,UAC3D,OAAOA,UAGTF,YAAYxM,UAAUgN,GAAK,SAASc,KAAMb,UACxC,IAAI3P,EAAIwQ,KAAKZ,QAAQ,KAAMxK,KAAO,GAKlC,GAJIpF,GAAK,IACPoF,KAAOoL,KAAKtL,MAAMlF,EAAI,GACtBwQ,KAAOA,KAAKtL,MAAM,EAAGlF,IAEnBwQ,KAAM,OAAOlP,UAAUvB,OAAS,EAAIqB,KAAKoP,MAAMd,GAAGtK,MAAQhE,KAAKoP,MAAMd,GAAGtK,KAAMuK,UAClF,GAAyB,IAArBrO,UAAUvB,OAAc,CAC1B,GAAgB,MAAZ4P,SAAkB,IAAKa,QAAQpP,KAC7BA,KAAKqP,eAAeD,OAAOpP,KAAKoP,MAAMd,GAAGtK,KAAM,MAErD,OAAOhE,OAyBXoE,GAAG+J,MAAQ,KA0BX/J,GAAGkL,QAAU,SAASzN,GACpB,OAAOA,EAAE0N,QAAQC,cAAe,SAElC,IAAIA,cAAgB,kCAChBC,YAAc,GAAGC,UAAY,SAASrE,OAAQ/J,WAChD+J,OAAOqE,UAAYpO,WACjB,SAAS+J,OAAQ/J,WACnB,IAAK,IAAIqO,YAAYrO,UAAW+J,OAAOsE,UAAYrO,UAAUqO,WAE/D,SAASC,aAAaC,QAEpB,OADAJ,YAAYI,OAAQC,uBACbD,OAET,IAAIE,UAAY,SAASlO,EAAGC,GAC1B,OAAOA,EAAEkO,cAAcnO,IACtBoO,aAAe,SAASpO,EAAGC,GAC5B,OAAOA,EAAEoO,iBAAiBrO,IACzBsO,iBAAmB,SAASrO,EAAGD,GAChC,IAAIuO,iBAAmBtO,EAAEuO,SAAWvO,EAAEuK,gBAAgBvK,EAAG,oBAIzD,OAHAqO,iBAAmB,SAASrO,EAAGD,GAC7B,OAAOuO,iBAAiBvM,KAAK/B,EAAGD,IAE3BsO,iBAAiBrO,EAAGD,IAEP,mBAAXyO,SACTP,UAAY,SAASlO,EAAGC,GACtB,OAAOwO,OAAOzO,EAAGC,GAAG,IAAM,MAE5BmO,aAAeK,OACfH,iBAAmBG,OAAOC,iBAE5BnM,GAAGoM,UAAY,WACb,OAAOpM,GAAGqM,OAAOhM,YAAYK,kBAE/B,IAAIgL,sBAAwB1L,GAAGoM,UAAUlP,UAAY,GAkBrD,SAASoP,sBAAsBC,UAC7B,MAA2B,mBAAbA,SAA0BA,SAAW,WACjD,OAAOZ,UAAUY,SAAU3Q,OAgB/B,SAAS4Q,yBAAyBD,UAChC,MAA2B,mBAAbA,SAA0BA,SAAW,WACjD,OAAOV,aAAaU,SAAU3Q,OArClC8P,sBAAsBW,OAAS,SAASE,UACtC,IAAoBE,SAAUC,QAASC,MAAOnM,KAA1CoM,UAAY,GAChBL,SAAWD,sBAAsBC,UACjC,IAAK,IAAI/I,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GAAK,CAC3CsI,UAAUhO,KAAK6N,SAAW,IAC1BA,SAASI,YAAcF,MAAQ/Q,KAAK4H,IAAIqJ,WACxC,IAAK,IAAIrS,GAAK,EAAGkD,EAAIiP,MAAMpS,SAAUC,EAAIkD,IACnC8C,KAAOmM,MAAMnS,KACfiS,SAAS7N,KAAK8N,QAAUH,SAAS9M,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,IAC1DkJ,SAAW,aAAclM,OAAMkM,QAAQI,SAAWtM,KAAKsM,WAE3DL,SAAS7N,KAAK,MAIpB,OAAO4M,aAAaoB,YAOtBlB,sBAAsBqB,UAAY,SAASR,UACzC,IAAoBE,SAAUjM,KAA1BoM,UAAY,GAChBL,SAAWC,yBAAyBD,UACpC,IAAK,IAAI/I,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GACtC,IAAK,IAAIqI,MAAQ/Q,KAAK4H,GAAIhJ,GAAK,EAAGkD,EAAIiP,MAAMpS,SAAUC,EAAIkD,IACpD8C,KAAOmM,MAAMnS,MACfoS,UAAUhO,KAAK6N,SAAWtM,SAASoM,SAAS9M,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,KACzEiJ,SAASI,WAAarM,MAI5B,OAAOgL,aAAaoB,YAOtB,IAAII,WAAa,+BACbC,YAAc,CAChBC,IAAK,6BACLC,MAAOH,WACPI,MAAO,+BACPC,IAAK,uCACLC,MAAO,iCAyBT,SAASC,kBAAkB3N,KAAMxE,OAsB/B,OArBAwE,KAAOI,GAAGwN,GAAGC,QAAQ7N,MAqBL,MAATxE,MAAgBwE,KAAKmC,MAjB5B,SAAS2L,aACP9R,KAAK+R,kBAAkB/N,KAAKkC,MAAOlC,KAAKmC,QAJ1C,SAAS6L,WACPhS,KAAKiS,gBAAgBjO,OAmBsD,mBAAVxE,MAAuBwE,KAAKmC,MAJ/F,SAAS+L,iBACP,IAAIxL,EAAIlH,MAAMW,MAAMH,KAAME,WACjB,MAALwG,EAAW1G,KAAK+R,kBAAkB/N,KAAKkC,MAAOlC,KAAKmC,OAAanG,KAAK8F,eAAe9B,KAAKkC,MAAOlC,KAAKmC,MAAOO,IANlH,SAASyL,eACP,IAAIzL,EAAIlH,MAAMW,MAAMH,KAAME,WACjB,MAALwG,EAAW1G,KAAKiS,gBAAgBjO,MAAYhE,KAAK4F,aAAa5B,KAAM0C,IAM6D1C,KAAKmC,MAX5I,SAASiM,iBACPpS,KAAK8F,eAAe9B,KAAKkC,MAAOlC,KAAKmC,MAAO3G,QAJ9C,SAAS6S,eACPrS,KAAK4F,aAAa5B,KAAMxE,QAe5B,SAAS8S,YAAYzQ,GACnB,OAAOA,EAAE0Q,OAAOhD,QAAQ,OAAQ,KAmBlC,SAASiD,uBAAuBxO,MAC9B,OAAO,IAAIyO,OAAO,aAAerO,GAAGkL,QAAQtL,MAAQ,aAAc,KAEpE,SAAS0O,qBAAqB1O,MAC5B,OAAQA,KAAO,IAAIuO,OAAOI,MAAM,SAElC,SAASC,qBAAqB5O,KAAMxE,OAElC,IAAIsC,GADJkC,KAAO0O,qBAAqB1O,MAAMkG,IAAI2I,2BACzBlU,OASb,MAAwB,mBAAVa,MAJd,SAASsT,kBAEP,IADA,IAAIlU,GAAK,EAAG8H,EAAIlH,MAAMW,MAAMH,KAAME,aACzBtB,EAAIkD,GAAGkC,KAAKpF,GAAGoB,KAAM0G,IANhC,SAASqM,kBAEP,IADA,IAAInU,GAAK,IACAA,EAAIkD,GAAGkC,KAAKpF,GAAGoB,KAAMR,QAQlC,SAASqT,yBAAyB7O,MAChC,IAAIgP,GAAKR,uBAAuBxO,MAChC,OAAO,SAASY,KAAMpF,OACpB,GAAIiI,EAAI7C,KAAKqO,UAAW,OAAOzT,MAAQiI,EAAEiG,IAAI1J,MAAQyD,EAAEmF,OAAO5I,MAC9D,IAAIyD,EAAI7C,KAAKsO,aAAa,UAAY,GAClC1T,OACFwT,GAAGG,UAAY,EACVH,GAAG/O,KAAKwD,IAAI7C,KAAKgB,aAAa,QAAS0M,YAAY7K,EAAI,IAAMzD,QAElEY,KAAKgB,aAAa,QAAS0M,YAAY7K,EAAE8H,QAAQyD,GAAI,QAoB3D,SAASI,mBAAmBpP,KAAMxE,MAAO4G,UAWvC,OAAgB,MAAT5G,MAVP,SAAS6T,YACPrT,KAAKuF,MAAM+N,eAAetP,OASwB,mBAAVxE,MAJ1C,SAAS+T,gBACP,IAAI7M,EAAIlH,MAAMW,MAAMH,KAAME,WACjB,MAALwG,EAAW1G,KAAKuF,MAAM+N,eAAetP,MAAYhE,KAAKuF,MAAMC,YAAYxB,KAAM0C,EAAGN,WALvF,SAASoN,gBACPxT,KAAKuF,MAAMC,YAAYxB,KAAMxE,MAAO4G,WAgBxC,SAASqN,sBAAsBzP,KAAMxE,OAWnC,OAAgB,MAATA,MAVP,SAASkU,sBACA1T,KAAKgE,OASyC,mBAAVxE,MAJ7C,SAASmU,mBACP,IAAIjN,EAAIlH,MAAMW,MAAMH,KAAME,WACjB,MAALwG,SAAkB1G,KAAKgE,MAAYhE,KAAKgE,MAAQ0C,GALtD,SAASkN,mBACP5T,KAAKgE,MAAQxE,OAkCjB,SAASqU,qBAAqB7P,MAQ5B,MAAuB,mBAATA,KAAsBA,MAAQA,KAAOI,GAAGwN,GAAGC,QAAQ7N,OAAOmC,MAHxE,SAAS2N,WACP,OAAO9T,KAAK6E,cAAckP,gBAAgB/P,KAAKkC,MAAOlC,KAAKmC,QAL7D,SAAS4E,SACP,IAAIrG,SAAW1E,KAAK6E,cAAemP,UAAYhU,KAAKiU,aACpD,OAAOD,YAAc5C,YAAc1M,SAASI,gBAAgBmP,eAAiB7C,WAAa1M,SAASY,cAActB,MAAQU,SAASqP,gBAAgBC,UAAWhQ,OAiBjK,SAASkQ,qBACP,IAAIC,OAASnU,KAAKiR,WACdkD,QAAQA,OAAOC,YAAYpU,MAmFjC,SAASqU,sBAAsBC,MAC7B,MAAO,CACLpD,SAAUoD,MAoBd,SAASC,oBAAoB5D,UAC3B,OAAO,WACL,OAAOR,iBAAiBnQ,KAAM2Q,WAmBlC,SAAS6D,4BAA4BC,YAEnC,OADKvU,UAAUvB,SAAQ8V,WAAapO,cAC7B,SAASC,EAAGC,GACjB,OAAOD,GAAKC,EAAIkO,WAAWnO,EAAE4K,SAAU3K,EAAE2K,WAAa5K,GAAKC,GAQ/D,SAASmO,kBAAkB7E,OAAQ8E,UACjC,IAAK,IAAI/M,EAAI,EAAGc,EAAImH,OAAOlR,OAAQiJ,EAAIc,EAAGd,IACxC,IAAK,IAAgDhD,KAA5CmM,MAAQlB,OAAOjI,GAAIhJ,EAAI,EAAGkD,EAAIiP,MAAMpS,OAAcC,EAAIkD,EAAGlD,KAC5DgG,KAAOmM,MAAMnS,KAAI+V,SAAS/P,KAAMhG,EAAGgJ,GAG3C,OAAOiI,OA0BT,SAAS+E,mBAAmBpE,WAE1B,OADAf,YAAYe,UAAWqE,6BAChBrE,UAhXTpM,GAAGwN,GAAK,CACNkD,OAAQzD,YACRQ,QAAS,SAAS7N,MAChB,IAAIpF,EAAIoF,KAAKwK,QAAQ,KAAMsG,OAAS9Q,KAEpC,OADIpF,GAAK,GAAqC,WAA/BkW,OAAS9Q,KAAKF,MAAM,EAAGlF,MAAiBoF,KAAOA,KAAKF,MAAMlF,EAAI,IACtEyS,YAAYhC,eAAeyF,QAAU,CAC1C5O,MAAOmL,YAAYyD,QACnB3O,MAAOnC,MACLA,OAGR8L,sBAAsBiF,KAAO,SAAS/Q,KAAMxE,OAC1C,GAAIU,UAAUvB,OAAS,EAAG,CACxB,GAAoB,iBAATqF,KAAmB,CAC5B,IAAIY,KAAO5E,KAAK4E,OAEhB,OADAZ,KAAOI,GAAGwN,GAAGC,QAAQ7N,OACTmC,MAAQvB,KAAKoQ,eAAehR,KAAKkC,MAAOlC,KAAKmC,OAASvB,KAAKsO,aAAalP,MAEtF,IAAKxE,SAASwE,KAAMhE,KAAKiV,KAAKtD,kBAAkBnS,MAAOwE,KAAKxE,SAC5D,OAAOQ,KAET,OAAOA,KAAKiV,KAAKtD,kBAAkB3N,KAAMxE,SA6B3CsQ,sBAAsBoF,QAAU,SAASlR,KAAMxE,OAC7C,GAAIU,UAAUvB,OAAS,EAAG,CACxB,GAAoB,iBAATqF,KAAmB,CAC5B,IAAIY,KAAO5E,KAAK4E,OAAQ9C,GAAKkC,KAAO0O,qBAAqB1O,OAAOrF,OAAQC,GAAK,EAC7E,GAAIY,MAAQoF,KAAKqO,WACf,OAASrU,EAAIkD,OAAQtC,MAAM2V,SAASnR,KAAKpF,IAAK,OAAO,OAGrD,IADAY,MAAQoF,KAAKsO,aAAa,WACjBtU,EAAIkD,OAAQ0Q,uBAAuBxO,KAAKpF,IAAIqF,KAAKzE,OAAQ,OAAO,EAE3E,OAAO,EAET,IAAKA,SAASwE,KAAMhE,KAAKiV,KAAKrC,qBAAqBpT,MAAOwE,KAAKxE,SAC/D,OAAOQ,KAET,OAAOA,KAAKiV,KAAKrC,qBAAqB5O,KAAMxE,SAkC9CsQ,sBAAsBvK,MAAQ,SAASvB,KAAMxE,MAAO4G,UAClD,IAAItE,EAAI5B,UAAUvB,OAClB,GAAImD,EAAI,EAAG,CACT,GAAoB,iBAATkC,KAAmB,CAE5B,IAAKoC,YADDtE,EAAI,IAAGtC,MAAQ,IACFwE,KAAMhE,KAAKiV,KAAK7B,mBAAmBhN,SAAUpC,KAAKoC,UAAW5G,QAC9E,OAAOQ,KAET,GAAI8B,EAAI,EAAG,CACT,IAAI8C,KAAO5E,KAAK4E,OAChB,OAAOG,UAAUH,MAAMwQ,iBAAiBxQ,KAAM,MAAMyQ,iBAAiBrR,MAEvEoC,SAAW,GAEb,OAAOpG,KAAKiV,KAAK7B,mBAAmBpP,KAAMxE,MAAO4G,YAenD0J,sBAAsBH,SAAW,SAAS3L,KAAMxE,OAC9C,GAAIU,UAAUvB,OAAS,EAAG,CACxB,GAAoB,iBAATqF,KAAmB,OAAOhE,KAAK4E,OAAOZ,MACjD,IAAKxE,SAASwE,KAAMhE,KAAKiV,KAAKxB,sBAAsBjU,MAAOwE,KAAKxE,SAChE,OAAOQ,KAET,OAAOA,KAAKiV,KAAKxB,sBAAsBzP,KAAMxE,SAe/CsQ,sBAAsBwF,KAAO,SAAS9V,OACpC,OAAOU,UAAUvB,OAASqB,KAAKiV,KAAsB,mBAAVzV,MAAuB,WAChE,IAAI4I,EAAI5I,MAAMW,MAAMH,KAAME,WAC1BF,KAAKuV,YAAmB,MAALnN,EAAY,GAAKA,GACzB,MAAT5I,MAAgB,WAClBQ,KAAKuV,YAAc,IACjB,WACFvV,KAAKuV,YAAc/V,QAChBQ,KAAK4E,OAAO2Q,aAEnBzF,sBAAsB0F,KAAO,SAAShW,OACpC,OAAOU,UAAUvB,OAASqB,KAAKiV,KAAsB,mBAAVzV,MAAuB,WAChE,IAAI4I,EAAI5I,MAAMW,MAAMH,KAAME,WAC1BF,KAAKyV,UAAiB,MAALrN,EAAY,GAAKA,GACvB,MAAT5I,MAAgB,WAClBQ,KAAKyV,UAAY,IACf,WACFzV,KAAKyV,UAAYjW,QACdQ,KAAK4E,OAAO6Q,WAEnB3F,sBAAsB4F,OAAS,SAAS1R,MAEtC,OADAA,KAAO6P,qBAAqB7P,MACrBhE,KAAKyQ,QAAO,WACjB,OAAOzQ,KAAK2V,YAAY3R,KAAK7D,MAAMH,KAAME,gBAa7C4P,sBAAsB8F,OAAS,SAAS5R,KAAM6R,QAG5C,OAFA7R,KAAO6P,qBAAqB7P,MAC5B6R,OAASnF,sBAAsBmF,QACxB7V,KAAKyQ,QAAO,WACjB,OAAOzQ,KAAK8V,aAAa9R,KAAK7D,MAAMH,KAAME,WAAY2V,OAAO1V,MAAMH,KAAME,YAAc,UAG3F4P,sBAAsBlD,OAAS,WAC7B,OAAO5M,KAAKiV,KAAKf,qBAMnBpE,sBAAsBwE,KAAO,SAAS9U,MAAOH,KAC3C,IAA6B0R,MAAOnM,KAAhChG,GAAK,EAAGkD,EAAI9B,KAAKrB,OACrB,IAAKuB,UAAUvB,OAAQ,CAErB,IADAa,MAAQ,IAAIV,MAAMgD,GAAKiP,MAAQ/Q,KAAK,IAAIrB,UAC/BC,EAAIkD,IACP8C,KAAOmM,MAAMnS,MACfY,MAAMZ,GAAKgG,KAAKsM,UAGpB,OAAO1R,MAET,SAASuW,KAAKhF,MAAOiF,WACnB,IAAIpX,EAAiJgG,KAAMqR,SAApJnU,EAAIiP,MAAMpS,OAAQ+J,EAAIsN,UAAUrX,OAAQuX,GAAKhO,KAAKZ,IAAIxF,EAAG4G,GAAIyN,YAAc,IAAIrX,MAAM4J,GAAI0N,WAAa,IAAItX,MAAM4J,GAAI2N,UAAY,IAAIvX,MAAMgD,GACjJ,GAAIzC,IAAK,CACP,IAA6D+N,SAAzDkJ,eAAiB,IAAIzL,OAAU0L,UAAY,IAAIzX,MAAMgD,GACzD,IAAKlD,GAAK,IAAKA,EAAIkD,IACb8C,KAAOmM,MAAMnS,MACX0X,eAAe5J,IAAIU,SAAW/N,IAAIwE,KAAKe,KAAMA,KAAKsM,SAAUtS,IAC9DyX,UAAUzX,GAAKgG,KAEf0R,eAAe/K,IAAI6B,SAAUxI,MAE/B2R,UAAU3X,GAAKwO,UAGnB,IAAKxO,GAAK,IAAKA,EAAI8J,IACX9D,KAAO0R,eAAe3J,IAAIS,SAAW/N,IAAIwE,KAAKmS,UAAWC,SAAWD,UAAUpX,GAAIA,MAEpE,IAATgG,OACTuR,YAAYvX,GAAKgG,KACjBA,KAAKsM,SAAW+E,UAHhBG,WAAWxX,GAAKyV,sBAAsB4B,UAKxCK,eAAe/K,IAAI6B,UAAU,GAE/B,IAAKxO,GAAK,IAAKA,EAAIkD,GACblD,KAAK2X,YAAkD,IAArCD,eAAe3J,IAAI4J,UAAU3X,MACjDyX,UAAUzX,GAAKmS,MAAMnS,QAGpB,CACL,IAAKA,GAAK,IAAKA,EAAIsX,IACjBtR,KAAOmM,MAAMnS,GACbqX,SAAWD,UAAUpX,GACjBgG,MACFA,KAAKsM,SAAW+E,SAChBE,YAAYvX,GAAKgG,MAEjBwR,WAAWxX,GAAKyV,sBAAsB4B,UAG1C,KAAMrX,EAAI8J,IAAK9J,EACbwX,WAAWxX,GAAKyV,sBAAsB2B,UAAUpX,IAElD,KAAMA,EAAIkD,IAAKlD,EACbyX,UAAUzX,GAAKmS,MAAMnS,GAGzBwX,WAAWI,OAASL,YACpBC,WAAWnF,WAAakF,YAAYlF,WAAaoF,UAAUpF,WAAaF,MAAME,WAC9EwF,MAAMzT,KAAKoT,YACXI,OAAOxT,KAAKmT,aACZO,KAAK1T,KAAKqT,WAEZ,IAAII,MAAQ7B,mBAAmB,IAAK4B,OAAS5G,aAAa,IAAK8G,KAAO9G,aAAa,IACnF,GAAqB,mBAAVpQ,MACT,OAASZ,EAAIkD,GACXiU,KAAKhF,MAAQ/Q,KAAKpB,GAAIY,MAAMqE,KAAKkN,MAAOA,MAAME,WAAWC,SAAUtS,SAGrE,OAASA,EAAIkD,GACXiU,KAAKhF,MAAQ/Q,KAAKpB,GAAIY,OAS1B,OANAgX,OAAOC,MAAQ,WACb,OAAOA,OAETD,OAAOE,KAAO,WACZ,OAAOA,MAEFF,QAOT1G,sBAAsB6G,MAAQ,SAASnX,OACrC,OAAOU,UAAUvB,OAASqB,KAAK2P,SAAS,WAAYnQ,OAASQ,KAAK2P,SAAS,aAE7EG,sBAAsB8G,OAAS,SAASA,QACtC,IAAoB/F,SAAUE,MAAOnM,KAAjCoM,UAAY,GACM,mBAAX4F,SAAuBA,OAASrC,oBAAoBqC,SAC/D,IAAK,IAAIhP,EAAI,EAAGc,EAAI1I,KAAKrB,OAAQiJ,EAAIc,EAAGd,IAAK,CAC3CoJ,UAAUhO,KAAK6N,SAAW,IAC1BA,SAASI,YAAcF,MAAQ/Q,KAAK4H,IAAIqJ,WACxC,IAAK,IAAIrS,EAAI,EAAGkD,EAAIiP,MAAMpS,OAAQC,EAAIkD,EAAGlD,KAClCgG,KAAOmM,MAAMnS,KAAOgY,OAAO/S,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,IAC3DiJ,SAAS7N,KAAK4B,MAIpB,OAAOgL,aAAaoB,YAOtBlB,sBAAsBrC,MAAQ,WAC5B,IAAK,IAAI7F,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GACtC,IAAK,IAA4D9D,KAAxDmM,MAAQ/Q,KAAK4H,GAAIhJ,EAAImS,MAAMpS,OAAS,EAAG2D,KAAOyO,MAAMnS,KAAYA,GAAK,IACxEgG,KAAOmM,MAAMnS,MACX0D,MAAQA,OAASsC,KAAKiS,aAAavU,KAAK2O,WAAW6E,aAAalR,KAAMtC,MAC1EA,KAAOsC,MAIb,OAAO5E,MAET8P,sBAAsBvH,KAAO,SAASkM,YACpCA,WAAaD,4BAA4BrU,MAAMH,KAAME,WACrD,IAAK,IAAI0H,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GAAK1I,KAAK4H,GAAGW,KAAKkM,YAC1D,OAAOzU,KAAKyN,SAQdqC,sBAAsBmF,KAAO,SAASN,UACpC,OAAOD,kBAAkB1U,MAAM,SAAS4E,KAAMhG,EAAGgJ,GAC/C+M,SAAS9Q,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,OAW1CkI,sBAAsBjM,KAAO,SAAS8Q,UACpC,IAAI1U,KAAOsE,SAASrE,WAEpB,OADAyU,SAASxU,MAAMF,KAAK,GAAKD,KAAMC,MACxBD,MAET8P,sBAAsBjD,MAAQ,WAC5B,OAAQ7M,KAAK4E,QAEfkL,sBAAsBlL,KAAO,WAC3B,IAAK,IAAIgD,EAAI,EAAGc,EAAI1I,KAAKrB,OAAQiJ,EAAIc,EAAGd,IACtC,IAAK,IAAImJ,MAAQ/Q,KAAK4H,GAAIhJ,EAAI,EAAGkD,EAAIiP,MAAMpS,OAAQC,EAAIkD,EAAGlD,IAAK,CAC7D,IAAIgG,KAAOmM,MAAMnS,GACjB,GAAIgG,KAAM,OAAOA,KAGrB,OAAO,MAETkL,sBAAsBhE,KAAO,WAC3B,IAAIhK,EAAI,EAIR,OAHA4S,kBAAkB1U,MAAM,aACpB8B,KAEGA,GAMT,IAAI+S,4BAA8B,GA6BlC,SAASiC,+BAA+BL,OACtC,IAAIrN,GAAI2N,GACR,OAAO,SAAStO,EAAG7J,EAAGgJ,GACpB,IAA+ChD,KAA3CmM,MAAQ0F,MAAM7O,GAAG4O,OAAQ1U,EAAIiP,MAAMpS,OAGvC,IAFIiJ,GAAKmP,KAAIA,GAAKnP,EAAGwB,GAAK,GACtBxK,GAAKwK,KAAIA,GAAKxK,EAAI,KACbgG,KAAOmM,MAAM3H,QAAUA,GAAKtH,IACrC,OAAO8C,MAsCX,SAASoS,gBAAgB5H,KAAMb,SAAU0I,SACvC,IAAIjT,KAAO,OAASoL,KAAMxQ,EAAIwQ,KAAKZ,QAAQ,KAAM0I,KAAOC,wBACpDvY,EAAI,IAAGwQ,KAAOA,KAAKtL,MAAM,EAAGlF,IAChC,IAAIgY,OAASQ,uBAAuBzK,IAAIyC,MAExC,SAASiI,WACP,IAAIjJ,EAAIpO,KAAKgE,MACToK,IACFpO,KAAKsX,oBAAoBlI,KAAMhB,EAAGA,EAAEmJ,UAC7BvX,KAAKgE,OAmBhB,OAxBI4S,SAAQxH,KAAOwH,OAAQM,KAAOM,uBAwB3B5Y,EAAI2P,SAhBX,SAASkJ,QACP,IAAIrJ,EAAI8I,KAAK3I,SAAUhK,SAASrE,YAChCmX,SAASxT,KAAK7D,MACdA,KAAK0X,iBAAiBtI,KAAMpP,KAAKgE,MAAQoK,EAAGA,EAAEmJ,EAAIN,SAClD7I,EAAEtD,EAAIyD,UAYsB8I,SAAW9I,SAAWV,QAVpD,SAAS8J,YACP,IAA8DC,MAA1D5E,GAAK,IAAIP,OAAO,eAAiBrO,GAAGkL,QAAQF,MAAQ,KACxD,IAAK,IAAIpL,QAAQhE,KACf,GAAI4X,MAAQ5T,KAAK4T,MAAM5E,IAAK,CAC1B,IAAI5E,EAAIpO,KAAKgE,MACbhE,KAAKsX,oBAAoBM,MAAM,GAAIxJ,EAAGA,EAAEmJ,UACjCvX,KAAKgE,QAjGpBI,GAAGoM,UAAUiG,MAAQ7B,mBACrBxQ,GAAGoM,UAAUiG,MAAMnV,UAAYuT,4BAC/BA,4BAA4Ba,OAAS5F,sBAAsB4F,OAC3Db,4BAA4BhI,MAAQiD,sBAAsBjD,MAC1DgI,4BAA4BjQ,KAAOkL,sBAAsBlL,KACzDiQ,4BAA4BhR,KAAOiM,sBAAsBjM,KACzDgR,4BAA4B/I,KAAOgE,sBAAsBhE,KACzD+I,4BAA4BpE,OAAS,SAASE,UAE5C,IADA,IAAoBE,SAAUC,QAAS+G,QAAS9G,MAAOnM,KAAnDoM,UAAY,GACPpJ,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GAAK,CAC3CmP,SAAW9G,MAAQ/Q,KAAK4H,IAAI4O,OAC5BxF,UAAUhO,KAAK6N,SAAW,IAC1BA,SAASI,WAAaF,MAAME,WAC5B,IAAK,IAAIrS,GAAK,EAAGkD,EAAIiP,MAAMpS,SAAUC,EAAIkD,IACnC8C,KAAOmM,MAAMnS,KACfiS,SAAS7N,KAAK6U,QAAQjZ,GAAKkS,QAAUH,SAAS9M,KAAKkN,MAAME,WAAYrM,KAAKsM,SAAUtS,EAAGgJ,IACvFkJ,QAAQI,SAAWtM,KAAKsM,UAExBL,SAAS7N,KAAK,MAIpB,OAAO4M,aAAaoB,YAEtB6D,4BAA4Be,OAAS,SAAS5R,KAAM6R,QAElD,OADI3V,UAAUvB,OAAS,IAAGkX,OAASiB,+BAA+B9W,OAC3D8P,sBAAsB8F,OAAO/R,KAAK7D,KAAMgE,KAAM6R,SAYvDzR,GAAGqM,OAAS,SAAS7L,MACnB,IAAImM,MAQJ,MAPoB,iBAATnM,MACTmM,MAAQ,CAAEhB,UAAUnL,KAAMH,eACpBwM,WAAaxM,YAAYK,iBAE/BiM,MAAQ,CAAEnM,OACJqM,WAAatM,mBAAmBC,MAEjCgL,aAAa,CAAEmB,SAExB3M,GAAG+M,UAAY,SAAS2G,OACtB,IAAI/G,MAQJ,MAPqB,iBAAV+G,OACT/G,MAAQxM,SAAS0L,aAAa6H,MAAOrT,eAC/BwM,WAAaxM,YAAYK,iBAE/BiM,MAAQxM,SAASuT,QACX7G,WAAa,KAEdrB,aAAa,CAAEmB,SAExBjB,sBAAsBxB,GAAK,SAASc,KAAMb,SAAU0I,SAClD,IAAInV,EAAI5B,UAAUvB,OAClB,GAAImD,EAAI,EAAG,CACT,GAAoB,iBAATsN,KAAmB,CAE5B,IAAK6H,WADDnV,EAAI,IAAGyM,UAAW,GACNa,KAAMpP,KAAKiV,KAAK+B,gBAAgBC,QAAS7H,KAAK6H,SAAU1I,WACxE,OAAOvO,KAET,GAAI8B,EAAI,EAAG,OAAQA,EAAI9B,KAAK4E,OAAO,OAASwK,QAAUtN,EAAEgJ,EACxDmM,SAAU,EAEZ,OAAOjX,KAAKiV,KAAK+B,gBAAgB5H,KAAMb,SAAU0I,WAgCnD,IAAIG,uBAAyBhT,GAAG8F,IAAI,CAClC6N,WAAY,YACZC,WAAY,aAOd,SAASb,wBAAwB5I,SAAUU,WACzC,OAAO,SAASlN,GACd,IAAIP,EAAI4C,GAAG+J,MACX/J,GAAG+J,MAAQpM,EACXkN,UAAU,GAAKjP,KAAKkR,SACpB,IACE3C,SAASpO,MAAMH,KAAMiP,WACrB,QACA7K,GAAG+J,MAAQ3M,IAIjB,SAASgW,sBAAsBjJ,SAAUU,WACvC,IAAIb,EAAI+I,wBAAwB5I,SAAUU,WAC1C,OAAO,SAASlN,GACd,IAAmBkW,QAAUlW,EAAEmW,cAC1BD,UAAWA,UADHjY,MACqE,EAA1CiY,QAAQE,wBADnCnY,QAEXoO,EAAEvK,KAFS7D,KAEI+B,IAtBjB0C,aACF2S,uBAAuB9L,SAAQ,SAASb,GAClC,KAAOA,KAAKhG,aAAa2S,uBAAuBxK,OAAOnC,MAwB/D,IAAI2N,oBAAqBC,gBAAkB,EAC3C,SAASC,sBAAsB1T,MAC7B,IAAIZ,KAAO,oBAAqBqU,gBAAiBE,MAAQ,QAAUvU,KAAMwU,EAAIpU,GAAGqM,OAAO1L,UAAUH,OAAO0J,GAAG,YAActK,KAAM0K,wBAAwBJ,GAAG,YAActK,KAAM0K,wBAAwBJ,GAAG,cAAgBtK,KAAM0K,wBAI/N,GAH2B,MAAvB0J,sBACFA,sBAAsB,kBAAmBxT,OAAeyH,gBAAgBzH,KAAKW,MAAO,eAElF6S,oBAAqB,CACvB,IAAI7S,MAAQZ,mBAAmBC,MAAMW,MAAOkL,OAASlL,MAAM6S,qBAC3D7S,MAAM6S,qBAAuB,OAE/B,OAAO,SAASK,eAGd,GAFAD,EAAElK,GAAGtK,KAAM,MACPoU,sBAAqB7S,MAAM6S,qBAAuB3H,QAClDgI,cAAe,CACjB,IAAIC,IAAM,WACRF,EAAElK,GAAGiK,MAAO,OAEdC,EAAElK,GAAGiK,OAAO,WACV7J,yBACAgK,SACC,GACHC,WAAWD,IAAK,KAItBtU,GAAGwU,MAAQ,SAASC,WAClB,OAAOC,cAAcD,UAAWjK,mBAElC,IAAImK,kBAAoB/Y,KAAKgZ,WAAa,SAAS/U,KAAKjE,KAAKgZ,UAAUC,YAAc,EAAI,EACzF,SAASH,cAAcD,UAAW9W,GAC5BA,EAAEmX,iBAAgBnX,EAAIA,EAAEmX,eAAe,IAC3C,IAAI5H,IAAMuH,UAAUM,iBAAmBN,UACvC,GAAIvH,IAAI8H,eAAgB,CACtB,IAAIC,MAAQ/H,IAAI8H,iBAChB,GAAIL,kBAAoB,EAAG,CACzB,IAAIO,OAASvU,UAAU8T,WACvB,GAAIS,OAAOC,SAAWD,OAAOE,QAAS,CASpC,IAAIC,KARJnI,IAAMlN,GAAGqM,OAAO,QAAQiF,OAAO,OAAOnQ,MAAM,CAC1CmU,SAAU,WACVC,IAAK,EACL5S,KAAM,EACN6S,OAAQ,EACRC,QAAS,EACTC,OAAQ,QACP,cACW,GAAG,GAAGC,eACpBhB,oBAAsBU,IAAIxX,GAAKwX,IAAI1X,GACnCuP,IAAI1E,UAMR,OAHImM,mBAAmBM,MAAM3S,EAAI3E,EAAEiY,MAAOX,MAAMY,EAAIlY,EAAEmY,QAAYb,MAAM3S,EAAI3E,EAAEoY,QAC9Ed,MAAMY,EAAIlY,EAAEqY,SAEL,EADPf,MAAQA,MAAMgB,gBAAgBxB,UAAUkB,eAAeO,YACxC5T,EAAG2S,MAAMY,GAE1B,IAAIM,KAAO1B,UAAU2B,wBACrB,MAAO,CAAEzY,EAAEoY,QAAUI,KAAKxT,KAAO8R,UAAU4B,WAAY1Y,EAAEqY,QAAUG,KAAKZ,IAAMd,UAAU6B,WA2D1F,SAASC,0BACP,OAAOvW,GAAG+J,MAAM+K,eAAe,GAAG0B,WA1DpCxW,GAAGyW,MAAQ,SAAShC,UAAWiC,QAASF,YAEtC,GADI1a,UAAUvB,OAAS,IAAGic,WAAaE,QAASA,QAAUlM,iBAAiBsK,gBACvE4B,QAAS,IAAK,IAA+BD,MAA3Bjc,EAAI,EAAGkD,EAAIgZ,QAAQnc,OAAeC,EAAIkD,IAAKlD,EAC/D,IAAKic,MAAQC,QAAQlc,IAAIgc,aAAeA,WACtC,OAAO9B,cAAcD,UAAWgC,QAItCzW,GAAGuJ,SAASoN,KAAO,WACjB,IAAI5M,MAAQW,iBAAiBiM,KAAM,OAAQ,YAAa,WAAYC,OAAS,KAAMC,UAAYC,UAAUrN,QAASzJ,GAAGwU,MAAO7T,UAAW,YAAa,WAAYoW,WAAaD,UAAUP,wBAAyBvW,GAAGyW,MAAO5O,YAAa,YAAa,YACpP,SAAS8O,OACP/a,KAAKsO,GAAG,iBAAkB2M,WAAW3M,GAAG,kBAAmB6M,YAE7D,SAASD,UAAUE,GAAI1B,SAAU2B,QAASC,KAAMC,KAC9C,OAAO,WACL,IAA0OC,WAAtOC,KAAOzb,KAAMW,OAASyD,GAAG+J,MAAMxN,OAAO+a,sBAAwBtX,GAAG+J,MAAMxN,OAAQwT,OAASsH,KAAKxK,WAAYjD,SAAWG,MAAMY,GAAG0M,KAAMvb,WAAYyb,QAAU,EAAGC,OAASR,KAAMS,SAAW,SAAqB,MAAVD,OAAiB,GAAK,IAAMA,QAAqBE,YAAc1X,GAAGqM,OAAO4K,QAAQ1a,SAAS2N,GAAGgN,KAAOO,SAAUE,OAAOzN,GAAGiN,IAAMM,SAAUG,OAAQC,YAAc3D,sBAAsB3X,QAASub,UAAYxC,SAASvF,OAAQyH,QAU/Z,SAASG,QACP,IAA0CI,GAAIC,GAA1CC,UAAY3C,SAASvF,OAAQyH,QAC5BS,YACLF,GAAKE,UAAU,GAAKH,UAAU,GAC9BE,GAAKC,UAAU,GAAKH,UAAU,GAC9BP,SAAWQ,GAAKC,GAChBF,UAAYG,UACZrO,SAAS,CACPoB,KAAM,OACN1I,EAAG2V,UAAU,GAAKb,WAAW,GAC7BvB,EAAGoC,UAAU,GAAKb,WAAW,GAC7BW,GAAIA,GACJC,GAAIA,MAGR,SAASJ,QACFtC,SAASvF,OAAQyH,UACtBE,YAAYxN,GAAGgN,KAAOO,SAAU,MAAMvN,GAAGiN,IAAMM,SAAU,MACzDI,YAAYN,SACZ3N,SAAS,CACPoB,KAAM,aA3BRoM,WAFER,OAEW,EADbQ,WAAaR,OAAO7a,MAAMsb,KAAMvb,YACNwG,EAAIwV,UAAU,GAAIV,WAAWvB,EAAIiC,UAAU,IAExD,CAAE,EAAG,GAEpBlO,SAAS,CACPoB,KAAM,eAgCZ,OALA2L,KAAKC,OAAS,SAAStU,GACrB,OAAKxG,UAAUvB,QACfqc,OAAStU,EACFqU,MAFuBC,QAIzB5W,GAAGwJ,OAAOmN,KAAM5M,MAAO,OAKhC/J,GAAG0W,QAAU,SAASjC,UAAWiC,SAE/B,OADI5a,UAAUvB,OAAS,IAAGmc,QAAUlM,iBAAiBkM,SAC9CA,QAAUvW,SAASuW,SAAS5Q,KAAI,SAAS2Q,OAC9C,IAAIxB,MAAQP,cAAcD,UAAWgC,OAErC,OADAxB,MAAMuB,WAAaC,MAAMD,WAClBvB,SACJ,IAEP,IAAI,EAAI,KAAM,GAAK,EAAI,EAAG,EAAInR,KAAKoU,GAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAG,MAAQ,EAAI,EAAGC,WAAa,EAAI,IAAKC,WAAa,IAAM,EACtH,SAASC,OAAO/V,GACd,OAAOA,EAAI,EAAI,EAAIA,EAAI,GAAK,EAAI,EAElC,SAASgW,WAAWpW,EAAGC,EAAGkB,GACxB,OAAQlB,EAAE,GAAKD,EAAE,KAAOmB,EAAE,GAAKnB,EAAE,KAAOC,EAAE,GAAKD,EAAE,KAAOmB,EAAE,GAAKnB,EAAE,IAEnE,SAASqW,QAAQjW,GACf,OAAOA,EAAI,EAAI,EAAIA,GAAK,EAAI,EAAIwB,KAAK0U,KAAKlW,GAE5C,SAASmW,QAAQnW,GACf,OAAOA,EAAI,EAAI,MAAQA,GAAK,GAAK,MAAQwB,KAAK4U,KAAKpW,GAKrD,SAASqW,QAAQrW,GACf,QAASA,EAAIwB,KAAK8U,IAAItW,IAAM,EAAIA,GAAK,EAKvC,SAASuW,YAAYvW,GACnB,OAAQA,EAAIwB,KAAKgV,IAAIxW,EAAI,IAAMA,EAEjC,IAAI,EAAIwB,KAAKiV,MACb/Y,GAAGgZ,gBAAkB,SAASC,GAAIzT,IAChC,IAAwIhL,EAAG0e,EAAvIC,IAAMF,GAAG,GAAIG,IAAMH,GAAG,GAAII,GAAKJ,GAAG,GAAIK,IAAM9T,GAAG,GAAI+T,IAAM/T,GAAG,GAAIgU,GAAKhU,GAAG,GAAIuS,GAAKuB,IAAMH,IAAKnB,GAAKuB,IAAMH,IAAKK,GAAK1B,GAAKA,GAAKC,GAAKA,GACpI,GAAIyB,GAAK,GACPP,EAAIpV,KAAK4V,IAAIF,GAAKH,IAAM,EACxB7e,EAAI,SAAS0K,GACX,MAAO,CAAEiU,IAAMjU,EAAI6S,GAAIqB,IAAMlU,EAAI8S,GAAIqB,GAAKvV,KAAK8U,IAAI,EAAI1T,EAAIgU,SAExD,CACL,IAAIS,GAAK7V,KAAKU,KAAKiV,IAAKG,IAAMJ,GAAKA,GAAKH,GAAKA,GAThB,EAS0BI,KAAO,EAAIJ,GAT7C,EASuDM,IAAKE,IAAML,GAAKA,GAAKH,GAAKA,GATzE,EASmFI,KAAO,EAAID,GATtG,EASgHG,IAAKG,GAAKhW,KAAK4V,IAAI5V,KAAKU,KAAKoV,GAAKA,GAAK,GAAKA,IAAKG,GAAKjW,KAAK4V,IAAI5V,KAAKU,KAAKqV,GAAKA,GAAK,GAAKA,IAC7NX,GAAKa,GAAKD,IAAM,EAChBtf,EAAI,SAAS0K,GACX,IAAIzH,EAAIyH,EAAIgU,EAAGc,OAASrB,QAAQmB,IAAKG,EAAIZ,IAZtB,EAYiCM,KAAOK,OAlBjE,SAASE,QAAQ5X,GACf,QAASA,EAAIwB,KAAK8U,IAAI,EAAItW,IAAM,IAAMA,EAAI,GAiB8B4X,CAAQ,EAAIzc,EAAIqc,IAxB1F,SAASK,QAAQ7X,GACf,QAASA,EAAIwB,KAAK8U,IAAItW,IAAM,EAAIA,GAAK,EAuByD6X,CAAQL,KAClG,MAAO,CAAEX,IAAMc,EAAIlC,GAAIqB,IAAMa,EAAIjC,GAAIqB,GAAKW,OAASrB,QAAQ,EAAIlb,EAAIqc,MAIvE,OADAtf,EAAE4f,SAAe,IAAJlB,EACN1e,GAETwF,GAAGuJ,SAAS8Q,KAAO,WACjB,IAIGC,WAAYC,QAASC,OAAwLC,gBAAiDC,UAA2EC,GAAIC,GAAIC,GAAIC,GAJpVC,KAAO,CACTzY,EAAG,EACHuT,EAAG,EACHxP,EAAG,GAC2BqB,KAAO,CAAE,IAAK,KAAOsT,YAAcC,yBAA0Bb,SAAW,IAAKc,QAAU,EAAGrE,UAAY,iBAAkBsE,UAAY,iBAAkBC,QAAU,eAAiCrE,WAAa,kBAA8BhN,MAAQW,iBAAiB2P,KAAM,YAAa,OAAQ,WAUhU,SAASA,KAAKgB,GACZA,EAAEnR,GAAG2M,UAAWyE,aAAapR,GAAGqR,sBAAwB,QAASC,cAActR,GAAG,gBAAiBuR,YAAYvR,GAAG6M,WAAY2E,cAoGhI,SAASC,SAAShY,GAChB,MAAO,EAAGA,EAAE,GAAKoX,KAAKzY,GAAKyY,KAAK1U,GAAI1C,EAAE,GAAKoX,KAAKlF,GAAKkF,KAAK1U,GAK5D,SAASuV,QAAQne,GACfsd,KAAK1U,EAAIvC,KAAKX,IAAI6X,YAAY,GAAIlX,KAAKZ,IAAI8X,YAAY,GAAIvd,IAE7D,SAASoe,YAAYlY,EAAGqG,GACtBA,EAPF,SAASiL,MAAMjL,GACb,MAAO,CAAEA,EAAE,GAAK+Q,KAAK1U,EAAI0U,KAAKzY,EAAG0H,EAAE,GAAK+Q,KAAK1U,EAAI0U,KAAKlF,GAMlDZ,CAAMjL,GACV+Q,KAAKzY,GAAKqB,EAAE,GAAKqG,EAAE,GACnB+Q,KAAKlF,GAAKlS,EAAE,GAAKqG,EAAE,GAErB,SAAS8R,OAAOzE,KAAM1T,EAAGqG,EAAG3D,GAC1BgR,KAAK0E,UAAY,CACfzZ,EAAGyY,KAAKzY,EACRuT,EAAGkF,KAAKlF,EACRxP,EAAG0U,KAAK1U,GAEVuV,QAAQ9X,KAAKkY,IAAI,EAAG3V,IACpBwV,YAAYtB,QAAU5W,EAAGqG,GACzBqN,KAAOrX,GAAGqM,OAAOgL,MACb+C,SAAW,IAAG/C,KAAOA,KAAK4E,aAAa7B,SAASA,WACpD/C,KAAK5X,KAAK4a,KAAKtQ,OAEjB,SAASmS,UACHtB,IAAIA,GAAGuB,OAAOxB,GAAG/T,QAAQd,KAAI,SAASxD,GACxC,OAAQA,EAAIyY,KAAKzY,GAAKyY,KAAK1U,KAC1BP,IAAI6U,GAAGyB,SACNtB,IAAIA,GAAGqB,OAAOtB,GAAGjU,QAAQd,KAAI,SAAS+P,GACxC,OAAQA,EAAIkF,KAAKlF,GAAKkF,KAAK1U,KAC1BP,IAAI+U,GAAGuB,SAEZ,SAASC,YAAYzS,UACdsR,WAAWtR,SAAS,CACvBoB,KAAM,cAGV,SAASsR,OAAO1S,UACdsS,UACAtS,SAAS,CACPoB,KAAM,OACNuR,MAAOxB,KAAK1U,EACZmW,UAAW,CAAEzB,KAAKzY,EAAGyY,KAAKlF,KAG9B,SAAS4G,UAAU7S,YACVsR,UAAStR,SAAS,CACvBoB,KAAM,YACJuP,QAAU,MAEhB,SAASe,cACP,IAAIjE,KAAOzb,KAAMgO,SAAWG,MAAMY,GAAG0M,KAAMvb,WAAYyb,QAAU,EAAGN,QAAUjX,GAAGqM,OAAO1L,UAAU0W,OAAOnN,GAAGiR,UAAWxD,OAAOzN,GAAGkR,QAASxD,OAAQ8E,UAAYf,SAAS3b,GAAGwU,MAAM6C,OAAQQ,YAAc3D,sBAAsBmD,MAG5N,SAASM,QACPJ,QAAU,EACVsE,YAAY7b,GAAGwU,MAAM6C,MAAOqF,WAC5BJ,OAAO1S,UAET,SAASgO,QACPX,QAAQ/M,GAAGiR,UAAW,MAAMjR,GAAGkR,QAAS,MACxCvD,YAAYN,SACZkF,UAAU7S,UAVZ+S,uBAAuBld,KAAK4X,MAC5BgF,YAAYzS,UAYd,SAAS8R,eACP,IAAuFkB,OAAnFvF,KAAOzb,KAAMgO,SAAWG,MAAMY,GAAG0M,KAAMvb,WAAY+gB,WAAa,GAAIC,UAAY,EAAWC,SAAW,SAAW/c,GAAG+J,MAAM+K,eAAe,GAAG0B,WAAYwG,UAAY,YAAcD,SAAUE,SAAW,WAAaF,SAAUG,QAAU,GAAIjG,QAAUjX,GAAGqM,OAAOgL,MAAOQ,YAAc3D,sBAAsBmD,MAI/S,SAAS8F,WACP,IAAIzG,QAAU1W,GAAG0W,QAAQW,MAKzB,OAJAuF,OAAS7B,KAAK1U,EACdqQ,QAAQxP,SAAQ,SAAShC,GACnBA,EAAEsR,cAAcqG,aAAYA,WAAW3X,EAAEsR,YAAcmF,SAASzW,OAE/DwR,QAET,SAAS0G,UACP,IAAI7gB,OAASyD,GAAG+J,MAAMxN,OACtByD,GAAGqM,OAAO9P,QAAQ2N,GAAG8S,UAAWrF,OAAOzN,GAAG+S,SAAUrF,OACpDsF,QAAQte,KAAKrC,QAEb,IADA,IAAI8gB,QAAUrd,GAAG+J,MAAM+K,eACdta,EAAI,EAAGkD,EAAI2f,QAAQ9iB,OAAQC,EAAIkD,IAAKlD,EAC3CqiB,WAAWQ,QAAQ7iB,GAAGgc,YAAc,KAEtC,IAAIE,QAAUyG,WAAYlc,IAAMD,KAAKC,MACrC,GAAuB,IAAnByV,QAAQnc,OAAc,CACxB,GAAI0G,IAAMyZ,UAAY,IAAK,CACzB,IAAI/W,EAAI+S,QAAQ,GAChBoF,OAAOzE,KAAM1T,EAAGkZ,WAAWlZ,EAAE6S,YAAa1S,KAAKC,MAAMD,KAAK4V,IAAIqB,KAAK1U,GAAKvC,KAAKwZ,KAAO,GACpFhT,yBAEFoQ,UAAYzZ,SACP,GAAIyV,QAAQnc,OAAS,EAAG,CACzBoJ,EAAI+S,QAAQ,GAAhB,IAAoB6G,EAAI7G,QAAQ,GAAIqB,GAAKpU,EAAE,GAAK4Z,EAAE,GAAIvF,GAAKrU,EAAE,GAAK4Z,EAAE,GACpET,UAAY/E,GAAKA,GAAKC,GAAKA,IAG/B,SAASL,QACP,IAAgCsB,GAAIuE,GAAIhY,GAAIiY,GAAxC/G,QAAU1W,GAAG0W,QAAQW,MACzBsF,uBAAuBld,KAAK4X,MAC5B,IAAK,IAAI7c,EAAI,EAAGkD,EAAIgZ,QAAQnc,OAAQC,EAAIkD,IAAKlD,EAAGijB,GAAK,KAEnD,GADAjY,GAAKkR,QAAQlc,GACTijB,GAAKZ,WAAWrX,GAAGgR,YAAa,CAClC,GAAIgH,GAAI,MACRvE,GAAKzT,GAAIgY,GAAKC,GAGlB,GAAIA,GAAI,CACN,IAAIC,WAAaA,UAAYlY,GAAG,GAAKyT,GAAG,IAAMyE,WAAaA,UAAYlY,GAAG,GAAKyT,GAAG,IAAMyE,UAAWC,OAASb,WAAahZ,KAAKU,KAAKkZ,UAAYZ,WAC/I7D,GAAK,EAAGA,GAAG,GAAKzT,GAAG,IAAM,GAAIyT,GAAG,GAAKzT,GAAG,IAAM,GAC9CgY,GAAK,EAAGA,GAAG,GAAKC,GAAG,IAAM,GAAID,GAAG,GAAKC,GAAG,IAAM,GAC9C7B,QAAQ+B,OAASf,QAEnBlC,UAAY,KACZmB,YAAY5C,GAAIuE,IAChBlB,OAAO1S,UAET,SAASgO,QACP,GAAI5X,GAAG+J,MAAM2M,QAAQnc,OAAQ,CAE3B,IADA,IAAI8iB,QAAUrd,GAAG+J,MAAM+K,eACdta,EAAI,EAAGkD,EAAI2f,QAAQ9iB,OAAQC,EAAIkD,IAAKlD,SACpCqiB,WAAWQ,QAAQ7iB,GAAGgc,YAE/B,IAAK,IAAIA,cAAcqG,WACrB,YAAYM,WAGhBnd,GAAG+M,UAAUmQ,SAAShT,GAAG6S,SAAU,MACnC9F,QAAQ/M,GAAG2M,UAAWyE,aAAapR,GAAG6M,WAAY2E,cAClD7D,cACA4E,UAAU7S,UAjEZwT,UACAf,YAAYzS,UACZqN,QAAQ/M,GAAG2M,UAAW,MAAM3M,GAAG6M,WAAYqG,SAkE7C,SAAS5B,eACP,IAAI5R,SAAWG,MAAMY,GAAG/O,KAAME,WAC1B2e,gBAAiBmD,aAAanD,kBAAuBkC,uBAAuBld,KAAK7D,MACrF0e,WAAaqB,SAASpB,QAAUC,QAAUxa,GAAGwU,MAAM5Y,OAAQygB,YAAYzS,WACvE6Q,gBAAkBlG,YAAW,WAC3BkG,gBAAkB,KAClBgC,UAAU7S,YACT,IACHU,yBACAsR,QAAQ9X,KAAKkY,IAAI,EAA6B,KAA1B6B,yBAAkC9C,KAAK1U,GAC3DwV,YAAYtB,QAASD,YACrBgC,OAAO1S,UAET,SAAS6R,aACP,IAAI9X,EAAI3D,GAAGwU,MAAM5Y,MAAOyK,EAAIvC,KAAK4V,IAAIqB,KAAK1U,GAAKvC,KAAKwZ,IACpDxB,OAAOlgB,KAAM+H,EAAGgY,SAAShY,GAAI3D,GAAG+J,MAAM+T,SAAWha,KAAKia,KAAK1X,GAAK,EAAIvC,KAAKC,MAAMsC,GAAK,GAEtF,OAxQKkV,wBACHA,sBAAwB,YAAalb,aAAewd,sBAAwB,WAC1E,OAAQ7d,GAAG+J,MAAMiU,QAAUhe,GAAG+J,MAAMkU,UAAY,IAAM,IACrD,SAAW,iBAAkB5d,aAAewd,sBAAwB,WACrE,OAAO7d,GAAG+J,MAAMmU,YACf,eAAiBL,sBAAwB,WAC1C,OAAQ7d,GAAG+J,MAAMoU,QAChB,wBAKL9D,KAAKtQ,MAAQ,SAASsR,GACpBA,EAAExK,MAAK,WACL,IAAIjH,SAAWG,MAAMY,GAAG/O,KAAME,WAAYsiB,MAAQrD,KAC9CsD,uBACFre,GAAGqM,OAAOzQ,MAAMqgB,aAAapL,KAAK,cAAc,WAC9CkK,KAAOnf,KAAKmgB,WAAa,CACvBzZ,EAAG,EACHuT,EAAG,EACHxP,EAAG,GAELgW,YAAYzS,aACX0U,MAAM,aAAa,WACpB,IAAIvG,GAAKrQ,KAAK,GAAIsQ,GAAKtQ,KAAK,GAAI6W,GAAKhE,QAAUA,QAAQ,GAAKxC,GAAK,EAAGyG,GAAKjE,QAAUA,QAAQ,GAAKvC,GAAK,EAAGxd,EAAIwF,GAAGgZ,gBAAgB,EAAGuF,GAAKxD,KAAKzY,GAAKyY,KAAK1U,GAAImY,GAAKzD,KAAKlF,GAAKkF,KAAK1U,EAAG0R,GAAKgD,KAAK1U,GAAK,EAAGkY,GAAKH,MAAM9b,GAAK8b,MAAM/X,GAAImY,GAAKJ,MAAMvI,GAAKuI,MAAM/X,EAAG0R,GAAKqG,MAAM/X,IACjQ,OAAO,SAASnB,GACd,IAAI8E,EAAIxP,EAAE0K,GAAImB,EAAI0R,GAAK/N,EAAE,GACzBpO,KAAKmgB,UAAYhB,KAAO,CACtBzY,EAAGic,GAAKvU,EAAE,GAAK3D,EACfwP,EAAG2I,GAAKxU,EAAE,GAAK3D,EACfA,EAAGA,GAELiW,OAAO1S,cAERiH,KAAK,kBAAkB,WACxB4L,UAAU7S,aACTiH,KAAK,YAAY,WAClB4L,UAAU7S,cAGZhO,KAAKmgB,UAAYhB,KACjBsB,YAAYzS,UACZ0S,OAAO1S,UACP6S,UAAU7S,eAIhByQ,KAAKmC,UAAY,SAAS9V,GACxB,OAAK5K,UAAUvB,QACfwgB,KAAO,CACLzY,GAAIoE,EAAE,GACNmP,GAAInP,EAAE,GACNL,EAAG0U,KAAK1U,GAEV6V,UACO7B,MAPuB,CAAEU,KAAKzY,EAAGyY,KAAKlF,IAS/CwE,KAAKkC,MAAQ,SAAS7V,GACpB,OAAK5K,UAAUvB,QACfwgB,KAAO,CACLzY,EAAGyY,KAAKzY,EACRuT,EAAGkF,KAAKlF,EACRxP,EAAG,MAELuV,SAASlV,GACTwV,UACO7B,MARuBU,KAAK1U,GAUrCgU,KAAKW,YAAc,SAAStU,GAC1B,OAAK5K,UAAUvB,QACfygB,YAAmB,MAALtU,EAAYuU,yBAA2B,EAAGvU,EAAE,IAAKA,EAAE,IAC1D2T,MAFuBW,aAIhCX,KAAKG,OAAS,SAAS9T,GACrB,OAAK5K,UAAUvB,QACfigB,OAAS9T,GAAK,EAAGA,EAAE,IAAKA,EAAE,IACnB2T,MAFuBG,QAIhCH,KAAK3S,KAAO,SAAShB,GACnB,OAAK5K,UAAUvB,QACfmN,KAAOhB,GAAK,EAAGA,EAAE,IAAKA,EAAE,IACjB2T,MAFuB3S,MAIhC2S,KAAKD,SAAW,SAAS1T,GACvB,OAAK5K,UAAUvB,QACf6f,UAAY1T,EACL2T,MAFuBD,UAIhCC,KAAK/X,EAAI,SAAS2H,GAChB,OAAKnO,UAAUvB,QACfqgB,GAAK3Q,EACL0Q,GAAK1Q,EAAEwU,OACP1D,KAAO,CACLzY,EAAG,EACHuT,EAAG,EACHxP,EAAG,GAEEgU,MARuBO,IAUhCP,KAAKxE,EAAI,SAAS5L,GAChB,OAAKnO,UAAUvB,QACfugB,GAAK7Q,EACL4Q,GAAK5Q,EAAEwU,OACP1D,KAAO,CACLzY,EAAG,EACHuT,EAAG,EACHxP,EAAG,GAEEgU,MARuBS,IAoKzB9a,GAAGwJ,OAAO6Q,KAAMtQ,MAAO,OAEhC,IAAgD8T,sBAAuBtC,sBAAnEN,yBAA2B,CAAE,EAAGlU,KAEpC,SAAS2X,YAKT,SAASC,OAAO9a,EAAGpG,EAAGuM,GACpB,OAAOpO,gBAAgB+iB,QAAe/iB,KAAKiI,GAAKA,EAAGjI,KAAK6B,GAAKA,OAAG7B,KAAKoO,GAAKA,IAAKlO,UAAUvB,OAAS,EAAIsJ,aAAa8a,OAAS,IAAIA,OAAO9a,EAAEA,EAAGA,EAAEpG,EAAGoG,EAAEmG,GAAK4U,aAAa,GAAK/a,EAAGgb,WAAYF,QAAU,IAAIA,OAAO9a,EAAGpG,EAAGuM,GAPtNhK,GAAG8e,MAAQJ,SAEXA,SAASxhB,UAAUsC,SAAW,WAC5B,OAAO5D,KAAKmjB,MAAQ,IAEtB/e,GAAGgf,IAAML,OAIT,IAAIM,gBAAkBN,OAAOzhB,UAAY,IAAIwhB,SAY7C,SAASQ,WAAWrb,EAAGpG,EAAGuM,GACxB,IAAImV,GAAIC,GAaR,SAASC,GAAGxb,GACV,OAAOC,KAAKwb,MAAa,IAR3B,SAAStb,EAAEH,GAET,OADIA,EAAI,IAAKA,GAAK,IAAcA,EAAI,IAAGA,GAAK,KACxCA,EAAI,GAAWsb,IAAMC,GAAKD,IAAMtb,EAAI,GACpCA,EAAI,IAAYub,GAChBvb,EAAI,IAAYsb,IAAMC,GAAKD,KAAO,IAAMtb,GAAK,GAC1Csb,GAGWnb,CAAEH,IAEtB,OAfAA,EAAIrB,MAAMqB,GAAK,GAAKA,GAAK,KAAO,EAAIA,EAAI,IAAMA,EAC9CpG,EAAI+E,MAAM/E,IAASA,EAAI,EAAR,EAAgBA,EAAI,EAAI,EAAIA,EAG3C0hB,GAAK,GAFLnV,EAAIA,EAAI,EAAI,EAAIA,EAAI,EAAI,EAAIA,IAC5BoV,GAAKpV,GAAK,GAAKA,GAAK,EAAIvM,GAAKuM,EAAIvM,EAAIuM,EAAIvM,GAYlC,IAAI8hB,OAAOF,GAAGxb,EAAI,KAAMwb,GAAGxb,GAAIwb,GAAGxb,EAAI,MAG/C,SAAS2b,OAAO3b,EAAGR,EAAG2G,GACpB,OAAOpO,gBAAgB4jB,QAAe5jB,KAAKiI,GAAKA,EAAGjI,KAAKyH,GAAKA,OAAGzH,KAAKoO,GAAKA,IAAKlO,UAAUvB,OAAS,EAAIsJ,aAAa2b,OAAS,IAAIA,OAAO3b,EAAEA,EAAGA,EAAER,EAAGQ,EAAEmG,GAA2ByV,WAAtB5b,aAAa6b,OAAoB7b,EAAEmG,GAA2BnG,EAAI8b,YAAY9b,EAAI7D,GAAG+e,IAAIlb,IAAI+b,EAAG/b,EAAEwX,EAAGxX,EAAE1B,IAAI6H,EAArEnG,EAAE3B,EAAG2B,EAAE1B,GAA6E,IAAIqd,OAAO3b,EAAGR,EAAG2G,GAhCrSiV,gBAAgBY,SAAW,SAASxZ,GAElC,OADAA,EAAIvC,KAAKkY,IAAI,GAAIlgB,UAAUvB,OAAS8L,EAAI,GACjC,IAAIsY,OAAO/iB,KAAKiI,EAAGjI,KAAK6B,EAAG7B,KAAKoO,EAAI3D,IAE7C4Y,gBAAgBa,OAAS,SAASzZ,GAEhC,OADAA,EAAIvC,KAAKkY,IAAI,GAAIlgB,UAAUvB,OAAS8L,EAAI,GACjC,IAAIsY,OAAO/iB,KAAKiI,EAAGjI,KAAK6B,EAAG4I,EAAIzK,KAAKoO,IAE7CiV,gBAAgBF,IAAM,WACpB,OAAOG,WAAWtjB,KAAKiI,EAAGjI,KAAK6B,EAAG7B,KAAKoO,IAqBzChK,GAAG+f,IAAMP,OAIT,IAAIQ,gBAAkBR,OAAOtiB,UAAY,IAAIwhB,SAU7C,SAASuB,WAAWpc,EAAGR,EAAG2G,GAGxB,OAFIxH,MAAMqB,KAAIA,EAAI,GACdrB,MAAMa,KAAIA,EAAI,GACX,IAAIqc,OAAO1V,EAAGlG,KAAKoc,IAAIrc,GAAKsU,YAAc9U,EAAGS,KAAKgV,IAAIjV,GAAKR,GAGpE,SAASqc,OAAO1V,EAAG9H,EAAGC,GACpB,OAAOvG,gBAAgB8jB,QAAe9jB,KAAKoO,GAAKA,EAAGpO,KAAKsG,GAAKA,OAAGtG,KAAKuG,GAAKA,IAAKrG,UAAUvB,OAAS,EAAIyP,aAAa0V,OAAS,IAAIA,OAAO1V,EAAEA,EAAGA,EAAE9H,EAAG8H,EAAE7H,GAAK6H,aAAawV,OAASS,WAAWjW,EAAEnG,EAAGmG,EAAE3G,EAAG2G,EAAEA,GAAK2V,YAAY3V,EAAIuV,OAAOvV,IAAI4V,EAAG5V,EAAEqR,EAAGrR,EAAE7H,GAAK,IAAIud,OAAO1V,EAAG9H,EAAGC,GAhBvQ6d,gBAAgBH,SAAW,SAASxZ,GAClC,OAAO,IAAImZ,OAAO5jB,KAAKiI,EAAGjI,KAAKyH,EAAGS,KAAKZ,IAAI,IAAKtH,KAAKoO,EAAImW,UAAYrkB,UAAUvB,OAAS8L,EAAI,MAE9F2Z,gBAAgBF,OAAS,SAASzZ,GAChC,OAAO,IAAImZ,OAAO5jB,KAAKiI,EAAGjI,KAAKyH,EAAGS,KAAKX,IAAI,EAAGvH,KAAKoO,EAAImW,UAAYrkB,UAAUvB,OAAS8L,EAAI,MAE5F2Z,gBAAgBjB,IAAM,WACpB,OAAOkB,WAAWrkB,KAAKiI,EAAGjI,KAAKyH,EAAGzH,KAAKoO,GAAG+U,OAO5C/e,GAAGogB,IAAMV,OAIT,IAAIS,SAAW,GAEXE,gBAAkBX,OAAOxiB,UAAY,IAAIwhB,SAU7C,SAAS4B,WAAWtW,EAAG9H,EAAGC,GACxB,IAAI0T,GAAK7L,EAAI,IAAM,IAAK1H,EAAIuT,EAAI3T,EAAI,IAAK+H,EAAI4L,EAAI1T,EAAI,IAIrD,OAAO,IAAIod,OAAOgB,WAAW,WAH7Bje,EAba,OAaTke,WAAWle,IAG8B,WAF7CuT,EAdgC,EAc5B2K,WAAW3K,IAE8C,UAD7D5L,EAf8C,QAe1CuW,WAAWvW,KAC6DsW,YAAY,QAAUje,EAAI,UAAYuT,EAAI,QAAU5L,GAAIsW,WAAW,SAAWje,EAAI,SAAWuT,EAAI,UAAY5L,IAE3L,SAASwV,WAAWzV,EAAG9H,EAAGC,GACxB,OAAO6H,EAAI,EAAI,IAAIwV,OAAO1b,KAAK2c,MAAMte,EAAGD,GAAKkW,WAAYtU,KAAKU,KAAKtC,EAAIA,EAAIC,EAAIA,GAAI6H,GAAK,IAAIwV,OAAOpd,IAAKA,IAAK4H,GAE/G,SAASwW,WAAWle,GAClB,OAAOA,EAAI,WAAaA,EAAIA,EAAIA,GAAKA,EAAI,EAAI,IAAM,SAErD,SAASoe,WAAWpe,GAClB,OAAOA,EAAI,QAAUwB,KAAKkY,IAAI1Z,EAAG,EAAI,GAAK,SAAWA,EAAI,EAAI,GAE/D,SAASie,WAAWX,GAClB,OAAO9b,KAAKwb,MAAM,KAAOM,GAAK,OAAS,MAAQA,EAAI,MAAQ9b,KAAKkY,IAAI4D,EAAG,EAAI,KAAO,OAGpF,SAASL,OAAOK,EAAGvE,EAAGlZ,GACpB,OAAOvG,gBAAgB2jB,QAAe3jB,KAAKgkB,IAAMA,EAAGhkB,KAAKyf,IAAMA,OAAGzf,KAAKuG,IAAMA,IAAKrG,UAAUvB,OAAS,EAAIqlB,aAAaL,OAAS,IAAIA,OAAOK,EAAEA,EAAGA,EAAEvE,EAAGuE,EAAEzd,GAAKyc,aAAa,GAAKgB,EAAGL,OAAQL,YAAc,IAAIK,OAAOK,EAAGvE,EAAGlZ,GAEzN,SAASwe,aAAavlB,OACpB,OAAO,IAAImkB,OAAOnkB,OAAS,GAAIA,OAAS,EAAI,IAAa,IAARA,OAEnD,SAASwlB,aAAaxlB,OACpB,OAAOulB,aAAavlB,OAAS,GApC/BilB,gBAAgBR,SAAW,SAASxZ,GAClC,OAAO,IAAIqZ,OAAO5b,KAAKZ,IAAI,IAAKtH,KAAKoO,EAAImW,UAAYrkB,UAAUvB,OAAS8L,EAAI,IAAKzK,KAAKsG,EAAGtG,KAAKuG,IAEhGke,gBAAgBP,OAAS,SAASzZ,GAChC,OAAO,IAAIqZ,OAAO5b,KAAKX,IAAI,EAAGvH,KAAKoO,EAAImW,UAAYrkB,UAAUvB,OAAS8L,EAAI,IAAKzK,KAAKsG,EAAGtG,KAAKuG,IAE9Fke,gBAAgBtB,IAAM,WACpB,OAAOuB,WAAW1kB,KAAKoO,EAAGpO,KAAKsG,EAAGtG,KAAKuG,IAqBzCnC,GAAG+e,IAAMQ,OAUT,IAAIsB,gBAAkBtB,OAAOriB,UAAY,IAAIwhB,SAoB7C,SAASoC,WAAW9c,GAClB,OAAOA,EAAI,GAAK,IAAMF,KAAKX,IAAI,EAAGa,GAAGxE,SAAS,IAAMsE,KAAKZ,IAAI,IAAKc,GAAGxE,SAAS,IAEhF,SAASof,aAAamC,OAAQhC,IAAKC,KACjC,IAAyBG,GAAIC,GAAIN,MAA7Bc,EAAI,EAAGvE,EAAI,EAAGlZ,EAAI,EAEtB,GADAgd,GAAK,mBAAmB6B,KAAKD,OAASA,OAAOE,eAG3C,OADA7B,GAAKD,GAAG,GAAG5Q,MAAM,KACT4Q,GAAG,IACV,IAAK,MAEF,OAAOH,IAAIkC,WAAW9B,GAAG,IAAK8B,WAAW9B,GAAG,IAAM,IAAK8B,WAAW9B,GAAG,IAAM,KAG9E,IAAK,MAEF,OAAOL,IAAIoC,mBAAmB/B,GAAG,IAAK+B,mBAAmB/B,GAAG,IAAK+B,mBAAmB/B,GAAG,KAI7F,OAAIN,MAAQsC,aAAa7Y,IAAIwY,SACpBhC,IAAID,MAAMc,EAAGd,MAAMzD,EAAGyD,MAAM3c,IAEvB,MAAV4e,QAAuC,MAArBA,OAAO7Y,OAAO,IAAe1F,MAAMsc,MAAQuC,SAASN,OAAOrhB,MAAM,GAAI,OACnE,IAAlBqhB,OAAOxmB,QACTqlB,GAAa,KAARd,QAAiB,EACtBc,GAAIA,GAAK,EACTvE,EAAY,IAARyD,MACJzD,GAAIA,GAAK,EACTlZ,EAAY,GAAR2c,MACJ3c,GAAIA,GAAK,GACkB,IAAlB4e,OAAOxmB,SAChBqlB,GAAa,SAARd,QAAqB,GAC1BzD,GAAa,MAARyD,QAAkB,EACvB3c,EAAY,IAAR2c,QAGDC,IAAIa,EAAGvE,EAAGlZ,IAEnB,SAAS0c,WAAWe,EAAGvE,EAAGlZ,GACxB,IAA0F0B,EAAGpG,EAAzFyF,IAAMY,KAAKZ,IAAI0c,GAAK,IAAKvE,GAAK,IAAKlZ,GAAK,KAAMgB,IAAMW,KAAKX,IAAIyc,EAAGvE,EAAGlZ,GAAIkC,EAAIlB,IAAMD,IAAW8G,GAAK7G,IAAMD,KAAO,EASlH,OARImB,GACF5G,EAAIuM,EAAI,GAAK3F,GAAKlB,IAAMD,KAAOmB,GAAK,EAAIlB,IAAMD,KAChCW,EAAV+b,GAAKzc,KAAUkY,EAAIlZ,GAAKkC,GAAKgX,EAAIlZ,EAAI,EAAI,GAAakZ,GAAKlY,KAAUhB,EAAIyd,GAAKvb,EAAI,GAAaub,EAAIvE,GAAKhX,EAAI,EAChHR,GAAK,KAELA,EAAIzB,IACJ3E,EAAIuM,EAAI,GAAKA,EAAI,EAAI,EAAInG,GAEpB,IAAI8a,OAAO9a,EAAGpG,EAAGuM,GAE1B,SAAS2V,WAAWC,EAAGvE,EAAGlZ,GAIxB,IAAIG,EAAIoe,YAAY,UAHpBd,EAAI0B,WAAW1B,IAGoB,UAFnCvE,EAAIiG,WAAWjG,IAEmC,UADlDlZ,EAAImf,WAAWnf,KAlHF,QAmHgE0T,EAAI6K,YAAY,SAAWd,EAAI,SAAWvE,EAAI,QAAUlZ,GAnHrG,GAoHhC,OAAOud,OAAO,IAAM7J,EAAI,GAAI,KAAOvT,EAAIuT,GAAI,KAAOA,EADuG6K,YAAY,SAAWd,EAAI,QAAUvE,EAAI,SAAWlZ,GAnH/J,WAsHhD,SAASmf,WAAW1B,GAClB,OAAQA,GAAK,MAAQ,OAASA,EAAI,MAAQ9b,KAAKkY,KAAK4D,EAAI,MAAQ,MAAO,KAEzE,SAASuB,mBAAmB9d,GAC1B,IAAIxF,EAAIqjB,WAAW7d,GACnB,MAAkC,MAA3BA,EAAE6E,OAAO7E,EAAE9I,OAAS,GAAauJ,KAAKwb,MAAU,KAAJzhB,GAAYA,EAlFjEgjB,gBAAgBhB,SAAW,SAASxZ,GAClCA,EAAIvC,KAAKkY,IAAI,GAAIlgB,UAAUvB,OAAS8L,EAAI,GACxC,IAAIuZ,EAAIhkB,KAAKgkB,EAAGvE,EAAIzf,KAAKyf,EAAGlZ,EAAIvG,KAAKuG,EAAG3H,EAAI,GAC5C,OAAKolB,GAAMvE,GAAMlZ,GACbyd,GAAKA,EAAIplB,IAAGolB,EAAIplB,GAChB6gB,GAAKA,EAAI7gB,IAAG6gB,EAAI7gB,GAChB2H,GAAKA,EAAI3H,IAAG2H,EAAI3H,GACb,IAAI+kB,OAAOzb,KAAKZ,IAAI,IAAK0c,EAAIvZ,GAAIvC,KAAKZ,IAAI,IAAKmY,EAAIhV,GAAIvC,KAAKZ,IAAI,IAAKf,EAAIkE,KAJrD,IAAIkZ,OAAO/kB,EAAGA,EAAGA,IAM9CqmB,gBAAgBf,OAAS,SAASzZ,GAEhC,OAAO,IAAIkZ,QADXlZ,EAAIvC,KAAKkY,IAAI,GAAIlgB,UAAUvB,OAAS8L,EAAI,IAClBzK,KAAKgkB,EAAGvZ,EAAIzK,KAAKyf,EAAGhV,EAAIzK,KAAKuG,IAErD0e,gBAAgB7B,IAAM,WACpB,OAAOH,WAAWjjB,KAAKgkB,EAAGhkB,KAAKyf,EAAGzf,KAAKuG,IAEzC0e,gBAAgBrhB,SAAW,WACzB,MAAO,IAAMshB,WAAWllB,KAAKgkB,GAAKkB,WAAWllB,KAAKyf,GAAKyF,WAAWllB,KAAKuG,IAmEzE,IAAIif,aAAephB,GAAG8F,IAAI,CACxByb,UAAW,SACXC,aAAc,SACdC,KAAM,MACNC,WAAY,QACZC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,EACPC,eAAgB,SAChBC,KAAM,IACNC,WAAY,QACZC,MAAO,SACPC,UAAW,SACXC,UAAW,QACXC,WAAY,QACZC,UAAW,SACXC,MAAO,SACPC,eAAgB,QAChBC,SAAU,SACVC,QAAS,SACTC,KAAM,MACNC,SAAU,IACVC,SAAU,MACVC,cAAe,SACfC,SAAU,SACVC,UAAW,MACXC,SAAU,SACVC,UAAW,SACXC,YAAa,QACbC,eAAgB,QAChBC,WAAY,SACZC,WAAY,SACZC,QAAS,QACTC,WAAY,SACZC,aAAc,QACdC,cAAe,QACfC,cAAe,QACfC,cAAe,QACfC,cAAe,MACfC,WAAY,QACZC,SAAU,SACVC,YAAa,MACbC,QAAS,QACTC,QAAS,QACTC,WAAY,QACZC,UAAW,SACXC,YAAa,SACbC,YAAa,QACbC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,KAAM,SACNC,UAAW,SACXC,KAAM,QACNC,MAAO,MACPC,YAAa,SACbC,KAAM,QACNC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,OAAQ,QACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,cAAe,SACfC,UAAW,QACXC,aAAc,SACdC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,qBAAsB,SACtBC,UAAW,SACXC,WAAY,QACZC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,cAAe,QACfC,aAAc,QACdC,eAAgB,QAChBC,eAAgB,QAChBC,eAAgB,SAChBC,YAAa,SACbC,KAAM,MACNC,UAAW,QACXC,MAAO,SACPC,QAAS,SACTC,OAAQ,QACRC,iBAAkB,QAClBC,WAAY,IACZC,aAAc,SACdC,aAAc,QACdC,eAAgB,QAChBC,gBAAiB,QACjBC,kBAAmB,MACnBC,gBAAiB,QACjBC,gBAAiB,SACjBC,aAAc,QACdC,UAAW,SACXC,UAAW,SACXC,SAAU,SACVC,YAAa,SACbC,KAAM,IACNC,QAAS,SACTC,MAAO,QACPC,UAAW,QACXC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,cAAe,SACfC,UAAW,SACXC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,WAAY,SACZC,OAAQ,QACRC,cAAe,QACfC,IAAK,SACLC,UAAW,SACXC,UAAW,QACXC,YAAa,QACbC,OAAQ,SACRC,WAAY,SACZC,SAAU,QACVC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,QAAS,QACTC,UAAW,QACXC,UAAW,QACXC,UAAW,QACXC,KAAM,SACNC,YAAa,MACbC,UAAW,QACXC,IAAK,SACLC,KAAM,MACNC,QAAS,SACTC,OAAQ,SACRC,UAAW,QACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,OAAQ,SACRC,YAAa,WAKf,SAASC,WAAW3mB,GAClB,MAAoB,mBAANA,EAAmBA,EAAI,WACnC,OAAOA,GAKX,SAAS4mB,WAAWC,UAClB,OAAO,SAASC,IAAKC,SAAUxa,UAG7B,OAFyB,IAArBzU,UAAUvB,QAAoC,mBAAbwwB,WAAyBxa,SAAWwa,SACzEA,SAAW,MACJC,OAAOF,IAAKC,SAAUF,SAAUta,WAG3C,SAASya,OAAOF,IAAKC,SAAUF,SAAUta,UACvC,IAAI0a,IAAM,GAAIrhB,SAAW5J,GAAG4J,SAAS,aAAc,WAAY,OAAQ,SAAUshB,QAAU,GAAIC,QAAU,IAAIC,eAAkBC,aAAe,KAK9I,SAASC,UACP,IAA6BC,OAAzBC,OAASL,QAAQK,OACrB,IAAKA,QAwET,SAASC,kBAAkBN,SACzB,IAAIngB,KAAOmgB,QAAQE,aACnB,OAAOrgB,MAAiB,SAATA,KAAkBmgB,QAAQN,SAAWM,QAAQO,aA1E3CD,CAAkBN,UAAYK,QAAU,KAAOA,OAAS,KAAkB,MAAXA,OAAgB,CAC5F,IACED,OAASV,SAASprB,KAAKwrB,IAAKE,SAC5B,MAAOxtB,GAEP,YADAiM,SAASvO,MAAMoE,KAAKwrB,IAAKttB,GAG3BiM,SAAS+hB,KAAKlsB,KAAKwrB,IAAKM,aAExB3hB,SAASvO,MAAMoE,KAAKwrB,IAAKE,SAwD7B,OAvEIvvB,KAAKgwB,kBAAoB,oBAAqBT,UAAY,oBAAoBtrB,KAAKirB,OAAMK,QAAU,IAAIS,gBAC3G,WAAYT,QAAUA,QAAQU,OAASV,QAAQW,QAAUR,QAAUH,QAAQY,mBAAqB,WAC9FZ,QAAQa,WAAa,GAAKV,WAgB5BH,QAAQc,WAAa,SAASliB,OAC5B,IAAI3M,EAAI4C,GAAG+J,MACX/J,GAAG+J,MAAQA,MACX,IACEH,SAASsiB,SAASzsB,KAAKwrB,IAAKE,SAC5B,QACAnrB,GAAG+J,MAAQ3M,IAGf6tB,IAAIkB,OAAS,SAASvsB,KAAMxE,OAE1B,OADAwE,MAAQA,KAAO,IAAIqhB,cACfnlB,UAAUvB,OAAS,EAAU2wB,QAAQtrB,OAC5B,MAATxE,aAAsB8vB,QAAQtrB,MAAYsrB,QAAQtrB,MAAQxE,MAAQ,GAC/D6vB,MAETA,IAAIF,SAAW,SAAS3vB,OACtB,OAAKU,UAAUvB,QACfwwB,SAAoB,MAAT3vB,MAAgB,KAAOA,MAAQ,GACnC6vB,KAFuBF,UAIhCE,IAAII,aAAe,SAASjwB,OAC1B,OAAKU,UAAUvB,QACf8wB,aAAejwB,MACR6vB,KAFuBI,cAIhCJ,IAAIJ,SAAW,SAASzvB,OAEtB,OADAyvB,SAAWzvB,MACJ6vB,KAET,CAAE,MAAO,QAAS/jB,SAAQ,SAASc,QACjCijB,IAAIjjB,QAAU,WACZ,OAAOijB,IAAImB,KAAKrwB,MAAMkvB,IAAK,CAAEjjB,QAASqC,OAAOlK,SAASrE,iBAG1DmvB,IAAImB,KAAO,SAASpkB,OAAQkI,KAAMK,UAIhC,GAHyB,IAArBzU,UAAUvB,QAAgC,mBAAT2V,OAAqBK,SAAWL,KAAMA,KAAO,MAClFib,QAAQkB,KAAKrkB,OAAQ8iB,KAAK,GACV,MAAZC,UAAsB,WAAYG,UAAUA,QAAgB,OAAIH,SAAW,QAC3EI,QAAQmB,iBAAkB,IAAK,IAAI1sB,QAAQsrB,QAASC,QAAQmB,iBAAiB1sB,KAAMsrB,QAAQtrB,OAQ/F,OAPgB,MAAZmrB,UAAoBI,QAAQoB,kBAAkBpB,QAAQoB,iBAAiBxB,UACvD,MAAhBM,eAAsBF,QAAQE,aAAeA,cACjC,MAAZ9a,UAAkB0a,IAAI/gB,GAAG,QAASqG,UAAUrG,GAAG,QAAQ,SAASihB,SAClE5a,SAAS,KAAM4a,YAEjBvhB,SAAS4iB,WAAW/sB,KAAKwrB,IAAKE,SAC9BA,QAAQiB,KAAa,MAARlc,KAAe,KAAOA,MAC5B+a,KAETA,IAAIwB,MAAQ,WAEV,OADAtB,QAAQsB,QACDxB,KAETjrB,GAAGwJ,OAAOyhB,IAAKrhB,SAAU,MACN,MAAZ2G,SAAmB0a,IAAMA,IAAI1iB,IAEtC,SAASmkB,mBAAmBnc,UAC1B,OAA2B,IAApBA,SAAShW,OAAe,SAASc,MAAO8vB,SAC7C5a,SAAkB,MAATlV,MAAgB8vB,QAAU,OACjC5a,SALoCmc,CAAmBnc,WA1F7D6Q,aAAala,SAAQ,SAASjM,IAAKG,OACjCgmB,aAAaja,IAAIlM,IAAK0lB,aAAavlB,WAOrC4E,GAAG2sB,QAAUhC,WACb3qB,GAAGirB,IAAML,WAAW/iB,aA4FpB7H,GAAG4sB,IAAM,SAASC,UAAW9B,UAC3B,IAAI+B,SAAW,IAAIze,OAAO,KAAOwe,UAAY,OAAQE,cAAgBF,UAAUG,WAAW,GAC1F,SAASJ,IAAI9B,IAAKnlB,IAAK4K,UACjBzU,UAAUvB,OAAS,IAAGgW,SAAW5K,IAAKA,IAAM,MAChD,IAAIslB,IAAMD,OAAOF,IAAKC,SAAiB,MAAPplB,IAAcklB,SAAWoC,cAActnB,KAAM4K,UAI7E,OAHA0a,IAAItlB,IAAM,SAASe,GACjB,OAAO5K,UAAUvB,OAAS0wB,IAAIJ,SAAsB,OAAZllB,IAAMe,GAAamkB,SAAWoC,cAAcvmB,IAAMf,KAErFslB,IAET,SAASJ,SAASM,SAChB,OAAOyB,IAAIM,MAAM/B,QAAQO,cAE3B,SAASuB,cAAcpvB,GACrB,OAAO,SAASstB,SACd,OAAOyB,IAAIM,MAAM/B,QAAQO,aAAc7tB,IA+E3C,SAASsvB,UAAUxnB,KACjB,OAAOA,IAAIG,IAAIsnB,aAAaC,KAAKR,WAEnC,SAASO,YAAYlc,MACnB,OAAO4b,SAASjtB,KAAKqR,MAAQ,IAAMA,KAAK/F,QAAQ,MAAO,MAAQ,IAAM+F,KAEvE,OAlFA0b,IAAIM,MAAQ,SAAShc,KAAMrT,GACzB,IAAIT,EACJ,OAAOwvB,IAAIU,UAAUpc,MAAM,SAASvL,IAAKnL,GACvC,GAAI4C,EAAG,OAAOA,EAAEuI,IAAKnL,EAAI,GACzB,IAAI0H,EAAI,IAAIqrB,SAAS,IAAK,WAAa5nB,IAAIG,KAAI,SAASlG,KAAMpF,GAC5D,OAAOgzB,KAAKC,UAAU7tB,MAAQ,OAASpF,EAAI,OAC1C6yB,KAAK,KAAO,KACfjwB,EAAIS,EAAI,SAAS8H,IAAKnL,GACpB,OAAOqD,EAAEqE,EAAEyD,KAAMnL,IACf0H,MAGR0qB,IAAIU,UAAY,SAASpc,KAAMrT,GAC7B,IAAkEqH,EAAGwoB,IAAjEC,IAAM,GAAIC,IAAM,GAAIC,KAAO,GAAIC,EAAI5c,KAAK3W,OAAQwzB,EAAI,EAAGrwB,EAAI,EAC/D,SAASswB,QACP,GAAID,GAAKD,EAAG,OAAOF,IACnB,GAAIF,IAAK,OAAOA,KAAM,EAAOC,IAC7B,IAAInqB,EAAIuqB,EACR,GAA2B,KAAvB7c,KAAK8b,WAAWxpB,GAAW,CAE7B,IADA,IAAIhJ,EAAIgJ,EACDhJ,IAAMszB,GACX,GAA2B,KAAvB5c,KAAK8b,WAAWxyB,GAAW,CAC7B,GAA+B,KAA3B0W,KAAK8b,WAAWxyB,EAAI,GAAW,QACjCA,EAWN,OARAuzB,EAAIvzB,EAAI,EAEE,MADN6I,EAAI6N,KAAK8b,WAAWxyB,EAAI,KAE1BkzB,KAAM,EACyB,KAA3Bxc,KAAK8b,WAAWxyB,EAAI,MAAauzB,GACtB,KAAN1qB,IACTqqB,KAAM,GAEDxc,KAAKxR,MAAM8D,EAAI,EAAGhJ,GAAG2Q,QAAQ,MAAO,KAE7C,KAAO4iB,EAAID,GAAG,CACZ,IAAIzqB,EAA0BgD,EAAI,EAClC,GAAU,MADNhD,EAAI6N,KAAK8b,WAAWe,MACVL,KAAM,OAAW,GAAU,KAANrqB,EACjCqqB,KAAM,EACqB,KAAvBxc,KAAK8b,WAAWe,OAAaA,IAAK1nB,QACjC,GAAIhD,IAAM0pB,cAAe,SAChC,OAAO7b,KAAKxR,MAAM8D,EAAGuqB,EAAI1nB,GAE3B,OAAO6K,KAAKxR,MAAM8D,GAEpB,MAAQ0B,EAAI8oB,WAAaJ,KAAK,CAE5B,IADA,IAAI1rB,EAAI,GACDgD,IAAMyoB,KAAOzoB,IAAM0oB,KACxB1rB,EAAEtD,KAAKsG,GACPA,EAAI8oB,QAEFnwB,GAAwB,OAAlBqE,EAAIrE,EAAEqE,EAAGxE,OACnBmwB,KAAKjvB,KAAKsD,GAEZ,OAAO2rB,MAETjB,IAAI7L,OAAS,SAAS8M,MACpB,GAAInzB,MAAM6C,QAAQswB,KAAK,IAAK,OAAOjB,IAAIqB,WAAWJ,MAClD,IAAIK,SAAW,IAAItmB,OAAUumB,OAAS,GAQtC,OAPAN,KAAK3mB,SAAQ,SAASvB,KACpB,IAAK,IAAIyoB,SAASzoB,IACXuoB,SAAS5lB,IAAI8lB,QAChBD,OAAOvvB,KAAKsvB,SAAS5kB,IAAI8kB,WAIxB,CAAED,OAAOroB,IAAIsnB,aAAaC,KAAKR,YAAaxiB,OAAOwjB,KAAK/nB,KAAI,SAASH,KAC1E,OAAOwoB,OAAOroB,KAAI,SAASsoB,OACzB,OAAOhB,YAAYznB,IAAIyoB,WACtBf,KAAKR,eACNQ,KAAK,OAEXT,IAAIqB,WAAa,SAASJ,MACxB,OAAOA,KAAK/nB,IAAIqnB,WAAWE,KAAK,OAQ3BT,KAET5sB,GAAGquB,IAAMruB,GAAG4sB,IAAI,IAAK,YACrB5sB,GAAGsuB,IAAMtuB,GAAG4sB,IAAI,KAAK,6BACrB,IAAI2B,mBAAoBC,mBAAoBC,kBAAmBC,iBAAkBC,eAAiB/yB,KAAKqM,gBAAgBrM,KAAM,2BAA6B,SAAS2U,UACjKgE,WAAWhE,SAAU,KAKvB,SAASqe,SAASre,SAAUse,MAAOrzB,MACjC,IAAIkC,EAAI5B,UAAUvB,OACdmD,EAAI,IAAGmxB,MAAQ,GACfnxB,EAAI,IAAGlC,KAAOwF,KAAKC,OACvB,IAAI6tB,KAAOtzB,KAAOqzB,MAAOE,MAAQ,CAC/B1rB,EAAGkN,SACHrL,EAAG4pB,KACHpxB,EAAG,MASL,OAPI8wB,mBAAoBA,mBAAmB9wB,EAAIqxB,MAAYR,mBAAqBQ,MAChFP,mBAAqBO,MAChBN,oBACHC,iBAAmB9Q,aAAa8Q,kBAChCD,kBAAoB,EACpBE,eAAeK,gBAEVD,MAET,SAASC,gBACP,IAAI/tB,IAAMguB,gBAAiBJ,MAAQK,iBAAmBjuB,IAClD4tB,MAAQ,IACNM,SAASN,SACXjR,aAAa8Q,kBACbA,iBAAmBna,WAAWya,cAAeH,QAE/CJ,kBAAoB,IAEpBA,kBAAoB,EACpBE,eAAeK,gBAOnB,SAASC,gBAEP,IADA,IAAIhuB,IAAMD,KAAKC,MAAO8tB,MAAQR,mBACvBQ,OACD9tB,KAAO8tB,MAAM7pB,GAAK6pB,MAAM1rB,EAAEpC,IAAM8tB,MAAM7pB,KAAI6pB,MAAM1rB,EAAI,MACxD0rB,MAAQA,MAAMrxB,EAEhB,OAAOuD,IAET,SAASiuB,iBAEP,IADA,IAAIE,GAAIC,GAAKd,mBAAoBO,KAAO/nB,IACjCsoB,IACDA,GAAGhsB,GACDgsB,GAAGnqB,EAAI4pB,OAAMA,KAAOO,GAAGnqB,GAC3BmqB,IAAMD,GAAKC,IAAI3xB,GAEf2xB,GAAKD,GAAKA,GAAG1xB,EAAI2xB,GAAG3xB,EAAI6wB,mBAAqBc,GAAG3xB,EAIpD,OADA8wB,mBAAqBY,GACdN,KAET,SAASQ,oBAAoBhtB,EAAGqB,GAC9B,OAAOA,GAAKrB,EAAIwB,KAAKia,KAAKja,KAAK4V,IAAIpX,GAAKwB,KAAKyrB,MAAQ,GA5DvDvvB,GAAG+uB,MAAQ,WACTH,SAAS7yB,MAAMH,KAAME,YAiCvBkE,GAAG+uB,MAAMS,MAAQ,WACfP,gBACAC,kBA0BFlvB,GAAGsf,MAAQ,SAAShd,EAAG5E,GACrB,OAAOA,EAAIoG,KAAKwb,MAAMhd,GAAK5E,EAAIoG,KAAKkY,IAAI,GAAIte,KAAOA,EAAIoG,KAAKwb,MAAMhd,IAEpE,IAAImtB,kBAAoB,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM3pB,KAW/G,SAAS4pB,gBAAgBrrB,EAAG7J,GAC1B,IAAI6L,EAAIvC,KAAKkY,IAAI,GAAiB,EAAb7V,IAAI,EAAI3L,IAC7B,MAAO,CACL+hB,MAAO/hB,EAAI,EAAI,SAAS6J,GACtB,OAAOA,EAAIgC,GACT,SAAShC,GACX,OAAOA,EAAIgC,GAEbspB,OAAQtrB,MAGZ,SAASurB,uBAAuBC,QAC9B,IAAIC,eAAiBD,OAAOE,QAASC,iBAAmBH,OAAOI,UAAWC,gBAAkBL,OAAOM,SAAUC,gBAAkBP,OAAOQ,SAAUC,YAAcJ,iBAAmBF,iBAAmB,SAAS50B,MAAOm1B,OAElN,IADA,IAAI/1B,EAAIY,MAAMb,OAAQ2K,EAAI,GAAI1B,EAAI,EAAG6X,EAAI6U,gBAAgB,GAAI31B,OAAS,EAC/DC,EAAI,GAAK6gB,EAAI,IACd9gB,OAAS8gB,EAAI,EAAIkV,QAAOlV,EAAIvX,KAAKX,IAAI,EAAGotB,MAAQh2B,SACpD2K,EAAEtG,KAAKxD,MAAMo1B,UAAUh2B,GAAK6gB,EAAG7gB,EAAI6gB,OAC9B9gB,QAAU8gB,EAAI,GAAKkV,SACxBlV,EAAI6U,gBAAgB1sB,GAAKA,EAAI,GAAK0sB,gBAAgB31B,QAEpD,OAAO2K,EAAEurB,UAAUpD,KAAK2C,mBACtBnoB,YACJ,OAAO,SAAS6oB,WACd,IAAIld,MAAQmd,aAAa3P,KAAK0P,WAAYE,KAAOpd,MAAM,IAAM,IAAKqd,MAAQrd,MAAM,IAAM,IAAKsd,KAAOtd,MAAM,IAAM,IAAKmc,OAASnc,MAAM,IAAM,GAAIud,MAAQvd,MAAM,GAAI+c,OAAS/c,MAAM,GAAIwd,MAAQxd,MAAM,GAAIyd,UAAYzd,MAAM,GAAIxI,KAAOwI,MAAM,GAAI+I,MAAQ,EAAG7L,OAAS,GAAIwgB,OAAS,GAAIC,SAAU,EAAOC,UAAW,EAM3S,OALIH,YAAWA,WAAaA,UAAUT,UAAU,KAC5CO,OAAkB,MAATH,MAA0B,MAAVC,SAC3BE,MAAQH,KAAO,IACfC,MAAQ,KAEF7lB,MACP,IAAK,IACJgmB,OAAQ,EACRhmB,KAAO,IACP,MAED,IAAK,IACJuR,MAAQ,IACR2U,OAAS,IACTlmB,KAAO,IACP,MAED,IAAK,IACJuR,MAAQ,IACR2U,OAAS,IACTlmB,KAAO,IACP,MAED,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACW,MAAX2kB,SAAgBjf,OAAS,IAAM1F,KAAKiW,eAEzC,IAAK,IACJmQ,UAAW,EAEZ,IAAK,IACJD,SAAU,EACVF,UAAY,EACZ,MAED,IAAK,IACJ1U,OAAS,EACTvR,KAAO,IAGM,MAAX2kB,SAAgBjf,OAAS0f,gBAAgB,GAAIc,OAASd,gBAAgB,IAC9D,KAARplB,MAAgBimB,YAAWjmB,KAAO,KACrB,MAAbimB,YACU,KAARjmB,KAAaimB,UAAYntB,KAAKX,IAAI,EAAGW,KAAKZ,IAAI,GAAI+tB,YAA8B,KAARjmB,MAAuB,KAARA,OAAaimB,UAAYntB,KAAKX,IAAI,EAAGW,KAAKZ,IAAI,GAAI+tB,cAE/IjmB,KAAOqmB,gBAAgB9oB,IAAIyC,OAASsmB,sBACpC,IAAIC,OAASR,OAASC,MACtB,OAAO,SAAS51B,OACd,IAAIo2B,WAAaN,OACjB,GAAIC,SAAW/1B,MAAQ,EAAG,MAAO,GACjC,IAAIq2B,SAAWr2B,MAAQ,GAAe,IAAVA,OAAe,EAAIA,MAAQ,GAAKA,OAASA,MAAO,KAAgB,MAAT01B,KAAe,GAAKA,KACvG,GAAIvU,MAAQ,EAAG,CACb,IAAImV,KAAO1xB,GAAG2xB,aAAav2B,MAAO61B,WAClC71B,MAAQs2B,KAAKnV,MAAMnhB,OACnBo2B,WAAaE,KAAK/B,OAASuB,YAE3B91B,OAASmhB,MAGX,IAAgC9K,OAAQmgB,MAApCp3B,GADJY,MAAQ4P,KAAK5P,MAAO61B,YACNY,YAAY,KAC1B,GAAIr3B,EAAI,EAAG,CACT,IAAIgJ,EAAI4tB,SAAWh2B,MAAMy2B,YAAY,MAAQ,EACzCruB,EAAI,GAAGiO,OAASrW,MAAOw2B,MAAQ,KAASngB,OAASrW,MAAMo1B,UAAU,EAAGhtB,GAAIouB,MAAQx2B,MAAMo1B,UAAUhtB,SAEpGiO,OAASrW,MAAMo1B,UAAU,EAAGh2B,GAC5Bo3B,MAAQ9B,eAAiB10B,MAAMo1B,UAAUh2B,EAAI,IAE1Cu2B,OAASC,QAAOvf,OAAS6e,YAAY7e,OAAQ1K,MAClD,IAAIxM,OAASmW,OAAOnW,OAASkX,OAAOlX,OAASq3B,MAAMr3B,QAAUg3B,OAAS,EAAIE,SAASl3B,QAASkb,QAAUlb,OAASg2B,MAAQ,IAAI71B,MAAMH,OAASg2B,MAAQh2B,OAAS,GAAG8yB,KAAKuD,MAAQ,GAI3K,OAHIW,SAAQ9f,OAAS6e,YAAY7a,QAAUhE,OAAQgE,QAAQlb,OAASg2B,MAAQqB,MAAMr3B,OAASwM,MAC3F0qB,UAAY/gB,OACZtV,MAAQqW,OAASmgB,OACC,MAAVf,MAAgBY,SAAWr2B,MAAQqa,QAAoB,MAAVob,MAAgBpb,QAAUgc,SAAWr2B,MAAkB,MAAVy1B,MAAgBpb,QAAQ+a,UAAU,EAAGj2B,SAAW,GAAKk3B,SAAWr2B,MAAQqa,QAAQ+a,UAAUj2B,QAAUk3B,UAAYF,OAASn2B,MAAQqa,QAAUra,QAAUo2B,aA5G7PxxB,GAAG2xB,aAAe,SAASv2B,MAAO61B,WAChC,IAAIz2B,EAAI,EAOR,OANIY,OAASA,SACPA,MAAQ,IAAGA,QAAU,GACrB61B,YAAW71B,MAAQ4E,GAAGsf,MAAMlkB,MAAOk0B,oBAAoBl0B,MAAO61B,aAClEz2B,EAAI,EAAIsJ,KAAKC,MAAM,MAAQD,KAAK4V,IAAIte,OAAS0I,KAAKyrB,MAClD/0B,EAAIsJ,KAAKX,KAAK,GAAIW,KAAKZ,IAAI,GAA8B,EAA1BY,KAAKC,OAAOvJ,EAAI,GAAK,MAE/Ci1B,kBAAkB,EAAIj1B,EAAI,IAwGnC,IAAIm2B,aAAe,yEACfU,gBAAkBrxB,GAAG8F,IAAI,CAC3B3D,EAAG,SAASG,GACV,OAAOA,EAAE9C,SAAS,IAEpB6D,EAAG,SAASf,GACV,OAAOwvB,OAAOC,aAAazvB,IAE7BlF,EAAG,SAASkF,GACV,OAAOA,EAAE9C,SAAS,IAEpB8C,EAAG,SAASA,GACV,OAAOA,EAAE9C,SAAS,KAEpBwyB,EAAG,SAAS1vB,GACV,OAAOA,EAAE9C,SAAS,IAAI2I,eAExBkT,EAAG,SAAS/Y,EAAGqB,GACb,OAAOrB,EAAE2vB,YAAYtuB,IAEvBhG,EAAG,SAAS2E,EAAGqB,GACb,OAAOrB,EAAE4vB,cAAcvuB,IAEzB9F,EAAG,SAASyE,EAAGqB,GACb,OAAOrB,EAAE6vB,QAAQxuB,IAEnBic,EAAG,SAAStd,EAAGqB,GACb,OAAQrB,EAAItC,GAAGsf,MAAMhd,EAAGgtB,oBAAoBhtB,EAAGqB,KAAKwuB,QAAQruB,KAAKX,IAAI,EAAGW,KAAKZ,IAAI,GAAIosB,oBAAoBhtB,GAAK,EAAI,OAAQqB,SAG9H,SAAS2tB,sBAAsBhvB,GAC7B,OAAOA,EAAI,GAEb,IAAI8vB,QAAUpyB,GAAG8uB,KAAO,GAAIuD,QAAUrxB,KACtC,SAASsxB,cACP12B,KAAK8K,EAAI,IAAI1F,KAAKlF,UAAUvB,OAAS,EAAIyG,KAAKuxB,IAAIx2B,MAAMH,KAAME,WAAaA,UAAU,IAEvFw2B,YAAYp1B,UAAY,CACtBs1B,QAAS,WACP,OAAO52B,KAAK8K,EAAE+rB,cAEhBC,OAAQ,WACN,OAAO92B,KAAK8K,EAAEisB,aAEhBC,YAAa,WACX,OAAOh3B,KAAK8K,EAAEmsB,kBAEhBC,SAAU,WACR,OAAOl3B,KAAK8K,EAAEqsB,eAEhBC,gBAAiB,WACf,OAAOp3B,KAAK8K,EAAEusB,sBAEhBC,WAAY,WACV,OAAOt3B,KAAK8K,EAAEysB,iBAEhBC,SAAU,WACR,OAAOx3B,KAAK8K,EAAE2sB,eAEhBC,WAAY,WACV,OAAO13B,KAAK8K,EAAE6sB,iBAEhBC,QAAS,WACP,OAAO53B,KAAK8K,EAAE8sB,WAEhBC,kBAAmB,WACjB,OAAO,GAETC,QAAS,WACP,OAAO93B,KAAK8K,EAAEgtB,WAEhBC,QAAS,WACPC,kBAAkBC,WAAW93B,MAAMH,KAAK8K,EAAG5K,YAE7Cg4B,OAAQ,WACNF,kBAAkBG,UAAUh4B,MAAMH,KAAK8K,EAAG5K,YAE5Ck4B,YAAa,WACXJ,kBAAkBK,eAAel4B,MAAMH,KAAK8K,EAAG5K,YAEjDo4B,SAAU,WACRN,kBAAkBO,YAAYp4B,MAAMH,KAAK8K,EAAG5K,YAE9Cs4B,gBAAiB,WACfR,kBAAkBS,mBAAmBt4B,MAAMH,KAAK8K,EAAG5K,YAErDw4B,WAAY,WACVV,kBAAkBW,cAAcx4B,MAAMH,KAAK8K,EAAG5K,YAEhD04B,SAAU,WACRZ,kBAAkBa,YAAY14B,MAAMH,KAAK8K,EAAG5K,YAE9C44B,WAAY,WACVd,kBAAkBe,cAAc54B,MAAMH,KAAK8K,EAAG5K,YAEhD84B,QAAS,WACPhB,kBAAkBgB,QAAQ74B,MAAMH,KAAK8K,EAAG5K,aAG5C,IAAI83B,kBAAoB5yB,KAAK9D,UAC7B,SAAS23B,iBAAiB9yB,MAAO9D,KAAM62B,QACrC,SAASxV,MAAMyV,MACb,IAAIC,GAAKjzB,MAAMgzB,MAAOpb,GAAKsb,OAAOD,GAAI,GACtC,OAAOD,KAAOC,GAAKrb,GAAKob,KAAOC,GAAKrb,GAEtC,SAASoE,KAAKgX,MAEZ,OADA92B,KAAK82B,KAAOhzB,MAAM,IAAIswB,QAAQ0C,KAAO,IAAK,GACnCA,KAET,SAASE,OAAOF,KAAM1uB,GAEpB,OADApI,KAAK82B,KAAO,IAAI1C,SAAS0C,MAAO1uB,GACzB0uB,KAET,SAASnuB,MAAMwoB,GAAIC,GAAI6F,IACrB,IAAIpG,KAAO/Q,KAAKqR,IAAK+F,MAAQ,GAC7B,GAAID,GAAK,EACP,KAAOpG,KAAOO,IACNyF,OAAOhG,MAAQoG,IAAKC,MAAMv2B,KAAK,IAAIoC,MAAM8tB,OAC/C7wB,KAAK6wB,KAAM,QAGb,KAAOA,KAAOO,IAAI8F,MAAMv2B,KAAK,IAAIoC,MAAM8tB,OAAQ7wB,KAAK6wB,KAAM,GAE5D,OAAOqG,MAYTpzB,MAAMgC,MAAQhC,MACdA,MAAMud,MAAQA,MACdvd,MAAMgc,KAAOA,KACbhc,MAAMkzB,OAASA,OACflzB,MAAM6E,MAAQA,MACd,IAAIwuB,IAAMrzB,MAAMqzB,IAAMC,qBAAqBtzB,OAM3C,OALAqzB,IAAIrxB,MAAQqxB,IACZA,IAAI9V,MAAQ+V,qBAAqB/V,OACjC8V,IAAIrX,KAAOsX,qBAAqBtX,MAChCqX,IAAIH,OAASI,qBAAqBJ,QAClCG,IAAIxuB,MApBJ,SAAS0uB,UAAUlG,GAAIC,GAAI6F,IACzB,IACE7C,QAAUC,YACV,IAAI8C,IAAM,IAAI9C,YAEd,OADA8C,IAAI1uB,EAAI0oB,GACDxoB,MAAMwuB,IAAK/F,GAAI6F,IACtB,QACA7C,QAAUrxB,OAcPe,MAET,SAASszB,qBAAqBrtB,QAC5B,OAAO,SAAS+sB,KAAM1uB,GACpB,IACEgsB,QAAUC,YACV,IAAI8C,IAAM,IAAI9C,YAEd,OADA8C,IAAI1uB,EAAIquB,KACD/sB,OAAOotB,IAAK/uB,GAAGK,EACtB,QACA2rB,QAAUrxB,OAoDhB,SAASu0B,qBAAqB1F,QAC5B,IAAI2F,gBAAkB3F,OAAO4F,SAAUC,YAAc7F,OAAOkF,KAAMY,YAAc9F,OAAOf,KAAM8G,eAAiB/F,OAAOgG,QAASC,YAAcjG,OAAOkG,KAAMC,iBAAmBnG,OAAOoG,UAAWC,cAAgBrG,OAAOsG,OAAQC,mBAAqBvG,OAAOwG,YACzP,SAASC,eAAeC,UACtB,IAAI74B,EAAI64B,SAASh8B,OACjB,SAASwmB,OAAOgU,MAEd,IADA,IAAgC1xB,EAAGM,EAAG9F,EAAlC24B,OAAS,GAAIh8B,GAAK,EAAGgJ,EAAI,IACpBhJ,EAAIkD,GACoB,KAA3B64B,SAASvJ,WAAWxyB,KACtBg8B,OAAO53B,KAAK23B,SAAS72B,MAAM8D,EAAGhJ,IAC4B,OAArDmJ,EAAI8yB,mBAAmBpzB,EAAIkzB,SAASruB,SAAS1N,OAAc6I,EAAIkzB,SAASruB,SAAS1N,KAClFqD,EAAI64B,gBAAgBrzB,MAAIA,EAAIxF,EAAEk3B,KAAW,MAALpxB,EAAkB,MAANN,EAAY,IAAM,IAAMM,IAC5E6yB,OAAO53B,KAAKyE,GACZG,EAAIhJ,EAAI,GAIZ,OADAg8B,OAAO53B,KAAK23B,SAAS72B,MAAM8D,EAAGhJ,IACvBg8B,OAAOnJ,KAAK,IA2BrB,OAzBAtM,OAAOmM,MAAQ,SAASsJ,QACtB,IAAInyB,EAAI,CACNwR,EAAG,KACHvR,EAAG,EACHD,EAAG,EACHT,EAAG,EACH+yB,EAAG,EACHzd,EAAG,EACH0d,EAAG,EACHC,EAAG,MAEL,GADOC,cAAczyB,EAAGkyB,SAAUC,OAAQ,IACjCA,OAAOj8B,OAAQ,OAAO,KAC3B,MAAO8J,IAAGA,EAAET,EAAIS,EAAET,EAAI,GAAW,GAANS,EAAEV,GACjC,IAAIozB,OAAgB,MAAP1yB,EAAEwyB,GAAaxE,UAAYC,YAAayC,KAAO,IAAKgC,OAASzE,YAAcD,SAOxF,MANI,MAAOhuB,EAAG0wB,KAAKf,YAAY3vB,EAAEwR,EAAG,EAAGxR,EAAEb,GAAa,MAAOa,GAAK,MAAOA,GACjE,MAAOA,IAAIA,EAAE+P,EAAI,MAAO/P,EAAI,EAAI,GACtC0wB,KAAKf,YAAY3vB,EAAEwR,EAAG,EAAG,GACzBkf,KAAKf,YAAY3vB,EAAEwR,EAAG,EAAG,MAAOxR,GAAKA,EAAE+P,EAAI,GAAK,EAAU,EAAN/P,EAAE2yB,GAASjC,KAAKrC,SAAW,GAAK,EAAIruB,EAAE+P,EAAU,EAAN/P,EAAE4yB,GAASlC,KAAKrC,SAAW,GAAK,IACzHqC,KAAKf,YAAY3vB,EAAEwR,EAAGxR,EAAEC,EAAGD,EAAEA,GACpC0wB,KAAKb,SAAS7vB,EAAET,GAAKS,EAAEwyB,EAAI,IAAM,GAAIxyB,EAAEsyB,EAAItyB,EAAEwyB,EAAI,IAAKxyB,EAAE6U,EAAG7U,EAAEuyB,GACtDG,OAAShC,KAAKruB,EAAIquB,MAE3BhU,OAAOvhB,SAAW,WAChB,OAAO+2B,UAEFxV,OAET,SAAS+V,cAAc/B,KAAMwB,SAAUC,OAAQhzB,GAE7C,IADA,IAAIH,EAAGM,EAAGuB,EAAG1K,EAAI,EAAGkD,EAAI64B,SAASh8B,OAAQ+J,EAAIkyB,OAAOj8B,OAC7CC,EAAIkD,GAAG,CACZ,GAAI8F,GAAKc,EAAG,OAAQ,EAEpB,GAAU,MADVjB,EAAIkzB,SAASvJ,WAAWxyB,OAItB,GAFA0K,EAAIqxB,SAASruB,OAAO1N,OACpBmJ,EAAIuzB,gBAAgBhyB,KAAKuxB,mBAAqBF,SAASruB,OAAO1N,KAAO0K,MAC1D1B,EAAIG,EAAEoxB,KAAMyB,OAAQhzB,IAAM,EAAG,OAAQ,OAC3C,GAAIH,GAAKmzB,OAAOxJ,WAAWxpB,KAChC,OAAQ,EAGZ,OAAOA,EAET8yB,eAAelB,IAAM,SAASmB,UAC5B,IAAIx0B,MAAQu0B,eAAeC,UAC3B,SAASxV,OAAOgU,MACd,IAEE,IAAIK,IAAM,IADV/C,QAAUC,aAGV,OADA8C,IAAI1uB,EAAIquB,KACDhzB,MAAMqzB,KACb,QACA/C,QAAUrxB,MAad,OAVA+f,OAAOmM,MAAQ,SAASsJ,QACtB,IACEnE,QAAUC,YACV,IAAIyC,KAAOhzB,MAAMmrB,MAAMsJ,QACvB,OAAOzB,MAAQA,KAAKruB,EACpB,QACA2rB,QAAUrxB,OAGd+f,OAAOvhB,SAAWuC,MAAMvC,SACjBuhB,QAETuV,eAAea,MAAQb,eAAelB,IAAI+B,MAAQC,oBAClD,IAAIC,qBAAuBr3B,GAAG8F,MAAOwxB,cAAgBC,iBAAiBzB,aAAc0B,kBAAoBC,qBAAqB3B,aAAc4B,oBAAsBH,iBAAiBvB,kBAAmB2B,wBAA0BF,qBAAqBzB,kBAAmB4B,gBAAkBL,iBAAiBrB,eAAgB2B,oBAAsBJ,qBAAqBvB,eAAgB4B,sBAAwBP,iBAAiBnB,oBAAqB2B,0BAA4BN,qBAAqBrB,oBACpeR,eAAe1uB,SAAQ,SAASvD,EAAGnJ,GACjC68B,qBAAqBlwB,IAAIxD,EAAEsd,cAAezmB,MAE5C,IAAIk8B,gBAAkB,CACpBx0B,EAAG,SAASmC,GACV,OAAO2xB,iBAAiB3xB,EAAEquB,WAE5BsF,EAAG,SAAS3zB,GACV,OAAOyxB,YAAYzxB,EAAEquB,WAEvBvwB,EAAG,SAASkC,GACV,OAAO+xB,mBAAmB/xB,EAAE+uB,aAE9B6E,EAAG,SAAS5zB,GACV,OAAO6xB,cAAc7xB,EAAE+uB,aAEzB/vB,EAAGizB,eAAed,iBAClBnxB,EAAG,SAASA,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEmuB,UAAW7uB,EAAG,IAE3ChG,EAAG,SAAS0G,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEmuB,UAAW7uB,EAAG,IAE3CC,EAAG,SAASS,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEyuB,WAAYnvB,EAAG,IAE5CoqB,EAAG,SAAS1pB,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEyuB,WAAa,IAAM,GAAInvB,EAAG,IAEvDH,EAAG,SAASa,EAAGV,GACb,OAAOu0B,kBAAkB,EAAI9F,QAAQ+F,UAAU9zB,GAAIV,EAAG,IAExDizB,EAAG,SAASvyB,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAE2uB,kBAAmBrvB,EAAG,IAEnDW,EAAG,SAASD,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAE+uB,WAAa,EAAGzvB,EAAG,IAEhDgzB,EAAG,SAAStyB,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAE6uB,aAAcvvB,EAAG,IAE9CA,EAAG,SAASU,GACV,OAAOuxB,iBAAiBvxB,EAAEyuB,YAAc,MAE1C5Z,EAAG,SAAS7U,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEivB,aAAc3vB,EAAG,IAE9CszB,EAAG,SAAS5yB,EAAGV,GACb,OAAOu0B,kBAAkB9F,QAAQgG,aAAa/zB,GAAIV,EAAG,IAEvDyQ,EAAG,SAAS/P,GACV,OAAOA,EAAEquB,UAEXsE,EAAG,SAAS3yB,EAAGV,GACb,OAAOu0B,kBAAkB9F,QAAQiG,aAAah0B,GAAIV,EAAG,IAEvDrB,EAAGg0B,eAAeZ,aAClB1D,EAAGsE,eAAeX,aAClB9f,EAAG,SAASxR,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEuuB,cAAgB,IAAKjvB,EAAG,IAErD20B,EAAG,SAASj0B,EAAGV,GACb,OAAOu0B,kBAAkB7zB,EAAEuuB,cAAgB,IAAKjvB,EAAG,IAErDkzB,EAAG0B,aACH,IAAK,WACH,MAAO,MAGPrB,gBAAkB,CACpBh1B,EAyBF,SAASs2B,2BAA2BzD,KAAMyB,OAAQh8B,GAChDk9B,oBAAoB3oB,UAAY,EAChC,IAAIrR,EAAIg6B,oBAAoB1W,KAAKwV,OAAO92B,MAAMlF,IAC9C,OAAOkD,GAAKq3B,KAAK3gB,EAAIujB,wBAAwBpvB,IAAI7K,EAAE,GAAGujB,eAAgBzmB,EAAIkD,EAAE,GAAGnD,SAAW,GA3B1Fy9B,EA6BF,SAASS,qBAAqB1D,KAAMyB,OAAQh8B,GAC1C88B,cAAcvoB,UAAY,EAC1B,IAAIrR,EAAI45B,cAActW,KAAKwV,OAAO92B,MAAMlF,IACxC,OAAOkD,GAAKq3B,KAAK3gB,EAAIojB,kBAAkBjvB,IAAI7K,EAAE,GAAGujB,eAAgBzmB,EAAIkD,EAAE,GAAGnD,SAAW,GA/BpF4H,EAiCF,SAASu2B,yBAAyB3D,KAAMyB,OAAQh8B,GAC9Cs9B,sBAAsB/oB,UAAY,EAClC,IAAIrR,EAAIo6B,sBAAsB9W,KAAKwV,OAAO92B,MAAMlF,IAChD,OAAOkD,GAAKq3B,KAAKzwB,EAAIyzB,0BAA0BxvB,IAAI7K,EAAE,GAAGujB,eAAgBzmB,EAAIkD,EAAE,GAAGnD,SAAW,GAnC5F09B,EAqCF,SAASU,mBAAmB5D,KAAMyB,OAAQh8B,GACxCo9B,gBAAgB7oB,UAAY,EAC5B,IAAIrR,EAAIk6B,gBAAgB5W,KAAKwV,OAAO92B,MAAMlF,IAC1C,OAAOkD,GAAKq3B,KAAKzwB,EAAIuzB,oBAAoBtvB,IAAI7K,EAAE,GAAGujB,eAAgBzmB,EAAIkD,EAAE,GAAGnD,SAAW,GAvCtF8I,EAyCF,SAASu1B,wBAAwB7D,KAAMyB,OAAQh8B,GAC7C,OAAOs8B,cAAc/B,KAAM2B,gBAAgBrzB,EAAE7D,WAAYg3B,OAAQh8B,IAzCjE6J,EAAGw0B,iBACHl7B,EAAGk7B,iBACHj1B,EAAGk1B,oBACH/K,EAAG+K,oBACHt1B,EAAGu1B,uBACHnC,EAAGoC,0BACH10B,EAAG20B,yBACHtC,EAAGuC,qBACHv1B,EAyCF,SAASw1B,kBAAkBpE,KAAMyB,OAAQh8B,GACvC,IAAIkD,EAAI25B,qBAAqB9uB,IAAIiuB,OAAO92B,MAAMlF,EAAGA,GAAK,GAAGymB,eACzD,OAAY,MAALvjB,GAAa,GAAKq3B,KAAKpxB,EAAIjG,EAAGlD,IA1CrC0e,EAAGkgB,qBACHnC,EAAGoC,8BACHjlB,EAAGklB,2BACHtC,EAAGuC,8BACHj3B,EA8BF,SAASk3B,wBAAwBzE,KAAMyB,OAAQh8B,GAC7C,OAAOs8B,cAAc/B,KAAM2B,gBAAgBp0B,EAAE9C,WAAYg3B,OAAQh8B,IA9BjEw3B,EAgCF,SAASyH,wBAAwB1E,KAAMyB,OAAQh8B,GAC7C,OAAOs8B,cAAc/B,KAAM2B,gBAAgB1E,EAAExyB,WAAYg3B,OAAQh8B,IAhCjEqb,EAAG6jB,kBACHpB,EAAGqB,sBACH9C,EAAG+C,kBACH,IAAKC,6BAmCP,OAAOvD,eAtQTlE,QAAQ0H,KAAOjF,kBAAiB,SAASE,MAGvC,OAFAA,KAAO3C,QAAQ2H,IAAIhF,OACdP,SAAS,EAAG,GACVO,QACN,SAASA,KAAME,QAChBF,KAAKf,YAAYe,KAAKnC,cAAgBqC,WACrC,SAASF,MACV,OAAOA,KAAKnC,iBAEdR,QAAQ4H,MAAQ5H,QAAQ0H,KAAKlzB,MAC7BwrB,QAAQ4H,MAAM5E,IAAMhD,QAAQ0H,KAAK1E,IAAIxuB,MACrCwrB,QAAQ2H,IAAMlF,kBAAiB,SAASE,MACtC,IAAIgF,IAAM,IAAI1H,QAAQ,IAAK,GAE3B,OADA0H,IAAI/F,YAAYe,KAAKnC,cAAemC,KAAK3B,WAAY2B,KAAKvC,WACnDuH,OACN,SAAShF,KAAME,QAChBF,KAAKpB,QAAQoB,KAAKvC,UAAYyC,WAC7B,SAASF,MACV,OAAOA,KAAKvC,UAAY,KAE1BJ,QAAQ2D,KAAO3D,QAAQ2H,IAAInzB,MAC3BwrB,QAAQ2D,KAAKX,IAAMhD,QAAQ2H,IAAI3E,IAAIxuB,MACnCwrB,QAAQ+F,UAAY,SAASpD,MAC3B,IAAI+E,KAAO1H,QAAQ0H,KAAK/E,MACxB,OAAOjxB,KAAKC,OAAOgxB,KAAO+E,KAA+D,KAAvD/E,KAAKtB,oBAAsBqG,KAAKrG,sBAA8B,QAElG,CAAE,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAAavsB,SAAQ,SAAS6yB,IAAKv/B,GACrGA,EAAI,EAAIA,EACR,IAAIy/B,SAAW7H,QAAQ2H,KAAOlF,kBAAiB,SAASE,MAEtD,OADCA,KAAO3C,QAAQ2H,IAAIhF,OAAOpB,QAAQoB,KAAKvC,WAAauC,KAAKrC,SAAWl4B,GAAK,GACnEu6B,QACN,SAASA,KAAME,QAChBF,KAAKpB,QAAQoB,KAAKvC,UAAiC,EAArB1uB,KAAKC,MAAMkxB,YACxC,SAASF,MACV,IAAIgF,IAAM3H,QAAQ0H,KAAK/E,MAAMrC,SAC7B,OAAO5uB,KAAKC,OAAOquB,QAAQ+F,UAAUpD,OAASgF,IAAMv/B,GAAK,GAAK,IAAMu/B,MAAQv/B,MAE9E43B,QAAQ2H,IAAM,KAAOE,SAASrzB,MAC9BwrB,QAAQ2H,IAAM,KAAK3E,IAAM6E,SAAS7E,IAAIxuB,MACtCwrB,QAAQ2H,IAAM,UAAY,SAAShF,MACjC,IAAIgF,IAAM3H,QAAQ0H,KAAK/E,MAAMrC,SAC7B,OAAO5uB,KAAKC,OAAOquB,QAAQ+F,UAAUpD,OAASgF,IAAMv/B,GAAK,GAAK,OAGlE43B,QAAQ8H,KAAO9H,QAAQ+H,OACvB/H,QAAQgI,MAAQhI,QAAQ+H,OAAOvzB,MAC/BwrB,QAAQgI,MAAMhF,IAAMhD,QAAQ+H,OAAO/E,IAAIxuB,MACvCwrB,QAAQiI,WAAajI,QAAQgG,aAyN7B,IAAI3B,mBAAqB,CACvB,IAAK,GACL/vB,EAAG,IACH,EAAK,KACJ4zB,iBAAmB,UAAWC,kBAAoB,KACrD,SAASrC,kBAAkB98B,MAAOw1B,KAAML,OACtC,IAAIO,KAAO11B,MAAQ,EAAI,IAAM,GAAIo7B,QAAU1F,MAAQ11B,MAAQA,OAAS,GAAIb,OAASi8B,OAAOj8B,OACxF,OAAOu2B,MAAQv2B,OAASg2B,MAAQ,IAAI71B,MAAM61B,MAAQh2B,OAAS,GAAG8yB,KAAKuD,MAAQ4F,OAASA,QAEtF,SAASe,iBAAiBiD,OACxB,OAAO,IAAInsB,OAAO,OAASmsB,MAAM10B,IAAI9F,GAAGkL,SAASmiB,KAAK,KAAO,IAAK,KAEpE,SAASoK,qBAAqB+C,OAE5B,IADA,IAAI10B,IAAM,IAAIW,OAAUjM,GAAK,EAAGkD,EAAI88B,MAAMjgC,SACjCC,EAAIkD,GAAGoI,IAAIqB,IAAIqzB,MAAMhgC,GAAGymB,cAAezmB,GAChD,OAAOsL,IAET,SAASwzB,2BAA2BvE,KAAMyB,OAAQh8B,GAChD8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAK3gB,GAAK1W,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAAS8+B,8BAA8BtE,KAAMyB,OAAQh8B,GACnD8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,IAC3C,OAAOkD,GAAKq3B,KAAKkC,GAAKv5B,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASg/B,8BAA8BxE,KAAMyB,OAAQh8B,GACnD8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,IAC3C,OAAOkD,GAAKq3B,KAAKiC,GAAKt5B,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASo/B,sBAAsB5E,KAAMyB,OAAQh8B,GAC3C8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAKlf,GAAKnY,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASm/B,kBAAkB3E,KAAMyB,OAAQh8B,GACvC8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAKlf,EAMnB,SAAS4kB,mBAAmBp2B,GAC1B,OAAOA,GAAKA,EAAI,GAAK,KAAO,KAPPo2B,EAAoB/8B,EAAE,IAAKlD,EAAIkD,EAAE,GAAGnD,SAAW,EAEtE,SAASq/B,kBAAkB7E,KAAMyB,OAAQh8B,GACvC,MAAO,cAAcqF,KAAK22B,OAASA,OAAO92B,MAAMlF,EAAGA,EAAI,KAAOu6B,KAAK8B,GAAKL,OACxEh8B,EAAI,IAAM,EAKZ,SAASy+B,yBAAyBlE,KAAMyB,OAAQh8B,GAC9C8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAKzwB,EAAI5G,EAAE,GAAK,EAAGlD,EAAIkD,EAAE,GAAGnD,SAAW,EAErD,SAASs+B,iBAAiB9D,KAAMyB,OAAQh8B,GACtC8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAK1wB,GAAK3G,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASw+B,uBAAuBhE,KAAMyB,OAAQh8B,GAC5C8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAKvxB,GAAK9F,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASu+B,oBAAoB/D,KAAMyB,OAAQh8B,GACzC8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAKnxB,GAAKlG,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAAS2+B,qBAAqBnE,KAAMyB,OAAQh8B,GAC1C8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAK4B,GAAKj5B,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAAS6+B,qBAAqBrE,KAAMyB,OAAQh8B,GAC1C8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAK7b,GAAKxb,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASy+B,0BAA0BjE,KAAMyB,OAAQh8B,GAC/C8/B,iBAAiBvrB,UAAY,EAC7B,IAAIrR,EAAI48B,iBAAiBtZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IAClD,OAAOkD,GAAKq3B,KAAK6B,GAAKl5B,EAAE,GAAIlD,EAAIkD,EAAE,GAAGnD,SAAW,EAElD,SAASg+B,aAAal0B,GACpB,IAAI4F,EAAI5F,EAAEovB,oBAAqBiH,GAAKzwB,EAAI,EAAI,IAAM,IAAK0wB,GAAKx0B,IAAI8D,GAAK,GAAK,EAAG2wB,GAAKz0B,IAAI8D,GAAK,GAC3F,OAAOywB,GAAKxC,kBAAkByC,GAAI,IAAK,GAAKzC,kBAAkB0C,GAAI,IAAK,GAEzE,SAASf,4BAA4B9E,KAAMyB,OAAQh8B,GACjD+/B,kBAAkBxrB,UAAY,EAC9B,IAAIrR,EAAI68B,kBAAkBvZ,KAAKwV,OAAO92B,MAAMlF,EAAGA,EAAI,IACnD,OAAOkD,EAAIlD,EAAIkD,EAAE,GAAGnD,QAAU,EAEhC,SAAS68B,oBAAoByD,SAE3B,IADA,IAAIn9B,EAAIm9B,QAAQtgC,OAAQC,GAAK,IACpBA,EAAIkD,GAAGm9B,QAAQrgC,GAAG,GAAKoB,KAAKi/B,QAAQrgC,GAAG,IAChD,OAAO,SAASu6B,MAEd,IADA,IAAIv6B,EAAI,EAAGqD,EAAIg9B,QAAQrgC,IACfqD,EAAE,GAAGk3B,OAAOl3B,EAAIg9B,UAAUrgC,GAClC,OAAOqD,EAAE,GAAGk3B,OAGhB/0B,GAAG6vB,OAAS,SAASA,QACnB,MAAO,CACLiL,aAAclL,uBAAuBC,QACrCkL,WAAYxF,qBAAqB1F,UAGrC,IAAImL,eAAiBh7B,GAAG6vB,OAAO,CAC7BE,QAAS,IACTE,UAAW,IACXE,SAAU,CAAE,GACZE,SAAU,CAAE,IAAK,IACjBoF,SAAU,iBACVV,KAAM,WACNjG,KAAM,WACN+G,QAAS,CAAE,KAAM,MACjBE,KAAM,CAAE,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC1EE,UAAW,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACvDE,OAAQ,CAAE,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACxHE,YAAa,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SAI9F,SAAS4E,YAFTj7B,GAAG+gB,OAASia,eAAeF,aAC3B96B,GAAGk7B,IAAM,GAETD,SAAS/9B,UAAY,CACnBO,EAAG,EACHyH,EAAG,EACHoE,IAAK,SAASuM,GACZslB,YAAYtlB,EAAGja,KAAKsJ,EAAGk2B,cACvBD,YAAYC,aAAa39B,EAAG7B,KAAK6B,EAAG7B,MAChCA,KAAK6B,EAAG7B,KAAKsJ,GAAKk2B,aAAal2B,EAAQtJ,KAAK6B,EAAI29B,aAAal2B,GAEnEm2B,MAAO,WACLz/B,KAAK6B,EAAI7B,KAAKsJ,EAAI,GAEpBwuB,QAAS,WACP,OAAO93B,KAAK6B,IAGhB,IAAI29B,aAAe,IAAIH,SACvB,SAASE,YAAYj5B,EAAGC,EAAG/E,GACzB,IAAIkF,EAAIlF,EAAEK,EAAIyE,EAAIC,EAAGm5B,GAAKh5B,EAAIJ,EAAGq5B,GAAKj5B,EAAIg5B,GAC1Cl+B,EAAE8H,EAAIhD,EAAIq5B,IAAMp5B,EAAIm5B,IAStB,SAASE,sBAAsBC,SAAUtxB,UACnCsxB,UAAYC,0BAA0BzwB,eAAewwB,SAASzwB,OAChE0wB,0BAA0BD,SAASzwB,MAAMywB,SAAUtxB,UATvDnK,GAAGk7B,IAAIS,OAAS,SAAS10B,OAAQkD,UAC3BlD,QAAU20B,wBAAwB3wB,eAAehE,OAAO+D,MAC1D4wB,wBAAwB30B,OAAO+D,MAAM/D,OAAQkD,UAE7CqxB,sBAAsBv0B,OAAQkD,WAQlC,IAAIyxB,wBAA0B,CAC5BC,QAAS,SAASC,QAAS3xB,UACzBqxB,sBAAsBM,QAAQL,SAAUtxB,WAE1C4xB,kBAAmB,SAAS90B,OAAQkD,UAElC,IADA,IAAI6xB,SAAW/0B,OAAO+0B,SAAUxhC,GAAK,EAAGkD,EAAIs+B,SAASzhC,SAC5CC,EAAIkD,GAAG89B,sBAAsBQ,SAASxhC,GAAGihC,SAAUtxB,YAG5DuxB,0BAA4B,CAC9BO,OAAQ,SAASh1B,OAAQkD,UACvBA,SAAS+xB,UAEXC,MAAO,SAASl1B,OAAQkD,UACtBlD,OAASA,OAAOm1B,YAChBjyB,SAAS8K,MAAMhO,OAAO,GAAIA,OAAO,GAAIA,OAAO,KAE9Co1B,WAAY,SAASp1B,OAAQkD,UAE3B,IADA,IAAIiyB,YAAcn1B,OAAOm1B,YAAa5hC,GAAK,EAAGkD,EAAI0+B,YAAY7hC,SACrDC,EAAIkD,GAAGuJ,OAASm1B,YAAY5hC,GAAI2P,SAAS8K,MAAMhO,OAAO,GAAIA,OAAO,GAAIA,OAAO,KAEvFq1B,WAAY,SAASr1B,OAAQkD,UAC3BoyB,kBAAkBt1B,OAAOm1B,YAAajyB,SAAU,IAElDqyB,gBAAiB,SAASv1B,OAAQkD,UAEhC,IADA,IAAIiyB,YAAcn1B,OAAOm1B,YAAa5hC,GAAK,EAAGkD,EAAI0+B,YAAY7hC,SACrDC,EAAIkD,GAAG6+B,kBAAkBH,YAAY5hC,GAAI2P,SAAU,IAE9DsyB,QAAS,SAASx1B,OAAQkD,UACxBuyB,qBAAqBz1B,OAAOm1B,YAAajyB,WAE3CwyB,aAAc,SAAS11B,OAAQkD,UAE7B,IADA,IAAIiyB,YAAcn1B,OAAOm1B,YAAa5hC,GAAK,EAAGkD,EAAI0+B,YAAY7hC,SACrDC,EAAIkD,GAAGg/B,qBAAqBN,YAAY5hC,GAAI2P,WAEvDyyB,mBAAoB,SAAS31B,OAAQkD,UAEnC,IADA,IAAI0yB,WAAa51B,OAAO41B,WAAYriC,GAAK,EAAGkD,EAAIm/B,WAAWtiC,SAClDC,EAAIkD,GAAG89B,sBAAsBqB,WAAWriC,GAAI2P,YAGzD,SAASoyB,kBAAkBH,YAAajyB,SAAU2yB,QAChD,IAA6CC,WAAzCviC,GAAK,EAAGkD,EAAI0+B,YAAY7hC,OAASuiC,OAErC,IADA3yB,SAAS6yB,cACAxiC,EAAIkD,GAAGq/B,WAAaX,YAAY5hC,GAAI2P,SAAS8K,MAAM8nB,WAAW,GAAIA,WAAW,GAAIA,WAAW,IACrG5yB,SAAS8yB,UAEX,SAASP,qBAAqBN,YAAajyB,UACzC,IAAI3P,GAAK,EAAGkD,EAAI0+B,YAAY7hC,OAE5B,IADA4P,SAAS+yB,iBACA1iC,EAAIkD,GAAG6+B,kBAAkBH,YAAY5hC,GAAI2P,SAAU,GAC5DA,SAASgzB,aAEXn9B,GAAGk7B,IAAIkC,KAAO,SAASn2B,QAGrB,OAFAo2B,eAAiB,EACjBr9B,GAAGk7B,IAAIS,OAAO10B,OAAQq2B,aACfD,gBAET,IAAIA,eA8MAE,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBAAmBC,kBA9M9KC,mBAAqB,IAAIjD,SACzCqC,YAAc,CAChBpB,OAAQ,WACNmB,gBAAkB,EAAI,GAExBpoB,MAAOxL,QACPuzB,UAAWvzB,QACXwzB,QAASxzB,QACTyzB,aAAc,WACZgB,mBAAmB7C,QACnBiC,YAAYN,UAAYmB,sBAE1BhB,WAAY,WACV,IAAIC,KAAO,EAAIc,mBACfb,gBAAkBD,KAAO,EAAI,EAAI,EAAIA,KAAOA,KAC5CE,YAAYN,UAAYM,YAAYL,QAAUK,YAAYroB,MAAQxL,UAGtE,SAAS00B,uBACP,IAAI,IAAK,IAAK,GAAI,MAAO,MAMzB,SAASC,UAAU,EAAG,GAEpB,EAAI,EAAIjmB,WAAa,EAAI,EAAI,EAC7B,IAAI,IAFJ,GAAKA,YAEQ,GAAI,IAAM,IAAM,EAAI,GAAK,EAAG,IAAM,IAAM,GAAI,KAAOrU,KAAKoc,IAAI,GAAI,KAAOpc,KAAKgV,IAAI,GAAIzS,EAAI,MAAQ,KAAM4T,EAAI,MAAQ,KAAO5T,EAAIvC,KAAKoc,IAAI,KAAMlc,EAAIqC,EAAI,IAAMvC,KAAKgV,IAAI,KAChLolB,mBAAmB50B,IAAIxF,KAAK2c,MAAMzc,EAAGiW,IACrC,GAAK,EAAG,MAAQ,KAAM,MAAQ,KAVhCqjB,YAAYroB,MAAQ,SAAS,EAAG,GAC9BqoB,YAAYroB,MAAQmpB,UACpB,IAAM,IAAM,GAAKjmB,WAAY,MAAQrU,KAAKoc,IAAI,GAAK,IAAM,GAAK/H,WAAa,EAAI,EAAI,GACnF,MAAQrU,KAAKgV,IAAI,IASnBwkB,YAAYL,QAAU,WACpBmB,UAAU,IAAK,MAGnB,SAASC,iBAAiBC,WACxB,IAAI,EAAIA,UAAU,GAAI,EAAIA,UAAU,GAAI,KAAOx6B,KAAKoc,IAAI,GACxD,MAAO,CAAE,KAAOpc,KAAKoc,IAAI,GAAI,KAAOpc,KAAKgV,IAAI,GAAIhV,KAAKgV,IAAI,IAE5D,SAASylB,oBAAoBr8B,EAAGC,GAC9B,OAAOD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAE9C,SAASq8B,sBAAsBt8B,EAAGC,GAChC,MAAO,CAAED,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAID,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAID,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,IAExF,SAASs8B,oBAAoBv8B,EAAGC,GAC9BD,EAAE,IAAMC,EAAE,GACVD,EAAE,IAAMC,EAAE,GACVD,EAAE,IAAMC,EAAE,GAEZ,SAASu8B,sBAAsBC,OAAQt4B,GACrC,MAAO,CAAEs4B,OAAO,GAAKt4B,EAAGs4B,OAAO,GAAKt4B,EAAGs4B,OAAO,GAAKt4B,GAErD,SAASu4B,0BAA0Bv6B,GACjC,IAAI2F,EAAIlG,KAAKU,KAAKH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IACvDA,EAAE,IAAM2F,EACR3F,EAAE,IAAM2F,EACR3F,EAAE,IAAM2F,EAEV,SAAS60B,iBAAiBC,WACxB,MAAO,CAAEh7B,KAAK2c,MAAMqe,UAAU,GAAIA,UAAU,IAAKrmB,QAAQqmB,UAAU,KAErE,SAASC,sBAAsB78B,EAAGC,GAChC,OAAOgE,IAAIjE,EAAE,GAAKC,EAAE,IAAM,GAAKgE,IAAIjE,EAAE,GAAKC,EAAE,IAAM,EAEpDnC,GAAGk7B,IAAI8D,OAAS,WACd,IAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK/lB,GAAI,MAAOgmB,OAAQr4B,MACjDs4B,MAAQ,CACVjqB,MAAOA,MACP+nB,UAAWA,UACXC,QAASA,QACTC,aAAc,WACZgC,MAAMjqB,MAAQkqB,UACdD,MAAMlC,UAAYoC,UAClBF,MAAMjC,QAAUoC,QAChB,MAAQ,EACR/B,YAAYJ,gBAEdC,WAAY,WACVG,YAAYH,aACZ+B,MAAMjqB,MAAQA,MACdiqB,MAAMlC,UAAYA,UAClBkC,MAAMjC,QAAUA,QACZiB,mBAAqB,GAAG,KAAO,GAAK,KAAM,KAAO,GAAK,KAAc,MAAQ,EAAG,GAAK,GAAa,OAAS,IAAG,IAAM,IACvHt3B,MAAM,GAAK,GAAIA,MAAM,GAAK,KAG9B,SAASqO,MAAM,EAAG,GAChBgqB,OAAOrgC,KAAKgI,MAAQ,CAAE,GAAK,EAAG,GAAK,IAC/B,EAAI,KAAI,GAAK,GACb,EAAI,KAAI,GAAK,GAEnB,SAAS04B,UAAU,EAAG,GACpB,IAAI37B,EAAI06B,iBAAiB,CAAE,EAAIlmB,WAAY,EAAIA,aAC/C,GAAIc,GAAI,CACN,IAAIsmB,OAASf,sBAAsBvlB,GAAItV,GAA+C67B,WAAahB,sBAA3C,CAAEe,OAAO,IAAKA,OAAO,GAAI,GAAoDA,QACrIX,0BAA0BY,YAC1BA,WAAaX,iBAAiBW,YAC9B,IAAI,GAAK,EAAI,GAAI/hC,EAAI,GAAK,EAAI,GAAK,EAAG,GAAK+hC,WAAW,GAAKpnB,WAAa3a,EAAGgiC,aAAet5B,IAAI,IAAM,IACpG,GAAIs5B,cAAgBhiC,EAAI,GAAK,IAAM,GAAKA,EAAI,IACtC,GAAK+hC,WAAW,GAAKpnB,YAChB,KAAI,GAAK,SACb,GAAiCqnB,cAAgBhiC,EAAI,IAAjD,IAAM,GAAK,KAAO,IAAM,MAAoC,GAAKA,EAAI,GAAI,CAClF,IAAI,QAAM+hC,WAAW,GAAKpnB,YACjB,KAAI,GAAK,SAEd,EAAI,KAAI,GAAK,GACb,EAAI,KAAI,GAAK,GAEfqnB,aACE,EAAI,GACFC,MAAM,GAAI,GAAKA,MAAM,GAAI,MAAK,GAAK,GAEnCA,MAAM,EAAG,IAAMA,MAAM,GAAI,MAAK,GAAK,GAGrC,IAAM,IACJ,EAAI,KAAI,GAAK,GACb,EAAI,KAAI,GAAK,IAEb,EAAI,GACFA,MAAM,GAAI,GAAKA,MAAM,GAAI,MAAK,GAAK,GAEnCA,MAAM,EAAG,IAAMA,MAAM,GAAI,MAAK,GAAK,QAK7CzqB,MAAM,EAAG,GAEXgE,GAAKtV,EAAG,GAAK,EAEf,SAASq5B,YACPkC,MAAMjqB,MAAQqqB,UAEhB,SAASrC,UACPr2B,MAAM,GAAK,GAAIA,MAAM,GAAK,GAC1Bs4B,MAAMjqB,MAAQA,MACdgE,GAAK,KAEP,SAASkmB,UAAU,EAAG,GACpB,GAAIlmB,GAAI,CACN,IAAI,GAAK,EAAI,GACb,OAAS9S,IAAI,IAAM,IAAM,IAAM,GAAK,EAAI,KAAO,KAAO,QACjD,IAAM,EAAG,IAAM,EACtBm3B,YAAYroB,MAAM,EAAG,GACrBqqB,UAAU,EAAG,GAEf,SAASF,YACP9B,YAAYN,YAEd,SAASqC,UACPF,UAAU,IAAK,KACf7B,YAAYL,UACR92B,IAAI,OAAS,IAAG,KAAO,GAAK,MAChCS,MAAM,GAAK,GAAIA,MAAM,GAAK,GAC1BqS,GAAK,KAEP,SAASymB,MAAM,GAAI,IACjB,OAAQ,IAAM,IAAM,EAAI,GAAK,IAAM,GAErC,SAASC,cAAcz9B,EAAGC,GACxB,OAAOD,EAAE,GAAKC,EAAE,GAElB,SAASy9B,YAAYt9B,EAAGsE,OACtB,OAAOA,MAAM,IAAMA,MAAM,GAAKA,MAAM,IAAMtE,GAAKA,GAAKsE,MAAM,GAAKtE,EAAIsE,MAAM,IAAMA,MAAM,GAAKtE,EAE5F,OAAO,SAASw5B,SAKd,GAJA,GAAK,KAAO,GAAK,GAAK/0B,KACtBk4B,OAAS,GACTj/B,GAAGk7B,IAAIS,OAAOG,QAASoD,OACnBxhC,EAAIuhC,OAAO1kC,OACR,CACL0kC,OAAO96B,KAAKw7B,eACZ,IAAK,IAAInlC,EAAI,EAAqB0L,OAAS,CAA3BhE,EAAI+8B,OAAO,IAAuBzkC,EAAIkD,IAAKlD,EAErDolC,aADJz9B,EAAI88B,OAAOzkC,IACO,GAAI0H,IAAM09B,YAAYz9B,EAAE,GAAID,IACxCw9B,MAAMx9B,EAAE,GAAIC,EAAE,IAAMu9B,MAAMx9B,EAAE,GAAIA,EAAE,MAAKA,EAAE,GAAKC,EAAE,IAChDu9B,MAAMv9B,EAAE,GAAID,EAAE,IAAMw9B,MAAMx9B,EAAE,GAAIA,EAAE,MAAKA,EAAE,GAAKC,EAAE,KAEpD+D,OAAOtH,KAAKsD,EAAIC,GAIpB,IADA,IAAsB,GACbzE,EAA6CyE,EADlD09B,MAAQ94B,IAC2B7E,GAAP1H,EAAI,EAAO0L,OAAlCxI,EAAIwI,OAAO3L,OAAS,IAA4BC,GAAKkD,EAAGwE,EAAIC,IAAK3H,EACxE2H,EAAI+D,OAAO1L,IACN,GAAKklC,MAAMx9B,EAAE,GAAIC,EAAE,KAAO09B,OAAMA,KAAO,GAAI,GAAK19B,EAAE,GAAI,GAAKD,EAAE,IAItE,OADA+8B,OAASr4B,MAAQ,KACV,KAAOG,KAAY,KAAOA,IAAW,CAAE,CAAE3E,IAAKA,KAAO,CAAEA,IAAKA,MAAU,CAAE,CAAE,GAAI,IAAM,CAAE,GAAI,MA7HrF,GAgIhBpC,GAAGk7B,IAAI4E,SAAW,SAAS74B,QACzBs2B,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoB,EAC5Nj+B,GAAGk7B,IAAIS,OAAO10B,OAAQ84B,iBACtB,IAAIz9B,EAAIy7B,kBAAmBloB,EAAImoB,kBAAmB/zB,EAAIg0B,kBAAmB35B,EAAIhC,EAAIA,EAAIuT,EAAIA,EAAI5L,EAAIA,EACjG,OAAI3F,EAAI,KACNhC,EAAIs7B,kBAAmB/nB,EAAIgoB,kBAAmB5zB,EAAI6zB,kBAC9CN,kBAAoB,IAAGl7B,EAAIm7B,kBAAmB5nB,EAAI6nB,kBAAmBzzB,EAAI0zB,oBAC7Er5B,EAAIhC,EAAIA,EAAIuT,EAAIA,EAAI5L,EAAIA,GAChB,IAAW,CAAE7H,IAAKA,KAErB,CAAE0B,KAAK2c,MAAM5K,EAAGvT,GAAK8V,WAAYK,QAAQxO,EAAInG,KAAKU,KAAKF,IAAM8T,aAGtE,IAAI2nB,gBAAkB,CACpB7D,OAAQzyB,QACRwL,MAAO+qB,qBACPhD,UAAWiD,yBACXhD,QAASiD,uBACThD,aAAc,WACZ6C,gBAAgB/C,UAAYmD,0BAE9BhD,WAAY,WACV4C,gBAAgB/C,UAAYiD,2BAGhC,SAASD,qBAAqB,EAAG,GAC/B,GAAK7nB,WACL,IAAI,KAAOrU,KAAKoc,IAAI,GAAK/H,YACzBioB,wBAAwB,KAAOt8B,KAAKoc,IAAI,GAAI,KAAOpc,KAAKgV,IAAI,GAAIhV,KAAKgV,IAAI,IAE3E,SAASsnB,wBAAwB99B,EAAGuT,EAAG5L,KACnCszB,kBACFE,oBAAsBn7B,EAAIm7B,mBAAqBF,kBAC/CG,oBAAsB7nB,EAAI6nB,mBAAqBH,kBAC/CI,oBAAsB1zB,EAAI0zB,mBAAqBJ,kBAEjD,SAAS0C,2BACP,IAAItlB,GAAIE,GAAIwlB,GAUZ,SAASjC,UAAU,EAAG,GACpB,GAAKjmB,WACL,IAAI,KAAOrU,KAAKoc,IAAI,GAAK/H,YAAa7V,EAAI,KAAOwB,KAAKoc,IAAI,GAAIrK,EAAI,KAAO/R,KAAKgV,IAAI,GAAI7O,EAAInG,KAAKgV,IAAI,GAAI1E,EAAItQ,KAAK2c,MAAM3c,KAAKU,MAAM4P,EAAIyG,GAAK5Q,EAAIo2B,GAAKxqB,GAAKzB,GAAKA,EAAIisB,GAAK/9B,EAAIqY,GAAK1Q,GAAKmK,GAAKA,EAAIuG,GAAK9E,EAAIgF,GAAKvY,GAAK8R,GAAIuG,GAAKrY,EAAIuY,GAAKhF,EAAIwqB,GAAKp2B,GAC3OuzB,mBAAqBppB,EACrBwpB,mBAAqBxpB,GAAKuG,IAAMA,GAAKrY,IACrCu7B,mBAAqBzpB,GAAKyG,IAAMA,GAAKhF,IACrCioB,mBAAqB1pB,GAAKisB,IAAMA,GAAKp2B,IACrCm2B,wBAAwBzlB,GAAIE,GAAIwlB,IAhBlCN,gBAAgB9qB,MAAQ,SAAS,EAAG,GAClC,GAAKkD,WACL,IAAI,KAAOrU,KAAKoc,IAAI,GAAK/H,YACzBwC,GAAK,KAAO7W,KAAKoc,IAAI,GACrBrF,GAAK,KAAO/W,KAAKgV,IAAI,GACrBunB,GAAKv8B,KAAKgV,IAAI,GACdinB,gBAAgB9qB,MAAQmpB,UACxBgC,wBAAwBzlB,GAAIE,GAAIwlB,KAYpC,SAASH,yBACPH,gBAAgB9qB,MAAQ+qB,qBAE1B,SAASG,2BACP,IAAI,IAAK,IAAKxlB,GAAIE,GAAIwlB,GAgBtB,SAASjC,UAAU,EAAG,GACpB,GAAKjmB,WACL,IAAI,KAAOrU,KAAKoc,IAAI,GAAK/H,YAAa7V,EAAI,KAAOwB,KAAKoc,IAAI,GAAIrK,EAAI,KAAO/R,KAAKgV,IAAI,GAAI7O,EAAInG,KAAKgV,IAAI,GAAIyF,GAAK1D,GAAK5Q,EAAIo2B,GAAKxqB,EAAG2I,GAAK6hB,GAAK/9B,EAAIqY,GAAK1Q,EAAGq2B,GAAK3lB,GAAK9E,EAAIgF,GAAKvY,EAAGgC,EAAIR,KAAKU,KAAK+Z,GAAKA,GAAKC,GAAKA,GAAK8hB,GAAKA,IAAKrmB,EAAIU,GAAKrY,EAAIuY,GAAKhF,EAAIwqB,GAAKp2B,EAAGjG,EAAIM,IAAMiU,QAAQ0B,GAAK3V,EAAG8P,EAAItQ,KAAK2c,MAAMnc,EAAG2V,GAC/R8jB,mBAAqB/5B,EAAIua,GACzByf,mBAAqBh6B,EAAIwa,GACzByf,mBAAqBj6B,EAAIs8B,GACzB9C,mBAAqBppB,EACrBwpB,mBAAqBxpB,GAAKuG,IAAMA,GAAKrY,IACrCu7B,mBAAqBzpB,GAAKyG,IAAMA,GAAKhF,IACrCioB,mBAAqB1pB,GAAKisB,IAAMA,GAAKp2B,IACrCm2B,wBAAwBzlB,GAAIE,GAAIwlB,IAzBlCN,gBAAgB9qB,MAAQ,SAAS,EAAG,GAClC,IAAM,EAAG,IAAM,EACf8qB,gBAAgB9qB,MAAQmpB,UACxB,GAAKjmB,WACL,IAAI,KAAOrU,KAAKoc,IAAI,GAAK/H,YACzBwC,GAAK,KAAO7W,KAAKoc,IAAI,GACrBrF,GAAK,KAAO/W,KAAKgV,IAAI,GACrBunB,GAAKv8B,KAAKgV,IAAI,GACdsnB,wBAAwBzlB,GAAIE,GAAIwlB,KAElCN,gBAAgB9C,QAAU,WACxBmB,UAAU,IAAK,KACf2B,gBAAgB9C,QAAUiD,uBAC1BH,gBAAgB9qB,MAAQ+qB,sBAe5B,SAASO,eAAer+B,EAAGC,GACzB,SAASq+B,QAAQl+B,EAAGuT,GAClB,OAAOvT,EAAIJ,EAAEI,EAAGuT,GAAI1T,EAAEG,EAAE,GAAIA,EAAE,IAKhC,OAHIJ,EAAEka,QAAUja,EAAEia,SAAQokB,QAAQpkB,OAAS,SAAS9Z,EAAGuT,GACrD,OAAOvT,EAAIH,EAAEia,OAAO9Z,EAAGuT,KAAS3T,EAAEka,OAAO9Z,EAAE,GAAIA,EAAE,MAE5Ck+B,QAET,SAASC,UACP,OAAO,EAET,SAASC,mBAAmBC,SAAUj+B,QAASk+B,gBAAiBC,YAAa12B,UAC3E,IAAI8M,QAAU,GAAI6pB,KAAO,GAuBzB,GAtBAH,SAASz5B,SAAQ,SAAS65B,SACxB,MAAKrjC,EAAIqjC,QAAQxmC,OAAS,IAAM,GAAhC,CACA,IAAImD,EAAGub,GAAK8nB,QAAQ,GAAIv7B,GAAKu7B,QAAQrjC,GACrC,GAAIqhC,sBAAsB9lB,GAAIzT,IAA9B,CACE2E,SAAS6yB,YACT,IAAK,IAAIxiC,EAAI,EAAGA,EAAIkD,IAAKlD,EAAG2P,SAAS8K,OAAOgE,GAAK8nB,QAAQvmC,IAAI,GAAIye,GAAG,IACpE9O,SAAS8yB,cAHX,CAMA,IAAI/6B,EAAI,IAAI8+B,+BAA+B/nB,GAAI8nB,QAAS,MAAM,GAAO5+B,EAAI,IAAI6+B,+BAA+B/nB,GAAI,KAAM/W,GAAG,GACzHA,EAAE9E,EAAI+E,EACN8U,QAAQrY,KAAKsD,GACb4+B,KAAKliC,KAAKuD,GACVD,EAAI,IAAI8+B,+BAA+Bx7B,GAAIu7B,QAAS,MAAM,GAC1D5+B,EAAI,IAAI6+B,+BAA+Bx7B,GAAI,KAAMtD,GAAG,GACpDA,EAAE9E,EAAI+E,EACN8U,QAAQrY,KAAKsD,GACb4+B,KAAKliC,KAAKuD,QAEZ2+B,KAAK38B,KAAKzB,SACVu+B,+BAA+BhqB,SAC/BgqB,+BAA+BH,MAC1B7pB,QAAQ1c,OAAb,CACA,IAAK,IAAIC,EAAI,EAAG0mC,MAAQN,gBAAiBljC,EAAIojC,KAAKvmC,OAAQC,EAAIkD,IAAKlD,EACjEsmC,KAAKtmC,GAAGmD,EAAIujC,OAASA,MAGvB,IADA,IAAwBC,OAAQlsB,MAA5BpO,MAAQoQ,QAAQ,KACV,CAER,IADA,IAAImqB,QAAUv6B,MAAOw6B,WAAY,EAC1BD,QAAQp9B,OAAQo9B,QAAUA,QAAQ1jC,KAAOmJ,MAAO,OACvDs6B,OAASC,QAAQn3B,EACjBE,SAAS6yB,YACT,EAAG,CAED,GADAoE,QAAQp9B,EAAIo9B,QAAQhkC,EAAE4G,GAAI,EACtBo9B,QAAQzjC,EAAG,CACb,GAAI0jC,UACF,IAAS7mC,EAAI,EAAGkD,EAAIyjC,OAAO5mC,OAAQC,EAAIkD,IAAKlD,EAAG2P,SAAS8K,OAAOA,MAAQksB,OAAO3mC,IAAI,GAAIya,MAAM,SAE5F4rB,YAAYO,QAAQ9+B,EAAG8+B,QAAQ1jC,EAAE4E,EAAG,EAAG6H,UAEzCi3B,QAAUA,QAAQ1jC,MACb,CACL,GAAI2jC,UAEF,IAAS7mC,GADT2mC,OAASC,QAAQz9B,EAAEsG,GACC1P,OAAS,EAAGC,GAAK,IAAKA,EAAG2P,SAAS8K,OAAOA,MAAQksB,OAAO3mC,IAAI,GAAIya,MAAM,SAE1F4rB,YAAYO,QAAQ9+B,EAAG8+B,QAAQz9B,EAAErB,GAAI,EAAG6H,UAE1Ci3B,QAAUA,QAAQz9B,EAGpBw9B,QADAC,QAAUA,QAAQhkC,GACD6M,EACjBo3B,WAAaA,iBACLD,QAAQp9B,GAClBmG,SAAS8yB,YAGb,SAASgE,+BAA+BlgC,OACtC,GAAMrD,EAAIqD,MAAMxG,OAAhB,CAEA,IADA,IAAImD,EAAwByE,EAArB3H,EAAI,EAAG0H,EAAInB,MAAM,KACfvG,EAAIkD,GACXwE,EAAExE,EAAIyE,EAAIpB,MAAMvG,GAChB2H,EAAEwB,EAAIzB,EACNA,EAAIC,EAEND,EAAExE,EAAIyE,EAAIpB,MAAM,GAChBoB,EAAEwB,EAAIzB,GAER,SAAS8+B,+BAA+B/rB,MAAOksB,OAAQG,MAAOJ,OAC5DtlC,KAAK0G,EAAI2S,MACTrZ,KAAKqO,EAAIk3B,OACTvlC,KAAKwB,EAAIkkC,MACT1lC,KAAK+B,EAAIujC,MACTtlC,KAAKoI,GAAI,EACTpI,KAAK8B,EAAI9B,KAAK+H,EAAI,KAEpB,SAAS49B,YAAYC,aAAcC,SAAUZ,YAAaa,WACxD,OAAO,SAASC,OAAQx3B,UACtB,IAsDIw2B,SAtDAiB,KAAOH,SAASt3B,UAAW03B,iBAAmBF,OAAOvlB,OAAOslB,UAAU,GAAIA,UAAU,IACpFZ,KAAO,CACT7rB,MAAOA,MACP+nB,UAAWA,UACXC,QAASA,QACTC,aAAc,WACZ4D,KAAK7rB,MAAQ6sB,UACbhB,KAAK9D,UAAYoC,UACjB0B,KAAK7D,QAAUoC,QACfsB,SAAW,GACXoB,QAAU,IAEZ5E,WAAY,WACV2D,KAAK7rB,MAAQA,MACb6rB,KAAK9D,UAAYA,UACjB8D,KAAK7D,QAAUA,QACf0D,SAAW3gC,GAAGgG,MAAM26B,UACpB,IAAIC,gBAuKZ,SAASoB,sBAAsB/sB,MAAO8sB,SACpC,IAAIE,SAAWhtB,MAAM,GAAIitB,SAAWjtB,MAAM,GAAIktB,eAAiB,CAAEr+B,KAAKgV,IAAImpB,WAAYn+B,KAAKoc,IAAI+hB,UAAW,GAAKG,WAAa,EAAGC,QAAU,EACzInE,mBAAmB7C,QACnB,IAAK,IAAI7gC,EAAI,EAAGkD,EAAIqkC,QAAQxnC,OAAQC,EAAIkD,IAAKlD,EAAG,CAC9C,IAAI8nC,KAAOP,QAAQvnC,GAAI8J,EAAIg+B,KAAK/nC,OAChC,GAAK+J,EAEL,IADA,IAAIi+B,OAASD,KAAK,GAAI,GAAKC,OAAO,GAAI,GAAKA,OAAO,GAAK,EAAI,EAAI,EAAG,MAAQz+B,KAAKgV,IAAI,IAAK,MAAQhV,KAAKoc,IAAI,IAAK1c,EAAI,IACrG,CACPA,IAAMc,IAAGd,EAAI,GAEjB,IAAI,GADJyR,MAAQqtB,KAAK9+B,IACC,GAAI,EAAIyR,MAAM,GAAK,EAAI,EAAI,EAAG,KAAOnR,KAAKgV,IAAI,GAAI,KAAOhV,KAAKoc,IAAI,GAAI,GAAK,EAAI,GAAI,IAAM,IAAM,EAAI,GAAK,EAAG,IAAM,IAAM,GAAIuf,aAAe,IAAM,EAAGp5B,EAAI,MAAQ,KAG7K,GAFA63B,mBAAmB50B,IAAIxF,KAAK2c,MAAMpa,EAAI,IAAMvC,KAAKgV,IAAI,KAAM,MAAQ,KAAOzS,EAAIvC,KAAKoc,IAAI,OACvFkiB,YAAc3C,aAAe,GAAK,IAAM,EAAI,GACxCA,aAAe,IAAMwC,SAAW,GAAKA,SAAU,CACjD,IAAIO,IAAMhE,sBAAsBH,iBAAiBkE,QAASlE,iBAAiBppB,QAC3E2pB,0BAA0B4D,KAC1B,IAAIC,aAAejE,sBAAsB2D,eAAgBK,KACzD5D,0BAA0B6D,cAC1B,IAAI,MAAQhD,aAAe,IAAM,GAAK,EAAI,GAAKhnB,QAAQgqB,aAAa,KAChEP,SAAW,MAAQA,WAAa,OAASM,IAAI,IAAMA,IAAI,OACzDH,SAAW5C,aAAe,IAAM,EAAI,GAAK,GAG7C,IAAKj8B,IAAK,MACV,GAAK,EAAG,MAAQ,KAAM,MAAQ,KAAM++B,OAASttB,OAGjD,OAAQmtB,YAAc,GAAKA,WAAa,GAAKlE,oBAAsB,GAAe,EAAVmE,QAlM5CL,CAAsBH,iBAAkBE,SAC1DpB,SAASpmC,QACNmoC,iBAAgBv4B,SAAS+yB,eAAgBwF,gBAAiB,GAC/DhC,mBAAmBC,SAAUgC,gBAAiB/B,gBAAiBC,YAAa12B,WACnEy2B,kBACJ8B,iBAAgBv4B,SAAS+yB,eAAgBwF,gBAAiB,GAC/Dv4B,SAAS6yB,YACT6D,YAAY,KAAM,KAAM,EAAG12B,UAC3BA,SAAS8yB,WAEPyF,iBAAgBv4B,SAASgzB,aAAcuF,gBAAiB,GAC5D/B,SAAWoB,QAAU,MAEvB7F,OAAQ,WACN/xB,SAAS+yB,eACT/yB,SAAS6yB,YACT6D,YAAY,KAAM,KAAM,EAAG12B,UAC3BA,SAAS8yB,UACT9yB,SAASgzB,eAGb,SAASloB,MAAM,EAAG,GAChB,IAAIA,MAAQ0sB,OAAO,EAAG,GAClBH,aAAa,EAAIvsB,MAAM,GAAI,EAAIA,MAAM,KAAK9K,SAAS8K,MAAM,EAAG,GAElE,SAAS2tB,UAAU,EAAG,GACpB,IAAI3tB,MAAQ0sB,OAAO,EAAG,GACtBC,KAAK3sB,MAAMA,MAAM,GAAIA,MAAM,IAE7B,SAAS+nB,YACP8D,KAAK7rB,MAAQ2tB,UACbhB,KAAK5E,YAEP,SAASC,UACP6D,KAAK7rB,MAAQA,MACb2sB,KAAK3E,UAGP,IAAmG8E,QAASO,KAAxGO,OAASC,4BAA6BC,aAAetB,SAASoB,QAASH,gBAAiB,EAC5F,SAASZ,UAAU,EAAG,GACpBQ,KAAK1jC,KAAK,CAAE,EAAG,IACf,IAAIqW,MAAQ0sB,OAAO,EAAG,GACtBoB,aAAa9tB,MAAMA,MAAM,GAAIA,MAAM,IAErC,SAASmqB,YACP2D,aAAa/F,YACbsF,KAAO,GAET,SAASjD,UACPyC,UAAUQ,KAAK,GAAG,GAAIA,KAAK,GAAG,IAC9BS,aAAa9F,UACb,IAAkE8D,QAA9DiC,MAAQD,aAAaC,QAASC,aAAeJ,OAAOA,SAAmBnlC,EAAIulC,aAAa1oC,OAI5F,GAHA+nC,KAAKY,MACLnB,QAAQnjC,KAAK0jC,MACbA,KAAO,KACF5kC,EACL,GAAY,EAARslC,MAAJ,CAEE,IAAoC/tB,MAARza,GAAK,EACjC,IADIkD,GADJqjC,QAAUkC,aAAa,IACP1oC,OAAS,GACjB,EAAG,CAGT,IAFKmoC,iBAAgBv4B,SAAS+yB,eAAgBwF,gBAAiB,GAC/Dv4B,SAAS6yB,cACAxiC,EAAIkD,GAAGyM,SAAS8K,OAAOA,MAAQ8rB,QAAQvmC,IAAI,GAAIya,MAAM,IAC9D9K,SAAS8yB,gBAITv/B,EAAI,GAAa,EAARslC,OAAWC,aAAarkC,KAAKqkC,aAAaC,MAAM74B,OAAO44B,aAAaE,UACjFxC,SAAS/hC,KAAKqkC,aAAazwB,OAAO4wB,4BAEpC,OAAOtC,MAGX,SAASsC,0BAA0BrC,SACjC,OAAOA,QAAQxmC,OAAS,EAE1B,SAASuoC,4BACP,IAAgBlB,KAAZyB,MAAQ,GACZ,MAAO,CACLrG,UAAW,WACTqG,MAAMzkC,KAAKgjC,KAAO,KAEpB3sB,MAAO,SAAS,EAAG,GACjB2sB,KAAKhjC,KAAK,CAAE,EAAG,KAEjBq+B,QAASxzB,QACTo5B,OAAQ,WACN,IAAIA,OAASQ,MAGb,OAFAA,MAAQ,GACRzB,KAAO,KACAiB,QAETS,OAAQ,WACFD,MAAM9oC,OAAS,GAAG8oC,MAAMzkC,KAAKykC,MAAMH,MAAM74B,OAAOg5B,MAAMF,YAIhE,SAASR,gBAAgBzgC,EAAGC,GAC1B,QAASD,EAAIA,EAAEI,GAAG,GAAK,EAAIJ,EAAE,GAAK,MAAQ,EAAI,MAAQA,EAAE,MAAQC,EAAIA,EAAEG,GAAG,GAAK,EAAIH,EAAE,GAAK,MAAQ,EAAI,MAAQA,EAAE,IAEjH,IAAIohC,wBAA0BhC,YAAYd,SAC1C,SAAS+C,4BAA4Br5B,UACnC,IAAmC64B,MAA/B,GAAK5gC,IAAK,GAAKA,IAAK,IAAMA,IAC9B,MAAO,CACL46B,UAAW,WACT7yB,SAAS6yB,YACTgG,MAAQ,GAEV/tB,MAAO,SAAS,GAAI,IAClB,IAAI,IAAM,GAAK,EAAI,GAAK,EAAG,GAAK9O,IAAI,GAAK,IACrCA,IAAI,GAAK,GAAK,GAChBgE,SAAS8K,MAAM,GAAI,IAAM,GAAK,IAAM,EAAI,EAAI,OAAS,OACrD9K,SAAS8K,MAAM,IAAK,IACpB9K,SAAS8yB,UACT9yB,SAAS6yB,YACT7yB,SAAS8K,MAAM,IAAK,IACpB9K,SAAS8K,MAAM,GAAI,IACnB+tB,MAAQ,GACC,MAAQ,KAAO,IAAM,IAC1B78B,IAAI,GAAK,KAAO,IAAG,IAAM,IAAM,GAC/BA,IAAI,GAAK,KAAO,IAAG,IAAM,IAAM,GACnC,GAmBR,SAASs9B,iCAAiC,GAAI,GAAI,GAAI,IACpD,IAAI,MAAO,MAAO,SAAW3/B,KAAKgV,IAAI,GAAK,IAC3C,OAAO3S,IAAI,UAAY,EAAIrC,KAAK4/B,MAAM5/B,KAAKgV,IAAI,KAAO,MAAQhV,KAAKoc,IAAI,KAAOpc,KAAKgV,IAAI,IAAMhV,KAAKgV,IAAI,KAAO,MAAQhV,KAAKoc,IAAI,KAAOpc,KAAKgV,IAAI,MAAQ,MAAQ,MAAQ,YAAc,GAAK,IAAM,EArBpL2qB,CAAiC,GAAI,GAAI,GAAI,IAClDt5B,SAAS8K,MAAM,IAAK,IACpB9K,SAAS8yB,UACT9yB,SAAS6yB,YACT7yB,SAAS8K,MAAM,IAAK,IACpB+tB,MAAQ,GAEV74B,SAAS8K,MAAM,GAAK,GAAI,GAAK,IAC7B,IAAM,KAERgoB,QAAS,WACP9yB,SAAS8yB,UACT,GAAK,GAAK76B,KAEZ4gC,MAAO,WACL,OAAO,EAAIA,WAQjB,SAASW,mCAAmCvkC,KAAMwkC,GAAIC,UAAW15B,UAC/D,IAAI,EACJ,GAAY,MAAR/K,KACF,EAAIykC,UAAY,MAChB15B,SAAS8K,OAAO,EAAG,GACnB9K,SAAS8K,MAAM,EAAG,GAClB9K,SAAS8K,MAAM,EAAG,GAClB9K,SAAS8K,MAAM,EAAG,GAClB9K,SAAS8K,MAAM,GAAI,GACnB9K,SAAS8K,MAAM,GAAI,GACnB9K,SAAS8K,OAAO,GAAI,GACpB9K,SAAS8K,OAAO,EAAG,GACnB9K,SAAS8K,OAAO,EAAG,QACd,GAAI9O,IAAI/G,KAAK,GAAKwkC,GAAG,IAAM,EAAG,CACnC,IAAInmC,EAAI2B,KAAK,GAAKwkC,GAAG,GAAK,GAAK,EAC/B,EAAIC,UAAYpmC,EAAI,EACpB0M,SAAS8K,OAAOxX,EAAG,GACnB0M,SAAS8K,MAAM,EAAG,GAClB9K,SAAS8K,MAAMxX,EAAG,QAElB0M,SAAS8K,MAAM2uB,GAAG,GAAIA,GAAG,MAhEuF,EAAG,GAAI,EAAI,IAgG/H,SAASE,kBAAkBC,QACzB,IAAIC,GAAKlgC,KAAKoc,IAAI6jB,QAASE,YAAcD,GAAK,EAAGE,cAAgB/9B,IAAI69B,IAAM,EAC3E,OAAOzC,YAAY4C,SAInB,SAAS1C,SAASt3B,UAChB,IAAIo4B,OAAQ6B,GAAIC,GAAIC,IAAKtB,MACzB,MAAO,CACLhG,UAAW,WACTsH,IAAMD,IAAK,EACXrB,MAAQ,GAEV/tB,MAAO,SAAS,EAAG,GACjB,IAAuBsvB,OAAnBC,OAAS,CAAE,EAAG,GAAaxgC,EAAImgC,QAAQ,EAAG,GAAI9gC,EAAI4gC,YAAcjgC,EAAI,EAAIygC,KAAK,EAAG,GAAKzgC,EAAIygC,KAAK,GAAK,EAAI,EAAI,GAAK,GAAI,GAAK,EAU7H,IATKlC,SAAW+B,IAAMD,GAAKrgC,IAAImG,SAAS6yB,YACpCh5B,IAAMqgC,KACRE,OAASG,UAAUnC,OAAQiC,SACvBzF,sBAAsBwD,OAAQgC,SAAWxF,sBAAsByF,OAAQD,WACzEC,OAAO,IAAM,EACbA,OAAO,IAAM,EACbxgC,EAAImgC,QAAQK,OAAO,GAAIA,OAAO,MAG9BxgC,IAAMqgC,GACRrB,MAAQ,EACJh/B,GACFmG,SAAS6yB,YACTuH,OAASG,UAAUF,OAAQjC,QAC3Bp4B,SAAS8K,MAAMsvB,OAAO,GAAIA,OAAO,MAEjCA,OAASG,UAAUnC,OAAQiC,QAC3Br6B,SAAS8K,MAAMsvB,OAAO,GAAIA,OAAO,IACjCp6B,SAAS8yB,WAEXsF,OAASgC,YACJ,GAAIL,eAAiB3B,QAAU0B,YAAcjgC,EAAG,CACrD,IAAIkB,EACE7B,EAAI+gC,MAAQl/B,EAAIw/B,UAAUF,OAAQjC,QAAQ,MAC9CS,MAAQ,EACJiB,aACF95B,SAAS6yB,YACT7yB,SAAS8K,MAAM/P,EAAE,GAAG,GAAIA,EAAE,GAAG,IAC7BiF,SAAS8K,MAAM/P,EAAE,GAAG,GAAIA,EAAE,GAAG,IAC7BiF,SAAS8yB,YAET9yB,SAAS8K,MAAM/P,EAAE,GAAG,GAAIA,EAAE,GAAG,IAC7BiF,SAAS8yB,UACT9yB,SAAS6yB,YACT7yB,SAAS8K,MAAM/P,EAAE,GAAG,GAAIA,EAAE,GAAG,OAI/BlB,GAAOu+B,QAAWxD,sBAAsBwD,OAAQiC,SAClDr6B,SAAS8K,MAAMuvB,OAAO,GAAIA,OAAO,IAEnCjC,OAASiC,OAAQH,GAAKrgC,EAAGogC,GAAK/gC,GAEhC45B,QAAS,WACHoH,IAAIl6B,SAAS8yB,UACjBsF,OAAS,MAEXS,MAAO,WACL,OAAOA,OAASsB,KAAOD,KAAO,MA9DwDM,yBAAyBZ,OAAQ,EAAI5rB,YAC9E8rB,YAAc,CAAE,GAAIF,QAAW,EAAG,EAAGA,OAAS,IACjG,SAASI,QAAQ,EAAG,GAClB,OAAOrgC,KAAKoc,IAAI,GAAKpc,KAAKoc,IAAI,GAAK8jB,GA+DrC,SAASU,UAAUxiC,EAAGC,EAAGyiC,KACvB,IACIC,GAAK,CAAE,EAAG,EAAG,GAAKC,GAAKtG,sBADlBH,iBAAiBn8B,GAASm8B,iBAAiBl8B,IACM4iC,KAAOxG,oBAAoBuG,GAAIA,IAAKE,KAAOF,GAAG,GAAIG,YAAcF,KAAOC,KAAOA,KACxI,IAAKC,YAAa,OAAQL,KAAO1iC,EACjC,IAAIgjC,GAAKlB,GAAKe,KAAOE,YAAaE,IAAMnB,GAAKgB,KAAOC,YAAaG,MAAQ5G,sBAAsBqG,GAAIC,IAAK9M,EAAI0G,sBAAsBmG,GAAIK,IACtIzG,oBAAoBzG,EAD2H0G,sBAAsBoG,GAAIK,KAEzK,IAAIlrB,EAAImrB,MAAOhxB,EAAImqB,oBAAoBvG,EAAG/d,GAAIorB,GAAK9G,oBAAoBtkB,EAAGA,GAAIqrB,GAAKlxB,EAAIA,EAAIixB,IAAM9G,oBAAoBvG,EAAGA,GAAK,GAC7H,KAAIsN,GAAK,GAAT,CACA,IAAIpgC,EAAIpB,KAAKU,KAAK8gC,IAAK/nB,EAAImhB,sBAAsBzkB,IAAK7F,EAAIlP,GAAKmgC,IAG/D,GAFA5G,oBAAoBlhB,EAAGya,GACvBza,EAAIshB,iBAAiBthB,IAChBqnB,IAAK,OAAOrnB,EACjB,IAAgDtT,EAA5C,GAAK/H,EAAE,GAAI,GAAKC,EAAE,GAAI,GAAKD,EAAE,GAAI,GAAKC,EAAE,GACxC,GAAK,KAAI8H,EAAI,GAAI,GAAK,GAAI,GAAKA,GACnC,IAAI,GAAK,GAAK,GAAIs7B,MAAQp/B,IAAI,GAAK,GAAK,EAExC,IADKo/B,OAAS,GAAK,KAAIt7B,EAAI,GAAI,GAAK,GAAI,GAAKA,GADSs7B,OAAS,GAAK,EAErDA,MAAQ,GAAK,GAAK,EAAIhoB,EAAE,IAAMpX,IAAIoX,EAAE,GAAK,IAAM,EAAI,GAAK,IAAM,IAAMA,EAAE,IAAMA,EAAE,IAAM,GAAK,GAAK,GAAK,IAAMA,EAAE,IAAMA,EAAE,IAAM,IAAK,CAC3I,IAAIioB,GAAK9G,sBAAsBzkB,IAAK7F,EAAIlP,GAAKmgC,IAE7C,OADA5G,oBAAoB+G,GAAIxN,GACjB,CAAEza,EAAGshB,iBAAiB2G,OAGjC,SAASf,KAAK,EAAG,GACf,IAAI7kB,EAAIqkB,YAAcF,OAAS,EAAIA,OAAQU,KAAO,EAGlD,OAFI,GAAK7kB,EAAG6kB,MAAQ,EAAY,EAAI7kB,IAAG6kB,MAAQ,GAC3C,GAAK7kB,EAAG6kB,MAAQ,EAAY,EAAI7kB,IAAG6kB,MAAQ,GACxCA,MAGX,SAASgB,iBAAiB9qB,GAAIE,GAAID,GAAIE,IACpC,OAAO,SAAS8mB,MACd,IAAgHhiB,EAA5G1d,EAAI0/B,KAAK1/B,EAAGC,EAAIy/B,KAAKz/B,EAAGujC,GAAKxjC,EAAEI,EAAGqjC,GAAKzjC,EAAE2T,EAAuBuZ,GAAK,EAAGC,GAAK,EAAGtX,GAA/B5V,EAAEG,EAAuCojC,GAAI1tB,GAAnC7V,EAAE0T,EAA2C8vB,GAE5G,GADA/lB,EAAIjF,GAAK+qB,GACJ3tB,MAAM6H,EAAI,GAAf,CAEA,GADAA,GAAK7H,GACDA,GAAK,EAAG,CACV,GAAI6H,EAAIwP,GAAI,OACRxP,EAAIyP,KAAIA,GAAKzP,QACZ,GAAI7H,GAAK,EAAG,CACjB,GAAI6H,EAAIyP,GAAI,OACRzP,EAAIwP,KAAIA,GAAKxP,GAGnB,GADAA,EAAIhF,GAAK8qB,GACJ3tB,MAAM6H,EAAI,GAAf,CAEA,GADAA,GAAK7H,GACDA,GAAK,EAAG,CACV,GAAI6H,EAAIyP,GAAI,OACRzP,EAAIwP,KAAIA,GAAKxP,QACZ,GAAI7H,GAAK,EAAG,CACjB,GAAI6H,EAAIwP,GAAI,OACRxP,EAAIyP,KAAIA,GAAKzP,GAGnB,GADAA,EAAI/E,GAAK8qB,GACJ3tB,MAAM4H,EAAI,GAAf,CAEA,GADAA,GAAK5H,GACDA,GAAK,EAAG,CACV,GAAI4H,EAAIwP,GAAI,OACRxP,EAAIyP,KAAIA,GAAKzP,QACZ,GAAI5H,GAAK,EAAG,CACjB,GAAI4H,EAAIyP,GAAI,OACRzP,EAAIwP,KAAIA,GAAKxP,GAGnB,GADAA,EAAI9E,GAAK6qB,GACJ3tB,MAAM4H,EAAI,GAAf,CAEA,GADAA,GAAK5H,GACDA,GAAK,EAAG,CACV,GAAI4H,EAAIyP,GAAI,OACRzP,EAAIwP,KAAIA,GAAKxP,QACZ,GAAI5H,GAAK,EAAG,CACjB,GAAI4H,EAAIwP,GAAI,OACRxP,EAAIyP,KAAIA,GAAKzP,GAUnB,OARIwP,GAAK,IAAGwS,KAAK1/B,EAAI,CACnBI,EAAGojC,GAAKtW,GAAKrX,GACblC,EAAG8vB,GAAKvW,GAAKpX,KAEXqX,GAAK,IAAGuS,KAAKz/B,EAAI,CACnBG,EAAGojC,GAAKrW,GAAKtX,GACblC,EAAG8vB,GAAKtW,GAAKrX,KAER4pB,UAqBX,SAASgE,kBAAkBjrB,GAAIE,GAAID,GAAIE,IACrC,OAAO,SAAS3Q,UACd,IAAqHw2B,SAAUoB,QAASO,KA6DpIuD,IAAKC,IAAKC,IAAKC,GAAIC,GAAIC,GAAIC,MAAOnD,MA7DlCoD,UAAYj8B,SAAUk8B,eAAiBvD,4BAA6BrB,SAAWgE,iBAAiB9qB,GAAIE,GAAID,GAAIE,IAC5GgmB,KAAO,CACT7rB,MAAOA,MACP+nB,UA2DF,SAASA,YACP8D,KAAK7rB,MAAQqqB,UACTyC,SAASA,QAAQnjC,KAAK0jC,KAAO,IACjC6D,OAAQ,EACRD,IAAK,EACLF,GAAKC,GAAK7jC,KA/DV66B,QAiEF,SAASA,UACH0D,WACFrB,UAAUuG,IAAKC,KACXC,KAAOG,IAAIG,eAAe/C,SAC9B3C,SAAS/hC,KAAKynC,eAAexD,WAE/B/B,KAAK7rB,MAAQA,MACTixB,IAAI/7B,SAAS8yB,WAvEjBC,aAAc,WACZ/yB,SAAWk8B,eACX1F,SAAW,GACXoB,QAAU,GACViB,OAAQ,GAEV7F,WAAY,WACVhzB,SAAWi8B,UACXzF,SAAW3gC,GAAGgG,MAAM26B,UACpB,IAAIC,gBAgBR,SAAS0F,cAAc3iC,GAErB,IADA,IAAI4iC,GAAK,EAAG7oC,EAAIqkC,QAAQxnC,OAAQsb,EAAIlS,EAAE,GAC7BnJ,EAAI,EAAGA,EAAIkD,IAAKlD,EACvB,IAAK,IAAmD2H,EAA/CqB,EAAI,EAAGQ,EAAI+9B,QAAQvnC,GAAI8J,EAAIN,EAAEzJ,OAAQ2H,EAAI8B,EAAE,GAAOR,EAAIc,IAAKd,EAClErB,EAAI6B,EAAER,GACFtB,EAAE,IAAM2T,EACN1T,EAAE,GAAK0T,GAAKyC,WAAWpW,EAAGC,EAAGwB,GAAK,KAAK4iC,GAEvCpkC,EAAE,IAAM0T,GAAKyC,WAAWpW,EAAGC,EAAGwB,GAAK,KAAK4iC,GAE9CrkC,EAAIC,EAGR,OAAc,IAAPokC,GA7BiBD,CAAc,CAAE3rB,GAAIG,KAAO0rB,OAASxD,OAASpC,gBAAiBuD,QAAUxD,SAASpmC,QACnGisC,QAAUrC,WACZh6B,SAAS+yB,eACLsJ,SACFr8B,SAAS6yB,YACT6D,YAAY,KAAM,KAAM,EAAG12B,UAC3BA,SAAS8yB,WAEPkH,SACFzD,mBAAmBC,SAAUj+B,QAASk+B,gBAAiBC,YAAa12B,UAEtEA,SAASgzB,cAEXwD,SAAWoB,QAAUO,KAAO,OAkBhC,SAASzB,YAAYzhC,KAAMwkC,GAAIC,UAAW15B,UACxC,IAAIjI,EAAI,EAAGukC,GAAK,EAChB,GAAY,MAARrnC,OAAiB8C,EAAIwkC,OAAOtnC,KAAMykC,eAAiB4C,GAAKC,OAAO9C,GAAIC,aAAe8C,cAAcvnC,KAAMwkC,IAAM,EAAIC,UAAY,EAC9H,GACE15B,SAAS8K,MAAY,IAAN/S,GAAiB,IAANA,EAAUyY,GAAKC,GAAI1Y,EAAI,EAAI4Y,GAAKD,WAClD3Y,GAAKA,EAAI2hC,UAAY,GAAK,KAAO4C,SAE3Ct8B,SAAS8K,MAAM2uB,GAAG,GAAIA,GAAG,IAG7B,SAASpC,aAAal/B,EAAGuT,GACvB,OAAO8E,IAAMrY,GAAKA,GAAKsY,IAAMC,IAAMhF,GAAKA,GAAKiF,GAE/C,SAAS7F,MAAM3S,EAAGuT,GACZ2rB,aAAal/B,EAAGuT,IAAI1L,SAAS8K,MAAM3S,EAAGuT,GAmB5C,SAASypB,UAAUh9B,EAAGuT,GAGpB,IAAI7R,EAAIw9B,aAFRl/B,EAAIwB,KAAKX,KAnGY,IAmGeW,KAAKZ,IAnGpB,IAmG8CZ,IACnEuT,EAAI/R,KAAKX,KApGY,IAoGeW,KAAKZ,IApGpB,IAoG8C2S,KAGnE,GADIksB,SAASO,KAAK1jC,KAAK,CAAE0D,EAAGuT,IACxBswB,MACFN,IAAMvjC,EAAGwjC,IAAMjwB,EAAGkwB,IAAM/hC,EACxBmiC,OAAQ,EACJniC,IACFmG,SAAS6yB,YACT7yB,SAAS8K,MAAM3S,EAAGuT,SAGpB,GAAI7R,GAAKkiC,GAAI/7B,SAAS8K,MAAM3S,EAAGuT,OAAS,CACtC,IAAI7L,EAAI,CACN9H,EAAG,CACDI,EAAG0jC,GACHnwB,EAAGowB,IAEL9jC,EAAG,CACDG,EAAGA,EACHuT,EAAGA,IAGH4rB,SAASz3B,IACNk8B,KACH/7B,SAAS6yB,YACT7yB,SAAS8K,MAAMjL,EAAE9H,EAAEI,EAAG0H,EAAE9H,EAAE2T,IAE5B1L,SAAS8K,MAAMjL,EAAE7H,EAAEG,EAAG0H,EAAE7H,EAAE0T,GACrB7R,GAAGmG,SAAS8yB,UACjB+F,OAAQ,GACCh/B,IACTmG,SAAS6yB,YACT7yB,SAAS8K,MAAM3S,EAAGuT,GAClBmtB,OAAQ,GAIdgD,GAAK1jC,EAAG2jC,GAAKpwB,EAAGqwB,GAAKliC,EAEvB,OAAO88B,MAET,SAAS4F,OAAO/iC,EAAGkgC,WACjB,OAAO19B,IAAIxC,EAAE,GAAKgX,IAAM,EAAIkpB,UAAY,EAAI,EAAI,EAAI19B,IAAIxC,EAAE,GAAKiX,IAAM,EAAIipB,UAAY,EAAI,EAAI,EAAI19B,IAAIxC,EAAE,GAAKkX,IAAM,EAAIgpB,UAAY,EAAI,EAAI,EAAIA,UAAY,EAAI,EAAI,EAEpK,SAASnhC,QAAQR,EAAGC,GAClB,OAAOwkC,cAAczkC,EAAEI,EAAGH,EAAEG,GAE9B,SAASqkC,cAAczkC,EAAGC,GACxB,IAAIykC,GAAKF,OAAOxkC,EAAG,GAAI2kC,GAAKH,OAAOvkC,EAAG,GACtC,OAAOykC,KAAOC,GAAKD,GAAKC,GAAY,IAAPD,GAAWzkC,EAAE,GAAKD,EAAE,GAAY,IAAP0kC,GAAW1kC,EAAE,GAAKC,EAAE,GAAY,IAAPykC,GAAW1kC,EAAE,GAAKC,EAAE,GAAKA,EAAE,GAAKD,EAAE,IAGrH,SAAS4kC,aAAaC,WACpB,IAAI,GAAK,EAAG,GAAK,EAAI,EAAGziC,EAAI0iC,yBAAyBD,WAAYpjC,EAAIW,EAAE,GAAI,IAK3E,OAJAX,EAAEsjC,UAAY,SAASvgC,GACrB,OAAK5K,UAAUvB,OACR+J,EAAE,GAAKoC,EAAE,GAAK,EAAI,IAAK,GAAKA,EAAE,GAAK,EAAI,KADhB,CAAE,GAAK,EAAI,IAAK,GAAK,EAAI,MAGlD/C,EAET,SAASujC,sBAAsB,GAAI,IACjC,IAAI,MAAQpjC,KAAKgV,IAAI,IAAKpb,GAAK,MAAQoG,KAAKgV,IAAI,KAAO,EAAGquB,EAAI,EAAI,OAAS,EAAIzpC,EAAI,OAAQ,GAAKoG,KAAKU,KAAK2iC,GAAKzpC,EAC/G,SAAS0pC,QAAQ,EAAG,GAClB,IAAI,EAAItjC,KAAKU,KAAK2iC,EAAI,EAAIzpC,EAAIoG,KAAKgV,IAAI,IAAMpb,EAC7C,MAAO,CAAE,EAAIoG,KAAKgV,IAAI,GAAKpb,GAAI,GAAK,EAAIoG,KAAKoc,IAAI,IAMnD,OAJAknB,QAAQhrB,OAAS,SAAS9Z,EAAGuT,GAC3B,IAAI,KAAO,GAAKA,EAChB,MAAO,CAAE/R,KAAK2c,MAAMne,EAAG,MAAQ5E,EAAG+a,SAAS0uB,GAAK7kC,EAAIA,EAAI,KAAO,MAAQ5E,EAAIA,IAAM,EAAIA,MAEhF0pC,QAzKTpnC,GAAGk7B,IAAImM,WAAa,WAClB,IAAI1sB,GAAIE,GAAID,GAAIE,GAAI6gB,OAAQmF,KAAMuG,WAAa,CAC7C1L,OAAQ,SAAS2L,QAIf,OAHI3L,SAAQA,OAAO4L,OAAQ,IAC3B5L,OAASmF,KAAKwG,SACPC,OAAQ,EACR5L,QAETv4B,OAAQ,SAASsD,GACf,OAAK5K,UAAUvB,QACfumC,KAAO8E,kBAAkBjrB,IAAMjU,EAAE,GAAG,GAAImU,IAAMnU,EAAE,GAAG,GAAIkU,IAAMlU,EAAE,GAAG,GAAIoU,IAAMpU,EAAE,GAAG,IAC7Ei1B,SAAQA,OAAO4L,OAAQ,EAAO5L,OAAS,MACpC0L,YAHuB,CAAE,CAAE1sB,GAAIE,IAAM,CAAED,GAAIE,OAMtD,OAAOusB,WAAWjkC,OAAO,CAAE,CAAE,EAAG,GAAK,CAAE,IAAK,SA4J7CpD,GAAGk7B,IAAIsM,eAAiB,WACvB,OAAOV,aAAaI,yBACnBO,IAAMP,sBACTlnC,GAAGk7B,IAAIwM,OAAS,WACd,OAAO1nC,GAAGk7B,IAAIsM,iBAAiB7F,OAAO,CAAE,GAAI,IAAKnnB,OAAO,EAAG,GAAI,OAAQysB,UAAU,CAAE,KAAM,OAAQ1qB,MAAM,OAEzGvc,GAAGk7B,IAAIyM,UAAY,WACjB,IAGI1yB,MAID2yB,aAAcC,YAAaC,YAP1BC,QAAU/nC,GAAGk7B,IAAIwM,SACjBM,OAAShoC,GAAGk7B,IAAIsM,iBAAiB7F,OAAO,CAAE,IAAK,IAAKnnB,OAAO,EAAG,EAAG,OAAQysB,UAAU,CAAE,GAAI,KACzFgB,OAASjoC,GAAGk7B,IAAIsM,iBAAiB7F,OAAO,CAAE,IAAK,IAAKnnB,OAAO,EAAG,EAAG,OAAQysB,UAAU,CAAE,EAAG,KACjFiB,YAAc,CACvBjzB,MAAO,SAAS3S,EAAGuT,GACjBZ,MAAQ,CAAE3S,EAAGuT,KAGjB,SAAS8xB,UAAUvL,aACjB,IAAI95B,EAAI85B,YAAY,GAAIvmB,EAAIumB,YAAY,GAGxC,OAFAnnB,MAAQ,KACP2yB,aAAatlC,EAAGuT,GAAIZ,QAAW4yB,YAAYvlC,EAAGuT,GAAIZ,QAAU6yB,YAAYxlC,EAAGuT,GACrEZ,MA+DT,OA7DA0yB,UAAUvrB,OAAS,SAASggB,aAC1B,IAAI/1B,EAAI0hC,QAAQxrB,QAASrX,EAAI6iC,QAAQvrB,YAAala,GAAK85B,YAAY,GAAKl3B,EAAE,IAAMmB,EAAGwP,GAAKumB,YAAY,GAAKl3B,EAAE,IAAMmB,EACjH,OAAQwP,GAAK,KAAOA,EAAI,MAAQvT,IAAM,MAAQA,GAAK,KAAO0lC,OAASnyB,GAAK,MAAQA,EAAI,MAAQvT,IAAM,MAAQA,GAAK,KAAO2lC,OAASF,SAAS3rB,OAAOggB,cAEjJuL,UAAUhM,OAAS,SAASA,QAC1B,IAAIwM,cAAgBJ,QAAQpM,OAAOA,QAASyM,aAAeJ,OAAOrM,OAAOA,QAAS0M,aAAeJ,OAAOtM,OAAOA,QAC/G,MAAO,CACL1mB,MAAO,SAAS3S,EAAGuT,GACjBsyB,cAAclzB,MAAM3S,EAAGuT,GACvBuyB,aAAanzB,MAAM3S,EAAGuT,GACtBwyB,aAAapzB,MAAM3S,EAAGuT,IAExBqmB,OAAQ,WACNiM,cAAcjM,SACdkM,aAAalM,SACbmM,aAAanM,UAEfc,UAAW,WACTmL,cAAcnL,YACdoL,aAAapL,YACbqL,aAAarL,aAEfC,QAAS,WACPkL,cAAclL,UACdmL,aAAanL,UACboL,aAAapL,WAEfC,aAAc,WACZiL,cAAcjL,eACdkL,aAAalL,eACbmL,aAAanL,gBAEfC,WAAY,WACVgL,cAAchL,aACdiL,aAAajL,aACbkL,aAAalL,gBAInBwK,UAAU1W,UAAY,SAASvqB,GAC7B,OAAK5K,UAAUvB,QACfwtC,QAAQ9W,UAAUvqB,GAClBshC,OAAO/W,UAAUvqB,GACjBuhC,OAAOhX,UAAUvqB,GACVihC,WAJuBI,QAAQ9W,aAMxC0W,UAAUprB,MAAQ,SAAS7V,GACzB,OAAK5K,UAAUvB,QACfwtC,QAAQxrB,MAAM7V,GACdshC,OAAOzrB,MAAU,IAAJ7V,GACbuhC,OAAO1rB,MAAM7V,GACNihC,UAAUnrB,UAAUurB,QAAQvrB,cAJLurB,QAAQxrB,SAMxCorB,UAAUnrB,UAAY,SAAS9V,GAC7B,IAAK5K,UAAUvB,OAAQ,OAAOwtC,QAAQvrB,YACtC,IAAInW,EAAI0hC,QAAQxrB,QAASja,GAAKoE,EAAE,GAAImP,GAAKnP,EAAE,GAI3C,OAHAkhC,aAAeG,QAAQvrB,UAAU9V,GAAG2gC,WAAW,CAAE,CAAE/kC,EAAI,KAAO+D,EAAGwP,EAAI,KAAOxP,GAAK,CAAE/D,EAAI,KAAO+D,EAAGwP,EAAI,KAAOxP,KAAOs1B,OAAOuM,aAAajzB,MACvI4yB,YAAcG,OAAOxrB,UAAU,CAAEla,EAAI,KAAO+D,EAAGwP,EAAI,KAAOxP,IAAKghC,WAAW,CAAE,CAAE/kC,EAAI,KAAO+D,EAAI,EAAGwP,EAAI,IAAMxP,EAAI,GAAK,CAAE/D,EAAI,KAAO+D,EAAI,EAAGwP,EAAI,KAAOxP,EAAI,KAAOs1B,OAAOuM,aAAajzB,MACjL6yB,YAAcG,OAAOzrB,UAAU,CAAEla,EAAI,KAAO+D,EAAGwP,EAAI,KAAOxP,IAAKghC,WAAW,CAAE,CAAE/kC,EAAI,KAAO+D,EAAI,EAAGwP,EAAI,KAAOxP,EAAI,GAAK,CAAE/D,EAAI,KAAO+D,EAAI,EAAGwP,EAAI,KAAOxP,EAAI,KAAOs1B,OAAOuM,aAAajzB,MAC3K0yB,WAEFA,UAAUprB,MAAM,OAEzB,IAAI+rB,mBAAoBC,uBA2BpBC,oBAAqBC,oBAAqBC,oBAAqBC,oBA3BnBC,gBAAkB,CAChE3zB,MAAOxL,QACPuzB,UAAWvzB,QACXwzB,QAASxzB,QACTyzB,aAAc,WACZqL,uBAAyB,EACzBK,gBAAgB5L,UAAY6L,0BAE9B1L,WAAY,WACVyL,gBAAgB5L,UAAY4L,gBAAgB3L,QAAU2L,gBAAgB3zB,MAAQxL,QAC9E6+B,oBAAsBniC,IAAIoiC,uBAAyB,KAGvD,SAASM,2BACP,IAAIC,IAAKC,IAAKpuB,GAAIE,GAKlB,SAASujB,UAAU97B,EAAGuT,GACpB0yB,wBAA0B1tB,GAAKvY,EAAIqY,GAAK9E,EACxC8E,GAAKrY,EAAGuY,GAAKhF,EANf+yB,gBAAgB3zB,MAAQ,SAAS3S,EAAGuT,GAClC+yB,gBAAgB3zB,MAAQmpB,UACxB0K,IAAMnuB,GAAKrY,EAAGymC,IAAMluB,GAAKhF,GAM3B+yB,gBAAgB3L,QAAU,WACxBmB,UAAU0K,IAAKC,MAInB,IAAIC,kBAAoB,CACtB/zB,MAMF,SAASg0B,uBAAuB3mC,EAAGuT,GAC7BvT,EAAIkmC,sBAAqBA,oBAAsBlmC,GAC/CA,EAAIomC,sBAAqBA,oBAAsBpmC,GAC/CuT,EAAI4yB,sBAAqBA,oBAAsB5yB,GAC/CA,EAAI8yB,sBAAqBA,oBAAsB9yB,IATnDmnB,UAAWvzB,QACXwzB,QAASxzB,QACTyzB,aAAczzB,QACd0zB,WAAY1zB,SAQd,SAASy/B,oBACP,IAAIC,YAAcC,wBAAwB,KAAMvG,OAAS,GACrDlH,OAAS,CACX1mB,MAAOA,MACP+nB,UAAW,WACTrB,OAAO1mB,MAAQo0B,gBAEjBpM,QAASA,QACTC,aAAc,WACZvB,OAAOsB,QAAUqM,gBAEnBnM,WAAY,WACVxB,OAAOsB,QAAUA,QACjBtB,OAAO1mB,MAAQA,OAEjBs0B,YAAa,SAAS7iC,GAEpB,OADAyiC,YAAcC,wBAAwB1iC,GAC/Bi1B,QAETpQ,OAAQ,WACN,GAAIsX,OAAOtoC,OAAQ,CACjB,IAAIgxB,OAASsX,OAAOxV,KAAK,IAEzB,OADAwV,OAAS,GACFtX,UAIb,SAAStW,MAAM3S,EAAGuT,GAChBgtB,OAAOjkC,KAAK,IAAK0D,EAAG,IAAKuT,EAAGszB,aAE9B,SAASE,eAAe/mC,EAAGuT,GACzBgtB,OAAOjkC,KAAK,IAAK0D,EAAG,IAAKuT,GACzB8lB,OAAO1mB,MAAQ2tB,UAEjB,SAASA,UAAUtgC,EAAGuT,GACpBgtB,OAAOjkC,KAAK,IAAK0D,EAAG,IAAKuT,GAE3B,SAASonB,UACPtB,OAAO1mB,MAAQA,MAEjB,SAASq0B,iBACPzG,OAAOjkC,KAAK,KAEd,OAAO+8B,OAET,SAASyN,wBAAwBrF,QAC/B,MAAO,MAAQA,OAAS,IAAMA,OAAS,IAAMA,OAAS,aAAe,EAAIA,OAAS,IAAMA,OAAS,IAAMA,OAAS,YAAc,EAAIA,OAAS,IAE7I,IAqmBIyF,iBArmBAC,oBAAsB,CACxBx0B,MAAOy0B,yBACP1M,UAAW2M,6BACX1M,QAAS2M,2BACT1M,aAAc,WACZuM,oBAAoBzM,UAAY6M,8BAElC1M,WAAY,WACVsM,oBAAoBx0B,MAAQy0B,yBAC5BD,oBAAoBzM,UAAY2M,6BAChCF,oBAAoBxM,QAAU2M,6BAGlC,SAASF,yBAAyBpnC,EAAGuT,GACnC4nB,mBAAqBn7B,EACrBo7B,mBAAqB7nB,IACnB8nB,kBAEJ,SAASgM,+BACP,IAAIhvB,GAAIE,GAKR,SAASujB,UAAU97B,EAAGuT,GACpB,IAAIkC,GAAKzV,EAAIqY,GAAI3C,GAAKnC,EAAIgF,GAAI5Q,EAAInG,KAAKU,KAAKuT,GAAKA,GAAKC,GAAKA,IAC3D4lB,mBAAqB3zB,GAAK0Q,GAAKrY,GAAK,EACpCu7B,mBAAqB5zB,GAAK4Q,GAAKhF,GAAK,EACpCioB,mBAAqB7zB,EACrBy/B,yBAAyB/uB,GAAKrY,EAAGuY,GAAKhF,GATxC4zB,oBAAoBx0B,MAAQ,SAAS3S,EAAGuT,GACtC4zB,oBAAoBx0B,MAAQmpB,UAC5BsL,yBAAyB/uB,GAAKrY,EAAGuY,GAAKhF,IAU1C,SAAS+zB,6BACPH,oBAAoBx0B,MAAQy0B,yBAE9B,SAASG,+BACP,IAAIf,IAAKC,IAAKpuB,GAAIE,GAKlB,SAASujB,UAAU97B,EAAGuT,GACpB,IAAIkC,GAAKzV,EAAIqY,GAAI3C,GAAKnC,EAAIgF,GAAI5Q,EAAInG,KAAKU,KAAKuT,GAAKA,GAAKC,GAAKA,IAC3D4lB,mBAAqB3zB,GAAK0Q,GAAKrY,GAAK,EACpCu7B,mBAAqB5zB,GAAK4Q,GAAKhF,GAAK,EACpCioB,mBAAqB7zB,EAErB8zB,oBADA9zB,EAAI4Q,GAAKvY,EAAIqY,GAAK9E,IACQ8E,GAAKrY,GAC/B07B,mBAAqB/zB,GAAK4Q,GAAKhF,GAC/BooB,mBAAyB,EAAJh0B,EACrBy/B,yBAAyB/uB,GAAKrY,EAAGuY,GAAKhF,GAbxC4zB,oBAAoBx0B,MAAQ,SAAS3S,EAAGuT,GACtC4zB,oBAAoBx0B,MAAQmpB,UAC5BsL,yBAAyBZ,IAAMnuB,GAAKrY,EAAGymC,IAAMluB,GAAKhF,IAapD4zB,oBAAoBxM,QAAU,WAC5BmB,UAAU0K,IAAKC,MAGnB,SAASe,mBAAmBC,SAC1B,IAAIR,YAAc,IACd5N,OAAS,CACX1mB,MAAOA,MACP+nB,UAAW,WACTrB,OAAO1mB,MAAQo0B,gBAEjBpM,QAASA,QACTC,aAAc,WACZvB,OAAOsB,QAAUqM,gBAEnBnM,WAAY,WACVxB,OAAOsB,QAAUA,QACjBtB,OAAO1mB,MAAQA,OAEjBs0B,YAAa,SAAS7iC,GAEpB,OADA6iC,YAAc7iC,EACPi1B,QAETpQ,OAAQ9hB,SAEV,SAASwL,MAAM3S,EAAGuT,GAChBk0B,QAAQC,OAAO1nC,EAAIinC,YAAa1zB,GAChCk0B,QAAQvH,IAAIlgC,EAAGuT,EAAG0zB,YAAa,EAAG,GAEpC,SAASF,eAAe/mC,EAAGuT,GACzBk0B,QAAQC,OAAO1nC,EAAGuT,GAClB8lB,OAAO1mB,MAAQ2tB,UAEjB,SAASA,UAAUtgC,EAAGuT,GACpBk0B,QAAQE,OAAO3nC,EAAGuT,GAEpB,SAASonB,UACPtB,OAAO1mB,MAAQA,MAEjB,SAASq0B,iBACPS,QAAQG,YAEV,OAAOvO,OAET,SAASwO,gBAAgBC,SACvB,IAAI,GAAK,GAAIC,eAAiBvmC,KAAKoc,IAAI,GAAK/H,YAAamyB,SAAW,GACpE,SAASC,SAAS5O,QAChB,OAAQ2O,SAAWE,kBAAoBC,cAAc9O,QAEvD,SAAS8O,aAAa9O,QACpB,OAAO+O,sBAAsB/O,QAAQ,SAASr5B,EAAGuT,GAC/CvT,EAAI8nC,QAAQ9nC,EAAGuT,GACf8lB,OAAO1mB,MAAM3S,EAAE,GAAIA,EAAE,OAGzB,SAASkoC,kBAAkB7O,QACzB,IAAI,IAAUmN,IAAKC,IAAK4B,IAAKC,IAAKC,IAAK,GAAIlwB,GAAIE,GAAIiwB,GAAIlxB,GAAIwqB,GACvDmG,SAAW,CACbt1B,MAAOA,MACP+nB,UAAWA,UACXC,QAASA,QACTC,aAAc,WACZvB,OAAOuB,eACPqN,SAASvN,UAAYoC,WAEvBjC,WAAY,WACVxB,OAAOwB,aACPoN,SAASvN,UAAYA,YAGzB,SAAS/nB,MAAM3S,EAAGuT,GAChBvT,EAAI8nC,QAAQ9nC,EAAGuT,GACf8lB,OAAO1mB,MAAM3S,EAAE,GAAIA,EAAE,IAEvB,SAAS06B,YACPriB,GAAKvY,IACLmoC,SAASt1B,MAAQqqB,UACjB3D,OAAOqB,YAET,SAASsC,UAAU,EAAG,GACpB,IAAIj8B,EAAIg7B,iBAAiB,CAAE,EAAG,IAAM16B,EAAIymC,QAAQ,EAAG,GACnDW,eAAepwB,GAAIE,GAAI,GAAIiwB,GAAIlxB,GAAIwqB,GAAIzpB,GAAKhX,EAAE,GAAIkX,GAAKlX,EAAE,GAAI,GAAK,EAAGmnC,GAAKznC,EAAE,GAAIuW,GAAKvW,EAAE,GAAI+gC,GAAK/gC,EAAE,GAAIinC,SAAU3O,QAChHA,OAAO1mB,MAAM0F,GAAIE,IAEnB,SAASoiB,UACPsN,SAASt1B,MAAQA,MACjB0mB,OAAOsB,UAET,SAASmC,YACPpC,YACAuN,SAASt1B,MAAQkqB,UACjBoL,SAAStN,QAAUoC,QAErB,SAASF,UAAU,EAAG,GACpBG,UAAU,IAAM,EAAS,GAAIwJ,IAAMnuB,GAAIouB,IAAMluB,GAAI8vB,IAAMG,GAAIF,IAAMhxB,GAAIixB,IAAMzG,GAC3EmG,SAASt1B,MAAQqqB,UAEnB,SAASD,UACP0L,eAAepwB,GAAIE,GAAI,GAAIiwB,GAAIlxB,GAAIwqB,GAAI0E,IAAKC,IAAK,IAAK4B,IAAKC,IAAKC,IAAKP,SAAU3O,QAC/E4O,SAAStN,QAAUA,QACnBA,UAEF,OAAOsN,SAET,SAASQ,eAAepwB,GAAIE,GAAI,GAAIiwB,GAAIlxB,GAAIwqB,GAAIxpB,GAAIE,GAAI,GAAI2rB,GAAI5sB,GAAIqrB,GAAIn8B,MAAO4yB,QAC7E,IAAI5jB,GAAK6C,GAAKD,GAAI3C,GAAK8C,GAAKD,GAAIpB,GAAK1B,GAAKA,GAAKC,GAAKA,GACpD,GAAIyB,GAAK,EAAI,IAAM1Q,QAAS,CAC1B,IAAI7G,EAAI4oC,GAAKrE,GAAItkC,EAAIyX,GAAKC,GAAIxW,EAAI+gC,GAAKc,GAAI5gC,EAAIR,KAAKU,KAAKtC,EAAIA,EAAIC,EAAIA,EAAIkB,EAAIA,GAAI,GAAKS,KAAK4U,KAAKrV,GAAKiB,GAAI,GAAK6B,IAAIA,IAAI9C,GAAK,GAAK,GAAK8C,IAAI,GAAK,IAAM,GAAK,GAAK,IAAM,EAAIrC,KAAK2c,MAAMte,EAAGD,GAAIyB,EAAIymC,QAAQ,GAAI,IAAKY,GAAKrnC,EAAE,GAAIsnC,GAAKtnC,EAAE,GAAIunC,IAAMF,GAAKrwB,GAAIwwB,IAAMF,GAAKpwB,GAAIuwB,GAAKpzB,GAAKkzB,IAAMnzB,GAAKozB,KACpRC,GAAKA,GAAK3xB,GAAK,IAAMtT,KAAK4R,GAAKmzB,IAAMlzB,GAAKmzB,KAAO1xB,GAAK,IAAM,IAAMqxB,GAAKrE,GAAK7sB,GAAKC,GAAKuqB,GAAKc,GAAKmF,kBAClGU,eAAepwB,GAAIE,GAAI,GAAIiwB,GAAIlxB,GAAIwqB,GAAI4G,GAAIC,GAAI,GAAI/oC,GAAKoC,EAAGnC,GAAKmC,EAAGjB,EAAG0F,MAAO4yB,QAC7EA,OAAO1mB,MAAM+1B,GAAIC,IACjBF,eAAeC,GAAIC,GAAI,GAAI/oC,EAAGC,EAAGkB,EAAGuX,GAAIE,GAAI,GAAI2rB,GAAI5sB,GAAIqrB,GAAIn8B,MAAO4yB,UASzE,OALA4O,SAAStZ,UAAY,SAASvqB,GAC5B,OAAK5K,UAAUvB,QACf+vC,UAAY,GAAK5jC,EAAIA,GAAK,GAAK,GACxB6jC,UAFuBzmC,KAAKU,KAAK,KAInC+lC,SAiDT,SAASc,yBAAyBjB,SAChC,IAAIG,SAAWJ,iBAAgB,SAAS7nC,EAAGuT,GACzC,OAAOu0B,QAAQ,CAAE9nC,EAAI8V,WAAYvC,EAAIuC,gBAEvC,OAAO,SAASujB,QACd,OAAO2P,yBAAyBf,SAAS5O,UAY7C,SAAS4P,iBAAiB5P,QACxB//B,KAAK+/B,OAASA,OAsBhB,SAAS+O,sBAAsB/O,OAAQ1mB,OACrC,MAAO,CACLA,MAAOA,MACPinB,OAAQ,WACNP,OAAOO,UAETc,UAAW,WACTrB,OAAOqB,aAETC,QAAS,WACPtB,OAAOsB,WAETC,aAAc,WACZvB,OAAOuB,gBAETC,WAAY,WACVxB,OAAOwB,eAMb,SAASqO,kBAAkBpB,SACzB,OAAOpD,0BAAyB,WAC9B,OAAOoD,UADFpD,GAIT,SAASA,yBAAyBD,WAChC,IAAIqD,QAASzI,OAAQ8J,cAGgD,GAAI,GAAoG9P,OAHzI+P,gBAAkBvB,iBAAgB,SAAS7nC,EAAGuT,GAEhF,MAAO,EADPvT,EAAI8nC,QAAQ9nC,EAAGuT,IACJ,GAAKxP,EAAI,GAAI,GAAK/D,EAAE,GAAK+D,MAClCA,EAAI,IAAK/D,EAAI,IAAKuT,EAAI,IAAK,EAAI,EAAG,EAAI,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EAAW81B,QAAUpI,wBAAyBqI,SAAW/jC,YAAagkC,UAAY,KAAMxE,WAAa,KACvK,SAASyE,WAAW72B,OAElB,MAAO,EADPA,MAAQw2B,cAAcx2B,MAAM,GAAKkD,WAAYlD,MAAM,GAAKkD,aACzC,GAAK9R,EAAI,GAAI,GAAK4O,MAAM,GAAK5O,GAE9C,SAAS+V,OAAOnH,OAEd,OADAA,MAAQw2B,cAAcrvB,QAAQnH,MAAM,GAAK,IAAM5O,GAAI,GAAK4O,MAAM,IAAM5O,KACpD,CAAE4O,MAAM,GAAKmD,WAAYnD,MAAM,GAAKmD,YA4CtD,SAASijB,QACPoQ,cAAgBlL,eAAeoB,OAASoK,gBAAgB,GAAI,GAAI,IAAK3B,SACrE,IAAI5vB,OAAS4vB,QAAQ,EAAG,GAGxB,OAFA,GAAK9nC,EAAIkY,OAAO,GAAKnU,EACrB,GAAKwP,EAAI2E,OAAO,GAAKnU,EACd2lC,aAET,SAASA,aAEP,OADIrQ,SAAQA,OAAO4L,OAAQ,EAAO5L,OAAS,MACpCmQ,WAET,OArDAA,WAAWnQ,OAAS,SAAS2L,QAI3B,OAHI3L,SAAQA,OAAO4L,OAAQ,IAC3B5L,OAAS2P,yBAAyBK,QAAQhK,OAAQ+J,gBAAgBE,SAAStE,YACpEC,OAAQ,EACR5L,QAETmQ,WAAWD,UAAY,SAASnlC,GAC9B,OAAK5K,UAAUvB,QACfoxC,QAAe,MAALjlC,GAAamlC,UAAYnlC,EAAG68B,yBAA2BO,mBAAmB+H,WAAanlC,GAAKyR,YAC/F6zB,cAFuBH,WAIhCC,WAAWzE,WAAa,SAAS3gC,GAC/B,OAAK5K,UAAUvB,QACf8sC,WAAa3gC,EACbklC,SAAWllC,EAAIk/B,kBAAkBl/B,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAIA,EAAE,GAAG,IAAMmB,YAChEmkC,cAHuB3E,YAKhCyE,WAAWvvB,MAAQ,SAAS7V,GAC1B,OAAK5K,UAAUvB,QACf8L,GAAKK,EACE20B,SAFuBh1B,GAIhCylC,WAAWtvB,UAAY,SAAS9V,GAC9B,OAAK5K,UAAUvB,QACf+H,GAAKoE,EAAE,GACPmP,GAAKnP,EAAE,GACA20B,SAHuB,CAAE/4B,EAAGuT,IAKrCi2B,WAAWtxB,OAAS,SAAS9T,GAC3B,OAAK5K,UAAUvB,QACf,EAAImM,EAAE,GAAK,IAAMyR,WACjB,EAAIzR,EAAE,GAAK,IAAMyR,WACVkjB,SAHuB,CAAE,EAAIjjB,WAAY,EAAIA,aAKtD0zB,WAAWnK,OAAS,SAASj7B,GAC3B,OAAK5K,UAAUvB,QACf,GAAKmM,EAAE,GAAK,IAAMyR,WAClB,GAAKzR,EAAE,GAAK,IAAMyR,WAClB,GAAKzR,EAAEnM,OAAS,EAAImM,EAAE,GAAK,IAAMyR,WAAa,EACvCkjB,SAJuB,CAAE,GAAKjjB,WAAY,GAAKA,WAAY,GAAKA,aAMzEpY,GAAGwJ,OAAOsiC,WAAYJ,gBAAiB,aAYhC,WAGL,OAFAtB,QAAUrD,UAAUhrC,MAAMH,KAAME,WAChCgwC,WAAW1vB,OAASguB,QAAQhuB,QAAUA,OAC/Bif,SAGX,SAASiQ,yBAAyB3P,QAChC,OAAO+O,sBAAsB/O,QAAQ,SAASr5B,EAAGuT,GAC/C8lB,OAAO1mB,MAAM3S,EAAI6V,WAAYtC,EAAIsC,eAGrC,SAAS8zB,uBAAuB,EAAG,GACjC,MAAO,CAAE,EAAG,GAiBd,SAASC,wBAAwB,EAAG,GAClC,MAAO,CAAE,EAAI,EAAI,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,EAAG,GAG/C,SAASH,gBAAgB,GAAI,GAAI,IAC/B,OAAO,GAAK,IAAM,GAAKxL,eAAe,iBAAiB,IAAK,kBAAkB,GAAI,KAAO,iBAAiB,IAAM,IAAM,GAAK,kBAAkB,GAAI,IAAM2L,wBAEzJ,SAAS,wBAAwB,IAC/B,OAAO,SAAS,EAAG,GACjB,MAAgB,EAAT,GAAK,IAAU,EAAI,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,EAAG,IAG1D,SAAS,iBAAiB,IACxB,IAAIC,SAAW,wBAAwB,IAEvC,OADAA,SAAS/vB,OAAS,yBAAyB,IACpC+vB,SAET,SAAS,kBAAkB,GAAI,IAC7B,IAAI,MAAQroC,KAAKoc,IAAI,IAAK,MAAQpc,KAAKgV,IAAI,IAAK,MAAQhV,KAAKoc,IAAI,IAAK,MAAQpc,KAAKgV,IAAI,IACvF,SAASqzB,SAAS,EAAG,GACnB,IAAI,KAAOroC,KAAKoc,IAAI,GAAI5d,EAAIwB,KAAKoc,IAAI,GAAK,KAAMrK,EAAI/R,KAAKgV,IAAI,GAAK,KAAM7O,EAAInG,KAAKgV,IAAI,GAAIzS,EAAI4D,EAAI,MAAQ3H,EAAI,MAC7G,MAAO,CAAEwB,KAAK2c,MAAM5K,EAAI,MAAQxP,EAAI,MAAO/D,EAAI,MAAQ2H,EAAI,OAAQwO,QAAQpS,EAAI,MAAQwP,EAAI,QAM7F,OAJAs2B,SAAS/vB,OAAS,SAAS,EAAG,GAC5B,IAAI,KAAOtY,KAAKoc,IAAI,GAAI5d,EAAIwB,KAAKoc,IAAI,GAAK,KAAMrK,EAAI/R,KAAKgV,IAAI,GAAK,KAAM7O,EAAInG,KAAKgV,IAAI,GAAIzS,EAAI4D,EAAI,MAAQ4L,EAAI,MAC7G,MAAO,CAAE/R,KAAK2c,MAAM5K,EAAI,MAAQ5L,EAAI,MAAO3H,EAAI,MAAQ+D,EAAI,OAAQoS,QAAQpS,EAAI,MAAQ/D,EAAI,SAEtF6pC,SAkCT,SAASxH,yBAAyBZ,OAAQ9S,WACxC,IAAI+S,GAAKlgC,KAAKoc,IAAI6jB,QAASqI,GAAKtoC,KAAKgV,IAAIirB,QACzC,OAAO,SAAS3kC,KAAMwkC,GAAIC,UAAW15B,UACnC,IAAIlM,KAAO4lC,UAAY5S,UACX,MAAR7xB,MACFA,KAAOitC,mBAAmBrI,GAAI5kC,MAC9BwkC,GAAKyI,mBAAmBrI,GAAIJ,KACxBC,UAAY,EAAIzkC,KAAOwkC,GAAKxkC,KAAOwkC,MAAIxkC,MAAQykC,UAAY,KAE/DzkC,KAAO2kC,OAASF,UAAY,EAC5BD,GAAKG,OAAS,GAAK9lC,MAErB,IAAK,IAAIgX,MAAO/P,EAAI9F,KAAMykC,UAAY,EAAI3+B,EAAI0+B,GAAK1+B,EAAI0+B,GAAI1+B,GAAKjH,KAC9DkM,SAAS8K,OAAOA,MAAQ4pB,iBAAiB,CAAEmF,IAAKoI,GAAKtoC,KAAKoc,IAAIhb,IAAKknC,GAAKtoC,KAAKgV,IAAI5T,MAAO,GAAI+P,MAAM,KAIxG,SAASo3B,mBAAmBrI,GAAI/uB,OAC9B,IAAI/S,EAAIm8B,iBAAiBppB,OACzB/S,EAAE,IAAM8hC,GACRpF,0BAA0B18B,GAC1B,IAAIw9B,MAAQnnB,SAASrW,EAAE,IACvB,SAAUA,EAAE,GAAK,GAAKw9B,MAAQA,OAAS,EAAI57B,KAAKoU,GAAK,IAAM,EAAIpU,KAAKoU,IAgFtE,SAASo0B,kBAAkBzxB,GAAIC,GAAI9C,IACjC,IAAInC,EAAI7V,GAAG4G,MAAMiU,GAAIC,GAAK,EAAG9C,IAAI3N,OAAOyQ,IACxC,OAAO,SAASxY,GACd,OAAOuT,EAAE/P,KAAI,SAAS+P,GACpB,MAAO,CAAEvT,EAAGuT,OAIlB,SAAS02B,kBAAkB5xB,GAAIC,GAAI7C,IACjC,IAAIzV,EAAItC,GAAG4G,MAAM+T,GAAIC,GAAK,EAAG7C,IAAI1N,OAAOuQ,IACxC,OAAO,SAAS/E,GACd,OAAOvT,EAAEwD,KAAI,SAASxD,GACpB,MAAO,CAAEA,EAAGuT,OAIlB,SAAS22B,UAAUnoC,GACjB,OAAOA,EAAE0D,OAEX,SAAS0kC,UAAUpoC,GACjB,OAAOA,EAAE9H,OAxYXyD,GAAGk7B,IAAIwR,KAAO,WACZ,IAAuBZ,WAAY/B,QAAS4C,cAAeC,cAAeC,YAAtEtD,YAAc,IAClB,SAASmD,KAAKzlC,QAMZ,OALIA,SACyB,mBAAhBsiC,aAA4BqD,cAAcrD,aAAaA,YAAYxtC,MAAMH,KAAME,YACrF+wC,aAAgBA,YAAYtF,QAAOsF,YAAcF,cAAcC,gBACpE5sC,GAAGk7B,IAAIS,OAAO10B,OAAQ4lC,cAEjBD,cAAcrhB,SAiCvB,SAAS8P,QAEP,OADAwR,YAAc,KACPH,KAET,OAnCAA,KAAKtP,KAAO,SAASn2B,QAGnB,OAFAqhC,mBAAqB,EACrBtoC,GAAGk7B,IAAIS,OAAO10B,OAAQ0lC,cAAc/D,kBAC7BN,oBAEToE,KAAK5M,SAAW,SAAS74B,QAGvB,OAFAw2B,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoBC,kBAAoB,EACpLj+B,GAAGk7B,IAAIS,OAAO10B,OAAQ0lC,cAAclD,sBAC7BxL,kBAAoB,CAAEF,kBAAoBE,kBAAmBD,kBAAoBC,mBAAsBH,kBAAoB,CAAEF,kBAAoBE,kBAAmBD,kBAAoBC,mBAAsBH,kBAAoB,CAAEF,kBAAoBE,kBAAmBD,kBAAoBC,mBAAsB,CAAEv7B,IAAKA,MAErUsqC,KAAK1N,OAAS,SAAS/3B,QAGrB,OAFAyhC,oBAAsBC,sBAAwBH,oBAAsBC,oBAAsB1hC,KAC1F/G,GAAGk7B,IAAIS,OAAO10B,OAAQ0lC,cAAc3D,oBAC7B,CAAE,CAAER,oBAAqBC,qBAAuB,CAAEC,oBAAqBC,uBAEhF+D,KAAKZ,WAAa,SAASplC,GACzB,OAAK5K,UAAUvB,QACfoyC,eAAiBb,WAAaplC,GAAKA,EAAEi1B,QAAU0P,yBAAyB3kC,GAAKmB,YACtEwzB,SAFuByQ,YAIhCY,KAAK3C,QAAU,SAASrjC,GACtB,OAAK5K,UAAUvB,QACfqyC,cAAiC,OAAhB7C,QAAUrjC,GAAa,IAAIwiC,kBAAsB,IAAIY,mBAAmBpjC,GAC9D,mBAAhB6iC,aAA4BqD,cAAcrD,YAAYA,aAC1DlO,SAHuB0O,SAKhC2C,KAAKnD,YAAc,SAAS7iC,GAC1B,OAAK5K,UAAUvB,QACfgvC,YAA2B,mBAAN7iC,EAAmBA,GAAKkmC,cAAcrD,aAAa7iC,IAAKA,GACtEgmC,MAFuBnD,aAQzBmD,KAAKZ,WAAW9rC,GAAGk7B,IAAIyM,aAAaoC,QAAQ,OAUrD/pC,GAAGk7B,IAAI4R,UAAY,SAASC,SAC1B,MAAO,CACLpR,OAAQ,SAASA,QACf,IAAImR,UAAY,IAAIvB,iBAAiB5P,QACrC,IAAK,IAAIt1B,KAAK0mC,QAASD,UAAUzmC,GAAK0mC,QAAQ1mC,GAC9C,OAAOymC,aAObvB,iBAAiBruC,UAAY,CAC3B+X,MAAO,SAAS3S,EAAGuT,GACjBja,KAAK+/B,OAAO1mB,MAAM3S,EAAGuT,IAEvBqmB,OAAQ,WACNtgC,KAAK+/B,OAAOO,UAEdc,UAAW,WACTphC,KAAK+/B,OAAOqB,aAEdC,QAAS,WACPrhC,KAAK+/B,OAAOsB,WAEdC,aAAc,WACZthC,KAAK+/B,OAAOuB,gBAEdC,WAAY,WACVvhC,KAAK+/B,OAAOwB,eAuBhBn9B,GAAGk7B,IAAI4Q,WAAaN,kBACpBxrC,GAAGk7B,IAAI8R,kBAAoBhG,0BAsF1BhnC,GAAGk7B,IAAI+R,gBAAkB,WACxB,OAAOzB,kBAAkBS,0BACxBxE,IAAMwE,uBAAuB7vB,OAAS6vB,uBACzCjsC,GAAGk7B,IAAIiR,SAAW,SAASxK,QAEzB,SAASyF,QAAQhL,aAEf,OADAA,YAAcuF,OAAOvF,YAAY,GAAKjkB,WAAYikB,YAAY,GAAKjkB,aAChD,IAAMC,WAAYgkB,YAAY,IAAMhkB,WAAYgkB,YAMrE,OATAuF,OAASoK,gBAAgBpK,OAAO,GAAK,IAAMxpB,WAAYwpB,OAAO,GAAKxpB,WAAYwpB,OAAOpnC,OAAS,EAAIonC,OAAO,GAAKxpB,WAAa,GAK5HivB,QAAQhrB,OAAS,SAASggB,aAExB,OADAA,YAAcuF,OAAOvlB,OAAOggB,YAAY,GAAKjkB,WAAYikB,YAAY,GAAKjkB,aACvD,IAAMC,WAAYgkB,YAAY,IAAMhkB,WAAYgkB,aAE9DgL,SAKT8E,wBAAwB9vB,OAAS6vB,uBA0BjCjsC,GAAGk7B,IAAIgS,OAAS,WACd,IAAuBxN,MAAsBmB,YAAzCjqB,OAAS,CAAE,EAAG,GAAYqa,UAAY,EAC1C,SAASic,SACP,IAAI1yB,OAA2B,mBAAX5D,OAAwBA,OAAO7a,MAAMH,KAAME,WAAa8a,OAAQ+qB,OAASoK,iBAAiBvxB,OAAO,GAAKrC,YAAaqC,OAAO,GAAKrC,WAAY,GAAGiE,OAAQkmB,KAAO,GAOjL,OANAzB,YAAY,KAAM,KAAM,EAAG,CACzB5rB,MAAO,SAAS3S,EAAGuT,GACjBysB,KAAK1jC,KAAK0D,EAAIq/B,OAAOr/B,EAAGuT,IACxBvT,EAAE,IAAM8V,WAAY9V,EAAE,IAAM8V,cAGzB,CACLpN,KAAM,UACNoxB,YAAa,CAAEkG,OAkBnB,OAfA4K,OAAOt2B,OAAS,SAAStU,GACvB,OAAKxG,UAAUvB,QACfqc,OAAStU,EACF4qC,QAFuBt2B,QAIhCs2B,OAAOxN,MAAQ,SAASp9B,GACtB,OAAKxG,UAAUvB,QACfsmC,YAAc8D,0BAA0BjF,OAASp9B,GAAK6V,WAAY8Y,UAAY9Y,YACvE+0B,QAFuBxN,OAIhCwN,OAAOjc,UAAY,SAASvqB,GAC1B,OAAK5K,UAAUvB,QACfsmC,YAAc8D,yBAAyBjF,MAAQvnB,YAAa8Y,WAAavqB,GAAKyR,YACvE+0B,QAFuBjc,WAIzBic,OAAOxN,MAAM,KA0BtB1/B,GAAGk7B,IAAIiS,SAAW,SAASjrC,EAAGC,GAC5B,IAAyN+C,EAArN,IAAM/C,EAAE,GAAKD,EAAE,IAAMiW,WAAY,GAAKjW,EAAE,GAAKiW,WAAY,GAAKhW,EAAE,GAAKgW,WAAY,MAAQrU,KAAKgV,IAAI,IAAK,MAAQhV,KAAKoc,IAAI,IAAK,MAAQpc,KAAKgV,IAAI,IAAK,MAAQhV,KAAKoc,IAAI,IAAK,MAAQpc,KAAKgV,IAAI,IAAK,MAAQhV,KAAKoc,IAAI,IACpN,OAAOpc,KAAK2c,MAAM3c,KAAKU,MAAMU,EAAI,MAAQ,OAASA,GAAKA,EAAI,MAAQ,MAAQ,MAAQ,MAAQ,OAASA,GAAI,MAAQ,MAAQ,MAAQ,MAAQ,QAE1IlF,GAAGk7B,IAAIkS,UAAY,WACjB,IAAIxyB,GAAID,GAAI0yB,GAAIC,GAAIxyB,GAAID,GAAI0yB,GAAIC,GAAyClrC,EAAGuT,EAAGmc,EAAGsG,EAA9CvgB,GAAK,GAAIC,GAAKD,GAAI01B,GAAK,GAAIC,GAAK,IAAiBzc,UAAY,IACjG,SAASmc,YACP,MAAO,CACLpiC,KAAM,kBACNoxB,YAAaiH,SAGjB,SAASA,QACP,OAAOrjC,GAAG4G,MAAM9C,KAAKia,KAAKuvB,GAAKG,IAAMA,GAAIJ,GAAII,IAAI3nC,IAAIksB,GAAG3nB,OAAOrK,GAAG4G,MAAM9C,KAAKia,KAAKyvB,GAAKE,IAAMA,GAAIH,GAAIG,IAAI5nC,IAAIwyB,IAAIjuB,OAAOrK,GAAG4G,MAAM9C,KAAKia,KAAKpD,GAAK5C,IAAMA,GAAI6C,GAAI7C,IAAIvF,QAAO,SAASlQ,GAChL,OAAO6D,IAAI7D,EAAImrC,IAAM,KACpB3nC,IAAIxD,IAAI+H,OAAOrK,GAAG4G,MAAM9C,KAAKia,KAAKlD,GAAK7C,IAAMA,GAAI8C,GAAI9C,IAAIxF,QAAO,SAASqD,GAC1E,OAAO1P,IAAI0P,EAAI63B,IAAM,KACpB5nC,IAAI+P,IA2DT,OAzDAu3B,UAAU/J,MAAQ,WAChB,OAAOA,QAAQv9B,KAAI,SAASs2B,aAC1B,MAAO,CACLpxB,KAAM,aACNoxB,YAAaA,iBAInBgR,UAAUO,QAAU,WAClB,MAAO,CACL3iC,KAAM,UACNoxB,YAAa,CAAEpK,EAAEsb,IAAIjjC,OAAOiuB,EAAEiV,IAAI7tC,MAAM,GAAIsyB,EAAEqb,IAAI5c,UAAU/wB,MAAM,GAAI44B,EAAEkV,IAAI/c,UAAU/wB,MAAM,OAGhG0tC,UAAUhqC,OAAS,SAASsD,GAC1B,OAAK5K,UAAUvB,OACR6yC,UAAUQ,YAAYlnC,GAAGmnC,YAAYnnC,GADd0mC,UAAUS,eAG1CT,UAAUQ,YAAc,SAASlnC,GAC/B,OAAK5K,UAAUvB,QACf+yC,IAAM5mC,EAAE,GAAG,GAAI2mC,IAAM3mC,EAAE,GAAG,GAC1B8mC,IAAM9mC,EAAE,GAAG,GAAI6mC,IAAM7mC,EAAE,GAAG,GACtB4mC,GAAKD,KAAI3mC,EAAI4mC,GAAIA,GAAKD,GAAIA,GAAK3mC,GAC/B8mC,GAAKD,KAAI7mC,EAAI8mC,GAAIA,GAAKD,GAAIA,GAAK7mC,GAC5B0mC,UAAUnc,UAAUA,YALG,CAAE,CAAEqc,GAAIE,IAAM,CAAEH,GAAIE,MAOpDH,UAAUS,YAAc,SAASnnC,GAC/B,OAAK5K,UAAUvB,QACfogB,IAAMjU,EAAE,GAAG,GAAIkU,IAAMlU,EAAE,GAAG,GAC1BmU,IAAMnU,EAAE,GAAG,GAAIoU,IAAMpU,EAAE,GAAG,GACtBiU,GAAKC,KAAIlU,EAAIiU,GAAIA,GAAKC,GAAIA,GAAKlU,GAC/BmU,GAAKC,KAAIpU,EAAImU,GAAIA,GAAKC,GAAIA,GAAKpU,GAC5B0mC,UAAUnc,UAAUA,YALG,CAAE,CAAEtW,GAAIE,IAAM,CAAED,GAAIE,MAOpDsyB,UAAUnvC,KAAO,SAASyI,GACxB,OAAK5K,UAAUvB,OACR6yC,UAAUU,UAAUpnC,GAAGqnC,UAAUrnC,GADV0mC,UAAUW,aAG1CX,UAAUU,UAAY,SAASpnC,GAC7B,OAAK5K,UAAUvB,QACfkzC,IAAM/mC,EAAE,GAAIgnC,IAAMhnC,EAAE,GACb0mC,WAFuB,CAAEK,GAAIC,KAItCN,UAAUW,UAAY,SAASrnC,GAC7B,OAAK5K,UAAUvB,QACfwd,IAAMrR,EAAE,GAAIsR,IAAMtR,EAAE,GACb0mC,WAFuB,CAAEr1B,GAAIC,KAItCo1B,UAAUnc,UAAY,SAASvqB,GAC7B,OAAK5K,UAAUvB,QACf02B,WAAavqB,EACbpE,EAAIgqC,kBAAkBzxB,GAAIC,GAAI,IAC9BjF,EAAI02B,kBAAkB5xB,GAAIC,GAAIqW,WAC9Be,EAAIsa,kBAAkBkB,GAAID,GAAI,IAC9BjV,EAAIiU,kBAAkBe,GAAID,GAAIpc,WACvBmc,WANuBnc,WAQzBmc,UAAUQ,YAAY,CAAE,EAAG,KAAM,GAAK,GAAK,CAAE,IAAK,GAAK,KAAOC,YAAY,CAAE,EAAG,KAAM,GAAK,GAAK,CAAE,IAAK,GAAK,MAwBpH7tC,GAAGk7B,IAAI8S,SAAW,WAChB,IAAwBC,QAA6BC,QAAjDnmC,OAASykC,UAAoBjwC,OAASkwC,UAC1C,SAASuB,WACP,MAAO,CACLhjC,KAAM,aACNoxB,YAAa,CAAE6R,SAAWlmC,OAAOhM,MAAMH,KAAME,WAAYoyC,SAAW3xC,OAAOR,MAAMH,KAAME,aAmB3F,OAhBAkyC,SAASb,SAAW,WAClB,OAAOntC,GAAGk7B,IAAIiS,SAASc,SAAWlmC,OAAOhM,MAAMH,KAAME,WAAYoyC,SAAW3xC,OAAOR,MAAMH,KAAME,aAEjGkyC,SAASjmC,OAAS,SAASrB,GACzB,OAAK5K,UAAUvB,QACfwN,OAASrB,EAAGunC,QAAuB,mBAANvnC,EAAmB,KAAOA,EAChDsnC,UAFuBjmC,QAIhCimC,SAASzxC,OAAS,SAASmK,GACzB,OAAK5K,UAAUvB,QACfgC,OAASmK,EAAGwnC,QAAuB,mBAANxnC,EAAmB,KAAOA,EAChDsnC,UAFuBzxC,QAIhCyxC,SAAS/c,UAAY,WACnB,OAAOn1B,UAAUvB,OAASyzC,SAAW,GAEhCA,UAEThuC,GAAGk7B,IAAI2F,YAAc,SAAS94B,OAAQxL,QACpC,OAEF,SAAS4xC,mBAAmBxzB,GAAIE,GAAID,GAAIE,IACtC,IAAIszB,IAAMtqC,KAAKoc,IAAIrF,IAAKwzB,IAAMvqC,KAAKgV,IAAI+B,IAAKyzB,IAAMxqC,KAAKoc,IAAIpF,IAAKyzB,IAAMzqC,KAAKgV,IAAIgC,IAAK0zB,IAAMJ,IAAMtqC,KAAKoc,IAAIvF,IAAK8zB,IAAML,IAAMtqC,KAAKgV,IAAI6B,IAAK+zB,IAAMJ,IAAMxqC,KAAKoc,IAAItF,IAAK+zB,IAAML,IAAMxqC,KAAKgV,IAAI8B,IAAKvW,EAAI,EAAIP,KAAK4U,KAAK5U,KAAKU,KAAKqU,YAAYiC,GAAKD,IAAMuzB,IAAME,IAAMz1B,YAAY+B,GAAKD,MAAOtU,EAAI,EAAIvC,KAAKgV,IAAIzU,GAChSw8B,YAAcx8B,EAAI,SAASa,GAC7B,IAAI+yB,EAAIn0B,KAAKgV,IAAI5T,GAAKb,GAAKgC,EAAG2xB,EAAIl0B,KAAKgV,IAAIzU,EAAIa,GAAKmB,EAAG/D,EAAI01B,EAAIwW,IAAMvW,EAAIyW,IAAK74B,EAAImiB,EAAIyW,IAAMxW,EAAI0W,IAAK1kC,EAAI+tB,EAAIqW,IAAMpW,EAAIsW,IACvH,MAAO,CAAEzqC,KAAK2c,MAAM5K,EAAGvT,GAAK8V,WAAYtU,KAAK2c,MAAMxW,EAAGnG,KAAKU,KAAKlC,EAAIA,EAAIuT,EAAIA,IAAMuC,aAChF,WACF,MAAO,CAAEuC,GAAKvC,WAAYyC,GAAKzC,aAGjC,OADAyoB,YAAYsM,SAAW9oC,EAChBw8B,YAXAsN,CAAmBpmC,OAAO,GAAKoQ,WAAYpQ,OAAO,GAAKoQ,WAAY5b,OAAO,GAAK4b,WAAY5b,OAAO,GAAK4b,aAahHnY,GAAGk7B,IAAI3gC,OAAS,SAAS0M,QAGvB,OAFAuiC,iBAAmB,EACnBxpC,GAAGk7B,IAAIS,OAAO10B,OAAQ2nC,eACfpF,kBAGT,IAAIoF,cAAgB,CAClB1S,OAAQzyB,QACRwL,MAAOxL,QACPuzB,UAKF,SAAS6R,yBACP,IAAI,GAAI,MAAO,MAQf,SAASzQ,UAAU,EAAG,GACpB,IAAI,KAAOt6B,KAAKgV,IAAI,GAAKX,YAAa,KAAOrU,KAAKoc,IAAI,GAAIhb,EAAIiB,KAAK,GAAKgS,YAAc,IAAK,MAAQrU,KAAKoc,IAAIhb,GAC5GskC,kBAAoB1lC,KAAK2c,MAAM3c,KAAKU,MAAMU,EAAI,KAAOpB,KAAKgV,IAAI5T,IAAMA,GAAKA,EAAI,MAAQ,KAAO,MAAQ,KAAO,OAASA,GAAI,MAAQ,KAAO,MAAQ,KAAO,OACtJ,GAAK,EAAG,MAAQ,KAAM,MAAQ,KAVhC0pC,cAAc35B,MAAQ,SAAS,EAAG,GAChC,GAAK,EAAIkD,WAAY,MAAQrU,KAAKgV,IAAI,GAAKX,YAAa,MAAQrU,KAAKoc,IAAI,GACzE0uB,cAAc35B,MAAQmpB,WAExBwQ,cAAc3R,QAAU,WACtB2R,cAAc35B,MAAQ25B,cAAc3R,QAAUxzB,UAXhDwzB,QAASxzB,QACTyzB,aAAczzB,QACd0zB,WAAY1zB,SAiBd,SAASqlC,iBAAiBvyB,MAAOmjB,OAC/B,SAASqP,UAAU,EAAG,GACpB,IAAI,KAAOjrC,KAAKoc,IAAI,GAAI,KAAOpc,KAAKoc,IAAI,GAAI7Z,EAAIkW,MAAM,KAAO,MAC7D,MAAO,CAAElW,EAAI,KAAOvC,KAAKgV,IAAI,GAAIzS,EAAIvC,KAAKgV,IAAI,IAMhD,OAJAi2B,UAAU3yB,OAAS,SAAS9Z,EAAGuT,GAC7B,IAAI,EAAI/R,KAAKU,KAAKlC,EAAIA,EAAIuT,EAAIA,GAAIxS,EAAIq8B,MAAM,GAAIsP,KAAOlrC,KAAKgV,IAAIzV,GAAI4rC,KAAOnrC,KAAKoc,IAAI7c,GACpF,MAAO,CAAES,KAAK2c,MAAMne,EAAI0sC,KAAM,EAAIC,MAAOnrC,KAAK4U,KAAK,GAAK7C,EAAIm5B,KAAO,KAE9DD,UAET,IAAIG,0BAA4BJ,kBAAiB,SAAS,UACxD,OAAOhrC,KAAKU,KAAK,GAAK,EAAI,cACzB,SAAS,GACV,OAAO,EAAIV,KAAK4U,KAAK,EAAI,OAE1B1Y,GAAGk7B,IAAIiU,mBAAqB,WAC3B,OAAO3D,kBAAkB0D,6BACxBzH,IAAMyH,0BACT,IAAIE,4BAA8BN,kBAAiB,SAAS,UAC1D,IAAIzrC,EAAIS,KAAK0U,KAAK,UAClB,OAAOnV,GAAKA,EAAIS,KAAKgV,IAAIzV,KACxBwE,aAIH,SAASwnC,sBAAsB,GAAI,IACjC,IAAI,MAAQvrC,KAAKoc,IAAI,IAAKhb,EAAI,SAAS,GACrC,OAAOpB,KAAKkmB,IAAI,EAAI,EAAI,EAAI,IAC3BtsB,EAAI,KAAO,GAAKoG,KAAKgV,IAAI,IAAMhV,KAAK4V,IAAI,MAAQ5V,KAAKoc,IAAI,KAAOpc,KAAK4V,IAAIxU,EAAE,IAAMA,EAAE,KAAM1H,EAAI,MAAQsG,KAAKkY,IAAI9W,EAAE,IAAKxH,GAAKA,EAC7H,IAAKA,EAAG,OAAO4xC,gBACf,SAASlI,QAAQ,EAAG,GACd5pC,EAAI,EACF,GAAK,MAAQ,IAAG,GAAK,MAAQ,GAE7B,EAAI,MAAQ,IAAG,EAAI,MAAQ,GAEjC,IAAI,EAAIA,EAAIsG,KAAKkY,IAAI9W,EAAE,GAAIxH,GAC3B,MAAO,CAAE,EAAIoG,KAAKgV,IAAIpb,EAAI,GAAIF,EAAI,EAAIsG,KAAKoc,IAAIxiB,EAAI,IAMrD,OAJA0pC,QAAQhrB,OAAS,SAAS9Z,EAAGuT,GAC3B,IAAI,KAAOrY,EAAIqY,EAAG,EAAIwC,OAAO3a,GAAKoG,KAAKU,KAAKlC,EAAIA,EAAI,KAAO,MAC3D,MAAO,CAAEwB,KAAK2c,MAAMne,EAAG,MAAQ5E,EAAG,EAAIoG,KAAK4/B,KAAK5/B,KAAKkY,IAAIxe,EAAI,EAAG,EAAIE,IAAM,QAErE0pC,QAKT,SAASmI,wBAAwB,GAAI,IACnC,IAAI,MAAQzrC,KAAKoc,IAAI,IAAKxiB,EAAI,KAAO,GAAKoG,KAAKgV,IAAI,KAAO,MAAQhV,KAAKoc,IAAI,MAAQ,GAAK,IAAKsvB,EAAI,MAAQ9xC,EAAI,GAC7G,GAAIyI,IAAIzI,GAAK,EAAG,OAAOuuC,uBACvB,SAAS7E,QAAQ,EAAG,GAClB,IAAI,EAAIoI,EAAI,EACZ,MAAO,CAAE,EAAI1rC,KAAKgV,IAAIpb,EAAI,GAAI8xC,EAAI,EAAI1rC,KAAKoc,IAAIxiB,EAAI,IAMrD,OAJA0pC,QAAQhrB,OAAS,SAAS9Z,EAAGuT,GAC3B,IAAI,KAAO25B,EAAI35B,EACf,MAAO,CAAE/R,KAAK2c,MAAMne,EAAG,MAAQ5E,EAAG8xC,EAAIn3B,OAAO3a,GAAKoG,KAAKU,KAAKlC,EAAIA,EAAI,KAAO,QAEtE8kC,SArCRpnC,GAAGk7B,IAAIuU,qBAAuB,WAC7B,OAAOjE,kBAAkB4D,+BACxB3H,IAAM2H,6BAqBRpvC,GAAGk7B,IAAIwU,eAAiB,WACvB,OAAO5I,aAAauI,yBACnB5H,IAAM4H,uBAcRrvC,GAAGk7B,IAAIyU,iBAAmB,WACzB,OAAO7I,aAAayI,2BACnB9H,IAAM8H,wBACT,IAAIK,gBAAkBd,kBAAiB,SAAS,UAC9C,OAAO,EAAI,WACVhrC,KAAK4/B,MAIR,SAAS4L,gBAAgB,EAAG,GAC1B,MAAO,CAAE,EAAGxrC,KAAK4V,IAAI5V,KAAKkmB,IAAI,EAAI,EAAI,EAAI,KAK5C,SAAS6lB,0BAA0BzF,SACjC,IAAyG0F,SAArGxrC,EAAIknC,kBAAkBpB,SAAU7tB,MAAQjY,EAAEiY,MAAOC,UAAYlY,EAAEkY,UAAW6qB,WAAa/iC,EAAE+iC,WAqB7F,OApBA/iC,EAAEiY,MAAQ,WACR,IAAIvY,EAAIuY,MAAMxgB,MAAMuI,EAAGxI,WACvB,OAAOkI,IAAMM,EAAIwrC,SAAWxrC,EAAE+iC,WAAW,MAAQ/iC,EAAIN,GAEvDM,EAAEkY,UAAY,WACZ,IAAIxY,EAAIwY,UAAUzgB,MAAMuI,EAAGxI,WAC3B,OAAOkI,IAAMM,EAAIwrC,SAAWxrC,EAAE+iC,WAAW,MAAQ/iC,EAAIN,GAEvDM,EAAE+iC,WAAa,SAAS3gC,GACtB,IAAI1C,EAAIqjC,WAAWtrC,MAAMuI,EAAGxI,WAC5B,GAAIkI,IAAMM,GACR,GAAIwrC,SAAgB,MAALppC,EAAW,CACxB,IAAIL,EAAI,EAAIkW,QAASrX,EAAIsX,YACzB6qB,WAAW,CAAE,CAAEniC,EAAE,GAAKmB,EAAGnB,EAAE,GAAKmB,GAAK,CAAEnB,EAAE,GAAKmB,EAAGnB,EAAE,GAAKmB,WAEjDypC,WACT9rC,EAAI,MAEN,OAAOA,GAEFM,EAAE+iC,WAAW,OA/BrBrnC,GAAGk7B,IAAI6U,SAAW,WACjB,OAAOvE,kBAAkBoE,mBACxBnI,IAAMmI,gBAITN,gBAAgBlzB,OAAS,SAAS9Z,EAAGuT,GACnC,MAAO,CAAEvT,EAAG,EAAIwB,KAAK4/B,KAAK5/B,KAAK8U,IAAI/C,IAAM,SA0B1C7V,GAAGk7B,IAAI8U,SAAW,WACjB,OAAOH,0BAA0BP,mBAChC7H,IAAM6H,gBACT,IAAIW,oBAAsBnB,kBAAiB,WACzC,OAAO,IACNhrC,KAAK4U,OACP1Y,GAAGk7B,IAAIgV,aAAe,WACrB,OAAO1E,kBAAkByE,uBACxBxI,IAAMwI,oBACT,IAAIE,qBAAuBrB,kBAAiB,SAAS,UACnD,OAAO,GAAK,EAAI,aACf,SAAS,GACV,OAAO,EAAIhrC,KAAK4/B,KAAK,MAKvB,SAAS0M,0BAA0B,EAAG,GACpC,MAAO,CAAEtsC,KAAK4V,IAAI5V,KAAKkmB,IAAI,EAAI,EAAI,EAAI,KAAM,GAiB/C,SAASqmB,eAAehsC,GACtB,OAAOA,EAAE,GAEX,SAASisC,eAAejsC,GACtB,OAAOA,EAAE,GA2BX,SAASksC,kBAAkBpP,QAEzB,IADA,IAAIzjC,EAAIyjC,OAAO5mC,OAAQi2C,KAAO,CAAE,EAAG,GAAKC,GAAK,EACpCj2C,EAAI,EAAGA,EAAIkD,EAAGlD,IAAK,CAC1B,KAAOi2C,GAAK,GAAKn4B,WAAW6oB,OAAOqP,KAAKC,GAAK,IAAKtP,OAAOqP,KAAKC,GAAK,IAAKtP,OAAO3mC,KAAO,KAAKi2C,GAC3FD,KAAKC,MAAQj2C,EAEf,OAAOg2C,KAAK9wC,MAAM,EAAG+wC,IAEvB,SAASC,kBAAkBxuC,EAAGC,GAC5B,OAAOD,EAAE,GAAKC,EAAE,IAAMD,EAAE,GAAKC,EAAE,IA7DhCnC,GAAGk7B,IAAIyV,cAAgB,WACtB,OAAOnF,kBAAkB2E,wBACxB1I,IAAM0I,qBAITC,0BAA0Bh0B,OAAS,SAAS9Z,EAAGuT,GAC7C,MAAO,EAAGA,EAAG,EAAI/R,KAAK4/B,KAAK5/B,KAAK8U,IAAItW,IAAM,SAE3CtC,GAAGk7B,IAAI0V,mBAAqB,WAC3B,IAAI9E,WAAa+D,0BAA0BO,2BAA4B51B,OAASsxB,WAAWtxB,OAAQmnB,OAASmK,WAAWnK,OAQvH,OAPAmK,WAAWtxB,OAAS,SAAS9T,GAC3B,OAAOA,EAAI8T,OAAO,EAAG9T,EAAE,GAAIA,EAAE,KAAuB,EAAdA,EAAI8T,UAAc,IAAK9T,EAAE,KAEjEolC,WAAWnK,OAAS,SAASj7B,GAC3B,OAAOA,EAAIi7B,OAAO,CAAEj7B,EAAE,GAAIA,EAAE,GAAIA,EAAEnM,OAAS,EAAImM,EAAE,GAAK,GAAK,KAC3D,EADoEA,EAAIi7B,UACpE,GAAIj7B,EAAE,GAAIA,EAAE,GAAK,KAEhBi7B,OAAO,CAAE,EAAG,EAAG,OACrB8F,IAAM2I,0BACTpwC,GAAG6wC,KAAO,GAOV7wC,GAAG6wC,KAAKL,KAAO,SAASM,UACtB,IAAIxuC,EAAI+tC,eAAgBx6B,EAAIy6B,eAC5B,GAAIx0C,UAAUvB,OAAQ,OAAOi2C,KAAKM,UAClC,SAASN,KAAKtgC,MACZ,GAAIA,KAAK3V,OAAS,EAAG,MAAO,GAC5B,IAA4CC,EAAxCu2C,GAAKpmB,WAAWroB,GAAI0uC,GAAKrmB,WAAW9U,GAAOnY,EAAIwS,KAAK3V,OAAQ4mC,OAAS,GAAI8P,cAAgB,GAC7F,IAAKz2C,EAAI,EAAGA,EAAIkD,EAAGlD,IACjB2mC,OAAOviC,KAAK,EAAGmyC,GAAGtxC,KAAK7D,KAAMsU,KAAK1V,GAAIA,IAAKw2C,GAAGvxC,KAAK7D,KAAMsU,KAAK1V,GAAIA,GAAIA,IAGxE,IADA2mC,OAAOh9B,KAAKusC,mBACPl2C,EAAI,EAAGA,EAAIkD,EAAGlD,IAAKy2C,cAAcryC,KAAK,CAAEuiC,OAAO3mC,GAAG,IAAK2mC,OAAO3mC,GAAG,KACtE,IAAI02C,MAAQX,kBAAkBpP,QAASgQ,MAAQZ,kBAAkBU,eAC7DG,SAAWD,MAAM,KAAOD,MAAM,GAAIG,UAAYF,MAAMA,MAAM52C,OAAS,KAAO22C,MAAMA,MAAM32C,OAAS,GAAIwnC,QAAU,GACjH,IAAKvnC,EAAI02C,MAAM32C,OAAS,EAAGC,GAAK,IAAKA,EAAGunC,QAAQnjC,KAAKsR,KAAKixB,OAAO+P,MAAM12C,IAAI,KAC3E,IAAKA,GAAK42C,SAAU52C,EAAI22C,MAAM52C,OAAS82C,YAAa72C,EAAGunC,QAAQnjC,KAAKsR,KAAKixB,OAAOgQ,MAAM32C,IAAI,KAC1F,OAAOunC,QAQT,OANAyO,KAAKluC,EAAI,SAASoE,GAChB,OAAO5K,UAAUvB,QAAU+H,EAAIoE,EAAG8pC,MAAQluC,GAE5CkuC,KAAK36B,EAAI,SAASnP,GAChB,OAAO5K,UAAUvB,QAAUsb,EAAInP,EAAG8pC,MAAQ36B,GAErC26B,MAaTxwC,GAAG6wC,KAAK9O,QAAU,SAAS3F,aAEzB,OADA/wB,YAAY+wB,YAAakV,0BAClBlV,aAET,IAAIkV,yBAA2BtxC,GAAG6wC,KAAK9O,QAAQ7kC,UAAY,GA+C3D,SAASq0C,sBAAsB5tC,EAAGzB,EAAGC,GACnC,OAAQA,EAAE,GAAKD,EAAE,KAAOyB,EAAE,GAAKzB,EAAE,KAAOC,EAAE,GAAKD,EAAE,KAAOyB,EAAE,GAAKzB,EAAE,IAEnE,SAASsvC,yBAAyBnuC,EAAGgB,EAAGnC,EAAGC,GACzC,IAAIyY,GAAKvX,EAAE,GAAIouC,GAAKvvC,EAAE,GAAIwvC,IAAMrtC,EAAE,GAAKuW,GAAI+2B,IAAMxvC,EAAE,GAAKsvC,GAAI32B,GAAKzX,EAAE,GAAIuuC,GAAK1vC,EAAE,GAAI2vC,IAAMxtC,EAAE,GAAKyW,GAAIg3B,IAAM3vC,EAAE,GAAKyvC,GAAIG,IAAMJ,KAAO72B,GAAK82B,IAAME,KAAOl3B,GAAK62B,MAAQK,IAAMJ,IAAMC,IAAME,KAClL,MAAO,CAAEj3B,GAAKm3B,GAAKL,IAAK52B,GAAKi3B,GAAKF,KAEpC,SAASG,sBAAsB5V,aAC7B,IAAIl6B,EAAIk6B,YAAY,GAAIj6B,EAAIi6B,YAAYA,YAAY7hC,OAAS,GAC7D,QAAS2H,EAAE,GAAKC,EAAE,IAAMD,EAAE,GAAKC,EAAE,IAvDnCmvC,yBAAyBlU,KAAO,WAE9B,IADA,IAA6Bl7B,EAAzB1H,GAAK,EAAGkD,EAAI9B,KAAKrB,OAAW4H,EAAIvG,KAAK8B,EAAI,GAAI0/B,KAAO,IAC/C5iC,EAAIkD,GACXwE,EAAIC,EACJA,EAAIvG,KAAKpB,GACT4iC,MAAQl7B,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAEjC,MAAc,GAAPi7B,MAETkU,yBAAyBxR,SAAW,SAASz5B,GAC3C,IAA2CnE,EAAoBmB,EAA3D7I,GAAK,EAAGkD,EAAI9B,KAAKrB,OAAQ+H,EAAI,EAAGuT,EAAI,EAAM1T,EAAIvG,KAAK8B,EAAI,GAE3D,IADK5B,UAAUvB,SAAQ8L,GAAK,GAAK,EAAIzK,KAAKwhC,WACjC5iC,EAAIkD,GACXwE,EAAIC,EACJA,EAAIvG,KAAKpB,GACT6I,EAAInB,EAAE,GAAKC,EAAE,GAAKA,EAAE,GAAKD,EAAE,GAC3BI,IAAMJ,EAAE,GAAKC,EAAE,IAAMkB,EACrBwS,IAAM3T,EAAE,GAAKC,EAAE,IAAMkB,EAEvB,MAAO,CAAEf,EAAI+D,EAAGwP,EAAIxP,IAEtBirC,yBAAyBxQ,KAAO,SAAS7pB,SAEvC,IADA,IAAIg7B,MAAuGzuC,EAAGc,EAAoBnC,EAAGkB,EAAGgB,EAA7Hy4B,OAASkV,sBAAsB/6B,SAAUzc,GAAK,EAAGkD,EAAI9B,KAAKrB,OAASy3C,sBAAsBp2C,MAAasG,EAAItG,KAAK8B,EAAI,KACrHlD,EAAIkD,GAAG,CAMd,IALAu0C,MAAQh7B,QAAQvX,QAChBuX,QAAQ1c,OAAS,EACjB4H,EAAIvG,KAAKpB,GACT6I,EAAI4uC,OAAO3tC,EAAI2tC,MAAM13C,OAASuiC,QAAU,GACxCt5B,GAAK,IACIA,EAAIc,GAEPitC,sBADJltC,EAAI4tC,MAAMzuC,GACmBtB,EAAGC,IACzBovC,sBAAsBluC,EAAGnB,EAAGC,IAC/B8U,QAAQrY,KAAK4yC,yBAAyBnuC,EAAGgB,EAAGnC,EAAGC,IAEjD8U,QAAQrY,KAAKyF,IACJktC,sBAAsBluC,EAAGnB,EAAGC,IACrC8U,QAAQrY,KAAK4yC,yBAAyBnuC,EAAGgB,EAAGnC,EAAGC,IAEjDkB,EAAIgB,EAEFy4B,QAAQ7lB,QAAQrY,KAAKqY,QAAQ,IACjC/U,EAAIC,EAEN,OAAO8U,SAaT,IAAIi7B,qBAAsBC,qBAAsBC,uBAAuDC,2BAA4BC,uBAA3DC,yBAA2B,GAAwDC,0BAA4B,GACvL,SAASC,uBACPC,4BAA4B92C,MAC5BA,KAAK+2C,KAAO/2C,KAAKg3C,KAAOh3C,KAAKsxC,OAAS,KAExC,SAAS2F,2BAA2BD,MAClC,IAAIE,MAAQP,yBAAyBrP,OAAS,IAAIuP,qBAElD,OADAK,MAAMF,KAAOA,KACNE,MAET,SAASC,2BAA2BD,OAClCE,4BAA4BF,OAC5BV,uBAAuB5pC,OAAOsqC,OAC9BP,yBAAyB3zC,KAAKk0C,OAC9BJ,4BAA4BI,OAE9B,SAASG,2BAA2BH,OAClC,IAAI5F,OAAS4F,MAAM5F,OAAQ5qC,EAAI4qC,OAAO5qC,EAAGuT,EAAIq3B,OAAO1uB,GAAI00B,OAAS,CAC/D5wC,EAAGA,EACHuT,EAAGA,GACFs9B,SAAWL,MAAMM,EAAGl1C,KAAO40C,MAAMhlB,EAAGulB,aAAe,CAAEP,OACxDC,2BAA2BD,OAE3B,IADA,IAAIQ,KAAOH,SACJG,KAAKpG,QAAU/mC,IAAI7D,EAAIgxC,KAAKpG,OAAO5qC,GAAK,GAAK6D,IAAI0P,EAAIy9B,KAAKpG,OAAO1uB,IAAM,GAC5E20B,SAAWG,KAAKF,EAChBC,aAAaE,QAAQD,MACrBP,2BAA2BO,MAC3BA,KAAOH,SAETE,aAAaE,QAAQD,MACrBN,4BAA4BM,MAE5B,IADA,IAAIE,KAAOt1C,KACJs1C,KAAKtG,QAAU/mC,IAAI7D,EAAIkxC,KAAKtG,OAAO5qC,GAAK,GAAK6D,IAAI0P,EAAI29B,KAAKtG,OAAO1uB,IAAM,GAC5EtgB,KAAOs1C,KAAK1lB,EACZulB,aAAaz0C,KAAK40C,MAClBT,2BAA2BS,MAC3BA,KAAOt1C,KAETm1C,aAAaz0C,KAAK40C,MAClBR,4BAA4BQ,MAC5B,IAAiCC,KAA7BC,MAAQL,aAAa94C,OACzB,IAAKk5C,KAAO,EAAGA,KAAOC,QAASD,KAC7BD,KAAOH,aAAaI,MACpBH,KAAOD,aAAaI,KAAO,GAC3BE,0BAA0BH,KAAKb,KAAMW,KAAKV,KAAMY,KAAKZ,KAAMM,QAE7DI,KAAOD,aAAa,IACpBG,KAAOH,aAAaK,MAAQ,IACvBf,KAAOiB,0BAA0BN,KAAKV,KAAMY,KAAKZ,KAAM,KAAMM,QAClEW,4BAA4BP,MAC5BO,4BAA4BL,MAE9B,SAASM,wBAAwBlB,MAE/B,IADA,IAAoCU,KAAME,KAAMO,IAAKC,IAAjD1xC,EAAIswC,KAAKtwC,EAAG2xC,UAAYrB,KAAK/8B,EAAyBrV,KAAO4xC,uBAAuB1rC,EACjFlG,MAEL,IADAuzC,IAAMG,8BAA8B1zC,KAAMyzC,WAAa3xC,GAC7C,EAAG9B,KAAOA,KAAKo2B,MAAQ,CAE/B,MADAod,IAAM1xC,EAAI6xC,+BAA+B3zC,KAAMyzC,YACrC,GAMH,CACDF,KAAO,GACTT,KAAO9yC,KAAK4yC,EACZI,KAAOhzC,MACEwzC,KAAO,GAChBV,KAAO9yC,KACPgzC,KAAOhzC,KAAKstB,GAEZwlB,KAAOE,KAAOhzC,KAEhB,MAfA,IAAKA,KAAK4zC,EAAG,CACXd,KAAO9yC,KACP,MAEFA,KAAOA,KAAK4zC,EAelB,IAAIC,OAASxB,2BAA2BD,MAExC,GADAR,uBAAuB5gC,OAAO8hC,KAAMe,QAC/Bf,MAASE,KAAd,CACA,GAAIF,OAASE,KAOX,OANAR,4BAA4BM,MAC5BE,KAAOX,2BAA2BS,KAAKV,MACvCR,uBAAuB5gC,OAAO6iC,OAAQb,MACtCa,OAAO1B,KAAOa,KAAKb,KAAOiB,0BAA0BN,KAAKV,KAAMyB,OAAOzB,MACtEiB,4BAA4BP,WAC5BO,4BAA4BL,MAG9B,GAAKA,KAAL,CAIAR,4BAA4BM,MAC5BN,4BAA4BQ,MAC5B,IAAIc,MAAQhB,KAAKV,KAAMlN,GAAK4O,MAAMhyC,EAAGqjC,GAAK2O,MAAMz+B,EAAG0+B,GAAK3B,KAAKtwC,EAAIojC,GAAI8O,GAAK5B,KAAK/8B,EAAI8vB,GAAI8O,MAAQjB,KAAKZ,KAAMr0B,GAAKk2B,MAAMnyC,EAAIojC,GAAIlnB,GAAKi2B,MAAM5+B,EAAI8vB,GAAIthC,EAAI,GAAKkwC,GAAK/1B,GAAKg2B,GAAKj2B,IAAKm2B,GAAKH,GAAKA,GAAKC,GAAKA,GAAIG,GAAKp2B,GAAKA,GAAKC,GAAKA,GAAI00B,OAAS,CACpO5wC,GAAIkc,GAAKk2B,GAAKF,GAAKG,IAAMtwC,EAAIqhC,GAC7B7vB,GAAI0+B,GAAKI,GAAKp2B,GAAKm2B,IAAMrwC,EAAIshC,IAE/BgO,0BAA0BH,KAAKb,KAAM2B,MAAOG,MAAOvB,QACnDmB,OAAO1B,KAAOiB,0BAA0BU,MAAO1B,KAAM,KAAMM,QAC3DM,KAAKb,KAAOiB,0BAA0BhB,KAAM6B,MAAO,KAAMvB,QACzDW,4BAA4BP,MAC5BO,4BAA4BL,WAb1Ba,OAAO1B,KAAOiB,0BAA0BN,KAAKV,KAAMyB,OAAOzB,OAe9D,SAASsB,8BAA8B1R,IAAKyR,WAC1C,IAAIrB,KAAOpQ,IAAIoQ,KAAMgC,MAAQhC,KAAKtwC,EAAGuyC,MAAQjC,KAAK/8B,EAAGi/B,KAAOD,MAAQZ,UACpE,IAAKa,KAAM,OAAOF,MAClB,IAAItB,KAAO9Q,IAAI4Q,EACf,IAAKE,KAAM,OAAQvsC,IAEnB,IAAIguC,OADJnC,KAAOU,KAAKV,MACKtwC,EAAG0yC,MAAQpC,KAAK/8B,EAAGo/B,MAAQD,MAAQf,UACpD,IAAKgB,MAAO,OAAOF,MACnB,IAAIG,GAAKH,MAAQH,MAAOO,KAAO,EAAIL,KAAO,EAAIG,MAAO9yC,EAAI+yC,GAAKD,MAC9D,OAAIE,OAAehzC,EAAI2B,KAAKU,KAAKrC,EAAIA,EAAI,EAAIgzC,MAAQD,GAAKA,KAAO,EAAID,OAASD,MAAQC,MAAQ,EAAIJ,MAAQC,KAAO,KAAOK,KAAOP,OACvHA,MAAQG,OAAS,EAE3B,SAASZ,+BAA+B3R,IAAKyR,WAC3C,IAAIT,KAAOhR,IAAI1U,EACf,GAAI0lB,KAAM,OAAOU,8BAA8BV,KAAMS,WACrD,IAAIrB,KAAOpQ,IAAIoQ,KACf,OAAOA,KAAK/8B,IAAMo+B,UAAYrB,KAAKtwC,EAAIyE,IAEzC,SAASquC,oBAAoBxC,MAC3Bh3C,KAAKg3C,KAAOA,KACZh3C,KAAKy5C,MAAQ,GAyCf,SAASC,6BAA6BpzC,EAAGC,GACvC,OAAOA,EAAEu9B,MAAQx9B,EAAEw9B,MAErB,SAAS6V,wBACP7C,4BAA4B92C,MAC5BA,KAAK0G,EAAI1G,KAAKia,EAAIja,KAAK4mC,IAAM5mC,KAAKg3C,KAAOh3C,KAAK4iB,GAAK,KAErD,SAASq1B,4BAA4BrR,KACnC,IAAI8Q,KAAO9Q,IAAI4Q,EAAGI,KAAOhR,IAAI1U,EAC7B,GAAKwlB,MAASE,KAAd,CACA,IAAIc,MAAQhB,KAAKV,KAAM4C,MAAQhT,IAAIoQ,KAAM6B,MAAQjB,KAAKZ,KACtD,GAAI0B,QAAUG,MAAd,CACA,IAAIF,GAAKiB,MAAMlzC,EAAGkyC,GAAKgB,MAAM3/B,EAAG6vB,GAAK4O,MAAMhyC,EAAIiyC,GAAI5O,GAAK2O,MAAMz+B,EAAI2+B,GAAIj2B,GAAKk2B,MAAMnyC,EAAIiyC,GACjFlwC,EAAI,GAAKqhC,IAD4ElnB,GAAKi2B,MAAM5+B,EAAI2+B,IACjF7O,GAAKpnB,IAC5B,KAAIla,IAAM,IAAV,CACA,IAAIoxC,GAAK/P,GAAKA,GAAKC,GAAKA,GAAIgP,GAAKp2B,GAAKA,GAAKC,GAAKA,GAAIlc,GAAKkc,GAAKi3B,GAAK9P,GAAKgP,IAAMtwC,EAAGwR,GAAK6vB,GAAKiP,GAAKp2B,GAAKk3B,IAAMpxC,EAAGma,GAAK3I,EAAI2+B,GACnHtH,OAASsF,0BAA0BtP,OAAS,IAAIqS,sBACpDrI,OAAO1K,IAAMA,IACb0K,OAAO0F,KAAO4C,MACdtI,OAAO5qC,EAAIA,EAAIiyC,GACfrH,OAAOr3B,EAAI2I,GAAK1a,KAAKU,KAAKlC,EAAIA,EAAIuT,EAAIA,GACtCq3B,OAAO1uB,GAAKA,GACZgkB,IAAI0K,OAASA,OAEb,IADA,IAAIz7B,OAAS,KAAMjR,KAAO8xC,uBAAuB5rC,EAC1ClG,MACL,GAAI0sC,OAAOr3B,EAAIrV,KAAKqV,GAAKq3B,OAAOr3B,IAAMrV,KAAKqV,GAAKq3B,OAAO5qC,GAAK9B,KAAK8B,EAAG,CAClE,IAAI9B,KAAKo2B,EAAuB,CAC9BnlB,OAASjR,KAAK4yC,EACd,MAFU5yC,KAAOA,KAAKo2B,MAInB,CACL,IAAIp2B,KAAK4zC,EAAuB,CAC9B3iC,OAASjR,KACT,MAFUA,KAAOA,KAAK4zC,EAM5B9B,uBAAuB9gC,OAAOC,OAAQy7B,QACjCz7B,SAAQ4gC,2BAA6BnF,WAE5C,SAAS8F,4BAA4BxQ,KACnC,IAAI0K,OAAS1K,IAAI0K,OACbA,SACGA,OAAOkG,IAAGf,2BAA6BnF,OAAOpf,GACnDwkB,uBAAuB9pC,OAAO0kC,QAC9BsF,0BAA0B5zC,KAAKsuC,QAC/BwF,4BAA4BxF,QAC5B1K,IAAI0K,OAAS,MAajB,SAASwI,2BAA2B/C,KAAMvvC,QACxC,IAAIuyC,GAAKhD,KAAKxwC,EACd,GAAIwzC,GAAI,OAAO,EACf,IAA6NC,GAAIC,GAA7NC,GAAKnD,KAAKzwC,EAAGyY,GAAKvX,OAAO,GAAG,GAAIwX,GAAKxX,OAAO,GAAG,GAAIyX,GAAKzX,OAAO,GAAG,GAAI0X,GAAK1X,OAAO,GAAG,GAAIkxC,MAAQ3B,KAAK3oC,EAAGyqC,MAAQ9B,KAAK/yB,EAAGm2B,GAAKzB,MAAMhyC,EAAG0zC,GAAK1B,MAAMz+B,EAAGogC,GAAKxB,MAAMnyC,EAAG4zC,GAAKzB,MAAM5+B,EAAGk7B,IAAMgF,GAAKE,IAAM,EAAGjF,IAAMgF,GAAKE,IAAM,EAC1N,GAAIA,KAAOF,GAAI,CACb,GAAIjF,GAAKp2B,IAAMo2B,IAAMn2B,GAAI,OACzB,GAAIm7B,GAAKE,GAAI,CACX,GAAKH,IAGG,GAAIA,GAAGjgC,GAAKiF,GAAI,YAHfg7B,GAAK,CACZxzC,EAAGyuC,GACHl7B,EAAGgF,IAEL86B,GAAK,CACHrzC,EAAGyuC,GACHl7B,EAAGiF,QAEA,CACL,GAAKg7B,IAGG,GAAIA,GAAGjgC,EAAIgF,GAAI,YAHdi7B,GAAK,CACZxzC,EAAGyuC,GACHl7B,EAAGiF,IAEL66B,GAAK,CACHrzC,EAAGyuC,GACHl7B,EAAGgF,UAMP,GADAg7B,GAAK7E,IADL4E,IAAMG,GAAKE,KAAOC,GAAKF,KACRjF,GACX6E,IAAM,GAAKA,GAAK,EAClB,GAAIG,GAAKE,GAAI,CACX,GAAKH,IAGG,GAAIA,GAAGjgC,GAAKiF,GAAI,YAHfg7B,GAAK,CACZxzC,GAAIuY,GAAKg7B,IAAMD,GACf//B,EAAGgF,IAEL86B,GAAK,CACHrzC,GAAIwY,GAAK+6B,IAAMD,GACf//B,EAAGiF,QAEA,CACL,GAAKg7B,IAGG,GAAIA,GAAGjgC,EAAIgF,GAAI,YAHdi7B,GAAK,CACZxzC,GAAIwY,GAAK+6B,IAAMD,GACf//B,EAAGiF,IAEL66B,GAAK,CACHrzC,GAAIuY,GAAKg7B,IAAMD,GACf//B,EAAGgF,SAIP,GAAIm7B,GAAKE,GAAI,CACX,GAAKJ,IAGG,GAAIA,GAAGxzC,GAAKsY,GAAI,YAHfk7B,GAAK,CACZxzC,EAAGqY,GACH9E,EAAG+/B,GAAKj7B,GAAKk7B,IAEfF,GAAK,CACHrzC,EAAGsY,GACH/E,EAAG+/B,GAAKh7B,GAAKi7B,QAEV,CACL,GAAKC,IAGG,GAAIA,GAAGxzC,EAAIqY,GAAI,YAHdm7B,GAAK,CACZxzC,EAAGsY,GACH/E,EAAG+/B,GAAKh7B,GAAKi7B,IAEfF,GAAK,CACHrzC,EAAGqY,GACH9E,EAAG+/B,GAAKj7B,GAAKk7B,IAOrB,OAFAlD,KAAKzwC,EAAI4zC,GACTnD,KAAKxwC,EAAIwzC,IACF,EAET,SAASQ,oBAAoB7B,MAAOG,OAClC74C,KAAKoO,EAAIsqC,MACT14C,KAAKgkB,EAAI60B,MACT74C,KAAKsG,EAAItG,KAAKuG,EAAI,KAEpB,SAASyxC,0BAA0BU,MAAOG,MAAOqB,GAAIH,IACnD,IAAIhD,KAAO,IAAIwD,oBAAoB7B,MAAOG,OAM1C,OALAvC,qBAAqBtzC,KAAK+zC,MACtBmD,IAAInC,0BAA0BhB,KAAM2B,MAAOG,MAAOqB,IAClDH,IAAIhC,0BAA0BhB,KAAM8B,MAAOH,MAAOqB,IACtDxD,qBAAqBmC,MAAM95C,GAAG66C,MAAMz2C,KAAK,IAAIw3C,wBAAwBzD,KAAM2B,MAAOG,QAClFtC,qBAAqBsC,MAAMj6C,GAAG66C,MAAMz2C,KAAK,IAAIw3C,wBAAwBzD,KAAM8B,MAAOH,QAC3E3B,KAET,SAAS0D,gCAAgC/B,MAAOwB,GAAIH,IAClD,IAAIhD,KAAO,IAAIwD,oBAAoB7B,MAAO,MAI1C,OAHA3B,KAAKzwC,EAAI4zC,GACTnD,KAAKxwC,EAAIwzC,GACTzD,qBAAqBtzC,KAAK+zC,MACnBA,KAET,SAASgB,0BAA0BhB,KAAM2B,MAAOG,MAAOvB,QAChDP,KAAKzwC,GAAMywC,KAAKxwC,EAIVwwC,KAAK3oC,IAAMyqC,MACpB9B,KAAKxwC,EAAI+wC,OAETP,KAAKzwC,EAAIgxC,QANTP,KAAKzwC,EAAIgxC,OACTP,KAAK3oC,EAAIsqC,MACT3B,KAAK/yB,EAAI60B,OAOb,SAAS2B,wBAAwBzD,KAAM2B,MAAOG,OAC5C,IAAIqB,GAAKnD,KAAKzwC,EAAGyzC,GAAKhD,KAAKxwC,EAC3BvG,KAAK+2C,KAAOA,KACZ/2C,KAAKg3C,KAAO0B,MACZ14C,KAAK8jC,MAAQ+U,MAAQ3wC,KAAK2c,MAAMg0B,MAAM5+B,EAAIy+B,MAAMz+B,EAAG4+B,MAAMnyC,EAAIgyC,MAAMhyC,GAAKqwC,KAAK3oC,IAAMsqC,MAAQxwC,KAAK2c,MAAMk1B,GAAGrzC,EAAIwzC,GAAGxzC,EAAGwzC,GAAGjgC,EAAI8/B,GAAG9/B,GAAK/R,KAAK2c,MAAMq1B,GAAGxzC,EAAIqzC,GAAGrzC,EAAGqzC,GAAG9/B,EAAIigC,GAAGjgC,GAUtK,SAASygC,8BACP16C,KAAK8K,EAAI,KAEX,SAASgsC,4BAA4BlyC,MACnCA,KAAKy2B,EAAIz2B,KAAK2mC,EAAI3mC,KAAKo2B,EAAIp2B,KAAK4zC,EAAI5zC,KAAK4yC,EAAI5yC,KAAKstB,EAAI,KAkKxD,SAASyoB,kCAAkCC,KAAMh2C,MAC/C,IAAImD,EAAInD,KAAM+c,EAAI/c,KAAK4zC,EAAGrkC,OAASpM,EAAEszB,EACjClnB,OACEA,OAAO6mB,IAAMjzB,EAAGoM,OAAO6mB,EAAIrZ,EAAQxN,OAAOqkC,EAAI72B,EAElDi5B,KAAK9vC,EAAI6W,EAEXA,EAAE0Z,EAAIlnB,OACNpM,EAAEszB,EAAI1Z,EACN5Z,EAAEywC,EAAI72B,EAAEqZ,EACJjzB,EAAEywC,IAAGzwC,EAAEywC,EAAEnd,EAAItzB,GACjB4Z,EAAEqZ,EAAIjzB,EAER,SAAS8yC,mCAAmCD,KAAMh2C,MAChD,IAAImD,EAAInD,KAAM+c,EAAI/c,KAAKo2B,EAAG7mB,OAASpM,EAAEszB,EACjClnB,OACEA,OAAO6mB,IAAMjzB,EAAGoM,OAAO6mB,EAAIrZ,EAAQxN,OAAOqkC,EAAI72B,EAElDi5B,KAAK9vC,EAAI6W,EAEXA,EAAE0Z,EAAIlnB,OACNpM,EAAEszB,EAAI1Z,EACN5Z,EAAEizB,EAAIrZ,EAAE62B,EACJzwC,EAAEizB,IAAGjzB,EAAEizB,EAAEK,EAAItzB,GACjB4Z,EAAE62B,EAAIzwC,EAER,SAAS+yC,6BAA6Bl2C,MACpC,KAAOA,KAAKo2B,GAAGp2B,KAAOA,KAAKo2B,EAC3B,OAAOp2B,KAET,SAASm2C,gBAAgBC,MAAOC,MAC9B,IAAyDl8B,GAAIE,GAAIqyB,OAA7D0F,KAAOgE,MAAMzyC,KAAK2yC,4BAA4B5T,MAKlD,IAJAgP,qBAAuB,GACvBC,qBAAuB,IAAIz3C,MAAMk8C,MAAMr8C,QACvC63C,uBAAyB,IAAIkE,4BAC7BhE,uBAAyB,IAAIgE,8BAG3B,GADApJ,OAASmF,2BACLO,QAAU1F,QAAU0F,KAAK/8B,EAAIq3B,OAAOr3B,GAAK+8B,KAAK/8B,IAAMq3B,OAAOr3B,GAAK+8B,KAAKtwC,EAAI4qC,OAAO5qC,GAC9EswC,KAAKtwC,IAAMqY,IAAMi4B,KAAK/8B,IAAMgF,KAC9Bs3B,qBAAqBS,KAAKp4C,GAAK,IAAI46C,oBAAoBxC,MACvDkB,wBAAwBlB,MACxBj4B,GAAKi4B,KAAKtwC,EAAGuY,GAAK+3B,KAAK/8B,GAEzB+8B,KAAOgE,MAAM1T,UACR,KAAIgK,OAGT,MAFA+F,2BAA2B/F,OAAO1K,KAKlCqU,OA3VN,SAASE,yBAAyB3zC,QAEhC,IADA,IAAqIzF,EAAjI03C,MAAQnD,qBAAsBpR,KAAO2E,iBAAiBriC,OAAO,GAAG,GAAIA,OAAO,GAAG,GAAIA,OAAO,GAAG,GAAIA,OAAO,GAAG,IAAK5I,EAAI66C,MAAM96C,OACtHC,OAEAk7C,2BADL/3C,EAAI03C,MAAM76C,GACyB4I,UAAY09B,KAAKnjC,IAAMwI,IAAIxI,EAAEuE,EAAEI,EAAI3E,EAAEwE,EAAEG,GAAK,GAAK6D,IAAIxI,EAAEuE,EAAE2T,EAAIlY,EAAEwE,EAAE0T,GAAK,KACvGlY,EAAEuE,EAAIvE,EAAEwE,EAAI,KACZkzC,MAAM2B,OAAOx8C,EAAG,IAqVVu8C,CAAyBF,MA3arC,SAASI,0BAA0B7zC,QAEjC,IADA,IAAgF4nC,GAAIC,GAAIwG,GAAIG,GAAwDsF,KAAMC,UAAWC,UAAWC,WAAYxwC,MAAOsQ,IAA/LwD,GAAKvX,OAAO,GAAG,GAAIwX,GAAKxX,OAAO,GAAG,GAAIyX,GAAKzX,OAAO,GAAG,GAAI0X,GAAK1X,OAAO,GAAG,GAAoBk0C,MAAQnF,qBAAsBoF,MAAQD,MAAM/8C,OACrIg9C,SAEL,IADAL,KAAOI,MAAMC,SACCL,KAAKM,UAInB,IAFAH,YADAD,UAAYF,KAAK7B,OACM96C,OACvB48C,UAAY,EACLA,UAAYE,YACiB5F,IAAlCt6B,IAAMigC,UAAUD,WAAWhgC,OAAgB7U,EAAGsvC,GAAKz6B,IAAItB,EACFm1B,IAArDnkC,MAAQuwC,YAAYD,UAAYE,YAAYxwC,SAAoBvE,EAAG2oC,GAAKpkC,MAAMgP,GAC1E1P,IAAIsrC,GAAKzG,IAAM,GAAK7kC,IAAIyrC,GAAK3G,IAAM,KACrCmM,UAAUJ,OAAOG,UAAW,EAAG,IAAIf,wBAAwBC,gCAAgCa,KAAKtE,KAAMz7B,IAAKhR,IAAIsrC,GAAK92B,IAAM,GAAKG,GAAK82B,GAAK,EAAI,CAC3ItvC,EAAGqY,GACH9E,EAAG1P,IAAI6kC,GAAKrwB,IAAM,EAAIswB,GAAKnwB,IACzB3U,IAAIyrC,GAAK92B,IAAM,GAAKF,GAAK62B,GAAK,EAAI,CACpCnvC,EAAG6D,IAAI8kC,GAAKnwB,IAAM,EAAIkwB,GAAKpwB,GAC3B/E,EAAGiF,IACD3U,IAAIsrC,GAAK72B,IAAM,GAAKg3B,GAAK/2B,GAAK,EAAI,CACpCvY,EAAGsY,GACH/E,EAAG1P,IAAI6kC,GAAKpwB,IAAM,EAAIqwB,GAAKpwB,IACzB1U,IAAIyrC,GAAK/2B,IAAM,GAAK42B,GAAK92B,GAAK,EAAI,CACpCrY,EAAG6D,IAAI8kC,GAAKpwB,IAAM,EAAImwB,GAAKrwB,GAC3B9E,EAAGgF,IACD,MAAOq8B,KAAKtE,KAAM,SACpByE,YAkZkCJ,CAA0BJ,OACpE,IAAIY,QAAU,CACZH,MAAOnF,qBACPkD,MAAOnD,sBAGT,OADAE,uBAAyBE,uBAAyBJ,qBAAuBC,qBAAuB,KACzFsF,QAET,SAASX,2BAA2B50C,EAAGC,GACrC,OAAOA,EAAE0T,EAAI3T,EAAE2T,GAAK1T,EAAEG,EAAIJ,EAAEI,EA7b9B8yC,oBAAoBl4C,UAAUs6C,QAAU,WAEtC,IADA,IAA0D7E,KAAtDyE,UAAYx7C,KAAKy5C,MAAO8B,UAAYC,UAAU78C,OAC3C48C,cACLxE,KAAOyE,UAAUD,WAAWxE,MAClBxwC,GAAMwwC,KAAKzwC,GAAGk1C,UAAUJ,OAAOG,UAAW,GAGtD,OADAC,UAAUjzC,KAAKmxC,8BACR8B,UAAU78C,QA4MnB67C,wBAAwBl5C,UAAY,CAClC2J,MAAO,WACL,OAAOjL,KAAK+2C,KAAK3oC,IAAMpO,KAAKg3C,KAAOh3C,KAAK+2C,KAAKzwC,EAAItG,KAAK+2C,KAAKxwC,GAE7DgV,IAAK,WACH,OAAOvb,KAAK+2C,KAAK3oC,IAAMpO,KAAKg3C,KAAOh3C,KAAK+2C,KAAKxwC,EAAIvG,KAAK+2C,KAAKzwC,IAS/Do0C,4BAA4Bp5C,UAAY,CACtCsU,OAAQ,SAASogB,MAAOpxB,MACtB,IAAIuP,OAAQ2nC,QAASC,MACrB,GAAI/lB,MAAO,CAKT,GAJApxB,KAAK4yC,EAAIxhB,MACTpxB,KAAKstB,EAAI8D,MAAM9D,EACX8D,MAAM9D,IAAG8D,MAAM9D,EAAEslB,EAAI5yC,MACzBoxB,MAAM9D,EAAIttB,KACNoxB,MAAMwiB,EAAG,CAEX,IADAxiB,MAAQA,MAAMwiB,EACPxiB,MAAMgF,GAAGhF,MAAQA,MAAMgF,EAC9BhF,MAAMgF,EAAIp2B,UAEVoxB,MAAMwiB,EAAI5zC,KAEZuP,OAAS6hB,WACAh2B,KAAK8K,GACdkrB,MAAQ8kB,6BAA6B96C,KAAK8K,GAC1ClG,KAAK4yC,EAAI,KACT5yC,KAAKstB,EAAI8D,MACTA,MAAMwhB,EAAIxhB,MAAMgF,EAAIp2B,KACpBuP,OAAS6hB,QAETpxB,KAAK4yC,EAAI5yC,KAAKstB,EAAI,KAClBlyB,KAAK8K,EAAIlG,KACTuP,OAAS,MAMX,IAJAvP,KAAKo2B,EAAIp2B,KAAK4zC,EAAI,KAClB5zC,KAAKy2B,EAAIlnB,OACTvP,KAAK2mC,GAAI,EACTvV,MAAQpxB,KACDuP,QAAUA,OAAOo3B,GAElBp3B,UADJ2nC,QAAU3nC,OAAOknB,GACML,GACrB+gB,MAAQD,QAAQtD,IACHuD,MAAMxQ,GACjBp3B,OAAOo3B,EAAIwQ,MAAMxQ,GAAI,EACrBuQ,QAAQvQ,GAAI,EACZvV,MAAQ8lB,UAEJ9lB,QAAU7hB,OAAOqkC,IACnBmC,kCAAkC36C,KAAMmU,QAExCA,QADA6hB,MAAQ7hB,QACOknB,GAEjBlnB,OAAOo3B,GAAI,EACXuQ,QAAQvQ,GAAI,EACZsP,mCAAmC76C,KAAM87C,WAG3CC,MAAQD,QAAQ9gB,IACH+gB,MAAMxQ,GACjBp3B,OAAOo3B,EAAIwQ,MAAMxQ,GAAI,EACrBuQ,QAAQvQ,GAAI,EACZvV,MAAQ8lB,UAEJ9lB,QAAU7hB,OAAO6mB,IACnB6f,mCAAmC76C,KAAMmU,QAEzCA,QADA6hB,MAAQ7hB,QACOknB,GAEjBlnB,OAAOo3B,GAAI,EACXuQ,QAAQvQ,GAAI,EACZoP,kCAAkC36C,KAAM87C,UAG5C3nC,OAAS6hB,MAAMqF,EAEjBr7B,KAAK8K,EAAEygC,GAAI,GAEb3+B,OAAQ,SAAShI,MACXA,KAAKstB,IAAGttB,KAAKstB,EAAEslB,EAAI5yC,KAAK4yC,GACxB5yC,KAAK4yC,IAAG5yC,KAAK4yC,EAAEtlB,EAAIttB,KAAKstB,GAC5BttB,KAAKstB,EAAIttB,KAAK4yC,EAAI,KAClB,IAAqBwE,QAAwC15C,KAAM6qB,IAA/DhZ,OAASvP,KAAKy2B,EAAYt0B,KAAOnC,KAAKo2B,EAAG7zB,MAAQvC,KAAK4zC,EA6B1D,GA5B4Dl2C,KAAvDyE,KAA8BI,MAAgC2zC,6BAA6B3zC,OAA/CJ,KAA/BI,MACdgN,OACEA,OAAO6mB,IAAMp2B,KAAMuP,OAAO6mB,EAAI14B,KAAW6R,OAAOqkC,EAAIl2C,KAExDtC,KAAK8K,EAAIxI,KAEPyE,MAAQI,OACVgmB,IAAM7qB,KAAKipC,EACXjpC,KAAKipC,EAAI3mC,KAAK2mC,EACdjpC,KAAK04B,EAAIj0B,KACTA,KAAKs0B,EAAI/4B,KACLA,OAAS6E,OACXgN,OAAS7R,KAAK+4B,EACd/4B,KAAK+4B,EAAIz2B,KAAKy2B,EACdz2B,KAAOtC,KAAKk2C,EACZrkC,OAAO6mB,EAAIp2B,KACXtC,KAAKk2C,EAAIrxC,MACTA,MAAMk0B,EAAI/4B,OAEVA,KAAK+4B,EAAIlnB,OACTA,OAAS7R,KACTsC,KAAOtC,KAAKk2C,KAGdrrB,IAAMvoB,KAAK2mC,EACX3mC,KAAOtC,MAELsC,OAAMA,KAAKy2B,EAAIlnB,SACfgZ,IACJ,GAAIvoB,MAAQA,KAAK2mC,EACf3mC,KAAK2mC,GAAI,MADX,CAIA,EAAG,CACD,GAAI3mC,OAAS5E,KAAK8K,EAAG,MACrB,GAAIlG,OAASuP,OAAO6mB,GAQlB,IAPAghB,QAAU7nC,OAAOqkC,GACLjN,IACVyQ,QAAQzQ,GAAI,EACZp3B,OAAOo3B,GAAI,EACXoP,kCAAkC36C,KAAMmU,QACxC6nC,QAAU7nC,OAAOqkC,GAEfwD,QAAQhhB,GAAKghB,QAAQhhB,EAAEuQ,GAAKyQ,QAAQxD,GAAKwD,QAAQxD,EAAEjN,EAAG,CACnDyQ,QAAQxD,GAAMwD,QAAQxD,EAAEjN,IAC3ByQ,QAAQhhB,EAAEuQ,GAAI,EACdyQ,QAAQzQ,GAAI,EACZsP,mCAAmC76C,KAAMg8C,SACzCA,QAAU7nC,OAAOqkC,GAEnBwD,QAAQzQ,EAAIp3B,OAAOo3B,EACnBp3B,OAAOo3B,EAAIyQ,QAAQxD,EAAEjN,GAAI,EACzBoP,kCAAkC36C,KAAMmU,QACxCvP,KAAO5E,KAAK8K,EACZ,YAUF,IAPAkxC,QAAU7nC,OAAO6mB,GACLuQ,IACVyQ,QAAQzQ,GAAI,EACZp3B,OAAOo3B,GAAI,EACXsP,mCAAmC76C,KAAMmU,QACzC6nC,QAAU7nC,OAAO6mB,GAEfghB,QAAQhhB,GAAKghB,QAAQhhB,EAAEuQ,GAAKyQ,QAAQxD,GAAKwD,QAAQxD,EAAEjN,EAAG,CACnDyQ,QAAQhhB,GAAMghB,QAAQhhB,EAAEuQ,IAC3ByQ,QAAQxD,EAAEjN,GAAI,EACdyQ,QAAQzQ,GAAI,EACZoP,kCAAkC36C,KAAMg8C,SACxCA,QAAU7nC,OAAO6mB,GAEnBghB,QAAQzQ,EAAIp3B,OAAOo3B,EACnBp3B,OAAOo3B,EAAIyQ,QAAQhhB,EAAEuQ,GAAI,EACzBsP,mCAAmC76C,KAAMmU,QACzCvP,KAAO5E,KAAK8K,EACZ,MAGJkxC,QAAQzQ,GAAI,EACZ3mC,KAAOuP,OACPA,OAASA,OAAOknB,SACRz2B,KAAK2mC,GACX3mC,OAAMA,KAAK2mC,GAAI,MAiEvBnnC,GAAG6wC,KAAKgH,QAAU,SAAS1W,QACzB,IAAI7+B,EAAI+tC,eAAgBx6B,EAAIy6B,eAAgBS,GAAKzuC,EAAG0uC,GAAKn7B,EAAGwxB,WAAayQ,0BACzE,GAAI3W,OAAQ,OAAO0W,QAAQ1W,QAC3B,SAAS0W,QAAQ3nC,MACf,IAAI6nC,SAAW,IAAIr9C,MAAMwV,KAAK3V,QAASogB,GAAK0sB,WAAW,GAAG,GAAIxsB,GAAKwsB,WAAW,GAAG,GAAIzsB,GAAKysB,WAAW,GAAG,GAAIvsB,GAAKusB,WAAW,GAAG,GAQ/H,OAPAsP,gBAAgBC,MAAM1mC,MAAOm3B,YAAYiQ,MAAMpwC,SAAQ,SAASgwC,KAAM18C,GACpE,IAAI66C,MAAQ6B,KAAK7B,MAAOzC,KAAOsE,KAAKtE,MAAgBmF,SAASv9C,GAAK66C,MAAM96C,OAAS86C,MAAMvvC,KAAI,SAASnI,GAClG,IAAIF,EAAIE,EAAEkJ,QACV,MAAO,CAAEpJ,EAAE6E,EAAG7E,EAAEoY,MACb+8B,KAAKtwC,GAAKqY,IAAMi4B,KAAKtwC,GAAKsY,IAAMg4B,KAAK/8B,GAAKgF,IAAM+3B,KAAK/8B,GAAKiF,GAAK,CAAE,CAAEH,GAAIG,IAAM,CAAEF,GAAIE,IAAM,CAAEF,GAAIC,IAAM,CAAEF,GAAIE,KAAS,IACjH5F,MAAQ/E,KAAK1V,MAEhBu9C,SAET,SAASnB,MAAM1mC,MACb,OAAOA,KAAKpK,KAAI,SAASzB,EAAG7J,GAC1B,MAAO,CACL8H,EAAGwB,KAAKwb,MAAMyxB,GAAG1sC,EAAG7J,GAAK,GAAK,EAC9Bqb,EAAG/R,KAAKwb,MAAM0xB,GAAG3sC,EAAG7J,GAAK,GAAK,EAC9BA,EAAGA,MA6CT,OAzCAq9C,QAAQG,MAAQ,SAAS9nC,MACvB,OAAOymC,gBAAgBC,MAAM1mC,OAAOmlC,MAAM7iC,QAAO,SAASmgC,MACxD,OAAOA,KAAK3oC,GAAK2oC,KAAK/yB,KACrB9Z,KAAI,SAAS6sC,MACd,MAAO,CACL5qC,OAAQmI,KAAKyiC,KAAK3oC,EAAExP,GACpB+B,OAAQ2T,KAAKyiC,KAAK/yB,EAAEplB,QAI1Bq9C,QAAQI,UAAY,SAAS/nC,MAC3B,IAAI+nC,UAAY,GAahB,OAZAtB,gBAAgBC,MAAM1mC,OAAOonC,MAAMpwC,SAAQ,SAASgwC,KAAM18C,GAExD,IADA,IAA2G09C,GA+B5Eh2C,EAAGC,EAAGkB,EA/BjCuvC,KAAOsE,KAAKtE,KAAMyC,MAAQ6B,KAAK7B,MAAMlxC,KAAKmxC,8BAA+B9xC,GAAK,EAAGc,EAAI+wC,MAAM96C,OAAgBuQ,GAAKuqC,MAAM/wC,EAAI,GAAGquC,KAAMwF,GAAKrtC,GAAGd,IAAM4oC,KAAO9nC,GAAG8U,EAAI9U,GAAGd,IAC7JxG,EAAIc,GACNwG,GACLotC,GAAKC,GAELA,IADArtC,GAAKuqC,MAAM7xC,GAAGmvC,MACN3oC,IAAM4oC,KAAO9nC,GAAG8U,EAAI9U,GAAGd,EAC3BxP,EAAI09C,GAAG19C,GAAKA,EAAI29C,GAAG39C,IAyBS2H,EAzB8B+1C,GAyB3B70C,EAzB+B80C,KAyBrCj2C,EAzB2B0wC,MA0BpDtwC,EAAIe,EAAEf,IAAMH,EAAE0T,EAAI3T,EAAE2T,IAAM3T,EAAEI,EAAIH,EAAEG,IAAMe,EAAEwS,EAAI3T,EAAE2T,GA1BoB,IACtEoiC,UAAUr5C,KAAK,CAAEsR,KAAK1V,GAAI0V,KAAKgoC,GAAG19C,GAAI0V,KAAKioC,GAAG39C,QAI7Cy9C,WAETJ,QAAQv1C,EAAI,SAASoE,GACnB,OAAO5K,UAAUvB,QAAUw2C,GAAKpmB,WAAWroB,EAAIoE,GAAImxC,SAAWv1C,GAEhEu1C,QAAQhiC,EAAI,SAASnP,GACnB,OAAO5K,UAAUvB,QAAUy2C,GAAKrmB,WAAW9U,EAAInP,GAAImxC,SAAWhiC,GAEhEgiC,QAAQxQ,WAAa,SAAS3gC,GAC5B,OAAK5K,UAAUvB,QACf8sC,WAAkB,MAAL3gC,EAAYoxC,0BAA4BpxC,EAC9CmxC,SAFuBxQ,aAAeyQ,0BAA4B,KAAOzQ,YAIlFwQ,QAAQnwC,KAAO,SAAShB,GACtB,OAAK5K,UAAUvB,OACRs9C,QAAQxQ,WAAW3gC,GAAK,CAAE,CAAE,EAAG,GAAKA,IADb2gC,aAAeyQ,0BAA4B,KAAOzQ,YAAcA,WAAW,IAGpGwQ,SAET,IAAIC,0BAA4B,CAAE,EAAG,KAAM,KAAO,CAAE,IAAK,MAkHzD,SAASM,wBAAwB/zC,GAC/B,OAAOA,EAAE/B,EAEX,SAAS+1C,wBAAwBh0C,GAC/B,OAAOA,EAAEwR,EAWX,SAASyiC,sBAAsBz6C,EAAG2C,KAAMoa,GAAIE,GAAIkwB,GAAIC,IAClD,IAAKptC,EAAE2C,KAAMoa,GAAIE,GAAIkwB,GAAIC,IAAK,CAC5B,IAAIsN,GAAiB,IAAX39B,GAAKowB,IAAUwN,GAAiB,IAAX19B,GAAKmwB,IAAUwN,SAAWj4C,KAAKkT,MAC1D+kC,SAAS,IAAIH,sBAAsBz6C,EAAG46C,SAAS,GAAI79B,GAAIE,GAAIy9B,GAAIC,IAC/DC,SAAS,IAAIH,sBAAsBz6C,EAAG46C,SAAS,GAAIF,GAAIz9B,GAAIkwB,GAAIwN,IAC/DC,SAAS,IAAIH,sBAAsBz6C,EAAG46C,SAAS,GAAI79B,GAAI49B,GAAID,GAAItN,IAC/DwN,SAAS,IAAIH,sBAAsBz6C,EAAG46C,SAAS,GAAIF,GAAIC,GAAIxN,GAAIC,KAGvE,SAASyN,qBAAqBC,KAAMr2C,EAAGuT,EAAG8E,GAAIE,GAAI42B,GAAIG,IACpD,IAA6BgH,aAAzBC,aAAe9xC,IAiCnB,OAhCA,SAAU+xC,KAAKt4C,KAAMoa,GAAIE,GAAIkwB,GAAIC,IAC/B,KAAIrwB,GAAK62B,IAAM32B,GAAK82B,IAAM5G,GAAKrwB,IAAMswB,GAAKpwB,IAA1C,CACA,GAAI5F,MAAQzU,KAAKyU,MAAO,CACtB,IAAIA,MAAO8C,GAAKzV,EAAI9B,KAAK8B,EAAG0V,GAAKnC,EAAIrV,KAAKqV,EAAGkjC,UAAYhhC,GAAKA,GAAKC,GAAKA,GACxE,GAAI+gC,UAAYF,aAAc,CAC5B,IAAI1L,SAAWrpC,KAAKU,KAAKq0C,aAAeE,WACxCp+B,GAAKrY,EAAI6qC,SAAUtyB,GAAKhF,EAAIs3B,SAC5BsE,GAAKnvC,EAAI6qC,SAAUyE,GAAK/7B,EAAIs3B,SAC5ByL,aAAe3jC,OAInB,IADA,IAAIwjC,SAAWj4C,KAAKkT,MAAOslC,GAAiB,IAAXp+B,GAAKowB,IAAUiO,GAAiB,IAAXn+B,GAAKmwB,IAClDzwC,GADqFqb,GAAKojC,KAC7E,EADuD32C,GAAK02C,GACjDx1C,EAAIhJ,EAAI,EAAGA,EAAIgJ,IAAKhJ,EACnD,GAAIgG,KAAOi4C,SAAa,EAAJj+C,GAAQ,OAAY,EAAJA,GACnC,KAAK,EACJs+C,KAAKt4C,KAAMoa,GAAIE,GAAIk+B,GAAIC,IACvB,MAED,KAAK,EACJH,KAAKt4C,KAAMw4C,GAAIl+B,GAAIkwB,GAAIiO,IACvB,MAED,KAAK,EACJH,KAAKt4C,KAAMoa,GAAIq+B,GAAID,GAAI/N,IACvB,MAED,KAAK,EACJ6N,KAAKt4C,KAAMw4C,GAAIC,GAAIjO,GAAIC,MA3B7B,CA+BG0N,KAAMh+B,GAAIE,GAAI42B,GAAIG,IACdgH,aAGT,SAASM,kBAAkBh3C,EAAGC,GAC5BD,EAAIlC,GAAG+e,IAAI7c,GACXC,EAAInC,GAAG+e,IAAI5c,GACX,IAAIg3C,GAAKj3C,EAAE0d,EAAGw5B,GAAKl3C,EAAEmZ,EAAGg+B,GAAKn3C,EAAEC,EAAGm3C,GAAKn3C,EAAEyd,EAAIu5B,GAAII,GAAKp3C,EAAEkZ,EAAI+9B,GAAII,GAAKr3C,EAAEA,EAAIk3C,GAC3E,OAAO,SAASn0C,GACd,MAAO,IAAM4b,WAAWhd,KAAKwb,MAAM65B,GAAKG,GAAKp0C,IAAM4b,WAAWhd,KAAKwb,MAAM85B,GAAKG,GAAKr0C,IAAM4b,WAAWhd,KAAKwb,MAAM+5B,GAAKG,GAAKt0C,KAI7H,SAASu0C,qBAAqBv3C,EAAGC,GAC/B,IAAoBkE,EAAhB7L,EAAI,GAAI6I,EAAI,GAChB,IAAKgD,KAAKnE,EACJmE,KAAKlE,EACP3H,EAAE6L,GAAKqzC,eAAex3C,EAAEmE,GAAIlE,EAAEkE,IAE9BhD,EAAEgD,GAAKnE,EAAEmE,GAGb,IAAKA,KAAKlE,EACFkE,KAAKnE,IACTmB,EAAEgD,GAAKlE,EAAEkE,IAGb,OAAO,SAASnB,GACd,IAAKmB,KAAK7L,EAAG6I,EAAEgD,GAAK7L,EAAE6L,GAAGnB,GACzB,OAAO7B,GAIX,SAASs2C,qBAAqBz3C,EAAGC,GAE/B,OADAD,GAAKA,EAAGC,GAAKA,EACN,SAAS+C,GACd,OAAOhD,GAAK,EAAIgD,GAAK/C,EAAI+C,GAI7B,SAAS00C,qBAAqB13C,EAAGC,GAC/B,IAAkF03C,GAAIC,GAAIC,GAAtFC,GAAKC,uBAAuBlrC,UAAYmrC,uBAAuBnrC,UAAY,EAAevU,GAAK,EAAGiD,EAAI,GAAI8f,EAAI,GAElH,IADArb,GAAQ,GAAIC,GAAQ,IACZ03C,GAAKI,uBAAuBj5B,KAAK9e,MAAQ43C,GAAKI,uBAAuBl5B,KAAK7e,MAC3E43C,GAAKD,GAAGK,OAASH,KACpBD,GAAK53C,EAAEzC,MAAMs6C,GAAID,IACbt8C,EAAEjD,GAAIiD,EAAEjD,IAAMu/C,GAASt8C,IAAIjD,GAAKu/C,KAEjCF,GAAKA,GAAG,OAASC,GAAKA,GAAG,IACxBr8C,EAAEjD,GAAIiD,EAAEjD,IAAMs/C,GAASr8C,IAAIjD,GAAKs/C,IAEpCr8C,IAAIjD,GAAK,KACT+iB,EAAE3e,KAAK,CACLpE,EAAGA,EACH8H,EAAGq3C,qBAAqBE,GAAIC,OAGhCE,GAAKE,uBAAuBnrC,UAM9B,OAJIirC,GAAK73C,EAAE5H,SACTw/C,GAAK53C,EAAEzC,MAAMs6C,IACTv8C,EAAEjD,GAAIiD,EAAEjD,IAAMu/C,GAASt8C,IAAIjD,GAAKu/C,IAE/Bt8C,EAAElD,OAAS,EAAIgjB,EAAE,IAAMpb,EAAIob,EAAE,GAAGjb,EAAG,SAAS4C,GACjD,OAAO/C,EAAE+C,GAAK,KACX,WACH,OAAO/C,IACJA,EAAIob,EAAEhjB,OAAQ,SAAS2K,GAC1B,IAAK,IAAW9H,EAAP5C,EAAI,EAAMA,EAAI2H,IAAK3H,EAAGiD,GAAGL,EAAImgB,EAAE/iB,IAAIA,GAAK4C,EAAEkF,EAAE4C,GACrD,OAAOzH,EAAE4vB,KAAK,MA5OlBrtB,GAAG6wC,KAAKuJ,SAAW,SAAStJ,UAC1B,OAAO9wC,GAAG6wC,KAAKgH,UAAUI,UAAUnH,WAErC9wC,GAAG6wC,KAAKwJ,SAAW,SAASlZ,OAAQvmB,GAAIE,GAAIkwB,GAAIC,IAC9C,IAA4CqP,OAAxCh4C,EAAI+tC,eAAgBx6B,EAAIy6B,eAC5B,GAAIgK,OAASx+C,UAAUvB,OAQrB,OAPA+H,EAAI81C,wBACJviC,EAAIwiC,wBACW,IAAXiC,SACFrP,GAAKnwB,GACLkwB,GAAKpwB,GACLE,GAAKF,GAAK,GAELy/B,SAASlZ,QAElB,SAASkZ,SAASnqC,MAChB,IAAI7L,EAA2Ck2C,GAAIC,GAAIhgD,EAAGkD,EAAG+8C,IAAKC,IAAKC,IAAKC,IAArE7J,GAAKpmB,WAAWroB,GAAI0uC,GAAKrmB,WAAW9U,GAC3C,GAAU,MAAN+E,GACF6/B,IAAM7/B,GAAI8/B,IAAM5/B,GAAI6/B,IAAM3P,GAAI4P,IAAM3P,QAKpC,GAHA0P,IAAMC,MAAQH,IAAMC,IAAM3zC,KAC1BwzC,GAAK,GAAIC,GAAK,GACd98C,EAAIwS,KAAK3V,OACL+/C,OAAQ,IAAK9/C,EAAI,EAAGA,EAAIkD,IAAKlD,GAC/B6J,EAAI6L,KAAK1V,IACH8H,EAAIm4C,MAAKA,IAAMp2C,EAAE/B,GACnB+B,EAAEwR,EAAI6kC,MAAKA,IAAMr2C,EAAEwR,GACnBxR,EAAE/B,EAAIq4C,MAAKA,IAAMt2C,EAAE/B,GACnB+B,EAAEwR,EAAI+kC,MAAKA,IAAMv2C,EAAEwR,GACvB0kC,GAAG37C,KAAKyF,EAAE/B,GACVk4C,GAAG57C,KAAKyF,EAAEwR,QACL,IAAKrb,EAAI,EAAGA,EAAIkD,IAAKlD,EAAG,CAC7B,IAAIwrC,IAAM+K,GAAG1sC,EAAI6L,KAAK1V,GAAIA,GAAIyrC,IAAM+K,GAAG3sC,EAAG7J,GACtCwrC,GAAKyU,MAAKA,IAAMzU,IAChBC,GAAKyU,MAAKA,IAAMzU,IAChBD,GAAK2U,MAAKA,IAAM3U,IAChBC,GAAK2U,MAAKA,IAAM3U,IACpBsU,GAAG37C,KAAKonC,IACRwU,GAAG57C,KAAKqnC,IAGZ,IAAIluB,GAAK4iC,IAAMF,IAAKziC,GAAK4iC,IAAMF,IAE/B,SAASlpC,OAAO9T,EAAG2G,EAAG/B,EAAGuT,EAAG+E,GAAIE,GAAIkwB,GAAIC,IACtC,IAAIzoC,MAAMF,KAAME,MAAMqT,GACtB,GAAInY,EAAEm9C,KAAM,CACV,IAAIC,GAAKp9C,EAAE4E,EAAGy4C,GAAKr9C,EAAEmY,EACrB,GAAU,MAANilC,GACF,GAAI30C,IAAI20C,GAAKx4C,GAAK6D,IAAI40C,GAAKllC,GAAK,IAC9BmlC,YAAYt9C,EAAG2G,EAAG/B,EAAGuT,EAAG+E,GAAIE,GAAIkwB,GAAIC,QAC/B,CACL,IAAIgQ,OAASv9C,EAAEuX,MACfvX,EAAE4E,EAAI5E,EAAEmY,EAAInY,EAAEuX,MAAQ,KACtB+lC,YAAYt9C,EAAGu9C,OAAQH,GAAIC,GAAIngC,GAAIE,GAAIkwB,GAAIC,IAC3C+P,YAAYt9C,EAAG2G,EAAG/B,EAAGuT,EAAG+E,GAAIE,GAAIkwB,GAAIC,SAGtCvtC,EAAE4E,EAAIA,EAAG5E,EAAEmY,EAAIA,EAAGnY,EAAEuX,MAAQ5Q,OAG9B22C,YAAYt9C,EAAG2G,EAAG/B,EAAGuT,EAAG+E,GAAIE,GAAIkwB,GAAIC,IAGxC,SAAS+P,YAAYt9C,EAAG2G,EAAG/B,EAAGuT,EAAG+E,GAAIE,GAAIkwB,GAAIC,IAC3C,IAAI+N,GAAiB,IAAXp+B,GAAKowB,IAAUiO,GAAiB,IAAXn+B,GAAKmwB,IAAUloC,MAAQT,GAAK02C,GAAIkC,MAAQrlC,GAAKojC,GAAIz+C,EAAI0gD,OAAS,EAAIn4C,MACjGrF,EAAEm9C,MAAO,EAEL93C,MAAO6X,GAAKo+B,GAAShO,GAAKgO,GAC1BkC,MAAOpgC,GAAKm+B,GAAShO,GAAKgO,GAC9BznC,OAHA9T,EAAIA,EAAEgW,MAAMlZ,KAAOkD,EAAEgW,MAAMlZ,GAmDxB,CACLqgD,MAAM,EACNnnC,MAAO,GACPuB,MAAO,KACP3S,EAAG,KACHuT,EAAG,OArDSxR,EAAG/B,EAAGuT,EAAG+E,GAAIE,GAAIkwB,GAAIC,IA3B7BlzB,GAAKC,GAAI4iC,IAAMF,IAAM3iC,GAAS4iC,IAAMF,IAAMziC,GA6B9C,IAAI2gC,KA8CC,CACLkC,MAAM,EACNnnC,MAAO,GACPuB,MAAO,KACP3S,EAAG,KACHuT,EAAG,KAlDH8iC,IAAW,SAASt0C,GAClBmN,OAAOmnC,KAAMt0C,GAAI0sC,GAAG1sC,IAAK7J,IAAKw2C,GAAG3sC,EAAG7J,GAAIigD,IAAKC,IAAKC,IAAKC,MAEzDjC,MAAa,SAAS96C,GACpBy6C,sBAAsBz6C,EAAG86C,KAAM8B,IAAKC,IAAKC,IAAKC,MAEhDjC,KAAY,SAAS1jC,OACnB,OAAOyjC,qBAAqBC,KAAM1jC,MAAM,GAAIA,MAAM,GAAIwlC,IAAKC,IAAKC,IAAKC,OAGvE,GADApgD,GAAK,EACK,MAANogB,GAAY,CACd,OAASpgB,EAAIkD,GACX8T,OAAOmnC,KAAMzoC,KAAK1V,GAAI+/C,GAAG//C,GAAIggD,GAAGhgD,GAAIigD,IAAKC,IAAKC,IAAKC,OAEnDpgD,OACG0V,KAAKhJ,QAAQyxC,KAAKrvC,KAEzB,OADAixC,GAAKC,GAAKtqC,KAAO7L,EAAI,KACds0C,KAmBT,OAjBA0B,SAAS/3C,EAAI,SAASoE,GACpB,OAAO5K,UAAUvB,QAAU+H,EAAIoE,EAAG2zC,UAAY/3C,GAEhD+3C,SAASxkC,EAAI,SAASnP,GACpB,OAAO5K,UAAUvB,QAAUsb,EAAInP,EAAG2zC,UAAYxkC,GAEhDwkC,SAASj3C,OAAS,SAASsD,GACzB,OAAK5K,UAAUvB,QACN,MAALmM,EAAWkU,GAAKE,GAAKkwB,GAAKC,GAAK,MAAWrwB,IAAMlU,EAAE,GAAG,GAAIoU,IAAMpU,EAAE,GAAG,GAAIskC,IAAMtkC,EAAE,GAAG,GACvFukC,IAAMvkC,EAAE,GAAG,IACJ2zC,UAH6B,MAANz/B,GAAa,KAAO,CAAE,CAAEA,GAAIE,IAAM,CAAEkwB,GAAIC,MAKxEoP,SAAS3yC,KAAO,SAAShB,GACvB,OAAK5K,UAAUvB,QACN,MAALmM,EAAWkU,GAAKE,GAAKkwB,GAAKC,GAAK,MAAWrwB,GAAKE,GAAK,EAAGkwB,IAAMtkC,EAAE,GAAIukC,IAAMvkC,EAAE,IACxE2zC,UAF6B,MAANz/B,GAAa,KAAO,CAAEowB,GAAKpwB,GAAIqwB,GAAKnwB,KAI7Du/B,UA8DTr6C,GAAGm7C,eAAiBjC,kBASpBl5C,GAAGo7C,kBAAoB3B,qBAoBvBz5C,GAAGq7C,kBAAoB1B,qBAOvB35C,GAAGs7C,kBAAoB1B,qBAiCvB,IAAIK,uBAAyB,8CAA+CC,uBAAyB,IAAI7rC,OAAO4rC,uBAAuBlyC,OAAQ,KAE/I,SAAS2xC,eAAex3C,EAAGC,GAEzB,IADA,IAAiCtE,EAA7BrD,EAAIwF,GAAGu7C,cAAchhD,SAChBC,GAAK,KAAOqD,EAAImC,GAAGu7C,cAAc/gD,GAAG0H,EAAGC,MAChD,OAAOtE,EAOT,SAAS29C,oBAAoBt5C,EAAGC,GAC9B,IAAqF3H,EAAjF8H,EAAI,GAAIe,EAAI,GAAIo4C,GAAKv5C,EAAE3H,OAAQmhD,GAAKv5C,EAAE5H,OAAQuX,GAAKhO,KAAKZ,IAAIhB,EAAE3H,OAAQ4H,EAAE5H,QAC5E,IAAKC,EAAI,EAAGA,EAAIsX,KAAMtX,EAAG8H,EAAE1D,KAAK86C,eAAex3C,EAAE1H,GAAI2H,EAAE3H,KACvD,KAAMA,EAAIihD,KAAMjhD,EAAG6I,EAAE7I,GAAK0H,EAAE1H,GAC5B,KAAMA,EAAIkhD,KAAMlhD,EAAG6I,EAAE7I,GAAK2H,EAAE3H,GAC5B,OAAO,SAAS0K,GACd,IAAK1K,EAAI,EAAGA,EAAIsX,KAAMtX,EAAG6I,EAAE7I,GAAK8H,EAAE9H,GAAG0K,GACrC,OAAO7B,GAlBXrD,GAAG6gC,YAAc6Y,eAMjB15C,GAAGu7C,cAAgB,CAAE,SAASr5C,EAAGC,GAC/B,IAAI+C,SAAW/C,EACf,OAAc,WAAN+C,EAAiBkc,aAAa9Y,IAAInG,EAAE8e,gBAAkB,oBAAoBphB,KAAKsC,GAAK+2C,kBAAoBU,qBAAuBz3C,aAAauc,SAAWw6B,kBAAoBx+C,MAAM6C,QAAQ4E,GAAKq5C,oBAA4B,WAANt2C,GAAkB1C,MAAML,GAAKs3C,qBAAuBE,sBAAsBz3C,EAAGC,KAE3SnC,GAAG27C,iBAAmBH,oBAWtB,IAAII,gBAAkB,WACpB,OAAO/zC,aAELg0C,QAAU77C,GAAG8F,IAAI,CACnBg2C,OAAQF,gBACRG,KA+DF,SAASC,aAAar+C,GACpB,OAAO,SAASuH,GACd,OAAOpB,KAAKkY,IAAI9W,EAAGvH,KAhErBs+C,KAAM,WACJ,OAAOC,cAETC,MAAO,WACL,OAAOC,eAETtjC,IAAK,WACH,OAAOujC,aAETzjC,IAAK,WACH,OAAO0jC,aAETpP,OAAQ,WACN,OAAOqP,gBAETC,QA6DF,SAASC,gBAAgBv6C,EAAGyB,GAC1B,IAAIlG,EACA3B,UAAUvB,OAAS,IAAGoJ,EAAI,KAC1B7H,UAAUvB,OAAQkD,EAAIkG,EAAI,EAAIG,KAAK4U,KAAK,EAAIxW,IAASA,EAAI,EAAGzE,EAAIkG,EAAI,GACxE,OAAO,SAASuB,GACd,OAAO,EAAIhD,EAAI4B,KAAKkY,IAAI,GAAI,GAAK9W,GAAKpB,KAAKgV,KAAK5T,EAAIzH,GAAK,EAAIkG,KAjE/D+4C,KAoEF,SAASC,aAAal/C,GACfA,IAAGA,EAAI,SACZ,OAAO,SAASyH,GACd,OAAOA,EAAIA,IAAMzH,EAAI,GAAKyH,EAAIzH,KAtEhCm/C,OAAQ,WACN,OAAOC,kBAGPC,aAAe98C,GAAG8F,IAAI,CACxB,GAAM+B,YACNk1C,IAAKC,gBACL,SAAUC,gBACV,SAAU,SAASp/C,GACjB,OAAOo/C,gBAAgBD,gBAAgBn/C,OAS3C,SAASq/C,cAAcr/C,GACrB,OAAO,SAASqH,GACd,OAAOA,GAAK,EAAI,EAAIA,GAAK,EAAI,EAAIrH,EAAEqH,IAGvC,SAAS83C,gBAAgBn/C,GACvB,OAAO,SAASqH,GACd,OAAO,EAAIrH,EAAE,EAAIqH,IAGrB,SAAS+3C,gBAAgBp/C,GACvB,OAAO,SAASqH,GACd,MAAO,IAAMA,EAAI,GAAKrH,EAAE,EAAIqH,GAAK,EAAIrH,EAAE,EAAI,EAAIqH,KAGnD,SAASg3C,aAAah3C,GACpB,OAAOA,EAAIA,EAEb,SAASk3C,cAAcl3C,GACrB,OAAOA,EAAIA,EAAIA,EAEjB,SAASi4C,mBAAmBj4C,GAC1B,GAAIA,GAAK,EAAG,OAAO,EACnB,GAAIA,GAAK,EAAG,OAAO,EACnB,IAAIogC,GAAKpgC,EAAIA,EAAGk4C,GAAK9X,GAAKpgC,EAC1B,OAAO,GAAKA,EAAI,GAAKk4C,GAAK,GAAKl4C,EAAIogC,IAAM8X,GAAK,KAOhD,SAASf,YAAYn3C,GACnB,OAAO,EAAIpB,KAAKoc,IAAIhb,EAAI,OAE1B,SAASo3C,YAAYp3C,GACnB,OAAOpB,KAAKkY,IAAI,EAAG,IAAM9W,EAAI,IAE/B,SAASq3C,eAAer3C,GACtB,OAAO,EAAIpB,KAAKU,KAAK,EAAIU,EAAIA,GAgB/B,SAAS23C,eAAe33C,GACtB,OAAOA,EAAI,EAAI,KAAO,OAASA,EAAIA,EAAIA,EAAI,EAAI,KAAO,QAAUA,GAAK,IAAM,MAAQA,EAAI,IAAMA,EAAI,IAAM,KAAO,QAAUA,GAAK,KAAO,MAAQA,EAAI,MAAQ,QAAUA,GAAK,MAAQ,MAAQA,EAAI,QAkC7L,SAASm4C,oBAAoBn7C,EAAGC,GAE9B,OADAA,GAAKD,EACE,SAASgD,GACd,OAAOpB,KAAKwb,MAAMpd,EAAIC,EAAI+C,IAa9B,SAASo4C,aAAah5C,GACpB,IAAIwV,GAAK,CAAExV,EAAEpC,EAAGoC,EAAEnC,GAAK4X,GAAK,CAAEzV,EAAEjB,EAAGiB,EAAED,GAAKk5C,GAAKC,sBAAsB1jC,IAAK2jC,GAAKC,gBAAgB5jC,GAAIC,IAAK4jC,GAAKH,sBA0B/G,SAASI,oBAAoB17C,EAAGC,EAAGkE,GAGjC,OAFAnE,EAAE,IAAMmE,EAAIlE,EAAE,GACdD,EAAE,IAAMmE,EAAIlE,EAAE,GACPD,EA7B4H07C,CAAoB7jC,GAAID,IAAK2jC,MAAQ,EACpK3jC,GAAG,GAAKC,GAAG,GAAKA,GAAG,GAAKD,GAAG,KAC7BA,GAAG,KAAO,EACVA,GAAG,KAAO,EACVyjC,KAAO,EACPE,KAAO,GAET7hD,KAAK+lC,QAAU4b,GAAKz5C,KAAK2c,MAAM3G,GAAG,GAAIA,GAAG,IAAMhW,KAAK2c,OAAO1G,GAAG,GAAIA,GAAG,KAAO3B,WAC5Exc,KAAK4gB,UAAY,CAAElY,EAAE3G,EAAG2G,EAAEzG,GAC1BjC,KAAK2gB,MAAQ,CAAEghC,GAAII,IACnB/hD,KAAKiiD,KAAOF,GAAK75C,KAAK2c,MAAMg9B,GAAIE,IAAMvlC,WAAa,EAKrD,SAASslC,gBAAgBx7C,EAAGC,GAC1B,OAAOD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAEhC,SAASq7C,sBAAsBt7C,GAC7B,IAAImE,EAAIvC,KAAKU,KAAKk5C,gBAAgBx7C,EAAGA,IAKrC,OAJImE,IACFnE,EAAE,IAAMmE,EACRnE,EAAE,IAAMmE,GAEHA,EAzITrG,GAAG89C,KAAO,SAASl+C,MACjB,IAAIpF,EAAIoF,KAAKwK,QAAQ,KAAMlF,EAAI1K,GAAK,EAAIoF,KAAKF,MAAM,EAAGlF,GAAKoF,KAAM0E,EAAI9J,GAAK,EAAIoF,KAAKF,MAAMlF,EAAI,GAAK,KAGlG,OAFA0K,EAAI22C,QAAQtzC,IAAIrD,IAAM02C,gBAEfsB,eADP54C,EAAIw4C,aAAav0C,IAAIjE,IAAMuD,aACJ3C,EAAEnJ,MAAM,KAAMmE,cAAcT,KAAK3D,UAAW,OA4DrEkE,GAAG+9C,eACH,SAASC,kBAAkB97C,EAAGC,GAC5BD,EAAIlC,GAAG+f,IAAI7d,GACXC,EAAInC,GAAG+f,IAAI5d,GACX,IAAI87C,GAAK/7C,EAAE2B,EAAGq6C,GAAKh8C,EAAEmB,EAAG86C,GAAKj8C,EAAE8H,EAAGo0C,GAAKj8C,EAAE0B,EAAIo6C,GAAII,GAAKl8C,EAAEkB,EAAI66C,GAAII,GAAKn8C,EAAE6H,EAAIm0C,GACvE37C,MAAM67C,MAAKA,GAAK,EAAGH,GAAK17C,MAAM07C,IAAM/7C,EAAEkB,EAAI66C,IAC1C17C,MAAM47C,KAAKA,GAAK,EAAGH,GAAKz7C,MAAMy7C,IAAM97C,EAAE0B,EAAIo6C,IAAaG,GAAK,IAAKA,IAAM,IAAcA,IAAM,MAAKA,IAAM,KAC1G,OAAO,SAASl5C,GACd,OAAO+a,WAAWg+B,GAAKG,GAAKl5C,EAAGg5C,GAAKG,GAAKn5C,EAAGi5C,GAAKG,GAAKp5C,GAAK,KAG/DlF,GAAGu+C,eACH,SAASC,kBAAkBt8C,EAAGC,GAC5BD,EAAIlC,GAAGgf,IAAI9c,GACXC,EAAInC,GAAGgf,IAAI7c,GACX,IAAI87C,GAAK/7C,EAAE2B,EAAG46C,GAAKv8C,EAAEzE,EAAG0gD,GAAKj8C,EAAE8H,EAAGo0C,GAAKj8C,EAAE0B,EAAIo6C,GAAIlE,GAAK53C,EAAE1E,EAAIghD,GAAIH,GAAKn8C,EAAE6H,EAAIm0C,GACvE37C,MAAMu3C,MAAKA,GAAK,EAAG0E,GAAKj8C,MAAMi8C,IAAMt8C,EAAE1E,EAAIghD,IAC1Cj8C,MAAM47C,KAAKA,GAAK,EAAGH,GAAKz7C,MAAMy7C,IAAM97C,EAAE0B,EAAIo6C,IAAaG,GAAK,IAAKA,IAAM,IAAcA,IAAM,MAAKA,IAAM,KAC1G,OAAO,SAASl5C,GACd,OAAOga,WAAW++B,GAAKG,GAAKl5C,EAAGu5C,GAAK1E,GAAK70C,EAAGi5C,GAAKG,GAAKp5C,GAAK,KAG/DlF,GAAG0+C,eACH,SAASC,kBAAkBz8C,EAAGC,GAC5BD,EAAIlC,GAAGogB,IAAIle,GACXC,EAAInC,GAAGogB,IAAIje,GACX,IAAIg8C,GAAKj8C,EAAE8H,EAAG40C,GAAK18C,EAAEA,EAAGm3C,GAAKn3C,EAAEC,EAAGm8C,GAAKn8C,EAAE6H,EAAIm0C,GAAIU,GAAK18C,EAAED,EAAI08C,GAAIpF,GAAKr3C,EAAEA,EAAIk3C,GAC3E,OAAO,SAASn0C,GACd,OAAOob,WAAW69B,GAAKG,GAAKp5C,EAAG05C,GAAKC,GAAK35C,EAAGm0C,GAAKG,GAAKt0C,GAAK,KAG/DlF,GAAG8+C,iBAAmBzB,oBAOtBr9C,GAAG8sC,UAAY,SAAStW,QACtB,IAAInb,EAAIhb,YAAYsP,gBAAgB3P,GAAGwN,GAAGkD,OAAOxD,IAAK,KACtD,OAAQlN,GAAG8sC,UAAY,SAAStW,QAC9B,GAAc,MAAVA,OAAgB,CAClBnb,EAAE7Z,aAAa,YAAag1B,QAC5B,IAAItxB,EAAImW,EAAEyxB,UAAUiS,QAAQC,cAE9B,OAAO,IAAI1B,aAAap4C,EAAIA,EAAEQ,OAASu5C,wBACtCzoB,SAeL8mB,aAAapgD,UAAUsC,SAAW,WAChC,MAAO,aAAe5D,KAAK4gB,UAAY,WAAa5gB,KAAK+lC,OAAS,UAAY/lC,KAAKiiD,KAAO,UAAYjiD,KAAK2gB,MAAQ,KAkBrH,IAAI0iC,qBAAuB,CACzB/8C,EAAG,EACHC,EAAG,EACHkB,EAAG,EACHgB,EAAG,EACH1G,EAAG,EACHE,EAAG,GAGL,SAASqhD,2BAA2BzhD,GAClC,OAAOA,EAAElD,OAASkD,EAAEylC,MAAQ,IAAM,GAmDpC,SAASic,wBAAwBj9C,EAAGC,GAClC,IAAI1E,EAAI,GAAI8f,EAAI,GAOhB,OANArb,EAAIlC,GAAG8sC,UAAU5qC,GAAIC,EAAInC,GAAG8sC,UAAU3qC,GAnDxC,SAASi9C,wBAAwBC,GAAIC,GAAI7hD,EAAG8f,GAC1C,GAAI8hC,GAAG,KAAOC,GAAG,IAAMD,GAAG,KAAOC,GAAG,GAAI,CACtC,IAAI9kD,EAAIiD,EAAEmB,KAAK,aAAc,KAAM,IAAK,KAAM,KAC9C2e,EAAE3e,KAAK,CACLpE,EAAGA,EAAI,EACP8H,EAAGq3C,qBAAqB0F,GAAG,GAAIC,GAAG,KACjC,CACD9kD,EAAGA,EAAI,EACP8H,EAAGq3C,qBAAqB0F,GAAG,GAAIC,GAAG,WAE3BA,GAAG,IAAMA,GAAG,KACrB7hD,EAAEmB,KAAK,aAAe0gD,GAAK,KAyC7BF,CAAwBl9C,EAAEsa,UAAWra,EAAEqa,UAAW/e,EAAG8f,GAtCvD,SAASgiC,qBAAqBC,GAAIC,GAAIhiD,EAAG8f,GACnCiiC,KAAOC,IACLD,GAAKC,GAAK,IAAKA,IAAM,IAAcA,GAAKD,GAAK,MAAKA,IAAM,KAC5DjiC,EAAE3e,KAAK,CACLpE,EAAGiD,EAAEmB,KAAKsgD,2BAA2BzhD,GAAK,UAAW,KAAM,KAAO,EAClE6E,EAAGq3C,qBAAqB6F,GAAIC,OAErBA,IACThiD,EAAEmB,KAAKsgD,2BAA2BzhD,GAAK,UAAYgiD,GAAK,KA+B1DF,CAAqBr9C,EAAEy/B,OAAQx/B,EAAEw/B,OAAQlkC,EAAG8f,GA5B9C,SAASmiC,mBAAmBC,GAAIC,GAAIniD,EAAG8f,GACjCoiC,KAAOC,GACTriC,EAAE3e,KAAK,CACLpE,EAAGiD,EAAEmB,KAAKsgD,2BAA2BzhD,GAAK,SAAU,KAAM,KAAO,EACjE6E,EAAGq3C,qBAAqBgG,GAAIC,MAErBA,IACTniD,EAAEmB,KAAKsgD,2BAA2BzhD,GAAK,SAAWmiD,GAAK,KAsBzDF,CAAmBx9C,EAAE27C,KAAM17C,EAAE07C,KAAMpgD,EAAG8f,GAnBxC,SAASsiC,oBAAoBC,GAAIC,GAAItiD,EAAG8f,GACtC,GAAIuiC,GAAG,KAAOC,GAAG,IAAMD,GAAG,KAAOC,GAAG,GAAI,CACtC,IAAIvlD,EAAIiD,EAAEmB,KAAKsgD,2BAA2BzhD,GAAK,SAAU,KAAM,IAAK,KAAM,KAC1E8f,EAAE3e,KAAK,CACLpE,EAAGA,EAAI,EACP8H,EAAGq3C,qBAAqBmG,GAAG,GAAIC,GAAG,KACjC,CACDvlD,EAAGA,EAAI,EACP8H,EAAGq3C,qBAAqBmG,GAAG,GAAIC,GAAG,WAEjB,IAAVA,GAAG,IAAsB,IAAVA,GAAG,IAC3BtiD,EAAEmB,KAAKsgD,2BAA2BzhD,GAAK,SAAWsiD,GAAK,KASzDF,CAAoB39C,EAAEqa,MAAOpa,EAAEoa,MAAO9e,EAAG8f,GACzCrb,EAAIC,EAAI,KACD,SAAS+C,GAEd,IADA,IAA0B9H,EAAtB5C,GAAK,EAAGkD,EAAI6f,EAAEhjB,SACTC,EAAIkD,GAAGD,GAAGL,EAAImgB,EAAE/iB,IAAIA,GAAK4C,EAAEkF,EAAE4C,GACtC,OAAOzH,EAAE4vB,KAAK,KAGlB,SAAS2yB,uBAAuB99C,EAAGC,GAEjC,OADAA,GAAKA,GAAKD,GAAKA,IAAM,EAAIC,EAClB,SAASG,GACd,OAAQA,EAAIJ,GAAKC,GAGrB,SAAS89C,sBAAsB/9C,EAAGC,GAEhC,OADAA,GAAKA,GAAKD,GAAKA,IAAM,EAAIC,EAClB,SAASG,GACd,OAAOwB,KAAKX,IAAI,EAAGW,KAAKZ,IAAI,GAAIZ,EAAIJ,GAAKC,KAW7C,SAAS+9C,qBAAqBC,MAE5B,IADA,IAAIt5C,MAAQs5C,KAAKp4C,OAAQoP,IAAMgpC,KAAK5jD,OAAQ6jD,IAsB9C,SAASC,oCAAoCn+C,EAAGC,GAC9C,GAAID,IAAMC,EAAG,OAAOD,EACpB,IAAIo+C,OAASC,0BAA0Br+C,GAAIs+C,OAASD,0BAA0Bp+C,GAAIs+C,MAAQH,OAAOpd,MAAOwd,MAAQF,OAAOtd,MAAOyd,WAAa,KAC3I,KAAOF,QAAUC,OACfC,WAAaF,MACbA,MAAQH,OAAOpd,MACfwd,MAAQF,OAAOtd,MAEjB,OAAOyd,WA9B2CN,CAAoCx5C,MAAOsQ,KAAMgqB,OAAS,CAAEt6B,OACvGA,QAAUu5C,KACfv5C,MAAQA,MAAMkJ,OACdoxB,OAAOviC,KAAKiI,OAGd,IADA,IAAIR,EAAI86B,OAAO5mC,OACR4c,MAAQipC,KACbjf,OAAO6V,OAAO3wC,EAAG,EAAG8Q,KACpBA,IAAMA,IAAIpH,OAEZ,OAAOoxB,OAET,SAASof,0BAA0B//C,MAEjC,IADA,IAAIogD,UAAY,GAAI7wC,OAASvP,KAAKuP,OACjB,MAAVA,QACL6wC,UAAUhiD,KAAK4B,MACfA,KAAOuP,OACPA,OAASA,OAAOA,OAGlB,OADA6wC,UAAUhiD,KAAK4B,MACRogD,UAuVT,SAASC,yBAAyBx8C,GAChCA,EAAEy8C,OAAS,EAEb,SAASC,uBAAuB18C,GAC9BA,EAAEy8C,QAAS,EAEb,SAASE,yBAAyB38C,GAChCA,EAAEy8C,OAAS,EACXz8C,EAAE48C,GAAK58C,EAAE/B,EAAG+B,EAAE68C,GAAK78C,EAAEwR,EAEvB,SAASsrC,wBAAwB98C,GAC/BA,EAAEy8C,QAAS,EAEb,SAASM,0BAA0BnF,KAAMoF,MAAOC,SAC9C,IAAI/iC,GAAK,EAAGC,GAAK,EAEjB,GADAy9B,KAAKsF,OAAS,GACTtF,KAAKpB,KAER,IADA,IAAkDx3C,EAA9CqQ,MAAQuoC,KAAKvoC,MAAOhW,EAAIgW,MAAMnZ,OAAQC,GAAK,IACtCA,EAAIkD,GAEF,OADT2F,EAAIqQ,MAAMlZ,MAEV4mD,0BAA0B/9C,EAAGg+C,MAAOC,SACpCrF,KAAKsF,QAAUl+C,EAAEk+C,OACjBhjC,IAAMlb,EAAEk+C,OAASl+C,EAAEkb,GACnBC,IAAMnb,EAAEk+C,OAASl+C,EAAEmb,IAGvB,GAAIy9B,KAAKhnC,MAAO,CACTgnC,KAAKpB,OACRoB,KAAKhnC,MAAM3S,GAAKwB,KAAKqB,SAAW,GAChC82C,KAAKhnC,MAAMY,GAAK/R,KAAKqB,SAAW,IAElC,IAAIkB,EAAIg7C,MAAQC,QAAQrF,KAAKhnC,MAAMklC,OACnC8B,KAAKsF,QAAUtF,KAAKuF,YAAcn7C,EAClCkY,IAAMlY,EAAI41C,KAAKhnC,MAAM3S,EACrBkc,IAAMnY,EAAI41C,KAAKhnC,MAAMY,EAEvBomC,KAAK19B,GAAKA,GAAK09B,KAAKsF,OACpBtF,KAAKz9B,GAAKA,GAAKy9B,KAAKsF,OAzetBvhD,GAAGyhD,qBAAuBtC,wBA+E1Bn/C,GAAG0hD,OAAS,GACZ1hD,GAAG0hD,OAAOC,OAAS,WACjB,OAAO,SAAS3J,OAEd,IADA,IAAI4J,MAAQ,GAAIpnD,GAAK,EAAGkD,EAAIs6C,MAAMz9C,SACzBC,EAAIkD,GAAGkkD,MAAMhjD,KAAKshD,qBAAqBlI,MAAMx9C,KACtD,OAAOonD,QAoCX5hD,GAAG0hD,OAAOG,MAAQ,WAChB,IAAgBC,OAAQr2C,OAAQ/F,OAAQhI,EAAgBqkD,WAAYC,cAAeC,WAA/EJ,MAAQ,GAA+BpsC,QAAU,EACrD,SAASysC,WACP,IAAkF77C,EAAG/D,EAAGqY,GAAIngB,EAAGgJ,EAA3FoJ,UAAY,GAAIu1C,UAAY,GAAIC,WAAapiD,GAAG4G,MAAMlJ,GAAI2kD,cAAgB,GAI9E,IAHAP,OAAS,GACTr2C,OAAS,GACTpF,EAAI,EAAG7L,GAAK,IACHA,EAAIkD,GAAG,CAEd,IADA4E,EAAI,EAAGkB,GAAK,IACHA,EAAI9F,GACX4E,GAAKoD,OAAOlL,GAAGgJ,GAEjB2+C,UAAUvjD,KAAK0D,GACf+/C,cAAczjD,KAAKoB,GAAG4G,MAAMlJ,IAC5B2I,GAAK/D,EAgBP,IAdIy/C,YACFK,WAAWj+C,MAAK,SAASjC,EAAGC,GAC1B,OAAO4/C,WAAWI,UAAUjgD,GAAIigD,UAAUhgD,OAG1C6/C,eACFK,cAAcn7C,SAAQ,SAAS7C,EAAG7J,GAChC6J,EAAEF,MAAK,SAASjC,EAAGC,GACjB,OAAO6/C,cAAct8C,OAAOlL,GAAG0H,GAAIwD,OAAOlL,GAAG2H,UAInDkE,GAAK,EAAIoP,QAAU/X,GAAK2I,EACxB/D,EAAI,EAAG9H,GAAK,IACHA,EAAIkD,GAAG,CAEd,IADAid,GAAKrY,EAAGkB,GAAK,IACJA,EAAI9F,GAAG,CACd,IAAI4kD,GAAKF,WAAW5nD,GAAI+nD,GAAKF,cAAcC,IAAI9+C,GAAIQ,EAAI0B,OAAO48C,IAAIC,IAAKzX,GAAKxoC,EAAGmkC,GAAKnkC,GAAK0B,EAAIqC,EAC7FuG,UAAU01C,GAAK,IAAMC,IAAM,CACzBpI,MAAOmI,GACPE,SAAUD,GACVE,WAAY3X,GACZ4X,SAAUjc,GACVrrC,MAAO4I,GAGXyH,OAAO62C,IAAM,CACXnI,MAAOmI,GACPG,WAAY9nC,GACZ+nC,SAAUpgD,EACVlH,MAAO+mD,UAAUG,KAEnBhgD,GAAKmT,QAGP,IADAjb,GAAK,IACIA,EAAIkD,GAEX,IADA8F,EAAIhJ,EAAI,IACCgJ,EAAI9F,GAAG,CACd,IAAIqK,OAAS6E,UAAUpS,EAAI,IAAMgJ,GAAIjH,OAASqQ,UAAUpJ,EAAI,IAAMhJ,IAC9DuN,OAAO3M,OAASmB,OAAOnB,QACzB0mD,OAAOljD,KAAKmJ,OAAO3M,MAAQmB,OAAOnB,MAAQ,CACxC2M,OAAQxL,OACRA,OAAQwL,QACN,CACFA,OAAQA,OACRxL,OAAQA,SAKZ0lD,YAAYU,SAElB,SAASA,SACPb,OAAO39C,MAAK,SAASjC,EAAGC,GACtB,OAAO8/C,YAAY//C,EAAE6F,OAAO3M,MAAQ8G,EAAE3F,OAAOnB,OAAS,GAAI+G,EAAE4F,OAAO3M,MAAQ+G,EAAE5F,OAAOnB,OAAS,MAyCjG,OAtCAymD,MAAMn8C,OAAS,SAASpD,GACtB,OAAKxG,UAAUvB,QACfmD,GAAKgI,OAASpD,IAAMoD,OAAOnL,OAC3BunD,OAASr2C,OAAS,KACXo2C,OAHuBn8C,QAKhCm8C,MAAMpsC,QAAU,SAASnT,GACvB,OAAKxG,UAAUvB,QACfkb,QAAUnT,EACVw/C,OAASr2C,OAAS,KACXo2C,OAHuBpsC,SAKhCosC,MAAME,WAAa,SAASz/C,GAC1B,OAAKxG,UAAUvB,QACfwnD,WAAaz/C,EACbw/C,OAASr2C,OAAS,KACXo2C,OAHuBE,YAKhCF,MAAMG,cAAgB,SAAS1/C,GAC7B,OAAKxG,UAAUvB,QACfynD,cAAgB1/C,EAChBw/C,OAAS,KACFD,OAHuBG,eAKhCH,MAAMI,WAAa,SAAS3/C,GAC1B,OAAKxG,UAAUvB,QACf0nD,WAAa3/C,EACTw/C,QAAQa,SACLd,OAHuBI,YAKhCJ,MAAMC,OAAS,WAEb,OADKA,QAAQI,WACNJ,QAETD,MAAMp2C,OAAS,WAEb,OADKA,QAAQy2C,WACNz2C,QAEFo2C,OAET7hD,GAAG0hD,OAAOkB,MAAQ,WAChB,IAA6D7zB,MAAwBpY,KAAM0qC,MAAkOwB,UAAWC,UAAWxB,QAA/UsB,MAAQ,GAAI74C,MAAQ/J,GAAG4J,SAAS,QAAS,OAAQ,OAAelC,KAAO,CAAE,EAAG,GAAkBq7C,SAAW,GAAIC,aAAeC,4BAA6BC,aAAeC,4BAA6B5B,QAAU,GAAI6B,gBAAkBC,+BAAgCC,QAAU,GAAIC,OAAS,IAAK7vC,MAAQ,GAAIskC,MAAQ,GACzT,SAASwL,QAAQhjD,MACf,OAAO,SAASy7C,KAAMrhC,GAAIlU,EAAGskC,IAC3B,GAAIiR,KAAKhnC,QAAUzU,KAAM,CACvB,IAAIuX,GAAKkkC,KAAK19B,GAAK/d,KAAK8B,EAAG0V,GAAKikC,KAAKz9B,GAAKhe,KAAKqV,EAAG4tC,GAAKzY,GAAKpwB,GAAI8oC,GAAK3rC,GAAKA,GAAKC,GAAKA,GACpF,GAAIyrC,GAAKA,GAAKF,OAASG,GAAI,CACzB,GAAIA,GAAKN,gBAAiB,CACxB,IAAI/8C,EAAI41C,KAAKsF,OAASmC,GACtBljD,KAAKygD,IAAMlpC,GAAK1R,EAChB7F,KAAK0gD,IAAMlpC,GAAK3R,EAElB,OAAO,EAET,GAAI41C,KAAKhnC,OAASyuC,IAAMA,GAAKN,gBAAiB,CACxC/8C,EAAI41C,KAAKuF,YAAckC,GAC3BljD,KAAKygD,IAAMlpC,GAAK1R,EAChB7F,KAAK0gD,IAAMlpC,GAAK3R,GAGpB,OAAQ41C,KAAKsF,QAgMjB,SAASoC,SAASt/C,GAChBA,EAAE48C,GAAKjhD,GAAG+J,MAAMzH,EAAG+B,EAAE68C,GAAKlhD,GAAG+J,MAAM8L,EACnC+sC,MAAMgB,SAER,OAjMAhB,MAAMiB,KAAO,WACX,IAAKxC,OAAS,KAAO,KAMnB,OALAtyB,MAAQ,KACRhlB,MAAMoN,IAAI,CACRnM,KAAM,MACNq2C,MAAOA,MAAQ,KAEV,EAET,IAAwC9jC,EAAG/iB,EAAG4C,EAAGK,EAAGyH,EAAG8E,EAAG3D,EAAG/D,EAAGuT,EAA5DnY,EAAIgW,MAAMnZ,OAAQ+J,EAAI0zC,MAAMz9C,OAChC,IAAKC,EAAI,EAAGA,EAAI8J,IAAK9J,EAEnBiD,GADAL,EAAI46C,MAAMx9C,IACJuN,QAIFiC,GAFJ1H,GADA4C,EAAI9H,EAAEb,QACA+F,EAAI7E,EAAE6E,GAEAA,GADZuT,EAAI3Q,EAAE2Q,EAAIpY,EAAEoY,GACQA,KAElBvT,GADA0H,EAAIq3C,MAAQyB,UAAUtoD,KAAOwP,EAAIlG,KAAKU,KAAKwF,IAAM64C,UAAUroD,IAAMwP,EAEjE6L,GAAK7L,EACL9E,EAAE5C,GAAKA,GAAK+D,EAAI5I,EAAEqmD,OAAS5+C,EAAE4+C,OAASrmD,EAAEqmD,QAAUrmD,EAAEqmD,OAAS5+C,EAAE4+C,QAAU,IACzE5+C,EAAE2Q,GAAKA,EAAIxP,EACX5I,EAAE6E,GAAKA,GAAK+D,EAAI,EAAIA,GACpB5I,EAAEoY,GAAKA,EAAIxP,GAGf,IAAIA,EAAIg7C,MAAQiC,WACdhhD,EAAIoF,KAAK,GAAK,EACdmO,EAAInO,KAAK,GAAK,EACdlN,GAAK,EACD6L,GAAG,OAAS7L,EAAIkD,IAClBN,EAAIsW,MAAMlZ,IACR8H,IAAMA,EAAIlF,EAAEkF,GAAK+D,EACnBjJ,EAAEyY,IAAMA,EAAIzY,EAAEyY,GAAKxP,EAGvB,GAAIk7C,OAGF,IAFAH,0BAA0B7jC,EAAIvd,GAAG6wC,KAAKwJ,SAAS3mC,OAAQ2tC,MAAOC,SAC9D9mD,GAAK,IACIA,EAAIkD,IACLN,EAAIsW,MAAMlZ,IAAIsmD,OAClBvjC,EAAEwmC,MAAMP,QAAQpmD,IAKtB,IADA5C,GAAK,IACIA,EAAIkD,IACXN,EAAIsW,MAAMlZ,IACJsmD,OACJ1jD,EAAEkF,EAAIlF,EAAE6jD,GACR7jD,EAAEyY,EAAIzY,EAAE8jD,KAER9jD,EAAEkF,IAAMlF,EAAE6jD,IAAM7jD,EAAE6jD,GAAK7jD,EAAEkF,IAAMygD,SAC/B3lD,EAAEyY,IAAMzY,EAAE8jD,IAAM9jD,EAAE8jD,GAAK9jD,EAAEyY,IAAMktC,UAGnCh5C,MAAM85C,KAAK,CACT74C,KAAM,OACNq2C,MAAOA,SAGXuB,MAAMlvC,MAAQ,SAASpR,GACrB,OAAKxG,UAAUvB,QACfmZ,MAAQpR,EACDsgD,OAFuBlvC,OAIhCkvC,MAAM5K,MAAQ,SAAS11C,GACrB,OAAKxG,UAAUvB,QACfy9C,MAAQ11C,EACDsgD,OAFuB5K,OAIhC4K,MAAMl7C,KAAO,SAASpF,GACpB,OAAKxG,UAAUvB,QACfmN,KAAOpF,EACAsgD,OAFuBl7C,MAIhCk7C,MAAMI,aAAe,SAAS1gD,GAC5B,OAAKxG,UAAUvB,QACfyoD,aAA4B,mBAAN1gD,EAAmBA,GAAKA,EACvCsgD,OAFuBI,cAIhCJ,MAAMzV,SAAWyV,MAAMI,aACvBJ,MAAMM,aAAe,SAAS5gD,GAC5B,OAAKxG,UAAUvB,QACf2oD,aAA4B,mBAAN5gD,EAAmBA,GAAKA,EACvCsgD,OAFuBM,cAIhCN,MAAMG,SAAW,SAASzgD,GACxB,OAAKxG,UAAUvB,QACfwoD,UAAYzgD,EACLsgD,OAFuBG,UAIhCH,MAAMrB,OAAS,SAASj/C,GACtB,OAAKxG,UAAUvB,QACfgnD,OAAsB,mBAANj/C,EAAmBA,GAAKA,EACjCsgD,OAFuBrB,QAIhCqB,MAAMoB,eAAiB,SAAS1hD,GAC9B,OAAKxG,UAAUvB,QACf6oD,gBAAkB9gD,EAAIA,EACfsgD,OAFuB9+C,KAAKU,KAAK4+C,kBAI1CR,MAAMU,QAAU,SAAShhD,GACvB,OAAKxG,UAAUvB,QACf+oD,SAAWhhD,EACJsgD,OAFuBU,SAIhCV,MAAMqB,MAAQ,SAAS3hD,GACrB,OAAKxG,UAAUvB,QACfgpD,OAASjhD,EAAIA,EACNsgD,OAFuB9+C,KAAKU,KAAK++C,SAI1CX,MAAMvB,MAAQ,SAAS/+C,GACrB,OAAKxG,UAAUvB,QACf+H,GAAKA,EACD++C,MACE/+C,EAAI,EACN++C,MAAQ/+C,GAERysB,MAAM1rB,EAAI,KAAM0rB,MAAM7pB,EAAI9C,IAAK2sB,MAAQ,KACvChlB,MAAMoN,IAAI,CACRnM,KAAM,MACNq2C,MAAOA,MAAQ,KAGV/+C,EAAI,IACbyH,MAAMlD,MAAM,CACVmE,KAAM,QACNq2C,MAAOA,MAAQ/+C,IAEjBysB,MAAQH,SAASg0B,MAAMiB,OAElBjB,OAnBuBvB,OAqBhCuB,MAAM/7C,MAAQ,WACZ,IAAIrM,EAAiE0pD,UAAW9mD,EAAzEM,EAAIgW,MAAMnZ,OAAQ+J,EAAI0zC,MAAMz9C,OAAQ6Z,EAAI1M,KAAK,GAAI7D,EAAI6D,KAAK,GACjE,IAAKlN,EAAI,EAAGA,EAAIkD,IAAKlD,GAClB4C,EAAIsW,MAAMlZ,IAAI2/C,MAAQ3/C,EACvB4C,EAAE0mD,OAAS,EAEb,IAAKtpD,EAAI,EAAGA,EAAI8J,IAAK9J,EAEI,iBADvB4C,EAAI46C,MAAMx9C,IACGuN,SAAoB3K,EAAE2K,OAAS2L,MAAMtW,EAAE2K,SAC7B,iBAAZ3K,EAAEb,SAAoBa,EAAEb,OAASmX,MAAMtW,EAAEb,WAClDa,EAAE2K,OAAO+7C,SACT1mD,EAAEb,OAAOunD,OAEb,IAAKtpD,EAAI,EAAGA,EAAIkD,IAAKlD,EACnB4C,EAAIsW,MAAMlZ,GACNgI,MAAMpF,EAAEkF,KAAIlF,EAAEkF,EAAIgT,SAAS,IAAKlB,IAChC5R,MAAMpF,EAAEyY,KAAIzY,EAAEyY,EAAIP,SAAS,IAAKzR,IAChCrB,MAAMpF,EAAE6jD,MAAK7jD,EAAE6jD,GAAK7jD,EAAEkF,GACtBE,MAAMpF,EAAE8jD,MAAK9jD,EAAE8jD,GAAK9jD,EAAEyY,GAG5B,GADAgtC,UAAY,GACgB,mBAAjBG,aAA6B,IAAKxoD,EAAI,EAAGA,EAAI8J,IAAK9J,EAAGqoD,UAAUroD,IAAMwoD,aAAavjD,KAAK7D,KAAMo8C,MAAMx9C,GAAIA,QAAS,IAAKA,EAAI,EAAGA,EAAI8J,IAAK9J,EAAGqoD,UAAUroD,GAAKwoD,aAElK,GADAF,UAAY,GACgB,mBAAjBI,aAA6B,IAAK1oD,EAAI,EAAGA,EAAI8J,IAAK9J,EAAGsoD,UAAUtoD,IAAM0oD,aAAazjD,KAAK7D,KAAMo8C,MAAMx9C,GAAIA,QAAS,IAAKA,EAAI,EAAGA,EAAI8J,IAAK9J,EAAGsoD,UAAUtoD,GAAK0oD,aAElK,GADA5B,QAAU,GACY,mBAAXC,OAAuB,IAAK/mD,EAAI,EAAGA,EAAIkD,IAAKlD,EAAG8mD,QAAQ9mD,IAAM+mD,OAAO9hD,KAAK7D,KAAM8X,MAAMlZ,GAAIA,QAAS,IAAKA,EAAI,EAAGA,EAAIkD,IAAKlD,EAAG8mD,QAAQ9mD,GAAK+mD,OAClJ,SAASjsC,SAAS6uC,UAAWz8C,MAC3B,IAAKw8C,UAAW,CAEd,IADAA,UAAY,IAAIxpD,MAAMgD,GACjB8F,EAAI,EAAGA,EAAI9F,IAAK8F,EACnB0gD,UAAU1gD,GAAK,GAEjB,IAAKA,EAAI,EAAGA,EAAIc,IAAKd,EAAG,CACtB,IAAIpG,EAAI46C,MAAMx0C,GACd0gD,UAAU9mD,EAAE2K,OAAOoyC,OAAOv7C,KAAKxB,EAAEb,QACjC2nD,UAAU9mD,EAAEb,OAAO49C,OAAOv7C,KAAKxB,EAAE2K,SAIrC,IADA,IAA8DzF,EAA1D8hD,WAAaF,UAAU1pD,GAAIgJ,GAAK,EAAGwG,EAAIo6C,WAAW7pD,SAC7CiJ,EAAIwG,OAAQxH,MAAMF,EAAI8hD,WAAW5gD,GAAG2gD,YAAa,OAAO7hD,EACjE,OAAOwB,KAAKqB,SAAWuC,KAEzB,OAAOk7C,MAAMgB,UAEfhB,MAAMgB,OAAS,WACb,OAAOhB,MAAMvB,MAAM,KAErBuB,MAAM97C,KAAO,WACX,OAAO87C,MAAMvB,MAAM,IAErBuB,MAAMjsC,KAAO,WAEX,GADKA,OAAMA,KAAO3W,GAAGuJ,SAASoN,OAAOC,OAAO/O,aAAaqC,GAAG,kBAAmB22C,0BAA0B32C,GAAG,aAAcy5C,UAAUz5C,GAAG,gBAAiB62C,0BACnJjlD,UAAUvB,OAAQ,OAAOoc,KAC9B/a,KAAKsO,GAAG,kBAAmB82C,0BAA0B92C,GAAG,iBAAkBi3C,yBAAyB1hD,KAAKkX,OAMnG3W,GAAGwJ,OAAOo5C,MAAO74C,MAAO,OA0CjC,IAAIk5C,4BAA8B,GAAIE,4BAA8B,EAAGE,+BAAiCt8C,IA2DxG,SAASs9C,0BAA0Bp9C,OAAQq9C,WAIzC,OAHAtkD,GAAGwJ,OAAOvC,OAAQq9C,UAAW,OAAQ,WAAY,SACjDr9C,OAAOyM,MAAQzM,OACfA,OAAO+wC,MAAQuM,yBACRt9C,OAET,SAASu9C,+BAA+BhkD,KAAM+P,UAE5C,IADA,IAAImD,MAAQ,CAAElT,MACiB,OAAvBA,KAAOkT,MAAMwvB,QAEnB,GADA3yB,SAAS/P,OACJi4C,SAAWj4C,KAAKi4C,YAAc/6C,EAAI+6C,SAASl+C,QAE9C,IADA,IAAImD,EAAG+6C,WACE/6C,GAAK,GAAGgW,MAAM9U,KAAK65C,SAAS/6C,IAI3C,SAAS+mD,8BAA8BjkD,KAAM+P,UAE3C,IADA,IAAImD,MAAQ,CAAElT,MAAQkkD,OAAS,GACA,OAAvBlkD,KAAOkT,MAAMwvB,QAEnB,GADAwhB,OAAO9lD,KAAK4B,OACPi4C,SAAWj4C,KAAKi4C,YAAc/6C,EAAI+6C,SAASl+C,QAE9C,IADA,IAAYmD,EAAG+6C,SAAXj+C,GAAK,IACAA,EAAIkD,GAAGgW,MAAM9U,KAAK65C,SAASj+C,IAGxC,KAAgC,OAAxBgG,KAAOkkD,OAAOxhB,QACpB3yB,SAAS/P,MAGb,SAASmkD,4BAA4BtgD,GACnC,OAAOA,EAAEo0C,SAEX,SAASmM,yBAAyBvgD,GAChC,OAAOA,EAAEjJ,MAEX,SAASypD,wBAAwB3iD,EAAGC,GAClC,OAAOA,EAAE/G,MAAQ8G,EAAE9G,MAErB,SAASmpD,yBAAyB7wC,OAChC,OAAO1T,GAAGgG,MAAM0N,MAAM5N,KAAI,SAASiK,QACjC,OAAQA,OAAO0oC,UAAY,IAAI3yC,KAAI,SAASg/C,OAC1C,MAAO,CACL/8C,OAAQgI,OACRxT,OAAQuoD,cArGhB9kD,GAAG0hD,OAAO4C,UAAY,WACpB,IAAIngD,KAAO0gD,wBAAyBpM,SAAWkM,4BAA6BvpD,MAAQwpD,yBACpF,SAASN,UAAU3L,MACjB,IAAkCn4C,KAA9BukD,MAAQ,CAAEpM,MAAQjlC,MAAQ,GAE9B,IADAilC,KAAK5vC,MAAQ,EACkB,OAAvBvI,KAAOukD,MAAM7hB,QAEnB,GADAxvB,MAAM9U,KAAK4B,OACNwkD,OAASvM,SAASh5C,KAAK6kD,UAAW9jD,KAAMA,KAAKuI,UAAYrL,EAAIsnD,OAAOzqD,QAAS,CAEhF,IADA,IAAImD,EAAGsnD,OAAQF,QACNpnD,GAAK,GACZqnD,MAAMnmD,KAAKkmD,MAAQE,OAAOtnD,IAC1BonD,MAAM/0C,OAASvP,KACfskD,MAAM/7C,MAAQvI,KAAKuI,MAAQ,EAEzB3N,QAAOoF,KAAKpF,MAAQ,GACxBoF,KAAKi4C,SAAWuM,YAEZ5pD,QAAOoF,KAAKpF,OAASA,MAAMqE,KAAK6kD,UAAW9jD,KAAMA,KAAKuI,QAAU,UAC7DvI,KAAKi4C,SAQhB,OALAgM,8BAA8B9L,MAAM,SAASn4C,MAC3C,IAAIwkD,OAAQj1C,OACR5L,OAAS6gD,OAASxkD,KAAKi4C,WAAWuM,OAAO7gD,KAAKA,MAC9C/I,QAAU2U,OAASvP,KAAKuP,UAASA,OAAO3U,OAASoF,KAAKpF,UAErDsY,MA8BT,OA5BA4wC,UAAUngD,KAAO,SAAS7B,GACxB,OAAKxG,UAAUvB,QACf4J,KAAO7B,EACAgiD,WAFuBngD,MAIhCmgD,UAAU7L,SAAW,SAASn2C,GAC5B,OAAKxG,UAAUvB,QACfk+C,SAAWn2C,EACJgiD,WAFuB7L,UAIhC6L,UAAUlpD,MAAQ,SAASkH,GACzB,OAAKxG,UAAUvB,QACfa,MAAQkH,EACDgiD,WAFuBlpD,OAIhCkpD,UAAUW,QAAU,SAAStM,MAW3B,OAVIv9C,QACFopD,+BAA+B7L,MAAM,SAASn4C,MACxCA,KAAKi4C,WAAUj4C,KAAKpF,MAAQ,MAElCqpD,8BAA8B9L,MAAM,SAASn4C,MAC3C,IAAIuP,OACCvP,KAAKi4C,WAAUj4C,KAAKpF,OAASA,MAAMqE,KAAK6kD,UAAW9jD,KAAMA,KAAKuI,QAAU,IACzEgH,OAASvP,KAAKuP,UAAQA,OAAO3U,OAASoF,KAAKpF,WAG5Cu9C,MAEF2L,WAkDTtkD,GAAG0hD,OAAOwD,UAAY,WACpB,IAAIZ,UAAYtkD,GAAG0hD,OAAO4C,YAAa58C,KAAO,CAAE,EAAG,GACnD,SAAS4N,SAAS9U,KAAM8B,EAAGyV,GAAIC,IAC7B,IAAIygC,SAAWj4C,KAAKi4C,SAKpB,GAJAj4C,KAAK8B,EAAIA,EACT9B,KAAKqV,EAAIrV,KAAKuI,MAAQiP,GACtBxX,KAAKuX,GAAKA,GACVvX,KAAKwX,GAAKA,GACNygC,WAAa/6C,EAAI+6C,SAASl+C,QAAS,CACrC,IAAYmD,EAAG2F,EAAGgB,EAAd7J,GAAK,EAET,IADAud,GAAKvX,KAAKpF,MAAQ2c,GAAKvX,KAAKpF,MAAQ,IAC3BZ,EAAIkD,GACX4X,SAASjS,EAAIo1C,SAASj+C,GAAI8H,EAAG+B,EAAIhB,EAAEjI,MAAQ2c,GAAIC,IAC/C1V,GAAK+B,GAIX,SAAS0E,MAAMvI,MACb,IAAIi4C,SAAWj4C,KAAKi4C,SAAUp0C,EAAI,EAClC,GAAIo0C,WAAa/6C,EAAI+6C,SAASl+C,QAE5B,IADA,IAAYmD,EAARlD,GAAK,IACAA,EAAIkD,GAAG2G,EAAIP,KAAKX,IAAIkB,EAAG0E,MAAM0vC,SAASj+C,KAEjD,OAAO,EAAI6J,EAEb,SAAS6gD,UAAU7gD,EAAG7J,GACpB,IAAIkZ,MAAQ4wC,UAAU7kD,KAAK7D,KAAMyI,EAAG7J,GAEpC,OADA8a,SAAS5B,MAAM,GAAI,EAAGhM,KAAK,GAAIA,KAAK,GAAKqB,MAAM2K,MAAM,KAC9CA,MAOT,OALAwxC,UAAUx9C,KAAO,SAASpF,GACxB,OAAKxG,UAAUvB,QACfmN,KAAOpF,EACA4iD,WAFuBx9C,MAIzB28C,0BAA0Ba,UAAWZ,YAE9CtkD,GAAG0hD,OAAOyD,IAAM,WACd,IAAI/pD,MAAQgqD,OAAQjhD,KAAOkhD,yBAA0B5C,WAAa,EAAGC,SAAW,EAAG4C,SAAW,EAC9F,SAASH,IAAIj1C,MACX,IAE2ZlM,EAFvZtG,EAAIwS,KAAK3V,OAAQmJ,OAASwM,KAAKpK,KAAI,SAASzB,EAAG7J,GACjD,OAAQY,MAAMqE,KAAK0lD,IAAK9gD,EAAG7J,MACzB0H,IAA4B,mBAAfugD,WAA4BA,WAAW1mD,MAAMH,KAAME,WAAa2mD,YAAa8C,IAA0B,mBAAb7C,SAA0BA,SAAS3mD,MAAMH,KAAME,WAAa4mD,UAAYxgD,EAAGyB,EAAIG,KAAKZ,IAAIY,KAAKqC,IAAIo/C,IAAM7nD,IAAyB,mBAAb4nD,SAA0BA,SAASvpD,MAAMH,KAAME,WAAawpD,WAAYE,GAAK7hD,GAAK4hD,GAAK,GAAK,EAAI,GAAIjiD,IAAMtD,GAAGsD,IAAII,QAAS2C,EAAI/C,KAAOiiD,GAAK7nD,EAAI8nD,IAAMliD,IAAM,EAAG62C,MAAQn6C,GAAG4G,MAAMlJ,GAAI+nD,KAAO,GAevZ,OAdY,MAARthD,MAAcg2C,MAAMh2C,KAAKA,OAASkhD,yBAA2B,SAAS7qD,EAAGgJ,GAC3E,OAAOE,OAAOF,GAAKE,OAAOlJ,IACxB,SAASA,EAAGgJ,GACd,OAAOW,KAAK+L,KAAK1V,GAAI0V,KAAK1M,MAE5B22C,MAAMjzC,SAAQ,SAAS1M,GACrBirD,KAAKjrD,GAAK,CACR0V,KAAMA,KAAK1V,GACXY,MAAO4I,EAAIN,OAAOlJ,GAClBioD,WAAYvgD,EACZwgD,SAAUxgD,GAAK8B,EAAIqC,EAAIm/C,GACvBF,SAAU3hD,MAGP8hD,KA2BT,OAzBAN,IAAI/pD,MAAQ,SAASsL,GACnB,OAAK5K,UAAUvB,QACfa,MAAQsL,EACDy+C,KAFuB/pD,OAIhC+pD,IAAIhhD,KAAO,SAASuC,GAClB,OAAK5K,UAAUvB,QACf4J,KAAOuC,EACAy+C,KAFuBhhD,MAIhCghD,IAAI1C,WAAa,SAAS/7C,GACxB,OAAK5K,UAAUvB,QACfkoD,WAAa/7C,EACNy+C,KAFuB1C,YAIhC0C,IAAIzC,SAAW,SAASh8C,GACtB,OAAK5K,UAAUvB,QACfmoD,SAAWh8C,EACJy+C,KAFuBzC,UAIhCyC,IAAIG,SAAW,SAAS5+C,GACtB,OAAK5K,UAAUvB,QACf+qD,SAAW5+C,EACJy+C,KAFuBG,UAIzBH,KAET,IAAIE,yBAA2B,GA0D/B,SAASK,iBAAiBrhD,GACxB,OAAOA,EAAE/B,EAEX,SAASqjD,iBAAiBthD,GACxB,OAAOA,EAAEwR,EAEX,SAAS+vC,mBAAmBvhD,EAAGwW,GAAIhF,GACjCxR,EAAEwW,GAAKA,GACPxW,EAAEwR,EAAIA,EAjER7V,GAAG0hD,OAAOqD,MAAQ,WAChB,IAAIrhD,OAASmE,YAAawB,MAAQw8C,4BAA6B5wB,OAAS6wB,0BAA2B/I,IAAM6I,mBAAoBtjD,EAAIojD,iBAAkB7vC,EAAI8vC,iBACvJ,SAASZ,MAAM70C,KAAMiqC,OACnB,KAAMz8C,EAAIwS,KAAK3V,QAAS,OAAO2V,KAC/B,IAAI61C,OAAS71C,KAAKpK,KAAI,SAASzB,EAAG7J,GAChC,OAAOkJ,OAAOjE,KAAKslD,MAAO1gD,EAAG7J,MAE3B2mC,OAAS4kB,OAAOjgD,KAAI,SAASzB,GAC/B,OAAOA,EAAEyB,KAAI,SAAS9B,EAAGxJ,GACvB,MAAO,CAAE8H,EAAE7C,KAAKslD,MAAO/gD,EAAGxJ,GAAIqb,EAAEpW,KAAKslD,MAAO/gD,EAAGxJ,UAG/CwrD,OAAS38C,MAAM5J,KAAKslD,MAAO5jB,OAAQgZ,OACvC4L,OAAS/lD,GAAGoF,QAAQ2gD,OAAQC,QAC5B7kB,OAASnhC,GAAGoF,QAAQ+7B,OAAQ6kB,QAC5B,IAC0BtoD,EAAGlD,EAAGgJ,EAAGpG,EAD/B6oD,QAAUhxB,OAAOx1B,KAAKslD,MAAO5jB,OAAQgZ,OACrC71C,EAAIyhD,OAAO,GAAGxrD,OAClB,IAAKiJ,EAAI,EAAGA,EAAIc,IAAKd,EAEnB,IADAu5C,IAAIt9C,KAAKslD,MAAOgB,OAAO,GAAGviD,GAAIpG,EAAI6oD,QAAQziD,GAAI29B,OAAO,GAAG39B,GAAG,IACtDhJ,EAAI,EAAGA,EAAIkD,IAAKlD,EACnBuiD,IAAIt9C,KAAKslD,MAAOgB,OAAOvrD,GAAGgJ,GAAIpG,GAAK+jC,OAAO3mC,EAAI,GAAGgJ,GAAG,GAAI29B,OAAO3mC,GAAGgJ,GAAG,IAGzE,OAAO0M,KAgCT,OA9BA60C,MAAMrhD,OAAS,SAASpB,GACtB,OAAKxG,UAAUvB,QACfmJ,OAASpB,EACFyiD,OAFuBrhD,QAIhCqhD,MAAM17C,MAAQ,SAAS/G,GACrB,OAAKxG,UAAUvB,QACf8O,MAAqB,mBAAN/G,EAAmBA,EAAI4jD,sBAAsB39C,IAAIjG,IAAMujD,4BAC/Dd,OAFuB17C,OAIhC07C,MAAM9vB,OAAS,SAAS3yB,GACtB,OAAKxG,UAAUvB,QACf06B,OAAsB,mBAAN3yB,EAAmBA,EAAI6jD,uBAAuB59C,IAAIjG,IAAMwjD,0BACjEf,OAFuB9vB,QAIhC8vB,MAAMziD,EAAI,SAAS2H,GACjB,OAAKnO,UAAUvB,QACf+H,EAAI2H,EACG86C,OAFuBziD,GAIhCyiD,MAAMlvC,EAAI,SAAS5L,GACjB,OAAKnO,UAAUvB,QACfsb,EAAI5L,EACG86C,OAFuBlvC,GAIhCkvC,MAAMhI,IAAM,SAAS9yC,GACnB,OAAKnO,UAAUvB,QACfwiD,IAAM9yC,EACC86C,OAFuBhI,KAIzBgI,OAYT,IAAImB,sBAAwBlmD,GAAG8F,IAAI,CACjC,aAAc,SAASoK,MACrB,IAAqB1V,EAAGgJ,EAApB9F,EAAIwS,KAAK3V,OAAc4I,IAAM+M,KAAKpK,IAAIsgD,yBAA0BC,KAAOn2C,KAAKpK,IAAIwgD,0BAA2BnM,MAAQn6C,GAAG4G,MAAMlJ,GAAGyG,MAAK,SAASjC,EAAGC,GAClJ,OAAOgB,IAAIjB,GAAKiB,IAAIhB,MAClBoT,IAAM,EAAGgxC,OAAS,EAAGC,KAAO,GAAIC,QAAU,GAC9C,IAAKjsD,EAAI,EAAGA,EAAIkD,IAAKlD,EACnBgJ,EAAI22C,MAAM3/C,GACN+a,IAAMgxC,QACRhxC,KAAO8wC,KAAK7iD,GACZgjD,KAAK5nD,KAAK4E,KAEV+iD,QAAUF,KAAK7iD,GACfijD,QAAQ7nD,KAAK4E,IAGjB,OAAOijD,QAAQh2B,UAAUpmB,OAAOm8C,OAElC/1B,QAAS,SAASvgB,MAChB,OAAOlQ,GAAG4G,MAAMsJ,KAAK3V,QAAQk2B,WAE/B,QAAWo1B,8BAETM,uBAAyBnmD,GAAG8F,IAAI,CAClC4gD,WAAY,SAASx2C,MACnB,IAA6D1V,EAAGgJ,EAAGpG,EAA/DM,EAAIwS,KAAK3V,OAAQ+J,EAAI4L,KAAK,GAAG3V,OAAQ8rD,KAAO,GAAIljD,IAAM,EAAY0X,GAAK,GAC3E,IAAKrX,EAAI,EAAGA,EAAIc,IAAKd,EAAG,CACtB,IAAKhJ,EAAI,EAAG4C,EAAI,EAAG5C,EAAIkD,EAAGlD,IAAK4C,GAAK8S,KAAK1V,GAAGgJ,GAAG,GAC3CpG,EAAI+F,MAAKA,IAAM/F,GACnBipD,KAAKznD,KAAKxB,GAEZ,IAAKoG,EAAI,EAAGA,EAAIc,IAAKd,EACnBqX,GAAGrX,IAAML,IAAMkjD,KAAK7iD,IAAM,EAE5B,OAAOqX,IAET8rC,OAAQ,SAASz2C,MACf,IAAgD1V,EAAGgJ,EAAG6C,EAAG8xC,GAAIyO,GAAIC,GAAI9uC,GAAI3a,EAAG0pD,GAAxEppD,EAAIwS,KAAK3V,OAAQ+H,EAAI4N,KAAK,GAAI5L,EAAIhC,EAAE/H,OAAwCsgB,GAAK,GAErF,IADAA,GAAG,GAAKzd,EAAI0pD,GAAK,EACZtjD,EAAI,EAAGA,EAAIc,IAAKd,EAAG,CACtB,IAAKhJ,EAAI,EAAG29C,GAAK,EAAG39C,EAAIkD,IAAKlD,EAAG29C,IAAMjoC,KAAK1V,GAAGgJ,GAAG,GACjD,IAAKhJ,EAAI,EAAGosD,GAAK,EAAG7uC,GAAKzV,EAAEkB,GAAG,GAAKlB,EAAEkB,EAAI,GAAG,GAAIhJ,EAAIkD,IAAKlD,EAAG,CAC1D,IAAK6L,EAAI,EAAGwgD,IAAM32C,KAAK1V,GAAGgJ,GAAG,GAAK0M,KAAK1V,GAAGgJ,EAAI,GAAG,KAAO,EAAIuU,IAAK1R,EAAI7L,IAAK6L,EACxEwgD,KAAO32C,KAAK7J,GAAG7C,GAAG,GAAK0M,KAAK7J,GAAG7C,EAAI,GAAG,IAAMuU,GAE9C6uC,IAAMC,GAAK32C,KAAK1V,GAAGgJ,GAAG,GAExBqX,GAAGrX,GAAKpG,GAAK+6C,GAAKyO,GAAKzO,GAAKpgC,GAAK,EAC7B3a,EAAI0pD,KAAIA,GAAK1pD,GAEnB,IAAKoG,EAAI,EAAGA,EAAIc,IAAKd,EAAGqX,GAAGrX,IAAMsjD,GACjC,OAAOjsC,IAETksC,OAAQ,SAAS72C,MACf,IAAoD1V,EAAGgJ,EAAGpG,EAAtDM,EAAIwS,KAAK3V,OAAQ+J,EAAI4L,KAAK,GAAG3V,OAAQ8L,EAAI,EAAI3I,EAAYmd,GAAK,GAClE,IAAKrX,EAAI,EAAGA,EAAIc,IAAKd,EAAG,CACtB,IAAKhJ,EAAI,EAAG4C,EAAI,EAAG5C,EAAIkD,EAAGlD,IAAK4C,GAAK8S,KAAK1V,GAAGgJ,GAAG,GAC/C,GAAIpG,EAAG,IAAK5C,EAAI,EAAGA,EAAIkD,EAAGlD,IAAK0V,KAAK1V,GAAGgJ,GAAG,IAAMpG,OAAQ,IAAK5C,EAAI,EAAGA,EAAIkD,EAAGlD,IAAK0V,KAAK1V,GAAGgJ,GAAG,GAAK6C,EAElG,IAAK7C,EAAI,EAAGA,EAAIc,IAAKd,EAAGqX,GAAGrX,GAAK,EAChC,OAAOqX,IAETmsC,KAAMlB,4BAER,SAASD,4BAA4B31C,MACnC,OAAOlQ,GAAG4G,MAAMsJ,KAAK3V,QAEvB,SAASurD,0BAA0B51C,MAEjC,IADA,IAAI1M,GAAK,EAAGc,EAAI4L,KAAK,GAAG3V,OAAQsgB,GAAK,KAC5BrX,EAAIc,GAAGuW,GAAGrX,GAAK,EACxB,OAAOqX,GAET,SAASurC,wBAAwBrlD,OAE/B,IADA,IAAmCsF,EAA/B7L,EAAI,EAAGgJ,EAAI,EAAGQ,EAAIjD,MAAM,GAAG,GAAOrD,EAAIqD,MAAMxG,OAC1CC,EAAIkD,IAAKlD,GACR6L,EAAItF,MAAMvG,GAAG,IAAMwJ,IACtBR,EAAIhJ,EACJwJ,EAAIqC,GAGR,OAAO7C,EAET,SAAS8iD,yBAAyBjiD,GAChC,OAAOA,EAAE4iD,OAAOC,mBAAoB,GAEtC,SAASA,mBAAmBvjD,EAAGU,GAC7B,OAAOV,EAAIU,EAAE,GAgDf,SAAS8iD,8BAA8BvgD,MAAOlD,QAC5C,OAAO0jD,4BAA4BxgD,MAAO9C,KAAKia,KAAKja,KAAK4V,IAAIhW,OAAOnJ,QAAUuJ,KAAKwZ,IAAM,IAE3F,SAAS8pC,4BAA4BxgD,MAAOlJ,GAE1C,IADA,IAAI4E,GAAK,EAAGH,GAAKyE,MAAM,GAAItC,GAAKsC,MAAM,GAAKzE,GAAKzE,EAAGG,EAAI,KAC9CyE,GAAK5E,GAAGG,EAAEyE,GAAKgC,EAAIhC,EAAIH,EAChC,OAAOtE,EAET,SAASwpD,yBAAyB3jD,QAChC,MAAO,CAAE1D,GAAGkD,IAAIQ,QAAS1D,GAAGmD,IAAIO,SA2ClC,SAAS4jD,mBAAmBplD,EAAGC,GAC7B,OAAOD,EAAE9G,MAAQ+G,EAAE/G,MAErB,SAASmsD,qBAAqBrlD,EAAGC,GAC/B,IAAIkB,EAAInB,EAAEslD,WACVtlD,EAAEslD,WAAarlD,EACfA,EAAEslD,WAAavlD,EACfC,EAAEqlD,WAAankD,EACfA,EAAEokD,WAAatlD,EAEjB,SAASulD,qBAAqBxlD,EAAGC,GAC/BD,EAAEslD,WAAarlD,EACfA,EAAEslD,WAAavlD,EAEjB,SAASylD,yBAAyBzlD,EAAGC,GACnC,IAAI4V,GAAK5V,EAAEG,EAAIJ,EAAEI,EAAG0V,GAAK7V,EAAE0T,EAAI3T,EAAE2T,EAAG+xC,GAAK1lD,EAAE0d,EAAIzd,EAAEyd,EACjD,MAAO,KAAOgoC,GAAKA,GAAK7vC,GAAKA,GAAKC,GAAKA,GAEzC,SAAS6vC,uBAAuBrnD,MAC9B,IAAMkT,MAAQlT,KAAKi4C,YAAe/6C,EAAIgW,MAAMnZ,QAA5C,CACA,IAAImZ,MAA6ExR,EAAGC,EAAGkB,EAAG7I,EAAGgJ,EAAG6C,EAAG3I,EAAxFoqD,KAAO/gD,IAAUghD,MAAQhhD,IAAUihD,KAAOjhD,IAAUkhD,MAAQlhD,IAYvE,GALA2M,MAAMxM,QAAQghD,qBACdhmD,EAAIwR,MAAM,IACRpR,GAAKJ,EAAE0d,EACT1d,EAAE2T,EAAI,EACNqpB,MAAMh9B,GACFxE,EAAI,KACNyE,EAAIuR,MAAM,IACRpR,EAAIH,EAAEyd,EACRzd,EAAE0T,EAAI,EACNqpB,MAAM/8B,GACFzE,EAAI,GAQN,IANAyqD,oBAAoBjmD,EAAGC,EADvBkB,EAAIqQ,MAAM,IAEVwrB,MAAM77B,GACNkkD,qBAAqBrlD,EAAGmB,GACxBnB,EAAEulD,WAAapkD,EACfkkD,qBAAqBlkD,EAAGlB,GACxBA,EAAID,EAAEslD,WACDhtD,EAAI,EAAGA,EAAIkD,EAAGlD,IAAK,CACtB2tD,oBAAoBjmD,EAAGC,EAAGkB,EAAIqQ,MAAMlZ,IACpC,IAAI4tD,MAAQ,EAAGjQ,GAAK,EAAGyO,GAAK,EAC5B,IAAKpjD,EAAIrB,EAAEqlD,WAAYhkD,IAAMrB,EAAGqB,EAAIA,EAAEgkD,WAAYrP,KAChD,GAAIwP,yBAAyBnkD,EAAGH,GAAI,CAClC+kD,MAAQ,EACR,MAGJ,GAAa,GAATA,MACF,IAAK/hD,EAAInE,EAAEulD,WAAYphD,IAAM7C,EAAEikD,aACzBE,yBAAyBthD,EAAGhD,GADSgD,EAAIA,EAAEohD,WAAYb,MAM3DwB,OACEjQ,GAAKyO,IAAMzO,IAAMyO,IAAMzkD,EAAEyd,EAAI1d,EAAE0d,EAAG8nC,qBAAqBxlD,EAAGC,EAAIqB,GAASkkD,qBAAqBxlD,EAAImE,EAAGlE,GACvG3H,MAEA+sD,qBAAqBrlD,EAAGmB,GACxBlB,EAAIkB,EACJ67B,MAAM77B,IAKd,IAAIkb,IAAMupC,KAAOC,MAAQ,EAAGvpC,IAAMwpC,KAAOC,MAAQ,EAAGjkB,GAAK,EACzD,IAAKxpC,EAAI,EAAGA,EAAIkD,EAAGlD,KACjB6I,EAAIqQ,MAAMlZ,IACR8H,GAAKic,GACPlb,EAAEwS,GAAK2I,GACPwlB,GAAKlgC,KAAKX,IAAI6gC,GAAI3gC,EAAEuc,EAAI9b,KAAKU,KAAKnB,EAAEf,EAAIe,EAAEf,EAAIe,EAAEwS,EAAIxS,EAAEwS,IAExDrV,KAAKof,EAAIokB,GACTtwB,MAAMxM,QAAQmhD,sBA3Dd,SAASnpB,MAAM1+B,MACbsnD,KAAOhkD,KAAKZ,IAAI1C,KAAK8B,EAAI9B,KAAKof,EAAGkoC,MACjCC,KAAOjkD,KAAKX,IAAI3C,KAAK8B,EAAI9B,KAAKof,EAAGmoC,MACjCC,KAAOlkD,KAAKZ,IAAI1C,KAAKqV,EAAIrV,KAAKof,EAAGooC,MACjCC,KAAOnkD,KAAKX,IAAI3C,KAAKqV,EAAIrV,KAAKof,EAAGqoC,OAyDrC,SAASC,mBAAmB1nD,MAC1BA,KAAKgnD,WAAahnD,KAAKinD,WAAajnD,KAEtC,SAAS6nD,qBAAqB7nD,aACrBA,KAAKgnD,kBACLhnD,KAAKinD,WAEd,SAASa,wBAAwB9nD,KAAM8B,EAAGuT,EAAGxP,GAC3C,IAAIoyC,SAAWj4C,KAAKi4C,SAIpB,GAHAj4C,KAAK8B,EAAIA,GAAK+D,EAAI7F,KAAK8B,EACvB9B,KAAKqV,EAAIA,GAAKxP,EAAI7F,KAAKqV,EACvBrV,KAAKof,GAAKvZ,EACNoyC,SAEF,IADA,IAAIj+C,GAAK,EAAGkD,EAAI+6C,SAASl+C,SAChBC,EAAIkD,GAAG4qD,wBAAwB7P,SAASj+C,GAAI8H,EAAGuT,EAAGxP,GAG/D,SAAS8hD,oBAAoBjmD,EAAGC,EAAGkB,GACjC,IAAIklD,GAAKrmD,EAAE0d,EAAIvc,EAAEuc,EAAG7H,GAAK5V,EAAEG,EAAIJ,EAAEI,EAAG0V,GAAK7V,EAAE0T,EAAI3T,EAAE2T,EACjD,GAAI0yC,KAAOxwC,IAAMC,IAAK,CACpB,IAAIutC,GAAKpjD,EAAEyd,EAAIvc,EAAEuc,EAAG4oC,GAAKzwC,GAAKA,GAAKC,GAAKA,GAGpC1V,EAAI,KADRimD,IAAMA,KADNhD,IAAMA,MAEoB,EAAIiD,IAAK3yC,EAAI/R,KAAKU,KAAKV,KAAKX,IAAI,EAAG,EAAIoiD,IAAMgD,GAAKC,KAAOD,IAAMC,IAAMD,GAAKhD,GAAKA,MAAQ,EAAIiD,IACrHnlD,EAAEf,EAAIJ,EAAEI,EAAIA,EAAIyV,GAAKlC,EAAImC,GACzB3U,EAAEwS,EAAI3T,EAAE2T,EAAIvT,EAAI0V,GAAKnC,EAAIkC,QAEzB1U,EAAEf,EAAIJ,EAAEI,EAAIimD,GACZllD,EAAEwS,EAAI3T,EAAE2T,EAuHZ,SAAS4yC,yBAAyBvmD,EAAGC,GACnC,OAAOD,EAAE6N,QAAU5N,EAAE4N,OAAS,EAAI,EAEpC,SAAS24C,mBAAmB1kD,GAC1B,IAAIy0C,SAAWz0C,EAAEy0C,SACjB,OAAOA,SAASl+C,OAASk+C,SAAS,GAAKz0C,EAAEkB,EAE3C,SAASyjD,oBAAoB3kD,GAC3B,IAA2BtG,EAAvB+6C,SAAWz0C,EAAEy0C,SACjB,OAAQ/6C,EAAI+6C,SAASl+C,QAAUk+C,SAAS/6C,EAAI,GAAKsG,EAAEkB,EAErD,SAAS0jD,mBAAmBC,GAAIC,GAAI3lB,OAClC,IAAI4lB,OAAS5lB,OAAS2lB,GAAGtuD,EAAIquD,GAAGruD,GAChCsuD,GAAGzlD,GAAK0lD,OACRD,GAAGrrD,GAAK0lC,MACR0lB,GAAGxlD,GAAK0lD,OACRD,GAAG7+C,GAAKk5B,MACR2lB,GAAGxkD,GAAK6+B,MAWV,SAAS6lB,uBAAuBC,IAAKjlD,EAAGklD,UACtC,OAAOD,IAAI/mD,EAAE6N,SAAW/L,EAAE+L,OAASk5C,IAAI/mD,EAAIgnD,SAsD7C,SAASC,sBAAsB3oD,MAC7B,IAAIi4C,SAAWj4C,KAAKi4C,SACpB,OAAOA,UAAYA,SAASl+C,OAAS4uD,sBAAsB1Q,SAAS,IAAMj4C,KAE5E,SAAS4oD,uBAAuB5oD,MAC9B,IAA8B9C,EAA1B+6C,SAAWj4C,KAAKi4C,SACpB,OAAOA,WAAa/6C,EAAI+6C,SAASl+C,QAAU6uD,uBAAuB3Q,SAAS/6C,EAAI,IAAM8C,KAoJvF,SAAS6oD,yBAAyB7oD,MAChC,MAAO,CACL8B,EAAG9B,KAAK8B,EACRuT,EAAGrV,KAAKqV,EACRkC,GAAIvX,KAAKuX,GACTC,GAAIxX,KAAKwX,IAGb,SAASsxC,qBAAqB9oD,KAAMiV,SAClC,IAAInT,EAAI9B,KAAK8B,EAAImT,QAAQ,GAAII,EAAIrV,KAAKqV,EAAIJ,QAAQ,GAAIsC,GAAKvX,KAAKuX,GAAKtC,QAAQ,GAAKA,QAAQ,GAAIuC,GAAKxX,KAAKwX,GAAKvC,QAAQ,GAAKA,QAAQ,GASlI,OARIsC,GAAK,IACPzV,GAAKyV,GAAK,EACVA,GAAK,GAEHC,GAAK,IACPnC,GAAKmC,GAAK,EACVA,GAAK,GAEA,CACL1V,EAAGA,EACHuT,EAAGA,EACHkC,GAAIA,GACJC,GAAIA,IAsCR,SAASuxC,eAAeptC,QACtB,IAAItV,MAAQsV,OAAO,GAAIrV,KAAOqV,OAAOA,OAAO5hB,OAAS,GACrD,OAAOsM,MAAQC,KAAO,CAAED,MAAOC,MAAS,CAAEA,KAAMD,OAElD,SAAS2iD,cAAcjtC,OACrB,OAAOA,MAAMktC,YAAcltC,MAAMktC,cAAgBF,eAAehtC,MAAM3V,SAExE,SAAS8iD,kBAAkBvtC,OAAQvV,MAAO+iD,cAAe9oB,aACvD,IAAI5mB,EAAI0vC,cAAcxtC,OAAO,GAAIA,OAAO,IAAK3hB,EAAIqmC,YAAYj6B,MAAM,GAAIA,MAAM,IAC7E,OAAO,SAAStE,GACd,OAAO9H,EAAEyf,EAAE3X,KAGf,SAASsnD,cAAcztC,OAAQ0tC,MAC7B,IAAsE9xC,GAAlE/S,GAAK,EAAGC,GAAKkX,OAAO5hB,OAAS,EAAGogB,GAAKwB,OAAOnX,IAAK4V,GAAKuB,OAAOlX,IAOjE,OANI2V,GAAKD,KACP5C,GAAK/S,GAAIA,GAAKC,GAAIA,GAAK8S,GACvBA,GAAK4C,GAAIA,GAAKC,GAAIA,GAAK7C,IAEzBoE,OAAOnX,IAAM6kD,KAAK9lD,MAAM4W,IACxBwB,OAAOlX,IAAM4kD,KAAK9rC,KAAKnD,IAChBuB,OAET,SAAS2tC,kBAAkB7rD,MACzB,OAAOA,KAAO,CACZ8F,MAAO,SAASzB,GACd,OAAOwB,KAAKC,MAAMzB,EAAIrE,MAAQA,MAEhC8f,KAAM,SAASzb,GACb,OAAOwB,KAAKia,KAAKzb,EAAIrE,MAAQA,OAE7B8rD,sBA/oBN/pD,GAAG0hD,OAAOsI,UAAY,WACpB,IAAIC,WAAY,EAAMC,OAAS9E,OAAQ+E,OAAS9C,yBAA0B+C,OAASjD,8BACnF,SAAS6C,UAAU95C,KAAM1V,GAEvB,IADA,IAAwI6vD,IAAsF/nD,EAA1NgoD,KAAO,GAAI5mD,OAASwM,KAAKpK,IAAIokD,OAAQtuD,MAAOgL,MAAQujD,OAAO1qD,KAAK7D,KAAM8H,OAAQlJ,GAAI+vD,WAAaH,OAAO3qD,KAAK7D,KAAMgL,MAAOlD,OAAQlJ,GAAiBkD,GAARlD,GAAK,EAAOkJ,OAAOnJ,QAAQ+J,EAAIimD,WAAWhwD,OAAS,EAAG8L,EAAI4jD,UAAY,EAAI,EAAIvsD,IAClNlD,EAAI8J,IACX+lD,IAAMC,KAAK9vD,GAAK,IACZud,GAAKwyC,WAAW/vD,EAAI,IAAM6vD,IAAI/nD,EAAIioD,WAAW/vD,IACjD6vD,IAAIx0C,EAAI,EAEV,GAAIvR,EAAI,EAEN,IADA9J,GAAK,IACIA,EAAIkD,IACX4E,EAAIoB,OAAOlJ,KACFoM,MAAM,IAAMtE,GAAKsE,MAAM,MAC9ByjD,IAAMC,KAAKtqD,GAAG4E,OAAO2lD,WAAYjoD,EAAG,EAAGgC,GAAK,IACxCuR,GAAKxP,EACTgkD,IAAIzrD,KAAKsR,KAAK1V,KAIpB,OAAO8vD,KAwBT,OAtBAN,UAAU5uD,MAAQ,SAASkH,GACzB,OAAKxG,UAAUvB,QACf2vD,OAAS5nD,EACF0nD,WAFuBE,QAIhCF,UAAUpjD,MAAQ,SAAStE,GACzB,OAAKxG,UAAUvB,QACf4vD,OAASx/B,WAAWroB,GACb0nD,WAFuBG,QAIhCH,UAAUM,KAAO,SAAShoD,GACxB,OAAKxG,UAAUvB,QACf6vD,OAAsB,iBAAN9nD,EAAiB,SAASsE,OACxC,OAAOwgD,4BAA4BxgD,MAAOtE,IACxCqoB,WAAWroB,GACR0nD,WAJuBI,QAMhCJ,UAAUC,UAAY,SAAS3nD,GAC7B,OAAKxG,UAAUvB,QACf0vD,YAAc3nD,EACP0nD,WAFuBC,WAIzBD,WAaThqD,GAAG0hD,OAAO8I,KAAO,WACf,IAA8FzmB,OAA1FugB,UAAYtkD,GAAG0hD,OAAO4C,YAAYngD,KAAKmjD,oBAAqB7xC,QAAU,EAAG/N,KAAO,CAAE,EAAG,GACzF,SAAS8iD,KAAKnmD,EAAG7J,GACf,IAAIkZ,MAAQ4wC,UAAU7kD,KAAK7D,KAAMyI,EAAG7J,GAAIm+C,KAAOjlC,MAAM,GAAIU,EAAI1M,KAAK,GAAI7D,EAAI6D,KAAK,GAAIkY,EAAc,MAAVmkB,OAAiBjgC,KAAKU,KAAyB,mBAAXu/B,OAAwBA,OAAS,WAC1J,OAAOA,QAOT,GALA4U,KAAKr2C,EAAIq2C,KAAK9iC,EAAI,EAClB4uC,8BAA8B9L,MAAM,SAASt0C,GAC3CA,EAAEub,GAAKA,EAAEvb,EAAEjJ,UAEbqpD,8BAA8B9L,KAAMkP,wBAChCpyC,QAAS,CACX,IAAImyC,GAAKnyC,SAAWsuB,OAAS,EAAIjgC,KAAKX,IAAI,EAAIw1C,KAAK/4B,EAAIxL,EAAG,EAAIukC,KAAK/4B,EAAI/b,IAAM,EAC7E4gD,8BAA8B9L,MAAM,SAASt0C,GAC3CA,EAAEub,GAAKgoC,MAETnD,8BAA8B9L,KAAMkP,wBACpCpD,8BAA8B9L,MAAM,SAASt0C,GAC3CA,EAAEub,GAAKgoC,MAIX,OADAU,wBAAwB3P,KAAMvkC,EAAI,EAAGvQ,EAAI,EAAGkgC,OAAS,EAAI,EAAIjgC,KAAKX,IAAI,EAAIw1C,KAAK/4B,EAAIxL,EAAG,EAAIukC,KAAK/4B,EAAI/b,IAC5F6P,MAiBT,OAfA82C,KAAK9iD,KAAO,SAAShB,GACnB,OAAK5K,UAAUvB,QACfmN,KAAOhB,EACA8jD,MAFuB9iD,MAIhC8iD,KAAKzmB,OAAS,SAASr9B,GACrB,OAAK5K,UAAUvB,QACfwpC,OAAc,MAALr9B,GAA0B,mBAANA,EAAmBA,GAAKA,EAC9C8jD,MAFuBzmB,QAIhCymB,KAAK/0C,QAAU,SAAS/O,GACtB,OAAK5K,UAAUvB,QACfkb,SAAW/O,EACJ8jD,MAFuB/0C,SAIzB4uC,0BAA0BmG,KAAMlG,YAmHzCtkD,GAAG0hD,OAAOlL,KAAO,WACf,IAAI8N,UAAYtkD,GAAG0hD,OAAO4C,YAAYngD,KAAK,MAAM/I,MAAM,MAAOqvD,WAAahC,yBAA0B/gD,KAAO,CAAE,EAAG,GAAKgjD,SAAW,KACjI,SAASlU,KAAKnyC,EAAG7J,GACf,IAAIkZ,MAAQ4wC,UAAU7kD,KAAK7D,KAAMyI,EAAG7J,GAAImwD,MAAQj3C,MAAM,GAAIk3C,MAkB5D,SAASC,SAASF,OAChB,IAGsBG,MAHlBF,MAAQ,CACV5yB,EAAG,KACHygB,SAAU,CAAEkS,QACXI,MAAQ,CAAEH,OACb,KAAgC,OAAxBE,MAAQC,MAAM7nB,QACpB,IAAK,IAA+B4hB,MAA3BrM,SAAWqS,MAAMrS,SAAiBj+C,EAAI,EAAGkD,EAAI+6C,SAASl+C,OAAQC,EAAIkD,IAAKlD,EAC9EuwD,MAAMnsD,MAAM65C,SAASj+C,GAAKsqD,MAAQ,CAChCp+C,EAAG+xC,SAASj+C,GACZuV,OAAQ+6C,MACRrS,UAAWqM,MAAQrM,SAASj+C,GAAGi+C,WAAaqM,MAAMplD,SAAW,GAC7Ds4B,EAAG,KACH91B,EAAG,KACH+H,EAAG,EACH3F,EAAG,EACHjB,EAAG,EACH5F,EAAG,EACHyH,EAAG,KACH1K,EAAGA,IACF0H,EAAI4iD,OAGX,OAAO8F,MAAMnS,SAAS,GAxC4CoS,CAASF,OAG3E,GAFAlG,8BAA8BmG,MAAOI,WAAYJ,MAAM76C,OAAOzL,GAAKsmD,MAAM3gD,EACzEu6C,+BAA+BoG,MAAOK,YAClCP,SAAUlG,+BAA+BmG,MAAOO,cAAgB,CAClE,IAAIvoD,KAAOgoD,MAAO5nD,MAAQ4nD,MAAOpE,OAASoE,MAC1CnG,+BAA+BmG,OAAO,SAASnqD,MACzCA,KAAK8B,EAAIK,KAAKL,IAAGK,KAAOnC,MACxBA,KAAK8B,EAAIS,MAAMT,IAAGS,MAAQvC,MAC1BA,KAAKuI,MAAQw9C,OAAOx9C,QAAOw9C,OAAS/lD,SAE1C,IAAI2qD,GAAKV,WAAW9nD,KAAMI,OAAS,EAAIJ,KAAKL,EAAGi7C,GAAK71C,KAAK,IAAM3E,MAAMT,EAAImoD,WAAW1nD,MAAOJ,MAAQ,EAAIwoD,IAAKxN,GAAKj2C,KAAK,IAAM6+C,OAAOx9C,OAAS,GAC5Iy7C,+BAA+BmG,OAAO,SAASnqD,MAC7CA,KAAK8B,GAAK9B,KAAK8B,EAAI6oD,IAAM5N,GACzB/8C,KAAKqV,EAAIrV,KAAKuI,MAAQ40C,MAG1B,OAAOjqC,MA0BT,SAASs3C,UAAUhnD,GACjB,IAAIy0C,SAAWz0C,EAAEy0C,SAAU2S,SAAWpnD,EAAE+L,OAAO0oC,SAAUrkC,EAAIpQ,EAAExJ,EAAI4wD,SAASpnD,EAAExJ,EAAI,GAAK,KACvF,GAAIi+C,SAASl+C,OAAQ,EAwFzB,SAAS8wD,oBAAoBrnD,GAC3B,IAAuEoQ,EAAnE+uB,MAAQ,EAAG4lB,OAAS,EAAGtQ,SAAWz0C,EAAEy0C,SAAUj+C,EAAIi+C,SAASl+C,OAC/D,OAASC,GAAK,IACZ4Z,EAAIqkC,SAASj+C,IACXyP,GAAKk5B,MACP/uB,EAAE9P,GAAK6+B,MACPA,OAAS/uB,EAAE3W,GAAKsrD,QAAU30C,EAAE/Q,GA7F1BgoD,CAAoBrnD,GACpB,IAAIsnD,UAAY7S,SAAS,GAAGxuC,EAAIwuC,SAASA,SAASl+C,OAAS,GAAG0P,GAAK,EAC/DmK,GACFpQ,EAAEiG,EAAImK,EAAEnK,EAAIwgD,WAAWzmD,EAAE0C,EAAG0N,EAAE1N,GAC9B1C,EAAEM,EAAIN,EAAEiG,EAAIqhD,UAEZtnD,EAAEiG,EAAIqhD,cAECl3C,IACTpQ,EAAEiG,EAAImK,EAAEnK,EAAIwgD,WAAWzmD,EAAE0C,EAAG0N,EAAE1N,IAEhC1C,EAAE+L,OAAOioB,EAMX,SAASuzB,UAAUvnD,EAAGoQ,EAAG80C,UACvB,GAAI90C,EAAG,CAEL,IADA,IAAiH+uB,MAA7GqoB,IAAMxnD,EAAGynD,IAAMznD,EAAGilD,IAAM70C,EAAGs3C,IAAMF,IAAIz7C,OAAO0oC,SAAS,GAAIkT,IAAMH,IAAIlnD,EAAGsnD,IAAMH,IAAInnD,EAAGunD,IAAM5C,IAAI3kD,EAAGwnD,IAAMJ,IAAIpnD,EACvG2kD,IAAMN,oBAAoBM,KAAMuC,IAAM9C,mBAAmB8C,KAAMvC,KAAOuC,KAC3EE,IAAMhD,mBAAmBgD,MACzBD,IAAM9C,oBAAoB8C,MACtBvpD,EAAI8B,GACRm/B,MAAQ8lB,IAAIh/C,EAAI4hD,IAAML,IAAIvhD,EAAI0hD,IAAMlB,WAAWxB,IAAIviD,EAAG8kD,IAAI9kD,IAC9C,IACVkiD,mBAAmBI,uBAAuBC,IAAKjlD,EAAGklD,UAAWllD,EAAGm/B,OAChEwoB,KAAOxoB,MACPyoB,KAAOzoB,OAET0oB,KAAO5C,IAAI3kD,EACXqnD,KAAOH,IAAIlnD,EACXwnD,KAAOJ,IAAIpnD,EACXsnD,KAAOH,IAAInnD,EAET2kD,MAAQN,oBAAoB8C,OAC9BA,IAAIvmD,EAAI+jD,IACRwC,IAAInnD,GAAKunD,IAAMD,KAEbJ,MAAQ9C,mBAAmBgD,OAC7BA,IAAIxmD,EAAIsmD,IACRE,IAAIpnD,GAAKqnD,IAAMG,IACf5C,SAAWllD,GAGf,OAAOklD,SAlCMqC,CAAUvnD,EAAGoQ,EAAGpQ,EAAE+L,OAAOioB,GAAKozB,SAAS,IAEtD,SAASH,WAAWjnD,GAClBA,EAAE0C,EAAEpE,EAAI0B,EAAEiG,EAAIjG,EAAE+L,OAAOzL,EACvBN,EAAEM,GAAKN,EAAE+L,OAAOzL,EAgClB,SAAS4mD,SAAS1qD,MAChBA,KAAK8B,GAAKoF,KAAK,GACflH,KAAKqV,EAAIrV,KAAKuI,MAAQrB,KAAK,GAiB7B,OAfA8uC,KAAKiU,WAAa,SAASnoD,GACzB,OAAKxG,UAAUvB,QACfkwD,WAAanoD,EACNk0C,MAFuBiU,YAIhCjU,KAAK9uC,KAAO,SAASpF,GACnB,OAAKxG,UAAUvB,QACfmwD,SAAyB,OAAbhjD,KAAOpF,GAAa4oD,SAAW,KACpC1U,MAFuBkU,SAAW,KAAOhjD,MAIlD8uC,KAAKkU,SAAW,SAASpoD,GACvB,OAAKxG,UAAUvB,QACfmwD,SAAyB,OAAbhjD,KAAOpF,GAAa,KAAO4oD,SAChC1U,MAFuBkU,SAAWhjD,KAAO,MAI3C28C,0BAA0B7N,KAAM8N,YAiCzCtkD,GAAG0hD,OAAOqK,QAAU,WAClB,IAAIzH,UAAYtkD,GAAG0hD,OAAO4C,YAAYngD,KAAK,MAAM/I,MAAM,MAAOqvD,WAAahC,yBAA0B/gD,KAAO,CAAE,EAAG,GAAKgjD,UAAW,EACjI,SAASqB,QAAQ1nD,EAAG7J,GAClB,IAAyDwxD,aAArDt4C,MAAQ4wC,UAAU7kD,KAAK7D,KAAMyI,EAAG7J,GAAIm+C,KAAOjlC,MAAM,GAAkBpR,EAAI,EAC3EmiD,8BAA8B9L,MAAM,SAASn4C,MAC3C,IAAIi4C,SAAWj4C,KAAKi4C,SAChBA,UAAYA,SAASl+C,QACvBiG,KAAK8B,EAwCb,SAAS2pD,mBAAmBxT,UAC1B,OAAOA,SAASwO,QAAO,SAAS3kD,EAAGwiD,OACjC,OAAOxiD,EAAIwiD,MAAMxiD,IAChB,GAAKm2C,SAASl+C,OA3CF0xD,CAAmBxT,UAC5Bj4C,KAAKqV,EAkCb,SAASq2C,mBAAmBzT,UAC1B,OAAO,EAAIz4C,GAAGmD,IAAIs1C,UAAU,SAASqM,OACnC,OAAOA,MAAMjvC,KApCAq2C,CAAmBzT,YAE5Bj4C,KAAK8B,EAAI0pD,aAAe1pD,GAAKmoD,WAAWjqD,KAAMwrD,cAAgB,EAC9DxrD,KAAKqV,EAAI,EACTm2C,aAAexrD,SAGnB,IAAImC,KAAOwmD,sBAAsBxQ,MAAO51C,MAAQqmD,uBAAuBzQ,MAAOh+B,GAAKhY,KAAKL,EAAImoD,WAAW9nD,KAAMI,OAAS,EAAG6X,GAAK7X,MAAMT,EAAImoD,WAAW1nD,MAAOJ,MAAQ,EAQlK,OAPA8hD,8BAA8B9L,KAAM+R,SAAW,SAASlqD,MACtDA,KAAK8B,GAAK9B,KAAK8B,EAAIq2C,KAAKr2C,GAAKoF,KAAK,GAClClH,KAAKqV,GAAK8iC,KAAK9iC,EAAIrV,KAAKqV,GAAKnO,KAAK,IAChC,SAASlH,MACXA,KAAK8B,GAAK9B,KAAK8B,EAAIqY,KAAOC,GAAKD,IAAMjT,KAAK,GAC1ClH,KAAKqV,GAAK,GAAK8iC,KAAK9iC,EAAIrV,KAAKqV,EAAI8iC,KAAK9iC,EAAI,IAAMnO,KAAK,KAEhDgM,MAiBT,OAfAq4C,QAAQtB,WAAa,SAASnoD,GAC5B,OAAKxG,UAAUvB,QACfkwD,WAAanoD,EACNypD,SAFuBtB,YAIhCsB,QAAQrkD,KAAO,SAASpF,GACtB,OAAKxG,UAAUvB,QACfmwD,SAAyB,OAAbhjD,KAAOpF,GACZypD,SAFuBrB,SAAW,KAAOhjD,MAIlDqkD,QAAQrB,SAAW,SAASpoD,GAC1B,OAAKxG,UAAUvB,QACfmwD,SAAyB,OAAbhjD,KAAOpF,GACZypD,SAFuBrB,SAAWhjD,KAAO,MAI3C28C,0BAA0B0H,QAASzH,YAoB5CtkD,GAAG0hD,OAAOyK,QAAU,WAClB,IAA4IC,SAAxI9H,UAAYtkD,GAAG0hD,OAAO4C,YAAahlC,MAAQxb,KAAKwb,MAAO5X,KAAO,CAAE,EAAG,GAAK+N,QAAU,KAAM42C,IAAMhD,yBAA0BiD,QAAS,EAAiBC,KAAO,WAAYC,MAAQ,IAAM,EAAI1oD,KAAKU,KAAK,IACrM,SAAS+X,MAAMk8B,SAAUpyC,GAEvB,IADA,IAAiCy+C,MAAO1nB,KAApC5iC,GAAK,EAAGkD,EAAI+6C,SAASl+C,SAChBC,EAAIkD,GACX0/B,MAAQ0nB,MAAQrM,SAASj+C,IAAIY,OAASiL,EAAI,EAAI,EAAIA,GAClDy+C,MAAM1nB,KAAO56B,MAAM46B,OAASA,MAAQ,EAAI,EAAIA,KAGhD,SAASqvB,SAASjsD,MAChB,IAAIi4C,SAAWj4C,KAAKi4C,SACpB,GAAIA,UAAYA,SAASl+C,OAAQ,CAC/B,IAA8DuqD,MAAwB4H,MAA6JhvD,EAA/OyY,KAAOk2C,IAAI7rD,MAAOmF,IAAM,GAAIgnD,UAAYlU,SAAS/4C,QAAgBmgC,KAAO94B,IAAiBkT,EAAa,UAATsyC,KAAmBp2C,KAAK4B,GAAc,SAATw0C,KAAkBp2C,KAAK6B,GAAc,eAATu0C,KAAqC,EAAb/rD,KAAKuI,MAAYoN,KAAK6B,GAAK7B,KAAK4B,GAAKjU,KAAKZ,IAAIiT,KAAK4B,GAAI5B,KAAK6B,IAG9O,IAFAuE,MAAMowC,UAAWx2C,KAAK4B,GAAK5B,KAAK6B,GAAKxX,KAAKpF,OAC1CuK,IAAIy3B,KAAO,GACH1/B,EAAIivD,UAAUpyD,QAAU,GAC9BoL,IAAI/G,KAAKkmD,MAAQ6H,UAAUjvD,EAAI,IAC/BiI,IAAIy3B,MAAQ0nB,MAAM1nB,KACL,aAATmvB,OAAwBG,MAAQE,MAAMjnD,IAAKsU,KAAO4lB,MACpD8sB,UAAUzpB,MACVrD,KAAO6sB,QAEP/mD,IAAIy3B,MAAQz3B,IAAIu9B,MAAM9F,KACtB9nB,SAAS3P,IAAKsU,EAAG9D,MAAM,GACvB8D,EAAInW,KAAKZ,IAAIiT,KAAK4B,GAAI5B,KAAK6B,IAC3BrS,IAAIpL,OAASoL,IAAIy3B,KAAO,EACxByC,KAAO94B,KAGPpB,IAAIpL,SACN+a,SAAS3P,IAAKsU,EAAG9D,MAAM,GACvBxQ,IAAIpL,OAASoL,IAAIy3B,KAAO,GAE1Bqb,SAASvxC,QAAQulD,WAGrB,SAASI,SAASrsD,MAChB,IAAIi4C,SAAWj4C,KAAKi4C,SACpB,GAAIA,UAAYA,SAASl+C,OAAQ,CAC/B,IAAoDuqD,MAAhD3uC,KAAOk2C,IAAI7rD,MAAOmsD,UAAYlU,SAAS/4C,QAAgBiG,IAAM,GAGjE,IAFA4W,MAAMowC,UAAWx2C,KAAK4B,GAAK5B,KAAK6B,GAAKxX,KAAKpF,OAC1CuK,IAAIy3B,KAAO,EACJ0nB,MAAQ6H,UAAUzpB,OACvBv9B,IAAI/G,KAAKkmD,OACTn/C,IAAIy3B,MAAQ0nB,MAAM1nB,KACH,MAAX0nB,MAAM76C,IACRqL,SAAS3P,IAAKm/C,MAAM76C,EAAIkM,KAAK4B,GAAK5B,KAAK6B,GAAI7B,MAAOw2C,UAAUpyD,QAC5DoL,IAAIpL,OAASoL,IAAIy3B,KAAO,GAG5Bqb,SAASvxC,QAAQ2lD,WAGrB,SAASD,MAAMjnD,IAAKsU,GAElB,IADA,IAAkB2F,EAAdniB,EAAIkI,IAAIy3B,KAAS0vB,KAAO,EAAGC,KAAOhmD,IAAUvM,GAAK,EAAGkD,EAAIiI,IAAIpL,SACvDC,EAAIkD,IACLkiB,EAAIja,IAAInL,GAAG4iC,QACbxd,EAAImtC,OAAMA,KAAOntC,GACjBA,EAAIktC,OAAMA,KAAOltC,IAIvB,OADA3F,GAAKA,GADLxc,GAAKA,GAEMqG,KAAKX,IAAI8W,EAAI6yC,KAAON,MAAQ/uD,EAAGA,GAAKwc,EAAI8yC,KAAOP,QAAUzlD,IAEtE,SAASuO,SAAS3P,IAAKsU,EAAG9D,KAAMqZ,OAC9B,IAAqFpyB,EAAjF5C,GAAK,EAAGkD,EAAIiI,IAAIpL,OAAQ+H,EAAI6T,KAAK7T,EAAGuT,EAAIM,KAAKN,EAAG7R,EAAIiW,EAAIqF,MAAM3Z,IAAIy3B,KAAOnjB,GAAK,EAClF,GAAIA,GAAK9D,KAAK4B,GAAI,CAEhB,KADIyX,OAASxrB,EAAImS,KAAK6B,MAAIhU,EAAImS,KAAK6B,MAC1Bxd,EAAIkD,IACXN,EAAIuI,IAAInL,IACN8H,EAAIA,EACNlF,EAAEyY,EAAIA,EACNzY,EAAE4a,GAAKhU,EACP1B,GAAKlF,EAAE2a,GAAKjU,KAAKZ,IAAIiT,KAAK7T,EAAI6T,KAAK4B,GAAKzV,EAAG0B,EAAIsb,MAAMliB,EAAEggC,KAAOp5B,GAAK,GAErE5G,EAAE6M,GAAI,EACN7M,EAAE2a,IAAM5B,KAAK7T,EAAI6T,KAAK4B,GAAKzV,EAC3B6T,KAAKN,GAAK7R,EACVmS,KAAK6B,IAAMhU,MACN,CAEL,KADIwrB,OAASxrB,EAAImS,KAAK4B,MAAI/T,EAAImS,KAAK4B,MAC1Bvd,EAAIkD,IACXN,EAAIuI,IAAInL,IACN8H,EAAIA,EACNlF,EAAEyY,EAAIA,EACNzY,EAAE2a,GAAK/T,EACP6R,GAAKzY,EAAE4a,GAAKlU,KAAKZ,IAAIiT,KAAKN,EAAIM,KAAK6B,GAAKnC,EAAG7R,EAAIsb,MAAMliB,EAAEggC,KAAOp5B,GAAK,GAErE5G,EAAE6M,GAAI,EACN7M,EAAE4a,IAAM7B,KAAKN,EAAIM,KAAK6B,GAAKnC,EAC3BM,KAAK7T,GAAK0B,EACVmS,KAAK4B,IAAM/T,GAGf,SAASmoD,QAAQ9nD,GACf,IAAIqP,MAAQ04C,UAAY9H,UAAUjgD,GAAIs0C,KAAOjlC,MAAM,GAOnD,OANAilC,KAAKr2C,EAAIq2C,KAAK9iC,EAAI,EACd8iC,KAAKv9C,OAAOu9C,KAAK5gC,GAAKrQ,KAAK,GAAIixC,KAAK3gC,GAAKtQ,KAAK,IAASixC,KAAK5gC,GAAK4gC,KAAK3gC,GAAK,EAC3Eo0C,UAAU9H,UAAUW,QAAQtM,MAChCp8B,MAAM,CAAEo8B,MAAQA,KAAK5gC,GAAK4gC,KAAK3gC,GAAK2gC,KAAKv9C,QACxCgxD,SAAWS,SAAWJ,UAAU9T,MAC7B2T,SAAQF,SAAW14C,OAChBA,MA0CT,OAxCAy4C,QAAQzkD,KAAO,SAASpF,GACtB,OAAKxG,UAAUvB,QACfmN,KAAOpF,EACA6pD,SAFuBzkD,MAIhCykD,QAAQ12C,QAAU,SAASnT,GACzB,IAAKxG,UAAUvB,OAAQ,OAAOkb,QAC9B,SAASu3C,YAAYxsD,MACnB,IAAImD,EAAIrB,EAAE7C,KAAK0sD,QAAS3rD,KAAMA,KAAKuI,OACnC,OAAY,MAALpF,EAAY0lD,yBAAyB7oD,MAAQ8oD,qBAAqB9oD,KAAmB,iBAANmD,EAAiB,CAAEA,EAAGA,EAAGA,EAAGA,GAAMA,GAE1H,SAASspD,YAAYzsD,MACnB,OAAO8oD,qBAAqB9oD,KAAM8B,GAEpC,IAAI0I,KAGJ,OAFAqhD,IAAuB,OAAhB52C,QAAUnT,GAAa+mD,yBAAiD,aAArBr+C,YAAc1I,GAAoB0qD,YAAuB,WAAThiD,MAAqB1I,EAAI,CAAEA,EAAGA,EAAGA,EAAGA,GAC9I2qD,aAAeA,YACRd,SAETA,QAAQ7sC,MAAQ,SAAShd,GACvB,OAAKxG,UAAUvB,QACf+kB,MAAQhd,EAAIwB,KAAKwb,MAAQ8lC,OAClB+G,SAFuB7sC,OAAS8lC,QAIzC+G,QAAQG,OAAS,SAAShqD,GACxB,OAAKxG,UAAUvB,QACf+xD,OAAShqD,EACT8pD,SAAW,KACJD,SAHuBG,QAKhCH,QAAQK,MAAQ,SAASlqD,GACvB,OAAKxG,UAAUvB,QACfiyD,MAAQlqD,EACD6pD,SAFuBK,OAIhCL,QAAQI,KAAO,SAASjqD,GACtB,OAAKxG,UAAUvB,QACfgyD,KAAOjqD,EAAI,GACJ6pD,SAFuBI,MAIzBlI,0BAA0B8H,QAAS7H,YA2B5CtkD,GAAGmF,OAAS,CACVo6B,OAAQ,SAAS,EAAG,GAClB,IAAI7hC,EAAI5B,UAAUvB,OAGlB,OAFImD,EAAI,IAAG,EAAI,GACXA,EAAI,IAAG,EAAI,GACR,WACL,IAAI4E,EAAGuT,EAAG+J,EACV,GAGEA,GAFAtd,EAAoB,EAAhBwB,KAAKqB,SAAe,GAEhB7C,GADRuT,EAAoB,EAAhB/R,KAAKqB,SAAe,GACR0Q,SACR+J,GAAKA,EAAI,GACnB,OAAO,EAAI,EAAItd,EAAIwB,KAAKU,MAAM,EAAIV,KAAK4V,IAAIkG,GAAKA,KAGpDstC,UAAW,WACT,IAAI/nD,OAASnF,GAAGmF,OAAOo6B,OAAOxjC,MAAMiE,GAAIlE,WACxC,OAAO,WACL,OAAOgI,KAAK8U,IAAIzT,YAGpBgoD,MAAO,SAAS7oD,GACd,IAAIa,OAASnF,GAAGmF,OAAOioD,UAAU9oD,GACjC,OAAO,WACL,OAAOa,SAAWb,IAGtB8oD,UAAW,SAAS9oD,GAClB,OAAO,WACL,IAAK,IAAI7G,EAAI,EAAG+F,EAAI,EAAGA,EAAIc,EAAGd,IAAK/F,GAAKqG,KAAKqB,SAC7C,OAAO1H,KAIbuC,GAAGuc,MAAQ,GAkCX,IAAIwtC,sBAAwB,CAC1BhmD,MAAO8D,YACPkW,KAAMlW,aAER,SAASwlD,oBAAoBlxC,OAAQvV,MAAO+iD,cAAe9oB,aACzD,IAAI5mB,EAAI,GAAIzf,EAAI,GAAIgJ,EAAI,EAAG6C,EAAIvC,KAAKZ,IAAIiZ,OAAO5hB,OAAQqM,MAAMrM,QAAU,EAKvE,IAJI4hB,OAAO9V,GAAK8V,OAAO,KACrBA,OAASA,OAAOzc,QAAQ+wB,UACxB7pB,MAAQA,MAAMlH,QAAQ+wB,aAEfjtB,GAAK6C,GACZ4T,EAAErb,KAAK+qD,cAAcxtC,OAAO3Y,EAAI,GAAI2Y,OAAO3Y,KAC3ChJ,EAAEoE,KAAKiiC,YAAYj6B,MAAMpD,EAAI,GAAIoD,MAAMpD,KAEzC,OAAO,SAASlB,GACd,IAAIkB,EAAIxD,GAAG4E,OAAOuX,OAAQ7Z,EAAG,EAAG+D,GAAK,EACrC,OAAO7L,EAAEgJ,GAAGyW,EAAEzW,GAAGlB,KAMrB,SAASgrD,gBAAgBnxC,OAAQvV,MAAOi6B,YAAa0sB,OACnD,IAAIjmB,OAAQ2K,MACZ,SAAS/1B,UACP,IAAI4/B,OAASh4C,KAAKZ,IAAIiZ,OAAO5hB,OAAQqM,MAAMrM,QAAU,EAAI8yD,oBAAsB3D,kBAAmBC,cAAgB4D,MAAQtN,sBAAwBD,uBAGlJ,OAFA1Y,OAASwU,OAAO3/B,OAAQvV,MAAO+iD,cAAe9oB,aAC9CoR,MAAQ6J,OAAOl1C,MAAOuV,OAAQwtC,cAAejQ,gBACtCn9B,MAET,SAASA,MAAMja,GACb,OAAOglC,OAAOhlC,GAyChB,OAvCAia,MAAMH,OAAS,SAASvG,GACtB,OAAOo8B,MAAMp8B,IAEf0G,MAAMJ,OAAS,SAAS7Z,GACtB,OAAKxG,UAAUvB,QACf4hB,OAAS7Z,EAAEwD,IAAIs/C,QACRlpC,WAFuBC,QAIhCI,MAAM3V,MAAQ,SAAStE,GACrB,OAAKxG,UAAUvB,QACfqM,MAAQtE,EACD4Z,WAFuBtV,OAIhC2V,MAAMixC,WAAa,SAASlrD,GAC1B,OAAOia,MAAM3V,MAAMtE,GAAGu+B,YAAYwc,sBAEpC9gC,MAAMgxC,MAAQ,SAASjrD,GACrB,OAAKxG,UAAUvB,QACfgzD,MAAQjrD,EACD4Z,WAFuBqxC,OAIhChxC,MAAMskB,YAAc,SAASv+B,GAC3B,OAAKxG,UAAUvB,QACfsmC,YAAcv+B,EACP4Z,WAFuB2kB,aAIhCtkB,MAAMkxC,MAAQ,SAASnpD,GACrB,OAAOopD,qBAAqBvxC,OAAQ7X,IAEtCiY,MAAMoxC,WAAa,SAASrpD,EAAGyc,QAC7B,OAAO6sC,0BAA0BzxC,OAAQ7X,EAAGyc,SAE9CxE,MAAMstC,KAAO,SAASvlD,GAEpB,OADAupD,oBAAoB1xC,OAAQ7X,GACrB4X,WAETK,MAAMkC,KAAO,WACX,OAAO6uC,gBAAgBnxC,OAAQvV,MAAOi6B,YAAa0sB,QAE9CrxC,UAET,SAAS4xC,sBAAsBvxC,MAAOu/B,QACpC,OAAO97C,GAAGwJ,OAAO+S,MAAOu/B,OAAQ,QAAS,aAAc,cAAe,SAExE,SAAS+R,oBAAoB1xC,OAAQ7X,GAGnC,OAFAslD,cAAcztC,OAAQ2tC,kBAAkBiE,yBAAyB5xC,OAAQ7X,GAAG,KAC5EslD,cAAcztC,OAAQ2tC,kBAAkBiE,yBAAyB5xC,OAAQ7X,GAAG,KACrE6X,OAET,SAAS4xC,yBAAyB5xC,OAAQ7X,GAC/B,MAALA,IAAWA,EAAI,IACnB,IAAIlB,OAASmmD,eAAeptC,QAAS6xC,KAAO5qD,OAAO,GAAKA,OAAO,GAAInF,KAAO6F,KAAKkY,IAAI,GAAIlY,KAAKC,MAAMD,KAAK4V,IAAIs0C,KAAO1pD,GAAKR,KAAKyrB,OAAQvzB,IAAMsI,EAAI0pD,KAAO/vD,KAKrJ,OAJIjC,KAAO,IAAKiC,MAAQ,GAAajC,KAAO,IAAKiC,MAAQ,EAAYjC,KAAO,MAAKiC,MAAQ,GACzFmF,OAAO,GAAKU,KAAKia,KAAK3a,OAAO,GAAKnF,MAAQA,KAC1CmF,OAAO,GAAKU,KAAKC,MAAMX,OAAO,GAAKnF,MAAQA,KAAc,GAAPA,KAClDmF,OAAO,GAAKnF,KACLmF,OAET,SAASsqD,qBAAqBvxC,OAAQ7X,GACpC,OAAOtE,GAAG4G,MAAM7K,MAAMiE,GAAI+tD,yBAAyB5xC,OAAQ7X,IAE7D,SAASspD,0BAA0BzxC,OAAQ7X,EAAGyc,QAC5C,IAAIna,MAAQmnD,yBAAyB5xC,OAAQ7X,GAC7C,GAAIyc,OAAQ,CACV,IAAIvN,MAAQmd,aAAa3P,KAAKD,QAE9B,GADAvN,MAAM2vB,QACW,MAAb3vB,MAAM,GAAY,CACpB,IAAI9C,OAAS1Q,GAAG2xB,aAAa7tB,KAAKX,IAAIgD,IAAIS,MAAM,IAAKT,IAAIS,MAAM,MAI/D,OAHK4M,MAAM,KAAIA,MAAM,GAAK,IAAMy6C,yBAAyBv9C,OAAO6L,MAAM3V,MAAM,MAC5E4M,MAAM,GAAK,IACXuN,OAAS/gB,GAAG+gB,OAAOvN,MAAM6Z,KAAK,KACvB,SAAShpB,GACd,OAAO0c,OAAOrQ,OAAO6L,MAAMlY,IAAMqM,OAAOif,QAGvCnc,MAAM,KAAIA,MAAM,GAAK,IAiB9B,SAAS06C,+BAA+BljD,KAAMpE,OAC5C,IAAIjD,EAAIsqD,yBAAyBrnD,MAAM,IACvC,OAAOoE,QAAQmjD,iCAAmCrqD,KAAKqC,IAAIxC,EAAIsqD,yBAAyBnqD,KAAKX,IAAIgD,IAAIS,MAAM,IAAKT,IAAIS,MAAM,UAAoB,MAAToE,MAAgBrH,EAAqB,GAAP,MAATqH,MAnBxHkjD,CAA+B16C,MAAM,GAAI5M,QACzEma,OAASvN,MAAM6Z,KAAK,SAEpBtM,OAAS,KAAOktC,yBAAyBrnD,MAAM,IAAM,IAEvD,OAAO5G,GAAG+gB,OAAOA,QA9FnB/gB,GAAGuc,MAAMu/B,OAAS,WAChB,OAAOwR,gBAAgB,CAAE,EAAG,GAAK,CAAE,EAAG,GAAK5T,gBAAgB,IA+F7D,IAAIyU,iCAAmC,CACrC1wD,EAAG,EACH4d,EAAG,EACH1X,EAAG,EACHic,EAAG,EACHjiB,EAAG,GAEL,SAASswD,yBAAyB7yD,OAChC,OAAQ0I,KAAKC,MAAMD,KAAK4V,IAAIte,OAAS0I,KAAKyrB,KAAO,KASnD,SAAS6+B,aAAatS,OAAQuS,KAAMC,SAAUnyC,QAC5C,SAASzC,IAAIpX,GACX,OAAQgsD,SAAWxqD,KAAK4V,IAAIpX,EAAI,EAAI,EAAIA,IAAMwB,KAAK4V,IAAIpX,EAAI,EAAI,GAAKA,IAAMwB,KAAK4V,IAAI20C,MAErF,SAASryC,IAAI1Z,GACX,OAAOgsD,SAAWxqD,KAAKkY,IAAIqyC,KAAM/rD,IAAMwB,KAAKkY,IAAIqyC,MAAO/rD,GAEzD,SAASia,MAAMja,GACb,OAAOw5C,OAAOpiC,IAAIpX,IAoDpB,OAlDAia,MAAMH,OAAS,SAAS9Z,GACtB,OAAO0Z,IAAI8/B,OAAO1/B,OAAO9Z,KAE3Bia,MAAMJ,OAAS,SAAS7Z,GACtB,OAAKxG,UAAUvB,QACf+zD,SAAWhsD,EAAE,IAAM,EACnBw5C,OAAO3/B,QAAQA,OAAS7Z,EAAEwD,IAAIs/C,SAASt/C,IAAI4T,MACpC6C,OAHuBJ,QAKhCI,MAAM8xC,KAAO,SAAS3nD,GACpB,OAAK5K,UAAUvB,QACf8zD,MAAQ3nD,EACRo1C,OAAO3/B,OAAOA,OAAOrW,IAAI4T,MAClB6C,OAHuB8xC,MAKhC9xC,MAAMstC,KAAO,WACX,IAAI0E,MAAQ3E,cAAcztC,OAAOrW,IAAI4T,KAAM40C,SAAWxqD,KAAO0qD,0BAG7D,OAFA1S,OAAO3/B,OAAOoyC,OACdpyC,OAASoyC,MAAMzoD,IAAIkW,KACZO,OAETA,MAAMkxC,MAAQ,WACZ,IAAIrqD,OAASmmD,eAAeptC,QAASsxC,MAAQ,GAAIxzC,EAAI7W,OAAO,GAAIY,EAAIZ,OAAO,GAAI5I,EAAIsJ,KAAKC,MAAM2V,IAAIO,IAAKzW,EAAIM,KAAKia,KAAKrE,IAAI1V,IAAKtG,EAAI2wD,KAAO,EAAI,EAAIA,KACjJ,GAAIl/B,SAAS3rB,EAAIhJ,GAAI,CACnB,GAAI8zD,SAAU,CACZ,KAAM9zD,EAAIgJ,EAAGhJ,IAAK,IAAK,IAAI6L,EAAI,EAAGA,EAAI3I,EAAG2I,IAAKonD,MAAM7uD,KAAKod,IAAIxhB,GAAK6L,GAClEonD,MAAM7uD,KAAKod,IAAIxhB,SAGf,IADAizD,MAAM7uD,KAAKod,IAAIxhB,IACTA,IAAMgJ,GAAK,IAAS6C,EAAI3I,EAAI,EAAG2I,EAAI,EAAGA,IAAKonD,MAAM7uD,KAAKod,IAAIxhB,GAAK6L,GAEvE,IAAK7L,EAAI,EAAGizD,MAAMjzD,GAAKyf,EAAGzf,KAC1B,IAAKgJ,EAAIiqD,MAAMlzD,OAAQkzD,MAAMjqD,EAAI,GAAKQ,EAAGR,KACzCiqD,MAAQA,MAAM/tD,MAAMlF,EAAGgJ,GAEzB,OAAOiqD,OAETlxC,MAAMoxC,WAAa,SAASjwD,EAAGqjB,QAC7B,IAAKjlB,UAAUvB,OAAQ,OAAOk0D,mBAC1B3yD,UAAUvB,OAAS,EAAGwmB,OAAS0tC,mBAA+C,mBAAX1tC,SAAuBA,OAAS/gB,GAAG+gB,OAAOA,SACjH,IAAI1a,EAAIvC,KAAKX,IAAI,EAAGkrD,KAAO3wD,EAAI6e,MAAMkxC,QAAQlzD,QAC7C,OAAO,SAAS8J,GACd,IAAI7J,EAAI6J,EAAI2X,IAAIlY,KAAKwb,MAAM5F,IAAIrV,KAE/B,OADI7J,EAAI6zD,KAAOA,KAAO,KAAI7zD,GAAK6zD,MACxB7zD,GAAK6L,EAAI0a,OAAO1c,GAAK,KAGhCkY,MAAMkC,KAAO,WACX,OAAO2vC,aAAatS,OAAOr9B,OAAQ4vC,KAAMC,SAAUnyC,SAE9C2xC,sBAAsBvxC,MAAOu/B,QA/DtC97C,GAAGuc,MAAM7C,IAAM,WACb,OAAO00C,aAAapuD,GAAGuc,MAAMu/B,SAAS3/B,OAAO,CAAE,EAAG,IAAM,IAAI,EAAM,CAAE,EAAG,MAgEzE,IAAIsyC,mBAAqBzuD,GAAG+gB,OAAO,OAAQytC,yBAA2B,CACpEzqD,MAAO,SAASzB,GACd,OAAQwB,KAAKia,MAAMzb,IAErByb,KAAM,SAASzb,GACb,OAAQwB,KAAKC,OAAOzB,KAMxB,SAASosD,aAAa5S,OAAQ1qB,SAAUjV,QACtC,IAAIwyC,KAAOC,gBAAgBx9B,UAAWy9B,KAAOD,gBAAgB,EAAIx9B,UACjE,SAAS7U,MAAMja,GACb,OAAOw5C,OAAO6S,KAAKrsD,IA6BrB,OA3BAia,MAAMH,OAAS,SAAS9Z,GACtB,OAAOusD,KAAK/S,OAAO1/B,OAAO9Z,KAE5Bia,MAAMJ,OAAS,SAAS7Z,GACtB,OAAKxG,UAAUvB,QACfuhD,OAAO3/B,QAAQA,OAAS7Z,EAAEwD,IAAIs/C,SAASt/C,IAAI6oD,OACpCpyC,OAFuBJ,QAIhCI,MAAMkxC,MAAQ,SAASnpD,GACrB,OAAOopD,qBAAqBvxC,OAAQ7X,IAEtCiY,MAAMoxC,WAAa,SAASrpD,EAAGyc,QAC7B,OAAO6sC,0BAA0BzxC,OAAQ7X,EAAGyc,SAE9CxE,MAAMstC,KAAO,SAASvlD,GACpB,OAAOiY,MAAMJ,OAAO0xC,oBAAoB1xC,OAAQ7X,KAElDiY,MAAM6U,SAAW,SAAS9uB,GACxB,OAAKxG,UAAUvB,QACfo0D,KAAOC,gBAAgBx9B,SAAW9uB,GAClCusD,KAAOD,gBAAgB,EAAIx9B,UAC3B0qB,OAAO3/B,OAAOA,OAAOrW,IAAI6oD,OAClBpyC,OAJuB6U,UAMhC7U,MAAMkC,KAAO,WACX,OAAOiwC,aAAa5S,OAAOr9B,OAAQ2S,SAAUjV,SAExC2xC,sBAAsBvxC,MAAOu/B,QAEtC,SAAS8S,gBAAgBjxD,GACvB,OAAO,SAAS2E,GACd,OAAOA,EAAI,GAAKwB,KAAKkY,KAAK1Z,EAAG3E,GAAKmG,KAAKkY,IAAI1Z,EAAG3E,IAYlD,SAASmxD,iBAAiB3yC,OAAQguC,QAChC,IAAIhQ,MAAOvzC,MAAOmoD,UAClB,SAASxyC,MAAMja,GACb,OAAOsE,QAAQuzC,MAAM5xC,IAAIjG,KAAoB,UAAb6nD,OAAOjlD,EAAgBi1C,MAAMhzC,IAAI7E,EAAG6Z,OAAOvd,KAAK0D,IAAMF,MAAQ,GAAKwE,MAAMrM,QAE3G,SAASy0D,MAAMnoD,MAAO5I,MACpB,OAAO+B,GAAG4G,MAAMuV,OAAO5hB,QAAQuL,KAAI,SAAStL,GAC1C,OAAOqM,MAAQ5I,KAAOzD,KAgF1B,OA7EA+hB,MAAMJ,OAAS,SAAS7Z,GACtB,IAAKxG,UAAUvB,OAAQ,OAAO4hB,OAC9BA,OAAS,GACTg+B,MAAQ,IAAI1zC,OAEZ,IADA,IAA0BwoD,GAAtBz0D,GAAK,EAAGkD,EAAI4E,EAAE/H,SACTC,EAAIkD,GAAQy8C,MAAM7xC,IAAI2mD,GAAK3sD,EAAE9H,KAAK2/C,MAAMhzC,IAAI8nD,GAAI9yC,OAAOvd,KAAKqwD,KACrE,OAAO1yC,MAAM4tC,OAAOjlD,GAAGnJ,MAAMwgB,MAAO4tC,OAAOjoD,IAE7Cqa,MAAM3V,MAAQ,SAAStE,GACrB,OAAKxG,UAAUvB,QACfqM,MAAQtE,EACRysD,UAAY,EACZ5E,OAAS,CACPjlD,EAAG,QACHhD,EAAGpG,WAEEygB,OAPuB3V,OAShC2V,MAAM2yC,YAAc,SAAS5sD,EAAGmT,SAC1B3Z,UAAUvB,OAAS,IAAGkb,QAAU,GACpC,IAAI5O,MAAQvE,EAAE,GAAIwE,KAAOxE,EAAE,GAAIrE,KAAOke,OAAO5hB,OAAS,GAAKsM,OAASA,MAAQC,MAAQ,EACpF,IAAMA,KAAOD,QAAUsV,OAAO5hB,OAAS,EAAIkb,SAO3C,OANA7O,MAAQooD,MAAMnoD,MAAQ5I,KAAOwX,QAAU,EAAGxX,MAC1C8wD,UAAY,EACZ5E,OAAS,CACPjlD,EAAG,cACHhD,EAAGpG,WAEEygB,OAETA,MAAM4yC,iBAAmB,SAAS7sD,EAAGmT,SAC/B3Z,UAAUvB,OAAS,IAAGkb,QAAU,GACpC,IAAI5O,MAAQvE,EAAE,GAAIwE,KAAOxE,EAAE,GAAIrE,KAAOke,OAAO5hB,OAAS,GAAKsM,MAAQC,KAAOhD,KAAKwb,OAAOzY,MAAQC,MAAQ,GACtG,IAAMA,KAAOD,QAAUsV,OAAO5hB,OAAS,EAAIkb,SAAW,EAOtD,OANA7O,MAAQooD,MAAMnoD,MAAQ/C,KAAKwb,MAAMrhB,KAAOwX,QAAU,GAAK3O,KAAOD,OAASsV,OAAO5hB,OAAS,EAAIkb,SAAWxX,MAAQ,GAAIA,MAClH8wD,UAAY,EACZ5E,OAAS,CACPjlD,EAAG,mBACHhD,EAAGpG,WAEEygB,OAETA,MAAM6yC,WAAa,SAAS9sD,EAAGmT,QAAS45C,cAClCvzD,UAAUvB,OAAS,IAAGkb,QAAU,GAChC3Z,UAAUvB,OAAS,IAAG80D,aAAe55C,SACzC,IAAIgb,QAAUnuB,EAAE,GAAKA,EAAE,GAAIuE,MAAQvE,EAAEmuB,QAAU,GAAI3pB,KAAOxE,EAAE,EAAImuB,SAAUxyB,MAAQ6I,KAAOD,QAAUsV,OAAO5hB,OAASkb,QAAU,EAAI45C,cAQjI,OAPAzoD,MAAQooD,MAAMnoD,MAAQ5I,KAAOoxD,aAAcpxD,MACvCwyB,SAAS7pB,MAAM6pB,UACnBs+B,UAAY9wD,MAAQ,EAAIwX,SACxB00C,OAAS,CACPjlD,EAAG,aACHhD,EAAGpG,WAEEygB,OAETA,MAAM+yC,gBAAkB,SAAShtD,EAAGmT,QAAS45C,cACvCvzD,UAAUvB,OAAS,IAAGkb,QAAU,GAChC3Z,UAAUvB,OAAS,IAAG80D,aAAe55C,SACzC,IAAIgb,QAAUnuB,EAAE,GAAKA,EAAE,GAAIuE,MAAQvE,EAAEmuB,QAAU,GAAI3pB,KAAOxE,EAAE,EAAImuB,SAAUxyB,KAAO6F,KAAKC,OAAO+C,KAAOD,QAAUsV,OAAO5hB,OAASkb,QAAU,EAAI45C,eAQ5I,OAPAzoD,MAAQooD,MAAMnoD,MAAQ/C,KAAKwb,OAAOxY,KAAOD,OAASsV,OAAO5hB,OAASkb,SAAWxX,MAAQ,GAAIA,MACrFwyB,SAAS7pB,MAAM6pB,UACnBs+B,UAAYjrD,KAAKwb,MAAMrhB,MAAQ,EAAIwX,UACnC00C,OAAS,CACPjlD,EAAG,kBACHhD,EAAGpG,WAEEygB,OAETA,MAAMwyC,UAAY,WAChB,OAAOA,WAETxyC,MAAMktC,YAAc,WAClB,OAAOF,eAAeY,OAAOjoD,EAAE,KAEjCqa,MAAMkC,KAAO,WACX,OAAOqwC,iBAAiB3yC,OAAQguC,SAE3B5tC,MAAMJ,OAAOA,QA1ItBnc,GAAGuc,MAAMP,IAAM,WACb,OAAO0yC,aAAa1uD,GAAGuc,MAAMu/B,SAAU,EAAG,CAAE,EAAG,KAyCjD97C,GAAGuc,MAAM/X,KAAO,WACd,OAAOxE,GAAGuc,MAAMP,MAAMoV,SAAS,KAEjCpxB,GAAGuc,MAAMgzC,QAAU,WACjB,OAAOT,iBAAiB,GAAI,CAC1B5pD,EAAG,QACHhD,EAAG,CAAE,OA4FTlC,GAAGuc,MAAMizC,WAAa,WACpB,OAAOxvD,GAAGuc,MAAMgzC,UAAU3oD,MAAM6oD,gBAElCzvD,GAAGuc,MAAMmzC,WAAa,WACpB,OAAO1vD,GAAGuc,MAAMgzC,UAAU3oD,MAAM+oD,gBAElC3vD,GAAGuc,MAAMqzC,YAAc,WACrB,OAAO5vD,GAAGuc,MAAMgzC,UAAU3oD,MAAMipD,iBAElC7vD,GAAGuc,MAAMuzC,YAAc,WACrB,OAAO9vD,GAAGuc,MAAMgzC,UAAU3oD,MAAMmpD,iBAElC,IAAIN,cAAgB,CAAE,QAAS,SAAU,QAAS,SAAU,QAAS,QAAS,SAAU,QAAS,SAAU,SAAU3pD,IAAI8a,cACrH+uC,cAAgB,CAAE,QAAS,SAAU,SAAU,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,UAAW7pD,IAAI8a,cACzNivC,eAAiB,CAAE,QAAS,QAAS,QAAS,SAAU,QAAS,QAAS,SAAU,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,SAAU,SAAU,UAAW/pD,IAAI8a,cACxNmvC,eAAiB,CAAE,QAAS,QAAS,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAS,QAAS,SAAU,SAAU,QAAS,SAAU,SAAU,SAAU,QAAS,QAAS,SAAU,UAAWjqD,IAAI8a,cAI7N,SAASovC,kBAAkB7zC,OAAQvV,OACjC,IAAI2jD,WACJ,SAASruC,UACP,IAAI7V,EAAI,EAAGkX,EAAI3W,MAAMrM,OAErB,IADAgwD,WAAa,KACJlkD,EAAIkX,GAAGgtC,WAAWlkD,EAAI,GAAKrG,GAAGyD,SAAS0Y,OAAQ9V,EAAIkX,GAC5D,OAAOhB,MAET,SAASA,MAAMja,GACb,IAAKE,MAAMF,GAAKA,GAAI,OAAOsE,MAAM5G,GAAG4E,OAAO2lD,WAAYjoD,IAsBzD,OApBAia,MAAMJ,OAAS,SAAS7Z,GACtB,OAAKxG,UAAUvB,QACf4hB,OAAS7Z,EAAEwD,IAAIzD,WAAWmQ,OAAOjQ,YAAY4B,KAAKlC,cAC3Cia,WAFuBC,QAIhCI,MAAM3V,MAAQ,SAAStE,GACrB,OAAKxG,UAAUvB,QACfqM,MAAQtE,EACD4Z,WAFuBtV,OAIhC2V,MAAM0zC,UAAY,WAChB,OAAO1F,YAEThuC,MAAM2zC,aAAe,SAASr6C,GAE5B,OADAA,EAAIjP,MAAMwD,QAAQyL,IACP,EAAI,CAAEzT,IAAKA,KAAQ,CAAEyT,EAAI,EAAI00C,WAAW10C,EAAI,GAAKsG,OAAO,GAAItG,EAAI00C,WAAWhwD,OAASgwD,WAAW10C,GAAKsG,OAAOA,OAAO5hB,OAAS,KAExIgiB,MAAMkC,KAAO,WACX,OAAOuxC,kBAAkB7zC,OAAQvV,QAE5BsV,UAKT,SAASi0C,kBAAkBx1C,GAAIC,GAAIhU,OACjC,IAAI22C,GAAI/iD,EACR,SAAS+hB,MAAMja,GACb,OAAOsE,MAAM9C,KAAKX,IAAI,EAAGW,KAAKZ,IAAI1I,EAAGsJ,KAAKC,MAAMw5C,IAAMj7C,EAAIqY,QAE5D,SAASuB,UAGP,OAFAqhC,GAAK32C,MAAMrM,QAAUqgB,GAAKD,IAC1BngB,EAAIoM,MAAMrM,OAAS,EACZgiB,MAqBT,OAnBAA,MAAMJ,OAAS,SAAS7Z,GACtB,OAAKxG,UAAUvB,QACfogB,IAAMrY,EAAE,GACRsY,IAAMtY,EAAEA,EAAE/H,OAAS,GACZ2hB,WAHuB,CAAEvB,GAAIC,KAKtC2B,MAAM3V,MAAQ,SAAStE,GACrB,OAAKxG,UAAUvB,QACfqM,MAAQtE,EACD4Z,WAFuBtV,OAIhC2V,MAAM2zC,aAAe,SAASr6C,GAG5B,MAAO,CADPA,GADAA,EAAIjP,MAAMwD,QAAQyL,IACV,EAAIzT,IAAMyT,EAAI0nC,GAAK5iC,GACf9E,EAAI,EAAI0nC,KAEtBhhC,MAAMkC,KAAO,WACX,OAAO0xC,kBAAkBx1C,GAAIC,GAAIhU,QAE5BsV,UAKT,SAASk0C,mBAAmBj0C,OAAQvV,OAClC,SAAS2V,MAAMja,GACb,GAAIA,GAAKA,EAAG,OAAOsE,MAAM5G,GAAG4E,OAAOuX,OAAQ7Z,IAmB7C,OAjBAia,MAAMJ,OAAS,SAASzV,GACtB,OAAK5K,UAAUvB,QACf4hB,OAASzV,EACF6V,OAFuBJ,QAIhCI,MAAM3V,MAAQ,SAASF,GACrB,OAAK5K,UAAUvB,QACfqM,MAAQF,EACD6V,OAFuB3V,OAIhC2V,MAAM2zC,aAAe,SAASr6C,GAE5B,OADAA,EAAIjP,MAAMwD,QAAQyL,GACX,CAAEsG,OAAOtG,EAAI,GAAIsG,OAAOtG,KAEjC0G,MAAMkC,KAAO,WACX,OAAO2xC,mBAAmBj0C,OAAQvV,QAE7B2V,MAKT,SAAS8zC,kBAAkBl0C,QACzB,SAASm0C,SAAShuD,GAChB,OAAQA,EAiBV,OAfAguD,SAASl0C,OAASk0C,SAClBA,SAASn0C,OAASm0C,SAAS1pD,MAAQ,SAAStE,GAC1C,OAAKxG,UAAUvB,QACf4hB,OAAS7Z,EAAEwD,IAAIwqD,UACRA,UAFuBn0C,QAIhCm0C,SAAS7C,MAAQ,SAASnpD,GACxB,OAAOopD,qBAAqBvxC,OAAQ7X,IAEtCgsD,SAAS3C,WAAa,SAASrpD,EAAGyc,QAChC,OAAO6sC,0BAA0BzxC,OAAQ7X,EAAGyc,SAE9CuvC,SAAS7xC,KAAO,WACd,OAAO4xC,kBAAkBl0C,SAEpBm0C,SAGT,SAASC,UACP,OAAO,EA1HTvwD,GAAGuc,MAAM9Y,SAAW,WAClB,OAAOusD,kBAAkB,GAAI,KAmC/BhwD,GAAGuc,MAAMi0C,SAAW,WAClB,OAAOL,kBAAkB,EAAG,EAAG,CAAE,EAAG,KAiCtCnwD,GAAGuc,MAAMk0C,UAAY,WACnB,OAAOL,mBAAmB,CAAE,IAAM,CAAE,EAAG,KAyBzCpwD,GAAGuc,MAAM+zC,SAAW,WAClB,OAAOD,kBAAkB,CAAE,EAAG,KAuBhCrwD,GAAGkN,IAAM,GAITlN,GAAGkN,IAAIs1B,IAAM,WACX,IAAIkuB,YAAcC,sBAAuBC,YAAcC,sBAAuBC,aAAeP,QAASQ,UAAYC,eAAgBvO,WAAawO,qBAAsBvO,SAAWwO,mBAAoB5L,SAAW6L,mBAC/M,SAAS3uB,MACP,IAAI1oB,GAAKhW,KAAKX,IAAI,GAAIutD,YAAY30D,MAAMH,KAAME,YAAaie,GAAKjW,KAAKX,IAAI,GAAIytD,YAAY70D,MAAMH,KAAME,YAAagvC,GAAK2X,WAAW1mD,MAAMH,KAAME,WAAa,MAAO2qC,GAAKic,SAAS3mD,MAAMH,KAAME,WAAa,MAAOypD,GAAKzhD,KAAKqC,IAAIsgC,GAAKqE,IAAKsmB,GAAKtmB,GAAKrE,GAAK,EAAI,EAE3P,GADI1sB,GAAKD,KAAIu3C,GAAKt3C,GAAIA,GAAKD,GAAIA,GAAKu3C,IAChC9L,IAAM,GAAI,OAAO+L,cAAcv3C,GAAIq3C,KAAOt3C,GAAKw3C,cAAcx3C,GAAI,EAAIs3C,IAAM,IAAM,IACrF,IAAIC,GAAIrtB,GAAIutB,GAAIC,GAAoB72C,GAAIE,GAAID,GAAIE,GAAIkwB,GAAIC,GAAIwG,GAAIG,GAA5C34B,GAAK,EAAGzT,GAAK,EAAmCknC,KAAO,GAO3E,IANI8kB,KAAOlM,SAASvpD,MAAMH,KAAME,YAAc,GAAK,KACjDy1D,GAAKR,YAAcC,eAAiBltD,KAAKU,KAAKsV,GAAKA,GAAKC,GAAKA,KAAOg3C,UAAUh1D,MAAMH,KAAME,WACrFs1D,KAAI5rD,KAAO,GACZuU,KAAIvU,GAAKiT,QAAQ84C,GAAKx3C,GAAKjW,KAAKgV,IAAI04C,MACpC13C,KAAIb,GAAKR,QAAQ84C,GAAKz3C,GAAKhW,KAAKgV,IAAI04C,OAEtCz3C,GAAI,CACNY,GAAKZ,GAAKjW,KAAKoc,IAAI4qB,GAAKtlC,IACxBqV,GAAKd,GAAKjW,KAAKgV,IAAIgyB,GAAKtlC,IACxBoV,GAAKb,GAAKjW,KAAKoc,IAAIumB,GAAKjhC,IACxBsV,GAAKf,GAAKjW,KAAKgV,IAAI2tB,GAAKjhC,IACxB,IAAIiY,GAAK3Z,KAAKqC,IAAIsgC,GAAKqE,GAAK,EAAItlC,KAAO,EAAI,EAAI,EAC/C,GAAIA,IAAMisD,gBAAgB92C,GAAIE,GAAID,GAAIE,MAAQs2C,GAAK3zC,GAAI,CACrD,IAAIi0C,IAAM5mB,GAAKrE,IAAM,EACrB9rB,GAAKZ,GAAKjW,KAAKoc,IAAIwxC,IACnB72C,GAAKd,GAAKjW,KAAKgV,IAAI44C,IACnB92C,GAAKE,GAAK,WAGZH,GAAKE,GAAK,EAEZ,GAAIf,GAAI,CACNkxB,GAAKlxB,GAAKhW,KAAKoc,IAAIumB,GAAKxtB,IACxBgyB,GAAKnxB,GAAKhW,KAAKgV,IAAI2tB,GAAKxtB,IACxBw4B,GAAK33B,GAAKhW,KAAKoc,IAAI4qB,GAAK7xB,IACxB24B,GAAK93B,GAAKhW,KAAKgV,IAAIgyB,GAAK7xB,IACxB,IAAIuE,GAAK1Z,KAAKqC,IAAI2kC,GAAKrE,GAAK,EAAIxtB,KAAO,EAAI,EAAI,EAC/C,GAAIA,IAAMw4C,gBAAgBzmB,GAAIC,GAAIwG,GAAIG,MAAQ,EAAIwf,GAAK5zC,GAAI,CACzD,IAAIm0C,IAAM7mB,GAAKrE,IAAM,EACrBuE,GAAKlxB,GAAKhW,KAAKoc,IAAIyxC,IACnB1mB,GAAKnxB,GAAKhW,KAAKgV,IAAI64C,IACnBlgB,GAAKG,GAAK,WAGZ5G,GAAKC,GAAK,EAEZ,GAAIsa,GAAK,IAAM8L,GAAKvtD,KAAKZ,IAAIY,KAAKqC,IAAI4T,GAAKD,IAAM,GAAIg3C,aAAa/0D,MAAMH,KAAME,aAAe,KAAM,CACjGkoC,GAAKlqB,GAAKC,GAAKq3C,GAAK,EAAI,EACxB,IAAIQ,IAAMP,GAAIQ,IAAMR,GACpB,GAAI9L,GAAK,EAAG,CACV,IAAIuM,GAAW,MAANrgB,GAAa,CAAEzG,GAAIC,IAAa,MAANrwB,GAAa,CAAED,GAAIE,IAAO22B,yBAAyB,CAAE72B,GAAIE,IAAM,CAAE42B,GAAIG,IAAM,CAAEh3B,GAAIE,IAAM,CAAEkwB,GAAIC,KAAOvF,GAAK/qB,GAAKm3C,GAAG,GAAInsB,GAAK9qB,GAAKi3C,GAAG,GAAIvd,GAAK35B,GAAKk3C,GAAG,GAAItd,GAAK15B,GAAKg3C,GAAG,GAAIC,GAAK,EAAIjuD,KAAKgV,IAAIhV,KAAK0U,MAAMktB,GAAK6O,GAAK5O,GAAK6O,KAAO1wC,KAAKU,KAAKkhC,GAAKA,GAAKC,GAAKA,IAAM7hC,KAAKU,KAAK+vC,GAAKA,GAAKC,GAAKA,MAAQ,GAAIwd,GAAKluD,KAAKU,KAAKstD,GAAG,GAAKA,GAAG,GAAKA,GAAG,GAAKA,GAAG,IAC5WD,IAAM/tD,KAAKZ,IAAImuD,IAAKv3C,GAAKk4C,KAAOD,GAAK,IACrCH,IAAM9tD,KAAKZ,IAAImuD,IAAKt3C,GAAKi4C,KAAOD,GAAK,IAEvC,GAAU,MAANn3C,GAAY,CACd,IAAIq3C,IAAMC,yBAA+B,MAANzgB,GAAa,CAAEzG,GAAIC,IAAO,CAAEwG,GAAIG,IAAM,CAAEj3B,GAAIE,IAAMd,GAAI63C,IAAKR,IAAKe,IAAMD,yBAAyB,CAAEt3C,GAAIE,IAAM,CAAEkwB,GAAIC,IAAMlxB,GAAI63C,IAAKR,IAC/JC,KAAOO,IACTllB,KAAK9tC,KAAK,IAAKqzD,IAAI,GAAI,IAAKL,IAAK,IAAKA,IAAK,QAAS5tB,GAAI,IAAKiuB,IAAI,GAAI,IAAKl4C,GAAI,IAAKA,GAAI,MAAO,EAAIq3C,GAAKK,gBAAgBQ,IAAI,GAAG,GAAIA,IAAI,GAAG,GAAIE,IAAI,GAAG,GAAIA,IAAI,GAAG,IAAK,IAAKf,GAAI,IAAKe,IAAI,GAAI,IAAKP,IAAK,IAAKA,IAAK,QAAS5tB,GAAI,IAAKmuB,IAAI,IAEpOzlB,KAAK9tC,KAAK,IAAKqzD,IAAI,GAAI,IAAKL,IAAK,IAAKA,IAAK,QAAS5tB,GAAI,IAAKmuB,IAAI,SAGnEzlB,KAAK9tC,KAAK,IAAK+b,GAAI,IAAKE,IAE1B,GAAU,MAAN42B,GAAY,CACd,IAAI2gB,IAAMF,yBAAyB,CAAEv3C,GAAIE,IAAM,CAAE42B,GAAIG,IAAM93B,IAAK+3C,IAAKT,IAAKiB,IAAMH,yBAAyB,CAAElnB,GAAIC,IAAY,MAANrwB,GAAa,CAAED,GAAIE,IAAO,CAAED,GAAIE,IAAMhB,IAAK+3C,IAAKT,IACjKC,KAAOQ,IACTnlB,KAAK9tC,KAAK,IAAKyzD,IAAI,GAAI,IAAKR,IAAK,IAAKA,IAAK,QAAS7tB,GAAI,IAAKquB,IAAI,GAAI,IAAKv4C,GAAI,IAAKA,GAAI,MAAOs3C,GAAKK,gBAAgBY,IAAI,GAAG,GAAIA,IAAI,GAAG,GAAID,IAAI,GAAG,GAAIA,IAAI,GAAG,IAAK,IAAK,EAAIhB,GAAI,IAAKgB,IAAI,GAAI,IAAKP,IAAK,IAAKA,IAAK,QAAS7tB,GAAI,IAAKouB,IAAI,IAEpO1lB,KAAK9tC,KAAK,IAAKyzD,IAAI,GAAI,IAAKR,IAAK,IAAKA,IAAK,QAAS7tB,GAAI,IAAKouB,IAAI,SAGnE1lB,KAAK9tC,KAAK,IAAKosC,GAAI,IAAKC,SAG1ByB,KAAK9tC,KAAK,IAAK+b,GAAI,IAAKE,IACd,MAAND,IAAY8xB,KAAK9tC,KAAK,IAAKmb,GAAI,IAAKA,GAAI,MAAO0D,GAAI,IAAK2zC,GAAI,IAAKx2C,GAAI,IAAKE,IAC9E4xB,KAAK9tC,KAAK,IAAKosC,GAAI,IAAKC,IACd,MAANwG,IAAY/E,KAAK9tC,KAAK,IAAKkb,GAAI,IAAKA,GAAI,MAAO0D,GAAI,IAAK,EAAI4zC,GAAI,IAAK3f,GAAI,IAAKG,IAGpF,OADAlF,KAAK9tC,KAAK,KACH8tC,KAAKrf,KAAK,IAEnB,SAASikC,cAAcv3C,GAAIq3C,IACzB,MAAO,MAAQr3C,GAAK,IAAMA,GAAK,IAAMA,GAAK,QAAUq3C,GAAK,OAASr3C,GAAK,IAAMA,GAAK,IAAMA,GAAK,QAAUq3C,GAAK,MAAQr3C,GAyCtH,OAvCAyoB,IAAIkuB,YAAc,SAAS1sD,GACzB,OAAKlI,UAAUvB,QACfm2D,YAAc/lC,WAAW3mB,GAClBw+B,KAFuBkuB,aAIhCluB,IAAIouB,YAAc,SAAS5sD,GACzB,OAAKlI,UAAUvB,QACfq2D,YAAcjmC,WAAW3mB,GAClBw+B,KAFuBouB,aAIhCpuB,IAAIsuB,aAAe,SAAS9sD,GAC1B,OAAKlI,UAAUvB,QACfu2D,aAAenmC,WAAW3mB,GACnBw+B,KAFuBsuB,cAIhCtuB,IAAIuuB,UAAY,SAAS/sD,GACvB,OAAKlI,UAAUvB,QACfw2D,UAAY/sD,GAAKgtD,eAAiBA,eAAiBrmC,WAAW3mB,GACvDw+B,KAFuBuuB,WAIhCvuB,IAAIigB,WAAa,SAASz+C,GACxB,OAAKlI,UAAUvB,QACfkoD,WAAa93B,WAAW3mB,GACjBw+B,KAFuBigB,YAIhCjgB,IAAIkgB,SAAW,SAAS1+C,GACtB,OAAKlI,UAAUvB,QACfmoD,SAAW/3B,WAAW3mB,GACfw+B,KAFuBkgB,UAIhClgB,IAAI8iB,SAAW,SAASthD,GACtB,OAAKlI,UAAUvB,QACf+qD,SAAW36B,WAAW3mB,GACfw+B,KAFuB8iB,UAIhC9iB,IAAI1C,SAAW,WACb,IAAIlgB,IAAM8wC,YAAY30D,MAAMH,KAAME,aAAc80D,YAAY70D,MAAMH,KAAME,YAAc,EAAGoG,IAAMugD,WAAW1mD,MAAMH,KAAME,aAAc4mD,SAAS3mD,MAAMH,KAAME,YAAc,EAAI,MAC3K,MAAO,CAAEgI,KAAKoc,IAAIhe,GAAK0d,EAAG9b,KAAKgV,IAAI5W,GAAK0d,IAEnC4iB,KAET,IAAIwuB,eAAiB,OACrB,SAASL,sBAAsBtsD,GAC7B,OAAOA,EAAEqsD,YAEX,SAASG,sBAAsBxsD,GAC7B,OAAOA,EAAEusD,YAEX,SAASK,qBAAqB5sD,GAC5B,OAAOA,EAAEo+C,WAEX,SAASyO,mBAAmB7sD,GAC1B,OAAOA,EAAEq+C,SAEX,SAASyO,mBAAmB9sD,GAC1B,OAAOA,GAAKA,EAAEihD,SAEhB,SAASmM,gBAAgB92C,GAAIE,GAAID,GAAIE,IACnC,OAAQH,GAAKC,IAAMC,IAAMA,GAAKC,IAAMH,GAAK,EAAI,EAAI,EAEnD,SAASu3C,yBAAyBj5C,GAAIzT,GAAIuU,GAAIs3C,GAAID,IAChD,IAAIkB,IAAMr5C,GAAG,GAAKzT,GAAG,GAAI+sD,IAAMt5C,GAAG,GAAKzT,GAAG,GAAI5C,IAAMwuD,GAAKC,IAAMA,IAAMvtD,KAAKU,KAAK8tD,IAAMA,IAAMC,IAAMA,KAAMC,GAAK5vD,GAAK2vD,IAAKE,IAAM7vD,GAAK0vD,IAAK13C,GAAK3B,GAAG,GAAKu5C,GAAI13C,GAAK7B,GAAG,GAAKw5C,GAAIznB,GAAKxlC,GAAG,GAAKgtD,GAAIvnB,GAAKzlC,GAAG,GAAKitD,GAAIhhB,IAAM72B,GAAKowB,IAAM,EAAG4G,IAAM92B,GAAKmwB,IAAM,EAAGlzB,GAAKizB,GAAKpwB,GAAI5C,GAAKizB,GAAKnwB,GAAIrB,GAAK1B,GAAKA,GAAKC,GAAKA,GAAI4H,EAAI7F,GAAKs3C,GAAIqB,EAAI93C,GAAKqwB,GAAKD,GAAKlwB,GAAIzW,GAAK2T,GAAK,GAAK,EAAI,GAAKlU,KAAKU,KAAKV,KAAKX,IAAI,EAAGyc,EAAIA,EAAInG,GAAKi5C,EAAIA,IAAKC,KAAOD,EAAI16C,GAAKD,GAAK1T,GAAKoV,GAAI20B,MAAQskB,EAAI36C,GAAKC,GAAK3T,GAAKoV,GAAIm5C,KAAOF,EAAI16C,GAAKD,GAAK1T,GAAKoV,GAAI60B,MAAQokB,EAAI36C,GAAKC,GAAK3T,GAAKoV,GAAIo5C,IAAMF,IAAMlhB,GAAIqhB,IAAM1kB,IAAMwD,GAAImhB,IAAMH,IAAMnhB,GAAIuhB,IAAM1kB,IAAMsD,GAEpkB,OADIihB,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,MAAKL,IAAMC,IAAKxkB,IAAME,KAC7D,CAAE,CAAEqkB,IAAMH,GAAIpkB,IAAMqkB,IAAM,CAAEE,IAAM54C,GAAK6F,EAAGwuB,IAAMr0B,GAAK6F,IAE9D,SAASqzC,YAAYnnB,YACnB,IAAIxpC,EAAI+tC,eAAgBx6B,EAAIy6B,eAAgB4iB,QAAUzyB,QAASI,YAAcsyB,kBAAmBC,eAAiBvyB,YAAY5lC,IAAKo4D,QAAU,GAC5I,SAASzxB,KAAK1xB,MACZ,IAAyD7L,EAArDs8B,SAAW,GAAIQ,OAAS,GAAI3mC,GAAK,EAAGkD,EAAIwS,KAAK3V,OAAWw2C,GAAKpmB,WAAWroB,GAAI0uC,GAAKrmB,WAAW9U,GAChG,SAASkrB,UACPJ,SAAS/hC,KAAK,IAAKiiC,YAAYiL,WAAW3K,QAASkyB,UAErD,OAAS74D,EAAIkD,GACPw1D,QAAQzzD,KAAK7D,KAAMyI,EAAI6L,KAAK1V,GAAIA,GAClC2mC,OAAOviC,KAAK,EAAGmyC,GAAGtxC,KAAK7D,KAAMyI,EAAG7J,IAAKw2C,GAAGvxC,KAAK7D,KAAMyI,EAAG7J,KAC7C2mC,OAAO5mC,SAChBwmC,UACAI,OAAS,IAIb,OADIA,OAAO5mC,QAAQwmC,UACZJ,SAASpmC,OAASomC,SAAStT,KAAK,IAAM,KA2B/C,OAzBAuU,KAAKt/B,EAAI,SAASoE,GAChB,OAAK5K,UAAUvB,QACf+H,EAAIoE,EACGk7B,MAFuBt/B,GAIhCs/B,KAAK/rB,EAAI,SAASnP,GAChB,OAAK5K,UAAUvB,QACfsb,EAAInP,EACGk7B,MAFuB/rB,GAIhC+rB,KAAKsxB,QAAU,SAASxsD,GACtB,OAAK5K,UAAUvB,QACf24D,QAAUxsD,EACHk7B,MAFuBsxB,SAIhCtxB,KAAKf,YAAc,SAASn6B,GAC1B,OAAK5K,UAAUvB,QACc64D,eAAZ,mBAAN1sD,EAAmCm6B,YAAcn6B,GAA0Bm6B,YAAcyyB,yBAAyB/qD,IAAI7B,IAAMysD,mBAAmBl4D,IACnJ2mC,MAFuBwxB,gBAIhCxxB,KAAKyxB,QAAU,SAAS3sD,GACtB,OAAK5K,UAAUvB,QACf84D,QAAU3sD,EACHk7B,MAFuByxB,SAIzBzxB,KAET5hC,GAAGkN,IAAI00B,KAAO,WACZ,OAAOqxB,YAAYprD,cAErB,IAAIyrD,yBAA2BtzD,GAAG8F,IAAI,CACpCg2C,OAAQqX,kBACR,gBAAiBI,wBACjBt1D,KAsBF,SAASu1D,gBAAgBryB,QACvB,IAAI3mC,EAAI,EAAGkD,EAAIyjC,OAAO5mC,OAAQoJ,EAAIw9B,OAAO,GAAIuL,KAAO,CAAE/oC,EAAE,GAAI,IAAKA,EAAE,IACnE,OAASnJ,EAAIkD,GAAGgvC,KAAK9tC,KAAK,KAAM+E,EAAE,IAAMA,EAAIw9B,OAAO3mC,IAAI,IAAM,EAAG,IAAKmJ,EAAE,IACnEjG,EAAI,GAAGgvC,KAAK9tC,KAAK,IAAK+E,EAAE,IAC5B,OAAO+oC,KAAKrf,KAAK,KAzBjB,cAAeomC,sBACf,aAAcC,qBACdC,MAAOC,iBACP,aAiGF,SAASC,qBAAqB1yB,QAC5B,GAAIA,OAAO5mC,OAAS,EAAG,OAAO44D,kBAAkBhyB,QAChD,IAA0C2yB,GAAtCpnB,KAAO,GAAIlyC,GAAK,EAAGkD,EAAIyjC,OAAO5mC,OAAY0mD,GAAK,CAAE,GAAKC,GAAK,CAAE,GACjE,OAAS1mD,EAAI,GACXs5D,GAAK3yB,OAAO3mC,GACZymD,GAAGriD,KAAKk1D,GAAG,IACX5S,GAAGtiD,KAAKk1D,GAAG,IAEbpnB,KAAK9tC,KAAKm1D,gBAAgBC,wBAAyB/S,IAAM,IAAM8S,gBAAgBC,wBAAyB9S,OACtG1mD,EACF,OAASA,EAAIkD,GACXo2D,GAAK3yB,OAAO3mC,GACZymD,GAAG9d,QACH8d,GAAGriD,KAAKk1D,GAAG,IACX5S,GAAG/d,QACH+d,GAAGtiD,KAAKk1D,GAAG,IACXG,uBAAuBvnB,KAAMuU,GAAIC,IAEnC,OAAOxU,KAAKrf,KAAK,KAlHjB,eAoHF,SAAS6mC,uBAAuB/yB,QAC9B,IAAIuL,KAA4ConB,GAAtCt5D,GAAK,EAAGkD,EAAIyjC,OAAO5mC,OAAQ+J,EAAI5G,EAAI,EAAOujD,GAAK,GAAIC,GAAK,GAClE,OAAS1mD,EAAI,GACXs5D,GAAK3yB,OAAO3mC,EAAIkD,GAChBujD,GAAGriD,KAAKk1D,GAAG,IACX5S,GAAGtiD,KAAKk1D,GAAG,IAEbpnB,KAAO,CAAEqnB,gBAAgBC,wBAAyB/S,IAAK,IAAK8S,gBAAgBC,wBAAyB9S,OACnG1mD,EACF,OAASA,EAAI8J,GACXwvD,GAAK3yB,OAAO3mC,EAAIkD,GAChBujD,GAAG9d,QACH8d,GAAGriD,KAAKk1D,GAAG,IACX5S,GAAG/d,QACH+d,GAAGtiD,KAAKk1D,GAAG,IACXG,uBAAuBvnB,KAAMuU,GAAIC,IAEnC,OAAOxU,KAAKrf,KAAK,KApIjBs0B,OAsIF,SAASwS,kBAAkBhzB,OAAQkyB,SACjC,IAAI31D,EAAIyjC,OAAO5mC,OAAS,EACxB,GAAImD,EAEF,IADA,IAAkGiG,EAAGuB,EAAjGyV,GAAKwmB,OAAO,GAAG,GAAItmB,GAAKsmB,OAAO,GAAG,GAAIppB,GAAKopB,OAAOzjC,GAAG,GAAKid,GAAI3C,GAAKmpB,OAAOzjC,GAAG,GAAKmd,GAAIrgB,GAAK,IACtFA,GAAKkD,GACZiG,EAAIw9B,OAAO3mC,GACX0K,EAAI1K,EAAIkD,EACRiG,EAAE,GAAK0vD,QAAU1vD,EAAE,IAAM,EAAI0vD,UAAY14C,GAAKzV,EAAI6S,IAClDpU,EAAE,GAAK0vD,QAAU1vD,EAAE,IAAM,EAAI0vD,UAAYx4C,GAAK3V,EAAI8S,IAGtD,OAAO47C,iBAAiBzyB,SAhJxBizB,SAsCF,SAASC,oBAAoBlzB,OAAQkyB,SACnC,OAAOlyB,OAAO5mC,OAAS,EAAI44D,kBAAkBhyB,QAAUA,OAAO,GAAKmzB,mBAAmBnzB,OAAQozB,4BAA4BpzB,OAAQkyB,WAtClI,gBA8BF,SAASmB,wBAAwBrzB,OAAQkyB,SACvC,OAAOlyB,OAAO5mC,OAAS,EAAI44D,kBAAkBhyB,QAAUA,OAAO,GAAKmzB,mBAAmBnzB,OAAOzhC,MAAM,GAAI,GAAI60D,4BAA4BpzB,OAAQkyB,WA9B/I,kBAgCF,SAASoB,0BAA0BtzB,OAAQkyB,SACzC,OAAOlyB,OAAO5mC,OAAS,EAAIg5D,wBAAwBpyB,QAAUA,OAAO,GAAKmzB,oBAAoBnzB,OAAOviC,KAAKuiC,OAAO,IAChHA,QAASozB,4BAA4B,CAAEpzB,OAAOA,OAAO5mC,OAAS,IAAK8P,OAAO82B,OAAQ,CAAEA,OAAO,KAAOkyB,WAjClGqB,SAyLF,SAASC,oBAAoBxzB,QAC3B,OAAOA,OAAO5mC,OAAS,EAAI44D,kBAAkBhyB,QAAUA,OAAO,GAAKmzB,mBAAmBnzB,OAzBxF,SAASyzB,4BAA4BzzB,QACnC,IAAmB98B,EAAGnC,EAAGC,EAAG1E,EAAxBo3D,SAAW,GAAgBvwD,EATjC,SAASwwD,6BAA6B3zB,QACpC,IAAI3mC,EAAI,EAAGgJ,EAAI29B,OAAO5mC,OAAS,EAAG+J,EAAI,GAAI2U,GAAKkoB,OAAO,GAAI37B,GAAK27B,OAAO,GAAI98B,EAAIC,EAAE,GAAKywD,iBAAiB97C,GAAIzT,IAC1G,OAAShL,EAAIgJ,GACXc,EAAE9J,IAAM6J,GAAKA,EAAI0wD,iBAAiB97C,GAAKzT,GAAIA,GAAK27B,OAAO3mC,EAAI,MAAQ,EAGrE,OADA8J,EAAE9J,GAAK6J,EACAC,EAG4BwwD,CAA6B3zB,QAAS3mC,GAAK,EAAGgJ,EAAI29B,OAAO5mC,OAAS,EACrG,OAASC,EAAIgJ,GACXa,EAAI0wD,iBAAiB5zB,OAAO3mC,GAAI2mC,OAAO3mC,EAAI,IACvC2L,IAAI9B,GAAK,EACXC,EAAE9J,GAAK8J,EAAE9J,EAAI,GAAK,GAIlBiD,GAFAyE,EAAIoC,EAAE9J,GAAK6J,GAEHnC,GADRC,EAAImC,EAAE9J,EAAI,GAAK6J,GACClC,GACR,IACN1E,EAAQ,EAAJ4G,EAAQP,KAAKU,KAAK/G,GACtB6G,EAAE9J,GAAKiD,EAAIyE,EACXoC,EAAE9J,EAAI,GAAKiD,EAAI0E,GAIrB3H,GAAK,EACL,OAASA,GAAKgJ,GACZ/F,GAAK0jC,OAAOr9B,KAAKZ,IAAIM,EAAGhJ,EAAI,IAAI,GAAK2mC,OAAOr9B,KAAKX,IAAI,EAAG3I,EAAI,IAAI,KAAO,GAAK,EAAI8J,EAAE9J,GAAK8J,EAAE9J,KACzFq6D,SAASj2D,KAAK,CAAEnB,GAAK,EAAG6G,EAAE9J,GAAKiD,GAAK,IAEtC,OAAOo3D,SAGuFD,CAA4BzzB,YApL5H,SAASgyB,kBAAkBhyB,QACzB,OAAOA,OAAO5mC,OAAS,EAAI4mC,OAAO9T,KAAK,KAAO8T,OAAS,IAEzD,SAASoyB,wBAAwBpyB,QAC/B,OAAOA,OAAO9T,KAAK,KAAO,IAQ5B,SAASomC,sBAAsBtyB,QAE7B,IADA,IAAI3mC,EAAI,EAAGkD,EAAIyjC,OAAO5mC,OAAQoJ,EAAIw9B,OAAO,GAAIuL,KAAO,CAAE/oC,EAAE,GAAI,IAAKA,EAAE,MAC1DnJ,EAAIkD,GAAGgvC,KAAK9tC,KAAK,KAAM+E,EAAIw9B,OAAO3mC,IAAI,GAAI,IAAKmJ,EAAE,IAC1D,OAAO+oC,KAAKrf,KAAK,IAEnB,SAASqmC,qBAAqBvyB,QAE5B,IADA,IAAI3mC,EAAI,EAAGkD,EAAIyjC,OAAO5mC,OAAQoJ,EAAIw9B,OAAO,GAAIuL,KAAO,CAAE/oC,EAAE,GAAI,IAAKA,EAAE,MAC1DnJ,EAAIkD,GAAGgvC,KAAK9tC,KAAK,KAAM+E,EAAIw9B,OAAO3mC,IAAI,GAAI,IAAKmJ,EAAE,IAC1D,OAAO+oC,KAAKrf,KAAK,IAYnB,SAASinC,mBAAmBnzB,OAAQ0zB,UAClC,GAAIA,SAASt6D,OAAS,GAAK4mC,OAAO5mC,QAAUs6D,SAASt6D,QAAU4mC,OAAO5mC,QAAUs6D,SAASt6D,OAAS,EAChG,OAAO44D,kBAAkBhyB,QAE3B,IAAI8a,KAAO9a,OAAO5mC,QAAUs6D,SAASt6D,OAAQmyC,KAAO,GAAIzzB,GAAKkoB,OAAO,GAAIx9B,EAAIw9B,OAAO,GAAI/R,GAAKylC,SAAS,GAAI3vD,EAAIkqB,GAAI0kC,GAAK,EAMtH,GALI7X,OACFvP,MAAQ,KAAO/oC,EAAE,GAAa,EAARyrB,GAAG,GAAS,GAAK,KAAOzrB,EAAE,GAAa,EAARyrB,GAAG,GAAS,GAAK,IAAMzrB,EAAE,GAAK,IAAMA,EAAE,GAC3FsV,GAAKkoB,OAAO,GACZ2yB,GAAK,GAEHe,SAASt6D,OAAS,EAAG,CACvB2K,EAAI2vD,SAAS,GACblxD,EAAIw9B,OAAO2yB,IACXA,KACApnB,MAAQ,KAAOzzB,GAAG,GAAKmW,GAAG,IAAM,KAAOnW,GAAG,GAAKmW,GAAG,IAAM,KAAOzrB,EAAE,GAAKuB,EAAE,IAAM,KAAOvB,EAAE,GAAKuB,EAAE,IAAM,IAAMvB,EAAE,GAAK,IAAMA,EAAE,GACzH,IAAK,IAAInJ,EAAI,EAAGA,EAAIq6D,SAASt6D,OAAQC,IAAKs5D,KACxCnwD,EAAIw9B,OAAO2yB,IACX5uD,EAAI2vD,SAASr6D,GACbkyC,MAAQ,KAAO/oC,EAAE,GAAKuB,EAAE,IAAM,KAAOvB,EAAE,GAAKuB,EAAE,IAAM,IAAMvB,EAAE,GAAK,IAAMA,EAAE,GAG7E,GAAIs4C,KAAM,CACR,IAAI+Y,GAAK7zB,OAAO2yB,IAChBpnB,MAAQ,KAAO/oC,EAAE,GAAY,EAAPuB,EAAE,GAAS,GAAK,KAAOvB,EAAE,GAAY,EAAPuB,EAAE,GAAS,GAAK,IAAM8vD,GAAG,GAAK,IAAMA,GAAG,GAE7F,OAAOtoB,KAET,SAAS6nB,4BAA4BpzB,OAAQkyB,SAE3C,IADA,IAA0Cp6C,GAAtC47C,SAAW,GAAI3yD,GAAK,EAAImxD,SAAW,EAAO7tD,GAAK27B,OAAO,GAAI8zB,GAAK9zB,OAAO,GAAI3mC,EAAI,EAAGkD,EAAIyjC,OAAO5mC,SACvFC,EAAIkD,GACXub,GAAKzT,GACLA,GAAKyvD,GACLA,GAAK9zB,OAAO3mC,GACZq6D,SAASj2D,KAAK,CAAEsD,GAAK+yD,GAAG,GAAKh8C,GAAG,IAAK/W,GAAK+yD,GAAG,GAAKh8C,GAAG,MAEvD,OAAO47C,SAET,SAASjB,iBAAiBzyB,QACxB,GAAIA,OAAO5mC,OAAS,EAAG,OAAO44D,kBAAkBhyB,QAChD,IAAI3mC,EAAI,EAAGkD,EAAIyjC,OAAO5mC,OAAQu5D,GAAK3yB,OAAO,GAAIxmB,GAAKm5C,GAAG,GAAIj5C,GAAKi5C,GAAG,GAAI7S,GAAK,CAAEtmC,GAAIA,GAAIA,IAAKm5C,GAAK3yB,OAAO,IAAI,IAAM+f,GAAK,CAAErmC,GAAIA,GAAIA,GAAIi5C,GAAG,IAAMpnB,KAAO,CAAE/xB,GAAI,IAAKE,GAAI,IAAKk5C,gBAAgBC,wBAAyB/S,IAAK,IAAK8S,gBAAgBC,wBAAyB9S,KAEnQ,IADA/f,OAAOviC,KAAKuiC,OAAOzjC,EAAI,MACdlD,GAAKkD,GACZo2D,GAAK3yB,OAAO3mC,GACZymD,GAAG9d,QACH8d,GAAGriD,KAAKk1D,GAAG,IACX5S,GAAG/d,QACH+d,GAAGtiD,KAAKk1D,GAAG,IACXG,uBAAuBvnB,KAAMuU,GAAIC,IAInC,OAFA/f,OAAO+B,MACPwJ,KAAK9tC,KAAK,IAAKk1D,IACRpnB,KAAKrf,KAAK,IAsDnB,SAAS0mC,gBAAgB7xD,EAAGC,GAC1B,OAAOD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GA9I5DmxD,yBAAyBpsD,SAAQ,SAASjM,IAAKG,OAC7CA,MAAMH,IAAMA,IACZG,MAAM0hC,OAAS,WAAWj9B,KAAK5E,QA8IjC,IAAIi6D,wBAA0B,CAAE,EAAG,EAAI,EAAG,EAAI,EAAG,GAAKC,wBAA0B,CAAE,EAAG,EAAI,EAAG,EAAI,EAAG,GAAKnB,wBAA0B,CAAE,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,GACzJ,SAASC,uBAAuBvnB,KAAMpqC,EAAGuT,GACvC62B,KAAK9tC,KAAK,IAAKm1D,gBAAgBmB,wBAAyB5yD,GAAI,IAAKyxD,gBAAgBmB,wBAAyBr/C,GAAI,IAAKk+C,gBAAgBoB,wBAAyB7yD,GAAI,IAAKyxD,gBAAgBoB,wBAAyBt/C,GAAI,IAAKk+C,gBAAgBC,wBAAyB1xD,GAAI,IAAKyxD,gBAAgBC,wBAAyBn+C,IAEpT,SAASk/C,iBAAiB97C,GAAIzT,IAC5B,OAAQA,GAAG,GAAKyT,GAAG,KAAOzT,GAAG,GAAKyT,GAAG,IA2CvC,SAASm8C,kBAAkBj0B,QAEzB,IADA,IAAIlsB,MAAkC2K,EAAG1d,EAA9B1H,GAAK,EAAGkD,EAAIyjC,OAAO5mC,SACrBC,EAAIkD,GAEXkiB,GADA3K,MAAQksB,OAAO3mC,IACL,GACV0H,EAAI+S,MAAM,GAAK,MACfA,MAAM,GAAK2K,EAAI9b,KAAKoc,IAAIhe,GACxB+S,MAAM,GAAK2K,EAAI9b,KAAKgV,IAAI5W,GAE1B,OAAOi/B,OAET,SAASk0B,YAAYvpB,YACnB,IAAInxB,GAAK01B,eAAgBz1B,GAAKy1B,eAAgBx1B,GAAK,EAAGC,GAAKw1B,eAAgB4iB,QAAUzyB,QAASI,YAAcsyB,kBAAmBC,eAAiBvyB,YAAY5lC,IAAKq6D,mBAAqBz0B,YAAajK,EAAI,IAAKy8B,QAAU,GACtN,SAASj2B,KAAKltB,MACZ,IAAwE7L,EAIpD/B,EAAGuT,EAJnB8qB,SAAW,GAAI40B,QAAU,GAAIC,QAAU,GAAIh7D,GAAK,EAAGkD,EAAIwS,KAAK3V,OAAWk7D,IAAM9qC,WAAWhQ,IAAK+6C,IAAM/qC,WAAW9P,IAAK86C,IAAMh7C,KAAOC,GAAK,WACvI,OAAOtY,GACLqoB,WAAW/P,IAAKg7C,IAAM/6C,KAAOC,GAAK,WACpC,OAAOjF,GACL8U,WAAW7P,IACf,SAASimB,UACPJ,SAAS/hC,KAAK,IAAKiiC,YAAYiL,WAAW0pB,SAAUnC,SAAUz8B,EAAG0+B,mBAAmBxpB,WAAWypB,QAAQ9kC,WAAY4iC,SAAU,KAE/H,OAAS74D,EAAIkD,GACPw1D,QAAQzzD,KAAK7D,KAAMyI,EAAI6L,KAAK1V,GAAIA,IAClC+6D,QAAQ32D,KAAK,CAAE0D,GAAKmzD,IAAIh2D,KAAK7D,KAAMyI,EAAG7J,GAAIqb,GAAK6/C,IAAIj2D,KAAK7D,KAAMyI,EAAG7J,KACjEg7D,QAAQ52D,KAAK,EAAG+2D,IAAIl2D,KAAK7D,KAAMyI,EAAG7J,IAAKo7D,IAAIn2D,KAAK7D,KAAMyI,EAAG7J,MAChD+6D,QAAQh7D,SACjBwmC,UACAw0B,QAAU,GACVC,QAAU,IAId,OADID,QAAQh7D,QAAQwmC,UACbJ,SAASpmC,OAASomC,SAAStT,KAAK,IAAM,KAiD/C,OA/CA+P,KAAK96B,EAAI,SAASoE,GAChB,OAAK5K,UAAUvB,QACfogB,GAAKC,GAAKlU,EACH02B,MAFuBxiB,IAIhCwiB,KAAKziB,GAAK,SAASjU,GACjB,OAAK5K,UAAUvB,QACfogB,GAAKjU,EACE02B,MAFuBziB,IAIhCyiB,KAAKxiB,GAAK,SAASlU,GACjB,OAAK5K,UAAUvB,QACfqgB,GAAKlU,EACE02B,MAFuBxiB,IAIhCwiB,KAAKvnB,EAAI,SAASnP,GAChB,OAAK5K,UAAUvB,QACfsgB,GAAKC,GAAKpU,EACH02B,MAFuBtiB,IAIhCsiB,KAAKviB,GAAK,SAASnU,GACjB,OAAK5K,UAAUvB,QACfsgB,GAAKnU,EACE02B,MAFuBviB,IAIhCuiB,KAAKtiB,GAAK,SAASpU,GACjB,OAAK5K,UAAUvB,QACfugB,GAAKpU,EACE02B,MAFuBtiB,IAIhCsiB,KAAK81B,QAAU,SAASxsD,GACtB,OAAK5K,UAAUvB,QACf24D,QAAUxsD,EACH02B,MAFuB81B,SAIhC91B,KAAKyD,YAAc,SAASn6B,GAC1B,OAAK5K,UAAUvB,QACc64D,eAAZ,mBAAN1sD,EAAmCm6B,YAAcn6B,GAA0Bm6B,YAAcyyB,yBAAyB/qD,IAAI7B,IAAMysD,mBAAmBl4D,IAC1Jq6D,mBAAqBz0B,YAAYpQ,SAAWoQ,YAC5CjK,EAAIiK,YAAY/D,OAAS,IAAM,IACxBM,MAJuBg2B,gBAMhCh2B,KAAKi2B,QAAU,SAAS3sD,GACtB,OAAK5K,UAAUvB,QACf84D,QAAU3sD,EACH02B,MAFuBi2B,SAIzBj2B,KAqET,SAASy4B,mBAAmBxxD,GAC1B,OAAOA,EAAE0/B,OAgCX,SAAS+xB,0BAA0BzxD,GACjC,MAAO,CAAEA,EAAE/B,EAAG+B,EAAEwR,GASlB,SAASkgD,gCAAgCjqB,YACvC,OAAO,WACL,IAAIznC,EAAIynC,WAAW/vC,MAAMH,KAAME,WAAY8jB,EAAIvb,EAAE,GAAInC,EAAImC,EAAE,GAAK,MAChE,MAAO,CAAEub,EAAI9b,KAAKoc,IAAIhe,GAAI0d,EAAI9b,KAAKgV,IAAI5W,KAoB3C,SAAS8zD,oBACP,OAAO,GAET,SAASC,oBACP,MAAO,SAET,SAASC,oBAAoBxuD,MAC3B,IAAIkY,EAAI9b,KAAKU,KAAKkD,KAAO,GACzB,MAAO,MAAQkY,EAAI,IAAMA,EAAI,IAAMA,EAAI,aAAeA,EAAI,IAAMA,EAAI,IAAMA,EAAI,YAAcA,EAAI,IAvOlG5f,GAAGkN,IAAI00B,KAAKu0B,OAAS,WACnB,IAAIv0B,KAAOqxB,YAAYmC,mBAGvB,OAFAxzB,KAAKmC,OAASnC,KAAKt/B,SAAUs/B,KAAKt/B,EAClCs/B,KAAKlC,MAAQkC,KAAK/rB,SAAU+rB,KAAK/rB,EAC1B+rB,MAsFT6xB,sBAAsBhjC,QAAUijC,qBAChCA,qBAAqBjjC,QAAUgjC,sBAC/BzzD,GAAGkN,IAAIkwB,KAAO,WACZ,OAAOi4B,YAAYxtD,cAErB7H,GAAGkN,IAAIkwB,KAAK+4B,OAAS,WACnB,IAAI/4B,KAAOi4B,YAAYD,mBAOvB,OANAh4B,KAAK2G,OAAS3G,KAAK96B,SAAU86B,KAAK96B,EAClC86B,KAAKszB,YAActzB,KAAKziB,UAAWyiB,KAAKziB,GACxCyiB,KAAKwzB,YAAcxzB,KAAKxiB,UAAWwiB,KAAKxiB,GACxCwiB,KAAKsC,MAAQtC,KAAKvnB,SAAUunB,KAAKvnB,EACjCunB,KAAKqlB,WAAarlB,KAAKviB,UAAWuiB,KAAKviB,GACvCuiB,KAAKslB,SAAWtlB,KAAKtiB,UAAWsiB,KAAKtiB,GAC9BsiB,MAETp9B,GAAGkN,IAAI20C,MAAQ,WACb,IAAI95C,OAASykC,UAAWjwC,OAASkwC,UAAW1I,OAAS8xB,mBAAoBpT,WAAawO,qBAAsBvO,SAAWwO,mBACvH,SAASrP,MAAMx9C,EAAG7J,GAChB,IAAIiD,EAAIgP,SAAS7Q,KAAMmM,OAAQ1D,EAAG7J,GAAI0K,EAAIuH,SAAS7Q,KAAMW,OAAQ8H,EAAG7J,GACpE,MAAO,IAAMiD,EAAEwb,GAAKupB,IAAI/kC,EAAEmiB,EAAGniB,EAAE+H,GAAI/H,EAAEgpC,GAAKhpC,EAAEqtC,KAY9C,SAASsrB,OAAOl0D,EAAGC,GACjB,OAAOD,EAAE4oC,IAAM3oC,EAAE2oC,IAAM5oC,EAAEukC,IAAMtkC,EAAEskC,GAbkB2vB,CAAO34D,EAAGyH,GAAKmxD,MAAM54D,EAAEmiB,EAAGniB,EAAE+H,GAAI/H,EAAEmiB,EAAGniB,EAAEwb,IAAMo9C,MAAM54D,EAAEmiB,EAAGniB,EAAE+H,GAAIN,EAAE0a,EAAG1a,EAAE+T,IAAMupB,IAAIt9B,EAAE0a,EAAG1a,EAAEM,GAAIN,EAAEuhC,GAAKvhC,EAAE4lC,IAAMurB,MAAMnxD,EAAE0a,EAAG1a,EAAEM,GAAI/H,EAAEmiB,EAAGniB,EAAEwb,KAAO,IAE7L,SAASxM,SAAS9Q,KAAMkC,EAAGwG,EAAG7J,GAC5B,IAAIiS,SAAW5O,EAAE4B,KAAK9D,KAAM0I,EAAG7J,GAAIolB,EAAImkB,OAAOtkC,KAAK9D,KAAM8Q,SAAUjS,GAAIswC,GAAK2X,WAAWhjD,KAAK9D,KAAM8Q,SAAUjS,GAAK,MAAOisC,GAAKic,SAASjjD,KAAK9D,KAAM8Q,SAAUjS,GAAK,MAChK,MAAO,CACLolB,EAAGA,EACHkrB,GAAIA,GACJrE,GAAIA,GACJxtB,GAAI,CAAE2G,EAAI9b,KAAKoc,IAAI4qB,IAAKlrB,EAAI9b,KAAKgV,IAAIgyB,KACrCtlC,GAAI,CAAEoa,EAAI9b,KAAKoc,IAAIumB,IAAK7mB,EAAI9b,KAAKgV,IAAI2tB,MAMzC,SAASjE,IAAI5iB,EAAGjc,EAAGzB,GACjB,MAAO,IAAM0d,EAAI,IAAMA,EAAI,SAAU1d,EAAI,GAAK,MAAQyB,EAExD,SAAS0yD,MAAMv8C,GAAIb,GAAIc,GAAIvU,IACzB,MAAO,SAAWA,GA2BpB,OAzBAq8C,MAAM9d,OAAS,SAAS//B,GACtB,OAAKlI,UAAUvB,QACfwpC,OAASpZ,WAAW3mB,GACb69C,OAFuB9d,QAIhC8d,MAAM95C,OAAS,SAAS/D,GACtB,OAAKlI,UAAUvB,QACfwN,OAAS4iB,WAAW3mB,GACb69C,OAFuB95C,QAIhC85C,MAAMtlD,OAAS,SAASyH,GACtB,OAAKlI,UAAUvB,QACfgC,OAASouB,WAAW3mB,GACb69C,OAFuBtlD,QAIhCslD,MAAMY,WAAa,SAASz+C,GAC1B,OAAKlI,UAAUvB,QACfkoD,WAAa93B,WAAW3mB,GACjB69C,OAFuBY,YAIhCZ,MAAMa,SAAW,SAAS1+C,GACxB,OAAKlI,UAAUvB,QACfmoD,SAAW/3B,WAAW3mB,GACf69C,OAFuBa,UAIzBb,OAKT7hD,GAAGkN,IAAIopD,SAAW,WAChB,IAAIvuD,OAASykC,UAAWjwC,OAASkwC,UAAWX,WAAagqB,0BACzD,SAASQ,SAASjyD,EAAG7J,GACnB,IAAIye,GAAKlR,OAAOtI,KAAK7D,KAAMyI,EAAG7J,GAAI+7D,GAAKh6D,OAAOkD,KAAK7D,KAAMyI,EAAG7J,GAAI8J,GAAK2U,GAAGpD,EAAI0gD,GAAG1gD,GAAK,EAAGlS,EAAI,CAAEsV,GAAI,CAC/F3W,EAAG2W,GAAG3W,EACNuT,EAAGvR,GACF,CACDhC,EAAGi0D,GAAGj0D,EACNuT,EAAGvR,GACFiyD,IAEH,MAAO,KADP5yD,EAAIA,EAAEmC,IAAIgmC,aACK,GAAK,IAAMnoC,EAAE,GAAK,IAAMA,EAAE,GAAK,IAAMA,EAAE,GAiBxD,OAfA2yD,SAASvuD,OAAS,SAASzF,GACzB,OAAKxG,UAAUvB,QACfwN,OAAS4iB,WAAWroB,GACbg0D,UAFuBvuD,QAIhCuuD,SAAS/5D,OAAS,SAAS+F,GACzB,OAAKxG,UAAUvB,QACfgC,OAASouB,WAAWroB,GACbg0D,UAFuB/5D,QAIhC+5D,SAASxqB,WAAa,SAASxpC,GAC7B,OAAKxG,UAAUvB,QACfuxC,WAAaxpC,EACNg0D,UAFuBxqB,YAIzBwqB,UAKTt2D,GAAGkN,IAAIopD,SAASH,OAAS,WACvB,IAAIG,SAAWt2D,GAAGkN,IAAIopD,WAAYxqB,WAAagqB,0BAA2BU,YAAcF,SAASxqB,WAIjG,OAHAwqB,SAASxqB,WAAa,SAASxpC,GAC7B,OAAOxG,UAAUvB,OAASi8D,YAAYT,gCAAgCjqB,WAAaxpC,IAAMwpC,YAEpFwqB,UAQTt2D,GAAGkN,IAAIyiB,OAAS,WACd,IAAI3kB,KAAOirD,kBAAmBvuD,KAAOsuD,kBACrC,SAASrmC,OAAOtrB,EAAG7J,GACjB,OAAQi8D,eAAeluD,IAAIyC,KAAKvL,KAAK7D,KAAMyI,EAAG7J,KAAO07D,qBAAqBxuD,KAAKjI,KAAK7D,KAAMyI,EAAG7J,IAY/F,OAVAm1B,OAAO3kB,KAAO,SAAS1I,GACrB,OAAKxG,UAAUvB,QACfyQ,KAAO2f,WAAWroB,GACXqtB,QAFuB3kB,MAIhC2kB,OAAOjoB,KAAO,SAASpF,GACrB,OAAKxG,UAAUvB,QACfmN,KAAOijB,WAAWroB,GACXqtB,QAFuBjoB,MAIzBioB,QAYT,IAAI8mC,eAAiBz2D,GAAG8F,IAAI,CAC1BonC,OAAQgpB,oBACRQ,MAAO,SAAShvD,MACd,IAAIkY,EAAI9b,KAAKU,KAAKkD,KAAO,GAAK,EAC9B,MAAO,KAAO,EAAIkY,EAAI,KAAOA,EAAI,KAAOA,EAAI,KAAO,EAAIA,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAM,EAAIA,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAM,EAAIA,EAAI,KAAOA,EAAI,IAAMA,EAAI,KAAO,EAAIA,EAAI,KAEtK+2C,QAAS,SAASjvD,MAChB,IAAIwuC,GAAKpyC,KAAKU,KAAKkD,MAAQ,EAAIkvD,qBAAsB3gB,GAAKC,GAAK0gB,mBAC/D,MAAO,OAAS1gB,GAAK,IAAMD,GAApB,QAAwCC,GAAK,KAAOD,GAApD,OAET4gB,OAAQ,SAASnvD,MACf,IAAIkY,EAAI9b,KAAKU,KAAKkD,MAAQ,EAC1B,MAAO,KAAOkY,EAAI,KAAOA,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAMA,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAMA,EAAI,KAE7F,gBAAiB,SAASlY,MACxB,IAAIuuC,GAAKnyC,KAAKU,KAAKkD,KAAOovD,oBAAqB5gB,GAAKD,GAAK6gB,mBAAqB,EAC9E,MAAO,MAAQ5gB,GAAK,IAAMD,GAAK,KAAOC,GAAK,KAAOD,GAAK,KAAOC,GAAK,KAErE,cAAe,SAASxuC,MACtB,IAAIuuC,GAAKnyC,KAAKU,KAAKkD,KAAOovD,oBAAqB5gB,GAAKD,GAAK6gB,mBAAqB,EAC9E,MAAO,OAAS5gB,GAAK,IAAMD,GAAK,IAAMC,GAAK,KAAOD,GAAK,IAAMC,GAAK,OAGtEl2C,GAAGkN,IAAI6pD,YAAcN,eAAe5wD,OACpC,IAAIixD,mBAAqBhzD,KAAKU,KAAK,GAAIoyD,mBAAqB9yD,KAAKkmB,IAAI,GAAK7R,YAC1EzM,sBAAsBuQ,WAAa,SAASrc,MAO1C,IANA,IAAyG6M,SAAUjM,KAA/GwW,GAAKqH,0BAA4B24C,gBAAiBxpD,GAAKypD,uBAAuBr3D,MAAOgN,UAAY,GAAoBqP,WAAai7C,sBAAwB,CAC5JpoC,KAAM9tB,KAAKC,MACX68C,KAAMX,mBACNtuB,MAAO,EACPzU,SAAU,KAEH5W,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GAAK,CAC3CsI,UAAUhO,KAAK6N,SAAW,IAC1B,IAAK,IAAIE,MAAQ/Q,KAAK4H,GAAIhJ,GAAK,EAAGkD,EAAIiP,MAAMpS,SAAUC,EAAIkD,IACpD8C,KAAOmM,MAAMnS,KAAI28D,kBAAkB32D,KAAMhG,EAAGgT,GAAIwJ,GAAIiF,YACxDxP,SAAS7N,KAAK4B,MAGlB,OAAO42D,cAAcxqD,UAAWY,GAAIwJ,KAEtCtL,sBAAsB2rD,UAAY,SAASz3D,MACzC,OAAOhE,KAAKiV,KAAa,MAARjR,KAAe+c,uBAAyB26C,yBAAyBL,uBAAuBr3D,SAE3G,IAAI+c,uBAAyB26C,yBAAyBL,0BACtD,SAASK,yBAAyB9pD,IAChC,OAAO,WACL,IAAI+pD,KAAMC,SAAUC,QACfF,KAAO37D,KAAK4R,OAASiqD,OAASF,KAAKC,SAAWD,KAAKE,WACtDA,OAAO1oC,MAAM1rB,EAAI,KACjBo0D,OAAO1oC,MAAM7pB,EAAI9C,MACXm1D,KAAKG,aAAcH,KAAKC,iBAAuB57D,KAAK4R,IAC1D+pD,KAAKE,QAAU,GACfA,OAAO1tD,OAAS0tD,OAAO1tD,MAAMstD,UAAU53D,KAAK7D,KAAMA,KAAKkR,SAAU2qD,OAAOtd,SAI9E,SAASid,cAAc3rD,OAAQ+B,GAAIwJ,IAIjC,OAHA3L,YAAYI,OAAQksD,wBACpBlsD,OAAOmE,UAAYpC,GACnB/B,OAAOuL,GAAKA,GACLvL,OAET,IAAsD4S,uBAAwB64C,qBAA1ES,uBAAyB,GAAIX,gBAAkB,EAkEnD,SAASY,oBAAoBnsD,OAAQ7L,KAAMxE,MAAOkjB,OAChD,IAAItH,GAAKvL,OAAOuL,GAAIxJ,GAAK/B,OAAOmE,UAChC,OAAOU,kBAAkB7E,OAAyB,mBAAVrQ,MAAuB,SAASoF,KAAMhG,EAAGgJ,GAC/EhD,KAAKgN,IAAIwJ,IAAIsH,MAAMnX,IAAIvH,KAAM0e,MAAMljB,MAAMqE,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,OACnEpI,MAAQkjB,MAAMljB,OAAQ,SAASoF,MAClCA,KAAKgN,IAAIwJ,IAAIsH,MAAMnX,IAAIvH,KAAMxE,UAqFjC,SAASy8D,mBAAmB11D,GAE1B,OADS,MAALA,IAAWA,EAAI,IACZ,WACLvG,KAAKuV,YAAchP,GA6EvB,SAAS80D,uBAAuBr3D,MAC9B,OAAe,MAARA,KAAe,iBAAmB,gBAAkBA,KAAO,KAEpE,SAASu3D,kBAAkB32D,KAAMhG,EAAGgT,GAAIwJ,GAAI8gD,SAC1C,IAG2BhpC,KAAMC,MAAO3U,SAAU0jC,KAAMia,OAHpDR,KAAO/2D,KAAKgN,MAAQhN,KAAKgN,IAAM,CACjCiqD,OAAQ,EACRC,MAAO,IACLz7C,WAAas7C,KAAKvgD,IAOtB,SAASnQ,MAAMmxD,SACb,IAAIR,SAAWD,KAAKE,OAAQA,OAASF,KAAKC,UAQ1C,IAAK,IAAIS,YAPLR,SACFA,OAAO1oC,MAAM1rB,EAAI,KACjBo0D,OAAO1oC,MAAM7pB,EAAI9C,MACfm1D,KAAKG,aACAH,KAAKC,UACZC,OAAO1tD,OAAS0tD,OAAO1tD,MAAMstD,UAAU53D,KAAKe,KAAMA,KAAKsM,SAAU2qD,OAAOtd,QAErDod,KACnB,IAAKU,SAAWjhD,GAAI,CAClB,IAAIkhD,OAASX,KAAKU,UAClBC,OAAOnpC,MAAM1rB,EAAI,KACjB60D,OAAOnpC,MAAM7pB,EAAI9C,MACfm1D,KAAKG,aACAH,KAAKU,UAGhBlpC,MAAM1rB,EAAIwgD,KACVj1B,UAAS,WAKP,OAJIG,MAAM1rB,GAAKwgD,KAAKmU,SAAW,KAC7BjpC,MAAM1rB,EAAI,KACV0rB,MAAM7pB,EAAI9C,KAEL,IACN,EAAG0sB,MACNyoC,KAAKE,OAASzgD,GACdiF,WAAWlS,OAASkS,WAAWlS,MAAMlD,MAAMpH,KAAKe,KAAMA,KAAKsM,SAAUtS,GACrEu9D,OAAS,GACT97C,WAAWqC,MAAMpX,SAAQ,SAASjM,IAAKG,QACjCA,MAAQA,MAAMqE,KAAKe,KAAMA,KAAKsM,SAAUtS,KAC1Cu9D,OAAOn5D,KAAKxD,UAGhB0iD,KAAO7hC,WAAW6hC,KAClB1jC,SAAW6B,WAAW7B,SAExB,SAASypC,KAAKmU,SAEZ,IADA,IAAI9yD,EAAI8yD,QAAU59C,SAAUzc,EAAImgD,KAAK54C,GAAIxH,EAAIq6D,OAAOx9D,OAC7CmD,EAAI,GACTq6D,SAASr6D,GAAG+B,KAAKe,KAAM7C,GAEzB,GAAIuH,GAAK,EAGP,OAFA+W,WAAWlS,OAASkS,WAAWlS,MAAMoN,IAAI1X,KAAKe,KAAMA,KAAKsM,SAAUtS,KAC7D+8D,KAAKG,aAAcH,KAAKvgD,WAAiBxW,KAAKgN,IAC7C,EAGNyO,aACH6S,KAAOgpC,QAAQhpC,KACfC,MAAQH,UAxDV,SAASupC,SAASH,SAChB,IAAInpC,MAAQ5S,WAAW4S,MAEvB,GADAE,MAAM7pB,EAAI2pB,MAAQC,KACdD,OAASmpC,QAAS,OAAOnxD,MAAMmxD,QAAUnpC,OAC7CE,MAAM1rB,EAAIwD,QAoDiB,EAAGioB,MAC9B7S,WAAas7C,KAAKvgD,IAAM,CACtBsH,MAAO,IAAI7X,OACXqoB,KAAMA,KACNC,MAAOA,MACPF,MAAOipC,QAAQjpC,MACfzU,SAAU09C,QAAQ19C,SAClB0jC,KAAMga,QAAQha,KACd3D,MAAO3/C,GAETs9D,QAAU,OACRP,KAAKG,OAtTXC,uBAAuBl4D,KAAOiM,sBAAsBjM,KACpDk4D,uBAAuBlvD,MAAQiD,sBAAsBjD,MACrDkvD,uBAAuBn3D,KAAOkL,sBAAsBlL,KACpDm3D,uBAAuBjwD,KAAOgE,sBAAsBhE,KACpD1H,GAAGic,WAAa,SAAS7P,UAAWxM,MAClC,OAAOwM,WAAaA,UAAU6P,WAAaoC,uBAAyBjS,UAAU6P,WAAWrc,MAAQwM,UAAYpM,GAAGoM,YAAY6P,WAAW7P,YAEzIpM,GAAGic,WAAW/e,UAAYy6D,uBAC1BA,uBAAuBtrD,OAAS,SAASE,UACvC,IAAuDE,SAAUC,QAASlM,KAAtEwW,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAAWhD,UAAY,GACnDL,SAAWD,sBAAsBC,UACjC,IAAK,IAAI/I,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GAAK,CAC3CsI,UAAUhO,KAAK6N,SAAW,IAC1B,IAAK,IAAIE,MAAQ/Q,KAAK4H,GAAIhJ,GAAK,EAAGkD,EAAIiP,MAAMpS,SAAUC,EAAIkD,IACnD8C,KAAOmM,MAAMnS,MAAQkS,QAAUH,SAAS9M,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,KACpE,aAAchD,OAAMkM,QAAQI,SAAWtM,KAAKsM,UAChDqqD,kBAAkBzqD,QAASlS,EAAGgT,GAAIwJ,GAAIxW,KAAKgN,IAAIwJ,KAC/CvK,SAAS7N,KAAK8N,UAEdD,SAAS7N,KAAK,MAIpB,OAAOw4D,cAAcxqD,UAAWY,GAAIwJ,KAEtC2gD,uBAAuB5qD,UAAY,SAASR,UAC1C,IAAuDE,SAAU2rD,SAAU53D,KAAMkM,QAASuP,WAAtFjF,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAAWhD,UAAY,GACnDL,SAAWC,yBAAyBD,UACpC,IAAK,IAAI/I,GAAK,EAAGc,EAAI1I,KAAKrB,SAAUiJ,EAAIc,GACtC,IAAK,IAAIqI,MAAQ/Q,KAAK4H,GAAIhJ,GAAK,EAAGkD,EAAIiP,MAAMpS,SAAUC,EAAIkD,GACxD,GAAI8C,KAAOmM,MAAMnS,GAAI,CACnByhB,WAAazb,KAAKgN,IAAIwJ,IACtBohD,SAAW7rD,SAAS9M,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,GACjDoJ,UAAUhO,KAAK6N,SAAW,IAC1B,IAAK,IAAIpG,GAAK,EAAGjJ,EAAIg7D,SAAS79D,SAAU8L,EAAIjJ,IACtCsP,QAAU0rD,SAAS/xD,KAAI8wD,kBAAkBzqD,QAASrG,EAAGmH,GAAIwJ,GAAIiF,YACjExP,SAAS7N,KAAK8N,SAKtB,OAAO0qD,cAAcxqD,UAAWY,GAAIwJ,KAEtC2gD,uBAAuBnlD,OAAS,SAASA,QACvC,IAAoB/F,SAAiBjM,KAAjCoM,UAAY,GACM,mBAAX4F,SAAuBA,OAASrC,oBAAoBqC,SAC/D,IAAK,IAAIhP,EAAI,EAAGc,EAAI1I,KAAKrB,OAAQiJ,EAAIc,EAAGd,IAAK,CAC3CoJ,UAAUhO,KAAK6N,SAAW,IAC1B,IAAK,IAAIE,MAAiBnS,EAAI,EAAGkD,GAAxBiP,MAAQ/Q,KAAK4H,IAAqBjJ,OAAQC,EAAIkD,EAAGlD,KACnDgG,KAAOmM,MAAMnS,KAAOgY,OAAO/S,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,IAC3DiJ,SAAS7N,KAAK4B,MAIpB,OAAO42D,cAAcxqD,UAAWhR,KAAKgU,UAAWhU,KAAKob,KAEvD2gD,uBAAuBr5C,MAAQ,SAAS1e,KAAM0e,OAC5C,IAAItH,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAC5B,OAAI9T,UAAUvB,OAAS,EAAUqB,KAAK4E,OAAOgN,IAAIwJ,IAAIsH,MAAM/V,IAAI3I,MACxD0Q,kBAAkB1U,KAAe,MAAT0iB,MAAgB,SAAS9d,MACtDA,KAAKgN,IAAIwJ,IAAIsH,MAAM9V,OAAO5I,OACxB,SAASY,MACXA,KAAKgN,IAAIwJ,IAAIsH,MAAMnX,IAAIvH,KAAM0e,UAWjCq5C,uBAAuBhnD,KAAO,SAAS0nD,OAAQj9D,OAC7C,GAAIU,UAAUvB,OAAS,EAAG,CACxB,IAAKa,SAASi9D,OAAQz8D,KAAK+U,KAAKvV,MAAOi9D,OAAOj9D,QAC9C,OAAOQ,KAET,IAAIilC,YAAwB,aAAVw3B,OAAwBlZ,wBAA0BzF,eAAgB95C,KAAOI,GAAGwN,GAAGC,QAAQ4qD,QACzG,SAASzqD,WACPhS,KAAKiS,gBAAgBjO,MAEvB,SAAS8N,aACP9R,KAAK+R,kBAAkB/N,KAAKkC,MAAOlC,KAAKmC,OAE1C,SAASu2D,UAAUn2D,GACjB,OAAY,MAALA,EAAYyL,UAAYzL,GAAK,GAAI,WACtC,IAAiC3H,EAA7B0H,EAAItG,KAAKkT,aAAalP,MAC1B,OAAOsC,IAAMC,IAAM3H,EAAIqmC,YAAY3+B,EAAGC,GAAI,SAAS+C,GACjDtJ,KAAK4F,aAAa5B,KAAMpF,EAAE0K,QAIhC,SAASqzD,YAAYp2D,GACnB,OAAY,MAALA,EAAYuL,YAAcvL,GAAK,GAAI,WACxC,IAAqD3H,EAAjD0H,EAAItG,KAAKgV,eAAehR,KAAKkC,MAAOlC,KAAKmC,OAC7C,OAAOG,IAAMC,IAAM3H,EAAIqmC,YAAY3+B,EAAGC,GAAI,SAAS+C,GACjDtJ,KAAK8F,eAAe9B,KAAKkC,MAAOlC,KAAKmC,MAAOvH,EAAE0K,QAIpD,OAAO0yD,oBAAoBh8D,KAAM,QAAUy8D,OAAQj9D,MAAOwE,KAAKmC,MAAQw2D,YAAcD,YAEvFX,uBAAuBW,UAAY,SAASD,OAAQ/5C,OAClD,IAAI1e,KAAOI,GAAGwN,GAAGC,QAAQ4qD,QAazB,OAAOz8D,KAAK0iB,MAAM,QAAU+5C,OAAQz4D,KAAKmC,MANzC,SAASw2D,YAAYl0D,EAAG7J,GACtB,IAAIqD,EAAIygB,MAAM7e,KAAK7D,KAAMyI,EAAG7J,EAAGoB,KAAKgV,eAAehR,KAAKkC,MAAOlC,KAAKmC,QACpE,OAAOlE,GAAK,SAASqH,GACnBtJ,KAAK8F,eAAe9B,KAAKkC,MAAOlC,KAAKmC,MAAOlE,EAAEqH,MATlD,SAASozD,UAAUj0D,EAAG7J,GACpB,IAAIqD,EAAIygB,MAAM7e,KAAK7D,KAAMyI,EAAG7J,EAAGoB,KAAKkT,aAAalP,OACjD,OAAO/B,GAAK,SAASqH,GACnBtJ,KAAK4F,aAAa5B,KAAM/B,EAAEqH,QAWhCyyD,uBAAuBx2D,MAAQ,SAASvB,KAAMxE,MAAO4G,UACnD,IAAItE,EAAI5B,UAAUvB,OAClB,GAAImD,EAAI,EAAG,CACT,GAAoB,iBAATkC,KAAmB,CAE5B,IAAKoC,YADDtE,EAAI,IAAGtC,MAAQ,IACFwE,KAAMhE,KAAKuF,MAAMa,SAAUpC,KAAKoC,UAAW5G,OAC5D,OAAOQ,KAEToG,SAAW,GAEb,SAASiN,YACPrT,KAAKuF,MAAM+N,eAAetP,MAE5B,SAAS44D,YAAYr2D,GACnB,OAAY,MAALA,EAAY8M,WAAa9M,GAAK,GAAI,WACvC,IAA6E3H,EAAzE0H,EAAIvB,UAAU/E,MAAMoV,iBAAiBpV,KAAM,MAAMqV,iBAAiBrR,MACtE,OAAOsC,IAAMC,IAAM3H,EAAIk/C,eAAex3C,EAAGC,GAAI,SAAS+C,GACpDtJ,KAAKuF,MAAMC,YAAYxB,KAAMpF,EAAE0K,GAAIlD,cAIzC,OAAO41D,oBAAoBh8D,KAAM,SAAWgE,KAAMxE,MAAOo9D,cAE3Db,uBAAuBc,WAAa,SAAS74D,KAAM0e,MAAOtc,UAExD,SAASy2D,WAAWp0D,EAAG7J,GACrB,IAAIqD,EAAIygB,MAAM7e,KAAK7D,KAAMyI,EAAG7J,EAAGmG,UAAU/E,MAAMoV,iBAAiBpV,KAAM,MAAMqV,iBAAiBrR,OAC7F,OAAO/B,GAAK,SAASqH,GACnBtJ,KAAKuF,MAAMC,YAAYxB,KAAM/B,EAAEqH,GAAIlD,WAGvC,OAPIlG,UAAUvB,OAAS,IAAGyH,SAAW,IAO9BpG,KAAK0iB,MAAM,SAAW1e,KAAM64D,aAErCd,uBAAuBzmD,KAAO,SAAS9V,OACrC,OAAOw8D,oBAAoBh8D,KAAM,OAAQR,MAAOy8D,qBAQlDF,uBAAuBnvD,OAAS,WAC9B,IAAIgF,GAAK5R,KAAKgU,UACd,OAAOhU,KAAKiV,KAAK,kBAAkB,WACjC,IAAIlN,EACA/H,KAAK4R,IAAIkqD,MAAQ,IAAM/zD,EAAI/H,KAAKiR,aAAalJ,EAAEqM,YAAYpU,UAGnE+7D,uBAAuB7Z,KAAO,SAAS1iD,OACrC,IAAI4b,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAC5B,OAAI9T,UAAUvB,OAAS,EAAUqB,KAAK4E,OAAOgN,IAAIwJ,IAAI8mC,MAChC,mBAAV1iD,QAAsBA,MAAQ4E,GAAG89C,KAAK/hD,MAAMiE,GAAIlE,YACpDwU,kBAAkB1U,MAAM,SAAS4E,MACtCA,KAAKgN,IAAIwJ,IAAI8mC,KAAO1iD,WAGxBu8D,uBAAuB9oC,MAAQ,SAASzzB,OACtC,IAAI4b,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAC5B,OAAI9T,UAAUvB,OAAS,EAAUqB,KAAK4E,OAAOgN,IAAIwJ,IAAI6X,MAC9Cve,kBAAkB1U,KAAuB,mBAAVR,MAAuB,SAASoF,KAAMhG,EAAGgJ,GAC7EhD,KAAKgN,IAAIwJ,IAAI6X,OAASzzB,MAAMqE,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,KACtDpI,OAASA,MAAO,SAASoF,MAC5BA,KAAKgN,IAAIwJ,IAAI6X,MAAQzzB,UAGzBu8D,uBAAuBv9C,SAAW,SAAShf,OACzC,IAAI4b,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAC5B,OAAI9T,UAAUvB,OAAS,EAAUqB,KAAK4E,OAAOgN,IAAIwJ,IAAIoD,SAC9C9J,kBAAkB1U,KAAuB,mBAAVR,MAAuB,SAASoF,KAAMhG,EAAGgJ,GAC7EhD,KAAKgN,IAAIwJ,IAAIoD,SAAWtW,KAAKX,IAAI,EAAG/H,MAAMqE,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,MACpEpI,MAAQ0I,KAAKX,IAAI,EAAG/H,OAAQ,SAASoF,MACxCA,KAAKgN,IAAIwJ,IAAIoD,SAAWhf,UAG5Bu8D,uBAAuB9mD,KAAO,SAAS7F,KAAMb,UAC3C,IAAI6M,GAAKpb,KAAKob,GAAIxJ,GAAK5R,KAAKgU,UAC5B,GAAI9T,UAAUvB,OAAS,EAAG,CACxB,IAAIu9D,QAAUZ,qBAAsBwB,UAAYr6C,uBAChD,IACEA,uBAAyBrH,GACzB1G,kBAAkB1U,MAAM,SAAS4E,KAAMhG,EAAGgJ,GACxC0zD,qBAAuB12D,KAAKgN,IAAIwJ,IAChChM,KAAKvL,KAAKe,KAAMA,KAAKsM,SAAUtS,EAAGgJ,MAEpC,QACA0zD,qBAAuBY,QACvBz5C,uBAAyBq6C,gBAG3BpoD,kBAAkB1U,MAAM,SAAS4E,MAC/B,IAAIyb,WAAazb,KAAKgN,IAAIwJ,KACzBiF,WAAWlS,QAAUkS,WAAWlS,MAAQ/J,GAAG4J,SAAS,QAAS,MAAO,eAAeM,GAAGc,KAAMb,aAGjG,OAAOvO,MAET+7D,uBAAuB17C,WAAa,WAElC,IADA,IAAiFxP,SAAiBjM,KAAMyb,WAApG08C,IAAM/8D,KAAKob,GAAI4hD,MAAQ5B,gBAAiBxpD,GAAK5R,KAAKgU,UAAWhD,UAAY,GACpEpJ,EAAI,EAAGc,EAAI1I,KAAKrB,OAAQiJ,EAAIc,EAAGd,IAAK,CAC3CoJ,UAAUhO,KAAK6N,SAAW,IAC1B,IAAK,IAAIE,MAAiBnS,EAAI,EAAGkD,GAAxBiP,MAAQ/Q,KAAK4H,IAAqBjJ,OAAQC,EAAIkD,EAAGlD,KACpDgG,KAAOmM,MAAMnS,KAEf28D,kBAAkB32D,KAAMhG,EAAGgT,GAAIorD,IAAK,CAClC9pC,MAFF7S,WAAazb,KAAKgN,IAAImrD,MAEH7pC,KACjBgvB,KAAM7hC,WAAW6hC,KACjBjvB,MAAO5S,WAAW4S,MAAQ5S,WAAW7B,SACrCA,SAAU6B,WAAW7B,WAGzB3N,SAAS7N,KAAK4B,MAGlB,OAAO42D,cAAcxqD,UAAWY,GAAIorD,MAgFtC54D,GAAGkN,IAAI2rD,KAAO,WACZ,IAAqKC,YAAjKv8C,MAAQvc,GAAGuc,MAAMu/B,SAAUid,OAASC,yBAA0BC,cAAgB,EAAGC,cAAgB,EAAGC,YAAc,EAAGC,eAAiB,CAAE,IAAMC,WAAa,KAC/J,SAASR,KAAKx9C,GACZA,EAAExK,MAAK,WACL,IAEqkByoD,cAFjkBj+C,EAAIrb,GAAGqM,OAAOzQ,MACdghB,OAAShhB,KAAKmgB,WAAaQ,MAAOoB,OAAS/hB,KAAKmgB,UAAYQ,MAAMkC,OAClEgvC,MAAsB,MAAd4L,WAAqB17C,OAAO8vC,MAAQ9vC,OAAO8vC,MAAM1xD,MAAM4hB,OAAQy7C,gBAAkBz7C,OAAOxB,SAAWk9C,WAAY1L,WAA4B,MAAfmL,YAAsBn7C,OAAOgwC,WAAahwC,OAAOgwC,WAAW5xD,MAAM4hB,OAAQy7C,gBAAkBvxD,YAAcixD,YAAajV,KAAOxoC,EAAEtO,UAAU,SAASmD,KAAKu9C,MAAO9vC,QAAS47C,UAAY1V,KAAKxxC,QAAQb,OAAO,IAAK,WAAWb,KAAK,QAAS,QAAQxP,MAAM,UAAW,GAAIq4D,SAAWx5D,GAAGic,WAAW4nC,KAAKvxC,QAAQnR,MAAM,UAAW,GAAGqH,SAAUixD,WAAaz5D,GAAGic,WAAW4nC,KAAKx6C,SAASlI,MAAM,UAAW,GAAIu4D,YAAc51D,KAAKX,IAAI81D,cAAe,GAAKE,YACpjBvyD,MAAQ4iD,cAAc7rC,QAAS+uB,KAAOrxB,EAAEtO,UAAU,WAAWmD,KAAK,CAAE,IAAMypD,YAAcjtB,KAAKr6B,QAAQf,OAAO,QAAQX,KAAK,QAAS,UACtI3Q,GAAGic,WAAWywB,OACd6sB,UAAUjoD,OAAO,QACjBioD,UAAUjoD,OAAO,QACjB,IAAoQsJ,GAAIowB,GAAIlwB,GAAImwB,GAA5Q2uB,UAAYL,UAAUltD,OAAO,QAASwtD,WAAaJ,WAAWptD,OAAO,QAAS6E,KAAO2yC,KAAKx3C,OAAO,QAAQ6E,KAAKy8C,YAAamM,UAAYP,UAAUltD,OAAO,QAAS0tD,WAAaN,WAAWptD,OAAO,QAASykB,KAAkB,QAAXioC,QAA+B,SAAXA,QAAqB,EAAI,EAcjQ,GAbe,WAAXA,QAAkC,QAAXA,QACzBO,cAAgBU,aAAcp/C,GAAK,IAAKE,GAAK,IAAKkwB,GAAK,KAAMC,GAAK,KAClE/5B,KAAKP,KAAK,KAAMmgB,KAAO,EAAI,MAAQ,SAAS3vB,MAAM,cAAe,UACjEw4D,WAAWhpD,KAAK,IAAK,IAAM/J,MAAM,GAAK,IAAMkqB,KAAOooC,cAAgB,MAAQtyD,MAAM,GAAK,IAAMkqB,KAAOooC,iBAEnGI,cAAgBW,aAAcr/C,GAAK,IAAKE,GAAK,IAAKkwB,GAAK,KAAMC,GAAK,KAClE/5B,KAAKP,KAAK,KAAM,SAASxP,MAAM,cAAe2vB,KAAO,EAAI,MAAQ,SACjE6oC,WAAWhpD,KAAK,IAAK,IAAMmgB,KAAOooC,cAAgB,IAAMtyD,MAAM,GAAK,MAAQA,MAAM,GAAK,IAAMkqB,KAAOooC,gBAErGU,UAAUjpD,KAAKs6B,GAAIna,KAAOmoC,eAC1Ba,UAAUnpD,KAAKmK,GAAIgW,KAAO4oC,aAC1BG,WAAWlpD,KAAKq6B,GAAI,GAAGr6B,KAAKs6B,GAAIna,KAAOmoC,eACvCc,WAAWppD,KAAKiK,GAAI,GAAGjK,KAAKmK,GAAIgW,KAAO4oC,aACnC/7C,OAAOoxC,UAAW,CACpB,IAAIzsD,EAAIqb,OAAQ5F,GAAKzV,EAAEysD,YAAc,EACrCnyC,OAASe,OAAS,SAAStZ,GACzB,OAAO/B,EAAE+B,GAAK0T,SAEP6E,OAAOmyC,UAChBnyC,OAASe,OAET67C,SAAS/5D,KAAK65D,cAAe37C,OAAQf,QAEvC28C,UAAU95D,KAAK65D,cAAe18C,OAAQe,QACtC87C,WAAWh6D,KAAK65D,cAAe37C,OAAQA,WAqD3C,OAlDAk7C,KAAKt8C,MAAQ,SAASja,GACpB,OAAKxG,UAAUvB,QACfgiB,MAAQja,EACDu2D,MAFuBt8C,OAIhCs8C,KAAKE,OAAS,SAASz2D,GACrB,OAAKxG,UAAUvB,QACfw+D,OAASz2D,KAAK43D,mBAAqB53D,EAAI,GAAK02D,yBACrCH,MAFuBE,QAIhCF,KAAKpL,MAAQ,WACX,OAAK3xD,UAAUvB,QACf6+D,eAAiBj5D,SAASrE,WACnB+8D,MAFuBO,gBAIhCP,KAAKQ,WAAa,SAAS/2D,GACzB,OAAKxG,UAAUvB,QACf8+D,WAAa/2D,EACNu2D,MAFuBQ,YAIhCR,KAAKlL,WAAa,SAASrrD,GACzB,OAAKxG,UAAUvB,QACfu+D,YAAcx2D,EACPu2D,MAFuBC,aAIhCD,KAAKsB,SAAW,SAAS73D,GACvB,IAAI5E,EAAI5B,UAAUvB,OAClB,OAAKmD,GACLu7D,eAAiB32D,EACjB42D,eAAiBp9D,UAAU4B,EAAI,GACxBm7D,MAHQI,eAKjBJ,KAAKI,cAAgB,SAAS32D,GAC5B,OAAKxG,UAAUvB,QACf0+D,eAAiB32D,EACVu2D,MAFuBI,eAIhCJ,KAAKK,cAAgB,SAAS52D,GAC5B,OAAKxG,UAAUvB,QACf2+D,eAAiB52D,EACVu2D,MAFuBK,eAIhCL,KAAKM,YAAc,SAAS72D,GAC1B,OAAKxG,UAAUvB,QACf4+D,aAAe72D,EACRu2D,MAFuBM,aAIhCN,KAAKuB,cAAgB,WACnB,OAAOt+D,UAAUvB,QAAUs+D,MAEtBA,MAET,IAAIG,yBAA2B,SAAUkB,mBAAqB,CAC5D3kD,IAAK,EACLxS,MAAO,EACPwjD,OAAQ,EACR5jD,KAAM,GAER,SAASq3D,aAAa5tD,UAAWuO,GAAIC,IACnCxO,UAAUuE,KAAK,aAAa,SAAStM,GACnC,IAAIggC,GAAK1pB,GAAGtW,GACZ,MAAO,cAAgB8qB,SAASkV,IAAMA,GAAKzpB,GAAGvW,IAAM,SAGxD,SAAS41D,aAAa7tD,UAAWyO,GAAIC,IACnC1O,UAAUuE,KAAK,aAAa,SAAStM,GACnC,IAAIggC,GAAKxpB,GAAGxW,GACZ,MAAO,gBAAkB8qB,SAASkV,IAAMA,GAAKvpB,GAAGzW,IAAM,OAG1DrE,GAAGkN,IAAImtD,MAAQ,WACb,IAAoIC,cAAeC,cAA/IxwD,MAAQW,iBAAiB2vD,MAAO,aAAc,QAAS,YAAa/3D,EAAI,KAAMuT,EAAI,KAAM2kD,QAAU,CAAE,EAAG,GAAKC,QAAU,CAAE,EAAG,GAAmCC,QAAS,EAAMC,QAAS,EAAMC,QAAUC,oBAAoB,GAC9N,SAASR,MAAMh/C,GACbA,EAAExK,MAAK,WACL,IAAIwK,EAAIrb,GAAGqM,OAAOzQ,MAAMuF,MAAM,iBAAkB,OAAOA,MAAM,8BAA+B,iBAAiB+I,GAAG,kBAAmB4wD,YAAY5wD,GAAG,mBAAoB4wD,YAClKC,WAAa1/C,EAAEtO,UAAU,eAAemD,KAAK,CAAE,IACnD6qD,WAAW1oD,QAAQf,OAAO,QAAQX,KAAK,QAAS,cAAcxP,MAAM,aAAc,UAAUA,MAAM,SAAU,aAC5Gka,EAAEtO,UAAU,WAAWmD,KAAK,CAAE,IAAKmC,QAAQf,OAAO,QAAQX,KAAK,QAAS,UAAUxP,MAAM,SAAU,QAClG,IAAI65D,OAAS3/C,EAAEtO,UAAU,WAAWmD,KAAK0qD,QAAS/yD,aAClDmzD,OAAO1oD,OAAO9J,SACdwyD,OAAO3oD,QAAQf,OAAO,KAAKX,KAAK,SAAS,SAAStM,GAChD,MAAO,UAAYA,KAClBlD,MAAM,UAAU,SAASkD,GAC1B,OAAO42D,mBAAmB52D,MACzBiN,OAAO,QAAQX,KAAK,KAAK,SAAStM,GACnC,MAAO,QAAQxE,KAAKwE,IAAM,EAAI,QAC7BsM,KAAK,KAAK,SAAStM,GACpB,MAAO,QAAQxE,KAAKwE,IAAM,EAAI,QAC7BsM,KAAK,QAAS,GAAGA,KAAK,SAAU,GAAGxP,MAAM,aAAc,UAC1D65D,OAAO75D,MAAM,UAAWk5D,MAAM5xD,QAAU,OAAS,MACjD,IAA8E7B,MAA1Es0D,QAAUl7D,GAAGic,WAAWZ,GAAI8/C,iBAAmBn7D,GAAGic,WAAW8+C,YAC7Dz4D,IACFsE,MAAQ4iD,cAAclnD,GACtB64D,iBAAiBxqD,KAAK,IAAK/J,MAAM,IAAI+J,KAAK,QAAS/J,MAAM,GAAKA,MAAM,IACpEw0D,QAAQF,UAENrlD,IACFjP,MAAQ4iD,cAAc3zC,GACtBslD,iBAAiBxqD,KAAK,IAAK/J,MAAM,IAAI+J,KAAK,SAAU/J,MAAM,GAAKA,MAAM,IACrEy0D,QAAQH,UAEVI,OAAOJ,YAyDX,SAASI,OAAOjgD,GACdA,EAAEtO,UAAU,WAAW4D,KAAK,aAAa,SAAStM,GAChD,MAAO,aAAem2D,SAAS,KAAK36D,KAAKwE,IAAM,IAAMo2D,SAAS,KAAK56D,KAAKwE,IAAM,OAGlF,SAAS+2D,QAAQ//C,GACfA,EAAEhP,OAAO,WAAWsE,KAAK,IAAK6pD,QAAQ,IACtCn/C,EAAEtO,UAAU,2BAA2B4D,KAAK,QAAS6pD,QAAQ,GAAKA,QAAQ,IAE5E,SAASa,QAAQhgD,GACfA,EAAEhP,OAAO,WAAWsE,KAAK,IAAK8pD,QAAQ,IACtCp/C,EAAEtO,UAAU,2BAA2B4D,KAAK,SAAU8pD,QAAQ,GAAKA,QAAQ,IAE7E,SAASK,aACP,IAAyUtgD,OAAmCya,OAAxW14B,OAASX,KAAM2/D,YAAcv7D,GAAGqM,OAAOrM,GAAG+J,MAAMxN,QAASi/D,OAASzxD,MAAMY,GAAGpO,OAAQT,WAAYuf,EAAIrb,GAAGqM,OAAO9P,QAASk/D,SAAWF,YAAYhpD,QAASmpD,WAAa,UAAU77D,KAAK47D,WAAan5D,EAAGq5D,WAAa,UAAU97D,KAAK47D,WAAa5lD,EAAG+lD,SAAWL,YAAYzqD,QAAQ,UAAW+G,YAAc3D,sBAAsB3X,QAAiBqa,OAAS5W,GAAGwU,MAAMjY,QAC/V6X,EAAIpU,GAAGqM,OAAO1L,UAAUpE,SAAS2N,GAAG,gBAAiB2xD,SAAS3xD,GAAG,cAAe4xD,OAOpF,GANI97D,GAAG+J,MAAM+K,eACXV,EAAElK,GAAG,kBAAmB6xD,WAAW7xD,GAAG,iBAAkB8xD,UAExD5nD,EAAElK,GAAG,kBAAmB6xD,WAAW7xD,GAAG,gBAAiB8xD,UAEzD3gD,EAAEg8C,YAAYtqD,UAAU,KAAKsqD,YACzBuE,SACFhlD,OAAO,GAAK4jD,QAAQ,GAAK5jD,OAAO,GAChCA,OAAO,GAAK6jD,QAAQ,GAAK7jD,OAAO,QAC3B,GAAI6kD,SAAU,CACnB,IAAIQ,IAAM,KAAKp8D,KAAK47D,UAAWS,IAAM,KAAKr8D,KAAK47D,UAC/CxmC,OAAS,CAAEulC,QAAQ,EAAIyB,IAAMrlD,OAAO,GAAI6jD,QAAQ,EAAIyB,IAAMtlD,OAAO,IACjEA,OAAO,GAAK4jD,QAAQyB,IACpBrlD,OAAO,GAAK6jD,QAAQyB,SACXl8D,GAAG+J,MAAMoyD,SAAQ3hD,OAAS5D,OAAOlX,SAO5C,SAASm8D,UACiB,IAApB77D,GAAG+J,MAAMqyD,UACNR,WACHphD,OAAS,KACT5D,OAAO,IAAM4jD,QAAQ,GACrB5jD,OAAO,IAAM6jD,QAAQ,GACrBmB,SAAW,GAEbtxD,0BAGJ,SAASwxD,QACiB,IAApB97D,GAAG+J,MAAMqyD,SAA6B,GAAZR,WAC5BhlD,OAAO,IAAM4jD,QAAQ,GACrB5jD,OAAO,IAAM6jD,QAAQ,GACrBmB,SAAW,EACXtxD,0BAGJ,SAASyxD,YACP,IAAI9mD,MAAQjV,GAAGwU,MAAMjY,QAASob,OAAQ,EAClCsd,SACFhgB,MAAM,IAAMggB,OAAO,GACnBhgB,MAAM,IAAMggB,OAAO,IAEhB2mC,WACC57D,GAAG+J,MAAMoyD,QACN3hD,SAAQA,OAAS,EAAGggD,QAAQ,GAAKA,QAAQ,IAAM,GAAIC,QAAQ,GAAKA,QAAQ,IAAM,IACnF7jD,OAAO,GAAK4jD,UAAUvlD,MAAM,GAAKuF,OAAO,KACxC5D,OAAO,GAAK6jD,UAAUxlD,MAAM,GAAKuF,OAAO,MACnCA,OAAS,MAEdkhD,WAAaW,MAAMpnD,MAAO3S,EAAG,KAC/B84D,QAAQ//C,GACR1D,OAAQ,GAENgkD,WAAaU,MAAMpnD,MAAOY,EAAG,KAC/BwlD,QAAQhgD,GACR1D,OAAQ,GAENA,QACF2jD,OAAOjgD,GACPmgD,OAAO,CACLxwD,KAAM,QACNuhD,KAAMqP,SAAW,OAAS,YAIhC,SAASS,MAAMpnD,MAAOsH,MAAO/hB,GAC3B,IAAoJ0I,IAAKC,IAArJyD,MAAQ4iD,cAAcjtC,OAAQzC,GAAKlT,MAAM,GAAImT,GAAKnT,MAAM,GAAI0O,SAAWsB,OAAOpc,GAAI4I,OAAS5I,EAAIigE,QAAUD,QAAS9yD,KAAOtE,OAAO,GAAKA,OAAO,GAiBhJ,GAhBIw4D,WACF9hD,IAAMxE,SACNyE,IAAMrS,KAAO4N,UAEfpS,KAAO1I,EAAImgE,OAASD,QAAU52D,KAAKX,IAAI2W,GAAIhW,KAAKZ,IAAI6W,GAAI9E,MAAMza,KAAOya,MAAMza,GACvEohE,SACFz4D,KAAOD,KAAOoS,UAAY5N,MAEtB8S,SAAQlF,SAAWxR,KAAKX,IAAI2W,GAAIhW,KAAKZ,IAAI6W,GAAI,EAAIS,OAAOhgB,GAAK0I,OAC7DoS,SAAWpS,KACbC,IAAMD,IACNA,IAAMoS,UAENnS,IAAMmS,UAGNlS,OAAO,IAAMF,KAAOE,OAAO,IAAMD,IAInC,OAHI3I,EAAG+/D,cAAgB,KAAWD,cAAgB,KAClDl3D,OAAO,GAAKF,IACZE,OAAO,GAAKD,KACL,EAGX,SAAS64D,WACPD,YACA1gD,EAAEla,MAAM,iBAAkB,OAAO4L,UAAU,WAAW5L,MAAM,UAAWk5D,MAAM5xD,QAAU,OAAS,MAChGzI,GAAGqM,OAAO,QAAQlL,MAAM,SAAU,MAClCiT,EAAElK,GAAG,kBAAmB,MAAMA,GAAG,gBAAiB,MAAMA,GAAG,kBAAmB,MAAMA,GAAG,iBAAkB,MAAMA,GAAG,gBAAiB,MAAMA,GAAG,cAAe,MAC3J2N,cACA2jD,OAAO,CACLxwD,KAAM,aAtFVqQ,EAAEla,MAAM,iBAAkB,QAAQ4L,UAAU,WAAW5L,MAAM,UAAW,MACxEnB,GAAGqM,OAAO,QAAQlL,MAAM,SAAUo6D,YAAYp6D,MAAM,WACpDq6D,OAAO,CACLxwD,KAAM,eAER+wD,YAyJF,OAnPA1B,MAAMtwD,MAAQ,SAASsR,GACrBA,EAAExK,MAAK,WACL,IAAI2qD,OAASzxD,MAAMY,GAAG/O,KAAME,WAAYwgE,QAAU,CAChDh6D,EAAGk4D,QACH3kD,EAAG4kD,QACHjgE,EAAG8/D,cACH92D,EAAG+2D,eACFgC,QAAU3gE,KAAKmgB,WAAaugD,QAC/B1gE,KAAKmgB,UAAYugD,QACbj+C,uBACFre,GAAGqM,OAAOzQ,MAAMqgB,aAAapL,KAAK,eAAe,WAC/CypD,cAAgBiC,QAAQ/hE,EACxB+/D,cAAgBgC,QAAQ/4D,EACxBg3D,QAAU+B,QAAQj6D,EAClBm4D,QAAU8B,QAAQ1mD,EAClB2lD,OAAO,CACLxwD,KAAM,kBAEPsT,MAAM,eAAe,WACtB,IAAI2wC,GAAKzT,oBAAoBgf,QAAS8B,QAAQh6D,GAAIk6D,GAAKhhB,oBAAoBif,QAAS6B,QAAQzmD,GAE5F,OADAykD,cAAgBC,cAAgB,KACzB,SAASr1D,GACds1D,QAAU8B,QAAQh6D,EAAI2sD,GAAG/pD,GACzBu1D,QAAU6B,QAAQzmD,EAAI2mD,GAAGt3D,GACzBs2D,OAAO,CACLxwD,KAAM,QACNuhD,KAAM,eAGT17C,KAAK,aAAa,WACnBypD,cAAgBgC,QAAQ9hE,EACxB+/D,cAAgB+B,QAAQ94D,EACxBg4D,OAAO,CACLxwD,KAAM,QACNuhD,KAAM,WAERiP,OAAO,CACLxwD,KAAM,iBAIVwwD,OAAO,CACLxwD,KAAM,eAERwwD,OAAO,CACLxwD,KAAM,QACNuhD,KAAM,WAERiP,OAAO,CACLxwD,KAAM,kBA8HdqvD,MAAM/3D,EAAI,SAAS2H,GACjB,OAAKnO,UAAUvB,QAEfqgE,QAAUC,sBADVv4D,EAAI2H,IACgC,GAAK4L,GAClCwkD,OAHuB/3D,GAKhC+3D,MAAMxkD,EAAI,SAAS5L,GACjB,OAAKnO,UAAUvB,QAEfqgE,QAAUC,qBAAqBv4D,GAAK,IADpCuT,EAAI5L,IAEGowD,OAHuBxkD,GAKhCwkD,MAAM9M,MAAQ,SAAStjD,GACrB,OAAKnO,UAAUvB,QACX+H,GAAKuT,GAAG6kD,SAAWzwD,EAAE,GAAI0wD,SAAW1wD,EAAE,IAAa3H,EAAGo4D,SAAWzwD,EAAY4L,IAAG8kD,SAAW1wD,GACxFowD,OAFuB/3D,GAAKuT,EAAI,CAAE6kD,OAAQC,QAAWr4D,EAAIo4D,OAAS7kD,EAAI8kD,OAAS,MAIxFN,MAAMj3D,OAAS,SAAS6G,GACtB,IAAI0Q,GAAIC,GAAIC,GAAIC,GAAI5V,EACpB,OAAKpJ,UAAUvB,QAqBX+H,IACFqY,GAAK1Q,EAAE,GAAI2Q,GAAK3Q,EAAE,GACd4L,IAAG8E,GAAKA,GAAG,GAAIC,GAAKA,GAAG,IAC3B0/C,cAAgB,CAAE3/C,GAAIC,IAClBtY,EAAE8Z,SAAQzB,GAAKrY,EAAEqY,IAAKC,GAAKtY,EAAEsY,KAC7BA,GAAKD,KAAIzV,EAAIyV,GAAIA,GAAKC,GAAIA,GAAK1V,GAC/ByV,IAAM6/C,QAAQ,IAAM5/C,IAAM4/C,QAAQ,KAAIA,QAAU,CAAE7/C,GAAIC,MAExD/E,IACFgF,GAAK5Q,EAAE,GAAI6Q,GAAK7Q,EAAE,GACd3H,IAAGuY,GAAKA,GAAG,GAAIC,GAAKA,GAAG,IAC3By/C,cAAgB,CAAE1/C,GAAIC,IAClBjF,EAAEuG,SAAQvB,GAAKhF,EAAEgF,IAAKC,GAAKjF,EAAEiF,KAC7BA,GAAKD,KAAI3V,EAAI2V,GAAIA,GAAKC,GAAIA,GAAK5V,GAC/B2V,IAAM4/C,QAAQ,IAAM3/C,IAAM2/C,QAAQ,KAAIA,QAAU,CAAE5/C,GAAIC,MAErDu/C,QApCD/3D,IACEg4D,eACF3/C,GAAK2/C,cAAc,GAAI1/C,GAAK0/C,cAAc,KAE1C3/C,GAAK6/C,QAAQ,GAAI5/C,GAAK4/C,QAAQ,GAC1Bl4D,EAAE8Z,SAAQzB,GAAKrY,EAAE8Z,OAAOzB,IAAKC,GAAKtY,EAAE8Z,OAAOxB,KAC3CA,GAAKD,KAAIzV,EAAIyV,GAAIA,GAAKC,GAAIA,GAAK1V,KAGnC2Q,IACE0kD,eACF1/C,GAAK0/C,cAAc,GAAIz/C,GAAKy/C,cAAc,KAE1C1/C,GAAK4/C,QAAQ,GAAI3/C,GAAK2/C,QAAQ,GAC1B5kD,EAAEuG,SAAQvB,GAAKhF,EAAEuG,OAAOvB,IAAKC,GAAKjF,EAAEuG,OAAOtB,KAC3CA,GAAKD,KAAI3V,EAAI2V,GAAIA,GAAKC,GAAIA,GAAK5V,KAGhC5C,GAAKuT,EAAI,CAAE,CAAE8E,GAAIE,IAAM,CAAED,GAAIE,KAASxY,EAAI,CAAEqY,GAAIC,IAAO/E,GAAK,CAAEgF,GAAIC,MAoB7Eu/C,MAAMoC,MAAQ,WAKZ,OAJKpC,MAAM5xD,UACT+xD,QAAU,CAAE,EAAG,GAAKC,QAAU,CAAE,EAAG,GACnCH,cAAgBC,cAAgB,MAE3BF,OAETA,MAAM5xD,MAAQ,WACZ,QAASnG,GAAKk4D,QAAQ,IAAMA,QAAQ,MAAQ3kD,GAAK4kD,QAAQ,IAAMA,QAAQ,IAElEz6D,GAAGwJ,OAAO6wD,MAAOtwD,MAAO,OAEjC,IAAIkxD,mBAAqB,CACvBv9D,EAAG,YACHC,EAAG,YACHF,EAAG,YACH2W,EAAG,YACHsoD,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,eAEFhC,oBAAsB,CAAE,CAAE,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAAQ,CAAE,IAAK,KAAO,CAAE,IAAK,KAAO,IACpGvkC,eAAiBlE,QAAQrR,OAASia,eAAeD,WACjD+hC,kBAAoBxmC,eAAelB,IACnC2nC,kBAAoBD,kBAAkB,yBAE1C,SAASE,wBAAwBjoC,MAC/B,OAAOA,KAAKkoC,cA8Cd,SAASC,cAAcphB,OAAQ/O,QAAShsB,QACtC,SAASxE,MAAMja,GACb,OAAOw5C,OAAOx5C,GAUhB,SAAS66D,WAAW/5D,OAAQs0D,OAC1B,IAAkCn7D,QAAvB6G,OAAO,GAAKA,OAAO,IAAoBs0D,MAAOl9D,EAAIwF,GAAG4E,OAAOw4D,mBAAoB7gE,QAC3F,OAAO/B,GAAK4iE,mBAAmB7iE,OAAS,CAAEwyC,QAAQjT,KAAMi0B,yBAAyB3qD,OAAO0C,KAAI,SAASzB,GACnG,OAAOA,EAAI,WACTqzD,OAAO,IAAQl9D,EAAgFuyC,QAAQxwC,OAAS6gE,mBAAmB5iE,EAAI,GAAK4iE,mBAAmB5iE,GAAK+B,OAAS/B,EAAI,EAAIA,GAAlK,CAAE6iE,0BAA2BtP,yBAAyB3qD,OAAQs0D,OAAO,IAgC9F,OA5CAn7C,MAAMH,OAAS,SAAS9Z,GACtB,OAAOg7D,kBAAkBxhB,OAAO1/B,OAAO9Z,KAEzCia,MAAMJ,OAAS,SAAS7Z,GACtB,OAAKxG,UAAUvB,QACfuhD,OAAO3/B,OAAO7Z,GACPia,OAFuBu/B,OAAO3/B,SAASrW,IAAIw3D,oBAUpD/gD,MAAMstC,KAAO,SAAS5vB,SAAUsjC,MAC9B,IAAIphD,OAASI,MAAMJ,SAAU/Y,OAASmmD,eAAeptC,QAASnU,OAAqB,MAAZiyB,SAAmBkjC,WAAW/5D,OAAQ,IAA0B,iBAAb62B,UAAyBkjC,WAAW/5D,OAAQ62B,UAEtK,SAASujC,QAAQzoC,MACf,OAAQvyB,MAAMuyB,QAAUkF,SAASrzB,MAAMmuB,KAAMuoC,mBAAmBvoC,KAAO,GAAIwoC,MAAMhjE,OAEnF,OAJIyN,SAAQiyB,SAAWjyB,OAAO,GAAIu1D,KAAOv1D,OAAO,IAIzCuU,MAAMJ,OAAOytC,cAAcztC,OAAQohD,KAAO,EAAI,CACnDx5D,MAAO,SAASgxB,MACd,KAAOyoC,QAAQzoC,KAAOkF,SAASl2B,MAAMgxB,QAAQA,KAAOuoC,kBAAkBvoC,KAAO,GAC7E,OAAOA,MAEThX,KAAM,SAASgX,MACb,KAAOyoC,QAAQzoC,KAAOkF,SAASlc,KAAKgX,QAAQA,KAAOuoC,mBAAmBvoC,KAAO,GAC7E,OAAOA,OAEPkF,YAEN1d,MAAMkxC,MAAQ,SAASxzB,SAAUsjC,MAC/B,IAAIn6D,OAASmmD,eAAehtC,MAAMJ,UAAWnU,OAAqB,MAAZiyB,SAAmBkjC,WAAW/5D,OAAQ,IAA0B,iBAAb62B,SAAwBkjC,WAAW/5D,OAAQ62B,WAAaA,SAASrzB,OAAS,CAAE,CACnLA,MAAOqzB,UACNsjC,MAEH,OADIv1D,SAAQiyB,SAAWjyB,OAAO,GAAIu1D,KAAOv1D,OAAO,IACzCiyB,SAASrzB,MAAMxD,OAAO,GAAIk6D,mBAAmBl6D,OAAO,GAAK,GAAIm6D,KAAO,EAAI,EAAIA,OAErFhhD,MAAMoxC,WAAa,WACjB,OAAO5sC,QAETxE,MAAMkC,KAAO,WACX,OAAOy+C,cAAcphB,OAAOr9B,OAAQsuB,QAAShsB,SAExC+sC,sBAAsBvxC,MAAOu/B,QAEtC,SAASwhB,kBAAkBp4D,GACzB,OAAO,IAAIlE,KAAKkE,GAnGlBoxB,eAAemnC,IAAMz8D,KAAK9D,UAAU+/D,cAAgB,IAAIj8D,KAAK,4BAA8Bg8D,wBAA0BD,kBAIrHC,wBAAwB9vC,MAAQ,SAASsJ,QACvC,IAAIzB,KAAO,IAAI/zB,KAAKw1B,QACpB,OAAOh0B,MAAMuyB,MAAQ,KAAOA,MAE9BioC,wBAAwBx9D,SAAWu9D,kBAAkBv9D,SACrD4yB,QAAQsrC,OAAS7oC,kBAAiB,SAASE,MACzC,OAAO,IAAI1C,QAAiC,IAAzBvuB,KAAKC,MAAMgxB,KAAO,SACpC,SAASA,KAAME,QAChBF,KAAKH,QAAQG,KAAKvB,UAAiC,IAArB1vB,KAAKC,MAAMkxB,YACxC,SAASF,MACV,OAAOA,KAAKzB,gBAEdlB,QAAQurC,QAAUvrC,QAAQsrC,OAAO92D,MACjCwrB,QAAQurC,QAAQvoC,IAAMhD,QAAQsrC,OAAOtoC,IAAIxuB,MACzCwrB,QAAQwrC,OAAS/oC,kBAAiB,SAASE,MACzC,OAAO,IAAI1C,QAAiC,IAAzBvuB,KAAKC,MAAMgxB,KAAO,SACpC,SAASA,KAAME,QAChBF,KAAKH,QAAQG,KAAKvB,UAAiC,IAArB1vB,KAAKC,MAAMkxB,YACxC,SAASF,MACV,OAAOA,KAAK7B,gBAEdd,QAAQyrC,QAAUzrC,QAAQwrC,OAAOh3D,MACjCwrB,QAAQyrC,QAAQzoC,IAAMhD,QAAQwrC,OAAOxoC,IAAIxuB,MACzCwrB,QAAQ0rC,KAAOjpC,kBAAiB,SAASE,MACvC,IAAIgpC,SAAWhpC,KAAKtB,oBAAsB,GAC1C,OAAO,IAAIpB,QAA0D,MAAjDvuB,KAAKC,MAAMgxB,KAAO,KAAOgpC,UAAYA,cACxD,SAAShpC,KAAME,QAChBF,KAAKH,QAAQG,KAAKvB,UAAiC,KAArB1vB,KAAKC,MAAMkxB,YACxC,SAASF,MACV,OAAOA,KAAKjC,cAEdV,QAAQ4rC,MAAQ5rC,QAAQ0rC,KAAKl3D,MAC7BwrB,QAAQ4rC,MAAM5oC,IAAMhD,QAAQ0rC,KAAK1oC,IAAIxuB,MACrCwrB,QAAQ6rC,MAAQppC,kBAAiB,SAASE,MAGxC,OAFAA,KAAO3C,QAAQ2H,IAAIhF,OACdpB,QAAQ,GACNoB,QACN,SAASA,KAAME,QAChBF,KAAKP,SAASO,KAAK3B,WAAa6B,WAC/B,SAASF,MACV,OAAOA,KAAK3B,cAEdhB,QAAQ+D,OAAS/D,QAAQ6rC,MAAMr3D,MAC/BwrB,QAAQ+D,OAAOf,IAAMhD,QAAQ6rC,MAAM7oC,IAAIxuB,MAsDvC,IAAIw2D,mBAAqB,CAAE,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,SACnIc,0BAA4B,CAAE,CAAE9rC,QAAQsrC,OAAQ,GAAK,CAAEtrC,QAAQsrC,OAAQ,GAAK,CAAEtrC,QAAQsrC,OAAQ,IAAM,CAAEtrC,QAAQsrC,OAAQ,IAAM,CAAEtrC,QAAQwrC,OAAQ,GAAK,CAAExrC,QAAQwrC,OAAQ,GAAK,CAAExrC,QAAQwrC,OAAQ,IAAM,CAAExrC,QAAQwrC,OAAQ,IAAM,CAAExrC,QAAQ0rC,KAAM,GAAK,CAAE1rC,QAAQ0rC,KAAM,GAAK,CAAE1rC,QAAQ0rC,KAAM,GAAK,CAAE1rC,QAAQ0rC,KAAM,IAAM,CAAE1rC,QAAQ2H,IAAK,GAAK,CAAE3H,QAAQ2H,IAAK,GAAK,CAAE3H,QAAQ8H,KAAM,GAAK,CAAE9H,QAAQ6rC,MAAO,GAAK,CAAE7rC,QAAQ6rC,MAAO,GAAK,CAAE7rC,QAAQ0H,KAAM,IACxaqkC,yBAA2B7nC,eAAea,MAAM,CAAE,CAAE,MAAO,SAAS9yB,GACtE,OAAOA,EAAE2uB,oBACN,CAAE,MAAO,SAAS3uB,GACrB,OAAOA,EAAEivB,eACN,CAAE,QAAS,SAASjvB,GACvB,OAAOA,EAAE6uB,eACN,CAAE,QAAS,SAAS7uB,GACvB,OAAOA,EAAEyuB,aACN,CAAE,QAAS,SAASzuB,GACvB,OAAOA,EAAEquB,UAA2B,GAAfruB,EAAEmuB,YACpB,CAAE,QAAS,SAASnuB,GACvB,OAAsB,GAAfA,EAAEmuB,YACN,CAAE,KAAM,SAASnuB,GACpB,OAAOA,EAAE+uB,aACN,CAAE,KAAMqN,WACT48B,0BAA4B,CAC9Bz2D,MAAO,SAASC,MAAOC,KAAM7I,MAC3B,OAAO+B,GAAG4G,MAAM9C,KAAKia,KAAKlX,MAAQ5I,MAAQA,MAAO6I,KAAM7I,MAAM6H,IAAIw3D,oBAEnEv5D,MAAO8D,YACPkW,KAAMlW,aAERq2D,0BAA0BpkC,KAAO1H,QAAQ0H,KACzC1H,QAAQ7V,MAAQ,WACd,OAAO2gD,cAAcl9D,GAAGuc,MAAMu/B,SAAUoiB,0BAA2BC,2BAErE,IAAIC,wBAA0BF,0BAA0Bp4D,KAAI,SAASxB,GACnE,MAAO,CAAEA,EAAE,GAAG8wB,IAAK9wB,EAAE,OAEnB+5D,uBAAyBvB,kBAAkB3lC,MAAM,CAAE,CAAE,MAAO,SAAS9yB,GACvE,OAAOA,EAAE4uB,uBACN,CAAE,MAAO,SAAS5uB,GACrB,OAAOA,EAAEkvB,kBACN,CAAE,QAAS,SAASlvB,GACvB,OAAOA,EAAE8uB,kBACN,CAAE,QAAS,SAAS9uB,GACvB,OAAOA,EAAE0uB,gBACN,CAAE,QAAS,SAAS1uB,GACvB,OAAOA,EAAEsuB,aAAiC,GAAlBtuB,EAAEouB,eACvB,CAAE,QAAS,SAASpuB,GACvB,OAAyB,GAAlBA,EAAEouB,eACN,CAAE,KAAM,SAASpuB,GACpB,OAAOA,EAAEgvB,gBACN,CAAE,KAAMoN,WAWb,SAAS69B,QAAQnzC,SACf,OAAOqC,KAAKN,MAAM/B,QAAQO,cAK5B,SAAS6yC,QAAQpzC,SACf,IAAIvkB,MAAQvG,YAAYm+D,cAExB,OADA53D,MAAM63D,WAAWp+D,YAAYq+D,MACtB93D,MAAM+3D,yBAAyBxzC,QAAQO,cAnBhD0yC,wBAAwBtkC,KAAO1H,QAAQ0H,KAAK1E,IAC5ChD,QAAQ7V,MAAM6Y,IAAM,WAClB,OAAO8nC,cAAcl9D,GAAGuc,MAAMu/B,SAAUsiB,wBAAyBC,yBAEnEr+D,GAAGkR,KAAO0Z,YAAW,SAASO,SAC5B,OAAOA,QAAQO,gBAEjB1rB,GAAG4+D,KAAO,SAAS9zC,IAAKva,UACtB,OAAOya,OAAOF,IAAK,mBAAoBwzC,QAAS/tD,WAKlDvQ,GAAGoR,KAAO,SAAS0Z,IAAKva,UACtB,OAAOya,OAAOF,IAAK,YAAayzC,QAAShuD,WAO3CvQ,GAAGqN,IAAMud,YAAW,SAASO,SAC3B,OAAOA,QAAQ0zC,eAE+BjjE,KAAKoE,GAAKA,QAAa,sDAAT,mCAAS,gKAh1SzE,I,gFCAA,iBAOmEF,OAAOC,QAGlE,WAAe,aAEnB,IAAI++D,aA6HAC,KA3HJ,SAASC,QACL,OAAOF,aAAa/iE,MAAM,KAAMD,WAKpC,SAASmjE,gBAAgB1uD,UACrBuuD,aAAevuD,SAGnB,SAAShT,QAAQ00C,OACb,OACIA,iBAAiBv3C,OACyB,mBAA1CmC,OAAOK,UAAUsC,SAASC,KAAKwyC,OAIvC,SAASitB,SAASjtB,OAGd,OACa,MAATA,OAC0C,oBAA1Cp1C,OAAOK,UAAUsC,SAASC,KAAKwyC,OAIvC,SAASktB,WAAWj9D,EAAGC,GACnB,OAAOtF,OAAOK,UAAU+N,eAAexL,KAAKyC,EAAGC,GAGnD,SAASi9D,cAAcC,KACnB,GAAIxiE,OAAOyiE,oBACP,OAAkD,IAA3CziE,OAAOyiE,oBAAoBD,KAAK9kE,OAEvC,IAAI8L,EACJ,IAAKA,KAAKg5D,IACN,GAAIF,WAAWE,IAAKh5D,GAChB,OAAO,EAGf,OAAO,EAIf,SAASk5D,YAAYttB,OACjB,YAAiB,IAAVA,MAGX,SAASutB,SAASvtB,OACd,MACqB,iBAAVA,OACmC,oBAA1Cp1C,OAAOK,UAAUsC,SAASC,KAAKwyC,OAIvC,SAASwtB,OAAOxtB,OACZ,OACIA,iBAAiBjxC,MACyB,kBAA1CnE,OAAOK,UAAUsC,SAASC,KAAKwyC,OAIvC,SAASnsC,IAAIzL,IAAKqB,IACd,IACIlB,EADAklE,IAAM,GAENC,OAAStlE,IAAIE,OACjB,IAAKC,EAAI,EAAGA,EAAImlE,SAAUnlE,EACtBklE,IAAI9gE,KAAKlD,GAAGrB,IAAIG,GAAIA,IAExB,OAAOklE,IAGX,SAASE,OAAO19D,EAAGC,GACf,IAAK,IAAI3H,KAAK2H,EACNg9D,WAAWh9D,EAAG3H,KACd0H,EAAE1H,GAAK2H,EAAE3H,IAYjB,OARI2kE,WAAWh9D,EAAG,cACdD,EAAE1C,SAAW2C,EAAE3C,UAGf2/D,WAAWh9D,EAAG,aACdD,EAAEwxB,QAAUvxB,EAAEuxB,SAGXxxB,EAGX,SAAS29D,UAAU5tB,MAAOlxB,OAAQ8O,OAAQiwC,QACtC,OAAOC,iBAAiB9tB,MAAOlxB,OAAQ8O,OAAQiwC,QAAQ,GAAM1qC,MAGjE,SAAS4qC,sBAEL,MAAO,CACHv3D,OAAO,EACPw3D,aAAc,GACdC,YAAa,GACbC,UAAW,EACXC,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBhD,KAAK,EACLiD,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,GAIzB,SAASC,gBAAgBz8D,GAIrB,OAHa,MAATA,EAAE08D,MACF18D,EAAE08D,IAAMhB,uBAEL17D,EAAE08D,IAsBb,SAASC,QAAQ38D,GACb,GAAkB,MAAdA,EAAE48D,SAAkB,CACpB,IAAIC,MAAQJ,gBAAgBz8D,GACxB88D,YAAcrC,KAAKt/D,KAAK0hE,MAAMT,iBAAiB,SAAUlmE,GACrD,OAAY,MAALA,KAEX6mE,YACK7+D,MAAM8B,EAAE7F,GAAG+0B,YACZ2tC,MAAMhB,SAAW,IAChBgB,MAAM14D,QACN04D,MAAMb,aACNa,MAAMZ,eACNY,MAAMG,iBACNH,MAAML,kBACNK,MAAMd,YACNc,MAAMX,gBACNW,MAAMV,mBACLU,MAAMP,UAAaO,MAAMP,UAAYQ,aAU/C,GARI98D,EAAEi9D,UACFF,WACIA,YACwB,IAAxBF,MAAMf,eACwB,IAA9Be,MAAMlB,aAAa1lE,aACD0B,IAAlBklE,MAAMK,SAGS,MAAnB3kE,OAAO4kE,UAAqB5kE,OAAO4kE,SAASn9D,GAG5C,OAAO+8D,WAFP/8D,EAAE48D,SAAWG,WAKrB,OAAO/8D,EAAE48D,SAGb,SAASQ,cAAcP,OACnB,IAAI78D,EAAIu7D,UAAUz9D,KAOlB,OANa,MAAT++D,MACAvB,OAAOmB,gBAAgBz8D,GAAI68D,OAE3BJ,gBAAgBz8D,GAAGm8D,iBAAkB,EAGlCn8D,EA7DPy6D,KADArkE,MAAMwC,UAAU6hE,KACTrkE,MAAMwC,UAAU6hE,KAEhB,SAAU4C,KACb,IAEInnE,EAFA0K,EAAIrI,OAAOjB,MACXtB,IAAM4K,EAAE3K,SAAW,EAGvB,IAAKC,EAAI,EAAGA,EAAIF,IAAKE,IACjB,GAAIA,KAAK0K,GAAKy8D,IAAIliE,KAAK7D,KAAMsJ,EAAE1K,GAAIA,EAAG0K,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAI08D,iBAAoB5C,MAAM4C,iBAAmB,GAC7CC,kBAAmB,EAEvB,SAASC,WAAWl+B,GAAIxkC,MACpB,IAAI5E,EACAunE,KACAC,IACAC,oBAAsBL,iBAAiBrnE,OAiC3C,GA/BKglE,YAAYngE,KAAK8iE,oBAClBt+B,GAAGs+B,iBAAmB9iE,KAAK8iE,kBAE1B3C,YAAYngE,KAAKT,MAClBilC,GAAGjlC,GAAKS,KAAKT,IAEZ4gE,YAAYngE,KAAK+iE,MAClBv+B,GAAGu+B,GAAK/iE,KAAK+iE,IAEZ5C,YAAYngE,KAAKgjE,MAClBx+B,GAAGw+B,GAAKhjE,KAAKgjE,IAEZ7C,YAAYngE,KAAKmiE,WAClB39B,GAAG29B,QAAUniE,KAAKmiE,SAEjBhC,YAAYngE,KAAKijE,QAClBz+B,GAAGy+B,KAAOjjE,KAAKijE,MAEd9C,YAAYngE,KAAKkjE,UAClB1+B,GAAG0+B,OAASljE,KAAKkjE,QAEhB/C,YAAYngE,KAAKmjE,WAClB3+B,GAAG2+B,QAAUnjE,KAAKmjE,SAEjBhD,YAAYngE,KAAK4hE,OAClBp9B,GAAGo9B,IAAMD,gBAAgB3hE,OAExBmgE,YAAYngE,KAAKojE,WAClB5+B,GAAG4+B,QAAUpjE,KAAKojE,SAGlBP,oBAAsB,EACtB,IAAKznE,EAAI,EAAGA,EAAIynE,oBAAqBznE,IAG5B+kE,YADLyC,IAAM5iE,KADN2iE,KAAOH,iBAAiBpnE,OAGpBopC,GAAGm+B,MAAQC,KAKvB,OAAOp+B,GAIX,SAAS6+B,OAAOC,QACZZ,WAAWlmE,KAAM8mE,QACjB9mE,KAAK6C,GAAK,IAAIuC,KAAkB,MAAb0hE,OAAOjkE,GAAaikE,OAAOjkE,GAAG+0B,UAAYpxB,KACxDxG,KAAKqlE,YACNrlE,KAAK6C,GAAK,IAAIuC,KAAKoB,OAIE,IAArBy/D,mBACAA,kBAAmB,EACnB7C,MAAM2D,aAAa/mE,MACnBimE,kBAAmB,GAI3B,SAASe,SAASvD,KACd,OACIA,eAAeoD,QAAkB,MAAPpD,KAAuC,MAAxBA,IAAI6C,iBAIrD,SAASW,KAAKC,MAEgC,IAAtC9D,MAAM+D,6BACa,oBAAZC,SACPA,QAAQH,MAERG,QAAQH,KAAK,wBAA0BC,KAI/C,SAASG,UAAUH,IAAKpnE,IACpB,IAAIwnE,WAAY,EAEhB,OAAOtD,QAAO,WAIV,GAHgC,MAA5BZ,MAAMmE,oBACNnE,MAAMmE,mBAAmB,KAAML,KAE/BI,UAAW,CACX,IACIhoE,IACAV,EACAS,IAHAY,KAAO,GAIPunE,OAAStnE,UAAUvB,OACvB,IAAKC,EAAI,EAAGA,EAAI4oE,OAAQ5oE,IAAK,CAEzB,GADAU,IAAM,GACsB,iBAAjBY,UAAUtB,GAAiB,CAElC,IAAKS,OADLC,KAAO,MAAQV,EAAI,KACPsB,UAAU,GACdqjE,WAAWrjE,UAAU,GAAIb,OACzBC,KAAOD,IAAM,KAAOa,UAAU,GAAGb,KAAO,MAGhDC,IAAMA,IAAIwE,MAAM,GAAI,QAEpBxE,IAAMY,UAAUtB,GAEpBqB,KAAK+C,KAAK1D,KAEd2nE,KACIC,IACI,gBACApoE,MAAMwC,UAAUwC,MAAMD,KAAK5D,MAAMwxB,KAAK,IACtC,MACA,IAAIrmB,OAAQ+9C,OAEpBme,WAAY,EAEhB,OAAOxnE,GAAGK,MAAMH,KAAME,aACvBJ,IAGP,IAgFImK,KAhFAw9D,aAAe,GAEnB,SAASC,gBAAgB1jE,KAAMkjE,KACK,MAA5B9D,MAAMmE,oBACNnE,MAAMmE,mBAAmBvjE,KAAMkjE,KAE9BO,aAAazjE,QACdijE,KAAKC,KACLO,aAAazjE,OAAQ,GAO7B,SAAS2jE,WAAWtxB,OAChB,MACyB,oBAAb1kB,UAA4B0kB,iBAAiB1kB,UACX,sBAA1C1wB,OAAOK,UAAUsC,SAASC,KAAKwyC,OAIvC,SAAS9qC,IAAIu7D,QACT,IAAIX,KAAMvnE,EACV,IAAKA,KAAKkoE,OACFvD,WAAWuD,OAAQloE,KAEf+oE,WADJxB,KAAOW,OAAOloE,IAEVoB,KAAKpB,GAAKunE,KAEVnmE,KAAK,IAAMpB,GAAKunE,MAI5BnmE,KAAK4nE,QAAUd,OAIf9mE,KAAK6nE,+BAAiC,IAAIp1D,QACrCzS,KAAK8nE,wBAAwB37D,QAAUnM,KAAK+nE,cAAc57D,QACvD,IACA,UAAUA,QAItB,SAAS67D,aAAaC,aAAcC,aAChC,IACI/B,KADArC,IAAME,OAAO,GAAIiE,cAErB,IAAK9B,QAAQ+B,YACL3E,WAAW2E,YAAa/B,QACpB7C,SAAS2E,aAAa9B,QAAU7C,SAAS4E,YAAY/B,QACrDrC,IAAIqC,MAAQ,GACZnC,OAAOF,IAAIqC,MAAO8B,aAAa9B,OAC/BnC,OAAOF,IAAIqC,MAAO+B,YAAY/B,QACF,MAArB+B,YAAY/B,MACnBrC,IAAIqC,MAAQ+B,YAAY/B,aAEjBrC,IAAIqC,OAIvB,IAAKA,QAAQ8B,aAEL1E,WAAW0E,aAAc9B,QACxB5C,WAAW2E,YAAa/B,OACzB7C,SAAS2E,aAAa9B,SAGtBrC,IAAIqC,MAAQnC,OAAO,GAAIF,IAAIqC,QAGnC,OAAOrC,IAGX,SAASqE,OAAOrB,QACE,MAAVA,QACA9mE,KAAKuL,IAAIu7D,QAhEjB1D,MAAM+D,6BAA8B,EACpC/D,MAAMmE,mBAAqB,KAsEvBt9D,KADAhJ,OAAOgJ,KACAhJ,OAAOgJ,KAEP,SAAUw5D,KACb,IAAI7kE,EACAklE,IAAM,GACV,IAAKllE,KAAK6kE,IACFF,WAAWE,IAAK7kE,IAChBklE,IAAI9gE,KAAKpE,GAGjB,OAAOklE,KAIf,IAAIsE,gBAAkB,CAClBC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAGd,SAASC,SAAStpE,IAAKupE,IAAKvjE,KACxB,IAAIqmC,OAAS1rC,KAAK6oE,UAAUxpE,MAAQW,KAAK6oE,UAAoB,SAC7D,OAAOlB,WAAWj8B,QAAUA,OAAO7nC,KAAK+kE,IAAKvjE,KAAOqmC,OAGxD,SAASo9B,SAAS5vC,OAAQ6vC,aAAcC,WACpC,IAAIC,UAAY,GAAK/gE,KAAKqC,IAAI2uB,QAC1BgwC,YAAcH,aAAeE,UAAUtqE,OAE3C,OADWu6B,QAAU,EAER8vC,UAAY,IAAM,GAAM,KACjC9gE,KAAKkY,IAAI,GAAIlY,KAAKX,IAAI,EAAG2hE,cAActlE,WAAWulE,OAAO,GACzDF,UAIR,IAAIG,iBACI,yMACJC,sBAAwB,6CACxBC,gBAAkB,GAClBC,qBAAuB,GAM3B,SAASC,eAAep3C,MAAOq3C,OAAQ9V,QAASh/C,UAC5C,IAAI+0D,KAAO/0D,SACa,iBAAbA,WACP+0D,KAAO,WACH,OAAO1pE,KAAK2U,cAGhByd,QACAm3C,qBAAqBn3C,OAASs3C,MAE9BD,SACAF,qBAAqBE,OAAO,IAAM,WAC9B,OAAOX,SAASY,KAAKvpE,MAAMH,KAAME,WAAYupE,OAAO,GAAIA,OAAO,MAGnE9V,UACA4V,qBAAqB5V,SAAW,WAC5B,OAAO3zD,KAAK2pE,aAAahW,QACrB+V,KAAKvpE,MAAMH,KAAME,WACjBkyB,SAMhB,SAASw3C,uBAAuBvzB,OAC5B,OAAIA,MAAMz+B,MAAM,YACLy+B,MAAM9mC,QAAQ,WAAY,IAE9B8mC,MAAM9mC,QAAQ,MAAO,IAGhC,SAASs6D,mBAAmB1kD,QACxB,IACIvmB,EACAD,OAFAwG,MAAQggB,OAAOvN,MAAMwxD,kBAIzB,IAAKxqE,EAAI,EAAGD,OAASwG,MAAMxG,OAAQC,EAAID,OAAQC,IACvC2qE,qBAAqBpkE,MAAMvG,IAC3BuG,MAAMvG,GAAK2qE,qBAAqBpkE,MAAMvG,IAEtCuG,MAAMvG,GAAKgrE,uBAAuBzkE,MAAMvG,IAIhD,OAAO,SAAUgqE,KACb,IACIhqE,EADA8sC,OAAS,GAEb,IAAK9sC,EAAI,EAAGA,EAAID,OAAQC,IACpB8sC,QAAUi8B,WAAWxiE,MAAMvG,IACrBuG,MAAMvG,GAAGiF,KAAK+kE,IAAKzjD,QACnBhgB,MAAMvG,GAEhB,OAAO8sC,QAKf,SAASo+B,aAAaphE,EAAGyc,QACrB,OAAKzc,EAAE28D,WAIPlgD,OAAS4kD,aAAa5kD,OAAQzc,EAAEihE,cAChCL,gBAAgBnkD,QACZmkD,gBAAgBnkD,SAAW0kD,mBAAmB1kD,QAE3CmkD,gBAAgBnkD,QAAQzc,IAPpBA,EAAEihE,aAAaK,cAU9B,SAASD,aAAa5kD,OAAQ8O,QAC1B,IAAIr1B,EAAI,EAER,SAASqrE,4BAA4B5zB,OACjC,OAAOpiB,OAAOi2C,eAAe7zB,QAAUA,MAI3C,IADAgzB,sBAAsBl2D,UAAY,EAC3BvU,GAAK,GAAKyqE,sBAAsBplE,KAAKkhB,SACxCA,OAASA,OAAO5V,QACZ85D,sBACAY,6BAEJZ,sBAAsBl2D,UAAY,EAClCvU,GAAK,EAGT,OAAOumB,OAGX,IAAIglD,sBAAwB,CACxBC,IAAK,YACLC,GAAI,SACJrvC,EAAG,aACHsvC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAGV,SAASN,eAAe7qE,KACpB,IAAI8lB,OAASnlB,KAAKyqE,gBAAgBprE,KAC9BqrE,YAAc1qE,KAAKyqE,gBAAgBprE,IAAIkN,eAE3C,OAAI4Y,SAAWulD,YACJvlD,QAGXnlB,KAAKyqE,gBAAgBprE,KAAOqrE,YACvB9yD,MAAMwxD,kBACNl/D,KAAI,SAAUygE,KACX,MACY,SAARA,KACQ,OAARA,KACQ,OAARA,KACQ,SAARA,IAEOA,IAAI7mE,MAAM,GAEd6mE,OAEVl5C,KAAK,IAEHzxB,KAAKyqE,gBAAgBprE,MAGhC,IAAIurE,mBAAqB,eAEzB,SAASZ,cACL,OAAOhqE,KAAK6qE,aAGhB,IAAIC,eAAiB,KACjBC,8BAAgC,UAEpC,SAASpX,QAAQz6B,QACb,OAAOl5B,KAAKgrE,SAASz7D,QAAQ,KAAM2pB,QAGvC,IAAI+xC,oBAAsB,CACtBC,OAAQ,QACRC,KAAM,SACNtpE,EAAG,gBACHupE,GAAI,aACJ1iE,EAAG,WACH2iE,GAAI,aACJpjE,EAAG,UACHqjE,GAAI,WACJ7iE,EAAG,QACH8iE,GAAI,UACJ/yD,EAAG,SACHgzD,GAAI,WACJzwC,EAAG,UACH0wC,GAAI,YACJxxD,EAAG,SACHyxD,GAAI,YAGR,SAASC,aAAazyC,OAAQ0yC,cAAehxC,OAAQixC,UACjD,IAAIngC,OAAS1rC,KAAK8rE,cAAclxC,QAChC,OAAO+sC,WAAWj8B,QACZA,OAAOxS,OAAQ0yC,cAAehxC,OAAQixC,UACtCngC,OAAOn8B,QAAQ,MAAO2pB,QAGhC,SAAS6yC,WAAWC,KAAMtgC,QACtB,IAAIvmB,OAASnlB,KAAK8rE,cAAcE,KAAO,EAAI,SAAW,QACtD,OAAOrE,WAAWxiD,QAAUA,OAAOumB,QAAUvmB,OAAO5V,QAAQ,MAAOm8B,QAGvE,IAAIugC,QAAU,GAEd,SAASC,aAAap2C,KAAMq2C,WACxB,IAAIC,UAAYt2C,KAAKzQ,cACrB4mD,QAAQG,WAAaH,QAAQG,UAAY,KAAOH,QAAQE,WAAar2C,KAGzE,SAASu2C,eAAeC,OACpB,MAAwB,iBAAVA,MACRL,QAAQK,QAAUL,QAAQK,MAAMjnD,oBAChChlB,EAGV,SAASksE,qBAAqBC,aAC1B,IACIC,eACAtG,KAFAuG,gBAAkB,GAItB,IAAKvG,QAAQqG,YACLjJ,WAAWiJ,YAAarG,QACxBsG,eAAiBJ,eAAelG,SAE5BuG,gBAAgBD,gBAAkBD,YAAYrG,OAK1D,OAAOuG,gBAGX,IAAIC,WAAa,GAEjB,SAASC,gBAAgB92C,KAAM1vB,UAC3BumE,WAAW72C,MAAQ1vB,SAGvB,SAASymE,oBAAoBC,UACzB,IACIzuD,EADAiuD,MAAQ,GAEZ,IAAKjuD,KAAKyuD,SACFvJ,WAAWuJ,SAAUzuD,IACrBiuD,MAAMtpE,KAAK,CAAE8yB,KAAMzX,EAAGjY,SAAUumE,WAAWtuD,KAMnD,OAHAiuD,MAAM/jE,MAAK,SAAUjC,EAAGC,GACpB,OAAOD,EAAEF,SAAWG,EAAEH,YAEnBkmE,MAGX,SAASS,WAAW7uC,MAChB,OAAQA,KAAO,GAAM,GAAKA,KAAO,KAAQ,GAAMA,KAAO,KAAQ,EAGlE,SAAS8uC,SAAS9zC,QACd,OAAIA,OAAS,EAEFhxB,KAAKia,KAAK+W,SAAW,EAErBhxB,KAAKC,MAAM+wB,QAI1B,SAAS+zC,MAAMC,qBACX,IAAIC,eAAiBD,oBACjB1tE,MAAQ,EAMZ,OAJsB,IAAlB2tE,eAAuB55C,SAAS45C,iBAChC3tE,MAAQwtE,SAASG,gBAGd3tE,MAGX,SAAS4tE,WAAWt3C,KAAMu3C,UACtB,OAAO,SAAU7tE,OACb,OAAa,MAATA,OACA8tE,MAAMttE,KAAM81B,KAAMt2B,OAClB4jE,MAAM2D,aAAa/mE,KAAMqtE,UAClBrtE,MAEA2M,IAAI3M,KAAM81B,OAK7B,SAASnpB,IAAIi8D,IAAK9yC,MACd,OAAO8yC,IAAIvD,UACLuD,IAAI/lE,GAAG,OAAS+lE,IAAIlC,OAAS,MAAQ,IAAM5wC,QAC3CtvB,IAGV,SAAS8mE,MAAM1E,IAAK9yC,KAAMt2B,OAClBopE,IAAIvD,YAAcz+D,MAAMpH,SAEX,aAATs2B,MACAi3C,WAAWnE,IAAI1qC,SACC,IAAhB0qC,IAAIvG,SACW,KAAfuG,IAAIzvC,QAEJ35B,MAAQytE,MAAMztE,OACdopE,IAAI/lE,GAAG,OAAS+lE,IAAIlC,OAAS,MAAQ,IAAM5wC,MACvCt2B,MACAopE,IAAIvG,QACJkL,YAAY/tE,MAAOopE,IAAIvG,WAG3BuG,IAAI/lE,GAAG,OAAS+lE,IAAIlC,OAAS,MAAQ,IAAM5wC,MAAMt2B,QAO7D,SAASguE,UAAUlB,OAEf,OAAI3E,WAAW3nE,KADfssE,MAAQD,eAAeC,SAEZtsE,KAAKssE,SAETtsE,KAGX,SAASytE,UAAUnB,MAAO9sE,OACtB,GAAqB,iBAAV8sE,MAAoB,CAE3B,IACI1tE,EADA8uE,YAAcb,oBADlBP,MAAQC,qBAAqBD,QAGzBqB,eAAiBD,YAAY/uE,OACjC,IAAKC,EAAI,EAAGA,EAAI+uE,eAAgB/uE,IAC5BoB,KAAK0tE,YAAY9uE,GAAGk3B,MAAMw2C,MAAMoB,YAAY9uE,GAAGk3B,YAInD,GAAI6xC,WAAW3nE,KADfssE,MAAQD,eAAeC,SAEnB,OAAOtsE,KAAKssE,OAAO9sE,OAG3B,OAAOQ,KAGX,IAoBI4tE,QApBAC,OAAS,KACTC,OAAS,OACTC,OAAS,QACTC,OAAS,QACTC,OAAS,aACTC,UAAY,QACZC,UAAY,YACZC,UAAY,gBACZC,UAAY,UACZC,UAAY,UACZC,UAAY,eACZC,cAAgB,MAChBC,YAAc,WACdC,YAAc,qBACdC,iBAAmB,0BACnBC,eAAiB,uBAGjBC,UACI,wJAKR,SAASC,cAAc18C,MAAO28C,MAAOC,aACjCpB,QAAQx7C,OAASu1C,WAAWoH,OACtBA,MACA,SAAUE,SAAUtF,YAChB,OAAOsF,UAAYD,YAAcA,YAAcD,OAI7D,SAASG,sBAAsB98C,MAAO00C,QAClC,OAAKvD,WAAWqK,QAASx7C,OAIlBw7C,QAAQx7C,OAAO00C,OAAOnB,QAASmB,OAAOF,SAHlC,IAAIn0D,OAAO08D,eAAe/8C,QAOzC,SAAS+8C,eAAettE,GACpB,OAAOutE,YACHvtE,EACK0N,QAAQ,KAAM,IACdA,QACG,uCACA,SAAU8/D,QAASzlE,GAAIyvD,GAAIsB,GAAI2U,IAC3B,OAAO1lE,IAAMyvD,IAAMsB,IAAM2U,OAM7C,SAASF,YAAYvtE,GACjB,OAAOA,EAAE0N,QAAQ,yBAA0B,QAjC/Cq+D,QAAU,GAoCV,IAAI2B,OAAS,GAEb,SAASC,cAAcp9C,MAAOzd,UAC1B,IAAI/V,EAEA6wE,SADA/F,KAAO/0D,SAWX,IATqB,iBAAVyd,QACPA,MAAQ,CAACA,QAETwxC,SAASjvD,YACT+0D,KAAO,SAAUrzB,MAAOlxC,OACpBA,MAAMwP,UAAYs4D,MAAM52B,SAGhCo5B,SAAWr9C,MAAMzzB,OACZC,EAAI,EAAGA,EAAI6wE,SAAU7wE,IACtB2wE,OAAOn9C,MAAMxzB,IAAM8qE,KAI3B,SAASgG,kBAAkBt9C,MAAOzd,UAC9B66D,cAAcp9C,OAAO,SAAUikB,MAAOlxC,MAAO2hE,OAAQ10C,OACjD00C,OAAO6I,GAAK7I,OAAO6I,IAAM,GACzBh7D,SAAS0hC,MAAOywB,OAAO6I,GAAI7I,OAAQ10C,UAI3C,SAASw9C,wBAAwBx9C,MAAOikB,MAAOywB,QAC9B,MAATzwB,OAAiBktB,WAAWgM,OAAQn9C,QACpCm9C,OAAOn9C,OAAOikB,MAAOywB,OAAO+I,GAAI/I,OAAQ10C,OAIhD,IAcI5jB,QAdAshE,KAAO,EACPC,MAAQ,EACRC,KAAO,EACPC,KAAO,EACPC,OAAS,EACTC,OAAS,EACTC,YAAc,EACdC,KAAO,EACPC,QAAU,EAEd,SAASC,IAAIzuE,EAAG4E,GACZ,OAAS5E,EAAI4E,EAAKA,GAAKA,EAoB3B,SAAS6mE,YAAYrvC,KAAMmkC,OACvB,GAAIz7D,MAAMs3B,OAASt3B,MAAMy7D,OACrB,OAAO77D,IAEX,IAAIgqE,SAAWD,IAAIlO,MAAO,IAE1B,OADAnkC,OAASmkC,MAAQmO,UAAY,GACT,IAAbA,SACDzD,WAAW7uC,MACP,GACA,GACJ,GAAOsyC,SAAW,EAAK,EAxB7BhiE,QADA1P,MAAMwC,UAAUkN,QACN1P,MAAMwC,UAAUkN,QAEhB,SAAUhN,GAEhB,IAAI5C,EACJ,IAAKA,EAAI,EAAGA,EAAIoB,KAAKrB,SAAUC,EAC3B,GAAIoB,KAAKpB,KAAO4C,EACZ,OAAO5C,EAGf,OAAQ,GAmBhB4qE,eAAe,IAAK,CAAC,KAAM,GAAI,MAAM,WACjC,OAAOxpE,KAAKqiE,QAAU,KAG1BmH,eAAe,MAAO,EAAG,GAAG,SAAUrkD,QAClC,OAAOnlB,KAAK2pE,aAAa8G,YAAYzwE,KAAMmlB,WAG/CqkD,eAAe,OAAQ,EAAG,GAAG,SAAUrkD,QACnC,OAAOnlB,KAAK2pE,aAAapvC,OAAOv6B,KAAMmlB,WAK1C+mD,aAAa,QAAS,KAItBU,gBAAgB,QAAS,GAIzBkC,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,OAAO,SAAUG,SAAUh7C,QACrC,OAAOA,OAAOy8C,iBAAiBzB,aAEnCH,cAAc,QAAQ,SAAUG,SAAUh7C,QACtC,OAAOA,OAAO08C,YAAY1B,aAG9BO,cAAc,CAAC,IAAK,OAAO,SAAUn5B,MAAOlxC,OACxCA,MAAM4qE,OAAS9C,MAAM52B,OAAS,KAGlCm5B,cAAc,CAAC,MAAO,SAAS,SAAUn5B,MAAOlxC,MAAO2hE,OAAQ10C,OAC3D,IAAIiwC,MAAQyE,OAAOF,QAAQgK,YAAYv6B,MAAOjkB,MAAO00C,OAAOnB,SAE/C,MAATtD,MACAl9D,MAAM4qE,OAAS1N,MAEf8C,gBAAgB2B,QAAQnC,aAAetuB,SAM/C,IAAIw6B,oBACI,wFAAwFl+D,MACpF,KAERm+D,yBACI,kDAAkDn+D,MAAM,KAC5Do+D,iBAAmB,gCACnBC,wBAA0BnC,UAC1BoC,mBAAqBpC,UAEzB,SAASqC,aAAaxoE,EAAGyc,QACrB,OAAKzc,EAKE/G,QAAQ3B,KAAKmxE,SACdnxE,KAAKmxE,QAAQzoE,EAAE25D,SACfriE,KAAKmxE,SACAnxE,KAAKmxE,QAAQC,UAAYL,kBAAkB9sE,KAAKkhB,QAC3C,SACA,cACRzc,EAAE25D,SAVC1gE,QAAQ3B,KAAKmxE,SACdnxE,KAAKmxE,QACLnxE,KAAKmxE,QAAoB,WAWvC,SAASE,kBAAkB3oE,EAAGyc,QAC1B,OAAKzc,EAKE/G,QAAQ3B,KAAKsxE,cACdtxE,KAAKsxE,aAAa5oE,EAAE25D,SACpBriE,KAAKsxE,aACDP,iBAAiB9sE,KAAKkhB,QAAU,SAAW,cAC7Czc,EAAE25D,SARC1gE,QAAQ3B,KAAKsxE,cACdtxE,KAAKsxE,aACLtxE,KAAKsxE,aAAyB,WAS5C,SAASC,kBAAkBC,UAAWrsD,OAAQ++C,QAC1C,IAAItlE,EACA6yE,GACA7I,IACA8I,IAAMF,UAAUG,oBACpB,IAAK3xE,KAAK4xE,aAKN,IAHA5xE,KAAK4xE,aAAe,GACpB5xE,KAAK6xE,iBAAmB,GACxB7xE,KAAK8xE,kBAAoB,GACpBlzE,EAAI,EAAGA,EAAI,KAAMA,EAClBgqE,IAAM3E,UAAU,CAAC,IAAMrlE,IACvBoB,KAAK8xE,kBAAkBlzE,GAAKoB,KAAKywE,YAC7B7H,IACA,IACF+I,oBACF3xE,KAAK6xE,iBAAiBjzE,GAAKoB,KAAKu6B,OAAOquC,IAAK,IAAI+I,oBAIxD,OAAIzN,OACe,QAAX/+C,QAEe,KADfssD,GAAKjjE,QAAQ3K,KAAK7D,KAAK8xE,kBAAmBJ,MACvBD,GAAK,MAGT,KADfA,GAAKjjE,QAAQ3K,KAAK7D,KAAK6xE,iBAAkBH,MACtBD,GAAK,KAGb,QAAXtsD,QAEY,KADZssD,GAAKjjE,QAAQ3K,KAAK7D,KAAK8xE,kBAAmBJ,QAK3B,KADfD,GAAKjjE,QAAQ3K,KAAK7D,KAAK6xE,iBAAkBH,MAF9BD,GAGa,MAGZ,KADZA,GAAKjjE,QAAQ3K,KAAK7D,KAAK6xE,iBAAkBH,QAK1B,KADfD,GAAKjjE,QAAQ3K,KAAK7D,KAAK8xE,kBAAmBJ,MAF/BD,GAGa,KAKpC,SAASM,kBAAkBP,UAAWrsD,OAAQ++C,QAC1C,IAAItlE,EAAGgqE,IAAKmG,MAEZ,GAAI/uE,KAAKgyE,kBACL,OAAOT,kBAAkB1tE,KAAK7D,KAAMwxE,UAAWrsD,OAAQ++C,QAY3D,IATKlkE,KAAK4xE,eACN5xE,KAAK4xE,aAAe,GACpB5xE,KAAK6xE,iBAAmB,GACxB7xE,KAAK8xE,kBAAoB,IAMxBlzE,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAgqE,IAAM3E,UAAU,CAAC,IAAMrlE,IACnBslE,SAAWlkE,KAAK6xE,iBAAiBjzE,KACjCoB,KAAK6xE,iBAAiBjzE,GAAK,IAAI6T,OAC3B,IAAMzS,KAAKu6B,OAAOquC,IAAK,IAAIr5D,QAAQ,IAAK,IAAM,IAC9C,KAEJvP,KAAK8xE,kBAAkBlzE,GAAK,IAAI6T,OAC5B,IAAMzS,KAAKywE,YAAY7H,IAAK,IAAIr5D,QAAQ,IAAK,IAAM,IACnD,MAGH20D,QAAWlkE,KAAK4xE,aAAahzE,KAC9BmwE,MACI,IAAM/uE,KAAKu6B,OAAOquC,IAAK,IAAM,KAAO5oE,KAAKywE,YAAY7H,IAAK,IAC9D5oE,KAAK4xE,aAAahzE,GAAK,IAAI6T,OAAOs8D,MAAMx/D,QAAQ,IAAK,IAAK,MAI1D20D,QACW,SAAX/+C,QACAnlB,KAAK6xE,iBAAiBjzE,GAAGqF,KAAKutE,WAE9B,OAAO5yE,EACJ,GACHslE,QACW,QAAX/+C,QACAnlB,KAAK8xE,kBAAkBlzE,GAAGqF,KAAKutE,WAE/B,OAAO5yE,EACJ,IAAKslE,QAAUlkE,KAAK4xE,aAAahzE,GAAGqF,KAAKutE,WAC5C,OAAO5yE,GAOnB,SAASg6B,SAASgwC,IAAKppE,OACnB,IAAIyyE,WAEJ,IAAKrJ,IAAIvD,UAEL,OAAOuD,IAGX,GAAqB,iBAAVppE,MACP,GAAI,QAAQyE,KAAKzE,OACbA,MAAQytE,MAAMztE,YAId,IAAKokE,SAFLpkE,MAAQopE,IAAIe,aAAaiH,YAAYpxE,QAGjC,OAAOopE,IAOnB,OAFAqJ,WAAa/pE,KAAKZ,IAAIshE,IAAIzvC,OAAQo0C,YAAY3E,IAAI1qC,OAAQ1+B,QAC1DopE,IAAI/lE,GAAG,OAAS+lE,IAAIlC,OAAS,MAAQ,IAAM,SAASlnE,MAAOyyE,YACpDrJ,IAGX,SAASsJ,YAAY1yE,OACjB,OAAa,MAATA,OACAo5B,SAAS54B,KAAMR,OACf4jE,MAAM2D,aAAa/mE,MAAM,GAClBA,MAEA2M,IAAI3M,KAAM,SAIzB,SAASmyE,iBACL,OAAO5E,YAAYvtE,KAAKk+B,OAAQl+B,KAAKqiE,SAGzC,SAASqO,iBAAiBzB,UACtB,OAAIjvE,KAAKgyE,mBACAzO,WAAWvjE,KAAM,iBAClBoyE,mBAAmBvuE,KAAK7D,MAExBivE,SACOjvE,KAAKqyE,wBAELryE,KAAKsyE,oBAGX/O,WAAWvjE,KAAM,uBAClBA,KAAKsyE,kBAAoBtB,yBAEtBhxE,KAAKqyE,yBAA2BpD,SACjCjvE,KAAKqyE,wBACLryE,KAAKsyE,mBAInB,SAAS3B,YAAY1B,UACjB,OAAIjvE,KAAKgyE,mBACAzO,WAAWvjE,KAAM,iBAClBoyE,mBAAmBvuE,KAAK7D,MAExBivE,SACOjvE,KAAKuyE,mBAELvyE,KAAKwyE,eAGXjP,WAAWvjE,KAAM,kBAClBA,KAAKwyE,aAAevB,oBAEjBjxE,KAAKuyE,oBAAsBtD,SAC5BjvE,KAAKuyE,mBACLvyE,KAAKwyE,cAInB,SAASJ,qBACL,SAASK,UAAUnsE,EAAGC,GAClB,OAAOA,EAAE5H,OAAS2H,EAAE3H,OAGxB,IAGIC,EACAgqE,IAJA8J,YAAc,GACdC,WAAa,GACbC,YAAc,GAGlB,IAAKh0E,EAAI,EAAGA,EAAI,GAAIA,IAEhBgqE,IAAM3E,UAAU,CAAC,IAAMrlE,IACvB8zE,YAAY1vE,KAAKhD,KAAKywE,YAAY7H,IAAK,KACvC+J,WAAW3vE,KAAKhD,KAAKu6B,OAAOquC,IAAK,KACjCgK,YAAY5vE,KAAKhD,KAAKu6B,OAAOquC,IAAK,KAClCgK,YAAY5vE,KAAKhD,KAAKywE,YAAY7H,IAAK,KAO3C,IAHA8J,YAAYnqE,KAAKkqE,WACjBE,WAAWpqE,KAAKkqE,WAChBG,YAAYrqE,KAAKkqE,WACZ7zE,EAAI,EAAGA,EAAI,GAAIA,IAChB8zE,YAAY9zE,GAAKwwE,YAAYsD,YAAY9zE,IACzC+zE,WAAW/zE,GAAKwwE,YAAYuD,WAAW/zE,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBg0E,YAAYh0E,GAAKwwE,YAAYwD,YAAYh0E,IAG7CoB,KAAKwyE,aAAe,IAAI//D,OAAO,KAAOmgE,YAAYnhD,KAAK,KAAO,IAAK,KACnEzxB,KAAKsyE,kBAAoBtyE,KAAKwyE,aAC9BxyE,KAAKuyE,mBAAqB,IAAI9/D,OAC1B,KAAOkgE,WAAWlhD,KAAK,KAAO,IAC9B,KAEJzxB,KAAKqyE,wBAA0B,IAAI5/D,OAC/B,KAAOigE,YAAYjhD,KAAK,KAAO,IAC/B,KAiDR,SAASohD,WAAW30C,MAChB,OAAO6uC,WAAW7uC,MAAQ,IAAM,IA5CpCsrC,eAAe,IAAK,EAAG,GAAG,WACtB,IAAIvvD,EAAIja,KAAKk+B,OACb,OAAOjkB,GAAK,KAAO6uD,SAAS7uD,EAAG,GAAK,IAAMA,KAG9CuvD,eAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAOxpE,KAAKk+B,OAAS,OAGzBsrC,eAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,eAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,eAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1C0C,aAAa,OAAQ,KAIrBU,gBAAgB,OAAQ,GAIxBkC,cAAc,IAAKL,aACnBK,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,OAAQR,UAAWN,QACjCc,cAAc,QAASP,UAAWN,QAClCa,cAAc,SAAUP,UAAWN,QAEnCuB,cAAc,CAAC,QAAS,UAAWM,MACnCN,cAAc,QAAQ,SAAUn5B,MAAOlxC,OACnCA,MAAM2qE,MACe,IAAjBz5B,MAAM13C,OAAeykE,MAAM0P,kBAAkBz8B,OAAS42B,MAAM52B,UAEpEm5B,cAAc,MAAM,SAAUn5B,MAAOlxC,OACjCA,MAAM2qE,MAAQ1M,MAAM0P,kBAAkBz8B,UAE1Cm5B,cAAc,KAAK,SAAUn5B,MAAOlxC,OAChCA,MAAM2qE,MAAQrqD,SAAS4wB,MAAO,OAWlC+sB,MAAM0P,kBAAoB,SAAUz8B,OAChC,OAAO42B,MAAM52B,QAAU42B,MAAM52B,OAAS,GAAK,KAAO,MAKtD,IAAI08B,WAAa3F,WAAW,YAAY,GAExC,SAAS4F,gBACL,OAAOjG,WAAW/sE,KAAKk+B,QAG3B,SAAS+0C,WAAWh5D,EAAGvR,EAAGD,EAAGR,EAAG8yB,EAAGl5B,EAAGqxE,IAGlC,IAAI/5C,KAYJ,OAVIlf,EAAI,KAAOA,GAAK,GAEhBkf,KAAO,IAAI/zB,KAAK6U,EAAI,IAAKvR,EAAGD,EAAGR,EAAG8yB,EAAGl5B,EAAGqxE,IACpC3/C,SAAS4F,KAAKnC,gBACdmC,KAAKf,YAAYne,IAGrBkf,KAAO,IAAI/zB,KAAK6U,EAAGvR,EAAGD,EAAGR,EAAG8yB,EAAGl5B,EAAGqxE,IAG/B/5C,KAGX,SAASg6C,cAAcl5D,GACnB,IAAIkf,KAAMl5B,KAcV,OAZIga,EAAI,KAAOA,GAAK,IAChBha,KAAOnB,MAAMwC,UAAUwC,MAAMD,KAAK3D,YAE7B,GAAK+Z,EAAI,IACdkf,KAAO,IAAI/zB,KAAKA,KAAKuxB,IAAIx2B,MAAM,KAAMF,OACjCszB,SAAS4F,KAAKlC,mBACdkC,KAAKd,eAAepe,IAGxBkf,KAAO,IAAI/zB,KAAKA,KAAKuxB,IAAIx2B,MAAM,KAAMD,YAGlCi5B,KAIX,SAASi6C,gBAAgBl1C,KAAMm1C,IAAKC,KAChC,IACIC,IAAM,EAAIF,IAAMC,IAIpB,QAFa,EAAIH,cAAcj1C,KAAM,EAAGq1C,KAAKx8C,YAAcs8C,KAAO,EAElDE,IAAM,EAI1B,SAASC,mBAAmBt1C,KAAMI,KAAMm1C,QAASJ,IAAKC,KAClD,IAGII,QACAC,aAFAp3C,UAAY,EAAI,GAAK+B,KAAO,IAFZ,EAAIm1C,QAAUJ,KAAO,EACxBD,gBAAgBl1C,KAAMm1C,IAAKC,KAgB5C,OAXI/2C,WAAa,EAEbo3C,aAAed,WADfa,QAAUx1C,KAAO,GACoB3B,UAC9BA,UAAYs2C,WAAW30C,OAC9Bw1C,QAAUx1C,KAAO,EACjBy1C,aAAep3C,UAAYs2C,WAAW30C,QAEtCw1C,QAAUx1C,KACVy1C,aAAep3C,WAGZ,CACH2B,KAAMw1C,QACNn3C,UAAWo3C,cAInB,SAASl1C,WAAWmqC,IAAKyK,IAAKC,KAC1B,IAEIM,QACAF,QAHAG,WAAaT,gBAAgBxK,IAAI1qC,OAAQm1C,IAAKC,KAC9Ch1C,KAAOp2B,KAAKC,OAAOygE,IAAIrsC,YAAcs3C,WAAa,GAAK,GAAK,EAehE,OAXIv1C,KAAO,EAEPs1C,QAAUt1C,KAAOw1C,YADjBJ,QAAU9K,IAAI1qC,OAAS,EACem1C,IAAKC,KACpCh1C,KAAOw1C,YAAYlL,IAAI1qC,OAAQm1C,IAAKC,MAC3CM,QAAUt1C,KAAOw1C,YAAYlL,IAAI1qC,OAAQm1C,IAAKC,KAC9CI,QAAU9K,IAAI1qC,OAAS,IAEvBw1C,QAAU9K,IAAI1qC,OACd01C,QAAUt1C,MAGP,CACHA,KAAMs1C,QACN11C,KAAMw1C,SAId,SAASI,YAAY51C,KAAMm1C,IAAKC,KAC5B,IAAIO,WAAaT,gBAAgBl1C,KAAMm1C,IAAKC,KACxCS,eAAiBX,gBAAgBl1C,KAAO,EAAGm1C,IAAKC,KACpD,OAAQT,WAAW30C,MAAQ21C,WAAaE,gBAAkB,EAoC9D,SAASC,WAAWpL,KAChB,OAAOnqC,WAAWmqC,IAAK5oE,KAAKi0E,MAAMZ,IAAKrzE,KAAKi0E,MAAMX,KAAKh1C,KAhC3DkrC,eAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,eAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrC0C,aAAa,OAAQ,KACrBA,aAAa,UAAW,KAIxBU,gBAAgB,OAAQ,GACxBA,gBAAgB,UAAW,GAI3BkC,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAE/B4B,kBACI,CAAC,IAAK,KAAM,IAAK,OACjB,SAAUr5B,MAAO/X,KAAMwoC,OAAQ10C,OAC3BkM,KAAKlM,MAAM+2C,OAAO,EAAG,IAAM8D,MAAM52B,UAYzC,IAAI69B,kBAAoB,CACpBb,IAAK,EACLC,IAAK,GAGT,SAASa,uBACL,OAAOn0E,KAAKi0E,MAAMZ,IAGtB,SAASe,uBACL,OAAOp0E,KAAKi0E,MAAMX,IAKtB,SAASe,WAAWh+B,OAChB,IAAI/X,KAAOt+B,KAAK2pE,aAAarrC,KAAKt+B,MAClC,OAAgB,MAATq2C,MAAgB/X,KAAOt+B,KAAK0N,IAAqB,GAAhB2oC,MAAQ/X,MAAW,KAG/D,SAASg2C,cAAcj+B,OACnB,IAAI/X,KAAOG,WAAWz+B,KAAM,EAAG,GAAGs+B,KAClC,OAAgB,MAAT+X,MAAgB/X,KAAOt+B,KAAK0N,IAAqB,GAAhB2oC,MAAQ/X,MAAW,KAgE/D,SAASi2C,aAAal+B,MAAOpiB,QACzB,MAAqB,iBAAVoiB,MACAA,MAGNzvC,MAAMyvC,OAKU,iBADrBA,MAAQpiB,OAAOugD,cAAcn+B,QAElBA,MAGJ,KARI5wB,SAAS4wB,MAAO,IAW/B,SAASo+B,gBAAgBp+B,MAAOpiB,QAC5B,MAAqB,iBAAVoiB,MACApiB,OAAOugD,cAAcn+B,OAAS,GAAK,EAEvCzvC,MAAMyvC,OAAS,KAAOA,MAIjC,SAASq+B,cAAcC,GAAI7yE,GACvB,OAAO6yE,GAAG7wE,MAAMhC,EAAG,GAAG2M,OAAOkmE,GAAG7wE,MAAM,EAAGhC,IArF7C0nE,eAAe,IAAK,EAAG,KAAM,OAE7BA,eAAe,KAAM,EAAG,GAAG,SAAUrkD,QACjC,OAAOnlB,KAAK2pE,aAAaiL,YAAY50E,KAAMmlB,WAG/CqkD,eAAe,MAAO,EAAG,GAAG,SAAUrkD,QAClC,OAAOnlB,KAAK2pE,aAAakL,cAAc70E,KAAMmlB,WAGjDqkD,eAAe,OAAQ,EAAG,GAAG,SAAUrkD,QACnC,OAAOnlB,KAAK2pE,aAAamL,SAAS90E,KAAMmlB,WAG5CqkD,eAAe,IAAK,EAAG,EAAG,WAC1BA,eAAe,IAAK,EAAG,EAAG,cAI1B0C,aAAa,MAAO,KACpBA,aAAa,UAAW,KACxBA,aAAa,aAAc,KAG3BU,gBAAgB,MAAO,IACvBA,gBAAgB,UAAW,IAC3BA,gBAAgB,aAAc,IAI9BkC,cAAc,IAAKZ,WACnBY,cAAc,IAAKZ,WACnBY,cAAc,IAAKZ,WACnBY,cAAc,MAAM,SAAUG,SAAUh7C,QACpC,OAAOA,OAAO8gD,iBAAiB9F,aAEnCH,cAAc,OAAO,SAAUG,SAAUh7C,QACrC,OAAOA,OAAO+gD,mBAAmB/F,aAErCH,cAAc,QAAQ,SAAUG,SAAUh7C,QACtC,OAAOA,OAAOghD,cAAchG,aAGhCS,kBAAkB,CAAC,KAAM,MAAO,SAAS,SAAUr5B,MAAO/X,KAAMwoC,OAAQ10C,OACpE,IAAIqhD,QAAU3M,OAAOF,QAAQ4N,cAAcn+B,MAAOjkB,MAAO00C,OAAOnB,SAEjD,MAAX8N,QACAn1C,KAAK71B,EAAIgrE,QAETtO,gBAAgB2B,QAAQpB,eAAiBrvB,SAIjDq5B,kBAAkB,CAAC,IAAK,IAAK,MAAM,SAAUr5B,MAAO/X,KAAMwoC,OAAQ10C,OAC9DkM,KAAKlM,OAAS66C,MAAM52B,UAkCxB,IAAI6+B,sBACI,2DAA2DviE,MAAM,KACrEwiE,2BAA6B,8BAA8BxiE,MAAM,KACjEyiE,yBAA2B,uBAAuBziE,MAAM,KACxD0iE,qBAAuBxG,UACvByG,0BAA4BzG,UAC5B0G,wBAA0B1G,UAE9B,SAAS2G,eAAe9sE,EAAGyc,QACvB,IAAI2vD,SAAWnzE,QAAQ3B,KAAKy1E,WACtBz1E,KAAKy1E,UACLz1E,KAAKy1E,UACD/sE,IAAW,IAANA,GAAc1I,KAAKy1E,UAAUrE,SAASntE,KAAKkhB,QAC1C,SACA,cAEhB,OAAa,IAANzc,EACDgsE,cAAcI,SAAU90E,KAAKi0E,MAAMZ,KACnC3qE,EACAosE,SAASpsE,EAAEy1B,OACX22C,SAGV,SAASY,oBAAoBhtE,GACzB,OAAa,IAANA,EACDgsE,cAAc10E,KAAK21E,eAAgB31E,KAAKi0E,MAAMZ,KAC9C3qE,EACA1I,KAAK21E,eAAejtE,EAAEy1B,OACtBn+B,KAAK21E,eAGf,SAASC,kBAAkBltE,GACvB,OAAa,IAANA,EACDgsE,cAAc10E,KAAK61E,aAAc71E,KAAKi0E,MAAMZ,KAC5C3qE,EACA1I,KAAK61E,aAAantE,EAAEy1B,OACpBn+B,KAAK61E,aAGf,SAASC,oBAAoBC,YAAa5wD,OAAQ++C,QAC9C,IAAItlE,EACA6yE,GACA7I,IACA8I,IAAMqE,YAAYpE,oBACtB,IAAK3xE,KAAKg2E,eAKN,IAJAh2E,KAAKg2E,eAAiB,GACtBh2E,KAAKi2E,oBAAsB,GAC3Bj2E,KAAKk2E,kBAAoB,GAEpBt3E,EAAI,EAAGA,EAAI,IAAKA,EACjBgqE,IAAM3E,UAAU,CAAC,IAAM,IAAI9lC,IAAIv/B,GAC/BoB,KAAKk2E,kBAAkBt3E,GAAKoB,KAAK40E,YAC7BhM,IACA,IACF+I,oBACF3xE,KAAKi2E,oBAAoBr3E,GAAKoB,KAAK60E,cAC/BjM,IACA,IACF+I,oBACF3xE,KAAKg2E,eAAep3E,GAAKoB,KAAK80E,SAASlM,IAAK,IAAI+I,oBAIxD,OAAIzN,OACe,SAAX/+C,QAEe,KADfssD,GAAKjjE,QAAQ3K,KAAK7D,KAAKg2E,eAAgBtE,MACpBD,GAAK,KACN,QAAXtsD,QAEQ,KADfssD,GAAKjjE,QAAQ3K,KAAK7D,KAAKi2E,oBAAqBvE,MACzBD,GAAK,MAGT,KADfA,GAAKjjE,QAAQ3K,KAAK7D,KAAKk2E,kBAAmBxE,MACvBD,GAAK,KAGb,SAAXtsD,QAEY,KADZssD,GAAKjjE,QAAQ3K,KAAK7D,KAAKg2E,eAAgBtE,QAK3B,KADZD,GAAKjjE,QAAQ3K,KAAK7D,KAAKi2E,oBAAqBvE,QAK7B,KADfD,GAAKjjE,QAAQ3K,KAAK7D,KAAKk2E,kBAAmBxE,MAN/BD,GAOa,KACN,QAAXtsD,QAEK,KADZssD,GAAKjjE,QAAQ3K,KAAK7D,KAAKi2E,oBAAqBvE,QAKhC,KADZD,GAAKjjE,QAAQ3K,KAAK7D,KAAKg2E,eAAgBtE,QAKxB,KADfD,GAAKjjE,QAAQ3K,KAAK7D,KAAKk2E,kBAAmBxE,MAN/BD,GAOa,MAGZ,KADZA,GAAKjjE,QAAQ3K,KAAK7D,KAAKk2E,kBAAmBxE,QAK9B,KADZD,GAAKjjE,QAAQ3K,KAAK7D,KAAKg2E,eAAgBtE,QAKxB,KADfD,GAAKjjE,QAAQ3K,KAAK7D,KAAKi2E,oBAAqBvE,MANjCD,GAOa,KAKpC,SAAS0E,oBAAoBJ,YAAa5wD,OAAQ++C,QAC9C,IAAItlE,EAAGgqE,IAAKmG,MAEZ,GAAI/uE,KAAKo2E,oBACL,OAAON,oBAAoBjyE,KAAK7D,KAAM+1E,YAAa5wD,OAAQ++C,QAU/D,IAPKlkE,KAAKg2E,iBACNh2E,KAAKg2E,eAAiB,GACtBh2E,KAAKk2E,kBAAoB,GACzBl2E,KAAKi2E,oBAAsB,GAC3Bj2E,KAAKq2E,mBAAqB,IAGzBz3E,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAgqE,IAAM3E,UAAU,CAAC,IAAM,IAAI9lC,IAAIv/B,GAC3BslE,SAAWlkE,KAAKq2E,mBAAmBz3E,KACnCoB,KAAKq2E,mBAAmBz3E,GAAK,IAAI6T,OAC7B,IAAMzS,KAAK80E,SAASlM,IAAK,IAAIr5D,QAAQ,IAAK,QAAU,IACpD,KAEJvP,KAAKi2E,oBAAoBr3E,GAAK,IAAI6T,OAC9B,IAAMzS,KAAK60E,cAAcjM,IAAK,IAAIr5D,QAAQ,IAAK,QAAU,IACzD,KAEJvP,KAAKk2E,kBAAkBt3E,GAAK,IAAI6T,OAC5B,IAAMzS,KAAK40E,YAAYhM,IAAK,IAAIr5D,QAAQ,IAAK,QAAU,IACvD,MAGHvP,KAAKg2E,eAAep3E,KACrBmwE,MACI,IACA/uE,KAAK80E,SAASlM,IAAK,IACnB,KACA5oE,KAAK60E,cAAcjM,IAAK,IACxB,KACA5oE,KAAK40E,YAAYhM,IAAK,IAC1B5oE,KAAKg2E,eAAep3E,GAAK,IAAI6T,OAAOs8D,MAAMx/D,QAAQ,IAAK,IAAK,MAI5D20D,QACW,SAAX/+C,QACAnlB,KAAKq2E,mBAAmBz3E,GAAGqF,KAAK8xE,aAEhC,OAAOn3E,EACJ,GACHslE,QACW,QAAX/+C,QACAnlB,KAAKi2E,oBAAoBr3E,GAAGqF,KAAK8xE,aAEjC,OAAOn3E,EACJ,GACHslE,QACW,OAAX/+C,QACAnlB,KAAKk2E,kBAAkBt3E,GAAGqF,KAAK8xE,aAE/B,OAAOn3E,EACJ,IAAKslE,QAAUlkE,KAAKg2E,eAAep3E,GAAGqF,KAAK8xE,aAC9C,OAAOn3E,GAOnB,SAAS03E,gBAAgBjgC,OACrB,IAAKr2C,KAAKqlE,UACN,OAAgB,MAAThvB,MAAgBr2C,KAAOwG,IAElC,IAAI23B,IAAMn+B,KAAK0mE,OAAS1mE,KAAK6C,GAAGk0B,YAAc/2B,KAAK6C,GAAGi0B,SACtD,OAAa,MAATuf,OACAA,MAAQk+B,aAAal+B,MAAOr2C,KAAK2pE,cAC1B3pE,KAAK0N,IAAI2oC,MAAQlY,IAAK,MAEtBA,IAIf,SAASo4C,sBAAsBlgC,OAC3B,IAAKr2C,KAAKqlE,UACN,OAAgB,MAAThvB,MAAgBr2C,KAAOwG,IAElC,IAAIitE,SAAWzzE,KAAKm+B,MAAQ,EAAIn+B,KAAK2pE,aAAasK,MAAMZ,KAAO,EAC/D,OAAgB,MAATh9B,MAAgBo9B,QAAUzzE,KAAK0N,IAAI2oC,MAAQo9B,QAAS,KAG/D,SAAS+C,mBAAmBngC,OACxB,IAAKr2C,KAAKqlE,UACN,OAAgB,MAAThvB,MAAgBr2C,KAAOwG,IAOlC,GAAa,MAAT6vC,MAAe,CACf,IAAIo9B,QAAUgB,gBAAgBp+B,MAAOr2C,KAAK2pE,cAC1C,OAAO3pE,KAAKm+B,IAAIn+B,KAAKm+B,MAAQ,EAAIs1C,QAAUA,QAAU,GAErD,OAAOzzE,KAAKm+B,OAAS,EAI7B,SAAS82C,cAAchG,UACnB,OAAIjvE,KAAKo2E,qBACA7S,WAAWvjE,KAAM,mBAClBy2E,qBAAqB5yE,KAAK7D,MAE1BivE,SACOjvE,KAAK02E,qBAEL12E,KAAK22E,iBAGXpT,WAAWvjE,KAAM,oBAClBA,KAAK22E,eAAiBtB,sBAEnBr1E,KAAK02E,sBAAwBzH,SAC9BjvE,KAAK02E,qBACL12E,KAAK22E,gBAInB,SAAS3B,mBAAmB/F,UACxB,OAAIjvE,KAAKo2E,qBACA7S,WAAWvjE,KAAM,mBAClBy2E,qBAAqB5yE,KAAK7D,MAE1BivE,SACOjvE,KAAK42E,0BAEL52E,KAAK62E,sBAGXtT,WAAWvjE,KAAM,yBAClBA,KAAK62E,oBAAsBvB,2BAExBt1E,KAAK42E,2BAA6B3H,SACnCjvE,KAAK42E,0BACL52E,KAAK62E,qBAInB,SAAS9B,iBAAiB9F,UACtB,OAAIjvE,KAAKo2E,qBACA7S,WAAWvjE,KAAM,mBAClBy2E,qBAAqB5yE,KAAK7D,MAE1BivE,SACOjvE,KAAK82E,wBAEL92E,KAAK+2E,oBAGXxT,WAAWvjE,KAAM,uBAClBA,KAAK+2E,kBAAoBxB,yBAEtBv1E,KAAK82E,yBAA2B7H,SACjCjvE,KAAK82E,wBACL92E,KAAK+2E,mBAInB,SAASN,uBACL,SAAShE,UAAUnsE,EAAGC,GAClB,OAAOA,EAAE5H,OAAS2H,EAAE3H,OAGxB,IAIIC,EACAgqE,IACAoO,KACAC,OACAC,MARAC,UAAY,GACZzE,YAAc,GACdC,WAAa,GACbC,YAAc,GAMlB,IAAKh0E,EAAI,EAAGA,EAAI,EAAGA,IAEfgqE,IAAM3E,UAAU,CAAC,IAAM,IAAI9lC,IAAIv/B,GAC/Bo4E,KAAO5H,YAAYpvE,KAAK40E,YAAYhM,IAAK,KACzCqO,OAAS7H,YAAYpvE,KAAK60E,cAAcjM,IAAK,KAC7CsO,MAAQ9H,YAAYpvE,KAAK80E,SAASlM,IAAK,KACvCuO,UAAUn0E,KAAKg0E,MACftE,YAAY1vE,KAAKi0E,QACjBtE,WAAW3vE,KAAKk0E,OAChBtE,YAAY5vE,KAAKg0E,MACjBpE,YAAY5vE,KAAKi0E,QACjBrE,YAAY5vE,KAAKk0E,OAIrBC,UAAU5uE,KAAKkqE,WACfC,YAAYnqE,KAAKkqE,WACjBE,WAAWpqE,KAAKkqE,WAChBG,YAAYrqE,KAAKkqE,WAEjBzyE,KAAK22E,eAAiB,IAAIlkE,OAAO,KAAOmgE,YAAYnhD,KAAK,KAAO,IAAK,KACrEzxB,KAAK62E,oBAAsB72E,KAAK22E,eAChC32E,KAAK+2E,kBAAoB/2E,KAAK22E,eAE9B32E,KAAK02E,qBAAuB,IAAIjkE,OAC5B,KAAOkgE,WAAWlhD,KAAK,KAAO,IAC9B,KAEJzxB,KAAK42E,0BAA4B,IAAInkE,OACjC,KAAOigE,YAAYjhD,KAAK,KAAO,IAC/B,KAEJzxB,KAAK82E,wBAA0B,IAAIrkE,OAC/B,KAAO0kE,UAAU1lD,KAAK,KAAO,IAC7B,KAMR,SAAS2lD,UACL,OAAOp3E,KAAKoiE,QAAU,IAAM,GAGhC,SAASiV,UACL,OAAOr3E,KAAKoiE,SAAW,GAiC3B,SAAS4C,SAAS5yC,MAAOklD,WACrB9N,eAAep3C,MAAO,EAAG,GAAG,WACxB,OAAOpyB,KAAK2pE,aAAa3E,SACrBhlE,KAAKoiE,QACLpiE,KAAKiiE,UACLqV,cAiBZ,SAASC,cAActI,SAAUh7C,QAC7B,OAAOA,OAAOujD,eA2DlB,SAASC,WAAWphC,OAGhB,MAAgD,OAAxCA,MAAQ,IAAIhxB,cAAc/Y,OAAO,GAnH7Ck9D,eAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,eAAe,IAAK,CAAC,KAAM,GAAI,EAAG4N,SAClC5N,eAAe,IAAK,CAAC,KAAM,GAAI,EAAG6N,SAElC7N,eAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK4N,QAAQj3E,MAAMH,MAAQ8oE,SAAS9oE,KAAKiiE,UAAW,MAG/DuH,eAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACA4N,QAAQj3E,MAAMH,MACd8oE,SAAS9oE,KAAKiiE,UAAW,GACzB6G,SAAS9oE,KAAK+hE,UAAW,MAIjCyH,eAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAKxpE,KAAKoiE,QAAU0G,SAAS9oE,KAAKiiE,UAAW,MAGxDuH,eAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACAxpE,KAAKoiE,QACL0G,SAAS9oE,KAAKiiE,UAAW,GACzB6G,SAAS9oE,KAAK+hE,UAAW,MAcjCiD,SAAS,KAAK,GACdA,SAAS,KAAK,GAIdkH,aAAa,OAAQ,KAGrBU,gBAAgB,OAAQ,IAQxBkC,cAAc,IAAKyI,eACnBzI,cAAc,IAAKyI,eACnBzI,cAAc,IAAKZ,WACnBY,cAAc,IAAKZ,WACnBY,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,KAAMZ,UAAWJ,QAE/BgB,cAAc,MAAOX,WACrBW,cAAc,QAASV,WACvBU,cAAc,MAAOX,WACrBW,cAAc,QAASV,WAEvBoB,cAAc,CAAC,IAAK,MAAOS,MAC3BT,cAAc,CAAC,IAAK,OAAO,SAAUn5B,MAAOlxC,MAAO2hE,QAC/C,IAAI4Q,OAASzK,MAAM52B,OACnBlxC,MAAM8qE,MAAmB,KAAXyH,OAAgB,EAAIA,UAEtClI,cAAc,CAAC,IAAK,MAAM,SAAUn5B,MAAOlxC,MAAO2hE,QAC9CA,OAAO6Q,MAAQ7Q,OAAOF,QAAQgR,KAAKvhC,OACnCywB,OAAO+Q,UAAYxhC,SAEvBm5B,cAAc,CAAC,IAAK,OAAO,SAAUn5B,MAAOlxC,MAAO2hE,QAC/C3hE,MAAM8qE,MAAQhD,MAAM52B,OACpB8uB,gBAAgB2B,QAAQlB,SAAU,KAEtC4J,cAAc,OAAO,SAAUn5B,MAAOlxC,MAAO2hE,QACzC,IAAIgR,IAAMzhC,MAAM13C,OAAS,EACzBwG,MAAM8qE,MAAQhD,MAAM52B,MAAM8yB,OAAO,EAAG2O,MACpC3yE,MAAM+qE,QAAUjD,MAAM52B,MAAM8yB,OAAO2O,MACnC3S,gBAAgB2B,QAAQlB,SAAU,KAEtC4J,cAAc,SAAS,SAAUn5B,MAAOlxC,MAAO2hE,QAC3C,IAAIiR,KAAO1hC,MAAM13C,OAAS,EACtBq5E,KAAO3hC,MAAM13C,OAAS,EAC1BwG,MAAM8qE,MAAQhD,MAAM52B,MAAM8yB,OAAO,EAAG4O,OACpC5yE,MAAM+qE,QAAUjD,MAAM52B,MAAM8yB,OAAO4O,KAAM,IACzC5yE,MAAMgrE,QAAUlD,MAAM52B,MAAM8yB,OAAO6O,OACnC7S,gBAAgB2B,QAAQlB,SAAU,KAEtC4J,cAAc,OAAO,SAAUn5B,MAAOlxC,MAAO2hE,QACzC,IAAIgR,IAAMzhC,MAAM13C,OAAS,EACzBwG,MAAM8qE,MAAQhD,MAAM52B,MAAM8yB,OAAO,EAAG2O,MACpC3yE,MAAM+qE,QAAUjD,MAAM52B,MAAM8yB,OAAO2O,SAEvCtI,cAAc,SAAS,SAAUn5B,MAAOlxC,MAAO2hE,QAC3C,IAAIiR,KAAO1hC,MAAM13C,OAAS,EACtBq5E,KAAO3hC,MAAM13C,OAAS,EAC1BwG,MAAM8qE,MAAQhD,MAAM52B,MAAM8yB,OAAO,EAAG4O,OACpC5yE,MAAM+qE,QAAUjD,MAAM52B,MAAM8yB,OAAO4O,KAAM,IACzC5yE,MAAMgrE,QAAUlD,MAAM52B,MAAM8yB,OAAO6O,UAWvC,IAAIC,2BAA6B,gBAK7BC,WAAa9K,WAAW,SAAS,GAErC,SAAS+K,eAAe/V,MAAOH,QAASmW,SACpC,OAAIhW,MAAQ,GACDgW,QAAU,KAAO,KAEjBA,QAAU,KAAO,KAIhC,IAuBIC,aAvBAC,WAAa,CACb3P,SAAUP,gBACV8B,eAAgBC,sBAChBH,YAAaY,mBACbjX,QAASmX,eACTyN,uBAAwBxN,8BACxBY,aAAcV,oBAEd1wC,OAAQs2C,oBACRJ,YAAaK,yBAEbxyC,KAAM41C,kBAENY,SAAUI,sBACVN,YAAaQ,yBACbP,cAAeM,2BAEfqD,cAAeP,4BAIfQ,QAAU,GACVC,eAAiB,GAGrB,SAASC,aAAaC,KAAM/5E,MACxB,IAAID,EACAi6E,KAAO3wE,KAAKZ,IAAIsxE,KAAKj6E,OAAQE,KAAKF,QACtC,IAAKC,EAAI,EAAGA,EAAIi6E,KAAMj6E,GAAK,EACvB,GAAIg6E,KAAKh6E,KAAOC,KAAKD,GACjB,OAAOA,EAGf,OAAOi6E,KAGX,SAASC,gBAAgBz5E,KACrB,OAAOA,IAAMA,IAAIgmB,cAAc9V,QAAQ,IAAK,KAAOlQ,IAMvD,SAAS05E,aAAan6C,OAOlB,IANA,IACIh3B,EACAtF,KACA2xB,OACAthB,MAJA/T,EAAI,EAMDA,EAAIggC,MAAMjgC,QAAQ,CAKrB,IAHAiJ,GADA+K,MAAQmmE,gBAAgBl6C,MAAMhgC,IAAI+T,MAAM,MAC9BhU,OAEV2D,MADAA,KAAOw2E,gBAAgBl6C,MAAMhgC,EAAI,KACnB0D,KAAKqQ,MAAM,KAAO,KACzB/K,EAAI,GAAG,CAEV,GADAqsB,OAAS+kD,WAAWrmE,MAAM7O,MAAM,EAAG8D,GAAG6pB,KAAK,MAEvC,OAAOwC,OAEX,GACI3xB,MACAA,KAAK3D,QAAUiJ,GACf+wE,aAAahmE,MAAOrQ,OAASsF,EAAI,EAGjC,MAEJA,IAEJhJ,IAEJ,OAAOy5E,aAGX,SAASY,iBAAiBj1E,MAEtB,OAAoC,MAA7BA,KAAK4T,MAAM,eAGtB,SAASohE,WAAWh1E,MAChB,IAAIk1E,UAAY,KAGhB,QACsB74E,IAAlBo4E,QAAQz0E,YACU,IAAXE,QACPA,QACAA,OAAOC,SACP80E,iBAAiBj1E,MAEjB,IACIk1E,UAAYb,aAAac,MAEzB,uHACAC,mBAAmBF,WACrB,MAAOn3E,GAGL02E,QAAQz0E,MAAQ,KAGxB,OAAOy0E,QAAQz0E,MAMnB,SAASo1E,mBAAmB/5E,IAAKyI,QAC7B,IAAIwM,KAqBJ,OApBIjV,OAEIiV,KADAqvD,YAAY77D,QACLuxE,UAAUh6E,KAEVi6E,aAAaj6E,IAAKyI,SAKzBuwE,aAAe/jE,KAEQ,oBAAZ8yD,SAA2BA,QAAQH,MAE1CG,QAAQH,KACJ,UAAY5nE,IAAM,2CAM3Bg5E,aAAac,MAGxB,SAASG,aAAat1E,KAAM8iE,QACxB,GAAe,OAAXA,OAAiB,CACjB,IAAI7yC,OACAg0C,aAAeqQ,WAEnB,GADAxR,OAAOyS,KAAOv1E,KACO,MAAjBy0E,QAAQz0E,MACR0jE,gBACI,uBACA,2OAKJO,aAAewQ,QAAQz0E,MAAM4jE,aAC1B,GAA2B,MAAvBd,OAAO0S,aACd,GAAoC,MAAhCf,QAAQ3R,OAAO0S,cACfvR,aAAewQ,QAAQ3R,OAAO0S,cAAc5R,YACzC,CAEH,GAAc,OADd3zC,OAAS+kD,WAAWlS,OAAO0S,eAWvB,OAPKd,eAAe5R,OAAO0S,gBACvBd,eAAe5R,OAAO0S,cAAgB,IAE1Cd,eAAe5R,OAAO0S,cAAcx2E,KAAK,CACrCgB,KAAMA,KACN8iE,OAAQA,SAEL,KATPmB,aAAeh0C,OAAO2zC,QA0BlC,OAbA6Q,QAAQz0E,MAAQ,IAAImkE,OAAOH,aAAaC,aAAcnB,SAElD4R,eAAe10E,OACf00E,eAAe10E,MAAMsH,SAAQ,SAAU5E,GACnC4yE,aAAa5yE,EAAE1C,KAAM0C,EAAEogE,WAO/BsS,mBAAmBp1E,MAEZy0E,QAAQz0E,MAIf,cADOy0E,QAAQz0E,MACR,KAIf,SAASy1E,aAAaz1E,KAAM8iE,QACxB,GAAc,MAAVA,OAAgB,CAChB,IAAI7yC,OACAylD,UACAzR,aAAeqQ,WAEE,MAAjBG,QAAQz0E,OAA+C,MAA9By0E,QAAQz0E,MAAMw1E,aAEvCf,QAAQz0E,MAAMuH,IAAIy8D,aAAayQ,QAAQz0E,MAAM4jE,QAASd,UAIrC,OADjB4S,UAAYV,WAAWh1E,SAEnBikE,aAAeyR,UAAU9R,SAE7Bd,OAASkB,aAAaC,aAAcnB,QACnB,MAAb4S,YAIA5S,OAAOyS,KAAOv1E,OAElBiwB,OAAS,IAAIk0C,OAAOrB,SACb0S,aAAef,QAAQz0E,MAC9By0E,QAAQz0E,MAAQiwB,QAIpBmlD,mBAAmBp1E,WAGE,MAAjBy0E,QAAQz0E,QAC0B,MAA9By0E,QAAQz0E,MAAMw1E,cACdf,QAAQz0E,MAAQy0E,QAAQz0E,MAAMw1E,aAC1Bx1E,OAASo1E,sBACTA,mBAAmBp1E,OAEC,MAAjBy0E,QAAQz0E,cACRy0E,QAAQz0E,OAI3B,OAAOy0E,QAAQz0E,MAInB,SAASq1E,UAAUh6E,KACf,IAAI40B,OAMJ,GAJI50B,KAAOA,IAAIunE,SAAWvnE,IAAIunE,QAAQuS,QAClC95E,IAAMA,IAAIunE,QAAQuS,QAGjB95E,IACD,OAAOg5E,aAGX,IAAK12E,QAAQtC,KAAM,CAGf,GADA40B,OAAS+kD,WAAW35E,KAEhB,OAAO40B,OAEX50B,IAAM,CAACA,KAGX,OAAO05E,aAAa15E,KAGxB,SAASs6E,cACL,OAAO1vE,KAAKwuE,SAGhB,SAASmB,cAAclxE,GACnB,IAAI67D,SACAj+D,EAAIoC,EAAEmnE,GAuCV,OArCIvpE,IAAsC,IAAjC6+D,gBAAgBz8D,GAAG67D,WACxBA,SACIj+D,EAAEypE,OAAS,GAAKzpE,EAAEypE,OAAS,GACrBA,MACAzpE,EAAE0pE,MAAQ,GAAK1pE,EAAE0pE,MAAQzC,YAAYjnE,EAAEwpE,MAAOxpE,EAAEypE,QAChDC,KACA1pE,EAAE2pE,MAAQ,GACV3pE,EAAE2pE,MAAQ,IACG,KAAZ3pE,EAAE2pE,QACgB,IAAd3pE,EAAE4pE,SACe,IAAd5pE,EAAE6pE,SACiB,IAAnB7pE,EAAE8pE,cACVH,KACA3pE,EAAE4pE,QAAU,GAAK5pE,EAAE4pE,QAAU,GAC7BA,OACA5pE,EAAE6pE,QAAU,GAAK7pE,EAAE6pE,QAAU,GAC7BA,OACA7pE,EAAE8pE,aAAe,GAAK9pE,EAAE8pE,aAAe,IACvCA,aACC,EAGPjL,gBAAgBz8D,GAAGmxE,qBAClBtV,SAAWuL,MAAQvL,SAAWyL,QAE/BzL,SAAWyL,MAEX7K,gBAAgBz8D,GAAGoxE,iBAAgC,IAAdvV,WACrCA,SAAW8L,MAEXlL,gBAAgBz8D,GAAGqxE,mBAAkC,IAAdxV,WACvCA,SAAW+L,SAGfnL,gBAAgBz8D,GAAG67D,SAAWA,UAG3B77D,EAKX,IAAIsxE,iBACI,iJACJC,cACI,6IACJC,QAAU,wBACVC,SAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,SAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,gBAAkB,qBAElBpV,QACI,0LACJqV,WAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,cAAcnU,QACnB,IAAIloE,EACAwP,EAGA8sE,UACAC,WACAh8C,WACAi8C,SALAxgD,OAASksC,OAAO/jE,GAChB6U,MAAQoiE,iBAAiB50D,KAAKwV,SAAWq/C,cAAc70D,KAAKwV,QAK5DygD,YAAclB,SAASx7E,OACvB28E,YAAclB,SAASz7E,OAE3B,GAAIiZ,MAAO,CAEP,IADAutD,gBAAgB2B,QAAQjF,KAAM,EACzBjjE,EAAI,EAAGwP,EAAIitE,YAAaz8E,EAAIwP,EAAGxP,IAChC,GAAIu7E,SAASv7E,GAAG,GAAGwmB,KAAKxN,MAAM,IAAK,CAC/BujE,WAAahB,SAASv7E,GAAG,GACzBs8E,WAA+B,IAAnBf,SAASv7E,GAAG,GACxB,MAGR,GAAkB,MAAdu8E,WAEA,YADArU,OAAOxB,UAAW,GAGtB,GAAI1tD,MAAM,GAAI,CACV,IAAKhZ,EAAI,EAAGwP,EAAIktE,YAAa18E,EAAIwP,EAAGxP,IAChC,GAAIw7E,SAASx7E,GAAG,GAAGwmB,KAAKxN,MAAM,IAAK,CAE/BunB,YAAcvnB,MAAM,IAAM,KAAOwiE,SAASx7E,GAAG,GAC7C,MAGR,GAAkB,MAAdugC,WAEA,YADA2nC,OAAOxB,UAAW,GAI1B,IAAK4V,WAA2B,MAAd/7C,WAEd,YADA2nC,OAAOxB,UAAW,GAGtB,GAAI1tD,MAAM,GAAI,CACV,IAAIsiE,QAAQ90D,KAAKxN,MAAM,IAInB,YADAkvD,OAAOxB,UAAW,GAFlB8V,SAAW,IAMnBtU,OAAOP,GAAK4U,YAAch8C,YAAc,KAAOi8C,UAAY,IAC3DG,0BAA0BzU,aAE1BA,OAAOxB,UAAW,EAI1B,SAASkW,0BACLC,QACAC,SACAC,OACAC,QACAC,UACAC,WAEA,IAAInsD,OAAS,CACTosD,eAAeN,SACf3K,yBAAyBtiE,QAAQktE,UACjCj2D,SAASk2D,OAAQ,IACjBl2D,SAASm2D,QAAS,IAClBn2D,SAASo2D,UAAW,KAOxB,OAJIC,WACAnsD,OAAO3sB,KAAKyiB,SAASq2D,UAAW,KAG7BnsD,OAGX,SAASosD,eAAeN,SACpB,IAAIv9C,KAAOzY,SAASg2D,QAAS,IAC7B,OAAIv9C,MAAQ,GACD,IAAOA,KACPA,MAAQ,IACR,KAAOA,KAEXA,KAGX,SAAS89C,kBAAkBn6E,GAEvB,OAAOA,EACF0N,QAAQ,oBAAqB,KAC7BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,IAG3B,SAAS0sE,aAAaC,WAAYC,YAAarV,QAC3C,OAAIoV,YAEsB/G,2BAA2B3mE,QAAQ0tE,cACrC,IAAI92E,KAChB+2E,YAAY,GACZA,YAAY,GACZA,YAAY,IACdrlD,WAEFquC,gBAAgB2B,QAAQ5B,iBAAkB,EAC1C4B,OAAOxB,UAAW,GACX,GAMnB,SAAS8W,gBAAgBC,UAAWC,eAAgBC,WAChD,GAAIF,UACA,OAAO/B,WAAW+B,WACf,GAAIC,eAEP,OAAO,EAEP,IAAIE,GAAK/2D,SAAS82D,UAAW,IACzB7zE,EAAI8zE,GAAK,IAEb,OADSA,GAAK9zE,GAAK,IACR,GAAKA,EAKxB,SAAS+zE,kBAAkB3V,QACvB,IACI4V,YADA9kE,MAAQqtD,QAAQ7/C,KAAK42D,kBAAkBlV,OAAO/jE,KAElD,GAAI6U,MAAO,CASP,GARA8kE,YAAclB,0BACV5jE,MAAM,GACNA,MAAM,GACNA,MAAM,GACNA,MAAM,GACNA,MAAM,GACNA,MAAM,KAELqkE,aAAarkE,MAAM,GAAI8kE,YAAa5V,QACrC,OAGJA,OAAO+I,GAAK6M,YACZ5V,OAAOL,KAAO2V,gBAAgBxkE,MAAM,GAAIA,MAAM,GAAIA,MAAM,KAExDkvD,OAAOjkE,GAAKswE,cAAchzE,MAAM,KAAM2mE,OAAO+I,IAC7C/I,OAAOjkE,GAAG81B,cAAcmuC,OAAOjkE,GAAG00B,gBAAkBuvC,OAAOL,MAE3DtB,gBAAgB2B,QAAQ7B,SAAU,OAElC6B,OAAOxB,UAAW,EAK1B,SAASqX,iBAAiB7V,QACtB,IAAIuI,QAAUgL,gBAAgBj1D,KAAK0hD,OAAO/jE,IAC1B,OAAZssE,SAKJ4L,cAAcnU,SACU,IAApBA,OAAOxB,kBACAwB,OAAOxB,SAKlBmX,kBAAkB3V,SACM,IAApBA,OAAOxB,kBACAwB,OAAOxB,SAKdwB,OAAOnB,QACPmB,OAAOxB,UAAW,EAGlBlC,MAAMwZ,wBAAwB9V,WAtB9BA,OAAOjkE,GAAK,IAAIuC,MAAMiqE,QAAQ,IAoCtC,SAASwN,SAASv2E,EAAGC,EAAGkB,GACpB,OAAS,MAALnB,EACOA,EAEF,MAALC,EACOA,EAEJkB,EAGX,SAASq1E,iBAAiBhW,QAEtB,IAAIiW,SAAW,IAAI33E,KAAKg+D,MAAM/9D,OAC9B,OAAIyhE,OAAOkW,QACA,CACHD,SAAS9lD,iBACT8lD,SAAStlD,cACTslD,SAASlmD,cAGV,CAACkmD,SAAS/lD,cAAe+lD,SAASvlD,WAAYulD,SAASnmD,WAOlE,SAASqmD,gBAAgBnW,QACrB,IAAIloE,EACAu6B,KAEA+jD,YACAC,gBACAC,UAHA/mC,MAAQ,GAKZ,IAAIywB,OAAOjkE,GAAX,CAgCA,IA5BAq6E,YAAcJ,iBAAiBhW,QAG3BA,OAAO6I,IAAyB,MAAnB7I,OAAO+I,GAAGG,OAAqC,MAApBlJ,OAAO+I,GAAGE,QAClDsN,sBAAsBvW,QAID,MAArBA,OAAOwW,aACPF,UAAYP,SAAS/V,OAAO+I,GAAGC,MAAOoN,YAAYpN,QAG9ChJ,OAAOwW,WAAazK,WAAWuK,YACT,IAAtBtW,OAAOwW,cAEPnY,gBAAgB2B,QAAQ+S,oBAAqB,GAGjD1gD,KAAOg6C,cAAciK,UAAW,EAAGtW,OAAOwW,YAC1CxW,OAAO+I,GAAGE,OAAS52C,KAAK1B,cACxBqvC,OAAO+I,GAAGG,MAAQ72C,KAAKtC,cAQtBj4B,EAAI,EAAGA,EAAI,GAAqB,MAAhBkoE,OAAO+I,GAAGjxE,KAAcA,EACzCkoE,OAAO+I,GAAGjxE,GAAKy3C,MAAMz3C,GAAKs+E,YAAYt+E,GAI1C,KAAOA,EAAI,EAAGA,IACVkoE,OAAO+I,GAAGjxE,GAAKy3C,MAAMz3C,GACD,MAAhBkoE,OAAO+I,GAAGjxE,GAAoB,IAANA,EAAU,EAAI,EAAKkoE,OAAO+I,GAAGjxE,GAKrC,KAApBkoE,OAAO+I,GAAGI,OACY,IAAtBnJ,OAAO+I,GAAGK,SACY,IAAtBpJ,OAAO+I,GAAGM,SACiB,IAA3BrJ,OAAO+I,GAAGO,eAEVtJ,OAAOyW,UAAW,EAClBzW,OAAO+I,GAAGI,MAAQ,GAGtBnJ,OAAOjkE,IAAMikE,OAAOkW,QAAU7J,cAAgBF,YAAY9yE,MACtD,KACAk2C,OAEJ8mC,gBAAkBrW,OAAOkW,QACnBlW,OAAOjkE,GAAGk0B,YACV+vC,OAAOjkE,GAAGi0B,SAIG,MAAfgwC,OAAOL,MACPK,OAAOjkE,GAAG81B,cAAcmuC,OAAOjkE,GAAG00B,gBAAkBuvC,OAAOL,MAG3DK,OAAOyW,WACPzW,OAAO+I,GAAGI,MAAQ,IAKlBnJ,OAAO6I,SACgB,IAAhB7I,OAAO6I,GAAGlnE,GACjBq+D,OAAO6I,GAAGlnE,IAAM00E,kBAEhBhY,gBAAgB2B,QAAQ5B,iBAAkB,IAIlD,SAASmY,sBAAsBvW,QAC3B,IAAItuD,EAAGglE,SAAUl/C,KAAMm1C,QAASJ,IAAKC,IAAKmK,KAAMC,gBAAiBC,QAGrD,OADZnlE,EAAIsuD,OAAO6I,IACLiO,IAAqB,MAAPplE,EAAE4iB,GAAoB,MAAP5iB,EAAEqlE,GACjCxK,IAAM,EACNC,IAAM,EAMNkK,SAAWX,SACPrkE,EAAEolE,GACF9W,OAAO+I,GAAGC,MACVrxC,WAAWq/C,cAAe,EAAG,GAAG5/C,MAEpCI,KAAOu+C,SAASrkE,EAAE4iB,EAAG,KACrBq4C,QAAUoJ,SAASrkE,EAAEqlE,EAAG,IACV,GAAKpK,QAAU,KACzBiK,iBAAkB,KAGtBrK,IAAMvM,OAAOF,QAAQqN,MAAMZ,IAC3BC,IAAMxM,OAAOF,QAAQqN,MAAMX,IAE3BqK,QAAUl/C,WAAWq/C,cAAezK,IAAKC,KAEzCkK,SAAWX,SAASrkE,EAAEulE,GAAIjX,OAAO+I,GAAGC,MAAO6N,QAAQz/C,MAGnDI,KAAOu+C,SAASrkE,EAAEA,EAAGmlE,QAAQr/C,MAElB,MAAP9lB,EAAE/P,IAEFgrE,QAAUj7D,EAAE/P,GACE,GAAKgrE,QAAU,KACzBiK,iBAAkB,GAER,MAAPllE,EAAEzW,GAET0xE,QAAUj7D,EAAEzW,EAAIsxE,KACZ76D,EAAEzW,EAAI,GAAKyW,EAAEzW,EAAI,KACjB27E,iBAAkB,IAItBjK,QAAUJ,KAGd/0C,KAAO,GAAKA,KAAOw1C,YAAY0J,SAAUnK,IAAKC,KAC9CnO,gBAAgB2B,QAAQgT,gBAAiB,EACf,MAAnB4D,gBACPvY,gBAAgB2B,QAAQiT,kBAAmB,GAE3C0D,KAAOjK,mBAAmBgK,SAAUl/C,KAAMm1C,QAASJ,IAAKC,KACxDxM,OAAO+I,GAAGC,MAAQ2N,KAAKv/C,KACvB4oC,OAAOwW,WAAaG,KAAKlhD,WAWjC,SAASg/C,0BAA0BzU,QAE/B,GAAIA,OAAOP,KAAOnD,MAAM4a,SAIxB,GAAIlX,OAAOP,KAAOnD,MAAM6a,SAAxB,CAIAnX,OAAO+I,GAAK,GACZ1K,gBAAgB2B,QAAQj6D,OAAQ,EAGhC,IACIjO,EACAu9E,YACA5M,OACAn9C,MACAwvC,QAGAmD,IACA0K,SATA70C,OAAS,GAAKksC,OAAO/jE,GAMrBm7E,aAAetjD,OAAOj8B,OACtBw/E,uBAAyB,EAO7B,IADA1O,UAFAF,OACIxF,aAAajD,OAAOP,GAAIO,OAAOF,SAAShvD,MAAMwxD,mBAAqB,IACrDzqE,OACbC,EAAI,EAAGA,EAAI6wE,SAAU7wE,IACtBwzB,MAAQm9C,OAAO3wE,IACfu9E,aAAevhD,OAAOhjB,MAAMs3D,sBAAsB98C,MAAO00C,UACrD,IAAI,OAEJlF,QAAUhnC,OAAOuuC,OAAO,EAAGvuC,OAAOpsB,QAAQ2tE,eAC9Bx9E,OAAS,GACjBwmE,gBAAgB2B,QAAQxC,YAAYthE,KAAK4+D,SAE7ChnC,OAASA,OAAO92B,MACZ82B,OAAOpsB,QAAQ2tE,aAAeA,YAAYx9E,QAE9Cw/E,wBAA0BhC,YAAYx9E,QAGtC4qE,qBAAqBn3C,QACjB+pD,YACAhX,gBAAgB2B,QAAQj6D,OAAQ,EAEhCs4D,gBAAgB2B,QAAQzC,aAAarhE,KAAKovB,OAE9Cw9C,wBAAwBx9C,MAAO+pD,YAAarV,SACrCA,OAAOnB,UAAYwW,aAC1BhX,gBAAgB2B,QAAQzC,aAAarhE,KAAKovB,OAKlD+yC,gBAAgB2B,QAAQtC,cACpB0Z,aAAeC,uBACfvjD,OAAOj8B,OAAS,GAChBwmE,gBAAgB2B,QAAQxC,YAAYthE,KAAK43B,QAKzCksC,OAAO+I,GAAGI,OAAS,KACiB,IAApC9K,gBAAgB2B,QAAQlB,SACxBkB,OAAO+I,GAAGI,MAAQ,IAElB9K,gBAAgB2B,QAAQlB,aAAUvlE,GAGtC8kE,gBAAgB2B,QAAQhC,gBAAkBgC,OAAO+I,GAAG/rE,MAAM,GAC1DqhE,gBAAgB2B,QAAQ9B,SAAW8B,OAAO+Q,UAE1C/Q,OAAO+I,GAAGI,MAAQmO,gBACdtX,OAAOF,QACPE,OAAO+I,GAAGI,MACVnJ,OAAO+Q,WAKC,QADZ9S,IAAMI,gBAAgB2B,QAAQ/B,OAE1B+B,OAAO+I,GAAGC,MAAQhJ,OAAOF,QAAQyX,gBAAgBtZ,IAAK+B,OAAO+I,GAAGC,QAGpEmN,gBAAgBnW,QAChB8S,cAAc9S,aAhFV2V,kBAAkB3V,aAJlBmU,cAAcnU,QAuFtB,SAASsX,gBAAgBnqD,OAAQiuC,KAAM8C,UACnC,IAAIsZ,KAEJ,OAAgB,MAAZtZ,SAEO9C,KAEgB,MAAvBjuC,OAAOsqD,aACAtqD,OAAOsqD,aAAarc,KAAM8C,UACX,MAAf/wC,OAAO2jD,OAEd0G,KAAOrqD,OAAO2jD,KAAK5S,YACP9C,KAAO,KACfA,MAAQ,IAEPoc,MAAiB,KAATpc,OACTA,KAAO,GAEJA,MAGAA,KAKf,SAASsc,yBAAyB1X,QAC9B,IAAI2X,WACAC,WACAC,YACA//E,EACAggF,aACAC,iBACAC,mBAAoB,EACpBC,WAAajY,OAAOP,GAAG5nE,OAE3B,GAAmB,IAAfogF,WAGA,OAFA5Z,gBAAgB2B,QAAQlC,eAAgB,OACxCkC,OAAOjkE,GAAK,IAAIuC,KAAKoB,MAIzB,IAAK5H,EAAI,EAAGA,EAAImgF,WAAYngF,IACxBggF,aAAe,EACfC,kBAAmB,EACnBJ,WAAavY,WAAW,GAAIY,QACN,MAAlBA,OAAOkW,UACPyB,WAAWzB,QAAUlW,OAAOkW,SAEhCyB,WAAWlY,GAAKO,OAAOP,GAAG3nE,GAC1B28E,0BAA0BkD,YAEtBpZ,QAAQoZ,cACRI,kBAAmB,GAIvBD,cAAgBzZ,gBAAgBsZ,YAAYja,cAG5Coa,cAAkE,GAAlDzZ,gBAAgBsZ,YAAYpa,aAAa1lE,OAEzDwmE,gBAAgBsZ,YAAY3tB,MAAQ8tB,aAE/BE,kBAaGF,aAAeD,cACfA,YAAcC,aACdF,WAAaD,aAbE,MAAfE,aACAC,aAAeD,aACfE,oBAEAF,YAAcC,aACdF,WAAaD,WACTI,mBACAC,mBAAoB,IAWpC9a,OAAO8C,OAAQ4X,YAAcD,YAGjC,SAASO,iBAAiBlY,QACtB,IAAIA,OAAOjkE,GAAX,CAIA,IAAIjE,EAAI2tE,qBAAqBzF,OAAO/jE,IAChCk8E,eAAsB5+E,IAAVzB,EAAEu/B,IAAoBv/B,EAAEu6B,KAAOv6B,EAAEu/B,IACjD2oC,OAAO+I,GAAK3lE,IACR,CAACtL,EAAEs/B,KAAMt/B,EAAEyjE,MAAO4c,UAAWrgF,EAAEsjE,KAAMtjE,EAAEojE,OAAQpjE,EAAEkjE,OAAQljE,EAAEsgF,cAC3D,SAAUzb,KACN,OAAOA,KAAOh+C,SAASg+C,IAAK,OAIpCwZ,gBAAgBnW,SAGpB,SAASqY,iBAAiBrY,QACtB,IAAIhD,IAAM,IAAI+C,OAAO+S,cAAcwF,cAActY,UAOjD,OANIhD,IAAIyZ,WAEJzZ,IAAIp2D,IAAI,EAAG,KACXo2D,IAAIyZ,cAAWl9E,GAGZyjE,IAGX,SAASsb,cAActY,QACnB,IAAIzwB,MAAQywB,OAAO/jE,GACfoiB,OAAS2hD,OAAOP,GAIpB,OAFAO,OAAOF,QAAUE,OAAOF,SAAWyS,UAAUvS,OAAON,IAEtC,OAAVnwB,YAA8Bh2C,IAAX8kB,QAAkC,KAAVkxB,MACpCyvB,cAAc,CAAErB,WAAW,KAGjB,iBAAVpuB,QACPywB,OAAO/jE,GAAKszC,MAAQywB,OAAOF,QAAQyY,SAAShpC,QAG5C2wB,SAAS3wB,OACF,IAAIwwB,OAAO+S,cAAcvjC,SACzBwtB,OAAOxtB,OACdywB,OAAOjkE,GAAKwzC,MACL10C,QAAQwjB,QACfq5D,yBAAyB1X,QAClB3hD,OACPo2D,0BAA0BzU,QAE1BwY,gBAAgBxY,QAGfzB,QAAQyB,UACTA,OAAOjkE,GAAK,MAGTikE,SAGX,SAASwY,gBAAgBxY,QACrB,IAAIzwB,MAAQywB,OAAO/jE,GACf4gE,YAAYttB,OACZywB,OAAOjkE,GAAK,IAAIuC,KAAKg+D,MAAM/9D,OACpBw+D,OAAOxtB,OACdywB,OAAOjkE,GAAK,IAAIuC,KAAKixC,MAAMve,WACH,iBAAVue,MACdsmC,iBAAiB7V,QACVnlE,QAAQ00C,QACfywB,OAAO+I,GAAK3lE,IAAImsC,MAAMvyC,MAAM,IAAI,SAAU2/D,KACtC,OAAOh+C,SAASg+C,IAAK,OAEzBwZ,gBAAgBnW,SACTxD,SAASjtB,OAChB2oC,iBAAiBlY,QACVlD,SAASvtB,OAEhBywB,OAAOjkE,GAAK,IAAIuC,KAAKixC,OAErB+sB,MAAMwZ,wBAAwB9V,QAItC,SAAS3C,iBAAiB9tB,MAAOlxB,OAAQ8O,OAAQiwC,OAAQqb,OACrD,IAAI93E,EAAI,GA2BR,OAzBe,IAAX0d,SAA8B,IAAXA,SACnB++C,OAAS/+C,OACTA,YAAS9kB,IAGE,IAAX4zB,SAA8B,IAAXA,SACnBiwC,OAASjwC,OACTA,YAAS5zB,IAIRijE,SAASjtB,QAAUmtB,cAAcntB,QACjC10C,QAAQ00C,QAA2B,IAAjBA,MAAM13C,UAEzB03C,WAAQh2C,GAIZoH,EAAE6+D,kBAAmB,EACrB7+D,EAAEu1E,QAAUv1E,EAAEi/D,OAAS6Y,MACvB93E,EAAE++D,GAAKvyC,OACPxsB,EAAE1E,GAAKszC,MACP5uC,EAAE8+D,GAAKphD,OACP1d,EAAEk+D,QAAUzB,OAELib,iBAAiB13E,GAG5B,SAASq2E,YAAYznC,MAAOlxB,OAAQ8O,OAAQiwC,QACxC,OAAOC,iBAAiB9tB,MAAOlxB,OAAQ8O,OAAQiwC,QAAQ,GAve3Dd,MAAMwZ,wBAA0BvV,UAC5B,iSAGA,SAAUP,QACNA,OAAOjkE,GAAK,IAAIuC,KAAK0hE,OAAO/jE,IAAM+jE,OAAOkW,QAAU,OAAS,QAuLpE5Z,MAAM4a,SAAW,aAGjB5a,MAAM6a,SAAW,aA2SjB,IAAIuB,aAAenY,UACX,sGACA,WACI,IAAI3hC,MAAQo4C,YAAY39E,MAAM,KAAMD,WACpC,OAAIF,KAAKqlE,WAAa3/B,MAAM2/B,UACjB3/B,MAAQ1lC,KAAOA,KAAO0lC,MAEtBogC,mBAInB2Z,aAAepY,UACX,sGACA,WACI,IAAI3hC,MAAQo4C,YAAY39E,MAAM,KAAMD,WACpC,OAAIF,KAAKqlE,WAAa3/B,MAAM2/B,UACjB3/B,MAAQ1lC,KAAOA,KAAO0lC,MAEtBogC,mBAUvB,SAAS4Z,OAAO5/E,GAAI6/E,SAChB,IAAI7b,IAAKllE,EAIT,GAHuB,IAAnB+gF,QAAQhhF,QAAgBgD,QAAQg+E,QAAQ,MACxCA,QAAUA,QAAQ,KAEjBA,QAAQhhF,OACT,OAAOm/E,cAGX,IADAha,IAAM6b,QAAQ,GACT/gF,EAAI,EAAGA,EAAI+gF,QAAQhhF,SAAUC,EACzB+gF,QAAQ/gF,GAAGymE,YAAasa,QAAQ/gF,GAAGkB,IAAIgkE,OACxCA,IAAM6b,QAAQ/gF,IAGtB,OAAOklE,IAIX,SAASx8D,MAGL,OAAOo4E,OAAO,WAFH,GAAG57E,MAAMD,KAAK3D,UAAW,IAKxC,SAASqH,MAGL,OAAOm4E,OAAO,UAFH,GAAG57E,MAAMD,KAAK3D,UAAW,IAKxC,IAAImF,IAAM,WACN,OAAOD,KAAKC,IAAMD,KAAKC,OAAS,IAAID,MAGpCw6E,SAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAGJ,SAASC,gBAAgBn3E,GACrB,IAAIrJ,IAEAT,EADAkhF,gBAAiB,EAEjBC,SAAWH,SAASjhF,OACxB,IAAKU,OAAOqJ,EACR,GACI66D,WAAW76D,EAAGrJ,QAEuB,IAAjCmP,QAAQ3K,KAAK+7E,SAAUvgF,MACZ,MAAVqJ,EAAErJ,MAAiBuH,MAAM8B,EAAErJ,OAGhC,OAAO,EAIf,IAAKT,EAAI,EAAGA,EAAImhF,WAAYnhF,EACxB,GAAI8J,EAAEk3E,SAAShhF,IAAK,CAChB,GAAIkhF,eACA,OAAO,EAEPx6D,WAAW5c,EAAEk3E,SAAShhF,OAASquE,MAAMvkE,EAAEk3E,SAAShhF,OAChDkhF,gBAAiB,GAK7B,OAAO,EAGX,SAASE,YACL,OAAOhgF,KAAKslE,SAGhB,SAAS2a,kBACL,OAAOC,eAAe15E,KAG1B,SAAS25E,SAAS3hE,UACd,IAAIkuD,gBAAkBH,qBAAqB/tD,UACvC4f,MAAQsuC,gBAAgBxuC,MAAQ,EAChCkiD,SAAW1T,gBAAgB2T,SAAW,EACtC9lD,OAASmyC,gBAAgBrK,OAAS,EAClC7jC,MAAQkuC,gBAAgBpuC,MAAQouC,gBAAgB4T,SAAW,EAC3DnmD,KAAOuyC,gBAAgBvuC,KAAO,EAC9BikC,MAAQsK,gBAAgBxK,MAAQ,EAChCD,QAAUyK,gBAAgB1K,QAAU,EACpCD,QAAU2K,gBAAgB5K,QAAU,EACpCye,aAAe7T,gBAAgBwS,aAAe,EAElDl/E,KAAKslE,SAAWua,gBAAgBnT,iBAGhC1sE,KAAKwgF,eACAD,aACS,IAAVxe,QACU,IAAVE,QACQ,IAARG,MAAe,GAAK,GAGxBpiE,KAAKygF,OAAStmD,KAAe,EAARqE,MAIrBx+B,KAAKmxE,SAAW52C,OAAoB,EAAX6lD,SAAuB,GAARhiD,MAExCp+B,KAAK0gF,MAAQ,GAEb1gF,KAAK4mE,QAAUyS,YAEfr5E,KAAK2gF,UAGT,SAASC,WAAWnd,KAChB,OAAOA,eAAe0c,SAG1B,SAASU,SAAS3nD,QACd,OAAIA,OAAS,GACyB,EAA3BhxB,KAAKwb,OAAO,EAAIwV,QAEhBhxB,KAAKwb,MAAMwV,QAK1B,SAAS4nD,cAAcC,OAAQC,OAAQC,aACnC,IAGIriF,EAHAF,IAAMwJ,KAAKZ,IAAIy5E,OAAOpiF,OAAQqiF,OAAOriF,QACrCuiF,WAAah5E,KAAKqC,IAAIw2E,OAAOpiF,OAASqiF,OAAOriF,QAC7CwiF,MAAQ,EAEZ,IAAKviF,EAAI,EAAGA,EAAIF,IAAKE,KAEZqiF,aAAeF,OAAOniF,KAAOoiF,OAAOpiF,KACnCqiF,aAAehU,MAAM8T,OAAOniF,MAAQquE,MAAM+T,OAAOpiF,MAEnDuiF,QAGR,OAAOA,MAAQD,WAKnB,SAAS7nD,OAAOjH,MAAOgvD,WACnB5X,eAAep3C,MAAO,EAAG,GAAG,WACxB,IAAIiH,OAASr5B,KAAKqhF,YACdnsD,KAAO,IAKX,OAJImE,OAAS,IACTA,QAAUA,OACVnE,KAAO,KAGPA,KACA4zC,YAAYzvC,OAAS,IAAK,GAC1B+nD,UACAtY,WAAWzvC,OAAS,GAAI,MAKpCA,OAAO,IAAK,KACZA,OAAO,KAAM,IAIby1C,cAAc,IAAKH,kBACnBG,cAAc,KAAMH,kBACpBa,cAAc,CAAC,IAAK,OAAO,SAAUn5B,MAAOlxC,MAAO2hE,QAC/CA,OAAOkW,SAAU,EACjBlW,OAAOL,KAAO6a,iBAAiB3S,iBAAkBt4B,UAQrD,IAAIkrC,YAAc,kBAElB,SAASD,iBAAiBE,QAAS5mD,QAC/B,IAEI6mD,MACAxf,QAHA5xD,SAAWuqB,QAAU,IAAIhjB,MAAM4pE,SAKnC,OAAgB,OAAZnxE,QACO,KAOQ,KAFnB4xD,QAAuB,IADvBwf,QADQpxE,QAAQA,QAAQ1R,OAAS,IAAM,IACtB,IAAIiZ,MAAM2pE,cAAgB,CAAC,IAAK,EAAG,IAClC,GAAWtU,MAAMwU,MAAM,KAElB,EAAiB,MAAbA,MAAM,GAAaxf,SAAWA,QAI7D,SAASyf,gBAAgBrrC,MAAOsrC,OAC5B,IAAI7d,IAAKkI,KACT,OAAI2V,MAAMjb,QACN5C,IAAM6d,MAAMC,QACZ5V,MACKhF,SAAS3wB,QAAUwtB,OAAOxtB,OACrBA,MAAMve,UACNgmD,YAAYznC,OAAOve,WAAagsC,IAAIhsC,UAE9CgsC,IAAIjhE,GAAGm2B,QAAQ8qC,IAAIjhE,GAAGi1B,UAAYk0C,MAClC5I,MAAM2D,aAAajD,KAAK,GACjBA,KAEAga,YAAYznC,OAAOlwC,QAIlC,SAAS07E,cAAcn5E,GAGnB,OAAQR,KAAKwb,MAAMhb,EAAE7F,GAAGg1B,qBAqB5B,SAASiqD,aAAazrC,MAAO0rC,cAAeC,aACxC,IACIC,YADA5oD,OAASr5B,KAAK2mE,SAAW,EAE7B,IAAK3mE,KAAKqlE,UACN,OAAgB,MAAThvB,MAAgBr2C,KAAOwG,IAElC,GAAa,MAAT6vC,MAAe,CACf,GAAqB,iBAAVA,OAEP,GAAc,QADdA,MAAQirC,iBAAiB3S,iBAAkBt4B,QAEvC,OAAOr2C,UAEJkI,KAAKqC,IAAI8rC,OAAS,KAAO2rC,cAChC3rC,OAAgB,IAwBpB,OAtBKr2C,KAAK0mE,QAAUqb,gBAChBE,YAAcJ,cAAc7hF,OAEhCA,KAAK2mE,QAAUtwB,MACfr2C,KAAK0mE,QAAS,EACK,MAAfub,aACAjiF,KAAK0N,IAAIu0E,YAAa,KAEtB5oD,SAAWgd,SACN0rC,eAAiB/hF,KAAKkiF,kBACvBC,YACIniF,KACAkgF,eAAe7pC,MAAQhd,OAAQ,KAC/B,GACA,GAEIr5B,KAAKkiF,oBACbliF,KAAKkiF,mBAAoB,EACzB9e,MAAM2D,aAAa/mE,MAAM,GACzBA,KAAKkiF,kBAAoB,OAG1BliF,KAEP,OAAOA,KAAK0mE,OAASrtC,OAASwoD,cAAc7hF,MAIpD,SAASoiF,WAAW/rC,MAAO0rC,eACvB,OAAa,MAAT1rC,OACqB,iBAAVA,QACPA,OAASA,OAGbr2C,KAAKqhF,UAAUhrC,MAAO0rC,eAEf/hF,OAECA,KAAKqhF,YAIrB,SAASgB,eAAeN,eACpB,OAAO/hF,KAAKqhF,UAAU,EAAGU,eAG7B,SAASO,iBAAiBP,eAStB,OARI/hF,KAAK0mE,SACL1mE,KAAKqhF,UAAU,EAAGU,eAClB/hF,KAAK0mE,QAAS,EAEVqb,eACA/hF,KAAKuiF,SAASV,cAAc7hF,MAAO,MAGpCA,KAGX,SAASwiF,0BACL,GAAiB,MAAbxiF,KAAKymE,KACLzmE,KAAKqhF,UAAUrhF,KAAKymE,MAAM,GAAO,QAC9B,GAAuB,iBAAZzmE,KAAK+C,GAAiB,CACpC,IAAI0/E,MAAQnB,iBAAiB5S,YAAa1uE,KAAK+C,IAClC,MAAT0/E,MACAziF,KAAKqhF,UAAUoB,OAEfziF,KAAKqhF,UAAU,GAAG,GAG1B,OAAOrhF,KAGX,SAAS0iF,qBAAqBrsC,OAC1B,QAAKr2C,KAAKqlE,YAGVhvB,MAAQA,MAAQynC,YAAYznC,OAAOgrC,YAAc,GAEzCrhF,KAAKqhF,YAAchrC,OAAS,IAAO,GAG/C,SAASssC,uBACL,OACI3iF,KAAKqhF,YAAcrhF,KAAK4hF,QAAQvf,MAAM,GAAGgf,aACzCrhF,KAAKqhF,YAAcrhF,KAAK4hF,QAAQvf,MAAM,GAAGgf,YAIjD,SAASuB,8BACL,IAAKjf,YAAY3jE,KAAK6iF,eAClB,OAAO7iF,KAAK6iF,cAGhB,IACIn9C,MADAj+B,EAAI,GAcR,OAXAy+D,WAAWz+D,EAAGzH,OACdyH,EAAI23E,cAAc33E,IAEZooE,IACFnqC,MAAQj+B,EAAEi/D,OAASzC,UAAUx8D,EAAEooE,IAAMiO,YAAYr2E,EAAEooE,IACnD7vE,KAAK6iF,cACD7iF,KAAKqlE,WAAayb,cAAcr5E,EAAEooE,GAAInqC,MAAMo9C,WAAa,GAE7D9iF,KAAK6iF,eAAgB,EAGlB7iF,KAAK6iF,cAGhB,SAASE,UACL,QAAO/iF,KAAKqlE,YAAarlE,KAAK0mE,OAGlC,SAASsc,cACL,QAAOhjF,KAAKqlE,WAAYrlE,KAAK0mE,OAGjC,SAASuc,QACL,QAAOjjF,KAAKqlE,WAAYrlE,KAAK0mE,QAA2B,IAAjB1mE,KAAK2mE,QApJhDvD,MAAM2D,aAAe,aAwJrB,IAAImc,YAAc,wDAIdC,SACI,sKAER,SAASjD,eAAe7pC,MAAOh3C,KAC3B,IAGI61B,KACAkuD,IACAC,QALA7kE,SAAW63B,MAEXz+B,MAAQ,KAkEZ,OA7DIgpE,WAAWvqC,OACX73B,SAAW,CACP00D,GAAI78B,MAAMmqC,cACV/3E,EAAG4tC,MAAMoqC,MACT1lD,EAAGsb,MAAM86B,SAENvN,SAASvtB,SAAWzvC,OAAOyvC,QAClC73B,SAAW,GACPnf,IACAmf,SAASnf,MAAQg3C,MAEjB73B,SAAS+hE,cAAgBlqC,QAErBz+B,MAAQsrE,YAAY99D,KAAKixB,SACjCnhB,KAAoB,MAAbtd,MAAM,IAAc,EAAI,EAC/B4G,SAAW,CACPvE,EAAG,EACHxR,EAAGwkE,MAAMr1D,MAAMo4D,OAAS96C,KACxBjtB,EAAGglE,MAAMr1D,MAAMq4D,OAAS/6C,KACxBxsB,EAAGukE,MAAMr1D,MAAMs4D,SAAWh7C,KAC1BrzB,EAAGorE,MAAMr1D,MAAMu4D,SAAWj7C,KAC1Bg+C,GAAIjG,MAAM4T,SAA8B,IAArBjpE,MAAMw4D,eAAwBl7C,QAE7Ctd,MAAQurE,SAAS/9D,KAAKixB,SAC9BnhB,KAAoB,MAAbtd,MAAM,IAAc,EAAI,EAC/B4G,SAAW,CACPvE,EAAGqpE,SAAS1rE,MAAM,GAAIsd,MACtB6F,EAAGuoD,SAAS1rE,MAAM,GAAIsd,MACtB1c,EAAG8qE,SAAS1rE,MAAM,GAAIsd,MACtBzsB,EAAG66E,SAAS1rE,MAAM,GAAIsd,MACtBjtB,EAAGq7E,SAAS1rE,MAAM,GAAIsd,MACtBxsB,EAAG46E,SAAS1rE,MAAM,GAAIsd,MACtBrzB,EAAGyhF,SAAS1rE,MAAM,GAAIsd,QAEP,MAAZ1W,SAEPA,SAAW,GAES,iBAAbA,WACN,SAAUA,UAAY,OAAQA,YAE/B6kE,QAAUE,kBACNzF,YAAYt/D,SAAShb,MACrBs6E,YAAYt/D,SAASwpB,MAGzBxpB,SAAW,IACF00D,GAAKmQ,QAAQ9C,aACtB/hE,SAASuc,EAAIsoD,QAAQ9oD,QAGzB6oD,IAAM,IAAIjD,SAAS3hE,UAEfoiE,WAAWvqC,QAAUktB,WAAWltB,MAAO,aACvC+sC,IAAIxc,QAAUvwB,MAAMuwB,SAGpBga,WAAWvqC,QAAUktB,WAAWltB,MAAO,cACvC+sC,IAAI9d,SAAWjvB,MAAMivB,UAGlB8d,IAMX,SAASE,SAASE,IAAKtuD,MAInB,IAAI4uC,IAAM0f,KAAOl+D,WAAWk+D,IAAIj0E,QAAQ,IAAK,MAE7C,OAAQ3I,MAAMk9D,KAAO,EAAIA,KAAO5uC,KAGpC,SAASuuD,0BAA0BhxB,KAAM/sB,OACrC,IAAIo+B,IAAM,GAUV,OARAA,IAAIvpC,OACAmL,MAAM28B,QAAU5P,KAAK4P,QAAyC,IAA9B38B,MAAMxH,OAASu0B,KAAKv0B,QACpDu0B,KAAKmvB,QAAQl0E,IAAIo2D,IAAIvpC,OAAQ,KAAKmpD,QAAQh+C,UACxCo+B,IAAIvpC,OAGVupC,IAAIyc,cAAgB76C,OAAS+sB,KAAKmvB,QAAQl0E,IAAIo2D,IAAIvpC,OAAQ,KAEnDupC,IAGX,SAASyf,kBAAkB9wB,KAAM/sB,OAC7B,IAAIo+B,IACJ,OAAMrR,KAAK4S,WAAa3/B,MAAM2/B,WAI9B3/B,MAAQg8C,gBAAgBh8C,MAAO+sB,MAC3BA,KAAKkxB,SAASj+C,OACdo+B,IAAM2f,0BAA0BhxB,KAAM/sB,SAEtCo+B,IAAM2f,0BAA0B/9C,MAAO+sB,OACnC8tB,cAAgBzc,IAAIyc,aACxBzc,IAAIvpC,QAAUupC,IAAIvpC,QAGfupC,KAZI,CAAEyc,aAAc,EAAGhmD,OAAQ,GAgB1C,SAASqpD,YAAY37C,UAAWjkC,MAC5B,OAAO,SAAUoiE,IAAKyd,QAClB,IAASC,IAmBT,OAjBe,OAAXD,QAAoBj9E,OAAOi9E,UAC3Bnc,gBACI1jE,KACA,YACIA,KACA,uDACAA,KAHJ,kGAOJ8/E,IAAM1d,IACNA,IAAMyd,OACNA,OAASC,KAIb3B,YAAYniF,KADNkgF,eAAe9Z,IAAKyd,QACH57C,WAChBjoC,MAIf,SAASmiF,YAAYvZ,IAAKpqD,SAAUulE,SAAUhd,cAC1C,IAAIwZ,aAAe/hE,SAASgiE,cACxBrmD,KAAO0mD,SAASriE,SAASiiE,OACzBlmD,OAASsmD,SAASriE,SAAS2yD,SAE1BvI,IAAIvD,YAKT0B,aAA+B,MAAhBA,cAA8BA,aAEzCxsC,QACA3B,SAASgwC,IAAKj8D,IAAIi8D,IAAK,SAAWruC,OAASwpD,UAE3C5pD,MACAmzC,MAAM1E,IAAK,OAAQj8D,IAAIi8D,IAAK,QAAUzuC,KAAO4pD,UAE7CxD,cACA3X,IAAI/lE,GAAGm2B,QAAQ4vC,IAAI/lE,GAAGi1B,UAAYyoD,aAAewD,UAEjDhd,cACA3D,MAAM2D,aAAa6B,IAAKzuC,MAAQI,SA5FxC2lD,eAAepgF,GAAKqgF,SAAS7+E,UAC7B4+E,eAAe8D,QAAU/D,gBA+FzB,IAAIvyE,IAAMk2E,YAAY,EAAG,OACrBrB,SAAWqB,aAAa,EAAG,YAE/B,SAASK,SAAS5tC,OACd,MAAwB,iBAAVA,OAAsBA,iBAAiBngB,OAIzD,SAASguD,cAAc7tC,OACnB,OACI2wB,SAAS3wB,QACTwtB,OAAOxtB,QACP4tC,SAAS5tC,QACTutB,SAASvtB,QACT8tC,sBAAsB9tC,QACtB+tC,oBAAoB/tC,QANjB,MAOHA,MAKR,SAAS+tC,oBAAoB/tC,OACzB,IA4BIz3C,EACA+Q,SA7BA00E,WAAa/gB,SAASjtB,SAAWmtB,cAAcntB,OAC/CiuC,cAAe,EACf15E,WAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAIJ25E,YAAc35E,WAAWjM,OAE7B,IAAKC,EAAI,EAAGA,EAAI2lF,YAAa3lF,GAAK,EAC9B+Q,SAAW/E,WAAWhM,GACtB0lF,aAAeA,cAAgB/gB,WAAWltB,MAAO1mC,UAGrD,OAAO00E,YAAcC,aAGzB,SAASH,sBAAsB9tC,OAC3B,IAAImuC,UAAY7iF,QAAQ00C,OACpBouC,cAAe,EAOnB,OANID,YACAC,aAGkB,IAFdpuC,MAAMz/B,QAAO,SAAU8tE,MACnB,OAAQ9gB,SAAS8gB,OAAST,SAAS5tC,UACpC13C,QAEJ6lF,WAAaC,aAGxB,SAASE,eAAetuC,OACpB,IAUIz3C,EACA+Q,SAXA00E,WAAa/gB,SAASjtB,SAAWmtB,cAAcntB,OAC/CiuC,cAAe,EACf15E,WAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKR,IAAKhM,EAAI,EAAGA,EAAIgM,WAAWjM,OAAQC,GAAK,EACpC+Q,SAAW/E,WAAWhM,GACtB0lF,aAAeA,cAAgB/gB,WAAWltB,MAAO1mC,UAGrD,OAAO00E,YAAcC,aAGzB,SAASM,kBAAkBC,SAAUx/E,KACjC,IAAI2mE,KAAO6Y,SAAS7Y,KAAK3mE,IAAK,QAAQ,GACtC,OAAO2mE,MAAQ,EACT,WACAA,MAAQ,EACR,WACAA,KAAO,EACP,UACAA,KAAO,EACP,UACAA,KAAO,EACP,UACAA,KAAO,EACP,WACA,WAGV,SAAS8Y,WAAW5xD,KAAM+L,SAEG,IAArB/+B,UAAUvB,SACLuB,UAAU,GAGJgkF,cAAchkF,UAAU,KAC/BgzB,KAAOhzB,UAAU,GACjB++B,aAAU5+B,GACHskF,eAAezkF,UAAU,MAChC++B,QAAU/+B,UAAU,GACpBgzB,UAAO7yB,IAPP6yB,UAAO7yB,EACP4+B,aAAU5+B,IAWlB,IAAIgF,IAAM6tB,MAAQ4qD,cACdiH,IAAMrD,gBAAgBr8E,IAAKrF,MAAMglF,QAAQ,OACzC7/D,OAASi+C,MAAM6hB,eAAejlF,KAAM+kF,MAAQ,WAC5Cr5C,OACIzM,UACC0oC,WAAW1oC,QAAQ9Z,SACd8Z,QAAQ9Z,QAAQthB,KAAK7D,KAAMqF,KAC3B45B,QAAQ9Z,SAEtB,OAAOnlB,KAAKmlB,OACRumB,QAAU1rC,KAAK2pE,aAAahB,SAASxjD,OAAQnlB,KAAM89E,YAAYz4E,OAIvE,SAASu8E,QACL,OAAO,IAAI/a,OAAO7mE,MAGtB,SAAS0jF,QAAQrtC,MAAOi2B,OACpB,IAAI4Y,WAAale,SAAS3wB,OAASA,MAAQynC,YAAYznC,OACvD,SAAMr2C,KAAKqlE,YAAa6f,WAAW7f,aAIrB,iBADdiH,MAAQD,eAAeC,QAAU,eAEtBtsE,KAAK83B,UAAYotD,WAAWptD,UAE5BotD,WAAWptD,UAAY93B,KAAK4hF,QAAQoD,QAAQ1Y,OAAOx0C,WAIlE,SAAS6rD,SAASttC,MAAOi2B,OACrB,IAAI4Y,WAAale,SAAS3wB,OAASA,MAAQynC,YAAYznC,OACvD,SAAMr2C,KAAKqlE,YAAa6f,WAAW7f,aAIrB,iBADdiH,MAAQD,eAAeC,QAAU,eAEtBtsE,KAAK83B,UAAYotD,WAAWptD,UAE5B93B,KAAK4hF,QAAQuD,MAAM7Y,OAAOx0C,UAAYotD,WAAWptD,WAIhE,SAASstD,UAAU5hF,KAAMwkC,GAAIskC,MAAO+Y,aAChC,IAAIC,UAAYte,SAASxjE,MAAQA,KAAOs6E,YAAYt6E,MAChD+hF,QAAUve,SAASh/B,IAAMA,GAAK81C,YAAY91C,IAC9C,SAAMhoC,KAAKqlE,WAAaigB,UAAUjgB,WAAakgB,QAAQlgB,aAK/B,OAFxBggB,YAAcA,aAAe,MAEZ,GACPrlF,KAAK0jF,QAAQ4B,UAAWhZ,QACvBtsE,KAAK2jF,SAAS2B,UAAWhZ,UACZ,MAAnB+Y,YAAY,GACPrlF,KAAK2jF,SAAS4B,QAASjZ,QACtBtsE,KAAK0jF,QAAQ6B,QAASjZ,QAIrC,SAASkZ,OAAOnvC,MAAOi2B,OACnB,IACImZ,QADAP,WAAale,SAAS3wB,OAASA,MAAQynC,YAAYznC,OAEvD,SAAMr2C,KAAKqlE,YAAa6f,WAAW7f,aAIrB,iBADdiH,MAAQD,eAAeC,QAAU,eAEtBtsE,KAAK83B,YAAcotD,WAAWptD,WAErC2tD,QAAUP,WAAWptD,UAEjB93B,KAAK4hF,QAAQoD,QAAQ1Y,OAAOx0C,WAAa2tD,SACzCA,SAAWzlF,KAAK4hF,QAAQuD,MAAM7Y,OAAOx0C,YAKjD,SAAS4tD,cAAcrvC,MAAOi2B,OAC1B,OAAOtsE,KAAKwlF,OAAOnvC,MAAOi2B,QAAUtsE,KAAK0jF,QAAQrtC,MAAOi2B,OAG5D,SAASqZ,eAAetvC,MAAOi2B,OAC3B,OAAOtsE,KAAKwlF,OAAOnvC,MAAOi2B,QAAUtsE,KAAK2jF,SAASttC,MAAOi2B,OAG7D,SAASN,KAAK31B,MAAOi2B,MAAOsZ,SACxB,IAAInqE,KAAMoqE,UAAWn6C,OAErB,IAAK1rC,KAAKqlE,UACN,OAAO7+D,IAKX,KAFAiV,KAAOimE,gBAAgBrrC,MAAOr2C,OAEpBqlE,UACN,OAAO7+D,IAOX,OAJAq/E,UAAoD,KAAvCpqE,KAAK4lE,YAAcrhF,KAAKqhF,aAErC/U,MAAQD,eAAeC,QAGnB,IAAK,OACD5gC,OAASo6C,UAAU9lF,KAAMyb,MAAQ,GACjC,MACJ,IAAK,QACDiwB,OAASo6C,UAAU9lF,KAAMyb,MACzB,MACJ,IAAK,UACDiwB,OAASo6C,UAAU9lF,KAAMyb,MAAQ,EACjC,MACJ,IAAK,SACDiwB,QAAU1rC,KAAOyb,MAAQ,IACzB,MACJ,IAAK,SACDiwB,QAAU1rC,KAAOyb,MAAQ,IACzB,MACJ,IAAK,OACDiwB,QAAU1rC,KAAOyb,MAAQ,KACzB,MACJ,IAAK,MACDiwB,QAAU1rC,KAAOyb,KAAOoqE,WAAa,MACrC,MACJ,IAAK,OACDn6C,QAAU1rC,KAAOyb,KAAOoqE,WAAa,OACrC,MACJ,QACIn6C,OAAS1rC,KAAOyb,KAGxB,OAAOmqE,QAAUl6C,OAASshC,SAASthC,QAGvC,SAASo6C,UAAUx/E,EAAGC,GAClB,GAAID,EAAE6yB,OAAS5yB,EAAE4yB,OAGb,OAAQ2sD,UAAUv/E,EAAGD,GAGzB,IAAIy/E,eAAyC,IAAvBx/E,EAAE23B,OAAS53B,EAAE43B,SAAgB33B,EAAE87D,QAAU/7D,EAAE+7D,SAE7D2jB,OAAS1/E,EAAEs7E,QAAQl0E,IAAIq4E,eAAgB,UAe3C,QAASA,gBAXLx/E,EAAIy/E,OAAS,GAGHz/E,EAAIy/E,SAAWA,OAFf1/E,EAAEs7E,QAAQl0E,IAAIq4E,eAAiB,EAAG,YAMlCx/E,EAAIy/E,SAFJ1/E,EAAEs7E,QAAQl0E,IAAIq4E,eAAiB,EAAG,UAETC,WAIF,EAMzC,SAASpiF,WACL,OAAO5D,KAAK4hF,QAAQ3tD,OAAO,MAAM9O,OAAO,oCAG5C,SAASk8C,YAAY4kB,YACjB,IAAKjmF,KAAKqlE,UACN,OAAO,KAEX,IAAI7rC,KAAqB,IAAfysD,WACNv9E,EAAI8wB,IAAMx5B,KAAK4hF,QAAQpoD,MAAQx5B,KACnC,OAAI0I,EAAEw1B,OAAS,GAAKx1B,EAAEw1B,OAAS,KACpB4rC,aACHphE,EACA8wB,IACM,iCACA,gCAGVmuC,WAAWviE,KAAK9D,UAAU+/D,aAEtB7nC,IACOx5B,KAAKkmF,SAAS7kB,cAEd,IAAIj8D,KAAKpF,KAAK83B,UAA+B,GAAnB93B,KAAKqhF,YAAmB,KACpDhgB,cACA9xD,QAAQ,IAAKu6D,aAAaphE,EAAG,MAGnCohE,aACHphE,EACA8wB,IAAM,+BAAiC,8BAU/C,SAAS2sD,UACL,IAAKnmF,KAAKqlE,UACN,MAAO,qBAAuBrlE,KAAK+C,GAAK,OAE5C,IAEI+R,OACAopB,KACAkoD,SACA9wD,OALAo0C,KAAO,SACP2c,KAAO,GAcX,OATKrmF,KAAK+iF,YACNrZ,KAA4B,IAArB1pE,KAAKqhF,YAAoB,aAAe,mBAC/CgF,KAAO,KAEXvxE,OAAS,IAAM40D,KAAO,MACtBxrC,KAAO,GAAKl+B,KAAKk+B,QAAUl+B,KAAKk+B,QAAU,KAAO,OAAS,SAC1DkoD,SAAW,wBACX9wD,OAAS+wD,KAAO,OAETrmF,KAAKmlB,OAAOrQ,OAASopB,KAAOkoD,SAAW9wD,QAGlD,SAASnQ,OAAOmhE,aACPA,cACDA,YAActmF,KAAKijF,QACb7f,MAAMmjB,iBACNnjB,MAAMojB,eAEhB,IAAI96C,OAASo+B,aAAa9pE,KAAMsmF,aAChC,OAAOtmF,KAAK2pE,aAAa8c,WAAW/6C,QAGxC,SAASloC,KAAK0vB,KAAM04C,eAChB,OACI5rE,KAAKqlE,YACH2B,SAAS9zC,OAASA,KAAKmyC,WAAcyY,YAAY5qD,MAAMmyC,WAElD6a,eAAe,CAAEl4C,GAAIhoC,KAAMwD,KAAM0vB,OACnCe,OAAOj0B,KAAKi0B,UACZyyD,UAAU9a,eAER5rE,KAAK2pE,aAAaK,cAIjC,SAAS2c,QAAQ/a,eACb,OAAO5rE,KAAKwD,KAAKs6E,cAAelS,eAGpC,SAAS5jC,GAAG9U,KAAM04C,eACd,OACI5rE,KAAKqlE,YACH2B,SAAS9zC,OAASA,KAAKmyC,WAAcyY,YAAY5qD,MAAMmyC,WAElD6a,eAAe,CAAE18E,KAAMxD,KAAMgoC,GAAI9U,OACnCe,OAAOj0B,KAAKi0B,UACZyyD,UAAU9a,eAER5rE,KAAK2pE,aAAaK,cAIjC,SAAS4c,MAAMhb,eACX,OAAO5rE,KAAKgoC,GAAG81C,cAAelS,eAMlC,SAAS33C,OAAO50B,KACZ,IAAIwnF,cAEJ,YAAYxmF,IAARhB,IACOW,KAAK4mE,QAAQuS,OAGC,OADrB0N,cAAgBxN,UAAUh6E,QAEtBW,KAAK4mE,QAAUigB,eAEZ7mF,MA1HfojE,MAAMojB,cAAgB,uBACtBpjB,MAAMmjB,iBAAmB,yBA6HzB,IAAIO,KAAOzf,UACP,mJACA,SAAUhoE,KACN,YAAYgB,IAARhB,IACOW,KAAK2pE,aAEL3pE,KAAKi0B,OAAO50B,QAK/B,SAASsqE,aACL,OAAO3pE,KAAK4mE,QAGhB,IAAImgB,cAAgB,IAChBC,cAAgB,GAAKD,cACrBE,YAAc,GAAKD,cACnBE,iBAAmB,QAAwBD,YAG/C,SAASE,MAAMC,SAAUC,SACrB,OAASD,SAAWC,QAAWA,SAAWA,QAG9C,SAASC,iBAAiBrtE,EAAGvR,EAAGD,GAE5B,OAAIwR,EAAI,KAAOA,GAAK,EAET,IAAI7U,KAAK6U,EAAI,IAAKvR,EAAGD,GAAKy+E,iBAE1B,IAAI9hF,KAAK6U,EAAGvR,EAAGD,GAAGqvB,UAIjC,SAASyvD,eAAettE,EAAGvR,EAAGD,GAE1B,OAAIwR,EAAI,KAAOA,GAAK,EAET7U,KAAKuxB,IAAI1c,EAAI,IAAKvR,EAAGD,GAAKy+E,iBAE1B9hF,KAAKuxB,IAAI1c,EAAGvR,EAAGD,GAI9B,SAASu8E,QAAQ1Y,OACb,IAAIp5C,KAAMs0D,YAEV,QAAcnnF,KADdisE,MAAQD,eAAeC,SACc,gBAAVA,QAA4BtsE,KAAKqlE,UACxD,OAAOrlE,KAKX,OAFAwnF,YAAcxnF,KAAK0mE,OAAS6gB,eAAiBD,iBAErChb,OACJ,IAAK,OACDp5C,KAAOs0D,YAAYxnF,KAAKk+B,OAAQ,EAAG,GACnC,MACJ,IAAK,UACDhL,KAAOs0D,YACHxnF,KAAKk+B,OACLl+B,KAAKqiE,QAAWriE,KAAKqiE,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDnvC,KAAOs0D,YAAYxnF,KAAKk+B,OAAQl+B,KAAKqiE,QAAS,GAC9C,MACJ,IAAK,OACDnvC,KAAOs0D,YACHxnF,KAAKk+B,OACLl+B,KAAKqiE,QACLriE,KAAKm5B,OAASn5B,KAAKyzE,WAEvB,MACJ,IAAK,UACDvgD,KAAOs0D,YACHxnF,KAAKk+B,OACLl+B,KAAKqiE,QACLriE,KAAKm5B,QAAUn5B,KAAKynF,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDv0D,KAAOs0D,YAAYxnF,KAAKk+B,OAAQl+B,KAAKqiE,QAASriE,KAAKm5B,QACnD,MACJ,IAAK,OACDjG,KAAOlzB,KAAK6C,GAAGi1B,UACf5E,MAAQi0D,MACJj0D,MAAQlzB,KAAK0mE,OAAS,EAAI1mE,KAAKqhF,YAAc2F,eAC7CC,aAEJ,MACJ,IAAK,SACD/zD,KAAOlzB,KAAK6C,GAAGi1B,UACf5E,MAAQi0D,MAAMj0D,KAAM8zD,eACpB,MACJ,IAAK,SACD9zD,KAAOlzB,KAAK6C,GAAGi1B,UACf5E,MAAQi0D,MAAMj0D,KAAM6zD,eAM5B,OAFA/mF,KAAK6C,GAAGm2B,QAAQ9F,MAChBkwC,MAAM2D,aAAa/mE,MAAM,GAClBA,KAGX,SAASmlF,MAAM7Y,OACX,IAAIp5C,KAAMs0D,YAEV,QAAcnnF,KADdisE,MAAQD,eAAeC,SACc,gBAAVA,QAA4BtsE,KAAKqlE,UACxD,OAAOrlE,KAKX,OAFAwnF,YAAcxnF,KAAK0mE,OAAS6gB,eAAiBD,iBAErChb,OACJ,IAAK,OACDp5C,KAAOs0D,YAAYxnF,KAAKk+B,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACDhL,KACIs0D,YACIxnF,KAAKk+B,OACLl+B,KAAKqiE,QAAWriE,KAAKqiE,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDnvC,KAAOs0D,YAAYxnF,KAAKk+B,OAAQl+B,KAAKqiE,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDnvC,KACIs0D,YACIxnF,KAAKk+B,OACLl+B,KAAKqiE,QACLriE,KAAKm5B,OAASn5B,KAAKyzE,UAAY,GAC/B,EACR,MACJ,IAAK,UACDvgD,KACIs0D,YACIxnF,KAAKk+B,OACLl+B,KAAKqiE,QACLriE,KAAKm5B,QAAUn5B,KAAKynF,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDv0D,KAAOs0D,YAAYxnF,KAAKk+B,OAAQl+B,KAAKqiE,QAASriE,KAAKm5B,OAAS,GAAK,EACjE,MACJ,IAAK,OACDjG,KAAOlzB,KAAK6C,GAAGi1B,UACf5E,MACI+zD,YACAE,MACIj0D,MAAQlzB,KAAK0mE,OAAS,EAAI1mE,KAAKqhF,YAAc2F,eAC7CC,aAEJ,EACJ,MACJ,IAAK,SACD/zD,KAAOlzB,KAAK6C,GAAGi1B,UACf5E,MAAQ8zD,cAAgBG,MAAMj0D,KAAM8zD,eAAiB,EACrD,MACJ,IAAK,SACD9zD,KAAOlzB,KAAK6C,GAAGi1B,UACf5E,MAAQ6zD,cAAgBI,MAAMj0D,KAAM6zD,eAAiB,EAM7D,OAFA/mF,KAAK6C,GAAGm2B,QAAQ9F,MAChBkwC,MAAM2D,aAAa/mE,MAAM,GAClBA,KAGX,SAAS83B,UACL,OAAO93B,KAAK6C,GAAGi1B,UAAkC,KAArB93B,KAAK2mE,SAAW,GAGhD,SAAS+gB,OACL,OAAOx/E,KAAKC,MAAMnI,KAAK83B,UAAY,KAGvC,SAASouD,SACL,OAAO,IAAI9gF,KAAKpF,KAAK83B,WAGzB,SAASgrD,UACL,IAAIp6E,EAAI1I,KACR,MAAO,CACH0I,EAAEw1B,OACFx1B,EAAE25D,QACF35D,EAAEywB,OACFzwB,EAAEw5D,OACFx5D,EAAEs5D,SACFt5D,EAAEo5D,SACFp5D,EAAEw2E,eAIV,SAASyI,WACL,IAAIj/E,EAAI1I,KACR,MAAO,CACHo+B,MAAO11B,EAAEw1B,OACT3D,OAAQ7xB,EAAE25D,QACVlpC,KAAMzwB,EAAEywB,OACRipC,MAAO15D,EAAE05D,QACTH,QAASv5D,EAAEu5D,UACXF,QAASr5D,EAAEq5D,UACXwe,aAAc73E,EAAE63E,gBAIxB,SAASqH,SAEL,OAAO5nF,KAAKqlE,UAAYrlE,KAAKqhE,cAAgB,KAGjD,SAASwmB,YACL,OAAOxiB,QAAQrlE,MAGnB,SAAS8nF,eACL,OAAO9jB,OAAO,GAAImB,gBAAgBnlE,OAGtC,SAAS+nF,YACL,OAAO5iB,gBAAgBnlE,MAAMukE,SAGjC,SAASyjB,eACL,MAAO,CACH3xC,MAAOr2C,KAAK+C,GACZoiB,OAAQnlB,KAAKumE,GACbtyC,OAAQj0B,KAAK4mE,QACb2Y,MAAOv/E,KAAK0mE,OACZxC,OAAQlkE,KAAK2lE,SAqDrB,SAASsiB,WAAWv/E,EAAGyc,QACnB,IAAIvmB,EACAwP,EACA+qB,KACA+uD,KAAOloF,KAAKmoF,OAAS9O,UAAU,MAAM8O,MACzC,IAAKvpF,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EASlC,OAPS,iBADMspF,KAAKtpF,GAAGwpF,QAGfjvD,KAAOiqC,MAAM8kB,KAAKtpF,GAAGwpF,OAAOpD,QAAQ,OACpCkD,KAAKtpF,GAAGwpF,MAAQjvD,KAAKrB,kBAIdowD,KAAKtpF,GAAGypF,OACnB,IAAK,YACDH,KAAKtpF,GAAGypF,MAAQ,IAChB,MACJ,IAAK,SAEDlvD,KAAOiqC,MAAM8kB,KAAKtpF,GAAGypF,OAAOrD,QAAQ,OAAOltD,UAC3CowD,KAAKtpF,GAAGypF,MAAQlvD,KAAKrB,UAIjC,OAAOowD,KAGX,SAASI,gBAAgBC,QAASpjE,OAAQ++C,QACtC,IAAItlE,EACAwP,EAEApK,KACAu1E,KACAiP,OAHAN,KAAOloF,KAAKkoF,OAMhB,IAFAK,QAAUA,QAAQh8E,cAEb3N,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EAKlC,GAJAoF,KAAOkkF,KAAKtpF,GAAGoF,KAAKuI,cACpBgtE,KAAO2O,KAAKtpF,GAAG26E,KAAKhtE,cACpBi8E,OAASN,KAAKtpF,GAAG4pF,OAAOj8E,cAEpB23D,OACA,OAAQ/+C,QACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAIo0D,OAASgP,QACT,OAAOL,KAAKtpF,GAEhB,MAEJ,IAAK,OACD,GAAIoF,OAASukF,QACT,OAAOL,KAAKtpF,GAEhB,MAEJ,IAAK,QACD,GAAI4pF,SAAWD,QACX,OAAOL,KAAKtpF,QAIrB,GAAI,CAACoF,KAAMu1E,KAAMiP,QAAQh6E,QAAQ+5E,UAAY,EAChD,OAAOL,KAAKtpF,GAKxB,SAAS6pF,sBAAsB1jB,IAAK7mC,MAChC,IAAIwqD,IAAM3jB,IAAIqjB,OAASrjB,IAAIsjB,MAAQ,GAAM,EACzC,YAAahoF,IAAT69B,KACOklC,MAAM2B,IAAIqjB,OAAOlqD,OAEjBklC,MAAM2B,IAAIqjB,OAAOlqD,QAAUA,KAAO6mC,IAAI1rC,QAAUqvD,IAI/D,SAASC,aACL,IAAI/pF,EACAwP,EACAg4D,IACA8hB,KAAOloF,KAAK2pE,aAAaue,OAC7B,IAAKtpF,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EAAG,CAIrC,GAFAwnE,IAAMpmE,KAAK4hF,QAAQoD,QAAQ,OAAOltD,UAE9BowD,KAAKtpF,GAAGwpF,OAAShiB,KAAOA,KAAO8hB,KAAKtpF,GAAGypF,MACvC,OAAOH,KAAKtpF,GAAGoF,KAEnB,GAAIkkF,KAAKtpF,GAAGypF,OAASjiB,KAAOA,KAAO8hB,KAAKtpF,GAAGwpF,MACvC,OAAOF,KAAKtpF,GAAGoF,KAIvB,MAAO,GAGX,SAAS4kF,eACL,IAAIhqF,EACAwP,EACAg4D,IACA8hB,KAAOloF,KAAK2pE,aAAaue,OAC7B,IAAKtpF,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EAAG,CAIrC,GAFAwnE,IAAMpmE,KAAK4hF,QAAQoD,QAAQ,OAAOltD,UAE9BowD,KAAKtpF,GAAGwpF,OAAShiB,KAAOA,KAAO8hB,KAAKtpF,GAAGypF,MACvC,OAAOH,KAAKtpF,GAAG4pF,OAEnB,GAAIN,KAAKtpF,GAAGypF,OAASjiB,KAAOA,KAAO8hB,KAAKtpF,GAAGwpF,MACvC,OAAOF,KAAKtpF,GAAG4pF,OAIvB,MAAO,GAGX,SAASK,aACL,IAAIjqF,EACAwP,EACAg4D,IACA8hB,KAAOloF,KAAK2pE,aAAaue,OAC7B,IAAKtpF,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EAAG,CAIrC,GAFAwnE,IAAMpmE,KAAK4hF,QAAQoD,QAAQ,OAAOltD,UAE9BowD,KAAKtpF,GAAGwpF,OAAShiB,KAAOA,KAAO8hB,KAAKtpF,GAAGypF,MACvC,OAAOH,KAAKtpF,GAAG26E,KAEnB,GAAI2O,KAAKtpF,GAAGypF,OAASjiB,KAAOA,KAAO8hB,KAAKtpF,GAAGwpF,MACvC,OAAOF,KAAKtpF,GAAG26E,KAIvB,MAAO,GAGX,SAASuP,aACL,IAAIlqF,EACAwP,EACAs6E,IACAtiB,IACA8hB,KAAOloF,KAAK2pE,aAAaue,OAC7B,IAAKtpF,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EAMlC,GALA8pF,IAAMR,KAAKtpF,GAAGwpF,OAASF,KAAKtpF,GAAGypF,MAAQ,GAAM,EAG7CjiB,IAAMpmE,KAAK4hF,QAAQoD,QAAQ,OAAOltD,UAG7BowD,KAAKtpF,GAAGwpF,OAAShiB,KAAOA,KAAO8hB,KAAKtpF,GAAGypF,OACvCH,KAAKtpF,GAAGypF,OAASjiB,KAAOA,KAAO8hB,KAAKtpF,GAAGwpF,MAExC,OACKpoF,KAAKk+B,OAASklC,MAAM8kB,KAAKtpF,GAAGwpF,OAAOlqD,QAAUwqD,IAC9CR,KAAKtpF,GAAGy6B,OAKpB,OAAOr5B,KAAKk+B,OAGhB,SAAS6qD,cAAc9Z,UAInB,OAHK1L,WAAWvjE,KAAM,mBAClBgpF,iBAAiBnlF,KAAK7D,MAEnBivE,SAAWjvE,KAAKipF,eAAiBjpF,KAAKkpF,WAGjD,SAASC,cAAcla,UAInB,OAHK1L,WAAWvjE,KAAM,mBAClBgpF,iBAAiBnlF,KAAK7D,MAEnBivE,SAAWjvE,KAAKopF,eAAiBppF,KAAKkpF,WAGjD,SAASG,gBAAgBpa,UAIrB,OAHK1L,WAAWvjE,KAAM,qBAClBgpF,iBAAiBnlF,KAAK7D,MAEnBivE,SAAWjvE,KAAKspF,iBAAmBtpF,KAAKkpF,WAGnD,SAASK,aAAata,SAAUh7C,QAC5B,OAAOA,OAAOk1D,cAAcla,UAGhC,SAASua,aAAava,SAAUh7C,QAC5B,OAAOA,OAAO80D,cAAc9Z,UAGhC,SAASwa,eAAexa,SAAUh7C,QAC9B,OAAOA,OAAOo1D,gBAAgBpa,UAGlC,SAASya,oBAAoBza,SAAUh7C,QACnC,OAAOA,OAAO01D,sBAAwBnb,cAG1C,SAASwa,mBACL,IAIIpqF,EACAwP,EALAw7E,WAAa,GACbC,WAAa,GACbC,aAAe,GACflX,YAAc,GAGdsV,KAAOloF,KAAKkoF,OAEhB,IAAKtpF,EAAI,EAAGwP,EAAI85E,KAAKvpF,OAAQC,EAAIwP,IAAKxP,EAClCirF,WAAW7mF,KAAKosE,YAAY8Y,KAAKtpF,GAAGoF,OACpC4lF,WAAW5mF,KAAKosE,YAAY8Y,KAAKtpF,GAAG26E,OACpCuQ,aAAa9mF,KAAKosE,YAAY8Y,KAAKtpF,GAAG4pF,SAEtC5V,YAAY5vE,KAAKosE,YAAY8Y,KAAKtpF,GAAGoF,OACrC4uE,YAAY5vE,KAAKosE,YAAY8Y,KAAKtpF,GAAG26E,OACrC3G,YAAY5vE,KAAKosE,YAAY8Y,KAAKtpF,GAAG4pF,SAGzCxoF,KAAKkpF,WAAa,IAAIz2E,OAAO,KAAOmgE,YAAYnhD,KAAK,KAAO,IAAK,KACjEzxB,KAAKipF,eAAiB,IAAIx2E,OAAO,KAAOo3E,WAAWp4D,KAAK,KAAO,IAAK,KACpEzxB,KAAKopF,eAAiB,IAAI32E,OAAO,KAAOm3E,WAAWn4D,KAAK,KAAO,IAAK,KACpEzxB,KAAKspF,iBAAmB,IAAI72E,OACxB,KAAOq3E,aAAar4D,KAAK,KAAO,IAChC,KAcR,SAASs4D,uBAAuB33D,MAAO43D,QACnCxgB,eAAe,EAAG,CAACp3C,MAAOA,MAAMzzB,QAAS,EAAGqrF,QA0ChD,SAASC,eAAe5zC,OACpB,OAAO6zC,qBAAqBrmF,KACxB7D,KACAq2C,MACAr2C,KAAKs+B,OACLt+B,KAAKyzE,UACLzzE,KAAK2pE,aAAasK,MAAMZ,IACxBrzE,KAAK2pE,aAAasK,MAAMX,KAIhC,SAAS6W,kBAAkB9zC,OACvB,OAAO6zC,qBAAqBrmF,KACxB7D,KACAq2C,MACAr2C,KAAKsgF,UACLtgF,KAAKynF,aACL,EACA,GAIR,SAAS2C,oBACL,OAAOtW,YAAY9zE,KAAKk+B,OAAQ,EAAG,GAGvC,SAASmsD,2BACL,OAAOvW,YAAY9zE,KAAKsqF,cAAe,EAAG,GAG9C,SAASC,iBACL,IAAIC,SAAWxqF,KAAK2pE,aAAasK,MACjC,OAAOH,YAAY9zE,KAAKk+B,OAAQssD,SAASnX,IAAKmX,SAASlX,KAG3D,SAASmX,qBACL,IAAID,SAAWxqF,KAAK2pE,aAAasK,MACjC,OAAOH,YAAY9zE,KAAKw9E,WAAYgN,SAASnX,IAAKmX,SAASlX,KAG/D,SAAS4W,qBAAqB7zC,MAAO/X,KAAMm1C,QAASJ,IAAKC,KACrD,IAAIoX,YACJ,OAAa,MAATr0C,MACO5X,WAAWz+B,KAAMqzE,IAAKC,KAAKp1C,MAG9BI,MADJosD,YAAc5W,YAAYz9B,MAAOg9B,IAAKC,QAElCh1C,KAAOosD,aAEJC,WAAW9mF,KAAK7D,KAAMq2C,MAAO/X,KAAMm1C,QAASJ,IAAKC,MAIhE,SAASqX,WAAWnN,SAAUl/C,KAAMm1C,QAASJ,IAAKC,KAC9C,IAAIsX,cAAgBpX,mBAAmBgK,SAAUl/C,KAAMm1C,QAASJ,IAAKC,KACjEn6C,KAAOg6C,cAAcyX,cAAc1sD,KAAM,EAAG0sD,cAAcruD,WAK9D,OAHAv8B,KAAKk+B,KAAK/E,KAAKlC,kBACfj3B,KAAKqiE,MAAMlpC,KAAK1B,eAChBz3B,KAAKm5B,KAAKA,KAAKtC,cACR72B,KAwBX,SAAS6qF,cAAcx0C,OACnB,OAAgB,MAATA,MACDnuC,KAAKia,MAAMniB,KAAKqiE,QAAU,GAAK,GAC/BriE,KAAKqiE,MAAoB,GAAbhsB,MAAQ,GAAUr2C,KAAKqiE,QAAU,GAnavDmH,eAAe,IAAK,EAAG,EAAG,WAC1BA,eAAe,KAAM,EAAG,EAAG,WAC3BA,eAAe,MAAO,EAAG,EAAG,WAC5BA,eAAe,OAAQ,EAAG,EAAG,WAC7BA,eAAe,QAAS,EAAG,EAAG,aAE9BA,eAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,eAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,eAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,eAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCsF,cAAc,IAAKya,cACnBza,cAAc,KAAMya,cACpBza,cAAc,MAAOya,cACrBza,cAAc,OAAQ0a,cACtB1a,cAAc,QAAS2a,gBAEvBja,cACI,CAAC,IAAK,KAAM,MAAO,OAAQ,UAC3B,SAAUn5B,MAAOlxC,MAAO2hE,OAAQ10C,OAC5B,IAAI2yC,IAAM+B,OAAOF,QAAQkkB,UAAUz0C,MAAOjkB,MAAO00C,OAAOnB,SACpDZ,IACAI,gBAAgB2B,QAAQ/B,IAAMA,IAE9BI,gBAAgB2B,QAAQpC,WAAaruB,SAKjDy4B,cAAc,IAAKN,eACnBM,cAAc,KAAMN,eACpBM,cAAc,MAAON,eACrBM,cAAc,OAAQN,eACtBM,cAAc,KAAM4a,qBAEpBla,cAAc,CAAC,IAAK,KAAM,MAAO,QAASM,MAC1CN,cAAc,CAAC,OAAO,SAAUn5B,MAAOlxC,MAAO2hE,OAAQ10C,OAClD,IAAIxa,MACAkvD,OAAOF,QAAQ+iB,uBACf/xE,MAAQy+B,MAAMz+B,MAAMkvD,OAAOF,QAAQ+iB,uBAGnC7iB,OAAOF,QAAQmkB,oBACf5lF,MAAM2qE,MAAQhJ,OAAOF,QAAQmkB,oBAAoB10C,MAAOz+B,OAExDzS,MAAM2qE,MAAQrqD,SAAS4wB,MAAO,OA4OtCmzB,eAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAOxpE,KAAKw9E,WAAa,OAG7BhU,eAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAOxpE,KAAKsqF,cAAgB,OAOhCP,uBAAuB,OAAQ,YAC/BA,uBAAuB,QAAS,YAChCA,uBAAuB,OAAQ,eAC/BA,uBAAuB,QAAS,eAIhC7d,aAAa,WAAY,MACzBA,aAAa,cAAe,MAI5BU,gBAAgB,WAAY,GAC5BA,gBAAgB,cAAe,GAI/BkC,cAAc,IAAKL,aACnBK,cAAc,IAAKL,aACnBK,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,OAAQR,UAAWN,QACjCc,cAAc,OAAQR,UAAWN,QACjCc,cAAc,QAASP,UAAWN,QAClCa,cAAc,QAASP,UAAWN,QAElCyB,kBACI,CAAC,OAAQ,QAAS,OAAQ,UAC1B,SAAUr5B,MAAO/X,KAAMwoC,OAAQ10C,OAC3BkM,KAAKlM,MAAM+2C,OAAO,EAAG,IAAM8D,MAAM52B,UAIzCq5B,kBAAkB,CAAC,KAAM,OAAO,SAAUr5B,MAAO/X,KAAMwoC,OAAQ10C,OAC3DkM,KAAKlM,OAASgxC,MAAM0P,kBAAkBz8B,UAsE1CmzB,eAAe,IAAK,EAAG,KAAM,WAI7B0C,aAAa,UAAW,KAIxBU,gBAAgB,UAAW,GAI3BkC,cAAc,IAAKjB,QACnB2B,cAAc,KAAK,SAAUn5B,MAAOlxC,OAChCA,MAAM4qE,OAA8B,GAApB9C,MAAM52B,OAAS,MAanCmzB,eAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrC0C,aAAa,OAAQ,KAGrBU,gBAAgB,OAAQ,GAIxBkC,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAC/BgB,cAAc,MAAM,SAAUG,SAAUh7C,QAEpC,OAAOg7C,SACDh7C,OAAO6zC,yBAA2B7zC,OAAO8zC,cACzC9zC,OAAO4zC,kCAGjB2H,cAAc,CAAC,IAAK,MAAOQ,MAC3BR,cAAc,MAAM,SAAUn5B,MAAOlxC,OACjCA,MAAM6qE,MAAQ/C,MAAM52B,MAAMz+B,MAAMs2D,WAAW,OAK/C,IAAI8c,iBAAmB5d,WAAW,QAAQ,GAyB1C,SAAS6d,gBAAgB50C,OACrB,IAAI9Z,UACAr0B,KAAKwb,OACA1jB,KAAK4hF,QAAQoD,QAAQ,OAAShlF,KAAK4hF,QAAQoD,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAAT3uC,MAAgB9Z,UAAYv8B,KAAK0N,IAAI2oC,MAAQ9Z,UAAW,KA1BnEitC,eAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3C0C,aAAa,YAAa,OAG1BU,gBAAgB,YAAa,GAI7BkC,cAAc,MAAOT,WACrBS,cAAc,OAAQf,QACtByB,cAAc,CAAC,MAAO,SAAS,SAAUn5B,MAAOlxC,MAAO2hE,QACnDA,OAAOwW,WAAarQ,MAAM52B,UAiB9BmzB,eAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlC0C,aAAa,SAAU,KAIvBU,gBAAgB,SAAU,IAI1BkC,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAC/B0B,cAAc,CAAC,IAAK,MAAOU,QAI3B,IAAIgb,aAAe9d,WAAW,WAAW,GAIzC5D,eAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlC0C,aAAa,SAAU,KAIvBU,gBAAgB,SAAU,IAI1BkC,cAAc,IAAKZ,WACnBY,cAAc,KAAMZ,UAAWJ,QAC/B0B,cAAc,CAAC,IAAK,MAAOW,QAI3B,IA8CI/9C,MAAO+4D,kBA9CPC,aAAehe,WAAW,WAAW,GA+CzC,IA3CA5D,eAAe,IAAK,EAAG,GAAG,WACtB,SAAUxpE,KAAKk/E,cAAgB,QAGnC1V,eAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,SAAUxpE,KAAKk/E,cAAgB,OAGnC1V,eAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,eAAe,EAAG,CAAC,OAAQ,GAAI,GAAG,WAC9B,OAA4B,GAArBxpE,KAAKk/E,iBAEhB1V,eAAe,EAAG,CAAC,QAAS,GAAI,GAAG,WAC/B,OAA4B,IAArBxpE,KAAKk/E,iBAEhB1V,eAAe,EAAG,CAAC,SAAU,GAAI,GAAG,WAChC,OAA4B,IAArBxpE,KAAKk/E,iBAEhB1V,eAAe,EAAG,CAAC,UAAW,GAAI,GAAG,WACjC,OAA4B,IAArBxpE,KAAKk/E,iBAEhB1V,eAAe,EAAG,CAAC,WAAY,GAAI,GAAG,WAClC,OAA4B,IAArBxpE,KAAKk/E,iBAEhB1V,eAAe,EAAG,CAAC,YAAa,GAAI,GAAG,WACnC,OAA4B,IAArBxpE,KAAKk/E,iBAKhBhT,aAAa,cAAe,MAI5BU,gBAAgB,cAAe,IAI/BkC,cAAc,IAAKT,UAAWR,QAC9BiB,cAAc,KAAMT,UAAWP,QAC/BgB,cAAc,MAAOT,UAAWN,QAG3B37C,MAAQ,OAAQA,MAAMzzB,QAAU,EAAGyzB,OAAS,IAC7C08C,cAAc18C,MAAOo8C,eAGzB,SAAS6c,QAAQh1C,MAAOlxC,OACpBA,MAAMirE,aAAenD,MAAuB,KAAhB,KAAO52B,QAGvC,IAAKjkB,MAAQ,IAAKA,MAAMzzB,QAAU,EAAGyzB,OAAS,IAC1Co9C,cAAcp9C,MAAOi5D,SAYzB,SAASC,cACL,OAAOtrF,KAAK0mE,OAAS,MAAQ,GAGjC,SAAS6kB,cACL,OAAOvrF,KAAK0mE,OAAS,6BAA+B,GAdxDykB,kBAAoB/d,WAAW,gBAAgB,GAI/C5D,eAAe,IAAK,EAAG,EAAG,YAC1BA,eAAe,KAAM,EAAG,EAAG,YAY3B,IAAIgiB,MAAQ3kB,OAAOvlE,UAwGnB,SAASmqF,WAAWp1C,OAChB,OAAOynC,YAAoB,IAARznC,OAGvB,SAASq1C,eACL,OAAO5N,YAAY39E,MAAM,KAAMD,WAAWyrF,YAG9C,SAASC,mBAAmBhxD,QACxB,OAAOA,OA/GX4wD,MAAM99E,IAAMA,IACZ89E,MAAM7iB,SAAWmc,WACjB0G,MAAM5J,MAAQA,MACd4J,MAAMxf,KAAOA,KACbwf,MAAMrG,MAAQA,MACdqG,MAAMrmE,OAASA,OACfqmE,MAAMhoF,KAAOA,KACbgoF,MAAM7E,QAAUA,QAChB6E,MAAMxjD,GAAKA,GACXwjD,MAAM5E,MAAQA,MACd4E,MAAM7+E,IAAM6gE,UACZge,MAAMzD,UAAYA,UAClByD,MAAM9H,QAAUA,QAChB8H,MAAM7H,SAAWA,SACjB6H,MAAMpG,UAAYA,UAClBoG,MAAMhG,OAASA,OACfgG,MAAM9F,cAAgBA,cACtB8F,MAAM7F,eAAiBA,eACvB6F,MAAMnmB,QAAUwiB,UAChB2D,MAAM1E,KAAOA,KACb0E,MAAMv3D,OAASA,OACfu3D,MAAM7hB,WAAaA,WACnB6hB,MAAMjkF,IAAMk4E,aACZ+L,MAAMlkF,IAAMk4E,aACZgM,MAAM1D,aAAeA,aACrB0D,MAAMjgF,IAAMkiE,UACZ+d,MAAMxG,QAAUA,QAChBwG,MAAMjJ,SAAWA,SACjBiJ,MAAM1I,QAAUA,QAChB0I,MAAM7D,SAAWA,SACjB6D,MAAMtF,OAASA,OACfsF,MAAMnqB,YAAcA,YACpBmqB,MAAMrF,QAAUA,QACM,oBAAX1kF,QAAwC,MAAdA,OAAOoqF,MACxCL,MAAM/pF,OAAOoqF,IAAI,+BAAiC,WAC9C,MAAO,UAAY7rF,KAAKmlB,SAAW,MAG3CqmE,MAAM5D,OAASA,OACf4D,MAAM5nF,SAAWA,SACjB4nF,MAAM9D,KAAOA,KACb8D,MAAM1zD,QAAUA,QAChB0zD,MAAMxD,aAAeA,aACrBwD,MAAMjD,QAAUI,WAChB6C,MAAMM,UAAYlD,aAClB4C,MAAMO,QAAUlD,WAChB2C,MAAMQ,QAAUlD,WAChB0C,MAAMttD,KAAO60C,WACbyY,MAAMze,WAAaiG,cACnBwY,MAAMhO,SAAWyM,eACjBuB,MAAMlB,YAAcH,kBACpBqB,MAAMnL,QAAUmL,MAAMpL,SAAWyK,cACjCW,MAAMnpB,MAAQ6P,YACdsZ,MAAMje,YAAc4E,eACpBqZ,MAAMltD,KAAOktD,MAAMhtD,MAAQ61C,WAC3BmX,MAAMlL,QAAUkL,MAAMS,SAAW3X,cACjCkX,MAAM1X,YAAcyW,eACpBiB,MAAMU,gBAAkBzB,mBACxBe,MAAMW,eAAiB/B,kBACvBoB,MAAMY,sBAAwB/B,yBAC9BmB,MAAMryD,KAAO6xD,iBACbQ,MAAMrtD,IAAMqtD,MAAMrxD,KAAOm8C,gBACzBkV,MAAM/X,QAAU8C,sBAChBiV,MAAM/D,WAAajR,mBACnBgV,MAAMjvD,UAAY0uD,gBAClBO,MAAMtpB,KAAOspB,MAAMppB,MAAQ8V,WAC3BsT,MAAMxpB,OAASwpB,MAAMvpB,QAAUipB,aAC/BM,MAAM1pB,OAAS0pB,MAAMzpB,QAAUqpB,aAC/BI,MAAMtM,YAAcsM,MAAMjL,aAAe4K,kBACzCK,MAAMnK,UAAYS,aAClB0J,MAAMhyD,IAAM6oD,eACZmJ,MAAMrlF,MAAQm8E,iBACdkJ,MAAMG,UAAYnJ,wBAClBgJ,MAAM9I,qBAAuBA,qBAC7B8I,MAAMa,MAAQ1J,qBACd6I,MAAMzI,QAAUA,QAChByI,MAAMxI,YAAcA,YACpBwI,MAAMvI,MAAQA,MACduI,MAAMjM,MAAQ0D,MACduI,MAAMc,SAAWhB,YACjBE,MAAMe,SAAWhB,YACjBC,MAAMgB,MAAQnlB,UACV,kDACA2jB,kBAEJQ,MAAMjxD,OAAS8sC,UACX,mDACA6K,aAEJsZ,MAAMptD,MAAQipC,UACV,iDACA0L,YAEJyY,MAAMnF,KAAOhf,UACT,2GACA+a,YAEJoJ,MAAMiB,aAAeplB,UACjB,0GACAub,6BAeJ,IAAI8J,QAAUvkB,OAAO7mE,UAuCrB,SAASqrF,MAAMxnE,OAAQo5B,MAAO/rB,MAAOnlB,QACjC,IAAI4mB,OAASolD,YACT7/C,IAAMyqC,YAAY14D,IAAI8B,OAAQkxC,OAClC,OAAOtqB,OAAOzB,OAAOgH,IAAKrU,QAG9B,SAASynE,eAAeznE,OAAQo5B,MAAO/rB,OAQnC,GAPIoxC,SAASz+C,UACTo5B,MAAQp5B,OACRA,YAAS9kB,GAGb8kB,OAASA,QAAU,GAEN,MAATo5B,MACA,OAAOouC,MAAMxnE,OAAQo5B,MAAO/rB,MAAO,SAGvC,IAAI5zB,EACAuiD,IAAM,GACV,IAAKviD,EAAI,EAAGA,EAAI,GAAIA,IAChBuiD,IAAIviD,GAAK+tF,MAAMxnE,OAAQvmB,EAAG4zB,MAAO,SAErC,OAAO2uB,IAWX,SAAS0rC,iBAAiBC,aAAc3nE,OAAQo5B,MAAO/rB,OACvB,kBAAjBs6D,cACHlpB,SAASz+C,UACTo5B,MAAQp5B,OACRA,YAAS9kB,GAGb8kB,OAASA,QAAU,KAGnBo5B,MADAp5B,OAAS2nE,aAETA,cAAe,EAEXlpB,SAASz+C,UACTo5B,MAAQp5B,OACRA,YAAS9kB,GAGb8kB,OAASA,QAAU,IAGvB,IAEIvmB,EAFAq1B,OAASolD,YACT9xC,MAAQulD,aAAe74D,OAAOggD,MAAMZ,IAAM,EAE1ClyB,IAAM,GAEV,GAAa,MAAT5C,MACA,OAAOouC,MAAMxnE,QAASo5B,MAAQhX,OAAS,EAAG/U,MAAO,OAGrD,IAAK5zB,EAAI,EAAGA,EAAI,EAAGA,IACfuiD,IAAIviD,GAAK+tF,MAAMxnE,QAASvmB,EAAI2oC,OAAS,EAAG/U,MAAO,OAEnD,OAAO2uB,IAGX,SAAS4rC,WAAW5nE,OAAQo5B,OACxB,OAAOquC,eAAeznE,OAAQo5B,MAAO,UAGzC,SAASyuC,gBAAgB7nE,OAAQo5B,OAC7B,OAAOquC,eAAeznE,OAAQo5B,MAAO,eAGzC,SAAS0uC,aAAaH,aAAc3nE,OAAQo5B,OACxC,OAAOsuC,iBAAiBC,aAAc3nE,OAAQo5B,MAAO,YAGzD,SAAS2uC,kBAAkBJ,aAAc3nE,OAAQo5B,OAC7C,OAAOsuC,iBAAiBC,aAAc3nE,OAAQo5B,MAAO,iBAGzD,SAAS4uC,gBAAgBL,aAAc3nE,OAAQo5B,OAC3C,OAAOsuC,iBAAiBC,aAAc3nE,OAAQo5B,MAAO,eA5HzDmuC,QAAQ/jB,SAAWA,SACnB+jB,QAAQxiB,eAAiBA,eACzBwiB,QAAQ1iB,YAAcA,YACtB0iB,QAAQ/4B,QAAUA,QAClB+4B,QAAQrN,SAAWuM,mBACnBc,QAAQjG,WAAamF,mBACrBc,QAAQ/gB,aAAeA,aACvB+gB,QAAQ3gB,WAAaA,WACrB2gB,QAAQnhF,IAAMA,IACdmhF,QAAQxE,KAAOD,WACfyE,QAAQ5B,UAAYxC,gBACpBoE,QAAQrO,gBAAkBoK,sBAC1BiE,QAAQvD,cAAgBA,cACxBuD,QAAQ3D,cAAgBA,cACxB2D,QAAQrD,gBAAkBA,gBAE1BqD,QAAQnyD,OAAS22C,aACjBwb,QAAQjc,YAAcY,kBACtBqb,QAAQ9b,YAAcmB,kBACtB2a,QAAQ/b,YAAcA,YACtB+b,QAAQhc,iBAAmBA,iBAC3Bgc,QAAQpuD,KAAO01C,WACf0Y,QAAQU,eAAiBhZ,qBACzBsY,QAAQW,eAAiBlZ,qBAEzBuY,QAAQ5X,SAAWU,eACnBkX,QAAQ9X,YAAcgB,kBACtB8W,QAAQ7X,cAAgBa,oBACxBgX,QAAQlY,cAAgB2B,oBAExBuW,QAAQzX,cAAgBA,cACxByX,QAAQ1X,mBAAqBA,mBAC7B0X,QAAQ3X,iBAAmBA,iBAE3B2X,QAAQ9U,KAAOH,WACfiV,QAAQ1nB,SAAWmT,eA4FnBiB,mBAAmB,KAAM,CACrB8O,KAAM,CACF,CACIE,MAAO,aACPC,MAAO,IACPhvD,OAAQ,EACRr1B,KAAM,cACNwkF,OAAQ,KACRjP,KAAM,MAEV,CACI6O,MAAO,aACPC,OAAO,IACPhvD,OAAQ,EACRr1B,KAAM,gBACNwkF,OAAQ,KACRjP,KAAM,OAGdhB,uBAAwB,uBACxB5kB,QAAS,SAAUz6B,QACf,IAAI3yB,EAAI2yB,OAAS,GAWjB,OAAOA,QATgC,IAA/B+zC,MAAO/zC,OAAS,IAAO,IACjB,KACM,IAAN3yB,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,SAOtB68D,MAAM0jB,KAAOzf,UACT,wDACA+R,oBAEJhW,MAAMkqB,SAAWjmB,UACb,gEACAgS,WAGJ,IAAIkU,QAAUrlF,KAAKqC,IAEnB,SAASA,MACL,IAAI+J,KAAOtU,KAAK0gF,MAahB,OAXA1gF,KAAKwgF,cAAgB+M,QAAQvtF,KAAKwgF,eAClCxgF,KAAKygF,MAAQ8M,QAAQvtF,KAAKygF,OAC1BzgF,KAAKmxE,QAAUoc,QAAQvtF,KAAKmxE,SAE5B78D,KAAKisE,aAAegN,QAAQj5E,KAAKisE,cACjCjsE,KAAKytD,QAAUwrB,QAAQj5E,KAAKytD,SAC5BztD,KAAK2tD,QAAUsrB,QAAQj5E,KAAK2tD,SAC5B3tD,KAAK8tD,MAAQmrB,QAAQj5E,KAAK8tD,OAC1B9tD,KAAKimB,OAASgzD,QAAQj5E,KAAKimB,QAC3BjmB,KAAK8pB,MAAQmvD,QAAQj5E,KAAK8pB,OAEnBp+B,KAGX,SAASwtF,cAAchvE,SAAU63B,MAAO72C,MAAOyoC,WAC3C,IAAIvC,MAAQw6C,eAAe7pC,MAAO72C,OAMlC,OAJAgf,SAASgiE,eAAiBv4C,UAAYvC,MAAM86C,cAC5ChiE,SAASiiE,OAASx4C,UAAYvC,MAAM+6C,MACpCjiE,SAAS2yD,SAAWlpC,UAAYvC,MAAMyrC,QAE/B3yD,SAASmiE,UAIpB,SAAS8M,MAAMp3C,MAAO72C,OAClB,OAAOguF,cAAcxtF,KAAMq2C,MAAO72C,MAAO,GAI7C,SAASkuF,WAAWr3C,MAAO72C,OACvB,OAAOguF,cAAcxtF,KAAMq2C,MAAO72C,OAAQ,GAG9C,SAASmuF,QAAQz0D,QACb,OAAIA,OAAS,EACFhxB,KAAKC,MAAM+wB,QAEXhxB,KAAKia,KAAK+W,QAIzB,SAAS00D,SACL,IAII7rB,QACAE,QACAG,MACAhkC,MACAyvD,eARAtN,aAAevgF,KAAKwgF,cACpBrmD,KAAOn6B,KAAKygF,MACZlmD,OAASv6B,KAAKmxE,QACd78D,KAAOtU,KAAK0gF,MAgDhB,OArCSH,cAAgB,GAAKpmD,MAAQ,GAAKI,QAAU,GAC5CgmD,cAAgB,GAAKpmD,MAAQ,GAAKI,QAAU,IAGjDgmD,cAAuD,MAAvCoN,QAAQG,aAAavzD,QAAUJ,MAC/CA,KAAO,EACPI,OAAS,GAKbjmB,KAAKisE,aAAeA,aAAe,IAEnCxe,QAAUiL,SAASuT,aAAe,KAClCjsE,KAAKytD,QAAUA,QAAU,GAEzBE,QAAU+K,SAASjL,QAAU,IAC7BztD,KAAK2tD,QAAUA,QAAU,GAEzBG,MAAQ4K,SAAS/K,QAAU,IAC3B3tD,KAAK8tD,MAAQA,MAAQ,GAErBjoC,MAAQ6yC,SAAS5K,MAAQ,IAIzB7nC,QADAszD,eAAiB7gB,SAAS+gB,aAAa5zD,OAEvCA,MAAQwzD,QAAQG,aAAaD,iBAG7BzvD,MAAQ4uC,SAASzyC,OAAS,IAC1BA,QAAU,GAEVjmB,KAAK6lB,KAAOA,KACZ7lB,KAAKimB,OAASA,OACdjmB,KAAK8pB,MAAQA,MAENp+B,KAGX,SAAS+tF,aAAa5zD,MAGlB,OAAe,KAAPA,KAAe,OAG3B,SAAS2zD,aAAavzD,QAElB,OAAiB,OAATA,OAAmB,KAG/B,SAASsoB,GAAGypB,OACR,IAAKtsE,KAAKqlE,UACN,OAAO7+D,IAEX,IAAI2zB,KACAI,OACAgmD,aAAevgF,KAAKwgF,cAIxB,GAAc,WAFdlU,MAAQD,eAAeC,SAEY,YAAVA,OAAiC,SAAVA,MAG5C,OAFAnyC,KAAOn6B,KAAKygF,MAAQF,aAAe,MACnChmD,OAASv6B,KAAKmxE,QAAU4c,aAAa5zD,MAC7BmyC,OACJ,IAAK,QACD,OAAO/xC,OACX,IAAK,UACD,OAAOA,OAAS,EACpB,IAAK,OACD,OAAOA,OAAS,QAKxB,OADAJ,KAAOn6B,KAAKygF,MAAQv4E,KAAKwb,MAAMoqE,aAAa9tF,KAAKmxE,UACzC7E,OACJ,IAAK,OACD,OAAOnyC,KAAO,EAAIomD,aAAe,OACrC,IAAK,MACD,OAAOpmD,KAAOomD,aAAe,MACjC,IAAK,OACD,OAAc,GAAPpmD,KAAYomD,aAAe,KACtC,IAAK,SACD,OAAc,KAAPpmD,KAAcomD,aAAe,IACxC,IAAK,SACD,OAAc,MAAPpmD,KAAeomD,aAAe,IAEzC,IAAK,cACD,OAAOr4E,KAAKC,MAAa,MAAPgyB,MAAgBomD,aACtC,QACI,MAAM,IAAIn1E,MAAM,gBAAkBkhE,QAMlD,SAAS0hB,YACL,OAAKhuF,KAAKqlE,UAINrlE,KAAKwgF,cACQ,MAAbxgF,KAAKygF,MACJzgF,KAAKmxE,QAAU,GAAM,OACK,QAA3BlE,MAAMjtE,KAAKmxE,QAAU,IANd3qE,IAUf,SAASynF,OAAOC,OACZ,OAAO,WACH,OAAOluF,KAAK6iD,GAAGqrC,QAIvB,IAAIC,eAAiBF,OAAO,MACxBG,UAAYH,OAAO,KACnBI,UAAYJ,OAAO,KACnBK,QAAUL,OAAO,KACjBM,OAASN,OAAO,KAChBO,QAAUP,OAAO,KACjBQ,SAAWR,OAAO,KAClBS,WAAaT,OAAO,KACpBU,QAAUV,OAAO,KAErB,SAASW,UACL,OAAO1O,eAAelgF,MAG1B,SAAS6uF,MAAMviB,OAEX,OADAA,MAAQD,eAAeC,OAChBtsE,KAAKqlE,UAAYrlE,KAAKssE,MAAQ,OAAS9lE,IAGlD,SAASsoF,WAAW9qF,MAChB,OAAO,WACH,OAAOhE,KAAKqlE,UAAYrlE,KAAK0gF,MAAM18E,MAAQwC,KAInD,IAAI+5E,aAAeuO,WAAW,gBAC1B/sB,QAAU+sB,WAAW,WACrB7sB,QAAU6sB,WAAW,WACrB1sB,MAAQ0sB,WAAW,SACnB30D,KAAO20D,WAAW,QAClBv0D,OAASu0D,WAAW,UACpB1wD,MAAQ0wD,WAAW,SAEvB,SAAStwD,QACL,OAAOwuC,SAAShtE,KAAKm6B,OAAS,GAGlC,IAAIzW,MAAQxb,KAAKwb,MACbirC,WAAa,CACTyc,GAAI,GACJvpE,EAAG,GACH6G,EAAG,GACHT,EAAG,GACHQ,EAAG,GACH+P,EAAG,KACHuiB,EAAG,IAIX,SAASg0D,kBAAkBn0D,OAAQ1B,OAAQ0yC,cAAeC,SAAU53C,QAChE,OAAOA,OAAO03C,aAAazyC,QAAU,IAAK0yC,cAAehxC,OAAQixC,UAGrE,SAASmjB,eAAeC,eAAgBrjB,cAAejd,WAAY16B,QAC/D,IAAIzV,SAAW0hE,eAAe+O,gBAAgB1kF,MAC1Cw3D,QAAUr+C,MAAMlF,SAASqkC,GAAG,MAC5Bof,QAAUv+C,MAAMlF,SAASqkC,GAAG,MAC5Buf,MAAQ1+C,MAAMlF,SAASqkC,GAAG,MAC1B1oB,KAAOzW,MAAMlF,SAASqkC,GAAG,MACzBtoB,OAAS7W,MAAMlF,SAASqkC,GAAG,MAC3BrkB,MAAQ9a,MAAMlF,SAASqkC,GAAG,MAC1BzkB,MAAQ1a,MAAMlF,SAASqkC,GAAG,MAC1Bv8C,EACKy7D,SAAWpT,WAAWyc,IAAM,CAAC,IAAKrJ,UAClCA,QAAUpT,WAAW9sD,GAAK,CAAC,KAAMkgE,UACjCE,SAAW,GAAK,CAAC,MACjBA,QAAUtT,WAAWjmD,GAAK,CAAC,KAAMu5D,UACjCG,OAAS,GAAK,CAAC,MACfA,MAAQzT,WAAW1mD,GAAK,CAAC,KAAMm6D,QAC/BjoC,MAAQ,GAAK,CAAC,MACdA,KAAOw0B,WAAWlmD,GAAK,CAAC,KAAM0xB,MAgBvC,OAdoB,MAAhBw0B,WAAWn2C,IACXlS,EACIA,GACCk4B,OAAS,GAAK,CAAC,MACfA,MAAQmwB,WAAWn2C,GAAK,CAAC,KAAMgmB,SAExCl4B,EAAIA,GACCi0B,QAAU,GAAK,CAAC,MAChBA,OAASo0B,WAAW5zB,GAAK,CAAC,KAAMR,SAChC6D,OAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,QAElC,GAAKwtC,cACPtlE,EAAE,IAAM2oF,eAAiB,EACzB3oF,EAAE,GAAK2tB,OACA86D,kBAAkB5uF,MAAM,KAAMmG,GAIzC,SAAS4oF,2BAA2BC,kBAChC,YAAyB9uF,IAArB8uF,iBACOzrE,MAEqB,mBAArByrE,mBACPzrE,MAAQyrE,kBACD,GAMf,SAASC,4BAA4Bv6B,UAAWw6B,OAC5C,YAA8BhvF,IAA1BsuD,WAAWkG,kBAGDx0D,IAAVgvF,MACO1gC,WAAWkG,YAEtBlG,WAAWkG,WAAaw6B,MACN,MAAdx6B,YACAlG,WAAWyc,GAAKikB,MAAQ,IAErB,IAGX,SAAS3I,SAAS4I,cAAeC,eAC7B,IAAKvvF,KAAKqlE,UACN,OAAOrlE,KAAK2pE,aAAaK,cAG7B,IAEI/1C,OACAyX,OAHA8jD,YAAa,EACbC,GAAK9gC,WAyBT,MArB6B,iBAAlB2gC,gBACPC,cAAgBD,cAChBA,eAAgB,GAES,kBAAlBA,gBACPE,WAAaF,eAEY,iBAAlBC,gBACPE,GAAKxuF,OAAOyuF,OAAO,GAAI/gC,WAAY4gC,eACZ,MAAnBA,cAAc1tF,GAAiC,MAApB0tF,cAAcnkB,KACzCqkB,GAAGrkB,GAAKmkB,cAAc1tF,EAAI,IAKlC6pC,OAASsjD,eAAehvF,MAAOwvF,WAAYC,GAD3Cx7D,OAASj0B,KAAK2pE,cAGV6lB,aACA9jD,OAASzX,OAAO83C,YAAY/rE,KAAM0rC,SAG/BzX,OAAOwyD,WAAW/6C,QAG7B,IAAIikD,MAAQznF,KAAKqC,IAEjB,SAAS2qB,KAAKxuB,GACV,OAAQA,EAAI,IAAMA,EAAI,KAAOA,EAGjC,SAASkpF,gBAQL,IAAK5vF,KAAKqlE,UACN,OAAOrlE,KAAK2pE,aAAaK,cAG7B,IAGI/H,QACAG,MACAhkC,MACAv8B,EAEAguF,UACAC,OACAC,SACAC,QAXAjuB,QAAU4tB,MAAM3vF,KAAKwgF,eAAiB,IACtCrmD,KAAOw1D,MAAM3vF,KAAKygF,OAClBlmD,OAASo1D,MAAM3vF,KAAKmxE,SAKpB8e,MAAQjwF,KAAKouF,YAMjB,OAAK6B,OAOLhuB,QAAU+K,SAASjL,QAAU,IAC7BK,MAAQ4K,SAAS/K,QAAU,IAC3BF,SAAW,GACXE,SAAW,GAGX7jC,MAAQ4uC,SAASzyC,OAAS,IAC1BA,QAAU,GAGV14B,EAAIkgE,QAAUA,QAAQxrC,QAAQ,GAAGhnB,QAAQ,SAAU,IAAM,GAEzDsgF,UAAYI,MAAQ,EAAI,IAAM,GAC9BH,OAAS56D,KAAKl1B,KAAKmxE,WAAaj8C,KAAK+6D,OAAS,IAAM,GACpDF,SAAW76D,KAAKl1B,KAAKygF,SAAWvrD,KAAK+6D,OAAS,IAAM,GACpDD,QAAU96D,KAAKl1B,KAAKwgF,iBAAmBtrD,KAAK+6D,OAAS,IAAM,GAGvDJ,UACA,KACCzxD,MAAQ0xD,OAAS1xD,MAAQ,IAAM,KAC/B7D,OAASu1D,OAASv1D,OAAS,IAAM,KACjCJ,KAAO41D,SAAW51D,KAAO,IAAM,KAC/BioC,OAASH,SAAWF,QAAU,IAAM,KACpCK,MAAQ4tB,QAAU5tB,MAAQ,IAAM,KAChCH,QAAU+tB,QAAU/tB,QAAU,IAAM,KACpCF,QAAUiuB,QAAUnuF,EAAI,IAAM,KA9BxB,MAkCf,IAAIquF,QAAU/P,SAAS7+E,UAwGvB,OAtGA4uF,QAAQ7qB,QAAU2a,UAClBkQ,QAAQ3lF,IAAMA,IACd2lF,QAAQxiF,IAAM+/E,MACdyC,QAAQ3N,SAAWmL,WACnBwC,QAAQrtC,GAAKA,GACbqtC,QAAQ/B,eAAiBA,eACzB+B,QAAQ9B,UAAYA,UACpB8B,QAAQ7B,UAAYA,UACpB6B,QAAQ5B,QAAUA,QAClB4B,QAAQ3B,OAASA,OACjB2B,QAAQ1B,QAAUA,QAClB0B,QAAQzB,SAAWA,SACnByB,QAAQxB,WAAaA,WACrBwB,QAAQvB,QAAUA,QAClBuB,QAAQp4D,QAAUk2D,UAClBkC,QAAQvP,QAAUiN,OAClBsC,QAAQtO,MAAQgN,QAChBsB,QAAQvjF,IAAMkiF,MACdqB,QAAQ3P,aAAeA,aACvB2P,QAAQnuB,QAAUA,QAClBmuB,QAAQjuB,QAAUA,QAClBiuB,QAAQ9tB,MAAQA,MAChB8tB,QAAQ/1D,KAAOA,KACf+1D,QAAQ1xD,MAAQA,MAChB0xD,QAAQ31D,OAASA,OACjB21D,QAAQ9xD,MAAQA,MAChB8xD,QAAQxJ,SAAWA,SACnBwJ,QAAQ7uB,YAAcuuB,cACtBM,QAAQtsF,SAAWgsF,cACnBM,QAAQtI,OAASgI,cACjBM,QAAQj8D,OAASA,OACjBi8D,QAAQvmB,WAAaA,WAErBumB,QAAQC,YAAc9oB,UAClB,sFACAuoB,eAEJM,QAAQpJ,KAAOA,KAIftd,eAAe,IAAK,EAAG,EAAG,QAC1BA,eAAe,IAAK,EAAG,EAAG,WAI1BsF,cAAc,IAAKL,aACnBK,cAAc,IAAKF,gBACnBY,cAAc,KAAK,SAAUn5B,MAAOlxC,MAAO2hE,QACvCA,OAAOjkE,GAAK,IAAIuC,KAAyB,IAApBkgB,WAAW+wB,WAEpCm5B,cAAc,KAAK,SAAUn5B,MAAOlxC,MAAO2hE,QACvCA,OAAOjkE,GAAK,IAAIuC,KAAK6nE,MAAM52B,WAK/B+sB,MAAM/+D,QAAU,SAEhBg/D,gBAAgBya,aAEhB1a,MAAMtjE,GAAK0rF,MACXpoB,MAAM97D,IAAMA,IACZ87D,MAAM77D,IAAMA,IACZ67D,MAAM/9D,IAAMA,IACZ+9D,MAAM5pC,IAAMyqC,UACZb,MAAMskB,KAAO+D,WACbroB,MAAM7oC,OAASwyD,WACf3pB,MAAMS,OAASA,OACfT,MAAMnvC,OAASmlD,mBACfhW,MAAM4gB,QAAUle,cAChB1C,MAAM5kD,SAAW0hE,eACjB9c,MAAM4D,SAAWA,SACjB5D,MAAM0R,SAAWmY,aACjB7pB,MAAMuoB,UAAYD,aAClBtoB,MAAMuG,WAAa0P,UACnBjW,MAAMwd,WAAaA,WACnBxd,MAAMqN,YAAcuc,gBACpB5pB,MAAMwR,YAAcuY,gBACpB/pB,MAAMkW,aAAeA,aACrBlW,MAAMqW,aAAeA,aACrBrW,MAAMqV,QAAUkB,YAChBvW,MAAMyR,cAAgBqY,kBACtB9pB,MAAMiJ,eAAiBA,eACvBjJ,MAAMgtB,qBAAuBlB,2BAC7B9rB,MAAMitB,sBAAwBjB,4BAC9BhsB,MAAM6hB,eAAiBL,kBACvBxhB,MAAM9hE,UAAYkqF,MAGlBpoB,MAAMktB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnBzgB,KAAM,aACN0gB,KAAM,QACNC,aAAc,WACdC,QAAS,eACTvgB,KAAM,aACNN,MAAO,WAGJ3M,MA3iLyEytB,K,sKCDnF,SAAU9zC,KAAM8zC,SAEb,aAEA,IAAIC,OAIA,IAAMA,OAAS,oBAAQ,mCAAa,MAAO/uF,IAC3CmC,OAAOC,QAaP,SAAU2sF,QAOd,IAAIC,UAA8B,mBAAXD,OAEvBE,oBAAsB13E,OAAO5B,iBAE7BhT,SAAW4U,OAAO5U,SAElBusF,IAAM33E,OAAOX,WAEbu4E,SAAW,SAASC,GAAIpvF,EAAG4S,SAAUsC,SAE7B+5E,kBACAG,GAAGz5E,iBAAiB3V,EAAG4S,WAAYsC,SAEnCk6E,GAAGC,YAAY,KAAOrvF,EAAG4S,WAIjC08E,YAAc,SAASF,GAAIpvF,EAAG4S,SAAUsC,SAEhC+5E,kBACAG,GAAG75E,oBAAoBvV,EAAG4S,WAAYsC,SAEtCk6E,GAAGG,YAAY,KAAOvvF,EAAG4S,WAIjCpC,KAAO,SAASg/E,KAEZ,OAAOA,IAAIh/E,KAAOg/E,IAAIh/E,OAASg/E,IAAIhiF,QAAQ,aAAa,KAG5DiiF,SAAW,SAASL,GAAIM,IAEpB,OAA+D,KAAvD,IAAMN,GAAGO,UAAY,KAAKljF,QAAQ,IAAMijF,GAAK,MAGzDE,SAAW,SAASR,GAAIM,IAEfD,SAASL,GAAIM,MACdN,GAAGO,UAA8B,KAAjBP,GAAGO,UAAoBD,GAAKN,GAAGO,UAAY,IAAMD,KAIzEG,YAAc,SAAST,GAAIM,IAEvBN,GAAGO,UAAYn/E,MAAM,IAAM4+E,GAAGO,UAAY,KAAKniF,QAAQ,IAAMkiF,GAAK,IAAK,OAG3E9vF,QAAU,SAAS8hE,KAEf,MAAO,QAAUx/D,KAAKhD,OAAOK,UAAUsC,SAASC,KAAK4/D,OAGzDI,OAAS,SAASJ,KAEd,MAAO,OAASx/D,KAAKhD,OAAOK,UAAUsC,SAASC,KAAK4/D,QAAU78D,MAAM68D,IAAI7rC,YAG5Ei6D,UAAY,SAAS14D,MAEjB,IAAIgF,IAAMhF,KAAKrC,SACf,OAAe,IAARqH,KAAqB,IAARA,KAGxB4uC,WAAa,SAAS7uC,MAGlB,OAASA,KAAO,GAAM,GAAKA,KAAO,KAAQ,GAAMA,KAAO,KAAQ,GAGnEi0C,eAAiB,SAASj0C,KAAMmkC,OAE5B,MAAO,CAAC,GAAI0K,WAAW7uC,MAAQ,GAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAImkC,QAGpFyvB,gBAAkB,SAAS34D,MAEnB0qC,OAAO1qC,OAAOA,KAAKb,SAAS,EAAE,EAAE,EAAE,IAG1Cy5D,aAAe,SAASzrF,EAAEC,GAGtB,OAAOD,EAAEsxB,YAAcrxB,EAAEqxB,WAG7BosC,OAAS,SAASh8B,GAAIxkC,KAAMwuF,WAExB,IAAI7rB,KAAM8rB,QACV,IAAK9rB,QAAQ3iE,MACTyuF,aAAuB5xF,IAAb2nC,GAAGm+B,QACwB,iBAAf3iE,KAAK2iE,OAAqC,OAAf3iE,KAAK2iE,YAA0C9lE,IAAxBmD,KAAK2iE,MAAM+rB,SAC3EruB,OAAOrgE,KAAK2iE,OACR6rB,YACAhqD,GAAGm+B,MAAQ,IAAI/gE,KAAK5B,KAAK2iE,MAAMvuC,YAG9Bj2B,QAAQ6B,KAAK2iE,OACd6rB,YACAhqD,GAAGm+B,MAAQ3iE,KAAK2iE,MAAMriE,MAAM,IAGhCkkC,GAAGm+B,MAAQnC,OAAO,GAAIxgE,KAAK2iE,MAAO6rB,YAE/BA,WAAcC,UACrBjqD,GAAGm+B,MAAQ3iE,KAAK2iE,OAGxB,OAAOn+B,IAGXmqD,UAAY,SAAShB,GAAIiB,UAAW99E,MAEhC,IAAI+9E,GAEA3tF,SAAS4tF,cACTD,GAAK3tF,SAAS4tF,YAAY,eACvBC,UAAUH,WAAW,GAAM,GAC9BC,GAAKruB,OAAOquB,GAAI/9E,MAChB68E,GAAGqB,cAAcH,KACV3tF,SAAS+tF,oBAChBJ,GAAK3tF,SAAS+tF,oBACdJ,GAAKruB,OAAOquB,GAAI/9E,MAChB68E,GAAGgB,UAAU,KAAOC,UAAWC,MAIvCK,eAAiB,SAAS/pB,UAStB,OARIA,SAAStG,MAAQ,IACjBsG,SAASzqC,MAAQh2B,KAAKia,KAAKja,KAAKqC,IAAIo+D,SAAStG,OAAO,IACpDsG,SAAStG,OAAS,IAElBsG,SAAStG,MAAQ,KACjBsG,SAASzqC,MAAQh2B,KAAKC,MAAMD,KAAKqC,IAAIo+D,SAAStG,OAAO,IACrDsG,SAAStG,OAAS,IAEfsG,UAMXkU,SAAW,CAGPrqD,MAAO,KAGP8Q,WAAOjjC,EAGPsyF,UAAW,oCAIXj5E,SAAU,cAGVk5E,YAAY,EAGZztE,OAAQ,aAIRvhB,SAAU,KAGV0tB,MAAO,KAGPuhE,YAAa,KAGbC,gBAAgB,EAGhBC,SAAU,EAIVC,uBAAwB,EAGxBC,cAAc,EAGdC,QAAS,KAETC,QAAS,KAGTC,UAAW,GAGXC,gBAAgB,EAGhBC,eAAe,EAGfC,QAAS,EACTC,QAAS,KACTC,cAAUpzF,EACVqzF,cAAUrzF,EAEVszF,WAAY,KACZC,SAAU,KAEVC,OAAO,EAGPC,WAAY,GAGZC,oBAAoB,EAGpBC,iCAAiC,EAGjCC,4CAA4C,EAG5CC,eAAgB,EAIhBC,aAAc,OAGdt7E,eAAWxY,EAGX+zF,mBAAoB,EAGpBC,KAAM,CACFC,cAAgB,iBAChBC,UAAgB,aAChBh6D,OAAgB,CAAC,UAAU,WAAW,QAAQ,QAAQ,MAAM,OAAO,OAAO,SAAS,YAAY,UAAU,WAAW,YACpHu6C,SAAgB,CAAC,SAAS,SAAS,UAAU,YAAY,WAAW,SAAS,YAC7ED,cAAgB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAIzD2f,MAAO,KAGPC,OAAQ,GAGRC,SAAU,KACVC,OAAQ,KACRC,QAAS,KACTC,OAAQ,KAGRC,eAAe,GAOnBC,cAAgB,SAASC,KAAM72D,IAAKo7C,MAGhC,IADAp7C,KAAO62D,KAAKjC,SACL50D,KAAO,GACVA,KAAO,EAEX,OAAOo7C,KAAOyb,KAAKX,KAAKxf,cAAc12C,KAAO62D,KAAKX,KAAKvf,SAAS32C,MAGpE82D,UAAY,SAASD,MAEjB,IAAIv2F,IAAM,GACNy2F,aAAe,QACnB,GAAIF,KAAKG,QAAS,CACd,IAAIH,KAAKhB,gCAQL,MAAO,6BAPPv1F,IAAIuE,KAAK,4BAELgyF,KAAKf,4CACLx1F,IAAIuE,KAAK,yBA6BrB,OAtBIgyF,KAAKI,YACL32F,IAAIuE,KAAK,eAETgyF,KAAKK,SACL52F,IAAIuE,KAAK,YAETgyF,KAAKM,aACL72F,IAAIuE,KAAK,eACTkyF,aAAe,QAEfF,KAAKO,UACL92F,IAAIuE,KAAK,aAETgyF,KAAKQ,WACL/2F,IAAIuE,KAAK,cAETgyF,KAAKS,cACLh3F,IAAIuE,KAAK,iBAETgyF,KAAKU,YACLj3F,IAAIuE,KAAK,eAEN,iBAAmBgyF,KAAK72D,IAAM,YAAc1/B,IAAIgzB,KAAK,KAAO,oBAAsByjE,aAAlF,wEAE0BF,KAAK92D,KAAO,sBAAwB82D,KAAK3yB,MAAQ,oBAAsB2yB,KAAK72D,IAAM,KACnG62D,KAAK72D,IAHd,kBAQXmiD,QAAU,SAASnnD,KAAM65D,wBAErB75D,KAAKb,SAAS,EAAG,EAAG,EAAG,GAIvB,IAAIq9D,QAAiBx8D,KAAKvC,UACtBg/D,QAAiBz8D,KAAKrC,SACtB++D,eAAiB7C,uBACjB8C,SAAiBD,eAAiB,EAClCE,YAAiB,EACjBC,YAAiB,SAAS73D,KAAO,OAAQA,IAAM43D,YAAc,GAAKA,aAGtE58D,KAAKpB,QAAQ49D,QAAUG,SAAWE,YAAYJ,UAE9C,IAAIK,OAAc,IAAI7wF,KAAK+zB,KAAKnC,cAAe,EAAG6+D,gBAC9CK,SAAc,MACdC,aAAeh9D,KAAKvB,UAAYq+D,OAAOr+D,WAAas+D,SAGxD,OAFkB,EAAIhuF,KAAKwb,OAAOyyE,YAAcL,SAAWE,YAAYC,OAAOn/D,WAAai/D,cAK/FK,WAAa,SAAU3tF,EAAGC,EAAGuR,EAAG+4E,wBAC5B,IAAI75D,KAAO,IAAI/zB,KAAK6U,EAAGvR,EAAGD,GAG1B,MAAO,0BAFIsoF,UAAYD,OAAO33D,MAAMmnD,UAAYA,QAAQnnD,KAAM65D,yBAErB,SAG7CqD,UAAY,SAASl8D,KAAM05D,MAAOP,cAAegD,eAE7C,MAAO,uBAAyBhD,cAAgB,mBAAqB,KAAOgD,cAAgB,eAAiB,IAAM,MAAQzC,MAAQ15D,KAAKtF,UAAYsF,MAAM1I,KAAK,IAAM,SAGzK8kE,WAAa,SAAStkE,MAElB,MAAO,UAAYA,KAAKR,KAAK,IAAM,YAGvC+kE,WAAa,SAASxB,MAElB,IAAIp2F,EAAGH,IAAM,GAIb,IAHIu2F,KAAK3B,gBACL50F,IAAIuE,KAAK,aAERpE,EAAI,EAAGA,EAAI,EAAGA,IACfH,IAAIuE,KAAK,gCAAkC+xF,cAAcC,KAAMp2F,GAAK,KAAOm2F,cAAcC,KAAMp2F,GAAG,GAAQ,gBAE9G,MAAO,eAAiBo2F,KAAKnB,MAAQp1F,IAAIo2B,UAAYp2B,KAAKgzB,KAAK,IAAM,iBAGzEglE,YAAc,SAASl2F,SAAUkH,EAAGy2B,KAAMmkC,MAAOq0B,QAASC,QAEtD,IAAI/3F,EAAGgJ,EAAGnJ,IAKNm4F,UACAC,SALA7B,KAAOz0F,SAASu2F,GAChBC,UAAY74D,OAAS82D,KAAKzB,QAC1ByD,UAAY94D,OAAS82D,KAAKxB,QAC1Bh+E,KAAO,YAAcmhF,OAAS,6DAG9BM,MAAO,EACP30F,MAAO,EAEX,IAAK7D,IAAM,GAAIG,EAAI,EAAGA,EAAI,GAAIA,IAC1BH,IAAIuE,KAAK,mBAAqBk7B,OAASw4D,QAAU93F,EAAI6I,EAAI,GAAK7I,EAAI6I,GAAK,KAClE7I,IAAMyjE,MAAQ,uBAAwB,KACrC00B,WAAan4F,EAAIo2F,KAAKvB,UAAcuD,WAAap4F,EAAIo2F,KAAKtB,SAAY,uBAAyB,IAAM,IACvGsB,KAAKX,KAAK95D,OAAO37B,GAAK,aAa9B,IAVAg4F,UAAY,2BAA6B5B,KAAKX,KAAK95D,OAAO8nC,OAAS,+DAAiE5jE,IAAIgzB,KAAK,IAAM,kBAE/I9vB,QAAQqzF,KAAK5B,YACbx0F,EAAIo2F,KAAK5B,UAAU,GACnBxrF,EAAIotF,KAAK5B,UAAU,GAAK,IAExBx0F,EAAIs/B,KAAO82D,KAAK5B,UAChBxrF,EAAI,EAAIs2B,KAAO82D,KAAK5B,WAGnB30F,IAAM,GAAIG,EAAIgJ,GAAKhJ,GAAKo2F,KAAKxB,QAAS50F,IACnCA,GAAKo2F,KAAKzB,SACV90F,IAAIuE,KAAK,kBAAoBpE,EAAI,KAAOA,IAAMs/B,KAAO,uBAAwB,IAAM,IAAM,EAAM,aA0BvG,OAvBA24D,SAAW,2BAA6B34D,KAAO82D,KAAKlB,WAAa,8DAAgEr1F,IAAIgzB,KAAK,IAAM,kBAE5IujE,KAAKjB,mBACLv+E,MAAQqhF,SAAWD,UAEnBphF,MAAQohF,UAAYC,SAGpBE,YAAwB,IAAV10B,OAAe2yB,KAAKvB,UAAYpxB,SAC9C40B,MAAO,GAGPD,YAAwB,KAAV30B,OAAgB2yB,KAAKtB,UAAYrxB,SAC/C//D,MAAO,GAGD,IAANmF,IACA+N,MAAQ,4BAA8ByhF,KAAO,GAAK,gBAAkB,mBAAqBjC,KAAKX,KAAKC,cAAgB,aAEnH7sF,IAAOlH,SAASu2F,GAAG5C,eAAiB,IACpC1+E,MAAQ,4BAA8BlT,KAAO,GAAK,gBAAkB,mBAAqB0yF,KAAKX,KAAKE,UAAY,aAG5G/+E,KAAQ,UAGnB0hF,YAAc,SAASlC,KAAM1gF,KAAMqiF,QAE/B,MAAO,0FAA4FA,OAAS,KAAOH,WAAWxB,MAAQuB,WAAWjiF,MAAQ,YAO7J6iF,QAAU,SAASC,SAEf,IAAIr3F,KAAOC,KACPg1F,KAAOj1F,KAAK+mE,OAAOswB,SAEvBr3F,KAAKs3F,aAAe,SAASt1F,GAEzB,GAAKhC,KAAKu3F,GAAV,CAIA,IAAI32F,QADJoB,EAAIA,GAAKuX,OAAOnL,OACDxN,QAAUoB,EAAEw1F,WAC3B,GAAK52F,OAuBL,GAnBK6wF,SAAS7wF,OAAQ,kBACd6wF,SAAS7wF,OAAQ,gBAAmB6wF,SAAS7wF,OAAQ,aAAgB6wF,SAAS7wF,OAAOsQ,WAAY,eAW5FugF,SAAS7wF,OAAQ,aACtBZ,KAAKy3F,YAEAhG,SAAS7wF,OAAQ,cACtBZ,KAAKw0F,aAdLx0F,KAAKg4B,QAAQ,IAAI3yB,KAAKzE,OAAOuS,aAAa,kBAAmBvS,OAAOuS,aAAa,mBAAoBvS,OAAOuS,aAAa,mBACrH8hF,KAAK1xD,OACL2tD,KAAI,WACAlxF,KAAK03F,OACDzC,KAAKZ,mBAAqBY,KAAKxiE,OAC/BwiE,KAAKxiE,MAAMklE,SAEhB,OAUVlG,SAAS7wF,OAAQ,eASlBZ,KAAK43F,IAAK,MATwB,CAElC,IAAI51F,EAAE4M,eAIF,OADA5M,EAAE61F,aAAc,GACT,EAHP71F,EAAE4M,oBAUd5O,KAAK83F,UAAY,SAAS91F,GAGtB,IAAIpB,QADJoB,EAAIA,GAAKuX,OAAOnL,OACDxN,QAAUoB,EAAEw1F,WACtB52F,SAGD6wF,SAAS7wF,OAAQ,qBACjBZ,KAAK+3F,UAAUn3F,OAAOnB,OAEjBgyF,SAAS7wF,OAAQ,qBACtBZ,KAAKg4F,SAASp3F,OAAOnB,SAI7BO,KAAKi4F,aAAe,SAASj2F,GAIzB,GAFAA,EAAIA,GAAKuX,OAAOnL,MAEZpO,KAAKk4F,YAEL,OAAOl2F,EAAEy+D,SACL,KAAK,GACL,KAAK,GACGw0B,KAAKxiE,OACLwiE,KAAKxiE,MAAMklE,OAEf,MACJ,KAAK,GACD33F,KAAKm4F,WAAW,WAAY,GAC5B,MACJ,KAAK,GACDn4F,KAAKm4F,WAAW,WAAY,GAC5B,MACJ,KAAK,GACDn4F,KAAKm4F,WAAW,MAAO,GACvB,MACJ,KAAK,GACDn4F,KAAKm4F,WAAW,MAAO,GACvB,MACJ,KAAK,EACL,KAAK,GACDn4F,KAAKg4B,QAAQ,QAM7Bh4B,KAAKo4F,iBAAmB,WAEpB,GAAInD,KAAK1jE,MACL,OAAO0jE,KAAK1jE,MAAM0jE,KAAKxiE,MAAMhzB,MAAOw1F,KAAK7vE,QACtC,GAAI4rE,UAAW,CAClB,IAAI53D,KAAO23D,OAAOkE,KAAKxiE,MAAMhzB,MAAOw1F,KAAK7vE,OAAQ6vE,KAAK/B,cACtD,OAAQ95D,MAAQA,KAAKksC,UAAalsC,KAAK+sD,SAAW,KAElD,OAAO,IAAI9gF,KAAKA,KAAKksB,MAAM0jE,KAAKxiE,MAAMhzB,SAI9CO,KAAKq4F,eAAiB,SAASr2F,GAE3B,IAAIo3B,KAEAp3B,EAAEs2F,UAAYt4F,OAGlBo5B,KAAOp5B,KAAKo4F,mBACRt0B,OAAO1qC,OACTp5B,KAAKg4B,QAAQoB,MAEVp5B,KAAKu3F,IACNv3F,KAAKu4F,SAIbv4F,KAAKw4F,cAAgB,WAEjBx4F,KAAKu4F,QAGTv4F,KAAKy4F,cAAgB,WAEjBz4F,KAAKu4F,QAGTv4F,KAAK04F,aAAe,WAGhB,IAAIC,IAAMh0F,SAASi0F,cACnB,GACI,GAAInH,SAASkH,IAAK,eACd,aAGAA,IAAMA,IAAIznF,YAEblR,KAAK43F,KACN53F,KAAK64F,GAAK3H,KAAI,WACVlxF,KAAK03F,SACN,KAEP13F,KAAK43F,IAAK,GAGd53F,KAAK84F,SAAW,SAAS92F,GAGrB,IAAIpB,QADJoB,EAAIA,GAAKuX,OAAOnL,OACDxN,QAAUoB,EAAEw1F,WACvBmB,IAAM/3F,OACV,GAAKA,OAAL,EAGKqwF,mBAAqBQ,SAAS7wF,OAAQ,iBAClCA,OAAOm4F,WACRn4F,OAAOiF,aAAa,WAAY,WAChCsrF,SAASvwF,OAAQ,SAAUZ,KAAK83F,aAGxC,GACI,GAAIrG,SAASkH,IAAK,gBAAkBA,MAAQ1D,KAAK+D,QAC7C,aAGAL,IAAMA,IAAIznF,YACdlR,KAAKu3F,IAAM32F,SAAWq0F,KAAK+D,SAAWL,MAAQ1D,KAAK+D,SACnDh5F,KAAK03F,SAIb13F,KAAKoxF,GAAKzsF,SAASY,cAAc,OACjCvF,KAAKoxF,GAAGO,UAAY,eAAiBsD,KAAKnB,MAAQ,UAAY,KAAOmB,KAAKR,MAAQ,IAAMQ,KAAKR,MAAQ,IAErGtD,SAASnxF,KAAKoxF,GAAI,YAAapxF,KAAKs3F,cAAc,GAClDnG,SAASnxF,KAAKoxF,GAAI,WAAYpxF,KAAKs3F,cAAc,GACjDnG,SAASnxF,KAAKoxF,GAAI,SAAUpxF,KAAK83F,WAE7B7C,KAAKF,eACL5D,SAASxsF,SAAU,UAAW3E,KAAKi4F,cAGnChD,KAAKxiE,QACDwiE,KAAKn8E,UACLm8E,KAAKn8E,UAAUlD,YAAY5V,KAAKoxF,IACzB6D,KAAK1xD,MACZ5+B,SAASo+D,KAAKntD,YAAY5V,KAAKoxF,IAE/B6D,KAAKxiE,MAAMvhB,WAAW6E,aAAa/V,KAAKoxF,GAAI6D,KAAKxiE,MAAM3b,aAE3Dq6E,SAAS8D,KAAKxiE,MAAO,SAAUzyB,KAAKq4F,gBAE/BpD,KAAKnC,cACNmC,KAAKnC,YAAc9yF,KAAKo4F,mBACxBnD,KAAKlC,gBAAiB,IAI9B,IAAIkG,QAAUhE,KAAKnC,YAEfhvB,OAAOm1B,SACHhE,KAAKlC,eACL/yF,KAAKg4B,QAAQihE,SAAS,GAEtBj5F,KAAKk5F,SAASD,SAGlBj5F,KAAKk5F,SAAS,IAAI7zF,MAGlB4vF,KAAK1xD,OACLtjC,KAAKy3F,OACL13F,KAAKoxF,GAAGO,WAAa,YACrBR,SAAS8D,KAAK+D,QAAS,QAASh5F,KAAKy4F,eACrCtH,SAAS8D,KAAK+D,QAAS,QAASh5F,KAAKw4F,eACrCrH,SAAS8D,KAAK+D,QAAS,OAAQh5F,KAAK04F,eAEpCz4F,KAAKs4F,QAmlBb,OA3kBAnB,QAAQ71F,UAAY,CAMhBwlE,OAAQ,SAASswB,SAERp3F,KAAK82F,KACN92F,KAAK82F,GAAK9yB,OAAO,GAAI6Y,UAAU,IAGnC,IAAImY,KAAOhxB,OAAOhkE,KAAK82F,GAAIM,SAAS,GAEpCpC,KAAKnB,QAAUmB,KAAKnB,MAEpBmB,KAAKxiE,MAASwiE,KAAKxiE,OAASwiE,KAAKxiE,MAAM0/D,SAAY8C,KAAKxiE,MAAQ,KAEhEwiE,KAAKR,MAAgC,iBAAhBQ,KAAKR,OAAuBQ,KAAKR,MAAQQ,KAAKR,MAAQ,KAE3EQ,KAAK1xD,cAA0BjjC,IAAf20F,KAAK1xD,MAAsB0xD,KAAKxiE,OAASwiE,KAAK1xD,MAAQ0xD,KAAKxiE,OAE3EwiE,KAAK+D,QAAW/D,KAAK+D,SAAW/D,KAAK+D,QAAQ7G,SAAY8C,KAAK+D,QAAU/D,KAAKxiE,MAE7EwiE,KAAKkE,kBAAoBlE,KAAKkE,gBAE9BlE,KAAKmE,aAA8C,mBAAvBnE,KAAKmE,aAA+BnE,KAAKmE,aAAe,KAEpF,IAAIC,IAAM3zE,SAASuvE,KAAKd,eAAgB,KAAO,EAmB/C,GAlBAc,KAAKd,eAAiBkF,IAAM,EAAI,EAAIA,IAE/Bv1B,OAAOmxB,KAAK9B,WACb8B,KAAK9B,SAAU,GAEdrvB,OAAOmxB,KAAK7B,WACb6B,KAAK7B,SAAU,GAEd6B,KAAK9B,SAAW8B,KAAK7B,SAAY6B,KAAK7B,QAAU6B,KAAK9B,UACtD8B,KAAK7B,QAAU6B,KAAK9B,SAAU,GAE9B8B,KAAK9B,SACLlzF,KAAKq5F,WAAWrE,KAAK9B,SAErB8B,KAAK7B,SACLnzF,KAAKs5F,WAAWtE,KAAK7B,SAGrBxxF,QAAQqzF,KAAK5B,WAAY,CACzB,IAAImG,UAAW,IAAIn0F,MAAO4xB,cAAgB,GAC1Cg+D,KAAK5B,UAAU,GAAK3tE,SAASuvE,KAAK5B,UAAU,GAAI,KAAOmG,SACvDvE,KAAK5B,UAAU,GAAK3tE,SAASuvE,KAAK5B,UAAU,GAAI,KAAOmG,cAEvDvE,KAAK5B,UAAYlrF,KAAKqC,IAAIkb,SAASuvE,KAAK5B,UAAW,MAAQvW,SAASuW,UAChE4B,KAAK5B,UAAY,MACjB4B,KAAK5B,UAAY,KAIzB,OAAO4B,MAMXpxF,SAAU,SAASuhB,QAGf,OADAA,OAASA,QAAUnlB,KAAK82F,GAAG3xE,OACtB0+C,OAAO7jE,KAAK6C,IAGb7C,KAAK82F,GAAGlzF,SACH5D,KAAK82F,GAAGlzF,SAAS5D,KAAK6C,GAAIsiB,QAE/B4rE,UACKD,OAAO9wF,KAAK6C,IAAIsiB,OAAOA,QAEzBnlB,KAAK6C,GAAG22F,eARJ,IAcfC,UAAW,WAEP,OAAO1I,UAAYD,OAAO9wF,KAAK6C,IAAM,MAMzC62F,UAAW,SAASvgE,KAAMwgE,iBAElB5I,WAAaD,OAAO9pB,SAAS7tC,OAC7Bn5B,KAAK+3B,QAAQoB,KAAK+sD,SAAUyT,kBAOpC/iE,QAAS,WAEL,OAAOitC,OAAO7jE,KAAK6C,IAAM,IAAIuC,KAAKpF,KAAK6C,GAAG+0B,WAAa,MAM3DG,QAAS,SAASoB,KAAMwgE,iBAEpB,IAAKxgE,KAQD,OAPAn5B,KAAK6C,GAAK,KAEN7C,KAAK82F,GAAGtkE,QACRxyB,KAAK82F,GAAGtkE,MAAMhzB,MAAQ,GACtB2yF,UAAUnyF,KAAK82F,GAAGtkE,MAAO,SAAU,CAAE6lE,QAASr4F,QAG3CA,KAAK45F,OAKhB,GAHoB,iBAATzgE,OACPA,KAAO,IAAI/zB,KAAKA,KAAKksB,MAAM6H,QAE1B0qC,OAAO1qC,MAAZ,CAIA,IAAI7xB,IAAMtH,KAAK82F,GAAG5D,QACd3rF,IAAMvH,KAAK82F,GAAG3D,QAEdtvB,OAAOv8D,MAAQ6xB,KAAO7xB,IACtB6xB,KAAO7xB,IACAu8D,OAAOt8D,MAAQ4xB,KAAO5xB,MAC7B4xB,KAAO5xB,KAGXvH,KAAK6C,GAAK,IAAIuC,KAAK+zB,KAAKvB,WACxBk6D,gBAAgB9xF,KAAK6C,IACrB7C,KAAKi5F,SAASj5F,KAAK6C,IAEf7C,KAAK82F,GAAGtkE,QACRxyB,KAAK82F,GAAGtkE,MAAMhzB,MAAQQ,KAAK4D,WAC3BuuF,UAAUnyF,KAAK82F,GAAGtkE,MAAO,SAAU,CAAE6lE,QAASr4F,QAE7C25F,iBAA+C,mBAArB35F,KAAK82F,GAAGpC,UACnC10F,KAAK82F,GAAGpC,SAAS7wF,KAAK7D,KAAMA,KAAK42B,aAOzCiqC,MAAO,WAEH7gE,KAAK+3B,QAAQ,OAMjBkhE,SAAU,SAAS9/D,MAEf,IAAI0gE,aAAc,EAElB,GAAKh2B,OAAO1qC,MAAZ,CAIA,GAAIn5B,KAAK85F,UAAW,CAChB,IAAIC,iBAAmB,IAAI30F,KAAKpF,KAAK85F,UAAU,GAAG57D,KAAMl+B,KAAK85F,UAAU,GAAGz3B,MAAO,GAC7E23B,gBAAkB,IAAI50F,KAAKpF,KAAK85F,UAAU95F,KAAK85F,UAAUn7F,OAAO,GAAGu/B,KAAMl+B,KAAK85F,UAAU95F,KAAK85F,UAAUn7F,OAAO,GAAG0jE,MAAO,GACxH43B,YAAc9gE,KAAKvB,UAEvBoiE,gBAAgBphE,SAASohE,gBAAgBxiE,WAAW,GACpDwiE,gBAAgBjiE,QAAQiiE,gBAAgBpjE,UAAU,GAClDijE,YAAeI,YAAcF,iBAAiBniE,WAAaoiE,gBAAgBpiE,UAAYqiE,YAGvFJ,cACA75F,KAAK85F,UAAY,CAAC,CACdz3B,MAAOlpC,KAAK3B,WACZ0G,KAAM/E,KAAKnC,gBAEc,UAAzBh3B,KAAK82F,GAAG3C,eACRn0F,KAAK85F,UAAU,GAAGz3B,OAAS,EAAIriE,KAAK82F,GAAG5C,iBAI/Cl0F,KAAKk6F,oBAGThC,WAAY,SAAShjE,KAAMiF,MAEvB,IAGIggE,OAHAh8D,IAAMn+B,KAAK42B,WAAa,IAAIxxB,KAC5Bg1F,WAA4B,GAAf30E,SAAS0U,MAAS,GAAG,GAAG,IAI5B,QAATjF,KACAilE,OAAS,IAAI/0F,KAAK+4B,IAAIrG,UAAYsiE,YAClB,aAATllE,OACPilE,OAAS,IAAI/0F,KAAK+4B,IAAIrG,UAAYsiE,aAGtCp6F,KAAK+3B,QAAQoiE,SAGjBD,gBAAiB,WACbl6F,KAAK85F,UAAU,GAAKpH,eAAe1yF,KAAK85F,UAAU,IAClD,IAAK,IAAIryF,EAAI,EAAGA,EAAIzH,KAAK82F,GAAG5C,eAAgBzsF,IACxCzH,KAAK85F,UAAUryF,GAAKirF,eAAe,CAC/BrwB,MAAOriE,KAAK85F,UAAU,GAAGz3B,MAAQ56D,EACjCy2B,KAAMl+B,KAAK85F,UAAU,GAAG57D,OAGhCl+B,KAAK45F,QAGTS,UAAW,WAEPr6F,KAAKi5F,SAAS,IAAI7zF,OAMtB0yF,UAAW,SAASz1B,OAEXz7D,MAAMy7D,SACPriE,KAAK85F,UAAU,GAAGz3B,MAAQ58C,SAAS48C,MAAO,IAC1CriE,KAAKk6F,oBAIb3F,UAAW,WAEPv0F,KAAK85F,UAAU,GAAGz3B,QAClBriE,KAAKk6F,mBAGT1C,UAAW,WAEPx3F,KAAK85F,UAAU,GAAGz3B,QAClBriE,KAAKk6F,mBAMTnC,SAAU,SAAS75D,MAEVt3B,MAAMs3B,QACPl+B,KAAK85F,UAAU,GAAG57D,KAAOzY,SAASyY,KAAM,IACxCl+B,KAAKk6F,oBAObb,WAAY,SAAS75F,OAEdA,iBAAiB4F,MAChB0sF,gBAAgBtyF,OAChBQ,KAAK82F,GAAG5D,QAAU1zF,MAClBQ,KAAK82F,GAAGvD,QAAW/zF,MAAMw3B,cACzBh3B,KAAK82F,GAAGrD,SAAWj0F,MAAMg4B,aAEzBx3B,KAAK82F,GAAG5D,QAAUrW,SAASqW,QAC3BlzF,KAAK82F,GAAGvD,QAAW1W,SAAS0W,QAC5BvzF,KAAK82F,GAAGrD,SAAW5W,SAAS4W,SAC5BzzF,KAAK82F,GAAGnD,WAAa9W,SAAS8W,YAGlC3zF,KAAK45F,QAMTN,WAAY,SAAS95F,OAEdA,iBAAiB4F,MAChB0sF,gBAAgBtyF,OAChBQ,KAAK82F,GAAG3D,QAAU3zF,MAClBQ,KAAK82F,GAAGtD,QAAUh0F,MAAMw3B,cACxBh3B,KAAK82F,GAAGpD,SAAWl0F,MAAMg4B,aAEzBx3B,KAAK82F,GAAG3D,QAAUtW,SAASsW,QAC3BnzF,KAAK82F,GAAGtD,QAAU3W,SAAS2W,QAC3BxzF,KAAK82F,GAAGpD,SAAW7W,SAAS6W,SAC5B1zF,KAAK82F,GAAGlD,SAAW/W,SAAS+W,UAGhC5zF,KAAK45F,QAGTU,cAAe,SAAS96F,OAEpBQ,KAAK82F,GAAGnD,WAAan0F,OAGzB+6F,YAAa,SAAS/6F,OAElBQ,KAAK82F,GAAGlD,SAAWp0F,OAMvBo6F,KAAM,SAAS5yC,OAEX,GAAKhnD,KAAKs3F,IAAOtwC,MAAjB,CAGA,IAMI2vC,OANA3B,KAAOh1F,KAAK82F,GACZvD,QAAUyB,KAAKzB,QACfC,QAAUwB,KAAKxB,QACfC,SAAWuB,KAAKvB,SAChBC,SAAWsB,KAAKtB,SAChBl+E,KAAO,GAGPxV,KAAKw6F,IAAMjH,UACXvzF,KAAKw6F,GAAKjH,SACL3sF,MAAM6sF,WAAazzF,KAAKy6F,GAAKhH,WAC9BzzF,KAAKy6F,GAAKhH,WAGdzzF,KAAKw6F,IAAMhH,UACXxzF,KAAKw6F,GAAKhH,SACL5sF,MAAM8sF,WAAa1zF,KAAKy6F,GAAK/G,WAC9B1zF,KAAKy6F,GAAK/G,WAIlB,IAAK,IAAIjsF,EAAI,EAAGA,EAAIutF,KAAKd,eAAgBzsF,IACrCkvF,OAAS,cAAgBzuF,KAAKqB,SAAS3F,SAAS,IAAI2L,QAAQ,WAAY,IAAI45D,OAAO,EAAG,GACtF3zD,MAAQ,4BAA8BihF,YAAYz2F,KAAMyH,EAAGzH,KAAK85F,UAAUryF,GAAGy2B,KAAMl+B,KAAK85F,UAAUryF,GAAG46D,MAAOriE,KAAK85F,UAAU,GAAG57D,KAAMy4D,QAAU32F,KAAK06F,OAAO16F,KAAK85F,UAAUryF,GAAGy2B,KAAMl+B,KAAK85F,UAAUryF,GAAG46D,MAAOs0B,QAAU,SAGzN32F,KAAKmxF,GAAG17E,UAAYD,KAEhBw/E,KAAK1xD,OACkB,WAApB0xD,KAAKxiE,MAAMpjB,MACV6hF,KAAI,WACA+D,KAAK+D,QAAQ4B,UACd,GAImB,mBAAnB36F,KAAK82F,GAAGjC,QACf70F,KAAK82F,GAAGjC,OAAO70F,MAGfg1F,KAAK1xD,OAEL0xD,KAAKxiE,MAAM5sB,aAAa,aAAcovF,KAAKrC,aAInDiI,eAAgB,WAEZ,IAAIpoE,MAAOkmE,IAAK/jE,MAAOkmE,OAAQC,cAAeC,eAAgBC,UAAWj0F,KAAM4S,IAAKshF,WAAYC,YAAaC,cAE7G,IAAIn7F,KAAK82F,GAAGj+E,UAAZ,CAcA,GAZA7Y,KAAKmxF,GAAG5rF,MAAMmU,SAAW,WAGzBg/E,IADAlmE,MAAQxyB,KAAK82F,GAAGiC,QAEhBpkE,MAAQ30B,KAAKmxF,GAAGiK,YAChBP,OAAS76F,KAAKmxF,GAAGkK,aACjBP,cAAgBxhF,OAAOgiF,YAAc52F,SAASI,gBAAgBy2F,YAC9DR,eAAiBzhF,OAAOkiF,aAAe92F,SAASI,gBAAgB22F,aAChET,UAAY1hF,OAAOoiF,aAAeh3F,SAASo+D,KAAKk4B,WAAat2F,SAASI,gBAAgBk2F,UACtFE,aAAc,EACdC,eAAgB,EAE2B,mBAAhC3oE,MAAMhY,sBAEbzT,MADAk0F,WAAazoE,MAAMhY,yBACDzT,KAAOuS,OAAOqiF,YAChChiF,IAAMshF,WAAWtwC,OAASrxC,OAAOoiF,iBAIjC,IAFA30F,KAAO2xF,IAAIkD,WACXjiF,IAAO++E,IAAImD,UAAYnD,IAAI2C,aACpB3C,IAAMA,IAAIoD,cACb/0F,MAAQ2xF,IAAIkD,WACZjiF,KAAQ++E,IAAImD,WAKf77F,KAAK82F,GAAGlE,YAAc7rF,KAAO4tB,MAAQmmE,eAElC96F,KAAK82F,GAAGp9E,SAASlL,QAAQ,UAAY,GACrCzH,KAAO4tB,MAAQnC,MAAM4oE,YAAc,KAGvCr0F,KAAOA,KAAO4tB,MAAQnC,MAAM4oE,YAC5BF,aAAc,IAEbl7F,KAAK82F,GAAGlE,YAAcj5E,IAAMkhF,OAASE,eAAiBC,WAEnDh7F,KAAK82F,GAAGp9E,SAASlL,QAAQ,QAAU,GACnCmL,IAAMkhF,OAASroE,MAAM6oE,aAAe,KAGxC1hF,IAAMA,IAAMkhF,OAASroE,MAAM6oE,aAC3BF,eAAgB,GAGpBn7F,KAAKmxF,GAAG5rF,MAAMwB,KAAOA,KAAO,KAC5B/G,KAAKmxF,GAAG5rF,MAAMoU,IAAMA,IAAM,KAE1Bg4E,SAAS3xF,KAAKmxF,GAAI+J,YAAc,eAAiB,iBACjDvJ,SAAS3xF,KAAKmxF,GAAIgK,cAAgB,iBAAmB,eACrDvJ,YAAY5xF,KAAKmxF,GAAK+J,YAA+B,gBAAjB,gBACpCtJ,YAAY5xF,KAAKmxF,GAAKgK,cAAmC,cAAnB,oBAM1CT,OAAQ,SAASx8D,KAAMmkC,MAAOs0B,QAE1B,IAAI3B,KAASh1F,KAAK82F,GACdzxF,IAAS,IAAID,KACb+0B,KAASg4C,eAAej0C,KAAMmkC,OAC9BxsD,OAAS,IAAIzQ,KAAK84B,KAAMmkC,MAAO,GAAGvrC,SAClCxiB,KAAS,GACTvK,IAAS,GACb+nF,gBAAgBzsF,KACZ2vF,KAAKjC,SAAW,IAChBl9E,QAAUm/E,KAAKjC,UACF,IACTl9E,QAAU,GAUlB,IAPA,IAAIy+E,cAA0B,IAAVjyB,MAAc,GAAKA,MAAQ,EAC3CkyB,UAAsB,KAAVlyB,MAAe,EAAIA,MAAQ,EACvC05B,oBAAgC,IAAV15B,MAAcnkC,KAAO,EAAIA,KAC/C89D,gBAA4B,KAAV35B,MAAenkC,KAAO,EAAIA,KAC5C+9D,oBAAsB9pB,eAAe4pB,oBAAqBzH,eAC1D54C,MAAQvhB,KAAOtkB,OACfmgB,MAAQ0lB,MACN1lB,MAAQ,GACVA,OAAS,EAEb0lB,OAAS,EAAI1lB,MAEb,IADA,IAAIkmE,gBAAiB,EACZt9F,EAAI,EAAGolB,EAAI,EAAGplB,EAAI88C,MAAO98C,IAClC,CACI,IAAIu/B,IAAM,IAAI/4B,KAAK84B,KAAMmkC,MAAYzjE,EAAIiX,OAAT,GAC5By/E,aAAazxB,OAAO7jE,KAAK6C,KAAMkvF,aAAa5zD,IAAKn+B,KAAK6C,IACtDwyF,QAAUtD,aAAa5zD,IAAK94B,KAC5BkwF,UAAwD,IAA7CP,KAAKP,OAAOjmF,QAAQ2vB,IAAIq7D,gBACnCrE,QAAUv2F,EAAIiX,QAAUjX,GAAMu7B,KAAOtkB,OACrCsmF,UAAiBv9F,EAAIiX,OAAT,EACZumF,YAAc/5B,MACdg6B,WAAan+D,KACbu3D,aAAeT,KAAKrB,YAAc5B,aAAaiD,KAAKrB,WAAYx1D,KAChEu3D,WAAaV,KAAKpB,UAAY7B,aAAaiD,KAAKpB,SAAUz1D,KAC1Dq3D,UAAYR,KAAKrB,YAAcqB,KAAKpB,UAAYoB,KAAKrB,WAAax1D,KAAOA,IAAM62D,KAAKpB,SAMpFuB,UACIv2F,EAAIiX,QACJsmF,UAAYF,oBAAsBE,UAClCC,YAAc9H,cACd+H,WAAaN,sBAEbI,WAAwBhiE,KACxBiiE,YAAc7H,UACd8H,WAAaL,kBAIrB,IAAIM,UAAY,CACRn+D,IAAKg+D,UACL95B,MAAO+5B,YACPl+D,KAAMm+D,WACN9G,SAAUA,SACVD,WAAYA,WACZD,QAASA,QACTD,WAxBUJ,KAAK9B,SAAW/0D,IAAM62D,KAAK9B,SAC3B8B,KAAK7B,SAAWh1D,IAAM62D,KAAK7B,SAC3B6B,KAAKkE,iBAAmBrH,UAAU1zD,MAClC62D,KAAKmE,cAAgBnE,KAAKmE,aAAah7D,KAsBjDg3D,QAASA,QACTM,aAAcA,aACdC,WAAYA,WACZF,UAAWA,UACXxB,gCAAiCgB,KAAKhB,gCACtCC,2CAA4Ce,KAAKf,4CAGrDe,KAAK1B,eAAiBgC,aACtB4G,gBAAiB,GAGrBnyF,IAAI/G,KAAKiyF,UAAUqH,YAEP,KAANt4E,IACEgxE,KAAK3B,gBACLtpF,IAAI4tC,QAAQy+C,WAAWx3F,EAAIiX,OAAQwsD,MAAOnkC,KAAM82D,KAAKhC,yBAEzD1+E,KAAKtR,KAAKqzF,UAAUtsF,IAAKirF,KAAKnB,MAAOmB,KAAK1B,cAAe4I,iBACzDnyF,IAAM,GACNia,EAAI,EACJk4E,gBAAiB,GAGzB,OAAOhF,YAAYlC,KAAM1gF,KAAMqiF,SAGnCsB,UAAW,WAEP,OAAOj4F,KAAKs3F,IAGhBgB,KAAM,WAEGt4F,KAAKi4F,cACNj4F,KAAKs3F,IAAK,EACVt3F,KAAK45F,OACLhI,YAAY5xF,KAAKmxF,GAAI,aACjBnxF,KAAK82F,GAAGxzD,QACR4tD,SAASxsF,SAAU,QAAS1E,KAAK64F,UACjC74F,KAAK46F,kBAEqB,mBAAnB56F,KAAK82F,GAAGnC,QACf30F,KAAK82F,GAAGnC,OAAO9wF,KAAK7D,QAKhCy3F,KAAM,WAEF,IAAIrvF,EAAIpI,KAAKs3F,IACH,IAANlvF,IACIpI,KAAK82F,GAAGxzD,OACR+tD,YAAY3sF,SAAU,QAAS1E,KAAK64F,UAGnC74F,KAAK82F,GAAGj+E,YACT7Y,KAAKmxF,GAAG5rF,MAAMmU,SAAW,SACzB1Z,KAAKmxF,GAAG5rF,MAAMwB,KAAO,OACrB/G,KAAKmxF,GAAG5rF,MAAMoU,IAAM,QAExBg4E,SAAS3xF,KAAKmxF,GAAI,aAClBnxF,KAAKs3F,IAAK,OACAj3F,IAAN+H,GAA8C,mBAApBpI,KAAK82F,GAAGlC,SAClC50F,KAAK82F,GAAGlC,QAAQ/wF,KAAK7D,QAQjCu8F,QAAS,WAEL,IAAIvH,KAAOh1F,KAAK82F,GAEhB92F,KAAKy3F,OACLpG,YAAYrxF,KAAKmxF,GAAI,YAAanxF,KAAKq3F,cAAc,GACrDhG,YAAYrxF,KAAKmxF,GAAI,WAAYnxF,KAAKq3F,cAAc,GACpDhG,YAAYrxF,KAAKmxF,GAAI,SAAUnxF,KAAK63F,WAChC7C,KAAKF,eACLzD,YAAY3sF,SAAU,UAAW1E,KAAKg4F,cAEtChD,KAAKxiE,QACL6+D,YAAY2D,KAAKxiE,MAAO,SAAUxyB,KAAKo4F,gBACnCpD,KAAK1xD,QACL+tD,YAAY2D,KAAK+D,QAAS,QAAS/4F,KAAKw4F,eACxCnH,YAAY2D,KAAK+D,QAAS,QAAS/4F,KAAKu4F,eACxClH,YAAY2D,KAAK+D,QAAS,OAAQ/4F,KAAKy4F,gBAG3Cz4F,KAAKmxF,GAAGlgF,YACRjR,KAAKmxF,GAAGlgF,WAAWmD,YAAYpU,KAAKmxF,MAMzCgG,QAjwCctG,CAAQC,QATjC,I,6FCCA,IAAI0L,QAAW,SAAUr4F,SACvB,aAEA,IAAIs4F,GAAKx7F,OAAOK,UACZo7F,OAASD,GAAGptF,eAEZstF,QAA4B,mBAAXl7F,OAAwBA,OAAS,GAClDm7F,eAAiBD,QAAQj7F,UAAY,aACrCm7F,oBAAsBF,QAAQG,eAAiB,kBAC/CC,kBAAoBJ,QAAQK,aAAe,gBAE/C,SAASC,OAAOx5B,IAAKpkE,IAAKG,OAOxB,OANAyB,OAAOC,eAAeuiE,IAAKpkE,IAAK,CAC9BG,MAAOA,MACPsB,YAAY,EACZC,cAAc,EACdC,UAAU,IAELyiE,IAAIpkE,KAEb,IAEE49F,OAAO,GAAI,IACX,MAAO78F,KACP68F,OAAS,SAASx5B,IAAKpkE,IAAKG,OAC1B,OAAOikE,IAAIpkE,KAAOG,OAItB,SAAS0X,KAAKgmF,QAASC,QAASp9F,KAAMq9F,aAEpC,IAAIC,eAAiBF,SAAWA,QAAQ77F,qBAAqBg8F,UAAYH,QAAUG,UAC/EC,UAAYt8F,OAAO8J,OAAOsyF,eAAe/7F,WACzC6sC,QAAU,IAAIqvD,QAAQJ,aAAe,IAMzC,OAFAG,UAAUE,QAuMZ,SAASC,iBAAiBR,QAASn9F,KAAMouC,SACvC,IAAIwvD,MAhLuB,iBAkL3B,OAAO,SAASC,OAAOxxF,OAAQ9M,KAC7B,GAjLoB,cAiLhBq+F,MACF,MAAM,IAAIvyF,MAAM,gCAGlB,GApLoB,cAoLhBuyF,MAA6B,CAC/B,GAAe,UAAXvxF,OACF,MAAM9M,IAKR,OAAOu+F,aAMT,IAHA1vD,QAAQ/hC,OAASA,OACjB+hC,QAAQ7uC,IAAMA,MAED,CACX,IAAIw+F,SAAW3vD,QAAQ2vD,SACvB,GAAIA,SAAU,CACZ,IAAIC,eAAiBC,oBAAoBF,SAAU3vD,SACnD,GAAI4vD,eAAgB,CAClB,GAAIA,iBAAmBE,iBAAkB,SACzC,OAAOF,gBAIX,GAAuB,SAAnB5vD,QAAQ/hC,OAGV+hC,QAAQ+vD,KAAO/vD,QAAQgwD,MAAQhwD,QAAQ7uC,SAElC,GAAuB,UAAnB6uC,QAAQ/hC,OAAoB,CACrC,GApNqB,mBAoNjBuxF,MAEF,MADAA,MAlNc,YAmNRxvD,QAAQ7uC,IAGhB6uC,QAAQiwD,kBAAkBjwD,QAAQ7uC,SAEN,WAAnB6uC,QAAQ/hC,QACjB+hC,QAAQkwD,OAAO,SAAUlwD,QAAQ7uC,KAGnCq+F,MA7NkB,YA+NlB,IAAIW,OAASC,SAASrB,QAASn9F,KAAMouC,SACrC,GAAoB,WAAhBmwD,OAAOlvF,KAAmB,CAO5B,GAJAuuF,MAAQxvD,QAAQzuC,KAlOA,YAFK,iBAwOjB4+F,OAAOh/F,MAAQ2+F,iBACjB,SAGF,MAAO,CACLz+F,MAAO8+F,OAAOh/F,IACdI,KAAMyuC,QAAQzuC,MAGS,UAAhB4+F,OAAOlvF,OAChBuuF,MAhPgB,YAmPhBxvD,QAAQ/hC,OAAS,QACjB+hC,QAAQ7uC,IAAMg/F,OAAOh/F,OA/QPo+F,CAAiBR,QAASn9F,KAAMouC,SAE7CovD,UAcT,SAASgB,SAASz+F,GAAI2jE,IAAKnkE,KACzB,IACE,MAAO,CAAE8P,KAAM,SAAU9P,IAAKQ,GAAG+D,KAAK4/D,IAAKnkE,MAC3C,MAAOc,KACP,MAAO,CAAEgP,KAAM,QAAS9P,IAAKc,MAhBjC+D,QAAQ+S,KAAOA,KAoBf,IAOI+mF,iBAAmB,GAMvB,SAASX,aACT,SAASkB,qBACT,SAASC,8BAIT,IAAIC,kBAAoB,GACxBzB,OAAOyB,kBAAmB9B,gBAAgB,WACxC,OAAO58F,QAGT,IAAI2+F,SAAW19F,OAAO29F,eAClBC,wBAA0BF,UAAYA,SAASA,SAAS72F,OAAO,MAC/D+2F,yBACAA,0BAA4BpC,IAC5BC,OAAO74F,KAAKg7F,wBAAyBjC,kBAGvC8B,kBAAoBG,yBAGtB,IAAIC,GAAKL,2BAA2Bn9F,UAClCg8F,UAAUh8F,UAAYL,OAAO8J,OAAO2zF,mBAYtC,SAASK,sBAAsBz9F,WAC7B,CAAC,OAAQ,QAAS,UAAUgK,SAAQ,SAASc,QAC3C6wF,OAAO37F,UAAW8K,QAAQ,SAAS9M,KACjC,OAAOU,KAAKy9F,QAAQrxF,OAAQ9M,WAkClC,SAAS0/F,cAAczB,UAAW0B,aAChC,SAASrB,OAAOxxF,OAAQ9M,IAAKL,QAASC,QACpC,IAAIo/F,OAASC,SAAShB,UAAUnxF,QAASmxF,UAAWj+F,KACpD,GAAoB,UAAhBg/F,OAAOlvF,KAEJ,CACL,IAAIugB,OAAS2uE,OAAOh/F,IAChBE,MAAQmwB,OAAOnwB,MACnB,OAAIA,OACiB,iBAAVA,OACPk9F,OAAO74F,KAAKrE,MAAO,WACdy/F,YAAYhgG,QAAQO,MAAM0/F,SAASt/F,MAAK,SAASJ,OACtDo+F,OAAO,OAAQp+F,MAAOP,QAASC,WAC9B,SAASkB,KACVw9F,OAAO,QAASx9F,IAAKnB,QAASC,WAI3B+/F,YAAYhgG,QAAQO,OAAOI,MAAK,SAASu/F,WAI9CxvE,OAAOnwB,MAAQ2/F,UACflgG,QAAQ0wB,WACP,SAASlwB,OAGV,OAAOm+F,OAAO,QAASn+F,MAAOR,QAASC,WAvBzCA,OAAOo/F,OAAOh/F,KA4BlB,IAAI8/F,gBAgCJp/F,KAAKy9F,QA9BL,SAAS4B,QAAQjzF,OAAQ9M,KACvB,SAASggG,6BACP,OAAO,IAAIL,aAAY,SAAShgG,QAASC,QACvC0+F,OAAOxxF,OAAQ9M,IAAKL,QAASC,WAIjC,OAAOkgG,gBAaLA,gBAAkBA,gBAAgBx/F,KAChC0/F,2BAGAA,4BACEA,8BAkHV,SAAStB,oBAAoBF,SAAU3vD,SACrC,IAAI/hC,OAAS0xF,SAASp8F,SAASysC,QAAQ/hC,QACvC,GA3TE/L,YA2TE+L,OAAsB,CAKxB,GAFA+hC,QAAQ2vD,SAAW,KAEI,UAAnB3vD,QAAQ/hC,OAAoB,CAE9B,GAAI0xF,SAASp8F,SAAiB,SAG5BysC,QAAQ/hC,OAAS,SACjB+hC,QAAQ7uC,IAtUZe,UAuUI29F,oBAAoBF,SAAU3vD,SAEP,UAAnBA,QAAQ/hC,QAGV,OAAO6xF,iBAIX9vD,QAAQ/hC,OAAS,QACjB+hC,QAAQ7uC,IAAM,IAAImB,UAChB,kDAGJ,OAAOw9F,iBAGT,IAAIK,OAASC,SAASnyF,OAAQ0xF,SAASp8F,SAAUysC,QAAQ7uC,KAEzD,GAAoB,UAAhBg/F,OAAOlvF,KAIT,OAHA++B,QAAQ/hC,OAAS,QACjB+hC,QAAQ7uC,IAAMg/F,OAAOh/F,IACrB6uC,QAAQ2vD,SAAW,KACZG,iBAGT,IAAI1+F,KAAO++F,OAAOh/F,IAElB,OAAMC,KAOFA,KAAKG,MAGPyuC,QAAQ2vD,SAASyB,YAAchgG,KAAKC,MAGpC2uC,QAAQ7rC,KAAOw7F,SAAS0B,QAQD,WAAnBrxD,QAAQ/hC,SACV+hC,QAAQ/hC,OAAS,OACjB+hC,QAAQ7uC,IA1XVe,WAoYF8tC,QAAQ2vD,SAAW,KACZG,kBANE1+F,MA3BP4uC,QAAQ/hC,OAAS,QACjB+hC,QAAQ7uC,IAAM,IAAImB,UAAU,oCAC5B0tC,QAAQ2vD,SAAW,KACZG,kBAoDX,SAASwB,aAAaC,MACpB,IAAIp6D,MAAQ,CAAEq6D,OAAQD,KAAK,IAEvB,KAAKA,OACPp6D,MAAMs6D,SAAWF,KAAK,IAGpB,KAAKA,OACPp6D,MAAMu6D,WAAaH,KAAK,GACxBp6D,MAAMw6D,SAAWJ,KAAK,IAGxB1/F,KAAK+/F,WAAW/8F,KAAKsiC,OAGvB,SAAS06D,cAAc16D,OACrB,IAAIg5D,OAASh5D,MAAM26D,YAAc,GACjC3B,OAAOlvF,KAAO,gBACPkvF,OAAOh/F,IACdgmC,MAAM26D,WAAa3B,OAGrB,SAASd,QAAQJ,aAIfp9F,KAAK+/F,WAAa,CAAC,CAAEJ,OAAQ,SAC7BvC,YAAY9xF,QAAQm0F,aAAcz/F,MAClCA,KAAKy/B,OAAM,GA8Bb,SAAS33B,OAAOo4F,UACd,GAAIA,SAAU,CACZ,IAAIC,eAAiBD,SAAStD,gBAC9B,GAAIuD,eACF,OAAOA,eAAet8F,KAAKq8F,UAG7B,GAA6B,mBAAlBA,SAAS59F,KAClB,OAAO49F,SAGT,IAAKt5F,MAAMs5F,SAASvhG,QAAS,CAC3B,IAAIC,GAAK,EAAG0D,KAAO,SAASA,OAC1B,OAAS1D,EAAIshG,SAASvhG,QACpB,GAAI+9F,OAAO74F,KAAKq8F,SAAUthG,GAGxB,OAFA0D,KAAK9C,MAAQ0gG,SAASthG,GACtB0D,KAAK5C,MAAO,EACL4C,KAOX,OAHAA,KAAK9C,MA1eTa,UA2eIiC,KAAK5C,MAAO,EAEL4C,MAGT,OAAOA,KAAKA,KAAOA,MAKvB,MAAO,CAAEA,KAAMu7F,YAIjB,SAASA,aACP,MAAO,CAAEr+F,MA1fPa,UA0fyBX,MAAM,GA+MnC,OA7mBA8+F,kBAAkBl9F,UAAYm9F,2BAC9BxB,OAAO6B,GAAI,cAAeL,4BAC1BxB,OAAOwB,2BAA4B,cAAeD,mBAClDA,kBAAkB4B,YAAcnD,OAC9BwB,2BACA1B,kBACA,qBAaF54F,QAAQk8F,oBAAsB,SAASC,QACrC,IAAI31F,KAAyB,mBAAX21F,QAAyBA,OAAOv8F,YAClD,QAAO4G,OACHA,OAAS6zF,mBAG2B,uBAAnC7zF,KAAKy1F,aAAez1F,KAAK3G,QAIhCG,QAAQo8F,KAAO,SAASD,QAQtB,OAPIr/F,OAAOu/F,eACTv/F,OAAOu/F,eAAeF,OAAQ7B,6BAE9B6B,OAAO5wF,UAAY+uF,2BACnBxB,OAAOqD,OAAQvD,kBAAmB,sBAEpCuD,OAAOh/F,UAAYL,OAAO8J,OAAO+zF,IAC1BwB,QAOTn8F,QAAQs8F,MAAQ,SAASnhG,KACvB,MAAO,CAAE4/F,QAAS5/F,MAsEpBy/F,sBAAsBC,cAAc19F,WACpC27F,OAAO+B,cAAc19F,UAAWu7F,qBAAqB,WACnD,OAAO78F,QAETmE,QAAQ66F,cAAgBA,cAKxB76F,QAAQu8F,MAAQ,SAASxD,QAASC,QAASp9F,KAAMq9F,YAAa6B,kBACxC,IAAhBA,cAAwBA,YAAct/F,SAE1C,IAAI4D,KAAO,IAAIy7F,cACb9nF,KAAKgmF,QAASC,QAASp9F,KAAMq9F,aAC7B6B,aAGF,OAAO96F,QAAQk8F,oBAAoBlD,SAC/B55F,KACAA,KAAKjB,OAAO1C,MAAK,SAAS+vB,QACxB,OAAOA,OAAOjwB,KAAOiwB,OAAOnwB,MAAQ+D,KAAKjB,WAuKjDy8F,sBAAsBD,IAEtB7B,OAAO6B,GAAI/B,kBAAmB,aAO9BE,OAAO6B,GAAIlC,gBAAgB,WACzB,OAAO58F,QAGTi9F,OAAO6B,GAAI,YAAY,WACrB,MAAO,wBAkCT36F,QAAQ8F,KAAO,SAASoB,QACtB,IAAIpB,KAAO,GACX,IAAK,IAAI5K,OAAOgM,OACdpB,KAAKjH,KAAK3D,KAMZ,OAJA4K,KAAK4qB,UAIE,SAASvyB,OACd,KAAO2H,KAAKtL,QAAQ,CAClB,IAAIU,IAAM4K,KAAKq9B,MACf,GAAIjoC,OAAOgM,OAGT,OAFA/I,KAAK9C,MAAQH,IACbiD,KAAK5C,MAAO,EACL4C,KAQX,OADAA,KAAK5C,MAAO,EACL4C,OAsCX6B,QAAQ2D,OAASA,OAMjB01F,QAAQl8F,UAAY,CAClByC,YAAay5F,QAEb/9D,MAAO,SAASkhE,eAcd,GAbA3gG,KAAKi3F,KAAO,EACZj3F,KAAKsC,KAAO,EAGZtC,KAAKk+F,KAAOl+F,KAAKm+F,MArgBjB99F,UAsgBAL,KAAKN,MAAO,EACZM,KAAK89F,SAAW,KAEhB99F,KAAKoM,OAAS,OACdpM,KAAKV,IA1gBLe,UA4gBAL,KAAK+/F,WAAWz0F,QAAQ00F,gBAEnBW,cACH,IAAK,IAAI38F,QAAQhE,KAEQ,MAAnBgE,KAAKsI,OAAO,IACZowF,OAAO74F,KAAK7D,KAAMgE,QACjB4C,OAAO5C,KAAKF,MAAM,MACrB9D,KAAKgE,MAphBX3D,YA0hBF6K,KAAM,WACJlL,KAAKN,MAAO,EAEZ,IACIkhG,WADY5gG,KAAK+/F,WAAW,GACLE,WAC3B,GAAwB,UAApBW,WAAWxxF,KACb,MAAMwxF,WAAWthG,IAGnB,OAAOU,KAAK6gG,MAGdzC,kBAAmB,SAAS0C,WAC1B,GAAI9gG,KAAKN,KACP,MAAMohG,UAGR,IAAI3yD,QAAUnuC,KACd,SAAS+gG,OAAOC,IAAKC,QAYnB,OAXA3C,OAAOlvF,KAAO,QACdkvF,OAAOh/F,IAAMwhG,UACb3yD,QAAQ7rC,KAAO0+F,IAEXC,SAGF9yD,QAAQ/hC,OAAS,OACjB+hC,QAAQ7uC,IArjBZe,aAwjBY4gG,OAGZ,IAAK,IAAIriG,EAAIoB,KAAK+/F,WAAWphG,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI0mC,MAAQtlC,KAAK+/F,WAAWnhG,GACxB0/F,OAASh5D,MAAM26D,WAEnB,GAAqB,SAAjB36D,MAAMq6D,OAIR,OAAOoB,OAAO,OAGhB,GAAIz7D,MAAMq6D,QAAU3/F,KAAKi3F,KAAM,CAC7B,IAAIiK,SAAWxE,OAAO74F,KAAKyhC,MAAO,YAC9B67D,WAAazE,OAAO74F,KAAKyhC,MAAO,cAEpC,GAAI47D,UAAYC,WAAY,CAC1B,GAAInhG,KAAKi3F,KAAO3xD,MAAMs6D,SACpB,OAAOmB,OAAOz7D,MAAMs6D,UAAU,GACzB,GAAI5/F,KAAKi3F,KAAO3xD,MAAMu6D,WAC3B,OAAOkB,OAAOz7D,MAAMu6D,iBAGjB,GAAIqB,UACT,GAAIlhG,KAAKi3F,KAAO3xD,MAAMs6D,SACpB,OAAOmB,OAAOz7D,MAAMs6D,UAAU,OAG3B,KAAIuB,WAMT,MAAM,IAAI/1F,MAAM,0CALhB,GAAIpL,KAAKi3F,KAAO3xD,MAAMu6D,WACpB,OAAOkB,OAAOz7D,MAAMu6D,gBAU9BxB,OAAQ,SAASjvF,KAAM9P,KACrB,IAAK,IAAIV,EAAIoB,KAAK+/F,WAAWphG,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI0mC,MAAQtlC,KAAK+/F,WAAWnhG,GAC5B,GAAI0mC,MAAMq6D,QAAU3/F,KAAKi3F,MACrByF,OAAO74F,KAAKyhC,MAAO,eACnBtlC,KAAKi3F,KAAO3xD,MAAMu6D,WAAY,CAChC,IAAIuB,aAAe97D,MACnB,OAIA87D,eACU,UAAThyF,MACS,aAATA,OACDgyF,aAAazB,QAAUrgG,KACvBA,KAAO8hG,aAAavB,aAGtBuB,aAAe,MAGjB,IAAI9C,OAAS8C,aAAeA,aAAanB,WAAa,GAItD,OAHA3B,OAAOlvF,KAAOA,KACdkvF,OAAOh/F,IAAMA,IAET8hG,cACFphG,KAAKoM,OAAS,OACdpM,KAAKsC,KAAO8+F,aAAavB,WAClB5B,kBAGFj+F,KAAKqhG,SAAS/C,SAGvB+C,SAAU,SAAS/C,OAAQwB,UACzB,GAAoB,UAAhBxB,OAAOlvF,KACT,MAAMkvF,OAAOh/F,IAcf,MAXoB,UAAhBg/F,OAAOlvF,MACS,aAAhBkvF,OAAOlvF,KACTpP,KAAKsC,KAAOg8F,OAAOh/F,IACM,WAAhBg/F,OAAOlvF,MAChBpP,KAAK6gG,KAAO7gG,KAAKV,IAAMg/F,OAAOh/F,IAC9BU,KAAKoM,OAAS,SACdpM,KAAKsC,KAAO,OACa,WAAhBg8F,OAAOlvF,MAAqB0wF,WACrC9/F,KAAKsC,KAAOw9F,UAGP7B,kBAGTqD,OAAQ,SAASzB,YACf,IAAK,IAAIjhG,EAAIoB,KAAK+/F,WAAWphG,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI0mC,MAAQtlC,KAAK+/F,WAAWnhG,GAC5B,GAAI0mC,MAAMu6D,aAAeA,WAGvB,OAFA7/F,KAAKqhG,SAAS/7D,MAAM26D,WAAY36D,MAAMw6D,UACtCE,cAAc16D,OACP24D,mBAKb,MAAS,SAAS0B,QAChB,IAAK,IAAI/gG,EAAIoB,KAAK+/F,WAAWphG,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI0mC,MAAQtlC,KAAK+/F,WAAWnhG,GAC5B,GAAI0mC,MAAMq6D,SAAWA,OAAQ,CAC3B,IAAIrB,OAASh5D,MAAM26D,WACnB,GAAoB,UAAhB3B,OAAOlvF,KAAkB,CAC3B,IAAImyF,OAASjD,OAAOh/F,IACpB0gG,cAAc16D,OAEhB,OAAOi8D,QAMX,MAAM,IAAIn2F,MAAM,0BAGlBo2F,cAAe,SAAStB,SAAUX,WAAYC,SAa5C,OAZAx/F,KAAK89F,SAAW,CACdp8F,SAAUoG,OAAOo4F,UACjBX,WAAYA,WACZC,QAASA,SAGS,SAAhBx/F,KAAKoM,SAGPpM,KAAKV,IA9rBPe,WAisBO49F,mBAQJ95F,QA9sBK,CAqtBiBD,OAAOC,SAGtC,IACEs9F,mBAAqBjF,QACrB,MAAOkF,sBAWmB,iBAAfC,WACTA,WAAWF,mBAAqBjF,QAEhC7qE,SAAS,IAAK,yBAAdA,CAAwC6qE,W,oEC/uB5Ct4F,OAAOC,QAAU,SAASD,QAoBzB,OAnBKA,OAAO09F,kBACX19F,OAAOmjE,UAAY,aACnBnjE,OAAO8hD,MAAQ,GAEV9hD,OAAO24C,WAAU34C,OAAO24C,SAAW,IACxC57C,OAAOC,eAAegD,OAAQ,SAAU,CACvCpD,YAAY,EACZ6L,IAAK,WACJ,OAAOzI,OAAOkK,KAGhBnN,OAAOC,eAAegD,OAAQ,KAAM,CACnCpD,YAAY,EACZ6L,IAAK,WACJ,OAAOzI,OAAOtF,KAGhBsF,OAAO09F,gBAAkB,GAEnB19F","file":"vendors~main~scripts.1c8ae8ab.iframe.bundle.js","sourcesContent":["export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o) {\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) {\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var it,\n normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","module.exports = require(\"regenerator-runtime\");\n","!function() {\n var d3 = {\n version: \"3.5.17\"\n };\n var d3_arraySlice = [].slice, d3_array = function(list) {\n return d3_arraySlice.call(list);\n };\n var d3_document = this.document;\n function d3_documentElement(node) {\n return node && (node.ownerDocument || node.document || node).documentElement;\n }\n function d3_window(node) {\n return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n }\n if (d3_document) {\n try {\n d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n } catch (e) {\n d3_array = function(list) {\n var i = list.length, array = new Array(i);\n while (i--) array[i] = list[i];\n return array;\n };\n }\n }\n if (!Date.now) Date.now = function() {\n return +new Date();\n };\n if (d3_document) {\n try {\n d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n } catch (error) {\n var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n d3_element_prototype.setAttribute = function(name, value) {\n d3_element_setAttribute.call(this, name, value + \"\");\n };\n d3_element_prototype.setAttributeNS = function(space, local, value) {\n d3_element_setAttributeNS.call(this, space, local, value + \"\");\n };\n d3_style_prototype.setProperty = function(name, value, priority) {\n d3_style_setProperty.call(this, name, value + \"\", priority);\n };\n }\n }\n d3.ascending = d3_ascending;\n function d3_ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n d3.descending = function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n d3.min = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n }\n return a;\n };\n d3.max = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n }\n return a;\n };\n d3.extent = function(array, f) {\n var i = -1, n = array.length, a, b, c;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n return [ a, c ];\n };\n function d3_number(x) {\n return x === null ? NaN : +x;\n }\n function d3_numeric(x) {\n return !isNaN(x);\n }\n d3.sum = function(array, f) {\n var s = 0, n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n } else {\n while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n d3.mean = function(array, f) {\n var s = 0, n = array.length, a, i = -1, j = n;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n }\n if (j) return s / j;\n };\n d3.quantile = function(values, p) {\n var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n return e ? v + e * (values[h] - v) : v;\n };\n d3.median = function(array, f) {\n var numbers = [], n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n }\n if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n };\n d3.variance = function(array, f) {\n var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n if (arguments.length === 1) {\n while (++i < n) {\n if (d3_numeric(a = d3_number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n if (j > 1) return s / (j - 1);\n };\n d3.deviation = function() {\n var v = d3.variance.apply(this, arguments);\n return v ? Math.sqrt(v) : v;\n };\n function d3_bisector(compare) {\n return {\n left: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n var d3_bisect = d3_bisector(d3_ascending);\n d3.bisectLeft = d3_bisect.left;\n d3.bisect = d3.bisectRight = d3_bisect.right;\n d3.bisector = function(f) {\n return d3_bisector(f.length === 1 ? function(d, x) {\n return d3_ascending(f(d), x);\n } : f);\n };\n d3.shuffle = function(array, i0, i1) {\n if ((m = arguments.length) < 3) {\n i1 = array.length;\n if (m < 2) i0 = 0;\n }\n var m = i1 - i0, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n }\n return array;\n };\n d3.permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n };\n d3.pairs = function(array) {\n var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n return pairs;\n };\n d3.transpose = function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = d3.min(matrix, d3_transposeLength), 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 function d3_transposeLength(d) {\n return d.length;\n }\n d3.zip = function() {\n return d3.transpose(arguments);\n };\n d3.keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n };\n d3.values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n };\n d3.entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({\n key: key,\n value: map[key]\n });\n return entries;\n };\n d3.merge = function(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n };\n var abs = Math.abs;\n d3.range = function(start, stop, step) {\n if (arguments.length < 3) {\n step = 1;\n if (arguments.length < 2) {\n stop = start;\n start = 0;\n }\n }\n if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n start *= k, stop *= k, step *= k;\n if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n return range;\n };\n function d3_range_integerScale(x) {\n var k = 1;\n while (x * k % 1) k *= 10;\n return k;\n }\n function d3_class(ctor, properties) {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n }\n d3.map = function(object, f) {\n var map = new d3_Map();\n if (object instanceof d3_Map) {\n object.forEach(function(key, value) {\n map.set(key, value);\n });\n } else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n } else {\n for (var key in object) map.set(key, object[key]);\n }\n return map;\n };\n function d3_Map() {\n this._ = Object.create(null);\n }\n var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this._[d3_map_escape(key)];\n },\n set: function(key, value) {\n return this._[d3_map_escape(key)] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n for (var key in this._) values.push(this._[key]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var key in this._) entries.push({\n key: d3_map_unescape(key),\n value: this._[key]\n });\n return entries;\n },\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n }\n });\n function d3_map_escape(key) {\n return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n }\n function d3_map_unescape(key) {\n return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n }\n function d3_map_has(key) {\n return d3_map_escape(key) in this._;\n }\n function d3_map_remove(key) {\n return (key = d3_map_escape(key)) in this._ && delete this._[key];\n }\n function d3_map_keys() {\n var keys = [];\n for (var key in this._) keys.push(d3_map_unescape(key));\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this._) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this._) return false;\n return true;\n }\n d3.nest = function() {\n var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n function map(mapType, array, depth) {\n if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n values.push(object);\n } else {\n valuesByKey.set(keyValue, [ object ]);\n }\n }\n if (mapType) {\n object = mapType();\n setter = function(keyValue, values) {\n object.set(keyValue, map(mapType, values, depth));\n };\n } else {\n object = {};\n setter = function(keyValue, values) {\n object[keyValue] = map(mapType, values, depth);\n };\n }\n valuesByKey.forEach(setter);\n return object;\n }\n function entries(map, depth) {\n if (depth >= keys.length) return map;\n var array = [], sortKey = sortKeys[depth++];\n map.forEach(function(key, keyMap) {\n array.push({\n key: key,\n values: entries(keyMap, depth)\n });\n });\n return sortKey ? array.sort(function(a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n nest.map = function(array, mapType) {\n return map(mapType, array, 0);\n };\n nest.entries = function(array) {\n return entries(map(d3.map, array, 0), 0);\n };\n nest.key = function(d) {\n keys.push(d);\n return nest;\n };\n nest.sortKeys = function(order) {\n sortKeys[keys.length - 1] = order;\n return nest;\n };\n nest.sortValues = function(order) {\n sortValues = order;\n return nest;\n };\n nest.rollup = function(f) {\n rollup = f;\n return nest;\n };\n return nest;\n };\n d3.set = function(array) {\n var set = new d3_Set();\n if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n return set;\n };\n function d3_Set() {\n this._ = Object.create(null);\n }\n d3_class(d3_Set, {\n has: d3_map_has,\n add: function(key) {\n this._[d3_map_escape(key += \"\")] = true;\n return key;\n },\n remove: d3_map_remove,\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key));\n }\n });\n d3.behavior = {};\n function d3_identity(d) {\n return d;\n }\n d3.rebind = function(target, source) {\n var i = 1, n = arguments.length, method;\n while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n return target;\n };\n function d3_rebind(target, source, method) {\n return function() {\n var value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n }\n function d3_vendorSymbol(object, name) {\n if (name in object) return name;\n name = name.charAt(0).toUpperCase() + name.slice(1);\n for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n var prefixName = d3_vendorPrefixes[i] + name;\n if (prefixName in object) return prefixName;\n }\n }\n var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n function d3_noop() {}\n d3.dispatch = function() {\n var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n return dispatch;\n };\n function d3_dispatch() {}\n d3_dispatch.prototype.on = function(type, listener) {\n var i = type.indexOf(\".\"), name = \"\";\n if (i >= 0) {\n name = type.slice(i + 1);\n type = type.slice(0, i);\n }\n if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n if (arguments.length === 2) {\n if (listener == null) for (type in this) {\n if (this.hasOwnProperty(type)) this[type].on(name, null);\n }\n return this;\n }\n };\n function d3_dispatch_event(dispatch) {\n var listeners = [], listenerByName = new d3_Map();\n function event() {\n var z = listeners, i = -1, n = z.length, l;\n while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n return dispatch;\n }\n event.on = function(name, listener) {\n var l = listenerByName.get(name), i;\n if (arguments.length < 2) return l && l.on;\n if (l) {\n l.on = null;\n listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n listenerByName.remove(name);\n }\n if (listener) listeners.push(listenerByName.set(name, {\n on: listener\n }));\n return dispatch;\n };\n return event;\n }\n d3.event = null;\n function d3_eventPreventDefault() {\n d3.event.preventDefault();\n }\n function d3_eventSource() {\n var e = d3.event, s;\n while (s = e.sourceEvent) e = s;\n return e;\n }\n function d3_eventDispatch(target) {\n var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n dispatch.of = function(thiz, argumentz) {\n return function(e1) {\n try {\n var e0 = e1.sourceEvent = d3.event;\n e1.target = target;\n d3.event = e1;\n dispatch[e1.type].apply(thiz, argumentz);\n } finally {\n d3.event = e0;\n }\n };\n };\n return dispatch;\n }\n d3.requote = function(s) {\n return s.replace(d3_requote_re, \"\\\\$&\");\n };\n var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n var d3_subclass = {}.__proto__ ? function(object, prototype) {\n object.__proto__ = prototype;\n } : function(object, prototype) {\n for (var property in prototype) object[property] = prototype[property];\n };\n function d3_selection(groups) {\n d3_subclass(groups, d3_selectionPrototype);\n return groups;\n }\n var d3_select = function(s, n) {\n return n.querySelector(s);\n }, d3_selectAll = function(s, n) {\n return n.querySelectorAll(s);\n }, d3_selectMatches = function(n, s) {\n var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(n, s);\n };\n return d3_selectMatches(n, s);\n };\n if (typeof Sizzle === \"function\") {\n d3_select = function(s, n) {\n return Sizzle(s, n)[0] || null;\n };\n d3_selectAll = Sizzle;\n d3_selectMatches = Sizzle.matchesSelector;\n }\n d3.selection = function() {\n return d3.select(d3_document.documentElement);\n };\n var d3_selectionPrototype = d3.selection.prototype = [];\n d3_selectionPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, group, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selector(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_select(selector, this);\n };\n }\n d3_selectionPrototype.selectAll = function(selector) {\n var subgroups = [], subgroup, node;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n subgroup.parentNode = node;\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selectorAll(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_selectAll(selector, this);\n };\n }\n var d3_nsXhtml = \"http://www.w3.org/1999/xhtml\";\n var d3_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: d3_nsXhtml,\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 d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return d3_nsPrefix.hasOwnProperty(prefix) ? {\n space: d3_nsPrefix[prefix],\n local: name\n } : name;\n }\n };\n d3_selectionPrototype.attr = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node();\n name = d3.ns.qualify(name);\n return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n }\n for (value in name) this.each(d3_selection_attr(value, name[value]));\n return this;\n }\n return this.each(d3_selection_attr(name, value));\n };\n function d3_selection_attr(name, value) {\n name = d3.ns.qualify(name);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrConstant() {\n this.setAttribute(name, value);\n }\n function attrConstantNS() {\n this.setAttributeNS(name.space, name.local, value);\n }\n function attrFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n }\n function attrFunctionNS() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n }\n return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n }\n function d3_collapse(s) {\n return s.trim().replace(/\\s+/g, \" \");\n }\n d3_selectionPrototype.classed = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n if (value = node.classList) {\n while (++i < n) if (!value.contains(name[i])) return false;\n } else {\n value = node.getAttribute(\"class\");\n while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n }\n return true;\n }\n for (value in name) this.each(d3_selection_classed(value, name[value]));\n return this;\n }\n return this.each(d3_selection_classed(name, value));\n };\n function d3_selection_classedRe(name) {\n return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n }\n function d3_selection_classes(name) {\n return (name + \"\").trim().split(/^|\\s+/);\n }\n function d3_selection_classed(name, value) {\n name = d3_selection_classes(name).map(d3_selection_classedName);\n var n = name.length;\n function classedConstant() {\n var i = -1;\n while (++i < n) name[i](this, value);\n }\n function classedFunction() {\n var i = -1, x = value.apply(this, arguments);\n while (++i < n) name[i](this, x);\n }\n return typeof value === \"function\" ? classedFunction : classedConstant;\n }\n function d3_selection_classedName(name) {\n var re = d3_selection_classedRe(name);\n return function(node, value) {\n if (c = node.classList) return value ? c.add(name) : c.remove(name);\n var c = node.getAttribute(\"class\") || \"\";\n if (value) {\n re.lastIndex = 0;\n if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n } else {\n node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n }\n };\n }\n d3_selectionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n return this;\n }\n if (n < 2) {\n var node = this.node();\n return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n priority = \"\";\n }\n return this.each(d3_selection_style(name, value, priority));\n };\n function d3_selection_style(name, value, priority) {\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleConstant() {\n this.style.setProperty(name, value, priority);\n }\n function styleFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n }\n return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n }\n d3_selectionPrototype.property = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") return this.node()[name];\n for (value in name) this.each(d3_selection_property(value, name[value]));\n return this;\n }\n return this.each(d3_selection_property(name, value));\n };\n function d3_selection_property(name, value) {\n function propertyNull() {\n delete this[name];\n }\n function propertyConstant() {\n this[name] = value;\n }\n function propertyFunction() {\n var x = value.apply(this, arguments);\n if (x == null) delete this[name]; else this[name] = x;\n }\n return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n }\n d3_selectionPrototype.text = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n } : value == null ? function() {\n this.textContent = \"\";\n } : function() {\n this.textContent = value;\n }) : this.node().textContent;\n };\n d3_selectionPrototype.html = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n } : value == null ? function() {\n this.innerHTML = \"\";\n } : function() {\n this.innerHTML = value;\n }) : this.node().innerHTML;\n };\n d3_selectionPrototype.append = function(name) {\n name = d3_selection_creator(name);\n return this.select(function() {\n return this.appendChild(name.apply(this, arguments));\n });\n };\n function d3_selection_creator(name) {\n function create() {\n var document = this.ownerDocument, namespace = this.namespaceURI;\n return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);\n }\n function createNS() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n }\n return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n }\n d3_selectionPrototype.insert = function(name, before) {\n name = d3_selection_creator(name);\n before = d3_selection_selector(before);\n return this.select(function() {\n return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n });\n };\n d3_selectionPrototype.remove = function() {\n return this.each(d3_selectionRemove);\n };\n function d3_selectionRemove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n d3_selectionPrototype.data = function(value, key) {\n var i = -1, n = this.length, group, node;\n if (!arguments.length) {\n value = new Array(n = (group = this[0]).length);\n while (++i < n) {\n if (node = group[i]) {\n value[i] = node.__data__;\n }\n }\n return value;\n }\n function bind(group, groupData) {\n var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n if (key) {\n var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n for (i = -1; ++i < n; ) {\n if (node = group[i]) {\n if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues[i] = keyValue;\n }\n }\n for (i = -1; ++i < m; ) {\n if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n } else if (node !== true) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n }\n nodeByKeyValue.set(keyValue, true);\n }\n for (i = -1; ++i < n; ) {\n if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {\n exitNodes[i] = group[i];\n }\n }\n } else {\n for (i = -1; ++i < n0; ) {\n node = group[i];\n nodeData = groupData[i];\n if (node) {\n node.__data__ = nodeData;\n updateNodes[i] = node;\n } else {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n }\n for (;i < m; ++i) {\n enterNodes[i] = d3_selection_dataNode(groupData[i]);\n }\n for (;i < n; ++i) {\n exitNodes[i] = group[i];\n }\n }\n enterNodes.update = updateNodes;\n enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n enter.push(enterNodes);\n update.push(updateNodes);\n exit.push(exitNodes);\n }\n var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n if (typeof value === \"function\") {\n while (++i < n) {\n bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n }\n } else {\n while (++i < n) {\n bind(group = this[i], value);\n }\n }\n update.enter = function() {\n return enter;\n };\n update.exit = function() {\n return exit;\n };\n return update;\n };\n function d3_selection_dataNode(data) {\n return {\n __data__: data\n };\n }\n d3_selectionPrototype.datum = function(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n };\n d3_selectionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_filter(selector) {\n return function() {\n return d3_selectMatches(this, selector);\n };\n }\n d3_selectionPrototype.order = function() {\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n };\n d3_selectionPrototype.sort = function(comparator) {\n comparator = d3_selection_sortComparator.apply(this, arguments);\n for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n return this.order();\n };\n function d3_selection_sortComparator(comparator) {\n if (!arguments.length) comparator = d3_ascending;\n return function(a, b) {\n return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n };\n }\n d3_selectionPrototype.each = function(callback) {\n return d3_selection_each(this, function(node, i, j) {\n callback.call(node, node.__data__, i, j);\n });\n };\n function d3_selection_each(groups, callback) {\n for (var 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(node, i, j);\n }\n }\n return groups;\n }\n d3_selectionPrototype.call = function(callback) {\n var args = d3_array(arguments);\n callback.apply(args[0] = this, args);\n return this;\n };\n d3_selectionPrototype.empty = function() {\n return !this.node();\n };\n d3_selectionPrototype.node = function() {\n for (var j = 0, m = this.length; j < m; j++) {\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n };\n d3_selectionPrototype.size = function() {\n var n = 0;\n d3_selection_each(this, function() {\n ++n;\n });\n return n;\n };\n function d3_selection_enter(selection) {\n d3_subclass(selection, d3_selection_enterPrototype);\n return selection;\n }\n var d3_selection_enterPrototype = [];\n d3.selection.enter = d3_selection_enter;\n d3.selection.enter.prototype = d3_selection_enterPrototype;\n d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n d3_selection_enterPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, upgroup, group, node;\n for (var j = -1, m = this.length; ++j < m; ) {\n upgroup = (group = this[j]).update;\n subgroups.push(subgroup = []);\n subgroup.parentNode = group.parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n d3_selection_enterPrototype.insert = function(name, before) {\n if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n return d3_selectionPrototype.insert.call(this, name, before);\n };\n function d3_selection_enterInsertBefore(enter) {\n var i0, j0;\n return function(d, i, j) {\n var group = enter[j].update, n = group.length, node;\n if (j != j0) j0 = j, i0 = 0;\n if (i >= i0) i0 = i + 1;\n while (!(node = group[i0]) && ++i0 < n) ;\n return node;\n };\n }\n d3.select = function(node) {\n var group;\n if (typeof node === \"string\") {\n group = [ d3_select(node, d3_document) ];\n group.parentNode = d3_document.documentElement;\n } else {\n group = [ node ];\n group.parentNode = d3_documentElement(node);\n }\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group;\n if (typeof nodes === \"string\") {\n group = d3_array(d3_selectAll(nodes, d3_document));\n group.parentNode = d3_document.documentElement;\n } else {\n group = d3_array(nodes);\n group.parentNode = null;\n }\n return d3_selection([ group ]);\n };\n d3_selectionPrototype.on = function(type, listener, capture) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof type !== \"string\") {\n if (n < 2) listener = false;\n for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n return this;\n }\n if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n capture = false;\n }\n return this.each(d3_selection_on(type, listener, capture));\n };\n function d3_selection_on(type, listener, capture) {\n var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n if (i > 0) type = type.slice(0, i);\n var filter = d3_selection_onFilters.get(type);\n if (filter) type = filter, wrap = d3_selection_onFilter;\n function onRemove() {\n var l = this[name];\n if (l) {\n this.removeEventListener(type, l, l.$);\n delete this[name];\n }\n }\n function onAdd() {\n var l = wrap(listener, d3_array(arguments));\n onRemove.call(this);\n this.addEventListener(type, this[name] = l, l.$ = capture);\n l._ = listener;\n }\n function removeAll() {\n var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n for (var name in this) {\n if (match = name.match(re)) {\n var l = this[name];\n this.removeEventListener(match[1], l, l.$);\n delete this[name];\n }\n }\n }\n return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n }\n var d3_selection_onFilters = d3.map({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n });\n if (d3_document) {\n d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n });\n }\n function d3_selection_onListener(listener, argumentz) {\n return function(e) {\n var o = d3.event;\n d3.event = e;\n argumentz[0] = this.__data__;\n try {\n listener.apply(this, argumentz);\n } finally {\n d3.event = o;\n }\n };\n }\n function d3_selection_onFilter(listener, argumentz) {\n var l = d3_selection_onListener(listener, argumentz);\n return function(e) {\n var target = this, related = e.relatedTarget;\n if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n l.call(target, e);\n }\n };\n }\n var d3_event_dragSelect, d3_event_dragId = 0;\n function d3_event_dragSuppress(node) {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect == null) {\n d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n }\n if (d3_event_dragSelect) {\n var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n style[d3_event_dragSelect] = \"none\";\n }\n return function(suppressClick) {\n w.on(name, null);\n if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n if (suppressClick) {\n var off = function() {\n w.on(click, null);\n };\n w.on(click, function() {\n d3_eventPreventDefault();\n off();\n }, true);\n setTimeout(off, 0);\n }\n };\n }\n d3.mouse = function(container) {\n return d3_mousePoint(container, d3_eventSource());\n };\n var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n function d3_mousePoint(container, e) {\n if (e.changedTouches) e = e.changedTouches[0];\n var svg = container.ownerSVGElement || container;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n if (d3_mouse_bug44083 < 0) {\n var window = d3_window(container);\n if (window.scrollX || window.scrollY) {\n svg = d3.select(\"body\").append(\"svg\").style({\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n border: \"none\"\n }, \"important\");\n var ctm = svg[0][0].getScreenCTM();\n d3_mouse_bug44083 = !(ctm.f || ctm.e);\n svg.remove();\n }\n }\n if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n point.y = e.clientY;\n point = point.matrixTransform(container.getScreenCTM().inverse());\n return [ point.x, point.y ];\n }\n var rect = container.getBoundingClientRect();\n return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n }\n d3.touch = function(container, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return d3_mousePoint(container, touch);\n }\n }\n };\n d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n function drag() {\n this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n }\n function dragstart(id, position, subject, move, end) {\n return function() {\n var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n if (origin) {\n dragOffset = origin.apply(that, arguments);\n dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n } else {\n dragOffset = [ 0, 0 ];\n }\n dispatch({\n type: \"dragstart\"\n });\n function moved() {\n var position1 = position(parent, dragId), dx, dy;\n if (!position1) return;\n dx = position1[0] - position0[0];\n dy = position1[1] - position0[1];\n dragged |= dx | dy;\n position0 = position1;\n dispatch({\n type: \"drag\",\n x: position1[0] + dragOffset[0],\n y: position1[1] + dragOffset[1],\n dx: dx,\n dy: dy\n });\n }\n function ended() {\n if (!position(parent, dragId)) return;\n dragSubject.on(move + dragName, null).on(end + dragName, null);\n dragRestore(dragged);\n dispatch({\n type: \"dragend\"\n });\n }\n };\n }\n drag.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return drag;\n };\n return d3.rebind(drag, event, \"on\");\n };\n function d3_behavior_dragTouchId() {\n return d3.event.changedTouches[0].identifier;\n }\n d3.touches = function(container, touches) {\n if (arguments.length < 2) touches = d3_eventSource().touches;\n return touches ? d3_array(touches).map(function(touch) {\n var point = d3_mousePoint(container, touch);\n point.identifier = touch.identifier;\n return point;\n }) : [];\n };\n var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n function d3_sgn(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n }\n function d3_cross2d(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n }\n function d3_acos(x) {\n return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n }\n function d3_asin(x) {\n return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n }\n function d3_sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n function d3_cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n function d3_tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n function d3_haversin(x) {\n return (x = Math.sin(x / 2)) * x;\n }\n var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n d3.interpolateZoom = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;\n if (d2 < ε2) {\n S = Math.log(w1 / w0) / ρ;\n i = function(t) {\n return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];\n };\n } else {\n var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / ρ;\n i = function(t) {\n var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n };\n }\n i.duration = S * 1e3;\n return i;\n };\n d3.behavior.zoom = function() {\n var view = {\n x: 0,\n y: 0,\n k: 1\n }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n if (!d3_behavior_zoomWheel) {\n d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return d3.event.wheelDelta;\n }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n return -d3.event.detail;\n }, \"MozMousePixelScroll\");\n }\n function zoom(g) {\n g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n }\n zoom.event = function(g) {\n g.each(function() {\n var dispatch = event.of(this, arguments), view1 = view;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.zoom\", function() {\n view = this.__chart__ || {\n x: 0,\n y: 0,\n k: 1\n };\n zoomstarted(dispatch);\n }).tween(\"zoom:zoom\", function() {\n var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n return function(t) {\n var l = i(t), k = dx / l[2];\n this.__chart__ = view = {\n x: cx - l[0] * k,\n y: cy - l[1] * k,\n k: k\n };\n zoomed(dispatch);\n };\n }).each(\"interrupt.zoom\", function() {\n zoomended(dispatch);\n }).each(\"end.zoom\", function() {\n zoomended(dispatch);\n });\n } else {\n this.__chart__ = view;\n zoomstarted(dispatch);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n });\n };\n zoom.translate = function(_) {\n if (!arguments.length) return [ view.x, view.y ];\n view = {\n x: +_[0],\n y: +_[1],\n k: view.k\n };\n rescale();\n return zoom;\n };\n zoom.scale = function(_) {\n if (!arguments.length) return view.k;\n view = {\n x: view.x,\n y: view.y,\n k: null\n };\n scaleTo(+_);\n rescale();\n return zoom;\n };\n zoom.scaleExtent = function(_) {\n if (!arguments.length) return scaleExtent;\n scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.center = function(_) {\n if (!arguments.length) return center;\n center = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.size = function(_) {\n if (!arguments.length) return size;\n size = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.duration = function(_) {\n if (!arguments.length) return duration;\n duration = +_;\n return zoom;\n };\n zoom.x = function(z) {\n if (!arguments.length) return x1;\n x1 = z;\n x0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n zoom.y = function(z) {\n if (!arguments.length) return y1;\n y1 = z;\n y0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n function location(p) {\n return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n }\n function point(l) {\n return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n }\n function scaleTo(s) {\n view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n }\n function translateTo(p, l) {\n l = point(l);\n view.x += p[0] - l[0];\n view.y += p[1] - l[1];\n }\n function zoomTo(that, p, l, k) {\n that.__chart__ = {\n x: view.x,\n y: view.y,\n k: view.k\n };\n scaleTo(Math.pow(2, k));\n translateTo(center0 = p, l);\n that = d3.select(that);\n if (duration > 0) that = that.transition().duration(duration);\n that.call(zoom.event);\n }\n function rescale() {\n if (x1) x1.domain(x0.range().map(function(x) {\n return (x - view.x) / view.k;\n }).map(x0.invert));\n if (y1) y1.domain(y0.range().map(function(y) {\n return (y - view.y) / view.k;\n }).map(y0.invert));\n }\n function zoomstarted(dispatch) {\n if (!zooming++) dispatch({\n type: \"zoomstart\"\n });\n }\n function zoomed(dispatch) {\n rescale();\n dispatch({\n type: \"zoom\",\n scale: view.k,\n translate: [ view.x, view.y ]\n });\n }\n function zoomended(dispatch) {\n if (!--zooming) dispatch({\n type: \"zoomend\"\n }), center0 = null;\n }\n function mousedowned() {\n var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n d3_selection_interrupt.call(that);\n zoomstarted(dispatch);\n function moved() {\n dragged = 1;\n translateTo(d3.mouse(that), location0);\n zoomed(dispatch);\n }\n function ended() {\n subject.on(mousemove, null).on(mouseup, null);\n dragRestore(dragged);\n zoomended(dispatch);\n }\n }\n function touchstarted() {\n var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n started();\n zoomstarted(dispatch);\n subject.on(mousedown, null).on(touchstart, started);\n function relocate() {\n var touches = d3.touches(that);\n scale0 = view.k;\n touches.forEach(function(t) {\n if (t.identifier in locations0) locations0[t.identifier] = location(t);\n });\n return touches;\n }\n function started() {\n var target = d3.event.target;\n d3.select(target).on(touchmove, moved).on(touchend, ended);\n targets.push(target);\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n locations0[changed[i].identifier] = null;\n }\n var touches = relocate(), now = Date.now();\n if (touches.length === 1) {\n if (now - touchtime < 500) {\n var p = touches[0];\n zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n d3_eventPreventDefault();\n }\n touchtime = now;\n } else if (touches.length > 1) {\n var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n distance0 = dx * dx + dy * dy;\n }\n }\n function moved() {\n var touches = d3.touches(that), p0, l0, p1, l1;\n d3_selection_interrupt.call(that);\n for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n p1 = touches[i];\n if (l1 = locations0[p1.identifier]) {\n if (l0) break;\n p0 = p1, l0 = l1;\n }\n }\n if (l1) {\n var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n scaleTo(scale1 * scale0);\n }\n touchtime = null;\n translateTo(p0, l0);\n zoomed(dispatch);\n }\n function ended() {\n if (d3.event.touches.length) {\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n delete locations0[changed[i].identifier];\n }\n for (var identifier in locations0) {\n return void relocate();\n }\n }\n d3.selectAll(targets).on(zoomName, null);\n subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n dragRestore();\n zoomended(dispatch);\n }\n }\n function mousewheeled() {\n var dispatch = event.of(this, arguments);\n if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), \n translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);\n mousewheelTimer = setTimeout(function() {\n mousewheelTimer = null;\n zoomended(dispatch);\n }, 50);\n d3_eventPreventDefault();\n scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n translateTo(center0, translate0);\n zoomed(dispatch);\n }\n function dblclicked() {\n var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n d3.color = d3_color;\n function d3_color() {}\n d3_color.prototype.toString = function() {\n return this.rgb() + \"\";\n };\n d3.hsl = d3_hsl;\n function d3_hsl(h, s, l) {\n return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n }\n var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n d3_hslPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, this.l / k);\n };\n d3_hslPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, k * this.l);\n };\n d3_hslPrototype.rgb = function() {\n return d3_hsl_rgb(this.h, this.s, this.l);\n };\n function d3_hsl_rgb(h, s, l) {\n var m1, m2;\n h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n l = l < 0 ? 0 : l > 1 ? 1 : l;\n m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n m1 = 2 * l - m2;\n function v(h) {\n if (h > 360) h -= 360; else if (h < 0) h += 360;\n if (h < 60) return m1 + (m2 - m1) * h / 60;\n if (h < 180) return m2;\n if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n return m1;\n }\n function vv(h) {\n return Math.round(v(h) * 255);\n }\n return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n }\n d3.hcl = d3_hcl;\n function d3_hcl(h, c, l) {\n return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n }\n var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n d3_hclPrototype.brighter = function(k) {\n return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.darker = function(k) {\n return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.rgb = function() {\n return d3_hcl_lab(this.h, this.c, this.l).rgb();\n };\n function d3_hcl_lab(h, c, l) {\n if (isNaN(h)) h = 0;\n if (isNaN(c)) c = 0;\n return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n }\n d3.lab = d3_lab;\n function d3_lab(l, a, b) {\n return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n }\n var d3_lab_K = 18;\n var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n var d3_labPrototype = d3_lab.prototype = new d3_color();\n d3_labPrototype.brighter = function(k) {\n return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.darker = function(k) {\n return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.rgb = function() {\n return d3_lab_rgb(this.l, this.a, this.b);\n };\n function d3_lab_rgb(l, a, b) {\n var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n x = d3_lab_xyz(x) * d3_lab_X;\n y = d3_lab_xyz(y) * d3_lab_Y;\n z = d3_lab_xyz(z) * d3_lab_Z;\n return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n }\n function d3_lab_hcl(l, a, b) {\n return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n }\n function d3_lab_xyz(x) {\n return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n }\n function d3_xyz_lab(x) {\n return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n }\n function d3_xyz_rgb(r) {\n return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n }\n d3.rgb = d3_rgb;\n function d3_rgb(r, g, b) {\n return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n }\n function d3_rgbNumber(value) {\n return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n }\n function d3_rgbString(value) {\n return d3_rgbNumber(value) + \"\";\n }\n var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n d3_rgbPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n var r = this.r, g = this.g, b = this.b, i = 30;\n if (!r && !g && !b) return new d3_rgb(i, i, i);\n if (r && r < i) r = i;\n if (g && g < i) g = i;\n if (b && b < i) b = i;\n return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n };\n d3_rgbPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_rgb(k * this.r, k * this.g, k * this.b);\n };\n d3_rgbPrototype.hsl = function() {\n return d3_rgb_hsl(this.r, this.g, this.b);\n };\n d3_rgbPrototype.toString = function() {\n return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n };\n function d3_rgb_hex(v) {\n return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n }\n function d3_rgb_parse(format, rgb, hsl) {\n var r = 0, g = 0, b = 0, m1, m2, color;\n m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());\n if (m1) {\n m2 = m1[2].split(\",\");\n switch (m1[1]) {\n case \"hsl\":\n {\n return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n }\n\n case \"rgb\":\n {\n return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n }\n }\n }\n if (color = d3_rgb_names.get(format)) {\n return rgb(color.r, color.g, color.b);\n }\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n if (format.length === 4) {\n r = (color & 3840) >> 4;\n r = r >> 4 | r;\n g = color & 240;\n g = g >> 4 | g;\n b = color & 15;\n b = b << 4 | b;\n } else if (format.length === 7) {\n r = (color & 16711680) >> 16;\n g = (color & 65280) >> 8;\n b = color & 255;\n }\n }\n return rgb(r, g, b);\n }\n function d3_rgb_hsl(r, g, b) {\n var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n if (d) {\n s = l < .5 ? d / (max + min) : d / (2 - max - min);\n if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new d3_hsl(h, s, l);\n }\n function d3_rgb_lab(r, g, b) {\n r = d3_rgb_xyz(r);\n g = d3_rgb_xyz(g);\n b = d3_rgb_xyz(b);\n var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n }\n function d3_rgb_xyz(r) {\n return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n }\n function d3_rgb_parseNumber(c) {\n var f = parseFloat(c);\n return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n }\n var d3_rgb_names = d3.map({\n aliceblue: 15792383,\n antiquewhite: 16444375,\n aqua: 65535,\n aquamarine: 8388564,\n azure: 15794175,\n beige: 16119260,\n bisque: 16770244,\n black: 0,\n blanchedalmond: 16772045,\n blue: 255,\n blueviolet: 9055202,\n brown: 10824234,\n burlywood: 14596231,\n cadetblue: 6266528,\n chartreuse: 8388352,\n chocolate: 13789470,\n coral: 16744272,\n cornflowerblue: 6591981,\n cornsilk: 16775388,\n crimson: 14423100,\n cyan: 65535,\n darkblue: 139,\n darkcyan: 35723,\n darkgoldenrod: 12092939,\n darkgray: 11119017,\n darkgreen: 25600,\n darkgrey: 11119017,\n darkkhaki: 12433259,\n darkmagenta: 9109643,\n darkolivegreen: 5597999,\n darkorange: 16747520,\n darkorchid: 10040012,\n darkred: 9109504,\n darksalmon: 15308410,\n darkseagreen: 9419919,\n darkslateblue: 4734347,\n darkslategray: 3100495,\n darkslategrey: 3100495,\n darkturquoise: 52945,\n darkviolet: 9699539,\n deeppink: 16716947,\n deepskyblue: 49151,\n dimgray: 6908265,\n dimgrey: 6908265,\n dodgerblue: 2003199,\n firebrick: 11674146,\n floralwhite: 16775920,\n forestgreen: 2263842,\n fuchsia: 16711935,\n gainsboro: 14474460,\n ghostwhite: 16316671,\n gold: 16766720,\n goldenrod: 14329120,\n gray: 8421504,\n green: 32768,\n greenyellow: 11403055,\n grey: 8421504,\n honeydew: 15794160,\n hotpink: 16738740,\n indianred: 13458524,\n indigo: 4915330,\n ivory: 16777200,\n khaki: 15787660,\n lavender: 15132410,\n lavenderblush: 16773365,\n lawngreen: 8190976,\n lemonchiffon: 16775885,\n lightblue: 11393254,\n lightcoral: 15761536,\n lightcyan: 14745599,\n lightgoldenrodyellow: 16448210,\n lightgray: 13882323,\n lightgreen: 9498256,\n lightgrey: 13882323,\n lightpink: 16758465,\n lightsalmon: 16752762,\n lightseagreen: 2142890,\n lightskyblue: 8900346,\n lightslategray: 7833753,\n lightslategrey: 7833753,\n lightsteelblue: 11584734,\n lightyellow: 16777184,\n lime: 65280,\n limegreen: 3329330,\n linen: 16445670,\n magenta: 16711935,\n maroon: 8388608,\n mediumaquamarine: 6737322,\n mediumblue: 205,\n mediumorchid: 12211667,\n mediumpurple: 9662683,\n mediumseagreen: 3978097,\n mediumslateblue: 8087790,\n mediumspringgreen: 64154,\n mediumturquoise: 4772300,\n mediumvioletred: 13047173,\n midnightblue: 1644912,\n mintcream: 16121850,\n mistyrose: 16770273,\n moccasin: 16770229,\n navajowhite: 16768685,\n navy: 128,\n oldlace: 16643558,\n olive: 8421376,\n olivedrab: 7048739,\n orange: 16753920,\n orangered: 16729344,\n orchid: 14315734,\n palegoldenrod: 15657130,\n palegreen: 10025880,\n paleturquoise: 11529966,\n palevioletred: 14381203,\n papayawhip: 16773077,\n peachpuff: 16767673,\n peru: 13468991,\n pink: 16761035,\n plum: 14524637,\n powderblue: 11591910,\n purple: 8388736,\n rebeccapurple: 6697881,\n red: 16711680,\n rosybrown: 12357519,\n royalblue: 4286945,\n saddlebrown: 9127187,\n salmon: 16416882,\n sandybrown: 16032864,\n seagreen: 3050327,\n seashell: 16774638,\n sienna: 10506797,\n silver: 12632256,\n skyblue: 8900331,\n slateblue: 6970061,\n slategray: 7372944,\n slategrey: 7372944,\n snow: 16775930,\n springgreen: 65407,\n steelblue: 4620980,\n tan: 13808780,\n teal: 32896,\n thistle: 14204888,\n tomato: 16737095,\n turquoise: 4251856,\n violet: 15631086,\n wheat: 16113331,\n white: 16777215,\n whitesmoke: 16119285,\n yellow: 16776960,\n yellowgreen: 10145074\n });\n d3_rgb_names.forEach(function(key, value) {\n d3_rgb_names.set(key, d3_rgbNumber(value));\n });\n function d3_functor(v) {\n return typeof v === \"function\" ? v : function() {\n return v;\n };\n }\n d3.functor = d3_functor;\n d3.xhr = d3_xhrType(d3_identity);\n function d3_xhrType(response) {\n return function(url, mimeType, callback) {\n if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n mimeType = null;\n return d3_xhr(url, mimeType, response, callback);\n };\n }\n function d3_xhr(url, mimeType, response, callback) {\n var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n request.readyState > 3 && respond();\n };\n function respond() {\n var status = request.status, result;\n if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n try {\n result = response.call(xhr, request);\n } catch (e) {\n dispatch.error.call(xhr, e);\n return;\n }\n dispatch.load.call(xhr, result);\n } else {\n dispatch.error.call(xhr, request);\n }\n }\n request.onprogress = function(event) {\n var o = d3.event;\n d3.event = event;\n try {\n dispatch.progress.call(xhr, request);\n } finally {\n d3.event = o;\n }\n };\n xhr.header = function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers[name];\n if (value == null) delete headers[name]; else headers[name] = value + \"\";\n return xhr;\n };\n xhr.mimeType = function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return xhr;\n };\n xhr.responseType = function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return xhr;\n };\n xhr.response = function(value) {\n response = value;\n return xhr;\n };\n [ \"get\", \"post\" ].forEach(function(method) {\n xhr[method] = function() {\n return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n };\n });\n xhr.send = function(method, data, callback) {\n if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n request.open(method, url, true);\n if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n if (responseType != null) request.responseType = responseType;\n if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n callback(null, request);\n });\n dispatch.beforesend.call(xhr, request);\n request.send(data == null ? null : data);\n return xhr;\n };\n xhr.abort = function() {\n request.abort();\n return xhr;\n };\n d3.rebind(xhr, dispatch, \"on\");\n return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n }\n function d3_xhr_fixCallback(callback) {\n return callback.length === 1 ? function(error, request) {\n callback(error == null ? request : null);\n } : callback;\n }\n function d3_xhrHasResponse(request) {\n var type = request.responseType;\n return type && type !== \"text\" ? request.response : request.responseText;\n }\n d3.dsv = function(delimiter, mimeType) {\n var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n function dsv(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n xhr.row = function(_) {\n return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n };\n return xhr;\n }\n function response(request) {\n return dsv.parse(request.responseText);\n }\n function typedResponse(f) {\n return function(request) {\n return dsv.parse(request.responseText, f);\n };\n }\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n o = f ? function(row, i) {\n return f(a(row), i);\n } : a;\n });\n };\n dsv.parseRows = function(text, f) {\n var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n function token() {\n if (I >= N) return EOF;\n if (eol) return eol = false, EOL;\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n }\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; else if (c === 13) {\n eol = true;\n if (text.charCodeAt(I) === 10) ++I, ++k;\n } else if (c !== delimiterCode) continue;\n return text.slice(j, I - k);\n }\n return text.slice(j);\n }\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && (a = f(a, n++)) == null) continue;\n rows.push(a);\n }\n return rows;\n };\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n var fieldSet = new d3_Set(), fields = [];\n rows.forEach(function(row) {\n for (var field in row) {\n if (!fieldSet.has(field)) {\n fields.push(fieldSet.add(field));\n }\n }\n });\n return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(text) {\n return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n }\n return dsv;\n };\n d3.csv = d3.dsv(\",\", \"text/csv\");\n d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function() {\n d3_timer.apply(this, arguments);\n };\n function d3_timer(callback, delay, then) {\n var n = arguments.length;\n if (n < 2) delay = 0;\n if (n < 3) then = Date.now();\n var time = then + delay, timer = {\n c: callback,\n t: time,\n n: null\n };\n if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n d3_timer_queueTail = timer;\n if (!d3_timer_interval) {\n d3_timer_timeout = clearTimeout(d3_timer_timeout);\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n return timer;\n }\n function d3_timer_step() {\n var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n if (delay > 24) {\n if (isFinite(delay)) {\n clearTimeout(d3_timer_timeout);\n d3_timer_timeout = setTimeout(d3_timer_step, delay);\n }\n d3_timer_interval = 0;\n } else {\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n }\n d3.timer.flush = function() {\n d3_timer_mark();\n d3_timer_sweep();\n };\n function d3_timer_mark() {\n var now = Date.now(), timer = d3_timer_queueHead;\n while (timer) {\n if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n timer = timer.n;\n }\n return now;\n }\n function d3_timer_sweep() {\n var t0, t1 = d3_timer_queueHead, time = Infinity;\n while (t1) {\n if (t1.c) {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = t1).n;\n } else {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n }\n }\n d3_timer_queueTail = t0;\n return time;\n }\n function d3_format_precision(x, p) {\n return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n }\n d3.round = function(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n };\n var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n d3.formatPrefix = function(value, precision) {\n var i = 0;\n if (value = +value) {\n if (value < 0) value *= -1;\n if (precision) value = d3.round(value, d3_format_precision(value, precision));\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n return d3_formatPrefixes[8 + i / 3];\n };\n function d3_formatPrefix(d, i) {\n var k = Math.pow(10, abs(8 - i) * 3);\n return {\n scale: i > 8 ? function(d) {\n return d / k;\n } : function(d) {\n return d * k;\n },\n symbol: d\n };\n }\n function d3_locale_numberFormat(locale) {\n var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\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 = locale_grouping[j = (j + 1) % locale_grouping.length];\n }\n return t.reverse().join(locale_thousands);\n } : d3_identity;\n return function(specifier) {\n var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n if (precision) precision = +precision.substring(1);\n if (zfill || fill === \"0\" && align === \"=\") {\n zfill = fill = \"0\";\n align = \"=\";\n }\n switch (type) {\n case \"n\":\n comma = true;\n type = \"g\";\n break;\n\n case \"%\":\n scale = 100;\n suffix = \"%\";\n type = \"f\";\n break;\n\n case \"p\":\n scale = 100;\n suffix = \"%\";\n type = \"r\";\n break;\n\n case \"b\":\n case \"o\":\n case \"x\":\n case \"X\":\n if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n case \"c\":\n exponent = false;\n\n case \"d\":\n integer = true;\n precision = 0;\n break;\n\n case \"s\":\n scale = -1;\n type = \"r\";\n break;\n }\n if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n if (type == \"r\" && !precision) type = \"g\";\n if (precision != null) {\n if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n }\n type = d3_format_types.get(type) || d3_format_typeDefault;\n var zcomma = zfill && comma;\n return function(value) {\n var fullSuffix = suffix;\n if (integer && value % 1) return \"\";\n var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n if (scale < 0) {\n var unit = d3.formatPrefix(value, precision);\n value = unit.scale(value);\n fullSuffix = unit.symbol + suffix;\n } else {\n value *= scale;\n }\n value = type(value, precision);\n var i = value.lastIndexOf(\".\"), before, after;\n if (i < 0) {\n var j = exponent ? value.lastIndexOf(\"e\") : -1;\n if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n } else {\n before = value.substring(0, i);\n after = locale_decimal + value.substring(i + 1);\n }\n if (!zfill && comma) before = formatGroup(before, Infinity);\n var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n negative += prefix;\n value = before + after;\n return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n };\n };\n }\n var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n var d3_format_types = d3.map({\n b: function(x) {\n return x.toString(2);\n },\n c: function(x) {\n return String.fromCharCode(x);\n },\n o: function(x) {\n return x.toString(8);\n },\n x: function(x) {\n return x.toString(16);\n },\n X: function(x) {\n return x.toString(16).toUpperCase();\n },\n g: function(x, p) {\n return x.toPrecision(p);\n },\n e: function(x, p) {\n return x.toExponential(p);\n },\n f: function(x, p) {\n return x.toFixed(p);\n },\n r: function(x, p) {\n return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n }\n });\n function d3_format_typeDefault(x) {\n return x + \"\";\n }\n var d3_time = d3.time = {}, d3_date = Date;\n function d3_date_utc() {\n this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n }\n d3_date_utc.prototype = {\n getDate: function() {\n return this._.getUTCDate();\n },\n getDay: function() {\n return this._.getUTCDay();\n },\n getFullYear: function() {\n return this._.getUTCFullYear();\n },\n getHours: function() {\n return this._.getUTCHours();\n },\n getMilliseconds: function() {\n return this._.getUTCMilliseconds();\n },\n getMinutes: function() {\n return this._.getUTCMinutes();\n },\n getMonth: function() {\n return this._.getUTCMonth();\n },\n getSeconds: function() {\n return this._.getUTCSeconds();\n },\n getTime: function() {\n return this._.getTime();\n },\n getTimezoneOffset: function() {\n return 0;\n },\n valueOf: function() {\n return this._.valueOf();\n },\n setDate: function() {\n d3_time_prototype.setUTCDate.apply(this._, arguments);\n },\n setDay: function() {\n d3_time_prototype.setUTCDay.apply(this._, arguments);\n },\n setFullYear: function() {\n d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n },\n setHours: function() {\n d3_time_prototype.setUTCHours.apply(this._, arguments);\n },\n setMilliseconds: function() {\n d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n },\n setMinutes: function() {\n d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n },\n setMonth: function() {\n d3_time_prototype.setUTCMonth.apply(this._, arguments);\n },\n setSeconds: function() {\n d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n },\n setTime: function() {\n d3_time_prototype.setTime.apply(this._, arguments);\n }\n };\n var d3_time_prototype = Date.prototype;\n function d3_time_interval(local, step, number) {\n function round(date) {\n var d0 = local(date), d1 = offset(d0, 1);\n return date - d0 < d1 - date ? d0 : d1;\n }\n function ceil(date) {\n step(date = local(new d3_date(date - 1)), 1);\n return date;\n }\n function offset(date, k) {\n step(date = new d3_date(+date), k);\n return date;\n }\n function range(t0, t1, dt) {\n var time = ceil(t0), times = [];\n if (dt > 1) {\n while (time < t1) {\n if (!(number(time) % dt)) times.push(new Date(+time));\n step(time, 1);\n }\n } else {\n while (time < t1) times.push(new Date(+time)), step(time, 1);\n }\n return times;\n }\n function range_utc(t0, t1, dt) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = t0;\n return range(utc, t1, dt);\n } finally {\n d3_date = Date;\n }\n }\n local.floor = local;\n local.round = round;\n local.ceil = ceil;\n local.offset = offset;\n local.range = range;\n var utc = local.utc = d3_time_interval_utc(local);\n utc.floor = utc;\n utc.round = d3_time_interval_utc(round);\n utc.ceil = d3_time_interval_utc(ceil);\n utc.offset = d3_time_interval_utc(offset);\n utc.range = range_utc;\n return local;\n }\n function d3_time_interval_utc(method) {\n return function(date, k) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = date;\n return method(utc, k)._;\n } finally {\n d3_date = Date;\n }\n };\n }\n d3_time.year = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setMonth(0, 1);\n return date;\n }, function(date, offset) {\n date.setFullYear(date.getFullYear() + offset);\n }, function(date) {\n return date.getFullYear();\n });\n d3_time.years = d3_time.year.range;\n d3_time.years.utc = d3_time.year.utc.range;\n d3_time.day = d3_time_interval(function(date) {\n var day = new d3_date(2e3, 0);\n day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n return day;\n }, function(date, offset) {\n date.setDate(date.getDate() + offset);\n }, function(date) {\n return date.getDate() - 1;\n });\n d3_time.days = d3_time.day.range;\n d3_time.days.utc = d3_time.day.utc.range;\n d3_time.dayOfYear = function(date) {\n var year = d3_time.year(date);\n return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n };\n [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n i = 7 - i;\n var interval = d3_time[day] = d3_time_interval(function(date) {\n (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n return date;\n }, function(date, offset) {\n date.setDate(date.getDate() + Math.floor(offset) * 7);\n }, function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n });\n d3_time[day + \"s\"] = interval.range;\n d3_time[day + \"s\"].utc = interval.utc.range;\n d3_time[day + \"OfYear\"] = function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n };\n });\n d3_time.week = d3_time.sunday;\n d3_time.weeks = d3_time.sunday.range;\n d3_time.weeks.utc = d3_time.sunday.utc.range;\n d3_time.weekOfYear = d3_time.sundayOfYear;\n function d3_locale_timeFormat(locale) {\n var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n function d3_time_format(template) {\n var n = template.length;\n function format(date) {\n var string = [], i = -1, j = 0, c, p, f;\n while (++i < n) {\n if (template.charCodeAt(i) === 37) {\n string.push(template.slice(j, i));\n if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n string.push(c);\n j = i + 1;\n }\n }\n string.push(template.slice(j, i));\n return string.join(\"\");\n }\n format.parse = function(string) {\n var d = {\n y: 1900,\n m: 0,\n d: 1,\n H: 0,\n M: 0,\n S: 0,\n L: 0,\n Z: null\n }, i = d3_time_parse(d, template, string, 0);\n if (i != string.length) return null;\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n date.setFullYear(d.y, 0, 1);\n date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n } else date.setFullYear(d.y, d.m, d.d);\n date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n return localZ ? date._ : date;\n };\n format.toString = function() {\n return template;\n };\n return format;\n }\n function d3_time_parse(date, template, string, j) {\n var c, p, t, i = 0, n = template.length, m = string.length;\n while (i < n) {\n if (j >= m) return -1;\n c = template.charCodeAt(i++);\n if (c === 37) {\n t = template.charAt(i++);\n p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n if (!p || (j = p(date, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n d3_time_format.utc = function(template) {\n var local = d3_time_format(template);\n function format(date) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date();\n utc._ = date;\n return local(utc);\n } finally {\n d3_date = Date;\n }\n }\n format.parse = function(string) {\n try {\n d3_date = d3_date_utc;\n var date = local.parse(string);\n return date && date._;\n } finally {\n d3_date = Date;\n }\n };\n format.toString = local.toString;\n return format;\n };\n d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n locale_periods.forEach(function(p, i) {\n d3_time_periodLookup.set(p.toLowerCase(), i);\n });\n var d3_time_formats = {\n a: function(d) {\n return locale_shortDays[d.getDay()];\n },\n A: function(d) {\n return locale_days[d.getDay()];\n },\n b: function(d) {\n return locale_shortMonths[d.getMonth()];\n },\n B: function(d) {\n return locale_months[d.getMonth()];\n },\n c: d3_time_format(locale_dateTime),\n d: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n e: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n H: function(d, p) {\n return d3_time_formatPad(d.getHours(), p, 2);\n },\n I: function(d, p) {\n return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n },\n j: function(d, p) {\n return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n },\n L: function(d, p) {\n return d3_time_formatPad(d.getMilliseconds(), p, 3);\n },\n m: function(d, p) {\n return d3_time_formatPad(d.getMonth() + 1, p, 2);\n },\n M: function(d, p) {\n return d3_time_formatPad(d.getMinutes(), p, 2);\n },\n p: function(d) {\n return locale_periods[+(d.getHours() >= 12)];\n },\n S: function(d, p) {\n return d3_time_formatPad(d.getSeconds(), p, 2);\n },\n U: function(d, p) {\n return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n },\n w: function(d) {\n return d.getDay();\n },\n W: function(d, p) {\n return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n },\n x: d3_time_format(locale_date),\n X: d3_time_format(locale_time),\n y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n },\n Y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n },\n Z: d3_time_zone,\n \"%\": function() {\n return \"%\";\n }\n };\n var d3_time_parsers = {\n a: d3_time_parseWeekdayAbbrev,\n A: d3_time_parseWeekday,\n b: d3_time_parseMonthAbbrev,\n B: d3_time_parseMonth,\n c: d3_time_parseLocaleFull,\n d: d3_time_parseDay,\n e: d3_time_parseDay,\n H: d3_time_parseHour24,\n I: d3_time_parseHour24,\n j: d3_time_parseDayOfYear,\n L: d3_time_parseMilliseconds,\n m: d3_time_parseMonthNumber,\n M: d3_time_parseMinutes,\n p: d3_time_parseAmPm,\n S: d3_time_parseSeconds,\n U: d3_time_parseWeekNumberSunday,\n w: d3_time_parseWeekdayNumber,\n W: d3_time_parseWeekNumberMonday,\n x: d3_time_parseLocaleDate,\n X: d3_time_parseLocaleTime,\n y: d3_time_parseYear,\n Y: d3_time_parseFullYear,\n Z: d3_time_parseZone,\n \"%\": d3_time_parseLiteralPercent\n };\n function d3_time_parseWeekdayAbbrev(date, string, i) {\n d3_time_dayAbbrevRe.lastIndex = 0;\n var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseWeekday(date, string, i) {\n d3_time_dayRe.lastIndex = 0;\n var n = d3_time_dayRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonthAbbrev(date, string, i) {\n d3_time_monthAbbrevRe.lastIndex = 0;\n var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonth(date, string, i) {\n d3_time_monthRe.lastIndex = 0;\n var n = d3_time_monthRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseLocaleFull(date, string, i) {\n return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n }\n function d3_time_parseLocaleDate(date, string, i) {\n return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n }\n function d3_time_parseLocaleTime(date, string, i) {\n return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n }\n function d3_time_parseAmPm(date, string, i) {\n var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (date.p = n, i);\n }\n return d3_time_format;\n }\n var d3_time_formatPads = {\n \"-\": \"\",\n _: \" \",\n \"0\": \"0\"\n }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n function d3_time_formatPad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n function d3_time_formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n }\n function d3_time_formatLookup(names) {\n var map = new d3_Map(), i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n function d3_time_parseWeekdayNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n return n ? (date.w = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberSunday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.U = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberMonday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.W = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseFullYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n return n ? (date.y = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n }\n function d3_time_parseZone(date, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n i + 5) : -1;\n }\n function d3_time_expandYear(d) {\n return d + (d > 68 ? 1900 : 2e3);\n }\n function d3_time_parseMonthNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n }\n function d3_time_parseDay(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.d = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseDayOfYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.j = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseHour24(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.H = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMinutes(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.M = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseSeconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.S = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMilliseconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.L = +n[0], i + n[0].length) : -1;\n }\n function d3_time_zone(d) {\n var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n }\n function d3_time_parseLiteralPercent(date, string, i) {\n d3_time_percentRe.lastIndex = 0;\n var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n function d3_time_formatMulti(formats) {\n var n = formats.length, i = -1;\n while (++i < n) formats[i][0] = this(formats[i][0]);\n return function(date) {\n var i = 0, f = formats[i];\n while (!f[1](date)) f = formats[++i];\n return f[0](date);\n };\n }\n d3.locale = function(locale) {\n return {\n numberFormat: d3_locale_numberFormat(locale),\n timeFormat: d3_locale_timeFormat(locale)\n };\n };\n var d3_locale_enUS = d3.locale({\n decimal: \".\",\n thousands: \",\",\n grouping: [ 3 ],\n currency: [ \"$\", \"\" ],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\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 d3.format = d3_locale_enUS.numberFormat;\n d3.geo = {};\n function d3_adder() {}\n d3_adder.prototype = {\n s: 0,\n t: 0,\n add: function(y) {\n d3_adderSum(y, this.t, d3_adderTemp);\n d3_adderSum(d3_adderTemp.s, this.s, this);\n if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n },\n reset: function() {\n this.s = this.t = 0;\n },\n valueOf: function() {\n return this.s;\n }\n };\n var d3_adderTemp = new d3_adder();\n function d3_adderSum(a, b, o) {\n var x = o.s = a + b, bv = x - a, av = x - bv;\n o.t = a - av + (b - bv);\n }\n d3.geo.stream = function(object, listener) {\n if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n d3_geo_streamObjectType[object.type](object, listener);\n } else {\n d3_geo_streamGeometry(object, listener);\n }\n };\n function d3_geo_streamGeometry(geometry, listener) {\n if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n d3_geo_streamGeometryType[geometry.type](geometry, listener);\n }\n }\n var d3_geo_streamObjectType = {\n Feature: function(feature, listener) {\n d3_geo_streamGeometry(feature.geometry, listener);\n },\n FeatureCollection: function(object, listener) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n }\n };\n var d3_geo_streamGeometryType = {\n Sphere: function(object, listener) {\n listener.sphere();\n },\n Point: function(object, listener) {\n object = object.coordinates;\n listener.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n },\n LineString: function(object, listener) {\n d3_geo_streamLine(object.coordinates, listener, 0);\n },\n MultiLineString: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n },\n Polygon: function(object, listener) {\n d3_geo_streamPolygon(object.coordinates, listener);\n },\n MultiPolygon: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n },\n GeometryCollection: function(object, listener) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n }\n };\n function d3_geo_streamLine(coordinates, listener, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n listener.lineStart();\n while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n listener.lineEnd();\n }\n function d3_geo_streamPolygon(coordinates, listener) {\n var i = -1, n = coordinates.length;\n listener.polygonStart();\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n listener.polygonEnd();\n }\n d3.geo.area = function(object) {\n d3_geo_areaSum = 0;\n d3.geo.stream(object, d3_geo_area);\n return d3_geo_areaSum;\n };\n var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n var d3_geo_area = {\n sphere: function() {\n d3_geo_areaSum += 4 * π;\n },\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_areaRingSum.reset();\n d3_geo_area.lineStart = d3_geo_areaRingStart;\n },\n polygonEnd: function() {\n var area = 2 * d3_geo_areaRingSum;\n d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n }\n };\n function d3_geo_areaRingStart() {\n var λ00, φ00, λ0, cosφ0, sinφ0;\n d3_geo_area.point = function(λ, φ) {\n d3_geo_area.point = nextPoint;\n λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n sinφ0 = Math.sin(φ);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n φ = φ * d3_radians / 2 + π / 4;\n var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n d3_geo_areaRingSum.add(Math.atan2(v, u));\n λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n }\n d3_geo_area.lineEnd = function() {\n nextPoint(λ00, φ00);\n };\n }\n function d3_geo_cartesian(spherical) {\n var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n }\n function d3_geo_cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function d3_geo_cartesianCross(a, b) {\n return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n }\n function d3_geo_cartesianAdd(a, b) {\n a[0] += b[0];\n a[1] += b[1];\n a[2] += b[2];\n }\n function d3_geo_cartesianScale(vector, k) {\n return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n }\n function d3_geo_cartesianNormalize(d) {\n var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l;\n d[1] /= l;\n d[2] /= l;\n }\n function d3_geo_spherical(cartesian) {\n return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n }\n function d3_geo_sphericalEqual(a, b) {\n return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n }\n d3.geo.bounds = function() {\n var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n var bound = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n bound.point = ringPoint;\n bound.lineStart = ringStart;\n bound.lineEnd = ringEnd;\n dλSum = 0;\n d3_geo_area.polygonStart();\n },\n polygonEnd: function() {\n d3_geo_area.polygonEnd();\n bound.point = point;\n bound.lineStart = lineStart;\n bound.lineEnd = lineEnd;\n if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n range[0] = λ0, range[1] = λ1;\n }\n };\n function point(λ, φ) {\n ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n function linePoint(λ, φ) {\n var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n if (p0) {\n var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n d3_geo_cartesianNormalize(inflection);\n inflection = d3_geo_spherical(inflection);\n var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = inflection[1] * d3_degrees;\n if (φi > φ1) φ1 = φi;\n } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = -inflection[1] * d3_degrees;\n if (φi < φ0) φ0 = φi;\n } else {\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n if (antimeridian) {\n if (λ < λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n } else {\n if (λ1 >= λ0) {\n if (λ < λ0) λ0 = λ;\n if (λ > λ1) λ1 = λ;\n } else {\n if (λ > λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n }\n }\n } else {\n point(λ, φ);\n }\n p0 = p, λ_ = λ;\n }\n function lineStart() {\n bound.point = linePoint;\n }\n function lineEnd() {\n range[0] = λ0, range[1] = λ1;\n bound.point = point;\n p0 = null;\n }\n function ringPoint(λ, φ) {\n if (p0) {\n var dλ = λ - λ_;\n dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n } else λ__ = λ, φ__ = φ;\n d3_geo_area.point(λ, φ);\n linePoint(λ, φ);\n }\n function ringStart() {\n d3_geo_area.lineStart();\n }\n function ringEnd() {\n ringPoint(λ__, φ__);\n d3_geo_area.lineEnd();\n if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n range[0] = λ0, range[1] = λ1;\n p0 = null;\n }\n function angle(λ0, λ1) {\n return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n }\n function compareRanges(a, b) {\n return a[0] - b[0];\n }\n function withinRange(x, range) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n }\n return function(feature) {\n φ1 = λ1 = -(λ0 = φ0 = Infinity);\n ranges = [];\n d3.geo.stream(feature, bound);\n var n = ranges.length;\n if (n) {\n ranges.sort(compareRanges);\n for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n b = ranges[i];\n if (withinRange(b[0], a) || withinRange(b[1], a)) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n var best = -Infinity, dλ;\n for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n b = merged[i];\n if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n }\n }\n ranges = range = null;\n return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n };\n }();\n d3.geo.centroid = function(object) {\n d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, d3_geo_centroid);\n var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n if (m < ε2) {\n x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n m = x * x + y * y + z * z;\n if (m < ε2) return [ NaN, NaN ];\n }\n return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n };\n var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n var d3_geo_centroid = {\n sphere: d3_noop,\n point: d3_geo_centroidPoint,\n lineStart: d3_geo_centroidLineStart,\n lineEnd: d3_geo_centroidLineEnd,\n polygonStart: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n }\n };\n function d3_geo_centroidPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n }\n function d3_geo_centroidPointXYZ(x, y, z) {\n ++d3_geo_centroidW0;\n d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n }\n function d3_geo_centroidLineStart() {\n var x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroid.point = nextPoint;\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_centroidLineEnd() {\n d3_geo_centroid.point = d3_geo_centroidPoint;\n }\n function d3_geo_centroidRingStart() {\n var λ00, φ00, x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ00 = λ, φ00 = φ;\n d3_geo_centroid.point = nextPoint;\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n d3_geo_centroid.lineEnd = function() {\n nextPoint(λ00, φ00);\n d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n d3_geo_centroid.point = d3_geo_centroidPoint;\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n d3_geo_centroidX2 += v * cx;\n d3_geo_centroidY2 += v * cy;\n d3_geo_centroidZ2 += v * cz;\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_compose(a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n }\n function d3_true() {\n return true;\n }\n function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n var subject = [], clip = [];\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n];\n if (d3_geo_sphericalEqual(p0, p1)) {\n listener.lineStart();\n for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n listener.lineEnd();\n return;\n }\n var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n a.o = b;\n subject.push(a);\n clip.push(b);\n a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n a.o = b;\n subject.push(a);\n clip.push(b);\n });\n clip.sort(compare);\n d3_geo_clipPolygonLinkCircular(subject);\n d3_geo_clipPolygonLinkCircular(clip);\n if (!subject.length) return;\n for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n clip[i].e = entry = !entry;\n }\n var start = subject[0], points, point;\n while (1) {\n var current = start, isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n listener.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, listener);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, listener);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n listener.lineEnd();\n }\n }\n function d3_geo_clipPolygonLinkCircular(array) {\n if (!(n = array.length)) return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other;\n this.e = entry;\n this.v = false;\n this.n = this.p = null;\n }\n function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n return function(rotate, listener) {\n var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3.merge(segments);\n var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n if (segments.length) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n } else if (clipStartInside) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n listener.polygonStart();\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n listener.polygonEnd();\n }\n };\n function point(λ, φ) {\n var point = rotate(λ, φ);\n if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n }\n function pointLine(λ, φ) {\n var point = rotate(λ, φ);\n line.point(point[0], point[1]);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n var segments;\n var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n function pointRing(λ, φ) {\n ring.push([ λ, φ ]);\n var point = rotate(λ, φ);\n ringListener.point(point[0], point[1]);\n }\n function ringStart() {\n ringListener.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringListener.lineEnd();\n var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n) return;\n if (clean & 1) {\n segment = ringSegments[0];\n var n = segment.length - 1, i = -1, point;\n if (n > 0) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n while (++i < n) listener.point((point = segment[i])[0], point[1]);\n listener.lineEnd();\n }\n return;\n }\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n }\n return clip;\n };\n }\n function d3_geo_clipSegmentLength1(segment) {\n return segment.length > 1;\n }\n function d3_geo_clipBufferListener() {\n var lines = [], line;\n return {\n lineStart: function() {\n lines.push(line = []);\n },\n point: function(λ, φ) {\n line.push([ λ, φ ]);\n },\n lineEnd: d3_noop,\n buffer: function() {\n var buffer = lines;\n lines = [];\n line = null;\n return buffer;\n },\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n }\n };\n }\n function d3_geo_clipSort(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n }\n var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n function d3_geo_clipAntimeridianLine(listener) {\n var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n return {\n lineStart: function() {\n listener.lineStart();\n clean = 1;\n },\n point: function(λ1, φ1) {\n var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n if (abs(dλ - π) < ε) {\n listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n listener.point(λ1, φ0);\n clean = 0;\n } else if (sλ0 !== sλ1 && dλ >= π) {\n if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n clean = 0;\n }\n listener.point(λ0 = λ1, φ0 = φ1);\n sλ0 = sλ1;\n },\n lineEnd: function() {\n listener.lineEnd();\n λ0 = φ0 = NaN;\n },\n clean: function() {\n return 2 - clean;\n }\n };\n }\n function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n }\n function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n var φ;\n if (from == null) {\n φ = direction * halfπ;\n listener.point(-π, φ);\n listener.point(0, φ);\n listener.point(π, φ);\n listener.point(π, 0);\n listener.point(π, -φ);\n listener.point(0, -φ);\n listener.point(-π, -φ);\n listener.point(-π, 0);\n listener.point(-π, φ);\n } else if (abs(from[0] - to[0]) > ε) {\n var s = from[0] < to[0] ? π : -π;\n φ = direction * s / 2;\n listener.point(-s, φ);\n listener.point(0, φ);\n listener.point(s, φ);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function d3_geo_pointInPolygon(point, polygon) {\n var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n d3_geo_areaRingSum.reset();\n for (var i = 0, n = polygon.length; i < n; ++i) {\n var ring = polygon[i], m = ring.length;\n if (!m) continue;\n var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n while (true) {\n if (j === m) j = 0;\n point = ring[j];\n var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n d3_geo_cartesianNormalize(arc);\n var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n d3_geo_cartesianNormalize(intersection);\n var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n }\n }\n if (!j++) break;\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n }\n }\n return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;\n }\n function d3_geo_clipCircle(radius) {\n var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n function visible(λ, φ) {\n return Math.cos(λ) * Math.cos(φ) > cr;\n }\n function clipLine(listener) {\n var point0, c0, v0, v00, clean;\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(λ, φ) {\n var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n if (!point0 && (v00 = v0 = v)) listener.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n point1[0] += ε;\n point1[1] += ε;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n listener.lineStart();\n point2 = intersect(point1, point0);\n listener.point(point2[0], point2[1]);\n } else {\n point2 = intersect(point0, point1);\n listener.point(point2[0], point2[1]);\n listener.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n } else {\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n listener.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) listener.lineEnd();\n point0 = null;\n },\n clean: function() {\n return clean | (v00 && v0) << 1;\n }\n };\n }\n function intersect(a, b, two) {\n var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n if (!determinant) return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n d3_geo_cartesianAdd(A, B);\n var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n if (t2 < 0) return;\n var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n d3_geo_cartesianAdd(q, A);\n q = d3_geo_spherical(q);\n if (!two) return q;\n var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n d3_geo_cartesianAdd(q1, A);\n return [ q, d3_geo_spherical(q1) ];\n }\n }\n function code(λ, φ) {\n var r = smallRadius ? radius : π - radius, code = 0;\n if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n return code;\n }\n }\n function d3_geom_clipLine(x0, y0, x1, y1) {\n return function(line) {\n var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n if (t0 > 0) line.a = {\n x: ax + t0 * dx,\n y: ay + t0 * dy\n };\n if (t1 < 1) line.b = {\n x: ax + t1 * dx,\n y: ay + t1 * dy\n };\n return line;\n };\n }\n var d3_geo_clipExtentMAX = 1e9;\n d3.geo.clipExtent = function() {\n var x0, y0, x1, y1, stream, clip, clipExtent = {\n stream: function(output) {\n if (stream) stream.valid = false;\n stream = clip(output);\n stream.valid = true;\n return stream;\n },\n extent: function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n if (stream) stream.valid = false, stream = null;\n return clipExtent;\n }\n };\n return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n };\n function d3_geo_clipExtent(x0, y0, x1, y1) {\n return function(listener) {\n var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n listener = bufferListener;\n segments = [];\n polygon = [];\n clean = true;\n },\n polygonEnd: function() {\n listener = listener_;\n segments = d3.merge(segments);\n var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n if (inside || visible) {\n listener.polygonStart();\n if (inside) {\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (visible) {\n d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n }\n listener.polygonEnd();\n }\n segments = polygon = ring = null;\n }\n };\n function insidePolygon(p) {\n var wn = 0, n = polygon.length, y = p[1];\n for (var i = 0; i < n; ++i) {\n for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n b = v[j];\n if (a[1] <= y) {\n if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n } else {\n if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n }\n a = b;\n }\n }\n return wn !== 0;\n }\n function interpolate(from, to, direction, listener) {\n var a = 0, a1 = 0;\n if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n do {\n listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n } while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function pointVisible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function point(x, y) {\n if (pointVisible(x, y)) listener.point(x, y);\n }\n var x__, y__, v__, x_, y_, v_, first, clean;\n function lineStart() {\n clip.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferListener.rejoin();\n segments.push(bufferListener.buffer());\n }\n clip.point = point;\n if (v_) listener.lineEnd();\n }\n function linePoint(x, y) {\n x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n var v = pointVisible(x, y);\n if (polygon) ring.push([ x, y ]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n listener.lineStart();\n listener.point(x, y);\n }\n } else {\n if (v && v_) listener.point(x, y); else {\n var l = {\n a: {\n x: x_,\n y: y_\n },\n b: {\n x: x,\n y: y\n }\n };\n if (clipLine(l)) {\n if (!v_) {\n listener.lineStart();\n listener.point(l.a.x, l.a.y);\n }\n listener.point(l.b.x, l.b.y);\n if (!v) listener.lineEnd();\n clean = false;\n } else if (v) {\n listener.lineStart();\n listener.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clip;\n };\n function corner(p, direction) {\n return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n }\n function compare(a, b) {\n return comparePoints(a.x, b.x);\n }\n function comparePoints(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n }\n }\n function d3_geo_conic(projectAt) {\n var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n p.parallels = function(_) {\n if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n };\n return p;\n }\n function d3_geo_conicEqualArea(φ0, φ1) {\n var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n function forward(λ, φ) {\n var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = ρ0 - y;\n return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n };\n return forward;\n }\n (d3.geo.conicEqualArea = function() {\n return d3_geo_conic(d3_geo_conicEqualArea);\n }).raw = d3_geo_conicEqualArea;\n d3.geo.albers = function() {\n return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n };\n d3.geo.albersUsa = function() {\n var lower48 = d3.geo.albers();\n var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n var point, pointStream = {\n point: function(x, y) {\n point = [ x, y ];\n }\n }, lower48Point, alaskaPoint, hawaiiPoint;\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n point = null;\n (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n return point;\n }\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n };\n albersUsa.stream = function(stream) {\n var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n return {\n point: function(x, y) {\n lower48Stream.point(x, y);\n alaskaStream.point(x, y);\n hawaiiStream.point(x, y);\n },\n sphere: function() {\n lower48Stream.sphere();\n alaskaStream.sphere();\n hawaiiStream.sphere();\n },\n lineStart: function() {\n lower48Stream.lineStart();\n alaskaStream.lineStart();\n hawaiiStream.lineStart();\n },\n lineEnd: function() {\n lower48Stream.lineEnd();\n alaskaStream.lineEnd();\n hawaiiStream.lineEnd();\n },\n polygonStart: function() {\n lower48Stream.polygonStart();\n alaskaStream.polygonStart();\n hawaiiStream.polygonStart();\n },\n polygonEnd: function() {\n lower48Stream.polygonEnd();\n alaskaStream.polygonEnd();\n hawaiiStream.polygonEnd();\n }\n };\n };\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_);\n alaska.precision(_);\n hawaii.precision(_);\n return albersUsa;\n };\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_);\n alaska.scale(_ * .35);\n hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n return albersUsa;\n };\n return albersUsa.scale(1070);\n };\n var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_pathAreaPolygon = 0;\n d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n }\n };\n function d3_geo_pathAreaRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathArea.point = function(x, y) {\n d3_geo_pathArea.point = nextPoint;\n x00 = x0 = x, y00 = y0 = y;\n };\n function nextPoint(x, y) {\n d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n x0 = x, y0 = y;\n }\n d3_geo_pathArea.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n var d3_geo_pathBounds = {\n point: d3_geo_pathBoundsPoint,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_pathBoundsPoint(x, y) {\n if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n }\n function d3_geo_pathBuffer() {\n var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointCircle = d3_geo_pathBufferCircle(_);\n return stream;\n },\n result: function() {\n if (buffer.length) {\n var result = buffer.join(\"\");\n buffer = [];\n return result;\n }\n }\n };\n function point(x, y) {\n buffer.push(\"M\", x, \",\", y, pointCircle);\n }\n function pointLineStart(x, y) {\n buffer.push(\"M\", x, \",\", y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n buffer.push(\"L\", x, \",\", y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n buffer.push(\"Z\");\n }\n return stream;\n }\n function d3_geo_pathBufferCircle(radius) {\n return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n }\n var d3_geo_pathCentroid = {\n point: d3_geo_pathCentroidPoint,\n lineStart: d3_geo_pathCentroidLineStart,\n lineEnd: d3_geo_pathCentroidLineEnd,\n polygonStart: function() {\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n }\n };\n function d3_geo_pathCentroidPoint(x, y) {\n d3_geo_centroidX0 += x;\n d3_geo_centroidY0 += y;\n ++d3_geo_centroidZ0;\n }\n function d3_geo_pathCentroidLineStart() {\n var x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n }\n function d3_geo_pathCentroidLineEnd() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n }\n function d3_geo_pathCentroidRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n z = y0 * x - x0 * y;\n d3_geo_centroidX2 += z * (x0 + x);\n d3_geo_centroidY2 += z * (y0 + y);\n d3_geo_centroidZ2 += z * 3;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n d3_geo_pathCentroid.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n function d3_geo_pathContext(context) {\n var pointRadius = 4.5;\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointRadius = _;\n return stream;\n },\n result: d3_noop\n };\n function point(x, y) {\n context.moveTo(x + pointRadius, y);\n context.arc(x, y, pointRadius, 0, τ);\n }\n function pointLineStart(x, y) {\n context.moveTo(x, y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n context.lineTo(x, y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n context.closePath();\n }\n return stream;\n }\n function d3_geo_resample(project) {\n var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n function resample(stream) {\n return (maxDepth ? resampleRecursive : resampleNone)(stream);\n }\n function resampleNone(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n });\n }\n function resampleRecursive(stream) {\n var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n var resample = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.polygonStart();\n resample.lineStart = ringStart;\n },\n polygonEnd: function() {\n stream.polygonEnd();\n resample.lineStart = lineStart;\n }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resample.point = linePoint;\n stream.lineStart();\n }\n function linePoint(λ, φ) {\n var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resample.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resample.point = ringPoint;\n resample.lineEnd = ringEnd;\n }\n function ringPoint(λ, φ) {\n linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resample.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n resample.lineEnd = lineEnd;\n lineEnd();\n }\n return resample;\n }\n function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * δ2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n }\n }\n }\n resample.precision = function(_) {\n if (!arguments.length) return Math.sqrt(δ2);\n maxDepth = (δ2 = _ * _) > 0 && 16;\n return resample;\n };\n return resample;\n }\n d3.geo.path = function() {\n var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n d3.geo.stream(object, cacheStream);\n }\n return contextStream.result();\n }\n path.area = function(object) {\n d3_geo_pathAreaSum = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathArea));\n return d3_geo_pathAreaSum;\n };\n path.centroid = function(object) {\n d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n };\n path.bounds = function(object) {\n d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n };\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n return reset();\n };\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return reset();\n };\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n function reset() {\n cacheStream = null;\n return path;\n }\n return path.projection(d3.geo.albersUsa()).context(null);\n };\n function d3_geo_pathProjectStream(project) {\n var resample = d3_geo_resample(function(x, y) {\n return project([ x * d3_degrees, y * d3_degrees ]);\n });\n return function(stream) {\n return d3_geo_projectionRadians(resample(stream));\n };\n }\n d3.geo.transform = function(methods) {\n return {\n stream: function(stream) {\n var transform = new d3_geo_transform(stream);\n for (var k in methods) transform[k] = methods[k];\n return transform;\n }\n };\n };\n function d3_geo_transform(stream) {\n this.stream = stream;\n }\n d3_geo_transform.prototype = {\n point: function(x, y) {\n this.stream.point(x, y);\n },\n sphere: function() {\n this.stream.sphere();\n },\n lineStart: function() {\n this.stream.lineStart();\n },\n lineEnd: function() {\n this.stream.lineEnd();\n },\n polygonStart: function() {\n this.stream.polygonStart();\n },\n polygonEnd: function() {\n this.stream.polygonEnd();\n }\n };\n function d3_geo_transformPoint(stream, point) {\n return {\n point: point,\n sphere: function() {\n stream.sphere();\n },\n lineStart: function() {\n stream.lineStart();\n },\n lineEnd: function() {\n stream.lineEnd();\n },\n polygonStart: function() {\n stream.polygonStart();\n },\n polygonEnd: function() {\n stream.polygonEnd();\n }\n };\n }\n d3.geo.projection = d3_geo_projection;\n d3.geo.projectionMutator = d3_geo_projectionMutator;\n function d3_geo_projection(project) {\n return d3_geo_projectionMutator(function() {\n return project;\n })();\n }\n function d3_geo_projectionMutator(projectAt) {\n var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n x = project(x, y);\n return [ x[0] * k + δx, δy - x[1] * k ];\n }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n function projection(point) {\n point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n return [ point[0] * k + δx, δy - point[1] * k ];\n }\n function invert(point) {\n point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n }\n projection.stream = function(output) {\n if (stream) stream.valid = false;\n stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n stream.valid = true;\n return stream;\n };\n projection.clipAngle = function(_) {\n if (!arguments.length) return clipAngle;\n preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n return invalidate();\n };\n projection.clipExtent = function(_) {\n if (!arguments.length) return clipExtent;\n clipExtent = _;\n postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n return invalidate();\n };\n projection.scale = function(_) {\n if (!arguments.length) return k;\n k = +_;\n return reset();\n };\n projection.translate = function(_) {\n if (!arguments.length) return [ x, y ];\n x = +_[0];\n y = +_[1];\n return reset();\n };\n projection.center = function(_) {\n if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n λ = _[0] % 360 * d3_radians;\n φ = _[1] % 360 * d3_radians;\n return reset();\n };\n projection.rotate = function(_) {\n if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n δλ = _[0] % 360 * d3_radians;\n δφ = _[1] % 360 * d3_radians;\n δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n return reset();\n };\n d3.rebind(projection, projectResample, \"precision\");\n function reset() {\n projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n var center = project(λ, φ);\n δx = x - center[0] * k;\n δy = y + center[1] * k;\n return invalidate();\n }\n function invalidate() {\n if (stream) stream.valid = false, stream = null;\n return projection;\n }\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return reset();\n };\n }\n function d3_geo_projectionRadians(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n stream.point(x * d3_radians, y * d3_radians);\n });\n }\n function d3_geo_equirectangular(λ, φ) {\n return [ λ, φ ];\n }\n (d3.geo.equirectangular = function() {\n return d3_geo_projection(d3_geo_equirectangular);\n }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n d3.geo.rotation = function(rotate) {\n rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n }\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n };\n return forward;\n };\n function d3_geo_identityRotation(λ, φ) {\n return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n }\n d3_geo_identityRotation.invert = d3_geo_equirectangular;\n function d3_geo_rotation(δλ, δφ, δγ) {\n return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n }\n function d3_geo_forwardRotationλ(δλ) {\n return function(λ, φ) {\n return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n };\n }\n function d3_geo_rotationλ(δλ) {\n var rotation = d3_geo_forwardRotationλ(δλ);\n rotation.invert = d3_geo_forwardRotationλ(-δλ);\n return rotation;\n }\n function d3_geo_rotationφγ(δφ, δγ) {\n var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n function rotation(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n }\n rotation.invert = function(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n };\n return rotation;\n }\n d3.geo.circle = function() {\n var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n function circle() {\n var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n interpolate(null, null, 1, {\n point: function(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= d3_degrees, x[1] *= d3_degrees;\n }\n });\n return {\n type: \"Polygon\",\n coordinates: [ ring ]\n };\n }\n circle.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return circle;\n };\n circle.angle = function(x) {\n if (!arguments.length) return angle;\n interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n return circle;\n };\n circle.precision = function(_) {\n if (!arguments.length) return precision;\n interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n return circle;\n };\n return circle.angle(90);\n };\n function d3_geo_circleInterpolate(radius, precision) {\n var cr = Math.cos(radius), sr = Math.sin(radius);\n return function(from, to, direction, listener) {\n var step = direction * precision;\n if (from != null) {\n from = d3_geo_circleAngle(cr, from);\n to = d3_geo_circleAngle(cr, to);\n if (direction > 0 ? from < to : from > to) from += direction * τ;\n } else {\n from = radius + direction * τ;\n to = radius - .5 * step;\n }\n for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n }\n };\n }\n function d3_geo_circleAngle(cr, point) {\n var a = d3_geo_cartesian(point);\n a[0] -= cr;\n d3_geo_cartesianNormalize(a);\n var angle = d3_acos(-a[1]);\n return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n }\n d3.geo.distance = function(a, b) {\n var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n };\n d3.geo.graticule = function() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return {\n type: \"MultiLineString\",\n coordinates: lines()\n };\n }\n function lines() {\n return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n return abs(x % DX) > ε;\n }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n return abs(y % DY) > ε;\n }).map(y));\n }\n graticule.lines = function() {\n return lines().map(function(coordinates) {\n return {\n type: \"LineString\",\n coordinates: coordinates\n };\n });\n };\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n };\n };\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.minorExtent();\n return graticule.majorExtent(_).minorExtent(_);\n };\n graticule.majorExtent = function(_) {\n if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.minorExtent = function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function(_) {\n if (!arguments.length) return graticule.minorStep();\n return graticule.majorStep(_).minorStep(_);\n };\n graticule.majorStep = function(_) {\n if (!arguments.length) return [ DX, DY ];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.minorStep = function(_) {\n if (!arguments.length) return [ dx, dy ];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = d3_geo_graticuleX(y0, y1, 90);\n y = d3_geo_graticuleY(x0, x1, precision);\n X = d3_geo_graticuleX(Y0, Y1, 90);\n Y = d3_geo_graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n };\n function d3_geo_graticuleX(y0, y1, dy) {\n var y = d3.range(y0, y1 - ε, dy).concat(y1);\n return function(x) {\n return y.map(function(y) {\n return [ x, y ];\n });\n };\n }\n function d3_geo_graticuleY(x0, x1, dx) {\n var x = d3.range(x0, x1 - ε, dx).concat(x1);\n return function(y) {\n return x.map(function(x) {\n return [ x, y ];\n });\n };\n }\n function d3_source(d) {\n return d.source;\n }\n function d3_target(d) {\n return d.target;\n }\n d3.geo.greatArc = function() {\n var source = d3_source, source_, target = d3_target, target_;\n function greatArc() {\n return {\n type: \"LineString\",\n coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n };\n }\n greatArc.distance = function() {\n return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n };\n greatArc.source = function(_) {\n if (!arguments.length) return source;\n source = _, source_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.target = function(_) {\n if (!arguments.length) return target;\n target = _, target_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.precision = function() {\n return arguments.length ? greatArc : 0;\n };\n return greatArc;\n };\n d3.geo.interpolate = function(source, target) {\n return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n };\n function d3_geo_interpolate(x0, y0, x1, y1) {\n var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n var interpolate = d ? function(t) {\n var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n } : function() {\n return [ x0 * d3_degrees, y0 * d3_degrees ];\n };\n interpolate.distance = d;\n return interpolate;\n }\n d3.geo.length = function(object) {\n d3_geo_lengthSum = 0;\n d3.geo.stream(object, d3_geo_length);\n return d3_geo_lengthSum;\n };\n var d3_geo_lengthSum;\n var d3_geo_length = {\n sphere: d3_noop,\n point: d3_noop,\n lineStart: d3_geo_lengthLineStart,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_lengthLineStart() {\n var λ0, sinφ0, cosφ0;\n d3_geo_length.point = function(λ, φ) {\n λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n d3_geo_length.point = nextPoint;\n };\n d3_geo_length.lineEnd = function() {\n d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n };\n function nextPoint(λ, φ) {\n var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n }\n }\n function d3_geo_azimuthal(scale, angle) {\n function azimuthal(λ, φ) {\n var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n }\n azimuthal.invert = function(x, y) {\n var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n };\n return azimuthal;\n }\n var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n return Math.sqrt(2 / (1 + cosλcosφ));\n }, function(ρ) {\n return 2 * Math.asin(ρ / 2);\n });\n (d3.geo.azimuthalEqualArea = function() {\n return d3_geo_projection(d3_geo_azimuthalEqualArea);\n }).raw = d3_geo_azimuthalEqualArea;\n var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n var c = Math.acos(cosλcosφ);\n return c && c / Math.sin(c);\n }, d3_identity);\n (d3.geo.azimuthalEquidistant = function() {\n return d3_geo_projection(d3_geo_azimuthalEquidistant);\n }).raw = d3_geo_azimuthalEquidistant;\n function d3_geo_conicConformal(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), t = function(φ) {\n return Math.tan(π / 4 + φ / 2);\n }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n if (!n) return d3_geo_mercator;\n function forward(λ, φ) {\n if (F > 0) {\n if (φ < -halfπ + ε) φ = -halfπ + ε;\n } else {\n if (φ > halfπ - ε) φ = halfπ - ε;\n }\n var ρ = F / Math.pow(t(φ), n);\n return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n };\n return forward;\n }\n (d3.geo.conicConformal = function() {\n return d3_geo_conic(d3_geo_conicConformal);\n }).raw = d3_geo_conicConformal;\n function d3_geo_conicEquidistant(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n if (abs(n) < ε) return d3_geo_equirectangular;\n function forward(λ, φ) {\n var ρ = G - φ;\n return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = G - y;\n return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n };\n return forward;\n }\n (d3.geo.conicEquidistant = function() {\n return d3_geo_conic(d3_geo_conicEquidistant);\n }).raw = d3_geo_conicEquidistant;\n var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / cosλcosφ;\n }, Math.atan);\n (d3.geo.gnomonic = function() {\n return d3_geo_projection(d3_geo_gnomonic);\n }).raw = d3_geo_gnomonic;\n function d3_geo_mercator(λ, φ) {\n return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n }\n d3_geo_mercator.invert = function(x, y) {\n return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n };\n function d3_geo_mercatorProjection(project) {\n var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n m.scale = function() {\n var v = scale.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.translate = function() {\n var v = translate.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.clipExtent = function(_) {\n var v = clipExtent.apply(m, arguments);\n if (v === m) {\n if (clipAuto = _ == null) {\n var k = π * scale(), t = translate();\n clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n }\n } else if (clipAuto) {\n v = null;\n }\n return v;\n };\n return m.clipExtent(null);\n }\n (d3.geo.mercator = function() {\n return d3_geo_mercatorProjection(d3_geo_mercator);\n }).raw = d3_geo_mercator;\n var d3_geo_orthographic = d3_geo_azimuthal(function() {\n return 1;\n }, Math.asin);\n (d3.geo.orthographic = function() {\n return d3_geo_projection(d3_geo_orthographic);\n }).raw = d3_geo_orthographic;\n var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / (1 + cosλcosφ);\n }, function(ρ) {\n return 2 * Math.atan(ρ);\n });\n (d3.geo.stereographic = function() {\n return d3_geo_projection(d3_geo_stereographic);\n }).raw = d3_geo_stereographic;\n function d3_geo_transverseMercator(λ, φ) {\n return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n }\n d3_geo_transverseMercator.invert = function(x, y) {\n return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n };\n (d3.geo.transverseMercator = function() {\n var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n projection.center = function(_) {\n return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n };\n projection.rotate = function(_) {\n return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n [ _[0], _[1], _[2] - 90 ]);\n };\n return rotate([ 0, 0, 90 ]);\n }).raw = d3_geo_transverseMercator;\n d3.geom = {};\n function d3_geom_pointX(d) {\n return d[0];\n }\n function d3_geom_pointY(d) {\n return d[1];\n }\n d3.geom.hull = function(vertices) {\n var x = d3_geom_pointX, y = d3_geom_pointY;\n if (arguments.length) return hull(vertices);\n function hull(data) {\n if (data.length < 3) return [];\n var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n for (i = 0; i < n; i++) {\n points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n }\n points.sort(d3_geom_hullOrder);\n for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n return polygon;\n }\n hull.x = function(_) {\n return arguments.length ? (x = _, hull) : x;\n };\n hull.y = function(_) {\n return arguments.length ? (y = _, hull) : y;\n };\n return hull;\n };\n function d3_geom_hullUpper(points) {\n var n = points.length, hull = [ 0, 1 ], hs = 2;\n for (var i = 2; i < n; i++) {\n while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n hull[hs++] = i;\n }\n return hull.slice(0, hs);\n }\n function d3_geom_hullOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n }\n d3.geom.polygon = function(coordinates) {\n d3_subclass(coordinates, d3_geom_polygonPrototype);\n return coordinates;\n };\n var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n d3_geom_polygonPrototype.area = function() {\n var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n while (++i < n) {\n a = b;\n b = this[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n return area * .5;\n };\n d3_geom_polygonPrototype.centroid = function(k) {\n var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n if (!arguments.length) k = -1 / (6 * this.area());\n while (++i < n) {\n a = b;\n b = this[i];\n c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n return [ x * k, y * k ];\n };\n d3_geom_polygonPrototype.clip = function(subject) {\n var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n while (++i < n) {\n input = subject.slice();\n subject.length = 0;\n b = this[i];\n c = input[(m = input.length - closed) - 1];\n j = -1;\n while (++j < m) {\n d = input[j];\n if (d3_geom_polygonInside(d, a, b)) {\n if (!d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n subject.push(d);\n } else if (d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n c = d;\n }\n if (closed) subject.push(subject[0]);\n a = b;\n }\n return subject;\n };\n function d3_geom_polygonInside(p, a, b) {\n return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n }\n function d3_geom_polygonIntersect(c, d, a, b) {\n var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n return [ x1 + ua * x21, y1 + ua * y21 ];\n }\n function d3_geom_polygonClosed(coordinates) {\n var a = coordinates[0], b = coordinates[coordinates.length - 1];\n return !(a[0] - b[0] || a[1] - b[1]);\n }\n var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n function d3_geom_voronoiBeach() {\n d3_geom_voronoiRedBlackNode(this);\n this.edge = this.site = this.circle = null;\n }\n function d3_geom_voronoiCreateBeach(site) {\n var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n beach.site = site;\n return beach;\n }\n function d3_geom_voronoiDetachBeach(beach) {\n d3_geom_voronoiDetachCircle(beach);\n d3_geom_voronoiBeaches.remove(beach);\n d3_geom_voronoiBeachPool.push(beach);\n d3_geom_voronoiRedBlackNode(beach);\n }\n function d3_geom_voronoiRemoveBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n x: x,\n y: y\n }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n d3_geom_voronoiDetachBeach(beach);\n var lArc = previous;\n while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachCircle(lArc);\n var rArc = next;\n while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n next = rArc.N;\n disappearing.push(rArc);\n d3_geom_voronoiDetachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n d3_geom_voronoiDetachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiAddBeach(site) {\n var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n while (node) {\n dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n if (dxl > ε) node = node.L; else {\n dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n if (dxr > ε) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -ε) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -ε) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n var newArc = d3_geom_voronoiCreateBeach(site);\n d3_geom_voronoiBeaches.insert(lArc, newArc);\n if (!lArc && !rArc) return;\n if (lArc === rArc) {\n d3_geom_voronoiDetachCircle(lArc);\n rArc = d3_geom_voronoiCreateBeach(lArc.site);\n d3_geom_voronoiBeaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n return;\n }\n if (!rArc) {\n newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n return;\n }\n d3_geom_voronoiDetachCircle(lArc);\n d3_geom_voronoiDetachCircle(rArc);\n var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n x: (cy * hb - by * hc) / d + ax,\n y: (bx * hc - cx * hb) / d + ay\n };\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n if (!pby2) return rfocx;\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n site = lArc.site;\n var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n if (!plby2) return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site.y === directrix ? site.x : Infinity;\n }\n function d3_geom_voronoiCell(site) {\n this.site = site;\n this.edges = [];\n }\n d3_geom_voronoiCell.prototype.prepare = function() {\n var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n while (iHalfEdge--) {\n edge = halfEdges[iHalfEdge].edge;\n if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n }\n halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n return halfEdges.length;\n };\n function d3_geom_voronoiCloseCells(extent) {\n var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n while (iCell--) {\n cell = cells[iCell];\n if (!cell || !cell.prepare()) continue;\n halfEdges = cell.edges;\n nHalfEdges = halfEdges.length;\n iHalfEdge = 0;\n while (iHalfEdge < nHalfEdges) {\n end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n x: x0,\n y: abs(x2 - x0) < ε ? y2 : y1\n } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n x: abs(y2 - y1) < ε ? x2 : x1,\n y: y1\n } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n x: x1,\n y: abs(x2 - x1) < ε ? y2 : y0\n } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n x: abs(y2 - y0) < ε ? x2 : x0,\n y: y0\n } : null), cell.site, null));\n ++nHalfEdges;\n }\n }\n }\n }\n function d3_geom_voronoiHalfEdgeOrder(a, b) {\n return b.angle - a.angle;\n }\n function d3_geom_voronoiCircle() {\n d3_geom_voronoiRedBlackNode(this);\n this.x = this.y = this.arc = this.site = this.cy = null;\n }\n function d3_geom_voronoiAttachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc) return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite) return;\n var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -ε2) return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = cy + Math.sqrt(x * x + y * y);\n circle.cy = cy;\n arc.circle = circle;\n var before = null, node = d3_geom_voronoiCircles._;\n while (node) {\n if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n if (node.L) node = node.L; else {\n before = node.P;\n break;\n }\n } else {\n if (node.R) node = node.R; else {\n before = node;\n break;\n }\n }\n }\n d3_geom_voronoiCircles.insert(before, circle);\n if (!before) d3_geom_voronoiFirstCircle = circle;\n }\n function d3_geom_voronoiDetachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n d3_geom_voronoiCircles.remove(circle);\n d3_geom_voronoiCirclePool.push(circle);\n d3_geom_voronoiRedBlackNode(circle);\n arc.circle = null;\n }\n }\n function d3_geom_voronoiClipEdges(extent) {\n var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n while (i--) {\n e = edges[i];\n if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n e.a = e.b = null;\n edges.splice(i, 1);\n }\n }\n }\n function d3_geom_voronoiConnectEdge(edge, extent) {\n var vb = edge.b;\n if (vb) return true;\n var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!va) va = {\n x: fx,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: fx,\n y: y1\n };\n } else {\n if (!va) va = {\n x: fx,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: fx,\n y: y0\n };\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!va) va = {\n x: (y0 - fb) / fm,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: (y1 - fb) / fm,\n y: y1\n };\n } else {\n if (!va) va = {\n x: (y1 - fb) / fm,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: (y0 - fb) / fm,\n y: y0\n };\n }\n } else {\n if (ly < ry) {\n if (!va) va = {\n x: x0,\n y: fm * x0 + fb\n }; else if (va.x >= x1) return;\n vb = {\n x: x1,\n y: fm * x1 + fb\n };\n } else {\n if (!va) va = {\n x: x1,\n y: fm * x1 + fb\n }; else if (va.x < x0) return;\n vb = {\n x: x0,\n y: fm * x0 + fb\n };\n }\n }\n }\n edge.a = va;\n edge.b = vb;\n return true;\n }\n function d3_geom_voronoiEdge(lSite, rSite) {\n this.l = lSite;\n this.r = rSite;\n this.a = this.b = null;\n }\n function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, rSite);\n d3_geom_voronoiEdges.push(edge);\n if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n return edge;\n }\n function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, null);\n edge.a = va;\n edge.b = vb;\n d3_geom_voronoiEdges.push(edge);\n return edge;\n }\n function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n if (!edge.a && !edge.b) {\n edge.a = vertex;\n edge.l = lSite;\n edge.r = rSite;\n } else if (edge.l === rSite) {\n edge.b = vertex;\n } else {\n edge.a = vertex;\n }\n }\n function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n var va = edge.a, vb = edge.b;\n this.edge = edge;\n this.site = lSite;\n this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n }\n d3_geom_voronoiHalfEdge.prototype = {\n start: function() {\n return this.edge.l === this.site ? this.edge.a : this.edge.b;\n },\n end: function() {\n return this.edge.l === this.site ? this.edge.b : this.edge.a;\n }\n };\n function d3_geom_voronoiRedBlackTree() {\n this._ = null;\n }\n function d3_geom_voronoiRedBlackNode(node) {\n node.U = node.C = node.L = node.R = node.P = node.N = null;\n }\n d3_geom_voronoiRedBlackTree.prototype = {\n insert: function(after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = d3_geom_voronoiRedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n if (parent) {\n if (parent.L === node) parent.L = next; else parent.R = next;\n } else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node) node.C = false;\n }\n };\n function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n }\n function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n }\n function d3_geom_voronoiRedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n }\n function d3_geom_voronoi(sites, bbox) {\n var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n d3_geom_voronoiEdges = [];\n d3_geom_voronoiCells = new Array(sites.length);\n d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n while (true) {\n circle = d3_geom_voronoiFirstCircle;\n if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n if (site.x !== x0 || site.y !== y0) {\n d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n d3_geom_voronoiAddBeach(site);\n x0 = site.x, y0 = site.y;\n }\n site = sites.pop();\n } else if (circle) {\n d3_geom_voronoiRemoveBeach(circle.arc);\n } else {\n break;\n }\n }\n if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n var diagram = {\n cells: d3_geom_voronoiCells,\n edges: d3_geom_voronoiEdges\n };\n d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n return diagram;\n }\n function d3_geom_voronoiVertexOrder(a, b) {\n return b.y - a.y || b.x - a.x;\n }\n d3.geom.voronoi = function(points) {\n var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n if (points) return voronoi(points);\n function voronoi(data) {\n var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n var s = e.start();\n return [ s.x, s.y ];\n }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n polygon.point = data[i];\n });\n return polygons;\n }\n function sites(data) {\n return data.map(function(d, i) {\n return {\n x: Math.round(fx(d, i) / ε) * ε,\n y: Math.round(fy(d, i) / ε) * ε,\n i: i\n };\n });\n }\n voronoi.links = function(data) {\n return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n return edge.l && edge.r;\n }).map(function(edge) {\n return {\n source: data[edge.l.i],\n target: data[edge.r.i]\n };\n });\n };\n voronoi.triangles = function(data) {\n var triangles = [];\n d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n while (++j < m) {\n e0 = e1;\n s0 = s1;\n e1 = edges[j].edge;\n s1 = e1.l === site ? e1.r : e1.l;\n if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n }\n }\n });\n return triangles;\n };\n voronoi.x = function(_) {\n return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n };\n voronoi.y = function(_) {\n return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n };\n voronoi.clipExtent = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n return voronoi;\n };\n voronoi.size = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n };\n return voronoi;\n };\n var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n function d3_geom_voronoiTriangleArea(a, b, c) {\n return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n }\n d3.geom.delaunay = function(vertices) {\n return d3.geom.voronoi().triangles(vertices);\n };\n d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n if (compat = arguments.length) {\n x = d3_geom_quadtreeCompatX;\n y = d3_geom_quadtreeCompatY;\n if (compat === 3) {\n y2 = y1;\n x2 = x1;\n y1 = x1 = 0;\n }\n return quadtree(points);\n }\n function quadtree(data) {\n var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n if (x1 != null) {\n x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n } else {\n x2_ = y2_ = -(x1_ = y1_ = Infinity);\n xs = [], ys = [];\n n = data.length;\n if (compat) for (i = 0; i < n; ++i) {\n d = data[i];\n if (d.x < x1_) x1_ = d.x;\n if (d.y < y1_) y1_ = d.y;\n if (d.x > x2_) x2_ = d.x;\n if (d.y > y2_) y2_ = d.y;\n xs.push(d.x);\n ys.push(d.y);\n } else for (i = 0; i < n; ++i) {\n var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n if (x_ < x1_) x1_ = x_;\n if (y_ < y1_) y1_ = y_;\n if (x_ > x2_) x2_ = x_;\n if (y_ > y2_) y2_ = y_;\n xs.push(x_);\n ys.push(y_);\n }\n }\n var dx = x2_ - x1_, dy = y2_ - y1_;\n if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n function insert(n, d, x, y, x1, y1, x2, y2) {\n if (isNaN(x) || isNaN(y)) return;\n if (n.leaf) {\n var nx = n.x, ny = n.y;\n if (nx != null) {\n if (abs(nx - x) + abs(ny - y) < .01) {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n } else {\n var nPoint = n.point;\n n.x = n.y = n.point = null;\n insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n } else {\n n.x = x, n.y = y, n.point = d;\n }\n } else {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n }\n function insertChild(n, d, x, y, x1, y1, x2, y2) {\n var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = xm; else x2 = xm;\n if (below) y1 = ym; else y2 = ym;\n insert(n, d, x, y, x1, y1, x2, y2);\n }\n var root = d3_geom_quadtreeNode();\n root.add = function(d) {\n insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n };\n root.visit = function(f) {\n d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n };\n root.find = function(point) {\n return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n };\n i = -1;\n if (x1 == null) {\n while (++i < n) {\n insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n }\n --i;\n } else data.forEach(root.add);\n xs = ys = data = d = null;\n return root;\n }\n quadtree.x = function(_) {\n return arguments.length ? (x = _, quadtree) : x;\n };\n quadtree.y = function(_) {\n return arguments.length ? (y = _, quadtree) : y;\n };\n quadtree.extent = function(_) {\n if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n y2 = +_[1][1];\n return quadtree;\n };\n quadtree.size = function(_) {\n if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n return quadtree;\n };\n return quadtree;\n };\n function d3_geom_quadtreeCompatX(d) {\n return d.x;\n }\n function d3_geom_quadtreeCompatY(d) {\n return d.y;\n }\n function d3_geom_quadtreeNode() {\n return {\n leaf: true,\n nodes: [],\n point: null,\n x: null,\n y: null\n };\n }\n function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n if (!f(node, x1, y1, x2, y2)) {\n var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n }\n }\n function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n var minDistance2 = Infinity, closestPoint;\n (function find(node, x1, y1, x2, y2) {\n if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n if (point = node.point) {\n var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n if (distance2 < minDistance2) {\n var distance = Math.sqrt(minDistance2 = distance2);\n x0 = x - distance, y0 = y - distance;\n x3 = x + distance, y3 = y + distance;\n closestPoint = point;\n }\n }\n var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n if (node = children[i & 3]) switch (i & 3) {\n case 0:\n find(node, x1, y1, xm, ym);\n break;\n\n case 1:\n find(node, xm, y1, x2, ym);\n break;\n\n case 2:\n find(node, x1, ym, xm, y2);\n break;\n\n case 3:\n find(node, xm, ym, x2, y2);\n break;\n }\n }\n })(root, x0, y0, x3, y3);\n return closestPoint;\n }\n d3.interpolateRgb = d3_interpolateRgb;\n function d3_interpolateRgb(a, b) {\n a = d3.rgb(a);\n b = d3.rgb(b);\n var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n return function(t) {\n return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n };\n }\n d3.interpolateObject = d3_interpolateObject;\n function d3_interpolateObject(a, b) {\n var i = {}, c = {}, k;\n for (k in a) {\n if (k in b) {\n i[k] = d3_interpolate(a[k], b[k]);\n } else {\n c[k] = a[k];\n }\n }\n for (k in b) {\n if (!(k in a)) {\n c[k] = b[k];\n }\n }\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n d3.interpolateNumber = d3_interpolateNumber;\n function d3_interpolateNumber(a, b) {\n a = +a, b = +b;\n return function(t) {\n return a * (1 - t) + b * t;\n };\n }\n d3.interpolateString = d3_interpolateString;\n function d3_interpolateString(a, b) {\n var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n a = a + \"\", b = b + \"\";\n while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n if ((bs = bm.index) > bi) {\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n if (s[i]) s[i] += bm; else s[++i] = bm;\n } else {\n s[++i] = null;\n q.push({\n i: i,\n x: d3_interpolateNumber(am, bm)\n });\n }\n bi = d3_interpolate_numberB.lastIndex;\n }\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n return b(t) + \"\";\n }) : function() {\n return 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 var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n d3.interpolate = d3_interpolate;\n function d3_interpolate(a, b) {\n var i = d3.interpolators.length, f;\n while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n return f;\n }\n d3.interpolators = [ function(a, b) {\n var t = typeof b;\n return (t === \"string\" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n } ];\n d3.interpolateArray = d3_interpolateArray;\n function d3_interpolateArray(a, b) {\n var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n for (;i < na; ++i) c[i] = a[i];\n for (;i < nb; ++i) c[i] = b[i];\n return function(t) {\n for (i = 0; i < n0; ++i) c[i] = x[i](t);\n return c;\n };\n }\n var d3_ease_default = function() {\n return d3_identity;\n };\n var d3_ease = d3.map({\n linear: d3_ease_default,\n poly: d3_ease_poly,\n quad: function() {\n return d3_ease_quad;\n },\n cubic: function() {\n return d3_ease_cubic;\n },\n sin: function() {\n return d3_ease_sin;\n },\n exp: function() {\n return d3_ease_exp;\n },\n circle: function() {\n return d3_ease_circle;\n },\n elastic: d3_ease_elastic,\n back: d3_ease_back,\n bounce: function() {\n return d3_ease_bounce;\n }\n });\n var d3_ease_mode = d3.map({\n \"in\": d3_identity,\n out: d3_ease_reverse,\n \"in-out\": d3_ease_reflect,\n \"out-in\": function(f) {\n return d3_ease_reflect(d3_ease_reverse(f));\n }\n });\n d3.ease = function(name) {\n var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n t = d3_ease.get(t) || d3_ease_default;\n m = d3_ease_mode.get(m) || d3_identity;\n return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n };\n function d3_ease_clamp(f) {\n return function(t) {\n return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n };\n }\n function d3_ease_reverse(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n }\n function d3_ease_reflect(f) {\n return function(t) {\n return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n };\n }\n function d3_ease_quad(t) {\n return t * t;\n }\n function d3_ease_cubic(t) {\n return t * t * t;\n }\n function d3_ease_cubicInOut(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n var t2 = t * t, t3 = t2 * t;\n return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n }\n function d3_ease_poly(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n function d3_ease_sin(t) {\n return 1 - Math.cos(t * halfπ);\n }\n function d3_ease_exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n function d3_ease_circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n function d3_ease_elastic(a, p) {\n var s;\n if (arguments.length < 2) p = .45;\n if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n };\n }\n function d3_ease_back(s) {\n if (!s) s = 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n function d3_ease_bounce(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n }\n d3.interpolateHcl = d3_interpolateHcl;\n function d3_interpolateHcl(a, b) {\n a = d3.hcl(a);\n b = d3.hcl(b);\n var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateHsl = d3_interpolateHsl;\n function d3_interpolateHsl(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateLab = d3_interpolateLab;\n function d3_interpolateLab(a, b) {\n a = d3.lab(a);\n b = d3.lab(b);\n var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n return function(t) {\n return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n };\n }\n d3.interpolateRound = d3_interpolateRound;\n function d3_interpolateRound(a, b) {\n b -= a;\n return function(t) {\n return Math.round(a + b * t);\n };\n }\n d3.transform = function(string) {\n var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n return (d3.transform = function(string) {\n if (string != null) {\n g.setAttribute(\"transform\", string);\n var t = g.transform.baseVal.consolidate();\n }\n return new d3_transform(t ? t.matrix : d3_transformIdentity);\n })(string);\n };\n function d3_transform(m) {\n var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n if (r0[0] * r1[1] < r1[0] * r0[1]) {\n r0[0] *= -1;\n r0[1] *= -1;\n kx *= -1;\n kz *= -1;\n }\n this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n this.translate = [ m.e, m.f ];\n this.scale = [ kx, ky ];\n this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n }\n d3_transform.prototype.toString = function() {\n return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n };\n function d3_transformDot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n function d3_transformNormalize(a) {\n var k = Math.sqrt(d3_transformDot(a, a));\n if (k) {\n a[0] /= k;\n a[1] /= k;\n }\n return k;\n }\n function d3_transformCombine(a, b, k) {\n a[0] += k * b[0];\n a[1] += k * b[1];\n return a;\n }\n var d3_transformIdentity = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0\n };\n d3.interpolateTransform = d3_interpolateTransform;\n function d3_interpolateTransformPop(s) {\n return s.length ? s.pop() + \",\" : \"\";\n }\n function d3_interpolateTranslate(ta, tb, s, q) {\n if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n var i = s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n }\n }\n function d3_interpolateRotate(ra, rb, s, q) {\n if (ra !== rb) {\n if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n }\n }\n function d3_interpolateSkew(wa, wb, s, q) {\n if (wa !== wb) {\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n }\n }\n function d3_interpolateScale(ka, kb, s, q) {\n if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] !== 1 || kb[1] !== 1) {\n s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n }\n }\n function d3_interpolateTransform(a, b) {\n var s = [], q = [];\n a = d3.transform(a), b = d3.transform(b);\n d3_interpolateTranslate(a.translate, b.translate, s, q);\n d3_interpolateRotate(a.rotate, b.rotate, s, q);\n d3_interpolateSkew(a.skew, b.skew, s, q);\n d3_interpolateScale(a.scale, b.scale, s, q);\n a = b = null;\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 function d3_uninterpolateNumber(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return (x - a) / b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return Math.max(0, Math.min(1, (x - a) / b));\n };\n }\n d3.layout = {};\n d3.layout.bundle = function() {\n return function(links) {\n var paths = [], i = -1, n = links.length;\n while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n return paths;\n };\n };\n function d3_layout_bundlePath(link) {\n var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n while (start !== lca) {\n start = start.parent;\n points.push(start);\n }\n var k = points.length;\n while (end !== lca) {\n points.splice(k, 0, end);\n end = end.parent;\n }\n return points;\n }\n function d3_layout_bundleAncestors(node) {\n var ancestors = [], parent = node.parent;\n while (parent != null) {\n ancestors.push(node);\n node = parent;\n parent = parent.parent;\n }\n ancestors.push(node);\n return ancestors;\n }\n function d3_layout_bundleLeastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n while (aNode === bNode) {\n sharedNode = aNode;\n aNode = aNodes.pop();\n bNode = bNodes.pop();\n }\n return sharedNode;\n }\n d3.layout.chord = function() {\n var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n function relayout() {\n var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n chords = [];\n groups = [];\n k = 0, i = -1;\n while (++i < n) {\n x = 0, j = -1;\n while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(d3.range(n));\n k += x;\n }\n if (sortGroups) {\n groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n }\n if (sortSubgroups) {\n subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n }\n k = (τ - padding * n) / k;\n x = 0, i = -1;\n while (++i < n) {\n x0 = x, j = -1;\n while (++j < n) {\n var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n subgroups[di + \"-\" + dj] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += padding;\n }\n i = -1;\n while (++i < n) {\n j = i - 1;\n while (++j < n) {\n var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n if (source.value || target.value) {\n chords.push(source.value < target.value ? {\n source: target,\n target: source\n } : {\n source: source,\n target: target\n });\n }\n }\n }\n if (sortChords) resort();\n }\n function resort() {\n chords.sort(function(a, b) {\n return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n });\n }\n chord.matrix = function(x) {\n if (!arguments.length) return matrix;\n n = (matrix = x) && matrix.length;\n chords = groups = null;\n return chord;\n };\n chord.padding = function(x) {\n if (!arguments.length) return padding;\n padding = x;\n chords = groups = null;\n return chord;\n };\n chord.sortGroups = function(x) {\n if (!arguments.length) return sortGroups;\n sortGroups = x;\n chords = groups = null;\n return chord;\n };\n chord.sortSubgroups = function(x) {\n if (!arguments.length) return sortSubgroups;\n sortSubgroups = x;\n chords = null;\n return chord;\n };\n chord.sortChords = function(x) {\n if (!arguments.length) return sortChords;\n sortChords = x;\n if (chords) resort();\n return chord;\n };\n chord.chords = function() {\n if (!chords) relayout();\n return chords;\n };\n chord.groups = function() {\n if (!groups) relayout();\n return groups;\n };\n return chord;\n };\n d3.layout.force = function() {\n var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n function repulse(node) {\n return function(quad, x1, _, x2) {\n if (quad.point !== node) {\n var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n if (dw * dw / theta2 < dn) {\n if (dn < chargeDistance2) {\n var k = quad.charge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n return true;\n }\n if (quad.point && dn && dn < chargeDistance2) {\n var k = quad.pointCharge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n }\n return !quad.charge;\n };\n }\n force.tick = function() {\n if ((alpha *= .99) < .005) {\n timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n return true;\n }\n var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n for (i = 0; i < m; ++i) {\n o = links[i];\n s = o.source;\n t = o.target;\n x = t.x - s.x;\n y = t.y - s.y;\n if (l = x * x + y * y) {\n l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n x *= l;\n y *= l;\n t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);\n t.y -= y * k;\n s.x += x * (k = 1 - k);\n s.y += y * k;\n }\n }\n if (k = alpha * gravity) {\n x = size[0] / 2;\n y = size[1] / 2;\n i = -1;\n if (k) while (++i < n) {\n o = nodes[i];\n o.x += (x - o.x) * k;\n o.y += (y - o.y) * k;\n }\n }\n if (charge) {\n d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n i = -1;\n while (++i < n) {\n if (!(o = nodes[i]).fixed) {\n q.visit(repulse(o));\n }\n }\n }\n i = -1;\n while (++i < n) {\n o = nodes[i];\n if (o.fixed) {\n o.x = o.px;\n o.y = o.py;\n } else {\n o.x -= (o.px - (o.px = o.x)) * friction;\n o.y -= (o.py - (o.py = o.y)) * friction;\n }\n }\n event.tick({\n type: \"tick\",\n alpha: alpha\n });\n };\n force.nodes = function(x) {\n if (!arguments.length) return nodes;\n nodes = x;\n return force;\n };\n force.links = function(x) {\n if (!arguments.length) return links;\n links = x;\n return force;\n };\n force.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return force;\n };\n force.linkDistance = function(x) {\n if (!arguments.length) return linkDistance;\n linkDistance = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.distance = force.linkDistance;\n force.linkStrength = function(x) {\n if (!arguments.length) return linkStrength;\n linkStrength = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.friction = function(x) {\n if (!arguments.length) return friction;\n friction = +x;\n return force;\n };\n force.charge = function(x) {\n if (!arguments.length) return charge;\n charge = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.chargeDistance = function(x) {\n if (!arguments.length) return Math.sqrt(chargeDistance2);\n chargeDistance2 = x * x;\n return force;\n };\n force.gravity = function(x) {\n if (!arguments.length) return gravity;\n gravity = +x;\n return force;\n };\n force.theta = function(x) {\n if (!arguments.length) return Math.sqrt(theta2);\n theta2 = x * x;\n return force;\n };\n force.alpha = function(x) {\n if (!arguments.length) return alpha;\n x = +x;\n if (alpha) {\n if (x > 0) {\n alpha = x;\n } else {\n timer.c = null, timer.t = NaN, timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n }\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n timer = d3_timer(force.tick);\n }\n return force;\n };\n force.start = function() {\n var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n for (i = 0; i < n; ++i) {\n (o = nodes[i]).index = i;\n o.weight = 0;\n }\n for (i = 0; i < m; ++i) {\n o = links[i];\n if (typeof o.source == \"number\") o.source = nodes[o.source];\n if (typeof o.target == \"number\") o.target = nodes[o.target];\n ++o.source.weight;\n ++o.target.weight;\n }\n for (i = 0; i < n; ++i) {\n o = nodes[i];\n if (isNaN(o.x)) o.x = position(\"x\", w);\n if (isNaN(o.y)) o.y = position(\"y\", h);\n if (isNaN(o.px)) o.px = o.x;\n if (isNaN(o.py)) o.py = o.y;\n }\n distances = [];\n if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n strengths = [];\n if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n charges = [];\n if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n function position(dimension, size) {\n if (!neighbors) {\n neighbors = new Array(n);\n for (j = 0; j < n; ++j) {\n neighbors[j] = [];\n }\n for (j = 0; j < m; ++j) {\n var o = links[j];\n neighbors[o.source.index].push(o.target);\n neighbors[o.target.index].push(o.source);\n }\n }\n var candidates = neighbors[i], j = -1, l = candidates.length, x;\n while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n return Math.random() * size;\n }\n return force.resume();\n };\n force.resume = function() {\n return force.alpha(.1);\n };\n force.stop = function() {\n return force.alpha(0);\n };\n force.drag = function() {\n if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n if (!arguments.length) return drag;\n this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n };\n function dragmove(d) {\n d.px = d3.event.x, d.py = d3.event.y;\n force.resume();\n }\n return d3.rebind(force, event, \"on\");\n };\n function d3_layout_forceDragstart(d) {\n d.fixed |= 2;\n }\n function d3_layout_forceDragend(d) {\n d.fixed &= ~6;\n }\n function d3_layout_forceMouseover(d) {\n d.fixed |= 4;\n d.px = d.x, d.py = d.y;\n }\n function d3_layout_forceMouseout(d) {\n d.fixed &= ~4;\n }\n function d3_layout_forceAccumulate(quad, alpha, charges) {\n var cx = 0, cy = 0;\n quad.charge = 0;\n if (!quad.leaf) {\n var nodes = quad.nodes, n = nodes.length, i = -1, c;\n while (++i < n) {\n c = nodes[i];\n if (c == null) continue;\n d3_layout_forceAccumulate(c, alpha, charges);\n quad.charge += c.charge;\n cx += c.charge * c.cx;\n cy += c.charge * c.cy;\n }\n }\n if (quad.point) {\n if (!quad.leaf) {\n quad.point.x += Math.random() - .5;\n quad.point.y += Math.random() - .5;\n }\n var k = alpha * charges[quad.point.index];\n quad.charge += quad.pointCharge = k;\n cx += k * quad.point.x;\n cy += k * quad.point.y;\n }\n quad.cx = cx / quad.charge;\n quad.cy = cy / quad.charge;\n }\n var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n d3.layout.hierarchy = function() {\n var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n function hierarchy(root) {\n var stack = [ root ], nodes = [], node;\n root.depth = 0;\n while ((node = stack.pop()) != null) {\n nodes.push(node);\n if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n var n, childs, child;\n while (--n >= 0) {\n stack.push(child = childs[n]);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n if (value) node.value = 0;\n node.children = childs;\n } else {\n if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n delete node.children;\n }\n }\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var childs, parent;\n if (sort && (childs = node.children)) childs.sort(sort);\n if (value && (parent = node.parent)) parent.value += node.value;\n });\n return nodes;\n }\n hierarchy.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return hierarchy;\n };\n hierarchy.children = function(x) {\n if (!arguments.length) return children;\n children = x;\n return hierarchy;\n };\n hierarchy.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return hierarchy;\n };\n hierarchy.revalue = function(root) {\n if (value) {\n d3_layout_hierarchyVisitBefore(root, function(node) {\n if (node.children) node.value = 0;\n });\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var parent;\n if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n if (parent = node.parent) parent.value += node.value;\n });\n }\n return root;\n };\n return hierarchy;\n };\n function d3_layout_hierarchyRebind(object, hierarchy) {\n d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n object.nodes = object;\n object.links = d3_layout_hierarchyLinks;\n return object;\n }\n function d3_layout_hierarchyVisitBefore(node, callback) {\n var nodes = [ node ];\n while ((node = nodes.pop()) != null) {\n callback(node);\n if ((children = node.children) && (n = children.length)) {\n var n, children;\n while (--n >= 0) nodes.push(children[n]);\n }\n }\n }\n function d3_layout_hierarchyVisitAfter(node, callback) {\n var nodes = [ node ], nodes2 = [];\n while ((node = nodes.pop()) != null) {\n nodes2.push(node);\n if ((children = node.children) && (n = children.length)) {\n var i = -1, n, children;\n while (++i < n) nodes.push(children[i]);\n }\n }\n while ((node = nodes2.pop()) != null) {\n callback(node);\n }\n }\n function d3_layout_hierarchyChildren(d) {\n return d.children;\n }\n function d3_layout_hierarchyValue(d) {\n return d.value;\n }\n function d3_layout_hierarchySort(a, b) {\n return b.value - a.value;\n }\n function d3_layout_hierarchyLinks(nodes) {\n return d3.merge(nodes.map(function(parent) {\n return (parent.children || []).map(function(child) {\n return {\n source: parent,\n target: child\n };\n });\n }));\n }\n d3.layout.partition = function() {\n var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n function position(node, x, dx, dy) {\n var children = node.children;\n node.x = x;\n node.y = node.depth * dy;\n node.dx = dx;\n node.dy = dy;\n if (children && (n = children.length)) {\n var i = -1, n, c, d;\n dx = node.value ? dx / node.value : 0;\n while (++i < n) {\n position(c = children[i], x, d = c.value * dx, dy);\n x += d;\n }\n }\n }\n function depth(node) {\n var children = node.children, d = 0;\n if (children && (n = children.length)) {\n var i = -1, n;\n while (++i < n) d = Math.max(d, depth(children[i]));\n }\n return 1 + d;\n }\n function partition(d, i) {\n var nodes = hierarchy.call(this, d, i);\n position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n return nodes;\n }\n partition.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return partition;\n };\n return d3_layout_hierarchyRebind(partition, hierarchy);\n };\n d3.layout.pie = function() {\n var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n function pie(data) {\n var n = data.length, values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;\n if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n return values[j] - values[i];\n } : function(i, j) {\n return sort(data[i], data[j]);\n });\n index.forEach(function(i) {\n arcs[i] = {\n data: data[i],\n value: v = values[i],\n startAngle: a,\n endAngle: a += v * k + pa,\n padAngle: p\n };\n });\n return arcs;\n }\n pie.value = function(_) {\n if (!arguments.length) return value;\n value = _;\n return pie;\n };\n pie.sort = function(_) {\n if (!arguments.length) return sort;\n sort = _;\n return pie;\n };\n pie.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return pie;\n };\n pie.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return pie;\n };\n pie.padAngle = function(_) {\n if (!arguments.length) return padAngle;\n padAngle = _;\n return pie;\n };\n return pie;\n };\n var d3_layout_pieSortByValue = {};\n d3.layout.stack = function() {\n var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n function stack(data, index) {\n if (!(n = data.length)) return data;\n var series = data.map(function(d, i) {\n return values.call(stack, d, i);\n });\n var points = series.map(function(d) {\n return d.map(function(v, i) {\n return [ x.call(stack, v, i), y.call(stack, v, i) ];\n });\n });\n var orders = order.call(stack, points, index);\n series = d3.permute(series, orders);\n points = d3.permute(points, orders);\n var offsets = offset.call(stack, points, index);\n var m = series[0].length, n, i, j, o;\n for (j = 0; j < m; ++j) {\n out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n for (i = 1; i < n; ++i) {\n out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n }\n }\n return data;\n }\n stack.values = function(x) {\n if (!arguments.length) return values;\n values = x;\n return stack;\n };\n stack.order = function(x) {\n if (!arguments.length) return order;\n order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n return stack;\n };\n stack.offset = function(x) {\n if (!arguments.length) return offset;\n offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n return stack;\n };\n stack.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n return stack;\n };\n stack.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n return stack;\n };\n stack.out = function(z) {\n if (!arguments.length) return out;\n out = z;\n return stack;\n };\n return stack;\n };\n function d3_layout_stackX(d) {\n return d.x;\n }\n function d3_layout_stackY(d) {\n return d.y;\n }\n function d3_layout_stackOut(d, y0, y) {\n d.y0 = y0;\n d.y = y;\n }\n var d3_layout_stackOrders = d3.map({\n \"inside-out\": function(data) {\n var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n return max[a] - max[b];\n }), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = index[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n },\n reverse: function(data) {\n return d3.range(data.length).reverse();\n },\n \"default\": d3_layout_stackOrderDefault\n });\n var d3_layout_stackOffsets = d3.map({\n silhouette: function(data) {\n var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o > max) max = o;\n sums.push(o);\n }\n for (j = 0; j < m; ++j) {\n y0[j] = (max - sums[j]) / 2;\n }\n return y0;\n },\n wiggle: function(data) {\n var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n y0[0] = o = o0 = 0;\n for (j = 1; j < m; ++j) {\n for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n }\n s2 += s3 * data[i][j][1];\n }\n y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n if (o < o0) o0 = o;\n }\n for (j = 0; j < m; ++j) y0[j] -= o0;\n return y0;\n },\n expand: function(data) {\n var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n }\n for (j = 0; j < m; ++j) y0[j] = 0;\n return y0;\n },\n zero: d3_layout_stackOffsetZero\n });\n function d3_layout_stackOrderDefault(data) {\n return d3.range(data.length);\n }\n function d3_layout_stackOffsetZero(data) {\n var j = -1, m = data[0].length, y0 = [];\n while (++j < m) y0[j] = 0;\n return y0;\n }\n function d3_layout_stackMaxIndex(array) {\n var i = 1, j = 0, v = array[0][1], k, n = array.length;\n for (;i < n; ++i) {\n if ((k = array[i][1]) > v) {\n j = i;\n v = k;\n }\n }\n return j;\n }\n function d3_layout_stackReduceSum(d) {\n return d.reduce(d3_layout_stackSum, 0);\n }\n function d3_layout_stackSum(p, d) {\n return p + d[1];\n }\n d3.layout.histogram = function() {\n var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n function histogram(data, i) {\n var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n while (++i < m) {\n bin = bins[i] = [];\n bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n bin.y = 0;\n }\n if (m > 0) {\n i = -1;\n while (++i < n) {\n x = values[i];\n if (x >= range[0] && x <= range[1]) {\n bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n bin.y += k;\n bin.push(data[i]);\n }\n }\n }\n return bins;\n }\n histogram.value = function(x) {\n if (!arguments.length) return valuer;\n valuer = x;\n return histogram;\n };\n histogram.range = function(x) {\n if (!arguments.length) return ranger;\n ranger = d3_functor(x);\n return histogram;\n };\n histogram.bins = function(x) {\n if (!arguments.length) return binner;\n binner = typeof x === \"number\" ? function(range) {\n return d3_layout_histogramBinFixed(range, x);\n } : d3_functor(x);\n return histogram;\n };\n histogram.frequency = function(x) {\n if (!arguments.length) return frequency;\n frequency = !!x;\n return histogram;\n };\n return histogram;\n };\n function d3_layout_histogramBinSturges(range, values) {\n return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n }\n function d3_layout_histogramBinFixed(range, n) {\n var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n while (++x <= n) f[x] = m * x + b;\n return f;\n }\n function d3_layout_histogramRange(values) {\n return [ d3.min(values), d3.max(values) ];\n }\n d3.layout.pack = function() {\n var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n function pack(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n return radius;\n };\n root.x = root.y = 0;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r = +r(d.value);\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n if (padding) {\n var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r += dr;\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r -= dr;\n });\n }\n d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n return nodes;\n }\n pack.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return pack;\n };\n pack.radius = function(_) {\n if (!arguments.length) return radius;\n radius = _ == null || typeof _ === \"function\" ? _ : +_;\n return pack;\n };\n pack.padding = function(_) {\n if (!arguments.length) return padding;\n padding = +_;\n return pack;\n };\n return d3_layout_hierarchyRebind(pack, hierarchy);\n };\n function d3_layout_packSort(a, b) {\n return a.value - b.value;\n }\n function d3_layout_packInsert(a, b) {\n var c = a._pack_next;\n a._pack_next = b;\n b._pack_prev = a;\n b._pack_next = c;\n c._pack_prev = b;\n }\n function d3_layout_packSplice(a, b) {\n a._pack_next = b;\n b._pack_prev = a;\n }\n function d3_layout_packIntersects(a, b) {\n var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n return .999 * dr * dr > dx * dx + dy * dy;\n }\n function d3_layout_packSiblings(node) {\n if (!(nodes = node.children) || !(n = nodes.length)) return;\n var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n function bound(node) {\n xMin = Math.min(node.x - node.r, xMin);\n xMax = Math.max(node.x + node.r, xMax);\n yMin = Math.min(node.y - node.r, yMin);\n yMax = Math.max(node.y + node.r, yMax);\n }\n nodes.forEach(d3_layout_packLink);\n a = nodes[0];\n a.x = -a.r;\n a.y = 0;\n bound(a);\n if (n > 1) {\n b = nodes[1];\n b.x = b.r;\n b.y = 0;\n bound(b);\n if (n > 2) {\n c = nodes[2];\n d3_layout_packPlace(a, b, c);\n bound(c);\n d3_layout_packInsert(a, c);\n a._pack_prev = c;\n d3_layout_packInsert(c, b);\n b = a._pack_next;\n for (i = 3; i < n; i++) {\n d3_layout_packPlace(a, b, c = nodes[i]);\n var isect = 0, s1 = 1, s2 = 1;\n for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n if (d3_layout_packIntersects(j, c)) {\n isect = 1;\n break;\n }\n }\n if (isect == 1) {\n for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n if (d3_layout_packIntersects(k, c)) {\n break;\n }\n }\n }\n if (isect) {\n if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n i--;\n } else {\n d3_layout_packInsert(a, c);\n b = c;\n bound(c);\n }\n }\n }\n }\n var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n for (i = 0; i < n; i++) {\n c = nodes[i];\n c.x -= cx;\n c.y -= cy;\n cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n }\n node.r = cr;\n nodes.forEach(d3_layout_packUnlink);\n }\n function d3_layout_packLink(node) {\n node._pack_next = node._pack_prev = node;\n }\n function d3_layout_packUnlink(node) {\n delete node._pack_next;\n delete node._pack_prev;\n }\n function d3_layout_packTransform(node, x, y, k) {\n var children = node.children;\n node.x = x += k * node.x;\n node.y = y += k * node.y;\n node.r *= k;\n if (children) {\n var i = -1, n = children.length;\n while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n }\n }\n function d3_layout_packPlace(a, b, c) {\n var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n if (db && (dx || dy)) {\n var da = b.r + c.r, dc = dx * dx + dy * dy;\n da *= da;\n db *= db;\n var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n c.x = a.x + x * dx + y * dy;\n c.y = a.y + x * dy - y * dx;\n } else {\n c.x = a.x + db;\n c.y = a.y;\n }\n }\n d3.layout.tree = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n function tree(d, i) {\n var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n d3_layout_hierarchyVisitBefore(root1, secondWalk);\n if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n var left = root0, right = root0, bottom = root0;\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return nodes;\n }\n function wrapTree(root0) {\n var root1 = {\n A: null,\n children: [ root0 ]\n }, queue = [ root1 ], node1;\n while ((node1 = queue.pop()) != null) {\n for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n queue.push((children[i] = child = {\n _: children[i],\n parent: node1,\n children: (child = children[i].children) && child.slice() || [],\n A: null,\n a: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n i: i\n }).a = child);\n }\n }\n return root1.children[0];\n }\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children.length) {\n d3_layout_treeShift(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n vom = d3_layout_treeLeft(vom);\n vop = d3_layout_treeRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !d3_layout_treeRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !d3_layout_treeLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= size[0];\n node.y = node.depth * size[1];\n }\n tree.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return tree;\n };\n tree.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null ? sizeNode : null;\n return tree;\n };\n tree.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) == null ? null : sizeNode;\n return tree;\n };\n return d3_layout_hierarchyRebind(tree, hierarchy);\n };\n function d3_layout_treeSeparation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n }\n function d3_layout_treeLeft(v) {\n var children = v.children;\n return children.length ? children[0] : v.t;\n }\n function d3_layout_treeRight(v) {\n var children = v.children, n;\n return (n = children.length) ? children[n - 1] : v.t;\n }\n function d3_layout_treeMove(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n function d3_layout_treeShift(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n function d3_layout_treeAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n d3.layout.cluster = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n function cluster(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var children = node.children;\n if (children && children.length) {\n node.x = d3_layout_clusterX(children);\n node.y = d3_layout_clusterY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n node.x = (node.x - root.x) * size[0];\n node.y = (root.y - node.y) * size[1];\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * size[0];\n node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n });\n return nodes;\n }\n cluster.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return cluster;\n };\n cluster.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null;\n return cluster;\n };\n cluster.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) != null;\n return cluster;\n };\n return d3_layout_hierarchyRebind(cluster, hierarchy);\n };\n function d3_layout_clusterY(children) {\n return 1 + d3.max(children, function(child) {\n return child.y;\n });\n }\n function d3_layout_clusterX(children) {\n return children.reduce(function(x, child) {\n return x + child.x;\n }, 0) / children.length;\n }\n function d3_layout_clusterLeft(node) {\n var children = node.children;\n return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n }\n function d3_layout_clusterRight(node) {\n var children = node.children, n;\n return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n }\n d3.layout.treemap = function() {\n var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n function scale(children, k) {\n var i = -1, n = children.length, child, area;\n while (++i < n) {\n area = (child = children[i]).value * (k < 0 ? 0 : k);\n child.area = isNaN(area) || area <= 0 ? 0 : area;\n }\n }\n function squarify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while ((n = remaining.length) > 0) {\n row.push(child = remaining[n - 1]);\n row.area += child.area;\n if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n remaining.pop();\n best = score;\n } else {\n row.area -= row.pop().area;\n position(row, u, rect, false);\n u = Math.min(rect.dx, rect.dy);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n if (row.length) {\n position(row, u, rect, true);\n row.length = row.area = 0;\n }\n children.forEach(squarify);\n }\n }\n function stickify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), remaining = children.slice(), child, row = [];\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while (child = remaining.pop()) {\n row.push(child);\n row.area += child.area;\n if (child.z != null) {\n position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n row.length = row.area = 0;\n }\n }\n children.forEach(stickify);\n }\n }\n function worst(row, u) {\n var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n while (++i < n) {\n if (!(r = row[i].area)) continue;\n if (r < rmin) rmin = r;\n if (r > rmax) rmax = r;\n }\n s *= s;\n u *= u;\n return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n }\n function position(row, u, rect, flush) {\n var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n if (u == rect.dx) {\n if (flush || v > rect.dy) v = rect.dy;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dy = v;\n x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n }\n o.z = true;\n o.dx += rect.x + rect.dx - x;\n rect.y += v;\n rect.dy -= v;\n } else {\n if (flush || v > rect.dx) v = rect.dx;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dx = v;\n y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n }\n o.z = false;\n o.dy += rect.y + rect.dy - y;\n rect.x += v;\n rect.dx -= v;\n }\n }\n function treemap(d) {\n var nodes = stickies || hierarchy(d), root = nodes[0];\n root.x = root.y = 0;\n if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\n if (stickies) hierarchy.revalue(root);\n scale([ root ], root.dx * root.dy / root.value);\n (stickies ? stickify : squarify)(root);\n if (sticky) stickies = nodes;\n return nodes;\n }\n treemap.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return treemap;\n };\n treemap.padding = function(x) {\n if (!arguments.length) return padding;\n function padFunction(node) {\n var p = x.call(treemap, node, node.depth);\n return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n }\n function padConstant(node) {\n return d3_layout_treemapPad(node, x);\n }\n var type;\n pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n padConstant) : padConstant;\n return treemap;\n };\n treemap.round = function(x) {\n if (!arguments.length) return round != Number;\n round = x ? Math.round : Number;\n return treemap;\n };\n treemap.sticky = function(x) {\n if (!arguments.length) return sticky;\n sticky = x;\n stickies = null;\n return treemap;\n };\n treemap.ratio = function(x) {\n if (!arguments.length) return ratio;\n ratio = x;\n return treemap;\n };\n treemap.mode = function(x) {\n if (!arguments.length) return mode;\n mode = x + \"\";\n return treemap;\n };\n return d3_layout_hierarchyRebind(treemap, hierarchy);\n };\n function d3_layout_treemapPadNull(node) {\n return {\n x: node.x,\n y: node.y,\n dx: node.dx,\n dy: node.dy\n };\n }\n function d3_layout_treemapPad(node, padding) {\n var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n if (dx < 0) {\n x += dx / 2;\n dx = 0;\n }\n if (dy < 0) {\n y += dy / 2;\n dy = 0;\n }\n return {\n x: x,\n y: y,\n dx: dx,\n dy: dy\n };\n }\n d3.random = {\n normal: function(µ, σ) {\n var n = arguments.length;\n if (n < 2) σ = 1;\n if (n < 1) µ = 0;\n return function() {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n };\n },\n logNormal: function() {\n var random = d3.random.normal.apply(d3, arguments);\n return function() {\n return Math.exp(random());\n };\n },\n bates: function(m) {\n var random = d3.random.irwinHall(m);\n return function() {\n return random() / m;\n };\n },\n irwinHall: function(m) {\n return function() {\n for (var s = 0, j = 0; j < m; j++) s += Math.random();\n return s;\n };\n }\n };\n d3.scale = {};\n function d3_scaleExtent(domain) {\n var start = domain[0], stop = domain[domain.length - 1];\n return start < stop ? [ start, stop ] : [ stop, start ];\n }\n function d3_scaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n }\n function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n return function(x) {\n return i(u(x));\n };\n }\n function d3_scale_nice(domain, nice) {\n var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n if (x1 < x0) {\n dx = i0, i0 = i1, i1 = dx;\n dx = x0, x0 = x1, x1 = dx;\n }\n domain[i0] = nice.floor(x0);\n domain[i1] = nice.ceil(x1);\n return domain;\n }\n function d3_scale_niceStep(step) {\n return step ? {\n floor: function(x) {\n return Math.floor(x / step) * step;\n },\n ceil: function(x) {\n return Math.ceil(x / step) * step;\n }\n } : d3_scale_niceIdentity;\n }\n var d3_scale_niceIdentity = {\n floor: d3_identity,\n ceil: d3_identity\n };\n function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n if (domain[k] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++j <= k) {\n u.push(uninterpolate(domain[j - 1], domain[j]));\n i.push(interpolate(range[j - 1], range[j]));\n }\n return function(x) {\n var j = d3.bisect(domain, x, 1, k) - 1;\n return i[j](u[j](x));\n };\n }\n d3.scale.linear = function() {\n return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n };\n function d3_scale_linear(domain, range, interpolate, clamp) {\n var output, input;\n function rescale() {\n var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n output = linear(domain, range, uninterpolate, interpolate);\n input = linear(range, domain, uninterpolate, d3_interpolate);\n return scale;\n }\n function scale(x) {\n return output(x);\n }\n scale.invert = function(y) {\n return input(y);\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(Number);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.rangeRound = function(x) {\n return scale.range(x).interpolate(d3_interpolateRound);\n };\n scale.clamp = function(x) {\n if (!arguments.length) return clamp;\n clamp = x;\n return rescale();\n };\n scale.interpolate = function(x) {\n if (!arguments.length) return interpolate;\n interpolate = x;\n return rescale();\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n d3_scale_linearNice(domain, m);\n return rescale();\n };\n scale.copy = function() {\n return d3_scale_linear(domain, range, interpolate, clamp);\n };\n return rescale();\n }\n function d3_scale_linearRebind(scale, linear) {\n return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n }\n function d3_scale_linearNice(domain, m) {\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n return domain;\n }\n function d3_scale_linearTickRange(domain, m) {\n if (m == null) m = 10;\n var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n extent[0] = Math.ceil(extent[0] / step) * step;\n extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n extent[2] = step;\n return extent;\n }\n function d3_scale_linearTicks(domain, m) {\n return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n }\n function d3_scale_linearTickFormat(domain, m, format) {\n var range = d3_scale_linearTickRange(domain, m);\n if (format) {\n var match = d3_format_re.exec(format);\n match.shift();\n if (match[8] === \"s\") {\n var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n match[8] = \"f\";\n format = d3.format(match.join(\"\"));\n return function(d) {\n return format(prefix.scale(d)) + prefix.symbol;\n };\n }\n if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n format = match.join(\"\");\n } else {\n format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n }\n return d3.format(format);\n }\n var d3_scale_linearFormatSignificant = {\n s: 1,\n g: 1,\n p: 1,\n r: 1,\n e: 1\n };\n function d3_scale_linearPrecision(value) {\n return -Math.floor(Math.log(value) / Math.LN10 + .01);\n }\n function d3_scale_linearFormatPrecision(type, range) {\n var p = d3_scale_linearPrecision(range[2]);\n return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n }\n d3.scale.log = function() {\n return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n };\n function d3_scale_log(linear, base, positive, domain) {\n function log(x) {\n return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n }\n function pow(x) {\n return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n }\n function scale(x) {\n return linear(log(x));\n }\n scale.invert = function(x) {\n return pow(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n positive = x[0] >= 0;\n linear.domain((domain = x.map(Number)).map(log));\n return scale;\n };\n scale.base = function(_) {\n if (!arguments.length) return base;\n base = +_;\n linear.domain(domain.map(log));\n return scale;\n };\n scale.nice = function() {\n var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n linear.domain(niced);\n domain = niced.map(pow);\n return scale;\n };\n scale.ticks = function() {\n var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n if (isFinite(j - i)) {\n if (positive) {\n for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n ticks.push(pow(i));\n } else {\n ticks.push(pow(i));\n for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n }\n for (i = 0; ticks[i] < u; i++) {}\n for (j = ticks.length; ticks[j - 1] > v; j--) {}\n ticks = ticks.slice(i, j);\n }\n return ticks;\n };\n scale.tickFormat = function(n, format) {\n if (!arguments.length) return d3_scale_logFormat;\n if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n var k = Math.max(1, base * n / scale.ticks().length);\n return function(d) {\n var i = d / pow(Math.round(log(d)));\n if (i * base < base - .5) i *= base;\n return i <= k ? format(d) : \"\";\n };\n };\n scale.copy = function() {\n return d3_scale_log(linear.copy(), base, positive, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n floor: function(x) {\n return -Math.ceil(-x);\n },\n ceil: function(x) {\n return -Math.floor(-x);\n }\n };\n d3.scale.pow = function() {\n return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n };\n function d3_scale_pow(linear, exponent, domain) {\n var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n function scale(x) {\n return linear(powp(x));\n }\n scale.invert = function(x) {\n return powb(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n linear.domain((domain = x.map(Number)).map(powp));\n return scale;\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n return scale.domain(d3_scale_linearNice(domain, m));\n };\n scale.exponent = function(x) {\n if (!arguments.length) return exponent;\n powp = d3_scale_powPow(exponent = x);\n powb = d3_scale_powPow(1 / exponent);\n linear.domain(domain.map(powp));\n return scale;\n };\n scale.copy = function() {\n return d3_scale_pow(linear.copy(), exponent, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_scale_powPow(e) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n };\n }\n d3.scale.sqrt = function() {\n return d3.scale.pow().exponent(.5);\n };\n d3.scale.ordinal = function() {\n return d3_scale_ordinal([], {\n t: \"range\",\n a: [ [] ]\n });\n };\n function d3_scale_ordinal(domain, ranger) {\n var index, range, rangeBand;\n function scale(x) {\n return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n }\n function steps(start, step) {\n return d3.range(domain.length).map(function(i) {\n return start + step * i;\n });\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = [];\n index = new d3_Map();\n var i = -1, n = x.length, xi;\n while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n return scale[ranger.t].apply(scale, ranger.a);\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n rangeBand = 0;\n ranger = {\n t: \"range\",\n a: arguments\n };\n return scale;\n };\n scale.rangePoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n 0) : (stop - start) / (domain.length - 1 + padding);\n range = steps(start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundPoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n 0) : (stop - start) / (domain.length - 1 + padding) | 0;\n range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n rangeBand = 0;\n ranger = {\n t: \"rangeRoundPoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n range = steps(start + step * outerPadding, step);\n if (reverse) range.reverse();\n rangeBand = step * (1 - padding);\n ranger = {\n t: \"rangeBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n if (reverse) range.reverse();\n rangeBand = Math.round(step * (1 - padding));\n ranger = {\n t: \"rangeRoundBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBand = function() {\n return rangeBand;\n };\n scale.rangeExtent = function() {\n return d3_scaleExtent(ranger.a[0]);\n };\n scale.copy = function() {\n return d3_scale_ordinal(domain, ranger);\n };\n return scale.domain(domain);\n }\n d3.scale.category10 = function() {\n return d3.scale.ordinal().range(d3_category10);\n };\n d3.scale.category20 = function() {\n return d3.scale.ordinal().range(d3_category20);\n };\n d3.scale.category20b = function() {\n return d3.scale.ordinal().range(d3_category20b);\n };\n d3.scale.category20c = function() {\n return d3.scale.ordinal().range(d3_category20c);\n };\n var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n d3.scale.quantile = function() {\n return d3_scale_quantile([], []);\n };\n function d3_scale_quantile(domain, range) {\n var thresholds;\n function rescale() {\n var k = 0, q = range.length;\n thresholds = [];\n while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n return scale;\n }\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.quantiles = function() {\n return thresholds;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n };\n scale.copy = function() {\n return d3_scale_quantile(domain, range);\n };\n return rescale();\n }\n d3.scale.quantize = function() {\n return d3_scale_quantize(0, 1, [ 0, 1 ]);\n };\n function d3_scale_quantize(x0, x1, range) {\n var kx, i;\n function scale(x) {\n return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n }\n function rescale() {\n kx = range.length / (x1 - x0);\n i = range.length - 1;\n return scale;\n }\n scale.domain = function(x) {\n if (!arguments.length) return [ x0, x1 ];\n x0 = +x[0];\n x1 = +x[x.length - 1];\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n y = y < 0 ? NaN : y / kx + x0;\n return [ y, y + 1 / kx ];\n };\n scale.copy = function() {\n return d3_scale_quantize(x0, x1, range);\n };\n return rescale();\n }\n d3.scale.threshold = function() {\n return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n };\n function d3_scale_threshold(domain, range) {\n function scale(x) {\n if (x <= x) return range[d3.bisect(domain, x)];\n }\n scale.domain = function(_) {\n if (!arguments.length) return domain;\n domain = _;\n return scale;\n };\n scale.range = function(_) {\n if (!arguments.length) return range;\n range = _;\n return scale;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return [ domain[y - 1], domain[y] ];\n };\n scale.copy = function() {\n return d3_scale_threshold(domain, range);\n };\n return scale;\n }\n d3.scale.identity = function() {\n return d3_scale_identity([ 0, 1 ]);\n };\n function d3_scale_identity(domain) {\n function identity(x) {\n return +x;\n }\n identity.invert = identity;\n identity.domain = identity.range = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(identity);\n return identity;\n };\n identity.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n identity.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n identity.copy = function() {\n return d3_scale_identity(domain);\n };\n return identity;\n }\n d3.svg = {};\n function d3_zero() {\n return 0;\n }\n d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n function arc() {\n var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n if (!cw) p1 *= -1;\n if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n }\n if (r1) {\n x0 = r1 * Math.cos(a0 + p1);\n y0 = r1 * Math.sin(a0 + p1);\n x1 = r1 * Math.cos(a1 - p1);\n y1 = r1 * Math.sin(a1 - p1);\n var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n var h1 = (a0 + a1) / 2;\n x0 = r1 * Math.cos(h1);\n y0 = r1 * Math.sin(h1);\n x1 = y1 = null;\n }\n } else {\n x0 = y0 = 0;\n }\n if (r0) {\n x2 = r0 * Math.cos(a1 - p0);\n y2 = r0 * Math.sin(a1 - p0);\n x3 = r0 * Math.cos(a0 + p0);\n y3 = r0 * Math.sin(a0 + p0);\n var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n var h0 = (a0 + a1) / 2;\n x2 = r0 * Math.cos(h0);\n y2 = r0 * Math.sin(h0);\n x3 = y3 = null;\n }\n } else {\n x2 = y2 = 0;\n }\n if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n cr = r0 < r1 ^ cw ? 0 : 1;\n var rc1 = rc, rc0 = rc;\n if (da < π) {\n var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n if (x1 != null) {\n var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n if (rc === rc1) {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n } else {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n }\n if (x3 != null) {\n var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n if (rc === rc0) {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n } else {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n }\n } else {\n path.push(\"L\", x2, \",\", y2);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n path.push(\"L\", x2, \",\", y2);\n if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n }\n path.push(\"Z\");\n return path.join(\"\");\n }\n function circleSegment(r1, cw) {\n return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n }\n arc.innerRadius = function(v) {\n if (!arguments.length) return innerRadius;\n innerRadius = d3_functor(v);\n return arc;\n };\n arc.outerRadius = function(v) {\n if (!arguments.length) return outerRadius;\n outerRadius = d3_functor(v);\n return arc;\n };\n arc.cornerRadius = function(v) {\n if (!arguments.length) return cornerRadius;\n cornerRadius = d3_functor(v);\n return arc;\n };\n arc.padRadius = function(v) {\n if (!arguments.length) return padRadius;\n padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n return arc;\n };\n arc.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return arc;\n };\n arc.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return arc;\n };\n arc.padAngle = function(v) {\n if (!arguments.length) return padAngle;\n padAngle = d3_functor(v);\n return arc;\n };\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcAuto = \"auto\";\n function d3_svg_arcInnerRadius(d) {\n return d.innerRadius;\n }\n function d3_svg_arcOuterRadius(d) {\n return d.outerRadius;\n }\n function d3_svg_arcStartAngle(d) {\n return d.startAngle;\n }\n function d3_svg_arcEndAngle(d) {\n return d.endAngle;\n }\n function d3_svg_arcPadAngle(d) {\n return d && d.padAngle;\n }\n function d3_svg_arcSweep(x0, y0, x1, y1) {\n return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n }\n function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n }\n function d3_svg_line(projection) {\n var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n function line(data) {\n var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n function segment() {\n segments.push(\"M\", interpolate(projection(points), tension));\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n } else if (points.length) {\n segment();\n points = [];\n }\n }\n if (points.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n line.x = function(_) {\n if (!arguments.length) return x;\n x = _;\n return line;\n };\n line.y = function(_) {\n if (!arguments.length) return y;\n y = _;\n return line;\n };\n line.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return line;\n };\n line.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n return line;\n };\n line.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return line;\n };\n return line;\n }\n d3.svg.line = function() {\n return d3_svg_line(d3_identity);\n };\n var d3_svg_lineInterpolators = d3.map({\n linear: d3_svg_lineLinear,\n \"linear-closed\": d3_svg_lineLinearClosed,\n step: d3_svg_lineStep,\n \"step-before\": d3_svg_lineStepBefore,\n \"step-after\": d3_svg_lineStepAfter,\n basis: d3_svg_lineBasis,\n \"basis-open\": d3_svg_lineBasisOpen,\n \"basis-closed\": d3_svg_lineBasisClosed,\n bundle: d3_svg_lineBundle,\n cardinal: d3_svg_lineCardinal,\n \"cardinal-open\": d3_svg_lineCardinalOpen,\n \"cardinal-closed\": d3_svg_lineCardinalClosed,\n monotone: d3_svg_lineMonotone\n });\n d3_svg_lineInterpolators.forEach(function(key, value) {\n value.key = key;\n value.closed = /-closed$/.test(key);\n });\n function d3_svg_lineLinear(points) {\n return points.length > 1 ? points.join(\"L\") : points + \"Z\";\n }\n function d3_svg_lineLinearClosed(points) {\n return points.join(\"L\") + \"Z\";\n }\n function d3_svg_lineStep(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n if (n > 1) path.push(\"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepBefore(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepAfter(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n return path.join(\"\");\n }\n function d3_svg_lineCardinalOpen(points, tension) {\n return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n }\n function d3_svg_lineCardinal(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineHermite(points, tangents) {\n if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n return d3_svg_lineLinear(points);\n }\n var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n if (quad) {\n path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n p0 = points[1];\n pi = 2;\n }\n if (tangents.length > 1) {\n t = tangents[1];\n p = points[pi];\n pi++;\n path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n for (var i = 2; i < tangents.length; i++, pi++) {\n p = points[pi];\n t = tangents[i];\n path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n }\n }\n if (quad) {\n var lp = points[pi];\n path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n }\n return path;\n }\n function d3_svg_lineCardinalTangents(points, tension) {\n var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n while (++i < n) {\n p0 = p1;\n p1 = p2;\n p2 = points[i];\n tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n }\n return tangents;\n }\n function d3_svg_lineBasis(points) {\n if (points.length < 3) return d3_svg_lineLinear(points);\n var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n points.push(points[n - 1]);\n while (++i <= n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n points.pop();\n path.push(\"L\", pi);\n return path.join(\"\");\n }\n function d3_svg_lineBasisOpen(points) {\n if (points.length < 4) return d3_svg_lineLinear(points);\n var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n while (++i < 3) {\n pi = points[i];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n --i;\n while (++i < n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBasisClosed(points) {\n var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n while (++i < 4) {\n pi = points[i % n];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n --i;\n while (++i < m) {\n pi = points[i % n];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBundle(points, tension) {\n var n = points.length - 1;\n if (n) {\n var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n while (++i <= n) {\n p = points[i];\n t = i / n;\n p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n }\n }\n return d3_svg_lineBasis(points);\n }\n function d3_svg_lineDot4(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n function d3_svg_lineBasisBezier(path, x, y) {\n path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n }\n function d3_svg_lineSlope(p0, p1) {\n return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n }\n function d3_svg_lineFiniteDifferences(points) {\n var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n while (++i < j) {\n m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n }\n m[i] = d;\n return m;\n }\n function d3_svg_lineMonotoneTangents(points) {\n var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n while (++i < j) {\n d = d3_svg_lineSlope(points[i], points[i + 1]);\n if (abs(d) < ε) {\n m[i] = m[i + 1] = 0;\n } else {\n a = m[i] / d;\n b = m[i + 1] / d;\n s = a * a + b * b;\n if (s > 9) {\n s = d * 3 / Math.sqrt(s);\n m[i] = s * a;\n m[i + 1] = s * b;\n }\n }\n }\n i = -1;\n while (++i <= j) {\n s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n tangents.push([ s || 0, m[i] * s || 0 ]);\n }\n return tangents;\n }\n function d3_svg_lineMonotone(points) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n }\n d3.svg.line.radial = function() {\n var line = d3_svg_line(d3_svg_lineRadial);\n line.radius = line.x, delete line.x;\n line.angle = line.y, delete line.y;\n return line;\n };\n function d3_svg_lineRadial(points) {\n var point, i = -1, n = points.length, r, a;\n while (++i < n) {\n point = points[i];\n r = point[0];\n a = point[1] - halfπ;\n point[0] = r * Math.cos(a);\n point[1] = r * Math.sin(a);\n }\n return points;\n }\n function d3_svg_area(projection) {\n var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n function area(data) {\n var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n return x;\n } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n return y;\n } : d3_functor(y1), x, y;\n function segment() {\n segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n } else if (points0.length) {\n segment();\n points0 = [];\n points1 = [];\n }\n }\n if (points0.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n area.x = function(_) {\n if (!arguments.length) return x1;\n x0 = x1 = _;\n return area;\n };\n area.x0 = function(_) {\n if (!arguments.length) return x0;\n x0 = _;\n return area;\n };\n area.x1 = function(_) {\n if (!arguments.length) return x1;\n x1 = _;\n return area;\n };\n area.y = function(_) {\n if (!arguments.length) return y1;\n y0 = y1 = _;\n return area;\n };\n area.y0 = function(_) {\n if (!arguments.length) return y0;\n y0 = _;\n return area;\n };\n area.y1 = function(_) {\n if (!arguments.length) return y1;\n y1 = _;\n return area;\n };\n area.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return area;\n };\n area.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n interpolateReverse = interpolate.reverse || interpolate;\n L = interpolate.closed ? \"M\" : \"L\";\n return area;\n };\n area.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return area;\n };\n return area;\n }\n d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n d3.svg.area = function() {\n return d3_svg_area(d3_identity);\n };\n d3.svg.area.radial = function() {\n var area = d3_svg_area(d3_svg_lineRadial);\n area.radius = area.x, delete area.x;\n area.innerRadius = area.x0, delete area.x0;\n area.outerRadius = area.x1, delete area.x1;\n area.angle = area.y, delete area.y;\n area.startAngle = area.y0, delete area.y0;\n area.endAngle = area.y1, delete area.y1;\n return area;\n };\n d3.svg.chord = function() {\n var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function chord(d, i) {\n var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n }\n function subgroup(self, f, d, i) {\n var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n return {\n r: r,\n a0: a0,\n a1: a1,\n p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n };\n }\n function equals(a, b) {\n return a.a0 == b.a0 && a.a1 == b.a1;\n }\n function arc(r, p, a) {\n return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n }\n function curve(r0, p0, r1, p1) {\n return \"Q 0,0 \" + p1;\n }\n chord.radius = function(v) {\n if (!arguments.length) return radius;\n radius = d3_functor(v);\n return chord;\n };\n chord.source = function(v) {\n if (!arguments.length) return source;\n source = d3_functor(v);\n return chord;\n };\n chord.target = function(v) {\n if (!arguments.length) return target;\n target = d3_functor(v);\n return chord;\n };\n chord.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return chord;\n };\n chord.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return chord;\n };\n return chord;\n };\n function d3_svg_chordRadius(d) {\n return d.radius;\n }\n d3.svg.diagonal = function() {\n var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n function diagonal(d, i) {\n var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n x: p0.x,\n y: m\n }, {\n x: p3.x,\n y: m\n }, p3 ];\n p = p.map(projection);\n return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n }\n diagonal.source = function(x) {\n if (!arguments.length) return source;\n source = d3_functor(x);\n return diagonal;\n };\n diagonal.target = function(x) {\n if (!arguments.length) return target;\n target = d3_functor(x);\n return diagonal;\n };\n diagonal.projection = function(x) {\n if (!arguments.length) return projection;\n projection = x;\n return diagonal;\n };\n return diagonal;\n };\n function d3_svg_diagonalProjection(d) {\n return [ d.x, d.y ];\n }\n d3.svg.diagonal.radial = function() {\n var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n diagonal.projection = function(x) {\n return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n };\n return diagonal;\n };\n function d3_svg_diagonalRadialProjection(projection) {\n return function() {\n var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n return [ r * Math.cos(a), r * Math.sin(a) ];\n };\n }\n d3.svg.symbol = function() {\n var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n function symbol(d, i) {\n return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n }\n symbol.type = function(x) {\n if (!arguments.length) return type;\n type = d3_functor(x);\n return symbol;\n };\n symbol.size = function(x) {\n if (!arguments.length) return size;\n size = d3_functor(x);\n return symbol;\n };\n return symbol;\n };\n function d3_svg_symbolSize() {\n return 64;\n }\n function d3_svg_symbolType() {\n return \"circle\";\n }\n function d3_svg_symbolCircle(size) {\n var r = Math.sqrt(size / π);\n return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n }\n var d3_svg_symbols = d3.map({\n circle: d3_svg_symbolCircle,\n cross: function(size) {\n var r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n },\n diamond: function(size) {\n var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n },\n square: function(size) {\n var r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n },\n \"triangle-down\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n },\n \"triangle-up\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n }\n });\n d3.svg.symbolTypes = d3_svg_symbols.keys();\n var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n d3_selectionPrototype.transition = function(name) {\n var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n time: Date.now(),\n ease: d3_ease_cubicInOut,\n delay: 0,\n duration: 250\n };\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_selectionPrototype.interrupt = function(name) {\n return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n };\n var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n function d3_selection_interruptNS(ns) {\n return function() {\n var lock, activeId, active;\n if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n active.timer.c = null;\n active.timer.t = NaN;\n if (--lock.count) delete lock[activeId]; else delete this[ns];\n lock.active += .5;\n active.event && active.event.interrupt.call(this, this.__data__, active.index);\n }\n };\n }\n function d3_transition(groups, ns, id) {\n d3_subclass(groups, d3_transitionPrototype);\n groups.namespace = ns;\n groups.id = id;\n return groups;\n }\n var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n d3_transitionPrototype.call = d3_selectionPrototype.call;\n d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n d3_transitionPrototype.node = d3_selectionPrototype.node;\n d3_transitionPrototype.size = d3_selectionPrototype.size;\n d3.transition = function(selection, name) {\n return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n transition = node[ns][id];\n subnodes = selector.call(node, node.__data__, i, j);\n subgroups.push(subgroup = []);\n for (var k = -1, o = subnodes.length; ++k < o; ) {\n if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_transition(subgroups, this.namespace, this.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node[ns][id].tween.remove(name);\n } : function(node) {\n node[ns][id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id, ns = groups.namespace;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node[ns][id].tween.set(name, value);\n }));\n }\n d3_transitionPrototype.attr = function(nameNS, value) {\n if (arguments.length < 2) {\n for (value in nameNS) this.attr(value, nameNS[value]);\n return this;\n }\n var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrTween(b) {\n return b == null ? attrNull : (b += \"\", function() {\n var a = this.getAttribute(name), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttribute(name, i(t));\n });\n });\n }\n function attrTweenNS(b) {\n return b == null ? attrNullNS : (b += \"\", function() {\n var a = this.getAttributeNS(name.space, name.local), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttributeNS(name.space, name.local, i(t));\n });\n });\n }\n return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.attrTween = function(nameNS, tween) {\n var name = d3.ns.qualify(nameNS);\n function attrTween(d, i) {\n var f = tween.call(this, d, i, this.getAttribute(name));\n return f && function(t) {\n this.setAttribute(name, f(t));\n };\n }\n function attrTweenNS(d, i) {\n var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n return f && function(t) {\n this.setAttributeNS(name.space, name.local, f(t));\n };\n }\n return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.style(priority, name[priority], value);\n return this;\n }\n priority = \"\";\n }\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleString(b) {\n return b == null ? styleNull : (b += \"\", function() {\n var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n return a !== b && (i = d3_interpolate(a, b), function(t) {\n this.style.setProperty(name, i(t), priority);\n });\n });\n }\n return d3_transition_tween(this, \"style.\" + name, value, styleString);\n };\n d3_transitionPrototype.styleTween = function(name, tween, priority) {\n if (arguments.length < 3) priority = \"\";\n function styleTween(d, i) {\n var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n return f && function(t) {\n this.style.setProperty(name, f(t), priority);\n };\n }\n return this.tween(\"style.\" + name, styleTween);\n };\n d3_transitionPrototype.text = function(value) {\n return d3_transition_tween(this, \"text\", value, d3_transition_text);\n };\n function d3_transition_text(b) {\n if (b == null) b = \"\";\n return function() {\n this.textContent = b;\n };\n }\n d3_transitionPrototype.remove = function() {\n var ns = this.namespace;\n return this.each(\"end.transition\", function() {\n var p;\n if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node[ns][id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node[ns][id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node[ns][id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n try {\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node[ns][id];\n type.call(node, node.__data__, i, j);\n });\n } finally {\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n }\n } else {\n d3_selection_each(this, function(node) {\n var transition = node[ns][id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if (node = group[i]) {\n transition = node[ns][id0];\n d3_transitionNode(node, i, ns, id1, {\n time: transition.time,\n ease: transition.ease,\n delay: transition.delay + transition.duration,\n duration: transition.duration\n });\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id1);\n };\n function d3_transitionNamespace(name) {\n return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n }\n function d3_transitionNode(node, i, ns, id, inherit) {\n var lock = node[ns] || (node[ns] = {\n active: 0,\n count: 0\n }), transition = lock[id], time, timer, duration, ease, tweens;\n function schedule(elapsed) {\n var delay = transition.delay;\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n }\n function start(elapsed) {\n var activeId = lock.active, active = lock[activeId];\n if (active) {\n active.timer.c = null;\n active.timer.t = NaN;\n --lock.count;\n delete lock[activeId];\n active.event && active.event.interrupt.call(node, node.__data__, active.index);\n }\n for (var cancelId in lock) {\n if (+cancelId < id) {\n var cancel = lock[cancelId];\n cancel.timer.c = null;\n cancel.timer.t = NaN;\n --lock.count;\n delete lock[cancelId];\n }\n }\n timer.c = tick;\n d3_timer(function() {\n if (timer.c && tick(elapsed || 1)) {\n timer.c = null;\n timer.t = NaN;\n }\n return 1;\n }, 0, time);\n lock.active = id;\n transition.event && transition.event.start.call(node, node.__data__, i);\n tweens = [];\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, node.__data__, i)) {\n tweens.push(value);\n }\n });\n ease = transition.ease;\n duration = transition.duration;\n }\n function tick(elapsed) {\n var t = elapsed / duration, e = ease(t), n = tweens.length;\n while (n > 0) {\n tweens[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, node.__data__, i);\n if (--lock.count) delete lock[id]; else delete node[ns];\n return 1;\n }\n }\n if (!transition) {\n time = inherit.time;\n timer = d3_timer(schedule, 0, time);\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n timer: timer,\n delay: inherit.delay,\n duration: inherit.duration,\n ease: inherit.ease,\n index: i\n };\n inherit = null;\n ++lock.count;\n }\n }\n d3.svg.axis = function() {\n var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n function axis(g) {\n g.each(function() {\n var g = d3.select(this);\n var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n d3.transition(path));\n tickEnter.append(\"line\");\n tickEnter.append(\"text\");\n var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n if (orient === \"bottom\" || orient === \"top\") {\n tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n } else {\n tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n }\n lineEnter.attr(y2, sign * innerTickSize);\n textEnter.attr(y1, sign * tickSpacing);\n lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n if (scale1.rangeBand) {\n var x = scale1, dx = x.rangeBand() / 2;\n scale0 = scale1 = function(d) {\n return x(d) + dx;\n };\n } else if (scale0.rangeBand) {\n scale0 = scale1;\n } else {\n tickExit.call(tickTransform, scale1, scale0);\n }\n tickEnter.call(tickTransform, scale0, scale1);\n tickUpdate.call(tickTransform, scale1, scale1);\n });\n }\n axis.scale = function(x) {\n if (!arguments.length) return scale;\n scale = x;\n return axis;\n };\n axis.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n return axis;\n };\n axis.ticks = function() {\n if (!arguments.length) return tickArguments_;\n tickArguments_ = d3_array(arguments);\n return axis;\n };\n axis.tickValues = function(x) {\n if (!arguments.length) return tickValues;\n tickValues = x;\n return axis;\n };\n axis.tickFormat = function(x) {\n if (!arguments.length) return tickFormat_;\n tickFormat_ = x;\n return axis;\n };\n axis.tickSize = function(x) {\n var n = arguments.length;\n if (!n) return innerTickSize;\n innerTickSize = +x;\n outerTickSize = +arguments[n - 1];\n return axis;\n };\n axis.innerTickSize = function(x) {\n if (!arguments.length) return innerTickSize;\n innerTickSize = +x;\n return axis;\n };\n axis.outerTickSize = function(x) {\n if (!arguments.length) return outerTickSize;\n outerTickSize = +x;\n return axis;\n };\n axis.tickPadding = function(x) {\n if (!arguments.length) return tickPadding;\n tickPadding = +x;\n return axis;\n };\n axis.tickSubdivide = function() {\n return arguments.length && axis;\n };\n return axis;\n };\n var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n };\n function d3_svg_axisX(selection, x0, x1) {\n selection.attr(\"transform\", function(d) {\n var v0 = x0(d);\n return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y0, y1) {\n selection.attr(\"transform\", function(d) {\n var v0 = y0(d);\n return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n });\n }\n d3.svg.brush = function() {\n var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n function brush(g) {\n g.each(function() {\n var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n var background = g.selectAll(\".background\").data([ 0 ]);\n background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n resize.exit().remove();\n resize.enter().append(\"g\").attr(\"class\", function(d) {\n return \"resize \" + d;\n }).style(\"cursor\", function(d) {\n return d3_svg_brushCursor[d];\n }).append(\"rect\").attr(\"x\", function(d) {\n return /[ew]$/.test(d) ? -3 : null;\n }).attr(\"y\", function(d) {\n return /^[ns]/.test(d) ? -3 : null;\n }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n resize.style(\"display\", brush.empty() ? \"none\" : null);\n var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n if (x) {\n range = d3_scaleRange(x);\n backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n redrawX(gUpdate);\n }\n if (y) {\n range = d3_scaleRange(y);\n backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n redrawY(gUpdate);\n }\n redraw(gUpdate);\n });\n }\n brush.event = function(g) {\n g.each(function() {\n var event_ = event.of(this, arguments), extent1 = {\n x: xExtent,\n y: yExtent,\n i: xExtentDomain,\n j: yExtentDomain\n }, extent0 = this.__chart__ || extent1;\n this.__chart__ = extent1;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.brush\", function() {\n xExtentDomain = extent0.i;\n yExtentDomain = extent0.j;\n xExtent = extent0.x;\n yExtent = extent0.y;\n event_({\n type: \"brushstart\"\n });\n }).tween(\"brush:brush\", function() {\n var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n xExtentDomain = yExtentDomain = null;\n return function(t) {\n xExtent = extent1.x = xi(t);\n yExtent = extent1.y = yi(t);\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n };\n }).each(\"end.brush\", function() {\n xExtentDomain = extent1.i;\n yExtentDomain = extent1.j;\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n });\n } else {\n event_({\n type: \"brushstart\"\n });\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n }\n });\n };\n function redraw(g) {\n g.selectAll(\".resize\").attr(\"transform\", function(d) {\n return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n });\n }\n function redrawX(g) {\n g.select(\".extent\").attr(\"x\", xExtent[0]);\n g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n }\n function redrawY(g) {\n g.select(\".extent\").attr(\"y\", yExtent[0]);\n g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n }\n function brushstart() {\n var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n if (d3.event.changedTouches) {\n w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n } else {\n w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n }\n g.interrupt().selectAll(\"*\").interrupt();\n if (dragging) {\n origin[0] = xExtent[0] - origin[0];\n origin[1] = yExtent[0] - origin[1];\n } else if (resizing) {\n var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n origin[0] = xExtent[ex];\n origin[1] = yExtent[ey];\n } else if (d3.event.altKey) center = origin.slice();\n g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n event_({\n type: \"brushstart\"\n });\n brushmove();\n function keydown() {\n if (d3.event.keyCode == 32) {\n if (!dragging) {\n center = null;\n origin[0] -= xExtent[1];\n origin[1] -= yExtent[1];\n dragging = 2;\n }\n d3_eventPreventDefault();\n }\n }\n function keyup() {\n if (d3.event.keyCode == 32 && dragging == 2) {\n origin[0] += xExtent[1];\n origin[1] += yExtent[1];\n dragging = 0;\n d3_eventPreventDefault();\n }\n }\n function brushmove() {\n var point = d3.mouse(target), moved = false;\n if (offset) {\n point[0] += offset[0];\n point[1] += offset[1];\n }\n if (!dragging) {\n if (d3.event.altKey) {\n if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n origin[0] = xExtent[+(point[0] < center[0])];\n origin[1] = yExtent[+(point[1] < center[1])];\n } else center = null;\n }\n if (resizingX && move1(point, x, 0)) {\n redrawX(g);\n moved = true;\n }\n if (resizingY && move1(point, y, 1)) {\n redrawY(g);\n moved = true;\n }\n if (moved) {\n redraw(g);\n event_({\n type: \"brush\",\n mode: dragging ? \"move\" : \"resize\"\n });\n }\n }\n function move1(point, scale, i) {\n var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n if (dragging) {\n r0 -= position;\n r1 -= size + position;\n }\n min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n if (dragging) {\n max = (min += position) + size;\n } else {\n if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n if (position < min) {\n max = min;\n min = position;\n } else {\n max = position;\n }\n }\n if (extent[0] != min || extent[1] != max) {\n if (i) yExtentDomain = null; else xExtentDomain = null;\n extent[0] = min;\n extent[1] = max;\n return true;\n }\n }\n function brushend() {\n brushmove();\n g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n d3.select(\"body\").style(\"cursor\", null);\n w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n dragRestore();\n event_({\n type: \"brushend\"\n });\n }\n }\n brush.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.clamp = function(z) {\n if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n return brush;\n };\n brush.extent = function(z) {\n var x0, x1, y0, y1, t;\n if (!arguments.length) {\n if (x) {\n if (xExtentDomain) {\n x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n } else {\n x0 = xExtent[0], x1 = xExtent[1];\n if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n }\n }\n if (y) {\n if (yExtentDomain) {\n y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n } else {\n y0 = yExtent[0], y1 = yExtent[1];\n if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n }\n }\n return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n }\n if (x) {\n x0 = z[0], x1 = z[1];\n if (y) x0 = x0[0], x1 = x1[0];\n xExtentDomain = [ x0, x1 ];\n if (x.invert) x0 = x(x0), x1 = x(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n }\n if (y) {\n y0 = z[0], y1 = z[1];\n if (x) y0 = y0[1], y1 = y1[1];\n yExtentDomain = [ y0, y1 ];\n if (y.invert) y0 = y(y0), y1 = y(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n }\n return brush;\n };\n brush.clear = function() {\n if (!brush.empty()) {\n xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n xExtentDomain = yExtentDomain = null;\n }\n return brush;\n };\n brush.empty = function() {\n return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n };\n return d3.rebind(brush, event, \"on\");\n };\n var d3_svg_brushCursor = {\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 var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n var d3_time_formatUtc = d3_time_format.utc;\n var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n function d3_time_formatIsoNative(date) {\n return date.toISOString();\n }\n d3_time_formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n d3_time.second = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 1e3) * 1e3);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n }, function(date) {\n return date.getSeconds();\n });\n d3_time.seconds = d3_time.second.range;\n d3_time.seconds.utc = d3_time.second.utc.range;\n d3_time.minute = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 6e4) * 6e4);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n }, function(date) {\n return date.getMinutes();\n });\n d3_time.minutes = d3_time.minute.range;\n d3_time.minutes.utc = d3_time.minute.utc.range;\n d3_time.hour = d3_time_interval(function(date) {\n var timezone = date.getTimezoneOffset() / 60;\n return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n }, function(date) {\n return date.getHours();\n });\n d3_time.hours = d3_time.hour.range;\n d3_time.hours.utc = d3_time.hour.utc.range;\n d3_time.month = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setDate(1);\n return date;\n }, function(date, offset) {\n date.setMonth(date.getMonth() + offset);\n }, function(date) {\n return date.getMonth();\n });\n d3_time.months = d3_time.month.range;\n d3_time.months.utc = d3_time.month.utc.range;\n function d3_time_scale(linear, methods, format) {\n function scale(x) {\n return linear(x);\n }\n scale.invert = function(x) {\n return d3_time_scaleDate(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n linear.domain(x);\n return scale;\n };\n function tickMethod(extent, count) {\n var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n return d / 31536e6;\n }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n }\n scale.nice = function(interval, skip) {\n var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n if (method) interval = method[0], skip = method[1];\n function skipped(date) {\n return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n }\n return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n floor: function(date) {\n while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n return date;\n },\n ceil: function(date) {\n while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n return date;\n }\n } : interval));\n };\n scale.ticks = function(interval, skip) {\n var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n range: interval\n }, skip ];\n if (method) interval = method[0], skip = method[1];\n return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n };\n scale.tickFormat = function() {\n return format;\n };\n scale.copy = function() {\n return d3_time_scale(linear.copy(), methods, format);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_time_scaleDate(t) {\n return new Date(t);\n }\n var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n return d.getMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getHours();\n } ], [ \"%a %d\", function(d) {\n return d.getDay() && d.getDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getMonth();\n } ], [ \"%Y\", d3_true ] ]);\n var d3_time_scaleMilliseconds = {\n range: function(start, stop, step) {\n return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n },\n floor: d3_identity,\n ceil: d3_identity\n };\n d3_time_scaleLocalMethods.year = d3_time.year;\n d3_time.scale = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n };\n var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n return [ m[0].utc, m[1] ];\n });\n var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n return d.getUTCMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getUTCSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getUTCMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getUTCHours();\n } ], [ \"%a %d\", function(d) {\n return d.getUTCDay() && d.getUTCDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getUTCDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getUTCMonth();\n } ], [ \"%Y\", d3_true ] ]);\n d3_time_scaleUtcMethods.year = d3_time.year.utc;\n d3_time.scale.utc = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n };\n d3.text = d3_xhrType(function(request) {\n return request.responseText;\n });\n d3.json = function(url, callback) {\n return d3_xhr(url, \"application/json\", d3_json, callback);\n };\n function d3_json(request) {\n return JSON.parse(request.responseText);\n }\n d3.html = function(url, callback) {\n return d3_xhr(url, \"text/html\", d3_html, callback);\n };\n function d3_html(request) {\n var range = d3_document.createRange();\n range.selectNode(d3_document.body);\n return range.createContextualFragment(request.responseText);\n }\n d3.xml = d3_xhrType(function(request) {\n return request.responseXML;\n });\n if (typeof define === \"function\" && define.amd) this.d3 = d3, define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}();","//! moment.js\n//! version : 2.29.3\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.3';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (typeof exports === 'object') {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require('moment'); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n ariaLabel: 'Use the arrow keys to pick a date',\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // minimum number of days in the week that gets week number one\n // default ISO 8601, week 01 is the week with the first Thursday (4)\n firstWeekOfYearMinDays: 4,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '' +\n '' +\n '';\n },\n\n isoWeek = function(date, firstWeekOfYearMinDays) {\n // Ensure we're at the start of the day.\n date.setHours(0, 0, 0, 0);\n\n // Thursday in current week decides the year because January 4th\n // is always in the first week according to ISO8601.\n var yearDay = date.getDate(),\n weekDay = date.getDay(),\n dayInFirstWeek = firstWeekOfYearMinDays,\n dayShift = dayInFirstWeek - 1, // counting starts at 0\n daysPerWeek = 7,\n prevWeekDay = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n var jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek),\n msPerDay = 24 * 60 * 60 * 1000,\n daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n weekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n return weekNum;\n },\n\n renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n var date = new Date(y, m, d),\n week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n return '' + week + '';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '' + (isRTL ? days.reverse() : days).join('') + '';\n },\n\n renderBody = function(rows)\n {\n return '' + rows.join('') + '';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('');\n }\n for (i = 0; i < 7; i++) {\n arr.push('' + renderDayName(opts, i, true) + '');\n }\n return '' + (opts.isRTL ? arr.reverse() : arr).join('') + '';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '
',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('');\n }\n\n monthHtml = '
' + opts.i18n.months[month] + '
';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('');\n }\n }\n yearHtml = '
' + year + opts.yearSuffix + '
';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '';\n }\n\n return html += '
';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '' + renderHead(opts) + renderBody(data) + '
';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n case 8:\n case 46:\n self.setDate(null);\n break;\n }\n }\n };\n\n self._parseFieldValue = function()\n {\n if (opts.parse) {\n return opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n var date = moment(opts.field.value, opts.format, opts.formatStrict);\n return (date && date.isValid()) ? date.toDate() : null;\n } else {\n return new Date(Date.parse(opts.field.value));\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n date = self._parseFieldValue();\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, 'keydown', self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n opts.defaultDate = self._parseFieldValue();\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * clear and reset the date\n */\n clear: function()\n {\n this.setDate(null);\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n html += '
' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', opts.ariaLabel);\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n leftAligned = true;\n bottomAligned = true;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n leftAligned = false;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n bottomAligned = false;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n\n addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n\n if (!this._o.container) {\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n }\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, 'keydown', this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, 'change', this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, 'click', this._onInputClick);\n removeEvent(opts.trigger, 'focus', this._onInputFocus);\n removeEvent(opts.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}));\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n"],"sourceRoot":""}