@simpleangularcontrols/sac-common 16.0.0-rc.3 → 16.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/common/basedatetimecontrol.d.ts.map +1 -1
  2. package/common/basemodelcontrol.d.ts +24 -1
  3. package/common/basemodelcontrol.d.ts.map +1 -1
  4. package/common/baseuploadcontrol.d.ts.map +1 -1
  5. package/components/browser/browser.d.ts +11 -6
  6. package/components/browser/browser.d.ts.map +1 -1
  7. package/controls/buttons/button.d.ts +23 -22
  8. package/controls/buttons/button.d.ts.map +1 -1
  9. package/controls/checkbox/radiobutton.d.ts +9 -0
  10. package/controls/checkbox/radiobutton.d.ts.map +1 -1
  11. package/controls/checkbox/radiobuttons.d.ts +20 -20
  12. package/controls/checkbox/radiobuttons.d.ts.map +1 -1
  13. package/controls/confirm/confirm.button.d.ts +14 -8
  14. package/controls/confirm/confirm.button.d.ts.map +1 -1
  15. package/controls/confirm/confirm.service.d.ts +24 -19
  16. package/controls/confirm/confirm.service.d.ts.map +1 -1
  17. package/controls/datetime/date.d.ts +33 -33
  18. package/controls/datetime/date.d.ts.map +1 -1
  19. package/controls/datetime/datetime.d.ts +31 -31
  20. package/controls/datetime/datetime.d.ts.map +1 -1
  21. package/controls/datetime/time.d.ts +29 -29
  22. package/controls/datetime/time.d.ts.map +1 -1
  23. package/controls/grid/grid.d.ts +57 -54
  24. package/controls/grid/grid.d.ts.map +1 -1
  25. package/controls/grid/paging.d.ts +70 -67
  26. package/controls/grid/paging.d.ts.map +1 -1
  27. package/controls/input/input.d.ts +11 -11
  28. package/controls/input/input.d.ts.map +1 -1
  29. package/controls/input/inputdecimal.d.ts.map +1 -1
  30. package/controls/input/inputemail.d.ts.map +1 -1
  31. package/controls/input/inputinteger.d.ts +21 -21
  32. package/controls/input/inputinteger.d.ts.map +1 -1
  33. package/controls/input/inputpassword.d.ts +5 -5
  34. package/controls/input/inputpassword.d.ts.map +1 -1
  35. package/controls/layout/formlayout.d.ts +14 -9
  36. package/controls/layout/formlayout.d.ts.map +1 -1
  37. package/controls/list/dropdown.d.ts.map +1 -1
  38. package/controls/list/listbox.d.ts +20 -20
  39. package/controls/list/listbox.d.ts.map +1 -1
  40. package/controls/multilanguage/multilanguageinput.d.ts +31 -31
  41. package/controls/multilanguage/multilanguageinput.d.ts.map +1 -1
  42. package/controls/multilanguage/multilanguageinputarea.d.ts +34 -34
  43. package/controls/multilanguage/multilanguageinputarea.d.ts.map +1 -1
  44. package/controls/tinymce/tinymce.d.ts.map +1 -1
  45. package/controls/upload/dropzonemultiple.d.ts +24 -24
  46. package/controls/upload/dropzonemultiple.d.ts.map +1 -1
  47. package/controls/upload/uploadmultiple.d.ts +9 -9
  48. package/controls/upload/uploadmultiple.d.ts.map +1 -1
  49. package/controls/validation/validationsummary.d.ts +18 -13
  50. package/controls/validation/validationsummary.d.ts.map +1 -1
  51. package/enums/ButtonRoleType.d.ts +2 -0
  52. package/enums/ButtonRoleType.d.ts.map +1 -0
  53. package/enums/ControlHeight.d.ts +18 -0
  54. package/enums/ControlHeight.d.ts.map +1 -0
  55. package/esm2022/common/basedatetimecontrol.mjs +32 -148
  56. package/esm2022/common/baseinputcontrol.mjs +20 -77
  57. package/esm2022/common/baselistcontrol.mjs +11 -56
  58. package/esm2022/common/basemodelcontrol.mjs +81 -393
  59. package/esm2022/common/baseselectcontrol.mjs +6 -27
  60. package/esm2022/common/baseuploadcontrol.mjs +64 -389
  61. package/esm2022/components/browser/browser.mjs +66 -474
  62. package/esm2022/components/browser/models/browserfile.mjs +3 -2
  63. package/esm2022/components/browser/models/browserfiledeleterequest.mjs +5 -10
  64. package/esm2022/components/browser/models/browserfilerenamerequest.mjs +5 -10
  65. package/esm2022/components/browser/models/browserfileresponse.mjs +3 -2
  66. package/esm2022/components/browser/models/browserfilesaverequest.mjs +5 -10
  67. package/esm2022/components/browser/models/browsernode.mjs +3 -2
  68. package/esm2022/components/browser/models/browsernodedeleterequest.mjs +5 -10
  69. package/esm2022/components/browser/models/browsernodenewrequest.mjs +5 -10
  70. package/esm2022/components/browser/models/browsernoderenamerequest.mjs +5 -10
  71. package/esm2022/components/browser/models/browsernoderequest.mjs +5 -10
  72. package/esm2022/components/browser/models/browsernoderesponse.mjs +3 -2
  73. package/esm2022/controls/buttons/button.mjs +32 -131
  74. package/esm2022/controls/checkbox/checkbox.mjs +7 -34
  75. package/esm2022/controls/checkbox/radiobutton.mjs +24 -98
  76. package/esm2022/controls/checkbox/radiobuttons.mjs +26 -104
  77. package/esm2022/controls/confirm/confirm.button.mjs +17 -21
  78. package/esm2022/controls/confirm/confirm.mjs +19 -69
  79. package/esm2022/controls/confirm/confirm.service.mjs +29 -74
  80. package/esm2022/controls/contextmenu/contextmenu.mjs +31 -169
  81. package/esm2022/controls/contextmenu/contextmenuanchor.mjs +7 -20
  82. package/esm2022/controls/contextmenu/contextmenucontainer.mjs +7 -20
  83. package/esm2022/controls/contextmenu/contextmenuitem.mjs +4 -13
  84. package/esm2022/controls/contextmenu/contextmenuitembutton.mjs +15 -91
  85. package/esm2022/controls/datetime/date.mjs +39 -203
  86. package/esm2022/controls/datetime/dateselector.mjs +65 -409
  87. package/esm2022/controls/datetime/datetime.mjs +41 -220
  88. package/esm2022/controls/datetime/time.mjs +38 -201
  89. package/esm2022/controls/dialog/dialog.mjs +33 -194
  90. package/esm2022/controls/form/form.mjs +24 -96
  91. package/esm2022/controls/grid/grid.mjs +39 -146
  92. package/esm2022/controls/grid/gridbutton.mjs +9 -52
  93. package/esm2022/controls/grid/gridcolumn.mjs +9 -41
  94. package/esm2022/controls/grid/gridcolumnaction.mjs +5 -20
  95. package/esm2022/controls/grid/gridcolumnbase.mjs +20 -114
  96. package/esm2022/controls/grid/gridimage.mjs +4 -15
  97. package/esm2022/controls/grid/model.mjs +16 -59
  98. package/esm2022/controls/grid/paging.mjs +65 -232
  99. package/esm2022/controls/input/input.mjs +17 -65
  100. package/esm2022/controls/input/inputarea.mjs +10 -53
  101. package/esm2022/controls/input/inputcurrency.mjs +4 -14
  102. package/esm2022/controls/input/inputdecimal.mjs +25 -140
  103. package/esm2022/controls/input/inputemail.mjs +10 -37
  104. package/esm2022/controls/input/inputinteger.mjs +32 -127
  105. package/esm2022/controls/input/inputpassword.mjs +12 -43
  106. package/esm2022/controls/input/inputsearch.mjs +8 -37
  107. package/esm2022/controls/layout/formlayout.mjs +20 -65
  108. package/esm2022/controls/list/dropdown.mjs +54 -219
  109. package/esm2022/controls/list/listbox.mjs +40 -159
  110. package/esm2022/controls/multilanguage/multilanguageinput.mjs +45 -213
  111. package/esm2022/controls/multilanguage/multilanguageinputarea.mjs +48 -215
  112. package/esm2022/controls/static/formcontainer.mjs +10 -44
  113. package/esm2022/controls/static/staticlabel.mjs +7 -28
  114. package/esm2022/controls/tabs/tab.mjs +14 -68
  115. package/esm2022/controls/tabs/tabitem.mjs +7 -37
  116. package/esm2022/controls/tinymce/tinymce.mjs +41 -218
  117. package/esm2022/controls/tinymce/tinymcedialogsettings.mjs +5 -10
  118. package/esm2022/controls/tinymce/tinymcedialogsettingsmeta.mjs +4 -4
  119. package/esm2022/controls/tinymce/tinymceinstance.mjs +3 -2
  120. package/esm2022/controls/tooltip/tooltip.mjs +46 -327
  121. package/esm2022/controls/treeview/ngtreeitemaction.mjs +9 -56
  122. package/esm2022/controls/treeview/treeview.mjs +53 -299
  123. package/esm2022/controls/treeview/treeviewchild.mjs +5 -19
  124. package/esm2022/controls/upload/dropzonemultiple.mjs +32 -152
  125. package/esm2022/controls/upload/dropzonesingle.mjs +12 -91
  126. package/esm2022/controls/upload/uploadmultiple.mjs +21 -111
  127. package/esm2022/controls/upload/uploadsingle.mjs +8 -50
  128. package/esm2022/controls/validation/validationsummary.mjs +23 -120
  129. package/esm2022/controls/wizard/wizard.mjs +20 -128
  130. package/esm2022/controls/wizard/wizarditem.mjs +6 -31
  131. package/esm2022/enums/ButtonRoleType.mjs +3 -0
  132. package/esm2022/enums/ControlHeight.mjs +11 -0
  133. package/esm2022/enums/IconType.mjs +4 -8
  134. package/esm2022/interfaces/ISacConfigurationService.mjs +3 -0
  135. package/esm2022/interfaces/ISacFileBrowserService.mjs +3 -2
  136. package/esm2022/interfaces/ISacIconService.mjs +3 -2
  137. package/esm2022/interfaces/ISacLabelSizes.mjs +3 -2
  138. package/esm2022/interfaces/ISacLanguageService.mjs +3 -2
  139. package/esm2022/interfaces/ISacLocalisationService.mjs +3 -2
  140. package/esm2022/interfaces/ISacValidationKeyService.mjs +3 -0
  141. package/esm2022/interfaces/iabstractcontrollabel.mjs +3 -2
  142. package/esm2022/interfaces/iconfirmcomponent.mjs +3 -2
  143. package/esm2022/interfaces/idatetimecontrol.mjs +3 -2
  144. package/esm2022/interfaces/iuploadcontrol.mjs +3 -2
  145. package/esm2022/models/languagemodel.mjs +5 -11
  146. package/esm2022/public_api.mjs +23 -95
  147. package/esm2022/services/index.mjs +3 -5
  148. package/esm2022/services/sac-configuration.service.mjs +25 -0
  149. package/esm2022/services/sac-filebrowser.service.mjs +15 -167
  150. package/esm2022/services/sac-icon.service.mjs +49 -155
  151. package/esm2022/services/sac-language.service.mjs +7 -45
  152. package/esm2022/services/sac-localisation.service.mjs +33 -428
  153. package/esm2022/services/sac-validationkey.service.mjs +7 -0
  154. package/esm2022/simpleangularcontrols-sac-common.mjs +4 -4
  155. package/esm2022/utilities/convertion.mjs +6 -26
  156. package/esm2022/utilities/datatypes.mjs +4 -6
  157. package/esm2022/utilities/enums.mjs +8 -15
  158. package/esm2022/utilities/guid.mjs +6 -0
  159. package/esm2022/utilities/interpolation.mjs +7 -42
  160. package/esm2022/utilities/positioning.mjs +23 -266
  161. package/esm2022/validation/email.validator.mjs +3 -13
  162. package/esm2022/validation/index.mjs +3 -3
  163. package/esm2022/validation/invaliddate.validator.mjs +3 -14
  164. package/esm2022/validation/isDateValid.mjs +5 -14
  165. package/esm2022/validation/maxdate.validator.mjs +4 -21
  166. package/esm2022/validation/maxtime.validator.mjs +4 -21
  167. package/esm2022/validation/maxvalue.validator.mjs +3 -16
  168. package/esm2022/validation/mindate.validator.mjs +4 -21
  169. package/esm2022/validation/minfiles.validator.mjs +4 -19
  170. package/esm2022/validation/minlength.validator.mjs +3 -21
  171. package/esm2022/validation/mintime.validator.mjs +4 -21
  172. package/esm2022/validation/minvalue.validator.mjs +3 -16
  173. package/esm2022/validation/multilanguagerequired.validator.mjs +3 -22
  174. package/esm2022/validation/multilanguagerequiredany.validator.mjs +3 -22
  175. package/esm2022/validation/pattern.validator.mjs +3 -16
  176. package/esm2022/validation/required.validator.mjs +3 -13
  177. package/esm2022/validation/validation.mjs +20 -99
  178. package/esm2022/validation/validationerrorcreator.mjs +3 -11
  179. package/esm2022/validation/validationerroritem.mjs +7 -19
  180. package/fesm2022/simpleangularcontrols-sac-common.mjs +1638 -8935
  181. package/fesm2022/simpleangularcontrols-sac-common.mjs.map +1 -1
  182. package/interfaces/ISacConfigurationService.d.ts +35 -0
  183. package/interfaces/ISacConfigurationService.d.ts.map +1 -0
  184. package/interfaces/ISacIconService.d.ts +2 -2
  185. package/interfaces/ISacIconService.d.ts.map +1 -1
  186. package/interfaces/ISacValidationKeyService.d.ts +53 -0
  187. package/interfaces/ISacValidationKeyService.d.ts.map +1 -0
  188. package/package.json +2 -2
  189. package/public_api.d.ts +4 -1
  190. package/public_api.d.ts.map +1 -1
  191. package/services/index.d.ts +6 -4
  192. package/services/index.d.ts.map +1 -1
  193. package/services/sac-configuration.service.d.ts +76 -0
  194. package/services/sac-configuration.service.d.ts.map +1 -0
  195. package/services/sac-localisation.service.d.ts +103 -97
  196. package/services/sac-localisation.service.d.ts.map +1 -1
  197. package/services/sac-validationkey.service.d.ts +59 -0
  198. package/services/sac-validationkey.service.d.ts.map +1 -0
  199. package/simpleangularcontrols-sac-common-16.0.0-rc.5.tgz +0 -0
  200. package/utilities/guid.d.ts +5 -0
  201. package/utilities/guid.d.ts.map +1 -0
  202. package/simpleangularcontrols-sac-common-16.0.0-rc.3.tgz +0 -0
@@ -1,554 +1,146 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output, } from '@angular/core';
2
- import { SACICON_SERVICE, SACLOCALISATION_SERVICE, SacDefaultIconService, } from '../../services';
3
- import { SACFILEBROWSER_SERVICE, SacDefaultFileBrowserService, } from '../../services/sac-filebrowser.service';
4
- import { SacDefaultLocalisationService } from '../../services/sac-localisation.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common/http";
7
- /**
1
+ function cov_2non7o6v3i(){var path="C:\\Projekte\\simpleangularcontrols-ng16\\ch.jnetwork.sac-controls\\dist\\sac-common\\esm2022\\components\\browser\\browser.mjs";var hash="71145b16a3087d43ee0a8db110bc470a31c668ad";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"C:\\Projekte\\simpleangularcontrols-ng16\\ch.jnetwork.sac-controls\\dist\\sac-common\\esm2022\\components\\browser\\browser.mjs",statementMap:{"0":{start:{line:22,column:8},end:{line:22,column:35}},"1":{start:{line:27,column:8},end:{line:27,column:31}},"2":{start:{line:31,column:8},end:{line:31,column:36}},"3":{start:{line:35,column:8},end:{line:35,column:36}},"4":{start:{line:39,column:8},end:{line:39,column:36}},"5":{start:{line:43,column:8},end:{line:43,column:38}},"6":{start:{line:47,column:8},end:{line:47,column:38}},"7":{start:{line:51,column:8},end:{line:51,column:38}},"8":{start:{line:55,column:8},end:{line:55,column:39}},"9":{start:{line:59,column:8},end:{line:67,column:10}},"10":{start:{line:71,column:8},end:{line:71,column:37}},"11":{start:{line:75,column:8},end:{line:75,column:33}},"12":{start:{line:79,column:8},end:{line:79,column:26}},"13":{start:{line:80,column:8},end:{line:80,column:113}},"14":{start:{line:81,column:8},end:{line:81,column:113}},"15":{start:{line:82,column:8},end:{line:82,column:134}},"16":{start:{line:83,column:8},end:{line:83,column:86}},"17":{start:{line:91,column:29},end:{line:91,column:74}},"18":{start:{line:92,column:8},end:{line:94,column:9}},"19":{start:{line:93,column:12},end:{line:93,column:42}},"20":{start:{line:95,column:8},end:{line:95,column:32}},"21":{start:{line:102,column:8},end:{line:102,column:59}},"22":{start:{line:109,column:8},end:{line:109,column:57}},"23":{start:{line:116,column:8},end:{line:116,column:65}},"24":{start:{line:123,column:8},end:{line:123,column:64}},"25":{start:{line:130,column:8},end:{line:130,column:62}},"26":{start:{line:137,column:8},end:{line:137,column:63}},"27":{start:{line:144,column:8},end:{line:144,column:60}},"28":{start:{line:150,column:8},end:{line:155,column:9}},"29":{start:{line:151,column:12},end:{line:151,column:37}},"30":{start:{line:154,column:12},end:{line:154,column:24}},"31":{start:{line:163,column:8},end:{line:170,column:9}},"32":{start:{line:164,column:12},end:{line:164,column:79}},"33":{start:{line:164,column:54},end:{line:164,column:76}},"34":{start:{line:165,column:12},end:{line:169,column:13}},"35":{start:{line:168,column:16},end:{line:168,column:55}},"36":{start:{line:171,column:8},end:{line:171,column:37}},"37":{start:{line:178,column:8},end:{line:186,column:11}},"38":{start:{line:179,column:12},end:{line:185,column:13}},"39":{start:{line:180,column:16},end:{line:184,column:19}},"40":{start:{line:183,column:20},end:{line:183,column:59}},"41":{start:{line:193,column:8},end:{line:206,column:11}},"42":{start:{line:194,column:12},end:{line:205,column:13}},"43":{start:{line:195,column:16},end:{line:204,column:19}},"44":{start:{line:198,column:39},end:{line:198,column:79}},"45":{start:{line:199,column:20},end:{line:199,column:67}},"46":{start:{line:200,column:20},end:{line:202,column:23}},"47":{start:{line:201,column:24},end:{line:201,column:47}},"48":{start:{line:203,column:20},end:{line:203,column:48}},"49":{start:{line:213,column:8},end:{line:213,column:31}},"50":{start:{line:220,column:8},end:{line:220,column:31}},"51":{start:{line:227,column:21},end:{line:235,column:9}},"52":{start:{line:236,column:8},end:{line:236,column:35}},"53":{start:{line:237,column:8},end:{line:237,column:30}},"54":{start:{line:238,column:8},end:{line:238,column:28}},"55":{start:{line:244,column:8},end:{line:262,column:11}},"56":{start:{line:247,column:12},end:{line:255,column:14}},"57":{start:{line:256,column:12},end:{line:256,column:37}},"58":{start:{line:257,column:12},end:{line:257,column:46}},"59":{start:{line:259,column:12},end:{line:261,column:13}},"60":{start:{line:260,column:16},end:{line:260,column:56}},"61":{start:{line:268,column:8},end:{line:270,column:9}},"62":{start:{line:269,column:12},end:{line:269,column:40}},"63":{start:{line:271,column:8},end:{line:277,column:11}},"64":{start:{line:274,column:12},end:{line:274,column:53}},"65":{start:{line:275,column:12},end:{line:275,column:43}},"66":{start:{line:276,column:12},end:{line:276,column:37}},"67":{start:{line:285,column:8},end:{line:285,column:32}},"68":{start:{line:286,column:8},end:{line:289,column:9}},"69":{start:{line:288,column:12},end:{line:288,column:19}},"70":{start:{line:290,column:8},end:{line:296,column:9}},"71":{start:{line:291,column:12},end:{line:295,column:15}},"72":{start:{line:294,column:16},end:{line:294,column:55}},"73":{start:{line:304,column:8},end:{line:304,column:32}},"74":{start:{line:305,column:8},end:{line:337,column:9}},"75":{start:{line:306,column:12},end:{line:311,column:13}},"76":{start:{line:310,column:16},end:{line:310,column:23}},"77":{start:{line:312,column:12},end:{line:319,column:13}},"78":{start:{line:313,column:16},end:{line:318,column:19}},"79":{start:{line:316,column:20},end:{line:316,column:49}},"80":{start:{line:317,column:20},end:{line:317,column:45}},"81":{start:{line:322,column:12},end:{line:327,column:13}},"82":{start:{line:325,column:16},end:{line:325,column:55}},"83":{start:{line:326,column:16},end:{line:326,column:23}},"84":{start:{line:328,column:12},end:{line:328,column:38}},"85":{start:{line:329,column:12},end:{line:329,column:35}},"86":{start:{line:330,column:12},end:{line:336,column:15}},"87":{start:{line:333,column:16},end:{line:333,column:45}},"88":{start:{line:334,column:16},end:{line:334,column:47}},"89":{start:{line:335,column:16},end:{line:335,column:41}},"90":{start:{line:344,column:8},end:{line:346,column:9}},"91":{start:{line:345,column:12},end:{line:345,column:79}},"92":{start:{line:345,column:54},end:{line:345,column:76}},"93":{start:{line:347,column:8},end:{line:352,column:9}},"94":{start:{line:348,column:12},end:{line:348,column:77}},"95":{start:{line:351,column:12},end:{line:351,column:52}},"96":{start:{line:353,column:8},end:{line:353,column:37}},"97":{start:{line:354,column:8},end:{line:354,column:42}},"98":{start:{line:361,column:8},end:{line:363,column:9}},"99":{start:{line:362,column:12},end:{line:362,column:40}},"100":{start:{line:365,column:8},end:{line:365,column:37}},"101":{start:{line:366,column:8},end:{line:383,column:9}},"102":{start:{line:367,column:12},end:{line:379,column:15}},"103":{start:{line:370,column:16},end:{line:370,column:42}},"104":{start:{line:371,column:16},end:{line:371,column:41}},"105":{start:{line:372,column:16},end:{line:378,column:17}},"106":{start:{line:373,column:37},end:{line:373,column:108}},"107":{start:{line:374,column:33},end:{line:374,column:84}},"108":{start:{line:374,column:58},end:{line:374,column:83}},"109":{start:{line:375,column:20},end:{line:377,column:21}},"110":{start:{line:376,column:24},end:{line:376,column:46}},"111":{start:{line:382,column:12},end:{line:382,column:37}},"112":{start:{line:390,column:8},end:{line:395,column:9}},"113":{start:{line:391,column:12},end:{line:391,column:36}},"114":{start:{line:394,column:12},end:{line:394,column:35}},"115":{start:{line:402,column:8},end:{line:408,column:9}},"116":{start:{line:403,column:12},end:{line:407,column:15}},"117":{start:{line:404,column:16},end:{line:406,column:17}},"118":{start:{line:405,column:20},end:{line:405,column:47}},"119":{start:{line:409,column:19},end:{line:409,column:37}},"120":{start:{line:410,column:8},end:{line:417,column:9}},"121":{start:{line:411,column:12},end:{line:416,column:15}},"122":{start:{line:414,column:16},end:{line:414,column:55}},"123":{start:{line:415,column:16},end:{line:415,column:43}},"124":{start:{line:426,column:8},end:{line:430,column:11}},"125":{start:{line:427,column:12},end:{line:429,column:13}},"126":{start:{line:428,column:16},end:{line:428,column:69}},"127":{start:{line:431,column:8},end:{line:431,column:71}},"128":{start:{line:431,column:41},end:{line:431,column:69}},"129":{start:{line:439,column:8},end:{line:439,column:49}},"130":{start:{line:440,column:8},end:{line:442,column:11}},"131":{start:{line:441,column:12},end:{line:441,column:42}},"132":{start:{line:451,column:8},end:{line:453,column:9}},"133":{start:{line:452,column:12},end:{line:452,column:24}},"134":{start:{line:454,column:8},end:{line:459,column:9}},"135":{start:{line:455,column:27},end:{line:455,column:65}},"136":{start:{line:456,column:12},end:{line:458,column:13}},"137":{start:{line:457,column:16},end:{line:457,column:30}},"138":{start:{line:460,column:8},end:{line:460,column:20}},"139":{start:{line:470,column:8},end:{line:472,column:9}},"140":{start:{line:471,column:12},end:{line:471,column:24}},"141":{start:{line:474,column:26},end:{line:474,column:41}},"142":{start:{line:475,column:8},end:{line:475,column:42}},"143":{start:{line:476,column:8},end:{line:476,column:68}},"144":{start:{line:487,column:8},end:{line:499,column:9}},"145":{start:{line:488,column:12},end:{line:488,column:24}},"146":{start:{line:490,column:13},end:{line:499,column:9}},"147":{start:{line:492,column:12},end:{line:492,column:35}},"148":{start:{line:493,column:12},end:{line:498,column:13}},"149":{start:{line:494,column:31},end:{line:494,column:86}},"150":{start:{line:495,column:16},end:{line:497,column:17}},"151":{start:{line:496,column:20},end:{line:496,column:34}},"152":{start:{line:500,column:8},end:{line:500,column:20}},"153":{start:{line:507,column:8},end:{line:515,column:9}},"154":{start:{line:508,column:12},end:{line:508,column:50}},"155":{start:{line:511,column:12},end:{line:511,column:36}},"156":{start:{line:512,column:12},end:{line:514,column:13}},"157":{start:{line:513,column:16},end:{line:513,column:78}},"158":{start:{line:513,column:49},end:{line:513,column:76}},"159":{start:{line:521,column:8},end:{line:523,column:11}},"160":{start:{line:522,column:12},end:{line:522,column:35}},"161":{start:{line:525,column:13},end:{line:525,column:231}},"162":{start:{line:526,column:13},end:{line:526,column:556}},"163":{start:{line:529,column:0},end:{line:554,column:20}},"164":{start:{line:531,column:42},end:{line:531,column:98}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:18,column:4},end:{line:18,column:5}},loc:{start:{line:18,column:38},end:{line:84,column:5}},line:18},"1":{name:"(anonymous_1)",decl:{start:{line:90,column:4},end:{line:90,column:5}},loc:{start:{line:90,column:24},end:{line:96,column:5}},line:90},"2":{name:"(anonymous_2)",decl:{start:{line:101,column:4},end:{line:101,column:5}},loc:{start:{line:101,column:21},end:{line:103,column:5}},line:101},"3":{name:"(anonymous_3)",decl:{start:{line:108,column:4},end:{line:108,column:5}},loc:{start:{line:108,column:19},end:{line:110,column:5}},line:108},"4":{name:"(anonymous_4)",decl:{start:{line:115,column:4},end:{line:115,column:5}},loc:{start:{line:115,column:30},end:{line:117,column:5}},line:115},"5":{name:"(anonymous_5)",decl:{start:{line:122,column:4},end:{line:122,column:5}},loc:{start:{line:122,column:26},end:{line:124,column:5}},line:122},"6":{name:"(anonymous_6)",decl:{start:{line:129,column:4},end:{line:129,column:5}},loc:{start:{line:129,column:24},end:{line:131,column:5}},line:129},"7":{name:"(anonymous_7)",decl:{start:{line:136,column:4},end:{line:136,column:5}},loc:{start:{line:136,column:25},end:{line:138,column:5}},line:136},"8":{name:"(anonymous_8)",decl:{start:{line:143,column:4},end:{line:143,column:5}},loc:{start:{line:143,column:22},end:{line:145,column:5}},line:143},"9":{name:"(anonymous_9)",decl:{start:{line:149,column:4},end:{line:149,column:5}},loc:{start:{line:149,column:23},end:{line:156,column:5}},line:149},"10":{name:"(anonymous_10)",decl:{start:{line:162,column:4},end:{line:162,column:5}},loc:{start:{line:162,column:32},end:{line:172,column:5}},line:162},"11":{name:"(anonymous_11)",decl:{start:{line:164,column:44},end:{line:164,column:45}},loc:{start:{line:164,column:54},end:{line:164,column:76}},line:164},"12":{name:"(anonymous_12)",decl:{start:{line:177,column:4},end:{line:177,column:5}},loc:{start:{line:177,column:21},end:{line:187,column:5}},line:177},"13":{name:"(anonymous_13)",decl:{start:{line:178,column:47},end:{line:178,column:48}},loc:{start:{line:178,column:60},end:{line:186,column:9}},line:178},"14":{name:"(anonymous_14)",decl:{start:{line:182,column:31},end:{line:182,column:32}},loc:{start:{line:182,column:43},end:{line:184,column:17}},line:182},"15":{name:"(anonymous_15)",decl:{start:{line:192,column:4},end:{line:192,column:5}},loc:{start:{line:192,column:21},end:{line:207,column:5}},line:192},"16":{name:"(anonymous_16)",decl:{start:{line:193,column:47},end:{line:193,column:48}},loc:{start:{line:193,column:60},end:{line:206,column:9}},line:193},"17":{name:"(anonymous_17)",decl:{start:{line:197,column:31},end:{line:197,column:32}},loc:{start:{line:197,column:43},end:{line:204,column:17}},line:197},"18":{name:"(anonymous_18)",decl:{start:{line:200,column:53},end:{line:200,column:54}},loc:{start:{line:200,column:62},end:{line:202,column:21}},line:200},"19":{name:"(anonymous_19)",decl:{start:{line:212,column:4},end:{line:212,column:5}},loc:{start:{line:212,column:19},end:{line:214,column:5}},line:212},"20":{name:"(anonymous_20)",decl:{start:{line:219,column:4},end:{line:219,column:5}},loc:{start:{line:219,column:19},end:{line:221,column:5}},line:219},"21":{name:"(anonymous_21)",decl:{start:{line:226,column:4},end:{line:226,column:5}},loc:{start:{line:226,column:18},end:{line:239,column:5}},line:226},"22":{name:"(anonymous_22)",decl:{start:{line:243,column:4},end:{line:243,column:5}},loc:{start:{line:243,column:15},end:{line:263,column:5}},line:243},"23":{name:"(anonymous_23)",decl:{start:{line:246,column:23},end:{line:246,column:24}},loc:{start:{line:246,column:35},end:{line:262,column:9}},line:246},"24":{name:"(anonymous_24)",decl:{start:{line:267,column:4},end:{line:267,column:5}},loc:{start:{line:267,column:22},end:{line:278,column:5}},line:267},"25":{name:"(anonymous_25)",decl:{start:{line:273,column:23},end:{line:273,column:24}},loc:{start:{line:273,column:35},end:{line:277,column:9}},line:273},"26":{name:"(anonymous_26)",decl:{start:{line:284,column:4},end:{line:284,column:5}},loc:{start:{line:284,column:34},end:{line:297,column:5}},line:284},"27":{name:"(anonymous_27)",decl:{start:{line:293,column:27},end:{line:293,column:28}},loc:{start:{line:293,column:39},end:{line:295,column:13}},line:293},"28":{name:"(anonymous_28)",decl:{start:{line:303,column:4},end:{line:303,column:5}},loc:{start:{line:303,column:36},end:{line:338,column:5}},line:303},"29":{name:"(anonymous_29)",decl:{start:{line:315,column:31},end:{line:315,column:32}},loc:{start:{line:315,column:43},end:{line:318,column:17}},line:315},"30":{name:"(anonymous_30)",decl:{start:{line:332,column:27},end:{line:332,column:28}},loc:{start:{line:332,column:39},end:{line:336,column:13}},line:332},"31":{name:"(anonymous_31)",decl:{start:{line:343,column:4},end:{line:343,column:5}},loc:{start:{line:343,column:21},end:{line:355,column:5}},line:343},"32":{name:"(anonymous_32)",decl:{start:{line:345,column:44},end:{line:345,column:45}},loc:{start:{line:345,column:54},end:{line:345,column:76}},line:345},"33":{name:"(anonymous_33)",decl:{start:{line:360,column:4},end:{line:360,column:5}},loc:{start:{line:360,column:21},end:{line:384,column:5}},line:360},"34":{name:"(anonymous_34)",decl:{start:{line:369,column:27},end:{line:369,column:28}},loc:{start:{line:369,column:39},end:{line:379,column:13}},line:369},"35":{name:"(anonymous_35)",decl:{start:{line:374,column:49},end:{line:374,column:50}},loc:{start:{line:374,column:58},end:{line:374,column:83}},line:374},"36":{name:"(anonymous_36)",decl:{start:{line:389,column:4},end:{line:389,column:5}},loc:{start:{line:389,column:27},end:{line:396,column:5}},line:389},"37":{name:"(anonymous_37)",decl:{start:{line:401,column:4},end:{line:401,column:5}},loc:{start:{line:401,column:39},end:{line:418,column:5}},line:401},"38":{name:"(anonymous_38)",decl:{start:{line:403,column:33},end:{line:403,column:34}},loc:{start:{line:403,column:46},end:{line:407,column:13}},line:403},"39":{name:"(anonymous_39)",decl:{start:{line:413,column:27},end:{line:413,column:28}},loc:{start:{line:413,column:39},end:{line:416,column:13}},line:413},"40":{name:"(anonymous_40)",decl:{start:{line:425,column:4},end:{line:425,column:5}},loc:{start:{line:425,column:29},end:{line:432,column:5}},line:425},"41":{name:"(anonymous_41)",decl:{start:{line:426,column:32},end:{line:426,column:33}},loc:{start:{line:426,column:41},end:{line:430,column:9}},line:426},"42":{name:"(anonymous_42)",decl:{start:{line:431,column:32},end:{line:431,column:33}},loc:{start:{line:431,column:41},end:{line:431,column:69}},line:431},"43":{name:"(anonymous_43)",decl:{start:{line:438,column:4},end:{line:438,column:5}},loc:{start:{line:438,column:31},end:{line:443,column:5}},line:438},"44":{name:"(anonymous_44)",decl:{start:{line:440,column:32},end:{line:440,column:33}},loc:{start:{line:440,column:41},end:{line:442,column:9}},line:440},"45":{name:"(anonymous_45)",decl:{start:{line:450,column:4},end:{line:450,column:5}},loc:{start:{line:450,column:37},end:{line:461,column:5}},line:450},"46":{name:"(anonymous_46)",decl:{start:{line:468,column:4},end:{line:468,column:5}},loc:{start:{line:468,column:39},end:{line:477,column:5}},line:468},"47":{name:"(anonymous_47)",decl:{start:{line:485,column:4},end:{line:485,column:5}},loc:{start:{line:485,column:51},end:{line:501,column:5}},line:485},"48":{name:"(anonymous_48)",decl:{start:{line:506,column:4},end:{line:506,column:5}},loc:{start:{line:506,column:28},end:{line:516,column:5}},line:506},"49":{name:"(anonymous_49)",decl:{start:{line:513,column:40},end:{line:513,column:41}},loc:{start:{line:513,column:49},end:{line:513,column:76}},line:513},"50":{name:"(anonymous_50)",decl:{start:{line:520,column:4},end:{line:520,column:5}},loc:{start:{line:520,column:24},end:{line:524,column:5}},line:520},"51":{name:"(anonymous_51)",decl:{start:{line:521,column:41},end:{line:521,column:42}},loc:{start:{line:521,column:50},end:{line:523,column:9}},line:521},"52":{name:"(anonymous_52)",decl:{start:{line:531,column:28},end:{line:531,column:29}},loc:{start:{line:531,column:40},end:{line:531,column:100}},line:531}},branchMap:{"0":{loc:{start:{line:92,column:8},end:{line:94,column:9}},type:"if",locations:[{start:{line:92,column:8},end:{line:94,column:9}},{start:{line:92,column:8},end:{line:94,column:9}}],line:92},"1":{loc:{start:{line:150,column:8},end:{line:155,column:9}},type:"if",locations:[{start:{line:150,column:8},end:{line:155,column:9}},{start:{line:150,column:8},end:{line:155,column:9}}],line:150},"2":{loc:{start:{line:150,column:12},end:{line:150,column:57}},type:"binary-expr",locations:[{start:{line:150,column:12},end:{line:150,column:27}},{start:{line:150,column:31},end:{line:150,column:57}}],line:150},"3":{loc:{start:{line:163,column:8},end:{line:170,column:9}},type:"if",locations:[{start:{line:163,column:8},end:{line:170,column:9}},{start:{line:163,column:8},end:{line:170,column:9}}],line:163},"4":{loc:{start:{line:165,column:12},end:{line:169,column:13}},type:"if",locations:[{start:{line:165,column:12},end:{line:169,column:13}},{start:{line:165,column:12},end:{line:169,column:13}}],line:165},"5":{loc:{start:{line:165,column:16},end:{line:167,column:51}},type:"binary-expr",locations:[{start:{line:165,column:16},end:{line:165,column:34}},{start:{line:166,column:16},end:{line:166,column:47}},{start:{line:167,column:16},end:{line:167,column:51}}],line:165},"6":{loc:{start:{line:179,column:12},end:{line:185,column:13}},type:"if",locations:[{start:{line:179,column:12},end:{line:185,column:13}},{start:{line:179,column:12},end:{line:185,column:13}}],line:179},"7":{loc:{start:{line:194,column:12},end:{line:205,column:13}},type:"if",locations:[{start:{line:194,column:12},end:{line:205,column:13}},{start:{line:194,column:12},end:{line:205,column:13}}],line:194},"8":{loc:{start:{line:259,column:12},end:{line:261,column:13}},type:"if",locations:[{start:{line:259,column:12},end:{line:261,column:13}},{start:{line:259,column:12},end:{line:261,column:13}}],line:259},"9":{loc:{start:{line:259,column:16},end:{line:259,column:78}},type:"binary-expr",locations:[{start:{line:259,column:16},end:{line:259,column:44}},{start:{line:259,column:48},end:{line:259,column:78}}],line:259},"10":{loc:{start:{line:268,column:8},end:{line:270,column:9}},type:"if",locations:[{start:{line:268,column:8},end:{line:270,column:9}},{start:{line:268,column:8},end:{line:270,column:9}}],line:268},"11":{loc:{start:{line:286,column:8},end:{line:289,column:9}},type:"if",locations:[{start:{line:286,column:8},end:{line:289,column:9}},{start:{line:286,column:8},end:{line:289,column:9}}],line:286},"12":{loc:{start:{line:286,column:12},end:{line:286,column:76}},type:"binary-expr",locations:[{start:{line:286,column:12},end:{line:286,column:24}},{start:{line:286,column:28},end:{line:286,column:48}},{start:{line:286,column:52},end:{line:286,column:76}}],line:286},"13":{loc:{start:{line:290,column:8},end:{line:296,column:9}},type:"if",locations:[{start:{line:290,column:8},end:{line:296,column:9}},{start:{line:290,column:8},end:{line:296,column:9}}],line:290},"14":{loc:{start:{line:305,column:8},end:{line:337,column:9}},type:"if",locations:[{start:{line:305,column:8},end:{line:337,column:9}},{start:{line:305,column:8},end:{line:337,column:9}}],line:305},"15":{loc:{start:{line:306,column:12},end:{line:311,column:13}},type:"if",locations:[{start:{line:306,column:12},end:{line:311,column:13}},{start:{line:306,column:12},end:{line:311,column:13}}],line:306},"16":{loc:{start:{line:306,column:16},end:{line:308,column:42}},type:"binary-expr",locations:[{start:{line:306,column:16},end:{line:306,column:30}},{start:{line:307,column:16},end:{line:307,column:38}},{start:{line:308,column:16},end:{line:308,column:42}}],line:306},"17":{loc:{start:{line:312,column:12},end:{line:319,column:13}},type:"if",locations:[{start:{line:312,column:12},end:{line:319,column:13}},{start:{line:312,column:12},end:{line:319,column:13}}],line:312},"18":{loc:{start:{line:322,column:12},end:{line:327,column:13}},type:"if",locations:[{start:{line:322,column:12},end:{line:327,column:13}},{start:{line:322,column:12},end:{line:327,column:13}}],line:322},"19":{loc:{start:{line:322,column:16},end:{line:324,column:42}},type:"binary-expr",locations:[{start:{line:322,column:16},end:{line:322,column:30}},{start:{line:323,column:16},end:{line:323,column:38}},{start:{line:324,column:16},end:{line:324,column:42}}],line:322},"20":{loc:{start:{line:344,column:8},end:{line:346,column:9}},type:"if",locations:[{start:{line:344,column:8},end:{line:346,column:9}},{start:{line:344,column:8},end:{line:346,column:9}}],line:344},"21":{loc:{start:{line:347,column:8},end:{line:352,column:9}},type:"if",locations:[{start:{line:347,column:8},end:{line:352,column:9}},{start:{line:347,column:8},end:{line:352,column:9}}],line:347},"22":{loc:{start:{line:361,column:8},end:{line:363,column:9}},type:"if",locations:[{start:{line:361,column:8},end:{line:363,column:9}},{start:{line:361,column:8},end:{line:363,column:9}}],line:361},"23":{loc:{start:{line:366,column:8},end:{line:383,column:9}},type:"if",locations:[{start:{line:366,column:8},end:{line:383,column:9}},{start:{line:366,column:8},end:{line:383,column:9}}],line:366},"24":{loc:{start:{line:372,column:16},end:{line:378,column:17}},type:"if",locations:[{start:{line:372,column:16},end:{line:378,column:17}},{start:{line:372,column:16},end:{line:378,column:17}}],line:372},"25":{loc:{start:{line:372,column:20},end:{line:372,column:82}},type:"binary-expr",locations:[{start:{line:372,column:20},end:{line:372,column:48}},{start:{line:372,column:52},end:{line:372,column:82}}],line:372},"26":{loc:{start:{line:375,column:20},end:{line:377,column:21}},type:"if",locations:[{start:{line:375,column:20},end:{line:377,column:21}},{start:{line:375,column:20},end:{line:377,column:21}}],line:375},"27":{loc:{start:{line:390,column:8},end:{line:395,column:9}},type:"if",locations:[{start:{line:390,column:8},end:{line:395,column:9}},{start:{line:390,column:8},end:{line:395,column:9}}],line:390},"28":{loc:{start:{line:402,column:8},end:{line:408,column:9}},type:"if",locations:[{start:{line:402,column:8},end:{line:408,column:9}},{start:{line:402,column:8},end:{line:408,column:9}}],line:402},"29":{loc:{start:{line:404,column:16},end:{line:406,column:17}},type:"if",locations:[{start:{line:404,column:16},end:{line:406,column:17}},{start:{line:404,column:16},end:{line:406,column:17}}],line:404},"30":{loc:{start:{line:410,column:8},end:{line:417,column:9}},type:"if",locations:[{start:{line:410,column:8},end:{line:417,column:9}},{start:{line:410,column:8},end:{line:417,column:9}}],line:410},"31":{loc:{start:{line:427,column:12},end:{line:429,column:13}},type:"if",locations:[{start:{line:427,column:12},end:{line:429,column:13}},{start:{line:427,column:12},end:{line:429,column:13}}],line:427},"32":{loc:{start:{line:451,column:8},end:{line:453,column:9}},type:"if",locations:[{start:{line:451,column:8},end:{line:453,column:9}},{start:{line:451,column:8},end:{line:453,column:9}}],line:451},"33":{loc:{start:{line:456,column:12},end:{line:458,column:13}},type:"if",locations:[{start:{line:456,column:12},end:{line:458,column:13}},{start:{line:456,column:12},end:{line:458,column:13}}],line:456},"34":{loc:{start:{line:470,column:8},end:{line:472,column:9}},type:"if",locations:[{start:{line:470,column:8},end:{line:472,column:9}},{start:{line:470,column:8},end:{line:472,column:9}}],line:470},"35":{loc:{start:{line:470,column:12},end:{line:470,column:47}},type:"binary-expr",locations:[{start:{line:470,column:12},end:{line:470,column:30}},{start:{line:470,column:34},end:{line:470,column:47}}],line:470},"36":{loc:{start:{line:487,column:8},end:{line:499,column:9}},type:"if",locations:[{start:{line:487,column:8},end:{line:499,column:9}},{start:{line:487,column:8},end:{line:499,column:9}}],line:487},"37":{loc:{start:{line:487,column:12},end:{line:487,column:66}},type:"binary-expr",locations:[{start:{line:487,column:12},end:{line:487,column:37}},{start:{line:487,column:41},end:{line:487,column:66}}],line:487},"38":{loc:{start:{line:490,column:13},end:{line:499,column:9}},type:"if",locations:[{start:{line:490,column:13},end:{line:499,column:9}},{start:{line:490,column:13},end:{line:499,column:9}}],line:490},"39":{loc:{start:{line:495,column:16},end:{line:497,column:17}},type:"if",locations:[{start:{line:495,column:16},end:{line:497,column:17}},{start:{line:495,column:16},end:{line:497,column:17}}],line:495},"40":{loc:{start:{line:507,column:8},end:{line:515,column:9}},type:"if",locations:[{start:{line:507,column:8},end:{line:515,column:9}},{start:{line:507,column:8},end:{line:515,column:9}}],line:507},"41":{loc:{start:{line:512,column:12},end:{line:514,column:13}},type:"if",locations:[{start:{line:512,column:12},end:{line:514,column:13}},{start:{line:512,column:12},end:{line:514,column:13}}],line:512}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0]},inputSourceMap:{version:3,file:"browser.js",sourceRoot:"",sources:["../../../../../projects/sac-common/src/components/browser/browser.ts"],names:[],mappings:"AACA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EAEZ,KAAK,EAEL,MAAM,GACP,MAAM,eAAe,CAAC;AAMvB,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;;;AAMxF;;GAEG;AACH,MACsB,oBAAoB;IAoGxC,wBAAwB;IAExB,uBAAuB;IAEvB;;;;OAIG;IACH,YAAY,UAAsB,EAAE,QAAkB;QAlGtD;;WAEG;QACK,mBAAc,GAAkB,IAAI,CAAC;QAE7C;;;WAGG;QAEI,iBAAY,GAAW,EAAE,CAAC;QACjC;;WAEG;QAEI,oBAAe,GAAY,IAAI,CAAC;QACvC;;WAEG;QAEI,oBAAe,GAAY,IAAI,CAAC;QACvC;;WAEG;QAEI,oBAAe,GAAY,IAAI,CAAC;QACvC;;WAEG;QAEI,sBAAiB,GAAY,IAAI,CAAC;QACzC;;WAEG;QAEI,sBAAiB,GAAY,IAAI,CAAC;QACzC;;WAEG;QAEI,sBAAiB,GAAY,IAAI,CAAC;QAMzC;;WAEG;QAEI,SAAI,GAAyB,IAAI,YAAY,EAAU,CAAC;QAM/D;;WAEG;QACI,aAAQ,GAAiB;YAC9B,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,EAAE;SACT,CAAC;QAKF;;WAEG;QACI,qBAAgB,GAAiB,IAAI,CAAC;QAC7C;;WAEG;QACI,iBAAY,GAAiB,IAAI,CAAC;QACzC;;WAEG;QACI,YAAO,GAAa,EAAE,CAAC;QAgB5B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAChC,sBAAsB,EACtB,IAAI,4BAA4B,CAAC,UAAU,CAAC,CAC7C,CAAC;QACF,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CACtC,wBAAwB,EACxB,IAAI,8BAA8B,EAAE,CACrC,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,GAAG,CACpC,uBAAuB,EACvB,IAAI,6BAA6B,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAC7D,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,CAC7B,eAAe,EACf,IAAI,qBAAqB,EAAE,CAC5B,CAAC;IACJ,CAAC;IAED,0BAA0B;IAE1B,qCAAqC;IAErC;;OAEG;IACH,IACW,YAAY,CAAC,CAAgB;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEnE,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC/B;QAED,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACrB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;aAAM;YACL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,wCAAwC;IAExC,yBAAyB;IAEzB;;OAEG;IAKI,YAAY,CAAC,aAAa;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;YAEnE,IACE,CAAC,IAAI,CAAC,YAAY;gBAClB,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EACnC;gBACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxC;SACF;QAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,IAAkB;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,cAAc;qBAChB,UAAU,CACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,EAC5C,IAAI,CAAC,YAAY,CAClB;qBACA,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;oBAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBACzC,CAAC,CAAC,CAAC;aACN;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,IAAkB;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,cAAc;qBAChB,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;qBAClC,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;oBAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC5D,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBAE/C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;wBACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACzB,CAAC,CAAC,CAAC;oBAEH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;aACN;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,IAAkB;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,IAAkB;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,IAAkB;QAC/B,MAAM,IAAI,GAAiB;YACzB,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI;SAChB,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,IAAI,CAAC,cAAc;aAChB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;aAC3C,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;YAC1C,IAAI,CAAC,QAAQ,GAAG;gBACd,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;gBACtB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;gBACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;gBAClC,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,GAAG;aACV,CAAC;YAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;YAElC,mGAAmG;YACnG,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,IAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,cAAc;aAChB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;aAClD,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;YAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAE/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,IAAkB,EAAE,WAAmB;QACvD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YACpE,2BAA2B;YAC3B,OAAO;SACR;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;YACjC,IAAI,CAAC,cAAc;iBAChB,UAAU,CACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,EAC5C,WAAW,EACX,IAAI,CAAC,YAAY,CAClB;iBACA,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,IAAkB,EAAE,aAAqB;QACzD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IACE,CAAC,aAAa;gBACd,aAAa,KAAK,IAAI;gBACtB,aAAa,CAAC,MAAM,KAAK,CAAC,EAC1B;gBACA,oCAAoC;gBACpC,OAAO;aACR;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;gBAC/B,IAAI,CAAC,cAAc;qBAChB,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;qBACjD,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;oBAC1C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBAE7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC,CAAC,CAAC;aACN;SACF;aAAM;YACL,IACE,CAAC,aAAa;gBACd,aAAa,KAAK,IAAI;gBACtB,aAAa,CAAC,MAAM,KAAK,CAAC,EAC1B;gBACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvC,OAAO;aACR;YAED,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,cAAc;iBAChB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;iBAC/C,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;gBAC1C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAE/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,IAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;SACpE;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;SAClE;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;SACzC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,IAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,mCAAmC;QACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,cAAc;iBAChB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;iBACnD,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;gBAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAEzB,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAC5C,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CACzC,CAAC;oBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;oBACjE,IAAI,IAAI,EAAE;wBACR,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;qBACvB;iBACF;YACH,CAAC,CAAC,CAAC;SACN;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;IACH,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,IAAkB;QACxC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;SACzB;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;IACH,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,IAAkB,EAAE,YAAsB;QAC9D,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC5B;YACH,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,EAAE,EAAE;YACN,IAAI,CAAC,cAAc;iBAChB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;iBACvD,SAAS,CAAC,CAAC,MAA4B,EAAE,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBACvC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAyBD,qCAAqC;IAErC,0BAA0B;IAE1B;;;OAGG;IACK,kBAAkB,CAAC,IAAkB;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,GAAG,CAAC,SAAS,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACK,QAAQ,CAAC,IAAkB,EAAE,UAAkB;QACrD,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,cAAc,CACpB,IAAkB,EAClB,UAAwB;QAExB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAC;SACb;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtD,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,OAAO,MAAM,CAAC;aACf;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,sBAAsB,CAC5B,IAAkB,EAClB,IAAY;QAEZ,mCAAmC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;YACvC,OAAO,IAAI,CAAC;SACb;QAED,oDAAoD;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAElC,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACK,2BAA2B,CACjC,IAAkB,EAClB,IAAc,EACd,KAAa;QAEb,uFAAuF;QACvF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,EAAE;YAC1D,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;YACpC,cAAc;YACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;gBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAEvE,IAAI,MAAM,KAAK,IAAI,EAAE;oBACnB,OAAO,MAAM,CAAC;iBACf;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,IAAkB;QAC1C,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACvC;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/D;SACF;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;+GA1qBmB,oBAAoB;mGAApB,oBAAoB;;SAApB,oBAAoB;4FAApB,oBAAoB;kBADzC,SAAS;wHAsBD,YAAY;sBADlB,KAAK;gBAMC,eAAe;sBADrB,KAAK;gBAMC,eAAe;sBADrB,KAAK;gBAMC,eAAe;sBADrB,KAAK;gBAMC,iBAAiB;sBADvB,KAAK;gBAMC,iBAAiB;sBADvB,KAAK;gBAMC,iBAAiB;sBADvB,KAAK;gBAMC,MAAM;sBADZ,KAAK;gBAMC,IAAI;sBADV,MAAM;gBA6EI,YAAY;sBADtB,KAAK;gBAyFC,YAAY;sBAJlB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC",sourcesContent:["import { HttpClient } from '@angular/common/http';\r\nimport {\r\n Directive,\r\n EventEmitter,\r\n HostListener,\r\n Injector,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ISacFileBrowserService } from '../../interfaces/ISacFileBrowserService';\r\nimport { ISacIconService } from '../../interfaces/ISacIconService';\r\nimport { ISacLocalisationService } from '../../interfaces/ISacLocalisationService';\r\nimport { ISacValidationKeyService } from '../../interfaces/ISacValidationKeyService';\r\nimport {\r\n SACICON_SERVICE,\r\n SACLOCALISATION_SERVICE,\r\n SACVALIDATIONKEY_SERVICE,\r\n SacDefaultIconService,\r\n SacDefaultValidationKeyService,\r\n} from '../../services';\r\nimport {\r\n SACFILEBROWSER_SERVICE,\r\n SacDefaultFileBrowserService,\r\n} from '../../services/sac-filebrowser.service';\r\nimport { SacDefaultLocalisationService } from '../../services/sac-localisation.service';\r\nimport { IBrowserFile } from './models/browserfile';\r\nimport { IBrowserFileResponse } from './models/browserfileresponse';\r\nimport { IBrowserNode } from './models/browsernode';\r\nimport { IBrowserNodeResponse } from './models/browsernoderesponse';\r\n\r\n/**\r\n * Base Component f\xFCr File Browser\r\n */\r\n@Directive()\r\nexport abstract class SacFileBrowserCommon implements OnInit {\r\n // #region Properties\r\n\r\n /**\r\n * Service f\xFCr File Browser Zugriff (Backend)\r\n */\r\n private browserService: ISacFileBrowserService;\r\n /**\r\n * Icon service to receive icon classes for ui\r\n */\r\n private iconService: ISacIconService;\r\n /**\r\n * File welches beim starten des Browsers bereits selektiert ist\r\n */\r\n private preselecedfile: string | null = null;\r\n\r\n /**\r\n * Erlaubte Dateierweiterungen f\xFCr Fileauswahl und Upload. Dateierweiterung mit Punkt und\r\n * getrennt durch Komma f\xFCr mehr als eine Erweiterung (Example: \".jpg,.gif\")\r\n */\r\n @Input()\r\n public allowedtypes: string = '';\r\n /**\r\n * Erlaubt das l\xF6schen einer Datei\r\n */\r\n @Input()\r\n public allowfiledelete: boolean = true;\r\n /**\r\n * Erlaubt das umbenennen einer Datei\r\n */\r\n @Input()\r\n public allowfilerename: boolean = true;\r\n /**\r\n * Erlaubt den Upload von Dateien\r\n */\r\n @Input()\r\n public allowfileupload: boolean = true;\r\n /**\r\n * Erlaubt das erstellen eines neuen Ordners\r\n */\r\n @Input()\r\n public allowfoldercreate: boolean = true;\r\n /**\r\n * Erlaubt das l\xF6schen eines Ordners\r\n */\r\n @Input()\r\n public allowfolderdelete: boolean = true;\r\n /**\r\n * Erlaubt das Umbenennen eines Ordners\r\n */\r\n @Input()\r\n public allowfolderrename: boolean = true;\r\n /**\r\n * URL f\xFCr Backend API\r\n */\r\n @Input()\r\n public apiurl: string;\r\n /**\r\n * Output Emitter wenn File selektiert wird.\r\n */\r\n @Output()\r\n public file: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Service f\xFCr Error Localisation\r\n */\r\n public lngResourceService: ISacLocalisationService;\r\n /**\r\n * Root Node Item f\xFCr Tree\r\n */\r\n public rootNode: IBrowserNode = {\r\n Name: '',\r\n ChildNodes: [],\r\n Files: [],\r\n IsExpanded: true,\r\n IsEditMode: false,\r\n IsNewNode: false,\r\n Path: '',\r\n };\r\n /**\r\n * Selected File Name\r\n */\r\n public selectedFile: string;\r\n /**\r\n * Selected File Item\r\n */\r\n public selectedFileItem: IBrowserFile = null;\r\n /**\r\n * Selected Node Item\r\n */\r\n public selectedNode: IBrowserNode = null;\r\n /**\r\n * Liste von Uploads\r\n */\r\n public uploads: string[] = [];\r\n /**\r\n * Service to receive standard validation message keys and texts\r\n */\r\n public validationKeyService: ISacValidationKeyService;\r\n\r\n // #endregion Properties\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Konstruktor\r\n * @param httpclient Angular HTTP Client\r\n * @param injector Service Injector\r\n */\r\n constructor(httpclient: HttpClient, injector: Injector) {\r\n this.browserService = injector.get(\r\n SACFILEBROWSER_SERVICE,\r\n new SacDefaultFileBrowserService(httpclient)\r\n );\r\n this.validationKeyService = injector.get(\r\n SACVALIDATIONKEY_SERVICE,\r\n new SacDefaultValidationKeyService()\r\n );\r\n this.lngResourceService = injector.get(\r\n SACLOCALISATION_SERVICE,\r\n new SacDefaultLocalisationService(this.validationKeyService)\r\n );\r\n\r\n this.iconService = injector.get(\r\n SACICON_SERVICE,\r\n new SacDefaultIconService()\r\n );\r\n }\r\n\r\n // #endregion Constructors\r\n\r\n // #region Public Getters And Setters\r\n\r\n /**\r\n * Setzt den Seleced Node \xFCber den Pfad\r\n */\r\n @Input()\r\n public set selectedfile(v: string | null) {\r\n const selectednode = this.findSelectedNodeByPath(this.rootNode, v);\r\n\r\n if (selectednode !== null) {\r\n this.selectNode(selectednode);\r\n }\r\n\r\n this.preselecedfile = v;\r\n }\r\n\r\n /**\r\n * CSS icon class for delete icon\r\n * @returns css class with icon\r\n */\r\n public get iconDelete(): string {\r\n return this.iconService.BrowserComponentDeleteIcon;\r\n }\r\n\r\n /**\r\n * CSS icon class for edit icon\r\n * @returns css class with icon\r\n */\r\n public get iconEdit(): string {\r\n return this.iconService.BrowserComponentEditIcon;\r\n }\r\n\r\n /**\r\n * CSS icon for folders in tree there are collabsed\r\n * @returns css class with icon\r\n */\r\n public get iconFolderCollabsed(): string {\r\n return this.iconService.BrowserComponentFolderClosedIcon;\r\n }\r\n\r\n /**\r\n * CSS icon class for folders without subfolders\r\n * @returns css class with icon\r\n */\r\n public get iconFolderEmpty(): string {\r\n return this.iconService.BrowserComponentFolderEmptyIcon;\r\n }\r\n\r\n /**\r\n * CSS icon for new folders action\r\n * @returns css class with icon\r\n */\r\n public get iconFolderNew(): string {\r\n return this.iconService.BrowserComponentFolderNewIcon;\r\n }\r\n\r\n /**\r\n * CSS icon for folders in tree there are expanded\r\n * @returns css class with icon\r\n */\r\n public get iconFolderOpen(): string {\r\n return this.iconService.BrowserComponentFolderOpenIcon;\r\n }\r\n\r\n /**\r\n * CSS icon class for refresh icon\r\n * @returns css class with icon\r\n */\r\n public get iconRefresh(): string {\r\n return this.iconService.BrowserComponentRefreshIcon;\r\n }\r\n\r\n /**\r\n * Getter f\xFCr Selected File. Ist an Input Property gebunden\r\n */\r\n public get selectedfile(): string | null {\r\n if (this.selectFile && this.selectFile.length > 0) {\r\n return this.selectedFile;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // #endregion Public Getters And Setters\r\n\r\n // #region Public Methods\r\n\r\n /**\r\n * HostListener welcher den Edit Mode bei allen Files und Nodes beendet.\r\n */\r\n @HostListener('document:click', ['$event.target'])\r\n /**\r\n * Click Event\r\n */\r\n public exitEditMode(targetElement): void {\r\n if (this.selectedNode) {\r\n this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));\r\n\r\n if (\r\n !this.selectedNode ||\r\n this.selectedNode.Name === null ||\r\n this.selectedNode.Name.length === 0\r\n ) {\r\n this.clearNewChildNodes(this.rootNode);\r\n }\r\n }\r\n\r\n this.resetNodeEditMode(null);\r\n }\r\n\r\n /**\r\n * L\xF6scht ein File\r\n * @param file File welches gel\xF6scht werden soll\r\n */\r\n public deleteFile(file: IBrowserFile): void {\r\n this.confirmDeleteFile(file).subscribe((confirm) => {\r\n if (confirm) {\r\n this.browserService\r\n .DeleteFile(\r\n this.apiurl,\r\n this.selectedNode.Path + '/' + file.Filename,\r\n this.allowedtypes\r\n )\r\n .subscribe((result: IBrowserFileResponse) => {\r\n this.selectedNode.Files = result.Files;\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * L\xF6scht einen Node\r\n * @param node Node welcher gel\xF6scht werden soll\r\n */\r\n public deleteNode(node: IBrowserNode): void {\r\n this.confirmDeleteNode(node).subscribe((confirm) => {\r\n if (confirm) {\r\n this.browserService\r\n .DeleteNode(this.apiurl, node.Path)\r\n .subscribe((result: IBrowserNodeResponse) => {\r\n const parentNode = this.findParentNode(this.rootNode, node);\r\n parentNode.ChildNodes = result.Node.ChildNodes;\r\n\r\n this.rootNode.ChildNodes.forEach((itm) => {\r\n this.fillPath(itm, '');\r\n });\r\n\r\n this.selectNode(parentNode);\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Setzt ein File in den Edit Mode\r\n * @param file File welches in den Edit Mode gesetzt werden soll\r\n */\r\n public editFile(file: IBrowserFile): void {\r\n file.IsEditMode = true;\r\n }\r\n\r\n /**\r\n * Setzt einen Node in den Edit Mode\r\n * @param node Node welcher bearbeitet werden soll\r\n */\r\n public editNode(node: IBrowserNode): void {\r\n node.IsEditMode = true;\r\n }\r\n\r\n /**\r\n * Erzeugt einen neuen Node im Tree\r\n * @param node Node unter welchem ein neuer Node erstellt werden soll\r\n */\r\n public newNode(node: IBrowserNode) {\r\n const item: IBrowserNode = {\r\n ChildNodes: [],\r\n Files: [],\r\n IsEditMode: false,\r\n IsExpanded: false,\r\n Name: '',\r\n Path: node.Path,\r\n IsNewNode: true,\r\n };\r\n\r\n node.ChildNodes.push(item);\r\n this.selectNode(item);\r\n this.editNode(item);\r\n }\r\n\r\n /**\r\n * Init Event der Komponente\r\n */\r\n public ngOnInit(): void {\r\n this.browserService\r\n .GetNode(this.apiurl, '', this.allowedtypes)\r\n .subscribe((result: IBrowserNodeResponse) => {\r\n this.rootNode = {\r\n Name: result.Node.Name,\r\n Files: result.Node.Files,\r\n ChildNodes: result.Node.ChildNodes,\r\n IsExpanded: true,\r\n IsEditMode: false,\r\n IsNewNode: false,\r\n Path: '/',\r\n };\r\n\r\n this.setPathToAllNodes();\r\n this.selectedNode = this.rootNode;\r\n\r\n // Selected File erneut setzen, wenn Property gesetzt wurde bevor Daten vom Service geladen wurden.\r\n if (this.preselecedfile !== null && this.preselecedfile.length > 0) {\r\n this.selectedfile = this.preselecedfile;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Aktualisiert den Node\r\n */\r\n public refreshNode(node: IBrowserNode): void {\r\n if (!node.IsExpanded) {\r\n this.switchExpandNode(node);\r\n }\r\n\r\n this.browserService\r\n .GetNode(this.apiurl, node.Path, this.allowedtypes)\r\n .subscribe((result: IBrowserNodeResponse) => {\r\n node.ChildNodes = result.Node.ChildNodes;\r\n node.Files = result.Node.Files;\r\n\r\n this.setPathToAllNodes();\r\n });\r\n }\r\n\r\n /**\r\n * Methode wenn eine Datei umbenannt werden soll\r\n * @param file File welches umbenannt werden soll\r\n * @param newFilename Neuer Dateiname\r\n */\r\n public renameFile(file: IBrowserFile, newFilename: string): void {\r\n file.IsEditMode = false;\r\n\r\n if (!newFilename || newFilename === null || newFilename.length === 0) {\r\n // Cancel, Invalid Filename\r\n return;\r\n }\r\n\r\n if (file.Filename !== newFilename) {\r\n this.browserService\r\n .RenameFile(\r\n this.apiurl,\r\n this.selectedNode.Path + '/' + file.Filename,\r\n newFilename,\r\n this.allowedtypes\r\n )\r\n .subscribe((result: IBrowserFileResponse) => {\r\n this.selectedNode.Files = result.Files;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Methode wenn ein Node umbenannt werden soll\r\n * @param node Node welcher umbenannt werden soll\r\n * @param newFoldername Neuer Ordnername\r\n */\r\n public renameNode(node: IBrowserNode, newFoldername: string): void {\r\n node.IsEditMode = false;\r\n\r\n if (!node.IsNewNode) {\r\n if (\r\n !newFoldername ||\r\n newFoldername === null ||\r\n newFoldername.length === 0\r\n ) {\r\n // Cancel Rename. Invalid Foldername\r\n return;\r\n }\r\n\r\n if (node.Name !== newFoldername) {\r\n this.browserService\r\n .RenameNode(this.apiurl, node.Path, newFoldername)\r\n .subscribe((result: IBrowserNodeResponse) => {\r\n node.Name = result.Node.Name;\r\n\r\n this.setPathToAllNodes();\r\n });\r\n }\r\n } else {\r\n if (\r\n !newFoldername ||\r\n newFoldername === null ||\r\n newFoldername.length === 0\r\n ) {\r\n this.clearNewChildNodes(this.rootNode);\r\n return;\r\n }\r\n\r\n node.Name = newFoldername;\r\n node.IsNewNode = false;\r\n this.browserService\r\n .SaveNode(this.apiurl, node.Path, newFoldername)\r\n .subscribe((result: IBrowserNodeResponse) => {\r\n node.Name = result.Node.Name;\r\n node.Files = result.Node.Files;\r\n\r\n this.setPathToAllNodes();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Methode wenn ein File selektiert wird\r\n * @param file File welches selektiert wird\r\n */\r\n public selectFile(file: IBrowserFile) {\r\n if (!file.IsEditMode) {\r\n this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));\r\n }\r\n\r\n if (!this.selectedNode.Path.endsWith('/')) {\r\n this.selectedFile = this.selectedNode.Path + '/' + file.Filename;\r\n } else {\r\n this.selectedFile = '/' + file.Filename;\r\n }\r\n\r\n this.selectedFileItem = file;\r\n this.file.emit(this.selectedFile);\r\n }\r\n\r\n /**\r\n * Methode wenn ein Node selektiert wird\r\n * @param node Node welcher selektiert werden soll\r\n */\r\n public selectNode(node: IBrowserNode): void {\r\n if (!node.IsExpanded) {\r\n this.switchExpandNode(node);\r\n }\r\n\r\n // Reset the Edit Mode in all Nodes\r\n this.resetNodeEditMode(null);\r\n\r\n if (!node.Files) {\r\n this.browserService\r\n .GetFiles(this.apiurl, node.Path, this.allowedtypes)\r\n .subscribe((result: IBrowserFileResponse) => {\r\n node.Files = result.Files;\r\n this.selectedNode = node;\r\n\r\n if (this.preselecedfile !== null && this.preselecedfile.length > 0) {\r\n const filename = this.preselecedfile.substring(\r\n this.preselecedfile.lastIndexOf('/') + 1\r\n );\r\n const file = node.Files.find((itm) => itm.Filename === filename);\r\n if (file) {\r\n this.selectFile(file);\r\n }\r\n }\r\n });\r\n } else {\r\n this.selectedNode = node;\r\n }\r\n }\r\n\r\n /**\r\n * Expand/Collabse Methode f\xFCr Nodes\r\n * @param node Node welcher ge\xF6ffnet oder geschlossen werden soll\r\n */\r\n public switchExpandNode(node: IBrowserNode): void {\r\n if (node.IsExpanded) {\r\n node.IsExpanded = false;\r\n } else {\r\n node.IsExpanded = true;\r\n }\r\n }\r\n\r\n /**\r\n * Methode die Aufgerufen werden muss, wenn ein Upload beendet ist.\r\n * @param param Parameter des hochgeladenen Files\r\n */\r\n public uploadComplete(node: IBrowserNode, uploadIdList: string[]): void {\r\n if (uploadIdList !== null) {\r\n uploadIdList.forEach((element) => {\r\n if (this.uploads.indexOf(element) < 0) {\r\n this.uploads.push(element);\r\n }\r\n });\r\n }\r\n\r\n const id = this.uploads.pop();\r\n if (id) {\r\n this.browserService\r\n .SaveFile(this.apiurl, node.Path, id, this.allowedtypes)\r\n .subscribe((result: IBrowserFileResponse) => {\r\n this.selectedNode.Files = result.Files;\r\n this.uploadedFileMoved(id);\r\n });\r\n }\r\n }\r\n\r\n // #endregion Public Methods\r\n\r\n // #region Public Abstract Methods\r\n\r\n /**\r\n * Abstrakte Confirm Methode welche implementiert werden muss. Methode wird aufgerufen, wenn eine\r\n * Datei gel\xF6scht werden soll.\r\n * @param file File f\xFCr welches ein Delete Confirm eingefordert werden soll\r\n */\r\n public abstract confirmDeleteFile(file: IBrowserFile): Observable<boolean>;\r\n /**\r\n * Abstrakte Confirm Methode welche implementiert werden muss. Methode wird aufgerufen, wenn ein\r\n * Ordner gel\xF6scht werden soll.\r\n * @param folder Ordern f\xFCr welchen ein Delete Confirm eingefordert werden soll.\r\n */\r\n public abstract confirmDeleteNode(folder: IBrowserNode): Observable<boolean>;\r\n /**\r\n * Abstrakte Methode die Aufgerufen wird, wenn das Hochgeladene File aus dem Temp Folder in die\r\n * Struktur verschoben wurde.\r\n * @param uploadid ID des Uploads\r\n */\r\n public abstract uploadedFileMoved(uploadid: string): void;\r\n\r\n // #endregion Public Abstract Methods\r\n\r\n // #region Private Methods\r\n\r\n /**\r\n * Rekursive Methode welche beim Node und all seinen Childs neue Nodes entfernt\r\n * @param node Node bei welchem alle neuen Nodes entfernt werden soll.\r\n */\r\n private clearNewChildNodes(node: IBrowserNode) {\r\n node.ChildNodes.forEach((itm) => {\r\n if (itm.IsNewNode) {\r\n node.ChildNodes.splice(node.ChildNodes.indexOf(itm));\r\n }\r\n });\r\n\r\n node.ChildNodes.forEach((itm) => this.clearNewChildNodes(itm));\r\n }\r\n\r\n /**\r\n * Methode welche den Pfad f\xFCr einen Node erzeugt\r\n * @param node Node f\xFCr welchen der Pfad erzeugt werden soll\r\n * @param parentPath \xDCbergeordneter Pfad\r\n */\r\n private fillPath(node: IBrowserNode, parentPath: string) {\r\n node.Path = parentPath + '/' + node.Name;\r\n node.ChildNodes.forEach((itm) => {\r\n this.fillPath(itm, node.Path);\r\n });\r\n }\r\n\r\n /**\r\n * Sucht den \xFCbergeordneten Node im Tree\r\n * @param node Aktueller Node\r\n * @param nodeToFind Node welcher gefunden werden soll\r\n * @returns Node wenn er gefunden wurde, ansonsten wird NULL zur\xFCckgegeben\r\n */\r\n private findParentNode(\r\n node: IBrowserNode,\r\n nodeToFind: IBrowserNode\r\n ): IBrowserNode {\r\n if (node.ChildNodes.indexOf(nodeToFind) >= 0) {\r\n return node;\r\n }\r\n\r\n for (const child of node.ChildNodes) {\r\n const result = this.findParentNode(child, nodeToFind);\r\n if (result !== null) {\r\n return result;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Sucht einen Node gem. einem URL Pfad\r\n * @param node Node in welchem gesucht werden soll\r\n * @param path Pfad nach welchem gesucht wird\r\n * @returns Node welcher zum gesuchten Pfad passt. Wenn kein Node gefunden wird, wird NULL zur\xFCckgegeben\r\n */\r\n private findSelectedNodeByPath(\r\n node: IBrowserNode,\r\n path: string\r\n ): IBrowserNode {\r\n // Cancel wenn Pfad nicht definiert\r\n if (path === undefined || path === null) {\r\n return null;\r\n }\r\n\r\n // Pfad in Array splitten und Root Foldername setzen\r\n const pathArray = path.split('/');\r\n pathArray[0] = this.rootNode.Name;\r\n\r\n return this.findSelectedNodeByPathArray(node, pathArray, 0);\r\n }\r\n\r\n /**\r\n * Sucht einen Node gem. einem Array von Node Namen\r\n * @param node Node in welchem gesucht werden soll\r\n * @param path Array von Node Namen, welche die Hirarchy des Pfades abbilden\r\n * @param index Aktueller Index im PATH Array\r\n * @returns Node wenn einer gefunden wurde, ansonsten NULL\r\n */\r\n private findSelectedNodeByPathArray(\r\n node: IBrowserNode,\r\n path: string[],\r\n index: number\r\n ): IBrowserNode {\r\n // Check ob Ordner korrekt. Letzer Ordner zur\xFCckgeben. Path Last Index ist der Filename\r\n if (node.Name === path[index] && path.length - 2 === index) {\r\n return node;\r\n } else if (node.Name === path[index]) {\r\n // Expand Node\r\n node.IsExpanded = true;\r\n for (const item of node.ChildNodes) {\r\n const result = this.findSelectedNodeByPathArray(item, path, index + 1);\r\n\r\n if (result !== null) {\r\n return result;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Rekursive Methode welche beim Node und all seinen Childs den Edit Mode beendet.\r\n * @param node Node bei welchem der Edit Mode beendet werden soll\r\n */\r\n private resetNodeEditMode(node: IBrowserNode): void {\r\n if (node === null) {\r\n this.resetNodeEditMode(this.rootNode);\r\n } else {\r\n node.IsEditMode = false;\r\n\r\n if (node.ChildNodes) {\r\n node.ChildNodes.forEach((itm) => this.resetNodeEditMode(itm));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Setzt den Pfad in allen Nodes\r\n */\r\n private setPathToAllNodes() {\r\n this.rootNode.ChildNodes.forEach((itm) => {\r\n this.fillPath(itm, '');\r\n });\r\n }\r\n\r\n // #endregion Private Methods\r\n}\r\n"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"71145b16a3087d43ee0a8db110bc470a31c668ad"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore
2
+ cov_2non7o6v3i=function(){return actualCoverage;};}return actualCoverage;}cov_2non7o6v3i();import{Directive,EventEmitter,HostListener,Input,Output}from'@angular/core';import{SACICON_SERVICE,SACLOCALISATION_SERVICE,SACVALIDATIONKEY_SERVICE,SacDefaultIconService,SacDefaultValidationKeyService}from'../../services';import{SACFILEBROWSER_SERVICE,SacDefaultFileBrowserService}from'../../services/sac-filebrowser.service';import{SacDefaultLocalisationService}from'../../services/sac-localisation.service';import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";/**
8
3
  * Base Component für File Browser
9
- */
10
- class SacFileBrowserCommon {
11
- // #endregion Properties
12
- // #region Constructors
13
- /**
4
+ */class SacFileBrowserCommon{// #endregion Properties
5
+ // #region Constructors
6
+ /**
14
7
  * Konstruktor
15
8
  * @param httpclient Angular HTTP Client
16
9
  * @param injector Service Injector
17
- */
18
- constructor(httpclient, injector) {
19
- /**
10
+ */constructor(httpclient,injector){cov_2non7o6v3i().f[0]++;cov_2non7o6v3i().s[0]++;/**
20
11
  * File welches beim starten des Browsers bereits selektiert ist
21
- */
22
- this.preselecedfile = null;
23
- /**
12
+ */this.preselecedfile=null;/**
24
13
  * Erlaubte Dateierweiterungen für Fileauswahl und Upload. Dateierweiterung mit Punkt und
25
14
  * getrennt durch Komma für mehr als eine Erweiterung (Example: ".jpg,.gif")
26
- */
27
- this.allowedtypes = '';
28
- /**
15
+ */cov_2non7o6v3i().s[1]++;this.allowedtypes='';/**
29
16
  * Erlaubt das löschen einer Datei
30
- */
31
- this.allowfiledelete = true;
32
- /**
17
+ */cov_2non7o6v3i().s[2]++;this.allowfiledelete=true;/**
33
18
  * Erlaubt das umbenennen einer Datei
34
- */
35
- this.allowfilerename = true;
36
- /**
19
+ */cov_2non7o6v3i().s[3]++;this.allowfilerename=true;/**
37
20
  * Erlaubt den Upload von Dateien
38
- */
39
- this.allowfileupload = true;
40
- /**
21
+ */cov_2non7o6v3i().s[4]++;this.allowfileupload=true;/**
41
22
  * Erlaubt das erstellen eines neuen Ordners
42
- */
43
- this.allowfoldercreate = true;
44
- /**
23
+ */cov_2non7o6v3i().s[5]++;this.allowfoldercreate=true;/**
45
24
  * Erlaubt das löschen eines Ordners
46
- */
47
- this.allowfolderdelete = true;
48
- /**
25
+ */cov_2non7o6v3i().s[6]++;this.allowfolderdelete=true;/**
49
26
  * Erlaubt das Umbenennen eines Ordners
50
- */
51
- this.allowfolderrename = true;
52
- /**
27
+ */cov_2non7o6v3i().s[7]++;this.allowfolderrename=true;/**
53
28
  * Output Emitter wenn File selektiert wird.
54
- */
55
- this.file = new EventEmitter();
56
- /**
29
+ */cov_2non7o6v3i().s[8]++;this.file=new EventEmitter();/**
57
30
  * Root Node Item für Tree
58
- */
59
- this.rootNode = {
60
- Name: '',
61
- ChildNodes: [],
62
- Files: [],
63
- IsExpanded: true,
64
- IsEditMode: false,
65
- IsNewNode: false,
66
- Path: '',
67
- };
68
- /**
31
+ */cov_2non7o6v3i().s[9]++;this.rootNode={Name:'',ChildNodes:[],Files:[],IsExpanded:true,IsEditMode:false,IsNewNode:false,Path:''};/**
69
32
  * Selected File Item
70
- */
71
- this.selectedFileItem = null;
72
- /**
33
+ */cov_2non7o6v3i().s[10]++;this.selectedFileItem=null;/**
73
34
  * Selected Node Item
74
- */
75
- this.selectedNode = null;
76
- /**
35
+ */cov_2non7o6v3i().s[11]++;this.selectedNode=null;/**
77
36
  * Liste von Uploads
78
- */
79
- this.uploads = [];
80
- this.browserService = injector.get(SACFILEBROWSER_SERVICE, new SacDefaultFileBrowserService(httpclient));
81
- this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService());
82
- this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());
83
- }
84
- // #endregion Constructors
85
- // #region Public Getters And Setters
86
- /**
37
+ */cov_2non7o6v3i().s[12]++;this.uploads=[];cov_2non7o6v3i().s[13]++;this.browserService=injector.get(SACFILEBROWSER_SERVICE,new SacDefaultFileBrowserService(httpclient));cov_2non7o6v3i().s[14]++;this.validationKeyService=injector.get(SACVALIDATIONKEY_SERVICE,new SacDefaultValidationKeyService());cov_2non7o6v3i().s[15]++;this.lngResourceService=injector.get(SACLOCALISATION_SERVICE,new SacDefaultLocalisationService(this.validationKeyService));cov_2non7o6v3i().s[16]++;this.iconService=injector.get(SACICON_SERVICE,new SacDefaultIconService());}// #endregion Constructors
38
+ // #region Public Getters And Setters
39
+ /**
40
+ * Setzt den Seleced Node über den Pfad
41
+ */set selectedfile(v){cov_2non7o6v3i().f[1]++;const selectednode=(cov_2non7o6v3i().s[17]++,this.findSelectedNodeByPath(this.rootNode,v));cov_2non7o6v3i().s[18]++;if(selectednode!==null){cov_2non7o6v3i().b[0][0]++;cov_2non7o6v3i().s[19]++;this.selectNode(selectednode);}else{cov_2non7o6v3i().b[0][1]++;}cov_2non7o6v3i().s[20]++;this.preselecedfile=v;}/**
87
42
  * CSS icon class for delete icon
88
43
  * @returns css class with icon
89
- */
90
- get iconDelete() {
91
- return this.iconService.BrowserComponentDeleteIcon;
92
- }
93
- /**
44
+ */get iconDelete(){cov_2non7o6v3i().f[2]++;cov_2non7o6v3i().s[21]++;return this.iconService.BrowserComponentDeleteIcon;}/**
94
45
  * CSS icon class for edit icon
95
46
  * @returns css class with icon
96
- */
97
- get iconEdit() {
98
- return this.iconService.BrowserComponentEditIcon;
99
- }
100
- /**
47
+ */get iconEdit(){cov_2non7o6v3i().f[3]++;cov_2non7o6v3i().s[22]++;return this.iconService.BrowserComponentEditIcon;}/**
101
48
  * CSS icon for folders in tree there are collabsed
102
49
  * @returns css class with icon
103
- */
104
- get iconFolderCollabsed() {
105
- return this.iconService.BrowserComponentFolderClosedIcon;
106
- }
107
- /**
50
+ */get iconFolderCollabsed(){cov_2non7o6v3i().f[4]++;cov_2non7o6v3i().s[23]++;return this.iconService.BrowserComponentFolderClosedIcon;}/**
108
51
  * CSS icon class for folders without subfolders
109
52
  * @returns css class with icon
110
- */
111
- get iconFolderEmpty() {
112
- return this.iconService.BrowserComponentFolderEmptyIcon;
113
- }
114
- /**
53
+ */get iconFolderEmpty(){cov_2non7o6v3i().f[5]++;cov_2non7o6v3i().s[24]++;return this.iconService.BrowserComponentFolderEmptyIcon;}/**
115
54
  * CSS icon for new folders action
116
55
  * @returns css class with icon
117
- */
118
- get iconFolderNew() {
119
- return this.iconService.BrowserComponentFolderNewIcon;
120
- }
121
- /**
56
+ */get iconFolderNew(){cov_2non7o6v3i().f[6]++;cov_2non7o6v3i().s[25]++;return this.iconService.BrowserComponentFolderNewIcon;}/**
122
57
  * CSS icon for folders in tree there are expanded
123
58
  * @returns css class with icon
124
- */
125
- get iconFolderOpen() {
126
- return this.iconService.BrowserComponentFolderOpenIcon;
127
- }
128
- /**
59
+ */get iconFolderOpen(){cov_2non7o6v3i().f[7]++;cov_2non7o6v3i().s[26]++;return this.iconService.BrowserComponentFolderOpenIcon;}/**
129
60
  * CSS icon class for refresh icon
130
61
  * @returns css class with icon
131
- */
132
- get iconRefresh() {
133
- return this.iconService.BrowserComponentRefreshIcon;
134
- }
135
- /**
62
+ */get iconRefresh(){cov_2non7o6v3i().f[8]++;cov_2non7o6v3i().s[27]++;return this.iconService.BrowserComponentRefreshIcon;}/**
136
63
  * Getter für Selected File. Ist an Input Property gebunden
137
- */
138
- get selectedfile() {
139
- if (this.selectFile && this.selectFile.length > 0) {
140
- return this.selectedFile;
141
- }
142
- else {
143
- return null;
144
- }
145
- }
146
- /**
147
- * Setzt den Seleced Node über den Pfad
148
- */
149
- set selectedfile(v) {
150
- const selectednode = this.findSelectedNodeByPath(this.rootNode, v);
151
- if (selectednode !== null) {
152
- this.selectNode(selectednode);
153
- }
154
- this.preselecedfile = v;
155
- }
156
- // #endregion Public Getters And Setters
157
- // #region Public Methods
158
- /**
64
+ */get selectedfile(){cov_2non7o6v3i().f[9]++;cov_2non7o6v3i().s[28]++;if((cov_2non7o6v3i().b[2][0]++,this.selectFile)&&(cov_2non7o6v3i().b[2][1]++,this.selectFile.length>0)){cov_2non7o6v3i().b[1][0]++;cov_2non7o6v3i().s[29]++;return this.selectedFile;}else{cov_2non7o6v3i().b[1][1]++;cov_2non7o6v3i().s[30]++;return null;}}// #endregion Public Getters And Setters
65
+ // #region Public Methods
66
+ /**
67
+ * HostListener welcher den Edit Mode bei allen Files und Nodes beendet.
68
+ */exitEditMode(targetElement){cov_2non7o6v3i().f[10]++;cov_2non7o6v3i().s[31]++;if(this.selectedNode){cov_2non7o6v3i().b[3][0]++;cov_2non7o6v3i().s[32]++;this.selectedNode.Files.forEach(itm=>{cov_2non7o6v3i().f[11]++;cov_2non7o6v3i().s[33]++;return itm.IsEditMode=false;});cov_2non7o6v3i().s[34]++;if((cov_2non7o6v3i().b[5][0]++,!this.selectedNode)||(cov_2non7o6v3i().b[5][1]++,this.selectedNode.Name===null)||(cov_2non7o6v3i().b[5][2]++,this.selectedNode.Name.length===0)){cov_2non7o6v3i().b[4][0]++;cov_2non7o6v3i().s[35]++;this.clearNewChildNodes(this.rootNode);}else{cov_2non7o6v3i().b[4][1]++;}}else{cov_2non7o6v3i().b[3][1]++;}cov_2non7o6v3i().s[36]++;this.resetNodeEditMode(null);}/**
159
69
  * Löscht ein File
160
70
  * @param file File welches gelöscht werden soll
161
- */
162
- deleteFile(file) {
163
- this.confirmDeleteFile(file).subscribe((confirm) => {
164
- if (confirm) {
165
- this.browserService
166
- .DeleteFile(this.apiurl, this.selectedNode.Path + '/' + file.Filename, this.allowedtypes)
167
- .subscribe((result) => {
168
- this.selectedNode.Files = result.Files;
169
- });
170
- }
171
- });
172
- }
173
- /**
71
+ */deleteFile(file){cov_2non7o6v3i().f[12]++;cov_2non7o6v3i().s[37]++;this.confirmDeleteFile(file).subscribe(confirm=>{cov_2non7o6v3i().f[13]++;cov_2non7o6v3i().s[38]++;if(confirm){cov_2non7o6v3i().b[6][0]++;cov_2non7o6v3i().s[39]++;this.browserService.DeleteFile(this.apiurl,this.selectedNode.Path+'/'+file.Filename,this.allowedtypes).subscribe(result=>{cov_2non7o6v3i().f[14]++;cov_2non7o6v3i().s[40]++;this.selectedNode.Files=result.Files;});}else{cov_2non7o6v3i().b[6][1]++;}});}/**
174
72
  * Löscht einen Node
175
73
  * @param node Node welcher gelöscht werden soll
176
- */
177
- deleteNode(node) {
178
- this.confirmDeleteNode(node).subscribe((confirm) => {
179
- if (confirm) {
180
- this.browserService
181
- .DeleteNode(this.apiurl, node.Path)
182
- .subscribe((result) => {
183
- const parentNode = this.findParentNode(this.rootNode, node);
184
- parentNode.ChildNodes = result.Node.ChildNodes;
185
- this.rootNode.ChildNodes.forEach((itm) => {
186
- this.fillPath(itm, '');
187
- });
188
- this.selectNode(parentNode);
189
- });
190
- }
191
- });
192
- }
193
- /**
74
+ */deleteNode(node){cov_2non7o6v3i().f[15]++;cov_2non7o6v3i().s[41]++;this.confirmDeleteNode(node).subscribe(confirm=>{cov_2non7o6v3i().f[16]++;cov_2non7o6v3i().s[42]++;if(confirm){cov_2non7o6v3i().b[7][0]++;cov_2non7o6v3i().s[43]++;this.browserService.DeleteNode(this.apiurl,node.Path).subscribe(result=>{cov_2non7o6v3i().f[17]++;const parentNode=(cov_2non7o6v3i().s[44]++,this.findParentNode(this.rootNode,node));cov_2non7o6v3i().s[45]++;parentNode.ChildNodes=result.Node.ChildNodes;cov_2non7o6v3i().s[46]++;this.rootNode.ChildNodes.forEach(itm=>{cov_2non7o6v3i().f[18]++;cov_2non7o6v3i().s[47]++;this.fillPath(itm,'');});cov_2non7o6v3i().s[48]++;this.selectNode(parentNode);});}else{cov_2non7o6v3i().b[7][1]++;}});}/**
194
75
  * Setzt ein File in den Edit Mode
195
76
  * @param file File welches in den Edit Mode gesetzt werden soll
196
- */
197
- editFile(file) {
198
- file.IsEditMode = true;
199
- }
200
- /**
77
+ */editFile(file){cov_2non7o6v3i().f[19]++;cov_2non7o6v3i().s[49]++;file.IsEditMode=true;}/**
201
78
  * Setzt einen Node in den Edit Mode
202
79
  * @param node Node welcher bearbeitet werden soll
203
- */
204
- editNode(node) {
205
- node.IsEditMode = true;
206
- }
207
- /**
208
- * HostListener welcher den Edit Mode bei allen Files und Nodes beendet.
209
- */
210
- exitEditMode(targetElement) {
211
- if (this.selectedNode) {
212
- this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));
213
- if (!this.selectedNode ||
214
- this.selectedNode.Name === null ||
215
- this.selectedNode.Name.length === 0) {
216
- this.clearNewChildNodes(this.rootNode);
217
- }
218
- }
219
- this.resetNodeEditMode(null);
220
- }
221
- /**
80
+ */editNode(node){cov_2non7o6v3i().f[20]++;cov_2non7o6v3i().s[50]++;node.IsEditMode=true;}/**
222
81
  * Erzeugt einen neuen Node im Tree
223
82
  * @param node Node unter welchem ein neuer Node erstellt werden soll
224
- */
225
- newNode(node) {
226
- const item = {
227
- ChildNodes: [],
228
- Files: [],
229
- IsEditMode: false,
230
- IsExpanded: false,
231
- Name: '',
232
- Path: node.Path,
233
- IsNewNode: true,
234
- };
235
- node.ChildNodes.push(item);
236
- this.selectNode(item);
237
- this.editNode(item);
238
- }
239
- /**
83
+ */newNode(node){cov_2non7o6v3i().f[21]++;const item=(cov_2non7o6v3i().s[51]++,{ChildNodes:[],Files:[],IsEditMode:false,IsExpanded:false,Name:'',Path:node.Path,IsNewNode:true});cov_2non7o6v3i().s[52]++;node.ChildNodes.push(item);cov_2non7o6v3i().s[53]++;this.selectNode(item);cov_2non7o6v3i().s[54]++;this.editNode(item);}/**
240
84
  * Init Event der Komponente
241
- */
242
- ngOnInit() {
243
- this.browserService
244
- .GetNode(this.apiurl, '', this.allowedtypes)
245
- .subscribe((result) => {
246
- this.rootNode = {
247
- Name: result.Node.Name,
248
- Files: result.Node.Files,
249
- ChildNodes: result.Node.ChildNodes,
250
- IsExpanded: true,
251
- IsEditMode: false,
252
- IsNewNode: false,
253
- Path: '/',
254
- };
255
- this.setPathToAllNodes();
256
- this.selectedNode = this.rootNode;
257
- // Selected File erneut setzen, wenn Property gesetzt wurde bevor Daten vom Service geladen wurden.
258
- if (this.preselecedfile !== null && this.preselecedfile.length > 0) {
259
- this.selectedfile = this.preselecedfile;
260
- }
261
- });
262
- }
263
- /**
85
+ */ngOnInit(){cov_2non7o6v3i().f[22]++;cov_2non7o6v3i().s[55]++;this.browserService.GetNode(this.apiurl,'',this.allowedtypes).subscribe(result=>{cov_2non7o6v3i().f[23]++;cov_2non7o6v3i().s[56]++;this.rootNode={Name:result.Node.Name,Files:result.Node.Files,ChildNodes:result.Node.ChildNodes,IsExpanded:true,IsEditMode:false,IsNewNode:false,Path:'/'};cov_2non7o6v3i().s[57]++;this.setPathToAllNodes();cov_2non7o6v3i().s[58]++;this.selectedNode=this.rootNode;// Selected File erneut setzen, wenn Property gesetzt wurde bevor Daten vom Service geladen wurden.
86
+ cov_2non7o6v3i().s[59]++;if((cov_2non7o6v3i().b[9][0]++,this.preselecedfile!==null)&&(cov_2non7o6v3i().b[9][1]++,this.preselecedfile.length>0)){cov_2non7o6v3i().b[8][0]++;cov_2non7o6v3i().s[60]++;this.selectedfile=this.preselecedfile;}else{cov_2non7o6v3i().b[8][1]++;}});}/**
264
87
  * Aktualisiert den Node
265
- */
266
- refreshNode(node) {
267
- if (!node.IsExpanded) {
268
- this.switchExpandNode(node);
269
- }
270
- this.browserService
271
- .GetNode(this.apiurl, node.Path, this.allowedtypes)
272
- .subscribe((result) => {
273
- node.ChildNodes = result.Node.ChildNodes;
274
- node.Files = result.Node.Files;
275
- this.setPathToAllNodes();
276
- });
277
- }
278
- /**
88
+ */refreshNode(node){cov_2non7o6v3i().f[24]++;cov_2non7o6v3i().s[61]++;if(!node.IsExpanded){cov_2non7o6v3i().b[10][0]++;cov_2non7o6v3i().s[62]++;this.switchExpandNode(node);}else{cov_2non7o6v3i().b[10][1]++;}cov_2non7o6v3i().s[63]++;this.browserService.GetNode(this.apiurl,node.Path,this.allowedtypes).subscribe(result=>{cov_2non7o6v3i().f[25]++;cov_2non7o6v3i().s[64]++;node.ChildNodes=result.Node.ChildNodes;cov_2non7o6v3i().s[65]++;node.Files=result.Node.Files;cov_2non7o6v3i().s[66]++;this.setPathToAllNodes();});}/**
279
89
  * Methode wenn eine Datei umbenannt werden soll
280
90
  * @param file File welches umbenannt werden soll
281
91
  * @param newFilename Neuer Dateiname
282
- */
283
- renameFile(file, newFilename) {
284
- file.IsEditMode = false;
285
- if (!newFilename || newFilename === null || newFilename.length === 0) {
286
- // Cancel, Invalid Filename
287
- return;
288
- }
289
- if (file.Filename !== newFilename) {
290
- this.browserService
291
- .RenameFile(this.apiurl, this.selectedNode.Path + '/' + file.Filename, newFilename, this.allowedtypes)
292
- .subscribe((result) => {
293
- this.selectedNode.Files = result.Files;
294
- });
295
- }
296
- }
297
- /**
92
+ */renameFile(file,newFilename){cov_2non7o6v3i().f[26]++;cov_2non7o6v3i().s[67]++;file.IsEditMode=false;cov_2non7o6v3i().s[68]++;if((cov_2non7o6v3i().b[12][0]++,!newFilename)||(cov_2non7o6v3i().b[12][1]++,newFilename===null)||(cov_2non7o6v3i().b[12][2]++,newFilename.length===0)){cov_2non7o6v3i().b[11][0]++;cov_2non7o6v3i().s[69]++;// Cancel, Invalid Filename
93
+ return;}else{cov_2non7o6v3i().b[11][1]++;}cov_2non7o6v3i().s[70]++;if(file.Filename!==newFilename){cov_2non7o6v3i().b[13][0]++;cov_2non7o6v3i().s[71]++;this.browserService.RenameFile(this.apiurl,this.selectedNode.Path+'/'+file.Filename,newFilename,this.allowedtypes).subscribe(result=>{cov_2non7o6v3i().f[27]++;cov_2non7o6v3i().s[72]++;this.selectedNode.Files=result.Files;});}else{cov_2non7o6v3i().b[13][1]++;}}/**
298
94
  * Methode wenn ein Node umbenannt werden soll
299
95
  * @param node Node welcher umbenannt werden soll
300
96
  * @param newFoldername Neuer Ordnername
301
- */
302
- renameNode(node, newFoldername) {
303
- node.IsEditMode = false;
304
- if (!node.IsNewNode) {
305
- if (!newFoldername ||
306
- newFoldername === null ||
307
- newFoldername.length === 0) {
308
- // Cancel Rename. Invalid Foldername
309
- return;
310
- }
311
- if (node.Name !== newFoldername) {
312
- this.browserService
313
- .RenameNode(this.apiurl, node.Path, newFoldername)
314
- .subscribe((result) => {
315
- node.Name = result.Node.Name;
316
- this.setPathToAllNodes();
317
- });
318
- }
319
- }
320
- else {
321
- if (!newFoldername ||
322
- newFoldername === null ||
323
- newFoldername.length === 0) {
324
- this.clearNewChildNodes(this.rootNode);
325
- return;
326
- }
327
- node.Name = newFoldername;
328
- node.IsNewNode = false;
329
- this.browserService
330
- .SaveNode(this.apiurl, node.Path, newFoldername)
331
- .subscribe((result) => {
332
- node.Name = result.Node.Name;
333
- node.Files = result.Node.Files;
334
- this.setPathToAllNodes();
335
- });
336
- }
337
- }
338
- /**
97
+ */renameNode(node,newFoldername){cov_2non7o6v3i().f[28]++;cov_2non7o6v3i().s[73]++;node.IsEditMode=false;cov_2non7o6v3i().s[74]++;if(!node.IsNewNode){cov_2non7o6v3i().b[14][0]++;cov_2non7o6v3i().s[75]++;if((cov_2non7o6v3i().b[16][0]++,!newFoldername)||(cov_2non7o6v3i().b[16][1]++,newFoldername===null)||(cov_2non7o6v3i().b[16][2]++,newFoldername.length===0)){cov_2non7o6v3i().b[15][0]++;cov_2non7o6v3i().s[76]++;// Cancel Rename. Invalid Foldername
98
+ return;}else{cov_2non7o6v3i().b[15][1]++;}cov_2non7o6v3i().s[77]++;if(node.Name!==newFoldername){cov_2non7o6v3i().b[17][0]++;cov_2non7o6v3i().s[78]++;this.browserService.RenameNode(this.apiurl,node.Path,newFoldername).subscribe(result=>{cov_2non7o6v3i().f[29]++;cov_2non7o6v3i().s[79]++;node.Name=result.Node.Name;cov_2non7o6v3i().s[80]++;this.setPathToAllNodes();});}else{cov_2non7o6v3i().b[17][1]++;}}else{cov_2non7o6v3i().b[14][1]++;cov_2non7o6v3i().s[81]++;if((cov_2non7o6v3i().b[19][0]++,!newFoldername)||(cov_2non7o6v3i().b[19][1]++,newFoldername===null)||(cov_2non7o6v3i().b[19][2]++,newFoldername.length===0)){cov_2non7o6v3i().b[18][0]++;cov_2non7o6v3i().s[82]++;this.clearNewChildNodes(this.rootNode);cov_2non7o6v3i().s[83]++;return;}else{cov_2non7o6v3i().b[18][1]++;}cov_2non7o6v3i().s[84]++;node.Name=newFoldername;cov_2non7o6v3i().s[85]++;node.IsNewNode=false;cov_2non7o6v3i().s[86]++;this.browserService.SaveNode(this.apiurl,node.Path,newFoldername).subscribe(result=>{cov_2non7o6v3i().f[30]++;cov_2non7o6v3i().s[87]++;node.Name=result.Node.Name;cov_2non7o6v3i().s[88]++;node.Files=result.Node.Files;cov_2non7o6v3i().s[89]++;this.setPathToAllNodes();});}}/**
339
99
  * Methode wenn ein File selektiert wird
340
100
  * @param file File welches selektiert wird
341
- */
342
- selectFile(file) {
343
- if (!file.IsEditMode) {
344
- this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));
345
- }
346
- if (!this.selectedNode.Path.endsWith('/')) {
347
- this.selectedFile = this.selectedNode.Path + '/' + file.Filename;
348
- }
349
- else {
350
- this.selectedFile = '/' + file.Filename;
351
- }
352
- this.selectedFileItem = file;
353
- this.file.emit(this.selectedFile);
354
- }
355
- /**
101
+ */selectFile(file){cov_2non7o6v3i().f[31]++;cov_2non7o6v3i().s[90]++;if(!file.IsEditMode){cov_2non7o6v3i().b[20][0]++;cov_2non7o6v3i().s[91]++;this.selectedNode.Files.forEach(itm=>{cov_2non7o6v3i().f[32]++;cov_2non7o6v3i().s[92]++;return itm.IsEditMode=false;});}else{cov_2non7o6v3i().b[20][1]++;}cov_2non7o6v3i().s[93]++;if(!this.selectedNode.Path.endsWith('/')){cov_2non7o6v3i().b[21][0]++;cov_2non7o6v3i().s[94]++;this.selectedFile=this.selectedNode.Path+'/'+file.Filename;}else{cov_2non7o6v3i().b[21][1]++;cov_2non7o6v3i().s[95]++;this.selectedFile='/'+file.Filename;}cov_2non7o6v3i().s[96]++;this.selectedFileItem=file;cov_2non7o6v3i().s[97]++;this.file.emit(this.selectedFile);}/**
356
102
  * Methode wenn ein Node selektiert wird
357
103
  * @param node Node welcher selektiert werden soll
358
- */
359
- selectNode(node) {
360
- if (!node.IsExpanded) {
361
- this.switchExpandNode(node);
362
- }
363
- // Reset the Edit Mode in all Nodes
364
- this.resetNodeEditMode(null);
365
- if (!node.Files) {
366
- this.browserService
367
- .GetFiles(this.apiurl, node.Path, this.allowedtypes)
368
- .subscribe((result) => {
369
- node.Files = result.Files;
370
- this.selectedNode = node;
371
- if (this.preselecedfile !== null && this.preselecedfile.length > 0) {
372
- const filename = this.preselecedfile.substring(this.preselecedfile.lastIndexOf('/') + 1);
373
- const file = node.Files.find((itm) => itm.Filename === filename);
374
- if (file) {
375
- this.selectFile(file);
376
- }
377
- }
378
- });
379
- }
380
- else {
381
- this.selectedNode = node;
382
- }
383
- }
384
- /**
104
+ */selectNode(node){cov_2non7o6v3i().f[33]++;cov_2non7o6v3i().s[98]++;if(!node.IsExpanded){cov_2non7o6v3i().b[22][0]++;cov_2non7o6v3i().s[99]++;this.switchExpandNode(node);}else{cov_2non7o6v3i().b[22][1]++;}// Reset the Edit Mode in all Nodes
105
+ cov_2non7o6v3i().s[100]++;this.resetNodeEditMode(null);cov_2non7o6v3i().s[101]++;if(!node.Files){cov_2non7o6v3i().b[23][0]++;cov_2non7o6v3i().s[102]++;this.browserService.GetFiles(this.apiurl,node.Path,this.allowedtypes).subscribe(result=>{cov_2non7o6v3i().f[34]++;cov_2non7o6v3i().s[103]++;node.Files=result.Files;cov_2non7o6v3i().s[104]++;this.selectedNode=node;cov_2non7o6v3i().s[105]++;if((cov_2non7o6v3i().b[25][0]++,this.preselecedfile!==null)&&(cov_2non7o6v3i().b[25][1]++,this.preselecedfile.length>0)){cov_2non7o6v3i().b[24][0]++;const filename=(cov_2non7o6v3i().s[106]++,this.preselecedfile.substring(this.preselecedfile.lastIndexOf('/')+1));const file=(cov_2non7o6v3i().s[107]++,node.Files.find(itm=>{cov_2non7o6v3i().f[35]++;cov_2non7o6v3i().s[108]++;return itm.Filename===filename;}));cov_2non7o6v3i().s[109]++;if(file){cov_2non7o6v3i().b[26][0]++;cov_2non7o6v3i().s[110]++;this.selectFile(file);}else{cov_2non7o6v3i().b[26][1]++;}}else{cov_2non7o6v3i().b[24][1]++;}});}else{cov_2non7o6v3i().b[23][1]++;cov_2non7o6v3i().s[111]++;this.selectedNode=node;}}/**
385
106
  * Expand/Collabse Methode für Nodes
386
107
  * @param node Node welcher geöffnet oder geschlossen werden soll
387
- */
388
- switchExpandNode(node) {
389
- if (node.IsExpanded) {
390
- node.IsExpanded = false;
391
- }
392
- else {
393
- node.IsExpanded = true;
394
- }
395
- }
396
- /**
108
+ */switchExpandNode(node){cov_2non7o6v3i().f[36]++;cov_2non7o6v3i().s[112]++;if(node.IsExpanded){cov_2non7o6v3i().b[27][0]++;cov_2non7o6v3i().s[113]++;node.IsExpanded=false;}else{cov_2non7o6v3i().b[27][1]++;cov_2non7o6v3i().s[114]++;node.IsExpanded=true;}}/**
397
109
  * Methode die Aufgerufen werden muss, wenn ein Upload beendet ist.
398
110
  * @param param Parameter des hochgeladenen Files
399
- */
400
- uploadComplete(node, uploadIdList) {
401
- if (uploadIdList !== null) {
402
- uploadIdList.forEach((element) => {
403
- if (this.uploads.indexOf(element) < 0) {
404
- this.uploads.push(element);
405
- }
406
- });
407
- }
408
- const id = this.uploads.pop();
409
- if (id) {
410
- this.browserService
411
- .SaveFile(this.apiurl, node.Path, id, this.allowedtypes)
412
- .subscribe((result) => {
413
- this.selectedNode.Files = result.Files;
414
- this.uploadedFileMoved(id);
415
- });
416
- }
417
- }
418
- // #endregion Public Abstract Methods
419
- // #region Private Methods
420
- /**
111
+ */uploadComplete(node,uploadIdList){cov_2non7o6v3i().f[37]++;cov_2non7o6v3i().s[115]++;if(uploadIdList!==null){cov_2non7o6v3i().b[28][0]++;cov_2non7o6v3i().s[116]++;uploadIdList.forEach(element=>{cov_2non7o6v3i().f[38]++;cov_2non7o6v3i().s[117]++;if(this.uploads.indexOf(element)<0){cov_2non7o6v3i().b[29][0]++;cov_2non7o6v3i().s[118]++;this.uploads.push(element);}else{cov_2non7o6v3i().b[29][1]++;}});}else{cov_2non7o6v3i().b[28][1]++;}const id=(cov_2non7o6v3i().s[119]++,this.uploads.pop());cov_2non7o6v3i().s[120]++;if(id){cov_2non7o6v3i().b[30][0]++;cov_2non7o6v3i().s[121]++;this.browserService.SaveFile(this.apiurl,node.Path,id,this.allowedtypes).subscribe(result=>{cov_2non7o6v3i().f[39]++;cov_2non7o6v3i().s[122]++;this.selectedNode.Files=result.Files;cov_2non7o6v3i().s[123]++;this.uploadedFileMoved(id);});}else{cov_2non7o6v3i().b[30][1]++;}}// #endregion Public Abstract Methods
112
+ // #region Private Methods
113
+ /**
421
114
  * Rekursive Methode welche beim Node und all seinen Childs neue Nodes entfernt
422
115
  * @param node Node bei welchem alle neuen Nodes entfernt werden soll.
423
- */
424
- clearNewChildNodes(node) {
425
- node.ChildNodes.forEach((itm) => {
426
- if (itm.IsNewNode) {
427
- node.ChildNodes.splice(node.ChildNodes.indexOf(itm));
428
- }
429
- });
430
- node.ChildNodes.forEach((itm) => this.clearNewChildNodes(itm));
431
- }
432
- /**
116
+ */clearNewChildNodes(node){cov_2non7o6v3i().f[40]++;cov_2non7o6v3i().s[124]++;node.ChildNodes.forEach(itm=>{cov_2non7o6v3i().f[41]++;cov_2non7o6v3i().s[125]++;if(itm.IsNewNode){cov_2non7o6v3i().b[31][0]++;cov_2non7o6v3i().s[126]++;node.ChildNodes.splice(node.ChildNodes.indexOf(itm));}else{cov_2non7o6v3i().b[31][1]++;}});cov_2non7o6v3i().s[127]++;node.ChildNodes.forEach(itm=>{cov_2non7o6v3i().f[42]++;cov_2non7o6v3i().s[128]++;return this.clearNewChildNodes(itm);});}/**
433
117
  * Methode welche den Pfad für einen Node erzeugt
434
118
  * @param node Node für welchen der Pfad erzeugt werden soll
435
119
  * @param parentPath Übergeordneter Pfad
436
- */
437
- fillPath(node, parentPath) {
438
- node.Path = parentPath + '/' + node.Name;
439
- node.ChildNodes.forEach((itm) => {
440
- this.fillPath(itm, node.Path);
441
- });
442
- }
443
- /**
120
+ */fillPath(node,parentPath){cov_2non7o6v3i().f[43]++;cov_2non7o6v3i().s[129]++;node.Path=parentPath+'/'+node.Name;cov_2non7o6v3i().s[130]++;node.ChildNodes.forEach(itm=>{cov_2non7o6v3i().f[44]++;cov_2non7o6v3i().s[131]++;this.fillPath(itm,node.Path);});}/**
444
121
  * Sucht den übergeordneten Node im Tree
445
122
  * @param node Aktueller Node
446
123
  * @param nodeToFind Node welcher gefunden werden soll
447
124
  * @returns Node wenn er gefunden wurde, ansonsten wird NULL zurückgegeben
448
- */
449
- findParentNode(node, nodeToFind) {
450
- if (node.ChildNodes.indexOf(nodeToFind) >= 0) {
451
- return node;
452
- }
453
- for (const child of node.ChildNodes) {
454
- const result = this.findParentNode(child, nodeToFind);
455
- if (result !== null) {
456
- return result;
457
- }
458
- }
459
- return null;
460
- }
461
- /**
125
+ */findParentNode(node,nodeToFind){cov_2non7o6v3i().f[45]++;cov_2non7o6v3i().s[132]++;if(node.ChildNodes.indexOf(nodeToFind)>=0){cov_2non7o6v3i().b[32][0]++;cov_2non7o6v3i().s[133]++;return node;}else{cov_2non7o6v3i().b[32][1]++;}cov_2non7o6v3i().s[134]++;for(const child of node.ChildNodes){const result=(cov_2non7o6v3i().s[135]++,this.findParentNode(child,nodeToFind));cov_2non7o6v3i().s[136]++;if(result!==null){cov_2non7o6v3i().b[33][0]++;cov_2non7o6v3i().s[137]++;return result;}else{cov_2non7o6v3i().b[33][1]++;}}cov_2non7o6v3i().s[138]++;return null;}/**
462
126
  * Sucht einen Node gem. einem URL Pfad
463
127
  * @param node Node in welchem gesucht werden soll
464
128
  * @param path Pfad nach welchem gesucht wird
465
129
  * @returns Node welcher zum gesuchten Pfad passt. Wenn kein Node gefunden wird, wird NULL zurückgegeben
466
- */
467
- findSelectedNodeByPath(node, path) {
468
- // Cancel wenn Pfad nicht definiert
469
- if (path === undefined || path === null) {
470
- return null;
471
- }
472
- // Pfad in Array splitten und Root Foldername setzen
473
- const pathArray = path.split('/');
474
- pathArray[0] = this.rootNode.Name;
475
- return this.findSelectedNodeByPathArray(node, pathArray, 0);
476
- }
477
- /**
130
+ */findSelectedNodeByPath(node,path){cov_2non7o6v3i().f[46]++;cov_2non7o6v3i().s[139]++;// Cancel wenn Pfad nicht definiert
131
+ if((cov_2non7o6v3i().b[35][0]++,path===undefined)||(cov_2non7o6v3i().b[35][1]++,path===null)){cov_2non7o6v3i().b[34][0]++;cov_2non7o6v3i().s[140]++;return null;}else{cov_2non7o6v3i().b[34][1]++;}// Pfad in Array splitten und Root Foldername setzen
132
+ const pathArray=(cov_2non7o6v3i().s[141]++,path.split('/'));cov_2non7o6v3i().s[142]++;pathArray[0]=this.rootNode.Name;cov_2non7o6v3i().s[143]++;return this.findSelectedNodeByPathArray(node,pathArray,0);}/**
478
133
  * Sucht einen Node gem. einem Array von Node Namen
479
134
  * @param node Node in welchem gesucht werden soll
480
135
  * @param path Array von Node Namen, welche die Hirarchy des Pfades abbilden
481
136
  * @param index Aktueller Index im PATH Array
482
137
  * @returns Node wenn einer gefunden wurde, ansonsten NULL
483
- */
484
- findSelectedNodeByPathArray(node, path, index) {
485
- // Check ob Ordner korrekt. Letzer Ordner zurückgeben. Path Last Index ist der Filename
486
- if (node.Name === path[index] && path.length - 2 === index) {
487
- return node;
488
- }
489
- else if (node.Name === path[index]) {
490
- // Expand Node
491
- node.IsExpanded = true;
492
- for (const item of node.ChildNodes) {
493
- const result = this.findSelectedNodeByPathArray(item, path, index + 1);
494
- if (result !== null) {
495
- return result;
496
- }
497
- }
498
- }
499
- return null;
500
- }
501
- /**
138
+ */findSelectedNodeByPathArray(node,path,index){cov_2non7o6v3i().f[47]++;cov_2non7o6v3i().s[144]++;// Check ob Ordner korrekt. Letzer Ordner zurückgeben. Path Last Index ist der Filename
139
+ if((cov_2non7o6v3i().b[37][0]++,node.Name===path[index])&&(cov_2non7o6v3i().b[37][1]++,path.length-2===index)){cov_2non7o6v3i().b[36][0]++;cov_2non7o6v3i().s[145]++;return node;}else{cov_2non7o6v3i().b[36][1]++;cov_2non7o6v3i().s[146]++;if(node.Name===path[index]){cov_2non7o6v3i().b[38][0]++;cov_2non7o6v3i().s[147]++;// Expand Node
140
+ node.IsExpanded=true;cov_2non7o6v3i().s[148]++;for(const item of node.ChildNodes){const result=(cov_2non7o6v3i().s[149]++,this.findSelectedNodeByPathArray(item,path,index+1));cov_2non7o6v3i().s[150]++;if(result!==null){cov_2non7o6v3i().b[39][0]++;cov_2non7o6v3i().s[151]++;return result;}else{cov_2non7o6v3i().b[39][1]++;}}}else{cov_2non7o6v3i().b[38][1]++;}}cov_2non7o6v3i().s[152]++;return null;}/**
502
141
  * Rekursive Methode welche beim Node und all seinen Childs den Edit Mode beendet.
503
142
  * @param node Node bei welchem der Edit Mode beendet werden soll
504
- */
505
- resetNodeEditMode(node) {
506
- if (node === null) {
507
- this.resetNodeEditMode(this.rootNode);
508
- }
509
- else {
510
- node.IsEditMode = false;
511
- if (node.ChildNodes) {
512
- node.ChildNodes.forEach((itm) => this.resetNodeEditMode(itm));
513
- }
514
- }
515
- }
516
- /**
143
+ */resetNodeEditMode(node){cov_2non7o6v3i().f[48]++;cov_2non7o6v3i().s[153]++;if(node===null){cov_2non7o6v3i().b[40][0]++;cov_2non7o6v3i().s[154]++;this.resetNodeEditMode(this.rootNode);}else{cov_2non7o6v3i().b[40][1]++;cov_2non7o6v3i().s[155]++;node.IsEditMode=false;cov_2non7o6v3i().s[156]++;if(node.ChildNodes){cov_2non7o6v3i().b[41][0]++;cov_2non7o6v3i().s[157]++;node.ChildNodes.forEach(itm=>{cov_2non7o6v3i().f[49]++;cov_2non7o6v3i().s[158]++;return this.resetNodeEditMode(itm);});}else{cov_2non7o6v3i().b[41][1]++;}}}/**
517
144
  * Setzt den Pfad in allen Nodes
518
- */
519
- setPathToAllNodes() {
520
- this.rootNode.ChildNodes.forEach((itm) => {
521
- this.fillPath(itm, '');
522
- });
523
- }
524
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacFileBrowserCommon, deps: [{ token: i1.HttpClient }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
525
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SacFileBrowserCommon, inputs: { allowedtypes: "allowedtypes", allowfiledelete: "allowfiledelete", allowfilerename: "allowfilerename", allowfileupload: "allowfileupload", allowfoldercreate: "allowfoldercreate", allowfolderdelete: "allowfolderdelete", allowfolderrename: "allowfolderrename", apiurl: "apiurl", selectedfile: "selectedfile" }, outputs: { file: "file" }, host: { listeners: { "document:click": "exitEditMode($event.target)" } }, ngImport: i0 }); }
526
- }
527
- export { SacFileBrowserCommon };
528
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacFileBrowserCommon, decorators: [{
529
- type: Directive
530
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Injector }]; }, propDecorators: { allowedtypes: [{
531
- type: Input
532
- }], allowfiledelete: [{
533
- type: Input
534
- }], allowfilerename: [{
535
- type: Input
536
- }], allowfileupload: [{
537
- type: Input
538
- }], allowfoldercreate: [{
539
- type: Input
540
- }], allowfolderdelete: [{
541
- type: Input
542
- }], allowfolderrename: [{
543
- type: Input
544
- }], apiurl: [{
545
- type: Input
546
- }], file: [{
547
- type: Output
548
- }], selectedfile: [{
549
- type: Input
550
- }], exitEditMode: [{
551
- type: HostListener,
552
- args: ['document:click', ['$event.target']]
553
- }] } });
554
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFFWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLHFCQUFxQixHQUN0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsNEJBQTRCLEdBQzdCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQU14Rjs7R0FFRztBQUNILE1BQ3NCLG9CQUFvQjtJQStGeEMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFBWSxVQUFzQixFQUFFLFFBQWtCO1FBN0Z0RDs7V0FFRztRQUNLLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUU3Qzs7O1dBR0c7UUFFSSxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUNqQzs7V0FFRztRQUVJLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ3ZDOztXQUVHO1FBRUksb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkM7O1dBRUc7UUFFSSxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUN2Qzs7V0FFRztRQUVJLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQU16Qzs7V0FFRztRQUVJLFNBQUksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsvRDs7V0FFRztRQUNJLGFBQVEsR0FBaUI7WUFDOUIs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cEIsb0JBQW9CO2tCQUR6QyxTQUFTO3dIQXNCRCxZQUFZO3NCQURsQixLQUFLO2dCQU1DLGVBQWU7c0JBRHJCLEtBQUs7Z0JBTUMsZUFBZTtzQkFEckIsS0FBSztnQkFNQyxlQUFlO3NCQURyQixLQUFLO2dCQU1DLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFNQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBTUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQU1DLE1BQU07c0JBRFosS0FBSztnQkFNQyxJQUFJO3NCQURWLE1BQU07Z0JBd0lJLFlBQVk7c0JBRHRCLEtBQUs7Z0JBaUZDLFlBQVk7c0JBSmxCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSVNhY0ZpbGVCcm93c2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0ZpbGVCcm93c2VyU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0ljb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNMb2NhbGlzYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdEljb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHtcclxuICBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWZpbGVicm93c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IElCcm93c2VyRmlsZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJmaWxlJztcclxuaW1wb3J0IHsgSUJyb3dzZXJGaWxlUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9icm93c2VyZmlsZXJlc3BvbnNlJztcclxuaW1wb3J0IHsgSUJyb3dzZXJOb2RlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3Nlcm5vZGUnO1xyXG5pbXBvcnQgeyBJQnJvd3Nlck5vZGVSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJub2RlcmVzcG9uc2UnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgQ29tcG9uZW50IGbDvHIgRmlsZSBCcm93c2VyXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0ZpbGVCcm93c2VyQ29tbW9uIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmw7xyIEZpbGUgQnJvd3NlciBadWdyaWZmIChCYWNrZW5kKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnJvd3NlclNlcnZpY2U6IElTYWNGaWxlQnJvd3NlclNlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogSWNvbiBzZXJ2aWNlIHRvIHJlY2VpdmUgaWNvbiBjbGFzc2VzIGZvciB1aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaWNvblNlcnZpY2U6IElTYWNJY29uU2VydmljZTtcclxuICAvKipcclxuICAgKiBGaWxlIHdlbGNoZXMgYmVpbSBzdGFydGVuIGRlcyBCcm93c2VycyBiZXJlaXRzIHNlbGVrdGllcnQgaXN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmVzZWxlY2VkZmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVybGF1YnRlIERhdGVpZXJ3ZWl0ZXJ1bmdlbiBmw7xyIEZpbGVhdXN3YWhsIHVuZCBVcGxvYWQuIERhdGVpZXJ3ZWl0ZXJ1bmcgbWl0IFB1bmt0IHVuZFxyXG4gICAqIGdldHJlbm50IGR1cmNoIEtvbW1hIGbDvHIgbWVociBhbHMgZWluZSBFcndlaXRlcnVuZyAoRXhhbXBsZTogXCIuanBnLC5naWZcIilcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2VkdHlwZXM6IHN0cmluZyA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIGzDtnNjaGVuIGVpbmVyIERhdGVpXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmaWxlZGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRhcyB1bWJlbmVubmVuIGVpbmVyIERhdGVpXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmaWxlcmVuYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRlbiBVcGxvYWQgdm9uIERhdGVpZW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZpbGV1cGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIGVyc3RlbGxlbiBlaW5lcyBuZXVlbiBPcmRuZXJzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmb2xkZXJjcmVhdGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIGzDtnNjaGVuIGVpbmVzIE9yZG5lcnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZvbGRlcmRlbGV0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkYXMgVW1iZW5lbm5lbiBlaW5lcyBPcmRuZXJzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmb2xkZXJyZW5hbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIFVSTCBmw7xyIEJhY2tlbmQgQVBJXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXBpdXJsOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3V0cHV0IEVtaXR0ZXIgd2VubiBGaWxlIHNlbGVrdGllcnQgd2lyZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmlsZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGbDvHIgRXJyb3IgTG9jYWxpc2F0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGxuZ1Jlc291cmNlU2VydmljZTogSVNhY0xvY2FsaXNhdGlvblNlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogUm9vdCBOb2RlIEl0ZW0gZsO8ciBUcmVlXHJcbiAgICovXHJcbiAgcHVibGljIHJvb3ROb2RlOiBJQnJvd3Nlck5vZGUgPSB7XHJcbiAgICBOYW1lOiAnJyxcclxuICAgIENoaWxkTm9kZXM6IFtdLFxyXG4gICAgRmlsZXM6IFtdLFxyXG4gICAgSXNFeHBhbmRlZDogdHJ1ZSxcclxuICAgIElzRWRpdE1vZGU6IGZhbHNlLFxyXG4gICAgSXNOZXdOb2RlOiBmYWxzZSxcclxuICAgIFBhdGg6ICcnLFxyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgRmlsZSBOYW1lXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkRmlsZTogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIEZpbGUgSXRlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEZpbGVJdGVtOiBJQnJvd3NlckZpbGUgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIE5vZGUgSXRlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZE5vZGU6IElCcm93c2VyTm9kZSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogTGlzdGUgdm9uIFVwbG9hZHNcclxuICAgKi9cclxuICBwdWJsaWMgdXBsb2Fkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8qKlxyXG4gICAqIEtvbnN0cnVrdG9yXHJcbiAgICogQHBhcmFtIGh0dHBjbGllbnQgQW5ndWxhciBIVFRQIENsaWVudFxyXG4gICAqIEBwYXJhbSBpbmplY3RvciBTZXJ2aWNlIEluamVjdG9yXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaHR0cGNsaWVudDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdEZpbGVCcm93c2VyU2VydmljZShodHRwY2xpZW50KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSgpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaWNvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0lDT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZGVsZXRlIGljb25cclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRGVsZXRlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50RGVsZXRlSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBlZGl0IGljb25cclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRWRpdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEVkaXRJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgY29sbGFic2VkXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlckNvbGxhYnNlZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZm9sZGVycyB3aXRob3V0IHN1YmZvbGRlcnNcclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRm9sZGVyRW1wdHkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJFbXB0eUljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBmb3IgbmV3IGZvbGRlcnMgYWN0aW9uXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlck5ldygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlck5ld0ljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoZXJlIGFyZSBleHBhbmRlZFxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJPcGVuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgcmVmcmVzaCBpY29uXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvblJlZnJlc2goKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmw7xyIFNlbGVjdGVkIEZpbGUuIElzdCBhbiBJbnB1dCBQcm9wZXJ0eSBnZWJ1bmRlblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRmaWxlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0RmlsZSAmJiB0aGlzLnNlbGVjdEZpbGUubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGRlbiBTZWxlY2VkIE5vZGUgw7xiZXIgZGVuIFBmYWRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRmaWxlKHY6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkbm9kZSA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aCh0aGlzLnJvb3ROb2RlLCB2KTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRub2RlICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Tm9kZShzZWxlY3RlZG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJlc2VsZWNlZGZpbGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIEzDtnNjaHQgZWluIEZpbGVcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGRlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1EZWxldGVGaWxlKGZpbGUpLnN1YnNjcmliZSgoY29uZmlybSkgPT4ge1xyXG4gICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAgIC5EZWxldGVGaWxlKFxyXG4gICAgICAgICAgICB0aGlzLmFwaXVybCxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsb3dlZHR5cGVzXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTMO2c2NodCBlaW5lbiBOb2RlXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtRGVsZXRlTm9kZShub2RlKS5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcclxuICAgICAgaWYgKGNvbmZpcm0pIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuRGVsZXRlTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5maW5kUGFyZW50Tm9kZSh0aGlzLnJvb3ROb2RlLCBub2RlKTtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5DaGlsZE5vZGVzID0gcmVzdWx0Lk5vZGUuQ2hpbGROb2RlcztcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgJycpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZShwYXJlbnROb2RlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGVpbiBGaWxlIGluIGRlbiBFZGl0IE1vZGVcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgaW4gZGVuIEVkaXQgTW9kZSBnZXNldHp0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGVkaXRGaWxlKGZpbGU6IElCcm93c2VyRmlsZSk6IHZvaWQge1xyXG4gICAgZmlsZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGVpbmVuIE5vZGUgaW4gZGVuIEVkaXQgTW9kZVxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBiZWFyYmVpdGV0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGVkaXROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgbm9kZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvc3RMaXN0ZW5lciB3ZWxjaGVyIGRlbiBFZGl0IE1vZGUgYmVpIGFsbGVuIEZpbGVzIHVuZCBOb2RlcyBiZWVuZGV0LlxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXHJcbiAgLyoqXHJcbiAgICogQ2xpY2sgRXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgZXhpdEVkaXRNb2RlKHRhcmdldEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcy5mb3JFYWNoKChpdG0pID0+IChpdG0uSXNFZGl0TW9kZSA9IGZhbHNlKSk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWROb2RlIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuTmFtZSA9PT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKHRoaXMucm9vdE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZShudWxsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVyemV1Z3QgZWluZW4gbmV1ZW4gTm9kZSBpbSBUcmVlXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB1bnRlciB3ZWxjaGVtIGVpbiBuZXVlciBOb2RlIGVyc3RlbGx0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIG5ld05vZGUobm9kZTogSUJyb3dzZXJOb2RlKSB7XHJcbiAgICBjb25zdCBpdGVtOiBJQnJvd3Nlck5vZGUgPSB7XHJcbiAgICAgIENoaWxkTm9kZXM6IFtdLFxyXG4gICAgICBGaWxlczogW10sXHJcbiAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxyXG4gICAgICBJc0V4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgTmFtZTogJycsXHJcbiAgICAgIFBhdGg6IG5vZGUuUGF0aCxcclxuICAgICAgSXNOZXdOb2RlOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBub2RlLkNoaWxkTm9kZXMucHVzaChpdGVtKTtcclxuICAgIHRoaXMuc2VsZWN0Tm9kZShpdGVtKTtcclxuICAgIHRoaXMuZWRpdE5vZGUoaXRlbSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0IEV2ZW50IGRlciBLb21wb25lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAuR2V0Tm9kZSh0aGlzLmFwaXVybCwgJycsIHRoaXMuYWxsb3dlZHR5cGVzKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IHtcclxuICAgICAgICAgIE5hbWU6IHJlc3VsdC5Ob2RlLk5hbWUsXHJcbiAgICAgICAgICBGaWxlczogcmVzdWx0Lk5vZGUuRmlsZXMsXHJcbiAgICAgICAgICBDaGlsZE5vZGVzOiByZXN1bHQuTm9kZS5DaGlsZE5vZGVzLFxyXG4gICAgICAgICAgSXNFeHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgSXNOZXdOb2RlOiBmYWxzZSxcclxuICAgICAgICAgIFBhdGg6ICcvJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB0aGlzLnJvb3ROb2RlO1xyXG5cclxuICAgICAgICAvLyBTZWxlY3RlZCBGaWxlIGVybmV1dCBzZXR6ZW4sIHdlbm4gUHJvcGVydHkgZ2VzZXR6dCB3dXJkZSBiZXZvciBEYXRlbiB2b20gU2VydmljZSBnZWxhZGVuIHd1cmRlbi5cclxuICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRmaWxlID0gdGhpcy5wcmVzZWxlY2VkZmlsZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0dWFsaXNpZXJ0IGRlbiBOb2RlXHJcbiAgICovXHJcbiAgcHVibGljIHJlZnJlc2hOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKCFub2RlLklzRXhwYW5kZWQpIHtcclxuICAgICAgdGhpcy5zd2l0Y2hFeHBhbmROb2RlKG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgLkdldE5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBub2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xyXG4gICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW5lIERhdGVpIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyB1bWJlbmFubnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gbmV3RmlsZW5hbWUgTmV1ZXIgRGF0ZWluYW1lXHJcbiAgICovXHJcbiAgcHVibGljIHJlbmFtZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlLCBuZXdGaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBmaWxlLklzRWRpdE1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIW5ld0ZpbGVuYW1lIHx8IG5ld0ZpbGVuYW1lID09PSBudWxsIHx8IG5ld0ZpbGVuYW1lLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAvLyBDYW5jZWwsIEludmFsaWQgRmlsZW5hbWVcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlLkZpbGVuYW1lICE9PSBuZXdGaWxlbmFtZSkge1xyXG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgLlJlbmFtZUZpbGUoXHJcbiAgICAgICAgICB0aGlzLmFwaXVybCxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLFxyXG4gICAgICAgICAgbmV3RmlsZW5hbWUsXHJcbiAgICAgICAgICB0aGlzLmFsbG93ZWR0eXBlc1xyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gTm9kZSB1bWJlbmFubnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgdW1iZW5hbm50IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIG5ld0ZvbGRlcm5hbWUgTmV1ZXIgT3JkbmVybmFtZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW5hbWVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSwgbmV3Rm9sZGVybmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBub2RlLklzRWRpdE1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIW5vZGUuSXNOZXdOb2RlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhbmV3Rm9sZGVybmFtZSB8fFxyXG4gICAgICAgIG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHxcclxuICAgICAgICBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBDYW5jZWwgUmVuYW1lLiBJbnZhbGlkIEZvbGRlcm5hbWVcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChub2RlLk5hbWUgIT09IG5ld0ZvbGRlcm5hbWUpIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuUmVuYW1lTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBuZXdGb2xkZXJuYW1lKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhbmV3Rm9sZGVybmFtZSB8fFxyXG4gICAgICAgIG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHxcclxuICAgICAgICBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNsZWFyTmV3Q2hpbGROb2Rlcyh0aGlzLnJvb3ROb2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5vZGUuTmFtZSA9IG5ld0ZvbGRlcm5hbWU7XHJcbiAgICAgIG5vZGUuSXNOZXdOb2RlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAuU2F2ZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgbmV3Rm9sZGVybmFtZSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xyXG4gICAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5Ob2RlLkZpbGVzO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gRmlsZSBzZWxla3RpZXJ0IHdpcmRcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgc2VsZWt0aWVydCB3aXJkXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKSB7XHJcbiAgICBpZiAoIWZpbGUuSXNFZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcy5mb3JFYWNoKChpdG0pID0+IChpdG0uSXNFZGl0TW9kZSA9IGZhbHNlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZS5QYXRoLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gJy8nICsgZmlsZS5GaWxlbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZUl0ZW0gPSBmaWxlO1xyXG4gICAgdGhpcy5maWxlLmVtaXQodGhpcy5zZWxlY3RlZEZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZW5uIGVpbiBOb2RlIHNlbGVrdGllcnQgd2lyZFxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBzZWxla3RpZXJ0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAoIW5vZGUuSXNFeHBhbmRlZCkge1xyXG4gICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIEVkaXQgTW9kZSBpbiBhbGwgTm9kZXNcclxuICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUobnVsbCk7XHJcblxyXG4gICAgaWYgKCFub2RlLkZpbGVzKSB7XHJcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAuR2V0RmlsZXModGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnByZXNlbGVjZWRmaWxlLnN1YnN0cmluZyhcclxuICAgICAgICAgICAgICB0aGlzLnByZXNlbGVjZWRmaWxlLmxhc3RJbmRleE9mKCcvJykgKyAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBub2RlLkZpbGVzLmZpbmQoKGl0bSkgPT4gaXRtLkZpbGVuYW1lID09PSBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBhbmQvQ29sbGFic2UgTWV0aG9kZSBmw7xyIE5vZGVzXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGdlw7ZmZm5ldCBvZGVyIGdlc2NobG9zc2VuIHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIHN3aXRjaEV4cGFuZE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAobm9kZS5Jc0V4cGFuZGVkKSB7XHJcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZGllIEF1ZmdlcnVmZW4gd2VyZGVuIG11c3MsIHdlbm4gZWluIFVwbG9hZCBiZWVuZGV0IGlzdC5cclxuICAgKiBAcGFyYW0gcGFyYW0gUGFyYW1ldGVyIGRlcyBob2NoZ2VsYWRlbmVuIEZpbGVzXHJcbiAgICovXHJcbiAgcHVibGljIHVwbG9hZENvbXBsZXRlKG5vZGU6IElCcm93c2VyTm9kZSwgdXBsb2FkSWRMaXN0OiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKHVwbG9hZElkTGlzdCAhPT0gbnVsbCkge1xyXG4gICAgICB1cGxvYWRJZExpc3QuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZHMuaW5kZXhPZihlbGVtZW50KSA8IDApIHtcclxuICAgICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaWQgPSB0aGlzLnVwbG9hZHMucG9wKCk7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgIC5TYXZlRmlsZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBpZCwgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZU1vdmVkKGlkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBBYnN0cmFrdGUgQ29uZmlybSBNZXRob2RlIHdlbGNoZSBpbXBsZW1lbnRpZXJ0IHdlcmRlbiBtdXNzLiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5lXHJcbiAgICogRGF0ZWkgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsLlxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgZsO8ciB3ZWxjaGVzIGVpbiBEZWxldGUgQ29uZmlybSBlaW5nZWZvcmRlcnQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgYWJzdHJhY3QgY29uZmlybURlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBBYnN0cmFrdGUgQ29uZmlybSBNZXRob2RlIHdlbGNoZSBpbXBsZW1lbnRpZXJ0IHdlcmRlbiBtdXNzLiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5cclxuICAgKiBPcmRuZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsLlxyXG4gICAqIEBwYXJhbSBmb2xkZXIgT3JkZXJuIGbDvHIgd2VsY2hlbiBlaW4gRGVsZXRlIENvbmZpcm0gZWluZ2Vmb3JkZXJ0IHdlcmRlbiBzb2xsLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhYnN0cmFjdCBjb25maXJtRGVsZXRlTm9kZShmb2xkZXI6IElCcm93c2VyTm9kZSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIE1ldGhvZGUgZGllIEF1ZmdlcnVmZW4gd2lyZCwgd2VubiBkYXMgSG9jaGdlbGFkZW5lIEZpbGUgYXVzIGRlbSBUZW1wIEZvbGRlciBpbiBkaWVcclxuICAgKiBTdHJ1a3R1ciB2ZXJzY2hvYmVuIHd1cmRlLlxyXG4gICAqIEBwYXJhbSB1cGxvYWRpZCBJRCBkZXMgVXBsb2Fkc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBhYnN0cmFjdCB1cGxvYWRlZEZpbGVNb3ZlZCh1cGxvYWRpZDogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBSZWt1cnNpdmUgTWV0aG9kZSB3ZWxjaGUgYmVpbSBOb2RlIHVuZCBhbGwgc2VpbmVuIENoaWxkcyBuZXVlIE5vZGVzIGVudGZlcm50XHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBiZWkgd2VsY2hlbSBhbGxlIG5ldWVuIE5vZGVzIGVudGZlcm50IHdlcmRlbiBzb2xsLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xlYXJOZXdDaGlsZE5vZGVzKG5vZGU6IElCcm93c2VyTm9kZSkge1xyXG4gICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xyXG4gICAgICBpZiAoaXRtLklzTmV3Tm9kZSkge1xyXG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5zcGxpY2Uobm9kZS5DaGlsZE5vZGVzLmluZGV4T2YoaXRtKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKGl0bSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZWxjaGUgZGVuIFBmYWQgZsO8ciBlaW5lbiBOb2RlIGVyemV1Z3RcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGbDvHIgd2VsY2hlbiBkZXIgUGZhZCBlcnpldWd0IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIHBhcmVudFBhdGggw5xiZXJnZW9yZG5ldGVyIFBmYWRcclxuICAgKi9cclxuICBwcml2YXRlIGZpbGxQYXRoKG5vZGU6IElCcm93c2VyTm9kZSwgcGFyZW50UGF0aDogc3RyaW5nKSB7XHJcbiAgICBub2RlLlBhdGggPSBwYXJlbnRQYXRoICsgJy8nICsgbm9kZS5OYW1lO1xyXG4gICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xyXG4gICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgbm9kZS5QYXRoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VjaHQgZGVuIMO8YmVyZ2VvcmRuZXRlbiBOb2RlIGltIFRyZWVcclxuICAgKiBAcGFyYW0gbm9kZSBBa3R1ZWxsZXIgTm9kZVxyXG4gICAqIEBwYXJhbSBub2RlVG9GaW5kIE5vZGUgd2VsY2hlciBnZWZ1bmRlbiB3ZXJkZW4gc29sbFxyXG4gICAqIEByZXR1cm5zIE5vZGUgd2VubiBlciBnZWZ1bmRlbiB3dXJkZSwgYW5zb25zdGVuIHdpcmQgTlVMTCB6dXLDvGNrZ2VnZWJlblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmluZFBhcmVudE5vZGUoXHJcbiAgICBub2RlOiBJQnJvd3Nlck5vZGUsXHJcbiAgICBub2RlVG9GaW5kOiBJQnJvd3Nlck5vZGVcclxuICApOiBJQnJvd3Nlck5vZGUge1xyXG4gICAgaWYgKG5vZGUuQ2hpbGROb2Rlcy5pbmRleE9mKG5vZGVUb0ZpbmQpID49IDApIHtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50Tm9kZShjaGlsZCwgbm9kZVRvRmluZCk7XHJcbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWNodCBlaW5lbiBOb2RlIGdlbS4gZWluZW0gVVJMIFBmYWRcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdlbGNoZW0gZ2VzdWNodCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBwYXRoIFBmYWQgbmFjaCB3ZWxjaGVtIGdlc3VjaHQgd2lyZFxyXG4gICAqIEByZXR1cm5zIE5vZGUgd2VsY2hlciB6dW0gZ2VzdWNodGVuIFBmYWQgcGFzc3QuIFdlbm4ga2VpbiBOb2RlIGdlZnVuZGVuIHdpcmQsIHdpcmQgTlVMTCB6dXLDvGNrZ2VnZWJlblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkTm9kZUJ5UGF0aChcclxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcclxuICAgIHBhdGg6IHN0cmluZ1xyXG4gICk6IElCcm93c2VyTm9kZSB7XHJcbiAgICAvLyBDYW5jZWwgd2VubiBQZmFkIG5pY2h0IGRlZmluaWVydFxyXG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCB8fCBwYXRoID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBmYWQgaW4gQXJyYXkgc3BsaXR0ZW4gdW5kIFJvb3QgRm9sZGVybmFtZSBzZXR6ZW5cclxuICAgIGNvbnN0IHBhdGhBcnJheSA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgIHBhdGhBcnJheVswXSA9IHRoaXMucm9vdE5vZGUuTmFtZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWROb2RlQnlQYXRoQXJyYXkobm9kZSwgcGF0aEFycmF5LCAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Y2h0IGVpbmVuIE5vZGUgZ2VtLiBlaW5lbSBBcnJheSB2b24gTm9kZSBOYW1lblxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgaW4gd2VsY2hlbSBnZXN1Y2h0IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIHBhdGggQXJyYXkgdm9uIE5vZGUgTmFtZW4sIHdlbGNoZSBkaWUgSGlyYXJjaHkgZGVzIFBmYWRlcyBhYmJpbGRlblxyXG4gICAqIEBwYXJhbSBpbmRleCBBa3R1ZWxsZXIgSW5kZXggaW0gUEFUSCBBcnJheVxyXG4gICAqIEByZXR1cm5zIE5vZGUgd2VubiBlaW5lciBnZWZ1bmRlbiB3dXJkZSwgYW5zb25zdGVuIE5VTExcclxuICAgKi9cclxuICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShcclxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcclxuICAgIHBhdGg6IHN0cmluZ1tdLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICk6IElCcm93c2VyTm9kZSB7XHJcbiAgICAvLyBDaGVjayBvYiBPcmRuZXIga29ycmVrdC4gTGV0emVyIE9yZG5lciB6dXLDvGNrZ2ViZW4uIFBhdGggTGFzdCBJbmRleCBpc3QgZGVyIEZpbGVuYW1lXHJcbiAgICBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSAmJiBwYXRoLmxlbmd0aCAtIDIgPT09IGluZGV4KSB7XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSBlbHNlIGlmIChub2RlLk5hbWUgPT09IHBhdGhbaW5kZXhdKSB7XHJcbiAgICAgIC8vIEV4cGFuZCBOb2RlXHJcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBub2RlLkNoaWxkTm9kZXMpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShpdGVtLCBwYXRoLCBpbmRleCArIDEpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWt1cnNpdmUgTWV0aG9kZSB3ZWxjaGUgYmVpbSBOb2RlIHVuZCBhbGwgc2VpbmVuIENoaWxkcyBkZW4gRWRpdCBNb2RlIGJlZW5kZXQuXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBiZWkgd2VsY2hlbSBkZXIgRWRpdCBNb2RlIGJlZW5kZXQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0Tm9kZUVkaXRNb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZSh0aGlzLnJvb3ROb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5vZGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKG5vZGUuQ2hpbGROb2Rlcykge1xyXG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHRoaXMucmVzZXROb2RlRWRpdE1vZGUoaXRtKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGRlbiBQZmFkIGluIGFsbGVuIE5vZGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRQYXRoVG9BbGxOb2RlcygpIHtcclxuICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcclxuICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxufVxyXG4iXX0=
145
+ */setPathToAllNodes(){cov_2non7o6v3i().f[50]++;cov_2non7o6v3i().s[159]++;this.rootNode.ChildNodes.forEach(itm=>{cov_2non7o6v3i().f[51]++;cov_2non7o6v3i().s[160]++;this.fillPath(itm,'');});}static{cov_2non7o6v3i().s[161]++;this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacFileBrowserCommon,deps:[{token:i1.HttpClient},{token:i0.Injector}],target:i0.ɵɵFactoryTarget.Directive});}static{cov_2non7o6v3i().s[162]++;this.ɵdir=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"16.2.12",type:SacFileBrowserCommon,inputs:{allowedtypes:"allowedtypes",allowfiledelete:"allowfiledelete",allowfilerename:"allowfilerename",allowfileupload:"allowfileupload",allowfoldercreate:"allowfoldercreate",allowfolderdelete:"allowfolderdelete",allowfolderrename:"allowfolderrename",apiurl:"apiurl",selectedfile:"selectedfile"},outputs:{file:"file"},host:{listeners:{"document:click":"exitEditMode($event.target)"}},ngImport:i0});}}export{SacFileBrowserCommon};cov_2non7o6v3i().s[163]++;i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacFileBrowserCommon,decorators:[{type:Directive}],ctorParameters:function(){cov_2non7o6v3i().f[52]++;cov_2non7o6v3i().s[164]++;return[{type:i1.HttpClient},{type:i0.Injector}];},propDecorators:{allowedtypes:[{type:Input}],allowfiledelete:[{type:Input}],allowfilerename:[{type:Input}],allowfileupload:[{type:Input}],allowfoldercreate:[{type:Input}],allowfolderdelete:[{type:Input}],allowfolderrename:[{type:Input}],apiurl:[{type:Input}],file:[{type:Output}],selectedfile:[{type:Input}],exitEditMode:[{type:HostListener,args:['document:click',['$event.target']]}]}});//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFFWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsOEJBQThCLEdBQy9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qiw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7O0FBTXhGOztHQUVHO0FBQ0gsTUFDc0Isb0JBQW9CO0lBb0d4Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUFZLFVBQXNCLEVBQUUsUUFBa0I7UUFsR3REOztXQUVHO1FBQ0ssbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBRTdDOzs7V0FHRztRQUVJLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQ2pDOztXQUVHO1FBRUksb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkM7O1dBRUc7UUFFSSxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUN2Qzs7V0FFRztRQUVJLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ3ZDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ3pDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ3pDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBTXpDOztXQUVHO1FBRUksU0FBSSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBTS9EOztX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QUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBMXFCbUIsb0JBQW9CO21HQUFwQixvQkFBb0I7O1NBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQUR6QyxTQUFTO3dIQXNCRCxZQUFZO3NCQURsQixLQUFLO2dCQU1DLGVBQWU7c0JBRHJCLEtBQUs7Z0JBTUMsZUFBZTtzQkFEckIsS0FBSztnQkFNQyxlQUFlO3NCQURyQixLQUFLO2dCQU1DLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFNQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBTUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQU1DLE1BQU07c0JBRFosS0FBSztnQkFNQyxJQUFJO3NCQURWLE1BQU07Z0JBNkVJLFlBQVk7c0JBRHRCLEtBQUs7Z0JBeUZDLFlBQVk7c0JBSmxCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSVNhY0ZpbGVCcm93c2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0ZpbGVCcm93c2VyU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0ljb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNMb2NhbGlzYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjVmFsaWRhdGlvbktleVNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNBQ0lDT05fU0VSVklDRSxcclxuICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcclxuICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdEljb25TZXJ2aWNlLFxyXG4gIFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSxcclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgU0FDRklMRUJST1dTRVJfU0VSVklDRSxcclxuICBTYWNEZWZhdWx0RmlsZUJyb3dzZXJTZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1maWxlYnJvd3Nlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYWMtbG9jYWxpc2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQnJvd3NlckZpbGUgfSBmcm9tICcuL21vZGVscy9icm93c2VyZmlsZSc7XHJcbmltcG9ydCB7IElCcm93c2VyRmlsZVJlc3BvbnNlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3NlcmZpbGVyZXNwb25zZSc7XHJcbmltcG9ydCB7IElCcm93c2VyTm9kZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJub2RlJztcclxuaW1wb3J0IHsgSUJyb3dzZXJOb2RlUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9icm93c2Vybm9kZXJlc3BvbnNlJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIENvbXBvbmVudCBmw7xyIEZpbGUgQnJvd3NlclxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNGaWxlQnJvd3NlckNvbW1vbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgZsO8ciBGaWxlIEJyb3dzZXIgWnVncmlmZiAoQmFja2VuZClcclxuICAgKi9cclxuICBwcml2YXRlIGJyb3dzZXJTZXJ2aWNlOiBJU2FjRmlsZUJyb3dzZXJTZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIEljb24gc2VydmljZSB0byByZWNlaXZlIGljb24gY2xhc3NlcyBmb3IgdWlcclxuICAgKi9cclxuICBwcml2YXRlIGljb25TZXJ2aWNlOiBJU2FjSWNvblNlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogRmlsZSB3ZWxjaGVzIGJlaW0gc3RhcnRlbiBkZXMgQnJvd3NlcnMgYmVyZWl0cyBzZWxla3RpZXJ0IGlzdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJlc2VsZWNlZGZpbGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBFcmxhdWJ0ZSBEYXRlaWVyd2VpdGVydW5nZW4gZsO8ciBGaWxlYXVzd2FobCB1bmQgVXBsb2FkLiBEYXRlaWVyd2VpdGVydW5nIG1pdCBQdW5rdCB1bmRcclxuICAgKiBnZXRyZW5udCBkdXJjaCBLb21tYSBmw7xyIG1laHIgYWxzIGVpbmUgRXJ3ZWl0ZXJ1bmcgKEV4YW1wbGU6IFwiLmpwZywuZ2lmXCIpXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dlZHR5cGVzOiBzdHJpbmcgPSAnJztcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRhcyBsw7ZzY2hlbiBlaW5lciBEYXRlaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93ZmlsZWRlbGV0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkYXMgdW1iZW5lbm5lbiBlaW5lciBEYXRlaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93ZmlsZXJlbmFtZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkZW4gVXBsb2FkIHZvbiBEYXRlaWVuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmaWxldXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRhcyBlcnN0ZWxsZW4gZWluZXMgbmV1ZW4gT3JkbmVyc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93Zm9sZGVyY3JlYXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRhcyBsw7ZzY2hlbiBlaW5lcyBPcmRuZXJzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmb2xkZXJkZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIFVtYmVuZW5uZW4gZWluZXMgT3JkbmVyc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93Zm9sZGVycmVuYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBVUkwgZsO8ciBCYWNrZW5kIEFQSVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFwaXVybDogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIE91dHB1dCBFbWl0dGVyIHdlbm4gRmlsZSBzZWxla3RpZXJ0IHdpcmQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGZpbGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgZsO8ciBFcnJvciBMb2NhbGlzYXRpb25cclxuICAgKi9cclxuICBwdWJsaWMgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcclxuICAvKipcclxuICAgKiBSb290IE5vZGUgSXRlbSBmw7xyIFRyZWVcclxuICAgKi9cclxuICBwdWJsaWMgcm9vdE5vZGU6IElCcm93c2VyTm9kZSA9IHtcclxuICAgIE5hbWU6ICcnLFxyXG4gICAgQ2hpbGROb2RlczogW10sXHJcbiAgICBGaWxlczogW10sXHJcbiAgICBJc0V4cGFuZGVkOiB0cnVlLFxyXG4gICAgSXNFZGl0TW9kZTogZmFsc2UsXHJcbiAgICBJc05ld05vZGU6IGZhbHNlLFxyXG4gICAgUGF0aDogJycsXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBTZWxlY3RlZCBGaWxlIE5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRGaWxlOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgRmlsZSBJdGVtXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkRmlsZUl0ZW06IElCcm93c2VyRmlsZSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgTm9kZSBJdGVtXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkTm9kZTogSUJyb3dzZXJOb2RlID0gbnVsbDtcclxuICAvKipcclxuICAgKiBMaXN0ZSB2b24gVXBsb2Fkc1xyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGxvYWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgdG8gcmVjZWl2ZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1lc3NhZ2Uga2V5cyBhbmQgdGV4dHNcclxuICAgKi9cclxuICBwdWJsaWMgdmFsaWRhdGlvbktleVNlcnZpY2U6IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8qKlxyXG4gICAqIEtvbnN0cnVrdG9yXHJcbiAgICogQHBhcmFtIGh0dHBjbGllbnQgQW5ndWxhciBIVFRQIENsaWVudFxyXG4gICAqIEBwYXJhbSBpbmplY3RvciBTZXJ2aWNlIEluamVjdG9yXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaHR0cGNsaWVudDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdEZpbGVCcm93c2VyU2VydmljZShodHRwY2xpZW50KVxyXG4gICAgKTtcclxuICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSgpXHJcbiAgICApO1xyXG4gICAgdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UodGhpcy52YWxpZGF0aW9uS2V5U2VydmljZSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDSUNPTl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdEljb25TZXJ2aWNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGRlbiBTZWxlY2VkIE5vZGUgw7xiZXIgZGVuIFBmYWRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRmaWxlKHY6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkbm9kZSA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aCh0aGlzLnJvb3ROb2RlLCB2KTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRub2RlICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Tm9kZShzZWxlY3RlZG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJlc2VsZWNlZGZpbGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIGRlbGV0ZSBpY29uXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkRlbGV0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudERlbGV0ZUljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZWRpdCBpY29uXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkVkaXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRFZGl0SWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGZvciBmb2xkZXJzIGluIHRyZWUgdGhlcmUgYXJlIGNvbGxhYnNlZFxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJDb2xsYWJzZWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJDbG9zZWRJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIGZvbGRlcnMgd2l0aG91dCBzdWJmb2xkZXJzXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlckVtcHR5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyRW1wdHlJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gZm9yIG5ldyBmb2xkZXJzIGFjdGlvblxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJOZXcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJOZXdJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgZXhwYW5kZWRcclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRm9sZGVyT3BlbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlck9wZW5JY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIHJlZnJlc2ggaWNvblxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25SZWZyZXNoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50UmVmcmVzaEljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZsO8ciBTZWxlY3RlZCBGaWxlLiBJc3QgYW4gSW5wdXQgUHJvcGVydHkgZ2VidW5kZW5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkZmlsZSgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdEZpbGUgJiYgdGhpcy5zZWxlY3RGaWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogSG9zdExpc3RlbmVyIHdlbGNoZXIgZGVuIEVkaXQgTW9kZSBiZWkgYWxsZW4gRmlsZXMgdW5kIE5vZGVzIGJlZW5kZXQuXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcclxuICAvKipcclxuICAgKiBDbGljayBFdmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBleGl0RWRpdE1vZGUodGFyZ2V0RWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzLmZvckVhY2goKGl0bSkgPT4gKGl0bS5Jc0VkaXRNb2RlID0gZmFsc2UpKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5zZWxlY3RlZE5vZGUgfHxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5OYW1lID09PSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuTmFtZS5sZW5ndGggPT09IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhck5ld0NoaWxkTm9kZXModGhpcy5yb290Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTMO2c2NodCBlaW4gRmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyBnZWzDtnNjaHQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgZGVsZXRlRmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybURlbGV0ZUZpbGUoZmlsZSkuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XHJcbiAgICAgIGlmIChjb25maXJtKSB7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgICAgLkRlbGV0ZUZpbGUoXHJcbiAgICAgICAgICAgIHRoaXMuYXBpdXJsLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZSxcclxuICAgICAgICAgICAgdGhpcy5hbGxvd2VkdHlwZXNcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMw7ZzY2h0IGVpbmVuIE5vZGVcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGRlbGV0ZU5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1EZWxldGVOb2RlKG5vZGUpLnN1YnNjcmliZSgoY29uZmlybSkgPT4ge1xyXG4gICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAgIC5EZWxldGVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZpbmRQYXJlbnROb2RlKHRoaXMucm9vdE5vZGUsIG5vZGUpO1xyXG4gICAgICAgICAgICBwYXJlbnROb2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb290Tm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCAnJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKHBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0enQgZWluIEZpbGUgaW4gZGVuIEVkaXQgTW9kZVxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyBpbiBkZW4gRWRpdCBNb2RlIGdlc2V0enQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgZWRpdEZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XHJcbiAgICBmaWxlLklzRWRpdE1vZGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0enQgZWluZW4gTm9kZSBpbiBkZW4gRWRpdCBNb2RlXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGJlYXJiZWl0ZXQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgZWRpdE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBub2RlLklzRWRpdE1vZGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXJ6ZXVndCBlaW5lbiBuZXVlbiBOb2RlIGltIFRyZWVcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHVudGVyIHdlbGNoZW0gZWluIG5ldWVyIE5vZGUgZXJzdGVsbHQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgbmV3Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpIHtcclxuICAgIGNvbnN0IGl0ZW06IElCcm93c2VyTm9kZSA9IHtcclxuICAgICAgQ2hpbGROb2RlczogW10sXHJcbiAgICAgIEZpbGVzOiBbXSxcclxuICAgICAgSXNFZGl0TW9kZTogZmFsc2UsXHJcbiAgICAgIElzRXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICBOYW1lOiAnJyxcclxuICAgICAgUGF0aDogbm9kZS5QYXRoLFxyXG4gICAgICBJc05ld05vZGU6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIG5vZGUuQ2hpbGROb2Rlcy5wdXNoKGl0ZW0pO1xyXG4gICAgdGhpcy5zZWxlY3ROb2RlKGl0ZW0pO1xyXG4gICAgdGhpcy5lZGl0Tm9kZShpdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXQgRXZlbnQgZGVyIEtvbXBvbmVudGVcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgIC5HZXROb2RlKHRoaXMuYXBpdXJsLCAnJywgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlID0ge1xyXG4gICAgICAgICAgTmFtZTogcmVzdWx0Lk5vZGUuTmFtZSxcclxuICAgICAgICAgIEZpbGVzOiByZXN1bHQuTm9kZS5GaWxlcyxcclxuICAgICAgICAgIENoaWxkTm9kZXM6IHJlc3VsdC5Ob2RlLkNoaWxkTm9kZXMsXHJcbiAgICAgICAgICBJc0V4cGFuZGVkOiB0cnVlLFxyXG4gICAgICAgICAgSXNFZGl0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICBJc05ld05vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgUGF0aDogJy8nLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMucm9vdE5vZGU7XHJcblxyXG4gICAgICAgIC8vIFNlbGVjdGVkIEZpbGUgZXJuZXV0IHNldHplbiwgd2VubiBQcm9wZXJ0eSBnZXNldHp0IHd1cmRlIGJldm9yIERhdGVuIHZvbSBTZXJ2aWNlIGdlbGFkZW4gd3VyZGVuLlxyXG4gICAgICAgIGlmICh0aGlzLnByZXNlbGVjZWRmaWxlICE9PSBudWxsICYmIHRoaXMucHJlc2VsZWNlZGZpbGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZGZpbGUgPSB0aGlzLnByZXNlbGVjZWRmaWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBa3R1YWxpc2llcnQgZGVuIE5vZGVcclxuICAgKi9cclxuICBwdWJsaWMgcmVmcmVzaE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAoIW5vZGUuSXNFeHBhbmRlZCkge1xyXG4gICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAuR2V0Tm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCB0aGlzLmFsbG93ZWR0eXBlcylcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIG5vZGUuQ2hpbGROb2RlcyA9IHJlc3VsdC5Ob2RlLkNoaWxkTm9kZXM7XHJcbiAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5Ob2RlLkZpbGVzO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZW5uIGVpbmUgRGF0ZWkgdW1iZW5hbm50IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBuZXdGaWxlbmFtZSBOZXVlciBEYXRlaW5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgcmVuYW1lRmlsZShmaWxlOiBJQnJvd3NlckZpbGUsIG5ld0ZpbGVuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGZpbGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghbmV3RmlsZW5hbWUgfHwgbmV3RmlsZW5hbWUgPT09IG51bGwgfHwgbmV3RmlsZW5hbWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIC8vIENhbmNlbCwgSW52YWxpZCBGaWxlbmFtZVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbGUuRmlsZW5hbWUgIT09IG5ld0ZpbGVuYW1lKSB7XHJcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAuUmVuYW1lRmlsZShcclxuICAgICAgICAgIHRoaXMuYXBpdXJsLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWUsXHJcbiAgICAgICAgICBuZXdGaWxlbmFtZSxcclxuICAgICAgICAgIHRoaXMuYWxsb3dlZHR5cGVzXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZW5uIGVpbiBOb2RlIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciB1bWJlbmFubnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gbmV3Rm9sZGVybmFtZSBOZXVlciBPcmRuZXJuYW1lXHJcbiAgICovXHJcbiAgcHVibGljIHJlbmFtZU5vZGUobm9kZTogSUJyb3dzZXJOb2RlLCBuZXdGb2xkZXJuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIG5vZGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghbm9kZS5Jc05ld05vZGUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICFuZXdGb2xkZXJuYW1lIHx8XHJcbiAgICAgICAgbmV3Rm9sZGVybmFtZSA9PT0gbnVsbCB8fFxyXG4gICAgICAgIG5ld0ZvbGRlcm5hbWUubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIENhbmNlbCBSZW5hbWUuIEludmFsaWQgRm9sZGVybmFtZVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5vZGUuTmFtZSAhPT0gbmV3Rm9sZGVybmFtZSkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAgIC5SZW5hbWVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIG5vZGUuTmFtZSA9IHJlc3VsdC5Ob2RlLk5hbWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICFuZXdGb2xkZXJuYW1lIHx8XHJcbiAgICAgICAgbmV3Rm9sZGVybmFtZSA9PT0gbnVsbCB8fFxyXG4gICAgICAgIG5ld0ZvbGRlcm5hbWUubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKHRoaXMucm9vdE5vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbm9kZS5OYW1lID0gbmV3Rm9sZGVybmFtZTtcclxuICAgICAgbm9kZS5Jc05ld05vZGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgIC5TYXZlTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBuZXdGb2xkZXJuYW1lKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIG5vZGUuTmFtZSA9IHJlc3VsdC5Ob2RlLk5hbWU7XHJcbiAgICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0Lk5vZGUuRmlsZXM7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZW5uIGVpbiBGaWxlIHNlbGVrdGllcnQgd2lyZFxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyBzZWxla3RpZXJ0IHdpcmRcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0RmlsZShmaWxlOiBJQnJvd3NlckZpbGUpIHtcclxuICAgIGlmICghZmlsZS5Jc0VkaXRNb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzLmZvckVhY2goKGl0bSkgPT4gKGl0bS5Jc0VkaXRNb2RlID0gZmFsc2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWROb2RlLlBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSAnLycgKyBmaWxlLkZpbGVuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlSXRlbSA9IGZpbGU7XHJcbiAgICB0aGlzLmZpbGUuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdlbm4gZWluIE5vZGUgc2VsZWt0aWVydCB3aXJkXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIHNlbGVrdGllcnQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcclxuICAgIGlmICghbm9kZS5Jc0V4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuc3dpdGNoRXhwYW5kTm9kZShub2RlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNldCB0aGUgRWRpdCBNb2RlIGluIGFsbCBOb2Rlc1xyXG4gICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZShudWxsKTtcclxuXHJcbiAgICBpZiAoIW5vZGUuRmlsZXMpIHtcclxuICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgIC5HZXRGaWxlcyh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCB0aGlzLmFsbG93ZWR0eXBlcylcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnByZXNlbGVjZWRmaWxlICE9PSBudWxsICYmIHRoaXMucHJlc2VsZWNlZGZpbGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucHJlc2VsZWNlZGZpbGUuc3Vic3RyaW5nKFxyXG4gICAgICAgICAgICAgIHRoaXMucHJlc2VsZWNlZGZpbGUubGFzdEluZGV4T2YoJy8nKSArIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IG5vZGUuRmlsZXMuZmluZCgoaXRtKSA9PiBpdG0uRmlsZW5hbWUgPT09IGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZpbGUoZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGFuZC9Db2xsYWJzZSBNZXRob2RlIGbDvHIgTm9kZXNcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgZ2XDtmZmbmV0IG9kZXIgZ2VzY2hsb3NzZW4gd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgc3dpdGNoRXhwYW5kTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcclxuICAgIGlmIChub2RlLklzRXhwYW5kZWQpIHtcclxuICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBub2RlLklzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBkaWUgQXVmZ2VydWZlbiB3ZXJkZW4gbXVzcywgd2VubiBlaW4gVXBsb2FkIGJlZW5kZXQgaXN0LlxyXG4gICAqIEBwYXJhbSBwYXJhbSBQYXJhbWV0ZXIgZGVzIGhvY2hnZWxhZGVuZW4gRmlsZXNcclxuICAgKi9cclxuICBwdWJsaWMgdXBsb2FkQ29tcGxldGUobm9kZTogSUJyb3dzZXJOb2RlLCB1cGxvYWRJZExpc3Q6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodXBsb2FkSWRMaXN0ICE9PSBudWxsKSB7XHJcbiAgICAgIHVwbG9hZElkTGlzdC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMudXBsb2Fkcy5pbmRleE9mKGVsZW1lbnQpIDwgMCkge1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpZCA9IHRoaXMudXBsb2Fkcy5wb3AoKTtcclxuICAgIGlmIChpZCkge1xyXG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgLlNhdmVGaWxlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIGlkLCB0aGlzLmFsbG93ZWR0eXBlcylcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlTW92ZWQoaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIEFic3RyYWt0ZSBDb25maXJtIE1ldGhvZGUgd2VsY2hlIGltcGxlbWVudGllcnQgd2VyZGVuIG11c3MuIE1ldGhvZGUgd2lyZCBhdWZnZXJ1ZmVuLCB3ZW5uIGVpbmVcclxuICAgKiBEYXRlaSBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuXHJcbiAgICogQHBhcmFtIGZpbGUgRmlsZSBmw7xyIHdlbGNoZXMgZWluIERlbGV0ZSBDb25maXJtIGVpbmdlZm9yZGVydCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhYnN0cmFjdCBjb25maXJtRGVsZXRlRmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIC8qKlxyXG4gICAqIEFic3RyYWt0ZSBDb25maXJtIE1ldGhvZGUgd2VsY2hlIGltcGxlbWVudGllcnQgd2VyZGVuIG11c3MuIE1ldGhvZGUgd2lyZCBhdWZnZXJ1ZmVuLCB3ZW5uIGVpblxyXG4gICAqIE9yZG5lciBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuXHJcbiAgICogQHBhcmFtIGZvbGRlciBPcmRlcm4gZsO8ciB3ZWxjaGVuIGVpbiBEZWxldGUgQ29uZmlybSBlaW5nZWZvcmRlcnQgd2VyZGVuIHNvbGwuXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IGNvbmZpcm1EZWxldGVOb2RlKGZvbGRlcjogSUJyb3dzZXJOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBBYnN0cmFrdGUgTWV0aG9kZSBkaWUgQXVmZ2VydWZlbiB3aXJkLCB3ZW5uIGRhcyBIb2NoZ2VsYWRlbmUgRmlsZSBhdXMgZGVtIFRlbXAgRm9sZGVyIGluIGRpZVxyXG4gICAqIFN0cnVrdHVyIHZlcnNjaG9iZW4gd3VyZGUuXHJcbiAgICogQHBhcmFtIHVwbG9hZGlkIElEIGRlcyBVcGxvYWRzXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IHVwbG9hZGVkRmlsZU1vdmVkKHVwbG9hZGlkOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIFJla3Vyc2l2ZSBNZXRob2RlIHdlbGNoZSBiZWltIE5vZGUgdW5kIGFsbCBzZWluZW4gQ2hpbGRzIG5ldWUgTm9kZXMgZW50ZmVybnRcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGJlaSB3ZWxjaGVtIGFsbGUgbmV1ZW4gTm9kZXMgZW50ZmVybnQgd2VyZGVuIHNvbGwuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbGVhck5ld0NoaWxkTm9kZXMobm9kZTogSUJyb3dzZXJOb2RlKSB7XHJcbiAgICBub2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB7XHJcbiAgICAgIGlmIChpdG0uSXNOZXdOb2RlKSB7XHJcbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzLnNwbGljZShub2RlLkNoaWxkTm9kZXMuaW5kZXhPZihpdG0pKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5jbGVhck5ld0NoaWxkTm9kZXMoaXRtKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdlbGNoZSBkZW4gUGZhZCBmw7xyIGVpbmVuIE5vZGUgZXJ6ZXVndFxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgZsO8ciB3ZWxjaGVuIGRlciBQZmFkIGVyemV1Z3Qgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gcGFyZW50UGF0aCDDnGJlcmdlb3JkbmV0ZXIgUGZhZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsbFBhdGgobm9kZTogSUJyb3dzZXJOb2RlLCBwYXJlbnRQYXRoOiBzdHJpbmcpIHtcclxuICAgIG5vZGUuUGF0aCA9IHBhcmVudFBhdGggKyAnLycgKyBub2RlLk5hbWU7XHJcbiAgICBub2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCBub2RlLlBhdGgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWNodCBkZW4gw7xiZXJnZW9yZG5ldGVuIE5vZGUgaW0gVHJlZVxyXG4gICAqIEBwYXJhbSBub2RlIEFrdHVlbGxlciBOb2RlXHJcbiAgICogQHBhcmFtIG5vZGVUb0ZpbmQgTm9kZSB3ZWxjaGVyIGdlZnVuZGVuIHdlcmRlbiBzb2xsXHJcbiAgICogQHJldHVybnMgTm9kZSB3ZW5uIGVyIGdlZnVuZGVuIHd1cmRlLCBhbnNvbnN0ZW4gd2lyZCBOVUxMIHp1csO8Y2tnZWdlYmVuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaW5kUGFyZW50Tm9kZShcclxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcclxuICAgIG5vZGVUb0ZpbmQ6IElCcm93c2VyTm9kZVxyXG4gICk6IElCcm93c2VyTm9kZSB7XHJcbiAgICBpZiAobm9kZS5DaGlsZE5vZGVzLmluZGV4T2Yobm9kZVRvRmluZCkgPj0gMCkge1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuQ2hpbGROb2Rlcykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRQYXJlbnROb2RlKGNoaWxkLCBub2RlVG9GaW5kKTtcclxuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Y2h0IGVpbmVuIE5vZGUgZ2VtLiBlaW5lbSBVUkwgUGZhZFxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgaW4gd2VsY2hlbSBnZXN1Y2h0IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIHBhdGggUGZhZCBuYWNoIHdlbGNoZW0gZ2VzdWNodCB3aXJkXHJcbiAgICogQHJldHVybnMgTm9kZSB3ZWxjaGVyIHp1bSBnZXN1Y2h0ZW4gUGZhZCBwYXNzdC4gV2VubiBrZWluIE5vZGUgZ2VmdW5kZW4gd2lyZCwgd2lyZCBOVUxMIHp1csO8Y2tnZWdlYmVuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaW5kU2VsZWN0ZWROb2RlQnlQYXRoKFxyXG4gICAgbm9kZTogSUJyb3dzZXJOb2RlLFxyXG4gICAgcGF0aDogc3RyaW5nXHJcbiAgKTogSUJyb3dzZXJOb2RlIHtcclxuICAgIC8vIENhbmNlbCB3ZW5uIFBmYWQgbmljaHQgZGVmaW5pZXJ0XHJcbiAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkIHx8IHBhdGggPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGZhZCBpbiBBcnJheSBzcGxpdHRlbiB1bmQgUm9vdCBGb2xkZXJuYW1lIHNldHplblxyXG4gICAgY29uc3QgcGF0aEFycmF5ID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgcGF0aEFycmF5WzBdID0gdGhpcy5yb290Tm9kZS5OYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShub2RlLCBwYXRoQXJyYXksIDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VjaHQgZWluZW4gTm9kZSBnZW0uIGVpbmVtIEFycmF5IHZvbiBOb2RlIE5hbWVuXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3ZWxjaGVtIGdlc3VjaHQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gcGF0aCBBcnJheSB2b24gTm9kZSBOYW1lbiwgd2VsY2hlIGRpZSBIaXJhcmNoeSBkZXMgUGZhZGVzIGFiYmlsZGVuXHJcbiAgICogQHBhcmFtIGluZGV4IEFrdHVlbGxlciBJbmRleCBpbSBQQVRIIEFycmF5XHJcbiAgICogQHJldHVybnMgTm9kZSB3ZW5uIGVpbmVyIGdlZnVuZGVuIHd1cmRlLCBhbnNvbnN0ZW4gTlVMTFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KFxyXG4gICAgbm9kZTogSUJyb3dzZXJOb2RlLFxyXG4gICAgcGF0aDogc3RyaW5nW10sXHJcbiAgICBpbmRleDogbnVtYmVyXHJcbiAgKTogSUJyb3dzZXJOb2RlIHtcclxuICAgIC8vIENoZWNrIG9iIE9yZG5lciBrb3JyZWt0LiBMZXR6ZXIgT3JkbmVyIHp1csO8Y2tnZWJlbi4gUGF0aCBMYXN0IEluZGV4IGlzdCBkZXIgRmlsZW5hbWVcclxuICAgIGlmIChub2RlLk5hbWUgPT09IHBhdGhbaW5kZXhdICYmIHBhdGgubGVuZ3RoIC0gMiA9PT0gaW5kZXgpIHtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9IGVsc2UgaWYgKG5vZGUuTmFtZSA9PT0gcGF0aFtpbmRleF0pIHtcclxuICAgICAgLy8gRXhwYW5kIE5vZGVcclxuICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUuQ2hpbGROb2Rlcykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KGl0ZW0sIHBhdGgsIGluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJla3Vyc2l2ZSBNZXRob2RlIHdlbGNoZSBiZWltIE5vZGUgdW5kIGFsbCBzZWluZW4gQ2hpbGRzIGRlbiBFZGl0IE1vZGUgYmVlbmRldC5cclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGJlaSB3ZWxjaGVtIGRlciBFZGl0IE1vZGUgYmVlbmRldCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzZXROb2RlRWRpdE1vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKHRoaXMucm9vdE5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbm9kZS5Jc0VkaXRNb2RlID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAobm9kZS5DaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5yZXNldE5vZGVFZGl0TW9kZShpdG0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0enQgZGVuIFBmYWQgaW4gYWxsZW4gTm9kZXNcclxuICAgKi9cclxuICBwcml2YXRlIHNldFBhdGhUb0FsbE5vZGVzKCkge1xyXG4gICAgdGhpcy5yb290Tm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xyXG4gICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgJycpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG59XHJcbiJdfQ==
146
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEaXJlY3RpdmUiLCJFdmVudEVtaXR0ZXIiLCJIb3N0TGlzdGVuZXIiLCJJbnB1dCIsIk91dHB1dCIsIlNBQ0lDT05fU0VSVklDRSIsIlNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFIiwiU0FDVkFMSURBVElPTktFWV9TRVJWSUNFIiwiU2FjRGVmYXVsdEljb25TZXJ2aWNlIiwiU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlIiwiU0FDRklMRUJST1dTRVJfU0VSVklDRSIsIlNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UiLCJTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSIsIlNhY0ZpbGVCcm93c2VyQ29tbW9uIiwiY29uc3RydWN0b3IiLCJodHRwY2xpZW50IiwiaW5qZWN0b3IiLCJjb3ZfMm5vbjdvNnYzaSIsImYiLCJzIiwicHJlc2VsZWNlZGZpbGUiLCJhbGxvd2VkdHlwZXMiLCJhbGxvd2ZpbGVkZWxldGUiLCJhbGxvd2ZpbGVyZW5hbWUiLCJhbGxvd2ZpbGV1cGxvYWQiLCJhbGxvd2ZvbGRlcmNyZWF0ZSIsImFsbG93Zm9sZGVyZGVsZXRlIiwiYWxsb3dmb2xkZXJyZW5hbWUiLCJmaWxlIiwicm9vdE5vZGUiLCJOYW1lIiwiQ2hpbGROb2RlcyIsIkZpbGVzIiwiSXNFeHBhbmRlZCIsIklzRWRpdE1vZGUiLCJJc05ld05vZGUiLCJQYXRoIiwic2VsZWN0ZWRGaWxlSXRlbSIsInNlbGVjdGVkTm9kZSIsInVwbG9hZHMiLCJicm93c2VyU2VydmljZSIsImdldCIsInZhbGlkYXRpb25LZXlTZXJ2aWNlIiwibG5nUmVzb3VyY2VTZXJ2aWNlIiwiaWNvblNlcnZpY2UiLCJzZWxlY3RlZGZpbGUiLCJ2Iiwic2VsZWN0ZWRub2RlIiwiZmluZFNlbGVjdGVkTm9kZUJ5UGF0aCIsImIiLCJzZWxlY3ROb2RlIiwiaWNvbkRlbGV0ZSIsIkJyb3dzZXJDb21wb25lbnREZWxldGVJY29uIiwiaWNvbkVkaXQiLCJCcm93c2VyQ29tcG9uZW50RWRpdEljb24iLCJpY29uRm9sZGVyQ29sbGFic2VkIiwiQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb24iLCJpY29uRm9sZGVyRW1wdHkiLCJCcm93c2VyQ29tcG9uZW50Rm9sZGVyRW1wdHlJY29uIiwiaWNvbkZvbGRlck5ldyIsIkJyb3dzZXJDb21wb25lbnRGb2xkZXJOZXdJY29uIiwiaWNvbkZvbGRlck9wZW4iLCJCcm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb24iLCJpY29uUmVmcmVzaCIsIkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbiIsInNlbGVjdEZpbGUiLCJsZW5ndGgiLCJzZWxlY3RlZEZpbGUiLCJleGl0RWRpdE1vZGUiLCJ0YXJnZXRFbGVtZW50IiwiZm9yRWFjaCIsIml0bSIsImNsZWFyTmV3Q2hpbGROb2RlcyIsInJlc2V0Tm9kZUVkaXRNb2RlIiwiZGVsZXRlRmlsZSIsImNvbmZpcm1EZWxldGVGaWxlIiwic3Vic2NyaWJlIiwiY29uZmlybSIsIkRlbGV0ZUZpbGUiLCJhcGl1cmwiLCJGaWxlbmFtZSIsInJlc3VsdCIsImRlbGV0ZU5vZGUiLCJub2RlIiwiY29uZmlybURlbGV0ZU5vZGUiLCJEZWxldGVOb2RlIiwicGFyZW50Tm9kZSIsImZpbmRQYXJlbnROb2RlIiwiTm9kZSIsImZpbGxQYXRoIiwiZWRpdEZpbGUiLCJlZGl0Tm9kZSIsIm5ld05vZGUiLCJpdGVtIiwicHVzaCIsIm5nT25Jbml0IiwiR2V0Tm9kZSIsInNldFBhdGhUb0FsbE5vZGVzIiwicmVmcmVzaE5vZGUiLCJzd2l0Y2hFeHBhbmROb2RlIiwicmVuYW1lRmlsZSIsIm5ld0ZpbGVuYW1lIiwiUmVuYW1lRmlsZSIsInJlbmFtZU5vZGUiLCJuZXdGb2xkZXJuYW1lIiwiUmVuYW1lTm9kZSIsIlNhdmVOb2RlIiwiZW5kc1dpdGgiLCJlbWl0IiwiR2V0RmlsZXMiLCJmaWxlbmFtZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZmluZCIsInVwbG9hZENvbXBsZXRlIiwidXBsb2FkSWRMaXN0IiwiZWxlbWVudCIsImluZGV4T2YiLCJpZCIsInBvcCIsIlNhdmVGaWxlIiwidXBsb2FkZWRGaWxlTW92ZWQiLCJzcGxpY2UiLCJwYXJlbnRQYXRoIiwibm9kZVRvRmluZCIsImNoaWxkIiwicGF0aCIsInVuZGVmaW5lZCIsInBhdGhBcnJheSIsInNwbGl0IiwiZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5IiwiaW5kZXgiLCJkZXBzIiwidG9rZW4iLCJpMSIsIkh0dHBDbGllbnQiLCJpMCIsIkluamVjdG9yIiwidGFyZ2V0IiwiybXJtUZhY3RvcnlUYXJnZXQiLCJpbnB1dHMiLCJvdXRwdXRzIiwiaG9zdCIsImxpc3RlbmVycyIsIm5nSW1wb3J0IiwiZGVjb3JhdG9ycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJU2FjRmlsZUJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjRmlsZUJyb3dzZXJTZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU0FDSUNPTl9TRVJWSUNFLFxyXG4gIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxyXG4gIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcclxuICBTYWNEZWZhdWx0SWNvblNlcnZpY2UsXHJcbiAgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHtcclxuICBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWZpbGVicm93c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IElCcm93c2VyRmlsZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJmaWxlJztcclxuaW1wb3J0IHsgSUJyb3dzZXJGaWxlUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9icm93c2VyZmlsZXJlc3BvbnNlJztcclxuaW1wb3J0IHsgSUJyb3dzZXJOb2RlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3Nlcm5vZGUnO1xyXG5pbXBvcnQgeyBJQnJvd3Nlck5vZGVSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJub2RlcmVzcG9uc2UnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgQ29tcG9uZW50IGbDvHIgRmlsZSBCcm93c2VyXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0ZpbGVCcm93c2VyQ29tbW9uIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmw7xyIEZpbGUgQnJvd3NlciBadWdyaWZmIChCYWNrZW5kKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnJvd3NlclNlcnZpY2U6IElTYWNGaWxlQnJvd3NlclNlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogSWNvbiBzZXJ2aWNlIHRvIHJlY2VpdmUgaWNvbiBjbGFzc2VzIGZvciB1aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaWNvblNlcnZpY2U6IElTYWNJY29uU2VydmljZTtcclxuICAvKipcclxuICAgKiBGaWxlIHdlbGNoZXMgYmVpbSBzdGFydGVuIGRlcyBCcm93c2VycyBiZXJlaXRzIHNlbGVrdGllcnQgaXN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmVzZWxlY2VkZmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVybGF1YnRlIERhdGVpZXJ3ZWl0ZXJ1bmdlbiBmw7xyIEZpbGVhdXN3YWhsIHVuZCBVcGxvYWQuIERhdGVpZXJ3ZWl0ZXJ1bmcgbWl0IFB1bmt0IHVuZFxyXG4gICAqIGdldHJlbm50IGR1cmNoIEtvbW1hIGbDvHIgbWVociBhbHMgZWluZSBFcndlaXRlcnVuZyAoRXhhbXBsZTogXCIuanBnLC5naWZcIilcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2VkdHlwZXM6IHN0cmluZyA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIGzDtnNjaGVuIGVpbmVyIERhdGVpXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmaWxlZGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRhcyB1bWJlbmVubmVuIGVpbmVyIERhdGVpXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmaWxlcmVuYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRlbiBVcGxvYWQgdm9uIERhdGVpZW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZpbGV1cGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIGVyc3RlbGxlbiBlaW5lcyBuZXVlbiBPcmRuZXJzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmb2xkZXJjcmVhdGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIGzDtnNjaGVuIGVpbmVzIE9yZG5lcnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZvbGRlcmRlbGV0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkYXMgVW1iZW5lbm5lbiBlaW5lcyBPcmRuZXJzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWxsb3dmb2xkZXJyZW5hbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIFVSTCBmw7xyIEJhY2tlbmQgQVBJXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXBpdXJsOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3V0cHV0IEVtaXR0ZXIgd2VubiBGaWxlIHNlbGVrdGllcnQgd2lyZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZmlsZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmw7xyIEVycm9yIExvY2FsaXNhdGlvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBsbmdSZXNvdXJjZVNlcnZpY2U6IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIFJvb3QgTm9kZSBJdGVtIGbDvHIgVHJlZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByb290Tm9kZTogSUJyb3dzZXJOb2RlID0ge1xyXG4gICAgTmFtZTogJycsXHJcbiAgICBDaGlsZE5vZGVzOiBbXSxcclxuICAgIEZpbGVzOiBbXSxcclxuICAgIElzRXhwYW5kZWQ6IHRydWUsXHJcbiAgICBJc0VkaXRNb2RlOiBmYWxzZSxcclxuICAgIElzTmV3Tm9kZTogZmFsc2UsXHJcbiAgICBQYXRoOiAnJyxcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIEZpbGUgTmFtZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEZpbGU6IHN0cmluZztcclxuICAvKipcclxuICAgKiBTZWxlY3RlZCBGaWxlIEl0ZW1cclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRGaWxlSXRlbTogSUJyb3dzZXJGaWxlID0gbnVsbDtcclxuICAvKipcclxuICAgKiBTZWxlY3RlZCBOb2RlIEl0ZW1cclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWROb2RlOiBJQnJvd3Nlck5vZGUgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIExpc3RlIHZvbiBVcGxvYWRzXHJcbiAgICovXHJcbiAgcHVibGljIHVwbG9hZHM6IHN0cmluZ1tdID0gW107XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byByZWNlaXZlIHN0YW5kYXJkIHZhbGlkYXRpb24gbWVzc2FnZSBrZXlzIGFuZCB0ZXh0c1xyXG4gICAqL1xyXG4gIHB1YmxpYyB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlO1xyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLyoqXHJcbiAgICogS29uc3RydWt0b3JcclxuICAgKiBAcGFyYW0gaHR0cGNsaWVudCBBbmd1bGFyIEhUVFAgQ2xpZW50XHJcbiAgICogQHBhcmFtIGluamVjdG9yIFNlcnZpY2UgSW5qZWN0b3JcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihodHRwY2xpZW50OiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMuYnJvd3NlclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0ZJTEVCUk9XU0VSX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0RmlsZUJyb3dzZXJTZXJ2aWNlKGh0dHBjbGllbnQpXHJcbiAgICApO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlKClcclxuICAgICk7XHJcbiAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSh0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmljb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0enQgZGVuIFNlbGVjZWQgTm9kZSDDvGJlciBkZW4gUGZhZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZGZpbGUodjogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRub2RlID0gdGhpcy5maW5kU2VsZWN0ZWROb2RlQnlQYXRoKHRoaXMucm9vdE5vZGUsIHYpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZG5vZGUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3ROb2RlKHNlbGVjdGVkbm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmVzZWxlY2VkZmlsZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZGVsZXRlIGljb25cclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRGVsZXRlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50RGVsZXRlSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBlZGl0IGljb25cclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRWRpdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEVkaXRJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgY29sbGFic2VkXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlckNvbGxhYnNlZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZm9sZGVycyB3aXRob3V0IHN1YmZvbGRlcnNcclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRm9sZGVyRW1wdHkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJFbXB0eUljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBmb3IgbmV3IGZvbGRlcnMgYWN0aW9uXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlck5ldygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlck5ld0ljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoZXJlIGFyZSBleHBhbmRlZFxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJPcGVuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgcmVmcmVzaCBpY29uXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvblJlZnJlc2goKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmw7xyIFNlbGVjdGVkIEZpbGUuIElzdCBhbiBJbnB1dCBQcm9wZXJ0eSBnZWJ1bmRlblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRmaWxlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0RmlsZSAmJiB0aGlzLnNlbGVjdEZpbGUubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBIb3N0TGlzdGVuZXIgd2VsY2hlciBkZW4gRWRpdCBNb2RlIGJlaSBhbGxlbiBGaWxlcyB1bmQgTm9kZXMgYmVlbmRldC5cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxyXG4gIC8qKlxyXG4gICAqIENsaWNrIEV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIGV4aXRFZGl0TW9kZSh0YXJnZXRFbGVtZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMuZm9yRWFjaCgoaXRtKSA9PiAoaXRtLklzRWRpdE1vZGUgPSBmYWxzZSkpO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLnNlbGVjdGVkTm9kZSB8fFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUgPT09IG51bGwgfHxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5OYW1lLmxlbmd0aCA9PT0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNsZWFyTmV3Q2hpbGROb2Rlcyh0aGlzLnJvb3ROb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMw7ZzY2h0IGVpbiBGaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWxldGVGaWxlKGZpbGU6IElCcm93c2VyRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtRGVsZXRlRmlsZShmaWxlKS5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcclxuICAgICAgaWYgKGNvbmZpcm0pIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuRGVsZXRlRmlsZShcclxuICAgICAgICAgICAgdGhpcy5hcGl1cmwsXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLFxyXG4gICAgICAgICAgICB0aGlzLmFsbG93ZWR0eXBlc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEzDtnNjaHQgZWluZW4gTm9kZVxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBnZWzDtnNjaHQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgZGVsZXRlTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlybURlbGV0ZU5vZGUobm9kZSkuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XHJcbiAgICAgIGlmIChjb25maXJtKSB7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgICAgLkRlbGV0ZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuZmluZFBhcmVudE5vZGUodGhpcy5yb290Tm9kZSwgbm9kZSk7XHJcbiAgICAgICAgICAgIHBhcmVudE5vZGUuQ2hpbGROb2RlcyA9IHJlc3VsdC5Ob2RlLkNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJvb3ROb2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUocGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBlaW4gRmlsZSBpbiBkZW4gRWRpdCBNb2RlXHJcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIGluIGRlbiBFZGl0IE1vZGUgZ2VzZXR6dCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBlZGl0RmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiB2b2lkIHtcclxuICAgIGZpbGUuSXNFZGl0TW9kZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBlaW5lbiBOb2RlIGluIGRlbiBFZGl0IE1vZGVcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgYmVhcmJlaXRldCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBlZGl0Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcclxuICAgIG5vZGUuSXNFZGl0TW9kZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFcnpldWd0IGVpbmVuIG5ldWVuIE5vZGUgaW0gVHJlZVxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgdW50ZXIgd2VsY2hlbSBlaW4gbmV1ZXIgTm9kZSBlcnN0ZWxsdCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZXdOb2RlKG5vZGU6IElCcm93c2VyTm9kZSkge1xyXG4gICAgY29uc3QgaXRlbTogSUJyb3dzZXJOb2RlID0ge1xyXG4gICAgICBDaGlsZE5vZGVzOiBbXSxcclxuICAgICAgRmlsZXM6IFtdLFxyXG4gICAgICBJc0VkaXRNb2RlOiBmYWxzZSxcclxuICAgICAgSXNFeHBhbmRlZDogZmFsc2UsXHJcbiAgICAgIE5hbWU6ICcnLFxyXG4gICAgICBQYXRoOiBub2RlLlBhdGgsXHJcbiAgICAgIElzTmV3Tm9kZTogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgbm9kZS5DaGlsZE5vZGVzLnB1c2goaXRlbSk7XHJcbiAgICB0aGlzLnNlbGVjdE5vZGUoaXRlbSk7XHJcbiAgICB0aGlzLmVkaXROb2RlKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdCBFdmVudCBkZXIgS29tcG9uZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgLkdldE5vZGUodGhpcy5hcGl1cmwsICcnLCB0aGlzLmFsbG93ZWR0eXBlcylcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSB7XHJcbiAgICAgICAgICBOYW1lOiByZXN1bHQuTm9kZS5OYW1lLFxyXG4gICAgICAgICAgRmlsZXM6IHJlc3VsdC5Ob2RlLkZpbGVzLFxyXG4gICAgICAgICAgQ2hpbGROb2RlczogcmVzdWx0Lk5vZGUuQ2hpbGROb2RlcyxcclxuICAgICAgICAgIElzRXhwYW5kZWQ6IHRydWUsXHJcbiAgICAgICAgICBJc0VkaXRNb2RlOiBmYWxzZSxcclxuICAgICAgICAgIElzTmV3Tm9kZTogZmFsc2UsXHJcbiAgICAgICAgICBQYXRoOiAnLycsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdGhpcy5yb290Tm9kZTtcclxuXHJcbiAgICAgICAgLy8gU2VsZWN0ZWQgRmlsZSBlcm5ldXQgc2V0emVuLCB3ZW5uIFByb3BlcnR5IGdlc2V0enQgd3VyZGUgYmV2b3IgRGF0ZW4gdm9tIFNlcnZpY2UgZ2VsYWRlbiB3dXJkZW4uXHJcbiAgICAgICAgaWYgKHRoaXMucHJlc2VsZWNlZGZpbGUgIT09IG51bGwgJiYgdGhpcy5wcmVzZWxlY2VkZmlsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkZmlsZSA9IHRoaXMucHJlc2VsZWNlZGZpbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFrdHVhbGlzaWVydCBkZW4gTm9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWZyZXNoTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcclxuICAgIGlmICghbm9kZS5Jc0V4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuc3dpdGNoRXhwYW5kTm9kZShub2RlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgIC5HZXROb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIHRoaXMuYWxsb3dlZHR5cGVzKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzID0gcmVzdWx0Lk5vZGUuQ2hpbGROb2RlcztcclxuICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0Lk5vZGUuRmlsZXM7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdlbm4gZWluZSBEYXRlaSB1bWJlbmFubnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgdW1iZW5hbm50IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIG5ld0ZpbGVuYW1lIE5ldWVyIERhdGVpbmFtZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW5hbWVGaWxlKGZpbGU6IElCcm93c2VyRmlsZSwgbmV3RmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgZmlsZS5Jc0VkaXRNb2RlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCFuZXdGaWxlbmFtZSB8fCBuZXdGaWxlbmFtZSA9PT0gbnVsbCB8fCBuZXdGaWxlbmFtZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgLy8gQ2FuY2VsLCBJbnZhbGlkIEZpbGVuYW1lXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZS5GaWxlbmFtZSAhPT0gbmV3RmlsZW5hbWUpIHtcclxuICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgIC5SZW5hbWVGaWxlKFxyXG4gICAgICAgICAgdGhpcy5hcGl1cmwsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZSxcclxuICAgICAgICAgIG5ld0ZpbGVuYW1lLFxyXG4gICAgICAgICAgdGhpcy5hbGxvd2VkdHlwZXNcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdlbm4gZWluIE5vZGUgdW1iZW5hbm50IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBuZXdGb2xkZXJuYW1lIE5ldWVyIE9yZG5lcm5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgcmVuYW1lTm9kZShub2RlOiBJQnJvd3Nlck5vZGUsIG5ld0ZvbGRlcm5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbm9kZS5Jc0VkaXRNb2RlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCFub2RlLklzTmV3Tm9kZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIW5ld0ZvbGRlcm5hbWUgfHxcclxuICAgICAgICBuZXdGb2xkZXJuYW1lID09PSBudWxsIHx8XHJcbiAgICAgICAgbmV3Rm9sZGVybmFtZS5sZW5ndGggPT09IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy8gQ2FuY2VsIFJlbmFtZS4gSW52YWxpZCBGb2xkZXJuYW1lXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobm9kZS5OYW1lICE9PSBuZXdGb2xkZXJuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgICAgLlJlbmFtZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgbmV3Rm9sZGVybmFtZSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgbm9kZS5OYW1lID0gcmVzdWx0Lk5vZGUuTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIW5ld0ZvbGRlcm5hbWUgfHxcclxuICAgICAgICBuZXdGb2xkZXJuYW1lID09PSBudWxsIHx8XHJcbiAgICAgICAgbmV3Rm9sZGVybmFtZS5sZW5ndGggPT09IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhck5ld0NoaWxkTm9kZXModGhpcy5yb290Tm9kZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBub2RlLk5hbWUgPSBuZXdGb2xkZXJuYW1lO1xyXG4gICAgICBub2RlLklzTmV3Tm9kZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgLlNhdmVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbm9kZS5OYW1lID0gcmVzdWx0Lk5vZGUuTmFtZTtcclxuICAgICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcclxuXHJcbiAgICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdlbm4gZWluIEZpbGUgc2VsZWt0aWVydCB3aXJkXHJcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIHNlbGVrdGllcnQgd2lyZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RGaWxlKGZpbGU6IElCcm93c2VyRmlsZSkge1xyXG4gICAgaWYgKCFmaWxlLklzRWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMuZm9yRWFjaCgoaXRtKSA9PiAoaXRtLklzRWRpdE1vZGUgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZE5vZGUuUGF0aC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9ICcvJyArIGZpbGUuRmlsZW5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVJdGVtID0gZmlsZTtcclxuICAgIHRoaXMuZmlsZS5lbWl0KHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gTm9kZSBzZWxla3RpZXJ0IHdpcmRcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgc2VsZWt0aWVydCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3ROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKCFub2RlLklzRXhwYW5kZWQpIHtcclxuICAgICAgdGhpcy5zd2l0Y2hFeHBhbmROb2RlKG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc2V0IHRoZSBFZGl0IE1vZGUgaW4gYWxsIE5vZGVzXHJcbiAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKG51bGwpO1xyXG5cclxuICAgIGlmICghbm9kZS5GaWxlcykge1xyXG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgLkdldEZpbGVzKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIHRoaXMuYWxsb3dlZHR5cGVzKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMucHJlc2VsZWNlZGZpbGUgIT09IG51bGwgJiYgdGhpcy5wcmVzZWxlY2VkZmlsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5wcmVzZWxlY2VkZmlsZS5zdWJzdHJpbmcoXHJcbiAgICAgICAgICAgICAgdGhpcy5wcmVzZWxlY2VkZmlsZS5sYXN0SW5kZXhPZignLycpICsgMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gbm9kZS5GaWxlcy5maW5kKChpdG0pID0+IGl0bS5GaWxlbmFtZSA9PT0gZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZShmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwYW5kL0NvbGxhYnNlIE1ldGhvZGUgZsO8ciBOb2Rlc1xyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBnZcO2ZmZuZXQgb2RlciBnZXNjaGxvc3NlbiB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzd2l0Y2hFeHBhbmROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKG5vZGUuSXNFeHBhbmRlZCkge1xyXG4gICAgICBub2RlLklzRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGRpZSBBdWZnZXJ1ZmVuIHdlcmRlbiBtdXNzLCB3ZW5uIGVpbiBVcGxvYWQgYmVlbmRldCBpc3QuXHJcbiAgICogQHBhcmFtIHBhcmFtIFBhcmFtZXRlciBkZXMgaG9jaGdlbGFkZW5lbiBGaWxlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGxvYWRDb21wbGV0ZShub2RlOiBJQnJvd3Nlck5vZGUsIHVwbG9hZElkTGlzdDogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGlmICh1cGxvYWRJZExpc3QgIT09IG51bGwpIHtcclxuICAgICAgdXBsb2FkSWRMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy51cGxvYWRzLmluZGV4T2YoZWxlbWVudCkgPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZHMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlkID0gdGhpcy51cGxvYWRzLnBvcCgpO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAuU2F2ZUZpbGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgaWQsIHRoaXMuYWxsb3dlZHR5cGVzKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVNb3ZlZChpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIENvbmZpcm0gTWV0aG9kZSB3ZWxjaGUgaW1wbGVtZW50aWVydCB3ZXJkZW4gbXVzcy4gTWV0aG9kZSB3aXJkIGF1ZmdlcnVmZW4sIHdlbm4gZWluZVxyXG4gICAqIERhdGVpIGdlbMO2c2NodCB3ZXJkZW4gc29sbC5cclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIGbDvHIgd2VsY2hlcyBlaW4gRGVsZXRlIENvbmZpcm0gZWluZ2Vmb3JkZXJ0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IGNvbmZpcm1EZWxldGVGaWxlKGZpbGU6IElCcm93c2VyRmlsZSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIENvbmZpcm0gTWV0aG9kZSB3ZWxjaGUgaW1wbGVtZW50aWVydCB3ZXJkZW4gbXVzcy4gTWV0aG9kZSB3aXJkIGF1ZmdlcnVmZW4sIHdlbm4gZWluXHJcbiAgICogT3JkbmVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbC5cclxuICAgKiBAcGFyYW0gZm9sZGVyIE9yZGVybiBmw7xyIHdlbGNoZW4gZWluIERlbGV0ZSBDb25maXJtIGVpbmdlZm9yZGVydCB3ZXJkZW4gc29sbC5cclxuICAgKi9cclxuICBwdWJsaWMgYWJzdHJhY3QgY29uZmlybURlbGV0ZU5vZGUoZm9sZGVyOiBJQnJvd3Nlck5vZGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIC8qKlxyXG4gICAqIEFic3RyYWt0ZSBNZXRob2RlIGRpZSBBdWZnZXJ1ZmVuIHdpcmQsIHdlbm4gZGFzIEhvY2hnZWxhZGVuZSBGaWxlIGF1cyBkZW0gVGVtcCBGb2xkZXIgaW4gZGllXHJcbiAgICogU3RydWt0dXIgdmVyc2Nob2JlbiB3dXJkZS5cclxuICAgKiBAcGFyYW0gdXBsb2FkaWQgSUQgZGVzIFVwbG9hZHNcclxuICAgKi9cclxuICBwdWJsaWMgYWJzdHJhY3QgdXBsb2FkZWRGaWxlTW92ZWQodXBsb2FkaWQ6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogUmVrdXJzaXZlIE1ldGhvZGUgd2VsY2hlIGJlaW0gTm9kZSB1bmQgYWxsIHNlaW5lbiBDaGlsZHMgbmV1ZSBOb2RlcyBlbnRmZXJudFxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgYmVpIHdlbGNoZW0gYWxsZSBuZXVlbiBOb2RlcyBlbnRmZXJudCB3ZXJkZW4gc29sbC5cclxuICAgKi9cclxuICBwcml2YXRlIGNsZWFyTmV3Q2hpbGROb2Rlcyhub2RlOiBJQnJvd3Nlck5vZGUpIHtcclxuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcclxuICAgICAgaWYgKGl0bS5Jc05ld05vZGUpIHtcclxuICAgICAgICBub2RlLkNoaWxkTm9kZXMuc3BsaWNlKG5vZGUuQ2hpbGROb2Rlcy5pbmRleE9mKGl0bSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBub2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB0aGlzLmNsZWFyTmV3Q2hpbGROb2RlcyhpdG0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VsY2hlIGRlbiBQZmFkIGbDvHIgZWluZW4gTm9kZSBlcnpldWd0XHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBmw7xyIHdlbGNoZW4gZGVyIFBmYWQgZXJ6ZXVndCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBwYXJlbnRQYXRoIMOcYmVyZ2VvcmRuZXRlciBQZmFkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaWxsUGF0aChub2RlOiBJQnJvd3Nlck5vZGUsIHBhcmVudFBhdGg6IHN0cmluZykge1xyXG4gICAgbm9kZS5QYXRoID0gcGFyZW50UGF0aCArICcvJyArIG5vZGUuTmFtZTtcclxuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcclxuICAgICAgdGhpcy5maWxsUGF0aChpdG0sIG5vZGUuUGF0aCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Y2h0IGRlbiDDvGJlcmdlb3JkbmV0ZW4gTm9kZSBpbSBUcmVlXHJcbiAgICogQHBhcmFtIG5vZGUgQWt0dWVsbGVyIE5vZGVcclxuICAgKiBAcGFyYW0gbm9kZVRvRmluZCBOb2RlIHdlbGNoZXIgZ2VmdW5kZW4gd2VyZGVuIHNvbGxcclxuICAgKiBAcmV0dXJucyBOb2RlIHdlbm4gZXIgZ2VmdW5kZW4gd3VyZGUsIGFuc29uc3RlbiB3aXJkIE5VTEwgenVyw7xja2dlZ2ViZW5cclxuICAgKi9cclxuICBwcml2YXRlIGZpbmRQYXJlbnROb2RlKFxyXG4gICAgbm9kZTogSUJyb3dzZXJOb2RlLFxyXG4gICAgbm9kZVRvRmluZDogSUJyb3dzZXJOb2RlXHJcbiAgKTogSUJyb3dzZXJOb2RlIHtcclxuICAgIGlmIChub2RlLkNoaWxkTm9kZXMuaW5kZXhPZihub2RlVG9GaW5kKSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5DaGlsZE5vZGVzKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudE5vZGUoY2hpbGQsIG5vZGVUb0ZpbmQpO1xyXG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VjaHQgZWluZW4gTm9kZSBnZW0uIGVpbmVtIFVSTCBQZmFkXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3ZWxjaGVtIGdlc3VjaHQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gcGF0aCBQZmFkIG5hY2ggd2VsY2hlbSBnZXN1Y2h0IHdpcmRcclxuICAgKiBAcmV0dXJucyBOb2RlIHdlbGNoZXIgenVtIGdlc3VjaHRlbiBQZmFkIHBhc3N0LiBXZW5uIGtlaW4gTm9kZSBnZWZ1bmRlbiB3aXJkLCB3aXJkIE5VTEwgenVyw7xja2dlZ2ViZW5cclxuICAgKi9cclxuICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGgoXHJcbiAgICBub2RlOiBJQnJvd3Nlck5vZGUsXHJcbiAgICBwYXRoOiBzdHJpbmdcclxuICApOiBJQnJvd3Nlck5vZGUge1xyXG4gICAgLy8gQ2FuY2VsIHdlbm4gUGZhZCBuaWNodCBkZWZpbmllcnRcclxuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQgfHwgcGF0aCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZmFkIGluIEFycmF5IHNwbGl0dGVuIHVuZCBSb290IEZvbGRlcm5hbWUgc2V0emVuXHJcbiAgICBjb25zdCBwYXRoQXJyYXkgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICBwYXRoQXJyYXlbMF0gPSB0aGlzLnJvb3ROb2RlLk5hbWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KG5vZGUsIHBhdGhBcnJheSwgMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWNodCBlaW5lbiBOb2RlIGdlbS4gZWluZW0gQXJyYXkgdm9uIE5vZGUgTmFtZW5cclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdlbGNoZW0gZ2VzdWNodCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBwYXRoIEFycmF5IHZvbiBOb2RlIE5hbWVuLCB3ZWxjaGUgZGllIEhpcmFyY2h5IGRlcyBQZmFkZXMgYWJiaWxkZW5cclxuICAgKiBAcGFyYW0gaW5kZXggQWt0dWVsbGVyIEluZGV4IGltIFBBVEggQXJyYXlcclxuICAgKiBAcmV0dXJucyBOb2RlIHdlbm4gZWluZXIgZ2VmdW5kZW4gd3VyZGUsIGFuc29uc3RlbiBOVUxMXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaW5kU2VsZWN0ZWROb2RlQnlQYXRoQXJyYXkoXHJcbiAgICBub2RlOiBJQnJvd3Nlck5vZGUsXHJcbiAgICBwYXRoOiBzdHJpbmdbXSxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApOiBJQnJvd3Nlck5vZGUge1xyXG4gICAgLy8gQ2hlY2sgb2IgT3JkbmVyIGtvcnJla3QuIExldHplciBPcmRuZXIgenVyw7xja2dlYmVuLiBQYXRoIExhc3QgSW5kZXggaXN0IGRlciBGaWxlbmFtZVxyXG4gICAgaWYgKG5vZGUuTmFtZSA9PT0gcGF0aFtpbmRleF0gJiYgcGF0aC5sZW5ndGggLSAyID09PSBpbmRleCkge1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH0gZWxzZSBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSkge1xyXG4gICAgICAvLyBFeHBhbmQgTm9kZVxyXG4gICAgICBub2RlLklzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygbm9kZS5DaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kU2VsZWN0ZWROb2RlQnlQYXRoQXJyYXkoaXRlbSwgcGF0aCwgaW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVrdXJzaXZlIE1ldGhvZGUgd2VsY2hlIGJlaW0gTm9kZSB1bmQgYWxsIHNlaW5lbiBDaGlsZHMgZGVuIEVkaXQgTW9kZSBiZWVuZGV0LlxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgYmVpIHdlbGNoZW0gZGVyIEVkaXQgTW9kZSBiZWVuZGV0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNldE5vZGVFZGl0TW9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcclxuICAgIGlmIChub2RlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUodGhpcy5yb290Tm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBub2RlLklzRWRpdE1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChub2RlLkNoaWxkTm9kZXMpIHtcclxuICAgICAgICBub2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKGl0bSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBkZW4gUGZhZCBpbiBhbGxlbiBOb2Rlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0UGF0aFRvQWxsTm9kZXMoKSB7XHJcbiAgICB0aGlzLnJvb3ROb2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCAnJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzJGQUNBLE9BQ0VBLFNBQVMsQ0FDVEMsWUFBWSxDQUNaQyxZQUFZLENBRVpDLEtBQUssQ0FFTEMsTUFBTSxLQUNELGVBQWUsQ0FNdEIsT0FDRUMsZUFBZSxDQUNmQyx1QkFBdUIsQ0FDdkJDLHdCQUF3QixDQUN4QkMscUJBQXFCLENBQ3JCQyw4QkFBOEIsS0FDekIsZ0JBQWdCLENBQ3ZCLE9BQ0VDLHNCQUFzQixDQUN0QkMsNEJBQTRCLEtBQ3ZCLHdDQUF3QyxDQUMvQyxPQUFTQyw2QkFBNkIsS0FBUSx5Q0FBeUMsQyx5RUFNdkY7O0dBR0EsS0FDc0IsQ0FBQUMsb0JBQW9CLENBb0d4QztBQUVBO0FBRUE7Ozs7T0FLQUMsWUFBWUMsVUFBc0IsQ0FBRUMsUUFBa0IsRUFBQUMsY0FBQSxHQUFBQyxDQUFBLE1BQUFELGNBQUEsR0FBQUUsQ0FBQSxNQWxHdEQ7O1dBR1EsS0FBQUMsY0FBYyxDQUFrQixJQUFJLENBRTVDOzs7V0FBQUgsY0FBQSxHQUFBRSxDQUFBLE1BS08sS0FBQUUsWUFBWSxDQUFXLEVBQUUsQ0FDaEM7O1dBQUFKLGNBQUEsR0FBQUUsQ0FBQSxNQUlPLEtBQUFHLGVBQWUsQ0FBWSxJQUFJLENBQ3RDOztXQUFBTCxjQUFBLEdBQUFFLENBQUEsTUFJTyxLQUFBSSxlQUFlLENBQVksSUFBSSxDQUN0Qzs7V0FBQU4sY0FBQSxHQUFBRSxDQUFBLE1BSU8sS0FBQUssZUFBZSxDQUFZLElBQUksQ0FDdEM7O1dBQUFQLGNBQUEsR0FBQUUsQ0FBQSxNQUlPLEtBQUFNLGlCQUFp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