@dbx-tools/shared-core 0.9.58 → 0.9.60
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/README.md +3 -3
- package/index.ts +3 -3
- package/lib/index.d.ts +3 -3
- package/lib/index.js +3 -3
- package/lib/src/brand-utils.d.ts +5 -5
- package/lib/src/brand-utils.js +6 -6
- package/lib/src/http.d.ts +1 -1
- package/lib/src/http.js +2 -2
- package/lib/src/net.d.ts +1 -13
- package/lib/src/net.js +1 -18
- package/lib/src/object.d.ts +2 -14
- package/lib/src/object.js +3 -27
- package/lib/src/options.d.ts +14 -3
- package/lib/src/options.js +24 -5
- package/package.json +1 -1
- package/src/brand-utils.ts +5 -5
- package/src/http.ts +1 -1
- package/src/net.ts +1 -18
- package/src/object.ts +2 -27
- package/src/options.ts +38 -10
package/README.md
CHANGED
|
@@ -65,7 +65,7 @@ const instructions = brandUtils.brandContextPrompt(context);
|
|
|
65
65
|
typography, links, audience, and voice. Every field has a dbx tools default, so
|
|
66
66
|
an empty object is a complete context. Use [`@dbx-tools/core`](../../node/core)
|
|
67
67
|
to discover and read YAML/JSON files, and
|
|
68
|
-
[`@dbx-tools/ui
|
|
68
|
+
[`@dbx-tools/ui/branding`](../../ui/appkit) to apply the same context to a UI.
|
|
69
69
|
|
|
70
70
|
## Async Control
|
|
71
71
|
|
|
@@ -336,8 +336,8 @@ const internal = cidr ? net.ipInCidr("10.1.2.3", cidr) : false;
|
|
|
336
336
|
```
|
|
337
337
|
|
|
338
338
|
`net.urlBuilder()` is a forgiving URL builder for config and REST helpers.
|
|
339
|
-
`
|
|
340
|
-
parse IPv4 and IPv6 into a shared bigint comparison model.
|
|
339
|
+
`urlBuilder(...).pathMatches()` compares path prefixes on segment boundaries.
|
|
340
|
+
IP/CIDR helpers parse IPv4 and IPv6 into a shared bigint comparison model.
|
|
341
341
|
|
|
342
342
|
## Allow-List Patterns
|
|
343
343
|
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-core";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.60";
|
|
7
7
|
export * as asyncUtils from "./src/async-utils.ts";
|
|
8
8
|
export * as bindings from "./src/bindings.ts";
|
|
9
9
|
export * as brandUtils from "./src/brand-utils.ts";
|
|
@@ -33,8 +33,8 @@ export type { LogLevel, Logger } from "./src/log.ts";
|
|
|
33
33
|
export { MAX_TCP_PORT } from "./src/net.ts";
|
|
34
34
|
export type { UrlLike, IpVersion, ParsedIp, Cidr, UrlBuilder, ParseEmailsOptions } from "./src/net.ts";
|
|
35
35
|
export type { Sequence, Container, Collection, OneOrMany, NameLike, NonFunctionKeys, SerializablePrimitive, SerializableValue, ToNumberOptions, ToDateOptions, ToDurationOptions, DeepEqualComparator } from "./src/object.ts";
|
|
36
|
-
export { DatabricksEnvironmentNamesSchema, databricksEnvironmentNames, tcpPortSchema, tcpPortOrZeroSchema, normalizedUrlSchema, DatabricksOptionsSchema, LakebaseOptionsSchema } from "./src/options.ts";
|
|
37
|
-
export type { DatabricksEnvironmentNames, DatabricksOptions, OptionSerializationFormat, LakebaseOptions, OptionValueMap, ListenScheme, TcpListenAddress, UnixListenAddress, ListenAddress, ListenAddressOptions, ListenAddressInput } from "./src/options.ts";
|
|
36
|
+
export { DatabricksEnvironmentNamesSchema, databricksEnvironmentNames, PostgresEnvironmentNamesSchema, postgresEnvironmentNames, postgresRoleSchema, PostgresOptionsSchema, tcpPortSchema, tcpPortOrZeroSchema, normalizedUrlSchema, DatabricksOptionsSchema, LakebaseOptionsSchema } from "./src/options.ts";
|
|
37
|
+
export type { DatabricksEnvironmentNames, PostgresEnvironmentNames, PostgresOptions, DatabricksOptions, OptionSerializationFormat, LakebaseOptions, OptionValueMap, ListenScheme, TcpListenAddress, UnixListenAddress, ListenAddress, ListenAddressOptions, ListenAddressInput } from "./src/options.ts";
|
|
38
38
|
export type { PatternOptions } from "./src/pattern.ts";
|
|
39
39
|
export type { PredicateFunction, TypePredicateFunction, PredicateInput, Predicate } from "./src/predicate.ts";
|
|
40
40
|
export type { TokenizeOptions, KeyOptions, IdentifierOptions, DedentOptions, Description } from "./src/string-utils.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-core";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.60";
|
|
3
3
|
export * as asyncUtils from "./src/async-utils.ts";
|
|
4
4
|
export * as bindings from "./src/bindings.ts";
|
|
5
5
|
export * as brandUtils from "./src/brand-utils.ts";
|
|
@@ -29,8 +29,8 @@ export type { LogLevel, Logger } from "./src/log.ts";
|
|
|
29
29
|
export { MAX_TCP_PORT } from "./src/net.ts";
|
|
30
30
|
export type { UrlLike, IpVersion, ParsedIp, Cidr, UrlBuilder, ParseEmailsOptions } from "./src/net.ts";
|
|
31
31
|
export type { Sequence, Container, Collection, OneOrMany, NameLike, NonFunctionKeys, SerializablePrimitive, SerializableValue, ToNumberOptions, ToDateOptions, ToDurationOptions, DeepEqualComparator } from "./src/object.ts";
|
|
32
|
-
export { DatabricksEnvironmentNamesSchema, databricksEnvironmentNames, tcpPortSchema, tcpPortOrZeroSchema, normalizedUrlSchema, DatabricksOptionsSchema, LakebaseOptionsSchema } from "./src/options.ts";
|
|
33
|
-
export type { DatabricksEnvironmentNames, DatabricksOptions, OptionSerializationFormat, LakebaseOptions, OptionValueMap, ListenScheme, TcpListenAddress, UnixListenAddress, ListenAddress, ListenAddressOptions, ListenAddressInput } from "./src/options.ts";
|
|
32
|
+
export { DatabricksEnvironmentNamesSchema, databricksEnvironmentNames, PostgresEnvironmentNamesSchema, postgresEnvironmentNames, postgresRoleSchema, PostgresOptionsSchema, tcpPortSchema, tcpPortOrZeroSchema, normalizedUrlSchema, DatabricksOptionsSchema, LakebaseOptionsSchema } from "./src/options.ts";
|
|
33
|
+
export type { DatabricksEnvironmentNames, PostgresEnvironmentNames, PostgresOptions, DatabricksOptions, OptionSerializationFormat, LakebaseOptions, OptionValueMap, ListenScheme, TcpListenAddress, UnixListenAddress, ListenAddress, ListenAddressOptions, ListenAddressInput } from "./src/options.ts";
|
|
34
34
|
export type { PatternOptions } from "./src/pattern.ts";
|
|
35
35
|
export type { PredicateFunction, TypePredicateFunction, PredicateInput, Predicate } from "./src/predicate.ts";
|
|
36
36
|
export type { TokenizeOptions, KeyOptions, IdentifierOptions, DedentOptions, Description } from "./src/string-utils.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-core";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.60";
|
|
6
6
|
export * as asyncUtils from "./src/async-utils.js";
|
|
7
7
|
export * as bindings from "./src/bindings.js";
|
|
8
8
|
export * as brandUtils from "./src/brand-utils.js";
|
|
@@ -23,6 +23,6 @@ export * as stringUtils from "./src/string-utils.js";
|
|
|
23
23
|
export * as token from "./src/token.js";
|
|
24
24
|
export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, defaultBrandContext } from "./src/brand-utils.js";
|
|
25
25
|
export { MAX_TCP_PORT } from "./src/net.js";
|
|
26
|
-
export { DatabricksEnvironmentNamesSchema, databricksEnvironmentNames, tcpPortSchema, tcpPortOrZeroSchema, normalizedUrlSchema, DatabricksOptionsSchema, LakebaseOptionsSchema } from "./src/options.js";
|
|
26
|
+
export { DatabricksEnvironmentNamesSchema, databricksEnvironmentNames, PostgresEnvironmentNamesSchema, postgresEnvironmentNames, postgresRoleSchema, PostgresOptionsSchema, tcpPortSchema, tcpPortOrZeroSchema, normalizedUrlSchema, DatabricksOptionsSchema, LakebaseOptionsSchema } from "./src/options.js";
|
|
27
27
|
export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER } from "./src/token.js";
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGFBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU8vSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzVDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUs5UyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNjBcIjtcbmV4cG9ydCAqIGFzIGFzeW5jVXRpbHMgZnJvbSBcIi4vc3JjL2FzeW5jLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBiaW5kaW5ncyBmcm9tIFwiLi9zcmMvYmluZGluZ3MudHNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kVXRpbHMgZnJvbSBcIi4vc3JjL2JyYW5kLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBlbnZpcm9ubWVudFV0aWxzIGZyb20gXCIuL3NyYy9lbnZpcm9ubWVudC11dGlscy50c1wiO1xuZXhwb3J0ICogYXMgZXJyb3JVdGlscyBmcm9tIFwiLi9zcmMvZXJyb3ItdXRpbHMudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWN1dGlvbiBmcm9tIFwiLi9zcmMvZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBmdW5jdGlvblV0aWxzIGZyb20gXCIuL3NyYy9mdW5jdGlvbi11dGlscy50c1wiO1xuZXhwb3J0ICogYXMgaGFzaCBmcm9tIFwiLi9zcmMvaGFzaC50c1wiO1xuZXhwb3J0ICogYXMgaHR0cCBmcm9tIFwiLi9zcmMvaHR0cC50c1wiO1xuZXhwb3J0ICogYXMganNvbiBmcm9tIFwiLi9zcmMvanNvbi50c1wiO1xuZXhwb3J0ICogYXMgbG9nIGZyb20gXCIuL3NyYy9sb2cudHNcIjtcbmV4cG9ydCAqIGFzIG5ldCBmcm9tIFwiLi9zcmMvbmV0LnRzXCI7XG5leHBvcnQgKiBhcyBvYmplY3QgZnJvbSBcIi4vc3JjL29iamVjdC50c1wiO1xuZXhwb3J0ICogYXMgb3B0aW9ucyBmcm9tIFwiLi9zcmMvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgcGF0dGVybiBmcm9tIFwiLi9zcmMvcGF0dGVybi50c1wiO1xuZXhwb3J0ICogYXMgcHJlZGljYXRlIGZyb20gXCIuL3NyYy9wcmVkaWNhdGUudHNcIjtcbmV4cG9ydCAqIGFzIHN0cmluZ1V0aWxzIGZyb20gXCIuL3NyYy9zdHJpbmctdXRpbHMudHNcIjtcbmV4cG9ydCAqIGFzIHRva2VuIGZyb20gXCIuL3NyYy90b2tlbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBDb25jdXJyZW50RXJyb3JNb2RlLCBNYXBDb25jdXJyZW50T3B0aW9ucywgUG9sbENvbnRleHQsIFBvbGxQcm9kdWNlciwgUG9sbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYXN5bmMtdXRpbHMudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfQlJBTkRfQVNTRVRTLCBCcmFuZEFzc2V0U2V0U2NoZW1hLCBCcmFuZENvbG9yc1NjaGVtYSwgQnJhbmRWb2ljZVNjaGVtYSwgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQsIEJyYW5kQXNzZXRTZXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQtdXRpbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXJyb3JDb250ZXh0IH0gZnJvbSBcIi4vc3JjL2Vycm9yLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvblJlc3VsdCwgRXhlY3V0b3IsIEV4ZWN1dGlvbkZhaWx1cmUsIFJ1bk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1lbW9pemVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2Z1bmN0aW9uLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEhlYWRlckxpa2UgfSBmcm9tIFwiLi9zcmMvaHR0cC50c1wiO1xuZXhwb3J0IHR5cGUgeyBMb2dMZXZlbCwgTG9nZ2VyIH0gZnJvbSBcIi4vc3JjL2xvZy50c1wiO1xuZXhwb3J0IHsgTUFYX1RDUF9QT1JUIH0gZnJvbSBcIi4vc3JjL25ldC50c1wiO1xuZXhwb3J0IHR5cGUgeyBVcmxMaWtlLCBJcFZlcnNpb24sIFBhcnNlZElwLCBDaWRyLCBVcmxCdWlsZGVyLCBQYXJzZUVtYWlsc09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbmV0LnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlcXVlbmNlLCBDb250YWluZXIsIENvbGxlY3Rpb24sIE9uZU9yTWFueSwgTmFtZUxpa2UsIE5vbkZ1bmN0aW9uS2V5cywgU2VyaWFsaXphYmxlUHJpbWl0aXZlLCBTZXJpYWxpemFibGVWYWx1ZSwgVG9OdW1iZXJPcHRpb25zLCBUb0RhdGVPcHRpb25zLCBUb0R1cmF0aW9uT3B0aW9ucywgRGVlcEVxdWFsQ29tcGFyYXRvciB9IGZyb20gXCIuL3NyYy9vYmplY3QudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzU2NoZW1hLCBkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcywgUG9zdGdyZXNFbnZpcm9ubWVudE5hbWVzU2NoZW1hLCBwb3N0Z3Jlc0Vudmlyb25tZW50TmFtZXMsIHBvc3RncmVzUm9sZVNjaGVtYSwgUG9zdGdyZXNPcHRpb25zU2NoZW1hLCB0Y3BQb3J0U2NoZW1hLCB0Y3BQb3J0T3JaZXJvU2NoZW1hLCBub3JtYWxpemVkVXJsU2NoZW1hLCBEYXRhYnJpY2tzT3B0aW9uc1NjaGVtYSwgTGFrZWJhc2VPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMsIFBvc3RncmVzRW52aXJvbm1lbnROYW1lcywgUG9zdGdyZXNPcHRpb25zLCBEYXRhYnJpY2tzT3B0aW9ucywgT3B0aW9uU2VyaWFsaXphdGlvbkZvcm1hdCwgTGFrZWJhc2VPcHRpb25zLCBPcHRpb25WYWx1ZU1hcCwgTGlzdGVuU2NoZW1lLCBUY3BMaXN0ZW5BZGRyZXNzLCBVbml4TGlzdGVuQWRkcmVzcywgTGlzdGVuQWRkcmVzcywgTGlzdGVuQWRkcmVzc09wdGlvbnMsIExpc3RlbkFkZHJlc3NJbnB1dCB9IGZyb20gXCIuL3NyYy9vcHRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFBhdHRlcm5PcHRpb25zIH0gZnJvbSBcIi4vc3JjL3BhdHRlcm4udHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJlZGljYXRlRnVuY3Rpb24sIFR5cGVQcmVkaWNhdGVGdW5jdGlvbiwgUHJlZGljYXRlSW5wdXQsIFByZWRpY2F0ZSB9IGZyb20gXCIuL3NyYy9wcmVkaWNhdGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgVG9rZW5pemVPcHRpb25zLCBLZXlPcHRpb25zLCBJZGVudGlmaWVyT3B0aW9ucywgRGVkZW50T3B0aW9ucywgRGVzY3JpcHRpb24gfSBmcm9tIFwiLi9zcmMvc3RyaW5nLXV0aWxzLnRzXCI7XG5leHBvcnQgeyBBQ0NFU1NfVE9LRU5fSEVBREVSLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIgfSBmcm9tIFwiLi9zcmMvdG9rZW4udHNcIjtcbiJdfQ==
|
package/lib/src/brand-utils.d.ts
CHANGED
|
@@ -10,14 +10,14 @@ import { z } from "zod";
|
|
|
10
10
|
/** Package asset references used when a brand context supplies no custom artwork. */
|
|
11
11
|
export declare const DEFAULT_BRAND_ASSETS: {
|
|
12
12
|
readonly icon: {
|
|
13
|
-
readonly light: "@dbx-tools/ui
|
|
14
|
-
readonly dark: "@dbx-tools/ui
|
|
13
|
+
readonly light: "@dbx-tools/ui/branding/assets/icon-light.svg";
|
|
14
|
+
readonly dark: "@dbx-tools/ui/branding/assets/icon-dark.svg";
|
|
15
15
|
};
|
|
16
16
|
readonly logo: {
|
|
17
|
-
readonly light: "@dbx-tools/ui
|
|
18
|
-
readonly dark: "@dbx-tools/ui
|
|
17
|
+
readonly light: "@dbx-tools/ui/branding/assets/logo-light.svg";
|
|
18
|
+
readonly dark: "@dbx-tools/ui/branding/assets/logo-dark.svg";
|
|
19
19
|
};
|
|
20
|
-
readonly favicon: "@dbx-tools/ui
|
|
20
|
+
readonly favicon: "@dbx-tools/ui/branding/assets/icon-light.svg";
|
|
21
21
|
};
|
|
22
22
|
/** Validates light and optional dark variants for one visual asset. */
|
|
23
23
|
export declare const BrandAssetSetSchema: z.ZodObject<{
|
package/lib/src/brand-utils.js
CHANGED
|
@@ -12,14 +12,14 @@ const color = z.string().regex(/^#(?:[\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i, "Expe
|
|
|
12
12
|
/** Package asset references used when a brand context supplies no custom artwork. */
|
|
13
13
|
export const DEFAULT_BRAND_ASSETS = {
|
|
14
14
|
icon: {
|
|
15
|
-
light: "@dbx-tools/ui
|
|
16
|
-
dark: "@dbx-tools/ui
|
|
15
|
+
light: "@dbx-tools/ui/branding/assets/icon-light.svg",
|
|
16
|
+
dark: "@dbx-tools/ui/branding/assets/icon-dark.svg",
|
|
17
17
|
},
|
|
18
18
|
logo: {
|
|
19
|
-
light: "@dbx-tools/ui
|
|
20
|
-
dark: "@dbx-tools/ui
|
|
19
|
+
light: "@dbx-tools/ui/branding/assets/logo-light.svg",
|
|
20
|
+
dark: "@dbx-tools/ui/branding/assets/logo-dark.svg",
|
|
21
21
|
},
|
|
22
|
-
favicon: "@dbx-tools/ui
|
|
22
|
+
favicon: "@dbx-tools/ui/branding/assets/icon-light.svg",
|
|
23
23
|
};
|
|
24
24
|
/** Validates light and optional dark variants for one visual asset. */
|
|
25
25
|
export const BrandAssetSetSchema = z
|
|
@@ -129,4 +129,4 @@ export function brandContextPrompt(context = defaultBrandContext) {
|
|
|
129
129
|
JSON.stringify(context, null, 2),
|
|
130
130
|
].join("\n");
|
|
131
131
|
}
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnJhbmQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFFcEcscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSw4Q0FBOEM7UUFDckQsSUFBSSxFQUFFLDZDQUE2QztLQUNwRDtJQUNELElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSw4Q0FBOEM7UUFDckQsSUFBSSxFQUFFLDZDQUE2QztLQUNwRDtJQUNELE9BQU8sRUFBRSw4Q0FBOEM7Q0FDL0MsQ0FBQztBQUVYLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDO0tBQ2pDLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDO0lBQzNELElBQUksRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGlEQUFpRCxDQUFDO0NBQzVGLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMsNkNBQTZDLENBQUMsQ0FBQztBQUUzRCxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQztLQUMvQixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMs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QixpQkFBaUIsRUFBRSxDQUFDO0FBRXJFLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBNEIsQ0FBQztBQUN2RSxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUF3QixtQkFBbUI7SUFDNUUsT0FBTztRQUNMLHFCQUFxQixPQUFPLENBQUMsSUFBSSw4REFBOEQ7UUFDL0Ysd0VBQXdFO1FBQ3hFLEVBQUU7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ2pDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3Nlci1zYWZlIGJyYW5kIGNvbnRyYWN0LCBkZWZhdWx0cywgYW5kIExMTSBzZXJpYWxpemF0aW9uIGhlbHBlcnMuXG4gKlxuICogQXNzZXQgdmFsdWVzIGFyZSBpbnRlbnRpb25hbGx5IHN0cmluZ3M6IHRoZXkgbWF5IGJlIHJlbGF0aXZlIGZpbGUgcGF0aHMsXG4gKiBwYWNrYWdlIGV4cG9ydHMsIGRhdGEgVVJMcywgb3IgbmV0d29yayBVUkxzIGRlcGVuZGluZyBvbiB0aGUgY29uc3VtZXIuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBub25CbGFua1N0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKTtcbmNvbnN0IGNvbG9yID0gei5zdHJpbmcoKS5yZWdleCgvXiMoPzpbXFxkYS1mXXszfXxbXFxkYS1mXXs2fXxbXFxkYS1mXXs4fSkkL2ksIFwiRXhwZWN0ZWQgYSBoZXggY29sb3IuXCIpO1xuXG4vKiogUGFja2FnZSBhc3NldCByZWZlcmVuY2VzIHVzZWQgd2hlbiBhIGJyYW5kIGNvbnRleHQgc3VwcGxpZXMgbm8gY3VzdG9tIGFydHdvcmsuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9CUkFORF9BU1NFVFMgPSB7XG4gIGljb246IHtcbiAgICBsaWdodDogXCJAZGJ4LXRvb2xzL3VpLWJyYW5kaW5nL2Fzc2V0cy9pY29uLWxpZ2h0LnN2Z1wiLFxuICAgIGRhcms6IFwiQGRieC10b29scy91aS1icmFuZGluZy9hc3NldHMvaWNvbi1kYXJrLnN2Z1wiLFxuICB9LFxuICBsb2dvOiB7XG4gICAgbGlnaHQ6IFwiQGRieC10b29scy91aS1icmFuZGluZy9hc3NldHMvbG9nby1saWdodC5zdmdcIixcbiAgICBkYXJrOiBcIkBkYngtdG9vbHMvdWktYnJhbmRpbmcvYXNzZXRzL2xvZ28tZGFyay5zdmdcIixcbiAgfSxcbiAgZmF2aWNvbjogXCJAZGJ4LXRvb2xzL3VpLWJyYW5kaW5nL2Fzc2V0cy9pY29uLWxpZ2h0LnN2Z1wiLFxufSBhcyBjb25zdDtcblxuLyoqIFZhbGlkYXRlcyBsaWdodCBhbmQgb3B0aW9uYWwgZGFyayB2YXJpYW50cyBmb3Igb25lIHZpc3VhbCBhc3NldC4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEFzc2V0U2V0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBsaWdodDogbm9uQmxhbmtTdHJpbmcuZGVzY3JpYmUoXCJBc3NldCBmb3IgbGlnaHQgc3VyZmFjZXMuXCIpLFxuICAgIGRhcms6IG5vbkJsYW5rU3RyaW5nLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBc3NldCBmb3IgZGFyayBzdXJmYWNlczsgbGlnaHQgaXMgdGhlIGZhbGxiYWNrLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIlRoZW1lLWF3YXJlIHJlZmVyZW5jZXMgdG8gb25lIHZpc3VhbCBhc3NldC5cIik7XG5cbi8qKiBTdHJpY3QgYnJhbmQgcGFsZXR0ZSB3aG9zZSBvbWl0dGVkIGNvbG9ycyByZXNvbHZlIHRvIHRoZSBkYnggdG9vbHMgZGVmYXVsdHMuICovXG5leHBvcnQgY29uc3QgQnJhbmRDb2xvcnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHByaW1hcnk6IGNvbG9yLmRlZmF1bHQoXCIjMUIzMTM5XCIpLmRlc2NyaWJlKFwiUHJpbWFyeSBhY3Rpb24gYW5kIGlkZW50aXR5IGNvbG9yLlwiKSxcbiAgICBwcmltYXJ5SG92ZXI6IGNvbG9yLmRlZmF1bHQoXCIjMEU1MzhCXCIpLmRlc2NyaWJlKFwiUHJpbWFyeSBob3ZlciBvciBwcmVzc2VkIGNvbG9yLlwiKSxcbiAgICBhY2NlbnQ6IGNvbG9yLmRlZmF1bHQoXCIjMDBBOTcyXCIpLmRlc2NyaWJlKFwiU2Vjb25kYXJ5IGFjY2VudCBjb2xvci5cIiksXG4gICAgZm9yZWdyb3VuZDogY29sb3IuZGVmYXVsdChcIiMxQjMxMzlcIikuZGVzY3JpYmUoXCJEZWZhdWx0IHRleHQgYW5kIG1hcmsgY29sb3IuXCIpLFxuICAgIGJhY2tncm91bmQ6IGNvbG9yLmRlZmF1bHQoXCIjRkZGRkZGXCIpLmRlc2NyaWJlKFwiRGVmYXVsdCBwYWdlIGJhY2tncm91bmQuXCIpLFxuICAgIHN1cmZhY2U6IGNvbG9yLmRlZmF1bHQoXCIjRjlGN0Y0XCIpLmRlc2NyaWJlKFwiU2Vjb25kYXJ5IHN1cmZhY2UgYmFja2dyb3VuZC5cIiksXG4gICAgbXV0ZWQ6IGNvbG9yLmRlZmF1bHQoXCIjNjE4Nzk0XCIpLmRlc2NyaWJlKFwiTXV0ZWQgdGV4dCBjb2xvci5cIiksXG4gICAgYm9yZGVyOiBjb2xvci5kZWZhdWx0KFwiI0U0RTJERFwiKS5kZXNjcmliZShcIkRlZmF1bHQgYm9yZGVyIGNvbG9yLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5wcmVmYXVsdCh7fSk7XG5cbi8qKiBTdHJpY3QgYXVkaWVuY2UsIHRvbmUsIHByaW5jaXBsZSwgYW5kIGF2b2lkYW5jZSBsaXN0cyB3aXRoIHByYWN0aWNhbCBkZWZhdWx0cy4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZFZvaWNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBhdWRpZW5jZTogelxuICAgICAgLmFycmF5KG5vbkJsYW5rU3RyaW5nKVxuICAgICAgLmRlZmF1bHQoW1wiRGF0YWJyaWNrcyBkZXZlbG9wZXJzXCIsIFwiYXBwbGljYXRpb24gZW5naW5lZXJzXCIsIFwiQUkgYWdlbnRzXCJdKSxcbiAgICB0b25lOiB6LmFycmF5KG5vbkJsYW5rU3RyaW5nKS5kZWZhdWx0KFtcImRpcmVjdFwiLCBcInByYWN0aWNhbFwiLCBcInRlY2huaWNhbFwiLCBcImFwcHJvYWNoYWJsZVwiXSksXG4gICAgcHJpbmNpcGxlczogelxuICAgICAgLmFycmF5KG5vbkJsYW5rU3RyaW5nKVxuICAgICAgLmRlZmF1bHQoW1xuICAgICAgICBcIkxlYWQgd2l0aCB0aGUgdXNlZnVsIG91dGNvbWUuXCIsXG4gICAgICAgIFwiUHJlZmVyIGNvbmNyZXRlIGV4YW1wbGVzIGFuZCBhY2N1cmF0ZSB0ZWNobmljYWwgbGFuZ3VhZ2UuXCIsXG4gICAgICAgIFwiS2VlcCBwcm9kdWN0IGNsYWltcyBzcGVjaWZpYyBhbmQgZGVmZW5zaWJsZS5cIixcbiAgICAgIF0pLFxuICAgIGF2b2lkOiB6XG4gICAgICAuYXJyYXkobm9uQmxhbmtTdHJpbmcpXG4gICAgICAuZGVmYXVsdChbXCJ1bnN1cHBvcnRlZCBzdXBlcmxhdGl2ZXNcIiwgXCJ2YWd1ZSBBSSBjbGFpbXNcIiwgXCJ1bm5lY2Vzc2FyeSBqYXJnb25cIl0pLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLnByZWZhdWx0KHt9KTtcblxuLyoqXG4gKiBTdHJpY3QgcG9ydGFibGUgYnJhbmQgY29udHJhY3QgdGhhdCBmaWxscyBpZGVudGl0eSwgYXNzZXRzLCBjb2xvcnMsXG4gKiB0eXBvZ3JhcGh5LCB2b2ljZSwgbGlua3MsIGFuZCBleHRlbnNpb24gZGVmYXVsdHMgZHVyaW5nIHBhcnNpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZENvbnRleHRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubGl0ZXJhbChcIjFcIikuZGVmYXVsdChcIjFcIiksXG4gICAgbmFtZTogbm9uQmxhbmtTdHJpbmcuZGVmYXVsdChcImRieCB0b29sc1wiKS5kZXNjcmliZShcIkNhbm9uaWNhbCBkaXNwbGF5IG5hbWUuXCIpLFxuICAgIHNob3J0TmFtZTogbm9uQmxhbmtTdHJpbmcuZGVmYXVsdChcImRieFwiKS5kZXNjcmliZShcIkNvbXBhY3QgbmFtZSBmb3IgY29uc3RyYWluZWQgVUkuXCIpLFxuICAgIHRhZ2xpbmU6IG5vbkJsYW5rU3RyaW5nXG4gICAgICAuZGVmYXVsdChcIlByYWN0aWNhbCB0b29scyBmb3IgRGF0YWJyaWNrcyBidWlsZGVycy5cIilcbiAgICAgIC5kZXNjcmliZShcIlNob3J0IHByb2R1Y3QgbGluZSBzdWl0YWJsZSBmb3IgYSBoZWFkZXIgb3IgbWV0YWRhdGEuXCIpLFxuICAgIGRlc2NyaXB0aW9uOiBub25CbGFua1N0cmluZ1xuICAgICAgLmRlZmF1bHQoXG4gICAgICAgIFwiQ29tcGFuaW9uIHBhY2thZ2VzIGZvciBEYXRhYnJpY2tzIGRldmVsb3BlcnMgYnVpbGRpbmcgYXBwcywgYWdlbnRzLCBkYXRhIHdvcmtmbG93cywgYW5kIHJldXNhYmxlIFVJLlwiLFxuICAgICAgKVxuICAgICAgLmRlc2NyaWJlKFwiUGxhaW4tbGFuZ3VhZ2UgcHJvZHVjdCBkZXNjcmlwdGlvbi5cIiksXG4gICAgYXNzZXRzOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgaWNvbjogQnJhbmRBc3NldFNldFNjaGVtYS5kZWZhdWx0KERFRkFVTFRfQlJBTkRfQVNTRVRTLmljb24pLFxuICAgICAgICBsb2dvOiBCcmFuZEFzc2V0U2V0U2NoZW1hLmRlZmF1bHQoREVGQVVMVF9CUkFORF9BU1NFVFMubG9nbyksXG4gICAgICAgIGZhdmljb246IG5vbkJsYW5rU3RyaW5nLmRlZmF1bHQoREVGQVVMVF9CUkFORF9BU1NFVFMuZmF2aWNvbiksXG4gICAgICB9KVxuICAgICAgLnN0cmljdCgpXG4gICAgICAuZGVmYXVsdChERUZBVUxUX0JSQU5EX0FTU0VUUyksXG4gICAgY29sb3JzOiBCcmFuZENvbG9yc1NjaGVtYSxcbiAgICB0eXBvZ3JhcGh5OiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgc2Fuczogbm9uQmxhbmtTdHJpbmcuZGVmYXVsdChcIidETSBTYW5zJywgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmXCIpLFxuICAgICAgICBtb25vOiBub25CbGFua1N0cmluZy5kZWZhdWx0KFwiJ0RNIE1vbm8nLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlXCIpLFxuICAgICAgfSlcbiAgICAgIC5zdHJpY3QoKVxuICAgICAgLnByZWZhdWx0KHt9KSxcbiAgICB2b2ljZTogQnJhbmRWb2ljZVNjaGVtYSxcbiAgICBsaW5rczogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHdlYnNpdGU6IHouc3RyaW5nKCkudXJsKCkub3B0aW9uYWwoKSxcbiAgICAgICAgcmVwb3NpdG9yeTogei5zdHJpbmcoKS51cmwoKS5vcHRpb25hbCgpLFxuICAgICAgICBkb2N1bWVudGF0aW9uOiB6LnN0cmluZygpLnVybCgpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLnN0cmljdCgpXG4gICAgICAuZGVmYXVsdCh7fSksXG4gICAgZXh0ZW5zaW9uczogelxuICAgICAgLnJlY29yZChub25CbGFua1N0cmluZywgei51bmtub3duKCkpXG4gICAgICAuZGVmYXVsdCh7fSlcbiAgICAgIC5kZXNjcmliZShcIk5hbWVzcGFjZWQgY29uc3VtZXItc3BlY2lmaWMgdmFsdWVzIHRoYXQgZG8gbm90IGJlbG9uZyBpbiB0aGUgcG9ydGFibGUgY29yZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQb3J0YWJsZSBpZGVudGl0eSwgdmlzdWFsLCBhbmQgdm9pY2UgY29udGV4dCBmb3IgVUksIGxpYnJhcmllcywgYW5kIExMTXMuXCIpO1xuXG4vKiogRnVsbHkgdmFsaWRhdGVkIGJyYW5kIGNvbnRleHQgYWZ0ZXIgZXZlcnkgc2NoZW1hIGRlZmF1bHQgaGFzIGJlZW4gYXBwbGllZC4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kQ29udGV4dCA9IHoub3V0cHV0PHR5cGVvZiBCcmFuZENvbnRleHRTY2hlbWE+O1xuLyoqIElucHV0IGFjY2VwdGVkIGJ5IHtAbGluayBCcmFuZENvbnRleHRTY2hlbWF9LCBiZWZvcmUgZGVmYXVsdHMgYXJlIG1hdGVyaWFsaXplZC4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kQ29udGV4dElucHV0ID0gei5pbnB1dDx0eXBlb2YgQnJhbmRDb250ZXh0U2NoZW1hPjtcbi8qKiBUaGVtZS1hd2FyZSBsaWdodCBhbmQgb3B0aW9uYWwgZGFyayByZWZlcmVuY2VzIGZvciBvbmUgYnJhbmQgYXNzZXQuICovXG5leHBvcnQgdHlwZSBCcmFuZEFzc2V0U2V0ID0gei5vdXRwdXQ8dHlwZW9mIEJyYW5kQXNzZXRTZXRTY2hlbWE+O1xuXG4vKiogVmFsaWRhdGUgaW5wdXQgYW5kIGZpbGwgZXZlcnkgZGJ4IHRvb2xzIGRlZmF1bHQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCcmFuZENvbnRleHQoaW5wdXQ6IHVua25vd24gPSB7fSk6IEJyYW5kQ29udGV4dCB7XG4gIHJldHVybiBCcmFuZENvbnRleHRTY2hlbWEucGFyc2UoaW5wdXQpO1xufVxuXG4vKiogQ2Fub25pY2FsIGRieCB0b29scyBicmFuZCBjb250ZXh0IHdpdGggYWxsIHNjaGVtYSBkZWZhdWx0cyByZXNvbHZlZC4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0QnJhbmRDb250ZXh0OiBCcmFuZENvbnRleHQgPSBwYXJzZUJyYW5kQ29udGV4dCgpO1xuXG4vKiogSlNPTiBTY2hlbWEgcmVwcmVzZW50YXRpb24gc3VpdGFibGUgZm9yIHN0cnVjdHVyZWQtb3V0cHV0IGFuZCB0b29sIGRlZmluaXRpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyYW5kQ29udGV4dEpzb25TY2hlbWEoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gei50b0pTT05TY2hlbWEoQnJhbmRDb250ZXh0U2NoZW1hKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFN0YWJsZSBwcm9tcHQgYmxvY2sgZm9yIGFuIExMTSB0aGF0IG5lZWRzIHRvIHdyaXRlIG9yIGRlc2lnbiBpbiB0aGlzIGJyYW5kLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyYW5kQ29udGV4dFByb21wdChjb250ZXh0OiBCcmFuZENvbnRleHQgPSBkZWZhdWx0QnJhbmRDb250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgVXNlIHRoZSBmb2xsb3dpbmcgJHtjb250ZXh0Lm5hbWV9IGJyYW5kIGNvbnRleHQgZm9yIG5hbWVzLCB2aXN1YWwgY2hvaWNlcywgYW5kIHdyaXRpbmcgdm9pY2UuYCxcbiAgICBcIlRyZWF0IGV4cGxpY2l0IHRhc2sgaW5zdHJ1Y3Rpb25zIGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgY29udGV4dC5cIixcbiAgICBcIlwiLFxuICAgIEpTT04uc3RyaW5naWZ5KGNvbnRleHQsIG51bGwsIDIpLFxuICBdLmpvaW4oXCJcXG5cIik7XG59XG4iXX0=
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnJhbmQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFFcEcscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSw4Q0FBOEM7UUFDckQsSUFBSSxFQUFFLDZDQUE2QztLQUNwRDtJQUNELElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSw4Q0FBOEM7UUFDckQsSUFBSSxFQUFFLDZDQUE2QztLQUNwRDtJQUNELE9BQU8sRUFBRSw4Q0FBOEM7Q0FDL0MsQ0FBQztBQUVYLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDO0tBQ2pDLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDO0lBQzNELElBQUksRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGlEQUFpRCxDQUFDO0NBQzVGLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMsNkNBQTZDLENBQUMsQ0FBQztBQUUzRCxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQztLQUMvQixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMs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QixpQkFBaUIsRUFBRSxDQUFDO0FBRXJFLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBNEIsQ0FBQztBQUN2RSxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUF3QixtQkFBbUI7SUFDNUUsT0FBTztRQUNMLHFCQUFxQixPQUFPLENBQUMsSUFBSSw4REFBOEQ7UUFDL0Ysd0VBQXdFO1FBQ3hFLEVBQUU7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ2pDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3Nlci1zYWZlIGJyYW5kIGNvbnRyYWN0LCBkZWZhdWx0cywgYW5kIExMTSBzZXJpYWxpemF0aW9uIGhlbHBlcnMuXG4gKlxuICogQXNzZXQgdmFsdWVzIGFyZSBpbnRlbnRpb25hbGx5IHN0cmluZ3M6IHRoZXkgbWF5IGJlIHJlbGF0aXZlIGZpbGUgcGF0aHMsXG4gKiBwYWNrYWdlIGV4cG9ydHMsIGRhdGEgVVJMcywgb3IgbmV0d29yayBVUkxzIGRlcGVuZGluZyBvbiB0aGUgY29uc3VtZXIuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBub25CbGFua1N0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKTtcbmNvbnN0IGNvbG9yID0gei5zdHJpbmcoKS5yZWdleCgvXiMoPzpbXFxkYS1mXXszfXxbXFxkYS1mXXs2fXxbXFxkYS1mXXs4fSkkL2ksIFwiRXhwZWN0ZWQgYSBoZXggY29sb3IuXCIpO1xuXG4vKiogUGFja2FnZSBhc3NldCByZWZlcmVuY2VzIHVzZWQgd2hlbiBhIGJyYW5kIGNvbnRleHQgc3VwcGxpZXMgbm8gY3VzdG9tIGFydHdvcmsuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9CUkFORF9BU1NFVFMgPSB7XG4gIGljb246IHtcbiAgICBsaWdodDogXCJAZGJ4LXRvb2xzL3VpL2JyYW5kaW5nL2Fzc2V0cy9pY29uLWxpZ2h0LnN2Z1wiLFxuICAgIGRhcms6IFwiQGRieC10b29scy91aS9icmFuZGluZy9hc3NldHMvaWNvbi1kYXJrLnN2Z1wiLFxuICB9LFxuICBsb2dvOiB7XG4gICAgbGlnaHQ6IFwiQGRieC10b29scy91aS9icmFuZGluZy9hc3NldHMvbG9nby1saWdodC5zdmdcIixcbiAgICBkYXJrOiBcIkBkYngtdG9vbHMvdWkvYnJhbmRpbmcvYXNzZXRzL2xvZ28tZGFyay5zdmdcIixcbiAgfSxcbiAgZmF2aWNvbjogXCJAZGJ4LXRvb2xzL3VpL2JyYW5kaW5nL2Fzc2V0cy9pY29uLWxpZ2h0LnN2Z1wiLFxufSBhcyBjb25zdDtcblxuLyoqIFZhbGlkYXRlcyBsaWdodCBhbmQgb3B0aW9uYWwgZGFyayB2YXJpYW50cyBmb3Igb25lIHZpc3VhbCBhc3NldC4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZEFzc2V0U2V0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBsaWdodDogbm9uQmxhbmtTdHJpbmcuZGVzY3JpYmUoXCJBc3NldCBmb3IgbGlnaHQgc3VyZmFjZXMuXCIpLFxuICAgIGRhcms6IG5vbkJsYW5rU3RyaW5nLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBc3NldCBmb3IgZGFyayBzdXJmYWNlczsgbGlnaHQgaXMgdGhlIGZhbGxiYWNrLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIlRoZW1lLWF3YXJlIHJlZmVyZW5jZXMgdG8gb25lIHZpc3VhbCBhc3NldC5cIik7XG5cbi8qKiBTdHJpY3QgYnJhbmQgcGFsZXR0ZSB3aG9zZSBvbWl0dGVkIGNvbG9ycyByZXNvbHZlIHRvIHRoZSBkYnggdG9vbHMgZGVmYXVsdHMuICovXG5leHBvcnQgY29uc3QgQnJhbmRDb2xvcnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHByaW1hcnk6IGNvbG9yLmRlZmF1bHQoXCIjMUIzMTM5XCIpLmRlc2NyaWJlKFwiUHJpbWFyeSBhY3Rpb24gYW5kIGlkZW50aXR5IGNvbG9yLlwiKSxcbiAgICBwcmltYXJ5SG92ZXI6IGNvbG9yLmRlZmF1bHQoXCIjMEU1MzhCXCIpLmRlc2NyaWJlKFwiUHJpbWFyeSBob3ZlciBvciBwcmVzc2VkIGNvbG9yLlwiKSxcbiAgICBhY2NlbnQ6IGNvbG9yLmRlZmF1bHQoXCIjMDBBOTcyXCIpLmRlc2NyaWJlKFwiU2Vjb25kYXJ5IGFjY2VudCBjb2xvci5cIiksXG4gICAgZm9yZWdyb3VuZDogY29sb3IuZGVmYXVsdChcIiMxQjMxMzlcIikuZGVzY3JpYmUoXCJEZWZhdWx0IHRleHQgYW5kIG1hcmsgY29sb3IuXCIpLFxuICAgIGJhY2tncm91bmQ6IGNvbG9yLmRlZmF1bHQoXCIjRkZGRkZGXCIpLmRlc2NyaWJlKFwiRGVmYXVsdCBwYWdlIGJhY2tncm91bmQuXCIpLFxuICAgIHN1cmZhY2U6IGNvbG9yLmRlZmF1bHQoXCIjRjlGN0Y0XCIpLmRlc2NyaWJlKFwiU2Vjb25kYXJ5IHN1cmZhY2UgYmFja2dyb3VuZC5cIiksXG4gICAgbXV0ZWQ6IGNvbG9yLmRlZmF1bHQoXCIjNjE4Nzk0XCIpLmRlc2NyaWJlKFwiTXV0ZWQgdGV4dCBjb2xvci5cIiksXG4gICAgYm9yZGVyOiBjb2xvci5kZWZhdWx0KFwiI0U0RTJERFwiKS5kZXNjcmliZShcIkRlZmF1bHQgYm9yZGVyIGNvbG9yLlwiKSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5wcmVmYXVsdCh7fSk7XG5cbi8qKiBTdHJpY3QgYXVkaWVuY2UsIHRvbmUsIHByaW5jaXBsZSwgYW5kIGF2b2lkYW5jZSBsaXN0cyB3aXRoIHByYWN0aWNhbCBkZWZhdWx0cy4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZFZvaWNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBhdWRpZW5jZTogelxuICAgICAgLmFycmF5KG5vbkJsYW5rU3RyaW5nKVxuICAgICAgLmRlZmF1bHQoW1wiRGF0YWJyaWNrcyBkZXZlbG9wZXJzXCIsIFwiYXBwbGljYXRpb24gZW5naW5lZXJzXCIsIFwiQUkgYWdlbnRzXCJdKSxcbiAgICB0b25lOiB6LmFycmF5KG5vbkJsYW5rU3RyaW5nKS5kZWZhdWx0KFtcImRpcmVjdFwiLCBcInByYWN0aWNhbFwiLCBcInRlY2huaWNhbFwiLCBcImFwcHJvYWNoYWJsZVwiXSksXG4gICAgcHJpbmNpcGxlczogelxuICAgICAgLmFycmF5KG5vbkJsYW5rU3RyaW5nKVxuICAgICAgLmRlZmF1bHQoW1xuICAgICAgICBcIkxlYWQgd2l0aCB0aGUgdXNlZnVsIG91dGNvbWUuXCIsXG4gICAgICAgIFwiUHJlZmVyIGNvbmNyZXRlIGV4YW1wbGVzIGFuZCBhY2N1cmF0ZSB0ZWNobmljYWwgbGFuZ3VhZ2UuXCIsXG4gICAgICAgIFwiS2VlcCBwcm9kdWN0IGNsYWltcyBzcGVjaWZpYyBhbmQgZGVmZW5zaWJsZS5cIixcbiAgICAgIF0pLFxuICAgIGF2b2lkOiB6XG4gICAgICAuYXJyYXkobm9uQmxhbmtTdHJpbmcpXG4gICAgICAuZGVmYXVsdChbXCJ1bnN1cHBvcnRlZCBzdXBlcmxhdGl2ZXNcIiwgXCJ2YWd1ZSBBSSBjbGFpbXNcIiwgXCJ1bm5lY2Vzc2FyeSBqYXJnb25cIl0pLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLnByZWZhdWx0KHt9KTtcblxuLyoqXG4gKiBTdHJpY3QgcG9ydGFibGUgYnJhbmQgY29udHJhY3QgdGhhdCBmaWxscyBpZGVudGl0eSwgYXNzZXRzLCBjb2xvcnMsXG4gKiB0eXBvZ3JhcGh5LCB2b2ljZSwgbGlua3MsIGFuZCBleHRlbnNpb24gZGVmYXVsdHMgZHVyaW5nIHBhcnNpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBCcmFuZENvbnRleHRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubGl0ZXJhbChcIjFcIikuZGVmYXVsdChcIjFcIiksXG4gICAgbmFtZTogbm9uQmxhbmtTdHJpbmcuZGVmYXVsdChcImRieCB0b29sc1wiKS5kZXNjcmliZShcIkNhbm9uaWNhbCBkaXNwbGF5IG5hbWUuXCIpLFxuICAgIHNob3J0TmFtZTogbm9uQmxhbmtTdHJpbmcuZGVmYXVsdChcImRieFwiKS5kZXNjcmliZShcIkNvbXBhY3QgbmFtZSBmb3IgY29uc3RyYWluZWQgVUkuXCIpLFxuICAgIHRhZ2xpbmU6IG5vbkJsYW5rU3RyaW5nXG4gICAgICAuZGVmYXVsdChcIlByYWN0aWNhbCB0b29scyBmb3IgRGF0YWJyaWNrcyBidWlsZGVycy5cIilcbiAgICAgIC5kZXNjcmliZShcIlNob3J0IHByb2R1Y3QgbGluZSBzdWl0YWJsZSBmb3IgYSBoZWFkZXIgb3IgbWV0YWRhdGEuXCIpLFxuICAgIGRlc2NyaXB0aW9uOiBub25CbGFua1N0cmluZ1xuICAgICAgLmRlZmF1bHQoXG4gICAgICAgIFwiQ29tcGFuaW9uIHBhY2thZ2VzIGZvciBEYXRhYnJpY2tzIGRldmVsb3BlcnMgYnVpbGRpbmcgYXBwcywgYWdlbnRzLCBkYXRhIHdvcmtmbG93cywgYW5kIHJldXNhYmxlIFVJLlwiLFxuICAgICAgKVxuICAgICAgLmRlc2NyaWJlKFwiUGxhaW4tbGFuZ3VhZ2UgcHJvZHVjdCBkZXNjcmlwdGlvbi5cIiksXG4gICAgYXNzZXRzOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgaWNvbjogQnJhbmRBc3NldFNldFNjaGVtYS5kZWZhdWx0KERFRkFVTFRfQlJBTkRfQVNTRVRTLmljb24pLFxuICAgICAgICBsb2dvOiBCcmFuZEFzc2V0U2V0U2NoZW1hLmRlZmF1bHQoREVGQVVMVF9CUkFORF9BU1NFVFMubG9nbyksXG4gICAgICAgIGZhdmljb246IG5vbkJsYW5rU3RyaW5nLmRlZmF1bHQoREVGQVVMVF9CUkFORF9BU1NFVFMuZmF2aWNvbiksXG4gICAgICB9KVxuICAgICAgLnN0cmljdCgpXG4gICAgICAuZGVmYXVsdChERUZBVUxUX0JSQU5EX0FTU0VUUyksXG4gICAgY29sb3JzOiBCcmFuZENvbG9yc1NjaGVtYSxcbiAgICB0eXBvZ3JhcGh5OiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgc2Fuczogbm9uQmxhbmtTdHJpbmcuZGVmYXVsdChcIidETSBTYW5zJywgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmXCIpLFxuICAgICAgICBtb25vOiBub25CbGFua1N0cmluZy5kZWZhdWx0KFwiJ0RNIE1vbm8nLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlXCIpLFxuICAgICAgfSlcbiAgICAgIC5zdHJpY3QoKVxuICAgICAgLnByZWZhdWx0KHt9KSxcbiAgICB2b2ljZTogQnJhbmRWb2ljZVNjaGVtYSxcbiAgICBsaW5rczogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHdlYnNpdGU6IHouc3RyaW5nKCkudXJsKCkub3B0aW9uYWwoKSxcbiAgICAgICAgcmVwb3NpdG9yeTogei5zdHJpbmcoKS51cmwoKS5vcHRpb25hbCgpLFxuICAgICAgICBkb2N1bWVudGF0aW9uOiB6LnN0cmluZygpLnVybCgpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLnN0cmljdCgpXG4gICAgICAuZGVmYXVsdCh7fSksXG4gICAgZXh0ZW5zaW9uczogelxuICAgICAgLnJlY29yZChub25CbGFua1N0cmluZywgei51bmtub3duKCkpXG4gICAgICAuZGVmYXVsdCh7fSlcbiAgICAgIC5kZXNjcmliZShcIk5hbWVzcGFjZWQgY29uc3VtZXItc3BlY2lmaWMgdmFsdWVzIHRoYXQgZG8gbm90IGJlbG9uZyBpbiB0aGUgcG9ydGFibGUgY29yZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQb3J0YWJsZSBpZGVudGl0eSwgdmlzdWFsLCBhbmQgdm9pY2UgY29udGV4dCBmb3IgVUksIGxpYnJhcmllcywgYW5kIExMTXMuXCIpO1xuXG4vKiogRnVsbHkgdmFsaWRhdGVkIGJyYW5kIGNvbnRleHQgYWZ0ZXIgZXZlcnkgc2NoZW1hIGRlZmF1bHQgaGFzIGJlZW4gYXBwbGllZC4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kQ29udGV4dCA9IHoub3V0cHV0PHR5cGVvZiBCcmFuZENvbnRleHRTY2hlbWE+O1xuLyoqIElucHV0IGFjY2VwdGVkIGJ5IHtAbGluayBCcmFuZENvbnRleHRTY2hlbWF9LCBiZWZvcmUgZGVmYXVsdHMgYXJlIG1hdGVyaWFsaXplZC4gKi9cbmV4cG9ydCB0eXBlIEJyYW5kQ29udGV4dElucHV0ID0gei5pbnB1dDx0eXBlb2YgQnJhbmRDb250ZXh0U2NoZW1hPjtcbi8qKiBUaGVtZS1hd2FyZSBsaWdodCBhbmQgb3B0aW9uYWwgZGFyayByZWZlcmVuY2VzIGZvciBvbmUgYnJhbmQgYXNzZXQuICovXG5leHBvcnQgdHlwZSBCcmFuZEFzc2V0U2V0ID0gei5vdXRwdXQ8dHlwZW9mIEJyYW5kQXNzZXRTZXRTY2hlbWE+O1xuXG4vKiogVmFsaWRhdGUgaW5wdXQgYW5kIGZpbGwgZXZlcnkgZGJ4IHRvb2xzIGRlZmF1bHQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCcmFuZENvbnRleHQoaW5wdXQ6IHVua25vd24gPSB7fSk6IEJyYW5kQ29udGV4dCB7XG4gIHJldHVybiBCcmFuZENvbnRleHRTY2hlbWEucGFyc2UoaW5wdXQpO1xufVxuXG4vKiogQ2Fub25pY2FsIGRieCB0b29scyBicmFuZCBjb250ZXh0IHdpdGggYWxsIHNjaGVtYSBkZWZhdWx0cyByZXNvbHZlZC4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0QnJhbmRDb250ZXh0OiBCcmFuZENvbnRleHQgPSBwYXJzZUJyYW5kQ29udGV4dCgpO1xuXG4vKiogSlNPTiBTY2hlbWEgcmVwcmVzZW50YXRpb24gc3VpdGFibGUgZm9yIHN0cnVjdHVyZWQtb3V0cHV0IGFuZCB0b29sIGRlZmluaXRpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyYW5kQ29udGV4dEpzb25TY2hlbWEoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gei50b0pTT05TY2hlbWEoQnJhbmRDb250ZXh0U2NoZW1hKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFN0YWJsZSBwcm9tcHQgYmxvY2sgZm9yIGFuIExMTSB0aGF0IG5lZWRzIHRvIHdyaXRlIG9yIGRlc2lnbiBpbiB0aGlzIGJyYW5kLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyYW5kQ29udGV4dFByb21wdChjb250ZXh0OiBCcmFuZENvbnRleHQgPSBkZWZhdWx0QnJhbmRDb250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgVXNlIHRoZSBmb2xsb3dpbmcgJHtjb250ZXh0Lm5hbWV9IGJyYW5kIGNvbnRleHQgZm9yIG5hbWVzLCB2aXN1YWwgY2hvaWNlcywgYW5kIHdyaXRpbmcgdm9pY2UuYCxcbiAgICBcIlRyZWF0IGV4cGxpY2l0IHRhc2sgaW5zdHJ1Y3Rpb25zIGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgY29udGV4dC5cIixcbiAgICBcIlwiLFxuICAgIEpTT04uc3RyaW5naWZ5KGNvbnRleHQsIG51bGwsIDIpLFxuICBdLmpvaW4oXCJcXG5cIik7XG59XG4iXX0=
|
package/lib/src/http.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* of those shapes. Dependency-free and browser-safe so it can run in
|
|
7
7
|
* either a server or a client bundle.
|
|
8
8
|
*
|
|
9
|
-
* URL path matching lives
|
|
9
|
+
* URL path matching lives on `net.urlBuilder` (`pathMatches`).
|
|
10
10
|
*
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
package/lib/src/http.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* of those shapes. Dependency-free and browser-safe so it can run in
|
|
7
7
|
* either a server or a client bundle.
|
|
8
8
|
*
|
|
9
|
-
* URL path matching lives
|
|
9
|
+
* URL path matching lives on `net.urlBuilder` (`pathMatches`).
|
|
10
10
|
*
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
@@ -186,4 +186,4 @@ function unwrap(input) {
|
|
|
186
186
|
return input.headers;
|
|
187
187
|
return input;
|
|
188
188
|
}
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBNEJILG1FQUFtRTtBQUNuRSxpQkFBaUI7QUFDakIsbUVBQW1FO0FBRW5FOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLEtBQW9DLEVBQ3BDLFVBQWtCLEVBQ2xCLFFBQWlDO0lBRWpDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU87SUFFckIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXhDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkIsZ0VBQWdFO1FBQ2hFLCtEQUErRDtRQUMvRCwrREFBK0Q7UUFDL0Qsc0RBQXNEO1FBQ3RELElBQUksTUFBTSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtZQUFFLFNBQVM7UUFDNUQsSUFBSSxLQUFLLENBQUMs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cmVhZGVycyBmb3IgSFRUUCByZXF1ZXN0cywgc2hhcmVkIGFjcm9zcyBBcHBLaXRcbiAqIHBsdWdpbnM6IGhlYWRlciBhbmQgY29va2llIGV4dHJhY3Rpb24uIFdvcmtzIHVuaWZvcm1seSBhY3Jvc3NcbiAqIEV4cHJlc3MsIE5vZGUgYEluY29taW5nTWVzc2FnZWAsIFdIQVRXRyBgUmVxdWVzdGAgLyBgUmVzcG9uc2VgIC9cbiAqIGBIZWFkZXJzYCwgSG9ubywgYW5kIGFueSBvYmplY3QgdGhhdCBleHBvc2VzIGEgYGhlYWRlcnNgIGZpZWxkIG9mIG9uZVxuICogb2YgdGhvc2Ugc2hhcGVzLiBEZXBlbmRlbmN5LWZyZWUgYW5kIGJyb3dzZXItc2FmZSBzbyBpdCBjYW4gcnVuIGluXG4gKiBlaXRoZXIgYSBzZXJ2ZXIgb3IgYSBjbGllbnQgYnVuZGxlLlxuICpcbiAqIFVSTCBwYXRoIG1hdGNoaW5nIGxpdmVzIGluIGAuL25ldC5icm93c2VyLnRzYCAoYHBhdGhNYXRjaGApLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBbnl0aGluZyB0aGF0IGNvbnRhaW5zIEhUVFAgaGVhZGVycy4gQWNjZXB0czpcbiAqXG4gKiAtIEEgV0hBVFdHIGBIZWFkZXJzYCBpbnN0YW5jZSAoZmV0Y2ggLyB1bmRpY2kgLyBIb25vIGBjLnJlcS5yYXcuaGVhZGVyc2ApLlxuICogLSBBIGhlYWRlciByZWNvcmQgKGBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD5gKSxcbiAqICAgTm9kZSAvIEV4cHJlc3Mgc3R5bGUuXG4gKiAtIEFueSBvYmplY3Qgd2l0aCBhIGBoZWFkZXJzYCBmaWVsZCBvZiBvbmUgb2YgdGhlIGFib3ZlLiBUaGlzIGNvdmVyc1xuICogICBFeHByZXNzIGByZXFgLCBOb2RlIGBJbmNvbWluZ01lc3NhZ2VgLCBXSEFUV0cgYFJlcXVlc3RgIC8gYFJlc3BvbnNlYCxcbiAqICAgSG9ubyBgYy5yZXEucmF3YCwgYW5kIHNpbWlsYXIgc2hhcGVzLlxuICovXG5leHBvcnQgdHlwZSBIZWFkZXJMaWtlID0gSGVhZGVycyB8IEhlYWRlclJlY29yZCB8IHsgaGVhZGVyczogSGVhZGVycyB8IEhlYWRlclJlY29yZCB9O1xuXG4vKipcbiAqIFNpbmdsZSBoZWFkZXIgdmFsdWUgYXMgZXhwb3NlZCBieSBOb2RlIGBJbmNvbWluZ01lc3NhZ2UuaGVhZGVyc2AgYW5kXG4gKiBFeHByZXNzIGByZXEuaGVhZGVyc2AgKHN0cmluZyBmb3IgbW9zdCBoZWFkZXJzLCBhcnJheSBmb3IgcmVwZWF0ZWRcbiAqIGhlYWRlcnMgc3VjaCBhcyBgU2V0LUNvb2tpZWApLlxuICovXG50eXBlIEhlYWRlclZhbHVlTGlrZSA9IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogSGVhZGVyIGJhZyB3aXRoIGNhc2UtaW5zZW5zaXRpdmUga2V5cyAoTm9kZSAvIEV4cHJlc3Mgc3R5bGUpLiAqL1xudHlwZSBIZWFkZXJSZWNvcmQgPSBSZWNvcmQ8c3RyaW5nLCBIZWFkZXJWYWx1ZUxpa2U+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEhlYWRlciBoZWxwZXJzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBJbnZva2VzIGBjb25zdW1lcmAgb25jZSBwZXIgdmFsdWUgZm9yIGBoZWFkZXJOYW1lYCwgY2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiAtICoqUmVjb3JkIGlucHV0OioqIGlmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSAoZS5nLiByZXBlYXRlZCBgU2V0LUNvb2tpZWApLFxuICogICBgY29uc3VtZXJgIHJ1bnMgb25jZSBwZXIgYXJyYXkgaXRlbS5cbiAqIC0gKipgSGVhZGVyc2AgaW5wdXQ6KiogdXNlcyBgZ2V0KG5hbWUpYCAod2hpY2ggc3BlYy1qb2lucyByZXBlYXRzIHdpdGhcbiAqICAgYCwgYCkgZXhjZXB0IGZvciBgU2V0LUNvb2tpZWAsIHdoaWNoIHVzZXMgYGdldFNldENvb2tpZSgpYCBzbyBlYWNoXG4gKiAgIGNvb2tpZSBpcyBkZWxpdmVyZWQgc2VwYXJhdGVseS5cbiAqXG4gKiBAZXhhbXBsZVxuICogZm9yRWFjaEhlYWRlclZhbHVlKHJlcSwgXCJ4LXRyYWNlLWlkXCIsICh2KSA9PiBzcGFucy5wdXNoKHYpKTsgICAgIC8vIEV4cHJlc3NcbiAqIGZvckVhY2hIZWFkZXJWYWx1ZShjLnJlcS5yYXcsIFwic2V0LWNvb2tpZVwiLCAodikgPT4gbG9nKHYpKTsgICAgICAvLyBIb25vXG4gKiBmb3JFYWNoSGVhZGVyVmFsdWUoaGVhZGVyc0luc3RhbmNlLCBcImNvb2tpZVwiLCBwYXJzZSk7ICAgICAgICAgICAgLy8gZmV0Y2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hIZWFkZXJWYWx1ZShcbiAgaW5wdXQ6IEhlYWRlckxpa2UgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBoZWFkZXJOYW1lOiBzdHJpbmcsXG4gIGNvbnN1bWVyOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcbik6IHZvaWQge1xuICBjb25zdCBoZWFkZXJzID0gdW53cmFwKGlucHV0KTtcbiAgaWYgKCFoZWFkZXJzKSByZXR1cm47XG5cbiAgY29uc3QgdGFyZ2V0ID0gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChpc0hlYWRlcnMoaGVhZGVycykpIHtcbiAgICAvLyBgSGVhZGVycy5nZXRgIGpvaW5zIHJlcGVhdGVkIHZhbHVlcyB3aXRoIGAsIGAgcGVyIHNwZWMsIHdoaWNoXG4gICAgLy8gbWFuZ2xlcyBgU2V0LUNvb2tpZWAgKGNvb2tpZXMgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29tbWFzIGluXG4gICAgLy8gdGhlaXIgYGV4cGlyZXM9YCBhdHRyaWJ1dGUpLiBgZ2V0U2V0Q29va2llYCBpcyB0aGUgZGVkaWNhdGVkXG4gICAgLy8gc3BsaXR0ZXIgYW5kIGlzIHRoZSBvbmx5IHNhZmUgcGF0aCBmb3IgdGhhdCBoZWFkZXIuXG4gICAgaWYgKHRhcmdldCA9PT0gXCJzZXQtY29va2llXCIpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaGVhZGVycy5nZXRTZXRDb29raWUoKSkgY29uc3VtZXIodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgY29uc3VtZXIodmFsdWUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwga2V5LnRvTG93ZXJDYXNlKCkgIT09IHRhcmdldCkgY29udGludWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIGNvbnN1bWVyKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdW1lcih2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIGBDb29raWVgIGhlYWRlciB2YWx1ZXMgaW50byBhIG5hbWUtdG8tdmFsdWUgbWFwIChVUkktZGVjb2RlZCkuXG4gKlxuICogQWNjZXB0czpcbiAqXG4gKiAtIEEgcmF3IGBDb29raWVgIHN0cmluZyAoYFwiYT0xOyBiPTJcImApLlxuICogLSBBbiBhcnJheSBvZiBzdWNoIHN0cmluZ3MgKGUuZy4gbXVsdGlwbGUgYENvb2tpZWAgaGVhZGVycykuXG4gKiAtIEFueSB7QGxpbmsgSGVhZGVyTGlrZX06IGEgV0hBVFdHIGBIZWFkZXJzYCBpbnN0YW5jZSwgYSBoZWFkZXJcbiAqICAgcmVjb3JkLCBvciBhIHJlcXVlc3QtbGlrZSBvYmplY3Qgd2l0aCBhIGBoZWFkZXJzYCBmaWVsZC5cbiAqXG4gKiBGaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggY29va2llIG5hbWUgd2luczsgbGF0ZXIgZHVwbGljYXRlcyBhcmUgaWdub3JlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VDb29raWVzKFwic2Vzc2lvbj1hYmM7IHRoZW1lPWRhcmtcIik7XG4gKiAvLyB7IHNlc3Npb246IFwiYWJjXCIsIHRoZW1lOiBcImRhcmtcIiB9XG4gKlxuICogcGFyc2VDb29raWVzKHJlcSk7ICAgICAgICAgICAgICAvLyBFeHByZXNzIC8gTm9kZVxuICogcGFyc2VDb29raWVzKGMucmVxLnJhdyk7ICAgICAgICAvLyBIb25vXG4gKiBwYXJzZUNvb2tpZXMocmVxdWVzdCk7ICAgICAgICAgIC8vIGZldGNoIFJlcXVlc3RcbiAqIHBhcnNlQ29va2llcyhyZXF1ZXN0LmhlYWRlcnMpOyAgLy8gV0hBVFdHIEhlYWRlcnMgZGlyZWN0bHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29va2llcyhpbnB1dDogSGVhZGVyTGlrZSB8IEhlYWRlclZhbHVlTGlrZSB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgaWYgKGlucHV0ID09IG51bGwpIHJldHVybiB7fTtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHBhcnNlQ29va2llU3RyaW5nKGlucHV0LCBvdXQpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikgcGFyc2VDb29raWVTdHJpbmcoaXRlbSwgb3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZvckVhY2hIZWFkZXJWYWx1ZShpbnB1dCwgXCJjb29raWVcIiwgKHZhbHVlKSA9PiB7XG4gICAgcGFyc2VDb29raWVTdHJpbmcodmFsdWUsIG91dCk7XG4gIH0pO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEJ1aWxkIGFuIGBFcnJvcmAgZGVzY3JpYmluZyBhIGZhaWxlZCBgZmV0Y2hgIHJlc3BvbnNlOiBzdGF0dXMgbGluZSxcbiAqIHRoZSBVUkwocykgaW52b2x2ZWQgKHRoZSByZXF1ZXN0ZWQgYHVybGAgYW5kIHRoZSBmaW5hbCBgcmVzcG9uc2UudXJsYFxuICogYWZ0ZXIgcmVkaXJlY3RzLCBkZS1kdXBsaWNhdGVkKSwgYW5kIGEgdHJ1bmNhdGVkIHNuYXBzaG90IG9mIHRoZVxuICogcmVzcG9uc2UgYm9keS4gUmVhZHMgdGhlIGJvZHkgZGVmZW5zaXZlbHkgLSBhIGJvZHkgdGhhdCBjYW4ndCBiZSByZWFkXG4gKiBpcyBzaW1wbHkgb21pdHRlZC4gQ2FsbCBvbmx5IG9uIGEgbm9uLWBva2AgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGZXRjaEVycm9yKHJlc3BvbnNlOiBSZXNwb25zZSwgdXJsPzogc3RyaW5nKTogUHJvbWlzZTxFcnJvcj4ge1xuICBsZXQgYm9keSA9IFwiXCI7XG4gIHRyeSB7XG4gICAgYm9keSA9IChhd2FpdCByZXNwb25zZS50ZXh0KCkpLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlXG4gIH1cbiAgaWYgKGJvZHkubGVuZ3RoID4gMV8wMDApIHtcbiAgICBib2R5ID0gYCR7Ym9keS5zbGljZSgwLCAxXzAwMCl94oCmYDtcbiAgfVxuICBjb25zdCB1cmxTdW1tYXJ5ID0gWy4uLm5ldyBTZXQoW3VybCwgcmVzcG9uc2UudXJsXS5maWx0ZXIoQm9vbGVhbikpXS5qb2luKFwiIC0+IFwiKTtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBbXG4gICAgICBgUmVxdWVzdCBmYWlsZWQuYCxcbiAgICAgIGAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICAgICBgJHt1cmxTdW1tYXJ5fWAsXG4gICAgICBib2R5ICYmIGBSZXNwb25zZTpcXG4ke2JvZHl9YCxcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIlxcblwiKSxcbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBQcml2YXRlIGhlbHBlcnNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgZm9yIFdIQVRXRyBgSGVhZGVyc2AuIER1Y2stdHlwZXMgb24gdGhlIHR3byBtZXRob2RzIHRoYXRcbiAqIG1hdHRlciB0byB0aGlzIG1vZHVsZSAoYGdldGAgYW5kIGBnZXRTZXRDb29raWVgKSBzbyBwb2x5ZmlsbGVkXG4gKiBpbXBsZW1lbnRhdGlvbnMgYW5kIEhvbm8ncyBgSG9ub0hlYWRlcnNgIGFyZSBhY2NlcHRlZCB3aXRob3V0XG4gKiBwdWxsaW5nIGBIZWFkZXJzYCBpbiBhcyBhIGhhcmQgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gaXNIZWFkZXJzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSGVhZGVycyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgKHZhbHVlIGFzIEhlYWRlcnMpLmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mICh2YWx1ZSBhcyBIZWFkZXJzKS5nZXRTZXRDb29raWUgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuXG4vKipcbiAqIGBIZWFkZXJSZWNvcmRgIGlzIGFuIGluZGV4IHNpZ25hdHVyZSwgc28gYFwiaGVhZGVyc1wiIGluIGlucHV0YCBjYW5ub3RcbiAqIGRpc2NyaW1pbmF0ZSBpdCBmcm9tIHRoZSB3cmFwcGVkIGB7IGhlYWRlcnMgfWAgc2hhcGUgYXQgdGhlIHR5cGVcbiAqIGxldmVsLiBUaGlzIGd1YXJkIGluc3BlY3RzIHRoZSBydW50aW1lIHZhbHVlIG9mIGBoZWFkZXJzYDogb25seVxuICogb2JqZWN0cyAoYEhlYWRlcnNgIG9yIGEgbmVzdGVkIHJlY29yZCkgcXVhbGlmeSBhcyB0aGUgd3JhcHBlciBzaGFwZSxcbiAqIG5ldmVyIHN0cmF5IHN0cmluZy9hcnJheSB2YWx1ZXMgdGhhdCBoYXBwZW4gdG8gbGl2ZSB1bmRlciBhIGBoZWFkZXJzYFxuICoga2V5IG9uIGEgaGVhZGVyIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gaXNXcmFwcGVkKFxuICBpbnB1dDogSGVhZGVyUmVjb3JkIHwgeyBoZWFkZXJzOiBIZWFkZXJzIHwgSGVhZGVyUmVjb3JkIH0sXG4pOiBpbnB1dCBpcyB7IGhlYWRlcnM6IEhlYWRlcnMgfCBIZWFkZXJSZWNvcmQgfSB7XG4gIGNvbnN0IGhlYWRlcnMgPSAoaW5wdXQgYXMgeyBoZWFkZXJzPzogdW5rbm93biB9KS5oZWFkZXJzO1xuICByZXR1cm4gaGVhZGVycyAhPSBudWxsICYmIHR5cGVvZiBoZWFkZXJzID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGhlYWRlcnMpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIGBDb29raWVgLXN0eWxlIGhlYWRlciBzdHJpbmcgKGBcImE9MTsgYj0yXCJgKSBpbnRvXG4gKiBgb3V0YC4gTmFtZXMgd2l0aG91dCBhIHZhbHVlIGFyZSBza2lwcGVkOyBmaXJzdCBvY2N1cnJlbmNlIHdpbnMgc29cbiAqIGxhdGVyIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQuIENvb2tpZSB2YWx1ZXMgYXJlIFVSSS1kZWNvZGVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvb2tpZVN0cmluZyhpbnB1dDogc3RyaW5nLCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIGlucHV0LnNwbGl0KFwiO1wiKSkge1xuICAgIGNvbnN0IGVxID0gcGFydC5pbmRleE9mKFwiPVwiKTtcbiAgICBpZiAoZXEgPCAwKSBjb250aW51ZTtcbiAgICBjb25zdCBuYW1lID0gcGFydC5zbGljZSgwLCBlcSkudHJpbSgpO1xuICAgIGlmICghbmFtZSB8fCBuYW1lIGluIG91dCkgY29udGludWU7XG4gICAgY29uc3QgcmF3ID0gcGFydC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICBvdXRbbmFtZV0gPSBkZWNvZGVVUklDb21wb25lbnQocmF3KTtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHtAbGluayBIZWFkZXJMaWtlfSBpbnB1dCBkb3duIHRvIGVpdGhlciBhIGBIZWFkZXJzYFxuICogaW5zdGFuY2Ugb3IgYSBoZWFkZXIgYFJlY29yZGAuIFJldHVybnMgYG51bGxgIGZvciBtaXNzaW5nIGlucHV0IHNvXG4gKiBjYWxsZXJzIGNhbiBzaG9ydC1jaXJjdWl0IHdpdGhvdXQgYSBzZXBhcmF0ZSBudWxsaXNoIGNoZWNrLlxuICovXG5mdW5jdGlvbiB1bndyYXAoaW5wdXQ6IEhlYWRlckxpa2UgfCBudWxsIHwgdW5kZWZpbmVkKTogSGVhZGVycyB8IEhlYWRlclJlY29yZCB8IG51bGwge1xuICBpZiAoaW5wdXQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGlmIChpc0hlYWRlcnMoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpc1dyYXBwZWQoaW5wdXQpKSByZXR1cm4gaW5wdXQuaGVhZGVycztcbiAgcmV0dXJuIGlucHV0O1xufVxuIl19
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBNEJILG1FQUFtRTtBQUNuRSxpQkFBaUI7QUFDakIsbUVBQW1FO0FBRW5FOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLEtBQW9DLEVBQ3BDLFVBQWtCLEVBQ2xCLFFBQWlDO0lBRWpDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU87SUFFckIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXhDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkIsZ0VBQWdFO1FBQ2hFLCtEQUErRDtRQUMvRCwrREFBK0Q7UUFDL0Qsc0RBQXNEO1FBQ3RELElBQUksTUFBTSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtZQUFFLFNBQVM7UUFDNUQsSUFBSSxLQUFLLENBQUMs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cmVhZGVycyBmb3IgSFRUUCByZXF1ZXN0cywgc2hhcmVkIGFjcm9zcyBBcHBLaXRcbiAqIHBsdWdpbnM6IGhlYWRlciBhbmQgY29va2llIGV4dHJhY3Rpb24uIFdvcmtzIHVuaWZvcm1seSBhY3Jvc3NcbiAqIEV4cHJlc3MsIE5vZGUgYEluY29taW5nTWVzc2FnZWAsIFdIQVRXRyBgUmVxdWVzdGAgLyBgUmVzcG9uc2VgIC9cbiAqIGBIZWFkZXJzYCwgSG9ubywgYW5kIGFueSBvYmplY3QgdGhhdCBleHBvc2VzIGEgYGhlYWRlcnNgIGZpZWxkIG9mIG9uZVxuICogb2YgdGhvc2Ugc2hhcGVzLiBEZXBlbmRlbmN5LWZyZWUgYW5kIGJyb3dzZXItc2FmZSBzbyBpdCBjYW4gcnVuIGluXG4gKiBlaXRoZXIgYSBzZXJ2ZXIgb3IgYSBjbGllbnQgYnVuZGxlLlxuICpcbiAqIFVSTCBwYXRoIG1hdGNoaW5nIGxpdmVzIG9uIGBuZXQudXJsQnVpbGRlcmAgKGBwYXRoTWF0Y2hlc2ApLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBbnl0aGluZyB0aGF0IGNvbnRhaW5zIEhUVFAgaGVhZGVycy4gQWNjZXB0czpcbiAqXG4gKiAtIEEgV0hBVFdHIGBIZWFkZXJzYCBpbnN0YW5jZSAoZmV0Y2ggLyB1bmRpY2kgLyBIb25vIGBjLnJlcS5yYXcuaGVhZGVyc2ApLlxuICogLSBBIGhlYWRlciByZWNvcmQgKGBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD5gKSxcbiAqICAgTm9kZSAvIEV4cHJlc3Mgc3R5bGUuXG4gKiAtIEFueSBvYmplY3Qgd2l0aCBhIGBoZWFkZXJzYCBmaWVsZCBvZiBvbmUgb2YgdGhlIGFib3ZlLiBUaGlzIGNvdmVyc1xuICogICBFeHByZXNzIGByZXFgLCBOb2RlIGBJbmNvbWluZ01lc3NhZ2VgLCBXSEFUV0cgYFJlcXVlc3RgIC8gYFJlc3BvbnNlYCxcbiAqICAgSG9ubyBgYy5yZXEucmF3YCwgYW5kIHNpbWlsYXIgc2hhcGVzLlxuICovXG5leHBvcnQgdHlwZSBIZWFkZXJMaWtlID0gSGVhZGVycyB8IEhlYWRlclJlY29yZCB8IHsgaGVhZGVyczogSGVhZGVycyB8IEhlYWRlclJlY29yZCB9O1xuXG4vKipcbiAqIFNpbmdsZSBoZWFkZXIgdmFsdWUgYXMgZXhwb3NlZCBieSBOb2RlIGBJbmNvbWluZ01lc3NhZ2UuaGVhZGVyc2AgYW5kXG4gKiBFeHByZXNzIGByZXEuaGVhZGVyc2AgKHN0cmluZyBmb3IgbW9zdCBoZWFkZXJzLCBhcnJheSBmb3IgcmVwZWF0ZWRcbiAqIGhlYWRlcnMgc3VjaCBhcyBgU2V0LUNvb2tpZWApLlxuICovXG50eXBlIEhlYWRlclZhbHVlTGlrZSA9IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKiogSGVhZGVyIGJhZyB3aXRoIGNhc2UtaW5zZW5zaXRpdmUga2V5cyAoTm9kZSAvIEV4cHJlc3Mgc3R5bGUpLiAqL1xudHlwZSBIZWFkZXJSZWNvcmQgPSBSZWNvcmQ8c3RyaW5nLCBIZWFkZXJWYWx1ZUxpa2U+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEhlYWRlciBoZWxwZXJzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBJbnZva2VzIGBjb25zdW1lcmAgb25jZSBwZXIgdmFsdWUgZm9yIGBoZWFkZXJOYW1lYCwgY2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiAtICoqUmVjb3JkIGlucHV0OioqIGlmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSAoZS5nLiByZXBlYXRlZCBgU2V0LUNvb2tpZWApLFxuICogICBgY29uc3VtZXJgIHJ1bnMgb25jZSBwZXIgYXJyYXkgaXRlbS5cbiAqIC0gKipgSGVhZGVyc2AgaW5wdXQ6KiogdXNlcyBgZ2V0KG5hbWUpYCAod2hpY2ggc3BlYy1qb2lucyByZXBlYXRzIHdpdGhcbiAqICAgYCwgYCkgZXhjZXB0IGZvciBgU2V0LUNvb2tpZWAsIHdoaWNoIHVzZXMgYGdldFNldENvb2tpZSgpYCBzbyBlYWNoXG4gKiAgIGNvb2tpZSBpcyBkZWxpdmVyZWQgc2VwYXJhdGVseS5cbiAqXG4gKiBAZXhhbXBsZVxuICogZm9yRWFjaEhlYWRlclZhbHVlKHJlcSwgXCJ4LXRyYWNlLWlkXCIsICh2KSA9PiBzcGFucy5wdXNoKHYpKTsgICAgIC8vIEV4cHJlc3NcbiAqIGZvckVhY2hIZWFkZXJWYWx1ZShjLnJlcS5yYXcsIFwic2V0LWNvb2tpZVwiLCAodikgPT4gbG9nKHYpKTsgICAgICAvLyBIb25vXG4gKiBmb3JFYWNoSGVhZGVyVmFsdWUoaGVhZGVyc0luc3RhbmNlLCBcImNvb2tpZVwiLCBwYXJzZSk7ICAgICAgICAgICAgLy8gZmV0Y2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hIZWFkZXJWYWx1ZShcbiAgaW5wdXQ6IEhlYWRlckxpa2UgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBoZWFkZXJOYW1lOiBzdHJpbmcsXG4gIGNvbnN1bWVyOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcbik6IHZvaWQge1xuICBjb25zdCBoZWFkZXJzID0gdW53cmFwKGlucHV0KTtcbiAgaWYgKCFoZWFkZXJzKSByZXR1cm47XG5cbiAgY29uc3QgdGFyZ2V0ID0gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChpc0hlYWRlcnMoaGVhZGVycykpIHtcbiAgICAvLyBgSGVhZGVycy5nZXRgIGpvaW5zIHJlcGVhdGVkIHZhbHVlcyB3aXRoIGAsIGAgcGVyIHNwZWMsIHdoaWNoXG4gICAgLy8gbWFuZ2xlcyBgU2V0LUNvb2tpZWAgKGNvb2tpZXMgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29tbWFzIGluXG4gICAgLy8gdGhlaXIgYGV4cGlyZXM9YCBhdHRyaWJ1dGUpLiBgZ2V0U2V0Q29va2llYCBpcyB0aGUgZGVkaWNhdGVkXG4gICAgLy8gc3BsaXR0ZXIgYW5kIGlzIHRoZSBvbmx5IHNhZmUgcGF0aCBmb3IgdGhhdCBoZWFkZXIuXG4gICAgaWYgKHRhcmdldCA9PT0gXCJzZXQtY29va2llXCIpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaGVhZGVycy5nZXRTZXRDb29raWUoKSkgY29uc3VtZXIodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgY29uc3VtZXIodmFsdWUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwga2V5LnRvTG93ZXJDYXNlKCkgIT09IHRhcmdldCkgY29udGludWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIGNvbnN1bWVyKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdW1lcih2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIGBDb29raWVgIGhlYWRlciB2YWx1ZXMgaW50byBhIG5hbWUtdG8tdmFsdWUgbWFwIChVUkktZGVjb2RlZCkuXG4gKlxuICogQWNjZXB0czpcbiAqXG4gKiAtIEEgcmF3IGBDb29raWVgIHN0cmluZyAoYFwiYT0xOyBiPTJcImApLlxuICogLSBBbiBhcnJheSBvZiBzdWNoIHN0cmluZ3MgKGUuZy4gbXVsdGlwbGUgYENvb2tpZWAgaGVhZGVycykuXG4gKiAtIEFueSB7QGxpbmsgSGVhZGVyTGlrZX06IGEgV0hBVFdHIGBIZWFkZXJzYCBpbnN0YW5jZSwgYSBoZWFkZXJcbiAqICAgcmVjb3JkLCBvciBhIHJlcXVlc3QtbGlrZSBvYmplY3Qgd2l0aCBhIGBoZWFkZXJzYCBmaWVsZC5cbiAqXG4gKiBGaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggY29va2llIG5hbWUgd2luczsgbGF0ZXIgZHVwbGljYXRlcyBhcmUgaWdub3JlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VDb29raWVzKFwic2Vzc2lvbj1hYmM7IHRoZW1lPWRhcmtcIik7XG4gKiAvLyB7IHNlc3Npb246IFwiYWJjXCIsIHRoZW1lOiBcImRhcmtcIiB9XG4gKlxuICogcGFyc2VDb29raWVzKHJlcSk7ICAgICAgICAgICAgICAvLyBFeHByZXNzIC8gTm9kZVxuICogcGFyc2VDb29raWVzKGMucmVxLnJhdyk7ICAgICAgICAvLyBIb25vXG4gKiBwYXJzZUNvb2tpZXMocmVxdWVzdCk7ICAgICAgICAgIC8vIGZldGNoIFJlcXVlc3RcbiAqIHBhcnNlQ29va2llcyhyZXF1ZXN0LmhlYWRlcnMpOyAgLy8gV0hBVFdHIEhlYWRlcnMgZGlyZWN0bHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29va2llcyhpbnB1dDogSGVhZGVyTGlrZSB8IEhlYWRlclZhbHVlTGlrZSB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgaWYgKGlucHV0ID09IG51bGwpIHJldHVybiB7fTtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHBhcnNlQ29va2llU3RyaW5nKGlucHV0LCBvdXQpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikgcGFyc2VDb29raWVTdHJpbmcoaXRlbSwgb3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZvckVhY2hIZWFkZXJWYWx1ZShpbnB1dCwgXCJjb29raWVcIiwgKHZhbHVlKSA9PiB7XG4gICAgcGFyc2VDb29raWVTdHJpbmcodmFsdWUsIG91dCk7XG4gIH0pO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEJ1aWxkIGFuIGBFcnJvcmAgZGVzY3JpYmluZyBhIGZhaWxlZCBgZmV0Y2hgIHJlc3BvbnNlOiBzdGF0dXMgbGluZSxcbiAqIHRoZSBVUkwocykgaW52b2x2ZWQgKHRoZSByZXF1ZXN0ZWQgYHVybGAgYW5kIHRoZSBmaW5hbCBgcmVzcG9uc2UudXJsYFxuICogYWZ0ZXIgcmVkaXJlY3RzLCBkZS1kdXBsaWNhdGVkKSwgYW5kIGEgdHJ1bmNhdGVkIHNuYXBzaG90IG9mIHRoZVxuICogcmVzcG9uc2UgYm9keS4gUmVhZHMgdGhlIGJvZHkgZGVmZW5zaXZlbHkgLSBhIGJvZHkgdGhhdCBjYW4ndCBiZSByZWFkXG4gKiBpcyBzaW1wbHkgb21pdHRlZC4gQ2FsbCBvbmx5IG9uIGEgbm9uLWBva2AgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGZXRjaEVycm9yKHJlc3BvbnNlOiBSZXNwb25zZSwgdXJsPzogc3RyaW5nKTogUHJvbWlzZTxFcnJvcj4ge1xuICBsZXQgYm9keSA9IFwiXCI7XG4gIHRyeSB7XG4gICAgYm9keSA9IChhd2FpdCByZXNwb25zZS50ZXh0KCkpLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlXG4gIH1cbiAgaWYgKGJvZHkubGVuZ3RoID4gMV8wMDApIHtcbiAgICBib2R5ID0gYCR7Ym9keS5zbGljZSgwLCAxXzAwMCl94oCmYDtcbiAgfVxuICBjb25zdCB1cmxTdW1tYXJ5ID0gWy4uLm5ldyBTZXQoW3VybCwgcmVzcG9uc2UudXJsXS5maWx0ZXIoQm9vbGVhbikpXS5qb2luKFwiIC0+IFwiKTtcbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBbXG4gICAgICBgUmVxdWVzdCBmYWlsZWQuYCxcbiAgICAgIGAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICAgICBgJHt1cmxTdW1tYXJ5fWAsXG4gICAgICBib2R5ICYmIGBSZXNwb25zZTpcXG4ke2JvZHl9YCxcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIlxcblwiKSxcbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBQcml2YXRlIGhlbHBlcnNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgZm9yIFdIQVRXRyBgSGVhZGVyc2AuIER1Y2stdHlwZXMgb24gdGhlIHR3byBtZXRob2RzIHRoYXRcbiAqIG1hdHRlciB0byB0aGlzIG1vZHVsZSAoYGdldGAgYW5kIGBnZXRTZXRDb29raWVgKSBzbyBwb2x5ZmlsbGVkXG4gKiBpbXBsZW1lbnRhdGlvbnMgYW5kIEhvbm8ncyBgSG9ub0hlYWRlcnNgIGFyZSBhY2NlcHRlZCB3aXRob3V0XG4gKiBwdWxsaW5nIGBIZWFkZXJzYCBpbiBhcyBhIGhhcmQgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gaXNIZWFkZXJzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSGVhZGVycyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgKHZhbHVlIGFzIEhlYWRlcnMpLmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mICh2YWx1ZSBhcyBIZWFkZXJzKS5nZXRTZXRDb29raWUgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuXG4vKipcbiAqIGBIZWFkZXJSZWNvcmRgIGlzIGFuIGluZGV4IHNpZ25hdHVyZSwgc28gYFwiaGVhZGVyc1wiIGluIGlucHV0YCBjYW5ub3RcbiAqIGRpc2NyaW1pbmF0ZSBpdCBmcm9tIHRoZSB3cmFwcGVkIGB7IGhlYWRlcnMgfWAgc2hhcGUgYXQgdGhlIHR5cGVcbiAqIGxldmVsLiBUaGlzIGd1YXJkIGluc3BlY3RzIHRoZSBydW50aW1lIHZhbHVlIG9mIGBoZWFkZXJzYDogb25seVxuICogb2JqZWN0cyAoYEhlYWRlcnNgIG9yIGEgbmVzdGVkIHJlY29yZCkgcXVhbGlmeSBhcyB0aGUgd3JhcHBlciBzaGFwZSxcbiAqIG5ldmVyIHN0cmF5IHN0cmluZy9hcnJheSB2YWx1ZXMgdGhhdCBoYXBwZW4gdG8gbGl2ZSB1bmRlciBhIGBoZWFkZXJzYFxuICoga2V5IG9uIGEgaGVhZGVyIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gaXNXcmFwcGVkKFxuICBpbnB1dDogSGVhZGVyUmVjb3JkIHwgeyBoZWFkZXJzOiBIZWFkZXJzIHwgSGVhZGVyUmVjb3JkIH0sXG4pOiBpbnB1dCBpcyB7IGhlYWRlcnM6IEhlYWRlcnMgfCBIZWFkZXJSZWNvcmQgfSB7XG4gIGNvbnN0IGhlYWRlcnMgPSAoaW5wdXQgYXMgeyBoZWFkZXJzPzogdW5rbm93biB9KS5oZWFkZXJzO1xuICByZXR1cm4gaGVhZGVycyAhPSBudWxsICYmIHR5cGVvZiBoZWFkZXJzID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGhlYWRlcnMpO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIGBDb29raWVgLXN0eWxlIGhlYWRlciBzdHJpbmcgKGBcImE9MTsgYj0yXCJgKSBpbnRvXG4gKiBgb3V0YC4gTmFtZXMgd2l0aG91dCBhIHZhbHVlIGFyZSBza2lwcGVkOyBmaXJzdCBvY2N1cnJlbmNlIHdpbnMgc29cbiAqIGxhdGVyIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQuIENvb2tpZSB2YWx1ZXMgYXJlIFVSSS1kZWNvZGVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvb2tpZVN0cmluZyhpbnB1dDogc3RyaW5nLCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIGlucHV0LnNwbGl0KFwiO1wiKSkge1xuICAgIGNvbnN0IGVxID0gcGFydC5pbmRleE9mKFwiPVwiKTtcbiAgICBpZiAoZXEgPCAwKSBjb250aW51ZTtcbiAgICBjb25zdCBuYW1lID0gcGFydC5zbGljZSgwLCBlcSkudHJpbSgpO1xuICAgIGlmICghbmFtZSB8fCBuYW1lIGluIG91dCkgY29udGludWU7XG4gICAgY29uc3QgcmF3ID0gcGFydC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICBvdXRbbmFtZV0gPSBkZWNvZGVVUklDb21wb25lbnQocmF3KTtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHtAbGluayBIZWFkZXJMaWtlfSBpbnB1dCBkb3duIHRvIGVpdGhlciBhIGBIZWFkZXJzYFxuICogaW5zdGFuY2Ugb3IgYSBoZWFkZXIgYFJlY29yZGAuIFJldHVybnMgYG51bGxgIGZvciBtaXNzaW5nIGlucHV0IHNvXG4gKiBjYWxsZXJzIGNhbiBzaG9ydC1jaXJjdWl0IHdpdGhvdXQgYSBzZXBhcmF0ZSBudWxsaXNoIGNoZWNrLlxuICovXG5mdW5jdGlvbiB1bndyYXAoaW5wdXQ6IEhlYWRlckxpa2UgfCBudWxsIHwgdW5kZWZpbmVkKTogSGVhZGVycyB8IEhlYWRlclJlY29yZCB8IG51bGwge1xuICBpZiAoaW5wdXQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGlmIChpc0hlYWRlcnMoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpc1dyYXBwZWQoaW5wdXQpKSByZXR1cm4gaW5wdXQuaGVhZGVycztcbiAgcmV0dXJuIGlucHV0O1xufVxuIl19
|
package/lib/src/net.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ import type { NonFunctionKeys } from "./object.ts";
|
|
|
19
19
|
/** Highest valid TCP port number. */
|
|
20
20
|
export declare const MAX_TCP_PORT = 65535;
|
|
21
21
|
/**
|
|
22
|
-
* Anything {@link urlBuilder}
|
|
22
|
+
* Anything {@link urlBuilder} knows how to coerce
|
|
23
23
|
* into a URL:
|
|
24
24
|
*
|
|
25
25
|
* - A string: a host, a full URL, or a path / query / hash fragment.
|
|
@@ -124,18 +124,6 @@ export declare function urlBuilder(): UrlBuilder;
|
|
|
124
124
|
* urlBuilder(); // http://localhost/
|
|
125
125
|
*/
|
|
126
126
|
export declare function urlBuilder(input?: UrlLike): UrlBuilder | undefined;
|
|
127
|
-
/**
|
|
128
|
-
* Convenience wrapper over {@link UrlBuilder.pathMatches}: coerce
|
|
129
|
-
* `input` via {@link urlBuilder} and test its pathname against `path`.
|
|
130
|
-
* Returns `false` for input that can't be parsed into a URL.
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* pathMatch("/api/cool?q=1", "/api"); // true
|
|
134
|
-
* pathMatch("/apicool", "/api"); // false
|
|
135
|
-
* pathMatch("https://host/api", "/api"); // true
|
|
136
|
-
* pathMatch(request, "/api/v2"); // fetch Request
|
|
137
|
-
*/
|
|
138
|
-
export declare function pathMatch(input: UrlLike, path: string): boolean;
|
|
139
127
|
/** Options for {@link parseEmails}. */
|
|
140
128
|
export interface ParseEmailsOptions {
|
|
141
129
|
/** Lower-case every address (useful for allow-lists / matching). Off by default. */
|
package/lib/src/net.js
CHANGED
|
@@ -132,23 +132,6 @@ export function urlBuilder(input) {
|
|
|
132
132
|
const url = parseUrl(input);
|
|
133
133
|
return url ? urlBuilder(url) : undefined;
|
|
134
134
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Convenience wrapper over {@link UrlBuilder.pathMatches}: coerce
|
|
137
|
-
* `input` via {@link urlBuilder} and test its pathname against `path`.
|
|
138
|
-
* Returns `false` for input that can't be parsed into a URL.
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* pathMatch("/api/cool?q=1", "/api"); // true
|
|
142
|
-
* pathMatch("/apicool", "/api"); // false
|
|
143
|
-
* pathMatch("https://host/api", "/api"); // true
|
|
144
|
-
* pathMatch(request, "/api/v2"); // fetch Request
|
|
145
|
-
*/
|
|
146
|
-
export function pathMatch(input, path) {
|
|
147
|
-
const urlb = urlBuilder(input);
|
|
148
|
-
if (!urlb)
|
|
149
|
-
return false;
|
|
150
|
-
return urlb.pathMatches(path);
|
|
151
|
-
}
|
|
152
135
|
/**
|
|
153
136
|
* Base origin for resolving path-only inputs. In a browser this is the
|
|
154
137
|
* current page's origin (`window.location.origin`), so `urlBuilder("/api")`
|
|
@@ -466,4 +449,4 @@ function hextetsToValue(hextets) {
|
|
|
466
449
|
value = (value << 16n) | BigInt(hextet);
|
|
467
450
|
return value;
|
|
468
451
|
}
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUlILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFDbkMsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUM1RCxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUVuQyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUVuQywrREFBK0Q7QUFDL0QsTUFBTSxPQUFPLEdBQXdDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkUsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQy9CLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXpDLG9FQUFvRTtBQUNwRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztBQUN2QyxvRUFBb0U7QUFDcEUsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUM7QUFvRG5EOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxHQUFHO0lBQzlCLFlBQVksR0FBUTtRQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7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SyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBuZXR3b3JraW5nIGhlbHBlcnMgYnVpbHQgYXJvdW5kIHtAbGluayB1cmxCdWlsZGVyfTogYVxuICogdG9sZXJhbnQgYFVSTGAgY29lcmNpb24gKyBjaGFpbmFibGUgYnVpbGRlciB0aGF0IGdyYWNlZnVsbHkgaGFuZGxlc1xuICogcGFydGlhbCBpbnB1dHMgKGJhcmUgaG9zdHMsIHBhdGgtb25seSBzdHJpbmdzLCBgeyB1cmwgfWAgd3JhcHBlcnMpLFxuICogYSBzbWFsbCBJUHY0IC8gSVB2NiBhZGRyZXNzICsgQ0lEUiB0b29sa2l0IChwYXJzaW5nIGFuZCBtZW1iZXJzaGlwXG4gKiBsb29rdXBzKSwgYW5kIGVtYWlsLWFkZHJlc3MgcGFyc2luZyAoe0BsaW5rIHBhcnNlRW1haWxzfSAvXG4gKiB7QGxpbmsgaXNFbWFpbH0pIHRoYXQgbm9ybWFsaXplcyB0aGUgQ1NWIC8gc2luZ2xlLXN0cmluZyAvIGFycmF5XG4gKiBpbnB1dHMgZW1haWwgcmVjaXBpZW50IGFuZCBhbGxvdy1saXN0IGZpZWxkcyBhY2NlcHQgaW50byBhIGNsZWFuXG4gKiBgc3RyaW5nW11gLiBObyBub2RlLW9ubHkgaW1wb3J0cywgc28gdGhpcyBtb2R1bGUgaXMgdGhlIGNhbm9uaWNhbFxuICogaG9tZSBmb3IgYW55dGhpbmcgVVJMLSwgSVAtLCBvciBlbWFpbC1zaGFwZWQgdGhhdCBhbHNvIGhhcyB0byBydW4gaW5cbiAqIGEgVml0ZSAvIFdlYnBhY2sgLyBlc2J1aWxkIGNsaWVudCBidW5kbGUuIE5vZGUtb25seSBuZXR3b3JrIGhlbHBlcnNcbiAqIChlLmcuIEROUyByZXNvbHV0aW9uKSBiZWxvbmcgaW4gYSBub2RlLXRhZ2dlZCBwYWNrYWdlLCBub3QgaGVyZS5cbiAqIFJldXNlIHRoaXMgbW9kdWxlIGZvciBVUkwsIElQL0NJRFIsIGFuZCBlbWFpbCBwYXJzaW5nIGluc3RlYWQgb2YgaW50cm9kdWNpbmdcbiAqIHBhY2thZ2UtbG9jYWwgbm9ybWFsaXplcnMgd2l0aCBzdWJ0bHkgZGlmZmVyZW50IHJ1bGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE5vbkZ1bmN0aW9uS2V5cyB9IGZyb20gXCIuL29iamVjdC50c1wiO1xuXG5jb25zdCBMT0NBTF9IT1NUX1VSTCA9IG5ldyBVUkwoXCJodHRwOi8vbG9jYWxob3N0XCIpO1xuY29uc3QgVVJMX1NDSEVNRV9ERUZBVUxUID0gXCJodHRwc1wiO1xuY29uc3QgVVJMX1NDSEVNRV9QUkVGSVggPSAvXihbQS1aYS16XVtBLVphLXowLTkrLi1dKjpcXC9cXC8pLztcbmNvbnN0IFVSTF9QQVRIX1NFR01FTlRfVFJJTSA9IC9eXFwvK3xcXC8rJC9nO1xuY29uc3QgVVJMX1NDSEVNRV9TRVBBUkFUT1IgPSBcIjovL1wiO1xuXG4vKiogSGlnaGVzdCB2YWxpZCBUQ1AgcG9ydCBudW1iZXIuICovXG5leHBvcnQgY29uc3QgTUFYX1RDUF9QT1JUID0gNjVfNTM1O1xuXG4vKiogVG90YWwgYml0IHdpZHRoIG9mIGFuIGFkZHJlc3Mgb2YgZWFjaCB7QGxpbmsgSXBWZXJzaW9ufS4gKi9cbmNvbnN0IElQX0JJVFM6IFJlYWRvbmx5PFJlY29yZDxJcFZlcnNpb24sIG51bWJlcj4+ID0geyA0OiAzMiwgNjogMTI4IH07XG5jb25zdCBJUFY0X09DVEVUID0gL15cXGR7MSwzfSQvO1xuY29uc3QgSVBWNl9IRVhURVQgPSAvXlswLTlhLWZBLUZdezEsNH0kLztcblxuLyoqIERlbGltaXRlcnMgYmV0d2VlbiBhZGRyZXNzZXMgaW4gYSBmcmVlLXRleHQgLyBDU1YgZW1haWwgbGlzdC4gKi9cbmNvbnN0IEVNQUlMX0xJU1RfU0VQQVJBVE9SID0gL1tcXHMsO10rLztcbi8qKiBQcmFnbWF0aWMgYGxvY2FsQGRvbWFpbi50bGRgIHNoYXBlIGNoZWNrIChub3QgZnVsbCBSRkMgNTMyMikuICovXG5jb25zdCBFTUFJTF9BRERSRVNTID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHlwZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEFueXRoaW5nIHtAbGluayB1cmxCdWlsZGVyfSAoYW5kIHtAbGluayBwYXRoTWF0Y2h9KSBrbm93IGhvdyB0byBjb2VyY2VcbiAqIGludG8gYSBVUkw6XG4gKlxuICogLSBBIHN0cmluZzogYSBob3N0LCBhIGZ1bGwgVVJMLCBvciBhIHBhdGggLyBxdWVyeSAvIGhhc2ggZnJhZ21lbnQuXG4gKiAtIEEgV0hBVFdHIGBVUkxgIGluc3RhbmNlLlxuICogLSBBbnkgb2JqZWN0IHdpdGggYSBgdXJsYCBmaWVsZCAoZS5nLiBhIGZldGNoIGBSZXF1ZXN0YCwgYSBEYXRhYnJpY2tzXG4gKiAgIGBXb3Jrc3BhY2VDbGllbnRgIGNvbmZpZykuXG4gKi9cbmV4cG9ydCB0eXBlIFVybExpa2UgPSBzdHJpbmcgfCBVUkwgfCB7IHVybDogc3RyaW5nIH07XG5cbi8qKiBJUCBwcm90b2NvbCBmYW1pbHk6IGA0YCBmb3IgSVB2NCwgYDZgIGZvciBJUHY2LiAqL1xuZXhwb3J0IHR5cGUgSXBWZXJzaW9uID0gNCB8IDY7XG5cbi8qKlxuICogQSBwYXJzZWQgSVAgYWRkcmVzcy4gYHZhbHVlYCBpcyB0aGUgYWRkcmVzcyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyXG4gKiAoYSAzMi1iaXQgcmFuZ2UgZm9yIHY0LCAxMjgtYml0IGZvciB2NikgaGVsZCBpbiBhIGBiaWdpbnRgIHNvIGJvdGhcbiAqIGZhbWlsaWVzIHNoYXJlIG9uZSBjb21wYXJpc29uIC8gbWFza2luZyBwYXRoLiBQcm9kdWNlIG9uZSB3aXRoXG4gKiB7QGxpbmsgcGFyc2VJcH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkSXAge1xuICB2ZXJzaW9uOiBJcFZlcnNpb247XG4gIC8qKiBUaGUgYWRkcmVzcyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIChgYmlnaW50YCBmb3IgdW5pZm9ybSB2NC92NiBtYXRoKS4gKi9cbiAgdmFsdWU6IGJpZ2ludDtcbn1cblxuLyoqXG4gKiBBIHBhcnNlZCBDSURSIGJsb2NrIChgMTAuMC4wLjAvOGAsIGAyMDAxOmRiODo6LzMyYCkuIGBiYXNlYCBpcyB0aGVcbiAqIG5ldHdvcmsgYWRkcmVzcyB3aXRoIGFsbCBob3N0IGJpdHMgY2xlYXJlZCwgc28gbWVtYmVyc2hpcCBpcyBhXG4gKiBzaW5nbGUgbWFza2VkIGNvbXBhcmUgKHNlZSB7QGxpbmsgaXBJbkNpZHJ9KS4gUHJvZHVjZSBvbmUgd2l0aFxuICoge0BsaW5rIHBhcnNlQ2lkcn0uIENhcnJpZXMgdGhlIG5vcm1hbGl6ZWQgYGNpZHJgIHN0cmluZyBmb3IgbG9nZ2luZ1xuICogYW5kIHRvIGtleSBiYWNrIHRvIGNhbGxlci1zaWRlIG1ldGFkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENpZHIge1xuICB2ZXJzaW9uOiBJcFZlcnNpb247XG4gIC8qKiBOZXR3b3JrIGFkZHJlc3MgKGhvc3QgYml0cyB6ZXJvZWQpIGFzIGFuIHVuc2lnbmVkIGBiaWdpbnRgLiAqL1xuICBiYXNlOiBiaWdpbnQ7XG4gIC8qKiBQcmVmaXggbGVuZ3RoIGluIGJpdHMgKHRoZSBudW1iZXIgYWZ0ZXIgdGhlIGAvYCkuICovXG4gIHByZWZpeDogbnVtYmVyO1xuICAvKiogTm9ybWFsaXplZCBgPGFkZHJlc3M+LzxwcmVmaXg+YCBzdHJpbmcuICovXG4gIGNpZHI6IHN0cmluZztcbn1cblxuLyoqIFNldHRhYmxlLCBub24tbWV0aG9kIGBVUkxgIHByb3BlcnRpZXMgLSB0aGUga2V5cyB7QGxpbmsgVXJsQnVpbGRlci53aXRofSBhY2NlcHRzLiAqL1xudHlwZSBVcmxQcm9wZXJ0eUtleSA9IE5vbkZ1bmN0aW9uS2V5czxVcmxCdWlsZGVySW1wbD47XG5cbi8qKlxuICogQSBgVVJMYCBzdWJjbGFzcyB3aXRoIGNoYWluYWJsZSwgY29weS1vbi13cml0ZSBoZWxwZXJzLiBFdmVyeSBtdXRhdGluZ1xuICogbWV0aG9kIHJldHVybnMgYSBmcmVzaCBidWlsZGVyIHJhdGhlciB0aGFuIGVkaXRpbmcgaW4gcGxhY2UsIHNvIGEgYmFzZVxuICogYnVpbGRlciBjYW4gYmUgc2FmZWx5IHJldXNlZC4gQ29uc3RydWN0IG9uZSB2aWEge0BsaW5rIHVybEJ1aWxkZXJ9LlxuICovXG5jbGFzcyBVcmxCdWlsZGVySW1wbCBleHRlbmRzIFVSTCB7XG4gIGNvbnN0cnVjdG9yKHVybDogVVJMKSB7XG4gICAgc3VwZXIodXJsKTtcbiAgfVxuXG4gIC8qKiBUaGUgc2NoZW1lIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGNvbG9uIChgaHR0cHNgLCBub3QgYGh0dHBzOmApLiAqL1xuICBnZXQgc2NoZW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICB9XG5cbiAgc2V0IHNjaGVtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IHZhbHVlICsgXCI6XCI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSB3aXRoIGEgc2luZ2xlIGBVUkxgIHByb3BlcnR5IChgcGF0aG5hbWVgLCBgc2VhcmNoYCxcbiAgICogYGhvc3RuYW1lYCwgYHNjaGVtZWAsIC4uLikgc2V0IHRvIGB2YWx1ZWAsIGxlYXZpbmcgdGhpcyBidWlsZGVyXG4gICAqIHVudG91Y2hlZC5cbiAgICovXG4gIHdpdGg8SyBleHRlbmRzIFVybFByb3BlcnR5S2V5PihrZXk6IEssIHZhbHVlOiBVcmxCdWlsZGVySW1wbFtLXSk6IFVybEJ1aWxkZXIge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgVXJsQnVpbGRlckltcGwodGhpcyk7XG4gICAgKG5leHQgYXMgYW55KVtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIG5ldyBVcmxCdWlsZGVySW1wbChuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IHdpdGggYHBhdGhTZWdtZW50c2AgYXBwZW5kZWQgdG8gdGhlIGN1cnJlbnQgcGF0aG5hbWUuXG4gICAqIFNlZ21lbnRzIG1heSBiZSBzdHJpbmdzIG9yIHN0cmluZyBhcnJheXM7IGVhY2ggaXMgdHJpbW1lZCBvZlxuICAgKiBib3VuZGFyeSBzbGFzaGVzIGFuZCBibGFua3MgYXJlIGRyb3BwZWQgYmVmb3JlIGpvaW5pbmcgd2l0aCBgL2AuXG4gICAqL1xuICB3aXRoUGF0aEFwcGVuZCguLi5wYXRoU2VnbWVudHM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSk6IFVybEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndpdGhQYXRoUmVwbGFjZSh0aGlzLnBhdGhuYW1lLCAuLi5wYXRoU2VnbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgd2hvc2UgcGF0aG5hbWUgaXMgYHBhdGhTZWdtZW50c2Agam9pbmVkIHdpdGggYC9gLFxuICAgKiByZXBsYWNpbmcgYW55IGV4aXN0aW5nIHBhdGguIFNlZ21lbnRzIG1heSBiZSBzdHJpbmdzIG9yIHN0cmluZ1xuICAgKiBhcnJheXM7IGVhY2ggaXMgdHJpbW1lZCBvZiBib3VuZGFyeSBzbGFzaGVzIGFuZCBibGFua3MgYXJlIGRyb3BwZWQuXG4gICAqL1xuICB3aXRoUGF0aFJlcGxhY2UoLi4ucGF0aFNlZ21lbnRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBVcmxCdWlsZGVyIHtcbiAgICBjb25zdCBwYXRobmFtZVBhcnRzOiBzdHJpbmdbXSA9IFsuLi5wYXRoU2VnbWVudHNdLmZsYXRNYXAoKHApID0+IChBcnJheS5pc0FycmF5KHApID8gcCA6IFtwXSkpO1xuICAgIGNvbnN0IHBhdGhuYW1lID0gcGF0aG5hbWVQYXJ0c1xuICAgICAgLm1hcCgocCkgPT4gcC5yZXBsYWNlKFVSTF9QQVRIX1NFR01FTlRfVFJJTSwgXCJcIikpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbihcIi9cIik7XG4gICAgcmV0dXJuIHRoaXMud2l0aChcInBhdGhuYW1lXCIsIFwiL1wiICsgcGF0aG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIFVSTCdzIHBhdGhuYW1lIGlzIGBwYXRoYCBvciBsaXZlcyBiZW5lYXRoIGl0LFxuICAgKiBtYXRjaGluZyBvbiBzZWdtZW50IGJvdW5kYXJpZXMgc28gYC9hcGlgIG1hdGNoZXMgYC9hcGlgIGFuZFxuICAgKiBgL2FwaS9jb29sYCBidXQgbm90IGAvYXBpY29vbGAuIEEgbWlzc2luZyBsZWFkaW5nIHNsYXNoIG9uIGBwYXRoYFxuICAgKiBpcyB0b2xlcmF0ZWQ7IHF1ZXJ5IGFuZCBoYXNoIGFyZSBpZ25vcmVkICh0aGV5IGFyZW4ndCBwYXJ0IG9mXG4gICAqIGBwYXRobmFtZWApLiBNYXRjaGluZyBpcyBleGFjdCBvdGhlcndpc2UgLSB0cmFpbGluZyBzbGFzaGVzIGFyZVxuICAgKiBub3Qgbm9ybWFsaXplZCBhbmQgYC9gIG1hdGNoZXMgb25seSB0aGUgcm9vdC5cbiAgICovXG4gIHBhdGhNYXRjaGVzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZTtcbiAgICBpZiAocGF0aG5hbWUgPT0gcGF0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSBwYXRoID0gXCIvXCIgKyBwYXRoO1xuICAgIGlmIChwYXRobmFtZSA9PSBwYXRoKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gcGF0aG5hbWUuc3RhcnRzV2l0aChwYXRoICsgXCIvXCIpO1xuICB9XG59XG5cbi8qKiBQdWJsaWMgdHlwZSBmb3IgdGhlIHtAbGluayB1cmxCdWlsZGVyfSByZXR1cm4gdmFsdWUuICovXG5leHBvcnQgdHlwZSBVcmxCdWlsZGVyID0gVXJsQnVpbGRlckltcGw7XG5cbi8qKiBXaXRoIG5vIGFyZ3VtZW50LCByZXNvbHZlcyB0byB0aGUgYmFzZSBvcmlnaW4gKG5ldmVyIGBudWxsYCkuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsQnVpbGRlcigpOiBVcmxCdWlsZGVyO1xuXG4vKipcbiAqIENvZXJjZSBhIHtAbGluayBVcmxMaWtlfSBpbnRvIGEgY2hhaW5hYmxlIHtAbGluayBVcmxCdWlsZGVyfSwgb3IgYG51bGxgXG4gKiB3aGVuIHRoZSBpbnB1dCBjYW5ub3QgYmUgcGFyc2VkIGludG8gYSBVUkwuIE5ldmVyIHRocm93cy5cbiAqXG4gKiAtIEEgYFVSTGAgaW5zdGFuY2Ugb3IgYHsgdXJsIH1gIHdyYXBwZXIgaXMgYWRvcHRlZCBhcy1pcy5cbiAqIC0gQSBiYXJlIGhvc3RuYW1lIChgXCJleGFtcGxlLmNvbVwiYCkgaXMgdXBncmFkZWQgdG8gYGh0dHBzOi8vYDsgYW5cbiAqICAgZXhwbGljaXQgc2NoZW1lIGlzIHByZXNlcnZlZC5cbiAqIC0gQSBwYXRoIC8gcXVlcnkgLyBoYXNoIGZyYWdtZW50IChgXCIvYXBpXCJgLCBgXCI/cT0xXCJgLCBgXCIjeFwiYCkgaXNcbiAqICAgcmVzb2x2ZWQgYWdhaW5zdCB7QGxpbmsgZGVmYXVsdFVybH0gKHRoZSBicm93c2VyIG9yaWdpbiwgZWxzZVxuICogICBgaHR0cDovL2xvY2FsaG9zdGApLlxuICogLSBBbiBlbXB0eSAvIGJsYW5rIHN0cmluZyBvciBvbWl0dGVkIGlucHV0IHJlc29sdmVzIHRvIHRoZSBiYXNlXG4gKiAgIG9yaWdpbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogdXJsQnVpbGRlcihcImV4YW1wbGUuY29tXCIpOyAgICAgICAgICAvLyBodHRwczovL2V4YW1wbGUuY29tL1xuICogdXJsQnVpbGRlcihcImh0dHA6Ly94L3BhdGhcIik7ICAgICAgICAvLyBodHRwOi8veC9wYXRoXG4gKiB1cmxCdWlsZGVyKFwiL2FwaS92MlwiKTsgICAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3QvYXBpL3YyXG4gKiB1cmxCdWlsZGVyKHsgdXJsOiBcImh0dHA6Ly95XCIgfSk7ICAgIC8vIGh0dHA6Ly95L1xuICogdXJsQnVpbGRlcigpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2xvY2FsaG9zdC9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybEJ1aWxkZXIoaW5wdXQ/OiBVcmxMaWtlKTogVXJsQnVpbGRlciB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHVybEJ1aWxkZXIoaW5wdXQ/OiBVcmxMaWtlKTogVXJsQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFVSTCkge1xuICAgIHJldHVybiBuZXcgVXJsQnVpbGRlckltcGwoaW5wdXQpO1xuICB9XG4gIGlmIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIgJiYgXCJ1cmxcIiBpbiBpbnB1dCkge1xuICAgIGlucHV0ID0gaW5wdXQudXJsO1xuICB9XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcbiAgfVxuICBpZiAoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcIi9cIikgfHwgaW5wdXQuc3RhcnRzV2l0aChcIj9cIikgfHwgaW5wdXQuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgIGNvbnN0IGpvaW5lZFVybCA9IGRlZmF1bHRVcmwoKS50b1N0cmluZygpLnNsaWNlKDAsIC0xKSArIGlucHV0O1xuICAgICAgcmV0dXJuIHVybEJ1aWxkZXIoam9pbmVkVXJsKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoVVJMX1NDSEVNRV9TRVBBUkFUT1IpKSB7XG4gICAgICBpbnB1dCA9IGAke1VSTF9TQ0hFTUVfREVGQVVMVH0ke2lucHV0fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gaW5wdXQubWF0Y2goVVJMX1NDSEVNRV9QUkVGSVgpO1xuICAgICAgY29uc3Qgc2NoZW1lUHJlZml4ID0gbWF0Y2g/LlsxXTtcbiAgICAgIGlmIChzY2hlbWVQcmVmaXgpIHtcbiAgICAgICAgY29uc3QgcmVzdCA9IGlucHV0LnNsaWNlKHNjaGVtZVByZWZpeC5sZW5ndGgpO1xuICAgICAgICBpbnB1dCA9IGAke3NjaGVtZVByZWZpeH0ke3Jlc3QgfHwgZGVmYXVsdFVybCgpLmhvc3RuYW1lfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dCA9IGAke1VSTF9TQ0hFTUVfREVGQVVMVH06Ly8ke2lucHV0fWA7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cmxCdWlsZGVyKGRlZmF1bHRVcmwoKSk7XG4gIH1cbiAgY29uc3QgdXJsID0gcGFyc2VVcmwoaW5wdXQpO1xuICByZXR1cm4gdXJsID8gdXJsQnVpbGRlcih1cmwpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgb3ZlciB7QGxpbmsgVXJsQnVpbGRlci5wYXRoTWF0Y2hlc306IGNvZXJjZVxuICogYGlucHV0YCB2aWEge0BsaW5rIHVybEJ1aWxkZXJ9IGFuZCB0ZXN0IGl0cyBwYXRobmFtZSBhZ2FpbnN0IGBwYXRoYC5cbiAqIFJldHVybnMgYGZhbHNlYCBmb3IgaW5wdXQgdGhhdCBjYW4ndCBiZSBwYXJzZWQgaW50byBhIFVSTC5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGF0aE1hdGNoKFwiL2FwaS9jb29sP3E9MVwiLCBcIi9hcGlcIik7ICAgICAgLy8gdHJ1ZVxuICogcGF0aE1hdGNoKFwiL2FwaWNvb2xcIiwgXCIvYXBpXCIpOyAgICAgICAgICAgLy8gZmFsc2VcbiAqIHBhdGhNYXRjaChcImh0dHBzOi8vaG9zdC9hcGlcIiwgXCIvYXBpXCIpOyAgIC8vIHRydWVcbiAqIHBhdGhNYXRjaChyZXF1ZXN0LCBcIi9hcGkvdjJcIik7ICAgICAgICAgICAvLyBmZXRjaCBSZXF1ZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoTWF0Y2goaW5wdXQ6IFVybExpa2UsIHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB1cmxiID0gdXJsQnVpbGRlcihpbnB1dCk7XG4gIGlmICghdXJsYikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdXJsYi5wYXRoTWF0Y2hlcyhwYXRoKTtcbn1cblxuLyoqXG4gKiBCYXNlIG9yaWdpbiBmb3IgcmVzb2x2aW5nIHBhdGgtb25seSBpbnB1dHMuIEluIGEgYnJvd3NlciB0aGlzIGlzIHRoZVxuICogY3VycmVudCBwYWdlJ3Mgb3JpZ2luIChgd2luZG93LmxvY2F0aW9uLm9yaWdpbmApLCBzbyBgdXJsQnVpbGRlcihcIi9hcGlcIilgXG4gKiByZWZsZWN0cyB3aGVyZSB0aGUgYXBwIGlzIGFjdHVhbGx5IHNlcnZlZCBmcm9tOyBvbiB0aGUgc2VydmVyIC8gaW5cbiAqIHRlc3RzIChubyBgd2luZG93YCwgb3IgYW4gb3BhcXVlIGBcIm51bGxcImAgb3JpZ2luKSBpdCBmYWxscyBiYWNrIHRvXG4gKiBgaHR0cDovL2xvY2FsaG9zdGAuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRVcmwoKTogVVJMIHtcbiAgLy8gUmVhY2ggYHdpbmRvd2AgdmlhIGBnbG9iYWxUaGlzYCBzbyB0aGlzIGNvbXBpbGVzIHdpdGhvdXQgdGhlIERPTVxuICAvLyBsaWIgKGl0J3MgYHVuZGVmaW5lZGAgb24gdGhlIHNlcnZlciAvIGluIHdvcmtlcnMgd2l0aG91dCBvbmUpLlxuICBjb25zdCBvcmlnaW4gPSAoZ2xvYmFsVGhpcyBhcyB7IHdpbmRvdz86IHsgbG9jYXRpb24/OiB7IG9yaWdpbj86IHN0cmluZyB9IH0gfSkud2luZG93Py5sb2NhdGlvblxuICAgID8ub3JpZ2luO1xuICBpZiAob3JpZ2luICYmIG9yaWdpbiAhPT0gXCJudWxsXCIpIHtcbiAgICBjb25zdCBvcmlnaW5VcmwgPSBwYXJzZVVybChvcmlnaW4pO1xuICAgIGlmIChvcmlnaW5VcmwpIHtcbiAgICAgIHJldHVybiBvcmlnaW5Vcmw7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgVVJMKExPQ0FMX0hPU1RfVVJMKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQ6IHN0cmluZyk6IFVSTCB8IG51bGwge1xuICBpZiAoaW5wdXQgJiYgaW5wdXQuaW5jbHVkZXMoVVJMX1NDSEVNRV9TRVBBUkFUT1IpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVVJMKGlucHV0KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRW1haWwgYWRkcmVzc2VzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBwYXJzZUVtYWlsc30uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlRW1haWxzT3B0aW9ucyB7XG4gIC8qKiBMb3dlci1jYXNlIGV2ZXJ5IGFkZHJlc3MgKHVzZWZ1bCBmb3IgYWxsb3ctbGlzdHMgLyBtYXRjaGluZykuIE9mZiBieSBkZWZhdWx0LiAqL1xuICBsb3dlcmNhc2U/OiBib29sZWFuO1xuICAvKipcbiAgICogRHJvcCBsYXRlciBjYXNlLWluc2Vuc2l0aXZlIGR1cGxpY2F0ZXMsIGtlZXBpbmcgZmlyc3Qtc2VlbiBjYXNpbmcuXG4gICAqIE9uIGJ5IGRlZmF1bHQgLSBhIHJlY2lwaWVudCBvciBwYXR0ZXJuIGxpc3QgcmFyZWx5IHdhbnRzIHJlcGVhdHMuXG4gICAqL1xuICBkZWR1cGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgc2hhcGVzIGFuIGVtYWlsIGFkZHJlc3MgZmllbGQgYWNjZXB0cyAtIGEgc2luZ2xlIHN0cmluZyxcbiAqIGEgY29tbWEgLyBzZW1pY29sb24gLyB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0LCBhbiBhcnJheSBvZiBlaXRoZXIsXG4gKiBvciBub3RoaW5nIC0gaW50byBhIGNsZWFuIGBzdHJpbmdbXWAuIEVhY2ggZW50cnkgaXMgc3BsaXQgb24gdGhlIGxpc3RcbiAqIHNlcGFyYXRvcnMsIHRyaW1tZWQsIGFuZCBkZS1lbXB0aWVkOyBibGFua3MgYW5kIG5vbi1zdHJpbmcgYXJyYXlcbiAqIG1lbWJlcnMgYXJlIGRyb3BwZWQuIEJ5IGRlZmF1bHQgZHVwbGljYXRlcyBhcmUgcmVtb3ZlZFxuICogY2FzZS1pbnNlbnNpdGl2ZWx5IChmaXJzdC1zZWVuIGNhc2luZyB3aW5zKSBhbmQgY2FzaW5nIGlzIG90aGVyd2lzZVxuICogcHJlc2VydmVkOyBwYXNzIGBsb3dlcmNhc2VgIHRvIGZvbGQgZXZlcnl0aGluZyB0byBsb3dlciBjYXNlIChlLmcuIGZvclxuICogYW4gYWxsb3ctbGlzdCkuIFRoaXMgaXMgdGhlIG9uZSBwbGFjZSByZWNpcGllbnQgbGlzdHMsIENDL0JDQyBpbnB1dHMsXG4gKiBhbmQgc2VuZGVyIGFsbG93LWxpc3RzIGFjcm9zcyB0aGUgcmVwbyBhZ3JlZSBvbiBob3cgZnJlZS10ZXh0IGVtYWlsXG4gKiBpbnB1dCBpcyByZWFkLiBOZXZlciB0aHJvd3M7IGRvZXMgbm90IHZhbGlkYXRlIC0gcGFpciB3aXRoXG4gKiB7QGxpbmsgaXNFbWFpbH0gd2hlbiB5b3UgbmVlZCB0byByZWplY3QgbWFsZm9ybWVkIGFkZHJlc3Nlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VFbWFpbHMoXCJhQHguY29tLCBiQHkuY29tOyBhQHguY29tXCIpOyAvLyBbXCJhQHguY29tXCIsIFwiYkB5LmNvbVwiXVxuICogcGFyc2VFbWFpbHMoW1wiQUB4LmNvbVwiLCBcIiBiQHkuY29tIFwiXSk7ICAgICAgLy8gW1wiQUB4LmNvbVwiLCBcImJAeS5jb21cIl1cbiAqIHBhcnNlRW1haWxzKFwiKkBjb3JwLmNvbVwiLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KTsgLy8gW1wiKkBjb3JwLmNvbVwiXVxuICogcGFyc2VFbWFpbHModW5kZWZpbmVkKTsgICAgICAgICAgICAgICAgICAgICAvLyBbXVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbWFpbHMoXG4gIGlucHV0OiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IFBhcnNlRW1haWxzT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nW10ge1xuICBpZiAoaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICBjb25zdCB7IGxvd2VyY2FzZSA9IGZhbHNlLCBkZWR1cGUgPSB0cnVlIH0gPSBvcHRpb25zO1xuICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IFtpbnB1dCBhcyBzdHJpbmddO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBlbnRyeS5zcGxpdChFTUFJTF9MSVNUX1NFUEFSQVRPUikpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB0b2tlbi50cmltKCk7XG4gICAgICBpZiAoIXRyaW1tZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGxvd2VyY2FzZSA/IHRyaW1tZWQudG9Mb3dlckNhc2UoKSA6IHRyaW1tZWQ7XG4gICAgICBpZiAoZGVkdXBlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGFkZHJlc3MudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHNlZW4uaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgfVxuICAgICAgb3V0LnB1c2goYWRkcmVzcyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUHJhZ21hdGljIGBsb2NhbEBkb21haW4udGxkYCBzaGFwZSBjaGVjazogbm9uLWVtcHR5IGxvY2FsIGFuZCBkb21haW5cbiAqIHBhcnRzIGFyb3VuZCBhIHNpbmdsZSBgQGAsIHdpdGggYSBkb3R0ZWQgZG9tYWluIGFuZCBubyB3aGl0ZXNwYWNlLlxuICogRGVsaWJlcmF0ZWx5IGxvb3NlIChub3QgZnVsbCBSRkMgNTMyMikgLSBlbm91Z2ggdG8gY2F0Y2ggb2J2aW91cyB0eXBvc1xuICogYW5kIGdpdmUgQ0xJIC8gZm9ybSBmZWVkYmFjaywgbm90IHRvIGdhdGUgZGVsaXZlcnkuIFRyaW1zIGZpcnN0LiBUaGlzXG4gKiBpcyBhIHB1cmVseSBzeW50YWN0aWMgdGVzdCwgc28gYSB3aWxkY2FyZCBhbGxvdy1saXN0IHBhdHRlcm4gbGlrZVxuICogYCpAZXhhbXBsZS5jb21gIHBhc3NlczsgZGlzdGluZ3Vpc2hpbmcgYSBwYXR0ZXJuIGZyb20gYSByZWFsIGFkZHJlc3NcbiAqIGlzIHRoZSBzZW5kZXIgcG9saWN5J3Mgam9iLCBub3QgdGhpcyB2YWxpZGF0b3Incy5cbiAqXG4gKiBAZXhhbXBsZVxuICogaXNFbWFpbChcImFsaWNlQGV4YW1wbGUuY29tXCIpOyAvLyB0cnVlXG4gKiBpc0VtYWlsKFwibm9wZVwiKTsgICAgICAgICAgICAgIC8vIGZhbHNlIChubyBAKVxuICogaXNFbWFpbChcIm5vQGRvbWFpblwiKTsgICAgICAgICAvLyBmYWxzZSAobm8gZG90dGVkIGRvbWFpbilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gRU1BSUxfQUREUkVTUy50ZXN0KHZhbHVlLnRyaW0oKSk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSVAgYWRkcmVzc2VzIGFuZCBDSURSIGJsb2Nrc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUGFyc2UgYW4gSVB2NCAoYFwiMS4yLjMuNFwiYCkgb3IgSVB2NiAoYFwiMjAwMTpkYjg6OjFcImAsXG4gKiBgXCI6OmZmZmY6MS4yLjMuNFwiYCwgYFwiOjoxXCJgKSBhZGRyZXNzIGludG8gYSB7QGxpbmsgUGFyc2VkSXB9LCBvclxuICogYG51bGxgIHdoZW4gdGhlIGlucHV0IGlzbid0IGEgdmFsaWQgbGl0ZXJhbC4gTmV2ZXIgdGhyb3dzLiBTdXJyb3VuZGluZ1xuICogd2hpdGVzcGFjZSwgYFsuLi5dYCBicmFja2V0cyBhcm91bmQgYW4gSVB2NiBsaXRlcmFsLCBhbmQgYW4gSVB2NiB6b25lXG4gKiBpZCAoYGZlODA6OjElZXRoMGApIGFyZSBhbGwgdG9sZXJhdGVkLiBUaGUgYHZhbHVlYCBpcyByZXR1cm5lZCBhcyBhXG4gKiBgYmlnaW50YCBzbyB2NCBhbmQgdjYgc2hhcmUgb25lIGNvbXBhcmlzb24gcGF0aC5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VJcChcIjEwLjAuMC4xXCIpOyAgICAgICAgLy8geyB2ZXJzaW9uOiA0LCB2YWx1ZTogMTY3NzcyMTYxbiB9XG4gKiBwYXJzZUlwKFwiMjAwMTpkYjg6OjFcIik7ICAgICAvLyB7IHZlcnNpb246IDYsIHZhbHVlOiAuLi4gfVxuICogcGFyc2VJcChcIm5vdC1hbi1pcFwiKTsgICAgICAgLy8gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJcChpbnB1dDogc3RyaW5nKTogUGFyc2VkSXAgfCBudWxsIHtcbiAgbGV0IHRleHQgPSBpbnB1dC50cmltKCk7XG4gIGlmICh0ZXh0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIHRleHQuZW5kc1dpdGgoXCJdXCIpKSB0ZXh0ID0gdGV4dC5zbGljZSgxLCAtMSk7XG4gIGlmICh0ZXh0LmluY2x1ZGVzKFwiOlwiKSkge1xuICAgIC8vIERyb3AgYW4gSVB2NiB6b25lIGlkIChgZmU4MDo6MSVldGgwYCkgLSBpdCBpc24ndCBwYXJ0IG9mIHRoZSBhZGRyZXNzLlxuICAgIGNvbnN0IHpvbmUgPSB0ZXh0LmluZGV4T2YoXCIlXCIpO1xuICAgIGlmICh6b25lID49IDApIHRleHQgPSB0ZXh0LnNsaWNlKDAsIHpvbmUpO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJcHY2KHRleHQpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiB7IHZlcnNpb246IDYsIHZhbHVlIH07XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBwYXJzZUlwdjQodGV4dCk7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiB7IHZlcnNpb246IDQsIHZhbHVlIH07XG59XG5cbi8qKlxuICogUGFyc2UgYSBDSURSIGJsb2NrIChgXCIxMC4wLjAuMC84XCJgLCBgXCIyMDAxOmRiODo6LzMyXCJgKSBpbnRvIGFcbiAqIHtAbGluayBDaWRyfSB3aXRoIGhvc3QgYml0cyBjbGVhcmVkIGZyb20gYGJhc2VgLCBvciBgbnVsbGAgd2hlbiB0aGVcbiAqIGlucHV0IGlzbid0IGEgdmFsaWQgYmxvY2sgKGJhZCBhZGRyZXNzLCBtaXNzaW5nIC8gb3V0LW9mLXJhbmdlXG4gKiBwcmVmaXgpLiBOZXZlciB0aHJvd3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlQ2lkcihcIjEwLjAuMC4wLzhcIik/LmJhc2U7ICAgLy8gMTY3NzcyMTYwbiAoMTAuMC4wLjApXG4gKiBwYXJzZUNpZHIoXCIxMC4xLjIuMy84XCIpPy5iYXNlOyAgIC8vIDE2Nzc3MjE2MG4gKGhvc3QgYml0cyBkcm9wcGVkKVxuICogcGFyc2VDaWRyKFwiMTAuMC4wLjAvNDBcIik7ICAgICAgICAvLyBudWxsIChwcmVmaXggPiAzMiBmb3IgdjQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNpZHIoaW5wdXQ6IHN0cmluZyk6IENpZHIgfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IGlucHV0LnRyaW0oKTtcbiAgY29uc3Qgc2xhc2ggPSB0ZXh0Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgaWYgKHNsYXNoIDwgMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHByZWZpeFRleHQgPSB0ZXh0LnNsaWNlKHNsYXNoICsgMSk7XG4gIGlmICghSVBWNF9PQ1RFVC50ZXN0KHByZWZpeFRleHQpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaXAgPSBwYXJzZUlwKHRleHQuc2xpY2UoMCwgc2xhc2gpKTtcbiAgaWYgKCFpcCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHByZWZpeCA9IE51bWJlcihwcmVmaXhUZXh0KTtcbiAgY29uc3QgYml0cyA9IElQX0JJVFNbaXAudmVyc2lvbl07XG4gIGlmIChwcmVmaXggPiBiaXRzKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYmFzZSA9IGlwLnZhbHVlICYgbmV0d29ya01hc2soYml0cywgcHJlZml4KTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBpcC52ZXJzaW9uLFxuICAgIGJhc2UsXG4gICAgcHJlZml4LFxuICAgIGNpZHI6IGAke3RleHQuc2xpY2UoMCwgc2xhc2gpfS8ke3ByZWZpeH1gLFxuICB9O1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBgaXBgIGZhbGxzIGluc2lkZSBgY2lkcmAuIEJvdGggYXJndW1lbnRzIGFjY2VwdCBlaXRoZXJcbiAqIGEgc3RyaW5nIChwYXJzZWQgb24gdGhlIGZseSB2aWEge0BsaW5rIHBhcnNlSXB9IC8ge0BsaW5rIHBhcnNlQ2lkcn0pXG4gKiBvciBhbiBhbHJlYWR5LXBhcnNlZCB2YWx1ZSAtIHBhc3MgcGFyc2VkIHZhbHVlcyBpbiBob3QgbG9vcHMgdG8gc2tpcFxuICogcmUtcGFyc2luZy4gUmV0dXJucyBgZmFsc2VgIGZvciB1bnBhcnNlYWJsZSBpbnB1dCBvciBhIHZlcnNpb25cbiAqIG1pc21hdGNoIChhbiBJUHY0IGFkZHJlc3MgaXMgbmV2ZXIgaW5zaWRlIGFuIElQdjYgYmxvY2spLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpcEluQ2lkcihcIjEwLjEuMi4zXCIsIFwiMTAuMC4wLjAvOFwiKTsgICAvLyB0cnVlXG4gKiBpcEluQ2lkcihcIjExLjAuMC4xXCIsIFwiMTAuMC4wLjAvOFwiKTsgICAvLyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXBJbkNpZHIoaXA6IHN0cmluZyB8IFBhcnNlZElwLCBjaWRyOiBzdHJpbmcgfCBDaWRyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnNlZElwID0gdHlwZW9mIGlwID09PSBcInN0cmluZ1wiID8gcGFyc2VJcChpcCkgOiBpcDtcbiAgY29uc3QgcGFyc2VkQ2lkciA9IHR5cGVvZiBjaWRyID09PSBcInN0cmluZ1wiID8gcGFyc2VDaWRyKGNpZHIpIDogY2lkcjtcbiAgaWYgKCFwYXJzZWRJcCB8fCAhcGFyc2VkQ2lkciB8fCBwYXJzZWRJcC52ZXJzaW9uICE9PSBwYXJzZWRDaWRyLnZlcnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgbWFzayA9IG5ldHdvcmtNYXNrKElQX0JJVFNbcGFyc2VkQ2lkci52ZXJzaW9uXSwgcGFyc2VkQ2lkci5wcmVmaXgpO1xuICByZXR1cm4gKHBhcnNlZElwLnZhbHVlICYgbWFzaykgPT09IHBhcnNlZENpZHIuYmFzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGZpcnN0IENJRFIgaW4gYGNpZHJzYCB0aGF0IGNvbnRhaW5zIGBpcGAsIG9yIGBudWxsYCB3aGVuXG4gKiBub25lIG1hdGNoLiBgY2lkcnNgIGhvbGRzIHByZS1wYXJzZWQge0BsaW5rIENpZHJ9IHZhbHVlcyAob3IgYW55XG4gKiBvYmplY3QgZXh0ZW5kaW5nIGl0KSwgc28gY2FsbGVycyBjYW4gY2Fycnkgc2lkZSBtZXRhZGF0YSBvbiBlYWNoXG4gKiBlbnRyeSAoZS5nLiBhIHJlZ2lvbiB0YWcpIGFuZCByZWFkIGl0IHN0cmFpZ2h0IG9mZiB0aGUgcmV0dXJuZWRcbiAqIG1hdGNoLiBMaW5lYXIgc2NhbjsgcGFyc2UgdGhlIGFkZHJlc3Mgb25jZSBieSBwYXNzaW5nIGFcbiAqIHtAbGluayBQYXJzZWRJcH0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJhbmdlcyA9IFtcIjEwLjAuMC4wLzhcIiwgXCIxOTIuMTY4LjAuMC8xNlwiXVxuICogICAubWFwKHBhcnNlQ2lkcilcbiAqICAgLmZpbHRlcigoYyk6IGMgaXMgQ2lkciA9PiBjICE9PSBudWxsKTtcbiAqIGZpbmRDb250YWluaW5nQ2lkcihcIjEwLjEuMi4zXCIsIHJhbmdlcyk/LmNpZHI7IC8vIFwiMTAuMC4wLjAvOFwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ29udGFpbmluZ0NpZHI8VCBleHRlbmRzIENpZHI+KFxuICBpcDogc3RyaW5nIHwgUGFyc2VkSXAsXG4gIGNpZHJzOiBJdGVyYWJsZTxUPixcbik6IFQgfCBudWxsIHtcbiAgY29uc3QgcGFyc2VkSXAgPSB0eXBlb2YgaXAgPT09IFwic3RyaW5nXCIgPyBwYXJzZUlwKGlwKSA6IGlwO1xuICBpZiAoIXBhcnNlZElwKSByZXR1cm4gbnVsbDtcbiAgZm9yIChjb25zdCBjaWRyIG9mIGNpZHJzKSB7XG4gICAgaWYgKGNpZHIudmVyc2lvbiAhPT0gcGFyc2VkSXAudmVyc2lvbikgY29udGludWU7XG4gICAgY29uc3QgbWFzayA9IG5ldHdvcmtNYXNrKElQX0JJVFNbY2lkci52ZXJzaW9uXSwgY2lkci5wcmVmaXgpO1xuICAgIGlmICgocGFyc2VkSXAudmFsdWUgJiBtYXNrKSA9PT0gY2lkci5iYXNlKSByZXR1cm4gY2lkcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBpbnB1dGAncyBob3N0IGlzIGEgbG9vcGJhY2sgYWRkcmVzcyAtIGBsb2NhbGhvc3RgLCBhbiBJUHY0XG4gKiBgMTI3LjAuMC4wLzhgIGFkZHJlc3MsIG9yIElQdjYgYDo6MWAgLSBpLmUuIGEgc2VydmljZSBydW5uaW5nIG9uIHRoaXNcbiAqIG1hY2hpbmUgKGUuZy4gYSBsb2NhbCByZWdpc3RyeSkuIEFjY2VwdHMgYW55dGhpbmcge0BsaW5rIHVybEJ1aWxkZXJ9XG4gKiBjb2VyY2VzIChhIFVSTCBzdHJpbmcsIGBVUkxgLCBvciBgeyB1cmwgfWApOyByZXR1cm5zIGBmYWxzZWAgd2hlbiB0aGVcbiAqIGlucHV0IGhhcyBubyByZXNvbHZhYmxlIGhvc3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGlzTG9vcGJhY2tIb3N0KFwiaHR0cDovL2xvY2FsaG9zdDo0ODczXCIpOyAvLyB0cnVlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHA6Ly8xMjcuMC4wLjFcIik7ICAgICAgIC8vIHRydWVcbiAqIGlzTG9vcGJhY2tIb3N0KFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmdcIik7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvb3BiYWNrSG9zdChpbnB1dDogVXJsTGlrZSk6IGJvb2xlYW4ge1xuICBjb25zdCBob3N0ID0gdXJsQnVpbGRlcihpbnB1dCk/Lmhvc3RuYW1lO1xuICBpZiAoIWhvc3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKGhvc3QgPT09IFwibG9jYWxob3N0XCIpIHJldHVybiB0cnVlO1xuICAvLyBgVVJMYCBicmFja2V0cyBhbiBJUHY2IGhvc3QgKGBbOjoxXWApOyBzdHJpcCB0aGVtIGJlZm9yZSBwYXJzaW5nLlxuICBjb25zdCBpcCA9IGhvc3QucmVwbGFjZSgvXlxcW3xcXF0kL2csIFwiXCIpO1xuICByZXR1cm4gaXBJbkNpZHIoaXAsIFwiMTI3LjAuMC4wLzhcIikgfHwgaXBJbkNpZHIoaXAsIFwiOjoxLzEyOFwiKTtcbn1cblxuLyoqXG4gKiBOZXR3b3JrIG1hc2sgZm9yIGBwcmVmaXhgIGxlYWRpbmcgYml0cyBvZiBhIGBiaXRzYC13aWRlIGFkZHJlc3MgYXMgYVxuICogYGJpZ2ludGA6IHRoZSB0b3AgYHByZWZpeGAgYml0cyBzZXQsIHRoZSBsb3cgaG9zdCBiaXRzIGNsZWFyZWQuXG4gKiBgcHJlZml4ID09PSAwYCB5aWVsZHMgYDBuYCAobWF0Y2hlcyBldmVyeXRoaW5nKTsgYHByZWZpeCA9PT0gYml0c2BcbiAqIHlpZWxkcyB0aGUgYWxsLW9uZXMgbWFzayAobWF0Y2hlcyBhIHNpbmdsZSBhZGRyZXNzKS5cbiAqL1xuZnVuY3Rpb24gbmV0d29ya01hc2soYml0czogbnVtYmVyLCBwcmVmaXg6IG51bWJlcik6IGJpZ2ludCB7XG4gIGNvbnN0IGhvc3RCaXRzID0gQmlnSW50KGJpdHMgLSBwcmVmaXgpO1xuICBjb25zdCBmdWxsID0gKDFuIDw8IEJpZ0ludChiaXRzKSkgLSAxbjtcbiAgcmV0dXJuIGZ1bGwgXiAoKDFuIDw8IGhvc3RCaXRzKSAtIDFuKTtcbn1cblxuLyoqIFBhcnNlIGEgZG90dGVkLXF1YWQgSVB2NCBsaXRlcmFsIGludG8gYSAzMi1iaXQgdmFsdWUsIGVsc2UgYG51bGxgLiAqL1xuZnVuY3Rpb24gcGFyc2VJcHY0KGlucHV0OiBzdHJpbmcpOiBiaWdpbnQgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBpbnB1dC5zcGxpdChcIi5cIik7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDQpIHJldHVybiBudWxsO1xuICBsZXQgdmFsdWUgPSAwbjtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgaWYgKCFJUFY0X09DVEVULnRlc3QocGFydCkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9jdGV0ID0gTnVtYmVyKHBhcnQpO1xuICAgIGlmIChvY3RldCA+IDI1NSkgcmV0dXJuIG51bGw7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOG4pIHwgQmlnSW50KG9jdGV0KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogUGFyc2UgYW4gSVB2NiBsaXRlcmFsIGludG8gYSAxMjgtYml0IHZhbHVlLCBlbHNlIGBudWxsYC4gSGFuZGxlcyBgOjpgXG4gKiB6ZXJvLWNvbXByZXNzaW9uIChhdCBtb3N0IG9uY2UpIGFuZCBhIHRyYWlsaW5nIGVtYmVkZGVkIElQdjQgZ3JvdXBcbiAqIChgOjpmZmZmOjEuMi4zLjRgKS4gVGhlIHpvbmUgaWQsIGlmIGFueSwgaXMgZXhwZWN0ZWQgdG8gYmUgc3RyaXBwZWRcbiAqIGJ5IHtAbGluayBwYXJzZUlwfSBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSXB2NihpbnB1dDogc3RyaW5nKTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IGhhbHZlcyA9IGlucHV0LnNwbGl0KFwiOjpcIik7XG4gIGlmIChoYWx2ZXMubGVuZ3RoID4gMikgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgaGVhZCA9IHBhcnNlSGV4dGV0cyhoYWx2ZXNbMF0hKTtcbiAgaWYgKGhlYWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIGlmIChoYWx2ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgdGFpbCA9IHBhcnNlSGV4dGV0cyhoYWx2ZXNbMV0hKTtcbiAgICBpZiAodGFpbCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgLy8gXCI6OlwiIG11c3Qgc3RhbmQgaW4gZm9yIGF0IGxlYXN0IG9uZSBhbGwtemVybyBoZXh0ZXQuXG4gICAgY29uc3QgbWlzc2luZyA9IDggLSBoZWFkLmxlbmd0aCAtIHRhaWwubGVuZ3RoO1xuICAgIGlmIChtaXNzaW5nIDwgMSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGhleHRldHNUb1ZhbHVlKFsuLi5oZWFkLCAuLi5BcnJheShtaXNzaW5nKS5maWxsKDApLCAuLi50YWlsXSk7XG4gIH1cblxuICBpZiAoaGVhZC5sZW5ndGggIT09IDgpIHJldHVybiBudWxsO1xuICByZXR1cm4gaGV4dGV0c1RvVmFsdWUoaGVhZCk7XG59XG5cbi8qKlxuICogUGFyc2Ugb25lIGNvbG9uLXNlcGFyYXRlZCBydW4gb2YgSVB2NiBoZXh0ZXRzLCBleHBhbmRpbmcgYSB0cmFpbGluZ1xuICogZW1iZWRkZWQgSVB2NCBncm91cCBpbnRvIGl0cyB0d28gaGV4dGV0cy4gQW4gZW1wdHkgc3RyaW5nIHlpZWxkcyBhblxuICogZW1wdHkgbGlzdCAodGhlIHNpZGUgb2YgYSBsZWFkaW5nIC8gdHJhaWxpbmcgYDo6YCkuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSGV4dGV0cyhwYXJ0OiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICBpZiAocGFydCA9PT0gXCJcIikgcmV0dXJuIFtdO1xuICBjb25zdCB0b2tlbnMgPSBwYXJ0LnNwbGl0KFwiOlwiKTtcbiAgY29uc3QgaGV4dGV0czogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpXSE7XG4gICAgaWYgKHRva2VuLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgLy8gQSBkb3R0ZWQtcXVhZCBpcyBvbmx5IGxlZ2FsIGFzIHRoZSBmaW5hbCBncm91cC5cbiAgICAgIGlmIChpICE9PSB0b2tlbnMubGVuZ3RoIC0gMSkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCB2NCA9IHBhcnNlSXB2NCh0b2tlbik7XG4gICAgICBpZiAodjQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgaGV4dGV0cy5wdXNoKE51bWJlcigodjQgPj4gMTZuKSAmIDB4ZmZmZm4pLCBOdW1iZXIodjQgJiAweGZmZmZuKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghSVBWNl9IRVhURVQudGVzdCh0b2tlbikpIHJldHVybiBudWxsO1xuICAgICAgaGV4dGV0cy5wdXNoKHBhcnNlSW50KHRva2VuLCAxNikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGV4dGV0cztcbn1cblxuLyoqIEZvbGQgZXhhY3RseSA4IGhleHRldHMgaW50byBhIHNpbmdsZSAxMjgtYml0IGBiaWdpbnRgLCBlbHNlIGBudWxsYC4gKi9cbmZ1bmN0aW9uIGhleHRldHNUb1ZhbHVlKGhleHRldHM6IG51bWJlcltdKTogYmlnaW50IHwgbnVsbCB7XG4gIGlmIChoZXh0ZXRzLmxlbmd0aCAhPT0gOCkgcmV0dXJuIG51bGw7XG4gIGxldCB2YWx1ZSA9IDBuO1xuICBmb3IgKGNvbnN0IGhleHRldCBvZiBoZXh0ZXRzKSB2YWx1ZSA9ICh2YWx1ZSA8PCAxNm4pIHwgQmlnSW50KGhleHRldCk7XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ==
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUlILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFDbkMsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUM1RCxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUVuQyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUVuQywrREFBK0Q7QUFDL0QsTUFBTSxPQUFPLEdBQXdDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkUsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQy9CLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXpDLG9FQUFvRTtBQUNwRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztBQUN2QyxvRUFBb0U7QUFDcEUsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUM7QUFvRG5EOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxHQUFHO0lBQzlCLFlBQVksR0FBUTtRQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7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RyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWE7SUFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMs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QUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDekMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksRUFBRSxLQUFLLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxTQUFTLGNBQWMsQ0FBQyxPQUFpQjtJQUN2QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTztRQUFFLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLXNhZmUgbmV0d29ya2luZyBoZWxwZXJzIGJ1aWx0IGFyb3VuZCB7QGxpbmsgdXJsQnVpbGRlcn06IGFcbiAqIHRvbGVyYW50IGBVUkxgIGNvZXJjaW9uICsgY2hhaW5hYmxlIGJ1aWxkZXIgdGhhdCBncmFjZWZ1bGx5IGhhbmRsZXNcbiAqIHBhcnRpYWwgaW5wdXRzIChiYXJlIGhvc3RzLCBwYXRoLW9ubHkgc3RyaW5ncywgYHsgdXJsIH1gIHdyYXBwZXJzKSxcbiAqIGEgc21hbGwgSVB2NCAvIElQdjYgYWRkcmVzcyArIENJRFIgdG9vbGtpdCAocGFyc2luZyBhbmQgbWVtYmVyc2hpcFxuICogbG9va3VwcyksIGFuZCBlbWFpbC1hZGRyZXNzIHBhcnNpbmcgKHtAbGluayBwYXJzZUVtYWlsc30gL1xuICoge0BsaW5rIGlzRW1haWx9KSB0aGF0IG5vcm1hbGl6ZXMgdGhlIENTViAvIHNpbmdsZS1zdHJpbmcgLyBhcnJheVxuICogaW5wdXRzIGVtYWlsIHJlY2lwaWVudCBhbmQgYWxsb3ctbGlzdCBmaWVsZHMgYWNjZXB0IGludG8gYSBjbGVhblxuICogYHN0cmluZ1tdYC4gTm8gbm9kZS1vbmx5IGltcG9ydHMsIHNvIHRoaXMgbW9kdWxlIGlzIHRoZSBjYW5vbmljYWxcbiAqIGhvbWUgZm9yIGFueXRoaW5nIFVSTC0sIElQLSwgb3IgZW1haWwtc2hhcGVkIHRoYXQgYWxzbyBoYXMgdG8gcnVuIGluXG4gKiBhIFZpdGUgLyBXZWJwYWNrIC8gZXNidWlsZCBjbGllbnQgYnVuZGxlLiBOb2RlLW9ubHkgbmV0d29yayBoZWxwZXJzXG4gKiAoZS5nLiBETlMgcmVzb2x1dGlvbikgYmVsb25nIGluIGEgbm9kZS10YWdnZWQgcGFja2FnZSwgbm90IGhlcmUuXG4gKiBSZXVzZSB0aGlzIG1vZHVsZSBmb3IgVVJMLCBJUC9DSURSLCBhbmQgZW1haWwgcGFyc2luZyBpbnN0ZWFkIG9mIGludHJvZHVjaW5nXG4gKiBwYWNrYWdlLWxvY2FsIG5vcm1hbGl6ZXJzIHdpdGggc3VidGx5IGRpZmZlcmVudCBydWxlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBOb25GdW5jdGlvbktleXMgfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcblxuY29uc3QgTE9DQUxfSE9TVF9VUkwgPSBuZXcgVVJMKFwiaHR0cDovL2xvY2FsaG9zdFwiKTtcbmNvbnN0IFVSTF9TQ0hFTUVfREVGQVVMVCA9IFwiaHR0cHNcIjtcbmNvbnN0IFVSTF9TQ0hFTUVfUFJFRklYID0gL14oW0EtWmEtel1bQS1aYS16MC05Ky4tXSo6XFwvXFwvKS87XG5jb25zdCBVUkxfUEFUSF9TRUdNRU5UX1RSSU0gPSAvXlxcLyt8XFwvKyQvZztcbmNvbnN0IFVSTF9TQ0hFTUVfU0VQQVJBVE9SID0gXCI6Ly9cIjtcblxuLyoqIEhpZ2hlc3QgdmFsaWQgVENQIHBvcnQgbnVtYmVyLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9UQ1BfUE9SVCA9IDY1XzUzNTtcblxuLyoqIFRvdGFsIGJpdCB3aWR0aCBvZiBhbiBhZGRyZXNzIG9mIGVhY2gge0BsaW5rIElwVmVyc2lvbn0uICovXG5jb25zdCBJUF9CSVRTOiBSZWFkb25seTxSZWNvcmQ8SXBWZXJzaW9uLCBudW1iZXI+PiA9IHsgNDogMzIsIDY6IDEyOCB9O1xuY29uc3QgSVBWNF9PQ1RFVCA9IC9eXFxkezEsM30kLztcbmNvbnN0IElQVjZfSEVYVEVUID0gL15bMC05YS1mQS1GXXsxLDR9JC87XG5cbi8qKiBEZWxpbWl0ZXJzIGJldHdlZW4gYWRkcmVzc2VzIGluIGEgZnJlZS10ZXh0IC8gQ1NWIGVtYWlsIGxpc3QuICovXG5jb25zdCBFTUFJTF9MSVNUX1NFUEFSQVRPUiA9IC9bXFxzLDtdKy87XG4vKiogUHJhZ21hdGljIGBsb2NhbEBkb21haW4udGxkYCBzaGFwZSBjaGVjayAobm90IGZ1bGwgUkZDIDUzMjIpLiAqL1xuY29uc3QgRU1BSUxfQUREUkVTUyA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBbnl0aGluZyB7QGxpbmsgdXJsQnVpbGRlcn0ga25vd3MgaG93IHRvIGNvZXJjZVxuICogaW50byBhIFVSTDpcbiAqXG4gKiAtIEEgc3RyaW5nOiBhIGhvc3QsIGEgZnVsbCBVUkwsIG9yIGEgcGF0aCAvIHF1ZXJ5IC8gaGFzaCBmcmFnbWVudC5cbiAqIC0gQSBXSEFUV0cgYFVSTGAgaW5zdGFuY2UuXG4gKiAtIEFueSBvYmplY3Qgd2l0aCBhIGB1cmxgIGZpZWxkIChlLmcuIGEgZmV0Y2ggYFJlcXVlc3RgLCBhIERhdGFicmlja3NcbiAqICAgYFdvcmtzcGFjZUNsaWVudGAgY29uZmlnKS5cbiAqL1xuZXhwb3J0IHR5cGUgVXJsTGlrZSA9IHN0cmluZyB8IFVSTCB8IHsgdXJsOiBzdHJpbmcgfTtcblxuLyoqIElQIHByb3RvY29sIGZhbWlseTogYDRgIGZvciBJUHY0LCBgNmAgZm9yIElQdjYuICovXG5leHBvcnQgdHlwZSBJcFZlcnNpb24gPSA0IHwgNjtcblxuLyoqXG4gKiBBIHBhcnNlZCBJUCBhZGRyZXNzLiBgdmFsdWVgIGlzIHRoZSBhZGRyZXNzIGFzIGFuIHVuc2lnbmVkIGludGVnZXJcbiAqIChhIDMyLWJpdCByYW5nZSBmb3IgdjQsIDEyOC1iaXQgZm9yIHY2KSBoZWxkIGluIGEgYGJpZ2ludGAgc28gYm90aFxuICogZmFtaWxpZXMgc2hhcmUgb25lIGNvbXBhcmlzb24gLyBtYXNraW5nIHBhdGguIFByb2R1Y2Ugb25lIHdpdGhcbiAqIHtAbGluayBwYXJzZUlwfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRJcCB7XG4gIHZlcnNpb246IElwVmVyc2lvbjtcbiAgLyoqIFRoZSBhZGRyZXNzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgKGBiaWdpbnRgIGZvciB1bmlmb3JtIHY0L3Y2IG1hdGgpLiAqL1xuICB2YWx1ZTogYmlnaW50O1xufVxuXG4vKipcbiAqIEEgcGFyc2VkIENJRFIgYmxvY2sgKGAxMC4wLjAuMC84YCwgYDIwMDE6ZGI4OjovMzJgKS4gYGJhc2VgIGlzIHRoZVxuICogbmV0d29yayBhZGRyZXNzIHdpdGggYWxsIGhvc3QgYml0cyBjbGVhcmVkLCBzbyBtZW1iZXJzaGlwIGlzIGFcbiAqIHNpbmdsZSBtYXNrZWQgY29tcGFyZSAoc2VlIHtAbGluayBpcEluQ2lkcn0pLiBQcm9kdWNlIG9uZSB3aXRoXG4gKiB7QGxpbmsgcGFyc2VDaWRyfS4gQ2FycmllcyB0aGUgbm9ybWFsaXplZCBgY2lkcmAgc3RyaW5nIGZvciBsb2dnaW5nXG4gKiBhbmQgdG8ga2V5IGJhY2sgdG8gY2FsbGVyLXNpZGUgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2lkciB7XG4gIHZlcnNpb246IElwVmVyc2lvbjtcbiAgLyoqIE5ldHdvcmsgYWRkcmVzcyAoaG9zdCBiaXRzIHplcm9lZCkgYXMgYW4gdW5zaWduZWQgYGJpZ2ludGAuICovXG4gIGJhc2U6IGJpZ2ludDtcbiAgLyoqIFByZWZpeCBsZW5ndGggaW4gYml0cyAodGhlIG51bWJlciBhZnRlciB0aGUgYC9gKS4gKi9cbiAgcHJlZml4OiBudW1iZXI7XG4gIC8qKiBOb3JtYWxpemVkIGA8YWRkcmVzcz4vPHByZWZpeD5gIHN0cmluZy4gKi9cbiAgY2lkcjogc3RyaW5nO1xufVxuXG4vKiogU2V0dGFibGUsIG5vbi1tZXRob2QgYFVSTGAgcHJvcGVydGllcyAtIHRoZSBrZXlzIHtAbGluayBVcmxCdWlsZGVyLndpdGh9IGFjY2VwdHMuICovXG50eXBlIFVybFByb3BlcnR5S2V5ID0gTm9uRnVuY3Rpb25LZXlzPFVybEJ1aWxkZXJJbXBsPjtcblxuLyoqXG4gKiBBIGBVUkxgIHN1YmNsYXNzIHdpdGggY2hhaW5hYmxlLCBjb3B5LW9uLXdyaXRlIGhlbHBlcnMuIEV2ZXJ5IG11dGF0aW5nXG4gKiBtZXRob2QgcmV0dXJucyBhIGZyZXNoIGJ1aWxkZXIgcmF0aGVyIHRoYW4gZWRpdGluZyBpbiBwbGFjZSwgc28gYSBiYXNlXG4gKiBidWlsZGVyIGNhbiBiZSBzYWZlbHkgcmV1c2VkLiBDb25zdHJ1Y3Qgb25lIHZpYSB7QGxpbmsgdXJsQnVpbGRlcn0uXG4gKi9cbmNsYXNzIFVybEJ1aWxkZXJJbXBsIGV4dGVuZHMgVVJMIHtcbiAgY29uc3RydWN0b3IodXJsOiBVUkwpIHtcbiAgICBzdXBlcih1cmwpO1xuICB9XG5cbiAgLyoqIFRoZSBzY2hlbWUgd2l0aG91dCB0aGUgdHJhaWxpbmcgY29sb24gKGBodHRwc2AsIG5vdCBgaHR0cHM6YCkuICovXG4gIGdldCBzY2hlbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbC5zbGljZSgwLCAtMSk7XG4gIH1cblxuICBzZXQgc2NoZW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByb3RvY29sID0gdmFsdWUgKyBcIjpcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IHdpdGggYSBzaW5nbGUgYFVSTGAgcHJvcGVydHkgKGBwYXRobmFtZWAsIGBzZWFyY2hgLFxuICAgKiBgaG9zdG5hbWVgLCBgc2NoZW1lYCwgLi4uKSBzZXQgdG8gYHZhbHVlYCwgbGVhdmluZyB0aGlzIGJ1aWxkZXJcbiAgICogdW50b3VjaGVkLlxuICAgKi9cbiAgd2l0aDxLIGV4dGVuZHMgVXJsUHJvcGVydHlLZXk+KGtleTogSywgdmFsdWU6IFVybEJ1aWxkZXJJbXBsW0tdKTogVXJsQnVpbGRlciB7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBVcmxCdWlsZGVySW1wbCh0aGlzKTtcbiAgICAobmV4dCBhcyBhbnkpW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gbmV3IFVybEJ1aWxkZXJJbXBsKG5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgd2l0aCBgcGF0aFNlZ21lbnRzYCBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBwYXRobmFtZS5cbiAgICogU2VnbWVudHMgbWF5IGJlIHN0cmluZ3Mgb3Igc3RyaW5nIGFycmF5czsgZWFjaCBpcyB0cmltbWVkIG9mXG4gICAqIGJvdW5kYXJ5IHNsYXNoZXMgYW5kIGJsYW5rcyBhcmUgZHJvcHBlZCBiZWZvcmUgam9pbmluZyB3aXRoIGAvYC5cbiAgICovXG4gIHdpdGhQYXRoQXBwZW5kKC4uLnBhdGhTZWdtZW50czogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogVXJsQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFBhdGhSZXBsYWNlKHRoaXMucGF0aG5hbWUsIC4uLnBhdGhTZWdtZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSB3aG9zZSBwYXRobmFtZSBpcyBgcGF0aFNlZ21lbnRzYCBqb2luZWQgd2l0aCBgL2AsXG4gICAqIHJlcGxhY2luZyBhbnkgZXhpc3RpbmcgcGF0aC4gU2VnbWVudHMgbWF5IGJlIHN0cmluZ3Mgb3Igc3RyaW5nXG4gICAqIGFycmF5czsgZWFjaCBpcyB0cmltbWVkIG9mIGJvdW5kYXJ5IHNsYXNoZXMgYW5kIGJsYW5rcyBhcmUgZHJvcHBlZC5cbiAgICovXG4gIHdpdGhQYXRoUmVwbGFjZSguLi5wYXRoU2VnbWVudHM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSk6IFVybEJ1aWxkZXIge1xuICAgIGNvbnN0IHBhdGhuYW1lUGFydHM6IHN0cmluZ1tdID0gWy4uLnBhdGhTZWdtZW50c10uZmxhdE1hcCgocCkgPT4gKEFycmF5LmlzQXJyYXkocCkgPyBwIDogW3BdKSk7XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRobmFtZVBhcnRzXG4gICAgICAubWFwKChwKSA9PiBwLnJlcGxhY2UoVVJMX1BBVEhfU0VHTUVOVF9UUklNLCBcIlwiKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiL1wiKTtcbiAgICByZXR1cm4gdGhpcy53aXRoKFwicGF0aG5hbWVcIiwgXCIvXCIgKyBwYXRobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoaXMgVVJMJ3MgcGF0aG5hbWUgaXMgYHBhdGhgIG9yIGxpdmVzIGJlbmVhdGggaXQsXG4gICAqIG1hdGNoaW5nIG9uIHNlZ21lbnQgYm91bmRhcmllcyBzbyBgL2FwaWAgbWF0Y2hlcyBgL2FwaWAgYW5kXG4gICAqIGAvYXBpL2Nvb2xgIGJ1dCBub3QgYC9hcGljb29sYC4gQSBtaXNzaW5nIGxlYWRpbmcgc2xhc2ggb24gYHBhdGhgXG4gICAqIGlzIHRvbGVyYXRlZDsgcXVlcnkgYW5kIGhhc2ggYXJlIGlnbm9yZWQgKHRoZXkgYXJlbid0IHBhcnQgb2ZcbiAgICogYHBhdGhuYW1lYCkuIE1hdGNoaW5nIGlzIGV4YWN0IG90aGVyd2lzZSAtIHRyYWlsaW5nIHNsYXNoZXMgYXJlXG4gICAqIG5vdCBub3JtYWxpemVkIGFuZCBgL2AgbWF0Y2hlcyBvbmx5IHRoZSByb290LlxuICAgKi9cbiAgcGF0aE1hdGNoZXMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lO1xuICAgIGlmIChwYXRobmFtZSA9PSBwYXRoKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikpIHBhdGggPSBcIi9cIiArIHBhdGg7XG4gICAgaWYgKHBhdGhuYW1lID09IHBhdGgpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBwYXRobmFtZS5zdGFydHNXaXRoKHBhdGggKyBcIi9cIik7XG4gIH1cbn1cblxuLyoqIFB1YmxpYyB0eXBlIGZvciB0aGUge0BsaW5rIHVybEJ1aWxkZXJ9IHJldHVybiB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIFVybEJ1aWxkZXIgPSBVcmxCdWlsZGVySW1wbDtcblxuLyoqIFdpdGggbm8gYXJndW1lbnQsIHJlc29sdmVzIHRvIHRoZSBiYXNlIG9yaWdpbiAobmV2ZXIgYG51bGxgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmxCdWlsZGVyKCk6IFVybEJ1aWxkZXI7XG5cbi8qKlxuICogQ29lcmNlIGEge0BsaW5rIFVybExpa2V9IGludG8gYSBjaGFpbmFibGUge0BsaW5rIFVybEJ1aWxkZXJ9LCBvciBgbnVsbGBcbiAqIHdoZW4gdGhlIGlucHV0IGNhbm5vdCBiZSBwYXJzZWQgaW50byBhIFVSTC4gTmV2ZXIgdGhyb3dzLlxuICpcbiAqIC0gQSBgVVJMYCBpbnN0YW5jZSBvciBgeyB1cmwgfWAgd3JhcHBlciBpcyBhZG9wdGVkIGFzLWlzLlxuICogLSBBIGJhcmUgaG9zdG5hbWUgKGBcImV4YW1wbGUuY29tXCJgKSBpcyB1cGdyYWRlZCB0byBgaHR0cHM6Ly9gOyBhblxuICogICBleHBsaWNpdCBzY2hlbWUgaXMgcHJlc2VydmVkLlxuICogLSBBIHBhdGggLyBxdWVyeSAvIGhhc2ggZnJhZ21lbnQgKGBcIi9hcGlcImAsIGBcIj9xPTFcImAsIGBcIiN4XCJgKSBpc1xuICogICByZXNvbHZlZCBhZ2FpbnN0IHtAbGluayBkZWZhdWx0VXJsfSAodGhlIGJyb3dzZXIgb3JpZ2luLCBlbHNlXG4gKiAgIGBodHRwOi8vbG9jYWxob3N0YCkuXG4gKiAtIEFuIGVtcHR5IC8gYmxhbmsgc3RyaW5nIG9yIG9taXR0ZWQgaW5wdXQgcmVzb2x2ZXMgdG8gdGhlIGJhc2VcbiAqICAgb3JpZ2luLlxuICpcbiAqIEBleGFtcGxlXG4gKiB1cmxCdWlsZGVyKFwiZXhhbXBsZS5jb21cIik7ICAgICAgICAgIC8vIGh0dHBzOi8vZXhhbXBsZS5jb20vXG4gKiB1cmxCdWlsZGVyKFwiaHR0cDovL3gvcGF0aFwiKTsgICAgICAgIC8vIGh0dHA6Ly94L3BhdGhcbiAqIHVybEJ1aWxkZXIoXCIvYXBpL3YyXCIpOyAgICAgICAgICAgICAgLy8gaHR0cDovL2xvY2FsaG9zdC9hcGkvdjJcbiAqIHVybEJ1aWxkZXIoeyB1cmw6IFwiaHR0cDovL3lcIiB9KTsgICAgLy8gaHR0cDovL3kvXG4gKiB1cmxCdWlsZGVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vbG9jYWxob3N0L1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsQnVpbGRlcihpbnB1dD86IFVybExpa2UpOiBVcmxCdWlsZGVyIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gdXJsQnVpbGRlcihpbnB1dD86IFVybExpa2UpOiBVcmxCdWlsZGVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgVVJMKSB7XG4gICAgcmV0dXJuIG5ldyBVcmxCdWlsZGVySW1wbChpbnB1dCk7XG4gIH1cbiAgaWYgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBcInVybFwiIGluIGlucHV0KSB7XG4gICAgaW5wdXQgPSBpbnB1dC51cmw7XG4gIH1cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlucHV0ID0gaW5wdXQudHJpbSgpO1xuICB9XG4gIGlmIChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFwiL1wiKSB8fCBpbnB1dC5zdGFydHNXaXRoKFwiP1wiKSB8fCBpbnB1dC5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgY29uc3Qgam9pbmVkVXJsID0gZGVmYXVsdFVybCgpLnRvU3RyaW5nKCkuc2xpY2UoMCwgLTEpICsgaW5wdXQ7XG4gICAgICByZXR1cm4gdXJsQnVpbGRlcihqb2luZWRVcmwpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChVUkxfU0NIRU1FX1NFUEFSQVRPUikpIHtcbiAgICAgIGlucHV0ID0gYCR7VVJMX1NDSEVNRV9ERUZBVUxUfSR7aW5wdXR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaChVUkxfU0NIRU1FX1BSRUZJWCk7XG4gICAgICBjb25zdCBzY2hlbWVQcmVmaXggPSBtYXRjaD8uWzFdO1xuICAgICAgaWYgKHNjaGVtZVByZWZpeCkge1xuICAgICAgICBjb25zdCByZXN0ID0gaW5wdXQuc2xpY2Uoc2NoZW1lUHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIGlucHV0ID0gYCR7c2NoZW1lUHJlZml4fSR7cmVzdCB8fCBkZWZhdWx0VXJsKCkuaG9zdG5hbWV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0ID0gYCR7VVJMX1NDSEVNRV9ERUZBVUxUfTovLyR7aW5wdXR9YDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVybEJ1aWxkZXIoZGVmYXVsdFVybCgpKTtcbiAgfVxuICBjb25zdCB1cmwgPSBwYXJzZVVybChpbnB1dCk7XG4gIHJldHVybiB1cmwgPyB1cmxCdWlsZGVyKHVybCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQmFzZSBvcmlnaW4gZm9yIHJlc29sdmluZyBwYXRoLW9ubHkgaW5wdXRzLiBJbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGVcbiAqIGN1cnJlbnQgcGFnZSdzIG9yaWdpbiAoYHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5gKSwgc28gYHVybEJ1aWxkZXIoXCIvYXBpXCIpYFxuICogcmVmbGVjdHMgd2hlcmUgdGhlIGFwcCBpcyBhY3R1YWxseSBzZXJ2ZWQgZnJvbTsgb24gdGhlIHNlcnZlciAvIGluXG4gKiB0ZXN0cyAobm8gYHdpbmRvd2AsIG9yIGFuIG9wYXF1ZSBgXCJudWxsXCJgIG9yaWdpbikgaXQgZmFsbHMgYmFjayB0b1xuICogYGh0dHA6Ly9sb2NhbGhvc3RgLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0VXJsKCk6IFVSTCB7XG4gIC8vIFJlYWNoIGB3aW5kb3dgIHZpYSBgZ2xvYmFsVGhpc2Agc28gdGhpcyBjb21waWxlcyB3aXRob3V0IHRoZSBET01cbiAgLy8gbGliIChpdCdzIGB1bmRlZmluZWRgIG9uIHRoZSBzZXJ2ZXIgLyBpbiB3b3JrZXJzIHdpdGhvdXQgb25lKS5cbiAgY29uc3Qgb3JpZ2luID0gKGdsb2JhbFRoaXMgYXMgeyB3aW5kb3c/OiB7IGxvY2F0aW9uPzogeyBvcmlnaW4/OiBzdHJpbmcgfSB9IH0pLndpbmRvdz8ubG9jYXRpb25cbiAgICA/Lm9yaWdpbjtcbiAgaWYgKG9yaWdpbiAmJiBvcmlnaW4gIT09IFwibnVsbFwiKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gcGFyc2VVcmwob3JpZ2luKTtcbiAgICBpZiAob3JpZ2luVXJsKSB7XG4gICAgICByZXR1cm4gb3JpZ2luVXJsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFVSTChMT0NBTF9IT1NUX1VSTCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKGlucHV0OiBzdHJpbmcpOiBVUkwgfCBudWxsIHtcbiAgaWYgKGlucHV0ICYmIGlucHV0LmluY2x1ZGVzKFVSTF9TQ0hFTUVfU0VQQVJBVE9SKSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChpbnB1dCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEVtYWlsIGFkZHJlc3Nlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgcGFyc2VFbWFpbHN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUVtYWlsc09wdGlvbnMge1xuICAvKiogTG93ZXItY2FzZSBldmVyeSBhZGRyZXNzICh1c2VmdWwgZm9yIGFsbG93LWxpc3RzIC8gbWF0Y2hpbmcpLiBPZmYgYnkgZGVmYXVsdC4gKi9cbiAgbG93ZXJjYXNlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERyb3AgbGF0ZXIgY2FzZS1pbnNlbnNpdGl2ZSBkdXBsaWNhdGVzLCBrZWVwaW5nIGZpcnN0LXNlZW4gY2FzaW5nLlxuICAgKiBPbiBieSBkZWZhdWx0IC0gYSByZWNpcGllbnQgb3IgcGF0dGVybiBsaXN0IHJhcmVseSB3YW50cyByZXBlYXRzLlxuICAgKi9cbiAgZGVkdXBlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHNoYXBlcyBhbiBlbWFpbCBhZGRyZXNzIGZpZWxkIGFjY2VwdHMgLSBhIHNpbmdsZSBzdHJpbmcsXG4gKiBhIGNvbW1hIC8gc2VtaWNvbG9uIC8gd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCwgYW4gYXJyYXkgb2YgZWl0aGVyLFxuICogb3Igbm90aGluZyAtIGludG8gYSBjbGVhbiBgc3RyaW5nW11gLiBFYWNoIGVudHJ5IGlzIHNwbGl0IG9uIHRoZSBsaXN0XG4gKiBzZXBhcmF0b3JzLCB0cmltbWVkLCBhbmQgZGUtZW1wdGllZDsgYmxhbmtzIGFuZCBub24tc3RyaW5nIGFycmF5XG4gKiBtZW1iZXJzIGFyZSBkcm9wcGVkLiBCeSBkZWZhdWx0IGR1cGxpY2F0ZXMgYXJlIHJlbW92ZWRcbiAqIGNhc2UtaW5zZW5zaXRpdmVseSAoZmlyc3Qtc2VlbiBjYXNpbmcgd2lucykgYW5kIGNhc2luZyBpcyBvdGhlcndpc2VcbiAqIHByZXNlcnZlZDsgcGFzcyBgbG93ZXJjYXNlYCB0byBmb2xkIGV2ZXJ5dGhpbmcgdG8gbG93ZXIgY2FzZSAoZS5nLiBmb3JcbiAqIGFuIGFsbG93LWxpc3QpLiBUaGlzIGlzIHRoZSBvbmUgcGxhY2UgcmVjaXBpZW50IGxpc3RzLCBDQy9CQ0MgaW5wdXRzLFxuICogYW5kIHNlbmRlciBhbGxvdy1saXN0cyBhY3Jvc3MgdGhlIHJlcG8gYWdyZWUgb24gaG93IGZyZWUtdGV4dCBlbWFpbFxuICogaW5wdXQgaXMgcmVhZC4gTmV2ZXIgdGhyb3dzOyBkb2VzIG5vdCB2YWxpZGF0ZSAtIHBhaXIgd2l0aFxuICoge0BsaW5rIGlzRW1haWx9IHdoZW4geW91IG5lZWQgdG8gcmVqZWN0IG1hbGZvcm1lZCBhZGRyZXNzZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlRW1haWxzKFwiYUB4LmNvbSwgYkB5LmNvbTsgYUB4LmNvbVwiKTsgLy8gW1wiYUB4LmNvbVwiLCBcImJAeS5jb21cIl1cbiAqIHBhcnNlRW1haWxzKFtcIkFAeC5jb21cIiwgXCIgYkB5LmNvbSBcIl0pOyAgICAgIC8vIFtcIkFAeC5jb21cIiwgXCJiQHkuY29tXCJdXG4gKiBwYXJzZUVtYWlscyhcIipAY29ycC5jb21cIiwgeyBsb3dlcmNhc2U6IHRydWUgfSk7IC8vIFtcIipAY29ycC5jb21cIl1cbiAqIHBhcnNlRW1haWxzKHVuZGVmaW5lZCk7ICAgICAgICAgICAgICAgICAgICAgLy8gW11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW1haWxzKFxuICBpbnB1dDogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBQYXJzZUVtYWlsc09wdGlvbnMgPSB7fSxcbik6IHN0cmluZ1tdIHtcbiAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgY29uc3QgeyBsb3dlcmNhc2UgPSBmYWxzZSwgZGVkdXBlID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBbaW5wdXQgYXMgc3RyaW5nXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICh0eXBlb2YgZW50cnkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZW50cnkuc3BsaXQoRU1BSUxfTElTVF9TRVBBUkFUT1IpKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gdG9rZW4udHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBsb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkO1xuICAgICAgaWYgKGRlZHVwZSkge1xuICAgICAgICBjb25zdCBrZXkgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICAgIG91dC5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFByYWdtYXRpYyBgbG9jYWxAZG9tYWluLnRsZGAgc2hhcGUgY2hlY2s6IG5vbi1lbXB0eSBsb2NhbCBhbmQgZG9tYWluXG4gKiBwYXJ0cyBhcm91bmQgYSBzaW5nbGUgYEBgLCB3aXRoIGEgZG90dGVkIGRvbWFpbiBhbmQgbm8gd2hpdGVzcGFjZS5cbiAqIERlbGliZXJhdGVseSBsb29zZSAobm90IGZ1bGwgUkZDIDUzMjIpIC0gZW5vdWdoIHRvIGNhdGNoIG9idmlvdXMgdHlwb3NcbiAqIGFuZCBnaXZlIENMSSAvIGZvcm0gZmVlZGJhY2ssIG5vdCB0byBnYXRlIGRlbGl2ZXJ5LiBUcmltcyBmaXJzdC4gVGhpc1xuICogaXMgYSBwdXJlbHkgc3ludGFjdGljIHRlc3QsIHNvIGEgd2lsZGNhcmQgYWxsb3ctbGlzdCBwYXR0ZXJuIGxpa2VcbiAqIGAqQGV4YW1wbGUuY29tYCBwYXNzZXM7IGRpc3Rpbmd1aXNoaW5nIGEgcGF0dGVybiBmcm9tIGEgcmVhbCBhZGRyZXNzXG4gKiBpcyB0aGUgc2VuZGVyIHBvbGljeSdzIGpvYiwgbm90IHRoaXMgdmFsaWRhdG9yJ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGlzRW1haWwoXCJhbGljZUBleGFtcGxlLmNvbVwiKTsgLy8gdHJ1ZVxuICogaXNFbWFpbChcIm5vcGVcIik7ICAgICAgICAgICAgICAvLyBmYWxzZSAobm8gQClcbiAqIGlzRW1haWwoXCJub0Bkb21haW5cIik7ICAgICAgICAgLy8gZmFsc2UgKG5vIGRvdHRlZCBkb21haW4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEVNQUlMX0FERFJFU1MudGVzdCh2YWx1ZS50cmltKCkpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIElQIGFkZHJlc3NlcyBhbmQgQ0lEUiBibG9ja3Ncbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBhcnNlIGFuIElQdjQgKGBcIjEuMi4zLjRcImApIG9yIElQdjYgKGBcIjIwMDE6ZGI4OjoxXCJgLFxuICogYFwiOjpmZmZmOjEuMi4zLjRcImAsIGBcIjo6MVwiYCkgYWRkcmVzcyBpbnRvIGEge0BsaW5rIFBhcnNlZElwfSwgb3JcbiAqIGBudWxsYCB3aGVuIHRoZSBpbnB1dCBpc24ndCBhIHZhbGlkIGxpdGVyYWwuIE5ldmVyIHRocm93cy4gU3Vycm91bmRpbmdcbiAqIHdoaXRlc3BhY2UsIGBbLi4uXWAgYnJhY2tldHMgYXJvdW5kIGFuIElQdjYgbGl0ZXJhbCwgYW5kIGFuIElQdjYgem9uZVxuICogaWQgKGBmZTgwOjoxJWV0aDBgKSBhcmUgYWxsIHRvbGVyYXRlZC4gVGhlIGB2YWx1ZWAgaXMgcmV0dXJuZWQgYXMgYVxuICogYGJpZ2ludGAgc28gdjQgYW5kIHY2IHNoYXJlIG9uZSBjb21wYXJpc29uIHBhdGguXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlSXAoXCIxMC4wLjAuMVwiKTsgICAgICAgIC8vIHsgdmVyc2lvbjogNCwgdmFsdWU6IDE2Nzc3MjE2MW4gfVxuICogcGFyc2VJcChcIjIwMDE6ZGI4OjoxXCIpOyAgICAgLy8geyB2ZXJzaW9uOiA2LCB2YWx1ZTogLi4uIH1cbiAqIHBhcnNlSXAoXCJub3QtYW4taXBcIik7ICAgICAgIC8vIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXAoaW5wdXQ6IHN0cmluZyk6IFBhcnNlZElwIHwgbnVsbCB7XG4gIGxldCB0ZXh0ID0gaW5wdXQudHJpbSgpO1xuICBpZiAodGV4dC5zdGFydHNXaXRoKFwiW1wiKSAmJiB0ZXh0LmVuZHNXaXRoKFwiXVwiKSkgdGV4dCA9IHRleHQuc2xpY2UoMSwgLTEpO1xuICBpZiAodGV4dC5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAvLyBEcm9wIGFuIElQdjYgem9uZSBpZCAoYGZlODA6OjElZXRoMGApIC0gaXQgaXNuJ3QgcGFydCBvZiB0aGUgYWRkcmVzcy5cbiAgICBjb25zdCB6b25lID0gdGV4dC5pbmRleE9mKFwiJVwiKTtcbiAgICBpZiAoem9uZSA+PSAwKSB0ZXh0ID0gdGV4dC5zbGljZSgwLCB6b25lKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSXB2Nih0ZXh0KTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBudWxsIDogeyB2ZXJzaW9uOiA2LCB2YWx1ZSB9O1xuICB9XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VJcHY0KHRleHQpO1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBudWxsIDogeyB2ZXJzaW9uOiA0LCB2YWx1ZSB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGEgQ0lEUiBibG9jayAoYFwiMTAuMC4wLjAvOFwiYCwgYFwiMjAwMTpkYjg6Oi8zMlwiYCkgaW50byBhXG4gKiB7QGxpbmsgQ2lkcn0gd2l0aCBob3N0IGJpdHMgY2xlYXJlZCBmcm9tIGBiYXNlYCwgb3IgYG51bGxgIHdoZW4gdGhlXG4gKiBpbnB1dCBpc24ndCBhIHZhbGlkIGJsb2NrIChiYWQgYWRkcmVzcywgbWlzc2luZyAvIG91dC1vZi1yYW5nZVxuICogcHJlZml4KS4gTmV2ZXIgdGhyb3dzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwYXJzZUNpZHIoXCIxMC4wLjAuMC84XCIpPy5iYXNlOyAgIC8vIDE2Nzc3MjE2MG4gKDEwLjAuMC4wKVxuICogcGFyc2VDaWRyKFwiMTAuMS4yLjMvOFwiKT8uYmFzZTsgICAvLyAxNjc3NzIxNjBuIChob3N0IGJpdHMgZHJvcHBlZClcbiAqIHBhcnNlQ2lkcihcIjEwLjAuMC4wLzQwXCIpOyAgICAgICAgLy8gbnVsbCAocHJlZml4ID4gMzIgZm9yIHY0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDaWRyKGlucHV0OiBzdHJpbmcpOiBDaWRyIHwgbnVsbCB7XG4gIGNvbnN0IHRleHQgPSBpbnB1dC50cmltKCk7XG4gIGNvbnN0IHNsYXNoID0gdGV4dC5sYXN0SW5kZXhPZihcIi9cIik7XG4gIGlmIChzbGFzaCA8IDApIHJldHVybiBudWxsO1xuICBjb25zdCBwcmVmaXhUZXh0ID0gdGV4dC5zbGljZShzbGFzaCArIDEpO1xuICBpZiAoIUlQVjRfT0NURVQudGVzdChwcmVmaXhUZXh0KSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGlwID0gcGFyc2VJcCh0ZXh0LnNsaWNlKDAsIHNsYXNoKSk7XG4gIGlmICghaXApIHJldHVybiBudWxsO1xuICBjb25zdCBwcmVmaXggPSBOdW1iZXIocHJlZml4VGV4dCk7XG4gIGNvbnN0IGJpdHMgPSBJUF9CSVRTW2lwLnZlcnNpb25dO1xuICBpZiAocHJlZml4ID4gYml0cykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGJhc2UgPSBpcC52YWx1ZSAmIG5ldHdvcmtNYXNrKGJpdHMsIHByZWZpeCk7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogaXAudmVyc2lvbixcbiAgICBiYXNlLFxuICAgIHByZWZpeCxcbiAgICBjaWRyOiBgJHt0ZXh0LnNsaWNlKDAsIHNsYXNoKX0vJHtwcmVmaXh9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYGlwYCBmYWxscyBpbnNpZGUgYGNpZHJgLiBCb3RoIGFyZ3VtZW50cyBhY2NlcHQgZWl0aGVyXG4gKiBhIHN0cmluZyAocGFyc2VkIG9uIHRoZSBmbHkgdmlhIHtAbGluayBwYXJzZUlwfSAvIHtAbGluayBwYXJzZUNpZHJ9KVxuICogb3IgYW4gYWxyZWFkeS1wYXJzZWQgdmFsdWUgLSBwYXNzIHBhcnNlZCB2YWx1ZXMgaW4gaG90IGxvb3BzIHRvIHNraXBcbiAqIHJlLXBhcnNpbmcuIFJldHVybnMgYGZhbHNlYCBmb3IgdW5wYXJzZWFibGUgaW5wdXQgb3IgYSB2ZXJzaW9uXG4gKiBtaXNtYXRjaCAoYW4gSVB2NCBhZGRyZXNzIGlzIG5ldmVyIGluc2lkZSBhbiBJUHY2IGJsb2NrKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaXBJbkNpZHIoXCIxMC4xLjIuM1wiLCBcIjEwLjAuMC4wLzhcIik7ICAgLy8gdHJ1ZVxuICogaXBJbkNpZHIoXCIxMS4wLjAuMVwiLCBcIjEwLjAuMC4wLzhcIik7ICAgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlwSW5DaWRyKGlwOiBzdHJpbmcgfCBQYXJzZWRJcCwgY2lkcjogc3RyaW5nIHwgQ2lkcik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZWRJcCA9IHR5cGVvZiBpcCA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSXAoaXApIDogaXA7XG4gIGNvbnN0IHBhcnNlZENpZHIgPSB0eXBlb2YgY2lkciA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlQ2lkcihjaWRyKSA6IGNpZHI7XG4gIGlmICghcGFyc2VkSXAgfHwgIXBhcnNlZENpZHIgfHwgcGFyc2VkSXAudmVyc2lvbiAhPT0gcGFyc2VkQ2lkci52ZXJzaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1hc2sgPSBuZXR3b3JrTWFzayhJUF9CSVRTW3BhcnNlZENpZHIudmVyc2lvbl0sIHBhcnNlZENpZHIucHJlZml4KTtcbiAgcmV0dXJuIChwYXJzZWRJcC52YWx1ZSAmIG1hc2spID09PSBwYXJzZWRDaWRyLmJhc2U7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBDSURSIGluIGBjaWRyc2AgdGhhdCBjb250YWlucyBgaXBgLCBvciBgbnVsbGAgd2hlblxuICogbm9uZSBtYXRjaC4gYGNpZHJzYCBob2xkcyBwcmUtcGFyc2VkIHtAbGluayBDaWRyfSB2YWx1ZXMgKG9yIGFueVxuICogb2JqZWN0IGV4dGVuZGluZyBpdCksIHNvIGNhbGxlcnMgY2FuIGNhcnJ5IHNpZGUgbWV0YWRhdGEgb24gZWFjaFxuICogZW50cnkgKGUuZy4gYSByZWdpb24gdGFnKSBhbmQgcmVhZCBpdCBzdHJhaWdodCBvZmYgdGhlIHJldHVybmVkXG4gKiBtYXRjaC4gTGluZWFyIHNjYW47IHBhcnNlIHRoZSBhZGRyZXNzIG9uY2UgYnkgcGFzc2luZyBhXG4gKiB7QGxpbmsgUGFyc2VkSXB9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZXMgPSBbXCIxMC4wLjAuMC84XCIsIFwiMTkyLjE2OC4wLjAvMTZcIl1cbiAqICAgLm1hcChwYXJzZUNpZHIpXG4gKiAgIC5maWx0ZXIoKGMpOiBjIGlzIENpZHIgPT4gYyAhPT0gbnVsbCk7XG4gKiBmaW5kQ29udGFpbmluZ0NpZHIoXCIxMC4xLjIuM1wiLCByYW5nZXMpPy5jaWRyOyAvLyBcIjEwLjAuMC4wLzhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbnRhaW5pbmdDaWRyPFQgZXh0ZW5kcyBDaWRyPihcbiAgaXA6IHN0cmluZyB8IFBhcnNlZElwLFxuICBjaWRyczogSXRlcmFibGU8VD4sXG4pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnNlZElwID0gdHlwZW9mIGlwID09PSBcInN0cmluZ1wiID8gcGFyc2VJcChpcCkgOiBpcDtcbiAgaWYgKCFwYXJzZWRJcCkgcmV0dXJuIG51bGw7XG4gIGZvciAoY29uc3QgY2lkciBvZiBjaWRycykge1xuICAgIGlmIChjaWRyLnZlcnNpb24gIT09IHBhcnNlZElwLnZlcnNpb24pIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1hc2sgPSBuZXR3b3JrTWFzayhJUF9CSVRTW2NpZHIudmVyc2lvbl0sIGNpZHIucHJlZml4KTtcbiAgICBpZiAoKHBhcnNlZElwLnZhbHVlICYgbWFzaykgPT09IGNpZHIuYmFzZSkgcmV0dXJuIGNpZHI7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV2hldGhlciBgaW5wdXRgJ3MgaG9zdCBpcyBhIGxvb3BiYWNrIGFkZHJlc3MgLSBgbG9jYWxob3N0YCwgYW4gSVB2NFxuICogYDEyNy4wLjAuMC84YCBhZGRyZXNzLCBvciBJUHY2IGA6OjFgIC0gaS5lLiBhIHNlcnZpY2UgcnVubmluZyBvbiB0aGlzXG4gKiBtYWNoaW5lIChlLmcuIGEgbG9jYWwgcmVnaXN0cnkpLiBBY2NlcHRzIGFueXRoaW5nIHtAbGluayB1cmxCdWlsZGVyfVxuICogY29lcmNlcyAoYSBVUkwgc3RyaW5nLCBgVVJMYCwgb3IgYHsgdXJsIH1gKTsgcmV0dXJucyBgZmFsc2VgIHdoZW4gdGhlXG4gKiBpbnB1dCBoYXMgbm8gcmVzb2x2YWJsZSBob3N0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHA6Ly9sb2NhbGhvc3Q6NDg3M1wiKTsgLy8gdHJ1ZVxuICogaXNMb29wYmFja0hvc3QoXCJodHRwOi8vMTI3LjAuMC4xXCIpOyAgICAgICAvLyB0cnVlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCIpOyAvLyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMb29wYmFja0hvc3QoaW5wdXQ6IFVybExpa2UpOiBib29sZWFuIHtcbiAgY29uc3QgaG9zdCA9IHVybEJ1aWxkZXIoaW5wdXQpPy5ob3N0bmFtZTtcbiAgaWYgKCFob3N0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm4gdHJ1ZTtcbiAgLy8gYFVSTGAgYnJhY2tldHMgYW4gSVB2NiBob3N0IChgWzo6MV1gKTsgc3RyaXAgdGhlbSBiZWZvcmUgcGFyc2luZy5cbiAgY29uc3QgaXAgPSBob3N0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCBcIlwiKTtcbiAgcmV0dXJuIGlwSW5DaWRyKGlwLCBcIjEyNy4wLjAuMC84XCIpIHx8IGlwSW5DaWRyKGlwLCBcIjo6MS8xMjhcIik7XG59XG5cbi8qKlxuICogTmV0d29yayBtYXNrIGZvciBgcHJlZml4YCBsZWFkaW5nIGJpdHMgb2YgYSBgYml0c2Atd2lkZSBhZGRyZXNzIGFzIGFcbiAqIGBiaWdpbnRgOiB0aGUgdG9wIGBwcmVmaXhgIGJpdHMgc2V0LCB0aGUgbG93IGhvc3QgYml0cyBjbGVhcmVkLlxuICogYHByZWZpeCA9PT0gMGAgeWllbGRzIGAwbmAgKG1hdGNoZXMgZXZlcnl0aGluZyk7IGBwcmVmaXggPT09IGJpdHNgXG4gKiB5aWVsZHMgdGhlIGFsbC1vbmVzIG1hc2sgKG1hdGNoZXMgYSBzaW5nbGUgYWRkcmVzcykuXG4gKi9cbmZ1bmN0aW9uIG5ldHdvcmtNYXNrKGJpdHM6IG51bWJlciwgcHJlZml4OiBudW1iZXIpOiBiaWdpbnQge1xuICBjb25zdCBob3N0Qml0cyA9IEJpZ0ludChiaXRzIC0gcHJlZml4KTtcbiAgY29uc3QgZnVsbCA9ICgxbiA8PCBCaWdJbnQoYml0cykpIC0gMW47XG4gIHJldHVybiBmdWxsIF4gKCgxbiA8PCBob3N0Qml0cykgLSAxbik7XG59XG5cbi8qKiBQYXJzZSBhIGRvdHRlZC1xdWFkIElQdjQgbGl0ZXJhbCBpbnRvIGEgMzItYml0IHZhbHVlLCBlbHNlIGBudWxsYC4gKi9cbmZ1bmN0aW9uIHBhcnNlSXB2NChpbnB1dDogc3RyaW5nKTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgbGV0IHZhbHVlID0gMG47XG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmICghSVBWNF9PQ1RFVC50ZXN0KHBhcnQpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBvY3RldCA9IE51bWJlcihwYXJ0KTtcbiAgICBpZiAob2N0ZXQgPiAyNTUpIHJldHVybiBudWxsO1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDhuKSB8IEJpZ0ludChvY3RldCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIElQdjYgbGl0ZXJhbCBpbnRvIGEgMTI4LWJpdCB2YWx1ZSwgZWxzZSBgbnVsbGAuIEhhbmRsZXMgYDo6YFxuICogemVyby1jb21wcmVzc2lvbiAoYXQgbW9zdCBvbmNlKSBhbmQgYSB0cmFpbGluZyBlbWJlZGRlZCBJUHY0IGdyb3VwXG4gKiAoYDo6ZmZmZjoxLjIuMy40YCkuIFRoZSB6b25lIGlkLCBpZiBhbnksIGlzIGV4cGVjdGVkIHRvIGJlIHN0cmlwcGVkXG4gKiBieSB7QGxpbmsgcGFyc2VJcH0gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUlwdjYoaW5wdXQ6IHN0cmluZyk6IGJpZ2ludCB8IG51bGwge1xuICBjb25zdCBoYWx2ZXMgPSBpbnB1dC5zcGxpdChcIjo6XCIpO1xuICBpZiAoaGFsdmVzLmxlbmd0aCA+IDIpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGhlYWQgPSBwYXJzZUhleHRldHMoaGFsdmVzWzBdISk7XG4gIGlmIChoZWFkID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBpZiAoaGFsdmVzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IHRhaWwgPSBwYXJzZUhleHRldHMoaGFsdmVzWzFdISk7XG4gICAgaWYgKHRhaWwgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIC8vIFwiOjpcIiBtdXN0IHN0YW5kIGluIGZvciBhdCBsZWFzdCBvbmUgYWxsLXplcm8gaGV4dGV0LlxuICAgIGNvbnN0IG1pc3NpbmcgPSA4IC0gaGVhZC5sZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgICBpZiAobWlzc2luZyA8IDEpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBoZXh0ZXRzVG9WYWx1ZShbLi4uaGVhZCwgLi4uQXJyYXkobWlzc2luZykuZmlsbCgwKSwgLi4udGFpbF0pO1xuICB9XG5cbiAgaWYgKGhlYWQubGVuZ3RoICE9PSA4KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGhleHRldHNUb1ZhbHVlKGhlYWQpO1xufVxuXG4vKipcbiAqIFBhcnNlIG9uZSBjb2xvbi1zZXBhcmF0ZWQgcnVuIG9mIElQdjYgaGV4dGV0cywgZXhwYW5kaW5nIGEgdHJhaWxpbmdcbiAqIGVtYmVkZGVkIElQdjQgZ3JvdXAgaW50byBpdHMgdHdvIGhleHRldHMuIEFuIGVtcHR5IHN0cmluZyB5aWVsZHMgYW5cbiAqIGVtcHR5IGxpc3QgKHRoZSBzaWRlIG9mIGEgbGVhZGluZyAvIHRyYWlsaW5nIGA6OmApLlxuICovXG5mdW5jdGlvbiBwYXJzZUhleHRldHMocGFydDogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgaWYgKHBhcnQgPT09IFwiXCIpIHJldHVybiBbXTtcbiAgY29uc3QgdG9rZW5zID0gcGFydC5zcGxpdChcIjpcIik7XG4gIGNvbnN0IGhleHRldHM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV0hO1xuICAgIGlmICh0b2tlbi5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgIC8vIEEgZG90dGVkLXF1YWQgaXMgb25seSBsZWdhbCBhcyB0aGUgZmluYWwgZ3JvdXAuXG4gICAgICBpZiAoaSAhPT0gdG9rZW5zLmxlbmd0aCAtIDEpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgdjQgPSBwYXJzZUlwdjQodG9rZW4pO1xuICAgICAgaWYgKHY0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIGhleHRldHMucHVzaChOdW1iZXIoKHY0ID4+IDE2bikgJiAweGZmZmZuKSwgTnVtYmVyKHY0ICYgMHhmZmZmbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUlQVjZfSEVYVEVULnRlc3QodG9rZW4pKSByZXR1cm4gbnVsbDtcbiAgICAgIGhleHRldHMucHVzaChwYXJzZUludCh0b2tlbiwgMTYpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhleHRldHM7XG59XG5cbi8qKiBGb2xkIGV4YWN0bHkgOCBoZXh0ZXRzIGludG8gYSBzaW5nbGUgMTI4LWJpdCBgYmlnaW50YCwgZWxzZSBgbnVsbGAuICovXG5mdW5jdGlvbiBoZXh0ZXRzVG9WYWx1ZShoZXh0ZXRzOiBudW1iZXJbXSk6IGJpZ2ludCB8IG51bGwge1xuICBpZiAoaGV4dGV0cy5sZW5ndGggIT09IDgpIHJldHVybiBudWxsO1xuICBsZXQgdmFsdWUgPSAwbjtcbiAgZm9yIChjb25zdCBoZXh0ZXQgb2YgaGV4dGV0cykgdmFsdWUgPSAodmFsdWUgPDwgMTZuKSB8IEJpZ0ludChoZXh0ZXQpO1xuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
|