{"version":3,"file":"sidenav.mjs","sources":["../../../../../../src/material/sidenav/drawer-animations.ts","../../../../../../src/material/sidenav/drawer.ts","../../../../../../src/material/sidenav/drawer.html","../../../../../../src/material/sidenav/drawer-container.html","../../../../../../src/material/sidenav/sidenav.ts","../../../../../../src/material/sidenav/sidenav-container.html","../../../../../../src/material/sidenav/sidenav-module.ts","../../../../../../src/material/sidenav/public-api.ts","../../../../../../src/material/sidenav/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n  AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nexport const matDrawerAnimations: {\n  readonly transformDrawer: AnimationTriggerMetadata;\n} = {\n  /** Animation that slides a drawer in and out. */\n  transformDrawer: trigger('transform', [\n    // We remove the `transform` here completely, rather than setting it to zero, because:\n    // 1. Having a transform can cause elements with ripples or an animated\n    //    transform to shift around in Chrome with an RTL layout (see #10023).\n    // 2. 3d transforms causes text to appear blurry on IE and Edge.\n    state('open, open-instant', style({\n      'transform': 'none',\n      'visibility': 'visible',\n    })),\n    state('void', style({\n      // Avoids the shadow showing up when closed in SSR.\n      'box-shadow': 'none',\n      'visibility': 'hidden',\n    })),\n    transition('void => open-instant', animate('0ms')),\n    transition('void <=> open, open-instant => void',\n        animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n  ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {AnimationEvent} from '@angular/animations';\nimport {\n  FocusMonitor,\n  FocusOrigin,\n  FocusTrap,\n  FocusTrapFactory,\n  InteractivityChecker\n} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  AfterContentChecked,\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewChild,\n  ViewEncapsulation,\n  HostListener,\n  HostBinding,\n} from '@angular/core';\nimport {fromEvent, merge, Observable, Subject} from 'rxjs';\nimport {\n  debounceTime,\n  filter,\n  map,\n  startWith,\n  take,\n  takeUntil,\n  distinctUntilChanged,\n  mapTo,\n} from 'rxjs/operators';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nexport function throwMatDuplicatedDrawerError(position: string) {\n  throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n\n/** Options for where to set focus to automatically on dialog open */\nexport type AutoFocusTarget = 'dialog' | 'first-tabbable' | 'first-heading';\n\n/** Result of the toggle promise that indicates the state of the drawer. */\nexport type MatDrawerToggleResult = 'open' | 'close';\n\n/** Drawer and SideNav display modes. */\nexport type MatDrawerMode = 'over' | 'push' | 'side';\n\n/** Configures whether drawers should use auto sizing by default. */\nexport const MAT_DRAWER_DEFAULT_AUTOSIZE =\n    new InjectionToken<boolean>('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n      providedIn: 'root',\n      factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n    });\n\n\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nexport const MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n\n/** @docs-private */\nexport function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY(): boolean {\n  return false;\n}\n\n@Component({\n  selector: 'mat-drawer-content',\n  template: '<ng-content></ng-content>',\n  host: {\n    'class': 'mat-drawer-content',\n    '[style.margin-left.px]': '_container._contentMargins.left',\n    '[style.margin-right.px]': '_container._contentMargins.right',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContent extends CdkScrollable implements AfterContentInit {\n  constructor(\n      private _changeDetectorRef: ChangeDetectorRef,\n      @Inject(forwardRef(() => MatDrawerContainer)) public _container: MatDrawerContainer,\n      elementRef: ElementRef<HTMLElement>,\n      scrollDispatcher: ScrollDispatcher,\n      ngZone: NgZone) {\n    super(elementRef, scrollDispatcher, ngZone);\n  }\n\n  ngAfterContentInit() {\n    this._container._contentMarginChanges.subscribe(() => {\n      this._changeDetectorRef.markForCheck();\n    });\n  }\n}\n\n\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\n@Component({\n  selector: 'mat-drawer',\n  exportAs: 'matDrawer',\n  templateUrl: 'drawer.html',\n  animations: [matDrawerAnimations.transformDrawer],\n  host: {\n    'class': 'mat-drawer',\n    // must prevent the browser from aligning text based on value\n    '[attr.align]': 'null',\n    '[class.mat-drawer-end]': 'position === \"end\"',\n    '[class.mat-drawer-over]': 'mode === \"over\"',\n    '[class.mat-drawer-push]': 'mode === \"push\"',\n    '[class.mat-drawer-side]': 'mode === \"side\"',\n    '[class.mat-drawer-opened]': 'opened',\n    'tabIndex': '-1',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestroy {\n  private _focusTrap: FocusTrap;\n  private _elementFocusedBeforeDrawerWasOpened: HTMLElement | null = null;\n\n  /** Whether the drawer is initialized. Used for disabling the initial animation. */\n  private _enableAnimations = false;\n\n  /** The side that the drawer is attached to. */\n  @Input()\n  get position(): 'start' | 'end' { return this._position; }\n  set position(value: 'start' | 'end') {\n    // Make sure we have a valid value.\n    value = value === 'end' ? 'end' : 'start';\n    if (value != this._position) {\n      this._position = value;\n      this.onPositionChanged.emit();\n    }\n  }\n  private _position: 'start' | 'end' = 'start';\n\n  /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n  @Input()\n  get mode(): MatDrawerMode { return this._mode; }\n  set mode(value: MatDrawerMode) {\n    this._mode = value;\n    this._updateFocusTrapState();\n    this._modeChanged.next();\n  }\n  private _mode: MatDrawerMode = 'over';\n\n  /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n  @Input()\n  get disableClose(): boolean { return this._disableClose; }\n  set disableClose(value: boolean) { this._disableClose = coerceBooleanProperty(value); }\n  private _disableClose: boolean = false;\n\n  /**\n   * Whether the drawer should focus the first focusable element automatically when opened.\n   * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n   * enabled, focus will be moved into the sidenav in `side` mode as well.\n   * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget\n   * instead.\n   */\n  @Input()\n  get autoFocus(): AutoFocusTarget | string | boolean {\n    const value = this._autoFocus;\n\n    // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,\n    // because we don't know how the sidenav is being used, but in some cases it still makes\n    // sense to do it. The consumer can explicitly set `autoFocus`.\n    if (value == null) {\n      if (this.mode === 'side') {\n        return 'dialog';\n      } else {\n        return 'first-tabbable';\n      }\n    }\n    return value;\n  }\n  set autoFocus(value: AutoFocusTarget | string | boolean) {\n      if (value === 'true' || value === 'false') {\n          value = coerceBooleanProperty(value);\n      }\n      this._autoFocus = value;\n  }\n  private _autoFocus: AutoFocusTarget | string | boolean | undefined;\n\n  /**\n   * Whether the drawer is opened. We overload this because we trigger an event when it\n   * starts or end.\n   */\n  @Input()\n  get opened(): boolean { return this._opened; }\n  set opened(value: boolean) { this.toggle(coerceBooleanProperty(value)); }\n  private _opened: boolean = false;\n\n  /** How the sidenav was opened (keypress, mouse click etc.) */\n  private _openedVia: FocusOrigin | null;\n\n  /** Emits whenever the drawer has started animating. */\n  readonly _animationStarted = new Subject<AnimationEvent>();\n\n  /** Emits whenever the drawer is done animating. */\n  readonly _animationEnd = new Subject<AnimationEvent>();\n\n  /** Current state of the sidenav animation. */\n  // @HostBinding is used in the class as it is expected to be extended.  Since @Component decorator\n  // metadata is not inherited by child classes, instead the host binding data is defined in a way\n  // that can be inherited.\n  // tslint:disable-next-line:no-host-decorator-in-concrete\n  @HostBinding('@transform')\n  _animationState: 'open-instant' | 'open' | 'void' = 'void';\n\n  /** Event emitted when the drawer open state is changed. */\n  @Output() readonly openedChange: EventEmitter<boolean> =\n      // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n      new EventEmitter<boolean>(/* isAsync */true);\n\n  /** Event emitted when the drawer has been opened. */\n  @Output('opened')\n  readonly _openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n\n  /** Event emitted when the drawer has started opening. */\n  @Output()\n  readonly openedStart: Observable<void> = this._animationStarted.pipe(\n    filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0),\n    mapTo(undefined)\n  );\n\n  /** Event emitted when the drawer has been closed. */\n  @Output('closed')\n  readonly _closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n\n  /** Event emitted when the drawer has started closing. */\n  @Output()\n  readonly closedStart: Observable<void> = this._animationStarted.pipe(\n    filter(e => e.fromState !== e.toState && e.toState === 'void'),\n    mapTo(undefined)\n  );\n\n  /** Emits when the component is destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** Event emitted when the drawer's position changes. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output('positionChanged') readonly onPositionChanged = new EventEmitter<void>();\n\n  /**\n   * An observable that emits when the drawer mode changes. This is used by the drawer container to\n   * to know when to when the mode changes so it can adapt the margins on the content.\n   */\n  readonly _modeChanged = new Subject<void>();\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              private _focusTrapFactory: FocusTrapFactory,\n              private _focusMonitor: FocusMonitor,\n              private _platform: Platform,\n              private _ngZone: NgZone,\n              private readonly _interactivityChecker: InteractivityChecker,\n              @Optional() @Inject(DOCUMENT) private _doc: any,\n              @Optional() @Inject(MAT_DRAWER_CONTAINER) public _container?: MatDrawerContainer) {\n\n    this.openedChange.subscribe((opened: boolean) => {\n      if (opened) {\n        if (this._doc) {\n          this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement as HTMLElement;\n        }\n\n        this._takeFocus();\n      } else if (this._isFocusWithinDrawer()) {\n        this._restoreFocus(this._openedVia || 'program');\n      }\n    });\n\n    /**\n     * Listen to `keydown` events outside the zone so that change detection is not run every\n     * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n     * and we don't have close disabled.\n     */\n    this._ngZone.runOutsideAngular(() => {\n        (fromEvent(this._elementRef.nativeElement, 'keydown') as Observable<KeyboardEvent>).pipe(\n            filter(event => {\n              return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n            }),\n            takeUntil(this._destroyed)\n        ).subscribe(event => this._ngZone.run(() => {\n            this.close();\n            event.stopPropagation();\n            event.preventDefault();\n        }));\n    });\n\n    // We need a Subject with distinctUntilChanged, because the `done` event\n    // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n    this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n      return x.fromState === y.fromState && x.toState === y.toState;\n    })).subscribe((event: AnimationEvent) => {\n      const {fromState, toState} = event;\n\n      if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n          (toState === 'void' && fromState.indexOf('open') === 0)) {\n        this.openedChange.emit(this._opened);\n      }\n    });\n  }\n\n  /**\n   * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n   * attribute to forcefully focus it. The attribute is removed after focus is moved.\n   * @param element The element to focus.\n   */\n  private _forceFocus(element: HTMLElement, options?: FocusOptions) {\n    if (!this._interactivityChecker.isFocusable(element)) {\n      element.tabIndex = -1;\n      // The tabindex attribute should be removed to avoid navigating to that element again\n      this._ngZone.runOutsideAngular(() => {\n        element.addEventListener('blur', () => element.removeAttribute('tabindex'));\n        element.addEventListener('mousedown', () => element.removeAttribute('tabindex'));\n      });\n    }\n    element.focus(options);\n  }\n\n  /**\n   * Focuses the first element that matches the given selector within the focus trap.\n   * @param selector The CSS selector for the element to set focus to.\n   */\n  private _focusByCssSelector(selector: string, options?: FocusOptions) {\n    let elementToFocus =\n      this._elementRef.nativeElement.querySelector(selector) as HTMLElement | null;\n    if (elementToFocus) {\n      this._forceFocus(elementToFocus, options);\n    }\n  }\n\n  /**\n   * Moves focus into the drawer. Note that this works even if\n   * the focus trap is disabled in `side` mode.\n   */\n  private _takeFocus() {\n    if (!this._focusTrap) {\n      return;\n    }\n\n    const element = this._elementRef.nativeElement;\n\n    // When autoFocus is not on the sidenav, if the element cannot be focused or does\n    // not exist, focus the sidenav itself so the keyboard navigation still works.\n    // We need to check that `focus` is a function due to Universal.\n    switch (this.autoFocus) {\n      case false:\n      case 'dialog':\n        return;\n      case true:\n      case 'first-tabbable':\n        this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n          if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n            element.focus();\n          }\n        });\n        break;\n      case 'first-heading':\n        this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n        break;\n      default:\n        this._focusByCssSelector(this.autoFocus!);\n        break;\n    }\n  }\n\n  /**\n   * Restores focus to the element that was originally focused when the drawer opened.\n   * If no element was focused at that time, the focus will be restored to the drawer.\n   */\n  private _restoreFocus(focusOrigin: Exclude<FocusOrigin, null>) {\n    if (this.autoFocus === 'dialog') {\n      return;\n    }\n\n    if (this._elementFocusedBeforeDrawerWasOpened) {\n      this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);\n    } else {\n      this._elementRef.nativeElement.blur();\n    }\n\n    this._elementFocusedBeforeDrawerWasOpened = null;\n  }\n\n  /** Whether focus is currently within the drawer. */\n  private _isFocusWithinDrawer(): boolean {\n    const activeEl = this._doc?.activeElement;\n    return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n  }\n\n  ngAfterContentInit() {\n    this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n    this._updateFocusTrapState();\n  }\n\n  ngAfterContentChecked() {\n    // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n    // drawers that are open by default. When we're on the server, we shouldn't enable the\n    // animations, because we don't want the drawer to animate the first time the user sees\n    // the page.\n    if (this._platform.isBrowser) {\n      this._enableAnimations = true;\n    }\n  }\n\n  ngOnDestroy() {\n    if (this._focusTrap) {\n      this._focusTrap.destroy();\n    }\n\n    this._animationStarted.complete();\n    this._animationEnd.complete();\n    this._modeChanged.complete();\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /**\n   * Open the drawer.\n   * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n   * Used for focus management after the sidenav is closed.\n   */\n  open(openedVia?: FocusOrigin): Promise<MatDrawerToggleResult> {\n    return this.toggle(true, openedVia);\n  }\n\n  /** Close the drawer. */\n  close(): Promise<MatDrawerToggleResult> {\n    return this.toggle(false);\n  }\n\n  /** Closes the drawer with context that the backdrop was clicked. */\n  _closeViaBackdropClick(): Promise<MatDrawerToggleResult> {\n    // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n    // don't need to check whether focus is currently in the drawer, as clicking on the\n    // backdrop causes blurs the active element.\n    return this._setOpen(/* isOpen */ false, /* restoreFocus */ true, 'mouse');\n  }\n\n  /**\n   * Toggle this drawer.\n   * @param isOpen Whether the drawer should be open.\n   * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n   * Used for focus management after the sidenav is closed.\n   */\n  toggle(isOpen: boolean = !this.opened, openedVia?: FocusOrigin)\n      : Promise<MatDrawerToggleResult> {\n    // If the focus is currently inside the drawer content and we are closing the drawer,\n    // restore the focus to the initially focused element (when the drawer opened).\n    if (isOpen && openedVia) {\n      this._openedVia = openedVia;\n    }\n\n    const result = this._setOpen(isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(),\n      this._openedVia || 'program');\n\n    if (!isOpen) {\n      this._openedVia = null;\n    }\n\n    return result;\n  }\n\n  /**\n   * Toggles the opened state of the drawer.\n   * @param isOpen Whether the drawer should open or close.\n   * @param restoreFocus Whether focus should be restored on close.\n   * @param focusOrigin Origin to use when restoring focus.\n   */\n  private _setOpen(isOpen: boolean, restoreFocus: boolean, focusOrigin: Exclude<FocusOrigin, null>):\n    Promise<MatDrawerToggleResult> {\n    this._opened = isOpen;\n\n    if (isOpen) {\n      this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n    } else {\n      this._animationState = 'void';\n      if (restoreFocus) {\n        this._restoreFocus(focusOrigin);\n      }\n    }\n\n    this._updateFocusTrapState();\n\n    return new Promise<MatDrawerToggleResult>(resolve => {\n      this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n    });\n  }\n\n  _getWidth(): number {\n    return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n  }\n\n  /** Updates the enabled state of the focus trap. */\n  private _updateFocusTrapState() {\n    if (this._focusTrap) {\n      // The focus trap is only enabled when the drawer is open in any mode other than side.\n      this._focusTrap.enabled = this.opened && this.mode !== 'side';\n    }\n  }\n\n  // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n  // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n  // ViewEngine they're overwritten.\n  // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n  // tslint:disable-next-line:no-host-decorator-in-concrete\n  @HostListener('@transform.start', ['$event'])\n  _animationStartListener(event: AnimationEvent) {\n    this._animationStarted.next(event);\n  }\n\n  // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n  // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n  // ViewEngine they're overwritten.\n  // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n  // tslint:disable-next-line:no-host-decorator-in-concrete\n  @HostListener('@transform.done', ['$event'])\n  _animationDoneListener(event: AnimationEvent) {\n    this._animationEnd.next(event);\n  }\n\n  static ngAcceptInputType_disableClose: BooleanInput;\n  static ngAcceptInputType_autoFocus: AutoFocusTarget | string | BooleanInput;\n  static ngAcceptInputType_opened: BooleanInput;\n}\n\n\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\n@Component({\n  selector: 'mat-drawer-container',\n  exportAs: 'matDrawerContainer',\n  templateUrl: 'drawer-container.html',\n  styleUrls: ['drawer.css'],\n  host: {\n    'class': 'mat-drawer-container',\n    '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [{\n    provide: MAT_DRAWER_CONTAINER,\n    useExisting: MatDrawerContainer\n  }]\n})\nexport class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy {\n  /** All drawers in the container. Includes drawers from inside nested containers. */\n  @ContentChildren(MatDrawer, {\n    // We need to use `descendants: true`, because Ivy will no longer match\n    // indirect descendants if it's left as false.\n    descendants: true\n  })\n  _allDrawers: QueryList<MatDrawer>;\n\n  /** Drawers that belong to this container. */\n  _drawers = new QueryList<MatDrawer>();\n\n  @ContentChild(MatDrawerContent) _content: MatDrawerContent;\n  @ViewChild(MatDrawerContent) _userContent: MatDrawerContent;\n\n  /** The drawer child with the `start` position. */\n  get start(): MatDrawer | null { return this._start; }\n\n  /** The drawer child with the `end` position. */\n  get end(): MatDrawer | null { return this._end; }\n\n  /**\n   * Whether to automatically resize the container whenever\n   * the size of any of its drawers changes.\n   *\n   * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n   * the drawers on every change detection cycle. Can be configured globally via the\n   * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n   */\n  @Input()\n  get autosize(): boolean { return this._autosize; }\n  set autosize(value: boolean) { this._autosize = coerceBooleanProperty(value); }\n  private _autosize: boolean;\n\n  /**\n   * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n   * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n   * mode as well.\n   */\n  @Input()\n  get hasBackdrop() {\n    if (this._backdropOverride == null) {\n      return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n    }\n\n    return this._backdropOverride;\n  }\n  set hasBackdrop(value: any) {\n    this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n  }\n  _backdropOverride: boolean | null;\n\n  /** Event emitted when the drawer backdrop is clicked. */\n  @Output() readonly backdropClick: EventEmitter<void> = new EventEmitter<void>();\n\n  /** The drawer at the start/end position, independent of direction. */\n  private _start: MatDrawer | null;\n  private _end: MatDrawer | null;\n\n  /**\n   * The drawer at the left/right. When direction changes, these will change as well.\n   * They're used as aliases for the above to set the left/right style properly.\n   * In LTR, _left == _start and _right == _end.\n   * In RTL, _left == _end and _right == _start.\n   */\n  private _left: MatDrawer | null;\n  private _right: MatDrawer | null;\n\n  /** Emits when the component is destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** Emits on every ngDoCheck. Used for debouncing reflows. */\n  private readonly _doCheckSubject = new Subject<void>();\n\n  /**\n   * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n   * drawer is open. We use margin rather than transform even for push mode because transform breaks\n   * fixed position elements inside of the transformed element.\n   */\n  _contentMargins: {left: number|null, right: number|null} = {left: null, right: null};\n\n  readonly _contentMarginChanges = new Subject<{left: number|null, right: number|null}>();\n\n  /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n  get scrollable(): CdkScrollable {\n    return this._userContent || this._content;\n  }\n\n  constructor(@Optional() private _dir: Directionality,\n              private _element: ElementRef<HTMLElement>,\n              private _ngZone: NgZone,\n              private _changeDetectorRef: ChangeDetectorRef,\n              viewportRuler: ViewportRuler,\n              @Inject(MAT_DRAWER_DEFAULT_AUTOSIZE) defaultAutosize = false,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    // If a `Dir` directive exists up the tree, listen direction changes\n    // and update the left/right properties to point to the proper start/end.\n    if (_dir) {\n      _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n        this._validateDrawers();\n        this.updateContentMargins();\n      });\n    }\n\n    // Since the minimum width of the sidenav depends on the viewport width,\n    // we need to recompute the margins if the viewport changes.\n    viewportRuler.change()\n      .pipe(takeUntil(this._destroyed))\n      .subscribe(() => this.updateContentMargins());\n\n    this._autosize = defaultAutosize;\n  }\n\n  ngAfterContentInit() {\n    this._allDrawers.changes\n      .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n      .subscribe((drawer: QueryList<MatDrawer>) => {\n        this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n        this._drawers.notifyOnChanges();\n      });\n\n    this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n      this._validateDrawers();\n\n      this._drawers.forEach((drawer: MatDrawer) => {\n        this._watchDrawerToggle(drawer);\n        this._watchDrawerPosition(drawer);\n        this._watchDrawerMode(drawer);\n      });\n\n      if (!this._drawers.length ||\n          this._isDrawerOpen(this._start) ||\n          this._isDrawerOpen(this._end)) {\n        this.updateContentMargins();\n      }\n\n      this._changeDetectorRef.markForCheck();\n    });\n\n    // Avoid hitting the NgZone through the debounce timeout.\n    this._ngZone.runOutsideAngular(() => {\n      this._doCheckSubject.pipe(\n        debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n        takeUntil(this._destroyed)\n      ).subscribe(() => this.updateContentMargins());\n    });\n  }\n\n  ngOnDestroy() {\n    this._contentMarginChanges.complete();\n    this._doCheckSubject.complete();\n    this._drawers.destroy();\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** Calls `open` of both start and end drawers */\n  open(): void {\n    this._drawers.forEach(drawer => drawer.open());\n  }\n\n  /** Calls `close` of both start and end drawers */\n  close(): void {\n    this._drawers.forEach(drawer => drawer.close());\n  }\n\n  /**\n   * Recalculates and updates the inline styles for the content. Note that this should be used\n   * sparingly, because it causes a reflow.\n   */\n  updateContentMargins() {\n    // 1. For drawers in `over` mode, they don't affect the content.\n    // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n    //    left margin (for left drawer) or right margin (for right the drawer).\n    // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n    //    adding to the left or right margin and simultaneously subtracting the same amount of\n    //    margin from the other side.\n    let left = 0;\n    let right = 0;\n\n    if (this._left && this._left.opened) {\n      if (this._left.mode == 'side') {\n        left += this._left._getWidth();\n      } else if (this._left.mode == 'push') {\n        const width = this._left._getWidth();\n        left += width;\n        right -= width;\n      }\n    }\n\n    if (this._right && this._right.opened) {\n      if (this._right.mode == 'side') {\n        right += this._right._getWidth();\n      } else if (this._right.mode == 'push') {\n        const width = this._right._getWidth();\n        right += width;\n        left -= width;\n      }\n    }\n\n    // If either `right` or `left` is zero, don't set a style to the element. This\n    // allows users to specify a custom size via CSS class in SSR scenarios where the\n    // measured widths will always be zero. Note that we reset to `null` here, rather\n    // than below, in order to ensure that the types in the `if` below are consistent.\n    left = left || null!;\n    right = right || null!;\n\n    if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n      this._contentMargins = {left, right};\n\n      // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n      // to do it only when something changed, otherwise we can end up hitting the zone too often.\n      this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n    }\n  }\n\n  ngDoCheck() {\n    // If users opted into autosizing, do a check every change detection cycle.\n    if (this._autosize && this._isPushed()) {\n      // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n      this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n    }\n  }\n\n  /**\n   * Subscribes to drawer events in order to set a class on the main container element when the\n   * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n   * is properly hidden.\n   */\n  private _watchDrawerToggle(drawer: MatDrawer): void {\n    drawer._animationStarted.pipe(\n      filter((event: AnimationEvent) => event.fromState !== event.toState),\n      takeUntil(this._drawers.changes),\n    )\n    .subscribe((event: AnimationEvent) => {\n      // Set the transition class on the container so that the animations occur. This should not\n      // be set initially because animations should only be triggered via a change in state.\n      if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n        this._element.nativeElement.classList.add('mat-drawer-transition');\n      }\n\n      this.updateContentMargins();\n      this._changeDetectorRef.markForCheck();\n    });\n\n    if (drawer.mode !== 'side') {\n      drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() =>\n          this._setContainerClass(drawer.opened));\n    }\n  }\n\n  /**\n   * Subscribes to drawer onPositionChanged event in order to\n   * re-validate drawers when the position changes.\n   */\n  private _watchDrawerPosition(drawer: MatDrawer): void {\n    if (!drawer) {\n      return;\n    }\n    // NOTE: We need to wait for the microtask queue to be empty before validating,\n    // since both drawers may be swapping positions at the same time.\n    drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n      this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n        this._validateDrawers();\n      });\n    });\n  }\n\n  /** Subscribes to changes in drawer mode so we can run change detection. */\n  private _watchDrawerMode(drawer: MatDrawer): void {\n    if (drawer) {\n      drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n        .subscribe(() => {\n          this.updateContentMargins();\n          this._changeDetectorRef.markForCheck();\n        });\n    }\n  }\n\n  /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n  private _setContainerClass(isAdd: boolean): void {\n    const classList = this._element.nativeElement.classList;\n    const className = 'mat-drawer-container-has-open';\n\n    if (isAdd) {\n      classList.add(className);\n    } else {\n      classList.remove(className);\n    }\n  }\n\n  /** Validate the state of the drawer children components. */\n  private _validateDrawers() {\n    this._start = this._end = null;\n\n    // Ensure that we have at most one start and one end drawer.\n    this._drawers.forEach(drawer => {\n      if (drawer.position == 'end') {\n        if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n          throwMatDuplicatedDrawerError('end');\n        }\n        this._end = drawer;\n      } else {\n        if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n          throwMatDuplicatedDrawerError('start');\n        }\n        this._start = drawer;\n      }\n    });\n\n    this._right = this._left = null;\n\n    // Detect if we're LTR or RTL.\n    if (this._dir && this._dir.value === 'rtl') {\n      this._left = this._end;\n      this._right = this._start;\n    } else {\n      this._left = this._start;\n      this._right = this._end;\n    }\n  }\n\n  /** Whether the container is being pushed to the side by one of the drawers. */\n  private _isPushed() {\n    return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n           (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n  }\n\n  _onBackdropClicked() {\n    this.backdropClick.emit();\n    this._closeModalDrawersViaBackdrop();\n  }\n\n  _closeModalDrawersViaBackdrop() {\n    // Close all open drawers where closing is not disabled and the mode is not `side`.\n    [this._start, this._end]\n      .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n      .forEach(drawer => drawer!._closeViaBackdropClick());\n  }\n\n  _isShowingBackdrop(): boolean {\n    return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n           (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n  }\n\n  private _canHaveBackdrop(drawer: MatDrawer): boolean {\n    return drawer.mode !== 'side' || !!this._backdropOverride;\n  }\n\n  private _isDrawerOpen(drawer: MatDrawer | null): drawer is MatDrawer {\n    return drawer != null && drawer.opened;\n  }\n\n  static ngAcceptInputType_autosize: BooleanInput;\n  static ngAcceptInputType_hasBackdrop: BooleanInput;\n}\n","<div class=\"mat-drawer-inner-container\" cdkScrollable>\r\n  <ng-content></ng-content>\r\n</div>\r\n","<div class=\"mat-drawer-backdrop\" (click)=\"_onBackdropClicked()\" *ngIf=\"hasBackdrop\"\n     [class.mat-drawer-shown]=\"_isShowingBackdrop()\"></div>\n\n<ng-content select=\"mat-drawer\"></ng-content>\n\n<ng-content select=\"mat-drawer-content\">\n</ng-content>\n<mat-drawer-content *ngIf=\"!_content\">\n  <ng-content></ng-content>\n</mat-drawer-content>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  forwardRef,\n  Inject,\n  Input,\n  ViewEncapsulation,\n  QueryList,\n  ElementRef,\n  NgZone,\n} from '@angular/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent, MAT_DRAWER_CONTAINER} from './drawer';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {\n  BooleanInput,\n  coerceBooleanProperty,\n  coerceNumberProperty,\n  NumberInput\n} from '@angular/cdk/coercion';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\n\n\n@Component({\n  selector: 'mat-sidenav-content',\n  template: '<ng-content></ng-content>',\n  host: {\n    'class': 'mat-drawer-content mat-sidenav-content',\n    '[style.margin-left.px]': '_container._contentMargins.left',\n    '[style.margin-right.px]': '_container._contentMargins.right',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContent extends MatDrawerContent {\n  constructor(\n      changeDetectorRef: ChangeDetectorRef,\n      @Inject(forwardRef(() => MatSidenavContainer)) container: MatSidenavContainer,\n      elementRef: ElementRef<HTMLElement>,\n      scrollDispatcher: ScrollDispatcher,\n      ngZone: NgZone) {\n    super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n  }\n}\n\n\n@Component({\n  selector: 'mat-sidenav',\n  exportAs: 'matSidenav',\n  templateUrl: 'drawer.html',\n  animations: [matDrawerAnimations.transformDrawer],\n  host: {\n    'class': 'mat-drawer mat-sidenav',\n    'tabIndex': '-1',\n    // must prevent the browser from aligning text based on value\n    '[attr.align]': 'null',\n    '[class.mat-drawer-end]': 'position === \"end\"',\n    '[class.mat-drawer-over]': 'mode === \"over\"',\n    '[class.mat-drawer-push]': 'mode === \"push\"',\n    '[class.mat-drawer-side]': 'mode === \"side\"',\n    '[class.mat-drawer-opened]': 'opened',\n    '[class.mat-sidenav-fixed]': 'fixedInViewport',\n    '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n    '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenav extends MatDrawer {\n  /** Whether the sidenav is fixed in the viewport. */\n  @Input()\n  get fixedInViewport(): boolean { return this._fixedInViewport; }\n  set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n  private _fixedInViewport = false;\n\n  /**\n   * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n   * mode.\n   */\n  @Input()\n  get fixedTopGap(): number { return this._fixedTopGap; }\n  set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n  private _fixedTopGap = 0;\n\n  /**\n   * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n   * fixed mode.\n   */\n  @Input()\n  get fixedBottomGap(): number { return this._fixedBottomGap; }\n  set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n  private _fixedBottomGap = 0;\n\n  static ngAcceptInputType_fixedInViewport: BooleanInput;\n  static ngAcceptInputType_fixedTopGap: NumberInput;\n  static ngAcceptInputType_fixedBottomGap: NumberInput;\n}\n\n\n@Component({\n  selector: 'mat-sidenav-container',\n  exportAs: 'matSidenavContainer',\n  templateUrl: 'sidenav-container.html',\n  styleUrls: ['drawer.css'],\n  host: {\n    'class': 'mat-drawer-container mat-sidenav-container',\n    '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  providers: [{\n    provide: MAT_DRAWER_CONTAINER,\n    useExisting: MatSidenavContainer\n  }]\n\n})\nexport class MatSidenavContainer extends MatDrawerContainer {\n  @ContentChildren(MatSidenav, {\n    // We need to use `descendants: true`, because Ivy will no longer match\n    // indirect descendants if it's left as false.\n    descendants: true\n  })\n  override _allDrawers: QueryList<MatSidenav>;\n\n  @ContentChild(MatSidenavContent) override _content: MatSidenavContent;\n}\n","<div class=\"mat-drawer-backdrop\" (click)=\"_onBackdropClicked()\" *ngIf=\"hasBackdrop\"\n     [class.mat-drawer-shown]=\"_isShowingBackdrop()\"></div>\n\n<ng-content select=\"mat-sidenav\"></ng-content>\n\n<ng-content select=\"mat-sidenav-content\">\n</ng-content>\n<mat-sidenav-content *ngIf=\"!_content\" cdkScrollable>\n  <ng-content></ng-content>\n</mat-sidenav-content>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {MatSidenav, MatSidenavContainer, MatSidenavContent} from './sidenav';\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatCommonModule,\n    PlatformModule,\n    CdkScrollableModule,\n  ],\n  exports: [\n    CdkScrollableModule,\n    MatCommonModule,\n    MatDrawer,\n    MatDrawerContainer,\n    MatDrawerContent,\n    MatSidenav,\n    MatSidenavContainer,\n    MatSidenavContent,\n  ],\n  declarations: [\n    MatDrawer,\n    MatDrawerContainer,\n    MatDrawerContent,\n    MatSidenav,\n    MatSidenavContainer,\n    MatSidenavContent,\n  ],\n})\nexport class MatSidenavModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sidenav-module';\nexport {\n  throwMatDuplicatedDrawerError,\n  MatDrawerToggleResult,\n  MAT_DRAWER_DEFAULT_AUTOSIZE,\n  MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n  MatDrawerContent,\n  MatDrawer,\n  MatDrawerContainer,\n  MatDrawerMode,\n} from './drawer';\nexport * from './sidenav';\nexport * from './drawer-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAgBA;;;;MAIa,mBAAmB,GAE5B;;IAEF,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE;;;;;QAKpC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;YAChC,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,SAAS;SACxB,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;;YAElB,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,QAAQ;SACvB,CAAC,CAAC;QACH,UAAU,CAAC,sBAAsB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,UAAU,CAAC,qCAAqC,EAC5C,OAAO,CAAC,wCAAwC,CAAC,CAAC;KACvD,CAAC;;;ACoBJ;;;;SAIgB,6BAA6B,CAAC,QAAgB;IAC5D,MAAM,KAAK,CAAC,gDAAgD,QAAQ,IAAI,CAAC,CAAC;AAC5E,CAAC;AAWD;MACa,2BAA2B,GACpC,IAAI,cAAc,CAAU,6BAA6B,EAAE;IACzD,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,mCAAmC;CAC7C,EAAE;AAGP;;;;AAIO,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAC,sBAAsB,CAAC,CAAC;AAE/E;SACgB,mCAAmC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;MAaY,gBAAiB,SAAQ,aAAa;IACjD,YACY,kBAAqC,EACQ,UAA8B,EACnF,UAAmC,EACnC,gBAAkC,EAClC,MAAc;QAChB,KAAK,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QALlC,uBAAkB,GAAlB,kBAAkB,CAAmB;QACQ,eAAU,GAAV,UAAU,CAAoB;KAKtF;IAED,kBAAkB;QAChB,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC;YAC9C,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC,CAAC,CAAC;KACJ;;qHAdU,gBAAgB,mDAGf,UAAU,CAAC,MAAM,kBAAkB,CAAC;yGAHrC,gBAAgB,yQATjB,2BAA2B;mGAS1B,gBAAgB;kBAX5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE,2BAA2B;oBACrC,IAAI,EAAE;wBACJ,OAAO,EAAE,oBAAoB;wBAC7B,wBAAwB,EAAE,iCAAiC;wBAC3D,yBAAyB,EAAE,kCAAkC;qBAC9D;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACtC;0FAIsE,kBAAkB;0BAAlF,MAAM;2BAAC,UAAU,CAAC,MAAM,kBAAkB,CAAC;;AAelD;;;MAsBa,SAAS;IAqIpB,YAAoB,WAAoC,EACpC,iBAAmC,EACnC,aAA2B,EAC3B,SAAmB,EACnB,OAAe,EACN,qBAA2C,EACtB,IAAS,EACE,UAA+B;QAPxE,gBAAW,GAAX,WAAW,CAAyB;QACpC,sBAAiB,GAAjB,iBAAiB,CAAkB;QACnC,kBAAa,GAAb,aAAa,CAAc;QAC3B,cAAS,GAAT,SAAS,CAAU;QACnB,YAAO,GAAP,OAAO,CAAQ;QACN,0BAAqB,GAArB,qBAAqB,CAAsB;QACtB,SAAI,GAAJ,IAAI,CAAK;QACE,eAAU,GAAV,UAAU,CAAqB;QA1IpF,yCAAoC,GAAuB,IAAI,CAAC;;QAGhE,sBAAiB,GAAG,KAAK,CAAC;QAa1B,cAAS,GAAoB,OAAO,CAAC;QAUrC,UAAK,GAAkB,MAAM,CAAC;QAM9B,kBAAa,GAAY,KAAK,CAAC;QAwC/B,YAAO,GAAY,KAAK,CAAC;;QAMxB,sBAAiB,GAAG,IAAI,OAAO,EAAkB,CAAC;;QAGlD,kBAAa,GAAG,IAAI,OAAO,EAAkB,CAAC;;;;;;QAQvD,oBAAe,GAAqC,MAAM,CAAC;;QAGxC,iBAAY;;QAE3B,IAAI,YAAY,eAAuB,IAAI,CAAC,CAAC;;QAIxC,kBAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,SAAQ,CAAC,CAAC,CAAC;;QAItE,gBAAW,GAAqB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAClE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACzE,KAAK,CAAC,SAAS,CAAC,CACjB,CAAC;;QAIO,kBAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,SAAQ,CAAC,CAAC,CAAC;;QAIvE,gBAAW,GAAqB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAClE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,EAC9D,KAAK,CAAC,SAAS,CAAC,CACjB,CAAC;;QAGe,eAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;;;QAId,sBAAiB,GAAG,IAAI,YAAY,EAAQ,CAAC;;;;;QAMxE,iBAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;QAW1C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAe;YAC1C,IAAI,MAAM,EAAE;gBACV,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,IAAI,CAAC,aAA4B,CAAC;iBACpF;gBAED,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;iBAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;aAClD;SACF,CAAC,CAAC;;;;;;QAOH,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAA+B,CAAC,IAAI,CACpF,MAAM,CAAC,KAAK;gBACV,OAAO,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aACjF,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBAClC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B,CAAC,CAAC,CAAC;SACP,CAAC,CAAC;;;QAIH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC;SAC/D,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAqB;YAClC,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,GAAG,KAAK,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,MAAM;iBACrD,OAAO,KAAK,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtC;SACF,CAAC,CAAC;KACJ;;IAhLD,IACI,QAAQ,KAAsB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;IAC1D,IAAI,QAAQ,CAAC,KAAsB;;QAEjC,KAAK,GAAG,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;QAC1C,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;SAC/B;KACF;;IAID,IACI,IAAI,KAAoB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IAChD,IAAI,IAAI,CAAC,KAAoB;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;;IAID,IACI,YAAY,KAAc,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IAC1D,IAAI,YAAY,CAAC,KAAc,IAAI,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;;;;IAUvF,IACI,SAAS;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;;;;QAK9B,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBACxB,OAAO,QAAQ,CAAC;aACjB;iBAAM;gBACL,OAAO,gBAAgB,CAAC;aACzB;SACF;QACD,OAAO,KAAK,CAAC;KACd;IACD,IAAI,SAAS,CAAC,KAAyC;QACnD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE;YACvC,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;;;;;IAOD,IACI,MAAM,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;IAC9C,IAAI,MAAM,CAAC,KAAc,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;IAsHjE,WAAW,CAAC,OAAoB,EAAE,OAAsB;QAC9D,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;YACpD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;YAEtB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAC7B,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC5E,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;aAClF,CAAC,CAAC;SACJ;QACD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KACxB;;;;;IAMO,mBAAmB,CAAC,QAAgB,EAAE,OAAsB;QAClE,IAAI,cAAc,GAChB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAuB,CAAC;QAC/E,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;SAC3C;KACF;;;;;IAMO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;;;;QAK/C,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ;gBACX,OAAO;YACT,KAAK,IAAI,CAAC;YACV,KAAK,gBAAgB;gBACnB,IAAI,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,IAAI,CAAC,aAAa;oBAC/D,IAAI,CAAC,aAAa,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,KAAK,UAAU,EAAE;wBAChF,OAAO,CAAC,KAAK,EAAE,CAAC;qBACjB;iBACF,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,CAAC,mBAAmB,CAAC,0CAA0C,CAAC,CAAC;gBACrE,MAAM;YACR;gBACE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;gBAC1C,MAAM;SACT;KACF;;;;;IAMO,aAAa,CAAC,WAAuC;QAC3D,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC/B,OAAO;SACR;QAED,IAAI,IAAI,CAAC,oCAAoC,EAAE;YAC7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,oCAAoC,EAAE,WAAW,CAAC,CAAC;SACrF;aAAM;YACL,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;SACvC;QAED,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC;KAClD;;IAGO,oBAAoB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACxE;IAED,kBAAkB;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,qBAAqB;;;;;QAKnB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;KACF;IAED,WAAW;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC5B;;;;;;IAOD,IAAI,CAAC,SAAuB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACrC;;IAGD,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3B;;IAGD,sBAAsB;;;;QAIpB,OAAO,IAAI,CAAC,QAAQ,cAAc,KAAK,qBAAqB,IAAI,EAAE,OAAO,CAAC,CAAC;KAC5E;;;;;;;IAQD,MAAM,CAAC,SAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAuB;;;QAI5D,IAAI,MAAM,IAAI,SAAS,EAAE;YACvB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,qBAAqB,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAC5F,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;QAED,OAAO,MAAM,CAAC;KACf;;;;;;;IAQO,QAAQ,CAAC,MAAe,EAAE,YAAqB,EAAE,WAAuC;QAE9F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,GAAG,MAAM,GAAG,cAAc,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;YAC9B,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;aACjC;SACF;QAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,OAAO,IAAI,OAAO,CAAwB,OAAO;YAC/C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;SACrF,CAAC,CAAC;KACJ;IAED,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/F;;IAGO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEnB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SAC/D;KACF;;;;;;IAQD,uBAAuB,CAAC,KAAqB;QAC3C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;;;;;;IAQD,sBAAsB,CAAC,KAAqB;QAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;;8GAnZU,SAAS,0LA2IY,QAAQ,6BACR,oBAAoB;kGA5IzC,SAAS,82BCpJtB,uGAGA,uGDkIc,CAAC,mBAAmB,CAAC,eAAe,CAAC;mGAetC,SAAS;kBAnBrB,SAAS;+BACE,YAAY,YACZ,WAAW,cAET,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAC3C;wBACJ,OAAO,EAAE,YAAY;;wBAErB,cAAc,EAAE,MAAM;wBACtB,wBAAwB,EAAE,oBAAoB;wBAC9C,yBAAyB,EAAE,iBAAiB;wBAC5C,yBAAyB,EAAE,iBAAiB;wBAC5C,yBAAyB,EAAE,iBAAiB;wBAC5C,2BAA2B,EAAE,QAAQ;wBACrC,UAAU,EAAE,IAAI;qBACjB,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;;0BA6IxB,QAAQ;;0BAAI,MAAM;2BAAC,QAAQ;8BACkC,kBAAkB;0BAA/E,QAAQ;;0BAAI,MAAM;2BAAC,oBAAoB;4CAnIhD,QAAQ;sBADX,KAAK;gBAcF,IAAI;sBADP,KAAK;gBAWF,YAAY;sBADf,KAAK;gBAaF,SAAS;sBADZ,KAAK;gBA6BF,MAAM;sBADT,KAAK;gBAoBN,eAAe;sBADd,WAAW;uBAAC,YAAY;gBAIN,YAAY;sBAA9B,MAAM;gBAME,aAAa;sBADrB,MAAM;uBAAC,QAAQ;gBAKP,WAAW;sBADnB,MAAM;gBAQE,aAAa;sBADrB,MAAM;uBAAC,QAAQ;gBAKP,WAAW;sBADnB,MAAM;gBAW6B,iBAAiB;sBAApD,MAAM;uBAAC,iBAAiB;gBA0QzB,uBAAuB;sBADtB,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;gBAW5C,sBAAsB;sBADrB,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;;AAW7C;;;;;;MAsBa,kBAAkB;IAwF7B,YAAgC,IAAoB,EAChC,QAAiC,EACjC,OAAe,EACf,kBAAqC,EAC7C,aAA4B,EACS,eAAe,GAAG,KAAK,EACT,cAAuB;QANtD,SAAI,GAAJ,IAAI,CAAgB;QAChC,aAAQ,GAAR,QAAQ,CAAyB;QACjC,YAAO,GAAP,OAAO,CAAQ;QACf,uBAAkB,GAAlB,kBAAkB,CAAmB;QAGM,mBAAc,GAAd,cAAc,CAAS;;QApFtF,aAAQ,GAAG,IAAI,SAAS,EAAa,CAAC;;QA2CnB,kBAAa,GAAuB,IAAI,YAAY,EAAQ,CAAC;;QAgB/D,eAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;;QAGjC,oBAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;;;;;;QAOvD,oBAAe,GAA4C,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;QAE5E,0BAAqB,GAAG,IAAI,OAAO,EAA2C,CAAC;;;QAiBtF,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B,CAAC,CAAC;SACJ;;;QAID,aAAa,CAAC,MAAM,EAAE;aACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAChC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;KAClC;;IAhGD,IAAI,KAAK,KAAuB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;;IAGrD,IAAI,GAAG,KAAuB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;;;;;;;;;IAUjD,IACI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;IAClD,IAAI,QAAQ,CAAC,KAAc,IAAI,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;;IAQ/E,IACI,WAAW;QACb,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SAC/F;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;IACD,IAAI,WAAW,CAAC,KAAU;QACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAC9E;;IAmCD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC;KAC3C;IA4BD,kBAAkB;QAChB,IAAI,CAAC,WAAW,CAAC,OAAO;aACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC7D,SAAS,CAAC,CAAC,MAA4B;YACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;SACjC,CAAC,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAiB;gBACtC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;YAED,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC,CAAC,CAAC;;QAGH,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,YAAY,CAAC,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;SAChD,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC5B;;IAGD,IAAI;QACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;KAChD;;IAGD,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;KACjD;;;;;IAMD,oBAAoB;;;;;;;QAOlB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACnC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,EAAE;gBAC7B,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;aAChC;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,EAAE;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,IAAI,KAAK,CAAC;gBACd,KAAK,IAAI,KAAK,CAAC;aAChB;SACF;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE;gBAC9B,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;aAClC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtC,KAAK,IAAI,KAAK,CAAC;gBACf,IAAI,IAAI,KAAK,CAAC;aACf;SACF;;;;;QAMD,IAAI,GAAG,IAAI,IAAI,IAAK,CAAC;QACrB,KAAK,GAAG,KAAK,IAAI,IAAK,CAAC;QAEvB,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;YAC9E,IAAI,CAAC,eAAe,GAAG,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;;;YAIrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;SAC/E;KACF;IAED,SAAS;;QAEP,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;;YAEtC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;SACnE;KACF;;;;;;IAOO,kBAAkB,CAAC,MAAiB;QAC1C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAC3B,MAAM,CAAC,CAAC,KAAqB,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,EACpE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CACjC;aACA,SAAS,CAAC,CAAC,KAAqB;;;YAG/B,IAAI,KAAK,CAAC,OAAO,KAAK,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;gBAChF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;aACpE;YAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SACxC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC1B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MACjE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SAC7C;KACF;;;;;IAMO,oBAAoB,CAAC,MAAiB;QAC5C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;;;QAGD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;;IAGO,gBAAgB,CAAC,MAAiB;QACxC,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;iBAC/E,SAAS,CAAC;gBACT,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;aACxC,CAAC,CAAC;SACN;KACF;;IAGO,kBAAkB,CAAC,KAAc;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;QACxD,MAAM,SAAS,GAAG,+BAA+B,CAAC;QAElD,IAAI,KAAK,EAAE;YACT,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC1B;aAAM;YACL,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC7B;KACF;;IAGO,gBAAgB;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;QAG/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;YAC1B,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE;gBAC5B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;oBACxE,6BAA6B,CAAC,KAAK,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;aACpB;iBAAM;gBACL,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;oBAC1E,6BAA6B,CAAC,OAAO,CAAC,CAAC;iBACxC;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;aACtB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;QAGhC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SAC3B;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;SACzB;KACF;;IAGO,SAAS;QACf,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM;aAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;KACpE;IAED,kBAAkB;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,6BAA6B,EAAE,CAAC;KACtC;IAED,6BAA6B;;QAE3B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;aACrB,MAAM,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;aACjF,OAAO,CAAC,MAAM,IAAI,MAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;KACxD;IAED,kBAAkB;QAChB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;aACrE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5E;IAEO,gBAAgB,CAAC,MAAiB;QACxC,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAC3D;IAEO,aAAa,CAAC,MAAwB;QAC5C,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC;KACxC;;uHAhWU,kBAAkB,8KA6FT,2BAA2B,aACf,qBAAqB;2GA9F1C,kBAAkB,iSALlB,CAAC;YACV,OAAO,EAAE,oBAAoB;YAC7B,WAAW,EAAE,kBAAkB;SAChC,CAAC,gEAcY,gBAAgB,iEAVb,SAAS,8FAWf,gBAAgB,kFEllB7B,0WAUA,grEFkGa,gBAAgB;mGAydhB,kBAAkB;kBAhB9B,SAAS;+BACE,sBAAsB,YACtB,oBAAoB,QAGxB;wBACJ,OAAO,EAAE,sBAAsB;wBAC/B,gDAAgD,EAAE,mBAAmB;qBACtE,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,aAC1B,CAAC;4BACV,OAAO,EAAE,oBAAoB;4BAC7B,WAAW,oBAAoB;yBAChC,CAAC;;0BA0FW,QAAQ;;0BAKR,MAAM;2BAAC,2BAA2B;;0BAClC,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB;4CAvFrD,WAAW;sBALV,eAAe;uBAAC,SAAS,EAAE;;;wBAG1B,WAAW,EAAE,IAAI;qBAClB;gBAM+B,QAAQ;sBAAvC,YAAY;uBAAC,gBAAgB;gBACD,YAAY;sBAAxC,SAAS;uBAAC,gBAAgB;gBAiBvB,QAAQ;sBADX,KAAK;gBAWF,WAAW;sBADd,KAAK;gBAca,aAAa;sBAA/B,MAAM;;;AG1nBT;;;;;;;MA4Ca,iBAAkB,SAAQ,gBAAgB;IACrD,YACI,iBAAoC,EACW,SAA8B,EAC7E,UAAmC,EACnC,gBAAkC,EAClC,MAAc;QAChB,KAAK,CAAC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;KAC3E;;sHARU,iBAAiB,mDAGhB,UAAU,CAAC,MAAM,mBAAmB,CAAC;0GAHtC,iBAAiB,8RATlB,2BAA2B;mGAS1B,iBAAiB;kBAX7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,qBAAqB;oBAC/B,QAAQ,EAAE,2BAA2B;oBACrC,IAAI,EAAE;wBACJ,OAAO,EAAE,wCAAwC;wBACjD,wBAAwB,EAAE,iCAAiC;wBAC3D,yBAAyB,EAAE,kCAAkC;qBAC9D;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACtC;0FAI+D,mBAAmB;0BAA5E,MAAM;2BAAC,UAAU,CAAC,MAAM,mBAAmB,CAAC;;MA+BtC,UAAW,SAAQ,SAAS;IAtBzC;;QA2BU,qBAAgB,GAAG,KAAK,CAAC;QASzB,iBAAY,GAAG,CAAC,CAAC;QASjB,oBAAe,GAAG,CAAC,CAAC;KAK7B;;IA1BC,IACI,eAAe,KAAc,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;IAChE,IAAI,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;IAOpF,IACI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE;IACvD,IAAI,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;IAO3E,IACI,cAAc,KAAa,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE;IAC7D,IAAI,cAAc,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;;+GAtBtE,UAAU;mGAAV,UAAU,itBF9EvB,uGAGA,uGEyDc,CAAC,mBAAmB,CAAC,eAAe,CAAC;mGAkBtC,UAAU;kBAtBtB,SAAS;+BACE,aAAa,YACb,YAAY,cAEV,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAC3C;wBACJ,OAAO,EAAE,wBAAwB;wBACjC,UAAU,EAAE,IAAI;;wBAEhB,cAAc,EAAE,MAAM;wBACtB,wBAAwB,EAAE,oBAAoB;wBAC9C,yBAAyB,EAAE,iBAAiB;wBAC5C,yBAAyB,EAAE,iBAAiB;wBAC5C,yBAAyB,EAAE,iBAAiB;wBAC5C,2BAA2B,EAAE,QAAQ;wBACrC,2BAA2B,EAAE,iBAAiB;wBAC9C,gBAAgB,EAAE,sCAAsC;wBACxD,mBAAmB,EAAE,yCAAyC;qBAC/D,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;8BAKjC,eAAe;sBADlB,KAAK;gBAUF,WAAW;sBADd,KAAK;gBAUF,cAAc;sBADjB,KAAK;;MA4BK,mBAAoB,SAAQ,kBAAkB;;wHAA9C,mBAAmB;4GAAnB,mBAAmB,6MANnB,CAAC;YACV,OAAO,EAAE,oBAAoB;YAC7B,WAAW,EAAE,mBAAmB;SACjC,CAAC,gEAWY,iBAAiB,iEAPd,UAAU,0GC/H7B,4XAUA,grEDkCa,iBAAiB;mGAkFjB,mBAAmB;kBAjB/B,SAAS;+BACE,uBAAuB,YACvB,qBAAqB,QAGzB;wBACJ,OAAO,EAAE,4CAA4C;wBACrD,gDAAgD,EAAE,mBAAmB;qBACtE,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,aAC1B,CAAC;4BACV,OAAO,EAAE,oBAAoB;4BAC7B,WAAW,qBAAqB;yBACjC,CAAC;8BASO,WAAW;sBALnB,eAAe;uBAAC,UAAU,EAAE;;;wBAG3B,WAAW,EAAE,IAAI;qBAClB;gBAGyC,QAAQ;sBAAjD,YAAY;uBAAC,iBAAiB;;;AEtIjC;;;;;;;MA0Ca,gBAAgB;;qHAAhB,gBAAgB;sHAAhB,gBAAgB,iBARzB,SAAS;QACT,kBAAkB;QAClB,gBAAgB;QAChB,UAAU;QACV,mBAAmB;QACnB,iBAAiB,aArBjB,YAAY;QACZ,eAAe;QACf,cAAc;QACd,mBAAmB,aAGnB,mBAAmB;QACnB,eAAe;QACf,SAAS;QACT,kBAAkB;QAClB,gBAAgB;QAChB,UAAU;QACV,mBAAmB;QACnB,iBAAiB;sHAWR,gBAAgB,YAzBlB;YACP,YAAY;YACZ,eAAe;YACf,cAAc;YACd,mBAAmB;SACpB,EAEC,mBAAmB;QACnB,eAAe;mGAiBN,gBAAgB;kBA1B5B,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,mBAAmB;qBACpB;oBACD,OAAO,EAAE;wBACP,mBAAmB;wBACnB,eAAe;wBACf,SAAS;wBACT,kBAAkB;wBAClB,gBAAgB;wBAChB,UAAU;wBACV,mBAAmB;wBACnB,iBAAiB;qBAClB;oBACD,YAAY,EAAE;wBACZ,SAAS;wBACT,kBAAkB;wBAClB,gBAAgB;wBAChB,UAAU;wBACV,mBAAmB;wBACnB,iBAAiB;qBAClB;iBACF;;;ACzCD;;;;;;;;ACAA;;;;;;"}