@angular/common 16.0.0-next.4 → 16.0.0-next.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/http/src/client.mjs +4 -4
- package/{esm2020 → esm2022}/http/src/interceptor.mjs +4 -4
- package/{esm2020 → esm2022}/http/src/jsonp.mjs +7 -7
- package/esm2022/http/src/module.mjs +133 -0
- package/esm2022/http/src/xhr.mjs +317 -0
- package/{esm2020 → esm2022}/http/src/xsrf.mjs +7 -7
- package/{esm2020 → esm2022}/http/testing/src/backend.mjs +4 -4
- package/{esm2020 → esm2022}/http/testing/src/module.mjs +7 -7
- package/{esm2020 → esm2022}/src/common_module.mjs +5 -5
- package/{esm2020 → esm2022}/src/directives/ng_class.mjs +4 -4
- package/{esm2020 → esm2022}/src/directives/ng_component_outlet.mjs +4 -4
- package/esm2022/src/directives/ng_for_of.mjs +292 -0
- package/{esm2020 → esm2022}/src/directives/ng_if.mjs +4 -4
- package/esm2022/src/directives/ng_optimized_image/image_loaders/imagekit_loader.mjs +49 -0
- package/{esm2020 → esm2022}/src/directives/ng_optimized_image/lcp_image_observer.mjs +4 -4
- package/{esm2020 → esm2022}/src/directives/ng_optimized_image/ng_optimized_image.mjs +4 -4
- package/{esm2020 → esm2022}/src/directives/ng_optimized_image/preconnect_link_checker.mjs +4 -4
- package/{esm2020 → esm2022}/src/directives/ng_optimized_image/preload-link-creator.mjs +4 -4
- package/{esm2020 → esm2022}/src/directives/ng_plural.mjs +7 -7
- package/{esm2020 → esm2022}/src/directives/ng_style.mjs +4 -4
- package/{esm2020 → esm2022}/src/directives/ng_switch.mjs +10 -10
- package/esm2022/src/directives/ng_template_outlet.mjs +89 -0
- package/{esm2020 → esm2022}/src/i18n/localization.mjs +7 -7
- package/{esm2020 → esm2022}/src/location/hash_location_strategy.mjs +4 -4
- package/{esm2020 → esm2022}/src/location/location.mjs +32 -32
- package/{esm2020 → esm2022}/src/location/location_strategy.mjs +7 -7
- package/{esm2020 → esm2022}/src/location/platform_location.mjs +7 -7
- package/{esm2020 → esm2022}/src/pipes/async_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/pipes/case_conversion_pipes.mjs +10 -10
- package/{esm2020 → esm2022}/src/pipes/date_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/pipes/i18n_plural_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/pipes/i18n_select_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/pipes/json_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/pipes/keyvalue_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/pipes/number_pipe.mjs +10 -10
- package/{esm2020 → esm2022}/src/pipes/slice_pipe.mjs +4 -4
- package/{esm2020 → esm2022}/src/version.mjs +1 -1
- package/esm2022/src/viewport_scroller.mjs +212 -0
- package/{esm2020 → esm2022}/testing/src/location_mock.mjs +4 -4
- package/esm2022/testing/src/mock_location_strategy.mjs +93 -0
- package/{esm2020 → esm2022}/testing/src/mock_platform_location.mjs +4 -4
- package/{esm2020 → esm2022}/upgrade/src/location_upgrade_module.mjs +5 -5
- package/{fesm2020 → fesm2022}/common.mjs +165 -160
- package/fesm2022/common.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/http/testing.mjs +10 -10
- package/{fesm2020 → fesm2022}/http/testing.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/http.mjs +78 -47
- package/{fesm2015 → fesm2022}/http.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/testing.mjs +10 -10
- package/fesm2022/testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/upgrade.mjs +5 -5
- package/{fesm2020 → fesm2022}/upgrade.mjs.map +1 -1
- package/http/index.d.ts +5 -2
- package/http/testing/index.d.ts +1 -1
- package/index.d.ts +6 -6
- package/package.json +18 -32
- package/testing/index.d.ts +1 -1
- package/upgrade/index.d.ts +1 -1
- package/esm2020/http/src/module.mjs +0 -133
- package/esm2020/http/src/xhr.mjs +0 -286
- package/esm2020/src/directives/ng_for_of.mjs +0 -293
- package/esm2020/src/directives/ng_optimized_image/image_loaders/imagekit_loader.mjs +0 -44
- package/esm2020/src/directives/ng_template_outlet.mjs +0 -88
- package/esm2020/src/viewport_scroller.mjs +0 -212
- package/esm2020/testing/src/mock_location_strategy.mjs +0 -93
- package/fesm2015/common.mjs +0 -6706
- package/fesm2015/common.mjs.map +0 -1
- package/fesm2015/http/testing.mjs +0 -362
- package/fesm2015/http/testing.mjs.map +0 -1
- package/fesm2015/http.mjs +0 -2383
- package/fesm2015/testing.mjs +0 -535
- package/fesm2015/testing.mjs.map +0 -1
- package/fesm2015/upgrade.mjs +0 -894
- package/fesm2015/upgrade.mjs.map +0 -1
- package/fesm2020/common.mjs.map +0 -1
- package/fesm2020/http.mjs.map +0 -1
- package/fesm2020/testing.mjs.map +0 -1
- /package/{esm2020 → esm2022}/common.mjs +0 -0
- /package/{esm2020 → esm2022}/http/http.mjs +0 -0
- /package/{esm2020 → esm2022}/http/index.mjs +0 -0
- /package/{esm2020 → esm2022}/http/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/backend.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/context.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/headers.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/params.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/provider.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/request.mjs +0 -0
- /package/{esm2020 → esm2022}/http/src/response.mjs +0 -0
- /package/{esm2020 → esm2022}/http/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/http/testing/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/http/testing/src/api.mjs +0 -0
- /package/{esm2020 → esm2022}/http/testing/src/provider.mjs +0 -0
- /package/{esm2020 → esm2022}/http/testing/src/request.mjs +0 -0
- /package/{esm2020 → esm2022}/http/testing/testing.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/src/common.mjs +0 -0
- /package/{esm2020 → esm2022}/src/cookie.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/asserts.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/error_helper.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/image_loaders/image_loader.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/image_loaders/imgix_loader.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/directives/ng_optimized_image/url.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dom_adapter.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dom_tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/currencies.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/format_date.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/format_number.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/locale_data.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/locale_data_api.mjs +0 -0
- /package/{esm2020 → esm2022}/src/location/index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/location/util.mjs +0 -0
- /package/{esm2020 → esm2022}/src/pipes/date_pipe_config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/pipes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/pipes/invalid_pipe_argument_error.mjs +0 -0
- /package/{esm2020 → esm2022}/src/platform_id.mjs +0 -0
- /package/{esm2020 → esm2022}/src/private_export.mjs +0 -0
- /package/{esm2020 → esm2022}/src/xhr.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/provide_location_mocks.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testing.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/index.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/src/index.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/src/location_shim.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/src/params.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/src/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/upgrade/upgrade.mjs +0 -0
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { ɵɵdefineInjectable, ɵɵinject } from '@angular/core';
|
|
9
|
-
import { DOCUMENT } from './dom_tokens';
|
|
10
|
-
/**
|
|
11
|
-
* Defines a scroll position manager. Implemented by `BrowserViewportScroller`.
|
|
12
|
-
*
|
|
13
|
-
* @publicApi
|
|
14
|
-
*/
|
|
15
|
-
class ViewportScroller {
|
|
16
|
-
}
|
|
17
|
-
// De-sugared tree-shakable injection
|
|
18
|
-
// See #23917
|
|
19
|
-
/** @nocollapse */
|
|
20
|
-
ViewportScroller.ɵprov = ɵɵdefineInjectable({
|
|
21
|
-
token: ViewportScroller,
|
|
22
|
-
providedIn: 'root',
|
|
23
|
-
factory: () => new BrowserViewportScroller(ɵɵinject(DOCUMENT), window)
|
|
24
|
-
});
|
|
25
|
-
export { ViewportScroller };
|
|
26
|
-
/**
|
|
27
|
-
* Manages the scroll position for a browser window.
|
|
28
|
-
*/
|
|
29
|
-
export class BrowserViewportScroller {
|
|
30
|
-
constructor(document, window) {
|
|
31
|
-
this.document = document;
|
|
32
|
-
this.window = window;
|
|
33
|
-
this.offset = () => [0, 0];
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Configures the top offset used when scrolling to an anchor.
|
|
37
|
-
* @param offset A position in screen coordinates (a tuple with x and y values)
|
|
38
|
-
* or a function that returns the top offset position.
|
|
39
|
-
*
|
|
40
|
-
*/
|
|
41
|
-
setOffset(offset) {
|
|
42
|
-
if (Array.isArray(offset)) {
|
|
43
|
-
this.offset = () => offset;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
this.offset = offset;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Retrieves the current scroll position.
|
|
51
|
-
* @returns The position in screen coordinates.
|
|
52
|
-
*/
|
|
53
|
-
getScrollPosition() {
|
|
54
|
-
if (this.supportsScrolling()) {
|
|
55
|
-
return [this.window.pageXOffset, this.window.pageYOffset];
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
return [0, 0];
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Sets the scroll position.
|
|
63
|
-
* @param position The new position in screen coordinates.
|
|
64
|
-
*/
|
|
65
|
-
scrollToPosition(position) {
|
|
66
|
-
if (this.supportsScrolling()) {
|
|
67
|
-
this.window.scrollTo(position[0], position[1]);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Scrolls to an element and attempts to focus the element.
|
|
72
|
-
*
|
|
73
|
-
* Note that the function name here is misleading in that the target string may be an ID for a
|
|
74
|
-
* non-anchor element.
|
|
75
|
-
*
|
|
76
|
-
* @param target The ID of an element or name of the anchor.
|
|
77
|
-
*
|
|
78
|
-
* @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document
|
|
79
|
-
* @see https://html.spec.whatwg.org/#scroll-to-fragid
|
|
80
|
-
*/
|
|
81
|
-
scrollToAnchor(target) {
|
|
82
|
-
if (!this.supportsScrolling()) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
const elSelected = findAnchorFromDocument(this.document, target);
|
|
86
|
-
if (elSelected) {
|
|
87
|
-
this.scrollToElement(elSelected);
|
|
88
|
-
// After scrolling to the element, the spec dictates that we follow the focus steps for the
|
|
89
|
-
// target. Rather than following the robust steps, simply attempt focus.
|
|
90
|
-
//
|
|
91
|
-
// @see https://html.spec.whatwg.org/#get-the-focusable-area
|
|
92
|
-
// @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus
|
|
93
|
-
// @see https://html.spec.whatwg.org/#focusable-area
|
|
94
|
-
elSelected.focus();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Disables automatic scroll restoration provided by the browser.
|
|
99
|
-
*/
|
|
100
|
-
setHistoryScrollRestoration(scrollRestoration) {
|
|
101
|
-
if (this.supportScrollRestoration()) {
|
|
102
|
-
const history = this.window.history;
|
|
103
|
-
if (history && history.scrollRestoration) {
|
|
104
|
-
history.scrollRestoration = scrollRestoration;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Scrolls to an element using the native offset and the specified offset set on this scroller.
|
|
110
|
-
*
|
|
111
|
-
* The offset can be used when we know that there is a floating header and scrolling naively to an
|
|
112
|
-
* element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.
|
|
113
|
-
*/
|
|
114
|
-
scrollToElement(el) {
|
|
115
|
-
const rect = el.getBoundingClientRect();
|
|
116
|
-
const left = rect.left + this.window.pageXOffset;
|
|
117
|
-
const top = rect.top + this.window.pageYOffset;
|
|
118
|
-
const offset = this.offset();
|
|
119
|
-
this.window.scrollTo(left - offset[0], top - offset[1]);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* We only support scroll restoration when we can get a hold of window.
|
|
123
|
-
* This means that we do not support this behavior when running in a web worker.
|
|
124
|
-
*
|
|
125
|
-
* Lifting this restriction right now would require more changes in the dom adapter.
|
|
126
|
-
* Since webworkers aren't widely used, we will lift it once RouterScroller is
|
|
127
|
-
* battle-tested.
|
|
128
|
-
*/
|
|
129
|
-
supportScrollRestoration() {
|
|
130
|
-
try {
|
|
131
|
-
if (!this.supportsScrolling()) {
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
// The `scrollRestoration` property could be on the `history` instance or its prototype.
|
|
135
|
-
const scrollRestorationDescriptor = getScrollRestorationProperty(this.window.history) ||
|
|
136
|
-
getScrollRestorationProperty(Object.getPrototypeOf(this.window.history));
|
|
137
|
-
// We can write to the `scrollRestoration` property if it is a writable data field or it has a
|
|
138
|
-
// setter function.
|
|
139
|
-
return !!scrollRestorationDescriptor &&
|
|
140
|
-
!!(scrollRestorationDescriptor.writable || scrollRestorationDescriptor.set);
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
supportsScrolling() {
|
|
147
|
-
try {
|
|
148
|
-
return !!this.window && !!this.window.scrollTo && 'pageXOffset' in this.window;
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
function getScrollRestorationProperty(obj) {
|
|
156
|
-
return Object.getOwnPropertyDescriptor(obj, 'scrollRestoration');
|
|
157
|
-
}
|
|
158
|
-
function findAnchorFromDocument(document, target) {
|
|
159
|
-
const documentResult = document.getElementById(target) || document.getElementsByName(target)[0];
|
|
160
|
-
if (documentResult) {
|
|
161
|
-
return documentResult;
|
|
162
|
-
}
|
|
163
|
-
// `getElementById` and `getElementsByName` won't pierce through the shadow DOM so we
|
|
164
|
-
// have to traverse the DOM manually and do the lookup through the shadow roots.
|
|
165
|
-
if (typeof document.createTreeWalker === 'function' && document.body &&
|
|
166
|
-
(document.body.createShadowRoot ||
|
|
167
|
-
typeof document.body.attachShadow === 'function')) {
|
|
168
|
-
const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
|
|
169
|
-
let currentNode = treeWalker.currentNode;
|
|
170
|
-
while (currentNode) {
|
|
171
|
-
const shadowRoot = currentNode.shadowRoot;
|
|
172
|
-
if (shadowRoot) {
|
|
173
|
-
// Note that `ShadowRoot` doesn't support `getElementsByName`
|
|
174
|
-
// so we have to fall back to `querySelector`.
|
|
175
|
-
const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name="${target}"]`);
|
|
176
|
-
if (result) {
|
|
177
|
-
return result;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
currentNode = treeWalker.nextNode();
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return null;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Provides an empty implementation of the viewport scroller.
|
|
187
|
-
*/
|
|
188
|
-
export class NullViewportScroller {
|
|
189
|
-
/**
|
|
190
|
-
* Empty implementation
|
|
191
|
-
*/
|
|
192
|
-
setOffset(offset) { }
|
|
193
|
-
/**
|
|
194
|
-
* Empty implementation
|
|
195
|
-
*/
|
|
196
|
-
getScrollPosition() {
|
|
197
|
-
return [0, 0];
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Empty implementation
|
|
201
|
-
*/
|
|
202
|
-
scrollToPosition(position) { }
|
|
203
|
-
/**
|
|
204
|
-
* Empty implementation
|
|
205
|
-
*/
|
|
206
|
-
scrollToAnchor(anchor) { }
|
|
207
|
-
/**
|
|
208
|
-
* Empty implementation
|
|
209
|
-
*/
|
|
210
|
-
setHistoryScrollRestoration(scrollRestoration) { }
|
|
211
|
-
}
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnRfc2Nyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3ZpZXdwb3J0X3Njcm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUl0Qzs7OztHQUlHO0FBQ0gsTUFBc0IsZ0JBQWdCOztBQUNwQyxxQ0FBcUM7QUFDckMsYUFBYTtBQUNiLGtCQUFrQjtBQUNYLHNCQUFLLEdBQTZCLGtCQUFrQixDQUFDO0lBQzFELEtBQUssRUFBRSxnQkFBZ0I7SUFDdkIsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUN2RSxDQUFDLENBQUM7U0FSaUIsZ0JBQWdCO0FBNEN0Qzs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFHbEMsWUFBb0IsUUFBa0IsRUFBVSxNQUFjO1FBQTFDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRnRELFdBQU0sR0FBMkIsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFVyxDQUFDO0lBRWxFOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLE1BQWlEO1FBQ3pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lB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QUM5QyxNQUFNLE1BQU0sR0FDUixVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUN4RixJQUFJLE1BQU0sRUFBRTtvQkFDVixPQUFPLE1BQU0sQ0FBQztpQkFDZjthQUNGO1lBRUQsV0FBVyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQXdCLENBQUM7U0FDM0Q7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQjs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFpRCxJQUFTLENBQUM7SUFFckU7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLFFBQTBCLElBQVMsQ0FBQztJQUVyRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxNQUFjLElBQVMsQ0FBQztJQUV2Qzs7T0FFRztJQUNILDJCQUEyQixDQUFDLGlCQUFrQyxJQUFTLENBQUM7Q0FDekUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHvJtcm1ZGVmaW5lSW5qZWN0YWJsZSwgybXJtWluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJy4vZG9tX3Rva2Vucyc7XG5cblxuXG4vKipcbiAqIERlZmluZXMgYSBzY3JvbGwgcG9zaXRpb24gbWFuYWdlci4gSW1wbGVtZW50ZWQgYnkgYEJyb3dzZXJWaWV3cG9ydFNjcm9sbGVyYC5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWaWV3cG9ydFNjcm9sbGVyIHtcbiAgLy8gRGUtc3VnYXJlZCB0cmVlLXNoYWthYmxlIGluamVjdGlvblxuICAvLyBTZWUgIzIzOTE3XG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgybVwcm92ID0gLyoqIEBwdXJlT3JCcmVha015Q29kZSAqLyDJtcm1ZGVmaW5lSW5qZWN0YWJsZSh7XG4gICAgdG9rZW46IFZpZXdwb3J0U2Nyb2xsZXIsXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6ICgpID0+IG5ldyBCcm93c2VyVmlld3BvcnRTY3JvbGxlcijJtcm1aW5qZWN0KERPQ1VNRU5UKSwgd2luZG93KVxuICB9KTtcblxuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgdG9wIG9mZnNldCB1c2VkIHdoZW4gc2Nyb2xsaW5nIHRvIGFuIGFuY2hvci5cbiAgICogQHBhcmFtIG9mZnNldCBBIHBvc2l0aW9uIGluIHNjcmVlbiBjb29yZGluYXRlcyAoYSB0dXBsZSB3aXRoIHggYW5kIHkgdmFsdWVzKVxuICAgKiBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdG9wIG9mZnNldCBwb3NpdGlvbi5cbiAgICpcbiAgICovXG4gIGFic3RyYWN0IHNldE9mZnNldChvZmZzZXQ6IFtudW1iZXIsIG51bWJlcl18KCgpID0+IFtudW1iZXIsIG51bWJlcl0pKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi5cbiAgICogQHJldHVybnMgQSBwb3NpdGlvbiBpbiBzY3JlZW4gY29vcmRpbmF0ZXMgKGEgdHVwbGUgd2l0aCB4IGFuZCB5IHZhbHVlcykuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRTY3JvbGxQb3NpdGlvbigpOiBbbnVtYmVyLCBudW1iZXJdO1xuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRvIGEgc3BlY2lmaWVkIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gQSBwb3NpdGlvbiBpbiBzY3JlZW4gY29vcmRpbmF0ZXMgKGEgdHVwbGUgd2l0aCB4IGFuZCB5IHZhbHVlcykuXG4gICAqL1xuICBhYnN0cmFjdCBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdKTogdm9pZDtcblxuICAvKipcbiAgICogU2Nyb2xscyB0byBhbiBhbmNob3IgZWxlbWVudC5cbiAgICogQHBhcmFtIGFuY2hvciBUaGUgSUQgb2YgdGhlIGFuY2hvciBlbGVtZW50LlxuICAgKi9cbiAgYWJzdHJhY3Qgc2Nyb2xsVG9BbmNob3IoYW5jaG9yOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBhdXRvbWF0aWMgc2Nyb2xsIHJlc3RvcmF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLlxuICAgKiBTZWUgYWxzbyBbd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb25cbiAgICogaW5mb10oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2ViL3VwZGF0ZXMvMjAxNS8wOS9oaXN0b3J5LWFwaS1zY3JvbGwtcmVzdG9yYXRpb24pLlxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKHNjcm9sbFJlc3RvcmF0aW9uOiAnYXV0byd8J21hbnVhbCcpOiB2b2lkO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBmb3IgYSBicm93c2VyIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJyb3dzZXJWaWV3cG9ydFNjcm9sbGVyIGltcGxlbWVudHMgVmlld3BvcnRTY3JvbGxlciB7XG4gIHByaXZhdGUgb2Zmc2V0OiAoKSA9PiBbbnVtYmVyLCBudW1iZXJdID0gKCkgPT4gWzAsIDBdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LCBwcml2YXRlIHdpbmRvdzogV2luZG93KSB7fVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSB0b3Agb2Zmc2V0IHVzZWQgd2hlbiBzY3JvbGxpbmcgdG8gYW4gYW5jaG9yLlxuICAgKiBAcGFyYW0gb2Zmc2V0IEEgcG9zaXRpb24gaW4gc2NyZWVuIGNvb3JkaW5hdGVzIChhIHR1cGxlIHdpdGggeCBhbmQgeSB2YWx1ZXMpXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0b3Agb2Zmc2V0IHBvc2l0aW9uLlxuICAgKlxuICAgKi9cbiAgc2V0T2Zmc2V0KG9mZnNldDogW251bWJlciwgbnVtYmVyXXwoKCkgPT4gW251bWJlciwgbnVtYmVyXSkpOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvZmZzZXQpKSB7XG4gICAgICB0aGlzLm9mZnNldCA9ICgpID0+IG9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBwb3NpdGlvbiBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuXG4gICAqL1xuICBnZXRTY3JvbGxQb3NpdGlvbigpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBpZiAodGhpcy5zdXBwb3J0c1Njcm9sbGluZygpKSB7XG4gICAgICByZXR1cm4gW3RoaXMud2luZG93LnBhZ2VYT2Zmc2V0LCB0aGlzLndpbmRvdy5wYWdlWU9mZnNldF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbMCwgMF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBuZXcgcG9zaXRpb24gaW4gc2NyZWVuIGNvb3JkaW5hdGVzLlxuICAgKi9cbiAgc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbjogW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpIHtcbiAgICAgIHRoaXMud2luZG93LnNjcm9sbFRvKHBvc2l0aW9uWzBdLCBwb3NpdGlvblsxXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdG8gYW4gZWxlbWVudCBhbmQgYXR0ZW1wdHMgdG8gZm9jdXMgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gbmFtZSBoZXJlIGlzIG1pc2xlYWRpbmcgaW4gdGhhdCB0aGUgdGFyZ2V0IHN0cmluZyBtYXkgYmUgYW4gSUQgZm9yIGFcbiAgICogbm9uLWFuY2hvciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBJRCBvZiBhbiBlbGVtZW50IG9yIG5hbWUgb2YgdGhlIGFuY2hvci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyN0aGUtaW5kaWNhdGVkLXBhcnQtb2YtdGhlLWRvY3VtZW50XG4gICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc2Nyb2xsLXRvLWZyYWdpZFxuICAgKi9cbiAgc2Nyb2xsVG9BbmNob3IodGFyZ2V0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsU2VsZWN0ZWQgPSBmaW5kQW5jaG9yRnJvbURvY3VtZW50KHRoaXMuZG9jdW1lbnQsIHRhcmdldCk7XG5cbiAgICBpZiAoZWxTZWxlY3RlZCkge1xuICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoZWxTZWxlY3RlZCk7XG4gICAgICAvLyBBZnRlciBzY3JvbGxpbmcgdG8gdGhlIGVsZW1lbnQsIHRoZSBzcGVjIGRpY3RhdGVzIHRoYXQgd2UgZm9sbG93IHRoZSBmb2N1cyBzdGVwcyBmb3IgdGhlXG4gICAgICAvLyB0YXJnZXQuIFJhdGhlciB0aGFuIGZvbGxvd2luZyB0aGUgcm9idXN0IHN0ZXBzLCBzaW1wbHkgYXR0ZW1wdCBmb2N1cy5cbiAgICAgIC8vXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2dldC10aGUtZm9jdXNhYmxlLWFyZWFcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxPckZvcmVpZ25FbGVtZW50L2ZvY3VzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2ZvY3VzYWJsZS1hcmVhXG4gICAgICBlbFNlbGVjdGVkLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGF1dG9tYXRpYyBzY3JvbGwgcmVzdG9yYXRpb24gcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuXG4gICAqL1xuICBzZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oc2Nyb2xsUmVzdG9yYXRpb246ICdhdXRvJ3wnbWFudWFsJyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy53aW5kb3cuaGlzdG9yeTtcbiAgICAgIGlmIChoaXN0b3J5ICYmIGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICAgICAgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IHNjcm9sbFJlc3RvcmF0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRvIGFuIGVsZW1lbnQgdXNpbmcgdGhlIG5hdGl2ZSBvZmZzZXQgYW5kIHRoZSBzcGVjaWZpZWQgb2Zmc2V0IHNldCBvbiB0aGlzIHNjcm9sbGVyLlxuICAgKlxuICAgKiBUaGUgb2Zmc2V0IGNhbiBiZSB1c2VkIHdoZW4gd2Uga25vdyB0aGF0IHRoZXJlIGlzIGEgZmxvYXRpbmcgaGVhZGVyIGFuZCBzY3JvbGxpbmcgbmFpdmVseSB0byBhblxuICAgKiBlbGVtZW50IChleDogYHNjcm9sbEludG9WaWV3YCkgbGVhdmVzIHRoZSBlbGVtZW50IGhpZGRlbiBiZWhpbmQgdGhlIGZsb2F0aW5nIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgc2Nyb2xsVG9FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICsgdGhpcy53aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgY29uc3QgdG9wID0gcmVjdC50b3AgKyB0aGlzLndpbmRvdy5wYWdlWU9mZnNldDtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuICAgIHRoaXMud2luZG93LnNjcm9sbFRvKGxlZnQgLSBvZmZzZXRbMF0sIHRvcCAtIG9mZnNldFsxXSk7XG4gIH1cblxuICAvKipcbiAgICogV2Ugb25seSBzdXBwb3J0IHNjcm9sbCByZXN0b3JhdGlvbiB3aGVuIHdlIGNhbiBnZXQgYSBob2xkIG9mIHdpbmRvdy5cbiAgICogVGhpcyBtZWFucyB0aGF0IHdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgYmVoYXZpb3Igd2hlbiBydW5uaW5nIGluIGEgd2ViIHdvcmtlci5cbiAgICpcbiAgICogTGlmdGluZyB0aGlzIHJlc3RyaWN0aW9uIHJpZ2h0IG5vdyB3b3VsZCByZXF1aXJlIG1vcmUgY2hhbmdlcyBpbiB0aGUgZG9tIGFkYXB0ZXIuXG4gICAqIFNpbmNlIHdlYndvcmtlcnMgYXJlbid0IHdpZGVseSB1c2VkLCB3ZSB3aWxsIGxpZnQgaXQgb25jZSBSb3V0ZXJTY3JvbGxlciBpc1xuICAgKiBiYXR0bGUtdGVzdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5zdXBwb3J0c1Njcm9sbGluZygpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBgc2Nyb2xsUmVzdG9yYXRpb25gIHByb3BlcnR5IGNvdWxkIGJlIG9uIHRoZSBgaGlzdG9yeWAgaW5zdGFuY2Ugb3IgaXRzIHByb3RvdHlwZS5cbiAgICAgIGNvbnN0IHNjcm9sbFJlc3RvcmF0aW9uRGVzY3JpcHRvciA9IGdldFNjcm9sbFJlc3RvcmF0aW9uUHJvcGVydHkodGhpcy53aW5kb3cuaGlzdG9yeSkgfHxcbiAgICAgICAgICBnZXRTY3JvbGxSZXN0b3JhdGlvblByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLndpbmRvdy5oaXN0b3J5KSk7XG4gICAgICAvLyBXZSBjYW4gd3JpdGUgdG8gdGhlIGBzY3JvbGxSZXN0b3JhdGlvbmAgcHJvcGVydHkgaWYgaXQgaXMgYSB3cml0YWJsZSBkYXRhIGZpZWxkIG9yIGl0IGhhcyBhXG4gICAgICAvLyBzZXR0ZXIgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gISFzY3JvbGxSZXN0b3JhdGlvbkRlc2NyaXB0b3IgJiZcbiAgICAgICAgICAhIShzY3JvbGxSZXN0b3JhdGlvbkRlc2NyaXB0b3Iud3JpdGFibGUgfHwgc2Nyb2xsUmVzdG9yYXRpb25EZXNjcmlwdG9yLnNldCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdXBwb3J0c1Njcm9sbGluZygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICEhdGhpcy53aW5kb3cgJiYgISF0aGlzLndpbmRvdy5zY3JvbGxUbyAmJiAncGFnZVhPZmZzZXQnIGluIHRoaXMud2luZG93O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxSZXN0b3JhdGlvblByb3BlcnR5KG9iajogYW55KTogUHJvcGVydHlEZXNjcmlwdG9yfHVuZGVmaW5lZCB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgJ3Njcm9sbFJlc3RvcmF0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRBbmNob3JGcm9tRG9jdW1lbnQoZG9jdW1lbnQ6IERvY3VtZW50LCB0YXJnZXQ6IHN0cmluZyk6IEhUTUxFbGVtZW50fG51bGwge1xuICBjb25zdCBkb2N1bWVudFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUodGFyZ2V0KVswXTtcblxuICBpZiAoZG9jdW1lbnRSZXN1bHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRSZXN1bHQ7XG4gIH1cblxuICAvLyBgZ2V0RWxlbWVudEJ5SWRgIGFuZCBgZ2V0RWxlbWVudHNCeU5hbWVgIHdvbid0IHBpZXJjZSB0aHJvdWdoIHRoZSBzaGFkb3cgRE9NIHNvIHdlXG4gIC8vIGhhdmUgdG8gdHJhdmVyc2UgdGhlIERPTSBtYW51YWxseSBhbmQgZG8gdGhlIGxvb2t1cCB0aHJvdWdoIHRoZSBzaGFkb3cgcm9vdHMuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlciA9PT0gJ2Z1bmN0aW9uJyAmJiBkb2N1bWVudC5ib2R5ICYmXG4gICAgICAoKGRvY3VtZW50LmJvZHkgYXMgYW55KS5jcmVhdGVTaGFkb3dSb290IHx8XG4gICAgICAgdHlwZW9mIGRvY3VtZW50LmJvZHkuYXR0YWNoU2hhZG93ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNvbnN0IHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LmJvZHksIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0cmVlV2Fsa2VyLmN1cnJlbnROb2RlIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnROb2RlLnNoYWRvd1Jvb3Q7XG5cbiAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgIC8vIE5vdGUgdGhhdCBgU2hhZG93Um9vdGAgZG9lc24ndCBzdXBwb3J0IGBnZXRFbGVtZW50c0J5TmFtZWBcbiAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBmYWxsIGJhY2sgdG8gYHF1ZXJ5U2VsZWN0b3JgLlxuICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpIHx8IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW25hbWU9XCIke3RhcmdldH1cIl1gKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3VycmVudE5vZGUgPSB0cmVlV2Fsa2VyLm5leHROb2RlKCkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSB2aWV3cG9ydCBzY3JvbGxlci5cbiAqL1xuZXhwb3J0IGNsYXNzIE51bGxWaWV3cG9ydFNjcm9sbGVyIGltcGxlbWVudHMgVmlld3BvcnRTY3JvbGxlciB7XG4gIC8qKlxuICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvblxuICAgKi9cbiAgc2V0T2Zmc2V0KG9mZnNldDogW251bWJlciwgbnVtYmVyXXwoKCkgPT4gW251bWJlciwgbnVtYmVyXSkpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEVtcHR5IGltcGxlbWVudGF0aW9uXG4gICAqL1xuICBnZXRTY3JvbGxQb3NpdGlvbigpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gWzAsIDBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtcHR5IGltcGxlbWVudGF0aW9uXG4gICAqL1xuICBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvblxuICAgKi9cbiAgc2Nyb2xsVG9BbmNob3IoYW5jaG9yOiBzdHJpbmcpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEVtcHR5IGltcGxlbWVudGF0aW9uXG4gICAqL1xuICBzZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oc2Nyb2xsUmVzdG9yYXRpb246ICdhdXRvJ3wnbWFudWFsJyk6IHZvaWQge31cbn1cbiJdfQ==
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { LocationStrategy } from '@angular/common';
|
|
9
|
-
import { EventEmitter, Injectable } from '@angular/core';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
/**
|
|
12
|
-
* A mock implementation of {@link LocationStrategy} that allows tests to fire simulated
|
|
13
|
-
* location events.
|
|
14
|
-
*
|
|
15
|
-
* @publicApi
|
|
16
|
-
*/
|
|
17
|
-
class MockLocationStrategy extends LocationStrategy {
|
|
18
|
-
constructor() {
|
|
19
|
-
super();
|
|
20
|
-
this.internalBaseHref = '/';
|
|
21
|
-
this.internalPath = '/';
|
|
22
|
-
this.internalTitle = '';
|
|
23
|
-
this.urlChanges = [];
|
|
24
|
-
/** @internal */
|
|
25
|
-
this._subject = new EventEmitter();
|
|
26
|
-
this.stateChanges = [];
|
|
27
|
-
}
|
|
28
|
-
simulatePopState(url) {
|
|
29
|
-
this.internalPath = url;
|
|
30
|
-
this._subject.emit(new _MockPopStateEvent(this.path()));
|
|
31
|
-
}
|
|
32
|
-
path(includeHash = false) {
|
|
33
|
-
return this.internalPath;
|
|
34
|
-
}
|
|
35
|
-
prepareExternalUrl(internal) {
|
|
36
|
-
if (internal.startsWith('/') && this.internalBaseHref.endsWith('/')) {
|
|
37
|
-
return this.internalBaseHref + internal.substring(1);
|
|
38
|
-
}
|
|
39
|
-
return this.internalBaseHref + internal;
|
|
40
|
-
}
|
|
41
|
-
pushState(ctx, title, path, query) {
|
|
42
|
-
// Add state change to changes array
|
|
43
|
-
this.stateChanges.push(ctx);
|
|
44
|
-
this.internalTitle = title;
|
|
45
|
-
const url = path + (query.length > 0 ? ('?' + query) : '');
|
|
46
|
-
this.internalPath = url;
|
|
47
|
-
const externalUrl = this.prepareExternalUrl(url);
|
|
48
|
-
this.urlChanges.push(externalUrl);
|
|
49
|
-
}
|
|
50
|
-
replaceState(ctx, title, path, query) {
|
|
51
|
-
// Reset the last index of stateChanges to the ctx (state) object
|
|
52
|
-
this.stateChanges[(this.stateChanges.length || 1) - 1] = ctx;
|
|
53
|
-
this.internalTitle = title;
|
|
54
|
-
const url = path + (query.length > 0 ? ('?' + query) : '');
|
|
55
|
-
this.internalPath = url;
|
|
56
|
-
const externalUrl = this.prepareExternalUrl(url);
|
|
57
|
-
this.urlChanges.push('replace: ' + externalUrl);
|
|
58
|
-
}
|
|
59
|
-
onPopState(fn) {
|
|
60
|
-
this._subject.subscribe({ next: fn });
|
|
61
|
-
}
|
|
62
|
-
getBaseHref() {
|
|
63
|
-
return this.internalBaseHref;
|
|
64
|
-
}
|
|
65
|
-
back() {
|
|
66
|
-
if (this.urlChanges.length > 0) {
|
|
67
|
-
this.urlChanges.pop();
|
|
68
|
-
this.stateChanges.pop();
|
|
69
|
-
const nextUrl = this.urlChanges.length > 0 ? this.urlChanges[this.urlChanges.length - 1] : '';
|
|
70
|
-
this.simulatePopState(nextUrl);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
forward() {
|
|
74
|
-
throw 'not implemented';
|
|
75
|
-
}
|
|
76
|
-
getState() {
|
|
77
|
-
return this.stateChanges[(this.stateChanges.length || 1) - 1];
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
MockLocationStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: MockLocationStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
81
|
-
MockLocationStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: MockLocationStrategy });
|
|
82
|
-
export { MockLocationStrategy };
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: MockLocationStrategy, decorators: [{
|
|
84
|
-
type: Injectable
|
|
85
|
-
}], ctorParameters: function () { return []; } });
|
|
86
|
-
class _MockPopStateEvent {
|
|
87
|
-
constructor(newUrl) {
|
|
88
|
-
this.newUrl = newUrl;
|
|
89
|
-
this.pop = true;
|
|
90
|
-
this.type = 'popstate';
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sb2NhdGlvbl9zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi90ZXN0aW5nL3NyYy9tb2NrX2xvY2F0aW9uX3N0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUl2RDs7Ozs7R0FLRztBQUNILE1BQ2Esb0JBQXFCLFNBQVEsZ0JBQWdCO0lBUXhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFSVixxQkFBZ0IsR0FBVyxHQUFHLENBQUM7UUFDL0IsaUJBQVksR0FBVyxHQUFHLENBQUM7UUFDM0Isa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsZUFBVSxHQUFhLEVBQUUsQ0FBQztRQUMxQixnQkFBZ0I7UUFDaEIsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLGlCQUFZLEdBQVUsRUFBRSxDQUFDO0lBR2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxDQUFDLGNBQXVCLEtBQUs7UUFDL0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFnQjtRQUNqQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUSxFQUFFLEtBQWEsRUFBRSxJQUFZLEVBQUUsS0FBYTtRQUM1RCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUV4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFRLEVBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxLQUFhO1FBQy9ELGlFQUFpRTtRQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRTdELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFFeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQXdCO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0saUJBQWlCLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDOzs0SEE3RVUsb0JBQW9CO2dJQUFwQixvQkFBb0I7U0FBcEIsb0JBQW9CO3NHQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7O0FBaUZYLE1BQU0sa0JBQWtCO0lBR3RCLFlBQW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRmpDLFFBQUcsR0FBWSxJQUFJLENBQUM7UUFDcEIsU0FBSSxHQUFXLFVBQVUsQ0FBQztJQUNVLENBQUM7Q0FDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtMb2NhdGlvblN0cmF0ZWd5fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXIsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cblxuLyoqXG4gKiBBIG1vY2sgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIExvY2F0aW9uU3RyYXRlZ3l9IHRoYXQgYWxsb3dzIHRlc3RzIHRvIGZpcmUgc2ltdWxhdGVkXG4gKiBsb2NhdGlvbiBldmVudHMuXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9ja0xvY2F0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBMb2NhdGlvblN0cmF0ZWd5IHtcbiAgaW50ZXJuYWxCYXNlSHJlZjogc3RyaW5nID0gJy8nO1xuICBpbnRlcm5hbFBhdGg6IHN0cmluZyA9ICcvJztcbiAgaW50ZXJuYWxUaXRsZTogc3RyaW5nID0gJyc7XG4gIHVybENoYW5nZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3N1YmplY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIHN0YXRlQ2hhbmdlczogYW55W10gPSBbXTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHNpbXVsYXRlUG9wU3RhdGUodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmludGVybmFsUGF0aCA9IHVybDtcbiAgICB0aGlzLl9zdWJqZWN0LmVtaXQobmV3IF9Nb2NrUG9wU3RhdGVFdmVudCh0aGlzLnBhdGgoKSkpO1xuICB9XG5cbiAgcGF0aChpbmNsdWRlSGFzaDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFBhdGg7XG4gIH1cblxuICBwcmVwYXJlRXh0ZXJuYWxVcmwoaW50ZXJuYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGludGVybmFsLnN0YXJ0c1dpdGgoJy8nKSAmJiB0aGlzLmludGVybmFsQmFzZUhyZWYuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxCYXNlSHJlZiArIGludGVybmFsLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxCYXNlSHJlZiArIGludGVybmFsO1xuICB9XG5cbiAgcHVzaFN0YXRlKGN0eDogYW55LCB0aXRsZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBBZGQgc3RhdGUgY2hhbmdlIHRvIGNoYW5nZXMgYXJyYXlcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5wdXNoKGN0eCk7XG5cbiAgICB0aGlzLmludGVybmFsVGl0bGUgPSB0aXRsZTtcblxuICAgIGNvbnN0IHVybCA9IHBhdGggKyAocXVlcnkubGVuZ3RoID4gMCA/ICgnPycgKyBxdWVyeSkgOiAnJyk7XG4gICAgdGhpcy5pbnRlcm5hbFBhdGggPSB1cmw7XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHVybCk7XG4gICAgdGhpcy51cmxDaGFuZ2VzLnB1c2goZXh0ZXJuYWxVcmwpO1xuICB9XG5cbiAgcmVwbGFjZVN0YXRlKGN0eDogYW55LCB0aXRsZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBSZXNldCB0aGUgbGFzdCBpbmRleCBvZiBzdGF0ZUNoYW5nZXMgdG8gdGhlIGN0eCAoc3RhdGUpIG9iamVjdFxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzWyh0aGlzLnN0YXRlQ2hhbmdlcy5sZW5ndGggfHwgMSkgLSAxXSA9IGN0eDtcblxuICAgIHRoaXMuaW50ZXJuYWxUaXRsZSA9IHRpdGxlO1xuXG4gICAgY29uc3QgdXJsID0gcGF0aCArIChxdWVyeS5sZW5ndGggPiAwID8gKCc/JyArIHF1ZXJ5KSA6ICcnKTtcbiAgICB0aGlzLmludGVybmFsUGF0aCA9IHVybDtcblxuICAgIGNvbnN0IGV4dGVybmFsVXJsID0gdGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwodXJsKTtcbiAgICB0aGlzLnVybENoYW5nZXMucHVzaCgncmVwbGFjZTogJyArIGV4dGVybmFsVXJsKTtcbiAgfVxuXG4gIG9uUG9wU3RhdGUoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6IGZufSk7XG4gIH1cblxuICBnZXRCYXNlSHJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmludGVybmFsQmFzZUhyZWY7XG4gIH1cblxuICBiYWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVybENoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51cmxDaGFuZ2VzLnBvcCgpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMucG9wKCk7XG4gICAgICBjb25zdCBuZXh0VXJsID0gdGhpcy51cmxDaGFuZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnVybENoYW5nZXNbdGhpcy51cmxDaGFuZ2VzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICB0aGlzLnNpbXVsYXRlUG9wU3RhdGUobmV4dFVybCk7XG4gICAgfVxuICB9XG5cbiAgZm9yd2FyZCgpOiB2b2lkIHtcbiAgICB0aHJvdyAnbm90IGltcGxlbWVudGVkJztcbiAgfVxuXG4gIGdldFN0YXRlKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlQ2hhbmdlc1sodGhpcy5zdGF0ZUNoYW5nZXMubGVuZ3RoIHx8IDEpIC0gMV07XG4gIH1cbn1cblxuY2xhc3MgX01vY2tQb3BTdGF0ZUV2ZW50IHtcbiAgcG9wOiBib29sZWFuID0gdHJ1ZTtcbiAgdHlwZTogc3RyaW5nID0gJ3BvcHN0YXRlJztcbiAgY29uc3RydWN0b3IocHVibGljIG5ld1VybDogc3RyaW5nKSB7fVxufVxuIl19
|