@seniorsistemas/yms-integration 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/seniorsistemas-yms-integration.umd.js +2922 -1185
- package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
- package/esm2015/index.js +9 -1
- package/esm2015/seniorsistemas-yms-integration.js +48 -38
- package/esm2015/src/devices/balancas/balancas.service.js +4 -1
- package/esm2015/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.js +8 -25
- package/esm2015/src/devices/balancas/weightScale.js +1 -1
- package/esm2015/src/devices/cancelas/cancelas.service.js +5 -1
- package/esm2015/src/devices/cancelas/controlador-cancela/controlador-cancela.component.js +91 -21
- package/esm2015/src/devices/cancelas/gate.js +1 -1
- package/esm2015/src/devices/dock/dock.module.js +12 -0
- package/esm2015/src/devices/dock/dock.service.js +22 -0
- package/esm2015/src/erp-senior/components/nota-form/nota-form.component.js +24 -9
- package/esm2015/src/erp-senior/core/entities/agenda/agenda.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/cidade/cidade.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/contrato-compra/contrato-compra.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/contrato-compra-item/contrato-compra-item.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/derivacao/derivacao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/devolucao/devolucao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/empresa/empresa.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/estado/estado.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/expedicao/expedicao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/familia-produto/familia-produto.js +5 -7
- package/esm2015/src/erp-senior/core/entities/familia-produto/familia-produto.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/filial/filial.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/log-integracao/log-integracao.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/motorista/motorista.js +1 -1
- package/esm2015/src/erp-senior/core/entities/ordem-compra/ordem-compra.module.js +7 -2
- package/esm2015/src/erp-senior/core/entities/pais/pais.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pedido-venda/pedido-venda.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pedido-venda-item/pedido-venda-item.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa/pessoa.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.js +1 -5
- package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.js +1 -7
- package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa-fisica/pessoa-fisica.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/pessoa-juridica/pessoa-juridica.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/processo-avulso/processo-avulso.module.js +7 -2
- package/esm2015/src/erp-senior/core/entities/produto/produto.js +1 -9
- package/esm2015/src/erp-senior/core/entities/produto/produto.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/recebimento-contrato/recebimento.module.js +7 -2
- package/esm2015/src/erp-senior/core/entities/recebimento-ordem-compra/recebimento-ordem-compra.module.js +11 -12
- package/esm2015/src/erp-senior/core/entities/royalty/royalty.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/safra/safra.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/transgenia/transgenia.js +1 -1
- package/esm2015/src/erp-senior/core/entities/transportadora/transportadora.module.js +2 -2
- package/esm2015/src/erp-senior/core/entities/unidade-medida/unidade-medida.module.js +2 -2
- package/esm2015/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
- package/esm2015/src/erp-senior/devolucao/form/devolucao-form.component.js +12 -7
- package/esm2015/src/erp-senior/expedicao/form/expedicao-form.component.js +15 -21
- package/esm2015/src/erp-senior/processo-avulso/form/processo-avulso-form.component.js +7 -2
- package/esm2015/src/erp-senior/recebimento/contrato-form/contrato-form.component.js +20 -4
- package/esm2015/src/erp-senior/recebimento/form/recebimento-form.component.js +242 -199
- package/esm2015/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +29 -20
- package/esm2015/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.js +13 -4
- package/esm2015/src/sam-senior/components/credencial-form/credencial-form.component.js +126 -0
- package/esm2015/src/sam-senior/components/scheduling/lobby.service.js +22 -0
- package/esm2015/src/sam-senior/components/scheduling/scheduling.component.js +191 -0
- package/esm2015/src/sam-senior/components/scheduling/shechuling.service.js +40 -0
- package/esm2015/src/sam-senior/components/visited-info/visited-info.component.js +59 -0
- package/esm2015/src/sam-senior/components/visited-info/visited-info.service.js +26 -0
- package/esm2015/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.js +84 -0
- package/esm2015/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.js +364 -0
- package/esm2015/src/sam-senior/components/visitor-list/visitor-list.component.js +64 -0
- package/esm2015/src/sam-senior/components/visitor-list/visitor-list.service.js +26 -0
- package/esm2015/src/sam-senior/components/visitor-list.module.js +36 -0
- package/esm2015/src/sam-senior/core/entity-service.js +102 -0
- package/esm2015/src/sam-senior/core/lookup.js +184 -0
- package/esm2015/src/sam-senior/core/utils.js +26 -0
- package/esm2015/src/sam-senior/entities/credential-card-dto.js +9 -0
- package/esm2015/src/sam-senior/entities/lobby-dto.js +3 -0
- package/esm2015/src/sam-senior/entities/scheduling-dto.js +3 -0
- package/esm2015/src/sam-senior/entities/scheduling-visitors.js +3 -0
- package/esm2015/src/sam-senior/entities/scheduling.js +26 -0
- package/esm2015/src/sam-senior/entities/visited.js +3 -0
- package/esm2015/src/sam-senior/entities/visitor-credentials-dto.js +6 -0
- package/esm2015/src/sam-senior/entities/visitor-dto.js +1 -0
- package/esm2015/src/sam-senior/entities/visitor-situation.js +10 -0
- package/esm2015/src/sam-senior/form/form-sam.component.js +61 -0
- package/esm2015/src/sam-senior/models/card-credential.js +7 -0
- package/esm2015/src/sam-senior/models/visit-situation.js +8 -0
- package/esm2015/src/sam-senior/models/visitor-situation.js +10 -0
- package/esm2015/src/sam-senior/models/visitor.js +23 -0
- package/esm2015/src/sam-senior/sam-senior.module.js +75 -0
- package/esm2015/src/utils/build-form-field.js +28 -0
- package/esm5/index.js +9 -1
- package/esm5/seniorsistemas-yms-integration.js +48 -38
- package/esm5/src/devices/balancas/balancas.service.js +4 -1
- package/esm5/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.js +8 -25
- package/esm5/src/devices/balancas/weightScale.js +1 -1
- package/esm5/src/devices/cancelas/cancelas.service.js +5 -1
- package/esm5/src/devices/cancelas/controlador-cancela/controlador-cancela.component.js +94 -21
- package/esm5/src/devices/cancelas/gate.js +1 -1
- package/esm5/src/devices/dock/dock.module.js +15 -0
- package/esm5/src/devices/dock/dock.service.js +25 -0
- package/esm5/src/erp-senior/components/nota-form/nota-form.component.js +24 -9
- package/esm5/src/erp-senior/core/entities/agenda/agenda.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/cidade/cidade.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/contrato-compra/contrato-compra.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/contrato-compra-item/contrato-compra-item.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/derivacao/derivacao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/devolucao/devolucao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/empresa/empresa.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/estado/estado.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/expedicao/expedicao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/familia-produto/familia-produto.js +5 -7
- package/esm5/src/erp-senior/core/entities/familia-produto/familia-produto.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/filial/filial.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/log-integracao/log-integracao.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/motorista/motorista.js +1 -1
- package/esm5/src/erp-senior/core/entities/ordem-compra/ordem-compra.module.js +7 -2
- package/esm5/src/erp-senior/core/entities/pais/pais.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pedido-venda/pedido-venda.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pedido-venda-item/pedido-venda-item.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa/pessoa.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.js +1 -5
- package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.js +1 -7
- package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa-fisica/pessoa-fisica.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/pessoa-juridica/pessoa-juridica.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/processo-avulso/processo-avulso.module.js +7 -2
- package/esm5/src/erp-senior/core/entities/produto/produto.js +1 -9
- package/esm5/src/erp-senior/core/entities/produto/produto.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/recebimento-contrato/recebimento.module.js +7 -2
- package/esm5/src/erp-senior/core/entities/recebimento-ordem-compra/recebimento-ordem-compra.module.js +11 -12
- package/esm5/src/erp-senior/core/entities/royalty/royalty.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/safra/safra.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/transgenia/transgenia.js +1 -1
- package/esm5/src/erp-senior/core/entities/transportadora/transportadora.module.js +2 -2
- package/esm5/src/erp-senior/core/entities/unidade-medida/unidade-medida.module.js +2 -2
- package/esm5/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
- package/esm5/src/erp-senior/devolucao/form/devolucao-form.component.js +12 -7
- package/esm5/src/erp-senior/expedicao/form/expedicao-form.component.js +15 -21
- package/esm5/src/erp-senior/processo-avulso/form/processo-avulso-form.component.js +7 -2
- package/esm5/src/erp-senior/recebimento/contrato-form/contrato-form.component.js +21 -4
- package/esm5/src/erp-senior/recebimento/form/recebimento-form.component.js +244 -203
- package/esm5/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +29 -20
- package/esm5/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.js +14 -4
- package/esm5/src/sam-senior/components/credencial-form/credencial-form.component.js +144 -0
- package/esm5/src/sam-senior/components/scheduling/lobby.service.js +25 -0
- package/esm5/src/sam-senior/components/scheduling/scheduling.component.js +199 -0
- package/esm5/src/sam-senior/components/scheduling/shechuling.service.js +43 -0
- package/esm5/src/sam-senior/components/visited-info/visited-info.component.js +56 -0
- package/esm5/src/sam-senior/components/visited-info/visited-info.service.js +29 -0
- package/esm5/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.js +87 -0
- package/esm5/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.js +384 -0
- package/esm5/src/sam-senior/components/visitor-list/visitor-list.component.js +82 -0
- package/esm5/src/sam-senior/components/visitor-list/visitor-list.service.js +29 -0
- package/esm5/src/sam-senior/components/visitor-list.module.js +37 -0
- package/esm5/src/sam-senior/core/entity-service.js +107 -0
- package/esm5/src/sam-senior/core/lookup.js +229 -0
- package/esm5/src/sam-senior/core/utils.js +28 -0
- package/esm5/src/sam-senior/entities/credential-card-dto.js +13 -0
- package/esm5/src/sam-senior/entities/lobby-dto.js +7 -0
- package/esm5/src/sam-senior/entities/scheduling-dto.js +7 -0
- package/esm5/src/sam-senior/entities/scheduling-visitors.js +7 -0
- package/esm5/src/sam-senior/entities/scheduling.js +30 -0
- package/esm5/src/sam-senior/entities/visited.js +7 -0
- package/esm5/src/sam-senior/entities/visitor-credentials-dto.js +8 -0
- package/esm5/src/sam-senior/entities/visitor-dto.js +1 -0
- package/esm5/src/sam-senior/entities/visitor-situation.js +10 -0
- package/esm5/src/sam-senior/form/form-sam.component.js +64 -0
- package/esm5/src/sam-senior/models/card-credential.js +7 -0
- package/esm5/src/sam-senior/models/visit-situation.js +8 -0
- package/esm5/src/sam-senior/models/visitor-situation.js +10 -0
- package/esm5/src/sam-senior/models/visitor.js +32 -0
- package/esm5/src/sam-senior/sam-senior.module.js +76 -0
- package/esm5/src/utils/build-form-field.js +29 -0
- package/fesm2015/seniorsistemas-yms-integration.js +2763 -1193
- package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
- package/fesm5/seniorsistemas-yms-integration.js +2888 -1169
- package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
- package/index.d.ts +7 -0
- package/package.json +3 -3
- package/seniorsistemas-yms-integration.d.ts +47 -37
- package/seniorsistemas-yms-integration.metadata.json +1 -1
- package/src/devices/balancas/balancas.service.d.ts +1 -0
- package/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.d.ts +2 -11
- package/src/devices/balancas/weightScale.d.ts +2 -2
- package/src/devices/cancelas/cancelas.service.d.ts +1 -0
- package/src/devices/cancelas/controlador-cancela/controlador-cancela.component.d.ts +12 -8
- package/src/devices/cancelas/gate.d.ts +2 -0
- package/src/devices/dock/dock.module.d.ts +2 -0
- package/src/devices/dock/dock.service.d.ts +10 -0
- package/src/erp-senior/components/nota-form/nota-form.component.d.ts +7 -1
- package/src/erp-senior/core/entities/motorista/motorista.d.ts +3 -0
- package/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.d.ts +2 -0
- package/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.d.ts +2 -0
- package/src/erp-senior/core/entities/transgenia/transgenia.d.ts +2 -0
- package/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.d.ts +2 -0
- package/src/erp-senior/devolucao/form/devolucao-form.component.d.ts +2 -0
- package/src/erp-senior/processo-avulso/form/processo-avulso-form.component.d.ts +2 -0
- package/src/erp-senior/recebimento/contrato-form/contrato-form.component.d.ts +10 -4
- package/src/erp-senior/recebimento/form/recebimento-form.component.d.ts +25 -10
- package/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.d.ts +4 -2
- package/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.d.ts +6 -2
- package/src/sam-senior/components/credencial-form/credencial-form.component.d.ts +29 -0
- package/src/sam-senior/components/scheduling/lobby.service.d.ts +9 -0
- package/src/sam-senior/components/scheduling/scheduling.component.d.ts +43 -0
- package/src/sam-senior/components/scheduling/shechuling.service.d.ts +14 -0
- package/src/sam-senior/components/visited-info/visited-info.component.d.ts +15 -0
- package/src/sam-senior/components/visited-info/visited-info.service.d.ts +10 -0
- package/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.d.ts +22 -0
- package/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.d.ts +56 -0
- package/src/sam-senior/components/visitor-list/visitor-list.component.d.ts +16 -0
- package/src/sam-senior/components/visitor-list/visitor-list.service.d.ts +10 -0
- package/src/sam-senior/components/visitor-list.module.d.ts +5 -0
- package/src/sam-senior/core/entity-service.d.ts +35 -0
- package/src/sam-senior/core/lookup.d.ts +38 -0
- package/src/sam-senior/core/utils.d.ts +18 -0
- package/src/sam-senior/entities/credential-card-dto.d.ts +12 -0
- package/src/sam-senior/entities/lobby-dto.d.ts +5 -0
- package/src/sam-senior/entities/scheduling-dto.d.ts +11 -0
- package/src/sam-senior/entities/scheduling-visitors.d.ts +6 -0
- package/src/sam-senior/entities/scheduling.d.ts +12 -0
- package/src/sam-senior/entities/visited.d.ts +4 -0
- package/src/sam-senior/entities/visitor-credentials-dto.d.ts +6 -0
- package/src/sam-senior/entities/visitor-dto.d.ts +10 -0
- package/src/sam-senior/entities/visitor-situation.d.ts +8 -0
- package/src/sam-senior/form/form-sam.component.d.ts +18 -0
- package/src/sam-senior/models/card-credential.d.ts +16 -0
- package/src/sam-senior/models/visit-situation.d.ts +6 -0
- package/src/sam-senior/models/visitor-situation.d.ts +8 -0
- package/src/sam-senior/models/visitor.d.ts +24 -0
- package/src/sam-senior/sam-senior.module.d.ts +6 -0
- package/src/utils/build-form-field.d.ts +9 -0
|
@@ -145,26 +145,6 @@ let ExpedicaoFormComponent = class ExpedicaoFormComponent {
|
|
|
145
145
|
this.setTransportadora(this.agenda.externalTenant.cnpj);
|
|
146
146
|
}
|
|
147
147
|
this.totalEixosComposicao = this.agenda && this.agenda.veiculo ? this.agenda.veiculo.eixos || 0 : 0;
|
|
148
|
-
const statusAgenda = [
|
|
149
|
-
"AGUARDANDO_CONFIRMACAO_SOLICITANTE",
|
|
150
|
-
"AGENDADO",
|
|
151
|
-
"AGUARDANDO_CONFIRMACAO",
|
|
152
|
-
"EM_EXECUCAO",
|
|
153
|
-
"REJEITADO_POR_VALIDACAO",
|
|
154
|
-
];
|
|
155
|
-
if (this.agenda && !statusAgenda.includes(this.agenda.status)) {
|
|
156
|
-
this.formGroup.disable();
|
|
157
|
-
this.disableButtonSave = true;
|
|
158
|
-
}
|
|
159
|
-
if (this.agenda && this.agenda.createdByErp) {
|
|
160
|
-
this.formGroup.get("filial").disable();
|
|
161
|
-
this.formGroup.get("transportadora").disable();
|
|
162
|
-
this.formGroup.get("clienteRemessa").disable();
|
|
163
|
-
this.formGroup.get("clienteFaturamento").disable();
|
|
164
|
-
this.pedidoVendaForm.disable();
|
|
165
|
-
this.itemFormGroup.disable();
|
|
166
|
-
this.disableOrdersButtons = true;
|
|
167
|
-
}
|
|
168
148
|
this.setPedidosValueChanges();
|
|
169
149
|
this.erpProcessService.current.subscribe(message => this.erpProcessData = message);
|
|
170
150
|
this.erpFormConfigService.current.subscribe(message => this.enableRevalidation = message);
|
|
@@ -292,6 +272,20 @@ let ExpedicaoFormComponent = class ExpedicaoFormComponent {
|
|
|
292
272
|
this.hasChangeService.hasChange(this.agenda.id);
|
|
293
273
|
}
|
|
294
274
|
});
|
|
275
|
+
const statusAgenda = ["AGUARDANDO_CONFIRMACAO_SOLICITANTE", "AGENDADO", "AGUARDANDO_CONFIRMACAO", "REJEITADO_POR_VALIDACAO"];
|
|
276
|
+
if (this.agenda && !statusAgenda.includes(this.agenda.status) || !this.permissions.editar) {
|
|
277
|
+
this.formGroup.disable();
|
|
278
|
+
this.disableButtonSave = true;
|
|
279
|
+
}
|
|
280
|
+
if (this.agenda && this.agenda.createdByErp) {
|
|
281
|
+
this.formGroup.get("filial").disable();
|
|
282
|
+
this.formGroup.get("transportadora").disable();
|
|
283
|
+
this.formGroup.get("clienteRemessa").disable();
|
|
284
|
+
this.formGroup.get("clienteFaturamento").disable();
|
|
285
|
+
this.pedidoVendaForm.disable();
|
|
286
|
+
this.itemFormGroup.disable();
|
|
287
|
+
this.disableOrdersButtons = true;
|
|
288
|
+
}
|
|
295
289
|
}
|
|
296
290
|
ngOnDestroy() {
|
|
297
291
|
this.ngUnsubscribe.next();
|
|
@@ -1434,4 +1428,4 @@ ExpedicaoFormComponent = tslib_1.__decorate([
|
|
|
1434
1428
|
HasChangeService])
|
|
1435
1429
|
], ExpedicaoFormComponent);
|
|
1436
1430
|
export { ExpedicaoFormComponent };
|
|
1437
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL2V4cGVkaWNhby9mb3JtL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FHWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhC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UUFDYixnQkFBZ0I7UUFDWCxjQUFjO1FBQ1YseUJBQXlCO1FBQy9CLFlBQVk7UUFDWCxhQUFhO1FBQ2IsYUFBYTtRQUNMLHFCQUFxQjtRQUN4QixrQkFBa0I7UUFDZCxzQkFBc0I7UUFDL0IsYUFBYTtRQUNsQiwrQkFBK0I7UUFDcEIsbUJBQW1CO1FBQ3JCLGlCQUFpQjtRQUNkLG9CQUFvQjtRQUN4QixnQkFBZ0I7R0FqSmpDLHNCQUFzQixDQTh5RGxDO1NBOXlEWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNBZ2VuZGEgfSBmcm9tIFwiLi8uLi8uLi9jb3JlL2VudW1zL3N0YXR1cy1hZ2VuZGFcIjtcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRvcnMsXG4gIEZvcm1BcnJheSxcbiAgQWJzdHJhY3RDb250cm9sLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IEhvdGtleSwgSG90a2V5c1NlcnZpY2UgfSBmcm9tIFwiYW5ndWxhcjItaG90a2V5c1wiO1xuaW1wb3J0ICogYXMgX21vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nL2NvbXBvbmVudHMvY29tbW9uL21lc3NhZ2VzZXJ2aWNlXCI7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaW5hbGl6ZSwgbWFwLCB0YWtlVW50aWwsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZpZWxkLWN1c3RvbWl6YXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZvY3VzLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGlzVmFsaWRGaWx0ZXIsXG4gIG1lcmdlVW5pcXVlLFxuICB1c2VyQ2FuVmlzdWFsaXplLFxufSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFnZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGFcIjtcbmltcG9ydCB7IEFnZW5kYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEV4cGVkaWNhbyxcbiAgT3JkZW1WZW5kYUl0ZW0sXG59IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2V4cGVkaWNhby9leHBlZGljYW9cIjtcbmltcG9ydCB7IEV4cGVkaWNhb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9leHBlZGljYW8vZXhwZWRpY2FvLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZpbGlhbCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWxcIjtcbmltcG9ydCB7XG4gIEZpbGlhbFNlcnZpY2UsXG4gIFBlc3F1aXNhckZpbGlhaXNJbnB1dCxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2FcIjtcbmltcG9ydCB7IFBlc3NvYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhLnNlcnZpY2VcIjtcbmltcG9ydCB7IEV4cGVkaWNhb0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUgfSBmcm9tIFwiLi4vZXhwZWRpY2FvLWNoZWdhZGEtdmVpY3Vsby5vdmVycmlkZVwiO1xuaW1wb3J0IHsgUGVkaWRvVmVuZGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYUl0ZW0gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEtaXRlbS9wZWRpZG8tdmVuZGEtaXRlbVwiO1xuaW1wb3J0IHsgUGVkaWRvVmVuZGFJdGVtU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS1pdGVtL3BlZGlkby12ZW5kYS1pdGVtLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmFcIjtcbmltcG9ydCB7XG4gIFBlZGlkb1ZlbmRhRHRvLFxuICBQZXNxdWlzYVBlZGlkb3NWZW5kYUR0byxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhL3BlZGlkby12ZW5kYS1kdG9cIjtcbmltcG9ydCB7IG9uTG9va3VwUmVxdWVzdCwgb25TZWFyY2hSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvb2t1cC11dGlsc1wiO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgU29ydE1ldGEgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NEYXRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1kYXRhXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3Mtc2VydmljZVwiO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtZm9ybS1jb25maWcvZXJwLWZvcm0tY29uZmlnLXNlcnZpY2VcIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImV4cGVkaWNhby1mb3JtXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuLi8uLi9lcnAtc2VuaW9yLnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEV4cGVkaWNhb0Zvcm1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICBwdWJsaWMgbG9jYWxlQ29uZmlnOiBhbnkgPSB7fTtcbiAgcHVibGljIGN1cnJlbmN5TG9jYWxlT3B0aW9uczogYW55ID0ge307XG4gIHB1YmxpYyBwZXJtaXNzaW9uczogYW55ID0ge307XG4gIHB1YmxpYyBhbGxQZXJtaXNzaW9uczogYW55ID0ge307XG4gIHB1YmxpYyBwZWRpZG9BdHVhbDogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIHBlZGlkb1ZlbmRhRm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgaXRlbUZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcbiAgcHVibGljIG1haW5QYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuICBwdWJsaWMgdmlzaWJsZURpYWxvZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZm9ybUNhcnJlZ2FkbyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGNsaWVudGVSZW1lc3NhTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYVNlYXJjaEdyaWREYXRhOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zOiBGaWxpYWxbXTtcbiAgcHVibGljIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgZmlsaWFsQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgZmlsaWFsTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBmaWxpYWxTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWREYXRhOiBGaWxpYWxbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zOiBUcmFuc3BvcnRhZG9yYVtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1xuICAgIFwiY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICAgIFwicGVzc29hLmNwZkNucGpcIixcbiAgXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1xuICAgIFwiaWRcIixcbiAgICBcImNvZGlnb1wiLFxuICAgIFwicGVzc29hLm5vbWVcIixcbiAgICBcInBlc3NvYS5jcGZDbnBqXCIsXG4gIF07XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YTogVHJhbnNwb3J0YWRvcmFbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHBlZGlkb1ZlbmRhTG9va3VwU3VnZ2VzdGlvbnM6IFBlZGlkb1ZlbmRhW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJudW1lcm9cIiwgXCJjbGllbnRlXCJdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJpZFwiLFxuICAgIFwibnVtZXJvXCIsXG4gICAgXCJmaWxpYWwubm9tZVwiLFxuICAgIFwiZmlsaWFsLmNvZGlnb1wiLFxuICAgIFwicGVzc29hLmlkXCIsXG4gICAgXCJwZXNzb2EuY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICBdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoR3JpZERhdGE6IFBlZGlkb1ZlbmRhW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1Mb29rdXBTdWdnZXN0aW9uczogUGVkaWRvVmVuZGFJdGVtW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wic2VxdWVuY2lhXCIsIFwic2t1LmRlc2NyaWNhb1wiXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImlkXCIsXG4gICAgXCJzZXF1ZW5jaWFcIixcbiAgICBcInNrdS5kZXNjcmljYW9cIixcbiAgXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRGF0YTogUGVkaWRvVmVuZGFJdGVtW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgYWdlbmRhTG9va3VwU3VnZ2VzdGlvbnM6IEFnZW5kYVtdO1xuICBwdWJsaWMgYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICBwdWJsaWMgYWdlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJkZXNjcmljYW9cIl07XG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGFnZW5kYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZERhdGE6IEFnZW5kYVtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGRpc2FibGVCdXR0b25TYXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGRpc2FibGVPcmRlcnNCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgdG90YWxFaXhvc0NvbnRyYXRhZG9zOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgdG90YWxFaXhvc0NvbXBvc2ljYW86IG51bWJlciA9IDA7XG5cbiAgcHVibGljIG9yZGVyc1ZhbGlkID0gdHJ1ZTtcbiAgcHVibGljIHNhdmVBbmRJbml0QnV0dG9uOiBhbnk7XG5cbiAgQElucHV0KCkgcHJpdmF0ZSBhZ2VuZGE6IEFnZW5kYTtcbiAgQElucHV0KCkgcHJpdmF0ZSByZXZhbGlkYWNhbzogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKFwiY3VzdG9tVGVtcGxhdGVcIilcbiAgcHVibGljIGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoXCJjdXN0b21Gb3JtRmllbGRzXCIpXG4gIHB1YmxpYyBjdXN0b21Gb3JtRmllbGRzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7ICBcbiAgcHJpdmF0ZSBlcnBQcm9jZXNzRGF0YTogRXJwUHJvY2Vzc0RhdGE7XG4gIHByaXZhdGUgZW5hYmxlUmV2YWxpZGF0aW9uOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXhwZWRpY2FvU2VydmljZTogRXhwZWRpY2FvU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG90a2V5c1NlcnZpY2U6IEhvdGtleXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmllbGRDdXN0b21pemF0aW9uOiBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9jdXNTZXJ2aWNlOiBGb2N1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBQZXNzb2FTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsaWFsU2VydmljZTogRmlsaWFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zcG9ydGFkb3JhU2VydmljZTogVHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVkaWRvVmVuZGFTZXJ2aWNlOiBQZWRpZG9WZW5kYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlOiBQZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdlbmRhU2VydmljZTogQWdlbmRhU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJyaWRlOiBFeHBlZGljYW9DaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVycFByb2Nlc3NTZXJ2aWNlOiBFcnBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIGVycEZvcm1Db25maWdTZXJ2aWNlOiBFcnBGb3JtQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGhhc0NoYW5nZVNlcnZpY2U6IEhhc0NoYW5nZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICAgIHRoaXMucGVkaWRvVmVuZGFGb3JtID0gdGhpcy5nZXRQZWRpZG9WZW5kYUZvcm0oKTtcbiAgICB0aGlzLml0ZW1Gb3JtR3JvdXAgPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMucm91dGUuZGF0YVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMub25Sb3V0ZURhdGFDaGFuZ2UoZGF0YSkpO1xuXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoeyBhZ2VuZGEgfSkgPT4ge1xuICAgICAgICBpZiAoYWdlbmRhICE9IFwibmV3XCIpIHtcbiAgICAgICAgICB0aGlzLmdldEV4cGVkaWNhbyhhZ2VuZGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnVzY2FyRmlsaWFsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5jbGllbnRlUmVtZXNzYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmZpbGlhbFNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5hZ2VuZGFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5zZXRIb3RrZXlzKCk7XG5cbiAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgfVxuXG4gICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnZlaWN1bG8gPyB0aGlzLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1xuICAgICAgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFXCIsXG4gICAgICBcIkFHRU5EQURPXCIsXG4gICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIixcbiAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgIFwiUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cIixcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmICFzdGF0dXNBZ2VuZGEuaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uU2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmNyZWF0ZWRCeUVycCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVSZW1lc3NhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQZWRpZG9zVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSBtZXNzYWdlKTsgICAgXG4gICAgdGhpcy5lcnBGb3JtQ29uZmlnU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uID0gbWVzc2FnZSk7ICBcblxuICAgIHRoaXMucmV2YWxpZGFjYW9UcmFuc3BvcnRhZG9yYSAoKTtcbiAgICB0aGlzLnZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKTtcbiAgfVxuICAgICAgIFxuICBwcml2YXRlIHZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2UodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJldmFsaWRhY2FvVHJhbnNwb3J0YWRvcmEgKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zcCA9IHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UgJiYgdHJhbnNwKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEudHJhbnNwb3J0YWRvcmFJZCA9IHRyYW5zcC5pZDsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pOyAgIFxuICB9XG5cbiAgcHVibGljIGFicmlyUGVkaWRvVmVuZGEocGVkaWRvVmVuZGE/OiBQZWRpZG9WZW5kYSkge1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRCeUlkKFwicGVkaWRvVmVuZGFcIilcbiAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKTtcblxuICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5wYXRjaFZhbHVlKHsgcGVkaWRvVmVuZGEgfSk7XG4gICAgYnV0dG9uc1swXS5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGV4Y2x1aXJQZWRpZG9WZW5kYShpbmRleDogbnVtYmVyKSB7XG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgYWJyaXJQZWRpZG9WZW5kYUl0ZW0oXG4gICAgcGVkaWRvOiBGb3JtR3JvdXAsXG4gICAgcGVkaWRvVmVuZGFJdGVtPzogT3JkZW1WZW5kYUl0ZW1cbiAgKSB7XG4gICAgdGhpcy5pdGVtRm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICBwZWRpZG9WZW5kYUl0ZW0gfHwgeyBpdGVtOiB1bmRlZmluZWQsIHF1YW50aWRhZGU6IDEgfVxuICAgICk7XG4gICAgdGhpcy5wZWRpZG9BdHVhbCA9IHBlZGlkbztcbiAgICB0aGlzLnZpc2libGVEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGV4Y2x1aXJQZWRpZG9WZW5kYUl0ZW0oaWQ6IHN0cmluZywgcGVkaWRvOiBGb3JtR3JvdXApIHtcbiAgICBjb25zdCBpbmRleCA9IChcbiAgICAgIChwZWRpZG8uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS52YWx1ZSBhcyBPcmRlbVZlbmRhSXRlbVtdXG4gICAgKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaXRlbS5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAocGVkaWRvLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQZWRpZG9zVmFsdWVDaGFuZ2VzKCkge1xuICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBwZWRpZG9zTGVuZ3RoID0gKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KVxuICAgICAgICAgIC5sZW5ndGg7XG4gICAgICAgIHRoaXMub3JkZXJzVmFsaWQgPSBwZWRpZG9zTGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KFwiZmlsaWFsXCIpXG4gICAgICAgICAgW3BlZGlkb3NMZW5ndGggPj0gMSA/IFwiZGlzYWJsZVwiIDogXCJlbmFibGVcIl0oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjaW9uYXJQZWRpZG9WZW5kYShwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGEpIHtcbiAgICBjb25zdCBjaGVja09yZGVycyA9IChvcmRlcjogYW55KSA9PiBvcmRlci5wZWRpZG9WZW5kYS5pZCA9PT0gcGVkaWRvVmVuZGEuaWQ7XG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWU7XG5cbiAgICBpZiAocGVkaWRvcy5maW5kKGNoZWNrT3JkZXJzKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgXCJ3YXJuXCIsXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9zdW1tYXJ5XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAucGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX2RldGFpbFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KVxuICAgIC5wdXNoKHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0ocGVkaWRvVmVuZGEsIHRydWUpKTtcblxuICAgIGlmIChcbiAgICAgICEhcGVkaWRvVmVuZGEgJiZcbiAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID09PSAxICYmXG4gICAgICAhdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZUZhdHVyYW1lbnRvXCIpLnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYSBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY2lvbmFyUGVkaWRvVmVuZGFJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWU7XG4gICAgY29uc3QgcGVkaWRvID0gdGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJpdGVuc1wiKS52YWx1ZTtcbiAgICBjb25zdCBjaGVja09yZGVySXRlbnMgPSAob3JkZXI6IGFueSkgPT4gb3JkZXIuaXRlbS5pZCA9PT0gaXRlbS5pdGVtLmlkO1xuICAgIGlmIChwZWRpZG8gJiYgaXRlbSAmJiBpdGVtLml0ZW0gJiYgcGVkaWRvLmZpbmQoY2hlY2tPcmRlckl0ZW5zKSlcbiAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5pdGVtX3BlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9zdW1tYXJ5XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAuaXRlbV9wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfZGV0YWlsXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgICBmb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWUgfSk7XG4gICAgaWYgKGZvcm0uZ2V0KFwiaXRlbVwiKS52YWx1ZSA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgdGhpcy52aXNpYmxlRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWNpb25hclBlZGlkb1ZlbmRhSXRlbUF1dG9tYXRpY2FtZW50ZShcbiAgICBpdGVuczogYW55LFxuICAgIHBlZGlkb1ZlbmRhOiBhbnlcbiAgKSB7XG4gICAgaWYgKGl0ZW5zICYmIGl0ZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gICAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5nZXRQZWRpZG9zKCk7XG4gICAgICBjb25zdCBwZWRpZG9BdHVhbDogYW55ID0gcGVkaWRvcy5maWx0ZXIoKHBlZGlkbzogYW55KSA9PlxuICAgICAgICBwZWRpZG8gJiYgcGVkaWRvLnZhbHVlLnBlZGlkb1ZlbmRhXG4gICAgICAgICAgPyBwZWRpZG8udmFsdWUucGVkaWRvVmVuZGEuaWQgPT09IHBlZGlkb1ZlbmRhLmlkXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cFxuICAgICAgICAuZ2V0KFwiaXRlbVwiKVxuICAgICAgICAuc2V0VmFsdWUoaXRlbnMubGVuZ3RoID09PSAxID8gaXRlbnNbMF0gOiB7fSk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZ2V0KFwicXVhbnRpZGFkZVwiKS5zZXRWYWx1ZSgxKTtcbiAgICAgIGZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgICAgIChwZWRpZG9BdHVhbFswXS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgICB0aGlzLnZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVkaWRvcygpOiBBYnN0cmFjdENvbnRyb2xbXSB7XG4gICAgcmV0dXJuICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHM7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRUb2tlbnMoaXRlbnM6IE9yZGVtVmVuZGFJdGVtW10pIHtcbiAgICByZXR1cm4gaXRlbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbSAmJiBpdGVtLml0ZW0gPyBpdGVtLml0ZW0gOiBpdGVtO1xuICAgICAgY29uc3QgcHJvZHV0byA9IHZhbHVlLnNrdSA/IHZhbHVlLnNrdSA6IHZhbHVlLnByb2R1dG87XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdmFsdWUuaWQsXG4gICAgICAgIGxhYmVsOiBgUHJvZHV0bzogJHtwcm9kdXRvLmRlc2NyaWNhb30sIFNlcXVlbmNpYTogJHt2YWx1ZS5zZXF1ZW5jaWF9YCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGlucHV0TGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG4gICAgY29uc3Qgc2VsZWN0ZWRJbnB1dCA9IEFycmF5LmZyb20oaW5wdXRMaXN0KS5maW5kKChmOiBhbnkpID0+ICFmLmRpc2FibGVkKTtcbiAgICBpZiAoc2VsZWN0ZWRJbnB1dCkge1xuICAgICAgc2VsZWN0ZWRJbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHRoaXMub3ZlcnJpZGUuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluaXRcIik7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJyaWRlLnJlbW92ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICBuZXcgSG90a2V5KFxuICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzTmV3KCkge1xuICAgIHJldHVybiAhdGhpcy5mb3JtR3JvdXAudmFsdWUuaWQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3VnZ2VzdGlvbnModmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZS5hZ2VuZGEpIHtcbiAgICAgIHZhbHVlLmFnZW5kYS5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSxcbiAgICAgICAgXCJhZ2VuZGFcIixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlLmFnZW5kYS5sYWJlbC50cmltKCkgPT09IHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yLnRyaW0oKSkge1xuICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgZGlzcGxheUZpZWxkczogc3RyaW5nW10sXG4gICAgb3duZXJFbnRpdHk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIHNlcGFyYXRvcjogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBkaXNwbGF5RmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICB9XG5cbiAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHsgY3VycmVuY3lTeW1ib2wsIHRob3VzYW5kc1NlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvciB9ID1cbiAgICAgIGRhdGEubG9jYWxlQ29uZmlnLm51bWJlcjtcblxuICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG4gICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuZXhwZWRpY2FvO1xuICAgIHRoaXMuYWxsUGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zO1xuICAgIC8vdGhpcy52YWxpZGF0ZVZpc3VhbGl6YXRpb24oKTtcbiAgICBpZiAoZGF0YS5lbnRpdHkpIHtcbiAgICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcjtcbiAgICAgIGlmICghY2FuRWRpdCkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgY29uc3QgdmFsdWU6IGFueSA9IEV4cGVkaWNhby5mcm9tRHRvKGRhdGEuZW50aXR5KTtcbiAgICAgIHRoaXMudXBkYXRlU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3IEV4cGVkaWNhbygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbmRGaWxlKGZpbGVzVG9EZWxldGU6IGFueSwgZmlsZXNUb0NvbW1pdDogYW55W10pIHtcbiAgICBjb25zdCBvYnNlcnZhYmxlczogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvRGVsZXRlKSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5kZWxldGVGaWxlcyhmaWxlc1RvRGVsZXRlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvQ29tbWl0KSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5jb21taXRGaWxlcyhmaWxlc1RvQ29tbWl0KSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KG9ic2VydmFibGVzKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKSB7XG4gICAgY29uc3QgbnVtZXJvUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIm51bWVyb1BlZGlkb0NsaWVudGVcIikudmFsdWU7XG4gICAgY29uc3QgaXRlbVBlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpdGVtUGVkaWRvQ2xpZW50ZVwiKS52YWx1ZTtcbiAgICBjb25zdCB7IHZhbHVlOiBwZWRpZG9zIH0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpO1xuICAgIChwZWRpZG9zIHx8IFtdKS5tYXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUgJiYgZS5pdGVucyAmJiBlLml0ZW5zLmxlbmd0aCkge1xuICAgICAgICBlLml0ZW5zWzBdLm51bWVyb1BlZGlkb0NsaWVudGUgPSBudW1lcm9QZWRpZG9DbGllbnRlO1xuICAgICAgICBlLml0ZW5zWzBdLml0ZW1QZWRpZG9DbGllbnRlID0gaXRlbVBlZGlkb0NsaWVudGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS5wYXRjaFZhbHVlKHBlZGlkb3MpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCkge1xuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlO1xuICAgIGNvbnN0IG51bWVyb1BlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJudW1lcm9QZWRpZG9DbGllbnRlXCIpO1xuICAgIGNvbnN0IGl0ZW1QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaXRlbVBlZGlkb0NsaWVudGVcIik7XG4gICAgKHBlZGlkb3MgfHwgW10pLm1hcCgoZTogYW55KSA9PiB7XG4gICAgICBpZiAobnVtZXJvUGVkaWRvQ2xpZW50ZS52YWx1ZSAmJiBpdGVtUGVkaWRvQ2xpZW50ZS52YWx1ZSkgcmV0dXJuO1xuICAgICAgY29uc3QgcGVkaWRvc0ludGVybm8gPVxuICAgICAgICBlICYmIGUuaXRlbnMgJiYgZS5pdGVucy5sZW5ndGggPyBlLml0ZW5zWzBdLnBlZGlkbyA6IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGlmIChwZWRpZG9zSW50ZXJuby5pdGVucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBudW1lcm9QZWRpZG9DbGllbnRlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVuc1swXS5udW1lcm9QZWRpZG9DbGllbnRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtUGVkaWRvQ2xpZW50ZS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnNbMF0uaXRlbVBlZGlkb0NsaWVudGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TYXZlKHN0YXJ0PzogYm9vbGVhbikge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImFnZW5kYVwiKS5zZXRWYWx1ZSh0aGlzLmFnZW5kYSk7XG4gICAgdGhpcy5vcmRlcnNWYWxpZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID4gMDtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkIHx8ICF0aGlzLm9yZGVyc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKTtcblxuICAgIGNvbnN0IHsgZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCB9ID0gdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZ2V0RmlsZXModGhpcy5mb3JtR3JvdXApO1xuICAgIFxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0KGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsIHN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIHRoaXMuYWdlbmRhLnN0YXR1cyA9IFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBTztcbiAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSwgc3RhcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmF0dWFsaXphRXhwZWRpY2FvKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsICgpID0+IHtcbiAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzTWVzc2FnZSgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfdGl0bGVcIiksXG4gICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFFeHBlZGljYW8oXG4gICAgZmlsZXNUb0RlbGV0ZTogYW55LFxuICAgIGZpbGVzVG9Db21taXQ6IGFueVtdLFxuICAgIG9uU3Vic2NyaWJlPzogRnVuY3Rpb25cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaWRcIikuc2V0VmFsdWUodmFsdWUuaWQgfHwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5vblNlbmRGaWxlKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICBcInNhdmVkX21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgICAgICAgXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9uU3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBjbnBqID0gdmFsdWUucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIi9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtjbnBqfSdgO1xuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZW50c1swXS5jb2RpZ29cbiAgICAgICAgICAgICAgPyBjb250ZW50c1swXS5jb2RpZ28udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRlbnRzWzBdLmRlc2NyaWNhb1xuICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmRlc2NyaWNhby50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIGlmICghZGVzY3JpcHRpb24udHJpbSgpICYmICFjb2RlLnRyaW0oKSkge1xuICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgXCJ5bXMuZXJwLmRlcml2YWNhb19zZW1fZGVzY3JpY2FvXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gYCR7Y29kZX0gLSAke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55KSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PlxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSxcbiAgICAgICAgb2JqXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEV4cGVkaWNhbyhhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmV4cGVkaWNhb1NlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBhZ2VuZGEuaWQgZXEgJyR7YWdlbmRhSWR9J2AsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPVxuICAgICAgICAgIGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsb1xuICAgICAgICAgICAgPyBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgY29uc3QgZXhwZWRpY2FvID0gRXhwZWRpY2FvLmZyb21EdG8oY29udGVudHNbMF0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGV4cGVkaWNhbyk7XG5cbiAgICAgICAgZXhwZWRpY2FvLnBlZGlkb3MuZm9yRWFjaCgocGVkaWRvKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0oKTtcbiAgICAgICAgICBmb3JtLnBhdGNoVmFsdWUocGVkaWRvKTtcbiAgICAgICAgICBwZWRpZG8uaXRlbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgICAgICAgICAgaXRlbUZvcm0ucGF0Y2hWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIChmb3JtLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChpdGVtRm9ybSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpO1xuICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgIHZhbHVlLFxuICAgICAgXCJjbGllbnRlIGVxIHRydWVcIlxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGllbnRlRmF0dXJhbWVudG9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuTG9va3VwKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWUuaWR9J2A7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICBmaWx0ZXJRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSR7XG4gICAgICBmaWx0ZXJRdWVyeSA/IFwiIGFuZCBcIiA6IFwiXCJcbiAgICB9c2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZWA7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICAgIH1cblxuICBwdWJsaWMgb25DbGllbnRlUmVtZXNzYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgdmFsdWUsXG4gICAgICBcImNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZVJlbWVzc2FTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGZpbHRlclF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9JHtcbiAgICAgIGZpbHRlclF1ZXJ5ID8gXCIgYW5kIFwiIDogXCJcIlxuICAgIH1zaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlYDtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSAhZXZlbnQgfHwgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwO1xuICB9XG5cbiAgcHVibGljIG9uRmlsaWFsTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLFxuICAgICAgICAgIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAobGlzdDogYW55KSA9PlxuICAgICAgICAgICh0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcCgoZmlsaWFsOiBhbnkpID0+XG4gICAgICAgICAgICBGaWxpYWwuZnJvbUR0byhmaWxpYWwpXG4gICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYge1xuICAgICAgY2FtcG86IHNvcnRbMF0uZmllbGQsXG4gICAgICBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgIH07XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waixcbiAgICAgICAgICBwYWdpbmE6IHtcbiAgICAgICAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgICAgICAgb2Zmc2V0OiBwYWdlLFxuICAgICAgICAgICAgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi5zb3J0Rm9ybWF0dGVkIH1dIDogbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRGF0YSA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgIHZhbHVlXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgZXZlbnRcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgZmlsdGVyUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0ke1xuICAgICAgZmlsdGVyUXVlcnkgPyBcIiBhbmQgXCIgOiBcIlwiXG4gICAgfXNpdHVhY2FvUGVkaWRvIGVxIEFCRVJUT19UT1RBTCBvciBzaXR1YWNhb1BlZGlkbyBlcSBBQkVSVE9fUEFSQ0lBTGA7XG5cbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZSB8fCBbXTtcbiAgICBsZXQgcGVkaWRvc0lkc1F1ZXJ5ID0gXCJcIjtcbiAgICBwZWRpZG9zLm1hcCgoZTogYW55KSA9PlxuICAgICAgZSAmJiBlLnBlZGlkb1ZlbmRhICYmIGUucGVkaWRvVmVuZGEuaWRcbiAgICAgICAgPyAocGVkaWRvc0lkc1F1ZXJ5ICs9IGAgYW5kIChpZCBuZSAnJHtlLnBlZGlkb1ZlbmRhLmlkfScpYClcbiAgICAgICAgOiBmYWxzZVxuICAgICk7XG4gICAgaWYgKHBlZGlkb3MubGVuZ3RoICYmIHBlZGlkb3NJZHNRdWVyeSkgZmlsdGVyUXVlcnkgKz0gcGVkaWRvc0lkc1F1ZXJ5O1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VydmljZVxuICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJlY1BhZ2luYShmaXJzdDogbnVtYmVyLCByb3dzOiBudW1iZXIsIHNvcnQ6IGFueSkge1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgb3JkZXJCeSA9XG4gICAgICBzb3J0ICYmIHNvcnQubGVuZ3RoXG4gICAgICAgID8gc29ydC5tYXAoKHM6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGNhbXBvOiBzLmZpZWxkLFxuICAgICAgICAgICAgb3JkZW5hY2FvOiBzLm9yZGVyID09PSAxID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHBhZ2UsXG4gICAgICBsaW1pdDogcm93cyxcbiAgICAgIGxpc3RhT3JkZW5hY2FvOiBvcmRlckJ5LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuXG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWUgfHwgW107XG4gICAgbGV0IHBlZGlkb3NTZWxlY2lvbmFkb3M6IGFueSA9IFtdO1xuICAgIHBlZGlkb3MubWFwKChlOiBhbnkpID0+XG4gICAgICBlICYmIGUucGVkaWRvVmVuZGEgJiYgZS5wZWRpZG9WZW5kYS5pZFxuICAgICAgICA/IHBlZGlkb3NTZWxlY2lvbmFkb3MucHVzaChlLnBlZGlkb1ZlbmRhLmlkKVxuICAgICAgICA6IGZhbHNlXG4gICAgKTtcblxuICAgIGNvbnN0IHBlc3F1aXNhOiBQZXNxdWlzYVBlZGlkb3NWZW5kYUR0byA9IHtcbiAgICAgIHBlc3NvYUlkOiBmaWx0ZXJEYXRhW1wiY2xpZW50ZVwiXSA/IGZpbHRlckRhdGFbXCJjbGllbnRlXCJdLmlkIDogbnVsbCxcbiAgICAgIGZpbGlhbElkOiBmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICA6IG51bGwsXG4gICAgICBmaWxpYWxQZWRpZG86IGZpbHRlckRhdGFbXCJmaWxpYWxQZWRpZG9cIl0sXG4gICAgICBwZWRpZG9zU2VsZWNpb25hZG9zLFxuICAgICAgbnVtZXJvOiBmaWx0ZXJEYXRhW1wibnVtZXJvXCJdLFxuICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYShmaXJzdCwgcm93cywgc29ydCksXG4gICAgfTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFTZXJ2aWNlXG4gICAgICAucGVzcXVpc2FyUGVkaWRvc1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFJdGVtTG9va3VwUmVxdWVzdCh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGZpbGlhbElkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSB8fCB7fSkuaWQ7XG4gICAgY29uc3QgcGVkaWRvSWQgPSAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJwZWRpZG9WZW5kYVwiKS52YWx1ZSB8fCB7fSkuaWQ7XG5cbiAgICBjb25zdCBwZXNxdWlzYSA9IHtcbiAgICAgIHBlZGlkb0lkLFxuICAgICAgZmlsaWFsSWQsXG4gICAgICBzZXF1ZW5jaWE6ICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IG51bGwsXG4gICAgICB0aXBvQWdlbmRhbWVudG9JZDpcbiAgICAgICAgdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKDAsIDEwLCBzb3J0KSxcbiAgICB9O1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlXG4gICAgICAucGVzcXVpc2FySXRlbnNQZWRpZG9WZW5kYShwZXNxdWlzYSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhSXRlbVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuXG4gICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcbiAgICBjb25zdCBwZWRpZG9JZCA9ICh0aGlzLnBlZGlkb0F0dWFsLmdldChcInBlZGlkb1ZlbmRhXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgIGNvbnN0IHBlc3F1aXNhID0ge1xuICAgICAgcGVkaWRvSWQsXG4gICAgICBmaWxpYWxJZCxcbiAgICAgIHNlcXVlbmNpYTogZmlsdGVyRGF0YVtcInNlcXVlbmNpYVwiXSxcbiAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoZmlyc3QsIHJvd3MsIHNvcnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgIC5wZXNxdWlzYXJJdGVuc1BlZGlkb1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdXRvbWF0aWNJdGVuc09yZGVyKHBlZGlkb1ZlbmRhOiBhbnkpIHtcbiAgICBpZiAocGVkaWRvVmVuZGEgJiYgcGVkaWRvVmVuZGEuaWQpIHtcbiAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgICAgY29uc3QgcGVzcXVpc2EgPSB7XG4gICAgICAgIHBlZGlkb0lkOiBwZWRpZG9WZW5kYS5pZCxcbiAgICAgICAgZmlsaWFsSWQsXG4gICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICAgIHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYSgwLCAxMCwgc29ydCksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgICAgLnBlc3F1aXNhckl0ZW5zUGVkaWRvVmVuZGEocGVzcXVpc2EpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW1BdXRvbWF0aWNhbWVudGUoXG4gICAgICAgICAgICBsaXN0LmNvbnRlbnRzLFxuICAgICAgICAgICAgcGVkaWRvVmVuZGFcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25BZ2VuZGFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgb3JkZXI6IDEsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAubGlzdEV4dGVybmFsQWdlbmRhKHsgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZ2VuZGFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcblxuICAgIC8qe0NBOk9OX0FHRU5EQV9MT09LVVBfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAvKntDQTpPTl9BR0VOREFfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICB9XG5cbiAgcHVibGljIG9uQWdlbmRhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5hZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmxpc3RFeHRlcm5hbEFnZW5kYSh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNsaWVudGVGYXR1cmFtZW50bzogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIF0sXG4gICAgICBjbGllbnRlUmVtZXNzYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH1dLFxuICAgICAgZmlsaWFsOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgXSxcbiAgICAgIHRyYW5zcG9ydGFkb3JhOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgcGVkaWRvczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICBhZ2VuZGE6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvQWdlbmRhbWVudG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvUGVkaWRvQ2xpZW50ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGl0ZW1QZWRpZG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgY3JlYXRlZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNyZWF0ZWREYXRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBsYXN0TW9kaWZpZWRCeTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLyp7Q0E6R0VUX0ZPUk1fQ09OVFJPTFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfRk9STV9DT05UUk9MUzpFTkR9Ki9cblxuICAgIHJldHVybiBmb3JtR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NwZkNucGpcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInNpdGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9zaXRlXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2Rlc2NyaWNhb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBjbGllbnRTdWdnZXN0aW9ucyQgPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcbiAgICBjb25zdCBjbGllbnRTZWFyY2gkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbFBlZGlkb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNsaWVudGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpLFxuICAgICAgICBzZWFyY2hHcmlkRmllbGRzOiB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCksXG4gICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogY2xpZW50U3VnZ2VzdGlvbnMkLFxuICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiBjbGllbnRTZWFyY2gkLFxuICAgICAgICBlbXB0eU1lc3NhZ2U6IFwiTmVuaHVtYSBzdWdlc3TDo28gZW5jb250cmFkYVwiLFxuICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBcInNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiBjbGllbnRTdWdnZXN0aW9ucyQubmV4dChsaXN0LmNvbnRlbnRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IsXG4gICAgICAgICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIFwic2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY2xpZW50U2VhcmNoJC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICBncmlkRGF0YTogbGlzdC5jb250ZW50cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsdGVyXCIpLFxuICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5pbnRlZ3JhdGlvbi5maWx0ZXJzXCIpLFxuICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5jbGVhclwiKSxcbiAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmNhbmNlbFwiKSxcbiAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNlbGVjdFwiKSxcbiAgICAgICAgdG9vbHRpcDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5jb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2EuY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9jb2RpZ29fbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJzZXF1ZW5jaWFcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9pdGVtX3NlcXVlbmNpYVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwic2t1LmRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKCkge1xuICAgIGNvbnN0IHByZXZpb3VzUm91dGUgPSBcIi4uL1wiO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvY3VzU2VydmljZS5mb2N1c0ZpcnN0SW52YWxpZElucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBleHBlZGljYW9EdG8gPSBFeHBlZGljYW8udG9EdG8odmFsdWUpO1xuXG4gICAgbGV0IG9ic2VydmFibGU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpICYmICF2YWx1ZS5pZCkge1xuICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMuZXhwZWRpY2FvU2VydmljZS5pbnNlcnQoZXhwZWRpY2FvRHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWQgPSB2YWx1ZS5pZDtcbiAgICAgIG9ic2VydmFibGUgPSB0aGlzLmV4cGVkaWNhb1NlcnZpY2UudXBkYXRlKGlkLCBleHBlZGljYW9EdG8pO1xuICAgIH1cblxuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZpc3VhbGl6YXRpb24oKSB7XG4gICAgaWYgKCF1c2VyQ2FuVmlzdWFsaXplKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmFsbFBlcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fc3VtbWFyeVwiLFxuICAgICAgICBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX2RldGFpbFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgc2V2ZXJpdHksXG4gICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwZWRpZG9WZW5kYTogW3VuZGVmaW5lZF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFGb3JtKFxuICAgIHBlZGlkb1ZlbmRhPzogUGVkaWRvVmVuZGEsXG4gICAgZ2V0QXV0b21hdGljSXRlbnNPcmRlcj86IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKGdldEF1dG9tYXRpY0l0ZW5zT3JkZXIpIHRoaXMuZ2V0QXV0b21hdGljSXRlbnNPcmRlcihwZWRpZG9WZW5kYSk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1bmRlZmluZWRdLFxuICAgICAgcGVkaWRvVmVuZGE6IFtwZWRpZG9WZW5kYV0sXG4gICAgICBpdGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFJdGVtRm9ybShwZWRpZG9WZW5kYUl0ZW0/OiBQZWRpZG9WZW5kYUl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICBwZWRpZG86IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbTogW3BlZGlkb1ZlbmRhSXRlbV0sXG4gICAgICBxdWFudGlkYWRlOiBbdW5kZWZpbmVkXSxcbiAgICAgIG51bWVyb1BlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbVBlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidXNjYXJGaWxpYWwoKSB7XG4gICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcblxuICAgIGlmIChwbGFudGEuY25wai5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgICBcbiAgICAgIHJldHVybjtcbiAgICB9IFxuICAgICAgXG4gICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtwbGFudGEuY25walswXX0nYCxcbiAgICAgICAgZGlzcGxheUZpZWxkczogW1wiKlwiLCBcImVtcHJlc2Eubm9tZVwiXSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnNldFZhbHVlKEZpbGlhbC5mcm9tRHRvKGNvbnRlbnRzWzBdKSk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgXG4gIH1cblxuICBwcml2YXRlIGJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGFEdG8pIHtcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtwZWRpZG9WZW5kYS5wZXNzb2EuaWR9J2AsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgaWYgKChjb250ZW50cyB8fCBbXSkubGVuZ3RoICE9PSAxKSByZXR1cm47XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKVxuICAgICAgICAgIC5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
1431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL2V4cGVkaWNhby9mb3JtL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FHWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhC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O1FBQ0wsY0FBYztRQUNqQixXQUFXO1FBQ2IsZ0JBQWdCO1FBQ1gsY0FBYztRQUNWLHlCQUF5QjtRQUMvQixZQUFZO1FBQ1gsYUFBYTtRQUNiLGFBQWE7UUFDTCxxQkFBcUI7UUFDeEIsa0JBQWtCO1FBQ2Qsc0JBQXNCO1FBQy9CLGFBQWE7UUFDbEIsK0JBQStCO1FBQ3BCLG1CQUFtQjtRQUNyQixpQkFBaUI7UUFDZCxvQkFBb0I7UUFDeEIsZ0JBQWdCO0dBakpqQyxzQkFBc0IsQ0F1eURsQztTQXZ5RFksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdHVzQWdlbmRhIH0gZnJvbSBcIi4vLi4vLi4vY29yZS9lbnVtcy9zdGF0dXMtYWdlbmRhXCI7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzLFxuICBGb3JtQXJyYXksXG4gIEFic3RyYWN0Q29udHJvbCxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBIb3RrZXksIEhvdGtleXNTZXJ2aWNlIH0gZnJvbSBcImFuZ3VsYXIyLWhvdGtleXNcIjtcbmltcG9ydCAqIGFzIF9tb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9jb21wb25lbnRzL2NvbW1vbi9tZXNzYWdlc2VydmljZVwiO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZmluYWxpemUsIG1hcCwgdGFrZVVudGlsLCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmllbGRDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9maWVsZC1jdXN0b21pemF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZvY3VzU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9mb2N1cy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBpc1ZhbGlkRmlsdGVyLFxuICBtZXJnZVVuaXF1ZSxcbiAgdXNlckNhblZpc3VhbGl6ZSxcbn0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBBZ2VuZGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhXCI7XG5pbXBvcnQgeyBBZ2VuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBFeHBlZGljYW8sXG4gIE9yZGVtVmVuZGFJdGVtLFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9leHBlZGljYW8vZXhwZWRpY2FvXCI7XG5pbXBvcnQgeyBFeHBlZGljYW9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZXhwZWRpY2FvL2V4cGVkaWNhby5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWxpYWwgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsXCI7XG5pbXBvcnQge1xuICBGaWxpYWxTZXJ2aWNlLFxuICBQZXNxdWlzYXJGaWxpYWlzSW5wdXQsXG59IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWwuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVkaWRvVmVuZGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhL3BlZGlkby12ZW5kYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZXNzb2EgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hXCI7XG5pbXBvcnQgeyBQZXNzb2FTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFeHBlZGljYW9DaGVnYWRhVmVpY3Vsb092ZXJyaWRlIH0gZnJvbSBcIi4uL2V4cGVkaWNhby1jaGVnYWRhLXZlaWN1bG8ub3ZlcnJpZGVcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhL3BlZGlkby12ZW5kYVwiO1xuaW1wb3J0IHsgUGVkaWRvVmVuZGFJdGVtIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhLWl0ZW0vcGVkaWRvLXZlbmRhLWl0ZW1cIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhSXRlbVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEtaXRlbS9wZWRpZG8tdmVuZGEtaXRlbS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc3BvcnRhZG9yYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhXCI7XG5pbXBvcnQge1xuICBQZWRpZG9WZW5kYUR0byxcbiAgUGVzcXVpc2FQZWRpZG9zVmVuZGFEdG8sXG59IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGEtZHRvXCI7XG5pbXBvcnQgeyBvbkxvb2t1cFJlcXVlc3QsIG9uU2VhcmNoUmVxdWVzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb29rdXAtdXRpbHNcIjtcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIFNvcnRNZXRhIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzRGF0YSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3MtZGF0YVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLXNlcnZpY2VcIjtcbmltcG9ydCB7IEVycEZvcm1Db25maWdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLWZvcm0tY29uZmlnL2VycC1mb3JtLWNvbmZpZy1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBIYXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9oYXMtY2hhbmdlL2hhcy1jaGFuZ2Utc2VydmljZSc7XG5cbmNvbnN0IG1vbWVudCA9IF9tb21lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJleHBlZGljYW8tZm9ybVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi4vLi4vZXJwLXNlbmlvci5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBlZGljYW9Gb3JtQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XG4gIHB1YmxpYyBjdXJyZW5jeUxvY2FsZU9wdGlvbnM6IGFueSA9IHt9O1xuICBwdWJsaWMgcGVybWlzc2lvbnM6IGFueSA9IHt9O1xuICBwdWJsaWMgYWxsUGVybWlzc2lvbnM6IGFueSA9IHt9O1xuICBwdWJsaWMgcGVkaWRvQXR1YWw6IEZvcm1Hcm91cDtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIGl0ZW1Gb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyBtYWluUGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcbiAgcHVibGljIHZpc2libGVEaWFsb2cgPSBmYWxzZTtcblxuICBwcml2YXRlIGZvcm1DYXJyZWdhZG8gPSBmYWxzZTtcblxuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJjcGZDbnBqXCJdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEdyaWREYXRhOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b1NlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUxvb2t1cFN1Z2dlc3Rpb25zOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcIm5vbWVcIiwgXCJjcGZDbnBqXCJdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hHcmlkRGF0YTogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBmaWxpYWxMb29rdXBTdWdnZXN0aW9uczogRmlsaWFsW107XG4gIHB1YmxpYyBmaWxpYWxMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGZpbGlhbEFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGZpbGlhbExvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBmaWxpYWxTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBmaWxpYWxTZWFyY2hHcmlkRGF0YTogRmlsaWFsW107XG4gIHB1YmxpYyBmaWxpYWxTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9uczogVHJhbnNwb3J0YWRvcmFbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImNvZGlnb1wiLFxuICAgIFwicGVzc29hLm5vbWVcIixcbiAgICBcInBlc3NvYS5jcGZDbnBqXCIsXG4gIF07XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImlkXCIsXG4gICAgXCJjb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gICAgXCJwZXNzb2EuY3BmQ25walwiLFxuICBdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGE6IFRyYW5zcG9ydGFkb3JhW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBwZWRpZG9WZW5kYUxvb2t1cFN1Z2dlc3Rpb25zOiBQZWRpZG9WZW5kYVtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wibnVtZXJvXCIsIFwiY2xpZW50ZVwiXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1xuICAgIFwiaWRcIixcbiAgICBcIm51bWVyb1wiLFxuICAgIFwiZmlsaWFsLm5vbWVcIixcbiAgICBcImZpbGlhbC5jb2RpZ29cIixcbiAgICBcInBlc3NvYS5pZFwiLFxuICAgIFwicGVzc29hLmNvZGlnb1wiLFxuICAgIFwicGVzc29hLm5vbWVcIixcbiAgXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEdyaWREYXRhOiBQZWRpZG9WZW5kYVtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtTG9va3VwU3VnZ2VzdGlvbnM6IFBlZGlkb1ZlbmRhSXRlbVtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcInNlcXVlbmNpYVwiLCBcInNrdS5kZXNjcmljYW9cIl07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJpZFwiLFxuICAgIFwic2VxdWVuY2lhXCIsXG4gICAgXCJza3UuZGVzY3JpY2FvXCIsXG4gIF07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZERhdGE6IFBlZGlkb1ZlbmRhSXRlbVtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGFnZW5kYUxvb2t1cFN1Z2dlc3Rpb25zOiBBZ2VuZGFbXTtcbiAgcHVibGljIGFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgcHVibGljIGFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICBwdWJsaWMgYWdlbmRhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIGFnZW5kYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGFnZW5kYVNlYXJjaEdyaWREYXRhOiBBZ2VuZGFbXTtcbiAgcHVibGljIGFnZW5kYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBkaXNhYmxlQnV0dG9uU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBkaXNhYmxlT3JkZXJzQnV0dG9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIHRvdGFsRWl4b3NDb250cmF0YWRvczogbnVtYmVyID0gMDtcbiAgcHVibGljIHRvdGFsRWl4b3NDb21wb3NpY2FvOiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyBvcmRlcnNWYWxpZCA9IHRydWU7XG4gIHB1YmxpYyBzYXZlQW5kSW5pdEJ1dHRvbjogYW55O1xuXG4gIEBJbnB1dCgpIHByaXZhdGUgYWdlbmRhOiBBZ2VuZGE7XG4gIEBJbnB1dCgpIHByaXZhdGUgcmV2YWxpZGFjYW86IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZChcImN1c3RvbVRlbXBsYXRlXCIpXG4gIHB1YmxpYyBjdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKFwiY3VzdG9tRm9ybUZpZWxkc1wiKVxuICBwdWJsaWMgY3VzdG9tRm9ybUZpZWxkczogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpOyAgXG4gIHByaXZhdGUgZXJwUHJvY2Vzc0RhdGE6IEVycFByb2Nlc3NEYXRhO1xuICBwcml2YXRlIGVuYWJsZVJldmFsaWRhdGlvbjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV4cGVkaWNhb1NlcnZpY2U6IEV4cGVkaWNhb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGhvdGtleXNTZXJ2aWNlOiBIb3RrZXlzU2VydmljZSxcbiAgICBwcml2YXRlIGZpZWxkQ3VzdG9taXphdGlvbjogRmllbGRDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZvY3VzU2VydmljZTogRm9jdXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVzc29hU2VydmljZTogUGVzc29hU2VydmljZSxcbiAgICBwcml2YXRlIGZpbGlhbFNlcnZpY2U6IEZpbGlhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc3BvcnRhZG9yYVNlcnZpY2U6IFRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICBwcml2YXRlIHBlZGlkb1ZlbmRhU2VydmljZTogUGVkaWRvVmVuZGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVkaWRvVmVuZGFJdGVtU2VydmljZTogUGVkaWRvVmVuZGFJdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFnZW5kYVNlcnZpY2U6IEFnZW5kYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVycmlkZTogRXhwZWRpY2FvQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnBQcm9jZXNzU2VydmljZTogRXJwUHJvY2Vzc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnBGb3JtQ29uZmlnU2VydmljZTogRXJwRm9ybUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBoYXNDaGFuZ2VTZXJ2aWNlOiBIYXNDaGFuZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybSA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFGb3JtKCk7XG4gICAgdGhpcy5pdGVtRm9ybUdyb3VwID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJvdXRlLmRhdGFcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm9uUm91dGVEYXRhQ2hhbmdlKGRhdGEpKTtcblxuICAgIHRoaXMucm91dGUucGFyYW1zXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgYWdlbmRhIH0pID0+IHtcbiAgICAgICAgaWYgKGFnZW5kYSAhPSBcIm5ld1wiKSB7XG4gICAgICAgICAgdGhpcy5nZXRFeHBlZGljYW8oYWdlbmRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ1c2NhckZpbGlhbCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5jbGllbnRlUmVtZXNzYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5maWxpYWxTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRQZWRpZG9WZW5kYVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMucGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRQZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzID0gdGhpcy5nZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuYWdlbmRhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmFnZW5kYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuc2V0SG90a2V5cygpO1xuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmV4dGVybmFsVGVuYW50KSB7XG4gICAgICB0aGlzLnNldFRyYW5zcG9ydGFkb3JhKHRoaXMuYWdlbmRhLmV4dGVybmFsVGVuYW50LmNucGopO1xuICAgIH1cblxuICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPSB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS52ZWljdWxvID8gdGhpcy5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwIDogMDtcblxuICAgIHRoaXMuc2V0UGVkaWRvc1ZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUobWVzc2FnZSA9PiB0aGlzLmVycFByb2Nlc3NEYXRhID0gbWVzc2FnZSk7ICAgIFxuICAgIHRoaXMuZXJwRm9ybUNvbmZpZ1NlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUobWVzc2FnZSA9PiB0aGlzLmVuYWJsZVJldmFsaWRhdGlvbiA9IG1lc3NhZ2UpOyAgXG5cbiAgICB0aGlzLnJldmFsaWRhY2FvVHJhbnNwb3J0YWRvcmEgKCk7XG4gICAgdGhpcy52ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCk7XG4gIH1cbiAgICAgICBcbiAgcHJpdmF0ZSB2ZXJpZmljYVNlVGVtQWx0ZXJhY2FvKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ2FycmVnYWRvKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXZhbGlkYWNhb1RyYW5zcG9ydGFkb3JhICgpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc3AgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmVycFByb2Nlc3NTZXJ2aWNlICYmIHRyYW5zcCkgeyAgICAgICAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVycFByb2Nlc3NEYXRhLnRyYW5zcG9ydGFkb3JhSWQgPSB0cmFuc3AuaWQ7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY2hhbmdlRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9KTsgICBcbiAgfVxuXG4gIHB1YmxpYyBhYnJpclBlZGlkb1ZlbmRhKHBlZGlkb1ZlbmRhPzogUGVkaWRvVmVuZGEpIHtcbiAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50QnlJZChcInBlZGlkb1ZlbmRhXCIpXG4gICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIik7XG5cbiAgICBpZiAoIWJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUZvcm0ucGF0Y2hWYWx1ZSh7IHBlZGlkb1ZlbmRhIH0pO1xuICAgIGJ1dHRvbnNbMF0uY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBleGNsdWlyUGVkaWRvVmVuZGEoaW5kZXg6IG51bWJlcikge1xuICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgcHVibGljIGFicmlyUGVkaWRvVmVuZGFJdGVtKFxuICAgIHBlZGlkbzogRm9ybUdyb3VwLFxuICAgIHBlZGlkb1ZlbmRhSXRlbT86IE9yZGVtVmVuZGFJdGVtXG4gICkge1xuICAgIHRoaXMuaXRlbUZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgcGVkaWRvVmVuZGFJdGVtIHx8IHsgaXRlbTogdW5kZWZpbmVkLCBxdWFudGlkYWRlOiAxIH1cbiAgICApO1xuICAgIHRoaXMucGVkaWRvQXR1YWwgPSBwZWRpZG87XG4gICAgdGhpcy52aXNpYmxlRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBleGNsdWlyUGVkaWRvVmVuZGFJdGVtKGlkOiBzdHJpbmcsIHBlZGlkbzogRm9ybUdyb3VwKSB7XG4gICAgY29uc3QgaW5kZXggPSAoXG4gICAgICAocGVkaWRvLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkudmFsdWUgYXMgT3JkZW1WZW5kYUl0ZW1bXVxuICAgICkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLml0ZW0uaWQgPT09IGlkKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgKHBlZGlkby5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0UGVkaWRvc1ZhbHVlQ2hhbmdlcygpIHtcbiAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGVkaWRvc0xlbmd0aCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSlcbiAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICB0aGlzLm9yZGVyc1ZhbGlkID0gcGVkaWRvc0xlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldChcImZpbGlhbFwiKVxuICAgICAgICAgIFtwZWRpZG9zTGVuZ3RoID49IDEgPyBcImRpc2FibGVcIiA6IFwiZW5hYmxlXCJdKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY2lvbmFyUGVkaWRvVmVuZGEocGVkaWRvVmVuZGE6IFBlZGlkb1ZlbmRhKSB7XG4gICAgY29uc3QgY2hlY2tPcmRlcnMgPSAob3JkZXI6IGFueSkgPT4gb3JkZXIucGVkaWRvVmVuZGEuaWQgPT09IHBlZGlkb1ZlbmRhLmlkO1xuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlO1xuXG4gICAgaWYgKHBlZGlkb3MuZmluZChjaGVja09yZGVycykpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfc3VtbWFyeVwiXG4gICAgICAgICksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9kZXRhaWxcIlxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSlcbiAgICAucHVzaCh0aGlzLmdldE9yZGVtVmVuZGFGb3JtKHBlZGlkb1ZlbmRhLCB0cnVlKSk7XG5cbiAgICBpZiAoXG4gICAgICAhIXBlZGlkb1ZlbmRhICYmXG4gICAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIXRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKS52YWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5idXNjYXJDbGllbnRlQUZhdHVyYXIocGVkaWRvVmVuZGEgYXMgYW55KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWNpb25hclBlZGlkb1ZlbmRhSXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtRm9ybUdyb3VwLnZhbHVlO1xuICAgIGNvbnN0IHBlZGlkbyA9IHRoaXMucGVkaWRvQXR1YWwuZ2V0KFwiaXRlbnNcIikudmFsdWU7XG4gICAgY29uc3QgY2hlY2tPcmRlckl0ZW5zID0gKG9yZGVyOiBhbnkpID0+IG9yZGVyLml0ZW0uaWQgPT09IGl0ZW0uaXRlbS5pZDtcbiAgICBpZiAocGVkaWRvICYmIGl0ZW0gJiYgaXRlbS5pdGVtICYmIHBlZGlkby5maW5kKGNoZWNrT3JkZXJJdGVucykpXG4gICAgICByZXR1cm4gdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcIndhcm5cIixcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAuaXRlbV9wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfc3VtbWFyeVwiXG4gICAgICAgICksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLml0ZW1fcGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX2RldGFpbFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gICAgZm9ybS5wYXRjaFZhbHVlKHsgLi4udGhpcy5pdGVtRm9ybUdyb3VwLnZhbHVlIH0pO1xuICAgIGlmIChmb3JtLmdldChcIml0ZW1cIikudmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgKHRoaXMucGVkaWRvQXR1YWwuZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xuICAgIHRoaXMudmlzaWJsZURpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW1BdXRvbWF0aWNhbWVudGUoXG4gICAgaXRlbnM6IGFueSxcbiAgICBwZWRpZG9WZW5kYTogYW55XG4gICkge1xuICAgIGlmIChpdGVucyAmJiBpdGVucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZ2V0UGVkaWRvcygpO1xuICAgICAgY29uc3QgcGVkaWRvQXR1YWw6IGFueSA9IHBlZGlkb3MuZmlsdGVyKChwZWRpZG86IGFueSkgPT5cbiAgICAgICAgcGVkaWRvICYmIHBlZGlkby52YWx1ZS5wZWRpZG9WZW5kYVxuICAgICAgICAgID8gcGVkaWRvLnZhbHVlLnBlZGlkb1ZlbmRhLmlkID09PSBwZWRpZG9WZW5kYS5pZFxuICAgICAgICAgIDogZmFsc2VcbiAgICAgICk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXBcbiAgICAgICAgLmdldChcIml0ZW1cIilcbiAgICAgICAgLnNldFZhbHVlKGl0ZW5zLmxlbmd0aCA9PT0gMSA/IGl0ZW5zWzBdIDoge30pO1xuICAgICAgdGhpcy5pdGVtRm9ybUdyb3VwLmdldChcInF1YW50aWRhZGVcIikuc2V0VmFsdWUoMSk7XG4gICAgICBmb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWUgfSk7XG4gICAgICAocGVkaWRvQXR1YWxbMF0uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xuICAgICAgdGhpcy52aXNpYmxlRGlhbG9nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFBlZGlkb3MoKTogQWJzdHJhY3RDb250cm9sW10ge1xuICAgIHJldHVybiAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkVG9rZW5zKGl0ZW5zOiBPcmRlbVZlbmRhSXRlbVtdKSB7XG4gICAgcmV0dXJuIGl0ZW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW0gJiYgaXRlbS5pdGVtID8gaXRlbS5pdGVtIDogaXRlbTtcbiAgICAgIGNvbnN0IHByb2R1dG8gPSB2YWx1ZS5za3UgPyB2YWx1ZS5za3UgOiB2YWx1ZS5wcm9kdXRvO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHZhbHVlLmlkLFxuICAgICAgICBsYWJlbDogYFByb2R1dG86ICR7cHJvZHV0by5kZXNjcmljYW99LCBTZXF1ZW5jaWE6ICR7dmFsdWUuc2VxdWVuY2lhfWAsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBpbnB1dExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuICAgIGNvbnN0IHNlbGVjdGVkSW5wdXQgPSBBcnJheS5mcm9tKGlucHV0TGlzdCkuZmluZCgoZjogYW55KSA9PiAhZi5kaXNhYmxlZCk7XG4gICAgaWYgKHNlbGVjdGVkSW5wdXQpIHtcbiAgICAgIHNlbGVjdGVkSW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLm92ZXJyaWRlLmluaXRpYWxpemUoKTtcbiAgICB0aGlzLnNhdmVBbmRJbml0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbml0XCIpO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtQ2FycmVnYWRvKSB7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2UodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1wiQUdVQVJEQU5ET19DT05GSVJNQUNBT19TT0xJQ0lUQU5URVwiLCBcIkFHRU5EQURPXCIsIFwiQUdVQVJEQU5ET19DT05GSVJNQUNBT1wiLCBcIlJFSkVJVEFET19QT1JfVkFMSURBQ0FPXCJdO1xuICAgIGlmICh0aGlzLmFnZW5kYSAmJiAhc3RhdHVzQWdlbmRhLmluY2x1ZGVzKHRoaXMuYWdlbmRhLnN0YXR1cykgfHwgIXRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25TYXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZVJlbWVzc2FcIikuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZUZhdHVyYW1lbnRvXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMucGVkaWRvVmVuZGFGb3JtLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJyaWRlLnJlbW92ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICBuZXcgSG90a2V5KFxuICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzTmV3KCkge1xuICAgIHJldHVybiAhdGhpcy5mb3JtR3JvdXAudmFsdWUuaWQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3VnZ2VzdGlvbnModmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZS5hZ2VuZGEpIHtcbiAgICAgIHZhbHVlLmFnZW5kYS5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSxcbiAgICAgICAgXCJhZ2VuZGFcIixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlLmFnZW5kYS5sYWJlbC50cmltKCkgPT09IHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yLnRyaW0oKSkge1xuICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgZGlzcGxheUZpZWxkczogc3RyaW5nW10sXG4gICAgb3duZXJFbnRpdHk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIHNlcGFyYXRvcjogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBkaXNwbGF5RmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICB9XG5cbiAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHsgY3VycmVuY3lTeW1ib2wsIHRob3VzYW5kc1NlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvciB9ID1cbiAgICAgIGRhdGEubG9jYWxlQ29uZmlnLm51bWJlcjtcblxuICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG4gICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuZXhwZWRpY2FvO1xuICAgIHRoaXMuYWxsUGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zO1xuICAgIC8vdGhpcy52YWxpZGF0ZVZpc3VhbGl6YXRpb24oKTtcbiAgICBpZiAoZGF0YS5lbnRpdHkpIHtcbiAgICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcjtcbiAgICAgIGlmICghY2FuRWRpdCkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgY29uc3QgdmFsdWU6IGFueSA9IEV4cGVkaWNhby5mcm9tRHRvKGRhdGEuZW50aXR5KTtcbiAgICAgIHRoaXMudXBkYXRlU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3IEV4cGVkaWNhbygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbmRGaWxlKGZpbGVzVG9EZWxldGU6IGFueSwgZmlsZXNUb0NvbW1pdDogYW55W10pIHtcbiAgICBjb25zdCBvYnNlcnZhYmxlczogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvRGVsZXRlKSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5kZWxldGVGaWxlcyhmaWxlc1RvRGVsZXRlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvQ29tbWl0KSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5jb21taXRGaWxlcyhmaWxlc1RvQ29tbWl0KSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KG9ic2VydmFibGVzKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKSB7XG4gICAgY29uc3QgbnVtZXJvUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIm51bWVyb1BlZGlkb0NsaWVudGVcIikudmFsdWU7XG4gICAgY29uc3QgaXRlbVBlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpdGVtUGVkaWRvQ2xpZW50ZVwiKS52YWx1ZTtcbiAgICBjb25zdCB7IHZhbHVlOiBwZWRpZG9zIH0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpO1xuICAgIChwZWRpZG9zIHx8IFtdKS5tYXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUgJiYgZS5pdGVucyAmJiBlLml0ZW5zLmxlbmd0aCkge1xuICAgICAgICBlLml0ZW5zWzBdLm51bWVyb1BlZGlkb0NsaWVudGUgPSBudW1lcm9QZWRpZG9DbGllbnRlO1xuICAgICAgICBlLml0ZW5zWzBdLml0ZW1QZWRpZG9DbGllbnRlID0gaXRlbVBlZGlkb0NsaWVudGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS5wYXRjaFZhbHVlKHBlZGlkb3MpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCkge1xuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlO1xuICAgIGNvbnN0IG51bWVyb1BlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJudW1lcm9QZWRpZG9DbGllbnRlXCIpO1xuICAgIGNvbnN0IGl0ZW1QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaXRlbVBlZGlkb0NsaWVudGVcIik7XG4gICAgKHBlZGlkb3MgfHwgW10pLm1hcCgoZTogYW55KSA9PiB7XG4gICAgICBpZiAobnVtZXJvUGVkaWRvQ2xpZW50ZS52YWx1ZSAmJiBpdGVtUGVkaWRvQ2xpZW50ZS52YWx1ZSkgcmV0dXJuO1xuICAgICAgY29uc3QgcGVkaWRvc0ludGVybm8gPVxuICAgICAgICBlICYmIGUuaXRlbnMgJiYgZS5pdGVucy5sZW5ndGggPyBlLml0ZW5zWzBdLnBlZGlkbyA6IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGlmIChwZWRpZG9zSW50ZXJuby5pdGVucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBudW1lcm9QZWRpZG9DbGllbnRlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVuc1swXS5udW1lcm9QZWRpZG9DbGllbnRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtUGVkaWRvQ2xpZW50ZS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnNbMF0uaXRlbVBlZGlkb0NsaWVudGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TYXZlKHN0YXJ0PzogYm9vbGVhbikge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImFnZW5kYVwiKS5zZXRWYWx1ZSh0aGlzLmFnZW5kYSk7XG4gICAgdGhpcy5vcmRlcnNWYWxpZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID4gMDtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkIHx8ICF0aGlzLm9yZGVyc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKTtcblxuICAgIGNvbnN0IHsgZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCB9ID0gdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZ2V0RmlsZXModGhpcy5mb3JtR3JvdXApO1xuICAgIFxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0KGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsIHN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIHRoaXMuYWdlbmRhLnN0YXR1cyA9IFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBTztcbiAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSwgc3RhcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmF0dWFsaXphRXhwZWRpY2FvKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsICgpID0+IHtcbiAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzTWVzc2FnZSgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfdGl0bGVcIiksXG4gICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFFeHBlZGljYW8oXG4gICAgZmlsZXNUb0RlbGV0ZTogYW55LFxuICAgIGZpbGVzVG9Db21taXQ6IGFueVtdLFxuICAgIG9uU3Vic2NyaWJlPzogRnVuY3Rpb25cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaWRcIikuc2V0VmFsdWUodmFsdWUuaWQgfHwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5vblNlbmRGaWxlKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICBcInNhdmVkX21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgICAgICAgXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9uU3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBjbnBqID0gdmFsdWUucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIi9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtjbnBqfSdgO1xuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZW50c1swXS5jb2RpZ29cbiAgICAgICAgICAgICAgPyBjb250ZW50c1swXS5jb2RpZ28udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRlbnRzWzBdLmRlc2NyaWNhb1xuICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmRlc2NyaWNhby50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIGlmICghZGVzY3JpcHRpb24udHJpbSgpICYmICFjb2RlLnRyaW0oKSkge1xuICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgXCJ5bXMuZXJwLmRlcml2YWNhb19zZW1fZGVzY3JpY2FvXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gYCR7Y29kZX0gLSAke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55KSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PlxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSxcbiAgICAgICAgb2JqXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEV4cGVkaWNhbyhhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmV4cGVkaWNhb1NlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBhZ2VuZGEuaWQgZXEgJyR7YWdlbmRhSWR9J2AsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPVxuICAgICAgICAgIGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsb1xuICAgICAgICAgICAgPyBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgY29uc3QgZXhwZWRpY2FvID0gRXhwZWRpY2FvLmZyb21EdG8oY29udGVudHNbMF0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGV4cGVkaWNhbyk7XG5cbiAgICAgICAgZXhwZWRpY2FvLnBlZGlkb3MuZm9yRWFjaCgocGVkaWRvKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0oKTtcbiAgICAgICAgICBmb3JtLnBhdGNoVmFsdWUocGVkaWRvKTtcbiAgICAgICAgICBwZWRpZG8uaXRlbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgICAgICAgICAgaXRlbUZvcm0ucGF0Y2hWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIChmb3JtLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChpdGVtRm9ybSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpO1xuICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgIHZhbHVlLFxuICAgICAgXCJjbGllbnRlIGVxIHRydWVcIlxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGllbnRlRmF0dXJhbWVudG9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuTG9va3VwKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWUuaWR9J2A7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICBmaWx0ZXJRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSR7XG4gICAgICBmaWx0ZXJRdWVyeSA/IFwiIGFuZCBcIiA6IFwiXCJcbiAgICB9c2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZWA7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICAgIH1cblxuICBwdWJsaWMgb25DbGllbnRlUmVtZXNzYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgdmFsdWUsXG4gICAgICBcImNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZVJlbWVzc2FTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGZpbHRlclF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9JHtcbiAgICAgIGZpbHRlclF1ZXJ5ID8gXCIgYW5kIFwiIDogXCJcIlxuICAgIH1zaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlYDtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSAhZXZlbnQgfHwgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwO1xuICB9XG5cbiAgcHVibGljIG9uRmlsaWFsTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLFxuICAgICAgICAgIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAobGlzdDogYW55KSA9PlxuICAgICAgICAgICh0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcCgoZmlsaWFsOiBhbnkpID0+XG4gICAgICAgICAgICBGaWxpYWwuZnJvbUR0byhmaWxpYWwpXG4gICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYge1xuICAgICAgY2FtcG86IHNvcnRbMF0uZmllbGQsXG4gICAgICBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgIH07XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waixcbiAgICAgICAgICBwYWdpbmE6IHtcbiAgICAgICAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgICAgICAgb2Zmc2V0OiBwYWdlLFxuICAgICAgICAgICAgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi5zb3J0Rm9ybWF0dGVkIH1dIDogbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRGF0YSA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgIHZhbHVlXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgZXZlbnRcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgZmlsdGVyUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0ke1xuICAgICAgZmlsdGVyUXVlcnkgPyBcIiBhbmQgXCIgOiBcIlwiXG4gICAgfXNpdHVhY2FvUGVkaWRvIGVxIEFCRVJUT19UT1RBTCBvciBzaXR1YWNhb1BlZGlkbyBlcSBBQkVSVE9fUEFSQ0lBTGA7XG5cbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZSB8fCBbXTtcbiAgICBsZXQgcGVkaWRvc0lkc1F1ZXJ5ID0gXCJcIjtcbiAgICBwZWRpZG9zLm1hcCgoZTogYW55KSA9PlxuICAgICAgZSAmJiBlLnBlZGlkb1ZlbmRhICYmIGUucGVkaWRvVmVuZGEuaWRcbiAgICAgICAgPyAocGVkaWRvc0lkc1F1ZXJ5ICs9IGAgYW5kIChpZCBuZSAnJHtlLnBlZGlkb1ZlbmRhLmlkfScpYClcbiAgICAgICAgOiBmYWxzZVxuICAgICk7XG4gICAgaWYgKHBlZGlkb3MubGVuZ3RoICYmIHBlZGlkb3NJZHNRdWVyeSkgZmlsdGVyUXVlcnkgKz0gcGVkaWRvc0lkc1F1ZXJ5O1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VydmljZVxuICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJlY1BhZ2luYShmaXJzdDogbnVtYmVyLCByb3dzOiBudW1iZXIsIHNvcnQ6IGFueSkge1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgb3JkZXJCeSA9XG4gICAgICBzb3J0ICYmIHNvcnQubGVuZ3RoXG4gICAgICAgID8gc29ydC5tYXAoKHM6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGNhbXBvOiBzLmZpZWxkLFxuICAgICAgICAgICAgb3JkZW5hY2FvOiBzLm9yZGVyID09PSAxID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHBhZ2UsXG4gICAgICBsaW1pdDogcm93cyxcbiAgICAgIGxpc3RhT3JkZW5hY2FvOiBvcmRlckJ5LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuXG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWUgfHwgW107XG4gICAgbGV0IHBlZGlkb3NTZWxlY2lvbmFkb3M6IGFueSA9IFtdO1xuICAgIHBlZGlkb3MubWFwKChlOiBhbnkpID0+XG4gICAgICBlICYmIGUucGVkaWRvVmVuZGEgJiYgZS5wZWRpZG9WZW5kYS5pZFxuICAgICAgICA/IHBlZGlkb3NTZWxlY2lvbmFkb3MucHVzaChlLnBlZGlkb1ZlbmRhLmlkKVxuICAgICAgICA6IGZhbHNlXG4gICAgKTtcblxuICAgIGNvbnN0IHBlc3F1aXNhOiBQZXNxdWlzYVBlZGlkb3NWZW5kYUR0byA9IHtcbiAgICAgIHBlc3NvYUlkOiBmaWx0ZXJEYXRhW1wiY2xpZW50ZVwiXSA/IGZpbHRlckRhdGFbXCJjbGllbnRlXCJdLmlkIDogbnVsbCxcbiAgICAgIGZpbGlhbElkOiBmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICA6IG51bGwsXG4gICAgICBmaWxpYWxQZWRpZG86IGZpbHRlckRhdGFbXCJmaWxpYWxQZWRpZG9cIl0sXG4gICAgICBwZWRpZG9zU2VsZWNpb25hZG9zLFxuICAgICAgbnVtZXJvOiBmaWx0ZXJEYXRhW1wibnVtZXJvXCJdLFxuICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYShmaXJzdCwgcm93cywgc29ydCksXG4gICAgfTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFTZXJ2aWNlXG4gICAgICAucGVzcXVpc2FyUGVkaWRvc1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFJdGVtTG9va3VwUmVxdWVzdCh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGZpbGlhbElkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSB8fCB7fSkuaWQ7XG4gICAgY29uc3QgcGVkaWRvSWQgPSAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJwZWRpZG9WZW5kYVwiKS52YWx1ZSB8fCB7fSkuaWQ7XG5cbiAgICBjb25zdCBwZXNxdWlzYSA9IHtcbiAgICAgIHBlZGlkb0lkLFxuICAgICAgZmlsaWFsSWQsXG4gICAgICBzZXF1ZW5jaWE6ICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IG51bGwsXG4gICAgICB0aXBvQWdlbmRhbWVudG9JZDpcbiAgICAgICAgdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKDAsIDEwLCBzb3J0KSxcbiAgICB9O1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlXG4gICAgICAucGVzcXVpc2FySXRlbnNQZWRpZG9WZW5kYShwZXNxdWlzYSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhSXRlbVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuXG4gICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcbiAgICBjb25zdCBwZWRpZG9JZCA9ICh0aGlzLnBlZGlkb0F0dWFsLmdldChcInBlZGlkb1ZlbmRhXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgIGNvbnN0IHBlc3F1aXNhID0ge1xuICAgICAgcGVkaWRvSWQsXG4gICAgICBmaWxpYWxJZCxcbiAgICAgIHNlcXVlbmNpYTogZmlsdGVyRGF0YVtcInNlcXVlbmNpYVwiXSxcbiAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoZmlyc3QsIHJvd3MsIHNvcnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgIC5wZXNxdWlzYXJJdGVuc1BlZGlkb1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdXRvbWF0aWNJdGVuc09yZGVyKHBlZGlkb1ZlbmRhOiBhbnkpIHtcbiAgICBpZiAocGVkaWRvVmVuZGEgJiYgcGVkaWRvVmVuZGEuaWQpIHtcbiAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgICAgY29uc3QgcGVzcXVpc2EgPSB7XG4gICAgICAgIHBlZGlkb0lkOiBwZWRpZG9WZW5kYS5pZCxcbiAgICAgICAgZmlsaWFsSWQsXG4gICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICAgIHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYSgwLCAxMCwgc29ydCksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgICAgLnBlc3F1aXNhckl0ZW5zUGVkaWRvVmVuZGEocGVzcXVpc2EpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW1BdXRvbWF0aWNhbWVudGUoXG4gICAgICAgICAgICBsaXN0LmNvbnRlbnRzLFxuICAgICAgICAgICAgcGVkaWRvVmVuZGFcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25BZ2VuZGFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgb3JkZXI6IDEsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAubGlzdEV4dGVybmFsQWdlbmRhKHsgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZ2VuZGFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcblxuICAgIC8qe0NBOk9OX0FHRU5EQV9MT09LVVBfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAvKntDQTpPTl9BR0VOREFfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICB9XG5cbiAgcHVibGljIG9uQWdlbmRhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5hZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmxpc3RFeHRlcm5hbEFnZW5kYSh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNsaWVudGVGYXR1cmFtZW50bzogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIF0sXG4gICAgICBjbGllbnRlUmVtZXNzYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH1dLFxuICAgICAgZmlsaWFsOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgXSxcbiAgICAgIHRyYW5zcG9ydGFkb3JhOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgcGVkaWRvczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICBhZ2VuZGE6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvQWdlbmRhbWVudG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvUGVkaWRvQ2xpZW50ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGl0ZW1QZWRpZG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgY3JlYXRlZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNyZWF0ZWREYXRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBsYXN0TW9kaWZpZWRCeTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLyp7Q0E6R0VUX0ZPUk1fQ09OVFJPTFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfRk9STV9DT05UUk9MUzpFTkR9Ki9cblxuICAgIHJldHVybiBmb3JtR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NwZkNucGpcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInNpdGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9zaXRlXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2Rlc2NyaWNhb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBjbGllbnRTdWdnZXN0aW9ucyQgPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcbiAgICBjb25zdCBjbGllbnRTZWFyY2gkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbFBlZGlkb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNsaWVudGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpLFxuICAgICAgICBzZWFyY2hHcmlkRmllbGRzOiB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCksXG4gICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogY2xpZW50U3VnZ2VzdGlvbnMkLFxuICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiBjbGllbnRTZWFyY2gkLFxuICAgICAgICBlbXB0eU1lc3NhZ2U6IFwiTmVuaHVtYSBzdWdlc3TDo28gZW5jb250cmFkYVwiLFxuICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBcInNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiBjbGllbnRTdWdnZXN0aW9ucyQubmV4dChsaXN0LmNvbnRlbnRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IsXG4gICAgICAgICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIFwic2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY2xpZW50U2VhcmNoJC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICBncmlkRGF0YTogbGlzdC5jb250ZW50cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsdGVyXCIpLFxuICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5pbnRlZ3JhdGlvbi5maWx0ZXJzXCIpLFxuICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5jbGVhclwiKSxcbiAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmNhbmNlbFwiKSxcbiAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNlbGVjdFwiKSxcbiAgICAgICAgdG9vbHRpcDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5jb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2EuY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9jb2RpZ29fbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJzZXF1ZW5jaWFcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9pdGVtX3NlcXVlbmNpYVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwic2t1LmRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKCkge1xuICAgIGNvbnN0IHByZXZpb3VzUm91dGUgPSBcIi4uL1wiO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvY3VzU2VydmljZS5mb2N1c0ZpcnN0SW52YWxpZElucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBleHBlZGljYW9EdG8gPSBFeHBlZGljYW8udG9EdG8odmFsdWUpO1xuXG4gICAgbGV0IG9ic2VydmFibGU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpICYmICF2YWx1ZS5pZCkge1xuICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMuZXhwZWRpY2FvU2VydmljZS5pbnNlcnQoZXhwZWRpY2FvRHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWQgPSB2YWx1ZS5pZDtcbiAgICAgIG9ic2VydmFibGUgPSB0aGlzLmV4cGVkaWNhb1NlcnZpY2UudXBkYXRlKGlkLCBleHBlZGljYW9EdG8pO1xuICAgIH1cblxuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZpc3VhbGl6YXRpb24oKSB7XG4gICAgaWYgKCF1c2VyQ2FuVmlzdWFsaXplKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmFsbFBlcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fc3VtbWFyeVwiLFxuICAgICAgICBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX2RldGFpbFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgc2V2ZXJpdHksXG4gICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwZWRpZG9WZW5kYTogW3VuZGVmaW5lZF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFGb3JtKFxuICAgIHBlZGlkb1ZlbmRhPzogUGVkaWRvVmVuZGEsXG4gICAgZ2V0QXV0b21hdGljSXRlbnNPcmRlcj86IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKGdldEF1dG9tYXRpY0l0ZW5zT3JkZXIpIHRoaXMuZ2V0QXV0b21hdGljSXRlbnNPcmRlcihwZWRpZG9WZW5kYSk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1bmRlZmluZWRdLFxuICAgICAgcGVkaWRvVmVuZGE6IFtwZWRpZG9WZW5kYV0sXG4gICAgICBpdGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFJdGVtRm9ybShwZWRpZG9WZW5kYUl0ZW0/OiBQZWRpZG9WZW5kYUl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICBwZWRpZG86IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbTogW3BlZGlkb1ZlbmRhSXRlbV0sXG4gICAgICBxdWFudGlkYWRlOiBbdW5kZWZpbmVkXSxcbiAgICAgIG51bWVyb1BlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbVBlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidXNjYXJGaWxpYWwoKSB7XG4gICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcblxuICAgIGlmIChwbGFudGEuY25wai5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgICBcbiAgICAgIHJldHVybjtcbiAgICB9IFxuICAgICAgXG4gICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtwbGFudGEuY25walswXX0nYCxcbiAgICAgICAgZGlzcGxheUZpZWxkczogW1wiKlwiLCBcImVtcHJlc2Eubm9tZVwiXSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnNldFZhbHVlKEZpbGlhbC5mcm9tRHRvKGNvbnRlbnRzWzBdKSk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgXG4gIH1cblxuICBwcml2YXRlIGJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGFEdG8pIHtcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtwZWRpZG9WZW5kYS5wZXNzb2EuaWR9J2AsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgaWYgKChjb250ZW50cyB8fCBbXSkubGVuZ3RoICE9PSAxKSByZXR1cm47XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKVxuICAgICAgICAgIC5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|