@stemy/backend 3.5.11 → 3.5.13

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/esm2015/utils.js CHANGED
@@ -661,10 +661,12 @@ export function wrapError(e, message, httpCode = 500) {
661
661
  }
662
662
  return new HttpError(httpCode, `${message}: ${e}`);
663
663
  }
664
- export function prepareUrl(ending = "") {
664
+ export function prepareUrl(ending = "/") {
665
665
  return url => {
666
666
  return url ? `${url.replace(/\/+$/, "")}${ending}` : ending;
667
667
  };
668
668
  }
669
+ export const prepareUrlSlash = prepareUrl("/");
670
+ export const prepareUrlEmpty = prepareUrl("");
669
671
  export { ɵ0 };
670
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNuRixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQWUsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQy9DLE9BQU8sRUFBVyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQWtCLE1BQU0sUUFBUSxDQUFDO0FBQzlELE9BQU8sTUFBZ0IsTUFBTSxPQUFPLENBQUM7QUFFckMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBTXJCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBa0I7SUFDdkMsWUFBWSxFQUFFLElBQUk7Q0FDckIsQ0FBQztBQUlGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQ3hDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLENBQUM7QUFDeEQs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QVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckYsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUUzRSxJQUFJLE1BQU0sR0FBRyxHQUFHLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBVSxDQUFDO1FBQzlFLElBQUk7WUFDQSxnQkFBZ0I7WUFD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R0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEUsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlYyBhcyBleGVjQ2hpbGRQcm9jZXNzfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xyXG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gXCJjcnlwdG9cIjtcclxuaW1wb3J0IHtEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2FuUmVwb3J0RXJyb3J9IGZyb20gXCJyeGpzL2ludGVybmFsL3V0aWwvY2FuUmVwb3J0RXJyb3JcIjtcclxuaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtta2RpciwgcmVhZEZpbGUgYXMgZnNSZWFkRmlsZSwgdW5saW5rLCB3cml0ZUZpbGUgYXMgZnNXcml0ZUZpbGV9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQge2Jhc2VuYW1lLCBkaXJuYW1lfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQge0dyaWRGU0J1Y2tldCwgT2JqZWN0SWR9IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7RG9jdW1lbnQsIFR5cGVzfSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtQYXNzVGhyb3VnaCwgUmVhZGFibGUsIFJlYWRhYmxlT3B0aW9uc30gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQgc2hhcnBfLCB7UmVnaW9ufSBmcm9tIFwic2hhcnBcIjtcclxuaW1wb3J0IHtJQXNzZXRDcm9wSW5mbywgSUFzc2V0SW1hZ2VQYXJhbXMsIElBc3NldE1ldGEsIElDbGllbnRTb2NrZXQsIFBhcmFtUmVzb2x2ZXIsIFR5cGV9IGZyb20gXCIuL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0h0dHBFcnJvcn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtBeGlvc0Vycm9yfSBmcm9tIFwiYXhpb3NcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRElDb250YWluZXJzIHtcclxuICAgIGFwcENvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lclxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGlDb250YWluZXJzOiBJRElDb250YWluZXJzID0ge1xyXG4gICAgYXBwQ29udGFpbmVyOiBudWxsXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJQcmVkaWNhdGUgPSAodmFsdWU6IGFueSwga2V5PzogYW55LCB0YXJnZXQ/OiBhbnksIHNvdXJjZT86IGFueSkgPT4gYm9vbGVhbjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGUob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXFxcXHMoW2EtekEtWl0rKVwiKTtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaChyZWdleClbMV0udG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZXRUeXBlKHZhbHVlKSA9PSBcIm9iamVjdFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWx1ZTogYW55KTogdmFsdWUgaXMgQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWU6IGFueSk6IHZhbHVlIGlzIGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUge1xyXG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSAmJiAhaXNOYU4odmFsdWUpICYmIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiB2YWx1ZS5nZXREYXRlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8ICh0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IFwiZnVuY3Rpb25cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KTogdmFsdWUgaXMgc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBGdW5jdGlvbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUucHJvdG90eXBlICYmIHZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcikgPT09IHZhbHVlICYmIHZhbHVlLm5hbWUgIT09IFwiT2JqZWN0XCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFR5cGU8YW55PiB7XHJcbiAgICByZXR1cm4gaXNDb25zdHJ1Y3Rvcih2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVyZmFjZShvYmo6IGFueSwgaW50ZXJGYWNlT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IGlzQXJyYXkob2JqKSB8fCAhaXNPYmplY3QoaW50ZXJGYWNlT2JqZWN0KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGludGVyRmFjZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgbGV0IHR5cGUgPSBpbnRlckZhY2VPYmplY3Rba2V5XSB8fCBcIlwiO1xyXG4gICAgICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XHJcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkgfHwgZ2V0VHlwZShvYmpba2V5XSkgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdWNGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBcIlwiO1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsY0ZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdmFsdWVbMF0udG9Mb3dlckNhc2UoKSArIHZhbHVlLnN1YnN0cigxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0SWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiAmJiBpZC5sZW5ndGggPT0gMjQgJiYgIWlzTmFOKE51bWJlcihcIjB4XCIgKyBpZCkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RJdGVtPFQ+KHZhbHVlOiBUW10pOiBUIHtcclxuICAgIHJldHVybiB2YWx1ZVswXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxhc3RJdGVtPFQ+KHZhbHVlOiBUW10pOiBUIHtcclxuICAgIHJldHVybiB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ3JvdXA8VD4odmFsdWU6IFRbXSwgY29tcGFyYXRvcjogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW4pOiBBcnJheTxUW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8VFtdPiA9IFtdO1xyXG4gICAgaWYgKCFpc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkgcmV0dXJuIHJlc3VsdDtcclxuICAgIHZhbHVlID0gQXJyYXkuZnJvbSh2YWx1ZSk7XHJcbiAgICByZXN1bHQucHVzaChbdmFsdWUuc2hpZnQoKV0pO1xyXG4gICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHJlc3VsdC5maW5kKGcgPT4gZy5zb21lKGEgPT4gY29tcGFyYXRvcihhLCBpdGVtKSkpO1xyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBncm91cC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKFtpdGVtXSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVJdGVtczxUPih2YWx1ZTogVFtdKTogVFtdIHtcclxuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKHYsIGl4KSA9PiB2YWx1ZS5pbmRleE9mKHYpID09PSBpeCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZShvYmo6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSwgdHJlZUZhbGxiYWNrOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG4gICAga2V5ID0ga2V5IHx8IFwiXCI7XHJcbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KFwiLlwiKTtcclxuICAgIGxldCBjdXJLZXkgPSBcIlwiO1xyXG4gICAgZG8ge1xyXG4gICAgICAgIGN1cktleSArPSBrZXlzLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGlzRGVmaW5lZChvYmopICYmIGlzRGVmaW5lZChvYmpbY3VyS2V5XSkgJiYgKHR5cGVvZiBvYmpbY3VyS2V5XSA9PT0gXCJvYmplY3RcIiB8fCAha2V5cy5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9ialtjdXJLZXldO1xyXG4gICAgICAgICAgICBjdXJLZXkgPSBcIlwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIWtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT0gXCJ1bmRlZmluZWRcIiA/IGtleS5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7Y3VyS2V5fSRgKSwgYHske2N1cktleX19YCkgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgIG9iaiA9IHRyZWVGYWxsYmFjayA/IG9iaiB8fCBkZWZhdWx0VmFsdWUgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VyS2V5ICs9IFwiLlwiO1xyXG4gICAgICAgIH1cclxuICAgIH0gd2hpbGUgKGtleXMubGVuZ3RoKTtcclxuICAgIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQ+KGl0ZW1zOiBUW10sIGNiOiAoaXRlbTogVCkgPT4gc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBncm91cCA9IGNiKGl0ZW0pO1xyXG4gICAgICAgIHJlc1tncm91cF0gPSByZXNbZ3JvdXBdIHx8IFtdO1xyXG4gICAgICAgIHJlc1tncm91cF0ucHVzaChpdGVtKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSwge30pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlOiBhbnksIHR5cGU6IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZhbHVlID09IFwibm9cIiB8fCB2YWx1ZSA9PSBcImZhbHNlXCIgfHwgdmFsdWUgPT0gXCIwXCIpID8gZmFsc2UgOiAhIXZhbHVlO1xyXG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBpc05hTih2YWwpID8gMCA6IHZhbDtcclxuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWAuc3BsaXQoXCIsIFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcblxyXG5jb25zdCBjcm9wSW50ZXJmYWNlID0ge1xyXG4gICAgeDogXCJudW1iZXJcIixcclxuICAgIHk6IFwibnVtYmVyXCIsXHJcbiAgICB3OiBcIm51bWJlclwiLFxyXG4gICAgaDogXCJudW1iZXJcIlxyXG59O1xyXG5cclxuZnVuY3Rpb24gdG9Dcm9wUmVnaW9uKGNyb3BJbmZvOiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm8pOiBSZWdpb24ge1xyXG4gICAgbGV0IGNyb3AgPSBjcm9wSW5mbyBhcyBJQXNzZXRDcm9wSW5mbztcclxuICAgIGlmIChpc1N0cmluZyhjcm9wSW5mbykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjcm9wID0gSlNPTi5wYXJzZShjcm9wSW5mbyBhcyBzdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpc0ludGVyZmFjZShjcm9wLCBjcm9wSW50ZXJmYWNlKSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGNyb3AudyksXHJcbiAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGNyb3AuaCksXHJcbiAgICAgICAgdG9wOiBNYXRoLnJvdW5kKGNyb3AueSksXHJcbiAgICAgICAgbGVmdDogTWF0aC5yb3VuZChjcm9wLngpXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9JbWFnZTxUID0gQnVmZmVyIHwgUmVhZGFibGU+KHNyYzogVCwgcGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxUPiB7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBwYXJhbXMgYW5kIG1ldGFcclxuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcclxuICAgIG1ldGEgPSBtZXRhIHx8IHt9O1xyXG5cclxuICAgIC8vIEdldCBkZWZhdWx0IGNyb3AgaW5mb1xyXG4gICAgY29uc3QgY3JvcCA9IHRvQ3JvcFJlZ2lvbihtZXRhLmNyb3ApO1xyXG5cclxuICAgIC8vIFJldHVybiB0aGUgc3JjIGlmIHRoZXJlIGFyZSBubyBwYXJhbXMgYW5kIG5vIGRlZmF1bHQgY3JvcCBleGlzdHNcclxuICAgIGlmIChtZXRhLmV4dGVuc2lvbiA9PT0gXCJzdmdcIiB8fCAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT0gMCAmJiAhY3JvcCkpIHtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlIHBhcmFtc1xyXG4gICAgcGFyYW1zLnJvdGF0aW9uID0gaXNOYU4ocGFyYW1zLnJvdGF0aW9uKSA/IDAgOiBNYXRoLnJvdW5kKHBhcmFtcy5yb3RhdGlvbiAvIDkwKSAqIDkwO1xyXG4gICAgcGFyYW1zLmNhbnZhc1NjYWxlWCA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuY2FudmFzU2NhbGVYKTtcclxuICAgIHBhcmFtcy5jYW52YXNTY2FsZVkgPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWSk7XHJcbiAgICBwYXJhbXMuc2NhbGVYID0gaXNOYU4ocGFyYW1zLnNjYWxlWCkgPyAxIDogTnVtYmVyKHBhcmFtcy5zY2FsZVgpO1xyXG4gICAgcGFyYW1zLnNjYWxlWSA9IGlzTmFOKHBhcmFtcy5zY2FsZVkpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVZKTtcclxuICAgIHBhcmFtcy5jcm9wID0gaXNCb29sZWFuKHBhcmFtcy5jcm9wKSA/IHBhcmFtcy5jcm9wIDogcGFyYW1zLmNyb3AgPT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgbGV0IGJ1ZmZlciA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYXdhaXQgc3RyZWFtVG9CdWZmZXIoc3JjKSA6IHNyYyBhcyBhbnk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIEdldCBjcm9wIGluZm9cclxuICAgICAgICBjb25zdCBjcm9wQmVmb3JlID0gdG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQmVmb3JlIHx8IChwYXJhbXMuY3JvcCA/IG1ldGEuY3JvcEJlZm9yZSA6IG51bGwpKTtcclxuICAgICAgICBjb25zdCBjcm9wQWZ0ZXIgPSB0b0Nyb3BSZWdpb24ocGFyYW1zLmNyb3BBZnRlciB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BBZnRlciA6IG51bGwpKTtcclxuICAgICAgICAvLyBHZXQgbWV0YWRhdGFcclxuICAgICAgICBsZXQgaW1nID0gc2hhcnAoYnVmZmVyKTtcclxuICAgICAgICBsZXQge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgaW1nLm1ldGFkYXRhKCk7XHJcbiAgICAgICAgLy8gQ3JvcCBiZWZvcmUgcmVzaXplXHJcbiAgICAgICAgaWYgKGNyb3BCZWZvcmUpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBjcm9wQmVmb3JlLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBjcm9wQmVmb3JlLmhlaWdodDtcclxuICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcEJlZm9yZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjcm9wKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gY3JvcC53aWR0aDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXNpemUgY2FudmFzXHJcbiAgICAgICAgY29uc3QgY2FudmFzU2NhbGVYID0gbWV0YT8uY2FudmFzU2NhbGVYIHx8IDE7XHJcbiAgICAgICAgY29uc3QgY2FudmFzU2NhbGVZID0gbWV0YT8uY2FudmFzU2NhbGVZIHx8IDE7XHJcbiAgICAgICAgaWYgKHBhcmFtcy5jYW52YXNTY2FsZVggIT09IGNhbnZhc1NjYWxlWCB8fCBwYXJhbXMuY2FudmFzU2NhbGVZICE9PSBjYW52YXNTY2FsZVkpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLmNhbnZhc1NjYWxlWSk7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJjb250YWluXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVzaXplIGltYWdlXHJcbiAgICAgICAgaWYgKHBhcmFtcy5zY2FsZVggIT09IDEgfHwgcGFyYW1zLnNjYWxlWSAhPT0gMSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuc2NhbGVYKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBwYXJhbXMuc2NhbGVZKTtcclxuICAgICAgICAgICAgaW1nID0gaW1nLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImZpbGxcIn0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDcm9wIGFmdGVyIHJlc2l6ZVxyXG4gICAgICAgIGlmIChjcm9wQWZ0ZXIpIHtcclxuICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcEFmdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUm90YXRlXHJcbiAgICAgICAgaWYgKHBhcmFtcy5yb3RhdGlvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBpbWcudG9CdWZmZXIoKTtcclxuICAgICAgICAgICAgaW1nID0gc2hhcnAoYnVmZmVyKS5yb3RhdGUocGFyYW1zLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnVmZmVyID0gYXdhaXQgaW1nLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgc3JjID0gc3JjIGluc3RhbmNlb2YgUmVhZGFibGUgPyBidWZmZXJUb1N0cmVhbShidWZmZXIpIDogYnVmZmVyO1xyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbWFnZSBjb252ZXJzaW9uIGVycm9yXCIsIGUpO1xyXG4gICAgICAgIHNyYyA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSA6IGJ1ZmZlcjtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9TdHJlYW0oYnVmZmVyOiBCdWZmZXIpOiBSZWFkYWJsZSB7XHJcbiAgICBjb25zdCByZWFkU3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoKCk7XHJcbiAgICByZWFkU3RyZWFtLmVuZChidWZmZXIpO1xyXG4gICAgcmV0dXJuIHJlYWRTdHJlYW1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVRvQnVmZmVyKHN0cmVhbTogUmVhZGFibGUpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmNhdCA9IFtdO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImRhdGFcIiwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGNvbmNhdC5wdXNoKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIHJlamVjdCk7XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHJlc29sdmUoQnVmZmVyLmNvbmNhdChjb25jYXQpKSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG5jbGFzcyBSZWFkYWJsZVN0cmVhbUNsb25lIGV4dGVuZHMgUmVhZGFibGUge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRhYmxlU3RyZWFtOiBSZWFkYWJsZSwgb3B0cz86IFJlYWRhYmxlT3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKG9wdHMpO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImVuZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJlcnJvclwiLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZWFkKHNpemU6IG51bWJlcikge1xyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlTdHJlYW0oc3RyZWFtOiBSZWFkYWJsZSwgb3B0cz86IFJlYWRhYmxlT3B0aW9ucyk6IFJlYWRhYmxlIHtcclxuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW1DbG9uZShzdHJlYW0sIG9wdHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWtkaXJSZWN1cnNpdmUocGF0aDogc3RyaW5nLCBtb2RlOiBudW1iZXIgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIG1rZGlyKHBhdGgsIHttb2RlOiBtb2RlIHx8IDBvNzc3LCByZWN1cnNpdmU6IHRydWV9LCBlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHVubGluayhwYXRoLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzLCByZWopID0+IHtcclxuICAgICAgICBmc1JlYWRGaWxlKHBhdGgsIChlcnIsIGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQW5kRGVsZXRlRmlsZShwYXRoOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlciA9IDUwMDApOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdW5saW5rKHBhdGgsICgpID0+IHtcclxuICAgICAgICB9KTtcclxuICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBkYXRhOiBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgYXdhaXQgbWtkaXJSZWN1cnNpdmUoZGlybmFtZShwYXRoKSk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzLCByZWopID0+IHtcclxuICAgICAgICBmc1dyaXRlRmlsZShwYXRoLCBkYXRhLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWooZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlVG9Qcm9taXNlKHZhbHVlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSA/IHZhbHVlIDogUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VUaW1lb3V0KHRpbWVvdXQ6IG51bWJlciA9IDEwMDAsIGVycm9yOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChgVGltZW91dCBleGNlZWRlZDogJHt0aW1lb3V0fW1zYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShgVGltZW91dDogJHt0aW1lb3V0fW1zYCk7XHJcbiAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZSh0eXBlOiBUeXBlPGFueT4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHR5cGUucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvblBhcmFtcyhmdW5jOiBGdW5jdGlvbik6IHN0cmluZ1tdIHtcclxuICAgIC8vIFJlbW92ZSBjb21tZW50cyBvZiB0aGUgZm9ybSAvKiAuLi4gKi9cclxuICAgIC8vIFJlbW92aW5nIGNvbW1lbnRzIG9mIHRoZSBmb3JtIC8vXHJcbiAgICAvLyBSZW1vdmUgYm9keSBvZiB0aGUgZnVuY3Rpb24geyAuLi4gfVxyXG4gICAgLy8gcmVtb3ZpbmcgXCI9PlwiIGlmIGZ1bmMgaXMgYXJyb3cgZnVuY3Rpb25cclxuICAgIGNvbnN0IHN0ciA9IGZ1bmMudG9TdHJpbmcoKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2csIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcL1xcLyguKSovZywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgve1tcXHNcXFNdKn0vLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC89Pi9nLCBcIlwiKVxyXG4gICAgICAgIC50cmltKCk7XHJcblxyXG4gICAgLy8gU3RhcnQgcGFyYW1ldGVyIG5hbWVzIGFmdGVyIGZpcnN0IFwiKFwiXHJcbiAgICBjb25zdCBzdGFydCA9IHN0ci5pbmRleE9mKFwiKFwiKSArIDE7XHJcblxyXG4gICAgLy8gRW5kIHBhcmFtZXRlciBuYW1lcyBpcyBqdXN0IGJlZm9yZSBsYXN0IFwiKVwiXHJcbiAgICBjb25zdCBlbmQgPSBzdHIubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIGVuZCkuc3BsaXQoXCIsIFwiKTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xyXG5cclxuICAgIHJlc3VsdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG5cclxuICAgICAgICAvLyBSZW1vdmluZyBhbnkgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnJlcGxhY2UoLz1bXFxzXFxTXSovZywgXCJcIikudHJpbSgpO1xyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICBwYXJhbXMucHVzaChlbGVtZW50KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlTmFtZShwYXRoOiBzdHJpbmcsIHdpdGhFeHRlbnNpb246IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUocGF0aCB8fCBcIlwiKTtcclxuICAgIHJldHVybiB3aXRoRXh0ZW5zaW9uID8gbmFtZSA6IG5hbWUuc3BsaXQoXCIuXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbihwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHBhdGggfHwgXCJcIik7XHJcbiAgICByZXR1cm4gbmFtZS5zcGxpdChcIi5cIikucG9wKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJZFN0cmluZygpOiBhbnkge1xyXG4gICAgcmV0dXJuIG5ldyBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpZFRvU3RyaW5nKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpZFRvU3RyaW5nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdElkIHx8IHZhbHVlIGluc3RhbmNlb2YgVHlwZXMuT2JqZWN0SWRcclxuICAgICAgICA/IHZhbHVlLnRvSGV4U3RyaW5nKClcclxuICAgICAgICA6IChpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtZXIodHJhbnNmb3JtPzogKGRvYzogRG9jdW1lbnQsIHJldDogYW55LCBvcHRpb25zPzogYW55KSA9PiBhbnkpIHtcclxuICAgIHJldHVybiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IHtcclxuICAgICAgICByZXQuaWQgPSBpZFRvU3RyaW5nKHJldC5pZCkgfHwgcmV0LmlkO1xyXG4gICAgICAgIGlmIChkb2MuX2lkKSB7XHJcbiAgICAgICAgICAgIHJldC5faWQgPSBpZFRvU3RyaW5nKGRvYy5faWQpO1xyXG4gICAgICAgICAgICByZXQuaWQgPSByZXQuaWQgfHwgcmV0Ll9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHJldC5fX3Y7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odHJhbnNmb3JtKSA/IHRyYW5zZm9ybShkb2MsIHJldCwgb3B0aW9ucykgfHwgcmV0IDogcmV0O1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdChzb2NrZXRTZXJ2ZXI6IFNlcnZlciwgY2I6IChjbGllbnQ6IElDbGllbnRTb2NrZXQpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhzb2NrZXRTZXJ2ZXIuc29ja2V0cy5zb2NrZXRzKSkuZm9yRWFjaChjYik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChyYW5kb20obWluLCBtYXgpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG1pbiArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpU3Vic2NyaXB0aW9uKC4uLnN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdKTogU3Vic2NyaXB0aW9uIHtcclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2YWJsZUZyb21GdW5jdGlvbihjYWxsYmFja0Z1bmM6ICgpID0+IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgc3ViamVjdDogYW55O1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4oKHN1YnNjcmliZXIpID0+IHtcclxuICAgICAgICBpZiAoIXN1YmplY3QpIHtcclxuICAgICAgICAgICAgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gZnJvbShjYWxsYmFja0Z1bmMoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhblJlcG9ydEVycm9yKHN1YmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZExlZnQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZFN0YXJ0KGNvdW50LCBwYWRXaXRoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZFJpZ2h0KHZhbHVlOiBhbnksIGNvdW50OiBudW1iZXIgPSAzLCBwYWRXaXRoOiBzdHJpbmcgPSBcIjBcIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9YC5wYWRFbmQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRnJvbUJ1Y2tldChidWNrZXQ6IEdyaWRGU0J1Y2tldCwgZmlsZUlkOiBPYmplY3RJZCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGJ1Y2tldC5kZWxldGUoZmlsZUlkLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnIgPSBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZXJyb3IubWVzc2FnZSB8fCBlcnJvciB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZyhlcnIpIHx8ICFlcnIuc3RhcnRzV2l0aChcIkZpbGVOb3RGb3VuZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGZpbGVJZC50b0hleFN0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pKTtcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlID0gKCkgPT4gdHJ1ZTtcclxuXHJcbmZ1bmN0aW9uIGNvcHlSZWN1cnNpdmUodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBhbnkge1xyXG4gICAgcHJlZGljYXRlID0gcHJlZGljYXRlIHx8IGRlZmF1bHRQcmVkaWNhdGU7XHJcbiAgICBpZiAoaXNQcmltaXRpdmUoc291cmNlKSB8fCBpc0RhdGUoc291cmNlKSB8fCBpc0Z1bmN0aW9uKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XHJcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gaXNBcnJheSh0YXJnZXQpID8gQXJyYXkuZnJvbSh0YXJnZXQpIDogW107XHJcbiAgICAgICAgc291cmNlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlKGl0ZW0sIGluZGV4LCB0YXJnZXQsIHNvdXJjZSkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiBpbmRleClcclxuICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBjb3B5UmVjdXJzaXZlKHRhcmdldFtpbmRleF0sIGl0ZW0sIHByZWRpY2F0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGNvcHlSZWN1cnNpdmUobnVsbCwgaXRlbSwgcHJlZGljYXRlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNob3VsZENvcHkgPSBpc0Z1bmN0aW9uKHNvdXJjZS5fX3Nob3VsZENvcHkpID8gc291cmNlLl9fc2hvdWxkQ29weSA6ICgpID0+IHRydWU7XHJcbiAgICBpZiAoaXNDb25zdHJ1Y3Rvcihzb3VyY2UuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5fX3Nob3VsZENvcHkgPT09IGZhbHNlKSByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgc291cmNlLmNvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvID0gc291cmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCBzb3VyY2UucHJvdG90eXBlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRhcmdldCA9IE9iamVjdC5hc3NpZ24oe30sIHRhcmdldCB8fCB7fSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb3B5IG1hcCBlbnRyaWVzXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUodmFsdWUsIGtleSwgdGFyZ2V0LCBzb3VyY2UpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCAhc2hvdWxkQ29weShrZXksIHZhbHVlKSA/IHZhbHVlIDogY29weVJlY3Vyc2l2ZSh0YXJnZXQuZ2V0KGtleSksIHZhbHVlLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IG1lbWJlcnNcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuICAgIHRhcmdldCA9IGtleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghcHJlZGljYXRlKHNvdXJjZVtrZXldLCBrZXksIHJlc3VsdCwgc291cmNlKSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICByZXN1bHRba2V5XSA9ICFzaG91bGRDb3B5KGtleSwgc291cmNlW2tleV0pID8gc291cmNlW2tleV0gOiBjb3B5UmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzb3VyY2Vba2V5XSwgcHJlZGljYXRlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgdGFyZ2V0KTtcclxuXHJcbiAgICAvLyBDb3B5IG9iamVjdCBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XHJcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZpbHRlcihrID0+IGtleXMuaW5kZXhPZihrKSA8IDApO1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihvYmo6IFQsIHByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlKTogUGFydGlhbDxUPiB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmosIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5PFQ+KG9iajogVCk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUobnVsbCwgb2JqKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUPih0YXJnZXQ6IFQsIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBUIHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKHRhcmdldCwgc291cmNlLCBwcmVkaWNhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWQ1KGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XHJcbiAgICAgICAgdGhyb3cgYENhbid0IG1kNSBvdGhlciB0aGF0IHJhdyBvYmplY3Qgb3Igc3RyaW5nYDtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShkYXRhKS5kaWdlc3QoXCJoZXhcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBydW5Db21tYW5kKHNjcmlwdFBhdGg6IHN0cmluZywgZXhwZWN0ZWRDb2RlOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3AgPSBleGVjQ2hpbGRQcm9jZXNzKHNjcmlwdFBhdGgsIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBleHBlY3RlZENvZGUgIT09IGVycm9yLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbGluZXMgPSAoc3Rkb3V0IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgICAgICBsZXQgbGluZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICghbGluZSAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZXMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShsaW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRvdXQub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3Auc3RkZXJyLm9uKFwiZGF0YVwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ29uc29sZUNvbG9yIHtcclxuICAgIFJlc2V0ID0gXCJcXHgxYlswbVwiLFxyXG4gICAgQnJpZ2h0ID0gXCJcXHgxYlsxbVwiLFxyXG4gICAgRGltID0gXCJcXHgxYlsybVwiLFxyXG4gICAgVW5kZXJzY29yZSA9IFwiXFx4MWJbNG1cIixcclxuICAgIEJsaW5rID0gXCJcXHgxYls1bVwiLFxyXG4gICAgUmV2ZXJzZSA9IFwiXFx4MWJbN21cIixcclxuICAgIEhpZGRlbiA9IFwiXFx4MWJbOG1cIixcclxuXHJcbiAgICBGZ0JsYWNrID0gXCJcXHgxYlszMG1cIixcclxuICAgIEZnUmVkID0gXCJcXHgxYlszMW1cIixcclxuICAgIEZnR3JlZW4gPSBcIlxceDFiWzMybVwiLFxyXG4gICAgRmdZZWxsb3cgPSBcIlxceDFiWzMzbVwiLFxyXG4gICAgRmdCbHVlID0gXCJcXHgxYlszNG1cIixcclxuICAgIEZnTWFnZW50YSA9IFwiXFx4MWJbMzVtXCIsXHJcbiAgICBGZ0N5YW4gPSBcIlxceDFiWzM2bVwiLFxyXG4gICAgRmdXaGl0ZSA9IFwiXFx4MWJbMzdtXCIsXHJcbiAgICBGZ0RlZmF1bHQgPSBcIlxceDFiWzM4bVwiLFxyXG5cclxuICAgIEJnQmxhY2sgPSBcIlxceDFiWzQwbVwiLFxyXG4gICAgQmdSZWQgPSBcIlxceDFiWzQxbVwiLFxyXG4gICAgQmdHcmVlbiA9IFwiXFx4MWJbNDJtXCIsXHJcbiAgICBCZ1llbGxvdyA9IFwiXFx4MWJbNDNtXCIsXHJcbiAgICBCZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxyXG4gICAgQmdNYWdlbnRhID0gXCJcXHgxYls0NW1cIixcclxuICAgIEJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXHJcbiAgICBCZ1doaXRlID0gXCJcXHgxYls0N21cIixcclxuICAgIEJnRGVmYXVsdCA9IFwiXFx4MWJbNDhtXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSnNvbkNvbG9ycyB7XHJcbiAgICBrZXlDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIG51bWJlckNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgc3RyaW5nQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICB0cnVlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBmYWxzZUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVsbENvbG9yPzogQ29uc29sZUNvbG9yO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0Q29sb3JzOiBJSnNvbkNvbG9ycyA9IHtcclxuICAgIGtleUNvbG9yOiBDb25zb2xlQ29sb3IuRmdXaGl0ZSxcclxuICAgIG51bWJlckNvbG9yOiBDb25zb2xlQ29sb3IuRmdCbHVlLFxyXG4gICAgc3RyaW5nQ29sb3I6IENvbnNvbGVDb2xvci5GZ1llbGxvdyxcclxuICAgIHRydWVDb2xvcjogQ29uc29sZUNvbG9yLkZnR3JlZW4sXHJcbiAgICBmYWxzZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdSZWQsXHJcbiAgICBudWxsQ29sb3I6IENvbnNvbGVDb2xvci5CZ01hZ2VudGFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplKGlucHV0OiBhbnksIGNvbG9yOiBDb25zb2xlQ29sb3IpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2NvbG9yfSR7aW5wdXR9JHtDb25zb2xlQ29sb3IuUmVzZXR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpzb25IaWdobGlnaHQoaW5wdXQ6IHN0cmluZyB8IG9iamVjdCwgY29sb3JPcHRpb25zPzogSUpzb25Db2xvcnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbG9ycywgY29sb3JPcHRpb25zKVxyXG4gICAgY29uc3QganNvbiA9IChpc1N0cmluZyhpbnB1dCkgPyBpbnB1dCA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKSkucmVwbGFjZSgvJi9nLCAnJicpLnJlcGxhY2UoLzwvZywgJzwnKS5yZXBsYWNlKC8+L2csICc+JylcclxuICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytdP1xcZCspPykvZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gY29sb3JzLm51bWJlckNvbG9yXHJcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgIGlmICgvOiQvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5rZXlDb2xvclxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnMuc3RyaW5nQ29sb3I7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9ICdcIicgKyBtYXRjaC5zdWJzdHIoMSwgbWF0Y2gubGVuZ3RoIC0gMikgKyAnXCInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29sb3IgPSAvdHJ1ZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgID8gY29sb3JzLnRydWVDb2xvclxyXG4gICAgICAgICAgICAgICAgOiAvZmFsc2UvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMuZmFsc2VDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgIDogL251bGwvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sb3JzLm51bGxDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbG9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtjb2xvcn0ke21hdGNofSR7Q29uc29sZUNvbG9yLlJlc2V0fWBcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nLCB0bzogc3RyaW5nID0gXCItXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3N0cn1gLnJlcGxhY2UoL1smXFwvXFxcXCMsICsoKSR+JS5AJ1wiOio/PD57fV0vZywgdG8pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihhcnI6IGFueVtdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGF0LmNvbmNhdChpc0FycmF5KHRvRmxhdHRlbikgPyBmbGF0dGVuKHRvRmxhdHRlbikgOiB0b0ZsYXR0ZW4pO1xyXG4gICAgfSwgW10pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd3JhcEVycm9yKGU6IGFueSwgbWVzc2FnZTogc3RyaW5nLCBodHRwQ29kZTogbnVtYmVyID0gNTAwKTogRXJyb3Ige1xyXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XHJcbiAgICAgICAgZS5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICByZXR1cm4gZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgSHR0cEVycm9yKGh0dHBDb2RlLCBgJHttZXNzYWdlfTogJHtlfWApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVVybChlbmRpbmcgPSBcIlwiKTogUGFyYW1SZXNvbHZlciB7XHJcbiAgICByZXR1cm4gdXJsID0+IHtcclxuICAgICAgICByZXR1cm4gdXJsID8gYCR7dXJsLnJlcGxhY2UoL1xcLyskLywgXCJcIil9JHtlbmRpbmd9YCA6IGVuZGluZztcclxuICAgIH1cclxufVxyXG4iXX0=
672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNuRixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQWUsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQy9DLE9BQU8sRUFBVyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQWtCLE1BQU0sUUFBUSxDQUFDO0FBQzlELE9BQU8sTUFBZ0IsTUFBTSxPQUFPLENBQUM7QUFFckMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBTXJCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBa0I7SUFDdkMsWUFBWSxFQUFFLElBQUk7Q0FDckIsQ0FBQztBQUlGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQ3hDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLENBQUM7QUFDeEQs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QVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckYsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUUzRSxJQUFJLE1BQU0sR0FBRyxHQUFHLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBVSxDQUFDO1FBQzlFLElBQUk7WUFDQSxnQkFBZ0I7WUFDaEIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRixlQUFlO1lBQ2YsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLElBQUksRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MscUJBQXFCO1lBQ3JCLElBQUksVUFBVSxFQUFFO2dCQUNaLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUN6QixNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDakM7aUJBQU0sSUFBSSxJQUFJLEVBQUU7Z0JBQ2IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMzQjtZQUNELGdCQUFnQjtZQUNoQixNQUFNLFlBQVksR0FBRyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLEtBQUksQ0FBQyxDQUFDO1lBQzdDLE1BQU0sWUFBWSxHQUFHLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksS0FBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLFlBQVksRUFBRTtnQkFDOUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7YUFDOUU7WUFDRCxlQUFlO1lBQ2YsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDNUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7YUFDM0U7WUFDRCxvQkFBb0I7WUFDcEIsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEM7WUFDRCxTQUFTO1lBQ1QsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0M7WUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsR0FBRyxHQUFHLEdBQUcsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2hFLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsR0FBRyxHQUFHLEdBQUcsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2hFLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7SUFDTCxDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQWM7SUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNyQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sVUFBVSxDQUFBO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQWdCO0lBQzNDLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsTUFBTSxtQkFBb0IsU0FBUSxRQUFRO0lBRXRDLFlBQVksY0FBd0IsRUFBRSxJQUFzQjtRQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtJQUVsQixDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQWdCLEVBQUUsSUFBc0I7SUFDL0QsT0FBTyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZLEVBQUUsT0FBZSxJQUFJO0lBQzVELE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDekMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUN0RCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBWTtJQUNuQyxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLEdBQUcsRUFBRTtnQkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBWTtJQUNqQyxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3BDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNULE9BQU87YUFDVjtZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFnQixpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsSUFBSTs7UUFDeEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixTQUFTLENBQUMsSUFBWSxFQUFFLElBQVk7O1FBQ3RELE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDcEMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksR0FBRyxFQUFFO29CQUNMLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDVCxPQUFPO2lCQUNWO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQVU7SUFDckMsT0FBTyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsVUFBa0IsSUFBSSxFQUFFLFFBQWlCLEtBQUs7SUFDekUsT0FBTyxJQUFJLE9BQU8sQ0FBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsTUFBTSxDQUFDLHFCQUFxQixPQUFPLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO2FBQ1Y7WUFDRCxPQUFPLENBQUMsWUFBWSxPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBZTtJQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQWM7SUFDNUMsd0NBQXdDO0lBQ3hDLG1DQUFtQztJQUNuQyxzQ0FBc0M7SUFDdEMsMENBQTBDO0lBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUU7U0FDdEIsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztTQUNoQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUN4QixPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUN4QixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUNsQixJQUFJLEVBQUUsQ0FBQztJQUVaLHdDQUF3QztJQUN4QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuQyw4Q0FBOEM7SUFDOUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVsQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBRXJCLDZCQUE2QjtRQUM3QixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbEQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVksRUFBRSxnQkFBeUIsS0FBSztJQUNwRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUMxQixPQUFPLElBQUksUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBVTtJQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxLQUFLLFlBQVksUUFBUSxJQUFJLEtBQUssWUFBWSxLQUFLLENBQUMsUUFBUTtRQUMvRCxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtRQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBMkQ7SUFDekYsT0FBTyxDQUFDLEdBQWEsRUFBRSxHQUFRLEVBQUUsT0FBYSxFQUFFLEVBQUU7UUFDOUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1QsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2YsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzdFLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFlBQW9CLEVBQUUsRUFBbUM7SUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sVUFBVSxJQUFJLENBQUMsR0FBVyxFQUFFLEdBQVc7SUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUMzQyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFHLGFBQTZCO0lBQzlELE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFO1FBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFlBQXVCO0lBQzFELElBQUksT0FBWSxDQUFDO0lBQ2pCLE9BQU8sSUFBSSxVQUFVLENBQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDeEIsSUFBSTtnQkFDQSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7YUFDbEM7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDVixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDckI7YUFDSjtTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBVSxFQUFFLFFBQWdCLENBQUMsRUFBRSxVQUFrQixHQUFHO0lBQ3hFLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVUsRUFBRSxRQUFnQixDQUFDLEVBQUUsVUFBa0IsR0FBRztJQUN6RSxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQW9CLEVBQUUsTUFBZ0I7SUFDbkUsT0FBTyxJQUFJLE9BQU8sQ0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksR0FBRyxHQUFHLEtBQVksQ0FBQztZQUN2QixJQUFJLEtBQUssRUFBRTtnQkFDUCxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDbkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNaLE9BQU87aUJBQ1Y7YUFDSjtZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBb0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDOztBQUVyRCxTQUFTLGFBQWEsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLFNBQTJCO0lBQ3hFLFNBQVMsR0FBRyxTQUFTLElBQUksZ0JBQWdCLENBQUM7SUFDMUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUMvRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNqQixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFBRSxPQUFPO1lBQ3BELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLO2dCQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7O2dCQUU5RCxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUNELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN0RixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDbkMsSUFBSSxNQUFNLENBQUMsWUFBWSxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsSUFBSTtnQkFDQSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDckM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUMvRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqQztTQUNKO0tBQ0o7U0FBTTtRQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7S0FDNUM7SUFDRCxtQkFBbUI7SUFDbkIsSUFBSSxNQUFNLFlBQVksR0FBRyxFQUFFO1FBQ3ZCLElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRTtZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztvQkFBRSxTQUFTO2dCQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDdkc7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUNoRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9HLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVYLHlCQUF5QjtJQUN6QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUksR0FBTSxFQUFFLFNBQTBCO0lBQ3hELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELE1BQU0sVUFBVSxJQUFJLENBQUksR0FBTTtJQUMxQixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUksTUFBUyxFQUFFLE1BQVcsRUFBRSxTQUEyQjtJQUN6RSxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVM7SUFDekIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0I7SUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sMkNBQTJDLENBQUM7S0FDckQ7SUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLFVBQWtCLEVBQUUsZUFBdUIsQ0FBQztJQUNuRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0RCxJQUFJLEtBQUssSUFBSSxZQUFZLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNkLE9BQU87YUFDVjtZQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUN0QjtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUk7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUk7WUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLFlBNEJYO0FBNUJELFdBQVksWUFBWTtJQUNwQixtQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBa0IsQ0FBQTtJQUNsQixpQ0FBZSxDQUFBO0lBQ2Ysd0NBQXNCLENBQUE7SUFDdEIsbUNBQWlCLENBQUE7SUFDakIscUNBQW1CLENBQUE7SUFDbkIsb0NBQWtCLENBQUE7SUFFbEIsc0NBQW9CLENBQUE7SUFDcEIsb0NBQWtCLENBQUE7SUFDbEIsc0NBQW9CLENBQUE7SUFDcEIsdUNBQXFCLENBQUE7SUFDckIscUNBQW1CLENBQUE7SUFDbkIsd0NBQXNCLENBQUE7SUFDdEIscUNBQW1CLENBQUE7SUFDbkIsc0NBQW9CLENBQUE7SUFDcEIsd0NBQXNCLENBQUE7SUFFdEIsc0NBQW9CLENBQUE7SUFDcEIsb0NBQWtCLENBQUE7SUFDbEIsc0NBQW9CLENBQUE7SUFDcEIsdUNBQXFCLENBQUE7SUFDckIscUNBQW1CLENBQUE7SUFDbkIsd0NBQXNCLENBQUE7SUFDdEIscUNBQW1CLENBQUE7SUFDbkIsc0NBQW9CLENBQUE7SUFDcEIsd0NBQXNCLENBQUE7QUFDMUIsQ0FBQyxFQTVCVyxZQUFZLEtBQVosWUFBWSxRQTRCdkI7QUFXRCxNQUFNLGFBQWEsR0FBZ0I7SUFDL0IsUUFBUSxFQUFFLFlBQVksQ0FBQyxPQUFPO0lBQzlCLFdBQVcsRUFBRSxZQUFZLENBQUMsTUFBTTtJQUNoQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFFBQVE7SUFDbEMsU0FBUyxFQUFFLFlBQVksQ0FBQyxPQUFPO0lBQy9CLFVBQVUsRUFBRSxZQUFZLENBQUMsS0FBSztJQUM5QixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7Q0FDcEMsQ0FBQTtBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBVSxFQUFFLEtBQW1CO0lBQ3BELE9BQU8sR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFzQixFQUFFLFlBQTBCO0lBQzVFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUM3RCxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNoSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsc0dBQXNHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsSSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFBO1FBQzlCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xCLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO2FBQzFCO2lCQUFNO2dCQUNILEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUMzQixLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3pEO1NBQ0o7YUFBTTtZQUNILEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNsQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVTtvQkFDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7d0JBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUE7U0FDdEI7UUFDRCxPQUFPLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDbEQsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUFhLEdBQUc7SUFDN0QsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFVO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQU0sRUFBRSxPQUFlLEVBQUUsV0FBbUIsR0FBRztJQUNyRSxJQUFJLENBQUMsWUFBWSxVQUFVLEVBQUU7UUFDekIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDcEIsT0FBTyxDQUFDLENBQUM7S0FDWjtJQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsU0FBaUIsR0FBRztJQUMzQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ1QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRSxDQUFDLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtleGVjIGFzIGV4ZWNDaGlsZFByb2Nlc3N9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XHJcbmltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSBcImNyeXB0b1wiO1xyXG5pbXBvcnQge0RlcGVuZGVuY3lDb250YWluZXJ9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge2Zyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtjYW5SZXBvcnRFcnJvcn0gZnJvbSBcInJ4anMvaW50ZXJuYWwvdXRpbC9jYW5SZXBvcnRFcnJvclwiO1xyXG5pbXBvcnQge1NlcnZlcn0gZnJvbSBcInNvY2tldC5pb1wiO1xyXG5pbXBvcnQge21rZGlyLCByZWFkRmlsZSBhcyBmc1JlYWRGaWxlLCB1bmxpbmssIHdyaXRlRmlsZSBhcyBmc1dyaXRlRmlsZX0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7YmFzZW5hbWUsIGRpcm5hbWV9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7R3JpZEZTQnVja2V0LCBPYmplY3RJZH0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtEb2N1bWVudCwgVHlwZXN9IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge1Bhc3NUaHJvdWdoLCBSZWFkYWJsZSwgUmVhZGFibGVPcHRpb25zfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCBzaGFycF8sIHtSZWdpb259IGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge0lBc3NldENyb3BJbmZvLCBJQXNzZXRJbWFnZVBhcmFtcywgSUFzc2V0TWV0YSwgSUNsaWVudFNvY2tldCwgUGFyYW1SZXNvbHZlciwgVHlwZX0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0F4aW9zRXJyb3J9IGZyb20gXCJheGlvc1wiO1xyXG5cclxuY29uc3Qgc2hhcnAgPSBzaGFycF87XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElESUNvbnRhaW5lcnMge1xyXG4gICAgYXBwQ29udGFpbmVyOiBEZXBlbmRlbmN5Q29udGFpbmVyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkaUNvbnRhaW5lcnM6IElESUNvbnRhaW5lcnMgPSB7XHJcbiAgICBhcHBDb250YWluZXI6IG51bGxcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEZpbHRlclByZWRpY2F0ZSA9ICh2YWx1ZTogYW55LCBrZXk/OiBhbnksIHRhcmdldD86IGFueSwgc291cmNlPzogYW55KSA9PiBib29sZWFuO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZShvYmo6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCJcXFxccyhbYS16QS1aXSspXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKHJlZ2V4KVsxXS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdldFR5cGUodmFsdWUpID09IFwib2JqZWN0XCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZTogYW55KTogdmFsdWUgaXMgYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRGF0ZSB7XHJcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdICYmICFpc05hTih2YWx1ZSkgJiYgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHZhbHVlLmdldERhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgKHR5cGUgIT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gXCJmdW5jdGlvblwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIEZ1bmN0aW9uIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZS5wcm90b3R5cGUgJiYgdmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yKSA9PT0gdmFsdWUgJiYgdmFsdWUubmFtZSAhPT0gXCJPYmplY3RcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgVHlwZTxhbnk+IHtcclxuICAgIHJldHVybiBpc0NvbnN0cnVjdG9yKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJmYWNlKG9iajogYW55LCBpbnRlckZhY2VPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBib29sZWFuIHtcclxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgaXNBcnJheShvYmopIHx8ICFpc09iamVjdChpbnRlckZhY2VPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW50ZXJGYWNlT2JqZWN0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgICBsZXQgdHlwZSA9IGludGVyRmFjZU9iamVjdFtrZXldIHx8IFwiXCI7XHJcbiAgICAgICAgaWYgKHR5cGUuc3RhcnRzV2l0aChcIipcIikpIHtcclxuICAgICAgICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYgZ2V0VHlwZShvYmpba2V5XSkgIT09IHR5cGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSB8fCBnZXRUeXBlKG9ialtrZXldKSAhPT0gdHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1Y0ZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdmFsdWVbMF0udG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cigxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxjRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiB2YWx1ZVswXS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RJZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiICYmIGlkLmxlbmd0aCA9PSAyNCAmJiAhaXNOYU4oTnVtYmVyKFwiMHhcIiArIGlkKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEl0ZW08VD4odmFsdWU6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGFzdEl0ZW08VD4odmFsdWU6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVncm91cDxUPih2YWx1ZTogVFtdLCBjb21wYXJhdG9yOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbik6IEFycmF5PFRbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxUW10+ID0gW107XHJcbiAgICBpZiAoIWlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PSAwKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgdmFsdWUgPSBBcnJheS5mcm9tKHZhbHVlKTtcclxuICAgIHJlc3VsdC5wdXNoKFt2YWx1ZS5zaGlmdCgpXSk7XHJcbiAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gcmVzdWx0LmZpbmQoZyA9PiBnLnNvbWUoYSA9PiBjb21wYXJhdG9yKGEsIGl0ZW0pKSk7XHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGdyb3VwLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnB1c2goW2l0ZW1dKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUl0ZW1zPFQ+KHZhbHVlOiBUW10pOiBUW10ge1xyXG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcigodiwgaXgpID0+IHZhbHVlLmluZGV4T2YodikgPT09IGl4KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55LCB0cmVlRmFsbGJhY2s6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICBrZXkgPSBrZXkgfHwgXCJcIjtcclxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xyXG4gICAgbGV0IGN1cktleSA9IFwiXCI7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgY3VyS2V5ICs9IGtleXMuc2hpZnQoKTtcclxuICAgICAgICBpZiAoaXNEZWZpbmVkKG9iaikgJiYgaXNEZWZpbmVkKG9ialtjdXJLZXldKSAmJiAodHlwZW9mIG9ialtjdXJLZXldID09PSBcIm9iamVjdFwiIHx8ICFrZXlzLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgb2JqID0gb2JqW2N1cktleV07XHJcbiAgICAgICAgICAgIGN1cktleSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICgha2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PSBcInVuZGVmaW5lZFwiID8ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cChgJHtjdXJLZXl9JGApLCBgeyR7Y3VyS2V5fX1gKSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgb2JqID0gdHJlZUZhbGxiYWNrID8gb2JqIHx8IGRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJLZXkgKz0gXCIuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSB3aGlsZSAoa2V5cy5sZW5ndGgpO1xyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnk8VD4oaXRlbXM6IFRbXSwgY2I6IChpdGVtOiBUKSA9PiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gY2IoaXRlbSk7XHJcbiAgICAgICAgcmVzW2dyb3VwXSA9IHJlc1tncm91cF0gfHwgW107XHJcbiAgICAgICAgcmVzW2dyb3VwXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9LCB7fSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWU6IGFueSwgdHlwZTogc3RyaW5nKTogYW55IHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gXCJub1wiIHx8IHZhbHVlID09IFwiZmFsc2VcIiB8fCB2YWx1ZSA9PSBcIjBcIikgPyBmYWxzZSA6ICEhdmFsdWU7XHJcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHZhbCkgPyAwIDogdmFsO1xyXG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YC5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbmNvbnN0IGNyb3BJbnRlcmZhY2UgPSB7XHJcbiAgICB4OiBcIm51bWJlclwiLFxyXG4gICAgeTogXCJudW1iZXJcIixcclxuICAgIHc6IFwibnVtYmVyXCIsXHJcbiAgICBoOiBcIm51bWJlclwiXHJcbn07XHJcblxyXG5mdW5jdGlvbiB0b0Nyb3BSZWdpb24oY3JvcEluZm86IHN0cmluZyB8IGJvb2xlYW4gfCBJQXNzZXRDcm9wSW5mbyk6IFJlZ2lvbiB7XHJcbiAgICBsZXQgY3JvcCA9IGNyb3BJbmZvIGFzIElBc3NldENyb3BJbmZvO1xyXG4gICAgaWYgKGlzU3RyaW5nKGNyb3BJbmZvKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNyb3AgPSBKU09OLnBhcnNlKGNyb3BJbmZvIGFzIHN0cmluZyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzSW50ZXJmYWNlKGNyb3AsIGNyb3BJbnRlcmZhY2UpKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQoY3JvcC53KSxcclxuICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQoY3JvcC5oKSxcclxuICAgICAgICB0b3A6IE1hdGgucm91bmQoY3JvcC55KSxcclxuICAgICAgICBsZWZ0OiBNYXRoLnJvdW5kKGNyb3AueClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0ltYWdlPFQgPSBCdWZmZXIgfCBSZWFkYWJsZT4oc3JjOiBULCBwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcywgbWV0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFQ+IHtcclxuXHJcbiAgICAvLyBEZWZhdWx0IHBhcmFtcyBhbmQgbWV0YVxyXG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xyXG4gICAgbWV0YSA9IG1ldGEgfHwge307XHJcblxyXG4gICAgLy8gR2V0IGRlZmF1bHQgY3JvcCBpbmZvXHJcbiAgICBjb25zdCBjcm9wID0gdG9Dcm9wUmVnaW9uKG1ldGEuY3JvcCk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBzcmMgaWYgdGhlcmUgYXJlIG5vIHBhcmFtcyBhbmQgbm8gZGVmYXVsdCBjcm9wIGV4aXN0c1xyXG4gICAgaWYgKG1ldGEuZXh0ZW5zaW9uID09PSBcInN2Z1wiIHx8IChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PSAwICYmICFjcm9wKSkge1xyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGFyc2UgcGFyYW1zXHJcbiAgICBwYXJhbXMucm90YXRpb24gPSBpc05hTihwYXJhbXMucm90YXRpb24pID8gMCA6IE1hdGgucm91bmQocGFyYW1zLnJvdGF0aW9uIC8gOTApICogOTA7XHJcbiAgICBwYXJhbXMuY2FudmFzU2NhbGVYID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWCkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgcGFyYW1zLmNhbnZhc1NjYWxlWSA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVkpID8gMSA6IE51bWJlcihwYXJhbXMuY2FudmFzU2NhbGVZKTtcclxuICAgIHBhcmFtcy5zY2FsZVggPSBpc05hTihwYXJhbXMuc2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWCk7XHJcbiAgICBwYXJhbXMuc2NhbGVZID0gaXNOYU4ocGFyYW1zLnNjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5zY2FsZVkpO1xyXG4gICAgcGFyYW1zLmNyb3AgPSBpc0Jvb2xlYW4ocGFyYW1zLmNyb3ApID8gcGFyYW1zLmNyb3AgOiBwYXJhbXMuY3JvcCA9PSBcInRydWVcIjtcclxuXHJcbiAgICBsZXQgYnVmZmVyID0gc3JjIGluc3RhbmNlb2YgUmVhZGFibGUgPyBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihzcmMpIDogc3JjIGFzIGFueTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gR2V0IGNyb3AgaW5mb1xyXG4gICAgICAgIGNvbnN0IGNyb3BCZWZvcmUgPSB0b0Nyb3BSZWdpb24ocGFyYW1zLmNyb3BCZWZvcmUgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQmVmb3JlIDogbnVsbCkpO1xyXG4gICAgICAgIGNvbnN0IGNyb3BBZnRlciA9IHRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEFmdGVyIHx8IChwYXJhbXMuY3JvcCA/IG1ldGEuY3JvcEFmdGVyIDogbnVsbCkpO1xyXG4gICAgICAgIC8vIEdldCBtZXRhZGF0YVxyXG4gICAgICAgIGxldCBpbWcgPSBzaGFycChidWZmZXIpO1xyXG4gICAgICAgIGxldCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCBpbWcubWV0YWRhdGEoKTtcclxuICAgICAgICAvLyBDcm9wIGJlZm9yZSByZXNpemVcclxuICAgICAgICBpZiAoY3JvcEJlZm9yZSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGNyb3BCZWZvcmUud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGNyb3BCZWZvcmUuaGVpZ2h0O1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wQmVmb3JlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNyb3ApIHtcclxuICAgICAgICAgICAgd2lkdGggPSBjcm9wLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBjcm9wLmhlaWdodDtcclxuICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlc2l6ZSBjYW52YXNcclxuICAgICAgICBjb25zdCBjYW52YXNTY2FsZVggPSBtZXRhPy5jYW52YXNTY2FsZVggfHwgMTtcclxuICAgICAgICBjb25zdCBjYW52YXNTY2FsZVkgPSBtZXRhPy5jYW52YXNTY2FsZVkgfHwgMTtcclxuICAgICAgICBpZiAocGFyYW1zLmNhbnZhc1NjYWxlWCAhPT0gY2FudmFzU2NhbGVYIHx8IHBhcmFtcy5jYW52YXNTY2FsZVkgIT09IGNhbnZhc1NjYWxlWSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuY2FudmFzU2NhbGVYKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBwYXJhbXMuY2FudmFzU2NhbGVZKTtcclxuICAgICAgICAgICAgaW1nID0gaW1nLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImNvbnRhaW5cIn0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXNpemUgaW1hZ2VcclxuICAgICAgICBpZiAocGFyYW1zLnNjYWxlWCAhPT0gMSB8fCBwYXJhbXMuc2NhbGVZICE9PSAxKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmFtcy5zY2FsZVgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5zY2FsZVkpO1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiZmlsbFwifSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyb3AgYWZ0ZXIgcmVzaXplXHJcbiAgICAgICAgaWYgKGNyb3BBZnRlcikge1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wQWZ0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSb3RhdGVcclxuICAgICAgICBpZiAocGFyYW1zLnJvdGF0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IGltZy50b0J1ZmZlcigpO1xyXG4gICAgICAgICAgICBpbWcgPSBzaGFycChidWZmZXIpLnJvdGF0ZShwYXJhbXMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBidWZmZXIgPSBhd2FpdCBpbWcudG9CdWZmZXIoKTtcclxuICAgICAgICBzcmMgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcikgOiBidWZmZXI7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkltYWdlIGNvbnZlcnNpb24gZXJyb3JcIiwgZSk7XHJcbiAgICAgICAgc3JjID0gc3JjIGluc3RhbmNlb2YgUmVhZGFibGUgPyBidWZmZXJUb1N0cmVhbShidWZmZXIpIDogYnVmZmVyO1xyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb1N0cmVhbShidWZmZXI6IEJ1ZmZlcik6IFJlYWRhYmxlIHtcclxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcclxuICAgIHJlYWRTdHJlYW0uZW5kKGJ1ZmZlcik7XHJcbiAgICByZXR1cm4gcmVhZFN0cmVhbVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIoc3RyZWFtOiBSZWFkYWJsZSk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29uY2F0ID0gW107XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uY2F0LnB1c2goZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4gcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNvbmNhdCkpKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbmNsYXNzIFJlYWRhYmxlU3RyZWFtQ2xvbmUgZXh0ZW5kcyBSZWFkYWJsZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZGFibGVTdHJlYW06IFJlYWRhYmxlLCBvcHRzPzogUmVhZGFibGVPcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0cyk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaChjaHVuayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImVycm9yXCIsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3JlYWQoc2l6ZTogbnVtYmVyKSB7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weVN0cmVhbShzdHJlYW06IFJlYWRhYmxlLCBvcHRzPzogUmVhZGFibGVPcHRpb25zKTogUmVhZGFibGUge1xyXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbUNsb25lKHN0cmVhbSwgb3B0cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBta2RpclJlY3Vyc2l2ZShwYXRoOiBzdHJpbmcsIG1vZGU6IG51bWJlciA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgbWtkaXIocGF0aCwge21vZGU6IG1vZGUgfHwgMG83NzcsIHJlY3Vyc2l2ZTogdHJ1ZX0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdW5saW5rKHBhdGgsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIGZzUmVhZEZpbGUocGF0aCwgKGVyciwgZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWooZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBbmREZWxldGVGaWxlKHBhdGg6IHN0cmluZywgdGltZW91dDogbnVtYmVyID0gNTAwMCk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUocGF0aCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGltZW91dCk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICBhd2FpdCBta2RpclJlY3Vyc2l2ZShkaXJuYW1lKHBhdGgpKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIGZzV3JpdGVGaWxlKHBhdGgsIGRhdGEsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVUb1Byb21pc2UodmFsdWU6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlID8gdmFsdWUgOiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZVRpbWVvdXQodGltZW91dDogbnVtYmVyID0gMTAwMCwgZXJyb3I6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGBUaW1lb3V0IGV4Y2VlZGVkOiAke3RpbWVvdXR9bXNgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGBUaW1lb3V0OiAke3RpbWVvdXR9bXNgKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHR5cGU6IFR5cGU8YW55Pik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uUGFyYW1zKGZ1bmM6IEZ1bmN0aW9uKTogc3RyaW5nW10ge1xyXG4gICAgLy8gUmVtb3ZlIGNvbW1lbnRzIG9mIHRoZSBmb3JtIC8qIC4uLiAqL1xyXG4gICAgLy8gUmVtb3ZpbmcgY29tbWVudHMgb2YgdGhlIGZvcm0gLy9cclxuICAgIC8vIFJlbW92ZSBib2R5IG9mIHRoZSBmdW5jdGlvbiB7IC4uLiB9XHJcbiAgICAvLyByZW1vdmluZyBcIj0+XCIgaWYgZnVuYyBpcyBhcnJvdyBmdW5jdGlvblxyXG4gICAgY29uc3Qgc3RyID0gZnVuYy50b1N0cmluZygpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwvKC4pKi9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC97W1xcc1xcU10qfS8sIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoLz0+L2csIFwiXCIpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICAvLyBTdGFydCBwYXJhbWV0ZXIgbmFtZXMgYWZ0ZXIgZmlyc3QgXCIoXCJcclxuICAgIGNvbnN0IHN0YXJ0ID0gc3RyLmluZGV4T2YoXCIoXCIpICsgMTtcclxuXHJcbiAgICAvLyBFbmQgcGFyYW1ldGVyIG5hbWVzIGlzIGp1c3QgYmVmb3JlIGxhc3QgXCIpXCJcclxuICAgIGNvbnN0IGVuZCA9IHN0ci5sZW5ndGggLSAxO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKS5zcGxpdChcIiwgXCIpO1xyXG4gICAgY29uc3QgcGFyYW1zID0gW107XHJcblxyXG4gICAgcmVzdWx0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcblxyXG4gICAgICAgIC8vIFJlbW92aW5nIGFueSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucmVwbGFjZSgvPVtcXHNcXFNdKi9nLCBcIlwiKS50cmltKCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lKHBhdGg6IHN0cmluZywgd2l0aEV4dGVuc2lvbjogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoIHx8IFwiXCIpO1xyXG4gICAgcmV0dXJuIHdpdGhFeHRlbnNpb24gPyBuYW1lIDogbmFtZS5zcGxpdChcIi5cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUocGF0aCB8fCBcIlwiKTtcclxuICAgIHJldHVybiBuYW1lLnNwbGl0KFwiLlwiKS5wb3AoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlkU3RyaW5nKCk6IGFueSB7XHJcbiAgICByZXR1cm4gbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlkVG9TdHJpbmcodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGlkVG9TdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0SWQgfHwgdmFsdWUgaW5zdGFuY2VvZiBUeXBlcy5PYmplY3RJZFxyXG4gICAgICAgID8gdmFsdWUudG9IZXhTdHJpbmcoKVxyXG4gICAgICAgIDogKGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUgfHwgbnVsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1lcih0cmFuc2Zvcm0/OiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IGFueSkge1xyXG4gICAgcmV0dXJuIChkb2M6IERvY3VtZW50LCByZXQ6IGFueSwgb3B0aW9ucz86IGFueSkgPT4ge1xyXG4gICAgICAgIHJldC5pZCA9IGlkVG9TdHJpbmcocmV0LmlkKSB8fCByZXQuaWQ7XHJcbiAgICAgICAgaWYgKGRvYy5faWQpIHtcclxuICAgICAgICAgICAgcmV0Ll9pZCA9IGlkVG9TdHJpbmcoZG9jLl9pZCk7XHJcbiAgICAgICAgICAgIHJldC5pZCA9IHJldC5pZCB8fCByZXQuX2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgcmV0Ll9fdjtcclxuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbih0cmFuc2Zvcm0pID8gdHJhbnNmb3JtKGRvYywgcmV0LCBvcHRpb25zKSB8fCByZXQgOiByZXQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnJvYWRjYXN0KHNvY2tldFNlcnZlcjogU2VydmVyLCBjYjogKGNsaWVudDogSUNsaWVudFNvY2tldCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKHNvY2tldFNlcnZlci5zb2NrZXRzLnNvY2tldHMpKS5mb3JFYWNoKGNiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHJhbmRvbShtaW4sIG1heCkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbWluICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlTdWJzY3JpcHRpb24oLi4uc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10pOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZhYmxlRnJvbUZ1bmN0aW9uKGNhbGxiYWNrRnVuYzogKCkgPT4gYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBzdWJqZWN0OiBhbnk7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55Pigoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgIGlmICghc3ViamVjdCkge1xyXG4gICAgICAgICAgICBzdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QgPSBmcm9tKGNhbGxiYWNrRnVuYygpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FuUmVwb3J0RXJyb3Ioc3ViamVjdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFkTGVmdCh2YWx1ZTogYW55LCBjb3VudDogbnVtYmVyID0gMywgcGFkV2l0aDogc3RyaW5nID0gXCIwXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucGFkU3RhcnQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFkUmlnaHQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZEVuZChjb3VudCwgcGFkV2l0aCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGcm9tQnVja2V0KGJ1Y2tldDogR3JpZEZTQnVja2V0LCBmaWxlSWQ6IE9iamVjdElkKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgYnVja2V0LmRlbGV0ZShmaWxlSWQsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgbGV0IGVyciA9IGVycm9yIGFzIGFueTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIgPSBlcnJvci5tZXNzYWdlIHx8IGVycm9yIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3RyaW5nKGVycikgfHwgIWVyci5zdGFydHNXaXRoKFwiRmlsZU5vdEZvdW5kXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoZmlsZUlkLnRvSGV4U3RyaW5nKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSkpO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0UHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUgPSAoKSA9PiB0cnVlO1xyXG5cclxuZnVuY3Rpb24gY29weVJlY3Vyc2l2ZSh0YXJnZXQ6IGFueSwgc291cmNlOiBhbnksIHByZWRpY2F0ZT86IEZpbHRlclByZWRpY2F0ZSk6IGFueSB7XHJcbiAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUgfHwgZGVmYXVsdFByZWRpY2F0ZTtcclxuICAgIGlmIChpc1ByaW1pdGl2ZShzb3VyY2UpIHx8IGlzRGF0ZShzb3VyY2UpIHx8IGlzRnVuY3Rpb24oc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcclxuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcclxuICAgICAgICB0YXJnZXQgPSBpc0FycmF5KHRhcmdldCkgPyBBcnJheS5mcm9tKHRhcmdldCkgOiBbXTtcclxuICAgICAgICBzb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUoaXRlbSwgaW5kZXgsIHRhcmdldCwgc291cmNlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IGluZGV4KVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4XSA9IGNvcHlSZWN1cnNpdmUodGFyZ2V0W2luZGV4XSwgaXRlbSwgcHJlZGljYXRlKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goY29weVJlY3Vyc2l2ZShudWxsLCBpdGVtLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2hvdWxkQ29weSA9IGlzRnVuY3Rpb24oc291cmNlLl9fc2hvdWxkQ29weSkgPyBzb3VyY2UuX19zaG91bGRDb3B5IDogKCkgPT4gdHJ1ZTtcclxuICAgIGlmIChpc0NvbnN0cnVjdG9yKHNvdXJjZS5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBpZiAoc291cmNlLl9fc2hvdWxkQ29weSA9PT0gZmFsc2UpIHJldHVybiBzb3VyY2U7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBzb3VyY2UuY29uc3RydWN0b3IoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdG8gPSBzb3VyY2UuY29uc3RydWN0b3IucHJvdG90eXBlIHx8IHNvdXJjZS5wcm90b3R5cGU7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0IHx8IHt9KTtcclxuICAgIH1cclxuICAgIC8vIENvcHkgbWFwIGVudHJpZXNcclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBNYXApIHtcclxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSh2YWx1ZSwga2V5LCB0YXJnZXQsIHNvdXJjZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksICFzaG91bGRDb3B5KGtleSwgdmFsdWUpID8gdmFsdWUgOiBjb3B5UmVjdXJzaXZlKHRhcmdldC5nZXQoa2V5KSwgdmFsdWUsIHByZWRpY2F0ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29weSBvYmplY3QgbWVtYmVyc1xyXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xyXG4gICAgdGFyZ2V0ID0ga2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKCFwcmVkaWNhdGUoc291cmNlW2tleV0sIGtleSwgcmVzdWx0LCBzb3VyY2UpKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gIXNob3VsZENvcHkoa2V5LCBzb3VyY2Vba2V5XSkgPyBzb3VyY2Vba2V5XSA6IGNvcHlSZWN1cnNpdmUocmVzdWx0W2tleV0sIHNvdXJjZVtrZXldLCBwcmVkaWNhdGUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LCB0YXJnZXQpO1xyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IHByb3BlcnRpZXNcclxuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKTtcclxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdG9ycykuZmlsdGVyKGsgPT4ga2V5cy5pbmRleE9mKGspIDwgMCk7XHJcbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3JzW2tleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyPFQ+KG9iajogVCwgcHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUpOiBQYXJ0aWFsPFQ+IHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKG51bGwsIG9iaiwgcHJlZGljYXRlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHk8VD4ob2JqOiBUKTogVCB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQ+KHRhcmdldDogVCwgc291cmNlOiBhbnksIHByZWRpY2F0ZT86IEZpbHRlclByZWRpY2F0ZSk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUodGFyZ2V0LCBzb3VyY2UsIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZDUoZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChpc09iamVjdChkYXRhKSkge1xyXG4gICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICAgIH1cclxuICAgIGlmICghaXNTdHJpbmcoZGF0YSkpIHtcclxuICAgICAgICB0aHJvdyBgQ2FuJ3QgbWQ1IG90aGVyIHRoYXQgcmF3IG9iamVjdCBvciBzdHJpbmdgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goXCJtZDVcIikudXBkYXRlKGRhdGEpLmRpZ2VzdChcImhleFwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoc2NyaXB0UGF0aDogc3RyaW5nLCBleHBlY3RlZENvZGU6IG51bWJlciA9IDApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNDaGlsZFByb2Nlc3Moc2NyaXB0UGF0aCwgKGVycm9yLCBzdGRvdXQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGV4cGVjdGVkQ29kZSAhPT0gZXJyb3IuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IChzdGRvdXQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XHJcbiAgICAgICAgICAgIGxldCBsaW5lID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKCFsaW5lICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lcy5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGxpbmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNwLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRlcnIub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDb25zb2xlQ29sb3Ige1xyXG4gICAgUmVzZXQgPSBcIlxceDFiWzBtXCIsXHJcbiAgICBCcmlnaHQgPSBcIlxceDFiWzFtXCIsXHJcbiAgICBEaW0gPSBcIlxceDFiWzJtXCIsXHJcbiAgICBVbmRlcnNjb3JlID0gXCJcXHgxYls0bVwiLFxyXG4gICAgQmxpbmsgPSBcIlxceDFiWzVtXCIsXHJcbiAgICBSZXZlcnNlID0gXCJcXHgxYls3bVwiLFxyXG4gICAgSGlkZGVuID0gXCJcXHgxYls4bVwiLFxyXG5cclxuICAgIEZnQmxhY2sgPSBcIlxceDFiWzMwbVwiLFxyXG4gICAgRmdSZWQgPSBcIlxceDFiWzMxbVwiLFxyXG4gICAgRmdHcmVlbiA9IFwiXFx4MWJbMzJtXCIsXHJcbiAgICBGZ1llbGxvdyA9IFwiXFx4MWJbMzNtXCIsXHJcbiAgICBGZ0JsdWUgPSBcIlxceDFiWzM0bVwiLFxyXG4gICAgRmdNYWdlbnRhID0gXCJcXHgxYlszNW1cIixcclxuICAgIEZnQ3lhbiA9IFwiXFx4MWJbMzZtXCIsXHJcbiAgICBGZ1doaXRlID0gXCJcXHgxYlszN21cIixcclxuICAgIEZnRGVmYXVsdCA9IFwiXFx4MWJbMzhtXCIsXHJcblxyXG4gICAgQmdCbGFjayA9IFwiXFx4MWJbNDBtXCIsXHJcbiAgICBCZ1JlZCA9IFwiXFx4MWJbNDFtXCIsXHJcbiAgICBCZ0dyZWVuID0gXCJcXHgxYls0Mm1cIixcclxuICAgIEJnWWVsbG93ID0gXCJcXHgxYls0M21cIixcclxuICAgIEJnQmx1ZSA9IFwiXFx4MWJbNDRtXCIsXHJcbiAgICBCZ01hZ2VudGEgPSBcIlxceDFiWzQ1bVwiLFxyXG4gICAgQmdDeWFuID0gXCJcXHgxYls0Nm1cIixcclxuICAgIEJnV2hpdGUgPSBcIlxceDFiWzQ3bVwiLFxyXG4gICAgQmdEZWZhdWx0ID0gXCJcXHgxYls0OG1cIlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKc29uQ29sb3JzIHtcclxuICAgIGtleUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVtYmVyQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBzdHJpbmdDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIHRydWVDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIGZhbHNlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBudWxsQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRDb2xvcnM6IElKc29uQ29sb3JzID0ge1xyXG4gICAga2V5Q29sb3I6IENvbnNvbGVDb2xvci5GZ1doaXRlLFxyXG4gICAgbnVtYmVyQ29sb3I6IENvbnNvbGVDb2xvci5GZ0JsdWUsXHJcbiAgICBzdHJpbmdDb2xvcjogQ29uc29sZUNvbG9yLkZnWWVsbG93LFxyXG4gICAgdHJ1ZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdHcmVlbixcclxuICAgIGZhbHNlQ29sb3I6IENvbnNvbGVDb2xvci5GZ1JlZCxcclxuICAgIG51bGxDb2xvcjogQ29uc29sZUNvbG9yLkJnTWFnZW50YVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUoaW5wdXQ6IGFueSwgY29sb3I6IENvbnNvbGVDb2xvcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7Y29sb3J9JHtpbnB1dH0ke0NvbnNvbGVDb2xvci5SZXNldH1gO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24ganNvbkhpZ2hsaWdodChpbnB1dDogc3RyaW5nIHwgb2JqZWN0LCBjb2xvck9wdGlvbnM/OiBJSnNvbkNvbG9ycyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29sb3JzLCBjb2xvck9wdGlvbnMpXHJcbiAgICBjb25zdCBqc29uID0gKGlzU3RyaW5nKGlucHV0KSA/IGlucHV0IDogSlNPTi5zdHJpbmdpZnkoaW5wdXQsIG51bGwsIDIpKS5yZXBsYWNlKC8mL2csICcmJykucmVwbGFjZSgvPC9nLCAnPCcpLnJlcGxhY2UoLz4vZywgJz4nKVxyXG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvKFwiKFxcXFx1W2EtekEtWjAtOV17NH18XFxcXFtedV18W15cXFxcXCJdKSpcIihcXHMqOik/fFxcYih0cnVlfGZhbHNlfG51bGwpXFxifC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK10/XFxkKyk/KS9nLCAobWF0Y2gpID0+IHtcclxuICAgICAgICBsZXQgY29sb3IgPSBjb2xvcnMubnVtYmVyQ29sb3JcclxuICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcclxuICAgICAgICAgICAgaWYgKC86JC8udGVzdChtYXRjaCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JzLmtleUNvbG9yXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5zdHJpbmdDb2xvcjtcclxuICAgICAgICAgICAgICAgIG1hdGNoID0gJ1wiJyArIG1hdGNoLnN1YnN0cigxLCBtYXRjaC5sZW5ndGggLSAyKSArICdcIic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb2xvciA9IC90cnVlLy50ZXN0KG1hdGNoKVxyXG4gICAgICAgICAgICAgICAgPyBjb2xvcnMudHJ1ZUNvbG9yXHJcbiAgICAgICAgICAgICAgICA6IC9mYWxzZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgICAgICA/IGNvbG9ycy5mYWxzZUNvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgOiAvbnVsbC8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMubnVsbENvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29sb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2NvbG9yfSR7bWF0Y2h9JHtDb25zb2xlQ29sb3IuUmVzZXR9YFxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTcGVjaWFsQ2hhcnMoc3RyOiBzdHJpbmcsIHRvOiBzdHJpbmcgPSBcIi1cIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7c3RyfWAucmVwbGFjZSgvWyZcXC9cXFxcIywgKygpJH4lLkAnXCI6Kj88Pnt9XS9nLCB0byk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycjogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZsYXQuY29uY2F0KGlzQXJyYXkodG9GbGF0dGVuKSA/IGZsYXR0ZW4odG9GbGF0dGVuKSA6IHRvRmxhdHRlbik7XHJcbiAgICB9LCBbXSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3cmFwRXJyb3IoZTogYW55LCBtZXNzYWdlOiBzdHJpbmcsIGh0dHBDb2RlOiBudW1iZXIgPSA1MDApOiBFcnJvciB7XHJcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcclxuICAgICAgICBlLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIHJldHVybiBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBIdHRwRXJyb3IoaHR0cENvZGUsIGAke21lc3NhZ2V9OiAke2V9YCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlVXJsKGVuZGluZzogc3RyaW5nID0gXCIvXCIpOiBQYXJhbVJlc29sdmVyIHtcclxuICAgIHJldHVybiB1cmwgPT4ge1xyXG4gICAgICAgIHJldHVybiB1cmwgPyBgJHt1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKX0ke2VuZGluZ31gIDogZW5kaW5nO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZVVybFNsYXNoID0gcHJlcGFyZVVybChcIi9cIik7XHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZVVybEVtcHR5ID0gcHJlcGFyZVVybChcIlwiKTtcclxuIl19
@@ -830,11 +830,13 @@ function wrapError(e, message, httpCode = 500) {
830
830
  }
831
831
  return new HttpError(httpCode, `${message}: ${e}`);
832
832
  }
833
- function prepareUrl(ending = "") {
833
+ function prepareUrl(ending = "/") {
834
834
  return url => {
835
835
  return url ? `${url.replace(/\/+$/, "")}${ending}` : ending;
836
836
  };
837
- }
837
+ }
838
+ const prepareUrlSlash = prepareUrl("/");
839
+ const prepareUrlEmpty = prepareUrl("");
838
840
 
839
841
  var __decorate$B = (this && this.__decorate) || function (decorators, target, key, desc) {
840
842
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -870,9 +872,15 @@ let Configuration = class Configuration {
870
872
  const value = isFunction(param.resolver)
871
873
  ? param.resolver(envValue)
872
874
  : convertValue(envValue, getType(param.defaultValue));
873
- console.log(`Processing param value`, colorize(param.name, ConsoleColor.FgGreen), colorize(envName, ConsoleColor.FgBlue), `"${envValue}"`, value);
875
+ console.log(colorize(`Processing param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), colorize(envName, ConsoleColor.FgBlue), `"${envValue}"`, value);
876
+ return value;
877
+ }
878
+ else if (isFunction(param.resolver)) {
879
+ const value = param.resolver(param.defaultValue);
880
+ console.log(colorize(`Processing default param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), `"${param.defaultValue}"`, value);
874
881
  return value;
875
882
  }
883
+ console.log(colorize(`Using default param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), `"${param.defaultValue}"`);
876
884
  return param.defaultValue;
877
885
  }
878
886
  hasParam(name) {
@@ -1375,7 +1383,6 @@ var __metadata$s = (this && this.__metadata) || function (k, v) {
1375
1383
  let Logger = class Logger {
1376
1384
  constructor(config) {
1377
1385
  this.config = config;
1378
- console.log("Logger created");
1379
1386
  this.tags = this.config.resolve("logTags");
1380
1387
  }
1381
1388
  log(tag, ...params) {
@@ -4699,5 +4706,5 @@ function setupBackend(config, providers, parent) {
4699
4706
  * Generated bundle index. Do not edit.
4700
4707
  */
4701
4708
 
4702
- export { AssetImageParams, AssetProcessor, AssetResolver, Assets, AuthController, BackendProvider, BaseDoc, Cache, CacheProcessor, Configuration, ConsoleColor, DI_CONTAINER, DocumentArray, EXPRESS, EndpointProvider, ErrorHandlerMiddleware, FIXTURE, Fixtures, Gallery, GalleryCache, GalleryController, HTTP_SERVER, IdGenerator, IsDocumented, IsFile, IsObjectId, JOB, JobManager, JsonResponse, LanguageMiddleware, LazyAssetGenerator, LazyAssets, MailSender, MemoryCache, MongoConnector, OPENAPI_VALIDATION, OpenApi, PARAMETER, Parameter, PrimitiveArray, Progresses, ResolveEntity, ResponseType, SOCKET_SERVER, TemplateRenderer, TokenGenerator, TranslationProvider, Translator, Type, UserManager, assign, broadcast, bufferToStream, colorize, convertValue, copy, copyStream, createIdString, createServices, createTransformer, deleteFile, deleteFromBucket, filter, firstItem, flatten, getConstructorName, getExtension, getFileName, getFunctionParams, getType, getValue, groupBy, hydratePopulated, idToString, injectServices, isArray, isBoolean, isConstructor, isDate, isDefined, isFunction, isInterface, isNullOrUndefined, isObject, isObjectId, isPrimitive, isString, isType, jsonHighlight, lastItem, lcFirst, letsLookupStage, lookupStages, matchField, matchFieldStages, matchStage, md5, mkdirRecursive, multiSubscription, observableFromFunction, padLeft, padRight, paginate, paginateAggregations, prepareUrl, projectStage, promiseTimeout, rand, random, readAndDeleteFile, readFile, regroup, replaceSpecialChars, resolveUser, runCommand, service, setupBackend, streamToBuffer, toImage, ucFirst, uniqueItems, unwindStage, valueToPromise, wrapError, writeFile, Logger as ɵa };
4709
+ export { AssetImageParams, AssetProcessor, AssetResolver, Assets, AuthController, BackendProvider, BaseDoc, Cache, CacheProcessor, Configuration, ConsoleColor, DI_CONTAINER, DocumentArray, EXPRESS, EndpointProvider, ErrorHandlerMiddleware, FIXTURE, Fixtures, Gallery, GalleryCache, GalleryController, HTTP_SERVER, IdGenerator, IsDocumented, IsFile, IsObjectId, JOB, JobManager, JsonResponse, LanguageMiddleware, LazyAssetGenerator, LazyAssets, Logger, MailSender, MemoryCache, MongoConnector, OPENAPI_VALIDATION, OpenApi, PARAMETER, Parameter, PrimitiveArray, Progresses, ResolveEntity, ResponseType, SOCKET_SERVER, TemplateRenderer, TokenGenerator, TranslationProvider, Translator, Type, UserManager, assign, broadcast, bufferToStream, colorize, convertValue, copy, copyStream, createIdString, createServices, createTransformer, deleteFile, deleteFromBucket, filter, firstItem, flatten, getConstructorName, getExtension, getFileName, getFunctionParams, getType, getValue, groupBy, hydratePopulated, idToString, injectServices, isArray, isBoolean, isConstructor, isDate, isDefined, isFunction, isInterface, isNullOrUndefined, isObject, isObjectId, isPrimitive, isString, isType, jsonHighlight, lastItem, lcFirst, letsLookupStage, lookupStages, matchField, matchFieldStages, matchStage, md5, mkdirRecursive, multiSubscription, observableFromFunction, padLeft, padRight, paginate, paginateAggregations, prepareUrl, prepareUrlEmpty, prepareUrlSlash, projectStage, promiseTimeout, rand, random, readAndDeleteFile, readFile, regroup, replaceSpecialChars, resolveUser, runCommand, service, setupBackend, streamToBuffer, toImage, ucFirst, uniqueItems, unwindStage, valueToPromise, wrapError, writeFile };
4703
4710
  //# sourceMappingURL=stemy-backend.js.map