UNPKG

@sam17896/ngx-speech-recognition

Version:

Angular 5+ speech recognition service (based on browser implementation such as Chrome).

93 lines 26.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/speech-recognition.module.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { NgModule, Inject, PLATFORM_ID, } from '@angular/core'; import { isPlatformBrowser, } from '@angular/common'; import { SpeechRecognitionGrammars, SpeechRecognitionLang, SpeechRecognitionContinuous, SpeechRecognitionInterimResults, SpeechRecognitionMaxAlternatives, SpeechRecognitionServiceUri, SpeechRecognitionAudiostartHandler, SpeechRecognitionSoundstartHandler, SpeechRecognitionSpeechstartHandler, SpeechRecognitionSpeechendHandler, SpeechRecognitionSoundendHandler, SpeechRecognitionAudioendHandler, SpeechRecognitionResultHandler, SpeechRecognitionNomatchHandler, SpeechRecognitionErrorHandler, SpeechRecognitionStartHandler, SpeechRecognitionEndHandler, } from './service/speech-recognition.token'; import { RxSpeechRecognitionService, } from './service/rx-speech-recognition.service'; import { SpeechRecognitionService, } from './service/speech-recognition.service'; import { SPEECH_RECOGNITION_DEFAULT } from './speech-recognition.provider'; export class SpeechRecognitionModule { /** * @param {?} platformId */ constructor(platformId) { if (isPlatformBrowser(platformId) === false) { throw new Error('SpeechRecognitionModule: it run on PlatformBrowser.'); } } /** * @param {?} config * @return {?} */ static forRoot(config) { return { ngModule: SpeechRecognitionModule, providers: [ // tslint:disable:max-line-length ...(config.grammars !== undefined && config.grammars != null ? [{ useValue: config.grammars, provide: SpeechRecognitionGrammars }] : []), ...(config.lang !== undefined && config.lang != null ? [{ useValue: config.lang, provide: SpeechRecognitionLang }] : []), ...(config.continuous !== undefined && config.continuous != null ? [{ useValue: config.continuous, provide: SpeechRecognitionContinuous }] : []), ...(config.interimResults !== undefined && config.interimResults != null ? [{ useValue: config.interimResults, provide: SpeechRecognitionInterimResults }] : []), ...(config.maxAlternatives !== undefined && config.maxAlternatives != null ? [{ useValue: config.maxAlternatives, provide: SpeechRecognitionMaxAlternatives }] : []), ...(config.serviceURI !== undefined && config.serviceURI != null ? [{ useValue: config.serviceURI, provide: SpeechRecognitionServiceUri }] : []), ...(config.onaudiostart instanceof Function ? [{ useValue: config.onaudiostart, provide: SpeechRecognitionAudiostartHandler }] : []), ...(config.onsoundstart instanceof Function ? [{ useValue: config.onsoundstart, provide: SpeechRecognitionSoundstartHandler }] : []), ...(config.onspeechstart instanceof Function ? [{ useValue: config.onspeechstart, provide: SpeechRecognitionSpeechstartHandler }] : []), ...(config.onspeechend instanceof Function ? [{ useValue: config.onspeechend, provide: SpeechRecognitionSpeechendHandler }] : []), ...(config.onsoundend instanceof Function ? [{ useValue: config.onsoundend, provide: SpeechRecognitionSoundendHandler }] : []), ...(config.onaudioend instanceof Function ? [{ useValue: config.onaudioend, provide: SpeechRecognitionAudioendHandler }] : []), ...(config.onresult instanceof Function ? [{ useValue: config.onresult, provide: SpeechRecognitionResultHandler }] : []), ...(config.onnomatch instanceof Function ? [{ useValue: config.onnomatch, provide: SpeechRecognitionNomatchHandler }] : []), ...(config.onerror instanceof Function ? [{ useValue: config.onerror, provide: SpeechRecognitionErrorHandler }] : []), ...(config.onstart instanceof Function ? [{ useValue: config.onstart, provide: SpeechRecognitionStartHandler }] : []), ...(config.onend instanceof Function ? [{ useValue: config.onend, provide: SpeechRecognitionEndHandler }] : []), { useClass: SpeechRecognitionService, provide: SpeechRecognitionService }, { useClass: RxSpeechRecognitionService, provide: RxSpeechRecognitionService } ], }; } /** * @param {?} config * @return {?} */ static withConfig(config) { return { ngModule: SpeechRecognitionModule, providers: [ // tslint:disable:max-line-length ...(config.grammars !== undefined && config.grammars != null ? [{ useValue: config.grammars, provide: SpeechRecognitionGrammars }] : []), ...(config.lang !== undefined && config.lang != null ? [{ useValue: config.lang, provide: SpeechRecognitionLang }] : []), ...(config.continuous !== undefined && config.continuous != null ? [{ useValue: config.continuous, provide: SpeechRecognitionContinuous }] : []), ...(config.interimResults !== undefined && config.interimResults != null ? [{ useValue: config.interimResults, provide: SpeechRecognitionInterimResults }] : []), ...(config.maxAlternatives !== undefined && config.maxAlternatives != null ? [{ useValue: config.maxAlternatives, provide: SpeechRecognitionMaxAlternatives }] : []), ...(config.serviceURI !== undefined && config.serviceURI != null ? [{ useValue: config.serviceURI, provide: SpeechRecognitionServiceUri }] : []), ...(config.onaudiostart instanceof Function ? [{ useValue: config.onaudiostart, provide: SpeechRecognitionAudiostartHandler }] : []), ...(config.onsoundstart instanceof Function ? [{ useValue: config.onsoundstart, provide: SpeechRecognitionSoundstartHandler }] : []), ...(config.onspeechstart instanceof Function ? [{ useValue: config.onspeechstart, provide: SpeechRecognitionSpeechstartHandler }] : []), ...(config.onspeechend instanceof Function ? [{ useValue: config.onspeechend, provide: SpeechRecognitionSpeechendHandler }] : []), ...(config.onsoundend instanceof Function ? [{ useValue: config.onsoundend, provide: SpeechRecognitionSoundendHandler }] : []), ...(config.onaudioend instanceof Function ? [{ useValue: config.onaudioend, provide: SpeechRecognitionAudioendHandler }] : []), ...(config.onresult instanceof Function ? [{ useValue: config.onresult, provide: SpeechRecognitionResultHandler }] : []), ...(config.onnomatch instanceof Function ? [{ useValue: config.onnomatch, provide: SpeechRecognitionNomatchHandler }] : []), ...(config.onerror instanceof Function ? [{ useValue: config.onerror, provide: SpeechRecognitionErrorHandler }] : []), ...(config.onstart instanceof Function ? [{ useValue: config.onstart, provide: SpeechRecognitionStartHandler }] : []), ...(config.onend instanceof Function ? [{ useValue: config.onend, provide: SpeechRecognitionEndHandler }] : []), ] }; } } SpeechRecognitionModule.decorators = [ { type: NgModule, args: [{ providers: [ SPEECH_RECOGNITION_DEFAULT, ], },] } ]; /** @nocollapse */ SpeechRecognitionModule.ctorParameters = () => [ { type: String, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzYW0xNzg5Ni9uZ3gtc3BlZWNoLXJlY29nbml0aW9uLyIsInNvdXJjZXMiOlsibGliL3NwZWVjaC1yZWNvZ25pdGlvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLE1BQU0sRUFDTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEVBQ2hDLDJCQUEyQixFQUMzQixrQ0FBa0MsRUFDbEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxpQ0FBaUMsRUFDakMsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsK0JBQStCLEVBQy9CLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0IsMkJBQTJCLEdBQzVCLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUNMLDBCQUEwQixHQUMzQixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFDTCx3QkFBd0IsR0FDekIsTUFBTSxzQ0FBc0MsQ0FBQztBQUc5QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU8zRSxNQUFNLE9BQU8sdUJBQXVCOzs7O0lBRWxDLFlBQ3VCLFVBQWtCO1FBRXZDLElBQUksaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUErQjtRQUM1QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLHVCQUF1QjtZQUNqQyxTQUFTLEVBQUU7Z0JBQ1QsaUNBQWlDO2dCQUNqQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoSixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hLLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEssR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoSixHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BJLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEksR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2SSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pJLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5SCxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hILEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNySCxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JILEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDL0csRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFO2dCQUN6RSxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUU7YUFDOUU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7Ozs7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQStCO1FBQy9DLE9BQU87WUFDTCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFNBQVMsRUFBRTtnQkFDVCxpQ0FBaUM7Z0JBQ2pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4SCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hKLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEssR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwSyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hKLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwSSxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZJLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDakksR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5SCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlILEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzSCxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JILEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ2hIO1NBQ0YsQ0FBQztJQUNKLENBQUM7OztZQW5FRixRQUFRLFNBQUM7Z0JBQ1IsU0FBUyxFQUFFO29CQUNULDBCQUEwQjtpQkFDM0I7YUFDRjs7Ozt5Q0FJSSxNQUFNLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgTmdNb2R1bGUsXHJcbiAgTW9kdWxlV2l0aFByb3ZpZGVycyxcclxuICBJbmplY3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGlzUGxhdGZvcm1Ccm93c2VyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNwZWVjaFJlY29nbml0aW9uR3JhbW1hcnMsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25MYW5nLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uQ29udGludW91cyxcclxuICBTcGVlY2hSZWNvZ25pdGlvbkludGVyaW1SZXN1bHRzLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uTWF4QWx0ZXJuYXRpdmVzLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uU2VydmljZVVyaSxcclxuICBTcGVlY2hSZWNvZ25pdGlvbkF1ZGlvc3RhcnRIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uU291bmRzdGFydEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25TcGVlY2hzdGFydEhhbmRsZXIsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25TcGVlY2hlbmRIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uU291bmRlbmRIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uQXVkaW9lbmRIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0SGFuZGxlcixcclxuICBTcGVlY2hSZWNvZ25pdGlvbk5vbWF0Y2hIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uRXJyb3JIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uU3RhcnRIYW5kbGVyLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uRW5kSGFuZGxlcixcclxufSBmcm9tICcuL3NlcnZpY2Uvc3BlZWNoLXJlY29nbml0aW9uLnRva2VuJztcclxuXHJcbmltcG9ydCB7XHJcbiAgUnhTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlL3J4LXNwZWVjaC1yZWNvZ25pdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlL3NwZWVjaC1yZWNvZ25pdGlvbi5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IFNwZWVjaFJlY29nbml0aW9uQ29uZmlnIH0gZnJvbSAnLi9zcGVlY2gtcmVjb2duaXRpb24uY29uZmlnJztcclxuaW1wb3J0IHsgU1BFRUNIX1JFQ09HTklUSU9OX0RFRkFVTFQgfSBmcm9tICcuL3NwZWVjaC1yZWNvZ25pdGlvbi5wcm92aWRlcic7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgU1BFRUNIX1JFQ09HTklUSU9OX0RFRkFVTFQsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwZWVjaFJlY29nbml0aW9uTW9kdWxlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBzdHJpbmdcclxuICApIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGVlY2hSZWNvZ25pdGlvbk1vZHVsZTogaXQgcnVuIG9uIFBsYXRmb3JtQnJvd3Nlci4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogU3BlZWNoUmVjb2duaXRpb25Db25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBTcGVlY2hSZWNvZ25pdGlvbk1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgLi4uKGNvbmZpZy5ncmFtbWFycyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5ncmFtbWFycyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5ncmFtbWFycywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25HcmFtbWFycyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLmxhbmcgIT09IHVuZGVmaW5lZCAmJiBjb25maWcubGFuZyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5sYW5nLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkxhbmcgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5jb250aW51b3VzICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLmNvbnRpbnVvdXMgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcuY29udGludW91cywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Db250aW51b3VzIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcuaW50ZXJpbVJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuaW50ZXJpbVJlc3VsdHMgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcuaW50ZXJpbVJlc3VsdHMsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uSW50ZXJpbVJlc3VsdHMgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5tYXhBbHRlcm5hdGl2ZXMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcubWF4QWx0ZXJuYXRpdmVzICE9IG51bGwgPyBbeyB1c2VWYWx1ZTogY29uZmlnLm1heEFsdGVybmF0aXZlcywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25NYXhBbHRlcm5hdGl2ZXMgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5zZXJ2aWNlVVJJICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnNlcnZpY2VVUkkgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcuc2VydmljZVVSSSwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlVXJpIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25hdWRpb3N0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uYXVkaW9zdGFydCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25BdWRpb3N0YXJ0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uc291bmRzdGFydCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnNvdW5kc3RhcnQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU291bmRzdGFydEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnNwZWVjaHN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uc3BlZWNoc3RhcnQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU3BlZWNoc3RhcnRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zcGVlY2hlbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25zcGVlY2hlbmQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU3BlZWNoZW5kSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uc291bmRlbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25zb3VuZGVuZCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Tb3VuZGVuZEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbmF1ZGlvZW5kIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uYXVkaW9lbmQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uQXVkaW9lbmRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25yZXN1bHQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25yZXN1bHQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9ubm9tYXRjaCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbm5vbWF0Y2gsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uTm9tYXRjaEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbmVycm9yIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uZXJyb3IsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uRXJyb3JIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zdGFydCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnN0YXJ0LCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblN0YXJ0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uZW5kIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uZW5kLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkVuZEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgeyB1c2VDbGFzczogU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UgfSxcclxuICAgICAgICB7IHVzZUNsYXNzOiBSeFNwZWVjaFJlY29nbml0aW9uU2VydmljZSwgcHJvdmlkZTogUnhTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UgfVxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3aXRoQ29uZmlnKGNvbmZpZzogU3BlZWNoUmVjb2duaXRpb25Db25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBTcGVlY2hSZWNvZ25pdGlvbk1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgLi4uKGNvbmZpZy5ncmFtbWFycyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5ncmFtbWFycyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5ncmFtbWFycywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25HcmFtbWFycyB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLmxhbmcgIT09IHVuZGVmaW5lZCAmJiBjb25maWcubGFuZyAhPSBudWxsID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5sYW5nLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkxhbmcgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5jb250aW51b3VzICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLmNvbnRpbnVvdXMgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcuY29udGludW91cywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Db250aW51b3VzIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcuaW50ZXJpbVJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuaW50ZXJpbVJlc3VsdHMgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcuaW50ZXJpbVJlc3VsdHMsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uSW50ZXJpbVJlc3VsdHMgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5tYXhBbHRlcm5hdGl2ZXMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcubWF4QWx0ZXJuYXRpdmVzICE9IG51bGwgPyBbeyB1c2VWYWx1ZTogY29uZmlnLm1heEFsdGVybmF0aXZlcywgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25NYXhBbHRlcm5hdGl2ZXMgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5zZXJ2aWNlVVJJICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnNlcnZpY2VVUkkgIT0gbnVsbCA/IFt7IHVzZVZhbHVlOiBjb25maWcuc2VydmljZVVSSSwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlVXJpIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25hdWRpb3N0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uYXVkaW9zdGFydCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25BdWRpb3N0YXJ0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uc291bmRzdGFydCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnNvdW5kc3RhcnQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU291bmRzdGFydEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbnNwZWVjaHN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uc3BlZWNoc3RhcnQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU3BlZWNoc3RhcnRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zcGVlY2hlbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25zcGVlY2hlbmQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uU3BlZWNoZW5kSGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uc291bmRlbmQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25zb3VuZGVuZCwgcHJvdmlkZTogU3BlZWNoUmVjb2duaXRpb25Tb3VuZGVuZEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbmF1ZGlvZW5kIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uYXVkaW9lbmQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uQXVkaW9lbmRIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25yZXN1bHQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IFt7IHVzZVZhbHVlOiBjb25maWcub25yZXN1bHQsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9ubm9tYXRjaCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbm5vbWF0Y2gsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uTm9tYXRjaEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5vbmVycm9yIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uZXJyb3IsIHByb3ZpZGU6IFNwZWVjaFJlY29nbml0aW9uRXJyb3JIYW5kbGVyIH1dIDogW10pLFxyXG4gICAgICAgIC4uLihjb25maWcub25zdGFydCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gW3sgdXNlVmFsdWU6IGNvbmZpZy5vbnN0YXJ0LCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvblN0YXJ0SGFuZGxlciB9XSA6IFtdKSxcclxuICAgICAgICAuLi4oY29uZmlnLm9uZW5kIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBbeyB1c2VWYWx1ZTogY29uZmlnLm9uZW5kLCBwcm92aWRlOiBTcGVlY2hSZWNvZ25pdGlvbkVuZEhhbmRsZXIgfV0gOiBbXSksXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==