velocious 1.0.186 → 1.0.188
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -0
- package/build/src/configuration.d.ts +10 -15
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +35 -9
- package/build/src/database/record/index.js +2 -2
- package/build/src/mailer/base.d.ts.map +1 -1
- package/build/src/mailer/base.js +3 -2
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +32 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/mailer/base.js"],"names":[],"mappings":"AAyCA;;GAEG;AACH;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/mailer/base.js"],"names":[],"mappings":"AAyCA;;GAEG;AACH;IAoJE;;OAEG;IACH,qBAFa,OAAO,YAAY,EAAE,qBAAqB,EAAE,CAIxD;IAED;;OAEG;IACH,0BAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,mCAHW,CAAC,OAAO,EAAE,OAAO,YAAY,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GACjF,IAAI,CAIhB;IAED;;OAEG;IACH,6BAFa,CAAC,OAAO,EAAE,OAAO,YAAY,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,CAItG;IAED;;;OAGG;IACH,+BAHW,OAAO,YAAY,EAAE,qBAAqB,GACxC,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAAC,CAsBzE;IAED;;;OAGG;IACH,+BAHW,OAAO,YAAY,EAAE,qBAAqB,GACxC,OAAO,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAW/E;IAvND;;;OAGG;IACH,gCAFG;QAAqD,aAAa,GAA1D,OAAO,qBAAqB,EAAE,OAAO;KAC/C,EAMA;IAJC,oBAAuB;IACvB;;;;;;;;MAAwB;IACxB,gBAAqB;IACrB,sEAAqG;IAGvG;;;OAGG;IACH,mBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAIhB;IAED;;;;;;;;;;OAUG;IACH,oEATG;QAAkB,EAAE,EAAZ,GAAG;QACU,OAAO,EAApB,MAAM;QACK,IAAI,GAAf,GAAG;QACQ,EAAE,GAAb,GAAG;QACQ,GAAG,GAAd,GAAG;QACQ,OAAO,GAAlB,GAAG;QAC2B,OAAO,GAArC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;KAC9B,GAAU,IAAI,CAMhB;IAED;;;;OAIG;IACH,2BAJW,MAAM,QACN,GAAG,EAAE,GACH,cAAc,CAiB1B;IAED;;OAEG;IACH,qBAFa,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAI1D;IAED;;OAEG;IACH,kBAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,YAAY,EAAE,qBAAqB,CA6BtD;IAED;;OAEG;IACH,iBAFa,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAM/D;IAED;;OAEG;IACH,eAFa,OAAO,CAAC,MAAM,CAAC,CA0B3B;CAuEF;2BA9P0B,eAAe"}
|
package/build/src/mailer/base.js
CHANGED
|
@@ -144,7 +144,8 @@ export class VelociousMailerBase {
|
|
|
144
144
|
const actionName = this._getActionName();
|
|
145
145
|
const fileName = viewFileName(actionName);
|
|
146
146
|
const viewPath = `${configuration.getDirectory()}/src/mailers/${mailerDir}/${fileName}.ejs`;
|
|
147
|
-
const
|
|
147
|
+
const translate = (msgID, args) => configuration.getTranslator()(msgID, args);
|
|
148
|
+
const viewParams = incorporate({ mailer: this, _: translate }, this._viewParams);
|
|
148
149
|
return await new Promise((resolve, reject) => {
|
|
149
150
|
ejs.renderFile(viewPath, viewParams, {}, (err, str) => {
|
|
150
151
|
if (err) {
|
|
@@ -220,4 +221,4 @@ export class VelociousMailerBase {
|
|
|
220
221
|
return await mailDeliveryJob.performLater(payload);
|
|
221
222
|
}
|
|
222
223
|
}
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYWlsZXIvYmFzZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxxQkFBcUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLGNBQWMsTUFBTSxlQUFlLENBQUE7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwyR0FBMkc7QUFDM0csSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFBO0FBRTFCOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLFVBQVU7SUFDOUIsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxTQUFTO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRWpELE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLG9CQUFvQjtJQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7SUFFbkQsT0FBTyxhQUFhLENBQUMsY0FBYyxFQUFFLEtBQUssTUFBTSxDQUFBO0FBQ2xELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7OztPQUdH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Q0FBQyxDQUFBO1FBRTNFLE9BQU8sTUFBTSxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBjb25maWd1cmF0aW9uUmVzb2x2ZXIgZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb24tcmVzb2x2ZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgTWFpbGVyRGVsaXZlcnkgZnJvbSBcIi4vZGVsaXZlcnkuanNcIlxuXG4vKiogQHR5cGUge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkW119ICovXG5jb25zdCBkZWxpdmVyaWVzID0gW11cbi8qKiBAdHlwZSB7KChwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24pIHwgbnVsbH0gKi9cbmxldCBkZWxpdmVyeUhhbmRsZXIgPSBudWxsXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBNYWlsZXIgYWN0aW9uIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFZpZXcgZmlsZSBuYW1lLlxuICovXG5mdW5jdGlvbiB2aWV3RmlsZU5hbWUoYWN0aW9uTmFtZSkge1xuICByZXR1cm4gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFjdGlvbk5hbWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgLSBNYWlsZXIgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTWFpbGVyIGRpcmVjdG9yeSBuYW1lLlxuICovXG5mdW5jdGlvbiBtYWlsZXJEaXJlY3RvcnlOYW1lKGNsYXNzTmFtZSkge1xuICBjb25zdCBiYXNlTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKC9NYWlsZXIkLywgXCJcIilcblxuICByZXR1cm4gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGJhc2VOYW1lKSlcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzVGVzdGluZ0Vudmlyb25tZW50KCkge1xuICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcblxuICByZXR1cm4gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudCgpID09PSBcInRlc3RcIlxufVxuXG4vKipcbiAqIEJhc2UgbWFpbGVyIHdpdGggdmlldyByZW5kZXJpbmcgYW5kIGRlbGl2ZXJ5IGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWxvY2lvdXNNYWlsZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBDb25zdHJ1Y3RvciBhcmdzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gW2FyZ3MuY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259ID0ge30pIHtcbiAgICB0aGlzLl9hY3Rpb25OYW1lID0gbnVsbFxuICAgIHRoaXMuX21haWxPcHRpb25zID0gbnVsbFxuICAgIHRoaXMuX3ZpZXdQYXJhbXMgPSB7fVxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25Qcm9taXNlID0gY29uZmlndXJhdGlvbiA/IFByb21pc2UucmVzb2x2ZShjb25maWd1cmF0aW9uKSA6IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBWaWV3IHBhcmFtcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYXNzaWduVmlldyhwYXJhbXMpIHtcbiAgICB0aGlzLl92aWV3UGFyYW1zID0gT2JqZWN0LmFzc2lnbih0aGlzLl92aWV3UGFyYW1zLCBwYXJhbXMgfHwge30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBNYWlsIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnRvIC0gUmVjaXBpZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdWJqZWN0IC0gU3ViamVjdCBsaW5lLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuZnJvbV0gLSBTZW5kZXIuXG4gICAqIEBwYXJhbSB7YW55fSBbYXJncy5jY10gLSBDQyByZWNpcGllbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuYmNjXSAtIEJDQyByZWNpcGllbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MucmVwbHlUb10gLSBSZXBseS10byBhZGRyZXNzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFthcmdzLmhlYWRlcnNdIC0gQ3VzdG9tIGhlYWRlcnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG1haWwoe3RvLCBzdWJqZWN0LCBmcm9tLCBjYywgYmNjLCByZXBseVRvLCBoZWFkZXJzLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5fbWFpbE9wdGlvbnMgPSB7dG8sIHN1YmplY3QsIGZyb20sIGNjLCBiY2MsIHJlcGx5VG8sIGhlYWRlcnN9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBBY3Rpb24gbmFtZS5cbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFjdGlvbiBhcmdzLlxuICAgKiBAcmV0dXJucyB7TWFpbGVyRGVsaXZlcnl9IC0gRGVsaXZlcnkgd3JhcHBlci5cbiAgICovXG4gIF9idWlsZERlbGl2ZXJ5KGFjdGlvbk5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzW2FjdGlvbk5hbWVdXG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbWFpbGVyIG1ldGhvZCBcIiR7YWN0aW9uTmFtZX1cIiBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBhY3Rpb25OYW1lXG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpXG5cbiAgICByZXR1cm4gbmV3IE1haWxlckRlbGl2ZXJ5KHtcbiAgICAgIG1haWxlcjogdGhpcyxcbiAgICAgIGFjdGlvblByb21pc2U6IFByb21pc2UucmVzb2x2ZShhY3Rpb25SZXN1bHQpLFxuICAgICAgYWN0aW9uTmFtZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0Pn0gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgYXN5bmMgX2dldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRpb25Qcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBBY3Rpb24gbmFtZS5cbiAgICovXG4gIF9nZXRBY3Rpb25OYW1lKCkge1xuICAgIGlmICghdGhpcy5fYWN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtYWlsZXIgYWN0aW9uIHNldCBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBSZW5kZXJlZCBIVE1MLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IC0gRGVsaXZlcnkgcGF5bG9hZC5cbiAgICovXG4gIF9idWlsZFBheWxvYWRTeW5jKGh0bWwpIHtcbiAgICBjb25zdCBtYWlsT3B0aW9ucyA9IHRoaXMuX21haWxPcHRpb25zXG5cbiAgICBpZiAoIW1haWxPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbWFpbCgpIG9wdGlvbnMgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMuX2dldEFjdGlvbk5hbWUoKX0uIEdvdDogJHtTdHJpbmcobWFpbE9wdGlvbnMpfWApXG4gICAgfVxuXG4gICAgaWYgKCFtYWlsT3B0aW9ucy50bykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFwidG9cIiBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5fZ2V0QWN0aW9uTmFtZSgpfS4gR290OiAke1N0cmluZyhtYWlsT3B0aW9ucy50byl9YClcbiAgICB9XG5cbiAgICBpZiAoIW1haWxPcHRpb25zLnN1YmplY3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBcInN1YmplY3RcIiBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5fZ2V0QWN0aW9uTmFtZSgpfS4gR290OiAke1N0cmluZyhtYWlsT3B0aW9ucy5zdWJqZWN0KX1gKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0bzogbWFpbE9wdGlvbnMudG8sXG4gICAgICBzdWJqZWN0OiBtYWlsT3B0aW9ucy5zdWJqZWN0LFxuICAgICAgZnJvbTogbWFpbE9wdGlvbnMuZnJvbSxcbiAgICAgIGNjOiBtYWlsT3B0aW9ucy5jYyxcbiAgICAgIGJjYzogbWFpbE9wdGlvbnMuYmNjLFxuICAgICAgcmVwbHlUbzogbWFpbE9wdGlvbnMucmVwbHlUbyxcbiAgICAgIGhlYWRlcnM6IG1haWxPcHRpb25zLmhlYWRlcnMsXG4gICAgICBodG1sLFxuICAgICAgbWFpbGVyOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICBhY3Rpb246IHRoaXMuX2dldEFjdGlvbk5hbWUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZD59IC0gRGVsaXZlcnkgcGF5bG9hZC5cbiAgICovXG4gIGFzeW5jIF9idWlsZFBheWxvYWQoKSB7XG4gICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuX3JlbmRlclZpZXcoKVxuXG4gICAgcmV0dXJuIHRoaXMuX2J1aWxkUGF5bG9hZFN5bmMoaHRtbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFJlbmRlcmVkIEhUTUwuXG4gICAqL1xuICBhc3luYyBfcmVuZGVyVmlldygpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgdGhpcy5fZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgY29uc3QgbWFpbGVyRGlyID0gbWFpbGVyRGlyZWN0b3J5TmFtZSh0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IHRoaXMuX2dldEFjdGlvbk5hbWUoKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gdmlld0ZpbGVOYW1lKGFjdGlvbk5hbWUpXG4gICAgY29uc3Qgdmlld1BhdGggPSBgJHtjb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvbWFpbGVycy8ke21haWxlckRpcn0vJHtmaWxlTmFtZX0uZWpzYFxuICAgIGNvbnN0IHZpZXdQYXJhbXMgPSBpbmNvcnBvcmF0ZSh7bWFpbGVyOiB0aGlzfSwgdGhpcy5fdmlld1BhcmFtcylcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlanMucmVuZGVyRmlsZSh2aWV3UGF0aCwgdmlld1BhcmFtcywge30sIChlcnIsIHN0cikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gLyoqIEB0eXBlIHt7Y29kZT86IHN0cmluZ319ICovIChlcnIpLmNvZGVcblxuICAgICAgICAgIGlmIChlcnJvckNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgbWFpbGVyIHZpZXcgZmlsZTogJHt2aWV3UGF0aH1gKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzdHIpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWRbXX0gLSBEZWxpdmVyZWQgcGF5bG9hZHMuXG4gICAqL1xuICBzdGF0aWMgZGVsaXZlcmllcygpIHtcbiAgICByZXR1cm4gZGVsaXZlcmllcy5zbGljZSgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIGNsZWFyRGVsaXZlcmllcygpIHtcbiAgICBkZWxpdmVyaWVzLmxlbmd0aCA9IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyhwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd259IGhhbmRsZXIgLSBEZWxpdmVyeSBoYW5kbGVyLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgc2V0RGVsaXZlcnlIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICBkZWxpdmVyeUhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgeyhwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24gfCBudWxsfSAtIEhhbmRsZXIgb3IgbnVsbC5cbiAgICovXG4gIHN0YXRpYyBnZXREZWxpdmVyeUhhbmRsZXIoKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXJ5SGFuZGxlclxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IHBheWxvYWQgLSBNYWlsIGRlbGl2ZXJ5IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgdW5rbm93bj59IC0gSGFuZGxlciByZXN1bHQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZGVsaXZlclBheWxvYWQocGF5bG9hZCkge1xuICAgIGlmIChhd2FpdCBpc1Rlc3RpbmdFbnZpcm9ubWVudCgpKSB7XG4gICAgICBkZWxpdmVyaWVzLnB1c2gocGF5bG9hZClcbiAgICAgIHJldHVybiBwYXlsb2FkXG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG4gICAgY29uc3QgYmFja2VuZCA9IGNvbmZpZ3VyYXRpb24uZ2V0TWFpbGVyQmFja2VuZCgpXG5cbiAgICBpZiAoYmFja2VuZD8uZGVsaXZlcikge1xuICAgICAgcmV0dXJuIGF3YWl0IGJhY2tlbmQuZGVsaXZlcih7cGF5bG9hZCwgY29uZmlndXJhdGlvbn0pXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IGRlbGl2ZXJ5SGFuZGxlclxuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1haWwgZGVsaXZlcnkgaGFuZGxlciBjb25maWd1cmVkIGZvciBcIiR7cGF5bG9hZC5zdWJqZWN0fVwiIHRvIFwiJHtwYXlsb2FkLnRvfVwiYClcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgaGFuZGxlcihwYXlsb2FkKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IHBheWxvYWQgLSBNYWlsIGRlbGl2ZXJ5IHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkIHwgbnVsbD59IC0gSm9iIGlkIG9yIHBheWxvYWQgaW4gdGVzdCBtb2RlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGVucXVldWVQYXlsb2FkKHBheWxvYWQpIHtcbiAgICBpZiAoYXdhaXQgaXNUZXN0aW5nRW52aXJvbm1lbnQoKSkge1xuICAgICAgZGVsaXZlcmllcy5wdXNoKHBheWxvYWQpXG4gICAgICByZXR1cm4gcGF5bG9hZFxuICAgIH1cblxuICAgIGNvbnN0IHtkZWZhdWx0OiBtYWlsRGVsaXZlcnlKb2J9ID0gYXdhaXQgaW1wb3J0KFwiLi4vam9icy9tYWlsLWRlbGl2ZXJ5LmpzXCIpXG5cbiAgICByZXR1cm4gYXdhaXQgbWFpbERlbGl2ZXJ5Sm9iLnBlcmZvcm1MYXRlcihwYXlsb2FkKVxuICB9XG59XG4iXX0=
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYWlsZXIvYmFzZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxxQkFBcUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLGNBQWMsTUFBTSxlQUFlLENBQUE7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwyR0FBMkc7QUFDM0csSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFBO0FBRTFCOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLFVBQVU7SUFDOUIsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxTQUFTO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRWpELE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLG9CQUFvQjtJQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7SUFFbkQsT0FBTyxhQUFhLENBQUMsY0FBYyxFQUFFLEtBQUssTUFBTSxDQUFBO0FBQ2xELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7OztPQUdH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VSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN4QixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsTUFBTSxFQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBRTNFLE9BQU8sTUFBTSxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBjb25maWd1cmF0aW9uUmVzb2x2ZXIgZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb24tcmVzb2x2ZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgTWFpbGVyRGVsaXZlcnkgZnJvbSBcIi4vZGVsaXZlcnkuanNcIlxuXG4vKiogQHR5cGUge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkW119ICovXG5jb25zdCBkZWxpdmVyaWVzID0gW11cbi8qKiBAdHlwZSB7KChwYXlsb2FkOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCkgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24pIHwgbnVsbH0gKi9cbmxldCBkZWxpdmVyeUhhbmRsZXIgPSBudWxsXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBNYWlsZXIgYWN0aW9uIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFZpZXcgZmlsZSBuYW1lLlxuICovXG5mdW5jdGlvbiB2aWV3RmlsZU5hbWUoYWN0aW9uTmFtZSkge1xuICByZXR1cm4gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFjdGlvbk5hbWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgLSBNYWlsZXIgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTWFpbGVyIGRpcmVjdG9yeSBuYW1lLlxuICovXG5mdW5jdGlvbiBtYWlsZXJEaXJlY3RvcnlOYW1lKGNsYXNzTmFtZSkge1xuICBjb25zdCBiYXNlTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKC9NYWlsZXIkLywgXCJcIilcblxuICByZXR1cm4gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGJhc2VOYW1lKSlcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIHRlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzVGVzdGluZ0Vudmlyb25tZW50KCkge1xuICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcblxuICByZXR1cm4gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudCgpID09PSBcInRlc3RcIlxufVxuXG4vKipcbiAqIEJhc2UgbWFpbGVyIHdpdGggdmlldyByZW5kZXJpbmcgYW5kIGRlbGl2ZXJ5IGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWxvY2lvdXNNYWlsZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBDb25zdHJ1Y3RvciBhcmdzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gW2FyZ3MuY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb259ID0ge30pIHtcbiAgICB0aGlzLl9hY3Rpb25OYW1lID0gbnVsbFxuICAgIHRoaXMuX21haWxPcHRpb25zID0gbnVsbFxuICAgIHRoaXMuX3ZpZXdQYXJhbXMgPSB7fVxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25Qcm9taXNlID0gY29uZmlndXJhdGlvbiA/IFByb21pc2UucmVzb2x2ZShjb25maWd1cmF0aW9uKSA6IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBWaWV3IHBhcmFtcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYXNzaWduVmlldyhwYXJhbXMpIHtcbiAgICB0aGlzLl92aWV3UGFyYW1zID0gT2JqZWN0LmFzc2lnbih0aGlzLl92aWV3UGFyYW1zLCBwYXJhbXMgfHwge30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBNYWlsIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnRvIC0gUmVjaXBpZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdWJqZWN0IC0gU3ViamVjdCBsaW5lLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuZnJvbV0gLSBTZW5kZXIuXG4gICAqIEBwYXJhbSB7YW55fSBbYXJncy5jY10gLSBDQyByZWNpcGllbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MuYmNjXSAtIEJDQyByZWNpcGllbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gW2FyZ3MucmVwbHlUb10gLSBSZXBseS10byBhZGRyZXNzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFthcmdzLmhlYWRlcnNdIC0gQ3VzdG9tIGhlYWRlcnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG1haWwoe3RvLCBzdWJqZWN0LCBmcm9tLCBjYywgYmNjLCByZXBseVRvLCBoZWFkZXJzLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5fbWFpbE9wdGlvbnMgPSB7dG8sIHN1YmplY3QsIGZyb20sIGNjLCBiY2MsIHJlcGx5VG8sIGhlYWRlcnN9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBBY3Rpb24gbmFtZS5cbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFjdGlvbiBhcmdzLlxuICAgKiBAcmV0dXJucyB7TWFpbGVyRGVsaXZlcnl9IC0gRGVsaXZlcnkgd3JhcHBlci5cbiAgICovXG4gIF9idWlsZERlbGl2ZXJ5KGFjdGlvbk5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzW2FjdGlvbk5hbWVdXG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbWFpbGVyIG1ldGhvZCBcIiR7YWN0aW9uTmFtZX1cIiBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBhY3Rpb25OYW1lXG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpXG5cbiAgICByZXR1cm4gbmV3IE1haWxlckRlbGl2ZXJ5KHtcbiAgICAgIG1haWxlcjogdGhpcyxcbiAgICAgIGFjdGlvblByb21pc2U6IFByb21pc2UucmVzb2x2ZShhY3Rpb25SZXN1bHQpLFxuICAgICAgYWN0aW9uTmFtZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0Pn0gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgYXN5bmMgX2dldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRpb25Qcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBBY3Rpb24gbmFtZS5cbiAgICovXG4gIF9nZXRBY3Rpb25OYW1lKCkge1xuICAgIGlmICghdGhpcy5fYWN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtYWlsZXIgYWN0aW9uIHNldCBvbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBSZW5kZXJlZCBIVE1MLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IC0gRGVsaXZlcnkgcGF5bG9hZC5cbiAgICovXG4gIF9idWlsZFBheWxvYWRTeW5jKGh0bWwpIHtcbiAgICBjb25zdCBtYWlsT3B0aW9ucyA9IHRoaXMuX21haWxPcHRpb25zXG5cbiAgICBpZiAoIW1haWxPcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbWFpbCgpIG9wdGlvbnMgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMuX2dldEFjdGlvbk5hbWUoKX0uIEdvdDogJHtTdHJpbmcobWFpbE9wdGlvbnMpfWApXG4gICAgfVxuXG4gICAgaWYgKCFtYWlsT3B0aW9ucy50bykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFwidG9cIiBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5fZ2V0QWN0aW9uTmFtZSgpfS4gR290OiAke1N0cmluZyhtYWlsT3B0aW9ucy50byl9YClcbiAgICB9XG5cbiAgICBpZiAoIW1haWxPcHRpb25zLnN1YmplY3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBcInN1YmplY3RcIiBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5fZ2V0QWN0aW9uTmFtZSgpfS4gR290OiAke1N0cmluZyhtYWlsT3B0aW9ucy5zdWJqZWN0KX1gKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0bzogbWFpbE9wdGlvbnMudG8sXG4gICAgICBzdWJqZWN0OiBtYWlsT3B0aW9ucy5zdWJqZWN0LFxuICAgICAgZnJvbTogbWFpbE9wdGlvbnMuZnJvbSxcbiAgICAgIGNjOiBtYWlsT3B0aW9ucy5jYyxcbiAgICAgIGJjYzogbWFpbE9wdGlvbnMuYmNjLFxuICAgICAgcmVwbHlUbzogbWFpbE9wdGlvbnMucmVwbHlUbyxcbiAgICAgIGhlYWRlcnM6IG1haWxPcHRpb25zLmhlYWRlcnMsXG4gICAgICBodG1sLFxuICAgICAgbWFpbGVyOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICBhY3Rpb246IHRoaXMuX2dldEFjdGlvbk5hbWUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZD59IC0gRGVsaXZlcnkgcGF5bG9hZC5cbiAgICovXG4gIGFzeW5jIF9idWlsZFBheWxvYWQoKSB7XG4gICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuX3JlbmRlclZpZXcoKVxuXG4gICAgcmV0dXJuIHRoaXMuX2J1aWxkUGF5bG9hZFN5bmMoaHRtbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFJlbmRlcmVkIEhUTUwuXG4gICAqL1xuICBhc3luYyBfcmVuZGVyVmlldygpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgdGhpcy5fZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgY29uc3QgbWFpbGVyRGlyID0gbWFpbGVyRGlyZWN0b3J5TmFtZSh0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IHRoaXMuX2dldEFjdGlvbk5hbWUoKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gdmlld0ZpbGVOYW1lKGFjdGlvbk5hbWUpXG4gICAgY29uc3Qgdmlld1BhdGggPSBgJHtjb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvbWFpbGVycy8ke21haWxlckRpcn0vJHtmaWxlTmFtZX0uZWpzYFxuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IChtc2dJRCwgYXJncykgPT4gY29uZmlndXJhdGlvbi5nZXRUcmFuc2xhdG9yKCkobXNnSUQsIGFyZ3MpXG4gICAgY29uc3Qgdmlld1BhcmFtcyA9IGluY29ycG9yYXRlKHttYWlsZXI6IHRoaXMsIF86IHRyYW5zbGF0ZX0sIHRoaXMuX3ZpZXdQYXJhbXMpXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZWpzLnJlbmRlckZpbGUodmlld1BhdGgsIHZpZXdQYXJhbXMsIHt9LCAoZXJyLCBzdHIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IC8qKiBAdHlwZSB7e2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyKS5jb2RlXG5cbiAgICAgICAgICBpZiAoZXJyb3JDb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBNaXNzaW5nIG1haWxlciB2aWV3IGZpbGU6ICR7dmlld1BhdGh9YCkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc3RyKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkW119IC0gRGVsaXZlcmVkIHBheWxvYWRzLlxuICAgKi9cbiAgc3RhdGljIGRlbGl2ZXJpZXMoKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXJpZXMuc2xpY2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBjbGVhckRlbGl2ZXJpZXMoKSB7XG4gICAgZGVsaXZlcmllcy5sZW5ndGggPSAwXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsocGF5bG9hZDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQpID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3dufSBoYW5kbGVyIC0gRGVsaXZlcnkgaGFuZGxlci5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIHNldERlbGl2ZXJ5SGFuZGxlcihoYW5kbGVyKSB7XG4gICAgZGVsaXZlcnlIYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHsocGF5bG9hZDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQpID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duIHwgbnVsbH0gLSBIYW5kbGVyIG9yIG51bGwuXG4gICAqL1xuICBzdGF0aWMgZ2V0RGVsaXZlcnlIYW5kbGVyKCkge1xuICAgIHJldHVybiBkZWxpdmVyeUhhbmRsZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBwYXlsb2FkIC0gTWFpbCBkZWxpdmVyeSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCB8IHVua25vd24+fSAtIEhhbmRsZXIgcmVzdWx0LlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGRlbGl2ZXJQYXlsb2FkKHBheWxvYWQpIHtcbiAgICBpZiAoYXdhaXQgaXNUZXN0aW5nRW52aXJvbm1lbnQoKSkge1xuICAgICAgZGVsaXZlcmllcy5wdXNoKHBheWxvYWQpXG4gICAgICByZXR1cm4gcGF5bG9hZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maWd1cmF0aW9uUmVzb2x2ZXIoKVxuICAgIGNvbnN0IGJhY2tlbmQgPSBjb25maWd1cmF0aW9uLmdldE1haWxlckJhY2tlbmQoKVxuXG4gICAgaWYgKGJhY2tlbmQ/LmRlbGl2ZXIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBiYWNrZW5kLmRlbGl2ZXIoe3BheWxvYWQsIGNvbmZpZ3VyYXRpb259KVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSBkZWxpdmVyeUhhbmRsZXJcblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtYWlsIGRlbGl2ZXJ5IGhhbmRsZXIgY29uZmlndXJlZCBmb3IgXCIke3BheWxvYWQuc3ViamVjdH1cIiB0byBcIiR7cGF5bG9hZC50b31cImApXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGhhbmRsZXIocGF5bG9hZClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBwYXlsb2FkIC0gTWFpbCBkZWxpdmVyeSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCB8IG51bGw+fSAtIEpvYiBpZCBvciBwYXlsb2FkIGluIHRlc3QgbW9kZS5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBlbnF1ZXVlUGF5bG9hZChwYXlsb2FkKSB7XG4gICAgaWYgKGF3YWl0IGlzVGVzdGluZ0Vudmlyb25tZW50KCkpIHtcbiAgICAgIGRlbGl2ZXJpZXMucHVzaChwYXlsb2FkKVxuICAgICAgcmV0dXJuIHBheWxvYWRcbiAgICB9XG5cbiAgICBjb25zdCB7ZGVmYXVsdDogbWFpbERlbGl2ZXJ5Sm9ifSA9IGF3YWl0IGltcG9ydChcIi4uL2pvYnMvbWFpbC1kZWxpdmVyeS5qc1wiKVxuXG4gICAgcmV0dXJuIGF3YWl0IG1haWxEZWxpdmVyeUpvYi5wZXJmb3JtTGF0ZXIocGF5bG9hZClcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"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"}
|
|
@@ -512,10 +512,13 @@ export default class TestRunner {
|
|
|
512
512
|
const useTimeout = typeof timeoutSeconds === "number" && Number.isFinite(timeoutSeconds) && timeoutSeconds > 0;
|
|
513
513
|
const timeoutMs = useTimeout ? timeoutSeconds * 1000 : undefined;
|
|
514
514
|
let retriesUsed = 0;
|
|
515
|
+
let attemptNumber = 1;
|
|
515
516
|
while (true) {
|
|
516
517
|
let shouldRetry = false;
|
|
517
518
|
/** @type {unknown} */
|
|
518
519
|
let failedError;
|
|
520
|
+
/** @type {unknown} */
|
|
521
|
+
let lastError;
|
|
519
522
|
try {
|
|
520
523
|
await this.runWithDummyIfNeeded(testArgs, async () => {
|
|
521
524
|
try {
|
|
@@ -540,14 +543,42 @@ export default class TestRunner {
|
|
|
540
543
|
});
|
|
541
544
|
}
|
|
542
545
|
catch (error) {
|
|
546
|
+
lastError = error;
|
|
543
547
|
if (retriesUsed < retryCount) {
|
|
544
548
|
retriesUsed++;
|
|
545
549
|
shouldRetry = true;
|
|
550
|
+
await this.emitEvent("testRetrying", {
|
|
551
|
+
configuration: this.getConfiguration(),
|
|
552
|
+
descriptions,
|
|
553
|
+
error,
|
|
554
|
+
nextAttempt: attemptNumber + 1,
|
|
555
|
+
retriesUsed,
|
|
556
|
+
retryCount,
|
|
557
|
+
testArgs,
|
|
558
|
+
testData,
|
|
559
|
+
testDescription,
|
|
560
|
+
testRunner: this
|
|
561
|
+
});
|
|
546
562
|
}
|
|
547
563
|
else {
|
|
548
564
|
failedError = error;
|
|
549
565
|
}
|
|
550
566
|
}
|
|
567
|
+
if (attemptNumber > 1) {
|
|
568
|
+
await this.emitEvent("testRetried", {
|
|
569
|
+
configuration: this.getConfiguration(),
|
|
570
|
+
descriptions,
|
|
571
|
+
error: lastError,
|
|
572
|
+
attemptNumber,
|
|
573
|
+
retriesUsed,
|
|
574
|
+
retryCount,
|
|
575
|
+
testArgs,
|
|
576
|
+
testData,
|
|
577
|
+
testDescription,
|
|
578
|
+
testRunner: this
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
attemptNumber++;
|
|
551
582
|
if (shouldRetry)
|
|
552
583
|
continue;
|
|
553
584
|
if (failedError) {
|
|
@@ -671,4 +702,4 @@ export default class TestRunner {
|
|
|
671
702
|
return undefined;
|
|
672
703
|
}
|
|
673
704
|
}
|
|
674
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0LXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sV0FBVyxNQUFNLDBCQUEwQixDQUFBO0FBQ2xELE9BQU8sZ0JBQWdCLE1BQU0sK0JBQStCLENBQUE7QUFDNUQsT0FBTyxhQUFhLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxhQUFhLE1BQU0sNkJBQTZCLENBQUE7QUFDdkQsT0FBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUE7QUFDakMsT0FBTyxlQUFlLE1BQU0sY0FBYyxDQUFBO0FBRTFDOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlO0lBQ3pELE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLG1CQUFtQixjQUFjLE1BQU0sZUFBZSxFQUFFLENBQUMsQ0FBQTtJQUV4RixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFakUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMs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cm9yfSBmcm9tIFwiLi4vdXRpbHMvd2l0aC10cmFja2VkLXN0YWNrLmpzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vc3JjL2FwcGxpY2F0aW9uLmpzXCJcbmltcG9ydCBCYWNrdHJhY2VDbGVhbmVyIGZyb20gXCIuLi91dGlscy9iYWNrdHJhY2UtY2xlYW5lci5qc1wiXG5pbXBvcnQgUmVxdWVzdENsaWVudCBmcm9tIFwiLi9yZXF1ZXN0LWNsaWVudC5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dGVzdENvbmZpZywgdGVzdEV2ZW50cywgdGVzdHN9IGZyb20gXCIuL3Rlc3QuanNcIlxuaW1wb3J0IHtwYXRoVG9GaWxlVVJMfSBmcm9tIFwidXJsXCJcbmltcG9ydCB2ZWxvY2lvdXNNYWlsZXIgZnJvbSBcIi4uL21haWxlci5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtQcm9taXNlPHVua25vd24+IHwgdW5rbm93bn0gcHJvbWlzZSAtIFByb21pc2Ugb3IgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dE1zIC0gVGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVzdERlc2NyaXB0aW9uIC0gVGVzdCBkZXNjcmlwdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIG9yIHJlamVjdHMgYmFzZWQgb24gdGltZW91dCBvciBwcm9taXNlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQocHJvbWlzZSwgdGltZW91dE1zLCB0ZXN0RGVzY3JpcHRpb24pIHtcbiAgY29uc3QgdGltZW91dFNlY29uZHMgPSAodGltZW91dE1zIC8gMTAwMCkudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgXCJcIilcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGBUaW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0U2Vjb25kc31zOiAke3Rlc3REZXNjcmlwdGlvbn1gKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KHRpbWVvdXRFcnJvciksIHRpbWVvdXRNcylcblxuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICAgIHJlamVjdChlcnJvcilcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlc3RBcmdzXG4gKiBAcHJvcGVydHkge0FwcGxpY2F0aW9ufSBbYXBwbGljYXRpb25dIC0gQXBwbGljYXRpb24gaW5zdGFuY2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICogQHByb3BlcnR5IHtSZXF1ZXN0Q2xpZW50fSBbY2xpZW50XSAtIEhUVFAgY2xpZW50IGZvciByZXF1ZXN0IHRlc3RzLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtkYXRhYmFzZUNsZWFuaW5nXSAtIERhdGFiYXNlIGNsZWFudXAgb3B0aW9ucyBmb3IgdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkYXRhYmFzZUNsZWFuaW5nLnRyYW5zYWN0aW9uXSAtIFVzZSB0cmFuc2FjdGlvbnMgdG8gcm9sbGJhY2sgYmV0d2VlbiB0ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RhdGFiYXNlQ2xlYW5pbmcudHJ1bmNhdGVdIC0gVHJ1bmNhdGUgdGFibGVzIGJldHdlZW4gdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmb2N1c10gLSBXaGV0aGVyIHRoaXMgdGVzdCBpcyBmb2N1c2VkLlxuICogQHByb3BlcnR5IHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gW2Z1bmN0aW9uXSAtIFRlc3QgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3JldHJ5XSAtIE51bWJlciBvZiByZXRyaWVzIHdoZW4gYSB0ZXN0IGZhaWxzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXSB8IHN0cmluZ30gW3RhZ3NdIC0gVGFncyBmb3IgZmlsdGVyaW5nLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0U2Vjb25kc10gLSBUaW1lb3V0IGluIHNlY29uZHMgZm9yIHRoZSB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIFRlc3QgdHlwZSBpZGVudGlmaWVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVzdERhdGFcbiAqIEBwcm9wZXJ0eSB7VGVzdEFyZ3N9IGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaWxlUGF0aF0gLSBTb3VyY2UgZmlsZSBwYXRoLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsaW5lXSAtIFNvdXJjZSBsaW5lIG51bWJlci5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oVGVzdEFyZ3MpIDogKHZvaWR8UHJvbWlzZTx2b2lkPil9IGZ1bmN0aW9uIC0gVGVzdCBjYWxsYmFjayB0byBleGVjdXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIHRlc3RBcmdzOiBUZXN0QXJncywgdGVzdERhdGE6IFRlc3REYXRhfSkgOiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7QWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIEhvb2sgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgOiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge0JlZm9yZUFmdGVyQWxsQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIEhvb2sgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlc3RzQXJndW1lbnRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVzdERhdGE+fSBhcmdzIC0gQXJndW1lbnRzIGtleWVkIGJ5IHRlc3QgZGVzY3JpcHRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthbnlUZXN0c0ZvY3Vzc2VkXSAtIFdoZXRoZXIgYW55IHRlc3RzIGluIHRoZSB0cmVlIGFyZSBmb2N1c2VkLlxuICogQHByb3BlcnR5IHtBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gYWZ0ZXJFYWNoZXMgLSBBZnRlci1lYWNoIGhvb2tzIGZvciB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtCZWZvcmVBZnRlckFsbENhbGxiYWNrT2JqZWN0VHlwZVtdfSBhZnRlckFsbHMgLSBBZnRlci1hbGwgaG9va3MgZm9yIHRoaXMgc2NvcGUuXG4gKiBAcHJvcGVydHkge0JlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlW119IGJlZm9yZUFsbHMgLSBCZWZvcmUtYWxsIGhvb2tzIGZvciB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gYmVmb3JlRWFjaGVzIC0gQmVmb3JlLWVhY2ggaG9va3MgZm9yIHRoaXMgc2NvcGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbGVQYXRoXSAtIFNvdXJjZSBmaWxlIHBhdGguXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xpbmVdIC0gU291cmNlIGxpbmUgbnVtYmVyLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBUZXN0RGF0YT59IHRlc3RzIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vZGUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlc3RzQXJndW1lbnQ+fSBzdWJzIC0gT3B0aW9uYWwgY2hpbGQgbm9kZXMuIEVhY2ggaXRlbSBpcyBhbm90aGVyIGBOb2RlYCwgYWxsb3dpbmcgcmVjdXJzaW9uLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RSdW5uZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IFthcmdzLmV4Y2x1ZGVUYWdzXSAtIFRhZ3MgdG8gZXhjbHVkZS5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gW2FyZ3MuaW5jbHVkZVRhZ3NdIC0gVGFncyB0byBpbmNsdWRlLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFyZ3MudGVzdEZpbGVzIC0gVGVzdCBmaWxlcy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT59IFthcmdzLmxpbmVGaWx0ZXJzXSAtIExpbmUgZmlsdGVycyBieSBmaWxlLlxuICAgKiBAcGFyYW0ge1JlZ0V4cFtdfSBbYXJncy5leGFtcGxlUGF0dGVybnNdIC0gRXhhbXBsZSBwYXR0ZXJucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBleGNsdWRlVGFncywgaW5jbHVkZVRhZ3MsIHRlc3RGaWxlcywgbGluZUZpbHRlcnMsIGV4YW1wbGVQYXR0ZXJucywgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLl9leGNsdWRlVGFncyA9IHRoaXMubm9ybWFsaXplVGFncyhleGNsdWRlVGFncylcbiAgICB0aGlzLl9leGNsdWRlVGFnU2V0ID0gbmV3IFNldCh0aGlzLl9leGNsdWRlVGFncylcbiAgICB0aGlzLl9pbmNsdWRlVGFncyA9IHRoaXMubm9ybWFsaXplVGFncyhpbmNsdWRlVGFncylcbiAgICB0aGlzLl9pbmNsdWRlVGFnU2V0ID0gbmV3IFNldCh0aGlzLl9pbmNsdWRlVGFncylcbiAgICB0aGlzLl90ZXN0RmlsZXMgPSB0ZXN0RmlsZXNcbiAgICB0aGlzLl9saW5lRmlsdGVycyA9IGxpbmVGaWx0ZXJzIHx8IHt9XG4gICAgdGhpcy5fZXhhbXBsZVBhdHRlcm5zID0gZXhhbXBsZVBhdHRlcm5zIHx8IFtdXG5cbiAgICB0aGlzLl9mYWlsZWRUZXN0cyA9IDBcbiAgICB0aGlzLl9zdWNjZXNzZnVsVGVzdHMgPSAwXG4gICAgdGhpcy5fdGVzdHNDb3VudCA9IDBcbiAgICB0aGlzLl9hY3RpdmVBZnRlckFsbFNjb3BlcyA9IFtdXG4gICAgdGhpcy5fZmFpbGVkVGVzdERldGFpbHMgPSBbXVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbiB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIGdldFRlc3RGaWxlcygpIHsgcmV0dXJuIHRoaXMuX3Rlc3RGaWxlcyB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT59IC0gTGluZSBmaWx0ZXJzLiAqL1xuICBnZXRMaW5lRmlsdGVycygpIHsgcmV0dXJuIHRoaXMuX2xpbmVGaWx0ZXJzIH1cblxuICAvKiogQHJldHVybnMge1JlZ0V4cFtdfSAtIEV4YW1wbGUgcGF0dGVybnMuICovXG4gIGdldEV4YW1wbGVQYXR0ZXJucygpIHsgcmV0dXJuIHRoaXMuX2V4YW1wbGVQYXR0ZXJucyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWR9IHRhZ3MgLSBUYWdzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gTm9ybWFsaXplZCB0YWdzLlxuICAgKi9cbiAgbm9ybWFsaXplVGFncyh0YWdzKSB7XG4gICAgaWYgKCF0YWdzKSByZXR1cm4gW11cblxuICAgIGNvbnN0IHZhbHVlcyA9IFtdXG4gICAgY29uc3QgcmF3VGFncyA9IEFycmF5LmlzQXJyYXkodGFncykgPyB0YWdzIDogW3RhZ3NdXG5cbiAgICBmb3IgKGNvbnN0IHJhd1RhZyBvZiByYXdUYWdzKSB7XG4gICAgICBpZiAocmF3VGFnID09PSB1bmRlZmluZWQgfHwgcmF3VGFnID09PSBudWxsKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBwYXJ0cyA9IFN0cmluZyhyYXdUYWcpLnNwbGl0KFwiLFwiKVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHBhcnQudHJpbSgpXG5cbiAgICAgICAgaWYgKHRyaW1tZWQpIHZhbHVlcy5wdXNoKHRyaW1tZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VGVzdEFyZ3N9IHRlc3RBcmdzIC0gVGVzdCBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGFnIHRvIGNoZWNrIGZvci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0YWcgaXMgcHJlc2VudC5cbiAgICovXG4gIGhhc1RhZyh0ZXN0QXJncywgdGFnKSB7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVGFncyh0ZXN0QXJncz8udGFncykuaW5jbHVkZXModGFnKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgcnVubmluZyBicm93c2VyIHRlc3RzLlxuICAgKi9cbiAgaXNCcm93c2VyVGVzdE1vZGUoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZFTE9DSU9VU19CUk9XU0VSX1RFU1RTID09PSBcInRydWVcIlxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VGVzdEFyZ3N9IHRlc3RBcmdzIC0gVGVzdCBhcmdzLlxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuV2l0aER1bW15SWZOZWVkZWQodGVzdEFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmhhc1RhZyh0ZXN0QXJncywgXCJkdW1teVwiKSkge1xuICAgICAgYXdhaXQgY2FsbGJhY2soKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNCcm93c2VyVGVzdE1vZGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5Ccm93c2VyRHVtbXkoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJ1bk5vZGVEdW1teShjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuTm9kZUR1bW15KGNhbGxiYWNrKSB7XG4gICAgY29uc3QgZHVtbXlQYXRoID0gcHJvY2Vzcy5lbnYuVkVMT0NJT1VTX0RVTU1ZX1BBVEggfHwgdGhpcy5kZWZhdWx0RHVtbXlQYXRoKClcbiAgICBjb25zdCBkdW1teUltcG9ydCA9IGF3YWl0IGltcG9ydChwYXRoVG9GaWxlVVJMKGR1bW15UGF0aCkuaHJlZilcbiAgICBjb25zdCBEdW1teSA9IGR1bW15SW1wb3J0LmRlZmF1bHRcblxuICAgIGlmICghRHVtbXk/LnJ1bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdW1teSBoZWxwZXIgbm90IGZvdW5kIGF0ICR7ZHVtbXlQYXRofWApXG4gICAgfVxuXG4gICAgYXdhaXQgRHVtbXkucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRGVmYXVsdCBkdW1teSBoZWxwZXIgcGF0aC5cbiAgICovXG4gIGRlZmF1bHREdW1teVBhdGgoKSB7XG4gICAgY29uc3QgY3dkID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGN3ZC5zcGxpdChwYXRoLnNlcCkuam9pbihcIi9cIilcblxuICAgIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKFwiL3NwZWMvZHVtbXlcIikpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oY3dkLCBcImluZGV4LmpzXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihjd2QsIFwic3BlYy9kdW1teS9pbmRleC5qc1wiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW5Ccm93c2VyRHVtbXkoY2FsbGJhY2spIHtcbiAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoZGJzKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnRydW5jYXRlRGF0YWJhc2VzKGRicylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2FsbGJhY2soKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgdGhpcy50cnVuY2F0ZURhdGFiYXNlcyhkYnMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gZGJzIC0gRGF0YWJhc2UgY29ubmVjdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyB0cnVuY2F0ZURhdGFiYXNlcyhkYnMpIHtcbiAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgT2JqZWN0LmtleXMoZGJzKSkge1xuICAgICAgYXdhaXQgZGJzW2lkZW50aWZpZXJdLnRydW5jYXRlQWxsVGFibGVzKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1NldDxzdHJpbmc+fSAtIEV4Y2x1ZGUgdGFnIHNldC5cbiAgICovXG4gIGdldEV4Y2x1ZGVUYWdTZXQoKSB7XG4gICAgY29uc3QgY29uZmlnVGFncyA9IEFycmF5LmlzQXJyYXkodGVzdENvbmZpZy5leGNsdWRlVGFncykgPyB0ZXN0Q29uZmlnLmV4Y2x1ZGVUYWdzIDogW11cblxuICAgIHJldHVybiBuZXcgU2V0KFsuLi50aGlzLl9leGNsdWRlVGFncywgLi4uY29uZmlnVGFnc10pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZH0gdGVzdFRhZ3MgLSBUZXN0IHRhZ3MuXG4gICAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHRhZ1NldCAtIFRhZyBzZXQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgYW55IHRhZ3MgbWF0Y2guXG4gICAqL1xuICBoYXNNYXRjaGluZ1RhZyh0ZXN0VGFncywgdGFnU2V0KSB7XG4gICAgaWYgKCF0YWdTZXQuc2l6ZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVUYWdzKHRlc3RUYWdzKVxuXG4gICAgZm9yIChjb25zdCB0YWcgb2Ygbm9ybWFsaXplZCkge1xuICAgICAgaWYgKHRhZ1NldC5oYXModGFnKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RzQXJndW1lbnR9IHRlc3RzIC0gVGVzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXNjcmlwdGlvbnNdIC0gRGVzY3JpcHRpb24gc3RhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xpbmVNYXRjaGVkSW5TY29wZV0gLSBXaGV0aGVyIGxpbmUgbWF0Y2hlZCBpbiBzY29wZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBhbnkgdGVzdHMgaW4gdGhpcyBzY29wZSB3aWxsIHJ1bi5cbiAgICovXG4gIGhhc1J1bm5hYmxlVGVzdHModGVzdHMsIGRlc2NyaXB0aW9ucyA9IFtdLCBsaW5lTWF0Y2hlZEluU2NvcGUgPSBmYWxzZSkge1xuICAgIGZvciAoY29uc3QgdGVzdERlc2NyaXB0aW9uIGluIHRlc3RzLnRlc3RzKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IHRlc3RzLnRlc3RzW3Rlc3REZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHRlc3RBcmdzID0gLyoqIEB0eXBlIHtUZXN0QXJnc30gKi8gKE9iamVjdC5hc3NpZ24oe30sIHRlc3REYXRhLmFyZ3MpKVxuICAgICAgY29uc3QgaW5jbHVkZUJ5TGluZSA9IGxpbmVNYXRjaGVkSW5TY29wZSB8fCB0aGlzLm1hdGNoZXNMaW5lRmlsdGVyKHRlc3REYXRhKVxuXG4gICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICF0ZXN0QXJncy5mb2N1cykgY29udGludWVcbiAgICAgIGlmICh0aGlzLnNob3VsZFNraXBUZXN0KHRlc3RBcmdzLCB0ZXN0RGF0YSwgdGVzdERlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbnMsIGluY2x1ZGVCeUxpbmUpKSBjb250aW51ZVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3ViRGVzY3JpcHRpb24gaW4gdGVzdHMuc3Vicykge1xuICAgICAgY29uc3Qgc3ViVGVzdCA9IHRlc3RzLnN1YnNbc3ViRGVzY3JpcHRpb25dXG4gICAgICBjb25zdCBzY29wZUxpbmVNYXRjaCA9IGxpbmVNYXRjaGVkSW5TY29wZSB8fCB0aGlzLm1hdGNoZXNMaW5lRmlsdGVyKHN1YlRlc3QpXG4gICAgICBjb25zdCBuZXh0RGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zLmNvbmNhdChbc3ViRGVzY3JpcHRpb25dKVxuXG4gICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICFzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQpIGNvbnRpbnVlXG4gICAgICBpZiAodGhpcy5oYXNSdW5uYWJsZVRlc3RzKHN1YlRlc3QsIG5leHREZXNjcmlwdGlvbnMsIHNjb3BlTGluZU1hdGNoKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RBcmdzfSB0ZXN0QXJncyAtIFRlc3QgYXJncy5cbiAgICogQHBhcmFtIHtUZXN0RGF0YX0gdGVzdERhdGEgLSBUZXN0IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXN0RGVzY3JpcHRpb24gLSBUZXN0IGRlc2NyaXB0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXNjcmlwdGlvbnMgLSBEZXNjcmlwdGlvbiBzdGFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBsaW5lTWF0Y2hlZEluU2NvcGUgLSBXaGV0aGVyIGxpbmUgbWF0Y2hlZCBpbiBzY29wZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgdGVzdCBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICovXG4gIHNob3VsZFNraXBUZXN0KHRlc3RBcmdzLCB0ZXN0RGF0YSwgdGVzdERlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbnMsIGxpbmVNYXRjaGVkSW5TY29wZSkge1xuICAgIGlmICh0aGlzLmhhc01hdGNoaW5nVGFnKHRlc3RBcmdzLnRhZ3MsIHRoaXMuZ2V0RXhjbHVkZVRhZ1NldCgpKSkgcmV0dXJuIHRydWVcblxuICAgIGlmICh0aGlzLl9pbmNsdWRlVGFnU2V0LnNpemUgPiAwICYmICF0ZXN0QXJncy5mb2N1cykge1xuICAgICAgaWYgKCF0aGlzLmhhc01hdGNoaW5nVGFnKHRlc3RBcmdzLnRhZ3MsIHRoaXMuX2luY2x1ZGVUYWdTZXQpKSByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldEV4YW1wbGVQYXR0ZXJucygpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZ1bGxEZXNjcmlwdGlvbiA9IHRoaXMuYnVpbGRGdWxsRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24pXG4gICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5nZXRFeGFtcGxlUGF0dGVybnMoKS5zb21lKChwYXR0ZXJuKSA9PiB7XG4gICAgICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMFxuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KGZ1bGxEZXNjcmlwdGlvbilcbiAgICAgIH0pXG5cbiAgICAgIGlmICghbWF0Y2hlcykgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lRmlsdGVycyA9IHRoaXMuZ2V0TGluZUZpbHRlcnMoKVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGxpbmVGaWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIWxpbmVNYXRjaGVkSW5TY29wZSAmJiAhdGhpcy5tYXRjaGVzTGluZUZpbHRlcih0ZXN0RGF0YSkpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtUZXN0RGF0YSB8IFRlc3RzQXJndW1lbnR9IGVudHJ5IC0gVGVzdCBlbnRyeS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBsaW5lIGZpbHRlciBtYXRjaGVzIGVudHJ5LlxuICAgKi9cbiAgbWF0Y2hlc0xpbmVGaWx0ZXIoZW50cnkpIHtcbiAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS5maWxlUGF0aCB8fCAhZW50cnkubGluZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShlbnRyeS5maWxlUGF0aClcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMuZ2V0TGluZUZpbHRlcnMoKVtmaWxlUGF0aF1cblxuICAgIGlmICghbGluZXMgfHwgbGluZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiBsaW5lcy5pbmNsdWRlcyhlbnRyeS5saW5lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGRlc2NyaXB0aW9ucyAtIERlc2NyaXB0aW9uIHN0YWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdERlc2NyaXB0aW9uIC0gVGVzdCBkZXNjcmlwdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGdWxsIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgYnVpbGRGdWxsRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24pIHtcbiAgICBjb25zdCBwYXJ0cyA9IGRlc2NyaXB0aW9ucy5jb25jYXQoW3Rlc3REZXNjcmlwdGlvbl0pXG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIiBcIikudHJpbSgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8QXBwbGljYXRpb24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgYXN5bmMgYXBwbGljYXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9hcHBsaWNhdGlvbikge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBuZXcgQXBwbGljYXRpb24oe1xuICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgaHR0cFNlcnZlcjoge3BvcnQ6IDMxMDA2fSxcbiAgICAgICAgdHlwZTogXCJ0ZXN0LXJ1bm5lclwiXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLl9hcHBsaWNhdGlvbi5pbml0aWFsaXplKClcbiAgICAgIGF3YWl0IHRoaXMuX2FwcGxpY2F0aW9uLnN0YXJ0SHR0cFNlcnZlcigpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVxdWVzdENsaWVudD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcmVxdWVzdCBjbGllbnQuXG4gICAqL1xuICBhc3luYyByZXF1ZXN0Q2xpZW50KCkge1xuICAgIGlmICghdGhpcy5fcmVxdWVzdENsaWVudCkge1xuICAgICAgdGhpcy5fcmVxdWVzdENsaWVudCA9IG5ldyBSZXF1ZXN0Q2xpZW50KClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdENsaWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBpbXBvcnRUZXN0RmlsZXMoKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RW52aXJvbm1lbnRIYW5kbGVyKCkuaW1wb3J0VGVzdEZpbGVzKHRoaXMuZ2V0VGVzdEZpbGVzKCkpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBmYWlsZWQuXG4gICAqL1xuICBpc0ZhaWxlZCgpIHsgcmV0dXJuIHRoaXMuX2ZhaWxlZFRlc3RzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fZmFpbGVkVGVzdHMgPiAwIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgZmFpbGVkIHRlc3RzLlxuICAgKi9cbiAgZ2V0RmFpbGVkVGVzdHMoKSB7XG4gICAgaWYgKHRoaXMuX2ZhaWxlZFRlc3RzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcblxuICAgIHJldHVybiB0aGlzLl9mYWlsZWRUZXN0c1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTx7ZnVsbERlc2NyaXB0aW9uOiBzdHJpbmcsIGZpbGVQYXRoPzogc3RyaW5nLCBsaW5lPzogbnVtYmVyLCBlcnJvcjogdW5rbm93bn0+fSAtIEZhaWxlZCB0ZXN0IGRldGFpbHMuICovXG4gIGdldEZhaWxlZFRlc3REZXRhaWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9mYWlsZWRUZXN0RGV0YWlsc1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIHN1Y2Nlc3NmdWwgdGVzdHMuXG4gICAqL1xuICBnZXRTdWNjZXNzZnVsVGVzdHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJUZXN0cyBoYXNuJ3QgYmVlbiBydW4geWV0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgdGVzdHMgY291bnQuXG4gICAqL1xuICBnZXRUZXN0c0NvdW50KCkge1xuICAgIGlmICh0aGlzLl90ZXN0c0NvdW50ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcblxuICAgIHJldHVybiB0aGlzLl90ZXN0c0NvdW50XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgZXhlY3V0ZWQgdGVzdHMgY291bnQuXG4gICAqL1xuICBnZXRFeGVjdXRlZFRlc3RzQ291bnQoKSB7XG4gICAgaWYgKHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX2ZhaWxlZFRlc3RzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzICsgdGhpcy5fZmFpbGVkVGVzdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICB0aGlzLmFueVRlc3RzRm9jdXNzZWQgPSBmYWxzZVxuICAgIHRoaXMuX2ZhaWxlZFRlc3RzID0gMFxuICAgIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9IDBcbiAgICB0aGlzLl90ZXN0c0NvdW50ID0gMFxuICAgIHRoaXMuX2ZhaWxlZFRlc3REZXRhaWxzID0gW11cbiAgICBhd2FpdCB0aGlzLmltcG9ydFRlc3RGaWxlcygpXG4gICAgYXdhaXQgdGhpcy5hbmFseXplVGVzdHModGVzdHMpXG4gICAgdGhpcy5fb25seUZvY3Vzc2VkID0gdGhpcy5hbnlUZXN0c0ZvY3Vzc2VkXG5cbiAgICBjb25zdCB0ZXN0aW5nQ29uZmlnUGF0aCA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldFRlc3RpbmcoKVxuXG4gICAgaWYgKHRlc3RpbmdDb25maWdQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5pbXBvcnRUZXN0aW5nQ29uZmlnUGF0aCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgYW55IHRlc3RzIGZvY3Vzc2VkLlxuICAgKi9cbiAgYXJlQW55VGVzdHNGb2N1c3NlZCgpIHtcbiAgICBpZiAodGhpcy5hbnlUZXN0c0ZvY3Vzc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkhhc24ndCBiZWVuIGRldGVjdGVkIHlldFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFueVRlc3RzRm9jdXNzZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuKCkge1xuICAgIGF3YWl0IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmVuc3VyZUNvbm5lY3Rpb25zKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMucnVuVGVzdHMoe1xuICAgICAgICBhZnRlckVhY2hlczogW10sXG4gICAgICAgIGJlZm9yZUVhY2hlczogW10sXG4gICAgICAgIHRlc3RzLFxuICAgICAgICBkZXNjcmlwdGlvbnM6IFtdLFxuICAgICAgICBpbmRlbnRMZXZlbDogMFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY2xlYW51cCBob29rcyBmaW5pc2guXG4gICAqL1xuICBhc3luYyBydW5BZnRlckFsbHNGb3JBY3RpdmVTY29wZXMoKSB7XG4gICAgY29uc3Qgc2NvcGVzID0gWy4uLnRoaXMuX2FjdGl2ZUFmdGVyQWxsU2NvcGVzXS5yZXZlcnNlKClcblxuICAgIGZvciAoY29uc3Qgc2NvcGUgb2Ygc2NvcGVzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyQWxsc0ZvclNjb3BlKHNjb3BlKVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZUFmdGVyQWxsU2NvcGVzID0gW11cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RzQXJndW1lbnR9IHRlc3RzIC0gVGVzdHMuXG4gICAqIEByZXR1cm5zIHt7YW55VGVzdHNGb2N1c3NlZDogYm9vbGVhbn19IC0gV2hldGhlciBhbnkgdGVzdHMgaW4gdGhlIHRyZWUgYXJlIGZvY3VzZWQuXG4gICAqL1xuICBhbmFseXplVGVzdHModGVzdHMpIHtcbiAgICBsZXQgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gZmFsc2VcblxuICAgIGZvciAoY29uc3QgdGVzdERlc2NyaXB0aW9uIGluIHRlc3RzLnRlc3RzKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IHRlc3RzLnRlc3RzW3Rlc3REZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHRlc3RBcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGVzdERhdGEuYXJncylcblxuICAgICAgdGhpcy5fdGVzdHNDb3VudCsrXG5cbiAgICAgIGlmICh0ZXN0QXJncy5mb2N1cykge1xuICAgICAgICBhbnlUZXN0c0ZvY3Vzc2VkRm91bmQgPSB0cnVlXG4gICAgICAgIHRoaXMuYW55VGVzdHNGb2N1c3NlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN1YkRlc2NyaXB0aW9uIGluIHRlc3RzLnN1YnMpIHtcbiAgICAgIGNvbnN0IHN1YlRlc3QgPSB0ZXN0cy5zdWJzW3N1YkRlc2NyaXB0aW9uXVxuICAgICAgY29uc3Qge2FueVRlc3RzRm9jdXNzZWR9ID0gdGhpcy5hbmFseXplVGVzdHMoc3ViVGVzdClcblxuICAgICAgaWYgKGFueVRlc3RzRm9jdXNzZWQpIHtcbiAgICAgICAgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQgPSBhbnlUZXN0c0ZvY3Vzc2VkXG4gICAgfVxuXG4gICAgcmV0dXJuIHthbnlUZXN0c0ZvY3Vzc2VkOiBhbnlUZXN0c0ZvY3Vzc2VkRm91bmR9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtBcnJheTxBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGU+fSBhcmdzLmFmdGVyRWFjaGVzIC0gQWZ0ZXIgZWFjaGVzLlxuICAgKiBAcGFyYW0ge0FycmF5PEFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZT59IGFyZ3MuYmVmb3JlRWFjaGVzIC0gQmVmb3JlIGVhY2hlcy5cbiAgICogQHBhcmFtIHtUZXN0c0FyZ3VtZW50fSBhcmdzLnRlc3RzIC0gVGVzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuZGVzY3JpcHRpb25zIC0gRGVzY3JpcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbmRlbnRMZXZlbCAtIEluZGVudCBsZXZlbC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5saW5lTWF0Y2hlZEluU2NvcGVdIC0gV2hldGhlciBsaW5lIG1hdGNoZWQgaW4gc2NvcGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW5UZXN0cyh7YWZ0ZXJFYWNoZXMsIGJlZm9yZUVhY2hlcywgdGVzdHMsIGRlc2NyaXB0aW9ucywgaW5kZW50TGV2ZWwsIGxpbmVNYXRjaGVkSW5TY29wZSA9IGZhbHNlfSkge1xuICAgIGNvbnN0IGxlZnRQYWRkaW5nID0gXCIgXCIucmVwZWF0KGluZGVudExldmVsICogMilcbiAgICBjb25zdCBuZXdBZnRlckVhY2hlcyA9IFsuLi5hZnRlckVhY2hlcywgLi4udGVzdHMuYWZ0ZXJFYWNoZXNdXG4gICAgY29uc3QgbmV3QmVmb3JlRWFjaGVzID0gWy4uLmJlZm9yZUVhY2hlcywgLi4udGVzdHMuYmVmb3JlRWFjaGVzXVxuICAgIGNvbnN0IHNjb3BlTGluZU1hdGNoID0gbGluZU1hdGNoZWRJblNjb3BlIHx8IHRoaXMubWF0Y2hlc0xpbmVGaWx0ZXIodGVzdHMpXG4gICAgY29uc3Qgc2hvdWxkUnVuQW55VGVzdHMgPSB0aGlzLmhhc1J1bm5hYmxlVGVzdHModGVzdHMsIGRlc2NyaXB0aW9ucywgc2NvcGVMaW5lTWF0Y2gpXG5cbiAgICBpZiAoIXNob3VsZFJ1bkFueVRlc3RzKSByZXR1cm5cblxuICAgIC8qKiBAdHlwZSB7e3Rlc3RzOiBUZXN0c0FyZ3VtZW50LCBhZnRlckFsbHNSdW46IGJvb2xlYW59fSAqL1xuICAgIGNvbnN0IHNjb3BlRW50cnkgPSB7dGVzdHMsIGFmdGVyQWxsc1J1bjogZmFsc2V9XG4gICAgdGhpcy5fYWN0aXZlQWZ0ZXJBbGxTY29wZXMucHVzaChzY29wZUVudHJ5KVxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgYmVmb3JlQWxsRGF0YSBvZiB0ZXN0cy5iZWZvcmVBbGxzIHx8IFtdKSB7XG4gICAgICAgIGF3YWl0IGJlZm9yZUFsbERhdGEuY2FsbGJhY2soe2NvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB0ZXN0RGVzY3JpcHRpb24gaW4gdGVzdHMudGVzdHMpIHtcbiAgICAgICAgY29uc3QgdGVzdERhdGEgPSB0ZXN0cy50ZXN0c1t0ZXN0RGVzY3JpcHRpb25dXG4gICAgICAgIGNvbnN0IHRlc3RBcmdzID0gLyoqIEB0eXBlIHtUZXN0QXJnc30gKi8gKE9iamVjdC5hc3NpZ24oe30sIHRlc3REYXRhLmFyZ3MpKVxuICAgICAgICBjb25zdCBpbmNsdWRlQnlMaW5lID0gc2NvcGVMaW5lTWF0Y2ggfHwgdGhpcy5tYXRjaGVzTGluZUZpbHRlcih0ZXN0RGF0YSlcblxuICAgICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICF0ZXN0QXJncy5mb2N1cykgY29udGludWVcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFRlc3QodGVzdEFyZ3MsIHRlc3REYXRhLCB0ZXN0RGVzY3JpcHRpb24sIGRlc2NyaXB0aW9ucywgaW5jbHVkZUJ5TGluZSkpIGNvbnRpbnVlXG5cbiAgICAgICAgaWYgKHRlc3RBcmdzLnR5cGUgPT0gXCJtb2RlbFwiIHx8IHRlc3RBcmdzLnR5cGUgPT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgICB0ZXN0QXJncy5hcHBsaWNhdGlvbiA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24oKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRlc3RBcmdzLnR5cGUgPT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgICB0ZXN0QXJncy5jbGllbnQgPSBhd2FpdCB0aGlzLnJlcXVlc3RDbGllbnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9aXQgJHt0ZXN0RGVzY3JpcHRpb259YClcblxuICAgICAgICBjb25zdCByZXRyeUNvdW50ID0gdHlwZW9mIHRlc3RBcmdzLnJldHJ5ID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0ZXN0QXJncy5yZXRyeSlcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodGVzdEFyZ3MucmV0cnkpKVxuICAgICAgICAgIDogMFxuICAgICAgICBjb25zdCBjb25maWdUaW1lb3V0U2Vjb25kcyA9IHR5cGVvZiB0ZXN0Q29uZmlnLmRlZmF1bHRUaW1lb3V0U2Vjb25kcyA9PT0gXCJudW1iZXJcIiA/IHRlc3RDb25maWcuZGVmYXVsdFRpbWVvdXRTZWNvbmRzIDogdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gdHlwZW9mIHRlc3RBcmdzLnRpbWVvdXRTZWNvbmRzID09PSBcIm51bWJlclwiID8gdGVzdEFyZ3MudGltZW91dFNlY29uZHMgOiBjb25maWdUaW1lb3V0U2Vjb25kc1xuICAgICAgICBjb25zdCB1c2VUaW1lb3V0ID0gdHlwZW9mIHRpbWVvdXRTZWNvbmRzID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0aW1lb3V0U2Vjb25kcykgJiYgdGltZW91dFNlY29uZHMgPiAwXG4gICAgICAgIGNvbnN0IHRpbWVvdXRNcyA9IHVzZVRpbWVvdXQgPyB0aW1lb3V0U2Vjb25kcyAqIDEwMDAgOiB1bmRlZmluZWRcbiAgICAgICAgbGV0IHJldHJpZXNVc2VkID0gMFxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgbGV0IHNob3VsZFJldHJ5ID0gZmFsc2VcbiAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovXG4gICAgICAgICAgbGV0IGZhaWxlZEVycm9yXG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5XaXRoRHVtbXlJZk5lZWRlZCh0ZXN0QXJncywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZlbG9jaW91c01haWxlci5jbGVhckRlbGl2ZXJpZXMoKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYmVmb3JlRWFjaERhdGEgb2YgbmV3QmVmb3JlRWFjaGVzKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBiZWZvcmVFYWNoRGF0YS5jYWxsYmFjayh7Y29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksIHRlc3RBcmdzLCB0ZXN0RGF0YX0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdFByb21pc2UgPSB0ZXN0RGF0YS5mdW5jdGlvbih0ZXN0QXJncylcblxuICAgICAgICAgICAgICAgIGlmICh1c2VUaW1lb3V0ICYmIHRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBydW5XaXRoVGltZW91dCh0ZXN0UHJvbWlzZSwgdGltZW91dE1zLCB0ZXN0RGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRlc3RQcm9taXNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cysrXG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZnRlckVhY2hEYXRhIG9mIG5ld0FmdGVyRWFjaGVzKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBhZnRlckVhY2hEYXRhLmNhbGxiYWNrKHtjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSwgdGVzdEFyZ3MsIHRlc3REYXRhfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChyZXRyaWVzVXNlZCA8IHJldHJ5Q291bnQpIHtcbiAgICAgICAgICAgICAgcmV0cmllc1VzZWQrK1xuICAgICAgICAgICAgICBzaG91bGRSZXRyeSA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZhaWxlZEVycm9yID0gZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmV0cnkpIGNvbnRpbnVlXG5cbiAgICAgICAgICBpZiAoZmFpbGVkRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFRlc3RzKytcbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFRlc3REZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICBmdWxsRGVzY3JpcHRpb246IHRoaXMuYnVpbGRGdWxsRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogdGVzdERhdGEuZmlsZVBhdGgsXG4gICAgICAgICAgICAgIGxpbmU6IHRlc3REYXRhLmxpbmUsXG4gICAgICAgICAgICAgIGVycm9yOiBmYWlsZWRFcnJvclxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYgKGZhaWxlZEVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsZWZ0UGFkZGluZ30gIFRlc3QgZmFpbGVkOmAsIGZhaWxlZEVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgIGFkZFRyYWNrZWRTdGFja1RvRXJyb3IoZmFpbGVkRXJyb3IpXG5cbiAgICAgICAgICAgICAgY29uc3QgYmFja3RyYWNlQ2xlYW5lciA9IG5ldyBCYWNrdHJhY2VDbGVhbmVyKGZhaWxlZEVycm9yKVxuICAgICAgICAgICAgICBjb25zdCBjbGVhbmVkU3RhY2sgPSBiYWNrdHJhY2VDbGVhbmVyLmdldENsZWFuZWRTdGFjaygpXG4gICAgICAgICAgICAgIGNvbnN0IHN0YWNrTGluZXMgPSBjbGVhbmVkU3RhY2s/LnNwbGl0KFwiXFxuXCIpXG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrTGluZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0YWNrTGluZSBvZiBzdGFja0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2xlZnRQYWRkaW5nfSAgJHtzdGFja0xpbmV9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bGVmdFBhZGRpbmd9ICBUZXN0IGZhaWxlZCB3aXRoIGEgJHt0eXBlb2YgZmFpbGVkRXJyb3J9OmAsIGZhaWxlZEVycm9yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRFdmVudChcInRlc3RGYWlsZWRcIiwge1xuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgICBlcnJvcjogZmFpbGVkRXJyb3IsXG4gICAgICAgICAgICAgIHRlc3RBcmdzLFxuICAgICAgICAgICAgICB0ZXN0RGF0YSxcbiAgICAgICAgICAgICAgdGVzdERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICB0ZXN0UnVubmVyOiB0aGlzXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLnByaW50UmVydW5Db21tYW5kKHtkZXNjcmlwdGlvbnMsIHRlc3REZXNjcmlwdGlvbiwgdGVzdERhdGEsIGxlZnRQYWRkaW5nfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgc3ViRGVzY3JpcHRpb24gaW4gdGVzdHMuc3Vicykge1xuICAgICAgICBjb25zdCBzdWJUZXN0ID0gdGVzdHMuc3Vic1tzdWJEZXNjcmlwdGlvbl1cbiAgICAgICAgY29uc3QgbmV3RGVjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnMuY29uY2F0KFtzdWJEZXNjcmlwdGlvbl0pXG4gICAgICAgIGNvbnN0IGNoaWxkU2NvcGVMaW5lTWF0Y2ggPSBzY29wZUxpbmVNYXRjaCB8fCB0aGlzLm1hdGNoZXNMaW5lRmlsdGVyKHN1YlRlc3QpXG5cbiAgICAgICAgaWYgKCF0aGlzLl9vbmx5Rm9jdXNzZWQgfHwgc3ViVGVzdC5hbnlUZXN0c0ZvY3Vzc2VkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9JHtzdWJEZXNjcmlwdGlvbn1gKVxuICAgICAgICAgIGF3YWl0IHRoaXMucnVuVGVzdHMoe1xuICAgICAgICAgICAgYWZ0ZXJFYWNoZXM6IG5ld0FmdGVyRWFjaGVzLFxuICAgICAgICAgICAgYmVmb3JlRWFjaGVzOiBuZXdCZWZvcmVFYWNoZXMsXG4gICAgICAgICAgICB0ZXN0czogc3ViVGVzdCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uczogbmV3RGVjcmlwdGlvbnMsXG4gICAgICAgICAgICBpbmRlbnRMZXZlbDogaW5kZW50TGV2ZWwgKyAxLFxuICAgICAgICAgICAgbGluZU1hdGNoZWRJblNjb3BlOiBjaGlsZFNjb3BlTGluZU1hdGNoXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyQWxsc0ZvclNjb3BlKHNjb3BlRW50cnkpXG4gICAgICBjb25zdCBzY29wZUluZGV4ID0gdGhpcy5fYWN0aXZlQWZ0ZXJBbGxTY29wZXMuaW5kZXhPZihzY29wZUVudHJ5KVxuXG4gICAgICBpZiAoc2NvcGVJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUFmdGVyQWxsU2NvcGVzLnNwbGljZShzY29wZUluZGV4LCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3t0ZXN0czogVGVzdHNBcmd1bWVudCwgYWZ0ZXJBbGxzUnVuOiBib29sZWFufX0gc2NvcGVFbnRyeSAtIFNjb3BlIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHNjb3BlIGNsZWFudXAgZmluaXNoZXMuXG4gICAqL1xuICBhc3luYyBydW5BZnRlckFsbHNGb3JTY29wZShzY29wZUVudHJ5KSB7XG4gICAgaWYgKHNjb3BlRW50cnkuYWZ0ZXJBbGxzUnVuKSByZXR1cm5cblxuICAgIHNjb3BlRW50cnkuYWZ0ZXJBbGxzUnVuID0gdHJ1ZVxuXG4gICAgZm9yIChjb25zdCBhZnRlckFsbERhdGEgb2Ygc2NvcGVFbnRyeS50ZXN0cy5hZnRlckFsbHMgfHwgW10pIHtcbiAgICAgIGF3YWl0IGFmdGVyQWxsRGF0YS5jYWxsYmFjayh7Y29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCl9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGFsbCBsaXN0ZW5lcnMgY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBlbWl0RXZlbnQoZXZlbnROYW1lLCBwYXlsb2FkKSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gdGVzdEV2ZW50cy5saXN0ZW5lcnMoZXZlbnROYW1lKVxuXG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgIGF3YWl0IGxpc3RlbmVyKHBheWxvYWQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuZGVzY3JpcHRpb25zIC0gRGVzY3JpcHRpb24gc3RhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRlc3REZXNjcmlwdGlvbiAtIFRlc3QgZGVzY3JpcHRpb24uXG4gICAqIEBwYXJhbSB7VGVzdERhdGF9IGFyZ3MudGVzdERhdGEgLSBUZXN0IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmxlZnRQYWRkaW5nIC0gTGVmdCBwYWRkaW5nLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwcmludFJlcnVuQ29tbWFuZCh7ZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24sIHRlc3REYXRhLCBsZWZ0UGFkZGluZ30pIHtcbiAgICBjb25zdCByZXJ1biA9IHRoaXMuYnVpbGRSZXJ1bkNvbW1hbmQoe2Rlc2NyaXB0aW9ucywgdGVzdERlc2NyaXB0aW9uLCB0ZXN0RGF0YX0pXG5cbiAgICBpZiAocmVydW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bGVmdFBhZGRpbmd9ICBSZS1ydW46ICR7cmVydW59YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncy5kZXNjcmlwdGlvbnMgLSBEZXNjcmlwdGlvbiBzdGFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGVzdERlc2NyaXB0aW9uIC0gVGVzdCBkZXNjcmlwdGlvbi5cbiAgICogQHBhcmFtIHtUZXN0RGF0YX0gYXJncy50ZXN0RGF0YSAtIFRlc3QgZGF0YS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBSZXJ1biBjb21tYW5kLlxuICAgKi9cbiAgYnVpbGRSZXJ1bkNvbW1hbmQoe2Rlc2NyaXB0aW9ucywgdGVzdERlc2NyaXB0aW9uLCB0ZXN0RGF0YX0pIHtcbiAgICBjb25zdCBiYXNlQ29tbWFuZCA9IFwibnB4IHZlbG9jaW91cyB0ZXN0XCJcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRlc3REYXRhLmZpbGVQYXRoXG4gICAgY29uc3QgbGluZSA9IHRlc3REYXRhLmxpbmVcblxuICAgIGlmIChmaWxlUGF0aCAmJiBsaW5lKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKVxuICAgICAgcmV0dXJuIGAke2Jhc2VDb21tYW5kfSAke3JlbGF0aXZlUGF0aH06JHtsaW5lfWBcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsRGVzY3JpcHRpb24gPSB0aGlzLmJ1aWxkRnVsbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9ucywgdGVzdERlc2NyaXB0aW9uKVxuXG4gICAgaWYgKGZ1bGxEZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGAke2Jhc2VDb21tYW5kfSAtLWV4YW1wbGUgJHtKU09OLnN0cmluZ2lmeShmdWxsRGVzY3JpcHRpb24pfWBcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cbiJdfQ==
|
|
705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0LXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sV0FBVyxNQUFNLDBCQUEwQixDQUFBO0FBQ2xELE9BQU8sZ0JBQWdCLE1BQU0sK0JBQStCLENBQUE7QUFDNUQsT0FBTyxhQUFhLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxhQUFhLE1BQU0sNkJBQTZCLENBQUE7QUFDdkQsT0FBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUE7QUFDakMsT0FBTyxlQUFlLE1BQU0sY0FBYyxDQUFBO0FBRTFDOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlO0lBQ3pELE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLG1CQUFtQixjQUFjLE1BQU0sZUFBZSxFQUFFLENBQUMsQ0FBQTtJQUV4RixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFakUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMs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QkFBaUIsQ0FBQyxFQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFDO1FBQ3pELE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFBO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUE7UUFDbEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQTtRQUUxQixJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUMzRCxPQUFPLEdBQUcsV0FBVyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUNqRCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUVoRixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxXQUFXLGNBQWMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFBO1FBQ3RFLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHthZGRUcmFja2VkU3RhY2tUb0Vycm9yfSBmcm9tIFwiLi4vdXRpbHMvd2l0aC10cmFja2VkLXN0YWNrLmpzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vc3JjL2FwcGxpY2F0aW9uLmpzXCJcbmltcG9ydCBCYWNrdHJhY2VDbGVhbmVyIGZyb20gXCIuLi91dGlscy9iYWNrdHJhY2UtY2xlYW5lci5qc1wiXG5pbXBvcnQgUmVxdWVzdENsaWVudCBmcm9tIFwiLi9yZXF1ZXN0LWNsaWVudC5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dGVzdENvbmZpZywgdGVzdEV2ZW50cywgdGVzdHN9IGZyb20gXCIuL3Rlc3QuanNcIlxuaW1wb3J0IHtwYXRoVG9GaWxlVVJMfSBmcm9tIFwidXJsXCJcbmltcG9ydCB2ZWxvY2lvdXNNYWlsZXIgZnJvbSBcIi4uL21haWxlci5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtQcm9taXNlPHVua25vd24+IHwgdW5rbm93bn0gcHJvbWlzZSAtIFByb21pc2Ugb3IgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dE1zIC0gVGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVzdERlc2NyaXB0aW9uIC0gVGVzdCBkZXNjcmlwdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIG9yIHJlamVjdHMgYmFzZWQgb24gdGltZW91dCBvciBwcm9taXNlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQocHJvbWlzZSwgdGltZW91dE1zLCB0ZXN0RGVzY3JpcHRpb24pIHtcbiAgY29uc3QgdGltZW91dFNlY29uZHMgPSAodGltZW91dE1zIC8gMTAwMCkudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgXCJcIilcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGBUaW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0U2Vjb25kc31zOiAke3Rlc3REZXNjcmlwdGlvbn1gKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KHRpbWVvdXRFcnJvciksIHRpbWVvdXRNcylcblxuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICAgIHJlamVjdChlcnJvcilcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlc3RBcmdzXG4gKiBAcHJvcGVydHkge0FwcGxpY2F0aW9ufSBbYXBwbGljYXRpb25dIC0gQXBwbGljYXRpb24gaW5zdGFuY2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICogQHByb3BlcnR5IHtSZXF1ZXN0Q2xpZW50fSBbY2xpZW50XSAtIEhUVFAgY2xpZW50IGZvciByZXF1ZXN0IHRlc3RzLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtkYXRhYmFzZUNsZWFuaW5nXSAtIERhdGFiYXNlIGNsZWFudXAgb3B0aW9ucyBmb3IgdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkYXRhYmFzZUNsZWFuaW5nLnRyYW5zYWN0aW9uXSAtIFVzZSB0cmFuc2FjdGlvbnMgdG8gcm9sbGJhY2sgYmV0d2VlbiB0ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RhdGFiYXNlQ2xlYW5pbmcudHJ1bmNhdGVdIC0gVHJ1bmNhdGUgdGFibGVzIGJldHdlZW4gdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmb2N1c10gLSBXaGV0aGVyIHRoaXMgdGVzdCBpcyBmb2N1c2VkLlxuICogQHByb3BlcnR5IHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gW2Z1bmN0aW9uXSAtIFRlc3QgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3JldHJ5XSAtIE51bWJlciBvZiByZXRyaWVzIHdoZW4gYSB0ZXN0IGZhaWxzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXSB8IHN0cmluZ30gW3RhZ3NdIC0gVGFncyBmb3IgZmlsdGVyaW5nLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0U2Vjb25kc10gLSBUaW1lb3V0IGluIHNlY29uZHMgZm9yIHRoZSB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIFRlc3QgdHlwZSBpZGVudGlmaWVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVzdERhdGFcbiAqIEBwcm9wZXJ0eSB7VGVzdEFyZ3N9IGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaWxlUGF0aF0gLSBTb3VyY2UgZmlsZSBwYXRoLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsaW5lXSAtIFNvdXJjZSBsaW5lIG51bWJlci5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oVGVzdEFyZ3MpIDogKHZvaWR8UHJvbWlzZTx2b2lkPil9IGZ1bmN0aW9uIC0gVGVzdCBjYWxsYmFjayB0byBleGVjdXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIHRlc3RBcmdzOiBUZXN0QXJncywgdGVzdERhdGE6IFRlc3REYXRhfSkgOiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7QWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIEhvb2sgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgOiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge0JlZm9yZUFmdGVyQWxsQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIEhvb2sgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlc3RzQXJndW1lbnRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVzdERhdGE+fSBhcmdzIC0gQXJndW1lbnRzIGtleWVkIGJ5IHRlc3QgZGVzY3JpcHRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthbnlUZXN0c0ZvY3Vzc2VkXSAtIFdoZXRoZXIgYW55IHRlc3RzIGluIHRoZSB0cmVlIGFyZSBmb2N1c2VkLlxuICogQHByb3BlcnR5IHtBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gYWZ0ZXJFYWNoZXMgLSBBZnRlci1lYWNoIGhvb2tzIGZvciB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtCZWZvcmVBZnRlckFsbENhbGxiYWNrT2JqZWN0VHlwZVtdfSBhZnRlckFsbHMgLSBBZnRlci1hbGwgaG9va3MgZm9yIHRoaXMgc2NvcGUuXG4gKiBAcHJvcGVydHkge0JlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlW119IGJlZm9yZUFsbHMgLSBCZWZvcmUtYWxsIGhvb2tzIGZvciB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gYmVmb3JlRWFjaGVzIC0gQmVmb3JlLWVhY2ggaG9va3MgZm9yIHRoaXMgc2NvcGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbGVQYXRoXSAtIFNvdXJjZSBmaWxlIHBhdGguXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xpbmVdIC0gU291cmNlIGxpbmUgbnVtYmVyLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBUZXN0RGF0YT59IHRlc3RzIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vZGUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlc3RzQXJndW1lbnQ+fSBzdWJzIC0gT3B0aW9uYWwgY2hpbGQgbm9kZXMuIEVhY2ggaXRlbSBpcyBhbm90aGVyIGBOb2RlYCwgYWxsb3dpbmcgcmVjdXJzaW9uLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RSdW5uZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IFthcmdzLmV4Y2x1ZGVUYWdzXSAtIFRhZ3MgdG8gZXhjbHVkZS5cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gW2FyZ3MuaW5jbHVkZVRhZ3NdIC0gVGFncyB0byBpbmNsdWRlLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFyZ3MudGVzdEZpbGVzIC0gVGVzdCBmaWxlcy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT59IFthcmdzLmxpbmVGaWx0ZXJzXSAtIExpbmUgZmlsdGVycyBieSBmaWxlLlxuICAgKiBAcGFyYW0ge1JlZ0V4cFtdfSBbYXJncy5leGFtcGxlUGF0dGVybnNdIC0gRXhhbXBsZSBwYXR0ZXJucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBleGNsdWRlVGFncywgaW5jbHVkZVRhZ3MsIHRlc3RGaWxlcywgbGluZUZpbHRlcnMsIGV4YW1wbGVQYXR0ZXJucywgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLl9leGNsdWRlVGFncyA9IHRoaXMubm9ybWFsaXplVGFncyhleGNsdWRlVGFncylcbiAgICB0aGlzLl9leGNsdWRlVGFnU2V0ID0gbmV3IFNldCh0aGlzLl9leGNsdWRlVGFncylcbiAgICB0aGlzLl9pbmNsdWRlVGFncyA9IHRoaXMubm9ybWFsaXplVGFncyhpbmNsdWRlVGFncylcbiAgICB0aGlzLl9pbmNsdWRlVGFnU2V0ID0gbmV3IFNldCh0aGlzLl9pbmNsdWRlVGFncylcbiAgICB0aGlzLl90ZXN0RmlsZXMgPSB0ZXN0RmlsZXNcbiAgICB0aGlzLl9saW5lRmlsdGVycyA9IGxpbmVGaWx0ZXJzIHx8IHt9XG4gICAgdGhpcy5fZXhhbXBsZVBhdHRlcm5zID0gZXhhbXBsZVBhdHRlcm5zIHx8IFtdXG5cbiAgICB0aGlzLl9mYWlsZWRUZXN0cyA9IDBcbiAgICB0aGlzLl9zdWNjZXNzZnVsVGVzdHMgPSAwXG4gICAgdGhpcy5fdGVzdHNDb3VudCA9IDBcbiAgICB0aGlzLl9hY3RpdmVBZnRlckFsbFNjb3BlcyA9IFtdXG4gICAgdGhpcy5fZmFpbGVkVGVzdERldGFpbHMgPSBbXVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbiB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIGdldFRlc3RGaWxlcygpIHsgcmV0dXJuIHRoaXMuX3Rlc3RGaWxlcyB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT59IC0gTGluZSBmaWx0ZXJzLiAqL1xuICBnZXRMaW5lRmlsdGVycygpIHsgcmV0dXJuIHRoaXMuX2xpbmVGaWx0ZXJzIH1cblxuICAvKiogQHJldHVybnMge1JlZ0V4cFtdfSAtIEV4YW1wbGUgcGF0dGVybnMuICovXG4gIGdldEV4YW1wbGVQYXR0ZXJucygpIHsgcmV0dXJuIHRoaXMuX2V4YW1wbGVQYXR0ZXJucyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWR9IHRhZ3MgLSBUYWdzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gTm9ybWFsaXplZCB0YWdzLlxuICAgKi9cbiAgbm9ybWFsaXplVGFncyh0YWdzKSB7XG4gICAgaWYgKCF0YWdzKSByZXR1cm4gW11cblxuICAgIGNvbnN0IHZhbHVlcyA9IFtdXG4gICAgY29uc3QgcmF3VGFncyA9IEFycmF5LmlzQXJyYXkodGFncykgPyB0YWdzIDogW3RhZ3NdXG5cbiAgICBmb3IgKGNvbnN0IHJhd1RhZyBvZiByYXdUYWdzKSB7XG4gICAgICBpZiAocmF3VGFnID09PSB1bmRlZmluZWQgfHwgcmF3VGFnID09PSBudWxsKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBwYXJ0cyA9IFN0cmluZyhyYXdUYWcpLnNwbGl0KFwiLFwiKVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHBhcnQudHJpbSgpXG5cbiAgICAgICAgaWYgKHRyaW1tZWQpIHZhbHVlcy5wdXNoKHRyaW1tZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VGVzdEFyZ3N9IHRlc3RBcmdzIC0gVGVzdCBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGFnIHRvIGNoZWNrIGZvci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0YWcgaXMgcHJlc2VudC5cbiAgICovXG4gIGhhc1RhZyh0ZXN0QXJncywgdGFnKSB7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplVGFncyh0ZXN0QXJncz8udGFncykuaW5jbHVkZXModGFnKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgcnVubmluZyBicm93c2VyIHRlc3RzLlxuICAgKi9cbiAgaXNCcm93c2VyVGVzdE1vZGUoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZFTE9DSU9VU19CUk9XU0VSX1RFU1RTID09PSBcInRydWVcIlxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VGVzdEFyZ3N9IHRlc3RBcmdzIC0gVGVzdCBhcmdzLlxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuV2l0aER1bW15SWZOZWVkZWQodGVzdEFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmhhc1RhZyh0ZXN0QXJncywgXCJkdW1teVwiKSkge1xuICAgICAgYXdhaXQgY2FsbGJhY2soKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNCcm93c2VyVGVzdE1vZGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5Ccm93c2VyRHVtbXkoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJ1bk5vZGVEdW1teShjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuTm9kZUR1bW15KGNhbGxiYWNrKSB7XG4gICAgY29uc3QgZHVtbXlQYXRoID0gcHJvY2Vzcy5lbnYuVkVMT0NJT1VTX0RVTU1ZX1BBVEggfHwgdGhpcy5kZWZhdWx0RHVtbXlQYXRoKClcbiAgICBjb25zdCBkdW1teUltcG9ydCA9IGF3YWl0IGltcG9ydChwYXRoVG9GaWxlVVJMKGR1bW15UGF0aCkuaHJlZilcbiAgICBjb25zdCBEdW1teSA9IGR1bW15SW1wb3J0LmRlZmF1bHRcblxuICAgIGlmICghRHVtbXk/LnJ1bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdW1teSBoZWxwZXIgbm90IGZvdW5kIGF0ICR7ZHVtbXlQYXRofWApXG4gICAgfVxuXG4gICAgYXdhaXQgRHVtbXkucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRGVmYXVsdCBkdW1teSBoZWxwZXIgcGF0aC5cbiAgICovXG4gIGRlZmF1bHREdW1teVBhdGgoKSB7XG4gICAgY29uc3QgY3dkID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGN3ZC5zcGxpdChwYXRoLnNlcCkuam9pbihcIi9cIilcblxuICAgIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKFwiL3NwZWMvZHVtbXlcIikpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oY3dkLCBcImluZGV4LmpzXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihjd2QsIFwic3BlYy9kdW1teS9pbmRleC5qc1wiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW5Ccm93c2VyRHVtbXkoY2FsbGJhY2spIHtcbiAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoZGJzKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnRydW5jYXRlRGF0YWJhc2VzKGRicylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2FsbGJhY2soKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgdGhpcy50cnVuY2F0ZURhdGFiYXNlcyhkYnMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gZGJzIC0gRGF0YWJhc2UgY29ubmVjdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyB0cnVuY2F0ZURhdGFiYXNlcyhkYnMpIHtcbiAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2YgT2JqZWN0LmtleXMoZGJzKSkge1xuICAgICAgYXdhaXQgZGJzW2lkZW50aWZpZXJdLnRydW5jYXRlQWxsVGFibGVzKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1NldDxzdHJpbmc+fSAtIEV4Y2x1ZGUgdGFnIHNldC5cbiAgICovXG4gIGdldEV4Y2x1ZGVUYWdTZXQoKSB7XG4gICAgY29uc3QgY29uZmlnVGFncyA9IEFycmF5LmlzQXJyYXkodGVzdENvbmZpZy5leGNsdWRlVGFncykgPyB0ZXN0Q29uZmlnLmV4Y2x1ZGVUYWdzIDogW11cblxuICAgIHJldHVybiBuZXcgU2V0KFsuLi50aGlzLl9leGNsdWRlVGFncywgLi4uY29uZmlnVGFnc10pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZH0gdGVzdFRhZ3MgLSBUZXN0IHRhZ3MuXG4gICAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHRhZ1NldCAtIFRhZyBzZXQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgYW55IHRhZ3MgbWF0Y2guXG4gICAqL1xuICBoYXNNYXRjaGluZ1RhZyh0ZXN0VGFncywgdGFnU2V0KSB7XG4gICAgaWYgKCF0YWdTZXQuc2l6ZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVUYWdzKHRlc3RUYWdzKVxuXG4gICAgZm9yIChjb25zdCB0YWcgb2Ygbm9ybWFsaXplZCkge1xuICAgICAgaWYgKHRhZ1NldC5oYXModGFnKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RzQXJndW1lbnR9IHRlc3RzIC0gVGVzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXNjcmlwdGlvbnNdIC0gRGVzY3JpcHRpb24gc3RhY2suXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xpbmVNYXRjaGVkSW5TY29wZV0gLSBXaGV0aGVyIGxpbmUgbWF0Y2hlZCBpbiBzY29wZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBhbnkgdGVzdHMgaW4gdGhpcyBzY29wZSB3aWxsIHJ1bi5cbiAgICovXG4gIGhhc1J1bm5hYmxlVGVzdHModGVzdHMsIGRlc2NyaXB0aW9ucyA9IFtdLCBsaW5lTWF0Y2hlZEluU2NvcGUgPSBmYWxzZSkge1xuICAgIGZvciAoY29uc3QgdGVzdERlc2NyaXB0aW9uIGluIHRlc3RzLnRlc3RzKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IHRlc3RzLnRlc3RzW3Rlc3REZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHRlc3RBcmdzID0gLyoqIEB0eXBlIHtUZXN0QXJnc30gKi8gKE9iamVjdC5hc3NpZ24oe30sIHRlc3REYXRhLmFyZ3MpKVxuICAgICAgY29uc3QgaW5jbHVkZUJ5TGluZSA9IGxpbmVNYXRjaGVkSW5TY29wZSB8fCB0aGlzLm1hdGNoZXNMaW5lRmlsdGVyKHRlc3REYXRhKVxuXG4gICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICF0ZXN0QXJncy5mb2N1cykgY29udGludWVcbiAgICAgIGlmICh0aGlzLnNob3VsZFNraXBUZXN0KHRlc3RBcmdzLCB0ZXN0RGF0YSwgdGVzdERlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbnMsIGluY2x1ZGVCeUxpbmUpKSBjb250aW51ZVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3ViRGVzY3JpcHRpb24gaW4gdGVzdHMuc3Vicykge1xuICAgICAgY29uc3Qgc3ViVGVzdCA9IHRlc3RzLnN1YnNbc3ViRGVzY3JpcHRpb25dXG4gICAgICBjb25zdCBzY29wZUxpbmVNYXRjaCA9IGxpbmVNYXRjaGVkSW5TY29wZSB8fCB0aGlzLm1hdGNoZXNMaW5lRmlsdGVyKHN1YlRlc3QpXG4gICAgICBjb25zdCBuZXh0RGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zLmNvbmNhdChbc3ViRGVzY3JpcHRpb25dKVxuXG4gICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICFzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQpIGNvbnRpbnVlXG4gICAgICBpZiAodGhpcy5oYXNSdW5uYWJsZVRlc3RzKHN1YlRlc3QsIG5leHREZXNjcmlwdGlvbnMsIHNjb3BlTGluZU1hdGNoKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RBcmdzfSB0ZXN0QXJncyAtIFRlc3QgYXJncy5cbiAgICogQHBhcmFtIHtUZXN0RGF0YX0gdGVzdERhdGEgLSBUZXN0IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXN0RGVzY3JpcHRpb24gLSBUZXN0IGRlc2NyaXB0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXNjcmlwdGlvbnMgLSBEZXNjcmlwdGlvbiBzdGFjay5cbiAgICogQHBhcmFtIHtib29sZWFufSBsaW5lTWF0Y2hlZEluU2NvcGUgLSBXaGV0aGVyIGxpbmUgbWF0Y2hlZCBpbiBzY29wZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgdGVzdCBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICovXG4gIHNob3VsZFNraXBUZXN0KHRlc3RBcmdzLCB0ZXN0RGF0YSwgdGVzdERlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbnMsIGxpbmVNYXRjaGVkSW5TY29wZSkge1xuICAgIGlmICh0aGlzLmhhc01hdGNoaW5nVGFnKHRlc3RBcmdzLnRhZ3MsIHRoaXMuZ2V0RXhjbHVkZVRhZ1NldCgpKSkgcmV0dXJuIHRydWVcblxuICAgIGlmICh0aGlzLl9pbmNsdWRlVGFnU2V0LnNpemUgPiAwICYmICF0ZXN0QXJncy5mb2N1cykge1xuICAgICAgaWYgKCF0aGlzLmhhc01hdGNoaW5nVGFnKHRlc3RBcmdzLnRhZ3MsIHRoaXMuX2luY2x1ZGVUYWdTZXQpKSByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldEV4YW1wbGVQYXR0ZXJucygpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZ1bGxEZXNjcmlwdGlvbiA9IHRoaXMuYnVpbGRGdWxsRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24pXG4gICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5nZXRFeGFtcGxlUGF0dGVybnMoKS5zb21lKChwYXR0ZXJuKSA9PiB7XG4gICAgICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMFxuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KGZ1bGxEZXNjcmlwdGlvbilcbiAgICAgIH0pXG5cbiAgICAgIGlmICghbWF0Y2hlcykgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lRmlsdGVycyA9IHRoaXMuZ2V0TGluZUZpbHRlcnMoKVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGxpbmVGaWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIWxpbmVNYXRjaGVkSW5TY29wZSAmJiAhdGhpcy5tYXRjaGVzTGluZUZpbHRlcih0ZXN0RGF0YSkpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtUZXN0RGF0YSB8IFRlc3RzQXJndW1lbnR9IGVudHJ5IC0gVGVzdCBlbnRyeS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBsaW5lIGZpbHRlciBtYXRjaGVzIGVudHJ5LlxuICAgKi9cbiAgbWF0Y2hlc0xpbmVGaWx0ZXIoZW50cnkpIHtcbiAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS5maWxlUGF0aCB8fCAhZW50cnkubGluZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShlbnRyeS5maWxlUGF0aClcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMuZ2V0TGluZUZpbHRlcnMoKVtmaWxlUGF0aF1cblxuICAgIGlmICghbGluZXMgfHwgbGluZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiBsaW5lcy5pbmNsdWRlcyhlbnRyeS5saW5lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGRlc2NyaXB0aW9ucyAtIERlc2NyaXB0aW9uIHN0YWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdERlc2NyaXB0aW9uIC0gVGVzdCBkZXNjcmlwdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGdWxsIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgYnVpbGRGdWxsRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24pIHtcbiAgICBjb25zdCBwYXJ0cyA9IGRlc2NyaXB0aW9ucy5jb25jYXQoW3Rlc3REZXNjcmlwdGlvbl0pXG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIiBcIikudHJpbSgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8QXBwbGljYXRpb24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgYXN5bmMgYXBwbGljYXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9hcHBsaWNhdGlvbikge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBuZXcgQXBwbGljYXRpb24oe1xuICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgaHR0cFNlcnZlcjoge3BvcnQ6IDMxMDA2fSxcbiAgICAgICAgdHlwZTogXCJ0ZXN0LXJ1bm5lclwiXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLl9hcHBsaWNhdGlvbi5pbml0aWFsaXplKClcbiAgICAgIGF3YWl0IHRoaXMuX2FwcGxpY2F0aW9uLnN0YXJ0SHR0cFNlcnZlcigpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVxdWVzdENsaWVudD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcmVxdWVzdCBjbGllbnQuXG4gICAqL1xuICBhc3luYyByZXF1ZXN0Q2xpZW50KCkge1xuICAgIGlmICghdGhpcy5fcmVxdWVzdENsaWVudCkge1xuICAgICAgdGhpcy5fcmVxdWVzdENsaWVudCA9IG5ldyBSZXF1ZXN0Q2xpZW50KClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdENsaWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBpbXBvcnRUZXN0RmlsZXMoKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RW52aXJvbm1lbnRIYW5kbGVyKCkuaW1wb3J0VGVzdEZpbGVzKHRoaXMuZ2V0VGVzdEZpbGVzKCkpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBmYWlsZWQuXG4gICAqL1xuICBpc0ZhaWxlZCgpIHsgcmV0dXJuIHRoaXMuX2ZhaWxlZFRlc3RzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fZmFpbGVkVGVzdHMgPiAwIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgZmFpbGVkIHRlc3RzLlxuICAgKi9cbiAgZ2V0RmFpbGVkVGVzdHMoKSB7XG4gICAgaWYgKHRoaXMuX2ZhaWxlZFRlc3RzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcblxuICAgIHJldHVybiB0aGlzLl9mYWlsZWRUZXN0c1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTx7ZnVsbERlc2NyaXB0aW9uOiBzdHJpbmcsIGZpbGVQYXRoPzogc3RyaW5nLCBsaW5lPzogbnVtYmVyLCBlcnJvcjogdW5rbm93bn0+fSAtIEZhaWxlZCB0ZXN0IGRldGFpbHMuICovXG4gIGdldEZhaWxlZFRlc3REZXRhaWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9mYWlsZWRUZXN0RGV0YWlsc1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIHN1Y2Nlc3NmdWwgdGVzdHMuXG4gICAqL1xuICBnZXRTdWNjZXNzZnVsVGVzdHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJUZXN0cyBoYXNuJ3QgYmVlbiBydW4geWV0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgdGVzdHMgY291bnQuXG4gICAqL1xuICBnZXRUZXN0c0NvdW50KCkge1xuICAgIGlmICh0aGlzLl90ZXN0c0NvdW50ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcblxuICAgIHJldHVybiB0aGlzLl90ZXN0c0NvdW50XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgZXhlY3V0ZWQgdGVzdHMgY291bnQuXG4gICAqL1xuICBnZXRFeGVjdXRlZFRlc3RzQ291bnQoKSB7XG4gICAgaWYgKHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX2ZhaWxlZFRlc3RzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzICsgdGhpcy5fZmFpbGVkVGVzdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICB0aGlzLmFueVRlc3RzRm9jdXNzZWQgPSBmYWxzZVxuICAgIHRoaXMuX2ZhaWxlZFRlc3RzID0gMFxuICAgIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9IDBcbiAgICB0aGlzLl90ZXN0c0NvdW50ID0gMFxuICAgIHRoaXMuX2ZhaWxlZFRlc3REZXRhaWxzID0gW11cbiAgICBhd2FpdCB0aGlzLmltcG9ydFRlc3RGaWxlcygpXG4gICAgYXdhaXQgdGhpcy5hbmFseXplVGVzdHModGVzdHMpXG4gICAgdGhpcy5fb25seUZvY3Vzc2VkID0gdGhpcy5hbnlUZXN0c0ZvY3Vzc2VkXG5cbiAgICBjb25zdCB0ZXN0aW5nQ29uZmlnUGF0aCA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldFRlc3RpbmcoKVxuXG4gICAgaWYgKHRlc3RpbmdDb25maWdQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5pbXBvcnRUZXN0aW5nQ29uZmlnUGF0aCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgYW55IHRlc3RzIGZvY3Vzc2VkLlxuICAgKi9cbiAgYXJlQW55VGVzdHNGb2N1c3NlZCgpIHtcbiAgICBpZiAodGhpcy5hbnlUZXN0c0ZvY3Vzc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkhhc24ndCBiZWVuIGRldGVjdGVkIHlldFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFueVRlc3RzRm9jdXNzZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuKCkge1xuICAgIGF3YWl0IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmVuc3VyZUNvbm5lY3Rpb25zKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMucnVuVGVzdHMoe1xuICAgICAgICBhZnRlckVhY2hlczogW10sXG4gICAgICAgIGJlZm9yZUVhY2hlczogW10sXG4gICAgICAgIHRlc3RzLFxuICAgICAgICBkZXNjcmlwdGlvbnM6IFtdLFxuICAgICAgICBpbmRlbnRMZXZlbDogMFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY2xlYW51cCBob29rcyBmaW5pc2guXG4gICAqL1xuICBhc3luYyBydW5BZnRlckFsbHNGb3JBY3RpdmVTY29wZXMoKSB7XG4gICAgY29uc3Qgc2NvcGVzID0gWy4uLnRoaXMuX2FjdGl2ZUFmdGVyQWxsU2NvcGVzXS5yZXZlcnNlKClcblxuICAgIGZvciAoY29uc3Qgc2NvcGUgb2Ygc2NvcGVzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyQWxsc0ZvclNjb3BlKHNjb3BlKVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZUFmdGVyQWxsU2NvcGVzID0gW11cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RzQXJndW1lbnR9IHRlc3RzIC0gVGVzdHMuXG4gICAqIEByZXR1cm5zIHt7YW55VGVzdHNGb2N1c3NlZDogYm9vbGVhbn19IC0gV2hldGhlciBhbnkgdGVzdHMgaW4gdGhlIHRyZWUgYXJlIGZvY3VzZWQuXG4gICAqL1xuICBhbmFseXplVGVzdHModGVzdHMpIHtcbiAgICBsZXQgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gZmFsc2VcblxuICAgIGZvciAoY29uc3QgdGVzdERlc2NyaXB0aW9uIGluIHRlc3RzLnRlc3RzKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IHRlc3RzLnRlc3RzW3Rlc3REZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHRlc3RBcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGVzdERhdGEuYXJncylcblxuICAgICAgdGhpcy5fdGVzdHNDb3VudCsrXG5cbiAgICAgIGlmICh0ZXN0QXJncy5mb2N1cykge1xuICAgICAgICBhbnlUZXN0c0ZvY3Vzc2VkRm91bmQgPSB0cnVlXG4gICAgICAgIHRoaXMuYW55VGVzdHNGb2N1c3NlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN1YkRlc2NyaXB0aW9uIGluIHRlc3RzLnN1YnMpIHtcbiAgICAgIGNvbnN0IHN1YlRlc3QgPSB0ZXN0cy5zdWJzW3N1YkRlc2NyaXB0aW9uXVxuICAgICAgY29uc3Qge2FueVRlc3RzRm9jdXNzZWR9ID0gdGhpcy5hbmFseXplVGVzdHMoc3ViVGVzdClcblxuICAgICAgaWYgKGFueVRlc3RzRm9jdXNzZWQpIHtcbiAgICAgICAgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQgPSBhbnlUZXN0c0ZvY3Vzc2VkXG4gICAgfVxuXG4gICAgcmV0dXJuIHthbnlUZXN0c0ZvY3Vzc2VkOiBhbnlUZXN0c0ZvY3Vzc2VkRm91bmR9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtBcnJheTxBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGU+fSBhcmdzLmFmdGVyRWFjaGVzIC0gQWZ0ZXIgZWFjaGVzLlxuICAgKiBAcGFyYW0ge0FycmF5PEFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZT59IGFyZ3MuYmVmb3JlRWFjaGVzIC0gQmVmb3JlIGVhY2hlcy5cbiAgICogQHBhcmFtIHtUZXN0c0FyZ3VtZW50fSBhcmdzLnRlc3RzIC0gVGVzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuZGVzY3JpcHRpb25zIC0gRGVzY3JpcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbmRlbnRMZXZlbCAtIEluZGVudCBsZXZlbC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5saW5lTWF0Y2hlZEluU2NvcGVdIC0gV2hldGhlciBsaW5lIG1hdGNoZWQgaW4gc2NvcGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW5UZXN0cyh7YWZ0ZXJFYWNoZXMsIGJlZm9yZUVhY2hlcywgdGVzdHMsIGRlc2NyaXB0aW9ucywgaW5kZW50TGV2ZWwsIGxpbmVNYXRjaGVkSW5TY29wZSA9IGZhbHNlfSkge1xuICAgIGNvbnN0IGxlZnRQYWRkaW5nID0gXCIgXCIucmVwZWF0KGluZGVudExldmVsICogMilcbiAgICBjb25zdCBuZXdBZnRlckVhY2hlcyA9IFsuLi5hZnRlckVhY2hlcywgLi4udGVzdHMuYWZ0ZXJFYWNoZXNdXG4gICAgY29uc3QgbmV3QmVmb3JlRWFjaGVzID0gWy4uLmJlZm9yZUVhY2hlcywgLi4udGVzdHMuYmVmb3JlRWFjaGVzXVxuICAgIGNvbnN0IHNjb3BlTGluZU1hdGNoID0gbGluZU1hdGNoZWRJblNjb3BlIHx8IHRoaXMubWF0Y2hlc0xpbmVGaWx0ZXIodGVzdHMpXG4gICAgY29uc3Qgc2hvdWxkUnVuQW55VGVzdHMgPSB0aGlzLmhhc1J1bm5hYmxlVGVzdHModGVzdHMsIGRlc2NyaXB0aW9ucywgc2NvcGVMaW5lTWF0Y2gpXG5cbiAgICBpZiAoIXNob3VsZFJ1bkFueVRlc3RzKSByZXR1cm5cblxuICAgIC8qKiBAdHlwZSB7e3Rlc3RzOiBUZXN0c0FyZ3VtZW50LCBhZnRlckFsbHNSdW46IGJvb2xlYW59fSAqL1xuICAgIGNvbnN0IHNjb3BlRW50cnkgPSB7dGVzdHMsIGFmdGVyQWxsc1J1bjogZmFsc2V9XG4gICAgdGhpcy5fYWN0aXZlQWZ0ZXJBbGxTY29wZXMucHVzaChzY29wZUVudHJ5KVxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgYmVmb3JlQWxsRGF0YSBvZiB0ZXN0cy5iZWZvcmVBbGxzIHx8IFtdKSB7XG4gICAgICAgIGF3YWl0IGJlZm9yZUFsbERhdGEuY2FsbGJhY2soe2NvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB0ZXN0RGVzY3JpcHRpb24gaW4gdGVzdHMudGVzdHMpIHtcbiAgICAgICAgY29uc3QgdGVzdERhdGEgPSB0ZXN0cy50ZXN0c1t0ZXN0RGVzY3JpcHRpb25dXG4gICAgICAgIGNvbnN0IHRlc3RBcmdzID0gLyoqIEB0eXBlIHtUZXN0QXJnc30gKi8gKE9iamVjdC5hc3NpZ24oe30sIHRlc3REYXRhLmFyZ3MpKVxuICAgICAgICBjb25zdCBpbmNsdWRlQnlMaW5lID0gc2NvcGVMaW5lTWF0Y2ggfHwgdGhpcy5tYXRjaGVzTGluZUZpbHRlcih0ZXN0RGF0YSlcblxuICAgICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICF0ZXN0QXJncy5mb2N1cykgY29udGludWVcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFRlc3QodGVzdEFyZ3MsIHRlc3REYXRhLCB0ZXN0RGVzY3JpcHRpb24sIGRlc2NyaXB0aW9ucywgaW5jbHVkZUJ5TGluZSkpIGNvbnRpbnVlXG5cbiAgICAgICAgaWYgKHRlc3RBcmdzLnR5cGUgPT0gXCJtb2RlbFwiIHx8IHRlc3RBcmdzLnR5cGUgPT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgICB0ZXN0QXJncy5hcHBsaWNhdGlvbiA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24oKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRlc3RBcmdzLnR5cGUgPT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgICB0ZXN0QXJncy5jbGllbnQgPSBhd2FpdCB0aGlzLnJlcXVlc3RDbGllbnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9aXQgJHt0ZXN0RGVzY3JpcHRpb259YClcblxuICAgICAgICBjb25zdCByZXRyeUNvdW50ID0gdHlwZW9mIHRlc3RBcmdzLnJldHJ5ID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0ZXN0QXJncy5yZXRyeSlcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodGVzdEFyZ3MucmV0cnkpKVxuICAgICAgICAgIDogMFxuICAgICAgICBjb25zdCBjb25maWdUaW1lb3V0U2Vjb25kcyA9IHR5cGVvZiB0ZXN0Q29uZmlnLmRlZmF1bHRUaW1lb3V0U2Vjb25kcyA9PT0gXCJudW1iZXJcIiA/IHRlc3RDb25maWcuZGVmYXVsdFRpbWVvdXRTZWNvbmRzIDogdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gdHlwZW9mIHRlc3RBcmdzLnRpbWVvdXRTZWNvbmRzID09PSBcIm51bWJlclwiID8gdGVzdEFyZ3MudGltZW91dFNlY29uZHMgOiBjb25maWdUaW1lb3V0U2Vjb25kc1xuICAgICAgICBjb25zdCB1c2VUaW1lb3V0ID0gdHlwZW9mIHRpbWVvdXRTZWNvbmRzID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh0aW1lb3V0U2Vjb25kcykgJiYgdGltZW91dFNlY29uZHMgPiAwXG4gICAgICAgIGNvbnN0IHRpbWVvdXRNcyA9IHVzZVRpbWVvdXQgPyB0aW1lb3V0U2Vjb25kcyAqIDEwMDAgOiB1bmRlZmluZWRcbiAgICAgICAgbGV0IHJldHJpZXNVc2VkID0gMFxuICAgICAgICBsZXQgYXR0ZW1wdE51bWJlciA9IDFcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGxldCBzaG91bGRSZXRyeSA9IGZhbHNlXG4gICAgICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqL1xuICAgICAgICAgIGxldCBmYWlsZWRFcnJvclxuICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi9cbiAgICAgICAgICBsZXQgbGFzdEVycm9yXG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5XaXRoRHVtbXlJZk5lZWRlZCh0ZXN0QXJncywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZlbG9jaW91c01haWxlci5jbGVhckRlbGl2ZXJpZXMoKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYmVmb3JlRWFjaERhdGEgb2YgbmV3QmVmb3JlRWFjaGVzKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBiZWZvcmVFYWNoRGF0YS5jYWxsYmFjayh7Y29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksIHRlc3RBcmdzLCB0ZXN0RGF0YX0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdFByb21pc2UgPSB0ZXN0RGF0YS5mdW5jdGlvbih0ZXN0QXJncylcblxuICAgICAgICAgICAgICAgIGlmICh1c2VUaW1lb3V0ICYmIHRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBydW5XaXRoVGltZW91dCh0ZXN0UHJvbWlzZSwgdGltZW91dE1zLCB0ZXN0RGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRlc3RQcm9taXNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cysrXG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZnRlckVhY2hEYXRhIG9mIG5ld0FmdGVyRWFjaGVzKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBhZnRlckVhY2hEYXRhLmNhbGxiYWNrKHtjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSwgdGVzdEFyZ3MsIHRlc3REYXRhfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yXG4gICAgICAgICAgICBpZiAocmV0cmllc1VzZWQgPCByZXRyeUNvdW50KSB7XG4gICAgICAgICAgICAgIHJldHJpZXNVc2VkKytcbiAgICAgICAgICAgICAgc2hvdWxkUmV0cnkgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEV2ZW50KFwidGVzdFJldHJ5aW5nXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgbmV4dEF0dGVtcHQ6IGF0dGVtcHROdW1iZXIgKyAxLFxuICAgICAgICAgICAgICAgIHJldHJpZXNVc2VkLFxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgdGVzdEFyZ3MsXG4gICAgICAgICAgICAgICAgdGVzdERhdGEsXG4gICAgICAgICAgICAgICAgdGVzdERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI6IHRoaXNcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZhaWxlZEVycm9yID0gZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEV2ZW50KFwidGVzdFJldHJpZWRcIiwge1xuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgICBlcnJvcjogbGFzdEVycm9yLFxuICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyLFxuICAgICAgICAgICAgICByZXRyaWVzVXNlZCxcbiAgICAgICAgICAgICAgcmV0cnlDb3VudCxcbiAgICAgICAgICAgICAgdGVzdEFyZ3MsXG4gICAgICAgICAgICAgIHRlc3REYXRhLFxuICAgICAgICAgICAgICB0ZXN0RGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIHRlc3RSdW5uZXI6IHRoaXNcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXR0ZW1wdE51bWJlcisrXG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmV0cnkpIGNvbnRpbnVlXG5cbiAgICAgICAgICBpZiAoZmFpbGVkRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFRlc3RzKytcbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFRlc3REZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICBmdWxsRGVzY3JpcHRpb246IHRoaXMuYnVpbGRGdWxsRGVzY3JpcHRpb24oZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogdGVzdERhdGEuZmlsZVBhdGgsXG4gICAgICAgICAgICAgIGxpbmU6IHRlc3REYXRhLmxpbmUsXG4gICAgICAgICAgICAgIGVycm9yOiBmYWlsZWRFcnJvclxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYgKGZhaWxlZEVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsZWZ0UGFkZGluZ30gIFRlc3QgZmFpbGVkOmAsIGZhaWxlZEVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgIGFkZFRyYWNrZWRTdGFja1RvRXJyb3IoZmFpbGVkRXJyb3IpXG5cbiAgICAgICAgICAgICAgY29uc3QgYmFja3RyYWNlQ2xlYW5lciA9IG5ldyBCYWNrdHJhY2VDbGVhbmVyKGZhaWxlZEVycm9yKVxuICAgICAgICAgICAgICBjb25zdCBjbGVhbmVkU3RhY2sgPSBiYWNrdHJhY2VDbGVhbmVyLmdldENsZWFuZWRTdGFjaygpXG4gICAgICAgICAgICAgIGNvbnN0IHN0YWNrTGluZXMgPSBjbGVhbmVkU3RhY2s/LnNwbGl0KFwiXFxuXCIpXG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrTGluZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0YWNrTGluZSBvZiBzdGFja0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2xlZnRQYWRkaW5nfSAgJHtzdGFja0xpbmV9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bGVmdFBhZGRpbmd9ICBUZXN0IGZhaWxlZCB3aXRoIGEgJHt0eXBlb2YgZmFpbGVkRXJyb3J9OmAsIGZhaWxlZEVycm9yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRFdmVudChcInRlc3RGYWlsZWRcIiwge1xuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgICBlcnJvcjogZmFpbGVkRXJyb3IsXG4gICAgICAgICAgICAgIHRlc3RBcmdzLFxuICAgICAgICAgICAgICB0ZXN0RGF0YSxcbiAgICAgICAgICAgICAgdGVzdERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICB0ZXN0UnVubmVyOiB0aGlzXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLnByaW50UmVydW5Db21tYW5kKHtkZXNjcmlwdGlvbnMsIHRlc3REZXNjcmlwdGlvbiwgdGVzdERhdGEsIGxlZnRQYWRkaW5nfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgc3ViRGVzY3JpcHRpb24gaW4gdGVzdHMuc3Vicykge1xuICAgICAgICBjb25zdCBzdWJUZXN0ID0gdGVzdHMuc3Vic1tzdWJEZXNjcmlwdGlvbl1cbiAgICAgICAgY29uc3QgbmV3RGVjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnMuY29uY2F0KFtzdWJEZXNjcmlwdGlvbl0pXG4gICAgICAgIGNvbnN0IGNoaWxkU2NvcGVMaW5lTWF0Y2ggPSBzY29wZUxpbmVNYXRjaCB8fCB0aGlzLm1hdGNoZXNMaW5lRmlsdGVyKHN1YlRlc3QpXG5cbiAgICAgICAgaWYgKCF0aGlzLl9vbmx5Rm9jdXNzZWQgfHwgc3ViVGVzdC5hbnlUZXN0c0ZvY3Vzc2VkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9JHtzdWJEZXNjcmlwdGlvbn1gKVxuICAgICAgICAgIGF3YWl0IHRoaXMucnVuVGVzdHMoe1xuICAgICAgICAgICAgYWZ0ZXJFYWNoZXM6IG5ld0FmdGVyRWFjaGVzLFxuICAgICAgICAgICAgYmVmb3JlRWFjaGVzOiBuZXdCZWZvcmVFYWNoZXMsXG4gICAgICAgICAgICB0ZXN0czogc3ViVGVzdCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uczogbmV3RGVjcmlwdGlvbnMsXG4gICAgICAgICAgICBpbmRlbnRMZXZlbDogaW5kZW50TGV2ZWwgKyAxLFxuICAgICAgICAgICAgbGluZU1hdGNoZWRJblNjb3BlOiBjaGlsZFNjb3BlTGluZU1hdGNoXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyQWxsc0ZvclNjb3BlKHNjb3BlRW50cnkpXG4gICAgICBjb25zdCBzY29wZUluZGV4ID0gdGhpcy5fYWN0aXZlQWZ0ZXJBbGxTY29wZXMuaW5kZXhPZihzY29wZUVudHJ5KVxuXG4gICAgICBpZiAoc2NvcGVJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUFmdGVyQWxsU2NvcGVzLnNwbGljZShzY29wZUluZGV4LCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3t0ZXN0czogVGVzdHNBcmd1bWVudCwgYWZ0ZXJBbGxzUnVuOiBib29sZWFufX0gc2NvcGVFbnRyeSAtIFNjb3BlIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHNjb3BlIGNsZWFudXAgZmluaXNoZXMuXG4gICAqL1xuICBhc3luYyBydW5BZnRlckFsbHNGb3JTY29wZShzY29wZUVudHJ5KSB7XG4gICAgaWYgKHNjb3BlRW50cnkuYWZ0ZXJBbGxzUnVuKSByZXR1cm5cblxuICAgIHNjb3BlRW50cnkuYWZ0ZXJBbGxzUnVuID0gdHJ1ZVxuXG4gICAgZm9yIChjb25zdCBhZnRlckFsbERhdGEgb2Ygc2NvcGVFbnRyeS50ZXN0cy5hZnRlckFsbHMgfHwgW10pIHtcbiAgICAgIGF3YWl0IGFmdGVyQWxsRGF0YS5jYWxsYmFjayh7Y29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCl9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGFsbCBsaXN0ZW5lcnMgY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBlbWl0RXZlbnQoZXZlbnROYW1lLCBwYXlsb2FkKSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gdGVzdEV2ZW50cy5saXN0ZW5lcnMoZXZlbnROYW1lKVxuXG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgIGF3YWl0IGxpc3RlbmVyKHBheWxvYWQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuZGVzY3JpcHRpb25zIC0gRGVzY3JpcHRpb24gc3RhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRlc3REZXNjcmlwdGlvbiAtIFRlc3QgZGVzY3JpcHRpb24uXG4gICAqIEBwYXJhbSB7VGVzdERhdGF9IGFyZ3MudGVzdERhdGEgLSBUZXN0IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmxlZnRQYWRkaW5nIC0gTGVmdCBwYWRkaW5nLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwcmludFJlcnVuQ29tbWFuZCh7ZGVzY3JpcHRpb25zLCB0ZXN0RGVzY3JpcHRpb24sIHRlc3REYXRhLCBsZWZ0UGFkZGluZ30pIHtcbiAgICBjb25zdCByZXJ1biA9IHRoaXMuYnVpbGRSZXJ1bkNvbW1hbmQoe2Rlc2NyaXB0aW9ucywgdGVzdERlc2NyaXB0aW9uLCB0ZXN0RGF0YX0pXG5cbiAgICBpZiAocmVydW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bGVmdFBhZGRpbmd9ICBSZS1ydW46ICR7cmVydW59YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncy5kZXNjcmlwdGlvbnMgLSBEZXNjcmlwdGlvbiBzdGFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGVzdERlc2NyaXB0aW9uIC0gVGVzdCBkZXNjcmlwdGlvbi5cbiAgICogQHBhcmFtIHtUZXN0RGF0YX0gYXJncy50ZXN0RGF0YSAtIFRlc3QgZGF0YS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBSZXJ1biBjb21tYW5kLlxuICAgKi9cbiAgYnVpbGRSZXJ1bkNvbW1hbmQoe2Rlc2NyaXB0aW9ucywgdGVzdERlc2NyaXB0aW9uLCB0ZXN0RGF0YX0pIHtcbiAgICBjb25zdCBiYXNlQ29tbWFuZCA9IFwibnB4IHZlbG9jaW91cyB0ZXN0XCJcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRlc3REYXRhLmZpbGVQYXRoXG4gICAgY29uc3QgbGluZSA9IHRlc3REYXRhLmxpbmVcblxuICAgIGlmIChmaWxlUGF0aCAmJiBsaW5lKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKVxuICAgICAgcmV0dXJuIGAke2Jhc2VDb21tYW5kfSAke3JlbGF0aXZlUGF0aH06JHtsaW5lfWBcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsRGVzY3JpcHRpb24gPSB0aGlzLmJ1aWxkRnVsbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9ucywgdGVzdERlc2NyaXB0aW9uKVxuXG4gICAgaWYgKGZ1bGxEZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGAke2Jhc2VDb21tYW5kfSAtLWV4YW1wbGUgJHtKU09OLnN0cmluZ2lmeShmdWxsRGVzY3JpcHRpb24pfWBcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cbiJdfQ==
|
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.
|
|
6
|
+
"version": "1.0.188",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"types": "build/index.d.ts",
|
|
9
9
|
"files": [
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"epic-locks": "^1.0.7",
|
|
48
48
|
"escape-string-regexp": "^1.0.5",
|
|
49
49
|
"eventemitter3": "^5.0.1",
|
|
50
|
+
"gettext-universal": "^1.0.21",
|
|
50
51
|
"incorporator": "^1.0.2",
|
|
51
52
|
"inflection": "^3.0.0",
|
|
52
53
|
"is-plain-object": "^5.0.0",
|