wxt 0.8.1 → 0.8.2
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/dist/cli.cjs +31 -37
- package/dist/client.d.ts +4 -2
- package/dist/client.js +10 -3
- package/dist/index.cjs +30 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +30 -36
- package/dist/index.js.map +1 -1
- package/dist/virtual-modules/content-script-entrypoint.js +9 -2
- package/dist/virtual-modules/content-script-entrypoint.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { Manifest } from 'webextension-polyfill';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Implements [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
|
|
5
5
|
* Used to detect and stop content script code when the script is invalidated.
|
|
6
6
|
*
|
|
7
7
|
* It also provides several utilities like `ctx.setTimeout` and `ctx.setInterval` that should be used in
|
|
8
8
|
* content scripts instead of `window.setTimeout` or `window.setInterval`.
|
|
9
9
|
*/
|
|
10
|
-
declare class ContentScriptContext
|
|
10
|
+
declare class ContentScriptContext implements AbortController {
|
|
11
11
|
#private;
|
|
12
12
|
private readonly contentScriptName;
|
|
13
13
|
readonly options?: Omit<ContentScriptDefinition, "main"> | undefined;
|
|
14
14
|
private static SCRIPT_STARTED_MESSAGE_TYPE;
|
|
15
15
|
constructor(contentScriptName: string, options?: Omit<ContentScriptDefinition, "main"> | undefined);
|
|
16
|
+
get signal(): AbortSignal;
|
|
17
|
+
abort(reason?: any): void;
|
|
16
18
|
get isInvalid(): boolean;
|
|
17
19
|
get isValid(): boolean;
|
|
18
20
|
/**
|
package/dist/client.js
CHANGED
|
@@ -153,11 +153,11 @@ async function loadCss() {
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
// src/client/utils/ContentScriptContext.ts
|
|
156
|
-
var ContentScriptContext = class _ContentScriptContext
|
|
156
|
+
var ContentScriptContext = class _ContentScriptContext {
|
|
157
157
|
constructor(contentScriptName, options) {
|
|
158
|
-
super();
|
|
159
158
|
this.contentScriptName = contentScriptName;
|
|
160
159
|
this.options = options;
|
|
160
|
+
this.#abortController = new AbortController();
|
|
161
161
|
if (this.#isTopFrame) {
|
|
162
162
|
this.#stopOldScripts();
|
|
163
163
|
}
|
|
@@ -167,6 +167,13 @@ var ContentScriptContext = class _ContentScriptContext extends AbortController {
|
|
|
167
167
|
}
|
|
168
168
|
static SCRIPT_STARTED_MESSAGE_TYPE = "wxt:content-script-started";
|
|
169
169
|
#isTopFrame = window.self === window.top;
|
|
170
|
+
#abortController;
|
|
171
|
+
get signal() {
|
|
172
|
+
return this.#abortController.signal;
|
|
173
|
+
}
|
|
174
|
+
abort(reason) {
|
|
175
|
+
return this.#abortController.abort(reason);
|
|
176
|
+
}
|
|
170
177
|
get isInvalid() {
|
|
171
178
|
if (browser.runtime.id == null) {
|
|
172
179
|
this.notifyInvalidated();
|
|
@@ -306,4 +313,4 @@ export {
|
|
|
306
313
|
defineBackground,
|
|
307
314
|
defineContentScript
|
|
308
315
|
};
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC9kZWZpbmVDb250ZW50U2NyaXB0LnRzIiwgIi4uL3NyYy9jbGllbnQvZGVmaW5lQmFja2dyb3VuZC50cyIsICIuLi9zcmMvY2xpZW50L2NyZWF0ZUNvbnRlbnRTY3JpcHRVaS50cyIsICIuLi9zcmMvY2xpZW50L2Jyb3dzZXIudHMiLCAiLi4vc3JjL2NsaWVudC91dGlscy9sb2dnZXIudHMiLCAiLi4vc3JjL2NsaWVudC91dGlscy9Db250ZW50U2NyaXB0Q29udGV4dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGVudFNjcmlwdERlZmluaXRpb24gfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbnRlbnRTY3JpcHQoXG4gIGRlZmluaXRpb246IENvbnRlbnRTY3JpcHREZWZpbml0aW9uLFxuKTogQ29udGVudFNjcmlwdERlZmluaXRpb24ge1xuICByZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICJpbXBvcnQgeyBCYWNrZ3JvdW5kRGVmaW5pdGlvbiB9IGZyb20gJy4uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJhY2tncm91bmQobWFpbjogKCkgPT4gdm9pZCk6IEJhY2tncm91bmREZWZpbml0aW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJhY2tncm91bmQoXG4gIGRlZmluaXRpb246IEJhY2tncm91bmREZWZpbml0aW9uLFxuKTogQmFja2dyb3VuZERlZmluaXRpb247XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQmFja2dyb3VuZChcbiAgYXJnOiAoKCkgPT4gdm9pZCkgfCBCYWNrZ3JvdW5kRGVmaW5pdGlvbixcbik6IEJhY2tncm91bmREZWZpbml0aW9uIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHJldHVybiB7IG1haW46IGFyZyB9O1xuICByZXR1cm4gYXJnO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUlzb2xhdGVkRWxlbWVudCB9IGZyb20gJ0B3ZWJleHQtY29yZS9pc29sYXRlZC1lbGVtZW50JztcbmltcG9ydCB7IGJyb3dzZXIgfSBmcm9tICcuL2Jyb3dzZXInO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgQ29udGVudFNjcmlwdENvbnRleHQgfSBmcm9tICcuJztcblxuLyoqXG4gKiBVdGlsaXR5IGZvciBtb3VudGluZyBjb250ZW50IHNjcmlwdCBVSSdzIHdpdGggaXNvbGF0ZWQgc3R5bGVzLiBBdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgRE9NXG4gKiB3aGVuIHRoZSBjb250ZW50IHNjcmlwdCdzIGNvbnRleHQgaXMgaW52YWxpZGF0ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vd3h0LmRldi9lbnRyeXBvaW50cy9jb250ZW50LXNjcmlwdHMuaHRtbCN1aSBmb3IgZnVsbCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBlbnRyeXBvaW50cy9leGFtcGxlLXVpLmNvbnRlbnQvaW5kZXgudHNcbiAqIGltcG9ydCBcIi4vc3R5bGUuY3NzXCJcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBkZWZpbmVDb250ZW50U2NyaXB0KHtcbiAqICAgbWF0Y2hlczogW1wiKjovLyouZ29vZ2xlLmNvbS8qXCJdLFxuICogICBjc3NJbmplY3Rpb25Nb2RlOiBcInVpXCIsXG4gKlxuICogICBhc3luYyBtYWluKGN0eCkge1xuICogICAgIGNvbnN0IHVpID0gYXdhaXQgY3JlYXRlQ29udGVudFNjcmlwdFVpKGN0eCwge1xuICogICAgICAgbmFtZTogXCJleGFtcGxlLW92ZXJsYXlcIixcbiAqICAgICAgIHR5cGU6IFwibW9kYWxcIixcbiAqICAgICAgIG1vdW50KGNvbnRhaW5lcikge1xuICogICAgICAgICBjb25zdCBhcHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICogICAgICAgICBhcHAudGV4dENvbnRlbnQgPSBcIkNvbnRlbnQgU2NyaXB0IFVJXCI7XG4gKiAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoYXBwKTtcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICogICAgIHVpLm1vdW50KCk7XG4gKiAgIH1cbiAqIH0pXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250ZW50U2NyaXB0VWk8VEFwcD4oXG4gIGN0eDogQ29udGVudFNjcmlwdENvbnRleHQsXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4sXG4pOiBQcm9taXNlPENvbnRlbnRTY3JpcHRVaTxUQXBwPj4ge1xuICBjb25zdCBjc3MgPSBbb3B0aW9ucy5jc3MgPz8gJyddO1xuICBpZiAoY3R4Lm9wdGlvbnM/LmNzc0luamVjdGlvbk1vZGUgPT09ICd1aScpIHtcbiAgICBjc3MucHVzaChhd2FpdCBsb2FkQ3NzKCkpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzb2xhdGVkRWxlbWVudDogdWlDb250YWluZXIsXG4gICAgcGFyZW50RWxlbWVudDogc2hhZG93SG9zdCxcbiAgICBzaGFkb3csXG4gIH0gPSBhd2FpdCBjcmVhdGVJc29sYXRlZEVsZW1lbnQoe1xuICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICBjc3M6IHtcbiAgICAgIHRleHRDb250ZW50OiBjc3Muam9pbignXFxuJykudHJpbSgpLFxuICAgIH0sXG4gICAgbW9kZTogJ29wZW4nLFxuICB9KTtcblxuICBjb25zdCBnZXRBbmNob3IgPSAoKTogRWxlbWVudCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKG9wdGlvbnMuYW5jaG9yID09IG51bGwpIHJldHVybiBkb2N1bWVudC5ib2R5O1xuXG4gICAgbGV0IHJlc29sdmVkID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmFuY2hvciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuYW5jaG9yKCkgOiBvcHRpb25zLmFuY2hvcjtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEVsZW1lbnQ+KHJlc29sdmVkKSA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVkID8/IHVuZGVmaW5lZDtcbiAgfTtcblxuICBsZXQgbW91bnRlZDogVEFwcDtcblxuICBjb25zdCBtb3VudCA9ICgpID0+IHtcbiAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3IoKTtcbiAgICBpZiAoYW5jaG9yID09IG51bGwpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb250ZW50IHNjcmlwdCB1aTogY291bGQgbm90IGZpbmQgYW5jaG9yIGVsZW1lbnQnLFxuICAgICAgKTtcblxuICAgIC8vIE1vdW50IFVJIGluc2lkZSBzaGFkb3cgcm9vdFxuICAgIG1vdW50ZWQgPSBvcHRpb25zLm1vdW50KHVpQ29udGFpbmVyKTtcblxuICAgIC8vIEFkZCBzaGFkb3cgcm9vdCBlbGVtZW50IHRvIERPTVxuICAgIHN3aXRjaCAob3B0aW9ucy5hcHBlbmQpIHtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgIGFuY2hvci5hcHBlbmQoc2hhZG93SG9zdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlyc3QnOlxuICAgICAgICBpZiAoYW5jaG9yLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBhbmNob3IuaW5zZXJ0QmVmb3JlKHNoYWRvd0hvc3QsIGFuY2hvci5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbmNob3IuYXBwZW5kKHNoYWRvd0hvc3QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVwbGFjZSc6XG4gICAgICAgIGFuY2hvci5yZXBsYWNlV2l0aChzaGFkb3dIb3N0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgIGFuY2hvci5yZXBsYWNlV2l0aChhbmNob3IsIHNoYWRvd0hvc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgIGFuY2hvci5yZXBsYWNlV2l0aChzaGFkb3dIb3N0LCBhbmNob3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9wdGlvbnMuYXBwZW5kKGFuY2hvciwgc2hhZG93SG9zdCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHR5cGVzXG4gICAgaWYgKG9wdGlvbnMudHlwZSAhPT0gJ2lubGluZScpIHtcbiAgICAgIGlmIChvcHRpb25zLnpJbmRleCAhPSBudWxsKVxuICAgICAgICBzaGFkb3dIb3N0LnN0eWxlLnpJbmRleCA9IFN0cmluZyhvcHRpb25zLnpJbmRleCk7XG5cbiAgICAgIHNoYWRvd0hvc3Quc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG4gICAgICBzaGFkb3dIb3N0LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICAgIHNoYWRvd0hvc3Quc3R5bGUud2lkdGggPSAnMCc7XG4gICAgICBzaGFkb3dIb3N0LnN0eWxlLmhlaWdodCA9ICcwJztcbiAgICAgIHNoYWRvd0hvc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgIGNvbnN0IGh0bWwgPSBzaGFkb3cucXVlcnlTZWxlY3RvcignaHRtbCcpITtcbiAgICAgIC8vIEhUTUwgZG9lc24ndCBleGlzdCBpbiB0ZXN0c1xuICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIGh0bWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBpZiAob3B0aW9ucy5hbGlnbm1lbnQ/LnN0YXJ0c1dpdGgoJ2JvdHRvbS0nKSkgaHRtbC5zdHlsZS5ib3R0b20gPSAnMCc7XG4gICAgICAgIGVsc2UgaHRtbC5zdHlsZS50b3AgPSAnMCc7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Py5lbmRzV2l0aCgnLXJpZ2h0JykpIGh0bWwuc3R5bGUucmlnaHQgPSAnMCc7XG4gICAgICAgIGVsc2UgaHRtbC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIGh0bWwuc3R5bGUudG9wID0gJzAnO1xuICAgICAgICBodG1sLnN0eWxlLmJvdHRvbSA9ICcwJztcbiAgICAgICAgaHRtbC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgICBodG1sLnN0eWxlLnJpZ2h0ID0gJzAnO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoKSA9PiB7XG4gICAgLy8gRGV0YXRjaCBzaGFkb3cgcm9vdCBmcm9tIERPTVxuICAgIHNoYWRvd0hvc3QucmVtb3ZlKCk7XG4gICAgLy8gQ2xlYW51cCBtb3VudGVkIHN0YXRlXG4gICAgb3B0aW9ucy5vblJlbW92ZT8uKG1vdW50ZWQpO1xuICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBmcm9tIHVpQ29udGFpbmVyXG4gICAgd2hpbGUgKHVpQ29udGFpbmVyLmxhc3RDaGlsZClcbiAgICAgIHVpQ29udGFpbmVyLnJlbW92ZUNoaWxkKHVpQ29udGFpbmVyLmxhc3RDaGlsZCk7XG4gIH07XG5cbiAgY3R4Lm9uSW52YWxpZGF0ZWQocmVtb3ZlKTtcblxuICByZXR1cm4ge1xuICAgIHNoYWRvdyxcbiAgICBzaGFkb3dIb3N0LFxuICAgIHVpQ29udGFpbmVyLFxuICAgIG1vdW50LFxuICAgIHJlbW92ZSxcbiAgICBtb3VudGVkOiBtb3VudGVkISxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIHRoZSBDU1MgZm9yIHRoZSBjdXJyZW50IGVudHJ5cG9pbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDc3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdXJsID0gYnJvd3Nlci5ydW50aW1lLmdldFVSTChgL2NvbnRlbnQtc2NyaXB0cy8ke19fRU5UUllQT0lOVF9ffS5jc3NgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGNvbnN0IGNzcyA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cbiAgICAvLyBSZXBsYWNlIDpyb290IHNlbGVjdG9ycyB3aXRoIDpob3N0IHNpbmNlIHdlJ3JlIGluIGEgc2hhZG93IHJvb3RcbiAgICByZXR1cm4gY3NzLnJlcGxhY2VBbGwoJzpyb290JywgJzpob3N0Jyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYEZhaWxlZCB0byBsb2FkIHN0eWxlcyBAICR7dXJsfS4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IHRoZSBzdHlsZXNoZWV0IGluIHlvdXIgZW50cnlwb2ludD9gLFxuICAgICAgZXJyLFxuICAgICk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFNjcmlwdFVpPFRBcHA+IHtcbiAgLyoqXG4gICAqIFRoZSBgSFRNTEVsZW1lbnRgIGhvc3RpbmcgdGhlIHNoYWRvdyByb290IHVzZWQgdG8gaXNvbGF0ZSB0aGUgVUkncyBzdHlsZXMuIFRoaXMgaXMgdGhlIGVsZW1lbnRcbiAgICogdGhhdCBnZXQncyBhZGRlZCB0byB0aGUgRE9NLiBUaGlzIGVsZW1lbnQncyBzdHlsZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSB0aGUgd2VicGFnZS5cbiAgICovXG4gIHNoYWRvd0hvc3Q6IEhUTUxFbGVtZW50O1xuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciBlbGVtZW50IGluc2lkZSB0aGUgYFNoYWRvd1Jvb3RgIHdob3NlIHN0eWxlcyBhcmUgaXNvbGF0ZWQuIFRoZSBVSSBpcyBtb3VudGVkXG4gICAqIGluc2lkZSB0aGlzIGBIVE1MRWxlbWVudGAuXG4gICAqL1xuICB1aUNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgc2hhZG93IHJvb3QgcGVyZm9ybWluZyB0aGUgaXNvbGF0aW9uLlxuICAgKi9cbiAgc2hhZG93OiBTaGFkb3dSb290O1xuICAvKipcbiAgICogQ3VzdG9tIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgYG9wdGlvbnMubW91bnRgIGZ1bmN0aW9uLlxuICAgKi9cbiAgbW91bnRlZDogVEFwcDtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRoYXQgbW91bnRzIG9yIHJlbW91bnRzIHRoZSBVSSBvbiB0aGUgcGFnZS5cbiAgICovXG4gIG1vdW50OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCByZW1vdmVzIHRoZSBVSSBmcm9tIHRoZSB3ZWJwYWdlLlxuICAgKi9cbiAgcmVtb3ZlOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQmFzZUNvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBjb21wb25lbnQgdXNlZCB0byBob3N0IHRoZSBTaGFkb3dSb290LiBNdXN0IGJlIGtlYmFiLWNhc2UuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbiBjb21iaW5hdGlvbiB3aXRoIGBhbmNob3JgLCBkZWNpZGUgaG93IHRvIGFkZCB0aGUgVUkgdG8gdGhlIERPTS5cbiAgICpcbiAgICogLSBgXCJsYXN0XCJgIChkZWZhdWx0KSAtIEFkZCB0aGUgVUkgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGBhbmNob3JgIGVsZW1lbnRcbiAgICogLSBgXCJmaXJzdFwiYCAtIEFkZCB0aGUgVUkgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGBhbmNob3JgIGVsZW1lbnRcbiAgICogLSBgXCJyZXBsYWNlXCJgIC0gUmVwbGFjZSB0aGUgYGFuY2hvcmAgZWxlbWVudCB3aXRoIHRoZSBVSS5cbiAgICogLSBgXCJiZWZvcmVcImAgLSBBZGQgdGhlIFVJIGFzIHRoZSBzaWJsaW5nIGJlZm9yZSB0aGUgYGFuY2hvcmAgZWxlbWVudFxuICAgKiAtIGBcImFmdGVyXCJgIC0gQWRkIHRoZSBVSSBhcyB0aGUgc2libGluZyBhZnRlciB0aGUgYGFuY2hvcmAgZWxlbWVudFxuICAgKiAtIGAoYW5jaG9yLCB1aSkgPT4gdm9pZGAgLSBDdXN0b21pemFibGUgZnVuY3Rpb24gdGhhdCBsZXQncyB5b3UgYWRkIHRoZSBVSSB0byB0aGUgRE9NXG4gICAqL1xuICBhcHBlbmQ/OiBDb250ZW50U2NyaXB0QXBwZW5kTW9kZSB8ICgoYW5jaG9yOiBFbGVtZW50LCB1aTogRWxlbWVudCkgPT4gdm9pZCk7XG4gIC8qKlxuICAgKiBBIENTUyBzZWxlY3RvciwgZWxlbWVudCwgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZSBvZiB0aGUgdHdvLiBBbG9uZyB3aXRoIGBhcHBlbmRgLCB0aGVcbiAgICogYGFuY2hvcmAgZGljdGF0ZXMgd2hlcmUgaW4gdGhlIHBhZ2UgdGhlIFVJIHdpbGwgYmUgYWRkZWQuXG4gICAqL1xuICBhbmNob3I/OlxuICAgIHwgc3RyaW5nXG4gICAgfCBFbGVtZW50XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgICB8ICgoKSA9PiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBleGVjdXRlZCB3aGVuIG1vdW50aW5nIHRoZSBVSS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgY3JlYXRlIGFuZCBhcHBlbmQgdGhlIFVJIHRvIHRoZVxuICAgKiBgY29udGFpbmVyYCBlbGVtZW50LiBJdCBpcyBjYWxsZWQgZXZlcnkgdGltZSBgdWkubW91bnQoKWAgaXMgY2FsbGVkXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgcmV0dXJuIGEgdmFsdWUgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYXQgYHVpLm1vdW50ZWRgIG9yIGluIHRoZSBgb25SZW1vdmVgIGNhbGxiYWNrLlxuICAgKi9cbiAgbW91bnQ6IChjb250YWluZXI6IEVsZW1lbnQpID0+IFRBcHA7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgVUkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB3ZWJwYWdlLiBVc2UgdG8gY2xlYW51cCB5b3VyIFVJLCBsaWtlXG4gICAqIHVubW91bnRpbmcgeW91ciB2dWUgb3IgcmVhY3QgYXBwcy5cbiAgICovXG4gIG9uUmVtb3ZlPzogKG1vdW50ZWQ6IFRBcHApID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDdXN0b20gQ1NTIHRleHQgdG8gYXBwbHkgdG8gdGhlIFVJLiBJZiB5b3VyIGNvbnRlbnQgc2NyaXB0IGltcG9ydHMvZ2VuZXJhdGVzIENTUyBhbmQgeW91J3ZlXG4gICAqIHNldCBgY3NzSW5qZWN0aW9uTW9kZTogXCJ1aVwiYCwgdGhlIGltcG9ydGVkIENTUyB3aWxsIGJlIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkuIFlvdSBkbyBub3QgbmVlZFxuICAgKiB0byBwYXNzIHRob3NlIHN0eWxlcyBpbiBoZXJlLiBUaGlzIGlzIGZvciBhbnkgYWRkaXRpb25hbCBzdHlsZXMgbm90IGluIHRoZSBpbXBvcnRlZCBDU1MuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3d4dC5kZXYvZW50cnlwb2ludHMvY29udGVudC1zY3JpcHRzLmh0bWwjdWkgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIGNzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgT3ZlcmxheUNvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gPVxuICBCYXNlQ29udGVudFNjcmlwdFVpT3B0aW9uczxUQXBwPiAmIHtcbiAgICB0eXBlOiAnb3ZlcmxheSc7XG4gICAgLyoqXG4gICAgICogV2hlbiB1c2luZyBgdHlwZTogXCJvdmVybGF5XCJgLCB0aGUgbW91bnRlZCBlbGVtZW50IGlzIDBweCBieSAwcHggaW4gc2l6ZS4gQWxpZ25tZW50IHNwZWNpZmllc1xuICAgICAqIHdoaWNoIGNvcm5lciBpcyBhbGlnbmVkIHdpdGggdGhhdCAweDAgcGl4ZWwgc3BhY2UuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcInRvcC1sZWZ0XCJcbiAgICAgKi9cbiAgICBhbGlnbm1lbnQ/OiBDb250ZW50U2NyaXB0VWlPdmVybGF5QWxpZ25tZW50O1xuICAgIC8qKlxuICAgICAqIFRoZSBgei1pbmRleGAgdXNlZCBvbiB0aGUgYHNoYWRvd0hvc3RgLiBTZXQgdG8gYSBwb3NpdGl2ZSBudW1iZXIgdG8gc2hvdyB5b3VyIFVJIG92ZXIgd2Vic2l0ZVxuICAgICAqIGNvbnRlbnQuXG4gICAgICovXG4gICAgekluZGV4PzogbnVtYmVyO1xuICB9O1xuXG5leHBvcnQgdHlwZSBNb2RhbENvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gPVxuICBCYXNlQ29udGVudFNjcmlwdFVpT3B0aW9uczxUQXBwPiAmIHtcbiAgICB0eXBlOiAnbW9kYWwnO1xuICAgIC8qKlxuICAgICAqIFRoZSBgei1pbmRleGAgdXNlZCBvbiB0aGUgYHNoYWRvd0hvc3RgLiBTZXQgdG8gYSBwb3NpdGl2ZSBudW1iZXIgdG8gc2hvdyB5b3VyIFVJIG92ZXIgd2Vic2l0ZVxuICAgICAqIGNvbnRlbnQuXG4gICAgICovXG4gICAgekluZGV4PzogbnVtYmVyO1xuICB9O1xuXG5leHBvcnQgdHlwZSBJbmxpbmVDb250ZW50U2NyaXB0VWlPcHRpb25zPFRBcHA+ID1cbiAgQmFzZUNvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gJiB7XG4gICAgdHlwZTogJ2lubGluZSc7XG4gIH07XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRTY3JpcHRVaU92ZXJsYXlBbGlnbm1lbnQgPVxuICB8ICd0b3AtbGVmdCdcbiAgfCAndG9wLXJpZ2h0J1xuICB8ICdib3R0b20tbGVmdCdcbiAgfCAnYm90dG9tLXJpZ2h0JztcblxuZXhwb3J0IHR5cGUgQ29udGVudFNjcmlwdEFwcGVuZE1vZGUgPVxuICB8ICdsYXN0J1xuICB8ICdmaXJzdCdcbiAgfCAncmVwbGFjZSdcbiAgfCAnYmVmb3JlJ1xuICB8ICdhZnRlcic7XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gPVxuICB8IE92ZXJsYXlDb250ZW50U2NyaXB0VWlPcHRpb25zPFRBcHA+XG4gIHwgTW9kYWxDb250ZW50U2NyaXB0VWlPcHRpb25zPFRBcHA+XG4gIHwgSW5saW5lQ29udGVudFNjcmlwdFVpT3B0aW9uczxUQXBwPjtcbiIsICIvKipcbiAqIEBtb2R1bGUgd3h0L2Jyb3dzZXJcbiAqL1xuaW1wb3J0IG9yaWdpbmFsQnJvd3NlciwgeyBCcm93c2VyLCBSdW50aW1lLCBJMThuIH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcblxuZXhwb3J0IGludGVyZmFjZSBBdWdtZW50ZWRCcm93c2VyIGV4dGVuZHMgQnJvd3NlciB7XG4gIHJ1bnRpbWU6IFd4dFJ1bnRpbWU7XG4gIGkxOG46IFd4dEkxOG47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3h0UnVudGltZSBleHRlbmRzIFJ1bnRpbWUuU3RhdGljIHtcbiAgLy8gT3ZlcnJpZGVuIHBlci1wcm9qZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3h0STE4biBleHRlbmRzIEkxOG4uU3RhdGljIHtcbiAgLy8gT3ZlcnJpZGVuIHBlci1wcm9qZWN0XG59XG5cbmV4cG9ydCBjb25zdCBicm93c2VyOiBBdWdtZW50ZWRCcm93c2VyID0gb3JpZ2luYWxCcm93c2VyO1xuIiwgImZ1bmN0aW9uIHByaW50KG1ldGhvZDogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLCAuLi5hcmdzOiBhbnlbXSkge1xuICBpZiAoaW1wb3J0Lm1ldGEuZW52Lk1PREUgPT09ICdwcm9kdWN0aW9uJykgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXJncy5zaGlmdCgpO1xuICAgIG1ldGhvZChgW3d4dF0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZCgnW3d4dF0nLCAuLi5hcmdzKTtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGBjb25zb2xlYCB3aXRoIGEgXCJbd3h0XVwiIHByZWZpeFxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICBkZWJ1ZzogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLmRlYnVnLCAuLi5hcmdzKSxcbiAgbG9nOiAoLi4uYXJnczogYW55W10pID0+IHByaW50KGNvbnNvbGUubG9nLCAuLi5hcmdzKSxcbiAgd2FybjogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLndhcm4sIC4uLmFyZ3MpLFxuICBlcnJvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLmVycm9yLCAuLi5hcmdzKSxcbn07XG4iLCAiaW1wb3J0IHsgQ29udGVudFNjcmlwdERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGJyb3dzZXIgfSBmcm9tICcuLi9icm93c2VyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBFeHRlbmRzIFtgQWJvcnRDb250cm9sbGVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Fib3J0Q29udHJvbGxlcikuXG4gKiBVc2VkIHRvIGRldGVjdCBhbmQgc3RvcCBjb250ZW50IHNjcmlwdCBjb2RlIHdoZW4gdGhlIHNjcmlwdCBpcyBpbnZhbGlkYXRlZC5cbiAqXG4gKiBJdCBhbHNvIHByb3ZpZGVzIHNldmVyYWwgdXRpbGl0aWVzIGxpa2UgYGN0eC5zZXRUaW1lb3V0YCBhbmQgYGN0eC5zZXRJbnRlcnZhbGAgdGhhdCBzaG91bGQgYmUgdXNlZCBpblxuICogY29udGVudCBzY3JpcHRzIGluc3RlYWQgb2YgYHdpbmRvdy5zZXRUaW1lb3V0YCBvciBgd2luZG93LnNldEludGVydmFsYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRTY3JpcHRDb250ZXh0IGV4dGVuZHMgQWJvcnRDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgU0NSSVBUX1NUQVJURURfTUVTU0FHRV9UWVBFID0gJ3d4dDpjb250ZW50LXNjcmlwdC1zdGFydGVkJztcblxuICAjaXNUb3BGcmFtZSA9IHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGVudFNjcmlwdE5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9ucz86IE9taXQ8Q29udGVudFNjcmlwdERlZmluaXRpb24sICdtYWluJz4sXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAodGhpcy4jaXNUb3BGcmFtZSkge1xuICAgICAgdGhpcy4jc3RvcE9sZFNjcmlwdHMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFJ1biBvbiBuZXh0IHRpY2sgc28gdGhlIGxpc3RlbmVyIGl0IGFkZHMgaXNuJ3QgdHJpZ2dlcmVkIGJ5IHN0b3BPbGRTY3JpcHRcbiAgICAgIHRoaXMuI2xpc3RlbkZvck5ld2VyU2NyaXB0cygpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAoYnJvd3Nlci5ydW50aW1lLmlkID09IG51bGwpIHtcbiAgICAgIHRoaXMubm90aWZ5SW52YWxpZGF0ZWQoKTsgLy8gU2V0cyBgc2lnbmFsLmFib3J0ZWRgIHRvIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2lnbmFsLmFib3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNJbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgc2NyaXB0J3MgY29udGV4dCBpcyBpbnZhbGlkYXRlZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0byByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBicm93c2VyLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGNiKTtcbiAgICogY29uc3QgcmVtb3ZlSW52YWxpZGF0ZWRMaXN0ZW5lciA9IGN0eC5vbkludmFsaWRhdGVkKCgpID0+IHtcbiAgICogICBicm93c2VyLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGNiKTtcbiAgICogfSlcbiAgICogLy8gLi4uXG4gICAqIHJlbW92ZUludmFsaWRhdGVkTGlzdGVuZXIoKTtcbiAgICovXG4gIG9uSW52YWxpZGF0ZWQoY2I6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGNiKTtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcHJvbWlzZSB0aGF0IG5ldmVyIHJlc29sdmVzLiBVc2VmdWwgaWYgeW91IGhhdmUgYW4gYXN5bmMgZnVuY3Rpb24gdGhhdCBzaG91bGRuJ3QgcnVuXG4gICAqIGFmdGVyIHRoZSBjb250ZXh0IGlzIGV4cGlyZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGdldFZhbHVlRnJvbVN0b3JhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAqICAgaWYgKGN0eC5pc0ludmFsaWQpIHJldHVybiBjdHguYmxvY2soKTtcbiAgICpcbiAgICogICAvLyAuLi5cbiAgICogfVxuICAgKi9cbiAgYmxvY2s8VD4oKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICAgIC8vIG5vb3BcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGFyb3VuZCBgd2luZG93LnNldEludGVydmFsYCB0aGF0IGF1dG9tYXRpY2FsbHkgY2xlYXJzIHRoZSBpbnRlcnZhbCB3aGVuIGludmFsaWRhdGVkLlxuICAgKi9cbiAgc2V0SW50ZXJ2YWwoaGFuZGxlcjogKCkgPT4gdm9pZCwgdGltZW91dD86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSBoYW5kbGVyKCk7XG4gICAgfSwgdGltZW91dCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgdGhpcy5vbkludmFsaWRhdGVkKCgpID0+IGNsZWFySW50ZXJ2YWwoaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgYHdpbmRvdy5zZXRUaW1lb3V0YCB0aGF0IGF1dG9tYXRpY2FsbHkgY2xlYXJzIHRoZSBpbnRlcnZhbCB3aGVuIGludmFsaWRhdGVkLlxuICAgKi9cbiAgc2V0VGltZW91dChoYW5kbGVyOiAoKSA9PiB2b2lkLCB0aW1lb3V0PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgaGFuZGxlcigpO1xuICAgIH0sIHRpbWVvdXQpIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIHRoaXMub25JbnZhbGlkYXRlZCgoKSA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIHRoYXQgYXV0b21hdGljYWxseSBjYW5jZWxzIHRoZSByZXF1ZXN0IHdoZW5cbiAgICogaW52YWxpZGF0ZWQuXG4gICAqL1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgY2FsbGJhY2soLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uSW52YWxpZGF0ZWQoKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgYHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrYCB0aGF0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyB0aGUgcmVxdWVzdCB3aGVuXG4gICAqIGludmFsaWRhdGVkLlxuICAgKi9cbiAgcmVxdWVzdElkbGVDYWxsYmFjayhcbiAgICBjYWxsYmFjazogSWRsZVJlcXVlc3RDYWxsYmFjayxcbiAgICBvcHRpb25zPzogSWRsZVJlcXVlc3RPcHRpb25zLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdElkbGVDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNpZ25hbC5hYm9ydGVkKSBjYWxsYmFjayguLi5hcmdzKTtcbiAgICB9LCBvcHRpb25zKTtcblxuICAgIHRoaXMub25JbnZhbGlkYXRlZCgoKSA9PiBjYW5jZWxJZGxlQ2FsbGJhY2soaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXJgIGFuZCByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIHdoZW4gdGhlIGNvbnRleHQgaXMgaW52YWxpZGF0ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGN0eC5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgXCJtb3VzZW1vdmVcIiwgKCkgPT4ge1xuICAgKiAgIC8vIC4uLlxuICAgKiB9KTtcbiAgICogY3R4LmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwidmlzaWJpbGl0eWNoYW5nZVwiLCAoKSA9PiB7XG4gICAqICAgLy8gLi4uXG4gICAqIH0pO1xuICAgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0YXJnZXQ6IGFueSxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4odHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgdGhpcy5vbkludmFsaWRhdGVkKFxuICAgICAgKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/Lih0eXBlLCBoYW5kbGVyLCBvcHRpb25zKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBYm9ydCB0aGUgYWJvcnQgY29udHJvbGxlciBhbmQgZXhlY3V0ZSBhbGwgYG9uSW52YWxpZGF0ZWRgIGxpc3RlbmVycy5cbiAgICovXG4gIG5vdGlmeUludmFsaWRhdGVkKCkge1xuICAgIHRoaXMuYWJvcnQoJ0NvbnRlbnQgc2NyaXB0IGNvbnRleHQgaW52YWxpZGF0ZWQnKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29udGVudCBzY3JpcHQgXCIke3RoaXMuY29udGVudFNjcmlwdE5hbWV9XCIgY29udGV4dCBpbnZhbGlkYXRlZGAsXG4gICAgKTtcbiAgfVxuXG4gICNzdG9wT2xkU2NyaXB0cygpIHtcbiAgICAvLyBVc2UgcG9zdE1lc3NhZ2Ugc28gaXQgZ2V0J3Mgc2VudCB0byBhbGwgdGhlIGZyYW1lcyBvZiB0aGUgcGFnZS5cbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoXG4gICAgICB7XG4gICAgICAgIGV2ZW50OiBDb250ZW50U2NyaXB0Q29udGV4dC5TQ1JJUFRfU1RBUlRFRF9NRVNTQUdFX1RZUEUsXG4gICAgICAgIGNvbnRlbnRTY3JpcHROYW1lOiB0aGlzLmNvbnRlbnRTY3JpcHROYW1lLFxuICAgICAgfSxcbiAgICAgICcqJyxcbiAgICApO1xuICB9XG5cbiAgI2xpc3RlbkZvck5ld2VyU2NyaXB0cygpIHtcbiAgICBjb25zdCBjYiA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmRhdGE/LnR5cGUgPT09IENvbnRlbnRTY3JpcHRDb250ZXh0LlNDUklQVF9TVEFSVEVEX01FU1NBR0VfVFlQRSAmJlxuICAgICAgICBldmVudC5kYXRhPy5jb250ZW50U2NyaXB0TmFtZSA9PT0gdGhpcy5jb250ZW50U2NyaXB0TmFtZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubm90aWZ5SW52YWxpZGF0ZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGNiKTtcbiAgICB0aGlzLm9uSW52YWxpZGF0ZWQoKCkgPT4gcmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGNiKSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFFTyxTQUFTLG9CQUNkLFlBQ3lCO0FBQ3pCLFNBQU87QUFDVDs7O0FDQU8sU0FBUyxpQkFDZCxLQUNzQjtBQUN0QixNQUFJLE9BQU8sUUFBUTtBQUFZLFdBQU8sRUFBRSxNQUFNLElBQUk7QUFDbEQsU0FBTztBQUNUOzs7QUNYQSxTQUFTLDZCQUE2Qjs7O0FDR3RDLE9BQU8scUJBQWlEO0FBZWpELElBQU0sVUFBNEI7OztBQ2xCekMsU0FBUyxNQUFNLFdBQXFDLE1BQWE7QUFDL0QsTUFBSSxZQUFZLElBQUksU0FBUztBQUFjO0FBRTNDLE1BQUksT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQy9CLFVBQU0sVUFBVSxLQUFLLE1BQU07QUFDM0IsV0FBTyxTQUFTLE9BQU8sSUFBSSxHQUFHLElBQUk7QUFBQSxFQUNwQyxPQUFPO0FBQ0wsV0FBTyxTQUFTLEdBQUcsSUFBSTtBQUFBLEVBQ3pCO0FBQ0Y7QUFLTyxJQUFNLFNBQVM7QUFBQSxFQUNwQixPQUFPLElBQUksU0FBZ0IsTUFBTSxRQUFRLE9BQU8sR0FBRyxJQUFJO0FBQUEsRUFDdkQsS0FBSyxJQUFJLFNBQWdCLE1BQU0sUUFBUSxLQUFLLEdBQUcsSUFBSTtBQUFBLEVBQ25ELE1BQU0sSUFBSSxTQUFnQixNQUFNLFFBQVEsTUFBTSxHQUFHLElB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
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC9kZWZpbmVDb250ZW50U2NyaXB0LnRzIiwgIi4uL3NyYy9jbGllbnQvZGVmaW5lQmFja2dyb3VuZC50cyIsICIuLi9zcmMvY2xpZW50L2NyZWF0ZUNvbnRlbnRTY3JpcHRVaS50cyIsICIuLi9zcmMvY2xpZW50L2Jyb3dzZXIudHMiLCAiLi4vc3JjL2NsaWVudC91dGlscy9sb2dnZXIudHMiLCAiLi4vc3JjL2NsaWVudC91dGlscy9Db250ZW50U2NyaXB0Q29udGV4dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGVudFNjcmlwdERlZmluaXRpb24gfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbnRlbnRTY3JpcHQoXG4gIGRlZmluaXRpb246IENvbnRlbnRTY3JpcHREZWZpbml0aW9uLFxuKTogQ29udGVudFNjcmlwdERlZmluaXRpb24ge1xuICByZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICJpbXBvcnQgeyBCYWNrZ3JvdW5kRGVmaW5pdGlvbiB9IGZyb20gJy4uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJhY2tncm91bmQobWFpbjogKCkgPT4gdm9pZCk6IEJhY2tncm91bmREZWZpbml0aW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJhY2tncm91bmQoXG4gIGRlZmluaXRpb246IEJhY2tncm91bmREZWZpbml0aW9uLFxuKTogQmFja2dyb3VuZERlZmluaXRpb247XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQmFja2dyb3VuZChcbiAgYXJnOiAoKCkgPT4gdm9pZCkgfCBCYWNrZ3JvdW5kRGVmaW5pdGlvbixcbik6IEJhY2tncm91bmREZWZpbml0aW9uIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHJldHVybiB7IG1haW46IGFyZyB9O1xuICByZXR1cm4gYXJnO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUlzb2xhdGVkRWxlbWVudCB9IGZyb20gJ0B3ZWJleHQtY29yZS9pc29sYXRlZC1lbGVtZW50JztcbmltcG9ydCB7IGJyb3dzZXIgfSBmcm9tICcuL2Jyb3dzZXInO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgQ29udGVudFNjcmlwdENvbnRleHQgfSBmcm9tICcuJztcblxuLyoqXG4gKiBVdGlsaXR5IGZvciBtb3VudGluZyBjb250ZW50IHNjcmlwdCBVSSdzIHdpdGggaXNvbGF0ZWQgc3R5bGVzLiBBdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgRE9NXG4gKiB3aGVuIHRoZSBjb250ZW50IHNjcmlwdCdzIGNvbnRleHQgaXMgaW52YWxpZGF0ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vd3h0LmRldi9lbnRyeXBvaW50cy9jb250ZW50LXNjcmlwdHMuaHRtbCN1aSBmb3IgZnVsbCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBlbnRyeXBvaW50cy9leGFtcGxlLXVpLmNvbnRlbnQvaW5kZXgudHNcbiAqIGltcG9ydCBcIi4vc3R5bGUuY3NzXCJcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBkZWZpbmVDb250ZW50U2NyaXB0KHtcbiAqICAgbWF0Y2hlczogW1wiKjovLyouZ29vZ2xlLmNvbS8qXCJdLFxuICogICBjc3NJbmplY3Rpb25Nb2RlOiBcInVpXCIsXG4gKlxuICogICBhc3luYyBtYWluKGN0eCkge1xuICogICAgIGNvbnN0IHVpID0gYXdhaXQgY3JlYXRlQ29udGVudFNjcmlwdFVpKGN0eCwge1xuICogICAgICAgbmFtZTogXCJleGFtcGxlLW92ZXJsYXlcIixcbiAqICAgICAgIHR5cGU6IFwibW9kYWxcIixcbiAqICAgICAgIG1vdW50KGNvbnRhaW5lcikge1xuICogICAgICAgICBjb25zdCBhcHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICogICAgICAgICBhcHAudGV4dENvbnRlbnQgPSBcIkNvbnRlbnQgU2NyaXB0IFVJXCI7XG4gKiAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoYXBwKTtcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICogICAgIHVpLm1vdW50KCk7XG4gKiAgIH1cbiAqIH0pXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250ZW50U2NyaXB0VWk8VEFwcD4oXG4gIGN0eDogQ29udGVudFNjcmlwdENvbnRleHQsXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4sXG4pOiBQcm9taXNlPENvbnRlbnRTY3JpcHRVaTxUQXBwPj4ge1xuICBjb25zdCBjc3MgPSBbb3B0aW9ucy5jc3MgPz8gJyddO1xuICBpZiAoY3R4Lm9wdGlvbnM/LmNzc0luamVjdGlvbk1vZGUgPT09ICd1aScpIHtcbiAgICBjc3MucHVzaChhd2FpdCBsb2FkQ3NzKCkpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzb2xhdGVkRWxlbWVudDogdWlDb250YWluZXIsXG4gICAgcGFyZW50RWxlbWVudDogc2hhZG93SG9zdCxcbiAgICBzaGFkb3csXG4gIH0gPSBhd2FpdCBjcmVhdGVJc29sYXRlZEVsZW1lbnQoe1xuICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICBjc3M6IHtcbiAgICAgIHRleHRDb250ZW50OiBjc3Muam9pbignXFxuJykudHJpbSgpLFxuICAgIH0sXG4gICAgbW9kZTogJ29wZW4nLFxuICB9KTtcblxuICBjb25zdCBnZXRBbmNob3IgPSAoKTogRWxlbWVudCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKG9wdGlvbnMuYW5jaG9yID09IG51bGwpIHJldHVybiBkb2N1bWVudC5ib2R5O1xuXG4gICAgbGV0IHJlc29sdmVkID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmFuY2hvciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuYW5jaG9yKCkgOiBvcHRpb25zLmFuY2hvcjtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEVsZW1lbnQ+KHJlc29sdmVkKSA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVkID8/IHVuZGVmaW5lZDtcbiAgfTtcblxuICBsZXQgbW91bnRlZDogVEFwcDtcblxuICBjb25zdCBtb3VudCA9ICgpID0+IHtcbiAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3IoKTtcbiAgICBpZiAoYW5jaG9yID09IG51bGwpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb250ZW50IHNjcmlwdCB1aTogY291bGQgbm90IGZpbmQgYW5jaG9yIGVsZW1lbnQnLFxuICAgICAgKTtcblxuICAgIC8vIE1vdW50IFVJIGluc2lkZSBzaGFkb3cgcm9vdFxuICAgIG1vdW50ZWQgPSBvcHRpb25zLm1vdW50KHVpQ29udGFpbmVyKTtcblxuICAgIC8vIEFkZCBzaGFkb3cgcm9vdCBlbGVtZW50IHRvIERPTVxuICAgIHN3aXRjaCAob3B0aW9ucy5hcHBlbmQpIHtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgIGFuY2hvci5hcHBlbmQoc2hhZG93SG9zdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlyc3QnOlxuICAgICAgICBpZiAoYW5jaG9yLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBhbmNob3IuaW5zZXJ0QmVmb3JlKHNoYWRvd0hvc3QsIGFuY2hvci5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbmNob3IuYXBwZW5kKHNoYWRvd0hvc3QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVwbGFjZSc6XG4gICAgICAgIGFuY2hvci5yZXBsYWNlV2l0aChzaGFkb3dIb3N0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgIGFuY2hvci5yZXBsYWNlV2l0aChhbmNob3IsIHNoYWRvd0hvc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgIGFuY2hvci5yZXBsYWNlV2l0aChzaGFkb3dIb3N0LCBhbmNob3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9wdGlvbnMuYXBwZW5kKGFuY2hvciwgc2hhZG93SG9zdCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHR5cGVzXG4gICAgaWYgKG9wdGlvbnMudHlwZSAhPT0gJ2lubGluZScpIHtcbiAgICAgIGlmIChvcHRpb25zLnpJbmRleCAhPSBudWxsKVxuICAgICAgICBzaGFkb3dIb3N0LnN0eWxlLnpJbmRleCA9IFN0cmluZyhvcHRpb25zLnpJbmRleCk7XG5cbiAgICAgIHNoYWRvd0hvc3Quc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG4gICAgICBzaGFkb3dIb3N0LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICAgIHNoYWRvd0hvc3Quc3R5bGUud2lkdGggPSAnMCc7XG4gICAgICBzaGFkb3dIb3N0LnN0eWxlLmhlaWdodCA9ICcwJztcbiAgICAgIHNoYWRvd0hvc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgIGNvbnN0IGh0bWwgPSBzaGFkb3cucXVlcnlTZWxlY3RvcignaHRtbCcpITtcbiAgICAgIC8vIEhUTUwgZG9lc24ndCBleGlzdCBpbiB0ZXN0c1xuICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIGh0bWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBpZiAob3B0aW9ucy5hbGlnbm1lbnQ/LnN0YXJ0c1dpdGgoJ2JvdHRvbS0nKSkgaHRtbC5zdHlsZS5ib3R0b20gPSAnMCc7XG4gICAgICAgIGVsc2UgaHRtbC5zdHlsZS50b3AgPSAnMCc7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Py5lbmRzV2l0aCgnLXJpZ2h0JykpIGh0bWwuc3R5bGUucmlnaHQgPSAnMCc7XG4gICAgICAgIGVsc2UgaHRtbC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIGh0bWwuc3R5bGUudG9wID0gJzAnO1xuICAgICAgICBodG1sLnN0eWxlLmJvdHRvbSA9ICcwJztcbiAgICAgICAgaHRtbC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgICBodG1sLnN0eWxlLnJpZ2h0ID0gJzAnO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoKSA9PiB7XG4gICAgLy8gRGV0YXRjaCBzaGFkb3cgcm9vdCBmcm9tIERPTVxuICAgIHNoYWRvd0hvc3QucmVtb3ZlKCk7XG4gICAgLy8gQ2xlYW51cCBtb3VudGVkIHN0YXRlXG4gICAgb3B0aW9ucy5vblJlbW92ZT8uKG1vdW50ZWQpO1xuICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBmcm9tIHVpQ29udGFpbmVyXG4gICAgd2hpbGUgKHVpQ29udGFpbmVyLmxhc3RDaGlsZClcbiAgICAgIHVpQ29udGFpbmVyLnJlbW92ZUNoaWxkKHVpQ29udGFpbmVyLmxhc3RDaGlsZCk7XG4gIH07XG5cbiAgY3R4Lm9uSW52YWxpZGF0ZWQocmVtb3ZlKTtcblxuICByZXR1cm4ge1xuICAgIHNoYWRvdyxcbiAgICBzaGFkb3dIb3N0LFxuICAgIHVpQ29udGFpbmVyLFxuICAgIG1vdW50LFxuICAgIHJlbW92ZSxcbiAgICBtb3VudGVkOiBtb3VudGVkISxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIHRoZSBDU1MgZm9yIHRoZSBjdXJyZW50IGVudHJ5cG9pbnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDc3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdXJsID0gYnJvd3Nlci5ydW50aW1lLmdldFVSTChgL2NvbnRlbnQtc2NyaXB0cy8ke19fRU5UUllQT0lOVF9ffS5jc3NgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGNvbnN0IGNzcyA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cbiAgICAvLyBSZXBsYWNlIDpyb290IHNlbGVjdG9ycyB3aXRoIDpob3N0IHNpbmNlIHdlJ3JlIGluIGEgc2hhZG93IHJvb3RcbiAgICByZXR1cm4gY3NzLnJlcGxhY2VBbGwoJzpyb290JywgJzpob3N0Jyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYEZhaWxlZCB0byBsb2FkIHN0eWxlcyBAICR7dXJsfS4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IHRoZSBzdHlsZXNoZWV0IGluIHlvdXIgZW50cnlwb2ludD9gLFxuICAgICAgZXJyLFxuICAgICk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFNjcmlwdFVpPFRBcHA+IHtcbiAgLyoqXG4gICAqIFRoZSBgSFRNTEVsZW1lbnRgIGhvc3RpbmcgdGhlIHNoYWRvdyByb290IHVzZWQgdG8gaXNvbGF0ZSB0aGUgVUkncyBzdHlsZXMuIFRoaXMgaXMgdGhlIGVsZW1lbnRcbiAgICogdGhhdCBnZXQncyBhZGRlZCB0byB0aGUgRE9NLiBUaGlzIGVsZW1lbnQncyBzdHlsZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSB0aGUgd2VicGFnZS5cbiAgICovXG4gIHNoYWRvd0hvc3Q6IEhUTUxFbGVtZW50O1xuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciBlbGVtZW50IGluc2lkZSB0aGUgYFNoYWRvd1Jvb3RgIHdob3NlIHN0eWxlcyBhcmUgaXNvbGF0ZWQuIFRoZSBVSSBpcyBtb3VudGVkXG4gICAqIGluc2lkZSB0aGlzIGBIVE1MRWxlbWVudGAuXG4gICAqL1xuICB1aUNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgc2hhZG93IHJvb3QgcGVyZm9ybWluZyB0aGUgaXNvbGF0aW9uLlxuICAgKi9cbiAgc2hhZG93OiBTaGFkb3dSb290O1xuICAvKipcbiAgICogQ3VzdG9tIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgYG9wdGlvbnMubW91bnRgIGZ1bmN0aW9uLlxuICAgKi9cbiAgbW91bnRlZDogVEFwcDtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRoYXQgbW91bnRzIG9yIHJlbW91bnRzIHRoZSBVSSBvbiB0aGUgcGFnZS5cbiAgICovXG4gIG1vdW50OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCByZW1vdmVzIHRoZSBVSSBmcm9tIHRoZSB3ZWJwYWdlLlxuICAgKi9cbiAgcmVtb3ZlOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQmFzZUNvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBjb21wb25lbnQgdXNlZCB0byBob3N0IHRoZSBTaGFkb3dSb290LiBNdXN0IGJlIGtlYmFiLWNhc2UuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbiBjb21iaW5hdGlvbiB3aXRoIGBhbmNob3JgLCBkZWNpZGUgaG93IHRvIGFkZCB0aGUgVUkgdG8gdGhlIERPTS5cbiAgICpcbiAgICogLSBgXCJsYXN0XCJgIChkZWZhdWx0KSAtIEFkZCB0aGUgVUkgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGBhbmNob3JgIGVsZW1lbnRcbiAgICogLSBgXCJmaXJzdFwiYCAtIEFkZCB0aGUgVUkgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGBhbmNob3JgIGVsZW1lbnRcbiAgICogLSBgXCJyZXBsYWNlXCJgIC0gUmVwbGFjZSB0aGUgYGFuY2hvcmAgZWxlbWVudCB3aXRoIHRoZSBVSS5cbiAgICogLSBgXCJiZWZvcmVcImAgLSBBZGQgdGhlIFVJIGFzIHRoZSBzaWJsaW5nIGJlZm9yZSB0aGUgYGFuY2hvcmAgZWxlbWVudFxuICAgKiAtIGBcImFmdGVyXCJgIC0gQWRkIHRoZSBVSSBhcyB0aGUgc2libGluZyBhZnRlciB0aGUgYGFuY2hvcmAgZWxlbWVudFxuICAgKiAtIGAoYW5jaG9yLCB1aSkgPT4gdm9pZGAgLSBDdXN0b21pemFibGUgZnVuY3Rpb24gdGhhdCBsZXQncyB5b3UgYWRkIHRoZSBVSSB0byB0aGUgRE9NXG4gICAqL1xuICBhcHBlbmQ/OiBDb250ZW50U2NyaXB0QXBwZW5kTW9kZSB8ICgoYW5jaG9yOiBFbGVtZW50LCB1aTogRWxlbWVudCkgPT4gdm9pZCk7XG4gIC8qKlxuICAgKiBBIENTUyBzZWxlY3RvciwgZWxlbWVudCwgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZSBvZiB0aGUgdHdvLiBBbG9uZyB3aXRoIGBhcHBlbmRgLCB0aGVcbiAgICogYGFuY2hvcmAgZGljdGF0ZXMgd2hlcmUgaW4gdGhlIHBhZ2UgdGhlIFVJIHdpbGwgYmUgYWRkZWQuXG4gICAqL1xuICBhbmNob3I/OlxuICAgIHwgc3RyaW5nXG4gICAgfCBFbGVtZW50XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgICB8ICgoKSA9PiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBleGVjdXRlZCB3aGVuIG1vdW50aW5nIHRoZSBVSS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgY3JlYXRlIGFuZCBhcHBlbmQgdGhlIFVJIHRvIHRoZVxuICAgKiBgY29udGFpbmVyYCBlbGVtZW50LiBJdCBpcyBjYWxsZWQgZXZlcnkgdGltZSBgdWkubW91bnQoKWAgaXMgY2FsbGVkXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgcmV0dXJuIGEgdmFsdWUgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYXQgYHVpLm1vdW50ZWRgIG9yIGluIHRoZSBgb25SZW1vdmVgIGNhbGxiYWNrLlxuICAgKi9cbiAgbW91bnQ6IChjb250YWluZXI6IEVsZW1lbnQpID0+IFRBcHA7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgVUkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB3ZWJwYWdlLiBVc2UgdG8gY2xlYW51cCB5b3VyIFVJLCBsaWtlXG4gICAqIHVubW91bnRpbmcgeW91ciB2dWUgb3IgcmVhY3QgYXBwcy5cbiAgICovXG4gIG9uUmVtb3ZlPzogKG1vdW50ZWQ6IFRBcHApID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDdXN0b20gQ1NTIHRleHQgdG8gYXBwbHkgdG8gdGhlIFVJLiBJZiB5b3VyIGNvbnRlbnQgc2NyaXB0IGltcG9ydHMvZ2VuZXJhdGVzIENTUyBhbmQgeW91J3ZlXG4gICAqIHNldCBgY3NzSW5qZWN0aW9uTW9kZTogXCJ1aVwiYCwgdGhlIGltcG9ydGVkIENTUyB3aWxsIGJlIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkuIFlvdSBkbyBub3QgbmVlZFxuICAgKiB0byBwYXNzIHRob3NlIHN0eWxlcyBpbiBoZXJlLiBUaGlzIGlzIGZvciBhbnkgYWRkaXRpb25hbCBzdHlsZXMgbm90IGluIHRoZSBpbXBvcnRlZCBDU1MuXG4gICAqXG4gICAqIFNlZSBodHRwczovL3d4dC5kZXYvZW50cnlwb2ludHMvY29udGVudC1zY3JpcHRzLmh0bWwjdWkgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIGNzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgT3ZlcmxheUNvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gPVxuICBCYXNlQ29udGVudFNjcmlwdFVpT3B0aW9uczxUQXBwPiAmIHtcbiAgICB0eXBlOiAnb3ZlcmxheSc7XG4gICAgLyoqXG4gICAgICogV2hlbiB1c2luZyBgdHlwZTogXCJvdmVybGF5XCJgLCB0aGUgbW91bnRlZCBlbGVtZW50IGlzIDBweCBieSAwcHggaW4gc2l6ZS4gQWxpZ25tZW50IHNwZWNpZmllc1xuICAgICAqIHdoaWNoIGNvcm5lciBpcyBhbGlnbmVkIHdpdGggdGhhdCAweDAgcGl4ZWwgc3BhY2UuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcInRvcC1sZWZ0XCJcbiAgICAgKi9cbiAgICBhbGlnbm1lbnQ/OiBDb250ZW50U2NyaXB0VWlPdmVybGF5QWxpZ25tZW50O1xuICAgIC8qKlxuICAgICAqIFRoZSBgei1pbmRleGAgdXNlZCBvbiB0aGUgYHNoYWRvd0hvc3RgLiBTZXQgdG8gYSBwb3NpdGl2ZSBudW1iZXIgdG8gc2hvdyB5b3VyIFVJIG92ZXIgd2Vic2l0ZVxuICAgICAqIGNvbnRlbnQuXG4gICAgICovXG4gICAgekluZGV4PzogbnVtYmVyO1xuICB9O1xuXG5leHBvcnQgdHlwZSBNb2RhbENvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gPVxuICBCYXNlQ29udGVudFNjcmlwdFVpT3B0aW9uczxUQXBwPiAmIHtcbiAgICB0eXBlOiAnbW9kYWwnO1xuICAgIC8qKlxuICAgICAqIFRoZSBgei1pbmRleGAgdXNlZCBvbiB0aGUgYHNoYWRvd0hvc3RgLiBTZXQgdG8gYSBwb3NpdGl2ZSBudW1iZXIgdG8gc2hvdyB5b3VyIFVJIG92ZXIgd2Vic2l0ZVxuICAgICAqIGNvbnRlbnQuXG4gICAgICovXG4gICAgekluZGV4PzogbnVtYmVyO1xuICB9O1xuXG5leHBvcnQgdHlwZSBJbmxpbmVDb250ZW50U2NyaXB0VWlPcHRpb25zPFRBcHA+ID1cbiAgQmFzZUNvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gJiB7XG4gICAgdHlwZTogJ2lubGluZSc7XG4gIH07XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRTY3JpcHRVaU92ZXJsYXlBbGlnbm1lbnQgPVxuICB8ICd0b3AtbGVmdCdcbiAgfCAndG9wLXJpZ2h0J1xuICB8ICdib3R0b20tbGVmdCdcbiAgfCAnYm90dG9tLXJpZ2h0JztcblxuZXhwb3J0IHR5cGUgQ29udGVudFNjcmlwdEFwcGVuZE1vZGUgPVxuICB8ICdsYXN0J1xuICB8ICdmaXJzdCdcbiAgfCAncmVwbGFjZSdcbiAgfCAnYmVmb3JlJ1xuICB8ICdhZnRlcic7XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRTY3JpcHRVaU9wdGlvbnM8VEFwcD4gPVxuICB8IE92ZXJsYXlDb250ZW50U2NyaXB0VWlPcHRpb25zPFRBcHA+XG4gIHwgTW9kYWxDb250ZW50U2NyaXB0VWlPcHRpb25zPFRBcHA+XG4gIHwgSW5saW5lQ29udGVudFNjcmlwdFVpT3B0aW9uczxUQXBwPjtcbiIsICIvKipcbiAqIEBtb2R1bGUgd3h0L2Jyb3dzZXJcbiAqL1xuaW1wb3J0IG9yaWdpbmFsQnJvd3NlciwgeyBCcm93c2VyLCBSdW50aW1lLCBJMThuIH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcblxuZXhwb3J0IGludGVyZmFjZSBBdWdtZW50ZWRCcm93c2VyIGV4dGVuZHMgQnJvd3NlciB7XG4gIHJ1bnRpbWU6IFd4dFJ1bnRpbWU7XG4gIGkxOG46IFd4dEkxOG47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3h0UnVudGltZSBleHRlbmRzIFJ1bnRpbWUuU3RhdGljIHtcbiAgLy8gT3ZlcnJpZGVuIHBlci1wcm9qZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3h0STE4biBleHRlbmRzIEkxOG4uU3RhdGljIHtcbiAgLy8gT3ZlcnJpZGVuIHBlci1wcm9qZWN0XG59XG5cbmV4cG9ydCBjb25zdCBicm93c2VyOiBBdWdtZW50ZWRCcm93c2VyID0gb3JpZ2luYWxCcm93c2VyO1xuIiwgImZ1bmN0aW9uIHByaW50KG1ldGhvZDogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLCAuLi5hcmdzOiBhbnlbXSkge1xuICBpZiAoaW1wb3J0Lm1ldGEuZW52Lk1PREUgPT09ICdwcm9kdWN0aW9uJykgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXJncy5zaGlmdCgpO1xuICAgIG1ldGhvZChgW3d4dF0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZCgnW3d4dF0nLCAuLi5hcmdzKTtcbiAgfVxufVxuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGBjb25zb2xlYCB3aXRoIGEgXCJbd3h0XVwiIHByZWZpeFxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICBkZWJ1ZzogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLmRlYnVnLCAuLi5hcmdzKSxcbiAgbG9nOiAoLi4uYXJnczogYW55W10pID0+IHByaW50KGNvbnNvbGUubG9nLCAuLi5hcmdzKSxcbiAgd2FybjogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLndhcm4sIC4uLmFyZ3MpLFxuICBlcnJvcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLmVycm9yLCAuLi5hcmdzKSxcbn07XG4iLCAiaW1wb3J0IHsgQ29udGVudFNjcmlwdERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IGJyb3dzZXIgfSBmcm9tICcuLi9icm93c2VyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBJbXBsZW1lbnRzIFtgQWJvcnRDb250cm9sbGVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Fib3J0Q29udHJvbGxlcikuXG4gKiBVc2VkIHRvIGRldGVjdCBhbmQgc3RvcCBjb250ZW50IHNjcmlwdCBjb2RlIHdoZW4gdGhlIHNjcmlwdCBpcyBpbnZhbGlkYXRlZC5cbiAqXG4gKiBJdCBhbHNvIHByb3ZpZGVzIHNldmVyYWwgdXRpbGl0aWVzIGxpa2UgYGN0eC5zZXRUaW1lb3V0YCBhbmQgYGN0eC5zZXRJbnRlcnZhbGAgdGhhdCBzaG91bGQgYmUgdXNlZCBpblxuICogY29udGVudCBzY3JpcHRzIGluc3RlYWQgb2YgYHdpbmRvdy5zZXRUaW1lb3V0YCBvciBgd2luZG93LnNldEludGVydmFsYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRTY3JpcHRDb250ZXh0IGltcGxlbWVudHMgQWJvcnRDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgU0NSSVBUX1NUQVJURURfTUVTU0FHRV9UWVBFID0gJ3d4dDpjb250ZW50LXNjcmlwdC1zdGFydGVkJztcblxuICAjaXNUb3BGcmFtZSA9IHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wO1xuICAjYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50U2NyaXB0TmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBvcHRpb25zPzogT21pdDxDb250ZW50U2NyaXB0RGVmaW5pdGlvbiwgJ21haW4nPixcbiAgKSB7XG4gICAgdGhpcy4jYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGlmICh0aGlzLiNpc1RvcEZyYW1lKSB7XG4gICAgICB0aGlzLiNzdG9wT2xkU2NyaXB0cygpO1xuICAgIH1cbiAgICB0aGlzLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gUnVuIG9uIG5leHQgdGljayBzbyB0aGUgbGlzdGVuZXIgaXQgYWRkcyBpc24ndCB0cmlnZ2VyZWQgYnkgc3RvcE9sZFNjcmlwdFxuICAgICAgdGhpcy4jbGlzdGVuRm9yTmV3ZXJTY3JpcHRzKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2lnbmFsKCkge1xuICAgIHJldHVybiB0aGlzLiNhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgYWJvcnQocmVhc29uPzogYW55KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuI2Fib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pO1xuICB9XG5cbiAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAoYnJvd3Nlci5ydW50aW1lLmlkID09IG51bGwpIHtcbiAgICAgIHRoaXMubm90aWZ5SW52YWxpZGF0ZWQoKTsgLy8gU2V0cyBgc2lnbmFsLmFib3J0ZWRgIHRvIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2lnbmFsLmFib3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNJbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgc2NyaXB0J3MgY29udGV4dCBpcyBpbnZhbGlkYXRlZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0byByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBicm93c2VyLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKGNiKTtcbiAgICogY29uc3QgcmVtb3ZlSW52YWxpZGF0ZWRMaXN0ZW5lciA9IGN0eC5vbkludmFsaWRhdGVkKCgpID0+IHtcbiAgICogICBicm93c2VyLnJ1bnRpbWUub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGNiKTtcbiAgICogfSlcbiAgICogLy8gLi4uXG4gICAqIHJlbW92ZUludmFsaWRhdGVkTGlzdGVuZXIoKTtcbiAgICovXG4gIG9uSW52YWxpZGF0ZWQoY2I6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGNiKTtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcHJvbWlzZSB0aGF0IG5ldmVyIHJlc29sdmVzLiBVc2VmdWwgaWYgeW91IGhhdmUgYW4gYXN5bmMgZnVuY3Rpb24gdGhhdCBzaG91bGRuJ3QgcnVuXG4gICAqIGFmdGVyIHRoZSBjb250ZXh0IGlzIGV4cGlyZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGdldFZhbHVlRnJvbVN0b3JhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAqICAgaWYgKGN0eC5pc0ludmFsaWQpIHJldHVybiBjdHguYmxvY2soKTtcbiAgICpcbiAgICogICAvLyAuLi5cbiAgICogfVxuICAgKi9cbiAgYmxvY2s8VD4oKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICAgIC8vIG5vb3BcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGFyb3VuZCBgd2luZG93LnNldEludGVydmFsYCB0aGF0IGF1dG9tYXRpY2FsbHkgY2xlYXJzIHRoZSBpbnRlcnZhbCB3aGVuIGludmFsaWRhdGVkLlxuICAgKi9cbiAgc2V0SW50ZXJ2YWwoaGFuZGxlcjogKCkgPT4gdm9pZCwgdGltZW91dD86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSBoYW5kbGVyKCk7XG4gICAgfSwgdGltZW91dCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgdGhpcy5vbkludmFsaWRhdGVkKCgpID0+IGNsZWFySW50ZXJ2YWwoaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgYHdpbmRvdy5zZXRUaW1lb3V0YCB0aGF0IGF1dG9tYXRpY2FsbHkgY2xlYXJzIHRoZSBpbnRlcnZhbCB3aGVuIGludmFsaWRhdGVkLlxuICAgKi9cbiAgc2V0VGltZW91dChoYW5kbGVyOiAoKSA9PiB2b2lkLCB0aW1lb3V0PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgaGFuZGxlcigpO1xuICAgIH0sIHRpbWVvdXQpIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIHRoaXMub25JbnZhbGlkYXRlZCgoKSA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIHRoYXQgYXV0b21hdGljYWxseSBjYW5jZWxzIHRoZSByZXF1ZXN0IHdoZW5cbiAgICogaW52YWxpZGF0ZWQuXG4gICAqL1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgY2FsbGJhY2soLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uSW52YWxpZGF0ZWQoKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgYHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrYCB0aGF0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyB0aGUgcmVxdWVzdCB3aGVuXG4gICAqIGludmFsaWRhdGVkLlxuICAgKi9cbiAgcmVxdWVzdElkbGVDYWxsYmFjayhcbiAgICBjYWxsYmFjazogSWRsZVJlcXVlc3RDYWxsYmFjayxcbiAgICBvcHRpb25zPzogSWRsZVJlcXVlc3RPcHRpb25zLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdElkbGVDYWxsYmFjaygoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNpZ25hbC5hYm9ydGVkKSBjYWxsYmFjayguLi5hcmdzKTtcbiAgICB9LCBvcHRpb25zKTtcblxuICAgIHRoaXMub25JbnZhbGlkYXRlZCgoKSA9PiBjYW5jZWxJZGxlQ2FsbGJhY2soaWQpKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXJgIGFuZCByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIHdoZW4gdGhlIGNvbnRleHQgaXMgaW52YWxpZGF0ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGN0eC5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgXCJtb3VzZW1vdmVcIiwgKCkgPT4ge1xuICAgKiAgIC8vIC4uLlxuICAgKiB9KTtcbiAgICogY3R4LmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwidmlzaWJpbGl0eWNoYW5nZVwiLCAoKSA9PiB7XG4gICAqICAgLy8gLi4uXG4gICAqIH0pO1xuICAgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcihcbiAgICB0YXJnZXQ6IGFueSxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyPy4odHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgdGhpcy5vbkludmFsaWRhdGVkKFxuICAgICAgKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXI/Lih0eXBlLCBoYW5kbGVyLCBvcHRpb25zKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBYm9ydCB0aGUgYWJvcnQgY29udHJvbGxlciBhbmQgZXhlY3V0ZSBhbGwgYG9uSW52YWxpZGF0ZWRgIGxpc3RlbmVycy5cbiAgICovXG4gIG5vdGlmeUludmFsaWRhdGVkKCkge1xuICAgIHRoaXMuYWJvcnQoJ0NvbnRlbnQgc2NyaXB0IGNvbnRleHQgaW52YWxpZGF0ZWQnKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29udGVudCBzY3JpcHQgXCIke3RoaXMuY29udGVudFNjcmlwdE5hbWV9XCIgY29udGV4dCBpbnZhbGlkYXRlZGAsXG4gICAgKTtcbiAgfVxuXG4gICNzdG9wT2xkU2NyaXB0cygpIHtcbiAgICAvLyBVc2UgcG9zdE1lc3NhZ2Ugc28gaXQgZ2V0J3Mgc2VudCB0byBhbGwgdGhlIGZyYW1lcyBvZiB0aGUgcGFnZS5cbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoXG4gICAgICB7XG4gICAgICAgIGV2ZW50OiBDb250ZW50U2NyaXB0Q29udGV4dC5TQ1JJUFRfU1RBUlRFRF9NRVNTQUdFX1RZUEUsXG4gICAgICAgIGNvbnRlbnRTY3JpcHROYW1lOiB0aGlzLmNvbnRlbnRTY3JpcHROYW1lLFxuICAgICAgfSxcbiAgICAgICcqJyxcbiAgICApO1xuICB9XG5cbiAgI2xpc3RlbkZvck5ld2VyU2NyaXB0cygpIHtcbiAgICBjb25zdCBjYiA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmRhdGE/LnR5cGUgPT09IENvbnRlbnRTY3JpcHRDb250ZXh0LlNDUklQVF9TVEFSVEVEX01FU1NBR0VfVFlQRSAmJlxuICAgICAgICBldmVudC5kYXRhPy5jb250ZW50U2NyaXB0TmFtZSA9PT0gdGhpcy5jb250ZW50U2NyaXB0TmFtZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubm90aWZ5SW52YWxpZGF0ZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGNiKTtcbiAgICB0aGlzLm9uSW52YWxpZGF0ZWQoKCkgPT4gcmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGNiKSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFFTyxTQUFTLG9CQUNkLFlBQ3lCO0FBQ3pCLFNBQU87QUFDVDs7O0FDQU8sU0FBUyxpQkFDZCxLQUNzQjtBQUN0QixNQUFJLE9BQU8sUUFBUTtBQUFZLFdBQU8sRUFBRSxNQUFNLElBQUk7QUFDbEQsU0FBTztBQUNUOzs7QUNYQSxTQUFTLDZCQUE2Qjs7O0FDR3RDLE9BQU8scUJBQWlEO0FBZWpELElBQU0sVUFBNEI7OztBQ2xCekMsU0FBUyxNQUFNLFdBQXFDLE1BQWE7QUFDL0QsTUFBSSxZQUFZLElBQUksU0FBUztBQUFjO0FBRTNDLE1BQUksT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVO0FBQy9CLFVBQU0sVUFBVSxLQUFLLE1BQU07QUFDM0IsV0FBTyxTQUFTLE9BQU8sSUFBSSxH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QUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsc0JBQXNCLFVBQXdDO0FBQzVELFVBQU0sS0FBSyxzQkFBc0IsSUFBSSxTQUFTO0FBQzVDLFVBQUksS0FBSztBQUFTLGlCQUFTLEdBQUcsSUFBSTtBQUFBLElBQ3BDLENBQUM7QUFFRCxTQUFLLGNBQWMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO0FBQ2pELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLG9CQUNFLFVBQ0EsU0FDUTtBQUNSLFVBQU0sS0FBSyxvQkFBb0IsSUFBSSxTQUFTO0FBQzFDLFVBQUksQ0FBQyxLQUFLLE9BQU87QUFBUyxpQkFBUyxHQUFHLElBQUk7QUFBQSxJQUM1QyxHQUFHLE9BQU87QUFFVixTQUFLLGNBQWMsTUFBTSxtQkFBbUIsRUFBRSxDQUFDO0FBQy9DLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYUEsaUJBQ0UsUUFDQSxNQUNBLFNBQ0EsU0FDQTtBQUNBLFdBQU8sbUJBQW1CLE1BQU0sU0FBUyxPQUFPO0FBQ2hELFNBQUs7QUFBQSxNQUNILE1BQU0sT0FBTyxzQkFBc0IsTUFBTSxTQUFTLE9BQU87QUFBQSxJQUMzRDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsb0JBQW9CO0FBQ2xCLFNBQUssTUFBTSxvQ0FBb0M7QUFDL0MsV0FBTztBQUFBLE1BQ0wsbUJBQW1CLEtBQUssaUJBQWlCO0FBQUEsSUFDM0M7QUFBQSxFQUNGO0FBQUEsRUFFQSxrQkFBa0I7QUFFaEIsV0FBTztBQUFBLE1BQ0w7QUFBQSxRQUNFLE9BQU8sc0JBQXFCO0FBQUEsUUFDNUIsbUJBQW1CLEtBQUs7QUFBQSxNQUMxQjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRUEseUJBQXlCO0FBQ3ZCLFVBQU0sS0FBSyxDQUFDLFVBQXdCO0FBQ2xDLFVBQ0UsTUFBTSxNQUFNLFNBQVMsc0JBQXFCLCtCQUMxQyxNQUFNLE1BQU0sc0JBQXNCLEtBQUssbUJBQ3ZDO0FBQ0EsYUFBSyxrQkFBa0I7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFFQSxxQkFBaUIsV0FBVyxFQUFFO0FBQzlCLFNBQUssY0FBYyxNQUFNLG9CQUFvQixXQUFXLEVBQUUsQ0FBQztBQUFBLEVBQzdEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/index.cjs
CHANGED
|
@@ -1971,17 +1971,15 @@ async function findEntrypoints(config) {
|
|
|
1971
1971
|
});
|
|
1972
1972
|
relativePaths.sort();
|
|
1973
1973
|
const pathGlobs = Object.keys(PATH_GLOB_TO_TYPE_MAP);
|
|
1974
|
-
const existingNames = {};
|
|
1975
|
-
const entrypoints = [];
|
|
1976
1974
|
let hasBackground = false;
|
|
1977
|
-
await Promise.all(
|
|
1975
|
+
const possibleEntrypoints = await Promise.all(
|
|
1978
1976
|
relativePaths.map(async (relativePath) => {
|
|
1979
1977
|
const path9 = (0, import_path8.resolve)(config.entrypointsDir, relativePath);
|
|
1980
1978
|
const matchingGlob = pathGlobs.find(
|
|
1981
1979
|
(glob5) => (0, import_minimatch.minimatch)(relativePath, glob5)
|
|
1982
1980
|
);
|
|
1983
1981
|
if (matchingGlob == null) {
|
|
1984
|
-
|
|
1982
|
+
config.logger.warn(
|
|
1985
1983
|
`${relativePath} does not match any known entrypoint. Known entrypoints:
|
|
1986
1984
|
${JSON.stringify(
|
|
1987
1985
|
PATH_GLOB_TO_TYPE_MAP,
|
|
@@ -1989,33 +1987,27 @@ ${JSON.stringify(
|
|
|
1989
1987
|
2
|
|
1990
1988
|
)}`
|
|
1991
1989
|
);
|
|
1990
|
+
return;
|
|
1992
1991
|
}
|
|
1993
1992
|
const type = PATH_GLOB_TO_TYPE_MAP[matchingGlob];
|
|
1994
1993
|
if (type === "ignored")
|
|
1995
1994
|
return;
|
|
1996
|
-
let entrypoint;
|
|
1997
1995
|
switch (type) {
|
|
1998
1996
|
case "popup":
|
|
1999
|
-
|
|
2000
|
-
break;
|
|
1997
|
+
return await getPopupEntrypoint(config, path9);
|
|
2001
1998
|
case "options":
|
|
2002
|
-
|
|
2003
|
-
break;
|
|
1999
|
+
return await getOptionsEntrypoint(config, path9);
|
|
2004
2000
|
case "background":
|
|
2005
|
-
entrypoint = await getBackgroundEntrypoint(config, path9);
|
|
2006
2001
|
hasBackground = true;
|
|
2007
|
-
|
|
2002
|
+
return await getBackgroundEntrypoint(config, path9);
|
|
2008
2003
|
case "content-script":
|
|
2009
|
-
|
|
2010
|
-
break;
|
|
2004
|
+
return await getContentScriptEntrypoint(config, path9);
|
|
2011
2005
|
case "unlisted-page":
|
|
2012
|
-
|
|
2013
|
-
break;
|
|
2006
|
+
return await getUnlistedPageEntrypoint(config, path9);
|
|
2014
2007
|
case "unlisted-script":
|
|
2015
|
-
|
|
2016
|
-
break;
|
|
2008
|
+
return await getUnlistedScriptEntrypoint(config, path9);
|
|
2017
2009
|
case "content-script-style":
|
|
2018
|
-
|
|
2010
|
+
return {
|
|
2019
2011
|
type,
|
|
2020
2012
|
name: getEntrypointName(config.entrypointsDir, path9),
|
|
2021
2013
|
inputPath: path9,
|
|
@@ -2025,9 +2017,8 @@ ${JSON.stringify(
|
|
|
2025
2017
|
exclude: void 0
|
|
2026
2018
|
}
|
|
2027
2019
|
};
|
|
2028
|
-
break;
|
|
2029
2020
|
default:
|
|
2030
|
-
|
|
2021
|
+
return {
|
|
2031
2022
|
type,
|
|
2032
2023
|
name: getEntrypointName(config.entrypointsDir, path9),
|
|
2033
2024
|
inputPath: path9,
|
|
@@ -2038,19 +2029,24 @@ ${JSON.stringify(
|
|
|
2038
2029
|
}
|
|
2039
2030
|
};
|
|
2040
2031
|
}
|
|
2041
|
-
const withSameName = existingNames[entrypoint.name];
|
|
2042
|
-
if (withSameName) {
|
|
2043
|
-
throw Error(
|
|
2044
|
-
`Multiple entrypoints with the name "${entrypoint.name}" detected, but only one is allowed: ${[
|
|
2045
|
-
(0, import_path8.relative)(config.root, withSameName.inputPath),
|
|
2046
|
-
(0, import_path8.relative)(config.root, entrypoint.inputPath)
|
|
2047
|
-
].join(", ")}`
|
|
2048
|
-
);
|
|
2049
|
-
}
|
|
2050
|
-
entrypoints.push(entrypoint);
|
|
2051
|
-
existingNames[entrypoint.name] = entrypoint;
|
|
2052
2032
|
})
|
|
2053
2033
|
);
|
|
2034
|
+
const entrypoints = possibleEntrypoints.filter(
|
|
2035
|
+
(entry) => !!entry
|
|
2036
|
+
);
|
|
2037
|
+
const existingNames = {};
|
|
2038
|
+
entrypoints.forEach((entrypoint) => {
|
|
2039
|
+
const withSameName = existingNames[entrypoint.name];
|
|
2040
|
+
if (withSameName) {
|
|
2041
|
+
throw Error(
|
|
2042
|
+
`Multiple entrypoints with the name "${entrypoint.name}" detected, but only one is allowed: ${[
|
|
2043
|
+
(0, import_path8.relative)(config.root, withSameName.inputPath),
|
|
2044
|
+
(0, import_path8.relative)(config.root, entrypoint.inputPath)
|
|
2045
|
+
].join(", ")}`
|
|
2046
|
+
);
|
|
2047
|
+
}
|
|
2048
|
+
existingNames[entrypoint.name] = entrypoint;
|
|
2049
|
+
});
|
|
2054
2050
|
if (config.command === "serve" && !hasBackground) {
|
|
2055
2051
|
entrypoints.push(
|
|
2056
2052
|
await getBackgroundEntrypoint(config, VIRTUAL_NOOP_BACKGROUND_MODULE_ID)
|
|
@@ -2833,12 +2829,10 @@ function addEntrypoints(manifest, entrypoints, buildOutput, config) {
|
|
|
2833
2829
|
const newContentScripts = Array.from(hashToEntrypointsMap.entries()).map(
|
|
2834
2830
|
([, scripts]) => ({
|
|
2835
2831
|
...mapWxtOptionsToContentScript(scripts[0].options, config),
|
|
2836
|
-
|
|
2837
|
-
// shouldn't have to. Where is the inconsistency coming from?
|
|
2838
|
-
css: getContentScriptCssFiles(scripts, cssMap)?.sort(),
|
|
2832
|
+
css: getContentScriptCssFiles(scripts, cssMap),
|
|
2839
2833
|
js: scripts.map(
|
|
2840
2834
|
(entry) => getEntrypointBundlePath(entry, config.outDir, ".js")
|
|
2841
|
-
)
|
|
2835
|
+
)
|
|
2842
2836
|
})
|
|
2843
2837
|
);
|
|
2844
2838
|
if (newContentScripts.length >= 0) {
|
|
@@ -4619,7 +4613,7 @@ async function clean(root = process.cwd()) {
|
|
|
4619
4613
|
}
|
|
4620
4614
|
|
|
4621
4615
|
// package.json
|
|
4622
|
-
var version2 = "0.8.
|
|
4616
|
+
var version2 = "0.8.2";
|
|
4623
4617
|
|
|
4624
4618
|
// src/core/utils/defineConfig.ts
|
|
4625
4619
|
function defineConfig(config) {
|