@serve.zone/dcrouter 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -38,6 +38,36 @@ import * as appstate from '../appstate.js';
38
38
  import * as interfaces from '../../dist_ts_interfaces/index.js';
39
39
  import { viewHostCss } from './shared/css.js';
40
40
  import {} from '@design.estate/dees-catalog';
41
+ /**
42
+ * Toggle form field visibility based on checkbox states.
43
+ * Used in Create and Edit VPN client dialogs.
44
+ */
45
+ function setupFormVisibility(formEl) {
46
+ const show = 'flex'; // match dees-form's flex layout
47
+ const updateVisibility = async () => {
48
+ const data = await formEl.collectFormData();
49
+ const contentEl = formEl.closest('.content') || formEl.parentElement;
50
+ if (!contentEl)
51
+ return;
52
+ const hostIpGroup = contentEl.querySelector('.hostIpGroup');
53
+ const hostIpDetails = contentEl.querySelector('.hostIpDetails');
54
+ const staticIpGroup = contentEl.querySelector('.staticIpGroup');
55
+ const vlanIdGroup = contentEl.querySelector('.vlanIdGroup');
56
+ const aclGroup = contentEl.querySelector('.aclGroup');
57
+ if (hostIpGroup)
58
+ hostIpGroup.style.display = data.forceDestinationSmartproxy ? 'none' : show;
59
+ if (hostIpDetails)
60
+ hostIpDetails.style.display = data.useHostIp ? show : 'none';
61
+ if (staticIpGroup)
62
+ staticIpGroup.style.display = data.useDhcp ? 'none' : show;
63
+ if (vlanIdGroup)
64
+ vlanIdGroup.style.display = data.forceVlan ? show : 'none';
65
+ if (aclGroup)
66
+ aclGroup.style.display = data.allowAdditionalAcls ? show : 'none';
67
+ };
68
+ formEl.changeSubject.subscribe(() => updateVisibility());
69
+ updateVisibility();
70
+ }
41
71
  let OpsViewVpn = (() => {
42
72
  let _classDecorators = [customElement('ops-view-vpn')];
43
73
  let _classDescriptor;
@@ -317,9 +347,20 @@ let OpsViewVpn = (() => {
317
347
  else {
318
348
  statusHtml = html `<span class="statusBadge enabled" style="background: ${cssManager.bdTheme('#eff6ff', '#172554')}; color: ${cssManager.bdTheme('#1e40af', '#60a5fa')};">offline</span>`;
319
349
  }
350
+ let routingHtml;
351
+ if (client.forceDestinationSmartproxy !== false) {
352
+ routingHtml = html `<span class="statusBadge enabled">SmartProxy</span>`;
353
+ }
354
+ else if (client.useHostIp) {
355
+ routingHtml = html `<span class="statusBadge" style="background: ${cssManager.bdTheme('#f3e8ff', '#3b0764')}; color: ${cssManager.bdTheme('#7c3aed', '#c084fc')};">Host IP</span>`;
356
+ }
357
+ else {
358
+ routingHtml = html `<span class="statusBadge" style="background: ${cssManager.bdTheme('#eff6ff', '#172554')}; color: ${cssManager.bdTheme('#1e40af', '#60a5fa')};">Direct</span>`;
359
+ }
320
360
  return {
321
361
  'Client ID': client.clientId,
322
362
  'Status': statusHtml,
363
+ 'Routing': routingHtml,
323
364
  'VPN IP': client.assignedIp || '-',
324
365
  'Tags': client.serverDefinedClientTags?.length
325
366
  ? html `${client.serverDefinedClientTags.map(t => html `<span class="tagBadge">${t}</span>`)}`
@@ -335,13 +376,32 @@ let OpsViewVpn = (() => {
335
376
  type: ['header'],
336
377
  actionFunc: async () => {
337
378
  const { DeesModal } = await import('@design.estate/dees-catalog');
338
- await DeesModal.createAndShow({
379
+ const createModal = await DeesModal.createAndShow({
339
380
  heading: 'Create VPN Client',
340
381
  content: html `
341
382
  <dees-form>
342
383
  <dees-input-text .key=${'clientId'} .label=${'Client ID'} .required=${true}></dees-input-text>
343
384
  <dees-input-text .key=${'description'} .label=${'Description'}></dees-input-text>
344
385
  <dees-input-text .key=${'tags'} .label=${'Server-Defined Tags (comma-separated)'}></dees-input-text>
386
+ <dees-input-checkbox .key=${'forceDestinationSmartproxy'} .label=${'Force traffic through SmartProxy'} .value=${true}></dees-input-checkbox>
387
+ <div class="hostIpGroup" style="display: none; flex-direction: column; gap: 16px;">
388
+ <dees-input-checkbox .key=${'useHostIp'} .label=${'Get Host IP'} .value=${false}></dees-input-checkbox>
389
+ <div class="hostIpDetails" style="display: none; flex-direction: column; gap: 16px;">
390
+ <dees-input-checkbox .key=${'useDhcp'} .label=${'Get IP through DHCP'} .value=${false}></dees-input-checkbox>
391
+ <div class="staticIpGroup" style="display: flex; flex-direction: column; gap: 16px;">
392
+ <dees-input-text .key=${'staticIp'} .label=${'Static IP'}></dees-input-text>
393
+ </div>
394
+ <dees-input-checkbox .key=${'forceVlan'} .label=${'Force VLAN'} .value=${false}></dees-input-checkbox>
395
+ <div class="vlanIdGroup" style="display: none; flex-direction: column; gap: 16px;">
396
+ <dees-input-text .key=${'vlanId'} .label=${'VLAN ID'}></dees-input-text>
397
+ </div>
398
+ </div>
399
+ </div>
400
+ <dees-input-checkbox .key=${'allowAdditionalAcls'} .label=${'Allow additional ACLs'} .value=${false}></dees-input-checkbox>
401
+ <div class="aclGroup" style="display: none; flex-direction: column; gap: 16px;">
402
+ <dees-input-text .key=${'destinationAllowList'} .label=${'Destination Allow List (comma-separated IPs/CIDRs)'}></dees-input-text>
403
+ <dees-input-text .key=${'destinationBlockList'} .label=${'Destination Block List (comma-separated IPs/CIDRs)'}></dees-input-text>
404
+ </div>
345
405
  </dees-form>
346
406
  `,
347
407
  menuOptions: [
@@ -363,16 +423,44 @@ let OpsViewVpn = (() => {
363
423
  const serverDefinedClientTags = data.tags
364
424
  ? data.tags.split(',').map((t) => t.trim()).filter(Boolean)
365
425
  : undefined;
426
+ // Apply conditional logic based on checkbox states
427
+ const forceSmartproxy = data.forceDestinationSmartproxy ?? true;
428
+ const useHostIp = !forceSmartproxy && (data.useHostIp ?? false);
429
+ const useDhcp = useHostIp && (data.useDhcp ?? false);
430
+ const staticIp = useHostIp && !useDhcp && data.staticIp ? data.staticIp : undefined;
431
+ const forceVlan = useHostIp && (data.forceVlan ?? false);
432
+ const vlanId = forceVlan && data.vlanId ? parseInt(data.vlanId, 10) : undefined;
433
+ const allowAcls = data.allowAdditionalAcls ?? false;
434
+ const destinationAllowList = allowAcls && data.destinationAllowList
435
+ ? data.destinationAllowList.split(',').map((s) => s.trim()).filter(Boolean)
436
+ : undefined;
437
+ const destinationBlockList = allowAcls && data.destinationBlockList
438
+ ? data.destinationBlockList.split(',').map((s) => s.trim()).filter(Boolean)
439
+ : undefined;
366
440
  await appstate.vpnStatePart.dispatchAction(appstate.createVpnClientAction, {
367
441
  clientId: data.clientId,
368
442
  description: data.description || undefined,
369
443
  serverDefinedClientTags,
444
+ forceDestinationSmartproxy: forceSmartproxy,
445
+ useHostIp: useHostIp || undefined,
446
+ useDhcp: useDhcp || undefined,
447
+ staticIp,
448
+ forceVlan: forceVlan || undefined,
449
+ vlanId,
450
+ destinationAllowList,
451
+ destinationBlockList,
370
452
  });
371
453
  await modalArg.destroy();
372
454
  },
373
455
  },
374
456
  ],
375
457
  });
458
+ // Setup conditional form visibility after modal renders
459
+ const createForm = createModal?.shadowRoot?.querySelector('.content')?.querySelector('dees-form');
460
+ if (createForm) {
461
+ await createForm.updateComplete;
462
+ setupFormVisibility(createForm);
463
+ }
376
464
  },
377
465
  },
378
466
  {
@@ -424,6 +512,13 @@ let OpsViewVpn = (() => {
424
512
  ` : ''}
425
513
  <div class="infoItem"><span class="infoLabel">Description</span><span class="infoValue">${client.description || '-'}</span></div>
426
514
  <div class="infoItem"><span class="infoLabel">Tags</span><span class="infoValue">${client.serverDefinedClientTags?.join(', ') || '-'}</span></div>
515
+ <div class="infoItem"><span class="infoLabel">Routing</span><span class="infoValue">${client.forceDestinationSmartproxy !== false ? 'SmartProxy' : client.useHostIp ? 'Host IP' : 'Direct'}</span></div>
516
+ ${client.useHostIp ? html `
517
+ <div class="infoItem"><span class="infoLabel">Host IP</span><span class="infoValue">${client.useDhcp ? 'DHCP' : client.staticIp ? `Static: ${client.staticIp}` : 'Not configured'}</span></div>
518
+ <div class="infoItem"><span class="infoLabel">VLAN</span><span class="infoValue">${client.forceVlan && client.vlanId != null ? `VLAN ${client.vlanId}` : 'No VLAN'}</span></div>
519
+ ` : ''}
520
+ <div class="infoItem"><span class="infoLabel">Allow List</span><span class="infoValue">${client.destinationAllowList?.length ? client.destinationAllowList.join(', ') : 'None'}</span></div>
521
+ <div class="infoItem"><span class="infoLabel">Block List</span><span class="infoValue">${client.destinationBlockList?.length ? client.destinationBlockList.join(', ') : 'None'}</span></div>
427
522
  <div class="infoItem"><span class="infoLabel">Created</span><span class="infoValue">${new Date(client.createdAt).toLocaleString()}</span></div>
428
523
  <div class="infoItem"><span class="infoLabel">Updated</span><span class="infoValue">${new Date(client.updatedAt).toLocaleString()}</span></div>
429
524
  </div>
@@ -575,12 +670,41 @@ let OpsViewVpn = (() => {
575
670
  const { DeesModal } = await import('@design.estate/dees-catalog');
576
671
  const currentDescription = client.description ?? '';
577
672
  const currentTags = client.serverDefinedClientTags?.join(', ') ?? '';
578
- DeesModal.createAndShow({
673
+ const currentForceSmartproxy = client.forceDestinationSmartproxy ?? true;
674
+ const currentUseHostIp = client.useHostIp ?? false;
675
+ const currentUseDhcp = client.useDhcp ?? false;
676
+ const currentStaticIp = client.staticIp ?? '';
677
+ const currentForceVlan = client.forceVlan ?? false;
678
+ const currentVlanId = client.vlanId != null ? String(client.vlanId) : '';
679
+ const currentAllowList = client.destinationAllowList?.join(', ') ?? '';
680
+ const currentBlockList = client.destinationBlockList?.join(', ') ?? '';
681
+ const currentAllowAcls = (client.destinationAllowList?.length ?? 0) > 0
682
+ || (client.destinationBlockList?.length ?? 0) > 0;
683
+ const editModal = await DeesModal.createAndShow({
579
684
  heading: `Edit: ${client.clientId}`,
580
685
  content: html `
581
686
  <dees-form>
582
687
  <dees-input-text .key=${'description'} .label=${'Description'} .value=${currentDescription}></dees-input-text>
583
688
  <dees-input-text .key=${'tags'} .label=${'Server-Defined Tags (comma-separated)'} .value=${currentTags}></dees-input-text>
689
+ <dees-input-checkbox .key=${'forceDestinationSmartproxy'} .label=${'Force traffic through SmartProxy'} .value=${currentForceSmartproxy}></dees-input-checkbox>
690
+ <div class="hostIpGroup" style="display: ${currentForceSmartproxy ? 'none' : 'flex'}; flex-direction: column; gap: 16px;">
691
+ <dees-input-checkbox .key=${'useHostIp'} .label=${'Get Host IP'} .value=${currentUseHostIp}></dees-input-checkbox>
692
+ <div class="hostIpDetails" style="display: ${currentUseHostIp ? 'flex' : 'none'}; flex-direction: column; gap: 16px;">
693
+ <dees-input-checkbox .key=${'useDhcp'} .label=${'Get IP through DHCP'} .value=${currentUseDhcp}></dees-input-checkbox>
694
+ <div class="staticIpGroup" style="display: ${currentUseDhcp ? 'none' : 'flex'}; flex-direction: column; gap: 16px;">
695
+ <dees-input-text .key=${'staticIp'} .label=${'Static IP'} .value=${currentStaticIp}></dees-input-text>
696
+ </div>
697
+ <dees-input-checkbox .key=${'forceVlan'} .label=${'Force VLAN'} .value=${currentForceVlan}></dees-input-checkbox>
698
+ <div class="vlanIdGroup" style="display: ${currentForceVlan ? 'flex' : 'none'}; flex-direction: column; gap: 16px;">
699
+ <dees-input-text .key=${'vlanId'} .label=${'VLAN ID'} .value=${currentVlanId}></dees-input-text>
700
+ </div>
701
+ </div>
702
+ </div>
703
+ <dees-input-checkbox .key=${'allowAdditionalAcls'} .label=${'Allow additional ACLs'} .value=${currentAllowAcls}></dees-input-checkbox>
704
+ <div class="aclGroup" style="display: ${currentAllowAcls ? 'flex' : 'none'}; flex-direction: column; gap: 16px;">
705
+ <dees-input-text .key=${'destinationAllowList'} .label=${'Destination Allow List (comma-separated IPs/CIDRs)'} .value=${currentAllowList}></dees-input-text>
706
+ <dees-input-text .key=${'destinationBlockList'} .label=${'Destination Block List (comma-separated IPs/CIDRs)'} .value=${currentBlockList}></dees-input-text>
707
+ </div>
584
708
  </dees-form>
585
709
  `,
586
710
  menuOptions: [
@@ -596,16 +720,44 @@ let OpsViewVpn = (() => {
596
720
  const serverDefinedClientTags = data.tags
597
721
  ? data.tags.split(',').map((t) => t.trim()).filter(Boolean)
598
722
  : [];
723
+ // Apply conditional logic based on checkbox states
724
+ const forceSmartproxy = data.forceDestinationSmartproxy ?? true;
725
+ const useHostIp = !forceSmartproxy && (data.useHostIp ?? false);
726
+ const useDhcp = useHostIp && (data.useDhcp ?? false);
727
+ const staticIp = useHostIp && !useDhcp && data.staticIp ? data.staticIp : undefined;
728
+ const forceVlan = useHostIp && (data.forceVlan ?? false);
729
+ const vlanId = forceVlan && data.vlanId ? parseInt(data.vlanId, 10) : undefined;
730
+ const allowAcls = data.allowAdditionalAcls ?? false;
731
+ const destinationAllowList = allowAcls && data.destinationAllowList
732
+ ? data.destinationAllowList.split(',').map((s) => s.trim()).filter(Boolean)
733
+ : [];
734
+ const destinationBlockList = allowAcls && data.destinationBlockList
735
+ ? data.destinationBlockList.split(',').map((s) => s.trim()).filter(Boolean)
736
+ : [];
599
737
  await appstate.vpnStatePart.dispatchAction(appstate.updateVpnClientAction, {
600
738
  clientId: client.clientId,
601
739
  description: data.description || undefined,
602
740
  serverDefinedClientTags,
741
+ forceDestinationSmartproxy: forceSmartproxy,
742
+ useHostIp: useHostIp || undefined,
743
+ useDhcp: useDhcp || undefined,
744
+ staticIp,
745
+ forceVlan: forceVlan || undefined,
746
+ vlanId,
747
+ destinationAllowList,
748
+ destinationBlockList,
603
749
  });
604
750
  await modalArg.destroy();
605
751
  },
606
752
  },
607
753
  ],
608
754
  });
755
+ // Setup conditional form visibility for edit dialog
756
+ const editForm = editModal?.shadowRoot?.querySelector('.content')?.querySelector('dees-form');
757
+ if (editForm) {
758
+ await editForm.updateComplete;
759
+ setupFormVisibility(editForm);
760
+ }
609
761
  },
610
762
  },
611
763
  {
@@ -683,4 +835,4 @@ let OpsViewVpn = (() => {
683
835
  return OpsViewVpn = _classThis;
684
836
  })();
685
837
  export { OpsViewVpn };
686
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctdnBuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL29wcy12aWV3LXZwbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osYUFBYSxFQUViLEdBQUcsRUFDSCxLQUFLLEVBQ0wsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssVUFBVSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQW1CLE1BQU0sNkJBQTZCLENBQUM7SUFTakQsVUFBVTs0QkFEdEIsYUFBYSxDQUFDLGNBQWMsQ0FBQzs7OztzQkFDRSxXQUFXOzs7OzBCQUFuQixTQUFRLFdBQVc7Ozs7b0NBQ3hDLEtBQUssRUFBRTtZQUNSLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBeUQ7WUFGNUUsNktBMG5CQzs7OztRQXhuQkMsNkVBQXdDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFHLEVBQUM7UUFBMUUsSUFBUyxRQUFRLDhDQUF5RDtRQUExRSxJQUFTLFFBQVEsb0RBQXlEO1FBRTFFO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztRQUVELEtBQUssQ0FBQyxpQkFBaUI7WUFDckIsTUFBTSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVNLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsV0FBVztZQUNYLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkFtQmUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7c0JBSW5DLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztpQkFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7OztzQkFLbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzRCQUNsQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7O3NCQVE5QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7OztpQkFlN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7O3NCQVVuQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7aUJBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7Ozs7Ozs7O3NCQVNuQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7OzRCQUVsQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7O2lCQWNuRCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7OztpQkFNeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOztLQUVwRDtTQUNGLENBQUM7UUFFRiw4REFBOEQ7UUFDdEQsZ0JBQWdCLENBQUMsTUFBa0M7WUFDekQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUNqRyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU07WUFDSixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQzlELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRTdELE1BQU0sVUFBVSxHQUFpQjtnQkFDL0I7b0JBQ0UsRUFBRSxFQUFFLGNBQWM7b0JBQ2xCLEtBQUssRUFBRSxlQUFlO29CQUN0QixJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsWUFBWTtvQkFDbkIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFdBQVcsRUFBRSx3QkFBd0I7b0JBQ3JDLEtBQUssRUFBRSxTQUFTO2lCQUNqQjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsa0JBQWtCO29CQUN0QixLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLElBQUksRUFBRSxhQUFhO29CQUNuQixXQUFXLEVBQUUscUJBQXFCO29CQUNsQyxLQUFLLEVBQUUsU0FBUztpQkFDakI7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGdCQUFnQjtvQkFDcEIsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxjQUFjO29CQUNyQixJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixXQUFXLEVBQUUsNkJBQTZCO29CQUMxQyxLQUFLLEVBQUUsU0FBUztpQkFDakI7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGNBQWM7b0JBQ2xCLEtBQUssRUFBRSxRQUFRO29CQUNmLElBQUksRUFBRSxNQUFNO29CQUNaLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQzlDLElBQUksRUFBRSxlQUFlO29CQUNyQixXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7b0JBQ2xFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7aUJBQy9DO2FBQ0YsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFBOzs7O1FBSVAsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs7OztpQkFJM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlOztxQkFFekIsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUMvRSxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO2dCQUNELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUNsRSxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEcsQ0FBQzs7O3FCQUdRLEdBQUcsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ2hGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNiLENBQUMsQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDVixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7OztxQkFHUSxLQUFLLElBQUksRUFBRTtnQkFDbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFnQixFQUM5QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUMxQixDQUFDO2dCQUNGLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUNsRSxTQUFTLENBQUMsYUFBYSxDQUFDO29CQUN0QixPQUFPLEVBQUUsbUJBQW1CO29CQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFBOztnQ0FFRyxPQUFPOzs7OztpQkFLdEI7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtxQkFDbkc7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQzs7O3FCQUdRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUM7OztPQUduRyxDQUFDLENBQUMsQ0FBQyxFQUFFOzsrQkFFbUIsVUFBVTs7UUFFakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7Ozs7c0NBSWlCLE1BQU0sQ0FBQyxNQUFNOzs7O3NDQUliLE1BQU0sQ0FBQyxZQUFZOztZQUU3QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs7O3dGQUc4QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVzs7V0FFaEgsQ0FBQyxDQUFDLENBQUMsRUFBRTs7T0FFVCxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7b0JBR1EsYUFBYTtvQkFDYixvREFBb0Q7Z0JBQ3hELE9BQU87MkJBQ0ksQ0FBQyxNQUFrQyxFQUFFLEVBQUU7Z0JBQ3hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxVQUFVLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEIsVUFBVSxHQUFHLElBQUksQ0FBQSxvREFBb0QsQ0FBQztnQkFDeEUsQ0FBQztxQkFBTSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzdELFVBQVUsR0FBRyxJQUFJLENBQUEsa0RBQWtELEtBQUssb0JBQW9CLENBQUM7Z0JBQy9GLENBQUM7cUJBQU0sQ0FBQztvQkFDTixVQUFVLEdBQUcsSUFBSSxDQUFBLHdEQUF3RCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsbUJBQW1CLENBQUM7Z0JBQzNMLENBQUM7Z0JBQ0QsT0FBTztvQkFDTCxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQzVCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHO29CQUNsQyxNQUFNLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLE1BQU07d0JBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFBLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUM1RixDQUFDLENBQUMsR0FBRztvQkFDUCxhQUFhLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxHQUFHO29CQUN4QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFO2lCQUMzRCxDQUFDO1lBQ0osQ0FBQzt1QkFDYztnQkFDYjtvQkFDRSxJQUFJLEVBQUUsZUFBZTtvQkFDckIsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFO3dCQUNyQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQzt3QkFDbEUsTUFBTSxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUM1QixPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFBOzs0Q0FFZSxVQUFVLFdBQVcsV0FBVyxjQUFjLElBQUk7NENBQ2xELGFBQWEsV0FBVyxhQUFhOzRDQUNyQyxNQUFNLFdBQVcsdUNBQXVDOztpQkFFbkY7NEJBQ0QsV0FBVyxFQUFFO2dDQUNYO29DQUNFLElBQUksRUFBRSxRQUFRO29DQUNkLFFBQVEsRUFBRSxVQUFVO29DQUNwQixNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFO2lDQUMxRDtnQ0FDRDtvQ0FDRSxJQUFJLEVBQUUsUUFBUTtvQ0FDZCxRQUFRLEVBQUUsYUFBYTtvQ0FDdkIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dDQUN4RixJQUFJLENBQUMsSUFBSTs0Q0FBRSxPQUFPO3dDQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3Q0FDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFROzRDQUFFLE9BQU87d0NBQzNCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLElBQUk7NENBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7NENBQ25FLENBQUMsQ0FBQyxTQUFTLENBQUM7d0NBQ2QsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7NENBQ3pFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTs0Q0FDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUzs0Q0FDMUMsdUJBQXVCO3lDQUN4QixDQUFDLENBQUM7d0NBQ0gsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7b0NBQzNCLENBQUM7aUNBQ0Y7NkJBQ0Y7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDckIsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFlLEVBQUUsRUFBRTt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQWtDLENBQUM7d0JBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBRWxFLDRCQUE0Qjt3QkFDNUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFBLHFEQUFxRCxDQUFDO3dCQUM5RSxJQUFJLENBQUM7NEJBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsQ0FBQzs0QkFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNsQyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUcsQ0FBQyxRQUFTO2dDQUN2RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7NkJBQzFCLENBQUMsQ0FBQzs0QkFDSCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDOzRCQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDO2dDQUNOLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUN4SSxhQUFhLEdBQUcsSUFBSSxDQUFBOzsrR0FFeUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7bUhBQ3BCLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDOytHQUNoQyxDQUFDLENBQUMsa0JBQWtCO21IQUNoQixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7b0hBQ3JFLENBQUMsQ0FBQyxjQUFjOzttQkFFakgsQ0FBQzs0QkFDSixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sYUFBYSxHQUFHLElBQUksQ0FBQSw4RUFBOEUsQ0FBQzs0QkFDckcsQ0FBQzt3QkFDSCxDQUFDO3dCQUFDLE1BQU0sQ0FBQzs0QkFDUCxhQUFhLEdBQUcsSUFBSSxDQUFBLHNEQUFzRCxDQUFDO3dCQUM3RSxDQUFDO3dCQUVELFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBQ3RCLE9BQU8sRUFBRSxXQUFXLE1BQU0sQ0FBQyxRQUFRLEVBQUU7NEJBQ3JDLE9BQU8sRUFBRSxJQUFJLENBQUE7OzRHQUUrRSxNQUFNLENBQUMsUUFBUTt5R0FDbEIsTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHO3lHQUN4QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7c0JBQ2hKLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO29IQUNtRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFOzhHQUNwRCxJQUFJLENBQUMsU0FBUztxQkFDdkcsQ0FBQyxDQUFDLENBQUMsRUFBRTs4R0FDb0YsTUFBTSxDQUFDLFdBQVcsSUFBSSxHQUFHO3VHQUNoQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUc7MEdBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUU7MEdBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUU7OztvQkFHakksYUFBYTtpQkFDaEI7NEJBQ0QsV0FBVyxFQUFFO2dDQUNYLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTs2QkFDckY7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7b0JBQzlCLHdCQUF3QixFQUFFLENBQUMsVUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTztvQkFDdkUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFlLEVBQUUsRUFBRTt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQWtDLENBQUM7d0JBQzdELE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFOzRCQUN6RSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7NEJBQ3pCLE9BQU8sRUFBRSxJQUFJO3lCQUNkLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLFFBQVEsRUFBRSxjQUFjO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO29CQUM5Qix3QkFBd0IsRUFBRSxDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPO29CQUN0RSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBa0MsQ0FBQzt3QkFDN0QsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7NEJBQ3pFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTs0QkFDekIsT0FBTyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7b0JBQzlCLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBZSxFQUFFLEVBQUU7d0JBQ3BDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFrQyxDQUFDO3dCQUM3RCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBRTdFLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxNQUFnQyxFQUFFLEVBQUU7NEJBQzlELElBQUksQ0FBQztnQ0FDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dDQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0NBQ2xDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRyxDQUFDLFFBQVM7b0NBQ3ZELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtvQ0FDekIsTUFBTTtpQ0FDUCxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQ0FDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0NBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7b0NBQ2pFLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO29DQUNiLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO29DQUN6QyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0NBQ1YsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDekIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQ0FDdkcsQ0FBQztxQ0FBTSxDQUFDO29DQUNOLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQ0FDM0csQ0FBQzs0QkFDSCxDQUFDOzRCQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0NBQ2xCLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDdEcsQ0FBQzt3QkFDSCxDQUFDLENBQUM7d0JBRUYsTUFBTSxVQUFVLEdBQUcsS0FBSyxJQUFJLEVBQUU7NEJBQzVCLElBQUksQ0FBQztnQ0FDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dDQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0NBQ2xDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRyxDQUFDLFFBQVM7b0NBQ3ZELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtvQ0FDekIsTUFBTSxFQUFFLFdBQVc7aUNBQ3BCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO29DQUN4QyxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUM1QyxRQUFRLENBQUMsTUFBTSxFQUNmLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQzFCLENBQUM7b0NBQ0YsU0FBUyxDQUFDLGFBQWEsQ0FBQzt3Q0FDdEIsT0FBTyxFQUFFLFlBQVksTUFBTSxDQUFDLFFBQVEsRUFBRTt3Q0FDdEMsT0FBTyxFQUFFLElBQUksQ0FBQTs7c0NBRUcsT0FBTzs7Ozs7dUJBS3RCO3dDQUNELFdBQVcsRUFBRTs0Q0FDWCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7eUNBQ3JGO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDO3FDQUFNLENBQUM7b0NBQ04sU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dDQUMzRyxDQUFDOzRCQUNILENBQUM7NEJBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztnQ0FDbEIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLHNCQUFzQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQzdHLENBQUM7d0JBQ0gsQ0FBQyxDQUFDO3dCQUVGLFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsTUFBTSxDQUFDLFFBQVEsRUFBRTs0QkFDNUMsT0FBTyxFQUFFLElBQUksQ0FBQSw0Q0FBNEM7NEJBQ3pELFdBQVcsRUFBRTtnQ0FDWDtvQ0FDRSxJQUFJLEVBQUUsbUJBQW1CO29DQUN6QixRQUFRLEVBQUUsZUFBZTtvQ0FDekIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0NBQ3pCLE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29DQUNsQyxDQUFDO2lDQUNGO2dDQUNEO29DQUNFLElBQUksRUFBRSxrQkFBa0I7b0NBQ3hCLFFBQVEsRUFBRSxlQUFlO29DQUN6QixNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFO3dDQUM5QixNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3Q0FDekIsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7b0NBQ2pDLENBQUM7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLHFCQUFxQjtvQ0FDM0IsUUFBUSxFQUFFLGdCQUFnQjtvQ0FDMUIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0NBQ3pCLE1BQU0sVUFBVSxFQUFFLENBQUM7b0NBQ3JCLENBQUM7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsUUFBUSxFQUFFLFVBQVU7b0NBQ3BCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUU7aUNBQzFEOzZCQUNGO3lCQUNGLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO29CQUM5QixVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBa0MsQ0FBQzt3QkFDN0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBQ2xFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7d0JBQ3BELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNyRSxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUN0QixPQUFPLEVBQUUsU0FBUyxNQUFNLENBQUMsUUFBUSxFQUFFOzRCQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFBOzs0Q0FFZSxhQUFhLFdBQVcsYUFBYSxXQUFXLGtCQUFrQjs0Q0FDbEUsTUFBTSxXQUFXLHVDQUF1QyxXQUFXLFdBQVc7O2lCQUV6Rzs0QkFDRCxXQUFXLEVBQUU7Z0NBQ1gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dDQUNuRztvQ0FDRSxJQUFJLEVBQUUsTUFBTTtvQ0FDWixRQUFRLEVBQUUsY0FBYztvQ0FDeEIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dDQUN4RixJQUFJLENBQUMsSUFBSTs0Q0FBRSxPQUFPO3dDQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3Q0FDMUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsSUFBSTs0Q0FDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzs0Q0FDbkUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3Q0FDUCxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTs0Q0FDekUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFROzRDQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTOzRDQUMxQyx1QkFBdUI7eUNBQ3hCLENBQUMsQ0FBQzt3Q0FDSCxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQ0FDM0IsQ0FBQztpQ0FDRjs2QkFDRjt5QkFDRixDQUFDLENBQUM7b0JBQ0wsQ0FBQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUNyQixVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBa0MsQ0FBQzt3QkFDN0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO3dCQUM3RSxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUN0QixPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFBLDZCQUE2QixNQUFNLENBQUMsUUFBUSwrRkFBK0Y7NEJBQ3hKLFdBQVcsRUFBRTtnQ0FDWCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0NBQ25HO29DQUNFLElBQUksRUFBRSxRQUFRO29DQUNkLFFBQVEsRUFBRSxrQkFBa0I7b0NBQzVCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUU7d0NBQzlCLElBQUksQ0FBQzs0Q0FDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDOzRDQUN6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0RBQ2xDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRyxDQUFDLFFBQVM7Z0RBQ3ZELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTs2Q0FDMUIsQ0FBQyxDQUFDOzRDQUNILElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7Z0RBQ2pELFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO29EQUM3QixHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFHO29EQUNwQyxlQUFlLEVBQUUsUUFBUSxDQUFDLGVBQWU7aURBQzFDLENBQUMsQ0FBQzs0Q0FDTCxDQUFDOzRDQUNELE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dDQUMzQixDQUFDO3dDQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7NENBQ2xCLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3Q0FDdEcsQ0FBQztvQ0FDSCxDQUFDO2lDQUNGOzZCQUNGO3lCQUNGLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBZSxFQUFFLEVBQUU7d0JBQ3BDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFrQyxDQUFDO3dCQUM3RCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQzt3QkFDbEUsU0FBUyxDQUFDLGFBQWEsQ0FBQzs0QkFDdEIsT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQSw4Q0FBOEMsTUFBTSxDQUFDLFFBQVEsUUFBUTs0QkFDbEYsV0FBVyxFQUFFO2dDQUNYLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQ0FDbkc7b0NBQ0UsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsUUFBUSxFQUFFLGVBQWU7b0NBQ3pCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUU7d0NBQzlCLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3Q0FDNUYsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7b0NBQzNCLENBQUM7aUNBQ0Y7NkJBQ0Y7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7YUFDRjs7O0tBR0osQ0FBQztRQUNKLENBQUM7O1lBem5CVSx1REFBVTs7Ozs7U0FBVixVQUFVIn0=
838
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctdnBuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL29wcy12aWV3LXZwbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osYUFBYSxFQUViLEdBQUcsRUFDSCxLQUFLLEVBQ0wsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssVUFBVSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQW1CLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFXO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLGdDQUFnQztJQUNyRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNyRSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQWdCLENBQUM7UUFDM0UsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBZ0IsQ0FBQztRQUMvRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFnQixDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFnQixDQUFDO1FBQzNFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFnQixDQUFDO1FBQ3JFLElBQUksV0FBVztZQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0YsSUFBSSxhQUFhO1lBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDaEYsSUFBSSxhQUFhO1lBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUUsSUFBSSxXQUFXO1lBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDNUUsSUFBSSxRQUFRO1lBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRixDQUFDLENBQUM7SUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDekQsZ0JBQWdCLEVBQUUsQ0FBQztBQUNyQixDQUFDO0lBU1ksVUFBVTs0QkFEdEIsYUFBYSxDQUFDLGNBQWMsQ0FBQzs7OztzQkFDRSxXQUFXOzs7OzBCQUFuQixTQUFRLFdBQVc7Ozs7b0NBQ3hDLEtBQUssRUFBRTtZQUNSLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBeUQ7WUFGNUUsNktBd3ZCQzs7OztRQXR2QkMsNkVBQXdDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFHLEVBQUM7UUFBMUUsSUFBUyxRQUFRLDhDQUF5RDtRQUExRSxJQUFTLFFBQVEsb0RBQXlEO1FBRTFFO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztRQUVELEtBQUssQ0FBQyxpQkFBaUI7WUFDckIsTUFBTSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVNLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsV0FBVztZQUNYLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkFtQmUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO2lCQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7c0JBSW5DLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztpQkFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7OztzQkFLbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzRCQUNsQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7O3NCQVE5QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7OztpQkFlN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7O3NCQVVuQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7aUJBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7Ozs7Ozs7O3NCQVNuQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7OzRCQUVsQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7O2lCQWNuRCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7OztpQkFNeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOztLQUVwRDtTQUNGLENBQUM7UUFFRiw4REFBOEQ7UUFDdEQsZ0JBQWdCLENBQUMsTUFBa0M7WUFDekQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUNqRyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU07WUFDSixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQzlELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRTdELE1BQU0sVUFBVSxHQUFpQjtnQkFDL0I7b0JBQ0UsRUFBRSxFQUFFLGNBQWM7b0JBQ2xCLEtBQUssRUFBRSxlQUFlO29CQUN0QixJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsWUFBWTtvQkFDbkIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFdBQVcsRUFBRSx3QkFBd0I7b0JBQ3JDLEtBQUssRUFBRSxTQUFTO2lCQUNqQjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsa0JBQWtCO29CQUN0QixLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLElBQUksRUFBRSxhQUFhO29CQUNuQixXQUFXLEVBQUUscUJBQXFCO29CQUNsQyxLQUFLLEVBQUUsU0FBUztpQkFDakI7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGdCQUFnQjtvQkFDcEIsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxjQUFjO29CQUNyQixJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixXQUFXLEVBQUUsNkJBQTZCO29CQUMxQyxLQUFLLEVBQUUsU0FBUztpQkFDakI7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGNBQWM7b0JBQ2xCLEtBQUssRUFBRSxRQUFRO29CQUNmLElBQUksRUFBRSxNQUFNO29CQUNaLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQzlDLElBQUksRUFBRSxlQUFlO29CQUNyQixXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7b0JBQ2xFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7aUJBQy9DO2FBQ0YsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFBOzs7O1FBSVAsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs7OztpQkFJM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlOztxQkFFekIsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUMvRSxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO2dCQUNELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUNsRSxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEcsQ0FBQzs7O3FCQUdRLEdBQUcsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ2hGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNiLENBQUMsQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDVixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7OztxQkFHUSxLQUFLLElBQUksRUFBRTtnQkFDbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFnQixFQUM5QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUMxQixDQUFDO2dCQUNGLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUNsRSxTQUFTLENBQUMsYUFBYSxDQUFDO29CQUN0QixPQUFPLEVBQUUsbUJBQW1CO29CQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFBOztnQ0FFRyxPQUFPOzs7OztpQkFLdEI7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtxQkFDbkc7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQzs7O3FCQUdRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUM7OztPQUduRyxDQUFDLENBQUMsQ0FBQyxFQUFFOzsrQkFFbUIsVUFBVTs7UUFFakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7Ozs7c0NBSWlCLE1BQU0sQ0FBQyxNQUFNOzs7O3NDQUliLE1BQU0sQ0FBQyxZQUFZOztZQUU3QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs7O3dGQUc4QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVzs7V0FFaEgsQ0FBQyxDQUFDLENBQUMsRUFBRTs7T0FFVCxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7b0JBR1EsYUFBYTtvQkFDYixvREFBb0Q7Z0JBQ3hELE9BQU87MkJBQ0ksQ0FBQyxNQUFrQyxFQUFFLEVBQUU7Z0JBQ3hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxVQUFVLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEIsVUFBVSxHQUFHLElBQUksQ0FBQSxvREFBb0QsQ0FBQztnQkFDeEUsQ0FBQztxQkFBTSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzdELFVBQVUsR0FBRyxJQUFJLENBQUEsa0RBQWtELEtBQUssb0JBQW9CLENBQUM7Z0JBQy9GLENBQUM7cUJBQU0sQ0FBQztvQkFDTixVQUFVLEdBQUcsSUFBSSxDQUFBLHdEQUF3RCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsbUJBQW1CLENBQUM7Z0JBQzNMLENBQUM7Z0JBQ0QsSUFBSSxXQUFXLENBQUM7Z0JBQ2hCLElBQUksTUFBTSxDQUFDLDBCQUEwQixLQUFLLEtBQUssRUFBRSxDQUFDO29CQUNoRCxXQUFXLEdBQUcsSUFBSSxDQUFBLHFEQUFxRCxDQUFDO2dCQUMxRSxDQUFDO3FCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM1QixXQUFXLEdBQUcsSUFBSSxDQUFBLGdEQUFnRCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3BMLENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLEdBQUcsSUFBSSxDQUFBLGdEQUFnRCxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUM7Z0JBQ25MLENBQUM7Z0JBQ0QsT0FBTztvQkFDTCxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQzVCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixTQUFTLEVBQUUsV0FBVztvQkFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRztvQkFDbEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxNQUFNO3dCQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFBLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQSwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsRUFBRTt3QkFDNUYsQ0FBQyxDQUFDLEdBQUc7b0JBQ1AsYUFBYSxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksR0FBRztvQkFDeEMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsRUFBRTtpQkFDM0QsQ0FBQztZQUNKLENBQUM7dUJBQ2M7Z0JBQ2I7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ2hCLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDckIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBQ2xFLE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQzs0QkFDaEQsT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQTs7NENBRWUsVUFBVSxXQUFXLFdBQVcsY0FBYyxJQUFJOzRDQUNsRCxhQUFhLFdBQVcsYUFBYTs0Q0FDckMsTUFBTSxXQUFXLHVDQUF1QztnREFDcEQsNEJBQTRCLFdBQVcsa0NBQWtDLFdBQVcsSUFBSTs7a0RBRXRGLFdBQVcsV0FBVyxhQUFhLFdBQVcsS0FBSzs7b0RBRWpELFNBQVMsV0FBVyxxQkFBcUIsV0FBVyxLQUFLOztrREFFM0QsVUFBVSxXQUFXLFdBQVc7O29EQUU5QixXQUFXLFdBQVcsWUFBWSxXQUFXLEtBQUs7O2tEQUVwRCxRQUFRLFdBQVcsU0FBUzs7OztnREFJOUIscUJBQXFCLFdBQVcsdUJBQXVCLFdBQVcsS0FBSzs7OENBRXpFLHNCQUFzQixXQUFXLG9EQUFvRDs4Q0FDckYsc0JBQXNCLFdBQVcsb0RBQW9EOzs7aUJBR2xIOzRCQUNELFdBQVcsRUFBRTtnQ0FDWDtvQ0FDRSxJQUFJLEVBQUUsUUFBUTtvQ0FDZCxRQUFRLEVBQUUsVUFBVTtvQ0FDcEIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRTtpQ0FDMUQ7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsUUFBUSxFQUFFLGFBQWE7b0NBQ3ZCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUU7d0NBQzlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3Q0FDeEYsSUFBSSxDQUFDLElBQUk7NENBQUUsT0FBTzt3Q0FDbEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0NBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTs0Q0FBRSxPQUFPO3dDQUMzQixNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxJQUFJOzRDQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDOzRDQUNuRSxDQUFDLENBQUMsU0FBUyxDQUFDO3dDQUVkLG1EQUFtRDt3Q0FDbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixJQUFJLElBQUksQ0FBQzt3Q0FDaEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDO3dDQUNoRSxNQUFNLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO3dDQUNyRCxNQUFNLFFBQVEsR0FBRyxTQUFTLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO3dDQUNwRixNQUFNLFNBQVMsR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDO3dDQUN6RCxNQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3Q0FFaEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEtBQUssQ0FBQzt3Q0FDcEQsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLG9CQUFvQjs0Q0FDakUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDOzRDQUNuRixDQUFDLENBQUMsU0FBUyxDQUFDO3dDQUNkLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxvQkFBb0I7NENBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzs0Q0FDbkYsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3Q0FFZCxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTs0Q0FDekUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRDQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTOzRDQUMxQyx1QkFBdUI7NENBQ3ZCLDBCQUEwQixFQUFFLGVBQWU7NENBQzNDLFNBQVMsRUFBRSxTQUFTLElBQUksU0FBUzs0Q0FDakMsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTOzRDQUM3QixRQUFROzRDQUNSLFNBQVMsRUFBRSxTQUFTLElBQUksU0FBUzs0Q0FDakMsTUFBTTs0Q0FDTixvQkFBb0I7NENBQ3BCLG9CQUFvQjt5Q0FDckIsQ0FBQyxDQUFDO3dDQUNILE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO29DQUMzQixDQUFDO2lDQUNGOzZCQUNGO3lCQUNGLENBQUMsQ0FBQzt3QkFDSCx3REFBd0Q7d0JBQ3hELE1BQU0sVUFBVSxHQUFHLFdBQVcsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQVEsQ0FBQzt3QkFDekcsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDZixNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUM7NEJBQ2hDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO29CQUNILENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDckIsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFlLEVBQUUsRUFBRTt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQWtDLENBQUM7d0JBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBRWxFLDRCQUE0Qjt3QkFDNUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFBLHFEQUFxRCxDQUFDO3dCQUM5RSxJQUFJLENBQUM7NEJBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsQ0FBQzs0QkFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNsQyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUcsQ0FBQyxRQUFTO2dDQUN2RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7NkJBQzFCLENBQUMsQ0FBQzs0QkFDSCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDOzRCQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDO2dDQUNOLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUN4SSxhQUFhLEdBQUcsSUFBSSxDQUFBOzsrR0FFeUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7bUhBQ3BCLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDOytHQUNoQyxDQUFDLENBQUMsa0JBQWtCO21IQUNoQixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7b0hBQ3JFLENBQUMsQ0FBQyxjQUFjOzttQkFFakgsQ0FBQzs0QkFDSixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sYUFBYSxHQUFHLElBQUksQ0FBQSw4RUFBOEUsQ0FBQzs0QkFDckcsQ0FBQzt3QkFDSCxDQUFDO3dCQUFDLE1BQU0sQ0FBQzs0QkFDUCxhQUFhLEdBQUcsSUFBSSxDQUFBLHNEQUFzRCxDQUFDO3dCQUM3RSxDQUFDO3dCQUVELFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBQ3RCLE9BQU8sRUFBRSxXQUFXLE1BQU0sQ0FBQyxRQUFRLEVBQUU7NEJBQ3JDLE9BQU8sRUFBRSxJQUFJLENBQUE7OzRHQUUrRSxNQUFNLENBQUMsUUFBUTt5R0FDbEIsTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHO3lHQUN4QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7c0JBQ2hKLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO29IQUNtRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFOzhHQUNwRCxJQUFJLENBQUMsU0FBUztxQkFDdkcsQ0FBQyxDQUFDLENBQUMsRUFBRTs4R0FDb0YsTUFBTSxDQUFDLFdBQVcsSUFBSSxHQUFHO3VHQUNoQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUc7MEdBQzlDLE1BQU0sQ0FBQywwQkFBMEIsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO3NCQUN4TCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7NEdBQytELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjt5R0FDOUYsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7cUJBQ25LLENBQUMsQ0FBQyxDQUFDLEVBQUU7NkdBQ21GLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07NkdBQ3JGLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07MEdBQ3hGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUU7MEdBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUU7OztvQkFHakksYUFBYTtpQkFDaEI7NEJBQ0QsV0FBVyxFQUFFO2dDQUNYLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTs2QkFDckY7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7b0JBQzlCLHdCQUF3QixFQUFFLENBQUMsVUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTztvQkFDdkUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFlLEVBQUUsRUFBRTt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQWtDLENBQUM7d0JBQzdELE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFOzRCQUN6RSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7NEJBQ3pCLE9BQU8sRUFBRSxJQUFJO3lCQUNkLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLFFBQVEsRUFBRSxjQUFjO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO29CQUM5Qix3QkFBd0IsRUFBRSxDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPO29CQUN0RSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBa0MsQ0FBQzt3QkFDN0QsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7NEJBQ3pFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTs0QkFDekIsT0FBTyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7b0JBQzlCLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBZSxFQUFFLEVBQUU7d0JBQ3BDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFrQyxDQUFDO3dCQUM3RCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBRTdFLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxNQUFnQyxFQUFFLEVBQUU7NEJBQzlELElBQUksQ0FBQztnQ0FDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dDQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0NBQ2xDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRyxDQUFDLFFBQVM7b0NBQ3ZELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtvQ0FDekIsTUFBTTtpQ0FDUCxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQ0FDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0NBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7b0NBQ2pFLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO29DQUNiLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO29DQUN6QyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0NBQ1YsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDekIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQ0FDdkcsQ0FBQztxQ0FBTSxDQUFDO29DQUNOLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQ0FDM0csQ0FBQzs0QkFDSCxDQUFDOzRCQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0NBQ2xCLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDdEcsQ0FBQzt3QkFDSCxDQUFDLENBQUM7d0JBRUYsTUFBTSxVQUFVLEdBQUcsS0FBSyxJQUFJLEVBQUU7NEJBQzVCLElBQUksQ0FBQztnQ0FDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dDQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0NBQ2xDLFFBQVEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRyxDQUFDLFFBQVM7b0NBQ3ZELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtvQ0FDekIsTUFBTSxFQUFFLFdBQVc7aUNBQ3BCLENBQUMsQ0FBQztnQ0FDSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO29DQUN4QyxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUM1QyxRQUFRLENBQUMsTUFBTSxFQUNmLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQzFCLENBQUM7b0NBQ0YsU0FBUyxDQUFDLGFBQWEsQ0FBQzt3Q0FDdEIsT0FBTyxFQUFFLFlBQVksTUFBTSxDQUFDLFFBQVEsRUFBRTt3Q0FDdEMsT0FBTyxFQUFFLElBQUksQ0FBQTs7c0NBRUcsT0FBTzs7Ozs7dUJBS3RCO3dDQUNELFdBQVcsRUFBRTs0Q0FDWCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7eUNBQ3JGO3FDQUNGLENBQUMsQ0FBQztnQ0FDTCxDQUFDO3FDQUFNLENBQUM7b0NBQ04sU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dDQUMzRyxDQUFDOzRCQUNILENBQUM7NEJBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztnQ0FDbEIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLHNCQUFzQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQzdHLENBQUM7d0JBQ0gsQ0FBQyxDQUFDO3dCQUVGLFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsTUFBTSxDQUFDLFFBQVEsRUFBRTs0QkFDNUMsT0FBTyxFQUFFLElBQUksQ0FBQSw0Q0FBNEM7NEJBQ3pELFdBQVcsRUFBRTtnQ0FDWDtvQ0FDRSxJQUFJLEVBQUUsbUJBQW1CO29DQUN6QixRQUFRLEVBQUUsZUFBZTtvQ0FDekIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0NBQ3pCLE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29DQUNsQyxDQUFDO2lDQUNGO2dDQUNEO29DQUNFLElBQUksRUFBRSxrQkFBa0I7b0NBQ3hCLFFBQVEsRUFBRSxlQUFlO29DQUN6QixNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFO3dDQUM5QixNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3Q0FDekIsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7b0NBQ2pDLENBQUM7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLHFCQUFxQjtvQ0FDM0IsUUFBUSxFQUFFLGdCQUFnQjtvQ0FDMUIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0NBQ3pCLE1BQU0sVUFBVSxFQUFFLENBQUM7b0NBQ3JCLENBQUM7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsUUFBUSxFQUFFLFVBQVU7b0NBQ3BCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUU7aUNBQzFEOzZCQUNGO3lCQUNGLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO29CQUM5QixVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBa0MsQ0FBQzt3QkFDN0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBQ2xFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7d0JBQ3BELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNyRSxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUM7d0JBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7d0JBQ25ELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO3dCQUMvQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQzt3QkFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQzt3QkFDbkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDekUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQzsrQkFDbEUsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDcEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUM5QyxPQUFPLEVBQUUsU0FBUyxNQUFNLENBQUMsUUFBUSxFQUFFOzRCQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFBOzs0Q0FFZSxhQUFhLFdBQVcsYUFBYSxXQUFXLGtCQUFrQjs0Q0FDbEUsTUFBTSxXQUFXLHVDQUF1QyxXQUFXLFdBQVc7Z0RBQzFFLDRCQUE0QixXQUFXLGtDQUFrQyxXQUFXLHNCQUFzQjsrREFDM0Ysc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtrREFDckQsV0FBVyxXQUFXLGFBQWEsV0FBVyxnQkFBZ0I7bUVBQzdDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07b0RBQ2pELFNBQVMsV0FBVyxxQkFBcUIsV0FBVyxjQUFjO3FFQUNqRCxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtrREFDbkQsVUFBVSxXQUFXLFdBQVcsV0FBVyxlQUFlOztvREFFeEQsV0FBVyxXQUFXLFlBQVksV0FBVyxnQkFBZ0I7bUVBQzlDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07a0RBQ25ELFFBQVEsV0FBVyxTQUFTLFdBQVcsYUFBYTs7OztnREFJdEQscUJBQXFCLFdBQVcsdUJBQXVCLFdBQVcsZ0JBQWdCOzREQUN0RSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNOzhDQUNoRCxzQkFBc0IsV0FBVyxvREFBb0QsV0FBVyxnQkFBZ0I7OENBQ2hILHNCQUFzQixXQUFXLG9EQUFvRCxXQUFXLGdCQUFnQjs7O2lCQUc3STs0QkFDRCxXQUFXLEVBQUU7Z0NBQ1gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dDQUNuRztvQ0FDRSxJQUFJLEVBQUUsTUFBTTtvQ0FDWixRQUFRLEVBQUUsY0FBYztvQ0FDeEIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dDQUN4RixJQUFJLENBQUMsSUFBSTs0Q0FBRSxPQUFPO3dDQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3Q0FDMUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsSUFBSTs0Q0FDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzs0Q0FDbkUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3Q0FFUCxtREFBbUQ7d0NBQ25ELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUM7d0NBQ2hFLE1BQU0sU0FBUyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQzt3Q0FDaEUsTUFBTSxPQUFPLEdBQUcsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQzt3Q0FDckQsTUFBTSxRQUFRLEdBQUcsU0FBUyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3Q0FDcEYsTUFBTSxTQUFTLEdBQUcsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQzt3Q0FDekQsTUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7d0NBRWhGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxLQUFLLENBQUM7d0NBQ3BELE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxvQkFBb0I7NENBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzs0Q0FDbkYsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3Q0FDUCxNQUFNLG9CQUFvQixHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsb0JBQW9COzRDQUNqRSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7NENBQ25GLENBQUMsQ0FBQyxFQUFFLENBQUM7d0NBRVAsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7NENBQ3pFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTs0Q0FDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUzs0Q0FDMUMsdUJBQXVCOzRDQUN2QiwwQkFBMEIsRUFBRSxlQUFlOzRDQUMzQyxTQUFTLEVBQUUsU0FBUyxJQUFJLFNBQVM7NENBQ2pDLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUzs0Q0FDN0IsUUFBUTs0Q0FDUixTQUFTLEVBQUUsU0FBUyxJQUFJLFNBQVM7NENBQ2pDLE1BQU07NENBQ04sb0JBQW9COzRDQUNwQixvQkFBb0I7eUNBQ3JCLENBQUMsQ0FBQzt3Q0FDSCxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQ0FDM0IsQ0FBQztpQ0FDRjs2QkFDRjt5QkFDRixDQUFDLENBQUM7d0JBQ0gsb0RBQW9EO3dCQUNwRCxNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFRLENBQUM7d0JBQ3JHLElBQUksUUFBUSxFQUFFLENBQUM7NEJBQ2IsTUFBTSxRQUFRLENBQUMsY0FBYyxDQUFDOzRCQUM5QixtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQztvQkFDSCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxhQUFhO29CQUNuQixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBZSxFQUFFLEVBQUU7d0JBQ3BDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFrQyxDQUFDO3dCQUM3RCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBQzdFLFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBQ3RCLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUEsNkJBQTZCLE1BQU0sQ0FBQyxRQUFRLCtGQUErRjs0QkFDeEosV0FBVyxFQUFFO2dDQUNYLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQ0FDbkc7b0NBQ0UsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsUUFBUSxFQUFFLGtCQUFrQjtvQ0FDNUIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsSUFBSSxDQUFDOzRDQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLG9CQUFvQixDQUFDLENBQUM7NENBQ3pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnREFDbEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFHLENBQUMsUUFBUztnREFDdkQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFROzZDQUMxQixDQUFDLENBQUM7NENBQ0gsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnREFDakQsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7b0RBQzdCLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUc7b0RBQ3BDLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtpREFDMUMsQ0FBQyxDQUFDOzRDQUNMLENBQUM7NENBQ0QsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0NBQzNCLENBQUM7d0NBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQzs0Q0FDbEIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dDQUN0RyxDQUFDO29DQUNILENBQUM7aUNBQ0Y7NkJBQ0Y7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDckIsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFlLEVBQUUsRUFBRTt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQWtDLENBQUM7d0JBQzdELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO3dCQUNsRSxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUN0QixPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFBLDhDQUE4QyxNQUFNLENBQUMsUUFBUSxRQUFROzRCQUNsRixXQUFXLEVBQUU7Z0NBQ1gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dDQUNuRztvQ0FDRSxJQUFJLEVBQUUsUUFBUTtvQ0FDZCxRQUFRLEVBQUUsZUFBZTtvQ0FDekIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTt3Q0FDOUIsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dDQUM1RixNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQ0FDM0IsQ0FBQztpQ0FDRjs2QkFDRjt5QkFDRixDQUFDLENBQUM7b0JBQ0wsQ0FBQztpQkFDRjthQUNGOzs7S0FHSixDQUFDO1FBQ0osQ0FBQzs7WUF2dkJVLHVEQUFVOzs7OztTQUFWLFVBQVUifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@serve.zone/dcrouter",
3
3
  "private": false,
4
- "version": "12.0.0",
4
+ "version": "12.1.0",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "exports": {
@@ -35,7 +35,7 @@
35
35
  "@api.global/typedserver": "^8.4.6",
36
36
  "@api.global/typedsocket": "^4.1.2",
37
37
  "@apiclient.xyz/cloudflare": "^7.1.0",
38
- "@design.estate/dees-catalog": "^3.49.0",
38
+ "@design.estate/dees-catalog": "^3.49.1",
39
39
  "@design.estate/dees-element": "^2.2.4",
40
40
  "@push.rocks/lik": "^6.4.0",
41
41
  "@push.rocks/projectinfo": "^5.1.0",
@@ -59,7 +59,7 @@
59
59
  "@push.rocks/smartrx": "^3.0.10",
60
60
  "@push.rocks/smartstate": "^2.3.0",
61
61
  "@push.rocks/smartunique": "^3.0.9",
62
- "@push.rocks/smartvpn": "1.17.1",
62
+ "@push.rocks/smartvpn": "1.19.1",
63
63
  "@push.rocks/taskbuffer": "^8.0.2",
64
64
  "@serve.zone/catalog": "^2.9.0",
65
65
  "@serve.zone/interfaces": "^5.3.0",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '12.0.0',
6
+ version: '12.1.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -205,6 +205,17 @@ export interface IDcRouterOptions {
205
205
  allowList?: string[];
206
206
  blockList?: string[];
207
207
  };
208
+ /** Forwarding mode: 'socket' (default, userspace NAT), 'bridge' (L2 bridge to host LAN),
209
+ * or 'hybrid' (socket default, bridge for clients with useHostIp=true) */
210
+ forwardingMode?: 'socket' | 'bridge' | 'hybrid';
211
+ /** LAN subnet CIDR for bridge mode (e.g., '192.168.1.0/24') */
212
+ bridgeLanSubnet?: string;
213
+ /** Physical network interface for bridge mode (auto-detected if omitted) */
214
+ bridgePhysicalInterface?: string;
215
+ /** Start of VPN client IP range in LAN subnet (host offset, default: 200) */
216
+ bridgeIpRangeStart?: number;
217
+ /** End of VPN client IP range in LAN subnet (host offset, default: 250) */
218
+ bridgeIpRangeEnd?: number;
208
219
  };
209
220
  }
210
221
 
@@ -2085,6 +2096,11 @@ export class DcRouter {
2085
2096
  serverEndpoint: this.options.vpnConfig.serverEndpoint,
2086
2097
  initialClients: this.options.vpnConfig.clients,
2087
2098
  destinationPolicy: this.options.vpnConfig.destinationPolicy,
2099
+ forwardingMode: this.options.vpnConfig.forwardingMode,
2100
+ bridgeLanSubnet: this.options.vpnConfig.bridgeLanSubnet,
2101
+ bridgePhysicalInterface: this.options.vpnConfig.bridgePhysicalInterface,
2102
+ bridgeIpRangeStart: this.options.vpnConfig.bridgeIpRangeStart,
2103
+ bridgeIpRangeEnd: this.options.vpnConfig.bridgeIpRangeEnd,
2088
2104
  onClientChanged: () => {
2089
2105
  // Re-apply routes so tag-based ipAllowLists get updated
2090
2106
  this.routeConfigManager?.applyRoutes();
@@ -39,6 +39,30 @@ export class VpnClientDoc extends plugins.smartdata.SmartDataDbDoc<VpnClientDoc,
39
39
  @plugins.smartdata.svDb()
40
40
  public expiresAt?: string;
41
41
 
42
+ @plugins.smartdata.svDb()
43
+ public forceDestinationSmartproxy: boolean = true;
44
+
45
+ @plugins.smartdata.svDb()
46
+ public destinationAllowList?: string[];
47
+
48
+ @plugins.smartdata.svDb()
49
+ public destinationBlockList?: string[];
50
+
51
+ @plugins.smartdata.svDb()
52
+ public useHostIp?: boolean;
53
+
54
+ @plugins.smartdata.svDb()
55
+ public useDhcp?: boolean;
56
+
57
+ @plugins.smartdata.svDb()
58
+ public staticIp?: string;
59
+
60
+ @plugins.smartdata.svDb()
61
+ public forceVlan?: boolean;
62
+
63
+ @plugins.smartdata.svDb()
64
+ public vlanId?: number;
65
+
42
66
  constructor() {
43
67
  super();
44
68
  }
@@ -31,6 +31,14 @@ export class VpnHandler {
31
31
  createdAt: c.createdAt,
32
32
  updatedAt: c.updatedAt,
33
33
  expiresAt: c.expiresAt,
34
+ forceDestinationSmartproxy: c.forceDestinationSmartproxy ?? true,
35
+ destinationAllowList: c.destinationAllowList,
36
+ destinationBlockList: c.destinationBlockList,
37
+ useHostIp: c.useHostIp,
38
+ useDhcp: c.useDhcp,
39
+ staticIp: c.staticIp,
40
+ forceVlan: c.forceVlan,
41
+ vlanId: c.vlanId,
34
42
  }));
35
43
  return { clients };
36
44
  },
@@ -114,8 +122,21 @@ export class VpnHandler {
114
122
  clientId: dataArg.clientId,
115
123
  serverDefinedClientTags: dataArg.serverDefinedClientTags,
116
124
  description: dataArg.description,
125
+ forceDestinationSmartproxy: dataArg.forceDestinationSmartproxy,
126
+ destinationAllowList: dataArg.destinationAllowList,
127
+ destinationBlockList: dataArg.destinationBlockList,
128
+ useHostIp: dataArg.useHostIp,
129
+ useDhcp: dataArg.useDhcp,
130
+ staticIp: dataArg.staticIp,
131
+ forceVlan: dataArg.forceVlan,
132
+ vlanId: dataArg.vlanId,
117
133
  });
118
134
 
135
+ // Retrieve the persisted doc to get dcrouter-level fields
136
+ const persistedClient = manager.listClients().find(
137
+ (c) => c.clientId === bundle.entry.clientId,
138
+ );
139
+
119
140
  return {
120
141
  success: true,
121
142
  client: {
@@ -127,6 +148,14 @@ export class VpnHandler {
127
148
  createdAt: Date.now(),
128
149
  updatedAt: Date.now(),
129
150
  expiresAt: bundle.entry.expiresAt,
151
+ forceDestinationSmartproxy: persistedClient?.forceDestinationSmartproxy ?? true,
152
+ destinationAllowList: persistedClient?.destinationAllowList,
153
+ destinationBlockList: persistedClient?.destinationBlockList,
154
+ useHostIp: persistedClient?.useHostIp,
155
+ useDhcp: persistedClient?.useDhcp,
156
+ staticIp: persistedClient?.staticIp,
157
+ forceVlan: persistedClient?.forceVlan,
158
+ vlanId: persistedClient?.vlanId,
130
159
  },
131
160
  wireguardConfig: bundle.wireguardConfig,
132
161
  };
@@ -151,6 +180,14 @@ export class VpnHandler {
151
180
  await manager.updateClient(dataArg.clientId, {
152
181
  description: dataArg.description,
153
182
  serverDefinedClientTags: dataArg.serverDefinedClientTags,
183
+ forceDestinationSmartproxy: dataArg.forceDestinationSmartproxy,
184
+ destinationAllowList: dataArg.destinationAllowList,
185
+ destinationBlockList: dataArg.destinationBlockList,
186
+ useHostIp: dataArg.useHostIp,
187
+ useDhcp: dataArg.useDhcp,
188
+ staticIp: dataArg.staticIp,
189
+ forceVlan: dataArg.forceVlan,
190
+ vlanId: dataArg.vlanId,
154
191
  });
155
192
  return { success: true };
156
193
  } catch (err: unknown) {