UNPKG

e5core-angular-ui

Version:

e5 Anywhere Angular UI

511 lines 42.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { UiSearchDefinitionService, WorkSearchFoundationService } from 'e5core-angular-services'; import { DataSourceColumnStatus } from './data-source-column'; import * as i0 from "@angular/core"; import * as i1 from "e5core-angular-services"; /** @type {?} */ const TESTDATA = { '$id': '2111', 'findClassId': 4, 'page': 0, 'pageSize': 10, 'resultCount': 10, 'total': 24, 'columns': [ { '$id': '2112', 'code': 'Id', 'label': 'Work Id', 'type': 'System.Guid' }, { '$id': '2113', 'code': 'SLAExpiryDate', 'label': 'Due Date', 'type': 'System.DateTime' }, { '$id': '2114', 'code': 'Allocation', 'label': 'Allocation', 'type': 'System.String' }, { '$id': '2115', 'code': '_NextDueTask', 'label': 'Next Due Task', 'type': 'System.String' }, { '$id': '2116', 'code': 'Status_Id', 'label': 'Status', 'type': 'System.String' }, { '$id': '2117', 'code': 'AssignedUser', 'label': 'Assigned User', 'type': 'System.String' }, { '$id': '2118', 'code': 'Category1_Id', 'label': 'Business Area', 'type': 'System.String' }, { '$id': '2119', 'code': 'Category3_Id', 'label': 'Category', 'type': 'System.String' }, { '$id': '2120', 'code': 'HealthFundNumber', 'label': 'Client Number', 'type': 'System.String' }, { '$id': '2121', 'code': 'FirstName', 'label': 'First Name', 'type': 'System.String' }, { '$id': '2122', 'code': 'Surname', 'label': 'Surname', 'type': 'System.String' }, { '$id': '2123', 'code': 'Category2_Id', 'label': 'Product Type', 'type': 'System.String' }, { '$id': '2124', 'code': 'ProviderName', 'label': 'Provider Name', 'type': 'System.String' }, { '$id': '2125', 'code': 'ProviderNumber', 'label': 'Provider Number', 'type': 'System.String' }, { '$id': '2126', 'code': 'Reference', 'label': 'Reference', 'type': 'System.Int32' }, { '$id': '2127', 'code': 'RelatedItem', 'label': 'Related Items', 'type': 'System.String' }, { '$id': '2128', 'code': '_SLAExpiryStatus', 'label': '_SLAExpiryStatus', 'type': 'System.String' } ], 'results': [ [ 'ca3a1219-03eb-11e9-9682-005056ba65e4', '2018-12-24T11:11:27+11:00', '2|1005|1011|0', null, 'Complete', null, 'Member Health', 'Benefit Eligibility', '29405564', null, null, 'Ancillary Benefits Management', '', '25', 1778, null, 'within' ], [ '603b82ff-03e6-11e9-9682-005056ba65e4', '2018-12-24T10:32:41+11:00', '2|1002|1037|0', null, 'Complete', 'Leo Santos', 'Member Health', 'Benefit Eligibility', '29405564', null, null, 'Clinical Review', '', '24', 1776, null, 'within' ], [ '2b4701f5-03e6-11e9-9682-005056ba65e4', '2018-12-24T10:31:12+11:00', '2|1005|1010|0', null, 'Active', null, 'Member Health', 'Benefit Review', '29405564', null, null, 'Ancillary Benefits Management', '', '22', 1775, null, 'within' ], [ 'f2e4ce57-033d-11e9-9682-005056ba65e4', '2018-12-21T14:27:02+11:00', '2|1005|1014|0', null, 'Complete', 'Devashi Wesumperuma', 'Member Health', 'Investigation', '29405564', null, null, 'Ancillary Benefits Management', '', '19', 1769, null, 'within' ], [ '6d575c6c-0327-11e9-9682-005056ba65e4', '2018-12-21T11:45:49+11:00', '2|1006|1012|0', null, 'Complete', 'Vinh Tang', 'Member Health', 'Unclassified', '29405564', null, null, 'Unclassified', '', '18', 1768, null, 'within' ], [ 'd417c057-0326-11e9-9682-005056ba65e4', '2018-12-21T11:41:32+11:00', '2|1006|1012|0', null, 'Complete', null, 'Member Health', 'Unclassified', '29405564', null, null, 'Unclassified', '', '17', 1767, null, 'within' ], [ 'f72a5b05-0325-11e9-9682-005056ba65e4', '2018-12-21T11:35:22+11:00', '2|1004|1017|0', null, 'Complete', null, 'Member Health', 'Exgratia', '29405564', null, null, 'Compensable', '', '16', 1766, null, 'within' ], [ 'e88fefe7-0325-11e9-9682-005056ba65e4', '2018-12-21T11:34:57+11:00', '2|1005|1010|0', null, 'Complete', null, 'Member Health', 'Benefit Review', '29405564', null, null, 'Ancillary Benefits Management', '', '15', 1765, null, 'within' ], [ '644e3d8c-0325-11e9-9682-005056ba65e4', '2018-12-21T11:31:15+11:00', '2|1005|1010|0', null, 'Complete', null, 'Member Health', 'Benefit Review', '29405564', null, null, 'Ancillary Benefits Management', '', '14', 1764, null, 'within' ], [ '3588e678-0325-11e9-9682-005056ba65e4', '2018-12-21T11:29:57+11:00', '2|1003|1031|0', null, 'Complete', null, 'Member Health', 'Investigation', '29405564', null, null, 'Investigations', '', '13', 1763, null, 'within' ] ] }; export class SearchDataSourceService { /** * @param {?} searchDefinitionService * @param {?} searchService */ constructor(searchDefinitionService, searchService) { this.searchDefinitionService = searchDefinitionService; this.searchService = searchService; this.SlaExpiryColumnCode = '_SLAExpiryStatus'; this.NextTaskColumnCode = '_NextDueTask'; this.searchDefinitionId = 0; this.searchOptions = {}; } /** * @return {?} */ defaultOptions() { return (this.searchOptions); } /** * @param {?} options * @return {?} */ setDefaultOptions(options) { this.searchOptions = Object.assign({}, options); // clone } /** * @param {?} id * @return {?} */ setSearchDefinitionId(id) { this.searchDefinitionId = id; return (this); } /** * @return {?} */ columns() { return this.searchDefinitionService.get(this.searchDefinitionId).pipe(map(r => { /** @type {?} */ const columns = r.searchFields.map(sf => (/** @type {?} */ ({ code: sf.fieldDefinitionId, label: sf.fieldLabel, type: sf.fieldDataType, status: sf.fieldStatus }))); return this.addOptionalColumns(columns); })); } /** * @private * @param {?} columns * @return {?} */ addOptionalColumns(columns) { if (this.searchOptions) { if (this.searchOptions.includeSla) { // Add to start columns.unshift((/** @type {?} */ ({ label: 'SLA', code: this.SlaExpiryColumnCode, type: 'SLA', status: DataSourceColumnStatus.Selected }))); } if (this.searchOptions.includeNextDueTask) { // Add to end columns.push((/** @type {?} */ ({ code: this.NextTaskColumnCode, label: 'Next Due Task', type: 'Input', status: DataSourceColumnStatus.Selected }))); } } return (columns); } /** * @param {?} page * @param {?} pageSize * @param {?} optionsIn * @return {?} */ read(page, pageSize, optionsIn) { /** @type {?} */ const options = Object.assign({}, this.searchOptions, optionsIn, { page: page, pageSize: pageSize }); /** @type {?} */ const filterBy = this.mapQueryToFilterBy(options.query); return this.searchService.getFindWorkItem(this.searchDefinitionId, filterBy, options) .pipe(map(results => { return { total: results.total, data: this.mapResults(results) }; })); } /** * The data that comes back from the API is a columns defintion and an array * of array of data. We need to map this into an array of objects with the column property * id as the object key so that it's easier to handle by the table. * @private * @param {?} model * @return {?} */ mapResults(model) { /** @type {?} */ const data = model.results; /** @type {?} */ let results; if (model && model.total > 0 && model.results && model.columns) { /** @type {?} */ const colDefs = model.columns; results = model.results.map(r => { /** @type {?} */ const dataRow = r; /** @type {?} */ const objectRow = {}; for (let c = 0; c < colDefs.length; c++) { /** @type {?} */ const columnDef = colDefs[c]; objectRow[columnDef.code] = dataRow[c]; } return (objectRow); }); } return results; } // In order to use the foundation service we need to map the DataSourceQuery into // the underlying foundation query // { // 'filters': [ // { // 'field': 'string', // 'operator': 'string', // 'value': 'string' // } // ], // 'logic': 'string' // } /** * @private * @param {?} query * @return {?} */ mapQueryToFilterBy(query) { /** @type {?} */ let filterBy = {}; if (query && query.Expressions && query.Expressions.length > 0) { /** @type {?} */ const filters = query.Expressions .filter(e => e.Value) .map(e => { return { field: e.Field, value: e.Value }; }); filterBy = { filters: filters }; } return (filterBy); } } SearchDataSourceService.decorators = [ { type: Injectable, args: [{ providedIn: null // 'root' },] } ]; /** @nocollapse */ SearchDataSourceService.ctorParameters = () => [ { type: UiSearchDefinitionService }, { type: WorkSearchFoundationService } ]; /** @nocollapse */ SearchDataSourceService.ngInjectableDef = i0.defineInjectable({ factory: function SearchDataSourceService_Factory() { return new SearchDataSourceService(i0.inject(i1.UiSearchDefinitionService), i0.inject(i1.WorkSearchFoundationService)); }, token: SearchDataSourceService, providedIn: null }); if (false) { /** @type {?} */ SearchDataSourceService.prototype.SlaExpiryColumnCode; /** @type {?} */ SearchDataSourceService.prototype.NextTaskColumnCode; /** @type {?} */ SearchDataSourceService.prototype.searchDefinitionId; /** @type {?} */ SearchDataSourceService.prototype.searchOptions; /** * @type {?} * @private */ SearchDataSourceService.prototype.searchDefinitionService; /** * @type {?} * @private */ SearchDataSourceService.prototype.searchService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRhdGEtc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9lNWNvcmUtYW5ndWxhci11aS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhc291cmNlL3NlYXJjaC1kYXRhLXNvdXJjZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRyxPQUFPLEVBQW9CLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7TUFRMUUsUUFBUSxHQUFHO0lBQ2IsS0FBSyxFQUFFLE1BQU07SUFDYixhQUFhLEVBQUUsQ0FBQztJQUNoQixNQUFNLEVBQUUsQ0FBQztJQUNULFVBQVUsRUFBRSxFQUFFO0lBQ2QsYUFBYSxFQUFFLEVBQUU7SUFDakIsT0FBTyxFQUFFLEVBQUU7SUFDWCxTQUFTLEVBQUU7UUFDUjtZQUNHLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLElBQUk7WUFDWixPQUFPLEVBQUUsU0FBUztZQUNsQixNQUFNLEVBQUUsYUFBYTtTQUN2QjtRQUNEO1lBQ0csS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsZUFBZTtZQUN2QixPQUFPLEVBQUUsVUFBVTtZQUNuQixNQUFNLEVBQUUsaUJBQWlCO1NBQzNCO1FBQ0Q7WUFDRyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE1BQU0sRUFBRSxlQUFlO1NBQ3pCO1FBQ0Q7WUFDRyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE1BQU0sRUFBRSxlQUFlO1NBQ3pCO1FBQ0Q7WUFD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Q29udGVudCI6WyJpbXBvcnQgeyBJRGF0YVNvdXJjZSB9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaVNlYXJjaERlZmluaXRpb25TZXJ2aWNlLCBXb3JrU2VhcmNoRm91bmRhdGlvblNlcnZpY2UgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VDb2x1bW4sIERhdGFTb3VyY2VDb2x1bW5TdGF0dXMgfSBmcm9tICcuL2RhdGEtc291cmNlLWNvbHVtbic7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VSZXN1bHRzIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1yZXN1bHRzJztcclxuaW1wb3J0IHsgRm91bmRhdGlvbldvcmtGaW5kV29ya0l0ZW1SZXN1bHRNb2RlbCB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgRm91bmRhdGlvbldvcmtGaW5kV29ya0l0ZW1Db2x1bW5EZWZNb2RlbCB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgU2VhcmNoRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL3NlYXJjaC1kYXRhLXNvdXJjZS1vcHRpb25zJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL2RhdGEtc291cmNlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlUXVlcnkgfSBmcm9tICcuL2RhdGEtc291cmNlLXF1ZXJ5JztcclxuXHJcbmNvbnN0IFRFU1REQVRBID0ge1xyXG4gICAgJyRpZCc6ICcyMTExJyxcclxuICAgICdmaW5kQ2xhc3NJZCc6IDQsXHJcbiAgICAncGFnZSc6IDAsXHJcbiAgICAncGFnZVNpemUnOiAxMCxcclxuICAgICdyZXN1bHRDb3VudCc6IDEwLFxyXG4gICAgJ3RvdGFsJzogMjQsXHJcbiAgICAnY29sdW1ucyc6IFtcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExMicsXHJcbiAgICAgICAgICAnY29kZSc6ICdJZCcsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnV29yayBJZCcsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uR3VpZCdcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTMnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnU0xBRXhwaXJ5RGF0ZScsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnRHVlIERhdGUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLkRhdGVUaW1lJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNCcsXHJcbiAgICAgICAgICAnY29kZSc6ICdBbGxvY2F0aW9uJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdBbGxvY2F0aW9uJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTE1JyxcclxuICAgICAgICAgICdjb2RlJzogJ19OZXh0RHVlVGFzaycsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnTmV4dCBEdWUgVGFzaycsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNicsXHJcbiAgICAgICAgICAnY29kZSc6ICdTdGF0dXNfSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1N0YXR1cycsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNycsXHJcbiAgICAgICAgICAnY29kZSc6ICdBc3NpZ25lZFVzZXInLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0Fzc2lnbmVkIFVzZXInLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTgnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQ2F0ZWdvcnkxX0lkJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdCdXNpbmVzcyBBcmVhJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTE5JyxcclxuICAgICAgICAgICdjb2RlJzogJ0NhdGVnb3J5M19JZCcsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQ2F0ZWdvcnknLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjAnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnSGVhbHRoRnVuZE51bWJlcicsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQ2xpZW50IE51bWJlcicsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyMScsXHJcbiAgICAgICAgICAnY29kZSc6ICdGaXJzdE5hbWUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0ZpcnN0IE5hbWUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjInLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnU3VybmFtZScsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnU3VybmFtZScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyMycsXHJcbiAgICAgICAgICAnY29kZSc6ICdDYXRlZ29yeTJfSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1Byb2R1Y3QgVHlwZScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyNCcsXHJcbiAgICAgICAgICAnY29kZSc6ICdQcm92aWRlck5hbWUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1Byb3ZpZGVyIE5hbWUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjUnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnUHJvdmlkZXJOdW1iZXInLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1Byb3ZpZGVyIE51bWJlcicsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyNicsXHJcbiAgICAgICAgICAnY29kZSc6ICdSZWZlcmVuY2UnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1JlZmVyZW5jZScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uSW50MzInXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTI3JyxcclxuICAgICAgICAgICdjb2RlJzogJ1JlbGF0ZWRJdGVtJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdSZWxhdGVkIEl0ZW1zJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTI4JyxcclxuICAgICAgICAgICdjb2RlJzogJ19TTEFFeHBpcnlTdGF0dXMnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ19TTEFFeHBpcnlTdGF0dXMnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH1cclxuICAgIF0sXHJcbiAgICAncmVzdWx0cyc6IFtcclxuICAgICAgIFtcclxuICAgICAgICAgICdjYTNhMTIxOS0wM2ViLTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjRUMTE6MTE6MjcrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDExfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgRWxpZ2liaWxpdHknLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0FuY2lsbGFyeSBCZW5lZml0cyBNYW5hZ2VtZW50JyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzI1JyxcclxuICAgICAgICAgIDE3NzgsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnNjAzYjgyZmYtMDNlNi0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTI0VDEwOjMyOjQxKzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDJ8MTAzN3wwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgJ0xlbyBTYW50b3MnLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgRWxpZ2liaWxpdHknLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NsaW5pY2FsIFJldmlldycsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcyNCcsXHJcbiAgICAgICAgICAxNzc2LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzJiNDcwMWY1LTAzZTYtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yNFQxMDozMToxMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTB8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0FjdGl2ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgUmV2aWV3JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcyMicsXHJcbiAgICAgICAgICAxNzc1LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2YyZTRjZTU3LTAzM2QtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxNDoyNzowMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTR8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgICdEZXZhc2hpIFdlc3VtcGVydW1hJyxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdJbnZlc3RpZ2F0aW9uJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxOScsXHJcbiAgICAgICAgICAxNzY5LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzZkNTc1YzZjLTAzMjctMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTo0NTo0OSsxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA2fDEwMTJ8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgICdWaW5oIFRhbmcnLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ1VuY2xhc3NpZmllZCcsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnVW5jbGFzc2lmaWVkJyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzE4JyxcclxuICAgICAgICAgIDE3NjgsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnZDQxN2MwNTctMDMyNi0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTIxVDExOjQxOjMyKzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDZ8MTAxMnwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdVbmNsYXNzaWZpZWQnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ1VuY2xhc3NpZmllZCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNycsXHJcbiAgICAgICAgICAxNzY3LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2Y3MmE1YjA1LTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTozNToyMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA0fDEwMTd8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnRXhncmF0aWEnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBlbnNhYmxlJyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzE2JyxcclxuICAgICAgICAgIDE3NjYsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnZTg4ZmVmZTctMDMyNS0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTIxVDExOjM0OjU3KzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDV8MTAxMHwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IFJldmlldycsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNScsXHJcbiAgICAgICAgICAxNzY1LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzY0NGUzZDhjLTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTozMToxNSsxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTB8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnQmVuZWZpdCBSZXZpZXcnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0FuY2lsbGFyeSBCZW5lZml0cyBNYW5hZ2VtZW50JyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzE0JyxcclxuICAgICAgICAgIDE3NjQsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnMzU4OGU2NzgtMDMyNS0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTIxVDExOjI5OjU3KzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDN8MTAzMXwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdJbnZlc3RpZ2F0aW9uJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdJbnZlc3RpZ2F0aW9ucycsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxMycsXHJcbiAgICAgICAgICAxNzYzLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdXHJcbiAgICBdXHJcbiB9IDtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IG51bGwgLy8gJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hEYXRhU291cmNlU2VydmljZSBpbXBsZW1lbnRzIElEYXRhU291cmNlIHtcclxuXHJcbiAgICByZWFkb25seSBTbGFFeHBpcnlDb2x1bW5Db2RlID0gJ19TTEFFeHBpcnlTdGF0dXMnO1xyXG4gICAgcmVhZG9ubHkgTmV4dFRhc2tDb2x1bW5Db2RlID0gJ19OZXh0RHVlVGFzayc7XHJcblxyXG4gICAgc2VhcmNoRGVmaW5pdGlvbklkID0gMDtcclxuICAgIHNlYXJjaE9wdGlvbnM6IFNlYXJjaERhdGFTb3VyY2VPcHRpb25zID0ge30gO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VhcmNoRGVmaW5pdGlvblNlcnZpY2U6IFVpU2VhcmNoRGVmaW5pdGlvblNlcnZpY2UsIHByaXZhdGUgc2VhcmNoU2VydmljZTogV29ya1NlYXJjaEZvdW5kYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlZmF1bHRPcHRpb25zKCk6IERhdGFTb3VyY2VPcHRpb25zIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VhcmNoT3B0aW9ucykgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyA9IHsuLi5vcHRpb25zfSA7IC8vIGNsb25lXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlYXJjaERlZmluaXRpb25JZChpZDogbnVtYmVyKTogU2VhcmNoRGF0YVNvdXJjZVNlcnZpY2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRGVmaW5pdGlvbklkID0gaWQ7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb2x1bW5zKCk6IE9ic2VydmFibGU8RGF0YVNvdXJjZUNvbHVtbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoRGVmaW5pdGlvblNlcnZpY2UuZ2V0KHRoaXMuc2VhcmNoRGVmaW5pdGlvbklkKS5waXBlPERhdGFTb3VyY2VDb2x1bW5bXT4oXHJcbiAgICAgICAgICAgIG1hcChyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSByLnNlYXJjaEZpZWxkcy5tYXA8RGF0YVNvdXJjZUNvbHVtbj4oc2YgPT4gPERhdGFTb3VyY2VDb2x1bW4+e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHNmLmZpZWxkRGVmaW5pdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZi5maWVsZExhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHNmLmZpZWxkRGF0YVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzZi5maWVsZFN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSkgO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkT3B0aW9uYWxDb2x1bW5zKGNvbHVtbnMpIDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE9wdGlvbmFsQ29sdW1ucyhjb2x1bW5zOiBEYXRhU291cmNlQ29sdW1uW10pOiBEYXRhU291cmNlQ29sdW1uW10ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoT3B0aW9ucy5pbmNsdWRlU2xhKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgdG8gc3RhcnRcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMudW5zaGlmdCg8RGF0YVNvdXJjZUNvbHVtbj57XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTTEEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHRoaXMuU2xhRXhwaXJ5Q29sdW1uQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU0xBJyxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IERhdGFTb3VyY2VDb2x1bW5TdGF0dXMuU2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgIH0pIDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hPcHRpb25zLmluY2x1ZGVOZXh0RHVlVGFzaykge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRvIGVuZFxyXG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKDxEYXRhU291cmNlQ29sdW1uPntcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLk5leHRUYXNrQ29sdW1uQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05leHQgRHVlIFRhc2snLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdJbnB1dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBEYXRhU291cmNlQ29sdW1uU3RhdHVzLlNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICB9KSA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChjb2x1bW5zKSA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWQocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyLCBvcHRpb25zSW46IERhdGFTb3VyY2VPcHRpb25zKTogT2JzZXJ2YWJsZTxEYXRhU291cmNlUmVzdWx0cz4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IFNlYXJjaERhdGFTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnNlYXJjaE9wdGlvbnMsXHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnNJbixcclxuICAgICAgICAgICAgcGFnZTogcGFnZSxcclxuICAgICAgICAgICAgcGFnZVNpemU6IHBhZ2VTaXplXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZpbHRlckJ5ID0gdGhpcy5tYXBRdWVyeVRvRmlsdGVyQnkob3B0aW9ucy5xdWVyeSkgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmluZFdvcmtJdGVtKHRoaXMuc2VhcmNoRGVmaW5pdGlvbklkLCBmaWx0ZXJCeSwgb3B0aW9ucylcclxuICAgICAgICAgICAgLnBpcGU8RGF0YVNvdXJjZVJlc3VsdHM+KFxyXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiByZXN1bHRzLnRvdGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLm1hcFJlc3VsdHMocmVzdWx0cylcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIFRoZSBkYXRhIHRoYXQgY29tZXMgYmFjayBmcm9tIHRoZSBBUEkgaXMgYSBjb2x1bW5zIGRlZmludGlvbiBhbmQgYW4gYXJyYXlcclxuICAgKiBvZiBhcnJheSBvZiBkYXRhLiBXZSBuZWVkIHRvIG1hcCB0aGlzIGludG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBjb2x1bW4gcHJvcGVydHlcclxuICAgKiBpZCBhcyB0aGUgb2JqZWN0IGtleSBzbyB0aGF0IGl0J3MgZWFzaWVyIHRvIGhhbmRsZSBieSB0aGUgdGFibGUuXHJcbiAgICogQHBhcmFtIG1vZGVsXHJcbiAgICovXHJcbiAgICBwcml2YXRlIG1hcFJlc3VsdHMobW9kZWw6IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtUmVzdWx0TW9kZWwpOiBhbnlbXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IGFueVtdW10gPSBtb2RlbC5yZXN1bHRzO1xyXG4gICAgICAgIGxldCByZXN1bHRzOiBhbnlbXTtcclxuXHJcbiAgICAgICAgaWYgKG1vZGVsICYmIG1vZGVsLnRvdGFsID4gMCAmJiBtb2RlbC5yZXN1bHRzICYmIG1vZGVsLmNvbHVtbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sRGVmczogRm91bmRhdGlvbldvcmtGaW5kV29ya0l0ZW1Db2x1bW5EZWZNb2RlbFtdID0gbW9kZWwuY29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBtb2RlbC5yZXN1bHRzLm1hcDxhbnk+KHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVJvdzogYW55W10gPSByO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0Um93OiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sRGVmcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZiA9IGNvbERlZnNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0Um93W2NvbHVtbkRlZi5jb2RlXSA9IGRhdGFSb3dbY107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG9iamVjdFJvdyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0cyA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEluIG9yZGVyIHRvIHVzZSB0aGUgZm91bmRhdGlvbiBzZXJ2aWNlIHdlIG5lZWQgdG8gbWFwIHRoZSBEYXRhU291cmNlUXVlcnkgaW50byBcclxuICAgIC8vICB0aGUgdW5kZXJseWluZyBmb3VuZGF0aW9uIHF1ZXJ5XHJcbiAgICAvLyBcdHtcclxuICAgIC8vIFx0XHQnZmlsdGVycyc6IFtcclxuICAgIC8vIFx0ICBcdFx0e1xyXG4gICAgLy8gXHRcdFx0XHQnZmllbGQnOiAnc3RyaW5nJyxcclxuICAgIC8vIFx0XHRcdFx0J29wZXJhdG9yJzogJ3N0cmluZycsXHJcbiAgICAvLyBcdFx0XHRcdCd2YWx1ZSc6ICdzdHJpbmcnXHJcbiAgICAvLyBcdCAgXHRcdH1cclxuICAgIC8vIFx0XHRdLFxyXG4gICAgLy8gXHRcdCdsb2dpYyc6ICdzdHJpbmcnXHJcbiAgICAvLyBcdH1cclxuICAgIHByaXZhdGUgbWFwUXVlcnlUb0ZpbHRlckJ5KHF1ZXJ5OiBEYXRhU291cmNlUXVlcnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJCeSA9IHt9IDtcclxuICAgICAgICBpZiAocXVlcnkgJiYgcXVlcnkuRXhwcmVzc2lvbnMgJiYgcXVlcnkuRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gcXVlcnkuRXhwcmVzc2lvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoIGUgPT4gZS5WYWx1ZSApXHJcbiAgICAgICAgICAgICAgICAubWFwKCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA6IGUuRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDogZS5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KSA7XHJcbiAgICAgICAgICAgIGZpbHRlckJ5ID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycyA6IGZpbHRlcnNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChmaWx0ZXJCeSkgO1xyXG4gICAgfVxyXG59Il19