uitec-ng-assistant 1.0.2 → 1.0.3
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/README.md +213 -207
- package/esm2020/lib/components/assistant-panel/ui-assistant-panel.component.mjs +5 -5
- package/esm2020/lib/models/uiny.models.mjs +1 -1
- package/esm2020/lib/services/ui-assistant.service.mjs +4 -1
- package/esm2020/lib/uiny.config.mjs +1 -24
- package/fesm2015/uitec-ng-assistant.mjs +9 -28
- package/fesm2015/uitec-ng-assistant.mjs.map +1 -1
- package/fesm2020/uitec-ng-assistant.mjs +8 -28
- package/fesm2020/uitec-ng-assistant.mjs.map +1 -1
- package/lib/models/uiny.models.d.ts +11 -0
- package/lib/services/ui-assistant.service.d.ts +1 -0
- package/lib/uiny.config.d.ts +0 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,207 +1,213 @@
|
|
|
1
|
-
# uitec-ng-assistant
|
|
2
|
-
|
|
3
|
-
**Uiny**, assistente virtual da Uishop.
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
ng build ui-assistant # gera dist/ui-assistant
|
|
7
|
-
ng test ui-assistant --watch=false --browsers=ChromeHeadless --karma-config=karma.conf.js
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
A lib não depende do `uitec-ng-header`. São duas peças:
|
|
11
|
-
|
|
12
|
-
- `<ui-assistant-button>`: o botão que abre e fecha a Uiny. Pode ficar em qualquer lugar (no header, na sidebar, flutuando).
|
|
13
|
-
- `<ui-assistant-layout>`: envolve a aplicação e abre o painel **à direita, ocupando espaço real**. A aplicação (header e sidebar fixos inclusive) passa a usar a largura restante à esquerda, sem ficar coberta.
|
|
14
|
-
|
|
15
|
-
A Uiny só fica disponível (e o botão só aparece) quando **todas** as condições valem:
|
|
16
|
-
|
|
17
|
-
1. existe um `<ui-assistant-layout>` envolvendo a aplicação;
|
|
18
|
-
2. o `AuthService` do `uitec-ng-core` tem usuário com token e empresa atual;
|
|
19
|
-
3. a URL da API está configurada.
|
|
20
|
-
|
|
21
|
-
> Até a `uitec-ng-header@1.1.0` a Uiny ficava dentro do header (`[showAssistant]`). A partir da `1.1.1` o header não tem mais nada da Uiny: importe desta lib e coloque o botão no slot `#right` (seção 3).
|
|
22
|
-
|
|
23
|
-
### 1. Configurar a URL da API e o sistema
|
|
24
|
-
|
|
25
|
-
`AppModule`:
|
|
26
|
-
|
|
27
|
-
```ts
|
|
28
|
-
import { UiAssistantModule } from 'uitec-ng-assistant';
|
|
29
|
-
|
|
30
|
-
@NgModule({
|
|
31
|
-
imports: [
|
|
32
|
-
UiAssistantModule.forRoot({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```ts
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
<
|
|
88
|
-
|
|
89
|
-
<app-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
###
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
1
|
+
# uitec-ng-assistant
|
|
2
|
+
|
|
3
|
+
**Uiny**, assistente virtual da Uishop.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
ng build ui-assistant # gera dist/ui-assistant
|
|
7
|
+
ng test ui-assistant --watch=false --browsers=ChromeHeadless --karma-config=karma.conf.js
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
A lib não depende do `uitec-ng-header`. São duas peças:
|
|
11
|
+
|
|
12
|
+
- `<ui-assistant-button>`: o botão que abre e fecha a Uiny. Pode ficar em qualquer lugar (no header, na sidebar, flutuando).
|
|
13
|
+
- `<ui-assistant-layout>`: envolve a aplicação e abre o painel **à direita, ocupando espaço real**. A aplicação (header e sidebar fixos inclusive) passa a usar a largura restante à esquerda, sem ficar coberta.
|
|
14
|
+
|
|
15
|
+
A Uiny só fica disponível (e o botão só aparece) quando **todas** as condições valem:
|
|
16
|
+
|
|
17
|
+
1. existe um `<ui-assistant-layout>` envolvendo a aplicação;
|
|
18
|
+
2. o `AuthService` do `uitec-ng-core` tem usuário com token e empresa atual;
|
|
19
|
+
3. a URL da API está configurada.
|
|
20
|
+
|
|
21
|
+
> Até a `uitec-ng-header@1.1.0` a Uiny ficava dentro do header (`[showAssistant]`). A partir da `1.1.1` o header não tem mais nada da Uiny: importe desta lib e coloque o botão no slot `#right` (seção 3).
|
|
22
|
+
|
|
23
|
+
### 1. Configurar a URL da API e o sistema
|
|
24
|
+
|
|
25
|
+
`AppModule`:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { UiAssistantModule } from 'uitec-ng-assistant';
|
|
29
|
+
|
|
30
|
+
@NgModule({
|
|
31
|
+
imports: [
|
|
32
|
+
UiAssistantModule.forRoot({
|
|
33
|
+
sistemaOrigem: 'studio', // 'erp' no ERP
|
|
34
|
+
sugestoes: {
|
|
35
|
+
textos: ['Deixe as cores do meu site mais modernas'],
|
|
36
|
+
alteracoes: true,
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
})
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Nos módulos que declaram o layout e o header (ex.: `SharedModule`), importe `UiAssistantModule` sem `forRoot`:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
imports: [UiHeaderModule, UiAssistantModule]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
A URL vem de `environment.domain.uiny`. Inclua o `/api/v1`:
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
// environment.ts
|
|
53
|
+
domain: {
|
|
54
|
+
api: 'http://localhost:8000/api',
|
|
55
|
+
uiny: 'http://localhost:8100/api/v1', // uishop-ia
|
|
56
|
+
}
|
|
57
|
+
// environment.prod.ts
|
|
58
|
+
domain: { uiny: 'https://<host-da-uiny>/api/v1' }
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`forRoot({ apiUrl })` sobrescreve o environment se precisar. Opções: `larguraPainel` (340–400, padrão 380) e `larguraMinimaLadoALado` (padrão 1200).
|
|
62
|
+
|
|
63
|
+
**Avatar:** como as outras imagens das libs (logo, coroa), o arquivo fica nos `assets` de cada aplicação. Coloque em `src/assets/images/uiny/avatar.svg` no Studio, no ERP e na demo, ou informe outro caminho em `forRoot({ avatarUrl })`. Se a imagem não carregar, o painel mostra o ícone padrão.
|
|
64
|
+
|
|
65
|
+
A origem do Angular precisa estar em `CORS_ORIGINS` do uishop-ia.
|
|
66
|
+
|
|
67
|
+
### 2. Autenticação
|
|
68
|
+
|
|
69
|
+
Nada novo para configurar. A Uiny lê o token de `AuthService.currentUserValue.token`, a mesma fonte do `JwtInterceptor`, e envia `Authorization: Bearer` **somente** para a URL da Uiny.
|
|
70
|
+
|
|
71
|
+
As chamadas da Uiny usam um `HttpClient` próprio, sem os interceptors da aplicação. Motivo: o `ErrorInterceptor` troca o erro por uma string e perde o status. Sem o status não dá para distinguir sessão expirada, ação expirada e conflito. Além disso, ele mostraria toasts globais, e o `SpinnerInterceptor` cobriria a tela a cada mensagem.
|
|
72
|
+
|
|
73
|
+
A Uiny fecha o painel, cancela as requisições e descarta conversa, ações e catálogo em memória quando:
|
|
74
|
+
|
|
75
|
+
- acontece logout (`currentUser` vira `null`);
|
|
76
|
+
- muda o usuário, a empresa atual ou o token (inclusive no re-login do mesmo usuário);
|
|
77
|
+
- a API responde 401 (a Uiny fica oculta até a sessão mudar).
|
|
78
|
+
|
|
79
|
+
Nada vai para `localStorage`/`sessionStorage`. Sem internet (`navigator.onLine`), o painel mostra o aviso e bloqueia o envio.
|
|
80
|
+
|
|
81
|
+
### 3. Integrar ao layout (Studio e ERP)
|
|
82
|
+
|
|
83
|
+
**O botão sozinho não desloca a aplicação.** Envolva o conteúdo do `content.component.html`:
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<ui-assistant-layout (assistantEvent)="aoEventoUiny($event)">
|
|
87
|
+
<div [ngClass]="layout.config.settings.layout_type" [class]="layout.config.settings.layout_version">
|
|
88
|
+
<div class="page-wrapper" id="canvas-bookmark" [ngClass]="layoutClass">
|
|
89
|
+
<app-header *ngIf="userObs | async"></app-header>
|
|
90
|
+
...
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
<ui-suporte></ui-suporte> <!-- ERP: dentro do layout, para acompanhar a coluna -->
|
|
94
|
+
</ui-assistant-layout>
|
|
95
|
+
<app-spinner *ngIf="spinnerService.spinnerObservable | async"></app-spinner>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
E coloque o botão onde quiser. No header, use o slot `#right` (ele é renderizado dentro da lista de ícones, por isso o `<li>`):
|
|
99
|
+
|
|
100
|
+
```html
|
|
101
|
+
<ui-header ...>
|
|
102
|
+
<ng-template #right>
|
|
103
|
+
<li><ui-assistant-button></ui-assistant-button></li>
|
|
104
|
+
</ng-template>
|
|
105
|
+
</ui-header>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Sem o botão, o painel continua acessível por código: `UiAssistantService.abrir()`, `fechar()` e `alternar()`.
|
|
109
|
+
|
|
110
|
+
Como funciona:
|
|
111
|
+
|
|
112
|
+
- **Fechado:** wrappers neutros, a janela rola normalmente. Nada muda para o usuário.
|
|
113
|
+
- **Aberto (≥ 1200 px):** linha flex `[aplicação | painel]` com a altura da viewport. A coluna da aplicação recebe `contain: layout paint`, então os elementos `position: fixed` do tema Cuba (`.page-header`, `.sidebar-wrapper`) passam a se posicionar dentro dela, e ela ganha rolagem própria. A posição de rolagem é transferida na abertura e devolvida no fechamento. A cada `NavigationEnd`, a coluna volta ao topo (o `scrollPositionRestoration` do router só atua na janela).
|
|
114
|
+
- **Aberto (< 1200 px):** o painel ocupa a largura toda e a aplicação fica recolhida (`inert`) até o usuário tocar em "Voltar".
|
|
115
|
+
- Transição de largura de 240 ms, desligada com `prefers-reduced-motion`.
|
|
116
|
+
|
|
117
|
+
Efeitos colaterais conhecidos com o painel aberto:
|
|
118
|
+
|
|
119
|
+
- Listeners de `window.scroll` não disparam, porque quem rola é a coluna.
|
|
120
|
+
- As media queries do tema continuam medindo a viewport: o layout desktop do Cuba é mantido na coluna, que tem no mínimo 800 px.
|
|
121
|
+
- Modais e overlays anexados ao `body` continuam cobrindo a tela toda, como hoje.
|
|
122
|
+
|
|
123
|
+
O `uitec-ng-header` usa `width: 100%` em `.not-sidebar` (antes `100vw`) para acompanhar a coluna.
|
|
124
|
+
|
|
125
|
+
### 4. Contexto da tela
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
constructor(private uiny: UiAssistantService) { }
|
|
129
|
+
|
|
130
|
+
ngOnInit() {
|
|
131
|
+
this.uiny.definirContexto({
|
|
132
|
+
tela: 'loja-leiaute/editar', // até 60 caracteres [a-z0-9_-/.]
|
|
133
|
+
idLoja: this.loja.id_loja,
|
|
134
|
+
idLojaLeiaute: this.lojaLeiaute.id_loja_leiaute,
|
|
135
|
+
// também: idTema, idProduto, idPedido
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
ngOnDestroy() { this.uiny.definirContexto(null); }
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Os campos seguem o `ContextoTela` do backend, que recusa campos extras com 422. O `sistema` vem do `forRoot`. `atualizarContexto({ idLoja })` altera só os campos informados, e valores inválidos são descartados. O contexto é só uma indicação: quem autoriza é o backend. Com `idLoja`, o backend confere no Studio se a loja é da empresa (403 se não for) e restringe a conversa a ela.
|
|
142
|
+
|
|
143
|
+
**Trocar de loja encerra a conversa atual.** A lista "Conversas anteriores" mostra só as do mesmo sistema e da mesma loja. Trocar de empresa limpa tudo (seção 2).
|
|
144
|
+
|
|
145
|
+
### 5. Eventos de ações concluídas
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
aoEventoUiny(e: UinyEvento) {
|
|
149
|
+
switch (e.tipo) {
|
|
150
|
+
case 'acao_concluida': // a API devolveu a ação como "executada"
|
|
151
|
+
break;
|
|
152
|
+
case 'tema_atualizado': // instrução "atualizar_preview_tema" do backend
|
|
153
|
+
if (e.idLojaLeiaute === this.lojaLeiaute?.id_loja_leiaute) this.recarregarPreview();
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Também disponível como `UiAssistantService.eventos$`. Eventos só saem de respostas novas, nunca do histórico. Instruções fora da lista são descartadas. O componente não navega e não executa nada recebido da API.
|
|
160
|
+
|
|
161
|
+
### Exemplos
|
|
162
|
+
|
|
163
|
+
**Studio** (`sistemaOrigem: 'studio'`): contexto com `idLoja` e `idLojaLeiaute` na tela do editor; recarregar a prévia em `tema_atualizado`.
|
|
164
|
+
|
|
165
|
+
**ERP** (`sistemaOrigem: 'erp'`): contexto com `tela` (ex.: `produto/form`) e `idProduto` ou `idPedido` quando houver. As ferramentas atuais do ERP são só de consulta.
|
|
166
|
+
|
|
167
|
+
### Confirmação de ações
|
|
168
|
+
|
|
169
|
+
O card mostra o `resumo` e os `detalhes` da ação (na troca de cor: tema, loja, cor, valor atual e novo, com amostra), o prazo e os botões **Confirmar** e **Cancelar**:
|
|
170
|
+
|
|
171
|
+
- A confirmação só acontece pelo clique. O card envia `POST /acoes/{id}/confirmar` com corpo `{}`: nenhum argumento sai do frontend.
|
|
172
|
+
- Cliques repetidos são ignorados enquanto a ação não está `pendente`.
|
|
173
|
+
- Sucesso só aparece com `situacao: executada` na resposta. Situação desconhecida vira "Resultado a verificar".
|
|
174
|
+
- 409 `ACAO_INVALIDADA`: o card antigo vira "Precisa de nova confirmação" e a nova proposta aparece com seus próprios botões.
|
|
175
|
+
- 409 de expirada, cancelada ou em execução, e 502/504: o card usa a situação que vem no corpo do erro.
|
|
176
|
+
- Timeout ou erro de rede depois de confirmar: **nada é repetido**. O card fica "Resultado a verificar" com o botão "Verificar resultado", que relê o histórico da conversa.
|
|
177
|
+
- Ação vencida pelo relógio local não é enviada.
|
|
178
|
+
|
|
179
|
+
Pedidos de esclarecimento (`estado: esclarecimento` com bloco `opcoes`) mostram as opções como botões na última mensagem; o clique envia a opção como texto.
|
|
180
|
+
|
|
181
|
+
### Segurança e acessibilidade
|
|
182
|
+
|
|
183
|
+
- O texto é renderizado como um subconjunto de Markdown por interpolação (sem `innerHTML`, sem bypass). Links só `http`, `https` e `mailto`, abertos com `noopener noreferrer`.
|
|
184
|
+
- Mensagens de 5xx não são exibidas cruas. O id de correlação aparece para o suporte.
|
|
185
|
+
- Painel `aside` não modal no desktop, com rótulo acessível. O foco vai para o campo ao abrir e volta ao botão ao fechar. Escape fecha. Há uma região `aria-live` discreta para "respondendo", "nova resposta" e "alteração concluída".
|
|
186
|
+
- Enter envia e Shift+Enter quebra a linha. Composição (IME) é respeitada. Envio vazio ou duplicado é bloqueado. O limite é de 2000 caracteres (`UINY_MENSAGEM_MAX_CARACTERES` do backend).
|
|
187
|
+
|
|
188
|
+
### API pública
|
|
189
|
+
|
|
190
|
+
`UiAssistantModule`, `UiAssistantService`, `UinyChatService`, `UinyApiService`, `UinySessionService`, os componentes `ui-assistant-*`, os tipos `UinyConfig`, `UinyContexto`, `UinyEvento` e `Uiny*Api`, e `UINY_CONFIG`.
|
|
191
|
+
|
|
192
|
+
### Contrato
|
|
193
|
+
|
|
194
|
+
Fonte: `C:\git\uishop\uishop-ia` (README, `config/web.php`, `services/uiny/ApresentadorConversa.php`, `ContextoTela.php`, `ConfirmacaoService.php`, `config/Constants.php`). Tipos em `lib/models/uiny-api.models.ts`, conversão em `lib/utils/uiny-api.adapter.ts`.
|
|
195
|
+
|
|
196
|
+
| Rota (`/api/v1`) | Uso no frontend |
|
|
197
|
+
|---|---|
|
|
198
|
+
| `POST /conversas` `{ contexto }` | criada no primeiro envio |
|
|
199
|
+
| `POST /conversas/{id}/mensagens` `{ texto, contexto }` | resposta com `conversa`, `estado`, `mensagem`, `acao_pendente` |
|
|
200
|
+
| `GET /conversas?page=1&per_page=20` | "Conversas anteriores", filtrada pelo sistema e pela loja atuais |
|
|
201
|
+
| `GET /conversas/{id}?page=1&per_page=100` | abrir conversa anterior e "Verificar resultado" |
|
|
202
|
+
| `POST /acoes/{id}/confirmar` e `/cancelar` | corpo `{}` |
|
|
203
|
+
|
|
204
|
+
Pontos em aberto:
|
|
205
|
+
|
|
206
|
+
- **Sugestões iniciais:** a API não expõe o catálogo de ferramentas, então cada sistema passa as suas em `forRoot({ sistemaOrigem, sugestoes: { textos, alteracoes } })`. Sugira só o que as ferramentas do uishop-ia daquele sistema conseguem fazer (README do backend); sem `sugestoes`, o painel abre sem elas.
|
|
207
|
+
- **Blocos de `apresentacao`:** só `opcoes` é renderizado. `lista_produtos`, `resumo_vendas`, `lista_lojas`, `tema` e `alteracao_cor` aparecem apenas pelo texto da mensagem.
|
|
208
|
+
- **Histórico longo:** abrir uma conversa carrega as 100 mensagens mais recentes; não há "carregar anteriores".
|
|
209
|
+
- **401:** o backend sugere redirecionar para o login. A Uiny apenas se esconde, para não derrubar a sessão da aplicação por causa da idade máxima de token, que é mais curta na Uiny.
|
|
210
|
+
|
|
211
|
+
### Demonstração
|
|
212
|
+
|
|
213
|
+
App `cuba`, rota `#/assistente` ("Uiny (assistente)" no menu). A API é simulada por `src/app/site/pages/assistente/demo/uiny-demo.backend.ts`, no formato do contrato real, que só responde a `https://uiny-demo.local/api/v1` e repassa o resto ao `HttpXhrBackend`. O usuário é trocado só em memória. A página tem controles para mostrar ou esconder o botão no header, login/logout, troca de loja, resultado da confirmação e atraso. Para usar a API real na demo, defina `environment.domain.uiny` (a demo passa a usá-la no lugar da simulada) e entre no Studio ou no ERP em `localhost` para ter o cookie de sessão.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, Optional, ViewChild } from '@angular/core';
|
|
2
2
|
import { Subscription } from 'rxjs';
|
|
3
|
-
import { UINY_AVATAR_PADRAO, UINY_CONFIG
|
|
3
|
+
import { UINY_AVATAR_PADRAO, UINY_CONFIG } from '../../uiny.config';
|
|
4
4
|
import { UiAssistantService } from '../../services/ui-assistant.service';
|
|
5
5
|
import { UinyChatService } from '../../services/uiny-chat.service';
|
|
6
6
|
import { UinySessionService } from '../../services/uiny-session.service';
|
|
@@ -116,10 +116,10 @@ export class UiAssistantPanelComponent {
|
|
|
116
116
|
return c.id;
|
|
117
117
|
}
|
|
118
118
|
montarBoasVindas() {
|
|
119
|
-
const sugestoes =
|
|
120
|
-
this.sugestoes = sugestoes
|
|
119
|
+
const sugestoes = this.assistant.sugestoes;
|
|
120
|
+
this.sugestoes = sugestoes?.textos ?? [];
|
|
121
121
|
this.capacidades = [];
|
|
122
|
-
this.temAlteracoes = sugestoes
|
|
122
|
+
this.temAlteracoes = !!sugestoes?.alteracoes;
|
|
123
123
|
}
|
|
124
124
|
anunciar(texto) {
|
|
125
125
|
// limpa antes para leitores de tela repetirem anúncios iguais
|
|
@@ -153,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
153
153
|
type: HostListener,
|
|
154
154
|
args: ['keydown.escape', ['$event']]
|
|
155
155
|
}] } });
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWFzc2lzdGFudC9zcmMvbGliL2NvbXBvbmVudHMvYXNzaXN0YW50LXBhbmVsL3VpLWFzc2lzdGFudC1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1hc3Npc3RhbnQvc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lzdGFudC1wYW5lbC91aS1hc3Npc3RhbnQtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7OztBQVFyRyxNQUFNLE9BQU8seUJBQXlCO0lBdUJsQyxZQUNXLElBQXFCLEVBQ3JCLFNBQTZCLEVBQzVCLE9BQTJCLEVBQzNCLEdBQXNCLEVBQ0csTUFBeUI7UUFKbkQsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FB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Qix1TUFLdkIsNEJBQTRCLGdEQ2hDM0Msb3JNQWtIQTs0RkR2RmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNOzswQkE4QjFDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVzs0Q0F6QjFCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRW1DLFFBQVE7c0JBQWhELFNBQVM7dUJBQUMsNEJBQTRCO2dCQXNEdkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVWlueUFjYW8sIFVpbnlDb25maWcsIFVpbnlNZW5zYWdlbSB9IGZyb20gJy4uLy4uL21vZGVscy91aW55Lm1vZGVscyc7XHJcbmltcG9ydCB7IFVJTllfQVZBVEFSX1BBRFJBTywgVUlOWV9DT05GSUcsIFVJTllfU1VHRVNUT0VTIH0gZnJvbSAnLi4vLi4vdWlueS5jb25maWcnO1xyXG5pbXBvcnQgeyBVaUFzc2lzdGFudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aS1hc3Npc3RhbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFVpbnlDaGF0RXN0YWRvLCBVaW55Q2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aW55LWNoYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFVpbnlTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Vpbnktc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlBc3Npc3RhbnRDb21wb3NlckNvbXBvbmVudCB9IGZyb20gJy4uL2Fzc2lzdGFudC1jb21wb3Nlci91aS1hc3Npc3RhbnQtY29tcG9zZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd1aS1hc3Npc3RhbnQtcGFuZWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWFzc2lzdGFudC1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1hc3Npc3RhbnQtcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFzc2lzdGFudFBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIC8qKiBQYWluZWwgZW0gbGFyZ3VyYSB0b3RhbCAoY2VsdWxhci90YWJsZXQpOiBvIGJvdMOjbyBkZSBmZWNoYXIgdmlyYSBcIlZvbHRhclwiLiAqL1xyXG4gICAgQElucHV0KCkgZW1waWxoYWRvID0gZmFsc2U7XHJcblxyXG4gICAgQFZpZXdDaGlsZChVaUFzc2lzdGFudENvbXBvc2VyQ29tcG9uZW50KSBjb21wb3NlcjogVWlBc3Npc3RhbnRDb21wb3NlckNvbXBvbmVudDtcclxuXHJcbiAgICBwdWJsaWMgZXN0YWRvOiBVaW55Q2hhdEVzdGFkbztcclxuICAgIHB1YmxpYyBvbmxpbmUgPSB0cnVlO1xyXG4gICAgcHVibGljIGFudW5jaW8gPSAnJztcclxuICAgIHB1YmxpYyB2ZW5kb0hpc3RvcmljbyA9IGZhbHNlO1xyXG4gICAgcHVibGljIG1lbnNhZ2VuczogVWlueU1lbnNhZ2VtW10gPSBbXTtcclxuICAgIHB1YmxpYyBhY29lczogeyBbaWQ6IHN0cmluZ106IFVpbnlBY2FvIH0gPSB7fTtcclxuICAgIHB1YmxpYyBzdWdlc3RvZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBwdWJsaWMgY2FwYWNpZGFkZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBwdWJsaWMgdGVtQWx0ZXJhY29lcyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGF2YXRhclVybDogc3RyaW5nO1xyXG4gICAgLyoqIEEgaW1hZ2VtIG7Do28gY2FycmVnb3U6IHVzYSBvIMOtY29uZSBwYWRyw6NvLiAqL1xyXG4gICAgcHVibGljIGF2YXRhckZhbGhvdSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHByaXZhdGUgdGltZXJBbnVuY2lvOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGNoYXQ6IFVpbnlDaGF0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYXNzaXN0YW50OiBVaUFzc2lzdGFudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uOiBVaW55U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVUlOWV9DT05GSUcpIGNvbmZpZzogVWlueUNvbmZpZyB8IG51bGxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuYXZhdGFyVXJsID0gY29uZmlnPy5hdmF0YXJVcmwgfHwgVUlOWV9BVkFUQVJfUEFEUkFPO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5jaGF0LmVzdGFkby5zdWJzY3JpYmUoZXN0YWRvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lc3RhZG8gPSBlc3RhZG87XHJcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW5zID0gZXN0YWRvLm1lbnNhZ2VucztcclxuICAgICAgICAgICAgdGhpcy5hY29lcyA9IGVzdGFkby5hY29lcztcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5zZXNzaW9uLm9ubGluZSQuc3Vic2NyaWJlKG9ubGluZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25saW5lID0gb25saW5lO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmNoYXQuYW51bmNpb3Muc3Vic2NyaWJlKHRleHRvID0+IHRoaXMuYW51bmNpYXIodGV4dG8pKSk7XHJcbiAgICAgICAgdGhpcy5tb250YXJCb2FzVmluZGFzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGVzcGVyYSBhIHRyYW5zacOnw6NvIGNvbWXDp2FyIHBhcmEgbsOjbyByb2xhciBhIHDDoWdpbmEgbm8gZm9jdXNcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29tcG9zZXI/LmZvY2FyKCksIDYwKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lckFudW5jaW8pO1xyXG4gICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcclxuICAgIGFvRXNjYXBlKGV2ZW50bzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChldmVudG8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnZlbmRvSGlzdG9yaWNvKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudG8ucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLmFzc2lzdGFudC5mZWNoYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9kZUVudmlhcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbmxpbmUgJiYgIXRoaXMuZXN0YWRvPy5lbnZpYW5kbyAmJiAhdGhpcy5lc3RhZG8/LmNhcnJlZ2FuZG9Db252ZXJzYTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW90aXZvQmxvcXVlaW8oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9ubGluZSkgcmV0dXJuICdTZW0gY29uZXjDo28gY29tIGEgaW50ZXJuZXQuJztcclxuICAgICAgICBpZiAodGhpcy5lc3RhZG8/LmNhcnJlZ2FuZG9Db252ZXJzYSkgcmV0dXJuICdDYXJyZWdhbmRvIGEgY29udmVyc2HigKYnO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZlY2hhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFzc2lzdGFudC5mZWNoYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbnZpYXIodGV4dG86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5wb2RlRW52aWFyKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhdC5lbnZpYXIodGV4dG8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9zZXI/LmxpbXBhcigpO1xyXG4gICAgICAgICAgICB0aGlzLnZlbmRvSGlzdG9yaWNvID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZW52aWFyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRleHRvID0gdGhpcy5lc3RhZG8/LnRleHRvQ29tRmFsaGE7XHJcbiAgICAgICAgaWYgKHRleHRvICYmIHRoaXMucG9kZUVudmlhcikgdGhpcy5jaGF0LmVudmlhcih0ZXh0byk7XHJcbiAgICB9XHJcblxyXG4gICAgdXNhclN1Z2VzdGFvKHRleHRvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVudmlhcih0ZXh0byk7XHJcbiAgICB9XHJcblxyXG4gICAgbm92YUNvbnZlcnNhKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXQubm92YUNvbnZlcnNhKCkpIHtcclxuICAgICAgICAgICAgdGhpcy52ZW5kb0hpc3RvcmljbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmFudW5jaWFyKCdOb3ZhIGNvbnZlcnNhIGluaWNpYWRhLicpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29tcG9zZXI/LmZvY2FyKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhbHRlcm5hckhpc3RvcmljbygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZlbmRvSGlzdG9yaWNvID0gIXRoaXMudmVuZG9IaXN0b3JpY287XHJcbiAgICAgICAgaWYgKHRoaXMudmVuZG9IaXN0b3JpY28pIHRoaXMuY2hhdC5saXN0YXJDb252ZXJzYXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhYnJpckNvbnZlcnNhKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZlbmRvSGlzdG9yaWNvID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGF0LmFicmlyQ29udmVyc2EoaWQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb21wb3Nlcj8uZm9jYXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tDb252ZXJzYShfOiBudW1iZXIsIGM6IHsgaWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIGMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb250YXJCb2FzVmluZGFzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN1Z2VzdG9lcyA9IFVJTllfU1VHRVNUT0VTW3RoaXMuYXNzaXN0YW50LnNpc3RlbWFPcmlnZW1dID8/IHsgdGV4dG9zOiBbXSwgYWx0ZXJhY29lczogZmFsc2UgfTtcclxuICAgICAgICB0aGlzLnN1Z2VzdG9lcyA9IHN1Z2VzdG9lcy50ZXh0b3M7XHJcbiAgICAgICAgdGhpcy5jYXBhY2lkYWRlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtQWx0ZXJhY29lcyA9IHN1Z2VzdG9lcy5hbHRlcmFjb2VzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYW51bmNpYXIodGV4dG86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGxpbXBhIGFudGVzIHBhcmEgbGVpdG9yZXMgZGUgdGVsYSByZXBldGlyZW0gYW7Dum5jaW9zIGlndWFpc1xyXG4gICAgICAgIHRoaXMuYW51bmNpbyA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyQW51bmNpbyk7XHJcbiAgICAgICAgaWYgKCF0ZXh0bykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudGltZXJBbnVuY2lvID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYW51bmNpbyA9IHRleHRvO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJ1aW55XCIgYXJpYS1sYWJlbGxlZGJ5PVwidWlueS10aXR1bG9cIj5cclxuICAgIDxoZWFkZXIgY2xhc3M9XCJ1aW55X190b3BvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpbnlfX21hcmNhXCI+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCIhYXZhdGFyRmFsaG91XCIgY2xhc3M9XCJ1aW55X19hdmF0YXIgdWlueV9fYXZhdGFyLS1pbWFnZW1cIiBbc3JjXT1cImF2YXRhclVybFwiIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjM0XCIgaGVpZ2h0PVwiMzRcIiAoZXJyb3IpPVwiYXZhdGFyRmFsaG91ID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF2YXRhckZhbGhvdVwiIGNsYXNzPVwidWlueV9fYXZhdGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMi41Yy41IDMuOSAyLjYgNi45IDYuNCA4LjIuNS4yLjUuOSAwIDEuMS0zLjggMS4zLTUuOSA0LjMtNi40IDguMi0uMS42LS45LjYtMSAwLS41LTMuOS0yLjYtNi45LTYuNC04LjItLjUtLjItLjUtLjkgMC0xLjEgMy44LTEuMyA1LjktNC4zIDYuNC04LjIuMS0uNi45LS42IDEgMFpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpbnlfX2lkZW50aWRhZGVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBpZD1cInVpbnktdGl0dWxvXCIgY2xhc3M9XCJ1aW55X19ub21lXCI+VWlueTwvaDI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVpbnlfX3N1YlwiPkFzc2lzdGVudGUgZGEgVWlzaG9wPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpbnlfX2NvbWFuZG9zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9faWNvbmVcIiBbY2xhc3MuaXMtYXRpdm9dPVwidmVuZG9IaXN0b3JpY29cIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInZlbmRvSGlzdG9yaWNvID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29udmVyc2FzIGFudGVyaW9yZXNcIiB0aXRsZT1cIkNvbnZlcnNhcyBhbnRlcmlvcmVzXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhbHRlcm5hckhpc3RvcmljbygpXCI+XHJcbiAgICAgICAgICAgICAgICA8dWktaWNvbiBpY29uPVwiaGlzdG9yeVwiIHNpemU9XCIyMFwiPjwvdWktaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9faWNvbmVcIiBhcmlhLWxhYmVsPVwiTm92YSBjb252ZXJzYVwiIHRpdGxlPVwiTm92YSBjb252ZXJzYVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2hhdC5vY3VwYWRvXCIgKGNsaWNrKT1cIm5vdmFDb252ZXJzYSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8dWktaWNvbiBpY29uPVwiZWRpdF9zcXVhcmVcIiBzaXplPVwiMjBcIj48L3VpLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnlfX2ljb25lXCIgKGNsaWNrKT1cImZlY2hhcigpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZW1waWxoYWRvID8gJ1ZvbHRhciBwYXJhIGEgYXBsaWNhw6fDo28nIDogJ0ZlY2hhciBhIFVpbnknXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJlbXBpbGhhZG8gPyAnVm9sdGFyIHBhcmEgYSBhcGxpY2HDp8OjbycgOiAnRmVjaGFyIChFc2MpJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHVpLWljb24gW2ljb25dPVwiZW1waWxoYWRvID8gJ2Fycm93X2JhY2snIDogJ2Nsb3NlJ1wiIHNpemU9XCIyMFwiPjwvdWktaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2hlYWRlcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIW9ubGluZVwiIGNsYXNzPVwidWlueV9fZmFpeGEgdWlueV9fZmFpeGEtLW9mZmxpbmVcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgPHVpLWljb24gaWNvbj1cIndpZmlfb2ZmXCIgc2l6ZT1cIjE4XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDxzcGFuPlNlbSBjb25leMOjbyBjb20gYSBpbnRlcm5ldC4gVm9jw6ogcG9kZXLDoSBlbnZpYXIgbWVuc2FnZW5zIHF1YW5kbyBlbGEgdm9sdGFyLjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJlc3RhZG8/LmF2aXNvXCIgY2xhc3M9XCJ1aW55X19mYWl4YSB1aW55X19mYWl4YS0taW5mb1wiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICA8dWktaWNvbiBpY29uPVwiaW5mb1wiIHNpemU9XCIxOFwiPjwvdWktaWNvbj5cclxuICAgICAgICA8c3Bhbj57eyBlc3RhZG8uYXZpc28gfX08L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19mYWl4YS1mZWNoYXJcIiBhcmlhLWxhYmVsPVwiRGlzcGVuc2FyIGF2aXNvXCIgKGNsaWNrKT1cImNoYXQubGltcGFyRXJybygpXCI+XHJcbiAgICAgICAgICAgIDx1aS1pY29uIGljb249XCJjbG9zZVwiIHNpemU9XCIxNlwiPjwvdWktaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ2ZW5kb0hpc3RvcmljbzsgZWxzZSBjb252ZXJzYUF0dWFsXCIgY2xhc3M9XCJ1aW55X19oaXN0b3JpY29cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9faGlzdG9yaWNvLXRvcG9cIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwidWlueV9faGlzdG9yaWNvLXRpdHVsb1wiPkNvbnZlcnNhcyBhbnRlcmlvcmVzPC9oMz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19saW5rXCIgKGNsaWNrKT1cInZlbmRvSGlzdG9yaWNvID0gZmFsc2VcIj5Wb2x0YXIgw6AgY29udmVyc2E8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImVzdGFkbz8uY2FycmVnYW5kb0NvbnZlcnNhc1wiIGNsYXNzPVwidWlueV9fdmF6aW9cIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWlueV9fc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj4gQ2FycmVnYW5kbyBjb252ZXJzYXPigKZcclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHAgKm5nSWY9XCIhZXN0YWRvPy5jYXJyZWdhbmRvQ29udmVyc2FzICYmIGVzdGFkbz8uY29udmVyc2FzPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInVpbnlfX3ZhemlvXCI+XHJcbiAgICAgICAgICAgIE5lbmh1bWEgY29udmVyc2EgYW50ZXJpb3IgbmVzdGUgY29udGV4dG8uXHJcbiAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICA8dWwgKm5nSWY9XCJlc3RhZG8/LmNvbnZlcnNhcz8ubGVuZ3RoXCIgY2xhc3M9XCJ1aW55X19saXN0YS1jb252ZXJzYXNcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBjIG9mIGVzdGFkby5jb252ZXJzYXM7IHRyYWNrQnk6IHRyYWNrQ29udmVyc2FcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9fY29udmVyc2FcIiBbY2xhc3MuaXMtYXR1YWxdPVwiYy5pZCA9PT0gZXN0YWRvLmNvbnZlcnNhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImMuaWQgPT09IGVzdGFkby5jb252ZXJzYT8uaWQgPyAndHJ1ZScgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2hhdC5vY3VwYWRvXCIgKGNsaWNrKT1cImFicmlyQ29udmVyc2EoYy5pZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpbnlfX2NvbnZlcnNhLXRpdHVsb1wiPnt7IGMudGl0dWxvIHx8ICdDb252ZXJzYSBzZW0gdMOtdHVsbycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjLmF0dWFsaXphZGFFbVwiIGNsYXNzPVwidWlueV9fY29udmVyc2EtZGF0YVwiPnt7IGMuYXR1YWxpemFkYUVtIHwgZGF0ZTonZGQvTU0veXl5eSBISDptbScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjb252ZXJzYUF0dWFsPlxyXG4gICAgICAgIDx1aS1hc3Npc3RhbnQtbWVzc2FnZXMgY2xhc3M9XCJ1aW55X19tZW5zYWdlbnNcIlxyXG4gICAgICAgICAgICBbbWVuc2FnZW5zXT1cIm1lbnNhZ2Vuc1wiXHJcbiAgICAgICAgICAgIFthY29lc109XCJhY29lc1wiXHJcbiAgICAgICAgICAgIFtlbnZpYW5kb109XCJlc3RhZG8/LmVudmlhbmRvXCJcclxuICAgICAgICAgICAgW2NhcnJlZ2FuZG9dPVwiZXN0YWRvPy5jYXJyZWdhbmRvQ29udmVyc2FcIlxyXG4gICAgICAgICAgICBbc3VnZXN0b2VzXT1cInN1Z2VzdG9lc1wiXHJcbiAgICAgICAgICAgIFtjYXBhY2lkYWRlc109XCJjYXBhY2lkYWRlc1wiXHJcbiAgICAgICAgICAgIFt0ZW1BbHRlcmFjb2VzXT1cInRlbUFsdGVyYWNvZXNcIlxyXG4gICAgICAgICAgICBbcG9kZUVudmlhcl09XCJwb2RlRW52aWFyXCJcclxuICAgICAgICAgICAgKHN1Z2VzdGFvKT1cInVzYXJTdWdlc3RhbygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNvbmZpcm1hcik9XCJjaGF0LmNvbmZpcm1hcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNhbmNlbGFyKT1cImNoYXQuY2FuY2VsYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh2ZXJpZmljYXIpPVwiY2hhdC52ZXJpZmljYXJBY2FvKCRldmVudClcIj5cclxuICAgICAgICA8L3VpLWFzc2lzdGFudC1tZXNzYWdlcz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImVzdGFkbz8uZXJyb1wiIGNsYXNzPVwidWlueV9fZXJyb1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDx1aS1pY29uIGljb249XCJlcnJvclwiIHNpemU9XCIxOFwiPjwvdWktaWNvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9fZXJyby10ZXh0b1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBlc3RhZG8uZXJyby5tZW5zYWdlbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiZXN0YWRvLmVycm8uY29ycmVsYWNhb1wiPkPDs2RpZ28gcGFyYSBvIHN1cG9ydGU6IHt7IGVzdGFkby5lcnJvLmNvcnJlbGFjYW8gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJlc3RhZG8udGV4dG9Db21GYWxoYSAmJiBwb2RlRW52aWFyXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9fbGlua1wiIChjbGljayk9XCJyZWVudmlhcigpXCI+XHJcbiAgICAgICAgICAgIFRlbnRhciBkZSBub3ZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19mYWl4YS1mZWNoYXJcIiBhcmlhLWxhYmVsPVwiRGlzcGVuc2FyIGVycm9cIiAoY2xpY2spPVwiY2hhdC5saW1wYXJFcnJvKClcIj5cclxuICAgICAgICAgICAgPHVpLWljb24gaWNvbj1cImNsb3NlXCIgc2l6ZT1cIjE2XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHVpLWFzc2lzdGFudC1jb21wb3NlciBjbGFzcz1cInVpbnlfX2NvbXBvc2VyXCJcclxuICAgICAgICBbZGVzYWJpbGl0YWRvXT1cIiFwb2RlRW52aWFyXCJcclxuICAgICAgICBbZW52aWFuZG9dPVwiZXN0YWRvPy5lbnZpYW5kb1wiXHJcbiAgICAgICAgW21vdGl2b109XCJtb3Rpdm9CbG9xdWVpb1wiXHJcbiAgICAgICAgKGVudmlhcik9XCJlbnZpYXIoJGV2ZW50KVwiPlxyXG4gICAgPC91aS1hc3Npc3RhbnQtY29tcG9zZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInVpbnktc3JcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj57eyBhbnVuY2lvIH19PC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWFzc2lzdGFudC9zcmMvbGliL2NvbXBvbmVudHMvYXNzaXN0YW50LXBhbmVsL3VpLWFzc2lzdGFudC1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1hc3Npc3RhbnQvc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lzdGFudC1wYW5lbC91aS1hc3Npc3RhbnQtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7Ozs7Ozs7O0FBUXJHLE1BQU0sT0FBTyx5QkFBeUI7SUF1QmxDLFlBQ1csSUFBcUIsRUFDckIsU0FBNkIsRUFDNUIsT0FBMkIsRUFDM0IsR0FBc0IsRUFDRyxNQUF5QjtRQUpuRCxTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUM1QixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixR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QVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07OzBCQThCMUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzRDQXpCMUIsU0FBUztzQkFBakIsS0FBSztnQkFFbUMsUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyw0QkFBNEI7Z0JBc0R2QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVpbnlBY2FvLCBVaW55Q29uZmlnLCBVaW55TWVuc2FnZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvdWlueS5tb2RlbHMnO1xuaW1wb3J0IHsgVUlOWV9BVkFUQVJfUEFEUkFPLCBVSU5ZX0NPTkZJRyB9IGZyb20gJy4uLy4uL3VpbnkuY29uZmlnJztcbmltcG9ydCB7IFVpQXNzaXN0YW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpLWFzc2lzdGFudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVpbnlDaGF0RXN0YWRvLCBVaW55Q2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aW55LWNoYXQuc2VydmljZSc7XG5pbXBvcnQgeyBVaW55U2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aW55LXNlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBVaUFzc2lzdGFudENvbXBvc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vYXNzaXN0YW50LWNvbXBvc2VyL3VpLWFzc2lzdGFudC1jb21wb3Nlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VpLWFzc2lzdGFudC1wYW5lbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWFzc2lzdGFudC1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktYXNzaXN0YW50LXBhbmVsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlBc3Npc3RhbnRQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKiBQYWluZWwgZW0gbGFyZ3VyYSB0b3RhbCAoY2VsdWxhci90YWJsZXQpOiBvIGJvdMOjbyBkZSBmZWNoYXIgdmlyYSBcIlZvbHRhclwiLiAqL1xuICAgIEBJbnB1dCgpIGVtcGlsaGFkbyA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChVaUFzc2lzdGFudENvbXBvc2VyQ29tcG9uZW50KSBjb21wb3NlcjogVWlBc3Npc3RhbnRDb21wb3NlckNvbXBvbmVudDtcblxuICAgIHB1YmxpYyBlc3RhZG86IFVpbnlDaGF0RXN0YWRvO1xuICAgIHB1YmxpYyBvbmxpbmUgPSB0cnVlO1xuICAgIHB1YmxpYyBhbnVuY2lvID0gJyc7XG4gICAgcHVibGljIHZlbmRvSGlzdG9yaWNvID0gZmFsc2U7XG4gICAgcHVibGljIG1lbnNhZ2VuczogVWlueU1lbnNhZ2VtW10gPSBbXTtcbiAgICBwdWJsaWMgYWNvZXM6IHsgW2lkOiBzdHJpbmddOiBVaW55QWNhbyB9ID0ge307XG4gICAgcHVibGljIHN1Z2VzdG9lczogc3RyaW5nW10gPSBbXTtcbiAgICBwdWJsaWMgY2FwYWNpZGFkZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHVibGljIHRlbUFsdGVyYWNvZXMgPSBmYWxzZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXZhdGFyVXJsOiBzdHJpbmc7XG4gICAgLyoqIEEgaW1hZ2VtIG7Do28gY2FycmVnb3U6IHVzYSBvIMOtY29uZSBwYWRyw6NvLiAqL1xuICAgIHB1YmxpYyBhdmF0YXJGYWxob3UgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHRpbWVyQW51bmNpbzogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjaGF0OiBVaW55Q2hhdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhc3Npc3RhbnQ6IFVpQXNzaXN0YW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uOiBVaW55U2Vzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChVSU5ZX0NPTkZJRykgY29uZmlnOiBVaW55Q29uZmlnIHwgbnVsbFxuICAgICkge1xuICAgICAgICB0aGlzLmF2YXRhclVybCA9IGNvbmZpZz8uYXZhdGFyVXJsIHx8IFVJTllfQVZBVEFSX1BBRFJBTztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmNoYXQuZXN0YWRvLnN1YnNjcmliZShlc3RhZG8gPT4ge1xuICAgICAgICAgICAgdGhpcy5lc3RhZG8gPSBlc3RhZG87XG4gICAgICAgICAgICB0aGlzLm1lbnNhZ2VucyA9IGVzdGFkby5tZW5zYWdlbnM7XG4gICAgICAgICAgICB0aGlzLmFjb2VzID0gZXN0YWRvLmFjb2VzO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLnNlc3Npb24ub25saW5lJC5zdWJzY3JpYmUob25saW5lID0+IHtcbiAgICAgICAgICAgIHRoaXMub25saW5lID0gb25saW5lO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmNoYXQuYW51bmNpb3Muc3Vic2NyaWJlKHRleHRvID0+IHRoaXMuYW51bmNpYXIodGV4dG8pKSk7XG4gICAgICAgIHRoaXMubW9udGFyQm9hc1ZpbmRhcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gZXNwZXJhIGEgdHJhbnNpw6fDo28gY29tZcOnYXIgcGFyYSBuw6NvIHJvbGFyIGEgcMOhZ2luYSBubyBmb2N1c1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29tcG9zZXI/LmZvY2FyKCksIDYwKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJBbnVuY2lvKTtcbiAgICAgICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICAgIGFvRXNjYXBlKGV2ZW50bzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnRvLmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudmVuZG9IaXN0b3JpY28pIHtcbiAgICAgICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudG8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hc3Npc3RhbnQuZmVjaGFyKCk7XG4gICAgfVxuXG4gICAgZ2V0IHBvZGVFbnZpYXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ubGluZSAmJiAhdGhpcy5lc3RhZG8/LmVudmlhbmRvICYmICF0aGlzLmVzdGFkbz8uY2FycmVnYW5kb0NvbnZlcnNhO1xuICAgIH1cblxuICAgIGdldCBtb3Rpdm9CbG9xdWVpbygpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLm9ubGluZSkgcmV0dXJuICdTZW0gY29uZXjDo28gY29tIGEgaW50ZXJuZXQuJztcbiAgICAgICAgaWYgKHRoaXMuZXN0YWRvPy5jYXJyZWdhbmRvQ29udmVyc2EpIHJldHVybiAnQ2FycmVnYW5kbyBhIGNvbnZlcnNh4oCmJztcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmVjaGFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFzc2lzdGFudC5mZWNoYXIoKTtcbiAgICB9XG5cbiAgICBlbnZpYXIodGV4dG86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucG9kZUVudmlhcikgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jaGF0LmVudmlhcih0ZXh0bykpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zZXI/LmxpbXBhcigpO1xuICAgICAgICAgICAgdGhpcy52ZW5kb0hpc3RvcmljbyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVlbnZpYXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRleHRvID0gdGhpcy5lc3RhZG8/LnRleHRvQ29tRmFsaGE7XG4gICAgICAgIGlmICh0ZXh0byAmJiB0aGlzLnBvZGVFbnZpYXIpIHRoaXMuY2hhdC5lbnZpYXIodGV4dG8pO1xuICAgIH1cblxuICAgIHVzYXJTdWdlc3Rhbyh0ZXh0bzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW52aWFyKHRleHRvKTtcbiAgICB9XG5cbiAgICBub3ZhQ29udmVyc2EoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNoYXQubm92YUNvbnZlcnNhKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYW51bmNpYXIoJ05vdmEgY29udmVyc2EgaW5pY2lhZGEuJyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29tcG9zZXI/LmZvY2FyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWx0ZXJuYXJIaXN0b3JpY28oKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSAhdGhpcy52ZW5kb0hpc3RvcmljbztcbiAgICAgICAgaWYgKHRoaXMudmVuZG9IaXN0b3JpY28pIHRoaXMuY2hhdC5saXN0YXJDb252ZXJzYXMoKTtcbiAgICB9XG5cbiAgICBhYnJpckNvbnZlcnNhKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52ZW5kb0hpc3RvcmljbyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXQuYWJyaXJDb252ZXJzYShpZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb21wb3Nlcj8uZm9jYXIoKSk7XG4gICAgfVxuXG4gICAgdHJhY2tDb252ZXJzYShfOiBudW1iZXIsIGM6IHsgaWQ6IHN0cmluZyB9KSB7XG4gICAgICAgIHJldHVybiBjLmlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW9udGFyQm9hc1ZpbmRhcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3VnZXN0b2VzID0gdGhpcy5hc3Npc3RhbnQuc3VnZXN0b2VzO1xuICAgICAgICB0aGlzLnN1Z2VzdG9lcyA9IHN1Z2VzdG9lcz8udGV4dG9zID8/IFtdO1xuICAgICAgICB0aGlzLmNhcGFjaWRhZGVzID0gW107XG4gICAgICAgIHRoaXMudGVtQWx0ZXJhY29lcyA9ICEhc3VnZXN0b2VzPy5hbHRlcmFjb2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYW51bmNpYXIodGV4dG86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBsaW1wYSBhbnRlcyBwYXJhIGxlaXRvcmVzIGRlIHRlbGEgcmVwZXRpcmVtIGFuw7puY2lvcyBpZ3VhaXNcbiAgICAgICAgdGhpcy5hbnVuY2lvID0gJyc7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lckFudW5jaW8pO1xuICAgICAgICBpZiAoIXRleHRvKSByZXR1cm47XG4gICAgICAgIHRoaXMudGltZXJBbnVuY2lvID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFudW5jaW8gPSB0ZXh0bztcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LCA1MCk7XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJ1aW55XCIgYXJpYS1sYWJlbGxlZGJ5PVwidWlueS10aXR1bG9cIj5cclxuICAgIDxoZWFkZXIgY2xhc3M9XCJ1aW55X190b3BvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpbnlfX21hcmNhXCI+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCIhYXZhdGFyRmFsaG91XCIgY2xhc3M9XCJ1aW55X19hdmF0YXIgdWlueV9fYXZhdGFyLS1pbWFnZW1cIiBbc3JjXT1cImF2YXRhclVybFwiIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjM0XCIgaGVpZ2h0PVwiMzRcIiAoZXJyb3IpPVwiYXZhdGFyRmFsaG91ID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF2YXRhckZhbGhvdVwiIGNsYXNzPVwidWlueV9fYXZhdGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmb2N1c2FibGU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMi41Yy41IDMuOSAyLjYgNi45IDYuNCA4LjIuNS4yLjUuOSAwIDEuMS0zLjggMS4zLTUuOSA0LjMtNi40IDguMi0uMS42LS45LjYtMSAwLS41LTMuOS0yLjYtNi45LTYuNC04LjItLjUtLjItLjUtLjkgMC0xLjEgMy44LTEuMyA1LjktNC4zIDYuNC04LjIuMS0uNi45LS42IDEgMFpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpbnlfX2lkZW50aWRhZGVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBpZD1cInVpbnktdGl0dWxvXCIgY2xhc3M9XCJ1aW55X19ub21lXCI+VWlueTwvaDI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVpbnlfX3N1YlwiPkFzc2lzdGVudGUgZGEgVWlzaG9wPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpbnlfX2NvbWFuZG9zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9faWNvbmVcIiBbY2xhc3MuaXMtYXRpdm9dPVwidmVuZG9IaXN0b3JpY29cIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInZlbmRvSGlzdG9yaWNvID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29udmVyc2FzIGFudGVyaW9yZXNcIiB0aXRsZT1cIkNvbnZlcnNhcyBhbnRlcmlvcmVzXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhbHRlcm5hckhpc3RvcmljbygpXCI+XHJcbiAgICAgICAgICAgICAgICA8dWktaWNvbiBpY29uPVwiaGlzdG9yeVwiIHNpemU9XCIyMFwiPjwvdWktaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9faWNvbmVcIiBhcmlhLWxhYmVsPVwiTm92YSBjb252ZXJzYVwiIHRpdGxlPVwiTm92YSBjb252ZXJzYVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2hhdC5vY3VwYWRvXCIgKGNsaWNrKT1cIm5vdmFDb252ZXJzYSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8dWktaWNvbiBpY29uPVwiZWRpdF9zcXVhcmVcIiBzaXplPVwiMjBcIj48L3VpLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnlfX2ljb25lXCIgKGNsaWNrKT1cImZlY2hhcigpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZW1waWxoYWRvID8gJ1ZvbHRhciBwYXJhIGEgYXBsaWNhw6fDo28nIDogJ0ZlY2hhciBhIFVpbnknXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJlbXBpbGhhZG8gPyAnVm9sdGFyIHBhcmEgYSBhcGxpY2HDp8OjbycgOiAnRmVjaGFyIChFc2MpJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHVpLWljb24gW2ljb25dPVwiZW1waWxoYWRvID8gJ2Fycm93X2JhY2snIDogJ2Nsb3NlJ1wiIHNpemU9XCIyMFwiPjwvdWktaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2hlYWRlcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIW9ubGluZVwiIGNsYXNzPVwidWlueV9fZmFpeGEgdWlueV9fZmFpeGEtLW9mZmxpbmVcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgPHVpLWljb24gaWNvbj1cIndpZmlfb2ZmXCIgc2l6ZT1cIjE4XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDxzcGFuPlNlbSBjb25leMOjbyBjb20gYSBpbnRlcm5ldC4gVm9jw6ogcG9kZXLDoSBlbnZpYXIgbWVuc2FnZW5zIHF1YW5kbyBlbGEgdm9sdGFyLjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJlc3RhZG8/LmF2aXNvXCIgY2xhc3M9XCJ1aW55X19mYWl4YSB1aW55X19mYWl4YS0taW5mb1wiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICA8dWktaWNvbiBpY29uPVwiaW5mb1wiIHNpemU9XCIxOFwiPjwvdWktaWNvbj5cclxuICAgICAgICA8c3Bhbj57eyBlc3RhZG8uYXZpc28gfX08L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19mYWl4YS1mZWNoYXJcIiBhcmlhLWxhYmVsPVwiRGlzcGVuc2FyIGF2aXNvXCIgKGNsaWNrKT1cImNoYXQubGltcGFyRXJybygpXCI+XHJcbiAgICAgICAgICAgIDx1aS1pY29uIGljb249XCJjbG9zZVwiIHNpemU9XCIxNlwiPjwvdWktaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ2ZW5kb0hpc3RvcmljbzsgZWxzZSBjb252ZXJzYUF0dWFsXCIgY2xhc3M9XCJ1aW55X19oaXN0b3JpY29cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9faGlzdG9yaWNvLXRvcG9cIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwidWlueV9faGlzdG9yaWNvLXRpdHVsb1wiPkNvbnZlcnNhcyBhbnRlcmlvcmVzPC9oMz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19saW5rXCIgKGNsaWNrKT1cInZlbmRvSGlzdG9yaWNvID0gZmFsc2VcIj5Wb2x0YXIgw6AgY29udmVyc2E8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImVzdGFkbz8uY2FycmVnYW5kb0NvbnZlcnNhc1wiIGNsYXNzPVwidWlueV9fdmF6aW9cIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWlueV9fc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj4gQ2FycmVnYW5kbyBjb252ZXJzYXPigKZcclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHAgKm5nSWY9XCIhZXN0YWRvPy5jYXJyZWdhbmRvQ29udmVyc2FzICYmIGVzdGFkbz8uY29udmVyc2FzPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInVpbnlfX3ZhemlvXCI+XHJcbiAgICAgICAgICAgIE5lbmh1bWEgY29udmVyc2EgYW50ZXJpb3IgbmVzdGUgY29udGV4dG8uXHJcbiAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICA8dWwgKm5nSWY9XCJlc3RhZG8/LmNvbnZlcnNhcz8ubGVuZ3RoXCIgY2xhc3M9XCJ1aW55X19saXN0YS1jb252ZXJzYXNcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBjIG9mIGVzdGFkby5jb252ZXJzYXM7IHRyYWNrQnk6IHRyYWNrQ29udmVyc2FcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9fY29udmVyc2FcIiBbY2xhc3MuaXMtYXR1YWxdPVwiYy5pZCA9PT0gZXN0YWRvLmNvbnZlcnNhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImMuaWQgPT09IGVzdGFkby5jb252ZXJzYT8uaWQgPyAndHJ1ZScgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2hhdC5vY3VwYWRvXCIgKGNsaWNrKT1cImFicmlyQ29udmVyc2EoYy5pZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpbnlfX2NvbnZlcnNhLXRpdHVsb1wiPnt7IGMudGl0dWxvIHx8ICdDb252ZXJzYSBzZW0gdMOtdHVsbycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjLmF0dWFsaXphZGFFbVwiIGNsYXNzPVwidWlueV9fY29udmVyc2EtZGF0YVwiPnt7IGMuYXR1YWxpemFkYUVtIHwgZGF0ZTonZGQvTU0veXl5eSBISDptbScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNjb252ZXJzYUF0dWFsPlxyXG4gICAgICAgIDx1aS1hc3Npc3RhbnQtbWVzc2FnZXMgY2xhc3M9XCJ1aW55X19tZW5zYWdlbnNcIlxyXG4gICAgICAgICAgICBbbWVuc2FnZW5zXT1cIm1lbnNhZ2Vuc1wiXHJcbiAgICAgICAgICAgIFthY29lc109XCJhY29lc1wiXHJcbiAgICAgICAgICAgIFtlbnZpYW5kb109XCJlc3RhZG8/LmVudmlhbmRvXCJcclxuICAgICAgICAgICAgW2NhcnJlZ2FuZG9dPVwiZXN0YWRvPy5jYXJyZWdhbmRvQ29udmVyc2FcIlxyXG4gICAgICAgICAgICBbc3VnZXN0b2VzXT1cInN1Z2VzdG9lc1wiXHJcbiAgICAgICAgICAgIFtjYXBhY2lkYWRlc109XCJjYXBhY2lkYWRlc1wiXHJcbiAgICAgICAgICAgIFt0ZW1BbHRlcmFjb2VzXT1cInRlbUFsdGVyYWNvZXNcIlxyXG4gICAgICAgICAgICBbcG9kZUVudmlhcl09XCJwb2RlRW52aWFyXCJcclxuICAgICAgICAgICAgKHN1Z2VzdGFvKT1cInVzYXJTdWdlc3RhbygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNvbmZpcm1hcik9XCJjaGF0LmNvbmZpcm1hcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNhbmNlbGFyKT1cImNoYXQuY2FuY2VsYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh2ZXJpZmljYXIpPVwiY2hhdC52ZXJpZmljYXJBY2FvKCRldmVudClcIj5cclxuICAgICAgICA8L3VpLWFzc2lzdGFudC1tZXNzYWdlcz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImVzdGFkbz8uZXJyb1wiIGNsYXNzPVwidWlueV9fZXJyb1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDx1aS1pY29uIGljb249XCJlcnJvclwiIHNpemU9XCIxOFwiPjwvdWktaWNvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9fZXJyby10ZXh0b1wiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBlc3RhZG8uZXJyby5tZW5zYWdlbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiZXN0YWRvLmVycm8uY29ycmVsYWNhb1wiPkPDs2RpZ28gcGFyYSBvIHN1cG9ydGU6IHt7IGVzdGFkby5lcnJvLmNvcnJlbGFjYW8gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJlc3RhZG8udGV4dG9Db21GYWxoYSAmJiBwb2RlRW52aWFyXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9fbGlua1wiIChjbGljayk9XCJyZWVudmlhcigpXCI+XHJcbiAgICAgICAgICAgIFRlbnRhciBkZSBub3ZvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19mYWl4YS1mZWNoYXJcIiBhcmlhLWxhYmVsPVwiRGlzcGVuc2FyIGVycm9cIiAoY2xpY2spPVwiY2hhdC5saW1wYXJFcnJvKClcIj5cclxuICAgICAgICAgICAgPHVpLWljb24gaWNvbj1cImNsb3NlXCIgc2l6ZT1cIjE2XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHVpLWFzc2lzdGFudC1jb21wb3NlciBjbGFzcz1cInVpbnlfX2NvbXBvc2VyXCJcclxuICAgICAgICBbZGVzYWJpbGl0YWRvXT1cIiFwb2RlRW52aWFyXCJcclxuICAgICAgICBbZW52aWFuZG9dPVwiZXN0YWRvPy5lbnZpYW5kb1wiXHJcbiAgICAgICAgW21vdGl2b109XCJtb3Rpdm9CbG9xdWVpb1wiXHJcbiAgICAgICAgKGVudmlhcik9XCJlbnZpYXIoJGV2ZW50KVwiPlxyXG4gICAgPC91aS1hc3Npc3RhbnQtY29tcG9zZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInVpbnktc3JcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj57eyBhbnVuY2lvIH19PC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlueS5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1hc3Npc3RhbnQvc3JjL2xpYi9tb2RlbHMvdWlueS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVpbnlSZXNwb3N0YUFwaSwgVWlueVNpc3RlbWFPcmlnZW0gfSBmcm9tICcuL3VpbnktYXBpLm1vZGVscyc7XG5cbi8qKiBDb25maWd1cmHDp8OjbyBkbyBtw7NkdWxvIChVaUFzc2lzdGFudE1vZHVsZS5mb3JSb290KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUNvbmZpZyB7XG4gICAgLyoqIFNpc3RlbWEgcXVlIGhvc3BlZGEgbyBjb21wb25lbnRlLiBWYWkgbm8gY29udGV4dG8gZGUgdG9kYSBjb252ZXJzYSBlIG1lbnNhZ2VtLiAqL1xuICAgIHNpc3RlbWFPcmlnZW06IFVpbnlTaXN0ZW1hT3JpZ2VtO1xuICAgIC8qKlxuICAgICAqIFVSTC1iYXNlIGRhIEFQSSwgaW5jbHVpbmRvIC9hcGkvdjEgKGV4LjogaHR0cDovL2xvY2FsaG9zdDo4MTAwL2FwaS92MSkuXG4gICAgICogU2Ugb21pdGlkYSwgdXNhIEFQUF9FTlZJUk9OTUVOVC5kb21haW4udWlueS5cbiAgICAgKi9cbiAgICBhcGlVcmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogSW1hZ2VtIGRvIGF2YXRhciBkYSBVaW55LCBzZXJ2aWRhIHBlbGEgYXBsaWNhw6fDo28gY29uc3VtaWRvcmEuXG4gICAgICogUGFkcsOjbzogYXNzZXRzL2ltYWdlcy91aW55L2F2YXRhci5zdmcuIFNlIG7Do28gY2FycmVnYXIsIG8gcGFpbmVsIG1vc3RyYSBvIMOtY29uZSBwYWRyw6NvLlxuICAgICAqL1xuICAgIGF2YXRhclVybD86IHN0cmluZztcbiAgICAvKiogTGFyZ3VyYSBkbyBwYWluZWwgbm8gZGVza3RvcCwgZW0gcHguIFBhZHLDo28gMzgwIChsaW1pdGFkYSBlbnRyZSAzNDAgZSA0MDApLiAqL1xuICAgIGxhcmd1cmFQYWluZWw/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlueS5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1hc3Npc3RhbnQvc3JjL2xpYi9tb2RlbHMvdWlueS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVpbnlSZXNwb3N0YUFwaSwgVWlueVNpc3RlbWFPcmlnZW0gfSBmcm9tICcuL3VpbnktYXBpLm1vZGVscyc7XG5cbi8qKiBDb25maWd1cmHDp8OjbyBkbyBtw7NkdWxvIChVaUFzc2lzdGFudE1vZHVsZS5mb3JSb290KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUNvbmZpZyB7XG4gICAgLyoqIFNpc3RlbWEgcXVlIGhvc3BlZGEgbyBjb21wb25lbnRlLiBWYWkgbm8gY29udGV4dG8gZGUgdG9kYSBjb252ZXJzYSBlIG1lbnNhZ2VtLiAqL1xuICAgIHNpc3RlbWFPcmlnZW06IFVpbnlTaXN0ZW1hT3JpZ2VtO1xuICAgIC8qKlxuICAgICAqIFVSTC1iYXNlIGRhIEFQSSwgaW5jbHVpbmRvIC9hcGkvdjEgKGV4LjogaHR0cDovL2xvY2FsaG9zdDo4MTAwL2FwaS92MSkuXG4gICAgICogU2Ugb21pdGlkYSwgdXNhIEFQUF9FTlZJUk9OTUVOVC5kb21haW4udWlueS5cbiAgICAgKi9cbiAgICBhcGlVcmw/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogSW1hZ2VtIGRvIGF2YXRhciBkYSBVaW55LCBzZXJ2aWRhIHBlbGEgYXBsaWNhw6fDo28gY29uc3VtaWRvcmEuXG4gICAgICogUGFkcsOjbzogYXNzZXRzL2ltYWdlcy91aW55L2F2YXRhci5zdmcuIFNlIG7Do28gY2FycmVnYXIsIG8gcGFpbmVsIG1vc3RyYSBvIMOtY29uZSBwYWRyw6NvLlxuICAgICAqL1xuICAgIGF2YXRhclVybD86IHN0cmluZztcbiAgICAvKiogTGFyZ3VyYSBkbyBwYWluZWwgbm8gZGVza3RvcCwgZW0gcHguIFBhZHLDo28gMzgwIChsaW1pdGFkYSBlbnRyZSAzNDAgZSA0MDApLiAqL1xuICAgIGxhcmd1cmFQYWluZWw/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQWJhaXhvIGRlc3RhIGxhcmd1cmEgZGUgdGVsYSBvIHBhaW5lbCBvY3VwYSBhIHRlbGEgdG9kYSBlIGEgYXBsaWNhw6fDo28gZmljYVxuICAgICAqIHJlY29saGlkYSBhdMOpIG8gdXN1w6FyaW8gdm9sdGFyLiBQYWRyw6NvIDEyMDA6IGV2aXRhIGVzcHJlbWVyIGEgYXBsaWNhw6fDo28gYW8gbGFkbyBkbyBwYWluZWwuXG4gICAgICovXG4gICAgbGFyZ3VyYU1pbmltYUxhZG9BTGFkbz86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTdWdlc3TDtWVzIGRvIHByaW1laXJvIGFjZXNzby4gQ2FkYSBzaXN0ZW1hIHBhc3NhIGFzIHN1YXMsIGRlIGFjb3JkbyBjb20gbyBxdWUgYSBVaW55XG4gICAgICogY29uc2VndWUgZmF6ZXIgbmVsZSAoZmVycmFtZW50YXMgZG8gdWlzaG9wLWlhKS4gU2VtIGVsYXMsIG8gcGFpbmVsIGFicmUgc2VtIHN1Z2VzdMO1ZXMuXG4gICAgICovXG4gICAgc3VnZXN0b2VzPzogVWlueVN1Z2VzdG9lcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVaW55U3VnZXN0b2VzIHtcbiAgICAvKiogUGVkaWRvcyBwcm9udG9zIHF1ZSBvIHVzdcOhcmlvIGVudmlhIGNvbSB1bSBjbGlxdWUuICovXG4gICAgdGV4dG9zOiBzdHJpbmdbXTtcbiAgICAvKiogQXZpc2EgbmFzIGJvYXMtdmluZGFzIHF1ZSBhbHRlcmHDp8O1ZXMgc8OzIGFjb250ZWNlbSBhcMOzcyBjb25maXJtYcOnw6NvLiAqL1xuICAgIGFsdGVyYWNvZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRleHRvIGluZm9ybWFkbyBwZWxvIHByb2pldG8gY29uc3VtaWRvciAoY2FtcG9zIGRlIENvbnRleHRvVGVsYSBubyBiYWNrZW5kKS5cbiAqIMOJIHPDsyB1bWEgaW5kaWNhw6fDo28gZGEgdGVsYSBhdHVhbDogYSBhdXRvcml6YcOnw6NvIMOpIHNlbXByZSBkZWNpZGlkYSBwZWxvIGJhY2tlbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUNvbnRleHRvIHtcbiAgICAvKiogSWRlbnRpZmljYWRvciBjdXJ0byBkYSB0ZWxhIGF0dWFsIChleC46IFwibG9qYS1sZWlhdXRlL2VkaXRhclwiKS4gQXTDqSA2MCBjYXJhY3RlcmVzIFthLXowLTlfLS8uXS4gKi9cbiAgICB0ZWxhPzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogTG9qYSBzZWxlY2lvbmFkYS4gQSBjb252ZXJzYSBmaWNhIHJlc3RyaXRhIMOgIGxvamE7IHRyb2NhciBhIGxvamEgZW5jZXJyYSBhIGNvbnZlcnNhIGF0dWFsLiAqL1xuICAgIGlkTG9qYT86IG51bWJlciB8IG51bGw7XG4gICAgaWRMb2phTGVpYXV0ZT86IG51bWJlciB8IG51bGw7XG4gICAgaWRUZW1hPzogbnVtYmVyIHwgbnVsbDtcbiAgICBpZFByb2R1dG8/OiBudW1iZXIgfCBudWxsO1xuICAgIGlkUGVkaWRvPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBFdmVudG9zIGVtaXRpZG9zIHBhcmEgbyBwcm9qZXRvIGNvbnN1bWlkb3IgcmVhZ2lyIChhdHVhbGl6YXIgdGVsYXMsIHJlY2FycmVnYXIgcHLDqXZpYSkuXG4gKiBBIG5hdmVnYcOnw6NvIGUgYSBhdHVhbGl6YcOnw6NvIHPDo28gc2VtcHJlIGRlY2lkaWRhcyBwZWxvIGNvbnN1bWlkb3IuXG4gKi9cbmV4cG9ydCB0eXBlIFVpbnlFdmVudG8gPVxuICAgIC8qKiBBIEFQSSBjb25maXJtb3UgYSBleGVjdcOnw6NvIGRlIHVtYSBhw6fDo28gKHNpdHVhw6fDo28gXCJleGVjdXRhZGFcIikuICovXG4gICAgfCB7IHRpcG86ICdhY2FvX2NvbmNsdWlkYSc7IGlkQWNhbzogc3RyaW5nOyBmZXJyYW1lbnRhOiBzdHJpbmcgfVxuICAgIC8qKiBJbnN0cnXDp8OjbyBcImF0dWFsaXphcl9wcmV2aWV3X3RlbWFcIjogbyBsZWlhdXRlIG11ZG91IGUgYSBwcsOpdmlhIGRldmUgc2VyIHJlY2FycmVnYWRhLiAqL1xuICAgIHwgeyB0aXBvOiAndGVtYV9hdHVhbGl6YWRvJzsgaWRMb2phTGVpYXV0ZTogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIFVpbnlUaXBvRXZlbnRvID0gVWlueUV2ZW50b1sndGlwbyddO1xuXG4vKiAtLS0tLS0tLS0tIG1vZGVsb3MgZGUgdGVsYSAobm9ybWFsaXphZG9zIGEgcGFydGlyIGRhIEFQSSkgLS0tLS0tLS0tLSAqL1xuXG5leHBvcnQgdHlwZSBVaW55UGFwZWwgPSAndXN1YXJpbycgfCAnYXNzaXN0ZW50ZSc7XG5cbmV4cG9ydCB0eXBlIFVpbnlFc3RhZG9BY2FvID1cbiAgICB8ICdwZW5kZW50ZSdcbiAgICB8ICdleGVjdXRhbmRvJ1xuICAgIHwgJ2NvbmNsdWlkYSdcbiAgICB8ICdjYW5jZWxhZGEnXG4gICAgfCAnZXhwaXJhZGEnXG4gICAgfCAnaW52YWxpZGFkYSdcbiAgICB8ICdmYWxoYSdcbiAgICAvKiogTyByZXN1bHRhZG8gcHJlY2lzYSBzZXIgY29uZmVyaWRvIG5vIHNpc3RlbWEgKDUwNCBkbyBiYWNrZW5kIG91IHNlbSByZXNwb3N0YSBhcMOzcyBjb25maXJtYXIpLiAqL1xuICAgIHwgJ2luZGV0ZXJtaW5hZGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlBY2FvIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZlcnJhbWVudGE6IHN0cmluZztcbiAgICByZXN1bW86IHN0cmluZztcbiAgICAvKiogUGFyZXMgcsOzdHVsby92YWxvciBleHRyYcOtZG9zIGRlIFwiZGV0YWxoZXNcIiwgc8OzIGNvbSB2YWxvcmVzIHByaW1pdGl2b3MuICovXG4gICAgZGV0YWxoZXM6IHsgcm90dWxvOiBzdHJpbmc7IHZhbG9yOiBzdHJpbmcgfVtdO1xuICAgIGVzdGFkbzogVWlueUVzdGFkb0FjYW87XG4gICAgZXhwaXJhRW06IERhdGUgfCBudWxsO1xuICAgIC8qKiBVbWEgcmVxdWlzacOnw6NvIGRlIGNvbmZpcm1hci9jYW5jZWxhci92ZXJpZmljYXIgZXN0w6EgZW0gYW5kYW1lbnRvLiAqL1xuICAgIGVudmlhbmRvPzogYm9vbGVhbjtcbiAgICAvKiogTWVuc2FnZW0gZG8gc2Vydmlkb3Igb3UgZGUgZXJybywgbW9zdHJhZGEgbm8gY2FyZC4gKi9cbiAgICBhdmlzbz86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVWlueU1lbnNhZ2VtIHtcbiAgICAvKiogVVVJRCBkbyBiYWNrZW5kLCBvdSBcImxvY2FsLU5cIiBwYXJhIGEgbWVuc2FnZW0gb3RpbWlzdGEgZG8gdXN1w6FyaW8uICovXG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXBlbDogVWlueVBhcGVsO1xuICAgIC8qKiBlc3RhZG8gZGEgbWVuc2FnZW0gbm8gYmFja2VuZCAocmVzcG9zdGEsIGVzY2xhcmVjaW1lbnRvLCBhZ3VhcmRhbmRvX2NvbmZpcm1hY2FvLi4uKS4gKi9cbiAgICBlc3RhZG86IHN0cmluZyB8IG51bGw7XG4gICAgdGV4dG86IHN0cmluZztcbiAgICBpZEFjYW86IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIE9ww6fDtWVzIGRvIGJsb2NvIFwib3Bjb2VzXCIgKGVzY2xhcmVjaW1lbnRvKTogdmlyYW0gYm90w7VlcyBxdWUgZW52aWFtIG8gdGV4dG8uICovXG4gICAgb3Bjb2VzOiBzdHJpbmdbXTtcbiAgICBjcmlhZGFFbTogRGF0ZSB8IG51bGw7XG4gICAgLyoqIE1lbnNhZ2VtIGxvY2FsIHF1ZSBmYWxob3Ugbm8gZW52aW8uICovXG4gICAgZXJybz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUNvbnZlcnNhUmVzdW1vIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpdHVsbzogc3RyaW5nIHwgbnVsbDtcbiAgICBzaXN0ZW1hT3JpZ2VtOiBVaW55U2lzdGVtYU9yaWdlbTtcbiAgICBpZExvamE6IG51bWJlciB8IG51bGw7XG4gICAgYXR1YWxpemFkYUVtOiBEYXRlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVaW55RXJybyB7XG4gICAgdGlwbzogJ3Nlc3NhbycgfCAncmVkZScgfCAndGltZW91dCcgfCAnY29uZmxpdG8nIHwgJ25hb19lbmNvbnRyYWRvJyB8ICdpbnZhbGlkbycgfCAnbGltaXRlJyB8ICdzZXJ2aWRvcicgfCAnY29uZmlndXJhY2FvJztcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBjb2RpZ286IHN0cmluZyB8IG51bGw7XG4gICAgbWVuc2FnZW06IHN0cmluZztcbiAgICBjb3JyZWxhY2FvOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiBDb3JwbyBkbyBlcnJvLCBxdWFuZG8gYSBBUEkgZGV2b2x2ZSBkYWRvcyBqdW50byAoZXguOiBjb25maXJtYcOnw6NvIGNvbSBhY2FvX3BlbmRlbnRlKS4gKi9cbiAgICBjb3Jwbz86IFVpbnlSZXNwb3N0YUFwaSB8IG51bGw7XG59XG4iXX0=
|