@ethlete/query 5.4.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -211,10 +211,10 @@ export class QueryDevtoolsComponent {
211
211
  clearQueryHistory() {
212
212
  this.queryHistory$.next([]);
213
213
  }
214
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.1", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n </div>\n\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
214
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n </div>\n\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
216
216
  }
217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
218
218
  type: Component,
219
219
  args: [{ selector: 'et-query-devtools', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
220
220
  class: 'et-query-devtools',
@@ -15,10 +15,10 @@ export class QueryShortNamePipe {
15
15
  console.log(route);
16
16
  return route;
17
17
  }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
19
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.1.1", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
19
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.1", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: QueryShortNamePipe, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: QueryShortNamePipe, decorators: [{
22
22
  type: Pipe,
23
23
  args: [{ name: 'queryShortName', standalone: true }]
24
24
  }] });
@@ -40,10 +40,10 @@ export class InfinityQueryTriggerDirective {
40
40
  });
41
41
  this._observer.observe(this._elementRef.nativeElement);
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
44
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.1", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
44
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
47
47
  type: Directive,
48
48
  args: [{
49
49
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -155,10 +155,10 @@ export class InfinityQueryDirective {
155
155
  this._viewContext.currentQuery = null;
156
156
  this._data$.next([]);
157
157
  }
158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
159
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.1", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
159
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
160
160
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: InfinityQueryDirective, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: InfinityQueryDirective, decorators: [{
162
162
  type: Directive,
163
163
  args: [{
164
164
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -103,10 +103,10 @@ export class QueryDirective {
103
103
  this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
104
104
  }
105
105
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.1", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: QueryDirective, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: QueryDirective, decorators: [{
110
110
  type: Directive,
111
111
  args: [{
112
112
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgQ29uc3RydWN0UXVlcnksIFF1ZXJ5RGF0YU9mLCBRdWVyeVJlc3BvbnNlT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybSB9IGZyb20gJy4uL3F1ZXJ5LWZvcm0nO1xuaW1wb3J0IHsgTWV0aG9kLCBQYXRoUGFyYW1zLCBRdWVyeVBhcmFtcywgUmVxdWVzdEVycm9yLCBSZXF1ZXN0UHJvZ3Jlc3MgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyB7XG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBxdWVyeSB3aGVuIHRoZSBxdWVyeSBjbGllbnQncyBoZWFkZXJzIGNoYW5nZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcXVlcnlDbGllbnREZWZhdWx0SGVhZGVyc0NoYW5nZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHF1ZXJ5IHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBhdXRvUmVmcmVzaFF1ZXJpZXNPbldpbmRvd0ZvY3VzYCBpcyBlbmFibGVkIG9uIHRoZSBxdWVyeSBjbGllbnQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd0ZvY3VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgZGF0YS5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIGlkKHMpIHJldHVybmVkIGJ5IHRoZSBgaWRgIGZ1bmN0aW9uLlxuICAgKi9cbiAgaWQ6IElkO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkgc3RvcmUuXG4gICAqL1xuICBzdG9yZTogU3RvcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4ge1xuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIGRhdGEuXG4gICAqL1xuICByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSByZXR1cm5lZCBieSB0aGUgYGlkYCBmdW5jdGlvbi5cbiAgICovXG4gIGlkOiBJZDtcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHF1ZXJ5LlxuICAgKi9cbiAgYXJnczogQXJndW1lbnRzO1xuXG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlLlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUlkUGFyYW1zPFJlc3BvbnNlLCBBcmd1bWVudHM+IHtcbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBkYXRhLlxuICAgKi9cbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFbnRpdHlDb25maWc8U3RvcmUsIERhdGEsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaWQgb2YgdGhlIGVudGl0eS4gQ2FuIGFsc28gcmV0dXJuIGFuIGFycmF5IG9mIGlkcy5cbiAgICovXG4gIGlkOiAoZGF0YTogRW50aXR5SWRQYXJhbXM8UmVzcG9uc2UsIEFyZ3VtZW50cz4pID0+IElkO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2UgZGF0YSAoY2FuIGJlIGEgc3Vic2V0IG9mIHRoZSByZXNwb25zZSkuXG4gICAqL1xuICBnZXQ/OiAoZGF0YTogRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4pID0+IE9ic2VydmFibGU8RGF0YT47XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBlbnRpdHkgc3RvcmUgZXZlcnkgdGltZSBhIG5ldyByZXNwb25zZSBpcyByZWNlaXZlZC5cbiAgICovXG4gIHNldD86IChkYXRhOiBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDb25maWdCYXNlPFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0ge1xuICAvKipcbiAgICogVGhlIGh0dHAgbWV0aG9kIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgbWV0aG9kOiBNZXRob2Q7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGF1dGggcHJvdmlkZXIgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcXVlcnkuXG4gICAqIFRoZSBxdWVyeSAqKndpbGwgdGhyb3cqKiBpZiB0aGUgcXVlcnkgY2xpZW50J3MgYXV0aCBwcm92aWRlciBpcyB1bnNldC5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHF1ZXJ5IHNob3VsZCBlbWl0IHByb2dyZXNzIGV2ZW50cy5cbiAgICovXG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgcXVlcnkncyByZXNwb25zZSB0eXBlLlxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBzZW50IHdpdGggb3V0Z29pbmcgY3JlZGVudGlhbHMgKGNvb2tpZXMpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaGFuZGxpbmcgYXV0byByZWZyZXNoIHRyaWdnZXJzLlxuICAgKlxuICAgKiAqKk5vdGU6KiogVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgcXVlcmllcyB0aGF0IGNhbiBiZSByZWZyZXNoZWQuIChgR0VUYCwgYEhFQURgLCBgT1BUSU9OU2AsIGBHUUxfUVVFUllgKVxuICAgKi9cbiAgYXV0b1JlZnJlc2hPbj86IFF1ZXJ5QXV0b1JlZnJlc2hDb25maWc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdG9wIHBvbGxpbmcgZm9yIHRoaXMgcXVlcnkgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLlxuICAgKiBQb2xsaW5nIHdpbGwgcmVzdW1lIHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBlbmFibGVTbWFydFBvbGxpbmdgIGlzIGVuYWJsZWQgb24gdGhlIHF1ZXJ5IGNsaWVudC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlU21hcnRQb2xsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5J3MgdHlwZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHR5cGVzPzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIHJlc3BvbnNlPzogUmVzcG9uc2U7XG5cbiAgICAvKipcbiAgICAgKiBBcmd1bWVudHMgZm9yIGV4ZWN1dGluZyB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAtIGBwYXRoUGFyYW1zYDogVGhlIHBhdGggcGFyYW1ldGVycyBmb3IgdGhlIHF1ZXJ5LiAoaW4gZnJvbnQgb2YgdGhlID8gaW4gdGhlIHVybClcbiAgICAgKiAtIGBxdWVyeVBhcmFtc2A6IFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcXVlcnkuIChhZnRlciB0aGUgPyBpbiB0aGUgdXJsKVxuICAgICAqIC0gYGJvZHlgOiBUaGUgYm9keSBmb3IgdGhlIHF1ZXJ5LiBVbmF2YWlsYWJsZSBmb3IgR0VULCBIRUFEIGFuZCBPUFRJT05TIHJlcXVlc3RzLlxuICAgICAqIC0gYGhlYWRlcnNgOiBUaGUgaGVhZGVycyBmb3IgdGhlIHF1ZXJ5LlxuICAgICAqIC0gYHZhcmlhYmxlc2A6IFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICAgKi9cbiAgICBhcmdzPzogQXJndW1lbnRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyB0aGUgcXVlcnkncyBlbnRpdHkgc3RvcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBlbnRpdHk/OiBRdWVyeUVudGl0eUNvbmZpZzxTdG9yZSwgRGF0YSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzdFF1ZXJ5Q29uZmlnPFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0gUXVlcnlDb25maWdCYXNlPFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4gJiB7XG4gIC8qKlxuICAgKiBUaGUgYXBpIHJvdXRlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcm91dGU6IFJvdXRlO1xufTtcblxuZXhwb3J0IHR5cGUgR3FsVHJhbnNmZXJPcHRpb24gPSAnR0VUJyB8ICdQT1NUJztcblxuZXhwb3J0IGludGVyZmFjZSBHcWxRdWVyeUNvbmZpZzxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPiB8IHVuZGVmaW5lZCxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiBleHRlbmRzIFF1ZXJ5Q29uZmlnQmFzZTxSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+IHtcbiAgLyoqXG4gICAqIFRoZSBncmFwaHFsIHF1ZXJ5IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcXVlcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcXVlcnkgc2hvdWxkIGJlIHNlbnQgdmlhIEdFVCBvciBQT1NULlxuICAgKiAtIGBHRVRgOiBUaGUgcXVlcnkgd2lsbCBiZSBzZW50IHZpYSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKiAtIGBQT1NUYDogVGhlIHF1ZXJ5IHdpbGwgYmUgc2VudCB2aWEgdGhlIGJvZHkuXG4gICAqIEBkZWZhdWx0ICdQT1NUJ1xuICAgKi9cbiAgdHJhbnNmZXJWaWE/OiBHcWxUcmFuc2Zlck9wdGlvbjtcblxuICAvKipcbiAgICogU3Vicm91dGUgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICByb3V0ZT86IFJvdXRlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55UmVzdFF1ZXJ5Q29uZmlnID0gUmVzdFF1ZXJ5Q29uZmlnPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueUdxbFF1ZXJ5Q29uZmlnID0gR3FsUXVlcnlDb25maWc8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8UmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LCAnbWV0aG9kJz47XG5cbmV4cG9ydCB0eXBlIEdxbFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8R3FsUXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sICdtZXRob2QnPjtcblxuZXhwb3J0IHR5cGUgQmFzZUFyZ3VtZW50cyA9IFdpdGhIZWFkZXJzICYgV2l0aFZhcmlhYmxlcyAmIFdpdGhCb2R5ICYgV2l0aFF1ZXJ5UGFyYW1zICYgV2l0aFBhdGhQYXJhbXM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEhlYWRlcnMge1xuICAvKipcbiAgICogVGhlIGhlYWRlcnMgdG8gc2VuZCB3aXRoIHRoZSBxdWVyeS5cbiAgICovXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBxdWVyeSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGludGVybmFsIHF1ZXJ5IHN0b3JlLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgYmUgbGVmdCBvbiBgZmFsc2VgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwUXVlcnlTdG9yZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBrZXkgdG8gdXNlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiBVc2VmdWwgZm9yIHF1ZXJpZXMgdGhhdCBhcmUgZXF1YWwgYnV0IHNob3VsZCBiZSBzdG9yZWQgc2VwYXJhdGVseS5cbiAgICogV2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBiZSBsZWZ0IG9uIGB1bmRlZmluZWRgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICBxdWVyeVN0b3JlQ2FjaGVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aENvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcXVlcnkuXG4gICAqL1xuICBjb25maWc/OiBRdWVyeUNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoVmFyaWFibGVzIHtcbiAgLyoqXG4gICAqIFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICovXG4gIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBib2R5IGZvciB0aGUgcXVlcnkuIFVuYXZhaWxhYmxlIGZvciBHRVQsIEhFQUQgYW5kIE9QVElPTlMgcmVxdWVzdHMuXG4gICAqL1xuICBib2R5PzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoUXVlcnlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGFmdGVyIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGluIGZyb250IG9mIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBwYXRoUGFyYW1zPzogUGF0aFBhcmFtcztcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlUcmlnZ2VyID0gJ3Byb2dyYW0nIHwgJ3BvbGwnIHwgJ2F1dG8nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2tpcCB0aGUgY2FjaGUgZm9yIHRoaXMgcXVlcnkuIFRoaXMgd2lsbCBmb3JjZSB0aGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWQuIEl0IG1pZ2h0IHN0aWxsIGJlIGNhdWdodCBieSB0aGUgbmF0aXZlIGJyb3dzZXIgY2FjaGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNhbmNlbCB0aGUgcHJldmlvdXMgcmVxdWVzdCBpZiBpdCBpcyBzdGlsbCBsb2FkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2FuY2VsUHJldmlvdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciB0eXBlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiAtIGBwcm9ncmFtYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXG4gICAqIC0gYHBvbGxgOiBUaGUgcXVlcnkgd2FzIHRyaWdnZXJlZCBieSBwb2xsaW5nLlxuICAgKiAtIGBhdXRvYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgYW4gYXV0byByZWZyZXNoIGV2ZW50LlxuICAgKiBAZGVmYXVsdCAncHJvZ3JhbSdcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfdHJpZ2dlcmVkVmlhPzogUXVlcnlUcmlnZ2VyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZXRyeSBvZiBhbiB1bmF1dGhvcml6ZWQgcmVxdWVzdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNVbmF1dGhvcml6ZWRSZXRyeT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlVHlwZTxBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkPiA9IEFyZ3VtZW50cyBleHRlbmRzIHtcbiAgcGF0aFBhcmFtczogaW5mZXIgUGF0aFBhcmFtcztcbn1cbiAgPyAocDogUGF0aFBhcmFtcykgPT4gUm91dGVTdHJpbmdcbiAgOiBSb3V0ZVN0cmluZztcblxuZXhwb3J0IHR5cGUgUm91dGVTdHJpbmcgPSBgLyR7c3RyaW5nfWA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9sbENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHBvbGwgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBvYnNlcnZhYmxlIHRoYXQgd2lsbCBzdG9wIHRoZSBwb2xsaW5nIHdoZW4gaXQgZW1pdHMuXG4gICAqL1xuICB0YWtlVW50aWw6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHJpZ2dlciB0aGUgcXVlcnkgaW1tZWRpYXRlbHkgYWZ0ZXIgcG9sbGluZyBzdGFydHMuXG4gICAqL1xuICB0cmlnZ2VySW1tZWRpYXRlbHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBRdWVyeVN0YXRlVHlwZSB7XG4gIFByZXBhcmVkID0gJ1BSRVBBUkVEJyxcbiAgTG9hZGluZyA9ICdMT0FESU5HJyxcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgRmFpbHVyZSA9ICdGQUlMVVJFJyxcbiAgQ2FuY2VsbGVkID0gJ0NBTkNFTExFRCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWQge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2VzczxSZXNwb25zZSA9IHVua25vd24+IHtcbiAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuU3VjY2VzcztcbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICBtZXRhOiBRdWVyeVN0YXRlU3VjY2Vzc01ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZSB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmU7XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I7XG4gIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmcge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nO1xuICBtZXRhOiBRdWVyeVN0YXRlTWV0YTtcbiAgcGFydGlhbFRleHQ/OiBzdHJpbmc7XG4gIHByb2dyZXNzPzogUmVxdWVzdFByb2dyZXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbGxlZCB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlTdGF0ZU1ldGEge1xuICBpZDogbnVtYmVyO1xuICB0cmlnZ2VyZWRWaWE6IFF1ZXJ5VHJpZ2dlcjtcbiAgaXNXYWl0aW5nRm9yUmV0cnk/OiBib29sZWFuO1xuICByZXRyeU51bWJlcj86IG51bWJlcjtcbiAgcmV0cnlEZWxheT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVN0YXRlU3VjY2Vzc01ldGEgZXh0ZW5kcyBRdWVyeVN0YXRlTWV0YSB7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlTdGF0ZTxSZXNwb25zZSA9IHVua25vd24+ID0gTG9hZGluZyB8IFN1Y2Nlc3M8UmVzcG9uc2U+IHwgRmFpbHVyZSB8IENhbmNlbGxlZCB8IFByZXBhcmVkO1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlUmVzcG9uc2VPZjxUIGV4dGVuZHMgUXVlcnlTdGF0ZSA9IFF1ZXJ5U3RhdGU+ID0gVCBleHRlbmRzIFN1Y2Nlc3M8aW5mZXIgUmVzcG9uc2U+XG4gID8gUmVzcG9uc2VcbiAgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueVF1ZXJ5ID0gUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24gPSB7IFtuYW1lOiBzdHJpbmddOiBBbnlRdWVyeUNyZWF0b3IgfTtcblxuZXhwb3J0IHR5cGUgUXVlcnlDb2xsZWN0aW9uT2Y8VCBleHRlbmRzIHsgW25hbWU6IHN0cmluZ106IEFueVF1ZXJ5Q3JlYXRvciB9PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IHsgdHlwZTogSzsgcXVlcnk6IENvbnN0cnVjdFF1ZXJ5PFRbS10+IH07XG59W2tleW9mIFRdO1xuXG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb24gPSBRdWVyeUNvbGxlY3Rpb25PZjxBbnlRdWVyeUNyZWF0b3JDb2xsZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgUXVlcnlPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uXG4gICAgPyBUWydxdWVyeSddXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgQW55UXVlcnlDb2xsZWN0aW9uUmVzcG9uc2U8VCBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbj4gPSBRdWVyeVJlc3BvbnNlT2Y8VFsncXVlcnknXT47XG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb25EYXRhPFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb24+ID0gUXVlcnlEYXRhT2Y8VFsncXVlcnknXT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29sbGVjdGlvbktleXNPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb25cbiAgPyBUWyd0eXBlJ11cbiAgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYWdlT25FcnJvck9wZXJhdG9yQ29uZmlnPEogZXh0ZW5kcyBRdWVyeUZvcm08YW55Pj4ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IGZvcm0gdG8gcmVzZXQgdGhlIHBhZ2Ugb2YuXG4gICAqL1xuICBxdWVyeUZvcm06IEo7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgb2YgdGhlIHBhZ2UgY29udHJvbCBpbiB0aGUgcXVlcnkgZm9ybS5cbiAgICogQGRlZmF1bHQgJ3BhZ2UnXG4gICAqL1xuICBwYWdlQ29udHJvbEtleT86IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgQ29uc3RydWN0UXVlcnksIFF1ZXJ5RGF0YU9mLCBRdWVyeVJlc3BvbnNlT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybSB9IGZyb20gJy4uL3F1ZXJ5LWZvcm0nO1xuaW1wb3J0IHsgTWV0aG9kLCBQYXRoUGFyYW1zLCBRdWVyeVBhcmFtcywgUmVxdWVzdEVycm9yLCBSZXF1ZXN0UHJvZ3Jlc3MgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyB7XG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBxdWVyeSB3aGVuIHRoZSBxdWVyeSBjbGllbnQncyBoZWFkZXJzIGNoYW5nZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcXVlcnlDbGllbnREZWZhdWx0SGVhZGVyc0NoYW5nZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHF1ZXJ5IHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBhdXRvUmVmcmVzaFF1ZXJpZXNPbldpbmRvd0ZvY3VzYCBpcyBlbmFibGVkIG9uIHRoZSBxdWVyeSBjbGllbnQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd0ZvY3VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgZGF0YS5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIGlkKHMpIHJldHVybmVkIGJ5IHRoZSBgaWRgIGZ1bmN0aW9uLlxuICAgKi9cbiAgaWQ6IElkO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkgc3RvcmUuXG4gICAqL1xuICBzdG9yZTogU3RvcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4ge1xuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIGRhdGEuXG4gICAqL1xuICByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSByZXR1cm5lZCBieSB0aGUgYGlkYCBmdW5jdGlvbi5cbiAgICovXG4gIGlkOiBJZDtcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHF1ZXJ5LlxuICAgKi9cbiAgYXJnczogQXJndW1lbnRzO1xuXG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlLlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUlkUGFyYW1zPFJlc3BvbnNlLCBBcmd1bWVudHM+IHtcbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBkYXRhLlxuICAgKi9cbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFbnRpdHlDb25maWc8U3RvcmUsIERhdGEsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaWQgb2YgdGhlIGVudGl0eS4gQ2FuIGFsc28gcmV0dXJuIGFuIGFycmF5IG9mIGlkcy5cbiAgICovXG4gIGlkOiAoZGF0YTogRW50aXR5SWRQYXJhbXM8UmVzcG9uc2UsIEFyZ3VtZW50cz4pID0+IElkO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2UgZGF0YSAoY2FuIGJlIGEgc3Vic2V0IG9mIHRoZSByZXNwb25zZSkuXG4gICAqL1xuICBnZXQ/OiAoZGF0YTogRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4pID0+IE9ic2VydmFibGU8RGF0YT47XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBlbnRpdHkgc3RvcmUgZXZlcnkgdGltZSBhIG5ldyByZXNwb25zZSBpcyByZWNlaXZlZC5cbiAgICovXG4gIHNldD86IChkYXRhOiBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDb25maWdCYXNlPFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0ge1xuICAvKipcbiAgICogVGhlIGh0dHAgbWV0aG9kIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgbWV0aG9kOiBNZXRob2Q7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGF1dGggcHJvdmlkZXIgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcXVlcnkuXG4gICAqIFRoZSBxdWVyeSAqKndpbGwgdGhyb3cqKiBpZiB0aGUgcXVlcnkgY2xpZW50J3MgYXV0aCBwcm92aWRlciBpcyB1bnNldC5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHF1ZXJ5IHNob3VsZCBlbWl0IHByb2dyZXNzIGV2ZW50cy5cbiAgICovXG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgcXVlcnkncyByZXNwb25zZSB0eXBlLlxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBzZW50IHdpdGggb3V0Z29pbmcgY3JlZGVudGlhbHMgKGNvb2tpZXMpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaGFuZGxpbmcgYXV0byByZWZyZXNoIHRyaWdnZXJzLlxuICAgKlxuICAgKiAqKk5vdGU6KiogVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgcXVlcmllcyB0aGF0IGNhbiBiZSByZWZyZXNoZWQuIChgR0VUYCwgYEhFQURgLCBgT1BUSU9OU2AsIGBHUUxfUVVFUllgKVxuICAgKi9cbiAgYXV0b1JlZnJlc2hPbj86IFF1ZXJ5QXV0b1JlZnJlc2hDb25maWc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdG9wIHBvbGxpbmcgZm9yIHRoaXMgcXVlcnkgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLlxuICAgKiBQb2xsaW5nIHdpbGwgcmVzdW1lIHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBlbmFibGVTbWFydFBvbGxpbmdgIGlzIGVuYWJsZWQgb24gdGhlIHF1ZXJ5IGNsaWVudC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlU21hcnRQb2xsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5J3MgdHlwZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHR5cGVzPzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIHJlc3BvbnNlPzogUmVzcG9uc2U7XG5cbiAgICAvKipcbiAgICAgKiBBcmd1bWVudHMgZm9yIGV4ZWN1dGluZyB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAtIGBwYXRoUGFyYW1zYDogVGhlIHBhdGggcGFyYW1ldGVycyBmb3IgdGhlIHF1ZXJ5LiAoaW4gZnJvbnQgb2YgdGhlID8gaW4gdGhlIHVybClcbiAgICAgKiAtIGBxdWVyeVBhcmFtc2A6IFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcXVlcnkuIChhZnRlciB0aGUgPyBpbiB0aGUgdXJsKVxuICAgICAqIC0gYGJvZHlgOiBUaGUgYm9keSBmb3IgdGhlIHF1ZXJ5LiBVbmF2YWlsYWJsZSBmb3IgR0VULCBIRUFEIGFuZCBPUFRJT05TIHJlcXVlc3RzLlxuICAgICAqIC0gYGhlYWRlcnNgOiBUaGUgaGVhZGVycyBmb3IgdGhlIHF1ZXJ5LlxuICAgICAqIC0gYHZhcmlhYmxlc2A6IFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICAgKi9cbiAgICBhcmdzPzogQXJndW1lbnRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyB0aGUgcXVlcnkncyBlbnRpdHkgc3RvcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBlbnRpdHk/OiBRdWVyeUVudGl0eUNvbmZpZzxTdG9yZSwgRGF0YSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzdFF1ZXJ5Q29uZmlnPFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0gUXVlcnlDb25maWdCYXNlPFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4gJiB7XG4gIC8qKlxuICAgKiBUaGUgYXBpIHJvdXRlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcm91dGU6IFJvdXRlO1xufTtcblxuZXhwb3J0IHR5cGUgR3FsVHJhbnNmZXJPcHRpb24gPSAnR0VUJyB8ICdQT1NUJztcblxuZXhwb3J0IGludGVyZmFjZSBHcWxRdWVyeUNvbmZpZzxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPiB8IHVuZGVmaW5lZCxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiBleHRlbmRzIFF1ZXJ5Q29uZmlnQmFzZTxSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+IHtcbiAgLyoqXG4gICAqIFRoZSBncmFwaHFsIHF1ZXJ5IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcXVlcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcXVlcnkgc2hvdWxkIGJlIHNlbnQgdmlhIEdFVCBvciBQT1NULlxuICAgKiAtIGBHRVRgOiBUaGUgcXVlcnkgd2lsbCBiZSBzZW50IHZpYSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKiAtIGBQT1NUYDogVGhlIHF1ZXJ5IHdpbGwgYmUgc2VudCB2aWEgdGhlIGJvZHkuXG4gICAqIEBkZWZhdWx0ICdQT1NUJ1xuICAgKi9cbiAgdHJhbnNmZXJWaWE/OiBHcWxUcmFuc2Zlck9wdGlvbjtcblxuICAvKipcbiAgICogU3Vicm91dGUgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICByb3V0ZT86IFJvdXRlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55UmVzdFF1ZXJ5Q29uZmlnID0gUmVzdFF1ZXJ5Q29uZmlnPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueUdxbFF1ZXJ5Q29uZmlnID0gR3FsUXVlcnlDb25maWc8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8UmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LCAnbWV0aG9kJz47XG5cbmV4cG9ydCB0eXBlIEdxbFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8R3FsUXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sICdtZXRob2QnPjtcblxuZXhwb3J0IHR5cGUgQmFzZUFyZ3VtZW50cyA9IFdpdGhIZWFkZXJzICYgV2l0aFZhcmlhYmxlcyAmIFdpdGhCb2R5ICYgV2l0aFF1ZXJ5UGFyYW1zICYgV2l0aFBhdGhQYXJhbXM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEhlYWRlcnMge1xuICAvKipcbiAgICogVGhlIGhlYWRlcnMgdG8gc2VuZCB3aXRoIHRoZSBxdWVyeS5cbiAgICovXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBxdWVyeSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGludGVybmFsIHF1ZXJ5IHN0b3JlLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgYmUgbGVmdCBvbiBgZmFsc2VgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwUXVlcnlTdG9yZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBrZXkgdG8gdXNlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiBVc2VmdWwgZm9yIHF1ZXJpZXMgdGhhdCBhcmUgZXF1YWwgYnV0IHNob3VsZCBiZSBzdG9yZWQgc2VwYXJhdGVseS5cbiAgICogV2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBiZSBsZWZ0IG9uIGB1bmRlZmluZWRgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICBxdWVyeVN0b3JlQ2FjaGVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aENvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcXVlcnkuXG4gICAqL1xuICBjb25maWc/OiBRdWVyeUNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoVmFyaWFibGVzIHtcbiAgLyoqXG4gICAqIFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICovXG4gIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBib2R5IGZvciB0aGUgcXVlcnkuIFVuYXZhaWxhYmxlIGZvciBHRVQsIEhFQUQgYW5kIE9QVElPTlMgcmVxdWVzdHMuXG4gICAqL1xuICBib2R5PzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoUXVlcnlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGFmdGVyIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGluIGZyb250IG9mIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBwYXRoUGFyYW1zPzogUGF0aFBhcmFtcztcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlUcmlnZ2VyID0gJ3Byb2dyYW0nIHwgJ3BvbGwnIHwgJ2F1dG8nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2tpcCB0aGUgY2FjaGUgZm9yIHRoaXMgcXVlcnkuIFRoaXMgd2lsbCBmb3JjZSB0aGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWQuIEl0IG1pZ2h0IHN0aWxsIGJlIGNhdWdodCBieSB0aGUgbmF0aXZlIGJyb3dzZXIgY2FjaGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNhbmNlbCB0aGUgcHJldmlvdXMgcmVxdWVzdCBpZiBpdCBpcyBzdGlsbCBsb2FkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2FuY2VsUHJldmlvdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciB0eXBlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiAtIGBwcm9ncmFtYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXG4gICAqIC0gYHBvbGxgOiBUaGUgcXVlcnkgd2FzIHRyaWdnZXJlZCBieSBwb2xsaW5nLlxuICAgKiAtIGBhdXRvYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgYW4gYXV0byByZWZyZXNoIGV2ZW50LlxuICAgKiBAZGVmYXVsdCAncHJvZ3JhbSdcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfdHJpZ2dlcmVkVmlhPzogUXVlcnlUcmlnZ2VyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZXRyeSBvZiBhbiB1bmF1dGhvcml6ZWQgcmVxdWVzdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNVbmF1dGhvcml6ZWRSZXRyeT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlVHlwZTxBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkPiA9IEFyZ3VtZW50cyBleHRlbmRzIHtcbiAgcGF0aFBhcmFtczogaW5mZXIgUGF0aFBhcmFtcztcbn1cbiAgPyAocDogUGF0aFBhcmFtcykgPT4gUm91dGVTdHJpbmdcbiAgOiBSb3V0ZVN0cmluZztcblxuZXhwb3J0IHR5cGUgUm91dGVTdHJpbmcgPSBgLyR7c3RyaW5nfWA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9sbENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHBvbGwgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBvYnNlcnZhYmxlIHRoYXQgd2lsbCBzdG9wIHRoZSBwb2xsaW5nIHdoZW4gaXQgZW1pdHMuXG4gICAqL1xuICB0YWtlVW50aWw6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHJpZ2dlciB0aGUgcXVlcnkgaW1tZWRpYXRlbHkgYWZ0ZXIgcG9sbGluZyBzdGFydHMuXG4gICAqL1xuICB0cmlnZ2VySW1tZWRpYXRlbHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBRdWVyeVN0YXRlVHlwZSB7XG4gIFByZXBhcmVkID0gJ1BSRVBBUkVEJyxcbiAgTG9hZGluZyA9ICdMT0FESU5HJyxcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgRmFpbHVyZSA9ICdGQUlMVVJFJyxcbiAgQ2FuY2VsbGVkID0gJ0NBTkNFTExFRCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWQge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2VzczxSZXNwb25zZSA9IHVua25vd24+IHtcbiAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuU3VjY2VzcztcbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICBtZXRhOiBRdWVyeVN0YXRlU3VjY2Vzc01ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZSB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmU7XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I7XG4gIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmcge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nO1xuICBtZXRhOiBRdWVyeVN0YXRlTWV0YTtcbiAgcGFydGlhbFRleHQ/OiBzdHJpbmc7XG4gIHByb2dyZXNzPzogUmVxdWVzdFByb2dyZXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbGxlZCB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlTdGF0ZU1ldGEge1xuICBpZDogbnVtYmVyO1xuICB0cmlnZ2VyZWRWaWE6IFF1ZXJ5VHJpZ2dlcjtcbiAgaXNXYWl0aW5nRm9yUmV0cnk/OiBib29sZWFuO1xuICByZXRyeU51bWJlcj86IG51bWJlcjtcbiAgcmV0cnlEZWxheT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVN0YXRlU3VjY2Vzc01ldGEgZXh0ZW5kcyBRdWVyeVN0YXRlTWV0YSB7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlTdGF0ZTxSZXNwb25zZSA9IHVua25vd24+ID0gTG9hZGluZyB8IFN1Y2Nlc3M8UmVzcG9uc2U+IHwgRmFpbHVyZSB8IENhbmNlbGxlZCB8IFByZXBhcmVkO1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlUmVzcG9uc2VPZjxUIGV4dGVuZHMgUXVlcnlTdGF0ZSA9IFF1ZXJ5U3RhdGU+ID1cbiAgVCBleHRlbmRzIFN1Y2Nlc3M8aW5mZXIgUmVzcG9uc2U+ID8gUmVzcG9uc2UgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueVF1ZXJ5ID0gUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24gPSB7IFtuYW1lOiBzdHJpbmddOiBBbnlRdWVyeUNyZWF0b3IgfTtcblxuZXhwb3J0IHR5cGUgUXVlcnlDb2xsZWN0aW9uT2Y8VCBleHRlbmRzIHsgW25hbWU6IHN0cmluZ106IEFueVF1ZXJ5Q3JlYXRvciB9PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IHsgdHlwZTogSzsgcXVlcnk6IENvbnN0cnVjdFF1ZXJ5PFRbS10+IH07XG59W2tleW9mIFRdO1xuXG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb24gPSBRdWVyeUNvbGxlY3Rpb25PZjxBbnlRdWVyeUNyZWF0b3JDb2xsZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgUXVlcnlPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uXG4gICAgPyBUWydxdWVyeSddXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgQW55UXVlcnlDb2xsZWN0aW9uUmVzcG9uc2U8VCBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbj4gPSBRdWVyeVJlc3BvbnNlT2Y8VFsncXVlcnknXT47XG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb25EYXRhPFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb24+ID0gUXVlcnlEYXRhT2Y8VFsncXVlcnknXT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29sbGVjdGlvbktleXNPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb25cbiAgPyBUWyd0eXBlJ11cbiAgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYWdlT25FcnJvck9wZXJhdG9yQ29uZmlnPEogZXh0ZW5kcyBRdWVyeUZvcm08YW55Pj4ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IGZvcm0gdG8gcmVzZXQgdGhlIHBhZ2Ugb2YuXG4gICAqL1xuICBxdWVyeUZvcm06IEo7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgb2YgdGhlIHBhZ2UgY29udHJvbCBpbiB0aGUgcXVlcnkgZm9ybS5cbiAgICogQGRlZmF1bHQgJ3BhZ2UnXG4gICAqL1xuICBwYWdlQ29udHJvbEtleT86IHN0cmluZztcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnksIEJhc2VBcmd1bWVudHMsIEVtcHR5T2JqZWN0LCBSb3V0ZVR5cGUsIFdpdGhDb25maWcsIFdpdGhIZWFkZXJzIH0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi9xdWVyeS1jcmVhdG9yJztcblxuZXhwb3J0IHR5cGUgUXVlcnlQcmVwYXJlRm48XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbj4gPSBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzXG4gID8gKGFyZ3M6IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzICYgV2l0aENvbmZpZykgPT4gUXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD5cbiAgOiAoXG4gICAgICBhcmdzPzogKEFyZ3VtZW50cyBleHRlbmRzIEVtcHR5T2JqZWN0ID8gQXJndW1lbnRzIDogRW1wdHlPYmplY3QpICYgV2l0aEhlYWRlcnMgJiBXaXRoQ29uZmlnLFxuICAgICkgPT4gUXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD47XG5cbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvciA9IFF1ZXJ5Q3JlYXRvcjxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcblxuZXhwb3J0IHR5cGUgUXVlcnlBcmdzT2Y8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciB8IEFueVF1ZXJ5IHwgbnVsbD4gPSBUIGV4dGVuZHMgUXVlcnlDcmVhdG9yPFxuICBpbmZlciBBcmdzLFxuICBhbnksXG4gIGFueSxcbiAgYW55LFxuICBhbnksXG4gIGFueVxuPlxuICA/IEFyZ3NcbiAgOiBUIGV4dGVuZHMgUXVlcnk8YW55LCBpbmZlciBBcmdzLCBhbnksIGFueSwgYW55LCBhbnk+XG4gICAgPyBBcmdzXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUXVlcnlSZXNwb25zZU9mPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IgfCBBbnlRdWVyeSB8IG51bGw+ID0gVCBleHRlbmRzIFF1ZXJ5Q3JlYXRvcjxcbiAgYW55LFxuICBpbmZlciBSZXNwb25zZSxcbiAgYW55LFxuICBhbnksXG4gIGFueSxcbiAgYW55XG4+XG4gID8gUmVzcG9uc2VcbiAgOiBUIGV4dGVuZHMgUXVlcnk8aW5mZXIgUmVzcG9uc2UsIGFueSwgYW55LCBhbnksIGFueSwgYW55PlxuICAgID8gUmVzcG9uc2VcbiAgICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBRdWVyeVJvdXRlT2Y8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciB8IEFueVF1ZXJ5IHwgbnVsbD4gPSBUIGV4dGVuZHMgUXVlcnlDcmVhdG9yPFxuICBhbnksXG4gIGFueSxcbiAgaW5mZXIgUm91dGUsXG4gIGFueSxcbiAgYW55LFxuICBhbnlcbj5cbiAgPyBSb3V0ZVxuICA6IFQgZXh0ZW5kcyBRdWVyeTxhbnksIGFueSwgaW5mZXIgUm91dGUsIGFueSwgYW55LCBhbnk+XG4gICAgPyBSb3V0ZVxuICAgIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5U3RvcmVPZjxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBRdWVyeUNyZWF0b3I8XG4gIGFueSxcbiAgYW55LFxuICBhbnksXG4gIGluZmVyIFN0b3JlLFxuICBhbnksXG4gIGFueVxuPlxuICA/IFN0b3JlXG4gIDogVCBleHRlbmRzIFF1ZXJ5PGFueSwgYW55LCBhbnksIGluZmVyIFN0b3JlLCBhbnksIGFueT5cbiAgICA/IFN0b3JlXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUXVlcnlEYXRhT2Y8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciB8IEFueVF1ZXJ5IHwgbnVsbD4gPSBUIGV4dGVuZHMgUXVlcnlDcmVhdG9yPFxuICBhbnksXG4gIGFueSxcbiAgYW55LFxuICBhbnksXG4gIGluZmVyIERhdGEsXG4gIGFueVxuPlxuICA/IERhdGFcbiAgOiBUIGV4dGVuZHMgUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBpbmZlciBEYXRhLCBhbnk+XG4gICAgPyBEYXRhXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUXVlcnlTdG9yZUlkT2Y8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciB8IEFueVF1ZXJ5IHwgbnVsbD4gPSBUIGV4dGVuZHMgUXVlcnlDcmVhdG9yPFxuICBhbnksXG4gIGFueSxcbiAgYW55LFxuICBhbnksXG4gIGFueSxcbiAgaW5mZXIgU3RvcmVJZFxuPlxuICA/IFN0b3JlSWRcbiAgOiBUIGV4dGVuZHMgUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGluZmVyIFN0b3JlSWQ+XG4gICAgPyBTdG9yZUlkXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgQ29uc3RydWN0UXVlcnk8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcj4gPSBSZXR1cm5UeXBlPFRbJ3ByZXBhcmUnXT47XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnksIEJhc2VBcmd1bWVudHMsIEVtcHR5T2JqZWN0LCBSb3V0ZVR5cGUsIFdpdGhDb25maWcsIFdpdGhIZWFkZXJzIH0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi9xdWVyeS1jcmVhdG9yJztcblxuZXhwb3J0IHR5cGUgUXVlcnlQcmVwYXJlRm48XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbj4gPSBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzXG4gID8gKGFyZ3M6IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzICYgV2l0aENvbmZpZykgPT4gUXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD5cbiAgOiAoXG4gICAgICBhcmdzPzogKEFyZ3VtZW50cyBleHRlbmRzIEVtcHR5T2JqZWN0ID8gQXJndW1lbnRzIDogRW1wdHlPYmplY3QpICYgV2l0aEhlYWRlcnMgJiBXaXRoQ29uZmlnLFxuICAgICkgPT4gUXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD47XG5cbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvciA9IFF1ZXJ5Q3JlYXRvcjxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcblxuZXhwb3J0IHR5cGUgUXVlcnlBcmdzT2Y8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciB8IEFueVF1ZXJ5IHwgbnVsbD4gPVxuICBUIGV4dGVuZHMgUXVlcnlDcmVhdG9yPGluZmVyIEFyZ3MsIGFueSwgYW55LCBhbnksIGFueSwgYW55PlxuICAgID8gQXJnc1xuICAgIDogVCBleHRlbmRzIFF1ZXJ5PGFueSwgaW5mZXIgQXJncywgYW55LCBhbnksIGFueSwgYW55PlxuICAgICAgPyBBcmdzXG4gICAgICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBRdWVyeVJlc3BvbnNlT2Y8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciB8IEFueVF1ZXJ5IHwgbnVsbD4gPVxuICBUIGV4dGVuZHMgUXVlcnlDcmVhdG9yPGFueSwgaW5mZXIgUmVzcG9uc2UsIGFueSwgYW55LCBhbnksIGFueT5cbiAgICA/IFJlc3BvbnNlXG4gICAgOiBUIGV4dGVuZHMgUXVlcnk8aW5mZXIgUmVzcG9uc2UsIGFueSwgYW55LCBhbnksIGFueSwgYW55PlxuICAgICAgPyBSZXNwb25zZVxuICAgICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgUXVlcnlSb3V0ZU9mPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IgfCBBbnlRdWVyeSB8IG51bGw+ID1cbiAgVCBleHRlbmRzIFF1ZXJ5Q3JlYXRvcjxhbnksIGFueSwgaW5mZXIgUm91dGUsIGFueSwgYW55LCBhbnk+XG4gICAgPyBSb3V0ZVxuICAgIDogVCBleHRlbmRzIFF1ZXJ5PGFueSwgYW55LCBpbmZlciBSb3V0ZSwgYW55LCBhbnksIGFueT5cbiAgICAgID8gUm91dGVcbiAgICAgIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5U3RvcmVPZjxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yIHwgQW55UXVlcnkgfCBudWxsPiA9XG4gIFQgZXh0ZW5kcyBRdWVyeUNyZWF0b3I8YW55LCBhbnksIGFueSwgaW5mZXIgU3RvcmUsIGFueSwgYW55PlxuICAgID8gU3RvcmVcbiAgICA6IFQgZXh0ZW5kcyBRdWVyeTxhbnksIGFueSwgYW55LCBpbmZlciBTdG9yZSwgYW55LCBhbnk+XG4gICAgICA/IFN0b3JlXG4gICAgICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBRdWVyeURhdGFPZjxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yIHwgQW55UXVlcnkgfCBudWxsPiA9XG4gIFQgZXh0ZW5kcyBRdWVyeUNyZWF0b3I8YW55LCBhbnksIGFueSwgYW55LCBpbmZlciBEYXRhLCBhbnk+XG4gICAgPyBEYXRhXG4gICAgOiBUIGV4dGVuZHMgUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBpbmZlciBEYXRhLCBhbnk+XG4gICAgICA/IERhdGFcbiAgICAgIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5U3RvcmVJZE9mPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IgfCBBbnlRdWVyeSB8IG51bGw+ID1cbiAgVCBleHRlbmRzIFF1ZXJ5Q3JlYXRvcjxhbnksIGFueSwgYW55LCBhbnksIGFueSwgaW5mZXIgU3RvcmVJZD5cbiAgICA/IFN0b3JlSWRcbiAgICA6IFQgZXh0ZW5kcyBRdWVyeTxhbnksIGFueSwgYW55LCBhbnksIGFueSwgaW5mZXIgU3RvcmVJZD5cbiAgICAgID8gU3RvcmVJZFxuICAgICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgQ29uc3RydWN0UXVlcnk8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcj4gPSBSZXR1cm5UeXBlPFRbJ3ByZXBhcmUnXT47XG4iXX0=
@@ -32,8 +32,10 @@ export class QueryForm {
32
32
  return acc;
33
33
  }, {});
34
34
  }
35
- constructor(_fields) {
35
+ // with prefix eg. page should become ${prefix}-page
36
+ constructor(_fields, _options) {
36
37
  this._fields = _fields;
38
+ this._options = _options;
37
39
  this._destroy$ = createDestroy();
38
40
  this._unobserveTrigger$ = new Subject();
39
41
  this._router = inject(Router);
@@ -215,7 +217,7 @@ export class QueryForm {
215
217
  setFormValueFromUrlQueryParams(options) {
216
218
  let didValueChanges = false;
217
219
  for (const [key, field] of Object.entries(this._fields)) {
218
- const value = options.queryParams[key];
220
+ const value = options.queryParams[this._transformKeyToQueryParam(key)];
219
221
  const valueDoesNotExist = value === undefined;
220
222
  if (valueDoesNotExist)
221
223
  continue;
@@ -262,6 +264,9 @@ export class QueryForm {
262
264
  }
263
265
  return val ?? null;
264
266
  }
267
+ _transformKeyToQueryParam(key) {
268
+ return this._options?.queryParamPrefix ? `${this._options.queryParamPrefix}-${key}` : key;
269
+ }
265
270
  _isDefaultValue(key, value) {
266
271
  const normalizedValue = Array.isArray(value) ? `${ET_ARR_PREFIX}${JSON.stringify(value)}` : value;
267
272
  return this._getDefaultValue(key) === normalizedValue;
@@ -289,16 +294,16 @@ export class QueryForm {
289
294
  _syncViaUrlQueryParams(values, replaceUrl) {
290
295
  const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };
291
296
  for (const [key, value] of Object.entries(values)) {
297
+ const queryParamKey = this._transformKeyToQueryParam(key);
292
298
  const field = this._fields[key];
293
299
  if (!field) {
294
- console.warn(`The field "${key}" is not defined in the QueryForm. Is it a typo?`, this);
295
300
  continue;
296
301
  }
297
302
  if (this._isDefaultValue(key, value) || field.data.appendToUrl === false) {
298
- delete queryParams[key];
303
+ queryParams[queryParamKey] = undefined;
299
304
  }
300
305
  else {
301
- queryParams[key] = field.data.valueToQueryParamTransformFn
306
+ queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn
302
307
  ? field.data.valueToQueryParamTransformFn?.(value)
303
308
  : value;
304
309
  }
@@ -307,6 +312,7 @@ export class QueryForm {
307
312
  this._router.navigate([], {
308
313
  queryParams,
309
314
  replaceUrl,
315
+ queryParamsHandling: 'merge',
310
316
  });
311
317
  });
312
318
  }
@@ -325,4 +331,4 @@ export class QueryForm {
325
331
  this._currentFormValue$.next(newVal);
326
332
  }
327
333
  }
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVNoSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsTUFBTSxPQUFPLFVBQVU7SUFDckIsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBbUIsSUFBMEI7UUFBMUIsU0FBSSxHQUFKLElBQUksQ0FBc0I7SUFBRyxDQUFDO0NBQ2xEO0FBRUQsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFF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Q0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsY0FBYyxHQUFHLEtBQUs7UUFDOUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUX1BST1BFUlRZX1JFTU9WRUQsIFJvdXRlclN0YXRlU2VydmljZSwgY2xvbmUsIGNyZWF0ZURlc3Ryb3ksIGVxdWFsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBRdWVyeUZpZWxkT3B0aW9ucyxcbiAgUXVlcnlGb3JtR3JvdXBDb250cm9scyxcbiAgUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybVZhbHVlLFxuICBRdWVyeUZvcm1WYWx1ZUV2ZW50LFxuICBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMsXG59IGZyb20gJy4vcXVlcnktZm9ybS50eXBlcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1Ub0Jvb2xlYW4sIHRyYW5zZm9ybVRvTnVtYmVyIH0gZnJvbSAnLi9xdWVyeS1mb3JtLnV0aWxzJztcblxuY29uc3QgRVRfQVJSX1BSRUZJWCA9ICdFVF9BUlJfXyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUZpZWxkPFQ+IHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPFQ+KSB7fVxufVxuXG5jb25zdCBJR05PUkVEX0ZJTFRFUl9DT1VOVF9GSUVMRFMgPSBbJ3BhZ2UnLCAnc2tpcCcsICd0YWtlJywgJ2xpbWl0JywgJ3NvcnQnLCAnc29ydEJ5JywgJ3NvcnRPcmRlcicsICdxdWVyeScsICdzZWFyY2gnXTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBRdWVyeUZvcm08VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFF1ZXJ5RmllbGQ8YW55Pj4+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Vub2JzZXJ2ZVRyaWdnZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFZhbHVlcyA9IHRoaXMuX2V4dHJhY3REZWZhdWx0VmFsdWVzKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpZFZhbHVlQ2hhbmdlcyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgX2lzT2JzZXJ2aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3NraXBOZXh0UmVzZXRzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBhbmd1bGFyIGZvcm0gZ3JvdXAgdGhhdCBjb250YWlucyBhbGwgdGhlIGZpZWxkcy5cbiAgICpcbiAgICogKipEbyBub3QqKiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbiB0aGlzIGZvcm0gZ3JvdXA6XG4gICAqIC0gYHNldFZhbHVlYDogVXNlIGBRdWVyeUZvcm0uc2V0VmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYHBhdGNoVmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS5wYXRjaFZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGB2YWx1ZUNoYW5nZXNgOiBVc2UgYFF1ZXJ5Rm9ybS5jaGFuZ2VzJGAgaW5zdGVhZC5cbiAgICogLSBgdmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS52YWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgY29udHJvbHNgOiBVc2UgYFF1ZXJ5Rm9ybS5jb250cm9sc2AgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9zZXR1cEZvcm1Hcm91cCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RGb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50Rm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlGb3JtVmFsdWU8VD4+KHRoaXMuX2Zvcm1WYWx1ZSk7XG5cbiAgcHJpdmF0ZSBnZXQgX2Zvcm1WYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgUXVlcnlGb3JtVmFsdWU8VD47XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlGb3JtVmFsdWVFdmVudDxUPj4oe1xuICAgIHByZXZpb3VzVmFsdWU6IG51bGwsXG4gICAgY3VycmVudFZhbHVlOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPixcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY2hhbmdlcyQgPSB0aGlzLl9jaGFuZ2VzJC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY3VycmVudFZhbHVlJCA9IHRoaXMuX2NoYW5nZXMkLnBpcGUobWFwKCh7IGN1cnJlbnRWYWx1ZSB9KSA9PiBjdXJyZW50VmFsdWUpKTtcbiAgcmVhZG9ubHkgcHJldmlvdXNWYWx1ZSQgPSB0aGlzLl9jaGFuZ2VzJC5waXBlKG1hcCgoeyBwcmV2aW91c1ZhbHVlIH0pID0+IHByZXZpb3VzVmFsdWUpKTtcblxuICByZWFkb25seSBjaGFuZ2VzID0gdG9TaWduYWwodGhpcy5jaGFuZ2VzJCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRWYWx1ZSA9IHRvU2lnbmFsKHRoaXMuY3VycmVudFZhbHVlJCk7XG4gIHJlYWRvbmx5IHByZXZpb3VzVmFsdWUgPSB0b1NpZ25hbCh0aGlzLnByZXZpb3VzVmFsdWUkKTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBhY3RpdmUgZmlsdGVycy5cbiAgICpcbiAgICogRXhjbHVkZXMgdGhlIGZvbGxvd2luZyBmaWVsZHMgYnkgZGVmYXVsdDpcbiAgICogLSBgcGFnZWBcbiAgICogLSBgc2tpcGBcbiAgICogLSBgdGFrZWBcbiAgICogLSBgbGltaXRgXG4gICAqIC0gYHNvcnRgXG4gICAqIC0gYHNvcnRCeWBcbiAgICogLSBgc29ydE9yZGVyYFxuICAgKiAtIGBxdWVyeWBcbiAgICogLSBgc2VhcmNoYFxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlRmlsdGVyQ291bnQkID0gdGhpcy5jaGFuZ2VzJC5waXBlKFxuICAgIG1hcChcbiAgICAgICh7IGN1cnJlbnRWYWx1ZSB9KSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyhjdXJyZW50VmFsdWUpXG4gICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAoSUdOT1JFRF9GSUxURVJfQ09VTlRfRklFTERTLmluY2x1ZGVzKGtleSkgfHwgdGhpcy5fZmllbGRzW2tleV0/LmRhdGEuc2tpcEluRmlsdGVyQ291bnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RlZmF1bHRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYgPT09IGZhbHNlKS5sZW5ndGgsXG4gICAgKSxcbiAgKTtcblxuICBnZXQgY29udHJvbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlcyQudmFsdWUuY3VycmVudFZhbHVlO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRGb3JtVmFsdWUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX2RlZmF1bHRWYWx1ZXMpLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4ge1xuICAgICAgYWNjW2tleSBhcyBrZXlvZiBRdWVyeUZvcm1WYWx1ZTxUPl0gPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBRdWVyeUZvcm1WYWx1ZTxUPik7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWVsZHM6IFQpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoUXVlcnlGb3JtKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9ucz86IFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2lzT2JzZXJ2aW5nKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdRdWVyeUZvcm0ub2JzZXJ2ZSgpIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc09ic2VydmluZyA9IHRydWU7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRpZENoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLl9yb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpZENoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlRm9ybUNoYW5nZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZXJnZSguLi5PYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY29udHJvbC52YWx1ZUNoYW5nZXMpLCB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3A6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5fY3VycmVudEZvcm1WYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBjbG9uZSh0aGlzLl9sYXN0Rm9ybVZhbHVlJC52YWx1ZSksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNsb25lKGN1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zPy53cml0ZVRvUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXMoY3VycmVudFZhbHVlLCBvcHRpb25zPy5yZXBsYWNlVXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkaWRSZXNldFZhbHVlcyA9IHRoaXMuX3NraXBOZXh0UmVzZXRzXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IHRoaXMuX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlID8/IG51bGwsIGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gIWVxdWFsKHByZXZpb3VzVmFsdWU/LltrZXldLCBjdXJyZW50VmFsdWVba2V5XSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkcy5wdXNoKC4uLmNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3ApO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRSZXNldFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IGNoYW5nZWRGaWVsZHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbLi4ubmV3IFNldChjaGFuZ2VkRmllbGRzKV07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAoY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcC5sZW5ndGgpIHJldHVybiBvZihudWxsKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcblxuICAgICAgICAgIGNvbnN0IGRlYm91bmNlVmFsdWVzID0gY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2tleV07XG5cbiAgICAgICAgICAgIGlmICghZmllbGQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBpZiAoZmllbGQuZGF0YS5kaXNhYmxlRGVib3VuY2VJZkZhbHN5ID09PSB0cnVlICYmICFjdXJyZW50VmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmRhdGEuZGVib3VuY2UgPz8gbnVsbDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzID0gW107XG5cbiAgICAgICAgICBpZiAoZGVib3VuY2VWYWx1ZXMuc29tZSgodikgPT4gdiA9PT0gbnVsbCkgfHwgIWRlYm91bmNlVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNob3J0ZXN0RGVib3VuY2VUaW1lID0gTWF0aC5taW4oLi4uZGVib3VuY2VWYWx1ZXMuZmlsdGVyKCh2KTogdiBpcyBudW1iZXIgPT4gdiAhPT0gbnVsbCkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHNob3J0ZXN0RGVib3VuY2VUaW1lKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbmdlcyQubmV4dCh7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtQ2hhbmdlcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgICAgIHRhcCgoY2hhbmdlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlkVmFsdWVDaGFuZ2VzID0gdGhpcy5zZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMoeyBxdWVyeVBhcmFtczogY2hhbmdlcyB9KTtcblxuICAgICAgICAgICAgaWYgKGRpZFZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgICB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGwsIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4pIHtcbiAgICBsZXQgZGlkUmVzZXRWYWx1ZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZm9ybUZpZWxkS2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XTtcblxuICAgICAgaWYgKCFmaWVsZCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0cyA9IGZpZWxkLmRhdGEuaXNSZXNldEJ5O1xuXG4gICAgICBpZiAoIXJlc2V0cykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5cyA9IEFycmF5LmlzQXJyYXkocmVzZXRzKSA/IHJlc2V0cyA6IFtyZXNldHNdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5IG9mIHJlc2V0Q29uZGl0aW9uS2V5cykge1xuICAgICAgICBpZiAoIShyZXNldENvbmRpdGlvbktleSBpbiB0aGlzLl9maWVsZHMpKSB7XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBmaWVsZCBcIiR7cmVzZXRDb25kaXRpb25LZXl9XCIgaXMgbm90IGRlZmluZWQgaW4gdGhlIFF1ZXJ5Rm9ybS4gSXMgaXQgYSB0eXBvP2AsIHRoaXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZpb3VzVmFsdWUgJiZcbiAgICAgICAgICBjdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAhZXF1YWwocHJldmlvdXNWYWx1ZVtyZXNldENvbmRpdGlvbktleV0sIGN1cnJlbnRWYWx1ZVtyZXNldENvbmRpdGlvbktleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoZm9ybUZpZWxkS2V5KTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVGb3JLZXlUb1Jlc2V0ID0gY3VycmVudFZhbHVlW2Zvcm1GaWVsZEtleV07XG5cbiAgICAgICAgICBpZiAoZXF1YWwoZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCwgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tmb3JtRmllbGRLZXldLnNldFZhbHVlKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgICAgICAgIGRpZFJlc2V0VmFsdWVzID0gdHJ1ZTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFJlc2V0VmFsdWVzO1xuICB9XG5cbiAgdW5vYnNlcnZlKCkge1xuICAgIHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBzZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMob3B0aW9uczogeyBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkge1xuICAgIGxldCBkaWRWYWx1ZUNoYW5nZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy5xdWVyeVBhcmFtc1trZXldO1xuXG4gICAgICBjb25zdCB2YWx1ZURvZXNOb3RFeGlzdCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh2YWx1ZURvZXNOb3RFeGlzdCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlR290UmVtb3ZlZCA9IHZhbHVlID09PSBFVF9QUk9QRVJUWV9SRU1PVkVEO1xuXG4gICAgICBpZiAodmFsdWVHb3RSZW1vdmVkKSB7XG4gICAgICAgIGZpZWxkLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgZGlkVmFsdWVDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICBpZiAoZmllbGQuZGF0YS5xdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gZmllbGQuZGF0YS5xdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSAnbnVtYmVyJykge1xuICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHRyYW5zZm9ybVRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSB0cmFuc2Zvcm1Ub0Jvb2xlYW4odmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZUlzRXF1YWxUb0N1cnJlbnQgPSBlcXVhbChkZXNlcmlhbGl6ZWRWYWx1ZSwgZmllbGQuY29udHJvbC52YWx1ZSk7XG5cbiAgICAgIGlmICh2YWx1ZUlzRXF1YWxUb0N1cnJlbnQpIGNvbnRpbnVlO1xuXG4gICAgICBmaWVsZC5jb250cm9sLnNldFZhbHVlKGRlc2VyaWFsaXplZFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBkaWRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkaWRWYWx1ZUNoYW5nZXM7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwYXRjaFZhbHVlKHZhbHVlOiBQYXJ0aWFsPFF1ZXJ5Rm9ybVZhbHVlPFQ+Piwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwUmVzZXRzKSB7XG4gICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVmYXVsdFZhbHVlKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5fZGVmYXVsdFZhbHVlc1trZXldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5zdGFydHNXaXRoKEVUX0FSUl9QUkVGSVgpKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwuc2xpY2UoRVRfQVJSX1BSRUZJWC5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9pc0RlZmF1bHRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IGAke0VUX0FSUl9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCA6IHZhbHVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSBub3JtYWxpemVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe30gYXMgUXVlcnlGb3JtR3JvdXBDb250cm9sczxUPik7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBncm91cC5hZGRDb250cm9sKGtleSwgZmllbGQuY29udHJvbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXh0cmFjdERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuY29udHJvbC52YWx1ZTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZXNba2V5XSA9IGAke0VUX0FSUl9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0VmFsdWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY1ZpYVVybFF1ZXJ5UGFyYW1zKHZhbHVlczogUXVlcnlGb3JtVmFsdWU8VD4sIHJlcGxhY2VVcmw/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLmNsb25lKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKSB9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNba2V5XTtcblxuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBmaWVsZCBcIiR7a2V5fVwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBRdWVyeUZvcm0uIElzIGl0IGEgdHlwbz9gLCB0aGlzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc0RlZmF1bHRWYWx1ZShrZXksIHZhbHVlKSB8fCBmaWVsZC5kYXRhLmFwcGVuZFRvVXJsID09PSBmYWxzZSkge1xuICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSBmaWVsZC5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm5cbiAgICAgICAgICA/IGZpZWxkLmRhdGEudmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1Gbj8uKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICByZXBsYWNlVXJsLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVGb3JtQ2hhbmdlKGZvcmNlT3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsID0gY2xvbmUodGhpcy5fY3VycmVudEZvcm1WYWx1ZSQudmFsdWUpO1xuICAgIGNvbnN0IG5ld1ZhbCA9IGNsb25lKHRoaXMuX2Zvcm1WYWx1ZSk7XG5cbiAgICBpZiAoZXF1YWwoY3VycmVudFZhbCwgbmV3VmFsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmb3JjZU92ZXJ3cml0ZSkge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChuZXdWYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sYXN0Rm9ybVZhbHVlJC5uZXh0KGN1cnJlbnRWYWwpO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgfVxufVxuIl19
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVNoSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsTUFBTSxPQUFPLFVBQVU7SUFDckIsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBbUIsSUFBMEI7UUFBMUIsU0FBSSxHQUFKLElBQUksQ0FBc0I7SUFBRyxDQUFDO0NBQ2xEO0FBRUQsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFF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Q0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0JBQ2xELENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLFdBQVc7Z0JBQ1gsVUFBVTtnQkFDVixtQkFBbUIsRUFBRSxPQUFPO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxLQUFLO1FBQzlDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1pvbmUsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFVF9QUk9QRVJUWV9SRU1PVkVELCBSb3V0ZXJTdGF0ZVNlcnZpY2UsIGNsb25lLCBjcmVhdGVEZXN0cm95LCBlcXVhbCB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIG1hcCwgbWVyZ2UsIG9mLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUXVlcnlGaWVsZE9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHMsXG4gIFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zLFxuICBRdWVyeUZvcm1WYWx1ZSxcbiAgUXVlcnlGb3JtVmFsdWVFdmVudCxcbiAgUXVlcnlGb3JtV3JpdGVPcHRpb25zLFxufSBmcm9tICcuL3F1ZXJ5LWZvcm0udHlwZXMnO1xuaW1wb3J0IHsgdHJhbnNmb3JtVG9Cb29sZWFuLCB0cmFuc2Zvcm1Ub051bWJlciB9IGZyb20gJy4vcXVlcnktZm9ybS51dGlscyc7XG5cbmNvbnN0IEVUX0FSUl9QUkVGSVggPSAnRVRfQVJSX18nO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlGaWVsZDxUPiB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxUPikge31cbn1cblxuY29uc3QgSUdOT1JFRF9GSUxURVJfQ09VTlRfRklFTERTID0gWydwYWdlJywgJ3NraXAnLCAndGFrZScsICdsaW1pdCcsICdzb3J0JywgJ3NvcnRCeScsICdzb3J0T3JkZXInLCAncXVlcnknLCAnc2VhcmNoJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIHByZWZpeCB0byB1c2UgZm9yIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIG11bHRpcGxlIHF1ZXJ5IGZvcm1zIG9uIHRoZSBzYW1lIHBhZ2UuXG4gICAqL1xuICBxdWVyeVBhcmFtUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNsYXNzIFF1ZXJ5Rm9ybTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdW5vYnNlcnZlVHJpZ2dlciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VmFsdWVzID0gdGhpcy5fZXh0cmFjdERlZmF1bHRWYWx1ZXMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlkVmFsdWVDaGFuZ2VzJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfaXNPYnNlcnZpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2tpcE5leHRSZXNldHMgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGFuZ3VsYXIgZm9ybSBncm91cCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzLlxuICAgKlxuICAgKiAqKkRvIG5vdCoqIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9uIHRoaXMgZm9ybSBncm91cDpcbiAgICogLSBgc2V0VmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS5zZXRWYWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgcGF0Y2hWYWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnBhdGNoVmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYHZhbHVlQ2hhbmdlc2A6IFVzZSBgUXVlcnlGb3JtLmNoYW5nZXMkYCBpbnN0ZWFkLlxuICAgKiAtIGB2YWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGBjb250cm9sc2A6IFVzZSBgUXVlcnlGb3JtLmNvbnRyb2xzYCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX3NldHVwRm9ybUdyb3VwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFzdEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZTxUPj4odGhpcy5fZm9ybVZhbHVlKTtcblxuICBwcml2YXRlIGdldCBfZm9ybVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZUV2ZW50PFQ+Pih7XG4gICAgcHJldmlvdXNWYWx1ZTogbnVsbCxcbiAgICBjdXJyZW50VmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+LFxuICB9KTtcblxuICByZWFkb25seSBjaGFuZ2VzJCA9IHRoaXMuX2NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXJyZW50VmFsdWUkID0gdGhpcy5fY2hhbmdlcyQucGlwZShtYXAoKHsgY3VycmVudFZhbHVlIH0pID0+IGN1cnJlbnRWYWx1ZSkpO1xuICByZWFkb25seSBwcmV2aW91c1ZhbHVlJCA9IHRoaXMuX2NoYW5nZXMkLnBpcGUobWFwKCh7IHByZXZpb3VzVmFsdWUgfSkgPT4gcHJldmlvdXNWYWx1ZSkpO1xuXG4gIHJlYWRvbmx5IGNoYW5nZXMgPSB0b1NpZ25hbCh0aGlzLmNoYW5nZXMkKTtcbiAgcmVhZG9ubHkgY3VycmVudFZhbHVlID0gdG9TaWduYWwodGhpcy5jdXJyZW50VmFsdWUkKTtcbiAgcmVhZG9ubHkgcHJldmlvdXNWYWx1ZSA9IHRvU2lnbmFsKHRoaXMucHJldmlvdXNWYWx1ZSQpO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGFjdGl2ZSBmaWx0ZXJzLlxuICAgKlxuICAgKiBFeGNsdWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkcyBieSBkZWZhdWx0OlxuICAgKiAtIGBwYWdlYFxuICAgKiAtIGBza2lwYFxuICAgKiAtIGB0YWtlYFxuICAgKiAtIGBsaW1pdGBcbiAgICogLSBgc29ydGBcbiAgICogLSBgc29ydEJ5YFxuICAgKiAtIGBzb3J0T3JkZXJgXG4gICAqIC0gYHF1ZXJ5YFxuICAgKiAtIGBzZWFyY2hgXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVGaWx0ZXJDb3VudCQgPSB0aGlzLmNoYW5nZXMkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKHsgY3VycmVudFZhbHVlIH0pID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChJR05PUkVEX0ZJTFRFUl9DT1VOVF9GSUVMRFMuaW5jbHVkZXMoa2V5KSB8fCB0aGlzLl9maWVsZHNba2V5XT8uZGF0YS5za2lwSW5GaWx0ZXJDb3VudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigodikgPT4gdiA9PT0gZmFsc2UpLmxlbmd0aCxcbiAgICApLFxuICApO1xuXG4gIGdldCBjb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VzJC52YWx1ZS5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBnZXQgZGVmYXVsdEZvcm1WYWx1ZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fZGVmYXVsdFZhbHVlcykucmVkdWNlKChhY2MsIFtrZXldKSA9PiB7XG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+XSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+KTtcbiAgfVxuXG4gIC8vIHdpdGggcHJlZml4IGVnLiBwYWdlIHNob3VsZCBiZWNvbWUgJHtwcmVmaXh9LXBhZ2VcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZmllbGRzOiBULFxuICAgIHByaXZhdGUgX29wdGlvbnM/OiBRdWVyeUZvcm1PcHRpb25zLFxuICApIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoUXVlcnlGb3JtKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9ucz86IFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2lzT2JzZXJ2aW5nKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdRdWVyeUZvcm0ub2JzZXJ2ZSgpIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc09ic2VydmluZyA9IHRydWU7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRpZENoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLl9yb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpZENoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlRm9ybUNoYW5nZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZXJnZSguLi5PYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY29udHJvbC52YWx1ZUNoYW5nZXMpLCB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3A6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5fY3VycmVudEZvcm1WYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBjbG9uZSh0aGlzLl9sYXN0Rm9ybVZhbHVlJC52YWx1ZSksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNsb25lKGN1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zPy53cml0ZVRvUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXMoY3VycmVudFZhbHVlLCBvcHRpb25zPy5yZXBsYWNlVXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkaWRSZXNldFZhbHVlcyA9IHRoaXMuX3NraXBOZXh0UmVzZXRzXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IHRoaXMuX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlID8/IG51bGwsIGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gIWVxdWFsKHByZXZpb3VzVmFsdWU/LltrZXldLCBjdXJyZW50VmFsdWVba2V5XSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkcy5wdXNoKC4uLmNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3ApO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRSZXNldFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IGNoYW5nZWRGaWVsZHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbLi4ubmV3IFNldChjaGFuZ2VkRmllbGRzKV07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAoY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcC5sZW5ndGgpIHJldHVybiBvZihudWxsKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcblxuICAgICAgICAgIGNvbnN0IGRlYm91bmNlVmFsdWVzID0gY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2tleV07XG5cbiAgICAgICAgICAgIGlmICghZmllbGQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBpZiAoZmllbGQuZGF0YS5kaXNhYmxlRGVib3VuY2VJZkZhbHN5ID09PSB0cnVlICYmICFjdXJyZW50VmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmRhdGEuZGVib3VuY2UgPz8gbnVsbDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzID0gW107XG5cbiAgICAgICAgICBpZiAoZGVib3VuY2VWYWx1ZXMuc29tZSgodikgPT4gdiA9PT0gbnVsbCkgfHwgIWRlYm91bmNlVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNob3J0ZXN0RGVib3VuY2VUaW1lID0gTWF0aC5taW4oLi4uZGVib3VuY2VWYWx1ZXMuZmlsdGVyKCh2KTogdiBpcyBudW1iZXIgPT4gdiAhPT0gbnVsbCkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHNob3J0ZXN0RGVib3VuY2VUaW1lKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbmdlcyQubmV4dCh7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3JvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtQ2hhbmdlcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgICAgIHRhcCgoY2hhbmdlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlkVmFsdWVDaGFuZ2VzID0gdGhpcy5zZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMoeyBxdWVyeVBhcmFtczogY2hhbmdlcyB9KTtcblxuICAgICAgICAgICAgaWYgKGRpZFZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgICB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGwsIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4pIHtcbiAgICBsZXQgZGlkUmVzZXRWYWx1ZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZm9ybUZpZWxkS2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XTtcblxuICAgICAgaWYgKCFmaWVsZCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0cyA9IGZpZWxkLmRhdGEuaXNSZXNldEJ5O1xuXG4gICAgICBpZiAoIXJlc2V0cykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5cyA9IEFycmF5LmlzQXJyYXkocmVzZXRzKSA/IHJlc2V0cyA6IFtyZXNldHNdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5IG9mIHJlc2V0Q29uZGl0aW9uS2V5cykge1xuICAgICAgICBpZiAoIShyZXNldENvbmRpdGlvbktleSBpbiB0aGlzLl9maWVsZHMpKSB7XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBmaWVsZCBcIiR7cmVzZXRDb25kaXRpb25LZXl9XCIgaXMgbm90IGRlZmluZWQgaW4gdGhlIFF1ZXJ5Rm9ybS4gSXMgaXQgYSB0eXBvP2AsIHRoaXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZpb3VzVmFsdWUgJiZcbiAgICAgICAgICBjdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAhZXF1YWwocHJldmlvdXNWYWx1ZVtyZXNldENvbmRpdGlvbktleV0sIGN1cnJlbnRWYWx1ZVtyZXNldENvbmRpdGlvbktleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoZm9ybUZpZWxkS2V5KTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVGb3JLZXlUb1Jlc2V0ID0gY3VycmVudFZhbHVlW2Zvcm1GaWVsZEtleV07XG5cbiAgICAgICAgICBpZiAoZXF1YWwoZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCwgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tmb3JtRmllbGRLZXldLnNldFZhbHVlKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgICAgICAgIGRpZFJlc2V0VmFsdWVzID0gdHJ1ZTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFJlc2V0VmFsdWVzO1xuICB9XG5cbiAgdW5vYnNlcnZlKCkge1xuICAgIHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBzZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMob3B0aW9uczogeyBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkge1xuICAgIGxldCBkaWRWYWx1ZUNoYW5nZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy5xdWVyeVBhcmFtc1t0aGlzLl90cmFuc2Zvcm1LZXlUb1F1ZXJ5UGFyYW0oa2V5KV07XG5cbiAgICAgIGNvbnN0IHZhbHVlRG9lc05vdEV4aXN0ID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHZhbHVlRG9lc05vdEV4aXN0KSBjb250aW51ZTtcblxuICAgICAgY29uc3QgdmFsdWVHb3RSZW1vdmVkID0gdmFsdWUgPT09IEVUX1BST1BFUlRZX1JFTU9WRUQ7XG5cbiAgICAgIGlmICh2YWx1ZUdvdFJlbW92ZWQpIHtcbiAgICAgICAgZmllbGQuY29udHJvbC5zZXRWYWx1ZSh0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBkaWRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGRlc2VyaWFsaXplZFZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmIChmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4pIHtcbiAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSBmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4odmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9OdW1iZXIodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09ICdib29sZWFuJykge1xuICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHRyYW5zZm9ybVRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlSXNFcXVhbFRvQ3VycmVudCA9IGVxdWFsKGRlc2VyaWFsaXplZFZhbHVlLCBmaWVsZC5jb250cm9sLnZhbHVlKTtcblxuICAgICAgaWYgKHZhbHVlSXNFcXVhbFRvQ3VycmVudCkgY29udGludWU7XG5cbiAgICAgIGZpZWxkLmNvbnRyb2wuc2V0VmFsdWUoZGVzZXJpYWxpemVkVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGRpZFZhbHVlQ2hhbmdlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFZhbHVlQ2hhbmdlcztcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHBhdGNoVmFsdWUodmFsdWU6IFBhcnRpYWw8UXVlcnlGb3JtVmFsdWU8VD4+LCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLl9kZWZhdWx0VmFsdWVzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLnN0YXJ0c1dpdGgoRVRfQVJSX1BSRUZJWCkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbC5zbGljZShFVF9BUlJfUFJFRklYLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zZm9ybUtleVRvUXVlcnlQYXJhbShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zPy5xdWVyeVBhcmFtUHJlZml4ID8gYCR7dGhpcy5fb3B0aW9ucy5xdWVyeVBhcmFtUHJlZml4fS0ke2tleX1gIDoga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAgOiB2YWx1ZTtcblxuICAgIHJldHVybiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gbm9ybWFsaXplZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBGb3JtR3JvdXAoKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9IGFzIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHM8VD4pO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZpZWxkLmNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIHByaXZhdGUgX2V4dHJhY3REZWZhdWx0VmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyh2YWx1ZXM6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCByZXBsYWNlVXJsPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5jbG9uZSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1LZXkgPSB0aGlzLl90cmFuc2Zvcm1LZXlUb1F1ZXJ5UGFyYW0oa2V5KTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2tleV07XG5cbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc0RlZmF1bHRWYWx1ZShrZXksIHZhbHVlKSB8fCBmaWVsZC5kYXRhLmFwcGVuZFRvVXJsID09PSBmYWxzZSkge1xuICAgICAgICBxdWVyeVBhcmFtc1txdWVyeVBhcmFtS2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1LZXldID0gZmllbGQuZGF0YS52YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuXG4gICAgICAgICAgPyBmaWVsZC5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm4/Lih2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRm9ybUNoYW5nZShmb3JjZU92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbCA9IGNsb25lKHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLnZhbHVlKTtcbiAgICBjb25zdCBuZXdWYWwgPSBjbG9uZSh0aGlzLl9mb3JtVmFsdWUpO1xuXG4gICAgaWYgKGVxdWFsKGN1cnJlbnRWYWwsIG5ld1ZhbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHtcbiAgICAgIHRoaXMuX2xhc3RGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChjdXJyZW50VmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJC5uZXh0KG5ld1ZhbCk7XG4gIH1cbn1cbiJdfQ==