@dangl/angular-dangl-identity-client 4.0.1-beta0004 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  //----------------------
2
2
  // <auto-generated>
3
- // Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)
3
+ // Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
4
4
  // </auto-generated>
5
5
  //----------------------
6
6
  /* tslint:disable */
@@ -479,4 +479,4 @@ function blobToText(blob) {
479
479
  }
480
480
  });
481
481
  }
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZGFuZ2wtaWRlbnRpdHktY2xpZW50L3NyYy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QjtBQUN4QixtQkFBbUI7QUFDbkIsOEhBQThIO0FBQzlILG9CQUFvQjtBQUNwQix3QkFBd0I7QUFFeEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQix1Q0FBdUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsSUFBSSxtQkFBbUIsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFLElBQUksYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUUvRixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLGNBQWMsQ0FBUyxvQ0FBb0MsQ0FBQyxDQUFDO0FBS25ILE1BQU0sT0FBTyxtQkFBbUI7SUFLNUIsWUFBZ0MsSUFBZ0IsRUFBMEQsT0FBZ0I7UUFGaEgscUJBQWdCLEdBQW1ELFNBQVMsQ0FBQztRQUduRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFnQixFQUFFLFdBQXNDO1FB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O1FBQ3ZDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBRWhDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBUztJQUN6QixPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gPGF1dG8tZ2VuZXJhdGVkPlxyXG4vLyAgICAgR2VuZXJhdGVkIHVzaW5nIHRoZSBOU3dhZyB0b29sY2hhaW4gdjEzLjE1LjEwLjAgKE5Kc29uU2NoZW1hIHYxMC42LjEwLjAgKE5ld3RvbnNvZnQuSnNvbiB2MTIuMC4wLjApKSAoaHR0cDovL05Td2FnLm9yZylcclxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4vLyBSZVNoYXJwZXIgZGlzYWJsZSBJbmNvbnNpc3RlbnROYW1pbmdcclxuXHJcbmltcG9ydCB7IG1lcmdlTWFwIGFzIF9vYnNlcnZhYmxlTWVyZ2VNYXAsIGNhdGNoRXJyb3IgYXMgX29ic2VydmFibGVDYXRjaCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciBhcyBfb2JzZXJ2YWJsZVRocm93LCBvZiBhcyBfb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgREFOR0xfSURFTlRJVFlfQ0xJRU5UX0FQSV9CQVNFX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdEQU5HTF9JREVOVElUWV9DTElFTlRfQVBJX0JBU0VfVVJMJyk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhbmdsSWRlbnRpdHlDbGllbnQge1xyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xyXG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoREFOR0xfSURFTlRJVFlfQ0xJRU5UX0FQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XHJcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCAhPT0gdW5kZWZpbmVkICYmIGJhc2VVcmwgIT09IG51bGwgPyBiYXNlVXJsIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbldpdGhDb29raWUobW9kZWw6IExvZ2luUG9zdCwgcmVkaXJlY3RVcmw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L2xvZ2luP1wiO1xyXG4gICAgICAgIGlmIChyZWRpcmVjdFVybCAhPT0gdW5kZWZpbmVkICYmIHJlZGlyZWN0VXJsICE9PSBudWxsKVxyXG4gICAgICAgICAgICB1cmxfICs9IFwicmVkaXJlY3RVcmw9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHJlZGlyZWN0VXJsKSArIFwiJlwiO1xyXG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkobW9kZWwpO1xyXG5cclxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTG9naW5XaXRoQ29va2llKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xvZ2luV2l0aENvb2tpZShyZXNwb25zZV8gYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0xvZ2luV2l0aENvb2tpZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcclxuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxyXG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxyXG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQSBzZXJ2ZXIgc2lkZSBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25PdXRXaXRoU2lnbkluTWFuYWdlcigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L2xvZ2luXCI7XHJcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZGVsZXRlXCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbk91dFdpdGhTaWduSW5NYW5hZ2VyKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25PdXRXaXRoU2lnbkluTWFuYWdlcihyZXNwb25zZV8gYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1NpZ25PdXRXaXRoU2lnbkluTWFuYWdlcihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcclxuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxyXG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxyXG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbkFuZFJldHVyblRva2VuKG1vZGVsOiBUb2tlbkxvZ2luUG9zdCk6IE9ic2VydmFibGU8VG9rZW5SZXNwb25zZUdldD4ge1xyXG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvaWRlbnRpdHkvdG9rZW4tbG9naW5cIjtcclxuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KG1vZGVsKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NMb2dpbkFuZFJldHVyblRva2VuKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xvZ2luQW5kUmV0dXJuVG9rZW4ocmVzcG9uc2VfIGFzIGFueSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VG9rZW5SZXNwb25zZUdldD47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2tlblJlc3BvbnNlR2V0PjtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NMb2dpbkFuZFJldHVyblRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2tlblJlc3BvbnNlR2V0PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XHJcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xyXG4gICAgICAgICAgICByZXN1bHQyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKSBhcyBUb2tlblJlc3BvbnNlR2V0O1xyXG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMDogYW55ID0gbnVsbDtcclxuICAgICAgICAgICAgcmVzdWx0NDAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcikgYXMgVG9rZW5SZXNwb25zZUdldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQSBzZXJ2ZXIgc2lkZSBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAwKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkEgc2VydmVyIHNpZGUgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRva2VuUmVzcG9uc2VHZXQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoVG9rZW4obW9kZWw6IFRva2VuUmVmcmVzaFBvc3QpOiBPYnNlcnZhYmxlPFRva2VuUmVzcG9uc2VHZXQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L3Rva2VuLXJlZnJlc2hcIjtcclxuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KG1vZGVsKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWZyZXNoVG9rZW4ocmVzcG9uc2VfKTtcclxuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRva2VuUmVzcG9uc2VHZXQ+O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VG9rZW5SZXNwb25zZUdldD47XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2tlblJlc3BvbnNlR2V0PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XHJcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xyXG4gICAgICAgICAgICByZXN1bHQyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKSBhcyBUb2tlblJlc3BvbnNlR2V0O1xyXG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMDogYW55ID0gbnVsbDtcclxuICAgICAgICAgICAgcmVzdWx0NDAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcikgYXMgVG9rZW5SZXNwb25zZUdldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQSBzZXJ2ZXIgc2lkZSBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAwKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkEgc2VydmVyIHNpZGUgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRva2VuUmVzcG9uc2VHZXQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcihyZWdpc3Rlck1vZGVsOiBSZWdpc3RlclBvc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L3JlZ2lzdGVyXCI7XHJcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShyZWdpc3Rlck1vZGVsKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZ2lzdGVyKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZ2lzdGVyKHJlc3BvbnNlXyBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8dm9pZD47XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVnaXN0ZXIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cclxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcclxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cclxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDA6IGFueSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJlc3VsdDQwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpIGFzIEFwaUVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBIHNlcnZlciBzaWRlIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDApO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZXF1ZXN0UGFzc3dvcmRSZXNldChmb3Jnb3RQYXNzd29yZE1vZGVsOiBGb3Jnb3RQYXNzd29yZFBvc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L3Bhc3N3b3JkLWZvcmdvdHRlblwiO1xyXG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoZm9yZ290UGFzc3dvcmRNb2RlbCk7XHJcblxyXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcclxuICAgICAgICAgICAgYm9keTogY29udGVudF8sXHJcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXF1ZXN0UGFzc3dvcmRSZXNldChyZXNwb25zZV8pO1xyXG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXF1ZXN0UGFzc3dvcmRSZXNldChyZXNwb25zZV8gYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1JlcXVlc3RQYXNzd29yZFJlc2V0KHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XHJcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjx2b2lkPihudWxsIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUG9zdCB7XHJcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XHJcbiAgICBwYXNzd29yZDogc3RyaW5nO1xyXG4gICAgc3RheVNpZ25lZEluOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2VHZXQge1xyXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZXJyb3I/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZXJyb3JEZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBleHBpcmVzSW46IG51bWJlcjtcclxuICAgIGh0dHBFcnJvclJlYXNvbj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBodHRwU3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XHJcbiAgICBpZGVudGl0eVRva2VuPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGlzRXJyb3I6IGJvb2xlYW47XHJcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgdG9rZW5UeXBlPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGVycm9yVHlwZTogUmVzcG9uc2VFcnJvclR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEh0dHBTdGF0dXNDb2RlIHtcclxuICAgIENvbnRpbnVlID0gXCJDb250aW51ZVwiLFxyXG4gICAgU3dpdGNoaW5nUHJvdG9jb2xzID0gXCJTd2l0Y2hpbmdQcm90b2NvbHNcIixcclxuICAgIFByb2Nlc3NpbmcgPSBcIlByb2Nlc3NpbmdcIixcclxuICAgIEVhcmx5SGludHMgPSBcIkVhcmx5SGludHNcIixcclxuICAgIE9LID0gXCJPS1wiLFxyXG4gICAgQ3JlYXRlZCA9IFwiQ3JlYXRlZFwiLFxyXG4gICAgQWNjZXB0ZWQgPSBcIkFjY2VwdGVkXCIsXHJcbiAgICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSBcIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvblwiLFxyXG4gICAgTm9Db250ZW50ID0gXCJOb0NvbnRlbnRcIixcclxuICAgIFJlc2V0Q29udGVudCA9IFwiUmVzZXRDb250ZW50XCIsXHJcbiAgICBQYXJ0aWFsQ29udGVudCA9IFwiUGFydGlhbENvbnRlbnRcIixcclxuICAgIE11bHRpU3RhdHVzID0gXCJNdWx0aVN0YXR1c1wiLFxyXG4gICAgQWxyZWFkeVJlcG9ydGVkID0gXCJBbHJlYWR5UmVwb3J0ZWRcIixcclxuICAgIElNVXNlZCA9IFwiSU1Vc2VkXCIsXHJcbiAgICBNdWx0aXBsZUNob2ljZXMgPSBcIkFtYmlndW91c1wiLFxyXG4gICAgQW1iaWd1b3VzID0gXCJNb3ZlZFwiLFxyXG4gICAgTW92ZWRQZXJtYW5lbnRseSA9IFwiUmVkaXJlY3RcIixcclxuICAgIE1vdmVkID0gXCJSZWRpcmVjdE1ldGhvZFwiLFxyXG4gICAgRm91bmQgPSBcIk5vdE1vZGlmaWVkXCIsXHJcbiAgICBSZWRpcmVjdCA9IFwiVXNlUHJveHlcIixcclxuICAgIFNlZU90aGVyID0gXCJVbnVzZWRcIixcclxuICAgIFJlZGlyZWN0TWV0aG9kID0gXCJUZW1wb3JhcnlSZWRpcmVjdFwiLFxyXG4gICAgTm90TW9kaWZpZWQgPSBcIlBlcm1hbmVudFJlZGlyZWN0XCIsXHJcbiAgICBVc2VQcm94eSA9IFwiQmFkUmVxdWVzdFwiLFxyXG4gICAgVW51c2VkID0gXCJVbmF1dGhvcml6ZWRcIixcclxuICAgIFRlbXBvcmFyeVJlZGlyZWN0ID0gXCJQYXltZW50UmVxdWlyZWRcIixcclxuICAgIFJlZGlyZWN0S2VlcFZlcmIgPSBcIkZvcmJpZGRlblwiLFxyXG4gICAgUGVybWFuZW50UmVkaXJlY3QgPSBcIk5vdEZvdW5kXCIsXHJcbiAgICBCYWRSZXF1ZXN0ID0gXCJNZXRob2ROb3RBbGxvd2VkXCIsXHJcbiAgICBVbmF1dGhvcml6ZWQgPSBcIk5vdEFjY2VwdGFibGVcIixcclxuICAgIFBheW1lbnRSZXF1aXJlZCA9IFwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkXCIsXHJcbiAgICBGb3JiaWRkZW4gPSBcIlJlcXVlc3RUaW1lb3V0XCIsXHJcbiAgICBOb3RGb3VuZCA9IFwiQ29uZmxpY3RcIixcclxuICAgIE1ldGhvZE5vdEFsbG93ZWQgPSBcIkdvbmVcIixcclxuICAgIE5vdEFjY2VwdGFibGUgPSBcIkxlbmd0aFJlcXVpcmVkXCIsXHJcbiAgICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSBcIlByZWNvbmRpdGlvbkZhaWxlZFwiLFxyXG4gICAgUmVxdWVzdFRpbWVvdXQgPSBcIlJlcXVlc3RFbnRpdHlUb29MYXJnZVwiLFxyXG4gICAgQ29uZmxpY3QgPSBcIlJlcXVlc3RVcmlUb29Mb25nXCIsXHJcbiAgICBHb25lID0gXCJVbnN1cHBvcnRlZE1lZGlhVHlwZVwiLFxyXG4gICAgTGVuZ3RoUmVxdWlyZWQgPSBcIlJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVcIixcclxuICAgIFByZWNvbmRpdGlvbkZhaWxlZCA9IFwiRXhwZWN0YXRpb25GYWlsZWRcIixcclxuICAgIFJlcXVlc3RFbnRpdHlUb29MYXJnZSA9IFwiTWlzZGlyZWN0ZWRSZXF1ZXN0XCIsXHJcbiAgICBSZXF1ZXN0VXJpVG9vTG9uZyA9IFwiVW5wcm9jZXNzYWJsZUVudGl0eVwiLFxyXG4gICAgVW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSBcIkxvY2tlZFwiLFxyXG4gICAgUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IFwiRmFpbGVkRGVwZW5kZW5jeVwiLFxyXG4gICAgRXhwZWN0YXRpb25GYWlsZWQgPSBcIlVwZ3JhZGVSZXF1aXJlZFwiLFxyXG4gICAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gXCJQcmVjb25kaXRpb25SZXF1aXJlZFwiLFxyXG4gICAgVW5wcm9jZXNzYWJsZUVudGl0eSA9IFwiVG9vTWFueVJlcXVlc3RzXCIsXHJcbiAgICBMb2NrZWQgPSBcIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZVwiLFxyXG4gICAgRmFpbGVkRGVwZW5kZW5jeSA9IFwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnNcIixcclxuICAgIFVwZ3JhZGVSZXF1aXJlZCA9IFwiSW50ZXJuYWxTZXJ2ZXJFcnJvclwiLFxyXG4gICAgUHJlY29uZGl0aW9uUmVxdWlyZWQgPSBcIk5vdEltcGxlbWVudGVkXCIsXHJcbiAgICBUb29NYW55UmVxdWVzdHMgPSBcIkJhZEdhdGV3YXlcIixcclxuICAgIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCIsXHJcbiAgICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyA9IFwiR2F0ZXdheVRpbWVvdXRcIixcclxuICAgIEludGVybmFsU2VydmVyRXJyb3IgPSBcIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkXCIsXHJcbiAgICBOb3RJbXBsZW1lbnRlZCA9IFwiVmFyaWFudEFsc29OZWdvdGlhdGVzXCIsXHJcbiAgICBCYWRHYXRld2F5ID0gXCJJbnN1ZmZpY2llbnRTdG9yYWdlXCIsXHJcbiAgICBTZXJ2aWNlVW5hdmFpbGFibGUgPSBcIkxvb3BEZXRlY3RlZFwiLFxyXG4gICAgR2F0ZXdheVRpbWVvdXQgPSBcIk5vdEV4dGVuZGVkXCIsXHJcbiAgICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCA9IFwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRcIixcclxufVxyXG5cclxuLyoqIFZhcmlvdXMgcmVhc29ucyBmb3IgYSBwcm90b2NvbCBlbmRwb2ludCBlcnJvciAqL1xyXG5leHBvcnQgZW51bSBSZXNwb25zZUVycm9yVHlwZSB7XHJcbiAgICBOb25lID0gXCJOb25lXCIsXHJcbiAgICBQcm90b2NvbCA9IFwiUHJvdG9jb2xcIixcclxuICAgIEh0dHAgPSBcIkh0dHBcIixcclxuICAgIEV4Y2VwdGlvbiA9IFwiRXhjZXB0aW9uXCIsXHJcbiAgICBQb2xpY3lWaW9sYXRpb24gPSBcIlBvbGljeVZpb2xhdGlvblwiLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuTG9naW5Qb3N0IHtcclxuICAgIGlkZW50aWZpZXI6IHN0cmluZztcclxuICAgIHBhc3N3b3JkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZWZyZXNoUG9zdCB7XHJcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcclxufVxyXG5cclxuLyoqIERhdGEgdHJhbnNmZXIgY2xhc3MgdG8gY29udmV5IGFwaSBlcnJvcnMgKi9cclxuZXhwb3J0IGludGVyZmFjZSBBcGlFcnJvciB7XHJcbiAgICAvKiogVGhpcyBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEgc2V0IG9mIGFsbCBlcnJvcnMgYW5kIHRoZWlyIG1lc3NhZ2VzICovXHJcbiAgICBlcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdOyB9IHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclBvc3Qge1xyXG4gICAgdXNlcm5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBwYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogc3RyaW5nW10gfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdvdFBhc3N3b3JkUG9zdCB7XHJcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XHJcbiAgICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBzdHJpbmdbXSB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTd2FnZ2VyRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgc3RhdHVzOiBudW1iZXI7XHJcbiAgICByZXNwb25zZTogc3RyaW5nO1xyXG4gICAgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XHJcbiAgICByZXN1bHQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCByZXNwb25zZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgcmVzdWx0OiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpc1N3YWdnZXJFeGNlcHRpb24gPSB0cnVlO1xyXG5cclxuICAgIHN0YXRpYyBpc1N3YWdnZXJFeGNlcHRpb24ob2JqOiBhbnkpOiBvYmogaXMgU3dhZ2dlckV4Y2VwdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5pc1N3YWdnZXJFeGNlcHRpb24gPT09IHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZClcclxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXN1bHQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KG5ldyBTd2FnZ2VyRXhjZXB0aW9uKG1lc3NhZ2UsIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnMsIG51bGwpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWJsb2IpIHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKGV2ZW50LnRhcmdldCBhcyBhbnkpLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSJdfQ==
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZGFuZ2wtaWRlbnRpdHktY2xpZW50L3NyYy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QjtBQUN4QixtQkFBbUI7QUFDbkIsOEhBQThIO0FBQzlILG9CQUFvQjtBQUNwQix3QkFBd0I7QUFFeEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQix1Q0FBdUM7QUFFdkMsT0FBTyxFQUFFLFFBQVEsSUFBSSxtQkFBbUIsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFLElBQUksYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUUvRixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLGNBQWMsQ0FBUyxvQ0FBb0MsQ0FBQyxDQUFDO0FBS25ILE1BQU0sT0FBTyxtQkFBbUI7SUFLNUIsWUFBZ0MsSUFBZ0IsRUFBMEQsT0FBZ0I7UUFGaEgscUJBQWdCLEdBQW1ELFNBQVMsQ0FBQztRQUduRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFnQixFQUFFLFdBQXNDO1FB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O1FBQ3ZDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBRWhDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBUztJQUN6QixPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gPGF1dG8tZ2VuZXJhdGVkPlxyXG4vLyAgICAgR2VuZXJhdGVkIHVzaW5nIHRoZSBOU3dhZyB0b29sY2hhaW4gdjEzLjE1LjEwLjAgKE5Kc29uU2NoZW1hIHYxMC42LjEwLjAgKE5ld3RvbnNvZnQuSnNvbiB2MTMuMC4wLjApKSAoaHR0cDovL05Td2FnLm9yZylcclxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4vLyBSZVNoYXJwZXIgZGlzYWJsZSBJbmNvbnNpc3RlbnROYW1pbmdcclxuXHJcbmltcG9ydCB7IG1lcmdlTWFwIGFzIF9vYnNlcnZhYmxlTWVyZ2VNYXAsIGNhdGNoRXJyb3IgYXMgX29ic2VydmFibGVDYXRjaCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciBhcyBfb2JzZXJ2YWJsZVRocm93LCBvZiBhcyBfb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgREFOR0xfSURFTlRJVFlfQ0xJRU5UX0FQSV9CQVNFX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdEQU5HTF9JREVOVElUWV9DTElFTlRfQVBJX0JBU0VfVVJMJyk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhbmdsSWRlbnRpdHlDbGllbnQge1xyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xyXG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoREFOR0xfSURFTlRJVFlfQ0xJRU5UX0FQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XHJcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCAhPT0gdW5kZWZpbmVkICYmIGJhc2VVcmwgIT09IG51bGwgPyBiYXNlVXJsIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbldpdGhDb29raWUobW9kZWw6IExvZ2luUG9zdCwgcmVkaXJlY3RVcmw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L2xvZ2luP1wiO1xyXG4gICAgICAgIGlmIChyZWRpcmVjdFVybCAhPT0gdW5kZWZpbmVkICYmIHJlZGlyZWN0VXJsICE9PSBudWxsKVxyXG4gICAgICAgICAgICB1cmxfICs9IFwicmVkaXJlY3RVcmw9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHJlZGlyZWN0VXJsKSArIFwiJlwiO1xyXG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkobW9kZWwpO1xyXG5cclxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTG9naW5XaXRoQ29va2llKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xvZ2luV2l0aENvb2tpZShyZXNwb25zZV8gYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0xvZ2luV2l0aENvb2tpZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcclxuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxyXG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxyXG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQSBzZXJ2ZXIgc2lkZSBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25PdXRXaXRoU2lnbkluTWFuYWdlcigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L2xvZ2luXCI7XHJcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZGVsZXRlXCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbk91dFdpdGhTaWduSW5NYW5hZ2VyKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25PdXRXaXRoU2lnbkluTWFuYWdlcihyZXNwb25zZV8gYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1NpZ25PdXRXaXRoU2lnbkluTWFuYWdlcihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcclxuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxyXG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxyXG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbkFuZFJldHVyblRva2VuKG1vZGVsOiBUb2tlbkxvZ2luUG9zdCk6IE9ic2VydmFibGU8VG9rZW5SZXNwb25zZUdldD4ge1xyXG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvaWRlbnRpdHkvdG9rZW4tbG9naW5cIjtcclxuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KG1vZGVsKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NMb2dpbkFuZFJldHVyblRva2VuKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xvZ2luQW5kUmV0dXJuVG9rZW4ocmVzcG9uc2VfIGFzIGFueSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VG9rZW5SZXNwb25zZUdldD47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2tlblJlc3BvbnNlR2V0PjtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NMb2dpbkFuZFJldHVyblRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2tlblJlc3BvbnNlR2V0PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XHJcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xyXG4gICAgICAgICAgICByZXN1bHQyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKSBhcyBUb2tlblJlc3BvbnNlR2V0O1xyXG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMDogYW55ID0gbnVsbDtcclxuICAgICAgICAgICAgcmVzdWx0NDAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcikgYXMgVG9rZW5SZXNwb25zZUdldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQSBzZXJ2ZXIgc2lkZSBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAwKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkEgc2VydmVyIHNpZGUgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRva2VuUmVzcG9uc2VHZXQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoVG9rZW4obW9kZWw6IFRva2VuUmVmcmVzaFBvc3QpOiBPYnNlcnZhYmxlPFRva2VuUmVzcG9uc2VHZXQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L3Rva2VuLXJlZnJlc2hcIjtcclxuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KG1vZGVsKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWZyZXNoVG9rZW4ocmVzcG9uc2VfKTtcclxuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRva2VuUmVzcG9uc2VHZXQ+O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VG9rZW5SZXNwb25zZUdldD47XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2tlblJlc3BvbnNlR2V0PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XHJcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xyXG4gICAgICAgICAgICByZXN1bHQyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKSBhcyBUb2tlblJlc3BvbnNlR2V0O1xyXG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMDogYW55ID0gbnVsbDtcclxuICAgICAgICAgICAgcmVzdWx0NDAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcikgYXMgVG9rZW5SZXNwb25zZUdldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQSBzZXJ2ZXIgc2lkZSBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAwKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkEgc2VydmVyIHNpZGUgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRva2VuUmVzcG9uc2VHZXQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcihyZWdpc3Rlck1vZGVsOiBSZWdpc3RlclBvc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L3JlZ2lzdGVyXCI7XHJcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShyZWdpc3Rlck1vZGVsKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xyXG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZ2lzdGVyKHJlc3BvbnNlXyk7XHJcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZ2lzdGVyKHJlc3BvbnNlXyBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8dm9pZD47XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVnaXN0ZXIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cclxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcclxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cclxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDA6IGFueSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJlc3VsdDQwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpIGFzIEFwaUVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBIHNlcnZlciBzaWRlIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDApO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPHZvaWQ+KG51bGwgYXMgYW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZXF1ZXN0UGFzc3dvcmRSZXNldChmb3Jnb3RQYXNzd29yZE1vZGVsOiBGb3Jnb3RQYXNzd29yZFBvc3QpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2lkZW50aXR5L3Bhc3N3b3JkLWZvcmdvdHRlblwiO1xyXG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoZm9yZ290UGFzc3dvcmRNb2RlbCk7XHJcblxyXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcclxuICAgICAgICAgICAgYm9keTogY29udGVudF8sXHJcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXF1ZXN0UGFzc3dvcmRSZXNldChyZXNwb25zZV8pO1xyXG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXF1ZXN0UGFzc3dvcmRSZXNldChyZXNwb25zZV8gYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1JlcXVlc3RQYXNzd29yZFJlc2V0KHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XHJcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjx2b2lkPihudWxsIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8dm9pZD4obnVsbCBhcyBhbnkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUG9zdCB7XHJcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XHJcbiAgICBwYXNzd29yZDogc3RyaW5nO1xyXG4gICAgc3RheVNpZ25lZEluOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2VHZXQge1xyXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZXJyb3I/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZXJyb3JEZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBleHBpcmVzSW46IG51bWJlcjtcclxuICAgIGh0dHBFcnJvclJlYXNvbj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBodHRwU3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XHJcbiAgICBpZGVudGl0eVRva2VuPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGlzRXJyb3I6IGJvb2xlYW47XHJcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgdG9rZW5UeXBlPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGVycm9yVHlwZTogUmVzcG9uc2VFcnJvclR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEh0dHBTdGF0dXNDb2RlIHtcclxuICAgIENvbnRpbnVlID0gXCJDb250aW51ZVwiLFxyXG4gICAgU3dpdGNoaW5nUHJvdG9jb2xzID0gXCJTd2l0Y2hpbmdQcm90b2NvbHNcIixcclxuICAgIFByb2Nlc3NpbmcgPSBcIlByb2Nlc3NpbmdcIixcclxuICAgIEVhcmx5SGludHMgPSBcIkVhcmx5SGludHNcIixcclxuICAgIE9LID0gXCJPS1wiLFxyXG4gICAgQ3JlYXRlZCA9IFwiQ3JlYXRlZFwiLFxyXG4gICAgQWNjZXB0ZWQgPSBcIkFjY2VwdGVkXCIsXHJcbiAgICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSBcIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvblwiLFxyXG4gICAgTm9Db250ZW50ID0gXCJOb0NvbnRlbnRcIixcclxuICAgIFJlc2V0Q29udGVudCA9IFwiUmVzZXRDb250ZW50XCIsXHJcbiAgICBQYXJ0aWFsQ29udGVudCA9IFwiUGFydGlhbENvbnRlbnRcIixcclxuICAgIE11bHRpU3RhdHVzID0gXCJNdWx0aVN0YXR1c1wiLFxyXG4gICAgQWxyZWFkeVJlcG9ydGVkID0gXCJBbHJlYWR5UmVwb3J0ZWRcIixcclxuICAgIElNVXNlZCA9IFwiSU1Vc2VkXCIsXHJcbiAgICBNdWx0aXBsZUNob2ljZXMgPSBcIkFtYmlndW91c1wiLFxyXG4gICAgQW1iaWd1b3VzID0gXCJNb3ZlZFwiLFxyXG4gICAgTW92ZWRQZXJtYW5lbnRseSA9IFwiUmVkaXJlY3RcIixcclxuICAgIE1vdmVkID0gXCJSZWRpcmVjdE1ldGhvZFwiLFxyXG4gICAgRm91bmQgPSBcIk5vdE1vZGlmaWVkXCIsXHJcbiAgICBSZWRpcmVjdCA9IFwiVXNlUHJveHlcIixcclxuICAgIFNlZU90aGVyID0gXCJVbnVzZWRcIixcclxuICAgIFJlZGlyZWN0TWV0aG9kID0gXCJUZW1wb3JhcnlSZWRpcmVjdFwiLFxyXG4gICAgTm90TW9kaWZpZWQgPSBcIlBlcm1hbmVudFJlZGlyZWN0XCIsXHJcbiAgICBVc2VQcm94eSA9IFwiQmFkUmVxdWVzdFwiLFxyXG4gICAgVW51c2VkID0gXCJVbmF1dGhvcml6ZWRcIixcclxuICAgIFRlbXBvcmFyeVJlZGlyZWN0ID0gXCJQYXltZW50UmVxdWlyZWRcIixcclxuICAgIFJlZGlyZWN0S2VlcFZlcmIgPSBcIkZvcmJpZGRlblwiLFxyXG4gICAgUGVybWFuZW50UmVkaXJlY3QgPSBcIk5vdEZvdW5kXCIsXHJcbiAgICBCYWRSZXF1ZXN0ID0gXCJNZXRob2ROb3RBbGxvd2VkXCIsXHJcbiAgICBVbmF1dGhvcml6ZWQgPSBcIk5vdEFjY2VwdGFibGVcIixcclxuICAgIFBheW1lbnRSZXF1aXJlZCA9IFwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkXCIsXHJcbiAgICBGb3JiaWRkZW4gPSBcIlJlcXVlc3RUaW1lb3V0XCIsXHJcbiAgICBOb3RGb3VuZCA9IFwiQ29uZmxpY3RcIixcclxuICAgIE1ldGhvZE5vdEFsbG93ZWQgPSBcIkdvbmVcIixcclxuICAgIE5vdEFjY2VwdGFibGUgPSBcIkxlbmd0aFJlcXVpcmVkXCIsXHJcbiAgICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSBcIlByZWNvbmRpdGlvbkZhaWxlZFwiLFxyXG4gICAgUmVxdWVzdFRpbWVvdXQgPSBcIlJlcXVlc3RFbnRpdHlUb29MYXJnZVwiLFxyXG4gICAgQ29uZmxpY3QgPSBcIlJlcXVlc3RVcmlUb29Mb25nXCIsXHJcbiAgICBHb25lID0gXCJVbnN1cHBvcnRlZE1lZGlhVHlwZVwiLFxyXG4gICAgTGVuZ3RoUmVxdWlyZWQgPSBcIlJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVcIixcclxuICAgIFByZWNvbmRpdGlvbkZhaWxlZCA9IFwiRXhwZWN0YXRpb25GYWlsZWRcIixcclxuICAgIFJlcXVlc3RFbnRpdHlUb29MYXJnZSA9IFwiTWlzZGlyZWN0ZWRSZXF1ZXN0XCIsXHJcbiAgICBSZXF1ZXN0VXJpVG9vTG9uZyA9IFwiVW5wcm9jZXNzYWJsZUVudGl0eVwiLFxyXG4gICAgVW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSBcIkxvY2tlZFwiLFxyXG4gICAgUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IFwiRmFpbGVkRGVwZW5kZW5jeVwiLFxyXG4gICAgRXhwZWN0YXRpb25GYWlsZWQgPSBcIlVwZ3JhZGVSZXF1aXJlZFwiLFxyXG4gICAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gXCJQcmVjb25kaXRpb25SZXF1aXJlZFwiLFxyXG4gICAgVW5wcm9jZXNzYWJsZUVudGl0eSA9IFwiVG9vTWFueVJlcXVlc3RzXCIsXHJcbiAgICBMb2NrZWQgPSBcIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZVwiLFxyXG4gICAgRmFpbGVkRGVwZW5kZW5jeSA9IFwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnNcIixcclxuICAgIFVwZ3JhZGVSZXF1aXJlZCA9IFwiSW50ZXJuYWxTZXJ2ZXJFcnJvclwiLFxyXG4gICAgUHJlY29uZGl0aW9uUmVxdWlyZWQgPSBcIk5vdEltcGxlbWVudGVkXCIsXHJcbiAgICBUb29NYW55UmVxdWVzdHMgPSBcIkJhZEdhdGV3YXlcIixcclxuICAgIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IFwiU2VydmljZVVuYXZhaWxhYmxlXCIsXHJcbiAgICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyA9IFwiR2F0ZXdheVRpbWVvdXRcIixcclxuICAgIEludGVybmFsU2VydmVyRXJyb3IgPSBcIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkXCIsXHJcbiAgICBOb3RJbXBsZW1lbnRlZCA9IFwiVmFyaWFudEFsc29OZWdvdGlhdGVzXCIsXHJcbiAgICBCYWRHYXRld2F5ID0gXCJJbnN1ZmZpY2llbnRTdG9yYWdlXCIsXHJcbiAgICBTZXJ2aWNlVW5hdmFpbGFibGUgPSBcIkxvb3BEZXRlY3RlZFwiLFxyXG4gICAgR2F0ZXdheVRpbWVvdXQgPSBcIk5vdEV4dGVuZGVkXCIsXHJcbiAgICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCA9IFwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRcIixcclxufVxyXG5cclxuLyoqIFZhcmlvdXMgcmVhc29ucyBmb3IgYSBwcm90b2NvbCBlbmRwb2ludCBlcnJvciAqL1xyXG5leHBvcnQgZW51bSBSZXNwb25zZUVycm9yVHlwZSB7XHJcbiAgICBOb25lID0gXCJOb25lXCIsXHJcbiAgICBQcm90b2NvbCA9IFwiUHJvdG9jb2xcIixcclxuICAgIEh0dHAgPSBcIkh0dHBcIixcclxuICAgIEV4Y2VwdGlvbiA9IFwiRXhjZXB0aW9uXCIsXHJcbiAgICBQb2xpY3lWaW9sYXRpb24gPSBcIlBvbGljeVZpb2xhdGlvblwiLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuTG9naW5Qb3N0IHtcclxuICAgIGlkZW50aWZpZXI6IHN0cmluZztcclxuICAgIHBhc3N3b3JkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZWZyZXNoUG9zdCB7XHJcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcclxufVxyXG5cclxuLyoqIERhdGEgdHJhbnNmZXIgY2xhc3MgdG8gY29udmV5IGFwaSBlcnJvcnMgKi9cclxuZXhwb3J0IGludGVyZmFjZSBBcGlFcnJvciB7XHJcbiAgICAvKiogVGhpcyBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEgc2V0IG9mIGFsbCBlcnJvcnMgYW5kIHRoZWlyIG1lc3NhZ2VzICovXHJcbiAgICBlcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdOyB9IHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclBvc3Qge1xyXG4gICAgdXNlcm5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBwYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2VzPzogc3RyaW5nW10gfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdvdFBhc3N3b3JkUG9zdCB7XHJcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XHJcbiAgICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBzdHJpbmdbXSB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTd2FnZ2VyRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgc3RhdHVzOiBudW1iZXI7XHJcbiAgICByZXNwb25zZTogc3RyaW5nO1xyXG4gICAgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBhbnk7IH07XHJcbiAgICByZXN1bHQ6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCByZXNwb25zZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSwgcmVzdWx0OiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcclxuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpc1N3YWdnZXJFeGNlcHRpb24gPSB0cnVlO1xyXG5cclxuICAgIHN0YXRpYyBpc1N3YWdnZXJFeGNlcHRpb24ob2JqOiBhbnkpOiBvYmogaXMgU3dhZ2dlckV4Y2VwdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5pc1N3YWdnZXJFeGNlcHRpb24gPT09IHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZClcclxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXN1bHQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KG5ldyBTd2FnZ2VyRXhjZXB0aW9uKG1lc3NhZ2UsIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnMsIG51bGwpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWJsb2IpIHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKGV2ZW50LnRhcmdldCBhcyBhbnkpLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"dangl-angular-dangl-identity-client.mjs","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"Ambiguous\",\r\n Ambiguous = \"Moved\",\r\n MovedPermanently = \"Redirect\",\r\n Moved = \"RedirectMethod\",\r\n Found = \"NotModified\",\r\n Redirect = \"UseProxy\",\r\n SeeOther = \"Unused\",\r\n RedirectMethod = \"TemporaryRedirect\",\r\n NotModified = \"PermanentRedirect\",\r\n UseProxy = \"BadRequest\",\r\n Unused = \"Unauthorized\",\r\n TemporaryRedirect = \"PaymentRequired\",\r\n RedirectKeepVerb = \"Forbidden\",\r\n PermanentRedirect = \"NotFound\",\r\n BadRequest = \"MethodNotAllowed\",\r\n Unauthorized = \"NotAcceptable\",\r\n PaymentRequired = \"ProxyAuthenticationRequired\",\r\n Forbidden = \"RequestTimeout\",\r\n NotFound = \"Conflict\",\r\n MethodNotAllowed = \"Gone\",\r\n NotAcceptable = \"LengthRequired\",\r\n ProxyAuthenticationRequired = \"PreconditionFailed\",\r\n RequestTimeout = \"RequestEntityTooLarge\",\r\n Conflict = \"RequestUriTooLong\",\r\n Gone = \"UnsupportedMediaType\",\r\n LengthRequired = \"RequestedRangeNotSatisfiable\",\r\n PreconditionFailed = \"ExpectationFailed\",\r\n RequestEntityTooLarge = \"MisdirectedRequest\",\r\n RequestUriTooLong = \"UnprocessableEntity\",\r\n UnsupportedMediaType = \"Locked\",\r\n RequestedRangeNotSatisfiable = \"FailedDependency\",\r\n ExpectationFailed = \"UpgradeRequired\",\r\n MisdirectedRequest = \"PreconditionRequired\",\r\n UnprocessableEntity = \"TooManyRequests\",\r\n Locked = \"RequestHeaderFieldsTooLarge\",\r\n FailedDependency = \"UnavailableForLegalReasons\",\r\n UpgradeRequired = \"InternalServerError\",\r\n PreconditionRequired = \"NotImplemented\",\r\n TooManyRequests = \"BadGateway\",\r\n RequestHeaderFieldsTooLarge = \"ServiceUnavailable\",\r\n UnavailableForLegalReasons = \"GatewayTimeout\",\r\n InternalServerError = \"HttpVersionNotSupported\",\r\n NotImplemented = \"VariantAlsoNegotiates\",\r\n BadGateway = \"InsufficientStorage\",\r\n ServiceUnavailable = \"LoopDetected\",\r\n GatewayTimeout = \"NotExtended\",\r\n HttpVersionNotSupported = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { DanglIdentityClient, TokenResponseGet } from \"../api-client\";\r\nimport { JwtStorage } from \"../models/jwt-storage\";\r\nimport { Subject, Observable, of, ReplaySubject } from \"rxjs\";\r\nimport { map, catchError, tap, first } from \"rxjs/operators\";\r\nimport { AuthenticationMessenger } from \"../messengers/authentication.messenger\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JwtTokenService {\r\n private readonly storage_identifier = \"dangl_identity_integration_jwt_token\";\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next();\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r))\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n \"Internal error while refreshing Dangl.Identity token\",\r\n error\r\n );\r\n }\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from \"@angular/common/http\";\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from \"@angular/core\";\r\nimport { JwtTokenService } from \"../services/jwt-token.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { mergeMap } from \"rxjs/operators\";\r\nimport { IDanglIdentityRequestValidator } from \"./dangl-identity-request-validator\";\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n \"Validator to decide whether to include JWT tokens in requests\"\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith(\"/identity\")) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))\r\n )\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule\r\n ],\r\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptorService, multi: true }]\r\n})\r\nexport class DanglIdentityModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService) { }\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password\r\n })\r\n .pipe(map(r => this.storeJwtTokenIfValid(r)),\r\n catchError(e => of(false)));\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken\r\n || !token.refreshToken\r\n || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationMessenger {\r\n\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n\r\n constructor(private jwtTokenService: JwtTokenService) {\r\n jwtTokenService.tokenRefreshStarted.subscribe(() => this.tokenRefreshStarted.next());\r\n jwtTokenService.tokenRefreshFinished.subscribe(successfulRefresh => this.tokenRefreshFinished.next(successfulRefresh));\r\n jwtTokenService.tokenStored.subscribe(jwtToken => this.refreshAuthenticationStatus(jwtToken));\r\n jwtTokenService.getToken()\r\n .subscribe(token => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > (new Date().getTime() / 1000);\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n const decodedToken = this.jwtHelperService.decodeToken(jwtToken.accessToken);\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n tokenClaims[tokenProp] = property;\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role']\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService\r\n .refreshToken()\r\n .subscribe(() => { });\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models/jwt-storage\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf","i1.DanglIdentityClient","i2.JwtTokenService","i1.JwtTokenService"],"mappings":"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"}
1
+ {"version":3,"file":"dangl-angular-dangl-identity-client.mjs","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"Ambiguous\",\r\n Ambiguous = \"Moved\",\r\n MovedPermanently = \"Redirect\",\r\n Moved = \"RedirectMethod\",\r\n Found = \"NotModified\",\r\n Redirect = \"UseProxy\",\r\n SeeOther = \"Unused\",\r\n RedirectMethod = \"TemporaryRedirect\",\r\n NotModified = \"PermanentRedirect\",\r\n UseProxy = \"BadRequest\",\r\n Unused = \"Unauthorized\",\r\n TemporaryRedirect = \"PaymentRequired\",\r\n RedirectKeepVerb = \"Forbidden\",\r\n PermanentRedirect = \"NotFound\",\r\n BadRequest = \"MethodNotAllowed\",\r\n Unauthorized = \"NotAcceptable\",\r\n PaymentRequired = \"ProxyAuthenticationRequired\",\r\n Forbidden = \"RequestTimeout\",\r\n NotFound = \"Conflict\",\r\n MethodNotAllowed = \"Gone\",\r\n NotAcceptable = \"LengthRequired\",\r\n ProxyAuthenticationRequired = \"PreconditionFailed\",\r\n RequestTimeout = \"RequestEntityTooLarge\",\r\n Conflict = \"RequestUriTooLong\",\r\n Gone = \"UnsupportedMediaType\",\r\n LengthRequired = \"RequestedRangeNotSatisfiable\",\r\n PreconditionFailed = \"ExpectationFailed\",\r\n RequestEntityTooLarge = \"MisdirectedRequest\",\r\n RequestUriTooLong = \"UnprocessableEntity\",\r\n UnsupportedMediaType = \"Locked\",\r\n RequestedRangeNotSatisfiable = \"FailedDependency\",\r\n ExpectationFailed = \"UpgradeRequired\",\r\n MisdirectedRequest = \"PreconditionRequired\",\r\n UnprocessableEntity = \"TooManyRequests\",\r\n Locked = \"RequestHeaderFieldsTooLarge\",\r\n FailedDependency = \"UnavailableForLegalReasons\",\r\n UpgradeRequired = \"InternalServerError\",\r\n PreconditionRequired = \"NotImplemented\",\r\n TooManyRequests = \"BadGateway\",\r\n RequestHeaderFieldsTooLarge = \"ServiceUnavailable\",\r\n UnavailableForLegalReasons = \"GatewayTimeout\",\r\n InternalServerError = \"HttpVersionNotSupported\",\r\n NotImplemented = \"VariantAlsoNegotiates\",\r\n BadGateway = \"InsufficientStorage\",\r\n ServiceUnavailable = \"LoopDetected\",\r\n GatewayTimeout = \"NotExtended\",\r\n HttpVersionNotSupported = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { DanglIdentityClient, TokenResponseGet } from \"../api-client\";\r\nimport { JwtStorage } from \"../models/jwt-storage\";\r\nimport { Subject, Observable, of, ReplaySubject } from \"rxjs\";\r\nimport { map, catchError, tap, first } from \"rxjs/operators\";\r\nimport { AuthenticationMessenger } from \"../messengers/authentication.messenger\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JwtTokenService {\r\n private readonly storage_identifier = \"dangl_identity_integration_jwt_token\";\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next();\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r))\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n \"Internal error while refreshing Dangl.Identity token\",\r\n error\r\n );\r\n }\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from \"@angular/common/http\";\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from \"@angular/core\";\r\nimport { JwtTokenService } from \"../services/jwt-token.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { mergeMap } from \"rxjs/operators\";\r\nimport { IDanglIdentityRequestValidator } from \"./dangl-identity-request-validator\";\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n \"Validator to decide whether to include JWT tokens in requests\"\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith(\"/identity\")) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))\r\n )\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule\r\n ],\r\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptorService, multi: true }]\r\n})\r\nexport class DanglIdentityModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService) { }\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password\r\n })\r\n .pipe(map(r => this.storeJwtTokenIfValid(r)),\r\n catchError(e => of(false)));\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken\r\n || !token.refreshToken\r\n || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationMessenger {\r\n\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n\r\n constructor(private jwtTokenService: JwtTokenService) {\r\n jwtTokenService.tokenRefreshStarted.subscribe(() => this.tokenRefreshStarted.next());\r\n jwtTokenService.tokenRefreshFinished.subscribe(successfulRefresh => this.tokenRefreshFinished.next(successfulRefresh));\r\n jwtTokenService.tokenStored.subscribe(jwtToken => this.refreshAuthenticationStatus(jwtToken));\r\n jwtTokenService.getToken()\r\n .subscribe(token => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > (new Date().getTime() / 1000);\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n const decodedToken = this.jwtHelperService.decodeToken(jwtToken.accessToken);\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n tokenClaims[tokenProp] = property;\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role']\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService\r\n .refreshToken()\r\n .subscribe(() => { });\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models/jwt-storage\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf","i1.DanglIdentityClient","i2.JwtTokenService","i1.JwtTokenService"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dangl-angular-dangl-identity-client.mjs","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"Ambiguous\",\r\n Ambiguous = \"Moved\",\r\n MovedPermanently = \"Redirect\",\r\n Moved = \"RedirectMethod\",\r\n Found = \"NotModified\",\r\n Redirect = \"UseProxy\",\r\n SeeOther = \"Unused\",\r\n RedirectMethod = \"TemporaryRedirect\",\r\n NotModified = \"PermanentRedirect\",\r\n UseProxy = \"BadRequest\",\r\n Unused = \"Unauthorized\",\r\n TemporaryRedirect = \"PaymentRequired\",\r\n RedirectKeepVerb = \"Forbidden\",\r\n PermanentRedirect = \"NotFound\",\r\n BadRequest = \"MethodNotAllowed\",\r\n Unauthorized = \"NotAcceptable\",\r\n PaymentRequired = \"ProxyAuthenticationRequired\",\r\n Forbidden = \"RequestTimeout\",\r\n NotFound = \"Conflict\",\r\n MethodNotAllowed = \"Gone\",\r\n NotAcceptable = \"LengthRequired\",\r\n ProxyAuthenticationRequired = \"PreconditionFailed\",\r\n RequestTimeout = \"RequestEntityTooLarge\",\r\n Conflict = \"RequestUriTooLong\",\r\n Gone = \"UnsupportedMediaType\",\r\n LengthRequired = \"RequestedRangeNotSatisfiable\",\r\n PreconditionFailed = \"ExpectationFailed\",\r\n RequestEntityTooLarge = \"MisdirectedRequest\",\r\n RequestUriTooLong = \"UnprocessableEntity\",\r\n UnsupportedMediaType = \"Locked\",\r\n RequestedRangeNotSatisfiable = \"FailedDependency\",\r\n ExpectationFailed = \"UpgradeRequired\",\r\n MisdirectedRequest = \"PreconditionRequired\",\r\n UnprocessableEntity = \"TooManyRequests\",\r\n Locked = \"RequestHeaderFieldsTooLarge\",\r\n FailedDependency = \"UnavailableForLegalReasons\",\r\n UpgradeRequired = \"InternalServerError\",\r\n PreconditionRequired = \"NotImplemented\",\r\n TooManyRequests = \"BadGateway\",\r\n RequestHeaderFieldsTooLarge = \"ServiceUnavailable\",\r\n UnavailableForLegalReasons = \"GatewayTimeout\",\r\n InternalServerError = \"HttpVersionNotSupported\",\r\n NotImplemented = \"VariantAlsoNegotiates\",\r\n BadGateway = \"InsufficientStorage\",\r\n ServiceUnavailable = \"LoopDetected\",\r\n GatewayTimeout = \"NotExtended\",\r\n HttpVersionNotSupported = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { DanglIdentityClient, TokenResponseGet } from \"../api-client\";\r\nimport { JwtStorage } from \"../models/jwt-storage\";\r\nimport { Subject, Observable, of, ReplaySubject } from \"rxjs\";\r\nimport { map, catchError, tap, first } from \"rxjs/operators\";\r\nimport { AuthenticationMessenger } from \"../messengers/authentication.messenger\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JwtTokenService {\r\n private readonly storage_identifier = \"dangl_identity_integration_jwt_token\";\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next();\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r))\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n \"Internal error while refreshing Dangl.Identity token\",\r\n error\r\n );\r\n }\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from \"@angular/common/http\";\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from \"@angular/core\";\r\nimport { JwtTokenService } from \"../services/jwt-token.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { mergeMap } from \"rxjs/operators\";\r\nimport { IDanglIdentityRequestValidator } from \"./dangl-identity-request-validator\";\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n \"Validator to decide whether to include JWT tokens in requests\"\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith(\"/identity\")) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))\r\n )\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule\r\n ],\r\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptorService, multi: true }]\r\n})\r\nexport class DanglIdentityModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService) { }\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password\r\n })\r\n .pipe(map(r => this.storeJwtTokenIfValid(r)),\r\n catchError(e => of(false)));\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken\r\n || !token.refreshToken\r\n || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationMessenger {\r\n\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n\r\n constructor(private jwtTokenService: JwtTokenService) {\r\n jwtTokenService.tokenRefreshStarted.subscribe(() => this.tokenRefreshStarted.next());\r\n jwtTokenService.tokenRefreshFinished.subscribe(successfulRefresh => this.tokenRefreshFinished.next(successfulRefresh));\r\n jwtTokenService.tokenStored.subscribe(jwtToken => this.refreshAuthenticationStatus(jwtToken));\r\n jwtTokenService.getToken()\r\n .subscribe(token => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > (new Date().getTime() / 1000);\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n const decodedToken = this.jwtHelperService.decodeToken(jwtToken.accessToken);\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n tokenClaims[tokenProp] = property;\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role']\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService\r\n .refreshToken()\r\n .subscribe(() => { });\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models/jwt-storage\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf","i1.DanglIdentityClient","i2.JwtTokenService","i1.JwtTokenService"],"mappings":"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"}
1
+ {"version":3,"file":"dangl-angular-dangl-identity-client.mjs","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<TokenResponseGet>(null as any);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return _observableOf<void>(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf<void>(null as any);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"Ambiguous\",\r\n Ambiguous = \"Moved\",\r\n MovedPermanently = \"Redirect\",\r\n Moved = \"RedirectMethod\",\r\n Found = \"NotModified\",\r\n Redirect = \"UseProxy\",\r\n SeeOther = \"Unused\",\r\n RedirectMethod = \"TemporaryRedirect\",\r\n NotModified = \"PermanentRedirect\",\r\n UseProxy = \"BadRequest\",\r\n Unused = \"Unauthorized\",\r\n TemporaryRedirect = \"PaymentRequired\",\r\n RedirectKeepVerb = \"Forbidden\",\r\n PermanentRedirect = \"NotFound\",\r\n BadRequest = \"MethodNotAllowed\",\r\n Unauthorized = \"NotAcceptable\",\r\n PaymentRequired = \"ProxyAuthenticationRequired\",\r\n Forbidden = \"RequestTimeout\",\r\n NotFound = \"Conflict\",\r\n MethodNotAllowed = \"Gone\",\r\n NotAcceptable = \"LengthRequired\",\r\n ProxyAuthenticationRequired = \"PreconditionFailed\",\r\n RequestTimeout = \"RequestEntityTooLarge\",\r\n Conflict = \"RequestUriTooLong\",\r\n Gone = \"UnsupportedMediaType\",\r\n LengthRequired = \"RequestedRangeNotSatisfiable\",\r\n PreconditionFailed = \"ExpectationFailed\",\r\n RequestEntityTooLarge = \"MisdirectedRequest\",\r\n RequestUriTooLong = \"UnprocessableEntity\",\r\n UnsupportedMediaType = \"Locked\",\r\n RequestedRangeNotSatisfiable = \"FailedDependency\",\r\n ExpectationFailed = \"UpgradeRequired\",\r\n MisdirectedRequest = \"PreconditionRequired\",\r\n UnprocessableEntity = \"TooManyRequests\",\r\n Locked = \"RequestHeaderFieldsTooLarge\",\r\n FailedDependency = \"UnavailableForLegalReasons\",\r\n UpgradeRequired = \"InternalServerError\",\r\n PreconditionRequired = \"NotImplemented\",\r\n TooManyRequests = \"BadGateway\",\r\n RequestHeaderFieldsTooLarge = \"ServiceUnavailable\",\r\n UnavailableForLegalReasons = \"GatewayTimeout\",\r\n InternalServerError = \"HttpVersionNotSupported\",\r\n NotImplemented = \"VariantAlsoNegotiates\",\r\n BadGateway = \"InsufficientStorage\",\r\n ServiceUnavailable = \"LoopDetected\",\r\n GatewayTimeout = \"NotExtended\",\r\n HttpVersionNotSupported = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { DanglIdentityClient, TokenResponseGet } from \"../api-client\";\r\nimport { JwtStorage } from \"../models/jwt-storage\";\r\nimport { Subject, Observable, of, ReplaySubject } from \"rxjs\";\r\nimport { map, catchError, tap, first } from \"rxjs/operators\";\r\nimport { AuthenticationMessenger } from \"../messengers/authentication.messenger\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class JwtTokenService {\r\n private readonly storage_identifier = \"dangl_identity_integration_jwt_token\";\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next();\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r))\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n \"Internal error while refreshing Dangl.Identity token\",\r\n error\r\n );\r\n }\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from \"@angular/common/http\";\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from \"@angular/core\";\r\nimport { JwtTokenService } from \"../services/jwt-token.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { mergeMap } from \"rxjs/operators\";\r\nimport { IDanglIdentityRequestValidator } from \"./dangl-identity-request-validator\";\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n \"Validator to decide whether to include JWT tokens in requests\"\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith(\"/identity\")) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))\r\n )\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule\r\n ],\r\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptorService, multi: true }]\r\n})\r\nexport class DanglIdentityModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService) { }\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password\r\n })\r\n .pipe(map(r => this.storeJwtTokenIfValid(r)),\r\n catchError(e => of(false)));\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken\r\n || !token.refreshToken\r\n || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject, Subject } from 'rxjs';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationMessenger {\r\n\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n\r\n constructor(private jwtTokenService: JwtTokenService) {\r\n jwtTokenService.tokenRefreshStarted.subscribe(() => this.tokenRefreshStarted.next());\r\n jwtTokenService.tokenRefreshFinished.subscribe(successfulRefresh => this.tokenRefreshFinished.next(successfulRefresh));\r\n jwtTokenService.tokenStored.subscribe(jwtToken => this.refreshAuthenticationStatus(jwtToken));\r\n jwtTokenService.getToken()\r\n .subscribe(token => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > (new Date().getTime() / 1000);\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n const decodedToken = this.jwtHelperService.decodeToken(jwtToken.accessToken);\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n tokenClaims[tokenProp] = property;\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role']\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService\r\n .refreshToken()\r\n .subscribe(() => { });\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models/jwt-storage\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf","i1.DanglIdentityClient","i2.JwtTokenService","i1.JwtTokenService"],"mappings":";;;;;;;;AAAA;MAea,kCAAkC,GAAG,IAAI,cAAc,CAAS,oCAAoC,EAAE;MAKtG,mBAAmB,CAAA;IAK5B,WAAgC,CAAA,IAAgB,EAA0D,OAAgB,EAAA;QAFhH,IAAgB,CAAA,gBAAA,GAAmD,SAAS,CAAC;AAGnF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;KAC3E;IAED,eAAe,CAAC,KAAgB,EAAE,WAAsC,EAAA;AACpE,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC;AAC7C,QAAA,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI;YACjD,IAAI,IAAI,cAAc,GAAG,kBAAkB,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;QACxE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEvC,QAAA,IAAI,QAAQ,GAAS;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,IAAI,WAAW,CAAC;AACrB,gBAAA,cAAc,EAAE,kBAAkB;aACrC,CAAC;SACL,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,CAAC,SAAe,KAAI;AAC1F,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;SACjD,CAAC,CAAC,CAAC,IAAI,CAACC,UAAgB,CAAC,CAAC,SAAc,KAAI;YACzC,IAAI,SAAS,YAAY,gBAAgB,EAAE;gBACvC,IAAI;AACA,oBAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAgB,CAAC,CAAC;AACxD,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACR,oBAAA,OAAOC,UAAgB,CAAC,CAAC,CAA4B,CAAC;AACzD,iBAAA;AACJ,aAAA;;AACG,gBAAA,OAAOA,UAAgB,CAAC,SAAS,CAA4B,CAAC;SACrE,CAAC,CAAC,CAAC;KACP;AAES,IAAA,sBAAsB,CAAC,QAA0B,EAAA;AACvD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,MAAM,YAAY,GACd,QAAQ,YAAY,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/C,YAAA,QAAgB,CAAC,KAAK,YAAY,IAAI,GAAI,QAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAElF,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAAC,SAAA;QACxI,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACF,QAAmB,CAAC,aAAa,IAAG;AACzE,gBAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;aACvC,CAAC,CAAC,CAAC;AACP,SAAA;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE;YACvB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,+BAA+B,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aACvF,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YACzC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,sCAAsC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC9F,CAAC,CAAC,CAAC;AACP,SAAA;AACD,QAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;KAC3C;IAED,wBAAwB,GAAA;AACpB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC;QAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAEjC,QAAA,IAAI,QAAQ,GAAS;AACjB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,OAAO,EAAE,IAAI,WAAW,CAAC,EACxB,CAAC;SACL,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,CAAC,SAAe,KAAI;AAC5F,YAAA,OAAO,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;SAC1D,CAAC,CAAC,CAAC,IAAI,CAACC,UAAgB,CAAC,CAAC,SAAc,KAAI;YACzC,IAAI,SAAS,YAAY,gBAAgB,EAAE;gBACvC,IAAI;AACA,oBAAA,OAAO,IAAI,CAAC,+BAA+B,CAAC,SAAgB,CAAC,CAAC;AACjE,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACR,oBAAA,OAAOC,UAAgB,CAAC,CAAC,CAA4B,CAAC;AACzD,iBAAA;AACJ,aAAA;;AACG,gBAAA,OAAOA,UAAgB,CAAC,SAAS,CAA4B,CAAC;SACrE,CAAC,CAAC,CAAC;KACP;AAES,IAAA,+BAA+B,CAAC,QAA0B,EAAA;AAChE,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,MAAM,YAAY,GACd,QAAQ,YAAY,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/C,YAAA,QAAgB,CAAC,KAAK,YAAY,IAAI,GAAI,QAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAElF,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAAC,SAAA;QACxI,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACF,QAAmB,CAAC,aAAa,IAAG;AACzE,gBAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;aACvC,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YACzC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,sCAAsC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC9F,CAAC,CAAC,CAAC;AACP,SAAA;AACD,QAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;KAC3C;AAED,IAAA,mBAAmB,CAAC,KAAqB,EAAA;AACrC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC;QAClD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEvC,QAAA,IAAI,QAAQ,GAAS;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,IAAI,WAAW,CAAC;AACrB,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,QAAQ,EAAE,kBAAkB;aAC/B,CAAC;SACL,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,CAAC,SAAe,KAAI;AAC1F,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;SACrD,CAAC,CAAC,CAAC,IAAI,CAACC,UAAgB,CAAC,CAAC,SAAc,KAAI;YACzC,IAAI,SAAS,YAAY,gBAAgB,EAAE;gBACvC,IAAI;AACA,oBAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,SAAgB,CAAC,CAAC;AAC5D,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACR,oBAAA,OAAOC,UAAgB,CAAC,CAAC,CAAwC,CAAC;AACrE,iBAAA;AACJ,aAAA;;AACG,gBAAA,OAAOA,UAAgB,CAAC,SAAS,CAAwC,CAAC;SACjF,CAAC,CAAC,CAAC;KACP;AAES,IAAA,0BAA0B,CAAC,QAA0B,EAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,MAAM,YAAY,GACd,QAAQ,YAAY,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/C,YAAA,QAAgB,CAAC,KAAK,YAAY,IAAI,GAAI,QAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAElF,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAAC,SAAA;QACxI,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACF,QAAmB,CAAC,aAAa,IAAG;gBACzE,IAAI,SAAS,GAAQ,IAAI,CAAC;gBAC1B,SAAS,GAAG,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAqB,CAAC;AAC/G,gBAAA,OAAOG,EAAa,CAAC,SAAS,CAAC,CAAC;aAC/B,CAAC,CAAC,CAAC;AACP,SAAA;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE;YACvB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,aAAa,IAAG;gBACzE,IAAI,SAAS,GAAQ,IAAI,CAAC;gBAC1B,SAAS,GAAG,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAqB,CAAC;AAC/G,gBAAA,OAAO,cAAc,CAAC,+BAA+B,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aAClG,CAAC,CAAC,CAAC;AACP,SAAA;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE;YACvB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,+BAA+B,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aACvF,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YACzC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,sCAAsC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC9F,CAAC,CAAC,CAAC;AACP,SAAA;AACD,QAAA,OAAOG,EAAa,CAAmB,IAAW,CAAC,CAAC;KACvD;AAED,IAAA,YAAY,CAAC,KAAuB,EAAA;AAChC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,yBAAyB,CAAC;QACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEvC,QAAA,IAAI,QAAQ,GAAS;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,IAAI,WAAW,CAAC;AACrB,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,QAAQ,EAAE,kBAAkB;aAC/B,CAAC;SACL,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,CAAC,SAAe,KAAI;AAC1F,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;SAC9C,CAAC,CAAC,CAAC,IAAI,CAACC,UAAgB,CAAC,CAAC,SAAc,KAAI;YACzC,IAAI,SAAS,YAAY,gBAAgB,EAAE;gBACvC,IAAI;AACA,oBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAgB,CAAC,CAAC;AACrD,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACR,oBAAA,OAAOC,UAAgB,CAAC,CAAC,CAAwC,CAAC;AACrE,iBAAA;AACJ,aAAA;;AACG,gBAAA,OAAOA,UAAgB,CAAC,SAAS,CAAwC,CAAC;SACjF,CAAC,CAAC,CAAC;KACP;AAES,IAAA,mBAAmB,CAAC,QAA0B,EAAA;AACpD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,MAAM,YAAY,GACd,QAAQ,YAAY,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/C,YAAA,QAAgB,CAAC,KAAK,YAAY,IAAI,GAAI,QAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAElF,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAAC,SAAA;QACxI,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACF,QAAmB,CAAC,aAAa,IAAG;gBACzE,IAAI,SAAS,GAAQ,IAAI,CAAC;gBAC1B,SAAS,GAAG,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAqB,CAAC;AAC/G,gBAAA,OAAOG,EAAa,CAAC,SAAS,CAAC,CAAC;aAC/B,CAAC,CAAC,CAAC;AACP,SAAA;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE;YACvB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,aAAa,IAAG;gBACzE,IAAI,SAAS,GAAQ,IAAI,CAAC;gBAC1B,SAAS,GAAG,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAqB,CAAC;AAC/G,gBAAA,OAAO,cAAc,CAAC,+BAA+B,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aAClG,CAAC,CAAC,CAAC;AACP,SAAA;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE;YACvB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,+BAA+B,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aACvF,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YACzC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,sCAAsC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC9F,CAAC,CAAC,CAAC;AACP,SAAA;AACD,QAAA,OAAOG,EAAa,CAAmB,IAAW,CAAC,CAAC;KACvD;AAED,IAAA,QAAQ,CAAC,aAA2B,EAAA;AAChC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC;QAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AAE/C,QAAA,IAAI,QAAQ,GAAS;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,IAAI,WAAW,CAAC;AACrB,gBAAA,cAAc,EAAE,kBAAkB;aACrC,CAAC;SACL,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,CAAC,SAAe,KAAI;AAC1F,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;SAC1C,CAAC,CAAC,CAAC,IAAI,CAACC,UAAgB,CAAC,CAAC,SAAc,KAAI;YACzC,IAAI,SAAS,YAAY,gBAAgB,EAAE;gBACvC,IAAI;AACA,oBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAgB,CAAC,CAAC;AACjD,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACR,oBAAA,OAAOC,UAAgB,CAAC,CAAC,CAA4B,CAAC;AACzD,iBAAA;AACJ,aAAA;;AACG,gBAAA,OAAOA,UAAgB,CAAC,SAAS,CAA4B,CAAC;SACrE,CAAC,CAAC,CAAC;KACP;AAES,IAAA,eAAe,CAAC,QAA0B,EAAA;AAChD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,MAAM,YAAY,GACd,QAAQ,YAAY,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/C,YAAA,QAAgB,CAAC,KAAK,YAAY,IAAI,GAAI,QAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAElF,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAAC,SAAA;QACxI,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACF,QAAmB,CAAC,aAAa,IAAG;AACzE,gBAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;aACvC,CAAC,CAAC,CAAC;AACP,SAAA;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE;YACvB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,aAAa,IAAG;gBACzE,IAAI,SAAS,GAAQ,IAAI,CAAC;gBAC1B,SAAS,GAAG,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAa,CAAC;AACvG,gBAAA,OAAO,cAAc,CAAC,+BAA+B,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aAClG,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YACzC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACA,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,sCAAsC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC9F,CAAC,CAAC,CAAC;AACP,SAAA;AACD,QAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;KAC3C;AAED,IAAA,oBAAoB,CAAC,mBAAuC,EAAA;AACxD,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC;QACzD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAErD,QAAA,IAAI,QAAQ,GAAS;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,IAAI,WAAW,CAAC;AACrB,gBAAA,cAAc,EAAE,kBAAkB;aACrC,CAAC;SACL,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,CAAC,SAAe,KAAI;AAC1F,YAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;SACtD,CAAC,CAAC,CAAC,IAAI,CAACC,UAAgB,CAAC,CAAC,SAAc,KAAI;YACzC,IAAI,SAAS,YAAY,gBAAgB,EAAE;gBACvC,IAAI;AACA,oBAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,SAAgB,CAAC,CAAC;AAC7D,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACR,oBAAA,OAAOC,UAAgB,CAAC,CAAC,CAA4B,CAAC;AACzD,iBAAA;AACJ,aAAA;;AACG,gBAAA,OAAOA,UAAgB,CAAC,SAAS,CAA4B,CAAC;SACrE,CAAC,CAAC,CAAC;KACP;AAES,IAAA,2BAA2B,CAAC,QAA0B,EAAA;AAC5D,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,MAAM,YAAY,GACd,QAAQ,YAAY,YAAY,GAAG,QAAQ,CAAC,IAAI;AAC/C,YAAA,QAAgB,CAAC,KAAK,YAAY,IAAI,GAAI,QAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAElF,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAAC,SAAA;QACxI,IAAI,MAAM,KAAK,GAAG,EAAE;YAChB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACF,QAAmB,CAAC,aAAa,IAAG;AACzE,gBAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;aACvC,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;YACzC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAACH,QAAmB,CAAC,aAAa,IAAG;gBACzE,OAAO,cAAc,CAAC,sCAAsC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;aAC9F,CAAC,CAAC,CAAC;AACP,SAAA;AACD,QAAA,OAAOG,EAAa,CAAO,IAAW,CAAC,CAAC;KAC3C;;gHA1UQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAKR,UAAU,EAAA,EAAA,EAAA,KAAA,EAAwC,kCAAkC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAL/F,mBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;2FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;0BAMgB,MAAM;2BAAC,UAAU,CAAA;;0BAAqB,QAAQ;;0BAAI,MAAM;2BAAC,kCAAkC,CAAA;;IA4VhG,eA8DX;AA9DD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC,CAAA;AACzC,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,cAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,6BAAA,CAAA,GAAA,6BAA2D,CAAA;AAC3D,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,WAA6B,CAAA;AAC7B,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,OAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,kBAAA,CAAA,GAAA,UAA6B,CAAA;AAC7B,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,gBAAwB,CAAA;AACxB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,aAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,mBAAoC,CAAA;AACpC,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,mBAAiC,CAAA;AACjC,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,YAAuB,CAAA;AACvB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,cAAuB,CAAA;AACvB,IAAA,cAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC,CAAA;AACrC,IAAA,cAAA,CAAA,kBAAA,CAAA,GAAA,WAA8B,CAAA;AAC9B,IAAA,cAAA,CAAA,mBAAA,CAAA,GAAA,UAA8B,CAAA;AAC9B,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,kBAA+B,CAAA;AAC/B,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,eAA8B,CAAA;AAC9B,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,6BAA+C,CAAA;AAC/C,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,gBAA4B,CAAA;AAC5B,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,kBAAA,CAAA,GAAA,MAAyB,CAAA;AACzB,IAAA,cAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC,CAAA;AAChC,IAAA,cAAA,CAAA,6BAAA,CAAA,GAAA,oBAAkD,CAAA;AAClD,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,uBAAwC,CAAA;AACxC,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,mBAA8B,CAAA;AAC9B,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,sBAA6B,CAAA;AAC7B,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,8BAA+C,CAAA;AAC/C,IAAA,cAAA,CAAA,oBAAA,CAAA,GAAA,mBAAwC,CAAA;AACxC,IAAA,cAAA,CAAA,uBAAA,CAAA,GAAA,oBAA4C,CAAA;AAC5C,IAAA,cAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC,CAAA;AACzC,IAAA,cAAA,CAAA,sBAAA,CAAA,GAAA,QAA+B,CAAA;AAC/B,IAAA,cAAA,CAAA,8BAAA,CAAA,GAAA,kBAAiD,CAAA;AACjD,IAAA,cAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC,CAAA;AACrC,IAAA,cAAA,CAAA,oBAAA,CAAA,GAAA,sBAA2C,CAAA;AAC3C,IAAA,cAAA,CAAA,qBAAA,CAAA,GAAA,iBAAuC,CAAA;AACvC,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,6BAAsC,CAAA;AACtC,IAAA,cAAA,CAAA,kBAAA,CAAA,GAAA,4BAA+C,CAAA;AAC/C,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,qBAAuC,CAAA;AACvC,IAAA,cAAA,CAAA,sBAAA,CAAA,GAAA,gBAAuC,CAAA;AACvC,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,YAA8B,CAAA;AAC9B,IAAA,cAAA,CAAA,6BAAA,CAAA,GAAA,oBAAkD,CAAA;AAClD,IAAA,cAAA,CAAA,4BAAA,CAAA,GAAA,gBAA6C,CAAA;AAC7C,IAAA,cAAA,CAAA,qBAAA,CAAA,GAAA,yBAA+C,CAAA;AAC/C,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,uBAAwC,CAAA;AACxC,IAAA,cAAA,CAAA,YAAA,CAAA,GAAA,qBAAkC,CAAA;AAClC,IAAA,cAAA,CAAA,oBAAA,CAAA,GAAA,cAAmC,CAAA;AACnC,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,aAA8B,CAAA;AAC9B,IAAA,cAAA,CAAA,yBAAA,CAAA,GAAA,+BAAyD,CAAA;AAC7D,CAAC,EA9DW,cAAc,KAAd,cAAc,GA8DzB,EAAA,CAAA,CAAA,CAAA;AAED;IACY,kBAMX;AAND,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACvC,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,GAM5B,EAAA,CAAA,CAAA,CAAA;AA6BK,MAAO,gBAAiB,SAAQ,KAAK,CAAA;IAOvC,WAAY,CAAA,OAAe,EAAE,MAAc,EAAE,QAAgB,EAAE,OAAgC,EAAE,MAAW,EAAA;AACxG,QAAA,KAAK,EAAE,CAAC;QASF,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;AAPhC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACxB;IAID,OAAO,kBAAkB,CAAC,GAAQ,EAAA;AAC9B,QAAA,OAAO,GAAG,CAAC,kBAAkB,KAAK,IAAI,CAAC;KAC1C;AACJ,CAAA;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB,EAAE,OAAgC,EAAE,MAAY,EAAA;AACrH,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AACvC,QAAA,OAAOD,UAAgB,CAAC,MAAM,CAAC,CAAC;;AAEhC,QAAA,OAAOA,UAAgB,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,UAAU,CAAC,IAAS,EAAA;AACzB,IAAA,OAAO,IAAI,UAAU,CAAS,CAAC,QAAa,KAAI;QAC5C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACvB,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAC9B,YAAA,MAAM,CAAC,MAAM,GAAG,KAAK,IAAG;gBACpB,QAAQ,CAAC,IAAI,CAAE,KAAK,CAAC,MAAc,CAAC,MAAM,CAAC,CAAC;gBAC5C,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACxB,aAAC,CAAC;AACF,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3B,SAAA;AACL,KAAC,CAAC,CAAC;AACP;;MC5fa,eAAe,CAAA;AAW1B,IAAA,WAAA,CAAoB,mBAAwC,EAAA;QAAxC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QAV3C,IAAkB,CAAA,kBAAA,GAAG,sCAAsC,CAAC;QACrE,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AACrB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAc,CAAC;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,OAAO,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,OAAO,EAAW,CAAC;AAC5D,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,CAAC;KAEN;IAEhE,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;AAED,IAAA,gBAAgB,CAAC,YAAwB,EAAA;AACvC,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC3C;AAED,IAAA,UAAU,CAAC,KAAuB,EAAA;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACxD,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC3C;IAED,mBAAmB,GAAA;QACjB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACnE,QAAA,IAAI,YAAY,EAAE;YAChB,MAAM,WAAW,GAAe,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACzD,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9C,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC;QAE7D,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,OAAO,EAAE,CAAa,IAAI,CAAC,CAAC;AAC7B,SAAA;AAED,QAAA,IAAI,CAAC,mBAAmB;AACrB,aAAA,YAAY,CAAC;AACZ,YAAA,YAAY,EAAE,YAAY;SAC3B,CAAC;AACD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAC9B,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAC3C;AACA,aAAA,SAAS,CACR,CAAC,oBAAoB,KAAI;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACrD,SAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,YAAA,OAAO,CAAC,KAAK,CACX,sDAAsD,EACtD,KAAK,CACN,CAAC;AACJ,SAAC,CACF,CAAC;QAEJ,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAC9C;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE,CAAa,IAAI,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACnE,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC5B;AAEO,IAAA,sBAAsB,CAAC,KAAuB,EAAA;QACpD,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;AAChC,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,SAAS;SACzD,CAAC;KACH;;4GAjGU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCIY,gCAAgC,GAC3C,IAAI,cAAc,CAChB,+DAA+D,EAC/D;MAES,qBAAqB,CAAA;IAChC,WACS,CAAA,eAAgC,EAG/B,gBAAgD,EAAA;QAHjD,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAG/B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAgC;KACtD;IACJ,SAAS,CACP,OAAyB,EACzB,IAAiB,EAAA;QAEjB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;;YAEvC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,SAAA;QAED,IACE,IAAI,CAAC,gBAAgB;YACrB,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,EAC/C;;;AAGA,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7B,SAAA;QAED,OAAO,IAAI,CAAC,eAAe;AACxB,aAAA,QAAQ,EAAE;aACV,IAAI,CACH,QAAQ,CAAC,CAAC,CAAC,KACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CACvE,CACF,CAAC;KACL;IAEO,uBAAuB,CAC7B,OAAyB,EACzB,KAAc,EAAA;AAEd,QAAA,IAAI,KAAK,EAAE;YACT,OAAO,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;AACjC,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;KACxB;;AA9CU,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,8CAItB,gCAAgC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;sHAJ/B,qBAAqB,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;;0BAIN,QAAQ;;0BACR,MAAM;2BAAC,gCAAgC,CAAA;;;MCZ/B,mBAAmB,CAAA;;gHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAJ5B,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAIP,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,aAFnB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAHhF,OAAA,EAAA,CAAA;YACP,gBAAgB;AACjB,SAAA,CAAA,EAAA,CAAA,CAAA;2FAGU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,gBAAgB;AACjB,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC1F,iBAAA,CAAA;;;MCAY,qBAAqB,CAAA;IAEhC,WAAoB,CAAA,mBAAwC,EAClD,eAAgC,EAAA;QADtB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QAClD,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;KAAK;IAE/C,cAAc,CAAC,UAAkB,EAAE,QAAgB,EAAA;QACjD,OAAO,IAAI,CAAC,mBAAmB;AAC5B,aAAA,mBAAmB,CAAC;AACnB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,QAAQ,EAAE,QAAQ;SACnB,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAC1C,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACjC;AAEO,IAAA,oBAAoB,CAAC,KAAuB,EAAA;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW;eACjB,CAAC,KAAK,CAAC,YAAY;eACnB,CAAC,KAAK,CAAC,SAAS,EAAE;AACrB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;KACpC;;kHA3BU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCEY,uBAAuB,CAAA;AAalC,IAAA,WAAA,CAAoB,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAX5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAGzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,aAAa,CAAU,CAAC,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAS,CAAC,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,aAAa,CAAS,CAAC,CAAC,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,aAAa,CAAS,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAW,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAW,CAAC;AAGrD,QAAA,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;AACrF,QAAA,eAAe,CAAC,oBAAoB,CAAC,SAAS,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACvH,QAAA,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,eAAe,CAAC,QAAQ,EAAE;AACvB,aAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;KAChE;AAEO,IAAA,2BAA2B,CAAC,QAAqB,EAAA;AACvD,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACxE,YAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,QAAQ,CAAC,WAAW,EAAE;gBAC1D,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC;AACrD,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;gBAEpD,MAAM,WAAW,GAAgC,EAAE,CAAC;AACpD,gBAAA,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE;AACpC,oBAAA,IAAI,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAC1C,wBAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AACzC,wBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,4BAAA,WAAW,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AACnC,yBAAA;AACF,qBAAA;AACF,iBAAA;AAED,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,oBAAA,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC;AACvB,oBAAA,MAAM,EAAE,WAAW;AACnB,oBAAA,iBAAiB,EAAE,YAAY;AAC/B,oBAAA,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;AAC5B,oBAAA,WAAW,EAAE,YAAY,CAAC,cAAc,CAAC;AACzC,oBAAA,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC;AAC9B,oBAAA,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC;AAC5B,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,eAAe;AACjB,qBAAA,YAAY,EAAE;AACd,qBAAA,SAAS,CAAC,MAAQ,GAAC,CAAC,CAAC;AACzB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,IAAI,EAAE;gBAC1C,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAA;KACF;;oHAvEU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACTD;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dangl/angular-dangl-identity-client",
3
- "version": "4.0.1-beta0004",
3
+ "version": "4.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.2.6",
6
6
  "@angular/core": "^13.2.6",