@magic-xpa/gui 4.1200.0-dev4120.21 → 4.1200.0-dev4120.212

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 (81) hide show
  1. package/fesm2022/magic-xpa-gui.mjs +5724 -249
  2. package/fesm2022/magic-xpa-gui.mjs.map +1 -1
  3. package/index.d.ts +3 -0
  4. package/package.json +2 -4
  5. package/src/GuiEnums.d.ts +3 -0
  6. package/src/gui/GuiMgControl.d.ts +1 -0
  7. package/src/management/exp/ExpressionInterface.d.ts +1 -0
  8. package/src/management/gui/MgControlBase.d.ts +1 -1
  9. package/src/management/gui/PropInterface.d.ts +2 -1
  10. package/esm2022/index.mjs +0 -71
  11. package/esm2022/magic-xpa-gui.mjs +0 -2
  12. package/esm2022/src/Commands.mjs +0 -184
  13. package/esm2022/src/Events.mjs +0 -425
  14. package/esm2022/src/EventsProcessor.mjs +0 -67
  15. package/esm2022/src/FocusManager.mjs +0 -34
  16. package/esm2022/src/GuiConstants.mjs +0 -68
  17. package/esm2022/src/GuiEnums.mjs +0 -301
  18. package/esm2022/src/GuiEnvironment.mjs +0 -4
  19. package/esm2022/src/IFlowMonitorQueue.mjs +0 -2
  20. package/esm2022/src/Manager.mjs +0 -91
  21. package/esm2022/src/UIBridge.mjs +0 -33
  22. package/esm2022/src/env/IEnvironment.mjs +0 -2
  23. package/esm2022/src/gui/ControlBase.mjs +0 -3
  24. package/esm2022/src/gui/GuiMgControl.mjs +0 -123
  25. package/esm2022/src/gui/GuiMgForm.mjs +0 -4
  26. package/esm2022/src/gui/KeyboardItem.mjs +0 -135
  27. package/esm2022/src/gui/LastFocusedVal.mjs +0 -11
  28. package/esm2022/src/gui/MgValue.mjs +0 -16
  29. package/esm2022/src/gui/PropParentInterface.mjs +0 -2
  30. package/esm2022/src/gui/low/DialogHandler.mjs +0 -7
  31. package/esm2022/src/gui/low/GuiCommand.mjs +0 -68
  32. package/esm2022/src/gui/low/GuiCommandQueue.mjs +0 -35
  33. package/esm2022/src/gui/low/GuiInteractive.mjs +0 -178
  34. package/esm2022/src/gui/low/Style.mjs +0 -20
  35. package/esm2022/src/management/RuntimeContextBase.mjs +0 -42
  36. package/esm2022/src/management/data/BlobType.mjs +0 -281
  37. package/esm2022/src/management/data/DcValues.mjs +0 -214
  38. package/esm2022/src/management/data/DcValuesBuilderBase.mjs +0 -96
  39. package/esm2022/src/management/data/FieldDef.mjs +0 -331
  40. package/esm2022/src/management/data/FieldsTable.mjs +0 -54
  41. package/esm2022/src/management/data/GuiDataViewBase.mjs +0 -88
  42. package/esm2022/src/management/data/GuiFieldBase.mjs +0 -82
  43. package/esm2022/src/management/data/IRecord.mjs +0 -2
  44. package/esm2022/src/management/data/IReferencedObject.mjs +0 -2
  45. package/esm2022/src/management/data/NUM_TYPE.mjs +0 -1739
  46. package/esm2022/src/management/data/ObjectReferenceBase.mjs +0 -48
  47. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +0 -27
  48. package/esm2022/src/management/data/RecordUtils.mjs +0 -361
  49. package/esm2022/src/management/data/VectorType.mjs +0 -612
  50. package/esm2022/src/management/data/VectorTypeBase.mjs +0 -88
  51. package/esm2022/src/management/events/IActionManager.mjs +0 -2
  52. package/esm2022/src/management/events/IGuiEventsManager.mjs +0 -2
  53. package/esm2022/src/management/exp/ExpressionInterface.mjs +0 -244
  54. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +0 -305
  55. package/esm2022/src/management/gui/ControlTable.mjs +0 -118
  56. package/esm2022/src/management/gui/DisplayConvertor.mjs +0 -1649
  57. package/esm2022/src/management/gui/FieldValidator.mjs +0 -711
  58. package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +0 -24
  59. package/esm2022/src/management/gui/GuiFormPropertyAdapter.mjs +0 -11
  60. package/esm2022/src/management/gui/HebrewDate.mjs +0 -278
  61. package/esm2022/src/management/gui/Helps.mjs +0 -237
  62. package/esm2022/src/management/gui/MgControlBase.mjs +0 -1869
  63. package/esm2022/src/management/gui/MgFormBase.mjs +0 -741
  64. package/esm2022/src/management/gui/PIC.mjs +0 -1185
  65. package/esm2022/src/management/gui/PropDefaults.mjs +0 -230
  66. package/esm2022/src/management/gui/PropInterface.mjs +0 -246
  67. package/esm2022/src/management/gui/PropTable.mjs +0 -221
  68. package/esm2022/src/management/gui/Property.mjs +0 -1362
  69. package/esm2022/src/management/gui/ValidationDetails.mjs +0 -248
  70. package/esm2022/src/management/gui/ValidationDetailsBase.mjs +0 -93
  71. package/esm2022/src/management/gui/WrongFormatException.mjs +0 -29
  72. package/esm2022/src/management/tasks/GuiDataCollection.mjs +0 -4
  73. package/esm2022/src/management/tasks/GuiTaskBase.mjs +0 -511
  74. package/esm2022/src/management/tasks/IMGDataTable.mjs +0 -2
  75. package/esm2022/src/management/tasks/ITask.mjs +0 -2
  76. package/esm2022/src/management/tasks/MgTimer.mjs +0 -21
  77. package/esm2022/src/management/tasks/TaskDefinitionId.mjs +0 -54
  78. package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +0 -41
  79. package/esm2022/src/util/MemoryUtil.mjs +0 -35
  80. package/esm2022/src/util/ObjectReference.mjs +0 -36
  81. package/esm2022/src/util/UsernamePasswordCredentials.mjs +0 -52
@@ -1,24 +0,0 @@
1
- import { GuiMgControl } from "../../gui/GuiMgControl";
2
- export class GuiControlPropertyAdapter extends GuiMgControl {
3
- DataType;
4
- InControl;
5
- async updatePropertyLogicNesting(propId, commandType, val, updateThis) {
6
- return Promise.resolve();
7
- }
8
- async refreshAndSetItemsList(line, execComputeChoice) {
9
- return Promise.resolve();
10
- }
11
- async refreshTabForLayerList(line) {
12
- return Promise.resolve();
13
- }
14
- async ComputeAndRefreshDisplayValue(forceRefresh) {
15
- return Promise.resolve();
16
- }
17
- async refreshDispRange(execComputeChoice) {
18
- return Promise.resolve([]);
19
- }
20
- async isParkable(checkEnabledAndVisible) {
21
- return Promise.resolve(true);
22
- }
23
- }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFHcEQsTUFBTSxPQUFnQix5QkFBMEIsU0FBUSxZQUFZO0lBQ2xFLFFBQVEsQ0FBbUI7SUFDM0IsU0FBUyxDQUFVO0lBMEJuQixLQUFLLENBQUMsMEJBQTBCLENBQUMsTUFBYyxFQUFFLFdBQXdCLEVBQUUsR0FBWSxFQUFFLFVBQW1CO1FBQzFHLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFXRCxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBWSxFQUFFLGlCQUEwQjtRQUNuRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQVk7UUFDdkMsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQVlBLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxZQUFxQjtRQUN2RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGlCQUEwQjtRQUMvQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQVFGLEtBQUssQ0FBQyxVQUFVLENBQUMsc0JBQStCO1FBQzlDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7UElDfSBmcm9tIFwiLi9QSUNcIjtcclxuaW1wb3J0IHtHdWlGaWVsZEJhc2V9IGZyb20gXCIuLi9kYXRhL0d1aUZpZWxkQmFzZVwiO1xyXG5pbXBvcnQge0NvbW1hbmRUeXBlfSBmcm9tIFwiLi4vLi4vR3VpRW51bXNcIjtcclxuaW1wb3J0IHtHdWlNZ0NvbnRyb2x9IGZyb20gXCIuLi8uLi9ndWkvR3VpTWdDb250cm9sXCI7XHJcbmltcG9ydCB7R3VpRm9ybVByb3BlcnR5QWRhcHRlcn0gZnJvbSBcIi4vR3VpRm9ybVByb3BlcnR5QWRhcHRlclwiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgZXh0ZW5kcyBHdWlNZ0NvbnRyb2wge1xyXG4gIERhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlO1xyXG4gIEluQ29udHJvbDogYm9vbGVhbjtcclxuXHJcblxyXG4gIGFic3RyYWN0IHNldFBpY1N0cihmb3JtYXQ6IHN0cmluZywgZXhwSWQ6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldFJhbmdlKG5ld1JhbmdlOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBhYnN0cmFjdCBzZXRWYWxFeHAoZXhwSWQ6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldEZpZWxkKGZpZWxkT3JGaWVsZFN0cklEOiBhbnkpOiB2b2lkO1xyXG4gIGFic3RyYWN0IGdldEZvcm0oKTogR3VpRm9ybVByb3BlcnR5QWRhcHRlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0TGF5ZXIoKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCBjb21wdXRlUElDKHBpY0V4cFJlc3VsdDogc3RyaW5nKTogUElDO1xyXG5cclxuICBhYnN0cmFjdCBzZXRJbWFnZUxpc3QodXJsOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBhYnN0cmFjdCBzZXRJbWFnZVdpdGhGaWxlTmFtZShmaWxlTmFtZTogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgYWJzdHJhY3QgaXNEZXNjZW5kZW50T2ZDb250cm9sKGNvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIpOiBib29sZWFuO1xyXG5cclxuICBhYnN0cmFjdCBnZXRMaW5rZWRQYXJlbnQoY2hlY2tTdWJmb3JtRmF0aGVyOiBib29sZWFuKTogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcjtcclxuXHJcbiAgYWJzdHJhY3QgU2V0RW5hYmxlZCh2YWw6IGJvb2xlYW4pOiB2b2lkO1xyXG5cclxuICBhc3luYyB1cGRhdGVQcm9wZXJ0eUxvZ2ljTmVzdGluZyhwcm9wSWQ6IG51bWJlciwgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCB2YWw6IGJvb2xlYW4sIHVwZGF0ZVRoaXM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgSXNEYXRlVGltZVBpY3R1cmUoKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgR2V0Q3VyclJlYWRPbmx5KCk6IGJvb2xlYW47XHJcblxyXG4gIGFic3RyYWN0IFNldEN1cnJSZWFkT25seShuZXdWYWw6IGJvb2xlYW4pOiB2b2lkO1xyXG5cclxuXHJcbiAgYWJzdHJhY3QgZ2V0RGlzcGxheUxpbmUodXNlTGluZUZvckl0ZW1zOiBib29sZWFuKTogbnVtYmVyO1xyXG5cclxuICBhc3luYyByZWZyZXNoQW5kU2V0SXRlbXNMaXN0KGxpbmU6IG51bWJlciwgZXhlY0NvbXB1dGVDaG9pY2U6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVmcmVzaFRhYkZvckxheWVyTGlzdChsaW5lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgZ2V0UElDKCk6IFBJQztcclxuXHJcbiAgYWJzdHJhY3QgcmVzZXRQcmV2VmFsKCk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IGdldEZpZWxkKCk6IEd1aUZpZWxkQmFzZTtcclxuXHJcbiAgYWJzdHJhY3QgZXhwcmVzc2lvblNldEFzRGF0YSgpOiBib29sZWFuO1xyXG5cclxuICBhYnN0cmFjdCBjbGVhclJhbmdlKGxpbmU6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gICBhc3luYyBDb21wdXRlQW5kUmVmcmVzaERpc3BsYXlWYWx1ZShmb3JjZVJlZnJlc2g6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgfVxyXG5cclxuICAgYXN5bmMgcmVmcmVzaERpc3BSYW5nZShleGVjQ29tcHV0ZUNob2ljZTogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nW10+e1xyXG4gICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xyXG4gICB9XHJcblxyXG4gIGFic3RyYWN0IGlzUHJvcGVydHlSZXBlYXRhYmxlKHByb3BJZDogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgaXNWaXNpYmxlKCk6IGJvb2xlYW47XHJcblxyXG4gIGFic3RyYWN0IGdldFByb3AocHJvcElkOiBudW1iZXIpOiBhbnkgO1xyXG5cclxuICBhc3luYyBpc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,11 +0,0 @@
1
- import { GuiMgForm } from "../../gui/GuiMgForm";
2
- import { XMLConstants } from "@magic-xpa/utils";
3
- export class GuiFormPropertyAdapter extends GuiMgForm {
4
- static IsFormTag(tagName) {
5
- return tagName === XMLConstants.MG_TAG_FORM || tagName === XMLConstants.MG_TAG_FORM_PROPERTIES;
6
- }
7
- static IsEndFormTag(tagName) {
8
- return tagName === ("/" + XMLConstants.MG_TAG_FORM) || tagName === ("/" + XMLConstants.MG_TAG_FORM_PROPERTIES);
9
- }
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRm9ybVByb3BlcnR5QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvR3VpRm9ybVByb3BlcnR5QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEQsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxNQUFNLE9BQWdCLHNCQUF1QixTQUFRLFNBQVM7SUFNNUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sT0FBTyxLQUFLLFlBQVksQ0FBQyxXQUFXLElBQUksT0FBTyxLQUFLLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQztJQUNqRyxDQUFDO0lBS0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFlO1FBQ2pDLE9BQU8sT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDakgsQ0FBQztDQXNCRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEd1aU1nRm9ybSB9IGZyb20gXCIuLi8uLi9ndWkvR3VpTWdGb3JtXCI7XHJcbmltcG9ydCB7IEd1aVRhc2tCYXNlIH0gZnJvbSBcIi4uL3Rhc2tzL0d1aVRhc2tCYXNlXCI7XHJcbmltcG9ydCB7IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgfSBmcm9tIFwiLi9HdWlDb250cm9sUHJvcGVydHlBZGFwdGVyXCI7XHJcbmltcG9ydCB7IE1nQ29udHJvbFR5cGUsIFhNTENvbnN0YW50cyB9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpRm9ybVByb3BlcnR5QWRhcHRlciBleHRlbmRzIEd1aU1nRm9ybSB7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BJZFwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIElzRm9ybVRhZyh0YWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0YWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0gfHwgdGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNX1BST1BFUlRJRVM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiBhIHByb3BlcnR5IG9mIHRoZSBmb3JtIGJ5IGl0cyBJZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIElzRW5kRm9ybVRhZyh0YWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0YWdOYW1lID09PSAoXCIvXCIgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0pIHx8IHRhZ05hbWUgPT09IChcIi9cIiArIFhNTENvbnN0YW50cy5NR19UQUdfRk9STV9QUk9QRVJUSUVTKTtcclxuICB9XHJcblxyXG5cclxuICBhYnN0cmFjdCBnZXRUYXNrKCk6IEd1aVRhc2tCYXNlO1xyXG5cclxuICBhYnN0cmFjdCBpc1JlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZCgpOiBib29sZWFuO1xyXG5cclxuICBhYnN0cmFjdCBpc1N1YkZvcm0oKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0U3ViRm9ybUN0cmwoKTogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0Q3RybEJ5TmFtZShjdHJsTmFtZTogc3RyaW5nLCBjdHJsVHlwZTogTWdDb250cm9sVHlwZSk6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldFRhYmxlSXRlbXNDb3VudCgpOiBudW1iZXI7XHJcblxyXG5cclxuICBhYnN0cmFjdCBmaWxsTmFtZShmb3JtVGFnOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBhYnN0cmFjdCBjaGVja0FuZENyZWF0ZVJvdyhpZHg6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldCBEaXNwbGF5TGluZSh2YWx1ZTogbnVtYmVyKTtcclxuXHJcbn1cclxuIl19
@@ -1,278 +0,0 @@
1
- import { Events } from '../../Events';
2
- import { MsgInterface } from '@magic-xpa/utils';
3
- import { MemoryUtil } from '../../util/MemoryUtil';
4
- export class HebrewDate {
5
- static PARTS_PER_HOUR = 1080;
6
- static HOURS_PER_DAY = 24;
7
- static PARTS_PER_DAY = (HebrewDate.HOURS_PER_DAY * HebrewDate.PARTS_PER_HOUR);
8
- static MONTH_DAYS = 29;
9
- static MONTH_EXTRA_PARTS = (12 * HebrewDate.PARTS_PER_HOUR + 793);
10
- static PARTS_PER_MONTH = (HebrewDate.MONTH_DAYS * HebrewDate.PARTS_PER_DAY + HebrewDate.MONTH_EXTRA_PARTS);
11
- static MONTHS_PER_NORM_YEAR = 12;
12
- static MONTHS_PER_LEAP_YEAR = 13;
13
- static NORM_YEARS_PER_CYCLE = 12;
14
- static LEAP_YEARS_PER_CYCLE = 7;
15
- static YEARS_PER_CYCLE = (HebrewDate.NORM_YEARS_PER_CYCLE + HebrewDate.LEAP_YEARS_PER_CYCLE);
16
- static MONTHS_PER_CYCLE = (HebrewDate.NORM_YEARS_PER_CYCLE * HebrewDate.MONTHS_PER_NORM_YEAR + HebrewDate.LEAP_YEARS_PER_CYCLE * HebrewDate.MONTHS_PER_LEAP_YEAR);
17
- static PARTS_PER_LEAP_YEAR = (HebrewDate.MONTHS_PER_LEAP_YEAR * HebrewDate.PARTS_PER_MONTH);
18
- static DAYS_PER_LEAP_YEAR = Math.floor(HebrewDate.PARTS_PER_LEAP_YEAR / HebrewDate.PARTS_PER_DAY);
19
- static PARTS_PER_CYCLE = (HebrewDate.MONTHS_PER_CYCLE * HebrewDate.PARTS_PER_MONTH);
20
- static DAYS_PER_CYCLE = Math.floor(HebrewDate.PARTS_PER_CYCLE / HebrewDate.PARTS_PER_DAY);
21
- static CREATION_DOW = 2;
22
- static CREATION_PARTS = (5 * HebrewDate.PARTS_PER_HOUR + 204);
23
- static DAYS_TIL_JESUS = 1373428;
24
- static HESHVAN = 2;
25
- static KISLEV = 3;
26
- static ADAR = 6;
27
- static ADAR_B = 13;
28
- static DATEHEB_letters = [
29
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 20, 30, 40, 40, 50, 50, 60, 70,
30
- 80, 80, 90, 90, 100, 200, 300, 400
31
- ];
32
- static ALEF = 'א';
33
- static TAV = 'ת';
34
- static DATEHEB_months_n = [
35
- 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123, 136, 148, 160, 173, 185, 197, 210, 222,
36
- 235
37
- ];
38
- static DATEHEB_norm_days_in_month = [
39
- 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 0
40
- ];
41
- static DATEHEB_leap_days_in_month = [
42
- 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29
43
- ];
44
- static MONTH_LEN = 5;
45
- static _localMonths = new Array(15);
46
- static DOW_LEN = 5;
47
- static _localDows = new Array(8);
48
- static dateheb_year_is_leap(year) {
49
- year = year % HebrewDate.YEARS_PER_CYCLE;
50
- return (HebrewDate.DATEHEB_months_n[(year + 1)] - HebrewDate.DATEHEB_months_n[year] === 13);
51
- }
52
- static dateheb_days_in_month(month, leap, days_in_year) {
53
- let days_in_month = leap ? HebrewDate.DATEHEB_leap_days_in_month[month - 1] : HebrewDate.DATEHEB_norm_days_in_month[month - 1];
54
- if (leap)
55
- days_in_year = days_in_year - 30;
56
- switch (days_in_year) {
57
- case 353:
58
- if (month === HebrewDate.KISLEV)
59
- days_in_month = 29;
60
- break;
61
- case 355:
62
- if (month === HebrewDate.HESHVAN)
63
- days_in_month = 30;
64
- break;
65
- }
66
- return days_in_month;
67
- }
68
- static dateheb_year_start(year) {
69
- year = year - 1;
70
- let cycle = Math.floor(year / HebrewDate.YEARS_PER_CYCLE);
71
- year = year % HebrewDate.YEARS_PER_CYCLE;
72
- let months = cycle * HebrewDate.MONTHS_PER_CYCLE + HebrewDate.DATEHEB_months_n[year];
73
- let days = months * HebrewDate.MONTH_DAYS;
74
- let parts = months * HebrewDate.MONTH_EXTRA_PARTS + HebrewDate.CREATION_PARTS;
75
- days = days + Math.floor(parts / HebrewDate.PARTS_PER_DAY);
76
- parts = parts % HebrewDate.PARTS_PER_DAY;
77
- if (parts >= Math.floor(HebrewDate.PARTS_PER_DAY * 3 / 4)) {
78
- parts = 0;
79
- days = days + 1;
80
- }
81
- let dow = (days - 1 + HebrewDate.CREATION_DOW) % 7 + 1;
82
- if ((dow === 1) || (dow === 4) || (dow === 6)) {
83
- parts = 0;
84
- days = days + 1;
85
- }
86
- if (!HebrewDate.dateheb_year_is_leap(year)) {
87
- if (dow === 3 && parts >= (9 * HebrewDate.PARTS_PER_HOUR + 204))
88
- days = days + 2;
89
- }
90
- if (HebrewDate.dateheb_year_is_leap(year + HebrewDate.YEARS_PER_CYCLE - 1)) {
91
- if (dow === 2 && parts >= (15 * HebrewDate.PARTS_PER_HOUR + 589))
92
- days = days + 1;
93
- }
94
- return days;
95
- }
96
- static dateheb_4_d(date, day, month, year) {
97
- date = date + HebrewDate.DAYS_TIL_JESUS;
98
- let cycle = Math.floor(date / (HebrewDate.DAYS_PER_CYCLE + 1));
99
- let days = date % (HebrewDate.DAYS_PER_CYCLE + 1);
100
- year.value = cycle * HebrewDate.YEARS_PER_CYCLE;
101
- year.value = year.value + Math.floor(days / (HebrewDate.DAYS_PER_LEAP_YEAR + 1));
102
- let next_year_start;
103
- while (true) {
104
- next_year_start = HebrewDate.dateheb_year_start(year.value + 1);
105
- if (next_year_start >= date)
106
- break;
107
- year.value = year.value + 1;
108
- }
109
- let curr_year_start = HebrewDate.dateheb_year_start(year.value);
110
- day.value = date - curr_year_start;
111
- let days_in_year = next_year_start - curr_year_start;
112
- let leap = days_in_year > 355;
113
- let i;
114
- for (i = 1; i < 13; i = i + 1) {
115
- let days_in_month = HebrewDate.dateheb_days_in_month(i, leap, days_in_year);
116
- if (day.value <= days_in_month)
117
- break;
118
- day.value = day.value - days_in_month;
119
- }
120
- if (!leap || i <= HebrewDate.ADAR)
121
- month.value = i;
122
- else if (i === HebrewDate.ADAR + 1)
123
- month.value = HebrewDate.ADAR_B;
124
- else
125
- month.value = i - 1;
126
- return leap;
127
- }
128
- static dateheb_i_2_h(val, str, strPos, use_ending, quote) {
129
- let let_idx = 0;
130
- let len = 0;
131
- while (val > 0) {
132
- for (let_idx = HebrewDate.DATEHEB_letters.length; let_idx > 0; let_idx = let_idx - 1) {
133
- let letter = HebrewDate.DATEHEB_letters[let_idx - 1];
134
- if (val >= letter) {
135
- val = val - letter;
136
- str[strPos++] = String.fromCharCode(HebrewDate.ALEF.charCodeAt(0) + let_idx - 1);
137
- len = len + 1;
138
- break;
139
- }
140
- }
141
- }
142
- if (len > 0) {
143
- if (len >= 2) {
144
- if (str[strPos - 2] === 'י')
145
- if (str[strPos - 1] === 'ה' || str[strPos - 1] === 'ו') {
146
- str[strPos - 2] = String.fromCharCode(str[strPos - 2].charCodeAt(0) - 1);
147
- str[strPos - 1] = str[strPos - 1] + '\u0001';
148
- }
149
- }
150
- if (let_idx > 10 && use_ending) {
151
- if (HebrewDate.DATEHEB_letters[let_idx - 1] === HebrewDate.DATEHEB_letters[let_idx - 2]) {
152
- str[strPos - 1] = String.fromCharCode(str[strPos - 1].charCodeAt(0) - 1);
153
- }
154
- }
155
- if (quote) {
156
- if (len === 1)
157
- str[strPos] = '\'';
158
- else {
159
- str[strPos] = str[strPos - 1];
160
- str[strPos - 1] = '"';
161
- }
162
- len = len + 1;
163
- }
164
- }
165
- return len;
166
- }
167
- static dateheb_2_str(outStr, strPos, len, out_len, full_len, hyear, trim, use_ending) {
168
- let quote = len > full_len && outStr[strPos + full_len] === outStr[strPos];
169
- if (quote)
170
- full_len = full_len + 1;
171
- let heb_len = HebrewDate.dateheb_i_2_h(hyear % 1000, outStr, strPos, use_ending, quote);
172
- let rem_len = full_len - heb_len;
173
- if (rem_len > 0) {
174
- if (trim) {
175
- out_len.value = out_len.value - rem_len;
176
- let tmp_out_len = len - full_len;
177
- if (tmp_out_len > 0)
178
- MemoryUtil.char_memcpy(outStr, strPos + heb_len, outStr, strPos + full_len, tmp_out_len);
179
- else
180
- heb_len = full_len;
181
- }
182
- else {
183
- if (rem_len > outStr.length - strPos - heb_len)
184
- rem_len = outStr.length - strPos - heb_len;
185
- MemoryUtil.char_memset(outStr, strPos + heb_len, ' ', rem_len);
186
- heb_len = full_len;
187
- }
188
- }
189
- return heb_len;
190
- }
191
- static GetLocalMonths() {
192
- let monthLen = HebrewDate.MONTH_LEN;
193
- if (HebrewDate._localMonths[0] === null) {
194
- let monthStr = Events.GetMessageString(MsgInterface.DATEHEB_MONTH_STR);
195
- if (monthStr !== null) {
196
- HebrewDate._localMonths[0] = " ";
197
- for (let i = 1; i < HebrewDate._localMonths.length; i = i + 1)
198
- HebrewDate._localMonths[i] = monthStr.substr((i - 1) * monthLen, i * monthLen - (i - 1) * monthLen);
199
- }
200
- }
201
- return HebrewDate._localMonths;
202
- }
203
- static GetLocalDows() {
204
- let dowLen = HebrewDate.DOW_LEN;
205
- if (HebrewDate._localDows[0] === null) {
206
- let dowsStr = Events.GetMessageString(MsgInterface.DATEHEB_DOW_STR);
207
- if (dowsStr !== null) {
208
- HebrewDate._localDows[0] = " ";
209
- for (let i = 1; i < HebrewDate._localDows.length; i = i + 1)
210
- HebrewDate._localDows[i] = dowsStr.substr((i - 1) * dowLen, i * dowLen - (i - 1) * dowLen);
211
- }
212
- }
213
- return HebrewDate._localDows;
214
- }
215
- static dateheb_h_2_i(str, len, pos) {
216
- let val;
217
- let has_1_to_9 = false;
218
- let has_10_to_90 = false;
219
- let has_100_to_300 = false;
220
- let cnt_400 = 0;
221
- let last_val = 1000;
222
- let let_val;
223
- for (val = 0; len > 0 && pos < str.length; pos++, len--)
224
- if (str[pos] >= HebrewDate.ALEF && str[pos] <= HebrewDate.TAV) {
225
- let_val = HebrewDate.DATEHEB_letters[(str[pos].charCodeAt(0) - HebrewDate.ALEF.charCodeAt(0))];
226
- if (let_val > last_val)
227
- return 0;
228
- if (let_val === 400) {
229
- if (cnt_400 === 2)
230
- return 0;
231
- cnt_400 = cnt_400 + 1;
232
- }
233
- else if (let_val >= 100) {
234
- if (has_100_to_300)
235
- return 0;
236
- has_100_to_300 = true;
237
- }
238
- else if (let_val >= 10) {
239
- if (has_10_to_90)
240
- return 0;
241
- has_10_to_90 = true;
242
- }
243
- else {
244
- if (has_1_to_9) {
245
- if (has_10_to_90 || last_val !== 9)
246
- return 0;
247
- if (let_val !== 6 && let_val !== 7)
248
- return 0;
249
- }
250
- has_1_to_9 = true;
251
- }
252
- val = val + let_val;
253
- last_val = let_val;
254
- }
255
- return val;
256
- }
257
- static dateheb_2_d(year, month, day) {
258
- if (day === 0 && month === 0 && year === 0)
259
- return 0;
260
- if (day === 0 || month === 0 || year === 0)
261
- return 1000000000;
262
- let days_from_creation = HebrewDate.dateheb_year_start(year);
263
- let days_in_year = HebrewDate.dateheb_year_start(year + 1) - days_from_creation;
264
- let leap = days_in_year > 355;
265
- if (leap && month > HebrewDate.ADAR)
266
- if (month === HebrewDate.ADAR_B)
267
- month = HebrewDate.ADAR + 1;
268
- else
269
- month = month + 1;
270
- if (day > HebrewDate.dateheb_days_in_month(month, leap, days_in_year))
271
- return 1000000000;
272
- for (let i = 1; i < month; i = i + 1)
273
- days_from_creation = days_from_creation + HebrewDate.dateheb_days_in_month(i, leap, days_in_year);
274
- days_from_creation = days_from_creation + day;
275
- return Math.max(days_from_creation - HebrewDate.DAYS_TIL_JESUS, 0);
276
- }
277
- }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVicmV3RGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvSGVicmV3RGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsTUFBTSxPQUFPLFVBQVU7SUFDYixNQUFNLENBQUMsY0FBYyxHQUFXLElBQUksQ0FBQztJQUNyQyxNQUFNLENBQUMsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLENBQUMsYUFBYSxHQUFXLENBQUMsVUFBVSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEYsTUFBTSxDQUFDLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDL0IsTUFBTSxDQUFDLGlCQUFpQixHQUFXLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUUsTUFBTSxDQUFDLGVBQWUsR0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuSCxNQUFNLENBQUMsb0JBQW9CLEdBQVcsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBVyxFQUFFLENBQUM7SUFDekMsTUFBTSxDQUFDLG9CQUFvQixHQUFXLEVBQUUsQ0FBQztJQUN6QyxNQUFNLENBQUMsb0JBQW9CLEdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxlQUFlLEdBQVcsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckcs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QUksR0FBWSxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBS3ZDLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSTtZQUNqQyxJQUFJLEtBQUssS0FBSyxVQUFVLENBQUMsTUFBTTtnQkFDN0IsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDOztnQkFFNUIsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFdEIsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDO1lBQ25FLE9BQU8sVUFBVSxDQUFDO1FBRXBCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQzFDLGtCQUFrQixHQUFHLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BHLGtCQUFrQixHQUFHLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztRQUs5QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRzIH0gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHsgTXNnSW50ZXJmYWNlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IFJlZlBhcmFtfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IE1lbW9yeVV0aWwgfSBmcm9tICcuLi8uLi91dGlsL01lbW9yeVV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhlYnJld0RhdGUge1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9IT1VSOiBudW1iZXIgPSAxMDgwO1xyXG4gIHByaXZhdGUgc3RhdGljIEhPVVJTX1BFUl9EQVk6IG51bWJlciA9IDI0O1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9EQVk6IG51bWJlciA9IChIZWJyZXdEYXRlLkhPVVJTX1BFUl9EQVkgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSKTtcclxuICBwcml2YXRlIHN0YXRpYyBNT05USF9EQVlTOiBudW1iZXIgPSAyOTtcclxuICBwcml2YXRlIHN0YXRpYyBNT05USF9FWFRSQV9QQVJUUzogbnVtYmVyID0gKDEyICogSGVicmV3RGF0ZS5QQVJUU19QRVJfSE9VUiArIDc5Myk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEFSVFNfUEVSX01PTlRIOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5NT05USF9EQVlTICogSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZICsgSGVicmV3RGF0ZS5NT05USF9FWFRSQV9QQVJUUyk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTU9OVEhTX1BFUl9OT1JNX1lFQVI6IG51bWJlciA9IDEyO1xyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIU19QRVJfTEVBUF9ZRUFSOiBudW1iZXIgPSAxMztcclxuICBwcml2YXRlIHN0YXRpYyBOT1JNX1lFQVJTX1BFUl9DWUNMRTogbnVtYmVyID0gMTI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTEVBUF9ZRUFSU19QRVJfQ1lDTEU6IG51bWJlciA9IDc7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgWUVBUlNfUEVSX0NZQ0xFOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5OT1JNX1lFQVJTX1BFUl9DWUNMRSArIEhlYnJld0RhdGUuTEVBUF9ZRUFSU19QRVJfQ1lDTEUpO1xyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIU19QRVJfQ1lDTEU6IG51bWJlciA9IChIZWJyZXdEYXRlLk5PUk1fWUVBUlNfUEVSX0NZQ0xFICogSGVicmV3RGF0ZS5NT05USFNfUEVSX05PUk1fWUVBUiArIEhlYnJld0RhdGUuTEVBUF9ZRUFSU19QRVJfQ1lDTEUgKiBIZWJyZXdEYXRlLk1PTlRIU19QRVJfTEVBUF9ZRUFSKTtcclxuICBwcml2YXRlIHN0YXRpYyBQQVJUU19QRVJfTEVBUF9ZRUFSOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5NT05USFNfUEVSX0xFQVBfWUVBUiAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX01PTlRIKTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVlTX1BFUl9MRUFQX1lFQVI6IG51bWJlciA9IE1hdGguZmxvb3IoSGVicmV3RGF0ZS5QQVJUU19QRVJfTEVBUF9ZRUFSIC8gSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZKTtcclxuICBwcml2YXRlIHN0YXRpYyBQQVJUU19QRVJfQ1lDTEU6IG51bWJlciA9IChIZWJyZXdEYXRlLk1PTlRIU19QRVJfQ1lDTEUgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9NT05USCk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgREFZU19QRVJfQ1lDTEU6IG51bWJlciA9IE1hdGguZmxvb3IoSGVicmV3RGF0ZS5QQVJUU19QRVJfQ1lDTEUgLyBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkpO1xyXG4gIHByaXZhdGUgc3RhdGljIENSRUFUSU9OX0RPVzogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBDUkVBVElPTl9QQVJUUzogbnVtYmVyID0gKDUgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSICsgMjA0KTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVlTX1RJTF9KRVNVUzogbnVtYmVyID0gMTM3MzQyODtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgSEVTSFZBTjogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBLSVNMRVY6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQURBUjogbnVtYmVyID0gNjtcclxuICBwcml2YXRlIHN0YXRpYyBBREFSX0I6IG51bWJlciA9IDEzO1xyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAvKiBIZWJyZXcgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBlYWNoIEhlYnJldyBsZXR0ZXIgKi9cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwcml2YXRlIHN0YXRpYyBEQVRFSEVCX2xldHRlcnM6IG51bWJlcltdID0gW1xyXG4gICAgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDIwLCAyMCwgMzAsIDQwLCA0MCwgNTAsIDUwLCA2MCwgNzAsXHJcbiAgICA4MCwgODAsIDkwLCA5MCwgMTAwLCAyMDAsIDMwMCwgNDAwXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUxFRjogc3RyaW5nID0gJ9eQJztcclxuICBwcml2YXRlIHN0YXRpYyBUQVY6IHN0cmluZyA9ICfXqic7XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIC8qIE4gb2YgTW9udGhzIGZyb20gYmVnaW5uaW5nIG9mIDE5IHllYXJzIGN5Y2xlLCB0byAqL1xyXG4gIC8qIHRoZSBiZWdpbm5pbmcgb2YgYSB5ZWFyIChpbiB0aGUgcmFuZ2UgMCAtIDE4KSAgICAqL1xyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByaXZhdGUgc3RhdGljIERBVEVIRUJfbW9udGhzX246IG51bWJlcltdID0gW1xyXG4gICAgMCwgMTIsIDI0LCAzNywgNDksIDYxLCA3NCwgODYsIDk5LCAxMTEsIDEyMywgMTM2LCAxNDgsIDE2MCwgMTczLCAxODUsIDE5NywgMjEwLCAyMjIsXHJcbiAgICAyMzVcclxuICBdO1xyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICAvKiBOIG9mIGRheXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgeWVhciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbW9udGggKi9cclxuICAvKiBUaXNocmVpLCBIZXNodmFuLCBLaXNsZXYsIFRldmV0LCBTaHZhdCwgQWRhciwgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAvKiBOaXNhbiwgICBJeWFyLCAgICBTaXZhbiwgIFRhbXV6LCBBdiwgICAgRWx1bCAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwcml2YXRlIHN0YXRpYyBEQVRFSEVCX25vcm1fZGF5c19pbl9tb250aDogbnVtYmVyW10gPSBbXHJcbiAgICAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAwXHJcbiAgXTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVRFSEVCX2xlYXBfZGF5c19pbl9tb250aDogbnVtYmVyW10gPSBbXHJcbiAgICAzMCwgMjksIDMwLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIX0xFTjogbnVtYmVyID0gNTtcclxuICBwcml2YXRlIHN0YXRpYyBfbG9jYWxNb250aHM6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMTUpO1xyXG4gIHByaXZhdGUgc3RhdGljIERPV19MRU46IG51bWJlciA9IDU7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvY2FsRG93czogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPig4KTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYWxjdWxhdGUgaWYgeWVhciBpcyBsZWFwXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVoZWJfeWVhcl9pc19sZWFwKHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgeWVhciA9IHllYXIgJSBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRTtcclxuICAgIHJldHVybiAoSGVicmV3RGF0ZS5EQVRFSEVCX21vbnRoc19uWyh5ZWFyICsgMSldIC0gSGVicmV3RGF0ZS5EQVRFSEVCX21vbnRoc19uW3llYXJdID09PSAxMyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbGN1bGF0ZSBkYXlzIGluIG1vbnRoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtb250aFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVhcFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF5c19pbl95ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVoZWJfZGF5c19pbl9tb250aChtb250aDogbnVtYmVyLCBsZWFwOiBib29sZWFuLCBkYXlzX2luX3llYXI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgZGF5c19pbl9tb250aDogbnVtYmVyID0gbGVhcCA/IEhlYnJld0RhdGUuREFURUhFQl9sZWFwX2RheXNfaW5fbW9udGhbbW9udGggLSAxXSA6IEhlYnJld0RhdGUuREFURUhFQl9ub3JtX2RheXNfaW5fbW9udGhbbW9udGggLSAxXTtcclxuXHJcbiAgICBpZiAobGVhcClcclxuICAgICAgZGF5c19pbl95ZWFyID0gZGF5c19pbl95ZWFyIC0gMzA7XHJcblxyXG4gICAgc3dpdGNoIChkYXlzX2luX3llYXIpIHtcclxuICAgICAgY2FzZSAzNTM6XHJcbiAgICAgICAgaWYgKG1vbnRoID09PSBIZWJyZXdEYXRlLktJU0xFVilcclxuICAgICAgICAgIGRheXNfaW5fbW9udGggPSAyOTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzNTU6XHJcbiAgICAgICAgaWYgKG1vbnRoID09PSBIZWJyZXdEYXRlLkhFU0hWQU4pXHJcbiAgICAgICAgICBkYXlzX2luX21vbnRoID0gMzA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF5c19pbl9tb250aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2FsY3VsYXRlIGRheXMgZnJvbSBjcmVhdGlvbiB0aWxsIHN0YXJ0IG9mIHRoZSB5ZWFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVoZWJfeWVhcl9zdGFydCh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIGNhbGN1bGF0ZSBcIm1vbGFkXCIgb2YgeWVhciAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgeWVhciA9IHllYXIgLSAxO1xyXG4gICAgbGV0IGN5Y2xlOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRSk7XHJcbiAgICB5ZWFyID0geWVhciAlIEhlYnJld0RhdGUuWUVBUlNfUEVSX0NZQ0xFO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEhvdyBtYW55IG1vbnRocyBwYXNzZWQgc2luY2UgY3JlYXRpb24gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBtb250aHM6IG51bWJlciA9IGN5Y2xlICogSGVicmV3RGF0ZS5NT05USFNfUEVSX0NZQ0xFICsgSGVicmV3RGF0ZS5EQVRFSEVCX21vbnRoc19uW3llYXJdO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBIb3cgbWFueSBkYXlzIHBhc3NlZCBzaW5jZSBjcmVhdGlvbiAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkYXlzOiBudW1iZXIgPSBtb250aHMgKiBIZWJyZXdEYXRlLk1PTlRIX0RBWVM7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBIb3cgbWFueSBleHRyYSBwYXJ0cyBwYXNzZWQgc2luY2UgY3JlYXRpb24gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IHBhcnRzOiBudW1iZXIgPSBtb250aHMgKiBIZWJyZXdEYXRlLk1PTlRIX0VYVFJBX1BBUlRTICsgSGVicmV3RGF0ZS5DUkVBVElPTl9QQVJUUztcclxuXHJcbiAgICBkYXlzID0gZGF5cyArIE1hdGguZmxvb3IocGFydHMgLyBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkpO1xyXG4gICAgcGFydHMgPSBwYXJ0cyAlIEhlYnJld0RhdGUuUEFSVFNfUEVSX0RBWTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBSZW1pbmRlciA+IDMvNCBvZiBhIGRheSA/ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAoPG51bWJlcj5wYXJ0cyA+PSBNYXRoLmZsb29yKEhlYnJld0RhdGUuUEFSVFNfUEVSX0RBWSAqIDMgLyA0KSkge1xyXG4gICAgICBwYXJ0cyA9IDA7XHJcbiAgICAgIGRheXMgPSBkYXlzICsgMTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIHZlcmlmeSBkYXktb2Ytd2VlayBub3QgU3VuZGF5LCBXZWRuZXNkYXksIEZyaWRheSAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSAoZGF5cyAtIDEgKyBIZWJyZXdEYXRlLkNSRUFUSU9OX0RPVykgJSA3ICsgMTtcclxuICAgIGlmICgoZG93ID09PSAxKSB8fCAoZG93ID09PSA0KSB8fCAoZG93ID09PSA2KSkge1xyXG4gICAgICBwYXJ0cyA9IDA7XHJcbiAgICAgIGRheXMgPSBkYXlzICsgMTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogdmVyaWZ5IGlmIHllYXIgdG9vIGxvbmcvbG9uZyAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICghSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfaXNfbGVhcCg8bnVtYmVyPnllYXIpKSB7XHJcbiAgICAgIGlmIChkb3cgPT09IDMgJiYgPG51bWJlcj5wYXJ0cyA+PSAoOSAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX0hPVVIgKyAyMDQpKVxyXG4gICAgICAgIGRheXMgPSBkYXlzICsgMjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfaXNfbGVhcCg8bnVtYmVyPnllYXIgKyBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRSAtIDEpKSB7XHJcbiAgICAgIGlmIChkb3cgPT09IDIgJiYgPG51bWJlcj5wYXJ0cyA+PSAoMTUgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSICsgNTg5KSlcclxuICAgICAgICBkYXlzID0gZGF5cyArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRheXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgYSBNYWdpYyBpbnRlcm5hbCBEYXRlIHRvIGEgSGVicmV3IGRhdGUgKHllYXIsIG1vbnRoLCBkYXkpXHJcbiAgLy8vIE5vdGUgdGhhdCBBREFSX0IgaXMgcmVwcmVzZW50ZWQgYnkgbW9udGggPSAxM1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGRheVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaG1vbnRoXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoeWVhclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlRSVUUgaWYgbGVhcCB5ZWFyPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkYXRlaGViXzRfZChkYXRlOiBudW1iZXIsIGRheTogUmVmUGFyYW08bnVtYmVyPiwgbW9udGg6IFJlZlBhcmFtPG51bWJlcj4sIHllYXI6IFJlZlBhcmFtPG51bWJlcj4pOiBib29sZWFuIHtcclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogRGF5cyBmcm9tIGNyZWF0aW9uICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGRhdGUgPSBkYXRlICsgSGVicmV3RGF0ZS5EQVlTX1RJTF9KRVNVUztcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEd1ZXNzIGEgeWVhciAoPD0gY29ycmVjdCB5ZWFyKSAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgY3ljbGU6IG51bWJlciA9IE1hdGguZmxvb3IoZGF0ZSAvIChIZWJyZXdEYXRlLkRBWVNfUEVSX0NZQ0xFICsgMSkpO1xyXG4gICAgbGV0IGRheXM6IG51bWJlciA9IGRhdGUgJSAoSGVicmV3RGF0ZS5EQVlTX1BFUl9DWUNMRSArIDEpO1xyXG4gICAgeWVhci52YWx1ZSA9IGN5Y2xlICogSGVicmV3RGF0ZS5ZRUFSU19QRVJfQ1lDTEU7XHJcbiAgICB5ZWFyLnZhbHVlID0geWVhci52YWx1ZSArIE1hdGguZmxvb3IoZGF5cyAvIChIZWJyZXdEYXRlLkRBWVNfUEVSX0xFQVBfWUVBUiArIDEpKTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogQWR2YW5jZSB5ZWFyIHVudGlsIGNvcnJlY3QgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgbmV4dF95ZWFyX3N0YXJ0OiBudW1iZXI7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICBuZXh0X3llYXJfc3RhcnQgPSBIZWJyZXdEYXRlLmRhdGVoZWJfeWVhcl9zdGFydCh5ZWFyLnZhbHVlICsgMSk7XHJcbiAgICAgIGlmIChuZXh0X3llYXJfc3RhcnQgPj0gZGF0ZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgeWVhci52YWx1ZSA9IHllYXIudmFsdWUgKyAxO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJfeWVhcl9zdGFydDogbnVtYmVyID0gSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfc3RhcnQoeWVhci52YWx1ZSk7XHJcbiAgICBkYXkudmFsdWUgPSBkYXRlIC0gY3Vycl95ZWFyX3N0YXJ0O1xyXG4gICAgbGV0IGRheXNfaW5feWVhcjogbnVtYmVyID0gbmV4dF95ZWFyX3N0YXJ0IC0gY3Vycl95ZWFyX3N0YXJ0O1xyXG4gICAgbGV0IGxlYXA6IGJvb2xlYW4gPSBkYXlzX2luX3llYXIgPiAzNTU7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogRmluZCBNb250aCAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGZvciAoaSA9IDE7IGkgPCAxMzsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBkYXlzX2luX21vbnRoOiBudW1iZXIgPSBIZWJyZXdEYXRlLmRhdGVoZWJfZGF5c19pbl9tb250aChpLCBsZWFwLCBkYXlzX2luX3llYXIpO1xyXG4gICAgICBpZiAoZGF5LnZhbHVlIDw9IGRheXNfaW5fbW9udGgpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRheS52YWx1ZSA9IGRheS52YWx1ZSAtIGRheXNfaW5fbW9udGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFsZWFwIHx8IGkgPD0gSGVicmV3RGF0ZS5BREFSKVxyXG4gICAgICBtb250aC52YWx1ZSA9IGk7XHJcbiAgICBlbHNlIGlmIChpID09PSBIZWJyZXdEYXRlLkFEQVIgKyAxKVxyXG4gICAgICBtb250aC52YWx1ZSA9IEhlYnJld0RhdGUuQURBUl9CO1xyXG4gICAgZWxzZVxyXG4gICAgICBtb250aC52YWx1ZSA9IGkgLSAxO1xyXG5cclxuICAgIHJldHVybiBsZWFwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDb21wdXRlIGEgSGVicmV3IGxldHRlciB0byBhZGQgdG8gc3RyaW5nLCByZXByZXNlbnRpbmcgYSBudW1lcmljIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyUG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VfZW5kaW5nXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJxdW90ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZGF0ZWhlYl9pXzJfaCh2YWw6IG51bWJlciwgc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIHVzZV9lbmRpbmc6IGJvb2xlYW4sIHF1b3RlOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBsZXRfaWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gMDtcclxuXHJcbiAgICB3aGlsZSAodmFsID4gMCkge1xyXG4gICAgICBmb3IgKGxldF9pZHggPSBIZWJyZXdEYXRlLkRBVEVIRUJfbGV0dGVycy5sZW5ndGg7IGxldF9pZHggPiAwOyBsZXRfaWR4ID0gbGV0X2lkeCAtIDEpIHtcclxuICAgICAgICBsZXQgbGV0dGVyOiBudW1iZXIgPSBIZWJyZXdEYXRlLkRBVEVIRUJfbGV0dGVyc1tsZXRfaWR4IC0gMV07XHJcbiAgICAgICAgaWYgKHZhbCA+PSBsZXR0ZXIpIHtcclxuICAgICAgICAgIHZhbCA9IHZhbCAtIGxldHRlcjtcclxuICAgICAgICAgIHN0cltzdHJQb3MrK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEhlYnJld0RhdGUuQUxFRi5jaGFyQ29kZUF0KDApICsgbGV0X2lkeCAtIDEpO1xyXG4gICAgICAgICAgbGVuID0gbGVuICsgMTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgIGlmIChsZW4gPj0gMikge1xyXG4gICAgICAgIGlmIChzdHJbc3RyUG9zIC0gMl0gPT09ICfXmScpXHJcbiAgICAgICAgICBpZiAoc3RyW3N0clBvcyAtIDFdID09PSAn15QnIHx8IHN0cltzdHJQb3MgLSAxXSA9PT0gJ9eVJykge1xyXG4gICAgICAgICAgICBzdHJbc3RyUG9zIC0gMl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0cltzdHJQb3MgLSAyXS5jaGFyQ29kZUF0KDApIC0gMSk7XHJcbiAgICAgICAgICAgIHN0cltzdHJQb3MgLSAxXSA9IHN0cltzdHJQb3MgLSAxXSArICdcXHUwMDAxJztcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRmluYWwgbGV0dGVyczogb25seSBmcm9tICfXnicuXHJcbiAgICAgIGlmIChsZXRfaWR4ID4gMTAgJiYgdXNlX2VuZGluZykge1xyXG4gICAgICAgIGlmIChIZWJyZXdEYXRlLkRBVEVIRUJfbGV0dGVyc1tsZXRfaWR4IC0gMV0gPT09IEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzW2xldF9pZHggLSAyXSkge1xyXG4gICAgICAgICAgc3RyW3N0clBvcyAtIDFdID0gU3RyaW5nLmZyb21DaGFyQ29kZShzdHJbc3RyUG9zIC0gMV0uY2hhckNvZGVBdCgwKSAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1b3RlKSB7XHJcbiAgICAgICAgaWYgKGxlbiA9PT0gMSlcclxuICAgICAgICAgIHN0cltzdHJQb3NdID0gJ1xcJyc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdHJbc3RyUG9zXSA9IHN0cltzdHJQb3MgLSAxXTtcclxuICAgICAgICAgIHN0cltzdHJQb3MgLSAxXSA9ICdcIic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbiA9IGxlbiArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZW47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgSGVicmV3IHllYXIvZGF5IHRvIGEgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRTdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZnVsbF9sZW5cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImh5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0cmltXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VfZW5kaW5nXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+bGVuZ3RoPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkYXRlaGViXzJfc3RyKG91dFN0cjogc3RyaW5nW10sIHN0clBvczogbnVtYmVyLCBsZW46IG51bWJlciwgb3V0X2xlbjogUmVmUGFyYW08bnVtYmVyPiwgZnVsbF9sZW46IG51bWJlciwgaHllYXI6IG51bWJlciwgdHJpbTogYm9vbGVhbiwgdXNlX2VuZGluZzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgcXVvdGU6IGJvb2xlYW4gPSBsZW4gPiBmdWxsX2xlbiAmJiBvdXRTdHJbc3RyUG9zICsgZnVsbF9sZW5dID09PSBvdXRTdHJbc3RyUG9zXTtcclxuICAgIGlmIChxdW90ZSlcclxuICAgICAgZnVsbF9sZW4gPSBmdWxsX2xlbiArIDE7XHJcbiAgICBsZXQgaGViX2xlbjogbnVtYmVyID0gSGVicmV3RGF0ZS5kYXRlaGViX2lfMl9oKGh5ZWFyICUgMTAwMCwgb3V0U3RyLCBzdHJQb3MsIHVzZV9lbmRpbmcsIHF1b3RlKTtcclxuXHJcbiAgICBsZXQgcmVtX2xlbjogbnVtYmVyID0gZnVsbF9sZW4gLSBoZWJfbGVuO1xyXG4gICAgaWYgKHJlbV9sZW4gPiAwKSB7XHJcbiAgICAgIGlmICh0cmltKSB7XHJcbiAgICAgICAgb3V0X2xlbi52YWx1ZSA9IG91dF9sZW4udmFsdWUgLSByZW1fbGVuO1xyXG4gICAgICAgIGxldCB0bXBfb3V0X2xlbjogbnVtYmVyID0gbGVuIC0gZnVsbF9sZW47XHJcbiAgICAgICAgaWYgKHRtcF9vdXRfbGVuID4gMClcclxuICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkob3V0U3RyLCBzdHJQb3MgKyBoZWJfbGVuLCBvdXRTdHIsIHN0clBvcyArIGZ1bGxfbGVuLCB0bXBfb3V0X2xlbik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaGViX2xlbiA9IGZ1bGxfbGVuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIERvIG5vdCBvdmVyIHRoZSBzdHJpbmcgbGVuZ3RoLiBJdCBtYXkgYmUgd2hlbiBZWVlZIGluIHRoZSBlbmQuIChEREQgTU1NTU0gWVlZWSlcclxuICAgICAgICBpZiAocmVtX2xlbiA+IG91dFN0ci5sZW5ndGggLSBzdHJQb3MgLSBoZWJfbGVuKVxyXG4gICAgICAgICAgcmVtX2xlbiA9IG91dFN0ci5sZW5ndGggLSBzdHJQb3MgLSBoZWJfbGVuO1xyXG4gICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0U3RyLCBzdHJQb3MgKyBoZWJfbGVuLCAnICcsIC8qJyAnKi9yZW1fbGVuKTtcclxuICAgICAgICBoZWJfbGVuID0gZnVsbF9sZW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoZWJfbGVuO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDdXQgdGhlIG1vbnRoIHN0cmluZyBmcm9tICdjb25zdCcgaW50byBzZXBhcmF0ZSB2YWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIEdldExvY2FsTW9udGhzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBtb250aExlbjogbnVtYmVyID0gSGVicmV3RGF0ZS5NT05USF9MRU47XHJcblxyXG4gICAgaWYgKEhlYnJld0RhdGUuX2xvY2FsTW9udGhzWzBdID09PSBudWxsKSB7XHJcbiAgICAgIGxldCBtb250aFN0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLkRBVEVIRUJfTU9OVEhfU1RSKTtcclxuICAgICAgaWYgKG1vbnRoU3RyICE9PSBudWxsKSB7XHJcbiAgICAgICAgSGVicmV3RGF0ZS5fbG9jYWxNb250aHNbMF0gPSBcIiAgICAgICBcIjtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgSGVicmV3RGF0ZS5fbG9jYWxNb250aHMubGVuZ3RoOyBpID0gaSArIDEpXHJcbiAgICAgICAgICBIZWJyZXdEYXRlLl9sb2NhbE1vbnRoc1tpXSA9IG1vbnRoU3RyLnN1YnN0cigoaSAtIDEpICogbW9udGhMZW4sIGkgKiBtb250aExlbiAtIChpIC0gMSkgKiBtb250aExlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBIZWJyZXdEYXRlLl9sb2NhbE1vbnRocztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ3V0IHRoZSBkYXkgb2Ygd2VlayBzdHJpbmcgZnJvbSAnY29uc3QnIGludG8gc2VwYXJhdGUgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRMb2NhbERvd3MoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGRvd0xlbjogbnVtYmVyID0gSGVicmV3RGF0ZS5ET1dfTEVOO1xyXG5cclxuICAgIGlmIChIZWJyZXdEYXRlLl9sb2NhbERvd3NbMF0gPT09IG51bGwpIHtcclxuICAgICAgbGV0IGRvd3NTdHI6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5EQVRFSEVCX0RPV19TVFIpO1xyXG4gICAgICBpZiAoZG93c1N0ciAhPT0gbnVsbCkge1xyXG4gICAgICAgIEhlYnJld0RhdGUuX2xvY2FsRG93c1swXSA9IFwiICAgICBcIjtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgSGVicmV3RGF0ZS5fbG9jYWxEb3dzLmxlbmd0aDsgaSA9IGkgKyAxKVxyXG4gICAgICAgICAgSGVicmV3RGF0ZS5fbG9jYWxEb3dzW2ldID0gZG93c1N0ci5zdWJzdHIoKGkgLSAxKSAqIGRvd0xlbiwgaSAqIGRvd0xlbiAtIChpIC0gMSkgKiBkb3dMZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSGVicmV3RGF0ZS5fbG9jYWxEb3dzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDb252ZXJ0IGEgaGVicmV3IHN0cmluZyAtPiBpbnRlZ2VyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y29udmVydGVkIHRvIGludGVnZXI8L3JldHVybnM+XHJcbiAgc3RhdGljIGRhdGVoZWJfaF8yX2koc3RyOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCB2YWw6IG51bWJlcjtcclxuICAgIGxldCBoYXNfMV90b185OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzXzEwX3RvXzkwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzXzEwMF90b18zMDA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjbnRfNDAwOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxhc3RfdmFsOiBudW1iZXIgPSAxMDAwO1xyXG4gICAgbGV0IGxldF92YWw6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKHZhbCA9IDA7IGxlbiA+IDAgJiYgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyssIGxlbi0tKVxyXG4gICAgICBpZiAoc3RyW3Bvc10gPj0gSGVicmV3RGF0ZS5BTEVGICYmIHN0cltwb3NdIDw9IEhlYnJld0RhdGUuVEFWKSB7XHJcbiAgICAgICAgbGV0X3ZhbCA9IEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzWzxudW1iZXI+KHN0cltwb3NdLmNoYXJDb2RlQXQoMCkgLSBIZWJyZXdEYXRlLkFMRUYuY2hhckNvZGVBdCgwKSldO1xyXG4gICAgICAgIGlmIChsZXRfdmFsID4gbGFzdF92YWwpXHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgaWYgKGxldF92YWwgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGNudF80MDAgPT09IDIpXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgY250XzQwMCA9IGNudF80MDAgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsZXRfdmFsID49IDEwMCkge1xyXG4gICAgICAgICAgaWYgKGhhc18xMDBfdG9fMzAwKVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIGhhc18xMDBfdG9fMzAwID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGxldF92YWwgPj0gMTApIHtcclxuICAgICAgICAgIGlmIChoYXNfMTBfdG9fOTApXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgaGFzXzEwX3RvXzkwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaGFzXzFfdG9fOSkge1xyXG4gICAgICAgICAgICBpZiAoaGFzXzEwX3RvXzkwIHx8IGxhc3RfdmFsICE9PSA5KVxyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICBpZiAobGV0X3ZhbCAhPT0gNiAmJiBsZXRfdmFsICE9PSA3KVxyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGFzXzFfdG9fOSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IHZhbCArIGxldF92YWw7XHJcbiAgICAgICAgbGFzdF92YWwgPSBsZXRfdmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgYSBIZWJyZXcgZGF0ZSAoeWVhciwgbW9udGgsIGRheSkgdG8gTWFnaWMgaW50ZXJuYWwgZGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwieWVhclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibW9udGhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRheVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZGF0ZWhlYl8yX2QoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcik6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKGRheSA9PT0gMCAmJiBtb250aCA9PT0gMCAmJiB5ZWFyID09PSAwKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBpZiAoZGF5ID09PSAwIHx8IG1vbnRoID09PSAwIHx8IHllYXIgPT09IDApXHJcbiAgICAgIHJldHVybiAxMDAwMDAwMDAwO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogSG93IG1hbnkgZGF5cyBmcm9tIGNyZWF0aW9uLCB0byBiZWdpbmluZyBvZiB0aGUgeWVhciA/ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkYXlzX2Zyb21fY3JlYXRpb246IG51bWJlciA9IEhlYnJld0RhdGUuZGF0ZWhlYl95ZWFyX3N0YXJ0KHllYXIpO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEhvdyBkYXlzIGluIHRoZSB5ZWFyID8gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkYXlzX2luX3llYXI6IG51bWJlciA9IEhlYnJld0RhdGUuZGF0ZWhlYl95ZWFyX3N0YXJ0KHllYXIgKyAxKSAtIGRheXNfZnJvbV9jcmVhdGlvbjtcclxuICAgIGxldCBsZWFwOiBib29sZWFuID0gZGF5c19pbl95ZWFyID4gMzU1O1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogQWRkIG1vbnRoICsgZGF5ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmIChsZWFwICYmIG1vbnRoID4gSGVicmV3RGF0ZS5BREFSKVxyXG4gICAgICBpZiAobW9udGggPT09IEhlYnJld0RhdGUuQURBUl9CKVxyXG4gICAgICAgIG1vbnRoID0gSGVicmV3RGF0ZS5BREFSICsgMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIG1vbnRoID0gbW9udGggKyAxO1xyXG5cclxuICAgIGlmIChkYXkgPiBIZWJyZXdEYXRlLmRhdGVoZWJfZGF5c19pbl9tb250aChtb250aCwgbGVhcCwgZGF5c19pbl95ZWFyKSlcclxuICAgICAgcmV0dXJuIDEwMDAwMDAwMDA7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IG1vbnRoOyBpID0gaSArIDEpXHJcbiAgICAgIGRheXNfZnJvbV9jcmVhdGlvbiA9IGRheXNfZnJvbV9jcmVhdGlvbiArIEhlYnJld0RhdGUuZGF0ZWhlYl9kYXlzX2luX21vbnRoKGksIGxlYXAsIGRheXNfaW5feWVhcik7XHJcbiAgICBkYXlzX2Zyb21fY3JlYXRpb24gPSBkYXlzX2Zyb21fY3JlYXRpb24gKyBkYXk7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIENvbnZlcnQgdG8gQ2hyaXN0aWFuIGNhbGVuZGVyICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KGRheXNfZnJvbV9jcmVhdGlvbiAtIEhlYnJld0RhdGUuREFZU19USUxfSkVTVVMsIDApO1xyXG4gIH1cclxuXHJcbn1cclxuIl19