{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///mdc.tabs.min.js","webpack:///webpack/bootstrap 74583296950ff8f5c698","webpack:///./packages/mdc-base/foundation.ts","webpack:///./packages/mdc-base/component.ts","webpack:///./packages/mdc-animation/util.ts","webpack:///./packages/mdc-tabs/index.ts","webpack:///./packages/mdc-tabs/tab/index.ts","webpack:///./packages/mdc-tabs/tab-bar/index.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/index.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/component.ts","webpack:///./packages/mdc-dom/ponyfill.ts","webpack:///./packages/mdc-ripple/util.ts","webpack:///./packages/mdc-ripple/foundation.ts","webpack:///./packages/mdc-ripple/constants.ts","webpack:///./packages/mdc-tabs/tab/constants.ts","webpack:///./packages/mdc-tabs/tab/foundation.ts","webpack:///./packages/mdc-ripple/component.ts","webpack:///./packages/mdc-tabs/tab/component.ts","webpack:///./packages/mdc-tabs/tab-bar/component.ts","webpack:///./packages/mdc-tabs/tab-bar/foundation.ts","webpack:///./packages/mdc-tabs/tab-bar/constants.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/foundation.ts","webpack:///./packages/mdc-tabs/tab-bar-scroller/constants.ts"],"names":["root","factory","exports","module","define","amd","tabs","mdc","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","default","object","property","prototype","hasOwnProperty","p","s","0","value","MDCFoundation","adapter","adapter_","init","destroy","1","__read","Symbol","iterator","r","e","ar","next","done","push","error","return","__spread","arguments","length","concat","foundation_1","MDCComponent","foundation","args","_i","root_","initialize","apply","foundation_","getDefaultFoundation","initialSyncWithDOM","attachTo","_args","Error","listen","evtType","handler","addEventListener","unlisten","removeEventListener","emit","evtData","shouldBubble","evt","CustomEvent","bubbles","detail","document","createEvent","initCustomEvent","dispatchEvent","11","isWindow","windowObj","Boolean","createElement","getCorrectPropertyName","cssProperty","cssPropertyNameMap","el","_a","standard","prefixed","style","getCorrectEventName","eventType","jsEventTypeMap","animation","transform","transition","animationend","animationiteration","animationstart","transitionend","163","__export","164","constants_1","tabCssClasses","cssClasses","tabStrings","strings","165","tabBarCssClasses","tabBarStrings","166","tabBarScrollerCssClasses","tabBarScrollerStrings","167","__extends","_extendStatics","b","setPrototypeOf","__proto__","Array","__","constructor","create","util_1","component_1","component_2","MDCTabBarScroller","_super","tabBar_","tabBarFactory","MDCTabBar","scrollFrame_","querySelector","MDCTabBarScrollerFoundation","FRAME_SELECTOR","tabBarEl_","TABS_SELECTOR","forwardIndicator_","INDICATOR_FORWARD_SELECTOR","backIndicator_","INDICATOR_BACK_SELECTOR","_this","addClass","className","classList","add","removeClass","remove","eventTargetHasClass","target","contains","addClassToForwardIndicator","removeClassFromForwardIndicator","addClassToBackIndicator","removeClassFromBackIndicator","isRTL","getComputedStyle","getPropertyValue","registerBackIndicatorClickHandler","deregisterBackIndicatorClickHandler","registerForwardIndicatorClickHandler","deregisterForwardIndicatorClickHandler","registerCapturedInteractionHandler","deregisterCapturedInteractionHandler","registerWindowResizeHandler","window","deregisterWindowResizeHandler","getNumberOfTabs","tabBar","getComputedWidthForTabAtIndex","index","computedWidth","getComputedLeftForTabAtIndex","computedLeft","getOffsetWidthForScrollFrame","offsetWidth","getScrollLeftForScrollFrame","scrollLeft","setScrollLeftForScrollFrame","scrollLeftAmount","getOffsetWidthForTabBar","setTransformStyleForTabBar","setProperty","getOffsetLeftForEventTarget","offsetLeft","getOffsetWidthForEventTarget","layout","2","closest","element","selector","matches","parentElement","webkitMatchesSelector","msMatchesSelector","3","detectEdgePseudoVarBug","node","body","appendChild","computedStyle","hasPseudoVarBug","borderTopStyle","parentNode","removeChild","supportsCssVariables","forceRefresh","CSS","supportsCssVars","supportsCssVariables_","supports","explicitlySupportsCssVars","weAreFeatureDetectingSafari10plus","applyPassive","globalObj","supportsPassive_","isSupported_1","passive","getNormalizedEventCoords","pageOffset","clientRect","x","y","normalizedX","normalizedY","documentX","left","documentY","top","type","touchEvent","changedTouches","pageX","pageY","mouseEvent","4","__assign","assign","t","ACTIVATION_EVENT_TYPES","POINTER_DEACTIVATION_EVENT_TYPES","activatedTargets","MDCRippleFoundation","defaultAdapter","activationAnimationHasEnded_","activationTimer_","fgDeactivationRemovalTimer_","fgScale_","frame_","width","height","initialSize_","layoutFrame_","maxRadius_","unboundedCoords_","activationState_","defaultActivationState_","activationTimerCallback_","runDeactivationUXLogicIfReady_","activateHandler_","activate_","deactivateHandler_","deactivate_","focusHandler_","handleFocus","blurHandler_","handleBlur","resizeHandler_","numbers","browserSupportsCssVars","computeBoundingRect","right","bottom","containsEventTarget","deregisterDocumentInteractionHandler","deregisterInteractionHandler","deregisterResizeHandler","getWindowPageOffset","isSurfaceActive","isSurfaceDisabled","isUnbounded","registerDocumentInteractionHandler","registerInteractionHandler","registerResizeHandler","updateCssVariable","supportsPressRipple","supportsPressRipple_","registerRootHandlers_","ROOT_1","ROOT","UNBOUNDED_1","UNBOUNDED","requestAnimationFrame","layoutInternal_","clearTimeout","FG_ACTIVATION","FG_DEACTIVATION","ROOT_2","UNBOUNDED_2","removeCssVars_","deregisterRootHandlers_","deregisterDeactivationHandlers_","activate","deactivate","cancelAnimationFrame","setUnbounded","unbounded","BG_FOCUSED","activationEvent","hasDeactivationUXRun","isActivated","isProgrammatic","wasActivatedByPointer","wasElementMadeActive","forEach","registerDeactivationHandlers_","rippleStrings","keys","key","indexOf","activationState","previousActivationEvent","previousActivationEvent_","some","resetActivationState_","checkElementMadeActive_","animateActivation_","keyCode","VAR_FG_TRANSLATE_START","VAR_FG_TRANSLATE_END","_b","DEACTIVATION_TIMEOUT_MS","translateStart","translateEnd","_c","getFgTranslationCoordinates_","startPoint","endPoint","rmBoundedActivationClasses_","setTimeout","FG_DEACTIVATION_MS","TAP_DELAY_MS","state","animateDeactivation_","maxDim","Math","max","sqrt","pow","PADDING","floor","INITIAL_ORIGIN_SCALE","updateLayoutCssVars_","VAR_FG_SIZE","VAR_LEFT","VAR_TOP","VAR_FG_SCALE","round","5","50","ACTIVE","SELECTED_EVENT","51","MDCTabFoundation","computedWidth_","computedLeft_","isActive_","preventDefaultOnClick_","clickHandler_","preventDefault","notifySelected","keydownHandler_","getOffsetWidth","getOffsetLeft","getComputedWidth","getComputedLeft","isActive","setActive","preventsDefaultOnClick","setPreventDefaultOnClick","preventDefaultOnClick","measureSelf","6","__importStar","mod","result","k","ponyfill_1","util","MDCRipple","disabled","opts","ripple","createAdapter","instance","getBoundingClientRect","documentElement","pageXOffset","pageYOffset","varName","unbounded_","set","setUnbounded_","dataset","93","MDCTab","ripple_","tab","94","foundation_2","MDCTabBarFoundation","tabs_","activeIndex","getActiveTabIndex","setActiveTab_","setActiveTabIndex_","tabFactory","indicator_","INDICATOR_SELECTOR","gatherTabs_","tabSelectedHandler_","bindOnMDCTabSelectedEvent","unbindOnMDCTabSelectedEvent","setStyleForIndicator","propertyName","getOffsetWidthForIndicator","notifyChange","CHANGE_EVENT","isTabActiveAtIndex","setTabActiveAtIndex","isDefaultPreventedOnClickForTabAtIndex","setPreventDefaultOnClickForTabAtIndex","measureTabAtIndex","slice","querySelectorAll","TAB_SELECTOR","map","activeTabIndex","switchToTabAtIndex","activeTab","indexOfTab","95","isIndicatorShown_","activeTabIndex_","UPGRADED","findActiveTabIndex_","shouldNotify","prevActiveTabIndex","layoutIndicator_","forEachTabIndex_","isIndicatorFirstRender","translateAmtForActiveTabLeft","scaleAmtForActiveTabWidth","transformValue","numTabs","96","97","INTERACTION_EVENTS","pointerDownRecognized_","currentTranslateOffset_","focusedTarget_","scrollFrameScrollLeft_","forwardIndicatorClickHandler_","scrollForward","backIndicatorClickHandler_","scrollBack","interactionHandler_","handlePossibleTabKeyboardFocus_","tabWidthAccumulator","scrollTargetIndex","tabOffsetLeft","tabBarWidthLessTabOffsetLeft","tabIsNotOccluded","isRTL_","scrollToTabAtIndex","scrollFrameOffsetWidth","tabOffsetLeftAndWidth","scrollTargetDetermined","frameOffsetAndTabWidth","layout_","scrollTargetOffsetLeft","scrollTargetOffsetWidth","normalizeForRTL_","shiftFrame_","frameWidth","updateIndicatorEnabledStates_","shiftAmount","TAB","resetAmt","scrollFrameWidth","tabBarWidth","leftEdge","rightEdge","shouldScrollBack","shouldScrollForward","normalizedLeftOffset","INDICATOR_ENABLED","98","INDICATOR_BACK","INDICATOR_FORWARD"],"mappings":";;;;;;;CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAAI,KAAAL,KAEAD,EAAAO,IAAAP,EAAAO,QAAiCP,EAAAO,IAAAD,KAAAL,MAChCO,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAT,OAGA,IAAAC,GAAAS,EAAAD,IACAE,EAAAF,EACAG,KACAZ,WAUA,OANAO,GAAAE,GAAAI,KAAAZ,EAAAD,QAAAC,IAAAD,QAAAQ,GAGAP,EAAAW,KAGAX,EAAAD,QAvBA,GAAAU,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAhB,EAAAiB,EAAAC,GACAV,EAAAW,EAAAnB,EAAAiB,IACAG,OAAAC,eAAArB,EAAAiB,GACAK,gBACAC,cACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAxB,GACA,GAAAiB,GAAAjB,KAAAyB,WACA,WAA2B,MAAAzB,GAAA0B,SAC3B,WAAiC,MAAA1B,GAEjC,OADAO,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAS,EAAAC,GAAsD,MAAAT,QAAAU,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDrB,EAAAwB,EAAA,GAGAxB,IAAAyB,EAAA,ODgBMC,EACA,SAAUjC,EAAQD,EAASQ,GAEjC,YAyBAY,QAAOC,eAAerB,EAAS,cAAgBmC,UElF/C,IAAAC,GAAA,WA4BE,QAAAA,GAAoDC,YAAxCA,UACN/B,KAASgC,SACfD,EASF,MAtCEjB,QAAAC,eAAWe,EAAU,cF0FfZ,IE1FN,WAGE,UF4FID,cACAD,kBE1FNF,OAAAC,eAAWe,EAAO,WF6FZZ,IE7FN,WAGE,UF+FID,cACAD,kBE7FNF,OAAAC,eAAWe,EAAO,WFgGZZ,IEhGN,WAGE,UFkGID,cACAD,kBEhGNF,OAAAC,eAAWe,EAAc,kBFmGnBZ,IEnGN,WAIE,UFqGID,cACAD,kBE7FNc,EAAAN,UAAIS,KAAJ,aAIAH,EAAAN,UAAOU,QAAP,aAGDJ,IAvCYpC,GAAAoC,cAAaA,EA0C1BpC,EAAA2B,QAA6BS,GFmGvBK,EACA,SAAUxC,EAAQD,EAASQ,GAEjC,YAyBA,IAAIkC,GAASpC,MAAQA,KAAKoC,QAAU,SAAUvB,EAAGM,GAC7C,GAAIX,GAAsB,kBAAX6B,SAAyBxB,EAAEwB,OAAOC,SACjD,KAAK9B,EAAG,MAAOK,EACf,IACI0B,GAEAC,EAHAnC,EAAIG,EAAED,KAAKM,GAEX4B,IAEJ,KACI,eAAQtB,GAAgBA,KAAM,MAAQoB,EAAIlC,EAAEqC,QAAQC,MAChDF,EAAGG,KAAKL,EAAEV,OAEhB,MAAOgB,GACLL,GAAMK,MAAOA,GACf,QACE,IACQN,IAAMA,EAAEI,OAASnC,EAAIH,EAAUyC,SAAItC,EAAED,KAAKF,GAChD,QACE,GAAImC,EAAG,KAAMA,GAAEK,OAGvB,MAAOJ,IAEPM,EAAW/C,MAAQA,KAAK+C,UAAY,WACpC,IAAK,GAAIN,MAASpC,EAAI,EAAGA,EAAI2C,UAAUC,OAAQ5C,IAC3CoC,EAAKA,EAAGS,OAAOd,EAAOY,UAAU3C,IACnC,OAAOoC,GAEZ3B,QAAOC,eAAerB,EAAS,cAAgBmC,UGpM/C,IAAAsB,GAAAjD,EAA2C,GAG3CkD,EAAA,WAYE,QAAAA,GACiB5D,EACc6D,GHwLzB,IGvLF,GAAAC,MAAAC,EAAuB,EAAvBA,EAAAP,UAAuBC,OAAAM,IAAvBD,EAAAC,EAAA,GAAAP,UAAuBO,EAErBvD,MAAMwD,MAAQhE,EACdQ,KAAWyD,WAAAC,MAAX1D,KAAA+C,EAAqBO,IAGrBtD,KAAY2D,qBAAaN,EAAqBrD,KAAyB4D,uBAAYP,EACnFrD,KAAY2D,YAAQ1B,OACpBjC,KACN6D,qBAkEF,MAzFST,GAAQU,SAAf,SAA6BtE,GAK3B,MAAO,IAAgB4D,GAAK5D,EAAE,GAAI2D,GAAarB,oBAqBjDsB,EAAA5B,UAAUiC,WAAV,WHgMM,IGhMK,GAAAM,MAAAR,EAAwB,EAAxBA,EAAAP,UAAwBC,OAAAM,IAAxBQ,EAAAR,GAAAP,UAAwBO,IAMnCH,EAAA5B,UAAoBoC,qBAApB,WAGE,KAAM,IAASI,OAAiF,mGAIlGZ,EAAA5B,UAAkBqC,mBAAlB,aAOAT,EAAA5B,UAAOU,QAAP,WAGMlC,KAAY2D,YAClBzB,WAQAkB,EAAA5B,UAAMyC,OAAN,SAAsBC,EAAwBC,GACxCnE,KAAMwD,MAAiBY,iBAAQF,EACrCC,IAQAf,EAAA5B,UAAQ6C,SAAR,SAAwBH,EAAwBC,GAC1CnE,KAAMwD,MAAoBc,oBAAQJ,EACxCC,IAKAf,EAAA5B,UAAI+C,KAAJ,SAAsCL,EAAYM,EAAsBC,YAApBA,SAClD,IAAwBC,EACa,mBAAfC,aACjBD,EAAA,GAAkBC,aAAWT,GACvBU,QAAcH,EACfI,OACLL,KAEAE,EAAWI,SAAYC,YAAgB,eACvCL,EAAgBM,gBAAQd,EAAcO,KAAkBD,IAGzDxE,KAAMwD,MAAcyB,cAC1BP,IACDtB,IA1FY1D,GAAA0D,aAAYA,EA6FzB1D,EAAA2B,QAA4B+B,GHsLtB8B,GACA,SAAUvF,EAAQD,EAASQ,GAEjC,YI7OA,SAAiBiF,GAAkBC,GACjC,MAAcC,SAAUD,EAAUN,WACpC,kBADwDM,GAASN,SAAcQ,cAG/E,QAAsCC,GAAkBH,EAAsCI,GAE5F,GAAYL,EAAWC,IAAeI,IAAsBC,GAAE,CAC5D,GAAQC,GAAYN,EAASN,SAAcQ,cAAQ,OAC7CK,EAAAF,EAAsDD,GAArDI,EAAAD,EAAQC,SAAEC,EAAAF,EAA4CE,QAE7D,OAD2BD,KAAMF,GAAOI,MACVF,EAAUC,EAE1C,MACFL,GAEA,QAAmCO,GAAkBX,EAAgCY,GAEnF,GAAYb,EAAWC,IAAaY,IAAkBC,GAAE,CACtD,GAAQP,GAAYN,EAASN,SAAcQ,cAAQ,OAC7CK,EAAAM,EAA6DD,GAA5DJ,EAAAD,EAAQC,SAAEC,EAAAF,EAAQE,QAEzB,OAF2BF,GAAyCH,cAChCE,GAAOI,MACbF,EAAUC,EAE1C,MACFG,GJ8OAlF,OAAOC,eAAerB,EAAS,cAAgBmC,UI5S/C,IAAwB4D,IACbS,WACCL,SAAqB,oBACrBD,SACT,aACQO,WACCN,SAAqB,oBACrBD,SACT,aACSQ,YACAP,SAAsB,qBACtBD,SAEV,eAEkBK,GACNI,cACCb,YAAa,YAChBK,SAAsB,qBACtBD,SACT,gBACiBU,oBACLd,YAAa,YAChBK,SAA4B,2BAC5BD,SACT,sBACaW,gBACDf,YAAa,YAChBK,SAAwB,uBACxBD,SACT,kBACYY,eACAhB,YAAc,aACjBK,SAAuB,sBACvBD,SAEV,iBAMFlG,GAAA6F,uBASCA,EAED7F,EAAAqG,oBASCA,GJkTKU,IACA,SAAU9G,EAAQD,EAASQ,GAEjC,YAyBA,SAASwG,GAASlG,GAChB,IAAK,GAAIkB,KAAKlB,GACPd,EAAQ+B,eAAeC,KAAIhC,EAAQgC,GAAKlB,EAAEkB,IAGnDZ,OAAOC,eAAerB,EAAS,cAAgBmC,WKvZ/C6E,EAAAxG,EAA4B,MAC5BwG,EAAAxG,EAAgC,MAChCwG,EAAAxG,EAAyC,OL4ZnCyG,IACA,SAAUhH,EAAQD,EAASQ,GAEjC,YAyBA,SAASwG,GAASlG,GAChB,IAAK,GAAIkB,KAAKlB,GACPd,EAAQ+B,eAAeC,KAAIhC,EAAQgC,GAAKlB,EAAEkB,IAGnDZ,OAAOC,eAAerB,EAAS,cAAgBmC,WM9b/C6E,EAAAxG,EAA4B,KAC5BwG,EAAAxG,EAA6B,IAC7B,IAAA0G,GAAA1G,EAA+E,GAAvER,GAAAmH,cAAAD,EAA2BE,WAAEpH,EAAAqH,WAAAH,EAAqBI,SNqcpDC,IACA,SAAUtH,EAAQD,EAASQ,GAEjC,YAyBA,SAASwG,GAASlG,GAChB,IAAK,GAAIkB,KAAKlB,GACPd,EAAQ+B,eAAeC,KAAIhC,EAAQgC,GAAKlB,EAAEkB,IAGnDZ,OAAOC,eAAerB,EAAS,cAAgBmC,WOxe/C6E,EAAAxG,EAA4B,KAC5BwG,EAAAxG,EAA6B,IAE7B,IAAA0G,GAAA1G,EAAqF,GAA7ER,GAAAwH,iBAAAN,EAA8BE,WAAEpH,EAAAyH,cAAAP,EAAwBI,SP8e1DI,IACA,SAAUzH,EAAQD,EAASQ,GAEjC,YAyBA,SAASwG,GAASlG,GAChB,IAAK,GAAIkB,KAAKlB,GACPd,EAAQ+B,eAAeC,KAAIhC,EAAQgC,GAAKlB,EAAEkB,IAGnDZ,OAAOC,eAAerB,EAAS,cAAgBmC,WQlhB/C6E,EAAAxG,EAA4B,MAC5BwG,EAAAxG,EAA6B,IAC7B,IAAA0G,GAAA1G,EAAqG,GAA7FR,GAAA2H,yBAAAT,EAAsCE,WAAEpH,EAAA4H,sBAAAV,EAAgCI,SRyhB1EO,IACA,SAAU5H,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,OAGvFhH,QAAOC,eAAerB,EAAS,cAAgBmC,US3kB/C,IAAAoG,GAAA/H,EAAgE,IAChEgI,EAAAhI,EAAsD,GACtDiI,EAAAjI,EAAiE,IAEjEiD,EAAAjD,EAAyD,IAEzDkI,EAAA,SAAAC,GAAA,QAAAD,KT6kBQ,MAAkB,QAAXC,GAAmBA,EAAO3E,MAAM1D,KAAMgD,YStgBrDhD,KAAA,MAvEuCwH,GAAAY,EAAyCC,GACvED,EAAQtE,SAAf,SAA6BtE,GAC3B,MAAO,IAAqB4I,GAC9B5I,IAEAsB,OAAAC,eAAIqH,EAAA5G,UAAM,UT8kBJN,IS9kBN,WACE,MAAWlB,MACbsI,ST+kBMrH,cACAD,kBStkBNoH,EAAA5G,UAAUiC,WAAV,SAAsE8E,YAA3DA,MAAA,SAAqC7C,GAAK,UAAIyC,GAASK,UAAI9C,KAChE1F,KAAayI,aACTzI,KAAMwD,MAAckF,cAAcvF,EAA2BwF,4BAAQ3B,QAAkB4B,gBAC3F5I,KAAU6I,UACN7I,KAAMwD,MAAckF,cAAcvF,EAA2BwF,4BAAQ3B,QAAiB8B,eAC1F9I,KAAkB+I,kBACd/I,KAAMwD,MAAckF,cAAcvF,EAA2BwF,4BAAQ3B,QAA8BgC,4BACvGhJ,KAAeiJ,eACXjJ,KAAMwD,MAAckF,cAAcvF,EAA2BwF,4BAAQ3B,QAA2BkC,yBAEpGlJ,KAAQsI,QAAgBC,EAAKvI,KACnC6I,YAEAT,EAAA5G,UAAoBoC,qBAApB,cAAAuF,GAoCCnJ,KAhCc+B,GACHqH,SAAE,SAAUC,GAAK,MAAIF,GAAM3F,MAAU8F,UAAIC,IAAWF,IACjDG,YAAE,SAAUH,GAAK,MAAIF,GAAM3F,MAAU8F,UAAOG,OAAWJ,IAC/CK,oBAAE,SAAOC,EAAWN,GAAK,MAAMM,GAAUL,UAASM,SAAWP,IACtDQ,2BAAE,SAAUR,GAAK,MAAIF,GAAkBJ,kBAAUO,UAAIC,IAAWF,IAC3DS,gCAAE,SAAUT,GAAK,MAAIF,GAAkBJ,kBAAUO,UAAOG,OAAWJ,IAC3EU,wBAAE,SAAUV,GAAK,MAAIF,GAAeF,eAAUK,UAAIC,IAAWF,IACxDW,6BAAE,SAAUX,GAAK,MAAIF,GAAeF,eAAUK,UAAOG,OAAWJ,IACvFY,MAAE,WAAM,MAAoE,QAApDC,iBAAKf,EAAO3F,OAAiB2G,iBAAa,cACtCC,kCAAE,SAAQjG,GAAK,MAAIgF,GAAeF,eAAiB7E,iBAAQ,QAAUD,IACnEkG,oCAAE,SAAQlG,GAAK,MAAIgF,GAAeF,eAAoB3E,oBAAQ,QAAUH,IACvEmG,qCAAE,SAAQnG,GAAK,MAAIgF,GAAkBJ,kBAAiB3E,iBAAQ,QAAUD,IACtEoG,uCAAE,SAAQpG,GAAK,MAAIgF,GAAkBJ,kBAAoBzE,oBAAQ,QAAUH,IAC/EqG,mCAAE,SAAI9F,EAASP,GAAK,MAAIgF,GAAM3F,MAAiBY,iBAAIM,EAASP,OAC1DsG,qCAAE,SAAI/F,EAASP,GAAK,MAAIgF,GAAM3F,MAAoBc,oBAAII,EAASP,OACxEuG,4BAAE,SAAQvG,GAAK,MAAMwG,QAAiBvG,iBAAS,SAAUD,IACvDyG,8BAAE,SAAQzG,GAAK,MAAMwG,QAAoBrG,oBAAS,SAAUH,IAC1E0G,gBAAE,WAAM,MAAI1B,GAAO2B,OAAKhL,KAAOmD,QACjB8H,8BAAE,SAAMC,GAAK,MAAI7B,GAAO2B,OAAKhL,KAAOkL,GAAcC,eACnDC,6BAAE,SAAMF,GAAK,MAAI7B,GAAO2B,OAAKhL,KAAOkL,GAAaG,cACjDC,6BAAE,WAAM,MAAIjC,GAAaV,aAAY4C,aACtCC,4BAAE,WAAM,MAAInC,GAAaV,aAAW8C,YACpCC,4BAAE,SAAiBC,GAAK,MAAItC,GAAaV,aAAW8C,WAAmBE,GAC3EC,wBAAE,WAAM,MAAIvC,GAAUN,UAAYwC,aAC/BM,2BAAE,SAAM9J,GAC5BsH,EAAUN,UAAM/C,MAAY8F,YAAC3D,EAAsB1C,uBAAOoF,OAAc,aAC9E9I,IAC2BgK,4BAAE,SAAOlC,GAAK,MAAMA,GAAWmC,YAC9BC,6BAAE,SAAOpC,GAAK,MAAMA,GAAY0B,aAG9D,OAAO,IAAIlI,GAA2BwF,4BACxC5G,IAEAqG,EAAA5G,UAAMwK,OAAN,WACMhM,KAAY2D,YAClBqI,UACD5D,GAvEsCF,EAuEtC9E,aAvEY1D,GAAA0I,kBAAiBA,GTssBxB6D,EACA,SAAUtM,EAAQD,EAASQ,GAEjC,YU1sBA,SAAuBgM,GAAiBC,EAAkBC,GACxD,GAAWD,EAAQD,QACjB,MAAcC,GAAQD,QAAWE,EAInC,KADA,GAAM1G,GAA2ByG,EACxBzG,GAAE,CACT,GAAW2G,EAAG3G,EAAW0G,GACvB,MAAU1G,EAEVA,GAAKA,EAAe4G,cAExB,MACF,MAEA,QAAuBD,GAAiBF,EAAkBC,GAIxD,OAH6BD,EAAQE,SACvBF,EAAsBI,uBACtBJ,EAAmBK,mBACRjM,KAAQ4L,EACnCC,GV+sBAtL,OAAOC,eAAerB,EAAS,cAAgBmC,WUnuB/CnC,EAAAwM,QAaCA,EAEDxM,EAAA2M,QAKCA,GV0uBKI,EACA,SAAU9M,EAAQD,EAASQ,GAEjC,YWzvBA,SAA+BwM,GAAkBtH,GAG/C,GAAcN,GAAYM,EAAUN,SAC1B6H,EAAW7H,EAAcQ,cAAQ,MACvCqH,GAAUtD,UAA2C,wCACjDvE,EAAK8H,KAAYC,YAAOF,EAMhC,IAAmBG,GAAY1H,EAAiB8E,iBAAOyC,GAClCI,EAAyB,OAATD,GAAsD,UAA5BA,EAAeE,cAI9E,OAHQL,GAAWM,YACbN,EAAWM,WAAYC,YAAOP,GAGtCI,EAEA,QAAoCI,GAAkB/H,EAAsBgI,YAApBA,SAC/C,IAAAC,GAAAjI,EAAiBiI,IACLC,EAAyBC,CAC5C,IAA8C,iBAAdA,KAA+BH,EAC7D,MAA6BG,EAI/B,KADmCF,GAAuC,kBAAzBA,GAASG,SAExD,QAGF,IAA+BC,GAAMJ,EAASG,SAAa,aAAS,OAG1BE,EACnCL,EAASG,SAAqB,sBAC9BH,EAASG,SAAQ,QACtB,YAWF,OARiBF,MADYG,IAAqCC,GACvBhB,EAAYtH,IAKtCgI,IACMG,EAAmBD,GAG5CA,EAMA,QAA4BK,GAA2BC,EAAsBR,GAE3E,YAF2BQ,MAA0BjD,iBAAEyC,cAAoB,KAEvDS,GAA8BT,EAAA,CAChD,GAAeU,KACf,KACWF,EAAS9I,SAAiBV,iBAAO,OAAE,cAC1C2J,cAEE,MADWD,SAIf,MAAQtL,IAGMqL,EAAeC,EAGjC,QAAyBD,IAASE,YAGpC,QAAwCC,GAAuBtJ,EAA4BuJ,EAAwBC,GAEjH,IAAQxJ,EACN,OAASyJ,EAAG,EAAGC,EAAK,EAEf,IAISC,GACAC,EALTH,EAAAF,EAACE,EAAEC,EAAAH,EAAgBG,EACXG,EAAIJ,EAAaD,EAAMM,KACvBC,EAAIL,EAAaF,EAAKQ,GAKrC,IAA6B,eAAtBhK,EAAKiK,KAAmB,CAC7B,GAAgBC,GAAqBlK,CAC1B2J,GAAaO,EAAeC,eAAG,GAAMC,MAAaP,EAClDD,EAAaM,EAAeC,eAAG,GAAME,MAAaN,MACxD,CACL,GAAgBO,GAAqBtK,CAC1B2J,GAAaW,EAAMF,MAAaP,EAChCD,EAAaU,EAAMD,MAAaN,EAG7C,OAASN,EAAaE,EAAGD,EAC3BE,GXypBAxN,OAAOC,eAAerB,EAAS,cAAgBmC,UWpwB/C,IAA+C0L,GAMLM,CAsB1CnO,GAAAyN,qBA8BCA,EAMDzN,EAAAiO,aAkBCA,EAEDjO,EAAAsO,yBAuBCA,GXwwBKiB,EACA,SAAUtP,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,QAGnFoH,EAAWlP,MAAQA,KAAKkP,UAAY,WAUpC,MATAA,GAAWpO,OAAOqO,QAAU,SAAUC,GAClC,IAAK,GAAIzN,GAAGtB,EAAI,EAAGc,EAAI6B,UAAUC,OAAQ5C,EAAIc,EAAGd,IAAK,CACjDsB,EAAIqB,UAAU3C,EACd,KAAK,GAAIqB,KAAKC,GACNb,OAAOU,UAAUC,eAAelB,KAAKoB,EAAGD,KAAI0N,EAAE1N,GAAKC,EAAED,IAGjE,MAAO0N,IAEJF,EAASxL,MAAM1D,KAAMgD,WAEhClC,QAAOC,eAAerB,EAAS,cAAgBmC,UYn7B/C,IAAAsB,GAAAjD,EAAwD,GAExD0G,EAAA1G,EAAyD,GAEzD+H,EAAA/H,EAAgD,GAyBpBmP,GACd,aAAe,cAAa,YACxC,WAGoCC,GAC1B,WAAa,YAAW,UAClC,eAGkBC,KAEpBC,EAAA,SAAAnH,GAsDE,QAAAmH,GAA+CzN,GAA/C,GAAAoH,GACEd,EAAA9H,KAAAP,KAAAkP,KAA6BM,EAAeC,eAAc1N,KAa3D/B,IZi3BK,OYn5BEmJ,GAA4BuG,gCAE5BvG,EAAgBwG,iBAAK,EACrBxG,EAA2ByG,4BAAK,EAChCzG,EAAQ0G,SAAO,IACf1G,EAAM2G,QAASC,MAAG,EAAQC,OAAK,GAC/B7G,EAAY8G,aAAK,EACjB9G,EAAY+G,aAAK,EACjB/G,EAAUgH,WAAK,EACfhH,EAAgBiH,kBAAqB5B,KAAG,EAAKE,IAAK,GAcpDvF,EAAiBkH,iBAAOlH,EAA2BmH,0BAEnDnH,EAAyBoH,yBAAG,WAC1BpH,EAA6BuG,gCAC7BvG,EACNqH,kCACIrH,EAAiBsH,iBAAG,SAAEjO,GAAK,MAAI2G,GAAUuH,UAAGlO,IAC5C2G,EAAmBwH,mBAAG,WAAM,MAAIxH,GAAcyH,eAC9CzH,EAAc0H,cAAG,WAAM,MAAI1H,GAAc2H,eACzC3H,EAAa4H,aAAG,WAAM,MAAI5H,GAAa6H,cACvC7H,EAAe8H,eAAG,WAAM,MAAI9H,GAAS6C,UAC3C7C,EA4YF,MAhdyC3B,GAAAgI,EAA+BnH,GACtEvH,OAAAC,eAAWyO,EAAU,cZu7BftO,IYv7BN,WACE,MAAO0F,GACTE,YZw7BM7F,cACAD,kBYv7BNF,OAAAC,eAAWyO,EAAO,WZ07BZtO,IY17BN,WACE,MAAO0F,GACTI,SZ27BM/F,cACAD,kBY17BNF,OAAAC,eAAWyO,EAAO,WZ67BZtO,IY77BN,WACE,MAAO0F,GACTsK,SZ87BMjQ,cACAD,kBY77BNF,OAAAC,eAAWyO,EAAc,kBZg8BnBtO,IYh8BN,WACE,OACUkI,SAAE,aACY+H,uBAAE,WAAM,UACXC,oBAAE,WAAM,OAAK1C,IAAG,EAAO2C,MAAG,EAAQC,OAAG,EAAM9C,KAAG,EAAOuB,MAAG,EAAQC,OAAK,IACrEuB,oBAAE,WAAM,UACSC,qCAAE,aACVC,6BAAE,aACPC,wBAAE,aACNC,oBAAE,WAAM,OAAGxD,EAAG,EAAGC,EAAK,IAC1BwD,gBAAE,WAAM,UACNC,kBAAE,WAAM,UACdC,YAAE,WAAM,UACeC,mCAAE,aACVC,2BAAE,aACPC,sBAAE,aACZzI,YAAE,aACI0I,kBAAE,eZm+BjBjR,cACAD,kBY57BNwO,EAAAhO,UAAIS,KAAJ,cAAAkH,GAgBCnJ,KAf0BmS,EAAOnS,KAAwBoS,sBAIxD,IAFIpS,KAAsBqS,sBAAsBF,GAEzBA,EAAE,CACjB,GAAAxM,GAAA6J,EAAkD1I,WAAjDwL,EAAA3M,EAAI4M,KAAEC,EAAA7M,EAA4C8M,SACpCC,uBAAC,WAChBvJ,EAASnH,SAASoH,SAAOkJ,GACrBnJ,EAASnH,SAAc8P,gBACzB3I,EAASnH,SAASoH,SAAYoJ,GAE9BrJ,EAAmBwJ,uBAM/BnD,EAAAhO,UAAOU,QAAP,cAAAiH,GAwBCnJ,IAvBC,IAAQA,KAAuBoS,uBAAE,CACvBpS,KAAiB2P,mBACXiD,aAAK5S,KAAmB2P,kBAChC3P,KAAiB2P,iBAAK,EACtB3P,KAASgC,SAAYwH,YAAoBgG,EAAW1I,WAAgB+L,gBAGlE7S,KAA4B4P,8BACtBgD,aAAK5S,KAA8B4P,6BAC3C5P,KAA4B4P,4BAAK,EACjC5P,KAASgC,SAAYwH,YAAoBgG,EAAW1I,WAAkBgM,iBAGtE,IAAAnN,GAAA6J,EAAkD1I,WAAjDiM,EAAApN,EAAI4M,KAAES,EAAArN,EAA4C8M,SACpCC,uBAAC,WAChBvJ,EAASnH,SAAYwH,YAAOuJ,GAC5B5J,EAASnH,SAAYwH,YAAYwJ,GACjC7J,EACN8J,mBAGEjT,KAA2BkT,0BAC3BlT,KACNmT,mCAKA3D,EAAAhO,UAAQ4R,SAAR,SAAoB1O,GACd1E,KAAU0Q,UAChBhM,IAEA8K,EAAAhO,UAAU6R,WAAV,WACMrT,KACN4Q,eAEApB,EAAAhO,UAAMwK,OAAN,cAAA7C,GAQCnJ,IAPSA,MAAakQ,cACCoD,qBAAKtT,KAAekQ,cAEtClQ,KAAakQ,aAAAwC,sBAAyB,WACpCvJ,EAAmBwJ,kBACnBxJ,EAAa+G,aACnB,KAGFV,EAAAhO,UAAY+R,aAAZ,SAA+BC,GACtB,GAAAf,GAAAjD,EAAA1I,WAA4C2L,SACtCe,GACPxT,KAASgC,SAASoH,SAAYqJ,GAE9BzS,KAASgC,SAAYwH,YAAYiJ,IAIzCjD,EAAAhO,UAAWsP,YAAX,cAAA3H,GAGCnJ,IAFsB0S,uBAAC,WAClB,MAAIvJ,GAASnH,SAASoH,SAAoBoG,EAAW1I,WAAY2M,eAGvEjE,EAAAhO,UAAUwP,WAAV,cAAA7H,GAGCnJ,IAFsB0S,uBAAC,WAClB,MAAIvJ,GAASnH,SAAYwH,YAAoBgG,EAAW1I,WAAY2M,eASlEjE,EAAAhO,UAAoB4Q,qBAA5B,WACE,MAAWpS,MAASgC,SACtBmP,0BAEQ3B,EAAAhO,UAAuB8O,wBAA/B,WACE,OACiBoD,uBACKC,wBACTC,eACGC,kBACOC,yBACDC,0BAOhBvE,EAAAhO,UAAqB6Q,sBAA7B,SAA0DF,GAA1D,GAAAhJ,GAYCnJ,IAXwBmS,KACC9C,EAAQ2E,QAAC,SAAQ9P,GACjCiF,EAASnH,SAA2BgQ,2BAAQ9N,EAAMiF,EACxDsH,oBACQzQ,KAASgC,SAAc8P,eACzB9R,KAASgC,SAAsBiQ,sBAAKjS,KAAiBiR,iBAIzDjR,KAASgC,SAA2BgQ,2BAAQ,QAAMhS,KAAgB6Q,eAClE7Q,KAASgC,SAA2BgQ,2BAAO,OAAMhS,KACvD+Q,eAEQvB,EAAAhO,UAA6ByS,8BAArC,SAAgDvP,GAAhD,GAAAyE,GAQCnJ,IAP2B,aAAnB0E,EAAKiK,KACN3O,KAASgC,SAA2BgQ,2BAAQ,QAAMhS,KAAqB2Q,oBAE3CrB,EAAQ0E,QAAC,SAAQ9P,GAC3CiF,EAASnH,SAAmC+P,mCAAQ7N,EAAMiF,EAChEwH,uBAIInB,EAAAhO,UAAuB0R,wBAA/B,cAAA/J,GAUCnJ,IATuBqP,GAAQ2E,QAAC,SAAQ9P,GACjCiF,EAASnH,SAA6ByP,6BAAQvN,EAAMiF,EAC1DsH,oBACIzQ,KAASgC,SAA6ByP,6BAAQ,QAAMzR,KAAgB6Q,eACpE7Q,KAASgC,SAA6ByP,6BAAO,OAAMzR,KAAe+Q,cAE9D/Q,KAASgC,SAAc8P,eACzB9R,KAASgC,SAAwB0P,wBAAK1R,KAAiBiR,iBAIvDzB,EAAAhO,UAA+B2R,gCAAvC,cAAAhK,GAKCnJ,IAJKA,MAASgC,SAA6ByP,6BAAQ,QAAMzR,KAAqB2Q,oBAC7CrB,EAAQ0E,QAAC,SAAQ9P,GAC3CiF,EAASnH,SAAqCwP,qCAAQtN,EAAMiF,EAClEwH,uBAGMnB,EAAAhO,UAAcyR,eAAtB,cAAA9J,GAQCnJ,KAPoBkU,EAAsB1E,EAASxI,OAC/BlG,QAAKqT,KAAqDD,GACjEF,QAAC,SAAII,GACc,IAAtBA,EAAQC,QAAQ,SACjBlL,EAASnH,SAAkBkQ,kBAAcgC,EAAKE,GAAQ,SAKxD5E,EAAAhO,UAASkP,UAAjB,SAA6BhM,GAA7B,GAAAyE,GAkECnJ,IAjEC,KAAQA,KAASgC,SAAoB6P,oBAArC,CAIA,GAAqByC,GAAOtU,KAAkBqQ,gBAC9C,KAAmBiE,EAAYV,YAA/B,CAKA,GAA6BW,GAAOvU,KAA0BwU,wBAE9D,KADiDD,YAAO7P,GAAyC6P,EAAK5F,OAAQjK,EAAMiK,KACpH,CAaA,GATe2F,EAAYV,eACZU,EAAeT,wBAAMnP,EACrB4P,EAAgBZ,gBAAOhP,EACvB4P,EAAsBR,uBAAkBQ,EAAiBT,yBAAYnP,IACxD,cAArBA,EAAKiK,MAA6C,eAAtBjK,EAAKiK,MACtC,gBAD8DjK,EAAKiK,UAKrE,KAF6BjK,GAAkC6K,EAAOtM,OAAI,GAAAsM,EAAyBkF,KAC/F,SAAO9K,GAAK,MAAIR,GAASnH,SAAoBuP,oBAAQ5H,KAIhD,WADH3J,MAAyB0U,iCAIxBhQ,IACW6K,EAAK3M,KAAI8B,EAASiF,QAC9B3J,KAA8BiU,8BAAMvP,IAG3B4P,EAAqBP,qBAAO/T,KAAwB2U,wBAAMjQ,GACtD4P,EAAqBP,sBAClC/T,KAAsB4U,qBAGPlC,sBAAC,WAEJnD,KAEI+E,EAAqBP,+BAC/BrP,GACgC,MAAZA,EAAI0P,KAAkD,KAAhB1P,EAAQmQ,UAO3DP,EAAqBP,qBAAO5K,EAAwBwL,wBAAMjQ,GACtD4P,EAAqBP,sBAClC5K,EAAsByL,sBAIVN,EAAqBP,uBAEnC5K,EAAiBkH,iBAAOlH,EAA2BmH,iCAKrDd,EAAAhO,UAAuBmT,wBAA/B,SAA2CjQ,GACzC,gBAAWA,GAA2C,YAAtBA,EAAKiK,MAAsB3O,KAASgC,SAAoB4P,mBAGlFpC,EAAAhO,UAAkBoT,mBAA1B,cAAAzL,GA4BCnJ,KA3BO2F,EAAA6J,EAA4ExI,QAA3E8N,EAAAnP,EAAsBmP,uBAAEC,EAAApP,EAAoDoP,qBAC7EC,EAAAxF,EAAiE1I,WAAhEgM,EAAAkC,EAAelC,gBAAED,EAAAmC,EAAgDnC,cACjEoC,EAAAzF,EAAA0B,QAAuD+D,uBAE1DjV,MAAmB2S,iBAEvB,IAAkBuC,GAAM,GACRC,EAAM,EAEtB,KAASnV,KAASgC,SAAc8P,cAAE,CAC1B,GAAAsD,GAAApV,KAA4DqV,+BAA3DC,EAAAF,EAAUE,WAAEC,EAAAH,EAAgDG,QACrDL,GAAgBI,EAAEnH,EAAA,OAAiBmH,EAAElH,EAAK,KAC5C+G,EAAcI,EAAEpH,EAAA,OAAeoH,EAAEnH,EAAK,KAGhDpO,KAASgC,SAAkBkQ,kBAAuB4C,EAAkBI,GACpElV,KAASgC,SAAkBkQ,kBAAqB6C,EAAgBI,GAExDvC,aAAK5S,KAAmB2P,kBACxBiD,aAAK5S,KAA8B4P,6BAC3C5P,KAA+BwV,8BAC/BxV,KAASgC,SAAYwH,YAAkBsJ,GAGvC9S,KAASgC,SAAuBoP,sBAChCpR,KAASgC,SAASoH,SAAgByJ,GAClC7S,KAAiB2P,iBAAA8F,WAAc,WAAM,MAAItM,GAA2BoH,4BAC1E0E,IAEQzF,EAAAhO,UAA4B6T,6BAApC,WACQ,GAESC,GAFT3P,EAAA3F,KAAgEqQ,iBAA/DqD,EAAA/N,EAAe+N,eA0BtB,OAtBY4B,GAJY3P,EAA+CmO,sBAIxD7L,EAAwB+F,yBAClB0F,EACX1T,KAASgC,SAAsB2P,sBAC/B3R,KAASgC,SACfoP,wBAGCjD,EAAMnO,KAAO8P,OAAMC,MAAI,EACvB3B,EAAMpO,KAAO8P,OAAOE,OACrB,GAGMsF,GACPnH,EAAYmH,EAAKnH,EAAKnO,KAAaiQ,aAAK,EACxC7B,EAAYkH,EAAKlH,EAAKpO,KAAaiQ,aACpC,IAOgBqF,aAAUC,UAJzBpH,EAAOnO,KAAO8P,OAAMC,MAAQ,EAAK/P,KAAaiQ,aAAK,EACnD7B,EAAOpO,KAAO8P,OAAOE,OAAQ,EAAKhQ,KAAaiQ,aAChD,KAKIT,EAAAhO,UAA8BgP,+BAAtC,cAAArH,GAcCnJ,KAXQ8S,EAAAtD,EAAA1I,WAAkDgM,gBACnDnN,EAAA3F,KAA2DqQ,iBAA1DsD,EAAAhO,EAAoBgO,qBAAEC,EAAAjO,EAAqCiO,aACnBD,IAAiBC,IAElC5T,KAA6B0P,+BACrD1P,KAA+BwV,8BAC/BxV,KAASgC,SAASoH,SAAkB0J,GACpC9S,KAA4B4P,4BAAA6F,WAAc,WACxCtM,EAASnH,SAAYwH,YAC3BsJ,IAAGlM,EAAOsK,QAAqBwE,sBAI3BlG,EAAAhO,UAA2BgU,4BAAnC,WACS,GAAA3C,GAAArD,EAAA1I,WAAgD+L,aACnD7S,MAASgC,SAAYwH,YAAgBqJ,GACrC7S,KAA6B0P,gCAC7B1P,KAASgC,SACfoP,uBAEQ5B,EAAAhO,UAAqBkT,sBAA7B,cAAAvL,GAMCnJ,IALKA,MAAyBwU,yBAAOxU,KAAiBqQ,iBAAiBqD,gBAClE1T,KAAiBqQ,iBAAOrQ,KAA2BsQ,0BAG7CmF,WAAC,WAAM,MAAItM,GAAyBqL,iCAAiChF,EAAQ0B,QACzFyE,eAEQnG,EAAAhO,UAAWoP,YAAnB,cAAAzH,GAoBCnJ,KAnBsBsU,EAAOtU,KAAkBqQ,gBAE9C,IAAoBiE,EAAYV,YAAhC,CAIA,GAAWgC,GAAA1G,KAA6CoF,EAErCA,GAAeT,gBACXnB,sBAAC,WAAM,MAAIvJ,GAAqB0M,qBAAOD,KACxD5V,KAAyB0U,0BAEzB1U,KAAmCmT,kCAClBT,sBAAC,WAChBvJ,EAAiBkH,iBAAqBsD,wBACtCxK,EAAqB0M,qBAAQD,GAC7BzM,EACNuL,6BAIIlF,EAAAhO,UAAoBqU,qBAA5B,SAA+FlQ,GZ26BzF,GY36BwBmO,GAAAnO,EAAqBmO,sBAAEC,EAAApO,EAAoBoO,sBAC9CD,GAAwBC,IAC3C/T,KAAkCwQ,kCAIlChB,EAAAhO,UAAemR,gBAAvB,cAAAxJ,GAsBCnJ,IArBKA,MAAO8P,OAAO9P,KAASgC,SAAuBoP,qBAClD,IAAY0E,GAAOC,KAAIC,IAAKhW,KAAO8P,OAAOE,OAAMhQ,KAAO8P,OAAQC,MAa3D/P,MAAWmQ,WAAOnQ,KAASgC,SAAgB8P,cAASgE,EAL/B,WAEvB,MADuBC,MAAKE,KAAKF,KAAIG,IAAK/M,EAAO2G,OAAMC,MAAI,GAAOgG,KAAIG,IAAK/M,EAAO2G,OAAOE,OAAM,IACxDR,EAAQ0B,QACjDiF,WAKInW,KAAaiQ,aAAO8F,KAAMK,MAAON,EAAsBtG,EAAQ0B,QAAuBmF,sBACtFrW,KAAS6P,SAAG,GAAO7P,KAAWmQ,WAAOnQ,KAAgBiQ,aAErDjQ,KACNsW,wBAEQ9G,EAAAhO,UAAoB8U,qBAA5B,WACQ,GAAA3Q,GAAA6J,EAEyBxI,QAD7BuP,EAAA5Q,EAAW4Q,YAAEC,EAAA7Q,EAAQ6Q,SAAEC,EAAA9Q,EAAO8Q,QAAEC,EAAA/Q,EACF+Q,YAE5B1W,MAASgC,SAAkBkQ,kBAAYqE,EAASvW,KAAaiQ,aAAM,MACnEjQ,KAASgC,SAAkBkQ,kBAAawE,EAAM1W,KAAW6P,UAErD7P,KAASgC,SAAc8P,gBACzB9R,KAAiBoQ,kBACf5B,KAAMuH,KAAMY,MAAM3W,KAAO8P,OAAMC,MAAQ,EAAK/P,KAAaiQ,aAAM,GAChEvB,IAAMqH,KAAMY,MAAM3W,KAAO8P,OAAOE,OAAQ,EAAKhQ,KAAaiQ,aAC7D,IAEEjQ,KAASgC,SAAkBkQ,kBAASsE,EAASxW,KAAiBoQ,iBAAK5B,KAAM,MACzExO,KAASgC,SAAkBkQ,kBAAQuE,EAASzW,KAAiBoQ,iBAAI1B,IAAM,QAGhFc,GAhdwCrM,EAgdxCrB,cAhdYpC,GAAA8P,oBAAmBA,EAmdhC9P,EAAA2B,QAAmCmO,GZ26B7BoH,EACA,SAAUjX,EAAQD,EAASQ,GAEjC,YAyBAY,QAAOC,eAAerB,EAAS,cAAgBmC,Wan8ClCnC,EAAUoH,YAIX2M,WAA2C,0CACxCZ,cAA8C,6CAC5CC,gBAAgD,+CAC3DP,KAAuB,sBAClBE,UACT,kCAEW/S,EAAOsH,SACN0P,aAAyB,wBAC1BH,YAAwB,uBACfxB,qBAAiC,gCAC/BD,uBAAmC,kCACjD0B,SAAqB,oBACtBC,QACP,oBAEW/W,EAAOwR,SACK+D,wBAAK,IACVS,mBAAK,IACHW,qBAAK,GAClBF,QAAI,GACCR,aACZ,Mbs8CIkB,GACA,SAAUlX,EAAQD,EAASQ,GAEjC,YAyBAY,QAAOC,eAAerB,EAAS,cAAgBmC,Wc5/ClCnC,EAAUoH,YACfgQ,OACN,mBAEWpX,EAAOsH,SACJ+P,eACd,oBdggDIC,GACA,SAAUrX,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,QAGnFoH,EAAWlP,MAAQA,KAAKkP,UAAY,WAUpC,MATAA,GAAWpO,OAAOqO,QAAU,SAAUC,GAClC,IAAK,GAAIzN,GAAGtB,EAAI,EAAGc,EAAI6B,UAAUC,OAAQ5C,EAAIc,EAAGd,IAAK,CACjDsB,EAAIqB,UAAU3C,EACd,KAAK,GAAIqB,KAAKC,GACNb,OAAOU,UAAUC,eAAelB,KAAKoB,EAAGD,KAAI0N,EAAE1N,GAAKC,EAAED,IAGjE,MAAO0N,IAEJF,EAASxL,MAAM1D,KAAMgD,WAEhClC,QAAOC,eAAerB,EAAS,cAAgBmC,UejkD/C,IAAAsB,GAAAjD,EAAwD,GAGxD0G,EAAA1G,EAAgD,IAEhD+W,EAAA,SAAA5O,GA+BE,QAAA4O,GAA4ClV,GAA5C,GAAAoH,GACEd,EAAA9H,KAAAP,KAAAkP,KAA0B+H,EAAexH,eAAc1N,KAcxD/B,IfoiDK,Oe3jDEmJ,GAAc+N,eAAK,EACnB/N,EAAagO,cAAK,EAClBhO,EAASiO,aACTjO,EAAsBkO,0BAQxBlO,EAAcmO,cAAG,SAAI5S,GACfyE,EAAuBkO,wBAC1B3S,EAAkB6S,iBAEnBpO,EAASnH,SACfwV,kBAEIrO,EAAgBsO,gBAAG,SAAI/S,GACF,UAAhBA,EAAI0P,KAAkC,KAAf1P,EAAQmQ,SAChC1L,EAASnH,SAAkBwV,kBAGrCrO,EA6CF,MA3FsC3B,GAAAyP,EAA4B5O,GAChEvH,OAAAC,eAAWkW,EAAU,cfolDf/V,IeplDN,WACE,MAAO0F,GACTE,YfqlDM7F,cACAD,kBeplDNF,OAAAC,eAAWkW,EAAO,WfulDZ/V,IevlDN,WACE,MAAO0F,GACTI,SfwlDM/F,cACAD,kBevlDNF,OAAAC,eAAWkW,EAAc,kBf0lDnB/V,Ie1lDN,WAEE,OACUkI,SAAE,aACCI,YAAE,aACawI,2BAAE,aACAP,6BAAE,aAChBiG,eAAE,WAAM,MAAC,IACVC,cAAE,WAAM,MAAC,IACRH,eAAE,ef4mDdvW,cACAD,kBe/kDNiW,EAAAzV,UAAIS,KAAJ,WACMjC,KAASgC,SAA2BgQ,2BAAQ,QAAMhS,KAAgBsX,eAClEtX,KAASgC,SAA2BgQ,2BAAU,UAAMhS,KAC1DyX,kBAEAR,EAAAzV,UAAOU,QAAP,WACMlC,KAASgC,SAA6ByP,6BAAQ,QAAMzR,KAAgBsX,eACpEtX,KAASgC,SAA6ByP,6BAAU,UAAMzR,KAC5DyX,kBAEAR,EAAAzV,UAAgBoW,iBAAhB,WACE,MAAW5X,MACbkX,gBAEAD,EAAAzV,UAAeqW,gBAAf,WACE,MAAW7X,MACbmX,eAEAF,EAAAzV,UAAQsW,SAAR,WACE,MAAW9X,MACboX,WAEAH,EAAAzV,UAASuW,UAAT,SAA2BD,GACrB9X,KAAUoX,UAAYU,EAClB9X,KAAUoX,UACZpX,KAASgC,SAASoH,SAACxC,EAAUE,WAASgQ,QAEtC9W,KAASgC,SAAYwH,YAAC5C,EAAUE,WAASgQ,SAIjDG,EAAAzV,UAAsBwW,uBAAtB,WACE,MAAWhY,MACbqX,wBAEAJ,EAAAzV,UAAwByW,yBAAxB,SAAuDC,GACjDlY,KAAuBqX,uBAC7Ba,GAEAjB,EAAAzV,UAAW2W,YAAX,WACMnY,KAAekX,eAAOlX,KAASgC,SAAkB0V,iBACjD1X,KAAcmX,cAAOnX,KAASgC,SACpC2V,iBACDV,GA3FqC9T,EA2FrCrB,cA3FYpC,GAAAuX,iBAAgBA,EA8F7BvX,EAAA2B,QAAgC4V,Gf8kD1BmB,EACA,SAAUzY,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,QAGnFuQ,EAAerY,MAAQA,KAAKqY,cAAgB,SAAUC,GACtD,GAAIA,GAAOA,EAAIlX,WAAY,MAAOkX,EAClC,IAAIC,KACJ,IAAW,MAAPD,EAAa,IAAK,GAAIE,KAAKF,GACvBxX,OAAOW,eAAelB,KAAK+X,EAAKE,KAAID,EAAOC,GAAKF,EAAIE,GAE5D,OADCD,GAAgBlX,QAAIiX,EACdC,EAEXzX,QAAOC,eAAerB,EAAS,cAAgBmC,UgBxuD/C,IAAAqG,GAAAhI,EAAsD,GACtDuY,EAAAvY,EAA+C,GAE/CiD,EAAAjD,EAAiD,GAEjDwY,EAAAL,EAAAnY,EAA+B,IAI/ByY,EAAA,SAAAtQ,GAAA,QAAAsQ,KAAA,GAAAxP,GAAA,OAAAd,KAAA3E,MAAA1D,KAAAgD,YAiFChD,IhBwpDO,OgBnsDNmJ,GAAQyP,YA2CVzP,EAAA,MAjF+B3B,GAAAmR,EAAiCtQ,GACvDsQ,EAAQ7U,SAAf,SAA6BtE,EAAsDqZ,YAApDA,OAAwC/G,oBACrE,IAAYgH,GAAG,GAAaH,GAAOnZ,EAKnC,iBAHQqZ,EAAY/G,cACZgH,EAAUtF,UAAOqF,EAAa/G,aAGxCgH,GAEOH,EAAaI,cAApB,SAAsDC,GACpD,OACU5P,SAAE,SAAUC,GAAK,MAAQ2P,GAAMxV,MAAU8F,UAAIC,IAAWF,IAC1C8H,uBAAE,WAAM,MAAIuH,GAAqBvL,qBAAQxC,SAC5CyG,oBAAE,WAAM,MAAQ4H,GAAMxV,MAAwByV,yBAC9C1H,oBAAE,SAAO5H,GAAK,MAAQqP,GAAMxV,MAASoG,SAAgBD,IACpC6H,qCAAE,SAAQtN,EAASC,GACnD,MAAQW,UAAgBoU,gBAAoB5U,oBAAQJ,EAASC,EAAMuU,EAAgB/K,iBAC3D8D,6BAAE,SAAQvN,EAASC,GAC3C,MAAQ6U,GAAMxV,MAAoBc,oBAAQJ,EAASC,EAAMuU,EAAgB/K,iBACtD+D,wBAAE,SAAQvN,GAAK,MAAMwG,QAAoBrG,oBAAS,SAAUH,IAChEwN,oBAAE,WAAM,OAAGxD,EAAQxD,OAAYwO,YAAG/K,EAAQzD,OAAcyO,cAC5DxH,gBAAE,WAAM,MAAA6G,GAAOpM,QAAS2M,EAAMxV,MAAY,YACxCqO,kBAAE,WAAM,MAAOxM,SAAS2T,EAAUJ,WACxC9G,YAAE,WAAM,MAAOzM,SAAS2T,EAAWxF,YACZzB,mCAAE,SAAQ7N,EAASC,GACjD,MAAQW,UAAgBoU,gBAAiB9U,iBAAQF,EAASC,EAAMuU,EAAgB/K,iBAC1DqE,2BAAE,SAAQ9N,EAASC,GACzC,MAAQ6U,GAAMxV,MAAiBY,iBAAQF,EAASC,EAAMuU,EAAgB/K,iBACrDsE,sBAAE,SAAQ9N,GAAK,MAAMwG,QAAiBvG,iBAAS,SAAUD,IACnEqF,YAAE,SAAUH,GAAK,MAAQ2P,GAAMxV,MAAU8F,UAAOG,OAAWJ,IACrD6I,kBAAE,SAAQmH,EAAOxX,GAAK,MAASmX,GAAsBxV,MAAMsC,MAAY8F,YAAQyN,EAAQxX,MAW5Gf,OAAAC,eAAI4X,EAAAnX,UAAS,ahBiwDPN,IgBjwDN,WACE,MAAcmE,SAAKrF,KACrBsZ,ahBkwDMC,IgBhwDN,SAAgC/F,GAC1BxT,KAAWsZ,WAAUjU,QAAYmO,GACjCxT,KACNwZ,iBhBiwDMvY,cACAD,kBgBhwDN2X,EAAAnX,UAAQ4R,SAAR,WACMpT,KAAY2D,YAClByP,YAEAuF,EAAAnX,UAAU6R,WAAV,WACMrT,KAAY2D,YAClB0P,cAEAsF,EAAAnX,UAAMwK,OAAN,WACMhM,KAAY2D,YAClBqI,UAEA2M,EAAAnX,UAAoBoC,qBAApB,WACE,MAAO,IAAIT,GAAmBqM,oBAAUmJ,EAAcI,cACxD/Y,QAEA2Y,EAAAnX,UAAkBqC,mBAAlB,WACE,GAAUrE,GAAOQ,KAAsBwD,KACnCxD,MAAUwT,UAAyB,wBAAQhU,GACjDia,SAQQd,EAAAnX,UAAagY,cAArB,WACMxZ,KAAY2D,YAAa4P,aAAQlO,QAAKrF,KAC5CsZ,cACDX,GAjF8BzQ,EAiF9B9E,aAjFY1D,GAAAiZ,UAASA,GhBo1DhBe,GACA,SAAU/Z,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,OAGvFhH,QAAOC,eAAerB,EAAS,cAAgBmC,UiB54D/C,IAAAqG,GAAAhI,EAAsD,GACtDiI,EAAAjI,EAAqD,GAErD0G,EAAA1G,EAAuC,IACvCiD,EAAAjD,EAA8C,IAc9CyZ,EAAA,SAAAtR,GAAA,QAAAsR,KAAA,GAAAxQ,GAAA,OAAAd,KAAA3E,MAAA1D,KAAAgD,YA+DChD,IjBq0DO,OiBr2DEmJ,GAAOyQ,QAAGzR,EAASwQ,UAAS7U,SAAKqF,EAAQ3F,OAgCnD2F,EAAA,MA/D4B3B,GAAAmS,EAA8BtR,GACjDsR,EAAQ7V,SAAf,SAA6BtE,GAC3B,MAAO,IAAUma,GACnBna,IAEAsB,OAAAC,eAAI4Y,EAAAnY,UAAa,iBjBq4DXN,IiBr4DN,WACE,MAAWlB,MAAY2D,YACzBiU,oBjBs4DM3W,cACAD,kBiBr4DNF,OAAAC,eAAI4Y,EAAAnY,UAAY,gBjBw4DVN,IiBx4DN,WACE,MAAWlB,MAAY2D,YACzBkU,mBjBy4DM5W,cACAD,kBiBx4DNF,OAAAC,eAAI4Y,EAAAnY,UAAQ,YjB24DNN,IiB34DN,WACE,MAAWlB,MAAY2D,YACzBmU,YjB44DMyB,IiB14DN,SAAqBzB,GACf9X,KAAY2D,YAAUoU,UAC5BD,IjB24DM7W,cACAD,kBiB14DNF,OAAAC,eAAI4Y,EAAAnY,UAAqB,yBjB64DnBN,IiB74DN,WACE,MAAWlB,MAAY2D,YACzBqU,0BjB84DMuB,IiB54DN,SAA+CrB,GACzClY,KAAY2D,YAAyBsU,yBAC3CC,IjB64DMjX,cACAD,kBiBx4DN2Y,EAAAnY,UAAOU,QAAP,WACMlC,KAAQ4Z,QAAW1X,UACvBmG,EAAA7G,UAAaU,QAAA3B,KACfP,OAEA2Z,EAAAnY,UAAoBoC,qBAApB,cAAAuF,GAgBCnJ,KAZc+B,GACHqH,SAAE,SAAUC,GAAK,MAAIF,GAAM3F,MAAU8F,UAAIC,IAAWF,IACjDG,YAAE,SAAUH,GAAK,MAAIF,GAAM3F,MAAU8F,UAAOG,OAAWJ,IACxC2I,2BAAE,SAAKrD,EAASxK,GAAK,MAAIgF,GAAOlF,OAAK0K,EAAUxK,IAC7CsN,6BAAE,SAAK9C,EAASxK,GAAK,MAAIgF,GAAS9E,SAAKsK,EAAUxK,IAC/DuT,eAAE,WAAM,MAAIvO,GAAM3F,MAAY6H,aAC/BsM,cAAE,WAAM,MAAIxO,GAAM3F,MAAWsI,YAC5B0L,eAAE,WACZ,MAAIrO,GAAK5E,KAA4BpB,EAAgB8T,iBAAQjQ,QAAe+P,gBAAM8C,IAAO1Q,QAG/F,OAAO,IAAIhG,GAAgB8T,iBAC7BlV,IAEA4X,EAAAnY,UAAkBqC,mBAAlB,WACM7D,KAAS8X,SAAO9X,KAAMwD,MAAU8F,UAASM,SAAChD,EAAUE,WAC1DgQ,SAEA6C,EAAAnY,UAAW2W,YAAX,WACMnY,KAAY2D,YAClBwU,eACDwB,GA/D2BzR,EA+D3B9E,aA/DY1D,GAAAia,OAAMA,GjB09DbG,GACA,SAAUna,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,OAGvFhH,QAAOC,eAAerB,EAAS,cAAgBmC,UkB3hE/C,IAAAqG,GAAAhI,EAAsD,GACtDiI,EAAAjI,EAA4E,IAC5EiD,EAAAjD,EAAmD,IAEnD6Z,EAAA7Z,EAAiD,IAG1C8G,EAAA+S,EAAAC,oBAA+BhT,QAItCwB,EAAA,SAAAH,GAAA,QAAAG,KlByhEQ,MAAkB,QAAXH,GAAmBA,EAAO3E,MAAM1D,KAAMgD,YkBz7DrDhD,KAAA,MAhG+BwH,GAAAgB,EAAiCH,GACvDG,EAAQ1E,SAAf,SAA6BtE,GAC3B,MAAO,IAAagJ,GACtBhJ,IAEAsB,OAAAC,eAAIyH,EAAAhH,UAAI,QlB0hEFN,IkB1hEN,WACE,MAAWlB,MACbia,OlB2hEMhZ,cACAD,kBkB1hENF,OAAAC,eAAIyH,EAAAhH,UAAS,alB6hEPN,IkB7hEN,WACE,GAAiBgZ,GAAOla,KAAY2D,YAAqBwW,mBACzD,OAAWna,MAAKF,KAClBoa,IlB8hEMX,IkB5hEN,SAAiBM,GACX7Z,KAAcoa,cAAIP,OlB8hElB5Y,cACAD,kBkB5hENF,OAAAC,eAAIyH,EAAAhH,UAAc,kBlB+hEZN,IkB/hEN,WACE,MAAWlB,MAAY2D,YACzBwW,qBlBgiEMZ,IkB9hEN,SAAwBvO,GAClBhL,KAAmBqa,mBAAMrP,OlBgiEzB/J,cACAD,kBkBxhENwH,EAAAhH,UAAUiC,WAAV,SAA6D6W,GAA7D,GAAAnR,GAOCnJ,cAPUsa,MAAA,SAA+B5U,GAAK,UAAIyC,GAAMwR,OAAIjU,KACvD1F,KAAWua,WAAOva,KAAMwD,MAAckF,cAAqB1B,EAAsBwT,oBACjFxa,KAAMia,MAAOja,KAAYya,YAAaH,GACtCta,KAAoB0a,oBAAG,SAAS/U,GlBiiE5B,GkBjiEqBd,GAAAc,EAAMd,OAC1BgV,EAAAhV,EAAcgV,GACjB1Q,GAAciR,cAAIP,QAI1BrR,EAAAhH,UAAoBoC,qBAApB,cAAAuF,GAgCCnJ,KA5Bc+B,GACHqH,SAAE,SAAUC,GAAK,MAAIF,GAAM3F,MAAU8F,UAAIC,IAAWF,IACjDG,YAAE,SAAUH,GAAK,MAAIF,GAAM3F,MAAU8F,UAAOG,OAAWJ,IACzCsR,0BAAE,WACvB,MAAIxR,GAAOlF,OAACd,EAAgB8T,iBAAQjQ,QAAe+P,eAAM5N,EAAqBuR,sBACvDE,4BAAE,WACzB,MAAIzR,GAAS9E,SAAClB,EAAgB8T,iBAAQjQ,QAAe+P,eAAM5N,EAAqBuR,sBAC/DzI,sBAAE,SAAQ9N,GAAK,MAAMwG,QAAiBvG,iBAAS,SAAUD,IACvDuN,wBAAE,SAAQvN,GAAK,MAAMwG,QAAoBrG,oBAAS,SAAUH,IACrEuT,eAAE,WAAM,MAAIvO,GAAM3F,MAAY6H,aACxBwP,qBAAE,SAAaC,EAAOjZ,GAAK,MAAIsH,GAAWoR,WAAMzU,MAAY8F,YAAakP,EAAQjZ,IAC3EkZ,2BAAE,WAAM,MAAI5R,GAAWoR,WAAYlP,aACjD2P,aAAE,SAAQxW,GAAK,MAAI2E,GAAK5E,KAAoCyC,EAAaiU,aAAUzW,IAChFqG,gBAAE,WAAM,MAAI1B,GAAKrJ,KAAOmD,QACrBiY,mBAAE,SAAMlQ,GAAK,MAAI7B,GAAKrJ,KAAOkL,GAAS8M,UACrCqD,oBAAE,SAAMnQ,EAAU8M,GAC/B3O,EAAKrJ,KAAOkL,GAAS8M,SAC3BA,GACsCsD,uCAAE,SAAMpQ,GAAK,MAAI7B,GAAKrJ,KAAOkL,GAAsBkN,uBACpDmD,sCAAE,SAAMrQ,EAAuBkN,GAC9D/O,EAAKrJ,KAAOkL,GAAsBkN,sBACxCA,GACiBoD,kBAAE,SAAMtQ,GAAK,MAAI7B,GAAKrJ,KAAOkL,GAAcmN,eAC/BpN,8BAAE,SAAMC,GAAK,MAAI7B,GAAKrJ,KAAOkL,GAAcC,eAC5CC,6BAAE,SAAMF,GAAK,MAAI7B,GAAKrJ,KAAOkL,GAAaG,cAGxE,OAAO,IAAI4O,GAAmBC,oBAChCjY,IAEAyG,EAAAhH,UAAMwK,OAAN,WACMhM,KAAY2D,YAClBqI,UAEQxD,EAAAhH,UAAWiZ,YAAnB,SAA6CH,GAG3C,SADYiB,MAAKhb,KAAKP,KAAMwD,MAAiBgY,iBAAQxU,EAAgByU,eAC/CC,IAAC,SAAYhW,GAAK,MAAU4U,GAAI5U,MAGhD8C,EAAAhH,UAAkB6Y,mBAA1B,SAAiDsB,EAAuBX,GAClEhb,KAAY2D,YAAmBiY,mBAAeD,EACpDX,IAEQxS,EAAAhH,UAAa4Y,cAArB,SAAuCyB,EAAuBb,GAC5D,GAAgBc,GAAO9b,KAAKF,KAAQuU,QAAYwH,EAChD,IAAcC,EAAI,EAChB,KAAM,IAAS9X,OAA8F,2FAE3GhE,MAAmBqa,mBAAWyB,EACpCd,IACDxS,GAhG8BN,EAgG9B9E,aAhGY1D,GAAA8I,UAASA,GlBkqEhBuT,GACA,SAAUpc,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,QAGnFoH,EAAWlP,MAAQA,KAAKkP,UAAY,WAUpC,MATAA,GAAWpO,OAAOqO,QAAU,SAAUC,GAClC,IAAK,GAAIzN,GAAGtB,EAAI,EAAGc,EAAI6B,UAAUC,OAAQ5C,EAAIc,EAAGd,IAAK,CACjDsB,EAAIqB,UAAU3C,EACd,KAAK,GAAIqB,KAAKC,GACNb,OAAOU,UAAUC,eAAelB,KAAKoB,EAAGD,KAAI0N,EAAE1N,GAAKC,EAAED,IAGjE,MAAO0N,IAEJF,EAASxL,MAAM1D,KAAMgD,WAEhClC,QAAOC,eAAerB,EAAS,cAAgBmC,UmBxuE/C,IAAAoG,GAAA/H,EAAgE,IAChEiD,EAAAjD,EAAwD,GAGxD0G,EAAA1G,EAAgD,IAEhD8Z,EAAA,SAAA3R,GAwCE,QAAA2R,GAA+CjY,GAA/C,GAAAoH,GACEd,EAAA9H,KAAAP,KAAAkP,KAA6B8K,EAAevK,eAAc1N,KAC3D/B,InBmsEK,OmB3sEEmJ,GAAiB6S,qBACjB7S,EAAe8S,gBAAK,EACpB9S,EAAY+G,aAAK,EAMzB/G,EA2GF,MArJyC3B,GAAAwS,EAA+B3R,GACtEvH,OAAAC,eAAWiZ,EAAU,cnB+uEf9Y,ImB/uEN,WACE,MAAO0F,GACTE,YnBgvEM7F,cACAD,kBmB/uENF,OAAAC,eAAWiZ,EAAO,WnBkvEZ9Y,ImBlvEN,WACE,MAAO0F,GACTI,SnBmvEM/F,cACAD,kBmBlvENF,OAAAC,eAAWiZ,EAAc,kBnBqvEnB9Y,ImBrvEN,WAEE,OACUkI,SAAE,aACCI,YAAE,aACYmR,0BAAE,aACAC,4BAAE,aACR3I,sBAAE,aACAP,wBAAE,aACXgG,eAAE,WAAM,MAAC,IACHmD,qBAAE,aACIE,2BAAE,WAAM,MAAC,IACvBC,aAAE,aACCnQ,gBAAE,WAAM,MAAC,IACNqQ,mBAAE,WAAM,UACPC,oBAAE,aACiBC,uCAAE,WAAM,UACTC,sCAAE,aACtBC,kBAAE,aACUvQ,8BAAE,WAAM,MAAC,IACVG,6BAAE,WAAM,MAAC,MnB6xEnCjK,cACAD,kBmB/wENgZ,EAAAxY,UAAIS,KAAJ,cAAAkH,GAUCnJ,IATKA,MAAeiR,eAAG,WAAM,MAAI9H,GAAS6C,UACrChM,KAASgC,SAASoH,SAACxC,EAAUE,WAAWoV,UACxClc,KAASgC,SAA6B2Y,4BACtC3a,KAASgC,SAAsBiQ,sBAAKjS,KAAiBiR,eACzD,IAAoB0K,GAAO3b,KAAuBmc,qBAChCR,IAAK,IACjB3b,KAAgBic,gBAAkBN,GAEpC3b,KACNgM,UAEAgO,EAAAxY,UAAOU,QAAP,WACMlC,KAASgC,SAAYwH,YAAC5C,EAAUE,WAAWoV,UAC3Clc,KAASgC,SAA+B4Y,8BACxC5a,KAASgC,SAAwB0P,wBAAK1R,KAC5CiR,iBAEA+I,EAAAxY,UAAMwK,OAAN,cAAA7C,GASCnJ,IARSA,MAAakQ,cACCoD,qBAAKtT,KAAekQ,cAGtClQ,KAAakQ,aAAAwC,sBAAyB,WACpCvJ,EAAmBwJ,kBACnBxJ,EAAa+G,aACnB,KAGF8J,EAAAxY,UAAkBoa,mBAAlB,SAAgC5Q,EAAuBoR,GAAvD,GAAAjT,GAqBCnJ,IApBC,IAASgL,IAAShL,KAAgBic,gBAAlC,CAIA,GAASjR,EAAI,GAASA,GAAQhL,KAASgC,SAAkB6I,kBACvD,KAAM,IAAS7G,OAAC,0CAAmDgH,EAGrE,IAAwBqR,GAAOrc,KAAiBic,eAC5Cjc,MAAgBic,gBAASjR,EACR0H,sBAAC,WACE2J,GAAK,GACrBlT,EAASnH,SAAoBmZ,oBAAmBkB,MAElDlT,EAASnH,SAAoBmZ,oBAAKhS,EAAgB8S,oBAClD9S,EAAoBmT,mBACRF,GACVjT,EAASnH,SAAagZ,cAAgBW,eAAMxS,EAAmB8S,sBAKzEjC,EAAAxY,UAAiB2Y,kBAAjB,WACE,MAAWna,MACbmc,uBAEQnC,EAAAxY,UAAemR,gBAAvB,cAAAxJ,GAGCnJ,IAFKA,MAAiBuc,iBAAC,SAAMvR,GAAK,MAAI7B,GAASnH,SAAkBsZ,kBAAOtQ,KACnEhL,KACNsc,oBAEQtC,EAAAxY,UAAgB8a,iBAAxB,WACE,GAA4BE,IAAQxc,KAAmBgc,iBAG7BQ,IACpBxc,KAASgC,SAAqB6Y,qBAAa,aAAU,OAG3D,IAAkC4B,GAAOzc,KAASgC,SAA6BkJ,6BAAKlL,KAAkBic,iBACvES,EACvB1c,KAASgC,SAA8B+I,8BAAK/K,KAAiBic,iBAAOjc,KAASgC,SAAkB0V,iBAEnFiF,EAAG,cAA0CF,EAAA,aAAsCC,EAAO,MAC1G1c,MAASgC,SAAqB6Y,qBAAC5S,EAAsB1C,uBAAOoF,OAAc,aAAkBgS,GAEtEH,IAEpBxc,KAASgC,SAA8B+Y,6BACvC/a,KAASgC,SAAqB6Y,qBAAa,aAAM,IACjD7a,KAASgC,SAAqB6Y,qBAAa,aAAa,WACxD7a,KAAkBgc,uBAIlBhC,EAAAxY,UAAmB2a,oBAA3B,cAAAhT,GASCnJ,KARmB2b,GAAM,CAOxB,OANI3b,MAAiBuc,iBAAC,SAAMvR,GAC1B,GAAQ7B,EAASnH,SAAmBkZ,mBAAOlQ,GAEzC,MADc2Q,GAAS3Q,OAK7B2Q,GAEQ3B,EAAAxY,UAAgB+a,iBAAxB,SAAoEja,GAElE,IAAK,GADQsa,GAAO5c,KAASgC,SAAmB6I,kBAClCG,EAAI,EAAOA,EAAU4R,IACLta,EAAQ0I,GADMA,OAO/CgP,GArJwC7W,EAqJxCrB,cArJYpC,GAAAsa,oBAAmBA,EAwJhCta,EAAA2B,QAAmC2Y,GnB+wE7B6C,GACA,SAAUld,EAAQD,EAASQ,GAEjC,YAyBAY,QAAOC,eAAerB,EAAS,cAAgBmC,WoBz8ElCnC,EAAUoH,YACboV,SACR,wBAEWxc,EAAOsH,SACNiU,aAAoB,mBACdT,mBAA2B,0BACjCiB,aACZ,apB68EIqB,GACA,SAAUnd,EAAQD,EAASQ,GAEjC,YAyBA,IAAIsH,GAAYxH,MAAQA,KAAKwH,WAAa,WACtC,GAAIC,GAAiB,SAAuB/G,EAAGgH,GAQ3C,OAPAD,EAAiB3G,OAAO6G,iBAAoBC,uBAA2BC,QAAS,SAAUnH,EAAGgH,GACzFhH,EAAEkH,UAAYF,IACb,SAAUhH,EAAGgH,GACd,IAAK,GAAIhG,KAAKgG,GACNA,EAAEjG,eAAeC,KAAIhB,EAAEgB,GAAKgG,EAAEhG,MAGpBhB,EAAGgH,GAE7B,OAAO,UAAUhH,EAAGgH,GAEhB,QAASI,KACL9H,KAAK+H,YAAcrH,EAFvB+G,EAAe/G,EAAGgH,GAIlBhH,EAAEc,UAAkB,OAANkG,EAAa5G,OAAOkH,OAAON,IAAMI,EAAGtG,UAAYkG,EAAElG,UAAW,GAAIsG,QAGnFoH,EAAWlP,MAAQA,KAAKkP,UAAY,WAUpC,MATAA,GAAWpO,OAAOqO,QAAU,SAAUC,GAClC,IAAK,GAAIzN,GAAGtB,EAAI,EAAGc,EAAI6B,UAAUC,OAAQ5C,EAAIc,EAAGd,IAAK,CACjDsB,EAAIqB,UAAU3C,EACd,KAAK,GAAIqB,KAAKC,GACNb,OAAOU,UAAUC,eAAelB,KAAKoB,EAAGD,KAAI0N,EAAE1N,GAAKC,EAAED,IAGjE,MAAO0N,IAEJF,EAASxL,MAAM1D,KAAMgD,WAEhClC,QAAOC,eAAerB,EAAS,cAAgBmC,UqBhhF/C,IAAAsB,GAAAjD,EAAwD,GAGxD0G,EAAA1G,EAAgD,IAIxB6c,GAAwC,aAAa,YAAW,SAExFpU,EAAA,SAAAN,GAqDE,QAAAM,GAAuD5G,GAAvD,GAAAoH,GACEd,EAAA9H,KAAAP,KAAAkP,KAAqCvG,EAAe8G,eAAc1N,KAcnE/B,IrBk+EK,OqB5/EEmJ,GAAsB6T,0BACtB7T,EAAuB8T,wBAAK,EAC5B9T,EAAc+T,eAA4B,KAC1C/T,EAAY+G,aAAK,EACjB/G,EAAsBgU,uBAAK,EAU7BhU,EAA8BiU,8BAAG,SAAI1Y,GAAK,MAAIyE,GAAckU,cAAK3Y,IACjEyE,EAA2BmU,2BAAG,SAAI5Y,GAAK,MAAIyE,GAAWoU,WAAK7Y,IAC3DyE,EAAe8H,eAAG,WAAM,MAAI9H,GAAS6C,UACrC7C,EAAoBqU,oBAAG,SAAI9Y,GACA,eAAtBA,EAAKiK,MAA6C,cAArBjK,EAAKiK,OACnCxF,EAAuB6T,2BAEzB7T,EAAgCsU,gCAAM/Y,GAClB,UAAjBA,EAAKiK,OACNxF,EAAuB6T,4BAGjC7T,EAmLF,MAvPiD3B,GAAAmB,EAAuCN,GACtFvH,OAAAC,eAAW4H,EAAU,crBwiFfzH,IqBxiFN,WACE,MAAO0F,GACTE,YrByiFM7F,cACAD,kBqBxiFNF,OAAAC,eAAW4H,EAAO,WrB2iFZzH,IqB3iFN,WACE,MAAO0F,GACTI,SrB4iFM/F,cACAD,kBqB3iFNF,OAAAC,eAAW4H,EAAc,kBrB8iFnBzH,IqB9iFN,WAEE,OACUkI,SAAE,aACCI,YAAE,aACME,oBAAE,WAAM,UACDG,2BAAE,aACGC,gCAAE,aACVC,wBAAE,aACGC,6BAAE,aACzBC,MAAE,WAAM,UACoBG,kCAAE,aACAC,oCAAE,aACDC,qCAAE,aACAC,uCAAE,aACNC,mCAAE,aACAC,qCAAE,aACXC,4BAAE,aACAE,8BAAE,aAChBC,gBAAE,WAAM,MAAC,IACKE,8BAAE,WAAM,MAAC,IACVG,6BAAE,WAAM,MAAC,IACTE,6BAAE,WAAM,MAAC,IACVE,4BAAE,WAAM,MAAC,IACTE,4BAAE,aACNE,wBAAE,WAAM,MAAC,IACNC,2BAAE,aACDE,4BAAE,WAAM,MAAC,IACRE,6BAAE,WAAM,MAAC,MrBsmFnC9K,cACAD,kBqBtkFN2H,EAAAnH,UAAIS,KAAJ,cAAAkH,GAQCnJ,IAPKA,MAASgC,SAAkCoI,kCAAKpK,KAA6Bsd,4BAC7Etd,KAASgC,SAAqCsI,qCAAKtK,KAAgCod,+BACnFpd,KAASgC,SAA4B0I,4BAAK1K,KAAiBiR,gBAC7C8L,EAAQ/I,QAAC,SAAQ9P,GAC7BiF,EAASnH,SAAmCwI,mCAAQtG,EAAMiF,EAChEqU,uBACIxd,KACNgM,UAEArD,EAAAnH,UAAOU,QAAP,cAAAiH,GAOCnJ,IANKA,MAASgC,SAAoCqI,oCAAKrK,KAA6Bsd,4BAC/Etd,KAASgC,SAAuCuI,uCAAKvK,KAAgCod,+BACrFpd,KAASgC,SAA8B4I,8BAAK5K,KAAiBiR,gBAC/C8L,EAAQ/I,QAAC,SAAQ9P,GAC7BiF,EAASnH,SAAqCyI,qCAAQvG,EAAMiF,EAClEqU,wBAGF7U,EAAAnH,UAAU+b,WAAV,SAA2B7Y,GAClBA,GACFA,EAAkB6S,gBAMvB,KAAK,GAHkBmG,GAAK,EACPC,EAAK,EAEhBtd,EAAOL,KAASgC,SAAkB6I,kBAAI,EAAGxK,EAAI,EAAKA,IAAE,CAC5D,GAAmBud,GAAO5d,KAASgC,SAA6BkJ,6BAAI7K,GAClCwd,EAAO7d,KAASgC,SAA0B0J,0BAAiBkS,EAEzEE,EAAgBF,EAAO5d,KAAyBid,uBAKpE,IAJQjd,KAAS+d,WACCD,EAA+BD,EAAO7d,KAAyBid,0BAG7Da,IAIDJ,GAAQ1d,KAASgC,SAA8B+I,8BAAI1K,IAEbL,KAASgC,SAAgCoJ,+BACtE,CACTuS,EAAO3d,KAAW+d,SAAE1d,EAAM,EAAGA,CACxC,QAINL,KAAmBge,mBACzBL,IAEAhV,EAAAnH,UAAa6b,cAAb,SAA8B3Y,GACrBA,GACFA,EAAkB6S,gBAMvB,KAAK,GAHuB0G,GAAOje,KAASgC,SAA+BoJ,+BAAOpL,KAAyBid,wBACtFU,EAAK,EAEhBtd,EAAI,EAAGA,EAAOL,KAASgC,SAAkB6I,kBAAKxK,IAAE,CACxD,GAA2B6d,GACnBle,KAASgC,SAA6BkJ,6BAAG7K,GAAOL,KAASgC,SAA8B+I,8BAAI1K,GACzE8d,EAAwBD,EAA0BD,CAE5E,IAAQje,KAAS+d,SAAE,CACjB,GAA4BK,GACFH,EAAOje,KAASgC,SAA8B+I,8BAAI1K,EAItD8d,GAFdne,KAASgC,SAA0B0J,0BAAyBwS,EAEHE,EAGnE,GAA0BD,EAAE,CACTR,EAAKtd,CAChB,QAINL,KAAmBge,mBACzBL,IAEAhV,EAAAnH,UAAMwK,OAAN,cAAA7C,GAICnJ,IAHqBsT,sBAAKtT,KAAekQ,cACpClQ,KAAuBmd,uBAAOnd,KAASgC,SAA+BsJ,8BACtEtL,KAAakQ,aAAAwC,sBAAyB,WAAM,MAAIvJ,GAAUkV,aAGhE1V,EAAAnH,UAAkBwc,mBAAlB,SAAgChT,GAAhC,GAAA7B,GAQCnJ,KAP6Bse,EAAOte,KAASgC,SAA6BkJ,6BAAQF,GACpDuT,EAAOve,KAASgC,SAA8B+I,8BAAQC,EAE/EhL,MAAwBid,wBACpBjd,KAAiBwe,iBAAuBF,EAA2BC,GAEtD7L,sBAAC,WAAM,MAAIvJ,GAAcsV,iBAGxC9V,EAAAnH,UAAO6c,QAAf,WACE,GAAgBK,GAAO1e,KAASgC,SAAgCoJ,8BACtCpL,MAASgC,SAA0B0J,0BAAcgT,IAGrE1e,KAAwBid,wBAAK,GAG/Bjd,KAAeye,cACfze,KACN2e,iCAEQhW,EAAAnH,UAAWid,YAAnB,WACE,GAAiBG,GAAO5e,KAAW+d,SAC3B/d,KAA0Bid,yBAAMjd,KAAyBid,uBAE7Djd,MAASgC,SAA2B2J,2BAAC,cAAyBiT,EAAO,OACrE5e,KACN2e,iCAEQhW,EAAAnH,UAA+Bic,gCAAvC,SAAiF/Y,GAC/E,GAAYiF,GAAMjF,EAAuBiF,MAEzC,IAAS3J,KAASgC,SAAoB0H,oBAAOC,EAAE/C,EAAUE,WAAK+X,OAAQ7e,KAAuBgd,uBAA7F,CAIA,GAAc8B,GAAO9e,KAAW+d,SAAK/d,KAAyBmd,uBAAG,CAC7Dnd,MAASgC,SAA4BwJ,4BAAWsT,GAEhD9e,KAAekd,eAAUvT,CAE7B,IAAsBoV,GAAO/e,KAASgC,SAAgCoJ,+BACrD4T,EAAOhf,KAASgC,SAA2B0J,0BAC9CuT,EAAOjf,KAASgC,SAA4B6J,4BAAK7L,KAAiBkd,gBACjEgC,EAAWD,EAAOjf,KAASgC,SAA6B+J,6BAAK/L,KAAiBkd,gBAEzEiC,EAAYD,GAAQlf,KAAyBid,wBAC1CmC,EAAYF,EAAOlf,KAAwBid,wBAAoB8B,CAEtF,IAAQ/e,KAAS+d,SAAE,CACjB,GAA0BsB,GAAcL,EAAYC,CACpCE,GAAWF,GAAeD,EAAOhf,KAAyBid,wBACvDmC,EAAuBC,EAAmBN,EAAO/e,KAAyBid,wBAGxEmC,EACjBpf,KAAiBqd,gBACI8B,GACrBnf,KAAcud,aAGhBvd,KAAuBgd,4BAGrBrU,EAAAnH,UAA6Bmd,8BAArC,WACS,GAAAW,GAAA1Y,EAAAE,WAAgCwY,iBACD,KAA9Btf,KAAwBid,wBAC1Bjd,KAASgC,SAA6BgI,6BAAoBsV,GAE1Dtf,KAASgC,SAAwB+H,wBAAoBuV,GAG1Btf,KAASgC,SAA0B0J,0BAAO1L,KAAyBid,wBACrEjd,KAASgC,SAA+BoJ,+BACjEpL,KAASgC,SAA2B6H,2BAAoByV,GAExDtf,KAASgC,SAAgC8H,gCAAoBwV,IAI7D3W,EAAAnH,UAAgBgd,iBAAxB,SAAqChQ,EAAeuB,GAClD,MAAW/P,MAAW+d,SAAK/d,KAASgC,SAA6B0J,2BAAK8C,EAAWuB,GACnFvB,GAEQ7F,EAAAnH,UAAMuc,OAAd,WACE,MAAW/d,MAASgC,SACtBiI,SACDtB,GAvPgDxF,EAuPhDrB,cAvPYpC,GAAAiJ,4BAA2BA,EA0PxCjJ,EAAA2B,QAA2CsH,GrB0iFrC4W,GACA,SAAU5f,EAAQD,EAASQ,GAEjC,YAyBAY,QAAOC,eAAerB,EAAS,cAAgBmC,WsBz0FlCnC,EAAUoH,YACP0Y,eAAyC,wCACtCF,kBAA4C,2CAC5CG,kBAA4C,2CAC1DZ,IACH,WAEWnf,EAAOsH,SACJ4B,eAAuC,sCAC9BM,wBAA0C,yCACvCF,2BAA6C,4CAC1DF,cAA6C,4CAC9C2S,aACZ","file":"mdc.tabs.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tabs\"] = factory();\n\telse\n\t\troot[\"mdc\"] = root[\"mdc\"] || {}, root[\"mdc\"][\"tabs\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tabs\"] = factory();\n\telse\n\t\troot[\"mdc\"] = root[\"mdc\"] || {}, root[\"mdc\"][\"tabs\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 163);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MDCFoundation = /** @class */function () {\n    function MDCFoundation(adapter) {\n        if (adapter === void 0) {\n            adapter = {};\n        }\n        this.adapter_ = adapter;\n    }\n    Object.defineProperty(MDCFoundation, \"cssClasses\", {\n        get: function get() {\n            // Classes extending MDCFoundation should implement this method to return an object which exports every\n            // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'}\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCFoundation, \"strings\", {\n        get: function get() {\n            // Classes extending MDCFoundation should implement this method to return an object which exports all\n            // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCFoundation, \"numbers\", {\n        get: function get() {\n            // Classes extending MDCFoundation should implement this method to return an object which exports all\n            // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient\n            // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter\n            // validation.\n            return {};\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCFoundation.prototype.init = function () {\n        // Subclasses should override this method to perform initialization routines (registering events, etc.)\n    };\n    MDCFoundation.prototype.destroy = function () {\n        // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\n    };\n    return MDCFoundation;\n}();\nexports.MDCFoundation = MDCFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCFoundation;\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __read = this && this.__read || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o),\n        r,\n        ar = [],\n        e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n            ar.push(r.value);\n        }\n    } catch (error) {\n        e = { error: error };\n    } finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        } finally {\n            if (e) throw e.error;\n        }\n    }\n    return ar;\n};\nvar __spread = this && this.__spread || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) {\n        ar = ar.concat(__read(arguments[i]));\n    }return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar MDCComponent = /** @class */function () {\n    function MDCComponent(root, foundation) {\n        var args = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            args[_i - 2] = arguments[_i];\n        }\n        this.root_ = root;\n        this.initialize.apply(this, __spread(args));\n        // Note that we initialize foundation here and not within the constructor's default param so that\n        // this.root_ is defined and can be used within the foundation class.\n        this.foundation_ = foundation === undefined ? this.getDefaultFoundation() : foundation;\n        this.foundation_.init();\n        this.initialSyncWithDOM();\n    }\n    MDCComponent.attachTo = function (root) {\n        // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and\n        // returns an instantiated component with its root set to that element. Also note that in the cases of\n        // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized\n        // from getDefaultFoundation().\n        return new MDCComponent(root, new foundation_1.MDCFoundation({}));\n    };\n    /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */\n    MDCComponent.prototype.initialize = function () {\n        var _args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            _args[_i] = arguments[_i];\n        }\n        // Subclasses can override this to do any additional setup work that would be considered part of a\n        // \"constructor\". Essentially, it is a hook into the parent constructor before the foundation is\n        // initialized. Any additional arguments besides root and foundation will be passed in here.\n    };\n    MDCComponent.prototype.getDefaultFoundation = function () {\n        // Subclasses must override this method to return a properly configured foundation class for the\n        // component.\n        throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' + 'foundation class');\n    };\n    MDCComponent.prototype.initialSyncWithDOM = function () {\n        // Subclasses should override this method if they need to perform work to synchronize with a host DOM\n        // object. An example of this would be a form control wrapper that needs to synchronize its internal state\n        // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM\n        // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor.\n    };\n    MDCComponent.prototype.destroy = function () {\n        // Subclasses may implement this method to release any resources / deregister any listeners they have\n        // attached. An example of this might be deregistering a resize event from the window object.\n        this.foundation_.destroy();\n    };\n    MDCComponent.prototype.listen = function (evtType, handler) {\n        this.root_.addEventListener(evtType, handler);\n    };\n    MDCComponent.prototype.unlisten = function (evtType, handler) {\n        this.root_.removeEventListener(evtType, handler);\n    };\n    /**\n     * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data.\n     */\n    MDCComponent.prototype.emit = function (evtType, evtData, shouldBubble) {\n        if (shouldBubble === void 0) {\n            shouldBubble = false;\n        }\n        var evt;\n        if (typeof CustomEvent === 'function') {\n            evt = new CustomEvent(evtType, {\n                bubbles: shouldBubble,\n                detail: evtData\n            });\n        } else {\n            evt = document.createEvent('CustomEvent');\n            evt.initCustomEvent(evtType, shouldBubble, false, evtData);\n        }\n        this.root_.dispatchEvent(evt);\n    };\n    return MDCComponent;\n}();\nexports.MDCComponent = MDCComponent;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCComponent;\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar cssPropertyNameMap = {\n    animation: {\n        prefixed: '-webkit-animation',\n        standard: 'animation'\n    },\n    transform: {\n        prefixed: '-webkit-transform',\n        standard: 'transform'\n    },\n    transition: {\n        prefixed: '-webkit-transition',\n        standard: 'transition'\n    }\n};\nvar jsEventTypeMap = {\n    animationend: {\n        cssProperty: 'animation',\n        prefixed: 'webkitAnimationEnd',\n        standard: 'animationend'\n    },\n    animationiteration: {\n        cssProperty: 'animation',\n        prefixed: 'webkitAnimationIteration',\n        standard: 'animationiteration'\n    },\n    animationstart: {\n        cssProperty: 'animation',\n        prefixed: 'webkitAnimationStart',\n        standard: 'animationstart'\n    },\n    transitionend: {\n        cssProperty: 'transition',\n        prefixed: 'webkitTransitionEnd',\n        standard: 'transitionend'\n    }\n};\nfunction isWindow(windowObj) {\n    return Boolean(windowObj.document) && typeof windowObj.document.createElement === 'function';\n}\nfunction getCorrectPropertyName(windowObj, cssProperty) {\n    if (isWindow(windowObj) && cssProperty in cssPropertyNameMap) {\n        var el = windowObj.document.createElement('div');\n        var _a = cssPropertyNameMap[cssProperty],\n            standard = _a.standard,\n            prefixed = _a.prefixed;\n        var isStandard = standard in el.style;\n        return isStandard ? standard : prefixed;\n    }\n    return cssProperty;\n}\nexports.getCorrectPropertyName = getCorrectPropertyName;\nfunction getCorrectEventName(windowObj, eventType) {\n    if (isWindow(windowObj) && eventType in jsEventTypeMap) {\n        var el = windowObj.document.createElement('div');\n        var _a = jsEventTypeMap[eventType],\n            standard = _a.standard,\n            prefixed = _a.prefixed,\n            cssProperty = _a.cssProperty;\n        var isStandard = cssProperty in el.style;\n        return isStandard ? standard : prefixed;\n    }\n    return eventType;\n}\nexports.getCorrectEventName = getCorrectEventName;\n\n/***/ }),\n\n/***/ 163:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(164));\n__export(__webpack_require__(165));\n__export(__webpack_require__(166));\n\n/***/ }),\n\n/***/ 164:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(93));\n__export(__webpack_require__(51));\nvar constants_1 = __webpack_require__(50);\nexports.tabCssClasses = constants_1.cssClasses;\nexports.tabStrings = constants_1.strings;\n\n/***/ }),\n\n/***/ 165:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(94));\n__export(__webpack_require__(95));\nvar constants_1 = __webpack_require__(96);\nexports.tabBarCssClasses = constants_1.cssClasses;\nexports.tabBarStrings = constants_1.strings;\n\n/***/ }),\n\n/***/ 166:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nfunction __export(m) {\n  for (var p in m) {\n    if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n  }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(167));\n__export(__webpack_require__(97));\nvar constants_1 = __webpack_require__(98);\nexports.tabBarScrollerCssClasses = constants_1.cssClasses;\nexports.tabBarScrollerStrings = constants_1.strings;\n\n/***/ }),\n\n/***/ 167:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = __webpack_require__(11);\nvar component_1 = __webpack_require__(1);\nvar component_2 = __webpack_require__(94);\nvar foundation_1 = __webpack_require__(97);\nvar MDCTabBarScroller = /** @class */function (_super) {\n    __extends(MDCTabBarScroller, _super);\n    function MDCTabBarScroller() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MDCTabBarScroller.attachTo = function (root) {\n        return new MDCTabBarScroller(root);\n    };\n    Object.defineProperty(MDCTabBarScroller.prototype, \"tabBar\", {\n        get: function get() {\n            return this.tabBar_;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBarScroller.prototype.initialize = function (tabBarFactory) {\n        if (tabBarFactory === void 0) {\n            tabBarFactory = function tabBarFactory(el) {\n                return new component_2.MDCTabBar(el);\n            };\n        }\n        this.scrollFrame_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.FRAME_SELECTOR);\n        this.tabBarEl_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.TABS_SELECTOR);\n        this.forwardIndicator_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.INDICATOR_FORWARD_SELECTOR);\n        this.backIndicator_ = this.root_.querySelector(foundation_1.MDCTabBarScrollerFoundation.strings.INDICATOR_BACK_SELECTOR);\n        this.tabBar_ = tabBarFactory(this.tabBarEl_);\n    };\n    MDCTabBarScroller.prototype.getDefaultFoundation = function () {\n        var _this = this;\n        // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n        // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n        // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n        var adapter = {\n            addClass: function addClass(className) {\n                return _this.root_.classList.add(className);\n            },\n            removeClass: function removeClass(className) {\n                return _this.root_.classList.remove(className);\n            },\n            eventTargetHasClass: function eventTargetHasClass(target, className) {\n                return target.classList.contains(className);\n            },\n            addClassToForwardIndicator: function addClassToForwardIndicator(className) {\n                return _this.forwardIndicator_.classList.add(className);\n            },\n            removeClassFromForwardIndicator: function removeClassFromForwardIndicator(className) {\n                return _this.forwardIndicator_.classList.remove(className);\n            },\n            addClassToBackIndicator: function addClassToBackIndicator(className) {\n                return _this.backIndicator_.classList.add(className);\n            },\n            removeClassFromBackIndicator: function removeClassFromBackIndicator(className) {\n                return _this.backIndicator_.classList.remove(className);\n            },\n            isRTL: function isRTL() {\n                return getComputedStyle(_this.root_).getPropertyValue('direction') === 'rtl';\n            },\n            registerBackIndicatorClickHandler: function registerBackIndicatorClickHandler(handler) {\n                return _this.backIndicator_.addEventListener('click', handler);\n            },\n            deregisterBackIndicatorClickHandler: function deregisterBackIndicatorClickHandler(handler) {\n                return _this.backIndicator_.removeEventListener('click', handler);\n            },\n            registerForwardIndicatorClickHandler: function registerForwardIndicatorClickHandler(handler) {\n                return _this.forwardIndicator_.addEventListener('click', handler);\n            },\n            deregisterForwardIndicatorClickHandler: function deregisterForwardIndicatorClickHandler(handler) {\n                return _this.forwardIndicator_.removeEventListener('click', handler);\n            },\n            registerCapturedInteractionHandler: function registerCapturedInteractionHandler(evt, handler) {\n                return _this.root_.addEventListener(evt, handler, true);\n            },\n            deregisterCapturedInteractionHandler: function deregisterCapturedInteractionHandler(evt, handler) {\n                return _this.root_.removeEventListener(evt, handler, true);\n            },\n            registerWindowResizeHandler: function registerWindowResizeHandler(handler) {\n                return window.addEventListener('resize', handler);\n            },\n            deregisterWindowResizeHandler: function deregisterWindowResizeHandler(handler) {\n                return window.removeEventListener('resize', handler);\n            },\n            getNumberOfTabs: function getNumberOfTabs() {\n                return _this.tabBar.tabs.length;\n            },\n            getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex(index) {\n                return _this.tabBar.tabs[index].computedWidth;\n            },\n            getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex(index) {\n                return _this.tabBar.tabs[index].computedLeft;\n            },\n            getOffsetWidthForScrollFrame: function getOffsetWidthForScrollFrame() {\n                return _this.scrollFrame_.offsetWidth;\n            },\n            getScrollLeftForScrollFrame: function getScrollLeftForScrollFrame() {\n                return _this.scrollFrame_.scrollLeft;\n            },\n            setScrollLeftForScrollFrame: function setScrollLeftForScrollFrame(scrollLeftAmount) {\n                return _this.scrollFrame_.scrollLeft = scrollLeftAmount;\n            },\n            getOffsetWidthForTabBar: function getOffsetWidthForTabBar() {\n                return _this.tabBarEl_.offsetWidth;\n            },\n            setTransformStyleForTabBar: function setTransformStyleForTabBar(value) {\n                _this.tabBarEl_.style.setProperty(util_1.getCorrectPropertyName(window, 'transform'), value);\n            },\n            getOffsetLeftForEventTarget: function getOffsetLeftForEventTarget(target) {\n                return target.offsetLeft;\n            },\n            getOffsetWidthForEventTarget: function getOffsetWidthForEventTarget(target) {\n                return target.offsetWidth;\n            }\n        };\n        // tslint:enable:object-literal-sort-keys\n        return new foundation_1.MDCTabBarScrollerFoundation(adapter);\n    };\n    MDCTabBarScroller.prototype.layout = function () {\n        this.foundation_.layout();\n    };\n    return MDCTabBarScroller;\n}(component_1.MDCComponent);\nexports.MDCTabBarScroller = MDCTabBarScroller;\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\n * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\n */\nfunction closest(element, selector) {\n    if (element.closest) {\n        return element.closest(selector);\n    }\n    var el = element;\n    while (el) {\n        if (matches(el, selector)) {\n            return el;\n        }\n        el = el.parentElement;\n    }\n    return null;\n}\nexports.closest = closest;\nfunction matches(element, selector) {\n    var nativeMatches = element.matches || element.webkitMatchesSelector || element.msMatchesSelector;\n    return nativeMatches.call(element, selector);\n}\nexports.matches = matches;\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Stores result from supportsCssVariables to avoid redundant processing to\n * detect CSS custom variable support.\n */\nvar supportsCssVariables_;\n/**\n * Stores result from applyPassive to avoid redundant processing to detect\n * passive event listener support.\n */\nvar supportsPassive_;\nfunction detectEdgePseudoVarBug(windowObj) {\n    // Detect versions of Edge with buggy var() support\n    // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11495448/\n    var document = windowObj.document;\n    var node = document.createElement('div');\n    node.className = 'mdc-ripple-surface--test-edge-var-bug';\n    document.body.appendChild(node);\n    // The bug exists if ::before style ends up propagating to the parent element.\n    // Additionally, getComputedStyle returns null in iframes with display: \"none\" in Firefox,\n    // but Firefox is known to support CSS custom properties correctly.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    var computedStyle = windowObj.getComputedStyle(node);\n    var hasPseudoVarBug = computedStyle !== null && computedStyle.borderTopStyle === 'solid';\n    if (node.parentNode) {\n        node.parentNode.removeChild(node);\n    }\n    return hasPseudoVarBug;\n}\nfunction supportsCssVariables(windowObj, forceRefresh) {\n    if (forceRefresh === void 0) {\n        forceRefresh = false;\n    }\n    var CSS = windowObj.CSS;\n    var supportsCssVars = supportsCssVariables_;\n    if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\n        return supportsCssVariables_;\n    }\n    var supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\n    if (!supportsFunctionPresent) {\n        return false;\n    }\n    var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\n    // See: https://bugs.webkit.org/show_bug.cgi?id=154669\n    // See: README section on Safari\n    var weAreFeatureDetectingSafari10plus = CSS.supports('(--css-vars: yes)') && CSS.supports('color', '#00000000');\n    if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) {\n        supportsCssVars = !detectEdgePseudoVarBug(windowObj);\n    } else {\n        supportsCssVars = false;\n    }\n    if (!forceRefresh) {\n        supportsCssVariables_ = supportsCssVars;\n    }\n    return supportsCssVars;\n}\nexports.supportsCssVariables = supportsCssVariables;\n/**\n * Determine whether the current browser supports passive event listeners, and\n * if so, use them.\n */\nfunction applyPassive(globalObj, forceRefresh) {\n    if (globalObj === void 0) {\n        globalObj = window;\n    }\n    if (forceRefresh === void 0) {\n        forceRefresh = false;\n    }\n    if (supportsPassive_ === undefined || forceRefresh) {\n        var isSupported_1 = false;\n        try {\n            globalObj.document.addEventListener('test', function () {\n                return undefined;\n            }, {\n                get passive() {\n                    isSupported_1 = true;\n                    return isSupported_1;\n                }\n            });\n        } catch (e) {} // tslint:disable-line:no-empty cannot throw error due to tests. tslint also disables console.log.\n        supportsPassive_ = isSupported_1;\n    }\n    return supportsPassive_ ? { passive: true } : false;\n}\nexports.applyPassive = applyPassive;\nfunction getNormalizedEventCoords(evt, pageOffset, clientRect) {\n    if (!evt) {\n        return { x: 0, y: 0 };\n    }\n    var x = pageOffset.x,\n        y = pageOffset.y;\n    var documentX = x + clientRect.left;\n    var documentY = y + clientRect.top;\n    var normalizedX;\n    var normalizedY;\n    // Determine touch point relative to the ripple container.\n    if (evt.type === 'touchstart') {\n        var touchEvent = evt;\n        normalizedX = touchEvent.changedTouches[0].pageX - documentX;\n        normalizedY = touchEvent.changedTouches[0].pageY - documentY;\n    } else {\n        var mouseEvent = evt;\n        normalizedX = mouseEvent.pageX - documentX;\n        normalizedY = mouseEvent.pageY - documentY;\n    }\n    return { x: normalizedX, y: normalizedY };\n}\nexports.getNormalizedEventCoords = getNormalizedEventCoords;\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(5);\nvar util_1 = __webpack_require__(3);\n// Activation events registered on the root element of each instance for activation\nvar ACTIVATION_EVENT_TYPES = ['touchstart', 'pointerdown', 'mousedown', 'keydown'];\n// Deactivation events registered on documentElement when a pointer-related down event occurs\nvar POINTER_DEACTIVATION_EVENT_TYPES = ['touchend', 'pointerup', 'mouseup', 'contextmenu'];\n// simultaneous nested activations\nvar activatedTargets = [];\nvar MDCRippleFoundation = /** @class */function (_super) {\n    __extends(MDCRippleFoundation, _super);\n    function MDCRippleFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCRippleFoundation.defaultAdapter, adapter)) || this;\n        _this.activationAnimationHasEnded_ = false;\n        _this.activationTimer_ = 0;\n        _this.fgDeactivationRemovalTimer_ = 0;\n        _this.fgScale_ = '0';\n        _this.frame_ = { width: 0, height: 0 };\n        _this.initialSize_ = 0;\n        _this.layoutFrame_ = 0;\n        _this.maxRadius_ = 0;\n        _this.unboundedCoords_ = { left: 0, top: 0 };\n        _this.activationState_ = _this.defaultActivationState_();\n        _this.activationTimerCallback_ = function () {\n            _this.activationAnimationHasEnded_ = true;\n            _this.runDeactivationUXLogicIfReady_();\n        };\n        _this.activateHandler_ = function (e) {\n            return _this.activate_(e);\n        };\n        _this.deactivateHandler_ = function () {\n            return _this.deactivate_();\n        };\n        _this.focusHandler_ = function () {\n            return _this.handleFocus();\n        };\n        _this.blurHandler_ = function () {\n            return _this.handleBlur();\n        };\n        _this.resizeHandler_ = function () {\n            return _this.layout();\n        };\n        return _this;\n    }\n    Object.defineProperty(MDCRippleFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCRippleFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCRippleFoundation, \"numbers\", {\n        get: function get() {\n            return constants_1.numbers;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCRippleFoundation, \"defaultAdapter\", {\n        get: function get() {\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                browserSupportsCssVars: function browserSupportsCssVars() {\n                    return true;\n                },\n                computeBoundingRect: function computeBoundingRect() {\n                    return { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\n                },\n                containsEventTarget: function containsEventTarget() {\n                    return true;\n                },\n                deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler() {\n                    return undefined;\n                },\n                deregisterInteractionHandler: function deregisterInteractionHandler() {\n                    return undefined;\n                },\n                deregisterResizeHandler: function deregisterResizeHandler() {\n                    return undefined;\n                },\n                getWindowPageOffset: function getWindowPageOffset() {\n                    return { x: 0, y: 0 };\n                },\n                isSurfaceActive: function isSurfaceActive() {\n                    return true;\n                },\n                isSurfaceDisabled: function isSurfaceDisabled() {\n                    return true;\n                },\n                isUnbounded: function isUnbounded() {\n                    return true;\n                },\n                registerDocumentInteractionHandler: function registerDocumentInteractionHandler() {\n                    return undefined;\n                },\n                registerInteractionHandler: function registerInteractionHandler() {\n                    return undefined;\n                },\n                registerResizeHandler: function registerResizeHandler() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                updateCssVariable: function updateCssVariable() {\n                    return undefined;\n                }\n            };\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCRippleFoundation.prototype.init = function () {\n        var _this = this;\n        var supportsPressRipple = this.supportsPressRipple_();\n        this.registerRootHandlers_(supportsPressRipple);\n        if (supportsPressRipple) {\n            var _a = MDCRippleFoundation.cssClasses,\n                ROOT_1 = _a.ROOT,\n                UNBOUNDED_1 = _a.UNBOUNDED;\n            requestAnimationFrame(function () {\n                _this.adapter_.addClass(ROOT_1);\n                if (_this.adapter_.isUnbounded()) {\n                    _this.adapter_.addClass(UNBOUNDED_1);\n                    // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple\n                    _this.layoutInternal_();\n                }\n            });\n        }\n    };\n    MDCRippleFoundation.prototype.destroy = function () {\n        var _this = this;\n        if (this.supportsPressRipple_()) {\n            if (this.activationTimer_) {\n                clearTimeout(this.activationTimer_);\n                this.activationTimer_ = 0;\n                this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION);\n            }\n            if (this.fgDeactivationRemovalTimer_) {\n                clearTimeout(this.fgDeactivationRemovalTimer_);\n                this.fgDeactivationRemovalTimer_ = 0;\n                this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION);\n            }\n            var _a = MDCRippleFoundation.cssClasses,\n                ROOT_2 = _a.ROOT,\n                UNBOUNDED_2 = _a.UNBOUNDED;\n            requestAnimationFrame(function () {\n                _this.adapter_.removeClass(ROOT_2);\n                _this.adapter_.removeClass(UNBOUNDED_2);\n                _this.removeCssVars_();\n            });\n        }\n        this.deregisterRootHandlers_();\n        this.deregisterDeactivationHandlers_();\n    };\n    /**\n     * @param evt Optional event containing position information.\n     */\n    MDCRippleFoundation.prototype.activate = function (evt) {\n        this.activate_(evt);\n    };\n    MDCRippleFoundation.prototype.deactivate = function () {\n        this.deactivate_();\n    };\n    MDCRippleFoundation.prototype.layout = function () {\n        var _this = this;\n        if (this.layoutFrame_) {\n            cancelAnimationFrame(this.layoutFrame_);\n        }\n        this.layoutFrame_ = requestAnimationFrame(function () {\n            _this.layoutInternal_();\n            _this.layoutFrame_ = 0;\n        });\n    };\n    MDCRippleFoundation.prototype.setUnbounded = function (unbounded) {\n        var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED;\n        if (unbounded) {\n            this.adapter_.addClass(UNBOUNDED);\n        } else {\n            this.adapter_.removeClass(UNBOUNDED);\n        }\n    };\n    MDCRippleFoundation.prototype.handleFocus = function () {\n        var _this = this;\n        requestAnimationFrame(function () {\n            return _this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\n        });\n    };\n    MDCRippleFoundation.prototype.handleBlur = function () {\n        var _this = this;\n        requestAnimationFrame(function () {\n            return _this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED);\n        });\n    };\n    /**\n     * We compute this property so that we are not querying information about the client\n     * until the point in time where the foundation requests it. This prevents scenarios where\n     * client-side feature-detection may happen too early, such as when components are rendered on the server\n     * and then initialized at mount time on the client.\n     */\n    MDCRippleFoundation.prototype.supportsPressRipple_ = function () {\n        return this.adapter_.browserSupportsCssVars();\n    };\n    MDCRippleFoundation.prototype.defaultActivationState_ = function () {\n        return {\n            activationEvent: undefined,\n            hasDeactivationUXRun: false,\n            isActivated: false,\n            isProgrammatic: false,\n            wasActivatedByPointer: false,\n            wasElementMadeActive: false\n        };\n    };\n    /**\n     * supportsPressRipple Passed from init to save a redundant function call\n     */\n    MDCRippleFoundation.prototype.registerRootHandlers_ = function (supportsPressRipple) {\n        var _this = this;\n        if (supportsPressRipple) {\n            ACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n                _this.adapter_.registerInteractionHandler(evtType, _this.activateHandler_);\n            });\n            if (this.adapter_.isUnbounded()) {\n                this.adapter_.registerResizeHandler(this.resizeHandler_);\n            }\n        }\n        this.adapter_.registerInteractionHandler('focus', this.focusHandler_);\n        this.adapter_.registerInteractionHandler('blur', this.blurHandler_);\n    };\n    MDCRippleFoundation.prototype.registerDeactivationHandlers_ = function (evt) {\n        var _this = this;\n        if (evt.type === 'keydown') {\n            this.adapter_.registerInteractionHandler('keyup', this.deactivateHandler_);\n        } else {\n            POINTER_DEACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n                _this.adapter_.registerDocumentInteractionHandler(evtType, _this.deactivateHandler_);\n            });\n        }\n    };\n    MDCRippleFoundation.prototype.deregisterRootHandlers_ = function () {\n        var _this = this;\n        ACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n            _this.adapter_.deregisterInteractionHandler(evtType, _this.activateHandler_);\n        });\n        this.adapter_.deregisterInteractionHandler('focus', this.focusHandler_);\n        this.adapter_.deregisterInteractionHandler('blur', this.blurHandler_);\n        if (this.adapter_.isUnbounded()) {\n            this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n        }\n    };\n    MDCRippleFoundation.prototype.deregisterDeactivationHandlers_ = function () {\n        var _this = this;\n        this.adapter_.deregisterInteractionHandler('keyup', this.deactivateHandler_);\n        POINTER_DEACTIVATION_EVENT_TYPES.forEach(function (evtType) {\n            _this.adapter_.deregisterDocumentInteractionHandler(evtType, _this.deactivateHandler_);\n        });\n    };\n    MDCRippleFoundation.prototype.removeCssVars_ = function () {\n        var _this = this;\n        var rippleStrings = MDCRippleFoundation.strings;\n        var keys = Object.keys(rippleStrings);\n        keys.forEach(function (key) {\n            if (key.indexOf('VAR_') === 0) {\n                _this.adapter_.updateCssVariable(rippleStrings[key], null);\n            }\n        });\n    };\n    MDCRippleFoundation.prototype.activate_ = function (evt) {\n        var _this = this;\n        if (this.adapter_.isSurfaceDisabled()) {\n            return;\n        }\n        var activationState = this.activationState_;\n        if (activationState.isActivated) {\n            return;\n        }\n        // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction\n        var previousActivationEvent = this.previousActivationEvent_;\n        var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type;\n        if (isSameInteraction) {\n            return;\n        }\n        activationState.isActivated = true;\n        activationState.isProgrammatic = evt === undefined;\n        activationState.activationEvent = evt;\n        activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown');\n        var hasActivatedChild = evt !== undefined && activatedTargets.length > 0 && activatedTargets.some(function (target) {\n            return _this.adapter_.containsEventTarget(target);\n        });\n        if (hasActivatedChild) {\n            // Immediately reset activation state, while preserving logic that prevents touch follow-on events\n            this.resetActivationState_();\n            return;\n        }\n        if (evt !== undefined) {\n            activatedTargets.push(evt.target);\n            this.registerDeactivationHandlers_(evt);\n        }\n        activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\n        if (activationState.wasElementMadeActive) {\n            this.animateActivation_();\n        }\n        requestAnimationFrame(function () {\n            // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples\n            activatedTargets = [];\n            if (!activationState.wasElementMadeActive && evt !== undefined && (evt.key === ' ' || evt.keyCode === 32)) {\n                // If space was pressed, try again within an rAF call to detect :active, because different UAs report\n                // active states inconsistently when they're called within event handling code:\n                // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971\n                // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741\n                // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS\n                // variable is set within a rAF callback for a submit button interaction (#2241).\n                activationState.wasElementMadeActive = _this.checkElementMadeActive_(evt);\n                if (activationState.wasElementMadeActive) {\n                    _this.animateActivation_();\n                }\n            }\n            if (!activationState.wasElementMadeActive) {\n                // Reset activation state immediately if element was not made active.\n                _this.activationState_ = _this.defaultActivationState_();\n            }\n        });\n    };\n    MDCRippleFoundation.prototype.checkElementMadeActive_ = function (evt) {\n        return evt !== undefined && evt.type === 'keydown' ? this.adapter_.isSurfaceActive() : true;\n    };\n    MDCRippleFoundation.prototype.animateActivation_ = function () {\n        var _this = this;\n        var _a = MDCRippleFoundation.strings,\n            VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START,\n            VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END;\n        var _b = MDCRippleFoundation.cssClasses,\n            FG_DEACTIVATION = _b.FG_DEACTIVATION,\n            FG_ACTIVATION = _b.FG_ACTIVATION;\n        var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS;\n        this.layoutInternal_();\n        var translateStart = '';\n        var translateEnd = '';\n        if (!this.adapter_.isUnbounded()) {\n            var _c = this.getFgTranslationCoordinates_(),\n                startPoint = _c.startPoint,\n                endPoint = _c.endPoint;\n            translateStart = startPoint.x + \"px, \" + startPoint.y + \"px\";\n            translateEnd = endPoint.x + \"px, \" + endPoint.y + \"px\";\n        }\n        this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart);\n        this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd);\n        // Cancel any ongoing activation/deactivation animations\n        clearTimeout(this.activationTimer_);\n        clearTimeout(this.fgDeactivationRemovalTimer_);\n        this.rmBoundedActivationClasses_();\n        this.adapter_.removeClass(FG_DEACTIVATION);\n        // Force layout in order to re-trigger the animation.\n        this.adapter_.computeBoundingRect();\n        this.adapter_.addClass(FG_ACTIVATION);\n        this.activationTimer_ = setTimeout(function () {\n            return _this.activationTimerCallback_();\n        }, DEACTIVATION_TIMEOUT_MS);\n    };\n    MDCRippleFoundation.prototype.getFgTranslationCoordinates_ = function () {\n        var _a = this.activationState_,\n            activationEvent = _a.activationEvent,\n            wasActivatedByPointer = _a.wasActivatedByPointer;\n        var startPoint;\n        if (wasActivatedByPointer) {\n            startPoint = util_1.getNormalizedEventCoords(activationEvent, this.adapter_.getWindowPageOffset(), this.adapter_.computeBoundingRect());\n        } else {\n            startPoint = {\n                x: this.frame_.width / 2,\n                y: this.frame_.height / 2\n            };\n        }\n        // Center the element around the start point.\n        startPoint = {\n            x: startPoint.x - this.initialSize_ / 2,\n            y: startPoint.y - this.initialSize_ / 2\n        };\n        var endPoint = {\n            x: this.frame_.width / 2 - this.initialSize_ / 2,\n            y: this.frame_.height / 2 - this.initialSize_ / 2\n        };\n        return { startPoint: startPoint, endPoint: endPoint };\n    };\n    MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady_ = function () {\n        var _this = this;\n        // This method is called both when a pointing device is released, and when the activation animation ends.\n        // The deactivation animation should only run after both of those occur.\n        var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION;\n        var _a = this.activationState_,\n            hasDeactivationUXRun = _a.hasDeactivationUXRun,\n            isActivated = _a.isActivated;\n        var activationHasEnded = hasDeactivationUXRun || !isActivated;\n        if (activationHasEnded && this.activationAnimationHasEnded_) {\n            this.rmBoundedActivationClasses_();\n            this.adapter_.addClass(FG_DEACTIVATION);\n            this.fgDeactivationRemovalTimer_ = setTimeout(function () {\n                _this.adapter_.removeClass(FG_DEACTIVATION);\n            }, constants_1.numbers.FG_DEACTIVATION_MS);\n        }\n    };\n    MDCRippleFoundation.prototype.rmBoundedActivationClasses_ = function () {\n        var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION;\n        this.adapter_.removeClass(FG_ACTIVATION);\n        this.activationAnimationHasEnded_ = false;\n        this.adapter_.computeBoundingRect();\n    };\n    MDCRippleFoundation.prototype.resetActivationState_ = function () {\n        var _this = this;\n        this.previousActivationEvent_ = this.activationState_.activationEvent;\n        this.activationState_ = this.defaultActivationState_();\n        // Touch devices may fire additional events for the same interaction within a short time.\n        // Store the previous event until it's safe to assume that subsequent events are for new interactions.\n        setTimeout(function () {\n            return _this.previousActivationEvent_ = undefined;\n        }, MDCRippleFoundation.numbers.TAP_DELAY_MS);\n    };\n    MDCRippleFoundation.prototype.deactivate_ = function () {\n        var _this = this;\n        var activationState = this.activationState_;\n        // This can happen in scenarios such as when you have a keyup event that blurs the element.\n        if (!activationState.isActivated) {\n            return;\n        }\n        var state = __assign({}, activationState);\n        if (activationState.isProgrammatic) {\n            requestAnimationFrame(function () {\n                return _this.animateDeactivation_(state);\n            });\n            this.resetActivationState_();\n        } else {\n            this.deregisterDeactivationHandlers_();\n            requestAnimationFrame(function () {\n                _this.activationState_.hasDeactivationUXRun = true;\n                _this.animateDeactivation_(state);\n                _this.resetActivationState_();\n            });\n        }\n    };\n    MDCRippleFoundation.prototype.animateDeactivation_ = function (_a) {\n        var wasActivatedByPointer = _a.wasActivatedByPointer,\n            wasElementMadeActive = _a.wasElementMadeActive;\n        if (wasActivatedByPointer || wasElementMadeActive) {\n            this.runDeactivationUXLogicIfReady_();\n        }\n    };\n    MDCRippleFoundation.prototype.layoutInternal_ = function () {\n        var _this = this;\n        this.frame_ = this.adapter_.computeBoundingRect();\n        var maxDim = Math.max(this.frame_.height, this.frame_.width);\n        // Surface diameter is treated differently for unbounded vs. bounded ripples.\n        // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately\n        // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically\n        // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter\n        // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via\n        // `overflow: hidden`.\n        var getBoundedRadius = function getBoundedRadius() {\n            var hypotenuse = Math.sqrt(Math.pow(_this.frame_.width, 2) + Math.pow(_this.frame_.height, 2));\n            return hypotenuse + MDCRippleFoundation.numbers.PADDING;\n        };\n        this.maxRadius_ = this.adapter_.isUnbounded() ? maxDim : getBoundedRadius();\n        // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform\n        this.initialSize_ = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE);\n        this.fgScale_ = \"\" + this.maxRadius_ / this.initialSize_;\n        this.updateLayoutCssVars_();\n    };\n    MDCRippleFoundation.prototype.updateLayoutCssVars_ = function () {\n        var _a = MDCRippleFoundation.strings,\n            VAR_FG_SIZE = _a.VAR_FG_SIZE,\n            VAR_LEFT = _a.VAR_LEFT,\n            VAR_TOP = _a.VAR_TOP,\n            VAR_FG_SCALE = _a.VAR_FG_SCALE;\n        this.adapter_.updateCssVariable(VAR_FG_SIZE, this.initialSize_ + \"px\");\n        this.adapter_.updateCssVariable(VAR_FG_SCALE, this.fgScale_);\n        if (this.adapter_.isUnbounded()) {\n            this.unboundedCoords_ = {\n                left: Math.round(this.frame_.width / 2 - this.initialSize_ / 2),\n                top: Math.round(this.frame_.height / 2 - this.initialSize_ / 2)\n            };\n            this.adapter_.updateCssVariable(VAR_LEFT, this.unboundedCoords_.left + \"px\");\n            this.adapter_.updateCssVariable(VAR_TOP, this.unboundedCoords_.top + \"px\");\n        }\n    };\n    return MDCRippleFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCRippleFoundation = MDCRippleFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCRippleFoundation;\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\n    // given that it's an 'upgrade' to an existing component. That being said it is the root\n    // CSS class that all other CSS classes derive from.\n    BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\n    FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\n    FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\n    ROOT: 'mdc-ripple-upgraded',\n    UNBOUNDED: 'mdc-ripple-upgraded--unbounded'\n};\nexports.strings = {\n    VAR_FG_SCALE: '--mdc-ripple-fg-scale',\n    VAR_FG_SIZE: '--mdc-ripple-fg-size',\n    VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\n    VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\n    VAR_LEFT: '--mdc-ripple-left',\n    VAR_TOP: '--mdc-ripple-top'\n};\nexports.numbers = {\n    DEACTIVATION_TIMEOUT_MS: 225,\n    FG_DEACTIVATION_MS: 150,\n    INITIAL_ORIGIN_SCALE: 0.6,\n    PADDING: 10,\n    TAP_DELAY_MS: 300\n};\n\n/***/ }),\n\n/***/ 50:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    ACTIVE: 'mdc-tab--active'\n};\nexports.strings = {\n    SELECTED_EVENT: 'MDCTab:selected'\n};\n\n/***/ }),\n\n/***/ 51:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(50);\nvar MDCTabFoundation = /** @class */function (_super) {\n    __extends(MDCTabFoundation, _super);\n    function MDCTabFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCTabFoundation.defaultAdapter, adapter)) || this;\n        _this.computedWidth_ = 0;\n        _this.computedLeft_ = 0;\n        _this.isActive_ = false;\n        _this.preventDefaultOnClick_ = false;\n        _this.clickHandler_ = function (evt) {\n            if (_this.preventDefaultOnClick_) {\n                evt.preventDefault();\n            }\n            _this.adapter_.notifySelected();\n        };\n        _this.keydownHandler_ = function (evt) {\n            if (evt.key === 'Enter' || evt.keyCode === 13) {\n                _this.adapter_.notifySelected();\n            }\n        };\n        return _this;\n    }\n    Object.defineProperty(MDCTabFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                registerInteractionHandler: function registerInteractionHandler() {\n                    return undefined;\n                },\n                deregisterInteractionHandler: function deregisterInteractionHandler() {\n                    return undefined;\n                },\n                getOffsetWidth: function getOffsetWidth() {\n                    return 0;\n                },\n                getOffsetLeft: function getOffsetLeft() {\n                    return 0;\n                },\n                notifySelected: function notifySelected() {\n                    return undefined;\n                }\n            };\n            // tslint:enable:object-literal-sort-keys\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabFoundation.prototype.init = function () {\n        this.adapter_.registerInteractionHandler('click', this.clickHandler_);\n        this.adapter_.registerInteractionHandler('keydown', this.keydownHandler_);\n    };\n    MDCTabFoundation.prototype.destroy = function () {\n        this.adapter_.deregisterInteractionHandler('click', this.clickHandler_);\n        this.adapter_.deregisterInteractionHandler('keydown', this.keydownHandler_);\n    };\n    MDCTabFoundation.prototype.getComputedWidth = function () {\n        return this.computedWidth_;\n    };\n    MDCTabFoundation.prototype.getComputedLeft = function () {\n        return this.computedLeft_;\n    };\n    MDCTabFoundation.prototype.isActive = function () {\n        return this.isActive_;\n    };\n    MDCTabFoundation.prototype.setActive = function (isActive) {\n        this.isActive_ = isActive;\n        if (this.isActive_) {\n            this.adapter_.addClass(constants_1.cssClasses.ACTIVE);\n        } else {\n            this.adapter_.removeClass(constants_1.cssClasses.ACTIVE);\n        }\n    };\n    MDCTabFoundation.prototype.preventsDefaultOnClick = function () {\n        return this.preventDefaultOnClick_;\n    };\n    MDCTabFoundation.prototype.setPreventDefaultOnClick = function (preventDefaultOnClick) {\n        this.preventDefaultOnClick_ = preventDefaultOnClick;\n    };\n    MDCTabFoundation.prototype.measureSelf = function () {\n        this.computedWidth_ = this.adapter_.getOffsetWidth();\n        this.computedLeft_ = this.adapter_.getOffsetLeft();\n    };\n    return MDCTabFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCTabFoundation = MDCTabFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCTabFoundation;\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __importStar = this && this.__importStar || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) {\n        if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    }result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = __webpack_require__(1);\nvar ponyfill_1 = __webpack_require__(2);\nvar foundation_1 = __webpack_require__(4);\nvar util = __importStar(__webpack_require__(3));\nvar MDCRipple = /** @class */function (_super) {\n    __extends(MDCRipple, _super);\n    function MDCRipple() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.disabled = false;\n        return _this;\n    }\n    MDCRipple.attachTo = function (root, opts) {\n        if (opts === void 0) {\n            opts = { isUnbounded: undefined };\n        }\n        var ripple = new MDCRipple(root);\n        // Only override unbounded behavior if option is explicitly specified\n        if (opts.isUnbounded !== undefined) {\n            ripple.unbounded = opts.isUnbounded;\n        }\n        return ripple;\n    };\n    MDCRipple.createAdapter = function (instance) {\n        return {\n            addClass: function addClass(className) {\n                return instance.root_.classList.add(className);\n            },\n            browserSupportsCssVars: function browserSupportsCssVars() {\n                return util.supportsCssVariables(window);\n            },\n            computeBoundingRect: function computeBoundingRect() {\n                return instance.root_.getBoundingClientRect();\n            },\n            containsEventTarget: function containsEventTarget(target) {\n                return instance.root_.contains(target);\n            },\n            deregisterDocumentInteractionHandler: function deregisterDocumentInteractionHandler(evtType, handler) {\n                return document.documentElement.removeEventListener(evtType, handler, util.applyPassive());\n            },\n            deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {\n                return instance.root_.removeEventListener(evtType, handler, util.applyPassive());\n            },\n            deregisterResizeHandler: function deregisterResizeHandler(handler) {\n                return window.removeEventListener('resize', handler);\n            },\n            getWindowPageOffset: function getWindowPageOffset() {\n                return { x: window.pageXOffset, y: window.pageYOffset };\n            },\n            isSurfaceActive: function isSurfaceActive() {\n                return ponyfill_1.matches(instance.root_, ':active');\n            },\n            isSurfaceDisabled: function isSurfaceDisabled() {\n                return Boolean(instance.disabled);\n            },\n            isUnbounded: function isUnbounded() {\n                return Boolean(instance.unbounded);\n            },\n            registerDocumentInteractionHandler: function registerDocumentInteractionHandler(evtType, handler) {\n                return document.documentElement.addEventListener(evtType, handler, util.applyPassive());\n            },\n            registerInteractionHandler: function registerInteractionHandler(evtType, handler) {\n                return instance.root_.addEventListener(evtType, handler, util.applyPassive());\n            },\n            registerResizeHandler: function registerResizeHandler(handler) {\n                return window.addEventListener('resize', handler);\n            },\n            removeClass: function removeClass(className) {\n                return instance.root_.classList.remove(className);\n            },\n            updateCssVariable: function updateCssVariable(varName, value) {\n                return instance.root_.style.setProperty(varName, value);\n            }\n        };\n    };\n    Object.defineProperty(MDCRipple.prototype, \"unbounded\", {\n        get: function get() {\n            return Boolean(this.unbounded_);\n        },\n        set: function set(unbounded) {\n            this.unbounded_ = Boolean(unbounded);\n            this.setUnbounded_();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCRipple.prototype.activate = function () {\n        this.foundation_.activate();\n    };\n    MDCRipple.prototype.deactivate = function () {\n        this.foundation_.deactivate();\n    };\n    MDCRipple.prototype.layout = function () {\n        this.foundation_.layout();\n    };\n    MDCRipple.prototype.getDefaultFoundation = function () {\n        return new foundation_1.MDCRippleFoundation(MDCRipple.createAdapter(this));\n    };\n    MDCRipple.prototype.initialSyncWithDOM = function () {\n        var root = this.root_;\n        this.unbounded = 'mdcRippleIsUnbounded' in root.dataset;\n    };\n    /**\n     * Closure Compiler throws an access control error when directly accessing a\n     * protected or private property inside a getter/setter, like unbounded above.\n     * By accessing the protected property inside a method, we solve that problem.\n     * That's why this function exists.\n     */\n    MDCRipple.prototype.setUnbounded_ = function () {\n        this.foundation_.setUnbounded(Boolean(this.unbounded_));\n    };\n    return MDCRipple;\n}(component_1.MDCComponent);\nexports.MDCRipple = MDCRipple;\n\n/***/ }),\n\n/***/ 93:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = __webpack_require__(1);\nvar component_2 = __webpack_require__(6);\nvar constants_1 = __webpack_require__(50);\nvar foundation_1 = __webpack_require__(51);\nvar MDCTab = /** @class */function (_super) {\n    __extends(MDCTab, _super);\n    function MDCTab() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.ripple_ = component_2.MDCRipple.attachTo(_this.root_);\n        return _this;\n    }\n    MDCTab.attachTo = function (root) {\n        return new MDCTab(root);\n    };\n    Object.defineProperty(MDCTab.prototype, \"computedWidth\", {\n        get: function get() {\n            return this.foundation_.getComputedWidth();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTab.prototype, \"computedLeft\", {\n        get: function get() {\n            return this.foundation_.getComputedLeft();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTab.prototype, \"isActive\", {\n        get: function get() {\n            return this.foundation_.isActive();\n        },\n        set: function set(isActive) {\n            this.foundation_.setActive(isActive);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTab.prototype, \"preventDefaultOnClick\", {\n        get: function get() {\n            return this.foundation_.preventsDefaultOnClick();\n        },\n        set: function set(preventDefaultOnClick) {\n            this.foundation_.setPreventDefaultOnClick(preventDefaultOnClick);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTab.prototype.destroy = function () {\n        this.ripple_.destroy();\n        _super.prototype.destroy.call(this);\n    };\n    MDCTab.prototype.getDefaultFoundation = function () {\n        var _this = this;\n        // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n        // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n        // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n        var adapter = {\n            addClass: function addClass(className) {\n                return _this.root_.classList.add(className);\n            },\n            removeClass: function removeClass(className) {\n                return _this.root_.classList.remove(className);\n            },\n            registerInteractionHandler: function registerInteractionHandler(type, handler) {\n                return _this.listen(type, handler);\n            },\n            deregisterInteractionHandler: function deregisterInteractionHandler(type, handler) {\n                return _this.unlisten(type, handler);\n            },\n            getOffsetWidth: function getOffsetWidth() {\n                return _this.root_.offsetWidth;\n            },\n            getOffsetLeft: function getOffsetLeft() {\n                return _this.root_.offsetLeft;\n            },\n            notifySelected: function notifySelected() {\n                return _this.emit(foundation_1.MDCTabFoundation.strings.SELECTED_EVENT, { tab: _this }, true);\n            }\n        };\n        // tslint:enable:object-literal-sort-keys\n        return new foundation_1.MDCTabFoundation(adapter);\n    };\n    MDCTab.prototype.initialSyncWithDOM = function () {\n        this.isActive = this.root_.classList.contains(constants_1.cssClasses.ACTIVE);\n    };\n    MDCTab.prototype.measureSelf = function () {\n        this.foundation_.measureSelf();\n    };\n    return MDCTab;\n}(component_1.MDCComponent);\nexports.MDCTab = MDCTab;\n\n/***/ }),\n\n/***/ 94:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = __webpack_require__(1);\nvar component_2 = __webpack_require__(93);\nvar foundation_1 = __webpack_require__(51);\nvar foundation_2 = __webpack_require__(95);\nvar strings = foundation_2.MDCTabBarFoundation.strings;\nvar MDCTabBar = /** @class */function (_super) {\n    __extends(MDCTabBar, _super);\n    function MDCTabBar() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MDCTabBar.attachTo = function (root) {\n        return new MDCTabBar(root);\n    };\n    Object.defineProperty(MDCTabBar.prototype, \"tabs\", {\n        get: function get() {\n            return this.tabs_;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBar.prototype, \"activeTab\", {\n        get: function get() {\n            var activeIndex = this.foundation_.getActiveTabIndex();\n            return this.tabs[activeIndex];\n        },\n        set: function set(tab) {\n            this.setActiveTab_(tab, false);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBar.prototype, \"activeTabIndex\", {\n        get: function get() {\n            return this.foundation_.getActiveTabIndex();\n        },\n        set: function set(index) {\n            this.setActiveTabIndex_(index, false);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBar.prototype.initialize = function (tabFactory) {\n        var _this = this;\n        if (tabFactory === void 0) {\n            tabFactory = function tabFactory(el) {\n                return new component_2.MDCTab(el);\n            };\n        }\n        this.indicator_ = this.root_.querySelector(strings.INDICATOR_SELECTOR);\n        this.tabs_ = this.gatherTabs_(tabFactory);\n        this.tabSelectedHandler_ = function (_a) {\n            var detail = _a.detail;\n            var tab = detail.tab;\n            _this.setActiveTab_(tab, true);\n        };\n    };\n    MDCTabBar.prototype.getDefaultFoundation = function () {\n        var _this = this;\n        // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n        // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n        // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n        var adapter = {\n            addClass: function addClass(className) {\n                return _this.root_.classList.add(className);\n            },\n            removeClass: function removeClass(className) {\n                return _this.root_.classList.remove(className);\n            },\n            bindOnMDCTabSelectedEvent: function bindOnMDCTabSelectedEvent() {\n                return _this.listen(foundation_1.MDCTabFoundation.strings.SELECTED_EVENT, _this.tabSelectedHandler_);\n            },\n            unbindOnMDCTabSelectedEvent: function unbindOnMDCTabSelectedEvent() {\n                return _this.unlisten(foundation_1.MDCTabFoundation.strings.SELECTED_EVENT, _this.tabSelectedHandler_);\n            },\n            registerResizeHandler: function registerResizeHandler(handler) {\n                return window.addEventListener('resize', handler);\n            },\n            deregisterResizeHandler: function deregisterResizeHandler(handler) {\n                return window.removeEventListener('resize', handler);\n            },\n            getOffsetWidth: function getOffsetWidth() {\n                return _this.root_.offsetWidth;\n            },\n            setStyleForIndicator: function setStyleForIndicator(propertyName, value) {\n                return _this.indicator_.style.setProperty(propertyName, value);\n            },\n            getOffsetWidthForIndicator: function getOffsetWidthForIndicator() {\n                return _this.indicator_.offsetWidth;\n            },\n            notifyChange: function notifyChange(evtData) {\n                return _this.emit(strings.CHANGE_EVENT, evtData);\n            },\n            getNumberOfTabs: function getNumberOfTabs() {\n                return _this.tabs.length;\n            },\n            isTabActiveAtIndex: function isTabActiveAtIndex(index) {\n                return _this.tabs[index].isActive;\n            },\n            setTabActiveAtIndex: function setTabActiveAtIndex(index, isActive) {\n                _this.tabs[index].isActive = isActive;\n            },\n            isDefaultPreventedOnClickForTabAtIndex: function isDefaultPreventedOnClickForTabAtIndex(index) {\n                return _this.tabs[index].preventDefaultOnClick;\n            },\n            setPreventDefaultOnClickForTabAtIndex: function setPreventDefaultOnClickForTabAtIndex(index, preventDefaultOnClick) {\n                _this.tabs[index].preventDefaultOnClick = preventDefaultOnClick;\n            },\n            measureTabAtIndex: function measureTabAtIndex(index) {\n                return _this.tabs[index].measureSelf();\n            },\n            getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex(index) {\n                return _this.tabs[index].computedWidth;\n            },\n            getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex(index) {\n                return _this.tabs[index].computedLeft;\n            }\n        };\n        // tslint:enable:object-literal-sort-keys\n        return new foundation_2.MDCTabBarFoundation(adapter);\n    };\n    MDCTabBar.prototype.layout = function () {\n        this.foundation_.layout();\n    };\n    MDCTabBar.prototype.gatherTabs_ = function (tabFactory) {\n        var tabElements = [].slice.call(this.root_.querySelectorAll(strings.TAB_SELECTOR));\n        return tabElements.map(function (el) {\n            return tabFactory(el);\n        });\n    };\n    MDCTabBar.prototype.setActiveTabIndex_ = function (activeTabIndex, notifyChange) {\n        this.foundation_.switchToTabAtIndex(activeTabIndex, notifyChange);\n    };\n    MDCTabBar.prototype.setActiveTab_ = function (activeTab, notifyChange) {\n        var indexOfTab = this.tabs.indexOf(activeTab);\n        if (indexOfTab < 0) {\n            throw new Error('Invalid tab component given as activeTab: Tab not found within this component\\'s tab list');\n        }\n        this.setActiveTabIndex_(indexOfTab, notifyChange);\n    };\n    return MDCTabBar;\n}(component_1.MDCComponent);\nexports.MDCTabBar = MDCTabBar;\n\n/***/ }),\n\n/***/ 95:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = __webpack_require__(11);\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(96);\nvar MDCTabBarFoundation = /** @class */function (_super) {\n    __extends(MDCTabBarFoundation, _super);\n    function MDCTabBarFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCTabBarFoundation.defaultAdapter, adapter)) || this;\n        _this.isIndicatorShown_ = false;\n        _this.activeTabIndex_ = 0;\n        _this.layoutFrame_ = 0;\n        return _this;\n    }\n    Object.defineProperty(MDCTabBarFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                bindOnMDCTabSelectedEvent: function bindOnMDCTabSelectedEvent() {\n                    return undefined;\n                },\n                unbindOnMDCTabSelectedEvent: function unbindOnMDCTabSelectedEvent() {\n                    return undefined;\n                },\n                registerResizeHandler: function registerResizeHandler() {\n                    return undefined;\n                },\n                deregisterResizeHandler: function deregisterResizeHandler() {\n                    return undefined;\n                },\n                getOffsetWidth: function getOffsetWidth() {\n                    return 0;\n                },\n                setStyleForIndicator: function setStyleForIndicator() {\n                    return undefined;\n                },\n                getOffsetWidthForIndicator: function getOffsetWidthForIndicator() {\n                    return 0;\n                },\n                notifyChange: function notifyChange() {\n                    return undefined;\n                },\n                getNumberOfTabs: function getNumberOfTabs() {\n                    return 0;\n                },\n                isTabActiveAtIndex: function isTabActiveAtIndex() {\n                    return false;\n                },\n                setTabActiveAtIndex: function setTabActiveAtIndex() {\n                    return undefined;\n                },\n                isDefaultPreventedOnClickForTabAtIndex: function isDefaultPreventedOnClickForTabAtIndex() {\n                    return false;\n                },\n                setPreventDefaultOnClickForTabAtIndex: function setPreventDefaultOnClickForTabAtIndex() {\n                    return undefined;\n                },\n                measureTabAtIndex: function measureTabAtIndex() {\n                    return undefined;\n                },\n                getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex() {\n                    return 0;\n                },\n                getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex() {\n                    return 0;\n                }\n            };\n            // tslint:enable:object-literal-sort-keys\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBarFoundation.prototype.init = function () {\n        var _this = this;\n        this.resizeHandler_ = function () {\n            return _this.layout();\n        };\n        this.adapter_.addClass(constants_1.cssClasses.UPGRADED);\n        this.adapter_.bindOnMDCTabSelectedEvent();\n        this.adapter_.registerResizeHandler(this.resizeHandler_);\n        var activeTabIndex = this.findActiveTabIndex_();\n        if (activeTabIndex >= 0) {\n            this.activeTabIndex_ = activeTabIndex;\n        }\n        this.layout();\n    };\n    MDCTabBarFoundation.prototype.destroy = function () {\n        this.adapter_.removeClass(constants_1.cssClasses.UPGRADED);\n        this.adapter_.unbindOnMDCTabSelectedEvent();\n        this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n    };\n    MDCTabBarFoundation.prototype.layout = function () {\n        var _this = this;\n        if (this.layoutFrame_) {\n            cancelAnimationFrame(this.layoutFrame_);\n        }\n        this.layoutFrame_ = requestAnimationFrame(function () {\n            _this.layoutInternal_();\n            _this.layoutFrame_ = 0;\n        });\n    };\n    MDCTabBarFoundation.prototype.switchToTabAtIndex = function (index, shouldNotify) {\n        var _this = this;\n        if (index === this.activeTabIndex_) {\n            return;\n        }\n        if (index < 0 || index >= this.adapter_.getNumberOfTabs()) {\n            throw new Error(\"Out of bounds index specified for tab: \" + index);\n        }\n        var prevActiveTabIndex = this.activeTabIndex_;\n        this.activeTabIndex_ = index;\n        requestAnimationFrame(function () {\n            if (prevActiveTabIndex >= 0) {\n                _this.adapter_.setTabActiveAtIndex(prevActiveTabIndex, false);\n            }\n            _this.adapter_.setTabActiveAtIndex(_this.activeTabIndex_, true);\n            _this.layoutIndicator_();\n            if (shouldNotify) {\n                _this.adapter_.notifyChange({ activeTabIndex: _this.activeTabIndex_ });\n            }\n        });\n    };\n    MDCTabBarFoundation.prototype.getActiveTabIndex = function () {\n        return this.findActiveTabIndex_();\n    };\n    MDCTabBarFoundation.prototype.layoutInternal_ = function () {\n        var _this = this;\n        this.forEachTabIndex_(function (index) {\n            return _this.adapter_.measureTabAtIndex(index);\n        });\n        this.layoutIndicator_();\n    };\n    MDCTabBarFoundation.prototype.layoutIndicator_ = function () {\n        var isIndicatorFirstRender = !this.isIndicatorShown_;\n        // Ensure that indicator appears in the right position immediately for correct first render.\n        if (isIndicatorFirstRender) {\n            this.adapter_.setStyleForIndicator('transition', 'none');\n        }\n        var translateAmtForActiveTabLeft = this.adapter_.getComputedLeftForTabAtIndex(this.activeTabIndex_);\n        var scaleAmtForActiveTabWidth = this.adapter_.getComputedWidthForTabAtIndex(this.activeTabIndex_) / this.adapter_.getOffsetWidth();\n        var transformValue = \"translateX(\" + translateAmtForActiveTabLeft + \"px) scale(\" + scaleAmtForActiveTabWidth + \", 1)\";\n        this.adapter_.setStyleForIndicator(util_1.getCorrectPropertyName(window, 'transform'), transformValue);\n        if (isIndicatorFirstRender) {\n            // Force layout so that transform styles to take effect.\n            this.adapter_.getOffsetWidthForIndicator();\n            this.adapter_.setStyleForIndicator('transition', '');\n            this.adapter_.setStyleForIndicator('visibility', 'visible');\n            this.isIndicatorShown_ = true;\n        }\n    };\n    MDCTabBarFoundation.prototype.findActiveTabIndex_ = function () {\n        var _this = this;\n        var activeTabIndex = -1;\n        this.forEachTabIndex_(function (index) {\n            if (_this.adapter_.isTabActiveAtIndex(index)) {\n                activeTabIndex = index;\n                return true;\n            }\n        });\n        return activeTabIndex;\n    };\n    MDCTabBarFoundation.prototype.forEachTabIndex_ = function (iterator) {\n        var numTabs = this.adapter_.getNumberOfTabs();\n        for (var index = 0; index < numTabs; index++) {\n            var shouldBreak = iterator(index);\n            if (shouldBreak) {\n                break;\n            }\n        }\n    };\n    return MDCTabBarFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCTabBarFoundation = MDCTabBarFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCTabBarFoundation;\n\n/***/ }),\n\n/***/ 96:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    UPGRADED: 'mdc-tab-bar-upgraded'\n};\nexports.strings = {\n    CHANGE_EVENT: 'MDCTabBar:change',\n    INDICATOR_SELECTOR: '.mdc-tab-bar__indicator',\n    TAB_SELECTOR: '.mdc-tab'\n};\n\n/***/ }),\n\n/***/ 97:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar __extends = this && this.__extends || function () {\n    var _extendStatics = function extendStatics(d, b) {\n        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {\n            d.__proto__ = b;\n        } || function (d, b) {\n            for (var p in b) {\n                if (b.hasOwnProperty(p)) d[p] = b[p];\n            }\n        };\n        return _extendStatics(d, b);\n    };\n    return function (d, b) {\n        _extendStatics(d, b);\n        function __() {\n            this.constructor = d;\n        }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n}();\nvar __assign = this && this.__assign || function () {\n    __assign = Object.assign || function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) {\n                if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n            }\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar foundation_1 = __webpack_require__(0);\nvar constants_1 = __webpack_require__(98);\nvar INTERACTION_EVENTS = ['touchstart', 'mousedown', 'focus'];\nvar MDCTabBarScrollerFoundation = /** @class */function (_super) {\n    __extends(MDCTabBarScrollerFoundation, _super);\n    function MDCTabBarScrollerFoundation(adapter) {\n        var _this = _super.call(this, __assign({}, MDCTabBarScrollerFoundation.defaultAdapter, adapter)) || this;\n        _this.pointerDownRecognized_ = false;\n        _this.currentTranslateOffset_ = 0;\n        _this.focusedTarget_ = null;\n        _this.layoutFrame_ = 0;\n        _this.scrollFrameScrollLeft_ = 0;\n        _this.forwardIndicatorClickHandler_ = function (evt) {\n            return _this.scrollForward(evt);\n        };\n        _this.backIndicatorClickHandler_ = function (evt) {\n            return _this.scrollBack(evt);\n        };\n        _this.resizeHandler_ = function () {\n            return _this.layout();\n        };\n        _this.interactionHandler_ = function (evt) {\n            if (evt.type === 'touchstart' || evt.type === 'mousedown') {\n                _this.pointerDownRecognized_ = true;\n            }\n            _this.handlePossibleTabKeyboardFocus_(evt);\n            if (evt.type === 'focus') {\n                _this.pointerDownRecognized_ = false;\n            }\n        };\n        return _this;\n    }\n    Object.defineProperty(MDCTabBarScrollerFoundation, \"cssClasses\", {\n        get: function get() {\n            return constants_1.cssClasses;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarScrollerFoundation, \"strings\", {\n        get: function get() {\n            return constants_1.strings;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MDCTabBarScrollerFoundation, \"defaultAdapter\", {\n        get: function get() {\n            // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n            return {\n                addClass: function addClass() {\n                    return undefined;\n                },\n                removeClass: function removeClass() {\n                    return undefined;\n                },\n                eventTargetHasClass: function eventTargetHasClass() {\n                    return false;\n                },\n                addClassToForwardIndicator: function addClassToForwardIndicator() {\n                    return undefined;\n                },\n                removeClassFromForwardIndicator: function removeClassFromForwardIndicator() {\n                    return undefined;\n                },\n                addClassToBackIndicator: function addClassToBackIndicator() {\n                    return undefined;\n                },\n                removeClassFromBackIndicator: function removeClassFromBackIndicator() {\n                    return undefined;\n                },\n                isRTL: function isRTL() {\n                    return false;\n                },\n                registerBackIndicatorClickHandler: function registerBackIndicatorClickHandler() {\n                    return undefined;\n                },\n                deregisterBackIndicatorClickHandler: function deregisterBackIndicatorClickHandler() {\n                    return undefined;\n                },\n                registerForwardIndicatorClickHandler: function registerForwardIndicatorClickHandler() {\n                    return undefined;\n                },\n                deregisterForwardIndicatorClickHandler: function deregisterForwardIndicatorClickHandler() {\n                    return undefined;\n                },\n                registerCapturedInteractionHandler: function registerCapturedInteractionHandler() {\n                    return undefined;\n                },\n                deregisterCapturedInteractionHandler: function deregisterCapturedInteractionHandler() {\n                    return undefined;\n                },\n                registerWindowResizeHandler: function registerWindowResizeHandler() {\n                    return undefined;\n                },\n                deregisterWindowResizeHandler: function deregisterWindowResizeHandler() {\n                    return undefined;\n                },\n                getNumberOfTabs: function getNumberOfTabs() {\n                    return 0;\n                },\n                getComputedWidthForTabAtIndex: function getComputedWidthForTabAtIndex() {\n                    return 0;\n                },\n                getComputedLeftForTabAtIndex: function getComputedLeftForTabAtIndex() {\n                    return 0;\n                },\n                getOffsetWidthForScrollFrame: function getOffsetWidthForScrollFrame() {\n                    return 0;\n                },\n                getScrollLeftForScrollFrame: function getScrollLeftForScrollFrame() {\n                    return 0;\n                },\n                setScrollLeftForScrollFrame: function setScrollLeftForScrollFrame() {\n                    return undefined;\n                },\n                getOffsetWidthForTabBar: function getOffsetWidthForTabBar() {\n                    return 0;\n                },\n                setTransformStyleForTabBar: function setTransformStyleForTabBar() {\n                    return undefined;\n                },\n                getOffsetLeftForEventTarget: function getOffsetLeftForEventTarget() {\n                    return 0;\n                },\n                getOffsetWidthForEventTarget: function getOffsetWidthForEventTarget() {\n                    return 0;\n                }\n            };\n            // tslint:enable:object-literal-sort-keys\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MDCTabBarScrollerFoundation.prototype.init = function () {\n        var _this = this;\n        this.adapter_.registerBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n        this.adapter_.registerForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n        this.adapter_.registerWindowResizeHandler(this.resizeHandler_);\n        INTERACTION_EVENTS.forEach(function (evtType) {\n            _this.adapter_.registerCapturedInteractionHandler(evtType, _this.interactionHandler_);\n        });\n        this.layout();\n    };\n    MDCTabBarScrollerFoundation.prototype.destroy = function () {\n        var _this = this;\n        this.adapter_.deregisterBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n        this.adapter_.deregisterForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n        this.adapter_.deregisterWindowResizeHandler(this.resizeHandler_);\n        INTERACTION_EVENTS.forEach(function (evtType) {\n            _this.adapter_.deregisterCapturedInteractionHandler(evtType, _this.interactionHandler_);\n        });\n    };\n    MDCTabBarScrollerFoundation.prototype.scrollBack = function (evt) {\n        if (evt) {\n            evt.preventDefault();\n        }\n        var tabWidthAccumulator = 0;\n        var scrollTargetIndex = 0;\n        for (var i = this.adapter_.getNumberOfTabs() - 1; i > 0; i--) {\n            var tabOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(i);\n            var tabBarWidthLessTabOffsetLeft = this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeft;\n            var tabIsNotOccluded = tabOffsetLeft > this.currentTranslateOffset_;\n            if (this.isRTL_()) {\n                tabIsNotOccluded = tabBarWidthLessTabOffsetLeft > this.currentTranslateOffset_;\n            }\n            if (tabIsNotOccluded) {\n                continue;\n            }\n            tabWidthAccumulator += this.adapter_.getComputedWidthForTabAtIndex(i);\n            var scrollTargetDetermined = tabWidthAccumulator > this.adapter_.getOffsetWidthForScrollFrame();\n            if (scrollTargetDetermined) {\n                scrollTargetIndex = this.isRTL_() ? i + 1 : i;\n                break;\n            }\n        }\n        this.scrollToTabAtIndex(scrollTargetIndex);\n    };\n    MDCTabBarScrollerFoundation.prototype.scrollForward = function (evt) {\n        if (evt) {\n            evt.preventDefault();\n        }\n        var scrollFrameOffsetWidth = this.adapter_.getOffsetWidthForScrollFrame() + this.currentTranslateOffset_;\n        var scrollTargetIndex = 0;\n        for (var i = 0; i < this.adapter_.getNumberOfTabs(); i++) {\n            var tabOffsetLeftAndWidth = this.adapter_.getComputedLeftForTabAtIndex(i) + this.adapter_.getComputedWidthForTabAtIndex(i);\n            var scrollTargetDetermined = tabOffsetLeftAndWidth > scrollFrameOffsetWidth;\n            if (this.isRTL_()) {\n                var frameOffsetAndTabWidth = scrollFrameOffsetWidth - this.adapter_.getComputedWidthForTabAtIndex(i);\n                var tabRightOffset = this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeftAndWidth;\n                scrollTargetDetermined = tabRightOffset > frameOffsetAndTabWidth;\n            }\n            if (scrollTargetDetermined) {\n                scrollTargetIndex = i;\n                break;\n            }\n        }\n        this.scrollToTabAtIndex(scrollTargetIndex);\n    };\n    MDCTabBarScrollerFoundation.prototype.layout = function () {\n        var _this = this;\n        cancelAnimationFrame(this.layoutFrame_);\n        this.scrollFrameScrollLeft_ = this.adapter_.getScrollLeftForScrollFrame();\n        this.layoutFrame_ = requestAnimationFrame(function () {\n            return _this.layout_();\n        });\n    };\n    MDCTabBarScrollerFoundation.prototype.scrollToTabAtIndex = function (index) {\n        var _this = this;\n        var scrollTargetOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(index);\n        var scrollTargetOffsetWidth = this.adapter_.getComputedWidthForTabAtIndex(index);\n        this.currentTranslateOffset_ = this.normalizeForRTL_(scrollTargetOffsetLeft, scrollTargetOffsetWidth);\n        requestAnimationFrame(function () {\n            return _this.shiftFrame_();\n        });\n    };\n    MDCTabBarScrollerFoundation.prototype.layout_ = function () {\n        var frameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n        var isOverflowing = this.adapter_.getOffsetWidthForTabBar() > frameWidth;\n        if (!isOverflowing) {\n            this.currentTranslateOffset_ = 0;\n        }\n        this.shiftFrame_();\n        this.updateIndicatorEnabledStates_();\n    };\n    MDCTabBarScrollerFoundation.prototype.shiftFrame_ = function () {\n        var shiftAmount = this.isRTL_() ? this.currentTranslateOffset_ : -this.currentTranslateOffset_;\n        this.adapter_.setTransformStyleForTabBar(\"translateX(\" + shiftAmount + \"px)\");\n        this.updateIndicatorEnabledStates_();\n    };\n    MDCTabBarScrollerFoundation.prototype.handlePossibleTabKeyboardFocus_ = function (evt) {\n        var target = evt.target;\n        if (!this.adapter_.eventTargetHasClass(target, constants_1.cssClasses.TAB) || this.pointerDownRecognized_) {\n            return;\n        }\n        var resetAmt = this.isRTL_() ? this.scrollFrameScrollLeft_ : 0;\n        this.adapter_.setScrollLeftForScrollFrame(resetAmt);\n        this.focusedTarget_ = target;\n        var scrollFrameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n        var tabBarWidth = this.adapter_.getOffsetWidthForTabBar();\n        var leftEdge = this.adapter_.getOffsetLeftForEventTarget(this.focusedTarget_);\n        var rightEdge = leftEdge + this.adapter_.getOffsetWidthForEventTarget(this.focusedTarget_);\n        var shouldScrollBack = rightEdge <= this.currentTranslateOffset_;\n        var shouldScrollForward = rightEdge > this.currentTranslateOffset_ + scrollFrameWidth;\n        if (this.isRTL_()) {\n            var normalizedLeftOffset = tabBarWidth - leftEdge;\n            shouldScrollBack = leftEdge >= tabBarWidth - this.currentTranslateOffset_;\n            shouldScrollForward = normalizedLeftOffset > scrollFrameWidth + this.currentTranslateOffset_;\n        }\n        if (shouldScrollForward) {\n            this.scrollForward();\n        } else if (shouldScrollBack) {\n            this.scrollBack();\n        }\n        this.pointerDownRecognized_ = false;\n    };\n    MDCTabBarScrollerFoundation.prototype.updateIndicatorEnabledStates_ = function () {\n        var INDICATOR_ENABLED = constants_1.cssClasses.INDICATOR_ENABLED;\n        if (this.currentTranslateOffset_ === 0) {\n            this.adapter_.removeClassFromBackIndicator(INDICATOR_ENABLED);\n        } else {\n            this.adapter_.addClassToBackIndicator(INDICATOR_ENABLED);\n        }\n        var remainingTabBarWidth = this.adapter_.getOffsetWidthForTabBar() - this.currentTranslateOffset_;\n        if (remainingTabBarWidth > this.adapter_.getOffsetWidthForScrollFrame()) {\n            this.adapter_.addClassToForwardIndicator(INDICATOR_ENABLED);\n        } else {\n            this.adapter_.removeClassFromForwardIndicator(INDICATOR_ENABLED);\n        }\n    };\n    MDCTabBarScrollerFoundation.prototype.normalizeForRTL_ = function (left, width) {\n        return this.isRTL_() ? this.adapter_.getOffsetWidthForTabBar() - (left + width) : left;\n    };\n    MDCTabBarScrollerFoundation.prototype.isRTL_ = function () {\n        return this.adapter_.isRTL();\n    };\n    return MDCTabBarScrollerFoundation;\n}(foundation_1.MDCFoundation);\nexports.MDCTabBarScrollerFoundation = MDCTabBarScrollerFoundation;\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexports.default = MDCTabBarScrollerFoundation;\n\n/***/ }),\n\n/***/ 98:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cssClasses = {\n    INDICATOR_BACK: 'mdc-tab-bar-scroller__indicator--back',\n    INDICATOR_ENABLED: 'mdc-tab-bar-scroller__indicator--enabled',\n    INDICATOR_FORWARD: 'mdc-tab-bar-scroller__indicator--forward',\n    TAB: 'mdc-tab'\n};\nexports.strings = {\n    FRAME_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame',\n    INDICATOR_BACK_SELECTOR: '.mdc-tab-bar-scroller__indicator--back',\n    INDICATOR_FORWARD_SELECTOR: '.mdc-tab-bar-scroller__indicator--forward',\n    TABS_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame__tabs',\n    TAB_SELECTOR: '.mdc-tab'\n};\n\n/***/ })\n\n/******/ });\n});\n\n\n// WEBPACK FOOTER //\n// mdc.tabs.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 163);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 74583296950ff8f5c698","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport class MDCFoundation<AdapterType extends {} = {}> {\n  static get cssClasses(): { [key: string]: string } {\n    // Classes extending MDCFoundation should implement this method to return an object which exports every\n    // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'}\n    return {};\n  }\n\n  static get strings(): { [key: string]: string } {\n    // Classes extending MDCFoundation should implement this method to return an object which exports all\n    // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'}\n    return {};\n  }\n\n  static get numbers(): { [key: string]: number } {\n    // Classes extending MDCFoundation should implement this method to return an object which exports all\n    // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\n    return {};\n  }\n\n  static get defaultAdapter(): {} {\n    // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient\n    // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter\n    // validation.\n    return {};\n  }\n\n  protected adapter_: AdapterType;\n\n  constructor(adapter: AdapterType = {} as AdapterType) {\n    this.adapter_ = adapter;\n  }\n\n  init() {\n    // Subclasses should override this method to perform initialization routines (registering events, etc.)\n  }\n\n  destroy() {\n    // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.)\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-base/foundation.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from './foundation';\nimport {CustomEventListener, EventType, SpecificEventListener} from './types';\n\nexport class MDCComponent<FoundationType extends MDCFoundation> {\n  static attachTo(root: Element): MDCComponent<MDCFoundation<{}>> {\n    // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and\n    // returns an instantiated component with its root set to that element. Also note that in the cases of\n    // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized\n    // from getDefaultFoundation().\n    return new MDCComponent(root, new MDCFoundation({}));\n  }\n\n  protected root_: Element;\n  protected foundation_: FoundationType;\n\n  constructor(\n      root: Element,\n      foundation?: FoundationType,\n      ...args: Array<unknown>\n  ) {\n    this.root_ = root;\n    this.initialize(...args);\n    // Note that we initialize foundation here and not within the constructor's default param so that\n    // this.root_ is defined and can be used within the foundation class.\n    this.foundation_ = foundation === undefined ? this.getDefaultFoundation() : foundation;\n    this.foundation_.init();\n    this.initialSyncWithDOM();\n  }\n\n  /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */\n  initialize(..._args: Array<unknown>) {\n    // Subclasses can override this to do any additional setup work that would be considered part of a\n    // \"constructor\". Essentially, it is a hook into the parent constructor before the foundation is\n    // initialized. Any additional arguments besides root and foundation will be passed in here.\n  }\n\n  getDefaultFoundation(): FoundationType {\n    // Subclasses must override this method to return a properly configured foundation class for the\n    // component.\n    throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' +\n        'foundation class');\n  }\n\n  initialSyncWithDOM() {\n    // Subclasses should override this method if they need to perform work to synchronize with a host DOM\n    // object. An example of this would be a form control wrapper that needs to synchronize its internal state\n    // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM\n    // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor.\n  }\n\n  destroy() {\n    // Subclasses may implement this method to release any resources / deregister any listeners they have\n    // attached. An example of this might be deregistering a resize event from the window object.\n    this.foundation_.destroy();\n  }\n\n  /**\n   * Wrapper method to add an event listener to the component's root element. This is most useful when\n   * listening for custom events.\n   */\n  listen<K extends EventType>(evtType: K, handler: SpecificEventListener<K>): void;\n  listen<E extends Event>(evtType: string, handler: CustomEventListener<E>): void;\n  listen(evtType: string, handler: EventListener) {\n    this.root_.addEventListener(evtType, handler);\n  }\n\n  /**\n   * Wrapper method to remove an event listener to the component's root element. This is most useful when\n   * unlistening for custom events.\n   */\n  unlisten<K extends EventType>(evtType: K, handler: SpecificEventListener<K>): void;\n  unlisten<E extends Event>(evtType: string, handler: CustomEventListener<E>): void;\n  unlisten(evtType: string, handler: EventListener) {\n    this.root_.removeEventListener(evtType, handler);\n  }\n\n  /**\n   * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data.\n   */\n  emit<T extends object>(evtType: string, evtData: T, shouldBubble = false) {\n    let evt: CustomEvent<T>;\n    if (typeof CustomEvent === 'function') {\n      evt = new CustomEvent<T>(evtType, {\n        bubbles: shouldBubble,\n        detail: evtData,\n      });\n    } else {\n      evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(evtType, shouldBubble, false, evtData);\n    }\n\n    this.root_.dispatchEvent(evt);\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCComponent;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-base/component.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {\n  CssVendorPropertyMap, JsVendorPropertyMap,\n  PrefixedCssPropertyName, PrefixedJsEventType,\n  StandardCssPropertyName, StandardJsEventType,\n} from './types';\n\nconst cssPropertyNameMap: CssVendorPropertyMap = {\n  animation: {\n    prefixed: '-webkit-animation',\n    standard: 'animation',\n  },\n  transform: {\n    prefixed: '-webkit-transform',\n    standard: 'transform',\n  },\n  transition: {\n    prefixed: '-webkit-transition',\n    standard: 'transition',\n  },\n};\n\nconst jsEventTypeMap: JsVendorPropertyMap = {\n  animationend: {\n    cssProperty: 'animation',\n    prefixed: 'webkitAnimationEnd',\n    standard: 'animationend',\n  },\n  animationiteration: {\n    cssProperty: 'animation',\n    prefixed: 'webkitAnimationIteration',\n    standard: 'animationiteration',\n  },\n  animationstart: {\n    cssProperty: 'animation',\n    prefixed: 'webkitAnimationStart',\n    standard: 'animationstart',\n  },\n  transitionend: {\n    cssProperty: 'transition',\n    prefixed: 'webkitTransitionEnd',\n    standard: 'transitionend',\n  },\n};\n\nfunction isWindow(windowObj: Window): boolean {\n  return Boolean(windowObj.document) && typeof windowObj.document.createElement === 'function';\n}\n\nexport function getCorrectPropertyName(windowObj: Window, cssProperty: StandardCssPropertyName):\n    StandardCssPropertyName | PrefixedCssPropertyName {\n  if (isWindow(windowObj) && cssProperty in cssPropertyNameMap) {\n    const el = windowObj.document.createElement('div');\n    const {standard, prefixed} = cssPropertyNameMap[cssProperty];\n    const isStandard = standard in el.style;\n    return isStandard ? standard : prefixed;\n  }\n  return cssProperty;\n}\n\nexport function getCorrectEventName(windowObj: Window, eventType: StandardJsEventType):\n    StandardJsEventType | PrefixedJsEventType {\n  if (isWindow(windowObj) && eventType in jsEventTypeMap) {\n    const el = windowObj.document.createElement('div');\n    const {standard, prefixed, cssProperty} = jsEventTypeMap[eventType];\n    const isStandard = cssProperty in el.style;\n    return isStandard ? standard : prefixed;\n  }\n  return eventType;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-animation/util.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './tab/index';\nexport * from './tab-bar/index';\nexport * from './tab-bar-scroller/index';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/index.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './adapter';\nexport * from './component';\nexport * from './foundation';\nexport {cssClasses as tabCssClasses, strings as tabStrings} from './constants';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/index.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './adapter';\nexport * from './component';\nexport * from './foundation';\nexport * from './types';\nexport {cssClasses as tabBarCssClasses, strings as tabBarStrings} from './constants';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/index.ts","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport * from './adapter';\nexport * from './component';\nexport * from './foundation';\nexport {cssClasses as tabBarScrollerCssClasses, strings as tabBarScrollerStrings} from './constants';\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/index.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {getCorrectPropertyName} from '@material/animation/util';\nimport {MDCComponent} from '@material/base/component';\nimport {MDCTabBar, MDCTabBarFactory} from '../tab-bar/component';\nimport {MDCTabBarScrollerAdapter} from './adapter';\nimport {MDCTabBarScrollerFoundation} from './foundation';\n\nexport class MDCTabBarScroller extends MDCComponent<MDCTabBarScrollerFoundation> {\n  static attachTo(root: Element) {\n    return new MDCTabBarScroller(root);\n  }\n\n  get tabBar() {\n    return this.tabBar_;\n  }\n\n  protected root_!: HTMLElement; // assigned in MDCComponent constructor\n\n  private tabBar_!: MDCTabBar; // assigned in initialize()\n  private scrollFrame_!: HTMLElement; // assigned in initialize()\n  private tabBarEl_!: HTMLElement; // assigned in initialize()\n  private forwardIndicator_!: HTMLElement; // assigned in initialize()\n  private backIndicator_!: HTMLElement; // assigned in initialize()\n\n  initialize(tabBarFactory: MDCTabBarFactory = (el) => new MDCTabBar(el)) {\n    this.scrollFrame_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.FRAME_SELECTOR)!;\n    this.tabBarEl_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.TABS_SELECTOR)!;\n    this.forwardIndicator_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.INDICATOR_FORWARD_SELECTOR)!;\n    this.backIndicator_ =\n        this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.INDICATOR_BACK_SELECTOR)!;\n\n    this.tabBar_ = tabBarFactory(this.tabBarEl_);\n  }\n\n  getDefaultFoundation() {\n    // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n    // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    const adapter: MDCTabBarScrollerAdapter = {\n      addClass: (className) => this.root_.classList.add(className),\n      removeClass: (className) => this.root_.classList.remove(className),\n      eventTargetHasClass: (target, className) => target.classList.contains(className),\n      addClassToForwardIndicator: (className) => this.forwardIndicator_.classList.add(className),\n      removeClassFromForwardIndicator: (className) => this.forwardIndicator_.classList.remove(className),\n      addClassToBackIndicator: (className) => this.backIndicator_.classList.add(className),\n      removeClassFromBackIndicator: (className) => this.backIndicator_.classList.remove(className),\n      isRTL: () => getComputedStyle(this.root_).getPropertyValue('direction') === 'rtl',\n      registerBackIndicatorClickHandler: (handler) => this.backIndicator_.addEventListener('click', handler),\n      deregisterBackIndicatorClickHandler: (handler) => this.backIndicator_.removeEventListener('click', handler),\n      registerForwardIndicatorClickHandler: (handler) => this.forwardIndicator_.addEventListener('click', handler),\n      deregisterForwardIndicatorClickHandler: (handler) => this.forwardIndicator_.removeEventListener('click', handler),\n      registerCapturedInteractionHandler: (evt, handler) => this.root_.addEventListener(evt, handler, true),\n      deregisterCapturedInteractionHandler: (evt, handler) => this.root_.removeEventListener(evt, handler, true),\n      registerWindowResizeHandler: (handler) => window.addEventListener('resize', handler),\n      deregisterWindowResizeHandler: (handler) => window.removeEventListener('resize', handler),\n      getNumberOfTabs: () => this.tabBar.tabs.length,\n      getComputedWidthForTabAtIndex: (index) => this.tabBar.tabs[index].computedWidth,\n      getComputedLeftForTabAtIndex: (index) => this.tabBar.tabs[index].computedLeft,\n      getOffsetWidthForScrollFrame: () => this.scrollFrame_.offsetWidth,\n      getScrollLeftForScrollFrame: () => this.scrollFrame_.scrollLeft,\n      setScrollLeftForScrollFrame: (scrollLeftAmount) => this.scrollFrame_.scrollLeft = scrollLeftAmount,\n      getOffsetWidthForTabBar: () => this.tabBarEl_.offsetWidth,\n      setTransformStyleForTabBar: (value) => {\n        this.tabBarEl_.style.setProperty(getCorrectPropertyName(window, 'transform'), value);\n      },\n      getOffsetLeftForEventTarget: (target) => target.offsetLeft,\n      getOffsetWidthForEventTarget: (target) => target.offsetWidth,\n    };\n    // tslint:enable:object-literal-sort-keys\n    return new MDCTabBarScrollerFoundation(adapter);\n  }\n\n  layout() {\n    this.foundation_.layout();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/component.ts","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\n * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\n */\n\nexport function closest(element: Element, selector: string): Element | null {\n  if (element.closest) {\n    return element.closest(selector);\n  }\n\n  let el: Element | null = element;\n  while (el) {\n    if (matches(el, selector)) {\n      return el;\n    }\n    el = el.parentElement;\n  }\n  return null;\n}\n\nexport function matches(element: Element, selector: string): boolean {\n  const nativeMatches = element.matches\n      || element.webkitMatchesSelector\n      || element.msMatchesSelector;\n  return nativeMatches.call(element, selector);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-dom/ponyfill.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nimport {MDCRipplePoint} from './types';\n\n/**\n * Stores result from supportsCssVariables to avoid redundant processing to\n * detect CSS custom variable support.\n */\nlet supportsCssVariables_: boolean | undefined;\n\n/**\n * Stores result from applyPassive to avoid redundant processing to detect\n * passive event listener support.\n */\nlet supportsPassive_: boolean | undefined;\n\nfunction detectEdgePseudoVarBug(windowObj: Window): boolean {\n  // Detect versions of Edge with buggy var() support\n  // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11495448/\n  const document = windowObj.document;\n  const node = document.createElement('div');\n  node.className = 'mdc-ripple-surface--test-edge-var-bug';\n  document.body.appendChild(node);\n\n  // The bug exists if ::before style ends up propagating to the parent element.\n  // Additionally, getComputedStyle returns null in iframes with display: \"none\" in Firefox,\n  // but Firefox is known to support CSS custom properties correctly.\n  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n  const computedStyle = windowObj.getComputedStyle(node);\n  const hasPseudoVarBug = computedStyle !== null && computedStyle.borderTopStyle === 'solid';\n  if (node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n  return hasPseudoVarBug;\n}\n\nexport function supportsCssVariables(windowObj: Window, forceRefresh = false): boolean {\n  const {CSS} = windowObj;\n  let supportsCssVars = supportsCssVariables_;\n  if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\n    return supportsCssVariables_;\n  }\n\n  const supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\n  if (!supportsFunctionPresent) {\n    return false;\n  }\n\n  const explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\n  // See: https://bugs.webkit.org/show_bug.cgi?id=154669\n  // See: README section on Safari\n  const weAreFeatureDetectingSafari10plus = (\n      CSS.supports('(--css-vars: yes)') &&\n      CSS.supports('color', '#00000000')\n  );\n\n  if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) {\n    supportsCssVars = !detectEdgePseudoVarBug(windowObj);\n  } else {\n    supportsCssVars = false;\n  }\n\n  if (!forceRefresh) {\n    supportsCssVariables_ = supportsCssVars;\n  }\n  return supportsCssVars;\n}\n\n/**\n * Determine whether the current browser supports passive event listeners, and\n * if so, use them.\n */\nexport function applyPassive(globalObj: Window = window, forceRefresh = false):\n    boolean | EventListenerOptions {\n  if (supportsPassive_ === undefined || forceRefresh) {\n    let isSupported = false;\n    try {\n      globalObj.document.addEventListener('test', () => undefined, {\n        get passive() {\n          isSupported = true;\n          return isSupported;\n        },\n      });\n    } catch (e) {\n    } // tslint:disable-line:no-empty cannot throw error due to tests. tslint also disables console.log.\n\n    supportsPassive_ = isSupported;\n  }\n\n  return supportsPassive_ ? {passive: true} as EventListenerOptions : false;\n}\n\nexport function getNormalizedEventCoords(evt: Event | undefined, pageOffset: MDCRipplePoint, clientRect: ClientRect):\n    MDCRipplePoint {\n  if (!evt) {\n    return {x: 0, y: 0};\n  }\n  const {x, y} = pageOffset;\n  const documentX = x + clientRect.left;\n  const documentY = y + clientRect.top;\n\n  let normalizedX;\n  let normalizedY;\n  // Determine touch point relative to the ripple container.\n  if (evt.type === 'touchstart') {\n    const touchEvent = evt as TouchEvent;\n    normalizedX = touchEvent.changedTouches[0].pageX - documentX;\n    normalizedY = touchEvent.changedTouches[0].pageY - documentY;\n  } else {\n    const mouseEvent = evt as MouseEvent;\n    normalizedX = mouseEvent.pageX - documentX;\n    normalizedY = mouseEvent.pageY - documentY;\n  }\n\n  return {x: normalizedX, y: normalizedY};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/util.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from '@material/base/foundation';\nimport {MDCRippleAdapter} from './adapter';\nimport {cssClasses, numbers, strings} from './constants';\nimport {MDCRipplePoint} from './types';\nimport {getNormalizedEventCoords} from './util';\n\ninterface ActivationStateType {\n  isActivated?: boolean;\n  hasDeactivationUXRun?: boolean;\n  wasActivatedByPointer?: boolean;\n  wasElementMadeActive?: boolean;\n  activationEvent?: Event;\n  isProgrammatic?: boolean;\n}\n\ninterface FgTranslationCoordinates {\n  startPoint: MDCRipplePoint;\n  endPoint: MDCRipplePoint;\n}\n\ninterface Coordinates {\n  left: number;\n  top: number;\n}\n\ntype ActivationEventType = 'touchstart' | 'pointerdown' | 'mousedown' | 'keydown';\ntype DeactivationEventType = 'touchend' | 'pointerup' | 'mouseup' | 'contextmenu';\n\n// Activation events registered on the root element of each instance for activation\nconst ACTIVATION_EVENT_TYPES: ActivationEventType[] = [\n  'touchstart', 'pointerdown', 'mousedown', 'keydown',\n];\n\n// Deactivation events registered on documentElement when a pointer-related down event occurs\nconst POINTER_DEACTIVATION_EVENT_TYPES: DeactivationEventType[] = [\n  'touchend', 'pointerup', 'mouseup', 'contextmenu',\n];\n\n// simultaneous nested activations\nlet activatedTargets: Array<EventTarget | null> = [];\n\nexport class MDCRippleFoundation extends MDCFoundation<MDCRippleAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get numbers() {\n    return numbers;\n  }\n\n  static get defaultAdapter(): MDCRippleAdapter {\n    return {\n      addClass: () => undefined,\n      browserSupportsCssVars: () => true,\n      computeBoundingRect: () => ({top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0}),\n      containsEventTarget: () => true,\n      deregisterDocumentInteractionHandler: () => undefined,\n      deregisterInteractionHandler: () => undefined,\n      deregisterResizeHandler: () => undefined,\n      getWindowPageOffset: () => ({x: 0, y: 0}),\n      isSurfaceActive: () => true,\n      isSurfaceDisabled: () => true,\n      isUnbounded: () => true,\n      registerDocumentInteractionHandler: () => undefined,\n      registerInteractionHandler: () => undefined,\n      registerResizeHandler: () => undefined,\n      removeClass: () => undefined,\n      updateCssVariable: () => undefined,\n    };\n  }\n\n  private activationAnimationHasEnded_ = false;\n  private activationState_: ActivationStateType;\n  private activationTimer_ = 0;\n  private fgDeactivationRemovalTimer_ = 0;\n  private fgScale_ = '0';\n  private frame_ = {width: 0, height: 0};\n  private initialSize_ = 0;\n  private layoutFrame_ = 0;\n  private maxRadius_ = 0;\n  private unboundedCoords_: Coordinates = {left: 0, top: 0};\n\n  private readonly activationTimerCallback_: () => void;\n  private readonly activateHandler_: EventHandlerNonNull;\n  private readonly deactivateHandler_: EventHandlerNonNull;\n  private readonly focusHandler_: EventHandlerNonNull;\n  private readonly blurHandler_: EventHandlerNonNull;\n  private readonly resizeHandler_: EventHandlerNonNull;\n\n  private previousActivationEvent_?: Event;\n\n  constructor(adapter?: Partial<MDCRippleAdapter>) {\n    super({...MDCRippleFoundation.defaultAdapter, ...adapter});\n\n    this.activationState_ = this.defaultActivationState_();\n\n    this.activationTimerCallback_ = () => {\n      this.activationAnimationHasEnded_ = true;\n      this.runDeactivationUXLogicIfReady_();\n    };\n    this.activateHandler_ = (e) => this.activate_(e);\n    this.deactivateHandler_ = () => this.deactivate_();\n    this.focusHandler_ = () => this.handleFocus();\n    this.blurHandler_ = () => this.handleBlur();\n    this.resizeHandler_ = () => this.layout();\n  }\n\n  init() {\n    const supportsPressRipple = this.supportsPressRipple_();\n\n    this.registerRootHandlers_(supportsPressRipple);\n\n    if (supportsPressRipple) {\n      const {ROOT, UNBOUNDED} = MDCRippleFoundation.cssClasses;\n      requestAnimationFrame(() => {\n        this.adapter_.addClass(ROOT);\n        if (this.adapter_.isUnbounded()) {\n          this.adapter_.addClass(UNBOUNDED);\n          // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple\n          this.layoutInternal_();\n        }\n      });\n    }\n  }\n\n  destroy() {\n    if (this.supportsPressRipple_()) {\n      if (this.activationTimer_) {\n        clearTimeout(this.activationTimer_);\n        this.activationTimer_ = 0;\n        this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION);\n      }\n\n      if (this.fgDeactivationRemovalTimer_) {\n        clearTimeout(this.fgDeactivationRemovalTimer_);\n        this.fgDeactivationRemovalTimer_ = 0;\n        this.adapter_.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION);\n      }\n\n      const {ROOT, UNBOUNDED} = MDCRippleFoundation.cssClasses;\n      requestAnimationFrame(() => {\n        this.adapter_.removeClass(ROOT);\n        this.adapter_.removeClass(UNBOUNDED);\n        this.removeCssVars_();\n      });\n    }\n\n    this.deregisterRootHandlers_();\n    this.deregisterDeactivationHandlers_();\n  }\n\n  /**\n   * @param evt Optional event containing position information.\n   */\n  activate(evt?: Event): void {\n    this.activate_(evt);\n  }\n\n  deactivate(): void {\n    this.deactivate_();\n  }\n\n  layout(): void {\n    if (this.layoutFrame_) {\n      cancelAnimationFrame(this.layoutFrame_);\n    }\n    this.layoutFrame_ = requestAnimationFrame(() => {\n      this.layoutInternal_();\n      this.layoutFrame_ = 0;\n    });\n  }\n\n  setUnbounded(unbounded: boolean): void {\n    const {UNBOUNDED} = MDCRippleFoundation.cssClasses;\n    if (unbounded) {\n      this.adapter_.addClass(UNBOUNDED);\n    } else {\n      this.adapter_.removeClass(UNBOUNDED);\n    }\n  }\n\n  handleFocus(): void {\n    requestAnimationFrame(() =>\n        this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED));\n  }\n\n  handleBlur(): void {\n    requestAnimationFrame(() =>\n        this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED));\n  }\n\n  /**\n   * We compute this property so that we are not querying information about the client\n   * until the point in time where the foundation requests it. This prevents scenarios where\n   * client-side feature-detection may happen too early, such as when components are rendered on the server\n   * and then initialized at mount time on the client.\n   */\n  private supportsPressRipple_(): boolean {\n    return this.adapter_.browserSupportsCssVars();\n  }\n\n  private defaultActivationState_(): ActivationStateType {\n    return {\n      activationEvent: undefined,\n      hasDeactivationUXRun: false,\n      isActivated: false,\n      isProgrammatic: false,\n      wasActivatedByPointer: false,\n      wasElementMadeActive: false,\n    };\n  }\n\n  /**\n   * supportsPressRipple Passed from init to save a redundant function call\n   */\n  private registerRootHandlers_(supportsPressRipple: boolean) {\n    if (supportsPressRipple) {\n      ACTIVATION_EVENT_TYPES.forEach((evtType) => {\n        this.adapter_.registerInteractionHandler(evtType, this.activateHandler_);\n      });\n      if (this.adapter_.isUnbounded()) {\n        this.adapter_.registerResizeHandler(this.resizeHandler_);\n      }\n    }\n\n    this.adapter_.registerInteractionHandler('focus', this.focusHandler_);\n    this.adapter_.registerInteractionHandler('blur', this.blurHandler_);\n  }\n\n  private registerDeactivationHandlers_(evt: Event) {\n    if (evt.type === 'keydown') {\n      this.adapter_.registerInteractionHandler('keyup', this.deactivateHandler_);\n    } else {\n      POINTER_DEACTIVATION_EVENT_TYPES.forEach((evtType) => {\n        this.adapter_.registerDocumentInteractionHandler(evtType, this.deactivateHandler_);\n      });\n    }\n  }\n\n  private deregisterRootHandlers_() {\n    ACTIVATION_EVENT_TYPES.forEach((evtType) => {\n      this.adapter_.deregisterInteractionHandler(evtType, this.activateHandler_);\n    });\n    this.adapter_.deregisterInteractionHandler('focus', this.focusHandler_);\n    this.adapter_.deregisterInteractionHandler('blur', this.blurHandler_);\n\n    if (this.adapter_.isUnbounded()) {\n      this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n    }\n  }\n\n  private deregisterDeactivationHandlers_() {\n    this.adapter_.deregisterInteractionHandler('keyup', this.deactivateHandler_);\n    POINTER_DEACTIVATION_EVENT_TYPES.forEach((evtType) => {\n      this.adapter_.deregisterDocumentInteractionHandler(evtType, this.deactivateHandler_);\n    });\n  }\n\n  private removeCssVars_() {\n    const rippleStrings = MDCRippleFoundation.strings;\n    const keys = Object.keys(rippleStrings) as Array<keyof typeof rippleStrings>;\n    keys.forEach((key) => {\n      if (key.indexOf('VAR_') === 0) {\n        this.adapter_.updateCssVariable(rippleStrings[key], null);\n      }\n    });\n  }\n\n  private activate_(evt?: Event) {\n    if (this.adapter_.isSurfaceDisabled()) {\n      return;\n    }\n\n    const activationState = this.activationState_;\n    if (activationState.isActivated) {\n      return;\n    }\n\n    // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction\n    const previousActivationEvent = this.previousActivationEvent_;\n    const isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type;\n    if (isSameInteraction) {\n      return;\n    }\n\n    activationState.isActivated = true;\n    activationState.isProgrammatic = evt === undefined;\n    activationState.activationEvent = evt;\n    activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (\n        evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown'\n    );\n\n    const hasActivatedChild = evt !== undefined && activatedTargets.length > 0 && activatedTargets.some(\n        (target) => this.adapter_.containsEventTarget(target));\n    if (hasActivatedChild) {\n      // Immediately reset activation state, while preserving logic that prevents touch follow-on events\n      this.resetActivationState_();\n      return;\n    }\n\n    if (evt !== undefined) {\n      activatedTargets.push(evt.target);\n      this.registerDeactivationHandlers_(evt);\n    }\n\n    activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\n    if (activationState.wasElementMadeActive) {\n      this.animateActivation_();\n    }\n\n    requestAnimationFrame(() => {\n      // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples\n      activatedTargets = [];\n\n      if (!activationState.wasElementMadeActive\n          && evt !== undefined\n          && ((evt as KeyboardEvent).key === ' ' || (evt as KeyboardEvent).keyCode === 32)) {\n        // If space was pressed, try again within an rAF call to detect :active, because different UAs report\n        // active states inconsistently when they're called within event handling code:\n        // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971\n        // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741\n        // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS\n        // variable is set within a rAF callback for a submit button interaction (#2241).\n        activationState.wasElementMadeActive = this.checkElementMadeActive_(evt);\n        if (activationState.wasElementMadeActive) {\n          this.animateActivation_();\n        }\n      }\n\n      if (!activationState.wasElementMadeActive) {\n        // Reset activation state immediately if element was not made active.\n        this.activationState_ = this.defaultActivationState_();\n      }\n    });\n  }\n\n  private checkElementMadeActive_(evt?: Event) {\n    return (evt !== undefined && evt.type === 'keydown') ? this.adapter_.isSurfaceActive() : true;\n  }\n\n  private animateActivation_() {\n    const {VAR_FG_TRANSLATE_START, VAR_FG_TRANSLATE_END} = MDCRippleFoundation.strings;\n    const {FG_DEACTIVATION, FG_ACTIVATION} = MDCRippleFoundation.cssClasses;\n    const {DEACTIVATION_TIMEOUT_MS} = MDCRippleFoundation.numbers;\n\n    this.layoutInternal_();\n\n    let translateStart = '';\n    let translateEnd = '';\n\n    if (!this.adapter_.isUnbounded()) {\n      const {startPoint, endPoint} = this.getFgTranslationCoordinates_();\n      translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n      translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n    }\n\n    this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart);\n    this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd);\n    // Cancel any ongoing activation/deactivation animations\n    clearTimeout(this.activationTimer_);\n    clearTimeout(this.fgDeactivationRemovalTimer_);\n    this.rmBoundedActivationClasses_();\n    this.adapter_.removeClass(FG_DEACTIVATION);\n\n    // Force layout in order to re-trigger the animation.\n    this.adapter_.computeBoundingRect();\n    this.adapter_.addClass(FG_ACTIVATION);\n    this.activationTimer_ = setTimeout(() => this.activationTimerCallback_(), DEACTIVATION_TIMEOUT_MS);\n  }\n\n  private getFgTranslationCoordinates_(): FgTranslationCoordinates {\n    const {activationEvent, wasActivatedByPointer} = this.activationState_;\n\n    let startPoint;\n    if (wasActivatedByPointer) {\n      startPoint = getNormalizedEventCoords(\n          activationEvent,\n          this.adapter_.getWindowPageOffset(),\n          this.adapter_.computeBoundingRect(),\n      );\n    } else {\n      startPoint = {\n        x: this.frame_.width / 2,\n        y: this.frame_.height / 2,\n      };\n    }\n    // Center the element around the start point.\n    startPoint = {\n      x: startPoint.x - (this.initialSize_ / 2),\n      y: startPoint.y - (this.initialSize_ / 2),\n    };\n\n    const endPoint = {\n      x: (this.frame_.width / 2) - (this.initialSize_ / 2),\n      y: (this.frame_.height / 2) - (this.initialSize_ / 2),\n    };\n\n    return {startPoint, endPoint};\n  }\n\n  private runDeactivationUXLogicIfReady_() {\n    // This method is called both when a pointing device is released, and when the activation animation ends.\n    // The deactivation animation should only run after both of those occur.\n    const {FG_DEACTIVATION} = MDCRippleFoundation.cssClasses;\n    const {hasDeactivationUXRun, isActivated} = this.activationState_;\n    const activationHasEnded = hasDeactivationUXRun || !isActivated;\n\n    if (activationHasEnded && this.activationAnimationHasEnded_) {\n      this.rmBoundedActivationClasses_();\n      this.adapter_.addClass(FG_DEACTIVATION);\n      this.fgDeactivationRemovalTimer_ = setTimeout(() => {\n        this.adapter_.removeClass(FG_DEACTIVATION);\n      }, numbers.FG_DEACTIVATION_MS);\n    }\n  }\n\n  private rmBoundedActivationClasses_() {\n    const {FG_ACTIVATION} = MDCRippleFoundation.cssClasses;\n    this.adapter_.removeClass(FG_ACTIVATION);\n    this.activationAnimationHasEnded_ = false;\n    this.adapter_.computeBoundingRect();\n  }\n\n  private resetActivationState_() {\n    this.previousActivationEvent_ = this.activationState_.activationEvent;\n    this.activationState_ = this.defaultActivationState_();\n    // Touch devices may fire additional events for the same interaction within a short time.\n    // Store the previous event until it's safe to assume that subsequent events are for new interactions.\n    setTimeout(() => this.previousActivationEvent_ = undefined, MDCRippleFoundation.numbers.TAP_DELAY_MS);\n  }\n\n  private deactivate_(): void {\n    const activationState = this.activationState_;\n    // This can happen in scenarios such as when you have a keyup event that blurs the element.\n    if (!activationState.isActivated) {\n      return;\n    }\n\n    const state: ActivationStateType = {...activationState};\n\n    if (activationState.isProgrammatic) {\n      requestAnimationFrame(() => this.animateDeactivation_(state));\n      this.resetActivationState_();\n    } else {\n      this.deregisterDeactivationHandlers_();\n      requestAnimationFrame(() => {\n        this.activationState_.hasDeactivationUXRun = true;\n        this.animateDeactivation_(state);\n        this.resetActivationState_();\n      });\n    }\n  }\n\n  private animateDeactivation_({wasActivatedByPointer, wasElementMadeActive}: ActivationStateType) {\n    if (wasActivatedByPointer || wasElementMadeActive) {\n      this.runDeactivationUXLogicIfReady_();\n    }\n  }\n\n  private layoutInternal_() {\n    this.frame_ = this.adapter_.computeBoundingRect();\n    const maxDim = Math.max(this.frame_.height, this.frame_.width);\n\n    // Surface diameter is treated differently for unbounded vs. bounded ripples.\n    // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately\n    // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically\n    // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter\n    // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via\n    // `overflow: hidden`.\n    const getBoundedRadius = () => {\n      const hypotenuse = Math.sqrt(Math.pow(this.frame_.width, 2) + Math.pow(this.frame_.height, 2));\n      return hypotenuse + MDCRippleFoundation.numbers.PADDING;\n    };\n\n    this.maxRadius_ = this.adapter_.isUnbounded() ? maxDim : getBoundedRadius();\n\n    // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform\n    this.initialSize_ = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE);\n    this.fgScale_ = `${this.maxRadius_ / this.initialSize_}`;\n\n    this.updateLayoutCssVars_();\n  }\n\n  private updateLayoutCssVars_() {\n    const {\n      VAR_FG_SIZE, VAR_LEFT, VAR_TOP, VAR_FG_SCALE,\n    } = MDCRippleFoundation.strings;\n\n    this.adapter_.updateCssVariable(VAR_FG_SIZE, `${this.initialSize_}px`);\n    this.adapter_.updateCssVariable(VAR_FG_SCALE, this.fgScale_);\n\n    if (this.adapter_.isUnbounded()) {\n      this.unboundedCoords_ = {\n        left: Math.round((this.frame_.width / 2) - (this.initialSize_ / 2)),\n        top: Math.round((this.frame_.height / 2) - (this.initialSize_ / 2)),\n      };\n\n      this.adapter_.updateCssVariable(VAR_LEFT, `${this.unboundedCoords_.left}px`);\n      this.adapter_.updateCssVariable(VAR_TOP, `${this.unboundedCoords_.top}px`);\n    }\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCRippleFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/foundation.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\n  // given that it's an 'upgrade' to an existing component. That being said it is the root\n  // CSS class that all other CSS classes derive from.\n  BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\n  FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\n  FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\n  ROOT: 'mdc-ripple-upgraded',\n  UNBOUNDED: 'mdc-ripple-upgraded--unbounded',\n};\n\nexport const strings = {\n  VAR_FG_SCALE: '--mdc-ripple-fg-scale',\n  VAR_FG_SIZE: '--mdc-ripple-fg-size',\n  VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\n  VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\n  VAR_LEFT: '--mdc-ripple-left',\n  VAR_TOP: '--mdc-ripple-top',\n};\n\nexport const numbers = {\n  DEACTIVATION_TIMEOUT_MS: 225, // Corresponds to $mdc-ripple-translate-duration (i.e. activation animation duration)\n  FG_DEACTIVATION_MS: 150, // Corresponds to $mdc-ripple-fade-out-duration (i.e. deactivation animation duration)\n  INITIAL_ORIGIN_SCALE: 0.6,\n  PADDING: 10,\n  TAP_DELAY_MS: 300, // Delay between touch and simulated mouse events on touch devices\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/constants.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  ACTIVE: 'mdc-tab--active',\n};\n\nexport const strings = {\n  SELECTED_EVENT: 'MDCTab:selected',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/constants.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from '@material/base/foundation';\nimport {SpecificEventListener} from '@material/base/types';\nimport {MDCTabAdapter} from './adapter';\nimport {cssClasses, strings} from './constants';\n\nexport class MDCTabFoundation extends MDCFoundation<MDCTabAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get defaultAdapter(): MDCTabAdapter {\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    return {\n      addClass: () => undefined,\n      removeClass: () => undefined,\n      registerInteractionHandler: () => undefined,\n      deregisterInteractionHandler: () => undefined,\n      getOffsetWidth: () => 0,\n      getOffsetLeft: () => 0,\n      notifySelected: () => undefined,\n    };\n    // tslint:enable:object-literal-sort-keys\n  }\n\n  private computedWidth_ = 0;\n  private computedLeft_ = 0;\n  private isActive_ = false;\n  private preventDefaultOnClick_ = false;\n\n  private readonly clickHandler_: SpecificEventListener<'click'>;\n  private readonly keydownHandler_: SpecificEventListener<'keydown'>;\n\n  constructor(adapter?: Partial<MDCTabAdapter>) {\n    super({...MDCTabFoundation.defaultAdapter, ...adapter});\n\n    this.clickHandler_ = (evt) => {\n      if (this.preventDefaultOnClick_) {\n        evt.preventDefault();\n      }\n      this.adapter_.notifySelected();\n    };\n\n    this.keydownHandler_ = (evt) => {\n      if (evt.key === 'Enter' || evt.keyCode === 13) {\n        this.adapter_.notifySelected();\n      }\n    };\n  }\n\n  init() {\n    this.adapter_.registerInteractionHandler('click', this.clickHandler_);\n    this.adapter_.registerInteractionHandler('keydown', this.keydownHandler_);\n  }\n\n  destroy() {\n    this.adapter_.deregisterInteractionHandler('click', this.clickHandler_);\n    this.adapter_.deregisterInteractionHandler('keydown', this.keydownHandler_);\n  }\n\n  getComputedWidth() {\n    return this.computedWidth_;\n  }\n\n  getComputedLeft() {\n    return this.computedLeft_;\n  }\n\n  isActive() {\n    return this.isActive_;\n  }\n\n  setActive(isActive: boolean) {\n    this.isActive_ = isActive;\n    if (this.isActive_) {\n      this.adapter_.addClass(cssClasses.ACTIVE);\n    } else {\n      this.adapter_.removeClass(cssClasses.ACTIVE);\n    }\n  }\n\n  preventsDefaultOnClick() {\n    return this.preventDefaultOnClick_;\n  }\n\n  setPreventDefaultOnClick(preventDefaultOnClick: boolean) {\n    this.preventDefaultOnClick_ = preventDefaultOnClick;\n  }\n\n  measureSelf() {\n    this.computedWidth_ = this.adapter_.getOffsetWidth();\n    this.computedLeft_ = this.adapter_.getOffsetLeft();\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCTabFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/foundation.ts","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCComponent} from '@material/base/component';\nimport {matches} from '@material/dom/ponyfill';\nimport {MDCRippleAdapter} from './adapter';\nimport {MDCRippleFoundation} from './foundation';\nimport {MDCRippleAttachOpts, MDCRippleCapableSurface} from './types';\nimport * as util from './util';\n\nexport type MDCRippleFactory = (el: Element, foundation?: MDCRippleFoundation) => MDCRipple;\n\nexport class MDCRipple extends MDCComponent<MDCRippleFoundation> implements MDCRippleCapableSurface {\n  static attachTo(root: Element, opts: MDCRippleAttachOpts = {isUnbounded: undefined}): MDCRipple {\n    const ripple = new MDCRipple(root);\n    // Only override unbounded behavior if option is explicitly specified\n    if (opts.isUnbounded !== undefined) {\n      ripple.unbounded = opts.isUnbounded;\n    }\n    return ripple;\n  }\n\n  static createAdapter(instance: MDCRippleCapableSurface): MDCRippleAdapter {\n    return {\n      addClass: (className) => instance.root_.classList.add(className),\n      browserSupportsCssVars: () => util.supportsCssVariables(window),\n      computeBoundingRect: () => instance.root_.getBoundingClientRect(),\n      containsEventTarget: (target) => instance.root_.contains(target as Node),\n      deregisterDocumentInteractionHandler: (evtType, handler) =>\n          document.documentElement.removeEventListener(evtType, handler, util.applyPassive()),\n      deregisterInteractionHandler: (evtType, handler) =>\n          instance.root_.removeEventListener(evtType, handler, util.applyPassive()),\n      deregisterResizeHandler: (handler) => window.removeEventListener('resize', handler),\n      getWindowPageOffset: () => ({x: window.pageXOffset, y: window.pageYOffset}),\n      isSurfaceActive: () => matches(instance.root_, ':active'),\n      isSurfaceDisabled: () => Boolean(instance.disabled),\n      isUnbounded: () => Boolean(instance.unbounded),\n      registerDocumentInteractionHandler: (evtType, handler) =>\n          document.documentElement.addEventListener(evtType, handler, util.applyPassive()),\n      registerInteractionHandler: (evtType, handler) =>\n          instance.root_.addEventListener(evtType, handler, util.applyPassive()),\n      registerResizeHandler: (handler) => window.addEventListener('resize', handler),\n      removeClass: (className) => instance.root_.classList.remove(className),\n      updateCssVariable: (varName, value) => (instance.root_ as HTMLElement).style.setProperty(varName, value),\n    };\n  }\n\n  // Public visibility for this property is required by MDCRippleCapableSurface.\n  root_!: Element; // assigned in MDCComponent constructor\n\n  disabled = false;\n\n  private unbounded_?: boolean;\n\n  get unbounded(): boolean {\n    return Boolean(this.unbounded_);\n  }\n\n  set unbounded(unbounded: boolean) {\n    this.unbounded_ = Boolean(unbounded);\n    this.setUnbounded_();\n  }\n\n  activate() {\n    this.foundation_.activate();\n  }\n\n  deactivate() {\n    this.foundation_.deactivate();\n  }\n\n  layout() {\n    this.foundation_.layout();\n  }\n\n  getDefaultFoundation() {\n    return new MDCRippleFoundation(MDCRipple.createAdapter(this));\n  }\n\n  initialSyncWithDOM() {\n    const root = this.root_ as HTMLElement;\n    this.unbounded = 'mdcRippleIsUnbounded' in root.dataset;\n  }\n\n  /**\n   * Closure Compiler throws an access control error when directly accessing a\n   * protected or private property inside a getter/setter, like unbounded above.\n   * By accessing the protected property inside a method, we solve that problem.\n   * That's why this function exists.\n   */\n  private setUnbounded_() {\n    this.foundation_.setUnbounded(Boolean(this.unbounded_));\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-ripple/component.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCComponent} from '@material/base/component';\nimport {MDCRipple} from '@material/ripple/component';\nimport {MDCTabAdapter} from './adapter';\nimport {cssClasses} from './constants';\nimport {MDCTabFoundation} from './foundation';\n\nexport type MDCTabFactory = (el: Element, foundation?: MDCTabFoundation) => MDCTab;\n\nexport interface MDCTabSelectedEventDetail {\n  tab: MDCTab;\n}\n\n// Note: CustomEvent<T> is not supported by Closure Compiler.\n\nexport interface MDCTabSelectedEvent extends Event {\n  readonly detail: MDCTabSelectedEventDetail;\n}\n\nexport class MDCTab extends MDCComponent<MDCTabFoundation> {\n  static attachTo(root: Element) {\n    return new MDCTab(root);\n  }\n\n  get computedWidth() {\n    return this.foundation_.getComputedWidth();\n  }\n\n  get computedLeft() {\n    return this.foundation_.getComputedLeft();\n  }\n\n  get isActive() {\n    return this.foundation_.isActive();\n  }\n\n  set isActive(isActive) {\n    this.foundation_.setActive(isActive);\n  }\n\n  get preventDefaultOnClick() {\n    return this.foundation_.preventsDefaultOnClick();\n  }\n\n  set preventDefaultOnClick(preventDefaultOnClick) {\n    this.foundation_.setPreventDefaultOnClick(preventDefaultOnClick);\n  }\n\n  protected root_!: HTMLElement; // assigned in MDCComponent constructor\n\n  private ripple_ = MDCRipple.attachTo(this.root_);\n\n  destroy() {\n    this.ripple_.destroy();\n    super.destroy();\n  }\n\n  getDefaultFoundation() {\n    // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n    // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    const adapter: MDCTabAdapter = {\n      addClass: (className) => this.root_.classList.add(className),\n      removeClass: (className) => this.root_.classList.remove(className),\n      registerInteractionHandler: (type, handler) => this.listen(type, handler),\n      deregisterInteractionHandler: (type, handler) => this.unlisten(type, handler),\n      getOffsetWidth: () => this.root_.offsetWidth,\n      getOffsetLeft: () => this.root_.offsetLeft,\n      notifySelected: () =>\n          this.emit<MDCTabSelectedEventDetail>(MDCTabFoundation.strings.SELECTED_EVENT, {tab: this}, true),\n    };\n    // tslint:enable:object-literal-sort-keys\n    return new MDCTabFoundation(adapter);\n  }\n\n  initialSyncWithDOM() {\n    this.isActive = this.root_.classList.contains(cssClasses.ACTIVE);\n  }\n\n  measureSelf() {\n    this.foundation_.measureSelf();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab/component.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCComponent} from '@material/base/component';\nimport {MDCTab, MDCTabFactory, MDCTabSelectedEvent} from '../tab/component';\nimport {MDCTabFoundation} from '../tab/foundation';\nimport {MDCTabBarAdapter} from './adapter';\nimport {MDCTabBarFoundation} from './foundation';\nimport {MDCTabBarChangeEventDetail} from './types';\n\nconst {strings} = MDCTabBarFoundation;\n\nexport type MDCTabBarFactory = (el: Element, foundation?: MDCTabBarFoundation) => MDCTabBar;\n\nexport class MDCTabBar extends MDCComponent<MDCTabBarFoundation> {\n  static attachTo(root: Element) {\n    return new MDCTabBar(root);\n  }\n\n  get tabs() {\n    return this.tabs_;\n  }\n\n  get activeTab() {\n    const activeIndex = this.foundation_.getActiveTabIndex();\n    return this.tabs[activeIndex];\n  }\n\n  set activeTab(tab) {\n    this.setActiveTab_(tab, false);\n  }\n\n  get activeTabIndex() {\n    return this.foundation_.getActiveTabIndex();\n  }\n\n  set activeTabIndex(index) {\n    this.setActiveTabIndex_(index, false);\n  }\n\n  protected root_!: HTMLElement; // assigned in MDCComponent constructor\n\n  private tabs_!: MDCTab[]; // assigned in initialize()\n  private indicator_!: HTMLElement; // assigned in initialize()\n  private tabSelectedHandler_!: (evt: MDCTabSelectedEvent) => void; // assigned in initialize()\n\n  initialize(tabFactory: MDCTabFactory = (el) => new MDCTab(el)) {\n    this.indicator_ = this.root_.querySelector<HTMLElement>(strings.INDICATOR_SELECTOR)!;\n    this.tabs_ = this.gatherTabs_(tabFactory);\n    this.tabSelectedHandler_ = ({detail}) => {\n      const {tab} = detail;\n      this.setActiveTab_(tab, true);\n    };\n  }\n\n  getDefaultFoundation() {\n    // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial<MDCFooAdapter>.\n    // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable.\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    const adapter: MDCTabBarAdapter = {\n      addClass: (className) => this.root_.classList.add(className),\n      removeClass: (className) => this.root_.classList.remove(className),\n      bindOnMDCTabSelectedEvent: () =>\n          this.listen(MDCTabFoundation.strings.SELECTED_EVENT, this.tabSelectedHandler_),\n      unbindOnMDCTabSelectedEvent: () =>\n          this.unlisten(MDCTabFoundation.strings.SELECTED_EVENT, this.tabSelectedHandler_),\n      registerResizeHandler: (handler) => window.addEventListener('resize', handler),\n      deregisterResizeHandler: (handler) => window.removeEventListener('resize', handler),\n      getOffsetWidth: () => this.root_.offsetWidth,\n      setStyleForIndicator: (propertyName, value) => this.indicator_.style.setProperty(propertyName, value),\n      getOffsetWidthForIndicator: () => this.indicator_.offsetWidth,\n      notifyChange: (evtData) => this.emit<MDCTabBarChangeEventDetail>(strings.CHANGE_EVENT, evtData),\n      getNumberOfTabs: () => this.tabs.length,\n      isTabActiveAtIndex: (index) => this.tabs[index].isActive,\n      setTabActiveAtIndex: (index, isActive) => {\n        this.tabs[index].isActive = isActive;\n      },\n      isDefaultPreventedOnClickForTabAtIndex: (index) => this.tabs[index].preventDefaultOnClick,\n      setPreventDefaultOnClickForTabAtIndex: (index, preventDefaultOnClick) => {\n        this.tabs[index].preventDefaultOnClick = preventDefaultOnClick;\n      },\n      measureTabAtIndex: (index) => this.tabs[index].measureSelf(),\n      getComputedWidthForTabAtIndex: (index) => this.tabs[index].computedWidth,\n      getComputedLeftForTabAtIndex: (index) => this.tabs[index].computedLeft,\n    };\n    // tslint:enable:object-literal-sort-keys\n    return new MDCTabBarFoundation(adapter);\n  }\n\n  layout() {\n    this.foundation_.layout();\n  }\n\n  private gatherTabs_(tabFactory: MDCTabFactory): MDCTab[] {\n    const tabElements: HTMLElement[] =\n        [].slice.call(this.root_.querySelectorAll(strings.TAB_SELECTOR));\n    return tabElements.map((el: Element) => tabFactory(el));\n  }\n\n  private setActiveTabIndex_(activeTabIndex: number, notifyChange: boolean) {\n    this.foundation_.switchToTabAtIndex(activeTabIndex, notifyChange);\n  }\n\n  private setActiveTab_(activeTab: MDCTab, notifyChange: boolean) {\n    const indexOfTab = this.tabs.indexOf(activeTab);\n    if (indexOfTab < 0) {\n      throw new Error('Invalid tab component given as activeTab: Tab not found within this component\\'s tab list');\n    }\n    this.setActiveTabIndex_(indexOfTab, notifyChange);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/component.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {getCorrectPropertyName} from '@material/animation/util';\nimport {MDCFoundation} from '@material/base/foundation';\nimport {SpecificEventListener} from '@material/base/types';\nimport {MDCTabBarAdapter} from './adapter';\nimport {cssClasses, strings} from './constants';\n\nexport class MDCTabBarFoundation extends MDCFoundation<MDCTabBarAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get defaultAdapter(): MDCTabBarAdapter {\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    return {\n      addClass: () => undefined,\n      removeClass: () => undefined,\n      bindOnMDCTabSelectedEvent: () => undefined,\n      unbindOnMDCTabSelectedEvent: () => undefined,\n      registerResizeHandler: () => undefined,\n      deregisterResizeHandler: () => undefined,\n      getOffsetWidth: () => 0,\n      setStyleForIndicator: () => undefined,\n      getOffsetWidthForIndicator: () => 0,\n      notifyChange: () => undefined,\n      getNumberOfTabs: () => 0,\n      isTabActiveAtIndex: () => false,\n      setTabActiveAtIndex: () => undefined,\n      isDefaultPreventedOnClickForTabAtIndex: () => false,\n      setPreventDefaultOnClickForTabAtIndex: () => undefined,\n      measureTabAtIndex: () => undefined,\n      getComputedWidthForTabAtIndex: () => 0,\n      getComputedLeftForTabAtIndex: () => 0,\n    };\n    // tslint:enable:object-literal-sort-keys\n  }\n\n  private isIndicatorShown_ = false;\n  private activeTabIndex_ = 0;\n  private layoutFrame_ = 0;\n\n  private resizeHandler_!: SpecificEventListener<'resize'>; // assigned in init()\n\n  constructor(adapter?: Partial<MDCTabBarAdapter>) {\n    super({...MDCTabBarFoundation.defaultAdapter, ...adapter});\n  }\n\n  init() {\n    this.resizeHandler_ = () => this.layout();\n    this.adapter_.addClass(cssClasses.UPGRADED);\n    this.adapter_.bindOnMDCTabSelectedEvent();\n    this.adapter_.registerResizeHandler(this.resizeHandler_);\n    const activeTabIndex = this.findActiveTabIndex_();\n    if (activeTabIndex >= 0) {\n      this.activeTabIndex_ = activeTabIndex;\n    }\n    this.layout();\n  }\n\n  destroy() {\n    this.adapter_.removeClass(cssClasses.UPGRADED);\n    this.adapter_.unbindOnMDCTabSelectedEvent();\n    this.adapter_.deregisterResizeHandler(this.resizeHandler_);\n  }\n\n  layout() {\n    if (this.layoutFrame_) {\n      cancelAnimationFrame(this.layoutFrame_);\n    }\n\n    this.layoutFrame_ = requestAnimationFrame(() => {\n      this.layoutInternal_();\n      this.layoutFrame_ = 0;\n    });\n  }\n\n  switchToTabAtIndex(index: number, shouldNotify: boolean) {\n    if (index === this.activeTabIndex_) {\n      return;\n    }\n\n    if (index < 0 || index >= this.adapter_.getNumberOfTabs()) {\n      throw new Error(`Out of bounds index specified for tab: ${index}`);\n    }\n\n    const prevActiveTabIndex = this.activeTabIndex_;\n    this.activeTabIndex_ = index;\n    requestAnimationFrame(() => {\n      if (prevActiveTabIndex >= 0) {\n        this.adapter_.setTabActiveAtIndex(prevActiveTabIndex, false);\n      }\n      this.adapter_.setTabActiveAtIndex(this.activeTabIndex_, true);\n      this.layoutIndicator_();\n      if (shouldNotify) {\n        this.adapter_.notifyChange({activeTabIndex: this.activeTabIndex_});\n      }\n    });\n  }\n\n  getActiveTabIndex() {\n    return this.findActiveTabIndex_();\n  }\n\n  private layoutInternal_() {\n    this.forEachTabIndex_((index) => this.adapter_.measureTabAtIndex(index));\n    this.layoutIndicator_();\n  }\n\n  private layoutIndicator_() {\n    const isIndicatorFirstRender = !this.isIndicatorShown_;\n\n    // Ensure that indicator appears in the right position immediately for correct first render.\n    if (isIndicatorFirstRender) {\n      this.adapter_.setStyleForIndicator('transition', 'none');\n    }\n\n    const translateAmtForActiveTabLeft = this.adapter_.getComputedLeftForTabAtIndex(this.activeTabIndex_);\n    const scaleAmtForActiveTabWidth =\n        this.adapter_.getComputedWidthForTabAtIndex(this.activeTabIndex_) / this.adapter_.getOffsetWidth();\n\n    const transformValue = `translateX(${translateAmtForActiveTabLeft}px) scale(${scaleAmtForActiveTabWidth}, 1)`;\n    this.adapter_.setStyleForIndicator(getCorrectPropertyName(window, 'transform'), transformValue);\n\n    if (isIndicatorFirstRender) {\n      // Force layout so that transform styles to take effect.\n      this.adapter_.getOffsetWidthForIndicator();\n      this.adapter_.setStyleForIndicator('transition', '');\n      this.adapter_.setStyleForIndicator('visibility', 'visible');\n      this.isIndicatorShown_ = true;\n    }\n  }\n\n  private findActiveTabIndex_() {\n    let activeTabIndex = -1;\n    this.forEachTabIndex_((index) => {\n      if (this.adapter_.isTabActiveAtIndex(index)) {\n        activeTabIndex = index;\n        return true;\n      }\n    });\n    return activeTabIndex;\n  }\n\n  private forEachTabIndex_(iterator: (index: number) => boolean | void) {\n    const numTabs = this.adapter_.getNumberOfTabs();\n    for (let index = 0; index < numTabs; index++) {\n      const shouldBreak = iterator(index);\n      if (shouldBreak) {\n        break;\n      }\n    }\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCTabBarFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/foundation.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  UPGRADED: 'mdc-tab-bar-upgraded',\n};\n\nexport const strings = {\n  CHANGE_EVENT: 'MDCTabBar:change',\n  INDICATOR_SELECTOR: '.mdc-tab-bar__indicator',\n  TAB_SELECTOR: '.mdc-tab',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar/constants.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport {MDCFoundation} from '@material/base/foundation';\nimport {SpecificEventListener} from '@material/base/types';\nimport {MDCTabBarScrollerAdapter} from './adapter';\nimport {cssClasses, strings} from './constants';\n\ntype InteractionEventType = 'touchstart' | 'mousedown' | 'focus';\n\nconst INTERACTION_EVENTS: InteractionEventType[] = ['touchstart', 'mousedown', 'focus'];\n\nexport class MDCTabBarScrollerFoundation extends MDCFoundation<MDCTabBarScrollerAdapter> {\n  static get cssClasses() {\n    return cssClasses;\n  }\n\n  static get strings() {\n    return strings;\n  }\n\n  static get defaultAdapter(): MDCTabBarScrollerAdapter {\n    // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface.\n    return {\n      addClass: () => undefined,\n      removeClass: () => undefined,\n      eventTargetHasClass: () => false,\n      addClassToForwardIndicator: () => undefined,\n      removeClassFromForwardIndicator: () => undefined,\n      addClassToBackIndicator: () => undefined,\n      removeClassFromBackIndicator: () => undefined,\n      isRTL: () => false,\n      registerBackIndicatorClickHandler: () => undefined,\n      deregisterBackIndicatorClickHandler: () => undefined,\n      registerForwardIndicatorClickHandler: () => undefined,\n      deregisterForwardIndicatorClickHandler: () => undefined,\n      registerCapturedInteractionHandler: () => undefined,\n      deregisterCapturedInteractionHandler: () => undefined,\n      registerWindowResizeHandler: () => undefined,\n      deregisterWindowResizeHandler: () => undefined,\n      getNumberOfTabs: () => 0,\n      getComputedWidthForTabAtIndex: () => 0,\n      getComputedLeftForTabAtIndex: () => 0,\n      getOffsetWidthForScrollFrame: () => 0,\n      getScrollLeftForScrollFrame: () => 0,\n      setScrollLeftForScrollFrame: () => undefined,\n      getOffsetWidthForTabBar: () => 0,\n      setTransformStyleForTabBar: () => undefined,\n      getOffsetLeftForEventTarget: () => 0,\n      getOffsetWidthForEventTarget: () => 0,\n    };\n    // tslint:enable:object-literal-sort-keys\n  }\n\n  private pointerDownRecognized_ = false;\n  private currentTranslateOffset_ = 0;\n  private focusedTarget_: HTMLElement | null = null;\n  private layoutFrame_ = 0;\n  private scrollFrameScrollLeft_ = 0;\n\n  private readonly forwardIndicatorClickHandler_: SpecificEventListener<'click'>;\n  private readonly backIndicatorClickHandler_: SpecificEventListener<'click'>;\n  private readonly resizeHandler_: SpecificEventListener<'resize'>;\n  private readonly interactionHandler_: SpecificEventListener<InteractionEventType>;\n\n  constructor(adapter?: Partial<MDCTabBarScrollerAdapter>) {\n    super({...MDCTabBarScrollerFoundation.defaultAdapter, ...adapter});\n\n    this.forwardIndicatorClickHandler_ = (evt) => this.scrollForward(evt);\n    this.backIndicatorClickHandler_ = (evt) => this.scrollBack(evt);\n    this.resizeHandler_ = () => this.layout();\n    this.interactionHandler_ = (evt) => {\n      if (evt.type === 'touchstart' || evt.type === 'mousedown') {\n        this.pointerDownRecognized_ = true;\n      }\n      this.handlePossibleTabKeyboardFocus_(evt);\n      if (evt.type === 'focus') {\n        this.pointerDownRecognized_ = false;\n      }\n    };\n  }\n\n  init() {\n    this.adapter_.registerBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n    this.adapter_.registerForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n    this.adapter_.registerWindowResizeHandler(this.resizeHandler_);\n    INTERACTION_EVENTS.forEach((evtType) => {\n      this.adapter_.registerCapturedInteractionHandler(evtType, this.interactionHandler_);\n    });\n    this.layout();\n  }\n\n  destroy() {\n    this.adapter_.deregisterBackIndicatorClickHandler(this.backIndicatorClickHandler_);\n    this.adapter_.deregisterForwardIndicatorClickHandler(this.forwardIndicatorClickHandler_);\n    this.adapter_.deregisterWindowResizeHandler(this.resizeHandler_);\n    INTERACTION_EVENTS.forEach((evtType) => {\n      this.adapter_.deregisterCapturedInteractionHandler(evtType, this.interactionHandler_);\n    });\n  }\n\n  scrollBack(evt?: MouseEvent) {\n    if (evt) {\n      evt.preventDefault();\n    }\n\n    let tabWidthAccumulator = 0;\n    let scrollTargetIndex = 0;\n\n    for (let i = this.adapter_.getNumberOfTabs() - 1; i > 0; i--) {\n      const tabOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(i);\n      const tabBarWidthLessTabOffsetLeft = this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeft;\n\n      let tabIsNotOccluded = tabOffsetLeft > this.currentTranslateOffset_;\n      if (this.isRTL_()) {\n        tabIsNotOccluded = tabBarWidthLessTabOffsetLeft > this.currentTranslateOffset_;\n      }\n\n      if (tabIsNotOccluded) {\n        continue;\n      }\n\n      tabWidthAccumulator += this.adapter_.getComputedWidthForTabAtIndex(i);\n\n      const scrollTargetDetermined = tabWidthAccumulator > this.adapter_.getOffsetWidthForScrollFrame();\n      if (scrollTargetDetermined) {\n        scrollTargetIndex = this.isRTL_() ? i + 1 : i;\n        break;\n      }\n    }\n\n    this.scrollToTabAtIndex(scrollTargetIndex);\n  }\n\n  scrollForward(evt?: MouseEvent) {\n    if (evt) {\n      evt.preventDefault();\n    }\n\n    const scrollFrameOffsetWidth = this.adapter_.getOffsetWidthForScrollFrame() + this.currentTranslateOffset_;\n    let scrollTargetIndex = 0;\n\n    for (let i = 0; i < this.adapter_.getNumberOfTabs(); i++) {\n      const tabOffsetLeftAndWidth =\n          this.adapter_.getComputedLeftForTabAtIndex(i) + this.adapter_.getComputedWidthForTabAtIndex(i);\n      let scrollTargetDetermined = tabOffsetLeftAndWidth > scrollFrameOffsetWidth;\n\n      if (this.isRTL_()) {\n        const frameOffsetAndTabWidth =\n            scrollFrameOffsetWidth - this.adapter_.getComputedWidthForTabAtIndex(i);\n        const tabRightOffset =\n            this.adapter_.getOffsetWidthForTabBar() - tabOffsetLeftAndWidth;\n\n        scrollTargetDetermined = tabRightOffset > frameOffsetAndTabWidth;\n      }\n\n      if (scrollTargetDetermined) {\n        scrollTargetIndex = i;\n        break;\n      }\n    }\n\n    this.scrollToTabAtIndex(scrollTargetIndex);\n  }\n\n  layout() {\n    cancelAnimationFrame(this.layoutFrame_);\n    this.scrollFrameScrollLeft_ = this.adapter_.getScrollLeftForScrollFrame();\n    this.layoutFrame_ = requestAnimationFrame(() => this.layout_());\n  }\n\n  scrollToTabAtIndex(index: number) {\n    const scrollTargetOffsetLeft = this.adapter_.getComputedLeftForTabAtIndex(index);\n    const scrollTargetOffsetWidth = this.adapter_.getComputedWidthForTabAtIndex(index);\n\n    this.currentTranslateOffset_ =\n        this.normalizeForRTL_(scrollTargetOffsetLeft, scrollTargetOffsetWidth);\n\n    requestAnimationFrame(() => this.shiftFrame_());\n  }\n\n  private layout_() {\n    const frameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n    const isOverflowing = this.adapter_.getOffsetWidthForTabBar() > frameWidth;\n\n    if (!isOverflowing) {\n      this.currentTranslateOffset_ = 0;\n    }\n\n    this.shiftFrame_();\n    this.updateIndicatorEnabledStates_();\n  }\n\n  private shiftFrame_() {\n    const shiftAmount = this.isRTL_() ?\n        this.currentTranslateOffset_ : -this.currentTranslateOffset_;\n\n    this.adapter_.setTransformStyleForTabBar(`translateX(${shiftAmount}px)`);\n    this.updateIndicatorEnabledStates_();\n  }\n\n  private handlePossibleTabKeyboardFocus_(evt: MouseEvent | TouchEvent | FocusEvent) {\n    const target = evt.target as HTMLElement;\n\n    if (!this.adapter_.eventTargetHasClass(target, cssClasses.TAB) || this.pointerDownRecognized_) {\n      return;\n    }\n\n    const resetAmt = this.isRTL_() ? this.scrollFrameScrollLeft_ : 0;\n    this.adapter_.setScrollLeftForScrollFrame(resetAmt);\n\n    this.focusedTarget_ = target;\n\n    const scrollFrameWidth = this.adapter_.getOffsetWidthForScrollFrame();\n    const tabBarWidth = this.adapter_.getOffsetWidthForTabBar();\n    const leftEdge = this.adapter_.getOffsetLeftForEventTarget(this.focusedTarget_);\n    const rightEdge = leftEdge + this.adapter_.getOffsetWidthForEventTarget(this.focusedTarget_);\n\n    let shouldScrollBack = rightEdge <= this.currentTranslateOffset_;\n    let shouldScrollForward = rightEdge > this.currentTranslateOffset_ + scrollFrameWidth;\n\n    if (this.isRTL_()) {\n      const normalizedLeftOffset = tabBarWidth - leftEdge;\n      shouldScrollBack = leftEdge >= tabBarWidth - this.currentTranslateOffset_;\n      shouldScrollForward = normalizedLeftOffset > scrollFrameWidth + this.currentTranslateOffset_;\n    }\n\n    if (shouldScrollForward) {\n      this.scrollForward();\n    } else if (shouldScrollBack) {\n      this.scrollBack();\n    }\n\n    this.pointerDownRecognized_ = false;\n  }\n\n  private updateIndicatorEnabledStates_() {\n    const {INDICATOR_ENABLED} = cssClasses;\n    if (this.currentTranslateOffset_ === 0) {\n      this.adapter_.removeClassFromBackIndicator(INDICATOR_ENABLED);\n    } else {\n      this.adapter_.addClassToBackIndicator(INDICATOR_ENABLED);\n    }\n\n    const remainingTabBarWidth = this.adapter_.getOffsetWidthForTabBar() - this.currentTranslateOffset_;\n    if (remainingTabBarWidth > this.adapter_.getOffsetWidthForScrollFrame()) {\n      this.adapter_.addClassToForwardIndicator(INDICATOR_ENABLED);\n    } else {\n      this.adapter_.removeClassFromForwardIndicator(INDICATOR_ENABLED);\n    }\n  }\n\n  private normalizeForRTL_(left: number, width: number) {\n    return this.isRTL_() ? this.adapter_.getOffsetWidthForTabBar() - (left + width) : left;\n  }\n\n  private isRTL_() {\n    return this.adapter_.isRTL();\n  }\n}\n\n// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier.\nexport default MDCTabBarScrollerFoundation;\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/foundation.ts","/**\n * @license\n * Copyright 2017 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nexport const cssClasses = {\n  INDICATOR_BACK: 'mdc-tab-bar-scroller__indicator--back',\n  INDICATOR_ENABLED: 'mdc-tab-bar-scroller__indicator--enabled',\n  INDICATOR_FORWARD: 'mdc-tab-bar-scroller__indicator--forward',\n  TAB: 'mdc-tab',\n};\n\nexport const strings = {\n  FRAME_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame',\n  INDICATOR_BACK_SELECTOR: '.mdc-tab-bar-scroller__indicator--back',\n  INDICATOR_FORWARD_SELECTOR: '.mdc-tab-bar-scroller__indicator--forward',\n  TABS_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame__tabs',\n  TAB_SELECTOR: '.mdc-tab',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./packages/mdc-tabs/tab-bar-scroller/constants.ts"],"sourceRoot":""}