@sbb-esta/lyne-elements-experimental 4.11.0 → 4.12.1

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 (62) hide show
  1. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +2 -1
  2. package/custom-elements.json +220 -99
  3. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +3 -2
  4. package/development/date-helper-qNdwgC9O.js +1 -1
  5. package/development/format-DFx4997p.js +1 -1
  6. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  7. package/development/{pearl-chain-vertical-item.component-DcmH13Vb.js → pearl-chain-vertical-item.component-D4clzjjQ.js} +2 -2
  8. package/development/pearl-chain-vertical-item.js +1 -1
  9. package/development/pearl-chain-vertical-item.pure.js +1 -1
  10. package/development/pearl-chain.component-oQZUzsyW.js +1 -1
  11. package/development/seat-reservation/common/types.d.ts +3 -4
  12. package/development/seat-reservation/common/types.d.ts.map +1 -1
  13. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +38 -7
  14. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
  15. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +143 -32
  16. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +2 -13
  17. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
  18. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  19. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  20. package/development/seat-reservation/seat-reservation-area.js +1 -1
  21. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +2 -2
  22. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  23. package/development/seat-reservation/seat-reservation-graphic.js +1 -1
  24. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -1
  25. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  26. package/development/seat-reservation/seat-reservation-navigation-coach.js +1 -1
  27. package/development/seat-reservation/seat-reservation.js +1 -1
  28. package/development/seat-reservation-area.component-BWdrKqek.js +96 -0
  29. package/development/seat-reservation-graphic.component-CN5sWn0I.js +129 -0
  30. package/development/{seat-reservation-navigation-coach.component-CjoDkcVU.js → seat-reservation-navigation-coach.component-tDZkXl-3.js} +3 -3
  31. package/development/seat-reservation-place-control.component-CM9efId7.js +1 -1
  32. package/development/seat-reservation.component-DyB5FVpD.js +464 -0
  33. package/development/seat-reservation.js +4 -4
  34. package/development/seat-reservation.pure.js +4 -4
  35. package/development/svgs-kDpBCto5.js +1 -1
  36. package/development/timetable-row.component-Dko8laRT.js +1 -1
  37. package/development/toDate-DOFAOjP-.js +1 -1
  38. package/package.json +2 -2
  39. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  40. package/{pearl-chain-vertical-item.component-BUqZ-3Ay.js → pearl-chain-vertical-item.component-CGYNzFlK.js} +1 -1
  41. package/pearl-chain-vertical-item.js +1 -1
  42. package/pearl-chain-vertical-item.pure.js +1 -1
  43. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +130 -77
  44. package/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  45. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  46. package/seat-reservation/seat-reservation-area.js +1 -1
  47. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +1 -1
  48. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  49. package/seat-reservation/seat-reservation-graphic.js +1 -1
  50. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  51. package/seat-reservation/seat-reservation-navigation-coach.js +1 -1
  52. package/seat-reservation/seat-reservation.js +1 -1
  53. package/{seat-reservation-area.component-CtYawDjE.js → seat-reservation-area.component-B5_N7H_a.js} +1 -1
  54. package/seat-reservation-graphic.component-Dh1e2Pve.js +102 -0
  55. package/{seat-reservation-navigation-coach.component-sug9IBTH.js → seat-reservation-navigation-coach.component-BdCUfksf.js} +2 -2
  56. package/{seat-reservation.component-DajC6fqU.js → seat-reservation.component-DEtsEzex.js} +74 -81
  57. package/seat-reservation.js +4 -4
  58. package/seat-reservation.pure.js +4 -4
  59. package/development/seat-reservation-area.component-DbeuTnXT.js +0 -96
  60. package/development/seat-reservation-graphic.component-DlrHtlia.js +0 -129
  61. package/development/seat-reservation.component-DFJVFmrI.js +0 -510
  62. package/seat-reservation-graphic.component-Cm_pVxaB.js +0 -102
@@ -45,7 +45,8 @@ var o = 0, s = r, c = class extends t {
45
45
  this.activeOption = null;
46
46
  return;
47
47
  }
48
- this.activeOption = r[n(t, this.activeOption ? r.indexOf(this.activeOption) : -1, r.length)], this.activeOption.setActive(!0), this.triggerElement?.setAttribute("aria-activedescendant", this.activeOption.id), this.activeOption.scrollIntoView({ block: "nearest" }), t && t.preventDefault(), this.autoSelectActiveOption && t && this.setPendingSelection(this.activeOption);
48
+ let i = n(t, this.activeOption ? r.indexOf(this.activeOption) : -1, r.length);
49
+ this.activeOption = r[i], this.activeOption.setActive(!0), this.triggerElement?.setAttribute("aria-activedescendant", this.activeOption.id), this.activeOption.scrollIntoView({ block: "nearest" }), t && t.preventDefault(), this.autoSelectActiveOption && t && this.setPendingSelection(this.activeOption);
49
50
  }
50
51
  _setNextHorizontalActiveElement(t) {
51
52
  if (!this.activeOption) return;
@@ -3539,6 +3539,24 @@
3539
3539
  "text": "{\n ArrowLeft: 'ArrowLeft',\n ArrowRight: 'ArrowRight',\n ArrowUp: 'ArrowUp',\n ArrowDown: 'ArrowDown',\n Tab: 'Tab',\n Enter: 'Enter',\n }"
3540
3540
  }
3541
3541
  },
3542
+ {
3543
+ "kind": "field",
3544
+ "name": "seatReservationStructure",
3545
+ "type": {
3546
+ "text": "SeatreservationStructure"
3547
+ },
3548
+ "privacy": "protected",
3549
+ "default": "{ decks: [], }"
3550
+ },
3551
+ {
3552
+ "kind": "field",
3553
+ "name": "notFixedRotatableAreaIcons",
3554
+ "type": {
3555
+ "text": "array"
3556
+ },
3557
+ "privacy": "protected",
3558
+ "default": "['ENTRY_EXIT']"
3559
+ },
3542
3560
  {
3543
3561
  "kind": "field",
3544
3562
  "name": "notAreaElements",
@@ -3550,12 +3568,12 @@
3550
3568
  },
3551
3569
  {
3552
3570
  "kind": "field",
3553
- "name": "overHangingElementInformation",
3571
+ "name": "middleBorderDockingElements",
3554
3572
  "type": {
3555
- "text": "{\n coachId: string;\n overhangingPlaces: boolean;\n overhangingGraphicAreas: boolean;\n }[]"
3573
+ "text": "array"
3556
3574
  },
3557
3575
  "privacy": "protected",
3558
- "default": "[]"
3576
+ "default": "[ 'DRIVER_AREA', 'DRIVER_AREA_NO_VERTICAL_WALL', 'COACH_PASSAGE', 'COACH_WALL_NO_PASSAGE', ]"
3559
3577
  },
3560
3578
  {
3561
3579
  "kind": "field",
@@ -4440,7 +4458,7 @@
4440
4458
  },
4441
4459
  {
4442
4460
  "kind": "method",
4443
- "name": "_prepareCoachWidthAndGapCalculations",
4461
+ "name": "_prepareSeatReservationStructureInformation",
4444
4462
  "privacy": "private",
4445
4463
  "return": {
4446
4464
  "type": {
@@ -4448,6 +4466,75 @@
4448
4466
  }
4449
4467
  }
4450
4468
  },
4469
+ {
4470
+ "kind": "method",
4471
+ "name": "_getCalculatedMiddleBorderElement",
4472
+ "privacy": "private",
4473
+ "return": {
4474
+ "type": {
4475
+ "text": ""
4476
+ }
4477
+ },
4478
+ "parameters": [
4479
+ {
4480
+ "name": "coach",
4481
+ "type": {
4482
+ "text": "CoachItem"
4483
+ }
4484
+ }
4485
+ ],
4486
+ "description": "Returns the calculated position and dimension of the middle border.\nTo calculate the start + end coordinate and the dimension of the middle border coach graphic,\nthe existing docking coach graphics are analysed and used to calculate the required position and diemension information."
4487
+ },
4488
+ {
4489
+ "kind": "method",
4490
+ "name": "_getFirstLastDockingElements",
4491
+ "privacy": "private",
4492
+ "return": {
4493
+ "type": {
4494
+ "text": ""
4495
+ }
4496
+ },
4497
+ "parameters": [
4498
+ {
4499
+ "name": "graphicElements",
4500
+ "type": {
4501
+ "text": "BaseElement[]"
4502
+ }
4503
+ }
4504
+ ],
4505
+ "description": "Returns graphical elements describing the start and end border elements of the coach."
4506
+ },
4507
+ {
4508
+ "kind": "method",
4509
+ "name": "_getCalculatedDimensionPositionElement",
4510
+ "privacy": "private",
4511
+ "return": {
4512
+ "type": {
4513
+ "text": ""
4514
+ }
4515
+ },
4516
+ "parameters": [
4517
+ {
4518
+ "name": "element",
4519
+ "type": {
4520
+ "text": "BaseElement"
4521
+ }
4522
+ },
4523
+ {
4524
+ "name": "coachDimension",
4525
+ "type": {
4526
+ "text": "ElementDimension"
4527
+ }
4528
+ },
4529
+ {
4530
+ "name": "isCalcAreaElement",
4531
+ "type": {
4532
+ "text": "boolean"
4533
+ }
4534
+ }
4535
+ ],
4536
+ "description": "Returns the calculated positions and dimensions of graphical, service and area elements"
4537
+ },
4451
4538
  {
4452
4539
  "kind": "method",
4453
4540
  "name": "_getPlaceHtmlElement",
@@ -4553,11 +4640,11 @@
4553
4640
  },
4554
4641
  {
4555
4642
  "kind": "method",
4556
- "name": "_setDriverAreasElements",
4643
+ "name": "_isLocomotive",
4557
4644
  "privacy": "private",
4558
4645
  "return": {
4559
4646
  "type": {
4560
- "text": "{\n driverArea: BaseElement | undefined;\n driverAreaNoVerticalWall: BaseElement | undefined;\n }"
4647
+ "text": "boolean"
4561
4648
  }
4562
4649
  },
4563
4650
  "parameters": [
@@ -4749,15 +4836,6 @@
4749
4836
  },
4750
4837
  "privacy": "private"
4751
4838
  },
4752
- {
4753
- "kind": "field",
4754
- "name": "_notFixedRotatableAreaIcons",
4755
- "type": {
4756
- "text": "array"
4757
- },
4758
- "privacy": "private",
4759
- "default": "['ENTRY_EXIT']"
4760
- },
4761
4839
  {
4762
4840
  "kind": "method",
4763
4841
  "name": "_initVehicleSeatReservationConstruction",
@@ -4892,6 +4970,12 @@
4892
4970
  "text": "CoachItem"
4893
4971
  }
4894
4972
  },
4973
+ {
4974
+ "name": "deckCoachIndex",
4975
+ "type": {
4976
+ "text": "number"
4977
+ }
4978
+ },
4895
4979
  {
4896
4980
  "name": "coachIndex",
4897
4981
  "type": {
@@ -4974,7 +5058,7 @@
4974
5058
  },
4975
5059
  {
4976
5060
  "kind": "method",
4977
- "name": "_getRenderedGraphicalElements",
5061
+ "name": "_getRenderedCoachElements",
4978
5062
  "privacy": "private",
4979
5063
  "return": {
4980
5064
  "type": {
@@ -4983,25 +5067,13 @@
4983
5067
  },
4984
5068
  "parameters": [
4985
5069
  {
4986
- "name": "graphicalElements",
4987
- "type": {
4988
- "text": "BaseElement[]"
4989
- }
4990
- },
4991
- {
4992
- "name": "coachDimension",
4993
- "type": {
4994
- "text": "ElementDimension"
4995
- }
4996
- },
4997
- {
4998
- "name": "coachIndex",
5070
+ "name": "coachDeckIndex",
4999
5071
  "type": {
5000
5072
  "text": "number"
5001
5073
  }
5002
5074
  },
5003
5075
  {
5004
- "name": "coachDeckIndex",
5076
+ "name": "coachIndex",
5005
5077
  "type": {
5006
5078
  "text": "number"
5007
5079
  }
@@ -5010,76 +5082,25 @@
5010
5082
  },
5011
5083
  {
5012
5084
  "kind": "method",
5013
- "name": "_getRenderElementWithArea",
5085
+ "name": "_getRenderedAreaElements",
5014
5086
  "privacy": "private",
5015
5087
  "return": {
5016
5088
  "type": {
5017
- "text": "TemplateResult"
5089
+ "text": "TemplateResult[] | null"
5018
5090
  }
5019
5091
  },
5020
5092
  "parameters": [
5021
- {
5022
- "name": "graphicalElement",
5023
- "type": {
5024
- "text": "BaseElement"
5025
- }
5026
- },
5027
- {
5028
- "name": "rotation",
5029
- "type": {
5030
- "text": "number"
5031
- }
5032
- },
5033
- {
5034
- "name": "coachDimension",
5035
- "type": {
5036
- "text": "ElementDimension"
5037
- }
5038
- },
5039
- {
5040
- "name": "coachIndex",
5041
- "type": {
5042
- "text": "number"
5043
- },
5044
- "description": "used to generate a unique id for the popover trigger"
5045
- },
5046
5093
  {
5047
5094
  "name": "coachDeckIndex",
5048
5095
  "type": {
5049
5096
  "text": "number"
5050
- },
5051
- "description": "used to generate a unique id"
5052
- }
5053
- ],
5054
- "description": "creates a rendered element with an area component"
5055
- },
5056
- {
5057
- "kind": "method",
5058
- "name": "_getRenderElementWithoutArea",
5059
- "privacy": "private",
5060
- "return": {
5061
- "type": {
5062
- "text": "TemplateResult"
5063
- }
5064
- },
5065
- "parameters": [
5066
- {
5067
- "name": "graphicalElement",
5068
- "type": {
5069
- "text": "BaseElement"
5070
5097
  }
5071
5098
  },
5072
5099
  {
5073
- "name": "rotation",
5100
+ "name": "coachIndex",
5074
5101
  "type": {
5075
5102
  "text": "number"
5076
5103
  }
5077
- },
5078
- {
5079
- "name": "coachDimension",
5080
- "type": {
5081
- "text": "ElementDimension"
5082
- }
5083
5104
  }
5084
5105
  ]
5085
5106
  },
@@ -5093,12 +5114,6 @@
5093
5114
  }
5094
5115
  },
5095
5116
  "parameters": [
5096
- {
5097
- "name": "coachIndex",
5098
- "type": {
5099
- "text": "number"
5100
- }
5101
- },
5102
5117
  {
5103
5118
  "name": "coachDeckIndex",
5104
5119
  "type": {
@@ -5106,10 +5121,9 @@
5106
5121
  }
5107
5122
  },
5108
5123
  {
5109
- "name": "serviceElements",
5110
- "optional": true,
5124
+ "name": "coachIndex",
5111
5125
  "type": {
5112
- "text": "BaseElement[]"
5126
+ "text": "number"
5113
5127
  }
5114
5128
  }
5115
5129
  ]
@@ -5811,6 +5825,32 @@
5811
5825
  "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
5812
5826
  }
5813
5827
  },
5828
+ {
5829
+ "kind": "field",
5830
+ "name": "seatReservationStructure",
5831
+ "type": {
5832
+ "text": "SeatreservationStructure"
5833
+ },
5834
+ "privacy": "protected",
5835
+ "default": "{ decks: [], }",
5836
+ "inheritedFrom": {
5837
+ "name": "SeatReservationBaseElement",
5838
+ "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
5839
+ }
5840
+ },
5841
+ {
5842
+ "kind": "field",
5843
+ "name": "notFixedRotatableAreaIcons",
5844
+ "type": {
5845
+ "text": "array"
5846
+ },
5847
+ "privacy": "protected",
5848
+ "default": "['ENTRY_EXIT']",
5849
+ "inheritedFrom": {
5850
+ "name": "SeatReservationBaseElement",
5851
+ "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
5852
+ }
5853
+ },
5814
5854
  {
5815
5855
  "kind": "field",
5816
5856
  "name": "notAreaElements",
@@ -5826,12 +5866,12 @@
5826
5866
  },
5827
5867
  {
5828
5868
  "kind": "field",
5829
- "name": "overHangingElementInformation",
5869
+ "name": "middleBorderDockingElements",
5830
5870
  "type": {
5831
- "text": "{\n coachId: string;\n overhangingPlaces: boolean;\n overhangingGraphicAreas: boolean;\n }[]"
5871
+ "text": "array"
5832
5872
  },
5833
5873
  "privacy": "protected",
5834
- "default": "[]",
5874
+ "default": "[ 'DRIVER_AREA', 'DRIVER_AREA_NO_VERTICAL_WALL', 'COACH_PASSAGE', 'COACH_WALL_NO_PASSAGE', ]",
5835
5875
  "inheritedFrom": {
5836
5876
  "name": "SeatReservationBaseElement",
5837
5877
  "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
@@ -6928,7 +6968,7 @@
6928
6968
  },
6929
6969
  {
6930
6970
  "kind": "method",
6931
- "name": "_prepareCoachWidthAndGapCalculations",
6971
+ "name": "_prepareSeatReservationStructureInformation",
6932
6972
  "privacy": "private",
6933
6973
  "return": {
6934
6974
  "type": {
@@ -6940,6 +6980,87 @@
6940
6980
  "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
6941
6981
  }
6942
6982
  },
6983
+ {
6984
+ "kind": "method",
6985
+ "name": "_getCalculatedMiddleBorderElement",
6986
+ "privacy": "private",
6987
+ "return": {
6988
+ "type": {
6989
+ "text": ""
6990
+ }
6991
+ },
6992
+ "parameters": [
6993
+ {
6994
+ "name": "coach",
6995
+ "type": {
6996
+ "text": "CoachItem"
6997
+ }
6998
+ }
6999
+ ],
7000
+ "description": "Returns the calculated position and dimension of the middle border.\nTo calculate the start + end coordinate and the dimension of the middle border coach graphic,\nthe existing docking coach graphics are analysed and used to calculate the required position and diemension information.",
7001
+ "inheritedFrom": {
7002
+ "name": "SeatReservationBaseElement",
7003
+ "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
7004
+ }
7005
+ },
7006
+ {
7007
+ "kind": "method",
7008
+ "name": "_getFirstLastDockingElements",
7009
+ "privacy": "private",
7010
+ "return": {
7011
+ "type": {
7012
+ "text": ""
7013
+ }
7014
+ },
7015
+ "parameters": [
7016
+ {
7017
+ "name": "graphicElements",
7018
+ "type": {
7019
+ "text": "BaseElement[]"
7020
+ }
7021
+ }
7022
+ ],
7023
+ "description": "Returns graphical elements describing the start and end border elements of the coach.",
7024
+ "inheritedFrom": {
7025
+ "name": "SeatReservationBaseElement",
7026
+ "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
7027
+ }
7028
+ },
7029
+ {
7030
+ "kind": "method",
7031
+ "name": "_getCalculatedDimensionPositionElement",
7032
+ "privacy": "private",
7033
+ "return": {
7034
+ "type": {
7035
+ "text": ""
7036
+ }
7037
+ },
7038
+ "parameters": [
7039
+ {
7040
+ "name": "element",
7041
+ "type": {
7042
+ "text": "BaseElement"
7043
+ }
7044
+ },
7045
+ {
7046
+ "name": "coachDimension",
7047
+ "type": {
7048
+ "text": "ElementDimension"
7049
+ }
7050
+ },
7051
+ {
7052
+ "name": "isCalcAreaElement",
7053
+ "type": {
7054
+ "text": "boolean"
7055
+ }
7056
+ }
7057
+ ],
7058
+ "description": "Returns the calculated positions and dimensions of graphical, service and area elements",
7059
+ "inheritedFrom": {
7060
+ "name": "SeatReservationBaseElement",
7061
+ "module": "seat-reservation/seat-reservation/seat-reservation-base-element.js"
7062
+ }
7063
+ },
6943
7064
  {
6944
7065
  "kind": "method",
6945
7066
  "name": "_getPlaceHtmlElement",
@@ -7069,11 +7190,11 @@
7069
7190
  },
7070
7191
  {
7071
7192
  "kind": "method",
7072
- "name": "_setDriverAreasElements",
7193
+ "name": "_isLocomotive",
7073
7194
  "privacy": "private",
7074
7195
  "return": {
7075
7196
  "type": {
7076
- "text": "{\n driverArea: BaseElement | undefined;\n driverAreaNoVerticalWall: BaseElement | undefined;\n }"
7197
+ "text": "boolean"
7077
7198
  }
7078
7199
  },
7079
7200
  "parameters": [
@@ -81,7 +81,8 @@ var SbbAutocompleteGridElement = class extends SbbAutocompleteBaseElement {
81
81
  this.activeOption = null;
82
82
  return;
83
83
  }
84
- this.activeOption = enabledOptions[getNextElementIndex(event, this.activeOption ? enabledOptions.indexOf(this.activeOption) : -1, enabledOptions.length)];
84
+ const next = getNextElementIndex(event, this.activeOption ? enabledOptions.indexOf(this.activeOption) : -1, enabledOptions.length);
85
+ this.activeOption = enabledOptions[next];
85
86
  this.activeOption.setActive(true);
86
87
  this.triggerElement?.setAttribute("aria-activedescendant", this.activeOption.id);
87
88
  this.activeOption.scrollIntoView({ block: "nearest" });
@@ -117,4 +118,4 @@ var SbbAutocompleteGridElement = class extends SbbAutocompleteBaseElement {
117
118
  //#endregion
118
119
  export { SbbAutocompleteGridElement };
119
120
 
120
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzJztcbmltcG9ydCB7IGdldE5leHRFbGVtZW50SW5kZXggfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgaXNTYWZhcmkgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyDJtXN0YXRlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IHNldEFyaWFDb21ib0JveEF0dHJpYnV0ZXMgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaXZpZGVyRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2RpdmlkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkhpbnRFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvb3B0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbi9hdXRvY29tcGxldGUtZ3JpZC1idXR0b24uY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50IH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uL2F1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbi5jb21wb25lbnQudHMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIFwiY2xvc2VyXCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIGEgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyB3aXRoIGNvbm5lY3RlZCBidXR0b25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93YCBvciBgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwYCBlbGVtZW50cyB0byB0aGUgYHNiYi1hdXRvY29tcGxldGUtZ3JpZGAuXG4gKiBAY3NzcHJvcCBbLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1vcHRpb25zLXBhbmVsLW1heC1oZWlnaHRdIC0gTWF4aW11bSBoZWlnaHQgb2YgdGhlIG9wdGlvbnMgcGFuZWwuXG4gKiBJZiB0aGUgY2FsY3VsYXRlZCByZW1haW5pbmcgc3BhY2UgaXMgc21hbGxlciwgdGhlIHZhbHVlIGdldHMgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQ8VD4ge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnZ3JpZCcgOiBudWxsO1xuICBwcm90ZWN0ZWQgb3ZlcmxheUlkID0gYHNiYi1hdXRvY29tcGxldGUtZ3JpZC0keysrbmV4dElkfWA7XG4gIHByb3RlY3RlZCBwYW5lbFJvbGUgPSAnZ3JpZCc7XG4gIHByaXZhdGUgX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICBwcm90ZWN0ZWQgZ2V0IG9wdGlvbnMoKTogU2JiQXV0b2NvbXBsZXRlR3JpZE9wdGlvbkVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPj4oXG4gICAgICAgICdzYmItYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uJyxcbiAgICAgICkgPz8gW10sXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48XG4gICAgICBTYmJEaXZpZGVyRWxlbWVudCB8IFNiYkF1dG9jb21wbGV0ZUdyaWRCdXR0b25FbGVtZW50IHwgU2JiT3B0aW9uSGludEVsZW1lbnRcbiAgICA+KCdzYmItZGl2aWRlciwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbiwgc2JiLW9wdGlvbi1oaW50JykuZm9yRWFjaChcbiAgICAgIChlKSA9PiAoZS5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUpLFxuICAgICk7XG5cbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdywgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IMm1c3RhdGVDb250cm9sbGVyKGVsZW1lbnQpLnRvZ2dsZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLnNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLl9zZXROZXh0SG9yaXpvbnRhbEFjdGl2ZUVsZW1lbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuIGVsZW1lbnQgb24gJ0VudGVyJyBrZXlwcmVzcy5cbiAgICpcbiAgICogRHVlIHRvIGtleWJvYXJkIG5hdmlnYXRpb24gY29kZSwgdGhlIGBfYWN0aXZlQ29sdW1uSW5kZXhgIGlzIHplcm8gd2hlbiBhbiBvcHRpb24gaXMgJ2ZvY3VzZWQnXG4gICAqIGFuZCBncmVhdGVyIHRoYW4gemVybyB3aGVuIGEgYnV0dG9uIGlzICdmb2N1c2VkJywgc28gYXNraW5nIGZvciBgcXVlcnlTZWxlY3RvckFsbCguLi4pW3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XWBcbiAgICogd291bGQgYWx3YXlzIHJldHVybiBhIGBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0QnlLZXlib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSBzZWxlY3RpbmcgYW4gb3B0aW9uIGFuZCB0aGVyZWZvcmUgdGhlIEVudGVyIHByZXNzIHNob3VsZG4ndCB0cmlnZ2VyIGEgZm9ybSBzdWJtaXRcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAhPT0gMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblxuICAgICAgICAgIC5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1idXR0b24nKVxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgb3B0aW9uIGluIHRoZSBzZWxlY3Rvci4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHNoaWZ0IHRoZSBhY3RpdmVDb2x1bW5JbmRleCBieSBvbmUuXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAtIDFcbiAgICAgICAgICBdPy5jbGljaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0Lm1hdGNoZXMoJzpzdGF0ZShkaXNhYmxlZCknKSk7XG5cbiAgICAvLyBSZXNldCBwb3RlbnRpYWxseSBhY3RpdmUgb3B0aW9uXG4gICAgdGhpcy5hY3RpdmVPcHRpb24/LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1yb3cgOnN0YXRlKGZvY3VzLXZpc2libGUpJykgPz8gW10sXG4gICAgKS5mb3JFYWNoKChyb3cpID0+IMm1c3RhdGVDb250cm9sbGVyKHJvdykuZGVsZXRlKCdmb2N1cy12aXNpYmxlJykpO1xuICAgIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICAgIGlmICghZW5hYmxlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGl2ZU9wdGlvbiA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgID8gZW5hYmxlZE9wdGlvbnMuaW5kZXhPZih0aGlzLmFjdGl2ZU9wdGlvbiBhcyBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPilcbiAgICAgIDogLTE7XG5cbiAgICAvLyBHZXQgYW5kIGFjdGl2YXRlIHRoZSBuZXh0IGFjdGl2ZSBvcHRpb25cbiAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgYWN0aXZlSXRlbUluZGV4LCBlbmFibGVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gZW5hYmxlZE9wdGlvbnNbbmV4dF07XG4gICAgdGhpcy5hY3RpdmVPcHRpb24uc2V0QWN0aXZlKHRydWUpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgdGhpcy5hY3RpdmVPcHRpb24uaWQpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIC8vIE1vdmluZyB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgbm90IG1vdmUgdGhlIGlucHV0IGN1cnNvciAoY2FyZXQpXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIElmICdhdXRvU2VsZWN0QWN0aXZlT3B0aW9uJyBhbmQgaXMgdHJpZ2dlcmVkIGZyb20gYSBrZXlib2FyZCBldmVudFxuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24gJiYgZXZlbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVuZGluZ1NlbGVjdGlvbih0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEhvcml6b250YWxBY3RpdmVFbGVtZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzSW5Sb3cgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgICAgPy5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsPFxuICAgICAgICAgIFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgPignc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpID8/IFtdLFxuICAgICk/LmZpbHRlcigoZWwpID0+ICFlbC5tYXRjaGVzKCc6c3RhdGUoZGlzYWJsZWQpJykpO1xuXG4gICAgaWYgKCFlbGVtZW50c0luUm93Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQ6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4LCBlbGVtZW50c0luUm93Lmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQ6IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnQgPVxuICAgICAgZWxlbWVudHNJblJvd1tuZXh0XTtcbiAgICBpZiAobmV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbmV4dEVsZW1lbnQuc2V0QWN0aXZlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICDJtXN0YXRlQ29udHJvbGxlcihuZXh0RWxlbWVudCkuYWRkKCdmb2N1cy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEFjdGl2ZUVsZW1lbnQgPSBlbGVtZW50c0luUm93W3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XTtcbiAgICBpZiAobGFzdEFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbGFzdEFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgybVzdGF0ZUNvbnRyb2xsZXIobGFzdEFjdGl2ZUVsZW1lbnQpLmRlbGV0ZSgnZm9jdXMtdmlzaWJsZScpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRFbGVtZW50LmlkKTtcbiAgICBuZXh0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgdGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggPSBuZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0QWN0aXZlRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggIT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uXG4gICAgICAgID8uY2xvc2VzdCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdycpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpXG4gICAgICAgIC5mb3JFYWNoKChlKSA9PiDJtXN0YXRlQ29udHJvbGxlcihlKS5kZWxldGUoJ2ZvY3VzLXZpc2libGUnKSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uPy5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCA9IDA7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUcmlnZ2VyQXR0cmlidXRlcyhlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgc2V0QXJpYUNvbWJvQm94QXR0cmlidXRlcyhlbGVtZW50LCBhcmlhUm9sZU9uSG9zdCA/IHRoaXMuaWQgOiB0aGlzLm92ZXJsYXlJZCwgZmFsc2UsICdncmlkJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1hdXRvY29tcGxldGUtZ3JpZCc6IFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXQSxJQUFJLFNBQVM7Ozs7O0FBTWIsSUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7O0FBWXZCLElBQWEsNkJBQWIsY0FBNEQsMkJBQTZCO0NBQXpGLGNBQUE7O0FBR1ksT0FBQSxZQUFZLHlCQUF5QixFQUFFO0FBQ3ZDLE9BQUEsWUFBWTtBQUNkLE9BQUEscUJBQXFCOzs7QUFKRyxPQUFBLGNBQXNCOzs7QUFDdEIsT0FBQSxPQUFPLGlCQUFpQixTQUFTOztDQUtqRSxJQUFjLFVBQU87QUFDbkIsU0FBTyxNQUFNLEtBQ1gsS0FBSyxtQkFDSCwrQkFDRCxJQUFJLEVBQUUsQ0FDUjs7Q0FHTyxlQUFZO0FBQ3BCLE9BQUssbUJBRUgsNkRBQTZELENBQUMsU0FDN0QsTUFBTyxFQUFFLFdBQVcsS0FBSyxTQUMzQjtBQUVELE9BQUssbUJBQ0gsMEZBQ0QsQ0FBQyxTQUFTLFlBQVksaUJBQWlCLFFBQVEsQ0FBQyxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUM7O0NBRzNFLCtCQUErQixPQUFvQjtBQUMzRCxNQUFJLENBQUMsS0FBSyxPQUNSO0FBRUYsVUFBUSxNQUFNLEtBQWQ7R0FDRSxLQUFLO0FBQ0gsU0FBSyxpQkFBaUIsTUFBTTtBQUM1QjtHQUVG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
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQvYXV0b2NvbXBsZXRlLWdyaWQuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzJztcbmltcG9ydCB7IGdldE5leHRFbGVtZW50SW5kZXggfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgaXNTYWZhcmkgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyDJtXN0YXRlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvbWl4aW5zLmpzJztcbmltcG9ydCB7IHNldEFyaWFDb21ib0JveEF0dHJpYnV0ZXMgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL292ZXJsYXkuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaXZpZGVyRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2RpdmlkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJPcHRHcm91cEVsZW1lbnQsIFNiYk9wdGlvbkhpbnRFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvb3B0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbi9hdXRvY29tcGxldGUtZ3JpZC1idXR0b24uY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50IH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uL2F1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbi5jb21wb25lbnQudHMnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIFwiY2xvc2VyXCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbi8qKlxuICogQ29tYmluZWQgd2l0aCBhIG5hdGl2ZSBpbnB1dCwgaXQgZGlzcGxheXMgYSBwYW5lbCB3aXRoIGEgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyB3aXRoIGNvbm5lY3RlZCBidXR0b25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93YCBvciBgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwYCBlbGVtZW50cyB0byB0aGUgYHNiYi1hdXRvY29tcGxldGUtZ3JpZGAuXG4gKiBAY3NzcHJvcCBbLS1zYmItYXV0b2NvbXBsZXRlLXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1vcHRpb25zLXBhbmVsLW1heC1oZWlnaHRdIC0gTWF4aW11bSBoZWlnaHQgb2YgdGhlIG9wdGlvbnMgcGFuZWwuXG4gKiBJZiB0aGUgY2FsY3VsYXRlZCByZW1haW5pbmcgc3BhY2UgaXMgc21hbGxlciwgdGhlIHZhbHVlIGdldHMgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiQXV0b2NvbXBsZXRlQmFzZUVsZW1lbnQ8VD4ge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnZ3JpZCcgOiBudWxsO1xuICBwcm90ZWN0ZWQgb3ZlcmxheUlkID0gYHNiYi1hdXRvY29tcGxldGUtZ3JpZC0keysrbmV4dElkfWA7XG4gIHByb3RlY3RlZCBwYW5lbFJvbGUgPSAnZ3JpZCc7XG4gIHByaXZhdGUgX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICBwcm90ZWN0ZWQgZ2V0IG9wdGlvbnMoKTogU2JiQXV0b2NvbXBsZXRlR3JpZE9wdGlvbkVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPj4oXG4gICAgICAgICdzYmItYXV0b2NvbXBsZXRlLWdyaWQtb3B0aW9uJyxcbiAgICAgICkgPz8gW10sXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48XG4gICAgICBTYmJEaXZpZGVyRWxlbWVudCB8IFNiYkF1dG9jb21wbGV0ZUdyaWRCdXR0b25FbGVtZW50IHwgU2JiT3B0aW9uSGludEVsZW1lbnRcbiAgICA+KCdzYmItZGl2aWRlciwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbiwgc2JiLW9wdGlvbi1oaW50JykuZm9yRWFjaChcbiAgICAgIChlKSA9PiAoZS5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUpLFxuICAgICk7XG5cbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPiB8IFNiYk9wdEdyb3VwRWxlbWVudD4oXG4gICAgICAnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdywgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGdyb3VwJyxcbiAgICApLmZvckVhY2goKGVsZW1lbnQpID0+IMm1c3RhdGVDb250cm9sbGVyKGVsZW1lbnQpLnRvZ2dsZSgnbmVnYXRpdmUnLCB0aGlzLm5lZ2F0aXZlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLnNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLl9zZXROZXh0SG9yaXpvbnRhbEFjdGl2ZUVsZW1lbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuIGVsZW1lbnQgb24gJ0VudGVyJyBrZXlwcmVzcy5cbiAgICpcbiAgICogRHVlIHRvIGtleWJvYXJkIG5hdmlnYXRpb24gY29kZSwgdGhlIGBfYWN0aXZlQ29sdW1uSW5kZXhgIGlzIHplcm8gd2hlbiBhbiBvcHRpb24gaXMgJ2ZvY3VzZWQnXG4gICAqIGFuZCBncmVhdGVyIHRoYW4gemVybyB3aGVuIGEgYnV0dG9uIGlzICdmb2N1c2VkJywgc28gYXNraW5nIGZvciBgcXVlcnlTZWxlY3RvckFsbCguLi4pW3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XWBcbiAgICogd291bGQgYWx3YXlzIHJldHVybiBhIGBTYmJBdXRvY29tcGxldGVHcmlkQnV0dG9uRWxlbWVudGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VsZWN0QnlLZXlib2FyZChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgLy8gV2UgYXJlIGN1cnJlbnRseSBzZWxlY3RpbmcgYW4gb3B0aW9uIGFuZCB0aGVyZWZvcmUgdGhlIEVudGVyIHByZXNzIHNob3VsZG4ndCB0cmlnZ2VyIGEgZm9ybSBzdWJtaXRcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAhPT0gMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblxuICAgICAgICAgIC5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1idXR0b24nKVxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgb3B0aW9uIGluIHRoZSBzZWxlY3Rvci4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHNoaWZ0IHRoZSBhY3RpdmVDb2x1bW5JbmRleCBieSBvbmUuXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCAtIDFcbiAgICAgICAgICBdPy5jbGljaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhb3B0Lm1hdGNoZXMoJzpzdGF0ZShkaXNhYmxlZCknKSk7XG5cbiAgICAvLyBSZXNldCBwb3RlbnRpYWxseSBhY3RpdmUgb3B0aW9uXG4gICAgdGhpcy5hY3RpdmVPcHRpb24/LnNldEFjdGl2ZShmYWxzZSk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1hdXRvY29tcGxldGUtZ3JpZC1yb3cgOnN0YXRlKGZvY3VzLXZpc2libGUpJykgPz8gW10sXG4gICAgKS5mb3JFYWNoKChyb3cpID0+IMm1c3RhdGVDb250cm9sbGVyKHJvdykuZGVsZXRlKCdmb2N1cy12aXNpYmxlJykpO1xuICAgIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4ID0gMDtcblxuICAgIGlmICghZW5hYmxlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGl2ZU9wdGlvbiA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgID8gZW5hYmxlZE9wdGlvbnMuaW5kZXhPZih0aGlzLmFjdGl2ZU9wdGlvbiBhcyBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudDxUPilcbiAgICAgIDogLTE7XG5cbiAgICAvLyBHZXQgYW5kIGFjdGl2YXRlIHRoZSBuZXh0IGFjdGl2ZSBvcHRpb25cbiAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgYWN0aXZlSXRlbUluZGV4LCBlbmFibGVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gZW5hYmxlZE9wdGlvbnNbbmV4dF07XG4gICAgdGhpcy5hY3RpdmVPcHRpb24uc2V0QWN0aXZlKHRydWUpO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgdGhpcy5hY3RpdmVPcHRpb24uaWQpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgIC8vIE1vdmluZyB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgbm90IG1vdmUgdGhlIGlucHV0IGN1cnNvciAoY2FyZXQpXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIElmICdhdXRvU2VsZWN0QWN0aXZlT3B0aW9uJyBhbmQgaXMgdHJpZ2dlcmVkIGZyb20gYSBrZXlib2FyZCBldmVudFxuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RBY3RpdmVPcHRpb24gJiYgZXZlbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVuZGluZ1NlbGVjdGlvbih0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEhvcml6b250YWxBY3RpdmVFbGVtZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzSW5Sb3cgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5hY3RpdmVPcHRpb25cbiAgICAgICAgPy5jbG9zZXN0KCdzYmItYXV0b2NvbXBsZXRlLWdyaWQtcm93JylcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsPFxuICAgICAgICAgIFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgPignc2JiLWF1dG9jb21wbGV0ZS1ncmlkLW9wdGlvbiwgc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpID8/IFtdLFxuICAgICk/LmZpbHRlcigoZWwpID0+ICFlbC5tYXRjaGVzKCc6c3RhdGUoZGlzYWJsZWQpJykpO1xuXG4gICAgaWYgKCFlbGVtZW50c0luUm93Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQ6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIHRoaXMuX2FjdGl2ZUNvbHVtbkluZGV4LCBlbGVtZW50c0luUm93Lmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQ6IFNiYkF1dG9jb21wbGV0ZUdyaWRPcHRpb25FbGVtZW50PFQ+IHwgU2JiQXV0b2NvbXBsZXRlR3JpZEJ1dHRvbkVsZW1lbnQgPVxuICAgICAgZWxlbWVudHNJblJvd1tuZXh0XTtcbiAgICBpZiAobmV4dEVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbmV4dEVsZW1lbnQuc2V0QWN0aXZlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICDJtXN0YXRlQ29udHJvbGxlcihuZXh0RWxlbWVudCkuYWRkKCdmb2N1cy12aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEFjdGl2ZUVsZW1lbnQgPSBlbGVtZW50c0luUm93W3RoaXMuX2FjdGl2ZUNvbHVtbkluZGV4XTtcbiAgICBpZiAobGFzdEFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBTYmJBdXRvY29tcGxldGVHcmlkT3B0aW9uRWxlbWVudCkge1xuICAgICAgbGFzdEFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgybVzdGF0ZUNvbnRyb2xsZXIobGFzdEFjdGl2ZUVsZW1lbnQpLmRlbGV0ZSgnZm9jdXMtdmlzaWJsZScpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG5leHRFbGVtZW50LmlkKTtcbiAgICBuZXh0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgdGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggPSBuZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0QWN0aXZlRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlQ29sdW1uSW5kZXggIT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uXG4gICAgICAgID8uY2xvc2VzdCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLXJvdycpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgnc2JiLWF1dG9jb21wbGV0ZS1ncmlkLWJ1dHRvbicpXG4gICAgICAgIC5mb3JFYWNoKChlKSA9PiDJtXN0YXRlQ29udHJvbGxlcihlKS5kZWxldGUoJ2ZvY3VzLXZpc2libGUnKSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uPy5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVDb2x1bW5JbmRleCA9IDA7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUcmlnZ2VyQXR0cmlidXRlcyhlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgc2V0QXJpYUNvbWJvQm94QXR0cmlidXRlcyhlbGVtZW50LCBhcmlhUm9sZU9uSG9zdCA/IHRoaXMuaWQgOiB0aGlzLm92ZXJsYXlJZCwgZmFsc2UsICdncmlkJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1hdXRvY29tcGxldGUtZ3JpZCc6IFNiYkF1dG9jb21wbGV0ZUdyaWRFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXQSxJQUFJLFNBQVM7Ozs7O0FBTWIsSUFBTSxpQkFBaUI7Ozs7Ozs7Ozs7O0FBWXZCLElBQWEsNkJBQWIsY0FBNEQsMkJBQTZCO0NBQXpGLGNBQUE7O0FBR1ksT0FBQSxZQUFZLHlCQUF5QixFQUFFO0FBQ3ZDLE9BQUEsWUFBWTtBQUNkLE9BQUEscUJBQXFCOzs7QUFKRyxPQUFBLGNBQXNCOzs7QUFDdEIsT0FBQSxPQUFPLGlCQUFpQixTQUFTOztDQUtqRSxJQUFjLFVBQU87QUFDbkIsU0FBTyxNQUFNLEtBQ1gsS0FBSyxtQkFDSCwrQkFDRCxJQUFJLEVBQUUsQ0FDUjs7Q0FHTyxlQUFZO0FBQ3BCLE9BQUssbUJBRUgsNkRBQTZELENBQUMsU0FDN0QsTUFBTyxFQUFFLFdBQVcsS0FBSyxTQUMzQjtBQUVELE9BQUssbUJBQ0gsMEZBQ0QsQ0FBQyxTQUFTLFlBQVksaUJBQWlCLFFBQVEsQ0FBQyxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUM7O0NBRzNFLCtCQUErQixPQUFvQjtBQUMzRCxNQUFJLENBQUMsS0FBSyxPQUNSO0FBRUYsVUFBUSxNQUFNLEtBQWQ7R0FDRSxLQUFLO0FBQ0gsU0FBSyxpQkFBaUIsTUFBTTtBQUM1QjtHQUVG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