nsrtm-gestionarchivo-npm-prueba2
Version:
Proyecto de Libreria Frontend para la Gestión de Archivos
354 lines • 48.1 kB
JavaScript
/* tslint:disable */
/* eslint-disable */
import { Injectable } from '@angular/core';
import { HttpResponse } from '@angular/common/http';
import { BaseService } from '../base-service';
import { RequestBuilder } from '../request-builder';
import { map, filter } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "../api-configuration";
import * as i2 from "@angular/common/http";
export class GestionArchivoControllerService extends BaseService {
constructor(config, http) {
super(config, http);
}
/**
* Agregar archivo.
*
* Permite agregar directorio
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `agregarArchivo()` instead.
*
* This method sends `multipart/form-data` and handles request body of type `multipart/form-data`.
*/
agregarArchivo$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.AgregarArchivoPath, 'post');
if (params) {
rb.body(params.body, 'multipart/form-data');
}
return this.http.request(rb.build({
responseType: 'json',
accept: 'application/json',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Agregar archivo.
*
* Permite agregar directorio
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `agregarArchivo$Response()` instead.
*
* This method sends `multipart/form-data` and handles request body of type `multipart/form-data`.
*/
agregarArchivo(params) {
return this.agregarArchivo$Response(params).pipe(map((r) => r.body));
}
/**
* Cargar archivo por funcionalidad.
*
* Permite Cargar archivo por funcionalidad
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `cargarArchivoTrama()` instead.
*
* This method sends `multipart/form-data` and handles request body of type `multipart/form-data`.
*/
cargarArchivoTrama$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.CargarArchivoTramaPath, 'post');
if (params) {
rb.body(params.body, 'multipart/form-data');
}
return this.http.request(rb.build({
responseType: 'json',
accept: 'application/json',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Cargar archivo por funcionalidad.
*
* Permite Cargar archivo por funcionalidad
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `cargarArchivoTrama$Response()` instead.
*
* This method sends `multipart/form-data` and handles request body of type `multipart/form-data`.
*/
cargarArchivoTrama(params) {
return this.cargarArchivoTrama$Response(params).pipe(map((r) => r.body));
}
/**
* Permite la carga de archivos masivo.
*
* Permite la carga de archivos masivo
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `cargarArchivosMasivo()` instead.
*
* This method sends `multipart/form-data` and handles request body of type `multipart/form-data`.
*/
cargarArchivosMasivo$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.CargarArchivosMasivoPath, 'post');
if (params) {
rb.body(params.body, 'multipart/form-data');
}
return this.http.request(rb.build({
responseType: 'text',
accept: '*/*',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r.clone({ body: undefined });
}));
}
/**
* Permite la carga de archivos masivo.
*
* Permite la carga de archivos masivo
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `cargarArchivosMasivo$Response()` instead.
*
* This method sends `multipart/form-data` and handles request body of type `multipart/form-data`.
*/
cargarArchivosMasivo(params) {
return this.cargarArchivosMasivo$Response(params).pipe(map((r) => r.body));
}
/**
* Retorna el detalle del archivo.
*
* Permite obtener el detalle de un archivo
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `obtenerDetalleArchivo()` instead.
*
* This method doesn't expect any request body.
*/
obtenerDetalleArchivo$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.ObtenerDetalleArchivoPath, 'get');
if (params) {
rb.query('id_archivo', params.id_archivo, {});
rb.query('anio', params.anio, {});
}
return this.http.request(rb.build({
responseType: 'json',
accept: 'application/json',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Retorna el detalle del archivo.
*
* Permite obtener el detalle de un archivo
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `obtenerDetalleArchivo$Response()` instead.
*
* This method doesn't expect any request body.
*/
obtenerDetalleArchivo(params) {
return this.obtenerDetalleArchivo$Response(params).pipe(map((r) => r.body));
}
/**
* Retorna el contenido del archivo.
*
* Permite descargar el archivo
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `obtenerContenidoArchivo()` instead.
*
* This method doesn't expect any request body.
*/
obtenerContenidoArchivo$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.ObtenerContenidoArchivoPath, 'get');
if (params) {
rb.query('id_laserfiche', params.id_laserfiche, {});
}
return this.http.request(rb.build({
responseType: 'blob',
accept: 'application/octet-stream',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Retorna el contenido del archivo.
*
* Permite descargar el archivo
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `obtenerContenidoArchivo$Response()` instead.
*
* This method doesn't expect any request body.
*/
obtenerContenidoArchivo(params) {
return this.obtenerContenidoArchivo$Response(params).pipe(map((r) => r.body));
}
/**
* Retorna el contenido del archivo.
*
* Permite descargar el archivo
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `obtenerContenidoArchivoPorId()` instead.
*
* This method doesn't expect any request body.
*/
obtenerContenidoArchivoPorId$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.ObtenerContenidoArchivoPorIdPath, 'get');
if (params) {
rb.query('id_archivo', params.id_archivo, {});
rb.query('anio', params.anio, {});
}
return this.http.request(rb.build({
responseType: 'blob',
accept: 'application/octet-stream',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Retorna el contenido del archivo.
*
* Permite descargar el archivo
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `obtenerContenidoArchivoPorId$Response()` instead.
*
* This method doesn't expect any request body.
*/
obtenerContenidoArchivoPorId(params) {
return this.obtenerContenidoArchivoPorId$Response(params).pipe(map((r) => r.body));
}
/**
* Permite listar los archivos de una Declaracion / Liquidacion.
*
* Permite listar los archivos de una Declaracion / Liquidacion
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `listarArchivos()` instead.
*
* This method doesn't expect any request body.
*/
listarArchivos$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.ListarArchivosPath, 'get');
if (params) {
rb.query('numero_dec_liq', params.numero_dec_liq, {});
rb.query('medio_digital_id', params.medio_digital_id, {});
rb.query('procesoModuloId', params.procesoModuloId, {});
rb.query('anio', params.anio, {});
rb.query('campo2', params.campo2, {});
rb.query('campo3', params.campo3, {});
rb.query('page', params.page, {});
rb.query('page_size', params.page_size, {});
}
return this.http.request(rb.build({
responseType: 'json',
accept: 'application/json',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Permite listar los archivos de una Declaracion / Liquidacion.
*
* Permite listar los archivos de una Declaracion / Liquidacion
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `listarArchivos$Response()` instead.
*
* This method doesn't expect any request body.
*/
listarArchivos(params) {
return this.listarArchivos$Response(params).pipe(map((r) => r.body));
}
/**
* Permite anula un archivo.
*
* Anula un archivo
*
* This method provides access to the full `HttpResponse`, allowing access to response headers.
* To access only the response body, use `anularArchivo()` instead.
*
* This method doesn't expect any request body.
*/
anularArchivo$Response(params) {
const rb = new RequestBuilder(this.rootUrl, GestionArchivoControllerService.AnularArchivoPath, 'delete');
if (params) {
rb.path('archivoId', params.archivoId, {});
rb.path('anio', params.anio, {});
}
return this.http.request(rb.build({
responseType: 'json',
accept: 'application/json',
context: params?.context
})).pipe(filter((r) => r instanceof HttpResponse), map((r) => {
return r;
}));
}
/**
* Permite anula un archivo.
*
* Anula un archivo
*
* This method provides access to only to the response body.
* To access the full response (for headers, for example), `anularArchivo$Response()` instead.
*
* This method doesn't expect any request body.
*/
anularArchivo(params) {
return this.anularArchivo$Response(params).pipe(map((r) => r.body));
}
}
/**
* Path part for operation agregarArchivo
*/
GestionArchivoControllerService.AgregarArchivoPath = '/gestion-archivos/subir';
/**
* Path part for operation cargarArchivoTrama
*/
GestionArchivoControllerService.CargarArchivoTramaPath = '/gestion-archivos/cargar-archivo-trama';
/**
* Path part for operation cargarArchivosMasivo
*/
GestionArchivoControllerService.CargarArchivosMasivoPath = '/gestion-archivos/cargar-archivo-trama-masivo';
/**
* Path part for operation obtenerDetalleArchivo
*/
GestionArchivoControllerService.ObtenerDetalleArchivoPath = '/gestion-archivos/obtener';
/**
* Path part for operation obtenerContenidoArchivo
*/
GestionArchivoControllerService.ObtenerContenidoArchivoPath = '/gestion-archivos/obtener-contenido';
/**
* Path part for operation obtenerContenidoArchivoPorId
*/
GestionArchivoControllerService.ObtenerContenidoArchivoPorIdPath = '/gestion-archivos/obtener-contenido-archivo';
/**
* Path part for operation listarArchivos
*/
GestionArchivoControllerService.ListarArchivosPath = '/gestion-archivos/listar';
/**
* Path part for operation anularArchivo
*/
GestionArchivoControllerService.AnularArchivoPath = '/gestion-archivos/anular/{archivoId}/{anio}';
GestionArchivoControllerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GestionArchivoControllerService, deps: [{ token: i1.ApiConfiguration }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
GestionArchivoControllerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GestionArchivoControllerService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GestionArchivoControllerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.ApiConfiguration }, { type: i2.HttpClient }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdGlvbi1hcmNoaXZvLWNvbnRyb2xsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2FyY2hpdm8vbnNydG0tZ2VzdGlvbmFyY2hpdm8tbnBtL3NyYy9hcHAvYXBpL2dlc3Rpb25hcmNoaXZvL3NlcnZpY2VzL2dlc3Rpb24tYXJjaGl2by1jb250cm9sbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxZQUFZLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRN0MsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLFdBQVc7SUFDOUQsWUFDRSxNQUF3QixFQUN4QixJQUFnQjtRQUVoQixLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFPRDs7Ozs7Ozs7O09BU0c7SUFDSCx1QkFBdUIsQ0FBQyxNQU12QjtRQUlDLE1BQU0sRUFBRSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsK0JBQStCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEcsSUFBSSxNQUFNLEVBQUU7WUFDVixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQyxZQUFZ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O0FBbUVsRjs7R0FFRztBQUNhLHdEQUF3QixHQUFHLCtDQUFnRCxDQUFBO0FBOEQzRjs7R0FFRztBQUNhLHlEQUF5QixHQUFHLDJCQUE0QixDQUFBO0FBMkR4RTs7R0FFRztBQUNhLDJEQUEyQixHQUFHLHFDQUFzQyxDQUFBO0FBd0RwRjs7R0FFRztBQUNhLGdFQUFnQyxHQUFHLDZDQUE4QyxDQUFBO0FBMkRqRzs7R0FFRztBQUNhLGtEQUFrQixHQUFHLDBCQUEyQixDQUFBO0FBNkVoRTs7R0FFRztBQUNhLGlEQUFpQixHQUFHLDZDQUE4QyxDQUFBOzRIQS9kdkUsK0JBQStCO2dJQUEvQiwrQkFBK0IsY0FGOUIsTUFBTTsyRkFFUCwrQkFBK0I7a0JBSDNDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2UsIEh0dHBDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uL2Jhc2Utc2VydmljZSc7XHJcbmltcG9ydCB7IEFwaUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hcGktY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IFN0cmljdEh0dHBSZXNwb25zZSB9IGZyb20gJy4uL3N0cmljdC1odHRwLXJlc3BvbnNlJztcclxuaW1wb3J0IHsgUmVxdWVzdEJ1aWxkZXIgfSBmcm9tICcuLi9yZXF1ZXN0LWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9tUGFnZURhdG9zQXJjaGl2b1Byb2plY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvY3VzdG9tLXBhZ2UtZGF0b3MtYXJjaGl2by1wcm9qZWN0aW9uJztcclxuaW1wb3J0IHsgR2VzdGlvbkFyY2hpdm9SZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy9nZXN0aW9uLWFyY2hpdm8tcmVzcG9uc2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlc3Rpb25BcmNoaXZvQ29udHJvbGxlclNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb25maWc6IEFwaUNvbmZpZ3VyYXRpb24sXHJcbiAgICBodHRwOiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb25maWcsIGh0dHApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF0aCBwYXJ0IGZvciBvcGVyYXRpb24gYWdyZWdhckFyY2hpdm9cclxuICAgKi9cclxuICBzdGF0aWMgcmVhZG9ubHkgQWdyZWdhckFyY2hpdm9QYXRoID0gJy9nZXN0aW9uLWFyY2hpdm9zL3N1YmlyJztcclxuXHJcbiAgLyoqXHJcbiAgICogQWdyZWdhciBhcmNoaXZvLlxyXG4gICAqXHJcbiAgICogUGVybWl0ZSBhZ3JlZ2FyIGRpcmVjdG9yaW9cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZnVsbCBgSHR0cFJlc3BvbnNlYCwgYWxsb3dpbmcgYWNjZXNzIHRvIHJlc3BvbnNlIGhlYWRlcnMuXHJcbiAgICogVG8gYWNjZXNzIG9ubHkgdGhlIHJlc3BvbnNlIGJvZHksIHVzZSBgYWdyZWdhckFyY2hpdm8oKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGBtdWx0aXBhcnQvZm9ybS1kYXRhYCBhbmQgaGFuZGxlcyByZXF1ZXN0IGJvZHkgb2YgdHlwZSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAuXHJcbiAgICovXHJcbiAgYWdyZWdhckFyY2hpdm8kUmVzcG9uc2UocGFyYW1zPzoge1xyXG4gICAgY29udGV4dD86IEh0dHBDb250ZXh0XHJcbiAgICBib2R5Pzoge1xyXG4ncmVxdWVzdCc6IHN0cmluZztcclxuJ2ZpbGUnPzogQmxvYjtcclxufVxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxTdHJpY3RIdHRwUmVzcG9uc2U8e1xyXG59Pj4ge1xyXG5cclxuICAgIGNvbnN0IHJiID0gbmV3IFJlcXVlc3RCdWlsZGVyKHRoaXMucm9vdFVybCwgR2VzdGlvbkFyY2hpdm9Db250cm9sbGVyU2VydmljZS5BZ3JlZ2FyQXJjaGl2b1BhdGgsICdwb3N0Jyk7XHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIHJiLmJvZHkocGFyYW1zLmJvZHksICdtdWx0aXBhcnQvZm9ybS1kYXRhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KHJiLmJ1aWxkKHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXHJcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICBjb250ZXh0OiBwYXJhbXM/LmNvbnRleHRcclxuICAgIH0pKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoKHI6IGFueSkgPT4gciBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSksXHJcbiAgICAgIG1hcCgocjogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICByZXR1cm4gciBhcyBTdHJpY3RIdHRwUmVzcG9uc2U8e1xyXG4gICAgICAgIH0+O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFncmVnYXIgYXJjaGl2by5cclxuICAgKlxyXG4gICAqIFBlcm1pdGUgYWdyZWdhciBkaXJlY3RvcmlvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gb25seSB0byB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKiBUbyBhY2Nlc3MgdGhlIGZ1bGwgcmVzcG9uc2UgKGZvciBoZWFkZXJzLCBmb3IgZXhhbXBsZSksIGBhZ3JlZ2FyQXJjaGl2byRSZXNwb25zZSgpYCBpbnN0ZWFkLlxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYG11bHRpcGFydC9mb3JtLWRhdGFgIGFuZCBoYW5kbGVzIHJlcXVlc3QgYm9keSBvZiB0eXBlIGBtdWx0aXBhcnQvZm9ybS1kYXRhYC5cclxuICAgKi9cclxuICBhZ3JlZ2FyQXJjaGl2byhwYXJhbXM/OiB7XHJcbiAgICBjb250ZXh0PzogSHR0cENvbnRleHRcclxuICAgIGJvZHk/OiB7XHJcbidyZXF1ZXN0Jzogc3RyaW5nO1xyXG4nZmlsZSc/OiBCbG9iO1xyXG59XHJcbiAgfVxyXG4pOiBPYnNlcnZhYmxlPHtcclxufT4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmFncmVnYXJBcmNoaXZvJFJlc3BvbnNlKHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChyOiBTdHJpY3RIdHRwUmVzcG9uc2U8e1xyXG59PikgPT4gci5ib2R5IGFzIHtcclxufSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXRoIHBhcnQgZm9yIG9wZXJhdGlvbiBjYXJnYXJBcmNoaXZvVHJhbWFcclxuICAgKi9cclxuICBzdGF0aWMgcmVhZG9ubHkgQ2FyZ2FyQXJjaGl2b1RyYW1hUGF0aCA9ICcvZ2VzdGlvbi1hcmNoaXZvcy9jYXJnYXItYXJjaGl2by10cmFtYSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcmdhciBhcmNoaXZvIHBvciBmdW5jaW9uYWxpZGFkLlxyXG4gICAqXHJcbiAgICogUGVybWl0ZSBDYXJnYXIgYXJjaGl2byBwb3IgZnVuY2lvbmFsaWRhZFxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBmdWxsIGBIdHRwUmVzcG9uc2VgLCBhbGxvd2luZyBhY2Nlc3MgdG8gcmVzcG9uc2UgaGVhZGVycy5cclxuICAgKiBUbyBhY2Nlc3Mgb25seSB0aGUgcmVzcG9uc2UgYm9keSwgdXNlIGBjYXJnYXJBcmNoaXZvVHJhbWEoKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGBtdWx0aXBhcnQvZm9ybS1kYXRhYCBhbmQgaGFuZGxlcyByZXF1ZXN0IGJvZHkgb2YgdHlwZSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAuXHJcbiAgICovXHJcbiAgY2FyZ2FyQXJjaGl2b1RyYW1hJFJlc3BvbnNlKHBhcmFtcz86IHtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gICAgYm9keT86IHtcclxuJ3JlcXVlc3QnOiBzdHJpbmc7XHJcbidmaWxlJz86IEJsb2I7XHJcbn1cclxuICB9XHJcbik6IE9ic2VydmFibGU8U3RyaWN0SHR0cFJlc3BvbnNlPHtcclxufT4+IHtcclxuXHJcbiAgICBjb25zdCByYiA9IG5ldyBSZXF1ZXN0QnVpbGRlcih0aGlzLnJvb3RVcmwsIEdlc3Rpb25BcmNoaXZvQ29udHJvbGxlclNlcnZpY2UuQ2FyZ2FyQXJjaGl2b1RyYW1hUGF0aCwgJ3Bvc3QnKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgcmIuYm9keShwYXJhbXMuYm9keSwgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QocmIuYnVpbGQoe1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcclxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIGNvbnRleHQ6IHBhcmFtcz8uY29udGV4dFxyXG4gICAgfSkpLnBpcGUoXHJcbiAgICAgIGZpbHRlcigocjogYW55KSA9PiByIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSxcclxuICAgICAgbWFwKChyOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgIHJldHVybiByIGFzIFN0cmljdEh0dHBSZXNwb25zZTx7XHJcbiAgICAgICAgfT47XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FyZ2FyIGFyY2hpdm8gcG9yIGZ1bmNpb25hbGlkYWQuXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIENhcmdhciBhcmNoaXZvIHBvciBmdW5jaW9uYWxpZGFkXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gb25seSB0byB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKiBUbyBhY2Nlc3MgdGhlIGZ1bGwgcmVzcG9uc2UgKGZvciBoZWFkZXJzLCBmb3IgZXhhbXBsZSksIGBjYXJnYXJBcmNoaXZvVHJhbWEkUmVzcG9uc2UoKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGBtdWx0aXBhcnQvZm9ybS1kYXRhYCBhbmQgaGFuZGxlcyByZXF1ZXN0IGJvZHkgb2YgdHlwZSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAuXHJcbiAgICovXHJcbiAgY2FyZ2FyQXJjaGl2b1RyYW1hKHBhcmFtcz86IHtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gICAgYm9keT86IHtcclxuJ3JlcXVlc3QnOiBzdHJpbmc7XHJcbidmaWxlJz86IEJsb2I7XHJcbn1cclxuICB9XHJcbik6IE9ic2VydmFibGU8e1xyXG59PiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY2FyZ2FyQXJjaGl2b1RyYW1hJFJlc3BvbnNlKHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChyOiBTdHJpY3RIdHRwUmVzcG9uc2U8e1xyXG59PikgPT4gci5ib2R5IGFzIHtcclxufSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXRoIHBhcnQgZm9yIG9wZXJhdGlvbiBjYXJnYXJBcmNoaXZvc01hc2l2b1xyXG4gICAqL1xyXG4gIHN0YXRpYyByZWFkb25seSBDYXJnYXJBcmNoaXZvc01hc2l2b1BhdGggPSAnL2dlc3Rpb24tYXJjaGl2b3MvY2FyZ2FyLWFyY2hpdm8tdHJhbWEtbWFzaXZvJztcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWl0ZSBsYSBjYXJnYSBkZSBhcmNoaXZvcyBtYXNpdm8uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIGxhIGNhcmdhIGRlIGFyY2hpdm9zIG1hc2l2b1xyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBmdWxsIGBIdHRwUmVzcG9uc2VgLCBhbGxvd2luZyBhY2Nlc3MgdG8gcmVzcG9uc2UgaGVhZGVycy5cclxuICAgKiBUbyBhY2Nlc3Mgb25seSB0aGUgcmVzcG9uc2UgYm9keSwgdXNlIGBjYXJnYXJBcmNoaXZvc01hc2l2bygpYCBpbnN0ZWFkLlxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYG11bHRpcGFydC9mb3JtLWRhdGFgIGFuZCBoYW5kbGVzIHJlcXVlc3QgYm9keSBvZiB0eXBlIGBtdWx0aXBhcnQvZm9ybS1kYXRhYC5cclxuICAgKi9cclxuICBjYXJnYXJBcmNoaXZvc01hc2l2byRSZXNwb25zZShwYXJhbXM/OiB7XHJcbiAgICBjb250ZXh0PzogSHR0cENvbnRleHRcclxuICAgIGJvZHk/OiB7XHJcbidyZXF1ZXN0Jzogc3RyaW5nO1xyXG4nZmlsZXMnOiBBcnJheTxCbG9iPjtcclxufVxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxTdHJpY3RIdHRwUmVzcG9uc2U8dm9pZD4+IHtcclxuXHJcbiAgICBjb25zdCByYiA9IG5ldyBSZXF1ZXN0QnVpbGRlcih0aGlzLnJvb3RVcmwsIEdlc3Rpb25BcmNoaXZvQ29udHJvbGxlclNlcnZpY2UuQ2FyZ2FyQXJjaGl2b3NNYXNpdm9QYXRoLCAncG9zdCcpO1xyXG4gICAgaWYgKHBhcmFtcykge1xyXG4gICAgICByYi5ib2R5KHBhcmFtcy5ib2R5LCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChyYi5idWlsZCh7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICBhY2NlcHQ6ICcqLyonLFxyXG4gICAgICBjb250ZXh0OiBwYXJhbXM/LmNvbnRleHRcclxuICAgIH0pKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoKHI6IGFueSkgPT4gciBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSksXHJcbiAgICAgIG1hcCgocjogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICByZXR1cm4gKHIgYXMgSHR0cFJlc3BvbnNlPGFueT4pLmNsb25lKHsgYm9keTogdW5kZWZpbmVkIH0pIGFzIFN0cmljdEh0dHBSZXNwb25zZTx2b2lkPjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJtaXRlIGxhIGNhcmdhIGRlIGFyY2hpdm9zIG1hc2l2by5cclxuICAgKlxyXG4gICAqIFBlcm1pdGUgbGEgY2FyZ2EgZGUgYXJjaGl2b3MgbWFzaXZvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gb25seSB0byB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKiBUbyBhY2Nlc3MgdGhlIGZ1bGwgcmVzcG9uc2UgKGZvciBoZWFkZXJzLCBmb3IgZXhhbXBsZSksIGBjYXJnYXJBcmNoaXZvc01hc2l2byRSZXNwb25zZSgpYCBpbnN0ZWFkLlxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYG11bHRpcGFydC9mb3JtLWRhdGFgIGFuZCBoYW5kbGVzIHJlcXVlc3QgYm9keSBvZiB0eXBlIGBtdWx0aXBhcnQvZm9ybS1kYXRhYC5cclxuICAgKi9cclxuICBjYXJnYXJBcmNoaXZvc01hc2l2byhwYXJhbXM/OiB7XHJcbiAgICBjb250ZXh0PzogSHR0cENvbnRleHRcclxuICAgIGJvZHk/OiB7XHJcbidyZXF1ZXN0Jzogc3RyaW5nO1xyXG4nZmlsZXMnOiBBcnJheTxCbG9iPjtcclxufVxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY2FyZ2FyQXJjaGl2b3NNYXNpdm8kUmVzcG9uc2UocGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoKHI6IFN0cmljdEh0dHBSZXNwb25zZTx2b2lkPikgPT4gci5ib2R5IGFzIHZvaWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF0aCBwYXJ0IGZvciBvcGVyYXRpb24gb2J0ZW5lckRldGFsbGVBcmNoaXZvXHJcbiAgICovXHJcbiAgc3RhdGljIHJlYWRvbmx5IE9idGVuZXJEZXRhbGxlQXJjaGl2b1BhdGggPSAnL2dlc3Rpb24tYXJjaGl2b3Mvb2J0ZW5lcic7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldG9ybmEgZWwgZGV0YWxsZSBkZWwgYXJjaGl2by5cclxuICAgKlxyXG4gICAqIFBlcm1pdGUgb2J0ZW5lciBlbCBkZXRhbGxlIGRlIHVuIGFyY2hpdm9cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZnVsbCBgSHR0cFJlc3BvbnNlYCwgYWxsb3dpbmcgYWNjZXNzIHRvIHJlc3BvbnNlIGhlYWRlcnMuXHJcbiAgICogVG8gYWNjZXNzIG9ubHkgdGhlIHJlc3BvbnNlIGJvZHksIHVzZSBgb2J0ZW5lckRldGFsbGVBcmNoaXZvKClgIGluc3RlYWQuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IGV4cGVjdCBhbnkgcmVxdWVzdCBib2R5LlxyXG4gICAqL1xyXG4gIG9idGVuZXJEZXRhbGxlQXJjaGl2byRSZXNwb25zZShwYXJhbXM6IHtcclxuICAgIGlkX2FyY2hpdm86IG51bWJlcjtcclxuICAgIGFuaW86IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxTdHJpY3RIdHRwUmVzcG9uc2U8R2VzdGlvbkFyY2hpdm9SZXNwb25zZT4+IHtcclxuXHJcbiAgICBjb25zdCByYiA9IG5ldyBSZXF1ZXN0QnVpbGRlcih0aGlzLnJvb3RVcmwsIEdlc3Rpb25BcmNoaXZvQ29udHJvbGxlclNlcnZpY2UuT2J0ZW5lckRldGFsbGVBcmNoaXZvUGF0aCwgJ2dldCcpO1xyXG4gICAgaWYgKHBhcmFtcykge1xyXG4gICAgICByYi5xdWVyeSgnaWRfYXJjaGl2bycsIHBhcmFtcy5pZF9hcmNoaXZvLCB7fSk7XHJcbiAgICAgIHJiLnF1ZXJ5KCdhbmlvJywgcGFyYW1zLmFuaW8sIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QocmIuYnVpbGQoe1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcclxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIGNvbnRleHQ6IHBhcmFtcz8uY29udGV4dFxyXG4gICAgfSkpLnBpcGUoXHJcbiAgICAgIGZpbHRlcigocjogYW55KSA9PiByIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSxcclxuICAgICAgbWFwKChyOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgIHJldHVybiByIGFzIFN0cmljdEh0dHBSZXNwb25zZTxHZXN0aW9uQXJjaGl2b1Jlc3BvbnNlPjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRvcm5hIGVsIGRldGFsbGUgZGVsIGFyY2hpdm8uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIG9idGVuZXIgZWwgZGV0YWxsZSBkZSB1biBhcmNoaXZvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gb25seSB0byB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKiBUbyBhY2Nlc3MgdGhlIGZ1bGwgcmVzcG9uc2UgKGZvciBoZWFkZXJzLCBmb3IgZXhhbXBsZSksIGBvYnRlbmVyRGV0YWxsZUFyY2hpdm8kUmVzcG9uc2UoKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGRvZXNuJ3QgZXhwZWN0IGFueSByZXF1ZXN0IGJvZHkuXHJcbiAgICovXHJcbiAgb2J0ZW5lckRldGFsbGVBcmNoaXZvKHBhcmFtczoge1xyXG4gICAgaWRfYXJjaGl2bzogbnVtYmVyO1xyXG4gICAgYW5pbzogbnVtYmVyO1xyXG4gICAgY29udGV4dD86IEh0dHBDb250ZXh0XHJcbiAgfVxyXG4pOiBPYnNlcnZhYmxlPEdlc3Rpb25BcmNoaXZvUmVzcG9uc2U+IHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5vYnRlbmVyRGV0YWxsZUFyY2hpdm8kUmVzcG9uc2UocGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoKHI6IFN0cmljdEh0dHBSZXNwb25zZTxHZXN0aW9uQXJjaGl2b1Jlc3BvbnNlPikgPT4gci5ib2R5IGFzIEdlc3Rpb25BcmNoaXZvUmVzcG9uc2UpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF0aCBwYXJ0IGZvciBvcGVyYXRpb24gb2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9cclxuICAgKi9cclxuICBzdGF0aWMgcmVhZG9ubHkgT2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9QYXRoID0gJy9nZXN0aW9uLWFyY2hpdm9zL29idGVuZXItY29udGVuaWRvJztcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0b3JuYSBlbCBjb250ZW5pZG8gZGVsIGFyY2hpdm8uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIGRlc2NhcmdhciBlbCBhcmNoaXZvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZ1bGwgYEh0dHBSZXNwb25zZWAsIGFsbG93aW5nIGFjY2VzcyB0byByZXNwb25zZSBoZWFkZXJzLlxyXG4gICAqIFRvIGFjY2VzcyBvbmx5IHRoZSByZXNwb25zZSBib2R5LCB1c2UgYG9idGVuZXJDb250ZW5pZG9BcmNoaXZvKClgIGluc3RlYWQuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IGV4cGVjdCBhbnkgcmVxdWVzdCBib2R5LlxyXG4gICAqL1xyXG4gIG9idGVuZXJDb250ZW5pZG9BcmNoaXZvJFJlc3BvbnNlKHBhcmFtczoge1xyXG4gICAgaWRfbGFzZXJmaWNoZTogbnVtYmVyO1xyXG4gICAgY29udGV4dD86IEh0dHBDb250ZXh0XHJcbiAgfVxyXG4pOiBPYnNlcnZhYmxlPFN0cmljdEh0dHBSZXNwb25zZTxCbG9iPj4ge1xyXG5cclxuICAgIGNvbnN0IHJiID0gbmV3IFJlcXVlc3RCdWlsZGVyKHRoaXMucm9vdFVybCwgR2VzdGlvbkFyY2hpdm9Db250cm9sbGVyU2VydmljZS5PYnRlbmVyQ29udGVuaWRvQXJjaGl2b1BhdGgsICdnZXQnKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgcmIucXVlcnkoJ2lkX2xhc2VyZmljaGUnLCBwYXJhbXMuaWRfbGFzZXJmaWNoZSwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChyYi5idWlsZCh7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxyXG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxyXG4gICAgICBjb250ZXh0OiBwYXJhbXM/LmNvbnRleHRcclxuICAgIH0pKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoKHI6IGFueSkgPT4gciBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSksXHJcbiAgICAgIG1hcCgocjogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICByZXR1cm4gciBhcyBTdHJpY3RIdHRwUmVzcG9uc2U8QmxvYj47XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0b3JuYSBlbCBjb250ZW5pZG8gZGVsIGFyY2hpdm8uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIGRlc2NhcmdhciBlbCBhcmNoaXZvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gb25seSB0byB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKiBUbyBhY2Nlc3MgdGhlIGZ1bGwgcmVzcG9uc2UgKGZvciBoZWFkZXJzLCBmb3IgZXhhbXBsZSksIGBvYnRlbmVyQ29udGVuaWRvQXJjaGl2byRSZXNwb25zZSgpYCBpbnN0ZWFkLlxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgZG9lc24ndCBleHBlY3QgYW55IHJlcXVlc3QgYm9keS5cclxuICAgKi9cclxuICBvYnRlbmVyQ29udGVuaWRvQXJjaGl2byhwYXJhbXM6IHtcclxuICAgIGlkX2xhc2VyZmljaGU6IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxCbG9iPiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub2J0ZW5lckNvbnRlbmlkb0FyY2hpdm8kUmVzcG9uc2UocGFyYW1zKS5waXBlKFxyXG4gICAgICBtYXAoKHI6IFN0cmljdEh0dHBSZXNwb25zZTxCbG9iPikgPT4gci5ib2R5IGFzIEJsb2IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF0aCBwYXJ0IGZvciBvcGVyYXRpb24gb2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9Qb3JJZFxyXG4gICAqL1xyXG4gIHN0YXRpYyByZWFkb25seSBPYnRlbmVyQ29udGVuaWRvQXJjaGl2b1BvcklkUGF0aCA9ICcvZ2VzdGlvbi1hcmNoaXZvcy9vYnRlbmVyLWNvbnRlbmlkby1hcmNoaXZvJztcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0b3JuYSBlbCBjb250ZW5pZG8gZGVsIGFyY2hpdm8uXHJcbiAgICpcclxuICAgKiBQZXJtaXRlIGRlc2NhcmdhciBlbCBhcmNoaXZvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZ1bGwgYEh0dHBSZXNwb25zZWAsIGFsbG93aW5nIGFjY2VzcyB0byByZXNwb25zZSBoZWFkZXJzLlxyXG4gICAqIFRvIGFjY2VzcyBvbmx5IHRoZSByZXNwb25zZSBib2R5LCB1c2UgYG9idGVuZXJDb250ZW5pZG9BcmNoaXZvUG9ySWQoKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGRvZXNuJ3QgZXhwZWN0IGFueSByZXF1ZXN0IGJvZHkuXHJcbiAgICovXHJcbiAgb2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9Qb3JJZCRSZXNwb25zZShwYXJhbXM6IHtcclxuICAgIGlkX2FyY2hpdm86IG51bWJlcjtcclxuICAgIGFuaW86IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxTdHJpY3RIdHRwUmVzcG9uc2U8QmxvYj4+IHtcclxuXHJcbiAgICBjb25zdCByYiA9IG5ldyBSZXF1ZXN0QnVpbGRlcih0aGlzLnJvb3RVcmwsIEdlc3Rpb25BcmNoaXZvQ29udHJvbGxlclNlcnZpY2UuT2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9Qb3JJZFBhdGgsICdnZXQnKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgcmIucXVlcnkoJ2lkX2FyY2hpdm8nLCBwYXJhbXMuaWRfYXJjaGl2bywge30pO1xyXG4gICAgICByYi5xdWVyeSgnYW5pbycsIHBhcmFtcy5hbmlvLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KHJiLmJ1aWxkKHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXHJcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgIGNvbnRleHQ6IHBhcmFtcz8uY29udGV4dFxyXG4gICAgfSkpLnBpcGUoXHJcbiAgICAgIGZpbHRlcigocjogYW55KSA9PiByIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSxcclxuICAgICAgbWFwKChyOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgIHJldHVybiByIGFzIFN0cmljdEh0dHBSZXNwb25zZTxCbG9iPjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRvcm5hIGVsIGNvbnRlbmlkbyBkZWwgYXJjaGl2by5cclxuICAgKlxyXG4gICAqIFBlcm1pdGUgZGVzY2FyZ2FyIGVsIGFyY2hpdm9cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byBvbmx5IHRvIHRoZSByZXNwb25zZSBib2R5LlxyXG4gICAqIFRvIGFjY2VzcyB0aGUgZnVsbCByZXNwb25zZSAoZm9yIGhlYWRlcnMsIGZvciBleGFtcGxlKSwgYG9idGVuZXJDb250ZW5pZG9BcmNoaXZvUG9ySWQkUmVzcG9uc2UoKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGRvZXNuJ3QgZXhwZWN0IGFueSByZXF1ZXN0IGJvZHkuXHJcbiAgICovXHJcbiAgb2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9Qb3JJZChwYXJhbXM6IHtcclxuICAgIGlkX2FyY2hpdm86IG51bWJlcjtcclxuICAgIGFuaW86IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxCbG9iPiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub2J0ZW5lckNvbnRlbmlkb0FyY2hpdm9Qb3JJZCRSZXNwb25zZShwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcCgocjogU3RyaWN0SHR0cFJlc3BvbnNlPEJsb2I+KSA9PiByLmJvZHkgYXMgQmxvYilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXRoIHBhcnQgZm9yIG9wZXJhdGlvbiBsaXN0YXJBcmNoaXZvc1xyXG4gICAqL1xyXG4gIHN0YXRpYyByZWFkb25seSBMaXN0YXJBcmNoaXZvc1BhdGggPSAnL2dlc3Rpb24tYXJjaGl2b3MvbGlzdGFyJztcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWl0ZSBsaXN0YXIgbG9zIGFyY2hpdm9zIGRlIHVuYSBEZWNsYXJhY2lvbiAvIExpcXVpZGFjaW9uLlxyXG4gICAqXHJcbiAgICogUGVybWl0ZSBsaXN0YXIgbG9zIGFyY2hpdm9zIGRlIHVuYSBEZWNsYXJhY2lvbiAvIExpcXVpZGFjaW9uXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZ1bGwgYEh0dHBSZXNwb25zZWAsIGFsbG93aW5nIGFjY2VzcyB0byByZXNwb25zZSBoZWFkZXJzLlxyXG4gICAqIFRvIGFjY2VzcyBvbmx5IHRoZSByZXNwb25zZSBib2R5LCB1c2UgYGxpc3RhckFyY2hpdm9zKClgIGluc3RlYWQuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IGV4cGVjdCBhbnkgcmVxdWVzdCBib2R5LlxyXG4gICAqL1xyXG4gIGxpc3RhckFyY2hpdm9zJFJlc3BvbnNlKHBhcmFtczoge1xyXG4gICAgbnVtZXJvX2RlY19saXE6IG51bWJlcjtcclxuICAgIG1lZGlvX2RpZ2l0YWxfaWQ6IG51bWJlcjtcclxuICAgIHByb2Nlc29Nb2R1bG9JZDogbnVtYmVyO1xyXG4gICAgYW5pbzogbnVtYmVyO1xyXG4gICAgY2FtcG8yOiBzdHJpbmc7XHJcbiAgICBjYW1wbzM6IHN0cmluZztcclxuICAgIHBhZ2U/OiBudW1iZXI7XHJcbiAgICBwYWdlX3NpemU/OiBudW1iZXI7XHJcbiAgICBjb250ZXh0PzogSHR0cENvbnRleHRcclxuICB9XHJcbik6IE9ic2VydmFibGU8U3RyaWN0SHR0cFJlc3BvbnNlPEN1c3RvbVBhZ2VEYXRvc0FyY2hpdm9Qcm9qZWN0aW9uPj4ge1xyXG5cclxuICAgIGNvbnN0IHJiID0gbmV3IFJlcXVlc3RCdWlsZGVyKHRoaXMucm9vdFVybCwgR2VzdGlvbkFyY2hpdm9Db250cm9sbGVyU2VydmljZS5MaXN0YXJBcmNoaXZvc1BhdGgsICdnZXQnKTtcclxuICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgcmIucXVlcnkoJ251bWVyb19kZWNfbGlxJywgcGFyYW1zLm51bWVyb19kZWNfbGlxLCB7fSk7XHJcbiAgICAgIHJiLnF1ZXJ5KCdtZWRpb19kaWdpdGFsX2lkJywgcGFyYW1zLm1lZGlvX2RpZ2l0YWxfaWQsIHt9KTtcclxuICAgICAgcmIucXVlcnkoJ3Byb2Nlc29Nb2R1bG9JZCcsIHBhcmFtcy5wcm9jZXNvTW9kdWxvSWQsIHt9KTtcclxuICAgICAgcmIucXVlcnkoJ2FuaW8nLCBwYXJhbXMuYW5pbywge30pO1xyXG4gICAgICByYi5xdWVyeSgnY2FtcG8yJywgcGFyYW1zLmNhbXBvMiwge30pO1xyXG4gICAgICByYi5xdWVyeSgnY2FtcG8zJywgcGFyYW1zLmNhbXBvMywge30pO1xyXG4gICAgICByYi5xdWVyeSgncGFnZScsIHBhcmFtcy5wYWdlLCB7fSk7XHJcbiAgICAgIHJiLnF1ZXJ5KCdwYWdlX3NpemUnLCBwYXJhbXMucGFnZV9zaXplLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KHJiLmJ1aWxkKHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXHJcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICBjb250ZXh0OiBwYXJhbXM/LmNvbnRleHRcclxuICAgIH0pKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoKHI6IGFueSkgPT4gciBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSksXHJcbiAgICAgIG1hcCgocjogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICByZXR1cm4gciBhcyBTdHJpY3RIdHRwUmVzcG9uc2U8Q3VzdG9tUGFnZURhdG9zQXJjaGl2b1Byb2plY3Rpb24+O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcm1pdGUgbGlzdGFyIGxvcyBhcmNoaXZvcyBkZSB1bmEgRGVjbGFyYWNpb24gLyBMaXF1aWRhY2lvbi5cclxuICAgKlxyXG4gICAqIFBlcm1pdGUgbGlzdGFyIGxvcyBhcmNoaXZvcyBkZSB1bmEgRGVjbGFyYWNpb24gLyBMaXF1aWRhY2lvblxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYWNjZXNzIHRvIG9ubHkgdG8gdGhlIHJlc3BvbnNlIGJvZHkuXHJcbiAgICogVG8gYWNjZXNzIHRoZSBmdWxsIHJlc3BvbnNlIChmb3IgaGVhZGVycywgZm9yIGV4YW1wbGUpLCBgbGlzdGFyQXJjaGl2b3MkUmVzcG9uc2UoKWAgaW5zdGVhZC5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGRvZXNuJ3QgZXhwZWN0IGFueSByZXF1ZXN0IGJvZHkuXHJcbiAgICovXHJcbiAgbGlzdGFyQXJjaGl2b3MocGFyYW1zOiB7XHJcbiAgICBudW1lcm9fZGVjX2xpcTogbnVtYmVyO1xyXG4gICAgbWVkaW9fZGlnaXRhbF9pZDogbnVtYmVyO1xyXG4gICAgcHJvY2Vzb01vZHVsb0lkOiBudW1iZXI7XHJcbiAgICBhbmlvOiBudW1iZXI7XHJcbiAgICBjYW1wbzI6IHN0cmluZztcclxuICAgIGNhbXBvMzogc3RyaW5nO1xyXG4gICAgcGFnZT86IG51bWJlcjtcclxuICAgIHBhZ2Vfc2l6ZT86IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxDdXN0b21QYWdlRGF0b3NBcmNoaXZvUHJvamVjdGlvbj4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxpc3RhckFyY2hpdm9zJFJlc3BvbnNlKHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChyOiBTdHJpY3RIdHRwUmVzcG9uc2U8Q3VzdG9tUGFnZURhdG9zQXJjaGl2b1Byb2plY3Rpb24+KSA9PiByLmJvZHkgYXMgQ3VzdG9tUGFnZURhdG9zQXJjaGl2b1Byb2plY3Rpb24pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF0aCBwYXJ0IGZvciBvcGVyYXRpb24gYW51bGFyQXJjaGl2b1xyXG4gICAqL1xyXG4gIHN0YXRpYyByZWFkb25seSBBbnVsYXJBcmNoaXZvUGF0aCA9ICcvZ2VzdGlvbi1hcmNoaXZvcy9hbnVsYXIve2FyY2hpdm9JZH0ve2FuaW99JztcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWl0ZSBhbnVsYSB1biBhcmNoaXZvLlxyXG4gICAqXHJcbiAgICogQW51bGEgdW4gYXJjaGl2b1xyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBmdWxsIGBIdHRwUmVzcG9uc2VgLCBhbGxvd2luZyBhY2Nlc3MgdG8gcmVzcG9uc2UgaGVhZGVycy5cclxuICAgKiBUbyBhY2Nlc3Mgb25seSB0aGUgcmVzcG9uc2UgYm9keSwgdXNlIGBhbnVsYXJBcmNoaXZvKClgIGluc3RlYWQuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IGV4cGVjdCBhbnkgcmVxdWVzdCBib2R5LlxyXG4gICAqL1xyXG4gIGFudWxhckFyY2hpdm8kUmVzcG9uc2UocGFyYW1zOiB7XHJcbiAgICBhcmNoaXZvSWQ6IG51bWJlcjtcclxuICAgIGFuaW86IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTxTdHJpY3RIdHRwUmVzcG9uc2U8e1xyXG59Pj4ge1xyXG5cclxuICAgIGNvbnN0IHJiID0gbmV3IFJlcXVlc3RCdWlsZGVyKHRoaXMucm9vdFVybCwgR2VzdGlvbkFyY2hpdm9Db250cm9sbGVyU2VydmljZS5BbnVsYXJBcmNoaXZvUGF0aCwgJ2RlbGV0ZScpO1xyXG4gICAgaWYgKHBhcmFtcykge1xyXG4gICAgICByYi5wYXRoKCdhcmNoaXZvSWQnLCBwYXJhbXMuYXJjaGl2b0lkLCB7fSk7XHJcbiAgICAgIHJiLnBhdGgoJ2FuaW8nLCBwYXJhbXMuYW5pbywge30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChyYi5idWlsZCh7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxyXG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgY29udGV4dDogcGFyYW1zPy5jb250ZXh0XHJcbiAgICB9KSkucGlwZShcclxuICAgICAgZmlsdGVyKChyOiBhbnkpID0+IHIgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpLFxyXG4gICAgICBtYXAoKHI6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHIgYXMgU3RyaWN0SHR0cFJlc3BvbnNlPHtcclxuICAgICAgICB9PjtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJtaXRlIGFudWxhIHVuIGFyY2hpdm8uXHJcbiAgICpcclxuICAgKiBBbnVsYSB1biBhcmNoaXZvXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gb25seSB0byB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgKiBUbyBhY2Nlc3MgdGhlIGZ1bGwgcmVzcG9uc2UgKGZvciBoZWFkZXJzLCBmb3IgZXhhbXBsZSksIGBhbnVsYXJBcmNoaXZvJFJlc3BvbnNlKClgIGluc3RlYWQuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IGV4cGVjdCBhbnkgcmVxdWVzdCBib2R5LlxyXG4gICAqL1xyXG4gIGFudWxhckFyY2hpdm8ocGFyYW1zOiB7XHJcbiAgICBhcmNoaXZvSWQ6IG51bWJlcjtcclxuICAgIGFuaW86IG51bWJlcjtcclxuICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dFxyXG4gIH1cclxuKTogT2JzZXJ2YWJsZTx7XHJcbn0+IHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5hbnVsYXJBcmNoaXZvJFJlc3BvbnNlKHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChyOiBTdHJpY3RIdHRwUmVzcG9uc2U8e1xyXG59PikgPT4gci5ib2R5IGFzIHtcclxufSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=