uitec-ng-header 1.1.0 → 1.2.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.
Files changed (48) hide show
  1. package/README.md +11 -182
  2. package/esm2020/lib/ui-header.component.mjs +20 -26
  3. package/esm2020/lib/ui-header.module.mjs +4 -10
  4. package/esm2020/public-api.mjs +1 -17
  5. package/fesm2015/uitec-ng-header.mjs +24 -1808
  6. package/fesm2015/uitec-ng-header.mjs.map +1 -1
  7. package/fesm2020/uitec-ng-header.mjs +24 -1771
  8. package/fesm2020/uitec-ng-header.mjs.map +1 -1
  9. package/lib/ui-header.component.d.ts +8 -11
  10. package/lib/ui-header.module.d.ts +1 -2
  11. package/package.json +2 -3
  12. package/public-api.d.ts +0 -15
  13. package/esm2020/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.mjs +0 -102
  14. package/esm2020/lib/assistant/components/assistant-button/ui-assistant-button.component.mjs +0 -18
  15. package/esm2020/lib/assistant/components/assistant-composer/ui-assistant-composer.component.mjs +0 -79
  16. package/esm2020/lib/assistant/components/assistant-layout/ui-assistant-layout.component.mjs +0 -140
  17. package/esm2020/lib/assistant/components/assistant-messages/ui-assistant-messages.component.mjs +0 -144
  18. package/esm2020/lib/assistant/components/assistant-panel/ui-assistant-panel.component.mjs +0 -156
  19. package/esm2020/lib/assistant/components/assistant-text/ui-assistant-text.component.mjs +0 -26
  20. package/esm2020/lib/assistant/models/uiny-api.models.mjs +0 -12
  21. package/esm2020/lib/assistant/models/uiny.models.mjs +0 -2
  22. package/esm2020/lib/assistant/services/ui-assistant.service.mjs +0 -137
  23. package/esm2020/lib/assistant/services/uiny-api.service.mjs +0 -149
  24. package/esm2020/lib/assistant/services/uiny-chat.service.mjs +0 -368
  25. package/esm2020/lib/assistant/services/uiny-session.service.mjs +0 -74
  26. package/esm2020/lib/assistant/ui-assistant.module.mjs +0 -59
  27. package/esm2020/lib/assistant/uiny.config.mjs +0 -53
  28. package/esm2020/lib/assistant/utils/uiny-api.adapter.mjs +0 -154
  29. package/esm2020/lib/assistant/utils/uiny-contexto.mjs +0 -43
  30. package/esm2020/lib/assistant/utils/uiny-markdown.mjs +0 -122
  31. package/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.d.ts +0 -33
  32. package/lib/assistant/components/assistant-button/ui-assistant-button.component.d.ts +0 -9
  33. package/lib/assistant/components/assistant-composer/ui-assistant-composer.component.d.ts +0 -24
  34. package/lib/assistant/components/assistant-layout/ui-assistant-layout.component.d.ts +0 -51
  35. package/lib/assistant/components/assistant-messages/ui-assistant-messages.component.d.ts +0 -38
  36. package/lib/assistant/components/assistant-panel/ui-assistant-panel.component.d.ts +0 -53
  37. package/lib/assistant/components/assistant-text/ui-assistant-text.component.d.ts +0 -14
  38. package/lib/assistant/models/uiny-api.models.d.ts +0 -109
  39. package/lib/assistant/models/uiny.models.d.ts +0 -104
  40. package/lib/assistant/services/ui-assistant.service.d.ts +0 -55
  41. package/lib/assistant/services/uiny-api.service.d.ts +0 -38
  42. package/lib/assistant/services/uiny-chat.service.d.ts +0 -82
  43. package/lib/assistant/services/uiny-session.service.d.ts +0 -38
  44. package/lib/assistant/ui-assistant.module.d.ts +0 -19
  45. package/lib/assistant/uiny.config.d.ts +0 -31
  46. package/lib/assistant/utils/uiny-api.adapter.d.ts +0 -22
  47. package/lib/assistant/utils/uiny-contexto.d.ts +0 -7
  48. package/lib/assistant/utils/uiny-markdown.d.ts +0 -37
@@ -1,144 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "uitec-ng-icon";
5
- import * as i3 from "../assistant-text/ui-assistant-text.component";
6
- import * as i4 from "../assistant-action-card/ui-assistant-action-card.component";
7
- /** Distância do fim (px) até onde ainda consideramos que o usuário está "no fim". */
8
- const PERTO_DO_FIM = 96;
9
- export class UiAssistantMessagesComponent {
10
- constructor(cdr, zone) {
11
- this.cdr = cdr;
12
- this.mensagens = [];
13
- this.acoes = {};
14
- this.enviando = false;
15
- this.carregando = false;
16
- this.sugestoes = [];
17
- this.capacidades = [];
18
- this.temAlteracoes = false;
19
- this.podeEnviar = true;
20
- this.sugestao = new EventEmitter();
21
- this.confirmar = new EventEmitter();
22
- this.cancelar = new EventEmitter();
23
- this.verificar = new EventEmitter();
24
- this.novas = false;
25
- this.pertoDoFim = true;
26
- this.rolarPendente = true;
27
- // o listener roda fora da zona: só reentra quando o indicador muda
28
- zone.runOutsideAngular(() => setTimeout(() => {
29
- const el = this.area?.nativeElement;
30
- if (!el)
31
- return;
32
- const aoRolar = () => {
33
- const perto = this.calcularPertoDoFim();
34
- if (perto === this.pertoDoFim)
35
- return;
36
- this.pertoDoFim = perto;
37
- if (perto && this.novas)
38
- zone.run(() => {
39
- this.novas = false;
40
- this.cdr.markForCheck();
41
- });
42
- };
43
- el.addEventListener('scroll', aoRolar, { passive: true });
44
- this.removerScroll = () => el.removeEventListener('scroll', aoRolar);
45
- }));
46
- }
47
- ngOnChanges(changes) {
48
- const mudou = changes['mensagens'] || changes['enviando'] || changes['acoes'];
49
- if (!mudou)
50
- return;
51
- const mensagensMudaram = !!changes['mensagens'];
52
- const anterior = changes['mensagens']?.previousValue || [];
53
- const atual = this.mensagens || [];
54
- const conversaTrocada = mensagensMudaram && (!anterior.length || !atual.length || anterior[0]?.id !== atual[0]?.id);
55
- const ultima = atual[atual.length - 1];
56
- // quem acabou de enviar quer ver a própria mensagem
57
- const ultimaDoUsuario = mensagensMudaram && ultima?.papel === 'usuario' && ultima.id.startsWith('local-');
58
- if (conversaTrocada || ultimaDoUsuario || this.pertoDoFim) {
59
- this.rolarPendente = true;
60
- }
61
- else if (mensagensMudaram && atual.length > anterior.length) {
62
- // o usuário está lendo mensagens antigas: preserva a posição
63
- this.novas = true;
64
- }
65
- }
66
- ngAfterViewChecked() {
67
- if (!this.rolarPendente)
68
- return;
69
- this.rolarPendente = false;
70
- this.irParaOFim(false);
71
- }
72
- ngOnDestroy() {
73
- this.removerScroll?.();
74
- }
75
- irParaOFim(suave = true) {
76
- const el = this.area?.nativeElement;
77
- if (!el)
78
- return;
79
- const reduzir = typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
80
- if (suave && !reduzir && el.scrollTo) {
81
- el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });
82
- }
83
- else {
84
- el.scrollTop = el.scrollHeight;
85
- }
86
- this.pertoDoFim = true;
87
- if (this.novas) {
88
- this.novas = false;
89
- this.cdr.markForCheck();
90
- }
91
- }
92
- acaoDa(mensagem) {
93
- return mensagem.idAcao ? this.acoes?.[mensagem.idAcao] ?? null : null;
94
- }
95
- /** Ações devolvidas pela API sem mensagem que as referencie: aparecem no fim. */
96
- get acoesSemMensagem() {
97
- const referenciadas = new Set((this.mensagens || []).map(m => m.idAcao).filter(Boolean));
98
- return Object.values(this.acoes || {}).filter(a => !referenciadas.has(a.id));
99
- }
100
- trackMensagem(_, m) {
101
- return m.id;
102
- }
103
- trackAcao(_, a) {
104
- return a.id;
105
- }
106
- calcularPertoDoFim() {
107
- const el = this.area.nativeElement;
108
- return el.scrollHeight - el.scrollTop - el.clientHeight <= PERTO_DO_FIM;
109
- }
110
- }
111
- UiAssistantMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantMessagesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
112
- UiAssistantMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantMessagesComponent, selector: "ui-assistant-messages", inputs: { mensagens: "mensagens", acoes: "acoes", enviando: "enviando", carregando: "carregando", sugestoes: "sugestoes", capacidades: "capacidades", temAlteracoes: "temAlteracoes", podeEnviar: "podeEnviar" }, outputs: { sugestao: "sugestao", confirmar: "confirmar", cancelar: "cancelar", verificar: "verificar" }, viewQueries: [{ propertyName: "area", first: true, predicate: ["area"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #area class=\"uiny-msgs\" role=\"log\" aria-live=\"off\" aria-label=\"Mensagens da conversa com a Uiny\" tabindex=\"0\">\r\n\r\n <div *ngIf=\"carregando\" class=\"uiny-msgs__carregando\" role=\"status\">\r\n <span class=\"uiny-spinner\" aria-hidden=\"true\"></span> Carregando a conversa\u2026\r\n </div>\r\n\r\n <div *ngIf=\"!carregando && !mensagens?.length\" class=\"uiny-boas-vindas\">\r\n <p class=\"uiny-boas-vindas__titulo\">Ol\u00E1! Eu sou a Uiny.</p>\r\n <p class=\"uiny-boas-vindas__texto\">Sou a assistente virtual da Uishop. Conte o que voc\u00EA precisa e eu ajudo por aqui.</p>\r\n <p *ngIf=\"temAlteracoes\" class=\"uiny-boas-vindas__nota\">\r\n <ui-icon icon=\"verified_user\" size=\"16\"></ui-icon>\r\n <span>Antes de alterar qualquer informa\u00E7\u00E3o, eu mostro o que vai mudar e s\u00F3 sigo com a sua confirma\u00E7\u00E3o.</span>\r\n </p>\r\n\r\n <div *ngIf=\"sugestoes?.length\" class=\"uiny-sugestoes\" aria-label=\"Sugest\u00F5es\">\r\n <button *ngFor=\"let s of sugestoes\" type=\"button\" class=\"uiny-sugestao\" [disabled]=\"!podeEnviar\" (click)=\"sugestao.emit(s)\">\r\n {{ s }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"capacidades?.length\" class=\"uiny-capacidades\">\r\n <p class=\"uiny-capacidades__titulo\">Posso ajudar com:</p>\r\n <ul>\r\n <li *ngFor=\"let c of capacidades\">{{ c }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div *ngFor=\"let m of mensagens; trackBy: trackMensagem\" class=\"uiny-msg\"\r\n [class.uiny-msg--usuario]=\"m.papel === 'usuario'\"\r\n [class.uiny-msg--assistente]=\"m.papel !== 'usuario'\"\r\n [class.uiny-msg--falha]=\"m.erro\">\r\n <span class=\"uiny-sr\">{{ m.papel === 'usuario' ? 'Voc\u00EA:' : 'Uiny:' }}</span>\r\n <div class=\"uiny-msg__balao\">\r\n <p *ngIf=\"m.papel === 'usuario'\" class=\"uiny-msg__simples\">{{ m.texto }}</p>\r\n <ui-assistant-text *ngIf=\"m.papel !== 'usuario'\" [texto]=\"m.texto\"></ui-assistant-text>\r\n </div>\r\n\r\n <ui-assistant-action-card *ngIf=\"acaoDa(m) as acao\" [acao]=\"acao\"\r\n (confirmar)=\"confirmar.emit($event)\" (cancelar)=\"cancelar.emit($event)\" (verificar)=\"verificar.emit($event)\">\r\n </ui-assistant-action-card>\r\n\r\n <!-- esclarecimento: op\u00E7\u00F5es s\u00F3 na \u00FAltima mensagem, enviadas como texto -->\r\n <div *ngIf=\"m.opcoes?.length && m === mensagens[mensagens.length - 1]\" class=\"uiny-sugestoes uiny-msg__opcoes\" aria-label=\"Op\u00E7\u00F5es de resposta\">\r\n <button *ngFor=\"let o of m.opcoes\" type=\"button\" class=\"uiny-sugestao\" [disabled]=\"!podeEnviar || enviando\" (click)=\"sugestao.emit(o)\">\r\n {{ o }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"uiny-msg__meta\">\r\n <span *ngIf=\"m.erro\" class=\"uiny-msg__nao-enviada\">\r\n <ui-icon icon=\"error\" size=\"14\"></ui-icon> N\u00E3o enviada\r\n </span>\r\n <time *ngIf=\"m.criadaEm && !m.erro\" [attr.datetime]=\"m.criadaEm.toISOString()\">{{ m.criadaEm | date:'HH:mm' }}</time>\r\n </div>\r\n </div>\r\n\r\n <ui-assistant-action-card *ngFor=\"let acao of acoesSemMensagem; trackBy: trackAcao\" class=\"uiny-msgs__acao-solta\" [acao]=\"acao\"\r\n (confirmar)=\"confirmar.emit($event)\" (cancelar)=\"cancelar.emit($event)\" (verificar)=\"verificar.emit($event)\">\r\n </ui-assistant-action-card>\r\n\r\n <div *ngIf=\"enviando\" class=\"uiny-digitando\">\r\n <span class=\"uiny-digitando__pontos\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\r\n <span class=\"uiny-digitando__texto\">A Uiny est\u00E1 pensando\u2026</span>\r\n </div>\r\n</div>\r\n\r\n<button *ngIf=\"novas\" type=\"button\" class=\"uiny-novas\" (click)=\"irParaOFim()\">\r\n <ui-icon icon=\"arrow_downward\" size=\"16\"></ui-icon> Novas mensagens\r\n</button>\r\n", styles: [":host{position:relative;display:flex;flex-direction:column;min-height:0}.uiny-msgs{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;padding:16px 14px 8px;scrollbar-width:thin}.uiny-msgs:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:-2px}.uiny-msgs__carregando{display:flex;align-items:center;gap:8px;color:var(--uiny-texto-suave, #6b6b80);font-size:13px}.uiny-spinner{width:14px;height:14px;border:2px solid var(--uiny-borda, #ececf3);border-top-color:var(--uiny-primaria, #7366ff);border-radius:50%;animation:uiny-girar .8s linear infinite}.uiny-boas-vindas{padding:8px 2px 4px}.uiny-boas-vindas__titulo{margin:0 0 4px;font-size:18px;font-weight:700;color:var(--uiny-texto, #2b2b2b)}.uiny-boas-vindas__texto{margin:0 0 12px;color:var(--uiny-texto-suave, #6b6b80);line-height:1.5}.uiny-boas-vindas__nota{display:flex;gap:6px;margin:0 0 14px;padding:8px 10px;border-radius:10px;background:var(--uiny-fundo-suave, #f7f7fb);color:var(--uiny-texto-suave, #6b6b80);font-size:12.5px;line-height:1.45}.uiny-boas-vindas__nota ui-icon{flex:0 0 auto;color:var(--uiny-primaria, #7366ff)}.uiny-sugestoes{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.uiny-sugestao{max-width:100%;padding:8px 12px;border:1px solid var(--uiny-borda, #ececf3);border-radius:12px;background:var(--uiny-fundo, #fff);color:var(--uiny-texto, #2b2b2b);font-size:13px;text-align:left;line-height:1.35;cursor:pointer;transition:border-color .15s ease,background-color .15s ease}.uiny-sugestao:hover:not(:disabled){border-color:var(--uiny-primaria, #7366ff);background:var(--uiny-aviso-fundo, #f1effe)}.uiny-sugestao:disabled{opacity:.5;cursor:not-allowed}.uiny-sugestao:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-capacidades{font-size:13px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-capacidades ul{margin:0;padding-left:18px}.uiny-capacidades li+li{margin-top:2px}.uiny-capacidades__titulo{margin:0 0 4px;font-weight:600;color:var(--uiny-texto, #2b2b2b)}.uiny-msg{display:flex;flex-direction:column;margin-top:14px}.uiny-msg:first-of-type{margin-top:0}.uiny-msg--usuario{align-items:flex-end}.uiny-msg--usuario .uiny-msg__balao{max-width:85%;padding:9px 13px;border-radius:16px 16px 4px;background:var(--uiny-primaria, #7366ff);color:#fff}.uiny-msg--assistente{align-items:stretch}.uiny-msg--assistente .uiny-msg__balao{max-width:100%;color:var(--uiny-texto, #2b2b2b)}.uiny-msg--falha .uiny-msg__balao{opacity:.65}.uiny-msg__simples{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.45}.uiny-msg__meta{margin-top:3px;font-size:11px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-msg__meta time{opacity:.8}.uiny-msg__nao-enviada{display:inline-flex;align-items:center;gap:3px;color:var(--uiny-erro, #d9364f)}.uiny-msg__opcoes{margin-top:8px}.uiny-msgs__acao-solta{display:block;margin-top:14px}.uiny-digitando{display:flex;align-items:center;gap:8px;margin-top:14px;color:var(--uiny-texto-suave, #6b6b80);font-size:13px}.uiny-digitando__pontos{display:inline-flex;gap:3px}.uiny-digitando__pontos i{width:6px;height:6px;border-radius:50%;background:var(--uiny-primaria, #7366ff);animation:uiny-pulsar 1.2s ease-in-out infinite}.uiny-digitando__pontos i:nth-child(2){animation-delay:.15s}.uiny-digitando__pontos i:nth-child(3){animation-delay:.3s}.uiny-novas{position:absolute;left:50%;bottom:10px;transform:translate(-50%);display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border:0;border-radius:999px;background:var(--uiny-primaria, #7366ff);color:#fff;font-size:12px;font-weight:600;box-shadow:0 6px 16px #1f1b4d33;cursor:pointer}.uiny-novas:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes uiny-girar{to{transform:rotate(360deg)}}@keyframes uiny-pulsar{0%,80%,to{opacity:.25;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.uiny-digitando__pontos i{animation:none;opacity:.6}.uiny-spinner{animation-duration:2.4s}.uiny-sugestao{transition:none}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiIconComponent, selector: "ui-icon", inputs: ["icon", "size", "class"] }, { kind: "component", type: i3.UiAssistantTextComponent, selector: "ui-assistant-text", inputs: ["texto"] }, { kind: "component", type: i4.UiAssistantActionCardComponent, selector: "ui-assistant-action-card", inputs: ["acao"], outputs: ["confirmar", "cancelar", "verificar"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantMessagesComponent, decorators: [{
114
- type: Component,
115
- args: [{ selector: 'ui-assistant-messages', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #area class=\"uiny-msgs\" role=\"log\" aria-live=\"off\" aria-label=\"Mensagens da conversa com a Uiny\" tabindex=\"0\">\r\n\r\n <div *ngIf=\"carregando\" class=\"uiny-msgs__carregando\" role=\"status\">\r\n <span class=\"uiny-spinner\" aria-hidden=\"true\"></span> Carregando a conversa\u2026\r\n </div>\r\n\r\n <div *ngIf=\"!carregando && !mensagens?.length\" class=\"uiny-boas-vindas\">\r\n <p class=\"uiny-boas-vindas__titulo\">Ol\u00E1! Eu sou a Uiny.</p>\r\n <p class=\"uiny-boas-vindas__texto\">Sou a assistente virtual da Uishop. Conte o que voc\u00EA precisa e eu ajudo por aqui.</p>\r\n <p *ngIf=\"temAlteracoes\" class=\"uiny-boas-vindas__nota\">\r\n <ui-icon icon=\"verified_user\" size=\"16\"></ui-icon>\r\n <span>Antes de alterar qualquer informa\u00E7\u00E3o, eu mostro o que vai mudar e s\u00F3 sigo com a sua confirma\u00E7\u00E3o.</span>\r\n </p>\r\n\r\n <div *ngIf=\"sugestoes?.length\" class=\"uiny-sugestoes\" aria-label=\"Sugest\u00F5es\">\r\n <button *ngFor=\"let s of sugestoes\" type=\"button\" class=\"uiny-sugestao\" [disabled]=\"!podeEnviar\" (click)=\"sugestao.emit(s)\">\r\n {{ s }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"capacidades?.length\" class=\"uiny-capacidades\">\r\n <p class=\"uiny-capacidades__titulo\">Posso ajudar com:</p>\r\n <ul>\r\n <li *ngFor=\"let c of capacidades\">{{ c }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div *ngFor=\"let m of mensagens; trackBy: trackMensagem\" class=\"uiny-msg\"\r\n [class.uiny-msg--usuario]=\"m.papel === 'usuario'\"\r\n [class.uiny-msg--assistente]=\"m.papel !== 'usuario'\"\r\n [class.uiny-msg--falha]=\"m.erro\">\r\n <span class=\"uiny-sr\">{{ m.papel === 'usuario' ? 'Voc\u00EA:' : 'Uiny:' }}</span>\r\n <div class=\"uiny-msg__balao\">\r\n <p *ngIf=\"m.papel === 'usuario'\" class=\"uiny-msg__simples\">{{ m.texto }}</p>\r\n <ui-assistant-text *ngIf=\"m.papel !== 'usuario'\" [texto]=\"m.texto\"></ui-assistant-text>\r\n </div>\r\n\r\n <ui-assistant-action-card *ngIf=\"acaoDa(m) as acao\" [acao]=\"acao\"\r\n (confirmar)=\"confirmar.emit($event)\" (cancelar)=\"cancelar.emit($event)\" (verificar)=\"verificar.emit($event)\">\r\n </ui-assistant-action-card>\r\n\r\n <!-- esclarecimento: op\u00E7\u00F5es s\u00F3 na \u00FAltima mensagem, enviadas como texto -->\r\n <div *ngIf=\"m.opcoes?.length && m === mensagens[mensagens.length - 1]\" class=\"uiny-sugestoes uiny-msg__opcoes\" aria-label=\"Op\u00E7\u00F5es de resposta\">\r\n <button *ngFor=\"let o of m.opcoes\" type=\"button\" class=\"uiny-sugestao\" [disabled]=\"!podeEnviar || enviando\" (click)=\"sugestao.emit(o)\">\r\n {{ o }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"uiny-msg__meta\">\r\n <span *ngIf=\"m.erro\" class=\"uiny-msg__nao-enviada\">\r\n <ui-icon icon=\"error\" size=\"14\"></ui-icon> N\u00E3o enviada\r\n </span>\r\n <time *ngIf=\"m.criadaEm && !m.erro\" [attr.datetime]=\"m.criadaEm.toISOString()\">{{ m.criadaEm | date:'HH:mm' }}</time>\r\n </div>\r\n </div>\r\n\r\n <ui-assistant-action-card *ngFor=\"let acao of acoesSemMensagem; trackBy: trackAcao\" class=\"uiny-msgs__acao-solta\" [acao]=\"acao\"\r\n (confirmar)=\"confirmar.emit($event)\" (cancelar)=\"cancelar.emit($event)\" (verificar)=\"verificar.emit($event)\">\r\n </ui-assistant-action-card>\r\n\r\n <div *ngIf=\"enviando\" class=\"uiny-digitando\">\r\n <span class=\"uiny-digitando__pontos\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\r\n <span class=\"uiny-digitando__texto\">A Uiny est\u00E1 pensando\u2026</span>\r\n </div>\r\n</div>\r\n\r\n<button *ngIf=\"novas\" type=\"button\" class=\"uiny-novas\" (click)=\"irParaOFim()\">\r\n <ui-icon icon=\"arrow_downward\" size=\"16\"></ui-icon> Novas mensagens\r\n</button>\r\n", styles: [":host{position:relative;display:flex;flex-direction:column;min-height:0}.uiny-msgs{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;padding:16px 14px 8px;scrollbar-width:thin}.uiny-msgs:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:-2px}.uiny-msgs__carregando{display:flex;align-items:center;gap:8px;color:var(--uiny-texto-suave, #6b6b80);font-size:13px}.uiny-spinner{width:14px;height:14px;border:2px solid var(--uiny-borda, #ececf3);border-top-color:var(--uiny-primaria, #7366ff);border-radius:50%;animation:uiny-girar .8s linear infinite}.uiny-boas-vindas{padding:8px 2px 4px}.uiny-boas-vindas__titulo{margin:0 0 4px;font-size:18px;font-weight:700;color:var(--uiny-texto, #2b2b2b)}.uiny-boas-vindas__texto{margin:0 0 12px;color:var(--uiny-texto-suave, #6b6b80);line-height:1.5}.uiny-boas-vindas__nota{display:flex;gap:6px;margin:0 0 14px;padding:8px 10px;border-radius:10px;background:var(--uiny-fundo-suave, #f7f7fb);color:var(--uiny-texto-suave, #6b6b80);font-size:12.5px;line-height:1.45}.uiny-boas-vindas__nota ui-icon{flex:0 0 auto;color:var(--uiny-primaria, #7366ff)}.uiny-sugestoes{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.uiny-sugestao{max-width:100%;padding:8px 12px;border:1px solid var(--uiny-borda, #ececf3);border-radius:12px;background:var(--uiny-fundo, #fff);color:var(--uiny-texto, #2b2b2b);font-size:13px;text-align:left;line-height:1.35;cursor:pointer;transition:border-color .15s ease,background-color .15s ease}.uiny-sugestao:hover:not(:disabled){border-color:var(--uiny-primaria, #7366ff);background:var(--uiny-aviso-fundo, #f1effe)}.uiny-sugestao:disabled{opacity:.5;cursor:not-allowed}.uiny-sugestao:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-capacidades{font-size:13px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-capacidades ul{margin:0;padding-left:18px}.uiny-capacidades li+li{margin-top:2px}.uiny-capacidades__titulo{margin:0 0 4px;font-weight:600;color:var(--uiny-texto, #2b2b2b)}.uiny-msg{display:flex;flex-direction:column;margin-top:14px}.uiny-msg:first-of-type{margin-top:0}.uiny-msg--usuario{align-items:flex-end}.uiny-msg--usuario .uiny-msg__balao{max-width:85%;padding:9px 13px;border-radius:16px 16px 4px;background:var(--uiny-primaria, #7366ff);color:#fff}.uiny-msg--assistente{align-items:stretch}.uiny-msg--assistente .uiny-msg__balao{max-width:100%;color:var(--uiny-texto, #2b2b2b)}.uiny-msg--falha .uiny-msg__balao{opacity:.65}.uiny-msg__simples{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.45}.uiny-msg__meta{margin-top:3px;font-size:11px;color:var(--uiny-texto-suave, #6b6b80)}.uiny-msg__meta time{opacity:.8}.uiny-msg__nao-enviada{display:inline-flex;align-items:center;gap:3px;color:var(--uiny-erro, #d9364f)}.uiny-msg__opcoes{margin-top:8px}.uiny-msgs__acao-solta{display:block;margin-top:14px}.uiny-digitando{display:flex;align-items:center;gap:8px;margin-top:14px;color:var(--uiny-texto-suave, #6b6b80);font-size:13px}.uiny-digitando__pontos{display:inline-flex;gap:3px}.uiny-digitando__pontos i{width:6px;height:6px;border-radius:50%;background:var(--uiny-primaria, #7366ff);animation:uiny-pulsar 1.2s ease-in-out infinite}.uiny-digitando__pontos i:nth-child(2){animation-delay:.15s}.uiny-digitando__pontos i:nth-child(3){animation-delay:.3s}.uiny-novas{position:absolute;left:50%;bottom:10px;transform:translate(-50%);display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border:0;border-radius:999px;background:var(--uiny-primaria, #7366ff);color:#fff;font-size:12px;font-weight:600;box-shadow:0 6px 16px #1f1b4d33;cursor:pointer}.uiny-novas:focus-visible{outline:2px solid var(--uiny-primaria, #7366ff);outline-offset:2px}.uiny-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes uiny-girar{to{transform:rotate(360deg)}}@keyframes uiny-pulsar{0%,80%,to{opacity:.25;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.uiny-digitando__pontos i{animation:none;opacity:.6}.uiny-spinner{animation-duration:2.4s}.uiny-sugestao{transition:none}}\n"] }]
116
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { mensagens: [{
117
- type: Input
118
- }], acoes: [{
119
- type: Input
120
- }], enviando: [{
121
- type: Input
122
- }], carregando: [{
123
- type: Input
124
- }], sugestoes: [{
125
- type: Input
126
- }], capacidades: [{
127
- type: Input
128
- }], temAlteracoes: [{
129
- type: Input
130
- }], podeEnviar: [{
131
- type: Input
132
- }], sugestao: [{
133
- type: Output
134
- }], confirmar: [{
135
- type: Output
136
- }], cancelar: [{
137
- type: Output
138
- }], verificar: [{
139
- type: Output
140
- }], area: [{
141
- type: ViewChild,
142
- args: ['area', { static: true }]
143
- }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWhlYWRlci9zcmMvbGliL2Fzc2lzdGFudC9jb21wb25lbnRzL2Fzc2lzdGFudC1tZXNzYWdlcy91aS1hc3Npc3RhbnQtbWVzc2FnZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LW1lc3NhZ2VzL3VpLWFzc2lzdGFudC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7Ozs7OztBQUd2QixxRkFBcUY7QUFDckYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBUXhCLE1BQU0sT0FBTyw0QkFBNEI7SUF1QnJDLFlBQW9CLEdBQXNCLEVBQUUsSUFBWTtRQUFwQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXJCakMsY0FBUyxHQUFtQixFQUFFLENBQUM7UUFDL0IsVUFBSyxHQUErQixFQUFFLENBQUM7UUFDdkMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUVqQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUkxQyxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2IsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUl6QixtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7WUFDcEMsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsT0FBTztZQUNoQixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVTtvQkFBRSxPQUFPO2dCQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM1QixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQztZQUNGLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVuQixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQW1CLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO1FBQzNFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwSCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QyxvREFBb0Q7UUFDcEQsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLElBQUksTUFBTSxFQUFFLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUcsSUFBSSxlQUFlLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDN0I7YUFBTSxJQUFJLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUMzRCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztRQUNwQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNqSCxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ2xDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0gsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBc0I7UUFDekIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFFLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsSUFBSSxnQkFBZ0I7UUFDaEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN6RixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFTLEVBQUUsQ0FBZTtRQUNwQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBVztRQUM1QixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNuQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQztJQUM1RSxDQUFDOzswSEE3R1EsNEJBQTRCOzhHQUE1Qiw0QkFBNEIseWZDMUJ6Qyw0Z0lBc0VBOzRGRDVDYSw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0ksdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzZIQUl0QyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUU4QixJQUFJO3NCQUF4QyxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVpbnlBY2FvLCBVaW55TWVuc2FnZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvdWlueS5tb2RlbHMnO1xyXG5cclxuLyoqIERpc3TDom5jaWEgZG8gZmltIChweCkgYXTDqSBvbmRlIGFpbmRhIGNvbnNpZGVyYW1vcyBxdWUgbyB1c3XDoXJpbyBlc3TDoSBcIm5vIGZpbVwiLiAqL1xyXG5jb25zdCBQRVJUT19ET19GSU0gPSA5NjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd1aS1hc3Npc3RhbnQtbWVzc2FnZXMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWFzc2lzdGFudC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1hc3Npc3RhbnQtbWVzc2FnZXMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFzc2lzdGFudE1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBJbnB1dCgpIG1lbnNhZ2VuczogVWlueU1lbnNhZ2VtW10gPSBbXTtcclxuICAgIEBJbnB1dCgpIGFjb2VzOiB7IFtpZDogc3RyaW5nXTogVWlueUFjYW8gfSA9IHt9O1xyXG4gICAgQElucHV0KCkgZW52aWFuZG8gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHN1Z2VzdG9lczogc3RyaW5nW10gPSBbXTtcclxuICAgIEBJbnB1dCgpIGNhcGFjaWRhZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgQElucHV0KCkgdGVtQWx0ZXJhY29lcyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcG9kZUVudmlhciA9IHRydWU7XHJcblxyXG4gICAgQE91dHB1dCgpIHN1Z2VzdGFvID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgY29uZmlybWFyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsYXIgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAgIEBPdXRwdXQoKSB2ZXJpZmljYXIgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdhcmVhJywgeyBzdGF0aWM6IHRydWUgfSkgYXJlYTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgcHVibGljIG5vdmFzID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHBlcnRvRG9GaW0gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSByb2xhclBlbmRlbnRlID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgcmVtb3ZlclNjcm9sbDogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHpvbmU6IE5nWm9uZSkge1xyXG4gICAgICAgIC8vIG8gbGlzdGVuZXIgcm9kYSBmb3JhIGRhIHpvbmE6IHPDsyByZWVudHJhIHF1YW5kbyBvIGluZGljYWRvciBtdWRhXHJcbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLmFyZWE/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghZWwpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgYW9Sb2xhciA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcnRvID0gdGhpcy5jYWxjdWxhclBlcnRvRG9GaW0oKTtcclxuICAgICAgICAgICAgICAgIGlmIChwZXJ0byA9PT0gdGhpcy5wZXJ0b0RvRmltKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnRvRG9GaW0gPSBwZXJ0bztcclxuICAgICAgICAgICAgICAgIGlmIChwZXJ0byAmJiB0aGlzLm5vdmFzKSB6b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3ZhcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGFvUm9sYXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVyU2Nyb2xsID0gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgYW9Sb2xhcik7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtdWRvdSA9IGNoYW5nZXNbJ21lbnNhZ2VucyddIHx8IGNoYW5nZXNbJ2VudmlhbmRvJ10gfHwgY2hhbmdlc1snYWNvZXMnXTtcclxuICAgICAgICBpZiAoIW11ZG91KSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IG1lbnNhZ2Vuc011ZGFyYW0gPSAhIWNoYW5nZXNbJ21lbnNhZ2VucyddO1xyXG4gICAgICAgIGNvbnN0IGFudGVyaW9yOiBVaW55TWVuc2FnZW1bXSA9IGNoYW5nZXNbJ21lbnNhZ2VucyddPy5wcmV2aW91c1ZhbHVlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGF0dWFsID0gdGhpcy5tZW5zYWdlbnMgfHwgW107XHJcbiAgICAgICAgY29uc3QgY29udmVyc2FUcm9jYWRhID0gbWVuc2FnZW5zTXVkYXJhbSAmJiAoIWFudGVyaW9yLmxlbmd0aCB8fCAhYXR1YWwubGVuZ3RoIHx8IGFudGVyaW9yWzBdPy5pZCAhPT0gYXR1YWxbMF0/LmlkKTtcclxuICAgICAgICBjb25zdCB1bHRpbWEgPSBhdHVhbFthdHVhbC5sZW5ndGggLSAxXTtcclxuICAgICAgICAvLyBxdWVtIGFjYWJvdSBkZSBlbnZpYXIgcXVlciB2ZXIgYSBwcsOzcHJpYSBtZW5zYWdlbVxyXG4gICAgICAgIGNvbnN0IHVsdGltYURvVXN1YXJpbyA9IG1lbnNhZ2Vuc011ZGFyYW0gJiYgdWx0aW1hPy5wYXBlbCA9PT0gJ3VzdWFyaW8nICYmIHVsdGltYS5pZC5zdGFydHNXaXRoKCdsb2NhbC0nKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnZlcnNhVHJvY2FkYSB8fCB1bHRpbWFEb1VzdWFyaW8gfHwgdGhpcy5wZXJ0b0RvRmltKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9sYXJQZW5kZW50ZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZW5zYWdlbnNNdWRhcmFtICYmIGF0dWFsLmxlbmd0aCA+IGFudGVyaW9yLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBvIHVzdcOhcmlvIGVzdMOhIGxlbmRvIG1lbnNhZ2VucyBhbnRpZ2FzOiBwcmVzZXJ2YSBhIHBvc2nDp8Ojb1xyXG4gICAgICAgICAgICB0aGlzLm5vdmFzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5yb2xhclBlbmRlbnRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb2xhclBlbmRlbnRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pclBhcmFPRmltKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZXJTY3JvbGw/LigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlyUGFyYU9GaW0oc3VhdmUgPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmFyZWE/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKCFlbCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHJlZHV6aXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubWF0Y2hNZWRpYT8uKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7XHJcbiAgICAgICAgaWYgKHN1YXZlICYmICFyZWR1emlyICYmIGVsLnNjcm9sbFRvKSB7XHJcbiAgICAgICAgICAgIGVsLnNjcm9sbFRvKHsgdG9wOiBlbC5zY3JvbGxIZWlnaHQsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVydG9Eb0ZpbSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubm92YXMpIHtcclxuICAgICAgICAgICAgdGhpcy5ub3ZhcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWNhb0RhKG1lbnNhZ2VtOiBVaW55TWVuc2FnZW0pOiBVaW55QWNhbyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiBtZW5zYWdlbS5pZEFjYW8gPyB0aGlzLmFjb2VzPy5bbWVuc2FnZW0uaWRBY2FvXSA/PyBudWxsIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQcOnw7VlcyBkZXZvbHZpZGFzIHBlbGEgQVBJIHNlbSBtZW5zYWdlbSBxdWUgYXMgcmVmZXJlbmNpZTogYXBhcmVjZW0gbm8gZmltLiAqL1xyXG4gICAgZ2V0IGFjb2VzU2VtTWVuc2FnZW0oKTogVWlueUFjYW9bXSB7XHJcbiAgICAgICAgY29uc3QgcmVmZXJlbmNpYWRhcyA9IG5ldyBTZXQoKHRoaXMubWVuc2FnZW5zIHx8IFtdKS5tYXAobSA9PiBtLmlkQWNhbykuZmlsdGVyKEJvb2xlYW4pKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmFjb2VzIHx8IHt9KS5maWx0ZXIoYSA9PiAhcmVmZXJlbmNpYWRhcy5oYXMoYS5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrTWVuc2FnZW0oXzogbnVtYmVyLCBtOiBVaW55TWVuc2FnZW0pIHtcclxuICAgICAgICByZXR1cm4gbS5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0FjYW8oXzogbnVtYmVyLCBhOiBVaW55QWNhbykge1xyXG4gICAgICAgIHJldHVybiBhLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsY3VsYXJQZXJ0b0RvRmltKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5hcmVhLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGVsLnNjcm9sbEhlaWdodCAtIGVsLnNjcm9sbFRvcCAtIGVsLmNsaWVudEhlaWdodCA8PSBQRVJUT19ET19GSU07XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAjYXJlYSBjbGFzcz1cInVpbnktbXNnc1wiIHJvbGU9XCJsb2dcIiBhcmlhLWxpdmU9XCJvZmZcIiBhcmlhLWxhYmVsPVwiTWVuc2FnZW5zIGRhIGNvbnZlcnNhIGNvbSBhIFVpbnlcIiB0YWJpbmRleD1cIjBcIj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiY2FycmVnYW5kb1wiIGNsYXNzPVwidWlueS1tc2dzX19jYXJyZWdhbmRvXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidWlueS1zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPiBDYXJyZWdhbmRvIGEgY29udmVyc2HigKZcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhY2FycmVnYW5kbyAmJiAhbWVuc2FnZW5zPy5sZW5ndGhcIiBjbGFzcz1cInVpbnktYm9hcy12aW5kYXNcIj5cclxuICAgICAgICA8cCBjbGFzcz1cInVpbnktYm9hcy12aW5kYXNfX3RpdHVsb1wiPk9sw6EhIEV1IHNvdSBhIFVpbnkuPC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidWlueS1ib2FzLXZpbmRhc19fdGV4dG9cIj5Tb3UgYSBhc3Npc3RlbnRlIHZpcnR1YWwgZGEgVWlzaG9wLiBDb250ZSBvIHF1ZSB2b2PDqiBwcmVjaXNhIGUgZXUgYWp1ZG8gcG9yIGFxdWkuPC9wPlxyXG4gICAgICAgIDxwICpuZ0lmPVwidGVtQWx0ZXJhY29lc1wiIGNsYXNzPVwidWlueS1ib2FzLXZpbmRhc19fbm90YVwiPlxyXG4gICAgICAgICAgICA8dWktaWNvbiBpY29uPVwidmVyaWZpZWRfdXNlclwiIHNpemU9XCIxNlwiPjwvdWktaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4+QW50ZXMgZGUgYWx0ZXJhciBxdWFscXVlciBpbmZvcm1hw6fDo28sIGV1IG1vc3RybyBvIHF1ZSB2YWkgbXVkYXIgZSBzw7Mgc2lnbyBjb20gYSBzdWEgY29uZmlybWHDp8Ojby48L3NwYW4+XHJcbiAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic3VnZXN0b2VzPy5sZW5ndGhcIiBjbGFzcz1cInVpbnktc3VnZXN0b2VzXCIgYXJpYS1sYWJlbD1cIlN1Z2VzdMO1ZXNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgcyBvZiBzdWdlc3RvZXNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55LXN1Z2VzdGFvXCIgW2Rpc2FibGVkXT1cIiFwb2RlRW52aWFyXCIgKGNsaWNrKT1cInN1Z2VzdGFvLmVtaXQocylcIj5cclxuICAgICAgICAgICAgICAgIHt7IHMgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjYXBhY2lkYWRlcz8ubGVuZ3RoXCIgY2xhc3M9XCJ1aW55LWNhcGFjaWRhZGVzXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidWlueS1jYXBhY2lkYWRlc19fdGl0dWxvXCI+UG9zc28gYWp1ZGFyIGNvbTo8L3A+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYyBvZiBjYXBhY2lkYWRlc1wiPnt7IGMgfX08L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbSBvZiBtZW5zYWdlbnM7IHRyYWNrQnk6IHRyYWNrTWVuc2FnZW1cIiBjbGFzcz1cInVpbnktbXNnXCJcclxuICAgICAgICBbY2xhc3MudWlueS1tc2ctLXVzdWFyaW9dPVwibS5wYXBlbCA9PT0gJ3VzdWFyaW8nXCJcclxuICAgICAgICBbY2xhc3MudWlueS1tc2ctLWFzc2lzdGVudGVdPVwibS5wYXBlbCAhPT0gJ3VzdWFyaW8nXCJcclxuICAgICAgICBbY2xhc3MudWlueS1tc2ctLWZhbGhhXT1cIm0uZXJyb1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidWlueS1zclwiPnt7IG0ucGFwZWwgPT09ICd1c3VhcmlvJyA/ICdWb2PDqjonIDogJ1Vpbnk6JyB9fTwvc3Bhbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueS1tc2dfX2JhbGFvXCI+XHJcbiAgICAgICAgICAgIDxwICpuZ0lmPVwibS5wYXBlbCA9PT0gJ3VzdWFyaW8nXCIgY2xhc3M9XCJ1aW55LW1zZ19fc2ltcGxlc1wiPnt7IG0udGV4dG8gfX08L3A+XHJcbiAgICAgICAgICAgIDx1aS1hc3Npc3RhbnQtdGV4dCAqbmdJZj1cIm0ucGFwZWwgIT09ICd1c3VhcmlvJ1wiIFt0ZXh0b109XCJtLnRleHRvXCI+PC91aS1hc3Npc3RhbnQtdGV4dD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHVpLWFzc2lzdGFudC1hY3Rpb24tY2FyZCAqbmdJZj1cImFjYW9EYShtKSBhcyBhY2FvXCIgW2FjYW9dPVwiYWNhb1wiXHJcbiAgICAgICAgICAgIChjb25maXJtYXIpPVwiY29uZmlybWFyLmVtaXQoJGV2ZW50KVwiIChjYW5jZWxhcik9XCJjYW5jZWxhci5lbWl0KCRldmVudClcIiAodmVyaWZpY2FyKT1cInZlcmlmaWNhci5lbWl0KCRldmVudClcIj5cclxuICAgICAgICA8L3VpLWFzc2lzdGFudC1hY3Rpb24tY2FyZD5cclxuXHJcbiAgICAgICAgPCEtLSBlc2NsYXJlY2ltZW50bzogb3DDp8O1ZXMgc8OzIG5hIMO6bHRpbWEgbWVuc2FnZW0sIGVudmlhZGFzIGNvbW8gdGV4dG8gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm0ub3Bjb2VzPy5sZW5ndGggJiYgbSA9PT0gbWVuc2FnZW5zW21lbnNhZ2Vucy5sZW5ndGggLSAxXVwiIGNsYXNzPVwidWlueS1zdWdlc3RvZXMgdWlueS1tc2dfX29wY29lc1wiIGFyaWEtbGFiZWw9XCJPcMOnw7VlcyBkZSByZXNwb3N0YVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBvIG9mIG0ub3Bjb2VzXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueS1zdWdlc3Rhb1wiIFtkaXNhYmxlZF09XCIhcG9kZUVudmlhciB8fCBlbnZpYW5kb1wiIChjbGljayk9XCJzdWdlc3Rhby5lbWl0KG8pXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBvIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueS1tc2dfX21ldGFcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtLmVycm9cIiBjbGFzcz1cInVpbnktbXNnX19uYW8tZW52aWFkYVwiPlxyXG4gICAgICAgICAgICAgICAgPHVpLWljb24gaWNvbj1cImVycm9yXCIgc2l6ZT1cIjE0XCI+PC91aS1pY29uPiBOw6NvIGVudmlhZGFcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8dGltZSAqbmdJZj1cIm0uY3JpYWRhRW0gJiYgIW0uZXJyb1wiIFthdHRyLmRhdGV0aW1lXT1cIm0uY3JpYWRhRW0udG9JU09TdHJpbmcoKVwiPnt7IG0uY3JpYWRhRW0gfCBkYXRlOidISDptbScgfX08L3RpbWU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dWktYXNzaXN0YW50LWFjdGlvbi1jYXJkICpuZ0Zvcj1cImxldCBhY2FvIG9mIGFjb2VzU2VtTWVuc2FnZW07IHRyYWNrQnk6IHRyYWNrQWNhb1wiIGNsYXNzPVwidWlueS1tc2dzX19hY2FvLXNvbHRhXCIgW2FjYW9dPVwiYWNhb1wiXHJcbiAgICAgICAgKGNvbmZpcm1hcik9XCJjb25maXJtYXIuZW1pdCgkZXZlbnQpXCIgKGNhbmNlbGFyKT1cImNhbmNlbGFyLmVtaXQoJGV2ZW50KVwiICh2ZXJpZmljYXIpPVwidmVyaWZpY2FyLmVtaXQoJGV2ZW50KVwiPlxyXG4gICAgPC91aS1hc3Npc3RhbnQtYWN0aW9uLWNhcmQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImVudmlhbmRvXCIgY2xhc3M9XCJ1aW55LWRpZ2l0YW5kb1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidWlueS1kaWdpdGFuZG9fX3BvbnRvc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpPjwvaT48aT48L2k+PGk+PC9pPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInVpbnktZGlnaXRhbmRvX190ZXh0b1wiPkEgVWlueSBlc3TDoSBwZW5zYW5kb+KApjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxidXR0b24gKm5nSWY9XCJub3Zhc1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnktbm92YXNcIiAoY2xpY2spPVwiaXJQYXJhT0ZpbSgpXCI+XHJcbiAgICA8dWktaWNvbiBpY29uPVwiYXJyb3dfZG93bndhcmRcIiBzaXplPVwiMTZcIj48L3VpLWljb24+IE5vdmFzIG1lbnNhZ2Vuc1xyXG48L2J1dHRvbj5cclxuIl19
@@ -1,156 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, Optional, ViewChild } from '@angular/core';
2
- import { Subscription } from 'rxjs';
3
- import { UINY_AVATAR_PADRAO, UINY_CONFIG, UINY_SUGESTOES } from '../../uiny.config';
4
- import { UiAssistantService } from '../../services/ui-assistant.service';
5
- import { UinyChatService } from '../../services/uiny-chat.service';
6
- import { UinySessionService } from '../../services/uiny-session.service';
7
- import { UiAssistantComposerComponent } from '../assistant-composer/ui-assistant-composer.component';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../../services/uiny-chat.service";
10
- import * as i2 from "../../services/ui-assistant.service";
11
- import * as i3 from "../../services/uiny-session.service";
12
- import * as i4 from "@angular/common";
13
- import * as i5 from "uitec-ng-icon";
14
- import * as i6 from "../assistant-messages/ui-assistant-messages.component";
15
- import * as i7 from "../assistant-composer/ui-assistant-composer.component";
16
- export class UiAssistantPanelComponent {
17
- constructor(chat, assistant, session, cdr, config) {
18
- this.chat = chat;
19
- this.assistant = assistant;
20
- this.session = session;
21
- this.cdr = cdr;
22
- /** Painel em largura total (celular/tablet): o botão de fechar vira "Voltar". */
23
- this.empilhado = false;
24
- this.online = true;
25
- this.anuncio = '';
26
- this.vendoHistorico = false;
27
- this.mensagens = [];
28
- this.acoes = {};
29
- this.sugestoes = [];
30
- this.capacidades = [];
31
- this.temAlteracoes = false;
32
- /** A imagem não carregou: usa o ícone padrão. */
33
- this.avatarFalhou = false;
34
- this.subs = new Subscription();
35
- this.avatarUrl = config?.avatarUrl || UINY_AVATAR_PADRAO;
36
- }
37
- ngOnInit() {
38
- this.subs.add(this.chat.estado.subscribe(estado => {
39
- this.estado = estado;
40
- this.mensagens = estado.mensagens;
41
- this.acoes = estado.acoes;
42
- this.cdr.markForCheck();
43
- }));
44
- this.subs.add(this.session.online$.subscribe(online => {
45
- this.online = online;
46
- this.cdr.markForCheck();
47
- }));
48
- this.subs.add(this.chat.anuncios.subscribe(texto => this.anunciar(texto)));
49
- this.montarBoasVindas();
50
- }
51
- ngAfterViewInit() {
52
- // espera a transição começar para não rolar a página no focus
53
- setTimeout(() => this.composer?.focar(), 60);
54
- }
55
- ngOnDestroy() {
56
- clearTimeout(this.timerAnuncio);
57
- this.subs.unsubscribe();
58
- }
59
- aoEscape(evento) {
60
- if (evento.defaultPrevented)
61
- return;
62
- if (this.vendoHistorico) {
63
- this.vendoHistorico = false;
64
- return;
65
- }
66
- evento.preventDefault();
67
- this.assistant.fechar();
68
- }
69
- get podeEnviar() {
70
- return this.online && !this.estado?.enviando && !this.estado?.carregandoConversa;
71
- }
72
- get motivoBloqueio() {
73
- if (!this.online)
74
- return 'Sem conexão com a internet.';
75
- if (this.estado?.carregandoConversa)
76
- return 'Carregando a conversa…';
77
- return null;
78
- }
79
- fechar() {
80
- this.assistant.fechar();
81
- }
82
- enviar(texto) {
83
- if (!this.podeEnviar)
84
- return;
85
- if (this.chat.enviar(texto)) {
86
- this.composer?.limpar();
87
- this.vendoHistorico = false;
88
- }
89
- }
90
- reenviar() {
91
- const texto = this.estado?.textoComFalha;
92
- if (texto && this.podeEnviar)
93
- this.chat.enviar(texto);
94
- }
95
- usarSugestao(texto) {
96
- this.enviar(texto);
97
- }
98
- novaConversa() {
99
- if (this.chat.novaConversa()) {
100
- this.vendoHistorico = false;
101
- this.anunciar('Nova conversa iniciada.');
102
- setTimeout(() => this.composer?.focar());
103
- }
104
- }
105
- alternarHistorico() {
106
- this.vendoHistorico = !this.vendoHistorico;
107
- if (this.vendoHistorico)
108
- this.chat.listarConversas();
109
- }
110
- abrirConversa(id) {
111
- this.vendoHistorico = false;
112
- this.chat.abrirConversa(id);
113
- setTimeout(() => this.composer?.focar());
114
- }
115
- trackConversa(_, c) {
116
- return c.id;
117
- }
118
- montarBoasVindas() {
119
- const sugestoes = UINY_SUGESTOES[this.assistant.sistemaOrigem] ?? { textos: [], alteracoes: false };
120
- this.sugestoes = sugestoes.textos;
121
- this.capacidades = [];
122
- this.temAlteracoes = sugestoes.alteracoes;
123
- }
124
- anunciar(texto) {
125
- // limpa antes para leitores de tela repetirem anúncios iguais
126
- this.anuncio = '';
127
- this.cdr.markForCheck();
128
- clearTimeout(this.timerAnuncio);
129
- if (!texto)
130
- return;
131
- this.timerAnuncio = setTimeout(() => {
132
- this.anuncio = texto;
133
- this.cdr.markForCheck();
134
- }, 50);
135
- }
136
- }
137
- UiAssistantPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantPanelComponent, deps: [{ token: i1.UinyChatService }, { token: i2.UiAssistantService }, { token: i3.UinySessionService }, { token: i0.ChangeDetectorRef }, { token: UINY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
138
- UiAssistantPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantPanelComponent, selector: "ui-assistant-panel", inputs: { empilhado: "empilhado" }, host: { listeners: { "keydown.escape": "aoEscape($event)" } }, viewQueries: [{ propertyName: "composer", first: true, predicate: UiAssistantComposerComponent, descendants: true }], ngImport: i0, template: "<section class=\"uiny\" aria-labelledby=\"uiny-titulo\">\r\n <header class=\"uiny__topo\">\r\n <div class=\"uiny__marca\">\r\n <img *ngIf=\"!avatarFalhou\" class=\"uiny__avatar uiny__avatar--imagem\" [src]=\"avatarUrl\" alt=\"\"\r\n width=\"34\" height=\"34\" (error)=\"avatarFalhou = true\">\r\n <span *ngIf=\"avatarFalhou\" class=\"uiny__avatar\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" focusable=\"false\">\r\n <path d=\"M12 2.5c.5 3.9 2.6 6.9 6.4 8.2.5.2.5.9 0 1.1-3.8 1.3-5.9 4.3-6.4 8.2-.1.6-.9.6-1 0-.5-3.9-2.6-6.9-6.4-8.2-.5-.2-.5-.9 0-1.1 3.8-1.3 5.9-4.3 6.4-8.2.1-.6.9-.6 1 0Z\" fill=\"currentColor\"/>\r\n </svg>\r\n </span>\r\n <div class=\"uiny__identidade\">\r\n <h2 id=\"uiny-titulo\" class=\"uiny__nome\">Uiny</h2>\r\n <p class=\"uiny__sub\">Assistente da Uishop</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"uiny__comandos\">\r\n <button type=\"button\" class=\"uiny__icone\" [class.is-ativo]=\"vendoHistorico\"\r\n [attr.aria-pressed]=\"vendoHistorico ? 'true' : 'false'\"\r\n aria-label=\"Conversas anteriores\" title=\"Conversas anteriores\"\r\n (click)=\"alternarHistorico()\">\r\n <ui-icon icon=\"history\" size=\"20\"></ui-icon>\r\n </button>\r\n <button type=\"button\" class=\"uiny__icone\" aria-label=\"Nova conversa\" title=\"Nova conversa\"\r\n [disabled]=\"chat.ocupado\" (click)=\"novaConversa()\">\r\n <ui-icon icon=\"edit_square\" size=\"20\"></ui-icon>\r\n </button>\r\n <button type=\"button\" class=\"uiny__icone\" (click)=\"fechar()\"\r\n [attr.aria-label]=\"empilhado ? 'Voltar para a aplica\u00E7\u00E3o' : 'Fechar a Uiny'\"\r\n [title]=\"empilhado ? 'Voltar para a aplica\u00E7\u00E3o' : 'Fechar (Esc)'\">\r\n <ui-icon [icon]=\"empilhado ? 'arrow_back' : 'close'\" size=\"20\"></ui-icon>\r\n </button>\r\n </div>\r\n </header>\r\n\r\n <div *ngIf=\"!online\" class=\"uiny__faixa uiny__faixa--offline\" role=\"status\">\r\n <ui-icon icon=\"wifi_off\" size=\"18\"></ui-icon>\r\n <span>Sem conex\u00E3o com a internet. Voc\u00EA poder\u00E1 enviar mensagens quando ela voltar.</span>\r\n </div>\r\n\r\n <div *ngIf=\"estado?.aviso\" class=\"uiny__faixa uiny__faixa--info\" role=\"status\">\r\n <ui-icon icon=\"info\" size=\"18\"></ui-icon>\r\n <span>{{ estado.aviso }}</span>\r\n <button type=\"button\" class=\"uiny__faixa-fechar\" aria-label=\"Dispensar aviso\" (click)=\"chat.limparErro()\">\r\n <ui-icon icon=\"close\" size=\"16\"></ui-icon>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"vendoHistorico; else conversaAtual\" class=\"uiny__historico\">\r\n <div class=\"uiny__historico-topo\">\r\n <h3 class=\"uiny__historico-titulo\">Conversas anteriores</h3>\r\n <button type=\"button\" class=\"uiny__link\" (click)=\"vendoHistorico = false\">Voltar \u00E0 conversa</button>\r\n </div>\r\n\r\n <div *ngIf=\"estado?.carregandoConversas\" class=\"uiny__vazio\" role=\"status\">\r\n <span class=\"uiny__spinner\" aria-hidden=\"true\"></span> Carregando conversas\u2026\r\n </div>\r\n\r\n <p *ngIf=\"!estado?.carregandoConversas && estado?.conversas?.length === 0\" class=\"uiny__vazio\">\r\n Nenhuma conversa anterior neste contexto.\r\n </p>\r\n\r\n <ul *ngIf=\"estado?.conversas?.length\" class=\"uiny__lista-conversas\">\r\n <li *ngFor=\"let c of estado.conversas; trackBy: trackConversa\">\r\n <button type=\"button\" class=\"uiny__conversa\" [class.is-atual]=\"c.id === estado.conversa?.id\"\r\n [attr.aria-current]=\"c.id === estado.conversa?.id ? 'true' : null\"\r\n [disabled]=\"chat.ocupado\" (click)=\"abrirConversa(c.id)\">\r\n <span class=\"uiny__conversa-titulo\">{{ c.titulo || 'Conversa sem t\u00EDtulo' }}</span>\r\n <span *ngIf=\"c.atualizadaEm\" class=\"uiny__conversa-data\">{{ c.atualizadaEm | date:'dd/MM/yyyy HH:mm' }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #conversaAtual>\r\n <ui-assistant-messages class=\"uiny__mensagens\"\r\n [mensagens]=\"mensagens\"\r\n [acoes]=\"acoes\"\r\n [enviando]=\"estado?.enviando\"\r\n [carregando]=\"estado?.carregandoConversa\"\r\n [sugestoes]=\"sugestoes\"\r\n [capacidades]=\"capacidades\"\r\n [temAlteracoes]=\"temAlteracoes\"\r\n [podeEnviar]=\"podeEnviar\"\r\n (sugestao)=\"usarSugestao($event)\"\r\n (confirmar)=\"chat.confirmar($event)\"\r\n (cancelar)=\"chat.cancelar($event)\"\r\n (verificar)=\"chat.verificarAcao($event)\">\r\n </ui-assistant-messages>\r\n </ng-template>\r\n\r\n <div *ngIf=\"estado?.erro\" class=\"uiny__erro\" role=\"alert\">\r\n <ui-icon icon=\"error\" size=\"18\"></ui-icon>\r\n <div class=\"uiny__erro-texto\">\r\n <span>{{ estado.erro.mensagem }}</span>\r\n <small *ngIf=\"estado.erro.correlacao\">C\u00F3digo para o suporte: {{ estado.erro.correlacao }}</small>\r\n </div>\r\n <button *ngIf=\"estado.textoComFalha && podeEnviar\" type=\"button\" class=\"uiny__link\" (click)=\"reenviar()\">\r\n Tentar de novo\r\n </button>\r\n <button type=\"button\" class=\"uiny__faixa-fechar\" aria-label=\"Dispensar erro\" (click)=\"chat.limparErro()\">\r\n <ui-icon icon=\"close\" size=\"16\"></ui-icon>\r\n </button>\r\n </div>\r\n\r\n <ui-assistant-composer class=\"uiny__composer\"\r\n [desabilitado]=\"!podeEnviar\"\r\n [enviando]=\"estado?.enviando\"\r\n [motivo]=\"motivoBloqueio\"\r\n (enviar)=\"enviar($event)\">\r\n </ui-assistant-composer>\r\n\r\n <div class=\"uiny-sr\" aria-live=\"polite\" aria-atomic=\"true\">{{ anuncio }}</div>\r\n</section>\r\n", styles: [":host{--uiny-primaria: var(--theme-default, #7366ff);--uiny-fundo: #ffffff;--uiny-fundo-suave: #f7f7fb;--uiny-borda: #ececf3;--uiny-texto: #2b2b2b;--uiny-texto-suave: #6b6b80;--uiny-erro: #d9364f;--uiny-erro-fundo: #fdeef1;--uiny-aviso-fundo: #f1effe;--uiny-offline-fundo: #fff4e5;--uiny-offline-texto: #8a5300;display:block;height:100%;color:var(--uiny-texto);font-size:14px}:host-context(.dark-only){--uiny-fundo: #262932;--uiny-fundo-suave: #1d1e26;--uiny-borda: #374558;--uiny-texto: rgba(255, 255, 255, .85);--uiny-texto-suave: #98a6ad;--uiny-erro-fundo: rgba(217, 54, 79, .16);--uiny-aviso-fundo: rgba(115, 102, 255, .16);--uiny-offline-fundo: rgba(255, 170, 0, .14);--uiny-offline-texto: #ffc76b}.uiny{display:flex;flex-direction:column;height:100%;background:var(--uiny-fundo);border-left:1px solid var(--uiny-borda);box-shadow:-4px 0 24px #1f1b4d0f}.uiny__topo{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 12px 14px 16px;border-bottom:1px solid var(--uiny-borda)}.uiny__marca{display:flex;align-items:center;gap:10px;min-width:0}.uiny__avatar{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:11px;color:#fff;background:linear-gradient(135deg,var(--uiny-primaria) 0%,#a26cf8 100%)}.uiny__avatar--imagem{object-fit:cover;background:var(--uiny-fundo-suave)}.uiny__identidade{min-width:0}.uiny__nome{margin:0;font-size:16px;font-weight:700;line-height:1.2;color:var(--uiny-texto)}.uiny__sub{margin:0;font-size:12px;line-height:1.3;color:var(--uiny-texto-suave)}.uiny__comandos{display:flex;align-items:center;gap:2px}.uiny__icone{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:0;border-radius:9px;background:transparent;color:var(--uiny-texto-suave);cursor:pointer}.uiny__icone:hover:not(:disabled),.uiny__icone.is-ativo{background:var(--uiny-fundo-suave);color:var(--uiny-primaria)}.uiny__icone:disabled{opacity:.4;cursor:not-allowed}button:focus-visible{outline:2px solid var(--uiny-primaria);outline-offset:2px}.uiny__faixa,.uiny__erro{flex:0 0 auto;display:flex;align-items:flex-start;gap:8px;margin:10px 12px 0;padding:9px 10px;border-radius:10px;font-size:13px;line-height:1.4}.uiny__faixa>ui-icon,.uiny__erro>ui-icon{flex:0 0 auto;margin-top:1px}.uiny__faixa>span,.uiny__faixa .uiny__erro-texto,.uiny__erro>span,.uiny__erro .uiny__erro-texto{flex:1 1 auto;min-width:0}.uiny__faixa--offline{background:var(--uiny-offline-fundo);color:var(--uiny-offline-texto)}.uiny__faixa--info{background:var(--uiny-aviso-fundo);color:var(--uiny-texto)}.uiny__erro{margin:0 12px 8px;background:var(--uiny-erro-fundo);color:var(--uiny-erro);align-items:center}.uiny__erro .uiny__erro-texto{display:flex;flex-direction:column;gap:2px}.uiny__erro .uiny__erro-texto small{opacity:.8;font-size:11px}.uiny__faixa-fechar{flex:0 0 auto;display:inline-flex;padding:2px;border:0;border-radius:6px;background:transparent;color:inherit;cursor:pointer;opacity:.7}.uiny__faixa-fechar:hover{opacity:1}.uiny__link{flex:0 0 auto;padding:0;border:0;background:none;color:var(--uiny-primaria);font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}.uiny__link:hover{text-decoration:underline}.uiny__mensagens{flex:1 1 auto;min-height:0}.uiny__historico{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px 12px}.uiny__historico-topo{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding:0 4px}.uiny__historico-titulo{margin:0;font-size:13px;font-weight:700;color:var(--uiny-texto)}.uiny__lista-conversas{margin:0;padding:0;list-style:none}.uiny__conversa{display:flex;flex-direction:column;gap:2px;width:100%;padding:10px 12px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--uiny-texto);text-align:left;cursor:pointer}.uiny__conversa:hover:not(:disabled){background:var(--uiny-fundo-suave)}.uiny__conversa.is-atual{border-color:var(--uiny-borda);background:var(--uiny-fundo-suave)}.uiny__conversa:disabled{opacity:.5;cursor:not-allowed}.uiny__conversa-titulo{overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.uiny__conversa-data{font-size:12px;color:var(--uiny-texto-suave)}.uiny__vazio{display:flex;align-items:center;gap:8px;margin:18px 4px;color:var(--uiny-texto-suave);font-size:13px}.uiny__spinner{width:14px;height:14px;border:2px solid var(--uiny-borda);border-top-color:var(--uiny-primaria);border-radius:50%;animation:uiny-girar .8s linear infinite}.uiny__composer{flex:0 0 auto}.uiny-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@keyframes uiny-girar{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.uiny__spinner{animation-duration:2.4s}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.UiIconComponent, selector: "ui-icon", inputs: ["icon", "size", "class"] }, { kind: "component", type: i6.UiAssistantMessagesComponent, selector: "ui-assistant-messages", inputs: ["mensagens", "acoes", "enviando", "carregando", "sugestoes", "capacidades", "temAlteracoes", "podeEnviar"], outputs: ["sugestao", "confirmar", "cancelar", "verificar"] }, { kind: "component", type: i7.UiAssistantComposerComponent, selector: "ui-assistant-composer", inputs: ["desabilitado", "enviando", "motivo"], outputs: ["enviar"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantPanelComponent, decorators: [{
140
- type: Component,
141
- args: [{ selector: 'ui-assistant-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"uiny\" aria-labelledby=\"uiny-titulo\">\r\n <header class=\"uiny__topo\">\r\n <div class=\"uiny__marca\">\r\n <img *ngIf=\"!avatarFalhou\" class=\"uiny__avatar uiny__avatar--imagem\" [src]=\"avatarUrl\" alt=\"\"\r\n width=\"34\" height=\"34\" (error)=\"avatarFalhou = true\">\r\n <span *ngIf=\"avatarFalhou\" class=\"uiny__avatar\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" focusable=\"false\">\r\n <path d=\"M12 2.5c.5 3.9 2.6 6.9 6.4 8.2.5.2.5.9 0 1.1-3.8 1.3-5.9 4.3-6.4 8.2-.1.6-.9.6-1 0-.5-3.9-2.6-6.9-6.4-8.2-.5-.2-.5-.9 0-1.1 3.8-1.3 5.9-4.3 6.4-8.2.1-.6.9-.6 1 0Z\" fill=\"currentColor\"/>\r\n </svg>\r\n </span>\r\n <div class=\"uiny__identidade\">\r\n <h2 id=\"uiny-titulo\" class=\"uiny__nome\">Uiny</h2>\r\n <p class=\"uiny__sub\">Assistente da Uishop</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"uiny__comandos\">\r\n <button type=\"button\" class=\"uiny__icone\" [class.is-ativo]=\"vendoHistorico\"\r\n [attr.aria-pressed]=\"vendoHistorico ? 'true' : 'false'\"\r\n aria-label=\"Conversas anteriores\" title=\"Conversas anteriores\"\r\n (click)=\"alternarHistorico()\">\r\n <ui-icon icon=\"history\" size=\"20\"></ui-icon>\r\n </button>\r\n <button type=\"button\" class=\"uiny__icone\" aria-label=\"Nova conversa\" title=\"Nova conversa\"\r\n [disabled]=\"chat.ocupado\" (click)=\"novaConversa()\">\r\n <ui-icon icon=\"edit_square\" size=\"20\"></ui-icon>\r\n </button>\r\n <button type=\"button\" class=\"uiny__icone\" (click)=\"fechar()\"\r\n [attr.aria-label]=\"empilhado ? 'Voltar para a aplica\u00E7\u00E3o' : 'Fechar a Uiny'\"\r\n [title]=\"empilhado ? 'Voltar para a aplica\u00E7\u00E3o' : 'Fechar (Esc)'\">\r\n <ui-icon [icon]=\"empilhado ? 'arrow_back' : 'close'\" size=\"20\"></ui-icon>\r\n </button>\r\n </div>\r\n </header>\r\n\r\n <div *ngIf=\"!online\" class=\"uiny__faixa uiny__faixa--offline\" role=\"status\">\r\n <ui-icon icon=\"wifi_off\" size=\"18\"></ui-icon>\r\n <span>Sem conex\u00E3o com a internet. Voc\u00EA poder\u00E1 enviar mensagens quando ela voltar.</span>\r\n </div>\r\n\r\n <div *ngIf=\"estado?.aviso\" class=\"uiny__faixa uiny__faixa--info\" role=\"status\">\r\n <ui-icon icon=\"info\" size=\"18\"></ui-icon>\r\n <span>{{ estado.aviso }}</span>\r\n <button type=\"button\" class=\"uiny__faixa-fechar\" aria-label=\"Dispensar aviso\" (click)=\"chat.limparErro()\">\r\n <ui-icon icon=\"close\" size=\"16\"></ui-icon>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"vendoHistorico; else conversaAtual\" class=\"uiny__historico\">\r\n <div class=\"uiny__historico-topo\">\r\n <h3 class=\"uiny__historico-titulo\">Conversas anteriores</h3>\r\n <button type=\"button\" class=\"uiny__link\" (click)=\"vendoHistorico = false\">Voltar \u00E0 conversa</button>\r\n </div>\r\n\r\n <div *ngIf=\"estado?.carregandoConversas\" class=\"uiny__vazio\" role=\"status\">\r\n <span class=\"uiny__spinner\" aria-hidden=\"true\"></span> Carregando conversas\u2026\r\n </div>\r\n\r\n <p *ngIf=\"!estado?.carregandoConversas && estado?.conversas?.length === 0\" class=\"uiny__vazio\">\r\n Nenhuma conversa anterior neste contexto.\r\n </p>\r\n\r\n <ul *ngIf=\"estado?.conversas?.length\" class=\"uiny__lista-conversas\">\r\n <li *ngFor=\"let c of estado.conversas; trackBy: trackConversa\">\r\n <button type=\"button\" class=\"uiny__conversa\" [class.is-atual]=\"c.id === estado.conversa?.id\"\r\n [attr.aria-current]=\"c.id === estado.conversa?.id ? 'true' : null\"\r\n [disabled]=\"chat.ocupado\" (click)=\"abrirConversa(c.id)\">\r\n <span class=\"uiny__conversa-titulo\">{{ c.titulo || 'Conversa sem t\u00EDtulo' }}</span>\r\n <span *ngIf=\"c.atualizadaEm\" class=\"uiny__conversa-data\">{{ c.atualizadaEm | date:'dd/MM/yyyy HH:mm' }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #conversaAtual>\r\n <ui-assistant-messages class=\"uiny__mensagens\"\r\n [mensagens]=\"mensagens\"\r\n [acoes]=\"acoes\"\r\n [enviando]=\"estado?.enviando\"\r\n [carregando]=\"estado?.carregandoConversa\"\r\n [sugestoes]=\"sugestoes\"\r\n [capacidades]=\"capacidades\"\r\n [temAlteracoes]=\"temAlteracoes\"\r\n [podeEnviar]=\"podeEnviar\"\r\n (sugestao)=\"usarSugestao($event)\"\r\n (confirmar)=\"chat.confirmar($event)\"\r\n (cancelar)=\"chat.cancelar($event)\"\r\n (verificar)=\"chat.verificarAcao($event)\">\r\n </ui-assistant-messages>\r\n </ng-template>\r\n\r\n <div *ngIf=\"estado?.erro\" class=\"uiny__erro\" role=\"alert\">\r\n <ui-icon icon=\"error\" size=\"18\"></ui-icon>\r\n <div class=\"uiny__erro-texto\">\r\n <span>{{ estado.erro.mensagem }}</span>\r\n <small *ngIf=\"estado.erro.correlacao\">C\u00F3digo para o suporte: {{ estado.erro.correlacao }}</small>\r\n </div>\r\n <button *ngIf=\"estado.textoComFalha && podeEnviar\" type=\"button\" class=\"uiny__link\" (click)=\"reenviar()\">\r\n Tentar de novo\r\n </button>\r\n <button type=\"button\" class=\"uiny__faixa-fechar\" aria-label=\"Dispensar erro\" (click)=\"chat.limparErro()\">\r\n <ui-icon icon=\"close\" size=\"16\"></ui-icon>\r\n </button>\r\n </div>\r\n\r\n <ui-assistant-composer class=\"uiny__composer\"\r\n [desabilitado]=\"!podeEnviar\"\r\n [enviando]=\"estado?.enviando\"\r\n [motivo]=\"motivoBloqueio\"\r\n (enviar)=\"enviar($event)\">\r\n </ui-assistant-composer>\r\n\r\n <div class=\"uiny-sr\" aria-live=\"polite\" aria-atomic=\"true\">{{ anuncio }}</div>\r\n</section>\r\n", styles: [":host{--uiny-primaria: var(--theme-default, #7366ff);--uiny-fundo: #ffffff;--uiny-fundo-suave: #f7f7fb;--uiny-borda: #ececf3;--uiny-texto: #2b2b2b;--uiny-texto-suave: #6b6b80;--uiny-erro: #d9364f;--uiny-erro-fundo: #fdeef1;--uiny-aviso-fundo: #f1effe;--uiny-offline-fundo: #fff4e5;--uiny-offline-texto: #8a5300;display:block;height:100%;color:var(--uiny-texto);font-size:14px}:host-context(.dark-only){--uiny-fundo: #262932;--uiny-fundo-suave: #1d1e26;--uiny-borda: #374558;--uiny-texto: rgba(255, 255, 255, .85);--uiny-texto-suave: #98a6ad;--uiny-erro-fundo: rgba(217, 54, 79, .16);--uiny-aviso-fundo: rgba(115, 102, 255, .16);--uiny-offline-fundo: rgba(255, 170, 0, .14);--uiny-offline-texto: #ffc76b}.uiny{display:flex;flex-direction:column;height:100%;background:var(--uiny-fundo);border-left:1px solid var(--uiny-borda);box-shadow:-4px 0 24px #1f1b4d0f}.uiny__topo{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 12px 14px 16px;border-bottom:1px solid var(--uiny-borda)}.uiny__marca{display:flex;align-items:center;gap:10px;min-width:0}.uiny__avatar{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:11px;color:#fff;background:linear-gradient(135deg,var(--uiny-primaria) 0%,#a26cf8 100%)}.uiny__avatar--imagem{object-fit:cover;background:var(--uiny-fundo-suave)}.uiny__identidade{min-width:0}.uiny__nome{margin:0;font-size:16px;font-weight:700;line-height:1.2;color:var(--uiny-texto)}.uiny__sub{margin:0;font-size:12px;line-height:1.3;color:var(--uiny-texto-suave)}.uiny__comandos{display:flex;align-items:center;gap:2px}.uiny__icone{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:0;border-radius:9px;background:transparent;color:var(--uiny-texto-suave);cursor:pointer}.uiny__icone:hover:not(:disabled),.uiny__icone.is-ativo{background:var(--uiny-fundo-suave);color:var(--uiny-primaria)}.uiny__icone:disabled{opacity:.4;cursor:not-allowed}button:focus-visible{outline:2px solid var(--uiny-primaria);outline-offset:2px}.uiny__faixa,.uiny__erro{flex:0 0 auto;display:flex;align-items:flex-start;gap:8px;margin:10px 12px 0;padding:9px 10px;border-radius:10px;font-size:13px;line-height:1.4}.uiny__faixa>ui-icon,.uiny__erro>ui-icon{flex:0 0 auto;margin-top:1px}.uiny__faixa>span,.uiny__faixa .uiny__erro-texto,.uiny__erro>span,.uiny__erro .uiny__erro-texto{flex:1 1 auto;min-width:0}.uiny__faixa--offline{background:var(--uiny-offline-fundo);color:var(--uiny-offline-texto)}.uiny__faixa--info{background:var(--uiny-aviso-fundo);color:var(--uiny-texto)}.uiny__erro{margin:0 12px 8px;background:var(--uiny-erro-fundo);color:var(--uiny-erro);align-items:center}.uiny__erro .uiny__erro-texto{display:flex;flex-direction:column;gap:2px}.uiny__erro .uiny__erro-texto small{opacity:.8;font-size:11px}.uiny__faixa-fechar{flex:0 0 auto;display:inline-flex;padding:2px;border:0;border-radius:6px;background:transparent;color:inherit;cursor:pointer;opacity:.7}.uiny__faixa-fechar:hover{opacity:1}.uiny__link{flex:0 0 auto;padding:0;border:0;background:none;color:var(--uiny-primaria);font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}.uiny__link:hover{text-decoration:underline}.uiny__mensagens{flex:1 1 auto;min-height:0}.uiny__historico{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px 12px}.uiny__historico-topo{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding:0 4px}.uiny__historico-titulo{margin:0;font-size:13px;font-weight:700;color:var(--uiny-texto)}.uiny__lista-conversas{margin:0;padding:0;list-style:none}.uiny__conversa{display:flex;flex-direction:column;gap:2px;width:100%;padding:10px 12px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--uiny-texto);text-align:left;cursor:pointer}.uiny__conversa:hover:not(:disabled){background:var(--uiny-fundo-suave)}.uiny__conversa.is-atual{border-color:var(--uiny-borda);background:var(--uiny-fundo-suave)}.uiny__conversa:disabled{opacity:.5;cursor:not-allowed}.uiny__conversa-titulo{overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.uiny__conversa-data{font-size:12px;color:var(--uiny-texto-suave)}.uiny__vazio{display:flex;align-items:center;gap:8px;margin:18px 4px;color:var(--uiny-texto-suave);font-size:13px}.uiny__spinner{width:14px;height:14px;border:2px solid var(--uiny-borda);border-top-color:var(--uiny-primaria);border-radius:50%;animation:uiny-girar .8s linear infinite}.uiny__composer{flex:0 0 auto}.uiny-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@keyframes uiny-girar{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.uiny__spinner{animation-duration:2.4s}}\n"] }]
142
- }], ctorParameters: function () { return [{ type: i1.UinyChatService }, { type: i2.UiAssistantService }, { type: i3.UinySessionService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
143
- type: Optional
144
- }, {
145
- type: Inject,
146
- args: [UINY_CONFIG]
147
- }] }]; }, propDecorators: { empilhado: [{
148
- type: Input
149
- }], composer: [{
150
- type: ViewChild,
151
- args: [UiAssistantComposerComponent]
152
- }], aoEscape: [{
153
- type: HostListener,
154
- args: ['keydown.escape', ['$event']]
155
- }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWhlYWRlci9zcmMvbGliL2Fzc2lzdGFudC9jb21wb25lbnRzL2Fzc2lzdGFudC1wYW5lbC91aS1hc3Npc3RhbnQtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LXBhbmVsL3VpLWFzc2lzdGFudC1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7Ozs7Ozs7O0FBUXJHLE1BQU0sT0FBTyx5QkFBeUI7SUF1QmxDLFlBQ1csSUFBcUIsRUFDckIsU0FBNkIsRUFDNUIsT0FBMkIsRUFDM0IsR0FBc0IsRUFDRyxNQUF5QjtRQUpuRCxTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUM1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VixXQUFXOzJHQTVCMUIseUJBQXlCLHVNQUt2Qiw0QkFBNEIsZ0RDaEMzQyxvck1Ba0hBOzRGRHZGYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07OzBCQThCMUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzRDQXpCMUIsU0FBUztzQkFBakIsS0FBSztnQkFFbUMsUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyw0QkFBNEI7Z0JBc0R2QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaW55QWNhbywgVWlueUNvbmZpZywgVWlueU1lbnNhZ2VtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VpbnkubW9kZWxzJztcclxuaW1wb3J0IHsgVUlOWV9BVkFUQVJfUEFEUkFPLCBVSU5ZX0NPTkZJRywgVUlOWV9TVUdFU1RPRVMgfSBmcm9tICcuLi8uLi91aW55LmNvbmZpZyc7XHJcbmltcG9ydCB7IFVpQXNzaXN0YW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpLWFzc2lzdGFudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlueUNoYXRFc3RhZG8sIFVpbnlDaGF0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpbnktY2hhdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlueVNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWlueS1zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUFzc2lzdGFudENvbXBvc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vYXNzaXN0YW50LWNvbXBvc2VyL3VpLWFzc2lzdGFudC1jb21wb3Nlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3VpLWFzc2lzdGFudC1wYW5lbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktYXNzaXN0YW50LXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VpLWFzc2lzdGFudC1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpQXNzaXN0YW50UGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgLyoqIFBhaW5lbCBlbSBsYXJndXJhIHRvdGFsIChjZWx1bGFyL3RhYmxldCk6IG8gYm90w6NvIGRlIGZlY2hhciB2aXJhIFwiVm9sdGFyXCIuICovXHJcbiAgICBASW5wdXQoKSBlbXBpbGhhZG8gPSBmYWxzZTtcclxuXHJcbiAgICBAVmlld0NoaWxkKFVpQXNzaXN0YW50Q29tcG9zZXJDb21wb25lbnQpIGNvbXBvc2VyOiBVaUFzc2lzdGFudENvbXBvc2VyQ29tcG9uZW50O1xyXG5cclxuICAgIHB1YmxpYyBlc3RhZG86IFVpbnlDaGF0RXN0YWRvO1xyXG4gICAgcHVibGljIG9ubGluZSA9IHRydWU7XHJcbiAgICBwdWJsaWMgYW51bmNpbyA9ICcnO1xyXG4gICAgcHVibGljIHZlbmRvSGlzdG9yaWNvID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWVuc2FnZW5zOiBVaW55TWVuc2FnZW1bXSA9IFtdO1xyXG4gICAgcHVibGljIGFjb2VzOiB7IFtpZDogc3RyaW5nXTogVWlueUFjYW8gfSA9IHt9O1xyXG4gICAgcHVibGljIHN1Z2VzdG9lczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyBjYXBhY2lkYWRlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHB1YmxpYyB0ZW1BbHRlcmFjb2VzID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXZhdGFyVXJsOiBzdHJpbmc7XHJcbiAgICAvKiogQSBpbWFnZW0gbsOjbyBjYXJyZWdvdTogdXNhIG8gw61jb25lIHBhZHLDo28uICovXHJcbiAgICBwdWJsaWMgYXZhdGFyRmFsaG91ID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgcHJpdmF0ZSB0aW1lckFudW5jaW86IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY2hhdDogVWlueUNoYXRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhc3Npc3RhbnQ6IFVpQXNzaXN0YW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHNlc3Npb246IFVpbnlTZXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChVSU5ZX0NPTkZJRykgY29uZmlnOiBVaW55Q29uZmlnIHwgbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5hdmF0YXJVcmwgPSBjb25maWc/LmF2YXRhclVybCB8fCBVSU5ZX0FWQVRBUl9QQURSQU87XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmNoYXQuZXN0YWRvLnN1YnNjcmliZShlc3RhZG8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVzdGFkbyA9IGVzdGFkbztcclxuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbnMgPSBlc3RhZG8ubWVuc2FnZW5zO1xyXG4gICAgICAgICAgICB0aGlzLmFjb2VzID0gZXN0YWRvLmFjb2VzO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLnNlc3Npb24ub25saW5lJC5zdWJzY3JpYmUob25saW5lID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmxpbmUgPSBvbmxpbmU7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuY2hhdC5hbnVuY2lvcy5zdWJzY3JpYmUodGV4dG8gPT4gdGhpcy5hbnVuY2lhcih0ZXh0bykpKTtcclxuICAgICAgICB0aGlzLm1vbnRhckJvYXNWaW5kYXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gZXNwZXJhIGEgdHJhbnNpw6fDo28gY29tZcOnYXIgcGFyYSBuw6NvIHJvbGFyIGEgcMOhZ2luYSBubyBmb2N1c1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb21wb3Nlcj8uZm9jYXIoKSwgNjApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyQW51bmNpbyk7XHJcbiAgICAgICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxyXG4gICAgYW9Fc2NhcGUoZXZlbnRvOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGV2ZW50by5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMudmVuZG9IaXN0b3JpY28pIHtcclxuICAgICAgICAgICAgdGhpcy52ZW5kb0hpc3RvcmljbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50by5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYXNzaXN0YW50LmZlY2hhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwb2RlRW52aWFyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9ubGluZSAmJiAhdGhpcy5lc3RhZG8/LmVudmlhbmRvICYmICF0aGlzLmVzdGFkbz8uY2FycmVnYW5kb0NvbnZlcnNhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb3Rpdm9CbG9xdWVpbygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMub25saW5lKSByZXR1cm4gJ1NlbSBjb25leMOjbyBjb20gYSBpbnRlcm5ldC4nO1xyXG4gICAgICAgIGlmICh0aGlzLmVzdGFkbz8uY2FycmVnYW5kb0NvbnZlcnNhKSByZXR1cm4gJ0NhcnJlZ2FuZG8gYSBjb252ZXJzYeKApic7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZmVjaGFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXNzaXN0YW50LmZlY2hhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVudmlhcih0ZXh0bzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvZGVFbnZpYXIpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5jaGF0LmVudmlhcih0ZXh0bykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wb3Nlcj8ubGltcGFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVlbnZpYXIoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGV4dG8gPSB0aGlzLmVzdGFkbz8udGV4dG9Db21GYWxoYTtcclxuICAgICAgICBpZiAodGV4dG8gJiYgdGhpcy5wb2RlRW52aWFyKSB0aGlzLmNoYXQuZW52aWFyKHRleHRvKTtcclxuICAgIH1cclxuXHJcbiAgICB1c2FyU3VnZXN0YW8odGV4dG86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZW52aWFyKHRleHRvKTtcclxuICAgIH1cclxuXHJcbiAgICBub3ZhQ29udmVyc2EoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhdC5ub3ZhQ29udmVyc2EoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZlbmRvSGlzdG9yaWNvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYW51bmNpYXIoJ05vdmEgY29udmVyc2EgaW5pY2lhZGEuJyk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb21wb3Nlcj8uZm9jYXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFsdGVybmFySGlzdG9yaWNvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSAhdGhpcy52ZW5kb0hpc3RvcmljbztcclxuICAgICAgICBpZiAodGhpcy52ZW5kb0hpc3RvcmljbykgdGhpcy5jaGF0Lmxpc3RhckNvbnZlcnNhcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFicmlyQ29udmVyc2EoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmVuZG9IaXN0b3JpY28gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYXQuYWJyaXJDb252ZXJzYShpZCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbXBvc2VyPy5mb2NhcigpKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0NvbnZlcnNhKF86IG51bWJlciwgYzogeyBpZDogc3RyaW5nIH0pIHtcclxuICAgICAgICByZXR1cm4gYy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vbnRhckJvYXNWaW5kYXMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3VnZXN0b2VzID0gVUlOWV9TVUdFU1RPRVNbdGhpcy5hc3Npc3RhbnQuc2lzdGVtYU9yaWdlbV0gPz8geyB0ZXh0b3M6IFtdLCBhbHRlcmFjb2VzOiBmYWxzZSB9O1xyXG4gICAgICAgIHRoaXMuc3VnZXN0b2VzID0gc3VnZXN0b2VzLnRleHRvcztcclxuICAgICAgICB0aGlzLmNhcGFjaWRhZGVzID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1BbHRlcmFjb2VzID0gc3VnZXN0b2VzLmFsdGVyYWNvZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhbnVuY2lhcih0ZXh0bzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgLy8gbGltcGEgYW50ZXMgcGFyYSBsZWl0b3JlcyBkZSB0ZWxhIHJlcGV0aXJlbSBhbsO6bmNpb3MgaWd1YWlzXHJcbiAgICAgICAgdGhpcy5hbnVuY2lvID0gJyc7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJBbnVuY2lvKTtcclxuICAgICAgICBpZiAoIXRleHRvKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy50aW1lckFudW5jaW8gPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbnVuY2lvID0gdGV4dG87XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0sIDUwKTtcclxuICAgIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cInVpbnlcIiBhcmlhLWxhYmVsbGVkYnk9XCJ1aW55LXRpdHVsb1wiPlxyXG4gICAgPGhlYWRlciBjbGFzcz1cInVpbnlfX3RvcG9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9fbWFyY2FcIj5cclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cIiFhdmF0YXJGYWxob3VcIiBjbGFzcz1cInVpbnlfX2F2YXRhciB1aW55X19hdmF0YXItLWltYWdlbVwiIFtzcmNdPVwiYXZhdGFyVXJsXCIgYWx0PVwiXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMzRcIiBoZWlnaHQ9XCIzNFwiIChlcnJvcik9XCJhdmF0YXJGYWxob3UgPSB0cnVlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXZhdGFyRmFsaG91XCIgY2xhc3M9XCJ1aW55X19hdmF0YXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZvY3VzYWJsZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAyLjVjLjUgMy45IDIuNiA2LjkgNi40IDguMi41LjIuNS45IDAgMS4xLTMuOCAxLjMtNS45IDQuMy02LjQgOC4yLS4xLjYtLjkuNi0xIDAtLjUtMy45LTIuNi02LjktNi40LTguMi0uNS0uMi0uNS0uOSAwLTEuMSAzLjgtMS4zIDUuOS00LjMgNi40LTguMi4xLS42LjktLjYgMSAwWlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9faWRlbnRpZGFkZVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGlkPVwidWlueS10aXR1bG9cIiBjbGFzcz1cInVpbnlfX25vbWVcIj5VaW55PC9oMj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidWlueV9fc3ViXCI+QXNzaXN0ZW50ZSBkYSBVaXNob3A8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWlueV9fY29tYW5kb3NcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19pY29uZVwiIFtjbGFzcy5pcy1hdGl2b109XCJ2ZW5kb0hpc3Rvcmljb1wiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwidmVuZG9IaXN0b3JpY28gPyAndHJ1ZScgOiAnZmFsc2UnXCJcclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb252ZXJzYXMgYW50ZXJpb3Jlc1wiIHRpdGxlPVwiQ29udmVyc2FzIGFudGVyaW9yZXNcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFsdGVybmFySGlzdG9yaWNvKClcIj5cclxuICAgICAgICAgICAgICAgIDx1aS1pY29uIGljb249XCJoaXN0b3J5XCIgc2l6ZT1cIjIwXCI+PC91aS1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19pY29uZVwiIGFyaWEtbGFiZWw9XCJOb3ZhIGNvbnZlcnNhXCIgdGl0bGU9XCJOb3ZhIGNvbnZlcnNhXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjaGF0Lm9jdXBhZG9cIiAoY2xpY2spPVwibm92YUNvbnZlcnNhKClcIj5cclxuICAgICAgICAgICAgICAgIDx1aS1pY29uIGljb249XCJlZGl0X3NxdWFyZVwiIHNpemU9XCIyMFwiPjwvdWktaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidWlueV9faWNvbmVcIiAoY2xpY2spPVwiZmVjaGFyKClcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlbXBpbGhhZG8gPyAnVm9sdGFyIHBhcmEgYSBhcGxpY2HDp8OjbycgOiAnRmVjaGFyIGEgVWlueSdcIlxyXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImVtcGlsaGFkbyA/ICdWb2x0YXIgcGFyYSBhIGFwbGljYcOnw6NvJyA6ICdGZWNoYXIgKEVzYyknXCI+XHJcbiAgICAgICAgICAgICAgICA8dWktaWNvbiBbaWNvbl09XCJlbXBpbGhhZG8gPyAnYXJyb3dfYmFjaycgOiAnY2xvc2UnXCIgc2l6ZT1cIjIwXCI+PC91aS1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvaGVhZGVyPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhb25saW5lXCIgY2xhc3M9XCJ1aW55X19mYWl4YSB1aW55X19mYWl4YS0tb2ZmbGluZVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICA8dWktaWNvbiBpY29uPVwid2lmaV9vZmZcIiBzaXplPVwiMThcIj48L3VpLWljb24+XHJcbiAgICAgICAgPHNwYW4+U2VtIGNvbmV4w6NvIGNvbSBhIGludGVybmV0LiBWb2PDqiBwb2RlcsOhIGVudmlhciBtZW5zYWdlbnMgcXVhbmRvIGVsYSB2b2x0YXIuPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImVzdGFkbz8uYXZpc29cIiBjbGFzcz1cInVpbnlfX2ZhaXhhIHVpbnlfX2ZhaXhhLS1pbmZvXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgIDx1aS1pY29uIGljb249XCJpbmZvXCIgc2l6ZT1cIjE4XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDxzcGFuPnt7IGVzdGFkby5hdmlzbyB9fTwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnlfX2ZhaXhhLWZlY2hhclwiIGFyaWEtbGFiZWw9XCJEaXNwZW5zYXIgYXZpc29cIiAoY2xpY2spPVwiY2hhdC5saW1wYXJFcnJvKClcIj5cclxuICAgICAgICAgICAgPHVpLWljb24gaWNvbj1cImNsb3NlXCIgc2l6ZT1cIjE2XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInZlbmRvSGlzdG9yaWNvOyBlbHNlIGNvbnZlcnNhQXR1YWxcIiBjbGFzcz1cInVpbnlfX2hpc3Rvcmljb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aW55X19oaXN0b3JpY28tdG9wb1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJ1aW55X19oaXN0b3JpY28tdGl0dWxvXCI+Q29udmVyc2FzIGFudGVyaW9yZXM8L2gzPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnlfX2xpbmtcIiAoY2xpY2spPVwidmVuZG9IaXN0b3JpY28gPSBmYWxzZVwiPlZvbHRhciDDoCBjb252ZXJzYTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZXN0YWRvPy5jYXJyZWdhbmRvQ29udmVyc2FzXCIgY2xhc3M9XCJ1aW55X192YXppb1wiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aW55X19zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPiBDYXJyZWdhbmRvIGNvbnZlcnNhc+KAplxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cCAqbmdJZj1cIiFlc3RhZG8/LmNhcnJlZ2FuZG9Db252ZXJzYXMgJiYgZXN0YWRvPy5jb252ZXJzYXM/Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidWlueV9fdmF6aW9cIj5cclxuICAgICAgICAgICAgTmVuaHVtYSBjb252ZXJzYSBhbnRlcmlvciBuZXN0ZSBjb250ZXh0by5cclxuICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgIDx1bCAqbmdJZj1cImVzdGFkbz8uY29udmVyc2FzPy5sZW5ndGhcIiBjbGFzcz1cInVpbnlfX2xpc3RhLWNvbnZlcnNhc1wiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGMgb2YgZXN0YWRvLmNvbnZlcnNhczsgdHJhY2tCeTogdHJhY2tDb252ZXJzYVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19jb252ZXJzYVwiIFtjbGFzcy5pcy1hdHVhbF09XCJjLmlkID09PSBlc3RhZG8uY29udmVyc2E/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYy5pZCA9PT0gZXN0YWRvLmNvbnZlcnNhPy5pZCA/ICd0cnVlJyA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjaGF0Lm9jdXBhZG9cIiAoY2xpY2spPVwiYWJyaXJDb252ZXJzYShjLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWlueV9fY29udmVyc2EtdGl0dWxvXCI+e3sgYy50aXR1bG8gfHwgJ0NvbnZlcnNhIHNlbSB0w610dWxvJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImMuYXR1YWxpemFkYUVtXCIgY2xhc3M9XCJ1aW55X19jb252ZXJzYS1kYXRhXCI+e3sgYy5hdHVhbGl6YWRhRW0gfCBkYXRlOidkZC9NTS95eXl5IEhIOm1tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2NvbnZlcnNhQXR1YWw+XHJcbiAgICAgICAgPHVpLWFzc2lzdGFudC1tZXNzYWdlcyBjbGFzcz1cInVpbnlfX21lbnNhZ2Vuc1wiXHJcbiAgICAgICAgICAgIFttZW5zYWdlbnNdPVwibWVuc2FnZW5zXCJcclxuICAgICAgICAgICAgW2Fjb2VzXT1cImFjb2VzXCJcclxuICAgICAgICAgICAgW2VudmlhbmRvXT1cImVzdGFkbz8uZW52aWFuZG9cIlxyXG4gICAgICAgICAgICBbY2FycmVnYW5kb109XCJlc3RhZG8/LmNhcnJlZ2FuZG9Db252ZXJzYVwiXHJcbiAgICAgICAgICAgIFtzdWdlc3RvZXNdPVwic3VnZXN0b2VzXCJcclxuICAgICAgICAgICAgW2NhcGFjaWRhZGVzXT1cImNhcGFjaWRhZGVzXCJcclxuICAgICAgICAgICAgW3RlbUFsdGVyYWNvZXNdPVwidGVtQWx0ZXJhY29lc1wiXHJcbiAgICAgICAgICAgIFtwb2RlRW52aWFyXT1cInBvZGVFbnZpYXJcIlxyXG4gICAgICAgICAgICAoc3VnZXN0YW8pPVwidXNhclN1Z2VzdGFvKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY29uZmlybWFyKT1cImNoYXQuY29uZmlybWFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY2FuY2VsYXIpPVwiY2hhdC5jYW5jZWxhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHZlcmlmaWNhcik9XCJjaGF0LnZlcmlmaWNhckFjYW8oJGV2ZW50KVwiPlxyXG4gICAgICAgIDwvdWktYXNzaXN0YW50LW1lc3NhZ2VzPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiZXN0YWRvPy5lcnJvXCIgY2xhc3M9XCJ1aW55X19lcnJvXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgPHVpLWljb24gaWNvbj1cImVycm9yXCIgc2l6ZT1cIjE4XCI+PC91aS1pY29uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aW55X19lcnJvLXRleHRvXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGVzdGFkby5lcnJvLm1lbnNhZ2VtIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJlc3RhZG8uZXJyby5jb3JyZWxhY2FvXCI+Q8OzZGlnbyBwYXJhIG8gc3Vwb3J0ZToge3sgZXN0YWRvLmVycm8uY29ycmVsYWNhbyB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVzdGFkby50ZXh0b0NvbUZhbGhhICYmIHBvZGVFbnZpYXJcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aW55X19saW5rXCIgKGNsaWNrKT1cInJlZW52aWFyKClcIj5cclxuICAgICAgICAgICAgVGVudGFyIGRlIG5vdm9cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInVpbnlfX2ZhaXhhLWZlY2hhclwiIGFyaWEtbGFiZWw9XCJEaXNwZW5zYXIgZXJyb1wiIChjbGljayk9XCJjaGF0LmxpbXBhckVycm8oKVwiPlxyXG4gICAgICAgICAgICA8dWktaWNvbiBpY29uPVwiY2xvc2VcIiBzaXplPVwiMTZcIj48L3VpLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dWktYXNzaXN0YW50LWNvbXBvc2VyIGNsYXNzPVwidWlueV9fY29tcG9zZXJcIlxyXG4gICAgICAgIFtkZXNhYmlsaXRhZG9dPVwiIXBvZGVFbnZpYXJcIlxyXG4gICAgICAgIFtlbnZpYW5kb109XCJlc3RhZG8/LmVudmlhbmRvXCJcclxuICAgICAgICBbbW90aXZvXT1cIm1vdGl2b0Jsb3F1ZWlvXCJcclxuICAgICAgICAoZW52aWFyKT1cImVudmlhcigkZXZlbnQpXCI+XHJcbiAgICA8L3VpLWFzc2lzdGFudC1jb21wb3Nlcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidWlueS1zclwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPnt7IGFudW5jaW8gfX08L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
@@ -1,26 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import { parseMarkdown } from '../../utils/uiny-markdown';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- /**
6
- * Exibe o texto da Uiny com um subconjunto de Markdown. Tudo é renderizado por
7
- * interpolação: HTML vindo da API aparece como texto, nunca é interpretado.
8
- */
9
- export class UiAssistantTextComponent {
10
- constructor() {
11
- this.texto = '';
12
- this.blocos = [];
13
- }
14
- ngOnChanges() {
15
- this.blocos = parseMarkdown(this.texto || '');
16
- }
17
- }
18
- UiAssistantTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
- UiAssistantTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UiAssistantTextComponent, selector: "ui-assistant-text", inputs: { texto: "texto" }, usesOnChanges: true, ngImport: i0, template: "<ng-template #inlines let-lista>\n <ng-container *ngFor=\"let i of lista\" [ngSwitch]=\"i.t\">\n <strong *ngSwitchCase=\"'strong'\">{{ i.v }}</strong>\n <em *ngSwitchCase=\"'em'\">{{ i.v }}</em>\n <code *ngSwitchCase=\"'code'\">{{ i.v }}</code>\n <a *ngSwitchCase=\"'link'\" [href]=\"i.href\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">{{ i.v }}</a>\n <ng-container *ngSwitchDefault>{{ i.v }}</ng-container>\n </ng-container>\n</ng-template>\n\n<ng-container *ngFor=\"let b of blocos\" [ngSwitch]=\"b.t\">\n <p *ngSwitchCase=\"'p'\">\n <ng-container *ngFor=\"let linha of $any(b).linhas; let ultima = last\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: linha }\"></ng-container><br *ngIf=\"!ultima\">\n </ng-container>\n </p>\n <p *ngSwitchCase=\"'h'\" class=\"uiny-texto__titulo\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: $any(b).inlines }\"></ng-container>\n </p>\n <ul *ngSwitchCase=\"'ul'\">\n <li *ngFor=\"let item of $any(b).itens\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: item }\"></ng-container>\n </li>\n </ul>\n <ol *ngSwitchCase=\"'ol'\" [attr.start]=\"$any(b).inicio !== 1 ? $any(b).inicio : null\">\n <li *ngFor=\"let item of $any(b).itens\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: item }\"></ng-container>\n </li>\n </ol>\n <pre *ngSwitchCase=\"'code'\"><code>{{ $any(b).v }}</code></pre>\n</ng-container>\n", styles: [":host{display:block;line-height:1.55;overflow-wrap:anywhere}p,ul,ol,pre{margin:0 0 8px}p:last-child,ul:last-child,ol:last-child,pre:last-child{margin-bottom:0}ul,ol{padding-left:20px}li+li{margin-top:3px}.uiny-texto__titulo{font-weight:700;margin-top:4px}strong{font-weight:700}code{padding:1px 5px;border-radius:5px;background:var(--uiny-fundo-suave, #f7f7fb);font-size:12.5px}pre{padding:10px 12px;border-radius:10px;background:var(--uiny-fundo-suave, #f7f7fb);overflow-x:auto;white-space:pre}pre code{padding:0;background:none}a{color:var(--uiny-primaria, #7366ff);text-decoration:underline;text-underline-offset:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantTextComponent, decorators: [{
21
- type: Component,
22
- args: [{ selector: 'ui-assistant-text', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #inlines let-lista>\n <ng-container *ngFor=\"let i of lista\" [ngSwitch]=\"i.t\">\n <strong *ngSwitchCase=\"'strong'\">{{ i.v }}</strong>\n <em *ngSwitchCase=\"'em'\">{{ i.v }}</em>\n <code *ngSwitchCase=\"'code'\">{{ i.v }}</code>\n <a *ngSwitchCase=\"'link'\" [href]=\"i.href\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">{{ i.v }}</a>\n <ng-container *ngSwitchDefault>{{ i.v }}</ng-container>\n </ng-container>\n</ng-template>\n\n<ng-container *ngFor=\"let b of blocos\" [ngSwitch]=\"b.t\">\n <p *ngSwitchCase=\"'p'\">\n <ng-container *ngFor=\"let linha of $any(b).linhas; let ultima = last\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: linha }\"></ng-container><br *ngIf=\"!ultima\">\n </ng-container>\n </p>\n <p *ngSwitchCase=\"'h'\" class=\"uiny-texto__titulo\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: $any(b).inlines }\"></ng-container>\n </p>\n <ul *ngSwitchCase=\"'ul'\">\n <li *ngFor=\"let item of $any(b).itens\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: item }\"></ng-container>\n </li>\n </ul>\n <ol *ngSwitchCase=\"'ol'\" [attr.start]=\"$any(b).inicio !== 1 ? $any(b).inicio : null\">\n <li *ngFor=\"let item of $any(b).itens\">\n <ng-container *ngTemplateOutlet=\"inlines; context: { $implicit: item }\"></ng-container>\n </li>\n </ol>\n <pre *ngSwitchCase=\"'code'\"><code>{{ $any(b).v }}</code></pre>\n</ng-container>\n", styles: [":host{display:block;line-height:1.55;overflow-wrap:anywhere}p,ul,ol,pre{margin:0 0 8px}p:last-child,ul:last-child,ol:last-child,pre:last-child{margin-bottom:0}ul,ol{padding-left:20px}li+li{margin-top:3px}.uiny-texto__titulo{font-weight:700;margin-top:4px}strong{font-weight:700}code{padding:1px 5px;border-radius:5px;background:var(--uiny-fundo-suave, #f7f7fb);font-size:12.5px}pre{padding:10px 12px;border-radius:10px;background:var(--uiny-fundo-suave, #f7f7fb);overflow-x:auto;white-space:pre}pre code{padding:0;background:none}a{color:var(--uiny-primaria, #7366ff);text-decoration:underline;text-underline-offset:2px}\n"] }]
23
- }], propDecorators: { texto: [{
24
- type: Input
25
- }] } });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LXRleHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LXRleHQvdWktYXNzaXN0YW50LXRleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L2NvbXBvbmVudHMvYXNzaXN0YW50LXRleHQvdWktYXNzaXN0YW50LXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBYSxNQUFNLDJCQUEyQixDQUFDOzs7QUFFckU7OztHQUdHO0FBT0gsTUFBTSxPQUFPLHdCQUF3QjtJQU5yQztRQU9hLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFYixXQUFNLEdBQWdCLEVBQUUsQ0FBQztLQUtuQztJQUhHLFdBQVc7UUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7O3NIQVBRLHdCQUF3QjswR0FBeEIsd0JBQXdCLDBHQ2JyQyx1akRBK0JBOzRGRGxCYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0ksbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHBhcnNlTWFya2Rvd24sIFVpbnlCbG9jbyB9IGZyb20gJy4uLy4uL3V0aWxzL3VpbnktbWFya2Rvd24nO1xuXG4vKipcbiAqIEV4aWJlIG8gdGV4dG8gZGEgVWlueSBjb20gdW0gc3ViY29uanVudG8gZGUgTWFya2Rvd24uIFR1ZG8gw6kgcmVuZGVyaXphZG8gcG9yXG4gKiBpbnRlcnBvbGHDp8OjbzogSFRNTCB2aW5kbyBkYSBBUEkgYXBhcmVjZSBjb21vIHRleHRvLCBudW5jYSDDqSBpbnRlcnByZXRhZG8uXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndWktYXNzaXN0YW50LXRleHQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1hc3Npc3RhbnQtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktYXNzaXN0YW50LXRleHQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaUFzc2lzdGFudFRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIHRleHRvID0gJyc7XG5cbiAgICBwdWJsaWMgYmxvY29zOiBVaW55QmxvY29bXSA9IFtdO1xuXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmxvY29zID0gcGFyc2VNYXJrZG93bih0aGlzLnRleHRvIHx8ICcnKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2lubGluZXMgbGV0LWxpc3RhPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGkgb2YgbGlzdGFcIiBbbmdTd2l0Y2hdPVwiaS50XCI+XG4gICAgICAgIDxzdHJvbmcgKm5nU3dpdGNoQ2FzZT1cIidzdHJvbmcnXCI+e3sgaS52IH19PC9zdHJvbmc+XG4gICAgICAgIDxlbSAqbmdTd2l0Y2hDYXNlPVwiJ2VtJ1wiPnt7IGkudiB9fTwvZW0+XG4gICAgICAgIDxjb2RlICpuZ1N3aXRjaENhc2U9XCInY29kZSdcIj57eyBpLnYgfX08L2NvZGU+XG4gICAgICAgIDxhICpuZ1N3aXRjaENhc2U9XCInbGluaydcIiBbaHJlZl09XCJpLmhyZWZcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyIG5vZm9sbG93XCI+e3sgaS52IH19PC9hPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+e3sgaS52IH19PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGJsb2Nvc1wiIFtuZ1N3aXRjaF09XCJiLnRcIj5cbiAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ3AnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmhhIG9mICRhbnkoYikubGluaGFzOyBsZXQgdWx0aW1hID0gbGFzdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZXM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBsaW5oYSB9XCI+PC9uZy1jb250YWluZXI+PGJyICpuZ0lmPVwiIXVsdGltYVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3A+XG4gICAgPHAgKm5nU3dpdGNoQ2FzZT1cIidoJ1wiIGNsYXNzPVwidWlueS10ZXh0b19fdGl0dWxvXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogJGFueShiKS5pbmxpbmVzIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3A+XG4gICAgPHVsICpuZ1N3aXRjaENhc2U9XCIndWwnXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiAkYW55KGIpLml0ZW5zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2xpPlxuICAgIDwvdWw+XG4gICAgPG9sICpuZ1N3aXRjaENhc2U9XCInb2wnXCIgW2F0dHIuc3RhcnRdPVwiJGFueShiKS5pbmljaW8gIT09IDEgPyAkYW55KGIpLmluaWNpbyA6IG51bGxcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mICRhbnkoYikuaXRlbnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cHJlICpuZ1N3aXRjaENhc2U9XCInY29kZSdcIj48Y29kZT57eyAkYW55KGIpLnYgfX08L2NvZGU+PC9wcmU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,12 +0,0 @@
1
- /*
2
- * Contrato HTTP da API da Uiny (projeto uishop-ia, prefixo /api/v1).
3
- *
4
- * Fonte: C:\git\uishop\uishop-ia
5
- * - Rotas: config/web.php; README.md (seção Endpoints).
6
- * - Formatos: services/uiny/ApresentadorConversa.php, ContextoTela.php, ConfirmacaoService.php.
7
- * - Valores: config/Constants.php; erros: services/excecoes/ErroUiny.php.
8
- *
9
- * Os ids de conversa, mensagem e ação são UUIDs (string).
10
- */
11
- export {};
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlueS1hcGkubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktaGVhZGVyL3NyYy9saWIvYXNzaXN0YW50L21vZGVscy91aW55LWFwaS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvbnRyYXRvIEhUVFAgZGEgQVBJIGRhIFVpbnkgKHByb2pldG8gdWlzaG9wLWlhLCBwcmVmaXhvIC9hcGkvdjEpLlxuICpcbiAqIEZvbnRlOiBDOlxcZ2l0XFx1aXNob3BcXHVpc2hvcC1pYVxuICogIC0gUm90YXM6IGNvbmZpZy93ZWIucGhwOyBSRUFETUUubWQgKHNlw6fDo28gRW5kcG9pbnRzKS5cbiAqICAtIEZvcm1hdG9zOiBzZXJ2aWNlcy91aW55L0FwcmVzZW50YWRvckNvbnZlcnNhLnBocCwgQ29udGV4dG9UZWxhLnBocCwgQ29uZmlybWFjYW9TZXJ2aWNlLnBocC5cbiAqICAtIFZhbG9yZXM6IGNvbmZpZy9Db25zdGFudHMucGhwOyBlcnJvczogc2VydmljZXMvZXhjZWNvZXMvRXJyb1VpbnkucGhwLlxuICpcbiAqIE9zIGlkcyBkZSBjb252ZXJzYSwgbWVuc2FnZW0gZSBhw6fDo28gc8OjbyBVVUlEcyAoc3RyaW5nKS5cbiAqL1xuXG4vKiogQ29uc3RhbnRzOjpTSVNURU1BU19PUklHRU0gKi9cbmV4cG9ydCB0eXBlIFVpbnlTaXN0ZW1hT3JpZ2VtID0gJ3N0dWRpbycgfCAnZXJwJztcblxuLyoqIENvbnN0YW50czo6UEFQRUxfKiAqL1xuZXhwb3J0IHR5cGUgVWlueVBhcGVsQXBpID0gJ3VzdWFyaW8nIHwgJ2Fzc2lzdGVudGUnO1xuXG4vKiogQ29uc3RhbnRzOjpFU1RBRE9fKiAoZXN0YWRvIGRhIG1lbnNhZ2VtIGUgZGEgcmVzcG9zdGEpLiAqL1xuZXhwb3J0IHR5cGUgVWlueUVzdGFkb1Jlc3Bvc3RhQXBpID0gJ3Jlc3Bvc3RhJyB8ICdlc2NsYXJlY2ltZW50bycgfCAnYWd1YXJkYW5kb19jb25maXJtYWNhbycgfCAnYWNhb19jb25jbHVpZGEnIHwgJ2ZhbGhhJztcblxuLyoqIENvbnN0YW50czo6QUNBT18qIChjYW1wbyBcInNpdHVhY2FvXCIgZGEgYcOnw6NvKS4gKi9cbmV4cG9ydCB0eXBlIFVpbnlTaXR1YWNhb0FjYW9BcGkgPVxuICAgIHwgJ3BlbmRlbnRlJ1xuICAgIHwgJ2V4ZWN1dGFuZG8nXG4gICAgfCAnZXhlY3V0YWRhJ1xuICAgIHwgJ2NhbmNlbGFkYSdcbiAgICB8ICdleHBpcmFkYSdcbiAgICB8ICdpbnZhbGlkYWRhJ1xuICAgIHwgJ2ZhbGhvdSdcbiAgICB8ICdpbmRldGVybWluYWRhJztcblxuLyoqIENvbnRleHRvVGVsYTogc8OzIGVzdGVzIGNhbXBvczsgcXVhbHF1ZXIgb3V0cm8gZ2VyYSA0MjIuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlDb250ZXh0b0FwaSB7XG4gICAgc2lzdGVtYTogVWlueVNpc3RlbWFPcmlnZW07XG4gICAgdGVsYT86IHN0cmluZztcbiAgICBpZF9sb2phPzogbnVtYmVyO1xuICAgIGlkX2xvamFfbGVpYXV0ZT86IG51bWJlcjtcbiAgICBpZF90ZW1hPzogbnVtYmVyO1xuICAgIGlkX3Byb2R1dG8/OiBudW1iZXI7XG4gICAgaWRfcGVkaWRvPzogbnVtYmVyO1xufVxuXG4vKiogQXByZXNlbnRhZG9yQ29udmVyc2E6OmNvbnZlcnNhICovXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlDb252ZXJzYUFwaSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXR1bG86IHN0cmluZyB8IG51bGw7XG4gICAgc2lzdGVtYV9vcmlnZW06IFVpbnlTaXN0ZW1hT3JpZ2VtO1xuICAgIGlkX2xvamE6IG51bWJlciB8IG51bGw7XG4gICAgZHRfY3JpYWNhbzogc3RyaW5nO1xuICAgIGR0X2FsdGVyYWNhbzogc3RyaW5nO1xufVxuXG4vKiogQXByZXNlbnRhZG9yQ29udmVyc2E6OmFjYW8gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUFjYW9BcGkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmVycmFtZW50YTogc3RyaW5nO1xuICAgIHNpc3RlbWE6IFVpbnlTaXN0ZW1hT3JpZ2VtO1xuICAgIHJlc3Vtbzogc3RyaW5nO1xuICAgIC8qKiBFeC46IHsgdGlwbzogJ2FsdGVyYWNhb19jb3InLCB0ZW1hLCBsb2phLCByb3R1bG8sIHZhbG9yX2F0dWFsLCB2YWxvcl9ub3ZvLCAuLi4gfSAqL1xuICAgIGRldGFsaGVzOiB1bmtub3duO1xuICAgIHNpdHVhY2FvOiBVaW55U2l0dWFjYW9BY2FvQXBpO1xuICAgIGR0X2V4cGlyYWNhbzogc3RyaW5nO1xuICAgIGR0X2NvbmNsdXNhbzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIEJsb2NvcyBkZSBhcHJlc2VudGHDp8OjbzogbGlzdGEgZmVjaGFkYSBlbSBDb25zdGFudHM6OkFQUkVTRU5UQUNBT18qLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaW55QXByZXNlbnRhY2FvQXBpIHtcbiAgICB0aXBvOiAnbGlzdGFfcHJvZHV0b3MnIHwgJ3Jlc3Vtb192ZW5kYXMnIHwgJ2xpc3RhX2xvamFzJyB8ICd0ZW1hJyB8ICdvcGNvZXMnIHwgJ2FsdGVyYWNhb19jb3InO1xuICAgIGRhZG9zPzogYW55O1xufVxuXG4vKiogSW5zdHJ1w6fDtWVzIGRlIGludGVyZmFjZTogQ29uc3RhbnRzOjpJTlNUUlVDT0VTX0lOVEVSRkFDRS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUluc3RydWNhb0FwaSB7XG4gICAgdGlwbzogJ2F0dWFsaXphcl9wcmV2aWV3X3RlbWEnO1xuICAgIGlkX2xvamFfbGVpYXV0ZT86IG51bWJlcjtcbn1cblxuLyoqIEFwcmVzZW50YWRvckNvbnZlcnNhOjptZW5zYWdlbSAqL1xuZXhwb3J0IGludGVyZmFjZSBVaW55TWVuc2FnZW1BcGkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcGFwZWw6IFVpbnlQYXBlbEFwaTtcbiAgICB0ZXh0bzogc3RyaW5nIHwgbnVsbDtcbiAgICBlc3RhZG86IFVpbnlFc3RhZG9SZXNwb3N0YUFwaSB8IG51bGw7XG4gICAgYXByZXNlbnRhY2FvOiBVaW55QXByZXNlbnRhY2FvQXBpW107XG4gICAgaW5zdHJ1Y29lc19pbnRlcmZhY2U6IFVpbnlJbnN0cnVjYW9BcGlbXTtcbiAgICBhY2FvX3BlbmRlbnRlOiBVaW55QWNhb0FwaSB8IG51bGw7XG4gICAgZHRfY3JpYWNhbzogc3RyaW5nO1xufVxuXG4vKiogQ29ycG8gZGUgZXJybyAodGFtYsOpbSBwcmVzZW50ZSBlbSByZXNwb3N0YXMgNDA5LzUwMi81MDQgZGEgY29uZmlybWHDp8OjbykuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlFcnJvQXBpIHtcbiAgICBjb2RpZ286IHN0cmluZztcbiAgICBtZW5zYWdlbTogc3RyaW5nO1xuICAgIGRldGFsaGVzPzogeyBjYW1wbzogc3RyaW5nOyBtZW5zYWdlbTogc3RyaW5nIH1bXTtcbn1cblxuLyoqXG4gKiBBcHJlc2VudGFkb3JDb252ZXJzYTo6cmVzcG9zdGEg4oCUIFBPU1QgbWVuc2FnZW5zLCBjb25maXJtYXIgZSBjYW5jZWxhci5cbiAqIEVtIGVycm9zIGRhIGNvbmZpcm1hw6fDo28gbyBtZXNtbyBjb3JwbyB2ZW0gY29tIFwiZXJyb1wiIGUgc3RhdHVzIDR4eC81eHguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlueVJlc3Bvc3RhQXBpIHtcbiAgICBpZF9jb3JyZWxhY2FvPzogc3RyaW5nO1xuICAgIGNvbnZlcnNhPzogVWlueUNvbnZlcnNhQXBpO1xuICAgIGVzdGFkbz86IFVpbnlFc3RhZG9SZXNwb3N0YUFwaTtcbiAgICBtZW5zYWdlbT86IFVpbnlNZW5zYWdlbUFwaSB8IG51bGw7XG4gICAgYWNhb19wZW5kZW50ZT86IFVpbnlBY2FvQXBpIHwgbnVsbDtcbiAgICAvKiogNDA5IEFDQU9fSU5WQUxJREFEQTogYSBhw6fDo28gc3Vic3RpdHXDrWRhLiAqL1xuICAgIGFjYW9fYW50ZXJpb3I/OiBVaW55QWNhb0FwaTtcbiAgICAvKiogQ29uZmlybWHDp8OjbyByZXBldGlkYTogZGV2b2x2ZSBvIHJlc3VsdGFkbyBqw6EgZ3JhdmFkbywgc2VtIGV4ZWN1dGFyIGRlIG5vdm8uICovXG4gICAgcmVwZXRpZGE/OiBib29sZWFuO1xuICAgIGVycm8/OiBVaW55RXJyb0FwaTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVaW55TWV0YUFwaSB7XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBlcl9wYWdlOiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBsYXN0X3BhZ2U6IG51bWJlcjtcbn1cblxuLyoqIFBPU1QgYXBpL3YxL2NvbnZlcnNhcyAoMjAxKSAqL1xuZXhwb3J0IGludGVyZmFjZSBVaW55Q3JpYXJDb252ZXJzYVJlc3BvbnNlIHtcbiAgICBpZF9jb3JyZWxhY2FvPzogc3RyaW5nO1xuICAgIGNvbnZlcnNhOiBVaW55Q29udmVyc2FBcGk7XG59XG5cbi8qKiBHRVQgYXBpL3YxL2NvbnZlcnNhcyAqL1xuZXhwb3J0IGludGVyZmFjZSBVaW55TGlzdGFDb252ZXJzYXNSZXNwb25zZSB7XG4gICAgaWRfY29ycmVsYWNhbz86IHN0cmluZztcbiAgICBkYXRhOiBVaW55Q29udmVyc2FBcGlbXTtcbiAgICBtZXRhOiBVaW55TWV0YUFwaTtcbn1cblxuLyoqIEdFVCBhcGkvdjEvY29udmVyc2FzL3tpZH06IHDDoWdpbmEgbWFpcyByZWNlbnRlLCBlbSBvcmRlbSBjcm9ub2zDs2dpY2EuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlIaXN0b3JpY29SZXNwb25zZSB7XG4gICAgaWRfY29ycmVsYWNhbz86IHN0cmluZztcbiAgICBjb252ZXJzYTogVWlueUNvbnZlcnNhQXBpO1xuICAgIGRhdGE6IFVpbnlNZW5zYWdlbUFwaVtdO1xuICAgIG1ldGE6IFVpbnlNZXRhQXBpO1xufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlueS5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1oZWFkZXIvc3JjL2xpYi9hc3Npc3RhbnQvbW9kZWxzL3VpbnkubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVaW55UmVzcG9zdGFBcGksIFVpbnlTaXN0ZW1hT3JpZ2VtIH0gZnJvbSAnLi91aW55LWFwaS5tb2RlbHMnO1xuXG4vKiogQ29uZmlndXJhw6fDo28gZG8gbcOzZHVsbyAoVWlBc3Npc3RhbnRNb2R1bGUuZm9yUm9vdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlDb25maWcge1xuICAgIC8qKiBTaXN0ZW1hIHF1ZSBob3NwZWRhIG8gY29tcG9uZW50ZS4gVmFpIG5vIGNvbnRleHRvIGRlIHRvZGEgY29udmVyc2EgZSBtZW5zYWdlbS4gKi9cbiAgICBzaXN0ZW1hT3JpZ2VtOiBVaW55U2lzdGVtYU9yaWdlbTtcbiAgICAvKipcbiAgICAgKiBVUkwtYmFzZSBkYSBBUEksIGluY2x1aW5kbyAvYXBpL3YxIChleC46IGh0dHA6Ly9sb2NhbGhvc3Q6ODEwMC9hcGkvdjEpLlxuICAgICAqIFNlIG9taXRpZGEsIHVzYSBBUFBfRU5WSVJPTk1FTlQuZG9tYWluLnVpbnkuXG4gICAgICovXG4gICAgYXBpVXJsPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEltYWdlbSBkbyBhdmF0YXIgZGEgVWlueSwgc2VydmlkYSBwZWxhIGFwbGljYcOnw6NvIGNvbnN1bWlkb3JhLlxuICAgICAqIFBhZHLDo286IGFzc2V0cy9pbWFnZXMvdWlueS9hdmF0YXIuc3ZnLiBTZSBuw6NvIGNhcnJlZ2FyLCBvIHBhaW5lbCBtb3N0cmEgbyDDrWNvbmUgcGFkcsOjby5cbiAgICAgKi9cbiAgICBhdmF0YXJVcmw/OiBzdHJpbmc7XG4gICAgLyoqIExhcmd1cmEgZG8gcGFpbmVsIG5vIGRlc2t0b3AsIGVtIHB4LiBQYWRyw6NvIDM4MCAobGltaXRhZGEgZW50cmUgMzQwIGUgNDAwKS4gKi9cbiAgICBsYXJndXJhUGFpbmVsPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEFiYWl4byBkZXN0YSBsYXJndXJhIGRlIHRlbGEgbyBwYWluZWwgb2N1cGEgYSB0ZWxhIHRvZGEgZSBhIGFwbGljYcOnw6NvIGZpY2FcbiAgICAgKiByZWNvbGhpZGEgYXTDqSBvIHVzdcOhcmlvIHZvbHRhci4gUGFkcsOjbyAxMjAwOiBldml0YSBlc3ByZW1lciBhIGFwbGljYcOnw6NvIGFvIGxhZG8gZG8gcGFpbmVsLlxuICAgICAqL1xuICAgIGxhcmd1cmFNaW5pbWFMYWRvQUxhZG8/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udGV4dG8gaW5mb3JtYWRvIHBlbG8gcHJvamV0byBjb25zdW1pZG9yIChjYW1wb3MgZGUgQ29udGV4dG9UZWxhIG5vIGJhY2tlbmQpLlxuICogw4kgc8OzIHVtYSBpbmRpY2HDp8OjbyBkYSB0ZWxhIGF0dWFsOiBhIGF1dG9yaXphw6fDo28gw6kgc2VtcHJlIGRlY2lkaWRhIHBlbG8gYmFja2VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaW55Q29udGV4dG8ge1xuICAgIC8qKiBJZGVudGlmaWNhZG9yIGN1cnRvIGRhIHRlbGEgYXR1YWwgKGV4LjogXCJsb2phLWxlaWF1dGUvZWRpdGFyXCIpLiBBdMOpIDYwIGNhcmFjdGVyZXMgW2EtejAtOV8tLy5dLiAqL1xuICAgIHRlbGE/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiBMb2phIHNlbGVjaW9uYWRhLiBBIGNvbnZlcnNhIGZpY2EgcmVzdHJpdGEgw6AgbG9qYTsgdHJvY2FyIGEgbG9qYSBlbmNlcnJhIGEgY29udmVyc2EgYXR1YWwuICovXG4gICAgaWRMb2phPzogbnVtYmVyIHwgbnVsbDtcbiAgICBpZExvamFMZWlhdXRlPzogbnVtYmVyIHwgbnVsbDtcbiAgICBpZFRlbWE/OiBudW1iZXIgfCBudWxsO1xuICAgIGlkUHJvZHV0bz86IG51bWJlciB8IG51bGw7XG4gICAgaWRQZWRpZG8/OiBudW1iZXIgfCBudWxsO1xufVxuXG4vKipcbiAqIEV2ZW50b3MgZW1pdGlkb3MgcGFyYSBvIHByb2pldG8gY29uc3VtaWRvciByZWFnaXIgKGF0dWFsaXphciB0ZWxhcywgcmVjYXJyZWdhciBwcsOpdmlhKS5cbiAqIEEgbmF2ZWdhw6fDo28gZSBhIGF0dWFsaXphw6fDo28gc8OjbyBzZW1wcmUgZGVjaWRpZGFzIHBlbG8gY29uc3VtaWRvci5cbiAqL1xuZXhwb3J0IHR5cGUgVWlueUV2ZW50byA9XG4gICAgLyoqIEEgQVBJIGNvbmZpcm1vdSBhIGV4ZWN1w6fDo28gZGUgdW1hIGHDp8OjbyAoc2l0dWHDp8OjbyBcImV4ZWN1dGFkYVwiKS4gKi9cbiAgICB8IHsgdGlwbzogJ2FjYW9fY29uY2x1aWRhJzsgaWRBY2FvOiBzdHJpbmc7IGZlcnJhbWVudGE6IHN0cmluZyB9XG4gICAgLyoqIEluc3RydcOnw6NvIFwiYXR1YWxpemFyX3ByZXZpZXdfdGVtYVwiOiBvIGxlaWF1dGUgbXVkb3UgZSBhIHByw6l2aWEgZGV2ZSBzZXIgcmVjYXJyZWdhZGEuICovXG4gICAgfCB7IHRpcG86ICd0ZW1hX2F0dWFsaXphZG8nOyBpZExvamFMZWlhdXRlOiBudW1iZXIgfTtcblxuZXhwb3J0IHR5cGUgVWlueVRpcG9FdmVudG8gPSBVaW55RXZlbnRvWyd0aXBvJ107XG5cbi8qIC0tLS0tLS0tLS0gbW9kZWxvcyBkZSB0ZWxhIChub3JtYWxpemFkb3MgYSBwYXJ0aXIgZGEgQVBJKSAtLS0tLS0tLS0tICovXG5cbmV4cG9ydCB0eXBlIFVpbnlQYXBlbCA9ICd1c3VhcmlvJyB8ICdhc3Npc3RlbnRlJztcblxuZXhwb3J0IHR5cGUgVWlueUVzdGFkb0FjYW8gPVxuICAgIHwgJ3BlbmRlbnRlJ1xuICAgIHwgJ2V4ZWN1dGFuZG8nXG4gICAgfCAnY29uY2x1aWRhJ1xuICAgIHwgJ2NhbmNlbGFkYSdcbiAgICB8ICdleHBpcmFkYSdcbiAgICB8ICdpbnZhbGlkYWRhJ1xuICAgIHwgJ2ZhbGhhJ1xuICAgIC8qKiBPIHJlc3VsdGFkbyBwcmVjaXNhIHNlciBjb25mZXJpZG8gbm8gc2lzdGVtYSAoNTA0IGRvIGJhY2tlbmQgb3Ugc2VtIHJlc3Bvc3RhIGFww7NzIGNvbmZpcm1hcikuICovXG4gICAgfCAnaW5kZXRlcm1pbmFkYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVWlueUFjYW8ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmVycmFtZW50YTogc3RyaW5nO1xuICAgIHJlc3Vtbzogc3RyaW5nO1xuICAgIC8qKiBQYXJlcyByw7N0dWxvL3ZhbG9yIGV4dHJhw61kb3MgZGUgXCJkZXRhbGhlc1wiLCBzw7MgY29tIHZhbG9yZXMgcHJpbWl0aXZvcy4gKi9cbiAgICBkZXRhbGhlczogeyByb3R1bG86IHN0cmluZzsgdmFsb3I6IHN0cmluZyB9W107XG4gICAgZXN0YWRvOiBVaW55RXN0YWRvQWNhbztcbiAgICBleHBpcmFFbTogRGF0ZSB8IG51bGw7XG4gICAgLyoqIFVtYSByZXF1aXNpw6fDo28gZGUgY29uZmlybWFyL2NhbmNlbGFyL3ZlcmlmaWNhciBlc3TDoSBlbSBhbmRhbWVudG8uICovXG4gICAgZW52aWFuZG8/OiBib29sZWFuO1xuICAgIC8qKiBNZW5zYWdlbSBkbyBzZXJ2aWRvciBvdSBkZSBlcnJvLCBtb3N0cmFkYSBubyBjYXJkLiAqL1xuICAgIGF2aXNvPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVaW55TWVuc2FnZW0ge1xuICAgIC8qKiBVVUlEIGRvIGJhY2tlbmQsIG91IFwibG9jYWwtTlwiIHBhcmEgYSBtZW5zYWdlbSBvdGltaXN0YSBkbyB1c3XDoXJpby4gKi9cbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcGVsOiBVaW55UGFwZWw7XG4gICAgLyoqIGVzdGFkbyBkYSBtZW5zYWdlbSBubyBiYWNrZW5kIChyZXNwb3N0YSwgZXNjbGFyZWNpbWVudG8sIGFndWFyZGFuZG9fY29uZmlybWFjYW8uLi4pLiAqL1xuICAgIGVzdGFkbzogc3RyaW5nIHwgbnVsbDtcbiAgICB0ZXh0bzogc3RyaW5nO1xuICAgIGlkQWNhbzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogT3DDp8O1ZXMgZG8gYmxvY28gXCJvcGNvZXNcIiAoZXNjbGFyZWNpbWVudG8pOiB2aXJhbSBib3TDtWVzIHF1ZSBlbnZpYW0gbyB0ZXh0by4gKi9cbiAgICBvcGNvZXM6IHN0cmluZ1tdO1xuICAgIGNyaWFkYUVtOiBEYXRlIHwgbnVsbDtcbiAgICAvKiogTWVuc2FnZW0gbG9jYWwgcXVlIGZhbGhvdSBubyBlbnZpby4gKi9cbiAgICBlcnJvPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVaW55Q29udmVyc2FSZXN1bW8ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGl0dWxvOiBzdHJpbmcgfCBudWxsO1xuICAgIHNpc3RlbWFPcmlnZW06IFVpbnlTaXN0ZW1hT3JpZ2VtO1xuICAgIGlkTG9qYTogbnVtYmVyIHwgbnVsbDtcbiAgICBhdHVhbGl6YWRhRW06IERhdGUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVpbnlFcnJvIHtcbiAgICB0aXBvOiAnc2Vzc2FvJyB8ICdyZWRlJyB8ICd0aW1lb3V0JyB8ICdjb25mbGl0bycgfCAnbmFvX2VuY29udHJhZG8nIHwgJ2ludmFsaWRvJyB8ICdsaW1pdGUnIHwgJ3NlcnZpZG9yJyB8ICdjb25maWd1cmFjYW8nO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIGNvZGlnbzogc3RyaW5nIHwgbnVsbDtcbiAgICBtZW5zYWdlbTogc3RyaW5nO1xuICAgIGNvcnJlbGFjYW86IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIENvcnBvIGRvIGVycm8sIHF1YW5kbyBhIEFQSSBkZXZvbHZlIGRhZG9zIGp1bnRvIChleC46IGNvbmZpcm1hw6fDo28gY29tIGFjYW9fcGVuZGVudGUpLiAqL1xuICAgIGNvcnBvPzogVWlueVJlc3Bvc3RhQXBpIHwgbnVsbDtcbn1cbiJdfQ==