@enegelai/bot-widget 1.16.3 → 1.16.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/enegelaibot.umd.js +480 -467
- package/dist/index.es.js +707 -661
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { css as J, LitElement as Fe, html as u, nothing as Ae, svg as me } from "lit";
|
|
2
2
|
import { property as x, customElement as K, query as xe, state as Ha, queryAll as Va, eventOptions as sa } from "lit/decorators.js";
|
|
3
|
-
import { unsafeHTML as Y } from "lit-html/directives/unsafe-html.js";
|
|
4
3
|
import { when as W } from "lit/directives/when.js";
|
|
5
|
-
import {
|
|
4
|
+
import { unsafeHTML as Y } from "lit-html/directives/unsafe-html.js";
|
|
5
|
+
import { registerIconLibrary as Oi } from "@shoelace-style/shoelace";
|
|
6
6
|
import "@shoelace-style/shoelace/dist/components/button/button.js";
|
|
7
7
|
import "@shoelace-style/shoelace/dist/components/avatar/avatar.js";
|
|
8
8
|
import "@shoelace-style/shoelace/dist/components/input/input.js";
|
|
@@ -23,12 +23,12 @@ import "@shoelace-style/shoelace/dist/components/progress-bar/progress-bar.js";
|
|
|
23
23
|
import "@shoelace-style/shoelace/dist/components/badge/badge.js";
|
|
24
24
|
import { repeat as et } from "lit/directives/repeat.js";
|
|
25
25
|
import { until as Xt } from "lit-html/directives/until.js";
|
|
26
|
-
import
|
|
27
|
-
import
|
|
26
|
+
import qi from "markdown-it";
|
|
27
|
+
import Di from "markdown-it-link-attributes";
|
|
28
28
|
import Ut from "highlight.js";
|
|
29
29
|
import "@shoelace-style/shoelace/dist/components/popup/popup.js";
|
|
30
30
|
import "@shoelace-style/shoelace/dist/components/rating/rating.js";
|
|
31
|
-
import { createRef as
|
|
31
|
+
import { createRef as Fi, ref as At } from "lit/directives/ref.js";
|
|
32
32
|
function Ua(a) {
|
|
33
33
|
return typeof a == "function" ? a() : a;
|
|
34
34
|
}
|
|
@@ -45,7 +45,7 @@ const jt = class jt extends Event {
|
|
|
45
45
|
};
|
|
46
46
|
jt.eventName = "lit-state-changed";
|
|
47
47
|
let at = jt;
|
|
48
|
-
const
|
|
48
|
+
const ji = (a, e) => e !== a && (e === e || a === a), ha = class ha extends EventTarget {
|
|
49
49
|
static initPropertyMap() {
|
|
50
50
|
this.propertyMap || (this.propertyMap = /* @__PURE__ */ new Map());
|
|
51
51
|
}
|
|
@@ -78,7 +78,7 @@ const Di = (a, e) => e !== a && (e === e || a === a), ha = class ha extends Even
|
|
|
78
78
|
Object.defineProperty(this.prototype, e, s);
|
|
79
79
|
}
|
|
80
80
|
static getPropertyDescriptor(e, t, i) {
|
|
81
|
-
const s = i?.hasChanged ||
|
|
81
|
+
const s = i?.hasChanged || ji;
|
|
82
82
|
return {
|
|
83
83
|
get() {
|
|
84
84
|
return this[t];
|
|
@@ -132,7 +132,7 @@ class it {
|
|
|
132
132
|
this.state.removeEventListener(at.eventName, this.callback);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
-
function
|
|
135
|
+
function z(a) {
|
|
136
136
|
return (e, t) => {
|
|
137
137
|
if (Object.getOwnPropertyDescriptor(e, t))
|
|
138
138
|
throw new Error("@property must be called before all state decorators");
|
|
@@ -146,7 +146,7 @@ function O(a) {
|
|
|
146
146
|
}), i.createProperty(t, a), s ? Object.getOwnPropertyDescriptor(e, t) : void 0;
|
|
147
147
|
};
|
|
148
148
|
}
|
|
149
|
-
function
|
|
149
|
+
function Hi(a, e) {
|
|
150
150
|
if (a !== null && (e === Boolean || e === Number || e === Array || e === Object))
|
|
151
151
|
try {
|
|
152
152
|
a = JSON.parse(a);
|
|
@@ -156,18 +156,18 @@ function Fi(a, e) {
|
|
|
156
156
|
return a;
|
|
157
157
|
}
|
|
158
158
|
new URL(location.href);
|
|
159
|
-
const
|
|
159
|
+
const Vi = {
|
|
160
160
|
prefix: "_ls"
|
|
161
161
|
};
|
|
162
|
-
function
|
|
163
|
-
return a = { ...
|
|
162
|
+
function ce(a) {
|
|
163
|
+
return a = { ...Vi, ...a }, (e, t) => {
|
|
164
164
|
const i = Object.getOwnPropertyDescriptor(e, t);
|
|
165
165
|
if (!i)
|
|
166
166
|
throw new Error("@local-storage decorator need to be called after @property");
|
|
167
167
|
const s = `${a?.prefix || ""}_${a?.key || String(t)}`, r = e.constructor, o = r.propertyMap.get(t), f = o?.type;
|
|
168
168
|
if (o) {
|
|
169
169
|
const w = o.initialValue;
|
|
170
|
-
o.initialValue = () =>
|
|
170
|
+
o.initialValue = () => Hi(localStorage.getItem(s), f) ?? Ua(w), r.propertyMap.set(t, { ...o, ...a });
|
|
171
171
|
}
|
|
172
172
|
const p = i?.set, k = {
|
|
173
173
|
...i,
|
|
@@ -181,12 +181,12 @@ function fe(a) {
|
|
|
181
181
|
function Na(a) {
|
|
182
182
|
return a && a.__esModule && Object.prototype.hasOwnProperty.call(a, "default") ? a.default : a;
|
|
183
183
|
}
|
|
184
|
-
var Pt = { exports: {} },
|
|
185
|
-
function
|
|
184
|
+
var Pt = { exports: {} }, Ui = Pt.exports, ka;
|
|
185
|
+
function Ni() {
|
|
186
186
|
return ka || (ka = 1, (function(a) {
|
|
187
187
|
(function(e, t) {
|
|
188
188
|
a.exports ? a.exports = t() : e.log = t();
|
|
189
|
-
})(
|
|
189
|
+
})(Ui, function() {
|
|
190
190
|
var e = function() {
|
|
191
191
|
}, t = "undefined", i = typeof window !== t && typeof window.navigator !== t && /Trident\/|MSIE /.test(window.navigator.userAgent), s = [
|
|
192
192
|
"trace",
|
|
@@ -329,8 +329,8 @@ function Vi() {
|
|
|
329
329
|
});
|
|
330
330
|
})(Pt)), Pt.exports;
|
|
331
331
|
}
|
|
332
|
-
var
|
|
333
|
-
const Je = /* @__PURE__ */ Na(
|
|
332
|
+
var Wi = Ni();
|
|
333
|
+
const Je = /* @__PURE__ */ Na(Wi), Gi = J`
|
|
334
334
|
:host {
|
|
335
335
|
--enegelai-bot-width: 420px;
|
|
336
336
|
--enegelai-bot-base-font-size: 16px;
|
|
@@ -385,6 +385,14 @@ const Je = /* @__PURE__ */ Na(Ui), Ni = J`
|
|
|
385
385
|
--symbol-size: 1.2em;
|
|
386
386
|
}
|
|
387
387
|
|
|
388
|
+
.cb-new-conversation-wrapper {
|
|
389
|
+
width: 100%;
|
|
390
|
+
display: flex;
|
|
391
|
+
align-items: center;
|
|
392
|
+
justify-content: center;
|
|
393
|
+
margin: 10px 0px;
|
|
394
|
+
}
|
|
395
|
+
|
|
388
396
|
@keyframes fadeIn {
|
|
389
397
|
from {
|
|
390
398
|
opacity: 0;
|
|
@@ -655,10 +663,10 @@ const Je = /* @__PURE__ */ Na(Ui), Ni = J`
|
|
|
655
663
|
color: white;
|
|
656
664
|
}
|
|
657
665
|
`;
|
|
658
|
-
var
|
|
659
|
-
for (var s = i > 1 ? void 0 : i ?
|
|
666
|
+
var Xi = Object.defineProperty, Yi = Object.getOwnPropertyDescriptor, na = (a, e, t, i) => {
|
|
667
|
+
for (var s = i > 1 ? void 0 : i ? Yi(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
660
668
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
661
|
-
return i && s &&
|
|
669
|
+
return i && s && Xi(e, t, s), s;
|
|
662
670
|
};
|
|
663
671
|
let ut = class extends Fe {
|
|
664
672
|
constructor() {
|
|
@@ -678,7 +686,7 @@ na([
|
|
|
678
686
|
ut = na([
|
|
679
687
|
K("cb-icon")
|
|
680
688
|
], ut);
|
|
681
|
-
let
|
|
689
|
+
let Ji = (a) => crypto.getRandomValues(new Uint8Array(a)), Ki = (a, e, t) => {
|
|
682
690
|
let i = (2 << Math.log2(a.length - 1)) - 1, s = -~(1.6 * i * e / a.length);
|
|
683
691
|
return (r = e) => {
|
|
684
692
|
let o = "";
|
|
@@ -688,12 +696,12 @@ let Xi = (a) => crypto.getRandomValues(new Uint8Array(a)), Yi = (a, e, t) => {
|
|
|
688
696
|
if (o += a[f[p] & i] || "", o.length >= r) return o;
|
|
689
697
|
}
|
|
690
698
|
};
|
|
691
|
-
},
|
|
692
|
-
const
|
|
693
|
-
function
|
|
694
|
-
return
|
|
699
|
+
}, Zi = (a, e = 21) => Ki(a, e | 0, Ji);
|
|
700
|
+
const Qi = Zi("1234567890abcdefghijklmnopqrstuvwxyz", 10);
|
|
701
|
+
function fe(a = 10) {
|
|
702
|
+
return Qi(a);
|
|
695
703
|
}
|
|
696
|
-
function
|
|
704
|
+
function es(a) {
|
|
697
705
|
return new Promise((e, t) => {
|
|
698
706
|
try {
|
|
699
707
|
navigator.clipboard.writeText(a).then(() => {
|
|
@@ -704,19 +712,19 @@ function Zi(a) {
|
|
|
704
712
|
}
|
|
705
713
|
});
|
|
706
714
|
}
|
|
707
|
-
function Ga(a = !0) {
|
|
708
|
-
return new Promise((
|
|
709
|
-
const
|
|
710
|
-
|
|
711
|
-
const
|
|
712
|
-
|
|
713
|
-
}),
|
|
715
|
+
function Ga(a = !0, e = null) {
|
|
716
|
+
return new Promise((t) => {
|
|
717
|
+
const i = document.createElement("input");
|
|
718
|
+
i.type = "file", a && (i.multiple = !0), i.accept = e || ".jpeg,.jpg,.png,.pdf,.txt,.har,.zip,.mov,.mp4,.mp3", i.style.display = "none", i.addEventListener("change", () => {
|
|
719
|
+
const s = Array.prototype.slice.call(i.files);
|
|
720
|
+
t(s);
|
|
721
|
+
}), i.click();
|
|
714
722
|
});
|
|
715
723
|
}
|
|
716
724
|
const se = Je.noConflict();
|
|
717
725
|
se.setLevel("info");
|
|
718
726
|
const _a = 3e4;
|
|
719
|
-
class
|
|
727
|
+
class ts {
|
|
720
728
|
constructor(e = {}) {
|
|
721
729
|
this.id = 0, this.url = e?.url || null, this.orgId = e?.orgId || null, this.botId = e?.botId || null, this.convId = e?.convId || null, this._options = e || {}, this._ws = null, this.started = !1, this.connected = !1, this.connecting = !1, this.suspendDetected = !1, this.onMessage = e?.onMessage || null, this.onConnecting = e?.onConnecting || null, this.onConnectError = e?.onConnectError || null, this.onClose = e?.onClose || null, this.queue = e?.queue || [], this.pause = (t) => new Promise((i) => setTimeout(i, t)), this.lastTickTs = 0, this.lastAckTs = 0, this.tickInterval = null, se.info(`WSC: Created, url: ${this.url}`);
|
|
722
730
|
}
|
|
@@ -776,7 +784,7 @@ class Qi {
|
|
|
776
784
|
this.connecting !== e && (this.connecting = e, this.onConnecting && typeof this.onConnecting == "function" && this.onConnecting(this.connecting));
|
|
777
785
|
}
|
|
778
786
|
pingConnection() {
|
|
779
|
-
this._ws && this._ws.readyState === WebSocket.OPEN && this._ws.send(JSON.stringify({ type: "heartbeat", id:
|
|
787
|
+
this._ws && this._ws.readyState === WebSocket.OPEN && this._ws.send(JSON.stringify({ type: "heartbeat", id: fe() }));
|
|
780
788
|
}
|
|
781
789
|
tick() {
|
|
782
790
|
this.pingConnection(), this.lastTickTs = Date.now();
|
|
@@ -811,7 +819,7 @@ class Qi {
|
|
|
811
819
|
sendClientInfoMessage() {
|
|
812
820
|
const e = {
|
|
813
821
|
type: "clientInfo",
|
|
814
|
-
id:
|
|
822
|
+
id: fe(),
|
|
815
823
|
data: {
|
|
816
824
|
referrer: window.location.href,
|
|
817
825
|
userAgent: window.navigator.userAgent
|
|
@@ -877,7 +885,7 @@ class Qi {
|
|
|
877
885
|
});
|
|
878
886
|
}*/
|
|
879
887
|
}
|
|
880
|
-
class
|
|
888
|
+
class as {
|
|
881
889
|
constructor(e = {}) {
|
|
882
890
|
this.name = e.name || "EventEmitter", this.events = {};
|
|
883
891
|
}
|
|
@@ -1024,7 +1032,7 @@ const Sa = [
|
|
|
1024
1032
|
7040,
|
|
1025
1033
|
7458.62,
|
|
1026
1034
|
7902.13
|
|
1027
|
-
],
|
|
1035
|
+
], is = [
|
|
1028
1036
|
"C",
|
|
1029
1037
|
"C#",
|
|
1030
1038
|
"D",
|
|
@@ -1041,9 +1049,9 @@ const Sa = [
|
|
|
1041
1049
|
for (let a = 1; a <= 8; a++)
|
|
1042
1050
|
for (let e = 0; e < Sa.length; e++) {
|
|
1043
1051
|
const t = Sa[e];
|
|
1044
|
-
We.push(t / Math.pow(2, 8 - a)), ra.push(
|
|
1052
|
+
We.push(t / Math.pow(2, 8 - a)), ra.push(is[e] + a);
|
|
1045
1053
|
}
|
|
1046
|
-
const Rt = [32, 2e3], Ca = We.filter((a, e) => We[e] > Rt[0] && We[e] < Rt[1]),
|
|
1054
|
+
const Rt = [32, 2e3], Ca = We.filter((a, e) => We[e] > Rt[0] && We[e] < Rt[1]), ss = ra.filter((a, e) => We[e] > Rt[0] && We[e] < Rt[1]);
|
|
1047
1055
|
class lt {
|
|
1048
1056
|
/**
|
|
1049
1057
|
* Retrieves frequency domain data from an AnalyserNode adjusted to a decibel range
|
|
@@ -1070,7 +1078,7 @@ class lt {
|
|
|
1070
1078
|
break;
|
|
1071
1079
|
}
|
|
1072
1080
|
}
|
|
1073
|
-
v = M, k = s === "voice" ? Ca : We, w = s === "voice" ?
|
|
1081
|
+
v = M, k = s === "voice" ? Ca : We, w = s === "voice" ? ss : ra;
|
|
1074
1082
|
} else
|
|
1075
1083
|
v = Array.from(i), k = v.map((I, M) => p * M), w = k.map((I) => `${I.toFixed(2)} Hz`);
|
|
1076
1084
|
const _ = v.map((I) => Math.max(
|
|
@@ -1146,7 +1154,7 @@ class lt {
|
|
|
1146
1154
|
}
|
|
1147
1155
|
}
|
|
1148
1156
|
globalThis.AudioAnalysis = lt;
|
|
1149
|
-
const
|
|
1157
|
+
const ns = `
|
|
1150
1158
|
class StreamProcessor extends AudioWorkletProcessor {
|
|
1151
1159
|
constructor() {
|
|
1152
1160
|
super();
|
|
@@ -1235,17 +1243,17 @@ class StreamProcessor extends AudioWorkletProcessor {
|
|
|
1235
1243
|
}
|
|
1236
1244
|
|
|
1237
1245
|
registerProcessor('stream_processor', StreamProcessor);
|
|
1238
|
-
`,
|
|
1246
|
+
`, rs = new Blob([ns], {
|
|
1239
1247
|
type: "application/javascript"
|
|
1240
|
-
}),
|
|
1241
|
-
class
|
|
1248
|
+
}), os = URL.createObjectURL(rs), cs = os;
|
|
1249
|
+
class ls {
|
|
1242
1250
|
/**
|
|
1243
1251
|
* Creates a new WavStreamPlayer instance
|
|
1244
1252
|
* @param {{sampleRate?: number}} options
|
|
1245
1253
|
* @returns {WavStreamPlayer}
|
|
1246
1254
|
*/
|
|
1247
1255
|
constructor({ sampleRate: e = 44100, onPlaybackEnded: t = null } = {}) {
|
|
1248
|
-
this.scriptSrc =
|
|
1256
|
+
this.scriptSrc = cs, this.sampleRate = e, this.context = null, this.stream = null, this.analyser = null, this.trackSampleOffsets = {}, this.interruptedTrackIds = {}, this.onPlaybackEnded = t && typeof t == "function" ? t : null;
|
|
1249
1257
|
}
|
|
1250
1258
|
/**
|
|
1251
1259
|
* Connects the audio context and enables output to speakers
|
|
@@ -1340,8 +1348,8 @@ class os {
|
|
|
1340
1348
|
return this.getTrackSampleOffset(!0);
|
|
1341
1349
|
}
|
|
1342
1350
|
}
|
|
1343
|
-
globalThis.WavStreamPlayer =
|
|
1344
|
-
const
|
|
1351
|
+
globalThis.WavStreamPlayer = ls;
|
|
1352
|
+
const ds = URL.createObjectURL(
|
|
1345
1353
|
new Blob([`
|
|
1346
1354
|
class UpsampleStreamPCM extends AudioWorkletProcessor {
|
|
1347
1355
|
constructor(options) {
|
|
@@ -1558,7 +1566,7 @@ class Xa {
|
|
|
1558
1566
|
/** Build the WebAudio graph. Always audible via direct path; loopback ref is optional and non-critical. */
|
|
1559
1567
|
async connect() {
|
|
1560
1568
|
if (this.context) return !0;
|
|
1561
|
-
if (this.context = new (window.AudioContext || window.webkitAudioContext)({ latencyHint: "interactive" }), this.context.state === "suspended" && await this.context.resume(), await this.context.audioWorklet.addModule(
|
|
1569
|
+
if (this.context = new (window.AudioContext || window.webkitAudioContext)({ latencyHint: "interactive" }), this.context.state === "suspended" && await this.context.resume(), await this.context.audioWorklet.addModule(ds), this._worklet = new AudioWorkletNode(this.context, "upsample-stream-pcm", {
|
|
1562
1570
|
processorOptions: {
|
|
1563
1571
|
sourceSampleRate: this.inputSampleRate,
|
|
1564
1572
|
prerollSrc: Math.round(this.inputSampleRate * 0.02)
|
|
@@ -1687,7 +1695,7 @@ class Xa {
|
|
|
1687
1695
|
}
|
|
1688
1696
|
}
|
|
1689
1697
|
globalThis.WavStreamPlayerV2 = Xa;
|
|
1690
|
-
const
|
|
1698
|
+
const fs = `
|
|
1691
1699
|
class AudioProcessor extends AudioWorkletProcessor {
|
|
1692
1700
|
|
|
1693
1701
|
constructor() {
|
|
@@ -1894,17 +1902,17 @@ class AudioProcessor extends AudioWorkletProcessor {
|
|
|
1894
1902
|
}
|
|
1895
1903
|
|
|
1896
1904
|
registerProcessor('audio_processor', AudioProcessor);
|
|
1897
|
-
`,
|
|
1905
|
+
`, hs = new Blob([fs], {
|
|
1898
1906
|
type: "application/javascript"
|
|
1899
|
-
}),
|
|
1900
|
-
class
|
|
1907
|
+
}), bs = URL.createObjectURL(hs), us = bs;
|
|
1908
|
+
class ps {
|
|
1901
1909
|
/**
|
|
1902
1910
|
* Create a new WavRecorder instance
|
|
1903
1911
|
* @param {{sampleRate?: number, outputToSpeakers?: boolean, debug?: boolean}} [options]
|
|
1904
1912
|
* @returns {WavRecorder}
|
|
1905
1913
|
*/
|
|
1906
1914
|
constructor({ sampleRate: e = 44100, outputToSpeakers: t = !1, debug: i = !1 } = {}) {
|
|
1907
|
-
this.scriptSrc =
|
|
1915
|
+
this.scriptSrc = us, this.sampleRate = e, this.outputToSpeakers = t, this.debug = !!i, this._deviceChangeCallback = null, this._devices = [], this.stream = null, this.processor = null, this.source = null, this.node = null, this.recording = !1, this._lastEventId = 0, this.eventReceipts = {}, this.eventTimeout = 5e3, this._chunkProcessor = () => {
|
|
1908
1916
|
}, this._chunkProcessorSize = void 0, this._chunkProcessorBuffer = {
|
|
1909
1917
|
raw: new ArrayBuffer(0),
|
|
1910
1918
|
mono: new ArrayBuffer(0)
|
|
@@ -2233,8 +2241,8 @@ use only for debugging`), o.connect(t.destination)), this.source = i, this.node
|
|
|
2233
2241
|
return this.listenForDeviceChange(null), this.processor && await this.end(), !0;
|
|
2234
2242
|
}
|
|
2235
2243
|
}
|
|
2236
|
-
globalThis.WavRecorder =
|
|
2237
|
-
const
|
|
2244
|
+
globalThis.WavRecorder = ps;
|
|
2245
|
+
const gs = URL.createObjectURL(
|
|
2238
2246
|
new Blob([`
|
|
2239
2247
|
class DownsampleRecorder extends AudioWorkletProcessor {
|
|
2240
2248
|
constructor(options) {
|
|
@@ -2455,7 +2463,7 @@ class ot {
|
|
|
2455
2463
|
echoCancellationType: this.captureInfo.trackSettings?.echoCancellationType ?? null
|
|
2456
2464
|
}, this._log("Granted track settings:", this.captureInfo.trackSettings), this.audioCtx = new (window.AudioContext || window.webkitAudioContext)({
|
|
2457
2465
|
latencyHint: "interactive"
|
|
2458
|
-
}), this.captureInfo.contextSampleRate = this.audioCtx.sampleRate, this.source = this.audioCtx.createMediaStreamSource(this.stream), await this.audioCtx.audioWorklet.addModule(
|
|
2466
|
+
}), this.captureInfo.contextSampleRate = this.audioCtx.sampleRate, this.source = this.audioCtx.createMediaStreamSource(this.stream), await this.audioCtx.audioWorklet.addModule(gs);
|
|
2459
2467
|
const s = Math.round(this.targetSampleRate * this.chunkMs / 1e3);
|
|
2460
2468
|
return this.node = new AudioWorkletNode(this.audioCtx, "downsample-recorder", {
|
|
2461
2469
|
processorOptions: {
|
|
@@ -2531,7 +2539,7 @@ class ot {
|
|
|
2531
2539
|
}
|
|
2532
2540
|
}
|
|
2533
2541
|
globalThis.WavRecorderV2 = ot;
|
|
2534
|
-
class
|
|
2542
|
+
class ms {
|
|
2535
2543
|
constructor(e = {}) {
|
|
2536
2544
|
this.sr = Math.max(8e3, e.sampleRate || 24e3), this.floor = Aa(e.floor ?? 0.12), this.attackSamples = Ce(e.attackMs ?? 12, this.sr), this.releaseSamples = Ce(e.releaseMs ?? 150, this.sr), this.escapeAttackSamples = Ce(e.escapeAttackMs ?? 10, this.sr), this.defaultGuardSamples = Ce(e.defaultGuardMs ?? 0, this.sr), this.gain = 1, this.target = 1, this.rampRemain = 0, this._step = 0, this.duckActive = !1, this.guardRemain = 0, this.vadEnabled = e.vadEnabled !== !1;
|
|
2537
2545
|
const t = Math.max(2, e.vadFastMs ?? 10), i = Math.max(t + 20, e.vadSlowMs ?? 250);
|
|
@@ -2604,7 +2612,7 @@ function Ta(a, e) {
|
|
|
2604
2612
|
const t = Math.max(1, a * e / 1e3);
|
|
2605
2613
|
return Math.exp(-1 / t);
|
|
2606
2614
|
}
|
|
2607
|
-
class
|
|
2615
|
+
class ys {
|
|
2608
2616
|
/**
|
|
2609
2617
|
* @param {object} opts
|
|
2610
2618
|
* @param {number} opts.sampleRate - Hz of your PCM (e.g., 24000)
|
|
@@ -2759,7 +2767,7 @@ class gs {
|
|
|
2759
2767
|
return o;
|
|
2760
2768
|
}
|
|
2761
2769
|
}
|
|
2762
|
-
class
|
|
2770
|
+
class vs {
|
|
2763
2771
|
/**
|
|
2764
2772
|
* @param {object} opts
|
|
2765
2773
|
* @param {number} opts.sampleRate - PCM sample rate (e.g., 24000)
|
|
@@ -2896,7 +2904,7 @@ class ms {
|
|
|
2896
2904
|
return o;
|
|
2897
2905
|
}
|
|
2898
2906
|
}
|
|
2899
|
-
class
|
|
2907
|
+
class ws {
|
|
2900
2908
|
/**
|
|
2901
2909
|
* @param {object} opts
|
|
2902
2910
|
* @param {number} opts.sampleRate - Mic PCM sample rate (e.g., 24000)
|
|
@@ -2941,7 +2949,7 @@ class ys {
|
|
|
2941
2949
|
}
|
|
2942
2950
|
const Ne = Je.noConflict();
|
|
2943
2951
|
Ne.setLevel("info");
|
|
2944
|
-
class pt extends
|
|
2952
|
+
class pt extends as {
|
|
2945
2953
|
constructor(e = {}) {
|
|
2946
2954
|
super({ name: "WebAudioProcessorV2" }), this.options = e, this.muted = !1, this.audioRecorder = new ot({
|
|
2947
2955
|
targetSampleRate: 24e3,
|
|
@@ -2953,14 +2961,14 @@ class pt extends es {
|
|
|
2953
2961
|
primeMs: 200,
|
|
2954
2962
|
// keep or remove; it’s harmless
|
|
2955
2963
|
debug: !!e.debug
|
|
2956
|
-
}), this.audioRecorderAnalyzer = null, this.audioPlayerAnalyzer = null, this.firstTurnDropMs = e.firstTurnDropMs ?? 1500, this.firstTurnGate = new
|
|
2964
|
+
}), this.audioRecorderAnalyzer = null, this.audioPlayerAnalyzer = null, this.firstTurnDropMs = e.firstTurnDropMs ?? 1500, this.firstTurnGate = new ws({
|
|
2957
2965
|
sampleRate: 24e3,
|
|
2958
2966
|
windowMs: this.firstTurnDropMs,
|
|
2959
2967
|
partialPass: !0,
|
|
2960
2968
|
// pass remainder of crossing frame
|
|
2961
2969
|
hardDrop: !0
|
|
2962
2970
|
// set true if you prefer simpler "drop whole frame"
|
|
2963
|
-
}), this.ducker = new
|
|
2971
|
+
}), this.ducker = new ms({
|
|
2964
2972
|
sampleRate: 24e3,
|
|
2965
2973
|
floor: 0.12,
|
|
2966
2974
|
attackMs: 12,
|
|
@@ -2975,7 +2983,7 @@ class pt extends es {
|
|
|
2975
2983
|
vadSlowMs: 250,
|
|
2976
2984
|
vadAttackMs: 18,
|
|
2977
2985
|
vadHangMs: 120
|
|
2978
|
-
}), this.mixMinus = new
|
|
2986
|
+
}), this.mixMinus = new ys({
|
|
2979
2987
|
sampleRate: 24e3,
|
|
2980
2988
|
bufferMs: 1e3,
|
|
2981
2989
|
threshold: 0.3,
|
|
@@ -2984,7 +2992,7 @@ class pt extends es {
|
|
|
2984
2992
|
hop: 64,
|
|
2985
2993
|
downsampleFactor: 3,
|
|
2986
2994
|
minCorrLenMs: 15
|
|
2987
|
-
}), this.mixMinusSmooth = new
|
|
2995
|
+
}), this.mixMinusSmooth = new vs({
|
|
2988
2996
|
sampleRate: 24e3,
|
|
2989
2997
|
bufferMs: 800,
|
|
2990
2998
|
lowThresh: 0.25,
|
|
@@ -3159,6 +3167,220 @@ class pt extends es {
|
|
|
3159
3167
|
}
|
|
3160
3168
|
}
|
|
3161
3169
|
globalThis.WebAudioProcessorV2 = pt;
|
|
3170
|
+
var xs = Object.defineProperty, ks = Object.getOwnPropertyDescriptor, st = (a, e, t, i) => {
|
|
3171
|
+
for (var s = i > 1 ? void 0 : i ? ks(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
3172
|
+
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
3173
|
+
return i && s && xs(e, t, s), s;
|
|
3174
|
+
};
|
|
3175
|
+
const Mt = "cb-toast-outlet", Ia = "cb-toast-outlet-style";
|
|
3176
|
+
function _s() {
|
|
3177
|
+
let a = document.getElementById(Mt);
|
|
3178
|
+
if (a || (a = document.createElement("div"), a.id = Mt, document.body.appendChild(a)), !document.getElementById(Ia)) {
|
|
3179
|
+
const e = document.createElement("style");
|
|
3180
|
+
e.id = Ia, e.textContent = `
|
|
3181
|
+
/* Global outlet that holds all toasts */
|
|
3182
|
+
#${Mt} {
|
|
3183
|
+
position: fixed;
|
|
3184
|
+
right: 40px;
|
|
3185
|
+
bottom: 55px;
|
|
3186
|
+
display: flex;
|
|
3187
|
+
flex-direction: column;
|
|
3188
|
+
gap: 10px;
|
|
3189
|
+
z-index: 2147483646; /* below very-top overlays if any */
|
|
3190
|
+
align-items: flex-end;
|
|
3191
|
+
pointer-events: none; /* clicks pass through except on toast itself */
|
|
3192
|
+
}
|
|
3193
|
+
@media (max-width: 600px) {
|
|
3194
|
+
#${Mt} {
|
|
3195
|
+
left: 8px;
|
|
3196
|
+
right: 8px;
|
|
3197
|
+
align-items: stretch; /* stretch toasts to full width on mobile */
|
|
3198
|
+
}
|
|
3199
|
+
}
|
|
3200
|
+
`, document.head.appendChild(e);
|
|
3201
|
+
}
|
|
3202
|
+
return a;
|
|
3203
|
+
}
|
|
3204
|
+
function Ya(a) {
|
|
3205
|
+
const e = _s(), t = document.createElement("cb-toast");
|
|
3206
|
+
return t.message = a.message, t.variant = a.variant ?? "success", t.duration = typeof a.duration == "number" ? a.duration : 3e3, t.closeable = !!a.closeable, t.icon = a.icon ?? "", t.ariaLive = a.ariaLive ?? "polite", e.appendChild(t), t;
|
|
3207
|
+
}
|
|
3208
|
+
let qe = class extends Fe {
|
|
3209
|
+
constructor() {
|
|
3210
|
+
super(...arguments), this.message = "", this.variant = "success", this.duration = 3e3, this.closeable = !1, this.icon = "", this.ariaLive = "polite", this._open = !1, this._closing = !1, this._defaultIcons = {
|
|
3211
|
+
success: "✓",
|
|
3212
|
+
danger: "❌",
|
|
3213
|
+
warning: "⚠️",
|
|
3214
|
+
info: "ℹ️",
|
|
3215
|
+
neutral: "💬",
|
|
3216
|
+
primary: "⭐"
|
|
3217
|
+
};
|
|
3218
|
+
}
|
|
3219
|
+
connectedCallback() {
|
|
3220
|
+
super.connectedCallback(), queueMicrotask(() => this.open());
|
|
3221
|
+
}
|
|
3222
|
+
disconnectedCallback() {
|
|
3223
|
+
super.disconnectedCallback(), this._clearTimer();
|
|
3224
|
+
}
|
|
3225
|
+
render() {
|
|
3226
|
+
const a = ["toast", this.variant, this._open ? "open" : "", this._closing ? "closing" : ""].filter(Boolean).join(" "), e = this.icon || this._defaultIcons[this.variant] || this._defaultIcons.success;
|
|
3227
|
+
return u`
|
|
3228
|
+
<div
|
|
3229
|
+
class=${a}
|
|
3230
|
+
role="status"
|
|
3231
|
+
aria-live=${this.ariaLive}
|
|
3232
|
+
>
|
|
3233
|
+
${u`<span class="icon" aria-hidden="true">${this._renderIcon(e)}</span>`}
|
|
3234
|
+
<div class="msg">
|
|
3235
|
+
${this.message ? u`${this.message}` : u`<slot></slot>`}
|
|
3236
|
+
</div>
|
|
3237
|
+
${this.closeable ? u`<button class="close" @click=${this.close} aria-label="Close">×</button>` : Ae}
|
|
3238
|
+
</div>
|
|
3239
|
+
`;
|
|
3240
|
+
}
|
|
3241
|
+
/** Programmatic API */
|
|
3242
|
+
open() {
|
|
3243
|
+
this._open || (this._open = !0, this.requestUpdate(), this.duration > 0 && (this._timer = window.setTimeout(() => this.close(), this.duration)));
|
|
3244
|
+
}
|
|
3245
|
+
async close() {
|
|
3246
|
+
this._closing || (this._closing = !0, this.requestUpdate(), await new Promise((a) => setTimeout(() => a(), 200)), this.remove());
|
|
3247
|
+
}
|
|
3248
|
+
_clearTimer() {
|
|
3249
|
+
this._timer && (clearTimeout(this._timer), this._timer = void 0);
|
|
3250
|
+
}
|
|
3251
|
+
_renderIcon(a) {
|
|
3252
|
+
return a.trim().startsWith("<") ? u`${Y(a)}` : a;
|
|
3253
|
+
}
|
|
3254
|
+
};
|
|
3255
|
+
qe.styles = J`
|
|
3256
|
+
:host {
|
|
3257
|
+
display: block;
|
|
3258
|
+
pointer-events: auto; /* receive pointer events within toast */
|
|
3259
|
+
contain: content;
|
|
3260
|
+
font-size: var(--enegelai-bot-base-font-size, 16px);
|
|
3261
|
+
font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
|
|
3262
|
+
}
|
|
3263
|
+
|
|
3264
|
+
.toast {
|
|
3265
|
+
--_bg: var(--sl-color-success-600, #2f9e44);
|
|
3266
|
+
--_fg: #fff;
|
|
3267
|
+
--_border: transparent;
|
|
3268
|
+
|
|
3269
|
+
display: grid;
|
|
3270
|
+
grid-template-columns: auto 1fr auto;
|
|
3271
|
+
align-items: center;
|
|
3272
|
+
gap: 10px;
|
|
3273
|
+
|
|
3274
|
+
font-size: 0.7em;
|
|
3275
|
+
font-weight: 400;
|
|
3276
|
+
|
|
3277
|
+
max-width: min(420px, 92vw);
|
|
3278
|
+
padding: 16px 20px;
|
|
3279
|
+
border-radius: 12px;
|
|
3280
|
+
border: 1px solid var(--_border);
|
|
3281
|
+
background: var(--_bg);
|
|
3282
|
+
background: color-mix(in srgb, var(--_bg) 85%, transparent);
|
|
3283
|
+
color: var(--_fg);
|
|
3284
|
+
box-shadow:
|
|
3285
|
+
0 10px 15px -3px rgba(0,0,0,.1),
|
|
3286
|
+
0 4px 6px -4px rgba(0,0,0,.08);
|
|
3287
|
+
|
|
3288
|
+
opacity: 0;
|
|
3289
|
+
transform: translateY(6px);
|
|
3290
|
+
transition: opacity 1s ease, transform 1s ease, filter 1s ease;
|
|
3291
|
+
}
|
|
3292
|
+
|
|
3293
|
+
.toast.open {
|
|
3294
|
+
opacity: 1;
|
|
3295
|
+
transform: translateY(0);
|
|
3296
|
+
}
|
|
3297
|
+
|
|
3298
|
+
.toast.closing {
|
|
3299
|
+
opacity: 0;
|
|
3300
|
+
transform: translateY(6px);
|
|
3301
|
+
filter: saturate(.9) brightness(.98);
|
|
3302
|
+
}
|
|
3303
|
+
|
|
3304
|
+
.icon {
|
|
3305
|
+
display: inline-flex;
|
|
3306
|
+
align-items: center;
|
|
3307
|
+
justify-content: center;
|
|
3308
|
+
width: 22px;
|
|
3309
|
+
height: 22px;
|
|
3310
|
+
line-height: 1;
|
|
3311
|
+
font-size: 22px;
|
|
3312
|
+
user-select: none;
|
|
3313
|
+
background: transparent; /* ensure transparent background */
|
|
3314
|
+
}
|
|
3315
|
+
|
|
3316
|
+
.msg {
|
|
3317
|
+
font-size: 1.5em;
|
|
3318
|
+
line-height: 1.25;
|
|
3319
|
+
word-break: break-word;
|
|
3320
|
+
}
|
|
3321
|
+
|
|
3322
|
+
.close {
|
|
3323
|
+
appearance: none;
|
|
3324
|
+
background: transparent;
|
|
3325
|
+
border: none;
|
|
3326
|
+
color: inherit;
|
|
3327
|
+
font: inherit;
|
|
3328
|
+
font-size: 20px;
|
|
3329
|
+
cursor: pointer;
|
|
3330
|
+
opacity: .9;
|
|
3331
|
+
width: 28px;
|
|
3332
|
+
height: 28px;
|
|
3333
|
+
border-radius: 50%;
|
|
3334
|
+
display: inline-flex;
|
|
3335
|
+
align-items: center;
|
|
3336
|
+
justify-content: center;
|
|
3337
|
+
transition: background 1s ease, transform 1s ease;
|
|
3338
|
+
}
|
|
3339
|
+
.close:hover { background: color-mix(in srgb, #000 10%, transparent); }
|
|
3340
|
+
.close:active { transform: scale(.94); }
|
|
3341
|
+
.close:focus-visible {
|
|
3342
|
+
outline: none;
|
|
3343
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, #fff 60%, transparent);
|
|
3344
|
+
}
|
|
3345
|
+
|
|
3346
|
+
/* Variants — keep parity with your button palette */
|
|
3347
|
+
.toast.success { --_bg: var(--sl-color-success-600, #2f9e44); --_fg: #fff; }
|
|
3348
|
+
.toast.info { --_bg: var(--sl-color-info-600, #0b7285); --_fg: #fff; }
|
|
3349
|
+
.toast.warning { --_bg: var(--sl-color-warning-600, #f08c00); --_fg: #212529; }
|
|
3350
|
+
.toast.danger { --_bg: var(--sl-color-danger-600, #c92a2a); --_fg: #fff; }
|
|
3351
|
+
.toast.primary { --_bg: var(--sl-color-primary-600, hsl(200.4 98% 39.4%)); --_fg: #fff; }
|
|
3352
|
+
.toast.neutral {
|
|
3353
|
+
--_bg: var(--sl-color-neutral-50, hsl(0 0% 97.5%));
|
|
3354
|
+
--_fg: var(--sl-color-neutral-900, hsl(240 5.9% 10%));
|
|
3355
|
+
--_border: var(--sl-color-neutral-300, #d1d5db);
|
|
3356
|
+
}
|
|
3357
|
+
|
|
3358
|
+
/* Mobile fine-tuning: give a bit more padding */
|
|
3359
|
+
@media (max-width: 600px) {
|
|
3360
|
+
.toast { padding: 12px; }
|
|
3361
|
+
}
|
|
3362
|
+
`;
|
|
3363
|
+
st([
|
|
3364
|
+
x({ type: String })
|
|
3365
|
+
], qe.prototype, "message", 2);
|
|
3366
|
+
st([
|
|
3367
|
+
x({ type: String })
|
|
3368
|
+
], qe.prototype, "variant", 2);
|
|
3369
|
+
st([
|
|
3370
|
+
x({ type: Number })
|
|
3371
|
+
], qe.prototype, "duration", 2);
|
|
3372
|
+
st([
|
|
3373
|
+
x({ type: Boolean })
|
|
3374
|
+
], qe.prototype, "closeable", 2);
|
|
3375
|
+
st([
|
|
3376
|
+
x({ type: String })
|
|
3377
|
+
], qe.prototype, "icon", 2);
|
|
3378
|
+
st([
|
|
3379
|
+
x({ type: String })
|
|
3380
|
+
], qe.prototype, "ariaLive", 2);
|
|
3381
|
+
qe = st([
|
|
3382
|
+
K("cb-toast")
|
|
3383
|
+
], qe);
|
|
3162
3384
|
function Q(a) {
|
|
3163
3385
|
return a != null && typeof a == "object" && a["@@functional/placeholder"] === !0;
|
|
3164
3386
|
}
|
|
@@ -3185,7 +3407,7 @@ function Ze(a) {
|
|
|
3185
3407
|
}
|
|
3186
3408
|
};
|
|
3187
3409
|
}
|
|
3188
|
-
function
|
|
3410
|
+
function Ss(a) {
|
|
3189
3411
|
return function e(t, i, s) {
|
|
3190
3412
|
switch (arguments.length) {
|
|
3191
3413
|
case 0:
|
|
@@ -3219,45 +3441,45 @@ function vs(a) {
|
|
|
3219
3441
|
}
|
|
3220
3442
|
};
|
|
3221
3443
|
}
|
|
3222
|
-
const
|
|
3444
|
+
const Cs = Number.isInteger || function(e) {
|
|
3223
3445
|
return e << 0 === e;
|
|
3224
3446
|
};
|
|
3225
|
-
function
|
|
3447
|
+
function As(a, e) {
|
|
3226
3448
|
var t = a < 0 ? e.length + a : a;
|
|
3227
3449
|
return e[t];
|
|
3228
3450
|
}
|
|
3229
|
-
var
|
|
3451
|
+
var Ms = /* @__PURE__ */ Ze(function(e, t) {
|
|
3230
3452
|
return t == null || t !== t ? e : t;
|
|
3231
3453
|
});
|
|
3232
|
-
function
|
|
3454
|
+
function Ts(a, e) {
|
|
3233
3455
|
for (var t = e, i = 0; i < a.length; i += 1) {
|
|
3234
3456
|
if (t == null)
|
|
3235
3457
|
return;
|
|
3236
3458
|
var s = a[i];
|
|
3237
|
-
|
|
3459
|
+
Cs(s) ? t = As(s, t) : t = t[s];
|
|
3238
3460
|
}
|
|
3239
3461
|
return t;
|
|
3240
3462
|
}
|
|
3241
|
-
var Nt = /* @__PURE__ */
|
|
3242
|
-
return
|
|
3463
|
+
var Nt = /* @__PURE__ */ Ss(function(e, t, i) {
|
|
3464
|
+
return Ms(e, Ts(t, i));
|
|
3243
3465
|
});
|
|
3244
|
-
const Ss = "fffbd0c40003a861a6f64deb05ce8fbd1dc1ee6979000bf3230f3195138b950cbe3649439256307747d31c26065d09cfae70d799f0a043c6a90008c0101188082314680d008619c9079b61dc806a921a220095277a60d4131e44143d53814e10f4d06ba6491eb478900a8d59016632a23e0fa358875c770146cc650c1c499dcb9b0965d7500106c321427219428febbdafb2b5d76979a75ae40018d025f96f71bad4b0257666051808e5b74c34bf2db9660bb0e24b2a35886616f617013a24104242304600910b1130dc7b4e81750bb1216e880432ac0d75b0a2a1834f45e8e9a279a9c6c22cc9a7e3ac01cc5335e8c0d97180c960bad7998ce9ac025a2f1a0c888e02c46508045a96a20a60c91980100828a917425f96ddc64bc2ea19146c50b00bde68319005d85d10e462314ae197f0b48c74bfe986ced9dac3a9bbfad7e8f7ac2a525253c6e36cad4dd7c20e2ec4842dba61cbf30f0f7d628635005a66e63ec63560f22a48c694034a695617e603c12c05077310c0923018053379a48d1e921e409b28546c46619d8fa6c9b019ea20762d318e34c6291699d98662a61861204fda2a7933d57c1d023391f8605262a1598449c1ca332e084cb25a3198ac94666361b99f05c67c1aba0151b18d456ec8e0b4c667924153ba632409114cc587c7867ca8c047dcd7a834bc8d2a033a141df48ab82a803bd1a8651a215e356c6161b062114cb841dd89589b05f0d10ad255c4d70d8ad245e4abcd6b33fca8d6af5cc3db8d9244511ab2206a56c885690ad12cc1ba16308528d539daa40b22baf35eb61a7044a988132e926b754d82ea8ca85199ad5c42c0d62d35eb8d7301d56ef5b26c451748198c2a22c319b24ab67a246b186c8af0d54354c0957c342d9a2a4d7b3245e585c4d7254e107501450bb46abbfa38b2331996d9bae08953352c48af43d5c7b08b6572a44e0b11775fd8cbb2b0b0343230c6c5add2ca5ac8d549765977ff78e59659ca49adde749c6789409753bcff43d1a8d46a532da5a5a5a5a5a5a5a6a6a6a6a6a6a6a6a6ab671c71c71c6ae4141414140a0a0a0a0c2b06e0b039c1829859998b165991a5d2aa598e0a714183727471921e5721a1037a9c2fb7a1b9c0dc99c6ab19b821219de39219b82a521908908987d2ab1aab194159219cb31211fffbd2c42383f4bda0d20ffba7c624b3dd01eee938b82f149f14b82951c14d290908c90d294c90a598b0948572ce584a434a54a52b4a42c3829592199219219a52921160908d295294b1c79b70dc9b72dc9b70dc15b71e6dc37058e3cdb8e34db9e3cadb82c37056dc95f1e7c6f1e58e3cadb8f2c4845721f96242f2c485e7214865721f962422c484721c845890cb121f9c872116242f2b908e4390bfcae432b908ae43f390e432c486721c85e5890cae432b90ce42908b121f9c8721962432c484721c865890ce4290bcae432b90bcae43390a432c485e58908e4290bcb121f95c86721c865890cae432b90cae42ff390e422b90cae422b90fcb121795c865721795c86721487e721c87e58908ae422b90bcb12195c845721796242f2c48658908ae43ff390e43fff390e422c4865890cb121ff9c872196243f2b90bcae42fff2c48458908b12116243f2b90ffcae43fff2c485e5890bfffcae422c485fe5721796243f2b90bfcae42ffff2b90ffcae432c48460a40a6618626a61ce3d466883d6645657458106350e2d6321a39532150c231a421532413d3399952b690e8430cc534d4ad0638ad993418742c24072f7385897cae5e348120397e5e348521397e5e2b734cd8364b06c160d93364d82c0ea6838ea63a0e863a8e9e581d4ca0283cd5d284b050795942650143e6e1c1b87058706e5c95b9370e4dcb92c382b706e1c15d22c522ba7e574cae9f9d2a458a474a995d32c52ff2ba4574cb148b14bfcb14cb148ae99629795d22c532c533a74cae995d2f3a74ce9533a74cb148e9d2f3a74ce9d22ba474e99d2a458a674a99d3a65748ae9f9d2a474a91629962995d23a748e9522c53f3a74bce9d3f2ba65748afa9f5ea57d4b1d3cafa963a163a7963a163a1f5ebfe57d3fcfa742bea7d7a15f42bea7d7a1f5e9e7d3af963a9f4ea57d4fa752c74f2c75f2c743ebd3fcafaf963a7ff963a79f4e9fe57d7ce9d22c532ba474a91d3a674a97962996297f9d2a658a458a658a458a4574cae916299d2a474a995d22c522c533a54bcae915d32c522c52f3a548ae99629795d3f30c6831b320f483c329501f8331a98f233a001f9342646273295483d326307f03331098c307e52ae3189883d3186475630e704da30e744db320f0627329501f831040411307e4fffbd2c42383f3fdacd40ff6b68668b3dc81eeed7841031044a54318984112a8c4e641e83f26208082260fc0822560fc183f041e183f00fc183f20fc983f20fc983f20fc95896e60bf863460bf86365805f8c17e0c68ac31b2b5f8f1bc68d7fc68d7f5fcaf1b35f97e35f97e2c2fc585fcb0bf9e36bf9617e2b5f8d7f5f8ad7f2c2fc6bfafe56bf9e34bf79617f3c6f1bf2b5fcb0bf9afcbf95afc585f8d7e5fcb0bf611fc419f8f08fe7833f1e0cfcf847f308fe7833f1f067e3c19f9067e308fe7c23f8c23f9067e40ff3f8067e20cfc047f00cfc611fc81fe3f207f9fc033f211fcc0ff1f903fc7e423f803fcfe423f903fcfe00ff3f8833f011fc847f211fc047f303fc7e211fc01fe3f211fc033f011fc7067e40ff3f908fe023f808fe00ff1f903fcfe019f803fc7e419f808fe019f9067e40ff1f9067e211fc01fe3f3c19f8e0cfcc23f9067e40ff3f8067e023f808fe60cfcc19f8c19f9847f211fc047f011fc033f1067e60cfcf833f25808830881d435e33e33263062346d46d31d427b31d41d4346d3c633201d5308827a308846d351212e32267a39ea7a34b92f3221d537552f32252e2b4b8dd5c80c88c84e7a4bcb0ea9ba9e315a5e697baa644cf473da5e58220c894bcb0449a5e449612ff2c110584bcb0447991044191244160892b4bfcc88224ac882b2a4d0a114ca8114c44114ac442c089e562279588856c458633e362f3e362362623e3e3f2be23e3e32b633e263f2b88fffff2c44f95c47f96227ce2224e2620b11071310713105889389882c44f95c41c44496220ae23cae20e2627cb1127111257105889f2c449c4c416220ae24e2224e2620ae24b1105713e588838988389892c44f9c44416224e2220ae20e2223cae27cae23ce2220e2620b1105711e5712571271111e57127131257127111271313fe713125712588938988388892c4479c4c41c44416224ae24e2220ae20e2620b11058882c44ffff95c4795c4ff95c415c416220ae20ae20b11271310571271313e58882c44f95c49c4c4ff95c416224e2627fce2224e2220e2220ae20b111e57107111071111fe5888ff389882c03a18838cc99ca16b996b8501ad09db99db86c161e34cb0c730c6641d4c664f7cc570e54c570570cb08734d2b4b08ac360cb5c284c86c574c57428fffbd2c41e03f239a2e40f7370c65fb39cc1eeed980c364364c360730c364edcc360364db2d936c734f9bcd3e6b60db0d82c734db3cd36cb60adb27068399d732588319d20e7068399d20de5850f9d75405850796140575c3535335252353c32c611e1291a9e11614cd4d4cf0d4cf0948e8684e8684b14074140574058a12c509d0d09d0d09d0509d0501d050796363fcaf64af67ffcb1b257b1fe58d8f2b74375742b742c3a9baba15ba161d0dd1d4add0b0e9e6eaea56ea56ea5874374752c5096280e8680b14057405743e57407414058a12ba12ba02c50f96280b141e58a12ba12c5096280add0dd1d0dd1d0dd5d3cb0ea6eaea6e8ea58752b7537574374742b74374752b752c3a95ba15ba9baba1ba3a161d0dd1d4b0ea58742c3a7ffff96367ffffffffffffffffffffffcb0e856ebe5874f2c3a961d4dd1d7fcadd4b0e9e6e8ea58752b752c3af961d4add3cb0e86e8ebfe6e8ea587537474f2c3a161d7cdd5d4dd1d0dd5d4add3cc388588c9e8220c4b91b4c989388c58898cc5b4740c2a48c8c58c38ccb8898cc9ec220cc84c80c4b84bcc224754d4491b4c62988c63588ce2b88d2e224d2e224b0449f8f3d1a5c9719104499124415a5e6971106973aa58750d2e220d2e220d898cf8d8cd8d8cd898cd8d88ad8cd898cd8988b1c7e586336363f2c711b1311b1319618cd8d8cb0c6586236262363632c319618ccb8b8cbcbcb05c565c582e32e2e32f2f32f2e32f2f32f2f32f2f2c1796220ae24ae20b113e71313fe71111e5888388892b882c449b1b115b11b1311b13116188d898fcb0c66c6c45862363632b632b63ff2c319b1b1796224ae24b111e711125711e5713e5713e58882b882c441c4c4f9c4c4ff9c4c4f9c44495c49c4c416224ae24e2224e2627fcae20b1105711e5711fe7111071111fe57125713e57106c6c46c6c45863f2c3195b115b19b131796188ad8bcd8988b0c45862363632c319b1b19b131f9618bcad8fcd898cad8bcb112571257125888f2c44ff95c495c4ff95c47f96220e2624b11258882c441c444ffff96224b112571257105711e588838989f2c44d3045045310b0a932632e232630623562062316226236620e32c1b198850229885919194a88598220e81fc431160623589e23588622b18cde2988de3788c63588fefffbd2c42083f3559ee80f774bc682b4dcc1eee9782388c6278cb0b1161623388e32b588ac62398d633188632c0c46318c66319c46710c66310c66b1ac66318c46310c46310c46710c6563118c431f98c63199c63118c631960e3f318862f2c0c7e6310c45818cb031960622bc678f1163196319e3c658c478b1163179e2c658c65788f1623c58cb188f1622bc678b115e33c788f1623c58caf195e32bc5e71221c5885710e24438914ae29c58a71621c48a588a5714b110e2c438910e245f38b13ce2442b8a71621c58a5889e5714ae295c42c442b8a5713cae29c48858885714b110e24538910af115e22bc658c478b17f95e33c588af1ff9e2c678b19e2c678f1163179e2c478b1ff95e3f2c62f3c78fcb18bcaf196317f95e22bc7e5788f163f2c632bc5fe58c678f195e22c62f3c78bfcaf1163196317f95e32c622c633c58caf11e3c4578caf1f95e32c633c78bfcf1622c632c633c588b188af19e3c5e58c658c678f11e3c678f17ff96319829829986109a99a6b1319ef03a19ef0cc99150cc195d8cc99a683a18730f598ca89e99a615d995d2819fbecc9d755d95c54698a626980d26559dc71520c68357471520c6cc33075d8ea63a0ea68345468320e63a0e875d20c683a0c63aa0fe5841cd98664b0831a0e8318ea3a95a0e563a160752c20e63a8e86838e858418b03a160753148523309353148c22b14cb02918a42918a629160522b14cc5314cfaf52bea7d7a163a963a1f4ebe7d7a95f53ebd4faf43ebd0afa795f53ebd4afa963a1f5e87d3a963a15f43e9d0afa79f4e858e858e858ea57d0afa963a9f4ea7d7a9f4ea7d3a9f4e857d0afaff9f4e9fe7d3af95f52be858e857d4faf53ebd0faf53ebd4afa1f5e857d4b1d0afa9f5ea7d3a7963a15f43e9d0faf52be87d3a163a163af95f52be858ea57d4faf5f2bea58ebe58e87d7a15f42c742bea58ebe57d7ffcfaf52be9e7d7af95f5ffff2c75ff2be857d7ffcb1d0faf52c742c742c753e9d4afa95f52bea57d3cb1d4afa95f52c742bea57d0afaff963a95f43e9d0afa7f95f53ebd7fcfa753ebd3cafa15f42c743ebd4afaf95f5f2c752be857d7fcb1d5508000160382b0e0d954f0d94654deb7acc397acce7d10dea4f0d4b2c4cb02c4d311a0ad3134c0aa34c4ef33b8ab3059193460b03fffbd2c41a01f0c5a2f0aeeb34c619359dc1dde6682c04b32403834f43832403932443930e03932403932413c3240392c070648072561c9870489a7a48161c1b972587258726e5c9b87265e51ca2c65cb9cb2e65fe1cb94565ce59634a94ad21a44a584869529a4485694ad216129a54865cb1972e72e51962c65cb1972c565cb05ccbcb32e5ccb162b2c56b79acb1acb1aeb9acb1aeb9acb1aeb15ac6bae56b15ac56b15ca72485894e590e490b1295ca5894ae52b90ae539252c49e724a5897ce494b121cb2f9cb21cb29cb21c9215ca5890e497ce597cae42c4a57215c85894ae42b97cf9e4f9e3cb1c15f1e57c796393e38ff2be0f9e7caf92be0f8e4af92be0b1cff96392be0f9e0b1c15f058e0b1c796382c71e7cf3e7c7257c95f258e4b1c95f1e58e0af92be4b1c1639f2be7ce493cb127f9c9215c9e5721c9215cbfe72ca5893fcb1279c921cb29cb2f9cb29cb21cb29cb295c85890ae42b90ae42b93cb12795c857298701c1609034f2413901eb3094683091733344d033e0d132acaa34c4ee30957434c1313244382b398d3c4f0ace730e13d34f53d37ac3937ac3830e4382c07261c870648a786ca27a580e4ce244e44e4ace4ce0e4ce240ce240b072723226727058382b90339392b382b382c1c99c1c9c89c960e0ce4e0ce4e0b07067273e6727258392b38ff2c1c19c1c960e4b070670705838f2c1c19c1c99c9c19c1c159c159c960e4ace3ce44e0ce4e3fcce0e0b07058382b38339382b3933839396439252c4872ca72ca72ca57295c872485890ae53964f3965f39242c4be58e4af92be0b1cf96383e783e383e382c727c707cf07c727c73e58e0b1cf9f1c15f058e4f9e0b1c16382c727c7257c95f07cf27c707c727cf257c9f3c95f258e3caf83e792c73e58e0b1cf96392be0af92c7057c9f1cff95f058e0b1c16382be4f8e3ffcaf82be4b1c795f057c16383e392be0af82be4af82c71e57c796393e392be4f9e7fcaf9f2be4b1c795f3fe7c7258e7caf93e392be0b1c79f3cf95f257cf95f1fe57c79639ffff2c70a0800079603ecd71612cb09de71381f66aac420687e4226650cdc6176680617668061769dc58268332932930fb211343e211355621032115563328328343f0fa30fb0fb33280fb321021032112102b43e32112112b329fffbd2c42b01f3f1acdeaf777286a1355cc1eeecf82c1f467d1f5e7084207081f456c895977e65db2265d32265db207081f4583e8cfb3efccfa3e8b07d960fa33ecfb3fbfa2bfb2bfa3fbfa3fafa3fafb3fafb3fafb2bfa3fbfb3fafb3fafa2c7d963efcafe8fefe8b1f5e58fb3fafbf2c5d1dddd9dd5d1dddd162ecaeecb1747777477574577458ba3bbbb3bbbb2c5dff963ebfcb1f657f5e57f457f5e57f5e58fbfff3fafbf2bfa2bfa3fafaf3fafbff2bfbffff2c7d963ecfefe8fefeffffcb177e577658bb2c5d7962e8eeeebfcb17458bb2c5d1dd5d962ecaeecaeecb176577458ba2bbb2c5dff95dd15dd95dd1dddd7f95dd162e8aee8b17658ba3babb3baba3babb3baba3baba2bbb2bba2bba2c5d9dd5d15dd1dddd162e8eeee8b177e7f5f7fe58fa2bfa2bfbff3fafaf2bfbfff2bfa2c7d9fd7d7963ecb1f47f5f658fb2c7d163ecafebfcfefe8afebfffcfefecb1f5e57f457f7e58faff3fbfaf30e326333624e333632e231d546d312e1d530a8233323210b36ac7a31ec7a2c4f46eaba86318c46f18c67719c47315c6631ac46f19c658754c89224dd4c84f204bcc894bcd2f4bcd2f224e7a4b8ad2f34b8893220882c11056441a5e44191297160882c112644113e711125712588938989389893898838889f38889f388882b8838989f2b882c447f9618cb0c46c4c658633626336262363622b632b633636236263362622c319b1b19b1b19b1b195b179b131f9b1311b1311b17196188ad8cd8f88b1c656c65862363622c3195b115b196188d8d88ad8fcd898cad8cb0c45862363622c3195c415c495c416227ffcb11258892b8838989389892c441c4c416224ae20ae23ffce2620d8d8cad88b0c656c456c658632c31f95b19618cad88b0c5e6c4c66c4c7e5863362632c319b1b1f95b11b1319618cd8d88b11058882b892c4416224e2220b113e5889ffff2c4479c44415c415c4ff96224e2620b11257125710713125712571057105713e58892b88f38988388892c441c4c4796224b111e58882b882c44f95c416227ce2624b1105711fe58882b882c44795c4ff96223cae20ae23ffcae26f331e433b76dc30b95e3a3df73449133dd72835791335782f30bd1236a87a37d8c730b8c630bc7a331c2e357df730b82f31ec7a30bc2f30b87b344daa3fffbd2c41e83f005a0ee0eeb3706ce341c42bdd0003187a31e8c730b82e2b44ccc60b8cc61e8c7a31cdaa1e8b03d960c731ecc731ec7a30bc2f2b1e8c2e1e8b03d1ae5c6bbd16171ae5e6bbd15ae35cb8d72e2b5e7e97161795ae35ebcd7af2b5c6b979af5c6b97161795ae2c2f35cbffcd7ae2b5c56b8b0bcad715af2c2f35eb8d7af35ebcd72f35cbcd7ae35ebcb0b8b0bcb0b8ad79ae5e585e56bcb0b8ad79ae5e56bfcad796179ae5c585e6bbdff9af5c6b971af5c6bd7962e2bb8eebceeb8aeff2bbcaef2bbcb1795de58b8eebceeb8efbcaeffff2bbceeb8efbcaeef2bbbcaee3bef3beeffff2bb8b171df7962f2c5c58bfcaeff3bee3baeff3baf2bbceebcb171df795dc775c58bbcb17962ef2c5c77de58b8aef3bae3bae2bbcaee3bae3baf3baf3baf3bee2c5e77dde58bcaefffff2bbffcaef2bbfcaeef2c5e577ff9df7962f2bbfcaeef2c5de577162ef2bbcb17fff95de577960360c731e34da20e50cb58e4cd688b08d2b0734e5d9e30c730360b03306576576658639a61ae76c639a76c6b40958561b2695a76c561b0639a5847db58458360adcd2c58666c9b07615846e6d8658364dcc730dcc730cd8730acd83364d8f3361cc2c1b256e6959b258360acd92c1b1fe66c9b06e69b066c1b258364c741d4c751d0ad0631d47431d074f2c0ea63a8ea63a8e8563a160d83360d92b360acd82c1b2566cf99b06c99b26cf99b06c99b06c98e83a1607431d10631d4742b1d7cc751d0c751d0c741d3cac752b1d0ac752b1d0ac752c20e63a0ebe63a0e8563a18ea3a98e83a158e8563a958e863a8ea581d4b03a958e863a8ea63a8ea65094058284aca0f2b284ca1287fcca1287caca1ff3280a13284a1f2b280ca0280ca0280b0501594058280aca02c1405650960a02b284ca0280ca0280b050160a1f3280a03280a03280a1ff3284a1f2c14265014258284aca1ff3284a1fffff2c1b3e58363fffffffffffffffcacd8ff2c1425650194050799425095942565079940509594258284aca12b283caca13284a0ff2b284b050160a1f2c1405650194250960a0f2b284aca12b283cca1287fcaca12b284b050da03028040204010140a02010080300640ae302500803053c24f30d7c2a930ca42cf31c4921a300f0001300c4005305cc04f303cc03e34620fffbd2c41c003485d91db9ff00062e346243bfd000a9035bccab50300ac600d80006071010c603180c6611a82666027812018002a546032072608a05e690660a6330a28160074dc46f0c033306302b302a06234f02603428582329635f2eb1698880854e0c110038c168038c094064c008008d454d7cc660a5cca5c1d4c4f03899c459a1b8ef3180e80e98018048b009ba542604818c60701ba620e09e60de09e0d024120006cca729e4ca5b2baf182ea7acba030220082203b14028160104972b0109332164c5a76aafeb228dc6dd359e5dba0a2ff2c00c182d01c182d03d180c00c980c801c4eebff1779ae3fb76efa7ba8ca8927c39707a7a27c79803803958039803803980380398030031583a983a04c1583a45e2f14a771593bcf4b7e24f32e789492ebff72f45ee5ebc61540c4603207e180afe17007f53b0c00e4c44c60c00c8c50fd0fffd050d050d1c65d6a2ffffa251aa27c567d0fffffa219580133ba3f75e3292edc1863a4ea46dd474fffffffffffffffffffffffffffffffd4f980d0090981280b6984e00481848a1621869a25d18f32518198f263d19bd283d1a7d2d1b1b0fcf639bcf8c85987b8ff61db16c151d0749fb9cd72df399c764769881e1d19834809d9862389858ce9c5ca99b38cc9a0c149986cd1bcf161d83ce1ea3a91bc8f1997c611a16ce1bcaf21c32d31ade9b19160f191c9a9a68b599fa7d1986450b14e60e03a6271126471166450aa62a03a60e03a60e8a464698867d9f867f99062a83660d0403a0e98300e98a029983e0d2439810069810029810069818068602a8ab8ab3a01500a912a95c5987095b948b016d5fdb3ff4b0ee54255006ed19788c17050c2d0b8c49128c320c41c18a6f1728b945ca4e29eeef1fe56c8a800980801980402d79dc7a4a01980002980804980c03980c02df30180530902530880542c301402309446311448311c4830982528014c03000c23098c05008c05022b592500e2b477b0ffcea5d66d967ffffffff94b20c5dcb0cc4989356a6d779ddeb2ad6b755f57765b2996dda596d3bf38d6869da96d9d53434ef4ba1a7fa3384aa5d6bf2ab19a6ea300c013730b805f33126021130cb4230301a424a304f4122302905f9309b01e5308bc0253115c16431c9c4aa319809b1348b010e360fddfffbd2c41b83e62974fe0ff1f1056daadc81ff69e01033cce9a13e9998033720c8e03095404e3043c257309e00bd30074315306a01b93964c434b07666b9b5a486915398b4c4670561abd5a6ab341a9c58670859b40ea6965b8aa08c26b43291e438b21c5630e828906a18255402a4302824c4020012f82a2415279830b466f22268084188a8850f8238c0276895daa096a1e4406a530a427eb58491f081545ea7a311caba0d9712c06c2245b452039921093ca2624399cb1b2c29eb96a1f6c6b339233293c2e2af1b85c542519395617227c748270778c241b5976196923c2e27c2ba5fc4c49b6b75f582ca7ea3735ffffe0ab665746b4266378e2dfd7fffffffffce36c31231de4bfd191ff117fb8c19504f0c09013dcc8583304ca622984cb0e2c3cd17e039c8a86738190f763626173e280ca4e36eeb34d7401280e67a692ccc6a3708d58face8f60fa0b0e9df6268c2ee3714d7e9284d281eb4c64d280d7ecbbcac398c654a60c39c654c650e70d285280c650650cbbc650b032a63283286532530632a1ce61cc32a561cc61ce32863281ce612012061221206072070607207058038f2b03930390903d094d26834fa4ad216349a44a7a741e9d06952f95a42b485694b090ad2ff9a548695214492c25f34893cd3a62aa434a93cad29a548584869529e8485694d2a434890d22534a94b090b094d2242c2534a90d3252b4a5690b090d2a52b4a691215a534890d224f372e7fcb0e0b0e7ffcadc161c7fff95b92b73fffe56e3cadc7e5dffff372e3ffcb0e7cb0e3ffcb0e7fffcadc161cf95b82c382c382b70587058726e5c95b9ff370e3cdcb8f2b7058725873dff2c38ef9b871fd3a21dfffff65f302a03bf3183c6d2327a41d139209453312084833623919f370206d535458e2633ec4e26388c9fe23a48b6a13da898f333712b75337150153ed089223371145331208dc430be454831cd84203042842030be442035b23231156d2c15065408a685216685088685216568515a14685a1665408856541888549950229a1622959715bd15bd95bd9973d961eccbcb8cbcbcea510b08858452ba8345453444434444345a9345452c2296114d1114ad14d1110d1514d1110ad10d1514b08a575258442c549a2541a2221a2a29a22296110d1114b08868888584434fffbd2c46c83f3bd56de0ff77085de2a1ac1fe6e4054534445344452c2215a21a22215a29a22279a2221a2229d4a296110ad10b08a68a8a5844f345442ba82c2296113cd1110b08a568a68a8be58442b45f345452c22f9a2229a2a2f9a2a296110d1114d1514d1514b0886888a58442b44f345442b442c229a2a296117fcb089e68a8a5844f2b442b453454434545345443a844345453454434444344a834445345452b443a94534444344452c221a2221a25416114d1510ad10d1514b08868889fe568be68888568868b5256886888a568a68889fbf9dbbf45c58018cc0620d8cc4e31388c3620d88c5630d8ccde23388e1e2878ce6e33d88d1e32788d3e24f88c660a18cdae32788c9e2358cd7625d8ce1e2358cef62e58cd0e2438cc6e2358cd762438cc6e33588c9e31b8cc3620d8cc162178cb00b1182c60b1182c40b11f8dc456e33f1388b1e3371b88ad8cf8b88f8f8caf88d8f88f8d88b0c65862363e32c719b13195f196388f8d8fcf8988b1c65863363632c3195f115b196188ad88d898bcd8d88d898cb0c458e32be32c3195f19b1b19b1b19618cd898cb0c47c4c456c66c6c65862f36362363632c3115b115b115f11b1b19b1b115b11b1319618cd8d8cd8d88ad8cd898cad8cd8d88d8d88a310b0c46c7c66c4c456c66c6c47c6c66c6c7e6c6c458632b63362622b633636336363363e2f363623626336363ffd15b1f9558cb0c47c4c66c6c458632c31ff9b1b17f95b11b1b17f9618fcb0c458622b632c319b131f9b1b115b115b17ffff9b13196188d8988d8d88ad8ffcad8bffcb0c7fffa363622b622b62fecf95ff2aaf2c084258217cce061080c9c9655cd3ae3270dd952720e33eed24e068381cc4203dc0d957381cce0781a4e33eb494f70aed24cf704eb8cf701080cf702cc8c6f45a0cc2b7217cc9c81bd0c58b0ad8c58a0adcb02109829a2101829815b188400a61d6ca69a9b5b9554c35314c35314d2b3eccfa3e8cfa840e103ecb07d99f47d19f67d962102b3eccfa3e8cfb3ecacfa33e8fa2c1f6582efccba2e8b05d960ba32e8ba2b2e8acba32ecbb2b2ecb05d9597665d17665d177e582ecb05d19745d15974582e8cbb2e8acbbf32208832252f32208932252f32208932248834b88832252e2c11064411064491264425e64411206bfffbd2c47903eab9a2d20ff6b3471eaa5801ff5a38ac804576115d84577062ee0c5d81ae97606ba5d8457581ae976115d01ae9740c5d40df4fb037d3ec22fa063ef08bec22fb063e818fb063e818fae06fb7d01bedf606fa7d845f406fb7df06533c194cfae11a6ffffc234d81d369947ffffffffffff06110c1f907e0c1f81044d4c44abce14c8534d8f25314c1f820f0f62f7cd8ce8395f0d2af6c24df37e970f2038d90c413a6a0e14fc808e9a763d4f204c80ce3642950ce821038ce801044c4114abcc40e1898c4101040c1f91040d89f1acf1a9898c7e5898d89c7e4ae0f0f1aa0f0e0f5044ae0f0e0f5044d0420f0c7e5040c7e07e4b0823e63f282056c4e5541134101f834111f831f91f82b1f934114102b1f834114112aa08941f898fc2089607e4ac7e0d0407e7cc7e1044b03f05682056823e68203f0581f831f81f92c20818fc8fc98fc208f98fc0fc1a080fc98fc8fc95a0879607e4d0407e4c7e1040c7e47e4b03f263f03f0563f263f23f0563f0563f063f082063f03f063f03f063f23f263f23f0581f831f81f92c0fc1607e4b03f068223f263f23f268203f3e63f03f0584102c20898fc0fc019f93f00c3f2e113f2113f3033f27e0227e4187e4227e4227e4187e00e089f908c11061f9061f806410033f27e2067e0fc819f83f1819f93f0067e4fc830fc830fc419040187e3033f27e40cfc1f8061f9c227e00cfc9f9061f8061f8091f9033f27e4187e40cfc1f9033f27e2113f0067e2084187e2113f2113f00c823830fc830fc7f7061f8844fcaffffdc9d9fffffd75f317f31b37f117f34b7b29398c65434b665534da7572c30c9a6dbab1a6d12f1b2acc61b2ad949bf832a198d32a1b2a6629d947fe9b2a0bf98bf25b192f30c99ce12f989092f192f12f1612d8cc68c6cacc68cc6c5fccc685f8b06366636634663496e66362fc6bf2fc6bfe346bfafc6bf2fc6bf2fc585f8d20978ae5f3485202c4be690a406904bc5690f961213979212c24272f240690242569096121348521348521397d203481203485202c24258480ad203485212b484ad203485202c4bc56909a429095cbe5897cd21480d21484d21487cd20978e5f484d21480d20484ad203485202b480ad212c242569015a40690a40690a42690a4058484ad20ff348520348fffbd2c48183f27178ce0f76b545f6b61a01ee57205212c24258480ad213485212b480237e065f8237f81dfafc077fbf4237ec197e832fc0cbf832fc11bf611bf032fc11bf832fe0cbf832fc077fbfc237e065fc237fc197e03bfdf8237e832fe11bf01dfeff065f8237f832fd03bfdf8237e846fe11bf832fe11bf846ff065fa077ebf81dfefe0cbf832fdc0eff7f065f8197fc197f065fc237e08dfe0cbf60cbffffc197e2c0bf18bf0bf9bf859418bfa5b9d9418d15d941a6da6d9a6d44a18bf8bf1598d1961ad0986cad01890a6d9b0c9ce992f3ab9596198e69619a5606c18bf18d961954cc6d2dcb096c62fe2fc696c63462fe2fe62fe96e62fc96e696c2fc66342fe5663466342fe61b039865861b0561b261b239a63981b2581cc31201202b1202b1202c09018908909589015890992f0901f35b0586c1b65b26d86c9b61b06d86c95b63cadb26d96c1d72ba6a1ae95a87cd40a13aea80eb8a12b501a854275d5095a84d42a12b6c9b61b056d82b6c161b06d96c15f33cdb2d836c364db0d92b6c9b65b056d8390484e4120390c80ae427209095c83fcb120390c80b120390484e4121f2b901c86425890162405721390480e41202b90f95c80ae407209015c80ae405890f962425720390484ae40720901c86405720390c860cbf846ff846fe11bf846ff832fc11bfc237fc197e846ff81dfefe11bf832ff832fdc237e03bfdfbc197ef846fe11bf832fffc237fff832ff81dfefdfffff065fff08dfa0cbf2af2c1611a561619ad086c1bc6256986c0e698e61db186c2d0991503a991528199ca96bf995d8cc183a95d98cc883959ca996b0ae18500ae18ae8ae18ae10d99ca05098ae0ae158e6186c06c996186c186c06c186c86c1586c98e686c186c86c986c1611d71406a1501a86b858501a82ba56a02b501a854258509d71405850161426a0509a8543e6d86c161b256d836c363cb0d8ff2c363cace9e5883f99d0ea583a959d0cea7433a1d4cea7533a1d0ad43e585095a84d40a12c280b0a02b5095a83cad41e56a12c280d42a1350280d42a0350283cb0a0350a80b0a0350280d40a02c284b0a0350a87cd42a02c284b0a12b3a19d0ea7073a99d0e8583a99d0ea6743af99d4e86753a99d0ea567533a1d3cce8752b3a160e86743a160e9e6743ac1fffbd0c49001aae194d80f72b58554b59a95eed5a08d808b600db0d9c22d906367831b1c22d8c22d8fc18d808b620c6cf063660c6cf036cb66116c01b65b2116c7fff08b67831b3ffffc18d8720624024262422406caa96c696efe06634fe0696e2fe584b6f32c269733b61cd32c30d831cc2c2375639c339c120339d4da2bb08ec2364dcd360e5e480e5f978f9c97cd2197cb0901f3a909f39ce15cbc6904be7cef386904be572f1cbc909cbc909cbe90961202c24258480d21480232106484192108c80192008c800e4320064840db1cc036c36418d981b65b2116c7845b006d86c831b20c6c045b0116c81b65b2116c01f31b00c6c0339a0c6ce0c90046401190e0720900464184642119001c86400c6c831b2116c831b00ce6045b006d96c01b65b2116c81b61b006d86c831b006d86c031b206d86c81b65b006d96c045b00c6cc0db0d881b65b006d96c01b61b20c6c845b006d86cc0db2d90636606d86c031b308b6022d8036c363f06487fc1921846400c90c192084643e0c907c1921ff064842321fc2320c1921c2320e0c9083241c1920e1190ff0648383241ffe1190552b188b0719f7f4a1eb57c15bc66b19c46e821474a4645719988ab69bc4b11ac4311dc4b11cc47198c4b198882219502296045338ce33589622b388d62188c6338cc6318cc63588b071195222995222195022160a832a04532a0452b110ac4432a0442c08862208a78b1f95e23c58fcf1633c78bcae2162215c42c442b8a588a588be71221c58a716295c538b14b110b114e2442b8be5714e2c538b10e24538b10ae21c48871227f9c58a7162162216221c5885888712216229af5de585e6b9715ae2c2e35cbcd72e2c2e2c2f3f4b8b0b8ad715ae2c2e2b5e6bd715c42b885710b114ae29c48a588a588a58887122ff95c42c442c45f2b89e5710e2442b8bc238e11c611c5e11c5f08e3f83310331ffff8471047160cc708e3c198c238c19881988238c198e0cc7833103318471e0cc508e3f8331c0f1e3e0cc611c7847103314198e0cc5066308e3e0cc41f2c1e6a5119a1af08bc29b0f2a7b986cca7b194d8c3c98dd06f719b1a90d9a4346c69a4366c619b1a47f1ef71b39b74ef71ef76f71a08e3598fce351a08a081bc6bc61f9a79a953cd4de33cd7cde31e34a79a8de37cdfffbd2c4d083a94daee40eea974694295845ff597a0d1c3634ad1c0e3ff630e3f91c0d1c11c0dba0d98cd9a9b0cd98d98dba0d98cd9cd9ccd9cd98b0dd3e566cfe66cc6ce586e9f36e9367362741136271f831f81f9f34101f82c20898fc8fc1a080fc1a088fc18fc8fc04638846380323884638c191c0231c4191c40e38c71064700647108c7003530a640d4c29903530a600d4c54d08a9803532a6418a600d4c54d03532a600d4c29981a98532075314cc22d980db3367831b3831b381b666cc0c6cc06d9db381b666cc06d9db3045b3845b381b666cc116ce0c6ce06d9db3c0e384708463804638e118e0118e0118e2071c63881c718e0118e3f08c70038e11c00e38c7108c7008b66036ccd9c0db3b67c18d9822d980db336608b6608b6708b67036ccd9818d9818d9c0db3b670636706366036ced9c0db3b6606366845b381b676cfc191c2071c238f08c71f846380323801c718e384638c191c3c82bb45762bd6a189200a0f3144ca433d6cc69c36b368403455f43b3455ab8137c0e4323674ca4235040d5636b2cd573290d4a32a9ee6553dc8df03144ca294533f88be230f8d3e330f8c7e333dc8a4333dcd9d332908a4332908a423144ca423144ca433290851231448513314494a231448f7233dcc5133290c5122c0a24587e3d95bf1960f8ccf8cf88b07c4583e32b3e22b3e333e23e333e37e333e23e333e33e32c1f199f19f1160f8ccf88f88cf8cf8ccf8cf8cb07c4567c6583e333e23e237e23e284e898328981d13a2611a240ca2611a2508d1281d12a260744a8981be27c6117c4117c606f8df101be27c60c7c407f89f181be37c606f8df101be37c6117c6117c5063e208be281be37c5063e3037c6f8a117c581be27c7831f181be27c5063e2ff81be37c5f831f1781be27c4117c6117c40c7c4117c406f8df1c18f880df13e2063e2063e208be308be2845f1c0df13e2063e2037c4f8b08be3037c4f8fc1944c2344ffe11a27ff06513e11a270aa27fff08d1303a2544bff06512f065128468980001f961a0f32f89be330f8cbe22b674cd4a3528ccf727c08d4a25288c923183cc9221838b0ce9194867b9997c67f118fc69f198fc63f19b07b071c914919b07c91963f88a1f1cdf88f8cef88f8f46d3baae7aacd386d39aae6a254867487486fffbd2c4f0002ff59cc10ffad486bcb35849ff59b3574846a24a26574866fc67c667c67c667c6fc6583e233e23e22b3e332f82f832f92f9360f60f32f92f92c17c7960be3ccbe183cb05f265f2c1e65f25f065f0c1c56c1c582f832f860e32f82f932f82f8035f0be40d7ce0f035f0be7062f8062f9062f808af981af95f2115f006f8df1c22f8822f880df1be3037c4f8818f8c0df13e208be2037c6f880df13e2037c4f8822f8c18f8c22f8c0df1be3037c4f8a117c6117c40c7c60c7c708be208be208be2063e3063e308be208be3063e38317c8457c40d7c2f808af808af808af9062f9035f0be422be018be00d7caf9062f98457c81af85f1035f0be422be206f8df1031f1845f1045f1831f1045f101be27c7831f1031f101be27c7037c4f8c29f1818f8e06f89f1831f101be27c7037c4f8822f8c0df1be3ffc1944e0ca25f065120651284689fc1944cde666d451e74c692cb86aed3354ea7b2cc5691998436ef2c2dbe749e0b946bc1af0868cdd2784d19c1de4b1aa9bad88cd958dd05853d0c4716ce4cd8c23fcdd6d2ec8cbb275b4cbb31728c3671ba0c3671ba0c3661ba0c36545ccc36445ccd1731ba0c6e90d98b03c619e6a79a98f183c616078b2c2335af2a0b96565d91c7fa38144701611c0d1c51c3cd1c51c4d1c11c4ae3fb9e568e1fe58471336636636e9366e959b3f99b31b3959b399b31b3959b399b31b30323840e384700647108c700647006470c231c4231c606d99b3c0db3b6608b67036ccd9c0db336606367036ccd9c18d9c0db3366036ccd9c22d9c19ba40db3367064710647008c708323840e38c7081c718e0071c23803238832388463881c718e20c8e00c8e308c7108c7106470038e31c00e38471038e11c00e38c71038e31c60c8e20c8e0071c23881c708e0118e0118e20c8e0118e108c700647108c70038e31c70647108c7108c7008c710647106471064710647108c710647181c708e30647008c70c231c00e3847006470038e31c3065cafc1972ff832e5ff846e5419e3613f1bffffe11f19ffc19e33c23e340cf2c13a66bc22f044e35599b1a90d1bf8cb549bad85d91af091aa938d5665d997666b549b1866c6ad5268ce233468cd233651785150bb22b172cd19b5e10cf343cd4ad6de33cd4f3533cd078c2aa78064efffbd2c4f003b1c9a8c00ffad4867d2b97c9ff5eba9a783a34f013c12a93a6513c0993a64e9993a49e09549d32bbb235cbbb32b5ca2c2e515ae595ae59a38c7f1a382381a38a381c7fa381a38a389611c4a238fcb08e2584702c47f1a38a381a382389a38a3895a389c7f47f79a38238960a64ca61530ca65534ca64a60d531534b053058298354d29932982992b29932982992b2992b4712c2389611c4d1c11c0ad1c0d1c51c0d1c11c4ad1c4d1c11c0d1c51c4b08e068e28e268e28e0568e0568e068e28e2584702c2389a3823895a389611c4d1c51c7cd1c11c4b08e3e568e0584712b4702b47034714712b5ca35cb5ca2b5cb2b5cb35ca5ca2b5ca2b5cb35ca5cb2b5cbff2b5ca2c2e59ae52e57f95ae5161728b0b9456b9656b94585cbf2b5ca2b5ca2b5ca2b5ca2b5cb2b5cb35ca5ca35cb5cb2b5cb2b5cbff35cb5cbff2aae56cb0b95fe56b95fecaba05d4123552674e3bad48a9d373031554e1127497febaf30f887e332f18e2831290966285e38c9662f1cc5622b8ccae51ce0cc394994ac60e30e385623158838d3158c90e3243c90e31588563312904a53090c2422b1290c3e21f88c7e20f8cc3e33f8cc3e32f88b0307958c1c617c8c1c56307187c41f19607e230f8c3e230f883e32b0f88b01219848625215848658090cb0121160243f3e3db92c71e586e0db96e0adb936e38e2c371e56dc1b72dc1b72dc79b70dc15f1a586e4b0dc95b7056a69a9aa69a9b5b9a9aa69a98a61a9aa61614c3ad94d3532b63adab735314d3532b636e5b836e1b8f2c3706dcb706dc37056dcf9b72dc15b70586e4adb92b6e0b0dc1b72dc9b72dc95b726dc370586e0adb92b6e0b0dc95b73e6dcb706dcb726dc373e6dcb70586e7cb0dc1b70dc9b72dc15b73e56dc1b72dc7961b82c37256dc79b70dc161b82b6e4adb8f2c370586e4adb92b6e4db96e4adb82b6e4adb82c370586e0b0dc95b726dcb70586e0db86e3cadb92c3726dcb726dcb726dc37056dc1b72dc961b936e5b9f2c3706dc37256dc7fffffff063e30bcc78d1e34c5cca4f0c5cb8d54de87b760cf3598c4e3555e08dd6c172cd6dd3cd4de8698c0db374868c4716cdcc5ca75b0c5cb1728d19a4668cd8c23fca1b1b323fd6a932ecd19a2c0b946bc1233462e5233a71fc8e271fe8e268e11fc68e2fffbd2c4f081f03160cc0ff6d7863fb5d7d5ff5a2a8e27e69e6be56f1a7e69e69e6f1af1a57e6bc2b78dff3471471347147034704703471470347147134704703470471347147134714712c2389a38c7f1611c0d1c51c4b11fc68e28e0584712c2389a382381ae52e51ae5ae51ae5ae59ae5ae5945cb9ae52e596172cd729728d729728b0b9456b95e157280772ae5846e5046e5c1972c19728237281972bc0ee5dcb832388463881c708e2118e0071c23801c708e0071c63801c708e2071c23801c718e0118e00c8e2071c23801c718e2071c23804638e11f1bc19e330af1bee0cf1bc23e3423e31a0cb940cb95c23728197281972b03b9772ab065cb08dcb065cb708dcb08dca581dcab940cb940772ae57d5fe0cf1908f8de0cf1a15e3411f1a15e35fd55423e3611f1b5419e317f5e11f19f08f8d0678c833c6423e33f0678d81f8df1b5f33a38e8f3e1d21d43b49168319d0eceb83d0ece2c92270d155ae00e1856b28c69d355ccf736748c513290cda0f8b20eb808b24a844e99ee65219a9462891b3a65211c59044e9b41e44e96115532275155d151d3a33a38e8e33a3ce8f35a08b3232cccb3228599ccb322ccca8b419bf1df119f11f199f13f11bf13f1143e2161f88b113a5589d389c89d2c44e162270a44e3cae270da75a70da71a74b0d3a6d38d3a6d3ad386d3ad3856d3be56d3856d386d3baae56d39e56d386d38d386d3ad3a5355c56d386d38d39e6d38d3a5869d369c69cfef95b4e161a77a56d39e5869d28d3af2b69c2bd56f369c69d2b69c2b69d2ab4e1b4e34e1469c1b4e34e95b4e79b4eb4e961a77cda71a70da71a730369c69d2b69c2c34e7961a70b0d3851a706d3ad3a56d3a56d386d38d3a5869df2b69c3d5669c28d3b2c34e961a77ffcada73cada70a34ef45869c2b69cf2b69c2c34e95b4efe8ada70da71a74b0d3bb2c34ef961a77ca8d385869c2c34eecb0d3857665ffe58b322c599fecb16645766658b32ffe73fcb166657665e7665666766766458b32f2bb32e313316f31e1f6ee56bfff9beaf3144a96237c0851329f118e4335288e4333dccd9d35288d9d22908cc38248ccf4e183cd4a32908d4a3a588d4a33dc8c5132908c513528cca42528cca433dc8cf72290cca425288ca43290cdf03290cd4a2290cc5133dc8c512fffbd2c4ff03f49152ba0fffc5c651b59801ff5a901448cf72290ccf733dccb07b999484a511948428998a242891948628916144ce90e908ad448d44d44cd44d448ad448a2894b0a27e585123513a432ba42d95a8916144fcd44d448a8a246a24a266a24a2452909e58513f849f1c22f8a117c406f8df1831f1031f101be37c607f89f1845f1831f181be37c6117c606f89f101be37c606f8df1031f101be37c508be2037c4f8e117c6117c508d1308d1203a274482344b0651306513065138468941944c2344c2344a0ca260744a8901d12a270651383289c0e89d12f83289e0ca258468941944c1944a0ca2508d138468904689b8468941944e11a278328901d13a260ca2583289e11a2781d12a24f83289832890468984689032898328942344c1944e11a2706513f83289c2344f06512a8234481944a0ca260ca258468941944b8328976e11a2584689feae11a244c414d45332e313030aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf2aa8207219b3a45243318a27c791a946a519a4c849198c1c7a7997c65f119fc47f19486126d651aae67f1a7c6517e21587c4617c1244661c9246661c124666ab9aac66ab0d3a66ab35966a082822634e2820566ab19aaca0896069d2b355cc69c5040acd563355cd562c0d3a574845144a56a24748748656a2658a4337e23e233e33e22c1f1159f119f11f1959f199f13f11bf13f11d21289161448b14847486a246a26a27e51449e585132c28981d13a2611a2411a260744e89832890328901d13a2708d1303a2544d82344e0ca240744e8981d13a2411a25846890328981d12a260744a890468903289e0ca2611a240ca2611a270651283289784689c2344c2344c234482344c1944c0e89513f8328981d13a2783289c0e89d1206512ef0669d8334e78474ec0f4e69de0cd3a11d3807a774ee11d3abc19a77ea7c19a760cd3bb419a7019a73ffff8474e8474effffc19a77ff08e9db3ffffd6bf9913a8aa1f9eb1631445566a510a2472198a24777c28226d65359675c09138644e11387163570651a0f9c59044e1a2a88aa14455e67b9948667b93e066ce98a26644ec592644e913a6d0722aa51a0f142274644e22aa644e913868aa1138644e341c644e113a552274aa44e1a2a844fffbd2c4e581eb5da6c00ffad4867d3597d5fb5f98e18d3834e19aac34e18d3834e18d3a34e958d3a581a74ac89c2b2274aa8aa9913a44e15913bfe644e113a634e0d3a634e0d38634e1aade5634e798d3834e158d3a581a70ac69d2c0a2662890a2456289958a245628998a2628998a24289958a27fe65210a27e0744e89046890468942344c2344c1944825448234481944c2344e11a2503a2544c234480e8951206512832898328901d12a240ca240ca270651306513065136e11d38c11d3811d390669c08e9c03d39a7019a7207a774ec23a740f4ee9cc19a7423a7607a734e0474e8334ee11d3a0cd3811d3a07a774e419a740f4ee9d03d39a7611d3bc19a7019a7023a7207a734e01e9cd3908e9cfe0c22742244ef83089c7089139f06113bf088d39fc1834e42234ebc1834e60c1a77f060d39e111a77c1834e84469df6c2244e550000001fcb08e06636ca8663496e6fe26366634fe069b4c32673aeae673a9b6586192b1cc33b73b63411a5531f94112b410383d62731f86263626626331b31a34b731a317e17e34b64b732982992c2a69594c194c94c795a089a0831318fca081a088fc9625e3979212b484ad2134825ef2be70ad203979203485203481213481203485212c24256d93e6b64db2d92c364db2d836c364af9856d82c360f9ad92b6c79b65b06d9e61b61b26d96c15f30db2d93e6b64db0d82b6c161b0589079c8243e7219015c80ae40720901c82407219079c8240720909c864056d92b6c1b65b056d8f36c360db0d836cb64b0d82c360adb056d82b6c9b6798586c961b056d92b9095c84e43202b9016243ffe589095c84e4121f2c480e4121390c84ae4057212c484b120ff2b907f95c87cb121390c84ae42589095c84ae425720390c80ae43e58909c86407219016240589095c87ce4320390484b120f2bbfff962fe577ef2c5ffcb17ef2c5f8aefc58bf9dfafde58bf962fde58bf1dfefe77ebf15dfcaefc577ef2c5fcb97d859c2ab88e7fa3cb0599194842891be04a51998724911aaf47a799fc43f19a7c4ff11978c122992ce71415948456a5119fc61f19553e232f8cbe232488c393248cc393183c60e31a70d5631a70d563355c69c3355cd573144c5123144851333dc8512314485122844e4d1554550a11383227089d2b2270afffbd2c4ff83f1c956d46f779446f42a9881ff7690d448d44e908d449448d44d44cd44d44cd44d448cf8df88cf8cf8ccf8cf8ccf8cf8cacf8ccf89f8cb07c6583e232f82f9360f2f92b2f832f92f932f92f82c17c960be4cbe4be0acbe3cef9be0ef8be4ef8be0ef9be0ef8be0ef8be4b17c15df258be0b17c1df37c1df17c9fc7f11fc5f115fc457f19fc7f1163e23f8fe2f2c7c47f1fc457f1963e32bf8fcaef82c5f277c5f277cdf277cdf058be4b17c79df17c15df077cdf077cdf058be4ef9be3cef8be4aef9f3f8be22c7c5e57f115fc457f1963e3f2bf8cfe2f8cb1f1163e33f8fe3f3f8fe33f8fe32bf88b1f115fc457f1963e32bf88afe22c7c458f8cfe3f8cb1f1795fc5e58f8cb1f115fc67f17c7e7f1fc458f8cb1f1163e22c7c657f179fc7f115fc457f17963e32bf8cb1f19fc5f19fc7f179fc5f1963e22c7c658f88b1f195fc47f17c457f115fc67f17c658f8bfcafe32c7c7e57f195fc658f8d5f2a2944630705f26c472af66abd8c1a661c9872693205f069320c1c510881978e4b3192463071a4ca49199e9e7a71987017c18c1e17c19c62b198dc2b118dcab11d21a891d2152179d21d2195df1160f88cf8cf88df89f88b14867ee4a25fe56a246a26a25e6a25485e6a26a27e67c47c5e67c47c667c67c6567c5e583e32b3e3324324232422432b243324324232422432c12199211219921252992112116090cac908c90c908c908908c90c908c90c90cac90cc90c90cc90c908c90c90cc90c908b048664844840c5f2115f00c5f108af8035f2be2115f18457c6115f20690d210452101a4294a1148406909218312140d21a4308a4208a420624281a424861148406909210452101a4348508af9c22be206be57c0317c8457c8457c422be60c5f2115f20c5f1035f0be418be2115f20690d2181a424840c4840c4840c4840690921e11486114841148606909210452181a43484114860c4870348490c229080d21a4208a430624208a4308a428317c0457c422be40d7caf9062f9062f9035f2be40d7caf8f062f98317c8457c0457c6115f3035f0be018be422be3fffff08d12f2c3d10653614da6a7ba2e442a7a1a9eea7b9a3362e518b971aa9445cc6374b0f2564019957055c1437be63748dd2653694d863c68f1863c6adbc6b6f8f1a53cdfffbd2c4f103f43180ca0ffacdc623b25881ff59f847e6be687e68f1a57e6857e687e6af187e6be687e69e6a6f1af145478a3f3578c378d78c378c78d378cf352c3c61478d1bc63c6961e34ade30adba4dba0d9bcaadd2566cc583672b36633676e834704712b8fe38fe4702c2389611c4ad1c4d1c11c0ad1c0d1c51c0ad1c0d1c11c0d1c51c0d1c11c4d1c11c4d1c11c7cb08e3e584702c2389a382389611c4b06cc583672c1b319b39b399b31b3f959b399b31b3959b3960d9ccd9cd98b06ce66cc6ce66ce6ce118e2071c238c191c4191c7038e11c40e38c70038e11c4191c4191c40e38c70064710647006470038e11c0191c40e3847084638e0c8e0118e00c8e00c8e20c8e308c718323804638046388463881c708e20c8e2118e20c8e2071c238c191c0191c0191c0231c40e38470c0e38c7008c708323804638c0e3847108c7108c7006470606470c231c60cf1bf57ffffdffffff846e5e0cb94a00002f30be4c3831084420332746f434224bc73259824431839265263070b039c183701c6961c14d2938a4eb9158cdce0e30eb95588eb8ce3cd58ce3cd589588cbe648cd83cbe0d83f0e0e48a48cc90c90cc909c14c909c14d295290cbe248ccbe1838d83cbe0cbe183cd83cbe0cbe1838cbe4be0cbe4be3cacbe0b05f2569485648664844845694a64864846486487fe6dc3706dc3706dcb706dc37256dc9638f2c370586e4db86e3cf8f6e0f8e6e4f8f6e4db96e7cb0dc1b72dc161b82b6e3cdb86e0db86e3cadb836e1b82b6e0b0dc9b72dc961b936e1b836e1b82b6e4db86e4db86e4b0dc1b71c71a9aa61d6ea615a9856a69d6ca61a9aa695a9856a69a9aa6f95d6e56a61a98a69a98a69614d2c29a56a67962432b90fffcb121f962422c485e572196242f2b908e43908b12115c87e572115c865890bcb121f95c845721ff9c8521162432b90bce4290ce4390bcb12116242f2b90cb12196243f2b90fce42908ae432b90ce4290cb1211c85211c87211c8721f95c85fe5890ce4390cae432c485e572115c87fe572195c87e58908e42908e43908ae43ffdbf587ccf8af88c7054224d7aa4ba8d7e30f8ccfe21f88d57a248cc2f80be4ce281294b04b319c5097518e0a4b3197cfa79fa7e1c197c97c9fa7307997c17c197c61c9df1df119f11f19df15fffbd2c4f303b38556ce4ffba9d6c3a41945eff822f199f15f199f1bf199f19f19df15f1160f8cdf8cf88ef8cf88cf88f8cb07c467c4fc66c1e5f065f05f265f0c1c6c1c5f265f25f265f05f265f05f065f25f065f25f26c1e5f256c1fe582f832f860f31b838d31b91b931b91b931b81b82b1b931b81b92b1b831b938e2c0dc18dc1c695a5279921921992112116090fcd295290c908908b048464864865824332434a531b81b831b81b931b81b92b38f2c1c7160e34b0372563705838f2b1b831b81b831b91b82c0dc9606e4c90c90bcb04845824232432432b24332422432b2422b2422b24332432432b2422c1219921121f960908c908908b04846484485e64864845648658242f2c121959211592116090bcac90cc90c90cb048664844866484486564866486484564846484484671c3706ac6371e637071c6372370637237063723726372372637237063723706370372581b931b81b82b1b82b1b831b91b82b1b92b1b82c0dc959c7158dc98dc8dc98dc8dc79606e7ffffeef34bdd4378ce2398c633b8a623188e23d8a62338ae23578c737dd5f2c1c65771985e3d98f6d59abc17163c634bd2f32248939ed2e32232137512e3751d5375488f34bdd534bd2f32208939e92f32212f32248934bc892b4bcc88224d2f220ac882c11269711058882c4495c41c44495c41c4c415c415c4162a0ea514ad14ad14b0887508a68a8bfe75088584434545344a8345a82c221a2a21a2a29a2229a2a29a2221d4a29d4229a2a21a2a29a2a215a21d4221a2a29a22295a279a2229a2229a2a29a22216114ad14ad10ad14d1114d1513cd1110ad14b15268a8a56885689e5844345442b442b4534544345452c229a2a29a2a296114d1517cd1110ad13cd1114ad14ad14b08a68a88568a568be68a885688588938988f2b88f2b88f2b892b89f2c447fff95c496220ae24ae23cae20e2624ae27cb11056c5e5863363622c3115b115b19b1319b13115b19b1b11b13195b116188b0c5e5863f36263f2c3195b11b1317f96188b0c60c44ffff84513fe0c4404513e0c44fc188908a2708a27cc484e74d866254aec44c97d36cd860484dd5ce74b073a64bf12a69b424265841b261ac9585825e312039c325e894339d757312025f2b619312139c3120120325f4db31201213121fffbd2c4e403eff9ace40eeeb7c67f361b01ee56f01203120120312125e3121120325e25f325e4da2c12f192f1ce18909ce996106c160730b01b063981b063981b0580d9f2b909c8240721909624058901c8640721901b679a586c1b61b056d92c363cb0d92b6c795b63cb120390484b121f2c484b121f2b9095c84ae4058901c86405721ff2c484e4121f390484b1212c484b120f2b909624056d82c364db2d936c360db2d92c360db0d936c364db2d82b6c95b64b0d8f2c360db0d92b6c95f34b0d82c360b0d82c364db0d936cb64db0d8f36cb64db0d82b6c7961b2586c15b60b0d92c360db0d936cb64adb2586c15b60db2d82b6c79b65b056d92b6c7fff961b3e56d936cb64db2d92c364b0d82b6c161b3fe6d96c95b60adb211907846400c90c192006482072190c232106484232006483e0c90c1921c0e4120064802321c19218464308c841920f846401190c1920064861190846400c9060c908324384641c192106483f08c842321af3210329369d2693340190343f32830fa66d366d89d35569b2332843e355643f35569b2389d66c327a1d4346c27a33c746c2882d31910ba2b26937840fa321055630fb210343f32832103292b3292b3292b32830fb210321043e3210211321121030fa0fb3843282b3e8f28840cfa3eccfb3eccfa840b10819f47d99f67d99f70899f47d19f67d15c2267d9f7e7081f467d1f5e567d99f47d159f667d9f6583ecacfaff2c1f4583ecae1133ecfa2c1f6567d159f467d9f667d9f6583efcafefcafecafe8b1f458fb2c7d9fd7d15fdf95fd163e8b1f457f657f657f7e57f658fb2c7d963e8b1f458fa2bfb2bfa2bfa2bfa2bfaff2c7d95fd95fd7ff95fd163e8febe8afe8afebcafecfebebfffcfebebfcfefebcb1f458fa2c7d15fd15fd1fd7dff9fd7d163e8fefecb1f458fb2c7d15fd163ebcfebeffffcafecfefe8afecfebecafecb1f658fb2bfbff2bfb2c7d95fd9fdfdff9fd7d1fd7d1fd7d95fdffffff95fdff9fdfd963ecafecafe8febebcafebfffcb1f657f47f5f5e7f5f7fe57f67f5f47f5f5e57f7e58fbff2c7d15fd163ebfcb1f657f7fe58fb2bfa2c7dffff9fdfd95fd985e171611230b82f3a39f7357a8e30b91337c8cc31649334495e331d13324c583248cd30bc7a37d8c630b8c73248cd33301d31fffbd2c4eb83f475b2d80f7774c5b935dd81dd66d8609331e8c630bd1230bc7b30b87a31ec2e2b578c7a44cd130bcb063985c3d9602f30bc2e2c05c63d8f666305e61705e563d985c17985e179aef456bcd7ae2bf46b97961795ae35eb8b070ec1d33a70b070b070b073cb070ced9ff2b5c56bcd7ae2b5c585c6bd7ff9af5c56bcb0b8ad796179617f95af35eb8d72e2c2e2c2f35eb8d72f2b5de6bbd962e3bae2c5e577f9df79dd7162f3bee3bee2bbbffffcefb8b17f9df779dd7962f2c5e577ffff9dd795de57715de57715de58b8eeb8eebcefb8aee2bbcefbbcb177f95de58b8efbceebbfcb1795dfe77dde77dc5777f962f2bb8b17162f2c5de77de775fe58bcaee2c5e77dc775c77de57715de5771dd7962e2c5e58bcaefff2c5e58bffcb17795ddfe58bffcefbfcb17f9dd715dde57715dfffffe58bcb177ffffffff95de5777ff95de577962f2c5c57715dff31a71aca3861eef93355daca37c0a43335288f7337c094a12b3dc8c2f91838c92255e8eef81a70d4118610c2f83d38cf4e248cd26530e4a0a27285214d9d22908a86ab1a822a08160d5636b28d5631a75acb3355d41033558d572b1a70c69c1a74d4111a74b034ef98d3a34e9d21289f9d21a891d212899a892899a89a89f99f11f1962f88cf88f88acf88cf88f8cadf8bfcdf8cf88cf8cf88acf88df88f88acf8ccf8df8bccf8cf8cacf8ccf8cf8ccf8cf88acf8ccf8df88cf8cf8bccf88f8fccf8cf8ccf8cf8cacf88cf8cf8e117c414f8a06f8bf101be37c6117c4137c4117c6117c7063e3063e2063e2037c4f8c23f8823f8e117c406f8df1845f1845f101be27c4117c40c7c508be2063e3037c4f8c19f8822f8c0df1be20651203a2744a0744a89c194480e89d13065130651203a2544c1944eb81d13a260ca240744e89f853e3418f8818f8818f8c22f8823f8c0df13e381be27c606f89f160c7c6117c7037c4f8c0df1be2037c6f8c0df1be281be27c606f89f1831f181be27c40ca2611a240744e8983289046898468903289419448194480e89513832890328983289c0e895120651281d13a240744a890468983289c23448234480e89d13d0eaf5c19a76dea8474e8334e2bffef0669dfffffd5e6498b0751af860e372684a86587c8ccdd48c59074cb41b8c6e358ccc160d08070fffbd0c4fa03fa5daac20ffad4c5bcb45e01dd62d0d43164ad433164933165092b24cd09248c58164c93420c59164c1c160d09160ac923420923164583074cc2c03860e0b2562c79601d3070593070932b074c1d070ac5839614d4282b506a029840a61429cb0a585264489608990225644c8bd32040c8912b206408991225644b0f4c81032240c81032240ac816081608191205640b044afa7de796387de7963be7de95f4af858e7f96225703840e302c44b11f38c3cb1038c4e312b8f962070895c4b1d3e70b1c3e74fbd3ef4fbc3e74b1c3e74b1d3e70f9dff2c73caf9e58e79f79e7def95f7cafa58e95f0b1d2be16387ce95f7cafbe58e95f4b1d2be163a7de7f9f3857d2be963a57c2be95f0afa7ce15f4afa7ce1f7857cff2bef9f3be57dff3ef0b1d2c74afa58e963858e963858e963857c2be1f7a57cfff2be95f0b1c2be1639e57c2c70b1cf3ef4afa58e95f0afa58e9639e7ce163858e963a7de15f4b1cf312012035a04ac34ad1cd31cd3b635a05a0322b47131991992c09a982989a960398c650398c3612b0cb08edcc730730cd34418c1d4660c1d4664c48097cce70e70ce74484c480480c360360c734364c730364b039a65841b265841b2561b0580d92b0d93831d4acea7063a19d0ea707cc99d4ea63948958e0c703831c39bcc723931c244c703832994cb05232994cb052ff2c14cca6c3f2b29160ea56742b3a19d0ea6753a159d0acea56752c1d4cea7533a9d0cea74fff2b5015a80ad41e5850f9a8541ffe5850959d4b074f2c1d4ce8752b3a99d0e8570633a9d0ace8583a959d7cce874f2b3a99d4ebe56ea6e8ea56ebe56e86e8e86e8e86eaea6eae9e587537474375752b7537575374742b742b74f375752c3a1babaf9baba95ba961d0dd1d0add4add7cb0e856e858752b742c3afff9ba3a1ba3a79baba9ba3a161d4add0e8280b1427434258a02ba02ba1f2c501d050796280b14058a03a1a12c50796284ae80e8687fcae83cb14058a0f2ba1fff2c5095d016287cae87fcb1405741e74343fe74143e5741e74141fe58a1ffff2c5095d0f96283cb143fe574258a1f2c28206c48311e6abd8c1e65f197c667f137c67e36a8226d65a82263f197c661f11fc667b99ee662899ee64d41099aaea089b5966ab98fc63f11a7c63f118fc4fffbd2c4f003f3f1a2e20f7375467ab55881ff5a685f198d3834e18d3ad6618d3ad6518d3a6ab99aae34e959aae66aba820634e1aac57aac58d57369cd56cca34e4b0d3856d386d3ad39fc2c34e1b07b07997cb07197c3071c91307997c17c160be0b05f2565f26a26a26585122c28915a89f95a896bfcd44d44cc90890cac90cc90c90cd294908b04865648456484648448656486582423242242324224333e33e233e33e32b3e32c1f119f11f1160f8cacf88cf8cf88cf88f8cacf8cb07c667c67c467c67c6583e3037c4f8c18f8a06f89f1031f101be27c6117c7063e2845f1418f8a06f89f101be37c4117c60744a890328960ca2411a240744a89046898328981d12a240744e8904689c0e89d1284689708d1308d1283289e0ca27c0e89d12c2344f8328984689032897f81be27c40c7c406f89f1845f1845f17063e308be3063e3037c6f8c18f8822f8818f8822f8818f8f063e3831f101be37c60c7c406f8df1611d3bff8474eefffff7fc23a77fff42af314d42032684ee3268340355666c332966d3328556332832830fb43e2c21f1a1f9081908a1f1a771a019341a01a7705d99348c898c80c819341341a1015b98a68a698a615b9ac515b190887d187d07d987d108190819479595b995b8a698a68a61595b15aecad746bb5d95aecd76ba2b5d9ae976585d1ae974579035d2e8d74bb35daecd74bb344220d112f344220b088344a20b088344220e5e89344a20d12893e2e22c311f1b11f1311b13195b196388f8b88d8d8cad8cd8d8cd8988e2624e2620e2624e2220b113e5710711127131271113e58893898838988388883888938989f2b88ff388882b89389882b89388882b8938889389882c449c4c415dd7962ebceeeecb17477776775747757658bb2bba2c5d1dddd15dd962efcb1745777e577458ba2c5d9ddddf9dd5d95dd95dd162e8eeae8b176577458bafff2bba2bbb3bbbb2c5d9dd5d795dd1dd5d1dd5df95dd162e8eeaebfcb17458ba2bba2bba3babb3baba2bbb2bbb3babb2c5d15dd962e8b17658baf2c5d15dd7962efffceeeebcc3e21f88ccb92b88d23a48e8c85e162ca10bc31838f4ed9a4ca17c9924617c987c67f119fc43f1187c63f11613e231f8cbe2309087042b259cc7050908cfe21f8cac7e230f883e332f88be230f8cbfffbd2c4e803f01956de0f73748691b259c1fedab8e231f887e32c07c6503e3987c63f1187c41f1987c41f1187c61f19587c7e7f17c657f19fc5f179fc7f115fc458f8bcafe22bf8bfcb1f11c852195c865890cb1211c872116242390a43390a42f390e432b90fcae42390e42f390a43390e42390a42f2c4865890ce43908b0dc961b836e1b836e5b92c370586e4db96e0adb936e5b92c37256dc1b72dc9b70dc161b836e5b836e5b82b6e0b0dc1b72dc161b92c372586e0db86e7cb0dc95b7056dc961b92c3726dcb70586e7cb121962422b90cae422b90cae43390e43390a432b90cb121f9c8521f9c87219c8521f95c86721487e572116243390a42f2c4865721ff95c8458908e4390bfcae43390a43390a432b90cb1211c872116242390a432c485e72148658908e4390c1890e0c48508a4284521c1890a0c484114840c484069092181a4348508a4383121422908189082290a0c4850624308af808af8ffe0c5f1fff8457c0457c5500002f317f4b633b769735a12c23ffd655317f7f1331bb28365417f312125f325e619317f98c331a17e317e31b3b294b62c18d19611611a5616199db0e698bf8bf9a5b8bf1a5b25b998d98d18bf0bf998da5b18bf18d98bf25b198d98d98bf18d1a5b18d958bf95a5b9afcbf9afcbf79617f2b5fcf1a5f8d7f5f8d7e5fcb0bf95afe6bfafe56bf1afebf1631b2b480b0901625f2c24269024072fa40690242690a42690a40690a406902406904bc58483cd2097cad202b483cd20484ad203481212b480d20484ad21f397920f2b487cb0909a429015a4256901a42901cbc901a429095b9be66c1b066c9b2566c19b0e6960d82b364cd9360dcd360cd8360b06c159b058364cd9363cb06cc237ec197ee11bf60cbf046fde11bf60cbf846401190846400c9081c86420c90046420721900464007219081c86400c9003243039048607219060720900464306484192106480237e832ff065fe11bf40efd7e08dfc0eff7f08dfc197f81dfefc0cbf81dfafc11bf40efd7f065fb065fc197fffffabfffff065f90403cc4102950c62707e0d6dd07e4c83d1044ce8107e0cc6a2954c6271898cc6a1044c41120f4c6541950c7f00c68c411189cc62620f4cc6b20f0d2ddfc4d9505f8cc68c68ad044c7e2950e0f47e4e0f20f0b0c4fffbd2c4ec813099a4d64f76b556e6315a95ff71bac56c4e56c4e63f23f25682068223f263f28226c4c3f2581f8341141131f91f92c0fc16189cc7e1040ac7e0ac7e4c7e07e0c7e07e7cb0821e563f0563f062422426240240624224256240581202b12131201212c090960480c480480ac484c484978c480484ac480c484978c484487cc480484b02425825ff2b1212bbff9dfefe77fbf95dfcb17e3bfdffcefd7f2c5ffcaefc77ebf1dfafe58909c824258907f9c86425720390c80ae4058901c86425720390480ae4057212b90f95c84e4321f2b90962427209095c80e41202b901c86427209016240720909c864257202b909c82405721390480b1212c480b17e2c5fcefd7f2bbf95dfceff7e2bbf162fe577eff2c5fbcefd7f2c5fcaeffe58bf95dfffcefd7e2c5f8b17e2bbf9c8243e589096241e5890962427209016240720901c864057202b9016243fe589096242721909c8642589095c83ce41212b9015c80e41212c7e3fcaff3fffffffffffe57f9ffffffff2c7e55f314d6f4319169c334141731d5320308946c341734134170ba33211d5332112f2c0b198f18711897990984413d984493d9a0b85d98c80c818c81349a995b1a98a69a98a6962b633ea1133ecfa2c1f467d9f458537cd4d534aeb62b534c894b8c894b8d2e4b8b0441a5c44f9b1b11b1311b13115b11b1f11b1b11b1f19b1711a2d41a2a279d42295a21a2a296110ea510ea510d1510d8d8cb0c4586336263363632c311b1319b13115b11618cd898bcae20ae27ffcae23fce2223ce2224b111e71311e577658baff2c5d95dd962ecb17458ba2c5d95ddf962e8aee8b17458bb363622b63362632b63362632b63362622b632b622c311b1b11b1b11f1b115b11b1b195b179b13196188b0c66c6c67131058892c44795c495c41c4c495c49c44496224ae23fce2623cb11258882b892b89ff2b88fff2c441c4441c4c416224e2624b112571057107131271311ffe5712571258883888938989f2b892b89ff38889389892c449c4c4f96119a39a1cdee361e4a6d3914c8ff336348ff31534d6c2b563cc6191d5cc4db0978ca5507e4d09920f0c8022ae4cd6c1534c2980a60cdef1ba0c3660d98c3671ba4de31e28aaf187e68f1a6f1af1a54a6d33663672b6e936e836734714712b8ff38fffbd2c4e483ecd556e20f776ec706aad981ff75f8ff47038ff4712c47f1594c194caa6194c94c994c14c194caa6194c94c15a08958fc18fc0fc1a080fc9b132089a08a081a088fc158fc98fc8fc98fc8fc98fc0fcf98fc8fc9607e4c7e07e4b03f0563f2581f934101f831f91f92b41031f841031f91f82c0fc1607e4c7e5044c7e47e4ac7e0ac7e0d0407e4c7e47e4d0447e7cd0447e0c7e07e0ac7e0c7e07e0c7e47e4b03f2563f263f23f063f03f0581f9ff2c3f2587e0adf82b7e7cdf97e0b0fc1bf0fc1bf0fc9bf2fc795bf056fc961f837e1f937e1f9f2c53258a64e99a67ce99a64ae992c53274c53258a64e99a64e99a60b14c1d314c95d3274c53074c53074cd32574c95d3274cd3258d9bcb1b3963672bd9fcaf662c6cc7b36ce7b3ece57b3ff9ecdb316367f2c6cc57b3795ecc58d98b1b315ece57b315ecc57b395ecc58d9cb1b3963672c6cc58d98b1b31ecfb3ff95ece58d98af66ff3d9f663d9b662c6ce58d9bcb1b395ecc58d9caf66f2bd995f31a74d5738745265324902f836f8cfe233f8d3e33674ca43367494a23248c2f930be02f831f893e334f8c7e232488c392a0c1c661c124657ee67484a267485ee46a25ee47ee4a2457484748548656fc667c6fc456fc4587e23512a422c5211a89d211a892899a89a8919f1bf1943e2f99f19f1160f88acf88df8df8fcb07c66fc47c7e583e22c1f1f9a52121192125219219219a5225299219211921a52f9a521219a521211a52121997c97c960be4cbe5838cbe0be4acbe4acbe0cbe4be4acbe0cbe4be0b05f265f05f3e577c1df17c1df37c15df1e77cdf058be7cef9be4ef9be4ef9be4b17c962f92c5f2577c95df058be4ef8be4b17c1df17c79df37c962f83be6f83be2f82bbe4b17c795df0577c962f8f2c7c47f17c7e58f8bcb1f115fc7e58f8bcafe22c7c47f1fc7fe7f1fc657f1f963e33f8be33f8fe22bf8cafe32bf8ffcfe2f88afe22bf8bcfe3f88fe3f8cfe2f88afe32bf8bcb1f1163e32bf88b1f17963e2fff3f8fe32bf8cb1f11fc7f1963e3ff2c7c5e7f17c5fffffe7f1fc7fe7f17c657f1f963e3ff2bf8cb1f179a08f40992f5881a6d30c9b137401a08a089545f8b131a56ca8731afe2696ecaa73182fe68234aa63f10787078c4e74a83f0563f063f0c4e70798d674a8820fffbd2c4e783f1f556c80ffbadc667b3da41ee572078d43f06822820682082056c4fe682082063f23f0584112c0fc158fcf98bf0bf18bf8bf198d8bf960c68acc6cac5fffcd0447e4c7e07e3fcc7e5044b03f27f8fc163f057f93fc7e7cb1f92bfcff9fe3f27f9fc9fe7f257f82c7e4b1f83fc7e0aff3ffe58fc1fe3f2577f2c5f8eff7f2c5f8efd7e3bf5f8eff7f3bfdffcb17f2c5fceff7f3bf5fbcff1f82bfc1fe7f258fc1fe3f058fc9fe7f07f8fc79fe3f3e7f8fc15fe0b1f92c7e3ffcb17f3bf5fcefd7e3bfdfceff7eff3bfdfceff7ef2c5f8efd7f3bf5f8aefc58bf162fc77ebf95dfcaefc58bf60cfc047f207f8fc833f1067e211fcc0ff3f9c23f9067e611fc033f011fcc19f808fe60cfc033f108fe419f9c0ff1f9847f007f8fc847f011fcc19f803fcfe419f8c0ff3f9c19f8067e60cfc047f303fcfe703fc7e607f8fc423f808fe3847f00cfc033f211fc047f007f9fc847f381fe3f3833f00cfc833f3c23f9833f103fcfe40ff1f85f34b617e36544b7317e7f1378c69630d95a03b2898d331b7f02b39c325e619325e121375712131cd3b732c20d931cc697315c0a02c16b990d8ae198da5b98bf25b998db2a18bf18d9a43ce9a432f9a40901a412f9f39ce9f3b2f9f392f1a42901612034839d2c24269024072fcbc690242690a406d96c9b65b26d86c95b60db0d836c360db2d92c360f98d82be695b60b1cd36cb63cb0d936cb64b0d82b6c1a814056a1350283cebaa12b5015d73cad426a0509a814275cae1624057212c483fcb1212c483cb121fff2c483cd42a0350a80d415d350a80d42a0350570b0a0f3ae574ad4258509a85426a15015a84d42a0350574b0a02c364db2d836c364db0d936c360db0d82b6c1b61b06d96c961b3e6d96c1b65b06d86cf95b64db0d836c360b0d836cb64adb258e6961b1e586c95b64db2d92b6c15b64adb26d86c961b26d96c95b64b0d92b6c961b06d86c795b60b0d92b6c961b2586c9b65b1e589016241e5720390480b1202c484e4120390c83cb120390c84b120390c80e43212c480b1202c484e43212b909c864057212c484b1212c483ce4321000fe62a690046401957256d7c1a044401990048111a046401158532620814aa56208987383ab184bc3ab986343f81931a32a9863432a98c4e41e9907fffbd2c4ea03b2f156da0f7790863b335a4dff5618a2081882220898a9a14c9900655c985328111853214cf9c014019aa694c994c94c194c14c994c14c1aa62a6194c94c960a64c7e47e4ac7e3fcd0447e4b08225825e325e121312025f2b121325f25f2c090960978c4844860cfc847f211fc01fe3f011fc81fe7f20cfc01fe7f00cfc047f20cfc01fe7f00cfc833f20cfc847f103fc7e60cfc047f207219001c86420721900324108c800e432108c84192006480232103904840e4121833f011fc01fe7f103fc7e3e0cfc033f007f9fc047f011fc01fe7f007f8fc419f908fe308fe211fc047f00cfc847f207f9fc847f20cfcc0ff3f8067e7067e023f808fe40ff1f9067e211fc033f011fc833f3833f303fcfe3067e00ff3f908fe019f9833f20cfcc23f903fc7e019f808fe023f8e07f8fc40ff3f8833f1067e423f9847f207f8fcc19f9847f207f8fc033f211fc847f00cfc033f1a99d67fa933ccc957f313fea3d51f6a55f31a7069c3183d26534990c3934f8d3e236f88fe235f8a7e232f88fe331ce038c31588cb934a59673bc724235635633739738338f90f34a470437054a5324324237e3be32b7e333e2be337e27e32b3e333e23e333e33e233e37e22c2899a895211a89d21f0b0a2456484648648456484648694a648648456484582422c1211921a52159211592199219211592119211211fc5f17f95fc457f195fc5fe7f1fc658f88ef9be0b17c1df37c1df37c1df17c9df17c15df2577c15df277cdf277c5f277cdf3e577c962f93be2f9fff2bbe4ef9be4aef93be2f8ff2bbe0db96e0adb836e5b836e38e36e78d36e1b82b6e4db96e3cdb86e4f8f6e4db96e4db96e4db96e0adb836e1b92b6e0e4390cb12115c84721c84572179c87211c852195c84721486721c86721486572195c865890cb12179c87219c87219c872115c8477c5f0577c15df2577c95df077cdf0577c95df258be7cef8be4ef8be7ffcaef83be2f9f3be6f82bbe4b17c962f82c5f1e577c15c867214845890bfce4290fce43908e4390ce4390cb1219c85219c85219c872116242390a43390a42f2b90bfcb121ff95c87e721487e62898a2462891ee462890a26541f88c3e27f88c5121444f3c2144ccf4f0be4c2f93d3ccf72674cc5133dccd57a4990b061c985f217c9ff1fffbd2c4ee03f47d56cc0ffba9c6beb5d901ff59b0bf19df11f11bf1df19c9117c94922997c97c1c91b07645144c74874847ee6a25c3a4251335125133a4251335135132c5f19bf1bf19bf11f199f11f11bf19f199f19f195b07997c17c997c97c9b07307960be0cbe0be0cbe4be0b05f3e67c47c467c47c6567c667c47c4583e22b3e32b3e22b3e333e33e28457cc22be40d7caf98457c01af85f211c1e115f0b062f903c1ebe018be418be00d7c2f8062f9035f2be018be40d7c2f908af908af8062f9062f881af85f0115f006be57c8317c01af85f2115f2115f20783d7c0317c0457c0317c8457cc198380d7caf9035f0be606be17c40df13e3063e2037c6f8f08be2c0df13e3037c6f8a0c7c406f89f1031f16117c5037c4f8818f8c0e89d12c2344819448194482344a11a260ca2411a260744a894234482344e11a240744a89f06512c1944e117c606f8df1845f1845f140df13e3063e2f063e308be3063e3037c4f8f063e2063e3063e2063e308be2831f1031f142344aaf83289ff06512846897fffff08d130651354c414d45332e313030555555f2c113a6ce9be046f81a9467a1d687668aaa2a87e79a2a86d07341e6491924469329244513e39afc65f199484f8199ee6a5118a262899a94428999ee628918a262891be062891a94452118a2452199486a51191388aa1913844e9a2aa44e9913844e9a2aa44e1a2a844e9913a44e9511542b2270a1f14aef8cacf88a1f17cb0fc4585122b5123a43a43f2b513f35125132c28981d13a240744a8904e8981d12a25c0e89d1308d1203a2744c2344c1944819448194480e89d1275c2344b03a2744c0e89d1208d120651284689e0ca2703a2544c1944a0744e89c1944c1944e11a240ca2411a260ca260744e894194482344a0ca2708d120651208d1206513df03a2544e0ca260ca2613a2508d1203a2544982344fc23449ffc19a770669ce11d3b08e9c08e9c08e9c8474ef68334e230669cf8334ee11d3bedfe0cd39ff84b4e0474e3c19a737fc19a774fb7ffd1a8ac5ca3172d7853ebdc5cb2b5e0cd19b4668a2f083bc90bb3285d90ca6d29b0d1730d98e3545e10d7855e08c47023f8db3711c4a11fc32ec8bb23466cbb234668bb23172978328bc20ad7853466d19d32eccbb334674bb22c233450bb2fffbd2c4d583e9c98ec40ffad44632b35881ff5a9879a3345d915a336562e5128b9671fc8e068e28e068e08e068e31fc568e271fe8e25836733666e82c1b3959b3159b3159b39b749b3160d9cacd9ccd9cd9fcb06cc566cc566cc66cc6cffe566ce566cc566cc66ce6ce5836633666e93366367336736636e83662b36636e86e82c1b3960d98231c4231c4231c0191c4191c4231c0191c4191c0231c58191c20c8e2118e20c8e00c8e1038e11c0231c4231c4231c40e38471c191c6071c638846388463840e38c70038e31c00e38c70038e11c0231c40e3847108c71c0e3847181c718e00c8e2e0c8e2118e00c8e18323881c708e0118e211b940cb97f03b9572c2372af065ca81dcab97f832e5f03b9572c0ee5dca08dca03b9772c2372f81dcbb9411b940cb97fc1972e11b940cb94e11b940cb95ededde0cb956846e5fff09dcae12b960000001fcc2994b64d58f35b0cd6f1530d2d835b0d0220a60c31b2ca4c17e05f8c4b605fcb00bf18c303ab18eac30c98822208960c6b31040a55319544b630c6831b3195031b3200c29831534ab830a648022a0532581534c2990a60ac54c2c0532562a69602982c0a98614c05305640116031b305fc4b72b0c68b018d16031b305fc17ff2b7e3cadf92c3f0587e0df87e4df87e4f1b5fcb0bf1afcbf79617eff2c2fe6bfafc56bf95a42690a4072fa4272fa40690242690a42690242690240572f9a40901a409015a42690a40690a40690cbe690a4269024256901a40901a40909a42909a412f1a41ce9a42909a4090961202c5f8aefc77ebff9dfafde577ff3bf5f8efd7e2c5fbcefd7f2c5f8b17ef2bbf15df8efd7f3bf5fbcb17e2c5f8eff7f3bfdfcaefe77fbf162fc77fbf1dfefc58bf795dfcaefe77ebf1dfafe77fbf9dfefc58fc1fe7f057f93fcfe4b1f82c7e4aff1fe58fc95fe0aff258fcf9fe3f258fcff95fe0aff1e58fc95fe0b1f92bfc1fe3f257f83fc7e0ff1f8f2bfc9fe7f3e58fc9fe7f257f82c7e3cff3f92c7e4b1f83fcfe7cb1f8f2c7e0ff3f82bfc9fe7f257f9ffffcbf79dde6bf76bb87ef58ffffef3cf9bfdd65909587c663f127c65455e4d2641838c9224994c9221830c66c0ca4c0fa0ca4cae20e34c5632438cbc71290cbc638a4ad2642c05f0617c8c1c787124465f2c1fe7485485d3f72fffbd2c4ff83b74592d26ff796ce783199c1ff75a8a433f73512314c4212c15b9a1095b195b15b960be4cbe0be4cbe5838d838be4d838be0c6e4e30ce386e4d58ce38b071e563706370372582422c252960908c90d297cac90cc908908ac90cadb936e1b936e38c36e1b82c37056dc1b71c61b72dc9b70dc9b70dc162f9f2bbe4ef9be7caef92c5f3e577c15df058be0aef8390a422b908ae422b90cb12196242f2c4845890fce43908e4390ce4290ce43908db86e0db96e4db86e4b0dc9b72dc161b936e5b836e5b936e5b936e1b92c370586e0b0dc1b72dc95b7256dc1b70dc1b72dc9b72dc1b70dc95b7056dc9b70dcff9b72dcf9b70dc9b72dc15b70586e0b0dc1b70dc95b726dcb71e586e4b0dc7fffffffff95fc658f8fffffffcafe2ffffff390a43390e42f2b90ce43908b12195c86721c86721c85e5721796243f2c4845890cae422b908e4390ce4290cae422b908e4390cb1217fffff962f92c5f3fffffffffe58be7ffffffffcb17cd5f2c0a266f813e066289b3a462529c5265e39c50512651a4ca61c96096631294bc632f1cbc731294bc630e30ae532b8c90f3158c38f32438ae33158c1b82b0e34a8491985f04929924630798c1e3079978c71498948121184847141589486289948665210a2462898a26581448aca432c0a2462890a2456289958a27e58144cb1f17ff963e23f8fe3f2c7c5e6dc3726dcb726dc370586e4db86e4db96e4b1c79b70dc9b72dc1b72dc1b72dc9b70dc1b72dc9b72dcf9b72dcf9b72dc95b70586e0db96e0b121162432b908b12115c865890cae43fff2c486572195c85e6dcb706dcb706dcb726dc37256dc15b7256dc9b70dc161b92c372586e4adb8ff36e1b936e5b8ff390a422b908ae422b908ae432b908e4390ce42908e4290ffcb1211c8521962422c484721486721c86572196242ff2bbe3cb17c15df058be4aef82bbe4b17c95df258be0b17c9df17c79df37c95df277cdf258be3fcef8be3caef82bbe7ce4390ce42908ae42390e43ff2c48457211c8721962432c485e721c845890bce43908e42908ae43f2b90cae422b908ae43f390e432b90cb121e11a244c8532310ce157e3496d8d93103fcc48c61f831931cad5270ae8192a1276cb51950b27064a9958b034403a095cd245b3b7114c8a46353c2ce1fffbd2c4ea83f37d5cce0ff6d7c60934de41cd6691444353298d52a832342b64c8a324908d5644353aa8444a1cf46b3f9a6506a968b563fea8af41bb1a648798f1e63c898c266f07155e133b3428486c913c33670cf9a295866cf19e39485681a081a081a1e129c677e57e1a07cacd338ad120ecd23499f1de8cc44d0f8ce46e19e819c990a0fe52909c5101a089f871a3e54287b64d19551340e34117fed19e91222672049f133f1b24748b928d4a8f709b9371d2478a3a26e891e375d22fc75f375b28f33ce909bd76cecbc9301f81dc82ceab0a9713b93676594f58edb49da3bef3c2f3bb03b6b1cbdf772e8cf0b4730257481e26ecdc70de789b62ab46d344ae916a6e3981b8f916a586c6b29d8d916c6f3a6eb84df9bed5b98379ee61f52c72bd3d3dc87e821ca177e00791c393b87227f2cd69c7ddc7a067703cc3b0ee47dafcbe61fbad63ee01800661f807c0111c7079e00600181e7819600647aa47e30c10cc641634bbb8df69a30a24cd04093289c8cae19347bb8e0aea368b28d8ea232684cca8573291ccd40a33350ecc624a30995cd890738837cd083103010c969c366b18d326230e03d1b0c1a1c317908ca25031f8502c0b2c898684248150e4120d48b4e061269366e3a6e4269a868803069b4e9c149d4e930374461238afa008c638402091a80889ac8840afd213404097154d5215a622b3ded69d6804b9a641a640282a5500d598d64c98100a470c870a802590fcd274de84d350cb014ba7df57e00281aa52ce5e2c55733dceccb1da81986f825237da3552354c4d752de4b60161a862611a68063251aa618a71c381bcaa78ad160060880a19d761ac460168cb38280a22ba4826407294a76971400b370db81204d8111b8f344f102a8e2e36a8dae0369545055d5692f2ca619932e67782e235a17eb5aa3a58661da90d3b4ca588b5d4e50214d093204b8ac74401342cd035225f635d0f3639a0ba51c4e648a6f9554c0b385ced7393cb8cf34a6970a6b5ba5a6ed5a5a5d534bad56954bad5594cb6f5694cb795a354dda58cd3674b19b3a954bad56954bad5594cb7095592028b51774bdc5f541a2a0287884f4281658d330cc64c37028f90c0237c00d19e686807c2e76e46b7a60fc415882830e5341837c7077c6a1e61ac1664858156418b18fffbd2c4f28234520cec0e67178619bf8c199c3fa82898c416f157c0b2aa1a08eb2a42498c798ab00190bb440d8a34055cca2823337443517315c0a3e43008df023463a6680c44a04145d541a56555050f50c51751550e50d5165655505575344d90148c4b04b844f2580cbc28c30941d0128808c0c28a9890e38611942802e5abb7325d56e5d9a765618b8414088443052520e8c4002e3913005532a0c5b0af083a29c02e4d0e01ac3546c3805c20892c065e166015260121a3178ad6bb7265da54a5c10a804031921214708210972048e1862c885c42852520e8c4422dda0115e3427f6028360882dea6429528dc91a8ec94a92891e98050305180050a985124a81d488085970e60634c20061c54c4871c3084a5a82dfa5123ea732c0a8f2db5805575e0d11b0ae972bcbb522ad2a5c49513d288a9280bb96c32d04749fc894c24d10a7523635c282d52c08ee9955ca55d2fae14ec0c70e94c414d45332e3130305555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555";
|
|
3245
|
-
var
|
|
3466
|
+
const Is = "fffbd0c40003a861a6f64deb05ce8fbd1dc1ee6979000bf3230f3195138b950cbe3649439256307747d31c26065d09cfae70d799f0a043c6a90008c0101188082314680d008619c9079b61dc806a921a220095277a60d4131e44143d53814e10f4d06ba6491eb478900a8d59016632a23e0fa358875c770146cc650c1c499dcb9b0965d7500106c321427219428febbdafb2b5d76979a75ae40018d025f96f71bad4b0257666051808e5b74c34bf2db9660bb0e24b2a35886616f617013a24104242304600910b1130dc7b4e81750bb1216e880432ac0d75b0a2a1834f45e8e9a279a9c6c22cc9a7e3ac01cc5335e8c0d97180c960bad7998ce9ac025a2f1a0c888e02c46508045a96a20a60c91980100828a917425f96ddc64bc2ea19146c50b00bde68319005d85d10e462314ae197f0b48c74bfe986ced9dac3a9bbfad7e8f7ac2a525253c6e36cad4dd7c20e2ec4842dba61cbf30f0f7d628635005a66e63ec63560f22a48c694034a695617e603c12c05077310c0923018053379a48d1e921e409b28546c46619d8fa6c9b019ea20762d318e34c6291699d98662a61861204fda2a7933d57c1d023391f8605262a1598449c1ca332e084cb25a3198ac94666361b99f05c67c1aba0151b18d456ec8e0b4c667924153ba632409114cc587c7867ca8c047dcd7a834bc8d2a033a141df48ab82a803bd1a8651a215e356c6161b062114cb841dd89589b05f0d10ad255c4d70d8ad245e4abcd6b33fca8d6af5cc3db8d9244511ab2206a56c885690ad12cc1ba16308528d539daa40b22baf35eb61a7044a988132e926b754d82ea8ca85199ad5c42c0d62d35eb8d7301d56ef5b26c451748198c2a22c319b24ab67a246b186c8af0d54354c0957c342d9a2a4d7b3245e585c4d7254e107501450bb46abbfa38b2331996d9bae08953352c48af43d5c7b08b6572a44e0b11775fd8cbb2b0b0343230c6c5add2ca5ac8d549765977ff78e59659ca49adde749c6789409753bcff43d1a8d46a532da5a5a5a5a5a5a5a6a6a6a6a6a6a6a6a6ab671c71c71c6ae4141414140a0a0a0a0c2b06e0b039c1829859998b165991a5d2aa598e0a714183727471921e5721a1037a9c2fb7a1b9c0dc99c6ab19b821219de39219b82a521908908987d2ab1aab194159219cb31211fffbd2c42383f4bda0d20ffba7c624b3dd01eee938b82f149f14b82951c14d290908c90d294c90a598b0948572ce584a434a54a52b4a42c3829592199219219a52921160908d295294b1c79b70dc9b72dc9b70dc15b71e6dc37058e3cdb8e34db9e3cadb82c37056dc95f1e7c6f1e58e3cadb8f2c4845721f96242f2c485e7214865721f962422c484721c845890cb121f9c872116242f2b908e4390bfcae432b908ae43f390e432c486721c85e5890cae432b90ce42908b121f9c8721962432c484721c865890ce4290bcae432b90bcae43390a432c485e58908e4290bcb121f95c86721c865890cae432b90cae42ff390e422b90cae422b90fcb121795c865721795c86721487e721c87e58908ae422b90bcb12195c845721796242f2c48658908ae43ff390e43fff390e422c4865890cb121ff9c872196243f2b90bcae42fff2c48458908b12116243f2b90ffcae43fff2c485e5890bfffcae422c485fe5721796243f2b90bfcae42ffff2b90ffcae432c48460a40a6618626a61ce3d466883d6645657458106350e2d6321a39532150c231a421532413d3399952b690e8430cc534d4ad0638ad993418742c24072f7385897cae5e348120397e5e348521397e5e2b734cd8364b06c160d93364d82c0ea6838ea63a0e863a8e9e581d4ca0283cd5d284b050795942650143e6e1c1b87058706e5c95b9370e4dcb92c382b706e1c15d22c522ba7e574cae9f9d2a458a474a995d32c52ff2ba4574cb148b14bfcb14cb148ae99629795d22c532c533a74cae995d2f3a74ce9533a74cb148e9d2f3a74ce9d22ba474e99d2a458a674a99d3a65748ae9f9d2a474a91629962995d23a748e9522c53f3a74bce9d3f2ba65748afa9f5ea57d4b1d3cafa963a163a7963a163a1f5ebfe57d3fcfa742bea7d7a15f42bea7d7a1f5e9e7d3af963a9f4ea57d4fa752c74f2c75f2c743ebd3fcafaf963a7ff963a79f4e9fe57d7ce9d22c532ba474a91d3a674a97962996297f9d2a658a458a658a458a4574cae916299d2a474a995d22c522c533a54bcae915d32c522c52f3a548ae99629795d3f30c6831b320f483c329501f8331a98f233a001f9342646273295483d326307f03331098c307e52ae3189883d3186475630e704da30e744db320f0627329501f831040411307e4fffbd2c42383f3fdacd40ff6b68668b3dc81eeed7841031044a54318984112a8c4e641e83f26208082260fc0822560fc183f041e183f00fc183f20fc983f20fc983f20fc95896e60bf863460bf86365805f8c17e0c68ac31b2b5f8f1bc68d7fc68d7f5fcaf1b35f97e35f97e2c2fc585fcb0bf9e36bf9617e2b5f8d7f5f8ad7f2c2fc6bfafe56bf9e34bf79617f3c6f1bf2b5fcb0bf9afcbf95afc585f8d7e5fcb0bf611fc419f8f08fe7833f1e0cfcf847f308fe7833f1f067e3c19f9067e308fe7c23f8c23f9067e40ff3f8067e20cfc047f00cfc611fc81fe3f207f9fc033f211fcc0ff1f903fc7e423f803fcfe423f903fcfe00ff3f8833f011fc847f211fc047f303fc7e211fc01fe3f211fc033f011fc7067e40ff3f908fe023f808fe00ff1f903fcfe019f803fc7e419f808fe019f9067e40ff1f9067e211fc01fe3f3c19f8e0cfcc23f9067e40ff3f8067e023f808fe60cfcc19f8c19f9847f211fc047f011fc033f1067e60cfcf833f25808830881d435e33e33263062346d46d31d427b31d41d4346d3c633201d5308827a308846d351212e32267a39ea7a34b92f3221d537552f32252e2b4b8dd5c80c88c84e7a4bcb0ea9ba9e315a5e697baa644cf473da5e58220c894bcb0449a5e449612ff2c110584bcb0447991044191244160892b4bfcc88224ac882b2a4d0a114ca8114c44114ac442c089e562279588856c458633e362f3e362362623e3e3f2be23e3e32b633e263f2b88fffff2c44f95c47f96227ce2224e2620b11071310713105889389882c44f95c41c44496220ae23cae20e2627cb1127111257105889f2c449c4c416220ae24e2224e2620ae24b1105713e588838988389892c44f9c44416224e2220ae20e2223cae27cae23ce2220e2620b1105711e5712571271111e57127131257127111271313fe713125712588938988388892c4479c4c41c44416224ae24e2220ae20e2620b11058882c44ffff95c4795c4ff95c415c416220ae20ae20b11271310571271313e58882c44f95c49c4c4ff95c416224e2627fce2224e2220e2220ae20b111e57107111071111fe5888ff389882c03a18838cc99ca16b996b8501ad09db99db86c161e34cb0c730c6641d4c664f7cc570e54c570570cb08734d2b4b08ac360cb5c284c86c574c57428fffbd2c41e03f239a2e40f7370c65fb39cc1eeed980c364364c360730c364edcc360364db2d936c734f9bcd3e6b60db0d82c734db3cd36cb60adb27068399d732588319d20e7068399d20de5850f9d75405850796140575c3535335252353c32c611e1291a9e11614cd4d4cf0d4cf0948e8684e8684b14074140574058a12c509d0d09d0d09d0509d0501d050796363fcaf64af67ffcb1b257b1fe58d8f2b74375742b742c3a9baba15ba161d0dd1d4add0b0e9e6eaea56ea56ea5874374752c5096280e8680b14057405743e57407414058a12ba12ba02c50f96280b141e58a12ba12c5096280add0dd1d0dd1d0dd5d3cb0ea6eaea6e8ea58752b7537574374742b74374752b752c3a95ba15ba9baba1ba3a161d0dd1d4b0ea58742c3a7ffff96367ffffffffffffffffffffffcb0e856ebe5874f2c3a961d4dd1d7fcadd4b0e9e6e8ea58752b752c3af961d4add3cb0e86e8ebfe6e8ea587537474f2c3a161d7cdd5d4dd1d0dd5d4add3cc388588c9e8220c4b91b4c989388c58898cc5b4740c2a48c8c58c38ccb8898cc9ec220cc84c80c4b84bcc224754d4491b4c62988c63588ce2b88d2e224d2e224b0449f8f3d1a5c9719104499124415a5e6971106973aa58750d2e220d2e220d898cf8d8cd8d8cd898cd8d88ad8cd898cd8988b1c7e586336363f2c711b1311b1319618cd8d8cb0c6586236262363632c319618ccb8b8cbcbcb05c565c582e32e2e32f2f32f2e32f2f32f2f32f2f2c1796220ae24ae20b113e71313fe71111e5888388892b882c449b1b115b11b1311b13116188d898fcb0c66c6c45862363632b632b63ff2c319b1b1796224ae24b111e711125711e5713e5713e58882b882c441c4c4f9c4c4ff9c4c4f9c44495c49c4c416224ae24e2224e2627fcae20b1105711e5711fe7111071111fe57125713e57106c6c46c6c45863f2c3195b115b19b131796188ad8bcd8988b0c45862363632c319b1b19b131f9618bcad8fcd898cad8bcb112571257125888f2c44ff95c495c4ff95c47f96220e2624b11258882c441c444ffff96224b112571257105711e588838989f2c44d3045045310b0a932632e232630623562062316226236620e32c1b198850229885919194a88598220e81fc431160623589e23588622b18cde2988de3788c63588fefffbd2c42083f3559ee80f774bc682b4dcc1eee9782388c6278cb0b1161623388e32b588ac62398d633188632c0c46318c66319c46710c66310c66b1ac66318c46310c46310c46710c6563118c431f98c63199c63118c631960e3f318862f2c0c7e6310c45818cb031960622bc678f1163196319e3c658c478b1163179e2c658c65788f1623c58cb188f1622bc678b115e33c788f1623c58caf195e32bc5e71221c5885710e24438914ae29c58a71621c48a588a5714b110e2c438910e245f38b13ce2442b8a71621c58a5889e5714ae295c42c442b8a5713cae29c48858885714b110e24538910af115e22bc658c478b17f95e33c588af1ff9e2c678b19e2c678f1163179e2c478b1ff95e3f2c62f3c78fcb18bcaf196317f95e22bc7e5788f163f2c632bc5fe58c678f195e22c62f3c78bfcaf1163196317f95e32c622c633c58caf11e3c4578caf1f95e32c633c78bfcf1622c632c633c588b188af19e3c5e58c658c678f11e3c678f17ff96319829829986109a99a6b1319ef03a19ef0cc99150cc195d8cc99a683a18730f598ca89e99a615d995d2819fbecc9d755d95c54698a626980d26559dc71520c68357471520c6cc33075d8ea63a0ea68345468320e63a0e875d20c683a0c63aa0fe5841cd98664b0831a0e8318ea3a95a0e563a160752c20e63a8e86838e858418b03a160753148523309353148c22b14cb02918a42918a629160522b14cc5314cfaf52bea7d7a163a963a1f4ebe7d7a95f53ebd4faf43ebd0afa795f53ebd4afa963a1f5e87d3a963a15f43e9d0afa79f4e858e858e858ea57d0afa963a9f4ea7d7a9f4ea7d3a9f4e857d0afaff9f4e9fe7d3af95f52be858e857d4faf53ebd0faf53ebd4afa1f5e857d4b1d0afa9f5ea7d3a7963a15f43e9d0faf52be87d3a163a163af95f52be858ea57d4faf5f2bea58ebe58e87d7a15f42c742bea58ebe57d7ffcfaf52be9e7d7af95f5ffff2c75ff2be857d7ffcb1d0faf52c742c742c753e9d4afa95f52bea57d3cb1d4afa95f52c742bea57d0afaff963a95f43e9d0afa7f95f53ebd7fcfa753ebd3cafa15f42c743ebd4afaf95f5f2c752be857d7fcb1d5508000160382b0e0d954f0d94654deb7acc397acce7d10dea4f0d4b2c4cb02c4d311a0ad3134c0aa34c4ef33b8ab3059193460b03fffbd2c41a01f0c5a2f0aeeb34c619359dc1dde6682c04b32403834f43832403932443930e03932403932413c3240392c070648072561c9870489a7a48161c1b972587258726e5c9b87265e51ca2c65cb9cb2e65fe1cb94565ce59634a94ad21a44a584869529a4485694ad216129a54865cb1972e72e51962c65cb1972c565cb05ccbcb32e5ccb162b2c56b79acb1acb1aeb9acb1aeb9acb1aeb15ac6bae56b15ac56b15ca72485894e590e490b1295ca5894ae52b90ae539252c49e724a5897ce494b121cb2f9cb21cb29cb21c9215ca5890e497ce597cae42c4a57215c85894ae42b97cf9e4f9e3cb1c15f1e57c796393e38ff2be0f9e7caf92be0f8e4af92be0b1cff96392be0f9e0b1c15f058e0b1c796382c71e7cf3e7c7257c95f258e4b1c95f1e58e0af92be4b1c1639f2be7ce493cb127f9c9215c9e5721c9215cbfe72ca5893fcb1279c921cb29cb2f9cb29cb21cb29cb295c85890ae42b90ae42b93cb12795c857298701c1609034f2413901eb3094683091733344d033e0d132acaa34c4ee30957434c1313244382b398d3c4f0ace730e13d34f53d37ac3937ac3830e4382c07261c870648a786ca27a580e4ce244e44e4ace4ce0e4ce240ce240b072723226727058382b90339392b382b382c1c99c1c9c89c960e0ce4e0ce4e0b07067273e6727258392b38ff2c1c19c1c960e4b070670705838f2c1c19c1c99c9c19c1c159c159c960e4ace3ce44e0ce4e3fcce0e0b07058382b38339382b3933839396439252c4872ca72ca72ca57295c872485890ae53964f3965f39242c4be58e4af92be0b1cf96383e783e383e382c727c707cf07c727c73e58e0b1cf9f1c15f058e4f9e0b1c16382c727c7257c95f07cf27c707c727cf257c9f3c95f258e3caf83e792c73e58e0b1cf96392be0af92c7057c9f1cff95f058e0b1c16382be4f8e3ffcaf82be4b1c795f057c16383e392be0af82be4af82c71e57c796393e392be4f9e7fcaf9f2be4b1c795f3fe7c7258e7caf93e392be0b1c79f3cf95f257cf95f1fe57c79639ffff2c70a0800079603ecd71612cb09de71381f66aac420687e4226650cdc6176680617668061769dc58268332932930fb211343e211355621032115563328328343f0fa30fb0fb33280fb321021032112102b43e32112112b329fffbd2c42b01f3f1acdeaf777286a1355cc1eeecf82c1f467d1f5e7084207081f456c895977e65db2265d32265db207081f4583e8cfb3efccfa3e8b07d960fa33ecfb3fbfa2bfb2bfa3fbfa3fafa3fafb3fafb3fafb2bfa3fbfb3fafb3fafa2c7d963efcafe8fefe8b1f5e58fb3fafbf2c5d1dddd9dd5d1dddd162ecaeecb1747777477574577458ba3bbbb3bbbb2c5dff963ebfcb1f657f5e57f457f5e57f5e58fbfff3fafbf2bfa2bfa3fafaf3fafbff2bfbffff2c7d963ecfefe8fefeffffcb177e577658bb2c5d7962e8eeeebfcb17458bb2c5d1dd5d962ecaeecaeecb176577458ba2bbb2c5dff95dd15dd95dd1dddd7f95dd162e8aee8b17658ba3babb3baba3babb3baba3baba2bbb2bba2bba2c5d9dd5d15dd1dddd162e8eeee8b177e7f5f7fe58fa2bfa2bfbff3fafaf2bfbfff2bfa2c7d9fd7d7963ecb1f47f5f658fb2c7d163ecafebfcfefe8afebfffcfefecb1f5e57f457f7e58faff3fbfaf30e326333624e333632e231d546d312e1d530a8233323210b36ac7a31ec7a2c4f46eaba86318c46f18c67719c47315c6631ac46f19c658754c89224dd4c84f204bcc894bcd2f4bcd2f224e7a4b8ad2f34b8893220882c11056441a5e44191297160882c112644113e711125712588938989389893898838889f38889f388882b8838989f2b882c447f9618cb0c46c4c658633626336262363622b632b633636236263362622c319b1b19b1b19b1b195b179b131f9b1311b1311b17196188ad8cd8f88b1c656c65862363622c3195b115b196188d8d88ad8fcd898cad8cb0c45862363622c3195c415c495c416227ffcb11258892b8838989389892c441c4c416224ae20ae23ffce2620d8d8cad88b0c656c456c658632c31f95b19618cad88b0c5e6c4c66c4c7e5863362632c319b1b1f95b11b1319618cd8d88b11058882b892c4416224e2220b113e5889ffff2c4479c44415c415c4ff96224e2620b11257125710713125712571057105713e58892b88f38988388892c441c4c4796224b111e58882b882c44f95c416227ce2624b1105711fe58882b882c44795c4ff96223cae20ae23ffcae26f331e433b76dc30b95e3a3df73449133dd72835791335782f30bd1236a87a37d8c730b8c630bc7a331c2e357df730b82f31ec7a30bc2f30b87b344daa3fffbd2c41e83f005a0ee0eeb3706ce341c42bdd0003187a31e8c730b82e2b44ccc60b8cc61e8c7a31cdaa1e8b03d960c731ecc731ec7a30bc2f2b1e8c2e1e8b03d1ae5c6bbd16171ae5e6bbd15ae35cb8d72e2b5e7e97161795ae35ebcd7af2b5c6b979af5c6b97161795ae2c2f35cbffcd7ae2b5c56b8b0bcad715af2c2f35eb8d7af35ebcd72f35cbcd7ae35ebcb0b8b0bcb0b8ad79ae5e585e56bcb0b8ad79ae5e56bfcad796179ae5c585e6bbdff9af5c6b971af5c6bd7962e2bb8eebceeb8aeff2bbcaef2bbcb1795de58b8eebceeb8efbcaeffff2bbceeb8efbcaeef2bbbcaee3bef3beeffff2bb8b171df7962f2c5c58bfcaeff3bee3baeff3baf2bbceebcb171df795dc775c58bbcb17962ef2c5c77de58b8aef3bae3bae2bbcaee3bae3baf3baf3baf3bee2c5e77dde58bcaefffff2bbffcaef2bbfcaeef2c5e577ff9df7962f2bbfcaeef2c5de577162ef2bbcb17fff95de577960360c731e34da20e50cb58e4cd688b08d2b0734e5d9e30c730360b03306576576658639a61ae76c639a76c6b40958561b2695a76c561b0639a5847db58458360adcd2c58666c9b07615846e6d8658364dcc730dcc730cd8730acd83364d8f3361cc2c1b256e6959b258360acd92c1b1fe66c9b06e69b066c1b258364c741d4c751d0ad0631d47431d074f2c0ea63a8ea63a8e8563a160d83360d92b360acd82c1b2566cf99b06c99b26cf99b06c99b06c98e83a1607431d10631d4742b1d7cc751d0c751d0c741d3cac752b1d0ac752b1d0ac752c20e63a0ebe63a0e8563a18ea3a98e83a158e8563a958e863a8ea581d4b03a958e863a8ea63a8ea65094058284aca0f2b284ca1287fcca1287caca1ff3280a13284a1f2b280ca0280ca0280b0501594058280aca02c1405650960a02b284ca0280ca0280b050160a1f3280a03280a03280a1ff3284a1f2c14265014258284aca1ff3284a1fffff2c1b3e58363fffffffffffffffcacd8ff2c1425650194050799425095942565079940509594258284aca12b283caca13284a0ff2b284b050160a1f2c1405650194250960a0f2b284aca12b283cca1287fcaca12b284b050da03028040204010140a02010080300640ae302500803053c24f30d7c2a930ca42cf31c4921a300f0001300c4005305cc04f303cc03e34620fffbd2c41c003485d91db9ff00062e346243bfd000a9035bccab50300ac600d80006071010c603180c6611a82666027812018002a546032072608a05e690660a6330a28160074dc46f0c033306302b302a06234f02603428582329635f2eb1698880854e0c110038c168038c094064c008008d454d7cc660a5cca5c1d4c4f03899c459a1b8ef3180e80e98018048b009ba542604818c60701ba620e09e60de09e0d024120006cca729e4ca5b2baf182ea7acba030220082203b14028160104972b0109332164c5a76aafeb228dc6dd359e5dba0a2ff2c00c182d01c182d03d180c00c980c801c4eebff1779ae3fb76efa7ba8ca8927c39707a7a27c79803803958039803803980380398030031583a983a04c1583a45e2f14a771593bcf4b7e24f32e789492ebff72f45ee5ebc61540c4603207e180afe17007f53b0c00e4c44c60c00c8c50fd0fffd050d050d1c65d6a2ffffa251aa27c567d0fffffa219580133ba3f75e3292edc1863a4ea46dd474fffffffffffffffffffffffffffffffd4f980d0090981280b6984e00481848a1621869a25d18f32518198f263d19bd283d1a7d2d1b1b0fcf639bcf8c85987b8ff61db16c151d0749fb9cd72df399c764769881e1d19834809d9862389858ce9c5ca99b38cc9a0c149986cd1bcf161d83ce1ea3a91bc8f1997c611a16ce1bcaf21c32d31ade9b19160f191c9a9a68b599fa7d1986450b14e60e03a6271126471166450aa62a03a60e03a60e8a464698867d9f867f99062a83660d0403a0e98300e98a029983e0d2439810069810029810069818068602a8ab8ab3a01500a912a95c5987095b948b016d5fdb3ff4b0ee54255006ed19788c17050c2d0b8c49128c320c41c18a6f1728b945ca4e29eeef1fe56c8a800980801980402d79dc7a4a01980002980804980c03980c02df30180530902530880542c301402309446311448311c4830982528014c03000c23098c05008c05022b592500e2b477b0ffcea5d66d967ffffffff94b20c5dcb0cc4989356a6d779ddeb2ad6b755f57765b2996dda596d3bf38d6869da96d9d53434ef4ba1a7fa3384aa5d6bf2ab19a6ea300c013730b805f33126021130cb4230301a424a304f4122302905f9309b01e5308bc0253115c16431c9c4aa319809b1348b010e360fddfffbd2c41b83e62974fe0ff1f1056daadc81ff69e01033cce9a13e9998033720c8e03095404e3043c257309e00bd30074315306a01b93964c434b07666b9b5a486915398b4c4670561abd5a6ab341a9c58670859b40ea6965b8aa08c26b43291e438b21c5630e828906a18255402a4302824c4020012f82a2415279830b466f22268084188a8850f8238c0276895daa096a1e4406a530a427eb58491f081545ea7a311caba0d9712c06c2245b452039921093ca2624399cb1b2c29eb96a1f6c6b339233293c2e2af1b85c542519395617227c748270778c241b5976196923c2e27c2ba5fc4c49b6b75f582ca7ea3735ffffe0ab665746b4266378e2dfd7fffffffffce36c31231de4bfd191ff117fb8c19504f0c09013dcc8583304ca622984cb0e2c3cd17e039c8a86738190f763626173e280ca4e36eeb34d7401280e67a692ccc6a3708d58face8f60fa0b0e9df6268c2ee3714d7e9284d281eb4c64d280d7ecbbcac398c654a60c39c654c650e70d285280c650650cbbc650b032a63283286532530632a1ce61cc32a561cc61ce32863281ce612012061221206072070607207058038f2b03930390903d094d26834fa4ad216349a44a7a741e9d06952f95a42b485694b090ad2ff9a548695214492c25f34893cd3a62aa434a93cad29a548584869529e8485694d2a434890d22534a94b090b094d2242c2534a90d3252b4a5690b090d2a52b4a691215a534890d224f372e7fcb0e0b0e7ffcadc161c7fff95b92b73fffe56e3cadc7e5dffff372e3ffcb0e7cb0e3ffcb0e7fffcadc161cf95b82c382c382b70587058726e5c95b9ff370e3cdcb8f2b7058725873dff2c38ef9b871fd3a21dfffff65f302a03bf3183c6d2327a41d139209453312084833623919f370206d535458e2633ec4e26388c9fe23a48b6a13da898f333712b75337150153ed089223371145331208dc430be454831cd84203042842030be442035b23231156d2c15065408a685216685088685216568515a14685a1665408856541888549950229a1622959715bd15bd95bd9973d961eccbcb8cbcbcea510b08858452ba8345453444434444345a9345452c2296114d1114ad14d1110d1514d1110ad10d1514b08a575258442c549a2541a2221a2a29a22296110d1114b08868888584434fffbd2c46c83f3bd56de0ff77085de2a1ac1fe6e4054534445344452c2215a21a22215a29a22279a2221a2229d4a296110ad10b08a68a8a5844f345442ba82c2296113cd1110b08a568a68a8be58442b45f345452c22f9a2229a2a2f9a2a296110d1114d1514d1514b0886888a58442b44f345442b442c229a2a296117fcb089e68a8a5844f2b442b453454434545345443a844345453454434444344a834445345452b443a94534444344452c221a2221a25416114d1510ad10d1514b08868889fe568be68888568868b5256886888a568a68889fbf9dbbf45c58018cc0620d8cc4e31388c3620d88c5630d8ccde23388e1e2878ce6e33d88d1e32788d3e24f88c660a18cdae32788c9e2358cd7625d8ce1e2358cef62e58cd0e2438cc6e2358cd762438cc6e33588c9e31b8cc3620d8cc162178cb00b1182c60b1182c40b11f8dc456e33f1388b1e3371b88ad8cf8b88f8f8caf88d8f88f8d88b0c65862363e32c719b13195f196388f8d8fcf8988b1c65863363632c3195f115b196188ad88d898bcd8d88d898cb0c458e32be32c3195f19b1b19b1b19618cd898cb0c47c4c456c66c6c65862f36362363632c3115b115b115f11b1b19b1b115b11b1319618cd8d8cd8d88ad8cd898cad8cd8d88d8d88a310b0c46c7c66c4c456c66c6c47c6c66c6c7e6c6c458632b63362622b633636336363363e2f363623626336363ffd15b1f9558cb0c47c4c66c6c458632c31ff9b1b17f95b11b1b17f9618fcb0c458622b632c319b131f9b1b115b115b17ffff9b13196188d8988d8d88ad8ffcad8bffcb0c7fffa363622b622b62fecf95ff2aaf2c084258217cce061080c9c9655cd3ae3270dd952720e33eed24e068381cc4203dc0d957381cce0781a4e33eb494f70aed24cf704eb8cf701080cf702cc8c6f45a0cc2b7217cc9c81bd0c58b0ad8c58a0adcb02109829a2101829815b188400a61d6ca69a9b5b9554c35314c35314d2b3eccfa3e8cfa840e103ecb07d99f47d19f67d962102b3eccfa3e8cfb3ecacfa33e8fa2c1f6582efccba2e8b05d960ba32e8ba2b2e8acba32ecbb2b2ecb05d9597665d17665d177e582ecb05d19745d15974582e8cbb2e8acbbf32208832252f32208932252f32208932248834b88832252e2c11064411064491264425e64411206bfffbd2c47903eab9a2d20ff6b3471eaa5801ff5a38ac804576115d84577062ee0c5d81ae97606ba5d8457581ae976115d01ae9740c5d40df4fb037d3ec22fa063ef08bec22fb063e818fb063e818fae06fb7d01bedf606fa7d845f406fb7df06533c194cfae11a6ffffc234d81d369947ffffffffffff06110c1f907e0c1f81044d4c44abce14c8534d8f25314c1f820f0f62f7cd8ce8395f0d2af6c24df37e970f2038d90c413a6a0e14fc808e9a763d4f204c80ce3642950ce821038ce801044c4114abcc40e1898c4101040c1f91040d89f1acf1a9898c7e5898d89c7e4ae0f0f1aa0f0e0f5044ae0f0e0f5044d0420f0c7e5040c7e07e4b0823e63f282056c4e5541134101f834111f831f91f82b1f934114102b1f834114112aa08941f898fc2089607e4ac7e0d0407e7cc7e1044b03f05682056823e68203f0581f831f81f92c20818fc8fc98fc208f98fc0fc1a080fc98fc8fc95a0879607e4d0407e4c7e1040c7e47e4b03f263f03f0563f263f23f0563f0563f063f082063f03f063f03f063f23f263f23f0581f831f81f92c0fc1607e4b03f068223f263f23f268203f3e63f03f0584102c20898fc0fc019f93f00c3f2e113f2113f3033f27e0227e4187e4227e4227e4187e00e089f908c11061f9061f806410033f27e2067e0fc819f83f1819f93f0067e4fc830fc830fc419040187e3033f27e40cfc1f8061f9c227e00cfc9f9061f8061f8091f9033f27e4187e40cfc1f9033f27e2113f0067e2084187e2113f2113f00c823830fc830fc7f7061f8844fcaffffdc9d9fffffd75f317f31b37f117f34b7b29398c65434b665534da7572c30c9a6dbab1a6d12f1b2acc61b2ad949bf832a198d32a1b2a6629d947fe9b2a0bf98bf25b192f30c99ce12f989092f192f12f1612d8cc68c6cacc68cc6c5fccc685f8b06366636634663496e66362fc6bf2fc6bfe346bfafc6bf2fc6bf2fc585f8d20978ae5f3485202c4be690a406904bc5690f961213979212c24272f240690242569096121348521348521397d203481203485202c24258480ad203485212b484ad203485202c4bc56909a429095cbe5897cd21480d21484d21487cd20978e5f484d21480d20484ad203485202b480ad212c242569015a40690a40690a42690a4058484ad20ff348520348fffbd2c48183f27178ce0f76b545f6b61a01ee57205212c24258480ad213485212b480237e065f8237f81dfafc077fbf4237ec197e832fc0cbf832fc11bf611bf032fc11bf832fe0cbf832fc077fbfc237e065fc237fc197e03bfdf8237e832fe11bf01dfeff065f8237f832fd03bfdf8237e846fe11bf832fe11bf846ff065fa077ebf81dfefe0cbf832fdc0eff7f065f8197fc197f065fc237e08dfe0cbf60cbffffc197e2c0bf18bf0bf9bf859418bfa5b9d9418d15d941a6da6d9a6d44a18bf8bf1598d1961ad0986cad01890a6d9b0c9ce992f3ab9596198e69619a5606c18bf18d961954cc6d2dcb096c62fe2fc696c63462fe2fe62fe96e62fc96e696c2fc66342fe5663466342fe61b039865861b0561b261b239a63981b2581cc31201202b1202b1202c09018908909589015890992f0901f35b0586c1b65b26d86c9b61b06d86c95b63cadb26d96c1d72ba6a1ae95a87cd40a13aea80eb8a12b501a854275d5095a84d42a12b6c9b61b056d82b6c161b06d96c15f33cdb2d836c364db0d92b6c9b65b056d8390484e4120390c80ae427209095c83fcb120390c80b120390484e4121f2b901c86425890162405721390480e41202b90f95c80ae407209015c80ae405890f962425720390484ae40720901c86405720390c860cbf846ff846fe11bf846ff832fc11bfc237fc197e846ff81dfefe11bf832ff832fdc237e03bfdfbc197ef846fe11bf832fffc237fff832ff81dfefdfffff065fff08dfa0cbf2af2c1611a561619ad086c1bc6256986c0e698e61db186c2d0991503a991528199ca96bf995d8cc183a95d98cc883959ca996b0ae18500ae18ae8ae18ae10d99ca05098ae0ae158e6186c06c996186c186c06c186c86c1586c98e686c186c86c986c1611d71406a1501a86b858501a82ba56a02b501a854258509d71405850161426a0509a8543e6d86c161b256d836c363cb0d8ff2c363cace9e5883f99d0ea583a959d0cea7433a1d4cea7533a1d0ad43e585095a84d40a12c280b0a02b5095a83cad41e56a12c280d42a1350280d42a0350283cb0a0350a80b0a0350280d40a02c284b0a0350a87cd42a02c284b0a12b3a19d0ea7073a99d0e8583a99d0ea6743af99d4e86753a99d0ea567533a1d3cce8752b3a160e86743a160e9e6743ac1fffbd0c49001aae194d80f72b58554b59a95eed5a08d808b600db0d9c22d906367831b1c22d8c22d8fc18d808b620c6cf063660c6cf036cb66116c01b65b2116c7fff08b67831b3ffffc18d8720624024262422406caa96c696efe06634fe0696e2fe584b6f32c269733b61cd32c30d831cc2c2375639c339c120339d4da2bb08ec2364dcd360e5e480e5f978f9c97cd2197cb0901f3a909f39ce15cbc6904be7cef386904be572f1cbc909cbc909cbe90961202c24258480d21480232106484192108c80192008c800e4320064840db1cc036c36418d981b65b2116c7845b006d86c831b20c6c045b0116c81b65b2116c01f31b00c6c0339a0c6ce0c90046401190e0720900464184642119001c86400c6c831b2116c831b00ce6045b006d96c01b65b2116c81b61b006d86c831b006d86c031b206d86c81b65b006d96c045b00c6cc0db0d881b65b006d96c01b61b20c6c845b006d86cc0db2d90636606d86c031b308b6022d8036c363f06487fc1921846400c90c192084643e0c907c1921ff064842321fc2320c1921c2320e0c9083241c1920e1190ff0648383241ffe1190552b188b0719f7f4a1eb57c15bc66b19c46e821474a4645719988ab69bc4b11ac4311dc4b11cc47198c4b198882219502296045338ce33589622b388d62188c6338cc6318cc63588b071195222995222195022160a832a04532a0452b110ac4432a0442c08862208a78b1f95e23c58fcf1633c78bcae2162215c42c442b8a588a588be71221c58a716295c538b14b110b114e2442b8be5714e2c538b10e24538b10ae21c48871227f9c58a7162162216221c5885888712216229af5de585e6b9715ae2c2e35cbcd72e2c2e2c2f3f4b8b0b8ad715ae2c2e2b5e6bd715c42b885710b114ae29c48a588a588a58887122ff95c42c442c45f2b89e5710e2442b8bc238e11c611c5e11c5f08e3f83310331ffff8471047160cc708e3c198c238c19881988238c198e0cc7833103318471e0cc508e3f8331c0f1e3e0cc611c7847103314198e0cc5066308e3e0cc41f2c1e6a5119a1af08bc29b0f2a7b986cca7b194d8c3c98dd06f719b1a90d9a4346c69a4366c619b1a47f1ef71b39b74ef71ef76f71a08e3598fce351a08a081bc6bc61f9a79a953cd4de33cd7cde31e34a79a8de37cdfffbd2c4d083a94daee40eea974694295845ff597a0d1c3634ad1c0e3ff630e3f91c0d1c11c0dba0d98cd9a9b0cd98d98dba0d98cd9cd9ccd9cd98b0dd3e566cfe66cc6ce586e9f36e9367362741136271f831f81f9f34101f82c20898fc8fc1a080fc1a088fc18fc8fc04638846380323884638c191c0231c4191c40e38c71064700647108c7003530a640d4c29903530a600d4c54d08a9803532a6418a600d4c54d03532a600d4c29981a98532075314cc22d980db3367831b3831b381b666cc0c6cc06d9db381b666cc06d9db3045b3845b381b666cc116ce0c6ce06d9db3c0e384708463804638e118e0118e0118e2071c63881c718e0118e3f08c70038e11c00e38c7108c7008b66036ccd9c0db3b67c18d9822d980db336608b6608b6708b67036ccd9818d9818d9c0db3b670636706366036ced9c0db3b6606366845b381b676cfc191c2071c238f08c71f846380323801c718e384638c191c3c82bb45762bd6a189200a0f3144ca433d6cc69c36b368403455f43b3455ab8137c0e4323674ca4235040d5636b2cd573290d4a32a9ee6553dc8df03144ca294533f88be230f8d3e330f8c7e333dc8a4333dcd9d332908a4332908a423144ca423144ca433290851231448513314494a231448f7233dcc5133290c5122c0a24587e3d95bf1960f8ccf8cf88b07c4583e32b3e22b3e333e23e333e37e333e23e333e33e32c1f199f19f1160f8ccf88f88cf8cf8ccf8cf8cb07c4567c6583e333e23e237e23e284e898328981d13a2611a240ca2611a2508d1281d12a260744a8981be27c6117c4117c606f8df101be27c60c7c407f89f181be37c606f8df101be37c6117c6117c5063e208be281be37c5063e3037c6f8a117c581be27c7831f181be27c5063e2ff81be37c5f831f1781be27c4117c6117c40c7c4117c406f8df1c18f880df13e2063e2063e208be308be2845f1c0df13e2063e2037c4f8b08be3037c4f8fc1944c2344ffe11a27ff06513e11a270aa27fff08d1303a2544bff06512f065128468980001f961a0f32f89be330f8cbe22b674cd4a3528ccf727c08d4a25288c923183cc9221838b0ce9194867b9997c67f118fc69f198fc63f19b07b071c914919b07c91963f88a1f1cdf88f8cef88f8f46d3baae7aacd386d39aae6a254867487486fffbd2c4f0002ff59cc10ffad486bcb35849ff59b3574846a24a26574866fc67c667c67c667c6fc6583e233e23e22b3e332f82f832f92f9360f60f32f92f92c17c7960be3ccbe183cb05f265f2c1e65f25f065f0c1c56c1c582f832f860e32f82f932f82f8035f0be40d7ce0f035f0be7062f8062f9062f808af981af95f2115f006f8df1c22f8822f880df1be3037c4f8818f8c0df13e208be2037c6f880df13e2037c4f8822f8c18f8c22f8c0df1be3037c4f8a117c6117c40c7c60c7c708be208be208be2063e3063e308be208be3063e38317c8457c40d7c2f808af808af808af9062f9035f0be422be018be00d7caf9062f98457c81af85f1035f0be422be206f8df1031f1845f1045f1831f1045f101be27c7831f1031f101be27c7037c4f8c29f1818f8e06f89f1831f101be27c7037c4f8822f8c0df1be3ffc1944e0ca25f065120651284689fc1944cde666d451e74c692cb86aed3354ea7b2cc5691998436ef2c2dbe749e0b946bc1af0868cdd2784d19c1de4b1aa9bad88cd958dd05853d0c4716ce4cd8c23fcdd6d2ec8cbb275b4cbb31728c3671ba0c3671ba0c3661ba0c36545ccc36445ccd1731ba0c6e90d98b03c619e6a79a98f183c616078b2c2335af2a0b96565d91c7fa38144701611c0d1c51c3cd1c51c4d1c11c4ae3fb9e568e1fe58471336636636e9366e959b3f99b31b3959b399b31b3959b399b31b30323840e384700647108c700647006470c231c4231c606d99b3c0db3b6608b67036ccd9c0db336606367036ccd9c18d9c0db3366036ccd9c22d9c19ba40db3367064710647008c708323840e38c7081c718e0071c23803238832388463881c718e20c8e00c8e308c7108c7106470038e31c00e38471038e11c00e38c71038e31c60c8e20c8e0071c23881c708e0118e0118e20c8e0118e108c700647108c70038e31c70647108c7108c7008c710647106471064710647108c710647181c708e30647008c70c231c00e3847006470038e31c3065cafc1972ff832e5ff846e5419e3613f1bffffe11f19ffc19e33c23e340cf2c13a66bc22f044e35599b1a90d1bf8cb549bad85d91af091aa938d5665d997666b549b1866c6ad5268ce233468cd233651785150bb22b172cd19b5e10cf343cd4ad6de33cd4f3533cd078c2aa78064efffbd2c4f003b1c9a8c00ffad4867d2b97c9ff5eba9a783a34f013c12a93a6513c0993a64e9993a49e09549d32bbb235cbbb32b5ca2c2e515ae595ae59a38c7f1a382381a38a381c7fa381a38a389611c4a238fcb08e2584702c47f1a38a381a382389a38a3895a389c7f47f79a38238960a64ca61530ca65534ca64a60d531534b053058298354d29932982992b29932982992b2992b4712c2389611c4d1c11c0ad1c0d1c51c0d1c11c4ad1c4d1c11c0d1c51c4b08e068e28e268e28e0568e0568e068e28e2584702c2389a3823895a389611c4d1c51c7cd1c11c4b08e3e568e0584712b4702b47034714712b5ca35cb5ca2b5cb2b5cb35ca5ca2b5ca2b5cb35ca5cb2b5cbff2b5ca2c2e59ae52e57f95ae5161728b0b9456b9656b94585cbf2b5ca2b5ca2b5ca2b5ca2b5cb2b5cb35ca5ca35cb5cb2b5cb2b5cbff35cb5cbff2aae56cb0b95fe56b95fecaba05d4123552674e3bad48a9d373031554e1127497febaf30f887e332f18e2831290966285e38c9662f1cc5622b8ccae51ce0cc394994ac60e30e385623158838d3158c90e3243c90e31588563312904a53090c2422b1290c3e21f88c7e20f8cc3e33f8cc3e32f88b0307958c1c617c8c1c56307187c41f19607e230f8c3e230f883e32b0f88b01219848625215848658090cb0121160243f3e3db92c71e586e0db96e0adb936e38e2c371e56dc1b72dc1b72dc79b70dc15f1a586e4b0dc95b7056a69a9aa69a9b5b9a9aa69a98a61a9aa61614c3ad94d3532b63adab735314d3532b636e5b836e1b8f2c3706dcb706dc37056dcf9b72dc15b70586e4adb92b6e0b0dc1b72dc9b72dc95b726dc370586e0adb92b6e0b0dc95b73e6dcb706dcb726dc373e6dcb70586e7cb0dc1b70dc9b72dc15b73e56dc1b72dc7961b82c37256dc79b70dc161b82b6e4adb8f2c370586e4adb92b6e4db96e4adb82b6e4adb82c370586e0b0dc95b726dcb70586e0db86e3cadb92c3726dcb726dcb726dc37056dc1b72dc961b936e5b9f2c3706dc37256dc7fffffff063e30bcc78d1e34c5cca4f0c5cb8d54de87b760cf3598c4e3555e08dd6c172cd6dd3cd4de8698c0db374868c4716cdcc5ca75b0c5cb1728d19a4668cd8c23fca1b1b323fd6a932ecd19a2c0b946bc1233462e5233a71fc8e271fe8e268e11fc68e2fffbd2c4f081f03160cc0ff6d7863fb5d7d5ff5a2a8e27e69e6be56f1a7e69e69e6f1af1a57e6bc2b78dff3471471347147034704703471470347147134704703470471347147134714712c2389a38c7f1611c0d1c51c4b11fc68e28e0584712c2389a382381ae52e51ae5ae51ae5ae59ae5ae5945cb9ae52e596172cd729728d729728b0b9456b95e157280772ae5846e5046e5c1972c19728237281972bc0ee5dcb832388463881c708e2118e0071c23801c708e0071c63801c708e2071c23801c718e0118e00c8e2071c23801c718e2071c23804638e11f1bc19e330af1bee0cf1bc23e3423e31a0cb940cb95c23728197281972b03b9772ab065cb08dcb065cb708dcb08dca581dcab940cb940772ae57d5fe0cf1908f8de0cf1a15e3411f1a15e35fd55423e3611f1b5419e317f5e11f19f08f8d0678c833c6423e33f0678d81f8df1b5f33a38e8f3e1d21d43b49168319d0eceb83d0ece2c92270d155ae00e1856b28c69d355ccf736748c513290cda0f8b20eb808b24a844e99ee65219a9462891b3a65211c59044e9b41e44e96115532275155d151d3a33a38e8e33a3ce8f35a08b3232cccb3228599ccb322ccca8b419bf1df119f11f199f13f11bf13f1143e2161f88b113a5589d389c89d2c44e162270a44e3cae270da75a70da71a74b0d3a6d38d3a6d3ad386d3ad3856d3be56d3856d386d3baae56d39e56d386d38d386d3ad3a5355c56d386d38d39e6d38d3a5869d369c69cfef95b4e161a77a56d39e5869d28d3af2b69c2bd56f369c69d2b69c2b69d2ab4e1b4e34e1469c1b4e34e95b4e79b4eb4e961a77cda71a70da71a730369c69d2b69c2c34e7961a70b0d3851a706d3ad3a56d3a56d386d38d3a5869df2b69c3d5669c28d3b2c34e961a77ffcada73cada70a34ef45869c2b69cf2b69c2c34e95b4efe8ada70da71a74b0d3bb2c34ef961a77ca8d385869c2c34eecb0d3857665ffe58b322c599fecb16645766658b32ffe73fcb166657665e7665666766766458b32f2bb32e313316f31e1f6ee56bfff9beaf3144a96237c0851329f118e4335288e4333dccd9d35288d9d22908cc38248ccf4e183cd4a32908d4a3a588d4a33dc8c5132908c513528cca42528cca433dc8cf72290cca425288ca43290cdf03290cd4a2290cc5133dc8c512fffbd2c4ff03f49152ba0fffc5c651b59801ff5a901448cf72290ccf733dccb07b999484a511948428998a242891948628916144ce90e908ad448d44d44cd44d448ad448a2894b0a27e585123513a432ba42d95a8916144fcd44d448a8a246a24a266a24a2452909e58513f849f1c22f8a117c406f8df1831f1031f101be37c607f89f1845f1831f181be37c6117c606f89f101be37c606f8df1031f101be37c508be2037c4f8e117c6117c508d1308d1203a274482344b0651306513065138468941944c2344c2344a0ca260744a8901d12a270651383289c0e89d12f83289e0ca258468941944c1944a0ca2508d138468904689b8468941944e11a278328901d13a260ca2583289e11a2781d12a24f83289832890468984689032898328942344c1944e11a2706513f83289c2344f06512a8234481944a0ca260ca258468941944b8328976e11a2584689feae11a244c414d45332e313030aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf2aa8207219b3a45243318a27c791a946a519a4c849198c1c7a7997c65f119fc47f19486126d651aae67f1a7c6517e21587c4617c1244661c9246661c124666ab9aac66ab0d3a66ab35966a082822634e2820566ab19aaca0896069d2b355cc69c5040acd563355cd562c0d3a574845144a56a24748748656a2658a4337e23e233e33e22c1f1159f119f11f1959f199f13f11bf13f11d21289161448b14847486a246a26a27e51449e585132c28981d13a2611a2411a260744e89832890328901d13a2708d1303a2544d82344e0ca240744e8981d13a2411a25846890328981d12a260744a890468903289e0ca2611a240ca2611a270651283289784689c2344c2344c234482344c1944c0e89513f8328981d13a2783289c0e89d1206512ef0669d8334e78474ec0f4e69de0cd3a11d3807a774ee11d3abc19a77ea7c19a760cd3bb419a7019a73ffff8474e8474effffc19a77ff08e9db3ffffd6bf9913a8aa1f9eb1631445566a510a2472198a24777c28226d65359675c09138644e11387163570651a0f9c59044e1a2a88aa14455e67b9948667b93e066ce98a26644ec592644e913a6d0722aa51a0f142274644e22aa644e913868aa1138644e341c644e113a552274aa44e1a2a844fffbd2c4e581eb5da6c00ffad4867d3597d5fb5f98e18d3834e19aac34e18d3834e18d3a34e958d3a581a74ac89c2b2274aa8aa9913a44e15913bfe644e113a634e0d3a634e0d38634e1aade5634e798d3834e158d3a581a70ac69d2c0a2662890a2456289958a245628998a2628998a24289958a27fe65210a27e0744e89046890468942344c2344c1944825448234481944c2344e11a2503a2544c234480e8951206512832898328901d12a240ca240ca270651306513065136e11d38c11d3811d390669c08e9c03d39a7019a7207a774ec23a740f4ee9cc19a7423a7607a734e0474e8334ee11d3a0cd3811d3a07a774e419a740f4ee9d03d39a7611d3bc19a7019a7023a7207a734e01e9cd3908e9cfe0c22742244ef83089c7089139f06113bf088d39fc1834e42234ebc1834e60c1a77f060d39e111a77c1834e84469df6c2244e550000001fcb08e06636ca8663496e6fe26366634fe069b4c32673aeae673a9b6586192b1cc33b73b63411a5531f94112b410383d62731f86263626626331b31a34b731a317e17e34b64b732982992c2a69594c194c94c795a089a0831318fca081a088fc9625e3979212b484ad2134825ef2be70ad203979203485203481213481203485212c24256d93e6b64db2d92c364db2d836c364af9856d82c360f9ad92b6c79b65b06d9e61b61b26d96c15f30db2d93e6b64db0d82b6c161b0589079c8243e7219015c80ae40720901c82407219079c8240720909c864056d92b6c1b65b056d8f36c360db0d836cb64b0d82c360adb056d82b6c9b6798586c961b056d92b9095c84e43202b9016243ffe589095c84e4121f2c480e4121390c84ae4057212c484b120ff2b907f95c87cb121390c84ae42589095c84ae425720390c80ae43e58909c86407219016240589095c87ce4320390484b120f2bbfff962fe577ef2c5ffcb17ef2c5f8aefc58bf9dfafde58bf962fde58bf1dfefe77ebf15dfcaefc577ef2c5fcb97d859c2ab88e7fa3cb0599194842891be04a51998724911aaf47a799fc43f19a7c4ff11978c122992ce71415948456a5119fc61f19553e232f8cbe232488c393248cc393183c60e31a70d5631a70d563355c69c3355cd573144c5123144851333dc8512314485122844e4d1554550a11383227089d2b2270afffbd2c4ff83f1c956d46f779446f42a9881ff7690d448d44e908d449448d44d44cd44d44cd44d448cf8df88cf8cf8ccf8cf8ccf8cf8cacf8ccf89f8cb07c6583e232f82f9360f2f92b2f832f92f932f92f82c17c960be4cbe4be0acbe3cef9be0ef8be4ef8be0ef9be0ef8be0ef8be4b17c15df258be0b17c1df37c1df17c9fc7f11fc5f115fc457f19fc7f1163e23f8fe2f2c7c47f1fc457f1963e32bf8fcaef82c5f277c5f277cdf277cdf058be4b17c79df17c15df077cdf077cdf058be4ef9be3cef8be4aef9f3f8be22c7c5e57f115fc457f1963e3f2bf8cfe2f8cb1f1163e33f8fe3f3f8fe33f8fe32bf88b1f115fc457f1963e32bf88afe22c7c458f8cfe3f8cb1f1795fc5e58f8cb1f115fc67f17c7e7f1fc458f8cb1f1163e22c7c657f179fc7f115fc457f17963e32bf8cb1f19fc5f19fc7f179fc5f1963e22c7c658f88b1f195fc47f17c457f115fc67f17c658f8bfcafe32c7c7e57f195fc658f8d5f2a2944630705f26c472af66abd8c1a661c9872693205f069320c1c510881978e4b3192463071a4ca49199e9e7a71987017c18c1e17c19c62b198dc2b118dcab11d21a891d2152179d21d2195df1160f88cf8cf88df89f88b14867ee4a25fe56a246a26a25e6a25485e6a26a27e67c47c5e67c47c667c67c6567c5e583e32b3e3324324232422432b243324324232422432c12199211219921252992112116090cac908c90c908c908908c90c908c90c90cac90cc90c90cc90c908c90c90cc90c908b048664844840c5f2115f00c5f108af8035f2be2115f18457c6115f20690d210452101a4294a1148406909218312140d21a4308a4208a420624281a424861148406909210452101a4348508af9c22be206be57c0317c8457c8457c422be60c5f2115f20c5f1035f0be418be2115f20690d2181a424840c4840c4840c4840690921e11486114841148606909210452181a43484114860c4870348490c229080d21a4208a430624208a4308a428317c0457c422be40d7caf9062f9062f9035f2be40d7caf8f062f98317c8457c0457c6115f3035f0be018be422be3fffff08d12f2c3d10653614da6a7ba2e442a7a1a9eea7b9a3362e518b971aa9445cc6374b0f2564019957055c1437be63748dd2653694d863c68f1863c6adbc6b6f8f1a53cdfffbd2c4f103f43180ca0ffacdc623b25881ff59f847e6be687e68f1a57e6857e687e6af187e6be687e69e6a6f1af145478a3f3578c378d78c378c78d378cf352c3c61478d1bc63c6961e34ade30adba4dba0d9bcaadd2566cc583672b36633676e834704712b8fe38fe4702c2389611c4ad1c4d1c11c0ad1c0d1c51c0ad1c0d1c11c0d1c51c0d1c11c4d1c11c4d1c11c7cb08e3e584702c2389a382389611c4b06cc583672c1b319b39b399b31b3f959b399b31b3959b3960d9ccd9cd98b06ce66cc6ce66ce6ce118e2071c238c191c4191c7038e11c40e38c70038e11c4191c4191c40e38c70064710647006470038e11c0191c40e3847084638e0c8e0118e00c8e00c8e20c8e308c718323804638046388463881c708e20c8e2118e20c8e2071c238c191c0191c0191c0231c40e38470c0e38c7008c708323804638c0e3847108c7108c7006470606470c231c60cf1bf57ffffdffffff846e5e0cb94a00002f30be4c3831084420332746f434224bc73259824431839265263070b039c183701c6961c14d2938a4eb9158cdce0e30eb95588eb8ce3cd58ce3cd589588cbe648cd83cbe0d83f0e0e48a48cc90c90cc909c14c909c14d295290cbe248ccbe1838d83cbe0cbe183cd83cbe0cbe1838cbe4be0cbe4be3cacbe0b05f2569485648664844845694a64864846486487fe6dc3706dc3706dcb706dc37256dc9638f2c370586e4db86e3cf8f6e0f8e6e4f8f6e4db96e7cb0dc1b72dc161b82b6e3cdb86e0db86e3cadb836e1b82b6e0b0dc9b72dc961b936e1b836e1b82b6e4db86e4db86e4b0dc1b71c71a9aa61d6ea615a9856a69d6ca61a9aa695a9856a69a9aa6f95d6e56a61a98a69a98a69614d2c29a56a67962432b90fffcb121f962422c485e572196242f2b908e43908b12115c87e572115c865890bcb121f95c845721ff9c8521162432b90bce4290ce4390bcb12116242f2b90cb12196243f2b90fce42908ae432b90ce4290cb1211c85211c87211c8721f95c85fe5890ce4390cae432c485e572115c87fe572195c87e58908e42908e43908ae43ffdbf587ccf8af88c7054224d7aa4ba8d7e30f8ccfe21f88d57a248cc2f80be4ce281294b04b319c5097518e0a4b3197cfa79fa7e1c197c97c9fa7307997c17c197c61c9df1df119f11f19df15fffbd2c4f303b38556ce4ffba9d6c3a41945eff822f199f15f199f1bf199f19f19df15f1160f8cdf8cf88ef8cf88cf88f8cb07c467c4fc66c1e5f065f05f265f0c1c6c1c5f265f25f265f05f265f05f065f25f065f25f26c1e5f256c1fe582f832f860f31b838d31b91b931b91b931b81b82b1b931b81b92b1b831b938e2c0dc18dc1c695a5279921921992112116090fcd295290c908908b048464864865824332434a531b81b831b81b931b81b92b38f2c1c7160e34b0372563705838f2b1b831b81b831b91b82c0dc9606e4c90c90bcb04845824232432432b24332422432b2422b2422b24332432432b2422c1219921121f960908c908908b04846484485e64864845648658242f2c121959211592116090bcac90cc90c90cb048664844866484486564866486484564846484484671c3706ac6371e637071c6372370637237063723726372372637237063723706370372581b931b81b82b1b82b1b831b91b82b1b92b1b82c0dc959c7158dc98dc8dc98dc8dc79606e7ffffeef34bdd4378ce2398c633b8a623188e23d8a62338ae23578c737dd5f2c1c65771985e3d98f6d59abc17163c634bd2f32248939ed2e32232137512e3751d5375488f34bdd534bd2f32208939e92f32212f32248934bc892b4bcc88224d2f220ac882c11269711058882c4495c41c44495c41c4c415c415c4162a0ea514ad14ad14b0887508a68a8bfe75088584434545344a8345a82c221a2a21a2a29a2229a2a29a2221d4a29d4229a2a21a2a29a2a215a21d4221a2a29a22295a279a2229a2229a2a29a22216114ad14ad10ad14d1114d1513cd1110ad14b15268a8a56885689e5844345442b442b4534544345452c229a2a29a2a296114d1517cd1110ad13cd1114ad14ad14b08a68a88568a568be68a885688588938988f2b88f2b88f2b892b89f2c447fff95c496220ae24ae23cae20e2624ae27cb11056c5e5863363622c3115b115b19b1319b13115b19b1b11b13195b116188b0c5e5863f36263f2c3195b11b1317f96188b0c60c44ffff84513fe0c4404513e0c44fc188908a2708a27cc484e74d866254aec44c97d36cd860484dd5ce74b073a64bf12a69b424265841b261ac9585825e312039c325e894339d757312025f2b619312139c3120120325f4db31201213121fffbd2c4e403eff9ace40eeeb7c67f361b01ee56f01203120120312125e3121120325e25f325e4da2c12f192f1ce18909ce996106c160730b01b063981b063981b0580d9f2b909c8240721909624058901c8640721901b679a586c1b61b056d92c363cb0d92b6c795b63cb120390484b121f2c484b121f2b9095c84ae4058901c86405721ff2c484e4121f390484b1212c484b120f2b909624056d82c364db2d936c360db2d92c360db0d936c364db2d82b6c95b64b0d8f2c360db0d92b6c95f34b0d82c360b0d82c364db0d936cb64db0d8f36cb64db0d82b6c7961b2586c15b60b0d92c360db0d936cb64adb2586c15b60db2d82b6c79b65b056d92b6c7fff961b3e56d936cb64db2d92c364b0d82b6c161b3fe6d96c95b60adb211907846400c90c192006482072190c232106484232006483e0c90c1921c0e4120064802321c19218464308c841920f846401190c1920064861190846400c9060c908324384641c192106483f08c842321af3210329369d2693340190343f32830fa66d366d89d35569b2332843e355643f35569b2389d66c327a1d4346c27a33c746c2882d31910ba2b26937840fa321055630fb210343f32832103292b3292b3292b32830fb210321043e3210211321121030fa0fb3843282b3e8f28840cfa3eccfb3eccfa840b10819f47d99f67d99f70899f47d19f67d15c2267d9f7e7081f467d1f5e567d99f47d159f667d9f6583ecacfaff2c1f4583ecae1133ecfa2c1f6567d159f467d9f667d9f6583efcafefcafecafe8b1f458fb2c7d9fd7d15fdf95fd163e8b1f457f657f657f7e57f658fb2c7d963e8b1f458fa2bfb2bfa2bfa2bfa2bfaff2c7d95fd95fd7ff95fd163e8febe8afe8afebcafecfebebfffcfebebfcfefebcb1f458fa2c7d15fd15fd1fd7dff9fd7d163e8fefecb1f458fb2c7d15fd163ebcfebeffffcafecfefe8afecfebecafecb1f658fb2bfbff2bfb2c7d95fd9fdfdff9fd7d1fd7d1fd7d95fdffffff95fdff9fdfd963ecafecafe8febebcafebfffcb1f657f47f5f5e7f5f7fe57f67f5f47f5f5e57f7e58fbff2c7d15fd163ebfcb1f657f7fe58fb2bfa2c7dffff9fdfd95fd985e171611230b82f3a39f7357a8e30b91337c8cc31649334495e331d13324c583248cd30bc7a37d8c630b8c73248cd33301d31fffbd2c4eb83f475b2d80f7774c5b935dd81dd66d8609331e8c630bd1230bc7b30b87a31ec2e2b578c7a44cd130bcb063985c3d9602f30bc2e2c05c63d8f666305e61705e563d985c17985e179aef456bcd7ae2bf46b97961795ae35eb8b070ec1d33a70b070b070b073cb070ced9ff2b5c56bcd7ae2b5c585c6bd7ff9af5c56bcb0b8ad796179617f95af35eb8d72e2c2e2c2f35eb8d72f2b5de6bbd962e3bae2c5e577f9df79dd7162f3bee3bee2bbbffffcefb8b17f9df779dd7962f2c5e577ffff9dd795de57715de57715de58b8eeb8eebcefb8aee2bbcefbbcb177f95de58b8efbceebbfcb1795dfe77dde77dc5777f962f2bb8b17162f2c5de77de775fe58bcaee2c5e77dc775c77de57715de5771dd7962e2c5e58bcaefff2c5e58bffcb17795ddfe58bffcefbfcb17f9dd715dde57715dfffffe58bcb177ffffffff95de5777ff95de577962f2c5c57715dff31a71aca3861eef93355daca37c0a43335288f7337c094a12b3dc8c2f91838c92255e8eef81a70d4118610c2f83d38cf4e248cd26530e4a0a27285214d9d22908a86ab1a822a08160d5636b28d5631a75acb3355d41033558d572b1a70c69c1a74d4111a74b034ef98d3a34e9d21289f9d21a891d212899a892899a89a89f99f11f1962f88cf88f88acf88cf88f8cadf8bfcdf8cf88cf8cf88acf88df88f88acf8ccf8df8bccf8cf8cacf8ccf8cf8ccf8cf88acf8ccf8df88cf8cf8bccf88f8fccf8cf8ccf8cf8cacf88cf8cf8e117c414f8a06f8bf101be37c6117c4137c4117c6117c7063e3063e2063e2037c4f8c23f8823f8e117c406f8df1845f1845f101be27c4117c40c7c508be2063e3037c4f8c19f8822f8c0df1be20651203a2744a0744a89c194480e89d13065130651203a2544c1944eb81d13a260ca240744e89f853e3418f8818f8818f8c22f8823f8c0df13e381be27c606f89f160c7c6117c7037c4f8c0df1be2037c6f8c0df1be281be27c606f89f1831f181be27c40ca2611a240744e8983289046898468903289419448194480e89513832890328983289c0e895120651281d13a240744a890468983289c23448234480e89d13d0eaf5c19a76dea8474e8334e2bffef0669dfffffd5e6498b0751af860e372684a86587c8ccdd48c59074cb41b8c6e358ccc160d08070fffbd0c4fa03fa5daac20ffad4c5bcb45e01dd62d0d43164ad433164933165092b24cd09248c58164c93420c59164c1c160d09160ac923420923164583074cc2c03860e0b2562c79601d3070593070932b074c1d070ac5839614d4282b506a029840a61429cb0a585264489608990225644c8bd32040c8912b206408991225644b0f4c81032240c81032240ac816081608191205640b044afa7de796387de7963be7de95f4af858e7f96225703840e302c44b11f38c3cb1038c4e312b8f962070895c4b1d3e70b1c3e74fbd3ef4fbc3e74b1c3e74b1d3e70f9dff2c73caf9e58e79f79e7def95f7cafa58e95f0b1d2be16387ce95f7cafbe58e95f4b1d2be163a7de7f9f3857d2be963a57c2be95f0afa7ce15f4afa7ce1f7857cff2bef9f3be57dff3ef0b1d2c74afa58e963858e963858e963857c2be1f7a57cfff2be95f0b1c2be1639e57c2c70b1cf3ef4afa58e95f0afa58e9639e7ce163858e963a7de15f4b1cf312012035a04ac34ad1cd31cd3b635a05a0322b47131991992c09a982989a960398c650398c3612b0cb08edcc730730cd34418c1d4660c1d4664c48097cce70e70ce74484c480480c360360c734364c730364b039a65841b265841b2561b0580d92b0d93831d4acea7063a19d0ea707cc99d4ea63948958e0c703831c39bcc723931c244c703832994cb05232994cb052ff2c14cca6c3f2b29160ea56742b3a19d0ea6753a159d0acea56752c1d4cea7533a9d0cea74fff2b5015a80ad41e5850f9a8541ffe5850959d4b074f2c1d4ce8752b3a99d0e8570633a9d0ace8583a959d7cce874f2b3a99d4ebe56ea6e8ea56ebe56e86e8e86e8e86eaea6eae9e587537474375752b7537575374742b742b74f375752c3a1babaf9baba95ba961d0dd1d0add4add7cb0e856e858752b742c3afff9ba3a1ba3a79baba9ba3a161d4add0e8280b1427434258a02ba02ba1f2c501d050796280b14058a03a1a12c50796284ae80e8687fcae83cb14058a0f2ba1fff2c5095d016287cae87fcb1405741e74343fe74143e5741e74141fe58a1ffff2c5095d0f96283cb143fe574258a1f2c28206c48311e6abd8c1e65f197c667f137c67e36a8226d65a82263f197c661f11fc667b99ee662899ee64d41099aaea089b5966ab98fc63f11a7c63f118fc4fffbd2c4f003f3f1a2e20f7375467ab55881ff5a685f198d3834e18d3ad6618d3ad6518d3a6ab99aae34e959aae66aba820634e1aac57aac58d57369cd56cca34e4b0d3856d386d3ad39fc2c34e1b07b07997cb07197c3071c91307997c17c160be0b05f2565f26a26a26585122c28915a89f95a896bfcd44d44cc90890cac90cc90c90cd294908b04865648456484648448656486582423242242324224333e33e233e33e32b3e32c1f119f11f1160f8cacf88cf8cf88cf88f8cacf8cb07c667c67c467c67c6583e3037c4f8c18f8a06f89f1031f101be27c6117c7063e2845f1418f8a06f89f101be37c4117c60744a890328960ca2411a240744a89046898328981d12a240744e8904689c0e89d1284689708d1308d1283289e0ca27c0e89d12c2344f8328984689032897f81be27c40c7c406f89f1845f1845f17063e308be3063e3037c6f8c18f8822f8818f8822f8818f8f063e3831f101be37c60c7c406f8df1611d3bff8474eefffff7fc23a77fff42af314d42032684ee3268340355666c332966d3328556332832830fb43e2c21f1a1f9081908a1f1a771a019341a01a7705d99348c898c80c819341341a1015b98a68a698a615b9ac515b190887d187d07d987d108190819479595b995b8a698a68a61595b15aecad746bb5d95aecd76ba2b5d9ae976585d1ae974579035d2e8d74bb35daecd74bb344220d112f344220b088344a20b088344220e5e89344a20d12893e2e22c311f1b11f1311b13195b196388f8b88d8d8cad8cd8d8cd8988e2624e2620e2624e2220b113e5710711127131271113e58893898838988388883888938989f2b88ff388882b89389882b89388882b8938889389882c449c4c415dd7962ebceeeecb17477776775747757658bb2bba2c5d1dddd15dd962efcb1745777e577458ba2c5d9ddddf9dd5d95dd95dd162e8eeae8b176577458bafff2bba2bbb3bbbb2c5d9dd5d795dd1dd5d1dd5df95dd162e8eeaebfcb17458ba2bba2bba3babb3baba2bbb2bbb3babb2c5d15dd962e8b17658baf2c5d15dd7962efffceeeebcc3e21f88ccb92b88d23a48e8c85e162ca10bc31838f4ed9a4ca17c9924617c987c67f119fc43f1187c63f11613e231f8cbe2309087042b259cc7050908cfe21f8cac7e230f883e332f88be230f8cbfffbd2c4e803f01956de0f73748691b259c1fedab8e231f887e32c07c6503e3987c63f1187c41f1987c41f1187c61f19587c7e7f17c657f19fc5f179fc7f115fc458f8bcafe22bf8bfcb1f11c852195c865890cb1211c872116242390a43390a42f390e432b90fcae42390e42f390a43390e42390a42f2c4865890ce43908b0dc961b836e1b836e5b92c370586e4db96e0adb936e5b92c37256dc1b72dc9b70dc161b836e5b836e5b82b6e0b0dc1b72dc161b92c372586e0db86e7cb0dc95b7056dc961b92c3726dcb70586e7cb121962422b90cae422b90cae43390e43390a432b90cb121f9c8521f9c87219c8521f95c86721487e572116243390a42f2c4865721ff95c8458908e4390bfcae43390a43390a432b90cb1211c872116242390a432c485e72148658908e4390c1890e0c48508a4284521c1890a0c484114840c484069092181a4348508a4383121422908189082290a0c4850624308af808af8ffe0c5f1fff8457c0457c5500002f317f4b633b769735a12c23ffd655317f7f1331bb28365417f312125f325e619317f98c331a17e317e31b3b294b62c18d19611611a5616199db0e698bf8bf9a5b8bf1a5b25b998d98d18bf0bf998da5b18bf18d98bf25b198d98d98bf18d1a5b18d958bf95a5b9afcbf9afcbf79617f2b5fcf1a5f8d7f5f8d7e5fcb0bf95afe6bfafe56bf1afebf1631b2b480b0901625f2c24269024072fa40690242690a42690a40690a406902406904bc58483cd2097cad202b483cd20484ad203481212b480d20484ad21f397920f2b487cb0909a429015a4256901a42901cbc901a429095b9be66c1b066c9b2566c19b0e6960d82b364cd9360dcd360cd8360b06c159b058364cd9363cb06cc237ec197ee11bf60cbf046fde11bf60cbf846401190846400c9081c86420c90046420721900464007219081c86400c9003243039048607219060720900464306484192106480237e832ff065fe11bf40efd7e08dfc0eff7f08dfc197f81dfefc0cbf81dfafc11bf40efd7f065fb065fc197fffffabfffff065f90403cc4102950c62707e0d6dd07e4c83d1044ce8107e0cc6a2954c6271898cc6a1044c41120f4c6541950c7f00c68c411189cc62620f4cc6b20f0d2ddfc4d9505f8cc68c68ad044c7e2950e0f47e4e0f20f0b0c4fffbd2c4ec813099a4d64f76b556e6315a95ff71bac56c4e56c4e63f23f25682068223f263f28226c4c3f2581f8341141131f91f92c0fc16189cc7e1040ac7e0ac7e4c7e07e0c7e07e7cb0821e563f0563f062422426240240624224256240581202b12131201212c090960480c480480ac484c484978c480484ac480c484978c484487cc480484b02425825ff2b1212bbff9dfefe77fbf95dfcb17e3bfdffcefd7f2c5ffcaefc77ebf1dfafe58909c824258907f9c86425720390c80ae4058901c86425720390480ae4057212b90f95c84e4321f2b90962427209095c80e41202b901c86427209016240720909c864257202b909c82405721390480b1212c480b17e2c5fcefd7f2bbf95dfceff7e2bbf162fe577eff2c5fbcefd7f2c5fcaeffe58bf95dfffcefd7e2c5f8b17e2bbf9c8243e589096241e5890962427209016240720901c864057202b9016243fe589096242721909c8642589095c83ce41212b9015c80e41212c7e3fcaff3fffffffffffe57f9ffffffff2c7e55f314d6f4319169c334141731d5320308946c341734134170ba33211d5332112f2c0b198f18711897990984413d984493d9a0b85d98c80c818c81349a995b1a98a69a98a6962b633ea1133ecfa2c1f467d9f458537cd4d534aeb62b534c894b8c894b8d2e4b8b0441a5c44f9b1b11b1311b13115b11b1f11b1b11b1f19b1711a2d41a2a279d42295a21a2a296110ea510ea510d1510d8d8cb0c4586336263363632c311b1319b13115b11618cd898bcae20ae27ffcae23fce2223ce2224b111e71311e577658baff2c5d95dd962ecb17458ba2c5d95ddf962e8aee8b17458bb363622b63362632b63362632b63362622b632b622c311b1b11b1b11f1b115b11b1b195b179b13196188b0c66c6c67131058892c44795c495c41c4c495c49c44496224ae23fce2623cb11258882b892b89ff2b88fff2c441c4441c4c416224e2624b112571057107131271311ffe5712571258883888938989f2b892b89ff38889389892c449c4c4f96119a39a1cdee361e4a6d3914c8ff336348ff31534d6c2b563cc6191d5cc4db0978ca5507e4d09920f0c8022ae4cd6c1534c2980a60cdef1ba0c3660d98c3671ba4de31e28aaf187e68f1a6f1af1a54a6d33663672b6e936e836734714712b8ff38fffbd2c4e483ecd556e20f776ec706aad981ff75f8ff47038ff4712c47f1594c194caa6194c94c994c14c194caa6194c94c15a08958fc18fc0fc1a080fc9b132089a08a081a088fc158fc98fc8fc98fc8fc98fc0fcf98fc8fc9607e4c7e07e4b03f0563f2581f934101f831f91f92b41031f841031f91f82c0fc1607e4c7e5044c7e47e4ac7e0ac7e0d0407e4c7e47e4d0447e7cd0447e0c7e07e0ac7e0c7e07e0c7e47e4b03f2563f263f23f063f03f0581f9ff2c3f2587e0adf82b7e7cdf97e0b0fc1bf0fc1bf0fc9bf2fc795bf056fc961f837e1f937e1f9f2c53258a64e99a67ce99a64ae992c53274c53258a64e99a64e99a60b14c1d314c95d3274c53074c53074cd32574c95d3274cd3258d9bcb1b3963672bd9fcaf662c6cc7b36ce7b3ece57b3ff9ecdb316367f2c6cc57b3795ecc58d98b1b315ece57b315ecc57b395ecc58d9cb1b3963672c6cc58d98b1b31ecfb3ff95ece58d98af66ff3d9f663d9b662c6ce58d9bcb1b395ecc58d9caf66f2bd995f31a74d5738745265324902f836f8cfe233f8d3e33674ca43367494a23248c2f930be02f831f893e334f8c7e232488c392a0c1c661c124657ee67484a267485ee46a25ee47ee4a2457484748548656fc667c6fc456fc4587e23512a422c5211a89d211a892899a89a8919f1bf1943e2f99f19f1160f88acf88df8df8fcb07c66fc47c7e583e22c1f1f9a52121192125219219219a5225299219211921a52f9a521219a521211a52121997c97c960be4cbe5838cbe0be4acbe4acbe0cbe4be4acbe0cbe4be0b05f265f05f3e577c1df17c1df37c15df1e77cdf058be7cef9be4ef9be4ef9be4b17c962f92c5f2577c95df058be4ef8be4b17c1df17c79df37c962f83be6f83be2f82bbe4b17c795df0577c962f8f2c7c47f17c7e58f8bcb1f115fc7e58f8bcafe22c7c47f1fc7fe7f1fc657f1f963e33f8be33f8fe22bf8cafe32bf8ffcfe2f88afe22bf8bcfe3f88fe3f8cfe2f88afe32bf8bcb1f1163e32bf88b1f17963e2fff3f8fe32bf8cb1f11fc7f1963e3ff2c7c5e7f17c5fffffe7f1fc7fe7f17c657f1f963e3ff2bf8cb1f179a08f40992f5881a6d30c9b137401a08a089545f8b131a56ca8731afe2696ecaa73182fe68234aa63f10787078c4e74a83f0563f063f0c4e70798d674a8820fffbd2c4e783f1f556c80ffbadc667b3da41ee572078d43f06822820682082056c4fe682082063f23f0584112c0fc158fcf98bf0bf18bf8bf198d8bf960c68acc6cac5fffcd0447e4c7e07e3fcc7e5044b03f27f8fc163f057f93fc7e7cb1f92bfcff9fe3f27f9fc9fe7f257f82c7e4b1f83fc7e0aff3ffe58fc1fe3f2577f2c5f8eff7f2c5f8efd7e3bf5f8eff7f3bfdffcb17f2c5fceff7f3bf5fbcff1f82bfc1fe7f258fc1fe3f058fc9fe7f07f8fc79fe3f3e7f8fc15fe0b1f92c7e3ffcb17f3bf5fcefd7e3bfdfceff7eff3bfdfceff7ef2c5f8efd7f3bf5f8aefc58bf162fc77ebf95dfcaefc58bf60cfc047f207f8fc833f1067e211fcc0ff3f9c23f9067e611fc033f011fcc19f808fe60cfc033f108fe419f9c0ff1f9847f007f8fc847f011fcc19f803fcfe419f8c0ff3f9c19f8067e60cfc047f303fcfe703fc7e607f8fc423f808fe3847f00cfc033f211fc047f007f9fc847f381fe3f3833f00cfc833f3c23f9833f103fcfe40ff1f85f34b617e36544b7317e7f1378c69630d95a03b2898d331b7f02b39c325e619325e121375712131cd3b732c20d931cc697315c0a02c16b990d8ae198da5b98bf25b998db2a18bf18d9a43ce9a432f9a40901a412f9f39ce9f3b2f9f392f1a42901612034839d2c24269024072fcbc690242690a406d96c9b65b26d86c95b60db0d836c360db2d92c360f98d82be695b60b1cd36cb63cb0d936cb64b0d82b6c1a814056a1350283cebaa12b5015d73cad426a0509a814275cae1624057212c483fcb1212c483cb121fff2c483cd42a0350a80d415d350a80d42a0350570b0a0f3ae574ad4258509a85426a15015a84d42a0350574b0a02c364db2d836c364db0d936c360db0d82b6c1b61b06d96c961b3e6d96c1b65b06d86cf95b64db0d836c360b0d836cb64adb258e6961b1e586c95b64db2d92b6c15b64adb26d86c961b26d96c95b64b0d92b6c961b06d86c795b60b0d92b6c961b2586c9b65b1e589016241e5720390480b1202c484e4120390c83cb120390c84b120390c80e43212c480b1202c484e43212b909c864057212c484b1212c483ce4321000fe62a690046401957256d7c1a044401990048111a046401158532620814aa56208987383ab184bc3ab986343f81931a32a9863432a98c4e41e9907fffbd2c4ea03b2f156da0f7790863b335a4dff5618a2081882220898a9a14c9900655c985328111853214cf9c014019aa694c994c94c194c14c994c14c1aa62a6194c94c960a64c7e47e4ac7e3fcd0447e4b08225825e325e121312025f2b121325f25f2c090960978c4844860cfc847f211fc01fe3f011fc81fe7f20cfc01fe7f00cfc047f20cfc01fe7f00cfc833f20cfc847f103fc7e60cfc047f207219001c86420721900324108c800e432108c84192006480232103904840e4121833f011fc01fe7f103fc7e3e0cfc033f007f9fc047f011fc01fe7f007f8fc419f908fe308fe211fc047f00cfc847f207f9fc847f20cfcc0ff3f8067e7067e023f808fe40ff1f9067e211fc033f011fc833f3833f303fcfe3067e00ff3f908fe019f9833f20cfcc23f903fc7e019f808fe023f8e07f8fc40ff3f8833f1067e423f9847f207f8fcc19f9847f207f8fc033f211fc847f00cfc033f1a99d67fa933ccc957f313fea3d51f6a55f31a7069c3183d26534990c3934f8d3e236f88fe235f8a7e232f88fe331ce038c31588cb934a59673bc724235635633739738338f90f34a470437054a5324324237e3be32b7e333e2be337e27e32b3e333e23e333e33e233e37e22c2899a895211a89d21f0b0a2456484648648456484648694a648648456484582422c1211921a52159211592199219211592119211211fc5f17f95fc457f195fc5fe7f1fc658f88ef9be0b17c1df37c1df37c1df17c9df17c15df2577c15df277cdf277c5f277cdf3e577c962f93be2f9fff2bbe4ef9be4aef93be2f8ff2bbe0db96e0adb836e5b836e38e36e78d36e1b82b6e4db96e3cdb86e4f8f6e4db96e4db96e4db96e0adb836e1b92b6e0e4390cb12115c84721c84572179c87211c852195c84721486721c86721486572195c865890cb12179c87219c87219c872115c8477c5f0577c15df2577c95df077cdf0577c95df258be7cef8be4ef8be7ffcaef83be2f9f3be6f82bbe4b17c962f82c5f1e577c15c867214845890bfce4290fce43908e4390ce4390cb1219c85219c85219c872116242390a43390a42f2b90bfcb121ff95c87e721487e62898a2462891ee462890a26541f88c3e27f88c5121444f3c2144ccf4f0be4c2f93d3ccf72674cc5133dccd57a4990b061c985f217c9ff1fffbd2c4ee03f47d56cc0ffba9c6beb5d901ff59b0bf19df11f11bf1df19c9117c94922997c97c1c91b07645144c74874847ee6a25c3a4251335125133a4251335135132c5f19bf1bf19bf11f199f11f11bf19f199f19f195b07997c17c997c97c9b07307960be0cbe0be0cbe4be0b05f3e67c47c467c47c6567c667c47c4583e22b3e32b3e22b3e333e33e28457cc22be40d7caf98457c01af85f211c1e115f0b062f903c1ebe018be418be00d7c2f8062f9035f2be018be40d7c2f908af908af8062f9062f881af85f0115f006be57c8317c01af85f2115f2115f20783d7c0317c0457c0317c8457cc198380d7caf9035f0be606be17c40df13e3063e2037c6f8f08be2c0df13e3037c6f8a0c7c406f89f1031f16117c5037c4f8818f8c0e89d12c2344819448194482344a11a260ca2411a260744a894234482344e11a240744a89f06512c1944e117c606f8df1845f1845f140df13e3063e2f063e308be3063e3037c4f8f063e2063e3063e2063e308be2831f1031f142344aaf83289ff06512846897fffff08d130651354c414d45332e313030555555f2c113a6ce9be046f81a9467a1d687668aaa2a87e79a2a86d07341e6491924469329244513e39afc65f199484f8199ee6a5118a262899a94428999ee628918a262891be062891a94452118a2452199486a51191388aa1913844e9a2aa44e9913844e9a2aa44e1a2a844e9913a44e9511542b2270a1f14aef8cacf88a1f17cb0fc4585122b5123a43a43f2b513f35125132c28981d13a240744a8904e8981d12a25c0e89d1308d1203a2744c2344c1944819448194480e89d1275c2344b03a2744c0e89d1208d120651284689e0ca2703a2544c1944a0744e89c1944c1944e11a240ca2411a260ca260744e894194482344a0ca2708d120651208d1206513df03a2544e0ca260ca2613a2508d1203a2544982344fc23449ffc19a770669ce11d3b08e9c08e9c08e9c8474ef68334e230669cf8334ee11d3bedfe0cd39ff84b4e0474e3c19a737fc19a774fb7ffd1a8ac5ca3172d7853ebdc5cb2b5e0cd19b4668a2f083bc90bb3285d90ca6d29b0d1730d98e3545e10d7855e08c47023f8db3711c4a11fc32ec8bb23466cbb234668bb23172978328bc20ad7853466d19d32eccbb334674bb22c233450bb2fffbd2c4d583e9c98ec40ffad44632b35881ff5a9879a3345d915a336562e5128b9671fc8e068e28e068e08e068e31fc568e271fe8e25836733666e82c1b3959b3159b3159b39b749b3160d9cacd9ccd9cd9fcb06cc566cc566cc66cc6cffe566ce566cc566cc66ce6ce5836633666e93366367336736636e83662b36636e86e82c1b3960d98231c4231c4231c0191c4191c4231c0191c4191c0231c58191c20c8e2118e20c8e00c8e1038e11c0231c4231c4231c40e38471c191c6071c638846388463840e38c70038e31c00e38c70038e11c0231c40e3847108c71c0e3847181c718e00c8e2e0c8e2118e00c8e18323881c708e0118e211b940cb97f03b9572c2372af065ca81dcab97f832e5f03b9572c0ee5dca08dca03b9772c2372f81dcbb9411b940cb97fc1972e11b940cb94e11b940cb95ededde0cb956846e5fff09dcae12b960000001fcc2994b64d58f35b0cd6f1530d2d835b0d0220a60c31b2ca4c17e05f8c4b605fcb00bf18c303ab18eac30c98822208960c6b31040a55319544b630c6831b3195031b3200c29831534ab830a648022a0532581534c2990a60ac54c2c0532562a69602982c0a98614c05305640116031b305fc4b72b0c68b018d16031b305fc17ff2b7e3cadf92c3f0587e0df87e4df87e4f1b5fcb0bf1afcbf79617eff2c2fe6bfafc56bf95a42690a4072fa4272fa40690242690a42690242690240572f9a40901a409015a42690a40690a40690cbe690a4269024256901a40901a40909a42909a412f1a41ce9a42909a4090961202c5f8aefc77ebff9dfafde577ff3bf5f8efd7e2c5fbcefd7f2c5f8b17ef2bbf15df8efd7f3bf5fbcb17e2c5f8eff7f3bfdfcaefe77fbf162fc77fbf1dfefc58bf795dfcaefe77ebf1dfafe77fbf9dfefc58fc1fe7f057f93fcfe4b1f82c7e4aff1fe58fc95fe0aff258fcf9fe3f258fcff95fe0aff1e58fc95fe0b1f92bfc1fe3f257f83fc7e0ff1f8f2bfc9fe7f3e58fc9fe7f257f82c7e3cff3f92c7e4b1f83fcfe7cb1f8f2c7e0ff3f82bfc9fe7f257f9ffffcbf79dde6bf76bb87ef58ffffef3cf9bfdd65909587c663f127c65455e4d2641838c9224994c9221830c66c0ca4c0fa0ca4cae20e34c5632438cbc71290cbc638a4ad2642c05f0617c8c1c787124465f2c1fe7485485d3f72fffbd2c4ff83b74592d26ff796ce783199c1ff75a8a433f73512314c4212c15b9a1095b195b15b960be4cbe0be4cbe5838d838be4d838be0c6e4e30ce386e4d58ce38b071e563706370372582422c252960908c90d297cac90cc908908ac90cadb936e1b936e38c36e1b82c37056dc1b71c61b72dc9b70dc9b70dc162f9f2bbe4ef9be7caef92c5f3e577c15df058be0aef8390a422b908ae422b90cb12196242f2c4845890fce43908e4390ce4290ce43908db86e0db96e4db86e4b0dc9b72dc161b936e5b836e5b936e5b936e1b92c370586e0b0dc1b72dc95b7256dc1b70dc1b72dc9b72dc1b70dc95b7056dc9b70dcff9b72dcf9b70dc9b72dc15b70586e0b0dc1b70dc95b726dcb71e586e4b0dc7fffffffff95fc658f8fffffffcafe2ffffff390a43390e42f2b90ce43908b12195c86721c86721c85e5721796243f2c4845890cae422b908e4390ce4290cae422b908e4390cb1217fffff962f92c5f3fffffffffe58be7ffffffffcb17cd5f2c0a266f813e066289b3a462529c5265e39c50512651a4ca61c96096631294bc632f1cbc731294bc630e30ae532b8c90f3158c38f32438ae33158c1b82b0e34a8491985f04929924630798c1e3079978c71498948121184847141589486289948665210a2462898a26581448aca432c0a2462890a2456289958a27e58144cb1f17ff963e23f8fe3f2c7c5e6dc3726dcb726dc370586e4db86e4db96e4b1c79b70dc9b72dc1b72dc1b72dc9b70dc1b72dc9b72dcf9b72dcf9b72dc95b70586e0db96e0b121162432b908b12115c865890cae43fff2c486572195c85e6dcb706dcb706dcb726dc37256dc15b7256dc9b70dc161b92c372586e4adb8ff36e1b936e5b8ff390a422b908ae422b908ae432b908e4390ce42908e4290ffcb1211c8521962422c484721486721c86572196242ff2bbe3cb17c15df058be4aef82bbe4b17c95df258be0b17c9df17c79df37c95df277cdf258be3fcef8be3caef82bbe7ce4390ce42908ae42390e43ff2c48457211c8721962432c485e721c845890bce43908e42908ae43f2b90cae422b908ae43f390e432b90cb121e11a244c8532310ce157e3496d8d93103fcc48c61f831931cad5270ae8192a1276cb51950b27064a9958b034403a095cd245b3b7114c8a46353c2ce1fffbd2c4ea83f37d5cce0ff6d7c60934de41cd6691444353298d52a832342b64c8a324908d5644353aa8444a1cf46b3f9a6506a968b563fea8af41bb1a648798f1e63c898c266f07155e133b3428486c913c33670cf9a295866cf19e39485681a081a081a1e129c677e57e1a07cacd338ad120ecd23499f1de8cc44d0f8ce46e19e819c990a0fe52909c5101a089f871a3e54287b64d19551340e34117fed19e91222672049f133f1b24748b928d4a8f709b9371d2478a3a26e891e375d22fc75f375b28f33ce909bd76cecbc9301f81dc82ceab0a9713b93676594f58edb49da3bef3c2f3bb03b6b1cbdf772e8cf0b4730257481e26ecdc70de789b62ab46d344ae916a6e3981b8f916a586c6b29d8d916c6f3a6eb84df9bed5b98379ee61f52c72bd3d3dc87e821ca177e00791c393b87227f2cd69c7ddc7a067703cc3b0ee47dafcbe61fbad63ee01800661f807c0111c7079e00600181e7819600647aa47e30c10cc641634bbb8df69a30a24cd04093289c8cae19347bb8e0aea368b28d8ea232684cca8573291ccd40a33350ecc624a30995cd890738837cd083103010c969c366b18d326230e03d1b0c1a1c317908ca25031f8502c0b2c898684248150e4120d48b4e061269366e3a6e4269a868803069b4e9c149d4e930374461238afa008c638402091a80889ac8840afd213404097154d5215a622b3ded69d6804b9a641a640282a5500d598d64c98100a470c870a802590fcd274de84d350cb014ba7df57e00281aa52ce5e2c55733dceccb1da81986f825237da3552354c4d752de4b60161a862611a68063251aa618a71c381bcaa78ad160060880a19d761ac460168cb38280a22ba4826407294a76971400b370db81204d8111b8f344f102a8e2e36a8dae0369545055d5692f2ca619932e67782e235a17eb5aa3a58661da90d3b4ca588b5d4e50214d093204b8ac74401342cd035225f635d0f3639a0ba51c4e648a6f9554c0b385ced7393cb8cf34a6970a6b5ba5a6ed5a5a5d534bad56954bad5594cb6f5694cb795a354dda58cd3674b19b3a954bad56954bad5594cb7095592028b51774bdc5f541a2a0287884f4281658d330cc64c37028f90c0237c00d19e686807c2e76e46b7a60fc415882830e5341837c7077c6a1e61ac1664858156418b18fffbd2c4f28234520cec0e67178619bf8c199c3fa82898c416f157c0b2aa1a08eb2a42498c798ab00190bb440d8a34055cca2823337443517315c0a3e43008df023463a6680c44a04145d541a56555050f50c51751550e50d5165655505575344d90148c4b04b844f2580cbc28c30941d0128808c0c28a9890e38611942802e5abb7325d56e5d9a765618b8414088443052520e8c4002e3913005532a0c5b0af083a29c02e4d0e01ac3546c3805c20892c065e166015260121a3178ad6bb7265da54a5c10a804031921214708210972048e1862c885c42852520e8c4422dda0115e3427f6028360882dea6429528dc91a8ec94a92891e98050305180050a985124a81d488085970e60634c20061c54c4871c3084a5a82dfa5123ea732c0a8f2db5805575e0d11b0ae972bcbb522ad2a5c49513d288a9280bb96c32d04749fc894c24d10a7523635c282d52c08ee9955ca55d2fae14ec0c70e94c414d45332e3130305555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555";
|
|
3467
|
+
var Es = Object.defineProperty, B = (a, e, t, i) => {
|
|
3246
3468
|
for (var s = void 0, r = a.length - 1, o; r >= 0; r--)
|
|
3247
3469
|
(o = a[r]) && (s = o(e, t, s) || s);
|
|
3248
|
-
return s &&
|
|
3470
|
+
return s && Es(e, t, s), s;
|
|
3249
3471
|
};
|
|
3250
|
-
const
|
|
3251
|
-
|
|
3252
|
-
const
|
|
3472
|
+
const E = Je.noConflict();
|
|
3473
|
+
E.setLevel("info");
|
|
3474
|
+
const ne = "cb_", $s = (a) => new Promise((e) => setTimeout(e, a));
|
|
3253
3475
|
class R extends Yt {
|
|
3254
3476
|
constructor() {
|
|
3255
3477
|
super(), this.actionIdCounter = 0, this.currentLoadContext = {}, this.prefilledFormValues = {}, this.wsClient = null, this.webAudioProcessor = null, this.webAudioTrackId = null, this.webAudioCurrentMark = null, this.replyMessage = null, this.streamingResponseInProgress = !1, this.streamingResponseLastText = null, this.streamingResponseBuffer = null, this.streamingResponseTagStartPos = 0, this.streamingResponseCurrentTag = null, this.tabsBroadcastChannel = new BroadcastChannel("c7o-bot-tabs"), this.tabId = "c7o-bot-tab-" + (self.crypto?.randomUUID?.() || Math.random().toString(36).slice(2)), this.tabsBroadcastChannel.addEventListener("message", this.handleBroadcastMessage.bind(this)), console.log(`c7o: AppState: created, tabId=${this.tabId}`);
|
|
3256
3478
|
}
|
|
3257
3479
|
// this is called at startup
|
|
3258
3480
|
setSetting(e) {
|
|
3259
|
-
|
|
3260
|
-
|
|
3481
|
+
E.info("appState: Startup: setSetting", e), this.setting = e, this.initBot().catch((t) => {
|
|
3482
|
+
E.info(`Exception during bot initialization: ${t.message}`);
|
|
3261
3483
|
});
|
|
3262
3484
|
}
|
|
3263
3485
|
// set language
|
|
@@ -3272,7 +3494,7 @@ class R extends Yt {
|
|
|
3272
3494
|
async initBot() {
|
|
3273
3495
|
if (!this.botSettingsInitialized) {
|
|
3274
3496
|
const i = `${this.setting.url.startsWith("localhost") ? "http" : "https"}://${this.setting.url}/api/bot/settings/${this.setting.orgId}/${this.setting.botId}`;
|
|
3275
|
-
|
|
3497
|
+
E.info(`Getting bot settings at ${i} ...`);
|
|
3276
3498
|
let s = null, r = null;
|
|
3277
3499
|
try {
|
|
3278
3500
|
s = await fetch(i, {
|
|
@@ -3282,13 +3504,13 @@ class R extends Yt {
|
|
|
3282
3504
|
"X-Enegel-Signature": this.setting.botId
|
|
3283
3505
|
//"ngrok-skip-browser-warning": "1",
|
|
3284
3506
|
}
|
|
3285
|
-
}), !s.ok || s.status !== 200 ?
|
|
3507
|
+
}), !s.ok || s.status !== 200 ? E.error(`Failed to get bot ${this.setting.botId} settings: ${s.status} ${s.statusText}`) : r = await s.json();
|
|
3286
3508
|
} catch (o) {
|
|
3287
|
-
|
|
3509
|
+
E.error(`Failed to get bot ${this.setting.botId} settings: ${o.message}`), r = null;
|
|
3288
3510
|
}
|
|
3289
3511
|
if (this.botSettingsInitialized = !0, this.botSettings = r, !r) {
|
|
3290
|
-
if (
|
|
3291
|
-
|
|
3512
|
+
if (E.error(`Unable to retrieve bot settings - bot disabled. Retry in ${this.botSettingsRetryTimeout} seconds.`), this.disabled = !0, this.botSettingsRetryTimeout > 80) {
|
|
3513
|
+
E.error("Failed to retrieve bot settings - bot disabled. Retries exhausted. Refresh page to attempt again.");
|
|
3292
3514
|
return;
|
|
3293
3515
|
}
|
|
3294
3516
|
this.botSettingsInitialized = !1, setTimeout(async () => {
|
|
@@ -3296,17 +3518,17 @@ class R extends Yt {
|
|
|
3296
3518
|
}, this.botSettingsRetryTimeout * 1e3), this.botSettingsRetryTimeout = this.botSettingsRetryTimeout * 2;
|
|
3297
3519
|
return;
|
|
3298
3520
|
}
|
|
3299
|
-
|
|
3521
|
+
E.info("Got bot settings - bot is enabled", r), this.disabled = !1, this.setting.welcomeMessage = r?.welcomeMessage || "How can I help ?", this.setting.disclaimerMessage = r?.disclaimerMessage && r.disclaimerMessage !== "" ? r.disclaimerMessage : null, this.setting.engageMessage = r?.engageMessage || "How can I help ?", this.setting.engageTimeout = r?.engageTimeout || 5, this.setting.splitMessagesAtBreak = "splitMessagesAtBreak" in r ? r.splitMessagesAtBreak : !1, this.setting.feedbackEnabled = "feedbackEnabled" in r ? r.feedbackEnabled : !1, this.setting.uploadImages = "uploadImages" in r ? r.uploadImages : !1, this.setting.newConversationTimeoutInSec = r?.newConversationTimeoutInSec || 86400, this.setting.enableNotificationSound = "enableNotificationSound" in r ? r.enableNotificationSound : !0, this.setting.botAdvancedSettings = r?.botAdvancedSettings ?? {}, this.setting.startFeedbackFromMessage = "startFeedbackFromMessage" in this.setting.botAdvancedSettings ? this.setting.botAdvancedSettings.startFeedbackFromMessage : 1, this.setting.enableMultiModalConnection = this.setting.botAdvancedSettings?.enableMultiModalConnection ?? !1, this.setting.fileUploadEnabledExtensions = this.setting.botAdvancedSettings?.fileUploadEnabledExtensions || ".jpeg,.jpg,.png,.pdf,.txt,.har,.zip,.mov,.mp4,.mp3", this.setting.fileUploadMaxFileSizeMB = this.setting.botAdvancedSettings?.fileUploadMaxFileSizeMB || 30, this.setting.enableMultiModalConnection ? this.setting.enableAudio = !0 : this.setting.enableAudio = !1, this.initConversation(), this.shouldEngage === "true" && setTimeout(() => {
|
|
3300
3522
|
this.showEngagePopup();
|
|
3301
3523
|
}, this.setting.engageTimeout * 1e3);
|
|
3302
3524
|
}
|
|
3303
3525
|
const e = new URLSearchParams(window.location.search);
|
|
3304
3526
|
if (e.has("c7o_bot_open")) {
|
|
3305
3527
|
const t = e.get("c7o_bot_open");
|
|
3306
|
-
this.open = t !== "false" && t !== "no" && t !== "0",
|
|
3528
|
+
this.open = t !== "false" && t !== "no" && t !== "0", E.info(`C7O-BOT:INIT: Force open=${this.open} from query parameter c7o_bot_open=${e.get("c7o_bot_open")}`);
|
|
3307
3529
|
}
|
|
3308
|
-
this.connectWs === "true" && (
|
|
3309
|
-
|
|
3530
|
+
this.connectWs === "true" && (E.info("appState: connectWs is true"), this.getWsClient().catch((t) => {
|
|
3531
|
+
E.error(`Exception during ws client startup: ${t.message}`);
|
|
3310
3532
|
})), setTimeout(() => {
|
|
3311
3533
|
window.dispatchEvent(
|
|
3312
3534
|
new CustomEvent("c7o:bot:stateEvent", {
|
|
@@ -3329,7 +3551,7 @@ class R extends Yt {
|
|
|
3329
3551
|
this.initStartupForm();
|
|
3330
3552
|
}
|
|
3331
3553
|
async clearConversation(e = !0) {
|
|
3332
|
-
await this.stopAudio(), this.mediaStartedAudio = !1, this.wsClient && e && (await this.wsClient.stop(), this.wsClient = null), this.connected = !1, this.conversationId =
|
|
3554
|
+
await this.stopAudio(), this.mediaStartedAudio = !1, this.wsClient && e && (await this.wsClient.stop(), this.wsClient = null), this.connected = !1, this.conversationId = fe(), this.lastConversationUpdate = Date.now(), e && (this.connectWs = "false", this.shouldEngage = "true"), this.messages = [], this.unreadMessages = 0, this.actions = [], this.showNewConversation = !1, this.context = this.currentLoadContext, this.form = null, this.addMessage({
|
|
3333
3555
|
author: "assistant",
|
|
3334
3556
|
type: "text",
|
|
3335
3557
|
data: {
|
|
@@ -3337,6 +3559,19 @@ class R extends Yt {
|
|
|
3337
3559
|
}
|
|
3338
3560
|
}), this.initStartupForm();
|
|
3339
3561
|
}
|
|
3562
|
+
// AGENT // ////////////////////////////////////////////////////
|
|
3563
|
+
async handleAgentDisconnected(e) {
|
|
3564
|
+
E.info(`c7o: Agent disconnected ${this.webAudioCurrentMark}`, e), this.addMessage({
|
|
3565
|
+
id: e?.id || null,
|
|
3566
|
+
author: "assistant",
|
|
3567
|
+
type: "text",
|
|
3568
|
+
data: {
|
|
3569
|
+
text: "_Left chat_",
|
|
3570
|
+
...e.userName && { userName: e.userName },
|
|
3571
|
+
...e.userAvatar && { userAvatar: e.userAvatar }
|
|
3572
|
+
}
|
|
3573
|
+
}), this.showNewConversation = !0;
|
|
3574
|
+
}
|
|
3340
3575
|
// BROADCAST // ///////////////////////////////////////////////////
|
|
3341
3576
|
async handleBroadcastMessage(e) {
|
|
3342
3577
|
const t = e?.data || null;
|
|
@@ -3356,7 +3591,7 @@ class R extends Yt {
|
|
|
3356
3591
|
// we will start actual audio capture only after we receive mediaStarted confirmation from server
|
|
3357
3592
|
async startAudio() {
|
|
3358
3593
|
this.mediaStartAudioRequested || (this.webAudioProcessor || (this.webAudioProcessor = new pt(), this.webAudioProcessor.on("audio", this.onAudioChunkCaptured.bind(this)), this.webAudioProcessor.on("playbackEnded", this.onPlaybackEnded.bind(this)), this.webAudioProcessor.on("terminate", this.onWebAudioTerminate.bind(this))), await this.sendEvent({
|
|
3359
|
-
id:
|
|
3594
|
+
id: fe(),
|
|
3360
3595
|
type: "mediaStart",
|
|
3361
3596
|
mediaType: "audio",
|
|
3362
3597
|
mimeType: "audio/L16",
|
|
@@ -3370,7 +3605,7 @@ class R extends Yt {
|
|
|
3370
3605
|
}
|
|
3371
3606
|
async stopAudio() {
|
|
3372
3607
|
this.webAudioProcessor && (this.webAudioProcessor.removeAllListeners(), await this.stopWebAudio(), this.webAudioProcessor = null, await this.sendEvent({
|
|
3373
|
-
id:
|
|
3608
|
+
id: fe(),
|
|
3374
3609
|
type: "mediaStop",
|
|
3375
3610
|
mediaType: "audio"
|
|
3376
3611
|
}), this.postBroadcastMessage({
|
|
@@ -3394,7 +3629,7 @@ class R extends Yt {
|
|
|
3394
3629
|
}
|
|
3395
3630
|
async onAudioChunkCaptured(e) {
|
|
3396
3631
|
!e || !e.audio || await this.sendEvent({
|
|
3397
|
-
id:
|
|
3632
|
+
id: fe(),
|
|
3398
3633
|
type: "media",
|
|
3399
3634
|
mediaType: "audio",
|
|
3400
3635
|
media: {
|
|
@@ -3404,8 +3639,8 @@ class R extends Yt {
|
|
|
3404
3639
|
}
|
|
3405
3640
|
// When finished playing audio, clear trackId and send mark message
|
|
3406
3641
|
async onPlaybackEnded() {
|
|
3407
|
-
this.webAudioCurrentMark && (
|
|
3408
|
-
id:
|
|
3642
|
+
this.webAudioCurrentMark && (E.info(`c7o: mark ${this.webAudioCurrentMark} completed`), await this.sendEvent({
|
|
3643
|
+
id: fe(),
|
|
3409
3644
|
type: "mediaMark",
|
|
3410
3645
|
mark: {
|
|
3411
3646
|
name: this.webAudioCurrentMark
|
|
@@ -3413,7 +3648,7 @@ class R extends Yt {
|
|
|
3413
3648
|
}), this.webAudioCurrentMark = null, this.webAudioTrackId = null);
|
|
3414
3649
|
}
|
|
3415
3650
|
async onWebAudioTerminate() {
|
|
3416
|
-
|
|
3651
|
+
E.info("c7o: terminating audio"), await this.stopAudio();
|
|
3417
3652
|
}
|
|
3418
3653
|
// Confirmation from server that media started
|
|
3419
3654
|
// {"type":"mediaStarted","mediaType":"audio","mediaTransport":"webmedia","webmedia":{"mimeType":"audio/L16","mediaSpec":{"sampleRate":24000,"channels":1}}}
|
|
@@ -3432,16 +3667,16 @@ class R extends Yt {
|
|
|
3432
3667
|
if (!e || e?.type !== "media" || !e?.media || e?.mediaType !== "audio" || !e?.media?.payload || !this.webAudioProcessor || !this.webAudioStarted)
|
|
3433
3668
|
return;
|
|
3434
3669
|
const t = e.media.payload;
|
|
3435
|
-
this.webAudioTrackId || (this.webAudioTrackId =
|
|
3670
|
+
this.webAudioTrackId || (this.webAudioTrackId = fe()), E.info(`${Date.now()}: Playing audio: ${t.length} bytes, trackId: ${this.webAudioTrackId}`), await this.webAudioProcessor.playAudio(t, this.webAudioTrackId);
|
|
3436
3671
|
}
|
|
3437
3672
|
// {"type": "mediaMark","mark": {"name": "1757277902935"}}
|
|
3438
3673
|
async handleMediaMark(e) {
|
|
3439
|
-
!this.webAudioProcessor || !this.webAudioStarted || (this.webAudioCurrentMark = e?.mark?.name || null,
|
|
3674
|
+
!this.webAudioProcessor || !this.webAudioStarted || (this.webAudioCurrentMark = e?.mark?.name || null, E.info(`c7o: Current media mark set to ${this.webAudioCurrentMark}`, e));
|
|
3440
3675
|
}
|
|
3441
3676
|
// Confirmation from server that media stopped
|
|
3442
3677
|
//{"type":"mediaClear","mediaType":"audio"}
|
|
3443
3678
|
async handleMediaClear(e) {
|
|
3444
|
-
|
|
3679
|
+
E.info("c7o: Got mediaClear, clearing buffered media", e), this.mediaStartedAudio = !1, !(!this.webAudioProcessor || !this.webAudioStarted) && (this.webAudioTrackId = null, await this.webAudioProcessor.interruptAudio());
|
|
3445
3680
|
}
|
|
3446
3681
|
// ////////////////////////////////////////////////////////////
|
|
3447
3682
|
setPrefilledFormFields(e) {
|
|
@@ -3464,15 +3699,15 @@ class R extends Yt {
|
|
|
3464
3699
|
return;
|
|
3465
3700
|
const e = await this.getWsClient();
|
|
3466
3701
|
if (!e) {
|
|
3467
|
-
|
|
3702
|
+
E.error("Error - failed to obtain ws client");
|
|
3468
3703
|
return;
|
|
3469
3704
|
}
|
|
3470
3705
|
const t = {
|
|
3471
|
-
id:
|
|
3706
|
+
id: fe(),
|
|
3472
3707
|
type: "setContext",
|
|
3473
3708
|
contextData: this.context
|
|
3474
3709
|
};
|
|
3475
|
-
e.sendMessage(t),
|
|
3710
|
+
e.sendMessage(t), E.info("Sent context:", this.context);
|
|
3476
3711
|
}
|
|
3477
3712
|
getContext() {
|
|
3478
3713
|
return this.context;
|
|
@@ -3487,7 +3722,7 @@ class R extends Yt {
|
|
|
3487
3722
|
}
|
|
3488
3723
|
const e = Nt(null, ["startupForm"], this.botSettings);
|
|
3489
3724
|
if (!e || !e?.name) {
|
|
3490
|
-
|
|
3725
|
+
E.info("Startup form not present");
|
|
3491
3726
|
return;
|
|
3492
3727
|
}
|
|
3493
3728
|
this.initForm(e);
|
|
@@ -3498,20 +3733,20 @@ class R extends Yt {
|
|
|
3498
3733
|
return;
|
|
3499
3734
|
const s = Nt(null, ["fields"], e);
|
|
3500
3735
|
if (!Array.isArray(s) || s.length <= 0) {
|
|
3501
|
-
|
|
3736
|
+
E.info("form has no fields", e);
|
|
3502
3737
|
return;
|
|
3503
3738
|
}
|
|
3504
|
-
const r = `${
|
|
3739
|
+
const r = `${ne}${this.setting.botId}.${this.conversationId}.form.${i}`, o = localStorage.getItem(r);
|
|
3505
3740
|
if (o) {
|
|
3506
3741
|
let f = null;
|
|
3507
3742
|
try {
|
|
3508
3743
|
f = JSON.parse(o);
|
|
3509
3744
|
} catch (p) {
|
|
3510
|
-
|
|
3745
|
+
E.error(`Failed to parse stored form data: ${p.message}`), f = null;
|
|
3511
3746
|
}
|
|
3512
3747
|
if (f) {
|
|
3513
3748
|
this.sendFormData(i, f).catch((p) => {
|
|
3514
|
-
|
|
3749
|
+
E.error(`Error when submitting form: ${p.message}`);
|
|
3515
3750
|
});
|
|
3516
3751
|
return;
|
|
3517
3752
|
}
|
|
@@ -3522,7 +3757,7 @@ class R extends Yt {
|
|
|
3522
3757
|
this.engage = !1, this.shouldEngage = "false";
|
|
3523
3758
|
}
|
|
3524
3759
|
showEngagePopup() {
|
|
3525
|
-
this.open || (
|
|
3760
|
+
this.open || (E.info("Engaging User !"), this.engage = !0, this.playAudioNotification());
|
|
3526
3761
|
}
|
|
3527
3762
|
playAudioNotification() {
|
|
3528
3763
|
if (!this.setting.enableNotificationSound)
|
|
@@ -3533,7 +3768,7 @@ class R extends Yt {
|
|
|
3533
3768
|
o[f] = parseInt(r.substr(f * 2, 2), 16);
|
|
3534
3769
|
return o;
|
|
3535
3770
|
};
|
|
3536
|
-
let t = new Blob([e(
|
|
3771
|
+
let t = new Blob([e(Is)], { type: "application/octet-stream" });
|
|
3537
3772
|
const i = URL.createObjectURL(t);
|
|
3538
3773
|
new Audio(i).play();
|
|
3539
3774
|
}
|
|
@@ -3546,7 +3781,7 @@ class R extends Yt {
|
|
|
3546
3781
|
if (this.wsClient)
|
|
3547
3782
|
return this.wsClient;
|
|
3548
3783
|
let t = `${this.setting.url.startsWith("localhost") ? "ws" : "wss"}://${this.setting.url}/api/bot/connect/${this.setting.orgId}/${this.setting.botId}/${this.conversationId}`;
|
|
3549
|
-
return this.setting.enableMultiModalConnection && (t += "?multiModal=true",
|
|
3784
|
+
return this.setting.enableMultiModalConnection && (t += "?multiModal=true", E.info("MultiModal connection enabled - adding multiModal=true parameter")), E.info(`Initiating ws connection to ${t} ...`), this.wsClient = new ts({
|
|
3550
3785
|
url: t,
|
|
3551
3786
|
orgId: this.setting.orgId,
|
|
3552
3787
|
botId: this.setting.botId,
|
|
@@ -3566,11 +3801,11 @@ class R extends Yt {
|
|
|
3566
3801
|
}), await this.wsClient.start(), this.connectWs = "true", this.wsClient;
|
|
3567
3802
|
}
|
|
3568
3803
|
handleWscClose(e) {
|
|
3569
|
-
|
|
3804
|
+
E.info(`WSC: connection closed, connected: ${this.wsClient?.connected}`, e), this.stopWebAudio().catch((t) => {
|
|
3570
3805
|
}), this.connected = !1;
|
|
3571
3806
|
}
|
|
3572
3807
|
async handleWscConnectError(e) {
|
|
3573
|
-
|
|
3808
|
+
E.info("WSC: connect error - resetting conversation", e);
|
|
3574
3809
|
const t = this.wsClient?.url || null;
|
|
3575
3810
|
if (this.wsClient)
|
|
3576
3811
|
try {
|
|
@@ -3596,15 +3831,15 @@ class R extends Yt {
|
|
|
3596
3831
|
const s = t.includes("?"), [r, o] = s ? t.split("?") : [t, ""], f = r.split("/");
|
|
3597
3832
|
f[f.length - 1] = this.conversationId;
|
|
3598
3833
|
const p = f.join("/"), v = o ? `${p}?${o}` : p;
|
|
3599
|
-
this.wsClient.url = v, await
|
|
3834
|
+
this.wsClient.url = v, await $s(1e3), await this.wsClient.start(), E.info(`WSC: started new conversation, conversationId=${this.conversationId}`);
|
|
3600
3835
|
} catch (i) {
|
|
3601
|
-
|
|
3836
|
+
E.error(`WSC: failed to reset conversation: ${i.message}`, i);
|
|
3602
3837
|
}
|
|
3603
3838
|
}
|
|
3604
3839
|
handleWscConnecting(e) {
|
|
3605
|
-
|
|
3840
|
+
E.info(`WSC: on connecting(${e}), connected: ${this.wsClient?.connected}`), this.connecting = e, !this.connecting && this.wsClient?.connected ? (this.connected = !0, this.context && typeof this.context == "object" && Object.keys(this.context).length > 0 && this.wsClient.queueMessage(
|
|
3606
3841
|
{
|
|
3607
|
-
id:
|
|
3842
|
+
id: fe(),
|
|
3608
3843
|
type: "setContext",
|
|
3609
3844
|
contextData: this.context
|
|
3610
3845
|
},
|
|
@@ -3619,7 +3854,7 @@ class R extends Yt {
|
|
|
3619
3854
|
}
|
|
3620
3855
|
// Update typing state based on received message
|
|
3621
3856
|
updateTypingState(e) {
|
|
3622
|
-
this.typingActive ? e && ["message", "message-chunk", "media", "typing-stopped"].includes(e?.type) && (this.typingActive = !1,
|
|
3857
|
+
this.typingActive ? e && ["message", "message-chunk", "media", "typing-stopped"].includes(e?.type) && (this.typingActive = !1, E.info("c7o: typing stopped")) : e && e?.type === "typing" && (this.typingActive = !0, E.info("c7o: typing started"));
|
|
3623
3858
|
}
|
|
3624
3859
|
handleWscMessage(e) {
|
|
3625
3860
|
if (e?.type === "ack")
|
|
@@ -3692,22 +3927,14 @@ class R extends Yt {
|
|
|
3692
3927
|
break;
|
|
3693
3928
|
}
|
|
3694
3929
|
case "agent-disconnected": {
|
|
3695
|
-
this.
|
|
3696
|
-
id: e?.id || null,
|
|
3697
|
-
author: "assistant",
|
|
3698
|
-
type: "text",
|
|
3699
|
-
data: {
|
|
3700
|
-
text: "_Left chat_",
|
|
3701
|
-
...e.userName && { userName: e.userName },
|
|
3702
|
-
...e.userAvatar && { userAvatar: e.userAvatar }
|
|
3703
|
-
}
|
|
3930
|
+
this.handleAgentDisconnected(e).catch((i) => {
|
|
3704
3931
|
});
|
|
3705
3932
|
break;
|
|
3706
3933
|
}
|
|
3707
3934
|
//{"type":"agent-connected","author":"assistant","userName":"SF DEV ADMIN"}
|
|
3708
3935
|
//{"type":"agent-disconnected","author":"assistant","userName":"SF DEV ADMIN"}
|
|
3709
3936
|
case "form": {
|
|
3710
|
-
if (
|
|
3937
|
+
if (E.info("Got form:", e), this.replyMessage && this.replyMessage.id) {
|
|
3711
3938
|
const i = this.replyMessage.data?.text || "";
|
|
3712
3939
|
(this.replyMessage.isThinking || i.trim() === "") && (this.removeMessage(this.replyMessage.id), this.replyMessage = null);
|
|
3713
3940
|
}
|
|
@@ -3753,7 +3980,7 @@ class R extends Yt {
|
|
|
3753
3980
|
if (e !== -1)
|
|
3754
3981
|
if (this.setting.splitMessagesAtBreak) {
|
|
3755
3982
|
const t = this.streamingResponseBuffer.substring(0, e).trim(), i = this.streamingResponseBuffer.substring(e + 4).trim();
|
|
3756
|
-
(t !== "" || this.replyMessage?.data?.text !== "") && (
|
|
3983
|
+
(t !== "" || this.replyMessage?.data?.text !== "") && (E.info(`BREAK: Splitting the message: ${this.streamingResponseBuffer} >>> prev: ${t} next: ${i}`), this.replyMessage = this.updateMessage(this.replyMessage, t), this.replyMessage = { author: "assistant", type: "text", isThinking: !1, data: { text: i } }, this.addMessage(this.replyMessage));
|
|
3757
3984
|
} else
|
|
3758
3985
|
this.replyMessage = this.updateMessage(this.replyMessage, this.streamingResponseBuffer);
|
|
3759
3986
|
this.streamingResponseBuffer = null, this.streamingResponseTagStartPos = 0, this.streamingResponseCurrentTag = null;
|
|
@@ -3762,11 +3989,11 @@ class R extends Yt {
|
|
|
3762
3989
|
if (!this.streamingResponseBuffer || !this.replyMessage)
|
|
3763
3990
|
return;
|
|
3764
3991
|
if (this.streamingResponseBuffer.indexOf("![") === -1) {
|
|
3765
|
-
|
|
3992
|
+
E.info(`NOT IMG TAG: ${this.streamingResponseBuffer}`), this.replyMessage = this.updateMessage(this.replyMessage, this.streamingResponseBuffer), this.streamingResponseBuffer = null, this.streamingResponseCurrentTag = null;
|
|
3766
3993
|
return;
|
|
3767
3994
|
}
|
|
3768
3995
|
const e = this.streamingResponseBuffer.lastIndexOf("]"), t = this.streamingResponseBuffer.lastIndexOf(")");
|
|
3769
|
-
e === -1 || t === -1 || e > t || (
|
|
3996
|
+
e === -1 || t === -1 || e > t || (E.info(`IMG TAG END: ${this.streamingResponseBuffer}`), this.isValidImageLink(this.streamingResponseBuffer) && (this.replyMessage = this.updateMessage(this.replyMessage, this.streamingResponseBuffer)), this.streamingResponseBuffer = null, this.streamingResponseCurrentTag = null);
|
|
3770
3997
|
}
|
|
3771
3998
|
isValidImageLink(e = "") {
|
|
3772
3999
|
return !(e.indexOf("example.com") !== -1 || e.indexOf("imgur.com") !== -1 || e.indexOf("attachment:") !== -1);
|
|
@@ -3786,7 +4013,7 @@ class R extends Yt {
|
|
|
3786
4013
|
this.streamingResponseBuffer = e, this.streamingResponseTagStartPos = e.indexOf("<"), this.streamingResponseCurrentTag = "br";
|
|
3787
4014
|
return;
|
|
3788
4015
|
} else if (e.indexOf("![") !== -1 || e.endsWith("!")) {
|
|
3789
|
-
this.streamingResponseBuffer = e, this.streamingResponseCurrentTag = "img",
|
|
4016
|
+
this.streamingResponseBuffer = e, this.streamingResponseCurrentTag = "img", E.info(`IMG TAG START: ${this.streamingResponseBuffer}`);
|
|
3790
4017
|
return;
|
|
3791
4018
|
}
|
|
3792
4019
|
this.streamingResponseLastText = t, this.replyMessage = this.updateMessage(this.replyMessage, t);
|
|
@@ -3842,7 +4069,7 @@ class R extends Yt {
|
|
|
3842
4069
|
detail: f
|
|
3843
4070
|
})
|
|
3844
4071
|
), this.sendActionCompleted(f).catch((p) => {
|
|
3845
|
-
|
|
4072
|
+
E.error(`Error: failed to send action completed: ${p.message}`);
|
|
3846
4073
|
});
|
|
3847
4074
|
}
|
|
3848
4075
|
this.actions.splice(s, 1);
|
|
@@ -3860,10 +4087,10 @@ class R extends Yt {
|
|
|
3860
4087
|
}
|
|
3861
4088
|
}
|
|
3862
4089
|
async sendMessage(e) {
|
|
3863
|
-
e = this.formatMessage(e),
|
|
4090
|
+
e = this.formatMessage(e), E.info("Send Message:", e), this.showNewConversation && (this.showNewConversation = !1), this.messages = this.messages.concat([e]), this.lastConversationUpdate = Date.now();
|
|
3864
4091
|
const t = await this.getWsClient();
|
|
3865
4092
|
if (!t) {
|
|
3866
|
-
|
|
4093
|
+
E.error("Error - failed to obtain ws client"), this.replyMessage = null;
|
|
3867
4094
|
return;
|
|
3868
4095
|
}
|
|
3869
4096
|
t.sendMessage({
|
|
@@ -3874,7 +4101,7 @@ class R extends Yt {
|
|
|
3874
4101
|
}
|
|
3875
4102
|
// TODO revisit below
|
|
3876
4103
|
formatMessage(e) {
|
|
3877
|
-
return e.id || (e.id =
|
|
4104
|
+
return e.id || (e.id = fe()), e.timestamp || (e.timestamp = Date.now()), e.author === "assistant" && !e.replyId && (e.replyId = this.messages.findLast((t) => t.author === "user")?.id || void 0), e;
|
|
3878
4105
|
}
|
|
3879
4106
|
// add message
|
|
3880
4107
|
addMessage(e) {
|
|
@@ -3909,16 +4136,16 @@ class R extends Yt {
|
|
|
3909
4136
|
// Submit current form data
|
|
3910
4137
|
async submitForm(e) {
|
|
3911
4138
|
if (!this.form) {
|
|
3912
|
-
|
|
4139
|
+
E.info("submitForm: No form is active - ignored");
|
|
3913
4140
|
return;
|
|
3914
4141
|
}
|
|
3915
|
-
const t = `${
|
|
4142
|
+
const t = `${ne}${this.setting.botId}.${this.conversationId}.form.${this.form.name}`;
|
|
3916
4143
|
await this.sendFormData(this.form.name, e), localStorage.setItem(t, JSON.stringify(e)), "name" in e && (this.feedbackName = e.name), "email" in e && (this.feedbackEmail = e.email), this.form = null;
|
|
3917
4144
|
}
|
|
3918
4145
|
async sendFormData(e, t) {
|
|
3919
4146
|
const i = await this.getWsClient();
|
|
3920
4147
|
if (!i) {
|
|
3921
|
-
|
|
4148
|
+
E.error("Error - failed to obtain ws client");
|
|
3922
4149
|
return;
|
|
3923
4150
|
}
|
|
3924
4151
|
i.sendMessage({
|
|
@@ -3930,7 +4157,7 @@ class R extends Yt {
|
|
|
3930
4157
|
async sendActionCompleted(e) {
|
|
3931
4158
|
const t = await this.getWsClient();
|
|
3932
4159
|
if (!t) {
|
|
3933
|
-
|
|
4160
|
+
E.error("Error - failed to obtain ws client");
|
|
3934
4161
|
return;
|
|
3935
4162
|
}
|
|
3936
4163
|
t.sendMessage({
|
|
@@ -3941,7 +4168,7 @@ class R extends Yt {
|
|
|
3941
4168
|
async sendEvent(e) {
|
|
3942
4169
|
const t = await this.getWsClient();
|
|
3943
4170
|
if (!t) {
|
|
3944
|
-
|
|
4171
|
+
E.error("Error - failed to obtain ws client");
|
|
3945
4172
|
return;
|
|
3946
4173
|
}
|
|
3947
4174
|
t.sendMessage(e);
|
|
@@ -3954,14 +4181,14 @@ class R extends Yt {
|
|
|
3954
4181
|
this.feedbackMessages.push(t), this.feedbackUserMessage = this.messages.findLast((i) => i.id === t.replyId)?.data?.text || "", this.feedbackAnswer = t?.data.text || "", this.feedbackAnswerMessageId = t?.id || "", this.feedbackAnswerUserName = t?.data.userName || "", this.feedback = !0;
|
|
3955
4182
|
}
|
|
3956
4183
|
async submitFeedback(e, t, i) {
|
|
3957
|
-
|
|
4184
|
+
E.info(`submitFeedback: ${this.feedbackScore}`), this.feedbackName = e, this.feedbackEmail = t;
|
|
3958
4185
|
const s = await this.getWsClient();
|
|
3959
4186
|
if (!s) {
|
|
3960
|
-
|
|
4187
|
+
E.error("Error - failed to obtain ws client"), this.replyMessage = null;
|
|
3961
4188
|
return;
|
|
3962
4189
|
}
|
|
3963
4190
|
s.sendMessage({
|
|
3964
|
-
id:
|
|
4191
|
+
id: fe(),
|
|
3965
4192
|
type: "feedback",
|
|
3966
4193
|
score: this.feedbackScore,
|
|
3967
4194
|
userMessage: this.feedbackUserMessage,
|
|
@@ -3998,76 +4225,88 @@ class R extends Yt {
|
|
|
3998
4225
|
}
|
|
3999
4226
|
async uploadFiles(e) {
|
|
4000
4227
|
if (!e?.length) return;
|
|
4001
|
-
const t =
|
|
4002
|
-
|
|
4003
|
-
|
|
4004
|
-
|
|
4005
|
-
|
|
4228
|
+
const t = b.setting.fileUploadMaxFileSizeMB || 30, i = t * 1024 * 1024, s = e?.find((v) => v.size > i);
|
|
4229
|
+
if (s) {
|
|
4230
|
+
E.error(
|
|
4231
|
+
`File "${s.name}" exceeds the ${t} MB limit and will not be uploaded.`
|
|
4232
|
+
), Ya({
|
|
4233
|
+
message: `File is larger than ${t} MB`,
|
|
4234
|
+
variant: "danger",
|
|
4235
|
+
duration: 3800,
|
|
4236
|
+
closeable: !0
|
|
4237
|
+
});
|
|
4006
4238
|
return;
|
|
4007
4239
|
}
|
|
4008
|
-
const
|
|
4009
|
-
|
|
4010
|
-
|
|
4240
|
+
const r = await this.filesToBase64(e);
|
|
4241
|
+
E.info("Uploading files:", r);
|
|
4242
|
+
const o = await this.getWsClient();
|
|
4243
|
+
if (!o) {
|
|
4244
|
+
E.error("Error - failed to obtain ws client");
|
|
4245
|
+
return;
|
|
4246
|
+
}
|
|
4247
|
+
const f = fe();
|
|
4248
|
+
o.sendMessage({
|
|
4249
|
+
id: f,
|
|
4011
4250
|
type: "upload",
|
|
4012
|
-
files:
|
|
4251
|
+
files: r
|
|
4013
4252
|
});
|
|
4014
|
-
const
|
|
4015
|
-
id:
|
|
4253
|
+
const p = {
|
|
4254
|
+
id: f,
|
|
4016
4255
|
timestamp: Date.now(),
|
|
4017
4256
|
author: "user",
|
|
4018
4257
|
type: "upload",
|
|
4019
4258
|
data: {
|
|
4020
|
-
uploadedFiles:
|
|
4259
|
+
uploadedFiles: r
|
|
4021
4260
|
}
|
|
4022
4261
|
};
|
|
4023
|
-
this.addMessage(
|
|
4262
|
+
this.addMessage(p);
|
|
4024
4263
|
}
|
|
4025
4264
|
notifyWidgetOpenState() {
|
|
4026
4265
|
this.wsClient && this.wsClient.sendMessage({
|
|
4027
|
-
id:
|
|
4266
|
+
id: fe(),
|
|
4028
4267
|
type: "widgetState",
|
|
4029
4268
|
open: this.open
|
|
4030
4269
|
});
|
|
4031
4270
|
}
|
|
4032
4271
|
}
|
|
4033
4272
|
B([
|
|
4034
|
-
|
|
4035
|
-
|
|
4273
|
+
ce({ prefix: ne }),
|
|
4274
|
+
z({ value: "en" })
|
|
4036
4275
|
], R.prototype, "language");
|
|
4037
4276
|
B([
|
|
4038
|
-
|
|
4039
|
-
|
|
4277
|
+
ce({ prefix: ne }),
|
|
4278
|
+
z({ value: "light" })
|
|
4040
4279
|
], R.prototype, "theme");
|
|
4041
4280
|
B([
|
|
4042
|
-
|
|
4043
|
-
|
|
4281
|
+
ce({ prefix: ne }),
|
|
4282
|
+
z({ type: Boolean, value: !1 })
|
|
4044
4283
|
], R.prototype, "open");
|
|
4045
4284
|
B([
|
|
4046
|
-
|
|
4285
|
+
z({ type: Boolean, value: !1 })
|
|
4047
4286
|
], R.prototype, "alwaysOpen");
|
|
4048
4287
|
B([
|
|
4049
|
-
|
|
4050
|
-
|
|
4288
|
+
ce({ prefix: ne }),
|
|
4289
|
+
z({ value: "false" })
|
|
4051
4290
|
], R.prototype, "connectWs");
|
|
4052
4291
|
B([
|
|
4053
|
-
|
|
4054
|
-
|
|
4292
|
+
ce({ prefix: ne }),
|
|
4293
|
+
z({ value: fe() })
|
|
4055
4294
|
], R.prototype, "conversationId");
|
|
4056
4295
|
B([
|
|
4057
|
-
|
|
4058
|
-
|
|
4296
|
+
ce({ prefix: ne }),
|
|
4297
|
+
z({ value: 0 })
|
|
4059
4298
|
], R.prototype, "lastConversationUpdate");
|
|
4060
4299
|
B([
|
|
4061
|
-
|
|
4062
|
-
|
|
4300
|
+
ce({ prefix: ne }),
|
|
4301
|
+
z({ type: Array, value: [] })
|
|
4063
4302
|
], R.prototype, "messages");
|
|
4064
4303
|
B([
|
|
4065
|
-
|
|
4066
|
-
|
|
4304
|
+
ce({ prefix: ne }),
|
|
4305
|
+
z({ value: 0 })
|
|
4067
4306
|
], R.prototype, "unreadMessages");
|
|
4068
4307
|
B([
|
|
4069
|
-
|
|
4070
|
-
|
|
4308
|
+
ce({ prefix: ne }),
|
|
4309
|
+
z({
|
|
4071
4310
|
type: Array,
|
|
4072
4311
|
value: []
|
|
4073
4312
|
/*
|
|
@@ -4111,40 +4350,44 @@ B([
|
|
|
4111
4350
|
})
|
|
4112
4351
|
], R.prototype, "actions");
|
|
4113
4352
|
B([
|
|
4114
|
-
|
|
4115
|
-
|
|
4353
|
+
ce({ prefix: ne }),
|
|
4354
|
+
z({ type: Object, value: null })
|
|
4116
4355
|
], R.prototype, "form");
|
|
4117
4356
|
B([
|
|
4118
|
-
|
|
4357
|
+
z({ type: Boolean, value: !1 })
|
|
4119
4358
|
], R.prototype, "botSettingsInitialized");
|
|
4120
4359
|
B([
|
|
4121
|
-
|
|
4360
|
+
z({ type: Number, value: 5 })
|
|
4122
4361
|
], R.prototype, "botSettingsRetryTimeout");
|
|
4123
4362
|
B([
|
|
4124
|
-
|
|
4363
|
+
z({ type: Object, value: null })
|
|
4125
4364
|
], R.prototype, "botSettings");
|
|
4126
4365
|
B([
|
|
4127
|
-
|
|
4366
|
+
z({ type: Boolean, value: !0 })
|
|
4128
4367
|
], R.prototype, "disabled");
|
|
4129
4368
|
B([
|
|
4130
|
-
|
|
4369
|
+
z({ type: Boolean, value: !1 })
|
|
4131
4370
|
], R.prototype, "connecting");
|
|
4132
4371
|
B([
|
|
4133
|
-
|
|
4372
|
+
z({ type: Boolean, value: !1 })
|
|
4134
4373
|
], R.prototype, "connected");
|
|
4135
4374
|
B([
|
|
4136
|
-
|
|
4137
|
-
|
|
4375
|
+
ce({ prefix: ne }),
|
|
4376
|
+
z({ value: "true" })
|
|
4138
4377
|
], R.prototype, "shouldEngage");
|
|
4139
4378
|
B([
|
|
4140
|
-
|
|
4379
|
+
z({ type: Boolean, value: !1 })
|
|
4141
4380
|
], R.prototype, "engage");
|
|
4142
4381
|
B([
|
|
4143
|
-
|
|
4382
|
+
ce({ prefix: ne }),
|
|
4383
|
+
z({ type: Boolean, value: !1 })
|
|
4384
|
+
], R.prototype, "showNewConversation");
|
|
4385
|
+
B([
|
|
4386
|
+
z({ type: Boolean, value: !1 })
|
|
4144
4387
|
], R.prototype, "typingActive");
|
|
4145
4388
|
B([
|
|
4146
|
-
|
|
4147
|
-
|
|
4389
|
+
ce({ prefix: ne }),
|
|
4390
|
+
z({
|
|
4148
4391
|
type: Object,
|
|
4149
4392
|
value: {
|
|
4150
4393
|
orgId: null,
|
|
@@ -4159,65 +4402,67 @@ B([
|
|
|
4159
4402
|
newConversationTimeoutInSec: 86400,
|
|
4160
4403
|
enableNotificationSound: !0,
|
|
4161
4404
|
botAdvancedOptions: null,
|
|
4162
|
-
enableMultiModalConnection: !1
|
|
4405
|
+
enableMultiModalConnection: !1,
|
|
4406
|
+
fileUploadEnabledExtensions: ".jpeg,.jpg,.png,.pdf,.txt,.har,.zip,.mov,.mp4,.mp3",
|
|
4407
|
+
fileUploadMaxFileSizeMB: 30
|
|
4163
4408
|
}
|
|
4164
4409
|
})
|
|
4165
4410
|
], R.prototype, "setting");
|
|
4166
4411
|
B([
|
|
4167
|
-
|
|
4168
|
-
|
|
4412
|
+
ce({ prefix: ne }),
|
|
4413
|
+
z({ type: Object, value: {} })
|
|
4169
4414
|
], R.prototype, "context");
|
|
4170
4415
|
B([
|
|
4171
|
-
|
|
4416
|
+
z({ type: String, value: "top-end" })
|
|
4172
4417
|
], R.prototype, "appearanceAnchorPopupPosition");
|
|
4173
4418
|
B([
|
|
4174
|
-
|
|
4419
|
+
z({ type: String, value: "danger" })
|
|
4175
4420
|
], R.prototype, "appearanceAnchorBadgeVariant");
|
|
4176
4421
|
B([
|
|
4177
|
-
|
|
4422
|
+
z({ type: String, value: "right" })
|
|
4178
4423
|
], R.prototype, "appearanceUserMessageAvatarPosition");
|
|
4179
4424
|
B([
|
|
4180
|
-
|
|
4425
|
+
z({ type: Boolean, value: !1 })
|
|
4181
4426
|
], R.prototype, "feedback");
|
|
4182
4427
|
B([
|
|
4183
|
-
|
|
4428
|
+
z({ type: Number, value: 5 })
|
|
4184
4429
|
], R.prototype, "feedbackScore");
|
|
4185
4430
|
B([
|
|
4186
|
-
|
|
4431
|
+
z({ type: String, value: "" })
|
|
4187
4432
|
], R.prototype, "feedbackUserMessage");
|
|
4188
4433
|
B([
|
|
4189
|
-
|
|
4434
|
+
z({ type: String, value: "" })
|
|
4190
4435
|
], R.prototype, "feedbackAnswerMessageId");
|
|
4191
4436
|
B([
|
|
4192
|
-
|
|
4437
|
+
z({ type: String, value: "" })
|
|
4193
4438
|
], R.prototype, "feedbackAnswer");
|
|
4194
4439
|
B([
|
|
4195
|
-
|
|
4440
|
+
z({ type: String, value: "" })
|
|
4196
4441
|
], R.prototype, "feedbackAnswerUserName");
|
|
4197
4442
|
B([
|
|
4198
|
-
|
|
4443
|
+
z({ type: Array, value: [] })
|
|
4199
4444
|
], R.prototype, "feedbackMessages");
|
|
4200
4445
|
B([
|
|
4201
|
-
|
|
4202
|
-
|
|
4446
|
+
ce({ prefix: ne }),
|
|
4447
|
+
z({ type: String, value: "" })
|
|
4203
4448
|
], R.prototype, "feedbackName");
|
|
4204
4449
|
B([
|
|
4205
|
-
|
|
4206
|
-
|
|
4450
|
+
ce({ prefix: ne }),
|
|
4451
|
+
z({ type: String, value: "" })
|
|
4207
4452
|
], R.prototype, "feedbackEmail");
|
|
4208
4453
|
B([
|
|
4209
|
-
|
|
4454
|
+
z({ type: Boolean, value: !1 })
|
|
4210
4455
|
], R.prototype, "mediaStartAudioRequested");
|
|
4211
4456
|
B([
|
|
4212
|
-
|
|
4457
|
+
z({ type: Boolean, value: !1 })
|
|
4213
4458
|
], R.prototype, "mediaStartedAudio");
|
|
4214
4459
|
B([
|
|
4215
|
-
|
|
4460
|
+
z({ type: Boolean, value: !1 })
|
|
4216
4461
|
], R.prototype, "webAudioStarted");
|
|
4217
4462
|
B([
|
|
4218
|
-
|
|
4463
|
+
z({ type: Boolean, value: !1 })
|
|
4219
4464
|
], R.prototype, "webAudioMuted");
|
|
4220
|
-
const b = new R(),
|
|
4465
|
+
const b = new R(), Ps = J`
|
|
4221
4466
|
${ke}
|
|
4222
4467
|
:host {
|
|
4223
4468
|
position: relative;
|
|
@@ -4292,12 +4537,12 @@ const b = new R(), Ms = J`
|
|
|
4292
4537
|
display: inline;
|
|
4293
4538
|
}
|
|
4294
4539
|
`;
|
|
4295
|
-
var
|
|
4540
|
+
var Ls = Object.defineProperty, Rs = (a, e, t, i) => {
|
|
4296
4541
|
for (var s = void 0, r = a.length - 1, o; r >= 0; r--)
|
|
4297
4542
|
(o = a[r]) && (s = o(e, t, s) || s);
|
|
4298
|
-
return s &&
|
|
4543
|
+
return s && Ls(e, t, s), s;
|
|
4299
4544
|
};
|
|
4300
|
-
|
|
4545
|
+
Oi("system", {
|
|
4301
4546
|
resolver: (a) => ""
|
|
4302
4547
|
});
|
|
4303
4548
|
(() => {
|
|
@@ -4307,7 +4552,7 @@ zi("system", {
|
|
|
4307
4552
|
return !1;
|
|
4308
4553
|
}
|
|
4309
4554
|
})();
|
|
4310
|
-
class
|
|
4555
|
+
class re extends Fe {
|
|
4311
4556
|
constructor() {
|
|
4312
4557
|
super(...arguments), this.lang = "en";
|
|
4313
4558
|
}
|
|
@@ -4334,16 +4579,16 @@ class ne extends Fe {
|
|
|
4334
4579
|
return this.dispatchEvent(i), i;
|
|
4335
4580
|
}
|
|
4336
4581
|
}
|
|
4337
|
-
|
|
4582
|
+
Rs([
|
|
4338
4583
|
x({ type: String })
|
|
4339
|
-
],
|
|
4340
|
-
var
|
|
4341
|
-
for (var s = i > 1 ? void 0 : i ?
|
|
4584
|
+
], re.prototype, "lang");
|
|
4585
|
+
var zs = Object.defineProperty, Bs = Object.getOwnPropertyDescriptor, Ja = (a, e, t, i) => {
|
|
4586
|
+
for (var s = i > 1 ? void 0 : i ? Bs(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
4342
4587
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
4343
|
-
return i && s &&
|
|
4588
|
+
return i && s && zs(e, t, s), s;
|
|
4344
4589
|
};
|
|
4345
|
-
const
|
|
4346
|
-
let zt = class extends
|
|
4590
|
+
const Os = '<svg viewBox="0 0 16 16" width="16px" height="16px"><path fill="currentColor" d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"></path></svg>';
|
|
4591
|
+
let zt = class extends re {
|
|
4347
4592
|
constructor() {
|
|
4348
4593
|
super(...arguments), this.title = "ChatBot";
|
|
4349
4594
|
}
|
|
@@ -4363,7 +4608,7 @@ let zt = class extends ne {
|
|
|
4363
4608
|
${W(
|
|
4364
4609
|
b.alwaysOpen,
|
|
4365
4610
|
() => u``,
|
|
4366
|
-
() => u`<div class="cb-header-close" part="header-close">${Y(
|
|
4611
|
+
() => u`<div class="cb-header-close" part="header-close">${Y(Os)}</div>`
|
|
4367
4612
|
)}
|
|
4368
4613
|
</header>`;
|
|
4369
4614
|
}
|
|
@@ -4405,14 +4650,14 @@ let zt = class extends ne {
|
|
|
4405
4650
|
});
|
|
4406
4651
|
}
|
|
4407
4652
|
};
|
|
4408
|
-
zt.styles =
|
|
4409
|
-
|
|
4653
|
+
zt.styles = Ps;
|
|
4654
|
+
Ja([
|
|
4410
4655
|
x({ type: String, attribute: "title" })
|
|
4411
4656
|
], zt.prototype, "title", 2);
|
|
4412
|
-
zt =
|
|
4657
|
+
zt = Ja([
|
|
4413
4658
|
K("cb-header")
|
|
4414
4659
|
], zt);
|
|
4415
|
-
const
|
|
4660
|
+
const qs = J`
|
|
4416
4661
|
${ke}
|
|
4417
4662
|
.cb-footer {
|
|
4418
4663
|
line-height: 60px;
|
|
@@ -4427,12 +4672,12 @@ const Ls = J`
|
|
|
4427
4672
|
color: var(--primary-color);
|
|
4428
4673
|
}
|
|
4429
4674
|
`;
|
|
4430
|
-
var
|
|
4431
|
-
for (var s = i > 1 ? void 0 : i ?
|
|
4675
|
+
var Ds = Object.getOwnPropertyDescriptor, Fs = (a, e, t, i) => {
|
|
4676
|
+
for (var s = i > 1 ? void 0 : i ? Ds(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
4432
4677
|
(o = a[r]) && (s = o(s) || s);
|
|
4433
4678
|
return s;
|
|
4434
4679
|
};
|
|
4435
|
-
let Jt = class extends
|
|
4680
|
+
let Jt = class extends re {
|
|
4436
4681
|
constructor() {
|
|
4437
4682
|
super(...arguments), this.year = (/* @__PURE__ */ new Date()).getFullYear();
|
|
4438
4683
|
}
|
|
@@ -4467,11 +4712,11 @@ let Jt = class extends ne {
|
|
|
4467
4712
|
`;
|
|
4468
4713
|
}
|
|
4469
4714
|
};
|
|
4470
|
-
Jt.styles =
|
|
4471
|
-
Jt =
|
|
4715
|
+
Jt.styles = qs;
|
|
4716
|
+
Jt = Fs([
|
|
4472
4717
|
K("cb-footer")
|
|
4473
4718
|
], Jt);
|
|
4474
|
-
const
|
|
4719
|
+
const js = J`
|
|
4475
4720
|
${ke}
|
|
4476
4721
|
|
|
4477
4722
|
:host {
|
|
@@ -4672,7 +4917,7 @@ const Os = J`
|
|
|
4672
4917
|
background-size: 100%;
|
|
4673
4918
|
transition: background 0s;
|
|
4674
4919
|
}
|
|
4675
|
-
`,
|
|
4920
|
+
`, Ka = J`
|
|
4676
4921
|
:host {
|
|
4677
4922
|
--primary-color: var(--sl-color-primary-600);
|
|
4678
4923
|
}
|
|
@@ -4826,7 +5071,7 @@ const Os = J`
|
|
|
4826
5071
|
.card-btn[aria-disabled="true"]:focus-visible {
|
|
4827
5072
|
box-shadow: none;
|
|
4828
5073
|
}
|
|
4829
|
-
`,
|
|
5074
|
+
`, Za = J`
|
|
4830
5075
|
:host {
|
|
4831
5076
|
--primary-color: var(--sl-color-primary-600);
|
|
4832
5077
|
}
|
|
@@ -4917,10 +5162,10 @@ const Os = J`
|
|
|
4917
5162
|
}
|
|
4918
5163
|
.split-btn[aria-expanded="true"] .split-btn__caret { transform: rotate(180deg); }
|
|
4919
5164
|
`;
|
|
4920
|
-
var
|
|
4921
|
-
for (var s = i > 1 ? void 0 : i ?
|
|
5165
|
+
var Hs = Object.defineProperty, Vs = Object.getOwnPropertyDescriptor, je = (a, e, t, i) => {
|
|
5166
|
+
for (var s = i > 1 ? void 0 : i ? Vs(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
4922
5167
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
4923
|
-
return i && s &&
|
|
5168
|
+
return i && s && Hs(e, t, s), s;
|
|
4924
5169
|
};
|
|
4925
5170
|
let gt = class extends Fe {
|
|
4926
5171
|
constructor() {
|
|
@@ -5101,7 +5346,7 @@ let Ge = class extends Fe {
|
|
|
5101
5346
|
this._onDocPointerDown && (document.removeEventListener("pointerdown", this._onDocPointerDown, { capture: !0 }), this._onDocPointerDown = void 0), this._onKeydown && (document.removeEventListener("keydown", this._onKeydown, { capture: !0 }), this._onKeydown = void 0);
|
|
5102
5347
|
}
|
|
5103
5348
|
};
|
|
5104
|
-
Ge.styles =
|
|
5349
|
+
Ge.styles = Za;
|
|
5105
5350
|
je([
|
|
5106
5351
|
x({ type: String })
|
|
5107
5352
|
], Ge.prototype, "variant", 2);
|
|
@@ -5120,220 +5365,6 @@ je([
|
|
|
5120
5365
|
Ge = je([
|
|
5121
5366
|
K("cb-split-button")
|
|
5122
5367
|
], Ge);
|
|
5123
|
-
var Fs = Object.defineProperty, js = Object.getOwnPropertyDescriptor, st = (a, e, t, i) => {
|
|
5124
|
-
for (var s = i > 1 ? void 0 : i ? js(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
5125
|
-
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
5126
|
-
return i && s && Fs(e, t, s), s;
|
|
5127
|
-
};
|
|
5128
|
-
const Mt = "cb-toast-outlet", Ia = "cb-toast-outlet-style";
|
|
5129
|
-
function Hs() {
|
|
5130
|
-
let a = document.getElementById(Mt);
|
|
5131
|
-
if (a || (a = document.createElement("div"), a.id = Mt, document.body.appendChild(a)), !document.getElementById(Ia)) {
|
|
5132
|
-
const e = document.createElement("style");
|
|
5133
|
-
e.id = Ia, e.textContent = `
|
|
5134
|
-
/* Global outlet that holds all toasts */
|
|
5135
|
-
#${Mt} {
|
|
5136
|
-
position: fixed;
|
|
5137
|
-
right: 40px;
|
|
5138
|
-
bottom: 55px;
|
|
5139
|
-
display: flex;
|
|
5140
|
-
flex-direction: column;
|
|
5141
|
-
gap: 10px;
|
|
5142
|
-
z-index: 2147483646; /* below very-top overlays if any */
|
|
5143
|
-
align-items: flex-end;
|
|
5144
|
-
pointer-events: none; /* clicks pass through except on toast itself */
|
|
5145
|
-
}
|
|
5146
|
-
@media (max-width: 600px) {
|
|
5147
|
-
#${Mt} {
|
|
5148
|
-
left: 8px;
|
|
5149
|
-
right: 8px;
|
|
5150
|
-
align-items: stretch; /* stretch toasts to full width on mobile */
|
|
5151
|
-
}
|
|
5152
|
-
}
|
|
5153
|
-
`, document.head.appendChild(e);
|
|
5154
|
-
}
|
|
5155
|
-
return a;
|
|
5156
|
-
}
|
|
5157
|
-
function Vs(a) {
|
|
5158
|
-
const e = Hs(), t = document.createElement("cb-toast");
|
|
5159
|
-
return t.message = a.message, t.variant = a.variant ?? "success", t.duration = typeof a.duration == "number" ? a.duration : 3e3, t.closeable = !0, t.icon = a.icon ?? "", t.ariaLive = a.ariaLive ?? "polite", e.appendChild(t), t;
|
|
5160
|
-
}
|
|
5161
|
-
let qe = class extends Fe {
|
|
5162
|
-
constructor() {
|
|
5163
|
-
super(...arguments), this.message = "", this.variant = "success", this.duration = 3e3, this.closeable = !1, this.icon = "", this.ariaLive = "polite", this._open = !1, this._closing = !1, this._defaultIcons = {
|
|
5164
|
-
success: "✓",
|
|
5165
|
-
danger: "❌",
|
|
5166
|
-
warning: "⚠️",
|
|
5167
|
-
info: "ℹ️",
|
|
5168
|
-
neutral: "💬",
|
|
5169
|
-
primary: "⭐"
|
|
5170
|
-
};
|
|
5171
|
-
}
|
|
5172
|
-
connectedCallback() {
|
|
5173
|
-
super.connectedCallback(), queueMicrotask(() => this.open());
|
|
5174
|
-
}
|
|
5175
|
-
disconnectedCallback() {
|
|
5176
|
-
super.disconnectedCallback(), this._clearTimer();
|
|
5177
|
-
}
|
|
5178
|
-
render() {
|
|
5179
|
-
const a = ["toast", this.variant, this._open ? "open" : "", this._closing ? "closing" : ""].filter(Boolean).join(" "), e = this.icon || this._defaultIcons[this.variant] || this._defaultIcons.success;
|
|
5180
|
-
return u`
|
|
5181
|
-
<div
|
|
5182
|
-
class=${a}
|
|
5183
|
-
role="status"
|
|
5184
|
-
aria-live=${this.ariaLive}
|
|
5185
|
-
>
|
|
5186
|
-
${u`<span class="icon" aria-hidden="true">${this._renderIcon(e)}</span>`}
|
|
5187
|
-
<div class="msg">
|
|
5188
|
-
${this.message ? u`${this.message}` : u`<slot></slot>`}
|
|
5189
|
-
</div>
|
|
5190
|
-
${this.closeable ? u`<button class="close" @click=${this.close} aria-label="Close">×</button>` : Ae}
|
|
5191
|
-
</div>
|
|
5192
|
-
`;
|
|
5193
|
-
}
|
|
5194
|
-
/** Programmatic API */
|
|
5195
|
-
open() {
|
|
5196
|
-
this._open || (this._open = !0, this.requestUpdate(), this.duration > 0 && (this._timer = window.setTimeout(() => this.close(), this.duration)));
|
|
5197
|
-
}
|
|
5198
|
-
async close() {
|
|
5199
|
-
this._closing || (this._closing = !0, this.requestUpdate(), await new Promise((a) => setTimeout(() => a(), 200)), this.remove());
|
|
5200
|
-
}
|
|
5201
|
-
_clearTimer() {
|
|
5202
|
-
this._timer && (clearTimeout(this._timer), this._timer = void 0);
|
|
5203
|
-
}
|
|
5204
|
-
_renderIcon(a) {
|
|
5205
|
-
return a.trim().startsWith("<") ? u`${Y(a)}` : a;
|
|
5206
|
-
}
|
|
5207
|
-
};
|
|
5208
|
-
qe.styles = J`
|
|
5209
|
-
:host {
|
|
5210
|
-
display: block;
|
|
5211
|
-
pointer-events: auto; /* receive pointer events within toast */
|
|
5212
|
-
contain: content;
|
|
5213
|
-
font-size: var(--enegelai-bot-base-font-size, 16px);
|
|
5214
|
-
font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
|
|
5215
|
-
}
|
|
5216
|
-
|
|
5217
|
-
.toast {
|
|
5218
|
-
--_bg: var(--sl-color-success-600, #2f9e44);
|
|
5219
|
-
--_fg: #fff;
|
|
5220
|
-
--_border: transparent;
|
|
5221
|
-
|
|
5222
|
-
display: grid;
|
|
5223
|
-
grid-template-columns: auto 1fr auto;
|
|
5224
|
-
align-items: center;
|
|
5225
|
-
gap: 10px;
|
|
5226
|
-
|
|
5227
|
-
font-size: 0.7em;
|
|
5228
|
-
font-weight: 400;
|
|
5229
|
-
|
|
5230
|
-
max-width: min(420px, 92vw);
|
|
5231
|
-
padding: 16px 20px;
|
|
5232
|
-
border-radius: 12px;
|
|
5233
|
-
border: 1px solid var(--_border);
|
|
5234
|
-
background: var(--_bg);
|
|
5235
|
-
background: color-mix(in srgb, var(--_bg) 85%, transparent);
|
|
5236
|
-
color: var(--_fg);
|
|
5237
|
-
box-shadow:
|
|
5238
|
-
0 10px 15px -3px rgba(0,0,0,.1),
|
|
5239
|
-
0 4px 6px -4px rgba(0,0,0,.08);
|
|
5240
|
-
|
|
5241
|
-
opacity: 0;
|
|
5242
|
-
transform: translateY(6px);
|
|
5243
|
-
transition: opacity 1s ease, transform 1s ease, filter 1s ease;
|
|
5244
|
-
}
|
|
5245
|
-
|
|
5246
|
-
.toast.open {
|
|
5247
|
-
opacity: 1;
|
|
5248
|
-
transform: translateY(0);
|
|
5249
|
-
}
|
|
5250
|
-
|
|
5251
|
-
.toast.closing {
|
|
5252
|
-
opacity: 0;
|
|
5253
|
-
transform: translateY(6px);
|
|
5254
|
-
filter: saturate(.9) brightness(.98);
|
|
5255
|
-
}
|
|
5256
|
-
|
|
5257
|
-
.icon {
|
|
5258
|
-
display: inline-flex;
|
|
5259
|
-
align-items: center;
|
|
5260
|
-
justify-content: center;
|
|
5261
|
-
width: 22px;
|
|
5262
|
-
height: 22px;
|
|
5263
|
-
line-height: 1;
|
|
5264
|
-
font-size: 22px;
|
|
5265
|
-
user-select: none;
|
|
5266
|
-
background: transparent; /* ensure transparent background */
|
|
5267
|
-
}
|
|
5268
|
-
|
|
5269
|
-
.msg {
|
|
5270
|
-
font-size: 1.5em;
|
|
5271
|
-
line-height: 1.25;
|
|
5272
|
-
word-break: break-word;
|
|
5273
|
-
}
|
|
5274
|
-
|
|
5275
|
-
.close {
|
|
5276
|
-
appearance: none;
|
|
5277
|
-
background: transparent;
|
|
5278
|
-
border: none;
|
|
5279
|
-
color: inherit;
|
|
5280
|
-
font: inherit;
|
|
5281
|
-
font-size: 20px;
|
|
5282
|
-
cursor: pointer;
|
|
5283
|
-
opacity: .9;
|
|
5284
|
-
width: 28px;
|
|
5285
|
-
height: 28px;
|
|
5286
|
-
border-radius: 50%;
|
|
5287
|
-
display: inline-flex;
|
|
5288
|
-
align-items: center;
|
|
5289
|
-
justify-content: center;
|
|
5290
|
-
transition: background 1s ease, transform 1s ease;
|
|
5291
|
-
}
|
|
5292
|
-
.close:hover { background: color-mix(in srgb, #000 10%, transparent); }
|
|
5293
|
-
.close:active { transform: scale(.94); }
|
|
5294
|
-
.close:focus-visible {
|
|
5295
|
-
outline: none;
|
|
5296
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, #fff 60%, transparent);
|
|
5297
|
-
}
|
|
5298
|
-
|
|
5299
|
-
/* Variants — keep parity with your button palette */
|
|
5300
|
-
.toast.success { --_bg: var(--sl-color-success-600, #2f9e44); --_fg: #fff; }
|
|
5301
|
-
.toast.info { --_bg: var(--sl-color-info-600, #0b7285); --_fg: #fff; }
|
|
5302
|
-
.toast.warning { --_bg: var(--sl-color-warning-600, #f08c00); --_fg: #212529; }
|
|
5303
|
-
.toast.danger { --_bg: var(--sl-color-danger-600, #c92a2a); --_fg: #fff; }
|
|
5304
|
-
.toast.primary { --_bg: var(--sl-color-primary-600, hsl(200.4 98% 39.4%)); --_fg: #fff; }
|
|
5305
|
-
.toast.neutral {
|
|
5306
|
-
--_bg: var(--sl-color-neutral-50, hsl(0 0% 97.5%));
|
|
5307
|
-
--_fg: var(--sl-color-neutral-900, hsl(240 5.9% 10%));
|
|
5308
|
-
--_border: var(--sl-color-neutral-300, #d1d5db);
|
|
5309
|
-
}
|
|
5310
|
-
|
|
5311
|
-
/* Mobile fine-tuning: give a bit more padding */
|
|
5312
|
-
@media (max-width: 600px) {
|
|
5313
|
-
.toast { padding: 12px; }
|
|
5314
|
-
}
|
|
5315
|
-
`;
|
|
5316
|
-
st([
|
|
5317
|
-
x({ type: String })
|
|
5318
|
-
], qe.prototype, "message", 2);
|
|
5319
|
-
st([
|
|
5320
|
-
x({ type: String })
|
|
5321
|
-
], qe.prototype, "variant", 2);
|
|
5322
|
-
st([
|
|
5323
|
-
x({ type: Number })
|
|
5324
|
-
], qe.prototype, "duration", 2);
|
|
5325
|
-
st([
|
|
5326
|
-
x({ type: Boolean })
|
|
5327
|
-
], qe.prototype, "closeable", 2);
|
|
5328
|
-
st([
|
|
5329
|
-
x({ type: String })
|
|
5330
|
-
], qe.prototype, "icon", 2);
|
|
5331
|
-
st([
|
|
5332
|
-
x({ type: String })
|
|
5333
|
-
], qe.prototype, "ariaLive", 2);
|
|
5334
|
-
qe = st([
|
|
5335
|
-
K("cb-toast")
|
|
5336
|
-
], qe);
|
|
5337
5368
|
var Us = Object.defineProperty, Ns = Object.getOwnPropertyDescriptor, wt = (a, e, t, i) => {
|
|
5338
5369
|
for (var s = i > 1 ? void 0 : i ? Ns(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
5339
5370
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
@@ -5659,17 +5690,18 @@ let Me = class extends Fe {
|
|
|
5659
5690
|
body: JSON.stringify(r)
|
|
5660
5691
|
});
|
|
5661
5692
|
if (!o.ok) {
|
|
5662
|
-
Tt.error("c7o: cart/add.js failed"),
|
|
5693
|
+
Tt.error("c7o: cart/add.js failed"), Ya({
|
|
5663
5694
|
message: "Unable to add item to cart.",
|
|
5664
5695
|
variant: "danger",
|
|
5665
|
-
duration: 2800
|
|
5696
|
+
duration: 2800,
|
|
5697
|
+
closeable: !0
|
|
5666
5698
|
});
|
|
5667
5699
|
return;
|
|
5668
5700
|
}
|
|
5669
5701
|
await o.json(), Tt.info("c7o: cart/add.js - cart updated"), Tt.info("c7o: reloading window after cart update"), window.location.reload();
|
|
5670
5702
|
}
|
|
5671
5703
|
};
|
|
5672
|
-
Me.styles = [Ws,
|
|
5704
|
+
Me.styles = [Ws, Ka, Za];
|
|
5673
5705
|
Me.DRAG_THRESHOLD_PX = 10;
|
|
5674
5706
|
wt([
|
|
5675
5707
|
x({ type: Object })
|
|
@@ -5686,12 +5718,12 @@ wt([
|
|
|
5686
5718
|
Me = wt([
|
|
5687
5719
|
K("cb-block")
|
|
5688
5720
|
], Me);
|
|
5689
|
-
var Gs = Object.defineProperty, Xs = Object.getOwnPropertyDescriptor,
|
|
5721
|
+
var Gs = Object.defineProperty, Xs = Object.getOwnPropertyDescriptor, Qa = (a, e, t, i) => {
|
|
5690
5722
|
for (var s = i > 1 ? void 0 : i ? Xs(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
5691
5723
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
5692
5724
|
return i && s && Gs(e, t, s), s;
|
|
5693
5725
|
};
|
|
5694
|
-
let
|
|
5726
|
+
let Bt = class extends Fe {
|
|
5695
5727
|
constructor() {
|
|
5696
5728
|
super(...arguments), this.blocks = [];
|
|
5697
5729
|
}
|
|
@@ -5703,7 +5735,7 @@ let Ot = class extends Fe {
|
|
|
5703
5735
|
`;
|
|
5704
5736
|
}
|
|
5705
5737
|
};
|
|
5706
|
-
|
|
5738
|
+
Bt.styles = J`
|
|
5707
5739
|
:host {
|
|
5708
5740
|
display: block;
|
|
5709
5741
|
}
|
|
@@ -5714,12 +5746,12 @@ Ot.styles = J`
|
|
|
5714
5746
|
gap: 0.75em; /* vertical rhythm between blocks */
|
|
5715
5747
|
}
|
|
5716
5748
|
`;
|
|
5717
|
-
|
|
5749
|
+
Qa([
|
|
5718
5750
|
x({ type: Array })
|
|
5719
|
-
],
|
|
5720
|
-
|
|
5751
|
+
], Bt.prototype, "blocks", 2);
|
|
5752
|
+
Bt = Qa([
|
|
5721
5753
|
K("cb-blocks")
|
|
5722
|
-
],
|
|
5754
|
+
], Bt);
|
|
5723
5755
|
var Lt = { exports: {} }, Ys = Lt.exports, $a;
|
|
5724
5756
|
function Js() {
|
|
5725
5757
|
return $a || ($a = 1, (function(a, e) {
|
|
@@ -5785,19 +5817,19 @@ function Js() {
|
|
|
5785
5817
|
})), h;
|
|
5786
5818
|
}
|
|
5787
5819
|
function w(n) {
|
|
5788
|
-
var c = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, l = c.onElement, d = c.withCallback, h = c.avoidDuplicate, m = h === void 0 || h, g = c.once, y = g !== void 0 && g, A = c.useCapture, S = A !== void 0 && A, T = arguments.length > 2 ? arguments[2] : void 0,
|
|
5789
|
-
function
|
|
5790
|
-
F(d) && d.call(T, q, this), y &&
|
|
5820
|
+
var c = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, l = c.onElement, d = c.withCallback, h = c.avoidDuplicate, m = h === void 0 || h, g = c.once, y = g !== void 0 && g, A = c.useCapture, S = A !== void 0 && A, T = arguments.length > 2 ? arguments[2] : void 0, $ = l || [];
|
|
5821
|
+
function O(q) {
|
|
5822
|
+
F(d) && d.call(T, q, this), y && O.destroy();
|
|
5791
5823
|
}
|
|
5792
|
-
return j(
|
|
5793
|
-
v(
|
|
5794
|
-
var D = k(q, n,
|
|
5795
|
-
D.found && D.all.splice(D.evt, 1), q.removeEventListener && q.removeEventListener(n,
|
|
5824
|
+
return j($) && ($ = document.querySelectorAll($)), O.destroy = function() {
|
|
5825
|
+
v($, (function(q) {
|
|
5826
|
+
var D = k(q, n, O);
|
|
5827
|
+
D.found && D.all.splice(D.evt, 1), q.removeEventListener && q.removeEventListener(n, O, S);
|
|
5796
5828
|
}));
|
|
5797
|
-
}, v(
|
|
5798
|
-
var D = k(q, n,
|
|
5799
|
-
(q.addEventListener && m && !D.found || !m) && (q.addEventListener(n,
|
|
5800
|
-
})),
|
|
5829
|
+
}, v($, (function(q) {
|
|
5830
|
+
var D = k(q, n, O);
|
|
5831
|
+
(q.addEventListener && m && !D.found || !m) && (q.addEventListener(n, O, S), D.all.push({ eventName: n, fn: O }));
|
|
5832
|
+
})), O;
|
|
5801
5833
|
}
|
|
5802
5834
|
function _(n, c) {
|
|
5803
5835
|
v(c.split(" "), (function(l) {
|
|
@@ -5955,7 +5987,7 @@ function Js() {
|
|
|
5955
5987
|
})), g = m.sort()[0];
|
|
5956
5988
|
return document.querySelector('.gbtn[data-taborder="'.concat(g, '"]'));
|
|
5957
5989
|
}
|
|
5958
|
-
function
|
|
5990
|
+
function vi(n) {
|
|
5959
5991
|
if (n.events.hasOwnProperty("keyboard")) return !1;
|
|
5960
5992
|
n.events.keyboard = w("keydown", { onElement: window, withCallback: function(c, l) {
|
|
5961
5993
|
var d = (c = c || window.event).keyCode;
|
|
@@ -5978,7 +6010,7 @@ function Js() {
|
|
|
5978
6010
|
d == 39 && n.nextSlide(), d == 37 && n.prevSlide(), d == 27 && n.close();
|
|
5979
6011
|
} });
|
|
5980
6012
|
}
|
|
5981
|
-
var
|
|
6013
|
+
var wi = s((function n(c, l) {
|
|
5982
6014
|
var d = this, h = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null;
|
|
5983
6015
|
if (t(this, n), this.img = c, this.slide = l, this.onclose = h, this.img.setZoomEvents) return !1;
|
|
5984
6016
|
this.active = !1, this.zoomedIn = !1, this.dragging = !1, this.currentX = null, this.currentY = null, this.initialX = null, this.initialY = null, this.xOffset = 0, this.yOffset = 0, this.img.addEventListener("mousedown", (function(m) {
|
|
@@ -6023,13 +6055,13 @@ function Js() {
|
|
|
6023
6055
|
} }]), pa = s((function n() {
|
|
6024
6056
|
var c = this, l = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
6025
6057
|
t(this, n);
|
|
6026
|
-
var d = l.dragEl, h = l.toleranceX, m = h === void 0 ? 40 : h, g = l.toleranceY, y = g === void 0 ? 65 : g, A = l.slide, S = A === void 0 ? null : A, T = l.instance,
|
|
6027
|
-
this.el = d, this.active = !1, this.dragging = !1, this.currentX = null, this.currentY = null, this.initialX = null, this.initialY = null, this.xOffset = 0, this.yOffset = 0, this.direction = null, this.lastDirection = null, this.toleranceX = m, this.toleranceY = y, this.toleranceReached = !1, this.dragContainer = this.el, this.slide = S, this.instance =
|
|
6028
|
-
return c.dragStart(
|
|
6029
|
-
}), !1), this.el.addEventListener("mouseup", (function(
|
|
6030
|
-
return c.dragEnd(
|
|
6031
|
-
}), !1), this.el.addEventListener("mousemove", (function(
|
|
6032
|
-
return c.drag(
|
|
6058
|
+
var d = l.dragEl, h = l.toleranceX, m = h === void 0 ? 40 : h, g = l.toleranceY, y = g === void 0 ? 65 : g, A = l.slide, S = A === void 0 ? null : A, T = l.instance, $ = T === void 0 ? null : T;
|
|
6059
|
+
this.el = d, this.active = !1, this.dragging = !1, this.currentX = null, this.currentY = null, this.initialX = null, this.initialY = null, this.xOffset = 0, this.yOffset = 0, this.direction = null, this.lastDirection = null, this.toleranceX = m, this.toleranceY = y, this.toleranceReached = !1, this.dragContainer = this.el, this.slide = S, this.instance = $, this.el.addEventListener("mousedown", (function(O) {
|
|
6060
|
+
return c.dragStart(O);
|
|
6061
|
+
}), !1), this.el.addEventListener("mouseup", (function(O) {
|
|
6062
|
+
return c.dragEnd(O);
|
|
6063
|
+
}), !1), this.el.addEventListener("mousemove", (function(O) {
|
|
6064
|
+
return c.drag(O);
|
|
6033
6065
|
}), !1);
|
|
6034
6066
|
}), [{ key: "dragStart", value: function(n) {
|
|
6035
6067
|
if (this.slide.classList.contains("zoomed")) this.active = !1;
|
|
@@ -6072,26 +6104,26 @@ function Js() {
|
|
|
6072
6104
|
var d = arguments.length > 3 && arguments[3] !== void 0 && arguments[3];
|
|
6073
6105
|
n.style.transition = d ? "all .2s ease" : "", n.style.transform = "translate3d(".concat(c, "px, ").concat(l, "px, 0)");
|
|
6074
6106
|
} }]);
|
|
6075
|
-
function
|
|
6107
|
+
function xi(n, c, l, d) {
|
|
6076
6108
|
var h = n.querySelector(".gslide-media"), m = new Image(), g = "gSlideTitle_" + l, y = "gSlideDesc_" + l;
|
|
6077
6109
|
m.addEventListener("load", (function() {
|
|
6078
6110
|
F(d) && d();
|
|
6079
6111
|
}), !1), m.src = c.href, c.sizes != "" && c.srcset != "" && (m.sizes = c.sizes, m.srcset = c.srcset), m.alt = "", be(c.alt) || c.alt === "" || (m.alt = c.alt), c.title !== "" && m.setAttribute("aria-labelledby", g), c.description !== "" && m.setAttribute("aria-describedby", y), c.hasOwnProperty("_hasCustomWidth") && c._hasCustomWidth && (m.style.width = c.width), c.hasOwnProperty("_hasCustomHeight") && c._hasCustomHeight && (m.style.height = c.height), h.insertBefore(m, h.firstChild);
|
|
6080
6112
|
}
|
|
6081
|
-
function
|
|
6113
|
+
function ki(n, c, l, d) {
|
|
6082
6114
|
var h = this, m = n.querySelector(".ginner-container"), g = "gvideo" + l, y = n.querySelector(".gslide-media"), A = this.getAllPlayers();
|
|
6083
6115
|
_(m, "gvideo-container"), y.insertBefore(G('<div class="gvideo-wrapper"></div>'), y.firstChild);
|
|
6084
6116
|
var S = n.querySelector(".gvideo-wrapper");
|
|
6085
6117
|
he(this.settings.plyr.css, "Plyr");
|
|
6086
|
-
var T = c.href,
|
|
6118
|
+
var T = c.href, $ = c?.videoProvider, O = !1;
|
|
6087
6119
|
y.style.maxWidth = c.width, he(this.settings.plyr.js, "Plyr", (function() {
|
|
6088
|
-
if (
|
|
6089
|
-
|
|
6120
|
+
if (!$ && T.match(/vimeo\.com\/([0-9]*)/) && ($ = "vimeo"), !$ && (T.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || T.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || T.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/) || T.match(/(youtube\.com|youtube-nocookie\.com)\/shorts\/([a-zA-Z0-9\-_]+)/)) && ($ = "youtube"), $ === "local" || !$) {
|
|
6121
|
+
$ = "local";
|
|
6090
6122
|
var q = '<video id="' + g + '" ';
|
|
6091
|
-
q += 'style="background:#000; max-width: '.concat(c.width, ';" '), q += 'preload="metadata" ', q += 'x-webkit-airplay="allow" ', q += "playsinline ", q += "controls ", q += 'class="gvideo-local">', q += '<source src="'.concat(T, '">'),
|
|
6123
|
+
q += 'style="background:#000; max-width: '.concat(c.width, ';" '), q += 'preload="metadata" ', q += 'x-webkit-airplay="allow" ', q += "playsinline ", q += "controls ", q += 'class="gvideo-local">', q += '<source src="'.concat(T, '">'), O = G(q += "</video>");
|
|
6092
6124
|
}
|
|
6093
|
-
var D =
|
|
6094
|
-
_(S, "".concat(
|
|
6125
|
+
var D = O || G('<div id="'.concat(g, '" data-plyr-provider="').concat($, '" data-plyr-embed-id="').concat(T, '"></div>'));
|
|
6126
|
+
_(S, "".concat($, "-video gvideo")), S.appendChild(D), S.setAttribute("data-id", g), S.setAttribute("data-index", l);
|
|
6095
6127
|
var ee = ie(h.settings.plyr, "config") ? h.settings.plyr.config : {}, ge = new Plyr("#" + g, ee);
|
|
6096
6128
|
ge.on("ready", (function(ue) {
|
|
6097
6129
|
A[g] = ue.detail.plyr, F(d) && d();
|
|
@@ -6106,7 +6138,7 @@ function Js() {
|
|
|
6106
6138
|
var c = M(n.target, ".gslide-media");
|
|
6107
6139
|
n.type === "enterfullscreen" && _(c, "fullscreen"), n.type === "exitfullscreen" && P(c, "fullscreen");
|
|
6108
6140
|
}
|
|
6109
|
-
function
|
|
6141
|
+
function _i(n, c, l, d) {
|
|
6110
6142
|
var h, m = this, g = n.querySelector(".gslide-media"), y = !(!ie(c, "href") || !c.href) && c.href.split("#").pop().trim(), A = !(!ie(c, "content") || !c.content) && c.content;
|
|
6111
6143
|
if (A && (j(A) && (h = G('<div class="ginlined-content">'.concat(A, "</div>"))), V(A))) {
|
|
6112
6144
|
A.style.display == "none" && (A.style.display = "block");
|
|
@@ -6116,24 +6148,24 @@ function Js() {
|
|
|
6116
6148
|
if (y) {
|
|
6117
6149
|
var T = document.getElementById(y);
|
|
6118
6150
|
if (!T) return !1;
|
|
6119
|
-
var
|
|
6120
|
-
|
|
6151
|
+
var $ = T.cloneNode(!0);
|
|
6152
|
+
$.style.height = c.height, $.style.maxWidth = c.width, _($, "ginlined-content"), h = $;
|
|
6121
6153
|
}
|
|
6122
6154
|
if (!h) return console.error("Unable to append inline slide content", c), !1;
|
|
6123
|
-
g.style.height = c.height, g.style.width = c.width, g.appendChild(h), this.events["inlineclose" + y] = w("click", { onElement: g.querySelectorAll(".gtrigger-close"), withCallback: function(
|
|
6124
|
-
|
|
6155
|
+
g.style.height = c.height, g.style.width = c.width, g.appendChild(h), this.events["inlineclose" + y] = w("click", { onElement: g.querySelectorAll(".gtrigger-close"), withCallback: function(O) {
|
|
6156
|
+
O.preventDefault(), m.close();
|
|
6125
6157
|
} }), F(d) && d();
|
|
6126
6158
|
}
|
|
6127
|
-
function
|
|
6159
|
+
function Si(n, c, l, d) {
|
|
6128
6160
|
var h = n.querySelector(".gslide-media"), m = (function(g) {
|
|
6129
|
-
var y = g.url, A = g.allow, S = g.callback, T = g.appendTo,
|
|
6130
|
-
return
|
|
6131
|
-
|
|
6132
|
-
}, T && T.appendChild(
|
|
6161
|
+
var y = g.url, A = g.allow, S = g.callback, T = g.appendTo, $ = document.createElement("iframe");
|
|
6162
|
+
return $.className = "vimeo-video gvideo", $.src = y, $.style.width = "100%", $.style.height = "100%", A && $.setAttribute("allow", A), $.onload = function() {
|
|
6163
|
+
$.onload = null, _($, "node-ready"), F(S) && S();
|
|
6164
|
+
}, T && T.appendChild($), $;
|
|
6133
6165
|
})({ url: c.href, callback: d });
|
|
6134
6166
|
h.parentNode.style.maxWidth = c.width, h.parentNode.style.height = c.height, h.appendChild(m);
|
|
6135
6167
|
}
|
|
6136
|
-
var
|
|
6168
|
+
var Ci = s((function n() {
|
|
6137
6169
|
var c = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
6138
6170
|
t(this, n), this.defaults = { href: "", sizes: "", srcset: "", title: "", type: "", videoProvider: "", description: "", alt: "", descPosition: "bottom", effect: "", width: "", height: "", content: !1, zoomable: !0, draggable: !0 }, Ve(c) && (this.defaults = p(this.defaults, c));
|
|
6139
6171
|
}), [{ key: "sourceType", value: function(n) {
|
|
@@ -6173,17 +6205,17 @@ function Js() {
|
|
|
6173
6205
|
}));
|
|
6174
6206
|
}
|
|
6175
6207
|
if (d.description && d.description.substring(0, 1) === ".") {
|
|
6176
|
-
var
|
|
6208
|
+
var $;
|
|
6177
6209
|
try {
|
|
6178
|
-
|
|
6210
|
+
$ = document.querySelector(d.description).innerHTML;
|
|
6179
6211
|
} catch (q) {
|
|
6180
6212
|
if (!(q instanceof DOMException)) throw q;
|
|
6181
6213
|
}
|
|
6182
|
-
|
|
6214
|
+
$ && (d.description = $);
|
|
6183
6215
|
}
|
|
6184
6216
|
if (!d.description) {
|
|
6185
|
-
var
|
|
6186
|
-
|
|
6217
|
+
var O = n.querySelector(".glightbox-desc");
|
|
6218
|
+
O && (d.description = O.innerHTML);
|
|
6187
6219
|
}
|
|
6188
6220
|
return this.setSize(d, c, n), this.slideConfig = d, d;
|
|
6189
6221
|
} }, { key: "setSize", value: function(n, c) {
|
|
@@ -6200,18 +6232,18 @@ function Js() {
|
|
|
6200
6232
|
if (I(c, "loaded")) return !1;
|
|
6201
6233
|
var d = this.instance.settings, h = this.slideConfig, m = pe();
|
|
6202
6234
|
F(d.beforeSlideLoad) && d.beforeSlideLoad({ index: this.index, slide: c, player: !1 });
|
|
6203
|
-
var g = h.type, y = h.descPosition, A = c.querySelector(".gslide-media"), S = c.querySelector(".gslide-title"), T = c.querySelector(".gslide-desc"),
|
|
6204
|
-
if (F(d.afterSlideLoad) && (
|
|
6235
|
+
var g = h.type, y = h.descPosition, A = c.querySelector(".gslide-media"), S = c.querySelector(".gslide-title"), T = c.querySelector(".gslide-desc"), $ = c.querySelector(".gdesc-inner"), O = l, q = "gSlideTitle_" + this.index, D = "gSlideDesc_" + this.index;
|
|
6236
|
+
if (F(d.afterSlideLoad) && (O = function() {
|
|
6205
6237
|
F(l) && l(), d.afterSlideLoad({ index: n.index, slide: c, player: n.instance.getSlidePlayerInstance(n.index) });
|
|
6206
|
-
}), h.title == "" && h.description == "" ?
|
|
6207
|
-
if (g !== "external") return g === "inline" ? (
|
|
6238
|
+
}), h.title == "" && h.description == "" ? $ && $.parentNode.parentNode.removeChild($.parentNode) : (S && h.title !== "" ? (S.id = q, S.innerHTML = h.title) : S.parentNode.removeChild(S), T && h.description !== "" ? (T.id = D, m && d.moreLength > 0 ? (h.smallDescription = this.slideShortDesc(h.description, d.moreLength, d.moreText), T.innerHTML = h.smallDescription, this.descriptionEvents(T, h)) : T.innerHTML = h.description) : T.parentNode.removeChild(T), _(A.parentNode, "desc-".concat(y)), _($.parentNode, "description-".concat(y))), _(A, "gslide-".concat(g)), _(c, "loaded"), g !== "video") {
|
|
6239
|
+
if (g !== "external") return g === "inline" ? (_i.apply(this.instance, [c, h, this.index, O]), void (h.draggable && new pa({ dragEl: c.querySelector(".gslide-inline"), toleranceX: d.dragToleranceX, toleranceY: d.dragToleranceY, slide: c, instance: this.instance }))) : void (g !== "image" ? F(O) && O() : xi(c, h, this.index, (function() {
|
|
6208
6240
|
var ee = c.querySelector("img");
|
|
6209
|
-
h.draggable && new pa({ dragEl: ee, toleranceX: d.dragToleranceX, toleranceY: d.dragToleranceY, slide: c, instance: n.instance }), h.zoomable && ee.naturalWidth > ee.offsetWidth && (_(ee, "zoomable"), new
|
|
6241
|
+
h.draggable && new pa({ dragEl: ee, toleranceX: d.dragToleranceX, toleranceY: d.dragToleranceY, slide: c, instance: n.instance }), h.zoomable && ee.naturalWidth > ee.offsetWidth && (_(ee, "zoomable"), new wi(ee, c, (function() {
|
|
6210
6242
|
n.instance.resize();
|
|
6211
|
-
}))), F(
|
|
6243
|
+
}))), F(O) && O();
|
|
6212
6244
|
})));
|
|
6213
|
-
|
|
6214
|
-
} else
|
|
6245
|
+
Si.apply(this, [c, h, this.index, O]);
|
|
6246
|
+
} else ki.apply(this.instance, [c, h, this.index, O]);
|
|
6215
6247
|
} }, { key: "slideShortDesc", value: function(n) {
|
|
6216
6248
|
var c = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 50, l = arguments.length > 2 && arguments[2] !== void 0 && arguments[2], d = document.createElement("div");
|
|
6217
6249
|
d.innerHTML = n;
|
|
@@ -6237,13 +6269,13 @@ function Js() {
|
|
|
6237
6269
|
return G(this.instance.settings.slideHTML);
|
|
6238
6270
|
} }, { key: "getConfig", value: function() {
|
|
6239
6271
|
V(this.element) || this.element.hasOwnProperty("draggable") || (this.element.draggable = this.instance.settings.draggable);
|
|
6240
|
-
var n = new
|
|
6272
|
+
var n = new Ci(this.instance.settings.slideExtraAttributes);
|
|
6241
6273
|
return this.slideConfig = n.parseConfig(this.element, this.instance.settings), this.slideConfig;
|
|
6242
6274
|
} }]);
|
|
6243
6275
|
function _t(n) {
|
|
6244
6276
|
return Math.sqrt(n.x * n.x + n.y * n.y);
|
|
6245
6277
|
}
|
|
6246
|
-
function
|
|
6278
|
+
function Ai(n, c) {
|
|
6247
6279
|
var l = (function(d, h) {
|
|
6248
6280
|
var m = _t(d) * _t(h);
|
|
6249
6281
|
if (m === 0) return 0;
|
|
@@ -6256,7 +6288,7 @@ function Js() {
|
|
|
6256
6288
|
return d.x * h.y - h.x * d.y;
|
|
6257
6289
|
})(n, c) > 0 && (l *= -1), 180 * l / Math.PI;
|
|
6258
6290
|
}
|
|
6259
|
-
var
|
|
6291
|
+
var Mi = s((function n(c) {
|
|
6260
6292
|
t(this, n), this.handlers = [], this.el = c;
|
|
6261
6293
|
}), [{ key: "add", value: function(n) {
|
|
6262
6294
|
this.handlers.push(n);
|
|
@@ -6269,15 +6301,15 @@ function Js() {
|
|
|
6269
6301
|
typeof l == "function" && l.apply(this.el, arguments);
|
|
6270
6302
|
}
|
|
6271
6303
|
} }]);
|
|
6272
|
-
function
|
|
6273
|
-
var l = new
|
|
6304
|
+
function le(n, c) {
|
|
6305
|
+
var l = new Mi(n);
|
|
6274
6306
|
return l.add(c), l;
|
|
6275
6307
|
}
|
|
6276
|
-
var
|
|
6308
|
+
var Ti = s((function n(c, l) {
|
|
6277
6309
|
t(this, n), this.element = typeof c == "string" ? document.querySelector(c) : c, this.start = this.start.bind(this), this.move = this.move.bind(this), this.end = this.end.bind(this), this.cancel = this.cancel.bind(this), this.element.addEventListener("touchstart", this.start, !1), this.element.addEventListener("touchmove", this.move, !1), this.element.addEventListener("touchend", this.end, !1), this.element.addEventListener("touchcancel", this.cancel, !1), this.preV = { x: null, y: null }, this.pinchStartLen = null, this.zoom = 1, this.isDoubleTap = !1;
|
|
6278
6310
|
var d = function() {
|
|
6279
6311
|
};
|
|
6280
|
-
this.rotate =
|
|
6312
|
+
this.rotate = le(this.element, l.rotate || d), this.touchStart = le(this.element, l.touchStart || d), this.multipointStart = le(this.element, l.multipointStart || d), this.multipointEnd = le(this.element, l.multipointEnd || d), this.pinch = le(this.element, l.pinch || d), this.swipe = le(this.element, l.swipe || d), this.tap = le(this.element, l.tap || d), this.doubleTap = le(this.element, l.doubleTap || d), this.longTap = le(this.element, l.longTap || d), this.singleTap = le(this.element, l.singleTap || d), this.pressMove = le(this.element, l.pressMove || d), this.twoFingerPressMove = le(this.element, l.twoFingerPressMove || d), this.touchMove = le(this.element, l.touchMove || d), this.touchEnd = le(this.element, l.touchEnd || d), this.touchCancel = le(this.element, l.touchCancel || d), this.translateContainer = this.element, this._cancelAllHandler = this.cancelAll.bind(this), window.addEventListener("scroll", this._cancelAllHandler), this.delta = null, this.last = null, this.now = null, this.tapTimeout = null, this.singleTapTimeout = null, this.longTapTimeout = null, this.swipeTimeout = null, this.x1 = this.x2 = this.y1 = this.y2 = null, this.preTapPosition = { x: null, y: null };
|
|
6281
6313
|
}), [{ key: "start", value: function(n) {
|
|
6282
6314
|
if (n.touches) if (n.target && n.target.nodeName && ["a", "button", "input"].indexOf(n.target.nodeName.toLowerCase()) >= 0) console.log("ignore drag for this touched element", n.target.nodeName.toLowerCase());
|
|
6283
6315
|
else {
|
|
@@ -6297,7 +6329,7 @@ function Js() {
|
|
|
6297
6329
|
var c = this.preV, l = n.touches.length, d = n.touches[0].pageX, h = n.touches[0].pageY;
|
|
6298
6330
|
if (this.isDoubleTap = !1, l > 1) {
|
|
6299
6331
|
var m = n.touches[1].pageX, g = n.touches[1].pageY, y = { x: n.touches[1].pageX - d, y: n.touches[1].pageY - h };
|
|
6300
|
-
c.x !== null && (this.pinchStartLen > 0 && (n.zoom = _t(y) / this.pinchStartLen, this.pinch.dispatch(n, this.element)), n.angle =
|
|
6332
|
+
c.x !== null && (this.pinchStartLen > 0 && (n.zoom = _t(y) / this.pinchStartLen, this.pinch.dispatch(n, this.element)), n.angle = Ai(y, c), this.rotate.dispatch(n, this.element)), c.x = y.x, c.y = y.y, this.x2 !== null && this.sx2 !== null ? (n.deltaX = (d - this.x2 + m - this.sx2) / 2, n.deltaY = (h - this.y2 + g - this.sy2) / 2) : (n.deltaX = 0, n.deltaY = 0), this.twoFingerPressMove.dispatch(n, this.element), this.sx2 = m, this.sy2 = g;
|
|
6301
6333
|
} else {
|
|
6302
6334
|
if (this.x2 !== null) {
|
|
6303
6335
|
n.deltaX = d - this.x2, n.deltaY = h - this.y2;
|
|
@@ -6346,9 +6378,9 @@ function Js() {
|
|
|
6346
6378
|
P(d, "greset");
|
|
6347
6379
|
} }), d.style.opacity = "", m && (m.style.opacity = "");
|
|
6348
6380
|
}
|
|
6349
|
-
function
|
|
6381
|
+
function Ii(n) {
|
|
6350
6382
|
if (n.events.hasOwnProperty("touch")) return !1;
|
|
6351
|
-
var c, l, d, h = te(), m = h.width, g = h.height, y = !1, A = null, S = null, T = null,
|
|
6383
|
+
var c, l, d, h = te(), m = h.width, g = h.height, y = !1, A = null, S = null, T = null, $ = !1, O = 1, q = 1, D = !1, ee = !1, ge = null, ue = null, Le = null, oe = null, Re = 0, ze = 0, ht = !1, rt = !1, _e = {}, Se = {}, wa = 0, xa = 0, Pi = document.getElementById("glightbox-slider"), St = document.querySelector(".goverlay"), Li = new Ti(Pi, { touchStart: function(X) {
|
|
6352
6384
|
if (y = !0, (I(X.targetTouches[0].target, "ginner-container") || M(X.targetTouches[0].target, ".gslide-desc") || X.targetTouches[0].target.nodeName.toLowerCase() == "a") && (y = !1), M(X.targetTouches[0].target, ".gslide-inline") && !I(X.targetTouches[0].target.parentNode, "gslide-inline") && (y = !1), y) {
|
|
6353
6385
|
if (Se = X.targetTouches[0], _e.pageX = X.targetTouches[0].pageX, _e.pageY = X.targetTouches[0].pageY, wa = X.targetTouches[0].clientX, xa = X.targetTouches[0].clientY, A = n.activeSlide, S = A.querySelector(".gslide-media"), d = A.querySelector(".gslide-inline"), T = null, I(S, "gslide-image") && (T = S.querySelector("img")), (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) > 769 && (S = A.querySelector(".ginner-container")), P(St, "greset"), X.pageX > 20 && X.pageX < window.innerWidth - 20) return;
|
|
6354
6386
|
X.preventDefault();
|
|
@@ -6356,19 +6388,19 @@ function Js() {
|
|
|
6356
6388
|
}, touchMove: function(X) {
|
|
6357
6389
|
if (y && (Se = X.targetTouches[0], !D && !ee)) {
|
|
6358
6390
|
if (d && d.offsetHeight > g) {
|
|
6359
|
-
var
|
|
6360
|
-
if (Math.abs(
|
|
6391
|
+
var de = _e.pageX - Se.pageX;
|
|
6392
|
+
if (Math.abs(de) <= 13) return !1;
|
|
6361
6393
|
}
|
|
6362
|
-
|
|
6363
|
-
var Ue, Ct = X.targetTouches[0].clientX,
|
|
6364
|
-
if (Math.abs(
|
|
6394
|
+
$ = !0;
|
|
6395
|
+
var Ue, Ct = X.targetTouches[0].clientX, Ri = X.targetTouches[0].clientY, zi = wa - Ct, Bi = xa - Ri;
|
|
6396
|
+
if (Math.abs(zi) > Math.abs(Bi) ? (ht = !1, rt = !0) : (rt = !1, ht = !0), c = Se.pageX - _e.pageX, Re = 100 * c / m, l = Se.pageY - _e.pageY, ze = 100 * l / g, ht && T && (Ue = 1 - Math.abs(l) / g, St.style.opacity = Ue, n.settings.touchFollowAxis && (Re = 0)), rt && (Ue = 1 - Math.abs(c) / m, S.style.opacity = Ue, n.settings.touchFollowAxis && (ze = 0)), !T) return C(S, "translate3d(".concat(Re, "%, 0, 0)"));
|
|
6365
6397
|
C(S, "translate3d(".concat(Re, "%, ").concat(ze, "%, 0)"));
|
|
6366
6398
|
}
|
|
6367
6399
|
}, touchEnd: function() {
|
|
6368
6400
|
if (y) {
|
|
6369
|
-
if (
|
|
6370
|
-
var X = Math.abs(parseInt(ze)),
|
|
6371
|
-
if (!(X > 29 && T)) return X < 29 &&
|
|
6401
|
+
if ($ = !1, ee || D) return Le = ge, void (oe = ue);
|
|
6402
|
+
var X = Math.abs(parseInt(ze)), de = Math.abs(parseInt(Re));
|
|
6403
|
+
if (!(X > 29 && T)) return X < 29 && de < 25 ? (_(St, "greset"), St.style.opacity = 1, Vt(S)) : void 0;
|
|
6372
6404
|
n.close();
|
|
6373
6405
|
}
|
|
6374
6406
|
}, multipointEnd: function() {
|
|
@@ -6376,18 +6408,18 @@ function Js() {
|
|
|
6376
6408
|
D = !1;
|
|
6377
6409
|
}), 50);
|
|
6378
6410
|
}, multipointStart: function() {
|
|
6379
|
-
D = !0,
|
|
6411
|
+
D = !0, O = q || 1;
|
|
6380
6412
|
}, pinch: function(X) {
|
|
6381
|
-
if (!T ||
|
|
6382
|
-
D = !0, T.scaleX = T.scaleY =
|
|
6383
|
-
var
|
|
6384
|
-
if (ee = !0,
|
|
6385
|
-
|
|
6413
|
+
if (!T || $) return !1;
|
|
6414
|
+
D = !0, T.scaleX = T.scaleY = O * X.zoom;
|
|
6415
|
+
var de = O * X.zoom;
|
|
6416
|
+
if (ee = !0, de <= 1) return ee = !1, de = 1, oe = null, Le = null, ge = null, ue = null, void T.setAttribute("style", "");
|
|
6417
|
+
de > 4.5 && (de = 4.5), T.style.transform = "scale3d(".concat(de, ", ").concat(de, ", 1)"), q = de;
|
|
6386
6418
|
}, pressMove: function(X) {
|
|
6387
6419
|
if (ee && !D) {
|
|
6388
|
-
var
|
|
6389
|
-
Le && (
|
|
6390
|
-
var Ct = "translate3d(".concat(
|
|
6420
|
+
var de = Se.pageX - _e.pageX, Ue = Se.pageY - _e.pageY;
|
|
6421
|
+
Le && (de += Le), oe && (Ue += oe), ge = de, ue = Ue;
|
|
6422
|
+
var Ct = "translate3d(".concat(de, "px, ").concat(Ue, "px, 0)");
|
|
6391
6423
|
q && (Ct += " scale3d(".concat(q, ", ").concat(q, ", 1)")), C(T, Ct);
|
|
6392
6424
|
}
|
|
6393
6425
|
}, swipe: function(X) {
|
|
@@ -6403,9 +6435,9 @@ function Js() {
|
|
|
6403
6435
|
}
|
|
6404
6436
|
}
|
|
6405
6437
|
} });
|
|
6406
|
-
n.events.touch =
|
|
6438
|
+
n.events.touch = Li;
|
|
6407
6439
|
}
|
|
6408
|
-
var ma = pe(), ya = pe() !== null || document.createTouch !== void 0 || "ontouchstart" in window || "onmsgesturechange" in window || navigator.msMaxTouchPoints, va = document.getElementsByTagName("html")[0],
|
|
6440
|
+
var ma = pe(), ya = pe() !== null || document.createTouch !== void 0 || "ontouchstart" in window || "onmsgesturechange" in window || navigator.msMaxTouchPoints, va = document.getElementsByTagName("html")[0], Ei = { selector: ".glightbox", elements: null, skin: "clean", theme: "clean", closeButton: !0, startAt: null, autoplayVideos: !0, autofocusVideos: !0, descPosition: "bottom", width: "900px", height: "506px", videosWidth: "960px", beforeSlideChange: null, afterSlideChange: null, beforeSlideLoad: null, afterSlideLoad: null, slideInserted: null, slideRemoved: null, slideExtraAttributes: null, onOpen: null, onClose: null, loop: !1, zoomable: !0, draggable: !0, dragAutoSnap: !1, dragToleranceX: 40, dragToleranceY: 65, preload: !0, oneSlidePerOpen: !1, touchNavigation: !0, touchFollowAxis: !0, keyboardNavigation: !0, closeOnOutsideClick: !0, plugins: !1, plyr: { css: "https://cdn.plyr.io/3.6.12/plyr.css", js: "https://cdn.plyr.io/3.6.12/plyr.js", config: { ratio: "16:9", fullscreen: { enabled: !0, iosNative: !0 }, youtube: { noCookie: !0, rel: 0, showinfo: 0, iv_load_policy: 3 }, vimeo: { byline: !1, portrait: !1, title: !1, transparent: !1 } } }, openEffect: "zoom", closeEffect: "zoom", slideEffect: "slide", moreText: "See more", moreLength: 60, cssEfects: { fade: { in: "fadeIn", out: "fadeOut" }, zoom: { in: "zoomIn", out: "zoomOut" }, slide: { in: "slideInRight", out: "slideOutLeft" }, slideBack: { in: "slideInLeft", out: "slideOutRight" }, none: { in: "none", out: "none" } }, svg: { close: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" xml:space="preserve"><g><g><path d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306C514.019,27.23,514.019,14.135,505.943,6.058z"/></g></g><g><g><path d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"/></g></g></svg>', next: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 477.175 477.175" xml:space="preserve"> <g><path d="M360.731,229.075l-225.1-225.1c-5.3-5.3-13.8-5.3-19.1,0s-5.3,13.8,0,19.1l215.5,215.5l-215.5,215.5c-5.3,5.3-5.3,13.8,0,19.1c2.6,2.6,6.1,4,9.5,4c3.4,0,6.9-1.3,9.5-4l225.1-225.1C365.931,242.875,365.931,234.275,360.731,229.075z"/></g></svg>', prev: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 477.175 477.175" xml:space="preserve"><g><path d="M145.188,238.575l215.5-215.5c5.3-5.3,5.3-13.8,0-19.1s-13.8-5.3-19.1,0l-225.1,225.1c-5.3,5.3-5.3,13.8,0,19.1l225.1,225c2.6,2.6,6.1,4,9.5,4s6.9-1.3,9.5-4c5.3-5.3,5.3-13.8,0-19.1L145.188,238.575z"/></g></svg>' }, slideHTML: `<div class="gslide">
|
|
6409
6441
|
<div class="gslide-inner-content">
|
|
6410
6442
|
<div class="ginner-container">
|
|
6411
6443
|
<div class="gslide-media">
|
|
@@ -6427,9 +6459,9 @@ function Js() {
|
|
|
6427
6459
|
<button class="gprev gbtn" aria-label="Previous" data-taborder="2">{prevSVG}</button>
|
|
6428
6460
|
<button class="gnext gbtn" aria-label="Next" data-taborder="1">{nextSVG}</button>
|
|
6429
6461
|
</div>
|
|
6430
|
-
</div>` },
|
|
6462
|
+
</div>` }, $i = s((function n() {
|
|
6431
6463
|
var c = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
6432
|
-
t(this, n), this.customOptions = c, this.settings = p(
|
|
6464
|
+
t(this, n), this.customOptions = c, this.settings = p(Ei, c), this.effectsClasses = this.getAnimationClasses(), this.videoPlayers = {}, this.apiEvents = [], this.fullElementsList = !1;
|
|
6433
6465
|
}), [{ key: "init", value: function() {
|
|
6434
6466
|
var n = this, c = this.getSelector();
|
|
6435
6467
|
c && (this.baseEvents = w("click", { onElement: c, withCallback: function(l, d) {
|
|
@@ -6450,7 +6482,7 @@ function Js() {
|
|
|
6450
6482
|
var g = document.createElement("style");
|
|
6451
6483
|
g.type = "text/css", g.className = "gcss-styles", g.innerText = ".gscrollbar-fixer {margin-right: ".concat(m, "px}"), document.head.appendChild(g), _(h, "gscrollbar-fixer");
|
|
6452
6484
|
}
|
|
6453
|
-
_(h, "glightbox-open"), _(va, "glightbox-open"), ma && (_(document.body, "glightbox-mobile"), this.settings.slideEffect = "slide"), this.showSlide(l, !0), this.elements.length === 1 ? (_(this.prevButton, "glightbox-button-hidden"), _(this.nextButton, "glightbox-button-hidden")) : (P(this.prevButton, "glightbox-button-hidden"), P(this.nextButton, "glightbox-button-hidden")), this.lightboxOpen = !0, this.trigger("open"), F(this.settings.onOpen) && this.settings.onOpen(), ya && this.settings.touchNavigation &&
|
|
6485
|
+
_(h, "glightbox-open"), _(va, "glightbox-open"), ma && (_(document.body, "glightbox-mobile"), this.settings.slideEffect = "slide"), this.showSlide(l, !0), this.elements.length === 1 ? (_(this.prevButton, "glightbox-button-hidden"), _(this.nextButton, "glightbox-button-hidden")) : (P(this.prevButton, "glightbox-button-hidden"), P(this.nextButton, "glightbox-button-hidden")), this.lightboxOpen = !0, this.trigger("open"), F(this.settings.onOpen) && this.settings.onOpen(), ya && this.settings.touchNavigation && Ii(this), this.settings.keyboardNavigation && vi(this);
|
|
6454
6486
|
} }, { key: "openAt", value: function() {
|
|
6455
6487
|
var n = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
|
|
6456
6488
|
this.open(null, n);
|
|
@@ -6649,8 +6681,8 @@ function Js() {
|
|
|
6649
6681
|
if (h && (I(h, "description-bottom") || I(h, "description-top")) && !I(h, "gabsolute") && (y = !0), d) {
|
|
6650
6682
|
if (m <= 768) d.querySelector("img");
|
|
6651
6683
|
else if (y) {
|
|
6652
|
-
var A, S, T = h.offsetHeight,
|
|
6653
|
-
|
|
6684
|
+
var A, S, T = h.offsetHeight, $ = d.querySelector("img"), O = (A = this.elements[this.index]) === null || A === void 0 ? void 0 : A.node, q = "100vh";
|
|
6685
|
+
O && (q = (S = O.getAttribute("data-height")) !== null && S !== void 0 ? S : q), $.setAttribute("style", "max-height: calc(".concat(q, " - ").concat(T, "px)")), h.setAttribute("style", "max-width: ".concat($.offsetWidth, "px;"));
|
|
6654
6686
|
}
|
|
6655
6687
|
}
|
|
6656
6688
|
if (l) {
|
|
@@ -6719,7 +6751,7 @@ function Js() {
|
|
|
6719
6751
|
return "3.3.1";
|
|
6720
6752
|
} }]);
|
|
6721
6753
|
return function() {
|
|
6722
|
-
var n = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, c = new
|
|
6754
|
+
var n = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, c = new $i(n);
|
|
6723
6755
|
return c.init(), c;
|
|
6724
6756
|
};
|
|
6725
6757
|
}));
|
|
@@ -6778,12 +6810,12 @@ Kt.styles = J`
|
|
|
6778
6810
|
Kt = en([
|
|
6779
6811
|
K("cb-thinking")
|
|
6780
6812
|
], Kt);
|
|
6781
|
-
var tn = Object.defineProperty, an = Object.getOwnPropertyDescriptor,
|
|
6813
|
+
var tn = Object.defineProperty, an = Object.getOwnPropertyDescriptor, ei = (a, e, t, i) => {
|
|
6782
6814
|
for (var s = i > 1 ? void 0 : i ? an(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
6783
6815
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
6784
6816
|
return i && s && tn(e, t, s), s;
|
|
6785
6817
|
};
|
|
6786
|
-
let
|
|
6818
|
+
let Ot = class extends re {
|
|
6787
6819
|
constructor() {
|
|
6788
6820
|
super(...arguments), this.files = [];
|
|
6789
6821
|
}
|
|
@@ -6799,7 +6831,7 @@ let Bt = class extends ne {
|
|
|
6799
6831
|
</div>`;
|
|
6800
6832
|
}
|
|
6801
6833
|
};
|
|
6802
|
-
|
|
6834
|
+
Ot.styles = J`
|
|
6803
6835
|
.cb-uploading {
|
|
6804
6836
|
text-align: left;
|
|
6805
6837
|
}
|
|
@@ -6817,12 +6849,12 @@ Bt.styles = J`
|
|
|
6817
6849
|
margin-right: 5px;
|
|
6818
6850
|
}
|
|
6819
6851
|
`;
|
|
6820
|
-
|
|
6852
|
+
ei([
|
|
6821
6853
|
x({ type: Array })
|
|
6822
|
-
],
|
|
6823
|
-
|
|
6854
|
+
], Ot.prototype, "files", 2);
|
|
6855
|
+
Ot = ei([
|
|
6824
6856
|
K("cb-uploading")
|
|
6825
|
-
],
|
|
6857
|
+
], Ot);
|
|
6826
6858
|
const sn = J`
|
|
6827
6859
|
${ke}
|
|
6828
6860
|
:host {
|
|
@@ -6918,7 +6950,7 @@ const Pa = {
|
|
|
6918
6950
|
doc: hn,
|
|
6919
6951
|
docx: bn
|
|
6920
6952
|
};
|
|
6921
|
-
let yt = class extends
|
|
6953
|
+
let yt = class extends re {
|
|
6922
6954
|
constructor() {
|
|
6923
6955
|
super(...arguments), this.filename = "", this.url = "";
|
|
6924
6956
|
}
|
|
@@ -6957,7 +6989,7 @@ ca([
|
|
|
6957
6989
|
yt = ca([
|
|
6958
6990
|
K("cb-file")
|
|
6959
6991
|
], yt);
|
|
6960
|
-
const gn = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><g fill="currentColor"><path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0z"/><path d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4zM2.5 3h11V2h-11z"/></g></svg>', La = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><path fill="currentColor" d="M8 8a3 3 0 1 0 0-6a3 3 0 0 0 0 6m2-3a2 2 0 1 1-4 0a2 2 0 0 1 4 0m4 8c0 1-1 1-1 1H3s-1 0-1-1s1-4 6-4s6 3 6 4m-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10s-3.516.68-4.168 1.332c-.678.678-.83 1.418-.832 1.664z"/></svg>',
|
|
6992
|
+
const gn = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><g fill="currentColor"><path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5m3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0z"/><path d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4zM2.5 3h11V2h-11z"/></g></svg>', La = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><path fill="currentColor" d="M8 8a3 3 0 1 0 0-6a3 3 0 0 0 0 6m2-3a2 2 0 1 1-4 0a2 2 0 0 1 4 0m4 8c0 1-1 1-1 1H3s-1 0-1-1s1-4 6-4s6 3 6 4m-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10s-3.516.68-4.168 1.332c-.678.678-.83 1.418-.832 1.664z"/></svg>', ti = '<svg viewBox="0 0 24 24" width="1.2em" height="1.2em" ><path fill="currentColor" d="M5 9v12H1V9zm4 12a2 2 0 0 1-2-2V9c0-.55.22-1.05.59-1.41L14.17 1l1.06 1.06c.27.27.44.64.44 1.05l-.03.32L14.69 8H21a2 2 0 0 1 2 2v2c0 .26-.05.5-.14.73l-3.02 7.05C19.54 20.5 18.83 21 18 21zm0-2h9.03L21 12v-2h-8.79l1.13-5.32L9 9.03z"/></svg>', ai = '<svg viewBox="0 0 24 24" width="1.2em" height="1.2em" ><path fill="currentColor" d="M19 15V3h4v12zM15 3a2 2 0 0 1 2 2v10c0 .55-.22 1.05-.59 1.41L9.83 23l-1.06-1.06c-.27-.27-.44-.64-.44-1.06l.03-.31l.95-4.57H3a2 2 0 0 1-2-2v-2c0-.26.05-.5.14-.73l3.02-7.05C4.46 3.5 5.17 3 6 3zm0 2H5.97L3 12v2h8.78l-1.13 5.32L15 14.97z"/></svg>', mn = J`
|
|
6961
6993
|
pre code.hljs {
|
|
6962
6994
|
display: block;
|
|
6963
6995
|
overflow-x: auto;
|
|
@@ -8410,7 +8442,7 @@ function Ra(a, e) {
|
|
|
8410
8442
|
return `<pre class="code-block-wrapper"><div class="code-block-header"><span class="code-block-header__lang">${e}</span><span class="code-block-header__copy">Copy</span></div><code class="hljs code-block-body ${e}">${a}</code></pre>`;
|
|
8411
8443
|
}
|
|
8412
8444
|
function vn() {
|
|
8413
|
-
const a = new
|
|
8445
|
+
const a = new qi({
|
|
8414
8446
|
html: !0,
|
|
8415
8447
|
breaks: !0,
|
|
8416
8448
|
linkify: !0,
|
|
@@ -8422,7 +8454,7 @@ function vn() {
|
|
|
8422
8454
|
return Ra(Ut.highlightAuto(e).value, "");
|
|
8423
8455
|
}
|
|
8424
8456
|
});
|
|
8425
|
-
return a.use(
|
|
8457
|
+
return a.use(Di, { attrs: { target: "_blank", rel: "noopener" } }), a;
|
|
8426
8458
|
}
|
|
8427
8459
|
async function Zt(a) {
|
|
8428
8460
|
const t = vn().render(a);
|
|
@@ -8433,7 +8465,7 @@ var wn = Object.defineProperty, xn = Object.getOwnPropertyDescriptor, nt = (a, e
|
|
|
8433
8465
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
8434
8466
|
return i && s && wn(e, t, s), s;
|
|
8435
8467
|
};
|
|
8436
|
-
let De = class extends
|
|
8468
|
+
let De = class extends re {
|
|
8437
8469
|
constructor() {
|
|
8438
8470
|
super(...arguments), this.store = new it(this, b), this.type = "assistant", this.suppressFeedback = !1, this.lightbox = Zs({
|
|
8439
8471
|
touchNavigation: !0,
|
|
@@ -8500,7 +8532,7 @@ let De = class extends ne {
|
|
|
8500
8532
|
this.copyBtns.forEach((a) => {
|
|
8501
8533
|
a.addEventListener("click", () => {
|
|
8502
8534
|
const e = a.parentElement?.nextElementSibling?.textContent;
|
|
8503
|
-
e &&
|
|
8535
|
+
e && es(e).then(() => {
|
|
8504
8536
|
a.textContent = "Success", setTimeout(() => {
|
|
8505
8537
|
a.textContent = "Copy";
|
|
8506
8538
|
}, 500);
|
|
@@ -8612,8 +8644,8 @@ let De = class extends ne {
|
|
|
8612
8644
|
renderBotMessageFeedback(a) {
|
|
8613
8645
|
return this.suppressFeedback || !b.setting.feedbackEnabled || this.index < b.setting.startFeedbackFromMessage * 2 ? null : u`
|
|
8614
8646
|
<div class="cb-message-feedback-tools" part="feedback-wrapper">
|
|
8615
|
-
<div class="cb-message-feedback-icon cb-feedback-up" part="feedback-up" @click="${() => this.startFeedback(!0, a)}">${me`${Y(
|
|
8616
|
-
<div class="cb-message-feedback-icon cb-feedback-down" part="feedback-down" @click="${() => this.startFeedback(!1, a)}">${me`${Y(
|
|
8647
|
+
<div class="cb-message-feedback-icon cb-feedback-up" part="feedback-up" @click="${() => this.startFeedback(!0, a)}">${me`${Y(ti)}`}</div>
|
|
8648
|
+
<div class="cb-message-feedback-icon cb-feedback-down" part="feedback-down" @click="${() => this.startFeedback(!1, a)}">${me`${Y(ai)}`}</div>
|
|
8617
8649
|
</div>
|
|
8618
8650
|
`;
|
|
8619
8651
|
}
|
|
@@ -8692,9 +8724,9 @@ var kn = Object.defineProperty, _n = Object.getOwnPropertyDescriptor, Te = (a, e
|
|
|
8692
8724
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
8693
8725
|
return i && s && kn(e, t, s), s;
|
|
8694
8726
|
};
|
|
8695
|
-
const
|
|
8696
|
-
|
|
8697
|
-
let ye = class extends
|
|
8727
|
+
const Be = Je.noConflict();
|
|
8728
|
+
Be.setLevel("info");
|
|
8729
|
+
let ye = class extends re {
|
|
8698
8730
|
constructor() {
|
|
8699
8731
|
super(...arguments), this.messages = [], this.actions = [], this.form = null, this.suppressFeedback = !1, this.calendlyInjected = !1, this.activeCalendlyAction = -1, this.hubspotMeetingInjected = !1, this.activeHubspotMeetingAction = -1, this._lastScrollTop = 0, this._scrollThrottle = !1, this._userInterruptedAutoScroll = !1, this._userInterruptedMessagesLength = 0;
|
|
8700
8732
|
}
|
|
@@ -8829,13 +8861,13 @@ let ye = class extends ne {
|
|
|
8829
8861
|
}
|
|
8830
8862
|
}
|
|
8831
8863
|
b.submitForm(e).then(() => {
|
|
8832
|
-
|
|
8864
|
+
Be.info("Form submitted", e), this.emit("form:submit", {
|
|
8833
8865
|
detail: {
|
|
8834
8866
|
formData: e
|
|
8835
8867
|
}
|
|
8836
8868
|
});
|
|
8837
8869
|
}).catch((t) => {
|
|
8838
|
-
|
|
8870
|
+
Be.error(`Error when submitting form: ${t.message}`);
|
|
8839
8871
|
});
|
|
8840
8872
|
}
|
|
8841
8873
|
/* Form sample
|
|
@@ -8880,7 +8912,7 @@ let ye = class extends ne {
|
|
|
8880
8912
|
return null;
|
|
8881
8913
|
}
|
|
8882
8914
|
handleCalendlyEvent(a) {
|
|
8883
|
-
switch (
|
|
8915
|
+
switch (Be.info("Got Calendly Event:", a.data), a.data.event) {
|
|
8884
8916
|
case "calendly.event_scheduled": {
|
|
8885
8917
|
const e = this.activeCalendlyAction;
|
|
8886
8918
|
e >= 0 && (b.removeAction(e, !0, a.data), b.addSystemMessage("Your meeting has been scheduled!"), this.activeCalendlyAction = -1);
|
|
@@ -8888,10 +8920,10 @@ let ye = class extends ne {
|
|
|
8888
8920
|
}
|
|
8889
8921
|
}
|
|
8890
8922
|
invokeLinkAction(a = {}) {
|
|
8891
|
-
|
|
8923
|
+
Be.info("invokeLinkAction:", a), window.open(a.url, "_blank");
|
|
8892
8924
|
}
|
|
8893
8925
|
invokeCalendlyAction(a = {}) {
|
|
8894
|
-
return
|
|
8926
|
+
return Be.info("invokeCalendlyAction:", a), "Calendly" in window && (this.activeCalendlyAction = a.internalId, window.Calendly.initPopupWidget({ url: a.url })), !1;
|
|
8895
8927
|
}
|
|
8896
8928
|
renderCalendlyAction(a) {
|
|
8897
8929
|
if (!("Calendly" in window) && !this.calendlyInjected) {
|
|
@@ -8937,10 +8969,10 @@ let ye = class extends ne {
|
|
|
8937
8969
|
invokeHubspotMeetingAction(a = {}) {
|
|
8938
8970
|
const e = Date.now();
|
|
8939
8971
|
if (this.activeHubspotMeetingAction !== -1) {
|
|
8940
|
-
|
|
8972
|
+
Be.info(`invokeHubspotMeetingAction: action ${this.activeHubspotMeetingAction} is already active - ignored`);
|
|
8941
8973
|
return;
|
|
8942
8974
|
}
|
|
8943
|
-
if (
|
|
8975
|
+
if (Be.info("invokeHubspotMeetingAction:", a), "hbspt" in window && typeof window.hbspt?.meetings?.create == "function") {
|
|
8944
8976
|
const t = document.getElementById("enegelai-bot-hubspot-meeting-container"), i = document.querySelector(".enegelai-bot-hubspot-meeting-widget");
|
|
8945
8977
|
if (t && i) {
|
|
8946
8978
|
const s = a.url + "?embed=true";
|
|
@@ -8952,7 +8984,7 @@ let ye = class extends ne {
|
|
|
8952
8984
|
return !1;
|
|
8953
8985
|
}
|
|
8954
8986
|
handleHubspotEvent(a) {
|
|
8955
|
-
if (
|
|
8987
|
+
if (Be.info("Got Hubspot Event:", a.data), !(a?.data?.meetingBookSucceeded || !1))
|
|
8956
8988
|
return;
|
|
8957
8989
|
const t = this.activeHubspotMeetingAction;
|
|
8958
8990
|
if (t >= 0) {
|
|
@@ -9004,7 +9036,7 @@ let ye = class extends ne {
|
|
|
9004
9036
|
`;
|
|
9005
9037
|
}
|
|
9006
9038
|
};
|
|
9007
|
-
ye.styles =
|
|
9039
|
+
ye.styles = js;
|
|
9008
9040
|
Te([
|
|
9009
9041
|
x({ type: Array })
|
|
9010
9042
|
], ye.prototype, "messages", 2);
|
|
@@ -9077,13 +9109,13 @@ const Sn = J`
|
|
|
9077
9109
|
align-items: center;
|
|
9078
9110
|
margin: 6px 2px;
|
|
9079
9111
|
}
|
|
9080
|
-
`,
|
|
9112
|
+
`, ii = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><path fill="currentColor" d="M15.854.146a.5.5 0 0 1 .11.54l-5.819 14.547a.75.75 0 0 1-1.329.124l-3.178-4.995L.643 7.184a.75.75 0 0 1 .124-1.33L15.314.037a.5.5 0 0 1 .54.11ZM6.636 10.07l2.761 4.338L14.13 2.576zm6.787-8.201L1.591 6.602l4.339 2.76z"/></svg>', si = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><path fill="currentColor" d="M4.5 3a2.5 2.5 0 0 1 5 0v9a1.5 1.5 0 0 1-3 0V5a.5.5 0 0 1 1 0v7a.5.5 0 0 0 1 0V3a1.5 1.5 0 1 0-3 0v9a2.5 2.5 0 0 0 5 0V5a.5.5 0 0 1 1 0v7a3.5 3.5 0 1 1-7 0z"/></svg>', ni = '<svg viewBox="0 0 24 24" width="26px" height="26px" ><path fill="currentColor" d="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3m5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72z"/></svg>', la = '<svg viewBox="0 0 24 24" width="26px" height="26px" ><path fill="currentColor" d="M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z"/></svg>';
|
|
9081
9113
|
var Cn = Object.defineProperty, An = Object.getOwnPropertyDescriptor, Ie = (a, e, t, i) => {
|
|
9082
9114
|
for (var s = i > 1 ? void 0 : i ? An(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
9083
9115
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
9084
9116
|
return i && s && Cn(e, t, s), s;
|
|
9085
9117
|
};
|
|
9086
|
-
let ve = class extends
|
|
9118
|
+
let ve = class extends re {
|
|
9087
9119
|
constructor() {
|
|
9088
9120
|
super(...arguments), this.store = new it(this, b), this.placeholder = "Type a message...", this.sendButtonLabel = "Send", this.enableFileUpload = !1, this.enableAudio = !1, this.value = "", this.loading = !1, this.disabled = !1, this.currentKey = "";
|
|
9089
9121
|
}
|
|
@@ -9118,7 +9150,7 @@ let ve = class extends ne {
|
|
|
9118
9150
|
});
|
|
9119
9151
|
}
|
|
9120
9152
|
async _sendFileHandler() {
|
|
9121
|
-
const a = await Ga(!1);
|
|
9153
|
+
const a = await Ga(!1, b.setting.fileUploadEnabledExtensions);
|
|
9122
9154
|
this.emit("message:send:file", {
|
|
9123
9155
|
detail: {
|
|
9124
9156
|
files: a
|
|
@@ -9157,7 +9189,7 @@ let ve = class extends ne {
|
|
|
9157
9189
|
${W(
|
|
9158
9190
|
b.setting.sendIconSvg !== "",
|
|
9159
9191
|
() => u`<cb-icon part="user-input-send-icon" svg="${b.setting.sendIconSvg}"></cb-icon>`,
|
|
9160
|
-
() => u`<cb-icon part="user-input-send-icon" svg="${
|
|
9192
|
+
() => u`<cb-icon part="user-input-send-icon" svg="${ii}"></cb-icon>`
|
|
9161
9193
|
)}
|
|
9162
9194
|
</sl-button>
|
|
9163
9195
|
${W(
|
|
@@ -9167,7 +9199,7 @@ let ve = class extends ne {
|
|
|
9167
9199
|
${W(
|
|
9168
9200
|
b.setting.attachIconSvg !== "",
|
|
9169
9201
|
() => u`<cb-icon part="user-input-attach-icon" svg="${b.setting.attachIconSvg}"></cb-icon>`,
|
|
9170
|
-
() => u`<cb-icon part="user-input-attach-icon" svg="${
|
|
9202
|
+
() => u`<cb-icon part="user-input-attach-icon" svg="${si}"></cb-icon>`
|
|
9171
9203
|
)}
|
|
9172
9204
|
<!-- select file input -->
|
|
9173
9205
|
<input type="file" id="file" name="file" class="file-input" />
|
|
@@ -9182,7 +9214,7 @@ let ve = class extends ne {
|
|
|
9182
9214
|
${W(
|
|
9183
9215
|
b.webAudioStarted,
|
|
9184
9216
|
() => u`<cb-icon svg="${la}"></cb-icon>`,
|
|
9185
|
-
() => u`<cb-icon svg="${
|
|
9217
|
+
() => u`<cb-icon svg="${ni}"></cb-icon>`
|
|
9186
9218
|
)}
|
|
9187
9219
|
</sl-button>
|
|
9188
9220
|
`,
|
|
@@ -9291,7 +9323,7 @@ var En = Object.defineProperty, $n = Object.getOwnPropertyDescriptor, Ee = (a, e
|
|
|
9291
9323
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
9292
9324
|
return i && s && En(e, t, s), s;
|
|
9293
9325
|
};
|
|
9294
|
-
let we = class extends
|
|
9326
|
+
let we = class extends re {
|
|
9295
9327
|
constructor() {
|
|
9296
9328
|
super(...arguments), this.store = new it(this, b), this.placeholder = "Type a message...", this.sendButtonLabel = "Send", this.enableFileUpload = !1, this.enableAudio = !1, this.value = "", this.loading = !1, this.disabled = !1, this.currentKey = "";
|
|
9297
9329
|
}
|
|
@@ -9332,7 +9364,7 @@ let we = class extends ne {
|
|
|
9332
9364
|
});
|
|
9333
9365
|
}
|
|
9334
9366
|
async _sendFileHandler() {
|
|
9335
|
-
const a = await Ga(!1);
|
|
9367
|
+
const a = await Ga(!1, b.setting.fileUploadEnabledExtensions);
|
|
9336
9368
|
this.emit("message:send:file", {
|
|
9337
9369
|
detail: {
|
|
9338
9370
|
files: a
|
|
@@ -9437,7 +9469,7 @@ let we = class extends ne {
|
|
|
9437
9469
|
${W(
|
|
9438
9470
|
b.setting.sendIconSvg !== "",
|
|
9439
9471
|
() => u`<cb-icon part="user-input-send-icon" svg="${b.setting.sendIconSvg}"></cb-icon>`,
|
|
9440
|
-
() => u`<cb-icon part="user-input-send-icon" svg="${
|
|
9472
|
+
() => u`<cb-icon part="user-input-send-icon" svg="${ii}"></cb-icon>`
|
|
9441
9473
|
)}
|
|
9442
9474
|
</sl-button>
|
|
9443
9475
|
${W(
|
|
@@ -9447,7 +9479,7 @@ let we = class extends ne {
|
|
|
9447
9479
|
${W(
|
|
9448
9480
|
b.setting.attachIconSvg !== "",
|
|
9449
9481
|
() => u`<cb-icon part="user-input-attach-icon" svg="${b.setting.attachIconSvg}"></cb-icon>`,
|
|
9450
|
-
() => u`<cb-icon part="user-input-attach-icon" svg="${
|
|
9482
|
+
() => u`<cb-icon part="user-input-attach-icon" svg="${si}"></cb-icon>`
|
|
9451
9483
|
)}
|
|
9452
9484
|
<!-- select file input -->
|
|
9453
9485
|
<input type="file" id="file" name="file" class="file-input" />
|
|
@@ -9462,7 +9494,7 @@ let we = class extends ne {
|
|
|
9462
9494
|
${W(
|
|
9463
9495
|
b.webAudioStarted,
|
|
9464
9496
|
() => u`<cb-icon svg="${la}"></cb-icon>`,
|
|
9465
|
-
() => u`<cb-icon svg="${
|
|
9497
|
+
() => u`<cb-icon svg="${ni}"></cb-icon>`
|
|
9466
9498
|
)}
|
|
9467
9499
|
</sl-button>
|
|
9468
9500
|
`,
|
|
@@ -9507,7 +9539,7 @@ Ee([
|
|
|
9507
9539
|
we = Ee([
|
|
9508
9540
|
K("cb-user-input-mm")
|
|
9509
9541
|
], we);
|
|
9510
|
-
const
|
|
9542
|
+
const ri = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><path fill="currentColor" d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"/></svg>', Pn = J`
|
|
9511
9543
|
${ke}
|
|
9512
9544
|
|
|
9513
9545
|
sl-dialog::part(base) {
|
|
@@ -9547,7 +9579,7 @@ var Ln = Object.defineProperty, Rn = Object.getOwnPropertyDescriptor, Ht = (a, e
|
|
|
9547
9579
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
9548
9580
|
return i && s && Ln(e, t, s), s;
|
|
9549
9581
|
};
|
|
9550
|
-
let ct = class extends
|
|
9582
|
+
let ct = class extends re {
|
|
9551
9583
|
constructor() {
|
|
9552
9584
|
super(...arguments), this.open = !1, this.label = "Dialog", this.zindex = 100;
|
|
9553
9585
|
}
|
|
@@ -9578,7 +9610,7 @@ let ct = class extends ne {
|
|
|
9578
9610
|
<cb-icon
|
|
9579
9611
|
color="default"
|
|
9580
9612
|
style="font-size: 1em;"
|
|
9581
|
-
svg="${
|
|
9613
|
+
svg="${ri}"
|
|
9582
9614
|
></cb-icon>
|
|
9583
9615
|
</sl-button>
|
|
9584
9616
|
</header>
|
|
@@ -9604,12 +9636,12 @@ Ht([
|
|
|
9604
9636
|
ct = Ht([
|
|
9605
9637
|
K("cb-dialog")
|
|
9606
9638
|
], ct);
|
|
9607
|
-
var zn = Object.defineProperty,
|
|
9608
|
-
for (var s = i > 1 ? void 0 : i ?
|
|
9639
|
+
var zn = Object.defineProperty, Bn = Object.getOwnPropertyDescriptor, oi = (a, e, t, i) => {
|
|
9640
|
+
for (var s = i > 1 ? void 0 : i ? Bn(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
9609
9641
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
9610
9642
|
return i && s && zn(e, t, s), s;
|
|
9611
9643
|
};
|
|
9612
|
-
let qt = class extends
|
|
9644
|
+
let qt = class extends re {
|
|
9613
9645
|
constructor() {
|
|
9614
9646
|
super(...arguments), this.open = !1;
|
|
9615
9647
|
}
|
|
@@ -9651,13 +9683,13 @@ qt.styles = J`
|
|
|
9651
9683
|
z-index: 1000;
|
|
9652
9684
|
}
|
|
9653
9685
|
`;
|
|
9654
|
-
|
|
9686
|
+
oi([
|
|
9655
9687
|
x({ type: Boolean })
|
|
9656
9688
|
], qt.prototype, "open", 2);
|
|
9657
|
-
qt =
|
|
9689
|
+
qt = oi([
|
|
9658
9690
|
K("cb-clear-message-dialog")
|
|
9659
9691
|
], qt);
|
|
9660
|
-
const
|
|
9692
|
+
const On = J`
|
|
9661
9693
|
:host {
|
|
9662
9694
|
// width: 380px;
|
|
9663
9695
|
|
|
@@ -9722,7 +9754,7 @@ var qn = Object.defineProperty, Dn = Object.getOwnPropertyDescriptor, dt = (a, e
|
|
|
9722
9754
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
9723
9755
|
return i && s && qn(e, t, s), s;
|
|
9724
9756
|
};
|
|
9725
|
-
let Xe = class extends
|
|
9757
|
+
let Xe = class extends re {
|
|
9726
9758
|
constructor() {
|
|
9727
9759
|
super(...arguments), this.open = !1, this.clearMessageDialogOpen = !1, this.customRequest = !1;
|
|
9728
9760
|
}
|
|
@@ -9841,7 +9873,7 @@ let Xe = class extends ne {
|
|
|
9841
9873
|
});
|
|
9842
9874
|
}
|
|
9843
9875
|
};
|
|
9844
|
-
Xe.styles =
|
|
9876
|
+
Xe.styles = On;
|
|
9845
9877
|
dt([
|
|
9846
9878
|
x({ type: Boolean })
|
|
9847
9879
|
], Xe.prototype, "open", 2);
|
|
@@ -9974,12 +10006,12 @@ const Fn = J`
|
|
|
9974
10006
|
margin: 4px 4px 0px 0px;
|
|
9975
10007
|
}
|
|
9976
10008
|
`;
|
|
9977
|
-
var jn = Object.defineProperty, Hn = Object.getOwnPropertyDescriptor,
|
|
10009
|
+
var jn = Object.defineProperty, Hn = Object.getOwnPropertyDescriptor, ci = (a, e, t, i) => {
|
|
9978
10010
|
for (var s = i > 1 ? void 0 : i ? Hn(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
9979
10011
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
9980
10012
|
return i && s && jn(e, t, s), s;
|
|
9981
10013
|
};
|
|
9982
|
-
let Dt = class extends
|
|
10014
|
+
let Dt = class extends re {
|
|
9983
10015
|
constructor() {
|
|
9984
10016
|
super(...arguments), this.store = new it(this, b), this.open = !1;
|
|
9985
10017
|
}
|
|
@@ -10030,7 +10062,7 @@ let Dt = class extends ne {
|
|
|
10030
10062
|
)}
|
|
10031
10063
|
</sl-button>
|
|
10032
10064
|
<div class="cb-engage-popup">
|
|
10033
|
-
<div class="cb-engage-popup-close" @click=${this._engageClickHandler.bind(this)}>${me`${Y(
|
|
10065
|
+
<div class="cb-engage-popup-close" @click=${this._engageClickHandler.bind(this)}>${me`${Y(ri)}`}</div>
|
|
10034
10066
|
<div class="cb-engage-popup-content">
|
|
10035
10067
|
${this.renderPopupLogo()}
|
|
10036
10068
|
<div>${b.setting.engageMessage}</div>
|
|
@@ -10042,28 +10074,28 @@ let Dt = class extends ne {
|
|
|
10042
10074
|
}
|
|
10043
10075
|
};
|
|
10044
10076
|
Dt.styles = Fn;
|
|
10045
|
-
|
|
10077
|
+
ci([
|
|
10046
10078
|
x({ type: Boolean })
|
|
10047
10079
|
], Dt.prototype, "open", 2);
|
|
10048
|
-
Dt =
|
|
10080
|
+
Dt = ci([
|
|
10049
10081
|
K("cb-anchor")
|
|
10050
10082
|
], Dt);
|
|
10051
10083
|
const Vn = J`
|
|
10052
10084
|
${ke}
|
|
10053
|
-
`,
|
|
10054
|
-
var Gn = Object.defineProperty, Xn = Object.getOwnPropertyDescriptor,
|
|
10085
|
+
`, Ba = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><g fill="currentColor"><path d="M4.54.146A.5.5 0 0 1 4.893 0h6.214a.5.5 0 0 1 .353.146l4.394 4.394a.5.5 0 0 1 .146.353v6.214a.5.5 0 0 1-.146.353l-4.394 4.394a.5.5 0 0 1-.353.146H4.893a.5.5 0 0 1-.353-.146L.146 11.46A.5.5 0 0 1 0 11.107V4.893a.5.5 0 0 1 .146-.353zM5.1 1L1 5.1v5.8L5.1 15h5.8l4.1-4.1V5.1L10.9 1z"/><path d="M7.002 11a1 1 0 1 1 2 0a1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z"/></g></svg>', Un = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><g fill="currentColor"><path d="M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016a.15.15 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.2.2 0 0 1-.054.06a.1.1 0 0 1-.066.017H1.146a.1.1 0 0 1-.066-.017a.2.2 0 0 1-.054-.06a.18.18 0 0 1 .002-.183L7.884 2.073a.15.15 0 0 1 .054-.057m1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767z"/><path d="M7.002 12a1 1 0 1 1 2 0a1 1 0 0 1-2 0M7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z"/></g></svg>', Nn = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><g fill="currentColor"><path d="M2.5 8a5.5 5.5 0 0 1 8.25-4.764a.5.5 0 0 0 .5-.866A6.5 6.5 0 1 0 14.5 8a.5.5 0 0 0-1 0a5.5 5.5 0 1 1-11 0"/><path d="M15.354 3.354a.5.5 0 0 0-.708-.708L8 9.293L5.354 6.646a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0z"/></g></svg>', Wn = '<svg viewBox="0 0 16 16" width="1.2em" height="1.2em" ><g fill="currentColor"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/><path d="m8.93 6.588l-2.29.287l-.082.38l.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319c.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246c-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0a1 1 0 0 1 2 0"/></g></svg>';
|
|
10086
|
+
var Gn = Object.defineProperty, Xn = Object.getOwnPropertyDescriptor, li = (a, e, t, i) => {
|
|
10055
10087
|
for (var s = i > 1 ? void 0 : i ? Xn(e, t) : e, r = a.length - 1, o; r >= 0; r--)
|
|
10056
10088
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
10057
10089
|
return i && s && Gn(e, t, s), s;
|
|
10058
10090
|
};
|
|
10059
|
-
const
|
|
10091
|
+
const Oa = {
|
|
10060
10092
|
error: {
|
|
10061
10093
|
variant: "danger",
|
|
10062
|
-
icon:
|
|
10094
|
+
icon: Ba
|
|
10063
10095
|
},
|
|
10064
10096
|
danger: {
|
|
10065
10097
|
variant: "danger",
|
|
10066
|
-
icon:
|
|
10098
|
+
icon: Ba
|
|
10067
10099
|
},
|
|
10068
10100
|
warning: {
|
|
10069
10101
|
variant: "warning",
|
|
@@ -10078,20 +10110,20 @@ const Ba = {
|
|
|
10078
10110
|
icon: Wn
|
|
10079
10111
|
}
|
|
10080
10112
|
};
|
|
10081
|
-
let Ft = class extends
|
|
10113
|
+
let Ft = class extends re {
|
|
10082
10114
|
constructor() {
|
|
10083
10115
|
super(...arguments), this.status = "info";
|
|
10084
10116
|
}
|
|
10085
10117
|
render() {
|
|
10086
|
-
const { variant: a, icon: e } =
|
|
10118
|
+
const { variant: a, icon: e } = Oa[this.status] || Oa.info;
|
|
10087
10119
|
return u`<cb-icon svg=${e} color="${a}"></cb-icon>`;
|
|
10088
10120
|
}
|
|
10089
10121
|
};
|
|
10090
10122
|
Ft.styles = Wa;
|
|
10091
|
-
|
|
10123
|
+
li([
|
|
10092
10124
|
x({ type: String })
|
|
10093
10125
|
], Ft.prototype, "status", 2);
|
|
10094
|
-
Ft =
|
|
10126
|
+
Ft = li([
|
|
10095
10127
|
K("cb-status-icon")
|
|
10096
10128
|
], Ft);
|
|
10097
10129
|
var Yn = Object.getOwnPropertyDescriptor, Jn = (a, e, t, i) => {
|
|
@@ -10099,7 +10131,7 @@ var Yn = Object.getOwnPropertyDescriptor, Jn = (a, e, t, i) => {
|
|
|
10099
10131
|
(o = a[r]) && (s = o(s) || s);
|
|
10100
10132
|
return s;
|
|
10101
10133
|
};
|
|
10102
|
-
let Qt = class extends
|
|
10134
|
+
let Qt = class extends re {
|
|
10103
10135
|
render() {
|
|
10104
10136
|
return u` <sl-alert variant="danger" open>
|
|
10105
10137
|
<cb-status-icon status="error" slot="icon"></cb-status-icon>
|
|
@@ -10209,7 +10241,7 @@ var Zn = Object.defineProperty, Qn = Object.getOwnPropertyDescriptor, ft = (a, e
|
|
|
10209
10241
|
return i && s && Zn(e, t, s), s;
|
|
10210
10242
|
};
|
|
10211
10243
|
const qa = Je.noConflict(), er = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-star-fill" viewBox="0 0 16 16"><path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/></svg>';
|
|
10212
|
-
let Ye = class extends
|
|
10244
|
+
let Ye = class extends re {
|
|
10213
10245
|
constructor() {
|
|
10214
10246
|
super(...arguments), this.store = new it(this, b), this.zindex = 100;
|
|
10215
10247
|
}
|
|
@@ -10242,7 +10274,7 @@ let Ye = class extends ne {
|
|
|
10242
10274
|
b.feedbackScore = 0;
|
|
10243
10275
|
}}"
|
|
10244
10276
|
>
|
|
10245
|
-
${me`${Y(
|
|
10277
|
+
${me`${Y(ai)}`}
|
|
10246
10278
|
</div>
|
|
10247
10279
|
<sl-rating id="cb-feedback-rating-el" class="cb-feedback-rating" @sl-change="${this._ratingChangeHandler}" label="Rating" precision="1" .value=${b.feedbackScore}></sl-rating>
|
|
10248
10280
|
<div
|
|
@@ -10251,7 +10283,7 @@ let Ye = class extends ne {
|
|
|
10251
10283
|
b.feedbackScore = 5;
|
|
10252
10284
|
}}"
|
|
10253
10285
|
>
|
|
10254
|
-
${me`${Y(
|
|
10286
|
+
${me`${Y(ti)}`}
|
|
10255
10287
|
</div>
|
|
10256
10288
|
</div>
|
|
10257
10289
|
<div style="display: flex">
|
|
@@ -10599,7 +10631,7 @@ class ar extends HTMLElement {
|
|
|
10599
10631
|
}
|
|
10600
10632
|
customElements.get("volume-visualizer") || customElements.define("volume-visualizer", ar);
|
|
10601
10633
|
const da = 1, Da = 2;
|
|
10602
|
-
class
|
|
10634
|
+
class di extends HTMLElement {
|
|
10603
10635
|
constructor() {
|
|
10604
10636
|
super(), this.attachShadow({ mode: "open" }), this._analyserInput = null, this._dataArrayInput = null, this._analyserOutput = null, this._dataArrayOutput = null, this._thinking = !1, this._muted = !1, this._fftSize = 512, this._smoothingTimeConstant = 0.55, this._canvas = null, this._context = null, this._lastTime = 0, this._render();
|
|
10605
10637
|
}
|
|
@@ -10681,7 +10713,7 @@ class ci extends HTMLElement {
|
|
|
10681
10713
|
this._stop(), this._analyserInput = null, this._analyserOutput = null;
|
|
10682
10714
|
}
|
|
10683
10715
|
}
|
|
10684
|
-
class ir extends
|
|
10716
|
+
class ir extends di {
|
|
10685
10717
|
constructor() {
|
|
10686
10718
|
super(), this._ribbons = [], this._lastTime = 0, this._ribbons.push(
|
|
10687
10719
|
new It(
|
|
@@ -10784,7 +10816,7 @@ class It {
|
|
|
10784
10816
|
}
|
|
10785
10817
|
}
|
|
10786
10818
|
}
|
|
10787
|
-
class sr extends
|
|
10819
|
+
class sr extends di {
|
|
10788
10820
|
constructor() {
|
|
10789
10821
|
super(), this._numBars = 32, this._renderHeights = Array(this._numBars).fill(0), this._targetHeights = Array(this._numBars).fill(0), this._velocity = Array(this._numBars).fill(0), this._springStrength = 25, this._damping = 0.75, this._inputColor = { r: 255, g: 126, b: 103 }, this._outputColor = { r: 99, g: 193, b: 208 }, this._currentColor = { ...this._outputColor }, this._thinkingPhase = 0;
|
|
10790
10822
|
}
|
|
@@ -10841,12 +10873,12 @@ var rr = Object.getOwnPropertyDescriptor, or = (a, e, t, i) => {
|
|
|
10841
10873
|
};
|
|
10842
10874
|
const bt = Je.noConflict();
|
|
10843
10875
|
bt.setLevel("info");
|
|
10844
|
-
let ea = class extends
|
|
10876
|
+
let ea = class extends re {
|
|
10845
10877
|
constructor() {
|
|
10846
10878
|
super(...arguments), this.store = new it(this, b), this.unsubscribeTypingActive = b.subscribe(
|
|
10847
10879
|
this._handleTypingActiveChanged.bind(this),
|
|
10848
10880
|
["typingActive"]
|
|
10849
|
-
), this.volumeVisualizerRef =
|
|
10881
|
+
), this.volumeVisualizerRef = Fi(), this.volumeVisualizerInitialized = !1;
|
|
10850
10882
|
}
|
|
10851
10883
|
/*
|
|
10852
10884
|
createRenderRoot() {
|
|
@@ -10954,7 +10986,7 @@ class ta extends Error {
|
|
|
10954
10986
|
super(`Request failed with ${f}: ${t.method} ${t.url}`), this.name = "HTTPError", this.response = e, this.request = t, this.options = i;
|
|
10955
10987
|
}
|
|
10956
10988
|
}
|
|
10957
|
-
class
|
|
10989
|
+
class fi extends Error {
|
|
10958
10990
|
name = "NonError";
|
|
10959
10991
|
value;
|
|
10960
10992
|
constructor(e) {
|
|
@@ -10972,7 +11004,7 @@ class Wt extends Error {
|
|
|
10972
11004
|
code;
|
|
10973
11005
|
customRequest;
|
|
10974
11006
|
constructor(e) {
|
|
10975
|
-
const t = e?.cause ? e.cause instanceof Error ? e.cause : new
|
|
11007
|
+
const t = e?.cause ? e.cause instanceof Error ? e.cause : new fi(e.cause) : void 0;
|
|
10976
11008
|
super(e?.code ? `Forced retry: ${e.code}` : "Forced retry", t ? { cause: t } : void 0), this.customDelay = e?.delay, this.code = e?.code, this.customRequest = e?.request;
|
|
10977
11009
|
}
|
|
10978
11010
|
}
|
|
@@ -10995,7 +11027,7 @@ const Fa = (() => {
|
|
|
10995
11027
|
throw s;
|
|
10996
11028
|
}
|
|
10997
11029
|
return a && !e;
|
|
10998
|
-
})(), cr = typeof globalThis.AbortController == "function",
|
|
11030
|
+
})(), cr = typeof globalThis.AbortController == "function", hi = typeof globalThis.AbortSignal == "function" && typeof globalThis.AbortSignal.any == "function", lr = typeof globalThis.ReadableStream == "function", dr = typeof globalThis.FormData == "function", bi = ["get", "post", "put", "patch", "head", "delete"], fr = {
|
|
10999
11031
|
json: "application/json",
|
|
11000
11032
|
text: "text/*",
|
|
11001
11033
|
formData: "multipart/form-data",
|
|
@@ -11004,14 +11036,14 @@ const Fa = (() => {
|
|
|
11004
11036
|
// Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici).
|
|
11005
11037
|
// We still feature-check at runtime before exposing the shortcut.
|
|
11006
11038
|
bytes: "*/*"
|
|
11007
|
-
}, Gt = 2147483647, hr = new TextEncoder().encode("------WebKitFormBoundaryaxpyiPgbbPti10Rw").length,
|
|
11008
|
-
class
|
|
11039
|
+
}, Gt = 2147483647, hr = new TextEncoder().encode("------WebKitFormBoundaryaxpyiPgbbPti10Rw").length, ui = Symbol("stop");
|
|
11040
|
+
class pi {
|
|
11009
11041
|
options;
|
|
11010
11042
|
constructor(e) {
|
|
11011
11043
|
this.options = e;
|
|
11012
11044
|
}
|
|
11013
11045
|
}
|
|
11014
|
-
const br = (a) => new
|
|
11046
|
+
const br = (a) => new pi(a), ur = {
|
|
11015
11047
|
json: !0,
|
|
11016
11048
|
parseJson: !0,
|
|
11017
11049
|
stringifyJson: !0,
|
|
@@ -11070,7 +11102,7 @@ const br = (a) => new bi(a), ur = {
|
|
|
11070
11102
|
return 0;
|
|
11071
11103
|
}
|
|
11072
11104
|
return 0;
|
|
11073
|
-
},
|
|
11105
|
+
}, gi = (a, e, t) => {
|
|
11074
11106
|
let i, s = 0;
|
|
11075
11107
|
return a.pipeThrough(new TransformStream({
|
|
11076
11108
|
transform(r, o) {
|
|
@@ -11095,7 +11127,7 @@ const br = (a) => new bi(a), ur = {
|
|
|
11095
11127
|
headers: a.headers
|
|
11096
11128
|
});
|
|
11097
11129
|
const t = Math.max(0, Number(a.headers.get("content-length")) || 0);
|
|
11098
|
-
return new Response(
|
|
11130
|
+
return new Response(gi(a.body, t, e), {
|
|
11099
11131
|
status: a.status,
|
|
11100
11132
|
statusText: a.statusText,
|
|
11101
11133
|
headers: a.headers
|
|
@@ -11107,14 +11139,14 @@ const br = (a) => new bi(a), ur = {
|
|
|
11107
11139
|
return new Request(a, {
|
|
11108
11140
|
// @ts-expect-error - Types are outdated.
|
|
11109
11141
|
duplex: "half",
|
|
11110
|
-
body:
|
|
11142
|
+
body: gi(a.body, i, e)
|
|
11111
11143
|
});
|
|
11112
11144
|
}, Qe = (a) => a !== null && typeof a == "object", Et = (...a) => {
|
|
11113
11145
|
for (const e of a)
|
|
11114
11146
|
if ((!Qe(e) || Array.isArray(e)) && e !== void 0)
|
|
11115
11147
|
throw new TypeError("The `options` argument must be an object");
|
|
11116
11148
|
return fa({}, ...a);
|
|
11117
|
-
},
|
|
11149
|
+
}, mi = (a = {}, e = {}) => {
|
|
11118
11150
|
const t = new globalThis.Headers(a), i = e instanceof globalThis.Headers, s = new globalThis.Headers(e);
|
|
11119
11151
|
for (const [r, o] of s.entries())
|
|
11120
11152
|
i && o === "undefined" || o === void 0 ? t.delete(r) : t.set(r, o);
|
|
@@ -11123,7 +11155,7 @@ const br = (a) => new bi(a), ur = {
|
|
|
11123
11155
|
function $t(a, e, t) {
|
|
11124
11156
|
return Object.hasOwn(e, t) && e[t] === void 0 ? [] : fa(a[t] ?? [], e[t] ?? []);
|
|
11125
11157
|
}
|
|
11126
|
-
const
|
|
11158
|
+
const yi = (a = {}, e = {}) => ({
|
|
11127
11159
|
beforeRequest: $t(a, e, "beforeRequest"),
|
|
11128
11160
|
beforeRetry: $t(a, e, "beforeRetry"),
|
|
11129
11161
|
afterResponse: $t(a, e, "afterResponse"),
|
|
@@ -11177,10 +11209,10 @@ const gi = (a = {}, e = {}) => ({
|
|
|
11177
11209
|
}
|
|
11178
11210
|
Qe(p) && f in e && (p = fa(e[f], p)), e = { ...e, [f]: p };
|
|
11179
11211
|
}
|
|
11180
|
-
Qe(o.hooks) && (i =
|
|
11212
|
+
Qe(o.hooks) && (i = yi(i, o.hooks), e.hooks = i), Qe(o.headers) && (t = mi(t, o.headers), e.headers = t);
|
|
11181
11213
|
}
|
|
11182
|
-
return s !== void 0 && (e.searchParams = s), r.length > 0 && (r.length === 1 ? e.signal = r[0] :
|
|
11183
|
-
}, xr = (a) =>
|
|
11214
|
+
return s !== void 0 && (e.searchParams = s), r.length > 0 && (r.length === 1 ? e.signal = r[0] : hi ? e.signal = AbortSignal.any(r) : e.signal = r.at(-1)), e.context === void 0 && (e.context = {}), e;
|
|
11215
|
+
}, xr = (a) => bi.includes(a) ? a.toUpperCase() : a, kr = ["get", "put", "head", "delete", "options", "trace"], _r = [408, 413, 429, 500, 502, 503, 504], Sr = [413, 429, 503], ja = {
|
|
11184
11216
|
limit: 2,
|
|
11185
11217
|
methods: kr,
|
|
11186
11218
|
statusCodes: _r,
|
|
@@ -11253,7 +11285,7 @@ class vt {
|
|
|
11253
11285
|
let o = await i.#p();
|
|
11254
11286
|
for (const f of i.#e.hooks.afterResponse) {
|
|
11255
11287
|
const p = i.#d(o.clone()), v = await f(i.request, i.#o(), p, { retryCount: i.#a });
|
|
11256
|
-
if (v instanceof globalThis.Response && (o = v), v instanceof
|
|
11288
|
+
if (v instanceof globalThis.Response && (o = v), v instanceof pi)
|
|
11257
11289
|
throw await Promise.all([
|
|
11258
11290
|
p.body?.cancel(),
|
|
11259
11291
|
o.body?.cancel()
|
|
@@ -11308,8 +11340,8 @@ class vt {
|
|
|
11308
11340
|
constructor(e, t = {}) {
|
|
11309
11341
|
if (this.#t = e, this.#e = {
|
|
11310
11342
|
...t,
|
|
11311
|
-
headers:
|
|
11312
|
-
hooks:
|
|
11343
|
+
headers: mi(this.#t.headers, t.headers),
|
|
11344
|
+
hooks: yi({
|
|
11313
11345
|
beforeRequest: [],
|
|
11314
11346
|
beforeRetry: [],
|
|
11315
11347
|
beforeError: [],
|
|
@@ -11330,7 +11362,7 @@ class vt {
|
|
|
11330
11362
|
throw new Error("`input` must not begin with a slash when using `prefixUrl`");
|
|
11331
11363
|
this.#e.prefixUrl.endsWith("/") || (this.#e.prefixUrl += "/"), this.#t = this.#e.prefixUrl + this.#t;
|
|
11332
11364
|
}
|
|
11333
|
-
cr &&
|
|
11365
|
+
cr && hi && (this.#s = this.#e.signal ?? this.#t.signal, this.#i = new globalThis.AbortController(), this.#e.signal = this.#s ? AbortSignal.any([this.#s, this.#i.signal]) : this.#i.signal), Fa && (this.#e.duplex = "half"), this.#e.json !== void 0 && (this.#e.body = this.#e.stringifyJson?.(this.#e.json) ?? JSON.stringify(this.#e.json), this.#e.headers.set("content-type", this.#e.headers.get("content-type") ?? "application/json"));
|
|
11334
11366
|
const i = t.headers && new globalThis.Headers(t.headers).has("content-type");
|
|
11335
11367
|
if (this.#t instanceof globalThis.Request && (dr && this.#e.body instanceof globalThis.FormData || this.#e.body instanceof URLSearchParams) && !i && this.#e.headers.delete("content-type"), this.request = new globalThis.Request(this.#t, this.#e), Ir(this.#e.searchParams)) {
|
|
11336
11368
|
const r = "?" + (typeof this.#e.searchParams == "string" ? this.#e.searchParams.replace(/^\?/, "") : new URLSearchParams(vt.#b(this.#e.searchParams)).toString()), o = this.request.url.replace(/(?:\?.*?)?(?=#|$)/, r);
|
|
@@ -11352,7 +11384,7 @@ class vt {
|
|
|
11352
11384
|
async #u(e) {
|
|
11353
11385
|
if (this.#a++, this.#a > this.#e.retry.limit)
|
|
11354
11386
|
throw e;
|
|
11355
|
-
const t = e instanceof Error ? e : new
|
|
11387
|
+
const t = e instanceof Error ? e : new fi(e);
|
|
11356
11388
|
if (t instanceof Wt)
|
|
11357
11389
|
return t.customDelay ?? this.#c();
|
|
11358
11390
|
if (!this.#e.retry.methods.includes(this.request.method.toLowerCase()))
|
|
@@ -11408,7 +11440,7 @@ class vt {
|
|
|
11408
11440
|
}
|
|
11409
11441
|
if (r instanceof globalThis.Response)
|
|
11410
11442
|
return r;
|
|
11411
|
-
if (r ===
|
|
11443
|
+
if (r === ui)
|
|
11412
11444
|
return;
|
|
11413
11445
|
}
|
|
11414
11446
|
return this.#f(e);
|
|
@@ -11444,9 +11476,9 @@ class vt {
|
|
|
11444
11476
|
}
|
|
11445
11477
|
const ia = (a) => {
|
|
11446
11478
|
const e = (t, i) => vt.create(t, Et(a, i));
|
|
11447
|
-
for (const t of
|
|
11479
|
+
for (const t of bi)
|
|
11448
11480
|
e[t] = (i, s) => vt.create(i, Et(a, s, { method: t }));
|
|
11449
|
-
return e.create = (t) => ia(Et(t)), e.extend = (t) => (typeof t == "function" && (t = t(a ?? {})), ia(Et(a, t))), e.stop =
|
|
11481
|
+
return e.create = (t) => ia(Et(t)), e.extend = (t) => (typeof t == "function" && (t = t(a ?? {})), ia(Et(a, t))), e.stop = ui, e.retry = br, e;
|
|
11450
11482
|
}, Pr = ia();
|
|
11451
11483
|
Pr.extend({
|
|
11452
11484
|
hooks: {
|
|
@@ -11482,9 +11514,9 @@ var Rr = Object.defineProperty, zr = Object.getOwnPropertyDescriptor, U = (a, e,
|
|
|
11482
11514
|
(o = a[r]) && (s = (i ? o(e, t, s) : o(s)) || s);
|
|
11483
11515
|
return i && s && Rr(e, t, s), s;
|
|
11484
11516
|
};
|
|
11485
|
-
const
|
|
11486
|
-
|
|
11487
|
-
let H = class extends
|
|
11517
|
+
const Oe = Je.noConflict();
|
|
11518
|
+
Oe.setLevel("info");
|
|
11519
|
+
let H = class extends re {
|
|
11488
11520
|
constructor() {
|
|
11489
11521
|
super(...arguments), this.store = new it(this, b), this.displayLicense = !1, this.name = "ChatBot", this.orgId = "", this.botId = "", this.url = "ws://localhost:3070", this.logoUrl = "", this.logoSvg = `<svg width="24" height="24" viewBox="0 0 203 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
11490
11522
|
<path d="M100.438 0C155.665 0 200.438 44.7723 200.438 100C200.438 155.228 155.665 200 100.438 200C45.2098 200 0.4375 155.228 0.4375 100C0.4375 44.7723 45.2098 0 100.438 0ZM130.093 60.6063C120.409 60.6063 115.205 61.458 109.344 65.0325C100.122 70.6592 95.629 80.1958 94.2273 93.877C94.1468 94.5544 93.8048 97.2571 93.4091 100.349C93.3152 101.06 93.2281 101.771 93.1409 102.455C92.7318 105.573 92.3093 108.739 92.0142 110.408C90.8808 117.041 89.2914 123.761 83.8927 126.759C83.6915 126.873 83.4702 126.967 83.2556 127.067C78.6013 129.093 72.2905 128.898 72.2905 128.898C72.2905 128.898 69.1988 128.885 69.1787 128.885C69.172 128.885 69.1921 128.885 69.1921 128.898L68.1057 143.632C87.7824 143.666 93.0537 139.213 93.0537 139.213C102.275 133.586 106.768 124.049 108.17 110.368C108.251 109.677 108.593 106.894 109.002 103.735C109.096 103.004 109.196 102.273 109.283 101.576C109.679 98.5246 110.095 95.4798 110.383 93.8435C111.517 87.2108 113.106 80.4842 118.505 77.4931C118.706 77.3791 118.921 77.2852 119.135 77.1846C123.756 75.1727 130.107 75.3471 130.107 75.3471C132.494 75.3269 133.219 75.4007 133.286 75.4074L134.292 60.6264C132.783 60.6264 130.107 60.6264 130.107 60.6264L130.093 60.6063Z" fill="#010101" style="fill:#010101;fill:color(display-p3 0.0039 0.0039 0.0039);fill-opacity:1;"/>
|
|
@@ -11547,8 +11579,8 @@ let H = class extends ne {
|
|
|
11547
11579
|
b.addActions(a);
|
|
11548
11580
|
}
|
|
11549
11581
|
render() {
|
|
11550
|
-
return b.disabled && !this.alwaysOpen ? (
|
|
11551
|
-
<div class="cb-wrapper${b.open ? " cb-open" : ""}" part="wrapper${b.open ? " open" : ""}" exportparts="wrapper${b.open ? " open" : ""}">
|
|
11582
|
+
return b.disabled && !this.alwaysOpen ? (Oe.info("Bot is disabled until settings are loaded"), null) : u`
|
|
11583
|
+
<div class="cb-wrapper${b.open ? " cb-open" : ""}" part="wrapper${b.open ? " open" : ""}" exportparts="new-conversation-wrapper new-conversation-button wrapper${b.open ? " open" : ""}">
|
|
11552
11584
|
<cb-header title="${this.name}" exportparts="header, header-logo, header-title, header-close"></cb-header>
|
|
11553
11585
|
<cb-message-list
|
|
11554
11586
|
.messages=${b.messages}
|
|
@@ -11556,6 +11588,15 @@ let H = class extends ne {
|
|
|
11556
11588
|
.form=${b.form}
|
|
11557
11589
|
exportparts="bot-message-list, disclaimer-message, bot-message, cb-message, bot-message-content, user-message-content, user-avatar, assistant-avatar, feedback-wrapper,feedback-up,feedback-down,form, form-title, form-input, form-submit"
|
|
11558
11590
|
></cb-message-list>
|
|
11591
|
+
${W(
|
|
11592
|
+
b.showNewConversation,
|
|
11593
|
+
() => u`
|
|
11594
|
+
<div class="cb-new-conversation-wrapper" part="new-conversation-wrapper">
|
|
11595
|
+
<button type="button" class="card-btn info" part="new-conversation-button" @click=${this.clearConversation}>Start New Conversation</button>
|
|
11596
|
+
</div>
|
|
11597
|
+
`,
|
|
11598
|
+
() => u``
|
|
11599
|
+
)}
|
|
11559
11600
|
<cb-audio-controls exportparts="audio-controls-wrapper, audio-controls, audio-mute-button, audio-unmute-button, audio-end-button, audio-controls-viz"></cb-audio-controls>
|
|
11560
11601
|
${this.renderUserInput()} ${this.renderFeedbackDialog()}
|
|
11561
11602
|
</div>
|
|
@@ -11588,7 +11629,7 @@ let H = class extends ne {
|
|
|
11588
11629
|
></cb-user-input>`;
|
|
11589
11630
|
}
|
|
11590
11631
|
connectedCallback() {
|
|
11591
|
-
super.connectedCallback(),
|
|
11632
|
+
super.connectedCallback(), Oe.info("connectedCallback"), this.initCssVariables(), addEventListener("c7o:bot:stateEvent", this.handleStateEvent), addEventListener("message:send", this.handleAddMessage), addEventListener("chatbot:toggle", this.handleToggleEvent), addEventListener("form:submit", this.handleFormSubmitEvent), addEventListener("message:send:file", this._uploadFileHandler), addEventListener("audio:toggle", this._audioToggleHandler);
|
|
11592
11633
|
}
|
|
11593
11634
|
extractCssVariable(a, e, t) {
|
|
11594
11635
|
let i = a.getPropertyValue(e).trim();
|
|
@@ -11617,26 +11658,26 @@ let H = class extends ne {
|
|
|
11617
11658
|
|
|
11618
11659
|
*/
|
|
11619
11660
|
disconnectedCallback() {
|
|
11620
|
-
|
|
11661
|
+
Oe.info("disconnectedCallback"), super.disconnectedCallback(), window.removeEventListener("c7o:bot:stateEvent", this.handleStateEvent), window.removeEventListener("message:send", this.handleAddMessage), window.removeEventListener("chatbot:toggle", this.handleToggleEvent), window.removeEventListener("form:submit", this.handleFormSubmitEvent), window.removeEventListener("message:send:file", this._uploadFileHandler), window.removeEventListener("audio:toggle", this._audioToggleHandler);
|
|
11621
11662
|
}
|
|
11622
11663
|
// This is called when component is loaded, with all the settings (props) values
|
|
11623
11664
|
// Use to initialize
|
|
11624
11665
|
// This is also called when state changes - ??? - i.e. when message added to the array
|
|
11625
11666
|
updated(a) {
|
|
11626
|
-
super.updated(a), a.size > 0 && (
|
|
11667
|
+
super.updated(a), a.size > 0 && (Oe.info("updated,_changedProperties:", a), this._initSetting()), !this._scrollToBottomTimeout && (this._scrollToBottomTimeout = setTimeout(() => {
|
|
11627
11668
|
this._scrollToBottom(), this._scrollToBottomTimeout = void 0;
|
|
11628
11669
|
}, 200));
|
|
11629
11670
|
}
|
|
11630
11671
|
// initialize setting
|
|
11631
11672
|
_initSetting() {
|
|
11632
|
-
|
|
11673
|
+
Oe.info("_initSetting");
|
|
11633
11674
|
const a = b.setting;
|
|
11634
11675
|
a.orgId = this.orgId, a.botId = this.botId, a.url = this.url, a.logoUrl = this.logoUrl, a.logoSvg = this.logoSvg, a.closeSvg = this.closeSvg, a.popupLogoSvg = this.popupLogoSvg, a.popupLogoUrl = this.popupLogoUrl, a.botIconSvg = this.botIconSvg, a.userIconSvg = this.userIconSvg, a.systemIconSvg = this.systemIconSvg, a.agentIconSvg = this.agentIconSvg, a.anchorOpenSvg = this.anchorOpenSvg, a.anchorCloseSvg = this.anchorCloseSvg, a.sendIconSvg = this.sendIconSvg, a.attachIconSvg = this.attachIconSvg, b.setSetting(a);
|
|
11635
11676
|
let e = {};
|
|
11636
11677
|
try {
|
|
11637
11678
|
e = JSON.parse(this.prefilledFormFields);
|
|
11638
11679
|
} catch (t) {
|
|
11639
|
-
|
|
11680
|
+
Oe.error(`Failed to parse prefilled-form-fields attribute value, error: ${t?.message || ""}`), e = {};
|
|
11640
11681
|
}
|
|
11641
11682
|
b.setPrefilledFormFields(e), this.open && (b.open = !0), this.alwaysOpen && (b.open = !0, b.alwaysOpen = !0);
|
|
11642
11683
|
}
|
|
@@ -11671,7 +11712,7 @@ let H = class extends ne {
|
|
|
11671
11712
|
// for example, user profile, current product user is viewing on the web page, etc.
|
|
11672
11713
|
setContext(a = {}) {
|
|
11673
11714
|
b.setContext(a).catch((e) => {
|
|
11674
|
-
|
|
11715
|
+
Oe.error(`Failed to set context, error: ${e?.message || ""}`);
|
|
11675
11716
|
});
|
|
11676
11717
|
}
|
|
11677
11718
|
getContext() {
|
|
@@ -11736,6 +11777,11 @@ let H = class extends ne {
|
|
|
11736
11777
|
};
|
|
11737
11778
|
return this._processSendMessage(e);
|
|
11738
11779
|
}
|
|
11780
|
+
// [sv2] for testing only
|
|
11781
|
+
processAgentDisconnected(a) {
|
|
11782
|
+
b.handleAgentDisconnected(a).catch((e) => {
|
|
11783
|
+
});
|
|
11784
|
+
}
|
|
11739
11785
|
_processSendMessage(a) {
|
|
11740
11786
|
if (!a.data.text || typeof a.data.text != "string" || a.data.text.trim() === "") {
|
|
11741
11787
|
console.log("_processSendMessage: input text is empty, ignored", a);
|
|
@@ -11769,7 +11815,7 @@ let H = class extends ne {
|
|
|
11769
11815
|
await b.uploadFiles(e.files);
|
|
11770
11816
|
}
|
|
11771
11817
|
async _audioToggleHandler(a) {
|
|
11772
|
-
|
|
11818
|
+
Oe.info("_audioToggleHandler called"), await b.toggleAudio();
|
|
11773
11819
|
}
|
|
11774
11820
|
// setting confirm handler
|
|
11775
11821
|
_settingConfirmHandler(a) {
|
|
@@ -11787,7 +11833,7 @@ let H = class extends ne {
|
|
|
11787
11833
|
this._messageList?.scrollToBottom();
|
|
11788
11834
|
}
|
|
11789
11835
|
};
|
|
11790
|
-
H.styles =
|
|
11836
|
+
H.styles = [Gi, Ka];
|
|
11791
11837
|
U([
|
|
11792
11838
|
x({ type: Boolean, attribute: "display-license" })
|
|
11793
11839
|
], H.prototype, "displayLicense", 2);
|