velocious 1.0.406 → 1.0.408

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.
Files changed (39) hide show
  1. package/README.md +1 -0
  2. package/build/src/database/query/index.d.ts +16 -2
  3. package/build/src/database/query/index.d.ts.map +1 -1
  4. package/build/src/database/query/index.js +9 -3
  5. package/build/src/database/query/model-class-query.d.ts +18 -0
  6. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  7. package/build/src/database/query/model-class-query.js +58 -2
  8. package/build/src/database/query/preloader/belongs-to.d.ts +22 -1
  9. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  10. package/build/src/database/query/preloader/belongs-to.js +117 -63
  11. package/build/src/database/query/preloader/has-many.d.ts +17 -1
  12. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  13. package/build/src/database/query/preloader/has-many.js +59 -27
  14. package/build/src/database/query/preloader/has-one.d.ts +5 -1
  15. package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
  16. package/build/src/database/query/preloader/has-one.js +23 -7
  17. package/build/src/database/query/preloader/selection.d.ts +87 -0
  18. package/build/src/database/query/preloader/selection.d.ts.map +1 -0
  19. package/build/src/database/query/preloader/selection.js +132 -0
  20. package/build/src/database/query/preloader.d.ts +22 -1
  21. package/build/src/database/query/preloader.d.ts.map +1 -1
  22. package/build/src/database/query/preloader.js +44 -7
  23. package/build/src/database/record/index.d.ts +22 -0
  24. package/build/src/database/record/index.d.ts.map +1 -1
  25. package/build/src/database/record/index.js +26 -1
  26. package/build/src/frontend-model-controller.d.ts +18 -0
  27. package/build/src/frontend-model-controller.d.ts.map +1 -1
  28. package/build/src/frontend-model-controller.js +38 -4
  29. package/build/src/frontend-models/base.d.ts +29 -0
  30. package/build/src/frontend-models/base.d.ts.map +1 -1
  31. package/build/src/frontend-models/base.js +37 -1
  32. package/build/src/frontend-models/preloader.d.ts +66 -0
  33. package/build/src/frontend-models/preloader.d.ts.map +1 -0
  34. package/build/src/frontend-models/preloader.js +139 -0
  35. package/build/src/frontend-models/query.d.ts +24 -1
  36. package/build/src/frontend-models/query.d.ts.map +1 -1
  37. package/build/src/frontend-models/query.js +31 -1
  38. package/build/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +1 -1
package/README.md CHANGED
@@ -409,6 +409,7 @@ This creates `src/frontend-models/user.js` (and one file per configured resource
409
409
  - State helpers like `user.isNewRecord()`, `user.isPersisted()`, `user.isChanged()`, and `user.changes()`
410
410
  - Attribute methods like `user.name()` and `user.setName(...)`
411
411
  - Relationship helpers (when `relationships` are configured), for example `task.project()`, `await task.projectOrLoad()`, `await project.tasks().toArray()`, `await project.tasks().load()`, and `project.tasks().build({...})`
412
+ - Preload relationships onto records you already have with `await record.preload(Model.preload({...}).select({...}))` (or `Preloader.preload(records, ...)` for arrays), including `selectsExtra(...)` and a `{force: true}` reload option — see [docs/frontend-models.md](docs/frontend-models.md#preloading-onto-loaded-records)
412
413
  - Attachment helpers (when `attachments` are configured), for example `await task.descriptionFile().attach(file)`, `await task.descriptionFile().download()`, and `await task.update({descriptionFile: file})`
413
414
 
414
415
  React components can subscribe to lifecycle broadcasts without manual cleanup code:
@@ -11,6 +11,8 @@
11
11
  * @property {number | null} [page] - Page number for pagination.
12
12
  * @property {number} [perPage] - Records per page for pagination.
13
13
  * @property {NestedPreloadRecord} [preload] - Preload graph for related records.
14
+ * @property {Record<string, string[]>} [preloadSelects] - Attribute names to load for preloaded relationships, keyed by target model name.
15
+ * @property {Record<string, string[]>} [preloadSelectsExtra] - Extra selects to load in addition to the defaults for preloaded relationships, keyed by target model name.
14
16
  * @property {Array<import("./select-base.js").default>} [selects] - SELECT clauses for the query.
15
17
  * @property {boolean} [distinct] - Whether the query should use DISTINCT.
16
18
  * @property {Array<import("./where-base.js").default>} [wheres] - WHERE conditions for the query.
@@ -19,7 +21,7 @@ export default class VelociousDatabaseQuery {
19
21
  /**
20
22
  * @param {QueryArgsType} args - Options object.
21
23
  */
22
- constructor({ driver, froms, groups, joins, handler, limit, offset, orders, page, perPage, preload, distinct, selects, wheres }: QueryArgsType);
24
+ constructor({ driver, froms, groups, joins, handler, limit, offset, orders, page, perPage, preload, preloadSelects, preloadSelectsExtra, distinct, selects, wheres }: QueryArgsType);
23
25
  /** @type {() => import("../drivers/base.js").default} */
24
26
  _driverFn: () => import("../drivers/base.js").default;
25
27
  handler: import("../handler.js").default;
@@ -33,6 +35,10 @@ export default class VelociousDatabaseQuery {
33
35
  _page: number | null;
34
36
  _perPage: number | undefined;
35
37
  _preload: NestedPreloadRecord;
38
+ /** @type {Record<string, string[]>} */
39
+ _preloadSelects: Record<string, string[]>;
40
+ /** @type {Record<string, string[]>} */
41
+ _preloadSelectsExtra: Record<string, string[]>;
36
42
  _distinct: boolean;
37
43
  _selects: SelectBase[];
38
44
  /** @type {import("./where-base.js").default[]} */
@@ -164,7 +170,7 @@ export type NestedPreloadRecord = {
164
170
  [key: string]: boolean | string | string[] | NestedPreloadRecord;
165
171
  };
166
172
  export type OrderArgumentType = string | number | import("./order-base.js").default | import("./order-column.js").OrderColumnInput;
167
- export type SelectArgumentType = string | string[] | import("./select-base.js").default | import("./select-base.js").default[];
173
+ export type SelectArgumentType = string | string[] | import("./select-base.js").default | import("./select-base.js").default[] | Record<string, string | string[]>;
168
174
  export type WhereArgumentType = object | string;
169
175
  export type QueryArgsType = {
170
176
  /**
@@ -211,6 +217,14 @@ export type QueryArgsType = {
211
217
  * - Preload graph for related records.
212
218
  */
213
219
  preload?: NestedPreloadRecord | undefined;
220
+ /**
221
+ * - Attribute names to load for preloaded relationships, keyed by target model name.
222
+ */
223
+ preloadSelects?: Record<string, string[]> | undefined;
224
+ /**
225
+ * - Extra selects to load in addition to the defaults for preloaded relationships, keyed by target model name.
226
+ */
227
+ preloadSelectsExtra?: Record<string, string[]> | undefined;
214
228
  /**
215
229
  * - SELECT clauses for the query.
216
230
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/query/index.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/query/index.js"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ import WherePlain from "./where-plain.js";
15
15
  /**
16
16
  * @typedef {{[key: string]: boolean | string | string[] | NestedPreloadRecord }} NestedPreloadRecord
17
17
  * @typedef {string | number | import("./order-base.js").default | import("./order-column.js").OrderColumnInput} OrderArgumentType
18
- * @typedef {string | string[] | import("./select-base.js").default | import("./select-base.js").default[]} SelectArgumentType
18
+ * @typedef {string | string[] | import("./select-base.js").default | import("./select-base.js").default[] | Record<string, string | string[]>} SelectArgumentType
19
19
  * @typedef {object | string} WhereArgumentType
20
20
  */
21
21
  /**
@@ -97,6 +97,8 @@ function mergeJoinValue(existing, incoming) {
97
97
  * @property {number | null} [page] - Page number for pagination.
98
98
  * @property {number} [perPage] - Records per page for pagination.
99
99
  * @property {NestedPreloadRecord} [preload] - Preload graph for related records.
100
+ * @property {Record<string, string[]>} [preloadSelects] - Attribute names to load for preloaded relationships, keyed by target model name.
101
+ * @property {Record<string, string[]>} [preloadSelectsExtra] - Extra selects to load in addition to the defaults for preloaded relationships, keyed by target model name.
100
102
  * @property {Array<import("./select-base.js").default>} [selects] - SELECT clauses for the query.
101
103
  * @property {boolean} [distinct] - Whether the query should use DISTINCT.
102
104
  * @property {Array<import("./where-base.js").default>} [wheres] - WHERE conditions for the query.
@@ -105,7 +107,7 @@ export default class VelociousDatabaseQuery {
105
107
  /**
106
108
  * @param {QueryArgsType} args - Options object.
107
109
  */
108
- constructor({ driver, froms = [], groups = [], joins = [], handler, limit = null, offset = null, orders = [], page = null, perPage, preload = {}, distinct = false, selects = [], wheres = [] }) {
110
+ constructor({ driver, froms = [], groups = [], joins = [], handler, limit = null, offset = null, orders = [], page = null, perPage, preload = {}, preloadSelects = {}, preloadSelectsExtra = {}, distinct = false, selects = [], wheres = [] }) {
109
111
  if (!driver)
110
112
  throw new Error("No driver given to query");
111
113
  if (!handler)
@@ -123,6 +125,10 @@ export default class VelociousDatabaseQuery {
123
125
  this._page = page;
124
126
  this._perPage = perPage;
125
127
  this._preload = preload;
128
+ /** @type {Record<string, string[]>} */
129
+ this._preloadSelects = preloadSelects;
130
+ /** @type {Record<string, string[]>} */
131
+ this._preloadSelectsExtra = preloadSelectsExtra;
126
132
  this._distinct = distinct;
127
133
  this._selects = selects;
128
134
  /** @type {import("./where-base.js").default[]} */
@@ -402,4 +408,4 @@ export default class VelociousDatabaseQuery {
402
408
  return this._driverFn();
403
409
  }
404
410
  }
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUM3QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV6Qzs7Ozs7R0FLRztBQUVIOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBSTtJQUMvQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRXBCLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxFQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLEVBQUUs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Q0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgRnJvbVBsYWluIGZyb20gXCIuL2Zyb20tcGxhaW4uanNcIlxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCBKb2luT2JqZWN0IGZyb20gXCIuL2pvaW4tb2JqZWN0LmpzXCJcbmltcG9ydCBKb2luUGxhaW4gZnJvbSBcIi4vam9pbi1wbGFpbi5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IE9yZGVyQmFzZSBmcm9tIFwiLi9vcmRlci1iYXNlLmpzXCJcbmltcG9ydCBPcmRlckNvbHVtbiBmcm9tIFwiLi9vcmRlci1jb2x1bW4uanNcIlxuaW1wb3J0IE9yZGVyUGxhaW4gZnJvbSBcIi4vb3JkZXItcGxhaW4uanNcIlxuaW1wb3J0IFNlbGVjdEJhc2UgZnJvbSBcIi4vc2VsZWN0LWJhc2UuanNcIlxuaW1wb3J0IFNlbGVjdFBsYWluIGZyb20gXCIuL3NlbGVjdC1wbGFpbi5qc1wiXG5pbXBvcnQgV2hlcmVIYXNoIGZyb20gXCIuL3doZXJlLWhhc2guanNcIlxuaW1wb3J0IFdoZXJlTm90IGZyb20gXCIuL3doZXJlLW5vdC5qc1wiXG5pbXBvcnQgV2hlcmVQbGFpbiBmcm9tIFwiLi93aGVyZS1wbGFpbi5qc1wiXG5cbi8qKlxuICogQHR5cGVkZWYge3tba2V5OiBzdHJpbmddOiBib29sZWFuIHwgc3RyaW5nIHwgc3RyaW5nW10gfCBOZXN0ZWRQcmVsb2FkUmVjb3JkIH19IE5lc3RlZFByZWxvYWRSZWNvcmRcbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBudW1iZXIgfCBpbXBvcnQoXCIuL29yZGVyLWJhc2UuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vb3JkZXItY29sdW1uLmpzXCIpLk9yZGVyQ29sdW1uSW5wdXR9IE9yZGVyQXJndW1lbnRUeXBlXG4gKiBAdHlwZWRlZiB7c3RyaW5nIHwgc3RyaW5nW10gfCBpbXBvcnQoXCIuL3NlbGVjdC1iYXNlLmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL3NlbGVjdC1iYXNlLmpzXCIpLmRlZmF1bHRbXX0gU2VsZWN0QXJndW1lbnRUeXBlXG4gKiBAdHlwZWRlZiB7b2JqZWN0IHwgc3RyaW5nfSBXaGVyZUFyZ3VtZW50VHlwZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3RJbnB1dCB8IHN0cmluZyB8IHN0cmluZ1tdfSBqb2luIC0gSm9pbiBkYXRhIGluIHNob3J0aGFuZCBvciBuZXN0ZWQgZm9ybS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3R9IC0gTm9ybWFsaXplZCBqb2luIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSm9pbk9iamVjdChqb2luKSB7XG4gIGlmICgham9pbikgcmV0dXJuIHt9XG5cbiAgaWYgKHR5cGVvZiBqb2luID09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1tqb2luXTogdHJ1ZX1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGpvaW4pKSB7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3R9ICovXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygam9pbikge1xuICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzdWx0W2VudHJ5XVxuICAgICAgICByZXN1bHRbZW50cnldID0gbWVyZ2VKb2luVmFsdWUoZXhpc3RpbmcsIHRydWUpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSm9pbk9iamVjdChlbnRyeSlcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhub3JtYWxpemVkKSkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzdWx0W2tleV1cbiAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlSm9pblZhbHVlKGV4aXN0aW5nLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgam9pbiBlbnRyeSB0eXBlOiAke3R5cGVvZiBlbnRyeX1gKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChqb2luKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBqb2luIHR5cGU6ICR7dHlwZW9mIGpvaW59YClcbiAgfVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAqL1xuICBjb25zdCByZXN1bHQgPSB7fVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvaW4pKSB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRba2V5XVxuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgdmFsdWUpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRba2V5XVxuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgbm9ybWFsaXplSm9pbk9iamVjdCh2YWx1ZSkpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBqb2luIHZhbHVlIGZvciAke2tleX06ICR7dHlwZW9mIHZhbHVlfWApXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXSB8IHVuZGVmaW5lZH0gZXhpc3RpbmcgLSBFeGlzdGluZyBub3JtYWxpemVkIGpvaW4gdmFsdWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vam9pbi1vYmplY3QuanNcIikuSm9pbk9iamVjdFtzdHJpbmddfSBpbmNvbWluZyAtIEluY29taW5nIG5vcm1hbGl6ZWQgam9pbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXX0gLSBNZXJnZWQgam9pbiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VKb2luVmFsdWUoZXhpc3RpbmcsIGluY29taW5nKSB7XG4gIGlmICghZXhpc3RpbmcpIHJldHVybiBpbmNvbWluZ1xuICBpZiAoZXhpc3RpbmcgPT09IHRydWUgfHwgaW5jb21pbmcgPT09IHRydWUpIHJldHVybiB0cnVlXG5cbiAgaWYgKHR5cGVvZiBleGlzdGluZyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbmNvbWluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHsuLi5leGlzdGluZywgLi4uaW5jb21pbmd9XG4gIH1cblxuICByZXR1cm4gaW5jb21pbmdcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBRdWVyeUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgKCgpID0+IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0KX0gZHJpdmVyIC0gRHJpdmVyIGluc3RhbmNlIG9yIGZhY3RvcnkgZm9yIHF1ZXJ5IGV4ZWN1dGlvbi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdD59IFtmcm9tc10gLSBGUk9NIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtncm91cHNdIC0gR1JPVVAgQlkgY29sdW1ucy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9qb2luLWJhc2UuanNcIikuZGVmYXVsdD59IFtqb2luc10gLSBKT0lOIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vaGFuZGxlci5qc1wiKS5kZWZhdWx0fSBoYW5kbGVyIC0gSGFuZGxlciB1c2VkIGZvciBleGVjdXRpbmcgYW5kIHRyYW5zZm9ybWluZyByZXN1bHRzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbbGltaXRdIC0gTElNSVQgY2xhdXNlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbb2Zmc2V0XSAtIE9GRlNFVCBjbGF1c2UgdmFsdWUuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vb3JkZXItYmFzZS5qc1wiKS5kZWZhdWx0Pn0gW29yZGVyc10gLSBPUkRFUiBCWSBjbGF1c2VzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcGFnZV0gLSBQYWdlIG51bWJlciBmb3IgcGFnaW5hdGlvbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGVyUGFnZV0gLSBSZWNvcmRzIHBlciBwYWdlIGZvciBwYWdpbmF0aW9uLlxuICogQHByb3BlcnR5IHtOZXN0ZWRQcmVsb2FkUmVjb3JkfSBbcHJlbG9hZF0gLSBQcmVsb2FkIGdyYXBoIGZvciByZWxhdGVkIHJlY29yZHMuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vc2VsZWN0LWJhc2UuanNcIikuZGVmYXVsdD59IFtzZWxlY3RzXSAtIFNFTEVDVCBjbGF1c2VzIGZvciB0aGUgcXVlcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkaXN0aW5jdF0gLSBXaGV0aGVyIHRoZSBxdWVyeSBzaG91bGQgdXNlIERJU1RJTkNULlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL3doZXJlLWJhc2UuanNcIikuZGVmYXVsdD59IFt3aGVyZXNdIC0gV0hFUkUgY29uZGl0aW9ucyBmb3IgdGhlIHF1ZXJ5LlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnkge1xuICAvKipcbiAgICogQHBhcmFtIHtRdWVyeUFyZ3NUeXBlfSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZHJpdmVyLFxuICAgIGZyb21zID0gW10sXG4gICAgZ3JvdXBzID0gW10sXG4gICAgam9pbnMgPSBbXSxcbiAgICBoYW5kbGVyLFxuICAgIGxpbWl0ID0gbnVsbCxcbiAgICBvZmZzZXQgPSBudWxsLFxuICAgIG9yZGVycyA9IFtdLFxuICAgIHBhZ2UgPSBudWxsLFxuICAgIHBlclBhZ2UsXG4gICAgcHJlbG9hZCA9IHt9LFxuICAgIGRpc3RpbmN0ID0gZmFsc2UsXG4gICAgc2VsZWN0cyA9IFtdLFxuICAgIHdoZXJlcyA9IFtdXG4gIH0pIHtcbiAgICBpZiAoIWRyaXZlcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gZHJpdmVyIGdpdmVuIHRvIHF1ZXJ5XCIpXG4gICAgaWYgKCFoYW5kbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBoYW5kbGVyIGdpdmVuIHRvIHF1ZXJ5XCIpXG5cbiAgICAvKiogQHR5cGUgeygpID0+IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAqL1xuICAgIHRoaXMuX2RyaXZlckZuID0gdHlwZW9mIGRyaXZlciA9PT0gXCJmdW5jdGlvblwiID8gZHJpdmVyIDogKCkgPT4gZHJpdmVyXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuX2Zyb21zID0gZnJvbXNcbiAgICB0aGlzLl9ncm91cHMgPSBncm91cHNcbiAgICB0aGlzLl9qb2lucyA9IGpvaW5zXG4gICAgdGhpcy5fbGltaXQgPSBsaW1pdFxuICAgIHRoaXMuX29mZnNldCA9IG9mZnNldFxuICAgIHRoaXMuX29yZGVycyA9IG9yZGVyc1xuICAgIHRoaXMuX3BhZ2UgPSBwYWdlXG4gICAgdGhpcy5fcGVyUGFnZSA9IHBlclBhZ2VcbiAgICB0aGlzLl9wcmVsb2FkID0gcHJlbG9hZFxuICAgIHRoaXMuX2Rpc3RpbmN0ID0gZGlzdGluY3RcbiAgICB0aGlzLl9zZWxlY3RzID0gc2VsZWN0c1xuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3doZXJlLWJhc2UuanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIHRoaXMuX3doZXJlcyA9IHdoZXJlc1xuXG4gICAgY29uc3QgYm91bmRXaGVyZSA9IC8qKiBAdHlwZSB7YW55fSAqLyAodGhpcy53aGVyZS5iaW5kKHRoaXMpKVxuICAgIGJvdW5kV2hlcmUubm90ID0gdGhpcy53aGVyZU5vdC5iaW5kKHRoaXMpXG4gICAgdGhpcy53aGVyZSA9IGJvdW5kV2hlcmVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgY2xvbmUuICAqL1xuICBjbG9uZSgpIHtcbiAgICBjb25zdCBRdWVyeUNsYXNzID0gLyoqIEB0eXBlIHtuZXcgKGFyZ3M6IFF1ZXJ5QXJnc1R5cGUpID0+IHRoaXN9ICovICh0aGlzLmNvbnN0cnVjdG9yKVxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IFF1ZXJ5Q2xhc3Moe1xuICAgICAgZHJpdmVyOiB0aGlzLl9kcml2ZXJGbixcbiAgICAgIGZyb21zOiBbLi4udGhpcy5fZnJvbXNdLFxuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLmNsb25lKCksXG4gICAgICBncm91cHM6IFsuLi50aGlzLl9ncm91cHNdLFxuICAgICAgam9pbnM6IFsuLi50aGlzLl9qb2luc10sXG4gICAgICBsaW1pdDogdGhpcy5fbGltaXQsXG4gICAgICBvZmZzZXQ6IHRoaXMuX29mZnNldCxcbiAgICAgIG9yZGVyczogWy4uLnRoaXMuX29yZGVyc10sXG4gICAgICBwYWdlOiB0aGlzLl9wYWdlLFxuICAgICAgcGVyUGFnZTogdGhpcy5fcGVyUGFnZSxcbiAgICAgIHByZWxvYWQ6IHsuLi50aGlzLl9wcmVsb2FkfSxcbiAgICAgIGRpc3RpbmN0OiB0aGlzLl9kaXN0aW5jdCxcbiAgICAgIHNlbGVjdHM6IFsuLi50aGlzLl9zZWxlY3RzXSxcbiAgICAgIHdoZXJlczogWy4uLnRoaXMuX3doZXJlc11cbiAgICB9KVxuXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vZnJvbS1iYXNlLmpzXCIpLmRlZmF1bHRbXX0gLSBUaGUgZnJvbXMuICAqL1xuICBnZXRGcm9tcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZnJvbXNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGhlIGdyb3Vwcy4gICovXG4gIGdldEdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4uL3F1ZXJ5LXBhcnNlci9vcHRpb25zLmpzXCIpLmRlZmF1bHR9IC0gVGhlIG9wdGlvbnMgb3B0aW9ucy4gICovXG4gIGdldE9wdGlvbnMoKSB7IHJldHVybiB0aGlzLmRyaXZlci5vcHRpb25zKCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8aW1wb3J0KFwiLi9zZWxlY3QtYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBUaGUgc2VsZWN0cy4gICovXG4gIGdldFNlbGVjdHMoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdH0gZnJvbSAtIEZyb20uXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBmcm9tLlxuICAgKi9cbiAgZnJvbShmcm9tKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09IFwic3RyaW5nXCIpIGZyb20gPSBuZXcgRnJvbVBsYWluKGZyb20pXG5cbiAgICB0aGlzLl9mcm9tcy5wdXNoKGZyb20pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgLSBHcm91cC5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGdyb3VwLlxuICAgKi9cbiAgZ3JvdXAoZ3JvdXApIHtcbiAgICB0aGlzLl9ncm91cHMucHVzaChncm91cClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3RJbnB1dH0gam9pbiAtIEpvaW4gY2xhdXNlIG9yIGpvaW4gZGVzY3JpcHRvci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGpvaW5zLlxuICAgKi9cbiAgam9pbnMoam9pbikge1xuICAgIGlmICh0eXBlb2Ygam9pbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luUGxhaW4oam9pbikpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpvaW4pKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luT2JqZWN0KG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikpKVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChqb2luKSkge1xuICAgICAgdGhpcy5fam9pbnMucHVzaChuZXcgSm9pbk9iamVjdChub3JtYWxpemVKb2luT2JqZWN0KGpvaW4pKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2Ygam9pbjogJHt0eXBlb2Ygam9pbn1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgbGltaXQuXG4gICAqL1xuICBsaW1pdCh2YWx1ZSkge1xuICAgIHRoaXMuX2xpbWl0ID0gdmFsdWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIG9mZnNldC5cbiAgICovXG4gIG9mZnNldCh2YWx1ZSkge1xuICAgIHRoaXMuX29mZnNldCA9IHZhbHVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09yZGVyQXJndW1lbnRUeXBlfSBvcmRlciAtIE9yZGVyLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgb3JkZXIuXG4gICAqL1xuICBvcmRlcihvcmRlcikge1xuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fb3JkZXJzLnB1c2gobmV3IE9yZGVyUGxhaW4odGhpcywgb3JkZXIpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlclBsYWluKHRoaXMsIGAke29yZGVyfWApKVxuICAgIH0gZWxzZSBpZiAob3JkZXIgaW5zdGFuY2VvZiBPcmRlckJhc2UpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG9yZGVyKVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChvcmRlcikpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlckNvbHVtbih0aGlzLCBvcmRlcikpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcmRlciB0eXBlOiAke3R5cGVvZiBvcmRlcn1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VOdW1iZXIgLSBQYWdlIG51bWJlci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBhZ2UuXG4gICAqL1xuICBwYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gcGFnZU51bWJlclxuICAgIHRoaXMuX2FwcGx5UGFnaW5hdGlvbigpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVyUGFnZSAtIFBhZ2Ugc2l6ZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBlciBwYWdlLlxuICAgKi9cbiAgcGVyUGFnZShwZXJQYWdlKSB7XG4gICAgdGhpcy5fcGVyUGFnZSA9IHBlclBhZ2VcbiAgICB0aGlzLl9hcHBseVBhZ2luYXRpb24oKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmUtZGVyaXZlIExJTUlUIGFuZCBPRkZTRVQgZnJvbSB3aGljaGV2ZXIgb2YgYF9wYWdlYCAvIGBfcGVyUGFnZWBcbiAgICogYXJlIGN1cnJlbnRseSBzZXQuIENhbGxlZCBmcm9tIGJvdGggYHBhZ2UoKWAgYW5kIGBwZXJQYWdlKClgIHNvIHRoZVxuICAgKiBjaGFpbmluZyBvcmRlciAoYHBhZ2UobikucGVyUGFnZShwcClgIHZzIGBwZXJQYWdlKHBwKS5wYWdlKG4pYCkgbm9cbiAgICogbG9uZ2VyIGRldGVybWluZXMgd2hpY2ggcGVyUGFnZSB2YWx1ZSB3aW5zIOKAlCB0aGUgbGFzdCB2YWx1ZSBvZlxuICAgKiBlYWNoIHNldHRlciBhbHdheXMgdGFrZXMgZWZmZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9hcHBseVBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuX3BhZ2UgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCBwZXJQYWdlID0gdGhpcy5fcGVyUGFnZSB8fCAzMFxuICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLl9wYWdlIC0gMSkgKiBwZXJQYWdlXG5cbiAgICB0aGlzLmxpbWl0KHBlclBhZ2UpXG4gICAgdGhpcy5vZmZzZXQob2Zmc2V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T3JkZXJBcmd1bWVudFR5cGV9IG9yZGVyIC0gT3JkZXIuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSByZW9yZGVyLlxuICAgKi9cbiAgcmVvcmRlcihvcmRlcikge1xuICAgIHRoaXMuX29yZGVycyA9IFtdXG4gICAgdGhpcy5vcmRlcihvcmRlcilcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSByZXZlcnNlIG9yZGVyLiAgKi9cbiAgcmV2ZXJzZU9yZGVyKCkge1xuICAgIGZvciAoY29uc3Qgb3JkZXIgb2YgdGhpcy5fb3JkZXJzKSB7XG4gICAgICBvcmRlci5zZXRSZXZlcnNlT3JkZXIodHJ1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlXSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGRpc3RpbmN0LlxuICAgKi9cbiAgZGlzdGluY3QodmFsdWUgPSB0cnVlKSB7XG4gICAgdGhpcy5fZGlzdGluY3QgPSB2YWx1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgc2V0IG9mIGBTRUxFQ1RgIGNsYXVzZXMgd2l0aCB0aGUgZ2l2ZW4gb25lcy5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBzZWxlY3QoLi4uKWAgYWZ0ZXIgZmlyc3Qgd2lwaW5nIGFueSBwcmV2aW91c2x5XG4gICAqIGFjY3VtdWxhdGVkIHNlbGVjdHMg4oCUIG1pcnJvcnMgQWN0aXZlIFJlY29yZCdzIGByZXNlbGVjdGAuIFBhc3Mgbm9cbiAgICogYXJndW1lbnQgKG9yIGFuIGVtcHR5IGFycmF5KSB0byBkcm9wIHRoZSBwcm9qZWN0aW9uIGVudGlyZWx5IHNvIHRoZVxuICAgKiBkcml2ZXIgZmFsbHMgYmFjayB0byBpdHMgZGVmYXVsdCBgU0VMRUNUICpgLlxuICAgKiBAcGFyYW0ge1NlbGVjdEFyZ3VtZW50VHlwZX0gW3NlbGVjdF0gLSBTZWxlY3QgdG8gcmVwbGFjZSBleGlzdGluZyBzZWxlY3RzIHdpdGguXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBxdWVyeSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICByZXNlbGVjdChzZWxlY3QpIHtcbiAgICB0aGlzLl9zZWxlY3RzID0gW11cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ID09IFwidW5kZWZpbmVkXCIpIHJldHVybiB0aGlzXG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc2VsZWN0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U2VsZWN0QXJndW1lbnRUeXBlfSBzZWxlY3QgLSBTZWxlY3QuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3Qoc2VsZWN0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0KSkge1xuICAgICAgZm9yIChjb25zdCBzZWxlY3RJbkFycmF5IG9mIHNlbGVjdCkge1xuICAgICAgICB0aGlzLnNlbGVjdChzZWxlY3RJbkFycmF5KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3NlbGVjdHMucHVzaChuZXcgU2VsZWN0UGxhaW4oc2VsZWN0KSlcbiAgICB9IGVsc2UgaWYgKHNlbGVjdCBpbnN0YW5jZW9mIFNlbGVjdEJhc2UpIHtcbiAgICAgIHRoaXMuX3NlbGVjdHMucHVzaChzZWxlY3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZWxlY3QgdHlwZTogJHt0eXBlb2Ygc2VsZWN0fWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5sb2dOYW1lXSAtIFF1ZXJ5IGxvZyBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxvYmplY3Q+Pn0gQXJyYXkgb2YgcmVzdWx0cyBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgYXN5bmMgX2V4ZWN1dGVRdWVyeSh7bG9nTmFtZSA9IHRoaXMucXVlcnlMb2dOYW1lKFwiTG9hZFwiKX0gPSB7fSkge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMudG9TcWwoKVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmRyaXZlci5xdWVyeShzcWwsIHtsb2dOYW1lfSlcblxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8QXJyYXk8b2JqZWN0Pj59IEFycmF5IG9mIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2UgKi9cbiAgYXN5bmMgcmVzdWx0cygpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZVF1ZXJ5KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uIC0gUXVlcnkgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFF1ZXJ5IGxvZyBuYW1lLlxuICAgKi9cbiAgcXVlcnlMb2dOYW1lKG9wZXJhdGlvbikge1xuICAgIHZvaWQgb3BlcmF0aW9uXG4gICAgcmV0dXJuIFwiU1FMXCJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgU1FMIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBxdWVyeVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTUUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIHF1ZXJ5XG4gICAqL1xuICB0b1NxbCgpIHsgcmV0dXJuIHRoaXMuZHJpdmVyLnF1ZXJ5VG9TcWwodGhpcykgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1doZXJlQXJndW1lbnRUeXBlfSB3aGVyZSAtIFdoZXJlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBxdWVyeSBpbnN0YW5jZVxuICAgKi9cbiAgd2hlcmUod2hlcmUpIHtcbiAgICBpZiAodHlwZW9mIHdoZXJlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZVBsYWluKHRoaXMsIHdoZXJlKSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aGVyZSA9PSBcIm9iamVjdFwiICYmICh3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwib2JqZWN0XCIgfHwgd2hlcmUuY29uc3RydWN0b3IubmFtZSA9PSBcIk9iamVjdFwiKSkge1xuICAgICAgdGhpcy5fd2hlcmVzLnB1c2gobmV3IFdoZXJlSGFzaCh0aGlzLCAvKiogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtaGFzaC5qc1wiKS5XaGVyZUhhc2h9ICovICh3aGVyZSkpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB3aGVyZTogJHt0eXBlb2Ygd2hlcmV9ICgke3doZXJlLmNvbnN0cnVjdG9yLm5hbWV9KWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1doZXJlQXJndW1lbnRUeXBlfSB3aGVyZSAtIFdoZXJlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBxdWVyeSBpbnN0YW5jZVxuICAgKi9cbiAgd2hlcmVOb3Qod2hlcmUpIHtcbiAgICBpZiAodHlwZW9mIHdoZXJlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZU5vdChuZXcgV2hlcmVQbGFpbih0aGlzLCB3aGVyZSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHdoZXJlID09IFwib2JqZWN0XCIgJiYgKHdoZXJlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJvYmplY3RcIiB8fCB3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiT2JqZWN0XCIpKSB7XG4gICAgICB0aGlzLl93aGVyZXMucHVzaChuZXcgV2hlcmVOb3QobmV3IFdoZXJlSGFzaCh0aGlzLCAvKiogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtaGFzaC5qc1wiKS5XaGVyZUhhc2h9ICovICh3aGVyZSkpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2Ygd2hlcmU6ICR7dHlwZW9mIHdoZXJlfSAoJHt3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lfSlgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGN1cnJlbnQgZHJpdmVyIGxhemlseS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAtIEEgdmFsdWUuXG4gICAqL1xuICBnZXQgZHJpdmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kcml2ZXJGbigpXG4gIH1cbn1cbiJdfQ==
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUM3QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV6Qzs7Ozs7R0FLRztBQUVIOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBSTtJQUMvQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRXBCLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxFQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLEVBQUUs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QUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxLQUFLLEtBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZGLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEZyb21QbGFpbiBmcm9tIFwiLi9mcm9tLXBsYWluLmpzXCJcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSBcImlzLXBsYWluLW9iamVjdFwiXG5pbXBvcnQgSm9pbk9iamVjdCBmcm9tIFwiLi9qb2luLW9iamVjdC5qc1wiXG5pbXBvcnQgSm9pblBsYWluIGZyb20gXCIuL2pvaW4tcGxhaW4uanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBPcmRlckJhc2UgZnJvbSBcIi4vb3JkZXItYmFzZS5qc1wiXG5pbXBvcnQgT3JkZXJDb2x1bW4gZnJvbSBcIi4vb3JkZXItY29sdW1uLmpzXCJcbmltcG9ydCBPcmRlclBsYWluIGZyb20gXCIuL29yZGVyLXBsYWluLmpzXCJcbmltcG9ydCBTZWxlY3RCYXNlIGZyb20gXCIuL3NlbGVjdC1iYXNlLmpzXCJcbmltcG9ydCBTZWxlY3RQbGFpbiBmcm9tIFwiLi9zZWxlY3QtcGxhaW4uanNcIlxuaW1wb3J0IFdoZXJlSGFzaCBmcm9tIFwiLi93aGVyZS1oYXNoLmpzXCJcbmltcG9ydCBXaGVyZU5vdCBmcm9tIFwiLi93aGVyZS1ub3QuanNcIlxuaW1wb3J0IFdoZXJlUGxhaW4gZnJvbSBcIi4vd2hlcmUtcGxhaW4uanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHt7W2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHN0cmluZyB8IHN0cmluZ1tdIHwgTmVzdGVkUHJlbG9hZFJlY29yZCB9fSBOZXN0ZWRQcmVsb2FkUmVjb3JkXG4gKiBAdHlwZWRlZiB7c3RyaW5nIHwgbnVtYmVyIHwgaW1wb3J0KFwiLi9vcmRlci1iYXNlLmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL29yZGVyLWNvbHVtbi5qc1wiKS5PcmRlckNvbHVtbklucHV0fSBPcmRlckFyZ3VtZW50VHlwZVxuICogQHR5cGVkZWYge3N0cmluZyB8IHN0cmluZ1tdIHwgaW1wb3J0KFwiLi9zZWxlY3QtYmFzZS5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9zZWxlY3QtYmFzZS5qc1wiKS5kZWZhdWx0W10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59IFNlbGVjdEFyZ3VtZW50VHlwZVxuICogQHR5cGVkZWYge29iamVjdCB8IHN0cmluZ30gV2hlcmVBcmd1bWVudFR5cGVcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0SW5wdXQgfCBzdHJpbmcgfCBzdHJpbmdbXX0gam9pbiAtIEpvaW4gZGF0YSBpbiBzaG9ydGhhbmQgb3IgbmVzdGVkIGZvcm0uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAtIE5vcm1hbGl6ZWQgam9pbiByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikge1xuICBpZiAoIWpvaW4pIHJldHVybiB7fVxuXG4gIGlmICh0eXBlb2Ygam9pbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtbam9pbl06IHRydWV9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShqb2luKSkge1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGpvaW4pIHtcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdFtlbnRyeV1cbiAgICAgICAgcmVzdWx0W2VudHJ5XSA9IG1lcmdlSm9pblZhbHVlKGV4aXN0aW5nLCB0cnVlKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUpvaW5PYmplY3QoZW50cnkpXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdFtrZXldXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGpvaW4gZW50cnkgdHlwZTogJHt0eXBlb2YgZW50cnl9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3Qoam9pbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgam9pbiB0eXBlOiAke3R5cGVvZiBqb2lufWApXG4gIH1cblxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vam9pbi1vYmplY3QuanNcIikuSm9pbk9iamVjdH0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhqb2luKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzdWx0W2tleV1cbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VKb2luVmFsdWUoZXhpc3RpbmcsIHZhbHVlKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzdWx0W2tleV1cbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VKb2luVmFsdWUoZXhpc3RpbmcsIG5vcm1hbGl6ZUpvaW5PYmplY3QodmFsdWUpKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgam9pbiB2YWx1ZSBmb3IgJHtrZXl9OiAke3R5cGVvZiB2YWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0W3N0cmluZ10gfCB1bmRlZmluZWR9IGV4aXN0aW5nIC0gRXhpc3Rpbmcgbm9ybWFsaXplZCBqb2luIHZhbHVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXX0gaW5jb21pbmcgLSBJbmNvbWluZyBub3JtYWxpemVkIGpvaW4gdmFsdWUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0W3N0cmluZ119IC0gTWVyZ2VkIGpvaW4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSm9pblZhbHVlKGV4aXN0aW5nLCBpbmNvbWluZykge1xuICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gaW5jb21pbmdcbiAgaWYgKGV4aXN0aW5nID09PSB0cnVlIHx8IGluY29taW5nID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuXG4gIGlmICh0eXBlb2YgZXhpc3RpbmcgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgaW5jb21pbmcgPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiB7Li4uZXhpc3RpbmcsIC4uLmluY29taW5nfVxuICB9XG5cbiAgcmV0dXJuIGluY29taW5nXG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUXVlcnlBcmdzVHlwZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCB8ICgoKSA9PiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCl9IGRyaXZlciAtIERyaXZlciBpbnN0YW5jZSBvciBmYWN0b3J5IGZvciBxdWVyeSBleGVjdXRpb24uXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vZnJvbS1iYXNlLmpzXCIpLmRlZmF1bHQ+fSBbZnJvbXNdIC0gRlJPTSBjbGF1c2VzIGZvciB0aGUgcXVlcnkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZ3JvdXBzXSAtIEdST1VQIEJZIGNvbHVtbnMuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vam9pbi1iYXNlLmpzXCIpLmRlZmF1bHQ+fSBbam9pbnNdIC0gSk9JTiBjbGF1c2VzIGZvciB0aGUgcXVlcnkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL2hhbmRsZXIuanNcIikuZGVmYXVsdH0gaGFuZGxlciAtIEhhbmRsZXIgdXNlZCBmb3IgZXhlY3V0aW5nIGFuZCB0cmFuc2Zvcm1pbmcgcmVzdWx0cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW2xpbWl0XSAtIExJTUlUIGNsYXVzZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW29mZnNldF0gLSBPRkZTRVQgY2xhdXNlIHZhbHVlLlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL29yZGVyLWJhc2UuanNcIikuZGVmYXVsdD59IFtvcmRlcnNdIC0gT1JERVIgQlkgY2xhdXNlcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW3BhZ2VdIC0gUGFnZSBudW1iZXIgZm9yIHBhZ2luYXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BlclBhZ2VdIC0gUmVjb3JkcyBwZXIgcGFnZSBmb3IgcGFnaW5hdGlvbi5cbiAqIEBwcm9wZXJ0eSB7TmVzdGVkUHJlbG9hZFJlY29yZH0gW3ByZWxvYWRdIC0gUHJlbG9hZCBncmFwaCBmb3IgcmVsYXRlZCByZWNvcmRzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtwcmVsb2FkU2VsZWN0c10gLSBBdHRyaWJ1dGUgbmFtZXMgdG8gbG9hZCBmb3IgcHJlbG9hZGVkIHJlbGF0aW9uc2hpcHMsIGtleWVkIGJ5IHRhcmdldCBtb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtwcmVsb2FkU2VsZWN0c0V4dHJhXSAtIEV4dHJhIHNlbGVjdHMgdG8gbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdHMgZm9yIHByZWxvYWRlZCByZWxhdGlvbnNoaXBzLCBrZXllZCBieSB0YXJnZXQgbW9kZWwgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9zZWxlY3QtYmFzZS5qc1wiKS5kZWZhdWx0Pn0gW3NlbGVjdHNdIC0gU0VMRUNUIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc3RpbmN0XSAtIFdoZXRoZXIgdGhlIHF1ZXJ5IHNob3VsZCB1c2UgRElTVElOQ1QuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vd2hlcmUtYmFzZS5qc1wiKS5kZWZhdWx0Pn0gW3doZXJlc10gLSBXSEVSRSBjb25kaXRpb25zIGZvciB0aGUgcXVlcnkuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1ZXJ5QXJnc1R5cGV9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkcml2ZXIsXG4gICAgZnJvbXMgPSBbXSxcbiAgICBncm91cHMgPSBbXSxcbiAgICBqb2lucyA9IFtdLFxuICAgIGhhbmRsZXIsXG4gICAgbGltaXQgPSBudWxsLFxuICAgIG9mZnNldCA9IG51bGwsXG4gICAgb3JkZXJzID0gW10sXG4gICAgcGFnZSA9IG51bGwsXG4gICAgcGVyUGFnZSxcbiAgICBwcmVsb2FkID0ge30sXG4gICAgcHJlbG9hZFNlbGVjdHMgPSB7fSxcbiAgICBwcmVsb2FkU2VsZWN0c0V4dHJhID0ge30sXG4gICAgZGlzdGluY3QgPSBmYWxzZSxcbiAgICBzZWxlY3RzID0gW10sXG4gICAgd2hlcmVzID0gW11cbiAgfSkge1xuICAgIGlmICghZHJpdmVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBkcml2ZXIgZ2l2ZW4gdG8gcXVlcnlcIilcbiAgICBpZiAoIWhhbmRsZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGhhbmRsZXIgZ2l2ZW4gdG8gcXVlcnlcIilcblxuICAgIC8qKiBAdHlwZSB7KCkgPT4gaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9ICovXG4gICAgdGhpcy5fZHJpdmVyRm4gPSB0eXBlb2YgZHJpdmVyID09PSBcImZ1bmN0aW9uXCIgPyBkcml2ZXIgOiAoKSA9PiBkcml2ZXJcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5fZnJvbXMgPSBmcm9tc1xuICAgIHRoaXMuX2dyb3VwcyA9IGdyb3Vwc1xuICAgIHRoaXMuX2pvaW5zID0gam9pbnNcbiAgICB0aGlzLl9saW1pdCA9IGxpbWl0XG4gICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0XG4gICAgdGhpcy5fb3JkZXJzID0gb3JkZXJzXG4gICAgdGhpcy5fcGFnZSA9IHBhZ2VcbiAgICB0aGlzLl9wZXJQYWdlID0gcGVyUGFnZVxuICAgIHRoaXMuX3ByZWxvYWQgPSBwcmVsb2FkXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gKi9cbiAgICB0aGlzLl9wcmVsb2FkU2VsZWN0cyA9IHByZWxvYWRTZWxlY3RzXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gKi9cbiAgICB0aGlzLl9wcmVsb2FkU2VsZWN0c0V4dHJhID0gcHJlbG9hZFNlbGVjdHNFeHRyYVxuICAgIHRoaXMuX2Rpc3RpbmN0ID0gZGlzdGluY3RcbiAgICB0aGlzLl9zZWxlY3RzID0gc2VsZWN0c1xuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3doZXJlLWJhc2UuanNcIikuZGVmYXVsdFtdfSAqL1xuICAgIHRoaXMuX3doZXJlcyA9IHdoZXJlc1xuXG4gICAgY29uc3QgYm91bmRXaGVyZSA9IC8qKiBAdHlwZSB7YW55fSAqLyAodGhpcy53aGVyZS5iaW5kKHRoaXMpKVxuICAgIGJvdW5kV2hlcmUubm90ID0gdGhpcy53aGVyZU5vdC5iaW5kKHRoaXMpXG4gICAgdGhpcy53aGVyZSA9IGJvdW5kV2hlcmVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgY2xvbmUuICAqL1xuICBjbG9uZSgpIHtcbiAgICBjb25zdCBRdWVyeUNsYXNzID0gLyoqIEB0eXBlIHtuZXcgKGFyZ3M6IFF1ZXJ5QXJnc1R5cGUpID0+IHRoaXN9ICovICh0aGlzLmNvbnN0cnVjdG9yKVxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IFF1ZXJ5Q2xhc3Moe1xuICAgICAgZHJpdmVyOiB0aGlzLl9kcml2ZXJGbixcbiAgICAgIGZyb21zOiBbLi4udGhpcy5fZnJvbXNdLFxuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLmNsb25lKCksXG4gICAgICBncm91cHM6IFsuLi50aGlzLl9ncm91cHNdLFxuICAgICAgam9pbnM6IFsuLi50aGlzLl9qb2luc10sXG4gICAgICBsaW1pdDogdGhpcy5fbGltaXQsXG4gICAgICBvZmZzZXQ6IHRoaXMuX29mZnNldCxcbiAgICAgIG9yZGVyczogWy4uLnRoaXMuX29yZGVyc10sXG4gICAgICBwYWdlOiB0aGlzLl9wYWdlLFxuICAgICAgcGVyUGFnZTogdGhpcy5fcGVyUGFnZSxcbiAgICAgIHByZWxvYWQ6IHsuLi50aGlzLl9wcmVsb2FkfSxcbiAgICAgIGRpc3RpbmN0OiB0aGlzLl9kaXN0aW5jdCxcbiAgICAgIHNlbGVjdHM6IFsuLi50aGlzLl9zZWxlY3RzXSxcbiAgICAgIHdoZXJlczogWy4uLnRoaXMuX3doZXJlc11cbiAgICB9KVxuXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vZnJvbS1iYXNlLmpzXCIpLmRlZmF1bHRbXX0gLSBUaGUgZnJvbXMuICAqL1xuICBnZXRGcm9tcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZnJvbXNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGhlIGdyb3Vwcy4gICovXG4gIGdldEdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4uL3F1ZXJ5LXBhcnNlci9vcHRpb25zLmpzXCIpLmRlZmF1bHR9IC0gVGhlIG9wdGlvbnMgb3B0aW9ucy4gICovXG4gIGdldE9wdGlvbnMoKSB7IHJldHVybiB0aGlzLmRyaXZlci5vcHRpb25zKCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8aW1wb3J0KFwiLi9zZWxlY3QtYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBUaGUgc2VsZWN0cy4gICovXG4gIGdldFNlbGVjdHMoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdH0gZnJvbSAtIEZyb20uXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBmcm9tLlxuICAgKi9cbiAgZnJvbShmcm9tKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09IFwic3RyaW5nXCIpIGZyb20gPSBuZXcgRnJvbVBsYWluKGZyb20pXG5cbiAgICB0aGlzLl9mcm9tcy5wdXNoKGZyb20pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgLSBHcm91cC5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGdyb3VwLlxuICAgKi9cbiAgZ3JvdXAoZ3JvdXApIHtcbiAgICB0aGlzLl9ncm91cHMucHVzaChncm91cClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3RJbnB1dH0gam9pbiAtIEpvaW4gY2xhdXNlIG9yIGpvaW4gZGVzY3JpcHRvci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGpvaW5zLlxuICAgKi9cbiAgam9pbnMoam9pbikge1xuICAgIGlmICh0eXBlb2Ygam9pbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luUGxhaW4oam9pbikpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpvaW4pKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luT2JqZWN0KG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikpKVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChqb2luKSkge1xuICAgICAgdGhpcy5fam9pbnMucHVzaChuZXcgSm9pbk9iamVjdChub3JtYWxpemVKb2luT2JqZWN0KGpvaW4pKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2Ygam9pbjogJHt0eXBlb2Ygam9pbn1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgbGltaXQuXG4gICAqL1xuICBsaW1pdCh2YWx1ZSkge1xuICAgIHRoaXMuX2xpbWl0ID0gdmFsdWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIG9mZnNldC5cbiAgICovXG4gIG9mZnNldCh2YWx1ZSkge1xuICAgIHRoaXMuX29mZnNldCA9IHZhbHVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09yZGVyQXJndW1lbnRUeXBlfSBvcmRlciAtIE9yZGVyLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgb3JkZXIuXG4gICAqL1xuICBvcmRlcihvcmRlcikge1xuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fb3JkZXJzLnB1c2gobmV3IE9yZGVyUGxhaW4odGhpcywgb3JkZXIpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlclBsYWluKHRoaXMsIGAke29yZGVyfWApKVxuICAgIH0gZWxzZSBpZiAob3JkZXIgaW5zdGFuY2VvZiBPcmRlckJhc2UpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG9yZGVyKVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChvcmRlcikpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlckNvbHVtbih0aGlzLCBvcmRlcikpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcmRlciB0eXBlOiAke3R5cGVvZiBvcmRlcn1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VOdW1iZXIgLSBQYWdlIG51bWJlci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBhZ2UuXG4gICAqL1xuICBwYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gcGFnZU51bWJlclxuICAgIHRoaXMuX2FwcGx5UGFnaW5hdGlvbigpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVyUGFnZSAtIFBhZ2Ugc2l6ZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBlciBwYWdlLlxuICAgKi9cbiAgcGVyUGFnZShwZXJQYWdlKSB7XG4gICAgdGhpcy5fcGVyUGFnZSA9IHBlclBhZ2VcbiAgICB0aGlzLl9hcHBseVBhZ2luYXRpb24oKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmUtZGVyaXZlIExJTUlUIGFuZCBPRkZTRVQgZnJvbSB3aGljaGV2ZXIgb2YgYF9wYWdlYCAvIGBfcGVyUGFnZWBcbiAgICogYXJlIGN1cnJlbnRseSBzZXQuIENhbGxlZCBmcm9tIGJvdGggYHBhZ2UoKWAgYW5kIGBwZXJQYWdlKClgIHNvIHRoZVxuICAgKiBjaGFpbmluZyBvcmRlciAoYHBhZ2UobikucGVyUGFnZShwcClgIHZzIGBwZXJQYWdlKHBwKS5wYWdlKG4pYCkgbm9cbiAgICogbG9uZ2VyIGRldGVybWluZXMgd2hpY2ggcGVyUGFnZSB2YWx1ZSB3aW5zIOKAlCB0aGUgbGFzdCB2YWx1ZSBvZlxuICAgKiBlYWNoIHNldHRlciBhbHdheXMgdGFrZXMgZWZmZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9hcHBseVBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuX3BhZ2UgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCBwZXJQYWdlID0gdGhpcy5fcGVyUGFnZSB8fCAzMFxuICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLl9wYWdlIC0gMSkgKiBwZXJQYWdlXG5cbiAgICB0aGlzLmxpbWl0KHBlclBhZ2UpXG4gICAgdGhpcy5vZmZzZXQob2Zmc2V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T3JkZXJBcmd1bWVudFR5cGV9IG9yZGVyIC0gT3JkZXIuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSByZW9yZGVyLlxuICAgKi9cbiAgcmVvcmRlcihvcmRlcikge1xuICAgIHRoaXMuX29yZGVycyA9IFtdXG4gICAgdGhpcy5vcmRlcihvcmRlcilcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSByZXZlcnNlIG9yZGVyLiAgKi9cbiAgcmV2ZXJzZU9yZGVyKCkge1xuICAgIGZvciAoY29uc3Qgb3JkZXIgb2YgdGhpcy5fb3JkZXJzKSB7XG4gICAgICBvcmRlci5zZXRSZXZlcnNlT3JkZXIodHJ1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlXSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGRpc3RpbmN0LlxuICAgKi9cbiAgZGlzdGluY3QodmFsdWUgPSB0cnVlKSB7XG4gICAgdGhpcy5fZGlzdGluY3QgPSB2YWx1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgc2V0IG9mIGBTRUxFQ1RgIGNsYXVzZXMgd2l0aCB0aGUgZ2l2ZW4gb25lcy5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBzZWxlY3QoLi4uKWAgYWZ0ZXIgZmlyc3Qgd2lwaW5nIGFueSBwcmV2aW91c2x5XG4gICAqIGFjY3VtdWxhdGVkIHNlbGVjdHMg4oCUIG1pcnJvcnMgQWN0aXZlIFJlY29yZCdzIGByZXNlbGVjdGAuIFBhc3Mgbm9cbiAgICogYXJndW1lbnQgKG9yIGFuIGVtcHR5IGFycmF5KSB0byBkcm9wIHRoZSBwcm9qZWN0aW9uIGVudGlyZWx5IHNvIHRoZVxuICAgKiBkcml2ZXIgZmFsbHMgYmFjayB0byBpdHMgZGVmYXVsdCBgU0VMRUNUICpgLlxuICAgKiBAcGFyYW0ge1NlbGVjdEFyZ3VtZW50VHlwZX0gW3NlbGVjdF0gLSBTZWxlY3QgdG8gcmVwbGFjZSBleGlzdGluZyBzZWxlY3RzIHdpdGguXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBxdWVyeSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICByZXNlbGVjdChzZWxlY3QpIHtcbiAgICB0aGlzLl9zZWxlY3RzID0gW11cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ID09IFwidW5kZWZpbmVkXCIpIHJldHVybiB0aGlzXG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc2VsZWN0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U2VsZWN0QXJndW1lbnRUeXBlfSBzZWxlY3QgLSBTZWxlY3QuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3Qoc2VsZWN0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0KSkge1xuICAgICAgZm9yIChjb25zdCBzZWxlY3RJbkFycmF5IG9mIHNlbGVjdCkge1xuICAgICAgICB0aGlzLnNlbGVjdChzZWxlY3RJbkFycmF5KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3NlbGVjdHMucHVzaChuZXcgU2VsZWN0UGxhaW4oc2VsZWN0KSlcbiAgICB9IGVsc2UgaWYgKHNlbGVjdCBpbnN0YW5jZW9mIFNlbGVjdEJhc2UpIHtcbiAgICAgIHRoaXMuX3NlbGVjdHMucHVzaChzZWxlY3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZWxlY3QgdHlwZTogJHt0eXBlb2Ygc2VsZWN0fWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5sb2dOYW1lXSAtIFF1ZXJ5IGxvZyBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxvYmplY3Q+Pn0gQXJyYXkgb2YgcmVzdWx0cyBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgYXN5bmMgX2V4ZWN1dGVRdWVyeSh7bG9nTmFtZSA9IHRoaXMucXVlcnlMb2dOYW1lKFwiTG9hZFwiKX0gPSB7fSkge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMudG9TcWwoKVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmRyaXZlci5xdWVyeShzcWwsIHtsb2dOYW1lfSlcblxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8QXJyYXk8b2JqZWN0Pj59IEFycmF5IG9mIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2UgKi9cbiAgYXN5bmMgcmVzdWx0cygpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZVF1ZXJ5KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uIC0gUXVlcnkgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFF1ZXJ5IGxvZyBuYW1lLlxuICAgKi9cbiAgcXVlcnlMb2dOYW1lKG9wZXJhdGlvbikge1xuICAgIHZvaWQgb3BlcmF0aW9uXG4gICAgcmV0dXJuIFwiU1FMXCJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgU1FMIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBxdWVyeVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTUUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIHF1ZXJ5XG4gICAqL1xuICB0b1NxbCgpIHsgcmV0dXJuIHRoaXMuZHJpdmVyLnF1ZXJ5VG9TcWwodGhpcykgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1doZXJlQXJndW1lbnRUeXBlfSB3aGVyZSAtIFdoZXJlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBxdWVyeSBpbnN0YW5jZVxuICAgKi9cbiAgd2hlcmUod2hlcmUpIHtcbiAgICBpZiAodHlwZW9mIHdoZXJlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZVBsYWluKHRoaXMsIHdoZXJlKSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aGVyZSA9PSBcIm9iamVjdFwiICYmICh3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwib2JqZWN0XCIgfHwgd2hlcmUuY29uc3RydWN0b3IubmFtZSA9PSBcIk9iamVjdFwiKSkge1xuICAgICAgdGhpcy5fd2hlcmVzLnB1c2gobmV3IFdoZXJlSGFzaCh0aGlzLCAvKiogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtaGFzaC5qc1wiKS5XaGVyZUhhc2h9ICovICh3aGVyZSkpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB3aGVyZTogJHt0eXBlb2Ygd2hlcmV9ICgke3doZXJlLmNvbnN0cnVjdG9yLm5hbWV9KWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1doZXJlQXJndW1lbnRUeXBlfSB3aGVyZSAtIFdoZXJlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBxdWVyeSBpbnN0YW5jZVxuICAgKi9cbiAgd2hlcmVOb3Qod2hlcmUpIHtcbiAgICBpZiAodHlwZW9mIHdoZXJlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZU5vdChuZXcgV2hlcmVQbGFpbih0aGlzLCB3aGVyZSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHdoZXJlID09IFwib2JqZWN0XCIgJiYgKHdoZXJlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJvYmplY3RcIiB8fCB3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiT2JqZWN0XCIpKSB7XG4gICAgICB0aGlzLl93aGVyZXMucHVzaChuZXcgV2hlcmVOb3QobmV3IFdoZXJlSGFzaCh0aGlzLCAvKiogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtaGFzaC5qc1wiKS5XaGVyZUhhc2h9ICovICh3aGVyZSkpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2Ygd2hlcmU6ICR7dHlwZW9mIHdoZXJlfSAoJHt3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lfSlgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGN1cnJlbnQgZHJpdmVyIGxhemlseS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAtIEEgdmFsdWUuXG4gICAqL1xuICBnZXQgZHJpdmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kcml2ZXJGbigpXG4gIH1cbn1cbiJdfQ==
@@ -68,6 +68,24 @@ export default class VelociousDatabaseQueryModelClassQuery<MC extends typeof imp
68
68
  * @returns {this} - The select.
69
69
  */
70
70
  select(select: import("./index.js").SelectArgumentType): this;
71
+ /**
72
+ * Loads the default columns plus the given extra selects for preloaded
73
+ * relationship targets, keyed by target model name, e.g.
74
+ * `.selectsExtra({Account: ["(SELECT count(*) FROM projects) AS projects_count"]})`.
75
+ * Unlike `select({...})`, which narrows to only the listed columns, this keeps
76
+ * the default `SELECT *` columns and adds the extras on top.
77
+ * @param {Record<string, string | string[]>} select - Extra selects keyed by target model name.
78
+ * @returns {this} - This query, for chaining.
79
+ */
80
+ selectsExtra(select: Record<string, string | string[]>): this;
81
+ /**
82
+ * Merges an object-form preload select (keyed by target model name) into the
83
+ * given target map, de-duplicating attribute/expression entries.
84
+ * @param {Record<string, string[]>} target - Map to merge into.
85
+ * @param {Record<string, string | string[]>} select - Object-form select.
86
+ * @returns {void} - No return value.
87
+ */
88
+ _mergePreloadSelect(target: Record<string, string[]>, select: Record<string, string | string[]>): void;
71
89
  /**
72
90
  * @returns {string} - Root table reference for query select qualification.
73
91
  */
@@ -1 +1 @@
1
- {"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"AAuIA;;GAEG;AACH;;;GAGG;AAEH;;;GAGG;AACH,2DAX4D,EAAE,SAAjD,cAAe,oBAAoB,EAAE,OAAQ;IAYxD,+EAA+E;IAC/E,kBADY,uBAAuB,CAAC,EAAE,CAAC,EAsBtC;IAbC,iBAAiB;IACjB,YADW,EAAE,CACe;IAE5B,uBAAuB;IACvB,eADW,MAAM,EAAE,CACyB;IAC5C,0BAAsF;IACtF,gCAAiE;IAEjE,yDAAyD;IACzD,YADW,OAAO,iBAAiB,EAAE,cAAc,EAAE,CACM;IAE3D,yDAAyD;IACzD,YADW,OAAO,iBAAiB,EAAE,cAAc,EAAE,CACM;IAG7D,oCAAoC;IACpC,SADc,IAAI,CA2BjB;IAED;;;;;;;OAOG;IACH,gBAHW,OAAO,iBAAiB,EAAE,aAAa,GACrC,IAAI,CAQhB;IAED;;;;;;;;;;;;;OAaG;IACH,gBAHW,OAAO,iBAAiB,EAAE,aAAa,GACrC,IAAI,CAQhB;IAED;;;;;;;;;OASG;IACH,sBAHc,MAAM,EAAA,GACP,MAAM,CAIlB;IAED,6DAA6D;IAC7D,SADc,OAAO,CAAC,MAAM,CAAC,CA4C5B;IAED,wFAAwF;IACxF,kBADc,OAAO,CAAC,MAAM,CAAC,CAkB5B;IAED;;;OAGG;IACH,eAHW,OAAO,YAAY,EAAE,kBAAkB,GACrC,IAAI,CA0BhB;IAED;;OAEG;IACH,sBAFa,MAAM,CAiBlB;IAED,wCAAwC;IACxC,iBADc,EAAE,CAKf;IAED,gDAAgD;IAChD,mBADc,MAAM,EAAE,CAGrB;IAED,yEAAyE;IACzE,kBADc,OAAO,mBAAmB,EAAE,OAAO,CAGhD;IAED,0DAA0D;IAC1D,4BADc,OAAO,CAGpB;IAED;;;OAGG;IACH,8BAHW,MAAM,EAAE,GACN,IAAI,CAKhB;IAED;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,qCAAqC,CAAC,EAAE,CAAC,CASrD;IAED;;;OAGG;IACH,mCAHW,MAAM,EAAE,GACN,MAAM,CAIlB;IAED;;;OAGG;IACH,oCAHW,MAAM,EAAE,GACN,cAAc,oBAAoB,EAAE,OAAO,CAiBvD;IAED;;;OAGG;IACH,wBAHW,MAAM,EAAE,GACN;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC,CAM1D;IAED;;;OAGG;IACH,4BAHW,MAAM,EAAE,GACN,MAAM,CAMlB;IAED;;;OAGG;IACH,kCAHc,MAAM,EAAA,GACP,MAAM,CAMlB;IAED;;;OAGG;IACH,yBAHc,MAAM,EAAA,GACP,MAAM,CAIlB;IAED;;;;OAIG;IACH,6BAJW,OAAO,4BAA4B,EAAE,oBAAoB,GAAG,MAAM,GAAG,MAAM,EAAE,yBAC7E,OAAO,4BAA4B,EAAE,oBAAoB,GACvD,IAAI,CAehB;IAED;;;OAGG;IACH,iCAHW,OAAO,4BAA4B,EAAE,oBAAoB,GACvD,IAAI,CAmBhB;IAED;;;;;OAKG;IACH,mDAJG;QAAuB,QAAQ,EAAvB,MAAM,EAAE;QACwD,eAAe,EAA/E,OAAO,4BAA4B,EAAE,oBAAoB;KACjE,GAAU,IAAI,CAuDhB;IAED;;;;OAIG;IACH,sCAJW,cAAc,oBAAoB,EAAE,OAAO,YAC3C,MAAM,EAAE,GACN,qCAAqC,CAAC,EAAE,CAAC,CAUrD;IAED,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED;;;;;;OAMG;IACH,gBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,OAAO,CAAC,IAAI,CAAC,CAgCzB;IAED;;;OAGG;IACH,eAHW,MAAM,GAAC,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAmBrC;IAED;;;OAGG;IACH,mBAHW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAQ5C;IAED;;;;OAIG;IACH,2BAJW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,aAChC,CAAS,IAAgB,EAAhB,YAAY,CAAC,EAAE,CAAC,KAAI,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAUrC;IAED;;;OAGG;IACH,yBAHW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAUrC;IAED;;;;OAIG;IACH,+BAJW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,aACnB,CAAS,IAAgB,EAAhB,YAAY,CAAC,EAAE,CAAC,KAAI,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAerC;IAED,8EAA8E;IAC9E,SADc,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAM7C;IAED,6EAA6E;IAC7E,QADc,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAO7C;IAED;;;OAGG;IACH,cAHW,OAAO,YAAY,EAAE,mBAAmB,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,mBAAmB,CAAC,GAC1G,IAAI,CAMhB;IAED;;;OAGG;IACH,QAFa,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CA+C5C;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAI5C;IAED;;;;OAIG;IACH,kBAHW,CAAG,MAAM,GAAC,MAAM,EAAE,GAAA,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC,CAmC1B;IAED;;;OAGG;IACH,aAHW,OAAO,YAAY,EAAE,iBAAiB,GACpC,IAAI,CAiChB;IAED;;;OAGG;IACH,gBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAmBhB;IAED;;;OAGG;IACH,gBAHW,OAAO,YAAY,EAAE,iBAAiB,GACpC,IAAI,CAiChB;CASF;oCAtzB2D,EAAE,SAAjD,cAAe,oBAAoB,EAAE,OAAQ,kDAC7C,OAAO,YAAY,EAAE,aAAa,GAAG;IAAC,UAAU,EAAE,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,mBAAmB,EAAE,OAAO,CAAC;IAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,iBAAiB,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,iBAAiB,EAAE,cAAc,EAAE,CAAA;CAAC;0BAnIrQ,YAAY;wBAGd,mBAAmB"}
1
+ {"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"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"}