@decaf-ts/injectable-decorators 1.6.8 → 1.6.10

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.
@@ -1,45 +1,8 @@
1
1
  import { DefaultInjectablesConfig, InjectablesKeys } from "./constants.js";
2
2
  import { Injectables } from "./Injectables.js";
3
3
  import { getInjectKey, getTypeFromDecorator } from "./utils.js";
4
- /**
5
- * @description Decorator that marks a class as available for dependency injection.
6
- * @summary Defines a class as an injectable that can be retrieved from the registry.
7
- * When applied to a class, replaces its constructor with one that returns an instance.
8
- *
9
- * @param {string | Constructor} [category] Defaults to the class category. Useful when minification occurs and names are changed,
10
- * or when you want to upcast the object to a different type.
11
- * @param {Partial<InjectableConfig>} [cfg=DefaultInjectableConfig] Allows overriding the default singleton behavior and adding a callback function.
12
- *
13
- * @return {function(any): any} A decorator function that transforms the class into an injectable.
14
- *
15
- * @function injectable
16
- * @category Decorators
17
- *
18
- * @mermaid
19
- * sequenceDiagram
20
- * participant Client
21
- * participant Decorator
22
- * participant Injectables
23
- *
24
- * Client->>Decorator: @injectable()
25
- * Decorator->>Decorator: Create new constructor
26
- *
27
- * Note over Decorator: When new instance requested
28
- * Decorator->>Injectables: get(category)
29
- * alt Instance exists
30
- * Injectables-->>Decorator: Return existing instance
31
- * else No instance
32
- * Decorator->>Injectables: register(original, category)
33
- * Decorator->>Injectables: get(category)
34
- * Injectables-->>Decorator: Return new instance
35
- * opt Has callback
36
- * Decorator->>Decorator: Call instanceCallback
37
- * end
38
- * end
39
- * Decorator->>Decorator: Define metadata
40
- * Decorator-->>Client: Return instance
41
- */
42
- export function injectable(category, cfg) {
4
+ import { Decoration } from "@decaf-ts/decoration";
5
+ export function injectableBaseDecorator(category, cfg) {
43
6
  cfg =
44
7
  cfg ||
45
8
  (typeof category === "object"
@@ -53,7 +16,7 @@ export function injectable(category, cfg) {
53
16
  : typeof category === "function" && category.name
54
17
  ? category
55
18
  : undefined;
56
- return (original) => {
19
+ return function injectableInnerDecorator(original) {
57
20
  const symbol = Symbol.for(category || original.toString());
58
21
  category = category || original.name;
59
22
  const metadata = {
@@ -81,12 +44,55 @@ export function injectable(category, cfg) {
81
44
  return newConstructor;
82
45
  };
83
46
  }
47
+ /**
48
+ * @description Decorator that marks a class as available for dependency injection.
49
+ * @summary Defines a class as an injectable that can be retrieved from the registry.
50
+ * When applied to a class, replaces its constructor with one that returns an instance.
51
+ *
52
+ * @param {string | Constructor} [category] Defaults to the class category. Useful when minification occurs and names are changed,
53
+ * or when you want to upcast the object to a different type.
54
+ * @param {Partial<InjectableConfig>} [cfg=DefaultInjectableConfig] Allows overriding the default singleton behavior and adding a callback function.
55
+ *
56
+ * @return {function(any): any} A decorator function that transforms the class into an injectable.
57
+ *
58
+ * @function injectable
59
+ * @category Class Decorators
60
+ *
61
+ * @mermaid
62
+ * sequenceDiagram
63
+ * participant Client
64
+ * participant Decorator
65
+ * participant Injectables
66
+ *
67
+ * Client->>Decorator: @injectable()
68
+ * Decorator->>Decorator: Create new constructor
69
+ *
70
+ * Note over Decorator: When new instance requested
71
+ * Decorator->>Injectables: get(category)
72
+ * alt Instance exists
73
+ * Injectables-->>Decorator: Return existing instance
74
+ * else No instance
75
+ * Decorator->>Injectables: register(original, category)
76
+ * Decorator->>Injectables: get(category)
77
+ * Injectables-->>Decorator: Return new instance
78
+ * opt Has callback
79
+ * Decorator->>Decorator: Call instanceCallback
80
+ * end
81
+ * end
82
+ * Decorator->>Decorator: Define metadata
83
+ * Decorator-->>Client: Return instance
84
+ */
85
+ export function injectable(category, cfg) {
86
+ return Decoration.for(InjectablesKeys.INJECTABLE)
87
+ .define({ decorator: injectableBaseDecorator, args: [category, cfg] })
88
+ .apply();
89
+ }
84
90
  /**
85
91
  * @description Convenience decorator to register an injectable as a singleton.
86
92
  * @summary Wraps {@link injectable} forcing the singleton lifecycle so only one instance is created and reused.
87
93
  * @param {string|Constructor} [category] Optional explicit category/symbol source; defaults to the class.
88
94
  * @param {Omit<InjectableConfig, "singleton">} [cfg] Additional injectable configuration excluding the singleton flag.
89
- * @return function(any): any} A class decorator that registers the target as a singleton injectable.
95
+ * @return {function(any): any} A class decorator that registers the target as a singleton injectable.
90
96
  * @function singleton
91
97
  * @category Class Decorators
92
98
  */
@@ -105,6 +111,53 @@ export function singleton(category, cfg) {
105
111
  export function onDemand(category, cfg) {
106
112
  return injectable(category, Object.assign({}, cfg || {}, { singleton: false }));
107
113
  }
114
+ export function injectBaseDecorator(category, cfg) {
115
+ return function injectableInnerDecorator(target, propertyKey) {
116
+ const config = (cfg || typeof category === "object" ? category : {});
117
+ const name = (typeof category !== "object" &&
118
+ category) ||
119
+ getTypeFromDecorator(target, propertyKey);
120
+ if (!name) {
121
+ throw new Error(`Could not get Type from decorator`);
122
+ }
123
+ // prop()(target, propertyKey);
124
+ Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECT), {
125
+ injectable: name,
126
+ }, target, propertyKey);
127
+ const values = new WeakMap();
128
+ Object.defineProperty(target, propertyKey, {
129
+ configurable: true,
130
+ get() {
131
+ const descriptor = Object.getOwnPropertyDescriptor(target, propertyKey);
132
+ if (descriptor.configurable) {
133
+ // let /obj: any;
134
+ Object.defineProperty(this, propertyKey, {
135
+ enumerable: true,
136
+ configurable: false,
137
+ get() {
138
+ let obj = values.get(this);
139
+ if (obj)
140
+ return obj;
141
+ obj = Injectables.get(name, ...(config.args || []));
142
+ if (!obj)
143
+ throw new Error(`Could not get Injectable ${name.toString()} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
144
+ if (config.transformer)
145
+ try {
146
+ obj = config.transformer(obj, target);
147
+ }
148
+ catch (e) {
149
+ console.error(e);
150
+ }
151
+ values.set(this, obj);
152
+ return obj;
153
+ },
154
+ });
155
+ return this[propertyKey];
156
+ }
157
+ },
158
+ });
159
+ };
160
+ }
108
161
  /**
109
162
  * @description Property decorator that injects a dependency into a class property.
110
163
  * @summary Allows for the injection of an {@link injectable} decorated dependency into a class property.
@@ -165,49 +218,8 @@ export function onDemand(category, cfg) {
165
218
  * end
166
219
  */
167
220
  export function inject(category, cfg) {
168
- return (target, propertyKey) => {
169
- const config = (cfg || typeof category === "object" ? category : {});
170
- const name = (typeof category !== "object" &&
171
- category) ||
172
- getTypeFromDecorator(target, propertyKey);
173
- if (!name) {
174
- throw new Error(`Could not get Type from decorator`);
175
- }
176
- Reflect.defineMetadata(getInjectKey(InjectablesKeys.INJECT), {
177
- injectable: name,
178
- }, target, propertyKey);
179
- const values = new WeakMap();
180
- Object.defineProperty(target, propertyKey, {
181
- configurable: true,
182
- get() {
183
- const descriptor = Object.getOwnPropertyDescriptor(target, propertyKey);
184
- if (descriptor.configurable) {
185
- // let /obj: any;
186
- Object.defineProperty(this, propertyKey, {
187
- enumerable: true,
188
- configurable: false,
189
- get() {
190
- let obj = values.get(this);
191
- if (obj)
192
- return obj;
193
- obj = Injectables.get(name, ...(config.args || []));
194
- if (!obj)
195
- throw new Error(`Could not get Injectable ${name.toString()} to inject in ${target.constructor ? target.constructor.name : target.name}'s ${propertyKey}`);
196
- if (config.transformer)
197
- try {
198
- obj = config.transformer(obj, target);
199
- }
200
- catch (e) {
201
- console.error(e);
202
- }
203
- values.set(this, obj);
204
- return obj;
205
- },
206
- });
207
- return this[propertyKey];
208
- }
209
- },
210
- });
211
- };
221
+ return Decoration.for(InjectablesKeys.INJECT)
222
+ .define({ decorator: injectBaseDecorator, args: [category, cfg] })
223
+ .apply();
212
224
  }
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUseUJBQXNCO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsbUJBQWdCO0FBNEY3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLFFBQTJELEVBQzNELEdBQStCO0lBRS9CLEdBQUc7UUFDRCxHQUFHO1lBQ0gsQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRO2dCQUMzQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUE0QixFQUFFLHdCQUF3QixDQUFDO2dCQUN2RSxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNoQyxRQUFRO1FBQ04sT0FBTyxRQUFRLEtBQUssUUFBUTtZQUMxQixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRO2dCQUM1QixDQUFDLENBQUMsUUFBUTtnQkFDVixDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJO29CQUMvQyxDQUFDLENBQUMsUUFBUTtvQkFDVixDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXBCLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRCxRQUFRLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFckMsTUFBTSxRQUFRLEdBQXVCO1lBQ25DLEtBQUssRUFBRSxRQUFrQjtZQUN6QixN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QyxXQUFXLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVmYXVsdEluamVjdGFibGVzQ29uZmlnLCBJbmplY3RhYmxlc0tleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEluamVjdGFibGVzIH0gZnJvbSBcIi4vSW5qZWN0YWJsZXNcIjtcbmltcG9ydCB7IGdldEluamVjdEtleSwgZ2V0VHlwZUZyb21EZWNvcmF0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZU1ldGFkYXRhLCBJbnN0YW5jZUNhbGxiYWNrIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQGluamVjdGFibGUgZGVjb3JhdG9yLlxuICogQHN1bW1hcnkgQ29udHJvbHMgbGlmZWN5Y2xlIChzaW5nbGV0b24gdnMgb24tZGVtYW5kKSBhbmQgYW4gb3B0aW9uYWwgaW5zdGFuY2UgdHJhbnNmb3JtYXRpb24gY2FsbGJhY2sgZXhlY3V0ZWQgcG9zdC1jb25zdHJ1Y3Rpb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgaW5zdGFuY2UgdHlwZSBhZmZlY3RlZCBieSB0aGUgY2FsbGJhY2sgd2hlbiBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2luZ2xldG9uIFdoZW4gdHJ1ZSwgYSBzaW5nbGUgaW5zdGFuY2UgaXMgc2hhcmVkIChzaW5nbGV0b24pLiBXaGVuIGZhbHNlLCBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQgb24gZGVtYW5kLlxuICogQHByb3BlcnR5IHtJbnN0YW5jZUNhbGxiYWNrPFQ+fSBbY2FsbGJhY2tdIE9wdGlvbmFsIGhvb2sgdG8gdHJhbnNmb3JtIHRoZSBpbnN0YW5jZSBhZnRlciBpdCBpcyBjb25zdHJ1Y3RlZC5cbiAqIEB0eXBlZGVmIEluamVjdGFibGVDb25maWdcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIEluamVjdGFibGVDb25maWcgPSB7XG4gIHNpbmdsZXRvbjogYm9vbGVhbjtcbiAgY2FsbGJhY2s/OiBJbnN0YW5jZUNhbGxiYWNrPGFueT47XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmljIGNvbnN0cnVjdG9yIHR5cGUgZm9yIGNsYXNzLWxpa2UgdmFsdWVzLlxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhbnkgY2xhc3MgdGhhdCBjYW4gYmUgaW5zdGFudGlhdGVkIHdpdGggYXJiaXRyYXJ5IGFyZ3VtZW50cywgcHJvZHVjaW5nIGFuIGluc3RhbmNlIG9mIHR5cGUgVC5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSBpbnN0YW5jZSB0eXBlIGNyZWF0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yLlxuICogQHR5cGVkZWYgQ29uc3RydWN0b3JcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2luZyBDb25zdHJ1Y3RvciB0byB0eXBlIGEgZmFjdG9yeVxuICogZnVuY3Rpb24gbWFrZTxUPihDdG9yOiBDb25zdHJ1Y3RvcjxUPiwgLi4uYXJnczogYW55W10pOiBUIHtcbiAqICAgcmV0dXJuIG5ldyBDdG9yKC4uLmFyZ3MpO1xuICogfVxuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IGFueT4gPSB7IG5ldyAoLi4uYXJnczogYW55W10pOiBUIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IG1hcmtzIGEgY2xhc3MgYXMgYXZhaWxhYmxlIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBjbGFzcyBhcyBhbiBpbmplY3RhYmxlIHRoYXQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSByZWdpc3RyeS5cbiAqIFdoZW4gYXBwbGllZCB0byBhIGNsYXNzLCByZXBsYWNlcyBpdHMgY29uc3RydWN0b3Igd2l0aCBvbmUgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlLlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSBjbGFzcyBpbnRvIGFuIGluamVjdGFibGUuXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdGFibGVcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKCk6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBjbGFzcywgcmVwbGFjZXMgaXRzIGNvbnN0cnVjdG9yIHdpdGggb25lIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IENvbnN0cnVjdG9yfSBjYXRlZ29yeSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgY2F0ZWdvcnkuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSBjbGFzcyBpbnRvIGFuIGluamVjdGFibGUuXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdGFibGVcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBjYXRlZ29yeTogc3RyaW5nIHwgQ29uc3RydWN0b3Jcbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBjbGFzcywgcmVwbGFjZXMgaXRzIGNvbnN0cnVjdG9yIHdpdGggb25lIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz59IGNmZz1EZWZhdWx0SW5qZWN0YWJsZUNvbmZpZyBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBzaW5nbGV0b24gYmVoYXZpb3IgYW5kIGFkZGluZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSBjbGFzcyBpbnRvIGFuIGluamVjdGFibGUuXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdGFibGVcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBjZmc6IFBhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz5cbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IG1hcmtzIGEgY2xhc3MgYXMgYXZhaWxhYmxlIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBjbGFzcyBhcyBhbiBpbmplY3RhYmxlIHRoYXQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSByZWdpc3RyeS5cbiAqIFdoZW4gYXBwbGllZCB0byBhIGNsYXNzLCByZXBsYWNlcyBpdHMgY29uc3RydWN0b3Igd2l0aCBvbmUgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSBjYXRlZ29yeSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgY2F0ZWdvcnkuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtQYXJ0aWFsPEluamVjdGFibGVDb25maWc+fSBjZmc9RGVmYXVsdEluamVjdGFibGVDb25maWcgQWxsb3dzIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgc2luZ2xldG9uIGJlaGF2aW9yIGFuZCBhZGRpbmcgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnkpOiBhbnl9IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZShcbiAgY2F0ZWdvcnk6IHN0cmluZyB8IENvbnN0cnVjdG9yLFxuICBjZmc6IFBhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz5cbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBjbGFzcywgcmVwbGFjZXMgaXRzIGNvbnN0cnVjdG9yIHdpdGggb25lIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IENvbnN0cnVjdG9yfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBjYXRlZ29yeS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3VycyBhbmQgbmFtZXMgYXJlIGNoYW5nZWQsXG4gKiBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz59IFtjZmc9RGVmYXVsdEluamVjdGFibGVDb25maWddIEFsbG93cyBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IHNpbmdsZXRvbiBiZWhhdmlvciBhbmQgYWRkaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55KTogYW55fSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIGNsYXNzIGludG8gYW4gaW5qZWN0YWJsZS5cbiAqXG4gKiBAZnVuY3Rpb24gaW5qZWN0YWJsZVxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdGFibGUoKVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IENyZWF0ZSBuZXcgY29uc3RydWN0b3JcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gbmV3IGluc3RhbmNlIHJlcXVlc3RlZFxuICogICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogZ2V0KGNhdGVnb3J5KVxuICogICBhbHQgSW5zdGFuY2UgZXhpc3RzXG4gKiAgICAgSW5qZWN0YWJsZXMtLT4+RGVjb3JhdG9yOiBSZXR1cm4gZXhpc3RpbmcgaW5zdGFuY2VcbiAqICAgZWxzZSBObyBpbnN0YW5jZVxuICogICAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiByZWdpc3RlcihvcmlnaW5hbCwgY2F0ZWdvcnkpXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChjYXRlZ29yeSlcbiAqICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBuZXcgaW5zdGFuY2VcbiAqICAgICBvcHQgSGFzIGNhbGxiYWNrXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IENhbGwgaW5zdGFuY2VDYWxsYmFja1xuICogICAgIGVuZFxuICogICBlbmRcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBEZWZpbmUgbWV0YWRhdGFcbiAqICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBjYXRlZ29yeT86IHN0cmluZyB8IENvbnN0cnVjdG9yIHwgUGFydGlhbDxJbmplY3RhYmxlQ29uZmlnPixcbiAgY2ZnPzogUGFydGlhbDxJbmplY3RhYmxlQ29uZmlnPlxuKSB7XG4gIGNmZyA9XG4gICAgY2ZnIHx8XG4gICAgKHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJvYmplY3RcIlxuICAgICAgPyBPYmplY3QuYXNzaWduKGNhdGVnb3J5IGFzIFJlY29yZDxhbnksIGFueT4sIERlZmF1bHRJbmplY3RhYmxlc0NvbmZpZylcbiAgICAgIDogRGVmYXVsdEluamVjdGFibGVzQ29uZmlnKTtcbiAgY2F0ZWdvcnkgPVxuICAgIHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJvYmplY3RcIlxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdHlwZW9mIGNhdGVnb3J5ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gY2F0ZWdvcnlcbiAgICAgICAgOiB0eXBlb2YgY2F0ZWdvcnkgPT09IFwiZnVuY3Rpb25cIiAmJiBjYXRlZ29yeS5uYW1lXG4gICAgICAgICAgPyBjYXRlZ29yeVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiAob3JpZ2luYWw6IGFueSkgPT4ge1xuICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3IoY2F0ZWdvcnkgfHwgb3JpZ2luYWwudG9TdHJpbmcoKSk7XG4gICAgY2F0ZWdvcnkgPSBjYXRlZ29yeSB8fCBvcmlnaW5hbC5uYW1lO1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IEluamVjdGFibGVNZXRhZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBjYXRlZ29yeSBhcyBzdHJpbmcsXG4gICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICB9O1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUQUJMRSksXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9yaWdpbmFsXG4gICAgKTtcbiAgICAvLyB0aGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW91clxuICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yOiBhbnkgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXQ8YW55PihzeW1ib2wsIC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIG5ld0NvbnN0cnVjdG9yLl9fcHJvdG9fXyA9IG9yaWdpbmFsLl9fcHJvdG9fXztcbiAgICAvLyBTZXRzIHRoZSBwcm9wZXIgY29uc3RydWN0b3IgbmFtZSBmb3IgdHlwZSB2ZXJpZmljYXRpb25cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3Q29uc3RydWN0b3IsIFwibmFtZVwiLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBvcmlnaW5hbC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSxcbiAgICB9KTtcblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBuZXdDb25zdHJ1Y3RvclxuICAgICk7XG5cbiAgICBJbmplY3RhYmxlcy5yZWdpc3RlcihvcmlnaW5hbCwgc3ltYm9sLCBjZmcpO1xuICAgIC8vIHJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZW5pZW5jZSBkZWNvcmF0b3IgdG8gcmVnaXN0ZXIgYW4gaW5qZWN0YWJsZSBhcyBhIHNpbmdsZXRvbi5cbiAqIEBzdW1tYXJ5IFdyYXBzIHtAbGluayBpbmplY3RhYmxlfSBmb3JjaW5nIHRoZSBzaW5nbGV0b24gbGlmZWN5Y2xlIHNvIG9ubHkgb25lIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIHJldXNlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfENvbnN0cnVjdG9yfSBbY2F0ZWdvcnldIE9wdGlvbmFsIGV4cGxpY2l0IGNhdGVnb3J5L3N5bWJvbCBzb3VyY2U7IGRlZmF1bHRzIHRvIHRoZSBjbGFzcy5cbiAqIEBwYXJhbSB7T21pdDxJbmplY3RhYmxlQ29uZmlnLCBcInNpbmdsZXRvblwiPn0gW2NmZ10gQWRkaXRpb25hbCBpbmplY3RhYmxlIGNvbmZpZ3VyYXRpb24gZXhjbHVkaW5nIHRoZSBzaW5nbGV0b24gZmxhZy5cbiAqIEByZXR1cm4gZnVuY3Rpb24oYW55KTogYW55fSBBIGNsYXNzIGRlY29yYXRvciB0aGF0IHJlZ2lzdGVycyB0aGUgdGFyZ2V0IGFzIGEgc2luZ2xldG9uIGluamVjdGFibGUuXG4gKiBAZnVuY3Rpb24gc2luZ2xldG9uXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2luZ2xldG9uKFxuICBjYXRlZ29yeT86IHN0cmluZyB8IENvbnN0cnVjdG9yLFxuICBjZmc/OiBPbWl0PEluamVjdGFibGVDb25maWcsIFwic2luZ2xldG9uXCI+XG4pIHtcbiAgcmV0dXJuIGluamVjdGFibGUoXG4gICAgY2F0ZWdvcnkgYXMgYW55LFxuICAgIE9iamVjdC5hc3NpZ24oe30sIGNmZyB8fCB7fSwgeyBzaW5nbGV0b246IHRydWUgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVuaWVuY2UgZGVjb3JhdG9yIHRvIHJlZ2lzdGVyIGFuIGluamVjdGFibGUgYXMgb24tZGVtYW5kIChub24tc2luZ2xldG9uKS5cbiAqIEBzdW1tYXJ5IFdyYXBzIHtAbGluayBpbmplY3RhYmxlfSBmb3JjaW5nIG5ldyBpbnN0YW5jZXMgdG8gYmUgY3JlYXRlZCBvbiBldmVyeSBpbmplY3Rpb24gb3IgcmV0cmlldmFsLlxuICogQHBhcmFtIHtzdHJpbmd8Q29uc3RydWN0b3J9IFtjYXRlZ29yeV0gT3B0aW9uYWwgZXhwbGljaXQgY2F0ZWdvcnkvc3ltYm9sIHNvdXJjZTsgZGVmYXVsdHMgdG8gdGhlIGNsYXNzLlxuICogQHBhcmFtIHtPbWl0PEluamVjdGFibGVDb25maWcsIFwic2luZ2xldG9uXCI+fSBbY2ZnXSBBZGRpdGlvbmFsIGluamVjdGFibGUgY29uZmlndXJhdGlvbiBleGNsdWRpbmcgdGhlIHNpbmdsZXRvbiBmbGFnLlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55KTogYW55fSBBIGNsYXNzIGRlY29yYXRvciB0aGF0IHJlZ2lzdGVycyB0aGUgdGFyZ2V0IGFzIGEgbm9uLXNpbmdsZXRvbiBpbmplY3RhYmxlLlxuICogQGZ1bmN0aW9uIG9uRGVtYW5kXG4gKiBAY2F0ZWdvcnkgQ2xhc3MgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gb25EZW1hbmQoXG4gIGNhdGVnb3J5Pzogc3RyaW5nIHwgQ29uc3RydWN0b3IsXG4gIGNmZz86IE9taXQ8SW5qZWN0YWJsZUNvbmZpZywgXCJzaW5nbGV0b25cIj5cbikge1xuICByZXR1cm4gaW5qZWN0YWJsZShcbiAgICBjYXRlZ29yeSBhcyBhbnksXG4gICAgT2JqZWN0LmFzc2lnbih7fSwgY2ZnIHx8IHt9LCB7IHNpbmdsZXRvbjogZmFsc2UgfSlcbiAgKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIHR5cGUgZm9yIHRyYW5zZm9ybWluZyBpbmplY3RhYmxlIGluc3RhbmNlcyBiZWZvcmUgdGhleSdyZSBpbmplY3RlZC5cbiAqIEBzdW1tYXJ5IEZ1bmN0aW9uIHdoaWNoIHRyYW5zZm9ybXMgYSBjYWNoZWQge0BsaW5rIGluamVjdGFibGV9IGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkIGludG8gYSB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7YW55fSBpbmplY3RhYmxlIFRoZSBpbmplY3RhYmxlIGluc3RhbmNlIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHthbnl9IG9iaiBUaGUgb2JqZWN0IHRoZSBpbmplY3RhYmxlIHdpbGwgYmUgaW5qZWN0ZWQgb25cbiAqIEByZXR1cm4ge2FueX0gVGhlIHRyYW5zZm9ybWVkIGluamVjdGFibGUgaW5zdGFuY2VcbiAqXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IEluc3RhbmNlVHJhbnNmb3JtZXJcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZVRyYW5zZm9ybWVyID0gKGluamVjdGFibGU6IGFueSwgb2JqOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9ucyBmb3IgdGhlIHByb3BlcnR5LWxldmVsIEBpbmplY3QgZGVjb3JhdG9yLlxuICogQHN1bW1hcnkgQWxsb3dzIHNwZWNpZnlpbmcgY29uc3RydWN0b3IgYXJndW1lbnRzIGFuZCBhbiBvcHRpb25hbCB0cmFuc2Zvcm1lciB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXNvbHZlZCBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7YW55W119IFthcmdzXSBPcHRpb25hbCBjb25zdHJ1Y3RvciBhcmd1bWVudHMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgdGhlIGluamVjdGFibGUgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0luc3RhbmNlVHJhbnNmb3JtZXJ9IFt0cmFuc2Zvcm1lcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbnN0YW5jZSBiZWZvcmUgYXNzaWdubWVudC5cbiAqIEB0eXBlZGVmIEluamVjdE9wdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIEluamVjdE9wdGlvbnMgPSB7XG4gIGFyZ3M/OiBhbnlbXTtcbiAgdHJhbnNmb3JtZXI/OiBJbnN0YW5jZVRyYW5zZm9ybWVyO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSk6IHZvaWR9IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdCgpOiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBhbnkpID0+IHZvaWQ7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcm9wZXJ0eSBkZWNvcmF0b3IgdGhhdCBpbmplY3RzIGEgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBAc3VtbWFyeSBBbGxvd3MgZm9yIHRoZSBpbmplY3Rpb24gb2YgYW4ge0BsaW5rIGluamVjdGFibGV9IGRlY29yYXRlZCBkZXBlbmRlbmN5IGludG8gYSBjbGFzcyBwcm9wZXJ0eS5cbiAqIFRoZSBwcm9wZXJ0eSBtdXN0IGJlIHR5cGVkIGZvciB0aGUgcmVxdWVzdGVkIGRlcGVuZGVuY3kuIE9ubHkgY29uY3JldGUgY2xhc3NlcyBhcmUgc3VwcG9ydGVkOyBnZW5lcmljcyBhcmUgbm90LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYXRlZ29yeSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgbmFtZSBkZXJpdmVkIGZyb20gdGhlIHByb3BlcnR5IHR5cGUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnNcbiAqIGFuZCBuYW1lcyBhcmUgY2hhbmdlZCwgb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55LCBhbnkpOiB2b2lkfSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoXG4gIGNhdGVnb3J5OiBzdHJpbmcgfCBDb25zdHJ1Y3RvclxuKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogYW55KSA9PiB2b2lkO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0T3B0aW9ucz59IFtjZmc9e31dIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgaW5qZWN0YWJsZSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCwgb3IgYXJndW1lbnRzIHRvIHBhc3MgdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5qZWN0aW5nIG9uRGVtYW5kXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSk6IHZvaWR9IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChcbiAgY2ZnOiBQYXJ0aWFsPEluamVjdE9wdGlvbnM+XG4pOiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBhbnkpID0+IHZvaWQ7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcm9wZXJ0eSBkZWNvcmF0b3IgdGhhdCBpbmplY3RzIGEgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBAc3VtbWFyeSBBbGxvd3MgZm9yIHRoZSBpbmplY3Rpb24gb2YgYW4ge0BsaW5rIGluamVjdGFibGV9IGRlY29yYXRlZCBkZXBlbmRlbmN5IGludG8gYSBjbGFzcyBwcm9wZXJ0eS5cbiAqIFRoZSBwcm9wZXJ0eSBtdXN0IGJlIHR5cGVkIGZvciB0aGUgcmVxdWVzdGVkIGRlcGVuZGVuY3kuIE9ubHkgY29uY3JldGUgY2xhc3NlcyBhcmUgc3VwcG9ydGVkOyBnZW5lcmljcyBhcmUgbm90LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYXRlZ29yeSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgbmFtZSBkZXJpdmVkIGZyb20gdGhlIHByb3BlcnR5IHR5cGUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnNcbiAqIGFuZCBuYW1lcyBhcmUgY2hhbmdlZCwgb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtQYXJ0aWFsPEluamVjdE9wdGlvbnM+fSBjZmc9e30gT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlIGJlZm9yZSBpdCdzIGluamVjdGVkLCBvciBhcmd1bWVudHMgdG8gcGFzcyB0aGUgY29uc3RydWN0b3Igd2hlbiBpbmplY3Rpbmcgb25EZW1hbmRcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSwgYW55KTogdm9pZH0gQSBwcm9wZXJ0eSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb24gaW5qZWN0XG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KFxuICBjYXRlZ29yeTogc3RyaW5nIHwgQ29uc3RydWN0b3IsXG4gIGNmZzogUGFydGlhbDxJbmplY3RPcHRpb25zPlxuKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogYW55KSA9PiB2b2lkO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBJbmplY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBkZXNjcmliZWQgbGlrZSBzbzpcbiAqIDxwcmU+XG4gKiAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgLi4uXG4gKlxuICogICAgICAgICBAaW5qZWN0KClcbiAqICAgICAgICAgcHJvcGVydHlOYW1lITogSW5qZWN0YWJsZUNsYXNzO1xuICpcbiAqICAgICAgICAgLi4uXG4gKiAgICAgfVxuICogPC9wcmU+XG4gKlxuICogd2hlcmUgSW5qZWN0YWJsZUNsYXNzIGlzIHRoZSBjbGFzcyB5b3Ugd2FudCB0byBpbmplY3QuXG4gKiBOb3RpY2UgdGhlIHVzZSBvZiAnITonIHRvIGVuc3VyZSB0aGUgdHJhbnNwaWxlciB0aGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgb3V0c2lkZSB0aGUgY29uc3RydWN0b3IgYnV0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQuXG4gKiBGb3IgcHJvamVjdHMgd2hlcmUgbWluaWZpY2F0aW9uIG9jY3VycywgeW91IHNob3VsZCB1c2UgdGhlIGNhdGVnb3J5IHBhcmFtIHRvIGVuc3VyZSB0aGUgbmFtZSBpcyB0aGUgc2FtZSB0aHJvdWdob3V0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2F0ZWdvcnldIERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0T3B0aW9ucz59IFtjZmc9e31dIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgaW5qZWN0YWJsZSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCwgb3IgYXJndW1lbnRzIHRvIHBhc3MgdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5qZWN0aW5nIG9uRGVtYW5kXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSk6IHZvaWR9IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3JcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogQGluamVjdCgpXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogR2V0IHR5cGUgZnJvbSBwcm9wZXJ0eVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBtZXRhZGF0YVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IERlZmluZSBwcm9wZXJ0eSBnZXR0ZXJcbiAqXG4gKiAgIE5vdGUgb3ZlciBEZWNvcmF0b3I6IFdoZW4gcHJvcGVydHkgYWNjZXNzZWRcbiAqICAgQ2xpZW50LT4+RGVjb3JhdG9yOiBhY2Nlc3MgcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDaGVjayBpZiBpbnN0YW5jZSBleGlzdHNcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0cyBpbiBXZWFrTWFwXG4gKiAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogUmV0dXJuIGNhY2hlZCBpbnN0YW5jZVxuICogICBlbHNlIE5vIGluc3RhbmNlXG4gKiAgICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChuYW1lKVxuICogICAgIGFsdCBJbmplY3RhYmxlIGZvdW5kXG4gKiAgICAgICBJbmplY3RhYmxlcy0tPj5EZWNvcmF0b3I6IFJldHVybiBpbmplY3RhYmxlIGluc3RhbmNlXG4gKiAgICAgICBvcHQgSGFzIHRyYW5zZm9ybWVyXG4gKiAgICAgICAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2FsbCB0cmFuc2Zvcm1lclxuICogICAgICAgZW5kXG4gKiAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IFN0b3JlIGluIFdlYWtNYXBcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICogICAgIGVsc2UgTm8gaW5qZWN0YWJsZVxuICogICAgICAgRGVjb3JhdG9yLS0+PkNsaWVudDogVGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoXG4gIGNhdGVnb3J5Pzogc3ltYm9sIHwgc3RyaW5nIHwgQ29uc3RydWN0b3IgfCBQYXJ0aWFsPEluamVjdE9wdGlvbnM+LFxuICBjZmc/OiBQYXJ0aWFsPEluamVjdE9wdGlvbnM+XG4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZzogSW5qZWN0T3B0aW9ucyA9IChcbiAgICAgIGNmZyB8fCB0eXBlb2YgY2F0ZWdvcnkgPT09IFwib2JqZWN0XCIgPyBjYXRlZ29yeSA6IHt9XG4gICAgKSBhcyBJbmplY3RPcHRpb25zO1xuXG4gICAgY29uc3QgbmFtZTogc3ltYm9sIHwgc3RyaW5nIHwgQ29uc3RydWN0b3IgfCB1bmRlZmluZWQgPVxuICAgICAgKHR5cGVvZiBjYXRlZ29yeSAhPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAoY2F0ZWdvcnkgYXMgc3ltYm9sIHwgc3RyaW5nIHwgQ29uc3RydWN0b3IpKSB8fFxuICAgICAgZ2V0VHlwZUZyb21EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgVHlwZSBmcm9tIGRlY29yYXRvcmApO1xuICAgIH1cblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICBnZXRJbmplY3RLZXkoSW5qZWN0YWJsZXNLZXlzLklOSkVDVCksXG4gICAgICB7XG4gICAgICAgIGluamVjdGFibGU6IG5hbWUsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuXG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogYW55KSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHByb3BlcnR5S2V5XG4gICAgICAgICkgYXMgUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgICAgICAvLyBsZXQgL29iajogYW55O1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQodGhpczogYW55KSB7XG4gICAgICAgICAgICAgIGxldCBvYmogPSB2YWx1ZXMuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgICBpZiAob2JqKSByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICBvYmogPSBJbmplY3RhYmxlcy5nZXQobmFtZSwgLi4uKGNvbmZpZy5hcmdzIHx8IFtdKSk7XG4gICAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIGBDb3VsZCBub3QgZ2V0IEluamVjdGFibGUgJHtuYW1lLnRvU3RyaW5nKCl9IHRvIGluamVjdCBpbiAke3RhcmdldC5jb25zdHJ1Y3RvciA/IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lIDogdGFyZ2V0Lm5hbWV9J3MgJHtwcm9wZXJ0eUtleX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZy50cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgb2JqID0gY29uZmlnLnRyYW5zZm9ybWVyKG9iaiwgdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFsdWVzLnNldCh0aGlzLCBvYmopO1xuXG4gICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5S2V5XTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUseUJBQXNCO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsbUJBQWdCO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdCbEQsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxRQUEyRCxFQUMzRCxHQUErQjtJQUUvQixHQUFHO1FBQ0QsR0FBRztZQUNILENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBNEIsRUFBRSx3QkFBd0IsQ0FBQztnQkFDdkUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDaEMsUUFBUTtRQUNOLE9BQU8sUUFBUSxLQUFLLFFBQVE7WUFDMUIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxDQUFDLFFBQVE7Z0JBQ1YsQ0FBQyxDQUFDLE9BQU8sUUFBUSxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSTtvQkFDL0MsQ0FBQyxDQUFDLFFBQVE7b0JBQ1YsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwQixPQUFPLFNBQVMsd0JBQXdCLENBQUMsUUFBYTtRQUNwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRCxRQUFRLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFckMsTUFBTSxRQUFRLEdBQXVCO1lBQ25DLEtBQUssRUFBRSxRQUFrQjtZQUN6QixN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O2dDQUN4QyxDQUFDO2dDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0NBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDbkIsQ0FBQzs0QkFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFFdEIsT0FBTyxHQUFHLENBQUM7d0JBQ2IsQ0FBQztxQkFDRixDQUFDLENBQUM7b0JBQ0gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXVERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBERztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLFFBQWlFLEVBQ2pFLEdBQTRCO0lBRTVCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQzFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztTQUNqRSxLQUFLLEVBQUUsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0SW5qZWN0YWJsZXNDb25maWcsIEluamVjdGFibGVzS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZXMgfSBmcm9tIFwiLi9JbmplY3RhYmxlc1wiO1xuaW1wb3J0IHsgZ2V0SW5qZWN0S2V5LCBnZXRUeXBlRnJvbURlY29yYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlTWV0YWRhdGEsIEluc3RhbmNlQ2FsbGJhY2sgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVjb3JhdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBAaW5qZWN0YWJsZSBkZWNvcmF0b3IuXG4gKiBAc3VtbWFyeSBDb250cm9scyBsaWZlY3ljbGUgKHNpbmdsZXRvbiB2cyBvbi1kZW1hbmQpIGFuZCBhbiBvcHRpb25hbCBpbnN0YW5jZSB0cmFuc2Zvcm1hdGlvbiBjYWxsYmFjayBleGVjdXRlZCBwb3N0LWNvbnN0cnVjdGlvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSBpbnN0YW5jZSB0eXBlIGFmZmVjdGVkIGJ5IHRoZSBjYWxsYmFjayB3aGVuIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBzaW5nbGV0b24gV2hlbiB0cnVlLCBhIHNpbmdsZSBpbnN0YW5jZSBpcyBzaGFyZWQgKHNpbmdsZXRvbikuIFdoZW4gZmFsc2UsIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBvbiBkZW1hbmQuXG4gKiBAcHJvcGVydHkge0luc3RhbmNlQ2FsbGJhY2s8VD59IFtjYWxsYmFja10gT3B0aW9uYWwgaG9vayB0byB0cmFuc2Zvcm0gdGhlIGluc3RhbmNlIGFmdGVyIGl0IGlzIGNvbnN0cnVjdGVkLlxuICogQHR5cGVkZWYgSW5qZWN0YWJsZUNvbmZpZ1xuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgSW5qZWN0YWJsZUNvbmZpZyA9IHtcbiAgc2luZ2xldG9uOiBib29sZWFuO1xuICBjYWxsYmFjaz86IEluc3RhbmNlQ2FsbGJhY2s8YW55Pjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlQmFzZURlY29yYXRvcihcbiAgY2F0ZWdvcnk/OiBzdHJpbmcgfCBDb25zdHJ1Y3RvciB8IFBhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz4sXG4gIGNmZz86IFBhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz5cbikge1xuICBjZmcgPVxuICAgIGNmZyB8fFxuICAgICh0eXBlb2YgY2F0ZWdvcnkgPT09IFwib2JqZWN0XCJcbiAgICAgID8gT2JqZWN0LmFzc2lnbihjYXRlZ29yeSBhcyBSZWNvcmQ8YW55LCBhbnk+LCBEZWZhdWx0SW5qZWN0YWJsZXNDb25maWcpXG4gICAgICA6IERlZmF1bHRJbmplY3RhYmxlc0NvbmZpZyk7XG4gIGNhdGVnb3J5ID1cbiAgICB0eXBlb2YgY2F0ZWdvcnkgPT09IFwib2JqZWN0XCJcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGNhdGVnb3J5XG4gICAgICAgIDogdHlwZW9mIGNhdGVnb3J5ID09PSBcImZ1bmN0aW9uXCIgJiYgY2F0ZWdvcnkubmFtZVxuICAgICAgICAgID8gY2F0ZWdvcnlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluamVjdGFibGVJbm5lckRlY29yYXRvcihvcmlnaW5hbDogYW55KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihjYXRlZ29yeSB8fCBvcmlnaW5hbC50b1N0cmluZygpKTtcbiAgICBjYXRlZ29yeSA9IGNhdGVnb3J5IHx8IG9yaWdpbmFsLm5hbWU7XG5cbiAgICBjb25zdCBtZXRhZGF0YTogSW5qZWN0YWJsZU1ldGFkYXRhID0ge1xuICAgICAgY2xhc3M6IGNhdGVnb3J5IGFzIHN0cmluZyxcbiAgICAgIHN5bWJvbDogc3ltYm9sLFxuICAgIH07XG5cbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgZ2V0SW5qZWN0S2V5KEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgb3JpZ2luYWxcbiAgICApO1xuICAgIC8vIHRoZSBuZXcgY29uc3RydWN0b3IgYmVoYXZpb3VyXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgcmV0dXJuIEluamVjdGFibGVzLmdldDxhbnk+KHN5bWJvbCwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8vIGNvcHkgcHJvdG90eXBlIHNvIGluc3RhbmNlb2Ygb3BlcmF0b3Igc3RpbGwgd29ya3NcbiAgICBuZXdDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBvcmlnaW5hbC5wcm90b3R5cGU7XG4gICAgLy8gbmV3Q29uc3RydWN0b3IuX19wcm90b19fID0gb3JpZ2luYWwuX19wcm90b19fO1xuICAgIC8vIFNldHMgdGhlIHByb3BlciBjb25zdHJ1Y3RvciBuYW1lIGZvciB0eXBlIHZlcmlmaWNhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdDb25zdHJ1Y3RvciwgXCJuYW1lXCIsIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUQUJMRSksXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG5ld0NvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIEluamVjdGFibGVzLnJlZ2lzdGVyKG9yaWdpbmFsLCBzeW1ib2wsIGNmZyk7XG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgY29uc3RydWN0b3IgdHlwZSBmb3IgY2xhc3MtbGlrZSB2YWx1ZXMuXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGFueSBjbGFzcyB0aGF0IGNhbiBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhcmJpdHJhcnkgYXJndW1lbnRzLCBwcm9kdWNpbmcgYW4gaW5zdGFuY2Ugb2YgdHlwZSBULlxuICogQHRlbXBsYXRlIFQgVGhlIGluc3RhbmNlIHR5cGUgY3JlYXRlZCBieSB0aGUgY29uc3RydWN0b3IuXG4gKiBAdHlwZWRlZiBDb25zdHJ1Y3RvclxuICogQGV4YW1wbGVcbiAqIC8vIFVzaW5nIENvbnN0cnVjdG9yIHRvIHR5cGUgYSBmYWN0b3J5XG4gKiBmdW5jdGlvbiBtYWtlPFQ+KEN0b3I6IENvbnN0cnVjdG9yPFQ+LCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICogICByZXR1cm4gbmV3IEN0b3IoLi4uYXJncyk7XG4gKiB9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUID0gYW55PiA9IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBjbGFzcyBhcyBhdmFpbGFibGUgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGFuIGluamVjdGFibGUgdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2UuXG4gKlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55KTogYW55fSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIGNsYXNzIGludG8gYW4gaW5qZWN0YWJsZS5cbiAqXG4gKiBAZnVuY3Rpb24gaW5qZWN0YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZSgpOiAob3JpZ2luYWw6IGFueSkgPT4gYW55O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBjbGFzcyBhcyBhdmFpbGFibGUgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGFuIGluamVjdGFibGUgdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBDb25zdHJ1Y3Rvcn0gY2F0ZWdvcnkgRGVmYXVsdHMgdG8gdGhlIGNsYXNzIGNhdGVnb3J5LiBVc2VmdWwgd2hlbiBtaW5pZmljYXRpb24gb2NjdXJzIGFuZCBuYW1lcyBhcmUgY2hhbmdlZCxcbiAqIG9yIHdoZW4geW91IHdhbnQgdG8gdXBjYXN0IHRoZSBvYmplY3QgdG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAqXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnkpOiBhbnl9IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgdHJhbnNmb3JtcyB0aGUgY2xhc3MgaW50byBhbiBpbmplY3RhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RhYmxlKFxuICBjYXRlZ29yeTogc3RyaW5nIHwgQ29uc3RydWN0b3Jcbik6IChvcmlnaW5hbDogYW55KSA9PiBhbnk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGNsYXNzIGFzIGF2YWlsYWJsZSBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYW4gaW5qZWN0YWJsZSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBjbGFzcywgcmVwbGFjZXMgaXRzIGNvbnN0cnVjdG9yIHdpdGggb25lIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz59IGNmZz1EZWZhdWx0SW5qZWN0YWJsZUNvbmZpZyBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBzaW5nbGV0b24gYmVoYXZpb3IgYW5kIGFkZGluZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSBjbGFzcyBpbnRvIGFuIGluamVjdGFibGUuXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdGFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGNmZzogUGFydGlhbDxJbmplY3RhYmxlQ29uZmlnPlxuKTogKG9yaWdpbmFsOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBjbGFzcyBhcyBhdmFpbGFibGUgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGFuIGluamVjdGFibGUgdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIGNhdGVnb3J5IERlZmF1bHRzIHRvIHRoZSBjbGFzcyBjYXRlZ29yeS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3VycyBhbmQgbmFtZXMgYXJlIGNoYW5nZWQsXG4gKiBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz59IGNmZz1EZWZhdWx0SW5qZWN0YWJsZUNvbmZpZyBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBzaW5nbGV0b24gYmVoYXZpb3IgYW5kIGFkZGluZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSBjbGFzcyBpbnRvIGFuIGluamVjdGFibGUuXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdGFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdGFibGUoXG4gIGNhdGVnb3J5OiBzdHJpbmcgfCBDb25zdHJ1Y3RvcixcbiAgY2ZnOiBQYXJ0aWFsPEluamVjdGFibGVDb25maWc+XG4pOiAob3JpZ2luYWw6IGFueSkgPT4gYW55O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFya3MgYSBjbGFzcyBhcyBhdmFpbGFibGUgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGFuIGluamVjdGFibGUgdGhhdCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICogV2hlbiBhcHBsaWVkIHRvIGEgY2xhc3MsIHJlcGxhY2VzIGl0cyBjb25zdHJ1Y3RvciB3aXRoIG9uZSB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBDb25zdHJ1Y3Rvcn0gW2NhdGVnb3J5XSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgY2F0ZWdvcnkuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnMgYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLFxuICogb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtQYXJ0aWFsPEluamVjdGFibGVDb25maWc+fSBbY2ZnPURlZmF1bHRJbmplY3RhYmxlQ29uZmlnXSBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBzaW5nbGV0b24gYmVoYXZpb3IgYW5kIGFkZGluZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSBjbGFzcyBpbnRvIGFuIGluamVjdGFibGUuXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdGFibGVcbiAqIEBjYXRlZ29yeSBDbGFzcyBEZWNvcmF0b3JzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRGVjb3JhdG9yXG4gKiAgIHBhcnRpY2lwYW50IEluamVjdGFibGVzXG4gKlxuICogICBDbGllbnQtPj5EZWNvcmF0b3I6IEBpbmplY3RhYmxlKClcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDcmVhdGUgbmV3IGNvbnN0cnVjdG9yXG4gKlxuICogICBOb3RlIG92ZXIgRGVjb3JhdG9yOiBXaGVuIG5ldyBpbnN0YW5jZSByZXF1ZXN0ZWRcbiAqICAgRGVjb3JhdG9yLT4+SW5qZWN0YWJsZXM6IGdldChjYXRlZ29yeSlcbiAqICAgYWx0IEluc3RhbmNlIGV4aXN0c1xuICogICAgIEluamVjdGFibGVzLS0+PkRlY29yYXRvcjogUmV0dXJuIGV4aXN0aW5nIGluc3RhbmNlXG4gKiAgIGVsc2UgTm8gaW5zdGFuY2VcbiAqICAgICBEZWNvcmF0b3ItPj5JbmplY3RhYmxlczogcmVnaXN0ZXIob3JpZ2luYWwsIGNhdGVnb3J5KVxuICogICAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQoY2F0ZWdvcnkpXG4gKiAgICAgSW5qZWN0YWJsZXMtLT4+RGVjb3JhdG9yOiBSZXR1cm4gbmV3IGluc3RhbmNlXG4gKiAgICAgb3B0IEhhcyBjYWxsYmFja1xuICogICAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBDYWxsIGluc3RhbmNlQ2FsbGJhY2tcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogRGVmaW5lIG1ldGFkYXRhXG4gKiAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0YWJsZShcbiAgY2F0ZWdvcnk/OiBzdHJpbmcgfCBDb25zdHJ1Y3RvciB8IFBhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz4sXG4gIGNmZz86IFBhcnRpYWw8SW5qZWN0YWJsZUNvbmZpZz5cbikge1xuICByZXR1cm4gRGVjb3JhdGlvbi5mb3IoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpXG4gICAgLmRlZmluZSh7IGRlY29yYXRvcjogaW5qZWN0YWJsZUJhc2VEZWNvcmF0b3IsIGFyZ3M6IFtjYXRlZ29yeSwgY2ZnXSB9KVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZW5pZW5jZSBkZWNvcmF0b3IgdG8gcmVnaXN0ZXIgYW4gaW5qZWN0YWJsZSBhcyBhIHNpbmdsZXRvbi5cbiAqIEBzdW1tYXJ5IFdyYXBzIHtAbGluayBpbmplY3RhYmxlfSBmb3JjaW5nIHRoZSBzaW5nbGV0b24gbGlmZWN5Y2xlIHNvIG9ubHkgb25lIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIHJldXNlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfENvbnN0cnVjdG9yfSBbY2F0ZWdvcnldIE9wdGlvbmFsIGV4cGxpY2l0IGNhdGVnb3J5L3N5bWJvbCBzb3VyY2U7IGRlZmF1bHRzIHRvIHRoZSBjbGFzcy5cbiAqIEBwYXJhbSB7T21pdDxJbmplY3RhYmxlQ29uZmlnLCBcInNpbmdsZXRvblwiPn0gW2NmZ10gQWRkaXRpb25hbCBpbmplY3RhYmxlIGNvbmZpZ3VyYXRpb24gZXhjbHVkaW5nIHRoZSBzaW5nbGV0b24gZmxhZy5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBjbGFzcyBkZWNvcmF0b3IgdGhhdCByZWdpc3RlcnMgdGhlIHRhcmdldCBhcyBhIHNpbmdsZXRvbiBpbmplY3RhYmxlLlxuICogQGZ1bmN0aW9uIHNpbmdsZXRvblxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZXRvbihcbiAgY2F0ZWdvcnk/OiBzdHJpbmcgfCBDb25zdHJ1Y3RvcixcbiAgY2ZnPzogT21pdDxJbmplY3RhYmxlQ29uZmlnLCBcInNpbmdsZXRvblwiPlxuKSB7XG4gIHJldHVybiBpbmplY3RhYmxlKFxuICAgIGNhdGVnb3J5IGFzIGFueSxcbiAgICBPYmplY3QuYXNzaWduKHt9LCBjZmcgfHwge30sIHsgc2luZ2xldG9uOiB0cnVlIH0pXG4gICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlbmllbmNlIGRlY29yYXRvciB0byByZWdpc3RlciBhbiBpbmplY3RhYmxlIGFzIG9uLWRlbWFuZCAobm9uLXNpbmdsZXRvbikuXG4gKiBAc3VtbWFyeSBXcmFwcyB7QGxpbmsgaW5qZWN0YWJsZX0gZm9yY2luZyBuZXcgaW5zdGFuY2VzIHRvIGJlIGNyZWF0ZWQgb24gZXZlcnkgaW5qZWN0aW9uIG9yIHJldHJpZXZhbC5cbiAqIEBwYXJhbSB7c3RyaW5nfENvbnN0cnVjdG9yfSBbY2F0ZWdvcnldIE9wdGlvbmFsIGV4cGxpY2l0IGNhdGVnb3J5L3N5bWJvbCBzb3VyY2U7IGRlZmF1bHRzIHRvIHRoZSBjbGFzcy5cbiAqIEBwYXJhbSB7T21pdDxJbmplY3RhYmxlQ29uZmlnLCBcInNpbmdsZXRvblwiPn0gW2NmZ10gQWRkaXRpb25hbCBpbmplY3RhYmxlIGNvbmZpZ3VyYXRpb24gZXhjbHVkaW5nIHRoZSBzaW5nbGV0b24gZmxhZy5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSk6IGFueX0gQSBjbGFzcyBkZWNvcmF0b3IgdGhhdCByZWdpc3RlcnMgdGhlIHRhcmdldCBhcyBhIG5vbi1zaW5nbGV0b24gaW5qZWN0YWJsZS5cbiAqIEBmdW5jdGlvbiBvbkRlbWFuZFxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uRGVtYW5kKFxuICBjYXRlZ29yeT86IHN0cmluZyB8IENvbnN0cnVjdG9yLFxuICBjZmc/OiBPbWl0PEluamVjdGFibGVDb25maWcsIFwic2luZ2xldG9uXCI+XG4pIHtcbiAgcmV0dXJuIGluamVjdGFibGUoXG4gICAgY2F0ZWdvcnkgYXMgYW55LFxuICAgIE9iamVjdC5hc3NpZ24oe30sIGNmZyB8fCB7fSwgeyBzaW5nbGV0b246IGZhbHNlIH0pXG4gICk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0eXBlIGZvciB0cmFuc2Zvcm1pbmcgaW5qZWN0YWJsZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgaW5qZWN0ZWQuXG4gKiBAc3VtbWFyeSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIGEgY2FjaGVkIHtAbGluayBpbmplY3RhYmxlfSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCBpbnRvIGEgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gaW5qZWN0YWJsZSBUaGUgaW5qZWN0YWJsZSBpbnN0YW5jZSB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0aGUgaW5qZWN0YWJsZSB3aWxsIGJlIGluamVjdGVkIG9uXG4gKiBAcmV0dXJuIHthbnl9IFRoZSB0cmFuc2Zvcm1lZCBpbmplY3RhYmxlIGluc3RhbmNlXG4gKlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBJbnN0YW5jZVRyYW5zZm9ybWVyXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VUcmFuc2Zvcm1lciA9IChpbmplY3RhYmxlOiBhbnksIG9iajogYW55KSA9PiBhbnk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE9wdGlvbnMgZm9yIHRoZSBwcm9wZXJ0eS1sZXZlbCBAaW5qZWN0IGRlY29yYXRvci5cbiAqIEBzdW1tYXJ5IEFsbG93cyBzcGVjaWZ5aW5nIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBhbmQgYW4gb3B0aW9uYWwgdHJhbnNmb3JtZXIgdG8gYmUgYXBwbGllZCB0byB0aGUgcmVzb2x2ZWQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge2FueVtdfSBbYXJnc10gT3B0aW9uYWwgY29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHRoZSBpbmplY3RhYmxlIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtJbnN0YW5jZVRyYW5zZm9ybWVyfSBbdHJhbnNmb3JtZXJdIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgaW5zdGFuY2UgYmVmb3JlIGFzc2lnbm1lbnQuXG4gKiBAdHlwZWRlZiBJbmplY3RPcHRpb25zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBJbmplY3RPcHRpb25zID0ge1xuICBhcmdzPzogYW55W107XG4gIHRyYW5zZm9ybWVyPzogSW5zdGFuY2VUcmFuc2Zvcm1lcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCYXNlRGVjb3JhdG9yKFxuICBjYXRlZ29yeT86IHN5bWJvbCB8IHN0cmluZyB8IENvbnN0cnVjdG9yIHwgUGFydGlhbDxJbmplY3RPcHRpb25zPixcbiAgY2ZnPzogUGFydGlhbDxJbmplY3RPcHRpb25zPlxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbmplY3RhYmxlSW5uZXJEZWNvcmF0b3IodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBhbnkpIHtcbiAgICBjb25zdCBjb25maWc6IEluamVjdE9wdGlvbnMgPSAoXG4gICAgICBjZmcgfHwgdHlwZW9mIGNhdGVnb3J5ID09PSBcIm9iamVjdFwiID8gY2F0ZWdvcnkgOiB7fVxuICAgICkgYXMgSW5qZWN0T3B0aW9ucztcblxuICAgIGNvbnN0IG5hbWU6IHN5bWJvbCB8IHN0cmluZyB8IENvbnN0cnVjdG9yIHwgdW5kZWZpbmVkID1cbiAgICAgICh0eXBlb2YgY2F0ZWdvcnkgIT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgKGNhdGVnb3J5IGFzIHN5bWJvbCB8IHN0cmluZyB8IENvbnN0cnVjdG9yKSkgfHxcbiAgICAgIGdldFR5cGVGcm9tRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZ2V0IFR5cGUgZnJvbSBkZWNvcmF0b3JgKTtcbiAgICB9XG5cbiAgICAvLyBwcm9wKCkodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgIGdldEluamVjdEtleShJbmplY3RhYmxlc0tleXMuSU5KRUNUKSxcbiAgICAgIHtcbiAgICAgICAgaW5qZWN0YWJsZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgcHJvcGVydHlLZXlcbiAgICAgICAgKSBhcyBQcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgIC8vIGxldCAvb2JqOiBhbnk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCh0aGlzOiBhbnkpIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHZhbHVlcy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgIGlmIChvYmopIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgIG9iaiA9IEluamVjdGFibGVzLmdldChuYW1lLCAuLi4oY29uZmlnLmFyZ3MgfHwgW10pKTtcbiAgICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgYENvdWxkIG5vdCBnZXQgSW5qZWN0YWJsZSAke25hbWUudG9TdHJpbmcoKX0gdG8gaW5qZWN0IGluICR7dGFyZ2V0LmNvbnN0cnVjdG9yID8gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgOiB0YXJnZXQubmFtZX0ncyAke3Byb3BlcnR5S2V5fWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoY29uZmlnLnRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBvYmogPSBjb25maWcudHJhbnNmb3JtZXIob2JqLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWx1ZXMuc2V0KHRoaXMsIG9iaik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXNbcHJvcGVydHlLZXldO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcm9wZXJ0eSBkZWNvcmF0b3IgdGhhdCBpbmplY3RzIGEgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBAc3VtbWFyeSBBbGxvd3MgZm9yIHRoZSBpbmplY3Rpb24gb2YgYW4ge0BsaW5rIGluamVjdGFibGV9IGRlY29yYXRlZCBkZXBlbmRlbmN5IGludG8gYSBjbGFzcyBwcm9wZXJ0eS5cbiAqIFRoZSBwcm9wZXJ0eSBtdXN0IGJlIHR5cGVkIGZvciB0aGUgcmVxdWVzdGVkIGRlcGVuZGVuY3kuIE9ubHkgY29uY3JldGUgY2xhc3NlcyBhcmUgc3VwcG9ydGVkOyBnZW5lcmljcyBhcmUgbm90LlxuICpcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSwgYW55KTogdm9pZH0gQSBwcm9wZXJ0eSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb24gaW5qZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogYW55KSA9PiB2b2lkO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2F0ZWdvcnkgRGVmYXVsdHMgdG8gdGhlIGNsYXNzIG5hbWUgZGVyaXZlZCBmcm9tIHRoZSBwcm9wZXJ0eSB0eXBlLiBVc2VmdWwgd2hlbiBtaW5pZmljYXRpb24gb2NjdXJzXG4gKiBhbmQgbmFtZXMgYXJlIGNoYW5nZWQsIG9yIHdoZW4geW91IHdhbnQgdG8gdXBjYXN0IHRoZSBvYmplY3QgdG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSwgYW55KTogdm9pZH0gQSBwcm9wZXJ0eSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb24gaW5qZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3QoXG4gIGNhdGVnb3J5OiBzdHJpbmcgfCBDb25zdHJ1Y3RvclxuKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogYW55KSA9PiB2b2lkO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgaW5qZWN0cyBhIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogQHN1bW1hcnkgQWxsb3dzIGZvciB0aGUgaW5qZWN0aW9uIG9mIGFuIHtAbGluayBpbmplY3RhYmxlfSBkZWNvcmF0ZWQgZGVwZW5kZW5jeSBpbnRvIGEgY2xhc3MgcHJvcGVydHkuXG4gKiBUaGUgcHJvcGVydHkgbXVzdCBiZSB0eXBlZCBmb3IgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmN5LiBPbmx5IGNvbmNyZXRlIGNsYXNzZXMgYXJlIHN1cHBvcnRlZDsgZ2VuZXJpY3MgYXJlIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0T3B0aW9ucz59IFtjZmc9e31dIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSB0aGUgaW5qZWN0YWJsZSBpbnN0YW5jZSBiZWZvcmUgaXQncyBpbmplY3RlZCwgb3IgYXJndW1lbnRzIHRvIHBhc3MgdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5qZWN0aW5nIG9uRGVtYW5kXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSk6IHZvaWR9IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIGluamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KFxuICBjZmc6IFBhcnRpYWw8SW5qZWN0T3B0aW9ucz5cbik6ICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IGFueSkgPT4gdm9pZDtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFByb3BlcnR5IGRlY29yYXRvciB0aGF0IGluamVjdHMgYSBkZXBlbmRlbmN5IGludG8gYSBjbGFzcyBwcm9wZXJ0eS5cbiAqIEBzdW1tYXJ5IEFsbG93cyBmb3IgdGhlIGluamVjdGlvbiBvZiBhbiB7QGxpbmsgaW5qZWN0YWJsZX0gZGVjb3JhdGVkIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogVGhlIHByb3BlcnR5IG11c3QgYmUgdHlwZWQgZm9yIHRoZSByZXF1ZXN0ZWQgZGVwZW5kZW5jeS4gT25seSBjb25jcmV0ZSBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQ7IGdlbmVyaWNzIGFyZSBub3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5IERlZmF1bHRzIHRvIHRoZSBjbGFzcyBuYW1lIGRlcml2ZWQgZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4gVXNlZnVsIHdoZW4gbWluaWZpY2F0aW9uIG9jY3Vyc1xuICogYW5kIG5hbWVzIGFyZSBjaGFuZ2VkLCBvciB3aGVuIHlvdSB3YW50IHRvIHVwY2FzdCB0aGUgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHR5cGUuXG4gKiBAcGFyYW0ge1BhcnRpYWw8SW5qZWN0T3B0aW9ucz59IGNmZz17fSBPcHRpb25hbCBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gdGhlIGluamVjdGFibGUgaW5zdGFuY2UgYmVmb3JlIGl0J3MgaW5qZWN0ZWQsIG9yIGFyZ3VtZW50cyB0byBwYXNzIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluamVjdGluZyBvbkRlbWFuZFxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55LCBhbnkpOiB2b2lkfSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChcbiAgY2F0ZWdvcnk6IHN0cmluZyB8IENvbnN0cnVjdG9yLFxuICBjZmc6IFBhcnRpYWw8SW5qZWN0T3B0aW9ucz5cbik6ICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IGFueSkgPT4gdm9pZDtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFByb3BlcnR5IGRlY29yYXRvciB0aGF0IGluamVjdHMgYSBkZXBlbmRlbmN5IGludG8gYSBjbGFzcyBwcm9wZXJ0eS5cbiAqIEBzdW1tYXJ5IEFsbG93cyBmb3IgdGhlIGluamVjdGlvbiBvZiBhbiB7QGxpbmsgaW5qZWN0YWJsZX0gZGVjb3JhdGVkIGRlcGVuZGVuY3kgaW50byBhIGNsYXNzIHByb3BlcnR5LlxuICogVGhlIHByb3BlcnR5IG11c3QgYmUgdHlwZWQgZm9yIHRoZSByZXF1ZXN0ZWQgZGVwZW5kZW5jeS4gT25seSBjb25jcmV0ZSBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQ7IGdlbmVyaWNzIGFyZSBub3QuXG4gKlxuICogSW5qZWN0ZWQgcHJvcGVydGllcyBzaG91bGQgYmUgZGVzY3JpYmVkIGxpa2Ugc286XG4gKiA8cHJlPlxuICogICAgIGNsYXNzIENsYXNzTmFtZSB7XG4gKiAgICAgICAgIC4uLlxuICpcbiAqICAgICAgICAgQGluamVjdCgpXG4gKiAgICAgICAgIHByb3BlcnR5TmFtZSE6IEluamVjdGFibGVDbGFzcztcbiAqXG4gKiAgICAgICAgIC4uLlxuICogICAgIH1cbiAqIDwvcHJlPlxuICpcbiAqIHdoZXJlIEluamVjdGFibGVDbGFzcyBpcyB0aGUgY2xhc3MgeW91IHdhbnQgdG8gaW5qZWN0LlxuICogTm90aWNlIHRoZSB1c2Ugb2YgJyE6JyB0byBlbnN1cmUgdGhlIHRyYW5zcGlsZXIgdGhlIHByb3BlcnR5IHdpbGwgYmUgc2V0IG91dHNpZGUgdGhlIGNvbnN0cnVjdG9yIGJ1dCB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkLlxuICogRm9yIHByb2plY3RzIHdoZXJlIG1pbmlmaWNhdGlvbiBvY2N1cnMsIHlvdSBzaG91bGQgdXNlIHRoZSBjYXRlZ29yeSBwYXJhbSB0byBlbnN1cmUgdGhlIG5hbWUgaXMgdGhlIHNhbWUgdGhyb3VnaG91dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NhdGVnb3J5XSBEZWZhdWx0cyB0byB0aGUgY2xhc3MgbmFtZSBkZXJpdmVkIGZyb20gdGhlIHByb3BlcnR5IHR5cGUuIFVzZWZ1bCB3aGVuIG1pbmlmaWNhdGlvbiBvY2N1cnNcbiAqIGFuZCBuYW1lcyBhcmUgY2hhbmdlZCwgb3Igd2hlbiB5b3Ugd2FudCB0byB1cGNhc3QgdGhlIG9iamVjdCB0byBhIGRpZmZlcmVudCB0eXBlLlxuICogQHBhcmFtIHtQYXJ0aWFsPEluamVjdE9wdGlvbnM+fSBbY2ZnPXt9XSBPcHRpb25hbCBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gdGhlIGluamVjdGFibGUgaW5zdGFuY2UgYmVmb3JlIGl0J3MgaW5qZWN0ZWQsIG9yIGFyZ3VtZW50cyB0byBwYXNzIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluamVjdGluZyBvbkRlbWFuZFxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55LCBhbnkpOiB2b2lkfSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvbiBpbmplY3RcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRGVjb3JhdG9yXG4gKiAgIHBhcnRpY2lwYW50IEluamVjdGFibGVzXG4gKlxuICogICBDbGllbnQtPj5EZWNvcmF0b3I6IEBpbmplY3QoKVxuICogICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IEdldCB0eXBlIGZyb20gcHJvcGVydHlcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBEZWZpbmUgbWV0YWRhdGFcbiAqICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBEZWZpbmUgcHJvcGVydHkgZ2V0dGVyXG4gKlxuICogICBOb3RlIG92ZXIgRGVjb3JhdG9yOiBXaGVuIHByb3BlcnR5IGFjY2Vzc2VkXG4gKiAgIENsaWVudC0+PkRlY29yYXRvcjogYWNjZXNzIHByb3BlcnR5XG4gKiAgIERlY29yYXRvci0+PkRlY29yYXRvcjogQ2hlY2sgaWYgaW5zdGFuY2UgZXhpc3RzXG4gKiAgIGFsdCBJbnN0YW5jZSBleGlzdHMgaW4gV2Vha01hcFxuICogICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFJldHVybiBjYWNoZWQgaW5zdGFuY2VcbiAqICAgZWxzZSBObyBpbnN0YW5jZVxuICogICAgIERlY29yYXRvci0+PkluamVjdGFibGVzOiBnZXQobmFtZSlcbiAqICAgICBhbHQgSW5qZWN0YWJsZSBmb3VuZFxuICogICAgICAgSW5qZWN0YWJsZXMtLT4+RGVjb3JhdG9yOiBSZXR1cm4gaW5qZWN0YWJsZSBpbnN0YW5jZVxuICogICAgICAgb3B0IEhhcyB0cmFuc2Zvcm1lclxuICogICAgICAgICBEZWNvcmF0b3ItPj5EZWNvcmF0b3I6IENhbGwgdHJhbnNmb3JtZXJcbiAqICAgICAgIGVuZFxuICogICAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBTdG9yZSBpbiBXZWFrTWFwXG4gKiAgICAgICBEZWNvcmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gaW5zdGFuY2VcbiAqICAgICBlbHNlIE5vIGluamVjdGFibGVcbiAqICAgICAgIERlY29yYXRvci0tPj5DbGllbnQ6IFRocm93IGVycm9yXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0KFxuICBjYXRlZ29yeT86IHN5bWJvbCB8IHN0cmluZyB8IENvbnN0cnVjdG9yIHwgUGFydGlhbDxJbmplY3RPcHRpb25zPixcbiAgY2ZnPzogUGFydGlhbDxJbmplY3RPcHRpb25zPlxuKSB7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihJbmplY3RhYmxlc0tleXMuSU5KRUNUKVxuICAgIC5kZWZpbmUoeyBkZWNvcmF0b3I6IGluamVjdEJhc2VEZWNvcmF0b3IsIGFyZ3M6IFtjYXRlZ29yeSwgY2ZnXSB9KVxuICAgIC5hcHBseSgpO1xufVxuIl19
@@ -18,4 +18,4 @@ export * from "./utils";
18
18
  * @const VERSION
19
19
  * @memberOf module:injectable-decorators
20
20
  */
21
- export declare const VERSION = "1.6.8";
21
+ export declare const VERSION = "1.6.10";
package/lib/esm/index.js CHANGED
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * @module injectable-decorators
8
8
  */
9
+ import { Metadata } from "@decaf-ts/decoration";
9
10
  export * from "./constants.js";
10
11
  export * from "./decorators.js";
11
12
  export * from "./Injectables.js";
@@ -18,5 +19,6 @@ export * from "./utils.js";
18
19
  * @const VERSION
19
20
  * @memberOf module:injectable-decorators
20
21
  */
21
- export const VERSION = "1.6.8";
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILCtCQUE0QjtBQUM1QixnQ0FBNkI7QUFDN0IsaUNBQThCO0FBQzlCLDhCQUEyQjtBQUMzQiwyQkFBd0I7QUFDeEIsMkJBQXdCO0FBRXhCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbGlnaHR3ZWlnaHQgZGVwZW5kZW5jeSBpbmplY3Rpb24gbGlicmFyeSBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBBZGRzIGEgc2ltcGxlIEluamVjdGFibGVzIGltcGxlbWVudGF0aW9uIHRvIGNyZWF0ZSBzaW5nbGV0b24gaW5zdGFuY2VzIG9mIGFuIG9iamVjdFxuICogYW5kIGVhc2lseSBpbmplY3QgaXQgaW50byBvdGhlciBvYmplY3RzLiBQcm92aWRlcyBkZWNvcmF0b3JzIGZvciBtYXJraW5nIGNsYXNzZXMgYXMgaW5qZWN0YWJsZVxuICogYW5kIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzIGludG8gY2xhc3MgcHJvcGVydGllcy5cbiAqXG4gKiBAbW9kdWxlIGluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vSW5qZWN0YWJsZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBpbmplY3RhYmxlLWRlY29yYXRvcnMgbGlicmFyeS5cbiAqIEBzdW1tYXJ5IERlZmluZWQgb24gbGlicmFyeSBidWlsZC4gSG9sZHMgdGhlIGxpYnJhcnkncyBjdXJyZW50IHZlcnNpb24gc3RyaW5nLlxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
22
+ export const VERSION = "1.6.10";
23
+ Metadata.registerLibrary("@decaf-ts/injectable-decorators", VERSION);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCwrQkFBNEI7QUFDNUIsZ0NBQTZCO0FBQzdCLGlDQUE4QjtBQUM5Qiw4QkFBMkI7QUFDM0IsMkJBQXdCO0FBQ3hCLDJCQUF3QjtBQUV4Qjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFFckMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbGlnaHR3ZWlnaHQgZGVwZW5kZW5jeSBpbmplY3Rpb24gbGlicmFyeSBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBBZGRzIGEgc2ltcGxlIEluamVjdGFibGVzIGltcGxlbWVudGF0aW9uIHRvIGNyZWF0ZSBzaW5nbGV0b24gaW5zdGFuY2VzIG9mIGFuIG9iamVjdFxuICogYW5kIGVhc2lseSBpbmplY3QgaXQgaW50byBvdGhlciBvYmplY3RzLiBQcm92aWRlcyBkZWNvcmF0b3JzIGZvciBtYXJraW5nIGNsYXNzZXMgYXMgaW5qZWN0YWJsZVxuICogYW5kIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzIGludG8gY2xhc3MgcHJvcGVydGllcy5cbiAqXG4gKiBAbW9kdWxlIGluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5cbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vSW5qZWN0YWJsZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBpbmplY3RhYmxlLWRlY29yYXRvcnMgbGlicmFyeS5cbiAqIEBzdW1tYXJ5IERlZmluZWQgb24gbGlicmFyeSBidWlsZC4gSG9sZHMgdGhlIGxpYnJhcnkncyBjdXJyZW50IHZlcnNpb24gc3RyaW5nLlxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuXG5NZXRhZGF0YS5yZWdpc3RlckxpYnJhcnkoXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCIsIFZFUlNJT04pO1xuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ import { Metadata } from "@decaf-ts/decoration";
2
+ import { InjectablesKeys } from "./constants.js";
3
+ Metadata.injectables = function (category) {
4
+ const meta = Metadata["innerGet"](Symbol.for(InjectablesKeys.INJECTABLE));
5
+ if (!meta)
6
+ return undefined;
7
+ if (!category)
8
+ return meta;
9
+ let symbol;
10
+ if (typeof category !== "symbol") {
11
+ if (typeof category === "string")
12
+ symbol = Symbol.for(category);
13
+ else
14
+ symbol = Symbol.for(Metadata.constr(category) || category);
15
+ }
16
+ else {
17
+ symbol = category;
18
+ }
19
+ return meta[symbol];
20
+ };
21
+ Metadata.injected = function (model, prop) {
22
+ const meta = Metadata.get(model, `${InjectablesKeys.INJECT}${prop ? `${Metadata.splitter}${prop.toString()}` : ""}`);
23
+ return meta;
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL292ZXJyaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBb0I7QUFHN0MsUUFBZ0IsQ0FBQyxXQUFXLEdBQUcsVUFHOUIsUUFBWTtJQUVaLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDNUIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzQixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUTtZQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUMzRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUQsUUFBZ0IsQ0FBQyxRQUFRLEdBQUcsVUFDM0IsS0FBcUIsRUFDckIsSUFBUTtJQUVSLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ3ZCLEtBQUssRUFDTCxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNuRixDQUFDO0lBQ0YsT0FBTyxJQUFvRSxDQUFDO0FBQzlFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZXNLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJbmplY3RPcHRpb25zIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG4oTWV0YWRhdGEgYXMgYW55KS5pbmplY3RhYmxlcyA9IGZ1bmN0aW9uIDxcbiAgVCBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdG9yLFxuPihcbiAgY2F0ZWdvcnk/OiBUXG4pOiAoVCBleHRlbmRzIHVuZGVmaW5lZCA/IENvbnN0cnVjdG9yW10gOiBDb25zdHJ1Y3RvcikgfCB1bmRlZmluZWQge1xuICBjb25zdCBtZXRhID0gTWV0YWRhdGFbXCJpbm5lckdldFwiXShTeW1ib2wuZm9yKEluamVjdGFibGVzS2V5cy5JTkpFQ1RBQkxFKSk7XG4gIGlmICghbWV0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFjYXRlZ29yeSkgcmV0dXJuIG1ldGE7XG4gIGxldCBzeW1ib2w6IHN5bWJvbDtcbiAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gXCJzeW1ib2xcIikge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgPT09IFwic3RyaW5nXCIpIHN5bWJvbCA9IFN5bWJvbC5mb3IoY2F0ZWdvcnkpO1xuICAgIGVsc2Ugc3ltYm9sID0gU3ltYm9sLmZvcihNZXRhZGF0YS5jb25zdHIoY2F0ZWdvcnkpIHx8IGNhdGVnb3J5KTtcbiAgfSBlbHNlIHtcbiAgICBzeW1ib2wgPSBjYXRlZ29yeTtcbiAgfVxuICByZXR1cm4gbWV0YVtzeW1ib2xdO1xufTtcblxuKE1ldGFkYXRhIGFzIGFueSkuaW5qZWN0ZWQgPSBmdW5jdGlvbiA8VCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBtb2RlbDogQ29uc3RydWN0b3I8VD4sXG4gIHByb3A/OiBLXG4pOiAoSyBleHRlbmRzIGtleW9mIFQgPyBJbmplY3RPcHRpb25zIDogUmVjb3JkPEssIEluamVjdE9wdGlvbnM+KSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoXG4gICAgbW9kZWwsXG4gICAgYCR7SW5qZWN0YWJsZXNLZXlzLklOSkVDVH0ke3Byb3AgPyBgJHtNZXRhZGF0YS5zcGxpdHRlcn0ke3Byb3AudG9TdHJpbmcoKX1gIDogXCJcIn1gXG4gICk7XG4gIHJldHVybiBtZXRhIGFzIEsgZXh0ZW5kcyBrZXlvZiBUID8gSW5qZWN0T3B0aW9ucyA6IFJlY29yZDxLLCBJbmplY3RPcHRpb25zPjtcbn07XG4iXX0=
package/lib/index.cjs CHANGED
@@ -23,6 +23,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.VERSION = void 0;
26
+ const decoration_1 = require("@decaf-ts/decoration");
26
27
  __exportStar(require("./constants.cjs"), exports);
27
28
  __exportStar(require("./decorators.cjs"), exports);
28
29
  __exportStar(require("./Injectables.cjs"), exports);
@@ -35,5 +36,6 @@ __exportStar(require("./utils.cjs"), exports);
35
36
  * @const VERSION
36
37
  * @memberOf module:injectable-decorators
37
38
  */
38
- exports.VERSION = "1.6.8";
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsa0RBQTRCO0FBQzVCLG1EQUE2QjtBQUM3QixvREFBOEI7QUFDOUIsaURBQTJCO0FBQzNCLDhDQUF3QjtBQUN4Qiw4Q0FBd0I7QUFFeEI7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBBIGxpZ2h0d2VpZ2h0IGRlcGVuZGVuY3kgaW5qZWN0aW9uIGxpYnJhcnkgZm9yIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zLlxuICogQHN1bW1hcnkgQWRkcyBhIHNpbXBsZSBJbmplY3RhYmxlcyBpbXBsZW1lbnRhdGlvbiB0byBjcmVhdGUgc2luZ2xldG9uIGluc3RhbmNlcyBvZiBhbiBvYmplY3RcbiAqIGFuZCBlYXNpbHkgaW5qZWN0IGl0IGludG8gb3RoZXIgb2JqZWN0cy4gUHJvdmlkZXMgZGVjb3JhdG9ycyBmb3IgbWFya2luZyBjbGFzc2VzIGFzIGluamVjdGFibGVcbiAqIGFuZCBmb3IgaW5qZWN0aW5nIGRlcGVuZGVuY2llcyBpbnRvIGNsYXNzIHByb3BlcnRpZXMuXG4gKlxuICogQG1vZHVsZSBpbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0luamVjdGFibGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgaW5qZWN0YWJsZS1kZWNvcmF0b3JzIGxpYnJhcnkuXG4gKiBAc3VtbWFyeSBEZWZpbmVkIG9uIGxpYnJhcnkgYnVpbGQuIEhvbGRzIHRoZSBsaWJyYXJ5J3MgY3VycmVudCB2ZXJzaW9uIHN0cmluZy5cbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmluamVjdGFibGUtZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
39
+ exports.VERSION = "1.6.10";
40
+ decoration_1.Metadata.registerLibrary("@decaf-ts/injectable-decorators", exports.VERSION);
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgscURBQWdEO0FBRWhELGtEQUE0QjtBQUM1QixtREFBNkI7QUFDN0Isb0RBQThCO0FBQzlCLGlEQUEyQjtBQUMzQiw4Q0FBd0I7QUFDeEIsOENBQXdCO0FBRXhCOzs7OztHQUtHO0FBQ1UsUUFBQSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBRXJDLHFCQUFRLENBQUMsZUFBZSxDQUFDLGlDQUFpQyxFQUFFLGVBQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBsaWdodHdlaWdodCBkZXBlbmRlbmN5IGluamVjdGlvbiBsaWJyYXJ5IGZvciBUeXBlU2NyaXB0IGFwcGxpY2F0aW9ucy5cbiAqIEBzdW1tYXJ5IEFkZHMgYSBzaW1wbGUgSW5qZWN0YWJsZXMgaW1wbGVtZW50YXRpb24gdG8gY3JlYXRlIHNpbmdsZXRvbiBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0XG4gKiBhbmQgZWFzaWx5IGluamVjdCBpdCBpbnRvIG90aGVyIG9iamVjdHMuIFByb3ZpZGVzIGRlY29yYXRvcnMgZm9yIG1hcmtpbmcgY2xhc3NlcyBhcyBpbmplY3RhYmxlXG4gKiBhbmQgZm9yIGluamVjdGluZyBkZXBlbmRlbmNpZXMgaW50byBjbGFzcyBwcm9wZXJ0aWVzLlxuICpcbiAqIEBtb2R1bGUgaW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cblxuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9JbmplY3RhYmxlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVnaXN0cnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIGluamVjdGFibGUtZGVjb3JhdG9ycyBsaWJyYXJ5LlxuICogQHN1bW1hcnkgRGVmaW5lZCBvbiBsaWJyYXJ5IGJ1aWxkLiBIb2xkcyB0aGUgbGlicmFyeSdzIGN1cnJlbnQgdmVyc2lvbiBzdHJpbmcuXG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTppbmplY3RhYmxlLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG5cbk1ldGFkYXRhLnJlZ2lzdGVyTGlicmFyeShcIkBkZWNhZi10cy9pbmplY3RhYmxlLWRlY29yYXRvcnNcIiwgVkVSU0lPTik7XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -18,4 +18,4 @@ export * from "./utils";
18
18
  * @const VERSION
19
19
  * @memberOf module:injectable-decorators
20
20
  */
21
- export declare const VERSION = "1.6.8";
21
+ export declare const VERSION = "1.6.10";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const decoration_1 = require("@decaf-ts/decoration");
4
+ const constants_1 = require("./constants.cjs");
5
+ decoration_1.Metadata.injectables = function (category) {
6
+ const meta = decoration_1.Metadata["innerGet"](Symbol.for(constants_1.InjectablesKeys.INJECTABLE));
7
+ if (!meta)
8
+ return undefined;
9
+ if (!category)
10
+ return meta;
11
+ let symbol;
12
+ if (typeof category !== "symbol") {
13
+ if (typeof category === "string")
14
+ symbol = Symbol.for(category);
15
+ else
16
+ symbol = Symbol.for(decoration_1.Metadata.constr(category) || category);
17
+ }
18
+ else {
19
+ symbol = category;
20
+ }
21
+ return meta[symbol];
22
+ };
23
+ decoration_1.Metadata.injected = function (model, prop) {
24
+ const meta = decoration_1.Metadata.get(model, `${constants_1.InjectablesKeys.INJECT}${prop ? `${decoration_1.Metadata.splitter}${prop.toString()}` : ""}`);
25
+ return meta;
26
+ };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL292ZXJyaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUE2RDtBQUM3RCwrQ0FBOEM7QUFHN0MscUJBQWdCLENBQUMsV0FBVyxHQUFHLFVBRzlCLFFBQVk7SUFFWixNQUFNLElBQUksR0FBRyxxQkFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDNUIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzQixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUTtZQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUMzRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztJQUNsRSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVELHFCQUFnQixDQUFDLFFBQVEsR0FBRyxVQUMzQixLQUFxQixFQUNyQixJQUFRO0lBRVIsTUFBTSxJQUFJLEdBQUcscUJBQVEsQ0FBQyxHQUFHLENBQ3ZCLEtBQUssRUFDTCxHQUFHLDJCQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxxQkFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ25GLENBQUM7SUFDRixPQUFPLElBQW9FLENBQUM7QUFDOUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlc0tleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEluamVjdE9wdGlvbnMgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5cbihNZXRhZGF0YSBhcyBhbnkpLmluamVjdGFibGVzID0gZnVuY3Rpb24gPFxuICBUIGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0b3IsXG4+KFxuICBjYXRlZ29yeT86IFRcbik6IChUIGV4dGVuZHMgdW5kZWZpbmVkID8gQ29uc3RydWN0b3JbXSA6IENvbnN0cnVjdG9yKSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1ldGEgPSBNZXRhZGF0YVtcImlubmVyR2V0XCJdKFN5bWJvbC5mb3IoSW5qZWN0YWJsZXNLZXlzLklOSkVDVEFCTEUpKTtcbiAgaWYgKCFtZXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoIWNhdGVnb3J5KSByZXR1cm4gbWV0YTtcbiAgbGV0IHN5bWJvbDogc3ltYm9sO1xuICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSBcInN5bWJvbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSA9PT0gXCJzdHJpbmdcIikgc3ltYm9sID0gU3ltYm9sLmZvcihjYXRlZ29yeSk7XG4gICAgZWxzZSBzeW1ib2wgPSBTeW1ib2wuZm9yKE1ldGFkYXRhLmNvbnN0cihjYXRlZ29yeSkgfHwgY2F0ZWdvcnkpO1xuICB9IGVsc2Uge1xuICAgIHN5bWJvbCA9IGNhdGVnb3J5O1xuICB9XG4gIHJldHVybiBtZXRhW3N5bWJvbF07XG59O1xuXG4oTWV0YWRhdGEgYXMgYW55KS5pbmplY3RlZCA9IGZ1bmN0aW9uIDxULCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIG1vZGVsOiBDb25zdHJ1Y3RvcjxUPixcbiAgcHJvcD86IEtcbik6IChLIGV4dGVuZHMga2V5b2YgVCA/IEluamVjdE9wdGlvbnMgOiBSZWNvcmQ8SywgSW5qZWN0T3B0aW9ucz4pIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWV0YSA9IE1ldGFkYXRhLmdldChcbiAgICBtb2RlbCxcbiAgICBgJHtJbmplY3RhYmxlc0tleXMuSU5KRUNUfSR7cHJvcCA/IGAke01ldGFkYXRhLnNwbGl0dGVyfSR7cHJvcC50b1N0cmluZygpfWAgOiBcIlwifWBcbiAgKTtcbiAgcmV0dXJuIG1ldGEgYXMgSyBleHRlbmRzIGtleW9mIFQgPyBJbmplY3RPcHRpb25zIDogUmVjb3JkPEssIEluamVjdE9wdGlvbnM+O1xufTtcbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/injectable-decorators",
3
- "version": "1.6.8",
3
+ "version": "1.6.10",
4
4
  "description": "injectable decorators extension for decorator validation",
5
5
  "type": "module",
6
6
  "exports": {
@@ -26,14 +26,21 @@
26
26
  "coverage": "rimraf ./workdocs/reports/data/*.json && npm run test:all -- --coverage --config=./workdocs/reports/jest.coverage.config.ts",
27
27
  "lint": "eslint .",
28
28
  "lint-fix": "eslint --fix .",
29
- "prepare-pr": "npm run lint-fix && npm run build:prod && npm run coverage && npm run docs",
29
+ "prepare-pr": "npm run repo:pr && npm run lint-fix && npm run build:prod && npm run coverage && npm run docs",
30
30
  "prepare-release": "npm run lint-fix && npm run build:prod && npm run coverage && npm run docs",
31
31
  "release": "./bin/tag-release.sh",
32
32
  "clean-publish": "npx clean-publish",
33
33
  "drawings": "for FILE in workdocs/drawings/*.drawio; do echo \"converting $FILE to image...\" && docker run --rm -v $(pwd):/data rlespinasse/drawio-export --format png $FILE; done && cp -rf workdocs/drawings/export/* workdocs/resources/",
34
34
  "uml": "cd workdocs/uml && for FILE in ./*.puml; do docker run --rm -v $(pwd):/work -w /work miy4/plantuml -DPLANTUML_LIMIT_SIZE=8192 -tpng $FILE; done && cd ../.. && cp -fr workdocs/uml/*.png workdocs/resources/",
35
35
  "docs": "npx rimraf ./docs && mkdir docs && npx build-scripts --docs",
36
- "publish-docs": "docker run -it --rm --user $(id -u):$(id -g) -v \"$(pwd)/workdocs/confluence:/content\" -e ATLASSIAN_API_TOKEN=$(cat .confluence-token) ghcr.io/markdown-confluence/publish:latest"
36
+ "publish-docs": "docker run -it --rm --user $(id -u):$(id -g) -v \"$(pwd)/workdocs/confluence:/content\" -e ATLASSIAN_API_TOKEN=$(cat .confluence-token) ghcr.io/markdown-confluence/publish:latest",
37
+ "repo:init": "codex exec \"$(cat ./.codex/prompts/repo-setup.md)\nbase_path is `./`, initialize the repository\" -s workspace-write",
38
+ "repo:setup": "codex exec \"$(cat ./.codex/prompts/repo-setup.md)\nbase_path is ./\" -s workspace-write",
39
+ "repo:doc": "codex exec \"$(cat ./.codex/prompts/doc.md) $(cat ./.codex/prompts/bulk-docs.md)\nbase_path is ./\" -s workspace-write",
40
+ "repo:tests": "codex exec \"$(cat ./.codex/prompts/bulk-tests.md)\nbase_path is ./ and coverage is 95%\" -s workspace-write",
41
+ "repo:readme": "codex exec \"$(cat ./.codex/prompts/update-readme.md)\nbase_path is ./\" -s workspace-write",
42
+ "repo:pr": "npm run repo:doc && npm run repo:tests && npm run repo:readme",
43
+ "sync-codex": "./bin/sync-codex.sh"
37
44
  },
38
45
  "files": [
39
46
  "dist/",
@@ -100,6 +107,7 @@
100
107
  "typescript-eslint": "^8.31.0"
101
108
  },
102
109
  "peerDependencies": {
110
+ "@decaf-ts/decoration": "latest",
103
111
  "reflect-metadata": "^0.2.1"
104
112
  }
105
113
  }