@bpost/bp-address-auto-complete-by-component 1.1.0 → 1.1.3

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 (165) hide show
  1. package/VERSION.md +36 -0
  2. package/bpost-bp-address-auto-complete-by-component.d.ts +1 -11
  3. package/esm2020/bpost-bp-address-auto-complete-by-component.mjs +5 -0
  4. package/esm2020/lib/box-number/box-number.component.mjs +800 -0
  5. package/esm2020/lib/enum/address-level.enum.mjs +8 -0
  6. package/esm2020/lib/enum/index.mjs +7 -0
  7. package/esm2020/lib/enum/input-name.enum.mjs +8 -0
  8. package/esm2020/lib/enum/source-type.enum.mjs +5 -0
  9. package/esm2020/lib/enum/suggestion-level-type.enum.mjs +8 -0
  10. package/esm2020/lib/enum/validation-message-option-type.enum.mjs +6 -0
  11. package/esm2020/lib/enum/validation-message-type.enum.mjs +7 -0
  12. package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +1233 -0
  13. package/esm2020/lib/lib-address-autocomplete-by-component.module.mjs +65 -0
  14. package/esm2020/lib/lib-address-autocomplete-by-component.service.mjs +14 -0
  15. package/esm2020/lib/locality/locality.component.mjs +747 -0
  16. package/{esm2015/lib/model/Locality.js → esm2020/lib/model/Box.mjs} +2 -2
  17. package/esm2020/lib/model/Locality.mjs +30 -0
  18. package/esm2020/lib/model/Street.mjs +30 -0
  19. package/esm2020/lib/model/query-parameters.model.mjs +21 -0
  20. package/esm2020/lib/services/adress.service.mjs +64 -0
  21. package/esm2020/lib/services/http.service.mjs +57 -0
  22. package/esm2020/lib/services/locale.service.mjs +37 -0
  23. package/esm2020/lib/services/nis9.service.mjs +26 -0
  24. package/esm2020/lib/services/unicode.service.mjs +376 -0
  25. package/esm2020/lib/street/street.component.mjs +725 -0
  26. package/esm2020/lib/street-number/street-number.component.mjs +891 -0
  27. package/esm2020/lib/utils/constants.mjs +2 -0
  28. package/esm2020/lib/utils/domhandler.mjs +47 -0
  29. package/esm2020/lib/utils/highlight-suggestion.pipe.mjs +62 -0
  30. package/{esm5/lib/utils/prefill-data.js → esm2020/lib/utils/prefill-data.mjs} +5 -7
  31. package/esm2020/lib/utils/prefilled-parameters.mjs +23 -0
  32. package/esm2020/lib/utils/preflll.event.mjs +7 -0
  33. package/esm2020/lib/utils/visible-suggestion.directive.mjs +39 -0
  34. package/esm2020/public-api.mjs +9 -0
  35. package/fesm2015/{bpost-bp-address-auto-complete-by-component.js → bpost-bp-address-auto-complete-by-component.mjs} +862 -787
  36. package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -0
  37. package/{fesm5/bpost-bp-address-auto-complete-by-component.js → fesm2020/bpost-bp-address-auto-complete-by-component.mjs} +1795 -1925
  38. package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -0
  39. package/lib/box-number/box-number.component.d.ts +6 -0
  40. package/lib/enum/index.d.ts +3 -0
  41. package/lib/enum/suggestion-level-type.enum.d.ts +5 -0
  42. package/lib/lib-address-autocomplete-by-component.component.d.ts +14 -0
  43. package/lib/lib-address-autocomplete-by-component.module.d.ts +15 -0
  44. package/lib/lib-address-autocomplete-by-component.service.d.ts +3 -0
  45. package/lib/locality/locality.component.d.ts +3 -0
  46. package/lib/services/adress.service.d.ts +3 -0
  47. package/lib/services/http.service.d.ts +5 -0
  48. package/lib/services/locale.service.d.ts +3 -0
  49. package/lib/services/nis9.service.d.ts +3 -0
  50. package/lib/services/unicode.service.d.ts +3 -0
  51. package/lib/street/street.component.d.ts +3 -0
  52. package/lib/street-number/street-number.component.d.ts +6 -1
  53. package/lib/utils/constants.d.ts +1 -0
  54. package/lib/utils/highlight-suggestion.pipe.d.ts +3 -0
  55. package/lib/utils/visible-suggestion.directive.d.ts +3 -0
  56. package/package.json +23 -13
  57. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/.editorconfig +0 -0
  58. package/tutorial/tutorial/aacwidget-tutorial/README.md +27 -0
  59. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/angular.json +0 -0
  60. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/browserslist +0 -0
  61. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/e2e/protractor.conf.js +0 -0
  62. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/e2e/src/app.e2e-spec.ts +0 -0
  63. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/e2e/src/app.po.ts +0 -0
  64. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/e2e/tsconfig.json +0 -0
  65. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/karma.conf.js +0 -0
  66. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/package-lock.json +0 -0
  67. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/package.json +0 -0
  68. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/app-routing.module.ts +0 -0
  69. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/app.component.html +0 -0
  70. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/app.component.scss +0 -0
  71. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/app.component.spec.ts +0 -0
  72. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/app.component.ts +0 -0
  73. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/app.module.ts +0 -0
  74. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-full/widget-full.component.html +0 -0
  75. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-full/widget-full.component.scss +0 -0
  76. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-full/widget-full.component.ts +0 -0
  77. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-simple/widget-simple.component.html +0 -0
  78. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-simple/widget-simple.component.scss +0 -0
  79. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-simple/widget-simple.component.spec.ts +0 -0
  80. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/app/widget-simple/widget-simple.component.ts +0 -0
  81. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/.gitkeep +0 -0
  82. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/aacwidget/i18n/de.json +0 -0
  83. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/aacwidget/i18n/en.json +0 -0
  84. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/aacwidget/i18n/fr.json +0 -0
  85. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/aacwidget/i18n/nl.json +0 -0
  86. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/aacwidget/scss/aacwidget-custom.scss +0 -0
  87. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/assets/aacwidget/scss/aacwidget-default.scss +0 -0
  88. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/environments/environment.prod.ts +0 -0
  89. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/environments/environment.ts +0 -0
  90. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/favicon.ico +0 -0
  91. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/index.html +0 -0
  92. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/main.ts +0 -0
  93. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/polyfills.ts +0 -0
  94. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/styles.scss +0 -0
  95. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/src/test.ts +0 -0
  96. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/tsconfig.app.json +0 -0
  97. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/tsconfig.json +0 -0
  98. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/tsconfig.spec.json +0 -0
  99. package/tutorial/{aacwidget-tutorial → tutorial/aacwidget-tutorial}/tslint.json +0 -0
  100. package/tutorial/{tutorial-videos.txt → tutorial/tutorial-videos.txt} +0 -0
  101. package/bpost-bp-address-auto-complete-by-component.metadata.json +0 -1
  102. package/bundles/bpost-bp-address-auto-complete-by-component.umd.js +0 -5638
  103. package/bundles/bpost-bp-address-auto-complete-by-component.umd.js.map +0 -1
  104. package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js +0 -16
  105. package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js.map +0 -1
  106. package/esm2015/bpost-bp-address-auto-complete-by-component.js +0 -16
  107. package/esm2015/lib/box-number/box-number.component.js +0 -811
  108. package/esm2015/lib/enum/address-level.enum.js +0 -8
  109. package/esm2015/lib/enum/index.js +0 -4
  110. package/esm2015/lib/enum/input-name.enum.js +0 -8
  111. package/esm2015/lib/enum/source-type.enum.js +0 -5
  112. package/esm2015/lib/enum/validation-message-option-type.enum.js +0 -6
  113. package/esm2015/lib/enum/validation-message-type.enum.js +0 -7
  114. package/esm2015/lib/lib-address-autocomplete-by-component.component.js +0 -1116
  115. package/esm2015/lib/lib-address-autocomplete-by-component.module.js +0 -42
  116. package/esm2015/lib/lib-address-autocomplete-by-component.service.js +0 -14
  117. package/esm2015/lib/locality/locality.component.js +0 -769
  118. package/esm2015/lib/model/Box.js +0 -30
  119. package/esm2015/lib/model/Street.js +0 -30
  120. package/esm2015/lib/model/query-parameters.model.js +0 -21
  121. package/esm2015/lib/services/adress.service.js +0 -68
  122. package/esm2015/lib/services/http.service.js +0 -53
  123. package/esm2015/lib/services/locale.service.js +0 -39
  124. package/esm2015/lib/services/nis9.service.js +0 -30
  125. package/esm2015/lib/services/unicode.service.js +0 -376
  126. package/esm2015/lib/street/street.component.js +0 -749
  127. package/esm2015/lib/street-number/street-number.component.js +0 -900
  128. package/esm2015/lib/utils/domhandler.js +0 -47
  129. package/esm2015/lib/utils/highlight-suggestion.pipe.js +0 -63
  130. package/esm2015/lib/utils/prefill-data.js +0 -24
  131. package/esm2015/lib/utils/prefilled-parameters.js +0 -23
  132. package/esm2015/lib/utils/preflll.event.js +0 -7
  133. package/esm2015/lib/utils/visible-suggestion.directive.js +0 -42
  134. package/esm2015/public-api.js +0 -9
  135. package/esm5/bpost-bp-address-auto-complete-by-component.js +0 -16
  136. package/esm5/lib/box-number/box-number.component.js +0 -831
  137. package/esm5/lib/enum/address-level.enum.js +0 -8
  138. package/esm5/lib/enum/index.js +0 -4
  139. package/esm5/lib/enum/input-name.enum.js +0 -8
  140. package/esm5/lib/enum/source-type.enum.js +0 -5
  141. package/esm5/lib/enum/validation-message-option-type.enum.js +0 -6
  142. package/esm5/lib/enum/validation-message-type.enum.js +0 -7
  143. package/esm5/lib/lib-address-autocomplete-by-component.component.js +0 -1132
  144. package/esm5/lib/lib-address-autocomplete-by-component.module.js +0 -45
  145. package/esm5/lib/lib-address-autocomplete-by-component.service.js +0 -16
  146. package/esm5/lib/locality/locality.component.js +0 -825
  147. package/esm5/lib/model/Box.js +0 -35
  148. package/esm5/lib/model/Locality.js +0 -35
  149. package/esm5/lib/model/Street.js +0 -35
  150. package/esm5/lib/model/query-parameters.model.js +0 -23
  151. package/esm5/lib/services/adress.service.js +0 -72
  152. package/esm5/lib/services/http.service.js +0 -55
  153. package/esm5/lib/services/locale.service.js +0 -40
  154. package/esm5/lib/services/nis9.service.js +0 -31
  155. package/esm5/lib/services/unicode.service.js +0 -379
  156. package/esm5/lib/street/street.component.js +0 -794
  157. package/esm5/lib/street-number/street-number.component.js +0 -920
  158. package/esm5/lib/utils/domhandler.js +0 -51
  159. package/esm5/lib/utils/highlight-suggestion.pipe.js +0 -75
  160. package/esm5/lib/utils/prefilled-parameters.js +0 -25
  161. package/esm5/lib/utils/preflll.event.js +0 -9
  162. package/esm5/lib/utils/visible-suggestion.directive.js +0 -43
  163. package/esm5/public-api.js +0 -9
  164. package/fesm2015/bpost-bp-address-auto-complete-by-component.js.map +0 -1
  165. package/fesm5/bpost-bp-address-auto-complete-by-component.js.map +0 -1
@@ -1,1132 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
3
- import { ValidationMessageOptionType } from './enum/validation-message-option-type.enum';
4
- import { LocalityComponent } from './locality/locality.component';
5
- import { StreetComponent } from './street/street.component';
6
- import { StreetNumberComponent } from './street-number/street-number.component';
7
- import { BoxNumberComponent } from './box-number/box-number.component';
8
- import { ADDRESSLEVEL } from './enum';
9
- import { PrefillData } from './utils/prefill-data';
10
- import { InputNameType } from './enum/input-name.enum';
11
- import { HttpService } from './services/http.service';
12
- import { Nis9Service } from './services/nis9.service';
13
- var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
14
- function LibAddressAutocompleteByComponentComponent(nis9Service, httpService) {
15
- this.nis9Service = nis9Service;
16
- this.httpService = httpService;
17
- this.selectedLanguage = null;
18
- this.baseUrl = "https://api.mailops.bpost.cloud/roa-info/externalMailingAddressProofingRest/autocomplete/";
19
- this.showDebugMessageToConsole = false;
20
- this.notInListAllowed = true;
21
- this.messageOption = 'Y';
22
- // LOCALITY
23
- this.localityUrl = this.baseUrl + 'locality';
24
- this.maxSuggestionLocality = 5;
25
- this.visibleSuggestionLocalityCount = 5;
26
- // localityParams: PrefilledParameters;
27
- this.localityPrefillData = null;
28
- // STREET
29
- this.streetUrl = this.baseUrl + 'street';
30
- this.maxSuggestionStreet = 5;
31
- this.visibleSuggestionStreetCount = 5;
32
- // streetParams: PrefilledParameters;
33
- this.streetPrefillData = null;
34
- // STREET NUMBER
35
- // tslint:disable-next-line:max-line-length
36
- this.streetNumberUrl = this.baseUrl + 'streetNumber';
37
- this.maxSuggestionStreetNb = 5;
38
- this.visibleSuggestionStreetNbCount = 5;
39
- // streetNumberParams: PrefilledParameters;
40
- this.streetNumberPrefillData = null;
41
- // BOX NUMBER
42
- this.boxNumberUrl = this.baseUrl + 'boxNumber';
43
- this.maxSuggestionBoxNb = 5;
44
- this.visibleSuggestionBoxNbCount = 5;
45
- // boxParams: PrefilledParameters;
46
- this.boxNumberPrefillData = null;
47
- this.emittedAddress = null;
48
- this.validationMessage = { messageType: null, translatedMessage: '' };
49
- this.addressCompleteEventEmitter = new EventEmitter();
50
- this.validationMessageEventEmitter = new EventEmitter();
51
- this.clearInputEventEmitter = new EventEmitter();
52
- this.processingPrefillData = false;
53
- // Pass the API key as a property of the library !
54
- this.apiKey = 'cyRkKOD73O1DOdgcDLLnsaOiDh6OyOkt3BBT5JU1';
55
- // set the widget as readonly and add NIS9 query parameter
56
- this.isReadonly = false;
57
- this.nis9InResponse = false;
58
- // https://bgs.bpost.be/set-selection-circle?lng=4.360537572541948&lat=50.84063582806037&radius=0.001
59
- this.nis9ServiceURL = '';
60
- }
61
- Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "inputLang", {
62
- // @ts-ignore
63
- set: function (val) {
64
- this.setLanguage(val);
65
- },
66
- enumerable: true,
67
- configurable: true
68
- });
69
- Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "clearInput", {
70
- // @ts-ignore
71
- set: function (focus) {
72
- this.onClearInput(focus);
73
- },
74
- enumerable: true,
75
- configurable: true
76
- });
77
- Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "validationMessageOption", {
78
- // @ts-ignore
79
- set: function (option) {
80
- this.setValidationMessageOptionFromInput(option);
81
- },
82
- enumerable: true,
83
- configurable: true
84
- });
85
- LibAddressAutocompleteByComponentComponent.prototype.ngOnInit = function () {
86
- this.nis9Service.setNis9ServiceURL(this.nis9ServiceURL);
87
- this.httpService.setApiKey(this.apiKey);
88
- if (this.addressParams) {
89
- this.prefillData = this.addressParams;
90
- }
91
- };
92
- LibAddressAutocompleteByComponentComponent.prototype.ngOnDestroy = function () {
93
- if (this.subscription) {
94
- this.subscription.unsubscribe();
95
- }
96
- };
97
- LibAddressAutocompleteByComponentComponent.prototype.ngOnChanges = function (changes) {
98
- if (changes) {
99
- // code for tracing
100
- // visibleSuggestionStreetNbCount
101
- if (this.showDebugMessageToConsole) {
102
- this.displayParametersChangesToConsole(changes);
103
- }
104
- if (changes.hasOwnProperty('apiKey') && !changes.apiKey.firstChange) {
105
- this.httpService.setApiKey(this.apiKey);
106
- }
107
- if (changes.hasOwnProperty('addressParams') && !changes.addressParams.firstChange) {
108
- // if (changes.hasOwnProperty('addressParams')) {
109
- this.processingPrefillData = true;
110
- this.enterPrefillMode();
111
- this.selectedAddress = null;
112
- this.notifyAddressComplete();
113
- this.clearWidget();
114
- /*
115
- if (this.localityPrefillData !== null && this.localityPrefillData !== undefined) {
116
- // this.onClearInputEventEmitter(InputNameType.LOCALITY);
117
- this.clearWidget();
118
- }
119
- */
120
- this.boxNumberPrefillData = null;
121
- this.streetNumberPrefillData = null;
122
- this.streetPrefillData = null;
123
- if (this.showDebugMessageToConsole) {
124
- console.log('lib::widget detected prefilling', this.addressParams);
125
- }
126
- this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.LOCALITY;
127
- // this.localityPrefillData = this.addressParams; // as any as PrefillData;
128
- this.localityPrefillData = new PrefillData(this.addressParams);
129
- // Object.assign(this.localityPrefillData, this.addressParams);
130
- if (this.showDebugMessageToConsole) {
131
- console.log('lib::checking locality match... ', this.localityPrefillData);
132
- }
133
- }
134
- }
135
- };
136
- LibAddressAutocompleteByComponentComponent.prototype.displayParametersChangesToConsole = function (changes) {
137
- // messageOption
138
- if (changes.hasOwnProperty('messageOption') && !changes.messageOption.firstChange) {
139
- var wcChanges = changes.messageOption.currentValue;
140
- console.log('lib widget9 - messageOption', wcChanges);
141
- }
142
- // maxSuggestionLocality
143
- if (changes.hasOwnProperty('maxSuggestionLocality') && !changes.maxSuggestionLocality.firstChange) {
144
- var wcChanges = changes.maxSuggestionLocality.currentValue;
145
- console.log('lib widget9 - maxSuggestionLocality', wcChanges);
146
- }
147
- // visibleSuggestionLocalityCount
148
- if (changes.hasOwnProperty('visibleSuggestionLocalityCount') && !changes.visibleSuggestionLocalityCount.firstChange) {
149
- var wcChanges = changes.visibleSuggestionLocalityCount.currentValue;
150
- console.log('lib widget9 - visibleSuggestionLocalityCount', wcChanges);
151
- }
152
- // sortCriteriaLocality
153
- if (changes.hasOwnProperty('sortCriteriaLocality') && !changes.sortCriteriaLocality.firstChange) {
154
- var wcChanges = changes.sortCriteriaLocality.currentValue;
155
- console.log('lib widget9 - sortCriteriaLocality', wcChanges);
156
- }
157
- // maxSuggestionStreet
158
- if (changes.hasOwnProperty('maxSuggestionStreet') && !changes.maxSuggestionStreet.firstChange) {
159
- var wcChanges = changes.maxSuggestionStreet.currentValue;
160
- console.log('lib widget9 - maxSuggestionStreet', wcChanges);
161
- }
162
- // visibleSuggestionStreetCount
163
- if (changes.hasOwnProperty('visibleSuggestionStreetCount') && !changes.visibleSuggestionStreetCount.firstChange) {
164
- var wcChanges = changes.visibleSuggestionStreetCount.currentValue;
165
- console.log('lib widget9 - visibleSuggestionStreetCount', wcChanges);
166
- }
167
- // sortCriteriaStreet
168
- if (changes.hasOwnProperty('sortCriteriaStreet') && !changes.sortCriteriaStreet.firstChange) {
169
- var wcChanges = changes.sortCriteriaStreet.currentValue;
170
- console.log('lib widget9 - sortCriteriaStreet', wcChanges);
171
- }
172
- // maxSuggestionStreetNb
173
- if (changes.hasOwnProperty('maxSuggestionStreetNb') && !changes.maxSuggestionStreetNb.firstChange) {
174
- var wcChanges = changes.maxSuggestionStreetNb.currentValue;
175
- console.log('lib widget9 - maxSuggestionStreetNb', wcChanges);
176
- }
177
- // visibleSuggestionStreetNbCount
178
- if (changes.hasOwnProperty('visibleSuggestionStreetNbCount') && !changes.visibleSuggestionStreetNbCount.firstChange) {
179
- var wcChanges = changes.visibleSuggestionStreetNbCount.currentValue;
180
- console.log('lib widget9 - visibleSuggestionStreetNbCount', wcChanges);
181
- }
182
- // sortCriteriaStreetNb
183
- if (changes.hasOwnProperty('sortCriteriaStreetNb') && !changes.sortCriteriaStreetNb.firstChange) {
184
- var wcChanges = changes.sortCriteriaStreetNb.currentValue;
185
- console.log('lib widget9 - sortCriteriaStreetNb', wcChanges);
186
- }
187
- // maxSuggestionBoxNb
188
- if (changes.hasOwnProperty('maxSuggestionBoxNb') && !changes.maxSuggestionBoxNb.firstChange) {
189
- var wcChanges = changes.maxSuggestionBoxNb.currentValue;
190
- console.log('lib widget9 - maxSuggestionBoxNb', wcChanges);
191
- }
192
- // visibleSuggestionBoxNbCount
193
- if (changes.hasOwnProperty('visibleSuggestionBoxNbCount') && !changes.visibleSuggestionBoxNbCount.firstChange) {
194
- var wcChanges = changes.visibleSuggestionBoxNbCount.currentValue;
195
- console.log('lib widget9 - visibleSuggestionBoxNbCount', wcChanges);
196
- }
197
- // sortCriteriaBoxNb
198
- if (changes.hasOwnProperty('sortCriteriaBoxNb') && !changes.sortCriteriaBoxNb.firstChange) {
199
- var wcChanges = changes.sortCriteriaBoxNb.currentValue;
200
- console.log('lib widget9 - sortCriteriaBoxNb', wcChanges);
201
- }
202
- };
203
- LibAddressAutocompleteByComponentComponent.prototype.clearWidget = function () {
204
- this.autocompleteBoxNb.clearWidget();
205
- this.autocompleteStreetNb.clearWidget();
206
- this.autocompleteStreet.clearWidget();
207
- this.autocompleteLocality.clearWidget();
208
- };
209
- LibAddressAutocompleteByComponentComponent.prototype.changeMinLevel = function (minLevel) {
210
- this.minLevel = minLevel;
211
- };
212
- // Called by the specific buttons in the app
213
- LibAddressAutocompleteByComponentComponent.prototype.onClearInput = function (focus) {
214
- if (this.showDebugMessageToConsole) {
215
- console.log('lib::onClearInput', focus);
216
- }
217
- /*
218
- if (focus === null || focus === undefined) {
219
- return;
220
- }*/
221
- this.quitPrefillMode();
222
- var setFocus = (focus === null || focus === undefined) ? false : focus.setFocus;
223
- switch (this.minLevel) {
224
- case 1:
225
- this.boxNumber = '';
226
- this.autocompleteBoxNb.clearInput(setFocus, false);
227
- this.clearInputEventEmitter.emit('BOX_NUMBER');
228
- break;
229
- case 2:
230
- this.boxNumber = '';
231
- this.streetNumber = '';
232
- this.autocompleteBoxNb.searchText = '';
233
- this.autocompleteBoxNb.streetNumber = '';
234
- this.autocompleteBoxNb.clearInput(setFocus, false);
235
- this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);
236
- this.clearInputEventEmitter.emit('STREET_NUMBER');
237
- break;
238
- case 3:
239
- this.boxNumber = '';
240
- this.streetNumber = '';
241
- this.street = '';
242
- this.autocompleteBoxNb.searchText = '';
243
- this.autocompleteBoxNb.streetNumber = '';
244
- this.autocompleteBoxNb.clearInput(setFocus, false);
245
- this.autocompleteBoxNb.clearWidget();
246
- this.autocompleteStreetNb.searchText = '';
247
- this.autocompleteStreetNb.streetName = '';
248
- this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);
249
- this.autocompleteStreet.clearInput(setFocus, false);
250
- this.clearInputEventEmitter.emit('STREET');
251
- break;
252
- default:
253
- // Box number
254
- this.boxNumber = '';
255
- if (this.autocompleteBoxNb) {
256
- this.autocompleteBoxNb.searchText = '';
257
- this.autocompleteBoxNb.streetNumber = '';
258
- this.autocompleteBoxNb.clearInput(setFocus, false);
259
- }
260
- // Street number
261
- this.streetNumber = '';
262
- if (this.autocompleteStreetNb) {
263
- this.autocompleteStreetNb.searchText = '';
264
- this.autocompleteStreetNb.streetName = '';
265
- this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);
266
- }
267
- // Street name
268
- this.street = '';
269
- if (this.autocompleteStreet) {
270
- this.autocompleteStreet.searchText = '';
271
- this.autocompleteStreet.clearInput(setFocus, false);
272
- }
273
- // Locality
274
- this.locality = '';
275
- if (this.autocompleteLocality) {
276
- this.autocompleteLocality.searchText = '';
277
- this.autocompleteLocality.clearInput(setFocus, false);
278
- }
279
- this.clearInputEventEmitter.emit('LOCALITY');
280
- break;
281
- }
282
- };
283
- LibAddressAutocompleteByComponentComponent.prototype.getBoxPrefix = function () {
284
- var prefix = '';
285
- switch (this.selectedLanguage) {
286
- case 'fr':
287
- prefix = 'BTE';
288
- break;
289
- case 'nl':
290
- prefix = 'BUS';
291
- break;
292
- default:
293
- prefix = 'BOX';
294
- break;
295
- }
296
- return prefix;
297
- };
298
- LibAddressAutocompleteByComponentComponent.prototype.notifyAddressComplete = function () {
299
- var _this = this;
300
- // console.log('notify for address complete');
301
- if (this.showDebugMessageToConsole) {
302
- console.log('notifyAddressComplete', this.selectedAddress, 'nis9InResponse:' + this.nis9InResponse, typeof this.nis9InResponse);
303
- }
304
- if ((this.nis9InResponse === true || '' + this.nis9InResponse === 'true') && this.selectedAddress.hasOwnProperty('latitude') && this.selectedAddress.hasOwnProperty('longitude')) {
305
- var latitude = this.selectedAddress.latitude;
306
- var longitude = this.selectedAddress.longitude;
307
- if (this.showDebugMessageToConsole)
308
- console.log('calling nis9 service to get nis9 data (1):', longitude, latitude);
309
- this.nis9Service.determineNis9Data(longitude, latitude)
310
- .subscribe(function (data) {
311
- console.log('nis DATA:', data);
312
- /*
313
- nis DATA:
314
- {Status: 'success', data: Array(1)}
315
- Status: "success"
316
- data: ['25112A21-']
317
- */
318
- if (data !== undefined && data !== null && data.hasOwnProperty('Status') && data.Status === 'success') {
319
- var nis9Data = data.data;
320
- if (Array.isArray(nis9Data) && nis9Data.length === 1) {
321
- _this.selectedAddress.nis9 = nis9Data[0];
322
- }
323
- }
324
- _this.addressCompleteEventEmitter.emit(_this.selectedAddress);
325
- _this.emittedAddress = _this.selectedAddress;
326
- _this.updatePostalCodeLocality(_this.emittedAddress);
327
- });
328
- }
329
- else {
330
- if (this.showDebugMessageToConsole)
331
- console.log('NOT calling nis9 service to get nis9 data (1)');
332
- this.addressCompleteEventEmitter.emit(this.selectedAddress);
333
- this.emittedAddress = this.selectedAddress;
334
- this.updatePostalCodeLocality(this.emittedAddress);
335
- }
336
- };
337
- LibAddressAutocompleteByComponentComponent.prototype.onClearInputEventEmitter = function (event) {
338
- if (this.showDebugMessageToConsole) {
339
- console.log('lib::onClearInputEventEmitter', event);
340
- }
341
- this.quitPrefillMode();
342
- var nextAddress = this.selectedAddress; // this.emittedAddress;
343
- if (event === InputNameType.LOCALITY) {
344
- // Box number
345
- this.boxNumber = '';
346
- if (this.autocompleteBoxNb) {
347
- this.autocompleteBoxNb.searchText = '';
348
- this.autocompleteBoxNb.streetNumber = '';
349
- this.autocompleteBoxNb.clearInput(false, false);
350
- }
351
- // Street number
352
- this.streetNumber = '';
353
- if (this.autocompleteStreetNb) {
354
- this.autocompleteStreetNb.searchText = '';
355
- this.autocompleteStreetNb.streetName = '';
356
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
357
- }
358
- // Street name
359
- this.street = '';
360
- if (this.autocompleteStreet) {
361
- this.autocompleteStreet.searchText = '';
362
- this.autocompleteStreet.clearInput(false, false);
363
- }
364
- // Locality
365
- this.locality = '';
366
- if (this.autocompleteLocality) {
367
- this.autocompleteLocality.searchText = '';
368
- this.autocompleteLocality.clearInput(false, false);
369
- }
370
- nextAddress = null;
371
- }
372
- else if (event === InputNameType.STREET) {
373
- // Box number
374
- this.boxNumber = '';
375
- if (this.autocompleteBoxNb) {
376
- this.autocompleteBoxNb.searchText = '';
377
- this.autocompleteBoxNb.streetNumber = '';
378
- this.autocompleteBoxNb.clearInput(false, false);
379
- }
380
- // Street number
381
- this.streetNumber = '';
382
- if (this.autocompleteStreetNb) {
383
- this.autocompleteStreetNb.searchText = '';
384
- this.autocompleteStreetNb.streetName = '';
385
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
386
- }
387
- // Street name
388
- this.street = '';
389
- if (this.autocompleteStreet) {
390
- this.autocompleteStreet.searchText = '';
391
- this.autocompleteStreet.clearInput(false, false);
392
- }
393
- nextAddress = null;
394
- }
395
- else if (event === InputNameType.STREET_NUMBER) {
396
- // Box number
397
- this.boxNumber = '';
398
- if (this.autocompleteBoxNb) {
399
- this.autocompleteBoxNb.searchText = '';
400
- this.autocompleteBoxNb.streetNumber = '';
401
- this.autocompleteBoxNb.clearInput(false, false);
402
- }
403
- // Street number
404
- this.streetNumber = '';
405
- if (this.autocompleteStreetNb) {
406
- this.autocompleteStreetNb.searchText = '';
407
- // this.autocompleteStreetNb.streetName = '';
408
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
409
- }
410
- nextAddress = null;
411
- }
412
- else if (event === InputNameType.BOX_NUMBER) {
413
- // Box number
414
- this.boxNumber = '';
415
- if (this.autocompleteBoxNb) {
416
- this.autocompleteBoxNb.searchText = '';
417
- // this.autocompleteBoxNb.streetNumber = '';
418
- this.autocompleteBoxNb.clearInput(false, false);
419
- }
420
- // Attention: if not-in-list don't reset the address, just modify it
421
- var addressIsNotInList = nextAddress !== undefined && nextAddress !== null
422
- && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true
423
- ? true : false;
424
- /*
425
- if (addressIsNotInList)
426
- {
427
- delete nextAddress.boxNumber;
428
- nextAddress.isCompleteNotificationDone = false;
429
- if (this.streetNumberAddress !== null )
430
- {
431
- console.warn('reset box on not-in-list', this.streetNumberAddress);
432
-
433
- }
434
- }
435
- else
436
- {
437
- nextAddress = null;
438
- }
439
- */
440
- nextAddress = this.streetNumberAddress !== null ? this.streetNumberAddress : null;
441
- /*
442
- const addressIsNotInList
443
- = nextAddress !== null && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true
444
- ? true : false;
445
- */
446
- var addressIsComplete = nextAddress !== undefined && nextAddress !== null
447
- && nextAddress.hasOwnProperty('isComplete') && nextAddress.isComplete === true ? true : false;
448
- this.autocompleteStreetNb.addressIsComplete = addressIsComplete;
449
- }
450
- this.clearInputEventEmitter.emit(event);
451
- if (this.emittedAddress !== null) {
452
- if (nextAddress !== undefined && nextAddress !== null && nextAddress.hasOwnProperty('latitude') && nextAddress.hasOwnProperty('longitude')) {
453
- var latitude = nextAddress.latitude;
454
- var longitude = nextAddress.longitude;
455
- if (this.showDebugMessageToConsole)
456
- console.log('calling nis9 service to get nis9 data (2)', longitude, latitude);
457
- }
458
- else {
459
- if (this.showDebugMessageToConsole)
460
- console.log('NOT calling nis9 service to get nis9 data (2)');
461
- }
462
- this.addressCompleteEventEmitter.emit(nextAddress);
463
- this.emittedAddress = nextAddress;
464
- }
465
- // gka
466
- /*
467
- if (event === InputNameType.LOCALITY)
468
- {
469
- this.minLevel = ADDRESSLEVEL.LOCALITY;
470
- this.boxNumberPrefillData = null;
471
- this.streetNumberPrefillData = null;
472
- this.streetPrefillData = null;
473
- this.localityPrefillData = null;
474
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
475
- this.locality = '';
476
- this.postalCode = '';
477
- this.street = null;
478
- this.streetNumber = null;
479
- this.boxNumber = null;
480
- this.autocompleteBoxNb.clearInput(false, false);
481
- this.autocompleteBoxNb.streetName = '';
482
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
483
- this.autocompleteStreetNb.streetName = '';
484
- this.autocompleteStreet.clearInput(false, false);
485
- this.autocompleteStreet.locality = '';
486
- this.autocompleteLocality.clearInput(false, false);
487
- }
488
- if (event === InputNameType.STREET)
489
- {
490
- this.minLevel = ADDRESSLEVEL.STREET;
491
- this.boxNumberPrefillData = null;
492
- this.streetNumberPrefillData = null;
493
- this.streetPrefillData = null;
494
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
495
- this.street = null;
496
- this.streetNumber = null;
497
- this.boxNumber = null;
498
- this.autocompleteBoxNb.clearInput(false, false);
499
- this.autocompleteBoxNb.streetName = '';
500
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
501
- this.autocompleteStreetNb.streetName = '';
502
- this.autocompleteStreet.clearInput(false, false);
503
- // this.autocompleteLocality.clearInput(false, false);
504
- }
505
- if (event === InputNameType.STREET_NUMBER)
506
- {
507
- this.minLevel = ADDRESSLEVEL.STREET_NUMBER;
508
- this.boxNumberPrefillData = null;
509
- this.streetNumberPrefillData = null;
510
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
511
- this.streetNumber = null;
512
- this.boxNumber = null;
513
- this.autocompleteBoxNb.clearInput(false, false);
514
- this.autocompleteBoxNb.streetName = '';
515
- this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
516
- // this.autocompleteStreet.clearInput(false, false);
517
- // this.autocompleteLocality.clearInput(false, false);
518
- }
519
- if (event === InputNameType.BOX_NUMBER)
520
- {
521
- this.minLevel = ADDRESSLEVEL.BOX_NUMBER;
522
- this.boxNumberPrefillData = null;
523
- this.boxNumber = null;
524
- // this.clearInput(focus: {setFocus: boolean, timestamp: Date});
525
- this.autocompleteBoxNb.clearInput(false, false);
526
- // this.autocompleteStreetNb.onClearStreetNumberInput(false, false);
527
- // this.autocompleteStreet.clearInput(false, false);
528
- // this.autocompleteLocality.clearInput(false, false);
529
- }
530
- */
531
- };
532
- LibAddressAutocompleteByComponentComponent.prototype.resetLocality = function (event) {
533
- this.postalCode = '';
534
- this.locality = '';
535
- this.quitPrefillMode();
536
- this.onClearInputEventEmitter(InputNameType.STREET);
537
- this.setAddress(null, 4);
538
- };
539
- LibAddressAutocompleteByComponentComponent.prototype.resetStreet = function (event) {
540
- this.street = '';
541
- this.quitPrefillMode();
542
- this.onClearInputEventEmitter(InputNameType.STREET_NUMBER);
543
- this.autocompleteStreetNb.addressIsComplete = false;
544
- this.autocompleteStreetNb.streetName = '';
545
- this.setAddress(null, 3);
546
- };
547
- LibAddressAutocompleteByComponentComponent.prototype.resetStreetNumber = function (event, resetAddress) {
548
- if (resetAddress === void 0) { resetAddress = false; }
549
- // console.log('reset street numner!', event, resetAddress);
550
- this.streetNumber = '';
551
- this.quitPrefillMode();
552
- this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);
553
- this.autocompleteBoxNb.addressIsComplete = false;
554
- this.autocompleteBoxNb.streetNumber = '';
555
- this.setAddress(null, 2);
556
- // $$ 7 this.setAddress(null, 2); // $$ ?????
557
- /*
558
- if (resetAddress === true) {
559
- this.setAddress(/ *null* / this.selectedAddress);
560
- }*/
561
- };
562
- LibAddressAutocompleteByComponentComponent.prototype.resetBoxNumber = function (event, resetAddress) {
563
- if (resetAddress === void 0) { resetAddress = false; }
564
- // console.log('reset street numner!', event, resetAddress);
565
- this.boxNumber = '';
566
- this.quitPrefillMode();
567
- this.autocompleteBoxNb.addressIsComplete = false;
568
- this.setAddress(null, 1);
569
- // this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);
570
- // $$ 7 this.setAddress(null, 1); // $$ ?????
571
- /*
572
- if (resetAddress === true) {
573
- this.setAddress(/ *null* / this.selectedAddress);
574
- }*/
575
- };
576
- LibAddressAutocompleteByComponentComponent.prototype.enterPrefillMode = function () {
577
- if (this.showDebugMessageToConsole) {
578
- console.log('lib::enterPrefillMode()');
579
- }
580
- if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality) {
581
- this.autocompleteBoxNb.prefilling = true;
582
- this.autocompleteStreetNb.prefilling = true;
583
- this.autocompleteStreet.prefilling = true;
584
- this.autocompleteLocality.prefilling = true;
585
- this.autocompleteStreet.locality = '';
586
- this.autocompleteStreetNb.streetName = '';
587
- this.autocompleteBoxNb.streetNumber = '';
588
- }
589
- };
590
- LibAddressAutocompleteByComponentComponent.prototype.quitPrefillMode = function () {
591
- if (this.showDebugMessageToConsole) {
592
- console.log('lib::quitPrefillMode()');
593
- }
594
- if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality) {
595
- this.autocompleteBoxNb.prefilling = false;
596
- this.autocompleteStreetNb.prefilling = false;
597
- this.autocompleteStreet.prefilling = false;
598
- this.autocompleteLocality.prefilling = false;
599
- }
600
- this.processingPrefillData = false;
601
- };
602
- LibAddressAutocompleteByComponentComponent.prototype.setAddress = function (address, level) {
603
- if (this.showDebugMessageToConsole) {
604
- console.log('lib::setAddress - address part, level', address, level);
605
- }
606
- /* $$ $$
607
- if (this.selectedAddress && !address) {
608
- // console.log('reset address!');
609
- this.selectedAddress = null;
610
- this.streetAddress = null;
611
- this.streetNumberAddress = null;
612
- this.notifyAddressComplete();
613
- return;
614
- }
615
- */
616
- if (address === null || address === undefined) {
617
- var doNotify = (this.selectedAddress !== null && this.selectedAddress !== undefined) ? true : false;
618
- this.selectedAddress = null;
619
- this.autocompleteStreetNb.addressIsComplete = false;
620
- this.autocompleteBoxNb.addressIsComplete = false;
621
- if (doNotify) {
622
- this.notifyAddressComplete();
623
- }
624
- }
625
- if (address) {
626
- delete address.messages;
627
- this.selectedAddress = address;
628
- this.updateCompleteAddress();
629
- this.postalCode = address.postalCode ? address.postalCode : '';
630
- this.locality = address.localityName ? address.localityName : '';
631
- this.street = address.streetName ? address.streetName : '';
632
- // const notInList = address['not-in-list'];
633
- // const isNotInList = notInList !== null && notInList !== undefined && notInList === true;
634
- /*
635
- if (address.houseNumber) {
636
- if (!address.isComplete || isNotInList) {
637
- this.streetNumber = address.houseNumber ? address.houseNumber : '';
638
- } else {
639
- if (!address.boxNumber) {
640
- // console.log('calling reset street number !');
641
- if ( !this.processingPrefillData ) {
642
- this.resetStreetNumber(null, false);
643
- }
644
- // this.streetNumber = '';
645
- }
646
- }
647
- }
648
- */
649
- var addressIsComplete = address !== null && address !== undefined
650
- && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;
651
- var addressIsNotInList = address !== null && address !== undefined
652
- && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;
653
- switch (level) {
654
- // Locality / Municipality and POstalCode
655
- case 4:
656
- this.updatePostalCodeLocality(address);
657
- /*
658
- this.autocompleteStreet.clearWidget();
659
- this.autocompleteStreetNb.searchText = '';
660
- this.autocompleteStreetNb.clearWidget();
661
- this.autocompleteStreetNb.searchText = '';
662
- this.autocompleteBoxNb.clearWidget();
663
- this.autocompleteBoxNb.searchText = '';
664
- */
665
- this.streetAddress = null;
666
- this.streetNumberAddress = null;
667
- //
668
- this.autocompleteStreet.searchText = '';
669
- this.autocompleteStreetNb.searchText = '';
670
- this.autocompleteStreetNb.streetName = '';
671
- this.autocompleteBoxNb.searchText = '';
672
- this.autocompleteBoxNb.streetNumber = '';
673
- break;
674
- // Street Name
675
- case 3:
676
- this.updatePostalCodeLocality(address);
677
- this.updateStreetName(address);
678
- this.streetAddress = address;
679
- this.streetNumberAddress = null;
680
- /*
681
- this.autocompleteStreetNb.clearWidget();
682
- this.autocompleteStreetNb.searchText = '';
683
- this.autocompleteBoxNb.clearWidget();
684
- this.autocompleteBoxNb.searchText = '';
685
- */
686
- this.autocompleteStreetNb.searchText = '';
687
- this.autocompleteBoxNb.searchText = '';
688
- this.autocompleteBoxNb.streetNumber = '';
689
- break;
690
- // STREET Number
691
- case 2:
692
- this.updatePostalCodeLocality(address);
693
- this.updateStreetName(address);
694
- this.updateStreetNumber(address); // $$
695
- this.streetAddress = address;
696
- this.streetNumberAddress = address;
697
- if (address.hasOwnProperty('isComplete') && address.isComplete === true) {
698
- this.autocompleteStreetNb.addressIsComplete = true;
699
- if (addressIsNotInList) {
700
- this.autocompleteBoxNb.streetNumber = address.houseNumber;
701
- }
702
- else {
703
- this.autocompleteBoxNb.streetNumber = '';
704
- }
705
- }
706
- else {
707
- this.autocompleteBoxNb.streetNumber = address.houseNumber;
708
- }
709
- /*
710
- this.autocompleteBoxNb.clearWidget();
711
- this.autocompleteBoxNb.searchText = '';
712
- */
713
- this.autocompleteBoxNb.searchText = '';
714
- break;
715
- // BOX Number
716
- case 1:
717
- {
718
- if (addressIsNotInList) {
719
- this.autocompleteStreetNb.addressIsComplete = false;
720
- }
721
- }
722
- break;
723
- default:
724
- break;
725
- }
726
- if (this.selectedAddress && this.selectedAddress.isComplete === undefined) {
727
- this.selectedAddress.isComplete = false;
728
- }
729
- /*
730
- if (address.isComplete === true ) {
731
- if (!this.selectedAddress.isCompleteNotificationDone) {
732
- this.selectedAddress.isCompleteNotificationDone = true;
733
- this.notifyAddressComplete();
734
- }
735
- } else {
736
- this.notifyAddressComplete();
737
- }
738
- */
739
- this.selectedAddress.isCompleteNotificationDone = true;
740
- this.notifyAddressComplete();
741
- }
742
- };
743
- LibAddressAutocompleteByComponentComponent.prototype.setLanguage = function (lang) {
744
- this.selectedLanguage = lang;
745
- };
746
- LibAddressAutocompleteByComponentComponent.prototype.setValidationMessage = function (/*message: string*/ message) {
747
- this.validationMessage = message;
748
- if (this.validationMessageOptionType === ValidationMessageOptionType.EMIT) {
749
- this.validationMessageEventEmitter.emit(message);
750
- }
751
- };
752
- LibAddressAutocompleteByComponentComponent.prototype.updatePostalCodeLocality = function (address) {
753
- if (address && address.postalCode && address.localityName) {
754
- this.postalCodeLocality = address.postalCode + ' ' + address.localityName;
755
- this.autocompleteLocality.searchText = this.postalCodeLocality;
756
- }
757
- };
758
- LibAddressAutocompleteByComponentComponent.prototype.updateStreetName = function (address) {
759
- if (address && address.streetName) {
760
- this.streetNameInput = address.streetName;
761
- }
762
- };
763
- LibAddressAutocompleteByComponentComponent.prototype.updateStreetNumber = function (address) {
764
- if (address && address.houseNumber) {
765
- this.streetNumberInput = address.houseNumber;
766
- }
767
- };
768
- LibAddressAutocompleteByComponentComponent.prototype.updateCompleteAddress = function () {
769
- var concatStr = '';
770
- concatStr += this.selectedAddress.streetName ? this.selectedAddress.streetName + " " : '';
771
- concatStr += this.selectedAddress.houseNumber ? this.selectedAddress.houseNumber + " " : '';
772
- concatStr += this.selectedAddress.boxNumber ? this.getBoxPrefix() + " " + this.selectedAddress.boxNumber + " " : '';
773
- concatStr += this.selectedAddress.postalCode ? this.selectedAddress.postalCode + " " : '';
774
- concatStr += this.selectedAddress.municipalityName ? this.selectedAddress.municipalityName + " " : '';
775
- this.completeAddress = concatStr;
776
- };
777
- LibAddressAutocompleteByComponentComponent.prototype.setValidationMessageOptionFromInput = function (option) {
778
- this.validationMessageOptionType = option.validationType;
779
- // console.log('addresse autocomplete - validation message option', this.validationMessageOptionType);
780
- };
781
- LibAddressAutocompleteByComponentComponent.prototype.onLocalityPrefillEvent = function (event) {
782
- if (this.showDebugMessageToConsole) {
783
- console.log('lib::locality prefill event received:', event);
784
- }
785
- /*
786
- if (event.perfectMatch)
787
- {
788
- this.addressParams.minLevel = / *3* / ADDRESSLEVEL.STREET;
789
- this.streetParams = this.addressParams;
790
- }
791
- */
792
- var data = event.prefillData;
793
- if (event.prefillData.prefillMunicipalityPerfectMatchFound === true) {
794
- var suggestion = data.prefillMunicipalityPerfectMatchSuggestion;
795
- var address = suggestion.address;
796
- this.updatePostalCodeLocality(address);
797
- this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.STREET;
798
- // this.localityPrefillData = this.addressParams; // as any as PrefillData;
799
- // this.localityPrefillData = new PrefillData(this.addressParams);
800
- // Object.assign(this.localityPrefillData, this.addressParams);
801
- this.prefillData = event.prefillData;
802
- this.prefillData.ts = new Date();
803
- this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET;
804
- // Be sure to propagate the localityName in place of the municipalityName !
805
- var suggestionAddress = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;
806
- var suggestionAddressLocalityName = suggestionAddress.localityName;
807
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
808
- this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
809
- // this.updatePostalCodeLocality(suggestionAddress);
810
- var streetName = this.prefillData.parameters.streetName;
811
- if (streetName === null || streetName === undefined || streetName === '') {
812
- this.setAddress(address, ADDRESSLEVEL.LOCALITY);
813
- // this.quitPrefillMode();
814
- // this.updatePostalCodeLocality(suggestionAddress);
815
- }
816
- /*
817
- const streetName = this.prefillData.parameters.streetName;
818
- if (streetName === null || streetName === undefined || streetName === '')
819
- {
820
- this.setAddress(address, ADDRESSLEVEL.LOCALITY);
821
- this.quitPrefillMode();
822
- // this.updatePostalCodeLocality(suggestionAddress);
823
- }
824
- else
825
- {
826
- if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking street match... ', this.prefillData); }
827
- this.streetPrefillData = this.prefillData;
828
- }
829
- */
830
- this.streetPrefillData = this.prefillData;
831
- }
832
- else {
833
- // const cpAndLocality = this.prefillData.parameters.postalCode + this.prefillData.parameters.municipalityName;
834
- var cpAndLocality = data.parameters.postalCode + data.parameters.municipalityName;
835
- this.autocompleteStreet.locality = '';
836
- if (cpAndLocality === null || cpAndLocality === undefined || cpAndLocality.length === 0) {
837
- this.setAddress(null, ADDRESSLEVEL.LOCALITY);
838
- }
839
- this.quitPrefillMode();
840
- }
841
- };
842
- LibAddressAutocompleteByComponentComponent.prototype.onStreetPrefillEvent = function (event) {
843
- if (this.showDebugMessageToConsole) {
844
- console.log('lib::street: prefill event received', event);
845
- }
846
- /*
847
- const data: PrefillData = event.prefillData;
848
- if (data.prefillStreetPerfectMatchFound === true )
849
- {
850
- console.log('lib::onStreetPrefillEvent: MATCH FOUND', data);
851
- this.postalCodeLocality = 'TRUC-MUCHE';
852
- this.postalCodeLocality = 'TRUC-MUCHE 2';
853
- this.autocompleteLocality.searchText = this.postalCodeLocality;
854
- }
855
- */
856
- var data = event.prefillData;
857
- if (event.prefillData.prefillStreetPerfectMatchFound === true) {
858
- // if (this.showDebugMessageToConsole) { console.log('lib::onStreetPrefillEvent: MATCH FOUND', data); }
859
- var suggestion = data.prefillStreetPerfectMatchSuggestion;
860
- var address = suggestion.address;
861
- this.updateStreetName(address);
862
- this.addressParams.minLevel = ADDRESSLEVEL.STREET_NUMBER;
863
- // this.localityPrefillData = this.addressParams; // as any as PrefillData;
864
- // this.localityPrefillData = new PrefillData(this.addressParams);
865
- // Object.assign(this.localityPrefillData, this.addressParams);
866
- this.prefillData = event.prefillData;
867
- this.prefillData.ts = new Date();
868
- this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET_NUMBER;
869
- var suggestionAddress = this.prefillData.prefillStreetPerfectMatchSuggestion.address;
870
- var suggestionAddressLocalityName = suggestionAddress.localityName;
871
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
872
- this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
873
- this.prefillData.parameters.streetName = suggestionAddress.streetName;
874
- // this.updatePostalCodeLocality(suggestionAddress);
875
- // this.updatePostalCodeLocality(suggestionAddress);
876
- var streetNumber = this.prefillData.parameters.streetNumber;
877
- if (streetNumber === null || streetNumber === undefined || streetNumber === '') {
878
- this.setAddress(address, ADDRESSLEVEL.STREET);
879
- // this.quitPrefillMode();
880
- }
881
- /*
882
- const streetNumber = this.prefillData.parameters.streetNumber;
883
- if (streetNumber === null || streetNumber === undefined || streetNumber === '')
884
- {
885
- this.setAddress(address, ADDRESSLEVEL.STREET);
886
- this.quitPrefillMode();
887
- }
888
- else
889
- {
890
- if (this.showDebugMessageToConsole) {console.log('lib::prefill: trigger checking street number match... ', this.prefillData);}
891
- this.streetNumberPrefillData = this.prefillData;
892
- }
893
- */
894
- this.streetNumberPrefillData = this.prefillData;
895
- }
896
- else {
897
- var prefillStreetName = this.prefillData.parameters.streetName;
898
- var address = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;
899
- this.autocompleteStreetNb.streetName = '';
900
- if (this.showDebugMessageToConsole) {
901
- console.error('lib::onStreetPrefillEvent - NO MATCH AT STREET LEVEL', prefillStreetName);
902
- }
903
- if (prefillStreetName === null || prefillStreetName === undefined || prefillStreetName.length === 0) {
904
- // if (this.showDebugMessageToConsole) {console.log('lib::onStreetPrefillEvent: NO MATCH FOUND - set address', data, address); }
905
- this.setAddress(address, ADDRESSLEVEL.LOCALITY);
906
- }
907
- else {
908
- // address.streetName = prefillStreetName;
909
- address.searchBarString = prefillStreetName;
910
- this.setAddress(address, ADDRESSLEVEL.STREET);
911
- }
912
- this.quitPrefillMode();
913
- }
914
- };
915
- LibAddressAutocompleteByComponentComponent.prototype.onStreetNumberPrefillEvent = function (event) {
916
- if (this.showDebugMessageToConsole) {
917
- console.log('lib::street number prefill event received:', event);
918
- }
919
- var data = event.prefillData;
920
- if (data.prefillStreetNumberPerfectMatchFound === true) {
921
- var suggestion = data.prefillStreetNumberPerfectMatchSuggestion;
922
- var address = suggestion.address;
923
- this.updateStreetNumber(address);
924
- this.autocompleteStreetNb.selectedAddress = address;
925
- var addressIsComplete = address && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;
926
- var addressIsNotInList = address && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;
927
- if (addressIsComplete && !addressIsNotInList) {
928
- // found address - perfect matchat street number level
929
- // Nothing to do anymore
930
- this.autocompleteStreetNb.addressIsComplete = true;
931
- this.quitPrefillMode();
932
- }
933
- else {
934
- this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;
935
- this.prefillData = event.prefillData;
936
- this.prefillData.ts = new Date();
937
- this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;
938
- // const suggestionAddressLocalityName
939
- // = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address.localityName;
940
- var suggestionAddress = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
941
- var suggestionAddressLocalityName = suggestionAddress.localityName;
942
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
943
- this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;
944
- this.prefillData.parameters.postalCode = suggestionAddress.postalCode;
945
- this.prefillData.parameters.streetName = suggestionAddress.streetName;
946
- this.prefillData.parameters.streetNumber = suggestionAddress.houseNumber;
947
- // this.updatePostalCodeLocality(suggestionAddress);
948
- // this.updatePostalCodeLocality(suggestionAddress);
949
- var boxNumber = this.prefillData.parameters.boxNumber;
950
- if (!addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '')) {
951
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
952
- // this.quitPrefillMode();
953
- }
954
- /*
955
- const boxNumber = this.prefillData.parameters.boxNumber;
956
- if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )
957
- {
958
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
959
- this.quitPrefillMode();
960
- }
961
- else
962
- {
963
- if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking box number match... ', this.prefillData); }
964
- this.boxNumberPrefillData = this.prefillData;
965
- }
966
- */
967
- this.boxNumberPrefillData = this.prefillData;
968
- }
969
- }
970
- else {
971
- var prefillStreetNumber = this.prefillData.parameters.streetNumber;
972
- var address = this.prefillData.prefillStreetPerfectMatchSuggestion.address;
973
- this.autocompleteBoxNb.streetNumber = '';
974
- if (prefillStreetNumber === null || prefillStreetNumber === undefined || prefillStreetNumber.length === 0) {
975
- this.setAddress(address, ADDRESSLEVEL.STREET);
976
- }
977
- else {
978
- // address.houseNumber = prefillStreetNumber;
979
- address.searchBarString = prefillStreetNumber;
980
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
981
- }
982
- this.quitPrefillMode();
983
- }
984
- };
985
- LibAddressAutocompleteByComponentComponent.prototype.onBoxNumberPrefillEvent = function (event) {
986
- if (this.showDebugMessageToConsole) {
987
- console.log('lib::prefill: box number event received:', event);
988
- }
989
- var data = event.prefillData;
990
- if (data.prefillBoxNumberPerfectMatchFound === true) {
991
- var suggestion = data.prefillBoxNumberPerfectMatchSuggestion;
992
- var address = suggestion.address;
993
- this.autocompleteBoxNb.selectedAddress = address;
994
- this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
995
- }
996
- else {
997
- var prefillBoxNumber = this.prefillData.parameters.boxNumber;
998
- var address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;
999
- if (prefillBoxNumber === null || prefillBoxNumber === undefined || prefillBoxNumber.length === 0) {
1000
- this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);
1001
- }
1002
- else {
1003
- // address.boxNumber = prefillBoxNumber;
1004
- address.searchBarString = prefillBoxNumber;
1005
- this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);
1006
- }
1007
- }
1008
- this.quitPrefillMode();
1009
- };
1010
- LibAddressAutocompleteByComponentComponent.ctorParameters = function () { return [
1011
- { type: Nis9Service },
1012
- { type: HttpService }
1013
- ]; };
1014
- __decorate([
1015
- ViewChild(LocalityComponent, { static: false })
1016
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteLocality", void 0);
1017
- __decorate([
1018
- ViewChild(StreetComponent, { static: false })
1019
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteStreet", void 0);
1020
- __decorate([
1021
- ViewChild(StreetNumberComponent, { static: false })
1022
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteStreetNb", void 0);
1023
- __decorate([
1024
- ViewChild(BoxNumberComponent, { static: false })
1025
- ], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteBoxNb", void 0);
1026
- __decorate([
1027
- Input()
1028
- ], LibAddressAutocompleteByComponentComponent.prototype, "inputLang", null);
1029
- __decorate([
1030
- Input()
1031
- ], LibAddressAutocompleteByComponentComponent.prototype, "clearInput", null);
1032
- __decorate([
1033
- Input()
1034
- ], LibAddressAutocompleteByComponentComponent.prototype, "validationMessageOption", null);
1035
- __decorate([
1036
- Input()
1037
- ], LibAddressAutocompleteByComponentComponent.prototype, "defaultLang", void 0);
1038
- __decorate([
1039
- Input()
1040
- ], LibAddressAutocompleteByComponentComponent.prototype, "showDebugMessageToConsole", void 0);
1041
- __decorate([
1042
- Input()
1043
- ], LibAddressAutocompleteByComponentComponent.prototype, "minLevel", void 0);
1044
- __decorate([
1045
- Input()
1046
- ], LibAddressAutocompleteByComponentComponent.prototype, "notInListAllowed", void 0);
1047
- __decorate([
1048
- Input()
1049
- ], LibAddressAutocompleteByComponentComponent.prototype, "addressParams", void 0);
1050
- __decorate([
1051
- Input()
1052
- ], LibAddressAutocompleteByComponentComponent.prototype, "messageOption", void 0);
1053
- __decorate([
1054
- Input()
1055
- ], LibAddressAutocompleteByComponentComponent.prototype, "localityUrl", void 0);
1056
- __decorate([
1057
- Input()
1058
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionLocality", void 0);
1059
- __decorate([
1060
- Input()
1061
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionLocalityCount", void 0);
1062
- __decorate([
1063
- Input()
1064
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaLocality", void 0);
1065
- __decorate([
1066
- Input()
1067
- ], LibAddressAutocompleteByComponentComponent.prototype, "streetUrl", void 0);
1068
- __decorate([
1069
- Input()
1070
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionStreet", void 0);
1071
- __decorate([
1072
- Input()
1073
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionStreetCount", void 0);
1074
- __decorate([
1075
- Input()
1076
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaStreet", void 0);
1077
- __decorate([
1078
- Input()
1079
- ], LibAddressAutocompleteByComponentComponent.prototype, "streetNumberUrl", void 0);
1080
- __decorate([
1081
- Input()
1082
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionStreetNb", void 0);
1083
- __decorate([
1084
- Input()
1085
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionStreetNbCount", void 0);
1086
- __decorate([
1087
- Input()
1088
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaStreetNb", void 0);
1089
- __decorate([
1090
- Input()
1091
- ], LibAddressAutocompleteByComponentComponent.prototype, "boxNumberUrl", void 0);
1092
- __decorate([
1093
- Input()
1094
- ], LibAddressAutocompleteByComponentComponent.prototype, "maxSuggestionBoxNb", void 0);
1095
- __decorate([
1096
- Input()
1097
- ], LibAddressAutocompleteByComponentComponent.prototype, "visibleSuggestionBoxNbCount", void 0);
1098
- __decorate([
1099
- Input()
1100
- ], LibAddressAutocompleteByComponentComponent.prototype, "sortCriteriaBoxNb", void 0);
1101
- __decorate([
1102
- Output()
1103
- ], LibAddressAutocompleteByComponentComponent.prototype, "addressCompleteEventEmitter", void 0);
1104
- __decorate([
1105
- Output()
1106
- ], LibAddressAutocompleteByComponentComponent.prototype, "validationMessageEventEmitter", void 0);
1107
- __decorate([
1108
- Output()
1109
- ], LibAddressAutocompleteByComponentComponent.prototype, "clearInputEventEmitter", void 0);
1110
- __decorate([
1111
- Input()
1112
- ], LibAddressAutocompleteByComponentComponent.prototype, "apiKey", void 0);
1113
- __decorate([
1114
- Input()
1115
- ], LibAddressAutocompleteByComponentComponent.prototype, "isReadonly", void 0);
1116
- __decorate([
1117
- Input()
1118
- ], LibAddressAutocompleteByComponentComponent.prototype, "nis9InResponse", void 0);
1119
- __decorate([
1120
- Input()
1121
- ], LibAddressAutocompleteByComponentComponent.prototype, "nis9ServiceURL", void 0);
1122
- LibAddressAutocompleteByComponentComponent = __decorate([
1123
- Component({
1124
- selector: 'bp-lib-address-autocomplete-by-component',
1125
- template: "\r\n<div class=\"aacwidget-address-container\">\r\n\r\n <div class=\"bpaac-dropdown-validation\" *ngIf=\"validationMessageOptionType === 'SHOW' \">\r\n <div class=\"bpaac-validated-icon\" *ngIf=\"selectedAddress && validationMessage!==null && validationMessage.messageType!==null\"></div>\r\n <!-- {{ validationMessage | translate }} -->\r\n {{ validationMessage.translatedMessage }}\r\n </div>\r\n\r\n <!-- bp-aacwidget-autocomplete-locality -->\r\n <bp-locality class=\"aacwidget-address-locality\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"localityUrl\"\r\n [prefillData]=\"localityPrefillData\"\r\n [labelResourceKey]=\"'common.label.postalCode'\"\r\n [inputText]=\"postalCodeLocality\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [sortCriteria]=\"sortCriteriaLocality\"\r\n [maxSuggesionCount]=\"maxSuggestionLocality\" \r\n [visibleSuggestionCount]=\"visibleSuggestionLocalityCount\"\r\n (addressChanged)=\"setAddress($event, 4)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\" \r\n (textChangeEvent)=\"resetLocality($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onLocalityPrefillEvent($event)\"></bp-locality>\r\n\r\n <bp-street class=\"aacwidget-address-street\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"streetUrl\"\r\n [prefillData]=\"streetPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetName'\"\r\n [inputText]=\"streetNameInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\"\r\n [locality]=\"locality\"\r\n [sortCriteria]=\"sortCriteriaStreet\" \r\n [maxSuggesionCount]=\"maxSuggestionStreet\"\r\n [visibleSuggesionCount]=\"visibleSuggestionStreetCount\"\r\n (addressChanged)=\"setAddress($event, 3)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreet($event)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetPrefillEvent($event)\"></bp-street>\r\n\r\n <bp-street-number class=\"aacwidget-address-streetnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"streetNumberUrl\"\r\n [selectedAddress]=\"streetAddress\"\r\n [prefillData]=\"streetNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.streetNumber'\"\r\n [inputText]=\"streetNumberInput\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\"\r\n [sortCriteria]=\"sortCriteriaStreetNb\"\r\n [maxSuggesionCount]=\"maxSuggestionStreetNb\" \r\n [visibleSuggesionCount]=\"visibleSuggestionStreetNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n (addressChanged)=\"setAddress($event, 2)\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetStreetNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onStreetNumberPrefillEvent($event)\"></bp-street-number>\r\n\r\n <bp-box-number class=\"aacwidget-address-boxnumber\"\r\n [isReadonly]=\"isReadonly\"\r\n [showDebugMessageToConsole]=\"showDebugMessageToConsole\"\r\n [baseUrl]=\"boxNumberUrl\"\r\n [selectedAddress]=\"streetNumberAddress\"\r\n [prefillData]=\"boxNumberPrefillData\"\r\n [labelResourceKey]=\"'common.label.boxNumber'\"\r\n [inputLang]=\"selectedLanguage\"\r\n [messageOption]=\"messageOption\"\r\n [postalCode]=\"postalCode\" \r\n [locality]=\"locality\" \r\n [streetName]=\"street\" \r\n [streetNumber]=\"streetNumber\"\r\n [sortCriteria]=\"sortCriteriaBoxNb\" \r\n [maxSuggesionCount]=\"maxSuggestionBoxNb\"\r\n [visibleSuggesionCount]=\"visibleSuggestionBoxNbCount\"\r\n [notInListAllowed]=\"notInListAllowed\"\r\n (messageChanged)=\"setValidationMessage($event)\"\r\n (addressChanged)=\"setAddress($event, 1)\" \r\n (focusEvent)=\"changeMinLevel($event)\"\r\n (textChangeEvent)=\"resetBoxNumber($event, false)\"\r\n (clearInputEventEmitter)=\"onClearInputEventEmitter($event)\"\r\n (prefillEventEmitter)=\"onBoxNumberPrefillEvent($event)\"></bp-box-number>\r\n</div>",
1126
- styles: [""]
1127
- })
1128
- ], LibAddressAutocompleteByComponentComponent);
1129
- return LibAddressAutocompleteByComponentComponent;
1130
- }());
1131
- export { LibAddressAutocompleteByComponentComponent };
1132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYnBvc3QvYnAtYWRkcmVzcy1hdXRvLWNvbXBsZXRlLWJ5LWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU90RDtJQWdIRSxvREFDVSxXQUF3QixFQUN4QixXQUF3QjtRQUR4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQTNHbEMscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBR3hCLFlBQU8sR0FBRywyRkFBMkYsQ0FBQztRQW9C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QU0sRUFBRTs4RkFBbUU7SUFTNUU7UUFEQyxLQUFLLEVBQUU7OEVBQzBDO0lBS2xEO1FBREMsS0FBSyxFQUFFO2tGQUNTO0lBR2pCO1FBREMsS0FBSyxFQUFFO3NGQUNhO0lBSXJCO1FBREMsS0FBSyxFQUFFO3NGQUNVO0lBOUdQLDBDQUEwQztRQUx0RCxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsMENBQTBDO1lBQ3BELGs4SkFBcUU7O1NBRXRFLENBQUM7T0FDVywwQ0FBMEMsQ0FpcEN0RDtJQUFELGlEQUFDO0NBQUEsQUFqcENELElBaXBDQztTQWpwQ1ksMENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsZWQtcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgfSBmcm9tICcuL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLW9wdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpdHlDb21wb25lbnQgfSBmcm9tICcuL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXRDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC9zdHJlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmVldE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vc3RyZWV0LW51bWJlci9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb3hOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2JveC1udW1iZXIvYm94LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi9lbnVtJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmlzOVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL25pczkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLWxpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGliQWRkcmVzc0F1dG9jb21wbGV0ZUJ5Q29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQFZpZXdDaGlsZChMb2NhbGl0eUNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlTG9jYWxpdHk7XG4gIEBWaWV3Q2hpbGQoU3RyZWV0Q29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVTdHJlZXQ7XG4gIEBWaWV3Q2hpbGQoU3RyZWV0TnVtYmVyQ29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVTdHJlZXROYjtcbiAgQFZpZXdDaGlsZChCb3hOdW1iZXJDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZUJveE5iO1xuXG4gIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBiYXNlVXJsID0gXCJodHRwczovL2FwaS5tYWlsb3BzLmJwb3N0LmNsb3VkL3JvYS1pbmZvL2V4dGVybmFsTWFpbGluZ0FkZHJlc3NQcm9vZmluZ1Jlc3QvYXV0b2NvbXBsZXRlL1wiO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UodmFsKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMub25DbGVhcklucHV0KGZvY3VzKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IHZhbGlkYXRpb25NZXNzYWdlT3B0aW9uKG9wdGlvbjoge3ZhbGlkYXRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUsIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uRnJvbUlucHV0KG9wdGlvbik7XG4gIH1cblxuICBASW5wdXQoKVxuICBkZWZhdWx0TGFuZzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluTGV2ZWw6IG51bWJlcjtcbiAgQElucHV0KCkgbm90SW5MaXN0QWxsb3dlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGFkZHJlc3NQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7XG5cbiAgLy8gTE9DQUxJVFlcbiAgQElucHV0KCkgbG9jYWxpdHlVcmwgPSB0aGlzLmJhc2VVcmwgKyAnbG9jYWxpdHknO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uTG9jYWxpdHkgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFMb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlTG9jYWxpdHk6IHN0cmluZztcbiAgLy8gbG9jYWxpdHlQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGxvY2FsaXR5UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVRcbiAgQElucHV0KCkgc3RyZWV0VXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldCc7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25TdHJlZXQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhU3RyZWV0OiBzdHJpbmc7XG4gIC8vIHN0cmVldFBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgc3RyZWV0UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVQgTlVNQkVSXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgQElucHV0KCkgc3RyZWV0TnVtYmVyVXJsID0gdGhpcy5iYXNlVXJsICsgJ3N0cmVldE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc3Rpb25TdHJlZXROYiA9IDU7XG4gIEBJbnB1dCgpIHZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYVN0cmVldE5iOiBzdHJpbmc7XG4gIC8vIHN0cmVldE51bWJlclBhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgc3RyZWV0TnVtYmVyUHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBCT1ggTlVNQkVSXG4gIEBJbnB1dCgpIGJveE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdib3hOdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uQm94TmIgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFCb3hOYjogc3RyaW5nO1xuICAvLyBib3hQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGJveE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cblxuICBib3hOdW1iZXI6IHN0cmluZztcbiAgY29tcGxldGVBZGRyZXNzOiBzdHJpbmc7XG4gIGVtaXR0ZWRBZGRyZXNzOiBhbnkgPSBudWxsO1xuICBsb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIHNlbGVjdGVkQWRkcmVzczogYW55O1xuICBzdHJlZXQ6IHN0cmluZztcbiAgc3RyZWV0QWRkcmVzczogYW55O1xuICBzdHJlZXROYW1lSW5wdXQ6IHN0cmluZztcbiAgc3RyZWV0TnVtYmVyOiBzdHJpbmc7XG4gIHN0cmVldE51bWJlckFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TnVtYmVySW5wdXQ6IHN0cmluZztcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHttZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nfSA9IHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6ICcnfTtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGU7XG5cblxuICBAT3V0cHV0KCkgYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBwcm9jZXNzaW5nUHJlZmlsbERhdGEgPSBmYWxzZTtcblxuXG4gIC8vIFBhc3MgdGhlIEFQSSBrZXkgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgbGlicmFyeSAhXG4gIEBJbnB1dCgpXG4gIGFwaUtleT0nY3lSa0tPRDczTzFET2RnY0RMTG5zYU9pRGg2T3lPa3QzQkJUNUpVMSc7XG5cblxuICAvLyBzZXQgdGhlIHdpZGdldCBhcyByZWFkb25seSBhbmQgYWRkIE5JUzkgcXVlcnkgcGFyYW1ldGVyXG4gIEBJbnB1dCgpXG4gIGlzUmVhZG9ubHk9ZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbmlzOUluUmVzcG9uc2U9ZmFsc2U7XG5cbiAgLy8gaHR0cHM6Ly9iZ3MuYnBvc3QuYmUvc2V0LXNlbGVjdGlvbi1jaXJjbGU/bG5nPTQuMzYwNTM3NTcyNTQxOTQ4JmxhdD01MC44NDA2MzU4MjgwNjAzNyZyYWRpdXM9MC4wMDFcbiAgQElucHV0KClcbiAgbmlzOVNlcnZpY2VVUkw9Jyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuaXM5U2VydmljZTogTmlzOVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkXG4gIHtcbiAgICB0aGlzLm5pczlTZXJ2aWNlLnNldE5pczlTZXJ2aWNlVVJMKHRoaXMubmlzOVNlcnZpY2VVUkwpO1xuXG4gICAgdGhpcy5odHRwU2VydmljZS5zZXRBcGlLZXkoIHRoaXMuYXBpS2V5ICk7XG4gICAgXG4gICAgaWYgKHRoaXMuYWRkcmVzc1BhcmFtcylcbiAgICB7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpXG4gIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pXG4gICAge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgaWYgKGNoYW5nZXMpXG4gICAge1xuICAgICAgLy8gY29kZSBmb3IgdHJhY2luZ1xuICAgICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheVBhcmFtZXRlcnNDaGFuZ2VzVG9Db25zb2xlKGNoYW5nZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXBpS2V5JykgJiYgIWNoYW5nZXMuYXBpS2V5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0QXBpS2V5KCB0aGlzLmFwaUtleSApO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzc1BhcmFtcycpICYmICFjaGFuZ2VzLmFkZHJlc3NQYXJhbXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhZGRyZXNzUGFyYW1zJykpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmVudGVyUHJlZmlsbE1vZGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgIT09IG51bGwgJiYgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKTtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6d2lkZ2V0IGRldGVjdGVkIHByZWZpbGxpbmcnLCB0aGlzLmFkZHJlc3NQYXJhbXMpOyB9XG4gICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8qNCovIEFERFJFU1NMRVZFTC5MT0NBTElUWTtcbiAgICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAgIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG5ldyBQcmVmaWxsRGF0YSh0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmNoZWNraW5nIGxvY2FsaXR5IG1hdGNoLi4uICcsIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSk7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwbGF5UGFyYW1ldGVyc0NoYW5nZXNUb0NvbnNvbGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcylcbiAge1xuICAgIC8vIG1lc3NhZ2VPcHRpb25cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZU9wdGlvbicpICYmICFjaGFuZ2VzLm1lc3NhZ2VPcHRpb24uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMubWVzc2FnZU9wdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtZXNzYWdlT3B0aW9uJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uTG9jYWxpdHlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvbkxvY2FsaXR5JykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvbkxvY2FsaXR5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Mb2NhbGl0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uTG9jYWxpdHknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnKSAmJiAhY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMudmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc29ydENyaXRlcmlhTG9jYWxpdHlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhTG9jYWxpdHknKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFMb2NhbGl0eS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFMb2NhbGl0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFMb2NhbGl0eScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvblN0cmVldFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uU3RyZWV0JykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvblN0cmVldC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25TdHJlZXQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnKSAmJiAhY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYVN0cmVldFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFTdHJlZXQnKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMuc29ydENyaXRlcmlhU3RyZWV0LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYVN0cmVldCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvblN0cmVldE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25TdHJlZXROYicpICYmICFjaGFuZ2VzLm1heFN1Z2dlc3Rpb25TdHJlZXROYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0TmIuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvblN0cmVldE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhU3RyZWV0TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhU3RyZWV0TmInKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXROYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXROYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFTdHJlZXROYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvbkJveE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25Cb3hOYicpICYmICFjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Cb3hOYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uQm94TmIuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvbkJveE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhQm94TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhQm94TmInKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFCb3hOYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFCb3hOYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFCb3hOYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJXaWRnZXQoKTtcbiAgfVxuXG4gIGNoYW5nZU1pbkxldmVsKG1pbkxldmVsOiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbkxldmVsID0gbWluTGV2ZWw7XG4gIH1cblxuICAvLyBDYWxsZWQgYnkgdGhlIHNwZWNpZmljIGJ1dHRvbnMgaW4gdGhlIGFwcFxuICBvbkNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0JywgZm9jdXMpOyB9XG5cbiAgICAvKlxuICAgIGlmIChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSovXG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgY29uc3Qgc2V0Rm9jdXMgPSAoZm9jdXMgPT09IG51bGwgfHwgZm9jdXMgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IGZvY3VzLnNldEZvY3VzO1xuXG4gICAgc3dpdGNoICh0aGlzLm1pbkxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gQm94IG51bWJlclxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTG9jYWxpdHlcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRCb3hQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgcHJlZml4ID0gJ0JURSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbmwnOlxuICAgICAgICAgIHByZWZpeCA9ICdCVVMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcHJlZml4ID0gJ0JPWCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgbm90aWZ5QWRkcmVzc0NvbXBsZXRlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdub3RpZnkgZm9yIGFkZHJlc3MgY29tcGxldGUnKTtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCdub3RpZnlBZGRyZXNzQ29tcGxldGUnLCB0aGlzLnNlbGVjdGVkQWRkcmVzcywgJ25pczlJblJlc3BvbnNlOicrdGhpcy5uaXM5SW5SZXNwb25zZSwgdHlwZW9mIHRoaXMubmlzOUluUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGlmKCAodGhpcy5uaXM5SW5SZXNwb25zZSA9PT0gdHJ1ZSB8fCAnJyt0aGlzLm5pczlJblJlc3BvbnNlID09PSAndHJ1ZScpICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsYXRpdHVkZScpICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhhc093blByb3BlcnR5KCdsb25naXR1ZGUnKSlcbiAgICB7XG4gICAgICBjb25zdCBsYXRpdHVkZSA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmxhdGl0dWRlO1xuICAgICAgY29uc3QgbG9uZ2l0dWRlID0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubG9uZ2l0dWRlO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS5sb2coJ2NhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDEpOicsIGxvbmdpdHVkZSwgbGF0aXR1ZGUpO1xuXG4gICAgICB0aGlzLm5pczlTZXJ2aWNlLmRldGVybWluZU5pczlEYXRhKGxvbmdpdHVkZSwgbGF0aXR1ZGUpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbmlzIERBVEE6JywgZGF0YSk7XG4gICAgICAgICAgLypcbiAgICAgICAgICBuaXMgREFUQTogXG4gICAgICAgICAge1N0YXR1czogJ3N1Y2Nlc3MnLCBkYXRhOiBBcnJheSgxKX1cbiAgICAgICAgICBTdGF0dXM6IFwic3VjY2Vzc1wiXG4gICAgICAgICAgZGF0YTogWycyNTExMkEyMS0nXVxuICAgICAgICAgICovXG4gICAgICAgICAgaWYoZGF0YSE9PXVuZGVmaW5lZCAmJiBkYXRhICE9PW51bGwgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eSgnU3RhdHVzJykgJiYgZGF0YS5TdGF0dXM9PT0nc3VjY2VzcycpXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgbmlzOURhdGEgPSBkYXRhLmRhdGE7XG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KG5pczlEYXRhKSAmJiBuaXM5RGF0YS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLm5pczkgPSBuaXM5RGF0YVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSBjb25zb2xlLmxvZygnTk9UIGNhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDEpJyk7XG4gICAgICB0aGlzLmFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHRoaXMuZW1pdHRlZEFkZHJlc3MpO1xuICAgIH1cblxuICB9XG5cbiAgb25DbGVhcklucHV0RXZlbnRFbWl0dGVyKGV2ZW50KSB7XG5cbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcicsIGV2ZW50KTsgfVxuXG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcblxuICAgIGxldCBuZXh0QWRkcmVzcyA9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzOyAvLyB0aGlzLmVtaXR0ZWRBZGRyZXNzO1xuXG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBMb2NhbGl0eVxuICAgICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVQpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG51bWJlclxuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIG5leHRBZGRyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuQk9YX05VTUJFUilcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXR0ZW50aW9uOiBpZiBub3QtaW4tbGlzdCBkb24ndCByZXNldCB0aGUgYWRkcmVzcywganVzdCBtb2RpZnkgaXRcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdFxuICAgICAgICA9IG5leHRBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgIG5leHRBZGRyZXNzICE9PSBudWxsXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgbmV4dEFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWVcbiAgICAgICAgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICB7XG4gICAgICAgIGRlbGV0ZSBuZXh0QWRkcmVzcy5ib3hOdW1iZXI7XG4gICAgICAgIG5leHRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgIT09IG51bGwgKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdyZXNldCBib3ggb24gbm90LWluLWxpc3QnLCB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MpO1xuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgbmV4dEFkZHJlc3MgPSB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgIT09IG51bGwgPyB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgOiBudWxsO1xuICAgICAgLypcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdFxuICAgICAgICA9IG5leHRBZGRyZXNzICE9PSBudWxsICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIG5leHRBZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlXG4gICAgICAgID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgKi9cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlXG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiBuZXh0QWRkcmVzcyAhPT0gbnVsbFxuICAgICAgICAgICYmIG5leHRBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgbmV4dEFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzSXNDb21wbGV0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdChldmVudCk7XG5cbiAgICBpZiAodGhpcy5lbWl0dGVkQWRkcmVzcyAhPT0gbnVsbCApIHtcbiAgICAgIGlmKG5leHRBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2xhdGl0dWRlJykgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2xvbmdpdHVkZScpKVxuICAgICAge1xuICAgICAgICBjb25zdCBsYXRpdHVkZSA9IG5leHRBZGRyZXNzLmxhdGl0dWRlO1xuICAgICAgICBjb25zdCBsb25naXR1ZGUgPSBuZXh0QWRkcmVzcy5sb25naXR1ZGU7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIGNvbnNvbGUubG9nKCdjYWxsaW5nIG5pczkgc2VydmljZSB0byBnZXQgbmlzOSBkYXRhICgyKScsIGxvbmdpdHVkZSwgbGF0aXR1ZGUpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSBjb25zb2xlLmxvZygnTk9UIGNhbGxpbmcgbmlzOSBzZXJ2aWNlIHRvIGdldCBuaXM5IGRhdGEgKDIpJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlci5lbWl0KG5leHRBZGRyZXNzKTtcbiAgICAgIHRoaXMuZW1pdHRlZEFkZHJlc3MgPSBuZXh0QWRkcmVzcztcbiAgICB9XG5cblxuICAgIC8vIGdrYVxuICAgIC8qXG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuTE9DQUxJVFk7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlID0gJyc7XG4gICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUilcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLmJveE51bWJlciA9IG51bGw7XG4gICAgICAvLyB0aGlzLmNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgKi9cbiAgfVxuXG4gIHJlc2V0TG9jYWxpdHkoZXZlbnQpIHtcbiAgICB0aGlzLnBvc3RhbENvZGUgPSAnJztcbiAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLlNUUkVFVCk7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDQpO1xuICB9XG5cbiAgcmVzZXRTdHJlZXQoZXZlbnQpIHtcbiAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVRfTlVNQkVSKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDMpO1xuICB9XG5cbiAgcmVzZXRTdHJlZXROdW1iZXIoZXZlbnQsIHJlc2V0QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0IHN0cmVldCBudW1uZXIhJywgZXZlbnQsIHJlc2V0QWRkcmVzcyk7XG4gICAgdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG5cbiAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMik7XG4gICAgLy8gJCQgNyB0aGlzLnNldEFkZHJlc3MobnVsbCwgMik7IC8vICQkID8/Pz8/XG4gICAgLypcbiAgICBpZiAocmVzZXRBZGRyZXNzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNldEFkZHJlc3MoLyAqbnVsbCogLyB0aGlzLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgfSovXG4gIH1cblxuICByZXNldEJveE51bWJlcihldmVudCwgcmVzZXRBZGRyZXNzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgc3RyZWV0IG51bW5lciEnLCBldmVudCwgcmVzZXRBZGRyZXNzKTtcbiAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAxKTtcbiAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDEpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgZW50ZXJQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6ZW50ZXJQcmVmaWxsTW9kZSgpJyk7IH1cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0ICYmIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkgKVxuICAgIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQucHJlZmlsbGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnByZWZpbGxpbmcgPSB0cnVlO1xuXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5sb2NhbGl0eSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgIH1cblxuICB9XG5cbiAgcXVpdFByZWZpbGxNb2RlKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpxdWl0UHJlZmlsbE1vZGUoKScpOyB9XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldCAmJiB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5IClcbiAgICB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgPSBmYWxzZTtcbiAgfVxuXG4gIHNldEFkZHJlc3MoYWRkcmVzczogYW55LCBsZXZlbD86IG51bWJlcikge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzZXRBZGRyZXNzIC0gYWRkcmVzcyBwYXJ0LCBsZXZlbCcsIGFkZHJlc3MsIGxldmVsKTsgfVxuXG4gICAgLyogJCQgJCRcbiAgICBpZiAodGhpcy5zZWxlY3RlZEFkZHJlc3MgJiYgIWFkZHJlc3MpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXNldCBhZGRyZXNzIScpO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIGlmIChhZGRyZXNzID09PSBudWxsIHx8IGFkZHJlc3MgPT09IHVuZGVmaW5lZCApXG4gICAge1xuICAgICAgY29uc3QgZG9Ob3RpZnkgPSAodGhpcy5zZWxlY3RlZEFkZHJlc3MgIT09IG51bGwgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MgIT09IHVuZGVmaW5lZCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICBpZiAoZG9Ob3RpZnkpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgZGVsZXRlIGFkZHJlc3MubWVzc2FnZXM7XG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlQWRkcmVzcygpO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlID0gYWRkcmVzcy5wb3N0YWxDb2RlID8gYWRkcmVzcy5wb3N0YWxDb2RlIDogJyc7XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gYWRkcmVzcy5sb2NhbGl0eU5hbWUgPyBhZGRyZXNzLmxvY2FsaXR5TmFtZSA6ICcnO1xuICAgICAgdGhpcy5zdHJlZXQgPSBhZGRyZXNzLnN0cmVldE5hbWUgPyBhZGRyZXNzLnN0cmVldE5hbWUgOiAnJztcbiAgICAgIC8vIGNvbnN0IG5vdEluTGlzdCA9IGFkZHJlc3NbJ25vdC1pbi1saXN0J107XG4gICAgICAvLyBjb25zdCBpc05vdEluTGlzdCA9IG5vdEluTGlzdCAhPT0gbnVsbCAmJiBub3RJbkxpc3QgIT09IHVuZGVmaW5lZCAmJiBub3RJbkxpc3QgPT09IHRydWU7XG4gICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgICAgaWYgKCFhZGRyZXNzLmlzQ29tcGxldGUgfHwgaXNOb3RJbkxpc3QpIHtcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXIgPyBhZGRyZXNzLmhvdXNlTnVtYmVyIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFhZGRyZXNzLmJveE51bWJlcikge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgcmVzZXQgc3RyZWV0IG51bWJlciAhJyk7XG4gICAgICAgICAgICBpZiAoICF0aGlzLnByb2Nlc3NpbmdQcmVmaWxsRGF0YSApIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNldFN0cmVldE51bWJlcihudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGUgPSBhZGRyZXNzICE9PSBudWxsICYmIGFkZHJlc3MgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAhPT0gbnVsbCAmJiBhZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBhZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKGxldmVsKSB7XG5cbiAgICAgICAgLy8gTG9jYWxpdHkgLyBNdW5pY2lwYWxpdHkgYW5kIFBPc3RhbENvZGVcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIC8vXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gU3RyZWV0IE5hbWVcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBTVFJFRVQgTnVtYmVyXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7IC8vICQkXG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgIGlmIChhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlIClcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzSXNOb3RJbkxpc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLypcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBCT1ggTnVtYmVyXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICggdGhpcy5zZWxlY3RlZEFkZHJlc3MgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbGFuZztcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlKC8qbWVzc2FnZTogc3RyaW5nKi9tZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPT09IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZS5FTUlUKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyLmVtaXQobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cblxuICB1cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MucG9zdGFsQ29kZSAmJiBhZGRyZXNzLmxvY2FsaXR5TmFtZSkge1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAgYWRkcmVzcy5wb3N0YWxDb2RlICArICcgJyArIGFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TmFtZShhZGRyZXNzKSB7XG4gICAgaWYgKGFkZHJlc3MgJiYgYWRkcmVzcy5zdHJlZXROYW1lKSB7XG4gICAgICB0aGlzLnN0cmVldE5hbWVJbnB1dCA9IGFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3MuaG91c2VOdW1iZXIpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVySW5wdXQgPSBhZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbXBsZXRlQWRkcmVzcygpIHtcbiAgICBsZXQgY29uY2F0U3RyID0gJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnN0cmVldE5hbWUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROYW1lfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3MuaG91c2VOdW1iZXJ9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyID8gYCR7dGhpcy5nZXRCb3hQcmVmaXgoKX0gJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5ib3hOdW1iZXJ9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MucG9zdGFsQ29kZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGV9IGAgOiAnJztcbiAgICBjb25jYXRTdHIgKz0gdGhpcy5zZWxlY3RlZEFkZHJlc3MubXVuaWNpcGFsaXR5TmFtZSA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLm11bmljaXBhbGl0eU5hbWV9IGAgOiAnJztcbiAgICB0aGlzLmNvbXBsZXRlQWRkcmVzcyA9IGNvbmNhdFN0cjtcbiAgfVxuXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uRnJvbUlucHV0KG9wdGlvbjoge3ZhbGlkYXRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUsIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSA9IG9wdGlvbi52YWxpZGF0aW9uVHlwZTtcbiAgICAvLyBjb25zb2xlLmxvZygnYWRkcmVzc2UgYXV0b2NvbXBsZXRlIC0gdmFsaWRhdGlvbiBtZXNzYWdlIG9wdGlvbicsIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlKTtcbiAgfVxuXG4gIG9uTG9jYWxpdHlQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpsb2NhbGl0eSBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIC8qXG4gICAgaWYgKGV2ZW50LnBlcmZlY3RNYXRjaClcbiAgICB7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvICozKiAvIEFERFJFU1NMRVZFTC5TVFJFRVQ7XG4gICAgICB0aGlzLnN0cmVldFBhcmFtcyA9IHRoaXMuYWRkcmVzc1BhcmFtcztcbiAgICB9XG4gICAgKi9cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSAvKjQqLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSBuZXcgUHJlZmlsbERhdGEodGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhLCB0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS50cyA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgLy8gQmUgc3VyZSB0byBwcm9wYWdhdGUgdGhlIGxvY2FsaXR5TmFtZSBpbiBwbGFjZSBvZiB0aGUgbXVuaWNpcGFsaXR5TmFtZSAhXG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgaWYgKHN0cmVldE5hbWUgPT09IG51bGwgfHwgc3RyZWV0TmFtZSA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE5hbWUgPT09ICcnKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zdHJlZXRQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAvLyBjb25zdCBjcEFuZExvY2FsaXR5ID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIGNvbnN0IGNwQW5kTG9jYWxpdHkgPSBkYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSArIGRhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIGlmICggY3BBbmRMb2NhbGl0eSA9PT0gbnVsbCB8fCBjcEFuZExvY2FsaXR5ID09PSB1bmRlZmluZWQgfHwgY3BBbmRMb2NhbGl0eS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXRQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtjb25zb2xlLmxvZygnbGliOjpzdHJlZXQ6IHByZWZpbGwgZXZlbnQgcmVjZWl2ZWQnLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGNvbnN0IGRhdGE6IFByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUnO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlTG9jYWxpdHkgPSAnVFJVQy1NVUNIRSAyJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgICAqL1xuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZXZlbnQucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlIClcbiAgICB7XG4gICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBNQVRDSCBGT1VORCcsIGRhdGEpOyB9XG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gZGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgY29uc3Qgc3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGlmIChzdHJlZXROdW1iZXIgPT09IG51bGwgfHwgc3RyZWV0TnVtYmVyID09PSB1bmRlZmluZWQgfHwgc3RyZWV0TnVtYmVyID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBzdHJlZXQgbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpO31cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxTdHJlZXROYW1lID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG5cbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbGliOjpvblN0cmVldFByZWZpbGxFdmVudCAtIE5PIE1BVENIIEFUIFNUUkVFVCBMRVZFTCcsIHByZWZpbGxTdHJlZXROYW1lICk7XG4gICAgICB9XG5cbiAgICAgIGlmICggcHJlZmlsbFN0cmVldE5hbWUgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE5hbWUgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsU3RyZWV0TmFtZS5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQ6IE5PIE1BVENIIEZPVU5EIC0gc2V0IGFkZHJlc3MnLCBkYXRhLCBhZGRyZXNzKTsgfVxuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLkxPQ0FMSVRZKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5zdHJlZXROYW1lID0gcHJlZmlsbFN0cmVldE5hbWU7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbFN0cmVldE5hbWU7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdHJlZXROdW1iZXJQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6c3RyZWV0IG51bWJlciBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROdW1iZXIoYWRkcmVzcyk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0ID0gYWRkcmVzcyAmJiBhZGRyZXNzLmhhc093blByb3BlcnR5KCdub3QtaW4tbGlzdCcpICYmIGFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIGlmIChhZGRyZXNzSXNDb21wbGV0ZSAmJiAhIGFkZHJlc3NJc05vdEluTGlzdCApXG4gICAgICB7XG4gICAgICAgIC8vIGZvdW5kIGFkZHJlc3MgLSBwZXJmZWN0IG1hdGNoYXQgc3RyZWV0IG51bWJlciBsZXZlbFxuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGFueW1vcmVcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgLy8gY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWVcbiAgICAgICAgLy8gID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbi5hZGRyZXNzLmxvY2FsaXR5TmFtZTtcblxuICAgICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5sb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlID0gc3VnZ2VzdGlvbkFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUgPSBzdWdnZXN0aW9uQWRkcmVzcy5zdHJlZXROYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyID0gc3VnZ2VzdGlvbkFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoc3VnZ2VzdGlvbkFkZHJlc3MpO1xuXG4gICAgICAgIGNvbnN0IGJveE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICAgIGlmICggISBhZGRyZXNzSXNOb3RJbkxpc3QgJiYgKGJveE51bWJlciA9PT0gbnVsbCB8fCBib3hOdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBib3hOdW1iZXIgPT09ICcnKSApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgICAgIC8vIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogdHJpZ2dlciBjaGVja2luZyBib3ggbnVtYmVyIG1hdGNoLi4uICcsIHRoaXMucHJlZmlsbERhdGEpOyB9XG4gICAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgKi9cblxuICAgICAgICB0aGlzLmJveE51bWJlclByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxTdHJlZXROdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbFN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmhvdXNlTnVtYmVyID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgYWRkcmVzcy5zZWFyY2hCYXJTdHJpbmcgPSBwcmVmaWxsU3RyZWV0TnVtYmVyO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkJveE51bWJlclByZWZpbGxFdmVudChldmVudDogUHJlZmlsbEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiBib3ggbnVtYmVyIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTsgfVxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICBpZiAoZGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGNvbnN0IHByZWZpbGxCb3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGlmICggcHJlZmlsbEJveE51bWJlciA9PT0gbnVsbCB8fCBwcmVmaWxsQm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbEJveE51bWJlci5sZW5ndGggPT09IDAgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBhZGRyZXNzLmJveE51bWJlciA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbEJveE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgfVxufVxuIl19