/** * @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 { CollectionViewer, DataSource, ListRange, _RecycleViewRepeaterStrategy, } from 'cdk/collections'; import { DoCheck, IterableDiffers, NgIterable, NgZone, OnDestroy, TemplateRef, TrackByFunction, ViewContainerRef, } from '@angular/core'; import { NumberInput } from 'cdk/coercion'; import { Observable, Subject } from 'rxjs'; import { CdkVirtualScrollRepeater } from './virtual-scroll-repeater'; import { CdkVirtualScrollViewport } from './virtual-scroll-viewport'; /** The context for an item rendered by `CdkVirtualForOf` */ import * as ɵngcc0 from '@angular/core'; export declare type CdkVirtualForOfContext = { /** The item value. */ $implicit: T; /** The DataSource, Observable, or NgIterable that was passed to *cdkVirtualFor. */ cdkVirtualForOf: DataSource | Observable | NgIterable; /** The index of the item in the DataSource. */ index: number; /** The number of items in the DataSource. */ count: number; /** Whether this is the first item in the DataSource. */ first: boolean; /** Whether this is the last item in the DataSource. */ last: boolean; /** Whether the index is even. */ even: boolean; /** Whether the index is odd. */ odd: boolean; }; /** * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling * container. */ export declare class CdkVirtualForOf implements CdkVirtualScrollRepeater, CollectionViewer, DoCheck, OnDestroy { /** The view container to add items to. */ private _viewContainerRef; /** The template to use when stamping out new items. */ private _template; /** The set of available differs. */ private _differs; /** The strategy used to render items in the virtual scroll viewport. */ private _viewRepeater; /** The virtual scrolling viewport that these items are being rendered in. */ private _viewport; /** Emits when the rendered view of the data changes. */ readonly viewChange: Subject; /** Subject that emits when a new DataSource instance is given. */ private readonly _dataSourceChanges; /** The DataSource to display. */ get cdkVirtualForOf(): | DataSource | Observable | NgIterable | null | undefined; set cdkVirtualForOf( value: DataSource | Observable | NgIterable | null | undefined ); _cdkVirtualForOf: | DataSource | Observable | NgIterable | null | undefined; /** * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and * the item and produces a value to be used as the item's identity when tracking changes. */ get cdkVirtualForTrackBy(): TrackByFunction | undefined; set cdkVirtualForTrackBy(fn: TrackByFunction | undefined); private _cdkVirtualForTrackBy; /** The template used to stamp out new elements. */ set cdkVirtualForTemplate(value: TemplateRef>); /** * The size of the cache used to store templates that are not being used for re-use later. * Setting the cache size to `0` will disable caching. Defaults to 20 templates. */ get cdkVirtualForTemplateCacheSize(): number; set cdkVirtualForTemplateCacheSize(size: number); /** Emits whenever the data in the current DataSource changes. */ readonly dataStream: Observable; /** The differ used to calculate changes to the data. */ private _differ; /** The most recent data emitted from the DataSource. */ private _data; /** The currently rendered items. */ private _renderedItems; /** The currently rendered range of indices. */ private _renderedRange; /** Whether the rendered data should be updated during the next ngDoCheck cycle. */ private _needsUpdate; private readonly _destroyed; constructor( /** The view container to add items to. */ _viewContainerRef: ViewContainerRef, /** The template to use when stamping out new items. */ _template: TemplateRef>, /** The set of available differs. */ _differs: IterableDiffers, /** The strategy used to render items in the virtual scroll viewport. */ _viewRepeater: _RecycleViewRepeaterStrategy< T, T, CdkVirtualForOfContext >, /** The virtual scrolling viewport that these items are being rendered in. */ _viewport: CdkVirtualScrollViewport, ngZone: NgZone ); /** * Measures the combined size (width for horizontal orientation, height for vertical) of all items * in the specified range. Throws an error if the range includes items that are not currently * rendered. */ measureRangeSize( range: ListRange, orientation: 'horizontal' | 'vertical' ): number; ngDoCheck(): void; ngOnDestroy(): void; /** React to scroll state changes in the viewport. */ private _onRenderedDataChange; /** Swap out one `DataSource` for another. */ private _changeDataSource; /** Update the `CdkVirtualForOfContext` for all views. */ private _updateContext; /** Apply changes to the DOM. */ private _applyChanges; /** Update the computed properties on the `CdkVirtualForOfContext`. */ private _updateComputedContextProperties; private _getEmbeddedViewArgs; static ngAcceptInputType_cdkVirtualForTemplateCacheSize: NumberInput; static ɵfac: ɵngcc0.ɵɵFactoryDef< CdkVirtualForOf, [null, null, null, null, { skipSelf: true }, null] >; static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta< CdkVirtualForOf, '[cdkVirtualFor][cdkVirtualForOf]', never, { cdkVirtualForOf: 'cdkVirtualForOf'; cdkVirtualForTrackBy: 'cdkVirtualForTrackBy'; cdkVirtualForTemplate: 'cdkVirtualForTemplate'; cdkVirtualForTemplateCacheSize: 'cdkVirtualForTemplateCacheSize'; }, {}, never >; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1mb3Itb2YuZC50cyIsInNvdXJjZXMiOlsidmlydHVhbC1mb3Itb2YuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSwgTGlzdFJhbmdlLCBfUmVjeWNsZVZpZXdSZXBlYXRlclN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IERvQ2hlY2ssIEl0ZXJhYmxlRGlmZmVycywgTmdJdGVyYWJsZSwgTmdab25lLCBPbkRlc3Ryb3ksIFRlbXBsYXRlUmVmLCBUcmFja0J5RnVuY3Rpb24sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxSZXBlYXRlciB9IGZyb20gJy4vdmlydHVhbC1zY3JvbGwtcmVwZWF0ZXInO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCc7XG4vKiogVGhlIGNvbnRleHQgZm9yIGFuIGl0ZW0gcmVuZGVyZWQgYnkgYENka1ZpcnR1YWxGb3JPZmAgKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgQ2RrVmlydHVhbEZvck9mQ29udGV4dDxUPiA9IHtcbiAgICAvKiogVGhlIGl0ZW0gdmFsdWUuICovXG4gICAgJGltcGxpY2l0OiBUO1xuICAgIC8qKiBUaGUgRGF0YVNvdXJjZSwgT2JzZXJ2YWJsZSwgb3IgTmdJdGVyYWJsZSB0aGF0IHdhcyBwYXNzZWQgdG8gKmNka1ZpcnR1YWxGb3IuICovXG4gICAgY2RrVmlydHVhbEZvck9mOiBEYXRhU291cmNlPFQ+IHwgT2JzZXJ2YWJsZTxUW10+IHwgTmdJdGVyYWJsZTxUPjtcbiAgICAvKiogVGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBEYXRhU291cmNlLiAqL1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIERhdGFTb3VyY2UuICovXG4gICAgY291bnQ6IG51bWJlcjtcbiAgICAvKiogV2hldGhlciB0aGlzIGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBEYXRhU291cmNlLiAqL1xuICAgIGZpcnN0OiBib29sZWFuO1xuICAgIC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgRGF0YVNvdXJjZS4gKi9cbiAgICBsYXN0OiBib29sZWFuO1xuICAgIC8qKiBXaGV0aGVyIHRoZSBpbmRleCBpcyBldmVuLiAqL1xuICAgIGV2ZW46IGJvb2xlYW47XG4gICAgLyoqIFdoZXRoZXIgdGhlIGluZGV4IGlzIG9kZC4gKi9cbiAgICBvZGQ6IGJvb2xlYW47XG59O1xuLyoqXG4gKiBBIGRpcmVjdGl2ZSBzaW1pbGFyIHRvIGBuZ0Zvck9mYCB0byBiZSB1c2VkIGZvciByZW5kZXJpbmcgZGF0YSBpbnNpZGUgYSB2aXJ0dWFsIHNjcm9sbGluZ1xuICogY29udGFpbmVyLlxuICovXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBDZGtWaXJ0dWFsRm9yT2Y8VD4gaW1wbGVtZW50cyBDZGtWaXJ0dWFsU2Nyb2xsUmVwZWF0ZXI8VD4sIENvbGxlY3Rpb25WaWV3ZXIsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSB2aWV3IGNvbnRhaW5lciB0byBhZGQgaXRlbXMgdG8uICovXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjtcbiAgICAvKiogVGhlIHRlbXBsYXRlIHRvIHVzZSB3aGVuIHN0YW1waW5nIG91dCBuZXcgaXRlbXMuICovXG4gICAgcHJpdmF0ZSBfdGVtcGxhdGU7XG4gICAgLyoqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGRpZmZlcnMuICovXG4gICAgcHJpdmF0ZSBfZGlmZmVycztcbiAgICAvKiogVGhlIHN0cmF0ZWd5IHVzZWQgdG8gcmVuZGVyIGl0ZW1zIGluIHRoZSB2aXJ0dWFsIHNjcm9sbCB2aWV3cG9ydC4gKi9cbiAgICBwcml2YXRlIF92aWV3UmVwZWF0ZXI7XG4gICAgLyoqIFRoZSB2aXJ0dWFsIHNjcm9sbGluZyB2aWV3cG9ydCB0aGF0IHRoZXNlIGl0ZW1zIGFyZSBiZWluZyByZW5kZXJlZCBpbi4gKi9cbiAgICBwcml2YXRlIF92aWV3cG9ydDtcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgcmVuZGVyZWQgdmlldyBvZiB0aGUgZGF0YSBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IHZpZXdDaGFuZ2U6IFN1YmplY3Q8TGlzdFJhbmdlPjtcbiAgICAvKiogU3ViamVjdCB0aGF0IGVtaXRzIHdoZW4gYSBuZXcgRGF0YVNvdXJjZSBpbnN0YW5jZSBpcyBnaXZlbi4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlQ2hhbmdlcztcbiAgICAvKiogVGhlIERhdGFTb3VyY2UgdG8gZGlzcGxheS4gKi9cbiAgICBnZXQgY2RrVmlydHVhbEZvck9mKCk6IERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBOZ0l0ZXJhYmxlPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBzZXQgY2RrVmlydHVhbEZvck9mKHZhbHVlOiBEYXRhU291cmNlPFQ+IHwgT2JzZXJ2YWJsZTxUW10+IHwgTmdJdGVyYWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWQpO1xuICAgIF9jZGtWaXJ0dWFsRm9yT2Y6IERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBOZ0l0ZXJhYmxlPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUaGUgYFRyYWNrQnlGdW5jdGlvbmAgdG8gdXNlIGZvciB0cmFja2luZyBjaGFuZ2VzLiBUaGUgYFRyYWNrQnlGdW5jdGlvbmAgdGFrZXMgdGhlIGluZGV4IGFuZFxuICAgICAqIHRoZSBpdGVtIGFuZCBwcm9kdWNlcyBhIHZhbHVlIHRvIGJlIHVzZWQgYXMgdGhlIGl0ZW0ncyBpZGVudGl0eSB3aGVuIHRyYWNraW5nIGNoYW5nZXMuXG4gICAgICovXG4gICAgZ2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCk6IFRyYWNrQnlGdW5jdGlvbjxUPiB8IHVuZGVmaW5lZDtcbiAgICBzZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoZm46IFRyYWNrQnlGdW5jdGlvbjxUPiB8IHVuZGVmaW5lZCk7XG4gICAgcHJpdmF0ZSBfY2RrVmlydHVhbEZvclRyYWNrQnk7XG4gICAgLyoqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHN0YW1wIG91dCBuZXcgZWxlbWVudHMuICovXG4gICAgc2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8Q2RrVmlydHVhbEZvck9mQ29udGV4dDxUPj4pO1xuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBjYWNoZSB1c2VkIHRvIHN0b3JlIHRlbXBsYXRlcyB0aGF0IGFyZSBub3QgYmVpbmcgdXNlZCBmb3IgcmUtdXNlIGxhdGVyLlxuICAgICAqIFNldHRpbmcgdGhlIGNhY2hlIHNpemUgdG8gYDBgIHdpbGwgZGlzYWJsZSBjYWNoaW5nLiBEZWZhdWx0cyB0byAyMCB0ZW1wbGF0ZXMuXG4gICAgICovXG4gICAgZ2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpOiBudW1iZXI7XG4gICAgc2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShzaXplOiBudW1iZXIpO1xuICAgIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgZGF0YSBpbiB0aGUgY3VycmVudCBEYXRhU291cmNlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgZGF0YVN0cmVhbTogT2JzZXJ2YWJsZTxyZWFkb25seSBUW10+O1xuICAgIC8qKiBUaGUgZGlmZmVyIHVzZWQgdG8gY2FsY3VsYXRlIGNoYW5nZXMgdG8gdGhlIGRhdGEuICovXG4gICAgcHJpdmF0ZSBfZGlmZmVyO1xuICAgIC8qKiBUaGUgbW9zdCByZWNlbnQgZGF0YSBlbWl0dGVkIGZyb20gdGhlIERhdGFTb3VyY2UuICovXG4gICAgcHJpdmF0ZSBfZGF0YTtcbiAgICAvKiogVGhlIGN1cnJlbnRseSByZW5kZXJlZCBpdGVtcy4gKi9cbiAgICBwcml2YXRlIF9yZW5kZXJlZEl0ZW1zO1xuICAgIC8qKiBUaGUgY3VycmVudGx5IHJlbmRlcmVkIHJhbmdlIG9mIGluZGljZXMuICovXG4gICAgcHJpdmF0ZSBfcmVuZGVyZWRSYW5nZTtcbiAgICAvKiogV2hldGhlciB0aGUgcmVuZGVyZWQgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCBkdXJpbmcgdGhlIG5leHQgbmdEb0NoZWNrIGN5Y2xlLiAqL1xuICAgIHByaXZhdGUgX25lZWRzVXBkYXRlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKiogVGhlIHZpZXcgY29udGFpbmVyIHRvIGFkZCBpdGVtcyB0by4gKi9cbiAgICBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgXG4gICAgLyoqIFRoZSB0ZW1wbGF0ZSB0byB1c2Ugd2hlbiBzdGFtcGluZyBvdXQgbmV3IGl0ZW1zLiAqL1xuICAgIF90ZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q2RrVmlydHVhbEZvck9mQ29udGV4dDxUPj4sIFxuICAgIC8qKiBUaGUgc2V0IG9mIGF2YWlsYWJsZSBkaWZmZXJzLiAqL1xuICAgIF9kaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsIFxuICAgIC8qKiBUaGUgc3RyYXRlZ3kgdXNlZCB0byByZW5kZXIgaXRlbXMgaW4gdGhlIHZpcnR1YWwgc2Nyb2xsIHZpZXdwb3J0LiAqL1xuICAgIF92aWV3UmVwZWF0ZXI6IF9SZWN5Y2xlVmlld1JlcGVhdGVyU3RyYXRlZ3k8VCwgVCwgQ2RrVmlydHVhbEZvck9mQ29udGV4dDxUPj4sIFxuICAgIC8qKiBUaGUgdmlydHVhbCBzY3JvbGxpbmcgdmlld3BvcnQgdGhhdCB0aGVzZSBpdGVtcyBhcmUgYmVpbmcgcmVuZGVyZWQgaW4uICovXG4gICAgX3ZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIG5nWm9uZTogTmdab25lKTtcbiAgICAvKipcbiAgICAgKiBNZWFzdXJlcyB0aGUgY29tYmluZWQgc2l6ZSAod2lkdGggZm9yIGhvcml6b250YWwgb3JpZW50YXRpb24sIGhlaWdodCBmb3IgdmVydGljYWwpIG9mIGFsbCBpdGVtc1xuICAgICAqIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIFRocm93cyBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaW5jbHVkZXMgaXRlbXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseVxuICAgICAqIHJlbmRlcmVkLlxuICAgICAqL1xuICAgIG1lYXN1cmVSYW5nZVNpemUocmFuZ2U6IExpc3RSYW5nZSwgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcpOiBudW1iZXI7XG4gICAgbmdEb0NoZWNrKCk6IHZvaWQ7XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZDtcbiAgICAvKiogUmVhY3QgdG8gc2Nyb2xsIHN0YXRlIGNoYW5nZXMgaW4gdGhlIHZpZXdwb3J0LiAqL1xuICAgIHByaXZhdGUgX29uUmVuZGVyZWREYXRhQ2hhbmdlO1xuICAgIC8qKiBTd2FwIG91dCBvbmUgYERhdGFTb3VyY2VgIGZvciBhbm90aGVyLiAqL1xuICAgIHByaXZhdGUgX2NoYW5nZURhdGFTb3VyY2U7XG4gICAgLyoqIFVwZGF0ZSB0aGUgYENka1ZpcnR1YWxGb3JPZkNvbnRleHRgIGZvciBhbGwgdmlld3MuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ29udGV4dDtcbiAgICAvKiogQXBwbHkgY2hhbmdlcyB0byB0aGUgRE9NLiAqL1xuICAgIHByaXZhdGUgX2FwcGx5Q2hhbmdlcztcbiAgICAvKiogVXBkYXRlIHRoZSBjb21wdXRlZCBwcm9wZXJ0aWVzIG9uIHRoZSBgQ2RrVmlydHVhbEZvck9mQ29udGV4dGAuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcztcbiAgICBwcml2YXRlIF9nZXRFbWJlZGRlZFZpZXdBcmdzO1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6IE51bWJlcklucHV0O1xufVxuIl19