/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { Directionality } from 'cdk/bidi'; import { BooleanInput, NumberInput } from 'cdk/coercion'; import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, OnChanges, OnDestroy, QueryList, TemplateRef, AfterContentInit, } from '@angular/core'; import { Observable, Subject } from 'rxjs'; import { CdkStepHeader } from './step-header'; import { CdkStepLabel } from './step-label'; /** * Position state of the content of each step in stepper that is used for transitioning * the content into correct position upon step selection change. */ import * as ɵngcc0 from '@angular/core'; export declare type StepContentPositionState = 'previous' | 'current' | 'next'; /** Possible orientation of a stepper. */ export declare type StepperOrientation = 'horizontal' | 'vertical'; /** Change event emitted on selection changes. */ export declare class StepperSelectionEvent { /** Index of the step now selected. */ selectedIndex: number; /** Index of the step previously selected. */ previouslySelectedIndex: number; /** The step instance now selected. */ selectedStep: CdkStep; /** The step instance previously selected. */ previouslySelectedStep: CdkStep; } /** The state of each step. */ export declare type StepState = 'number' | 'edit' | 'done' | 'error' | string; /** Enum to represent the different states of the steps. */ export declare const STEP_STATE: { NUMBER: string; EDIT: string; DONE: string; ERROR: string; }; /** InjectionToken that can be used to specify the global stepper options. */ export declare const STEPPER_GLOBAL_OPTIONS: InjectionToken; /** Configurable options for stepper. */ export interface StepperOptions { /** * Whether the stepper should display an error state or not. * Default behavior is assumed to be false. */ showError?: boolean; /** * Whether the stepper should display the default indicator type * or not. * Default behavior is assumed to be true. */ displayDefaultIndicatorType?: boolean; } export declare class CdkStep implements OnChanges { _stepper: CdkStepper; private _stepperOptions; _displayDefaultIndicatorType: boolean; /** Template for step label if it exists. */ stepLabel: CdkStepLabel; /** Template for step content. */ content: TemplateRef; /** The top level abstract control of the step. */ stepControl: AbstractControlLike; /** Whether user has attempted to move away from the step. */ interacted: boolean; /** Emits when the user has attempted to move away from the step. */ readonly interactedStream: EventEmitter; /** Plain text label of the step. */ label: string; /** Error message to display when there's an error. */ errorMessage: string; /** Aria label for the tab. */ ariaLabel: string; /** * Reference to the element that the tab is labelled by. * Will be cleared if `aria-label` is set at the same time. */ ariaLabelledby: string; /** State of the step. */ state: StepState; /** Whether the user can return to this step once it has been marked as completed. */ get editable(): boolean; set editable(value: boolean); private _editable; /** Whether the completion of step is optional. */ get optional(): boolean; set optional(value: boolean); private _optional; /** Whether step is marked as completed. */ get completed(): boolean; set completed(value: boolean); _completedOverride: boolean | null; private _getDefaultCompleted; /** Whether step has an error. */ get hasError(): boolean; set hasError(value: boolean); private _customError; private _getDefaultError; constructor(_stepper: CdkStepper, stepperOptions?: StepperOptions); /** Selects this step component. */ select(): void; /** Resets the step to its initial state. Note that this includes resetting form data. */ reset(): void; ngOnChanges(): void; _markAsInteracted(): void; /** Determines whether the error state can be shown. */ _showError(): boolean; static ngAcceptInputType_editable: BooleanInput; static ngAcceptInputType_hasError: BooleanInput; static ngAcceptInputType_optional: BooleanInput; static ngAcceptInputType_completed: BooleanInput; static ɵfac: ɵngcc0.ɵɵFactoryDef; static ɵcmp: ɵngcc0.ɵɵComponentDefWithMeta< CdkStep, 'cdk-step', ['cdkStep'], { editable: 'editable'; optional: 'optional'; completed: 'completed'; hasError: 'hasError'; stepControl: 'stepControl'; label: 'label'; errorMessage: 'errorMessage'; ariaLabel: 'aria-label'; ariaLabelledby: 'aria-labelledby'; state: 'state'; }, { interactedStream: 'interacted' }, ['stepLabel'], ['*'] >; } export declare class CdkStepper implements AfterContentInit, AfterViewInit, OnDestroy { private _dir; private _changeDetectorRef; private _elementRef; /** Emits when the component is destroyed. */ protected readonly _destroyed: Subject; /** Used for managing keyboard focus. */ private _keyManager; /** Full list of steps inside the stepper, including inside nested steppers. */ _steps: QueryList; /** Steps that belong to the current stepper, excluding ones from nested steppers. */ readonly steps: QueryList; /** The list of step headers of the steps in the stepper. */ _stepHeader: QueryList; /** Whether the validity of previous steps should be checked or not. */ get linear(): boolean; set linear(value: boolean); private _linear; /** The index of the selected step. */ get selectedIndex(): number; set selectedIndex(index: number); private _selectedIndex; /** The step that is selected. */ get selected(): CdkStep | undefined; set selected(step: CdkStep | undefined); /** Event emitted when the selected step has changed. */ readonly selectionChange: EventEmitter; /** Used to track unique ID for each stepper component. */ _groupId: number; /** Orientation of the stepper. */ get orientation(): StepperOrientation; set orientation(value: StepperOrientation); /** * @deprecated To be turned into a private property. Use `orientation` instead. * @breaking-change 13.0.0 */ protected _orientation: StepperOrientation; constructor( _dir: Directionality, _changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef, /** * @deprecated No longer in use, to be removed. * @breaking-change 13.0.0 */ _document: any ); ngAfterContentInit(): void; ngAfterViewInit(): void; ngOnDestroy(): void; /** Selects and focuses the next step in list. */ next(): void; /** Selects and focuses the previous step in list. */ previous(): void; /** Resets the stepper to its initial state. Note that this includes clearing form data. */ reset(): void; /** Returns a unique id for each step label element. */ _getStepLabelId(i: number): string; /** Returns unique id for each step content element. */ _getStepContentId(i: number): string; /** Marks the component to be change detected. */ _stateChanged(): void; /** Returns position state of the step with the given index. */ _getAnimationDirection(index: number): StepContentPositionState; /** Returns the type of icon to be displayed. */ _getIndicatorType(index: number, state?: StepState): StepState; private _getDefaultIndicatorLogic; private _getGuidelineLogic; private _isCurrentStep; /** Returns the index of the currently-focused step header. */ _getFocusIndex(): number | null; private _updateSelectedItemIndex; _onKeydown(event: KeyboardEvent): void; private _anyControlsInvalidOrPending; private _layoutDirection; /** Checks whether the stepper contains the focused element. */ private _containsFocus; /** Checks whether the passed-in index is a valid step index. */ private _isValidIndex; static ngAcceptInputType_editable: BooleanInput; static ngAcceptInputType_optional: BooleanInput; static ngAcceptInputType_completed: BooleanInput; static ngAcceptInputType_hasError: BooleanInput; static ngAcceptInputType_linear: BooleanInput; static ngAcceptInputType_selectedIndex: NumberInput; static ɵfac: ɵngcc0.ɵɵFactoryDef< CdkStepper, [{ optional: true }, null, null, null] >; static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta< CdkStepper, '[cdkStepper]', ['cdkStepper'], { linear: 'linear'; selectedIndex: 'selectedIndex'; selected: 'selected'; orientation: 'orientation'; }, { selectionChange: 'selectionChange' }, ['_steps', '_stepHeader'] >; } /** * Simplified representation of an "AbstractControl" from @angular/forms. * Used to avoid having to bring in @angular/forms for a single optional interface. * @docs-private */ interface AbstractControlLike { asyncValidator: ((control: any) => any) | null; dirty: boolean; disabled: boolean; enabled: boolean; errors: { [key: string]: any; } | null; invalid: boolean; parent: any; pending: boolean; pristine: boolean; root: AbstractControlLike; status: string; readonly statusChanges: Observable; touched: boolean; untouched: boolean; updateOn: any; valid: boolean; validator: ((control: any) => any) | null; value: any; readonly valueChanges: Observable; clearAsyncValidators(): void; clearValidators(): void; disable(opts?: any): void; enable(opts?: any): void; get(path: (string | number)[] | string): AbstractControlLike | null; getError(errorCode: string, path?: (string | number)[] | string): any; hasError(errorCode: string, path?: (string | number)[] | string): boolean; markAllAsTouched(): void; markAsDirty(opts?: any): void; markAsPending(opts?: any): void; markAsPristine(opts?: any): void; markAsTouched(opts?: any): void; markAsUntouched(opts?: any): void; patchValue(value: any, options?: Object): void; reset(value?: any, options?: Object): void; setAsyncValidators( newValidator: (control: any) => any | ((control: any) => any)[] | null ): void; setErrors( errors: { [key: string]: any; } | null, opts?: any ): void; setParent(parent: any): void; setValidators( newValidator: (control: any) => any | ((control: any) => any)[] | null ): void; setValue(value: any, options?: Object): void; updateValueAndValidity(opts?: any): void; patchValue(value: any, options?: any): void; reset(formState?: any, options?: any): void; setValue(value: any, options?: any): void; } export {}; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5kLnRzIiwic291cmNlcyI6WyJzdGVwcGVyLmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIEFmdGVyQ29udGVudEluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENka1N0ZXBIZWFkZXIgfSBmcm9tICcuL3N0ZXAtaGVhZGVyJztcbmltcG9ydCB7IENka1N0ZXBMYWJlbCB9IGZyb20gJy4vc3RlcC1sYWJlbCc7XG4vKipcbiAqIFBvc2l0aW9uIHN0YXRlIG9mIHRoZSBjb250ZW50IG9mIGVhY2ggc3RlcCBpbiBzdGVwcGVyIHRoYXQgaXMgdXNlZCBmb3IgdHJhbnNpdGlvbmluZ1xuICogdGhlIGNvbnRlbnQgaW50byBjb3JyZWN0IHBvc2l0aW9uIHVwb24gc3RlcCBzZWxlY3Rpb24gY2hhbmdlLlxuICovXG5leHBvcnQgZGVjbGFyZSB0eXBlIFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZSA9ICdwcmV2aW91cycgfCAnY3VycmVudCcgfCAnbmV4dCc7XG4vKiogUG9zc2libGUgb3JpZW50YXRpb24gb2YgYSBzdGVwcGVyLiAqL1xuZXhwb3J0IGRlY2xhcmUgdHlwZSBTdGVwcGVyT3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuLyoqIENoYW5nZSBldmVudCBlbWl0dGVkIG9uIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU3RlcHBlclNlbGVjdGlvbkV2ZW50IHtcbiAgICAvKiogSW5kZXggb2YgdGhlIHN0ZXAgbm93IHNlbGVjdGVkLiAqL1xuICAgIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgICAvKiogSW5kZXggb2YgdGhlIHN0ZXAgcHJldmlvdXNseSBzZWxlY3RlZC4gKi9cbiAgICBwcmV2aW91c2x5U2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICAgIC8qKiBUaGUgc3RlcCBpbnN0YW5jZSBub3cgc2VsZWN0ZWQuICovXG4gICAgc2VsZWN0ZWRTdGVwOiBDZGtTdGVwO1xuICAgIC8qKiBUaGUgc3RlcCBpbnN0YW5jZSBwcmV2aW91c2x5IHNlbGVjdGVkLiAqL1xuICAgIHByZXZpb3VzbHlTZWxlY3RlZFN0ZXA6IENka1N0ZXA7XG59XG4vKiogVGhlIHN0YXRlIG9mIGVhY2ggc3RlcC4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgU3RlcFN0YXRlID0gJ251bWJlcicgfCAnZWRpdCcgfCAnZG9uZScgfCAnZXJyb3InIHwgc3RyaW5nO1xuLyoqIEVudW0gdG8gcmVwcmVzZW50IHRoZSBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBzdGVwcy4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFNURVBfU1RBVEU6IHtcbiAgICBOVU1CRVI6IHN0cmluZztcbiAgICBFRElUOiBzdHJpbmc7XG4gICAgRE9ORTogc3RyaW5nO1xuICAgIEVSUk9SOiBzdHJpbmc7XG59O1xuLyoqIEluamVjdGlvblRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZ2xvYmFsIHN0ZXBwZXIgb3B0aW9ucy4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFNURVBQRVJfR0xPQkFMX09QVElPTlM6IEluamVjdGlvblRva2VuPFN0ZXBwZXJPcHRpb25zPjtcbi8qKiBDb25maWd1cmFibGUgb3B0aW9ucyBmb3Igc3RlcHBlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcHBlck9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHN0ZXBwZXIgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3Igc3RhdGUgb3Igbm90LlxuICAgICAqIERlZmF1bHQgYmVoYXZpb3IgaXMgYXNzdW1lZCB0byBiZSBmYWxzZS5cbiAgICAgKi9cbiAgICBzaG93RXJyb3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHN0ZXBwZXIgc2hvdWxkIGRpc3BsYXkgdGhlIGRlZmF1bHQgaW5kaWNhdG9yIHR5cGVcbiAgICAgKiBvciBub3QuXG4gICAgICogRGVmYXVsdCBiZWhhdmlvciBpcyBhc3N1bWVkIHRvIGJlIHRydWUuXG4gICAgICovXG4gICAgZGlzcGxheURlZmF1bHRJbmRpY2F0b3JUeXBlPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIENka1N0ZXAgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIF9zdGVwcGVyOiBDZGtTdGVwcGVyO1xuICAgIHByaXZhdGUgX3N0ZXBwZXJPcHRpb25zO1xuICAgIF9kaXNwbGF5RGVmYXVsdEluZGljYXRvclR5cGU6IGJvb2xlYW47XG4gICAgLyoqIFRlbXBsYXRlIGZvciBzdGVwIGxhYmVsIGlmIGl0IGV4aXN0cy4gKi9cbiAgICBzdGVwTGFiZWw6IENka1N0ZXBMYWJlbDtcbiAgICAvKiogVGVtcGxhdGUgZm9yIHN0ZXAgY29udGVudC4gKi9cbiAgICBjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBUaGUgdG9wIGxldmVsIGFic3RyYWN0IGNvbnRyb2wgb2YgdGhlIHN0ZXAuICovXG4gICAgc3RlcENvbnRyb2w6IEFic3RyYWN0Q29udHJvbExpa2U7XG4gICAgLyoqIFdoZXRoZXIgdXNlciBoYXMgYXR0ZW1wdGVkIHRvIG1vdmUgYXdheSBmcm9tIHRoZSBzdGVwLiAqL1xuICAgIGludGVyYWN0ZWQ6IGJvb2xlYW47XG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIHVzZXIgaGFzIGF0dGVtcHRlZCB0byBtb3ZlIGF3YXkgZnJvbSB0aGUgc3RlcC4gKi9cbiAgICByZWFkb25seSBpbnRlcmFjdGVkU3RyZWFtOiBFdmVudEVtaXR0ZXI8Q2RrU3RlcD47XG4gICAgLyoqIFBsYWluIHRleHQgbGFiZWwgb2YgdGhlIHN0ZXAuICovXG4gICAgbGFiZWw6IHN0cmluZztcbiAgICAvKiogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlcmUncyBhbiBlcnJvci4gKi9cbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIHRhYi4gKi9cbiAgICBhcmlhTGFiZWw6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgdGhhdCB0aGUgdGFiIGlzIGxhYmVsbGVkIGJ5LlxuICAgICAqIFdpbGwgYmUgY2xlYXJlZCBpZiBgYXJpYS1sYWJlbGAgaXMgc2V0IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgYXJpYUxhYmVsbGVkYnk6IHN0cmluZztcbiAgICAvKiogU3RhdGUgb2YgdGhlIHN0ZXAuICovXG4gICAgc3RhdGU6IFN0ZXBTdGF0ZTtcbiAgICAvKiogV2hldGhlciB0aGUgdXNlciBjYW4gcmV0dXJuIHRvIHRoaXMgc3RlcCBvbmNlIGl0IGhhcyBiZWVuIG1hcmtlZCBhcyBjb21wbGV0ZWQuICovXG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW47XG4gICAgc2V0IGVkaXRhYmxlKHZhbHVlOiBib29sZWFuKTtcbiAgICBwcml2YXRlIF9lZGl0YWJsZTtcbiAgICAvKiogV2hldGhlciB0aGUgY29tcGxldGlvbiBvZiBzdGVwIGlzIG9wdGlvbmFsLiAqL1xuICAgIGdldCBvcHRpb25hbCgpOiBib29sZWFuO1xuICAgIHNldCBvcHRpb25hbCh2YWx1ZTogYm9vbGVhbik7XG4gICAgcHJpdmF0ZSBfb3B0aW9uYWw7XG4gICAgLyoqIFdoZXRoZXIgc3RlcCBpcyBtYXJrZWQgYXMgY29tcGxldGVkLiAqL1xuICAgIGdldCBjb21wbGV0ZWQoKTogYm9vbGVhbjtcbiAgICBzZXQgY29tcGxldGVkKHZhbHVlOiBib29sZWFuKTtcbiAgICBfY29tcGxldGVkT3ZlcnJpZGU6IGJvb2xlYW4gfCBudWxsO1xuICAgIHByaXZhdGUgX2dldERlZmF1bHRDb21wbGV0ZWQ7XG4gICAgLyoqIFdoZXRoZXIgc3RlcCBoYXMgYW4gZXJyb3IuICovXG4gICAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW47XG4gICAgc2V0IGhhc0Vycm9yKHZhbHVlOiBib29sZWFuKTtcbiAgICBwcml2YXRlIF9jdXN0b21FcnJvcjtcbiAgICBwcml2YXRlIF9nZXREZWZhdWx0RXJyb3I7XG4gICAgY29uc3RydWN0b3IoX3N0ZXBwZXI6IENka1N0ZXBwZXIsIHN0ZXBwZXJPcHRpb25zPzogU3RlcHBlck9wdGlvbnMpO1xuICAgIC8qKiBTZWxlY3RzIHRoaXMgc3RlcCBjb21wb25lbnQuICovXG4gICAgc2VsZWN0KCk6IHZvaWQ7XG4gICAgLyoqIFJlc2V0cyB0aGUgc3RlcCB0byBpdHMgaW5pdGlhbCBzdGF0ZS4gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgcmVzZXR0aW5nIGZvcm0gZGF0YS4gKi9cbiAgICByZXNldCgpOiB2b2lkO1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQ7XG4gICAgX21hcmtBc0ludGVyYWN0ZWQoKTogdm9pZDtcbiAgICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlcnJvciBzdGF0ZSBjYW4gYmUgc2hvd24uICovXG4gICAgX3Nob3dFcnJvcigpOiBib29sZWFuO1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0YWJsZTogQm9vbGVhbklucHV0O1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNFcnJvcjogQm9vbGVhbklucHV0O1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcHRpb25hbDogQm9vbGVhbklucHV0O1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb21wbGV0ZWQ6IEJvb2xlYW5JbnB1dDtcbn1cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIENka1N0ZXBwZXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgX2RpcjtcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmO1xuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+O1xuICAgIC8qKiBVc2VkIGZvciBtYW5hZ2luZyBrZXlib2FyZCBmb2N1cy4gKi9cbiAgICBwcml2YXRlIF9rZXlNYW5hZ2VyO1xuICAgIC8qKiBGdWxsIGxpc3Qgb2Ygc3RlcHMgaW5zaWRlIHRoZSBzdGVwcGVyLCBpbmNsdWRpbmcgaW5zaWRlIG5lc3RlZCBzdGVwcGVycy4gKi9cbiAgICBfc3RlcHM6IFF1ZXJ5TGlzdDxDZGtTdGVwPjtcbiAgICAvKiogU3RlcHMgdGhhdCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgc3RlcHBlciwgZXhjbHVkaW5nIG9uZXMgZnJvbSBuZXN0ZWQgc3RlcHBlcnMuICovXG4gICAgcmVhZG9ubHkgc3RlcHM6IFF1ZXJ5TGlzdDxDZGtTdGVwPjtcbiAgICAvKiogVGhlIGxpc3Qgb2Ygc3RlcCBoZWFkZXJzIG9mIHRoZSBzdGVwcyBpbiB0aGUgc3RlcHBlci4gKi9cbiAgICBfc3RlcEhlYWRlcjogUXVlcnlMaXN0PENka1N0ZXBIZWFkZXI+O1xuICAgIC8qKiBXaGV0aGVyIHRoZSB2YWxpZGl0eSBvZiBwcmV2aW91cyBzdGVwcyBzaG91bGQgYmUgY2hlY2tlZCBvciBub3QuICovXG4gICAgZ2V0IGxpbmVhcigpOiBib29sZWFuO1xuICAgIHNldCBsaW5lYXIodmFsdWU6IGJvb2xlYW4pO1xuICAgIHByaXZhdGUgX2xpbmVhcjtcbiAgICAvKiogVGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBzdGVwLiAqL1xuICAgIGdldCBzZWxlY3RlZEluZGV4KCk6IG51bWJlcjtcbiAgICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleDogbnVtYmVyKTtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEluZGV4O1xuICAgIC8qKiBUaGUgc3RlcCB0aGF0IGlzIHNlbGVjdGVkLiAqL1xuICAgIGdldCBzZWxlY3RlZCgpOiBDZGtTdGVwIHwgdW5kZWZpbmVkO1xuICAgIHNldCBzZWxlY3RlZChzdGVwOiBDZGtTdGVwIHwgdW5kZWZpbmVkKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBzdGVwIGhhcyBjaGFuZ2VkLiAqL1xuICAgIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFN0ZXBwZXJTZWxlY3Rpb25FdmVudD47XG4gICAgLyoqIFVzZWQgdG8gdHJhY2sgdW5pcXVlIElEIGZvciBlYWNoIHN0ZXBwZXIgY29tcG9uZW50LiAqL1xuICAgIF9ncm91cElkOiBudW1iZXI7XG4gICAgLyoqIE9yaWVudGF0aW9uIG9mIHRoZSBzdGVwcGVyLiAqL1xuICAgIGdldCBvcmllbnRhdGlvbigpOiBTdGVwcGVyT3JpZW50YXRpb247XG4gICAgc2V0IG9yaWVudGF0aW9uKHZhbHVlOiBTdGVwcGVyT3JpZW50YXRpb24pO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRvIGJlIHR1cm5lZCBpbnRvIGEgcHJpdmF0ZSBwcm9wZXJ0eS4gVXNlIGBvcmllbnRhdGlvbmAgaW5zdGVhZC5cbiAgICAgKiBAYnJlYWtpbmctY2hhbmdlIDEzLjAuMFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb3JpZW50YXRpb246IFN0ZXBwZXJPcmllbnRhdGlvbjtcbiAgICBjb25zdHJ1Y3RvcihfZGlyOiBEaXJlY3Rpb25hbGl0eSwgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgaW4gdXNlLCB0byBiZSByZW1vdmVkLlxuICAgICAqIEBicmVha2luZy1jaGFuZ2UgMTMuMC4wXG4gICAgICovXG4gICAgX2RvY3VtZW50OiBhbnkpO1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkO1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkO1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQ7XG4gICAgLyoqIFNlbGVjdHMgYW5kIGZvY3VzZXMgdGhlIG5leHQgc3RlcCBpbiBsaXN0LiAqL1xuICAgIG5leHQoKTogdm9pZDtcbiAgICAvKiogU2VsZWN0cyBhbmQgZm9jdXNlcyB0aGUgcHJldmlvdXMgc3RlcCBpbiBsaXN0LiAqL1xuICAgIHByZXZpb3VzKCk6IHZvaWQ7XG4gICAgLyoqIFJlc2V0cyB0aGUgc3RlcHBlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS4gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgY2xlYXJpbmcgZm9ybSBkYXRhLiAqL1xuICAgIHJlc2V0KCk6IHZvaWQ7XG4gICAgLyoqIFJldHVybnMgYSB1bmlxdWUgaWQgZm9yIGVhY2ggc3RlcCBsYWJlbCBlbGVtZW50LiAqL1xuICAgIF9nZXRTdGVwTGFiZWxJZChpOiBudW1iZXIpOiBzdHJpbmc7XG4gICAgLyoqIFJldHVybnMgdW5pcXVlIGlkIGZvciBlYWNoIHN0ZXAgY29udGVudCBlbGVtZW50LiAqL1xuICAgIF9nZXRTdGVwQ29udGVudElkKGk6IG51bWJlcik6IHN0cmluZztcbiAgICAvKiogTWFya3MgdGhlIGNvbXBvbmVudCB0byBiZSBjaGFuZ2UgZGV0ZWN0ZWQuICovXG4gICAgX3N0YXRlQ2hhbmdlZCgpOiB2b2lkO1xuICAgIC8qKiBSZXR1cm5zIHBvc2l0aW9uIHN0YXRlIG9mIHRoZSBzdGVwIHdpdGggdGhlIGdpdmVuIGluZGV4LiAqL1xuICAgIF9nZXRBbmltYXRpb25EaXJlY3Rpb24oaW5kZXg6IG51bWJlcik6IFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZTtcbiAgICAvKiogUmV0dXJucyB0aGUgdHlwZSBvZiBpY29uIHRvIGJlIGRpc3BsYXllZC4gKi9cbiAgICBfZ2V0SW5kaWNhdG9yVHlwZShpbmRleDogbnVtYmVyLCBzdGF0ZT86IFN0ZXBTdGF0ZSk6IFN0ZXBTdGF0ZTtcbiAgICBwcml2YXRlIF9nZXREZWZhdWx0SW5kaWNhdG9yTG9naWM7XG4gICAgcHJpdmF0ZSBfZ2V0R3VpZGVsaW5lTG9naWM7XG4gICAgcHJpdmF0ZSBfaXNDdXJyZW50U3RlcDtcbiAgICAvKiogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnRseS1mb2N1c2VkIHN0ZXAgaGVhZGVyLiAqL1xuICAgIF9nZXRGb2N1c0luZGV4KCk6IG51bWJlciB8IG51bGw7XG4gICAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRJdGVtSW5kZXg7XG4gICAgX29uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gICAgcHJpdmF0ZSBfYW55Q29udHJvbHNJbnZhbGlkT3JQZW5kaW5nO1xuICAgIHByaXZhdGUgX2xheW91dERpcmVjdGlvbjtcbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIHN0ZXBwZXIgY29udGFpbnMgdGhlIGZvY3VzZWQgZWxlbWVudC4gKi9cbiAgICBwcml2YXRlIF9jb250YWluc0ZvY3VzO1xuICAgIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgcGFzc2VkLWluIGluZGV4IGlzIGEgdmFsaWQgc3RlcCBpbmRleC4gKi9cbiAgICBwcml2YXRlIF9pc1ZhbGlkSW5kZXg7XG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2VkaXRhYmxlOiBCb29sZWFuSW5wdXQ7XG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wdGlvbmFsOiBCb29sZWFuSW5wdXQ7XG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbXBsZXRlZDogQm9vbGVhbklucHV0O1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNFcnJvcjogQm9vbGVhbklucHV0O1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9saW5lYXI6IEJvb2xlYW5JbnB1dDtcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2VsZWN0ZWRJbmRleDogTnVtYmVySW5wdXQ7XG59XG4vKipcbiAqIFNpbXBsaWZpZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gXCJBYnN0cmFjdENvbnRyb2xcIiBmcm9tIEBhbmd1bGFyL2Zvcm1zLlxuICogVXNlZCB0byBhdm9pZCBoYXZpbmcgdG8gYnJpbmcgaW4gQGFuZ3VsYXIvZm9ybXMgZm9yIGEgc2luZ2xlIG9wdGlvbmFsIGludGVyZmFjZS5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuaW50ZXJmYWNlIEFic3RyYWN0Q29udHJvbExpa2Uge1xuICAgIGFzeW5jVmFsaWRhdG9yOiAoKGNvbnRyb2w6IGFueSkgPT4gYW55KSB8IG51bGw7XG4gICAgZGlydHk6IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBlcnJvcnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gfCBudWxsO1xuICAgIGludmFsaWQ6IGJvb2xlYW47XG4gICAgcGFyZW50OiBhbnk7XG4gICAgcGVuZGluZzogYm9vbGVhbjtcbiAgICBwcmlzdGluZTogYm9vbGVhbjtcbiAgICByb290OiBBYnN0cmFjdENvbnRyb2xMaWtlO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHN0YXR1c0NoYW5nZXM6IE9ic2VydmFibGU8YW55PjtcbiAgICB0b3VjaGVkOiBib29sZWFuO1xuICAgIHVudG91Y2hlZDogYm9vbGVhbjtcbiAgICB1cGRhdGVPbjogYW55O1xuICAgIHZhbGlkOiBib29sZWFuO1xuICAgIHZhbGlkYXRvcjogKChjb250cm9sOiBhbnkpID0+IGFueSkgfCBudWxsO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgcmVhZG9ubHkgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICAgY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTogdm9pZDtcbiAgICBjbGVhclZhbGlkYXRvcnMoKTogdm9pZDtcbiAgICBkaXNhYmxlKG9wdHM/OiBhbnkpOiB2b2lkO1xuICAgIGVuYWJsZShvcHRzPzogYW55KTogdm9pZDtcbiAgICBnZXQocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSB8IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbExpa2UgfCBudWxsO1xuICAgIGdldEVycm9yKGVycm9yQ29kZTogc3RyaW5nLCBwYXRoPzogKHN0cmluZyB8IG51bWJlcilbXSB8IHN0cmluZyk6IGFueTtcbiAgICBoYXNFcnJvcihlcnJvckNvZGU6IHN0cmluZywgcGF0aD86IChzdHJpbmcgfCBudW1iZXIpW10gfCBzdHJpbmcpOiBib29sZWFuO1xuICAgIG1hcmtBbGxBc1RvdWNoZWQoKTogdm9pZDtcbiAgICBtYXJrQXNEaXJ0eShvcHRzPzogYW55KTogdm9pZDtcbiAgICBtYXJrQXNQZW5kaW5nKG9wdHM/OiBhbnkpOiB2b2lkO1xuICAgIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiBhbnkpOiB2b2lkO1xuICAgIG1hcmtBc1RvdWNoZWQob3B0cz86IGFueSk6IHZvaWQ7XG4gICAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiBhbnkpOiB2b2lkO1xuICAgIHBhdGNoVmFsdWUodmFsdWU6IGFueSwgb3B0aW9ucz86IE9iamVjdCk6IHZvaWQ7XG4gICAgcmVzZXQodmFsdWU/OiBhbnksIG9wdGlvbnM/OiBPYmplY3QpOiB2b2lkO1xuICAgIHNldEFzeW5jVmFsaWRhdG9ycyhuZXdWYWxpZGF0b3I6IChjb250cm9sOiBhbnkpID0+IGFueSB8ICgoY29udHJvbDogYW55KSA9PiBhbnkpW10gfCBudWxsKTogdm9pZDtcbiAgICBzZXRFcnJvcnMoZXJyb3JzOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9IHwgbnVsbCwgb3B0cz86IGFueSk6IHZvaWQ7XG4gICAgc2V0UGFyZW50KHBhcmVudDogYW55KTogdm9pZDtcbiAgICBzZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogKGNvbnRyb2w6IGFueSkgPT4gYW55IHwgKChjb250cm9sOiBhbnkpID0+IGFueSlbXSB8IG51bGwpOiB2b2lkO1xuICAgIHNldFZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBPYmplY3QpOiB2b2lkO1xuICAgIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0cz86IGFueSk6IHZvaWQ7XG4gICAgcGF0Y2hWYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zPzogYW55KTogdm9pZDtcbiAgICByZXNldChmb3JtU3RhdGU/OiBhbnksIG9wdGlvbnM/OiBhbnkpOiB2b2lkO1xuICAgIHNldFZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBhbnkpOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIl19