oxpi-nglib 1.0.5 → 1.0.8

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.
@@ -21,7 +21,8 @@ import * as i9 from "@angular/material/button";
21
21
  import * as i10 from "@angular/material/select";
22
22
  import * as i11 from "@angular/material/core";
23
23
  import * as i12 from "@angular/material/autocomplete";
24
- import * as i13 from "../../../controls/radio-button-group/radio-button-group.component";
24
+ import * as i13 from "@angular/material/slide-toggle";
25
+ import * as i14 from "../../../controls/radio-button-group/radio-button-group.component";
25
26
  export const lateralAnimation = trigger('menuLateral', [
26
27
  transition(':enter', [
27
28
  style({ opacity: 0 }),
@@ -329,7 +330,7 @@ export class ProdutoFormComponent {
329
330
  }
330
331
  }
331
332
  ProdutoFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoFormComponent, deps: [{ token: i1.MatDialog }, { token: i2.CommonWebService }, { token: i3.HttpClient }, { token: i4.AuthDataService }, { token: i5.NotificationService }, { token: i6.ScreenHelperService }], target: i0.ɵɵFactoryTarget.Component });
332
- ProdutoFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutoFormComponent, selector: "ox-produto-form", inputs: { editMode: "editMode", model: "model" }, outputs: { nextIdClick: "nextIdClick" }, ngImport: i0, template: "<div style=\"margin-bottom: 16px\">\n <ox-radio-button-group (change)=\"changeModo($event)\" [items]=\"tabs\" class=\"tool-item-container\">\n </ox-radio-button-group>\n</div>\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 0\">\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>C\u00F3digo</label>\n <div class=\"hbox\">\n <input id=\"id\" [attr.readonly]=\"editMode\" [(ngModel)]=\"model.id\" class=\"form-control input-120\"\n tabindex=\"2\">\n <button (click)=\"nextIdClick.emit()\" *ngIf=\"!editMode\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n lightbulb\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Refer\u00EAncia</label>\n <input id=\"referencia\" [(ngModel)]=\"model.referencia\" class=\"form-control input-120\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Nome</label>\n <input id=\"nome\" [(ngModel)]=\"model.nome\" cdkFocusInitial class=\"form-control input-300\" tabindex=\"2\">\n </div>\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>Pre\u00E7o de Venda</label>\n <input id=\"precoVenda\" [ngModel]=\"model.precoVenda | number:'1.2-2'\"\n (ngModelChange)=\"precoVendaParser.parse($event)\" (focusout)=\"precoVendaParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o p/ Func.</label>\n <input id=\"precoFuncionario\" [ngModel]=\"model.precoFuncionario | number:'1.2-2'\"\n (ngModelChange)=\"precoFuncParser.parse($event)\" (focusout)=\"precoFuncParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o de Custo</label>\n <input id=\"precoCusto\" [ngModel]=\"model.precoCusto | number:'1.2-2'\"\n (ngModelChange)=\"precoCustoParser.parse($event)\" (focusout)=\"precoCustoParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo</label>\n <div class=\"hbox\">\n <div id=\"grupo\" (click)=\"editarGrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.grupoNome}} </div>\n <button (click)=\"editarGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Subgrupo</label>\n <div class=\"hbox\">\n <div id=\"subgrupo\" (click)=\"editarSubgrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.subgrupoNome}} </div>\n <button (click)=\"editarSubgrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Unidade</label>\n <input id=\"unidade\" [(ngModel)]=\"model.unidade\" class=\"form-control input-120\">\n </div>\n <div class=\"form-group\">\n <label>Estoque Min.</label>\n <input id=\"estoqueMinimo\" [(ngModel)]=\"model.estoqueMinimo\" class=\"form-control input-120\">\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>C\u00F3digo Patrim\u00F4nio</label>\n <input id=\"codigoPatrimonio\" [(ngModel)]=\"model.codigoPatrimonio\" class=\"form-control input-120\"\n maxlength=\"36\">\n </div>\n <div class=\"form-group\">\n <label>Obs.</label>\n <input id=\"obs\" [(ngModel)]=\"model.obs\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n </div>\n \n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Setor Subestoque</label>\n <mat-select [(value)]=\"model.setorSubEstoqueId\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of setores\" [value]=\"i.id\">\n {{i.nome}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Qtd. Subestoque</label>\n <input id=\"qtdMinSubEstoque\" [(ngModel)]=\"model.qtdMinSubEstoque\" class=\"form-control input-120 text-right\">\n </div>\n </div>\n <div class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.estoqueControlado\" tabindex=-1>Controlado no Estoque</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimiCozinha\" tabindex=-1>Imprime Cozinha</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimeCorredor\" tabindex=-1>Imprime Corredor</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.verNaRecepcao\" tabindex=-1>Ver na Recep\u00E7\u00E3o</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.omiteCliente\" tabindex=-1>N\u00E3o Exibe para o Cliente na Sa\u00EDda\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.isAtivo\" tabindex=-1>Ativado</mat-slide-toggle>\n </div>\n\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 1\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.emiteNFCe\" tabindex=-1>Emite Fiscal\n </mat-slide-toggle>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>GTIN</label>\n <input id=\"gtin\" [(ngModel)]=\"model.gtin\" class=\"form-control input-120\" placeholder=\"SEM GTIN\"\n maxlength=\"14\">\n </div>\n <div class=\"form-group\">\n <label>CFOP</label>\n <input id=\"cfop\" [(ngModel)]=\"model.cfop\" [matAutocomplete]=\"auto\" matInput class=\"form-control input-100\"\n maxlength=\"4\">\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of cfopList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n <div class=\"form-group\">\n <label>NCM</label>\n <div class=\"hbox\">\n <input id=\"ncm\" (input)=\"lazyTriggerNcm.fire()\" [(ngModel)]=\"model.ncm\" class=\"form-control input-100\"\n maxlength=\"8\">\n <button (click)=\"editarNCM()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n <span class=\"badge buscando\" *ngIf=\"isBusy\">Buscando...</span>\n <span class=\"badge encontrado\" *ngIf=\"ncmEncontrado\">Encontrado</span>\n <span class=\"badge nao-encontrado\" *ngIf=\"ncmNaoEncontrado\">N\u00E3o encontrado</span>\n </div>\n </div>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CEST</label>\n <input id=\"cest\" [(ngModel)]=\"model.cest\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"7\">\n </div>\n <div class=\"form-group\">\n <label>ICMS (ECF/SAT)</label>\n <input id=\"aliquotaICMS\" [(ngModel)]=\"model.aliquotaICMS\" autocomplete=\"off\" class=\"form-control input-100 text-right\"\n maxlength=\"5\">\n </div>\n <div class=\"form-group\">\n <label>S. T. (ECF/SAT)</label>\n <input id=\"sitTrib\" [(ngModel)]=\"model.sitTrib\" autocomplete=\"off\" [matAutocomplete]=\"autoST\" matInput\n class=\"form-control input-120\" maxlength=\"5\">\n <mat-autocomplete #autoST=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of stList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n <h4>Campos da NFC-e</h4>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/CSOSN</label>\n <mat-select [(value)]=\"model.csT_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of cstICMSList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. ICMS (%)</label>\n <input id=\"pICMS_icms\" [ngModel]=\"model.pICMS_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pICMS_icmsParser.parse($event)\" (focusout)=\"pICMS_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>Modalidade BC</label>\n <mat-select [(value)]=\"model.modBC_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of modBaseICMS\" [value]=\"i.item1\">\n {{i.item1}} <small>{{i.item2}}</small>\n </mat-option>\n </mat-select>\n </div>\n </div>\n <h6>ICMS Efetivo CST60/CSOSN500</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pRedBCEfet (%)</label>\n <input id=\"pRedBCEfet_icms\" [ngModel]=\"model.pRedBCEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBCEfet_icmsParser.parse($event)\" (focusout)=\"pRedBCEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pICMSEfet (%)</label>\n <input id=\"picmsEfet_icms\" [ngModel]=\"model.picmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"picmsEfet_icmsParser.parse($event)\" (focusout)=\"picmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCEfet (R$)</label>\n <input id=\"vbcEfet_icms\" [ngModel]=\"model.vbcEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcEfet_icmsParser.parse($event)\" (focusout)=\"vbcEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSEfet (R$)</label>\n <input id=\"vicmsEfet_icms\" [ngModel]=\"model.vicmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsEfet_icmsParser.parse($event)\" (focusout)=\"vicmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Substitui\u00E7\u00E3o Tribut\u00E1ria (ST)</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pST (%)</label>\n <input id=\"psT_icms\" [ngModel]=\"model.psT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"psT_icmsParser.parse($event)\" (focusout)=\"psT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCSTRet (R$)</label>\n <input id=\"vbcstRet_icms\" [ngModel]=\"model.vbcstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcstRet_icmsParser.parse($event)\" (focusout)=\"vbcstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSubs (R$)</label>\n <input id=\"vicmsSubstituto_icms\" [ngModel]=\"model.vicmsSubstituto_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsSubstituto_icmsParser.parse($event)\"\n (focusout)=\"vicmsSubstituto_icmsParser.checkout()\" class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSTRet (R$)</label>\n <input id=\"vicmsstRet_icms\" [ngModel]=\"model.vicmsstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsstRet_icmsParser.parse($event)\" (focusout)=\"vicmsstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Fundo de Combate a Pobresa</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pFCP (%)</label>\n <input id=\"pfcP_icms\" [ngModel]=\"model.pfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcP_icmsParser.parse($event)\" (focusout)=\"pfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCP (R$)</label>\n <input id=\"vbcfcP_icms\" [ngModel]=\"model.vbcfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcP_icmsParser.parse($event)\" (focusout)=\"vbcfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPST (%)</label>\n <input id=\"pfcpsT_icms\" [ngModel]=\"model.pfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpsT_icmsParser.parse($event)\" (focusout)=\"pfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPST (R$)</label>\n <input id=\"vbcfcpsT_icms\" [ngModel]=\"model.vbcfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpsT_icmsParser.parse($event)\" (focusout)=\"vbcfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPSTRet (%)</label>\n <input id=\"pfcpstRet_icms\" [ngModel]=\"model.pfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpstRet_icmsParser.parse($event)\" (focusout)=\"pfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPSTRet (R$)</label>\n <input id=\"vbcfcpstRet_icms\" [ngModel]=\"model.vbcfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpstRet_icmsParser.parse($event)\" (focusout)=\"vbcfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>PIS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/PIS</label>\n <mat-select [(value)]=\"model.csT_pis\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliquota PIS (%)</label>\n <input id=\"ppiS_pis\" [ngModel]=\"model.ppiS_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"ppiS_pisParser.parse($event)\" (focusout)=\"ppiS_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>PIS BC %</label>\n <input id=\"vbC_pis\" [ngModel]=\"model.vbC_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_pisParser.parse($event)\" (focusout)=\"vbC_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n \n <h6>COFINS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/COFINS</label>\n <mat-select [(value)]=\"model.csT_cofins\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. COFINS (%)</label>\n <input id=\"pcofinS_cofins\" [ngModel]=\"model.pcofinS_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pcofinS_cofinsParser.parse($event)\" (focusout)=\"pcofinS_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>COFINS BC %</label>\n <input id=\"vbC_cofins\" [ngModel]=\"model.vbC_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_cofinsParser.parse($event)\" (focusout)=\"vbC_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 2\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.disponivelCardapio\" tabindex=-1>Dispon\u00EDvel no Card\u00E1pio Digital\n </mat-slide-toggle>\n </div>\n <div class=\"form-group\">\n <label>Descri\u00E7\u00E3o</label>\n <textarea id=\"descricao\" [(ngModel)]=\"model.descricao\" cols=\"40\" rows=\"5\" class=\"form-control input-300\"\n tabindex=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Categoria</label>\n <div class=\"hbox\">\n <div id=\"categoriaCardapio\" (click)=\"editarCategoriaCardapio()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.categoriaCardapioNome}} </div>\n <button (click)=\"editarCategoriaCardapio()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"imagem-container\" *ngIf=\"editMode\">\n <img [src]=\"imgUrl\" class=\"img-fluid\" *ngIf=\"imgUrl\" />\n\n <input type=\"file\" #file placeholder=\"Choose file\" (change)=\"uploadFile(file.files)\" accept=\".jpg,.png\"\n style=\"display: none;\">\n\n <button mat-button color=\"primary\" type=\"button\" (click)=\"file.click()\">Escolher Imagem</button>\n\n <span class=\"upload\" *ngIf=\"progress > 0\">\n {{progress}}%\n </span>\n <span class=\"upload\" *ngIf=\"message\">\n {{message}}\n </span>\n </div>\n\n</div>", styles: [".imagem-container{border:1px solid #ced4da;display:flex;flex-direction:column;border-radius:9px;max-width:460px}small{font-size:xx-small}.badge{color:#fff;font-size:xx-small;display:flex;align-items:center;padding:4px;border-radius:13px;margin-left:2px}.badge.encontrado{background:#05a301;border:1px solid #28d112}.badge.nao-encontrado{background:#a30101;border:1px solid #d17812}.badge.buscando{background:#929292;border:1px solid #a3a3a3}h6{margin:8px 0;color:#666}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i13.RadioButtonGroupComponent, selector: "ox-radio-button-group", inputs: ["selectedItem", "items"], outputs: ["change"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }], animations: [lateralAnimation] });
333
+ ProdutoFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: ProdutoFormComponent, selector: "ox-produto-form", inputs: { editMode: "editMode", model: "model" }, outputs: { nextIdClick: "nextIdClick" }, ngImport: i0, template: "<div style=\"margin-bottom: 16px\">\n <ox-radio-button-group (change)=\"changeModo($event)\" [items]=\"tabs\" class=\"tool-item-container\">\n </ox-radio-button-group>\n</div>\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 0\">\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>C\u00F3digo</label>\n <div class=\"hbox\">\n <input id=\"id\" [attr.readonly]=\"editMode\" [(ngModel)]=\"model.id\" class=\"form-control input-120\"\n tabindex=\"2\">\n <button (click)=\"nextIdClick.emit()\" *ngIf=\"!editMode\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n lightbulb\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Refer\u00EAncia</label>\n <input id=\"referencia\" [(ngModel)]=\"model.referencia\" class=\"form-control input-120\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Nome</label>\n <input id=\"nome\" [(ngModel)]=\"model.nome\" cdkFocusInitial class=\"form-control input-300\" tabindex=\"2\">\n </div>\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>Pre\u00E7o de Venda</label>\n <input id=\"precoVenda\" [ngModel]=\"model.precoVenda | number:'1.2-2'\"\n (ngModelChange)=\"precoVendaParser.parse($event)\" (focusout)=\"precoVendaParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o p/ Func.</label>\n <input id=\"precoFuncionario\" [ngModel]=\"model.precoFuncionario | number:'1.2-2'\"\n (ngModelChange)=\"precoFuncParser.parse($event)\" (focusout)=\"precoFuncParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o de Custo</label>\n <input id=\"precoCusto\" [ngModel]=\"model.precoCusto | number:'1.2-2'\"\n (ngModelChange)=\"precoCustoParser.parse($event)\" (focusout)=\"precoCustoParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo</label>\n <div class=\"hbox\">\n <div id=\"grupo\" (click)=\"editarGrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.grupoNome}} </div>\n <button (click)=\"editarGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Subgrupo</label>\n <div class=\"hbox\">\n <div id=\"subgrupo\" (click)=\"editarSubgrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.subgrupoNome}} </div>\n <button (click)=\"editarSubgrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Unidade</label>\n <input id=\"unidade\" [(ngModel)]=\"model.unidade\" class=\"form-control input-120\">\n </div>\n <div class=\"form-group\">\n <label>Estoque Min.</label>\n <input id=\"estoqueMinimo\" [(ngModel)]=\"model.estoqueMinimo\" class=\"form-control input-120\">\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>C\u00F3digo Patrim\u00F4nio</label>\n <input id=\"codigoPatrimonio\" [(ngModel)]=\"model.codigoPatrimonio\" class=\"form-control input-120\"\n maxlength=\"36\">\n </div>\n <div class=\"form-group\">\n <label>Obs.</label>\n <input id=\"obs\" [(ngModel)]=\"model.obs\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n </div>\n \n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Setor Subestoque</label>\n <mat-select [(value)]=\"model.setorSubEstoqueId\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of setores\" [value]=\"i.id\">\n {{i.nome}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Qtd. Subestoque</label>\n <input id=\"qtdMinSubEstoque\" [(ngModel)]=\"model.qtdMinSubEstoque\" class=\"form-control input-120 text-right\">\n </div>\n </div>\n <div class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.estoqueControlado\" tabindex=-1>Controlado no Estoque</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimiCozinha\" tabindex=-1>Imprime Cozinha</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimeCorredor\" tabindex=-1>Imprime Corredor</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.verNaRecepcao\" tabindex=-1>Ver na Recep\u00E7\u00E3o</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.omiteCliente\" tabindex=-1>N\u00E3o Exibe para o Cliente na Sa\u00EDda\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.isAtivo\" tabindex=-1>Ativado</mat-slide-toggle>\n </div>\n\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 1\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.emiteNFCe\" tabindex=-1>Emite Fiscal\n </mat-slide-toggle>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>GTIN</label>\n <input id=\"gtin\" [(ngModel)]=\"model.gtin\" class=\"form-control input-120\" placeholder=\"SEM GTIN\"\n maxlength=\"14\">\n </div>\n <div class=\"form-group\">\n <label>CFOP</label>\n <input id=\"cfop\" [(ngModel)]=\"model.cfop\" [matAutocomplete]=\"auto\" matInput class=\"form-control input-100\"\n maxlength=\"4\">\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of cfopList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n <div class=\"form-group\">\n <label>NCM</label>\n <div class=\"hbox\">\n <input id=\"ncm\" (input)=\"lazyTriggerNcm.fire()\" [(ngModel)]=\"model.ncm\" class=\"form-control input-100\"\n maxlength=\"8\">\n <button (click)=\"editarNCM()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n <span class=\"badge buscando\" *ngIf=\"isBusy\">Buscando...</span>\n <span class=\"badge encontrado\" *ngIf=\"ncmEncontrado\">Encontrado</span>\n <span class=\"badge nao-encontrado\" *ngIf=\"ncmNaoEncontrado\">N\u00E3o encontrado</span>\n </div>\n </div>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CEST</label>\n <input id=\"cest\" [(ngModel)]=\"model.cest\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"7\">\n </div>\n <div class=\"form-group\">\n <label>ICMS (ECF/SAT)</label>\n <input id=\"aliquotaICMS\" [(ngModel)]=\"model.aliquotaICMS\" autocomplete=\"off\" class=\"form-control input-100 text-right\"\n maxlength=\"5\">\n </div>\n <div class=\"form-group\">\n <label>S. T. (ECF/SAT)</label>\n <input id=\"sitTrib\" [(ngModel)]=\"model.sitTrib\" autocomplete=\"off\" [matAutocomplete]=\"autoST\" matInput\n class=\"form-control input-120\" maxlength=\"5\">\n <mat-autocomplete #autoST=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of stList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n <h4>Campos da NFC-e</h4>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/CSOSN</label>\n <mat-select [(value)]=\"model.csT_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of cstICMSList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. ICMS (%)</label>\n <input id=\"pICMS_icms\" [ngModel]=\"model.pICMS_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pICMS_icmsParser.parse($event)\" (focusout)=\"pICMS_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>Modalidade BC</label>\n <mat-select [(value)]=\"model.modBC_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of modBaseICMS\" [value]=\"i.item1\">\n {{i.item1}} <small>{{i.item2}}</small>\n </mat-option>\n </mat-select>\n </div>\n </div>\n <h6>ICMS Efetivo CST60/CSOSN500</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pRedBCEfet (%)</label>\n <input id=\"pRedBCEfet_icms\" [ngModel]=\"model.pRedBCEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBCEfet_icmsParser.parse($event)\" (focusout)=\"pRedBCEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pICMSEfet (%)</label>\n <input id=\"picmsEfet_icms\" [ngModel]=\"model.picmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"picmsEfet_icmsParser.parse($event)\" (focusout)=\"picmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCEfet (R$)</label>\n <input id=\"vbcEfet_icms\" [ngModel]=\"model.vbcEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcEfet_icmsParser.parse($event)\" (focusout)=\"vbcEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSEfet (R$)</label>\n <input id=\"vicmsEfet_icms\" [ngModel]=\"model.vicmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsEfet_icmsParser.parse($event)\" (focusout)=\"vicmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Substitui\u00E7\u00E3o Tribut\u00E1ria (ST)</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pST (%)</label>\n <input id=\"psT_icms\" [ngModel]=\"model.psT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"psT_icmsParser.parse($event)\" (focusout)=\"psT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCSTRet (R$)</label>\n <input id=\"vbcstRet_icms\" [ngModel]=\"model.vbcstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcstRet_icmsParser.parse($event)\" (focusout)=\"vbcstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSubs (R$)</label>\n <input id=\"vicmsSubstituto_icms\" [ngModel]=\"model.vicmsSubstituto_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsSubstituto_icmsParser.parse($event)\"\n (focusout)=\"vicmsSubstituto_icmsParser.checkout()\" class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSTRet (R$)</label>\n <input id=\"vicmsstRet_icms\" [ngModel]=\"model.vicmsstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsstRet_icmsParser.parse($event)\" (focusout)=\"vicmsstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Fundo de Combate a Pobresa</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pFCP (%)</label>\n <input id=\"pfcP_icms\" [ngModel]=\"model.pfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcP_icmsParser.parse($event)\" (focusout)=\"pfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCP (R$)</label>\n <input id=\"vbcfcP_icms\" [ngModel]=\"model.vbcfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcP_icmsParser.parse($event)\" (focusout)=\"vbcfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPST (%)</label>\n <input id=\"pfcpsT_icms\" [ngModel]=\"model.pfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpsT_icmsParser.parse($event)\" (focusout)=\"pfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPST (R$)</label>\n <input id=\"vbcfcpsT_icms\" [ngModel]=\"model.vbcfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpsT_icmsParser.parse($event)\" (focusout)=\"vbcfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPSTRet (%)</label>\n <input id=\"pfcpstRet_icms\" [ngModel]=\"model.pfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpstRet_icmsParser.parse($event)\" (focusout)=\"pfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPSTRet (R$)</label>\n <input id=\"vbcfcpstRet_icms\" [ngModel]=\"model.vbcfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpstRet_icmsParser.parse($event)\" (focusout)=\"vbcfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>PIS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/PIS</label>\n <mat-select [(value)]=\"model.csT_pis\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliquota PIS (%)</label>\n <input id=\"ppiS_pis\" [ngModel]=\"model.ppiS_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"ppiS_pisParser.parse($event)\" (focusout)=\"ppiS_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>PIS BC %</label>\n <input id=\"vbC_pis\" [ngModel]=\"model.vbC_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_pisParser.parse($event)\" (focusout)=\"vbC_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n \n <h6>COFINS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/COFINS</label>\n <mat-select [(value)]=\"model.csT_cofins\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. COFINS (%)</label>\n <input id=\"pcofinS_cofins\" [ngModel]=\"model.pcofinS_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pcofinS_cofinsParser.parse($event)\" (focusout)=\"pcofinS_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>COFINS BC %</label>\n <input id=\"vbC_cofins\" [ngModel]=\"model.vbC_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_cofinsParser.parse($event)\" (focusout)=\"vbC_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 2\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.disponivelCardapio\" tabindex=-1>Dispon\u00EDvel no Card\u00E1pio Digital\n </mat-slide-toggle>\n </div>\n <div class=\"form-group\">\n <label>Descri\u00E7\u00E3o</label>\n <textarea id=\"descricao\" [(ngModel)]=\"model.descricao\" cols=\"40\" rows=\"5\" class=\"form-control input-300\"\n tabindex=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Categoria</label>\n <div class=\"hbox\">\n <div id=\"categoriaCardapio\" (click)=\"editarCategoriaCardapio()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.categoriaCardapioNome}} </div>\n <button (click)=\"editarCategoriaCardapio()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"imagem-container\" *ngIf=\"editMode\">\n <img [src]=\"imgUrl\" class=\"img-fluid\" *ngIf=\"imgUrl\" />\n\n <input type=\"file\" #file placeholder=\"Choose file\" (change)=\"uploadFile(file.files)\" accept=\".jpg,.png\"\n style=\"display: none;\">\n\n <button mat-button color=\"primary\" type=\"button\" (click)=\"file.click()\">Escolher Imagem</button>\n\n <span class=\"upload\" *ngIf=\"progress > 0\">\n {{progress}}%\n </span>\n <span class=\"upload\" *ngIf=\"message\">\n {{message}}\n </span>\n </div>\n\n</div>", styles: [".imagem-container{border:1px solid #ced4da;display:flex;flex-direction:column;border-radius:9px;max-width:460px}small{font-size:xx-small}.badge{color:#fff;font-size:xx-small;display:flex;align-items:center;padding:4px;border-radius:13px;margin-left:2px}.badge.encontrado{background:#05a301;border:1px solid #28d112}.badge.nao-encontrado{background:#a30101;border:1px solid #d17812}.badge.buscando{background:#929292;border:1px solid #a3a3a3}h6{margin:8px 0;color:#666}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i14.RadioButtonGroupComponent, selector: "ox-radio-button-group", inputs: ["selectedItem", "items"], outputs: ["change"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }], animations: [lateralAnimation] });
333
334
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ProdutoFormComponent, decorators: [{
334
335
  type: Component,
335
336
  args: [{ selector: 'ox-produto-form', animations: [lateralAnimation], template: "<div style=\"margin-bottom: 16px\">\n <ox-radio-button-group (change)=\"changeModo($event)\" [items]=\"tabs\" class=\"tool-item-container\">\n </ox-radio-button-group>\n</div>\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 0\">\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>C\u00F3digo</label>\n <div class=\"hbox\">\n <input id=\"id\" [attr.readonly]=\"editMode\" [(ngModel)]=\"model.id\" class=\"form-control input-120\"\n tabindex=\"2\">\n <button (click)=\"nextIdClick.emit()\" *ngIf=\"!editMode\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n lightbulb\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Refer\u00EAncia</label>\n <input id=\"referencia\" [(ngModel)]=\"model.referencia\" class=\"form-control input-120\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Nome</label>\n <input id=\"nome\" [(ngModel)]=\"model.nome\" cdkFocusInitial class=\"form-control input-300\" tabindex=\"2\">\n </div>\n <div class=\"hbox\">\n <div class=\"form-group\">\n <label>Pre\u00E7o de Venda</label>\n <input id=\"precoVenda\" [ngModel]=\"model.precoVenda | number:'1.2-2'\"\n (ngModelChange)=\"precoVendaParser.parse($event)\" (focusout)=\"precoVendaParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o p/ Func.</label>\n <input id=\"precoFuncionario\" [ngModel]=\"model.precoFuncionario | number:'1.2-2'\"\n (ngModelChange)=\"precoFuncParser.parse($event)\" (focusout)=\"precoFuncParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n <div class=\"form-group margin-left-8\">\n <label>Pre\u00E7o de Custo</label>\n <input id=\"precoCusto\" [ngModel]=\"model.precoCusto | number:'1.2-2'\"\n (ngModelChange)=\"precoCustoParser.parse($event)\" (focusout)=\"precoCustoParser.checkout()\"\n class=\"form-control input-100 text-right\" tabindex=\"2\">\n </div>\n </div>\n <div class=\"form-group\">\n <label>Grupo</label>\n <div class=\"hbox\">\n <div id=\"grupo\" (click)=\"editarGrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.grupoNome}} </div>\n <button (click)=\"editarGrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <label>Subgrupo</label>\n <div class=\"hbox\">\n <div id=\"subgrupo\" (click)=\"editarSubgrupo()\" class=\"form-control grow-1 input-selecao input-300\">\n {{model.subgrupoNome}} </div>\n <button (click)=\"editarSubgrupo()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Unidade</label>\n <input id=\"unidade\" [(ngModel)]=\"model.unidade\" class=\"form-control input-120\">\n </div>\n <div class=\"form-group\">\n <label>Estoque Min.</label>\n <input id=\"estoqueMinimo\" [(ngModel)]=\"model.estoqueMinimo\" class=\"form-control input-120\">\n </div>\n </div>\n\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>C\u00F3digo Patrim\u00F4nio</label>\n <input id=\"codigoPatrimonio\" [(ngModel)]=\"model.codigoPatrimonio\" class=\"form-control input-120\"\n maxlength=\"36\">\n </div>\n <div class=\"form-group\">\n <label>Obs.</label>\n <input id=\"obs\" [(ngModel)]=\"model.obs\" class=\"form-control input-300\" maxlength=\"300\">\n </div>\n </div>\n \n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>Setor Subestoque</label>\n <mat-select [(value)]=\"model.setorSubEstoqueId\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of setores\" [value]=\"i.id\">\n {{i.nome}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Qtd. Subestoque</label>\n <input id=\"qtdMinSubEstoque\" [(ngModel)]=\"model.qtdMinSubEstoque\" class=\"form-control input-120 text-right\">\n </div>\n </div>\n <div class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.estoqueControlado\" tabindex=-1>Controlado no Estoque</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimiCozinha\" tabindex=-1>Imprime Cozinha</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.imprimeCorredor\" tabindex=-1>Imprime Corredor</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.verNaRecepcao\" tabindex=-1>Ver na Recep\u00E7\u00E3o</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.omiteCliente\" tabindex=-1>N\u00E3o Exibe para o Cliente na Sa\u00EDda\n </mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"model.isAtivo\" tabindex=-1>Ativado</mat-slide-toggle>\n </div>\n\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 1\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.emiteNFCe\" tabindex=-1>Emite Fiscal\n </mat-slide-toggle>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>GTIN</label>\n <input id=\"gtin\" [(ngModel)]=\"model.gtin\" class=\"form-control input-120\" placeholder=\"SEM GTIN\"\n maxlength=\"14\">\n </div>\n <div class=\"form-group\">\n <label>CFOP</label>\n <input id=\"cfop\" [(ngModel)]=\"model.cfop\" [matAutocomplete]=\"auto\" matInput class=\"form-control input-100\"\n maxlength=\"4\">\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of cfopList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n <div class=\"form-group\">\n <label>NCM</label>\n <div class=\"hbox\">\n <input id=\"ncm\" (input)=\"lazyTriggerNcm.fire()\" [(ngModel)]=\"model.ncm\" class=\"form-control input-100\"\n maxlength=\"8\">\n <button (click)=\"editarNCM()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n <span class=\"badge buscando\" *ngIf=\"isBusy\">Buscando...</span>\n <span class=\"badge encontrado\" *ngIf=\"ncmEncontrado\">Encontrado</span>\n <span class=\"badge nao-encontrado\" *ngIf=\"ncmNaoEncontrado\">N\u00E3o encontrado</span>\n </div>\n </div>\n </div>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CEST</label>\n <input id=\"cest\" [(ngModel)]=\"model.cest\" autocomplete=\"off\" class=\"form-control input-120\" maxlength=\"7\">\n </div>\n <div class=\"form-group\">\n <label>ICMS (ECF/SAT)</label>\n <input id=\"aliquotaICMS\" [(ngModel)]=\"model.aliquotaICMS\" autocomplete=\"off\" class=\"form-control input-100 text-right\"\n maxlength=\"5\">\n </div>\n <div class=\"form-group\">\n <label>S. T. (ECF/SAT)</label>\n <input id=\"sitTrib\" [(ngModel)]=\"model.sitTrib\" autocomplete=\"off\" [matAutocomplete]=\"autoST\" matInput\n class=\"form-control input-120\" maxlength=\"5\">\n <mat-autocomplete #autoST=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of stList\" [value]=\"option.item1\">\n {{option.item1}} <small>{{option.item2}}</small>\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n <h4>Campos da NFC-e</h4>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/CSOSN</label>\n <mat-select [(value)]=\"model.csT_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of cstICMSList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. ICMS (%)</label>\n <input id=\"pICMS_icms\" [ngModel]=\"model.pICMS_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pICMS_icmsParser.parse($event)\" (focusout)=\"pICMS_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>Modalidade BC</label>\n <mat-select [(value)]=\"model.modBC_icms\" class=\"form-control input-120\">\n <mat-option *ngFor=\"let i of modBaseICMS\" [value]=\"i.item1\">\n {{i.item1}} <small>{{i.item2}}</small>\n </mat-option>\n </mat-select>\n </div>\n </div>\n <h6>ICMS Efetivo CST60/CSOSN500</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pRedBCEfet (%)</label>\n <input id=\"pRedBCEfet_icms\" [ngModel]=\"model.pRedBCEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pRedBCEfet_icmsParser.parse($event)\" (focusout)=\"pRedBCEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pICMSEfet (%)</label>\n <input id=\"picmsEfet_icms\" [ngModel]=\"model.picmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"picmsEfet_icmsParser.parse($event)\" (focusout)=\"picmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCEfet (R$)</label>\n <input id=\"vbcEfet_icms\" [ngModel]=\"model.vbcEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcEfet_icmsParser.parse($event)\" (focusout)=\"vbcEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSEfet (R$)</label>\n <input id=\"vicmsEfet_icms\" [ngModel]=\"model.vicmsEfet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsEfet_icmsParser.parse($event)\" (focusout)=\"vicmsEfet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Substitui\u00E7\u00E3o Tribut\u00E1ria (ST)</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pST (%)</label>\n <input id=\"psT_icms\" [ngModel]=\"model.psT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"psT_icmsParser.parse($event)\" (focusout)=\"psT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCSTRet (R$)</label>\n <input id=\"vbcstRet_icms\" [ngModel]=\"model.vbcstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcstRet_icmsParser.parse($event)\" (focusout)=\"vbcstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSubs (R$)</label>\n <input id=\"vicmsSubstituto_icms\" [ngModel]=\"model.vicmsSubstituto_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsSubstituto_icmsParser.parse($event)\"\n (focusout)=\"vicmsSubstituto_icmsParser.checkout()\" class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vICMSSTRet (R$)</label>\n <input id=\"vicmsstRet_icms\" [ngModel]=\"model.vicmsstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vicmsstRet_icmsParser.parse($event)\" (focusout)=\"vicmsstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>Fundo de Combate a Pobresa</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>pFCP (%)</label>\n <input id=\"pfcP_icms\" [ngModel]=\"model.pfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcP_icmsParser.parse($event)\" (focusout)=\"pfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCP (R$)</label>\n <input id=\"vbcfcP_icms\" [ngModel]=\"model.vbcfcP_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcP_icmsParser.parse($event)\" (focusout)=\"vbcfcP_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPST (%)</label>\n <input id=\"pfcpsT_icms\" [ngModel]=\"model.pfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpsT_icmsParser.parse($event)\" (focusout)=\"pfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPST (R$)</label>\n <input id=\"vbcfcpsT_icms\" [ngModel]=\"model.vbcfcpsT_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpsT_icmsParser.parse($event)\" (focusout)=\"vbcfcpsT_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>pFCPSTRet (%)</label>\n <input id=\"pfcpstRet_icms\" [ngModel]=\"model.pfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pfcpstRet_icmsParser.parse($event)\" (focusout)=\"pfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>vBCFCPSTRet (R$)</label>\n <input id=\"vbcfcpstRet_icms\" [ngModel]=\"model.vbcfcpstRet_icms | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbcfcpstRet_icmsParser.parse($event)\" (focusout)=\"vbcfcpstRet_icmsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n <h6>PIS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/PIS</label>\n <mat-select [(value)]=\"model.csT_pis\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliquota PIS (%)</label>\n <input id=\"ppiS_pis\" [ngModel]=\"model.ppiS_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"ppiS_pisParser.parse($event)\" (focusout)=\"ppiS_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>PIS BC %</label>\n <input id=\"vbC_pis\" [ngModel]=\"model.vbC_pis | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_pisParser.parse($event)\" (focusout)=\"vbC_pisParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n \n <h6>COFINS</h6>\n <div class=\"hbox gap-8\">\n <div class=\"form-group\">\n <label>CST/COFINS</label>\n <mat-select [(value)]=\"model.csT_cofins\" class=\"form-control input-120\">\n <mat-option [value]=\"null\">\n Nenhum\n </mat-option>\n <mat-option *ngFor=\"let i of cstCofinsList\" [value]=\"i.item1\">\n {{i.item1}}\n </mat-option>\n </mat-select>\n </div>\n <div class=\"form-group\">\n <label>Aliq. COFINS (%)</label>\n <input id=\"pcofinS_cofins\" [ngModel]=\"model.pcofinS_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"pcofinS_cofinsParser.parse($event)\" (focusout)=\"pcofinS_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n <div class=\"form-group\">\n <label>COFINS BC %</label>\n <input id=\"vbC_cofins\" [ngModel]=\"model.vbC_cofins | number:'1.2-2'\" autocomplete=\"off\"\n (ngModelChange)=\"vbC_cofinsParser.parse($event)\" (focusout)=\"vbC_cofinsParser.checkout()\"\n class=\"form-control input-100 text-right\">\n </div>\n </div>\n</div>\n\n<div [@menuLateral] class=\"vbox\" *ngIf=\"selectedTab == 2\">\n\n <div style=\"margin-bottom: 16px;\" class=\"vbox\">\n <mat-slide-toggle [(ngModel)]=\"model.disponivelCardapio\" tabindex=-1>Dispon\u00EDvel no Card\u00E1pio Digital\n </mat-slide-toggle>\n </div>\n <div class=\"form-group\">\n <label>Descri\u00E7\u00E3o</label>\n <textarea id=\"descricao\" [(ngModel)]=\"model.descricao\" cols=\"40\" rows=\"5\" class=\"form-control input-300\"\n tabindex=\"2\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Categoria</label>\n <div class=\"hbox\">\n <div id=\"categoriaCardapio\" (click)=\"editarCategoriaCardapio()\"\n class=\"form-control grow-1 input-selecao input-300\">\n {{model.categoriaCardapioNome}} </div>\n <button (click)=\"editarCategoriaCardapio()\" class=\"form-inline-button btn-form-margin\">\n <span class=\"material-icons\">\n search\n </span>\n </button>\n </div>\n </div>\n <div class=\"imagem-container\" *ngIf=\"editMode\">\n <img [src]=\"imgUrl\" class=\"img-fluid\" *ngIf=\"imgUrl\" />\n\n <input type=\"file\" #file placeholder=\"Choose file\" (change)=\"uploadFile(file.files)\" accept=\".jpg,.png\"\n style=\"display: none;\">\n\n <button mat-button color=\"primary\" type=\"button\" (click)=\"file.click()\">Escolher Imagem</button>\n\n <span class=\"upload\" *ngIf=\"progress > 0\">\n {{progress}}%\n </span>\n <span class=\"upload\" *ngIf=\"message\">\n {{message}}\n </span>\n </div>\n\n</div>", styles: [".imagem-container{border:1px solid #ced4da;display:flex;flex-direction:column;border-radius:9px;max-width:460px}small{font-size:xx-small}.badge{color:#fff;font-size:xx-small;display:flex;align-items:center;padding:4px;border-radius:13px;margin-left:2px}.badge.encontrado{background:#05a301;border:1px solid #28d112}.badge.nao-encontrado{background:#a30101;border:1px solid #d17812}.badge.buscando{background:#929292;border:1px solid #a3a3a3}h6{margin:8px 0;color:#666}\n"] }]
@@ -340,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
340
341
  }], model: [{
341
342
  type: Input
342
343
  }] } });
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHV0by1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL294cGktbmdsaWIvc3JjL2xpYi9jYWRhc3Ryb3MvcHJvZHV0b3MvcHJvZHV0by1mb3JtL3Byb2R1dG8tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9veHBpLW5nbGliL3NyYy9saWIvY2FkYXN0cm9zL3Byb2R1dG9zL3Byb2R1dG8tZm9ybS9wcm9kdXRvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9uRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxpSUFBaUksQ0FBQztBQUNqTSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyRkFBMkYsQ0FBQztBQUMvSSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxvR0FBb0csQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBRTNKLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FDckMsYUFBYSxFQUNiO0lBQ0UsVUFBVSxDQUNSLFFBQVEsRUFBRTtRQUNWLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzFDLENBQ0E7Q0FBQyxDQUNMLENBQUE7QUFRRCxNQUFNLE9BQU8sb0JBQW9CO0lBeUkvQixZQUFtQixNQUFpQixFQUMxQixFQUFvQixFQUNwQixJQUFnQixFQUNoQixJQUFxQixFQUNyQixZQUFpQyxFQUNqQyxZQUFpQztRQUx4QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQzFCLE9BQUUsR0FBRixFQUFFLENBQWtCO1FBQ3BCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQTdJM0MsYUFBUSxHQUE0QjtZQUNsQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNDQUFzQyxFQUFFO1lBQ2hFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsd0RBQXdELEVBQUU7WUFDbEYsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnSkFBZ0osRUFBRTtZQUMxSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtTQUNwQyxDQUFDO1FBQ0YsV0FBTSxHQUE0QjtZQUNoQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUNwQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUMvQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtZQUN0QyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUNyQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO1lBQ3hDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7U0FDeEMsQ0FBQztRQUNGLGdCQUFXLEdBQTRCO1lBQ3JDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7WUFDaEQsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRTtZQUNsRCxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO1NBQ3pDLENBQUM7UUFDRixnQkFBVyxHQUE0QjtZQUNyQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFO1lBQ2pELEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsOERBQThELEVBQUU7WUFDdEYsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRTtZQUN4RCxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLDRFQUE0RSxFQUFFO1lBQ3BHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQ2hDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQ3ZDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO1lBQ25DLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1lBQ3JDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsd0RBQXdELEVBQUU7WUFDaEYsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSwrRUFBK0UsRUFBRTtZQUN2RyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNoQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLDBEQUEwRCxFQUFFO1lBQ25GLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsMERBQTBELEVBQUU7WUFDbkYsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxpRUFBaUUsRUFBRTtZQUMxRixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNoQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLHFDQUFxQyxFQUFFO1lBQzlELEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsNkdBQTZHLEVBQUU7WUFDdEksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSw2R0FBNkcsRUFBRTtZQUN0SSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLHFIQUFxSCxFQUFFO1lBQzlJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUseUZBQXlGLEVBQUU7WUFDbEgsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7U0FDbEMsQ0FBQztRQUNGLGtCQUFhLEdBQTRCO1lBQ3ZDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUseUdBQXlHLEVBQUU7WUFDakksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxxRkFBcUYsRUFBRTtZQUM3RyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdHQUFnRyxFQUFFO1lBQ3hILEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsK0RBQStELEVBQUU7WUFDdkYsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxpREFBaUQsRUFBRTtZQUN6RSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHVDQUF1QyxFQUFFO1lBQy9ELEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsbUNBQW1DLEVBQUU7WUFDM0QsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSwyQ0FBMkMsRUFBRTtZQUNuRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLDBDQUEwQyxFQUFFO1lBQ2xFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7WUFDNUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRTtZQUN0RCxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLG9HQUFvRyxFQUFFO1lBQzVILEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsd0dBQXdHLEVBQUU7WUFDaEksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxxRkFBcUYsRUFBRTtZQUM3RyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHVHQUF1RyxFQUFFO1lBQy9ILEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsdUdBQXVHLEVBQUU7WUFDL0gsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSwwR0FBMEcsRUFBRTtZQUNsSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHVIQUF1SCxFQUFFO1lBQy9JLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsNkdBQTZHLEVBQUU7WUFDckksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxpSEFBaUgsRUFBRTtZQUN6SSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLDhGQUE4RixFQUFFO1lBQ3RILEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0hBQWdILEVBQUU7WUFDeEksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnSEFBZ0gsRUFBRTtZQUN4SSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLG1IQUFtSCxFQUFFO1lBQzNJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsaUlBQWlJLEVBQUU7WUFDekosRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSx3Q0FBd0MsRUFBRTtZQUNoRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdEQUFnRCxFQUFFO1lBQ3hFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsc0NBQXNDLEVBQUU7WUFDOUQsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSx3Q0FBd0MsRUFBRTtZQUNoRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLDBDQUEwQyxFQUFFO1lBQ2xFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUseURBQXlELEVBQUU7WUFDakYsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxxREFBcUQsRUFBRTtZQUM3RSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLCtCQUErQixFQUFFO1NBQ3hELENBQUM7UUFDRixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QiwwQkFBcUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hILHlCQUFvQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0csdUJBQWtCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2Ryx5QkFBb0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTdHLG1CQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRix3QkFBbUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFHLCtCQUEwQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9ILDBCQUFxQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFaEgsb0JBQWUsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlGLHNCQUFpQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEcsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFHLHlCQUFvQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0csMkJBQXNCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFbkgsbUJBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLGtCQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4Rix5QkFBb0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdHLHFCQUFnQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHakcscUJBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hHLG9CQUFlLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFbkgscUJBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25HLG1CQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUN6QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRzVCLFdBQU0sR0FBWSxhQUFhLEVBQUUsQ0FBQztRQVVsQyxTQUFJLEdBQTJCO1lBQzdCLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDcEMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUN2QyxDQUFDO1FBQ0YsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsWUFBTyxHQUFtQixFQUFFLENBQUM7SUFNa0IsQ0FBQztJQXJCaEQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFhLEtBQUssQ0FBQyxLQUFjO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQWdCRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUU7YUFDcEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxTQUFTO1FBQ1AsSUFBSSxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDMUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDN0M7UUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMzRCxNQUFNLEVBQUUsTUFBTTtZQUNkLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLE1BQU07WUFDaEIsVUFBVSxFQUFFLFdBQVc7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QyxJQUFJLE1BQU0sSUFBSSxTQUFTO2dCQUFFLE9BQU87WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1lBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDaEQsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO1lBQ2xDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUU7WUFDdEUsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsS0FBSztZQUNaLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFVBQVUsRUFBRSxXQUFXO1NBQ3hCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekMsSUFBSSxNQUFNLElBQUksU0FBUztnQkFBRSxPQUFPO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDMUMsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDN0M7UUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtZQUNuRSxNQUFNLEVBQUUsTUFBTTtZQUNkLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLE1BQU07WUFDaEIsVUFBVSxFQUFFLFdBQVc7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QyxJQUFJLE1BQU0sSUFBSSxTQUFTO2dCQUFFLE9BQU87WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELHVCQUF1QjtRQUNyQixJQUFJLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTtZQUNsQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMxQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztTQUM3QztRQUNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUFFO1lBQy9FLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLEtBQUs7WUFDWixRQUFRLEVBQUUsTUFBTTtZQUNoQixVQUFVLEVBQUUsV0FBVztTQUN4QixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLElBQUksTUFBTSxJQUFJLFNBQVM7Z0JBQUUsT0FBTztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFVBQVUsQ0FBQyxFQUF3QjtRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFXO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDeEIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPO1NBQ1I7UUFDRCxJQUFJLFlBQVksR0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUNyRjtZQUNFLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUCxlQUFlLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSzthQUM1QztTQUNGLENBQUM7YUFDRCxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxjQUFjLEVBQy9DO2dCQUNFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQzthQUN4RDtpQkFDSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1Y7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDUCxNQUFNLFNBQVMsR0FBc0IsR0FBRyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBMkIsU0FBUztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0I7WUFDNUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzNCLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUFFLE9BQU87UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDNUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztpSEEvU1Usb0JBQW9CO3FHQUFwQixvQkFBb0Isa0pDckNqQyxrOW1CQXlZTSxzL0VEdFdRLENBQUMsZ0JBQWdCLENBQUM7MkZBRW5CLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxpQkFBaUIsY0FHZixDQUFDLGdCQUFnQixDQUFDOzBQQW9IckIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQVNNLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Hcm91cERhdGEgfSBmcm9tICcuLi8uLi8uLi9jb250cm9scy9yYWRpby1idXR0b24tZ3JvdXAvcmFkaW8tYnV0dG9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjcmVhdGVQcm9kdWN0LCBQcm9kdXRvIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VudGlkYWRlcy9wcm9kdXRvJztcbmltcG9ydCB7IFNldG9yRXN0b3F1ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpZGFkZXMvc2V0b3ItZXN0b3F1ZSc7XG5pbXBvcnQgeyBMYXp5VHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmZyYS9sYXp5LXRyaWdnZXInO1xuaW1wb3J0IHsgTnVtYmVyUGFyc2VyIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luZnJhL251bWJlci1wYXJzZXInO1xuaW1wb3J0IHsgVHVwbGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHVwbGUnO1xuaW1wb3J0IHsgQXV0aERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2F1dGgtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbldlYlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvY29tbW9uLXdlYi1zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NyZWVuSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9zY3JlZW4taGVscGVyLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQcm9kdXRvQ2F0ZWdvcmlhQ2FyZGFwaW9TZWxlY2FvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHV0b3MtY2F0ZWdvcmlhLWNhcmRhcGlvL3Byb2R1dG8tY2F0ZWdvcmlhLWNhcmRhcGlvLXNlbGVjYW8tZGlhbG9nL3Byb2R1dG8tY2F0ZWdvcmlhLWNhcmRhcGlvLXNlbGVjYW8tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdXRvR3J1cG9TZWxlY2FvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHV0b3MtZ3J1cG9zL3Byb2R1dG8tZ3J1cG8tc2VsZWNhby1kaWFsb2cvcHJvZHV0by1ncnVwby1zZWxlY2FvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHV0b3NOY21EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcm9kdXRvcy1uY20tZGlhbG9nL3Byb2R1dG9zLW5jbS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1dG9TdWJncnVwb1NlbGVjYW9EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcm9kdXRvcy1zdWJncnVwb3MvcHJvZHV0by1zdWJncnVwby1zZWxlY2FvLWRpYWxvZy9wcm9kdXRvLXN1YmdydXBvLXNlbGVjYW8tZGlhbG9nLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBsYXRlcmFsQW5pbWF0aW9uID0gdHJpZ2dlcihcbiAgJ21lbnVMYXRlcmFsJyxcbiAgW1xuICAgIHRyYW5zaXRpb24oXG4gICAgICAnOmVudGVyJywgW1xuICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxuICAgICAgYW5pbWF0ZSgnNjAwbXMnLCBzdHlsZSh7ICdvcGFjaXR5JzogMSB9KSlcbiAgICBdXG4gICAgKV1cbilcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb3gtcHJvZHV0by1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1dG8tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2R1dG8tZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbbGF0ZXJhbEFuaW1hdGlvbl1cbn0pXG5leHBvcnQgY2xhc3MgUHJvZHV0b0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjZm9wTGlzdDogVHVwbGU8c3RyaW5nLCBzdHJpbmc+W10gPSBbXG4gICAgeyBpdGVtMTogJzUxMDEnLCBpdGVtMjogJ1ZlbmRhIGRlIHByb2R1w6fDo28gZG8gZXN0YWJlbGVjaW1lbnRvJyB9LFxuICAgIHsgaXRlbTE6ICc1MTAyJywgaXRlbTI6ICdWZW5kYSBkZSBtZXJjYWRvcmlhIGFkcXVpcmlkYSBvdSByZWNlYmlkYSBkZSB0ZXJjZWlyb3MnIH0sXG4gICAgeyBpdGVtMTogJzU0MDUnLCBpdGVtMjogJ1ZlbmRhIGRlIG1lcmNhZG9yaWEsIGFkcXVpcmlkYSBvdSByZWNlYmlkYSBkZSB0ZXJjZWlyb3MsIHN1amVpdGEgYW8gcmVnaW1lIGRlIHN1YnN0aXR1acOnw6NvIHRyaWJ1dMOhcmlhLCBuYSBjb25kacOnw6NvIGRlIGNvbnRyaWJ1aW50ZS1zdWJzdGl0dcOtZG8nIH0sXG4gICAgeyBpdGVtMTogJzU5MzMnLCBpdGVtMjogJ1NlcnZpw6dvJyB9LFxuICBdO1xuICBzdExpc3Q6IFR1cGxlPHN0cmluZywgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6ICdGJywgaXRlbTI6ICdTdWJzLiBUcmliLicgfSxcbiAgICB7IGl0ZW0xOiAnSScsIGl0ZW0yOiAnSXNlbnRvJyB9LFxuICAgIHsgaXRlbTE6ICdOJywgaXRlbTI6ICdOw6NvIFRyaWJ1dGFkbycgfSxcbiAgICB7IGl0ZW0xOiAnUScsIGl0ZW0yOiAnSXNlbnRvIElTU1FOJyB9LFxuICAgIHsgaXRlbTE6ICdTJywgaXRlbTI6ICdUcmlidXRhZG8gSVNTUU4nIH0sXG4gICAgeyBpdGVtMTogJ1QnLCBpdGVtMjogJ1RyaWJ1dGFkbyBJQ01TJyB9LFxuICBdO1xuICBtb2RCYXNlSUNNUzogVHVwbGU8bnVtYmVyLCBzdHJpbmc+W10gPSBbXG4gICAgeyBpdGVtMTogMCwgaXRlbTI6ICdNYXJnZW0gVmFsb3IgQWdyZWdhZG8gKCUpJyB9LFxuICAgIHsgaXRlbTE6IDEsIGl0ZW0yOiAnUGF1dGEgKFZhbG9yKScgfSxcbiAgICB7IGl0ZW0xOiAyLCBpdGVtMjogJ1ByZcOnbyBUYWJlbGFkbyBNw6F4LiAodmFsb3IpJyB9LFxuICAgIHsgaXRlbTE6IDMsIGl0ZW0yOiAnVmFsb3IgZGEgb3BlcmHDp8OjbycgfSxcbiAgXTtcbiAgY3N0SUNNU0xpc3Q6IFR1cGxlPHN0cmluZywgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6ICcwMCcsIGl0ZW0yOiAnVHJpYnV0YWRhIGludGVncmFsbWVudGUnIH0sXG4gICAgeyBpdGVtMTogJzEwJywgaXRlbTI6ICdUcmlidXRhZGEgZSBjb20gY29icmFuw6dhIGRvIElDTVMgcG9yIHN1YnN0aXR1acOnw6NvIHRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICcyMCcsIGl0ZW0yOiAnQ29tIHJlZHXDp8OjbyBkZSBiYXNlIGRlIGPDoWxjdWxvJyB9LFxuICAgIHsgaXRlbTE6ICczMCcsIGl0ZW0yOiAnSXNlbnRhIG91IG7Do28gdHJpYnV0YWRhIGUgY29tIGNvYnJhbsOnYSBkbyBJQ01TIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnNDAnLCBpdGVtMjogJ0lzZW50YScgfSxcbiAgICB7IGl0ZW0xOiAnNDEnLCBpdGVtMjogJ07Do28gdHJpYnV0YWRhJyB9LFxuICAgIHsgaXRlbTE6ICc1MCcsIGl0ZW0yOiAnU3VzcGVuc8OjbycgfSxcbiAgICB7IGl0ZW0xOiAnNTEnLCBpdGVtMjogJ0RpZmVyaW1lbnRvJyB9LFxuICAgIHsgaXRlbTE6ICc2MCcsIGl0ZW0yOiAnSUNNUyBjb2JyYWRvIGFudGVyaW9ybWVudGUgcG9yIHN1YnN0aXR1acOnw6NvIHRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICc3MCcsIGl0ZW0yOiAnQ29tIHJlZHXDp8OjbyBkZSBiYXNlIGRlIGPDoWxjdWxvIGUgY29icmFuw6dhIGRvIElDTVMgcG9yIHN1YnN0aXR1acOnw6NvIHRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICc5MCcsIGl0ZW0yOiAnT3V0cm9zJyB9LFxuICAgIHsgaXRlbTE6ICcxMDEnLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgY29tIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8nIH0sXG4gICAgeyBpdGVtMTogJzEwMicsIGl0ZW0yOiAnVHJpYnV0YWRhIHBlbG8gU2ltcGxlcyBOYWNpb25hbCBzZW0gcGVybWlzc8OjbyBkZSBjcsOpZGl0bycgfSxcbiAgICB7IGl0ZW0xOiAnMTAzJywgaXRlbTI6ICdJc2Vuw6fDo28gZG8gSUNNUyBubyBTaW1wbGVzIE5hY2lvbmFsIHBhcmEgZmFpeGEgZGUgcmVjZWl0YSBicnV0YScgfSxcbiAgICB7IGl0ZW0xOiAnMzAwJywgaXRlbTI6ICdJbXVuZScgfSxcbiAgICB7IGl0ZW0xOiAnNDAwJywgaXRlbTI6ICdOw6NvIHRyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwnIH0sXG4gICAgeyBpdGVtMTogJzIwMScsIGl0ZW0yOiAnVHJpYnV0YWRhIHBlbG8gU2ltcGxlcyBOYWNpb25hbCBjb20gcGVybWlzc8OjbyBkZSBjcsOpZGl0byBlIGNvbSBjb2JyYW7Dp2EgZG8gSUNNUyBwb3IgU3Vic3RpdHVpw6fDo28gVHJpYnV0w6FyaWEnIH0sXG4gICAgeyBpdGVtMTogJzIwMicsIGl0ZW0yOiAnVHJpYnV0YWRhIHBlbG8gU2ltcGxlcyBOYWNpb25hbCBzZW0gcGVybWlzc8OjbyBkZSBjcsOpZGl0byBlIGNvbSBjb2JyYW7Dp2EgZG8gSUNNUyBwb3IgU3Vic3RpdHVpw6fDo28gVHJpYnV0w6FyaWEnIH0sXG4gICAgeyBpdGVtMTogJzIwMycsIGl0ZW0yOiAnSXNlbsOnw6NvIGRvIElDTVMgbm9zIFNpbXBsZXMgTmFjaW9uYWwgcGFyYSBmYWl4YSBkZSByZWNlaXRhIGJydXRhIGUgY29tIGNvYnJhbsOnYSBkbyBJQ01TIHBvciBTdWJzdGl0dWnDp8OjbyBUcmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnNTAwJywgaXRlbTI6ICdJQ01TIGNvYnJhZG8gYW50ZXJpb3JtZW50ZSBwb3Igc3Vic3RpdHVpw6fDo28gdHJpYnV0w6FyaWEgKHN1YnN0aXR1w61kbykgb3UgcG9yIGFudGVjaXBhw6fDo28nIH0sXG4gICAgeyBpdGVtMTogJzkwMCcsIGl0ZW0yOiAnT3V0cm9zJyB9XG4gIF07XG4gIGNzdENvZmluc0xpc3Q6IFR1cGxlPHN0cmluZywgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6ICcwMScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gVHJpYnV0w6F2ZWwgKGJhc2UgZGUgY8OhbGN1bG8gPSB2YWxvciBkYSBvcGVyYcOnw6NvIGFsw61xdW90YSBub3JtYWwgKGN1bXVsYXRpdm8vbsOjbyBjdW11bGF0aXZvKSk7JyB9LFxuICAgIHsgaXRlbTE6ICcwMicsIGl0ZW0yOiAnIE9wZXJhw6fDo28gVHJpYnV0w6F2ZWwgKGJhc2UgZGUgY8OhbGN1bG8gPSB2YWxvciBkYSBvcGVyYcOnw6NvIChhbMOtcXVvdGEgZGlmZXJlbmNpYWRhKSk7JyB9LFxuICAgIHsgaXRlbTE6ICcwMycsIGl0ZW0yOiAnIE9wZXJhw6fDo28gVHJpYnV0w6F2ZWwgKGJhc2UgZGUgY8OhbGN1bG8gPSBxdWFudGlkYWRlIHZlbmRpZGEgeCBhbMOtcXVvdGEgcG9yIHVuaWRhZGUgZGUgcHJvZHV0byk7JyB9LFxuICAgIHsgaXRlbTE6ICcwNCcsIGl0ZW0yOiAnIE9wZXJhw6fDo28gVHJpYnV0w6F2ZWwgKHRyaWJ1dGHDp8OjbyBtb25vZsOhc2ljYSAoYWzDrXF1b3RhIHplcm8pKTsnIH0sXG4gICAgeyBpdGVtMTogJzA1JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBUcmlidXTDoXZlbCAoU3Vic3RpdHVpw6fDo28gVHJpYnV0w6FyaWEpOycgfSxcbiAgICB7IGl0ZW0xOiAnMDYnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChhbMOtcXVvdGEgemVybyk7JyB9LFxuICAgIHsgaXRlbTE6ICcwNycsIGl0ZW0yOiAnIE9wZXJhw6fDo28gSXNlbnRhIGRhIENvbnRyaWJ1acOnw6NvOycgfSxcbiAgICB7IGl0ZW0xOiAnMDgnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFNlbSBJbmNpZMOqbmNpYSBkYSBDb250cmlidWnDp8OjbzsnIH0sXG4gICAgeyBpdGVtMTogJzA5JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gU3VzcGVuc8OjbyBkYSBDb250cmlidWnDp8OjbzsnIH0sXG4gICAgeyBpdGVtMTogJzk5JywgaXRlbTI6ICcgT3V0cmFzIE9wZXJhw6fDtWVzOycgfSxcbiAgICB7IGl0ZW0xOiAnNDknLCBpdGVtMjogJyBPdXRyYXMgT3BlcmHDp8O1ZXMgZGUgU2HDrWRhOyAnIH0sXG4gICAgeyBpdGVtMTogJzUwJywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gRGlyZWl0byBhIENyw6lkaXRvICBWaW5jdWxhZGEgRXhjbHVzaXZhbWVudGUgYSBSZWNlaXRhIFRyaWJ1dGFkYSBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTEnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBFeGNsdXNpdmFtZW50ZSBhIFJlY2VpdGEgTsOjbyBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vIDsnIH0sXG4gICAgeyBpdGVtMTogJzUyJywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gRGlyZWl0byBhIENyw6lkaXRvICBWaW5jdWxhZGEgRXhjbHVzaXZhbWVudGUgYSBSZWNlaXRhIGRlIEV4cG9ydGHDp8OjbzsgJyB9LFxuICAgIHsgaXRlbTE6ICc1MycsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBlIE7Do29UcmlidXRhZGFzIG5vIE1lcmNhZG8gSW50ZXJubzsgJyB9LFxuICAgIHsgaXRlbTE6ICc1NCcsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8gZSBkZSBFeHBvcnRhw6fDo28gOycgfSxcbiAgICB7IGl0ZW0xOiAnNTUnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIE7Do29UcmlidXRhZGFzIG5vIE1lcmNhZG8gSW50ZXJubyBlIGRlIEV4cG9ydGHDp8OjbzsgJyB9LFxuICAgIHsgaXRlbTE6ICc1NicsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBlIE7Do29UcmlidXRhZGFzIG5vIE1lcmNhZG8gSW50ZXJubywgZSBkZSBFeHBvcnRhw6fDo287JyB9LFxuICAgIHsgaXRlbTE6ICc2MCcsIGl0ZW0yOiAnIENyw6lkaXRvIFByZXN1bWlkbyAgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBWaW5jdWxhZGEgRXhjbHVzaXZhbWVudGUgYSBSZWNlaXRhIFRyaWJ1dGFkYSBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjEnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBOw6NvIFRyaWJ1dGFkYSBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjInLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjMnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBlIE7Do29UcmlidXRhZGFzIG5vIE1lcmNhZG8gSW50ZXJubzsgJyB9LFxuICAgIHsgaXRlbTE6ICc2NCcsIGl0ZW0yOiAnIENyw6lkaXRvIFByZXN1bWlkbyAgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBWaW5jdWxhZGEgYSBSZWNlaXRhcyBUcmlidXRhZGFzIG5vIE1lcmNhZG8gSW50ZXJubyBlIGRlIEV4cG9ydGHDp8OjbzsgJyB9LFxuICAgIHsgaXRlbTE6ICc2NScsIGl0ZW0yOiAnIENyw6lkaXRvIFByZXN1bWlkbyAgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBWaW5jdWxhZGEgYSBSZWNlaXRhcyBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8gZSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjYnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBlIE7Do29UcmlidXRhZGFzIG5vIE1lcmNhZG8gSW50ZXJubywgZSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjcnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE91dHJhcyBPcGVyYcOnw7VlczsgJyB9LFxuICAgIHsgaXRlbTE6ICc3MCcsIGl0ZW0yOiAnIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gc2VtIERpcmVpdG8gYSBDcsOpZGl0bzsgJyB9LFxuICAgIHsgaXRlbTE6ICc3MScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gY29tIElzZW7Dp8OjbzsgJyB9LFxuICAgIHsgaXRlbTE6ICc3MicsIGl0ZW0yOiAnIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gY29tIFN1c3BlbnPDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzMnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIGEgQWzDrXF1b3RhIFplcm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzQnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIHNlbSBJbmNpZMOqbmNpYSBkYSBDb250cmlidWnDp8OjbzsgJyB9LFxuICAgIHsgaXRlbTE6ICc3NScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gcG9yIFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhOycgfSxcbiAgICB7IGl0ZW0xOiAnOTgnLCBpdGVtMjogJyBPdXRyYXMgT3BlcmHDp8O1ZXMgZGUgRW50cmFkYTsnIH0sXG4gIF07XG4gIG5jbUVuY29udHJhZG86IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmNtTmFvRW5jb250cmFkbzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0J1c3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwUmVkQkNFZmV0X2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wUmVkQkNFZmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBSZWRCQ0VmZXRfaWNtcyk7XG4gIHBpY21zRWZldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucGljbXNFZmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBpY21zRWZldF9pY21zKTtcbiAgdmJjRWZldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjRWZldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52YmNFZmV0X2ljbXMpO1xuICB2aWNtc0VmZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZpY21zRWZldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52aWNtc0VmZXRfaWNtcyk7XG5cbiAgcHNUX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wc1RfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucHNUX2ljbXMpO1xuICB2YmNzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjc3RSZXRfaWNtcyk7XG4gIHZpY21zU3Vic3RpdHV0b19pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmljbXNTdWJzdGl0dXRvX2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZpY21zU3Vic3RpdHV0b19pY21zKTtcbiAgdmljbXNzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmljbXNzdFJldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52aWNtc3N0UmV0X2ljbXMpO1xuXG4gIHBmY1BfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnBmY1BfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucGZjUF9pY21zKTtcbiAgdmJjZmNQX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC52YmNmY1BfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjZmNQX2ljbXMpO1xuICBwZmNwc1RfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnBmY3BzVF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC5wZmNwc1RfaWNtcyk7XG4gIHZiY2ZjcHNUX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC52YmNmY3BzVF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52YmNmY3BzVF9pY21zKTtcbiAgcGZjcHN0UmV0X2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wZmNwc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucGZjcHN0UmV0X2ljbXMpO1xuICB2YmNmY3BzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjZmNwc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjZmNwc3RSZXRfaWNtcyk7XG5cbiAgcHBpU19waXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wcGlTX3BpcyA9IHYsICgpID0+IHRoaXMubW9kZWwucHBpU19waXMpO1xuICB2YkNfcGlzUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJDX3BpcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJDX3Bpcyk7XG5cbiAgcGNvZmluU19jb2ZpbnNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wY29maW5TX2NvZmlucyA9IHYsICgpID0+IHRoaXMubW9kZWwucGNvZmluU19jb2ZpbnMpO1xuICB2YkNfY29maW5zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJDX2NvZmlucyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJDX2NvZmlucyk7XG5cblxuICBwcmVjb1ZlbmRhUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5wcmVjb1ZlbmRhID0gdiA/PyAwLCAoKSA9PiB0aGlzLm1vZGVsLnByZWNvVmVuZGEpO1xuICBwcmVjb0N1c3RvUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5wcmVjb0N1c3RvID0gdiA/PyAwLCAoKSA9PiB0aGlzLm1vZGVsLnByZWNvQ3VzdG8pO1xuICBwcmVjb0Z1bmNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKCh2KSA9PiB0aGlzLm1vZGVsLnByZWNvRnVuY2lvbmFyaW8gPSB2ID8/IDAsICgpID0+IHRoaXMubW9kZWwucHJlY29GdW5jaW9uYXJpbyk7XG5cbiAgcElDTVNfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIoKHYpID0+IHRoaXMubW9kZWwucElDTVNfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucElDTVNfaWNtcyk7XG4gIGxhenlUcmlnZ2VyTmNtID0gbmV3IExhenlUcmlnZ2VyKCgpID0+IHsgdGhpcy5maW5kTkNNKCk7IH0pO1xuXG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBuZXh0SWRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIHByb2dyZXNzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIGltZ1VybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIF9tb2RlbDogUHJvZHV0byA9IGNyZWF0ZVByb2R1Y3QoKTtcbiAgZ2V0IG1vZGVsKCk6IFByb2R1dG8ge1xuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgfVxuICBASW5wdXQoKSBzZXQgbW9kZWwodmFsdWU6IFByb2R1dG8pIHtcbiAgICB0aGlzLl9tb2RlbCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0SW1nVXJsKCk7XG4gICAgdGhpcy5maW5kTkNNKCk7XG4gIH1cblxuICB0YWJzOiBSYWRpb0J1dHRvbkdyb3VwRGF0YVtdID0gW1xuICAgIHsgbmFtZTogXCJDYW1wb3MgR2VyYWlzXCIsIHZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcIkNhbXBvcyBGaXNjYWlzXCIsIHZhbHVlOiAxIH0sXG4gICAgeyBuYW1lOiBcIkNhcmTDoXBpbyBEaWdpdGFsXCIsIHZhbHVlOiAyIH1cbiAgXTtcbiAgc2VsZWN0ZWRUYWI6IG51bWJlciA9IDA7XG4gIHNldG9yZXM6IFNldG9yRXN0b3F1ZVtdID0gW107XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHdzOiBDb21tb25XZWJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNjcmVlbkhlbHBlcjogU2NyZWVuSGVscGVyU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkU2V0b3JlcygpO1xuICB9XG5cbiAgbG9hZFNldG9yZXMoKSB7XG4gICAgdGhpcy5pc0J1c3kgPSB0cnVlO1xuICAgIHRoaXMud3MuZ2V0QWxsU2V0b3JlcygpXG4gICAgICAuc3Vic2NyaWJlKHIgPT4ge1xuICAgICAgICB0aGlzLnNldG9yZXMgPSByO1xuICAgICAgICBjb25zb2xlLmluZm8ocik7XG4gICAgICAgIHRoaXMuaXNCdXN5ID0gZmFsc2U7XG4gICAgICB9LCBlcnIgPT4ge1xuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5zaG93SHR0cEVycm9yKGVycik7XG4gICAgICB9KTtcbiAgfVxuICBlZGl0YXJOQ00oKSB7XG4gICAgbGV0IGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk1KSArICdweCc7XG4gICAgbGV0IHdpZHRoID0gNTUwICsgJ3B4JztcbiAgICBpZiAodGhpcy5zY3JlZW5IZWxwZXIubW9iaWxlU2NyZWVuKSB7XG4gICAgICB3aWR0aCA9ICh3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOTkpICsgJ3B4JztcbiAgICAgIGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk5KSArICdweCc7XG4gICAgfVxuICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFByb2R1dG9zTmNtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZGlhbG9nLXAwJyxcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybjtcbiAgICAgIHRoaXMubW9kZWwubmNtID0gcmVzdWx0LmNvZGlnb0FwZW5hc0RpZ2l0b3M7XG4gICAgICB0aGlzLmxhenlUcmlnZ2VyTmNtLmZpcmUoKTtcbiAgICB9KTtcbiAgfVxuICBlZGl0YXJTdWJncnVwbygpIHtcbiAgICBsZXQgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTUpICsgJ3B4JztcbiAgICBsZXQgd2lkdGggPSA1NTAgKyAncHgnO1xuICAgIGlmICh0aGlzLnNjcmVlbkhlbHBlci5tb2JpbGVTY3JlZW4pIHtcbiAgICAgIHdpZHRoID0gKHdpbmRvdy5pbm5lcldpZHRoICogMC45OSkgKyAncHgnO1xuICAgICAgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTkpICsgJ3B4JztcbiAgICB9XG4gICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUHJvZHV0b1N1YmdydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1wMCcsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgICB0aGlzLm1vZGVsLnN1YmdydXBvSWQgPSByZXN1bHQuaWQ7XG4gICAgICB0aGlzLm1vZGVsLnN1YmdydXBvTm9tZSA9IHJlc3VsdC5ub21lO1xuICAgIH0pO1xuICB9XG4gIGVkaXRhckdydXBvKCkge1xuICAgIGxldCBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45NSkgKyAncHgnO1xuICAgIGxldCB3aWR0aCA9IDU1MCArICdweCc7XG4gICAgaWYgKHRoaXMuc2NyZWVuSGVscGVyLm1vYmlsZVNjcmVlbikge1xuICAgICAgd2lkdGggPSAod2luZG93LmlubmVyV2lkdGggKiAwLjk5KSArICdweCc7XG4gICAgICBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45OSkgKyAncHgnO1xuICAgIH1cbiAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9kdXRvR3J1cG9TZWxlY2FvRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZGlhbG9nLXAwJyxcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybjtcbiAgICAgIHRoaXMubW9kZWwuZ3J1cG9JZCA9IHJlc3VsdC5pZDtcbiAgICAgIHRoaXMubW9kZWwuZ3J1cG9Ob21lID0gcmVzdWx0Lm5vbWU7XG4gICAgfSk7XG4gIH1cbiAgZWRpdGFyQ2F0ZWdvcmlhQ2FyZGFwaW8oKSB7XG4gICAgbGV0IGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk1KSArICdweCc7XG4gICAgbGV0IHdpZHRoID0gNTUwICsgJ3B4JztcbiAgICBpZiAodGhpcy5zY3JlZW5IZWxwZXIubW9iaWxlU2NyZWVuKSB7XG4gICAgICB3aWR0aCA9ICh3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOTkpICsgJ3B4JztcbiAgICAgIGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk5KSArICdweCc7XG4gICAgfVxuICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFByb2R1dG9DYXRlZ29yaWFDYXJkYXBpb1NlbGVjYW9EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdkaWFsb2ctcDAnLFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuO1xuICAgICAgdGhpcy5tb2RlbC5jYXRlZ29yaWFDYXJkYXBpb0lkID0gcmVzdWx0LmlkO1xuICAgICAgdGhpcy5tb2RlbC5jYXRlZ29yaWFDYXJkYXBpb05vbWUgPSByZXN1bHQubm9tZTtcbiAgICB9KTtcbiAgfVxuICBjaGFuZ2VNb2RvKGV2OiBSYWRpb0J1dHRvbkdyb3VwRGF0YSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSBldi52YWx1ZTtcbiAgfVxuXG4gIHVwbG9hZEZpbGUoZmlsZXMgOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybjtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmaWxlVG9VcGxvYWQgPSA8RmlsZT5maWxlc1swXTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCwgZmlsZVRvVXBsb2FkLm5hbWUpO1xuICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMud3MuUFJPRFVUT19CQVNFX1VSTCArIFwiSW1hZ2VtP3Byb2R1dG9JZD1cIiArIHRoaXMubW9kZWwuaWQsIGZvcm1EYXRhLFxuICAgICAge1xuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogJ3Rva2VuICcgKyB0aGlzLmF1dGgudG9rZW4sXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB0b3RhbCA9IGV2ZW50LnRvdGFsID8/IC0xO1xuICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKDEwMCAqIGV2ZW50LmxvYWRlZCAvIHRvdGFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1N1Y2Vzc28nO1xuICAgICAgICAgIHRoaXMuaW1nVXJsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRJbWdVcmwobmV3IERhdGUoKS5nZXRNaW51dGVzKCkgKyBcIlwiKTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgY29uc3QgaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSA9IGVycjtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gaHR0cEVycm9yLmVycm9yO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRJbWdVcmwodXBsb2FkOiBzdHJpbmd8dW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgdGhpcy5pbWdVcmwgPSB0aGlzLndzLk1FRElBX1BST0RVVE9fSU1BR0VNX1VSTCArXG4gICAgICAnP3Byb2R1dG9JZD0nICsgdGhpcy5tb2RlbC5pZCArXG4gICAgICAnJnRva2VuPScgKyB0aGlzLmF1dGgudG9rZW4gK1xuICAgICAgKHVwbG9hZCAhPT0gdW5kZWZpbmVkID8gJyZ1cGxvYWQ9JyArIHVwbG9hZCA6ICcnKTtcbiAgfVxuXG4gIGZpbmROQ00oKSB7XG4gICAgdGhpcy5uY21FbmNvbnRyYWRvID0gZmFsc2U7XG4gICAgdGhpcy5uY21OYW9FbmNvbnRyYWRvID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLm1vZGVsLm5jbSkgcmV0dXJuO1xuICAgIHRoaXMuaXNCdXN5ID0gdHJ1ZTtcbiAgICB0aGlzLndzLmZpbmROY20odGhpcy5tb2RlbC5uY20pXG4gICAgICAuc3Vic2NyaWJlKHIgPT4ge1xuICAgICAgICB0aGlzLm5jbUVuY29udHJhZG8gPSByICE9IG51bGw7XG4gICAgICAgIHRoaXMubmNtTmFvRW5jb250cmFkbyA9IHIgPT0gbnVsbDtcbiAgICAgICAgY29uc29sZS5pbmZvKHIpO1xuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uc2hvd0h0dHBFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxNnB4XCI+XG4gICAgPG94LXJhZGlvLWJ1dHRvbi1ncm91cCAoY2hhbmdlKT1cImNoYW5nZU1vZG8oJGV2ZW50KVwiIFtpdGVtc109XCJ0YWJzXCIgY2xhc3M9XCJ0b29sLWl0ZW0tY29udGFpbmVyXCI+XG4gICAgPC9veC1yYWRpby1idXR0b24tZ3JvdXA+XG48L2Rpdj5cbjxkaXYgW0BtZW51TGF0ZXJhbF0gY2xhc3M9XCJ2Ym94XCIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PSAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5Dw7NkaWdvPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiaWRcIiBbYXR0ci5yZWFkb25seV09XCJlZGl0TW9kZVwiIFsobmdNb2RlbCldPVwibW9kZWwuaWRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJuZXh0SWRDbGljay5lbWl0KClcIiAqbmdJZj1cIiFlZGl0TW9kZVwiIGNsYXNzPVwiZm9ybS1pbmxpbmUtYnV0dG9uIGJ0bi1mb3JtLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodGJ1bGJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYXJnaW4tbGVmdC04XCI+XG4gICAgICAgICAgICA8bGFiZWw+UmVmZXLDqm5jaWE8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicmVmZXJlbmNpYVwiIFsobmdNb2RlbCldPVwibW9kZWwucmVmZXJlbmNpYVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiIHRhYmluZGV4PVwiMlwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+Tm9tZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cIm5vbWVcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLm5vbWVcIiBjZGtGb2N1c0luaXRpYWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMzAwXCIgdGFiaW5kZXg9XCIyXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5QcmXDp28gZGUgVmVuZGE8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicHJlY29WZW5kYVwiIFtuZ01vZGVsXT1cIm1vZGVsLnByZWNvVmVuZGEgfCBudW1iZXI6JzEuMi0yJ1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJlY29WZW5kYVBhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInByZWNvVmVuZGFQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIiB0YWJpbmRleD1cIjJcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICBtYXJnaW4tbGVmdC04XCI+XG4gICAgICAgICAgICA8bGFiZWw+UHJlw6dvIHAvIEZ1bmMuPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInByZWNvRnVuY2lvbmFyaW9cIiBbbmdNb2RlbF09XCJtb2RlbC5wcmVjb0Z1bmNpb25hcmlvIHwgbnVtYmVyOicxLjItMidcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByZWNvRnVuY1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInByZWNvRnVuY1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiIHRhYmluZGV4PVwiMlwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgIG1hcmdpbi1sZWZ0LThcIj5cbiAgICAgICAgICAgIDxsYWJlbD5QcmXDp28gZGUgQ3VzdG88L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicHJlY29DdXN0b1wiIFtuZ01vZGVsXT1cIm1vZGVsLnByZWNvQ3VzdG8gfCBudW1iZXI6JzEuMi0yJ1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJlY29DdXN0b1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInByZWNvQ3VzdG9QYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIiB0YWJpbmRleD1cIjJcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsPkdydXBvPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJncnVwb1wiIChjbGljayk9XCJlZGl0YXJHcnVwbygpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZ3Jvdy0xIGlucHV0LXNlbGVjYW8gaW5wdXQtMzAwXCI+XG4gICAgICAgICAgICAgICAge3ttb2RlbC5ncnVwb05vbWV9fSA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRhckdydXBvKClcIiBjbGFzcz1cImZvcm0taW5saW5lLWJ1dHRvbiBidG4tZm9ybS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+U3ViZ3J1cG88L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cInN1YmdydXBvXCIgKGNsaWNrKT1cImVkaXRhclN1YmdydXBvKClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBncm93LTEgaW5wdXQtc2VsZWNhbyBpbnB1dC0zMDBcIj5cbiAgICAgICAgICAgICAgICB7e21vZGVsLnN1YmdydXBvTm9tZX19IDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdGFyU3ViZ3J1cG8oKVwiIGNsYXNzPVwiZm9ybS1pbmxpbmUtYnV0dG9uIGJ0bi1mb3JtLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5VbmlkYWRlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInVuaWRhZGVcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLnVuaWRhZGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+RXN0b3F1ZSBNaW4uPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImVzdG9xdWVNaW5pbW9cIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmVzdG9xdWVNaW5pbW9cIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkPDs2RpZ28gUGF0cmltw7RuaW88L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiY29kaWdvUGF0cmltb25pb1wiIFsobmdNb2RlbCldPVwibW9kZWwuY29kaWdvUGF0cmltb25pb1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMzZcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+T2JzLjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJvYnNcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLm9ic1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTMwMFwiIG1heGxlbmd0aD1cIjMwMFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPlNldG9yIFN1YmVzdG9xdWU8L2xhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibW9kZWwuc2V0b3JTdWJFc3RvcXVlSWRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBzZXRvcmVzXCIgW3ZhbHVlXT1cImkuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAge3tpLm5vbWV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+UXRkLiBTdWJlc3RvcXVlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInF0ZE1pblN1YkVzdG9xdWVcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLnF0ZE1pblN1YkVzdG9xdWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidmJveFwiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLmVzdG9xdWVDb250cm9sYWRvXCIgdGFiaW5kZXg9LTE+Q29udHJvbGFkbyBubyBFc3RvcXVlPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLmltcHJpbWlDb3ppbmhhXCIgdGFiaW5kZXg9LTE+SW1wcmltZSBDb3ppbmhhPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLmltcHJpbWVDb3JyZWRvclwiIHRhYmluZGV4PS0xPkltcHJpbWUgQ29ycmVkb3I8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwudmVyTmFSZWNlcGNhb1wiIHRhYmluZGV4PS0xPlZlciBuYSBSZWNlcMOnw6NvPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLm9taXRlQ2xpZW50ZVwiIHRhYmluZGV4PS0xPk7Do28gRXhpYmUgcGFyYSBvIENsaWVudGUgbmEgU2HDrWRhXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5pc0F0aXZvXCIgdGFiaW5kZXg9LTE+QXRpdmFkbzwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG5cbjxkaXYgW0BtZW51TGF0ZXJhbF0gY2xhc3M9XCJ2Ym94XCIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PSAxXCI+XG5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDtcIiBjbGFzcz1cInZib3hcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5lbWl0ZU5GQ2VcIiB0YWJpbmRleD0tMT5FbWl0ZSBGaXNjYWxcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+R1RJTjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJndGluXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5ndGluXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCIgcGxhY2Vob2xkZXI9XCJTRU0gR1RJTlwiXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+Q0ZPUDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJjZm9wXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5jZm9wXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgbWF0SW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwXCJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI0XCI+XG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY2ZvcExpc3RcIiBbdmFsdWVdPVwib3B0aW9uLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLml0ZW0xfX0gPHNtYWxsPnt7b3B0aW9uLml0ZW0yfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+TkNNPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwibmNtXCIgKGlucHV0KT1cImxhenlUcmlnZ2VyTmNtLmZpcmUoKVwiIFsobmdNb2RlbCldPVwibW9kZWwubmNtXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiOFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRhck5DTSgpXCIgY2xhc3M9XCJmb3JtLWlubGluZS1idXR0b24gYnRuLWZvcm0tbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBidXNjYW5kb1wiICpuZ0lmPVwiaXNCdXN5XCI+QnVzY2FuZG8uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBlbmNvbnRyYWRvXCIgKm5nSWY9XCJuY21FbmNvbnRyYWRvXCI+RW5jb250cmFkbzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIG5hby1lbmNvbnRyYWRvXCIgKm5nSWY9XCJuY21OYW9FbmNvbnRyYWRvXCI+TsOjbyBlbmNvbnRyYWRvPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+Q0VTVDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJjZXN0XCIgWyhuZ01vZGVsKV09XCJtb2RlbC5jZXN0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCIgbWF4bGVuZ3RoPVwiN1wiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5JQ01TIChFQ0YvU0FUKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJhbGlxdW90YUlDTVNcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmFsaXF1b3RhSUNNU1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPlMuIFQuIChFQ0YvU0FUKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJzaXRUcmliXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5zaXRUcmliXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvU1RcIiBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiIG1heGxlbmd0aD1cIjVcIj5cbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvU1Q9XCJtYXRBdXRvY29tcGxldGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN0TGlzdFwiIFt2YWx1ZV09XCJvcHRpb24uaXRlbTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3tvcHRpb24uaXRlbTF9fSA8c21hbGw+e3tvcHRpb24uaXRlbTJ9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aDQ+Q2FtcG9zIGRhIE5GQy1lPC9oND5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNTVC9DU09TTjwvbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJtb2RlbC5jc1RfaWNtc1wiICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBjc3RJQ01TTGlzdFwiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5BbGlxLiBJQ01TICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwSUNNU19pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucElDTVNfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwSUNNU19pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicElDTVNfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5Nb2RhbGlkYWRlIEJDPC9sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cIm1vZGVsLm1vZEJDX2ljbXNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBtb2RCYXNlSUNNU1wiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19IDxzbWFsbD57e2kuaXRlbTJ9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aDY+SUNNUyBFZmV0aXZvIENTVDYwL0NTT1NONTAwPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBSZWRCQ0VmZXQgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBSZWRCQ0VmZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBSZWRCQ0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwUmVkQkNFZmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwUmVkQkNFZmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+cElDTVNFZmV0ICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwaWNtc0VmZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBpY21zRWZldF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInBpY21zRWZldF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicGljbXNFZmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dkJDRWZldCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY0VmZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YmNFZmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNFZmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dklDTVNFZmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmljbXNFZmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52aWNtc0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2aWNtc0VmZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZpY21zRWZldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxoNj5TdWJzdGl0dWnDp8OjbyBUcmlidXTDoXJpYSAoU1QpPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBTVCAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicHNUX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wc1RfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwc1RfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBzVF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ1NUUmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmJjc3RSZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY3N0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZiY3N0UmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dklDTVNTdWJzIChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmljbXNTdWJzdGl0dXRvX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52aWNtc1N1YnN0aXR1dG9faWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2aWNtc1N1YnN0aXR1dG9faWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwidmljbXNTdWJzdGl0dXRvX2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZJQ01TU1RSZXQgKFIkKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2aWNtc3N0UmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52aWNtc3N0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmljbXNzdFJldF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmljbXNzdFJldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxoNj5GdW5kbyBkZSBDb21iYXRlIGEgUG9icmVzYTwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wRkNQICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwZmNQX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wZmNQX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGZjUF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicGZjUF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ0ZDUCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY2ZjUF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwudmJjZmNQX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjZmNQX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNmY1BfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wRkNQU1QgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBmY3BzVF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucGZjcHNUX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGZjcHNUX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwZmNwc1RfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD52QkNGQ1BTVCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY2ZjcHNUX2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52YmNmY3BzVF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiY2ZjcHNUX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNmY3BzVF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBGQ1BTVFJldCAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicGZjcHN0UmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wZmNwc3RSZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwZmNwc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBmY3BzdFJldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ0ZDUFNUUmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmJjZmNwc3RSZXRfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY2ZjcHN0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjZmNwc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZiY2ZjcHN0UmV0X2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGg2PlBJUzwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DU1QvUElTPC9sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cIm1vZGVsLmNzVF9waXNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBOZW5odW1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgY3N0Q29maW5zTGlzdFwiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5BbGlxdW90YSBQSVMgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBwaVNfcGlzXCIgW25nTW9kZWxdPVwibW9kZWwucHBpU19waXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHBpU19waXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwcGlTX3Bpc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5QSVMgQkMgJTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2YkNfcGlzXCIgW25nTW9kZWxdPVwibW9kZWwudmJDX3BpcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YkNfcGlzUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmJDX3Bpc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8aDY+Q09GSU5TPC9oNj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNTVC9DT0ZJTlM8L2xhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibW9kZWwuY3NUX2NvZmluc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIE5lbmh1bVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaSBvZiBjc3RDb2ZpbnNMaXN0XCIgW3ZhbHVlXT1cImkuaXRlbTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3tpLml0ZW0xfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkFsaXEuIENPRklOUyAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicGNvZmluU19jb2ZpbnNcIiBbbmdNb2RlbF09XCJtb2RlbC5wY29maW5TX2NvZmlucyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwY29maW5TX2NvZmluc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBjb2ZpblNfY29maW5zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNPRklOUyBCQyAlPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiQ19jb2ZpbnNcIiBbbmdNb2RlbF09XCJtb2RlbC52YkNfY29maW5zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiQ19jb2ZpbnNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YkNfY29maW5zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgW0BtZW51TGF0ZXJhbF0gY2xhc3M9XCJ2Ym94XCIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PSAyXCI+XG5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweDtcIiBjbGFzcz1cInZib3hcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5kaXNwb25pdmVsQ2FyZGFwaW9cIiB0YWJpbmRleD0tMT5EaXNwb27DrXZlbCBubyBDYXJkw6FwaW8gRGlnaXRhbFxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsPkRlc2NyacOnw6NvPC9sYWJlbD5cbiAgICAgICAgPHRleHRhcmVhIGlkPVwiZGVzY3JpY2FvXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5kZXNjcmljYW9cIiBjb2xzPVwiNDBcIiByb3dzPVwiNVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTMwMFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjJcIj48L3RleHRhcmVhPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbD5DYXRlZ29yaWE8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cImNhdGVnb3JpYUNhcmRhcGlvXCIgKGNsaWNrKT1cImVkaXRhckNhdGVnb3JpYUNhcmRhcGlvKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGdyb3ctMSBpbnB1dC1zZWxlY2FvIGlucHV0LTMwMFwiPlxuICAgICAgICAgICAgICAgIHt7bW9kZWwuY2F0ZWdvcmlhQ2FyZGFwaW9Ob21lfX0gPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0YXJDYXRlZ29yaWFDYXJkYXBpbygpXCIgY2xhc3M9XCJmb3JtLWlubGluZS1idXR0b24gYnRuLWZvcm0tbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImltYWdlbS1jb250YWluZXJcIiAqbmdJZj1cImVkaXRNb2RlXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJpbWdVcmxcIiBjbGFzcz1cImltZy1mbHVpZFwiICpuZ0lmPVwiaW1nVXJsXCIgLz5cblxuICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZSBwbGFjZWhvbGRlcj1cIkNob29zZSBmaWxlXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKGZpbGUuZmlsZXMpXCIgYWNjZXB0PVwiLmpwZywucG5nXCJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmaWxlLmNsaWNrKClcIj5Fc2NvbGhlciBJbWFnZW08L2J1dHRvbj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZFwiICpuZ0lmPVwicHJvZ3Jlc3MgPiAwXCI+XG4gICAgICAgICAgICB7e3Byb2dyZXNzfX0lXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRcIiAqbmdJZj1cIm1lc3NhZ2VcIj5cbiAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+Il19
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHV0by1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL294cGktbmdsaWIvc3JjL2xpYi9jYWRhc3Ryb3MvcHJvZHV0b3MvcHJvZHV0by1mb3JtL3Byb2R1dG8tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9veHBpLW5nbGliL3NyYy9saWIvY2FkYXN0cm9zL3Byb2R1dG9zL3Byb2R1dG8tZm9ybS9wcm9kdXRvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9uRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxpSUFBaUksQ0FBQztBQUNqTSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyRkFBMkYsQ0FBQztBQUMvSSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxvR0FBb0csQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUUzSixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQ3JDLGFBQWEsRUFDYjtJQUNFLFVBQVUsQ0FDUixR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RUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7aUhBL1NVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGtKQ3JDakMsazltQkF5WU0sK3BGRHRXUSxDQUFDLGdCQUFnQixDQUFDOzJGQUVuQixvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBR2YsQ0FBQyxnQkFBZ0IsQ0FBQzswUEFvSHJCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFTTSxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFJhZGlvQnV0dG9uR3JvdXBEYXRhIH0gZnJvbSAnLi4vLi4vLi4vY29udHJvbHMvcmFkaW8tYnV0dG9uLWdyb3VwL3JhZGlvLWJ1dHRvbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY3JlYXRlUHJvZHVjdCwgUHJvZHV0byB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpZGFkZXMvcHJvZHV0byc7XG5pbXBvcnQgeyBTZXRvckVzdG9xdWUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW50aWRhZGVzL3NldG9yLWVzdG9xdWUnO1xuaW1wb3J0IHsgTGF6eVRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5mcmEvbGF6eS10cmlnZ2VyJztcbmltcG9ydCB7IE51bWJlclBhcnNlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmZyYS9udW1iZXItcGFyc2VyJztcbmltcG9ydCB7IFR1cGxlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3R1cGxlJztcbmltcG9ydCB7IEF1dGhEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9hdXRoLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25XZWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2NvbW1vbi13ZWItc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNjcmVlbkhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvc2NyZWVuLWhlbHBlci5zZXJ2aWNlJztcblxuaW1wb3J0IHsgUHJvZHV0b0NhdGVnb3JpYUNhcmRhcGlvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2R1dG9zLWNhdGVnb3JpYS1jYXJkYXBpby9wcm9kdXRvLWNhdGVnb3JpYS1jYXJkYXBpby1zZWxlY2FvLWRpYWxvZy9wcm9kdXRvLWNhdGVnb3JpYS1jYXJkYXBpby1zZWxlY2FvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHV0b0dydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2R1dG9zLWdydXBvcy9wcm9kdXRvLWdydXBvLXNlbGVjYW8tZGlhbG9nL3Byb2R1dG8tZ3J1cG8tc2VsZWNhby1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1dG9zTmNtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHV0b3MtbmNtLWRpYWxvZy9wcm9kdXRvcy1uY20tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdXRvU3ViZ3J1cG9TZWxlY2FvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZHV0b3Mtc3ViZ3J1cG9zL3Byb2R1dG8tc3ViZ3J1cG8tc2VsZWNhby1kaWFsb2cvcHJvZHV0by1zdWJncnVwby1zZWxlY2FvLWRpYWxvZy5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgbGF0ZXJhbEFuaW1hdGlvbiA9IHRyaWdnZXIoXG4gICdtZW51TGF0ZXJhbCcsXG4gIFtcbiAgICB0cmFuc2l0aW9uKFxuICAgICAgJzplbnRlcicsIFtcbiAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcbiAgICAgIGFuaW1hdGUoJzYwMG1zJywgc3R5bGUoeyAnb3BhY2l0eSc6IDEgfSkpXG4gICAgXVxuICAgICldXG4pXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ294LXByb2R1dG8tZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdXRvLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdXRvLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2xhdGVyYWxBbmltYXRpb25dXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1dG9Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2ZvcExpc3Q6IFR1cGxlPHN0cmluZywgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6ICc1MTAxJywgaXRlbTI6ICdWZW5kYSBkZSBwcm9kdcOnw6NvIGRvIGVzdGFiZWxlY2ltZW50bycgfSxcbiAgICB7IGl0ZW0xOiAnNTEwMicsIGl0ZW0yOiAnVmVuZGEgZGUgbWVyY2Fkb3JpYSBhZHF1aXJpZGEgb3UgcmVjZWJpZGEgZGUgdGVyY2Vpcm9zJyB9LFxuICAgIHsgaXRlbTE6ICc1NDA1JywgaXRlbTI6ICdWZW5kYSBkZSBtZXJjYWRvcmlhLCBhZHF1aXJpZGEgb3UgcmVjZWJpZGEgZGUgdGVyY2Vpcm9zLCBzdWplaXRhIGFvIHJlZ2ltZSBkZSBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYSwgbmEgY29uZGnDp8OjbyBkZSBjb250cmlidWludGUtc3Vic3RpdHXDrWRvJyB9LFxuICAgIHsgaXRlbTE6ICc1OTMzJywgaXRlbTI6ICdTZXJ2acOnbycgfSxcbiAgXTtcbiAgc3RMaXN0OiBUdXBsZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtcbiAgICB7IGl0ZW0xOiAnRicsIGl0ZW0yOiAnU3Vicy4gVHJpYi4nIH0sXG4gICAgeyBpdGVtMTogJ0knLCBpdGVtMjogJ0lzZW50bycgfSxcbiAgICB7IGl0ZW0xOiAnTicsIGl0ZW0yOiAnTsOjbyBUcmlidXRhZG8nIH0sXG4gICAgeyBpdGVtMTogJ1EnLCBpdGVtMjogJ0lzZW50byBJU1NRTicgfSxcbiAgICB7IGl0ZW0xOiAnUycsIGl0ZW0yOiAnVHJpYnV0YWRvIElTU1FOJyB9LFxuICAgIHsgaXRlbTE6ICdUJywgaXRlbTI6ICdUcmlidXRhZG8gSUNNUycgfSxcbiAgXTtcbiAgbW9kQmFzZUlDTVM6IFR1cGxlPG51bWJlciwgc3RyaW5nPltdID0gW1xuICAgIHsgaXRlbTE6IDAsIGl0ZW0yOiAnTWFyZ2VtIFZhbG9yIEFncmVnYWRvICglKScgfSxcbiAgICB7IGl0ZW0xOiAxLCBpdGVtMjogJ1BhdXRhIChWYWxvciknIH0sXG4gICAgeyBpdGVtMTogMiwgaXRlbTI6ICdQcmXDp28gVGFiZWxhZG8gTcOheC4gKHZhbG9yKScgfSxcbiAgICB7IGl0ZW0xOiAzLCBpdGVtMjogJ1ZhbG9yIGRhIG9wZXJhw6fDo28nIH0sXG4gIF07XG4gIGNzdElDTVNMaXN0OiBUdXBsZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtcbiAgICB7IGl0ZW0xOiAnMDAnLCBpdGVtMjogJ1RyaWJ1dGFkYSBpbnRlZ3JhbG1lbnRlJyB9LFxuICAgIHsgaXRlbTE6ICcxMCcsIGl0ZW0yOiAnVHJpYnV0YWRhIGUgY29tIGNvYnJhbsOnYSBkbyBJQ01TIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnMjAnLCBpdGVtMjogJ0NvbSByZWR1w6fDo28gZGUgYmFzZSBkZSBjw6FsY3VsbycgfSxcbiAgICB7IGl0ZW0xOiAnMzAnLCBpdGVtMjogJ0lzZW50YSBvdSBuw6NvIHRyaWJ1dGFkYSBlIGNvbSBjb2JyYW7Dp2EgZG8gSUNNUyBwb3Igc3Vic3RpdHVpw6fDo28gdHJpYnV0w6FyaWEnIH0sXG4gICAgeyBpdGVtMTogJzQwJywgaXRlbTI6ICdJc2VudGEnIH0sXG4gICAgeyBpdGVtMTogJzQxJywgaXRlbTI6ICdOw6NvIHRyaWJ1dGFkYScgfSxcbiAgICB7IGl0ZW0xOiAnNTAnLCBpdGVtMjogJ1N1c3BlbnPDo28nIH0sXG4gICAgeyBpdGVtMTogJzUxJywgaXRlbTI6ICdEaWZlcmltZW50bycgfSxcbiAgICB7IGl0ZW0xOiAnNjAnLCBpdGVtMjogJ0lDTVMgY29icmFkbyBhbnRlcmlvcm1lbnRlIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnNzAnLCBpdGVtMjogJ0NvbSByZWR1w6fDo28gZGUgYmFzZSBkZSBjw6FsY3VsbyBlIGNvYnJhbsOnYSBkbyBJQ01TIHBvciBzdWJzdGl0dWnDp8OjbyB0cmlidXTDoXJpYScgfSxcbiAgICB7IGl0ZW0xOiAnOTAnLCBpdGVtMjogJ091dHJvcycgfSxcbiAgICB7IGl0ZW0xOiAnMTAxJywgaXRlbTI6ICdUcmlidXRhZGEgcGVsbyBTaW1wbGVzIE5hY2lvbmFsIGNvbSBwZXJtaXNzw6NvIGRlIGNyw6lkaXRvJyB9LFxuICAgIHsgaXRlbTE6ICcxMDInLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgc2VtIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8nIH0sXG4gICAgeyBpdGVtMTogJzEwMycsIGl0ZW0yOiAnSXNlbsOnw6NvIGRvIElDTVMgbm8gU2ltcGxlcyBOYWNpb25hbCBwYXJhIGZhaXhhIGRlIHJlY2VpdGEgYnJ1dGEnIH0sXG4gICAgeyBpdGVtMTogJzMwMCcsIGl0ZW0yOiAnSW11bmUnIH0sXG4gICAgeyBpdGVtMTogJzQwMCcsIGl0ZW0yOiAnTsOjbyB0cmlidXRhZGEgcGVsbyBTaW1wbGVzIE5hY2lvbmFsJyB9LFxuICAgIHsgaXRlbTE6ICcyMDEnLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgY29tIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8gZSBjb20gY29icmFuw6dhIGRvIElDTVMgcG9yIFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICcyMDInLCBpdGVtMjogJ1RyaWJ1dGFkYSBwZWxvIFNpbXBsZXMgTmFjaW9uYWwgc2VtIHBlcm1pc3PDo28gZGUgY3LDqWRpdG8gZSBjb20gY29icmFuw6dhIGRvIElDTVMgcG9yIFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhJyB9LFxuICAgIHsgaXRlbTE6ICcyMDMnLCBpdGVtMjogJ0lzZW7Dp8OjbyBkbyBJQ01TIG5vcyBTaW1wbGVzIE5hY2lvbmFsIHBhcmEgZmFpeGEgZGUgcmVjZWl0YSBicnV0YSBlIGNvbSBjb2JyYW7Dp2EgZG8gSUNNUyBwb3IgU3Vic3RpdHVpw6fDo28gVHJpYnV0w6FyaWEnIH0sXG4gICAgeyBpdGVtMTogJzUwMCcsIGl0ZW0yOiAnSUNNUyBjb2JyYWRvIGFudGVyaW9ybWVudGUgcG9yIHN1YnN0aXR1acOnw6NvIHRyaWJ1dMOhcmlhIChzdWJzdGl0dcOtZG8pIG91IHBvciBhbnRlY2lwYcOnw6NvJyB9LFxuICAgIHsgaXRlbTE6ICc5MDAnLCBpdGVtMjogJ091dHJvcycgfVxuICBdO1xuICBjc3RDb2ZpbnNMaXN0OiBUdXBsZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtcbiAgICB7IGl0ZW0xOiAnMDEnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChiYXNlIGRlIGPDoWxjdWxvID0gdmFsb3IgZGEgb3BlcmHDp8OjbyBhbMOtcXVvdGEgbm9ybWFsIChjdW11bGF0aXZvL27Do28gY3VtdWxhdGl2bykpOycgfSxcbiAgICB7IGl0ZW0xOiAnMDInLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChiYXNlIGRlIGPDoWxjdWxvID0gdmFsb3IgZGEgb3BlcmHDp8OjbyAoYWzDrXF1b3RhIGRpZmVyZW5jaWFkYSkpOycgfSxcbiAgICB7IGl0ZW0xOiAnMDMnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsIChiYXNlIGRlIGPDoWxjdWxvID0gcXVhbnRpZGFkZSB2ZW5kaWRhIHggYWzDrXF1b3RhIHBvciB1bmlkYWRlIGRlIHByb2R1dG8pOycgfSxcbiAgICB7IGl0ZW0xOiAnMDQnLCBpdGVtMjogJyBPcGVyYcOnw6NvIFRyaWJ1dMOhdmVsICh0cmlidXRhw6fDo28gbW9ub2bDoXNpY2EgKGFsw61xdW90YSB6ZXJvKSk7JyB9LFxuICAgIHsgaXRlbTE6ICcwNScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gVHJpYnV0w6F2ZWwgKFN1YnN0aXR1acOnw6NvIFRyaWJ1dMOhcmlhKTsnIH0sXG4gICAgeyBpdGVtMTogJzA2JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBUcmlidXTDoXZlbCAoYWzDrXF1b3RhIHplcm8pOycgfSxcbiAgICB7IGl0ZW0xOiAnMDcnLCBpdGVtMjogJyBPcGVyYcOnw6NvIElzZW50YSBkYSBDb250cmlidWnDp8OjbzsnIH0sXG4gICAgeyBpdGVtMTogJzA4JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBTZW0gSW5jaWTDqm5jaWEgZGEgQ29udHJpYnVpw6fDo287JyB9LFxuICAgIHsgaXRlbTE6ICcwOScsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIFN1c3BlbnPDo28gZGEgQ29udHJpYnVpw6fDo287JyB9LFxuICAgIHsgaXRlbTE6ICc5OScsIGl0ZW0yOiAnIE91dHJhcyBPcGVyYcOnw7VlczsnIH0sXG4gICAgeyBpdGVtMTogJzQ5JywgaXRlbTI6ICcgT3V0cmFzIE9wZXJhw6fDtWVzIGRlIFNhw61kYTsgJyB9LFxuICAgIHsgaXRlbTE6ICc1MCcsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vOyAnIH0sXG4gICAgeyBpdGVtMTogJzUxJywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gRGlyZWl0byBhIENyw6lkaXRvICBWaW5jdWxhZGEgRXhjbHVzaXZhbWVudGUgYSBSZWNlaXRhIE7Do28gVHJpYnV0YWRhIG5vIE1lcmNhZG8gSW50ZXJubyA7JyB9LFxuICAgIHsgaXRlbTE6ICc1MicsIGl0ZW0yOiAnIE9wZXJhw6fDo28gY29tIERpcmVpdG8gYSBDcsOpZGl0byAgVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTMnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTQnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgbm8gTWVyY2FkbyBJbnRlcm5vIGUgZGUgRXhwb3J0YcOnw6NvIDsnIH0sXG4gICAgeyBpdGVtMTogJzU1JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBjb20gRGlyZWl0byBhIENyw6lkaXRvICBWaW5jdWxhZGEgYSBSZWNlaXRhcyBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8gZSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNTYnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGNvbSBEaXJlaXRvIGEgQ3LDqWRpdG8gIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8sIGUgZGUgRXhwb3J0YcOnw6NvOycgfSxcbiAgICB7IGl0ZW0xOiAnNjAnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIEV4Y2x1c2l2YW1lbnRlIGEgUmVjZWl0YSBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vOyAnIH0sXG4gICAgeyBpdGVtMTogJzYxJywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBFeGNsdXNpdmFtZW50ZSBhIFJlY2VpdGEgTsOjbyBUcmlidXRhZGEgbm8gTWVyY2FkbyBJbnRlcm5vOyAnIH0sXG4gICAgeyBpdGVtMTogJzYyJywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBFeGNsdXNpdmFtZW50ZSBhIFJlY2VpdGEgZGUgRXhwb3J0YcOnw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzYzJywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjQnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIGEgUmVjZWl0YXMgVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8gZSBkZSBFeHBvcnRhw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNjUnLCBpdGVtMjogJyBDcsOpZGl0byBQcmVzdW1pZG8gIE9wZXJhw6fDo28gZGUgQXF1aXNpw6fDo28gVmluY3VsYWRhIGEgUmVjZWl0YXMgTsOjb1RyaWJ1dGFkYXMgbm8gTWVyY2FkbyBJbnRlcm5vIGUgZGUgRXhwb3J0YcOnw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzY2JywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIFZpbmN1bGFkYSBhIFJlY2VpdGFzIFRyaWJ1dGFkYXMgZSBOw6NvVHJpYnV0YWRhcyBubyBNZXJjYWRvIEludGVybm8sIGUgZGUgRXhwb3J0YcOnw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzY3JywgaXRlbTI6ICcgQ3LDqWRpdG8gUHJlc3VtaWRvICBPdXRyYXMgT3BlcmHDp8O1ZXM7ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzAnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIHNlbSBEaXJlaXRvIGEgQ3LDqWRpdG87ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzEnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIGNvbSBJc2Vuw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzInLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIGNvbSBTdXNwZW5zw6NvOyAnIH0sXG4gICAgeyBpdGVtMTogJzczJywgaXRlbTI6ICcgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBhIEFsw61xdW90YSBaZXJvOyAnIH0sXG4gICAgeyBpdGVtMTogJzc0JywgaXRlbTI6ICcgT3BlcmHDp8OjbyBkZSBBcXVpc2nDp8OjbyBzZW0gSW5jaWTDqm5jaWEgZGEgQ29udHJpYnVpw6fDo287ICcgfSxcbiAgICB7IGl0ZW0xOiAnNzUnLCBpdGVtMjogJyBPcGVyYcOnw6NvIGRlIEFxdWlzacOnw6NvIHBvciBTdWJzdGl0dWnDp8OjbyBUcmlidXTDoXJpYTsnIH0sXG4gICAgeyBpdGVtMTogJzk4JywgaXRlbTI6ICcgT3V0cmFzIE9wZXJhw6fDtWVzIGRlIEVudHJhZGE7JyB9LFxuICBdO1xuICBuY21FbmNvbnRyYWRvOiBib29sZWFuID0gZmFsc2U7XG4gIG5jbU5hb0VuY29udHJhZG86IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNCdXN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcFJlZEJDRWZldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucFJlZEJDRWZldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC5wUmVkQkNFZmV0X2ljbXMpO1xuICBwaWNtc0VmZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnBpY21zRWZldF9pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC5waWNtc0VmZXRfaWNtcyk7XG4gIHZiY0VmZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZiY0VmZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjRWZldF9pY21zKTtcbiAgdmljbXNFZmV0X2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC52aWNtc0VmZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmljbXNFZmV0X2ljbXMpO1xuXG4gIHBzVF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucHNUX2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBzVF9pY21zKTtcbiAgdmJjc3RSZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZiY3N0UmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZiY3N0UmV0X2ljbXMpO1xuICB2aWNtc1N1YnN0aXR1dG9faWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZpY21zU3Vic3RpdHV0b19pY21zID0gdiwgKCkgPT4gdGhpcy5tb2RlbC52aWNtc1N1YnN0aXR1dG9faWNtcyk7XG4gIHZpY21zc3RSZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZpY21zc3RSZXRfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmljbXNzdFJldF9pY21zKTtcblxuICBwZmNQX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wZmNQX2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBmY1BfaWNtcyk7XG4gIHZiY2ZjUF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjZmNQX2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZiY2ZjUF9pY21zKTtcbiAgcGZjcHNUX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKHYgPT4gdGhpcy5tb2RlbC5wZmNwc1RfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwucGZjcHNUX2ljbXMpO1xuICB2YmNmY3BzVF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwudmJjZmNwc1RfaWNtcyA9IHYsICgpID0+IHRoaXMubW9kZWwudmJjZmNwc1RfaWNtcyk7XG4gIHBmY3BzdFJldF9pY21zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucGZjcHN0UmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBmY3BzdFJldF9pY21zKTtcbiAgdmJjZmNwc3RSZXRfaWNtc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZiY2ZjcHN0UmV0X2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZiY2ZjcHN0UmV0X2ljbXMpO1xuXG4gIHBwaVNfcGlzUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucHBpU19waXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBwaVNfcGlzKTtcbiAgdmJDX3Bpc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZiQ19waXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZiQ19waXMpO1xuXG4gIHBjb2ZpblNfY29maW5zUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcih2ID0+IHRoaXMubW9kZWwucGNvZmluU19jb2ZpbnMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBjb2ZpblNfY29maW5zKTtcbiAgdmJDX2NvZmluc1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIodiA9PiB0aGlzLm1vZGVsLnZiQ19jb2ZpbnMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnZiQ19jb2ZpbnMpO1xuXG5cbiAgcHJlY29WZW5kYVBhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIoKHYpID0+IHRoaXMubW9kZWwucHJlY29WZW5kYSA9IHYgPz8gMCwgKCkgPT4gdGhpcy5tb2RlbC5wcmVjb1ZlbmRhKTtcbiAgcHJlY29DdXN0b1BhcnNlciA9IG5ldyBOdW1iZXJQYXJzZXIoKHYpID0+IHRoaXMubW9kZWwucHJlY29DdXN0byA9IHYgPz8gMCwgKCkgPT4gdGhpcy5tb2RlbC5wcmVjb0N1c3RvKTtcbiAgcHJlY29GdW5jUGFyc2VyID0gbmV3IE51bWJlclBhcnNlcigodikgPT4gdGhpcy5tb2RlbC5wcmVjb0Z1bmNpb25hcmlvID0gdiA/PyAwLCAoKSA9PiB0aGlzLm1vZGVsLnByZWNvRnVuY2lvbmFyaW8pO1xuXG4gIHBJQ01TX2ljbXNQYXJzZXIgPSBuZXcgTnVtYmVyUGFyc2VyKCh2KSA9PiB0aGlzLm1vZGVsLnBJQ01TX2ljbXMgPSB2LCAoKSA9PiB0aGlzLm1vZGVsLnBJQ01TX2ljbXMpO1xuICBsYXp5VHJpZ2dlck5jbSA9IG5ldyBMYXp5VHJpZ2dlcigoKSA9PiB7IHRoaXMuZmluZE5DTSgpOyB9KTtcblxuICBASW5wdXQoKSBlZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgbmV4dElkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBwcm9ncmVzczogbnVtYmVyID0gMDtcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBpbWdVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBfbW9kZWw6IFByb2R1dG8gPSBjcmVhdGVQcm9kdWN0KCk7XG4gIGdldCBtb2RlbCgpOiBQcm9kdXRvIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gIH1cbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbHVlOiBQcm9kdXRvKSB7XG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcbiAgICB0aGlzLnNldEltZ1VybCgpO1xuICAgIHRoaXMuZmluZE5DTSgpO1xuICB9XG5cbiAgdGFiczogUmFkaW9CdXR0b25Hcm91cERhdGFbXSA9IFtcbiAgICB7IG5hbWU6IFwiQ2FtcG9zIEdlcmFpc1wiLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogXCJDYW1wb3MgRmlzY2Fpc1wiLCB2YWx1ZTogMSB9LFxuICAgIHsgbmFtZTogXCJDYXJkw6FwaW8gRGlnaXRhbFwiLCB2YWx1ZTogMiB9XG4gIF07XG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xuICBzZXRvcmVzOiBTZXRvckVzdG9xdWVbXSA9IFtdO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB3czogQ29tbW9uV2ViU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY3JlZW5IZWxwZXI6IFNjcmVlbkhlbHBlclNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFNldG9yZXMoKTtcbiAgfVxuXG4gIGxvYWRTZXRvcmVzKCkge1xuICAgIHRoaXMuaXNCdXN5ID0gdHJ1ZTtcbiAgICB0aGlzLndzLmdldEFsbFNldG9yZXMoKVxuICAgICAgLnN1YnNjcmliZShyID0+IHtcbiAgICAgICAgdGhpcy5zZXRvcmVzID0gcjtcbiAgICAgICAgY29uc29sZS5pbmZvKHIpO1xuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uc2hvd0h0dHBFcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbiAgZWRpdGFyTkNNKCkge1xuICAgIGxldCBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45NSkgKyAncHgnO1xuICAgIGxldCB3aWR0aCA9IDU1MCArICdweCc7XG4gICAgaWYgKHRoaXMuc2NyZWVuSGVscGVyLm1vYmlsZVNjcmVlbikge1xuICAgICAgd2lkdGggPSAod2luZG93LmlubmVyV2lkdGggKiAwLjk5KSArICdweCc7XG4gICAgICBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45OSkgKyAncHgnO1xuICAgIH1cbiAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9kdXRvc05jbURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1wMCcsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgICB0aGlzLm1vZGVsLm5jbSA9IHJlc3VsdC5jb2RpZ29BcGVuYXNEaWdpdG9zO1xuICAgICAgdGhpcy5sYXp5VHJpZ2dlck5jbS5maXJlKCk7XG4gICAgfSk7XG4gIH1cbiAgZWRpdGFyU3ViZ3J1cG8oKSB7XG4gICAgbGV0IGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk1KSArICdweCc7XG4gICAgbGV0IHdpZHRoID0gNTUwICsgJ3B4JztcbiAgICBpZiAodGhpcy5zY3JlZW5IZWxwZXIubW9iaWxlU2NyZWVuKSB7XG4gICAgICB3aWR0aCA9ICh3aW5kb3cuaW5uZXJXaWR0aCAqIDAuOTkpICsgJ3B4JztcbiAgICAgIGhlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjk5KSArICdweCc7XG4gICAgfVxuICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFByb2R1dG9TdWJncnVwb1NlbGVjYW9EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdkaWFsb2ctcDAnLFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuO1xuICAgICAgdGhpcy5tb2RlbC5zdWJncnVwb0lkID0gcmVzdWx0LmlkO1xuICAgICAgdGhpcy5tb2RlbC5zdWJncnVwb05vbWUgPSByZXN1bHQubm9tZTtcbiAgICB9KTtcbiAgfVxuICBlZGl0YXJHcnVwbygpIHtcbiAgICBsZXQgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTUpICsgJ3B4JztcbiAgICBsZXQgd2lkdGggPSA1NTAgKyAncHgnO1xuICAgIGlmICh0aGlzLnNjcmVlbkhlbHBlci5tb2JpbGVTY3JlZW4pIHtcbiAgICAgIHdpZHRoID0gKHdpbmRvdy5pbm5lcldpZHRoICogMC45OSkgKyAncHgnO1xuICAgICAgaGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCAqIDAuOTkpICsgJ3B4JztcbiAgICB9XG4gICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUHJvZHV0b0dydXBvU2VsZWNhb0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1wMCcsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgICB0aGlzLm1vZGVsLmdydXBvSWQgPSByZXN1bHQuaWQ7XG4gICAgICB0aGlzLm1vZGVsLmdydXBvTm9tZSA9IHJlc3VsdC5ub21lO1xuICAgIH0pO1xuICB9XG4gIGVkaXRhckNhdGVnb3JpYUNhcmRhcGlvKCkge1xuICAgIGxldCBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45NSkgKyAncHgnO1xuICAgIGxldCB3aWR0aCA9IDU1MCArICdweCc7XG4gICAgaWYgKHRoaXMuc2NyZWVuSGVscGVyLm1vYmlsZVNjcmVlbikge1xuICAgICAgd2lkdGggPSAod2luZG93LmlubmVyV2lkdGggKiAwLjk5KSArICdweCc7XG4gICAgICBoZWlnaHQgPSAod2luZG93LmlubmVySGVpZ2h0ICogMC45OSkgKyAncHgnO1xuICAgIH1cbiAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9kdXRvQ2F0ZWdvcmlhQ2FyZGFwaW9TZWxlY2FvRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICBwYW5lbENsYXNzOiAnZGlhbG9nLXAwJyxcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybjtcbiAgICAgIHRoaXMubW9kZWwuY2F0ZWdvcmlhQ2FyZGFwaW9JZCA9IHJlc3VsdC5pZDtcbiAgICAgIHRoaXMubW9kZWwuY2F0ZWdvcmlhQ2FyZGFwaW9Ob21lID0gcmVzdWx0Lm5vbWU7XG4gICAgfSk7XG4gIH1cbiAgY2hhbmdlTW9kbyhldjogUmFkaW9CdXR0b25Hcm91cERhdGEpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gZXYudmFsdWU7XG4gIH1cblxuICB1cGxvYWRGaWxlKGZpbGVzIDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm47XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmlsZVRvVXBsb2FkID0gPEZpbGU+ZmlsZXNbMF07XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlVG9VcGxvYWQsIGZpbGVUb1VwbG9hZC5uYW1lKTtcbiAgICB0aGlzLmh0dHAucG9zdCh0aGlzLndzLlBST0RVVE9fQkFTRV9VUkwgKyBcIkltYWdlbT9wcm9kdXRvSWQ9XCIgKyB0aGlzLm1vZGVsLmlkLCBmb3JtRGF0YSxcbiAgICAgIHtcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6ICd0b2tlbiAnICsgdGhpcy5hdXRoLnRva2VuLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgdG90YWwgPSBldmVudC50b3RhbCA/PyAtMTtcbiAgICAgICAgICB0aGlzLnByb2dyZXNzID0gTWF0aC5yb3VuZCgxMDAgKiBldmVudC5sb2FkZWQgLyB0b3RhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICdTdWNlc3NvJztcbiAgICAgICAgICB0aGlzLmltZ1VybCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW1nVXJsKG5ldyBEYXRlKCkuZ2V0TWludXRlcygpICsgXCJcIik7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgIGNvbnN0IGh0dHBFcnJvcjogSHR0cEVycm9yUmVzcG9uc2UgPSBlcnI7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGh0dHBFcnJvci5lcnJvcjtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0SW1nVXJsKHVwbG9hZDogc3RyaW5nfHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuO1xuICAgIHRoaXMuaW1nVXJsID0gdGhpcy53cy5NRURJQV9QUk9EVVRPX0lNQUdFTV9VUkwgK1xuICAgICAgJz9wcm9kdXRvSWQ9JyArIHRoaXMubW9kZWwuaWQgK1xuICAgICAgJyZ0b2tlbj0nICsgdGhpcy5hdXRoLnRva2VuICtcbiAgICAgICh1cGxvYWQgIT09IHVuZGVmaW5lZCA/ICcmdXBsb2FkPScgKyB1cGxvYWQgOiAnJyk7XG4gIH1cblxuICBmaW5kTkNNKCkge1xuICAgIHRoaXMubmNtRW5jb250cmFkbyA9IGZhbHNlO1xuICAgIHRoaXMubmNtTmFvRW5jb250cmFkbyA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5tb2RlbC5uY20pIHJldHVybjtcbiAgICB0aGlzLmlzQnVzeSA9IHRydWU7XG4gICAgdGhpcy53cy5maW5kTmNtKHRoaXMubW9kZWwubmNtKVxuICAgICAgLnN1YnNjcmliZShyID0+IHtcbiAgICAgICAgdGhpcy5uY21FbmNvbnRyYWRvID0gciAhPSBudWxsO1xuICAgICAgICB0aGlzLm5jbU5hb0VuY29udHJhZG8gPSByID09IG51bGw7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhyKTtcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcbiAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgIHRoaXMuaXNCdXN5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uLnNob3dIdHRwRXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTZweFwiPlxuICAgIDxveC1yYWRpby1idXR0b24tZ3JvdXAgKGNoYW5nZSk9XCJjaGFuZ2VNb2RvKCRldmVudClcIiBbaXRlbXNdPVwidGFic1wiIGNsYXNzPVwidG9vbC1pdGVtLWNvbnRhaW5lclwiPlxuICAgIDwvb3gtcmFkaW8tYnV0dG9uLWdyb3VwPlxuPC9kaXY+XG48ZGl2IFtAbWVudUxhdGVyYWxdIGNsYXNzPVwidmJveFwiICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT0gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+Q8OzZGlnbzwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImlkXCIgW2F0dHIucmVhZG9ubHldPVwiZWRpdE1vZGVcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmlkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmV4dElkQ2xpY2suZW1pdCgpXCIgKm5nSWY9XCIhZWRpdE1vZGVcIiBjbGFzcz1cImZvcm0taW5saW5lLWJ1dHRvbiBidG4tZm9ybS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRidWxiXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWFyZ2luLWxlZnQtOFwiPlxuICAgICAgICAgICAgPGxhYmVsPlJlZmVyw6puY2lhPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInJlZmVyZW5jaWFcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLnJlZmVyZW5jaWFcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIiB0YWJpbmRleD1cIjJcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsPk5vbWU8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgaWQ9XCJub21lXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5ub21lXCIgY2RrRm9jdXNJbml0aWFsIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTMwMFwiIHRhYmluZGV4PVwiMlwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+UHJlw6dvIGRlIFZlbmRhPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInByZWNvVmVuZGFcIiBbbmdNb2RlbF09XCJtb2RlbC5wcmVjb1ZlbmRhIHwgbnVtYmVyOicxLjItMidcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByZWNvVmVuZGFQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwcmVjb1ZlbmRhUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCIgdGFiaW5kZXg9XCIyXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCAgbWFyZ2luLWxlZnQtOFwiPlxuICAgICAgICAgICAgPGxhYmVsPlByZcOnbyBwLyBGdW5jLjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwcmVjb0Z1bmNpb25hcmlvXCIgW25nTW9kZWxdPVwibW9kZWwucHJlY29GdW5jaW9uYXJpbyB8IG51bWJlcjonMS4yLTInXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwcmVjb0Z1bmNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwcmVjb0Z1bmNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIiB0YWJpbmRleD1cIjJcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwICBtYXJnaW4tbGVmdC04XCI+XG4gICAgICAgICAgICA8bGFiZWw+UHJlw6dvIGRlIEN1c3RvPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInByZWNvQ3VzdG9cIiBbbmdNb2RlbF09XCJtb2RlbC5wcmVjb0N1c3RvIHwgbnVtYmVyOicxLjItMidcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInByZWNvQ3VzdG9QYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwcmVjb0N1c3RvUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCIgdGFiaW5kZXg9XCIyXCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbD5HcnVwbzwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZ3J1cG9cIiAoY2xpY2spPVwiZWRpdGFyR3J1cG8oKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGdyb3ctMSBpbnB1dC1zZWxlY2FvIGlucHV0LTMwMFwiPlxuICAgICAgICAgICAgICAgIHt7bW9kZWwuZ3J1cG9Ob21lfX0gPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0YXJHcnVwbygpXCIgY2xhc3M9XCJmb3JtLWlubGluZS1idXR0b24gYnRuLWZvcm0tbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsPlN1YmdydXBvPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWJncnVwb1wiIChjbGljayk9XCJlZGl0YXJTdWJncnVwbygpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZ3Jvdy0xIGlucHV0LXNlbGVjYW8gaW5wdXQtMzAwXCI+XG4gICAgICAgICAgICAgICAge3ttb2RlbC5zdWJncnVwb05vbWV9fSA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRhclN1YmdydXBvKClcIiBjbGFzcz1cImZvcm0taW5saW5lLWJ1dHRvbiBidG4tZm9ybS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+VW5pZGFkZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ1bmlkYWRlXCIgWyhuZ01vZGVsKV09XCJtb2RlbC51bmlkYWRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkVzdG9xdWUgTWluLjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJlc3RvcXVlTWluaW1vXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5lc3RvcXVlTWluaW1vXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5Dw7NkaWdvIFBhdHJpbcO0bmlvPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cImNvZGlnb1BhdHJpbW9uaW9cIiBbKG5nTW9kZWwpXT1cIm1vZGVsLmNvZGlnb1BhdHJpbW9uaW9cIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIlxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjM2XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPk9icy48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwib2JzXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5vYnNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0zMDBcIiBtYXhsZW5ndGg9XCIzMDBcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5TZXRvciBTdWJlc3RvcXVlPC9sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cIm1vZGVsLnNldG9yU3ViRXN0b3F1ZUlkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2Ygc2V0b3Jlc1wiIFt2YWx1ZV09XCJpLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5ub21lfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPlF0ZC4gU3ViZXN0b3F1ZTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJxdGRNaW5TdWJFc3RvcXVlXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5xdGRNaW5TdWJFc3RvcXVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInZib3hcIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5lc3RvcXVlQ29udHJvbGFkb1wiIHRhYmluZGV4PS0xPkNvbnRyb2xhZG8gbm8gRXN0b3F1ZTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5pbXByaW1pQ296aW5oYVwiIHRhYmluZGV4PS0xPkltcHJpbWUgQ296aW5oYTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5pbXByaW1lQ29ycmVkb3JcIiB0YWJpbmRleD0tMT5JbXByaW1lIENvcnJlZG9yPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIm1vZGVsLnZlck5hUmVjZXBjYW9cIiB0YWJpbmRleD0tMT5WZXIgbmEgUmVjZXDDp8OjbzwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJtb2RlbC5vbWl0ZUNsaWVudGVcIiB0YWJpbmRleD0tMT5Ow6NvIEV4aWJlIHBhcmEgbyBDbGllbnRlIG5hIFNhw61kYVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwuaXNBdGl2b1wiIHRhYmluZGV4PS0xPkF0aXZhZG88L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG48ZGl2IFtAbWVudUxhdGVyYWxdIGNsYXNzPVwidmJveFwiICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT0gMVwiPlxuXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDE2cHg7XCIgY2xhc3M9XCJ2Ym94XCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwuZW1pdGVORkNlXCIgdGFiaW5kZXg9LTE+RW1pdGUgRmlzY2FsXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkdUSU48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiZ3RpblwiIFsobmdNb2RlbCldPVwibW9kZWwuZ3RpblwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiIHBsYWNlaG9sZGVyPVwiU0VNIEdUSU5cIlxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNGT1A8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiY2ZvcFwiIFsobmdNb2RlbCldPVwibW9kZWwuY2ZvcFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIG1hdElucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMFwiXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNFwiPlxuICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNmb3BMaXN0XCIgW3ZhbHVlXT1cIm9wdGlvbi5pdGVtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7e29wdGlvbi5pdGVtMX19IDxzbWFsbD57e29wdGlvbi5pdGVtMn19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPk5DTTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJveFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIm5jbVwiIChpbnB1dCk9XCJsYXp5VHJpZ2dlck5jbS5maXJlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsLm5jbVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjhcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0YXJOQ00oKVwiIGNsYXNzPVwiZm9ybS1pbmxpbmUtYnV0dG9uIGJ0bi1mb3JtLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYnVzY2FuZG9cIiAqbmdJZj1cImlzQnVzeVwiPkJ1c2NhbmRvLi4uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgZW5jb250cmFkb1wiICpuZ0lmPVwibmNtRW5jb250cmFkb1wiPkVuY29udHJhZG88L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBuYW8tZW5jb250cmFkb1wiICpuZ0lmPVwibmNtTmFvRW5jb250cmFkb1wiPk7Do28gZW5jb250cmFkbzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaGJveCBnYXAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPkNFU1Q8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiY2VzdFwiIFsobmdNb2RlbCldPVwibW9kZWwuY2VzdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEyMFwiIG1heGxlbmd0aD1cIjdcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+SUNNUyAoRUNGL1NBVCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiYWxpcXVvdGFJQ01TXCIgWyhuZ01vZGVsKV09XCJtb2RlbC5hbGlxdW90YUlDTVNcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5TLiBULiAoRUNGL1NBVCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwic2l0VHJpYlwiIFsobmdNb2RlbCldPVwibW9kZWwuc2l0VHJpYlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1NUXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIiBtYXhsZW5ndGg9XCI1XCI+XG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b1NUPVwibWF0QXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdExpc3RcIiBbdmFsdWVdPVwib3B0aW9uLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLml0ZW0xfX0gPHNtYWxsPnt7b3B0aW9uLml0ZW0yfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGg0PkNhbXBvcyBkYSBORkMtZTwvaDQ+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DU1QvQ1NPU048L2xhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibW9kZWwuY3NUX2ljbXNcIiAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgY3N0SUNNU0xpc3RcIiBbdmFsdWVdPVwiaS5pdGVtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2kuaXRlbTF9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+QWxpcS4gSUNNUyAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicElDTVNfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBJQ01TX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicElDTVNfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBJQ01TX2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+TW9kYWxpZGFkZSBCQzwvbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJtb2RlbC5tb2RCQ19pY21zXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgbW9kQmFzZUlDTVNcIiBbdmFsdWVdPVwiaS5pdGVtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2kuaXRlbTF9fSA8c21hbGw+e3tpLml0ZW0yfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGg2PklDTVMgRWZldGl2byBDU1Q2MC9DU09TTjUwMDwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wUmVkQkNFZmV0ICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwUmVkQkNFZmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5wUmVkQkNFZmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicFJlZEJDRWZldF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicFJlZEJDRWZldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnBJQ01TRWZldCAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicGljbXNFZmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC5waWNtc0VmZXRfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwaWNtc0VmZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBpY21zRWZldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZCQ0VmZXQgKFIkKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2YmNFZmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52YmNFZmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJjRWZldF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmJjRWZldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZJQ01TRWZldCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZpY21zRWZldF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwudmljbXNFZmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmljbXNFZmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2aWNtc0VmZXRfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aDY+U3Vic3RpdHVpw6fDo28gVHJpYnV0w6FyaWEgKFNUKTwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wU1QgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBzVF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucHNUX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHNUX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwc1RfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD52QkNTVFJldCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY3N0UmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52YmNzdFJldF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiY3N0UmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNzdFJldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPnZJQ01TU3VicyAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZpY21zU3Vic3RpdHV0b19pY21zXCIgW25nTW9kZWxdPVwibW9kZWwudmljbXNTdWJzdGl0dXRvX2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmljbXNTdWJzdGl0dXRvX2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cInZpY21zU3Vic3RpdHV0b19pY21zUGFyc2VyLmNoZWNrb3V0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD52SUNNU1NUUmV0IChSJCk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmljbXNzdFJldF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwudmljbXNzdFJldF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZpY21zc3RSZXRfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZpY21zc3RSZXRfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aDY+RnVuZG8gZGUgQ29tYmF0ZSBhIFBvYnJlc2E8L2g2PlxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+cEZDUCAoJSk8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwicGZjUF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucGZjUF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInBmY1BfaWNtc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInBmY1BfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD52QkNGQ1AgKFIkKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2YmNmY1BfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiY2ZjUF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiY2ZjUF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmJjZmNQX2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+cEZDUFNUICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwZmNwc1RfaWNtc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBmY3BzVF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInBmY3BzVF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicGZjcHNUX2ljbXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+dkJDRkNQU1QgKFIkKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2YmNmY3BzVF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwudmJjZmNwc1RfaWNtcyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YmNmY3BzVF9pY21zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmJjZmNwc1RfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5wRkNQU1RSZXQgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBmY3BzdFJldF9pY21zXCIgW25nTW9kZWxdPVwibW9kZWwucGZjcHN0UmV0X2ljbXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGZjcHN0UmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwZmNwc3RSZXRfaWNtc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD52QkNGQ1BTVFJldCAoUiQpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInZiY2ZjcHN0UmV0X2ljbXNcIiBbbmdNb2RlbF09XCJtb2RlbC52YmNmY3BzdFJldF9pY21zIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZiY2ZjcHN0UmV0X2ljbXNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJ2YmNmY3BzdFJldF9pY21zUGFyc2VyLmNoZWNrb3V0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LTEwMCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxoNj5QSVM8L2g2PlxuICAgIDxkaXYgY2xhc3M9XCJoYm94IGdhcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+Q1NUL1BJUzwvbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJtb2RlbC5jc1RfcGlzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTIwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgTmVuaHVtXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpIG9mIGNzdENvZmluc0xpc3RcIiBbdmFsdWVdPVwiaS5pdGVtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2kuaXRlbTF9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+QWxpcXVvdGEgUElTICglKTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJwcGlTX3Bpc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnBwaVNfcGlzIHwgbnVtYmVyOicxLjItMidcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInBwaVNfcGlzUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwicHBpU19waXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWw+UElTIEJDICU8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwidmJDX3Bpc1wiIFtuZ01vZGVsXT1cIm1vZGVsLnZiQ19waXMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmJDX3Bpc1BhcnNlci5wYXJzZSgkZXZlbnQpXCIgKGZvY3Vzb3V0KT1cInZiQ19waXNQYXJzZXIuY2hlY2tvdXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtMTAwIHRleHQtcmlnaHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGg2PkNPRklOUzwvaDY+XG4gICAgPGRpdiBjbGFzcz1cImhib3ggZ2FwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DU1QvQ09GSU5TPC9sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cIm1vZGVsLmNzVF9jb2ZpbnNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMjBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBOZW5odW1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGkgb2YgY3N0Q29maW5zTGlzdFwiIFt2YWx1ZV09XCJpLml0ZW0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aS5pdGVtMX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5BbGlxLiBDT0ZJTlMgKCUpPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cInBjb2ZpblNfY29maW5zXCIgW25nTW9kZWxdPVwibW9kZWwucGNvZmluU19jb2ZpbnMgfCBudW1iZXI6JzEuMi0yJ1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicGNvZmluU19jb2ZpbnNQYXJzZXIucGFyc2UoJGV2ZW50KVwiIChmb2N1c291dCk9XCJwY29maW5TX2NvZmluc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbD5DT0ZJTlMgQkMgJTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2YkNfY29maW5zXCIgW25nTW9kZWxdPVwibW9kZWwudmJDX2NvZmlucyB8IG51bWJlcjonMS4yLTInXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YkNfY29maW5zUGFyc2VyLnBhcnNlKCRldmVudClcIiAoZm9jdXNvdXQpPVwidmJDX2NvZmluc1BhcnNlci5jaGVja291dCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0xMDAgdGV4dC1yaWdodFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IFtAbWVudUxhdGVyYWxdIGNsYXNzPVwidmJveFwiICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT0gMlwiPlxuXG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDE2cHg7XCIgY2xhc3M9XCJ2Ym94XCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwibW9kZWwuZGlzcG9uaXZlbENhcmRhcGlvXCIgdGFiaW5kZXg9LTE+RGlzcG9uw612ZWwgbm8gQ2FyZMOhcGlvIERpZ2l0YWxcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbD5EZXNjcmnDp8OjbzwvbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYSBpZD1cImRlc2NyaWNhb1wiIFsobmdNb2RlbCldPVwibW9kZWwuZGVzY3JpY2FvXCIgY29scz1cIjQwXCIgcm93cz1cIjVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC0zMDBcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIyXCI+PC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWw+Q2F0ZWdvcmlhPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhib3hcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJjYXRlZ29yaWFDYXJkYXBpb1wiIChjbGljayk9XCJlZGl0YXJDYXRlZ29yaWFDYXJkYXBpbygpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBncm93LTEgaW5wdXQtc2VsZWNhbyBpbnB1dC0zMDBcIj5cbiAgICAgICAgICAgICAgICB7e21vZGVsLmNhdGVnb3JpYUNhcmRhcGlvTm9tZX19IDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdGFyQ2F0ZWdvcmlhQ2FyZGFwaW8oKVwiIGNsYXNzPVwiZm9ybS1pbmxpbmUtYnV0dG9uIGJ0bi1mb3JtLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbWFnZW0tY29udGFpbmVyXCIgKm5nSWY9XCJlZGl0TW9kZVwiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiaW1nVXJsXCIgY2xhc3M9XCJpbWctZmx1aWRcIiAqbmdJZj1cImltZ1VybFwiIC8+XG5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGUgcGxhY2Vob2xkZXI9XCJDaG9vc2UgZmlsZVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZShmaWxlLmZpbGVzKVwiIGFjY2VwdD1cIi5qcGcsLnBuZ1wiXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZmlsZS5jbGljaygpXCI+RXNjb2xoZXIgSW1hZ2VtPC9idXR0b24+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRcIiAqbmdJZj1cInByb2dyZXNzID4gMFwiPlxuICAgICAgICAgICAge3twcm9ncmVzc319JVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkXCIgKm5nSWY9XCJtZXNzYWdlXCI+XG4gICAgICAgICAgICB7e21lc3NhZ2V9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbjwvZGl2PiJdfQ==