@scout9/app 1.0.0-alpha.0.8.1 → 1.0.0-alpha.0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var spirits = require("./spirits-8325bcf4.cjs");
3
+ var spirits = require("./spirits-6abaf567.cjs");
4
4
  var require$$0$4 = require('util');
5
5
  var require$$0$3 = require('stream');
6
6
  var require$$1 = require('path');
@@ -30272,7 +30272,7 @@ common.createRequestFunction = createRequestFunction;
30272
30272
  var configuration = {};
30273
30273
 
30274
30274
  var name$1 = "@scout9/admin";
30275
- var version$2 = "1.0.0-alpha.0.0.64";
30275
+ var version$2 = "1.0.0-alpha.0.0.65";
30276
30276
  var description$1 = "";
30277
30277
  var main$2 = "./build/index.js";
30278
30278
  var types$1 = "./build/index.d.ts";
@@ -35337,7 +35337,7 @@ function _loadUserPackageJson() {
35337
35337
  targetPkgUrl = isTest ? packageTestJsonUrl : packageJsonUrl;
35338
35338
  _context2.t0 = JSON;
35339
35339
  _context2.next = 10;
35340
- return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('dev-6ed916b0.js', document.baseURI).href))), 'utf-8');
35340
+ return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('dev-0102b73f.js', document.baseURI).href))), 'utf-8');
35341
35341
  case 10:
35342
35342
  _context2.t1 = _context2.sent;
35343
35343
  pkg = _context2.t0.parse.call(_context2.t0, _context2.t1);
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var spirits = require("./spirits-8325bcf4.cjs");
4
- var dev = require("./dev-6ed916b0.cjs");
3
+ var spirits = require("./spirits-6abaf567.cjs");
4
+ var dev = require("./dev-0102b73f.cjs");
5
5
  var macros = require("./macros-f62cceac.cjs");
6
6
  var require$$0 = require('fs');
7
7
  var require$$2$1 = require('events');
@@ -29483,7 +29483,7 @@ class Body {
29483
29483
  }
29484
29484
  const {
29485
29485
  toFormData
29486
- } = await Promise.resolve().then(function () { return require("./multipart-parser-fdd44ec3.cjs"); });
29486
+ } = await Promise.resolve().then(function () { return require("./multipart-parser-22a1e9f6.cjs"); });
29487
29487
  return toFormData(this.body, ct);
29488
29488
  }
29489
29489
 
@@ -41884,7 +41884,7 @@ function _loadUserPackageJson() {
41884
41884
  targetPkgUrl = isTest ? packageTestJsonUrl : packageJsonUrl;
41885
41885
  _context.t0 = JSON;
41886
41886
  _context.next = 10;
41887
- return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-5e8f21d8.js', document.baseURI).href))), 'utf-8');
41887
+ return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-5f4f222f.js', document.baseURI).href))), 'utf-8');
41888
41888
  case 10:
41889
41889
  _context.t1 = _context.sent;
41890
41890
  pkg = _context.t0.parse.call(_context.t0, _context.t1);
@@ -43176,7 +43176,7 @@ var ProjectFiles = /*#__PURE__*/function () {
43176
43176
  return ProjectFiles;
43177
43177
  }();
43178
43178
 
43179
- var __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-5e8f21d8.js', document.baseURI).href)));
43179
+ var __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-5f4f222f.js', document.baseURI).href)));
43180
43180
  var __dirname$1 = path__default["default"].dirname(__filename$1);
43181
43181
  function zipDirectory(source, out) {
43182
43182
  var archive = archiver$1('tar', {
@@ -43391,7 +43391,7 @@ function _buildApp() {
43391
43391
  case 11:
43392
43392
  _context4.t0 = JSON;
43393
43393
  _context4.next = 14;
43394
- return fs__default["default"].readFile(new URL(templatePackagePath, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-5e8f21d8.js', document.baseURI).href))), 'utf-8');
43394
+ return fs__default["default"].readFile(new URL(templatePackagePath, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-5f4f222f.js', document.baseURI).href))), 'utf-8');
43395
43395
  case 14:
43396
43396
  _context4.t1 = _context4.sent;
43397
43397
  packageTemplate = _context4.t0.parse.call(_context4.t0, _context4.t1);
package/dist/index.cjs CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require("./index-5e8f21d8.cjs");
6
- var dev = require("./dev-6ed916b0.cjs");
7
- require("./spirits-8325bcf4.cjs");
5
+ var index = require("./index-5f4f222f.cjs");
6
+ var dev = require("./dev-0102b73f.cjs");
7
+ require("./spirits-6abaf567.cjs");
8
8
  require("./macros-f62cceac.cjs");
9
9
  require('fs');
10
10
  require('events');
@@ -2,9 +2,9 @@
2
2
 
3
3
  require('node:fs');
4
4
  require('node:path');
5
- var index = require("./index-5e8f21d8.cjs");
6
- require("./spirits-8325bcf4.cjs");
7
- require("./dev-6ed916b0.cjs");
5
+ var index = require("./index-5f4f222f.cjs");
6
+ require("./spirits-6abaf567.cjs");
7
+ require("./dev-0102b73f.cjs");
8
8
  require('util');
9
9
  require('stream');
10
10
  require('path');
@@ -634,8 +634,8 @@ var _excluded = ["keywords"];
634
634
  * @typedef {Object} ConversationData
635
635
  * @property {import('@scout9/app').Scout9ProjectBuildConfig} config - used to define generation and extract persona metadata
636
636
  * @property {import('@scout9/app').Conversation} conversation
637
- * @property {Array<import('@scout9/app').Message>} messages
638
- * @property {import('@scout9/app').Message} message - the message sent by the customer (should exist in messages)
637
+ * @property {Array<import('@scout9/admin').Message>} messages
638
+ * @property {import('@scout9/admin').Message} message - the message sent by the customer (should exist in messages)
639
639
  * @property {import('@scout9/app').Customer} customer
640
640
  * @property {import('@scout9/app').ConversationProgress} progress - progress checklist for manual/auto ingress workflows
641
641
  * @property {any} context - event context
@@ -643,16 +643,16 @@ var _excluded = ["keywords"];
643
643
 
644
644
  /**
645
645
  * @typedef {Object} ParseOutput
646
- * @property {Array<import('@scout9/app').Message>} messages
646
+ * @property {Array<import('@scout9/admin').Message>} messages
647
647
  * @property {import('@scout9/app').Conversation} conversation
648
- * @property {import('@scout9/app').Message} message
648
+ * @property {import('@scout9/admin').Message} message
649
649
  * @property {any} context
650
650
  */
651
651
 
652
652
  /**
653
653
  * @typedef {Object} WorkflowOutput
654
654
  * @property {Array<import('@scout9/app').WorkflowResponseSlot>} slots
655
- * @property {Array<import('@scout9/app').Message>} messages
655
+ * @property {Array<import('@scout9/admin').Message>} messages
656
656
  * @property {import('@scout9/app').Conversation} conversation
657
657
  * @property {any} context
658
658
  */
@@ -660,7 +660,7 @@ var _excluded = ["keywords"];
660
660
  /**
661
661
  * @typedef {Object} GenerateOutput
662
662
  * @property {import('@scout9/admin').GenerateResponse | undefined} generate
663
- * @property {Array<import('@scout9/app').Message>} messages
663
+ * @property {Array<import('@scout9/admin').Message>} messages
664
664
  * @property {import('@scout9/app').Conversation} conversation
665
665
  * @property {any} context
666
666
  */
@@ -672,6 +672,12 @@ var _excluded = ["keywords"];
672
672
  * @returns {Promise<import('@scout9/admin').ParseResponse>}
673
673
  */
674
674
 
675
+ /**
676
+ * @callback ContextualizerFun
677
+ * @param {Pick<import('@scout9/app').WorkflowEvent, 'messages' | 'conversation'>} args - message to send
678
+ * @returns {Promise<import('@scout9/app').WorkflowEvent['messages']>}
679
+ */
680
+
675
681
  /**
676
682
  * @callback WorkflowFun
677
683
  * @param {import('@scout9/app').WorkflowEvent} event - conversation data
@@ -692,7 +698,7 @@ var _excluded = ["keywords"];
692
698
 
693
699
  /**
694
700
  * @callback IdGeneratorFun
695
- * @param {import('@scout9/app').Message['role']} prefix
701
+ * @param {import('@scout9/admin').Message['role']} prefix
696
702
  * @returns {string}
697
703
  */
698
704
 
@@ -708,6 +714,7 @@ var _excluded = ["keywords"];
708
714
  /**
709
715
  * @typedef {Object} CustomerSpiritCallbacks
710
716
  * @property {ParseFun} parser
717
+ * @property {ContextualizerFun} contextualizer
711
718
  * @property {WorkflowFun} workflow
712
719
  * @property {GenerateFun} generator
713
720
  * @property {TransformerFun} transformer
@@ -721,9 +728,9 @@ var _excluded = ["keywords"];
721
728
  * forwardNote?: string;
722
729
  * forward?: import('@scout9/app').WorkflowResponseSlot['forward'];
723
730
  * })} conversation
724
- * @property {Change<Array<import('@scout9/app').Message>>} messages
731
+ * @property {Change<Array<import('@scout9/admin').Message>>} messages
725
732
  * @property {Change<any>} context
726
- * @property {Change<import('@scout9/app').Message>} message
733
+ * @property {Change<import('@scout9/admin').Message>} message
727
734
  * @property {Array<import('@scout9/app').Followup>} followup
728
735
  * @property {Array<import('@scout9/app').EntityContextUpsert>} entityContextUpsert
729
736
  */
@@ -741,6 +748,7 @@ var Spirits = {
741
748
  customer,
742
749
  config,
743
750
  parser,
751
+ contextualizer,
744
752
  workflow,
745
753
  generator,
746
754
  transformer,
@@ -775,6 +783,10 @@ var Spirits = {
775
783
  newKeyCount,
776
784
  noNewContext,
777
785
  _messages2,
786
+ newContextMessages,
787
+ _iterator,
788
+ _step,
789
+ contextMessage,
778
790
  slots,
779
791
  hasNoInstructions,
780
792
  hasNoCustomMessage,
@@ -784,9 +796,9 @@ var Spirits = {
784
796
  _forward,
785
797
  _forwardNote,
786
798
  _tasks,
787
- _iterator,
788
- _step,
789
- _step$value,
799
+ _iterator2,
800
+ _step2,
801
+ _step2$value,
790
802
  forward,
791
803
  forwardNote,
792
804
  instructions,
@@ -808,11 +820,11 @@ var Spirits = {
808
820
  _slot,
809
821
  slotId,
810
822
  _tasks2,
811
- _iterator4,
812
- _step4,
813
- instruction,
814
823
  _iterator5,
815
824
  _step5,
825
+ instruction,
826
+ _iterator6,
827
+ _step6,
816
828
  _loop,
817
829
  manualMessageObj,
818
830
  now,
@@ -824,11 +836,11 @@ var Spirits = {
824
836
  agentMessages,
825
837
  lastAgentMessage,
826
838
  addedMessages,
827
- _iterator2,
828
- _step2,
829
- newMessage,
830
839
  _iterator3,
831
840
  _step3,
841
+ newMessage,
842
+ _iterator4,
843
+ _step4,
832
844
  transformResponse,
833
845
  _agentMessages,
834
846
  _lastAgentMessage,
@@ -837,7 +849,7 @@ var Spirits = {
837
849
  while (1) switch (_context2.prev = _context2.next) {
838
850
  case 0:
839
851
  onError = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : function () {};
840
- customer = input.customer, config = input.config, parser = input.parser, workflow = input.workflow, generator = input.generator, transformer = input.transformer, idGenerator = input.idGenerator, _input$progress = input.progress, progress = _input$progress === void 0 ? function (message, level, type, payload) {} : _input$progress, messageBefore = input.message, contextBefore = input.context, messagesBefore = input.messages, conversationBefore = input.conversation;
852
+ customer = input.customer, config = input.config, parser = input.parser, contextualizer = input.contextualizer, workflow = input.workflow, generator = input.generator, transformer = input.transformer, idGenerator = input.idGenerator, _input$progress = input.progress, progress = _input$progress === void 0 ? function (message, level, type, payload) {} : _input$progress, messageBefore = input.message, contextBefore = input.context, messagesBefore = input.messages, conversationBefore = input.conversation;
841
853
  conversation = input.conversation, messages = input.messages, context = input.context, message = input.message; // Storing post process events here
842
854
  followup = [];
843
855
  entityContextUpsert = []; // 0. Setup Helpers
@@ -1064,9 +1076,31 @@ var Spirits = {
1064
1076
  })));
1065
1077
  }
1066
1078
 
1067
- // 3. Run the workflow
1068
- progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
1079
+ // 3. Run the contextualizer
1080
+ progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system');
1069
1081
  _context2.next = 47;
1082
+ return contextualizer({
1083
+ conversation: conversation,
1084
+ messages: messages
1085
+ });
1086
+ case 47:
1087
+ newContextMessages = _context2.sent;
1088
+ _iterator = _createForOfIteratorHelper(newContextMessages);
1089
+ try {
1090
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1091
+ contextMessage = _step.value;
1092
+ messages.push(contextMessage);
1093
+ progress("Added context", 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
1094
+ }
1095
+
1096
+ // 4. Run the workflow
1097
+ } catch (err) {
1098
+ _iterator.e(err);
1099
+ } finally {
1100
+ _iterator.f();
1101
+ }
1102
+ progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
1103
+ _context2.next = 53;
1070
1104
  return workflow({
1071
1105
  messages: messages,
1072
1106
  conversation: conversation,
@@ -1095,7 +1129,7 @@ var Spirits = {
1095
1129
  return accumulator;
1096
1130
  }, []);
1097
1131
  });
1098
- case 47:
1132
+ case 53:
1099
1133
  slots = _context2.sent;
1100
1134
  hasNoInstructions = slots.every(function (s) {
1101
1135
  return !s.instructions || Array.isArray(s.instructions) && s.instructions.length === 0;
@@ -1121,21 +1155,21 @@ var Spirits = {
1121
1155
  }
1122
1156
  resettedIntent = false;
1123
1157
  /** @type {Array<string> | undefined} */
1124
- _iterator = _createForOfIteratorHelper(slots);
1125
- _context2.prev = 55;
1126
- _iterator.s();
1127
- case 57:
1128
- if ((_step = _iterator.n()).done) {
1129
- _context2.next = 128;
1158
+ _iterator2 = _createForOfIteratorHelper(slots);
1159
+ _context2.prev = 61;
1160
+ _iterator2.s();
1161
+ case 63:
1162
+ if ((_step2 = _iterator2.n()).done) {
1163
+ _context2.next = 134;
1130
1164
  break;
1131
1165
  }
1132
- _step$value = _step.value, forward = _step$value.forward, forwardNote = _step$value.forwardNote, instructions = _step$value.instructions, removeInstructions = _step$value.removeInstructions, manualMessage = _step$value.message, scheduled = _step$value.scheduled, resetIntent = _step$value.resetIntent, secondsDelay = _step$value.secondsDelay, contextUpsert = _step$value.contextUpsert, anticipate = _step$value.anticipate, slotFollowup = _step$value.followup, slotEntityContextUpsert = _step$value.entityContextUpsert, tasks = _step$value.tasks;
1166
+ _step2$value = _step2.value, forward = _step2$value.forward, forwardNote = _step2$value.forwardNote, instructions = _step2$value.instructions, removeInstructions = _step2$value.removeInstructions, manualMessage = _step2$value.message, scheduled = _step2$value.scheduled, resetIntent = _step2$value.resetIntent, secondsDelay = _step2$value.secondsDelay, contextUpsert = _step2$value.contextUpsert, anticipate = _step2$value.anticipate, slotFollowup = _step2$value.followup, slotEntityContextUpsert = _step2$value.entityContextUpsert, tasks = _step2$value.tasks;
1133
1167
  if (!anticipate) {
1134
- _context2.next = 72;
1168
+ _context2.next = 78;
1135
1169
  break;
1136
1170
  }
1137
1171
  if (!Array.isArray(anticipate)) {
1138
- _context2.next = 67;
1172
+ _context2.next = 73;
1139
1173
  break;
1140
1174
  }
1141
1175
  // 'literal' anticipation
@@ -1155,11 +1189,11 @@ var Spirits = {
1155
1189
  slots: _slots,
1156
1190
  map: map
1157
1191
  });
1158
- _context2.next = 72;
1192
+ _context2.next = 78;
1159
1193
  break;
1160
- case 67:
1194
+ case 73:
1161
1195
  if (!('yes' in anticipate && 'no' in anticipate && 'did' in anticipate)) {
1162
- _context2.next = 71;
1196
+ _context2.next = 77;
1163
1197
  break;
1164
1198
  }
1165
1199
  // "did" anticipation
@@ -1171,11 +1205,11 @@ var Spirits = {
1171
1205
  },
1172
1206
  did: anticipate.did
1173
1207
  });
1174
- _context2.next = 72;
1208
+ _context2.next = 78;
1175
1209
  break;
1176
- case 71:
1210
+ case 77:
1177
1211
  throw new Error("Invalid anticipate payload \"".concat(JSON.stringify(anticipate), "\""));
1178
- case 72:
1212
+ case 78:
1179
1213
  // tasks from auto/manual ingress to execute
1180
1214
  if (!!tasks && Array.isArray(tasks) && !!tasks.length) {
1181
1215
  if (!_tasks) _tasks = [];
@@ -1231,25 +1265,25 @@ var Spirits = {
1231
1265
 
1232
1266
  // Insert instructions context
1233
1267
  if (!instructions) {
1234
- _context2.next = 91;
1268
+ _context2.next = 97;
1235
1269
  break;
1236
1270
  }
1237
1271
  if (!(typeof instructions === 'string')) {
1238
- _context2.next = 81;
1272
+ _context2.next = 87;
1239
1273
  break;
1240
1274
  }
1241
1275
  addInstruction(instructions, previousLockAttempt);
1242
- _context2.next = 91;
1276
+ _context2.next = 97;
1243
1277
  break;
1244
- case 81:
1278
+ case 87:
1245
1279
  if (!Array.isArray(instructions)) {
1246
- _context2.next = 86;
1280
+ _context2.next = 92;
1247
1281
  break;
1248
1282
  }
1249
- _iterator4 = _createForOfIteratorHelper(instructions);
1283
+ _iterator5 = _createForOfIteratorHelper(instructions);
1250
1284
  try {
1251
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
1252
- instruction = _step4.value;
1285
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1286
+ instruction = _step5.value;
1253
1287
  if (typeof instruction === 'string') {
1254
1288
  addInstruction(instruction, previousLockAttempt);
1255
1289
  } else {
@@ -1257,35 +1291,35 @@ var Spirits = {
1257
1291
  }
1258
1292
  }
1259
1293
  } catch (err) {
1260
- _iterator4.e(err);
1294
+ _iterator5.e(err);
1261
1295
  } finally {
1262
- _iterator4.f();
1296
+ _iterator5.f();
1263
1297
  }
1264
- _context2.next = 91;
1298
+ _context2.next = 97;
1265
1299
  break;
1266
- case 86:
1300
+ case 92:
1267
1301
  if (!(_typeof(instructions) === 'object' && 'content' in instructions)) {
1268
- _context2.next = 90;
1302
+ _context2.next = 96;
1269
1303
  break;
1270
1304
  }
1271
1305
  addInstruction(instructions.content, previousLockAttempt, instructions.id);
1272
- _context2.next = 91;
1306
+ _context2.next = 97;
1273
1307
  break;
1274
- case 90:
1308
+ case 96:
1275
1309
  throw new Error("SpiritsError: instructions must be a string or array or {content: \"<instruction>\"}, got: ".concat(JSON.stringify(instructions)));
1276
- case 91:
1310
+ case 97:
1277
1311
  if (!removeInstructions) {
1278
- _context2.next = 108;
1312
+ _context2.next = 114;
1279
1313
  break;
1280
1314
  }
1281
- _iterator5 = _createForOfIteratorHelper(removeInstructions);
1282
- _context2.prev = 93;
1315
+ _iterator6 = _createForOfIteratorHelper(removeInstructions);
1316
+ _context2.prev = 99;
1283
1317
  _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
1284
1318
  var instructionId, index;
1285
1319
  return _regeneratorRuntime().wrap(function _loop$(_context) {
1286
1320
  while (1) switch (_context.prev = _context.next) {
1287
1321
  case 0:
1288
- instructionId = _step5.value;
1322
+ instructionId = _step6.value;
1289
1323
  index = messages.findIndex(function (m) {
1290
1324
  return m.id === instructionId;
1291
1325
  });
@@ -1303,33 +1337,33 @@ var Spirits = {
1303
1337
  }
1304
1338
  }, _loop);
1305
1339
  });
1306
- _iterator5.s();
1307
- case 96:
1308
- if ((_step5 = _iterator5.n()).done) {
1309
- _context2.next = 100;
1340
+ _iterator6.s();
1341
+ case 102:
1342
+ if ((_step6 = _iterator6.n()).done) {
1343
+ _context2.next = 106;
1310
1344
  break;
1311
1345
  }
1312
- return _context2.delegateYield(_loop(), "t0", 98);
1313
- case 98:
1314
- _context2.next = 96;
1346
+ return _context2.delegateYield(_loop(), "t0", 104);
1347
+ case 104:
1348
+ _context2.next = 102;
1315
1349
  break;
1316
- case 100:
1317
- _context2.next = 105;
1350
+ case 106:
1351
+ _context2.next = 111;
1318
1352
  break;
1319
- case 102:
1320
- _context2.prev = 102;
1321
- _context2.t1 = _context2["catch"](93);
1322
- _iterator5.e(_context2.t1);
1323
- case 105:
1324
- _context2.prev = 105;
1325
- _iterator5.f();
1326
- return _context2.finish(105);
1327
1353
  case 108:
1354
+ _context2.prev = 108;
1355
+ _context2.t1 = _context2["catch"](99);
1356
+ _iterator6.e(_context2.t1);
1357
+ case 111:
1358
+ _context2.prev = 111;
1359
+ _iterator6.f();
1360
+ return _context2.finish(111);
1361
+ case 114:
1328
1362
  if (!manualMessage) {
1329
- _context2.next = 124;
1363
+ _context2.next = 130;
1330
1364
  break;
1331
1365
  }
1332
- /** @type {import('@scout9/app').Message} */
1366
+ /** @type {import('@scout9/admin').Message} */
1333
1367
  manualMessageObj = {
1334
1368
  id: idGenerator('persona'),
1335
1369
  role: 'agent',
@@ -1338,25 +1372,25 @@ var Spirits = {
1338
1372
  time: new Date().toISOString()
1339
1373
  };
1340
1374
  if (!(_typeof(manualMessage) === 'object')) {
1341
- _context2.next = 116;
1375
+ _context2.next = 122;
1342
1376
  break;
1343
1377
  }
1344
1378
  Object.assign(manualMessageObj, manualMessage);
1345
1379
  manualMessageObj.role = 'agent';
1346
1380
  manualMessageObj.time = new Date().toISOString();
1347
- _context2.next = 121;
1381
+ _context2.next = 127;
1348
1382
  break;
1349
- case 116:
1383
+ case 122:
1350
1384
  if (!(typeof manualMessage === 'string')) {
1351
- _context2.next = 120;
1385
+ _context2.next = 126;
1352
1386
  break;
1353
1387
  }
1354
1388
  manualMessageObj.content = manualMessage;
1355
- _context2.next = 121;
1389
+ _context2.next = 127;
1356
1390
  break;
1357
- case 120:
1391
+ case 126:
1358
1392
  throw new Error('Manual message must be of type "string" or "DirectMessage"');
1359
- case 121:
1393
+ case 127:
1360
1394
  if (scheduled) {
1361
1395
  manualMessageObj.time = new Date(scheduled * 1000).toISOString();
1362
1396
  manualMessageObj.scheduled = manualMessageObj.time;
@@ -1368,7 +1402,7 @@ var Spirits = {
1368
1402
  }
1369
1403
  messages.push(manualMessageObj);
1370
1404
  progress('Added manual message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
1371
- case 124:
1405
+ case 130:
1372
1406
  if (contextUpsert) {
1373
1407
  context = updateContext(context, contextUpsert);
1374
1408
  progress('Upserted context', 'info', 'UPDATE_CONTEXT', contextUpsert);
@@ -1376,21 +1410,21 @@ var Spirits = {
1376
1410
  if (resetIntent) {
1377
1411
  resettedIntent = true;
1378
1412
  }
1379
- case 126:
1380
- _context2.next = 57;
1413
+ case 132:
1414
+ _context2.next = 63;
1381
1415
  break;
1382
- case 128:
1383
- _context2.next = 133;
1416
+ case 134:
1417
+ _context2.next = 139;
1384
1418
  break;
1385
- case 130:
1386
- _context2.prev = 130;
1387
- _context2.t2 = _context2["catch"](55);
1388
- _iterator.e(_context2.t2);
1389
- case 133:
1390
- _context2.prev = 133;
1391
- _iterator.f();
1392
- return _context2.finish(133);
1393
1419
  case 136:
1420
+ _context2.prev = 136;
1421
+ _context2.t2 = _context2["catch"](61);
1422
+ _iterator2.e(_context2.t2);
1423
+ case 139:
1424
+ _context2.prev = 139;
1425
+ _iterator2.f();
1426
+ return _context2.finish(139);
1427
+ case 142:
1394
1428
  if (resettedIntent && !_forward) {
1395
1429
  conversation.intent = null;
1396
1430
  conversation.intentScore = null;
@@ -1406,17 +1440,17 @@ var Spirits = {
1406
1440
  });
1407
1441
  }
1408
1442
 
1409
- // 4. Generate response
1443
+ // 5. Generate response
1410
1444
  // If conversation previously locked, don't generate
1411
1445
  if (input.conversation.locked) {
1412
- _context2.next = 188;
1446
+ _context2.next = 194;
1413
1447
  break;
1414
1448
  }
1415
1449
  if (!((!conversation.locked || !hasNoInstructions) && !!hasNoCustomMessage)) {
1416
- _context2.next = 154;
1450
+ _context2.next = 160;
1417
1451
  break;
1418
1452
  }
1419
- _context2.prev = 139;
1453
+ _context2.prev = 145;
1420
1454
  progress('Generating message', 'info', 'SET_PROCESSING', 'system');
1421
1455
 
1422
1456
  /** @type {import('@scout9/admin').GenerateRequestOneOf1} */
@@ -1430,9 +1464,9 @@ var Spirits = {
1430
1464
  if (!!_tasks && Array.isArray(_tasks) && !!_tasks.length) {
1431
1465
  generatorInput.tasks = _tasks;
1432
1466
  }
1433
- _context2.next = 145;
1467
+ _context2.next = 151;
1434
1468
  return generator(generatorInput);
1435
- case 145:
1469
+ case 151:
1436
1470
  generatorPayload = _context2.sent;
1437
1471
  if (!generatorPayload.send) {
1438
1472
  progress('Generated response', 'failed', undefined, {
@@ -1483,17 +1517,17 @@ var Spirits = {
1483
1517
  // Error should not have happened
1484
1518
  conversation = lockConversation(conversation, 'Duplicate message');
1485
1519
  } else {
1486
- _iterator2 = _createForOfIteratorHelper(addedMessages);
1520
+ _iterator3 = _createForOfIteratorHelper(addedMessages);
1487
1521
  try {
1488
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
1489
- newMessage = _step2.value;
1522
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1523
+ newMessage = _step3.value;
1490
1524
  messages.push(newMessage);
1491
1525
  progress('Added agent message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
1492
1526
  }
1493
1527
  } catch (err) {
1494
- _iterator2.e(err);
1528
+ _iterator3.e(err);
1495
1529
  } finally {
1496
- _iterator2.f();
1530
+ _iterator3.f();
1497
1531
  }
1498
1532
  }
1499
1533
 
@@ -1506,30 +1540,30 @@ var Spirits = {
1506
1540
  }
1507
1541
  }
1508
1542
  }
1509
- _context2.next = 154;
1543
+ _context2.next = 160;
1510
1544
  break;
1511
- case 149:
1512
- _context2.prev = 149;
1513
- _context2.t3 = _context2["catch"](139);
1545
+ case 155:
1546
+ _context2.prev = 155;
1547
+ _context2.t3 = _context2["catch"](145);
1514
1548
  onError(_context2.t3);
1515
1549
  console.error("Spirits: Locking conversation, error generating response: ".concat(_context2.t3.message));
1516
1550
  conversation = lockConversation(conversation, 'API: ' + _context2.t3.message);
1517
- case 154:
1551
+ case 160:
1518
1552
  if (!(messagesToTransform.length && transformer)) {
1519
- _context2.next = 187;
1553
+ _context2.next = 193;
1520
1554
  break;
1521
1555
  }
1522
- _context2.prev = 155;
1523
- _iterator3 = _createForOfIteratorHelper(messagesToTransform);
1524
- _context2.prev = 157;
1525
- _iterator3.s();
1526
- case 159:
1527
- if ((_step3 = _iterator3.n()).done) {
1528
- _context2.next = 170;
1556
+ _context2.prev = 161;
1557
+ _iterator4 = _createForOfIteratorHelper(messagesToTransform);
1558
+ _context2.prev = 163;
1559
+ _iterator4.s();
1560
+ case 165:
1561
+ if ((_step4 = _iterator4.n()).done) {
1562
+ _context2.next = 176;
1529
1563
  break;
1530
1564
  }
1531
- _step3.value;
1532
- _context2.next = 163;
1565
+ _step4.value;
1566
+ _context2.next = 169;
1533
1567
  return transformer({
1534
1568
  message: messagesToTransform,
1535
1569
  persona: persona,
@@ -1537,7 +1571,7 @@ var Spirits = {
1537
1571
  messages: messages,
1538
1572
  context: context
1539
1573
  });
1540
- case 163:
1574
+ case 169:
1541
1575
  transformResponse = _context2.sent;
1542
1576
  progress('Generated response', 'success', undefined, undefined);
1543
1577
  // Check if already had message
@@ -1557,37 +1591,37 @@ var Spirits = {
1557
1591
  });
1558
1592
  progress('Added agent message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
1559
1593
  }
1560
- case 168:
1561
- _context2.next = 159;
1594
+ case 174:
1595
+ _context2.next = 165;
1562
1596
  break;
1563
- case 170:
1564
- _context2.next = 175;
1597
+ case 176:
1598
+ _context2.next = 181;
1565
1599
  break;
1566
- case 172:
1567
- _context2.prev = 172;
1568
- _context2.t4 = _context2["catch"](157);
1569
- _iterator3.e(_context2.t4);
1570
- case 175:
1571
- _context2.prev = 175;
1572
- _iterator3.f();
1573
- return _context2.finish(175);
1574
1600
  case 178:
1575
- _context2.next = 185;
1601
+ _context2.prev = 178;
1602
+ _context2.t4 = _context2["catch"](163);
1603
+ _iterator4.e(_context2.t4);
1604
+ case 181:
1605
+ _context2.prev = 181;
1606
+ _iterator4.f();
1607
+ return _context2.finish(181);
1608
+ case 184:
1609
+ _context2.next = 191;
1576
1610
  break;
1577
- case 180:
1578
- _context2.prev = 180;
1579
- _context2.t5 = _context2["catch"](155);
1611
+ case 186:
1612
+ _context2.prev = 186;
1613
+ _context2.t5 = _context2["catch"](161);
1580
1614
  console.error("Locking conversation, error transforming response: ".concat(_context2.t5.message));
1581
1615
  conversation = lockConversation(conversation, 'API: ' + _context2.t5.message);
1582
1616
  onError(_context2.t5);
1583
- case 185:
1584
- _context2.next = 188;
1617
+ case 191:
1618
+ _context2.next = 194;
1585
1619
  break;
1586
- case 187:
1620
+ case 193:
1587
1621
  if (messagesToTransform.length) {
1588
1622
  console.warn("No transformer provided");
1589
1623
  }
1590
- case 188:
1624
+ case 194:
1591
1625
  progress('Parsing message', 'info', 'SET_PROCESSING', null);
1592
1626
  return _context2.abrupt("return", {
1593
1627
  conversation: {
@@ -1611,11 +1645,11 @@ var Spirits = {
1611
1645
  followup: followup,
1612
1646
  entityContextUpsert: entityContextUpsert
1613
1647
  });
1614
- case 190:
1648
+ case 196:
1615
1649
  case "end":
1616
1650
  return _context2.stop();
1617
1651
  }
1618
- }, _callee, null, [[55, 130, 133, 136], [93, 102, 105, 108], [139, 149], [155, 180], [157, 172, 175, 178]]);
1652
+ }, _callee, null, [[61, 136, 139, 142], [99, 108, 111, 114], [145, 155], [161, 186], [163, 178, 181, 184]]);
1619
1653
  }));
1620
1654
  function customer(_x) {
1621
1655
  return _customer.apply(this, arguments);
package/dist/spirits.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var spirits = require("./spirits-8325bcf4.cjs");
5
+ var spirits = require("./spirits-6abaf567.cjs");
6
6
 
7
7
 
8
8
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dev = require("./dev-6ed916b0.cjs");
6
- require("./spirits-8325bcf4.cjs");
5
+ var dev = require("./dev-0102b73f.cjs");
6
+ require("./spirits-6abaf567.cjs");
7
7
  require('util');
8
8
  require('stream');
9
9
  require('path');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scout9/app",
3
- "version": "1.0.0-alpha.0.8.1",
3
+ "version": "1.0.0-alpha.0.8.3",
4
4
  "description": "Build and deploy your Scout9 app for SMS auto replies",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -15,8 +15,8 @@
15
15
  * @typedef {Object} ConversationData
16
16
  * @property {import('@scout9/app').Scout9ProjectBuildConfig} config - used to define generation and extract persona metadata
17
17
  * @property {import('@scout9/app').Conversation} conversation
18
- * @property {Array<import('@scout9/app').Message>} messages
19
- * @property {import('@scout9/app').Message} message - the message sent by the customer (should exist in messages)
18
+ * @property {Array<import('@scout9/admin').Message>} messages
19
+ * @property {import('@scout9/admin').Message} message - the message sent by the customer (should exist in messages)
20
20
  * @property {import('@scout9/app').Customer} customer
21
21
  * @property {import('@scout9/app').ConversationProgress} progress - progress checklist for manual/auto ingress workflows
22
22
  * @property {any} context - event context
@@ -24,16 +24,16 @@
24
24
 
25
25
  /**
26
26
  * @typedef {Object} ParseOutput
27
- * @property {Array<import('@scout9/app').Message>} messages
27
+ * @property {Array<import('@scout9/admin').Message>} messages
28
28
  * @property {import('@scout9/app').Conversation} conversation
29
- * @property {import('@scout9/app').Message} message
29
+ * @property {import('@scout9/admin').Message} message
30
30
  * @property {any} context
31
31
  */
32
32
 
33
33
  /**
34
34
  * @typedef {Object} WorkflowOutput
35
35
  * @property {Array<import('@scout9/app').WorkflowResponseSlot>} slots
36
- * @property {Array<import('@scout9/app').Message>} messages
36
+ * @property {Array<import('@scout9/admin').Message>} messages
37
37
  * @property {import('@scout9/app').Conversation} conversation
38
38
  * @property {any} context
39
39
  */
@@ -41,7 +41,7 @@
41
41
  /**
42
42
  * @typedef {Object} GenerateOutput
43
43
  * @property {import('@scout9/admin').GenerateResponse | undefined} generate
44
- * @property {Array<import('@scout9/app').Message>} messages
44
+ * @property {Array<import('@scout9/admin').Message>} messages
45
45
  * @property {import('@scout9/app').Conversation} conversation
46
46
  * @property {any} context
47
47
  */
@@ -53,6 +53,12 @@
53
53
  * @returns {Promise<import('@scout9/admin').ParseResponse>}
54
54
  */
55
55
 
56
+ /**
57
+ * @callback ContextualizerFun
58
+ * @param {Pick<import('@scout9/app').WorkflowEvent, 'messages' | 'conversation'>} args - message to send
59
+ * @returns {Promise<import('@scout9/app').WorkflowEvent['messages']>}
60
+ */
61
+
56
62
  /**
57
63
  * @callback WorkflowFun
58
64
  * @param {import('@scout9/app').WorkflowEvent} event - conversation data
@@ -73,7 +79,7 @@
73
79
 
74
80
  /**
75
81
  * @callback IdGeneratorFun
76
- * @param {import('@scout9/app').Message['role']} prefix
82
+ * @param {import('@scout9/admin').Message['role']} prefix
77
83
  * @returns {string}
78
84
  */
79
85
 
@@ -89,6 +95,7 @@
89
95
  /**
90
96
  * @typedef {Object} CustomerSpiritCallbacks
91
97
  * @property {ParseFun} parser
98
+ * @property {ContextualizerFun} contextualizer
92
99
  * @property {WorkflowFun} workflow
93
100
  * @property {GenerateFun} generator
94
101
  * @property {TransformerFun} transformer
@@ -103,9 +110,9 @@
103
110
  * forwardNote?: string;
104
111
  * forward?: import('@scout9/app').WorkflowResponseSlot['forward'];
105
112
  * })} conversation
106
- * @property {Change<Array<import('@scout9/app').Message>>} messages
113
+ * @property {Change<Array<import('@scout9/admin').Message>>} messages
107
114
  * @property {Change<any>} context
108
- * @property {Change<import('@scout9/app').Message>} message
115
+ * @property {Change<import('@scout9/admin').Message>} message
109
116
  * @property {Array<import('@scout9/app').Followup>} followup
110
117
  * @property {Array<import('@scout9/app').EntityContextUpsert>} entityContextUpsert
111
118
  */
@@ -123,6 +130,7 @@ export const Spirits = {
123
130
  customer,
124
131
  config,
125
132
  parser,
133
+ contextualizer,
126
134
  workflow,
127
135
  generator,
128
136
  transformer,
@@ -352,7 +360,15 @@ export const Spirits = {
352
360
  })));
353
361
  }
354
362
 
355
- // 3. Run the workflow
363
+ // 3. Run the contextualizer
364
+ progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system')
365
+ const newContextMessages = await contextualizer({conversation, messages});
366
+ for (const contextMessage of newContextMessages) {
367
+ messages.push(contextMessage);
368
+ progress(`Added context`, 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
369
+ }
370
+
371
+ // 4. Run the workflow
356
372
  progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
357
373
 
358
374
  const slots = await workflow({
@@ -543,7 +559,7 @@ export const Spirits = {
543
559
 
544
560
  if (manualMessage) {
545
561
 
546
- /** @type {import('@scout9/app').Message} */
562
+ /** @type {import('@scout9/admin').Message} */
547
563
  let manualMessageObj = {
548
564
  id: idGenerator('persona'),
549
565
  role: 'agent', // @TODO switch role to persona
@@ -598,7 +614,7 @@ export const Spirits = {
598
614
  );
599
615
  }
600
616
 
601
- // 4. Generate response
617
+ // 5. Generate response
602
618
  // If conversation previously locked, don't generate
603
619
  if (!input.conversation.locked) {
604
620
  // If conversation is newly locked, don't generate, unless instructions were provided and no custom messages were provided
package/types/index.d.ts CHANGED
@@ -930,11 +930,11 @@ declare module '@scout9/app/spirits' {
930
930
  */
931
931
  config: any;
932
932
  conversation: any;
933
- messages: Array<any>;
933
+ messages: Array<import('@scout9/admin').Message>;
934
934
  /**
935
935
  * - the message sent by the customer (should exist in messages)
936
936
  */
937
- message: any;
937
+ message: import('@scout9/admin').Message;
938
938
  customer: any;
939
939
  /**
940
940
  * - progress checklist for manual/auto ingress workflows
@@ -946,31 +946,33 @@ declare module '@scout9/app/spirits' {
946
946
  context: any;
947
947
  };
948
948
  export type ParseOutput = {
949
- messages: Array<any>;
949
+ messages: Array<import('@scout9/admin').Message>;
950
950
  conversation: any;
951
- message: any;
951
+ message: import('@scout9/admin').Message;
952
952
  context: any;
953
953
  };
954
954
  export type WorkflowOutput = {
955
955
  slots: Array<any>;
956
- messages: Array<any>;
956
+ messages: Array<import('@scout9/admin').Message>;
957
957
  conversation: any;
958
958
  context: any;
959
959
  };
960
960
  export type GenerateOutput = {
961
961
  generate: import('@scout9/admin').GenerateResponse | undefined;
962
- messages: Array<any>;
962
+ messages: Array<import('@scout9/admin').Message>;
963
963
  conversation: any;
964
964
  context: any;
965
965
  };
966
966
  export type ParseFun = (message: string, language: string | undefined) => Promise<import('@scout9/admin').ParseResponse>;
967
+ export type ContextualizerFun = (args: Pick<any, 'messages' | 'conversation'>) => Promise<any['messages']>;
967
968
  export type WorkflowFun = (event: any) => Promise<any>;
968
969
  export type GenerateFun = (data: import('@scout9/admin').GenerateRequestOneOf1) => Promise<import('@scout9/admin').GenerateResponse>;
969
970
  export type TransformerFun = (data: import('@scout9/admin').PmtTransformRequest) => Promise<import('@scout9/admin').PmtTransformResponse>;
970
- export type IdGeneratorFun = (prefix: any) => string;
971
+ export type IdGeneratorFun = (prefix: import('@scout9/admin').Message['role']) => string;
971
972
  export type StatusCallback = (message: string, level?: 'info' | 'warn' | 'error' | 'success' | undefined, type?: string | undefined, payload?: any | undefined) => void;
972
973
  export type CustomerSpiritCallbacks = {
973
974
  parser: ParseFun;
975
+ contextualizer: ContextualizerFun;
974
976
  workflow: WorkflowFun;
975
977
  generator: GenerateFun;
976
978
  transformer: TransformerFun;
@@ -982,9 +984,9 @@ declare module '@scout9/app/spirits' {
982
984
  forwardNote?: string;
983
985
  forward?: any['forward'];
984
986
  });
985
- messages: Change<Array<any>>;
987
+ messages: Change<Array<import('@scout9/admin').Message>>;
986
988
  context: Change<any>;
987
- message: Change<any>;
989
+ message: Change<import('@scout9/admin').Message>;
988
990
  followup: Array<any>;
989
991
  entityContextUpsert: Array<any>;
990
992
  };
@@ -167,5 +167,5 @@
167
167
  null,
168
168
  null
169
169
  ],
170
- "mappings": ";;;;;kBAkBgBA,GAAGA;;;;;;;kBAYHC,IAAIA;;;;kBAUJC,SAASA;;;;;;;;;;;eAYZC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAoDbC,QAAQA;;;;;;;;;eAaRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;eAyBZC,OAAOA;;;;;;;;;;;;;;;;;eAkBPC,KAAKA;;;;cAINC,eAAeA;;;;;;;;;cASfC,eAAeA;;;;;;;;;;;;;cAafC,YAAYA;;;;;;;cAOZC,cAAcA;;;;;;;;;;;;;;;;cAgBdC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2EPC,GAAGA;;;;;;;kBAUHC,IAAIA;;cAERC,8BAA8BA;;;;;cAK9BC,mBAAmBA;;cAEnBC,eAAeA;cACfC,aAAaA;;;;;;;;;;;;;;;;;;;kBAuBTC,OAAOA;;cAEXC,KAAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2CLC,kBAAkBA;;cAElBC,mBAAmBA;;cAEnBC,MAAMA;;cAENC,cAAcA;;cAEdC,sBAAsBA;;;;;;;;;;;;;;;;cAgBtBC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoCZC,aAAaA;;cAEbC,QAAQA;;;;;;;;;;;;;;;;;;cAkBRC,gBAAgBA;;;;;;;;;cAShBC,sBAAsBA;;;;;;;cAOtBC,UAAUA;;;;;;;;;;;;;;;cAeVC,uBAAuBA;;;cAGvBC,uBAAuBA;;;;;cAKvBC,uCAAuCA;;;;;;;;;cASvCC,8BAA8BA;;;;;;;;;;;;cAY9BC,uBAAuBA;;;;;;;;;;;;;;;;;;;;;;;cAuBvBC,mBAAmBA;;cAEnBC,sBAAsBA;;;;;;;;;cAStBC,8BAA8BA;;;;;;;cAO9BC,yBAAyBA;;cAEzBC,gCAAgCA;;;cAGhCC,iBAAiBA;;;;;;;;cAQjBC,WAAWA;;cAEXC,YAAYA;;;;;;;;;cASZC,mBAAmBA;;;;;cAKnBC,wBAAwBA;;cAExBC,QAAQA;;;;;;cAMRC,mBAAmBA;;;;;;;;;;;cAWnBC,OAAOA;;;;;;;cAOPC,mBAAmBA;;;;;;;;;;;cAWnBC,WAAWA;;;;;;cAMXC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BTC,OAAOA;;cAEPC,oBAAoBA;;cAEpBC,OAAOA;;cAEPC,qBAAqBA;;cAErBC,QAAQA;;cAERC,qBAAqBA;;;;;;cAMrBC,oBAAoBA;;;;;cAKpBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkCnBC,wBAAwBA;;;;;;;;;;;;;;;cAexBC,aAAaA;;;;;;;;;;;;;cAabC,aAAaA;;;;;;cAMbC,kBAAkBA;;;;cAIlBC,UAAUA;;cAEVC,aAAaA;;;;;cAKbC,wBAAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCxBC,oBAAoBA;;;;;;;;;;;;;;;;;;;;;;;;;cAyBpBC,gBAAgBA;;cAEhBC,gBAAgBA;;cAEhBC,iCAAiCA;;;;;;;cAOjCC,uBAAuBA;;cAEvBC,kCAAkCA;;;;;;;;;;;;;;cAclCC,sBAAsBA;;;;;;cAMtBC,WAAWA;;;;;;;;;;;;cAYXC,iBAAiBA;;cAEjBC,aAAaA;;;;;;;;;cASbC,cAAcA;;cAEdC,gBAAgBA;;;;iBCx2BfC,eAAeA;iBAWfC,kBAAkBA;iBAgBlBC,iBAAiBA;iBAkBjBC,sBAAsBA;iBAmBtBC,uBAAuBA;;;;cCvDvBC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCLVC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCNnBC,aAAaA;;;;;;;;;;cAKbC,cAAcA;;;;;;;;;;cCJdxE,mBAAmBA;cAanByE,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAU5BC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC8BlBC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCzBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3F9BC,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;cAyC5BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAI1BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEzBC,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAE3BC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEZC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cClEdC,aAAaA;;;;;;;;;;;;;cAWbC,uBAAuBA;;;;;;;;;;;;;cAYvBjD,iCAAiCA;;;;;;;;;;;;;;;;;;;;cAWjCC,uBAAuBA;;;;;;;;;;;;;;;;;;;cAavBC,kCAAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBlCgD,iBAAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cASjBC,kBAAkBA;;;;;;;;;;;;;;;;cAUlBC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAUdC,2BAA2BA;;;;;;;;;;cAU3BC,4BAA4BA;;;;;;;;;;cAE5BC,yBAAyBA;;;;;;;;;;;;;cAMzBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoBnBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKnBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqC9BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQzBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqB1BC,sBAAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKtBC,sBAAsBA"
170
+ "mappings": "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C8BlBC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCzBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3F9BC,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;cAyC5BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoBzBC,+BAA+BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiB/BC,oCAAoCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAYpCC,sCAAsCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCjFtCC,iBAAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAIjBC,sBAAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEtBC,oBAAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEpBC,qBAAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOrBC,oBAAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOpBC,sBAAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAMtBC,uBAAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCvCvBC,oCAAoCA;;;;;;;;;;cAKpCC,oBAAoBA;;;;;;;;;;cCJpBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;cAWnBC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCVbC,mBAAmBA;cAEnBC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoBdC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiCXC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEbC,wBAAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAIxBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAI1BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEzBC,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAE3BC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEZC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cClEdC,aAAaA;;;;;;;;;;;;;cAWbC,uBAAuBA;;;;;;;;;;;;;cAYvBjD,iCAAiCA;;;;;;;;;;;;;;;;;;;;cAWjCC,uBAAuBA;;;;;;;;;;;;;;;;;;;cAavBC,kCAAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBlCgD,iBAAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cASjBC,kBAAkBA;;;;;;;;;;;;;;;;cAUlBC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAUdC,2BAA2BA;;;;;;;;;;cAU3BC,4BAA4BA;;;;;;;;;;cAE5BC,yBAAyBA;;;;;;;;;;;;;cAMzBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoBnBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKnBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqC9BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQzBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqB1BC,sBAAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKtBC,sBAAsBA"
171
171
  }