velocious 1.0.132 → 1.0.133

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 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/drivers/base.js"],"names":[],"mappings":"AAmDA;IAIE;;;OAGG;IACH,oBAHW,OAAO,8BAA8B,EAAE,yBAAyB,iBAChE,OAAO,wBAAwB,EAAE,OAAO,EASlD;IAdD,iCAAiC;IACjC,OADW,MAAM,GAAG,SAAS,CACZ;IAOf,wEAAmB;IACnB,wDAAkC;IAClC,WAAwB;IACxB,eAA8B;IAC9B,2BAA2B;IAC3B,+BAA4C;IAG9C;;;;;;;OAOG;IACH,yBAPW,MAAM,cACN,MAAM,uBACN,MAAM,wBACN,MAAM,QACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;OAIG;IACH,2BAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7B;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;;;OAMG;IACH,gCALW,MAAM,SAEd;QAAuB,WAAW,GAA1B,OAAO;KACf,GAAU,MAAM,EAAE,CAE2E;IAEhG;;;;OAIG;IACH,2BAHW,kBAAkB,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7B;IAED;;;OAGG;IACH,uBAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;;OAIG;IACH,0BAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7B;IAED;;;OAGG;IACH,aAHW,iBAAiB,GACf,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;OAIG;IACH,gBAHW,iBAAiB,GACf,MAAM,CAIlB;IAED;;;;OAIG;IACH,qBAJW,MAAM,SACN,oBAAoB,GAClB,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;;;OAKG;IACH,yBAJW,MAAM,SACN,oBAAoB,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAI7B;IAED;;;;OAIG;IACH,cAHW,GAAG,GACD,GAAG,CAIf;IAED;;OAEG;IACH,WAFa,OAAO,8BAA8B,EAAE,yBAAyB,CAI5E;IAED;;OAEG;IACH,oBAFa,OAAO,wBAAwB,EAAE,OAAO,CAMpD;IAED;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAI9B;IAED;;;OAGG;IACH,aAFa,OAAO,CAAC,KAAK,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAI7D;IAED;;OAEG;IACH,gBAFa,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIlC;IAED;;;;;OAKG;IACH,qBALW,MAAM,SAEd;QAAsB,UAAU,EAAxB,OAAO;KACf,GAAU,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAAC,CAqBlE;IAED;;;OAGG;IACH,2BAHW,MAAM,GACJ,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAItD;IAED;;;OAGG;IACH,WAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,aAHW,iBAAiB,GACf,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;;;OAMG;IACH,0BALW,MAAM,WACN,KAAK,CAAC,MAAM,CAAC,QACb,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAClB,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,gBAHW,iBAAiB,GACf,MAAM,CAIlB;IAED;;;OAGG;IACH,gBAFa,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,qBAHW,GAAG,GACD,GAAG,CAQf;IAED;;;OAGG;IACH,WAFa,OAAO,4BAA4B,EAAE,OAAO,CAIxD;IAED;;;OAGG;IACH,aAHW,GAAG,GACD,MAAM,GAAG,MAAM,CAS3B;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,uBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;OAEG;IACH,YAFa,KAAK,CASjB;IAED;;;OAGG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,eAAe,CAAC,CAUpC;IAED;;;OAGG;IACH,mBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAIhB;IAED;;;OAGG;IACH,wCAFa,OAAO,CAInB;IAED;;OAEG;IACH,iCAFa,OAAO,CAE4B;IAEhD;;;OAGG;IACH,+BAFa,OAAO,CAE0B;IAE9C;;;OAGG;IACH,uBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAS5B;IAED;;;OAGG;IACH,sBAHW,MAAM,OAAO,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,GAAG,CAAC,CAoDxB;IAED;;OAEG;IACH,oBAFa,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;OAEG;IACH,2BAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;OAEG;IACH,qBAFa,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;OAEG;IACH,4BAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,OAAO,CAAC,eAAe,CAAC,CAsBpC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,eAAe,CAAC,CAIpC;IAED;;;;OAIG;IACH,mBAHW,KAAK,GACH,MAAM,CAEiD;IAEpE;;;OAGG;IACH,+BAHW,KAAK,GACH,OAAO,CAInB;IAED;;OAEG;IACH,uBAFa,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;OAEG;IACH,8BAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;OAEG;IACH,yBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,8BAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,qCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;;OAKG;IACH,wBALW,MAAM,iBACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,uCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,wCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;OAEG;IACH,qBAFa,OAAO,CAAC,IAAI,CAAC,CAgCzB;IAED;;;OAGG;IACH,aAHW,iBAAiB,GACf,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;OAIG;IACH,gBAHW,iBAAiB,GACf,MAAM,CAIlB;IAED;;;OAGG;IACH,sBAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,qBAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,kCAHW,MAAa,IAAI,GACf,OAAO,CAAC,GAAG,CAAC,CAUxB;CACF;;aA9vBa,KAAK,CAAC,MAAM,GAAG,OAAO,iCAAiC,EAAE,OAAO,CAAC;kBACjE,OAAO;WACP,MAAM;aACN,OAAO;eACP,MAAM;;;cAIN,OAAO;eACP,OAAO;;;eAIP,MAAM;gBACN;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;;;cAIpB,MAAM,EAAE;WACR;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;eACpB,OAAO;oCACP,MAAM,EAAE;WACR,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;eACjB,MAAM;;2BAGP,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;8BACnB,KAAK,CAAC,YAAY,CAAC;;gBAIlB,MAAM;UACN,MAAM;eACN,MAAM;;uBAGC,iBAAiB;kBACpB,mBAAmB"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/drivers/base.js"],"names":[],"mappings":"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"}
@@ -420,11 +420,26 @@ export default class VelociousDatabaseDriversBase {
420
420
  else {
421
421
  this.logger.debug("Transaction error", error);
422
422
  }
423
+ let transactionRolledBack = false;
423
424
  if (savePointStarted) {
424
425
  this.logger.debug("Rollback savepoint", savePointName);
425
- await this.rollbackSavePoint(savePointName);
426
+ try {
427
+ await this.rollbackSavePoint(savePointName);
428
+ }
429
+ catch (savePointError) {
430
+ const message = savePointError instanceof Error ? savePointError.message : `${savePointError}`;
431
+ // MySQL sometimes drops savepoints unexpectedly; fall back to rolling back the full transaction
432
+ if (message.includes("SAVEPOINT") || message.includes("ER_SP_DOES_NOT_EXIST")) {
433
+ this.logger.debug("Savepoint rollback failed; rolling back entire transaction instead");
434
+ await this.rollbackTransaction();
435
+ transactionRolledBack = true;
436
+ }
437
+ else {
438
+ throw savePointError;
439
+ }
440
+ }
426
441
  }
427
- if (transactionStarted) {
442
+ if (transactionStarted && !transactionRolledBack) {
428
443
  this.logger.debug("Rollback transaction");
429
444
  await this.rollbackTransaction();
430
445
  }
@@ -574,7 +589,18 @@ export default class VelociousDatabaseDriversBase {
574
589
  * @returns {Promise<void>}
575
590
  */
576
591
  async _releaseSavePointAction(savePointName) {
577
- await this.query(`RELEASE SAVEPOINT ${savePointName}`);
592
+ try {
593
+ await this.query(`RELEASE SAVEPOINT ${savePointName}`);
594
+ }
595
+ catch (error) {
596
+ const message = error instanceof Error ? error.message : `${error}`;
597
+ // Savepoint may already be gone if the database rolled back automatically
598
+ if (message.toLowerCase().includes("savepoint") && message.toLowerCase().includes("does not exist")) {
599
+ this.logger.debug(`Release savepoint ignored because it no longer exists: ${savePointName}`);
600
+ return;
601
+ }
602
+ throw error;
603
+ }
578
604
  }
579
605
  /**
580
606
  * @param {string} savePointName
@@ -669,4 +695,4 @@ export default class VelociousDatabaseDriversBase {
669
695
  }
670
696
  }
671
697
  }
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7O0dBT0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7R0FJRztBQUNIOzs7Ozs7OztHQVFHO0FBQ0g7OztHQUdHO0FBQ0g7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDdEMsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDckMsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ25DLE9BQU8sS0FBSyxNQUFNLHlCQUF5QixDQUFBO0FBQzNDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDOUMsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUE7QUFDdkQsT0FBTyxlQUFlLE1BQU0sb0NBQW9DLENBQUE7QUFDaEUsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFFekMsTUFBTSxDQUFDLE9BQU8sT0FBTyw0QkFBNEI7SUFDL0MsaUNBQWlDO0lBQ2pDLEtBQUssR0FBRyxTQUFTLENBQUE7SUFFakI7OztPQUdHO0lBQ0gsWUFBWSxNQUFNLEVBQUUsYUFBYTtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQTtRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUEsQ0FBQyxzREFBc0Q7UUFDL0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO1FBQzNCLElBQUksQ0FB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LGtCQUFrQjtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFFBQVE7UUFDcEMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUUvQixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUE7UUFDekIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ3JlYXRlSW5kZXhTcWxBcmdzXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IGltcG9ydChcIi4vLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIikuZGVmYXVsdD59IGNvbHVtbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lmTm90RXhpc3RzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbdW5pcXVlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhYmxlTmFtZVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERyb3BUYWJsZVNxbEFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjYXNjYWRlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaWZFeGlzdHNdXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVsZXRlU3FsQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0YWJsZU5hbWVcbiAqIEBwcm9wZXJ0eSB7e1trZXk6IHN0cmluZ106IGFueX19IGNvbmRpdGlvbnNcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBJbnNlcnRTcWxBcmdzVHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbHVtbnNdXG4gKiBAcHJvcGVydHkge3tba2V5OiBzdHJpbmddOiBhbnl9fSBbZGF0YV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3JldHVybkxhc3RJbnNlcnRlZENvbHVtbk5hbWVzXVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxhbnk+Pn0gW3Jvd3NdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGFibGVOYW1lXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGFueT59IFF1ZXJ5Um93VHlwZVxuICogQHR5cGVkZWYge0FycmF5PFF1ZXJ5Um93VHlwZT59IFF1ZXJ5UmVzdWx0VHlwZVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9VXBkYXRlU3FsQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjb25kaXRpb25zXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhYmxlTmFtZVxuICovXG5cbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBRdWVyeSBmcm9tIFwiLi4vcXVlcnkvaW5kZXguanNcIlxuaW1wb3J0IEhhbmRsZXIgZnJvbSBcIi4uL2hhbmRsZXIuanNcIlxuaW1wb3J0IE11dGV4IGZyb20gXCJlcGljLWxvY2tzL3NyYy9tdXRleC5qc1wiXG5pbXBvcnQgc3RyZnRpbWUgZnJvbSBcInN0cmZ0aW1lXCJcbmltcG9ydCBVVUlEIGZyb20gXCJwdXJlLXV1aWRcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSBcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCJcbmltcG9ydCBUYWJsZUZvcmVpZ25LZXkgZnJvbSBcIi4uL3RhYmxlLWRhdGEvdGFibGUtZm9yZWlnbi1rZXkuanNcIlxuaW1wb3J0IHdhaXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3dhaXQuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZURyaXZlcnNCYXNlIHtcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGlkU2VxID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSBjb25maWdcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZywgY29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2FyZ3MgPSBjb25maWdcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5tdXRleCA9IG5ldyBNdXRleCgpIC8vIENhbiBiZSB1c2VkIHRvIGxvY2sgdGhpcyBpbnN0YW5jZSBmb3IgZXhjbHVzaXZlIHVzZVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uc0NvdW50ID0gMFxuICAgIHRoaXMuX3RyYW5zYWN0aW9uc0FjdGlvbnNNdXRleCA9IG5ldyBNdXRleCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlZFRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlZENvbHVtbk5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBhZGRGb3JlaWduS2V5KHRhYmxlTmFtZSwgY29sdW1uTmFtZSwgcmVmZXJlbmNlZFRhYmxlTmFtZSwgcmVmZXJlbmNlZENvbHVtbk5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCB0YWJsZUZvcmVpZ25LZXlBcmdzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VkQ29sdW1uTmFtZSxcbiAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZVxuICAgICAgfSxcbiAgICAgIGFyZ3NcbiAgICApXG4gICAgY29uc3QgdGFibGVGb3JlaWduS2V5ID0gbmV3IFRhYmxlRm9yZWlnbktleSh0YWJsZUZvcmVpZ25LZXlBcmdzKVxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgdGFibGVEYXRhLmFkZEZvcmVpZ25LZXkodGFibGVGb3JlaWduS2V5KVxuXG4gICAgY29uc3QgYWx0ZXJUYWJsZVNRTHMgPSBhd2FpdCB0aGlzLmFsdGVyVGFibGVTUUxzKHRhYmxlRGF0YSlcblxuICAgIGZvciAoY29uc3QgYWx0ZXJUYWJsZVNRTCBvZiBhbHRlclRhYmxlU1FMcykge1xuICAgICAgYXdhaXQgdGhpcy5xdWVyeShhbHRlclRhYmxlU1FMKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi90YWJsZS1kYXRhL2luZGV4LmpzXCIpLmRlZmF1bHR9IF90YWJsZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYWx0ZXJUYWJsZVNRTHMoX3RhYmxlRGF0YSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYWx0ZXJUYWJsZVNRTHMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgY29ubmVjdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY29ubmVjdCcgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhYmFzZU5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmlmTm90RXhpc3RzXVxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBjcmVhdGVEYXRhYmFzZVNxbChkYXRhYmFzZU5hbWUsIGFyZ3MpIHsgdGhyb3cgbmV3IEVycm9yKFwiJ2NyZWF0ZURhdGFiYXNlU3FsJyBub3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge0NyZWF0ZUluZGV4U3FsQXJnc30gaW5kZXhEYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUluZGV4U1FMcyhpbmRleERhdGEpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIidjcmVhdGVJbmRleFNRTHMnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiKS5kZWZhdWx0fSB0YWJsZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZURhdGEpIHtcbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZVNxbCh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiKS5kZWZhdWx0fSB0YWJsZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVGFibGVTcWwodGFibGVEYXRhKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY3JlYXRlVGFibGVTcWwnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RGVsZXRlU3FsQXJnc1R5cGV9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBkZWxldGUoYXJncykge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuZGVsZXRlU3FsKGFyZ3MpXG5cbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtEZWxldGVTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZGVsZXRlU3FsKGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihgJ2RlbGV0ZVNxbCcgbm90IGltcGxlbWVudGVkYClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEBwYXJhbSB7RHJvcFRhYmxlU3FsQXJnc1R5cGV9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGRyb3BUYWJsZSh0YWJsZU5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5kcm9wVGFibGVTUUxzKHRhYmxlTmFtZSwgYXJncylcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge0Ryb3BUYWJsZVNxbEFyZ3NUeXBlfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgZHJvcFRhYmxlU1FMcyh0YWJsZU5hbWUsIGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImRyb3BUYWJsZVNRTHMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgZXNjYXBlKHZhbHVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInZXNjYXBlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfVxuICAgKi9cbiAgZ2V0QXJncygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnc1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9XG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXRJZFNlcSgpIHtcbiAgICByZXR1cm4gdGhpcy5pZFNlcVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxpbXBvcnQoXCIuL2Jhc2UtdGFibGUuanNcIikuZGVmYXVsdD4+fVxuICAgKi9cbiAgZ2V0VGFibGVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9I2dldFRhYmxlcyBub3QgaW1wbGVtZW50ZWRgKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxuICAgKi9cbiAgYXN5bmMgc3RydWN0dXJlU3FsKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MudGhyb3dFcnJvclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2Jhc2UtdGFibGUuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZD59XG4gICAqL1xuICBhc3luYyBnZXRUYWJsZUJ5TmFtZShuYW1lLCBhcmdzKSB7XG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5nZXRUYWJsZXMoKVxuICAgIGNvbnN0IHRhYmxlTmFtZXMgPSBbXVxuICAgIGxldCB0YWJsZVxuXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgdGFibGVzKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lID0gY2FuZGlkYXRlLmdldE5hbWUoKVxuXG4gICAgICBpZiAoY2FuZGlkYXRlTmFtZSA9PSBuYW1lKSB7XG4gICAgICAgIHRhYmxlID0gY2FuZGlkYXRlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHRhYmxlTmFtZXMucHVzaChjYW5kaWRhdGVOYW1lKVxuICAgIH1cblxuICAgIGlmICghdGFibGUgJiYgYXJncz8udGhyb3dFcnJvciAhPT0gZmFsc2UpIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRhYmxlIGJ5IHRoYXQgbmFtZSBcIiR7bmFtZX1cIiBpbjogJHt0YWJsZU5hbWVzLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9iYXNlLXRhYmxlLmpzXCIpLmRlZmF1bHQ+fVxuICAgKi9cbiAgYXN5bmMgZ2V0VGFibGVCeU5hbWVPckZhaWwobmFtZSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFRhYmxlQnlOYW1lKG5hbWUsIHt0aHJvd0Vycm9yOiB0cnVlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldFR5cGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3R5cGUnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SW5zZXJ0U3FsQXJnc1R5cGV9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBpbnNlcnQoYXJncykge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuaW5zZXJ0U3FsKGFyZ3MpXG5cbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNvbHVtbnNcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gcm93c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGluc2VydE11bHRpcGxlKHRhYmxlTmFtZSwgY29sdW1ucywgcm93cykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2luc2VydE11bHRpcGxlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtJbnNlcnRTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgaW5zZXJ0U3FsKGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIidpbnNlcnRTcWwnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxuICAgKi9cbiAgbGFzdEluc2VydElEKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9I2xhc3RJbnNlcnRJRCBub3QgaW1wbGVtZW50ZWRgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgX2NvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiBzdHJmdGltZShcIiVGICVULiVMXCIsIHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcXVlcnktcGFyc2VyL29wdGlvbnMuanNcIikuZGVmYXVsdH1cbiAgICovXG4gIG9wdGlvbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ29wdGlvbnMnIG5vdCBpbXBsZW1lbnRlZC5cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHJldHVybnMge251bWJlciB8IHN0cmluZ31cbiAgICovXG4gIHF1b3RlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWVcblxuICAgIGNvbnN0IGVzY2FwZWRWYWx1ZSA9IHRoaXMuZXNjYXBlKHZhbHVlKVxuICAgIGNvbnN0IHJlc3VsdCA9IGBcIiR7ZXNjYXBlZFZhbHVlfVwiYFxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBxdW90ZUNvbHVtbihjb2x1bW5OYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucygpLnF1b3RlQ29sdW1uTmFtZShjb2x1bW5OYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBxdW90ZUluZGV4KGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zKCkucXVvdGVJbmRleE5hbWUoY29sdW1uTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBxdW90ZVRhYmxlKHRhYmxlTmFtZSkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMoKS5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1F1ZXJ5fVxuICAgKi9cbiAgbmV3UXVlcnkoKSB7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBIYW5kbGVyKClcblxuICAgIHJldHVybiBuZXcgUXVlcnkoe1xuICAgICAgZHJpdmVyOiB0aGlzLFxuICAgICAgaGFuZGxlclxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxRdWVyeVJlc3VsdFR5cGU+fVxuICAgKi9cbiAgYXN5bmMgc2VsZWN0KHRhYmxlTmFtZSkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5uZXdRdWVyeSgpXG5cbiAgICBjb25zdCBzcWwgPSBxdWVyeVxuICAgICAgLmZyb20odGFibGVOYW1lKVxuICAgICAgLnRvU3FsKClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gbmV3SWRTZXFcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXRJZFNlcShuZXdJZFNlcSkge1xuICAgIHRoaXMuaWRTZXEgPSBuZXdJZFNlcVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNob3VsZFNldEF1dG9JbmNyZW1lbnRXaGVuUHJpbWFyeUtleSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCdzaG91bGRTZXRBdXRvSW5jcmVtZW50V2hlblByaW1hcnlLZXknIG5vdCBpbXBsZW1lbnRlZGApXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdXBwb3J0c0RlZmF1bHRQcmltYXJ5S2V5VVVJRCgpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3VwcG9ydHNJbnNlcnRJbnRvUmV0dXJuaW5nKCkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgdGFibGVFeGlzdHModGFibGVOYW1lKSB7XG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5nZXRUYWJsZXMoKVxuICAgIGNvbnN0IHRhYmxlID0gdGFibGVzLmZpbmQoKHRhYmxlKSA9PiB0YWJsZS5nZXROYW1lKCkgPT0gdGFibGVOYW1lKVxuXG4gICAgaWYgKHRhYmxlKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgYXN5bmMgdHJhbnNhY3Rpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBzYXZlUG9pbnROYW1lID0gdGhpcy5nZW5lcmF0ZVNhdmVQb2ludE5hbWUoKVxuICAgIGxldCB0cmFuc2FjdGlvblN0YXJ0ZWQgPSBmYWxzZVxuICAgIGxldCBzYXZlUG9pbnRTdGFydGVkID0gZmFsc2VcblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbnNDb3VudCA9PSAwKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlN0YXJ0IHRyYW5zYWN0aW9uXCIpXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VHJhbnNhY3Rpb24oKVxuICAgICAgdHJhbnNhY3Rpb25TdGFydGVkID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlN0YXJ0IHNhdmVwb2ludFwiLCBzYXZlUG9pbnROYW1lKVxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNhdmVQb2ludChzYXZlUG9pbnROYW1lKVxuICAgICAgc2F2ZVBvaW50U3RhcnRlZCA9IHRydWVcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbGJhY2soKVxuXG4gICAgICBpZiAoc2F2ZVBvaW50U3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlJlbGVhc2Ugc2F2ZXBvaW50XCIsIHNhdmVQb2ludE5hbWUpXG4gICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZVNhdmVQb2ludChzYXZlUG9pbnROYW1lKVxuICAgICAgfVxuXG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFydGVkKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiQ29tbWl0IHRyYW5zYWN0aW9uXCIpXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlRyYW5zYWN0aW9uIGVycm9yXCIsIGVycm9yLm1lc3NhZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlRyYW5zYWN0aW9uIGVycm9yXCIsIGVycm9yKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2F2ZVBvaW50U3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlJvbGxiYWNrIHNhdmVwb2ludFwiLCBzYXZlUG9pbnROYW1lKVxuICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrU2F2ZVBvaW50KHNhdmVQb2ludE5hbWUpXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFuc2FjdGlvblN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJSb2xsYmFjayB0cmFuc2FjdGlvblwiKVxuICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0VHJhbnNhY3Rpb24oKSB7XG4gICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25zQWN0aW9uc011dGV4LnN5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRUcmFuc2FjdGlvbkFjdGlvbigpXG4gICAgICB0aGlzLl90cmFuc2FjdGlvbnNDb3VudCsrXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIF9zdGFydFRyYW5zYWN0aW9uQWN0aW9uKCkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXCJCRUdJTiBUUkFOU0FDVElPTlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgY29tbWl0VHJhbnNhY3Rpb24oKSB7XG4gICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25zQWN0aW9uc011dGV4LnN5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fY29tbWl0VHJhbnNhY3Rpb25BY3Rpb24oKVxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb25zQ291bnQtLVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfY29tbWl0VHJhbnNhY3Rpb25BY3Rpb24oKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcIkNPTU1JVFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHJldHVybnMge1Byb21pc2U8UXVlcnlSZXN1bHRUeXBlPn1cbiAgICovXG4gIGFzeW5jIHF1ZXJ5KHNxbCkge1xuICAgIGxldCB0cmllcyA9IDBcblxuICAgIHdoaWxlKHRyaWVzIDwgNSkge1xuICAgICAgdHJpZXMrK1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcXVlcnlBY3R1YWwoc3FsKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgdHJpZXMgPCA1ICYmIHRoaXMucmV0cnlhYmxlRGF0YWJhc2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0KDEwMClcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBSZXRyeWluZyBxdWVyeSBiZWNhdXNlIGZhaWxlZCB3aXRoOiAke2Vycm9yLnN0YWNrfWApXG4gICAgICAgICAgLy8gUmV0cnlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3F1ZXJ5JyB1bmV4cGVjdGVkIGNhbWUgaGVyZVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFF1ZXJ5UmVzdWx0VHlwZT59XG4gICAqL1xuICBfcXVlcnlBY3R1YWwoc3FsKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5QWN0dWFsIG5vdCBpbXBsZW1lbnRlZGApXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7UXVlcnl9IF9xdWVyeVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcXVlcnlUb1NxbChfcXVlcnkpIHsgdGhyb3cgbmV3IEVycm9yKFwicXVlcnlUb1NxbCBub3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXJyb3J9IF9lcnJvclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJldHJ5YWJsZURhdGFiYXNlRXJyb3IoX2Vycm9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHJvbGxiYWNrVHJhbnNhY3Rpb24oKSB7XG4gICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25zQWN0aW9uc011dGV4LnN5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fcm9sbGJhY2tUcmFuc2FjdGlvbkFjdGlvbigpXG4gICAgICB0aGlzLl90cmFuc2FjdGlvbnNDb3VudC0tXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIF9yb2xsYmFja1RyYW5zYWN0aW9uQWN0aW9uKCkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXCJST0xMQkFDS1wiKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZW5lcmF0ZVNhdmVQb2ludE5hbWUoKSB7XG4gICAgcmV0dXJuIGBzcCR7bmV3IFVVSUQoNCkuZm9ybWF0KCkucmVwbGFjZUFsbChcIi1cIiwgXCJcIil9YFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlUG9pbnROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnRTYXZlUG9pbnQoc2F2ZVBvaW50TmFtZSkge1xuICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uc0FjdGlvbnNNdXRleC5zeW5jKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0U2F2ZVBvaW50QWN0aW9uKHNhdmVQb2ludE5hbWUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVBvaW50TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIF9zdGFydFNhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShgU0FWRVBPSU5UICR7c2F2ZVBvaW50TmFtZX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZENvbHVtbk5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0NvbHVtbk5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByZW5hbWVDb2x1bW4odGFibGVOYW1lLCBvbGRDb2x1bW5OYW1lLCBuZXdDb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4ob2xkQ29sdW1uTmFtZSlcblxuICAgIHRhYmxlQ29sdW1uLnNldE5ld05hbWUobmV3Q29sdW1uTmFtZSlcblxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgdGFibGVEYXRhLmFkZENvbHVtbih0YWJsZUNvbHVtbilcblxuICAgIGNvbnN0IGFsdGVyVGFibGVTUUxzID0gYXdhaXQgdGhpcy5hbHRlclRhYmxlU1FMcyh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IGFsdGVyVGFibGVTUUwgb2YgYWx0ZXJUYWJsZVNRTHMpIHtcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoYWx0ZXJUYWJsZVNRTClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNhdmVQb2ludE5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByZWxlYXNlU2F2ZVBvaW50KHNhdmVQb2ludE5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbnNBY3Rpb25zTXV0ZXguc3luYyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWxlYXNlU2F2ZVBvaW50QWN0aW9uKHNhdmVQb2ludE5hbWUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVBvaW50TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIF9yZWxlYXNlU2F2ZVBvaW50QWN0aW9uKHNhdmVQb2ludE5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KGBSRUxFQVNFIFNBVkVQT0lOVCAke3NhdmVQb2ludE5hbWV9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVBvaW50TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHJvbGxiYWNrU2F2ZVBvaW50KHNhdmVQb2ludE5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbnNBY3Rpb25zTXV0ZXguc3luYyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9yb2xsYmFja1NhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNhdmVQb2ludE5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfcm9sbGJhY2tTYXZlUG9pbnRBY3Rpb24oc2F2ZVBvaW50TmFtZSkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoYFJPTExCQUNLIFRPIFNBVkVQT0lOVCAke3NhdmVQb2ludE5hbWV9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHRydW5jYXRlQWxsVGFibGVzKCkge1xuICAgIGF3YWl0IHRoaXMud2l0aERpc2FibGVkRm9yZWlnbktleXMoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHRyaWVzID0gMFxuXG4gICAgICB3aGlsZSh0cmllcyA8PSA1KSB7XG4gICAgICAgIHRyaWVzKytcblxuICAgICAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmdldFRhYmxlcygpXG4gICAgICAgIGNvbnN0IHRydW5jYXRlRXJyb3JzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuICAgICAgICAgIGlmICh0YWJsZS5nZXROYW1lKCkgIT0gXCJzY2hlbWFfbWlncmF0aW9uc1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCB0YWJsZS50cnVuY2F0ZSh7Y2FzY2FkZTogdHJ1ZX0pXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgICB0cnVuY2F0ZUVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cnVuY2F0ZUVycm9ycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodHJpZXMgPD0gNSkge1xuICAgICAgICAgIC8vIFJldHJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdHJ1bmNhdGVFcnJvcnNbMF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtVcGRhdGVTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZShhcmdzKSB7XG4gICAgY29uc3Qgc3FsID0gdGhpcy51cGRhdGVTcWwoYXJncylcblxuICAgIGF3YWl0IHRoaXMucXVlcnkoc3FsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1VwZGF0ZVNxbEFyZ3NUeXBlfSBhcmdzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB1cGRhdGVTcWwoYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2Rpc2FibGVGb3JlaWduS2V5cycgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZGlzYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidkaXNhYmxlRm9yZWlnbktleXMnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGVuYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidlbmFibGVGb3JlaWduS2V5cycgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIHdpdGhEaXNhYmxlZEZvcmVpZ25LZXlzKGNhbGxiYWNrKSB7XG4gICAgYXdhaXQgdGhpcy5kaXNhYmxlRm9yZWlnbktleXMoKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5hYmxlRm9yZWlnbktleXMoKVxuICAgIH1cbiAgfVxufVxuIl19
698
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7O0dBT0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7R0FJRztBQUNIOzs7Ozs7OztHQVFHO0FBQ0g7OztHQUdHO0FBQ0g7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDdEMsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDckMsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ25DLE9BQU8sS0FBSyxNQUFNLHlCQUF5QixDQUFBO0FBQzNDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDOUMsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUE7QUFDdkQsT0FBTyxlQUFlLE1BQU0sb0NBQW9DLENBQUE7QUFDaEUsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFFekMsTUFBTSxDQUFDLE9BQU8sT0FBTyw0QkFBNEI7SUFDL0MsaUNBQWlDO0lBQ2pDLEtBQUssR0FBRyxTQUFTLENBQUE7SUFFakI7OztPQUdHO0lBQ0gsWUFBWSxNQUFNLEVBQUUsYUFBYTtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQTtRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUEsQ0FBQyxzREFBc0Q7UUFDL0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO1FBQzNCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO0lBQzlDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLElBQUk7UUFDeEYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN2QztZQUNFLFVBQVU7WUFDVixTQUFTO1lBQ1Qsb0JBQW9CO1lBQ3BCLG1CQUFtQjtTQUNwQixFQUNELElBQUksQ0FDTCxDQUFBO1FBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUUxQyxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXhDLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUUzRCxLQUFLLE1BQU0sYUFBYSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsVUFBVTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGlCQUFpQixDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztJQUV0STs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFTO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVqRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWhDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxJQUFJO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSTtRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRXRELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRWhFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUM3QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7UUFDckIsSUFBSSxLQUFLLENBQUE7UUFFVCxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQy9CLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUV6QyxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxHQUFHLFNBQVMsQ0FBQTtnQkFDakIsTUFBSztZQUNQLENBQUM7WUFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxVQUFVLEtBQUssS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLElBQUksU0FBUyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUV0SSxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSTtRQUM3QixPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVoQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxJQUFJO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsS0FBSztRQUNqQixJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUMxQixPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksR0FBRyxDQUFBO1FBRWxDLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFFN0IsT0FBTyxJQUFJLEtBQUssQ0FBQztZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTztTQUNSLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBRTdCLE1BQU0sR0FBRyxHQUFHLEtBQUs7YUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ2YsS0FBSyxFQUFFLENBQUE7UUFFVixPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLFFBQVE7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0NBQW9DO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQTtJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCw2QkFBNkIsS0FBSyxPQUFPLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFaEQ7OztPQUdHO0lBQ0gsMkJBQTJCLEtBQUssT0FBTyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRTlDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUztRQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUE7UUFFbEUsSUFBSSxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFdEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1FBQ2xELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFBO1FBQzlCLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1FBRTVCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFDdEMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUM3QixrQkFBa0IsR0FBRyxJQUFJLENBQUE7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQTtZQUNuRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQTtRQUVWLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFBO1lBRXpCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQ3JELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQzVDLENBQUM7WUFFRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7Z0JBQ3ZDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDaEMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN2RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDL0MsQ0FBQztZQUVELElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFBO1lBRWpDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQ3RELElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDN0MsQ0FBQztnQkFBQyxPQUFPLGNBQWMsRUFBRSxDQUFDO29CQUN4QixNQUFNLE9BQU8sR0FBRyxjQUFjLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFBO29CQUU5RixnR0FBZ0c7b0JBQ2hHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQzt3QkFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQTt3QkFDdkYsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTt3QkFDaEMscUJBQXFCLEdBQUcsSUFBSSxDQUFBO29CQUM5QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxjQUFjLENBQUE7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLGtCQUFrQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtZQUNsQyxDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHdCQUF3QjtRQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRztRQUNiLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtRQUViLE9BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxDQUFBO1lBRVAsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3JDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM5RSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7b0JBQ3RFLFFBQVE7Z0JBQ1YsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sS0FBSyxDQUFBO2dCQUNiLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxHQUFHO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE1BQU0sSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMscUNBQXFDO0lBRTFHOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLE1BQU07UUFDM0IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFBO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQjtRQUM5QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCO1FBQ25CLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYTtRQUNoQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkQsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDakQsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGFBQWE7UUFDdkMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsYUFBYSxFQUFFLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYTtRQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVsRCxXQUFXLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRXJDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFaEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTNELEtBQUssTUFBTSxhQUFhLElBQUksY0FBYyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWE7UUFDbEMsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ25ELE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ25ELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhO1FBQ3pDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUN4RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUE7WUFFbkUsMEVBQTBFO1lBQzFFLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMERBQTBELGFBQWEsRUFBRSxDQUFDLENBQUE7Z0JBQzVGLE9BQU07WUFDUixDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhO1FBQ25DLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQUMsYUFBYTtRQUMxQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUM1QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7WUFFYixPQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxFQUFFLENBQUE7Z0JBRVAsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ3JDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQTtnQkFFekIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksbUJBQW1CLEVBQUUsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDOzRCQUNILE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO3dCQUN2QyxDQUFDO3dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7NEJBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTs0QkFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTt3QkFDNUIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMvQixNQUFLO2dCQUNQLENBQUM7cUJBQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLFFBQVE7Z0JBQ1YsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFaEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLElBQUk7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQjtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFFBQVE7UUFDcEMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUUvQixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUE7UUFDekIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ3JlYXRlSW5kZXhTcWxBcmdzXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IGltcG9ydChcIi4vLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIikuZGVmYXVsdD59IGNvbHVtbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lmTm90RXhpc3RzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbdW5pcXVlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhYmxlTmFtZVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERyb3BUYWJsZVNxbEFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjYXNjYWRlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaWZFeGlzdHNdXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVsZXRlU3FsQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0YWJsZU5hbWVcbiAqIEBwcm9wZXJ0eSB7e1trZXk6IHN0cmluZ106IGFueX19IGNvbmRpdGlvbnNcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBJbnNlcnRTcWxBcmdzVHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbHVtbnNdXG4gKiBAcHJvcGVydHkge3tba2V5OiBzdHJpbmddOiBhbnl9fSBbZGF0YV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3JldHVybkxhc3RJbnNlcnRlZENvbHVtbk5hbWVzXVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxhbnk+Pn0gW3Jvd3NdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGFibGVOYW1lXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGFueT59IFF1ZXJ5Um93VHlwZVxuICogQHR5cGVkZWYge0FycmF5PFF1ZXJ5Um93VHlwZT59IFF1ZXJ5UmVzdWx0VHlwZVxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9VXBkYXRlU3FsQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjb25kaXRpb25zXG4gKiBAcHJvcGVydHkge29iamVjdH0gZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhYmxlTmFtZVxuICovXG5cbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBRdWVyeSBmcm9tIFwiLi4vcXVlcnkvaW5kZXguanNcIlxuaW1wb3J0IEhhbmRsZXIgZnJvbSBcIi4uL2hhbmRsZXIuanNcIlxuaW1wb3J0IE11dGV4IGZyb20gXCJlcGljLWxvY2tzL3NyYy9tdXRleC5qc1wiXG5pbXBvcnQgc3RyZnRpbWUgZnJvbSBcInN0cmZ0aW1lXCJcbmltcG9ydCBVVUlEIGZyb20gXCJwdXJlLXV1aWRcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSBcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCJcbmltcG9ydCBUYWJsZUZvcmVpZ25LZXkgZnJvbSBcIi4uL3RhYmxlLWRhdGEvdGFibGUtZm9yZWlnbi1rZXkuanNcIlxuaW1wb3J0IHdhaXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3dhaXQuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZURyaXZlcnNCYXNlIHtcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGlkU2VxID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSBjb25maWdcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZywgY29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2FyZ3MgPSBjb25maWdcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5tdXRleCA9IG5ldyBNdXRleCgpIC8vIENhbiBiZSB1c2VkIHRvIGxvY2sgdGhpcyBpbnN0YW5jZSBmb3IgZXhjbHVzaXZlIHVzZVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uc0NvdW50ID0gMFxuICAgIHRoaXMuX3RyYW5zYWN0aW9uc0FjdGlvbnNNdXRleCA9IG5ldyBNdXRleCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlZFRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlZENvbHVtbk5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBhZGRGb3JlaWduS2V5KHRhYmxlTmFtZSwgY29sdW1uTmFtZSwgcmVmZXJlbmNlZFRhYmxlTmFtZSwgcmVmZXJlbmNlZENvbHVtbk5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCB0YWJsZUZvcmVpZ25LZXlBcmdzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICByZWZlcmVuY2VkQ29sdW1uTmFtZSxcbiAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZVxuICAgICAgfSxcbiAgICAgIGFyZ3NcbiAgICApXG4gICAgY29uc3QgdGFibGVGb3JlaWduS2V5ID0gbmV3IFRhYmxlRm9yZWlnbktleSh0YWJsZUZvcmVpZ25LZXlBcmdzKVxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgdGFibGVEYXRhLmFkZEZvcmVpZ25LZXkodGFibGVGb3JlaWduS2V5KVxuXG4gICAgY29uc3QgYWx0ZXJUYWJsZVNRTHMgPSBhd2FpdCB0aGlzLmFsdGVyVGFibGVTUUxzKHRhYmxlRGF0YSlcblxuICAgIGZvciAoY29uc3QgYWx0ZXJUYWJsZVNRTCBvZiBhbHRlclRhYmxlU1FMcykge1xuICAgICAgYXdhaXQgdGhpcy5xdWVyeShhbHRlclRhYmxlU1FMKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi90YWJsZS1kYXRhL2luZGV4LmpzXCIpLmRlZmF1bHR9IF90YWJsZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYWx0ZXJUYWJsZVNRTHMoX3RhYmxlRGF0YSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYWx0ZXJUYWJsZVNRTHMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgY29ubmVjdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY29ubmVjdCcgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhYmFzZU5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmlmTm90RXhpc3RzXVxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBjcmVhdGVEYXRhYmFzZVNxbChkYXRhYmFzZU5hbWUsIGFyZ3MpIHsgdGhyb3cgbmV3IEVycm9yKFwiJ2NyZWF0ZURhdGFiYXNlU3FsJyBub3QgaW1wbGVtZW50ZWRcIikgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge0NyZWF0ZUluZGV4U3FsQXJnc30gaW5kZXhEYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUluZGV4U1FMcyhpbmRleERhdGEpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIidjcmVhdGVJbmRleFNRTHMnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiKS5kZWZhdWx0fSB0YWJsZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZURhdGEpIHtcbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZVNxbCh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiKS5kZWZhdWx0fSB0YWJsZURhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVGFibGVTcWwodGFibGVEYXRhKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY3JlYXRlVGFibGVTcWwnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RGVsZXRlU3FsQXJnc1R5cGV9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBkZWxldGUoYXJncykge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuZGVsZXRlU3FsKGFyZ3MpXG5cbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtEZWxldGVTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZGVsZXRlU3FsKGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihgJ2RlbGV0ZVNxbCcgbm90IGltcGxlbWVudGVkYClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEBwYXJhbSB7RHJvcFRhYmxlU3FsQXJnc1R5cGV9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGRyb3BUYWJsZSh0YWJsZU5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5kcm9wVGFibGVTUUxzKHRhYmxlTmFtZSwgYXJncylcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge0Ryb3BUYWJsZVNxbEFyZ3NUeXBlfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgZHJvcFRhYmxlU1FMcyh0YWJsZU5hbWUsIGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImRyb3BUYWJsZVNRTHMgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgZXNjYXBlKHZhbHVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInZXNjYXBlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfVxuICAgKi9cbiAgZ2V0QXJncygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnc1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9XG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXRJZFNlcSgpIHtcbiAgICByZXR1cm4gdGhpcy5pZFNlcVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxpbXBvcnQoXCIuL2Jhc2UtdGFibGUuanNcIikuZGVmYXVsdD4+fVxuICAgKi9cbiAgZ2V0VGFibGVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9I2dldFRhYmxlcyBub3QgaW1wbGVtZW50ZWRgKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxuICAgKi9cbiAgYXN5bmMgc3RydWN0dXJlU3FsKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MudGhyb3dFcnJvclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2Jhc2UtdGFibGUuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZD59XG4gICAqL1xuICBhc3luYyBnZXRUYWJsZUJ5TmFtZShuYW1lLCBhcmdzKSB7XG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5nZXRUYWJsZXMoKVxuICAgIGNvbnN0IHRhYmxlTmFtZXMgPSBbXVxuICAgIGxldCB0YWJsZVxuXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgdGFibGVzKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lID0gY2FuZGlkYXRlLmdldE5hbWUoKVxuXG4gICAgICBpZiAoY2FuZGlkYXRlTmFtZSA9PSBuYW1lKSB7XG4gICAgICAgIHRhYmxlID0gY2FuZGlkYXRlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHRhYmxlTmFtZXMucHVzaChjYW5kaWRhdGVOYW1lKVxuICAgIH1cblxuICAgIGlmICghdGFibGUgJiYgYXJncz8udGhyb3dFcnJvciAhPT0gZmFsc2UpIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRhYmxlIGJ5IHRoYXQgbmFtZSBcIiR7bmFtZX1cIiBpbjogJHt0YWJsZU5hbWVzLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9iYXNlLXRhYmxlLmpzXCIpLmRlZmF1bHQ+fVxuICAgKi9cbiAgYXN5bmMgZ2V0VGFibGVCeU5hbWVPckZhaWwobmFtZSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFRhYmxlQnlOYW1lKG5hbWUsIHt0aHJvd0Vycm9yOiB0cnVlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldFR5cGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3R5cGUnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SW5zZXJ0U3FsQXJnc1R5cGV9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBpbnNlcnQoYXJncykge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMuaW5zZXJ0U3FsKGFyZ3MpXG5cbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNvbHVtbnNcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gcm93c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGluc2VydE11bHRpcGxlKHRhYmxlTmFtZSwgY29sdW1ucywgcm93cykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2luc2VydE11bHRpcGxlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtJbnNlcnRTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgaW5zZXJ0U3FsKGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIidpbnNlcnRTcWwnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxuICAgKi9cbiAgbGFzdEluc2VydElEKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9I2xhc3RJbnNlcnRJRCBub3QgaW1wbGVtZW50ZWRgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgX2NvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiBzdHJmdGltZShcIiVGICVULiVMXCIsIHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcXVlcnktcGFyc2VyL29wdGlvbnMuanNcIikuZGVmYXVsdH1cbiAgICovXG4gIG9wdGlvbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ29wdGlvbnMnIG5vdCBpbXBsZW1lbnRlZC5cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHJldHVybnMge251bWJlciB8IHN0cmluZ31cbiAgICovXG4gIHF1b3RlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWVcblxuICAgIGNvbnN0IGVzY2FwZWRWYWx1ZSA9IHRoaXMuZXNjYXBlKHZhbHVlKVxuICAgIGNvbnN0IHJlc3VsdCA9IGBcIiR7ZXNjYXBlZFZhbHVlfVwiYFxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBxdW90ZUNvbHVtbihjb2x1bW5OYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucygpLnF1b3RlQ29sdW1uTmFtZShjb2x1bW5OYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBxdW90ZUluZGV4KGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zKCkucXVvdGVJbmRleE5hbWUoY29sdW1uTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBxdW90ZVRhYmxlKHRhYmxlTmFtZSkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMoKS5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1F1ZXJ5fVxuICAgKi9cbiAgbmV3UXVlcnkoKSB7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBIYW5kbGVyKClcblxuICAgIHJldHVybiBuZXcgUXVlcnkoe1xuICAgICAgZHJpdmVyOiB0aGlzLFxuICAgICAgaGFuZGxlclxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxRdWVyeVJlc3VsdFR5cGU+fVxuICAgKi9cbiAgYXN5bmMgc2VsZWN0KHRhYmxlTmFtZSkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5uZXdRdWVyeSgpXG5cbiAgICBjb25zdCBzcWwgPSBxdWVyeVxuICAgICAgLmZyb20odGFibGVOYW1lKVxuICAgICAgLnRvU3FsKClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gbmV3SWRTZXFcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXRJZFNlcShuZXdJZFNlcSkge1xuICAgIHRoaXMuaWRTZXEgPSBuZXdJZFNlcVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNob3VsZFNldEF1dG9JbmNyZW1lbnRXaGVuUHJpbWFyeUtleSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCdzaG91bGRTZXRBdXRvSW5jcmVtZW50V2hlblByaW1hcnlLZXknIG5vdCBpbXBsZW1lbnRlZGApXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdXBwb3J0c0RlZmF1bHRQcmltYXJ5S2V5VVVJRCgpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3VwcG9ydHNJbnNlcnRJbnRvUmV0dXJuaW5nKCkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgdGFibGVFeGlzdHModGFibGVOYW1lKSB7XG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5nZXRUYWJsZXMoKVxuICAgIGNvbnN0IHRhYmxlID0gdGFibGVzLmZpbmQoKHRhYmxlKSA9PiB0YWJsZS5nZXROYW1lKCkgPT0gdGFibGVOYW1lKVxuXG4gICAgaWYgKHRhYmxlKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgYXN5bmMgdHJhbnNhY3Rpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBzYXZlUG9pbnROYW1lID0gdGhpcy5nZW5lcmF0ZVNhdmVQb2ludE5hbWUoKVxuICAgIGxldCB0cmFuc2FjdGlvblN0YXJ0ZWQgPSBmYWxzZVxuICAgIGxldCBzYXZlUG9pbnRTdGFydGVkID0gZmFsc2VcblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbnNDb3VudCA9PSAwKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlN0YXJ0IHRyYW5zYWN0aW9uXCIpXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VHJhbnNhY3Rpb24oKVxuICAgICAgdHJhbnNhY3Rpb25TdGFydGVkID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlN0YXJ0IHNhdmVwb2ludFwiLCBzYXZlUG9pbnROYW1lKVxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNhdmVQb2ludChzYXZlUG9pbnROYW1lKVxuICAgICAgc2F2ZVBvaW50U3RhcnRlZCA9IHRydWVcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbGJhY2soKVxuXG4gICAgICBpZiAoc2F2ZVBvaW50U3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlJlbGVhc2Ugc2F2ZXBvaW50XCIsIHNhdmVQb2ludE5hbWUpXG4gICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZVNhdmVQb2ludChzYXZlUG9pbnROYW1lKVxuICAgICAgfVxuXG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFydGVkKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiQ29tbWl0IHRyYW5zYWN0aW9uXCIpXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlRyYW5zYWN0aW9uIGVycm9yXCIsIGVycm9yLm1lc3NhZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlRyYW5zYWN0aW9uIGVycm9yXCIsIGVycm9yKVxuICAgICAgfVxuXG4gICAgICBsZXQgdHJhbnNhY3Rpb25Sb2xsZWRCYWNrID0gZmFsc2VcblxuICAgICAgaWYgKHNhdmVQb2ludFN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJSb2xsYmFjayBzYXZlcG9pbnRcIiwgc2F2ZVBvaW50TmFtZSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrU2F2ZVBvaW50KHNhdmVQb2ludE5hbWUpXG4gICAgICAgIH0gY2F0Y2ggKHNhdmVQb2ludEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHNhdmVQb2ludEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBzYXZlUG9pbnRFcnJvci5tZXNzYWdlIDogYCR7c2F2ZVBvaW50RXJyb3J9YFxuXG4gICAgICAgICAgLy8gTXlTUUwgc29tZXRpbWVzIGRyb3BzIHNhdmVwb2ludHMgdW5leHBlY3RlZGx5OyBmYWxsIGJhY2sgdG8gcm9sbGluZyBiYWNrIHRoZSBmdWxsIHRyYW5zYWN0aW9uXG4gICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCJTQVZFUE9JTlRcIikgfHwgbWVzc2FnZS5pbmNsdWRlcyhcIkVSX1NQX0RPRVNfTk9UX0VYSVNUXCIpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIlNhdmVwb2ludCByb2xsYmFjayBmYWlsZWQ7IHJvbGxpbmcgYmFjayBlbnRpcmUgdHJhbnNhY3Rpb24gaW5zdGVhZFwiKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKClcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uUm9sbGVkQmFjayA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgc2F2ZVBvaW50RXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhcnRlZCAmJiAhdHJhbnNhY3Rpb25Sb2xsZWRCYWNrKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiUm9sbGJhY2sgdHJhbnNhY3Rpb25cIilcbiAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKClcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdGFydFRyYW5zYWN0aW9uKCkge1xuICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uc0FjdGlvbnNNdXRleC5zeW5jKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0VHJhbnNhY3Rpb25BY3Rpb24oKVxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb25zQ291bnQrK1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfc3RhcnRUcmFuc2FjdGlvbkFjdGlvbigpIHtcbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiQkVHSU4gVFJBTlNBQ1RJT05cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGNvbW1pdFRyYW5zYWN0aW9uKCkge1xuICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uc0FjdGlvbnNNdXRleC5zeW5jKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX2NvbW1pdFRyYW5zYWN0aW9uQWN0aW9uKClcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uc0NvdW50LS1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgX2NvbW1pdFRyYW5zYWN0aW9uQWN0aW9uKCkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXCJDT01NSVRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFF1ZXJ5UmVzdWx0VHlwZT59XG4gICAqL1xuICBhc3luYyBxdWVyeShzcWwpIHtcbiAgICBsZXQgdHJpZXMgPSAwXG5cbiAgICB3aGlsZSh0cmllcyA8IDUpIHtcbiAgICAgIHRyaWVzKytcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3F1ZXJ5QWN0dWFsKHNxbClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIHRyaWVzIDwgNSAmJiB0aGlzLnJldHJ5YWJsZURhdGFiYXNlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApXG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgUmV0cnlpbmcgcXVlcnkgYmVjYXVzZSBmYWlsZWQgd2l0aDogJHtlcnJvci5zdGFja31gKVxuICAgICAgICAgIC8vIFJldHJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIidxdWVyeScgdW5leHBlY3RlZCBjYW1lIGhlcmVcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxRdWVyeVJlc3VsdFR5cGU+fVxuICAgKi9cbiAgX3F1ZXJ5QWN0dWFsKHNxbCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKGBxdWVyeUFjdHVhbCBub3QgaW1wbGVtZW50ZWRgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1F1ZXJ5fSBfcXVlcnlcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHF1ZXJ5VG9TcWwoX3F1ZXJ5KSB7IHRocm93IG5ldyBFcnJvcihcInF1ZXJ5VG9TcWwgbm90IGltcGxlbWVudGVkXCIpIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vycm9yfSBfZXJyb3JcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXRyeWFibGVEYXRhYmFzZUVycm9yKF9lcnJvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByb2xsYmFja1RyYW5zYWN0aW9uKCkge1xuICAgIGF3YWl0IHRoaXMuX3RyYW5zYWN0aW9uc0FjdGlvbnNNdXRleC5zeW5jKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX3JvbGxiYWNrVHJhbnNhY3Rpb25BY3Rpb24oKVxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb25zQ291bnQtLVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfcm9sbGJhY2tUcmFuc2FjdGlvbkFjdGlvbigpIHtcbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiUk9MTEJBQ0tcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2VuZXJhdGVTYXZlUG9pbnROYW1lKCkge1xuICAgIHJldHVybiBgc3Ake25ldyBVVUlEKDQpLmZvcm1hdCgpLnJlcGxhY2VBbGwoXCItXCIsIFwiXCIpfWBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVBvaW50TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0U2F2ZVBvaW50KHNhdmVQb2ludE5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbnNBY3Rpb25zTXV0ZXguc3luYyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9zdGFydFNhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNhdmVQb2ludE5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfc3RhcnRTYXZlUG9pbnRBY3Rpb24oc2F2ZVBvaW50TmFtZSkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoYFNBVkVQT0lOVCAke3NhdmVQb2ludE5hbWV9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGRDb2x1bW5OYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdDb2x1bW5OYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVuYW1lQ29sdW1uKHRhYmxlTmFtZSwgb2xkQ29sdW1uTmFtZSwgbmV3Q29sdW1uTmFtZSkge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKG9sZENvbHVtbk5hbWUpXG5cbiAgICB0YWJsZUNvbHVtbi5zZXROZXdOYW1lKG5ld0NvbHVtbk5hbWUpXG5cbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4odGFibGVDb2x1bW4pXG5cbiAgICBjb25zdCBhbHRlclRhYmxlU1FMcyA9IGF3YWl0IHRoaXMuYWx0ZXJUYWJsZVNRTHModGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBhbHRlclRhYmxlU1FMIG9mIGFsdGVyVGFibGVTUUxzKSB7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KGFsdGVyVGFibGVTUUwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlUG9pbnROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVsZWFzZVNhdmVQb2ludChzYXZlUG9pbnROYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5fdHJhbnNhY3Rpb25zQWN0aW9uc011dGV4LnN5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fcmVsZWFzZVNhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNhdmVQb2ludE5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfcmVsZWFzZVNhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoYFJFTEVBU0UgU0FWRVBPSU5UICR7c2F2ZVBvaW50TmFtZX1gKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBgJHtlcnJvcn1gXG5cbiAgICAgIC8vIFNhdmVwb2ludCBtYXkgYWxyZWFkeSBiZSBnb25lIGlmIHRoZSBkYXRhYmFzZSByb2xsZWQgYmFjayBhdXRvbWF0aWNhbGx5XG4gICAgICBpZiAobWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwic2F2ZXBvaW50XCIpICYmIG1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImRvZXMgbm90IGV4aXN0XCIpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBSZWxlYXNlIHNhdmVwb2ludCBpZ25vcmVkIGJlY2F1c2UgaXQgbm8gbG9uZ2VyIGV4aXN0czogJHtzYXZlUG9pbnROYW1lfWApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVBvaW50TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHJvbGxiYWNrU2F2ZVBvaW50KHNhdmVQb2ludE5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLl90cmFuc2FjdGlvbnNBY3Rpb25zTXV0ZXguc3luYyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9yb2xsYmFja1NhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNhdmVQb2ludE5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfcm9sbGJhY2tTYXZlUG9pbnRBY3Rpb24oc2F2ZVBvaW50TmFtZSkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoYFJPTExCQUNLIFRPIFNBVkVQT0lOVCAke3NhdmVQb2ludE5hbWV9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHRydW5jYXRlQWxsVGFibGVzKCkge1xuICAgIGF3YWl0IHRoaXMud2l0aERpc2FibGVkRm9yZWlnbktleXMoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHRyaWVzID0gMFxuXG4gICAgICB3aGlsZSh0cmllcyA8PSA1KSB7XG4gICAgICAgIHRyaWVzKytcblxuICAgICAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmdldFRhYmxlcygpXG4gICAgICAgIGNvbnN0IHRydW5jYXRlRXJyb3JzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuICAgICAgICAgIGlmICh0YWJsZS5nZXROYW1lKCkgIT0gXCJzY2hlbWFfbWlncmF0aW9uc1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCB0YWJsZS50cnVuY2F0ZSh7Y2FzY2FkZTogdHJ1ZX0pXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgICB0cnVuY2F0ZUVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cnVuY2F0ZUVycm9ycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodHJpZXMgPD0gNSkge1xuICAgICAgICAgIC8vIFJldHJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdHJ1bmNhdGVFcnJvcnNbMF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtVcGRhdGVTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZShhcmdzKSB7XG4gICAgY29uc3Qgc3FsID0gdGhpcy51cGRhdGVTcWwoYXJncylcblxuICAgIGF3YWl0IHRoaXMucXVlcnkoc3FsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1VwZGF0ZVNxbEFyZ3NUeXBlfSBhcmdzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB1cGRhdGVTcWwoYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2Rpc2FibGVGb3JlaWduS2V5cycgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZGlzYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidkaXNhYmxlRm9yZWlnbktleXMnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGVuYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidlbmFibGVGb3JlaWduS2V5cycgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIHdpdGhEaXNhYmxlZEZvcmVpZ25LZXlzKGNhbGxiYWNrKSB7XG4gICAgYXdhaXQgdGhpcy5kaXNhYmxlRm9yZWlnbktleXMoKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5hYmxlRm9yZWlnbktleXMoKVxuICAgIH1cbiAgfVxufVxuIl19
@@ -10,6 +10,9 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
10
10
  });
11
11
  models: import("../../record/index.js").default[];
12
12
  relationship: import("../../record/relationships/belongs-to.js").default;
13
- run(): Promise<import("../../record/index.js").default[]>;
13
+ run(): Promise<import("../../record/index.js").default[] | {
14
+ targetModels: import("../../record/index.js").default[];
15
+ targetModelsByClassName: Record<string, import("../../record/index.js").default[]>;
16
+ }>;
14
17
  }
15
18
  //# sourceMappingURL=belongs-to.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/belongs-to.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE;QACwB,YAAY,EAA7E,OAAO,0CAA0C,EAAE,OAAO;KACpE,EAMA;IAFC,kDAAoB;IACpB,yEAAgC;IAGlC,0DA4CC;CACF"}
1
+ {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/belongs-to.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE;QACwB,YAAY,EAA7E,OAAO,0CAA0C,EAAE,OAAO;KACpE,EAMA;IAFC,kDAAoB;IACpB,yEAAgC;IAGlC;;;OAgHC;CACF"}
@@ -12,9 +12,62 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
12
12
  this.relationship = relationship;
13
13
  }
14
14
  async run() {
15
+ const foreignKey = this.relationship.getForeignKey();
16
+ const primaryKey = this.relationship.getPrimaryKey();
17
+ if (this.relationship.getPolymorphic()) {
18
+ const typeColumn = this.relationship.getPolymorphicTypeColumn();
19
+ const configuration = this.relationship.getConfiguration();
20
+ /** @type {{foreignKeyValue: number | string | undefined, model: import("../../record/index.js").default, targetType: string | undefined}[]} */
21
+ const modelMeta = [];
22
+ for (const model of this.models) {
23
+ modelMeta.push({
24
+ foreignKeyValue: model.readColumn(foreignKey),
25
+ model,
26
+ targetType: model.readColumn(typeColumn)
27
+ });
28
+ }
29
+ /** @type {Record<string, Array<number | string>>} */
30
+ const foreignKeyValuesByType = {};
31
+ for (const meta of modelMeta) {
32
+ if (meta.targetType === undefined || meta.targetType === null)
33
+ continue;
34
+ if (meta.foreignKeyValue === undefined || meta.foreignKeyValue === null)
35
+ continue;
36
+ if (!foreignKeyValuesByType[meta.targetType])
37
+ foreignKeyValuesByType[meta.targetType] = [];
38
+ if (!foreignKeyValuesByType[meta.targetType].includes(meta.foreignKeyValue))
39
+ foreignKeyValuesByType[meta.targetType].push(meta.foreignKeyValue);
40
+ }
41
+ /** @type {Record<string, Record<number | string, import("../../record/index.js").default>>} */
42
+ const targetModelsByTypeAndId = {};
43
+ /** @type {Record<string, import("../../record/index.js").default[]>} */
44
+ const targetModelsByClassName = {};
45
+ /** @type {import("../../record/index.js").default[]} */
46
+ const targetModels = [];
47
+ for (const targetType in foreignKeyValuesByType) {
48
+ const targetModelClass = configuration.getModelClass(targetType);
49
+ /** @type {Record<string, any>} */
50
+ const whereArgs = {};
51
+ whereArgs[primaryKey] = foreignKeyValuesByType[targetType];
52
+ const foundTargetModels = await targetModelClass.where(whereArgs).toArray();
53
+ targetModels.push(...foundTargetModels);
54
+ targetModelsByClassName[targetModelClass.name] = foundTargetModels;
55
+ targetModelsByTypeAndId[targetType] = {};
56
+ for (const targetModel of foundTargetModels) {
57
+ const primaryKeyValue = targetModel.readColumn(primaryKey);
58
+ targetModelsByTypeAndId[targetType][primaryKeyValue] = targetModel;
59
+ }
60
+ }
61
+ for (const meta of modelMeta) {
62
+ const modelRelationship = meta.model.getRelationshipByName(this.relationship.getRelationshipName());
63
+ const targetModel = meta.targetType ? targetModelsByTypeAndId[meta.targetType]?.[meta.foreignKeyValue] : undefined;
64
+ modelRelationship.setPreloaded(true);
65
+ modelRelationship.setLoaded(targetModel);
66
+ }
67
+ return { targetModels, targetModelsByClassName };
68
+ }
15
69
  /** @type {Array<number | string>} */
16
70
  const foreignKeyValues = [];
17
- const foreignKey = this.relationship.getForeignKey();
18
71
  for (const model of this.models) {
19
72
  const foreignKeyValue = model.readColumn(foreignKey);
20
73
  if (!foreignKeyValues.includes(foreignKeyValue))
@@ -22,7 +75,6 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
22
75
  }
23
76
  /** @type {Record<string, any>} */
24
77
  const whereArgs = {};
25
- const primaryKey = this.relationship.getPrimaryKey();
26
78
  whereArgs[primaryKey] = foreignKeyValues;
27
79
  const targetModelClass = this.relationship.getTargetModelClass();
28
80
  if (!targetModelClass)
@@ -46,4 +98,4 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
46
98
  return targetModels;
47
99
  }
48
100
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9wcmVsb2FkZXIvYmVsb25ncy10by5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTyx3Q0FBd0M7SUFDM0Q7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxxQ0FBcUM7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUVwRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRXBELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRXBELFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQTtRQUV4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBRWpHLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUV0RSxzRUFBc0U7UUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFFM0IsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtZQUVqRixnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLENBQUE7UUFDakQsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3BELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ3JELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1lBRTlGLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNwQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlckJlbG9uZ3NUbyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmVsb25ncy10by5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlbGF0aW9uc2hpcFxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21vZGVscywgcmVsYXRpb25zaGlwLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzID0gW11cbiAgICBjb25zdCBmb3JlaWduS2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSBtb2RlbC5yZWFkQ29sdW1uKGZvcmVpZ25LZXkpXG5cbiAgICAgIGlmICghZm9yZWlnbktleVZhbHVlcy5pbmNsdWRlcyhmb3JlaWduS2V5VmFsdWUpKSBmb3JlaWduS2V5VmFsdWVzLnB1c2goZm9yZWlnbktleVZhbHVlKVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICBjb25zdCB3aGVyZUFyZ3MgPSB7fVxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KClcblxuICAgIHdoZXJlQXJnc1twcmltYXJ5S2V5XSA9IGZvcmVpZ25LZXlWYWx1ZXNcblxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgLy8gTG9hZCB0YXJnZXQgbW9kZWxzIHRvIGJlIHByZWxvYWRlZCBvbiB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxzID0gYXdhaXQgdGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpLnRvQXJyYXkoKVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59ICovXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlJZCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldE1vZGVsIG9mIHRhcmdldE1vZGVscykge1xuICAgICAgY29uc3QgcHJpbWFyeUtleVZhbHVlID0gdGFyZ2V0TW9kZWwucmVhZENvbHVtbih0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KCkpXG5cbiAgICAgIHRhcmdldE1vZGVsc0J5SWRbcHJpbWFyeUtleVZhbHVlXSA9IHRhcmdldE1vZGVsXG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YXJnZXQgcHJlbG9hZGVkIG1vZGVscyBvbiB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiB0aGlzLm1vZGVscykge1xuICAgICAgY29uc3QgZm9yZWlnbktleVZhbHVlID0gbW9kZWwucmVhZENvbHVtbihmb3JlaWduS2V5KVxuICAgICAgY29uc3QgdGFyZ2V0TW9kZWwgPSB0YXJnZXRNb2RlbHNCeUlkW2ZvcmVpZ25LZXlWYWx1ZV1cbiAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQodGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vZGVsc1xuICB9XG59XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9wcmVsb2FkZXIvYmVsb25ncy10by5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTyx3Q0FBd0M7SUFDM0Q7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUUxRCwrSUFBK0k7WUFDL0ksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1lBRXBCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNiLGVBQWUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztvQkFDN0MsS0FBSztvQkFDTCxVQUFVLEVBQUUsS0FBSyxD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Q3JELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1lBRTlGLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNwQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlckJlbG9uZ3NUbyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmVsb25ncy10by5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlbGF0aW9uc2hpcFxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21vZGVscywgcmVsYXRpb25zaGlwLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0Q29uZmlndXJhdGlvbigpXG5cbiAgICAgIC8qKiBAdHlwZSB7e2ZvcmVpZ25LZXlWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBtb2RlbDogaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIHRhcmdldFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZH1bXX0gKi9cbiAgICAgIGNvbnN0IG1vZGVsTWV0YSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgICAgbW9kZWxNZXRhLnB1c2goe1xuICAgICAgICAgIGZvcmVpZ25LZXlWYWx1ZTogbW9kZWwucmVhZENvbHVtbihmb3JlaWduS2V5KSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB0YXJnZXRUeXBlOiBtb2RlbC5yZWFkQ29sdW1uKHR5cGVDb2x1bW4pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgQXJyYXk8bnVtYmVyIHwgc3RyaW5nPj59ICovXG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzQnlUeXBlID0ge31cblxuICAgICAgZm9yIChjb25zdCBtZXRhIG9mIG1vZGVsTWV0YSkge1xuICAgICAgICBpZiAobWV0YS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgfHwgbWV0YS50YXJnZXRUeXBlID09PSBudWxsKSBjb250aW51ZVxuICAgICAgICBpZiAobWV0YS5mb3JlaWduS2V5VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBtZXRhLmZvcmVpZ25LZXlWYWx1ZSA9PT0gbnVsbCkgY29udGludWVcblxuICAgICAgICBpZiAoIWZvcmVpZ25LZXlWYWx1ZXNCeVR5cGVbbWV0YS50YXJnZXRUeXBlXSkgZm9yZWlnbktleVZhbHVlc0J5VHlwZVttZXRhLnRhcmdldFR5cGVdID0gW11cbiAgICAgICAgaWYgKCFmb3JlaWduS2V5VmFsdWVzQnlUeXBlW21ldGEudGFyZ2V0VHlwZV0uaW5jbHVkZXMobWV0YS5mb3JlaWduS2V5VmFsdWUpKSBmb3JlaWduS2V5VmFsdWVzQnlUeXBlW21ldGEudGFyZ2V0VHlwZV0ucHVzaChtZXRhLmZvcmVpZ25LZXlWYWx1ZSlcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlUeXBlQW5kSWQgPSB7fVxuXG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W10+fSAqL1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlDbGFzc05hbWUgPSB7fVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldFR5cGUgaW4gZm9yZWlnbktleVZhbHVlc0J5VHlwZSkge1xuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gY29uZmlndXJhdGlvbi5nZXRNb2RlbENsYXNzKHRhcmdldFR5cGUpXG5cbiAgICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgICAgICBjb25zdCB3aGVyZUFyZ3MgPSB7fVxuXG4gICAgICAgIHdoZXJlQXJnc1twcmltYXJ5S2V5XSA9IGZvcmVpZ25LZXlWYWx1ZXNCeVR5cGVbdGFyZ2V0VHlwZV1cblxuICAgICAgICBjb25zdCBmb3VuZFRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgICAgICB0YXJnZXRNb2RlbHMucHVzaCguLi5mb3VuZFRhcmdldE1vZGVscylcbiAgICAgICAgdGFyZ2V0TW9kZWxzQnlDbGFzc05hbWVbdGFyZ2V0TW9kZWxDbGFzcy5uYW1lXSA9IGZvdW5kVGFyZ2V0TW9kZWxzXG4gICAgICAgIHRhcmdldE1vZGVsc0J5VHlwZUFuZElkW3RhcmdldFR5cGVdID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldE1vZGVsIG9mIGZvdW5kVGFyZ2V0TW9kZWxzKSB7XG4gICAgICAgICAgY29uc3QgcHJpbWFyeUtleVZhbHVlID0gdGFyZ2V0TW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KVxuXG4gICAgICAgICAgdGFyZ2V0TW9kZWxzQnlUeXBlQW5kSWRbdGFyZ2V0VHlwZV1bcHJpbWFyeUtleVZhbHVlXSA9IHRhcmdldE1vZGVsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBtZXRhIG9mIG1vZGVsTWV0YSkge1xuICAgICAgICBjb25zdCBtb2RlbFJlbGF0aW9uc2hpcCA9IG1ldGEubW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWwgPSBtZXRhLnRhcmdldFR5cGUgPyB0YXJnZXRNb2RlbHNCeVR5cGVBbmRJZFttZXRhLnRhcmdldFR5cGVdPy5bbWV0YS5mb3JlaWduS2V5VmFsdWVdIDogdW5kZWZpbmVkXG5cbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldExvYWRlZCh0YXJnZXRNb2RlbClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHt0YXJnZXRNb2RlbHMsIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lfVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzID0gW11cblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSlcblxuICAgICAgaWYgKCFmb3JlaWduS2V5VmFsdWVzLmluY2x1ZGVzKGZvcmVpZ25LZXlWYWx1ZSkpIGZvcmVpZ25LZXlWYWx1ZXMucHVzaChmb3JlaWduS2V5VmFsdWUpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbcHJpbWFyeUtleV0gPSBmb3JlaWduS2V5VmFsdWVzXG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhcmdldCBtb2RlbCBjbGFzcyBjb3VsZCBiZSBnb3R0ZW4gZnJvbSByZWxhdGlvbnNoaXBcIilcblxuICAgIC8vIExvYWQgdGFyZ2V0IG1vZGVscyB0byBiZSBwcmVsb2FkZWQgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIGNvbnN0IHRhcmdldE1vZGVsc0J5SWQgPSB7fVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiB0YXJnZXRNb2RlbHMpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IHRhcmdldE1vZGVsLnJlYWRDb2x1bW4odGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpKVxuXG4gICAgICB0YXJnZXRNb2RlbHNCeUlkW3ByaW1hcnlLZXlWYWx1ZV0gPSB0YXJnZXRNb2RlbFxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFyZ2V0IHByZWxvYWRlZCBtb2RlbHMgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSlcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsID0gdGFyZ2V0TW9kZWxzQnlJZFtmb3JlaWduS2V5VmFsdWVdXG4gICAgICBjb25zdCBtb2RlbFJlbGF0aW9uc2hpcCA9IG1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSh0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG5cbiAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldFByZWxvYWRlZCh0cnVlKVxuICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0TG9hZGVkKHRhcmdldE1vZGVsKVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb2RlbHNcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/has-many.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE;QACsB,YAAY,EAA3E,OAAO,wCAAwC,EAAE,OAAO;KAClE,EAMA;IAFC,kDAAoB;IACpB,uEAAgC;IAGlC,0DAgEC;CACF"}
1
+ {"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/has-many.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE;QACsB,YAAY,EAA3E,OAAO,wCAAwC,EAAE,OAAO;KAClE,EAMA;IAFC,kDAAoB;IACpB,uEAAgC;IAGlC,0DAsEC;CACF"}
@@ -35,6 +35,10 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
35
35
  /** @type {Record<string, any>} */
36
36
  const whereArgs = {};
37
37
  whereArgs[foreignKey] = modelsPrimaryKeyValues;
38
+ if (this.relationship.getPolymorphic()) {
39
+ const typeColumn = this.relationship.getPolymorphicTypeColumn();
40
+ whereArgs[typeColumn] = this.relationship.getModelClass().name;
41
+ }
38
42
  const targetModelClass = this.relationship.getTargetModelClass();
39
43
  if (!targetModelClass)
40
44
  throw new Error("No target model class could be gotten from relationship");
@@ -61,4 +65,4 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
61
65
  return targetModels;
62
66
  }
63
67
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvcHJlbG9hZGVyL2hhcy1tYW55LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUU3RCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0MsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLHFDQUFxQztRQUNyQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQTtRQUVqQyxzRkFBc0Y7UUFDdEYsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUE7UUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRXBELHNGQUFzRjtRQUN0RixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtRQUNwSSxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUVwRCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFeEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ25HLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSx1QkFBdUIsQ0FBQztnQkFBRSx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFaEcsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQTtRQUU5QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBRWpHLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUV0RSxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFOUYsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO2dCQUNwRCxDQUFDO2dCQUVELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlckhhc01hbnkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLm1vZGVsc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bW9kZWxzLCByZWxhdGlvbnNoaXAsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVscyA9IG1vZGVsc1xuICAgIHRoaXMucmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlID0ge31cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIgfCBzdHJpbmcsIEFycmF5PGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgY29uc3QgcHJlbG9hZENvbGxlY3Rpb25zID0ge31cblxuICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gZG9lc24ndCBoYXZlIGEgcHJpbWFyeSBrZXlgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSlcblxuICAgICAgcHJlbG9hZENvbGxlY3Rpb25zW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBpZiAoIW1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMuaW5jbHVkZXMocHJpbWFyeUtleVZhbHVlKSkgbW9kZWxzUHJpbWFyeUtleVZhbHVlcy5wdXNoKHByaW1hcnlLZXlWYWx1ZSlcbiAgICAgIGlmICghKHByaW1hcnlLZXlWYWx1ZSBpbiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbZm9yZWlnbktleV0gPSBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzXG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhcmdldCBtb2RlbCBjbGFzcyBjb3VsZCBiZSBnb3R0ZW4gZnJvbSByZWxhdGlvbnNoaXBcIilcblxuICAgIC8vIExvYWQgdGFyZ2V0IG1vZGVscyB0byBiZSBwcmVsb2FkZWQgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0TW9kZWwgb2YgdGFyZ2V0TW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSB0YXJnZXRNb2RlbC5yZWFkQ29sdW1uKGZvcmVpZ25LZXkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1tmb3JlaWduS2V5VmFsdWVdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YXJnZXQgcHJlbG9hZGVkIG1vZGVscyBvbiB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAgZm9yIChjb25zdCBtb2RlbFZhbHVlIGluIHByZWxvYWRDb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgcHJlbG9hZGVkQ29sbGVjdGlvbiA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICBpZiAocHJlbG9hZGVkQ29sbGVjdGlvbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldExvYWRlZChbXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5hZGRUb0xvYWRlZChwcmVsb2FkZWRDb2xsZWN0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vZGVsc1xuICB9XG59XG4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvcHJlbG9hZGVyL2hhcy1tYW55LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUU3RCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0MsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLHFDQUFxQztRQUNyQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQTtRQUVqQyxzRkFBc0Y7UUFDdEYsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUE7UUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRXBELHNGQUFzRjtRQUN0RixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtRQUNwSSxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUVwRCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFeEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ25HLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSx1QkFBdUIsQ0FBQztnQkFBRSx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFaEcsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQTtRQUU5QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLENBQUE7WUFFL0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFBO1FBQ2hFLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBRWpHLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUV0RSxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFOUYsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO2dCQUNwRCxDQUFDO2dCQUVELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlckhhc01hbnkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLm1vZGVsc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bW9kZWxzLCByZWxhdGlvbnNoaXAsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVscyA9IG1vZGVsc1xuICAgIHRoaXMucmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlID0ge31cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIgfCBzdHJpbmcsIEFycmF5PGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgY29uc3QgcHJlbG9hZENvbGxlY3Rpb25zID0ge31cblxuICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gZG9lc24ndCBoYXZlIGEgcHJpbWFyeSBrZXlgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSlcblxuICAgICAgcHJlbG9hZENvbGxlY3Rpb25zW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBpZiAoIW1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMuaW5jbHVkZXMocHJpbWFyeUtleVZhbHVlKSkgbW9kZWxzUHJpbWFyeUtleVZhbHVlcy5wdXNoKHByaW1hcnlLZXlWYWx1ZSlcbiAgICAgIGlmICghKHByaW1hcnlLZXlWYWx1ZSBpbiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbZm9yZWlnbktleV0gPSBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG5cbiAgICAgIHdoZXJlQXJnc1t0eXBlQ29sdW1uXSA9IHRoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHRoaXMucmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YXJnZXQgbW9kZWwgY2xhc3MgY291bGQgYmUgZ290dGVuIGZyb20gcmVsYXRpb25zaGlwXCIpXG5cbiAgICAvLyBMb2FkIHRhcmdldCBtb2RlbHMgdG8gYmUgcHJlbG9hZGVkIG9uIHRoZSBnaXZlbiBtb2RlbHNcbiAgICBjb25zdCB0YXJnZXRNb2RlbHMgPSBhd2FpdCB0YXJnZXRNb2RlbENsYXNzLndoZXJlKHdoZXJlQXJncykudG9BcnJheSgpXG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldE1vZGVsIG9mIHRhcmdldE1vZGVscykge1xuICAgICAgY29uc3QgZm9yZWlnbktleVZhbHVlID0gdGFyZ2V0TW9kZWwucmVhZENvbHVtbihmb3JlaWduS2V5KVxuXG4gICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbZm9yZWlnbktleVZhbHVlXS5wdXNoKHRhcmdldE1vZGVsKVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFyZ2V0IHByZWxvYWRlZCBtb2RlbHMgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGZvciAoY29uc3QgbW9kZWxWYWx1ZSBpbiBwcmVsb2FkQ29sbGVjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHByZWxvYWRlZENvbGxlY3Rpb24gPSBwcmVsb2FkQ29sbGVjdGlvbnNbbW9kZWxWYWx1ZV1cblxuICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVttb2RlbFZhbHVlXSkge1xuICAgICAgICBjb25zdCBtb2RlbFJlbGF0aW9uc2hpcCA9IG1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSh0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG5cbiAgICAgICAgaWYgKHByZWxvYWRlZENvbGxlY3Rpb24ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQoW10pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuYWRkVG9Mb2FkZWQocHJlbG9hZGVkQ29sbGVjdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldFByZWxvYWRlZCh0cnVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb2RlbHNcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"has-one.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/has-one.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAA6D,MAAM,EAA3D,KAAK,CAAC,OAAO,uBAAuB,EAAE,OAAO,CAAC;QACgB,YAAY,EAA1E,OAAO,uCAAuC,EAAE,OAAO;KACjE,EAMA;IAFC,kDAAoB;IACpB,sEAAgC;IAGlC,0DAuDC;CACF"}
1
+ {"version":3,"file":"has-one.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/has-one.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAA6D,MAAM,EAA3D,KAAK,CAAC,OAAO,uBAAuB,EAAE,OAAO,CAAC;QACgB,YAAY,EAA1E,OAAO,uCAAuC,EAAE,OAAO;KACjE,EAMA;IAFC,kDAAoB;IACpB,sEAAgC;IAGlC,0DA6DC;CACF"}
@@ -32,6 +32,10 @@ export default class VelociousDatabaseQueryPreloaderHasOne {
32
32
  /** @type {Record<string, any>} */
33
33
  const whereArgs = {};
34
34
  whereArgs[foreignKey] = modelsPrimaryKeyValues;
35
+ if (this.relationship.getPolymorphic()) {
36
+ const typeColumn = this.relationship.getPolymorphicTypeColumn();
37
+ whereArgs[typeColumn] = this.relationship.getModelClass().name;
38
+ }
35
39
  const targetModelClass = this.relationship.getTargetModelClass();
36
40
  if (!targetModelClass)
37
41
  throw new Error("No target model class could be gotten from relationship");
@@ -53,4 +57,4 @@ export default class VelociousDatabaseQueryPreloaderHasOne {
53
57
  return targetModels;
54
58
  }
55
59
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9wcmVsb2FkZXIvaGFzLW9uZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBcUM7SUFDeEQ7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxxQ0FBcUM7UUFDckMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUE7UUFFakMsc0ZBQXNGO1FBQ3RGLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFBO1FBRWxDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUVwRCwyRkFBMkY7UUFDM0YsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFFN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUVwRCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxTQUFTLENBQUE7WUFFL0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ25HLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSx1QkFBdUIsQ0FBQztnQkFBRSx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFaEcsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQTtRQUU5QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBRWpHLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUV0RSxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsV0FBVyxDQUFBO1FBQ25ELENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRXJELEtBQUssTUFBTSxLQUFLLElBQUksdUJBQXVCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUE7Z0JBRTlGLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDcEMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5UHJlbG9hZGVySGFzT25lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7QXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSBhcmdzLm1vZGVsc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1vbmUuanNcIikuZGVmYXVsdH0gYXJncy5yZWxhdGlvbnNoaXBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbHMsIHJlbGF0aW9uc2hpcCwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIHRoaXMubW9kZWxzID0gbW9kZWxzXG4gICAgdGhpcy5yZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBcbiAgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICAvKiogQHR5cGUge0FycmF5PG51bWJlciB8IHN0cmluZz59ICovXG4gICAgY29uc3QgbW9kZWxzUHJpbWFyeUtleVZhbHVlcyA9IFtdXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIgfCBzdHJpbmcsIEFycmF5PGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgY29uc3QgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWUgPSB7fVxuXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMucmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXkoKVxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQ+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRDb2xsZWN0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBjb25zdCBwcmltYXJ5S2V5VmFsdWUgPSBtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1twcmltYXJ5S2V5VmFsdWVdID0gdW5kZWZpbmVkXG5cbiAgICAgIGlmICghbW9kZWxzUHJpbWFyeUtleVZhbHVlcy5pbmNsdWRlcyhwcmltYXJ5S2V5VmFsdWUpKSBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzLnB1c2gocHJpbWFyeUtleVZhbHVlKVxuICAgICAgaWYgKCEocHJpbWFyeUtleVZhbHVlIGluIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlKSkgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWVbcHJpbWFyeUtleVZhbHVlXSA9IFtdXG5cbiAgICAgIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0ucHVzaChtb2RlbClcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1tmb3JlaWduS2V5XSA9IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXNcblxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgLy8gTG9hZCB0YXJnZXQgbW9kZWxzIHRvIGJlIHByZWxvYWRlZCBvbiB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxzID0gYXdhaXQgdGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpLnRvQXJyYXkoKVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiB0YXJnZXRNb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlWYWx1ZSA9IHRhcmdldE1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSlcblxuICAgICAgcHJlbG9hZENvbGxlY3Rpb25zW2ZvcmVpZ25LZXlWYWx1ZV0gPSB0YXJnZXRNb2RlbFxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFyZ2V0IHByZWxvYWRlZCBtb2RlbHMgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGZvciAoY29uc3QgbW9kZWxWYWx1ZSBpbiBwcmVsb2FkQ29sbGVjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHByZWxvYWRlZE1vZGVsID0gcHJlbG9hZENvbGxlY3Rpb25zW21vZGVsVmFsdWVdXG5cbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWVbbW9kZWxWYWx1ZV0pIHtcbiAgICAgICAgY29uc3QgbW9kZWxSZWxhdGlvbnNoaXAgPSBtb2RlbC5nZXRSZWxhdGlvbnNoaXBCeU5hbWUodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpKVxuXG4gICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldFByZWxvYWRlZCh0cnVlKVxuICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQocHJlbG9hZGVkTW9kZWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vZGVsc1xuICB9XG59XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9wcmVsb2FkZXIvaGFzLW9uZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBcUM7SUFDeEQ7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxxQ0FBcUM7UUFDckMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUE7UUFFakMsc0ZBQXNGO1FBQ3RGLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFBO1FBRWxDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUVwRCwyRkFBMkY7UUFDM0YsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFFN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUVwRCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxTQUFTLENBQUE7WUFFL0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ25HLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSx1QkFBdUIsQ0FBQztnQkFBRSx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFaEcsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQTtRQUU5QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLENBQUE7WUFFL0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFBO1FBQ2hFLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBRWpHLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUV0RSxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsV0FBVyxDQUFBO1FBQ25ELENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRXJELEtBQUssTUFBTSxLQUFLLElBQUksdUJBQXVCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUE7Z0JBRTlGLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDcEMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5UHJlbG9hZGVySGFzT25lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7QXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSBhcmdzLm1vZGVsc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1vbmUuanNcIikuZGVmYXVsdH0gYXJncy5yZWxhdGlvbnNoaXBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbHMsIHJlbGF0aW9uc2hpcCwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIHRoaXMubW9kZWxzID0gbW9kZWxzXG4gICAgdGhpcy5yZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBcbiAgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICAvKiogQHR5cGUge0FycmF5PG51bWJlciB8IHN0cmluZz59ICovXG4gICAgY29uc3QgbW9kZWxzUHJpbWFyeUtleVZhbHVlcyA9IFtdXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIgfCBzdHJpbmcsIEFycmF5PGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgY29uc3QgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWUgPSB7fVxuXG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMucmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXkoKVxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQ+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRDb2xsZWN0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBjb25zdCBwcmltYXJ5S2V5VmFsdWUgPSBtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1twcmltYXJ5S2V5VmFsdWVdID0gdW5kZWZpbmVkXG5cbiAgICAgIGlmICghbW9kZWxzUHJpbWFyeUtleVZhbHVlcy5pbmNsdWRlcyhwcmltYXJ5S2V5VmFsdWUpKSBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzLnB1c2gocHJpbWFyeUtleVZhbHVlKVxuICAgICAgaWYgKCEocHJpbWFyeUtleVZhbHVlIGluIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlKSkgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWVbcHJpbWFyeUtleVZhbHVlXSA9IFtdXG5cbiAgICAgIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0ucHVzaChtb2RlbClcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1tmb3JlaWduS2V5XSA9IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXNcblxuICAgIGlmICh0aGlzLnJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpKSB7XG4gICAgICBjb25zdCB0eXBlQ29sdW1uID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWNUeXBlQ29sdW1uKClcblxuICAgICAgd2hlcmVBcmdzW3R5cGVDb2x1bW5dID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0TW9kZWxDbGFzcygpLm5hbWVcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhcmdldCBtb2RlbCBjbGFzcyBjb3VsZCBiZSBnb3R0ZW4gZnJvbSByZWxhdGlvbnNoaXBcIilcblxuICAgIC8vIExvYWQgdGFyZ2V0IG1vZGVscyB0byBiZSBwcmVsb2FkZWQgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0TW9kZWwgb2YgdGFyZ2V0TW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSB0YXJnZXRNb2RlbC5yZWFkQ29sdW1uKGZvcmVpZ25LZXkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1tmb3JlaWduS2V5VmFsdWVdID0gdGFyZ2V0TW9kZWxcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhcmdldCBwcmVsb2FkZWQgbW9kZWxzIG9uIHRoZSBnaXZlbiBtb2RlbHNcbiAgICBmb3IgKGNvbnN0IG1vZGVsVmFsdWUgaW4gcHJlbG9hZENvbGxlY3Rpb25zKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZWRNb2RlbCA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRQcmVsb2FkZWQodHJ1ZSlcbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0TG9hZGVkKHByZWxvYWRlZE1vZGVsKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb2RlbHNcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"preloader.d.ts","sourceRoot":"","sources":["../../../../src/database/query/preloader.js"],"names":[],"mappings":"AAOA;IACE;;;;;OAKG;IACH,0DAJG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QACE,MAAM,EAAnD,OAAO,oBAAoB,EAAE,OAAO,EAAE;QACZ,OAAO,EAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KAC7B,EAOA;IAHC,wDAA4B;IAC5B,+CAAoB;IACpB,6BAAsB;IAGxB,qBAqCC;CACF"}
1
+ {"version":3,"file":"preloader.d.ts","sourceRoot":"","sources":["../../../../src/database/query/preloader.js"],"names":[],"mappings":"AAOA;IACE;;;;;OAKG;IACH,0DAJG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QACE,MAAM,EAAnD,OAAO,oBAAoB,EAAE,OAAO,EAAE;QACZ,OAAO,EAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KAC7B,EAOA;IAHC,wDAA4B;IAC5B,+CAAoB;IACpB,6BAAsB;IAGxB,qBAuDC;CACF"}
@@ -19,35 +19,50 @@ export default class VelociousDatabaseQueryPreloader {
19
19
  async run() {
20
20
  for (const preloadRelationshipName in this.preload) {
21
21
  const relationship = this.modelClass.getRelationshipByName(preloadRelationshipName);
22
- let targetModels;
22
+ let preloadResult;
23
23
  if (relationship.getType() == "belongsTo") {
24
24
  const belongsToRelationship = /** @type {import("../record/relationships/belongs-to.js").default} */ (relationship);
25
25
  const hasManyPreloader = new BelongsToPreloader({ models: this.models, relationship: belongsToRelationship });
26
- targetModels = await hasManyPreloader.run();
26
+ preloadResult = await hasManyPreloader.run();
27
27
  }
28
28
  else if (relationship.getType() == "hasMany") {
29
29
  const hasManyRelationship = /** @type {import("../record/relationships/has-many.js").default} */ (relationship);
30
30
  const hasManyPreloader = new HasManyPreloader({ models: this.models, relationship: hasManyRelationship });
31
- targetModels = await hasManyPreloader.run();
31
+ preloadResult = await hasManyPreloader.run();
32
32
  }
33
33
  else if (relationship.getType() == "hasOne") {
34
34
  const hasOneRelationship = /** @type {import("../record/relationships/has-one.js").default} */ (relationship);
35
35
  const hasOnePreloader = new HasOnePreloader({ models: this.models, relationship: hasOneRelationship });
36
- targetModels = await hasOnePreloader.run();
36
+ preloadResult = await hasOnePreloader.run();
37
37
  }
38
38
  else {
39
39
  throw new Error(`Unknown relationship type: ${relationship.getType()}`);
40
40
  }
41
+ const targetModels = Array.isArray(preloadResult) ? preloadResult : (preloadResult?.targetModels || []);
42
+ const targetModelsByClassName = Array.isArray(preloadResult) ? undefined : preloadResult?.targetModelsByClassName;
41
43
  // Handle any further preloads in the tree
42
44
  const newPreload = this.preload[preloadRelationshipName];
43
45
  if (typeof newPreload == "object" && targetModels.length > 0) {
44
- const targetModelClass = relationship.getTargetModelClass();
45
- if (!targetModelClass)
46
- throw new Error("No target model class could be gotten from relationship");
47
- const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models: targetModels, preload: newPreload });
48
- await preloader.run();
46
+ if (relationship.getPolymorphic() && targetModelsByClassName) {
47
+ const configuration = relationship.getConfiguration();
48
+ for (const className in targetModelsByClassName) {
49
+ const models = targetModelsByClassName[className];
50
+ if (models.length == 0)
51
+ continue;
52
+ const targetModelClass = configuration.getModelClass(className);
53
+ const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models, preload: newPreload });
54
+ await preloader.run();
55
+ }
56
+ }
57
+ else {
58
+ const targetModelClass = relationship.getTargetModelClass();
59
+ if (!targetModelClass)
60
+ throw new Error("No target model class could be gotten from relationship");
61
+ const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models: targetModels, preload: newPreload });
62
+ await preloader.run();
63
+ }
49
64
  }
50
65
  }
51
66
  }
52
67
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3F1ZXJ5L3ByZWxvYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLGdCQUFnQixNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBRTFELE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQStCO0lBQ2xEOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxLQUFLLE1BQU0sdUJBQXVCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtZQUNuRixJQUFJLFlBQVksQ0FBQTtZQUVoQixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxxQkFBcUIsR0FBRyxzRUFBc0UsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNuSCxNQUFNLGdCQUFnQixHQUFHLElBQUksa0JBQWtCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFBO2dCQUUzRyxZQUFZLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtZQUM3QyxDQUFDO2lCQUFNLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLG1CQUFtQixHQUFHLG9FQUFvRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQy9HLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxDQUFDLENBQUE7Z0JBRXZHLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQzdDLENBQUM7aUJBQU0sSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sa0JBQWtCLEdBQUcsbUVBQW1FLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDN0csTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFBO2dCQUVwRyxZQUFZLEdBQUcsTUFBTSxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDekUsQ0FBQztZQUVELDBDQUEwQztZQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUE7WUFFeEQsSUFBSSxPQUFPLFVBQVUsSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtnQkFFM0QsSUFBSSxDQUFDLGdCQUFnQjtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUE7Z0JBRWpHLE1BQU0sU0FBUyxHQUFHLElBQUksK0JBQStCLENBQUMsRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtnQkFFaEksTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJlbG9uZ3NUb1ByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvYmVsb25ncy10by5qc1wiXG5pbXBvcnQgSGFzTWFueVByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvaGFzLW1hbnkuanNcIlxuaW1wb3J0IEhhc09uZVByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvaGFzLW9uZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLnByZWxvYWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbENsYXNzLCBtb2RlbHMsIHByZWxvYWQsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnByZWxvYWQgPSBwcmVsb2FkXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgZm9yIChjb25zdCBwcmVsb2FkUmVsYXRpb25zaGlwTmFtZSBpbiB0aGlzLnByZWxvYWQpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHRoaXMubW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocHJlbG9hZFJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBsZXQgdGFyZ2V0TW9kZWxzXG5cbiAgICAgIGlmIChyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpID09IFwiYmVsb25nc1RvXCIpIHtcbiAgICAgICAgY29uc3QgYmVsb25nc1RvUmVsYXRpb25zaGlwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9yZWNvcmQvcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzXCIpLmRlZmF1bHR9ICovIChyZWxhdGlvbnNoaXApXG4gICAgICAgIGNvbnN0IGhhc01hbnlQcmVsb2FkZXIgPSBuZXcgQmVsb25nc1RvUHJlbG9hZGVyKHttb2RlbHM6IHRoaXMubW9kZWxzLCByZWxhdGlvbnNoaXA6IGJlbG9uZ3NUb1JlbGF0aW9uc2hpcH0pXG5cbiAgICAgICAgdGFyZ2V0TW9kZWxzID0gYXdhaXQgaGFzTWFueVByZWxvYWRlci5ydW4oKVxuICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpID09IFwiaGFzTWFueVwiKSB7XG4gICAgICAgIGNvbnN0IGhhc01hbnlSZWxhdGlvbnNoaXAgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9ICovIChyZWxhdGlvbnNoaXApXG4gICAgICAgIGNvbnN0IGhhc01hbnlQcmVsb2FkZXIgPSBuZXcgSGFzTWFueVByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBoYXNNYW55UmVsYXRpb25zaGlwfSlcblxuICAgICAgICB0YXJnZXRNb2RlbHMgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNPbmVcIikge1xuICAgICAgICBjb25zdCBoYXNPbmVSZWxhdGlvbnNoaXAgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1vbmUuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzT25lUHJlbG9hZGVyID0gbmV3IEhhc09uZVByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBoYXNPbmVSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHRhcmdldE1vZGVscyA9IGF3YWl0IGhhc09uZVByZWxvYWRlci5ydW4oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbGF0aW9uc2hpcCB0eXBlOiAke3JlbGF0aW9uc2hpcC5nZXRUeXBlKCl9YClcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGFueSBmdXJ0aGVyIHByZWxvYWRzIGluIHRoZSB0cmVlXG4gICAgICBjb25zdCBuZXdQcmVsb2FkID0gdGhpcy5wcmVsb2FkW3ByZWxvYWRSZWxhdGlvbnNoaXBOYW1lXVxuXG4gICAgICBpZiAodHlwZW9mIG5ld1ByZWxvYWQgPT0gXCJvYmplY3RcIiAmJiB0YXJnZXRNb2RlbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgICAgIGNvbnN0IHByZWxvYWRlciA9IG5ldyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5UHJlbG9hZGVyKHttb2RlbENsYXNzOiB0YXJnZXRNb2RlbENsYXNzLCBtb2RlbHM6IHRhcmdldE1vZGVscywgcHJlbG9hZDogbmV3UHJlbG9hZH0pXG5cbiAgICAgICAgYXdhaXQgcHJlbG9hZGVyLnJ1bigpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3F1ZXJ5L3ByZWxvYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLGdCQUFnQixNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBRTFELE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQStCO0lBQ2xEOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxLQUFLLE1BQU0sdUJBQXVCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtZQUNuRixJQUFJLGFBQWEsQ0FBQTtZQUVqQixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxxQkFBcUIsR0FBRyxzRUFBc0UsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNuSCxNQUFNLGdCQUFnQixHQUFHLElBQUksa0JBQWtCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVB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RWhJLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJlbG9uZ3NUb1ByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvYmVsb25ncy10by5qc1wiXG5pbXBvcnQgSGFzTWFueVByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvaGFzLW1hbnkuanNcIlxuaW1wb3J0IEhhc09uZVByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvaGFzLW9uZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLnByZWxvYWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbENsYXNzLCBtb2RlbHMsIHByZWxvYWQsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnByZWxvYWQgPSBwcmVsb2FkXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgZm9yIChjb25zdCBwcmVsb2FkUmVsYXRpb25zaGlwTmFtZSBpbiB0aGlzLnByZWxvYWQpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHRoaXMubW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocHJlbG9hZFJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBsZXQgcHJlbG9hZFJlc3VsdFxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImJlbG9uZ3NUb1wiKSB7XG4gICAgICAgIGNvbnN0IGJlbG9uZ3NUb1JlbGF0aW9uc2hpcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmVsb25ncy10by5qc1wiKS5kZWZhdWx0fSAqLyAocmVsYXRpb25zaGlwKVxuICAgICAgICBjb25zdCBoYXNNYW55UHJlbG9hZGVyID0gbmV3IEJlbG9uZ3NUb1ByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBiZWxvbmdzVG9SZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgICAgY29uc3QgaGFzTWFueVJlbGF0aW9uc2hpcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzTWFueVByZWxvYWRlciA9IG5ldyBIYXNNYW55UHJlbG9hZGVyKHttb2RlbHM6IHRoaXMubW9kZWxzLCByZWxhdGlvbnNoaXA6IGhhc01hbnlSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNPbmVcIikge1xuICAgICAgICBjb25zdCBoYXNPbmVSZWxhdGlvbnNoaXAgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1vbmUuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzT25lUHJlbG9hZGVyID0gbmV3IEhhc09uZVByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBoYXNPbmVSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNPbmVQcmVsb2FkZXIucnVuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHtyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IEFycmF5LmlzQXJyYXkocHJlbG9hZFJlc3VsdCkgPyBwcmVsb2FkUmVzdWx0IDogKHByZWxvYWRSZXN1bHQ/LnRhcmdldE1vZGVscyB8fCBbXSlcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShwcmVsb2FkUmVzdWx0KSA/IHVuZGVmaW5lZCA6IHByZWxvYWRSZXN1bHQ/LnRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lXG5cbiAgICAgIC8vIEhhbmRsZSBhbnkgZnVydGhlciBwcmVsb2FkcyBpbiB0aGUgdHJlZVxuICAgICAgY29uc3QgbmV3UHJlbG9hZCA9IHRoaXMucHJlbG9hZFtwcmVsb2FkUmVsYXRpb25zaGlwTmFtZV1cblxuICAgICAgaWYgKHR5cGVvZiBuZXdQcmVsb2FkID09IFwib2JqZWN0XCIgJiYgdGFyZ2V0TW9kZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpICYmIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHJlbGF0aW9uc2hpcC5nZXRDb25maWd1cmF0aW9uKClcblxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIGluIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbHMgPSB0YXJnZXRNb2RlbHNCeUNsYXNzTmFtZVtjbGFzc05hbWVdXG5cbiAgICAgICAgICAgIGlmIChtb2RlbHMubGVuZ3RoID09IDApIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBjb25maWd1cmF0aW9uLmdldE1vZGVsQ2xhc3MoY2xhc3NOYW1lKVxuICAgICAgICAgICAgY29uc3QgcHJlbG9hZGVyID0gbmV3IFZlbG9jaW91c0RhdGFiYXNlUXVlcnlQcmVsb2FkZXIoe21vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3MsIG1vZGVscywgcHJlbG9hZDogbmV3UHJlbG9hZH0pXG5cbiAgICAgICAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YXJnZXQgbW9kZWwgY2xhc3MgY291bGQgYmUgZ290dGVuIGZyb20gcmVsYXRpb25zaGlwXCIpXG5cbiAgICAgICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlcih7bW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcywgbW9kZWxzOiB0YXJnZXRNb2RlbHMsIHByZWxvYWQ6IG5ld1ByZWxvYWR9KVxuXG4gICAgICAgICAgYXdhaXQgcHJlbG9hZGVyLnJ1bigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -45,6 +45,9 @@ export default class VelociousDatabaseRecordBaseRelationship {
45
45
  getRelationshipName(): string;
46
46
  /** @returns {boolean} */
47
47
  getPolymorphic(): boolean;
48
+ /** @returns {string} */
49
+ getPolymorphicTypeColumn(): string;
50
+ _polymorphicTypeColumn: string;
48
51
  /** @returns {string} The name of the foreign key, e.g. "id" etc. */
49
52
  getPrimaryKey(): string;
50
53
  /** @returns {string} The type of the relationship, e.g. "has_many", "belongs_to", "has_one", "has_and_belongs_to_many" etc. */
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/relationships/base.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH;IACE,6CAA6C;IAC7C,uJADY,wBAAwB,EAsBnC;IAXC,kBAA0B;IAC1B,mBAA2B;IAC3B,mBAA4B;IAC5B,mBAA2B;IAC3B,4CAAkB;IAClB,iDAA4B;IAC5B,sBAA+B;IAC/B,oBAA6B;IAC7B,yBAAwC;IACxC,gBAAsB;IACtB,aAAgB;IAGlB,gEAAiE;IAEjE,sIAAsI;IACtI,gBADc,MAAM,GAAG,SAAS,CACS;IAEzC;;;OAGG;IACH,iBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,gBAFa,MAAM,GAAG,SAAS,CAI9B;IAED,sDAAsD;IACtD,iBADc,cAAc,aAAa,EAAE,OAAO,CACR;IAE1C,4FAA4F;IAC5F,uBADc,MAAM,CACkC;IAEtD,yBAAyB;IACzB,kBADc,OAAO,CAGpB;IAED,oEAAoE;IACpE,iBADc,MAAM,CACuB;IAE3C,+HAA+H;IAC/H,WADc,MAAM,CACU;IAE9B,mMAAmM;IACnM,uBADc,cAAc,aAAa,EAAE,OAAO,GAAG,SAAS,CAW7D;CACF;;gBAxFa,MAAM;gBACN,MAAM;iBACN,MAAM,GAAG,SAAS;gBAClB,MAAM;YACN,cAAc,aAAa,EAAE,OAAO;gBACpC,cAAc,aAAa,EAAE,OAAO;iBACpC,MAAM;kBACN,OAAO;sBACP,MAAM;cACN,MAAM;UACN,MAAM"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/relationships/base.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AAEH;IACE,6CAA6C;IAC7C,uJADY,wBAAwB,EAsBnC;IAXC,kBAA0B;IAC1B,mBAA2B;IAC3B,mBAA4B;IAC5B,mBAA2B;IAC3B,4CAAkB;IAClB,iDAA4B;IAC5B,sBAA+B;IAC/B,oBAA6B;IAC7B,yBAAwC;IACxC,gBAAsB;IACtB,aAAgB;IAGlB,gEAAiE;IAEjE,sIAAsI;IACtI,gBADc,MAAM,GAAG,SAAS,CACS;IAEzC;;;OAGG;IACH,iBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,gBAFa,MAAM,GAAG,SAAS,CAI9B;IAED,sDAAsD;IACtD,iBADc,cAAc,aAAa,EAAE,OAAO,CACR;IAE1C,4FAA4F;IAC5F,uBADc,MAAM,CACkC;IAEtD,yBAAyB;IACzB,kBADc,OAAO,CAGpB;IAED,wBAAwB;IACxB,4BADc,MAAM,CAmBnB;IATK,+BAAiE;IAWvE,oEAAoE;IACpE,iBADc,MAAM,CACuB;IAE3C,+HAA+H;IAC/H,WADc,MAAM,CACU;IAE9B,mMAAmM;IACnM,uBADc,cAAc,aAAa,EAAE,OAAO,GAAG,SAAS,CAW7D;CACF;;gBA7Ga,MAAM;gBACN,MAAM;iBACN,MAAM,GAAG,SAAS;gBAClB,MAAM;YACN,cAAc,aAAa,EAAE,OAAO;gBACpC,cAAc,aAAa,EAAE,OAAO;iBACpC,MAAM;kBACN,OAAO;sBACP,MAAM;cACN,MAAM;UACN,MAAM"}
@@ -1,5 +1,6 @@
1
1
  // @ts-check
2
2
  import restArgsError from "../../../utils/rest-args-error.js";
3
+ import * as inflection from "inflection";
3
4
  /**
4
5
  * @typedef {object} RelationshipBaseArgsType
5
6
  * @property {string} [className]
@@ -20,7 +21,7 @@ export default class VelociousDatabaseRecordBaseRelationship {
20
21
  restArgsError(restArgs);
21
22
  if (!modelClass)
22
23
  throw new Error(`'modelClass' wasn't given for ${relationshipName}`);
23
- if (!className && !klass)
24
+ if (!className && !klass && !polymorphic)
24
25
  throw new Error(`Neither 'className' or 'klass' was given for ${modelClass.name}#${relationshipName}`);
25
26
  if (className == "EventSery") {
26
27
  throw new Error(`Invalid model name: ${className}`);
@@ -62,13 +63,30 @@ export default class VelociousDatabaseRecordBaseRelationship {
62
63
  getPolymorphic() {
63
64
  return this._polymorphic || false;
64
65
  }
66
+ /** @returns {string} */
67
+ getPolymorphicTypeColumn() {
68
+ if (!this.getPolymorphic()) {
69
+ throw new Error(`${this.modelClass.name}#${this.relationshipName} isn't polymorphic`);
70
+ }
71
+ if (!this._polymorphicTypeColumn) {
72
+ const foreignKey = this.getForeignKey();
73
+ if (foreignKey && foreignKey.endsWith("_id")) {
74
+ this._polymorphicTypeColumn = foreignKey.replace(/_id$/, "_type");
75
+ }
76
+ else {
77
+ const underscoredName = inflection.underscore(this.getRelationshipName());
78
+ this._polymorphicTypeColumn = `${underscoredName}_type`;
79
+ }
80
+ }
81
+ return this._polymorphicTypeColumn;
82
+ }
65
83
  /** @returns {string} The name of the foreign key, e.g. "id" etc. */
66
84
  getPrimaryKey() { return this._primaryKey; }
67
85
  /** @returns {string} The type of the relationship, e.g. "has_many", "belongs_to", "has_one", "has_and_belongs_to_many" etc. */
68
86
  getType() { return this.type; }
69
87
  /** @returns {typeof import("../index.js").default | undefined} The target model class for this relationship, e.g. if the relationship is "posts" then the target model class is the Post class. */
70
88
  getTargetModelClass() {
71
- if (this.getPolymorphic()) {
89
+ if (this.getPolymorphic() && this.type == "belongsTo") {
72
90
  return undefined;
73
91
  }
74
92
  else if (this.className) {
@@ -80,4 +98,4 @@ export default class VelociousDatabaseRecordBaseRelationship {
80
98
  throw new Error("Couldn't figure out the target model class");
81
99
  }
82
100
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUU3RDs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyx1Q0FBdUM7SUFDMUQsNkNBQTZDO0lBQzdDLFlBQVksRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ3hKLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtRQUNyRixJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO1FBRWhJLElBQUksU0FBUyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFBO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFBO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRWpFLHNJQUFzSTtJQUN0SSxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQztJQUV6Qzs7O09BR0c7SUFDSCxhQUFhO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUM7SUFFMUMsNEZBQTRGO0lBQzVGLG1CQUFtQixLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFBLENBQUMsQ0FBQztJQUV0RCx5QkFBeUI7SUFDekIsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUE7SUFDbkMsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQztJQUUzQywrSEFBK0g7SUFDL0gsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFOUIsbU1BQW1NO0lBQ25NLG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDOUQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUNuQixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWxhdGlvbnNoaXBCYXNlQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXBlbmRlbnRdXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gW2ZvcmVpZ25LZXldXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ludmVyc2VPZl1cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtrbGFzc11cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbWFyeUtleV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3BvbHltb3JwaGljXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbGF0aW9uc2hpcE5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGhyb3VnaF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VSZWNvcmRCYXNlUmVsYXRpb25zaGlwIHtcbiAgLyoqIEBwYXJhbSB7UmVsYXRpb25zaGlwQmFzZUFyZ3NUeXBlfSBhcmdzICovXG4gIGNvbnN0cnVjdG9yKHtjbGFzc05hbWUsIGRlcGVuZGVudCwgZm9yZWlnbktleSwgaW52ZXJzZU9mLCBrbGFzcywgbW9kZWxDbGFzcywgcHJpbWFyeUtleSA9IFwiaWRcIiwgcG9seW1vcnBoaWMsIHJlbGF0aW9uc2hpcE5hbWUsIHRocm91Z2gsIHR5cGUsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgJ21vZGVsQ2xhc3MnIHdhc24ndCBnaXZlbiBmb3IgJHtyZWxhdGlvbnNoaXBOYW1lfWApXG4gICAgaWYgKCFjbGFzc05hbWUgJiYgIWtsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgJ2NsYXNzTmFtZScgb3IgJ2tsYXNzJyB3YXMgZ2l2ZW4gZm9yICR7bW9kZWxDbGFzcy5uYW1lfSMke3JlbGF0aW9uc2hpcE5hbWV9YClcblxuICAgIGlmIChjbGFzc05hbWUgPT0gXCJFdmVudFNlcnlcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1vZGVsIG5hbWU6ICR7Y2xhc3NOYW1lfWApXG4gICAgfVxuXG4gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWVcbiAgICB0aGlzLl9kZXBlbmRlbnQgPSBkZXBlbmRlbnRcbiAgICB0aGlzLmZvcmVpZ25LZXkgPSBmb3JlaWduS2V5XG4gICAgdGhpcy5faW52ZXJzZU9mID0gaW52ZXJzZU9mXG4gICAgdGhpcy5rbGFzcyA9IGtsYXNzXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICAgIHRoaXMuX3BvbHltb3JwaGljID0gcG9seW1vcnBoaWNcbiAgICB0aGlzLl9wcmltYXJ5S2V5ID0gcHJpbWFyeUtleVxuICAgIHRoaXMucmVsYXRpb25zaGlwTmFtZSA9IHJlbGF0aW9uc2hpcE5hbWVcbiAgICB0aGlzLnRocm91Z2ggPSB0aHJvdWdoXG4gICAgdGhpcy50eXBlID0gdHlwZVxuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHsgcmV0dXJuIHRoaXMubW9kZWxDbGFzcy5fZ2V0Q29uZmlndXJhdGlvbigpIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gV2hhdCB3aWxsIGJlIGRvbmUgd2hlbiB0aGUgcGFyZW50IHJlY29yZCBpcyBkZXN0cm95ZWQuIEUuZy4gXCJkZXN0cm95XCIsIFwibnVsbGlmeVwiLCBcInJlc3RyaWN0XCIgZXRjLiAqL1xuICBnZXREZXBlbmRlbnQoKSB7IHJldHVybiB0aGlzLl9kZXBlbmRlbnQgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGZvcmVpZ24ga2V5LCBlLmcuIFwidXNlcl9pZFwiLCBcInBvc3RfaWRcIiBldGMuXG4gICAqL1xuICBnZXRGb3JlaWduS2V5KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImdldEZvcmVpZ25LZXkgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBuYW1lIG9mIHRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgZS5nLiBcInBvc3RzXCIsIFwiY29tbWVudHNcIiBldGMuXG4gICAqL1xuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZ2V0SW52ZXJzZU9mIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi9cbiAgZ2V0TW9kZWxDbGFzcygpIHsgcmV0dXJuIHRoaXMubW9kZWxDbGFzcyB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAsIGUuZy4gXCJwb3N0c1wiLCBcInVzZXJcIiwgXCJjb21tZW50c1wiIGV0Yy4gKi9cbiAgZ2V0UmVsYXRpb25zaGlwTmFtZSgpIHsgcmV0dXJuIHRoaXMucmVsYXRpb25zaGlwTmFtZSB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBnZXRQb2x5bW9ycGhpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fcG9seW1vcnBoaWMgfHwgZmFsc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXksIGUuZy4gXCJpZFwiIGV0Yy4gKi9cbiAgZ2V0UHJpbWFyeUtleSgpIHsgcmV0dXJuIHRoaXMuX3ByaW1hcnlLZXkgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdHlwZSBvZiB0aGUgcmVsYXRpb25zaGlwLCBlLmcuIFwiaGFzX21hbnlcIiwgXCJiZWxvbmdzX3RvXCIsIFwiaGFzX29uZVwiLCBcImhhc19hbmRfYmVsb25nc190b19tYW55XCIgZXRjLiAqL1xuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy50eXBlIH1cblxuICAvKiogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBUaGUgdGFyZ2V0IG1vZGVsIGNsYXNzIGZvciB0aGlzIHJlbGF0aW9uc2hpcCwgZS5nLiBpZiB0aGUgcmVsYXRpb25zaGlwIGlzIFwicG9zdHNcIiB0aGVuIHRoZSB0YXJnZXQgbW9kZWwgY2xhc3MgaXMgdGhlIFBvc3QgY2xhc3MuICovXG4gIGdldFRhcmdldE1vZGVsQ2xhc3MoKSB7XG4gICAgaWYgKHRoaXMuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAodGhpcy5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRNb2RlbENsYXNzKHRoaXMuY2xhc3NOYW1lKVxuICAgIH0gZWxzZSBpZiAodGhpcy5rbGFzcykge1xuICAgICAgcmV0dXJuIHRoaXMua2xhc3NcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaWd1cmUgb3V0IHRoZSB0YXJnZXQgbW9kZWwgY2xhc3NcIilcbiAgfVxufVxuIl19
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyx1Q0FBdUM7SUFDMUQsNkNBQTZDO0lBQzdDLFlBQVksRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ3hKLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtRQUNyRixJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO1FBRWhKLElBQUksU0FBUyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdB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QUFJLENBQUMsS0FBSyxDQUFBO1FBQ25CLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVsYXRpb25zaGlwQmFzZUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVwZW5kZW50XVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IFtmb3JlaWduS2V5XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbnZlcnNlT2ZdXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBba2xhc3NdXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByaW1hcnlLZXldXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwb2x5bW9ycGhpY11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxhdGlvbnNoaXBOYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rocm91Z2hdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkQmFzZVJlbGF0aW9uc2hpcCB7XG4gIC8qKiBAcGFyYW0ge1JlbGF0aW9uc2hpcEJhc2VBcmdzVHlwZX0gYXJncyAqL1xuICBjb25zdHJ1Y3Rvcih7Y2xhc3NOYW1lLCBkZXBlbmRlbnQsIGZvcmVpZ25LZXksIGludmVyc2VPZiwga2xhc3MsIG1vZGVsQ2xhc3MsIHByaW1hcnlLZXkgPSBcImlkXCIsIHBvbHltb3JwaGljLCByZWxhdGlvbnNoaXBOYW1lLCB0aHJvdWdoLCB0eXBlLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCFtb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYCdtb2RlbENsYXNzJyB3YXNuJ3QgZ2l2ZW4gZm9yICR7cmVsYXRpb25zaGlwTmFtZX1gKVxuICAgIGlmICghY2xhc3NOYW1lICYmICFrbGFzcyAmJiAhcG9seW1vcnBoaWMpIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciAnY2xhc3NOYW1lJyBvciAna2xhc3MnIHdhcyBnaXZlbiBmb3IgJHttb2RlbENsYXNzLm5hbWV9IyR7cmVsYXRpb25zaGlwTmFtZX1gKVxuXG4gICAgaWYgKGNsYXNzTmFtZSA9PSBcIkV2ZW50U2VyeVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW9kZWwgbmFtZTogJHtjbGFzc05hbWV9YClcbiAgICB9XG5cbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuICAgIHRoaXMuX2RlcGVuZGVudCA9IGRlcGVuZGVudFxuICAgIHRoaXMuZm9yZWlnbktleSA9IGZvcmVpZ25LZXlcbiAgICB0aGlzLl9pbnZlcnNlT2YgPSBpbnZlcnNlT2ZcbiAgICB0aGlzLmtsYXNzID0ga2xhc3NcbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5fcG9seW1vcnBoaWMgPSBwb2x5bW9ycGhpY1xuICAgIHRoaXMuX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5XG4gICAgdGhpcy5yZWxhdGlvbnNoaXBOYW1lID0gcmVsYXRpb25zaGlwTmFtZVxuICAgIHRoaXMudGhyb3VnaCA9IHRocm91Z2hcbiAgICB0aGlzLnR5cGUgPSB0eXBlXG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCkgeyByZXR1cm4gdGhpcy5tb2RlbENsYXNzLl9nZXRDb25maWd1cmF0aW9uKCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBXaGF0IHdpbGwgYmUgZG9uZSB3aGVuIHRoZSBwYXJlbnQgcmVjb3JkIGlzIGRlc3Ryb3llZC4gRS5nLiBcImRlc3Ryb3lcIiwgXCJudWxsaWZ5XCIsIFwicmVzdHJpY3RcIiBldGMuICovXG4gIGdldERlcGVuZGVudCgpIHsgcmV0dXJuIHRoaXMuX2RlcGVuZGVudCB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXksIGUuZy4gXCJ1c2VyX2lkXCIsIFwicG9zdF9pZFwiIGV0Yy5cbiAgICovXG4gIGdldEZvcmVpZ25LZXkoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZ2V0Rm9yZWlnbktleSBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIG5hbWUgb2YgdGhlIGludmVyc2UgcmVsYXRpb25zaGlwLCBlLmcuIFwicG9zdHNcIiwgXCJjb21tZW50c1wiIGV0Yy5cbiAgICovXG4gIGdldEludmVyc2VPZigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZXRJbnZlcnNlT2Ygbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqL1xuICBnZXRNb2RlbENsYXNzKCkgeyByZXR1cm4gdGhpcy5tb2RlbENsYXNzIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCwgZS5nLiBcInBvc3RzXCIsIFwidXNlclwiLCBcImNvbW1lbnRzXCIgZXRjLiAqL1xuICBnZXRSZWxhdGlvbnNoaXBOYW1lKCkgeyByZXR1cm4gdGhpcy5yZWxhdGlvbnNoaXBOYW1lIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGdldFBvbHltb3JwaGljKCkge1xuICAgIHJldHVybiB0aGlzLl9wb2x5bW9ycGhpYyB8fCBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIGdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpIHtcbiAgICBpZiAoIXRoaXMuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubW9kZWxDbGFzcy5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwTmFtZX0gaXNuJ3QgcG9seW1vcnBoaWNgKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5fcG9seW1vcnBoaWNUeXBlQ29sdW1uKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5ID0gdGhpcy5nZXRGb3JlaWduS2V5KClcblxuICAgICAgaWYgKGZvcmVpZ25LZXkgJiYgZm9yZWlnbktleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgICB0aGlzLl9wb2x5bW9ycGhpY1R5cGVDb2x1bW4gPSBmb3JlaWduS2V5LnJlcGxhY2UoL19pZCQvLCBcIl90eXBlXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1bmRlcnNjb3JlZE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG5cbiAgICAgICAgdGhpcy5fcG9seW1vcnBoaWNUeXBlQ29sdW1uID0gYCR7dW5kZXJzY29yZWROYW1lfV90eXBlYFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wb2x5bW9ycGhpY1R5cGVDb2x1bW5cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXksIGUuZy4gXCJpZFwiIGV0Yy4gKi9cbiAgZ2V0UHJpbWFyeUtleSgpIHsgcmV0dXJuIHRoaXMuX3ByaW1hcnlLZXkgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdHlwZSBvZiB0aGUgcmVsYXRpb25zaGlwLCBlLmcuIFwiaGFzX21hbnlcIiwgXCJiZWxvbmdzX3RvXCIsIFwiaGFzX29uZVwiLCBcImhhc19hbmRfYmVsb25nc190b19tYW55XCIgZXRjLiAqL1xuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy50eXBlIH1cblxuICAvKiogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBUaGUgdGFyZ2V0IG1vZGVsIGNsYXNzIGZvciB0aGlzIHJlbGF0aW9uc2hpcCwgZS5nLiBpZiB0aGUgcmVsYXRpb25zaGlwIGlzIFwicG9zdHNcIiB0aGVuIHRoZSB0YXJnZXQgbW9kZWwgY2xhc3MgaXMgdGhlIFBvc3QgY2xhc3MuICovXG4gIGdldFRhcmdldE1vZGVsQ2xhc3MoKSB7XG4gICAgaWYgKHRoaXMuZ2V0UG9seW1vcnBoaWMoKSAmJiB0aGlzLnR5cGUgPT0gXCJiZWxvbmdzVG9cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAodGhpcy5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRNb2RlbENsYXNzKHRoaXMuY2xhc3NOYW1lKVxuICAgIH0gZWxzZSBpZiAodGhpcy5rbGFzcykge1xuICAgICAgcmV0dXJuIHRoaXMua2xhc3NcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaWd1cmUgb3V0IHRoZSB0YXJnZXQgbW9kZWwgY2xhc3NcIilcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/relationships/belongs-to.js"],"names":[],"mappings":"AAKA;IAiBM,yCAA2C;CAuBhD;6BA3C4B,WAAW"}
1
+ {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/relationships/belongs-to.js"],"names":[],"mappings":"AAKA;IAqBM,yCAA2C;CAuBhD;6BA/C4B,WAAW"}
@@ -5,10 +5,15 @@ export default class VelociousDatabaseRecordBelongsToRelationship extends BaseRe
5
5
  /** @returns {string} */
6
6
  getForeignKey() {
7
7
  if (!this.foreignKey) {
8
- const targetModelClass = this.getTargetModelClass();
9
- if (!targetModelClass)
10
- throw new Error("Can't calculate foreign key without a target model class");
11
- this.foreignKey = `${inflection.underscore(targetModelClass.name)}_id`;
8
+ if (this.getPolymorphic()) {
9
+ this.foreignKey = `${inflection.underscore(this.getRelationshipName())}_id`;
10
+ }
11
+ else {
12
+ const targetModelClass = this.getTargetModelClass();
13
+ if (!targetModelClass)
14
+ throw new Error("Can't calculate foreign key without a target model class");
15
+ this.foreignKey = `${inflection.underscore(targetModelClass.name)}_id`;
16
+ }
12
17
  }
13
18
  return this.foreignKey;
14
19
  }
@@ -35,4 +40,4 @@ export default class VelociousDatabaseRecordBelongsToRelationship extends BaseRe
35
40
  return this._inverseOf;
36
41
  }
37
42
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLFdBQVcsQ0FBQTtBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4QyxNQUFNLENBQUMsT0FBTyxPQUFPLDRDQUE2QyxTQUFRLGdCQUFnQjtJQUN4Rix3QkFBd0I7SUFDeEIsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtZQUVuRCxJQUFJLENBQUMsZ0JBQWdCO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQTtZQUVsRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ3hFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7SUFDeEIsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFBO1lBRTNDLDRGQUE0RjtZQUM1RixNQUFNLHFCQUFxQixHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7WUFFeEssTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtZQUVuRCxJQUFJLGdCQUFnQixJQUFJLHFCQUFxQixJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2RSw2RkFBNkY7Z0JBQzdGLE1BQU0sNEJBQTRCLEdBQUcsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtnQkFDNUUsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO2dCQUNqSyxNQUFNLGlDQUFpQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtnQkFFaEcsSUFBSSw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO29CQUM1RSxJQUFJLENBQUMsVUFBVSxHQUFHLGdDQUFnQyxDQUFBO2dCQUNwRCxDQUFDO3FCQUFNLElBQUksNEJBQTRCLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLEVBQUUsQ0FBQztvQkFDcEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQ0FBaUMsQ0FBQTtnQkFDckQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzZVJlbGF0aW9uc2hpcCBmcm9tIFwiLi9iYXNlLmpzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZEJlbG9uZ3NUb1JlbGF0aW9uc2hpcCBleHRlbmRzIEJhc2VSZWxhdGlvbnNoaXAge1xuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0Rm9yZWlnbktleSgpIHtcbiAgICBpZiAoIXRoaXMuZm9yZWlnbktleSkge1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHRoaXMuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgY2FsY3VsYXRlIGZvcmVpZ24ga2V5IHdpdGhvdXQgYSB0YXJnZXQgbW9kZWwgY2xhc3NcIilcblxuICAgICAgdGhpcy5mb3JlaWduS2V5ID0gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHRhcmdldE1vZGVsQ2xhc3MubmFtZSl9X2lkYFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZvcmVpZ25LZXlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgaWYgKCF0aGlzLl9pbnZlcnNlT2YgJiYgIXRoaXMuX2F1dG9HZW5lcmF0ZUludmVyc2VPZkF0dGVtcHRlZCkge1xuICAgICAgdGhpcy5fYXV0b0dlbmVyYXRlSW52ZXJzZU9mQXR0ZW1wdGVkID0gdHJ1ZVxuXG4gICAgICAvLyBPbmx5IG1ha2UgYXV0by1pbnZlcnNlLW9mIGlmIHRoZSByZWxhdGlvbnNoaXBzIG5hbWUgbWF0Y2hlcyB0aGUgdGFyZ2V0IG1vZGVsIGNsYXNzJ3MgbmFtZVxuICAgICAgY29uc3QgdGFyZ2V0Q2xhc3NTaW1wbGVOYW1lID0gYCR7dGhpcy5nZXRSZWxhdGlvbnNoaXBOYW1lKCkuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCl9JHt0aGlzLmdldFJlbGF0aW9uc2hpcE5hbWUoKS5zdWJzdHJpbmcoMSwgdGhpcy5nZXRSZWxhdGlvbnNoaXBOYW1lKCkubGVuZ3RoKX1gXG5cbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICBpZiAodGFyZ2V0TW9kZWxDbGFzcyAmJiB0YXJnZXRDbGFzc1NpbXBsZU5hbWUgPT0gdGFyZ2V0TW9kZWxDbGFzcy5uYW1lKSB7XG4gICAgICAgIC8vIE9ubHkgbWFrZSBhdXRvLWludmVyc2Utb2YgaWYgdGhlIGV4cGVjdGVkIHJlbGF0aW9uc2hpcCBleGlzdCBpbiBhIGhhcy1vbmUgb3IgaGFzLW1hbnkgZm9ybVxuICAgICAgICBjb25zdCB0YXJnZXRDbGFzc1JlbGF0aW9uc2hpcE5hbWVzID0gdGFyZ2V0TW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBOYW1lcygpXG4gICAgICAgIGNvbnN0IGF1dG9HZW5lcmF0ZWRIYXNPbmVJbnZlcnNlT2ZOYW1lID0gYCR7dGhpcy5tb2RlbENsYXNzLm5hbWUuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCl9JHt0aGlzLm1vZGVsQ2xhc3MubmFtZS5zdWJzdHJpbmcoMSwgdGhpcy5tb2RlbENsYXNzLm5hbWUubGVuZ3RoKX1gXG4gICAgICAgIGNvbnN0IGF1dG9HZW5lcmF0ZWRIYXNNYW55SW52ZXJzZU9mTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGF1dG9HZW5lcmF0ZWRIYXNPbmVJbnZlcnNlT2ZOYW1lKVxuXG4gICAgICAgIGlmICh0YXJnZXRDbGFzc1JlbGF0aW9uc2hpcE5hbWVzLmluY2x1ZGVzKGF1dG9HZW5lcmF0ZWRIYXNPbmVJbnZlcnNlT2ZOYW1lKSkge1xuICAgICAgICAgIHRoaXMuX2ludmVyc2VPZiA9IGF1dG9HZW5lcmF0ZWRIYXNPbmVJbnZlcnNlT2ZOYW1lXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0Q2xhc3NSZWxhdGlvbnNoaXBOYW1lcy5pbmNsdWRlcyhhdXRvR2VuZXJhdGVkSGFzTWFueUludmVyc2VPZk5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5faW52ZXJzZU9mID0gYXV0b0dlbmVyYXRlZEhhc01hbnlJbnZlcnNlT2ZOYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faW52ZXJzZU9mXG4gIH1cbn1cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLFdBQVcsQ0FBQTtBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4QyxNQUFNLENBQUMsT0FBTyxPQUFPLDRDQUE2QyxTQUFRLGdCQUFnQjtJQUN4Rix3QkFBd0I7SUFDeEIsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFBO1lBQzdFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO2dCQUVuRCxJQUFJLENBQUMsZ0JBQWdCO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQTtnQkFFbEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtZQUN4RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUE7WUFFM0MsNEZBQTRGO1lBQzVGLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtZQUV4SyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1lBRW5ELElBQUksZ0JBQWdCLElBQUkscUJBQXFCLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZFLDZGQUE2RjtnQkFDN0YsTUFBTSw0QkFBNEIsR0FBRyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO2dCQUM1RSxNQUFNLGdDQUFnQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7Z0JBQ2pLLE1BQU0saUNBQWlDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO2dCQUVoRyxJQUFJLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUM7b0JBQzVFLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0NBQWdDLENBQUE7Z0JBQ3BELENBQUM7cUJBQU0sSUFBSSw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDO29CQUNwRixJQUFJLENBQUMsVUFBVSxHQUFHLGlDQUFpQyxDQUFBO2dCQUNyRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlUmVsYXRpb25zaGlwIGZyb20gXCIuL2Jhc2UuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkQmVsb25nc1RvUmVsYXRpb25zaGlwIGV4dGVuZHMgQmFzZVJlbGF0aW9uc2hpcCB7XG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBnZXRGb3JlaWduS2V5KCkge1xuICAgIGlmICghdGhpcy5mb3JlaWduS2V5KSB7XG4gICAgICBpZiAodGhpcy5nZXRQb2x5bW9ycGhpYygpKSB7XG4gICAgICAgIHRoaXMuZm9yZWlnbktleSA9IGAke2luZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLmdldFJlbGF0aW9uc2hpcE5hbWUoKSl9X2lkYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHRoaXMuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBjYWxjdWxhdGUgZm9yZWlnbiBrZXkgd2l0aG91dCBhIHRhcmdldCBtb2RlbCBjbGFzc1wiKVxuXG4gICAgICAgIHRoaXMuZm9yZWlnbktleSA9IGAke2luZmxlY3Rpb24udW5kZXJzY29yZSh0YXJnZXRNb2RlbENsYXNzLm5hbWUpfV9pZGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mb3JlaWduS2V5XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIGlmICghdGhpcy5faW52ZXJzZU9mICYmICF0aGlzLl9hdXRvR2VuZXJhdGVJbnZlcnNlT2ZBdHRlbXB0ZWQpIHtcbiAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZUludmVyc2VPZkF0dGVtcHRlZCA9IHRydWVcblxuICAgICAgLy8gT25seSBtYWtlIGF1dG8taW52ZXJzZS1vZiBpZiB0aGUgcmVsYXRpb25zaGlwcyBuYW1lIG1hdGNoZXMgdGhlIHRhcmdldCBtb2RlbCBjbGFzcydzIG5hbWVcbiAgICAgIGNvbnN0IHRhcmdldENsYXNzU2ltcGxlTmFtZSA9IGAke3RoaXMuZ2V0UmVsYXRpb25zaGlwTmFtZSgpLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpfSR7dGhpcy5nZXRSZWxhdGlvbnNoaXBOYW1lKCkuc3Vic3RyaW5nKDEsIHRoaXMuZ2V0UmVsYXRpb25zaGlwTmFtZSgpLmxlbmd0aCl9YFxuXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gdGhpcy5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgaWYgKHRhcmdldE1vZGVsQ2xhc3MgJiYgdGFyZ2V0Q2xhc3NTaW1wbGVOYW1lID09IHRhcmdldE1vZGVsQ2xhc3MubmFtZSkge1xuICAgICAgICAvLyBPbmx5IG1ha2UgYXV0by1pbnZlcnNlLW9mIGlmIHRoZSBleHBlY3RlZCByZWxhdGlvbnNoaXAgZXhpc3QgaW4gYSBoYXMtb25lIG9yIGhhcy1tYW55IGZvcm1cbiAgICAgICAgY29uc3QgdGFyZ2V0Q2xhc3NSZWxhdGlvbnNoaXBOYW1lcyA9IHRhcmdldE1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwTmFtZXMoKVxuICAgICAgICBjb25zdCBhdXRvR2VuZXJhdGVkSGFzT25lSW52ZXJzZU9mTmFtZSA9IGAke3RoaXMubW9kZWxDbGFzcy5uYW1lLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpfSR7dGhpcy5tb2RlbENsYXNzLm5hbWUuc3Vic3RyaW5nKDEsIHRoaXMubW9kZWxDbGFzcy5uYW1lLmxlbmd0aCl9YFxuICAgICAgICBjb25zdCBhdXRvR2VuZXJhdGVkSGFzTWFueUludmVyc2VPZk5hbWUgPSBpbmZsZWN0aW9uLnBsdXJhbGl6ZShhdXRvR2VuZXJhdGVkSGFzT25lSW52ZXJzZU9mTmFtZSlcblxuICAgICAgICBpZiAodGFyZ2V0Q2xhc3NSZWxhdGlvbnNoaXBOYW1lcy5pbmNsdWRlcyhhdXRvR2VuZXJhdGVkSGFzT25lSW52ZXJzZU9mTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLl9pbnZlcnNlT2YgPSBhdXRvR2VuZXJhdGVkSGFzT25lSW52ZXJzZU9mTmFtZVxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldENsYXNzUmVsYXRpb25zaGlwTmFtZXMuaW5jbHVkZXMoYXV0b0dlbmVyYXRlZEhhc01hbnlJbnZlcnNlT2ZOYW1lKSkge1xuICAgICAgICAgIHRoaXMuX2ludmVyc2VPZiA9IGF1dG9HZW5lcmF0ZWRIYXNNYW55SW52ZXJzZU9mTmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ludmVyc2VPZlxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.132",
6
+ "version": "1.0.133",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [