@appium/base-driver 8.2.4 → 8.4.0
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/build/lib/basedriver/capabilities.d.ts +80 -0
- package/build/lib/basedriver/capabilities.d.ts.map +1 -0
- package/build/lib/basedriver/capabilities.js +12 -13
- package/build/lib/basedriver/commands/event.d.ts +9 -0
- package/build/lib/basedriver/commands/event.d.ts.map +1 -0
- package/build/lib/basedriver/commands/event.js +21 -23
- package/build/lib/basedriver/commands/find.d.ts +11 -0
- package/build/lib/basedriver/commands/find.d.ts.map +1 -0
- package/build/lib/basedriver/commands/find.js +41 -43
- package/build/lib/basedriver/commands/index.d.ts +8 -0
- package/build/lib/basedriver/commands/index.d.ts.map +1 -0
- package/build/lib/basedriver/commands/index.js +17 -16
- package/build/lib/basedriver/commands/log.d.ts +12 -0
- package/build/lib/basedriver/commands/log.d.ts.map +1 -0
- package/build/lib/basedriver/commands/log.js +23 -30
- package/build/lib/basedriver/commands/session.d.ts +11 -0
- package/build/lib/basedriver/commands/session.d.ts.map +1 -0
- package/build/lib/basedriver/commands/session.js +21 -158
- package/build/lib/basedriver/commands/settings.d.ts +10 -0
- package/build/lib/basedriver/commands/settings.d.ts.map +1 -0
- package/build/lib/basedriver/commands/settings.js +18 -22
- package/build/lib/basedriver/commands/timeout.d.ts +8 -0
- package/build/lib/basedriver/commands/timeout.d.ts.map +1 -0
- package/build/lib/basedriver/commands/timeout.js +118 -144
- package/build/lib/basedriver/core.d.ts +235 -0
- package/build/lib/basedriver/core.d.ts.map +1 -0
- package/build/lib/basedriver/core.js +283 -0
- package/build/lib/basedriver/desired-caps.d.ts +5 -0
- package/build/lib/basedriver/desired-caps.d.ts.map +1 -0
- package/build/lib/basedriver/desired-caps.js +2 -4
- package/build/lib/basedriver/device-settings.d.ts +32 -0
- package/build/lib/basedriver/device-settings.d.ts.map +1 -0
- package/build/lib/basedriver/device-settings.js +33 -15
- package/build/lib/basedriver/driver.d.ts +83 -0
- package/build/lib/basedriver/driver.d.ts.map +1 -0
- package/build/lib/basedriver/driver.js +104 -257
- package/build/lib/basedriver/helpers.d.ts +132 -0
- package/build/lib/basedriver/helpers.d.ts.map +1 -0
- package/build/lib/basedriver/helpers.js +24 -10
- package/build/lib/basedriver/logger.d.ts +3 -0
- package/build/lib/basedriver/logger.d.ts.map +1 -0
- package/build/lib/basedriver/logger.js +2 -4
- package/build/lib/constants.d.ts +9 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +2 -4
- package/build/lib/express/crash.d.ts +3 -0
- package/build/lib/express/crash.d.ts.map +1 -0
- package/build/lib/express/crash.js +2 -4
- package/build/lib/express/express-logging.d.ts +3 -0
- package/build/lib/express/express-logging.d.ts.map +1 -0
- package/build/lib/express/express-logging.js +3 -5
- package/build/lib/express/idempotency.d.ts +2 -0
- package/build/lib/express/idempotency.d.ts.map +1 -0
- package/build/lib/express/idempotency.js +3 -5
- package/build/lib/express/logger.d.ts +3 -0
- package/build/lib/express/logger.d.ts.map +1 -0
- package/build/lib/express/logger.js +2 -4
- package/build/lib/express/middleware.d.ts +9 -0
- package/build/lib/express/middleware.d.ts.map +1 -0
- package/build/lib/express/middleware.js +2 -4
- package/build/lib/express/server.d.ts +10 -0
- package/build/lib/express/server.d.ts.map +1 -0
- package/build/lib/express/server.js +2 -4
- package/build/lib/express/static.d.ts +6 -0
- package/build/lib/express/static.d.ts.map +1 -0
- package/build/lib/express/static.js +2 -4
- package/build/lib/express/websocket.d.ts +64 -0
- package/build/lib/express/websocket.d.ts.map +1 -0
- package/build/lib/express/websocket.js +2 -4
- package/build/lib/helpers/capabilities.d.ts +13 -0
- package/build/lib/helpers/capabilities.d.ts.map +1 -0
- package/build/lib/helpers/capabilities.js +77 -0
- package/build/lib/index.d.ts +183 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +41 -25
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts +48 -0
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/protocol-converter.js +19 -15
- package/build/lib/jsonwp-proxy/proxy.d.ts +41 -0
- package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.js +20 -15
- package/build/lib/jsonwp-status/status.d.ts +159 -0
- package/build/lib/jsonwp-status/status.d.ts.map +1 -0
- package/build/lib/jsonwp-status/status.js +2 -4
- package/build/lib/protocol/errors.d.ts +310 -0
- package/build/lib/protocol/errors.d.ts.map +1 -0
- package/build/lib/protocol/errors.js +82 -5
- package/build/lib/protocol/helpers.d.ts +22 -0
- package/build/lib/protocol/helpers.d.ts.map +1 -0
- package/build/lib/protocol/helpers.js +2 -4
- package/build/lib/protocol/index.d.ts +16 -0
- package/build/lib/protocol/index.d.ts.map +1 -0
- package/build/lib/protocol/index.js +8 -10
- package/build/lib/protocol/protocol.d.ts +11 -0
- package/build/lib/protocol/protocol.d.ts.map +1 -0
- package/build/lib/protocol/protocol.js +38 -35
- package/build/lib/protocol/routes.d.ts +6 -0
- package/build/lib/protocol/routes.d.ts.map +1 -0
- package/build/lib/protocol/routes.js +84 -4
- package/build/lib/protocol/validators.d.ts +8 -0
- package/build/lib/protocol/validators.d.ts.map +1 -0
- package/build/lib/protocol/validators.js +2 -4
- package/build/test/basedriver/README.md +5 -0
- package/build/test/basedriver/driver-e2e-tests.js +2 -4
- package/build/test/basedriver/driver-tests.js +41 -19
- package/build/test/basedriver/index.js +2 -4
- package/build/test/e2e/basedriver/driver.e2e.spec.js +15 -0
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +192 -0
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +82 -0
- package/build/test/e2e/express/server.e2e.spec.js +159 -0
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +59 -0
- package/build/test/e2e/protocol/fake-driver.js +163 -0
- package/build/test/e2e/protocol/helpers.js +25 -0
- package/build/test/e2e/protocol/protocol.e2e.spec.js +1186 -0
- package/build/test/helpers.js +2 -4
- package/build/test/unit/basedriver/capabilities.spec.js +672 -0
- package/build/test/unit/basedriver/capability.spec.js +353 -0
- package/build/test/unit/basedriver/commands/event.spec.js +110 -0
- package/build/test/unit/basedriver/commands/log.spec.js +92 -0
- package/build/test/unit/basedriver/driver.spec.js +15 -0
- package/build/test/unit/basedriver/helpers.spec.js +151 -0
- package/build/test/unit/basedriver/timeout.spec.js +135 -0
- package/build/test/unit/express/server.spec.js +155 -0
- package/build/test/unit/express/static.spec.js +26 -0
- package/build/test/unit/jsonwp-proxy/mock-request.js +91 -0
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +171 -0
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +292 -0
- package/build/test/unit/jsonwp-proxy/url.spec.js +165 -0
- package/build/test/unit/jsonwp-status/status.spec.js +34 -0
- package/build/test/unit/protocol/errors.spec.js +390 -0
- package/build/test/unit/protocol/routes.spec.js +80 -0
- package/build/test/unit/protocol/validator.spec.js +149 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/lib/basedriver/capabilities.js +49 -10
- package/lib/basedriver/commands/event.js +49 -31
- package/lib/basedriver/commands/find.js +107 -45
- package/lib/basedriver/commands/index.js +25 -19
- package/lib/basedriver/commands/log.js +59 -34
- package/lib/basedriver/commands/session.js +39 -142
- package/lib/basedriver/commands/settings.js +32 -14
- package/lib/basedriver/commands/timeout.js +153 -154
- package/lib/basedriver/core.js +497 -0
- package/lib/basedriver/desired-caps.js +1 -1
- package/lib/basedriver/device-settings.js +57 -13
- package/lib/basedriver/driver.js +277 -375
- package/lib/basedriver/helpers.js +31 -13
- package/lib/express/express-logging.js +1 -1
- package/lib/express/idempotency.js +1 -1
- package/lib/helpers/capabilities.js +84 -0
- package/lib/index.js +17 -13
- package/lib/jsonwp-proxy/protocol-converter.js +14 -13
- package/lib/jsonwp-proxy/proxy.js +16 -12
- package/lib/protocol/errors.js +42 -42
- package/lib/protocol/index.js +4 -4
- package/lib/protocol/protocol.js +35 -32
- package/lib/protocol/routes.js +69 -1
- package/package.json +37 -24
- package/test/basedriver/README.md +5 -0
- package/test/basedriver/driver-e2e-tests.js +1 -1
- package/test/basedriver/driver-tests.js +43 -9
- package/build/lib/protocol/sessions-cache.js +0 -88
- package/build/test/basedriver/capabilities-specs.js +0 -632
- package/build/test/basedriver/capability-specs.js +0 -396
- package/build/test/basedriver/commands/event-specs.js +0 -112
- package/build/test/basedriver/commands/log-specs.js +0 -80
- package/build/test/basedriver/driver-e2e-specs.js +0 -17
- package/build/test/basedriver/driver-specs.js +0 -17
- package/build/test/basedriver/helpers-e2e-specs.js +0 -194
- package/build/test/basedriver/helpers-specs.js +0 -153
- package/build/test/basedriver/timeout-specs.js +0 -139
- package/build/test/basedriver/websockets-e2e-specs.js +0 -84
- package/build/test/express/server-e2e-specs.js +0 -156
- package/build/test/express/server-specs.js +0 -151
- package/build/test/express/static-specs.js +0 -23
- package/build/test/jsonwp-proxy/mock-request.js +0 -93
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +0 -173
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +0 -61
- package/build/test/jsonwp-proxy/proxy-specs.js +0 -294
- package/build/test/jsonwp-proxy/url-specs.js +0 -167
- package/build/test/jsonwp-status/status-specs.js +0 -36
- package/build/test/protocol/errors-specs.js +0 -388
- package/build/test/protocol/fake-driver.js +0 -168
- package/build/test/protocol/helpers.js +0 -27
- package/build/test/protocol/protocol-e2e-specs.js +0 -1182
- package/build/test/protocol/routes-specs.js +0 -82
- package/build/test/protocol/validator-specs.js +0 -151
- package/index.d.ts +0 -386
- package/lib/protocol/sessions-cache.js +0 -74
- package/test/basedriver/capabilities-specs.js +0 -505
- package/test/basedriver/capability-specs.js +0 -409
- package/test/basedriver/commands/event-specs.js +0 -74
- package/test/basedriver/commands/log-specs.js +0 -70
- package/test/basedriver/driver-e2e-specs.js +0 -8
- package/test/basedriver/driver-specs.js +0 -8
- package/test/basedriver/fixtures/BadZippedApp.zip +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.apk +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.asd +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.app +0 -1
- package/test/basedriver/fixtures/FakeIOSApp.app.zip +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.ipa +0 -0
- package/test/basedriver/fixtures/custom-element-finder-bad.js +0 -5
- package/test/basedriver/fixtures/custom-element-finder.js +0 -29
- package/test/basedriver/helpers-e2e-specs.js +0 -187
- package/test/basedriver/helpers-specs.js +0 -137
- package/test/basedriver/timeout-specs.js +0 -133
- package/test/basedriver/websockets-e2e-specs.js +0 -75
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
declare var _default: import('@appium/types').DriverHelpers;
|
|
2
|
+
export default _default;
|
|
3
|
+
export type PostProcessOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* The information about the previously cached app instance (if exists):
|
|
6
|
+
* - packageHash: SHA1 hash of the package if it is a file and not a folder
|
|
7
|
+
* - lastModified: Optional Date instance, the value of file's `Last-Modified` header
|
|
8
|
+
* - immutable: Optional boolean value. Contains true if the file has an `immutable` mark
|
|
9
|
+
* in `Cache-control` header
|
|
10
|
+
* - maxAge: Optional integer representation of `maxAge` parameter in `Cache-control` header
|
|
11
|
+
* - timestamp: The timestamp this item has been added to the cache (measured in Unix epoch
|
|
12
|
+
* milliseconds)
|
|
13
|
+
* - integrity: An object containing either `file` property with SHA1 hash of the file
|
|
14
|
+
* or `folder` property with total amount of cached files and subfolders
|
|
15
|
+
* - fullPath: the full path to the cached app
|
|
16
|
+
*/
|
|
17
|
+
cachedAppInfo: any | null;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the app has been downloaded from a remote URL
|
|
20
|
+
*/
|
|
21
|
+
isUrl: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Optional headers object. Only present if `isUrl` is true and if the server
|
|
24
|
+
* responds to HEAD requests. All header names are normalized to lowercase.
|
|
25
|
+
*/
|
|
26
|
+
headers: any | null;
|
|
27
|
+
/**
|
|
28
|
+
* A string containing full path to the preprocessed application package (either
|
|
29
|
+
* downloaded or a local one)
|
|
30
|
+
*/
|
|
31
|
+
appPath: string;
|
|
32
|
+
};
|
|
33
|
+
export type PostProcessResult = {
|
|
34
|
+
/**
|
|
35
|
+
* The full past to the post-processed application package on the
|
|
36
|
+
* local file system (might be a file or a folder path)
|
|
37
|
+
*/
|
|
38
|
+
appPath: string;
|
|
39
|
+
};
|
|
40
|
+
export type ConfigureAppOptions = {
|
|
41
|
+
/**
|
|
42
|
+
* Optional function, which should be applied
|
|
43
|
+
* to the application after it is downloaded/preprocessed. This function may be async
|
|
44
|
+
* and is expected to accept single object parameter.
|
|
45
|
+
* The function is expected to either return a falsy value, which means the app must not be
|
|
46
|
+
* cached and a fresh copy of it is downloaded each time. If this function returns an object
|
|
47
|
+
* containing `appPath` property then the integrity of it will be verified and stored into
|
|
48
|
+
* the cache.
|
|
49
|
+
*/
|
|
50
|
+
onPostProcess: (obj: PostProcessOptions) => (Promise<PostProcessResult | undefined> | PostProcessResult | undefined);
|
|
51
|
+
/**
|
|
52
|
+
* List of supported application extensions (
|
|
53
|
+
* including starting dots). This property is mandatory and must not be empty.
|
|
54
|
+
*/
|
|
55
|
+
supportedExtensions: string[];
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* @typedef PostProcessOptions
|
|
59
|
+
* @property {?Object} cachedAppInfo The information about the previously cached app instance (if exists):
|
|
60
|
+
* - packageHash: SHA1 hash of the package if it is a file and not a folder
|
|
61
|
+
* - lastModified: Optional Date instance, the value of file's `Last-Modified` header
|
|
62
|
+
* - immutable: Optional boolean value. Contains true if the file has an `immutable` mark
|
|
63
|
+
* in `Cache-control` header
|
|
64
|
+
* - maxAge: Optional integer representation of `maxAge` parameter in `Cache-control` header
|
|
65
|
+
* - timestamp: The timestamp this item has been added to the cache (measured in Unix epoch
|
|
66
|
+
* milliseconds)
|
|
67
|
+
* - integrity: An object containing either `file` property with SHA1 hash of the file
|
|
68
|
+
* or `folder` property with total amount of cached files and subfolders
|
|
69
|
+
* - fullPath: the full path to the cached app
|
|
70
|
+
* @property {boolean} isUrl Whether the app has been downloaded from a remote URL
|
|
71
|
+
* @property {?Object} headers Optional headers object. Only present if `isUrl` is true and if the server
|
|
72
|
+
* responds to HEAD requests. All header names are normalized to lowercase.
|
|
73
|
+
* @property {string} appPath A string containing full path to the preprocessed application package (either
|
|
74
|
+
* downloaded or a local one)
|
|
75
|
+
*/
|
|
76
|
+
/**
|
|
77
|
+
* @typedef PostProcessResult
|
|
78
|
+
* @property {string} appPath The full past to the post-processed application package on the
|
|
79
|
+
* local file system (might be a file or a folder path)
|
|
80
|
+
*/
|
|
81
|
+
/**
|
|
82
|
+
* @typedef ConfigureAppOptions
|
|
83
|
+
* @property {(obj: PostProcessOptions) => (Promise<PostProcessResult|undefined>|PostProcessResult|undefined)} onPostProcess
|
|
84
|
+
* Optional function, which should be applied
|
|
85
|
+
* to the application after it is downloaded/preprocessed. This function may be async
|
|
86
|
+
* and is expected to accept single object parameter.
|
|
87
|
+
* The function is expected to either return a falsy value, which means the app must not be
|
|
88
|
+
* cached and a fresh copy of it is downloaded each time. If this function returns an object
|
|
89
|
+
* containing `appPath` property then the integrity of it will be verified and stored into
|
|
90
|
+
* the cache.
|
|
91
|
+
* @property {string[]} supportedExtensions List of supported application extensions (
|
|
92
|
+
* including starting dots). This property is mandatory and must not be empty.
|
|
93
|
+
*/
|
|
94
|
+
/**
|
|
95
|
+
* Prepares an app to be used in an automated test. The app gets cached automatically
|
|
96
|
+
* if it is an archive or if it is downloaded from an URL.
|
|
97
|
+
* If the downloaded app has `.zip` extension, this method will unzip it.
|
|
98
|
+
* The unzip does not work when `onPostProcess` is provided.
|
|
99
|
+
*
|
|
100
|
+
* @param {string} app Either a full path to the app or a remote URL
|
|
101
|
+
* @param {string|string[]|ConfigureAppOptions} options
|
|
102
|
+
* @returns The full path to the resulting application bundle
|
|
103
|
+
*/
|
|
104
|
+
export function configureApp(app: string, options?: string | string[] | ConfigureAppOptions): Promise<any>;
|
|
105
|
+
export function isPackageOrBundle(app: any): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Finds all instances 'firstKey' and create a duplicate with the key 'secondKey',
|
|
108
|
+
* Do the same thing in reverse. If we find 'secondKey', create a duplicate with the key 'firstKey'.
|
|
109
|
+
*
|
|
110
|
+
* This will cause keys to be overwritten if the object contains 'firstKey' and 'secondKey'.
|
|
111
|
+
|
|
112
|
+
* @param {*} input Any type of input
|
|
113
|
+
* @param {String} firstKey The first key to duplicate
|
|
114
|
+
* @param {String} secondKey The second key to duplicate
|
|
115
|
+
*/
|
|
116
|
+
export function duplicateKeys(input: any, firstKey: string, secondKey: string): any;
|
|
117
|
+
/**
|
|
118
|
+
* Takes a desired capability and tries to JSON.parse it as an array,
|
|
119
|
+
* and either returns the parsed array or a singleton array.
|
|
120
|
+
*
|
|
121
|
+
* @param {string|Array<String>} cap A desired capability
|
|
122
|
+
*/
|
|
123
|
+
export function parseCapsArray(cap: string | Array<string>): any[];
|
|
124
|
+
/**
|
|
125
|
+
* Generate a string that uniquely describes driver instance
|
|
126
|
+
*
|
|
127
|
+
* @param {import('@appium/types').Core} obj driver instance
|
|
128
|
+
* @param {string?} sessionId session identifier (if exists)
|
|
129
|
+
* @returns {string}
|
|
130
|
+
*/
|
|
131
|
+
export function generateDriverLogPrefix(obj: import('@appium/types').Core, sessionId?: string | null): string;
|
|
132
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/helpers.js"],"names":[],"mappings":"sBAgjBW,OAAO,eAAe,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;WA3YlC,OAAO;;;;;;;;;;aAGP,MAAM;;;;;;;aAMN,MAAM;;;;;;;;;;;;yBAMA,kBAAkB,KAAK,CAAC,QAAQ,iBAAiB,GAAC,SAAS,CAAC,GAAC,iBAAiB,GAAC,SAAS,CAAC;;;;;yBAQ/F,MAAM,EAAE;;AApCtB;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH,kCAJW,MAAM,YACN,MAAM,GAAC,MAAM,EAAE,GAAC,mBAAmB,gBA8M7C;AA8ED,qDAEC;AAED;;;;;;;;;GASG;AACH,oFAuBC;AAED;;;;;GAKG;AACH,oCAFW,MAAM,GAAC,aAAa,SAoB9B;AAED;;;;;;GAMG;AACH,6CAJW,OAAO,eAAe,EAAE,IAAI,cAC5B,MAAM,UACJ,MAAM,CAKlB"}
|
|
@@ -6,7 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.configureApp = configureApp;
|
|
9
|
+
exports.default = void 0;
|
|
9
10
|
exports.duplicateKeys = duplicateKeys;
|
|
11
|
+
exports.generateDriverLogPrefix = generateDriverLogPrefix;
|
|
10
12
|
exports.isPackageOrBundle = isPackageOrBundle;
|
|
11
13
|
exports.parseCapsArray = parseCapsArray;
|
|
12
14
|
|
|
@@ -32,19 +34,19 @@ const IPA_EXT = '.ipa';
|
|
|
32
34
|
const ZIP_EXTS = ['.zip', IPA_EXT];
|
|
33
35
|
const ZIP_MIME_TYPES = ['application/zip', 'application/x-zip-compressed', 'multipart/x-zip'];
|
|
34
36
|
const CACHED_APPS_MAX_AGE = 1000 * 60 * 60 * 24;
|
|
37
|
+
const MAX_CACHED_APPS = 1024;
|
|
35
38
|
const APPLICATIONS_CACHE = new _lruCache.default({
|
|
36
|
-
|
|
39
|
+
max: MAX_CACHED_APPS,
|
|
40
|
+
ttl: CACHED_APPS_MAX_AGE,
|
|
37
41
|
updateAgeOnGet: true,
|
|
38
42
|
dispose: (app, {
|
|
39
43
|
fullPath
|
|
40
44
|
}) => {
|
|
41
45
|
_logger.default.info(`The application '${app}' cached at '${fullPath}' has ` + `expired after ${CACHED_APPS_MAX_AGE}ms`);
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
});
|
|
47
|
+
if (fullPath) {
|
|
48
|
+
_support.fs.rimraf(fullPath);
|
|
49
|
+
}
|
|
48
50
|
},
|
|
49
51
|
noDisposeOnSet: true
|
|
50
52
|
});
|
|
@@ -53,11 +55,11 @@ const SANITIZE_REPLACEMENT = '-';
|
|
|
53
55
|
const DEFAULT_BASENAME = 'appium-app';
|
|
54
56
|
const APP_DOWNLOAD_TIMEOUT_MS = 120 * 1000;
|
|
55
57
|
process.on('exit', () => {
|
|
56
|
-
if (APPLICATIONS_CACHE.
|
|
58
|
+
if (APPLICATIONS_CACHE.size === 0) {
|
|
57
59
|
return;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
const appPaths = APPLICATIONS_CACHE.values().map(({
|
|
62
|
+
const appPaths = [...APPLICATIONS_CACHE.values()].map(({
|
|
61
63
|
fullPath
|
|
62
64
|
}) => fullPath);
|
|
63
65
|
|
|
@@ -528,7 +530,19 @@ function parseCapsArray(cap) {
|
|
|
528
530
|
}
|
|
529
531
|
|
|
530
532
|
throw new Error(`must provide a string or JSON Array; received ${cap}`);
|
|
531
|
-
}
|
|
533
|
+
}
|
|
532
534
|
|
|
535
|
+
function generateDriverLogPrefix(obj, sessionId = null) {
|
|
536
|
+
const instanceName = `${obj.constructor.name}@${_support.node.getObjectId(obj).substring(0, 4)}`;
|
|
537
|
+
return sessionId ? `${instanceName} (${sessionId.substring(0, 8)})` : instanceName;
|
|
538
|
+
}
|
|
533
539
|
|
|
534
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiSVBBX0VYVCIsIlpJUF9FWFRTIiwiWklQX01JTUVfVFlQRVMiLCJDQUNIRURfQVBQU19NQVhfQUdFIiwiQVBQTElDQVRJT05TX0NBQ0hFIiwiTFJVIiwibWF4QWdlIiwidXBkYXRlQWdlT25HZXQiLCJkaXNwb3NlIiwiYXBwIiwiZnVsbFBhdGgiLCJsb2dnZXIiLCJpbmZvIiwic2V0VGltZW91dCIsImZzIiwicmltcmFmIiwibm9EaXNwb3NlT25TZXQiLCJBUFBMSUNBVElPTlNfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJTQU5JVElaRV9SRVBMQUNFTUVOVCIsIkRFRkFVTFRfQkFTRU5BTUUiLCJBUFBfRE9XTkxPQURfVElNRU9VVF9NUyIsInByb2Nlc3MiLCJvbiIsIml0ZW1Db3VudCIsImFwcFBhdGhzIiwidmFsdWVzIiwibWFwIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJyZXRyaWV2ZUhlYWRlcnMiLCJsaW5rIiwidXJsIiwibWV0aG9kIiwidGltZW91dCIsImhlYWRlcnMiLCJnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgiLCJjdXJyZW50QXBwUHJvcHMiLCJjYWNoZWRBcHBJbmZvIiwicmVmcmVzaCIsIl8iLCJpc1BsYWluT2JqZWN0IiwibGFzdE1vZGlmaWVkIiwiY3VycmVudE1vZGlmaWVkIiwiaW1tdXRhYmxlIiwiY3VycmVudEltbXV0YWJsZSIsImN1cnJlbnRNYXhBZ2UiLCJ0aW1lc3RhbXAiLCJnZXRUaW1lIiwibXNMZWZ0IiwiRGF0ZSIsIm5vdyIsInBhdGgiLCJiYXNlbmFtZSIsInZlcmlmeUFwcEV4dGVuc2lvbiIsInN1cHBvcnRlZEFwcEV4dGVuc2lvbnMiLCJ0b0xvd2VyIiwiaW5jbHVkZXMiLCJleHRuYW1lIiwiRXJyb3IiLCJjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkiLCJmb2xkZXJQYXRoIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkiLCJmaWxlUGF0aCIsImhhc2giLCJpc0FwcEludGVncml0eU9rIiwiY3VycmVudFBhdGgiLCJleHBlY3RlZEludGVncml0eSIsImV4aXN0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImZvbGRlciIsImZpbGUiLCJjb25maWd1cmVBcHAiLCJvcHRpb25zIiwiaXNTdHJpbmciLCJvblBvc3RQcm9jZXNzIiwiaXNBcnJheSIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpc0VtcHR5IiwibmV3QXBwIiwic2hvdWxkVW56aXBBcHAiLCJwYWNrYWdlSGFzaCIsInJlbW90ZUFwcFByb3BzIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsInBhcnNlIiwiaXNVcmwiLCJnZXQiLCJhY3F1aXJlIiwidGVzdCIsIm1heEFnZU1hdGNoIiwiZXhlYyIsInBhcnNlSW50IiwiY2FjaGVkUGF0aCIsImludGVncml0eSIsImRlbCIsImZpbGVOYW1lIiwic2FuaXRpemVOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZW1lbnQiLCJjdCIsInNvbWUiLCJtaW1lVHlwZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwicmVzdWx0aW5nTmFtZSIsInN1YnN0cmluZyIsInJlc3VsdGluZ0V4dCIsImZpcnN0IiwidGFyZ2V0UGF0aCIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJkb3dubG9hZEFwcCIsImVycm9yTWVzc2FnZSIsImlzUGFja2FnZUFGaWxlIiwiaXNGaWxlIiwiaXNGdW5jdGlvbiIsImFyY2hpdmVQYXRoIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ1bnppcEFwcCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwic3RvcmVBcHBJbkNhY2hlIiwiYXBwUGF0aFRvQ2FjaGUiLCJjYWNoZWRGdWxsUGF0aCIsInNldCIsInJlc3VsdCIsImNsb25lIiwiQm9vbGVhbiIsImhyZWYiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJlcnIiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdGlvbk9wdHMiLCJmaWxlTmFtZXNFbmNvZGluZyIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsInNvcnQiLCJhIiwiYiIsInNwbGl0Iiwic2VwIiwiZXJyb3JBbmRUaHJvdyIsIk1hdGgiLCJyb3VuZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJtYXRjaGVkQnVuZGxlIiwiZHN0UGF0aCIsIm12IiwibWtkaXJwIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJkdXBsaWNhdGVLZXlzIiwiaW5wdXQiLCJmaXJzdEtleSIsInNlY29uZEtleSIsIml0ZW0iLCJyZXN1bHRPYmoiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJyZWN1cnNpdmVseUNhbGxlZFZhbHVlIiwicGFyc2VDYXBzQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsImlnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxPQUFPLEdBQUcsTUFBaEI7QUFDQSxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxNQUFELEVBQVNELE9BQVQsQ0FBakI7QUFDQSxNQUFNRSxjQUFjLEdBQUcsQ0FDckIsaUJBRHFCLEVBRXJCLDhCQUZxQixFQUdyQixpQkFIcUIsQ0FBdkI7QUFLQSxNQUFNQyxtQkFBbUIsR0FBRyxPQUFPLEVBQVAsR0FBWSxFQUFaLEdBQWlCLEVBQTdDO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSUMsaUJBQUosQ0FBUTtBQUNqQ0MsRUFBQUEsTUFBTSxFQUFFSCxtQkFEeUI7QUFFakNJLEVBQUFBLGNBQWMsRUFBRSxJQUZpQjtBQUdqQ0MsRUFBQUEsT0FBTyxFQUFFLENBQUNDLEdBQUQsRUFBTTtBQUFDQyxJQUFBQTtBQUFELEdBQU4sS0FBcUI7QUFDNUJDLG9CQUFPQyxJQUFQLENBQWEsb0JBQW1CSCxHQUFJLGdCQUFlQyxRQUFTLFFBQWhELEdBQ1QsaUJBQWdCUCxtQkFBb0IsSUFEdkM7O0FBRUFVLElBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCLFVBQUlILFFBQUosRUFBYztBQUNaLGNBQU1JLFlBQUdDLE1BQUgsQ0FBVUwsUUFBVixDQUFOO0FBQ0Q7QUFDRixLQUpTLENBQVY7QUFLRCxHQVhnQztBQVlqQ00sRUFBQUEsY0FBYyxFQUFFO0FBWmlCLENBQVIsQ0FBM0I7QUFjQSxNQUFNQyx3QkFBd0IsR0FBRyxJQUFJQyxrQkFBSixFQUFqQztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEdBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsWUFBekI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxNQUFNLElBQXRDO0FBRUFDLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLE1BQVgsRUFBbUIsTUFBTTtBQUN2QixNQUFJbkIsa0JBQWtCLENBQUNvQixTQUFuQixLQUFpQyxDQUFyQyxFQUF3QztBQUN0QztBQUNEOztBQUVELFFBQU1DLFFBQVEsR0FBR3JCLGtCQUFrQixDQUFDc0IsTUFBbkIsR0FDZEMsR0FEYyxDQUNWLENBQUM7QUFBQ2pCLElBQUFBO0FBQUQsR0FBRCxLQUFnQkEsUUFETixDQUFqQjs7QUFFQUMsa0JBQU9pQixLQUFQLENBQWMseUJBQXdCSCxRQUFRLENBQUNJLE1BQU8sVUFBekMsR0FDWEMsY0FBS0MsU0FBTCxDQUFlLGFBQWYsRUFBOEJOLFFBQVEsQ0FBQ0ksTUFBdkMsQ0FERjs7QUFFQSxPQUFLLE1BQU1HLE9BQVgsSUFBc0JQLFFBQXRCLEVBQWdDO0FBQzlCLFFBQUk7QUFFRlgsa0JBQUdtQixVQUFILENBQWNELE9BQWQ7QUFDRCxLQUhELENBR0UsT0FBT0UsQ0FBUCxFQUFVO0FBQ1Z2QixzQkFBT3dCLElBQVAsQ0FBWUQsQ0FBQyxDQUFDRSxPQUFkO0FBQ0Q7QUFDRjtBQUNGLENBakJEOztBQW9CQSxlQUFlQyxlQUFmLENBQWdDQyxJQUFoQyxFQUFzQztBQUNwQyxNQUFJO0FBQ0YsV0FBTyxDQUFDLE1BQU0sb0JBQU07QUFDbEJDLE1BQUFBLEdBQUcsRUFBRUQsSUFEYTtBQUVsQkUsTUFBQUEsTUFBTSxFQUFFLE1BRlU7QUFHbEJDLE1BQUFBLE9BQU8sRUFBRTtBQUhTLEtBQU4sQ0FBUCxFQUlIQyxPQUpKO0FBS0QsR0FORCxDQU1FLE9BQU9SLENBQVAsRUFBVTtBQUNWdkIsb0JBQU9DLElBQVAsQ0FBYSxnQ0FBK0IwQixJQUFLLHNCQUFxQkosQ0FBQyxDQUFDRSxPQUFRLEVBQWhGO0FBQ0Q7O0FBQ0QsU0FBTyxFQUFQO0FBQ0Q7O0FBRUQsU0FBU08sd0JBQVQsQ0FBbUNMLElBQW5DLEVBQXlDTSxlQUFlLEdBQUcsRUFBM0QsRUFBK0RDLGFBQWEsR0FBRyxFQUEvRSxFQUFtRjtBQUNqRixRQUFNQyxPQUFPLEdBQUcsTUFBTTtBQUNwQm5DLG9CQUFPaUIsS0FBUCxDQUFjLGtFQUFpRVUsSUFBSyxFQUFwRjs7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhEOztBQUtBLE1BQUksQ0FBQ1MsZ0JBQUVDLGFBQUYsQ0FBZ0JILGFBQWhCLENBQUQsSUFBbUMsQ0FBQ0UsZ0JBQUVDLGFBQUYsQ0FBZ0JKLGVBQWhCLENBQXhDLEVBQTBFO0FBRXhFLFdBQU9FLE9BQU8sRUFBZDtBQUNEOztBQUVELFFBQU07QUFDSkcsSUFBQUEsWUFBWSxFQUFFQyxlQURWO0FBRUpDLElBQUFBLFNBQVMsRUFBRUMsZ0JBRlA7QUFJSjlDLElBQUFBLE1BQU0sRUFBRStDO0FBSkosTUFLRlQsZUFMSjtBQU1BLFFBQU07QUFFSkssSUFBQUEsWUFGSTtBQUlKRSxJQUFBQSxTQUpJO0FBTUpHLElBQUFBLFNBTkk7QUFPSjVDLElBQUFBO0FBUEksTUFRRm1DLGFBUko7O0FBU0EsTUFBSUksWUFBWSxJQUFJQyxlQUFwQixFQUFxQztBQUNuQyxRQUFJQSxlQUFlLENBQUNLLE9BQWhCLE1BQTZCTixZQUFZLENBQUNNLE9BQWIsRUFBakMsRUFBeUQ7QUFDdkQ1QyxzQkFBT2lCLEtBQVAsQ0FBYyxzQkFBcUJVLElBQUssZ0NBQStCVyxZQUFhLEVBQXBGOztBQUNBLGFBQU92QyxRQUFQO0FBQ0Q7O0FBQ0RDLG9CQUFPaUIsS0FBUCxDQUFjLHNCQUFxQlUsSUFBSyw0QkFBMkJXLFlBQWEsRUFBaEY7O0FBQ0EsV0FBT0gsT0FBTyxFQUFkO0FBQ0Q7O0FBQ0QsTUFBSUssU0FBUyxJQUFJQyxnQkFBakIsRUFBbUM7QUFDakN6QyxvQkFBT2lCLEtBQVAsQ0FBYyxzQkFBcUJVLElBQUssZUFBeEM7O0FBQ0EsV0FBTzVCLFFBQVA7QUFDRDs7QUFDRCxNQUFJMkMsYUFBYSxJQUFJQyxTQUFyQixFQUFnQztBQUM5QixVQUFNRSxNQUFNLEdBQUdGLFNBQVMsR0FBR0QsYUFBYSxHQUFHLElBQTVCLEdBQW1DSSxJQUFJLENBQUNDLEdBQUwsRUFBbEQ7O0FBQ0EsUUFBSUYsTUFBTSxHQUFHLENBQWIsRUFBZ0I7QUFDZDdDLHNCQUFPaUIsS0FBUCxDQUFjLDJCQUEwQitCLGNBQUtDLFFBQUwsQ0FBY2xELFFBQWQsQ0FBd0Isb0JBQW1COEMsTUFBTSxHQUFHLElBQUssR0FBakc7O0FBQ0EsYUFBTzlDLFFBQVA7QUFDRDs7QUFDREMsb0JBQU9pQixLQUFQLENBQWMsMkJBQTBCK0IsY0FBS0MsUUFBTCxDQUFjbEQsUUFBZCxDQUF3QixlQUFoRTtBQUNEOztBQUNELFNBQU9vQyxPQUFPLEVBQWQ7QUFDRDs7QUFFRCxTQUFTZSxrQkFBVCxDQUE2QnBELEdBQTdCLEVBQWtDcUQsc0JBQWxDLEVBQTBEO0FBQ3hELE1BQUlBLHNCQUFzQixDQUFDbkMsR0FBdkIsQ0FBMkJvQixnQkFBRWdCLE9BQTdCLEVBQXNDQyxRQUF0QyxDQUErQ2pCLGdCQUFFZ0IsT0FBRixDQUFVSixjQUFLTSxPQUFMLENBQWF4RCxHQUFiLENBQVYsQ0FBL0MsQ0FBSixFQUFrRjtBQUNoRixXQUFPQSxHQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxJQUFJeUQsS0FBSixDQUFXLGlCQUFnQnpELEdBQUksaUJBQXJCLEdBQ2IsR0FBRXFCLGNBQUtDLFNBQUwsQ0FBZSxXQUFmLEVBQTRCK0Isc0JBQXNCLENBQUNqQyxNQUFuRCxFQUEyRCxLQUEzRCxDQUFrRSxJQUR2RCxHQUVkaUMsc0JBRkksQ0FBTjtBQUdEOztBQUVELGVBQWVLLHdCQUFmLENBQXlDQyxVQUF6QyxFQUFxRDtBQUNuRCxTQUFPLENBQUMsTUFBTXRELFlBQUd1RCxJQUFILENBQVEsTUFBUixFQUFnQjtBQUFDQyxJQUFBQSxHQUFHLEVBQUVGLFVBQU47QUFBa0JHLElBQUFBLE1BQU0sRUFBRSxLQUExQjtBQUFpQ0MsSUFBQUEsTUFBTSxFQUFFO0FBQXpDLEdBQWhCLENBQVAsRUFBd0UzQyxNQUEvRTtBQUNEOztBQUVELGVBQWU0QyxzQkFBZixDQUF1Q0MsUUFBdkMsRUFBaUQ7QUFDL0MsU0FBTyxNQUFNNUQsWUFBRzZELElBQUgsQ0FBUUQsUUFBUixDQUFiO0FBQ0Q7O0FBRUQsZUFBZUUsZ0JBQWYsQ0FBaUNDLFdBQWpDLEVBQThDQyxpQkFBaUIsR0FBRyxFQUFsRSxFQUFzRTtBQUNwRSxNQUFJLEVBQUMsTUFBTWhFLFlBQUdpRSxNQUFILENBQVVGLFdBQVYsQ0FBUCxDQUFKLEVBQW1DO0FBQ2pDLFdBQU8sS0FBUDtBQUNEOztBQVNELFNBQU8sQ0FBQyxNQUFNL0QsWUFBR2tFLElBQUgsQ0FBUUgsV0FBUixDQUFQLEVBQTZCSSxXQUE3QixLQUNILE9BQU1kLHdCQUF3QixDQUFDVSxXQUFELENBQTlCLE1BQStDQyxpQkFBL0MsYUFBK0NBLGlCQUEvQyx1QkFBK0NBLGlCQUFpQixDQUFFSSxNQUFsRSxDQURHLEdBRUgsT0FBTVQsc0JBQXNCLENBQUNJLFdBQUQsQ0FBNUIsT0FBOENDLGlCQUE5QyxhQUE4Q0EsaUJBQTlDLHVCQUE4Q0EsaUJBQWlCLENBQUVLLElBQWpFLENBRko7QUFHRDs7QUFrREQsZUFBZUMsWUFBZixDQUE2QjNFLEdBQTdCLEVBQWtDNEUsT0FBTyxHQUFHLEVBQTVDLEVBQWdEO0FBQzlDLE1BQUksQ0FBQ3RDLGdCQUFFdUMsUUFBRixDQUFXN0UsR0FBWCxDQUFMLEVBQXNCO0FBRXBCO0FBQ0Q7O0FBRUQsTUFBSXFELHNCQUFKO0FBQ0EsUUFBTTtBQUNKeUIsSUFBQUE7QUFESSxNQUVGeEMsZ0JBQUVDLGFBQUYsQ0FBZ0JxQyxPQUFoQixJQUEyQkEsT0FBM0IsR0FBcUMsRUFGekM7O0FBR0EsTUFBSXRDLGdCQUFFdUMsUUFBRixDQUFXRCxPQUFYLENBQUosRUFBeUI7QUFDdkJ2QixJQUFBQSxzQkFBc0IsR0FBRyxDQUFDdUIsT0FBRCxDQUF6QjtBQUNELEdBRkQsTUFFTyxJQUFJdEMsZ0JBQUV5QyxPQUFGLENBQVVILE9BQVYsQ0FBSixFQUF3QjtBQUM3QnZCLElBQUFBLHNCQUFzQixHQUFHdUIsT0FBekI7QUFDRCxHQUZNLE1BRUEsSUFBSXRDLGdCQUFFQyxhQUFGLENBQWdCcUMsT0FBaEIsQ0FBSixFQUE4QjtBQUNuQ3ZCLElBQUFBLHNCQUFzQixHQUFHdUIsT0FBTyxDQUFDSSxtQkFBakM7QUFDRDs7QUFDRCxNQUFJMUMsZ0JBQUUyQyxPQUFGLENBQVU1QixzQkFBVixDQUFKLEVBQXVDO0FBQ3JDLFVBQU0sSUFBSUksS0FBSixDQUFXLHVEQUFYLENBQU47QUFDRDs7QUFFRCxNQUFJeUIsTUFBTSxHQUFHbEYsR0FBYjtBQUNBLE1BQUltRixjQUFjLEdBQUcsS0FBckI7QUFDQSxNQUFJQyxXQUFXLEdBQUcsSUFBbEI7QUFDQSxNQUFJbkQsT0FBTyxHQUFHLElBQWQ7QUFDQSxRQUFNb0QsY0FBYyxHQUFHO0FBQ3JCN0MsSUFBQUEsWUFBWSxFQUFFLElBRE87QUFFckJFLElBQUFBLFNBQVMsRUFBRSxLQUZVO0FBR3JCN0MsSUFBQUEsTUFBTSxFQUFFO0FBSGEsR0FBdkI7O0FBS0EsUUFBTTtBQUFDeUYsSUFBQUEsUUFBRDtBQUFXQyxJQUFBQTtBQUFYLE1BQXVCekQsYUFBSTBELEtBQUosQ0FBVU4sTUFBVixDQUE3Qjs7QUFDQSxRQUFNTyxLQUFLLEdBQUcsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQmxDLFFBQXBCLENBQTZCK0IsUUFBN0IsQ0FBZDtBQUVBLFFBQU1sRCxhQUFhLEdBQUd6QyxrQkFBa0IsQ0FBQytGLEdBQW5CLENBQXVCMUYsR0FBdkIsQ0FBdEI7QUFFQSxTQUFPLE1BQU1RLHdCQUF3QixDQUFDbUYsT0FBekIsQ0FBaUMzRixHQUFqQyxFQUFzQyxZQUFZO0FBQzdELFFBQUl5RixLQUFKLEVBQVc7QUFFVHZGLHNCQUFPQyxJQUFQLENBQWEsMkJBQTBCK0UsTUFBTyxHQUE5Qzs7QUFDQWpELE1BQUFBLE9BQU8sR0FBRyxNQUFNTCxlQUFlLENBQUNzRCxNQUFELENBQS9COztBQUNBLFVBQUksQ0FBQzVDLGdCQUFFMkMsT0FBRixDQUFVaEQsT0FBVixDQUFMLEVBQXlCO0FBQ3ZCLFlBQUlBLE9BQU8sQ0FBQyxlQUFELENBQVgsRUFBOEI7QUFDNUJvRCxVQUFBQSxjQUFjLENBQUM3QyxZQUFmLEdBQThCLElBQUlRLElBQUosQ0FBU2YsT0FBTyxDQUFDLGVBQUQsQ0FBaEIsQ0FBOUI7QUFDRDs7QUFDRC9CLHdCQUFPaUIsS0FBUCxDQUFjLGtCQUFpQmMsT0FBTyxDQUFDLGVBQUQsQ0FBa0IsRUFBeEQ7O0FBQ0EsWUFBSUEsT0FBTyxDQUFDLGVBQUQsQ0FBWCxFQUE4QjtBQUM1Qm9ELFVBQUFBLGNBQWMsQ0FBQzNDLFNBQWYsR0FBMkIsaUJBQWlCa0QsSUFBakIsQ0FBc0IzRCxPQUFPLENBQUMsZUFBRCxDQUE3QixDQUEzQjtBQUNBLGdCQUFNNEQsV0FBVyxHQUFHLHFCQUFxQkMsSUFBckIsQ0FBMEI3RCxPQUFPLENBQUMsZUFBRCxDQUFqQyxDQUFwQjs7QUFDQSxjQUFJNEQsV0FBSixFQUFpQjtBQUNmUixZQUFBQSxjQUFjLENBQUN4RixNQUFmLEdBQXdCa0csUUFBUSxDQUFDRixXQUFXLENBQUMsQ0FBRCxDQUFaLEVBQWlCLEVBQWpCLENBQWhDO0FBQ0Q7QUFDRjs7QUFDRDNGLHdCQUFPaUIsS0FBUCxDQUFjLGtCQUFpQmMsT0FBTyxDQUFDLGVBQUQsQ0FBa0IsRUFBeEQ7QUFDRDs7QUFDRCxZQUFNK0QsVUFBVSxHQUFHOUQsd0JBQXdCLENBQUNsQyxHQUFELEVBQU1xRixjQUFOLEVBQXNCakQsYUFBdEIsQ0FBM0M7O0FBQ0EsVUFBSTRELFVBQUosRUFBZ0I7QUFDZCxZQUFJLE1BQU03QixnQkFBZ0IsQ0FBQzZCLFVBQUQsRUFBYTVELGFBQWIsYUFBYUEsYUFBYix1QkFBYUEsYUFBYSxDQUFFNkQsU0FBNUIsQ0FBMUIsRUFBa0U7QUFDaEUvRiwwQkFBT0MsSUFBUCxDQUFhLGlEQUFnRDZGLFVBQVcsR0FBeEU7O0FBQ0EsaUJBQU81QyxrQkFBa0IsQ0FBQzRDLFVBQUQsRUFBYTNDLHNCQUFiLENBQXpCO0FBQ0Q7O0FBQ0RuRCx3QkFBT0MsSUFBUCxDQUFhLHVCQUFzQjZGLFVBQVcsMkJBQWxDLEdBQ1Qsd0VBREg7O0FBRUFyRyxRQUFBQSxrQkFBa0IsQ0FBQ3VHLEdBQW5CLENBQXVCbEcsR0FBdkI7QUFDRDs7QUFFRCxVQUFJbUcsUUFBUSxHQUFHLElBQWY7O0FBQ0EsWUFBTWhELFFBQVEsR0FBRzlDLFlBQUcrRixZQUFILENBQWdCbEQsY0FBS0MsUUFBTCxDQUFja0Qsa0JBQWtCLENBQUNkLFFBQUQsQ0FBaEMsQ0FBaEIsRUFBNkQ7QUFDNUVlLFFBQUFBLFdBQVcsRUFBRTVGO0FBRCtELE9BQTdELENBQWpCOztBQUdBLFlBQU04QyxPQUFPLEdBQUdOLGNBQUtNLE9BQUwsQ0FBYUwsUUFBYixDQUFoQjs7QUFHQSxVQUFJM0QsUUFBUSxDQUFDK0QsUUFBVCxDQUFrQkMsT0FBbEIsQ0FBSixFQUFnQztBQUM5QjJDLFFBQUFBLFFBQVEsR0FBR2hELFFBQVg7QUFDQWdDLFFBQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUNEOztBQUNELFVBQUlsRCxPQUFPLENBQUMsY0FBRCxDQUFYLEVBQTZCO0FBQzNCLGNBQU1zRSxFQUFFLEdBQUd0RSxPQUFPLENBQUMsY0FBRCxDQUFsQjs7QUFDQS9CLHdCQUFPaUIsS0FBUCxDQUFjLGlCQUFnQm9GLEVBQUcsRUFBakM7O0FBRUEsWUFBSTlHLGNBQWMsQ0FBQytHLElBQWYsQ0FBcUJDLFFBQUQsSUFBYyxJQUFJQyxNQUFKLENBQVksTUFBS3BFLGdCQUFFcUUsWUFBRixDQUFlRixRQUFmLENBQXlCLEtBQTFDLEVBQWdEYixJQUFoRCxDQUFxRFcsRUFBckQsQ0FBbEMsQ0FBSixFQUFpRztBQUMvRixjQUFJLENBQUNKLFFBQUwsRUFBZTtBQUNiQSxZQUFBQSxRQUFRLEdBQUksR0FBRXhGLGdCQUFpQixNQUEvQjtBQUNEOztBQUNEd0UsVUFBQUEsY0FBYyxHQUFHLElBQWpCO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJbEQsT0FBTyxDQUFDLHFCQUFELENBQVAsSUFBa0MsZUFBZTJELElBQWYsQ0FBb0IzRCxPQUFPLENBQUMscUJBQUQsQ0FBM0IsQ0FBdEMsRUFBMkY7QUFDekYvQix3QkFBT2lCLEtBQVAsQ0FBYyx3QkFBdUJjLE9BQU8sQ0FBQyxxQkFBRCxDQUF3QixFQUFwRTs7QUFDQSxjQUFNMkUsS0FBSyxHQUFHLHFCQUFxQmQsSUFBckIsQ0FBMEI3RCxPQUFPLENBQUMscUJBQUQsQ0FBakMsQ0FBZDs7QUFDQSxZQUFJMkUsS0FBSixFQUFXO0FBQ1RULFVBQUFBLFFBQVEsR0FBRzlGLFlBQUcrRixZQUFILENBQWdCUSxLQUFLLENBQUMsQ0FBRCxDQUFyQixFQUEwQjtBQUNuQ04sWUFBQUEsV0FBVyxFQUFFNUY7QUFEc0IsV0FBMUIsQ0FBWDtBQUdBeUUsVUFBQUEsY0FBYyxHQUFHQSxjQUFjLElBQUkzRixRQUFRLENBQUMrRCxRQUFULENBQWtCTCxjQUFLTSxPQUFMLENBQWEyQyxRQUFiLENBQWxCLENBQW5DO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJLENBQUNBLFFBQUwsRUFBZTtBQUViLGNBQU1VLGFBQWEsR0FBRzFELFFBQVEsR0FDMUJBLFFBQVEsQ0FBQzJELFNBQVQsQ0FBbUIsQ0FBbkIsRUFBc0IzRCxRQUFRLENBQUMvQixNQUFULEdBQWtCb0MsT0FBTyxDQUFDcEMsTUFBaEQsQ0FEMEIsR0FFMUJULGdCQUZKO0FBR0EsWUFBSW9HLFlBQVksR0FBR3ZELE9BQW5COztBQUNBLFlBQUksQ0FBQ0gsc0JBQXNCLENBQUNFLFFBQXZCLENBQWdDd0QsWUFBaEMsQ0FBTCxFQUFvRDtBQUNsRDdHLDBCQUFPQyxJQUFQLENBQWEsK0JBQThCNEcsWUFBYSxzQkFBNUMsR0FDVCxrQkFBaUJ6RSxnQkFBRTBFLEtBQUYsQ0FBUTNELHNCQUFSLENBQWdDLEdBRHBEOztBQUVBMEQsVUFBQUEsWUFBWSxHQUFHekUsZ0JBQUUwRSxLQUFGLENBQVEzRCxzQkFBUixDQUFmO0FBQ0Q7O0FBQ0Q4QyxRQUFBQSxRQUFRLEdBQUksR0FBRVUsYUFBYyxHQUFFRSxZQUFhLEVBQTNDO0FBQ0Q7O0FBQ0QsWUFBTUUsVUFBVSxHQUFHLE1BQU1DLGlCQUFRaEUsSUFBUixDQUFhO0FBQ3BDaUUsUUFBQUEsTUFBTSxFQUFFaEIsUUFENEI7QUFFcENpQixRQUFBQSxNQUFNLEVBQUU7QUFGNEIsT0FBYixDQUF6QjtBQUlBbEMsTUFBQUEsTUFBTSxHQUFHLE1BQU1tQyxXQUFXLENBQUNuQyxNQUFELEVBQVMrQixVQUFULENBQTFCO0FBQ0QsS0EvRUQsTUErRU8sSUFBSSxNQUFNNUcsWUFBR2lFLE1BQUgsQ0FBVVksTUFBVixDQUFWLEVBQTZCO0FBRWxDaEYsc0JBQU9DLElBQVAsQ0FBYSxvQkFBbUIrRSxNQUFPLEdBQXZDOztBQUNBQyxNQUFBQSxjQUFjLEdBQUczRixRQUFRLENBQUMrRCxRQUFULENBQWtCTCxjQUFLTSxPQUFMLENBQWEwQixNQUFiLENBQWxCLENBQWpCO0FBQ0QsS0FKTSxNQUlBO0FBQ0wsVUFBSW9DLFlBQVksR0FBSSx1QkFBc0JwQyxNQUFPLHVDQUFqRDs7QUFFQSxVQUFJNUMsZ0JBQUV1QyxRQUFGLENBQVdTLFFBQVgsS0FBd0JBLFFBQVEsQ0FBQ2xFLE1BQVQsR0FBa0IsQ0FBOUMsRUFBaUQ7QUFDL0NrRyxRQUFBQSxZQUFZLEdBQUksaUJBQWdCaEMsUUFBUyxjQUFhSixNQUFPLHNCQUE5QyxHQUNaLCtDQURIO0FBRUQ7O0FBQ0QsWUFBTSxJQUFJekIsS0FBSixDQUFVNkQsWUFBVixDQUFOO0FBQ0Q7O0FBRUQsVUFBTUMsY0FBYyxHQUFHLENBQUMsTUFBTWxILFlBQUdrRSxJQUFILENBQVFXLE1BQVIsQ0FBUCxFQUF3QnNDLE1BQXhCLEVBQXZCOztBQUNBLFFBQUlELGNBQUosRUFBb0I7QUFDbEJuQyxNQUFBQSxXQUFXLEdBQUcsTUFBTXBCLHNCQUFzQixDQUFDa0IsTUFBRCxDQUExQztBQUNEOztBQUVELFFBQUlxQyxjQUFjLElBQUlwQyxjQUFsQixJQUFvQyxDQUFDN0MsZ0JBQUVtRixVQUFGLENBQWEzQyxhQUFiLENBQXpDLEVBQXNFO0FBQ3BFLFlBQU00QyxXQUFXLEdBQUd4QyxNQUFwQjs7QUFDQSxVQUFJRSxXQUFXLE1BQUtoRCxhQUFMLGFBQUtBLGFBQUwsdUJBQUtBLGFBQWEsQ0FBRWdELFdBQXBCLENBQWYsRUFBZ0Q7QUFDOUMsY0FBTTtBQUFDbkYsVUFBQUE7QUFBRCxZQUFhbUMsYUFBbkI7O0FBQ0EsWUFBSSxNQUFNK0IsZ0JBQWdCLENBQUNsRSxRQUFELEVBQVdtQyxhQUFYLGFBQVdBLGFBQVgsdUJBQVdBLGFBQWEsQ0FBRTZELFNBQTFCLENBQTFCLEVBQWdFO0FBQzlELGNBQUl5QixXQUFXLEtBQUsxSCxHQUFwQixFQUF5QjtBQUN2QixrQkFBTUssWUFBR0MsTUFBSCxDQUFVb0gsV0FBVixDQUFOO0FBQ0Q7O0FBQ0R4SCwwQkFBT0MsSUFBUCxDQUFhLGdEQUErQ0YsUUFBUyxHQUFyRTs7QUFDQSxpQkFBT21ELGtCQUFrQixDQUFDbkQsUUFBRCxFQUFXb0Qsc0JBQVgsQ0FBekI7QUFDRDs7QUFDRG5ELHdCQUFPQyxJQUFQLENBQWEsdUJBQXNCRixRQUFTLDJCQUFoQyxHQUNULCtEQURIOztBQUVBTixRQUFBQSxrQkFBa0IsQ0FBQ3VHLEdBQW5CLENBQXVCbEcsR0FBdkI7QUFDRDs7QUFDRCxZQUFNMkgsT0FBTyxHQUFHLE1BQU1ULGlCQUFRVSxPQUFSLEVBQXRCOztBQUNBLFVBQUk7QUFDRjFDLFFBQUFBLE1BQU0sR0FBRyxNQUFNMkMsUUFBUSxDQUFDSCxXQUFELEVBQWNDLE9BQWQsRUFBdUJ0RSxzQkFBdkIsQ0FBdkI7QUFDRCxPQUZELFNBRVU7QUFDUixZQUFJNkIsTUFBTSxLQUFLd0MsV0FBWCxJQUEwQkEsV0FBVyxLQUFLMUgsR0FBOUMsRUFBbUQ7QUFDakQsZ0JBQU1LLFlBQUdDLE1BQUgsQ0FBVW9ILFdBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0R4SCxzQkFBT0MsSUFBUCxDQUFhLDBCQUF5QitFLE1BQU8sR0FBN0M7QUFDRCxLQXhCRCxNQXdCTyxJQUFJLENBQUNoQyxjQUFLNEUsVUFBTCxDQUFnQjVDLE1BQWhCLENBQUwsRUFBOEI7QUFDbkNBLE1BQUFBLE1BQU0sR0FBR2hDLGNBQUs2RSxPQUFMLENBQWFsSCxPQUFPLENBQUNnRCxHQUFSLEVBQWIsRUFBNEJxQixNQUE1QixDQUFUOztBQUNBaEYsc0JBQU93QixJQUFQLENBQWEsaUNBQWdDMUIsR0FBSSxvQkFBckMsR0FDVCw4QkFBNkJrRixNQUFPLHVEQUR2Qzs7QUFFQWxGLE1BQUFBLEdBQUcsR0FBR2tGLE1BQU47QUFDRDs7QUFFRCxVQUFNOEMsZUFBZSxHQUFHLE1BQU9DLGNBQVAsSUFBMEI7QUFDaEQsWUFBTUMsY0FBYyxHQUFHOUYsYUFBSCxhQUFHQSxhQUFILHVCQUFHQSxhQUFhLENBQUVuQyxRQUF0Qzs7QUFDQSxVQUFJaUksY0FBYyxJQUFJQSxjQUFjLEtBQUtELGNBQXpDLEVBQXlEO0FBQ3ZELGNBQU01SCxZQUFHQyxNQUFILENBQVU0SCxjQUFWLENBQU47QUFDRDs7QUFDRCxZQUFNakMsU0FBUyxHQUFHLEVBQWxCOztBQUNBLFVBQUksQ0FBQyxNQUFNNUYsWUFBR2tFLElBQUgsQ0FBUTBELGNBQVIsQ0FBUCxFQUFnQ3pELFdBQWhDLEVBQUosRUFBbUQ7QUFDakR5QixRQUFBQSxTQUFTLENBQUN4QixNQUFWLEdBQW1CLE1BQU1mLHdCQUF3QixDQUFDdUUsY0FBRCxDQUFqRDtBQUNELE9BRkQsTUFFTztBQUNMaEMsUUFBQUEsU0FBUyxDQUFDdkIsSUFBVixHQUFpQixNQUFNVixzQkFBc0IsQ0FBQ2lFLGNBQUQsQ0FBN0M7QUFDRDs7QUFDRHRJLE1BQUFBLGtCQUFrQixDQUFDd0ksR0FBbkIsQ0FBdUJuSSxHQUF2QixFQUE0QixFQUMxQixHQUFHcUYsY0FEdUI7QUFFMUJ4QyxRQUFBQSxTQUFTLEVBQUVHLElBQUksQ0FBQ0MsR0FBTCxFQUZlO0FBRzFCbUMsUUFBQUEsV0FIMEI7QUFJMUJhLFFBQUFBLFNBSjBCO0FBSzFCaEcsUUFBQUEsUUFBUSxFQUFFZ0k7QUFMZ0IsT0FBNUI7QUFPQSxhQUFPQSxjQUFQO0FBQ0QsS0FuQkQ7O0FBcUJBLFFBQUkzRixnQkFBRW1GLFVBQUYsQ0FBYTNDLGFBQWIsQ0FBSixFQUFpQztBQUMvQixZQUFNc0QsTUFBTSxHQUFHLE1BQU10RCxhQUFhLENBQUM7QUFDakMxQyxRQUFBQSxhQUFhLEVBQUVFLGdCQUFFK0YsS0FBRixDQUFRakcsYUFBUixDQURrQjtBQUVqQ3FELFFBQUFBLEtBRmlDO0FBR2pDeEQsUUFBQUEsT0FBTyxFQUFFSyxnQkFBRStGLEtBQUYsQ0FBUXBHLE9BQVIsQ0FId0I7QUFJakNWLFFBQUFBLE9BQU8sRUFBRTJEO0FBSndCLE9BQUQsQ0FBbEM7QUFNQSxhQUFRLEVBQUNrRCxNQUFELGFBQUNBLE1BQUQsZUFBQ0EsTUFBTSxDQUFFN0csT0FBVCxLQUFvQnZCLEdBQUcsTUFBS29JLE1BQUwsYUFBS0EsTUFBTCx1QkFBS0EsTUFBTSxDQUFFN0csT0FBYixDQUF2QixJQUErQyxFQUFDLE1BQU1sQixZQUFHaUUsTUFBSCxDQUFVOEQsTUFBVixhQUFVQSxNQUFWLHVCQUFVQSxNQUFNLENBQUU3RyxPQUFsQixDQUFQLENBQWhELEdBQ0gyRCxNQURHLEdBRUgsTUFBTThDLGVBQWUsQ0FBQ0ksTUFBTSxDQUFDN0csT0FBUixDQUZ6QjtBQUdEOztBQUVENkIsSUFBQUEsa0JBQWtCLENBQUM4QixNQUFELEVBQVM3QixzQkFBVCxDQUFsQjtBQUNBLFdBQVFyRCxHQUFHLEtBQUtrRixNQUFSLEtBQW1CRSxXQUFXLElBQUk5QyxnQkFBRXJCLE1BQUYsQ0FBU29FLGNBQVQsRUFBeUJtQixJQUF6QixDQUE4QjhCLE9BQTlCLENBQWxDLENBQUQsR0FDSCxNQUFNTixlQUFlLENBQUM5QyxNQUFELENBRGxCLEdBRUhBLE1BRko7QUFHRCxHQXZLWSxDQUFiO0FBd0tEOztBQUVELGVBQWVtQyxXQUFmLENBQTRCckgsR0FBNUIsRUFBaUNpSCxVQUFqQyxFQUE2QztBQUMzQyxRQUFNO0FBQUNzQixJQUFBQTtBQUFELE1BQVN6RyxhQUFJMEQsS0FBSixDQUFVeEYsR0FBVixDQUFmOztBQUNBLE1BQUk7QUFDRixVQUFNd0ksYUFBSUMsWUFBSixDQUFpQkYsSUFBakIsRUFBdUJ0QixVQUF2QixFQUFtQztBQUN2Q2pGLE1BQUFBLE9BQU8sRUFBRXBCO0FBRDhCLEtBQW5DLENBQU47QUFHRCxHQUpELENBSUUsT0FBTzhILEdBQVAsRUFBWTtBQUNaLFVBQU0sSUFBSWpGLEtBQUosQ0FBVywrQkFBOEJpRixHQUFHLENBQUMvRyxPQUFRLEVBQXJELENBQU47QUFDRDs7QUFDRCxTQUFPc0YsVUFBUDtBQUNEOztBQWVELGVBQWVZLFFBQWYsQ0FBeUJjLE9BQXpCLEVBQWtDQyxPQUFsQyxFQUEyQ3ZGLHNCQUEzQyxFQUFtRTtBQUNqRSxRQUFNd0YsYUFBSUMsY0FBSixDQUFtQkgsT0FBbkIsQ0FBTjs7QUFFQSxNQUFJLENBQUNyRyxnQkFBRXlDLE9BQUYsQ0FBVTFCLHNCQUFWLENBQUwsRUFBd0M7QUFDdENBLElBQUFBLHNCQUFzQixHQUFHLENBQUNBLHNCQUFELENBQXpCO0FBQ0Q7O0FBRUQsUUFBTXNFLE9BQU8sR0FBRyxNQUFNVCxpQkFBUVUsT0FBUixFQUF0Qjs7QUFDQSxNQUFJO0FBQ0YxSCxvQkFBT2lCLEtBQVAsQ0FBYyxjQUFhd0gsT0FBUSxHQUFuQzs7QUFDQSxVQUFNSSxLQUFLLEdBQUcsSUFBSUMsZ0JBQU9DLEtBQVgsR0FBbUJDLEtBQW5CLEVBQWQ7QUFDQSxVQUFNQyxpQkFBaUIsR0FBR3RJLE9BQU8sQ0FBQ3VJLEdBQVIsQ0FBWUMsMEJBQXRDO0FBQ0EsVUFBTUMsY0FBYyxHQUFHaEgsZ0JBQUUyQyxPQUFGLENBQVVrRSxpQkFBVixLQUNsQixDQUFDLENBQUMsR0FBRCxFQUFNLE9BQU4sRUFBZTVGLFFBQWYsQ0FBd0JqQixnQkFBRWdCLE9BQUYsQ0FBVTZGLGlCQUFWLENBQXhCLENBRE47QUFRQSxVQUFNSSxjQUFjLEdBQUc7QUFBQ0QsTUFBQUE7QUFBRCxLQUF2Qjs7QUFFQSxRQUFJcEcsY0FBS00sT0FBTCxDQUFhbUYsT0FBYixNQUEwQnBKLE9BQTlCLEVBQXVDO0FBQ3JDVyxzQkFBT2lCLEtBQVAsQ0FBYyw2REFBNEQrQixjQUFLQyxRQUFMLENBQWN3RixPQUFkLENBQXVCLEdBQWpHOztBQUNBWSxNQUFBQSxjQUFjLENBQUNDLGlCQUFmLEdBQW1DLE1BQW5DO0FBQ0Q7O0FBQ0QsVUFBTVgsYUFBSVksWUFBSixDQUFpQmQsT0FBakIsRUFBMEJoQixPQUExQixFQUFtQzRCLGNBQW5DLENBQU47QUFDQSxVQUFNRyxXQUFXLEdBQUksVUFBU3JHLHNCQUFzQixDQUFDbkMsR0FBdkIsQ0FBNEJ5SSxHQUFELElBQVNBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLEtBQVosRUFBbUIsRUFBbkIsQ0FBcEMsRUFBNERDLElBQTVELENBQWlFLEdBQWpFLENBQXNFLEdBQXBHO0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxNQUFNekosWUFBR3VELElBQUgsQ0FBUThGLFdBQVIsRUFBcUI7QUFDcEQ3RixNQUFBQSxHQUFHLEVBQUU4RCxPQUQrQztBQUVwRDdELE1BQUFBLE1BQU0sRUFBRTtBQUY0QyxLQUFyQixDQUFQLEVBSXRCaUcsSUFKc0IsQ0FJakIsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVVELENBQUMsQ0FBQ0UsS0FBRixDQUFRaEgsY0FBS2lILEdBQWIsRUFBa0IvSSxNQUFsQixHQUEyQjZJLENBQUMsQ0FBQ0MsS0FBRixDQUFRaEgsY0FBS2lILEdBQWIsRUFBa0IvSSxNQUp0QyxDQUExQjs7QUFLQSxRQUFJa0IsZ0JBQUUyQyxPQUFGLENBQVU2RSxpQkFBVixDQUFKLEVBQWtDO0FBQ2hDNUosc0JBQU9rSyxhQUFQLENBQXNCLCtDQUE4Qy9HLHNCQUF1QixJQUF0RSxHQUNuQmhDLGNBQUtDLFNBQUwsQ0FBZSxRQUFmLEVBQXlCK0Isc0JBQXNCLENBQUNqQyxNQUFoRCxFQUF3RCxLQUF4RCxDQURtQixHQUVsQixzRUFGa0IsR0FHbEIsSUFBR2lDLHNCQUF1QixLQUFJaEMsY0FBS0MsU0FBTCxDQUFlLFdBQWYsRUFBNEIrQixzQkFBc0IsQ0FBQ2pDLE1BQW5ELEVBQTJELEtBQTNELENBQWtFLEVBSG5HO0FBSUQ7O0FBQ0RsQixvQkFBT2lCLEtBQVAsQ0FBYyxhQUFZRSxjQUFLQyxTQUFMLENBQWUsYUFBZixFQUE4QndJLGlCQUFpQixDQUFDMUksTUFBaEQsRUFBd0QsSUFBeEQsQ0FBOEQsR0FBM0UsR0FDVixTQUFRdUgsT0FBUSxRQUFPMEIsSUFBSSxDQUFDQyxLQUFMLENBQVd2QixLQUFLLENBQUN3QixXQUFOLEdBQW9CQyxjQUEvQixDQUErQyxPQUFNVixpQkFBa0IsRUFEakc7O0FBRUEsVUFBTVcsYUFBYSxHQUFHbkksZ0JBQUUwRSxLQUFGLENBQVE4QyxpQkFBUixDQUF0Qjs7QUFDQTVKLG9CQUFPQyxJQUFQLENBQWEsYUFBWXNLLGFBQWMseUJBQXZDOztBQUNBLFVBQU1DLE9BQU8sR0FBR3hILGNBQUs2RSxPQUFMLENBQWFhLE9BQWIsRUFBc0IxRixjQUFLQyxRQUFMLENBQWNzSCxhQUFkLENBQXRCLENBQWhCOztBQUNBLFVBQU1wSyxZQUFHc0ssRUFBSCxDQUFNekgsY0FBSzZFLE9BQUwsQ0FBYUosT0FBYixFQUFzQjhDLGFBQXRCLENBQU4sRUFBNENDLE9BQTVDLEVBQXFEO0FBQUNFLE1BQUFBLE1BQU0sRUFBRTtBQUFULEtBQXJELENBQU47QUFDQSxXQUFPRixPQUFQO0FBQ0QsR0F0Q0QsU0FzQ1U7QUFDUixVQUFNckssWUFBR0MsTUFBSCxDQUFVcUgsT0FBVixDQUFOO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTa0QsaUJBQVQsQ0FBNEI3SyxHQUE1QixFQUFpQztBQUMvQixTQUFRLHVDQUFELENBQTBDNEYsSUFBMUMsQ0FBK0M1RixHQUEvQyxDQUFQO0FBQ0Q7O0FBWUQsU0FBUzhLLGFBQVQsQ0FBd0JDLEtBQXhCLEVBQStCQyxRQUEvQixFQUF5Q0MsU0FBekMsRUFBb0Q7QUFFbEQsTUFBSTNJLGdCQUFFeUMsT0FBRixDQUFVZ0csS0FBVixDQUFKLEVBQXNCO0FBQ3BCLFdBQU9BLEtBQUssQ0FBQzdKLEdBQU4sQ0FBV2dLLElBQUQsSUFBVUosYUFBYSxDQUFDSSxJQUFELEVBQU9GLFFBQVAsRUFBaUJDLFNBQWpCLENBQWpDLENBQVA7QUFDRDs7QUFHRCxNQUFJM0ksZ0JBQUVDLGFBQUYsQ0FBZ0J3SSxLQUFoQixDQUFKLEVBQTRCO0FBQzFCLFVBQU1JLFNBQVMsR0FBRyxFQUFsQjs7QUFDQSxTQUFLLElBQUksQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLENBQVQsSUFBeUIvSSxnQkFBRWdKLE9BQUYsQ0FBVVAsS0FBVixDQUF6QixFQUEyQztBQUN6QyxZQUFNUSxzQkFBc0IsR0FBR1QsYUFBYSxDQUFDTyxLQUFELEVBQVFMLFFBQVIsRUFBa0JDLFNBQWxCLENBQTVDOztBQUNBLFVBQUlHLEdBQUcsS0FBS0osUUFBWixFQUFzQjtBQUNwQkcsUUFBQUEsU0FBUyxDQUFDRixTQUFELENBQVQsR0FBdUJNLHNCQUF2QjtBQUNELE9BRkQsTUFFTyxJQUFJSCxHQUFHLEtBQUtILFNBQVosRUFBdUI7QUFDNUJFLFFBQUFBLFNBQVMsQ0FBQ0gsUUFBRCxDQUFULEdBQXNCTyxzQkFBdEI7QUFDRDs7QUFDREosTUFBQUEsU0FBUyxDQUFDQyxHQUFELENBQVQsR0FBaUJHLHNCQUFqQjtBQUNEOztBQUNELFdBQU9KLFNBQVA7QUFDRDs7QUFHRCxTQUFPSixLQUFQO0FBQ0Q7O0FBUUQsU0FBU1MsY0FBVCxDQUF5QkMsR0FBekIsRUFBOEI7QUFDNUIsTUFBSW5KLGdCQUFFeUMsT0FBRixDQUFVMEcsR0FBVixDQUFKLEVBQW9CO0FBQ2xCLFdBQU9BLEdBQVA7QUFDRDs7QUFFRCxNQUFJQyxVQUFKOztBQUNBLE1BQUk7QUFDRkEsSUFBQUEsVUFBVSxHQUFHQyxJQUFJLENBQUNuRyxLQUFMLENBQVdpRyxHQUFYLENBQWI7O0FBQ0EsUUFBSW5KLGdCQUFFeUMsT0FBRixDQUFVMkcsVUFBVixDQUFKLEVBQTJCO0FBQ3pCLGFBQU9BLFVBQVA7QUFDRDtBQUNGLEdBTEQsQ0FLRSxPQUFPRSxHQUFQLEVBQVk7QUFDWjFMLG9CQUFPd0IsSUFBUCxDQUFhLDBDQUFiO0FBQ0Q7O0FBQ0QsTUFBSVksZ0JBQUV1QyxRQUFGLENBQVc0RyxHQUFYLENBQUosRUFBcUI7QUFDbkIsV0FBTyxDQUFDQSxHQUFELENBQVA7QUFDRDs7QUFDRCxRQUFNLElBQUloSSxLQUFKLENBQVcsaURBQWdEZ0ksR0FBSSxFQUEvRCxDQUFOO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHRlbXBEaXIsIGZzLCB1dGlsLCB6aXAsIG5ldCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuY29uc3QgWklQX0VYVFMgPSBbJy56aXAnLCBJUEFfRVhUXTtcbmNvbnN0IFpJUF9NSU1FX1RZUEVTID0gW1xuICAnYXBwbGljYXRpb24vemlwJyxcbiAgJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnLFxuICAnbXVsdGlwYXJ0L3gtemlwJyxcbl07XG5jb25zdCBDQUNIRURfQVBQU19NQVhfQUdFID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gbXNcbmNvbnN0IEFQUExJQ0FUSU9OU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXhBZ2U6IENBQ0hFRF9BUFBTX01BWF9BR0UsIC8vIGV4cGlyZSBhZnRlciAyNCBob3Vyc1xuICB1cGRhdGVBZ2VPbkdldDogdHJ1ZSxcbiAgZGlzcG9zZTogKGFwcCwge2Z1bGxQYXRofSkgPT4ge1xuICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gJyR7YXBwfScgY2FjaGVkIGF0ICcke2Z1bGxQYXRofScgaGFzIGAgK1xuICAgICAgYGV4cGlyZWQgYWZ0ZXIgJHtDQUNIRURfQVBQU19NQVhfQUdFfW1zYCk7XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoZnVsbFBhdGgpIHtcbiAgICAgICAgYXdhaXQgZnMucmltcmFmKGZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgbm9EaXNwb3NlT25TZXQ6IHRydWUsXG59KTtcbmNvbnN0IEFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFNBTklUSVpFX1JFUExBQ0VNRU5UID0gJy0nO1xuY29uc3QgREVGQVVMVF9CQVNFTkFNRSA9ICdhcHBpdW0tYXBwJztcbmNvbnN0IEFQUF9ET1dOTE9BRF9USU1FT1VUX01TID0gMTIwICogMTAwMDtcblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgaWYgKEFQUExJQ0FUSU9OU19DQUNIRS5pdGVtQ291bnQgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhcHBQYXRocyA9IEFQUExJQ0FUSU9OU19DQUNIRS52YWx1ZXMoKVxuICAgIC5tYXAoKHtmdWxsUGF0aH0pID0+IGZ1bGxQYXRoKTtcbiAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHthcHBQYXRocy5sZW5ndGh9IGNhY2hlZCBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgnYXBwbGljYXRpb24nLCBhcHBQYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIGFwcFBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVIZWFkZXJzIChsaW5rKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgICB1cmw6IGxpbmssXG4gICAgICBtZXRob2Q6ICdIRUFEJyxcbiAgICAgIHRpbWVvdXQ6IDUwMDAsXG4gICAgfSkpLmhlYWRlcnM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2Fubm90IHNlbmQgSEVBRCByZXF1ZXN0IHRvICcke2xpbmt9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FjaGVkQXBwbGljYXRpb25QYXRoIChsaW5rLCBjdXJyZW50QXBwUHJvcHMgPSB7fSwgY2FjaGVkQXBwSW5mbyA9IHt9KSB7XG4gIGNvbnN0IHJlZnJlc2ggPSAoKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBBIGZyZXNoIGNvcHkgb2YgdGhlIGFwcGxpY2F0aW9uIGlzIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgZnJvbSAke2xpbmt9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykgfHwgIV8uaXNQbGFpbk9iamVjdChjdXJyZW50QXBwUHJvcHMpKSB7XG4gICAgLy8gaWYgYW4gaW52YWxpZCBhcmcgaXMgcGFzc2VkIHRoZW4gYXNzdW1lIGNhY2hlIG1pc3NcbiAgICByZXR1cm4gcmVmcmVzaCgpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxhc3RNb2RpZmllZDogY3VycmVudE1vZGlmaWVkLFxuICAgIGltbXV0YWJsZTogY3VycmVudEltbXV0YWJsZSxcbiAgICAvLyBtYXhBZ2UgaXMgaW4gc2Vjb25kc1xuICAgIG1heEFnZTogY3VycmVudE1heEFnZSxcbiAgfSA9IGN1cnJlbnRBcHBQcm9wcztcbiAgY29uc3Qge1xuICAgIC8vIERhdGUgaW5zdGFuY2VcbiAgICBsYXN0TW9kaWZpZWQsXG4gICAgLy8gYm9vbGVhblxuICAgIGltbXV0YWJsZSxcbiAgICAvLyBVbml4IHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAgdGltZXN0YW1wLFxuICAgIGZ1bGxQYXRoLFxuICB9ID0gY2FjaGVkQXBwSW5mbztcbiAgaWYgKGxhc3RNb2RpZmllZCAmJiBjdXJyZW50TW9kaWZpZWQpIHtcbiAgICBpZiAoY3VycmVudE1vZGlmaWVkLmdldFRpbWUoKSA8PSBsYXN0TW9kaWZpZWQuZ2V0VGltZSgpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFRoZSBhcHBsaWNhdGlvbiBhdCAke2xpbmt9IGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSAke2xhc3RNb2RpZmllZH1gKTtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgYXBwbGljYXRpb24gYXQgJHtsaW5rfSBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSAke2xhc3RNb2RpZmllZH1gKTtcbiAgICByZXR1cm4gcmVmcmVzaCgpO1xuICB9XG4gIGlmIChpbW11dGFibGUgJiYgY3VycmVudEltbXV0YWJsZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIGFwcGxpY2F0aW9uIGF0ICR7bGlua30gaXMgaW1tdXRhYmxlYCk7XG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG4gIGlmIChjdXJyZW50TWF4QWdlICYmIHRpbWVzdGFtcCkge1xuICAgIGNvbnN0IG1zTGVmdCA9IHRpbWVzdGFtcCArIGN1cnJlbnRNYXhBZ2UgKiAxMDAwIC0gRGF0ZS5ub3coKTtcbiAgICBpZiAobXNMZWZ0ID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBUaGUgY2FjaGVkIGFwcGxpY2F0aW9uICcke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfScgd2lsbCBleHBpcmUgaW4gJHttc0xlZnQgLyAxMDAwfXNgKTtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgY2FjaGVkIGFwcGxpY2F0aW9uICcke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfScgaGFzIGV4cGlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmVmcmVzaCgpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcHBFeHRlbnNpb24gKGFwcCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykge1xuICBpZiAoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5tYXAoXy50b0xvd2VyKS5pbmNsdWRlcyhfLnRvTG93ZXIocGF0aC5leHRuYW1lKGFwcCkpKSkge1xuICAgIHJldHVybiBhcHA7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBOZXcgYXBwIHBhdGggJyR7YXBwfScgZGlkIG5vdCBoYXZlIGAgK1xuICAgIGAke3V0aWwucGx1cmFsaXplKCdleHRlbnNpb24nLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpfTogYCArXG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZvbGRlckludGVncml0eSAoZm9sZGVyUGF0aCkge1xuICByZXR1cm4gKGF3YWl0IGZzLmdsb2IoJyoqLyonLCB7Y3dkOiBmb2xkZXJQYXRoLCBzdHJpY3Q6IGZhbHNlLCBub3NvcnQ6IHRydWV9KSkubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5IChmaWxlUGF0aCkge1xuICByZXR1cm4gYXdhaXQgZnMuaGFzaChmaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwSW50ZWdyaXR5T2sgKGN1cnJlbnRQYXRoLCBleHBlY3RlZEludGVncml0eSA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGN1cnJlbnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEZvbGRlciBpbnRlZ3JpdHkgY2hlY2sgaXMgc2ltcGxlOlxuICAvLyBWZXJpZnkgdGhlIHByZXZpb3VzIGFtb3VudCBvZiBmaWxlcyBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZS5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byB1c2UgZXF1YWxpdHkgY29tcGFyaXNvbiBiZWNhdXNlIG9mIGFuIGFzc3VtcHRpb24gdGhhdCB0aGUgT1MgbWlnaHRcbiAgLy8gY3JlYXRlIHNvbWUgdW53YW50ZWQgc2VydmljZSBmaWxlcy9jYWNoZWQgaW5zaWRlIG9mIHRoYXQgZm9sZGVyIG9yIGl0cyBzdWJmb2xkZXJzLlxuICAvLyBPZmMsIHZhbGlkYXRpbmcgdGhlIGhhc2ggc3VtIG9mIGVhY2ggZmlsZSAob3IgYXQgbGVhc3Qgb2YgZmlsZSBwYXRoKSB3b3VsZCBiZSBtdWNoXG4gIC8vIG1vcmUgcHJlY2lzZSwgYnV0IHdlIGRvbid0IG5lZWQgdG8gYmUgdmVyeSBwcmVjaXNlIGhlcmUgYW5kIGFsc28gZG9uJ3Qgd2FudCB0b1xuICAvLyBvdmVydXNlIFJBTSBhbmQgaGF2ZSBhIHBlcmZvcm1hbmNlIGRyb3AuXG4gIHJldHVybiAoYXdhaXQgZnMuc3RhdChjdXJyZW50UGF0aCkpLmlzRGlyZWN0b3J5KClcbiAgICA/IGF3YWl0IGNhbGN1bGF0ZUZvbGRlckludGVncml0eShjdXJyZW50UGF0aCkgPj0gZXhwZWN0ZWRJbnRlZ3JpdHk/LmZvbGRlclxuICAgIDogYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShjdXJyZW50UGF0aCkgPT09IGV4cGVjdGVkSW50ZWdyaXR5Py5maWxlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvc3RQcm9jZXNzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fSBjYWNoZWRBcHBJbmZvIFRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXNseSBjYWNoZWQgYXBwIGluc3RhbmNlIChpZiBleGlzdHMpOlxuICogICAgLSBwYWNrYWdlSGFzaDogU0hBMSBoYXNoIG9mIHRoZSBwYWNrYWdlIGlmIGl0IGlzIGEgZmlsZSBhbmQgbm90IGEgZm9sZGVyXG4gKiAgICAtIGxhc3RNb2RpZmllZDogT3B0aW9uYWwgRGF0ZSBpbnN0YW5jZSwgdGhlIHZhbHVlIG9mIGZpbGUncyBgTGFzdC1Nb2RpZmllZGAgaGVhZGVyXG4gKiAgICAtIGltbXV0YWJsZTogT3B0aW9uYWwgYm9vbGVhbiB2YWx1ZS4gQ29udGFpbnMgdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgYW4gYGltbXV0YWJsZWAgbWFya1xuICogICAgICAgICAgICAgICAgIGluIGBDYWNoZS1jb250cm9sYCBoZWFkZXJcbiAqICAgIC0gbWF4QWdlOiBPcHRpb25hbCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGBtYXhBZ2VgIHBhcmFtZXRlciBpbiBgQ2FjaGUtY29udHJvbGAgaGVhZGVyXG4gKiAgICAtIHRpbWVzdGFtcDogVGhlIHRpbWVzdGFtcCB0aGlzIGl0ZW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNhY2hlIChtZWFzdXJlZCBpbiBVbml4IGVwb2NoXG4gKiAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzKVxuICogICAgLSBpbnRlZ3JpdHk6IEFuIG9iamVjdCBjb250YWluaW5nIGVpdGhlciBgZmlsZWAgcHJvcGVydHkgd2l0aCBTSEExIGhhc2ggb2YgdGhlIGZpbGVcbiAqICAgICAgICAgICAgICAgICBvciBgZm9sZGVyYCBwcm9wZXJ0eSB3aXRoIHRvdGFsIGFtb3VudCBvZiBjYWNoZWQgZmlsZXMgYW5kIHN1YmZvbGRlcnNcbiAqICAgIC0gZnVsbFBhdGg6IHRoZSBmdWxsIHBhdGggdG8gdGhlIGNhY2hlZCBhcHBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNVcmwgV2hldGhlciB0aGUgYXBwIGhhcyBiZWVuIGRvd25sb2FkZWQgZnJvbSBhIHJlbW90ZSBVUkxcbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyBPcHRpb25hbCBoZWFkZXJzIG9iamVjdC4gT25seSBwcmVzZW50IGlmIGBpc1VybGAgaXMgdHJ1ZSBhbmQgaWYgdGhlIHNlcnZlclxuICogcmVzcG9uZHMgdG8gSEVBRCByZXF1ZXN0cy4gQWxsIGhlYWRlciBuYW1lcyBhcmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCBBIHN0cmluZyBjb250YWluaW5nIGZ1bGwgcGF0aCB0byB0aGUgcHJlcHJvY2Vzc2VkIGFwcGxpY2F0aW9uIHBhY2thZ2UgKGVpdGhlclxuICogZG93bmxvYWRlZCBvciBhIGxvY2FsIG9uZSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvc3RQcm9jZXNzUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCBUaGUgZnVsbCBwYXN0IHRvIHRoZSBwb3N0LXByb2Nlc3NlZCBhcHBsaWNhdGlvbiBwYWNrYWdlIG9uIHRoZVxuICogbG9jYWwgZmlsZSBzeXN0ZW0gKG1pZ2h0IGJlIGEgZmlsZSBvciBhIGZvbGRlciBwYXRoKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29uZmlndXJlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHsob2JqOiBQb3N0UHJvY2Vzc09wdGlvbnMpID0+IChQcm9taXNlPFBvc3RQcm9jZXNzUmVzdWx0fHVuZGVmaW5lZD58UG9zdFByb2Nlc3NSZXN1bHR8dW5kZWZpbmVkKX0gb25Qb3N0UHJvY2Vzc1xuICogT3B0aW9uYWwgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkXG4gKiB0byB0aGUgYXBwbGljYXRpb24gYWZ0ZXIgaXQgaXMgZG93bmxvYWRlZC9wcmVwcm9jZXNzZWQuIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGFzeW5jXG4gKiBhbmQgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IHNpbmdsZSBvYmplY3QgcGFyYW1ldGVyLlxuICogVGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGVpdGhlciByZXR1cm4gYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgdGhlIGFwcCBtdXN0IG5vdCBiZVxuICogY2FjaGVkIGFuZCBhIGZyZXNoIGNvcHkgb2YgaXQgaXMgZG93bmxvYWRlZCBlYWNoIHRpbWUuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcbiAqIGNvbnRhaW5pbmcgYGFwcFBhdGhgIHByb3BlcnR5IHRoZW4gdGhlIGludGVncml0eSBvZiBpdCB3aWxsIGJlIHZlcmlmaWVkIGFuZCBzdG9yZWQgaW50b1xuICogdGhlIGNhY2hlLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gc3VwcG9ydGVkRXh0ZW5zaW9ucyBMaXN0IG9mIHN1cHBvcnRlZCBhcHBsaWNhdGlvbiBleHRlbnNpb25zIChcbiAqIGluY2x1ZGluZyBzdGFydGluZyBkb3RzKS4gVGhpcyBwcm9wZXJ0eSBpcyBtYW5kYXRvcnkgYW5kIG11c3Qgbm90IGJlIGVtcHR5LlxuICovXG5cbi8qKlxuICogUHJlcGFyZXMgYW4gYXBwIHRvIGJlIHVzZWQgaW4gYW4gYXV0b21hdGVkIHRlc3QuIFRoZSBhcHAgZ2V0cyBjYWNoZWQgYXV0b21hdGljYWxseVxuICogaWYgaXQgaXMgYW4gYXJjaGl2ZSBvciBpZiBpdCBpcyBkb3dubG9hZGVkIGZyb20gYW4gVVJMLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgRWl0aGVyIGEgZnVsbCBwYXRoIHRvIHRoZSBhcHAgb3IgYSByZW1vdGUgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXXxDb25maWd1cmVBcHBPcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZXN1bHRpbmcgYXBwbGljYXRpb24gYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUFwcCAoYXBwLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGFwcCkpIHtcbiAgICAvLyBpbW1lZGlhdGVseSBzaG9ydGNpcmN1aXQgaWYgbm90IGdpdmVuIGFuIGFwcFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zO1xuICBjb25zdCB7XG4gICAgb25Qb3N0UHJvY2VzcyxcbiAgfSA9IF8uaXNQbGFpbk9iamVjdChvcHRpb25zKSA/IG9wdGlvbnMgOiB7fTtcbiAgaWYgKF8uaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gW29wdGlvbnNdO1xuICB9IGVsc2UgaWYgKF8uaXNBcnJheShvcHRpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBvcHRpb25zO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBvcHRpb25zLnN1cHBvcnRlZEV4dGVuc2lvbnM7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgT25lIG9yIG1vcmUgc3VwcG9ydGVkIGFwcCBleHRlbnNpb25zIG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgfVxuXG4gIGxldCBuZXdBcHAgPSBhcHA7XG4gIGxldCBzaG91bGRVbnppcEFwcCA9IGZhbHNlO1xuICBsZXQgcGFja2FnZUhhc2ggPSBudWxsO1xuICBsZXQgaGVhZGVycyA9IG51bGw7XG4gIGNvbnN0IHJlbW90ZUFwcFByb3BzID0ge1xuICAgIGxhc3RNb2RpZmllZDogbnVsbCxcbiAgICBpbW11dGFibGU6IGZhbHNlLFxuICAgIG1heEFnZTogbnVsbCxcbiAgfTtcbiAgY29uc3Qge3Byb3RvY29sLCBwYXRobmFtZX0gPSB1cmwucGFyc2UobmV3QXBwKTtcbiAgY29uc3QgaXNVcmwgPSBbJ2h0dHA6JywgJ2h0dHBzOiddLmluY2x1ZGVzKHByb3RvY29sKTtcblxuICBjb25zdCBjYWNoZWRBcHBJbmZvID0gQVBQTElDQVRJT05TX0NBQ0hFLmdldChhcHApO1xuXG4gIHJldHVybiBhd2FpdCBBUFBMSUNBVElPTlNfQ0FDSEVfR1VBUkQuYWNxdWlyZShhcHAsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNVcmwpIHtcbiAgICAgIC8vIFVzZSB0aGUgYXBwIGZyb20gcmVtb3RlIFVSTFxuICAgICAgbG9nZ2VyLmluZm8oYFVzaW5nIGRvd25sb2FkYWJsZSBhcHAgJyR7bmV3QXBwfSdgKTtcbiAgICAgIGhlYWRlcnMgPSBhd2FpdCByZXRyaWV2ZUhlYWRlcnMobmV3QXBwKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGhlYWRlcnMpKSB7XG4gICAgICAgIGlmIChoZWFkZXJzWydsYXN0LW1vZGlmaWVkJ10pIHtcbiAgICAgICAgICByZW1vdGVBcHBQcm9wcy5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZShoZWFkZXJzWydsYXN0LW1vZGlmaWVkJ10pO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgTGFzdC1Nb2RpZmllZDogJHtoZWFkZXJzWydsYXN0LW1vZGlmaWVkJ119YCk7XG4gICAgICAgIGlmIChoZWFkZXJzWydjYWNoZS1jb250cm9sJ10pIHtcbiAgICAgICAgICByZW1vdGVBcHBQcm9wcy5pbW11dGFibGUgPSAvXFxiaW1tdXRhYmxlXFxiL2kudGVzdChoZWFkZXJzWydjYWNoZS1jb250cm9sJ10pO1xuICAgICAgICAgIGNvbnN0IG1heEFnZU1hdGNoID0gL1xcYm1heC1hZ2U9KFxcZCspXFxiL2kuZXhlYyhoZWFkZXJzWydjYWNoZS1jb250cm9sJ10pO1xuICAgICAgICAgIGlmIChtYXhBZ2VNYXRjaCkge1xuICAgICAgICAgICAgcmVtb3RlQXBwUHJvcHMubWF4QWdlID0gcGFyc2VJbnQobWF4QWdlTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDYWNoZS1Db250cm9sOiAke2hlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNhY2hlZFBhdGggPSBnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgoYXBwLCByZW1vdGVBcHBQcm9wcywgY2FjaGVkQXBwSW5mbyk7XG4gICAgICBpZiAoY2FjaGVkUGF0aCkge1xuICAgICAgICBpZiAoYXdhaXQgaXNBcHBJbnRlZ3JpdHlPayhjYWNoZWRQYXRoLCBjYWNoZWRBcHBJbmZvPy5pbnRlZ3JpdHkpKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFJldXNpbmcgcHJldmlvdXNseSBkb3dubG9hZGVkIGFwcGxpY2F0aW9uIGF0ICcke2NhY2hlZFBhdGh9J2ApO1xuICAgICAgICAgIHJldHVybiB2ZXJpZnlBcHBFeHRlbnNpb24oY2FjaGVkUGF0aCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtjYWNoZWRQYXRofScgZG9lcyBub3QgZXhpc3QgYW55bW9yZSBgICtcbiAgICAgICAgICBgb3IgaXRzIGludGVncml0eSBoYXMgYmVlbiBkYW1hZ2VkLiBEZWxldGluZyBpdCBmcm9tIHRoZSBpbnRlcm5hbCBjYWNoZWApO1xuICAgICAgICBBUFBMSUNBVElPTlNfQ0FDSEUuZGVsKGFwcCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBmaWxlTmFtZSA9IG51bGw7XG4gICAgICBjb25zdCBiYXNlbmFtZSA9IGZzLnNhbml0aXplTmFtZShwYXRoLmJhc2VuYW1lKGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSkpLCB7XG4gICAgICAgIHJlcGxhY2VtZW50OiBTQU5JVElaRV9SRVBMQUNFTUVOVFxuICAgICAgfSk7XG4gICAgICBjb25zdCBleHRuYW1lID0gcGF0aC5leHRuYW1lKGJhc2VuYW1lKTtcbiAgICAgIC8vIHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIHVuemlwIHRoZSBhcHAsIHdlIGhhdmUgYSBudW1iZXIgb2YgcGxhY2VzXG4gICAgICAvLyB0byBsb29rOiBjb250ZW50IHR5cGUsIGNvbnRlbnQgZGlzcG9zaXRpb24sIG9yIHRoZSBmaWxlIGV4dGVuc2lvblxuICAgICAgaWYgKFpJUF9FWFRTLmluY2x1ZGVzKGV4dG5hbWUpKSB7XG4gICAgICAgIGZpbGVOYW1lID0gYmFzZW5hbWU7XG4gICAgICAgIHNob3VsZFVuemlwQXBwID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBjb25zdCBjdCA9IGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbnRlbnQtVHlwZTogJHtjdH1gKTtcbiAgICAgICAgLy8gdGhlIGZpbGV0eXBlIG1heSBub3QgYmUgb2J2aW91cyBmb3IgY2VydGFpbiB1cmxzLCBzbyBjaGVjayB0aGUgbWltZSB0eXBlIHRvb1xuICAgICAgICBpZiAoWklQX01JTUVfVFlQRVMuc29tZSgobWltZVR5cGUpID0+IG5ldyBSZWdFeHAoYFxcXFxiJHtfLmVzY2FwZVJlZ0V4cChtaW1lVHlwZSl9XFxcXGJgKS50ZXN0KGN0KSkpIHtcbiAgICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGAke0RFRkFVTFRfQkFTRU5BTUV9LnppcGA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNob3VsZFVuemlwQXBwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSAmJiAvXmF0dGFjaG1lbnQvaS50ZXN0KGhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb250ZW50LURpc3Bvc2l0aW9uOiAke2hlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXX1gKTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvZmlsZW5hbWU9XCIoW15cIl0rKS9pLmV4ZWMoaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgZmlsZU5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUobWF0Y2hbMV0sIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50OiBTQU5JVElaRV9SRVBMQUNFTUVOVFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNob3VsZFVuemlwQXBwID0gc2hvdWxkVW56aXBBcHAgfHwgWklQX0VYVFMuaW5jbHVkZXMocGF0aC5leHRuYW1lKGZpbGVOYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkZWZhdWx0IGZpbGUgbmFtZSBhbmQgdGhlIGV4dGVuc2lvbiBpZiBub25lIGhhcyBiZWVuIGRldGVjdGVkXG4gICAgICAgIGNvbnN0IHJlc3VsdGluZ05hbWUgPSBiYXNlbmFtZVxuICAgICAgICAgID8gYmFzZW5hbWUuc3Vic3RyaW5nKDAsIGJhc2VuYW1lLmxlbmd0aCAtIGV4dG5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogREVGQVVMVF9CQVNFTkFNRTtcbiAgICAgICAgbGV0IHJlc3VsdGluZ0V4dCA9IGV4dG5hbWU7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5pbmNsdWRlcyhyZXN1bHRpbmdFeHQpKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBjdXJyZW50IGZpbGUgZXh0ZW5zaW9uICcke3Jlc3VsdGluZ0V4dH0nIGlzIG5vdCBzdXBwb3J0ZWQuIGAgK1xuICAgICAgICAgICAgYERlZmF1bHRpbmcgdG8gJyR7Xy5maXJzdChzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKX0nYCk7XG4gICAgICAgICAgcmVzdWx0aW5nRXh0ID0gXy5maXJzdChzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlTmFtZSA9IGAke3Jlc3VsdGluZ05hbWV9JHtyZXN1bHRpbmdFeHR9YDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldFBhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgICAgICBwcmVmaXg6IGZpbGVOYW1lLFxuICAgICAgICBzdWZmaXg6ICcnLFxuICAgICAgfSk7XG4gICAgICBuZXdBcHAgPSBhd2FpdCBkb3dubG9hZEFwcChuZXdBcHAsIHRhcmdldFBhdGgpO1xuICAgIH0gZWxzZSBpZiAoYXdhaXQgZnMuZXhpc3RzKG5ld0FwcCkpIHtcbiAgICAgIC8vIFVzZSB0aGUgbG9jYWwgYXBwXG4gICAgICBsb2dnZXIuaW5mbyhgVXNpbmcgbG9jYWwgYXBwICcke25ld0FwcH0nYCk7XG4gICAgICBzaG91bGRVbnppcEFwcCA9IFpJUF9FWFRTLmluY2x1ZGVzKHBhdGguZXh0bmFtZShuZXdBcHApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBUaGUgYXBwbGljYXRpb24gYXQgJyR7bmV3QXBwfScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgO1xuICAgICAgLy8gcHJvdG9jb2wgdmFsdWUgZm9yICdDOlxcXFx0ZW1wJyBpcyAnYzonLCBzbyB3ZSBjaGVjayB0aGUgbGVuZ3RoIGFzIHdlbGxcbiAgICAgIGlmIChfLmlzU3RyaW5nKHByb3RvY29sKSAmJiBwcm90b2NvbC5sZW5ndGggPiAyKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBUaGUgcHJvdG9jb2wgJyR7cHJvdG9jb2x9JyB1c2VkIGluICcke25ld0FwcH0nIGlzIG5vdCBzdXBwb3J0ZWQuIGAgK1xuICAgICAgICAgIGBPbmx5IGh0dHA6IGFuZCBodHRwczogcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWRgO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNQYWNrYWdlQUZpbGUgPSAoYXdhaXQgZnMuc3RhdChuZXdBcHApKS5pc0ZpbGUoKTtcbiAgICBpZiAoaXNQYWNrYWdlQUZpbGUpIHtcbiAgICAgIHBhY2thZ2VIYXNoID0gYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShuZXdBcHApO1xuICAgIH1cblxuICAgIGlmIChpc1BhY2thZ2VBRmlsZSAmJiBzaG91bGRVbnppcEFwcCAmJiAhXy5pc0Z1bmN0aW9uKG9uUG9zdFByb2Nlc3MpKSB7XG4gICAgICBjb25zdCBhcmNoaXZlUGF0aCA9IG5ld0FwcDtcbiAgICAgIGlmIChwYWNrYWdlSGFzaCA9PT0gY2FjaGVkQXBwSW5mbz8ucGFja2FnZUhhc2gpIHtcbiAgICAgICAgY29uc3Qge2Z1bGxQYXRofSA9IGNhY2hlZEFwcEluZm87XG4gICAgICAgIGlmIChhd2FpdCBpc0FwcEludGVncml0eU9rKGZ1bGxQYXRoLCBjYWNoZWRBcHBJbmZvPy5pbnRlZ3JpdHkpKSB7XG4gICAgICAgICAgaWYgKGFyY2hpdmVQYXRoICE9PSBhcHApIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcmNoaXZlUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZ2dlci5pbmZvKGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIGFwcGxpY2F0aW9uIGF0ICcke2Z1bGxQYXRofSdgKTtcbiAgICAgICAgICByZXR1cm4gdmVyaWZ5QXBwRXh0ZW5zaW9uKGZ1bGxQYXRoLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke2Z1bGxQYXRofScgZG9lcyBub3QgZXhpc3QgYW55bW9yZSBgICtcbiAgICAgICAgICBgb3IgaXRzIGludGVncml0eSBoYXMgYmVlbiBkYW1hZ2VkLiBEZWxldGluZyBpdCBmcm9tIHRoZSBjYWNoZWApO1xuICAgICAgICBBUFBMSUNBVElPTlNfQ0FDSEUuZGVsKGFwcCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgICB0cnkge1xuICAgICAgICBuZXdBcHAgPSBhd2FpdCB1bnppcEFwcChhcmNoaXZlUGF0aCwgdG1wUm9vdCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobmV3QXBwICE9PSBhcmNoaXZlUGF0aCAmJiBhcmNoaXZlUGF0aCAhPT0gYXBwKSB7XG4gICAgICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLmluZm8oYFVuemlwcGVkIGxvY2FsIGFwcCB0byAnJHtuZXdBcHB9J2ApO1xuICAgIH0gZWxzZSBpZiAoIXBhdGguaXNBYnNvbHV0ZShuZXdBcHApKSB7XG4gICAgICBuZXdBcHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgbmV3QXBwKTtcbiAgICAgIGxvZ2dlci53YXJuKGBUaGUgY3VycmVudCBhcHBsaWNhdGlvbiBwYXRoICcke2FwcH0nIGlzIG5vdCBhYnNvbHV0ZSBgICtcbiAgICAgICAgYGFuZCBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gJyR7bmV3QXBwfScuIENvbnNpZGVyIHVzaW5nIGFic29sdXRlIHBhdGhzIHJhdGhlciB0aGFuIHJlbGF0aXZlYCk7XG4gICAgICBhcHAgPSBuZXdBcHA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVBcHBJbkNhY2hlID0gYXN5bmMgKGFwcFBhdGhUb0NhY2hlKSA9PiB7XG4gICAgICBjb25zdCBjYWNoZWRGdWxsUGF0aCA9IGNhY2hlZEFwcEluZm8/LmZ1bGxQYXRoO1xuICAgICAgaWYgKGNhY2hlZEZ1bGxQYXRoICYmIGNhY2hlZEZ1bGxQYXRoICE9PSBhcHBQYXRoVG9DYWNoZSkge1xuICAgICAgICBhd2FpdCBmcy5yaW1yYWYoY2FjaGVkRnVsbFBhdGgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaW50ZWdyaXR5ID0ge307XG4gICAgICBpZiAoKGF3YWl0IGZzLnN0YXQoYXBwUGF0aFRvQ2FjaGUpKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGludGVncml0eS5mb2xkZXIgPSBhd2FpdCBjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkoYXBwUGF0aFRvQ2FjaGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZWdyaXR5LmZpbGUgPSBhd2FpdCBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5KGFwcFBhdGhUb0NhY2hlKTtcbiAgICAgIH1cbiAgICAgIEFQUExJQ0FUSU9OU19DQUNIRS5zZXQoYXBwLCB7XG4gICAgICAgIC4uLnJlbW90ZUFwcFByb3BzLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIHBhY2thZ2VIYXNoLFxuICAgICAgICBpbnRlZ3JpdHksXG4gICAgICAgIGZ1bGxQYXRoOiBhcHBQYXRoVG9DYWNoZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFwcFBhdGhUb0NhY2hlO1xuICAgIH07XG5cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKG9uUG9zdFByb2Nlc3MpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvblBvc3RQcm9jZXNzKHtcbiAgICAgICAgY2FjaGVkQXBwSW5mbzogXy5jbG9uZShjYWNoZWRBcHBJbmZvKSxcbiAgICAgICAgaXNVcmwsXG4gICAgICAgIGhlYWRlcnM6IF8uY2xvbmUoaGVhZGVycyksXG4gICAgICAgIGFwcFBhdGg6IG5ld0FwcCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICghcmVzdWx0Py5hcHBQYXRoIHx8IGFwcCA9PT0gcmVzdWx0Py5hcHBQYXRoIHx8ICFhd2FpdCBmcy5leGlzdHMocmVzdWx0Py5hcHBQYXRoKSlcbiAgICAgICAgPyBuZXdBcHBcbiAgICAgICAgOiBhd2FpdCBzdG9yZUFwcEluQ2FjaGUocmVzdWx0LmFwcFBhdGgpO1xuICAgIH1cblxuICAgIHZlcmlmeUFwcEV4dGVuc2lvbihuZXdBcHAsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgIHJldHVybiAoYXBwICE9PSBuZXdBcHAgJiYgKHBhY2thZ2VIYXNoIHx8IF8udmFsdWVzKHJlbW90ZUFwcFByb3BzKS5zb21lKEJvb2xlYW4pKSlcbiAgICAgID8gYXdhaXQgc3RvcmVBcHBJbkNhY2hlKG5ld0FwcClcbiAgICAgIDogbmV3QXBwO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBcHAgKGFwcCwgdGFyZ2V0UGF0aCkge1xuICBjb25zdCB7aHJlZn0gPSB1cmwucGFyc2UoYXBwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXQuZG93bmxvYWRGaWxlKGhyZWYsIHRhcmdldFBhdGgsIHtcbiAgICAgIHRpbWVvdXQ6IEFQUF9ET1dOTE9BRF9USU1FT1VUX01TLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkb3dubG9hZCB0aGUgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0YXJnZXRQYXRoO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBidW5kbGUgZnJvbSBhbiBhcmNoaXZlIGludG8gdGhlIGdpdmVuIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBQYXRoIEZ1bGwgcGF0aCB0byB0aGUgYXJjaGl2ZSBjb250YWluaW5nIHRoZSBidW5kbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkc3RSb290IEZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIHdoZXJlIHRoZSBleHRyYWN0ZWQgYnVuZGxlXG4gKiBzaG91bGQgYmUgcGxhY2VkXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz58c3RyaW5nfSBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zIFRoZSBsaXN0IG9mIGV4dGVuc2lvbnNcbiAqIHRoZSB0YXJnZXQgYXBwbGljYXRpb24gYnVuZGxlIHN1cHBvcnRzLCBmb3IgZXhhbXBsZSBbJy5hcGsnLCAnLmFwa3MnXSBmb3JcbiAqIEFuZHJvaWQgcGFja2FnZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgYnVuZGxlIGluIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4gYXJjaGl2ZSBpcyBpbnZhbGlkIG9yIG5vIGFwcGxpY2F0aW9uIGJ1bmRsZXNcbiAqIGhhdmUgYmVlbiBmb3VuZCBpbnNpZGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW56aXBBcHAgKHppcFBhdGgsIGRzdFJvb3QsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpIHtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuXG4gIGlmICghXy5pc0FycmF5KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IFtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zXTtcbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZGVidWcoYFVuemlwcGluZyAnJHt6aXBQYXRofSdgKTtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXAgPSBfLmlzRW1wdHkodXNlU3lzdGVtVW56aXBFbnYpXG4gICAgICB8fCAhWycwJywgJ2ZhbHNlJ10uaW5jbHVkZXMoXy50b0xvd2VyKHVzZVN5c3RlbVVuemlwRW52KSk7XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdCB0byB1c2UgdXNlIHRoZSBzeXN0ZW0gYHVuemlwYCAoZS5nLiwgYC91c3IvYmluL3VuemlwYCkgZHVlXG4gICAgICogdG8gdGhlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGl0IHByb3ZpZGVzIG92ZXIgdGhlIG5hdGl2ZVxuICAgICAqIEpTIFwidW56aXBcIiBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3N1cHBvcnQvbGliL3ppcCcpLkV4dHJhY3RBbGxPcHRpb25zfVxuICAgICAqL1xuICAgIGNvbnN0IGV4dHJhY3Rpb25PcHRzID0ge3VzZVN5c3RlbVVuemlwfTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQxMDBcbiAgICBpZiAocGF0aC5leHRuYW1lKHppcFBhdGgpID09PSBJUEFfRVhUKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEVuZm9yY2luZyBVVEYtOCBlbmNvZGluZyBvbiB0aGUgZXh0cmFjdGVkIGZpbGUgbmFtZXMgZm9yICcke3BhdGguYmFzZW5hbWUoemlwUGF0aCl9J2ApO1xuICAgICAgZXh0cmFjdGlvbk9wdHMuZmlsZU5hbWVzRW5jb2RpbmcgPSAndXRmOCc7XG4gICAgfVxuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oemlwUGF0aCwgdG1wUm9vdCwgZXh0cmFjdGlvbk9wdHMpO1xuICAgIGNvbnN0IGdsb2JQYXR0ZXJuID0gYCoqLyouKygke3N1cHBvcnRlZEFwcEV4dGVuc2lvbnMubWFwKChleHQpID0+IGV4dC5yZXBsYWNlKC9eXFwuLywgJycpKS5qb2luKCd8Jyl9KWA7XG4gICAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgICAgY3dkOiB0bXBSb290LFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAvLyBHZXQgdGhlIHRvcCBsZXZlbCBtYXRjaFxuICAgIH0pKS5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KHBhdGguc2VwKS5sZW5ndGggLSBiLnNwbGl0KHBhdGguc2VwKS5sZW5ndGgpO1xuICAgIGlmIChfLmlzRW1wdHkoc29ydGVkQnVuZGxlSXRlbXMpKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQXBwIHVuemlwcGVkIE9LLCBidXQgd2UgY291bGQgbm90IGZpbmQgYW55ICcke3N1cHBvcnRlZEFwcEV4dGVuc2lvbnN9JyBgICtcbiAgICAgICAgdXRpbC5wbHVyYWxpemUoJ2J1bmRsZScsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMubGVuZ3RoLCBmYWxzZSkgK1xuICAgICAgICBgIGluIGl0LiBNYWtlIHN1cmUgeW91ciBhcmNoaXZlIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBwYWNrYWdlIGhhdmluZyBgICtcbiAgICAgICAgYCcke3N1cHBvcnRlZEFwcEV4dGVuc2lvbnN9JyAke3V0aWwucGx1cmFsaXplKCdleHRlbnNpb24nLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpfWApO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYEV4dHJhY3RlZCAke3V0aWwucGx1cmFsaXplKCdidW5kbGUgaXRlbScsIHNvcnRlZEJ1bmRsZUl0ZW1zLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGZyb20gJyR7emlwUGF0aH0nIGluICR7TWF0aC5yb3VuZCh0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzKX1tczogJHtzb3J0ZWRCdW5kbGVJdGVtc31gKTtcbiAgICBjb25zdCBtYXRjaGVkQnVuZGxlID0gXy5maXJzdChzb3J0ZWRCdW5kbGVJdGVtcyk7XG4gICAgbG9nZ2VyLmluZm8oYEFzc3VtaW5nICcke21hdGNoZWRCdW5kbGV9JyBpcyB0aGUgY29ycmVjdCBidW5kbGVgKTtcbiAgICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRzdFJvb3QsIHBhdGguYmFzZW5hbWUobWF0Y2hlZEJ1bmRsZSkpO1xuICAgIGF3YWl0IGZzLm12KHBhdGgucmVzb2x2ZSh0bXBSb290LCBtYXRjaGVkQnVuZGxlKSwgZHN0UGF0aCwge21rZGlycDogdHJ1ZX0pO1xuICAgIHJldHVybiBkc3RQYXRoO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gIHJldHVybiAoL14oW2EtekEtWjAtOVxcLV9dK1xcLlthLXpBLVowLTlcXC1fXSspKyQvKS50ZXN0KGFwcCk7XG59XG5cbi8qKlxuICogRmluZHMgYWxsIGluc3RhbmNlcyAnZmlyc3RLZXknIGFuZCBjcmVhdGUgYSBkdXBsaWNhdGUgd2l0aCB0aGUga2V5ICdzZWNvbmRLZXknLFxuICogRG8gdGhlIHNhbWUgdGhpbmcgaW4gcmV2ZXJzZS4gSWYgd2UgZmluZCAnc2Vjb25kS2V5JywgY3JlYXRlIGEgZHVwbGljYXRlIHdpdGggdGhlIGtleSAnZmlyc3RLZXknLlxuICpcbiAqIFRoaXMgd2lsbCBjYXVzZSBrZXlzIHRvIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBvYmplY3QgY29udGFpbnMgJ2ZpcnN0S2V5JyBhbmQgJ3NlY29uZEtleScuXG5cbiAqIEBwYXJhbSB7Kn0gaW5wdXQgQW55IHR5cGUgb2YgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaXJzdEtleSBUaGUgZmlyc3Qga2V5IHRvIGR1cGxpY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHNlY29uZEtleSBUaGUgc2Vjb25kIGtleSB0byBkdXBsaWNhdGVcbiAqL1xuZnVuY3Rpb24gZHVwbGljYXRlS2V5cyAoaW5wdXQsIGZpcnN0S2V5LCBzZWNvbmRLZXkpIHtcbiAgLy8gSWYgYXJyYXkgcHJvdmlkZWQsIHJlY3Vyc2l2ZWx5IGNhbGwgb24gYWxsIGVsZW1lbnRzXG4gIGlmIChfLmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCgoaXRlbSkgPT4gZHVwbGljYXRlS2V5cyhpdGVtLCBmaXJzdEtleSwgc2Vjb25kS2V5KSk7XG4gIH1cblxuICAvLyBJZiBvYmplY3QsIGNyZWF0ZSBkdXBsaWNhdGVzIGZvciBrZXlzIGFuZCB0aGVuIHJlY3Vyc2l2ZWx5IGNhbGwgb24gdmFsdWVzXG4gIGlmIChfLmlzUGxhaW5PYmplY3QoaW5wdXQpKSB7XG4gICAgY29uc3QgcmVzdWx0T2JqID0ge307XG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhpbnB1dCkpIHtcbiAgICAgIGNvbnN0IHJlY3Vyc2l2ZWx5Q2FsbGVkVmFsdWUgPSBkdXBsaWNhdGVLZXlzKHZhbHVlLCBmaXJzdEtleSwgc2Vjb25kS2V5KTtcbiAgICAgIGlmIChrZXkgPT09IGZpcnN0S2V5KSB7XG4gICAgICAgIHJlc3VsdE9ialtzZWNvbmRLZXldID0gcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBzZWNvbmRLZXkpIHtcbiAgICAgICAgcmVzdWx0T2JqW2ZpcnN0S2V5XSA9IHJlY3Vyc2l2ZWx5Q2FsbGVkVmFsdWU7XG4gICAgICB9XG4gICAgICByZXN1bHRPYmpba2V5XSA9IHJlY3Vyc2l2ZWx5Q2FsbGVkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRPYmo7XG4gIH1cblxuICAvLyBCYXNlIGNhc2UuIFJldHVybiBwcmltaXRpdmVzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PFN0cmluZz59IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICovXG5mdW5jdGlvbiBwYXJzZUNhcHNBcnJheSAoY2FwKSB7XG4gIGlmIChfLmlzQXJyYXkoY2FwKSkge1xuICAgIHJldHVybiBjYXA7XG4gIH1cblxuICBsZXQgcGFyc2VkQ2FwcztcbiAgdHJ5IHtcbiAgICBwYXJzZWRDYXBzID0gSlNPTi5wYXJzZShjYXApO1xuICAgIGlmIChfLmlzQXJyYXkocGFyc2VkQ2FwcykpIHtcbiAgICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBjYXBhYmlsaXR5IGFzIEpTT04gYXJyYXlgKTtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhjYXApKSB7XG4gICAgcmV0dXJuIFtjYXBdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufVxuXG5leHBvcnQge1xuICBjb25maWd1cmVBcHAsIGlzUGFja2FnZU9yQnVuZGxlLCBkdXBsaWNhdGVLZXlzLCBwYXJzZUNhcHNBcnJheVxufTtcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
540
|
+
var _default = {
|
|
541
|
+
configureApp,
|
|
542
|
+
isPackageOrBundle,
|
|
543
|
+
duplicateKeys,
|
|
544
|
+
parseCapsArray,
|
|
545
|
+
generateDriverLogPrefix
|
|
546
|
+
};
|
|
547
|
+
exports.default = _default;
|
|
548
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiSVBBX0VYVCIsIlpJUF9FWFRTIiwiWklQX01JTUVfVFlQRVMiLCJDQUNIRURfQVBQU19NQVhfQUdFIiwiTUFYX0NBQ0hFRF9BUFBTIiwiQVBQTElDQVRJT05TX0NBQ0hFIiwiTFJVIiwibWF4IiwidHRsIiwidXBkYXRlQWdlT25HZXQiLCJkaXNwb3NlIiwiYXBwIiwiZnVsbFBhdGgiLCJsb2dnZXIiLCJpbmZvIiwiZnMiLCJyaW1yYWYiLCJub0Rpc3Bvc2VPblNldCIsIkFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlNBTklUSVpFX1JFUExBQ0VNRU5UIiwiREVGQVVMVF9CQVNFTkFNRSIsIkFQUF9ET1dOTE9BRF9USU1FT1VUX01TIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsImFwcFBhdGhzIiwidmFsdWVzIiwibWFwIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJyZXRyaWV2ZUhlYWRlcnMiLCJsaW5rIiwidXJsIiwibWV0aG9kIiwidGltZW91dCIsImhlYWRlcnMiLCJnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgiLCJjdXJyZW50QXBwUHJvcHMiLCJjYWNoZWRBcHBJbmZvIiwicmVmcmVzaCIsIl8iLCJpc1BsYWluT2JqZWN0IiwibGFzdE1vZGlmaWVkIiwiY3VycmVudE1vZGlmaWVkIiwiaW1tdXRhYmxlIiwiY3VycmVudEltbXV0YWJsZSIsIm1heEFnZSIsImN1cnJlbnRNYXhBZ2UiLCJ0aW1lc3RhbXAiLCJnZXRUaW1lIiwibXNMZWZ0IiwiRGF0ZSIsIm5vdyIsInBhdGgiLCJiYXNlbmFtZSIsInZlcmlmeUFwcEV4dGVuc2lvbiIsInN1cHBvcnRlZEFwcEV4dGVuc2lvbnMiLCJ0b0xvd2VyIiwiaW5jbHVkZXMiLCJleHRuYW1lIiwiRXJyb3IiLCJjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkiLCJmb2xkZXJQYXRoIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkiLCJmaWxlUGF0aCIsImhhc2giLCJpc0FwcEludGVncml0eU9rIiwiY3VycmVudFBhdGgiLCJleHBlY3RlZEludGVncml0eSIsImV4aXN0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImZvbGRlciIsImZpbGUiLCJjb25maWd1cmVBcHAiLCJvcHRpb25zIiwiaXNTdHJpbmciLCJvblBvc3RQcm9jZXNzIiwiaXNBcnJheSIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpc0VtcHR5IiwibmV3QXBwIiwic2hvdWxkVW56aXBBcHAiLCJwYWNrYWdlSGFzaCIsInJlbW90ZUFwcFByb3BzIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsInBhcnNlIiwiaXNVcmwiLCJnZXQiLCJhY3F1aXJlIiwidGVzdCIsIm1heEFnZU1hdGNoIiwiZXhlYyIsInBhcnNlSW50IiwiY2FjaGVkUGF0aCIsImludGVncml0eSIsImRlbCIsImZpbGVOYW1lIiwic2FuaXRpemVOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZW1lbnQiLCJjdCIsInNvbWUiLCJtaW1lVHlwZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwicmVzdWx0aW5nTmFtZSIsInN1YnN0cmluZyIsInJlc3VsdGluZ0V4dCIsImZpcnN0IiwidGFyZ2V0UGF0aCIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJkb3dubG9hZEFwcCIsImVycm9yTWVzc2FnZSIsImlzUGFja2FnZUFGaWxlIiwiaXNGaWxlIiwiaXNGdW5jdGlvbiIsImFyY2hpdmVQYXRoIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ1bnppcEFwcCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwic3RvcmVBcHBJbkNhY2hlIiwiYXBwUGF0aFRvQ2FjaGUiLCJjYWNoZWRGdWxsUGF0aCIsInNldCIsInJlc3VsdCIsImNsb25lIiwiQm9vbGVhbiIsImhyZWYiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJlcnIiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdGlvbk9wdHMiLCJmaWxlTmFtZXNFbmNvZGluZyIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsInNvcnQiLCJhIiwiYiIsInNwbGl0Iiwic2VwIiwiZXJyb3JBbmRUaHJvdyIsIk1hdGgiLCJyb3VuZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJtYXRjaGVkQnVuZGxlIiwiZHN0UGF0aCIsIm12IiwibWtkaXJwIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJkdXBsaWNhdGVLZXlzIiwiaW5wdXQiLCJmaXJzdEtleSIsInNlY29uZEtleSIsIml0ZW0iLCJyZXN1bHRPYmoiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJyZWN1cnNpdmVseUNhbGxlZFZhbHVlIiwicGFyc2VDYXBzQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsImlnbiIsImdlbmVyYXRlRHJpdmVyTG9nUHJlZml4Iiwib2JqIiwic2Vzc2lvbklkIiwiaW5zdGFuY2VOYW1lIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsT0FBTyxHQUFHLE1BQWhCO0FBQ0EsTUFBTUMsUUFBUSxHQUFHLENBQUMsTUFBRCxFQUFTRCxPQUFULENBQWpCO0FBQ0EsTUFBTUUsY0FBYyxHQUFHLENB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LEVBQUFBLFlBRGE7QUFDQ2tHLEVBQUFBLGlCQUREO0FBQ29CQyxFQUFBQSxhQURwQjtBQUNtQ1UsRUFBQUEsY0FEbkM7QUFDbURLLEVBQUFBO0FBRG5ELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHRlbXBEaXIsIGZzLCB1dGlsLCB6aXAsIG5ldCwgdGltaW5nLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuY29uc3QgWklQX0VYVFMgPSBbJy56aXAnLCBJUEFfRVhUXTtcbmNvbnN0IFpJUF9NSU1FX1RZUEVTID0gW1xuICAnYXBwbGljYXRpb24vemlwJyxcbiAgJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnLFxuICAnbXVsdGlwYXJ0L3gtemlwJyxcbl07XG5jb25zdCBDQUNIRURfQVBQU19NQVhfQUdFID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gbXNcbmNvbnN0IE1BWF9DQUNIRURfQVBQUyA9IDEwMjQ7XG5jb25zdCBBUFBMSUNBVElPTlNfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiBNQVhfQ0FDSEVEX0FQUFMsXG4gIHR0bDogQ0FDSEVEX0FQUFNfTUFYX0FHRSwgLy8gZXhwaXJlIGFmdGVyIDI0IGhvdXJzXG4gIHVwZGF0ZUFnZU9uR2V0OiB0cnVlLFxuICBkaXNwb3NlOiAoYXBwLCB7ZnVsbFBhdGh9KSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiAnJHthcHB9JyBjYWNoZWQgYXQgJyR7ZnVsbFBhdGh9JyBoYXMgYCArXG4gICAgICBgZXhwaXJlZCBhZnRlciAke0NBQ0hFRF9BUFBTX01BWF9BR0V9bXNgKTtcbiAgICBpZiAoZnVsbFBhdGgpIHtcbiAgICAgIGZzLnJpbXJhZihmdWxsUGF0aCk7XG4gICAgfVxuICB9LFxuICBub0Rpc3Bvc2VPblNldDogdHJ1ZSxcbn0pO1xuY29uc3QgQVBQTElDQVRJT05TX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgU0FOSVRJWkVfUkVQTEFDRU1FTlQgPSAnLSc7XG5jb25zdCBERUZBVUxUX0JBU0VOQU1FID0gJ2FwcGl1bS1hcHAnO1xuY29uc3QgQVBQX0RPV05MT0FEX1RJTUVPVVRfTVMgPSAxMjAgKiAxMDAwO1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoQVBQTElDQVRJT05TX0NBQ0hFLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhcHBQYXRocyA9IFsuLi5BUFBMSUNBVElPTlNfQ0FDSEUudmFsdWVzKCldXG4gICAgLm1hcCgoe2Z1bGxQYXRofSkgPT4gZnVsbFBhdGgpO1xuICBsb2dnZXIuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke2FwcFBhdGhzLmxlbmd0aH0gY2FjaGVkIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdhcHBsaWNhdGlvbicsIGFwcFBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgYXBwUGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZUhlYWRlcnMgKGxpbmspIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICAgIHVybDogbGluayxcbiAgICAgIG1ldGhvZDogJ0hFQUQnLFxuICAgICAgdGltZW91dDogNTAwMCxcbiAgICB9KSkuaGVhZGVycztcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5pbmZvKGBDYW5ub3Qgc2VuZCBIRUFEIHJlcXVlc3QgdG8gJyR7bGlua30nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGggKGxpbmssIGN1cnJlbnRBcHBQcm9wcyA9IHt9LCBjYWNoZWRBcHBJbmZvID0ge30pIHtcbiAgY29uc3QgcmVmcmVzaCA9ICgpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEEgZnJlc2ggY29weSBvZiB0aGUgYXBwbGljYXRpb24gaXMgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBmcm9tICR7bGlua31gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYWNoZWRBcHBJbmZvKSB8fCAhXy5pc1BsYWluT2JqZWN0KGN1cnJlbnRBcHBQcm9wcykpIHtcbiAgICAvLyBpZiBhbiBpbnZhbGlkIGFyZyBpcyBwYXNzZWQgdGhlbiBhc3N1bWUgY2FjaGUgbWlzc1xuICAgIHJldHVybiByZWZyZXNoKCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGFzdE1vZGlmaWVkOiBjdXJyZW50TW9kaWZpZWQsXG4gICAgaW1tdXRhYmxlOiBjdXJyZW50SW1tdXRhYmxlLFxuICAgIC8vIG1heEFnZSBpcyBpbiBzZWNvbmRzXG4gICAgbWF4QWdlOiBjdXJyZW50TWF4QWdlLFxuICB9ID0gY3VycmVudEFwcFByb3BzO1xuICBjb25zdCB7XG4gICAgLy8gRGF0ZSBpbnN0YW5jZVxuICAgIGxhc3RNb2RpZmllZCxcbiAgICAvLyBib29sZWFuXG4gICAgaW1tdXRhYmxlLFxuICAgIC8vIFVuaXggdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICB0aW1lc3RhbXAsXG4gICAgZnVsbFBhdGgsXG4gIH0gPSBjYWNoZWRBcHBJbmZvO1xuICBpZiAobGFzdE1vZGlmaWVkICYmIGN1cnJlbnRNb2RpZmllZCkge1xuICAgIGlmIChjdXJyZW50TW9kaWZpZWQuZ2V0VGltZSgpIDw9IGxhc3RNb2RpZmllZC5nZXRUaW1lKCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIGFwcGxpY2F0aW9uIGF0ICR7bGlua30gaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlICR7bGFzdE1vZGlmaWVkfWApO1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYFRoZSBhcHBsaWNhdGlvbiBhdCAke2xpbmt9IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlICR7bGFzdE1vZGlmaWVkfWApO1xuICAgIHJldHVybiByZWZyZXNoKCk7XG4gIH1cbiAgaWYgKGltbXV0YWJsZSAmJiBjdXJyZW50SW1tdXRhYmxlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgYXBwbGljYXRpb24gYXQgJHtsaW5rfSBpcyBpbW11dGFibGVgKTtcbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbiAgaWYgKGN1cnJlbnRNYXhBZ2UgJiYgdGltZXN0YW1wKSB7XG4gICAgY29uc3QgbXNMZWZ0ID0gdGltZXN0YW1wICsgY3VycmVudE1heEFnZSAqIDEwMDAgLSBEYXRlLm5vdygpO1xuICAgIGlmIChtc0xlZnQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFRoZSBjYWNoZWQgYXBwbGljYXRpb24gJyR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9JyB3aWxsIGV4cGlyZSBpbiAke21zTGVmdCAvIDEwMDB9c2ApO1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYFRoZSBjYWNoZWQgYXBwbGljYXRpb24gJyR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9JyBoYXMgZXhwaXJlZGApO1xuICB9XG4gIHJldHVybiByZWZyZXNoKCk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFwcEV4dGVuc2lvbiAoYXBwLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSB7XG4gIGlmIChzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLm1hcChfLnRvTG93ZXIpLmluY2x1ZGVzKF8udG9Mb3dlcihwYXRoLmV4dG5hbWUoYXBwKSkpKSB7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYE5ldyBhcHAgcGF0aCAnJHthcHB9JyBkaWQgbm90IGhhdmUgYCArXG4gICAgYCR7dXRpbC5wbHVyYWxpemUoJ2V4dGVuc2lvbicsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMubGVuZ3RoLCBmYWxzZSl9OiBgICtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5IChmb2xkZXJQYXRoKSB7XG4gIHJldHVybiAoYXdhaXQgZnMuZ2xvYignKiovKicsIHtjd2Q6IGZvbGRlclBhdGgsIHN0cmljdDogZmFsc2UsIG5vc29ydDogdHJ1ZX0pKS5sZW5ndGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkgKGZpbGVQYXRoKSB7XG4gIHJldHVybiBhd2FpdCBmcy5oYXNoKGZpbGVQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnRlZ3JpdHlPayAoY3VycmVudFBhdGgsIGV4cGVjdGVkSW50ZWdyaXR5ID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoY3VycmVudFBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRm9sZGVyIGludGVncml0eSBjaGVjayBpcyBzaW1wbGU6XG4gIC8vIFZlcmlmeSB0aGUgcHJldmlvdXMgYW1vdW50IG9mIGZpbGVzIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBlcXVhbGl0eSBjb21wYXJpc29uIGJlY2F1c2Ugb2YgYW4gYXNzdW1wdGlvbiB0aGF0IHRoZSBPUyBtaWdodFxuICAvLyBjcmVhdGUgc29tZSB1bndhbnRlZCBzZXJ2aWNlIGZpbGVzL2NhY2hlZCBpbnNpZGUgb2YgdGhhdCBmb2xkZXIgb3IgaXRzIHN1YmZvbGRlcnMuXG4gIC8vIE9mYywgdmFsaWRhdGluZyB0aGUgaGFzaCBzdW0gb2YgZWFjaCBmaWxlIChvciBhdCBsZWFzdCBvZiBmaWxlIHBhdGgpIHdvdWxkIGJlIG11Y2hcbiAgLy8gbW9yZSBwcmVjaXNlLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBiZSB2ZXJ5IHByZWNpc2UgaGVyZSBhbmQgYWxzbyBkb24ndCB3YW50IHRvXG4gIC8vIG92ZXJ1c2UgUkFNIGFuZCBoYXZlIGEgcGVyZm9ybWFuY2UgZHJvcC5cbiAgcmV0dXJuIChhd2FpdCBmcy5zdGF0KGN1cnJlbnRQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgID8gYXdhaXQgY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5KGN1cnJlbnRQYXRoKSA+PSBleHBlY3RlZEludGVncml0eT8uZm9sZGVyXG4gICAgOiBhd2FpdCBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5KGN1cnJlbnRQYXRoKSA9PT0gZXhwZWN0ZWRJbnRlZ3JpdHk/LmZpbGU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUG9zdFByb2Nlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGNhY2hlZEFwcEluZm8gVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91c2x5IGNhY2hlZCBhcHAgaW5zdGFuY2UgKGlmIGV4aXN0cyk6XG4gKiAgICAtIHBhY2thZ2VIYXNoOiBTSEExIGhhc2ggb2YgdGhlIHBhY2thZ2UgaWYgaXQgaXMgYSBmaWxlIGFuZCBub3QgYSBmb2xkZXJcbiAqICAgIC0gbGFzdE1vZGlmaWVkOiBPcHRpb25hbCBEYXRlIGluc3RhbmNlLCB0aGUgdmFsdWUgb2YgZmlsZSdzIGBMYXN0LU1vZGlmaWVkYCBoZWFkZXJcbiAqICAgIC0gaW1tdXRhYmxlOiBPcHRpb25hbCBib29sZWFuIHZhbHVlLiBDb250YWlucyB0cnVlIGlmIHRoZSBmaWxlIGhhcyBhbiBgaW1tdXRhYmxlYCBtYXJrXG4gKiAgICAgICAgICAgICAgICAgaW4gYENhY2hlLWNvbnRyb2xgIGhlYWRlclxuICogICAgLSBtYXhBZ2U6IE9wdGlvbmFsIGludGVnZXIgcmVwcmVzZW50YXRpb24gb2YgYG1heEFnZWAgcGFyYW1ldGVyIGluIGBDYWNoZS1jb250cm9sYCBoZWFkZXJcbiAqICAgIC0gdGltZXN0YW1wOiBUaGUgdGltZXN0YW1wIHRoaXMgaXRlbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUgKG1lYXN1cmVkIGluIFVuaXggZXBvY2hcbiAqICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMpXG4gKiAgICAtIGludGVncml0eTogQW4gb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIGBmaWxlYCBwcm9wZXJ0eSB3aXRoIFNIQTEgaGFzaCBvZiB0aGUgZmlsZVxuICogICAgICAgICAgICAgICAgIG9yIGBmb2xkZXJgIHByb3BlcnR5IHdpdGggdG90YWwgYW1vdW50IG9mIGNhY2hlZCBmaWxlcyBhbmQgc3ViZm9sZGVyc1xuICogICAgLSBmdWxsUGF0aDogdGhlIGZ1bGwgcGF0aCB0byB0aGUgY2FjaGVkIGFwcFxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1VybCBXaGV0aGVyIHRoZSBhcHAgaGFzIGJlZW4gZG93bmxvYWRlZCBmcm9tIGEgcmVtb3RlIFVSTFxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBoZWFkZXJzIE9wdGlvbmFsIGhlYWRlcnMgb2JqZWN0LiBPbmx5IHByZXNlbnQgaWYgYGlzVXJsYCBpcyB0cnVlIGFuZCBpZiB0aGUgc2VydmVyXG4gKiByZXNwb25kcyB0byBIRUFEIHJlcXVlc3RzLiBBbGwgaGVhZGVyIG5hbWVzIGFyZSBub3JtYWxpemVkIHRvIGxvd2VyY2FzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIEEgc3RyaW5nIGNvbnRhaW5pbmcgZnVsbCBwYXRoIHRvIHRoZSBwcmVwcm9jZXNzZWQgYXBwbGljYXRpb24gcGFja2FnZSAoZWl0aGVyXG4gKiBkb3dubG9hZGVkIG9yIGEgbG9jYWwgb25lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUG9zdFByb2Nlc3NSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBmdWxsIHBhc3QgdG8gdGhlIHBvc3QtcHJvY2Vzc2VkIGFwcGxpY2F0aW9uIHBhY2thZ2Ugb24gdGhlXG4gKiBsb2NhbCBmaWxlIHN5c3RlbSAobWlnaHQgYmUgYSBmaWxlIG9yIGEgZm9sZGVyIHBhdGgpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBDb25maWd1cmVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyhvYmo6IFBvc3RQcm9jZXNzT3B0aW9ucykgPT4gKFByb21pc2U8UG9zdFByb2Nlc3NSZXN1bHR8dW5kZWZpbmVkPnxQb3N0UHJvY2Vzc1Jlc3VsdHx1bmRlZmluZWQpfSBvblBvc3RQcm9jZXNzXG4gKiBPcHRpb25hbCBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWRcbiAqIHRvIHRoZSBhcHBsaWNhdGlvbiBhZnRlciBpdCBpcyBkb3dubG9hZGVkL3ByZXByb2Nlc3NlZC4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgYXN5bmNcbiAqIGFuZCBpcyBleHBlY3RlZCB0byBhY2NlcHQgc2luZ2xlIG9iamVjdCBwYXJhbWV0ZXIuXG4gKiBUaGUgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gZWl0aGVyIHJldHVybiBhIGZhbHN5IHZhbHVlLCB3aGljaCBtZWFucyB0aGUgYXBwIG11c3Qgbm90IGJlXG4gKiBjYWNoZWQgYW5kIGEgZnJlc2ggY29weSBvZiBpdCBpcyBkb3dubG9hZGVkIGVhY2ggdGltZS4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdFxuICogY29udGFpbmluZyBgYXBwUGF0aGAgcHJvcGVydHkgdGhlbiB0aGUgaW50ZWdyaXR5IG9mIGl0IHdpbGwgYmUgdmVyaWZpZWQgYW5kIHN0b3JlZCBpbnRvXG4gKiB0aGUgY2FjaGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBzdXBwb3J0ZWRFeHRlbnNpb25zIExpc3Qgb2Ygc3VwcG9ydGVkIGFwcGxpY2F0aW9uIGV4dGVuc2lvbnMgKFxuICogaW5jbHVkaW5nIHN0YXJ0aW5nIGRvdHMpLiBUaGlzIHByb3BlcnR5IGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBub3QgYmUgZW1wdHkuXG4gKi9cblxuLyoqXG4gKiBQcmVwYXJlcyBhbiBhcHAgdG8gYmUgdXNlZCBpbiBhbiBhdXRvbWF0ZWQgdGVzdC4gVGhlIGFwcCBnZXRzIGNhY2hlZCBhdXRvbWF0aWNhbGx5XG4gKiBpZiBpdCBpcyBhbiBhcmNoaXZlIG9yIGlmIGl0IGlzIGRvd25sb2FkZWQgZnJvbSBhbiBVUkwuXG4gKiBJZiB0aGUgZG93bmxvYWRlZCBhcHAgaGFzIGAuemlwYCBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHdpbGwgdW56aXAgaXQuXG4gKiBUaGUgdW56aXAgZG9lcyBub3Qgd29yayB3aGVuIGBvblBvc3RQcm9jZXNzYCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwIEVpdGhlciBhIGZ1bGwgcGF0aCB0byB0aGUgYXBwIG9yIGEgcmVtb3RlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW118Q29uZmlndXJlQXBwT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25maWd1cmVBcHAgKGFwcCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghXy5pc1N0cmluZyhhcHApKSB7XG4gICAgLy8gaW1tZWRpYXRlbHkgc2hvcnRjaXJjdWl0IGlmIG5vdCBnaXZlbiBhbiBhcHBcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucztcbiAgY29uc3Qge1xuICAgIG9uUG9zdFByb2Nlc3MsXG4gIH0gPSBfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykgPyBvcHRpb25zIDoge307XG4gIGlmIChfLmlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IFtvcHRpb25zXTtcbiAgfSBlbHNlIGlmIChfLmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gb3B0aW9ucy5zdXBwb3J0ZWRFeHRlbnNpb25zO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9uZSBvciBtb3JlIHN1cHBvcnRlZCBhcHAgZXh0ZW5zaW9ucyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cblxuICBsZXQgbmV3QXBwID0gYXBwO1xuICBsZXQgc2hvdWxkVW56aXBBcHAgPSBmYWxzZTtcbiAgbGV0IHBhY2thZ2VIYXNoID0gbnVsbDtcbiAgbGV0IGhlYWRlcnMgPSBudWxsO1xuICBjb25zdCByZW1vdGVBcHBQcm9wcyA9IHtcbiAgICBsYXN0TW9kaWZpZWQ6IG51bGwsXG4gICAgaW1tdXRhYmxlOiBmYWxzZSxcbiAgICBtYXhBZ2U6IG51bGwsXG4gIH07XG4gIGNvbnN0IHtwcm90b2NvbCwgcGF0aG5hbWV9ID0gdXJsLnBhcnNlKG5ld0FwcCk7XG4gIGNvbnN0IGlzVXJsID0gWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyhwcm90b2NvbCk7XG5cbiAgY29uc3QgY2FjaGVkQXBwSW5mbyA9IEFQUExJQ0FUSU9OU19DQUNIRS5nZXQoYXBwKTtcblxuICByZXR1cm4gYXdhaXQgQVBQTElDQVRJT05TX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBwLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzVXJsKSB7XG4gICAgICAvLyBVc2UgdGhlIGFwcCBmcm9tIHJlbW90ZSBVUkxcbiAgICAgIGxvZ2dlci5pbmZvKGBVc2luZyBkb3dubG9hZGFibGUgYXBwICcke25ld0FwcH0nYCk7XG4gICAgICBoZWFkZXJzID0gYXdhaXQgcmV0cmlldmVIZWFkZXJzKG5ld0FwcCk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShoZWFkZXJzKSkge1xuICAgICAgICBpZiAoaGVhZGVyc1snbGFzdC1tb2RpZmllZCddKSB7XG4gICAgICAgICAgcmVtb3RlQXBwUHJvcHMubGFzdE1vZGlmaWVkID0gbmV3IERhdGUoaGVhZGVyc1snbGFzdC1tb2RpZmllZCddKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuZGVidWcoYExhc3QtTW9kaWZpZWQ6ICR7aGVhZGVyc1snbGFzdC1tb2RpZmllZCddfWApO1xuICAgICAgICBpZiAoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgICAgICAgcmVtb3RlQXBwUHJvcHMuaW1tdXRhYmxlID0gL1xcYmltbXV0YWJsZVxcYi9pLnRlc3QoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKTtcbiAgICAgICAgICBjb25zdCBtYXhBZ2VNYXRjaCA9IC9cXGJtYXgtYWdlPShcXGQrKVxcYi9pLmV4ZWMoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKTtcbiAgICAgICAgICBpZiAobWF4QWdlTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlbW90ZUFwcFByb3BzLm1heEFnZSA9IHBhcnNlSW50KG1heEFnZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUtQ29udHJvbDogJHtoZWFkZXJzWydjYWNoZS1jb250cm9sJ119YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXBwbGljYXRpb25QYXRoKGFwcCwgcmVtb3RlQXBwUHJvcHMsIGNhY2hlZEFwcEluZm8pO1xuICAgICAgaWYgKGNhY2hlZFBhdGgpIHtcbiAgICAgICAgaWYgKGF3YWl0IGlzQXBwSW50ZWdyaXR5T2soY2FjaGVkUGF0aCwgY2FjaGVkQXBwSW5mbz8uaW50ZWdyaXR5KSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBSZXVzaW5nIHByZXZpb3VzbHkgZG93bmxvYWRlZCBhcHBsaWNhdGlvbiBhdCAnJHtjYWNoZWRQYXRofSdgKTtcbiAgICAgICAgICByZXR1cm4gdmVyaWZ5QXBwRXh0ZW5zaW9uKGNhY2hlZFBhdGgsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7Y2FjaGVkUGF0aH0nIGRvZXMgbm90IGV4aXN0IGFueW1vcmUgYCArXG4gICAgICAgICAgYG9yIGl0cyBpbnRlZ3JpdHkgaGFzIGJlZW4gZGFtYWdlZC4gRGVsZXRpbmcgaXQgZnJvbSB0aGUgaW50ZXJuYWwgY2FjaGVgKTtcbiAgICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLmRlbChhcHApO1xuICAgICAgfVxuXG4gICAgICBsZXQgZmlsZU5hbWUgPSBudWxsO1xuICAgICAgY29uc3QgYmFzZW5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUocGF0aC5iYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQocGF0aG5hbWUpKSwge1xuICAgICAgICByZXBsYWNlbWVudDogU0FOSVRJWkVfUkVQTEFDRU1FTlRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0bmFtZSA9IHBhdGguZXh0bmFtZShiYXNlbmFtZSk7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byB1bnppcCB0aGUgYXBwLCB3ZSBoYXZlIGEgbnVtYmVyIG9mIHBsYWNlc1xuICAgICAgLy8gdG8gbG9vazogY29udGVudCB0eXBlLCBjb250ZW50IGRpc3Bvc2l0aW9uLCBvciB0aGUgZmlsZSBleHRlbnNpb25cbiAgICAgIGlmIChaSVBfRVhUUy5pbmNsdWRlcyhleHRuYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lO1xuICAgICAgICBzaG91bGRVbnppcEFwcCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgY29uc3QgY3QgPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb250ZW50LVR5cGU6ICR7Y3R9YCk7XG4gICAgICAgIC8vIHRoZSBmaWxldHlwZSBtYXkgbm90IGJlIG9idmlvdXMgZm9yIGNlcnRhaW4gdXJscywgc28gY2hlY2sgdGhlIG1pbWUgdHlwZSB0b29cbiAgICAgICAgaWYgKFpJUF9NSU1FX1RZUEVTLnNvbWUoKG1pbWVUeXBlKSA9PiBuZXcgUmVnRXhwKGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAobWltZVR5cGUpfVxcXFxiYCkudGVzdChjdCkpKSB7XG4gICAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBgJHtERUZBVUxUX0JBU0VOQU1FfS56aXBgO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzaG91bGRVbnppcEFwcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10gJiYgL15hdHRhY2htZW50L2kudGVzdChoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudC1EaXNwb3NpdGlvbjogJHtoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ119YCk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL2ZpbGVuYW1lPVwiKFteXCJdKykvaS5leGVjKGhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGZpbGVOYW1lID0gZnMuc2FuaXRpemVOYW1lKG1hdGNoWzFdLCB7XG4gICAgICAgICAgICByZXBsYWNlbWVudDogU0FOSVRJWkVfUkVQTEFDRU1FTlRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaG91bGRVbnppcEFwcCA9IHNob3VsZFVuemlwQXBwIHx8IFpJUF9FWFRTLmluY2x1ZGVzKHBhdGguZXh0bmFtZShmaWxlTmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGVmYXVsdCBmaWxlIG5hbWUgYW5kIHRoZSBleHRlbnNpb24gaWYgbm9uZSBoYXMgYmVlbiBkZXRlY3RlZFxuICAgICAgICBjb25zdCByZXN1bHRpbmdOYW1lID0gYmFzZW5hbWVcbiAgICAgICAgICA/IGJhc2VuYW1lLnN1YnN0cmluZygwLCBiYXNlbmFtZS5sZW5ndGggLSBleHRuYW1lLmxlbmd0aClcbiAgICAgICAgICA6IERFRkFVTFRfQkFTRU5BTUU7XG4gICAgICAgIGxldCByZXN1bHRpbmdFeHQgPSBleHRuYW1lO1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEFwcEV4dGVuc2lvbnMuaW5jbHVkZXMocmVzdWx0aW5nRXh0KSkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBmaWxlIGV4dGVuc2lvbiAnJHtyZXN1bHRpbmdFeHR9JyBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgICAgICAgIGBEZWZhdWx0aW5nIHRvICcke18uZmlyc3Qoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyl9J2ApO1xuICAgICAgICAgIHJlc3VsdGluZ0V4dCA9IF8uZmlyc3Qoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZU5hbWUgPSBgJHtyZXN1bHRpbmdOYW1lfSR7cmVzdWx0aW5nRXh0fWA7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICAgICAgcHJlZml4OiBmaWxlTmFtZSxcbiAgICAgICAgc3VmZml4OiAnJyxcbiAgICAgIH0pO1xuICAgICAgbmV3QXBwID0gYXdhaXQgZG93bmxvYWRBcHAobmV3QXBwLCB0YXJnZXRQYXRoKTtcbiAgICB9IGVsc2UgaWYgKGF3YWl0IGZzLmV4aXN0cyhuZXdBcHApKSB7XG4gICAgICAvLyBVc2UgdGhlIGxvY2FsIGFwcFxuICAgICAgbG9nZ2VyLmluZm8oYFVzaW5nIGxvY2FsIGFwcCAnJHtuZXdBcHB9J2ApO1xuICAgICAgc2hvdWxkVW56aXBBcHAgPSBaSVBfRVhUUy5pbmNsdWRlcyhwYXRoLmV4dG5hbWUobmV3QXBwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgVGhlIGFwcGxpY2F0aW9uIGF0ICcke25ld0FwcH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYDtcbiAgICAgIC8vIHByb3RvY29sIHZhbHVlIGZvciAnQzpcXFxcdGVtcCcgaXMgJ2M6Jywgc28gd2UgY2hlY2sgdGhlIGxlbmd0aCBhcyB3ZWxsXG4gICAgICBpZiAoXy5pc1N0cmluZyhwcm90b2NvbCkgJiYgcHJvdG9jb2wubGVuZ3RoID4gMikge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgVGhlIHByb3RvY29sICcke3Byb3RvY29sfScgdXNlZCBpbiAnJHtuZXdBcHB9JyBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgICAgICBgT25seSBodHRwOiBhbmQgaHR0cHM6IHByb3RvY29scyBhcmUgc3VwcG9ydGVkYDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzUGFja2FnZUFGaWxlID0gKGF3YWl0IGZzLnN0YXQobmV3QXBwKSkuaXNGaWxlKCk7XG4gICAgaWYgKGlzUGFja2FnZUFGaWxlKSB7XG4gICAgICBwYWNrYWdlSGFzaCA9IGF3YWl0IGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkobmV3QXBwKTtcbiAgICB9XG5cbiAgICBpZiAoaXNQYWNrYWdlQUZpbGUgJiYgc2hvdWxkVW56aXBBcHAgJiYgIV8uaXNGdW5jdGlvbihvblBvc3RQcm9jZXNzKSkge1xuICAgICAgY29uc3QgYXJjaGl2ZVBhdGggPSBuZXdBcHA7XG4gICAgICBpZiAocGFja2FnZUhhc2ggPT09IGNhY2hlZEFwcEluZm8/LnBhY2thZ2VIYXNoKSB7XG4gICAgICAgIGNvbnN0IHtmdWxsUGF0aH0gPSBjYWNoZWRBcHBJbmZvO1xuICAgICAgICBpZiAoYXdhaXQgaXNBcHBJbnRlZ3JpdHlPayhmdWxsUGF0aCwgY2FjaGVkQXBwSW5mbz8uaW50ZWdyaXR5KSkge1xuICAgICAgICAgIGlmIChhcmNoaXZlUGF0aCAhPT0gYXBwKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZVBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIuaW5mbyhgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBhcHBsaWNhdGlvbiBhdCAnJHtmdWxsUGF0aH0nYCk7XG4gICAgICAgICAgcmV0dXJuIHZlcmlmeUFwcEV4dGVuc2lvbihmdWxsUGF0aCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmluZm8oYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtmdWxsUGF0aH0nIGRvZXMgbm90IGV4aXN0IGFueW1vcmUgYCArXG4gICAgICAgICAgYG9yIGl0cyBpbnRlZ3JpdHkgaGFzIGJlZW4gZGFtYWdlZC4gRGVsZXRpbmcgaXQgZnJvbSB0aGUgY2FjaGVgKTtcbiAgICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLmRlbChhcHApO1xuICAgICAgfVxuICAgICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3QXBwID0gYXdhaXQgdW56aXBBcHAoYXJjaGl2ZVBhdGgsIHRtcFJvb3QsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG5ld0FwcCAhPT0gYXJjaGl2ZVBhdGggJiYgYXJjaGl2ZVBhdGggIT09IGFwcCkge1xuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcmNoaXZlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5pbmZvKGBVbnppcHBlZCBsb2NhbCBhcHAgdG8gJyR7bmV3QXBwfSdgKTtcbiAgICB9IGVsc2UgaWYgKCFwYXRoLmlzQWJzb2x1dGUobmV3QXBwKSkge1xuICAgICAgbmV3QXBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIG5ld0FwcCk7XG4gICAgICBsb2dnZXIud2FybihgVGhlIGN1cnJlbnQgYXBwbGljYXRpb24gcGF0aCAnJHthcHB9JyBpcyBub3QgYWJzb2x1dGUgYCArXG4gICAgICAgIGBhbmQgaGFzIGJlZW4gcmV3cml0dGVuIHRvICcke25ld0FwcH0nLiBDb25zaWRlciB1c2luZyBhYnNvbHV0ZSBwYXRocyByYXRoZXIgdGhhbiByZWxhdGl2ZWApO1xuICAgICAgYXBwID0gbmV3QXBwO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlQXBwSW5DYWNoZSA9IGFzeW5jIChhcHBQYXRoVG9DYWNoZSkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkRnVsbFBhdGggPSBjYWNoZWRBcHBJbmZvPy5mdWxsUGF0aDtcbiAgICAgIGlmIChjYWNoZWRGdWxsUGF0aCAmJiBjYWNoZWRGdWxsUGF0aCAhPT0gYXBwUGF0aFRvQ2FjaGUpIHtcbiAgICAgICAgYXdhaXQgZnMucmltcmFmKGNhY2hlZEZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGludGVncml0eSA9IHt9O1xuICAgICAgaWYgKChhd2FpdCBmcy5zdGF0KGFwcFBhdGhUb0NhY2hlKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpbnRlZ3JpdHkuZm9sZGVyID0gYXdhaXQgY2FsY3VsYXRlRm9sZGVySW50ZWdyaXR5KGFwcFBhdGhUb0NhY2hlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncml0eS5maWxlID0gYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShhcHBQYXRoVG9DYWNoZSk7XG4gICAgICB9XG4gICAgICBBUFBMSUNBVElPTlNfQ0FDSEUuc2V0KGFwcCwge1xuICAgICAgICAuLi5yZW1vdGVBcHBQcm9wcyxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBwYWNrYWdlSGFzaCxcbiAgICAgICAgaW50ZWdyaXR5LFxuICAgICAgICBmdWxsUGF0aDogYXBwUGF0aFRvQ2FjaGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBQYXRoVG9DYWNoZTtcbiAgICB9O1xuXG4gICAgaWYgKF8uaXNGdW5jdGlvbihvblBvc3RQcm9jZXNzKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb25Qb3N0UHJvY2Vzcyh7XG4gICAgICAgIGNhY2hlZEFwcEluZm86IF8uY2xvbmUoY2FjaGVkQXBwSW5mbyksXG4gICAgICAgIGlzVXJsLFxuICAgICAgICBoZWFkZXJzOiBfLmNsb25lKGhlYWRlcnMpLFxuICAgICAgICBhcHBQYXRoOiBuZXdBcHAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoIXJlc3VsdD8uYXBwUGF0aCB8fCBhcHAgPT09IHJlc3VsdD8uYXBwUGF0aCB8fCAhYXdhaXQgZnMuZXhpc3RzKHJlc3VsdD8uYXBwUGF0aCkpXG4gICAgICAgID8gbmV3QXBwXG4gICAgICAgIDogYXdhaXQgc3RvcmVBcHBJbkNhY2hlKHJlc3VsdC5hcHBQYXRoKTtcbiAgICB9XG5cbiAgICB2ZXJpZnlBcHBFeHRlbnNpb24obmV3QXBwLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICByZXR1cm4gKGFwcCAhPT0gbmV3QXBwICYmIChwYWNrYWdlSGFzaCB8fCBfLnZhbHVlcyhyZW1vdGVBcHBQcm9wcykuc29tZShCb29sZWFuKSkpXG4gICAgICA/IGF3YWl0IHN0b3JlQXBwSW5DYWNoZShuZXdBcHApXG4gICAgICA6IG5ld0FwcDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXBwIChhcHAsIHRhcmdldFBhdGgpIHtcbiAgY29uc3Qge2hyZWZ9ID0gdXJsLnBhcnNlKGFwcCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV0LmRvd25sb2FkRmlsZShocmVmLCB0YXJnZXRQYXRoLCB7XG4gICAgICB0aW1lb3V0OiBBUFBfRE9XTkxPQURfVElNRU9VVF9NUyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZG93bmxvYWQgdGhlIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0UGF0aDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYnVuZGxlIGZyb20gYW4gYXJjaGl2ZSBpbnRvIHRoZSBnaXZlbiBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwUGF0aCBGdWxsIHBhdGggdG8gdGhlIGFyY2hpdmUgY29udGFpbmluZyB0aGUgYnVuZGxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0Um9vdCBGdWxsIHBhdGggdG8gdGhlIGZvbGRlciB3aGVyZSB0aGUgZXh0cmFjdGVkIGJ1bmRsZVxuICogc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fHN0cmluZ30gc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyBUaGUgbGlzdCBvZiBleHRlbnNpb25zXG4gKiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIGJ1bmRsZSBzdXBwb3J0cywgZm9yIGV4YW1wbGUgWycuYXBrJywgJy5hcGtzJ10gZm9yXG4gKiBBbmRyb2lkIHBhY2thZ2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGJ1bmRsZSBpbiB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGFyY2hpdmUgaXMgaW52YWxpZCBvciBubyBhcHBsaWNhdGlvbiBidW5kbGVzXG4gKiBoYXZlIGJlZW4gZm91bmQgaW5zaWRlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVuemlwQXBwICh6aXBQYXRoLCBkc3RSb290LCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSB7XG4gIGF3YWl0IHppcC5hc3NlcnRWYWxpZFppcCh6aXBQYXRoKTtcblxuICBpZiAoIV8uaXNBcnJheShzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBbc3VwcG9ydGVkQXBwRXh0ZW5zaW9uc107XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nYCk7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgICAgfHwgIVsnMCcsICdmYWxzZSddLmluY2x1ZGVzKF8udG9Mb3dlcih1c2VTeXN0ZW1VbnppcEVudikpO1xuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gdXNlIHVzZSB0aGUgc3lzdGVtIGB1bnppcGAgKGUuZy4sIGAvdXNyL2Jpbi91bnppcGApIGR1ZVxuICAgICAqIHRvIHRoZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpdCBwcm92aWRlcyBvdmVyIHRoZSBuYXRpdmVcbiAgICAgKiBKUyBcInVuemlwXCIgaW1wbGVtZW50YXRpb24uXG4gICAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS9zdXBwb3J0L2xpYi96aXAnKS5FeHRyYWN0QWxsT3B0aW9uc31cbiAgICAgKi9cbiAgICBjb25zdCBleHRyYWN0aW9uT3B0cyA9IHt1c2VTeXN0ZW1VbnppcH07XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0MTAwXG4gICAgaWYgKHBhdGguZXh0bmFtZSh6aXBQYXRoKSA9PT0gSVBBX0VYVCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBFbmZvcmNpbmcgVVRGLTggZW5jb2Rpbmcgb24gdGhlIGV4dHJhY3RlZCBmaWxlIG5hbWVzIGZvciAnJHtwYXRoLmJhc2VuYW1lKHppcFBhdGgpfSdgKTtcbiAgICAgIGV4dHJhY3Rpb25PcHRzLmZpbGVOYW1lc0VuY29kaW5nID0gJ3V0ZjgnO1xuICAgIH1cbiAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIHRtcFJvb3QsIGV4dHJhY3Rpb25PcHRzKTtcbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGAqKi8qLisoJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLm1hcCgoZXh0KSA9PiBleHQucmVwbGFjZSgvXlxcLi8sICcnKSkuam9pbignfCcpfSlgO1xuICAgIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICAgIGN3ZDogdG1wUm9vdCxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgLy8gR2V0IHRoZSB0b3AgbGV2ZWwgbWF0Y2hcbiAgICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgICBpZiAoXy5pc0VtcHR5KHNvcnRlZEJ1bmRsZUl0ZW1zKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEFwcCB1bnppcHBlZCBPSywgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSAnJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zfScgYCArXG4gICAgICAgIHV0aWwucGx1cmFsaXplKCdidW5kbGUnLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpICtcbiAgICAgICAgYCBpbiBpdC4gTWFrZSBzdXJlIHlvdXIgYXJjaGl2ZSBjb250YWlucyBhdCBsZWFzdCBvbmUgcGFja2FnZSBoYXZpbmcgYCArXG4gICAgICAgIGAnJHtzdXBwb3J0ZWRBcHBFeHRlbnNpb25zfScgJHt1dGlsLnBsdXJhbGl6ZSgnZXh0ZW5zaW9uJywgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBFeHRyYWN0ZWQgJHt1dGlsLnBsdXJhbGl6ZSgnYnVuZGxlIGl0ZW0nLCBzb3J0ZWRCdW5kbGVJdGVtcy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgIGBmcm9tICcke3ppcFBhdGh9JyBpbiAke01hdGgucm91bmQodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyl9bXM6ICR7c29ydGVkQnVuZGxlSXRlbXN9YCk7XG4gICAgY29uc3QgbWF0Y2hlZEJ1bmRsZSA9IF8uZmlyc3Qoc29ydGVkQnVuZGxlSXRlbXMpO1xuICAgIGxvZ2dlci5pbmZvKGBBc3N1bWluZyAnJHttYXRjaGVkQnVuZGxlfScgaXMgdGhlIGNvcnJlY3QgYnVuZGxlYCk7XG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShkc3RSb290LCBwYXRoLmJhc2VuYW1lKG1hdGNoZWRCdW5kbGUpKTtcbiAgICBhd2FpdCBmcy5tdihwYXRoLnJlc29sdmUodG1wUm9vdCwgbWF0Y2hlZEJ1bmRsZSksIGRzdFBhdGgsIHtta2RpcnA6IHRydWV9KTtcbiAgICByZXR1cm4gZHN0UGF0aDtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xufVxuXG4vKipcbiAqIEZpbmRzIGFsbCBpbnN0YW5jZXMgJ2ZpcnN0S2V5JyBhbmQgY3JlYXRlIGEgZHVwbGljYXRlIHdpdGggdGhlIGtleSAnc2Vjb25kS2V5JyxcbiAqIERvIHRoZSBzYW1lIHRoaW5nIGluIHJldmVyc2UuIElmIHdlIGZpbmQgJ3NlY29uZEtleScsIGNyZWF0ZSBhIGR1cGxpY2F0ZSB3aXRoIHRoZSBrZXkgJ2ZpcnN0S2V5Jy5cbiAqXG4gKiBUaGlzIHdpbGwgY2F1c2Uga2V5cyB0byBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zICdmaXJzdEtleScgYW5kICdzZWNvbmRLZXknLlxuXG4gKiBAcGFyYW0geyp9IGlucHV0IEFueSB0eXBlIG9mIGlucHV0XG4gKiBAcGFyYW0ge1N0cmluZ30gZmlyc3RLZXkgVGhlIGZpcnN0IGtleSB0byBkdXBsaWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWNvbmRLZXkgVGhlIHNlY29uZCBrZXkgdG8gZHVwbGljYXRlXG4gKi9cbmZ1bmN0aW9uIGR1cGxpY2F0ZUtleXMgKGlucHV0LCBmaXJzdEtleSwgc2Vjb25kS2V5KSB7XG4gIC8vIElmIGFycmF5IHByb3ZpZGVkLCByZWN1cnNpdmVseSBjYWxsIG9uIGFsbCBlbGVtZW50c1xuICBpZiAoXy5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoKGl0ZW0pID0+IGR1cGxpY2F0ZUtleXMoaXRlbSwgZmlyc3RLZXksIHNlY29uZEtleSkpO1xuICB9XG5cbiAgLy8gSWYgb2JqZWN0LCBjcmVhdGUgZHVwbGljYXRlcyBmb3Iga2V5cyBhbmQgdGhlbiByZWN1cnNpdmVseSBjYWxsIG9uIHZhbHVlc1xuICBpZiAoXy5pc1BsYWluT2JqZWN0KGlucHV0KSkge1xuICAgIGNvbnN0IHJlc3VsdE9iaiA9IHt9O1xuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoaW5wdXQpKSB7XG4gICAgICBjb25zdCByZWN1cnNpdmVseUNhbGxlZFZhbHVlID0gZHVwbGljYXRlS2V5cyh2YWx1ZSwgZmlyc3RLZXksIHNlY29uZEtleSk7XG4gICAgICBpZiAoa2V5ID09PSBmaXJzdEtleSkge1xuICAgICAgICByZXN1bHRPYmpbc2Vjb25kS2V5XSA9IHJlY3Vyc2l2ZWx5Q2FsbGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gc2Vjb25kS2V5KSB7XG4gICAgICAgIHJlc3VsdE9ialtmaXJzdEtleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0T2JqW2tleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0T2JqO1xuICB9XG5cbiAgLy8gQmFzZSBjYXNlLiBSZXR1cm4gcHJpbWl0aXZlcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nLlxuICByZXR1cm4gaW5wdXQ7XG59XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxTdHJpbmc+fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzQXJyYXkgKGNhcCkge1xuICBpZiAoXy5pc0FycmF5KGNhcCkpIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG5cbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgY2FwYWJpbGl0eSBhcyBKU09OIGFycmF5YCk7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHN0cmluZyB0aGF0IHVuaXF1ZWx5IGRlc2NyaWJlcyBkcml2ZXIgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvcmV9IG9iaiBkcml2ZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nP30gc2Vzc2lvbklkIHNlc3Npb24gaWRlbnRpZmllciAoaWYgZXhpc3RzKVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXggKG9iaiwgc2Vzc2lvbklkID0gbnVsbCkge1xuICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHtvYmouY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKG9iaikuc3Vic3RyaW5nKDAsIDQpfWA7XG4gIHJldHVybiBzZXNzaW9uSWQgPyBgJHtpbnN0YW5jZU5hbWV9ICgke3Nlc3Npb25JZC5zdWJzdHJpbmcoMCwgOCl9KWAgOiBpbnN0YW5jZU5hbWU7XG59XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVySGVscGVyc30gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXksIGdlbmVyYXRlRHJpdmVyTG9nUHJlZml4XG59O1xuZXhwb3J0IHtcbiAgY29uZmlndXJlQXBwLCBpc1BhY2thZ2VPckJ1bmRsZSwgZHVwbGljYXRlS2V5cywgcGFyc2VDYXBzQXJyYXksIGdlbmVyYXRlRHJpdmVyTG9nUHJlZml4XG59O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/logger.js"],"names":[],"mappings":";AAEA,wDAA2C"}
|
|
@@ -12,7 +12,5 @@ var _support = require("@appium/support");
|
|
|
12
12
|
const log = _support.logger.getLogger('BaseDriver');
|
|
13
13
|
|
|
14
14
|
var _default = log;
|
|
15
|
-
exports.default = _default;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2xvZ2dlci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsWUFBakIsQ0FBWjs7ZUFDZUYsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Jhc2VEcml2ZXInKTtcbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
15
|
+
exports.default = _default;
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2xvZ2dlci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsWUFBakIsQ0FBWjs7ZUFDZUYsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Jhc2VEcml2ZXInKTtcbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const MAX_LOG_BODY_LENGTH: 1024;
|
|
2
|
+
export const MJSONWP_ELEMENT_KEY: "ELEMENT";
|
|
3
|
+
export const W3C_ELEMENT_KEY: "element-6066-11e4-a52e-4f735466cecf";
|
|
4
|
+
export namespace PROTOCOLS {
|
|
5
|
+
const W3C: string;
|
|
6
|
+
const MJSONWP: string;
|
|
7
|
+
}
|
|
8
|
+
export const DEFAULT_BASE_PATH: "";
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":"AAQA,uCAAiC;AACjC,4CAAsC;AACtC,oEAAwD;;;;;AAOxD,mCAA6B"}
|
package/build/lib/constants.js
CHANGED
|
@@ -21,7 +21,5 @@ const PROTOCOLS = {
|
|
|
21
21
|
};
|
|
22
22
|
exports.PROTOCOLS = PROTOCOLS;
|
|
23
23
|
const DEFAULT_BASE_PATH = '';
|
|
24
|
-
exports.DEFAULT_BASE_PATH = DEFAULT_BASE_PATH;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiTUFYX0xPR19CT0RZX0xFTkdUSCIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJ1dGlsIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJQUk9UT0NPTFMiLCJXM0MiLCJNSlNPTldQIiwiREVGQVVMVF9CQVNFX1BBVEgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQVFBLE1BQU1BLG1CQUFtQixHQUFHLElBQTVCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFNBQTVCOztBQUNBLE1BQU1DLGVBQWUsR0FBR0MsY0FBS0MsMEJBQTdCOztBQUNBLE1BQU1DLFNBQVMsR0FBRztBQUNoQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFc7QUFFaEJDLEVBQUFBLE9BQU8sRUFBRTtBQUZPLENBQWxCOztBQU1BLE1BQU1DLGlCQUFpQixHQUFHLEVBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbi8vIFRoZSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoIG9mIGEgc2luZ2xlIGxvZyByZWNvcmRcbi8vIGNvbnRhaW5pbmcgaHR0cCByZXF1ZXN0L3Jlc3BvbnNlIGJvZHlcbi8vIFRoaXMgdmFsdWUgY291bGQgYmUgZ2xvYmFsbHkgY3VzdG9taXplZCB1c2luZyB0aGUgLS1sb2ctZmlsdGVyc1xuLy8gc2VydmVyIGZlYXR1cmUuIEV4YW1wbGUgcnVsZTpcbi8vIFx0e1wicGF0dGVyblwiOiBcIiguezEsMTUwfSkuKlwiLCBcImZsYWdzXCI6IFwic1wiLCBcInJlcGxhY2VyXCI6IFwiJDFcIn1cbi8vIF4gY3V0cyBhbGwgbG9nIHJlY29yZHMgdG8gbWF4aW11bSAxNTAgY2hhcnNcbmNvbnN0IE1BWF9MT0dfQk9EWV9MRU5HVEggPSAxMDI0O1xuY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcbmNvbnN0IFczQ19FTEVNRU5UX0tFWSA9IHV0aWwuVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVI7XG5jb25zdCBQUk9UT0NPTFMgPSB7XG4gIFczQzogJ1czQycsXG4gIE1KU09OV1A6ICdNSlNPTldQJyxcbn07XG5cbi8vIEJlZm9yZSBBcHBpdW0gMi4wLCB0aGlzIGRlZmF1bHQgdmFsdWUgd2FzICcvd2QvaHViJyBieSBoaXN0b3JpY2FsIHJlYXNvbnMuXG5jb25zdCBERUZBVUxUX0JBU0VfUEFUSCA9ICcnO1xuXG5cbmV4cG9ydCB7XG4gIE1BWF9MT0dfQk9EWV9MRU5HVEgsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSxcbiAgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSFxufTtcbiJdLCJmaWxlIjoibGliL2NvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
24
|
+
exports.DEFAULT_BASE_PATH = DEFAULT_BASE_PATH;
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiTUFYX0xPR19CT0RZX0xFTkdUSCIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJ1dGlsIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJQUk9UT0NPTFMiLCJXM0MiLCJNSlNPTldQIiwiREVGQVVMVF9CQVNFX1BBVEgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQVFBLE1BQU1BLG1CQUFtQixHQUFHLElBQTVCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFNBQTVCOztBQUNBLE1BQU1DLGVBQWUsR0FBR0MsY0FBS0MsMEJBQTdCOztBQUNBLE1BQU1DLFNBQVMsR0FBRztBQUNoQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFc7QUFFaEJDLEVBQUFBLE9BQU8sRUFBRTtBQUZPLENBQWxCOztBQU1BLE1BQU1DLGlCQUFpQixHQUFHLEVBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbi8vIFRoZSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoIG9mIGEgc2luZ2xlIGxvZyByZWNvcmRcbi8vIGNvbnRhaW5pbmcgaHR0cCByZXF1ZXN0L3Jlc3BvbnNlIGJvZHlcbi8vIFRoaXMgdmFsdWUgY291bGQgYmUgZ2xvYmFsbHkgY3VzdG9taXplZCB1c2luZyB0aGUgLS1sb2ctZmlsdGVyc1xuLy8gc2VydmVyIGZlYXR1cmUuIEV4YW1wbGUgcnVsZTpcbi8vIFx0e1wicGF0dGVyblwiOiBcIiguezEsMTUwfSkuKlwiLCBcImZsYWdzXCI6IFwic1wiLCBcInJlcGxhY2VyXCI6IFwiJDFcIn1cbi8vIF4gY3V0cyBhbGwgbG9nIHJlY29yZHMgdG8gbWF4aW11bSAxNTAgY2hhcnNcbmNvbnN0IE1BWF9MT0dfQk9EWV9MRU5HVEggPSAxMDI0O1xuY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcbmNvbnN0IFczQ19FTEVNRU5UX0tFWSA9IHV0aWwuVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVI7XG5jb25zdCBQUk9UT0NPTFMgPSB7XG4gIFczQzogJ1czQycsXG4gIE1KU09OV1A6ICdNSlNPTldQJyxcbn07XG5cbi8vIEJlZm9yZSBBcHBpdW0gMi4wLCB0aGlzIGRlZmF1bHQgdmFsdWUgd2FzICcvd2QvaHViJyBieSBoaXN0b3JpY2FsIHJlYXNvbnMuXG5jb25zdCBERUZBVUxUX0JBU0VfUEFUSCA9ICcnO1xuXG5cbmV4cG9ydCB7XG4gIE1BWF9MT0dfQk9EWV9MRU5HVEgsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSxcbiAgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSFxufTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash.d.ts","sourceRoot":"","sources":["../../../lib/express/crash.js"],"names":[],"mappings":"AAGA,qCAEC;AAED,qCAEC"}
|
|
@@ -16,7 +16,5 @@ function produceError() {
|
|
|
16
16
|
|
|
17
17
|
function produceCrash() {
|
|
18
18
|
throw new Error('We just tried to crash Appium!');
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHByZXNzL2NyYXNoLmpzIl0sIm5hbWVzIjpbInByb2R1Y2VFcnJvciIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUdBLFNBQVNBLFlBQVQsR0FBeUI7QUFDdkIsUUFBTSxJQUFJQyxpQkFBT0MsbUJBQVgsQ0FBK0Isb0NBQS9CLENBQU47QUFDRDs7QUFFRCxTQUFTQyxZQUFULEdBQXlCO0FBQ3ZCLFFBQU0sSUFBSUMsS0FBSixDQUFVLGdDQUFWLENBQU47QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uL3Byb3RvY29sJztcblxuXG5mdW5jdGlvbiBwcm9kdWNlRXJyb3IgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoJ1Byb2R1Y2VkIGdlbmVyaWMgZXJyb3IgZm9yIHRlc3RpbmcnKTtcbn1cblxuZnVuY3Rpb24gcHJvZHVjZUNyYXNoICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXZSBqdXN0IHRyaWVkIHRvIGNyYXNoIEFwcGl1bSEnKTtcbn1cblxuXG5leHBvcnQgeyBwcm9kdWNlRXJyb3IsIHByb2R1Y2VDcmFzaCB9O1xuIl0sImZpbGUiOiJsaWIvZXhwcmVzcy9jcmFzaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHByZXNzL2NyYXNoLmpzIl0sIm5hbWVzIjpbInByb2R1Y2VFcnJvciIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUdBLFNBQVNBLFlBQVQsR0FBeUI7QUFDdkIsUUFBTSxJQUFJQyxpQkFBT0MsbUJBQVgsQ0FBK0Isb0NBQS9CLENBQU47QUFDRDs7QUFFRCxTQUFTQyxZQUFULEdBQXlCO0FBQ3ZCLFFBQU0sSUFBSUMsS0FBSixDQUFVLGdDQUFWLENBQU47QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uL3Byb3RvY29sJztcblxuXG5mdW5jdGlvbiBwcm9kdWNlRXJyb3IgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoJ1Byb2R1Y2VkIGdlbmVyaWMgZXJyb3IgZm9yIHRlc3RpbmcnKTtcbn1cblxuZnVuY3Rpb24gcHJvZHVjZUNyYXNoICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXZSBqdXN0IHRyaWVkIHRvIGNyYXNoIEFwcGl1bSEnKTtcbn1cblxuXG5leHBvcnQgeyBwcm9kdWNlRXJyb3IsIHByb2R1Y2VDcmFzaCB9O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express-logging.d.ts","sourceRoot":"","sources":["../../../lib/express/express-logging.js"],"names":[],"mappings":"AAoCA,kCAGG;AAIH,oCAWsB"}
|
|
@@ -11,7 +11,7 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
|
-
require("@
|
|
14
|
+
require("@colors/colors");
|
|
15
15
|
|
|
16
16
|
var _morgan = _interopRequireDefault(require("morgan"));
|
|
17
17
|
|
|
@@ -66,7 +66,5 @@ const startLogFormatter = (0, _morgan.default)((tokens, req, res) => {
|
|
|
66
66
|
}, {
|
|
67
67
|
immediate: true
|
|
68
68
|
});
|
|
69
|
-
exports.startLogFormatter = startLogFormatter;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHByZXNzL2V4cHJlc3MtbG9nZ2luZy5qcyJdLCJuYW1lcyI6WyJjb21waWxlIiwiZm10IiwicmVwbGFjZSIsIl8iLCJuYW1lIiwiYXJnIiwianMiLCJGdW5jdGlvbiIsInJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0IiwidG9rZW5zIiwicmVxIiwicmVzIiwic3RhdHVzIiwic3RhdHVzQ29kZSIsInN0YXR1c1N0ciIsInJlZCIsInllbGxvdyIsImN5YW4iLCJncmVlbiIsImZuIiwid2hpdGUiLCJncmV5IiwiZW5kTG9nRm9ybWF0dGVyIiwibG9nIiwiaW5mbyIsImpzb25SZXNwIiwicmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCIsInN0YXJ0TG9nRm9ybWF0dGVyIiwicmVxQm9keSIsImJvZHkiLCJ0cnVuY2F0ZSIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImxlbmd0aCIsIk1BWF9MT0dfQk9EWV9MRU5HVEgiLCJpZ24iLCJpbW1lZGlhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsU0FBU0EsT0FBVCxDQUFrQkMsR0FBbEIsRUFBdUI7QUFFckJBLEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksSUFBWixFQUFrQixLQUFsQixDQUFOO0FBQ0FELEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksZ0NBQVosRUFDSixTQUFTQSxPQUFULENBQWtCQyxDQUFsQixFQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLFdBQVEscUJBQW9CRCxJQUFLLGlCQUFnQkMsR0FBSSxnQkFBckQ7QUFDRCxHQUhHLENBQU47QUFJQSxNQUFJQyxFQUFFLEdBQUksYUFBWUwsR0FBSSxJQUExQjtBQUNBLFNBQU8sSUFBSU0sUUFBSixDQUFhLGtCQUFiLEVBQWlDRCxFQUFqQyxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0UsdUJBQVQsQ0FBa0NDLE1BQWxDLEVBQTBDQyxHQUExQyxFQUErQ0MsR0FBL0MsRUFBb0Q7QUFDbEQsTUFBSUMsTUFBTSxHQUFHRCxHQUFHLENBQUNFLFVBQWpCO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLFNBQWhCOztBQUNBLE1BQUlGLE1BQU0sSUFBSSxHQUFkLEVBQW1CO0FBQ2pCRSxJQUFBQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsR0FBdEI7QUFDRCxHQUZELE1BRU8sSUFBSUgsTUFBTSxJQUFJLEdBQWQsRUFBbUI7QUFDeEJFLElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDRSxNQUF0QjtBQUNELEdBRk0sTUFFQSxJQUFJSixNQUFNLElBQUksR0FBZCxFQUFtQjtBQUN4QkUsSUFBQUEsU0FBUyxHQUFHQSxTQUFTLENBQUNHLElBQXRCO0FBQ0QsR0FGTSxNQUVBO0FBQ0xILElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDSSxLQUF0QjtBQUNEOztBQUNELE1BQUlDLEVBQUUsR0FBR25CLE9BQU8sQ0FBRSxHQUFFLG9CQUFvQm9CLEtBQU0sR0FBRU4sU0FBVSxJQUFHLDJDQUEyQ08sSUFBSyxFQUE3RixDQUFoQjtBQUNBLFNBQU9GLEVBQUUsQ0FBQ1YsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsQ0FBVDtBQUNEOztBQUVELE1BQU1XLGVBQWUsR0FBRyxxQkFBTyxDQUFDYixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxLQUFzQjtBQUNuRFksa0JBQUlDLElBQUosQ0FBU2hCLHVCQUF1QixDQUFDQyxNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFoQyxFQUNFLENBQUNBLEdBQUcsQ0FBQ2MsUUFBSixJQUFnQixFQUFqQixFQUFxQkosSUFEdkI7QUFFRCxDQUh1QixDQUF4Qjs7QUFLQSxNQUFNSyx5QkFBeUIsR0FBRzFCLE9BQU8sQ0FBRSxHQUFFLE1BQU1vQixLQUFNLElBQUcsVUFBVUEsS0FBTSxJQUFHLE9BQU9BLEtBQU0sRUFBbkQsQ0FBekM7QUFFQSxNQUFNTyxpQkFBaUIsR0FBRyxxQkFBTyxDQUFDbEIsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsS0FBc0I7QUFFckQsTUFBSWlCLE9BQU8sR0FBRyxFQUFkOztBQUNBLE1BQUlsQixHQUFHLENBQUNtQixJQUFSLEVBQWM7QUFDWixRQUFJO0FBQ0ZELE1BQUFBLE9BQU8sR0FBR3pCLGdCQUFFMkIsUUFBRixDQUFXM0IsZ0JBQUU0QixRQUFGLENBQVdyQixHQUFHLENBQUNtQixJQUFmLElBQXVCbkIsR0FBRyxDQUFDbUIsSUFBM0IsR0FBa0NHLElBQUksQ0FBQ0MsU0FBTCxDQUFldkIsR0FBRyxDQUFDbUIsSUFBbkIsQ0FBN0MsRUFBdUU7QUFDL0VLLFFBQUFBLE1BQU0sRUFBRUM7QUFEdUUsT0FBdkUsQ0FBVjtBQUdELEtBSkQsQ0FJRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFDRGIsa0JBQUlDLElBQUosQ0FBU0UseUJBQXlCLENBQUNqQixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFsQyxFQUFzRGlCLE9BQU8sQ0FBQ1AsSUFBOUQ7QUFDRCxDQVh5QixFQVd2QjtBQUFDZ0IsRUFBQUEsU0FBUyxFQUFFO0FBQVosQ0FYdUIsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdAZGFiaC9jb2xvcnMnO1xuaW1wb3J0IG1vcmdhbiBmcm9tICdtb3JnYW4nO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBNQVhfTE9HX0JPRFlfTEVOR1RIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuXG4vLyBDb3BpZWQgdGhlIG1vcmdhbiBjb21waWxlIGZ1bmN0aW9uIG92ZXIgc28gdGhhdCBjb29sZXIgZm9ybWF0c1xuLy8gbWF5IGJlIGNvbmZpZ3VyZWRcbmZ1bmN0aW9uIGNvbXBpbGUgKGZtdCkge1xuICAvLyBlc2NhcGUgcXVvdGVzXG4gIGZtdCA9IGZtdC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyk7XG4gIGZtdCA9IGZtdC5yZXBsYWNlKC86KFstXFx3XXsyLH0pKD86XFxbKFteXFxdXSspXFxdKT8vZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlIChfLCBuYW1lLCBhcmcpIHtcbiAgICAgIHJldHVybiBgXCJcXG4gICAgKyAodG9rZW5zW1wiJHtuYW1lfVwiXShyZXEsIHJlcywgXCIke2FyZ31cIikgfHwgXCItXCIpICsgXCJgO1xuICAgIH0pO1xuICBsZXQganMgPSBgICByZXR1cm4gXCIke2ZtdH1cIjtgO1xuICByZXR1cm4gbmV3IEZ1bmN0aW9uKCd0b2tlbnMsIHJlcSwgcmVzJywganMpO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0RW5kTG9nZ2luZ0Zvcm1hdCAodG9rZW5zLCByZXEsIHJlcykge1xuICBsZXQgc3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gIGxldCBzdGF0dXNTdHIgPSAnOnN0YXR1cyc7XG4gIGlmIChzdGF0dXMgPj0gNTAwKSB7XG4gICAgc3RhdHVzU3RyID0gc3RhdHVzU3RyLnJlZDtcbiAgfSBlbHNlIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgc3RhdHVzU3RyID0gc3RhdHVzU3RyLnllbGxvdztcbiAgfSBlbHNlIGlmIChzdGF0dXMgPj0gMzAwKSB7XG4gICAgc3RhdHVzU3RyID0gc3RhdHVzU3RyLmN5YW47XG4gIH0gZWxzZSB7XG4gICAgc3RhdHVzU3RyID0gc3RhdHVzU3RyLmdyZWVuO1xuICB9XG4gIGxldCBmbiA9IGNvbXBpbGUoYCR7JzwtLSA6bWV0aG9kIDp1cmwgJy53aGl0ZX0ke3N0YXR1c1N0cn0gJHsnOnJlc3BvbnNlLXRpbWUgbXMgLSA6cmVzW2NvbnRlbnQtbGVuZ3RoXScuZ3JleX1gKTtcbiAgcmV0dXJuIGZuKHRva2VucywgcmVxLCByZXMpO1xufVxuXG5jb25zdCBlbmRMb2dGb3JtYXR0ZXIgPSBtb3JnYW4oKHRva2VucywgcmVxLCByZXMpID0+IHtcbiAgbG9nLmluZm8ocmVxdWVzdEVuZExvZ2dpbmdGb3JtYXQodG9rZW5zLCByZXEsIHJlcyksXG4gICAgKHJlcy5qc29uUmVzcCB8fCAnJykuZ3JleSk7XG59KTtcblxuY29uc3QgcmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCA9IGNvbXBpbGUoYCR7Jy0tPicud2hpdGV9ICR7JzptZXRob2QnLndoaXRlfSAkeyc6dXJsJy53aGl0ZX1gKTtcblxuY29uc3Qgc3RhcnRMb2dGb3JtYXR0ZXIgPSBtb3JnYW4oKHRva2VucywgcmVxLCByZXMpID0+IHtcbiAgLy8gbW9yZ2FuIG91dHB1dCBpcyByZWRpcmVjdGVkIHN0cmFpZ2h0IHRvIHdpbnN0b25cbiAgbGV0IHJlcUJvZHkgPSAnJztcbiAgaWYgKHJlcS5ib2R5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlcUJvZHkgPSBfLnRydW5jYXRlKF8uaXNTdHJpbmcocmVxLmJvZHkpID8gcmVxLmJvZHkgOiBKU09OLnN0cmluZ2lmeShyZXEuYm9keSksIHtcbiAgICAgICAgbGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RILFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIGxvZy5pbmZvKHJlcXVlc3RTdGFydExvZ2dpbmdGb3JtYXQodG9rZW5zLCByZXEsIHJlcyksIHJlcUJvZHkuZ3JleSk7XG59LCB7aW1tZWRpYXRlOiB0cnVlfSk7XG5cbmV4cG9ydCB7IGVuZExvZ0Zvcm1hdHRlciwgc3RhcnRMb2dGb3JtYXR0ZXIgfTtcbiJdLCJmaWxlIjoibGliL2V4cHJlc3MvZXhwcmVzcy1sb2dnaW5nLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
69
|
+
exports.startLogFormatter = startLogFormatter;
|
|
70
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHByZXNzL2V4cHJlc3MtbG9nZ2luZy5qcyJdLCJuYW1lcyI6WyJjb21waWxlIiwiZm10IiwicmVwbGFjZSIsIl8iLCJuYW1lIiwiYXJnIiwianMiLCJGdW5jdGlvbiIsInJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0IiwidG9rZW5zIiwicmVxIiwicmVzIiwic3RhdHVzIiwic3RhdHVzQ29kZSIsInN0YXR1c1N0ciIsInJlZCIsInllbGxvdyIsImN5YW4iLCJncmVlbiIsImZuIiwid2hpdGUiLCJncmV5IiwiZW5kTG9nRm9ybWF0dGVyIiwibG9nIiwiaW5mbyIsImpzb25SZXNwIiwicmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCIsInN0YXJ0TG9nRm9ybWF0dGVyIiwicmVxQm9keSIsImJvZHkiLCJ0cnVuY2F0ZSIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImxlbmd0aCIsIk1BWF9MT0dfQk9EWV9MRU5HVEgiLCJpZ24iLCJpbW1lZGlhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsU0FBU0EsT0FBVCxDQUFrQkMsR0FBbEIsRUFBdUI7QUFFckJBLEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksSUFBWixFQUFrQixLQUFsQixDQUFOO0FBQ0FELEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksZ0NBQVosRUFDSixTQUFTQSxPQUFULENBQWtCQyxDQUFsQixFQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLFdBQVEscUJBQW9CRCxJQUFLLGlCQUFnQkMsR0FBSSxnQkFBckQ7QUFDRCxHQUhHLENBQU47QUFJQSxNQUFJQyxFQUFFLEdBQUksYUFBWUwsR0FBSSxJQUExQjtBQUNBLFNBQU8sSUFBSU0sUUFBSixDQUFhLGtCQUFiLEVBQWlDRCxFQUFqQyxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0UsdUJBQVQsQ0FBa0NDLE1BQWxDLEVBQTBDQyxHQUExQyxFQUErQ0MsR0FBL0MsRUFBb0Q7QUFDbEQsTUFBSUMsTUFBTSxHQUFHRCxHQUFHLENBQUNFLFVBQWpCO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLFNBQWhCOztBQUNBLE1BQUlGLE1BQU0sSUFBSSxHQUFkLEVBQW1CO0FBQ2pCRSxJQUFBQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsR0FBdEI7QUFDRCxHQUZELE1BRU8sSUFBSUgsTUFBTSxJQUFJLEdBQWQsRUFBbUI7QUFDeEJFLElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDRSxNQUF0QjtBQUNELEdBRk0sTUFFQSxJQUFJSixNQUFNLElBQUksR0FBZCxFQUFtQjtBQUN4QkUsSUFBQUEsU0FBUyxHQUFHQSxTQUFTLENBQUNHLElBQXRCO0FBQ0QsR0FGTSxNQUVBO0FBQ0xILElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDSSxLQUF0QjtBQUNEOztBQUNELE1BQUlDLEVBQUUsR0FBR25CLE9BQU8sQ0FBRSxHQUFFLG9CQUFvQm9CLEtBQU0sR0FBRU4sU0FBVSxJQUFHLDJDQUEyQ08sSUFBSyxFQUE3RixDQUFoQjtBQUNBLFNBQU9GLEVBQUUsQ0FBQ1YsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsQ0FBVDtBQUNEOztBQUVELE1BQU1XLGVBQWUsR0FBRyxxQkFBTyxDQUFDYixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxLQUFzQjtBQUNuRFksa0JBQUlDLElBQUosQ0FBU2hCLHVCQUF1QixDQUFDQyxNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFoQyxFQUNFLENBQUNBLEdBQUcsQ0FBQ2MsUUFBSixJQUFnQixFQUFqQixFQUFxQkosSUFEdkI7QUFFRCxDQUh1QixDQUF4Qjs7QUFLQSxNQUFNSyx5QkFBeUIsR0FBRzFCLE9BQU8sQ0FBRSxHQUFFLE1BQU1vQixLQUFNLElBQUcsVUFBVUEsS0FBTSxJQUFHLE9BQU9BLEtBQU0sRUFBbkQsQ0FBekM7QUFFQSxNQUFNTyxpQkFBaUIsR0FBRyxxQkFBTyxDQUFDbEIsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsS0FBc0I7QUFFckQsTUFBSWlCLE9BQU8sR0FBRyxFQUFkOztBQUNBLE1BQUlsQixHQUFHLENBQUNtQixJQUFSLEVBQWM7QUFDWixRQUFJO0FBQ0ZELE1BQUFBLE9BQU8sR0FBR3pCLGdCQUFFMkIsUUFBRixDQUFXM0IsZ0JBQUU0QixRQUFGLENBQVdyQixHQUFHLENBQUNtQixJQUFmLElBQXVCbkIsR0FBRyxDQUFDbUIsSUFBM0IsR0FBa0NHLElBQUksQ0FBQ0MsU0FBTCxDQUFldkIsR0FBRyxDQUFDbUIsSUFBbkIsQ0FBN0MsRUFBdUU7QUFDL0VLLFFBQUFBLE1BQU0sRUFBRUM7QUFEdUUsT0FBdkUsQ0FBVjtBQUdELEtBSkQsQ0FJRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFDRGIsa0JBQUlDLElBQUosQ0FBU0UseUJBQXlCLENBQUNqQixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFsQyxFQUFzRGlCLE9BQU8sQ0FBQ1AsSUFBOUQ7QUFDRCxDQVh5QixFQVd2QjtBQUFDZ0IsRUFBQUEsU0FBUyxFQUFFO0FBQVosQ0FYdUIsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdAY29sb3JzL2NvbG9ycyc7XG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbic7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IE1BWF9MT0dfQk9EWV9MRU5HVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5cbi8vIENvcGllZCB0aGUgbW9yZ2FuIGNvbXBpbGUgZnVuY3Rpb24gb3ZlciBzbyB0aGF0IGNvb2xlciBmb3JtYXRzXG4vLyBtYXkgYmUgY29uZmlndXJlZFxuZnVuY3Rpb24gY29tcGlsZSAoZm10KSB7XG4gIC8vIGVzY2FwZSBxdW90ZXNcbiAgZm10ID0gZm10LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcbiAgZm10ID0gZm10LnJlcGxhY2UoLzooWy1cXHddezIsfSkoPzpcXFsoW15cXF1dKylcXF0pPy9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2UgKF8sIG5hbWUsIGFyZykge1xuICAgICAgcmV0dXJuIGBcIlxcbiAgICArICh0b2tlbnNbXCIke25hbWV9XCJdKHJlcSwgcmVzLCBcIiR7YXJnfVwiKSB8fCBcIi1cIikgKyBcImA7XG4gICAgfSk7XG4gIGxldCBqcyA9IGAgIHJldHVybiBcIiR7Zm10fVwiO2A7XG4gIHJldHVybiBuZXcgRnVuY3Rpb24oJ3Rva2VucywgcmVxLCByZXMnLCBqcyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0ICh0b2tlbnMsIHJlcSwgcmVzKSB7XG4gIGxldCBzdGF0dXMgPSByZXMuc3RhdHVzQ29kZTtcbiAgbGV0IHN0YXR1c1N0ciA9ICc6c3RhdHVzJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIucmVkO1xuICB9IGVsc2UgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIueWVsbG93O1xuICB9IGVsc2UgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIuY3lhbjtcbiAgfSBlbHNlIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIuZ3JlZW47XG4gIH1cbiAgbGV0IGZuID0gY29tcGlsZShgJHsnPC0tIDptZXRob2QgOnVybCAnLndoaXRlfSR7c3RhdHVzU3RyfSAkeyc6cmVzcG9uc2UtdGltZSBtcyAtIDpyZXNbY29udGVudC1sZW5ndGhdJy5ncmV5fWApO1xuICByZXR1cm4gZm4odG9rZW5zLCByZXEsIHJlcyk7XG59XG5cbmNvbnN0IGVuZExvZ0Zvcm1hdHRlciA9IG1vcmdhbigodG9rZW5zLCByZXEsIHJlcykgPT4ge1xuICBsb2cuaW5mbyhyZXF1ZXN0RW5kTG9nZ2luZ0Zvcm1hdCh0b2tlbnMsIHJlcSwgcmVzKSxcbiAgICAocmVzLmpzb25SZXNwIHx8ICcnKS5ncmV5KTtcbn0pO1xuXG5jb25zdCByZXF1ZXN0U3RhcnRMb2dnaW5nRm9ybWF0ID0gY29tcGlsZShgJHsnLS0+Jy53aGl0ZX0gJHsnOm1ldGhvZCcud2hpdGV9ICR7Jzp1cmwnLndoaXRlfWApO1xuXG5jb25zdCBzdGFydExvZ0Zvcm1hdHRlciA9IG1vcmdhbigodG9rZW5zLCByZXEsIHJlcykgPT4ge1xuICAvLyBtb3JnYW4gb3V0cHV0IGlzIHJlZGlyZWN0ZWQgc3RyYWlnaHQgdG8gd2luc3RvblxuICBsZXQgcmVxQm9keSA9ICcnO1xuICBpZiAocmVxLmJvZHkpIHtcbiAgICB0cnkge1xuICAgICAgcmVxQm9keSA9IF8udHJ1bmNhdGUoXy5pc1N0cmluZyhyZXEuYm9keSkgPyByZXEuYm9keSA6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSwge1xuICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgbG9nLmluZm8ocmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCh0b2tlbnMsIHJlcSwgcmVzKSwgcmVxQm9keS5ncmV5KTtcbn0sIHtpbW1lZGlhdGU6IHRydWV9KTtcblxuZXhwb3J0IHsgZW5kTG9nRm9ybWF0dGVyLCBzdGFydExvZ0Zvcm1hdHRlciB9O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../../lib/express/idempotency.js"],"names":[],"mappings":"AAgGA,+EAqDC"}
|