@bizdoc/core 1.16.2 → 1.16.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/assets/system/Microsoft_Azure.svg +23 -0
  2. package/assets/system/QAD.svg +359 -0
  3. package/assets/system/sap.svg +1 -0
  4. package/esm2020/lib/admin/configuration-designer/cube-axes-filter.component.mjs +112 -0
  5. package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +138 -37
  6. package/esm2020/lib/admin/configuration-designer/designer.base.mjs +30 -27
  7. package/esm2020/lib/admin/configuration-designer/designer.component.mjs +34 -24
  8. package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +33 -7
  9. package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +5 -4
  10. package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +4 -4
  11. package/esm2020/lib/admin/configuration-designer/elements/anomaly-rule.component.mjs +5 -5
  12. package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +5 -5
  13. package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +5 -5
  14. package/esm2020/lib/admin/configuration-designer/elements/cube-index-utility.component.mjs +3 -3
  15. package/esm2020/lib/admin/configuration-designer/elements/cube-view.component.mjs +3 -3
  16. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +13 -18
  17. package/esm2020/lib/admin/configuration-designer/elements/documents-report.component.mjs +3 -3
  18. package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +3 -3
  19. package/esm2020/lib/admin/configuration-designer/elements/explore-view.component.mjs +3 -3
  20. package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +34 -9
  21. package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +16 -16
  22. package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +5 -9
  23. package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +5 -4
  24. package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +4 -4
  25. package/esm2020/lib/admin/configuration-designer/elements/performance-widget.component.mjs +3 -3
  26. package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +4 -4
  27. package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +10 -9
  28. package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +5 -5
  29. package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +11 -4
  30. package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +3 -4
  31. package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +19 -7
  32. package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +4 -4
  33. package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +3 -3
  34. package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +4 -5
  35. package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +4 -4
  36. package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +4 -11
  37. package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +3 -10
  38. package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +11 -9
  39. package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +11 -9
  40. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +3 -3
  41. package/esm2020/lib/bizdoc.module.mjs +1 -3
  42. package/esm2020/lib/core/layout/input.field.mjs +3 -2
  43. package/esm2020/lib/core/models.mjs +1 -1
  44. package/esm2020/lib/core/translations.mjs +8 -2
  45. package/esm2020/lib/shared.module.mjs +3 -1
  46. package/esm2020/lib/system.module.mjs +10 -10
  47. package/esm2020/lib/views/cube/sum.component.mjs +1 -1
  48. package/esm2020/public-api.mjs +1 -1
  49. package/fesm2015/bizdoc-core.mjs +647 -450
  50. package/fesm2015/bizdoc-core.mjs.map +1 -1
  51. package/fesm2020/bizdoc-core.mjs +644 -447
  52. package/fesm2020/bizdoc-core.mjs.map +1 -1
  53. package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts +35 -0
  54. package/lib/admin/configuration-designer/designer-element.component.d.ts +23 -12
  55. package/lib/admin/configuration-designer/designer.base.d.ts +40 -16
  56. package/lib/admin/configuration-designer/designer.component.d.ts +2 -1
  57. package/lib/admin/configuration-designer/elements/action.component.d.ts +15 -1
  58. package/lib/admin/configuration-designer/elements/anomaly-rule.component.d.ts +2 -2
  59. package/lib/admin/configuration-designer/elements/box-form.component.d.ts +2 -2
  60. package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts +2 -2
  61. package/lib/admin/configuration-designer/elements/folder.component.d.ts +11 -1
  62. package/lib/admin/configuration-designer/elements/form.component.d.ts +3 -1
  63. package/lib/admin/configuration-designer/elements/report.component.d.ts +3 -1
  64. package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +2 -2
  65. package/lib/admin/configuration-designer/elements/role.component.d.ts +2 -0
  66. package/lib/admin/configuration-designer/elements/state.component.d.ts +4 -0
  67. package/lib/admin/configuration-designer/elements/utility.component.d.ts +0 -1
  68. package/lib/admin/configuration-designer/elements/view.component.d.ts +0 -1
  69. package/lib/admin/configuration-designer/elements/widget.component.d.ts +5 -2
  70. package/lib/admin/configuration-designer/icon-picker.component.d.ts +2 -1
  71. package/lib/core/layout/input.field.d.ts +1 -1
  72. package/lib/core/models.d.ts +5 -4
  73. package/lib/core/translations.d.ts +6 -0
  74. package/lib/system.module.d.ts +41 -41
  75. package/lib/views/cube/sum.component.d.ts +3 -3
  76. package/package.json +1 -1
  77. package/public-api.d.ts +1 -1
  78. package/esm2020/lib/admin/configuration-designer/privileges.component.mjs +0 -60
  79. package/lib/admin/configuration-designer/privileges.component.d.ts +0 -26
@@ -1,78 +1,135 @@
1
1
  import { Component, EventEmitter, HostListener, Injector, Input, Optional, ViewChild, ViewContainerRef } from "@angular/core";
2
2
  import { Validators } from "@angular/forms";
3
- import { Subject, takeUntil } from "rxjs";
3
+ import { debounceTime, Subject, takeUntil } from "rxjs";
4
+ import { FieldType, ValidationType } from "../../core/models";
4
5
  import { DesignerRef, programName } from "./designer.base";
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "../../core/slots/pane-ref";
7
8
  import * as i2 from "@angular/forms";
8
- import * as i3 from "../../core/component-factory-resolver";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/material/toolbar";
11
- import * as i6 from "@angular/material/form-field";
12
- import * as i7 from "@angular/material/button";
13
- import * as i8 from "@angular/material/input";
14
- import * as i9 from "@angular/material/icon";
15
- import * as i10 from "../../core/pipes/translate.pipe";
9
+ import * as i3 from "../system.service";
10
+ import * as i4 from "../../core/component-factory-resolver";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "@angular/material/list";
13
+ import * as i7 from "@angular/material/toolbar";
14
+ import * as i8 from "@angular/material/form-field";
15
+ import * as i9 from "@angular/material/button";
16
+ import * as i10 from "@angular/material/input";
17
+ import * as i11 from "@angular/material/icon";
18
+ import * as i12 from "../../core/layout/layout.component";
19
+ import * as i13 from "../core/ace.input";
20
+ import * as i14 from "../../core/pipes/sanitize-html.pipe";
21
+ import * as i15 from "../../core/pipes/translate.pipe";
22
+ const SVG = {
23
+ "Azure": `<svg width="34" height="34" viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
24
+ <defs>
25
+ <linearGradient id="e399c19f-b68f-429d-b176-18c2117ff73c" x1="-1032.172" x2="-1059.213" y1="145.312" y2="65.426" gradientTransform="matrix(1 0 0 -1 1075 158)" gradientUnits="userSpaceOnUse">
26
+ <stop offset="0" stop-color="#114a8b"/>
27
+ <stop offset="1" stop-color="#0669bc"/>
28
+ </linearGradient>
29
+ <linearGradient id="ac2a6fc2-ca48-4327-9a3c-d4dcc3256e15" x1="-1023.725" x2="-1029.98" y1="108.083" y2="105.968" gradientTransform="matrix(1 0 0 -1 1075 158)" gradientUnits="userSpaceOnUse">
30
+ <stop offset="0" stop-opacity=".3"/>
31
+ <stop offset=".071" stop-opacity=".2"/>
32
+ <stop offset=".321" stop-opacity=".1"/>
33
+ <stop offset=".623" stop-opacity=".05"/>
34
+ <stop offset="1" stop-opacity="0"/>
35
+ </linearGradient>
36
+ <linearGradient id="a7fee970-a784-4bb1-af8d-63d18e5f7db9" x1="-1027.165" x2="-997.482" y1="147.642" y2="68.561" gradientTransform="matrix(1 0 0 -1 1075 158)" gradientUnits="userSpaceOnUse">
37
+ <stop offset="0" stop-color="#3ccbf4"/>
38
+ <stop offset="1" stop-color="#2892df"/>
39
+ </linearGradient>
40
+ </defs>
41
+ <path fill="url(#e399c19f-b68f-429d-b176-18c2117ff73c)" d="M33.338 6.544h26.038l-27.03 80.087a4.152 4.152 0 0 1-3.933 2.824H8.149a4.145 4.145 0 0 1-3.928-5.47L29.404 9.368a4.152 4.152 0 0 1 3.934-2.825z"/>
42
+ <path fill="#0078d4" d="M71.175 60.261h-41.29a1.911 1.911 0 0 0-1.305 3.309l26.532 24.764a4.171 4.171 0 0 0 2.846 1.121h23.38z"/>
43
+ <path fill="url(#ac2a6fc2-ca48-4327-9a3c-d4dcc3256e15)" d="M33.338 6.544a4.118 4.118 0 0 0-3.943 2.879L4.252 83.917a4.14 4.14 0 0 0 3.908 5.538h20.787a4.443 4.443 0 0 0 3.41-2.9l5.014-14.777 17.91 16.705a4.237 4.237 0 0 0 2.666.972H81.24L71.024 60.261l-29.781.007L59.47 6.544z"/>
44
+ <path fill="url(#a7fee970-a784-4bb1-af8d-63d18e5f7db9)" d="M66.595 9.364a4.145 4.145 0 0 0-3.928-2.82H33.648a4.146 4.146 0 0 1 3.928 2.82l25.184 74.62a4.146 4.146 0 0 1-3.928 5.472h29.02a4.146 4.146 0 0 0 3.927-5.472z"/>
45
+ </svg>`,
46
+ 'SAP': '<svg xmlns="http://www.w3.org/2000/svg" width="92" height="34" viewBox="0 0 92 45"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="45.483" x2="45.483" y2="45.001"><stop offset="0" stop-color="#00AEEF"/><stop offset=".212" stop-color="#0097DC"/><stop offset=".519" stop-color="#007CC5"/><stop offset=".792" stop-color="#006CB8"/><stop offset="1" stop-color="#0066B3"/></linearGradient><path fill-rule="evenodd" clip-rule="evenodd" fill="url(#a)" d="M0 45h45.974L90.966 0H0v45"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#fff" d="M53.984 9H45l.03 21.13-7.823-21.137H29.45l-6.678 17.653c-.71-4.492-5.354-6.042-9.008-7.203-2.413-.775-4.974-1.915-4.948-3.175.02-1.034 1.37-1.993 4.053-1.85 1.8.097 3.39.242 6.553 1.77l3.11-5.42C19.648 9.3 15.66 8.373 12.39 8.37h-.02c-3.813 0-6.988 1.235-8.956 3.27-1.372 1.42-2.112 3.226-2.142 5.223-.05 2.748.957 4.696 3.073 6.253 1.788 1.31 4.075 2.16 6.09 2.784 2.485.77 4.515 1.44 4.49 2.866-.02.52-.216 1.006-.59 1.398-.62.64-1.57.88-2.885.906-2.537.054-4.417-.345-7.413-2.116L1.27 34.444C4.263 36.146 7.44 37 11.05 37l.812-.006c3.142-.057 5.692-.81 7.718-2.44.116-.093.22-.187.328-.282l-.34 1.752 7.58-.024 1.36-3.482c1.43.488 3.056.758 4.782.758 1.682 0 3.264-.256 4.667-.716l.948 3.44 13.6.013.033-7.938h2.894c6.995 0 11.13-3.56 11.13-9.53C66.56 11.896 62.54 9 53.984 9zM33.29 27.062c-1.045 0-2.025-.182-2.868-.502l2.836-8.955h.055l2.79 8.98c-.84.3-1.797.477-2.814.477zm21.22-5.145h-1.974V14.7h1.975c2.63 0 4.73.876 4.73 3.562-.002 2.78-2.1 3.655-4.73 3.655"/><path fill="none" d="M0 0h92v45H0z"/></svg>',
47
+ 'Mfg': '<svg xmlns="http://www.w3.org/2000/svg" width="34" height="34" viewBox="0 0 316 316" xmlns:v="https://vecta.io/nano"><path fill="#5987c6" d="M216 317H1V1h316v316H216m-77.47-177.333l4.031-4.007 5.991-5.99 3.987-4.054c2.766-2.149 5.532-4.299 8.657-5.913 1.578 1.47 3.157 2.941 5.068 4.914.885.828 1.769 1.656 3.015 3.004 1.237 1.14 2.475 2.28 3.967 4.001 1.633 2.588 3.698 2.278 5.257.252 3.314-4.309 7.455-8.449 9.204-13.386 2.736-7.719 3.77-16.042 6.079-23.639 12.637 18.805 10.656 36.859-3.186 54.454l22.712 22.682c5.602 5.598 9.119 5.468 13.429-1.412 1.839-2.935 3.026-6.805 3.057-10.263l.112-80.96c-.026-10.421-6.832-17.24-17.248-17.258l-105.95-.001c-10.216.017-16.88 6.555-17.252 16.776-.176 4.825-.047 9.661-.047 14.492l-.019 65.969c-.019 7.052 2.351 12.759 8.745 16.191 1.185.636 3.601.866 4.35.144l26.872-26.622c-1.687-2.624-3.11-4.838-3.698-7.045 1.629.236 3.373.179 4.864.766 3.433 1.353 5.741.235 8.003-3.095m-28.629 104.622c16.81-12.977 13.985-34.878-5.713-42.848-11.526-4.664-23.187-4.121-34.385 1.248-8.953 4.293-14.261 11.465-14.312 21.649s5.271 17.245 14.093 21.813c7.806 4.042 16.217 4.961 24.775 3.813 3.487-.468 6.208.096 8.525 2.601 4.52 4.887 10.052 3.331 16.678 2.999-3.925-3.14-6.966-5.43-9.796-7.957-.557-.497-.3-1.905.135-3.317m152.202-15.717c1.905-14.393-7.117-26.47-22.892-28.378-10.464-1.266-21.205-.24-32.11-.24v49.662c9.41 0 18.436.62 27.343-.147 12.945-1.114 23.348-6.565 27.659-20.897m-97.214-24.007l-4.715-7.141-31.908 52.248c4.683-.513 9.413 2.295 11.215-2.513 3.753-10.017 11.014-12.053 20.44-10.681 1.957.285 4.046.342 5.979-.012 7.088-1.299 11.85 1.42 14.482 7.994 2.41 6.019 7.084 5.836 13.035 4.783l-28.529-44.677z"/><path fill="#fdfefe" d="M124.828 141.989l4.533 7.052-26.872 26.622c-.749.722-3.164.493-4.35-.144-6.393-3.433-8.763-9.139-8.745-16.191l.019-65.969c0-4.831-.129-9.667.047-14.492.373-10.222 7.036-16.759 17.252-16.776l105.95.001c10.416.018 17.221 6.837 17.248 17.258l-.112 80.96c-.031 3.458-1.218 7.328-3.057 10.263-4.309 6.88-7.827 7.01-13.429 1.412L190.6 149.302c13.841-17.595 15.823-35.648 2.791-54.982l-7.352-7.362c-2.502-1.664-4.808-3.078-7.363-4.678-2.051-.857-3.854-1.531-6.017-2.392-4.116-.716-7.872-1.243-12.052-1.83-3.155.271-5.887.6-8.954.932-1.191.256-2.047.509-3.277.793-8.513 2.465-15.507 6.575-20.703 13.946l-3.999 5.419c-.742 1.915-1.234 3.605-2.041 5.539-1.026 3.947-1.738 7.651-2.494 11.762-.105 1.773-.165 3.139-.523 4.742.424 4.07 1.145 7.903 1.951 12.112 1.476 3.147 2.868 5.917 4.261 8.687z"/><path d="M109.624 244.501c-.158 1.2-.415 2.608.141 3.105 2.83 2.527 5.871 4.818 9.796 7.957-6.626.332-12.158 1.889-16.678-2.999-2.317-2.505-5.038-3.068-8.525-2.601-8.558 1.148-16.969.229-24.775-3.813-8.822-4.568-14.144-11.625-14.093-21.813s5.359-17.356 14.312-21.649c11.198-5.369 22.859-5.912 34.385-1.248 19.698 7.97 22.522 29.87 5.436 43.06m-43.211-11.824c5.503 11.646 25.725 14.234 36.707 7.078 11.682-7.612 11.708-23.151-.138-30.585-7.671-4.814-16.021-5.134-24.472-2.448-11.458 3.643-16.387 13.817-12.098 25.954zm195.62-3.707c-4.241 13.935-14.644 19.386-27.589 20.501-8.907.767-17.933.147-27.343.147v-49.662c10.906 0 21.646-1.026 32.11.24 15.774 1.908 24.797 13.985 22.822 28.774m-31.807-23.207h-15.008l.076 34.867c.008.802 1.108 1.594 2.634 2.477 3.321.009 6.672.302 9.956-.04 4.744-.493 9.672-.788 14.104-2.352 7.419-2.618 11.717-9.693 11.457-17.028-.263-7.411-4.566-13.29-12.235-15.873-3.241-1.091-6.792-1.259-10.985-2.052z" fill="#fafbfd"/><path fill="#f8fafc" d="M165.072 204.877l28.345 44.366c-5.951 1.053-10.625 1.236-13.035-4.783-2.632-6.574-7.394-9.293-14.482-7.994-1.933.354-4.022.297-5.979.012-9.427-1.372-16.687.664-20.44 10.681-1.802 4.808-6.532 2-11.215 2.513l31.908-52.248 4.898 7.453m3.625 25.011c.181-.854.804-1.972.475-2.52-2.716-4.53-5.608-8.954-8.915-14.146l-9.939 16.701 18.379-.035z"/><path fill="#a9bbe1" d="M151.989 78.988l8.714-.61 3.468 4.295c10.255 11.79 8.907 26.675-3.335 36.494-2.766 2.149-5.532 4.299-8.914 6.499-5.6-.769-10.768-1.013-15.527-2.538-8.265-2.648-14.695-11.515-14.448-18.686.493-1.69.985-3.381 1.919-4.963.804 1.722 1.144 3.341 1.535 4.948 2.311 9.518 11.655 16.819 21.133 16.525 9.971-.309 18.447-7.468 20.434-17.26 2.198-10.826-3.58-20.354-14.98-24.705z"/><path fill="#98b0db" d="M161.016 119.435c12.063-10.087 13.411-24.972 3.156-36.762-1.07-1.23-1.971-2.607-3.045-4.236 3.661.208 7.417.735 11.562 1.822 1.073 2.421 1.679 4.316 2.456 6.139 5.914 13.884 2.482 27.987-9.214 37.715l-4.915-4.678z"/><path fill="#678fca" d="M186.235 87.207l6.879 6.879c-1.637 8.36-2.671 16.683-5.407 24.402-1.75 4.937-5.89 9.077-9.204 13.386-1.558 2.026-3.624 2.336-5.206-.832 6.746-8.411 12.446-16.82 13.194-27.454.382-5.427-.141-10.918-.256-16.381z"/><path fill="#7598cf" d="M186.039 86.958c.31 5.711.833 11.202.451 16.63-.748 10.634-6.448 19.043-13.321 27.163-1.416-.851-2.653-1.991-3.788-3.591 10.391-9.621 14.386-20.958 11.805-34.524-.649-3.41-1.502-6.782-2.261-10.171l7.114 4.493z"/><path d="M118.914 120.953c.06-1.365.12-2.731.568-4.465 2.366 1.037 4.258 2.59 6.341 3.818 4.618 2.723 9.22 5.52 14.054 7.81 2.469 1.17 5.424 1.313 8.159 1.921-1.825 1.874-3.65 3.748-6.092 5.659-2.659-.583-4.781-1.019-6.731-1.855-6.578-2.819-13.754-4.948-16.299-12.889zm59.762-38.672c1.008 3.574 1.861 6.945 2.509 10.355 2.581 13.566-1.414 24.903-11.985 34.264-1.168-.628-2.052-1.456-3.103-2.535 11.529-9.98 14.961-24.083 9.047-37.967-.776-1.823-1.382-3.718-2.096-5.95 1.774.302 3.577.975 5.628 1.833z" fill="#83a1d4"/><path fill="#98b0db" d="M148.294 129.853c-2.993-.423-5.948-.567-8.417-1.737-4.834-2.291-9.436-5.088-14.054-7.81-2.083-1.228-3.975-2.781-6.296-4.226.369-3.742 1.081-7.446 2.106-11.393.067 6.927 6.497 15.794 14.762 18.442 4.759 1.525 9.927 1.769 15.244 2.718-.807 1.36-1.948 2.591-3.346 4.006z"/><path fill="#7598cf" d="M118.617 121.19c2.843 7.703 10.019 9.832 16.597 12.651 1.95.836 4.072 1.272 6.46 2.038-.818 1.36-1.981 2.574-3.697 3.761-6.2-2.256-11.847-4.485-17.493-6.715-.721-3.832-1.443-7.665-1.866-11.735z"/><path fill="#678fca" d="M120.567 133.302c5.562 1.853 11.209 4.082 17.145 6.515-1.445 3.18-3.752 4.298-7.186 2.945-1.491-.587-3.235-.53-5.281-.769-1.809-2.773-3.201-5.544-4.678-8.69z"/><path fill="#c3cfea" d="M127.94 93.496c4.929-7.138 11.924-11.248 20.669-13.425 2.406 1.432 4.174 2.658 6.01 3.771 7.596 4.603 10.968 12.457 8.739 20.456-2.223 7.979-9.499 13.565-17.31 13.291-8.557-.3-15.316-5.906-17.234-14.678-.668-3.056-.603-6.272-.873-9.415m28.038-4.008c-5.92-4.925-15.687-4.683-20.351.505-4.944 5.5-4.696 14.06.565 19.502 5.366 5.551 13.493 5.768 19.278.516 5.995-5.444 6.418-13.527.508-20.523z"/><path fill="#b5c4e5" d="M127.674 93.729c.536 2.909.471 6.125 1.139 9.181 1.918 8.772 8.677 14.378 17.234 14.678 7.812.274 15.087-5.312 17.31-13.291 2.229-7.999-1.143-15.853-8.739-20.456-1.836-1.113-3.604-2.339-5.635-3.8.624-.541 1.479-.795 2.67-1.051 11.735 4.349 17.513 13.877 15.315 24.703-1.988 9.791-10.463 16.95-20.434 17.26-9.479.294-18.823-7.007-21.133-16.525-.39-1.607-.73-3.226-1.286-5.172.969-1.986 2.13-3.639 3.558-5.527z"/><path fill="#5b88c7" d="M66.244 232.314c-4.12-11.774.809-21.949 12.267-25.591 8.451-2.687 16.801-2.366 24.472 2.448 11.846 7.434 11.82 22.973.138 30.585-10.982 7.156-31.205 4.568-36.877-7.441z"/><path fill="#5987c6" d="M231.007 205.966c3.41.588 6.962.756 10.202 1.847 7.669 2.583 11.972 8.462 12.235 15.873.26 7.335-4.037 14.41-11.457 17.028-4.432 1.564-9.36 1.859-14.104 2.352-3.285.342-6.635.049-10.457-.472-.514-10.475-.452-20.438-.579-30.399-.048-3.815 1.51-5.388 5.334-5.366 2.94.017 5.883-.553 8.825-.862z"/><path fill="#7598cf" d="M230.616 205.864c-2.551.411-5.494.982-8.434.965-3.824-.022-5.382 1.551-5.334 5.366l.112 30.356c-.558-.328-1.658-1.119-1.666-1.922l-.076-34.867 15.399.102z"/><path fill="#5b88c7" d="M168.268 229.906l-17.95.018 9.939-16.701 8.915 14.146c.329.548-.293 1.666-.904 2.538z"/><path fill="#d1daef" d="M156.245 89.755c5.642 6.728 5.219 14.811-.776 20.255-5.784 5.252-13.912 5.035-19.278-.516-5.26-5.442-5.508-14.002-.565-19.502 4.663-5.188 14.431-5.43 20.619-.237M141.22 109.5c7.52 2.499 13.571.015 15.388-6.317 1.959-6.827-1.127-12.474-7.878-14.415-4.788-1.376-9.851 1.111-12.38 6.082-2.637 5.182-1.152 10.277 4.869 14.65z"/><path fill="#dde4f3" d="M140.873 109.339c-5.674-4.212-7.159-9.307-4.523-14.489 2.529-4.971 7.592-7.458 12.38-6.082 6.751 1.941 9.837 7.588 7.878 14.415-1.817 6.331-7.869 8.816-15.735 6.156m-.335-13.291c-2.689 3.582-1.067 6.858 1.949 8.42 2.184 1.131 6.138 1.123 8.042-.196 1.553-1.076 2.432-5.544 1.441-7.24-1.166-1.996-4.583-2.944-7.211-3.679-.964-.27-2.462 1.368-4.222 2.695z"/><path fill="#f8fafc" d="M140.791 95.768c1.507-1.047 3.005-2.685 3.969-2.415 2.628.735 6.045 1.683 7.211 3.679.991 1.697.112 6.165-1.441 7.24-1.904 1.319-5.858 1.327-8.042.196-3.016-1.562-4.639-4.839-1.697-8.7m3.542-.034c-2.887 3.592-2.602 7.036.84 7.763 1.378.291 3.525-.233 4.408-1.212s1.371-3.706.71-4.391c-1.257-1.303-3.457-1.696-5.958-2.161z"/><path fill="#fdfefe" d="M144.68 95.581c2.155.618 4.354 1.011 5.612 2.313.661.685.174 3.412-.71 4.391s-3.03 1.503-4.408 1.212c-3.443-.727-3.727-4.171-.494-7.916z"/></svg>'
48
+ };
16
49
  /**/
17
50
  export class DesignerItemComponent {
18
- constructor(_injector, _pane, _fb, _cfr) {
51
+ constructor(_injector, _pane, _fb, _service, _cfr, _element) {
19
52
  this._injector = _injector;
20
53
  this._pane = _pane;
21
54
  this._fb = _fb;
55
+ this._service = _service;
22
56
  this._cfr = _cfr;
57
+ this._element = _element;
58
+ this.svg = SVG;
23
59
  if (_pane && _pane.dialog) {
24
- const { designer, editMode, isNew, model, template } = _pane.data;
25
- this._model = model;
26
- this._isNew = isNew;
60
+ const { designer, mode, model, template } = _pane.data;
27
61
  Object.assign(this, {
28
- designer, editMode,
62
+ designer, mode,
29
63
  model: JSON.parse(JSON.stringify(model)),
30
64
  template
31
65
  });
32
66
  }
33
67
  }
68
+ ngAfterViewInit() {
69
+ this.mode === 'edit' &&
70
+ this._element.nativeElement.querySelector('input')?.focus();
71
+ }
34
72
  save() {
35
- if (this._isNew) {
36
- }
37
- Object.assign(this._model, this.model);
73
+ this.change.emit(this.model);
38
74
  this._pane.close();
39
75
  }
40
76
  ngOnInit() {
41
77
  if (!this.model.options)
42
78
  this.model.options = {};
79
+ this._ref = new DesignerRef(this.designer, this.model);
43
80
  const injector = Injector.create([{
44
- provide: DesignerRef, useValue: new DesignerRef(this.designer, this.model)
81
+ provide: DesignerRef, useValue: this._ref
45
82
  }], this._injector);
46
83
  let typeinstance;
47
84
  let factory = this._cfr.resolve(this.template);
48
85
  let cRef = this._container.createComponent(factory, 0, injector);
49
86
  cRef.instance.model = this.model;
50
- cRef.instance.editMode = this.editMode;
87
+ cRef.instance.mode = this.mode;
51
88
  typeinstance = cRef.instance;
52
89
  let elementinstance;
53
90
  if (this.model.template) {
54
91
  let factory = this._cfr.resolve(this.model.template);
55
92
  let cRef = this._econtainer.createComponent(factory, 0, injector);
56
93
  cRef.instance.model = this.model;
57
- cRef.instance.editMode = this.editMode;
94
+ cRef.instance.mode = this.mode;
58
95
  elementinstance = cRef.instance;
59
96
  }
60
- if (this.editMode) {
97
+ if (this.mode === 'edit') {
61
98
  this.change = new EventEmitter();
62
99
  this.form = this._fb.group({
63
100
  name: this._fb.control(null, Validators.required),
64
101
  title: this._fb.control(null, Validators.required),
65
102
  });
103
+ this.model.resource && this.form.get('title').disable();
66
104
  this._destroy = new Subject();
67
105
  const { name, title } = this.form.controls;
68
106
  !this.model.draft && name.disable();
69
- this.model.draft && title.valueChanges.pipe(takeUntil(this._destroy)).subscribe((t) => t && name.setValue(programName(t)));
107
+ this.model.draft && title.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe((t) => t && name.setValue(programName(t)));
108
+ if (this.model.privileges) {
109
+ this.form.addControl('privileges', this._fb.group({
110
+ rule: null,
111
+ roles: this._fb.control(null),
112
+ }), { emitEvent: false });
113
+ this._service.roles().subscribe(r => {
114
+ this.roles = r.concat(this.designer.roles.
115
+ filter(r => !r.disabled).
116
+ map(r => ({
117
+ name: r.name,
118
+ title: r.title,
119
+ dataType: r.dataType
120
+ })));
121
+ });
122
+ }
123
+ if (!elementinstance && this.model.arguments?.length) {
124
+ const options = this._fb.group({});
125
+ this.model.arguments?.forEach(a => options.addControl(a.name, this._fb.control(null, this._validations(a))));
126
+ this.form.addControl('options', options, { emitEvent: false });
127
+ }
70
128
  this.form.patchValue(this.model);
71
- this.form.valueChanges.pipe(takeUntil(this._destroy)).
129
+ this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).
72
130
  subscribe(v => {
73
131
  Object.assign(this.model, v);
74
132
  this.dirty = true;
75
- this.change.emit();
76
133
  });
77
134
  let state, typestate, elementstate;
78
135
  function validate() {
@@ -83,30 +140,74 @@ export class DesignerItemComponent {
83
140
  this.valid = validate();
84
141
  });
85
142
  typeinstance.form.patchValue(this.model);
86
- typeinstance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
143
+ typeinstance.form.statusChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe(s => {
87
144
  typestate = s;
88
145
  this.valid = validate();
89
146
  });
90
- typeinstance.form.valueChanges.pipe(takeUntil(this._destroy)).subscribe(v => {
147
+ typeinstance.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe(v => {
91
148
  Object.assign(this.model, v);
92
149
  this.dirty = true;
93
- this.change.emit();
94
150
  });
95
151
  if (elementinstance) {
96
152
  elementinstance.form.patchValue(this.model.options);
97
- elementinstance.form.valueChanges.pipe(takeUntil(this._destroy)).
153
+ elementinstance.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).
98
154
  subscribe(v => this.assignargs(v));
99
- elementinstance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
155
+ elementinstance.form.statusChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe(s => {
100
156
  typestate = s;
101
157
  this.valid = validate();
102
158
  });
103
159
  }
104
160
  }
105
161
  }
106
- assignargs(evt) {
107
- Object.assign(this.model.options, evt);
162
+ _validations(field) {
163
+ const validators = [];
164
+ field.validations.forEach(v => {
165
+ switch (v.type) {
166
+ case ValidationType.Required:
167
+ if (field.type === FieldType.Checkbox || field.type === FieldType.Switch)
168
+ validators.push(Validators.requiredTrue);
169
+ else
170
+ validators.push(Validators.required);
171
+ break;
172
+ case ValidationType.Pattern:
173
+ validators.push(Validators.pattern(field.pattern));
174
+ break;
175
+ case ValidationType.Min:
176
+ validators.push(Validators.min(field.min));
177
+ break;
178
+ case ValidationType.Max:
179
+ validators.push(Validators.max(field.max));
180
+ break;
181
+ case ValidationType.MinLength:
182
+ validators.push(Validators.minLength(field.min));
183
+ break;
184
+ case ValidationType.MaxLength:
185
+ validators.push(Validators.maxLength(field.max));
186
+ break;
187
+ case ValidationType.Email:
188
+ validators.push(Validators.email);
189
+ break;
190
+ case ValidationType.Range:
191
+ validators.push(Validators.min(field.min));
192
+ validators.push(Validators.max(field.max));
193
+ break;
194
+ }
195
+ });
196
+ return validators;
197
+ }
198
+ setOptions(obj) {
199
+ this.form.get('options').patchValue(obj);
200
+ }
201
+ unlock(evt) {
202
+ if (evt.srcElement.tagName !== 'A')
203
+ return;
204
+ this.model.resource = null;
205
+ this.form.get('title').enable();
206
+ this._ref._lock$.next(false);
207
+ }
208
+ assignargs(args) {
209
+ Object.assign(this.model.options, args);
108
210
  this.dirty = true;
109
- this.change.emit();
110
211
  }
111
212
  /**
112
213
  * Ctrl-s save
@@ -122,14 +223,14 @@ export class DesignerItemComponent {
122
223
  this._destroy?.next();
123
224
  }
124
225
  }
125
- DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.Injector }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });
126
- DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { template: "template", model: "model", designer: "designer" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"editMode; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
226
+ DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.Injector }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.SystemService }, { token: i4.BizDocComponentFactoryResolver }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
227
+ DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { template: "template", model: "model", designer: "designer" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"mode === 'edit'; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <!--<span class=\"family\">{{model.family}}</span>-->\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\" *ngIf=\"mode === 'edit'\">\r\n <ng-container *ngIf=\"model.arguments?.length\">\r\n <bizdoc-layout [fields]=\"model.arguments\" [model]=\"model.options\"\r\n (modelChange)=\"setOptions($event)\"></bizdoc-layout>\r\n <!--<ng-container *ngFor=\"let field or model.arguments\">\r\n <ng-container [ngSwitch]=\"field.type\">\r\n <ng-container ngSwitchDefault>\r\n <mat-form-field>\r\n <mat-label *ngIf=\"field.placeholder\">{{field.label || field.name}}</mat-label>\r\n <input matInput [type]=\"field.type\" autocomplete=\"off\" formControlName=control [placeholder]=\"field.placeholder || field.label || field.name\"\r\n [required]=\"field.required\" [minlength]=\"field.min\" [maxlength]=\"field.max\" [pattern]=\"field.pattern\" />\r\n <mat-hint *ngIf=\"field.hint\"> {{ field.hint }}</mat-hint>\r\n <ng-container>\r\n <mat-error *ngFor=\"let v of field.validations\" *ngIf=\"control.hasError(v.type.toLowerCase())\"> {{ v.message }} </mat-error>\r\n </ng-container>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n -->\r\n </ng-container>\r\n <ng-container *ngIf=\"model.privileges\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i6.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i6.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i7.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.LayoutComponent, selector: "bizdoc-layout", inputs: ["fields", "model", "dirty", "params", "valid"], outputs: ["modelChange", "dirtyChange", "validChange"] }, { kind: "component", type: i13.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i14.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] });
127
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, decorators: [{
128
229
  type: Component,
129
- args: [{ selector: 'bizdoc-designer-element', template: "<ng-container *ngIf=\"editMode; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"] }]
230
+ args: [{ selector: 'bizdoc-designer-element', template: "<ng-container *ngIf=\"mode === 'edit'; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <!--<span class=\"family\">{{model.family}}</span>-->\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\" *ngIf=\"mode === 'edit'\">\r\n <ng-container *ngIf=\"model.arguments?.length\">\r\n <bizdoc-layout [fields]=\"model.arguments\" [model]=\"model.options\"\r\n (modelChange)=\"setOptions($event)\"></bizdoc-layout>\r\n <!--<ng-container *ngFor=\"let field or model.arguments\">\r\n <ng-container [ngSwitch]=\"field.type\">\r\n <ng-container ngSwitchDefault>\r\n <mat-form-field>\r\n <mat-label *ngIf=\"field.placeholder\">{{field.label || field.name}}</mat-label>\r\n <input matInput [type]=\"field.type\" autocomplete=\"off\" formControlName=control [placeholder]=\"field.placeholder || field.label || field.name\"\r\n [required]=\"field.required\" [minlength]=\"field.min\" [maxlength]=\"field.max\" [pattern]=\"field.pattern\" />\r\n <mat-hint *ngIf=\"field.hint\"> {{ field.hint }}</mat-hint>\r\n <ng-container>\r\n <mat-error *ngFor=\"let v of field.validations\" *ngIf=\"control.hasError(v.type.toLowerCase())\"> {{ v.message }} </mat-error>\r\n </ng-container>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n -->\r\n </ng-container>\r\n <ng-container *ngIf=\"model.privileges\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"] }]
130
231
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.PaneRef, decorators: [{
131
232
  type: Optional
132
- }] }, { type: i2.FormBuilder }, { type: i3.BizDocComponentFactoryResolver }]; }, propDecorators: { template: [{
233
+ }] }, { type: i2.FormBuilder }, { type: i3.SystemService }, { type: i4.BizDocComponentFactoryResolver }, { type: i0.ElementRef }]; }, propDecorators: { template: [{
133
234
  type: Input
134
235
  }], model: [{
135
236
  type: Input
@@ -145,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
145
246
  type: HostListener,
146
247
  args: ['document:keydown', ['$event']]
147
248
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFVLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQTZDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQXVGLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFTaEosSUFBSTtBQU1KLE1BQU0sT0FDRSxxQkFBcUI7SUFjM0IsWUFDVSxTQUFtQixFQUNQLEtBQWMsRUFDMUIsR0FBZ0IsRUFDaEIsSUFBb0M7UUFIcEMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNQLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUFnQztRQUU1QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQWtCLENB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QUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRTRELFVBQVU7c0JBQTNFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0csV0FBVztzQkFBN0UsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFrSGpFLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbXBvbmVudC1mYWN0b3J5LXJlc29sdmVyXCI7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgRWxlbWVudE1vZGVsLCBEZXNpZ25lckVsZW1lbnRDb21wb25lbnQsIERlc2lnbmVyTW9kZWwsIERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQsIHByb2dyYW1OYW1lIH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbGVtZXREYXRhIHtcclxuICBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBpc05ldzogYm9vbGVhbjtcclxuICB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw7XHJcbiAgZGVzaWduZXI6IERlc2lnbmVyTW9kZWw7XHJcbn1cclxuLyoqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1kZXNpZ25lci1lbGVtZW50JyxcclxuICBzdHlsZVVybHM6IFsnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgRGVzaWduZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBtb2RlbCE6IEVsZW1lbnRNb2RlbDtcclxuICBASW5wdXQoKSBkZXNpZ25lciE6IERlc2lnbmVyTW9kZWw7XHJcbiAgY2hhbmdlOiBFdmVudEVtaXR0ZXI8dm9pZD47XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgZGlydHk6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfaXNOZXc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3k6IFN1YmplY3Q8dm9pZD47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgKSB7XHJcbiAgICBpZiAoX3BhbmUgJiYgX3BhbmUuZGlhbG9nKSB7XHJcbiAgICAgIGNvbnN0IHsgZGVzaWduZXIsIGVkaXRNb2RlLCBpc05ldywgbW9kZWwsIHRlbXBsYXRlIH0gPSBfcGFuZS5kYXRhIGFzIEVsZW1ldERhdGE7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XHJcbiAgICAgIHRoaXMuX2lzTmV3ID0gaXNOZXc7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywge1xyXG4gICAgICAgIGRlc2lnbmVyLCBlZGl0TW9kZSxcclxuICAgICAgICBtb2RlbDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb2RlbCkpLFxyXG4gICAgICAgIHRlbXBsYXRlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuX2lzTmV3KSB7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX21vZGVsLCB0aGlzLm1vZGVsKTtcclxuICAgIHRoaXMuX3BhbmUuY2xvc2UoKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwub3B0aW9ucykgdGhpcy5tb2RlbC5vcHRpb25zID0ge307XHJcblxyXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoW3tcclxuICAgICAgcHJvdmlkZTogRGVzaWduZXJSZWYsIHVzZVZhbHVlOiBuZXcgRGVzaWduZXJSZWYodGhpcy5kZXNpZ25lciwgdGhpcy5tb2RlbClcclxuICAgIH1dLCB0aGlzLl9pbmplY3Rvcik7XHJcblxyXG4gICAgbGV0IHR5cGVpbnN0YW5jZTtcclxuXHJcbiAgICBsZXQgZmFjdG9yeSA9IHRoaXMuX2Nmci5yZXNvbHZlKHRoaXMudGVtcGxhdGUpO1xyXG5cclxuICAgIGxldCBjUmVmID0gdGhpcy5fY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lclR5cGVFbGVtZW50Q29tcG9uZW50PihmYWN0b3J5LCAwLCBpbmplY3Rvcik7XHJcbiAgICBjUmVmLmluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgIGNSZWYuaW5zdGFuY2UuZWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlO1xyXG4gICAgdHlwZWluc3RhbmNlID0gY1JlZi5pbnN0YW5jZTtcclxuXHJcbiAgICBsZXQgZWxlbWVudGluc3RhbmNlO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGxldCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUodGhpcy5tb2RlbC50ZW1wbGF0ZSk7XHJcblxyXG4gICAgICBsZXQgY1JlZiA9IHRoaXMuX2Vjb250YWluZXIuY3JlYXRlQ29tcG9uZW50PERlc2lnbmVyRWxlbWVudENvbXBvbmVudD4oZmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgY1JlZi5pbnN0YW5jZS5lZGl0TW9kZSA9IHRoaXMuZWRpdE1vZGU7XHJcbiAgICAgIGVsZW1lbnRpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgICBuYW1lOiB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5fZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAgIGNvbnN0IHsgbmFtZSwgdGl0bGUgfSA9IHRoaXMuZm9ybS5jb250cm9scztcclxuICAgICAgIXRoaXMubW9kZWwuZHJhZnQgJiYgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMubW9kZWwuZHJhZnQgJiYgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgICB0ICYmIG5hbWUuc2V0VmFsdWUocHJvZ3JhbU5hbWUodCkpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgICBzdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHYpO1xyXG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGxldCBzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXMsIHR5cGVzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXMsIGVsZW1lbnRzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXM7XHJcbiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAoIXR5cGVzdGF0ZSB8fCB0eXBlc3RhdGUgPT09ICdWQUxJRCcpICYmICghc3RhdGUgfHwgc3RhdGUgPT09ICdWQUxJRCcpICYmICghZWxlbWVudHN0YXRlIHx8IGVsZW1lbnRzdGF0ZSA9PT0gJ1ZBTElEJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgICBzdGF0ZSA9IHM7XHJcbiAgICAgICAgdGhpcy52YWxpZCA9IHZhbGlkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0eXBlaW5zdGFuY2UuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0eXBlaW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgdHlwZXN0YXRlID0gcztcclxuICAgICAgICB0aGlzLnZhbGlkID0gdmFsaWRhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHR5cGVpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdik7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVsZW1lbnRpbnN0YW5jZSkge1xyXG4gICAgICAgIGVsZW1lbnRpbnN0YW5jZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbC5vcHRpb25zKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICAgICAgc3Vic2NyaWJlKHYgPT4gdGhpcy5hc3NpZ25hcmdzKHYpKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgICB0eXBlc3RhdGUgPSBzO1xyXG4gICAgICAgICAgdGhpcy52YWxpZCA9IHZhbGlkYXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYXNzaWduYXJncyhldnQpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbC5vcHRpb25zLCBldnQpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRNb2RlOyBlbHNlIGluZm9cIj5cclxuICA8bWF0LXRvb2xiYXI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiF2YWxpZFwiPjxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L21hdC10b29sYmFyPlxyXG4gIDxzcGFuIGNsYXNzPVwiaGVscFwiPnt7bW9kZWwuaGVscH19PC9zcGFuPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgJm5ic3A7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNpbmZvPlxyXG4gIDxzcGFuIGNsYXNzPVwiZmFtaWx5XCI+e3ttb2RlbC5mYW1pbHl9fTwvc3Bhbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiJdfQ==
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUEwRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEQsT0FBTyxFQUFhLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RSxPQUFPLEVBQUUsV0FBVyxFQUEyRixXQUFXLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEssTUFBTSxHQUFHLEdBQUc7SUFDVixPQUFPLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQko7SUFDTCxLQUFLLEVBQUUsMGhEQUEwaEQ7SUFDamlELEtBQUssRUFBRSw4eVJBQTh5UjtDQUN0elIsQ0FBQztBQVFGLElBQUk7QUFNSixNQUFNLE9BQ0UscUJBQXFCO0lBZTNCLFlBQ1UsU0FBbUIsRUFDUCxLQUFjLEVBQzFCLEdBQWdCLEVBQ2hCLFFBQXVCLEVBQ3ZCLElBQW9DLEVBQ3BDLFFBQW9DO1FBTHBDLGNBQVMsR0FBVCxT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Q0FBQztJQUNwQixDQUFDO0lBQ0Q7OztPQUdHO0lBRUgsbUJBQW1CLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7a0hBdk1LLHFCQUFxQjtzR0FBckIscUJBQXFCLHVTQVFtQixnQkFBZ0Isa0hBQ2YsZ0JBQWdCLDJDQzNEakUscS9GQTREQTsyRkRWUSxxQkFBcUI7a0JBTjVCLFNBQVM7K0JBQ0UseUJBQXlCOzswQkFzQmhDLFFBQVE7d0tBYkYsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFNEQsVUFBVTtzQkFBM0UsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxXQUFXO3NCQUE3RSxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQXNMakUsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbXBvbmVudC1mYWN0b3J5LXJlc29sdmVyXCI7XHJcbmltcG9ydCB7IEZpZWxkSW5mbywgRmllbGRUeXBlLCBWYWxpZGF0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWZcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgRWxlbWVudE1vZGVsLCBEZXNpZ25lckVsZW1lbnRDb21wb25lbnRCYXNlLCBEZXNpZ25lck1vZGVsLCBEZXNpZ25lclR5cGVFbGVtZW50Q29tcG9uZW50LCBwcm9ncmFtTmFtZSwgRGVzaWduTW9kZSB9IGZyb20gXCIuL2Rlc2lnbmVyLmJhc2VcIjtcclxuXHJcbmNvbnN0IFNWRyA9IHtcclxuICBcIkF6dXJlXCI6IGA8c3ZnIHdpZHRoPVwiMzRcIiBoZWlnaHQ9XCIzNFwiIHZpZXdCb3g9XCIwIDAgOTYgOTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICA8ZGVmcz5cclxuICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJlMzk5YzE5Zi1iNjhmLTQyOWQtYjE3Ni0xOGMyMTE3ZmY3M2NcIiB4MT1cIi0xMDMyLjE3MlwiIHgyPVwiLTEwNTkuMjEzXCIgeTE9XCIxNDUuMzEyXCIgeTI9XCI2NS40MjZcIiBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAxMDc1IDE1OClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMFwiIHN0b3AtY29sb3I9XCIjMTE0YThiXCIvPlxyXG4gICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIxXCIgc3RvcC1jb2xvcj1cIiMwNjY5YmNcIi8+XHJcbiAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJhYzJhNmZjMi1jYTQ4LTQzMjctOWEzYy1kNGRjYzMyNTZlMTVcIiB4MT1cIi0xMDIzLjcyNVwiIHgyPVwiLTEwMjkuOThcIiB5MT1cIjEwOC4wODNcIiB5Mj1cIjEwNS45NjhcIiBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAxMDc1IDE1OClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMFwiIHN0b3Atb3BhY2l0eT1cIi4zXCIvPlxyXG4gICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIuMDcxXCIgc3RvcC1vcGFjaXR5PVwiLjJcIi8+XHJcbiAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIi4zMjFcIiBzdG9wLW9wYWNpdHk9XCIuMVwiLz5cclxuICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiLjYyM1wiIHN0b3Atb3BhY2l0eT1cIi4wNVwiLz5cclxuICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMVwiIHN0b3Atb3BhY2l0eT1cIjBcIi8+XHJcbiAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJhN2ZlZTk3MC1hNzg0LTRiYjEtYWY4ZC02M2QxOGU1ZjdkYjlcIiB4MT1cIi0xMDI3LjE2NVwiIHgyPVwiLTk5Ny40ODJcIiB5MT1cIjE0Ny42NDJcIiB5Mj1cIjY4LjU2MVwiIGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDEwNzUgMTU4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwXCIgc3RvcC1jb2xvcj1cIiMzY2NiZjRcIi8+XHJcbiAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjFcIiBzdG9wLWNvbG9yPVwiIzI4OTJkZlwiLz5cclxuICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgPC9kZWZzPlxyXG4gICAgPHBhdGggZmlsbD1cInVybCgjZTM5OWMxOWYtYjY4Zi00MjlkLWIxNzYtMThjMjExN2ZmNzNjKVwiIGQ9XCJNMzMuMzM4IDYuNTQ0aDI2LjAzOGwtMjcuMDMgODAuMDg3YTQuMTUyIDQuMTUyIDAgMCAxLTMuOTMzIDIuODI0SDguMTQ5YTQuMTQ1IDQuMTQ1IDAgMCAxLTMuOTI4LTUuNDdMMjkuNDA0IDkuMzY4YTQuMTUyIDQuMTUyIDAgMCAxIDMuOTM0LTIuODI1elwiLz5cclxuICAgIDxwYXRoIGZpbGw9XCIjMDA3OGQ0XCIgZD1cIk03MS4xNzUgNjAuMjYxaC00MS4yOWExLjkxMSAxLjkxMSAwIDAgMC0xLjMwNSAzLjMwOWwyNi41MzIgMjQuNzY0YTQuMTcxIDQuMTcxIDAgMCAwIDIuODQ2IDEuMTIxaDIzLjM4elwiLz5cclxuICAgIDxwYXRoIGZpbGw9XCJ1cmwoI2FjMmE2ZmMyLWNhNDgtNDMyNy05YTNjLWQ0ZGNjMzI1NmUxNSlcIiBkPVwiTTMzLjMzOCA2LjU0NGE0LjExOCA0LjExOCAwIDAgMC0zLjk0MyAyLjg3OUw0LjI1MiA4My45MTdhNC4xNCA0LjE0IDAgMCAwIDMuOTA4IDUuNTM4aDIwLjc4N2E0LjQ0MyA0LjQ0MyAwIDAgMCAzLjQxLTIuOWw1LjAxNC0xNC43NzcgMTcuOTEgMTYuNzA1YTQuMjM3IDQuMjM3IDAgMCAwIDIuNjY2Ljk3Mkg4MS4yNEw3MS4wMjQgNjAuMjYxbC0yOS43ODEuMDA3TDU5LjQ3IDYuNTQ0elwiLz5cclxuICAgIDxwYXRoIGZpbGw9XCJ1cmwoI2E3ZmVlOTcwLWE3ODQtNGJiMS1hZjhkLTYzZDE4ZTVmN2RiOSlcIiBkPVwiTTY2LjU5NSA5LjM2NGE0LjE0NSA0LjE0NSAwIDAgMC0zLjkyOC0yLjgySDMzLjY0OGE0LjE0NiA0LjE0NiAwIDAgMSAzLjkyOCAyLjgybDI1LjE4NCA3NC42MmE0LjE0NiA0LjE0NiAwIDAgMS0zLjkyOCA1LjQ3MmgyOS4wMmE0LjE0NiA0LjE0NiAwIDAgMCAzLjkyNy01LjQ3MnpcIi8+XHJcbjwvc3ZnPmAsXHJcbiAgJ1NBUCc6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiMzRcIiB2aWV3Qm94PVwiMCAwIDkyIDQ1XCI+PGxpbmVhckdyYWRpZW50IGlkPVwiYVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIHgxPVwiNDUuNDgzXCIgeDI9XCI0NS40ODNcIiB5Mj1cIjQ1LjAwMVwiPjxzdG9wIG9mZnNldD1cIjBcIiBzdG9wLWNvbG9yPVwiIzAwQUVFRlwiLz48c3RvcCBvZmZzZXQ9XCIuMjEyXCIgc3RvcC1jb2xvcj1cIiMwMDk3RENcIi8+PHN0b3Agb2Zmc2V0PVwiLjUxOVwiIHN0b3AtY29sb3I9XCIjMDA3Q0M1XCIvPjxzdG9wIG9mZnNldD1cIi43OTJcIiBzdG9wLWNvbG9yPVwiIzAwNkNCOFwiLz48c3RvcCBvZmZzZXQ9XCIxXCIgc3RvcC1jb2xvcj1cIiMwMDY2QjNcIi8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGZpbGw9XCJ1cmwoI2EpXCIgZD1cIk0wIDQ1aDQ1Ljk3NEw5MC45NjYgMEgwdjQ1XCIvPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZmlsbD1cIiNmZmZcIiBkPVwiTTUzLjk4NCA5SDQ1bC4wMyAyMS4xMy03LjgyMy0yMS4xMzdIMjkuNDVsLTYuNjc4IDE3LjY1M2MtLjcxLTQuNDkyLTUuMzU0LTYuMDQyLTkuMDA4LTcuMjAzLTIuNDEzLS43NzUtNC45NzQtMS45MTUtNC45NDgtMy4xNzUuMDItMS4wMzQgMS4zNy0xLjk5MyA0LjA1My0xLjg1IDEuOC4wOTcgMy4zOS4yNDIgNi41NTMgMS43N2wzLjExLTUuNDJDMTkuNjQ4IDkuMyAxNS42NiA4LjM3MyAxMi4zOSA4LjM3aC0uMDJjLTMuODEzIDAtNi45ODggMS4yMzUtOC45NTYgMy4yNy0xLjM3MiAxLjQyLTIuMTEyIDMuMjI2LTIuMTQyIDUuMjIzLS4wNSAyLjc0OC45NTcgNC42OTYgMy4wNzMgNi4yNTMgMS43ODggMS4zMSA0LjA3NSAyLjE2IDYuMDkgMi43ODQgMi40ODUuNzcgNC41MTUgMS40NCA0LjQ5IDIuODY2LS4wMi41Mi0uMjE2IDEuMDA2LS41OSAxLjM5OC0uNjIuNjQtMS41Ny44OC0yLjg4NS45MDYtMi41MzcuMDU0LTQuNDE3LS4zNDUtNy40MTMtMi4xMTZMMS4yNyAzNC40NDRDNC4yNjMgMzYuMTQ2IDcuNDQgMzcgMTEuMDUgMzdsLjgxMi0uMDA2YzMuMTQyLS4wNTcgNS42OTItLjgxIDcuNzE4LTIuNDQuMTE2LS4wOTMuMjItLjE4Ny4zMjgtLjI4MmwtLjM0IDEuNzUyIDcuNTgtLjAyNCAxLjM2LTMuNDgyYzEuNDMuNDg4IDMuMDU2Ljc1OCA0Ljc4Mi43NTggMS42ODIgMCAzLjI2NC0uMjU2IDQuNjY3LS43MTZsLjk0OCAzLjQ0IDEzLjYuMDEzLjAzMy03LjkzOGgyLjg5NGM2Ljk5NSAwIDExLjEzLTMuNTYgMTEuMTMtOS41M0M2Ni41NiAxMS44OTYgNjIuNTQgOSA1My45ODQgOXpNMzMuMjkgMjcuMDYyYy0xLjA0NSAwLTIuMDI1LS4xODItMi44NjgtLjUwMmwyLjgzNi04Ljk1NWguMDU1bDIuNzkgOC45OGMtLjg0LjMtMS43OTcuNDc3LTIuODE0LjQ3N3ptMjEuMjItNS4xNDVoLTEuOTc0VjE0LjdoMS45NzVjMi42MyAwIDQuNzMuODc2IDQuNzMgMy41NjItLjAwMiAyLjc4LTIuMSAzLjY1NS00LjczIDMuNjU1XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoOTJ2NDVIMHpcIi8+PC9zdmc+JyxcclxuICAnTWZnJzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzRcIiBoZWlnaHQ9XCIzNFwiIHZpZXdCb3g9XCIwIDAgMzE2IDMxNlwiIHhtbG5zOnY9XCJodHRwczovL3ZlY3RhLmlvL25hbm9cIj48cGF0aCBmaWxsPVwiIzU5ODdjNlwiIGQ9XCJNMjE2IDMxN0gxVjFoMzE2djMxNkgyMTZtLTc3LjQ3LTE3Ny4zMzNsNC4wMzEtNC4wMDcgNS45OTEtNS45OSAzLjk4Ny00LjA1NGMyLjc2Ni0yLjE0OSA1LjUzMi00LjI5OSA4LjY1Ny01LjkxMyAxLjU3OCAxLjQ3IDMuMTU3IDIuOTQxIDUuMDY4IDQuOTE0Ljg4NS44MjggMS43NjkgMS42NTYgMy4wMTUgMy4wMDQgMS4yMzcgMS4xNCAyLjQ3NSAyLjI4IDMuOTY3IDQuMDAxIDEuNjMzIDIuNTg4IDMuNjk4IDIuMjc4IDUuMjU3LjI1MiAzLjMxNC00LjMwOSA3LjQ1NS04LjQ0OSA5LjIwNC0xMy4zODYgMi43MzYtNy43MTkgMy43Ny0xNi4wNDIgNi4wNzktMjMuNjM5IDEyLjYzNyAxOC44MDUgMTAuNjU2IDM2Ljg1OS0zLjE4NiA1NC40NTRsMjIuNzEyIDIyLjY4MmM1LjYwMiA1LjU5OCA5LjExOSA1LjQ2OCAxMy40MjktMS40MTIgMS44MzktMi45MzUgMy4wMjYtNi44MDUgMy4wNTctMTAuMjYzbC4xMTItODAuOTZjLS4wMjYtMTAuNDIxLTYuODMyLTE3LjI0LTE3LjI0OC0xNy4yNThsLTEwNS45NS0uMDAxYy0xMC4yMTYuMDE3LTE2Ljg4IDYuNTU1LTE3LjI1MiAxNi43NzYtLjE3NiA0LjgyNS0uMDQ3IDkuNjYxLS4wNDcgMTQuNDkybC0uMDE5IDY1Ljk2OWMtLjAxOSA3LjA1MiAyLjM1MSAxMi43NTkgOC43NDUgMTYuMTkxIDEuMTg1LjYzNiAzLjYwMS44NjYgNC4zNS4xNDRsMjYuODcyLTI2LjYyMmMtMS42ODctMi42MjQtMy4xMS00LjgzOC0zLjY5OC03LjA0NSAxLjYyOS4yMzYgMy4zNzMuMTc5IDQuODY0Ljc2NiAzLjQzMyAxLjM1MyA1Ljc0MS4yMzUgOC4wMDMtMy4wOTVtLTI4LjYyOSAxMDQuNjIyYzE2LjgxLTEyLjk3NyAxMy45ODUtMzQuODc4LTUuNzEzLTQyLjg0OC0xMS41MjYtNC42NjQtMjMuMTg3LTQuMTIxLTM0LjM4NSAxLjI0OC04Ljk1MyA0LjI5My0xNC4yNjEgMTEuNDY1LTE0LjMxMiAyMS42NDlzNS4yNzEgMTcuMjQ1IDE0LjA5MyAyMS44MTNjNy44MDYgNC4wNDIgMTYuMjE3IDQuOTYxIDI0Ljc3NSAzLjgxMyAzLjQ4Ny0uNDY4IDYuMjA4LjA5NiA4LjUyNSAyLjYwMSA0LjUyIDQuODg3IDEwLjA1MiAzLjMzMSAxNi42NzggMi45OTktMy45MjUtMy4xNC02Ljk2Ni01LjQzLTkuNzk2LTcuOTU3LS41NTctLjQ5Ny0uMy0xLjkwNS4xMzUtMy4zMTdtMTUyLjIwMi0xNS43MTdjMS45MDUtMTQuMzkzLTcuMTE3LTI2LjQ3LTIyLjg5Mi0yOC4zNzgtMTAuNDY0LTEuMjY2LTIxLjIwNS0uMjQtMzIuMTEtLjI0djQ5LjY2MmM5LjQxIDAgMTguNDM2LjYyIDI3LjM0My0uMTQ3IDEyLjk0NS0xLjExNCAyMy4zNDgtNi41NjUgMjcuNjU5LTIwLjg5N20tOTcuMjE0LTI0LjAwN2wtNC43MTUtNy4xNDEtMzEuOTA4IDUyLjI0OGM0LjY4My0uNTEzIDkuNDEzIDIuMjk1IDExLjIxNS0yLjUxMyAzLjc1My0xMC4wMTcgMTEuMDE0LTEyLjA1MyAyMC40NC0xMC42ODEgMS45NTcuMjg1IDQuMDQ2LjM0MiA1Ljk3OS0uMDEyIDcuMDg4LTEuMjk5IDExLjg1IDEuNDIgMTQuNDgyIDcuOTk0IDIuNDEgNi4wMTkgNy4wODQgNS44MzYgMTMuMDM1IDQuNzgzbC0yOC41MjktNDQuNjc3elwiLz48cGF0aCBmaWxsPVwiI2ZkZmVmZVwiIGQ9XCJNMTI0LjgyOCAxNDEuOTg5bDQuNTMzIDcuMDUyLTI2Ljg3MiAyNi42MjJjLS43NDkuNzIyLTMuMTY0LjQ5My00LjM1LS4xNDQtNi4zOTMtMy40MzMtOC43NjMtOS4xMzktOC43NDUtMTYuMTkxbC4wMTktNjUuOTY5YzAtNC44MzEtLjEyOS05LjY2Ny4wNDctMTQuNDkyLjM3My0xMC4yMjIgNy4wMzYtMTYuNzU5IDE3LjI1Mi0xNi43NzZsMTA1Ljk1LjAwMWMxMC40MTYuMDE4IDE3LjIyMSA2LjgzNyAxNy4yNDggMTcuMjU4bC0uMTEyIDgwLjk2Yy0uMDMxIDMuNDU4LTEuMjE4IDcuMzI4LTMuMDU3IDEwLjI2My00LjMwOSA2Ljg4LTcuODI3IDcuMDEtMTMuNDI5IDEuNDEyTDE5MC42IDE0OS4zMDJjMTMuODQxLTE3LjU5NSAxNS44MjMtMzUuNjQ4IDIuNzkxLTU0Ljk4MmwtNy4zNTItNy4zNjJjLTIuNTAyLTEuNjY0LTQuODA4LTMuMDc4LTcuMzYzLTQuNjc4LTIuMDUxLS44NTctMy44NTQtMS41MzEtNi4wMTctMi4zOTItNC4xMTYtLjcxNi03Ljg3Mi0xLjI0My0xMi4wNTItMS44My0zLjE1NS4yNzEtNS44ODcuNi04Ljk1NC45MzItMS4xOTEuMjU2LTIuMDQ3LjUwOS0zLjI3Ny43OTMtOC41MTMgMi40NjUtMTUuNTA3IDYuNTc1LTIwLjcwMyAxMy45NDZsLTMuOTk5IDUuNDE5Yy0uNzQyIDEuOTE1LTEuMjM0IDMuNjA1LTIuMDQxIDUuNTM5LTEuMDI2IDMuOTQ3LTEuNzM4IDcuNjUxLTIuNDk0IDExLjc2Mi0uMTA1IDEuNzczLS4xNjUgMy4xMzktLjUyMyA0Ljc0Mi40MjQgNC4wNyAxLjE0NSA3LjkwMyAxLjk1MSAxMi4xMTIgMS40NzYgMy4xNDcgMi44NjggNS45MTcgNC4yNjEgOC42ODd6XCIvPjxwYXRoIGQ9XCJNMTA5LjYyNCAyNDQuNTAxYy0uMTU4IDEuMi0uNDE1IDIuNjA4LjE0MSAzLjEwNSAyLjgzIDIuNTI3IDUuODcxIDQuODE4IDkuNzk2IDcuOTU3LTYuNjI2LjMzMi0xMi4xNTggMS44ODktMTYuNjc4LTIuOTk5LTIuMzE3LTIuNTA1LTUuMDM4LTMuMDY4LTguNTI1LTIuNjAxLTguNTU4IDEuMTQ4LTE2Ljk2OS4yMjktMjQuNzc1LTMuODEzLTguODIyLTQuNTY4LTE0LjE0NC0xMS42MjUtMTQuMDkzLTIxLjgxM3M1LjM1OS0xNy4zNTYgMTQuMzEyLTIxLjY0OWMxMS4xOTgtNS4zNjkgMjIuODU5LTUuOTEyIDM0LjM4NS0xLjI0OCAxOS42OTggNy45NyAyMi41MjIgMjkuODcgNS40MzYgNDMuMDZtLTQzLjIxMS0xMS44MjRjNS41MDMgMTEuNjQ2IDI1LjcyNSAxNC4yMzQgMzYuNzA3IDcuMDc4IDExLjY4Mi03LjYxMiAxMS43MDgtMjMuMTUxLS4xMzgtMzAuNTg1LTcuNjcxLTQuODE0LTE2LjAyMS01LjEzNC0yNC40NzItMi40NDgtMTEuNDU4IDMuNjQzLTE2LjM4NyAxMy44MTctMTIuMDk4IDI1Ljk1NHptMTk1LjYyLTMuNzA3Yy00LjI0MSAxMy45MzUtMTQuNjQ0IDE5LjM4Ni0yNy41ODkgMjAuNTAxLTguOTA3Ljc2Ny0xNy45MzMuMTQ3LTI3LjM0My4xNDd2LTQ5LjY2MmMxMC45MDYgMCAyMS42NDYtMS4wMjYgMzIuMTEuMjQgMTUuNzc0IDEuOTA4IDI0Ljc5NyAxMy45ODUgMjIuODIyIDI4Ljc3NG0tMzEuODA3LTIzLjIwN2gtMTUuMDA4bC4wNzYgMzQuODY3Yy4wMDguODAyIDEuMTA4IDEuNTk0IDIuNjM0IDIuNDc3IDMuMzIxLjAwOSA2LjY3Mi4zMDIgOS45NTYtLjA0IDQuNzQ0LS40OTMgOS42NzItLjc4OCAxNC4xMDQtMi4zNTIgNy40MTktMi42MTggMTEuNzE3LTkuNjkzIDExLjQ1Ny0xNy4wMjgtLjI2My03LjQxMS00LjU2Ni0xMy4yOS0xMi4yMzUtMTUuODczLTMuMjQxLTEuMDkxLTYuNzkyLTEuMjU5LTEwLjk4NS0yLjA1MnpcIiBmaWxsPVwiI2ZhZmJmZFwiLz48cGF0aCBmaWxsPVwiI2Y4ZmFmY1wiIGQ9XCJNMTY1LjA3MiAyMDQuODc3bDI4LjM0NSA0NC4zNjZjLTUuOTUxIDEuMDUzLTEwLjYyNSAxLjIzNi0xMy4wMzUtNC43ODMtMi42MzItNi41NzQtNy4zOTQtOS4yOTMtMTQuNDgyLTcuOTk0LTEuOTMzLjM1NC00LjAyMi4yOTctNS45NzkuMDEyLTkuNDI3LTEuMzcyLTE2LjY4Ny42NjQtMjAuNDQgMTAuNjgxLTEuODAyIDQuODA4LTYuNTMyIDItMTEuMjE1IDIuNTEzbDMxLjkwOC01Mi4yNDggNC44OTggNy40NTNtMy42MjUgMjUuMDExYy4xODEtLjg1NC44MDQtMS45NzIuNDc1LTIuNTItMi43MTYtNC41My01LjYwOC04Ljk1NC04LjkxNS0xNC4xNDZsLTkuOTM5IDE2LjcwMSAxOC4zNzktLjAzNXpcIi8+PHBhdGggZmlsbD1cIiNhOWJiZTFcIiBkPVwiTTE1MS45ODkgNzguOTg4bDguNzE0LS42MSAzLjQ2OCA0LjI5NWMxMC4yNTUgMTEuNzkgOC45MDcgMjYuNjc1LTMuMzM1IDM2LjQ5NC0yLjc2NiAyLjE0OS01LjUzMiA0LjI5OS04LjkxNCA2LjQ5OS01LjYtLjc2OS0xMC43NjgtMS4wMTMtMTUuNTI3LTIuNTM4LTguMjY1LTIuNjQ4LTE0LjY5NS0xMS41MTUtMTQuNDQ4LTE4LjY4Ni40OTMtMS42OS45ODUtMy4zODEgMS45MTktNC45NjMuODA0IDEuNzIyIDEuMTQ0IDMuMzQxIDEuNTM1IDQuOTQ4IDIuMzExIDkuNTE4IDExLjY1NSAxNi44MTkgMjEuMTMzIDE2LjUyNSA5Ljk3MS0uMzA5IDE4LjQ0Ny03LjQ2OCAyMC40MzQtMTcuMjYgMi4xOTgtMTAuODI2LTMuNTgtMjAuMzU0LTE0Ljk4LTI0LjcwNXpcIi8+PHBhdGggZmlsbD1cIiM5OGIwZGJcIiBkPVwiTTE2MS4wMTYgMTE5LjQzNWMxMi4wNjMtMTAuMDg3IDEzLjQxMS0yNC45NzIgMy4xNTYtMzYuNzYyLTEuMDctMS4yMy0xLjk3MS0yLjYwNy0zLjA0NS00LjIzNiAzLjY2MS4yMDggNy40MTcuNzM1IDExLjU2MiAxLjgyMiAxLjA3MyAyLjQyMSAxLjY3OSA0LjMxNiAyLjQ1NiA2LjEzOSA1LjkxNCAxMy44ODQgMi40ODIgMjcuOTg3LTkuMjE0IDM3LjcxNWwtNC45MTUtNC42Nzh6XCIvPjxwYXRoIGZpbGw9XCIjNjc4ZmNhXCIgZD1cIk0xODYuMjM1IDg3LjIwN2w2Ljg3OSA2Ljg3OWMtMS42MzcgOC4zNi0yLjY3MSAxNi42ODMtNS40MDcgMjQuNDAyLTEuNzUgNC45MzctNS44OSA5LjA3Ny05LjIwNCAxMy4zODYtMS41NTggMi4wMjYtMy42MjQgMi4zMzYtNS4yMDYtLjgzMiA2Ljc0Ni04LjQxMSAxMi40NDYtMTYuODIgMTMuMTk0LTI3LjQ1NC4zODItNS40MjctLjE0MS0xMC45MTgtLjI1Ni0xNi4zODF6XCIvPjxwYXRoIGZpbGw9XCIjNzU5OGNmXCIgZD1cIk0xODYuMDM5IDg2Ljk1OGMuMzEgNS43MTEuODMzIDExLjIwMi40NTEgMTYuNjMtLjc0OCAxMC42MzQtNi40NDggMTkuMDQzLTEzLjMyMSAyNy4xNjMtMS40MTYtLjg1MS0yLjY1My0xLjk5MS0zLjc4OC0zLjU5MSAxMC4zOTEtOS42MjEgMTQuMzg2LTIwLjk1OCAxMS44MDUtMzQuNTI0LS42NDktMy40MS0xLjUwMi02Ljc4Mi0yLjI2MS0xMC4xNzFsNy4xMTQgNC40OTN6XCIvPjxwYXRoIGQ9XCJNMTE4LjkxNCAxMjAuOTUzYy4wNi0xLjM2NS4xMi0yLjczMS41NjgtNC40NjUgMi4zNjYgMS4wMzcgNC4yNTggMi41OSA2LjM0MSAzLjgxOCA0LjYxOCAyLjcyMyA5LjIyIDUuNTIgMTQuMDU0IDcuODEgMi40NjkgMS4xNyA1LjQyNCAxLjMxMyA4LjE1OSAxLjkyMS0xLjgyNSAxLjg3NC0zLjY1IDMuNzQ4LTYuMDkyIDUuNjU5LTIuNjU5LS41ODMtNC43ODEtMS4wMTktNi43MzEtMS44NTUtNi41NzgtMi44MTktMTMuNzU0LTQuOTQ4LTE2LjI5OS0xMi44ODl6bTU5Ljc2Mi0zOC42NzJjMS4wMDggMy41NzQgMS44NjEgNi45NDUgMi41MDkgMTAuMzU1IDIuNTgxIDEzLjU2Ni0xLjQxNCAyNC45MDMtMTEuOTg1IDM0LjI2NC0xLjE2OC0uNjI4LTIuMDUyLTEuNDU2LTMuMTAzLTIuNTM1IDExLjUyOS05Ljk4IDE0Ljk2MS0yNC4wODMgOS4wNDctMzcuOTY3LS43NzYtMS44MjMtMS4zODItMy43MTgtMi4wOTYtNS45NSAxLjc3NC4zMDIgMy41NzcuOTc1IDUuNjI4IDEuODMzelwiIGZpbGw9XCIjODNhMWQ0XCIvPjxwYXRoIGZpbGw9XCIjOThiMGRiXCIgZD1cIk0xNDguMjk0IDEyOS44NTNjLTIuOTkzLS40MjMtNS45NDgtLjU2Ny04LjQxNy0xLjczNy00LjgzNC0yLjI5MS05LjQzNi01LjA4OC0xNC4wNTQtNy44MS0yLjA4My0xLjIyOC0zLjk3NS0yLjc4MS02LjI5Ni00LjIyNi4zNjktMy43NDIgMS4wODEtNy40NDYgMi4xMDYtMTEuMzkzLjA2NyA2LjkyNyA2LjQ5NyAxNS43OTQgMTQuNzYyIDE4LjQ0MiA0Ljc1OSAxLjUyNSA5LjkyNyAxLjc2OSAxNS4yNDQgMi43MTgtLjgwNyAxLjM2LTEuOTQ4IDIuNTkxLTMuMzQ2IDQuMDA2elwiLz48cGF0aCBmaWxsPVwiIzc1OThjZlwiIGQ9XCJNMTE4LjYxNyAxMjEuMTljMi44NDMgNy43MDMgMTAuMDE5IDkuODMyIDE2LjU5NyAxMi42NTEgMS45NS44MzYgNC4wNzIgMS4yNzIgNi40NiAyLjAzOC0uODE4IDEuMzYtMS45ODEgMi41NzQtMy42OTcgMy43NjEtNi4yLTIuMjU2LTExLjg0Ny00LjQ4NS0xNy40OTMtNi43MTUtLjcyMS0zLjgzMi0xLjQ0My03LjY2NS0xLjg2Ni0xMS43MzV6XCIvPjxwYXRoIGZpbGw9XCIjNjc4ZmNhXCIgZD1cIk0xMjAuNTY3IDEzMy4zMDJjNS41NjIgMS44NTMgMTEuMjA5IDQuMDgyIDE3LjE0NSA2LjUxNS0xLjQ0NSAzLjE4LTMuNzUyIDQuMjk4LTcuMTg2IDIuOTQ1LTEuNDkxLS41ODctMy4yMzUtLjUzLTUuMjgxLS43NjktMS44MDktMi43NzMtMy4yMDEtNS41NDQtNC42NzgtOC42OXpcIi8+PHBhdGggZmlsbD1cIiNjM2NmZWFcIiBkPVwiTTEyNy45NCA5My40OTZjNC45MjktNy4xMzggMTEuOTI0LTExLjI0OCAyMC42NjktMTMuNDI1IDIuNDA2IDEuNDMyIDQuMTc0IDIuNjU4IDYuMDEgMy43NzEgNy41OTYgNC42MDMgMTAuOTY4IDEyLjQ1NyA4LjczOSAyMC40NTYtMi4yMjMgNy45NzktOS40OTkgMTMuNTY1LTE3LjMxIDEzLjI5MS04LjU1Ny0uMy0xNS4zMTYtNS45MDYtMTcuMjM0LTE0LjY3OC0uNjY4LTMuMDU2LS42MDMtNi4yNzItLjg3My05LjQxNW0yOC4wMzgtNC4wMDhjLTUuOTItNC45MjUtMTUuNjg3LTQuNjgzLTIwLjM1MS41MDUtNC45NDQgNS41LTQuNjk2IDE0LjA2LjU2NSAxOS41MDIgNS4zNjYgNS41NTEgMTMuNDkzIDUuNzY4IDE5LjI3OC41MTYgNS45OTUtNS40NDQgNi40MTgtMTMuNTI3LjUwOC0yMC41MjN6XCIvPjxwYXRoIGZpbGw9XCIjYjVjNGU1XCIgZD1cIk0xMjcuNjc0IDkzLjcyOWMuNTM2IDIuOTA5LjQ3MSA2LjEyNSAxLjEzOSA5LjE4MSAxLjkxOCA4Ljc3MiA4LjY3NyAxNC4zNzggMTcuMjM0IDE0LjY3OCA3LjgxMi4yNzQgMTUuMDg3LTUuMzEyIDE3LjMxLTEzLjI5MSAyLjIyOS03Ljk5OS0xLjE0My0xNS44NTMtOC43MzktMjAuNDU2LTEuODM2LTEuMTEzLTMuNjA0LTIuMzM5LTUuNjM1LTMuOC42MjQtLjU0MSAxLjQ3OS0uNzk1IDIuNjctMS4wNTEgMTEuNzM1IDQuMzQ5IDE3LjUxMyAxMy44NzcgMTUuMzE1IDI0LjcwMy0xLjk4OCA5Ljc5MS0xMC40NjMgMTYuOTUtMjAuNDM0IDE3LjI2LTkuNDc5LjI5NC0xOC44MjMtNy4wMDctMjEuMTMzLTE2LjUyNS0uMzktMS42MDctLjczLTMuMjI2LTEuMjg2LTUuMTcyLjk2OS0xLjk4NiAyLjEzLTMuNjM5IDMuNTU4LTUuNTI3elwiLz48cGF0aCBmaWxsPVwiIzViODhjN1wiIGQ9XCJNNjYuMjQ0IDIzMi4zMTRjLTQuMTItMTEuNzc0LjgwOS0yMS45NDkgMTIuMjY3LTI1LjU5MSA4LjQ1MS0yLjY4NyAxNi44MDEtMi4zNjYgMjQuNDcyIDIuNDQ4IDExLjg0NiA3LjQzNCAxMS44MiAyMi45NzMuMTM4IDMwLjU4NS0xMC45ODIgNy4xNTYtMzEuMjA1IDQuNTY4LTM2Ljg3Ny03LjQ0MXpcIi8+PHBhdGggZmlsbD1cIiM1OTg3YzZcIiBkPVwiTTIzMS4wMDcgMjA1Ljk2NmMzLjQxLjU4OCA2Ljk2Mi43NTYgMTAuMjAyIDEuODQ3IDcuNjY5IDIuNTgzIDExLjk3MiA4LjQ2MiAxMi4yMzUgMTUuODczLjI2IDcuMzM1LTQuMDM3IDE0LjQxLTExLjQ1NyAxNy4wMjgtNC40MzIgMS41NjQtOS4zNiAxLjg1OS0xNC4xMDQgMi4zNTItMy4yODUuMzQyLTYuNjM1LjA0OS0xMC40NTctLjQ3Mi0uNTE0LTEwLjQ3NS0uNDUyLTIwLjQzOC0uNTc5LTMwLjM5OS0uMDQ4LTMuODE1IDEuNTEtNS4zODggNS4zMzQtNS4zNjYgMi45NC4wMTcgNS44ODMtLjU1MyA4LjgyNS0uODYyelwiLz48cGF0aCBmaWxsPVwiIzc1OThjZlwiIGQ9XCJNMjMwLjYxNiAyMDUuODY0Yy0yLjU1MS40MTEtNS40OTQuOTgyLTguNDM0Ljk2NS0zLjgyNC0uMDIyLTUuMzgyIDEuNTUxLTUuMzM0IDUuMzY2bC4xMTIgMzAuMzU2Yy0uNTU4LS4zMjgtMS42NTgtMS4xMTktMS42NjYtMS45MjJsLS4wNzYtMzQuODY3IDE1LjM5OS4xMDJ6XCIvPjxwYXRoIGZpbGw9XCIjNWI4OGM3XCIgZD1cIk0xNjguMjY4IDIyOS45MDZsLTE3Ljk1LjAxOCA5LjkzOS0xNi43MDEgOC45MTUgMTQuMTQ2Yy4zMjkuNTQ4LS4yOTMgMS42NjYtLjkwNCAyLjUzOHpcIi8+PHBhdGggZmlsbD1cIiNkMWRhZWZcIiBkPVwiTTE1Ni4yNDUgODkuNzU1YzUuNjQyIDYuNzI4IDUuMjE5IDE0LjgxMS0uNzc2IDIwLjI1NS01Ljc4NCA1LjI1Mi0xMy45MTIgNS4wMzUtMTkuMjc4LS41MTYtNS4yNi01LjQ0Mi01LjUwOC0xNC4wMDItLjU2NS0xOS41MDIgNC42NjMtNS4xODggMTQuNDMxLTUuNDMgMjAuNjE5LS4yMzdNMTQxLjIyIDEwOS41YzcuNTIgMi40OTkgMTMuNTcxLjAxNSAxNS4zODgtNi4zMTcgMS45NTktNi44MjctMS4xMjctMTIuNDc0LTcuODc4LTE0LjQxNS00Ljc4OC0xLjM3Ni05Ljg1MSAxLjExMS0xMi4zOCA2LjA4Mi0yLjYzNyA1LjE4Mi0xLjE1MiAxMC4yNzcgNC44NjkgMTQuNjV6XCIvPjxwYXRoIGZpbGw9XCIjZGRlNGYzXCIgZD1cIk0xNDAuODczIDEwOS4zMzljLTUuNjc0LTQuMjEyLTcuMTU5LTkuMzA3LTQuNTIzLTE0LjQ4OSAyLjUyOS00Ljk3MSA3LjU5Mi03LjQ1OCAxMi4zOC02LjA4MiA2Ljc1MSAxLjk0MSA5LjgzNyA3LjU4OCA3Ljg3OCAxNC40MTUtMS44MTcgNi4zMzEtNy44NjkgOC44MTYtMTUuNzM1IDYuMTU2bS0uMzM1LTEzLjI5MWMtMi42ODkgMy41ODItMS4wNjcgNi44NTggMS45NDkgOC40MiAyLjE4NCAxLjEzMSA2LjEzOCAxLjEyMyA4LjA0Mi0uMTk2IDEuNTUzLTEuMDc2IDIuNDMyLTUuNTQ0IDEuNDQxLTcuMjQtMS4xNjYtMS45OTYtNC41ODMtMi45NDQtNy4yMTEtMy42NzktLjk2NC0uMjctMi40NjIgMS4zNjgtNC4yMjIgMi42OTV6XCIvPjxwYXRoIGZpbGw9XCIjZjhmYWZjXCIgZD1cIk0xNDAuNzkxIDk1Ljc2OGMxLjUwNy0xLjA0NyAzLjAwNS0yLjY4NSAzLjk2OS0yLjQxNSAyLjYyOC43MzUgNi4wNDUgMS42ODMgNy4yMTEgMy42NzkuOTkxIDEuNjk3LjExMiA2LjE2NS0xLjQ0MSA3LjI0LTEuOTA0IDEuMzE5LTUuODU4IDEuMzI3LTguMDQyLjE5Ni0zLjAxNi0xLjU2Mi00LjYzOS00LjgzOS0xLjY5Ny04LjdtMy41NDItLjAzNGMtMi44ODcgMy41OTItMi42MDIgNy4wMzYuODQgNy43NjMgMS4zNzguMjkxIDMuNTI1LS4yMzMgNC40MDgtMS4yMTJzMS4zNzEtMy43MDYuNzEtNC4zOTFjLTEuMjU3LTEuMzAzLTMuNDU3LTEuNjk2LTUuOTU4LTIuMTYxelwiLz48cGF0aCBmaWxsPVwiI2ZkZmVmZVwiIGQ9XCJNMTQ0LjY4IDk1LjU4MWMyLjE1NS42MTggNC4zNTQgMS4wMTEgNS42MTIgMi4zMTMuNjYxLjY4NS4xNzQgMy40MTItLjcxIDQuMzkxcy0zLjAzIDEuNTAzLTQuNDA4IDEuMjEyYy0zLjQ0My0uNzI3LTMuNzI3LTQuMTcxLS40OTQtNy45MTZ6XCIvPjwvc3ZnPidcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWV0RGF0YSB7XHJcbiAgbW9kZTogRGVzaWduTW9kZTtcclxuICB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw7XHJcbiAgZGVzaWduZXI6IERlc2lnbmVyTW9kZWw7XHJcbn1cclxuLyoqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1kZXNpZ25lci1lbGVtZW50JyxcclxuICBzdHlsZVVybHM6IFsnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgRGVzaWduZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHN2ZyA9IFNWRztcclxuICBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgbW9kZTogRGVzaWduTW9kZTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBtb2RlbCE6IEVsZW1lbnRNb2RlbDtcclxuICBASW5wdXQoKSBkZXNpZ25lciE6IERlc2lnbmVyTW9kZWw7XHJcbiAgY2hhbmdlOiBFdmVudEVtaXR0ZXI8RWxlbWVudE1vZGVsPjtcclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBfY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Vjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBfZWNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuICBkaXJ0eTogYm9vbGVhbjtcclxuICByb2xlczogRWxlbWVudE1vZGVsW107XHJcbiAgcHJpdmF0ZSBfZGVzdHJveTogU3ViamVjdDx2b2lkPjtcclxuICBwcml2YXRlIF9yZWY6IERlc2lnbmVyUmVmPGFueT47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NmcjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgKSB7XHJcbiAgICBpZiAoX3BhbmUgJiYgX3BhbmUuZGlhbG9nKSB7XHJcbiAgICAgIGNvbnN0IHsgZGVzaWduZXIsIG1vZGUsIG1vZGVsLCB0ZW1wbGF0ZSB9ID0gX3BhbmUuZGF0YSBhcyBFbGVtZXREYXRhO1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtcclxuICAgICAgICBkZXNpZ25lciwgbW9kZSxcclxuICAgICAgICBtb2RlbDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb2RlbCkpLFxyXG4gICAgICAgIHRlbXBsYXRlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGUgPT09ICdlZGl0JyAmJlxyXG4gICAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLm9wdGlvbnMpIHRoaXMubW9kZWwub3B0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3JlZiA9IG5ldyBEZXNpZ25lclJlZih0aGlzLmRlc2lnbmVyLCB0aGlzLm1vZGVsKTtcclxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFt7XHJcbiAgICAgIHByb3ZpZGU6IERlc2lnbmVyUmVmLCB1c2VWYWx1ZTogdGhpcy5fcmVmXHJcbiAgICB9XSwgdGhpcy5faW5qZWN0b3IpO1xyXG5cclxuICAgIGxldCB0eXBlaW5zdGFuY2U7XHJcblxyXG4gICAgbGV0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLnRlbXBsYXRlKTtcclxuXHJcbiAgICBsZXQgY1JlZiA9IHRoaXMuX2NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8RGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudD4oZmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgY1JlZi5pbnN0YW5jZS5tb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICBjUmVmLmluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICB0eXBlaW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG5cclxuICAgIGxldCBlbGVtZW50aW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwudGVtcGxhdGUpIHtcclxuICAgICAgbGV0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGxldCBjUmVmID0gdGhpcy5fZWNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8RGVzaWduZXJFbGVtZW50Q29tcG9uZW50QmFzZT4oZmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgY1JlZi5pbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xyXG4gICAgICBlbGVtZW50aW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xyXG4gICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudE1vZGVsPigpO1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgICAgbmFtZTogdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICB0aXRsZTogdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubW9kZWwucmVzb3VyY2UgJiYgdGhpcy5mb3JtLmdldCgndGl0bGUnKS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgICBjb25zdCB7IG5hbWUsIHRpdGxlIH0gPSB0aGlzLmZvcm0uY29udHJvbHM7XHJcbiAgICAgICF0aGlzLm1vZGVsLmRyYWZ0ICYmIG5hbWUuZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLm1vZGVsLmRyYWZ0ICYmIHRpdGxlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSgodDogc3RyaW5nKSA9PlxyXG4gICAgICAgIHQgJiYgbmFtZS5zZXRWYWx1ZShwcm9ncmFtTmFtZSh0KSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMubW9kZWwucHJpdmlsZWdlcykge1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdwcml2aWxlZ2VzJyxcclxuICAgICAgICAgIHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgICAgICAgcnVsZTogbnVsbCxcclxuICAgICAgICAgICAgcm9sZXM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KG51bGwpLFxyXG4gICAgICAgICAgfSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnJvbGVzKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yb2xlcyA9IHIuY29uY2F0KHRoaXMuZGVzaWduZXIucm9sZXMuXHJcbiAgICAgICAgICAgIGZpbHRlcihyID0+ICFyLmRpc2FibGVkKS5cclxuICAgICAgICAgICAgbWFwKHIgPT4gKHtcclxuICAgICAgICAgICAgICBuYW1lOiByLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgICAgZGF0YVR5cGU6IHIuZGF0YVR5cGVcclxuICAgICAgICAgICAgfSkpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWVsZW1lbnRpbnN0YW5jZSAmJiB0aGlzLm1vZGVsLmFyZ3VtZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2ZiLmdyb3VwKHt9KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmFyZ3VtZW50cz8uZm9yRWFjaChhID0+XHJcbiAgICAgICAgICBvcHRpb25zLmFkZENvbnRyb2woYS5uYW1lLCB0aGlzLl9mYi5jb250cm9sKG51bGwsIHRoaXMuX3ZhbGlkYXRpb25zKGEpKSkpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgb3B0aW9ucywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuXHJcbiAgICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLCB2KTtcclxuICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBsZXQgc3RhdGU6IEZvcm1Db250cm9sU3RhdHVzLCB0eXBlc3RhdGU6IEZvcm1Db250cm9sU3RhdHVzLCBlbGVtZW50c3RhdGU6IEZvcm1Db250cm9sU3RhdHVzO1xyXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKCF0eXBlc3RhdGUgfHwgdHlwZXN0YXRlID09PSAnVkFMSUQnKSAmJiAoIXN0YXRlIHx8IHN0YXRlID09PSAnVkFMSUQnKSAmJiAoIWVsZW1lbnRzdGF0ZSB8fCBlbGVtZW50c3RhdGUgPT09ICdWQUxJRCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgc3RhdGUgPSBzO1xyXG4gICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZGF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdHlwZWluc3RhbmNlLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsKTtcclxuICAgICAgdHlwZWluc3RhbmNlLmZvcm0uc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgICB0eXBlc3RhdGUgPSBzO1xyXG4gICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZGF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdHlwZWluc3RhbmNlLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdik7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZWxlbWVudGluc3RhbmNlKSB7XHJcbiAgICAgICAgZWxlbWVudGluc3RhbmNlLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsLm9wdGlvbnMpO1xyXG4gICAgICAgIGVsZW1lbnRpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLlxyXG4gICAgICAgICAgc3Vic2NyaWJlKHYgPT4gdGhpcy5hc3NpZ25hcmdzKHYpKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHMgPT4ge1xyXG4gICAgICAgICAgdHlwZXN0YXRlID0gcztcclxuICAgICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZhbGlkYXRpb25zKGZpZWxkOiBGaWVsZEluZm8pIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2godiA9PiB7XHJcbiAgICAgIHN3aXRjaCAodi50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5SZXF1aXJlZDpcclxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuQ2hlY2tib3ggfHwgZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLlN3aXRjaClcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5QYXR0ZXJuOlxyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihmaWVsZC5wYXR0ZXJuKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlLk1pbjpcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbihmaWVsZC5taW4pKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGUuTWF4OlxyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KGZpZWxkLm1heCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5NaW5MZW5ndGg6XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoZmllbGQubWluKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlLk1heExlbmd0aDpcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5tYXgpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGUuRW1haWw6XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlLlJhbmdlOlxyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGZpZWxkLm1pbikpO1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KGZpZWxkLm1heCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgfVxyXG4gIHNldE9wdGlvbnMob2JqOiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ29wdGlvbnMnKS5wYXRjaFZhbHVlKG9iaik7XHJcbiAgfVxyXG4gIHVubG9jayhldnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoKGV2dC5zcmNFbGVtZW50IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lICE9PSAnQScpIHJldHVybjtcclxuICAgIHRoaXMubW9kZWwucmVzb3VyY2UgPSBudWxsO1xyXG4gICAgdGhpcy5mb3JtLmdldCgndGl0bGUnKS5lbmFibGUoKTtcclxuICAgIHRoaXMuX3JlZi5fbG9jayQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG4gIGFzc2lnbmFyZ3MoYXJncykge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLm9wdGlvbnMsIGFyZ3MpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdlZGl0JzsgZWxzZSBpbmZvXCI+XHJcbiAgPG1hdC10b29sYmFyPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhdmFsaWRcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPC9tYXQtdG9vbGJhcj5cclxuICA8cCBjbGFzcz1cImhlbHBcIj57e21vZGVsLmhlbHB9fTwvcD5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiByZXF1aXJlZCAjdGl0bGUgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAmbmJzcDtcclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgPG1hdC1sYWJlbD57eydOYW1lJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuICA8cCAqbmdJZj1cIm1vZGVsLnJlc291cmNlXCIgY2xhc3M9XCJtZXNzYWdlXCIgKGNsaWNrKT1cInVubG9jaygkZXZlbnQpXCIgW2lubmVySFRNTF09XCInVW5sb2NrJ3x0cmFuc2xhdGVcIj48L3A+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNpbmZvPlxyXG4gIDwhLS08c3BhbiBjbGFzcz1cImZhbWlseVwiPnt7bW9kZWwuZmFtaWx5fX08L3NwYW4+LS0+XHJcbiAgPGRpdiBbaW5uZXJIVE1MXT1cIihzdmdbbW9kZWwuZmFtaWx5XXxzYW5pdGl6ZUh0bWwpfHxtb2RlbC5mYW1pbHlcIiAqbmdJZj1cIm1vZGVsLmZhbWlseVwiPjwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLWNvbnRhaW5lciAjZWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbjxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJtb2RlID09PSAnZWRpdCdcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWwuYXJndW1lbnRzPy5sZW5ndGhcIj5cclxuICAgIDxiaXpkb2MtbGF5b3V0IFtmaWVsZHNdPVwibW9kZWwuYXJndW1lbnRzXCIgW21vZGVsXT1cIm1vZGVsLm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInNldE9wdGlvbnMoJGV2ZW50KVwiPjwvYml6ZG9jLWxheW91dD5cclxuICAgIDwhLS08bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvciBtb2RlbC5hcmd1bWVudHNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiZmllbGQucGxhY2Vob2xkZXJcIj57e2ZpZWxkLmxhYmVsIHx8IGZpZWxkLm5hbWV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW3R5cGVdPVwiZmllbGQudHlwZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1jb250cm9sIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCBmaWVsZC5sYWJlbCB8fCBmaWVsZC5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiIFttaW5sZW5ndGhdPVwiZmllbGQubWluXCIgW21heGxlbmd0aF09XCJmaWVsZC5tYXhcIiBbcGF0dGVybl09XCJmaWVsZC5wYXR0ZXJuXCIgLz5cclxuICAgICAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwiZmllbGQuaGludFwiPiB7eyBmaWVsZC5oaW50IH19PC9tYXQtaGludD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0Zvcj1cImxldCB2IG9mIGZpZWxkLnZhbGlkYXRpb25zXCIgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKHYudHlwZS50b0xvd2VyQ2FzZSgpKVwiPiB7eyB2Lm1lc3NhZ2UgfX0gPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgLS0+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsLnByaXZpbGVnZXNcIiBmb3JtR3JvdXBOYW1lPVwicHJpdmlsZWdlc1wiPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3snUHJpdmlsZWdlcyd8dHJhbnNsYXRlfX08L2gyPlxyXG4gICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBmb3JtQ29udHJvbE5hbWU9XCJyb2xlc1wiICpuZ0lmPVwicm9sZXNcIj5cclxuICAgICAgPG1hdC1saXN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiByb2xlc1wiIFt2YWx1ZV09XCJyLm5hbWVcIj57e3IudGl0bGV9fTwvbWF0LWxpc3Qtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxiaXpkb2MtYWNlLWlucHV0IFtwbGFjZWhvbGRlcl09XCInQ29uZGl0aW9uJ3x0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJydWxlXCI+PC9iaXpkb2MtYWNlLWlucHV0PlxyXG4gICAgICA8bWF0LWhpbnQ+IHt7ICdQcm9ncmFtbWFibGVFeHByZXNzaW9uJ3x0cmFuc2xhdGUgfX08L21hdC1oaW50PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9mb3JtPlxyXG4iXX0=