UNPKG

@alfresco/adf-content-services

Version:
89 lines 13.3 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { inject, Injectable } from '@angular/core'; import { QueriesApi, SearchApi } from '@alfresco/js-api'; import { Subject, from } from 'rxjs'; import { AlfrescoApiService } from '../../services/alfresco-api.service'; import { SearchConfigurationService } from './search-configuration.service'; import * as i0 from "@angular/core"; export class SearchService { constructor() { this.apiService = inject(AlfrescoApiService); this.searchConfigurationService = inject(SearchConfigurationService); this.dataLoaded = new Subject(); } get queriesApi() { this._queriesApi = this._queriesApi ?? new QueriesApi(this.apiService.getInstance()); return this._queriesApi; } get searchApi() { this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance()); return this._searchApi; } /** * Gets a list of nodes that match the given search criteria. * * @param term Term to search for * @param options Options for delivery of the search results * @returns List of nodes resulting from the search */ getNodeQueryResults(term, options) { const promise = this.queriesApi.findNodes(term, options); promise.then((nodePaging) => { this.dataLoaded.next(nodePaging); }); return from(promise); } /** * Performs a search. * * @param searchTerm Term to search for * @param maxResults Maximum number of items in the list of results * @param skipCount Number of higher-ranked items to skip over in the list * @returns List of search results */ search(searchTerm, maxResults, skipCount) { const searchQuery = this.searchConfigurationService.generateQueryBody(searchTerm, maxResults, skipCount); const promise = this.searchApi.search(searchQuery); promise.then((nodePaging) => { this.dataLoaded.next(nodePaging); }); return from(promise); } /** * Performs a search with its parameters supplied by a request object. * * @param queryBody Object containing the search parameters * @returns List of search results */ searchByQueryBody(queryBody) { const promise = this.searchApi.search(queryBody); promise.then((nodePaging) => { this.dataLoaded.next(nodePaging); }); return from(promise); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3NlYXJjaC9zZXJ2aWNlcy9zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsVUFBVSxFQUFrQyxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRyxPQUFPLEVBQWMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLNUUsTUFBTSxPQUFPLGFBQWE7SUFIMUI7UUFJWSxlQUFVLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEMsK0JBQTBCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFeEUsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO0tBaUUvQztJQTlERyxJQUFJLFVBQVU7UUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBR0QsSUFBSSxTQUFTO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1CQUFtQixDQUFDLElBQVksRUFBRSxPQUF1QjtRQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsVUFBa0IsRUFBRSxVQUFrQixFQUFFLFNBQWlCO1FBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLFNBQXdCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7OEdBcEVRLGFBQWE7a0hBQWIsYUFBYSxjQUZWLE1BQU07OzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGVQYWdpbmcsIFF1ZXJpZXNBcGksIFNlYXJjaFJlcXVlc3QsIFJlc3VsdFNldFBhZ2luZywgU2VhcmNoQXBpIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGZyZXNjby1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VhcmNoLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlID0gaW5qZWN0KEFsZnJlc2NvQXBpU2VydmljZSk7XG4gICAgcHJpdmF0ZSBzZWFyY2hDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChTZWFyY2hDb25maWd1cmF0aW9uU2VydmljZSk7XG5cbiAgICBkYXRhTG9hZGVkID0gbmV3IFN1YmplY3Q8UmVzdWx0U2V0UGFnaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBfcXVlcmllc0FwaTogUXVlcmllc0FwaTtcbiAgICBnZXQgcXVlcmllc0FwaSgpOiBRdWVyaWVzQXBpIHtcbiAgICAgICAgdGhpcy5fcXVlcmllc0FwaSA9IHRoaXMuX3F1ZXJpZXNBcGkgPz8gbmV3IFF1ZXJpZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcmllc0FwaTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWFyY2hBcGk6IFNlYXJjaEFwaTtcbiAgICBnZXQgc2VhcmNoQXBpKCk6IFNlYXJjaEFwaSB7XG4gICAgICAgIHRoaXMuX3NlYXJjaEFwaSA9IHRoaXMuX3NlYXJjaEFwaSA/PyBuZXcgU2VhcmNoQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEFwaTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgbGlzdCBvZiBub2RlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVybSBUZXJtIHRvIHNlYXJjaCBmb3JcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBkZWxpdmVyeSBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIG5vZGVzIHJlc3VsdGluZyBmcm9tIHRoZSBzZWFyY2hcbiAgICAgKi9cbiAgICBnZXROb2RlUXVlcnlSZXN1bHRzKHRlcm06IHN0cmluZywgb3B0aW9ucz86IFNlYXJjaE9wdGlvbnMpOiBPYnNlcnZhYmxlPE5vZGVQYWdpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucXVlcmllc0FwaS5maW5kTm9kZXModGVybSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcHJvbWlzZS50aGVuKChub2RlUGFnaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQubmV4dChub2RlUGFnaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZyb20ocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBzZWFyY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VhcmNoVGVybSBUZXJtIHRvIHNlYXJjaCBmb3JcbiAgICAgKiBAcGFyYW0gbWF4UmVzdWx0cyBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBvZiByZXN1bHRzXG4gICAgICogQHBhcmFtIHNraXBDb3VudCBOdW1iZXIgb2YgaGlnaGVyLXJhbmtlZCBpdGVtcyB0byBza2lwIG92ZXIgaW4gdGhlIGxpc3RcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIHNlYXJjaCByZXN1bHRzXG4gICAgICovXG4gICAgc2VhcmNoKHNlYXJjaFRlcm06IHN0cmluZywgbWF4UmVzdWx0czogbnVtYmVyLCBza2lwQ291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8UmVzdWx0U2V0UGFnaW5nPiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5zZWFyY2hDb25maWd1cmF0aW9uU2VydmljZS5nZW5lcmF0ZVF1ZXJ5Qm9keShzZWFyY2hUZXJtLCBtYXhSZXN1bHRzLCBza2lwQ291bnQpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zZWFyY2hBcGkuc2VhcmNoKHNlYXJjaFF1ZXJ5KTtcblxuICAgICAgICBwcm9taXNlLnRoZW4oKG5vZGVQYWdpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUxvYWRlZC5uZXh0KG5vZGVQYWdpbmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZnJvbShwcm9taXNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIHNlYXJjaCB3aXRoIGl0cyBwYXJhbWV0ZXJzIHN1cHBsaWVkIGJ5IGEgcmVxdWVzdCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcXVlcnlCb2R5IE9iamVjdCBjb250YWluaW5nIHRoZSBzZWFyY2ggcGFyYW1ldGVyc1xuICAgICAqIEByZXR1cm5zIExpc3Qgb2Ygc2VhcmNoIHJlc3VsdHNcbiAgICAgKi9cbiAgICBzZWFyY2hCeVF1ZXJ5Qm9keShxdWVyeUJvZHk6IFNlYXJjaFJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc3VsdFNldFBhZ2luZz4ge1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zZWFyY2hBcGkuc2VhcmNoKHF1ZXJ5Qm9keSk7XG5cbiAgICAgICAgcHJvbWlzZS50aGVuKChub2RlUGFnaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQubmV4dChub2RlUGFnaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZyb20ocHJvbWlzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE9wdGlvbnMge1xuICAgIC8qKiBUaGUgbnVtYmVyIG9mIGVudGl0aWVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3Rpb24gYmVmb3JlIHRob3NlIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gKi9cbiAgICBza2lwQ291bnQ/OiBudW1iZXI7XG5cbiAgICAvKiogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybiBpbiB0aGUgbGlzdC4gKi9cbiAgICBtYXhJdGVtcz86IG51bWJlcjtcblxuICAgIC8qKiBUaGUgaWQgb2YgdGhlIG5vZGUgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLiBTdXBwb3J0cyB0aGUgYWxpYXNlcyAtbXktLCAtcm9vdC0gYW5kIC1zaGFyZWQtLiAqL1xuICAgIHJvb3ROb2RlSWQ/OiBzdHJpbmc7XG5cbiAgICAvKiogUmVzdHJpY3QgdGhlIHJldHVybmVkIHJlc3VsdHMgdG8gb25seSB0aG9zZSBvZiB0aGUgZ2l2ZW4gbm9kZSB0eXBlIGFuZCBpdHMgc3ViLXR5cGVzLiAqL1xuICAgIG5vZGVUeXBlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUuIFRoZSBhdmFpbGFibGUgb3B0aW9uYWwgZmllbGRzIGFyZTpcbiAgICAgKiBgYWxsb3dhYmxlT3BlcmF0aW9uc2AsIGBhc3BlY3ROYW1lc2AsIGBpc0xpbmtgLCBgaXNMb2NrZWRgLCBgcGF0aGAgYW5kIGBwcm9wZXJ0aWVzYC5cbiAgICAgKi9cbiAgICBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgYXJyYXkgdG8gY29udHJvbCB0aGUgb3JkZXIgb2YgdGhlIGVudGl0aWVzIHJldHVybmVkIGluIGEgbGlzdC4gWW91IGNhbiB1c2UgdGhpc1xuICAgICAqIHBhcmFtZXRlciB0byBzb3J0IHRoZSBsaXN0IGJ5IG9uZSBvciBtb3JlIGZpZWxkcy4gRWFjaCBmaWVsZCBoYXMgYSBkZWZhdWx0IHNvcnQgb3JkZXIsXG4gICAgICogd2hpY2ggaXMgbm9ybWFsbHkgYXNjZW5kaW5nIG9yZGVyIChidXQgc2VlIHRoZSBKUy1BUEkgZG9jcyB0byBjaGVjayBpZiBhbnkgZmllbGRzIHVzZWRcbiAgICAgKiBpbiBhIG1ldGhvZCBoYXZlIGEgZGVzY2VuZGluZyBkZWZhdWx0IHNlYXJjaCBvcmRlcikuIFRvIHNvcnQgdGhlIGVudGl0aWVzIGluIGEgc3BlY2lmaWNcbiAgICAgKiBvcmRlciwgeW91IGNhbiB1c2UgdGhlIFwiQVNDXCIgYW5kIFwiREVTQ1wiIGtleXdvcmRzIGZvciBhbnkgZmllbGQuXG4gICAgICovXG4gICAgb3JkZXJCeT86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBmaWVsZCBuYW1lcy4gWW91IGNhbiB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmVzdHJpY3QgdGhlIGZpZWxkcyByZXR1cm5lZCB3aXRoaW5cbiAgICAgKiBhIHJlc3BvbnNlIGlmLCBmb3IgZXhhbXBsZSwgeW91IHdhbnQgdG8gc2F2ZSBvbiBvdmVyYWxsIGJhbmR3aWR0aC4gVGhlIGxpc3QgYXBwbGllcyB0byBhXG4gICAgICogcmV0dXJuZWQgaW5kaXZpZHVhbCBlbnRpdHkgb3IgZW50cmllcyB3aXRoaW4gYSBjb2xsZWN0aW9uLiBJZiB0aGUgQVBJIG1ldGhvZCBhbHNvIHN1cHBvcnRzXG4gICAgICogdGhlIGBpbmNsdWRlYCBwYXJhbWV0ZXIsIHRoZW4gdGhlIGZpZWxkcyBzcGVjaWZpZWQgaW4gdGhlIGluY2x1ZGUgcGFyYW1ldGVyIGFyZSByZXR1cm5lZCBpblxuICAgICAqIGFkZGl0aW9uIHRvIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgZmllbGRzIHBhcmFtZXRlci5cbiAgICAgKi9cbiAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==