@decaf-ts/for-couchdb 0.3.9 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/adapter.cjs CHANGED
@@ -381,4 +381,4 @@ __decorate([
381
381
  __metadata("design:paramtypes", [String, Array, Array]),
382
382
  __metadata("design:returntype", void 0)
383
383
  ], CouchDBAdapter.prototype, "updateAllPrefix", null);
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlDQU93QjtBQUN4QiwrQ0FBOEQ7QUFDOUQsMkRBUWlDO0FBQ2pDLDRCQUEwQjtBQUUxQix1REFBdUQ7QUFFdkQseUNBQXNDO0FBRXRDLDZDQUEyQztBQUMzQyx5Q0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQXNCLGNBSXBCLFNBQVEsY0FBNEI7SUFDcEMsWUFBc0IsS0FBUSxFQUFFLE9BQWUsRUFBRSxLQUFjO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZFLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsSUFBQSw0QkFBWSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUcsSUFBWSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBRUgsU0FBUztRQUNQLE9BQU8sSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFFRyxBQUFOLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBd0I7UUFDckMsT0FBTyxJQUFJLDBCQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFN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REwsSUFBQSxZQUFLLEdBQUU7Ozs7OENBR1A7QUF5Q1M7SUFEVCxJQUFBLFlBQUssR0FBRTs7OztvREFZUDtBQVVTO0lBRFQsSUFBQSxZQUFLLEdBQUU7Ozs7NERBVVA7QUFXUztJQURULElBQUEsWUFBSyxHQUFFOzs7O2tEQVdQO0FBNEJTO0lBRFQsSUFBQSxZQUFLLEdBQUU7Ozs7cURBaUJQO0FBMEJEO0lBREMsSUFBQSxZQUFLLEdBQUU7Ozs7a0RBaUJQO0FBNEJTO0lBRFQsSUFBQSxZQUFLLEdBQUU7Ozs7cURBdUJQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRhcHRlcixcbiAgU2VxdWVuY2UsXG4gIHR5cGUgU2VxdWVuY2VPcHRpb25zLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgUmVwb3NpdG9yeSxcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBDb3VjaERCS2V5cywgcmVzZXJ2ZWRBdHRyaWJ1dGVzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbmZsaWN0RXJyb3IsXG4gIENvbnRleHQsXG4gIEludGVybmFsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIHByZWZpeE1ldGhvZCxcbiAgUmVwb3NpdG9yeUZsYWdzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcblxuaW1wb3J0IHsgQ291Y2hEQlNlcXVlbmNlIH0gZnJvbSBcIi4vc2VxdWVuY2VzL1NlcXVlbmNlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBJbmRleEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBNYW5nb1F1ZXJ5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENvdWNoREJTdGF0ZW1lbnQgfSBmcm9tIFwiLi9xdWVyeVwiO1xuaW1wb3J0IHsgZmluYWwgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgYWRhcHRlciBmb3IgQ291Y2hEQiBkYXRhYmFzZSBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIENvdWNoREIgZGF0YWJhc2Ugb3BlcmF0aW9ucywgaW5jbHVkaW5nIENSVUQgb3BlcmF0aW9ucywgc2VxdWVuY2UgbWFuYWdlbWVudCwgYW5kIGVycm9yIGhhbmRsaW5nXG4gKiBAdGVtcGxhdGUgWSAtIFRoZSBzY29wZSB0eXBlXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZVxuICogQHBhcmFtIHtZfSBzY29wZSAtIFRoZSBzY29wZSBmb3IgdGhlIGFkYXB0ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmbGF2b3VyIC0gVGhlIGZsYXZvdXIgb2YgdGhlIGFkYXB0ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIC0gT3B0aW9uYWwgYWxpYXMgZm9yIHRoZSBhZGFwdGVyXG4gKiBAY2xhc3NcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIG9mIGV4dGVuZGluZyBDb3VjaERCQWRhcHRlclxuICogY2xhc3MgTXlDb3VjaERCQWRhcHRlciBleHRlbmRzIENvdWNoREJBZGFwdGVyPE15U2NvcGUsIE15RmxhZ3MsIE15Q29udGV4dD4ge1xuICogICBjb25zdHJ1Y3RvcihzY29wZTogTXlTY29wZSkge1xuICogICAgIHN1cGVyKHNjb3BlLCAnbXktY291Y2hkYicsICdteS1hbGlhcycpO1xuICogICB9XG4gKlxuICogICAvLyBJbXBsZW1lbnQgYWJzdHJhY3QgbWV0aG9kc1xuICogICBhc3luYyBpbmRleDxNIGV4dGVuZHMgTW9kZWw+KC4uLm1vZGVsczogQ29uc3RydWN0b3I8TT5bXSk6IFByb21pc2U8dm9pZD4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogTWFuZ29RdWVyeSwgZG9jc09ubHk6IGJvb2xlYW4pOiBQcm9taXNlPFI+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyBjcmVhdGUodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIsIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHJlYWQodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgdXBkYXRlKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyBkZWxldGUodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ291Y2hEQkFkYXB0ZXI8XG4gIFksXG4gIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuPiBleHRlbmRzIEFkYXB0ZXI8WSwgTWFuZ29RdWVyeSwgRiwgQz4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc2NvcGU6IFksIGZsYXZvdXI6IHN0cmluZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgZmxhdm91ciwgYWxpYXMpO1xuICAgIFt0aGlzLmNyZWF0ZSwgdGhpcy5jcmVhdGVBbGwsIHRoaXMudXBkYXRlLCB0aGlzLnVwZGF0ZUFsbF0uZm9yRWFjaCgobSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IG0ubmFtZTtcbiAgICAgIHByZWZpeE1ldGhvZCh0aGlzLCBtLCAodGhpcyBhcyBhbnkpW25hbWUgKyBcIlByZWZpeFwiXSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgQ291Y2hEQiBzdGF0ZW1lbnQgZm9yIHF1ZXJ5aW5nXG4gICAqIEBzdW1tYXJ5IEZhY3RvcnkgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIG5ldyBDb3VjaERCU3RhdGVtZW50IGluc3RhbmNlIGZvciBidWlsZGluZyBxdWVyaWVzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHJldHVybiB7Q291Y2hEQlN0YXRlbWVudDxNLCBhbnk+fSBBIG5ldyBDb3VjaERCU3RhdGVtZW50IGluc3RhbmNlXG4gICAqL1xuICBAZmluYWwoKVxuICBTdGF0ZW1lbnQ8TSBleHRlbmRzIE1vZGVsPigpOiBDb3VjaERCU3RhdGVtZW50PE0sIGFueT4ge1xuICAgIHJldHVybiBuZXcgQ291Y2hEQlN0YXRlbWVudCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBDb3VjaERCIHNlcXVlbmNlXG4gICAqIEBzdW1tYXJ5IEZhY3RvcnkgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIG5ldyBDb3VjaERCU2VxdWVuY2UgaW5zdGFuY2UgZm9yIG1hbmFnaW5nIHNlcXVlbmNlc1xuICAgKiBAcGFyYW0ge1NlcXVlbmNlT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgc2VxdWVuY2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTZXF1ZW5jZT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgbmV3IFNlcXVlbmNlIGluc3RhbmNlXG4gICAqL1xuICBAZmluYWwoKVxuICBhc3luYyBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgcmV0dXJuIG5ldyBDb3VjaERCU2VxdWVuY2Uob3B0aW9ucywgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBhZGFwdGVyIGJ5IGNyZWF0aW5nIGluZGV4ZXMgZm9yIGFsbCBtYW5hZ2VkIG1vZGVsc1xuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YWJhc2UgaW5kZXhlcyBmb3IgYWxsIG1vZGVscyBtYW5hZ2VkIGJ5IHRoaXMgYWRhcHRlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1hbmFnZWRNb2RlbHMgPSBBZGFwdGVyLm1vZGVscyh0aGlzLmZsYXZvdXIpO1xuICAgIHJldHVybiB0aGlzLmluZGV4KC4uLm1hbmFnZWRNb2RlbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGluZGV4ZXMgZm9yIHRoZSBnaXZlbiBtb2RlbHNcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBjcmVhdGUgZGF0YWJhc2UgaW5kZXhlcyBmb3IgdGhlIHNwZWNpZmllZCBtb2RlbHNcbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAcGFyYW0gey4uLkNvbnN0cnVjdG9yPE0+fSBtb2RlbHMgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JzIHRvIGNyZWF0ZSBpbmRleGVzIGZvclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBpbmRleGVzIGFyZSBjcmVhdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5kZXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICAuLi5tb2RlbHM6IENvbnN0cnVjdG9yPE0+W11cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgcmF3IE1hbmdvIHF1ZXJ5IGFnYWluc3QgdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gZXhlY3V0ZSByYXcgTWFuZ28gcXVlcmllc1xuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXN1bHQgdHlwZVxuICAgKiBAcGFyYW0ge01hbmdvUXVlcnl9IHJhd0lucHV0IC0gVGhlIHJhdyBNYW5nbyBxdWVyeSB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9jc09ubHkgLSBXaGV0aGVyIHRvIHJldHVybiBvbmx5IHRoZSBkb2N1bWVudHMgb3IgdGhlIGZ1bGwgcmVzcG9uc2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHF1ZXJ5IHJlc3VsdFxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgcmF3PFI+KHJhd0lucHV0OiBNYW5nb1F1ZXJ5LCBkb2NzT25seTogYm9vbGVhbik6IFByb21pc2U8Uj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc3NpZ25zIG1ldGFkYXRhIHRvIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgQWRkcyByZXZpc2lvbiBtZXRhZGF0YSB0byBhIG1vZGVsIGFzIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSBtb2RlbCB0byBhc3NpZ24gbWV0YWRhdGEgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJldiAtIFRoZSByZXZpc2lvbiBzdHJpbmcgdG8gYXNzaWduXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59IFRoZSBtb2RlbCB3aXRoIG1ldGFkYXRhIGFzc2lnbmVkXG4gICAqL1xuICBAZmluYWwoKVxuICBwcm90ZWN0ZWQgYXNzaWduTWV0YWRhdGEoXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcmV2OiBzdHJpbmdcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZGVsLCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiByZXYsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc3NpZ25zIG1ldGFkYXRhIHRvIG11bHRpcGxlIG1vZGVsc1xuICAgKiBAc3VtbWFyeSBBZGRzIHJldmlzaW9uIG1ldGFkYXRhIHRvIG11bHRpcGxlIG1vZGVscyBhcyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIGFzc2lnbiBtZXRhZGF0YSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXZzIC0gVGhlIHJldmlzaW9uIHN0cmluZ3MgdG8gYXNzaWduXG4gICAqIEByZXR1cm4gVGhlIG1vZGVscyB3aXRoIG1ldGFkYXRhIGFzc2lnbmVkXG4gICAqL1xuICBAZmluYWwoKVxuICBwcm90ZWN0ZWQgYXNzaWduTXVsdGlwbGVNZXRhZGF0YShcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICByZXZzOiBzdHJpbmdbXVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10ge1xuICAgIG1vZGVscy5mb3JFYWNoKChtLCBpKSA9PiB7XG4gICAgICBSZXBvc2l0b3J5LnNldE1ldGFkYXRhKG0gYXMgYW55LCByZXZzW2ldKTtcbiAgICAgIHJldHVybiBtO1xuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbHM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgcmVjb3JkIGZvciBjcmVhdGlvblxuICAgKiBAc3VtbWFyeSBBZGRzIG5lY2Vzc2FyeSBDb3VjaERCIGZpZWxkcyB0byBhIHJlY29yZCBiZWZvcmUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSBtb2RlbCB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkLCBhbmQgcHJlcGFyZWQgcmVjb3JkXG4gICAqL1xuICBAZmluYWwoKVxuICBwcm90ZWN0ZWQgY3JlYXRlUHJlZml4KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkLCByZWNvcmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IHJlY29yZCBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBjcmVhdGUgYSBuZXcgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCByZWNvcmRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIGNyZWF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBtdWx0aXBsZSByZWNvcmRzIGZvciBjcmVhdGlvblxuICAgKiBAc3VtbWFyeSBBZGRzIG5lY2Vzc2FyeSBDb3VjaERCIGZpZWxkcyB0byBtdWx0aXBsZSByZWNvcmRzIGJlZm9yZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGlkcyAtIFRoZSBJRHMgb2YgdGhlIHJlY29yZHNcbiAgICogQHBhcmFtIG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZHMsIGFuZCBwcmVwYXJlZCByZWNvcmRzXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGlkcyBhbmQgbW9kZWxzIGFycmF5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzXG4gICAqL1xuICBAZmluYWwoKVxuICBwcm90ZWN0ZWQgY3JlYXRlQWxsUHJlZml4KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkczogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXVxuICApIHtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSBpZHMubWFwKChpZCwgY291bnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWxzW2NvdW50XSk7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZHMsIHJlY29yZHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIHJlY29yZCBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIHJlYWQgYSByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZWFkIHJlY29yZFxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhIHJlY29yZCBmb3IgdXBkYXRlXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIGEgcmVjb3JkIGJlZm9yZSB1cGRhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIG1vZGVsIC0gVGhlIG1vZGVsIHRvIHByZXBhcmVcbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhYmxlTmFtZSwgaWQsIGFuZCBwcmVwYXJlZCByZWNvcmRcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgbm8gcmV2aXNpb24gbnVtYmVyIGlzIGZvdW5kIGluIHRoZSBtb2RlbFxuICAgKi9cbiAgQGZpbmFsKClcbiAgdXBkYXRlUHJlZml4KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIGNvbnN0IHJldiA9IG1vZGVsW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV07XG4gICAgaWYgKCFyZXYpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE5vIHJldmlzaW9uIG51bWJlciBmb3VuZCBmb3IgcmVjb3JkIHdpdGggaWQgJHtpZH1gXG4gICAgICApO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlJFVl0gPSByZXY7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkLCByZWNvcmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIGEgcmVjb3JkIGluIHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIHVwZGF0ZSBhIHJlY29yZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXBkYXRlZCByZWNvcmRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHVwZGF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBtdWx0aXBsZSByZWNvcmRzIGZvciB1cGRhdGVcbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gbXVsdGlwbGUgcmVjb3JkcyBiZWZvcmUgdXBkYXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmdbXXxudW1iZXJbXX0gaWRzIC0gVGhlIElEcyBvZiB0aGUgcmVjb3Jkc1xuICAgKiBAcGFyYW0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkcywgYW5kIHByZXBhcmVkIHJlY29yZHNcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgaWRzIGFuZCBtb2RlbHMgYXJyYXlzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHMgb3IgaWYgbm8gcmV2aXNpb24gbnVtYmVyIGlzIGZvdW5kIGluIGEgbW9kZWxcbiAgICovXG4gIEBmaW5hbCgpXG4gIHByb3RlY3RlZCB1cGRhdGVBbGxQcmVmaXgoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICkge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKGlkLCBjb3VudCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICAgIGNvbnN0IHJldiA9IG1vZGVsc1tjb3VudF1bUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgICAgIGlmICghcmV2KVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBgTm8gcmV2aXNpb24gbnVtYmVyIGZvdW5kIGZvciByZWNvcmQgd2l0aCBpZCAke2lkfWBcbiAgICAgICAgKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbHNbY291bnRdKTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5SRVZdID0gcmV2O1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWRzLCByZWNvcmRzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHJlY29yZCBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGRlbGV0ZSBhIHJlY29yZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZGVsZXRlZCByZWNvcmRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBDb3VjaERCIGRvY3VtZW50IElEXG4gICAqIEBzdW1tYXJ5IENvbWJpbmVzIHRoZSB0YWJsZSBuYW1lIGFuZCBJRCB0byBjcmVhdGUgYSBDb3VjaERCIGRvY3VtZW50IElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBDb3VjaERCIGRvY3VtZW50IElEXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVJZCh0YWJsZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZF0uam9pbihDb3VjaERCS2V5cy5TRVBBUkFUT1IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYW4gZXJyb3IgYW5kIGNvbnZlcnRzIGl0IHRvIGEgQmFzZUVycm9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIHZhcmlvdXMgZXJyb3IgdHlwZXMgdG8gYXBwcm9wcmlhdGUgQmFzZUVycm9yIHN1YnR5cGVzXG4gICAqIEBwYXJhbSB7RXJyb3J8c3RyaW5nfSBlcnIgLSBUaGUgZXJyb3IgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgZXJyb3JcbiAgICogQHJldHVybiB7QmFzZUVycm9yfSBUaGUgcGFyc2VkIGVycm9yIGFzIGEgQmFzZUVycm9yXG4gICAqL1xuICBwYXJzZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IEJhc2VFcnJvciB7XG4gICAgcmV0dXJuIENvdWNoREJBZGFwdGVyLnBhcnNlRXJyb3IoZXJyLCByZWFzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgYW4gYXR0cmlidXRlIG5hbWUgaXMgcmVzZXJ2ZWQgaW4gQ291Y2hEQlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0ciAtIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzUmVzZXJ2ZWQoYXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXR0ci5tYXRjaChyZXNlcnZlZEF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdGF0aWMgbWV0aG9kIHRvIHBhcnNlIGFuIGVycm9yIGFuZCBjb252ZXJ0IGl0IHRvIGEgQmFzZUVycm9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIHZhcmlvdXMgZXJyb3IgdHlwZXMgdG8gYXBwcm9wcmlhdGUgQmFzZUVycm9yIHN1YnR5cGVzIGJhc2VkIG9uIGVycm9yIGNvZGVzIGFuZCBtZXNzYWdlc1xuICAgKiBAcGFyYW0ge0Vycm9yfHN0cmluZ30gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIE9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGVycm9yXG4gICAqIEByZXR1cm4ge0Jhc2VFcnJvcn0gVGhlIHBhcnNlZCBlcnJvciBhcyBhIEJhc2VFcnJvclxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBwYXJzZUVycm9yXG4gICAqICAgcGFydGljaXBhbnQgRXJyb3JUeXBlc1xuICAgKlxuICAgKiAgIENhbGxlci0+PnBhcnNlRXJyb3I6IGVyciwgcmVhc29uXG4gICAqICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IENoZWNrIGlmIGVyciBpcyBhbHJlYWR5IGEgQmFzZUVycm9yXG4gICAqICAgYWx0IGVyciBpcyBCYXNlRXJyb3JcbiAgICogICAgIHBhcnNlRXJyb3ItLT4+Q2FsbGVyOiByZXR1cm4gZXJyXG4gICAqICAgZWxzZSBlcnIgaXMgc3RyaW5nXG4gICAqICAgICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogRXh0cmFjdCBjb2RlIGZyb20gc3RyaW5nXG4gICAqICAgICBhbHQgY29kZSBtYXRjaGVzIFwiYWxyZWFkeSBleGlzdHx1cGRhdGUgY29uZmxpY3RcIlxuICAgKiAgICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IENvbmZsaWN0RXJyb3IoY29kZSlcbiAgICogICAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IENvbmZsaWN0RXJyb3JcbiAgICogICAgIGVsc2UgY29kZSBtYXRjaGVzIFwibWlzc2luZ3xkZWxldGVkXCJcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBOb3RGb3VuZEVycm9yKGNvZGUpXG4gICAqICAgICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBOb3RGb3VuZEVycm9yXG4gICAqICAgICBlbmRcbiAgICogICBlbHNlIGVyciBoYXMgY29kZSBwcm9wZXJ0eVxuICAgKiAgICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IEV4dHJhY3QgY29kZSBhbmQgcmVhc29uXG4gICAqICAgZWxzZSBlcnIgaGFzIHN0YXR1c0NvZGUgcHJvcGVydHlcbiAgICogICAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBFeHRyYWN0IGNvZGUgYW5kIHJlYXNvblxuICAgKiAgIGVsc2VcbiAgICogICAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBVc2UgZXJyLm1lc3NhZ2UgYXMgY29kZVxuICAgKiAgIGVuZFxuICAgKlxuICAgKiAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBTd2l0Y2ggb24gY29kZVxuICAgKiAgIGFsdCBjb2RlIGlzIDQwMSwgNDEyLCBvciA0MDlcbiAgICogICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgQ29uZmxpY3RFcnJvcihyZWFzb24pXG4gICAqICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogQ29uZmxpY3RFcnJvclxuICAgKiAgIGVsc2UgY29kZSBpcyA0MDRcbiAgICogICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgTm90Rm91bmRFcnJvcihyZWFzb24pXG4gICAqICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogTm90Rm91bmRFcnJvclxuICAgKiAgIGVsc2UgY29kZSBpcyA0MDBcbiAgICogICAgIGFsdCBjb2RlIG1hdGNoZXMgXCJObyBpbmRleCBleGlzdHNcIlxuICAgKiAgICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IEluZGV4RXJyb3IoZXJyKVxuICAgKiAgICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogSW5kZXhFcnJvclxuICAgKiAgICAgZWxzZVxuICAgKiAgICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IEludGVybmFsRXJyb3IoZXJyKVxuICAgKiAgICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogSW50ZXJuYWxFcnJvclxuICAgKiAgICAgZW5kXG4gICAqICAgZWxzZSBjb2RlIG1hdGNoZXMgXCJFQ09OTlJFRlVTRURcIlxuICAgKiAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBDb25uZWN0aW9uRXJyb3IoZXJyKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IENvbm5lY3Rpb25FcnJvclxuICAgKiAgIGVsc2VcbiAgICogICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpXG4gICAqICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogSW50ZXJuYWxFcnJvclxuICAgKiAgIGVuZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBwYXJzZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IEJhc2VFcnJvciB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcikgcmV0dXJuIGVyciBhcyBhbnk7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvZGUgPSBlcnI7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvYWxyZWFkeSBleGlzdHx1cGRhdGUgY29uZmxpY3QvZykpXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihjb2RlKTtcbiAgICAgIGlmIChjb2RlLm1hdGNoKC9taXNzaW5nfGRlbGV0ZWQvZykpIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKTtcbiAgICB9IGVsc2UgaWYgKChlcnIgYXMgYW55KS5jb2RlKSB7XG4gICAgICBjb2RlID0gKGVyciBhcyBhbnkpLmNvZGU7XG4gICAgICByZWFzb24gPSByZWFzb24gfHwgZXJyLm1lc3NhZ2U7XG4gICAgfSBlbHNlIGlmICgoZXJyIGFzIGFueSkuc3RhdHVzQ29kZSkge1xuICAgICAgY29kZSA9IChlcnIgYXMgYW55KS5zdGF0dXNDb2RlO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgXCI0MDFcIjpcbiAgICAgIGNhc2UgXCI0MTJcIjpcbiAgICAgIGNhc2UgXCI0MDlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwNFwiOlxuICAgICAgICByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uIGFzIHN0cmluZyk7XG4gICAgICBjYXNlIFwiNDAwXCI6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL05vXFxzaW5kZXhcXHNleGlzdHMvZykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBJbmRleEVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNvZGUudG9TdHJpbmcoKS5tYXRjaCgvRUNPTk5SRUZVU0VEL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuIl19
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlDQU93QjtBQUN4QiwrQ0FBOEQ7QUFDOUQsMkRBUWlDO0FBQ2pDLDRCQUEwQjtBQUUxQix1REFBdUQ7QUFFdkQseUNBQXNDO0FBRXRDLDZDQUEyQztBQUMzQyx5Q0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQXNCLGNBS3BCLFNBQVEsY0FBa0M7SUFDMUMsWUFBc0IsS0FBUSxFQUFFLE9BQWUsRUFBRSxLQUFjO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3ZFLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsSUFBQSw0QkFBWSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUcsSUFBWSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBRUgsU0FBUztRQUNQLE9BQU8sSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFFRyxBQUFOLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBd0I7UUFDckMsT0FBTyxJQUFJLDBCQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ00sS0FBSyxDQUFDLFVBQVU7UUFDdkIsTUFB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QURMLElBQUEsWUFBSyxHQUFFOzs7OzhDQUdQO0FBeUNTO0lBRFQsSUFBQSxZQUFLLEdBQUU7Ozs7b0RBWVA7QUFVUztJQURULElBQUEsWUFBSyxHQUFFOzs7OzREQVVQO0FBV1M7SUFEVCxJQUFBLFlBQUssR0FBRTs7OztrREFXUDtBQTRCUztJQURULElBQUEsWUFBSyxHQUFFOzs7O3FEQWlCUDtBQTBCRDtJQURDLElBQUEsWUFBSyxHQUFFOzs7O2tEQWlCUDtBQTRCUztJQURULElBQUEsWUFBSyxHQUFFOzs7O3FEQXVCUCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFkYXB0ZXIsXG4gIFNlcXVlbmNlLFxuICB0eXBlIFNlcXVlbmNlT3B0aW9ucyxcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBDb25uZWN0aW9uRXJyb3IsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMsIHJlc2VydmVkQXR0cmlidXRlcyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBDb250ZXh0LFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBwcmVmaXhNZXRob2QsXG4gIFJlcG9zaXRvcnlGbGFncyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5cbmltcG9ydCB7IENvdWNoREJTZXF1ZW5jZSB9IGZyb20gXCIuL3NlcXVlbmNlcy9TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSW5kZXhFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb3VjaERCU3RhdGVtZW50IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmltcG9ydCB7IGZpbmFsIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0IGFkYXB0ZXIgZm9yIENvdWNoREIgZGF0YWJhc2Ugb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciBDb3VjaERCIGRhdGFiYXNlIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBDUlVEIG9wZXJhdGlvbnMsIHNlcXVlbmNlIG1hbmFnZW1lbnQsIGFuZCBlcnJvciBoYW5kbGluZ1xuICogQHRlbXBsYXRlIFkgLSBUaGUgc2NvcGUgdHlwZVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGVcbiAqIEBwYXJhbSB7WX0gc2NvcGUgLSBUaGUgc2NvcGUgZm9yIHRoZSBhZGFwdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gZmxhdm91ciAtIFRoZSBmbGF2b3VyIG9mIHRoZSBhZGFwdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgYWRhcHRlclxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSBvZiBleHRlbmRpbmcgQ291Y2hEQkFkYXB0ZXJcbiAqIGNsYXNzIE15Q291Y2hEQkFkYXB0ZXIgZXh0ZW5kcyBDb3VjaERCQWRhcHRlcjxNeVNjb3BlLCBNeUZsYWdzLCBNeUNvbnRleHQ+IHtcbiAqICAgY29uc3RydWN0b3Ioc2NvcGU6IE15U2NvcGUpIHtcbiAqICAgICBzdXBlcihzY29wZSwgJ215LWNvdWNoZGInLCAnbXktYWxpYXMnKTtcbiAqICAgfVxuICpcbiAqICAgLy8gSW1wbGVtZW50IGFic3RyYWN0IG1ldGhvZHNcbiAqICAgYXN5bmMgaW5kZXg8TSBleHRlbmRzIE1vZGVsPiguLi5tb2RlbHM6IENvbnN0cnVjdG9yPE0+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyByYXc8Uj4ocmF3SW5wdXQ6IE1hbmdvUXVlcnksIGRvY3NPbmx5OiBib29sZWFuKTogUHJvbWlzZTxSPiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgY3JlYXRlKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyByZWFkKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHVwZGF0ZSh0YWJsZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyB8IG51bWJlciwgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgZGVsZXRlKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvdWNoREJBZGFwdGVyPFxuICBZLFxuICBDT05OLFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4gZXh0ZW5kcyBBZGFwdGVyPFksIENPTk4sIE1hbmdvUXVlcnksIEYsIEM+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBZLCBmbGF2b3VyOiBzdHJpbmcsIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGZsYXZvdXIsIGFsaWFzKTtcbiAgICBbdGhpcy5jcmVhdGUsIHRoaXMuY3JlYXRlQWxsLCB0aGlzLnVwZGF0ZSwgdGhpcy51cGRhdGVBbGxdLmZvckVhY2goKG0pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBtLm5hbWU7XG4gICAgICBwcmVmaXhNZXRob2QodGhpcywgbSwgKHRoaXMgYXMgYW55KVtuYW1lICsgXCJQcmVmaXhcIl0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IENvdWNoREIgc3RhdGVtZW50IGZvciBxdWVyeWluZ1xuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgQ291Y2hEQlN0YXRlbWVudCBpbnN0YW5jZSBmb3IgYnVpbGRpbmcgcXVlcmllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEByZXR1cm4ge0NvdWNoREJTdGF0ZW1lbnQ8TSwgYW55Pn0gQSBuZXcgQ291Y2hEQlN0YXRlbWVudCBpbnN0YW5jZVxuICAgKi9cbiAgQGZpbmFsKClcbiAgU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbD4oKTogQ291Y2hEQlN0YXRlbWVudDxNLCBhbnk+IHtcbiAgICByZXR1cm4gbmV3IENvdWNoREJTdGF0ZW1lbnQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgQ291Y2hEQiBzZXF1ZW5jZVxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgQ291Y2hEQlNlcXVlbmNlIGluc3RhbmNlIGZvciBtYW5hZ2luZyBzZXF1ZW5jZXNcbiAgICogQHBhcmFtIHtTZXF1ZW5jZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHNlcXVlbmNlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U2VxdWVuY2U+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG5ldyBTZXF1ZW5jZSBpbnN0YW5jZVxuICAgKi9cbiAgQGZpbmFsKClcbiAgYXN5bmMgU2VxdWVuY2Uob3B0aW9uczogU2VxdWVuY2VPcHRpb25zKTogUHJvbWlzZTxTZXF1ZW5jZT4ge1xuICAgIHJldHVybiBuZXcgQ291Y2hEQlNlcXVlbmNlKG9wdGlvbnMsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgYWRhcHRlciBieSBjcmVhdGluZyBpbmRleGVzIGZvciBhbGwgbWFuYWdlZCBtb2RlbHNcbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFiYXNlIGluZGV4ZXMgZm9yIGFsbCBtb2RlbHMgbWFuYWdlZCBieSB0aGlzIGFkYXB0ZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYW5hZ2VkTW9kZWxzID0gQWRhcHRlci5tb2RlbHModGhpcy5mbGF2b3VyKTtcbiAgICByZXR1cm4gdGhpcy5pbmRleCguLi5tYW5hZ2VkTW9kZWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBpbmRleGVzIGZvciB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gY3JlYXRlIGRhdGFiYXNlIGluZGV4ZXMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kZWxzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHsuLi5Db25zdHJ1Y3RvcjxNPn0gbW9kZWxzIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9ycyB0byBjcmVhdGUgaW5kZXhlcyBmb3JcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgaW5kZXhlcyBhcmUgY3JlYXRlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluZGV4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgLi4ubW9kZWxzOiBDb25zdHJ1Y3RvcjxNPltdXG4gICk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBNYW5nbyBxdWVyeSBhZ2FpbnN0IHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGV4ZWN1dGUgcmF3IE1hbmdvIHF1ZXJpZXNcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmVzdWx0IHR5cGVcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSByYXdJbnB1dCAtIFRoZSByYXcgTWFuZ28gcXVlcnkgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvY3NPbmx5IC0gV2hldGhlciB0byByZXR1cm4gb25seSB0aGUgZG9jdW1lbnRzIG9yIHRoZSBmdWxsIHJlc3BvbnNlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Uj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBxdWVyeSByZXN1bHRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHJhdzxSPihyYXdJbnB1dDogTWFuZ29RdWVyeSwgZG9jc09ubHk6IGJvb2xlYW4pOiBQcm9taXNlPFI+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNzaWducyBtZXRhZGF0YSB0byBhIG1vZGVsXG4gICAqIEBzdW1tYXJ5IEFkZHMgcmV2aXNpb24gbWV0YWRhdGEgdG8gYSBtb2RlbCBhcyBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gYXNzaWduIG1ldGFkYXRhIHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXYgLSBUaGUgcmV2aXNpb24gc3RyaW5nIHRvIGFzc2lnblxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUaGUgbW9kZWwgd2l0aCBtZXRhZGF0YSBhc3NpZ25lZFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGFzc2lnbk1ldGFkYXRhKFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHJldjogc3RyaW5nXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogcmV2LFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNzaWducyBtZXRhZGF0YSB0byBtdWx0aXBsZSBtb2RlbHNcbiAgICogQHN1bW1hcnkgQWRkcyByZXZpc2lvbiBtZXRhZGF0YSB0byBtdWx0aXBsZSBtb2RlbHMgYXMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICAgKiBAcGFyYW0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBhc3NpZ24gbWV0YWRhdGEgdG9cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcmV2cyAtIFRoZSByZXZpc2lvbiBzdHJpbmdzIHRvIGFzc2lnblxuICAgKiBAcmV0dXJuIFRoZSBtb2RlbHMgd2l0aCBtZXRhZGF0YSBhc3NpZ25lZFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGFzc2lnbk11bHRpcGxlTWV0YWRhdGEoXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgcmV2czogc3RyaW5nW11cbiAgKTogUmVjb3JkPHN0cmluZywgYW55PltdIHtcbiAgICBtb2RlbHMuZm9yRWFjaCgobSwgaSkgPT4ge1xuICAgICAgUmVwb3NpdG9yeS5zZXRNZXRhZGF0YShtIGFzIGFueSwgcmV2c1tpXSk7XG4gICAgICByZXR1cm4gbTtcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kZWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhIHJlY29yZCBmb3IgY3JlYXRpb25cbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gYSByZWNvcmQgYmVmb3JlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZCwgYW5kIHByZXBhcmVkIHJlY29yZFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGNyZWF0ZVByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWwpO1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZCwgcmVjb3JkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyByZWNvcmQgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gY3JlYXRlIGEgbmV3IHJlY29yZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgcmVjb3JkcyBmb3IgY3JlYXRpb25cbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gbXVsdGlwbGUgcmVjb3JkcyBiZWZvcmUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBpZHMgLSBUaGUgSURzIG9mIHRoZSByZWNvcmRzXG4gICAqIEBwYXJhbSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIHByZXBhcmVcbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhYmxlTmFtZSwgaWRzLCBhbmQgcHJlcGFyZWQgcmVjb3Jkc1xuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBpZHMgYW5kIG1vZGVscyBhcnJheXMgaGF2ZSBkaWZmZXJlbnQgbGVuZ3Roc1xuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGNyZWF0ZUFsbFByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W11cbiAgKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG5cbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoaWQsIGNvdW50KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsc1tjb3VudF0pO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWRzLCByZWNvcmRzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byByZWFkIGEgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVhZCByZWNvcmRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHJlYWQoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSByZWNvcmQgZm9yIHVwZGF0ZVxuICAgKiBAc3VtbWFyeSBBZGRzIG5lY2Vzc2FyeSBDb3VjaERCIGZpZWxkcyB0byBhIHJlY29yZCBiZWZvcmUgdXBkYXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSBtb2RlbCAtIFRoZSBtb2RlbCB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkLCBhbmQgcHJlcGFyZWQgcmVjb3JkXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIG5vIHJldmlzaW9uIG51bWJlciBpcyBmb3VuZCBpbiB0aGUgbW9kZWxcbiAgICovXG4gIEBmaW5hbCgpXG4gIHVwZGF0ZVByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICBjb25zdCByZXYgPSBtb2RlbFtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdO1xuICAgIGlmICghcmV2KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyByZXZpc2lvbiBudW1iZXIgZm91bmQgZm9yIHJlY29yZCB3aXRoIGlkICR7aWR9YFxuICAgICAgKTtcbiAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWwpO1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5SRVZdID0gcmV2O1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZCwgcmVjb3JkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIHJlY29yZCBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byB1cGRhdGUgYSByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSBtb2RlbCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgcmVjb3JkcyBmb3IgdXBkYXRlXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIG11bHRpcGxlIHJlY29yZHMgYmVmb3JlIHVwZGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGlkcyAtIFRoZSBJRHMgb2YgdGhlIHJlY29yZHNcbiAgICogQHBhcmFtIG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZHMsIGFuZCBwcmVwYXJlZCByZWNvcmRzXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGlkcyBhbmQgbW9kZWxzIGFycmF5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzIG9yIGlmIG5vIHJldmlzaW9uIG51bWJlciBpcyBmb3VuZCBpbiBhIG1vZGVsXG4gICAqL1xuICBAZmluYWwoKVxuICBwcm90ZWN0ZWQgdXBkYXRlQWxsUHJlZml4KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkczogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXVxuICApIHtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSBpZHMubWFwKChpZCwgY291bnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgICBjb25zdCByZXYgPSBtb2RlbHNbY291bnRdW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV07XG4gICAgICBpZiAoIXJldilcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYE5vIHJldmlzaW9uIG51bWJlciBmb3VuZCBmb3IgcmVjb3JkIHdpdGggaWQgJHtpZH1gXG4gICAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWxzW2NvdW50XSk7XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuUkVWXSA9IHJldjtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkcywgcmVjb3Jkc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBkZWxldGUgYSByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRlbGV0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSBkZWxldGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIGEgQ291Y2hEQiBkb2N1bWVudCBJRFxuICAgKiBAc3VtbWFyeSBDb21iaW5lcyB0aGUgdGFibGUgbmFtZSBhbmQgSUQgdG8gY3JlYXRlIGEgQ291Y2hEQiBkb2N1bWVudCBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgQ291Y2hEQiBkb2N1bWVudCBJRFxuICAgKi9cbiAgcHJvdGVjdGVkIGdlbmVyYXRlSWQodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWRdLmpvaW4oQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuIGVycm9yIGFuZCBjb252ZXJ0cyBpdCB0byBhIEJhc2VFcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB2YXJpb3VzIGVycm9yIHR5cGVzIHRvIGFwcHJvcHJpYXRlIEJhc2VFcnJvciBzdWJ0eXBlc1xuICAgKiBAcGFyYW0ge0Vycm9yfHN0cmluZ30gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIE9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGVycm9yXG4gICAqIEByZXR1cm4ge0Jhc2VFcnJvcn0gVGhlIHBhcnNlZCBlcnJvciBhcyBhIEJhc2VFcnJvclxuICAgKi9cbiAgcGFyc2VFcnJvcihlcnI6IEVycm9yIHwgc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBCYXNlRXJyb3Ige1xuICAgIHJldHVybiBDb3VjaERCQWRhcHRlci5wYXJzZUVycm9yKGVyciwgcmVhc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZFxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIHJlc2VydmVkIGluIENvdWNoREJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHIgLSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1Jlc2VydmVkKGF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWF0dHIubWF0Y2gocmVzZXJ2ZWRBdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3RhdGljIG1ldGhvZCB0byBwYXJzZSBhbiBlcnJvciBhbmQgY29udmVydCBpdCB0byBhIEJhc2VFcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB2YXJpb3VzIGVycm9yIHR5cGVzIHRvIGFwcHJvcHJpYXRlIEJhc2VFcnJvciBzdWJ0eXBlcyBiYXNlZCBvbiBlcnJvciBjb2RlcyBhbmQgbWVzc2FnZXNcbiAgICogQHBhcmFtIHtFcnJvcnxzdHJpbmd9IGVyciAtIFRoZSBlcnJvciB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBPcHRpb25hbCByZWFzb24gZm9yIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IFRoZSBwYXJzZWQgZXJyb3IgYXMgYSBCYXNlRXJyb3JcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgcGFyc2VFcnJvclxuICAgKiAgIHBhcnRpY2lwYW50IEVycm9yVHlwZXNcbiAgICpcbiAgICogICBDYWxsZXItPj5wYXJzZUVycm9yOiBlcnIsIHJlYXNvblxuICAgKiAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBDaGVjayBpZiBlcnIgaXMgYWxyZWFkeSBhIEJhc2VFcnJvclxuICAgKiAgIGFsdCBlcnIgaXMgQmFzZUVycm9yXG4gICAqICAgICBwYXJzZUVycm9yLS0+PkNhbGxlcjogcmV0dXJuIGVyclxuICAgKiAgIGVsc2UgZXJyIGlzIHN0cmluZ1xuICAgKiAgICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IEV4dHJhY3QgY29kZSBmcm9tIHN0cmluZ1xuICAgKiAgICAgYWx0IGNvZGUgbWF0Y2hlcyBcImFscmVhZHkgZXhpc3R8dXBkYXRlIGNvbmZsaWN0XCJcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBDb25mbGljdEVycm9yKGNvZGUpXG4gICAqICAgICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBDb25mbGljdEVycm9yXG4gICAqICAgICBlbHNlIGNvZGUgbWF0Y2hlcyBcIm1pc3Npbmd8ZGVsZXRlZFwiXG4gICAqICAgICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKVxuICAgKiAgICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogTm90Rm91bmRFcnJvclxuICAgKiAgICAgZW5kXG4gICAqICAgZWxzZSBlcnIgaGFzIGNvZGUgcHJvcGVydHlcbiAgICogICAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBFeHRyYWN0IGNvZGUgYW5kIHJlYXNvblxuICAgKiAgIGVsc2UgZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAqICAgICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogRXh0cmFjdCBjb2RlIGFuZCByZWFzb25cbiAgICogICBlbHNlXG4gICAqICAgICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogVXNlIGVyci5tZXNzYWdlIGFzIGNvZGVcbiAgICogICBlbmRcbiAgICpcbiAgICogICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogU3dpdGNoIG9uIGNvZGVcbiAgICogICBhbHQgY29kZSBpcyA0MDEsIDQxMiwgb3IgNDA5XG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IENvbmZsaWN0RXJyb3IocmVhc29uKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IENvbmZsaWN0RXJyb3JcbiAgICogICBlbHNlIGNvZGUgaXMgNDA0XG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbHNlIGNvZGUgaXMgNDAwXG4gICAqICAgICBhbHQgY29kZSBtYXRjaGVzIFwiTm8gaW5kZXggZXhpc3RzXCJcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBJbmRleEVycm9yKGVycilcbiAgICogICAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IEluZGV4RXJyb3JcbiAgICogICAgIGVsc2VcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBJbnRlcm5hbEVycm9yKGVycilcbiAgICogICAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IEludGVybmFsRXJyb3JcbiAgICogICAgIGVuZFxuICAgKiAgIGVsc2UgY29kZSBtYXRjaGVzIFwiRUNPTk5SRUZVU0VEXCJcbiAgICogICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycilcbiAgICogICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBDb25uZWN0aW9uRXJyb3JcbiAgICogICBlbHNlXG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IEludGVybmFsRXJyb3IoZXJyKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IEludGVybmFsRXJyb3JcbiAgICogICBlbmRcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgcGFyc2VFcnJvcihlcnI6IEVycm9yIHwgc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBCYXNlRXJyb3Ige1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHJldHVybiBlcnIgYXMgYW55O1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgZXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb2RlID0gZXJyO1xuICAgICAgaWYgKGNvZGUubWF0Y2goL2FscmVhZHkgZXhpc3R8dXBkYXRlIGNvbmZsaWN0L2cpKVxuICAgICAgICByZXR1cm4gbmV3IENvbmZsaWN0RXJyb3IoY29kZSk7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvbWlzc2luZ3xkZWxldGVkL2cpKSByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IoY29kZSk7XG4gICAgfSBlbHNlIGlmICgoZXJyIGFzIGFueSkuY29kZSkge1xuICAgICAgY29kZSA9IChlcnIgYXMgYW55KS5jb2RlO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAoKGVyciBhcyBhbnkpLnN0YXR1c0NvZGUpIHtcbiAgICAgIGNvZGUgPSAoZXJyIGFzIGFueSkuc3RhdHVzQ29kZTtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbiB8fCBlcnIubWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29kZS50b1N0cmluZygpKSB7XG4gICAgICBjYXNlIFwiNDAxXCI6XG4gICAgICBjYXNlIFwiNDEyXCI6XG4gICAgICBjYXNlIFwiNDA5XCI6XG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihyZWFzb24gYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgXCI0MDRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwMFwiOlxuICAgICAgICBpZiAoY29kZS50b1N0cmluZygpLm1hdGNoKC9Ob1xcc2luZGV4XFxzZXhpc3RzL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgSW5kZXhFcnJvcihlcnIpO1xuICAgICAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL0VDT05OUkVGVVNFRC9nKSlcbiAgICAgICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/lib/adapter.d.ts CHANGED
@@ -47,7 +47,7 @@ import { CouchDBStatement } from "./query";
47
47
  * }
48
48
  * }
49
49
  */
50
- export declare abstract class CouchDBAdapter<Y, F extends RepositoryFlags, C extends Context<F>> extends Adapter<Y, MangoQuery, F, C> {
50
+ export declare abstract class CouchDBAdapter<Y, CONN, F extends RepositoryFlags, C extends Context<F>> extends Adapter<Y, CONN, MangoQuery, F, C> {
51
51
  protected constructor(scope: Y, flavour: string, alias?: string);
52
52
  /**
53
53
  * @description Creates a new CouchDB statement for querying
@@ -47,7 +47,7 @@ import { CouchDBStatement } from "./query";
47
47
  * }
48
48
  * }
49
49
  */
50
- export declare abstract class CouchDBAdapter<Y, F extends RepositoryFlags, C extends Context<F>> extends Adapter<Y, MangoQuery, F, C> {
50
+ export declare abstract class CouchDBAdapter<Y, CONN, F extends RepositoryFlags, C extends Context<F>> extends Adapter<Y, CONN, MangoQuery, F, C> {
51
51
  protected constructor(scope: Y, flavour: string, alias?: string);
52
52
  /**
53
53
  * @description Creates a new CouchDB statement for querying
@@ -377,4 +377,4 @@ __decorate([
377
377
  __metadata("design:paramtypes", [String, Array, Array]),
378
378
  __metadata("design:returntype", void 0)
379
379
  ], CouchDBAdapter.prototype, "updateAllPrefix", null);
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxPQUFPLEVBR1AsZUFBZSxFQUNmLGVBQWUsRUFDZixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLHVCQUFvQjtBQUM5RCxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFFYixhQUFhLEVBQ2IsYUFBYSxFQUNiLFlBQVksR0FFYixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQ0FBNkI7QUFFdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBaUI7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHlCQUFnQjtBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQU0sT0FBZ0IsY0FJcEIsU0FBUSxPQUE0QjtJQUNwQyxZQUFzQixLQUFRLEVBQUUsT0FBZSxFQUFFLEtBQWM7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNwQixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRyxJQUFZLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7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QkFDRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO29CQUN4QyxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE1WEM7SUFEQyxLQUFLLEVBQUU7OztvQ0FDc0IsZ0JBQWdCOytDQUU3QztBQVNLO0lBREwsS0FBSyxFQUFFOzs7OzhDQUdQO0FBeUNTO0lBRFQsS0FBSyxFQUFFOzs7O29EQVlQO0FBVVM7SUFEVCxLQUFLLEVBQUU7Ozs7NERBVVA7QUFXUztJQURULEtBQUssRUFBRTs7OztrREFXUDtBQTRCUztJQURULEtBQUssRUFBRTs7OztxREFpQlA7QUEwQkQ7SUFEQyxLQUFLLEVBQUU7Ozs7a0RBaUJQO0FBNEJTO0lBRFQsS0FBSyxFQUFFOzs7O3FEQXVCUCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFkYXB0ZXIsXG4gIFNlcXVlbmNlLFxuICB0eXBlIFNlcXVlbmNlT3B0aW9ucyxcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBDb25uZWN0aW9uRXJyb3IsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMsIHJlc2VydmVkQXR0cmlidXRlcyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBDb250ZXh0LFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBwcmVmaXhNZXRob2QsXG4gIFJlcG9zaXRvcnlGbGFncyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5cbmltcG9ydCB7IENvdWNoREJTZXF1ZW5jZSB9IGZyb20gXCIuL3NlcXVlbmNlcy9TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSW5kZXhFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb3VjaERCU3RhdGVtZW50IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmltcG9ydCB7IGZpbmFsIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0IGFkYXB0ZXIgZm9yIENvdWNoREIgZGF0YWJhc2Ugb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciBDb3VjaERCIGRhdGFiYXNlIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBDUlVEIG9wZXJhdGlvbnMsIHNlcXVlbmNlIG1hbmFnZW1lbnQsIGFuZCBlcnJvciBoYW5kbGluZ1xuICogQHRlbXBsYXRlIFkgLSBUaGUgc2NvcGUgdHlwZVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGVcbiAqIEBwYXJhbSB7WX0gc2NvcGUgLSBUaGUgc2NvcGUgZm9yIHRoZSBhZGFwdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gZmxhdm91ciAtIFRoZSBmbGF2b3VyIG9mIHRoZSBhZGFwdGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgYWRhcHRlclxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSBvZiBleHRlbmRpbmcgQ291Y2hEQkFkYXB0ZXJcbiAqIGNsYXNzIE15Q291Y2hEQkFkYXB0ZXIgZXh0ZW5kcyBDb3VjaERCQWRhcHRlcjxNeVNjb3BlLCBNeUZsYWdzLCBNeUNvbnRleHQ+IHtcbiAqICAgY29uc3RydWN0b3Ioc2NvcGU6IE15U2NvcGUpIHtcbiAqICAgICBzdXBlcihzY29wZSwgJ215LWNvdWNoZGInLCAnbXktYWxpYXMnKTtcbiAqICAgfVxuICpcbiAqICAgLy8gSW1wbGVtZW50IGFic3RyYWN0IG1ldGhvZHNcbiAqICAgYXN5bmMgaW5kZXg8TSBleHRlbmRzIE1vZGVsPiguLi5tb2RlbHM6IENvbnN0cnVjdG9yPE0+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyByYXc8Uj4ocmF3SW5wdXQ6IE1hbmdvUXVlcnksIGRvY3NPbmx5OiBib29sZWFuKTogUHJvbWlzZTxSPiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgY3JlYXRlKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyByZWFkKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHVwZGF0ZSh0YWJsZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyB8IG51bWJlciwgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgZGVsZXRlKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvdWNoREJBZGFwdGVyPFxuICBZLFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4gZXh0ZW5kcyBBZGFwdGVyPFksIE1hbmdvUXVlcnksIEYsIEM+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBZLCBmbGF2b3VyOiBzdHJpbmcsIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGZsYXZvdXIsIGFsaWFzKTtcbiAgICBbdGhpcy5jcmVhdGUsIHRoaXMuY3JlYXRlQWxsLCB0aGlzLnVwZGF0ZSwgdGhpcy51cGRhdGVBbGxdLmZvckVhY2goKG0pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBtLm5hbWU7XG4gICAgICBwcmVmaXhNZXRob2QodGhpcywgbSwgKHRoaXMgYXMgYW55KVtuYW1lICsgXCJQcmVmaXhcIl0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IENvdWNoREIgc3RhdGVtZW50IGZvciBxdWVyeWluZ1xuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgQ291Y2hEQlN0YXRlbWVudCBpbnN0YW5jZSBmb3IgYnVpbGRpbmcgcXVlcmllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEByZXR1cm4ge0NvdWNoREJTdGF0ZW1lbnQ8TSwgYW55Pn0gQSBuZXcgQ291Y2hEQlN0YXRlbWVudCBpbnN0YW5jZVxuICAgKi9cbiAgQGZpbmFsKClcbiAgU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbD4oKTogQ291Y2hEQlN0YXRlbWVudDxNLCBhbnk+IHtcbiAgICByZXR1cm4gbmV3IENvdWNoREJTdGF0ZW1lbnQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgQ291Y2hEQiBzZXF1ZW5jZVxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgQ291Y2hEQlNlcXVlbmNlIGluc3RhbmNlIGZvciBtYW5hZ2luZyBzZXF1ZW5jZXNcbiAgICogQHBhcmFtIHtTZXF1ZW5jZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHNlcXVlbmNlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U2VxdWVuY2U+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG5ldyBTZXF1ZW5jZSBpbnN0YW5jZVxuICAgKi9cbiAgQGZpbmFsKClcbiAgYXN5bmMgU2VxdWVuY2Uob3B0aW9uczogU2VxdWVuY2VPcHRpb25zKTogUHJvbWlzZTxTZXF1ZW5jZT4ge1xuICAgIHJldHVybiBuZXcgQ291Y2hEQlNlcXVlbmNlKG9wdGlvbnMsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgYWRhcHRlciBieSBjcmVhdGluZyBpbmRleGVzIGZvciBhbGwgbWFuYWdlZCBtb2RlbHNcbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFiYXNlIGluZGV4ZXMgZm9yIGFsbCBtb2RlbHMgbWFuYWdlZCBieSB0aGlzIGFkYXB0ZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYW5hZ2VkTW9kZWxzID0gQWRhcHRlci5tb2RlbHModGhpcy5mbGF2b3VyKTtcbiAgICByZXR1cm4gdGhpcy5pbmRleCguLi5tYW5hZ2VkTW9kZWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBpbmRleGVzIGZvciB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gY3JlYXRlIGRhdGFiYXNlIGluZGV4ZXMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kZWxzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHsuLi5Db25zdHJ1Y3RvcjxNPn0gbW9kZWxzIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9ycyB0byBjcmVhdGUgaW5kZXhlcyBmb3JcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgaW5kZXhlcyBhcmUgY3JlYXRlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluZGV4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgLi4ubW9kZWxzOiBDb25zdHJ1Y3RvcjxNPltdXG4gICk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBNYW5nbyBxdWVyeSBhZ2FpbnN0IHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGV4ZWN1dGUgcmF3IE1hbmdvIHF1ZXJpZXNcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmVzdWx0IHR5cGVcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSByYXdJbnB1dCAtIFRoZSByYXcgTWFuZ28gcXVlcnkgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvY3NPbmx5IC0gV2hldGhlciB0byByZXR1cm4gb25seSB0aGUgZG9jdW1lbnRzIG9yIHRoZSBmdWxsIHJlc3BvbnNlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Uj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBxdWVyeSByZXN1bHRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHJhdzxSPihyYXdJbnB1dDogTWFuZ29RdWVyeSwgZG9jc09ubHk6IGJvb2xlYW4pOiBQcm9taXNlPFI+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNzaWducyBtZXRhZGF0YSB0byBhIG1vZGVsXG4gICAqIEBzdW1tYXJ5IEFkZHMgcmV2aXNpb24gbWV0YWRhdGEgdG8gYSBtb2RlbCBhcyBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gYXNzaWduIG1ldGFkYXRhIHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXYgLSBUaGUgcmV2aXNpb24gc3RyaW5nIHRvIGFzc2lnblxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUaGUgbW9kZWwgd2l0aCBtZXRhZGF0YSBhc3NpZ25lZFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGFzc2lnbk1ldGFkYXRhKFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHJldjogc3RyaW5nXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogcmV2LFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNzaWducyBtZXRhZGF0YSB0byBtdWx0aXBsZSBtb2RlbHNcbiAgICogQHN1bW1hcnkgQWRkcyByZXZpc2lvbiBtZXRhZGF0YSB0byBtdWx0aXBsZSBtb2RlbHMgYXMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICAgKiBAcGFyYW0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBhc3NpZ24gbWV0YWRhdGEgdG9cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcmV2cyAtIFRoZSByZXZpc2lvbiBzdHJpbmdzIHRvIGFzc2lnblxuICAgKiBAcmV0dXJuIFRoZSBtb2RlbHMgd2l0aCBtZXRhZGF0YSBhc3NpZ25lZFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGFzc2lnbk11bHRpcGxlTWV0YWRhdGEoXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgcmV2czogc3RyaW5nW11cbiAgKTogUmVjb3JkPHN0cmluZywgYW55PltdIHtcbiAgICBtb2RlbHMuZm9yRWFjaCgobSwgaSkgPT4ge1xuICAgICAgUmVwb3NpdG9yeS5zZXRNZXRhZGF0YShtIGFzIGFueSwgcmV2c1tpXSk7XG4gICAgICByZXR1cm4gbTtcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kZWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhIHJlY29yZCBmb3IgY3JlYXRpb25cbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gYSByZWNvcmQgYmVmb3JlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZCwgYW5kIHByZXBhcmVkIHJlY29yZFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGNyZWF0ZVByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWwpO1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZCwgcmVjb3JkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyByZWNvcmQgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gY3JlYXRlIGEgbmV3IHJlY29yZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgcmVjb3JkcyBmb3IgY3JlYXRpb25cbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gbXVsdGlwbGUgcmVjb3JkcyBiZWZvcmUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBpZHMgLSBUaGUgSURzIG9mIHRoZSByZWNvcmRzXG4gICAqIEBwYXJhbSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIHByZXBhcmVcbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhYmxlTmFtZSwgaWRzLCBhbmQgcHJlcGFyZWQgcmVjb3Jkc1xuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBpZHMgYW5kIG1vZGVscyBhcnJheXMgaGF2ZSBkaWZmZXJlbnQgbGVuZ3Roc1xuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIGNyZWF0ZUFsbFByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W11cbiAgKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG5cbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoaWQsIGNvdW50KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsc1tjb3VudF0pO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWRzLCByZWNvcmRzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byByZWFkIGEgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVhZCByZWNvcmRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHJlYWQoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSByZWNvcmQgZm9yIHVwZGF0ZVxuICAgKiBAc3VtbWFyeSBBZGRzIG5lY2Vzc2FyeSBDb3VjaERCIGZpZWxkcyB0byBhIHJlY29yZCBiZWZvcmUgdXBkYXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSBtb2RlbCAtIFRoZSBtb2RlbCB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkLCBhbmQgcHJlcGFyZWQgcmVjb3JkXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIG5vIHJldmlzaW9uIG51bWJlciBpcyBmb3VuZCBpbiB0aGUgbW9kZWxcbiAgICovXG4gIEBmaW5hbCgpXG4gIHVwZGF0ZVByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICBjb25zdCByZXYgPSBtb2RlbFtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdO1xuICAgIGlmICghcmV2KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyByZXZpc2lvbiBudW1iZXIgZm91bmQgZm9yIHJlY29yZCB3aXRoIGlkICR7aWR9YFxuICAgICAgKTtcbiAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWwpO1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5SRVZdID0gcmV2O1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZCwgcmVjb3JkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIHJlY29yZCBpbiB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byB1cGRhdGUgYSByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSBtb2RlbCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgcmVjb3JkcyBmb3IgdXBkYXRlXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIG11bHRpcGxlIHJlY29yZHMgYmVmb3JlIHVwZGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGlkcyAtIFRoZSBJRHMgb2YgdGhlIHJlY29yZHNcbiAgICogQHBhcmFtIG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZHMsIGFuZCBwcmVwYXJlZCByZWNvcmRzXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGlkcyBhbmQgbW9kZWxzIGFycmF5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzIG9yIGlmIG5vIHJldmlzaW9uIG51bWJlciBpcyBmb3VuZCBpbiBhIG1vZGVsXG4gICAqL1xuICBAZmluYWwoKVxuICBwcm90ZWN0ZWQgdXBkYXRlQWxsUHJlZml4KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkczogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXVxuICApIHtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSBpZHMubWFwKChpZCwgY291bnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgICBjb25zdCByZXYgPSBtb2RlbHNbY291bnRdW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV07XG4gICAgICBpZiAoIXJldilcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYE5vIHJldmlzaW9uIG51bWJlciBmb3VuZCBmb3IgcmVjb3JkIHdpdGggaWQgJHtpZH1gXG4gICAgICAgICk7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWxzW2NvdW50XSk7XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuUkVWXSA9IHJldjtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkcywgcmVjb3Jkc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBkZWxldGUgYSByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRlbGV0ZWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSBkZWxldGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIGEgQ291Y2hEQiBkb2N1bWVudCBJRFxuICAgKiBAc3VtbWFyeSBDb21iaW5lcyB0aGUgdGFibGUgbmFtZSBhbmQgSUQgdG8gY3JlYXRlIGEgQ291Y2hEQiBkb2N1bWVudCBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgQ291Y2hEQiBkb2N1bWVudCBJRFxuICAgKi9cbiAgcHJvdGVjdGVkIGdlbmVyYXRlSWQodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWRdLmpvaW4oQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuIGVycm9yIGFuZCBjb252ZXJ0cyBpdCB0byBhIEJhc2VFcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB2YXJpb3VzIGVycm9yIHR5cGVzIHRvIGFwcHJvcHJpYXRlIEJhc2VFcnJvciBzdWJ0eXBlc1xuICAgKiBAcGFyYW0ge0Vycm9yfHN0cmluZ30gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIE9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGVycm9yXG4gICAqIEByZXR1cm4ge0Jhc2VFcnJvcn0gVGhlIHBhcnNlZCBlcnJvciBhcyBhIEJhc2VFcnJvclxuICAgKi9cbiAgcGFyc2VFcnJvcihlcnI6IEVycm9yIHwgc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBCYXNlRXJyb3Ige1xuICAgIHJldHVybiBDb3VjaERCQWRhcHRlci5wYXJzZUVycm9yKGVyciwgcmVhc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZFxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIGFuIGF0dHJpYnV0ZSBuYW1lIGlzIHJlc2VydmVkIGluIENvdWNoREJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHIgLSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1Jlc2VydmVkKGF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWF0dHIubWF0Y2gocmVzZXJ2ZWRBdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3RhdGljIG1ldGhvZCB0byBwYXJzZSBhbiBlcnJvciBhbmQgY29udmVydCBpdCB0byBhIEJhc2VFcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB2YXJpb3VzIGVycm9yIHR5cGVzIHRvIGFwcHJvcHJpYXRlIEJhc2VFcnJvciBzdWJ0eXBlcyBiYXNlZCBvbiBlcnJvciBjb2RlcyBhbmQgbWVzc2FnZXNcbiAgICogQHBhcmFtIHtFcnJvcnxzdHJpbmd9IGVyciAtIFRoZSBlcnJvciB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBPcHRpb25hbCByZWFzb24gZm9yIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IFRoZSBwYXJzZWQgZXJyb3IgYXMgYSBCYXNlRXJyb3JcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgcGFyc2VFcnJvclxuICAgKiAgIHBhcnRpY2lwYW50IEVycm9yVHlwZXNcbiAgICpcbiAgICogICBDYWxsZXItPj5wYXJzZUVycm9yOiBlcnIsIHJlYXNvblxuICAgKiAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBDaGVjayBpZiBlcnIgaXMgYWxyZWFkeSBhIEJhc2VFcnJvclxuICAgKiAgIGFsdCBlcnIgaXMgQmFzZUVycm9yXG4gICAqICAgICBwYXJzZUVycm9yLS0+PkNhbGxlcjogcmV0dXJuIGVyclxuICAgKiAgIGVsc2UgZXJyIGlzIHN0cmluZ1xuICAgKiAgICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IEV4dHJhY3QgY29kZSBmcm9tIHN0cmluZ1xuICAgKiAgICAgYWx0IGNvZGUgbWF0Y2hlcyBcImFscmVhZHkgZXhpc3R8dXBkYXRlIGNvbmZsaWN0XCJcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBDb25mbGljdEVycm9yKGNvZGUpXG4gICAqICAgICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBDb25mbGljdEVycm9yXG4gICAqICAgICBlbHNlIGNvZGUgbWF0Y2hlcyBcIm1pc3Npbmd8ZGVsZXRlZFwiXG4gICAqICAgICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKVxuICAgKiAgICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogTm90Rm91bmRFcnJvclxuICAgKiAgICAgZW5kXG4gICAqICAgZWxzZSBlcnIgaGFzIGNvZGUgcHJvcGVydHlcbiAgICogICAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBFeHRyYWN0IGNvZGUgYW5kIHJlYXNvblxuICAgKiAgIGVsc2UgZXJyIGhhcyBzdGF0dXNDb2RlIHByb3BlcnR5XG4gICAqICAgICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogRXh0cmFjdCBjb2RlIGFuZCByZWFzb25cbiAgICogICBlbHNlXG4gICAqICAgICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogVXNlIGVyci5tZXNzYWdlIGFzIGNvZGVcbiAgICogICBlbmRcbiAgICpcbiAgICogICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogU3dpdGNoIG9uIGNvZGVcbiAgICogICBhbHQgY29kZSBpcyA0MDEsIDQxMiwgb3IgNDA5XG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IENvbmZsaWN0RXJyb3IocmVhc29uKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IENvbmZsaWN0RXJyb3JcbiAgICogICBlbHNlIGNvZGUgaXMgNDA0XG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbHNlIGNvZGUgaXMgNDAwXG4gICAqICAgICBhbHQgY29kZSBtYXRjaGVzIFwiTm8gaW5kZXggZXhpc3RzXCJcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBJbmRleEVycm9yKGVycilcbiAgICogICAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IEluZGV4RXJyb3JcbiAgICogICAgIGVsc2VcbiAgICogICAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBJbnRlcm5hbEVycm9yKGVycilcbiAgICogICAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IEludGVybmFsRXJyb3JcbiAgICogICAgIGVuZFxuICAgKiAgIGVsc2UgY29kZSBtYXRjaGVzIFwiRUNPTk5SRUZVU0VEXCJcbiAgICogICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycilcbiAgICogICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBDb25uZWN0aW9uRXJyb3JcbiAgICogICBlbHNlXG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IEludGVybmFsRXJyb3IoZXJyKVxuICAgKiAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IEludGVybmFsRXJyb3JcbiAgICogICBlbmRcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgcGFyc2VFcnJvcihlcnI6IEVycm9yIHwgc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBCYXNlRXJyb3Ige1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHJldHVybiBlcnIgYXMgYW55O1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgZXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb2RlID0gZXJyO1xuICAgICAgaWYgKGNvZGUubWF0Y2goL2FscmVhZHkgZXhpc3R8dXBkYXRlIGNvbmZsaWN0L2cpKVxuICAgICAgICByZXR1cm4gbmV3IENvbmZsaWN0RXJyb3IoY29kZSk7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvbWlzc2luZ3xkZWxldGVkL2cpKSByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IoY29kZSk7XG4gICAgfSBlbHNlIGlmICgoZXJyIGFzIGFueSkuY29kZSkge1xuICAgICAgY29kZSA9IChlcnIgYXMgYW55KS5jb2RlO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAoKGVyciBhcyBhbnkpLnN0YXR1c0NvZGUpIHtcbiAgICAgIGNvZGUgPSAoZXJyIGFzIGFueSkuc3RhdHVzQ29kZTtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbiB8fCBlcnIubWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29kZS50b1N0cmluZygpKSB7XG4gICAgICBjYXNlIFwiNDAxXCI6XG4gICAgICBjYXNlIFwiNDEyXCI6XG4gICAgICBjYXNlIFwiNDA5XCI6XG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihyZWFzb24gYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgXCI0MDRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwMFwiOlxuICAgICAgICBpZiAoY29kZS50b1N0cmluZygpLm1hdGNoKC9Ob1xcc2luZGV4XFxzZXhpc3RzL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgSW5kZXhFcnJvcihlcnIpO1xuICAgICAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL0VDT05OUkVGVVNFRC9nKSlcbiAgICAgICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxPQUFPLEVBR1AsZUFBZSxFQUNmLGVBQWUsRUFDZixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLHVCQUFvQjtBQUM5RCxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFFYixhQUFhLEVBQ2IsYUFBYSxFQUNiLFlBQVksR0FFYixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQ0FBNkI7QUFFdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBaUI7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHlCQUFnQjtBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQU0sT0FBZ0IsY0FLcEIsU0FBUSxPQUFrQztJQUMxQyxZQUFzQixLQUFRLEVBQUUsT0FBZSxFQUFFLEtBQWM7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNwQixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRyxJQUFZLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7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Z0JBQ0UsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztvQkFDeEMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNVhDO0lBREMsS0FBSyxFQUFFOzs7b0NBQ3NCLGdCQUFnQjsrQ0FFN0M7QUFTSztJQURMLEtBQUssRUFBRTs7Ozs4Q0FHUDtBQXlDUztJQURULEtBQUssRUFBRTs7OztvREFZUDtBQVVTO0lBRFQsS0FBSyxFQUFFOzs7OzREQVVQO0FBV1M7SUFEVCxLQUFLLEVBQUU7Ozs7a0RBV1A7QUE0QlM7SUFEVCxLQUFLLEVBQUU7Ozs7cURBaUJQO0FBMEJEO0lBREMsS0FBSyxFQUFFOzs7O2tEQWlCUDtBQTRCUztJQURULEtBQUssRUFBRTs7OztxREF1QlAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZGFwdGVyLFxuICBTZXF1ZW5jZSxcbiAgdHlwZSBTZXF1ZW5jZU9wdGlvbnMsXG4gIFBlcnNpc3RlbmNlS2V5cyxcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBSZXBvc2l0b3J5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IENvdWNoREJLZXlzLCByZXNlcnZlZEF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIEJhc2VFcnJvcixcbiAgQ29uZmxpY3RFcnJvcixcbiAgQ29udGV4dCxcbiAgSW50ZXJuYWxFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgcHJlZml4TWV0aG9kLFxuICBSZXBvc2l0b3J5RmxhZ3MsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuXG5pbXBvcnQgeyBDb3VjaERCU2VxdWVuY2UgfSBmcm9tIFwiLi9zZXF1ZW5jZXMvU2VxdWVuY2VcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEluZGV4RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IE1hbmdvUXVlcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ291Y2hEQlN0YXRlbWVudCB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5pbXBvcnQgeyBmaW5hbCB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBhZGFwdGVyIGZvciBDb3VjaERCIGRhdGFiYXNlIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ291Y2hEQiBkYXRhYmFzZSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgQ1JVRCBvcGVyYXRpb25zLCBzZXF1ZW5jZSBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqIEB0ZW1wbGF0ZSBZIC0gVGhlIHNjb3BlIHR5cGVcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlXG4gKiBAcGFyYW0ge1l9IHNjb3BlIC0gVGhlIHNjb3BlIGZvciB0aGUgYWRhcHRlclxuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgLSBUaGUgZmxhdm91ciBvZiB0aGUgYWRhcHRlclxuICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXJcbiAqIEBjbGFzc1xuICogQGV4YW1wbGVcbiAqIC8vIEV4YW1wbGUgb2YgZXh0ZW5kaW5nIENvdWNoREJBZGFwdGVyXG4gKiBjbGFzcyBNeUNvdWNoREJBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXI8TXlTY29wZSwgTXlGbGFncywgTXlDb250ZXh0PiB7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBNeVNjb3BlKSB7XG4gKiAgICAgc3VwZXIoc2NvcGUsICdteS1jb3VjaGRiJywgJ215LWFsaWFzJyk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEltcGxlbWVudCBhYnN0cmFjdCBtZXRob2RzXG4gKiAgIGFzeW5jIGluZGV4PE0gZXh0ZW5kcyBNb2RlbD4oLi4ubW9kZWxzOiBDb25zdHJ1Y3RvcjxNPltdKTogUHJvbWlzZTx2b2lkPiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcmF3PFI+KHJhd0lucHV0OiBNYW5nb1F1ZXJ5LCBkb2NzT25seTogYm9vbGVhbik6IFByb21pc2U8Uj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIGNyZWF0ZSh0YWJsZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyB8IG51bWJlciwgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb25cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgcmVhZCh0YWJsZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyB8IG51bWJlciwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKlxuICogICBhc3luYyB1cGRhdGUodGFibGVOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcgfCBudW1iZXIsIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIGRlbGV0ZSh0YWJsZU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyB8IG51bWJlciwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAqICAgICAvLyBJbXBsZW1lbnRhdGlvblxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb3VjaERCQWRhcHRlcjxcbiAgWSxcbiAgQ09OTixcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+IGV4dGVuZHMgQWRhcHRlcjxZLCBDT05OLCBNYW5nb1F1ZXJ5LCBGLCBDPiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihzY29wZTogWSwgZmxhdm91cjogc3RyaW5nLCBhbGlhcz86IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBmbGF2b3VyLCBhbGlhcyk7XG4gICAgW3RoaXMuY3JlYXRlLCB0aGlzLmNyZWF0ZUFsbCwgdGhpcy51cGRhdGUsIHRoaXMudXBkYXRlQWxsXS5mb3JFYWNoKChtKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gbS5uYW1lO1xuICAgICAgcHJlZml4TWV0aG9kKHRoaXMsIG0sICh0aGlzIGFzIGFueSlbbmFtZSArIFwiUHJlZml4XCJdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBDb3VjaERCIHN0YXRlbWVudCBmb3IgcXVlcnlpbmdcbiAgICogQHN1bW1hcnkgRmFjdG9yeSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgbmV3IENvdWNoREJTdGF0ZW1lbnQgaW5zdGFuY2UgZm9yIGJ1aWxkaW5nIHF1ZXJpZXNcbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAcmV0dXJuIHtDb3VjaERCU3RhdGVtZW50PE0sIGFueT59IEEgbmV3IENvdWNoREJTdGF0ZW1lbnQgaW5zdGFuY2VcbiAgICovXG4gIEBmaW5hbCgpXG4gIFN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWw+KCk6IENvdWNoREJTdGF0ZW1lbnQ8TSwgYW55PiB7XG4gICAgcmV0dXJuIG5ldyBDb3VjaERCU3RhdGVtZW50KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IENvdWNoREIgc2VxdWVuY2VcbiAgICogQHN1bW1hcnkgRmFjdG9yeSBtZXRob2QgdGhhdCBjcmVhdGVzIGEgbmV3IENvdWNoREJTZXF1ZW5jZSBpbnN0YW5jZSBmb3IgbWFuYWdpbmcgc2VxdWVuY2VzXG4gICAqIEBwYXJhbSB7U2VxdWVuY2VPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBzZXF1ZW5jZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFNlcXVlbmNlPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBuZXcgU2VxdWVuY2UgaW5zdGFuY2VcbiAgICovXG4gIEBmaW5hbCgpXG4gIGFzeW5jIFNlcXVlbmNlKG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucyk6IFByb21pc2U8U2VxdWVuY2U+IHtcbiAgICByZXR1cm4gbmV3IENvdWNoREJTZXF1ZW5jZShvcHRpb25zLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGFkYXB0ZXIgYnkgY3JlYXRpbmcgaW5kZXhlcyBmb3IgYWxsIG1hbmFnZWQgbW9kZWxzXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhYmFzZSBpbmRleGVzIGZvciBhbGwgbW9kZWxzIG1hbmFnZWQgYnkgdGhpcyBhZGFwdGVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGVcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWFuYWdlZE1vZGVscyA9IEFkYXB0ZXIubW9kZWxzKHRoaXMuZmxhdm91cik7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXgoLi4ubWFuYWdlZE1vZGVscyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgaW5kZXhlcyBmb3IgdGhlIGdpdmVuIG1vZGVsc1xuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBpbmRleGVzIGZvciB0aGUgc3BlY2lmaWVkIG1vZGVsc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7Li4uQ29uc3RydWN0b3I8TT59IG1vZGVscyAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvcnMgdG8gY3JlYXRlIGluZGV4ZXMgZm9yXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGluZGV4ZXMgYXJlIGNyZWF0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbmRleDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIC4uLm1vZGVsczogQ29uc3RydWN0b3I8TT5bXVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgTWFuZ28gcXVlcnkgYWdhaW5zdCB0aGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBleGVjdXRlIHJhdyBNYW5nbyBxdWVyaWVzXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcmF3SW5wdXQgLSBUaGUgcmF3IE1hbmdvIHF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIHtib29sZWFufSBkb2NzT25seSAtIFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgdGhlIGRvY3VtZW50cyBvciB0aGUgZnVsbCByZXNwb25zZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFI+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcXVlcnkgcmVzdWx0XG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSByYXc8Uj4ocmF3SW5wdXQ6IE1hbmdvUXVlcnksIGRvY3NPbmx5OiBib29sZWFuKTogUHJvbWlzZTxSPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFzc2lnbnMgbWV0YWRhdGEgdG8gYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBBZGRzIHJldmlzaW9uIG1ldGFkYXRhIHRvIGEgbW9kZWwgYXMgYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGFzc2lnbiBtZXRhZGF0YSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcmV2IC0gVGhlIHJldmlzaW9uIHN0cmluZyB0byBhc3NpZ25cbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn0gVGhlIG1vZGVsIHdpdGggbWV0YWRhdGEgYXNzaWduZWRcbiAgICovXG4gIEBmaW5hbCgpXG4gIHByb3RlY3RlZCBhc3NpZ25NZXRhZGF0YShcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICByZXY6IHN0cmluZ1xuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kZWwsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHJldixcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFzc2lnbnMgbWV0YWRhdGEgdG8gbXVsdGlwbGUgbW9kZWxzXG4gICAqIEBzdW1tYXJ5IEFkZHMgcmV2aXNpb24gbWV0YWRhdGEgdG8gbXVsdGlwbGUgbW9kZWxzIGFzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICogQHBhcmFtIG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gYXNzaWduIG1ldGFkYXRhIHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHJldnMgLSBUaGUgcmV2aXNpb24gc3RyaW5ncyB0byBhc3NpZ25cbiAgICogQHJldHVybiBUaGUgbW9kZWxzIHdpdGggbWV0YWRhdGEgYXNzaWduZWRcbiAgICovXG4gIEBmaW5hbCgpXG4gIHByb3RlY3RlZCBhc3NpZ25NdWx0aXBsZU1ldGFkYXRhKFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIHJldnM6IHN0cmluZ1tdXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT5bXSB7XG4gICAgbW9kZWxzLmZvckVhY2goKG0sIGkpID0+IHtcbiAgICAgIFJlcG9zaXRvcnkuc2V0TWV0YWRhdGEobSBhcyBhbnksIHJldnNbaV0pO1xuICAgICAgcmV0dXJuIG07XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSByZWNvcmQgZm9yIGNyZWF0aW9uXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIGEgcmVjb3JkIGJlZm9yZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHByZXBhcmVcbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhYmxlTmFtZSwgaWQsIGFuZCBwcmVwYXJlZCByZWNvcmRcbiAgICovXG4gIEBmaW5hbCgpXG4gIHByb3RlY3RlZCBjcmVhdGVQcmVmaXgoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApIHtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWQsIHJlY29yZF07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgcmVjb3JkIGluIHRoZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGNyZWF0ZSBhIG5ldyByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSBtb2RlbCB0byBjcmVhdGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjcmVhdGVkIHJlY29yZFxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgY3JlYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIHJlY29yZHMgZm9yIGNyZWF0aW9uXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIG11bHRpcGxlIHJlY29yZHMgYmVmb3JlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmdbXXxudW1iZXJbXX0gaWRzIC0gVGhlIElEcyBvZiB0aGUgcmVjb3Jkc1xuICAgKiBAcGFyYW0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkcywgYW5kIHByZXBhcmVkIHJlY29yZHNcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgaWRzIGFuZCBtb2RlbHMgYXJyYXlzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHNcbiAgICovXG4gIEBmaW5hbCgpXG4gIHByb3RlY3RlZCBjcmVhdGVBbGxQcmVmaXgoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICkge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKGlkLCBjb3VudCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLklEXSA9IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbHNbY291bnRdKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkcywgcmVjb3Jkc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlYWRzIGEgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gcmVhZCBhIHJlY29yZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlYWQgcmVjb3JkXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSByZWFkKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgcmVjb3JkIGZvciB1cGRhdGVcbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gYSByZWNvcmQgYmVmb3JlIHVwZGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZCwgYW5kIHByZXBhcmVkIHJlY29yZFxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyByZXZpc2lvbiBudW1iZXIgaXMgZm91bmQgaW4gdGhlIG1vZGVsXG4gICAqL1xuICBAZmluYWwoKVxuICB1cGRhdGVQcmVmaXgoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApIHtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgY29uc3QgcmV2ID0gbW9kZWxbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgICBpZiAoIXJldilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgTm8gcmV2aXNpb24gbnVtYmVyIGZvdW5kIGZvciByZWNvcmQgd2l0aCBpZCAke2lkfWBcbiAgICAgICk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuUkVWXSA9IHJldjtcbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWQsIHJlY29yZF07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgYSByZWNvcmQgaW4gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gdXBkYXRlIGEgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB1cGRhdGVkIHJlY29yZFxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgdXBkYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIHJlY29yZHMgZm9yIHVwZGF0ZVxuICAgKiBAc3VtbWFyeSBBZGRzIG5lY2Vzc2FyeSBDb3VjaERCIGZpZWxkcyB0byBtdWx0aXBsZSByZWNvcmRzIGJlZm9yZSB1cGRhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBpZHMgLSBUaGUgSURzIG9mIHRoZSByZWNvcmRzXG4gICAqIEBwYXJhbSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIHByZXBhcmVcbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhYmxlTmFtZSwgaWRzLCBhbmQgcHJlcGFyZWQgcmVjb3Jkc1xuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBpZHMgYW5kIG1vZGVscyBhcnJheXMgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RocyBvciBpZiBubyByZXZpc2lvbiBudW1iZXIgaXMgZm91bmQgaW4gYSBtb2RlbFxuICAgKi9cbiAgQGZpbmFsKClcbiAgcHJvdGVjdGVkIHVwZGF0ZUFsbFByZWZpeChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W11cbiAgKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG5cbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoaWQsIGNvdW50KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgICAgY29uc3QgcmV2ID0gbW9kZWxzW2NvdW50XVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdO1xuICAgICAgaWYgKCFyZXYpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIGBObyByZXZpc2lvbiBudW1iZXIgZm91bmQgZm9yIHJlY29yZCB3aXRoIGlkICR7aWR9YFxuICAgICAgICApO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsc1tjb3VudF0pO1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLlJFVl0gPSByZXY7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZHMsIHJlY29yZHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIGEgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gZGVsZXRlIGEgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBkZWxldGVkIHJlY29yZFxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIENvdWNoREIgZG9jdW1lbnQgSURcbiAgICogQHN1bW1hcnkgQ29tYmluZXMgdGhlIHRhYmxlIG5hbWUgYW5kIElEIHRvIGNyZWF0ZSBhIENvdWNoREIgZG9jdW1lbnQgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSByZWNvcmRcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIENvdWNoREIgZG9jdW1lbnQgSURcbiAgICovXG4gIHByb3RlY3RlZCBnZW5lcmF0ZUlkKHRhYmxlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkXS5qb2luKENvdWNoREJLZXlzLlNFUEFSQVRPUik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhbiBlcnJvciBhbmQgY29udmVydHMgaXQgdG8gYSBCYXNlRXJyb3JcbiAgICogQHN1bW1hcnkgQ29udmVydHMgdmFyaW91cyBlcnJvciB0eXBlcyB0byBhcHByb3ByaWF0ZSBCYXNlRXJyb3Igc3VidHlwZXNcbiAgICogQHBhcmFtIHtFcnJvcnxzdHJpbmd9IGVyciAtIFRoZSBlcnJvciB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBPcHRpb25hbCByZWFzb24gZm9yIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IFRoZSBwYXJzZWQgZXJyb3IgYXMgYSBCYXNlRXJyb3JcbiAgICovXG4gIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICByZXR1cm4gQ291Y2hEQkFkYXB0ZXIucGFyc2VFcnJvcihlcnIsIHJlYXNvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWRcbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyBpZiBhbiBhdHRyaWJ1dGUgbmFtZSBpcyByZXNlcnZlZCBpbiBDb3VjaERCXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNSZXNlcnZlZChhdHRyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhdHRyLm1hdGNoKHJlc2VydmVkQXR0cmlidXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyBtZXRob2QgdG8gcGFyc2UgYW4gZXJyb3IgYW5kIGNvbnZlcnQgaXQgdG8gYSBCYXNlRXJyb3JcbiAgICogQHN1bW1hcnkgQ29udmVydHMgdmFyaW91cyBlcnJvciB0eXBlcyB0byBhcHByb3ByaWF0ZSBCYXNlRXJyb3Igc3VidHlwZXMgYmFzZWQgb24gZXJyb3IgY29kZXMgYW5kIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSB7RXJyb3J8c3RyaW5nfSBlcnIgLSBUaGUgZXJyb3IgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgZXJyb3JcbiAgICogQHJldHVybiB7QmFzZUVycm9yfSBUaGUgcGFyc2VkIGVycm9yIGFzIGEgQmFzZUVycm9yXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IHBhcnNlRXJyb3JcbiAgICogICBwYXJ0aWNpcGFudCBFcnJvclR5cGVzXG4gICAqXG4gICAqICAgQ2FsbGVyLT4+cGFyc2VFcnJvcjogZXJyLCByZWFzb25cbiAgICogICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogQ2hlY2sgaWYgZXJyIGlzIGFscmVhZHkgYSBCYXNlRXJyb3JcbiAgICogICBhbHQgZXJyIGlzIEJhc2VFcnJvclxuICAgKiAgICAgcGFyc2VFcnJvci0tPj5DYWxsZXI6IHJldHVybiBlcnJcbiAgICogICBlbHNlIGVyciBpcyBzdHJpbmdcbiAgICogICAgIE5vdGUgb3ZlciBwYXJzZUVycm9yOiBFeHRyYWN0IGNvZGUgZnJvbSBzdHJpbmdcbiAgICogICAgIGFsdCBjb2RlIG1hdGNoZXMgXCJhbHJlYWR5IGV4aXN0fHVwZGF0ZSBjb25mbGljdFwiXG4gICAqICAgICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgQ29uZmxpY3RFcnJvcihjb2RlKVxuICAgKiAgICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogQ29uZmxpY3RFcnJvclxuICAgKiAgICAgZWxzZSBjb2RlIG1hdGNoZXMgXCJtaXNzaW5nfGRlbGV0ZWRcIlxuICAgKiAgICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IE5vdEZvdW5kRXJyb3IoY29kZSlcbiAgICogICAgICAgRXJyb3JUeXBlcy0tPj5DYWxsZXI6IE5vdEZvdW5kRXJyb3JcbiAgICogICAgIGVuZFxuICAgKiAgIGVsc2UgZXJyIGhhcyBjb2RlIHByb3BlcnR5XG4gICAqICAgICBOb3RlIG92ZXIgcGFyc2VFcnJvcjogRXh0cmFjdCBjb2RlIGFuZCByZWFzb25cbiAgICogICBlbHNlIGVyciBoYXMgc3RhdHVzQ29kZSBwcm9wZXJ0eVxuICAgKiAgICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IEV4dHJhY3QgY29kZSBhbmQgcmVhc29uXG4gICAqICAgZWxzZVxuICAgKiAgICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IFVzZSBlcnIubWVzc2FnZSBhcyBjb2RlXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgTm90ZSBvdmVyIHBhcnNlRXJyb3I6IFN3aXRjaCBvbiBjb2RlXG4gICAqICAgYWx0IGNvZGUgaXMgNDAxLCA0MTIsIG9yIDQwOVxuICAgKiAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBDb25mbGljdEVycm9yKHJlYXNvbilcbiAgICogICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBDb25mbGljdEVycm9yXG4gICAqICAgZWxzZSBjb2RlIGlzIDQwNFxuICAgKiAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBOb3RGb3VuZEVycm9yKHJlYXNvbilcbiAgICogICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBOb3RGb3VuZEVycm9yXG4gICAqICAgZWxzZSBjb2RlIGlzIDQwMFxuICAgKiAgICAgYWx0IGNvZGUgbWF0Y2hlcyBcIk5vIGluZGV4IGV4aXN0c1wiXG4gICAqICAgICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgSW5kZXhFcnJvcihlcnIpXG4gICAqICAgICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBJbmRleEVycm9yXG4gICAqICAgICBlbHNlXG4gICAqICAgICAgIHBhcnNlRXJyb3ItPj5FcnJvclR5cGVzOiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpXG4gICAqICAgICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBJbnRlcm5hbEVycm9yXG4gICAqICAgICBlbmRcbiAgICogICBlbHNlIGNvZGUgbWF0Y2hlcyBcIkVDT05OUkVGVVNFRFwiXG4gICAqICAgICBwYXJzZUVycm9yLT4+RXJyb3JUeXBlczogbmV3IENvbm5lY3Rpb25FcnJvcihlcnIpXG4gICAqICAgICBFcnJvclR5cGVzLS0+PkNhbGxlcjogQ29ubmVjdGlvbkVycm9yXG4gICAqICAgZWxzZVxuICAgKiAgICAgcGFyc2VFcnJvci0+PkVycm9yVHlwZXM6IG5ldyBJbnRlcm5hbEVycm9yKGVycilcbiAgICogICAgIEVycm9yVHlwZXMtLT4+Q2FsbGVyOiBJbnRlcm5hbEVycm9yXG4gICAqICAgZW5kXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yKSByZXR1cm4gZXJyIGFzIGFueTtcbiAgICBsZXQgY29kZTogc3RyaW5nID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29kZSA9IGVycjtcbiAgICAgIGlmIChjb2RlLm1hdGNoKC9hbHJlYWR5IGV4aXN0fHVwZGF0ZSBjb25mbGljdC9nKSlcbiAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKGNvZGUpO1xuICAgICAgaWYgKGNvZGUubWF0Y2goL21pc3Npbmd8ZGVsZXRlZC9nKSkgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKGNvZGUpO1xuICAgIH0gZWxzZSBpZiAoKGVyciBhcyBhbnkpLmNvZGUpIHtcbiAgICAgIGNvZGUgPSAoZXJyIGFzIGFueSkuY29kZTtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbiB8fCBlcnIubWVzc2FnZTtcbiAgICB9IGVsc2UgaWYgKChlcnIgYXMgYW55KS5zdGF0dXNDb2RlKSB7XG4gICAgICBjb2RlID0gKGVyciBhcyBhbnkpLnN0YXR1c0NvZGU7XG4gICAgICByZWFzb24gPSByZWFzb24gfHwgZXJyLm1lc3NhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvZGUudG9TdHJpbmcoKSkge1xuICAgICAgY2FzZSBcIjQwMVwiOlxuICAgICAgY2FzZSBcIjQxMlwiOlxuICAgICAgY2FzZSBcIjQwOVwiOlxuICAgICAgICByZXR1cm4gbmV3IENvbmZsaWN0RXJyb3IocmVhc29uIGFzIHN0cmluZyk7XG4gICAgICBjYXNlIFwiNDA0XCI6XG4gICAgICAgIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihyZWFzb24gYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgXCI0MDBcIjpcbiAgICAgICAgaWYgKGNvZGUudG9TdHJpbmcoKS5tYXRjaCgvTm9cXHNpbmRleFxcc2V4aXN0cy9nKSlcbiAgICAgICAgICByZXR1cm4gbmV3IEluZGV4RXJyb3IoZXJyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcm5hbEVycm9yKGVycik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY29kZS50b1N0cmluZygpLm1hdGNoKC9FQ09OTlJFRlVTRUQvZykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcm5hbEVycm9yKGVycik7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -18,4 +18,4 @@ export * from "./query";
18
18
  * @summary The version string of the for-couchdb package
19
19
  * @const VERSION
20
20
  */
21
- export declare const VERSION = "0.3.9";
21
+ export declare const VERSION = "0.3.10";
package/lib/esm/index.js CHANGED
@@ -18,5 +18,5 @@ export * from "./query/index.js";
18
18
  * @summary The version string of the for-couchdb package
19
19
  * @const VERSION
20
20
  */
21
- export const VERSION = "0.3.9";
21
+ export const VERSION = "0.3.10";
22
22
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQTBCO0FBQzFCLHNDQUE2QjtBQUM3QixpQ0FBd0I7QUFDeEIscUNBQTRCO0FBQzVCLDZCQUEwQjtBQUMxQiwrQkFBNEI7QUFDNUIsNEJBQXlCO0FBQ3pCLDJCQUF3QjtBQUN4QiwyQkFBd0I7QUFDeEIsaUNBQXdCO0FBRXhCOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2luZGV4ZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXF1ZW5jZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3F1ZXJ5XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvdWNoREIgYWRhcHRlciBmb3IgRGVjYWYudHNcbiAqIEBzdW1tYXJ5IEEgVHlwZVNjcmlwdCBhZGFwdGVyIGZvciBDb3VjaERCIGRhdGFiYXNlIG9wZXJhdGlvbnMsIHByb3ZpZGluZyBhIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggdGhlIERlY2FmLnRzIGZyYW1ld29yay4gVGhpcyBtb2R1bGUgaW5jbHVkZXMgY2xhc3NlcywgaW50ZXJmYWNlcywgYW5kIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIENvdWNoREIgZGF0YWJhc2VzLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgTWFuZ28gcXVlcmllcywgZG9jdW1lbnQgb3BlcmF0aW9ucywgYW5kIHNlcXVlbmNlIG1hbmFnZW1lbnQuXG4gKiBAbW9kdWxlIGZvci1jb3VjaGRiXG4gKi9cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQHN1bW1hcnkgVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBmb3ItY291Y2hkYiBwYWNrYWdlXG4gKiBAY29uc3QgVkVSU0lPTlxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
@@ -13,4 +13,4 @@ import { Context, RepositoryFlags } from "@decaf-ts/db-decorators";
13
13
  * @typedef {Repository<M, MangoQuery, CouchDBAdapter<Y, F, C>>} CouchDBRepository
14
14
  * @memberOf module:for-couchdb
15
15
  */
16
- export type CouchDBRepository<M extends Model, Y, F extends RepositoryFlags, C extends Context<F>> = Repository<M, MangoQuery, CouchDBAdapter<Y, F, C>>;
16
+ export type CouchDBRepository<M extends Model, Y, CONN, F extends RepositoryFlags, C extends Context<F>> = Repository<M, MangoQuery, CouchDBAdapter<Y, CONN, F, C>>;
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291Y2hEQlJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9Db3VjaERCUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQkFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNYW5nb1F1ZXJ5IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSB0eXBlIGZvciBDb3VjaERCIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IFR5cGUgZGVmaW5pdGlvbiBmb3IgYSByZXBvc2l0b3J5IHRoYXQgd29ya3Mgd2l0aCBDb3VjaERCIHRocm91Z2ggdGhlIENvdWNoREJBZGFwdGVyXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICogQHRlbXBsYXRlIFkgLSBUaGUgc2NvcGUgdHlwZVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgdGhhdCBleHRlbmRzIENvbnRleHQ8Rj5cbiAqIEB0eXBlZGVmIHtSZXBvc2l0b3J5PE0sIE1hbmdvUXVlcnksIENvdWNoREJBZGFwdGVyPFksIEYsIEM+Pn0gQ291Y2hEQlJlcG9zaXRvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWNvdWNoZGJcbiAqL1xuZXhwb3J0IHR5cGUgQ291Y2hEQlJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgWSxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+ID0gUmVwb3NpdG9yeTxNLCBNYW5nb1F1ZXJ5LCBDb3VjaERCQWRhcHRlcjxZLCBGLCBDPj47XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291Y2hEQlJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9Db3VjaERCUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQkFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNYW5nb1F1ZXJ5IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSB0eXBlIGZvciBDb3VjaERCIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IFR5cGUgZGVmaW5pdGlvbiBmb3IgYSByZXBvc2l0b3J5IHRoYXQgd29ya3Mgd2l0aCBDb3VjaERCIHRocm91Z2ggdGhlIENvdWNoREJBZGFwdGVyXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICogQHRlbXBsYXRlIFkgLSBUaGUgc2NvcGUgdHlwZVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgdGhhdCBleHRlbmRzIENvbnRleHQ8Rj5cbiAqIEB0eXBlZGVmIHtSZXBvc2l0b3J5PE0sIE1hbmdvUXVlcnksIENvdWNoREJBZGFwdGVyPFksIEYsIEM+Pn0gQ291Y2hEQlJlcG9zaXRvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWNvdWNoZGJcbiAqL1xuZXhwb3J0IHR5cGUgQ291Y2hEQlJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgWSxcbiAgQ09OTixcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+ID0gUmVwb3NpdG9yeTxNLCBNYW5nb1F1ZXJ5LCBDb3VjaERCQWRhcHRlcjxZLCBDT05OLCBGLCBDPj47XG4iXX0=
@@ -47,12 +47,12 @@ export declare class CouchDBPaginator<M extends Model, R> extends Paginator<M, R
47
47
  /**
48
48
  * @description Creates a new CouchDBPaginator instance
49
49
  * @summary Initializes a paginator for CouchDB query results
50
- * @param {CouchDBAdapter<any, any, any>} adapter - The CouchDB adapter
50
+ * @param {CouchDBAdapter<any, any, any, any>} adapter - The CouchDB adapter
51
51
  * @param {MangoQuery} query - The Mango query to paginate
52
52
  * @param {number} size - The page size
53
53
  * @param {Constructor<M>} clazz - The model constructor
54
54
  */
55
- constructor(adapter: CouchDBAdapter<any, any, any>, query: MangoQuery, size: number, clazz: Constructor<M>);
55
+ constructor(adapter: CouchDBAdapter<any, any, any, any>, query: MangoQuery, size: number, clazz: Constructor<M>);
56
56
  /**
57
57
  * @description Prepares a query for pagination
58
58
  * @summary Modifies the raw query to include pagination parameters
@@ -45,7 +45,7 @@ export class CouchDBPaginator extends Paginator {
45
45
  /**
46
46
  * @description Creates a new CouchDBPaginator instance
47
47
  * @summary Initializes a paginator for CouchDB query results
48
- * @param {CouchDBAdapter<any, any, any>} adapter - The CouchDB adapter
48
+ * @param {CouchDBAdapter<any, any, any, any>} adapter - The CouchDB adapter
49
49
  * @param {MangoQuery} query - The Mango query to paginate
50
50
  * @param {number} size - The page size
51
51
  * @param {Constructor<M>} clazz - The model constructor
@@ -129,7 +129,7 @@ export class CouchDBPaginator extends Paginator {
129
129
  const statement = Object.assign({}, this.statement);
130
130
  if (!this._recordCount || !this._totalPages) {
131
131
  this._totalPages = this._recordCount = 0;
132
- const results = await this.adapter.raw({ ...statement, limit: undefined }) || [];
132
+ const results = (await this.adapter.raw({ ...statement, limit: undefined })) || [];
133
133
  this._recordCount = results.length;
134
134
  if (this._recordCount > 0) {
135
135
  const size = statement?.limit || this.size;
@@ -162,4 +162,4 @@ export class CouchDBPaginator extends Paginator {
162
162
  return results;
163
163
  }
164
164
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L1BhZ2luYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsMEJBQXFCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sZ0JBQXFDLFNBQVEsU0FJekQ7SUFPQzs7Ozs7T0FLRztJQUNILElBQWEsS0FBSztRQUNoQixNQUFNLElBQUksYUFBYSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBYSxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLG1EQUFtRCxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxZQUNFLE9BQXNDLEVBQ3RDLEtBQWlCLEVBQ2pCLElBQVksRUFDWixLQUFxQjtRQUVyQixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sT0FBTyxDQUFDLFlBQXdCO1FBQ3hDLE1BQU0sS0FBSyxHQUFlLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxDQUFDLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFMUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXhCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMERHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFlLENBQUM7UUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQVEsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDaEIsTUFBTSxJQUFJLFdBQVcsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ3pFLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBdUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDMUQsU0FBUyxFQUNULEtBQUssQ0FDTixDQUFDO1FBRUYsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQzlDLElBQUksT0FBTztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUNYLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0NBQXNDO1lBQzdDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ2xCLHFEQUFxRDtnQkFDckQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RCxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtnQkFDakQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDeEIsQ0FBQyxFQUNELElBQUksQ0FBQyxLQUFLLEVBQ1YsS0FBSyxDQUFDLEVBQUUsRUFDUixRQUFRLENBQUMsVUFBVSxDQUNqQixLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQ3ZDLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnaW5hdG9yLCBQYWdpbmdFcnJvciwgU2VxdWVuY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IGZpbmRQcmltYXJ5S2V5LCBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNYW5nb1F1ZXJ5LCBNYW5nb1Jlc3BvbnNlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb3VjaERCQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBDb3VjaERCS2V5cyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFnaW5hdG9yIGZvciBDb3VjaERCIHF1ZXJ5IHJlc3VsdHNcbiAqIEBzdW1tYXJ5IEltcGxlbWVudHMgcGFnaW5hdGlvbiBmb3IgQ291Y2hEQiBxdWVyaWVzIHVzaW5nIGJvb2ttYXJrcyBmb3IgZWZmaWNpZW50IG5hdmlnYXRpb24gdGhyb3VnaCByZXN1bHQgc2V0c1xuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gKiBAcGFyYW0ge0NvdWNoREJBZGFwdGVyPGFueSwgYW55LCBhbnk+fSBhZGFwdGVyIC0gVGhlIENvdWNoREIgYWRhcHRlclxuICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSBxdWVyeSAtIFRoZSBNYW5nbyBxdWVyeSB0byBwYWdpbmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgcGFnZSBzaXplXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBjbGF6eiAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvclxuICogQGNsYXNzIENvdWNoREJQYWdpbmF0b3JcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIG9mIHVzaW5nIENvdWNoREJQYWdpbmF0b3JcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgTXlDb3VjaERCQWRhcHRlcihzY29wZSk7XG4gKiBjb25zdCBxdWVyeSA9IHsgc2VsZWN0b3I6IHsgdHlwZTogXCJ1c2VyXCIgfSB9O1xuICogY29uc3QgcGFnaW5hdG9yID0gbmV3IENvdWNoREJQYWdpbmF0b3IoYWRhcHRlciwgcXVlcnksIDEwLCBVc2VyKTtcbiAqXG4gKiAvLyBHZXQgdGhlIGZpcnN0IHBhZ2VcbiAqIGNvbnN0IHBhZ2UxID0gYXdhaXQgcGFnaW5hdG9yLnBhZ2UoMSk7XG4gKlxuICogLy8gR2V0IHRoZSBuZXh0IHBhZ2VcbiAqIGNvbnN0IHBhZ2UyID0gYXdhaXQgcGFnaW5hdG9yLnBhZ2UoMik7XG4gKi9cbmV4cG9ydCBjbGFzcyBDb3VjaERCUGFnaW5hdG9yPE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBQYWdpbmF0b3I8XG4gIE0sXG4gIFIsXG4gIE1hbmdvUXVlcnlcbj4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJvb2ttYXJrIGZvciBDb3VjaERCIHBhZ2luYXRpb25cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBib29rbWFyayByZXR1cm5lZCBieSBDb3VjaERCIGZvciBjb250aW51aW5nIHBhZ2luYXRpb25cbiAgICovXG4gIHByaXZhdGUgYm9va01hcms/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXNcbiAgICogQHN1bW1hcnkgTm90IHN1cHBvcnRlZCBpbiBDb3VjaERCIC0gdGhyb3dzIGFuIGVycm9yIHdoZW4gYWNjZXNzZWRcbiAgICogQHJldHVybiB7bnVtYmVyfSBOZXZlciByZXR1cm5zIGFzIGl0IHRocm93cyBhbiBlcnJvclxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBBbHdheXMgdGhyb3dzIGFzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3QgYXZhaWxhYmxlIGluIENvdWNoREJcbiAgICovXG4gIG92ZXJyaWRlIGdldCB0b3RhbCgpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBUaGUgdG90YWwgcGFnZXMgYXBpIGlzIG5vdCBhdmFpbGFibGUgZm9yIGNvdWNoZGJgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgdG90YWwgcmVjb3JkIGNvdW50XG4gICAqIEBzdW1tYXJ5IE5vdCBzdXBwb3J0ZWQgaW4gQ291Y2hEQiAtIHRocm93cyBhbiBlcnJvciB3aGVuIGFjY2Vzc2VkXG4gICAqIEByZXR1cm4ge251bWJlcn0gTmV2ZXIgcmV0dXJucyBhcyBpdCB0aHJvd3MgYW4gZXJyb3JcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gQWx3YXlzIHRocm93cyBhcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGF2YWlsYWJsZSBpbiBDb3VjaERCXG4gICAqL1xuICBvdmVycmlkZSBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBUaGUgcmVjb3JkIGNvdW50IGFwaSBpcyBub3QgYXZhaWxhYmxlIGZvciBjb3VjaGRiYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgQ291Y2hEQlBhZ2luYXRvciBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIHBhZ2luYXRvciBmb3IgQ291Y2hEQiBxdWVyeSByZXN1bHRzXG4gICAqIEBwYXJhbSB7Q291Y2hEQkFkYXB0ZXI8YW55LCBhbnksIGFueT59IGFkYXB0ZXIgLSBUaGUgQ291Y2hEQiBhZGFwdGVyXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcXVlcnkgLSBUaGUgTWFuZ28gcXVlcnkgdG8gcGFnaW5hdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgcGFnZSBzaXplXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBhZGFwdGVyOiBDb3VjaERCQWRhcHRlcjxhbnksIGFueSwgYW55PixcbiAgICBxdWVyeTogTWFuZ29RdWVyeSxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4gICkge1xuICAgIHN1cGVyKGFkYXB0ZXIsIHF1ZXJ5LCBzaXplLCBjbGF6eik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgcXVlcnkgZm9yIHBhZ2luYXRpb25cbiAgICogQHN1bW1hcnkgTW9kaWZpZXMgdGhlIHJhdyBxdWVyeSB0byBpbmNsdWRlIHBhZ2luYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge01hbmdvUXVlcnl9IHJhd1N0YXRlbWVudCAtIFRoZSBvcmlnaW5hbCBNYW5nbyBxdWVyeVxuICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgcHJlcGFyZWQgcXVlcnkgd2l0aCBwYWdpbmF0aW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlKHJhd1N0YXRlbWVudDogTWFuZ29RdWVyeSk6IE1hbmdvUXVlcnkge1xuICAgIGNvbnN0IHF1ZXJ5OiBNYW5nb1F1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgcmF3U3RhdGVtZW50KTtcbiAgICBpZiAocXVlcnkubGltaXQpIHRoaXMubGltaXQgPSBxdWVyeS5saW1pdDtcblxuICAgIHF1ZXJ5LmxpbWl0ID0gdGhpcy5zaXplO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBzcGVjaWZpYyBwYWdlIG9mIHJlc3VsdHNcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgdGhlIHF1ZXJ5IHdpdGggcGFnaW5hdGlvbiBhbmQgcHJvY2Vzc2VzIHRoZSByZXN1bHRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFnZT0xXSAtIFRoZSBwYWdlIG51bWJlciB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJbXT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHJlc3VsdHNcbiAgICogQHRocm93cyB7UGFnaW5nRXJyb3J9IElmIHRyeWluZyB0byBhY2Nlc3MgYSBwYWdlIG90aGVyIHRoYW4gdGhlIGZpcnN0IHdpdGhvdXQgYSBib29rbWFyaywgb3IgaWYgbm8gY2xhc3MgaXMgZGVmaW5lZFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAgICogICBwYXJ0aWNpcGFudCBDb3VjaERCUGFnaW5hdG9yXG4gICAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IENvdWNoREJcbiAgICpcbiAgICogICBDbGllbnQtPj5Db3VjaERCUGFnaW5hdG9yOiBwYWdlKHBhZ2VOdW1iZXIpXG4gICAqICAgTm90ZSBvdmVyIENvdWNoREJQYWdpbmF0b3I6IENsb25lIHN0YXRlbWVudFxuICAgKiAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiB2YWxpZGF0ZVBhZ2UocGFnZSlcbiAgICpcbiAgICogICBhbHQgcGFnZSAhPT0gMVxuICAgKiAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IENoZWNrIGJvb2ttYXJrXG4gICAqICAgICBhbHQgTm8gYm9va21hcmtcbiAgICogICAgICAgQ291Y2hEQlBhZ2luYXRvci0tPj5DbGllbnQ6IFRocm93IFBhZ2luZ0Vycm9yXG4gICAqICAgICBlbHNlIEhhcyBib29rbWFya1xuICAgKiAgICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogQWRkIGJvb2ttYXJrIHRvIHN0YXRlbWVudFxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgQ291Y2hEQlBhZ2luYXRvci0+PkFkYXB0ZXI6IHJhdyhzdGF0ZW1lbnQsIGZhbHNlKVxuICAgKiAgIEFkYXB0ZXItPj5Db3VjaERCOiBFeGVjdXRlIHF1ZXJ5XG4gICAqICAgQ291Y2hEQi0tPj5BZGFwdGVyOiBSZXR1cm4gcmVzdWx0c1xuICAgKiAgIEFkYXB0ZXItLT4+Q291Y2hEQlBhZ2luYXRvcjogUmV0dXJuIE1hbmdvUmVzcG9uc2VcbiAgICpcbiAgICogICBOb3RlIG92ZXIgQ291Y2hEQlBhZ2luYXRvcjogUHJvY2VzcyByZXN1bHRzXG4gICAqXG4gICAqICAgYWx0IEhhcyB3YXJuaW5nXG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogTG9nIHdhcm5pbmdcbiAgICogICBlbmRcbiAgICpcbiAgICogICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogQ2hlY2sgZm9yIGNsYXp6XG4gICAqXG4gICAqICAgYWx0IE5vIGNsYXp6XG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLS0+PkNsaWVudDogVGhyb3cgUGFnaW5nRXJyb3JcbiAgICogICBlbHNlIEhhcyBjbGF6elxuICAgKiAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IEZpbmQgcHJpbWFyeSBrZXlcbiAgICpcbiAgICogICAgIGFsdCBIYXMgZmllbGRzIGluIHN0YXRlbWVudFxuICAgKiAgICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogVXNlIGRvY3MgZGlyZWN0bHlcbiAgICogICAgIGVsc2UgTm8gZmllbGRzXG4gICAqICAgICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBQcm9jZXNzIGVhY2ggZG9jdW1lbnRcbiAgICogICAgICAgbG9vcCBGb3IgZWFjaCBkb2N1bWVudFxuICAgKiAgICAgICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBFeHRyYWN0IG9yaWdpbmFsIElEXG4gICAqICAgICAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkFkYXB0ZXI6IHJldmVydChkb2MsIGNsYXp6LCBwa0RlZi5pZCwgcGFyc2VkSWQpXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZW5kXG4gICAqXG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogU3RvcmUgYm9va21hcmtcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBVcGRhdGUgY3VycmVudFBhZ2VcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gcmVzdWx0c1xuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcGFnZShwYWdlOiBudW1iZXIgPSAxKTogUHJvbWlzZTxSW10+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlbWVudCk7XG5cbiAgIGlmICghdGhpcy5fcmVjb3JkQ291bnQgfHwgIXRoaXMuX3RvdGFsUGFnZXMpIHtcbiAgICAgICAgdGhpcy5fdG90YWxQYWdlcyA9IHRoaXMuX3JlY29yZENvdW50ID0gMDtcbiAgICAgICAgY29uc3QgcmVzdWx0czogUltdID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyh7IC4uLnN0YXRlbWVudCwgbGltaXQ6IHVuZGVmaW5lZCB9KSB8fCBbXTtcbiAgICAgICAgdGhpcy5fcmVjb3JkQ291bnQgPSByZXN1bHRzLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuX3JlY29yZENvdW50ID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHN0YXRlbWVudD8ubGltaXQgfHwgdGhpcy5zaXplO1xuICAgICAgICAgICAgdGhpcy5fdG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLl9yZWNvcmRDb3VudCAvIHNpemUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZVBhZ2UocGFnZSk7XG5cbiAgICBpZiAocGFnZSAhPT0gMSkge1xuICAgICAgaWYgKCF0aGlzLmJvb2tNYXJrKVxuICAgICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXCJObyBib29rbWFyay4gRGlkIHlvdSBzdGFydCBpbiB0aGUgZmlyc3QgcGFnZT9cIik7XG4gICAgICBzdGF0ZW1lbnRbXCJib29rbWFya1wiXSA9IHRoaXMuYm9va01hcms7XG4gICAgfVxuICAgIGNvbnN0IHJhd1Jlc3VsdDogTWFuZ29SZXNwb25zZTxhbnk+ID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyhcbiAgICAgIHN0YXRlbWVudCxcbiAgICAgIGZhbHNlXG4gICAgKTtcblxuICAgIGNvbnN0IHsgZG9jcywgYm9va21hcmssIHdhcm5pbmcgfSA9IHJhd1Jlc3VsdDtcbiAgICBpZiAod2FybmluZykgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIGlmICghdGhpcy5jbGF6eikgdGhyb3cgbmV3IFBhZ2luZ0Vycm9yKFwiTm8gc3RhdGVtZW50IHRhcmdldCBkZWZpbmVkXCIpO1xuICAgIGNvbnN0IHBrRGVmID0gZmluZFByaW1hcnlLZXkobmV3IHRoaXMuY2xhenooKSk7XG4gICAgY29uc3QgcmVzdWx0cyA9XG4gICAgICBzdGF0ZW1lbnQuZmllbGRzICYmIHN0YXRlbWVudC5maWVsZHMubGVuZ3RoXG4gICAgICAgID8gZG9jcyAvLyBoYXMgZmllbGRzIG1lYW5zIGl0cyBub3QgZnVsbCBtb2RlbFxuICAgICAgICA6IGRvY3MubWFwKChkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vbm8gZmllbGRzIG1lYW5zIHdlIG5lZWQgdG8gcmV2ZXJ0IHRvIHNhdmluZyBwcm9jZXNzXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbElkID0gZC5faWQuc3BsaXQoQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcbiAgICAgICAgICAgIG9yaWdpbmFsSWQuc3BsaWNlKDAsIDEpOyAvLyByZW1vdmUgdGhlIHRhYmxlIG5hbWVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KFxuICAgICAgICAgICAgICBkLFxuICAgICAgICAgICAgICB0aGlzLmNsYXp6LFxuICAgICAgICAgICAgICBwa0RlZi5pZCxcbiAgICAgICAgICAgICAgU2VxdWVuY2UucGFyc2VWYWx1ZShcbiAgICAgICAgICAgICAgICBwa0RlZi5wcm9wcy50eXBlLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSWQuam9pbihDb3VjaERCS2V5cy5TRVBBUkFUT1IpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgdGhpcy5ib29rTWFyayA9IGJvb2ttYXJrO1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gcGFnZTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxufVxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L1BhZ2luYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsMEJBQXFCO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sZ0JBQXFDLFNBQVEsU0FJekQ7SUFPQzs7Ozs7T0FLRztJQUNILElBQWEsS0FBSztRQUNoQixNQUFNLElBQUksYUFBYSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBYSxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLG1EQUFtRCxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxZQUNFLE9BQTJDLEVBQzNDLEtBQWlCLEVBQ2pCLElBQVksRUFDWixLQUFxQjtRQUVyQixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sT0FBTyxDQUFDLFlBQXdCO1FBQ3hDLE1BQU0sS0FBSyxHQUFlLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxDQUFDLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFMUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXhCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMERHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFlLENBQUM7UUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQ1gsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ25DLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEIsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ2hCLE1BQU0sSUFBSSxXQUFXLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUN6RSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQXVCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzFELFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQztRQUVGLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUM5QyxJQUFJLE9BQU87WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN0RSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FDWCxTQUFTLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDLHNDQUFzQztZQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNsQixxREFBcUQ7Z0JBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3hCLENBQUMsRUFDRCxJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FBQyxFQUFFLEVBQ1IsUUFBUSxDQUFDLFVBQVUsQ0FDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ2hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUN2QyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2luYXRvciwgUGFnaW5nRXJyb3IsIFNlcXVlbmNlIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSwgTWFuZ29SZXNwb25zZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ291Y2hEQkFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhZ2luYXRvciBmb3IgQ291Y2hEQiBxdWVyeSByZXN1bHRzXG4gKiBAc3VtbWFyeSBJbXBsZW1lbnRzIHBhZ2luYXRpb24gZm9yIENvdWNoREIgcXVlcmllcyB1c2luZyBib29rbWFya3MgZm9yIGVmZmljaWVudCBuYXZpZ2F0aW9uIHRocm91Z2ggcmVzdWx0IHNldHNcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXN1bHQgdHlwZVxuICogQHBhcmFtIHtDb3VjaERCQWRhcHRlcjxhbnksIGFueSwgYW55Pn0gYWRhcHRlciAtIFRoZSBDb3VjaERCIGFkYXB0ZXJcbiAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcXVlcnkgLSBUaGUgTWFuZ28gcXVlcnkgdG8gcGFnaW5hdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIC0gVGhlIHBhZ2Ugc2l6ZVxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAqIEBjbGFzcyBDb3VjaERCUGFnaW5hdG9yXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSBvZiB1c2luZyBDb3VjaERCUGFnaW5hdG9yXG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IE15Q291Y2hEQkFkYXB0ZXIoc2NvcGUpO1xuICogY29uc3QgcXVlcnkgPSB7IHNlbGVjdG9yOiB7IHR5cGU6IFwidXNlclwiIH0gfTtcbiAqIGNvbnN0IHBhZ2luYXRvciA9IG5ldyBDb3VjaERCUGFnaW5hdG9yKGFkYXB0ZXIsIHF1ZXJ5LCAxMCwgVXNlcik7XG4gKlxuICogLy8gR2V0IHRoZSBmaXJzdCBwYWdlXG4gKiBjb25zdCBwYWdlMSA9IGF3YWl0IHBhZ2luYXRvci5wYWdlKDEpO1xuICpcbiAqIC8vIEdldCB0aGUgbmV4dCBwYWdlXG4gKiBjb25zdCBwYWdlMiA9IGF3YWl0IHBhZ2luYXRvci5wYWdlKDIpO1xuICovXG5leHBvcnQgY2xhc3MgQ291Y2hEQlBhZ2luYXRvcjxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgUGFnaW5hdG9yPFxuICBNLFxuICBSLFxuICBNYW5nb1F1ZXJ5XG4+IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBCb29rbWFyayBmb3IgQ291Y2hEQiBwYWdpbmF0aW9uXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgYm9va21hcmsgcmV0dXJuZWQgYnkgQ291Y2hEQiBmb3IgY29udGludWluZyBwYWdpbmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGJvb2tNYXJrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gICAqIEBzdW1tYXJ5IE5vdCBzdXBwb3J0ZWQgaW4gQ291Y2hEQiAtIHRocm93cyBhbiBlcnJvciB3aGVuIGFjY2Vzc2VkXG4gICAqIEByZXR1cm4ge251bWJlcn0gTmV2ZXIgcmV0dXJucyBhcyBpdCB0aHJvd3MgYW4gZXJyb3JcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gQWx3YXlzIHRocm93cyBhcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGF2YWlsYWJsZSBpbiBDb3VjaERCXG4gICAqL1xuICBvdmVycmlkZSBnZXQgdG90YWwoKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgVGhlIHRvdGFsIHBhZ2VzIGFwaSBpcyBub3QgYXZhaWxhYmxlIGZvciBjb3VjaGRiYCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHRvdGFsIHJlY29yZCBjb3VudFxuICAgKiBAc3VtbWFyeSBOb3Qgc3VwcG9ydGVkIGluIENvdWNoREIgLSB0aHJvd3MgYW4gZXJyb3Igd2hlbiBhY2Nlc3NlZFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IE5ldmVyIHJldHVybnMgYXMgaXQgdGhyb3dzIGFuIGVycm9yXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IEFsd2F5cyB0aHJvd3MgYXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFibGUgaW4gQ291Y2hEQlxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgVGhlIHJlY29yZCBjb3VudCBhcGkgaXMgbm90IGF2YWlsYWJsZSBmb3IgY291Y2hkYmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IENvdWNoREJQYWdpbmF0b3IgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBwYWdpbmF0b3IgZm9yIENvdWNoREIgcXVlcnkgcmVzdWx0c1xuICAgKiBAcGFyYW0ge0NvdWNoREJBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT59IGFkYXB0ZXIgLSBUaGUgQ291Y2hEQiBhZGFwdGVyXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcXVlcnkgLSBUaGUgTWFuZ28gcXVlcnkgdG8gcGFnaW5hdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgcGFnZSBzaXplXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBhZGFwdGVyOiBDb3VjaERCQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+LFxuICAgIHF1ZXJ5OiBNYW5nb1F1ZXJ5LFxuICAgIHNpemU6IG51bWJlcixcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT5cbiAgKSB7XG4gICAgc3VwZXIoYWRhcHRlciwgcXVlcnksIHNpemUsIGNsYXp6KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSBxdWVyeSBmb3IgcGFnaW5hdGlvblxuICAgKiBAc3VtbWFyeSBNb2RpZmllcyB0aGUgcmF3IHF1ZXJ5IHRvIGluY2x1ZGUgcGFnaW5hdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcmF3U3RhdGVtZW50IC0gVGhlIG9yaWdpbmFsIE1hbmdvIHF1ZXJ5XG4gICAqIEByZXR1cm4ge01hbmdvUXVlcnl9IFRoZSBwcmVwYXJlZCBxdWVyeSB3aXRoIHBhZ2luYXRpb24gcGFyYW1ldGVyc1xuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmUocmF3U3RhdGVtZW50OiBNYW5nb1F1ZXJ5KTogTWFuZ29RdWVyeSB7XG4gICAgY29uc3QgcXVlcnk6IE1hbmdvUXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCByYXdTdGF0ZW1lbnQpO1xuICAgIGlmIChxdWVyeS5saW1pdCkgdGhpcy5saW1pdCA9IHF1ZXJ5LmxpbWl0O1xuXG4gICAgcXVlcnkubGltaXQgPSB0aGlzLnNpemU7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHNwZWNpZmljIHBhZ2Ugb2YgcmVzdWx0c1xuICAgKiBAc3VtbWFyeSBFeGVjdXRlcyB0aGUgcXVlcnkgd2l0aCBwYWdpbmF0aW9uIGFuZCBwcm9jZXNzZXMgdGhlIHJlc3VsdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYWdlPTFdIC0gVGhlIHBhZ2UgbnVtYmVyIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UltdPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgcmVzdWx0c1xuICAgKiBAdGhyb3dzIHtQYWdpbmdFcnJvcn0gSWYgdHJ5aW5nIHRvIGFjY2VzcyBhIHBhZ2Ugb3RoZXIgdGhhbiB0aGUgZmlyc3Qgd2l0aG91dCBhIGJvb2ttYXJrLCBvciBpZiBubyBjbGFzcyBpcyBkZWZpbmVkXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICAgKiAgIHBhcnRpY2lwYW50IENvdWNoREJQYWdpbmF0b3JcbiAgICogICBwYXJ0aWNpcGFudCBBZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgQ291Y2hEQlxuICAgKlxuICAgKiAgIENsaWVudC0+PkNvdWNoREJQYWdpbmF0b3I6IHBhZ2UocGFnZU51bWJlcilcbiAgICogICBOb3RlIG92ZXIgQ291Y2hEQlBhZ2luYXRvcjogQ2xvbmUgc3RhdGVtZW50XG4gICAqICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IHZhbGlkYXRlUGFnZShwYWdlKVxuICAgKlxuICAgKiAgIGFsdCBwYWdlICE9PSAxXG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogQ2hlY2sgYm9va21hcmtcbiAgICogICAgIGFsdCBObyBib29rbWFya1xuICAgKiAgICAgICBDb3VjaERCUGFnaW5hdG9yLS0+PkNsaWVudDogVGhyb3cgUGFnaW5nRXJyb3JcbiAgICogICAgIGVsc2UgSGFzIGJvb2ttYXJrXG4gICAqICAgICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBBZGQgYm9va21hcmsgdG8gc3RhdGVtZW50XG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICpcbiAgICogICBDb3VjaERCUGFnaW5hdG9yLT4+QWRhcHRlcjogcmF3KHN0YXRlbWVudCwgZmFsc2UpXG4gICAqICAgQWRhcHRlci0+PkNvdWNoREI6IEV4ZWN1dGUgcXVlcnlcbiAgICogICBDb3VjaERCLS0+PkFkYXB0ZXI6IFJldHVybiByZXN1bHRzXG4gICAqICAgQWRhcHRlci0tPj5Db3VjaERCUGFnaW5hdG9yOiBSZXR1cm4gTWFuZ29SZXNwb25zZVxuICAgKlxuICAgKiAgIE5vdGUgb3ZlciBDb3VjaERCUGFnaW5hdG9yOiBQcm9jZXNzIHJlc3VsdHNcbiAgICpcbiAgICogICBhbHQgSGFzIHdhcm5pbmdcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBMb2cgd2FybmluZ1xuICAgKiAgIGVuZFxuICAgKlxuICAgKiAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBDaGVjayBmb3IgY2xhenpcbiAgICpcbiAgICogICBhbHQgTm8gY2xhenpcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItLT4+Q2xpZW50OiBUaHJvdyBQYWdpbmdFcnJvclxuICAgKiAgIGVsc2UgSGFzIGNsYXp6XG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogRmluZCBwcmltYXJ5IGtleVxuICAgKlxuICAgKiAgICAgYWx0IEhhcyBmaWVsZHMgaW4gc3RhdGVtZW50XG4gICAqICAgICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBVc2UgZG9jcyBkaXJlY3RseVxuICAgKiAgICAgZWxzZSBObyBmaWVsZHNcbiAgICogICAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IFByb2Nlc3MgZWFjaCBkb2N1bWVudFxuICAgKiAgICAgICBsb29wIEZvciBlYWNoIGRvY3VtZW50XG4gICAqICAgICAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IEV4dHJhY3Qgb3JpZ2luYWwgSURcbiAgICogICAgICAgICBDb3VjaERCUGFnaW5hdG9yLT4+QWRhcHRlcjogcmV2ZXJ0KGRvYywgY2xhenosIHBrRGVmLmlkLCBwYXJzZWRJZClcbiAgICogICAgICAgZW5kXG4gICAqICAgICBlbmRcbiAgICpcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBTdG9yZSBib29rbWFya1xuICAgKiAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IFVwZGF0ZSBjdXJyZW50UGFnZVxuICAgKiAgICAgQ291Y2hEQlBhZ2luYXRvci0tPj5DbGllbnQ6IFJldHVybiByZXN1bHRzXG4gICAqICAgZW5kXG4gICAqL1xuICBhc3luYyBwYWdlKHBhZ2U6IG51bWJlciA9IDEpOiBQcm9taXNlPFJbXT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGVtZW50KTtcblxuICAgIGlmICghdGhpcy5fcmVjb3JkQ291bnQgfHwgIXRoaXMuX3RvdGFsUGFnZXMpIHtcbiAgICAgIHRoaXMuX3RvdGFsUGFnZXMgPSB0aGlzLl9yZWNvcmRDb3VudCA9IDA7XG4gICAgICBjb25zdCByZXN1bHRzOiBSW10gPVxuICAgICAgICAoYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyh7IC4uLnN0YXRlbWVudCwgbGltaXQ6IHVuZGVmaW5lZCB9KSkgfHwgW107XG4gICAgICB0aGlzLl9yZWNvcmRDb3VudCA9IHJlc3VsdHMubGVuZ3RoO1xuICAgICAgaWYgKHRoaXMuX3JlY29yZENvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBzaXplID0gc3RhdGVtZW50Py5saW1pdCB8fCB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3RvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5fcmVjb3JkQ291bnQgLyBzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlUGFnZShwYWdlKTtcblxuICAgIGlmIChwYWdlICE9PSAxKSB7XG4gICAgICBpZiAoIXRoaXMuYm9va01hcmspXG4gICAgICAgIHRocm93IG5ldyBQYWdpbmdFcnJvcihcIk5vIGJvb2ttYXJrLiBEaWQgeW91IHN0YXJ0IGluIHRoZSBmaXJzdCBwYWdlP1wiKTtcbiAgICAgIHN0YXRlbWVudFtcImJvb2ttYXJrXCJdID0gdGhpcy5ib29rTWFyaztcbiAgICB9XG4gICAgY29uc3QgcmF3UmVzdWx0OiBNYW5nb1Jlc3BvbnNlPGFueT4gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KFxuICAgICAgc3RhdGVtZW50LFxuICAgICAgZmFsc2VcbiAgICApO1xuXG4gICAgY29uc3QgeyBkb2NzLCBib29rbWFyaywgd2FybmluZyB9ID0gcmF3UmVzdWx0O1xuICAgIGlmICh3YXJuaW5nKSBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgaWYgKCF0aGlzLmNsYXp6KSB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXCJObyBzdGF0ZW1lbnQgdGFyZ2V0IGRlZmluZWRcIik7XG4gICAgY29uc3QgcGtEZWYgPSBmaW5kUHJpbWFyeUtleShuZXcgdGhpcy5jbGF6eigpKTtcbiAgICBjb25zdCByZXN1bHRzID1cbiAgICAgIHN0YXRlbWVudC5maWVsZHMgJiYgc3RhdGVtZW50LmZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyBkb2NzIC8vIGhhcyBmaWVsZHMgbWVhbnMgaXRzIG5vdCBmdWxsIG1vZGVsXG4gICAgICAgIDogZG9jcy5tYXAoKGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy9ubyBmaWVsZHMgbWVhbnMgd2UgbmVlZCB0byByZXZlcnQgdG8gc2F2aW5nIHByb2Nlc3NcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSWQgPSBkLl9pZC5zcGxpdChDb3VjaERCS2V5cy5TRVBBUkFUT1IpO1xuICAgICAgICAgICAgb3JpZ2luYWxJZC5zcGxpY2UoMCwgMSk7IC8vIHJlbW92ZSB0aGUgdGFibGUgbmFtZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQoXG4gICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgIHRoaXMuY2xhenosXG4gICAgICAgICAgICAgIHBrRGVmLmlkLFxuICAgICAgICAgICAgICBTZXF1ZW5jZS5wYXJzZVZhbHVlKFxuICAgICAgICAgICAgICAgIHBrRGVmLnByb3BzLnR5cGUsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxJZC5qb2luKENvdWNoREJLZXlzLlNFUEFSQVRPUilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICB0aGlzLmJvb2tNYXJrID0gYm9va21hcms7XG4gICAgdGhpcy5fY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG4iXX0=
@@ -23,7 +23,7 @@ import { CouchDBAdapter } from "../adapter";
23
23
  * .execute();
24
24
  */
25
25
  export declare class CouchDBStatement<M extends Model, R> extends Statement<MangoQuery, M, R> {
26
- constructor(adapter: CouchDBAdapter<any, any, any>);
26
+ constructor(adapter: CouchDBAdapter<any, any, any, any>);
27
27
  /**
28
28
  * @description Builds a CouchDB Mango query from the statement
29
29
  * @summary Converts the statement's conditions, selectors, and options into a CouchDB Mango query
@@ -279,4 +279,4 @@ export class CouchDBStatement extends Statement {
279
279
  return { selector: op };
280
280
  }
281
281
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L1N0YXRlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixRQUFRLEVBR1IsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsdUJBQW9CO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsMEJBQXFCO0FBQzNDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGlCQUFpQixHQUNsQix1QkFBb0I7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUFvQjtBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGdCQUFxQyxTQUFRLFNBSXpEO0lBQ0MsWUFBWSxPQUFzQztRQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdURHO0lBQ08sS0FBSztRQUNiLE1BQU0sU0FBUyxHQUFrQixFQUFFLENBQUM7UUFDcEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENB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LENBQUM7WUFDRCxFQUFFLENBQUMsS0FBZSxDQUFDLEdBQUcsRUFBbUIsQ0FBQztZQUN6QyxFQUFFLENBQUMsS0FBZSxDQUFtQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRSxVQUFVLENBQUM7UUFDZixDQUFDO2FBQU0sSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQXFCLENBQUMsQ0FBQyxRQUF5QixDQUFDO1lBQzFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFtQixDQUFDO1lBQzFELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQW1CLENBQ3BELEtBQXNDLENBQUMsS0FBSyxDQUM5QyxHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNyRSxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbmRpdGlvbixcbiAgR3JvdXBPcGVyYXRvcixcbiAgT3BlcmF0b3IsXG4gIE9yZGVyRGlyZWN0aW9uLFxuICBQYWdpbmF0b3IsXG4gIFJlcG9zaXRvcnksXG4gIFNlcXVlbmNlLFxuICBTdGF0ZW1lbnQsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTWFuZ29PcGVyYXRvciwgTWFuZ29RdWVyeSwgTWFuZ29TZWxlY3RvciB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb3VjaERCQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyB0cmFuc2xhdGVPcGVyYXRvcnMgfSBmcm9tIFwiLi90cmFuc2xhdGVcIjtcbmltcG9ydCB7IENvdWNoREJLZXlzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQ291Y2hEQkdyb3VwT3BlcmF0b3IsXG4gIENvdWNoREJPcGVyYXRvcixcbiAgQ291Y2hEQlF1ZXJ5TGltaXQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ291Y2hEQlBhZ2luYXRvciB9IGZyb20gXCIuL1BhZ2luYXRvclwiO1xuaW1wb3J0IHsgZmluZFByaW1hcnlLZXksIEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RhdGVtZW50IGJ1aWxkZXIgZm9yIENvdWNoREIgTWFuZ28gcXVlcmllc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBmbHVlbnQgaW50ZXJmYWNlIGZvciBidWlsZGluZyBDb3VjaERCIE1hbmdvIHF1ZXJpZXMgd2l0aCB0eXBlIHNhZmV0eVxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gKiBAcGFyYW0gYWRhcHRlciAtIFRoZSBDb3VjaERCIGFkYXB0ZXJcbiAqIEBjbGFzcyBDb3VjaERCU3RhdGVtZW50XG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSBvZiB1c2luZyBDb3VjaERCU3RhdGVtZW50XG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IE15Q291Y2hEQkFkYXB0ZXIoc2NvcGUpO1xuICogY29uc3Qgc3RhdGVtZW50ID0gbmV3IENvdWNoREJTdGF0ZW1lbnQ8VXNlciwgVXNlcltdPihhZGFwdGVyKTtcbiAqXG4gKiAvLyBCdWlsZCBhIHF1ZXJ5XG4gKiBjb25zdCB1c2VycyA9IGF3YWl0IHN0YXRlbWVudFxuICogICAuZnJvbShVc2VyKVxuICogICAud2hlcmUoQ29uZGl0aW9uLmF0dHJpYnV0ZTxVc2VyPignYWdlJykuZ3QoMTgpKVxuICogICAub3JkZXJCeSgnbGFzdE5hbWUnLCAnYXNjJylcbiAqICAgLmxpbWl0KDEwKVxuICogICAuZXhlY3V0ZSgpO1xuICovXG5leHBvcnQgY2xhc3MgQ291Y2hEQlN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgU3RhdGVtZW50PFxuICBNYW5nb1F1ZXJ5LFxuICBNLFxuICBSXG4+IHtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQ291Y2hEQkFkYXB0ZXI8YW55LCBhbnksIGFueT4pIHtcbiAgICBzdXBlcihhZGFwdGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQnVpbGRzIGEgQ291Y2hEQiBNYW5nbyBxdWVyeSBmcm9tIHRoZSBzdGF0ZW1lbnRcbiAgICogQHN1bW1hcnkgQ29udmVydHMgdGhlIHN0YXRlbWVudCdzIGNvbmRpdGlvbnMsIHNlbGVjdG9ycywgYW5kIG9wdGlvbnMgaW50byBhIENvdWNoREIgTWFuZ28gcXVlcnlcbiAgICogQHJldHVybiB7TWFuZ29RdWVyeX0gVGhlIGJ1aWx0IE1hbmdvIHF1ZXJ5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBhcmUgaW52YWxpZCBxdWVyeSBjb25kaXRpb25zXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFN0YXRlbWVudFxuICAgKiAgIHBhcnRpY2lwYW50IFJlcG9zaXRvcnlcbiAgICogICBwYXJ0aWNpcGFudCBwYXJzZUNvbmRpdGlvblxuICAgKlxuICAgKiAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogYnVpbGQoKVxuICAgKiAgIE5vdGUgb3ZlciBTdGF0ZW1lbnQ6IEluaXRpYWxpemUgc2VsZWN0b3JzXG4gICAqICAgU3RhdGVtZW50LT4+UmVwb3NpdG9yeTogR2V0IHRhYmxlIG5hbWVcbiAgICogICBSZXBvc2l0b3J5LS0+PlN0YXRlbWVudDogUmV0dXJuIHRhYmxlIG5hbWVcbiAgICogICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENyZWF0ZSBiYXNlIHF1ZXJ5XG4gICAqXG4gICAqICAgYWx0IEhhcyBzZWxlY3RTZWxlY3RvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBBZGQgZmllbGRzIHRvIHF1ZXJ5XG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgYWx0IEhhcyB3aGVyZUNvbmRpdGlvblxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBDcmVhdGUgY29tYmluZWQgY29uZGl0aW9uIHdpdGggdGFibGVcbiAgICogICAgIFN0YXRlbWVudC0+PnBhcnNlQ29uZGl0aW9uOiBQYXJzZSBjb25kaXRpb25cbiAgICogICAgIHBhcnNlQ29uZGl0aW9uLS0+PlN0YXRlbWVudDogUmV0dXJuIHBhcnNlZCBjb25kaXRpb25cbiAgICpcbiAgICogICAgIGFsdCBJcyBncm91cCBvcGVyYXRvclxuICAgKiAgICAgICBhbHQgSXMgQU5EIG9wZXJhdG9yXG4gICAqICAgICAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBGbGF0dGVuIG5lc3RlZCBBTkQgY29uZGl0aW9uc1xuICAgKiAgICAgICBlbHNlIElzIE9SIG9wZXJhdG9yXG4gICAqICAgICAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBDb21iaW5lIHdpdGggdGFibGUgY29uZGl0aW9uXG4gICAqICAgICAgIGVsc2VcbiAgICogICAgICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IFRocm93IGVycm9yXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZWxzZVxuICAgKiAgICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IE1lcmdlIGNvbmRpdGlvbnMgd2l0aCBleGlzdGluZyBzZWxlY3RvclxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgYWx0IEhhcyBvcmRlckJ5U2VsZWN0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogQWRkIHNvcnQgdG8gcXVlcnlcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogRW5zdXJlIGZpZWxkIGV4aXN0cyBpbiBzZWxlY3RvclxuICAgKiAgIGVuZFxuICAgKlxuICAgKiAgIGFsdCBIYXMgbGltaXRTZWxlY3RvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBTZXQgbGltaXRcbiAgICogICBlbHNlXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IFVzZSBkZWZhdWx0IGxpbWl0XG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgYWx0IEhhcyBvZmZzZXRTZWxlY3RvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBTZXQgc2tpcFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiAgIFN0YXRlbWVudC0tPj5TdGF0ZW1lbnQ6IFJldHVybiBxdWVyeVxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkKCk6IE1hbmdvUXVlcnkge1xuICAgIGNvbnN0IHNlbGVjdG9yczogTWFuZ29TZWxlY3RvciA9IHt9O1xuICAgIHNlbGVjdG9yc1tDb3VjaERCS2V5cy5UQUJMRV0gPSB7fTtcbiAgICBzZWxlY3RvcnNbQ291Y2hEQktleXMuVEFCTEVdID0gUmVwb3NpdG9yeS50YWJsZSh0aGlzLmZyb21TZWxlY3Rvcik7XG4gICAgY29uc3QgcXVlcnk6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiBzZWxlY3RvcnMgfTtcbiAgICBpZiAodGhpcy5zZWxlY3RTZWxlY3RvcikgcXVlcnkuZmllbGRzID0gdGhpcy5zZWxlY3RTZWxlY3RvciBhcyBzdHJpbmdbXTtcblxuICAgIGlmICh0aGlzLndoZXJlQ29uZGl0aW9uKSB7XG4gICAgICBjb25zdCBjb25kaXRpb246IE1hbmdvU2VsZWN0b3IgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKFxuICAgICAgICBDb25kaXRpb24uYW5kKFxuICAgICAgICAgIHRoaXMud2hlcmVDb25kaXRpb24sXG4gICAgICAgICAgQ29uZGl0aW9uLmF0dHJpYnV0ZTxNPihDb3VjaERCS2V5cy5UQUJMRSBhcyBrZXlvZiBNKS5lcShcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW0NvdWNoREJLZXlzLlRBQkxFXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKS5zZWxlY3RvcjtcbiAgICAgIGNvbnN0IHNlbGVjdG9yS2V5cyA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbikgYXMgTWFuZ29PcGVyYXRvcltdO1xuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RvcktleXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIE9iamVjdC52YWx1ZXMoQ291Y2hEQkdyb3VwT3BlcmF0b3IpLmluZGV4T2Yoc2VsZWN0b3JLZXlzWzBdKSAhPT0gLTFcbiAgICAgIClcbiAgICAgICAgc3dpdGNoIChzZWxlY3RvcktleXNbMF0pIHtcbiAgICAgICAgICBjYXNlIENvdWNoREJHcm91cE9wZXJhdG9yLkFORDpcbiAgICAgICAgICAgIGNvbmRpdGlvbltDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdID0gW1xuICAgICAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbltDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdIGFzIE1hbmdvU2VsZWN0b3JcbiAgICAgICAgICAgICAgKS5yZWR1Y2UoKGFjY3VtOiBNYW5nb1NlbGVjdG9yW10sIHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlRvbyBtYW55IGtleXMgaW4gcXVlcnkgc2VsZWN0b3IuIHNob3VsZCBiZSBvbmVcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICBpZiAoayA9PT0gQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EKVxuICAgICAgICAgICAgICAgICAgYWNjdW0ucHVzaCguLi4odmFsW2tdIGFzIGFueVtdKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBhY2N1bS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3IgPSBjb25kaXRpb247XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvdWNoREJHcm91cE9wZXJhdG9yLk9SOiB7XG4gICAgICAgICAgICBjb25zdCBzOiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XG4gICAgICAgICAgICBzW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gPSBbXG4gICAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMocXVlcnkuc2VsZWN0b3IpLm1hcCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPGFueSwgYW55PiA9IHt9O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgIGlmIChxdWVyeS5zZWxlY3RvcltrZXldKVxuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgQSAke2tleX0gcXVlcnkgcGFyYW0gaXMgYWJvdXQgdG8gYmUgb3ZlcnJpZGRlbjogJHtxdWVyeS5zZWxlY3RvcltrZXldfSBieSAke3ZhbH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW2tleV0gPSB2YWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9yZGVyQnlTZWxlY3Rvcikge1xuICAgICAgcXVlcnkuc29ydCA9IHF1ZXJ5LnNvcnQgfHwgW107XG4gICAgICBxdWVyeS5zZWxlY3RvciA9IHF1ZXJ5LnNlbGVjdG9yIHx8ICh7fSBhcyBNYW5nb1NlbGVjdG9yKTtcbiAgICAgIGNvbnN0IFtzZWxlY3RvciwgdmFsdWVdID0gdGhpcy5vcmRlckJ5U2VsZWN0b3IgYXMgW1xuICAgICAgICBzdHJpbmcsXG4gICAgICAgIE9yZGVyRGlyZWN0aW9uLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlYzogYW55ID0ge307XG4gICAgICByZWNbc2VsZWN0b3JdID0gdmFsdWU7XG4gICAgICAocXVlcnkuc29ydCBhcyBhbnlbXSkucHVzaChyZWMgYXMgYW55KTtcbiAgICAgIGlmICghcXVlcnkuc2VsZWN0b3Jbc2VsZWN0b3JdKSB7XG4gICAgICAgIHF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICAgIChxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0gYXMgTWFuZ29TZWxlY3RvcilbQ291Y2hEQk9wZXJhdG9yLkJJR0dFUl0gPVxuICAgICAgICAgIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGltaXRTZWxlY3Rvcikge1xuICAgICAgcXVlcnkubGltaXQgPSB0aGlzLmxpbWl0U2VsZWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE5vIGxpbWl0IHNlbGVjdG9yIGRlZmluZWQuIFVzaW5nIGRlZmF1bHQgY291Y2hkYiBsaW1pdCBvZiAke0NvdWNoREJRdWVyeUxpbWl0fWBcbiAgICAgICk7XG4gICAgICBxdWVyeS5saW1pdCA9IENvdWNoREJRdWVyeUxpbWl0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9mZnNldFNlbGVjdG9yKSBxdWVyeS5za2lwID0gdGhpcy5vZmZzZXRTZWxlY3RvcjtcblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHBhZ2luYXRvciBmb3IgdGhlIHN0YXRlbWVudFxuICAgKiBAc3VtbWFyeSBCdWlsZHMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIGEgQ291Y2hEQlBhZ2luYXRvciBmb3IgcGFnaW5hdGVkIHJlc3VsdHNcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmVzdWx0IHR5cGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgcGFnZSBzaXplXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UGFnaW5hdG9yPE0sIFIsIE1hbmdvUXVlcnk+Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBwYWdpbmF0b3JcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlcmUncyBhbiBlcnJvciBidWlsZGluZyB0aGUgcXVlcnlcbiAgICovXG4gIGFzeW5jIHBhZ2luYXRlPFI+KHNpemU6IG51bWJlcik6IFByb21pc2U8UGFnaW5hdG9yPE0sIFIsIE1hbmdvUXVlcnk+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5OiBNYW5nb1F1ZXJ5ID0gdGhpcy5idWlsZCgpO1xuICAgICAgcmV0dXJuIG5ldyBDb3VjaERCUGFnaW5hdG9yKFxuICAgICAgICB0aGlzLmFkYXB0ZXIgYXMgYW55LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGhpcy5mcm9tU2VsZWN0b3JcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByb2Nlc3NlcyBhIHJlY29yZCBmcm9tIENvdWNoREJcbiAgICogQHN1bW1hcnkgRXh0cmFjdHMgdGhlIElEIGZyb20gYSBDb3VjaERCIGRvY3VtZW50IGFuZCByZXZlcnRzIGl0IHRvIGEgbW9kZWwgaW5zdGFuY2VcbiAgICogQHBhcmFtIHthbnl9IHIgLSBUaGUgcmF3IHJlY29yZCBmcm9tIENvdWNoREJcbiAgICogQHBhcmFtIHBrQXR0ciAtIFRoZSBwcmltYXJ5IGtleSBhdHRyaWJ1dGUgb2YgdGhlIG1vZGVsXG4gICAqIEBwYXJhbSB7XCJOdW1iZXJcIiB8IFwiQmlnSW50XCIgfCB1bmRlZmluZWR9IHNlcXVlbmNlVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBzZXF1ZW5jZVxuICAgKiBAcmV0dXJuIHthbnl9IFRoZSBwcm9jZXNzZWQgcmVjb3JkXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJvY2Vzc1JlY29yZChcbiAgICByOiBhbnksXG4gICAgcGtBdHRyOiBrZXlvZiBNLFxuICAgIHNlcXVlbmNlVHlwZTogXCJOdW1iZXJcIiB8IFwiQmlnSW50XCIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKHJbQ291Y2hEQktleXMuSURdKSB7XG4gICAgICBjb25zdCBbLCAuLi5rZXlBcmdzXSA9IHJbQ291Y2hEQktleXMuSURdLnNwbGl0KENvdWNoREJLZXlzLlNFUEFSQVRPUik7XG5cbiAgICAgIGNvbnN0IGlkID0ga2V5QXJncy5qb2luKFwiX1wiKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KFxuICAgICAgICByLFxuICAgICAgICB0aGlzLmZyb21TZWxlY3RvcixcbiAgICAgICAgcGtBdHRyLFxuICAgICAgICBTZXF1ZW5jZS5wYXJzZVZhbHVlKHNlcXVlbmNlVHlwZSwgaWQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgTWFuZ28gcXVlcnlcbiAgICogQHN1bW1hcnkgU2VuZHMgYSByYXcgTWFuZ28gcXVlcnkgdG8gQ291Y2hEQiBhbmQgcHJvY2Vzc2VzIHRoZSByZXN1bHRzXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcmF3SW5wdXQgLSBUaGUgcmF3IE1hbmdvIHF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHF1ZXJ5IHJlc3VsdHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogTWFuZ29RdWVyeSk6IFByb21pc2U8Uj4ge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueVtdID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyhyYXdJbnB1dCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBwa0RlZiA9IGZpbmRQcmltYXJ5S2V5KG5ldyB0aGlzLmZyb21TZWxlY3RvcigpKTtcbiAgICBjb25zdCBwa0F0dHIgPSBwa0RlZi5pZDtcbiAgICBjb25zdCB0eXBlID0gcGtEZWYucHJvcHMudHlwZTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RTZWxlY3RvcilcbiAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocikgPT4gdGhpcy5wcm9jZXNzUmVjb3JkKHIsIHBrQXR0ciwgdHlwZSkpIGFzIFI7XG4gICAgcmV0dXJuIHJlc3VsdHMgYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgY29uZGl0aW9uIGludG8gYSBDb3VjaERCIE1hbmdvIHF1ZXJ5IHNlbGVjdG9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGEgQ29uZGl0aW9uIG9iamVjdCBpbnRvIGEgQ291Y2hEQiBNYW5nbyBxdWVyeSBzZWxlY3RvciBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gcGFyc2VcbiAgICogQHJldHVybiB7TWFuZ29RdWVyeX0gVGhlIE1hbmdvIHF1ZXJ5IHdpdGggdGhlIHBhcnNlZCBjb25kaXRpb24gYXMgaXRzIHNlbGVjdG9yXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFN0YXRlbWVudFxuICAgKiAgIHBhcnRpY2lwYW50IHRyYW5zbGF0ZU9wZXJhdG9yc1xuICAgKiAgIHBhcnRpY2lwYW50IG1lcmdlXG4gICAqXG4gICAqICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBwYXJzZUNvbmRpdGlvbihjb25kaXRpb24pXG4gICAqXG4gICAqICAgTm90ZSBvdmVyIFN0YXRlbWVudDogRXh0cmFjdCBjb25kaXRpb24gcGFydHNcbiAgICpcbiAgICogICBhbHQgU2ltcGxlIGNvbXBhcmlzb24gb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PnRyYW5zbGF0ZU9wZXJhdG9yczogdHJhbnNsYXRlT3BlcmF0b3JzKG9wZXJhdG9yKVxuICAgKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PlN0YXRlbWVudDogUmV0dXJuIENvdWNoREIgb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogQ3JlYXRlIHNlbGVjdG9yIHdpdGggYXR0cmlidXRlIGFuZCBvcGVyYXRvclxuICAgKiAgIGVsc2UgTk9UIG9wZXJhdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGF0dHIxKVxuICAgKiAgICAgU3RhdGVtZW50LT4+dHJhbnNsYXRlT3BlcmF0b3JzOiB0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKVxuICAgKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PlN0YXRlbWVudDogUmV0dXJuIENvdWNoREIgTk9UIG9wZXJhdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENyZWF0ZSBuZWdhdGVkIHNlbGVjdG9yXG4gICAqICAgZWxzZSBBTkQvT1Igb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogcGFyc2VDb25kaXRpb24oYXR0cjEpXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGNvbXBhcmlzb24pXG4gICAqICAgICBTdGF0ZW1lbnQtPj50cmFuc2xhdGVPcGVyYXRvcnM6IHRyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvcilcbiAgICogICAgIHRyYW5zbGF0ZU9wZXJhdG9ycy0tPj5TdGF0ZW1lbnQ6IFJldHVybiBDb3VjaERCIGdyb3VwIG9wZXJhdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5tZXJnZTogbWVyZ2Uob3BlcmF0b3IsIG9wMSwgb3AyKVxuICAgKiAgICAgbWVyZ2UtLT4+U3RhdGVtZW50OiBSZXR1cm4gbWVyZ2VkIHNlbGVjdG9yXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgU3RhdGVtZW50LS0+PlN0YXRlbWVudDogUmV0dXJuIHF1ZXJ5IHdpdGggc2VsZWN0b3JcbiAgICovXG4gIHByb3RlY3RlZCBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbjxNPik6IE1hbmdvUXVlcnkge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBNZXJnZXMgdHdvIHNlbGVjdG9ycyB3aXRoIGEgbG9naWNhbCBvcGVyYXRvclxuICAgICAqIEBzdW1tYXJ5IEhlbHBlciBmdW5jdGlvbiB0byBjb21iaW5lIHR3byBzZWxlY3RvcnMgd2l0aCBhIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge01hbmdvT3BlcmF0b3J9IG9wIC0gVGhlIG9wZXJhdG9yIHRvIHVzZSBmb3IgbWVyZ2luZ1xuICAgICAqIEBwYXJhbSB7TWFuZ29TZWxlY3Rvcn0gb2JqMSAtIFRoZSBmaXJzdCBzZWxlY3RvclxuICAgICAqIEBwYXJhbSB7TWFuZ29TZWxlY3Rvcn0gb2JqMiAtIFRoZSBzZWNvbmQgc2VsZWN0b3JcbiAgICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgbWVyZ2VkIHF1ZXJ5XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVyZ2UoXG4gICAgICBvcDogTWFuZ29PcGVyYXRvcixcbiAgICAgIG9iajE6IE1hbmdvU2VsZWN0b3IsXG4gICAgICBvYmoyOiBNYW5nb1NlbGVjdG9yXG4gICAgKTogTWFuZ29RdWVyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiB7fSBhcyBNYW5nb1NlbGVjdG9yIH07XG4gICAgICByZXN1bHQuc2VsZWN0b3Jbb3BdID0gW29iajEsIG9iajJdO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dHIxLCBvcGVyYXRvciwgY29tcGFyaXNvbiB9ID0gY29uZGl0aW9uIGFzIHVua25vd24gYXMge1xuICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjxNPjtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3I7XG4gICAgICBjb21wYXJpc29uOiBhbnk7XG4gICAgfTtcblxuICAgIGxldCBvcDogTWFuZ29TZWxlY3RvciA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgaWYgKFxuICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgIG9wZXJhdG9yIGFzIEdyb3VwT3BlcmF0b3JcbiAgICAgICkgPT09IC0xXG4gICAgKSB7XG4gICAgICBvcFthdHRyMSBhcyBzdHJpbmddID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIChvcFthdHRyMSBhcyBzdHJpbmddIGFzIE1hbmdvU2VsZWN0b3IpW3RyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvcildID1cbiAgICAgICAgY29tcGFyaXNvbjtcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSBPcGVyYXRvci5OT1QpIHtcbiAgICAgIG9wID0gdGhpcy5wYXJzZUNvbmRpdGlvbihhdHRyMSBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yIGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICBvcFt0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKV0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgKG9wW3RyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5OT1QpXSBhcyBNYW5nb1NlbGVjdG9yKVtcbiAgICAgICAgKGF0dHIxIGFzIHVua25vd24gYXMgeyBhdHRyMTogc3RyaW5nIH0pLmF0dHIxXG4gICAgICBdID0gY29tcGFyaXNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3AxOiBhbnkgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGF0dHIxIGFzIENvbmRpdGlvbjxNPikuc2VsZWN0b3I7XG4gICAgICBjb25zdCBvcDI6IGFueSA9IHRoaXMucGFyc2VDb25kaXRpb24oY29tcGFyaXNvbiBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yO1xuICAgICAgb3AgPSBtZXJnZSh0cmFuc2xhdGVPcGVyYXRvcnMob3BlcmF0b3IpLCBvcDEsIG9wMikuc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VsZWN0b3I6IG9wIH07XG4gIH1cbn1cbiJdfQ==
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L1N0YXRlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixRQUFRLEVBR1IsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsdUJBQW9CO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsMEJBQXFCO0FBQzNDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGlCQUFpQixHQUNsQix1QkFBb0I7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUFvQjtBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGdCQUFxQyxTQUFRLFNBSXpEO0lBQ0MsWUFBWSxPQUEyQztRQUNyRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdURHO0lBQ08sS0FBSztRQUNiLE1BQU0sU0FBUyxHQUFrQixFQUFFLENBQUM7UUFDcEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENB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LENBQUM7WUFDRCxFQUFFLENBQUMsS0FBZSxDQUFDLEdBQUcsRUFBbUIsQ0FBQztZQUN6QyxFQUFFLENBQUMsS0FBZSxDQUFtQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRSxVQUFVLENBQUM7UUFDZixDQUFDO2FBQU0sSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQXFCLENBQUMsQ0FBQyxRQUF5QixDQUFDO1lBQzFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFtQixDQUFDO1lBQzFELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQW1CLENBQ3BELEtBQXNDLENBQUMsS0FBSyxDQUM5QyxHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNyRSxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbmRpdGlvbixcbiAgR3JvdXBPcGVyYXRvcixcbiAgT3BlcmF0b3IsXG4gIE9yZGVyRGlyZWN0aW9uLFxuICBQYWdpbmF0b3IsXG4gIFJlcG9zaXRvcnksXG4gIFNlcXVlbmNlLFxuICBTdGF0ZW1lbnQsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTWFuZ29PcGVyYXRvciwgTWFuZ29RdWVyeSwgTWFuZ29TZWxlY3RvciB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb3VjaERCQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyB0cmFuc2xhdGVPcGVyYXRvcnMgfSBmcm9tIFwiLi90cmFuc2xhdGVcIjtcbmltcG9ydCB7IENvdWNoREJLZXlzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQ291Y2hEQkdyb3VwT3BlcmF0b3IsXG4gIENvdWNoREJPcGVyYXRvcixcbiAgQ291Y2hEQlF1ZXJ5TGltaXQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ291Y2hEQlBhZ2luYXRvciB9IGZyb20gXCIuL1BhZ2luYXRvclwiO1xuaW1wb3J0IHsgZmluZFByaW1hcnlLZXksIEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RhdGVtZW50IGJ1aWxkZXIgZm9yIENvdWNoREIgTWFuZ28gcXVlcmllc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBmbHVlbnQgaW50ZXJmYWNlIGZvciBidWlsZGluZyBDb3VjaERCIE1hbmdvIHF1ZXJpZXMgd2l0aCB0eXBlIHNhZmV0eVxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gKiBAcGFyYW0gYWRhcHRlciAtIFRoZSBDb3VjaERCIGFkYXB0ZXJcbiAqIEBjbGFzcyBDb3VjaERCU3RhdGVtZW50XG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSBvZiB1c2luZyBDb3VjaERCU3RhdGVtZW50XG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IE15Q291Y2hEQkFkYXB0ZXIoc2NvcGUpO1xuICogY29uc3Qgc3RhdGVtZW50ID0gbmV3IENvdWNoREJTdGF0ZW1lbnQ8VXNlciwgVXNlcltdPihhZGFwdGVyKTtcbiAqXG4gKiAvLyBCdWlsZCBhIHF1ZXJ5XG4gKiBjb25zdCB1c2VycyA9IGF3YWl0IHN0YXRlbWVudFxuICogICAuZnJvbShVc2VyKVxuICogICAud2hlcmUoQ29uZGl0aW9uLmF0dHJpYnV0ZTxVc2VyPignYWdlJykuZ3QoMTgpKVxuICogICAub3JkZXJCeSgnbGFzdE5hbWUnLCAnYXNjJylcbiAqICAgLmxpbWl0KDEwKVxuICogICAuZXhlY3V0ZSgpO1xuICovXG5leHBvcnQgY2xhc3MgQ291Y2hEQlN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgU3RhdGVtZW50PFxuICBNYW5nb1F1ZXJ5LFxuICBNLFxuICBSXG4+IHtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQ291Y2hEQkFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55Pikge1xuICAgIHN1cGVyKGFkYXB0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBCdWlsZHMgYSBDb3VjaERCIE1hbmdvIHF1ZXJ5IGZyb20gdGhlIHN0YXRlbWVudFxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB0aGUgc3RhdGVtZW50J3MgY29uZGl0aW9ucywgc2VsZWN0b3JzLCBhbmQgb3B0aW9ucyBpbnRvIGEgQ291Y2hEQiBNYW5nbyBxdWVyeVxuICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgYnVpbHQgTWFuZ28gcXVlcnlcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGFyZSBpbnZhbGlkIHF1ZXJ5IGNvbmRpdGlvbnNcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgU3RhdGVtZW50XG4gICAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICAgKiAgIHBhcnRpY2lwYW50IHBhcnNlQ29uZGl0aW9uXG4gICAqXG4gICAqICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBidWlsZCgpXG4gICAqICAgTm90ZSBvdmVyIFN0YXRlbWVudDogSW5pdGlhbGl6ZSBzZWxlY3RvcnNcbiAgICogICBTdGF0ZW1lbnQtPj5SZXBvc2l0b3J5OiBHZXQgdGFibGUgbmFtZVxuICAgKiAgIFJlcG9zaXRvcnktLT4+U3RhdGVtZW50OiBSZXR1cm4gdGFibGUgbmFtZVxuICAgKiAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogQ3JlYXRlIGJhc2UgcXVlcnlcbiAgICpcbiAgICogICBhbHQgSGFzIHNlbGVjdFNlbGVjdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IEFkZCBmaWVsZHMgdG8gcXVlcnlcbiAgICogICBlbmRcbiAgICpcbiAgICogICBhbHQgSGFzIHdoZXJlQ29uZGl0aW9uXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENyZWF0ZSBjb21iaW5lZCBjb25kaXRpb24gd2l0aCB0YWJsZVxuICAgKiAgICAgU3RhdGVtZW50LT4+cGFyc2VDb25kaXRpb246IFBhcnNlIGNvbmRpdGlvblxuICAgKiAgICAgcGFyc2VDb25kaXRpb24tLT4+U3RhdGVtZW50OiBSZXR1cm4gcGFyc2VkIGNvbmRpdGlvblxuICAgKlxuICAgKiAgICAgYWx0IElzIGdyb3VwIG9wZXJhdG9yXG4gICAqICAgICAgIGFsdCBJcyBBTkQgb3BlcmF0b3JcbiAgICogICAgICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IEZsYXR0ZW4gbmVzdGVkIEFORCBjb25kaXRpb25zXG4gICAqICAgICAgIGVsc2UgSXMgT1Igb3BlcmF0b3JcbiAgICogICAgICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENvbWJpbmUgd2l0aCB0YWJsZSBjb25kaXRpb25cbiAgICogICAgICAgZWxzZVxuICAgKiAgICAgICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogVGhyb3cgZXJyb3JcbiAgICogICAgICAgZW5kXG4gICAqICAgICBlbHNlXG4gICAqICAgICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogTWVyZ2UgY29uZGl0aW9ucyB3aXRoIGV4aXN0aW5nIHNlbGVjdG9yXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICpcbiAgICogICBhbHQgSGFzIG9yZGVyQnlTZWxlY3RvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBBZGQgc29ydCB0byBxdWVyeVxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBFbnN1cmUgZmllbGQgZXhpc3RzIGluIHNlbGVjdG9yXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgYWx0IEhhcyBsaW1pdFNlbGVjdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IFNldCBsaW1pdFxuICAgKiAgIGVsc2VcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogVXNlIGRlZmF1bHQgbGltaXRcbiAgICogICBlbmRcbiAgICpcbiAgICogICBhbHQgSGFzIG9mZnNldFNlbGVjdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IFNldCBza2lwXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgU3RhdGVtZW50LS0+PlN0YXRlbWVudDogUmV0dXJuIHF1ZXJ5XG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGQoKTogTWFuZ29RdWVyeSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzOiBNYW5nb1NlbGVjdG9yID0ge307XG4gICAgc2VsZWN0b3JzW0NvdWNoREJLZXlzLlRBQkxFXSA9IHt9O1xuICAgIHNlbGVjdG9yc1tDb3VjaERCS2V5cy5UQUJMRV0gPSBSZXBvc2l0b3J5LnRhYmxlKHRoaXMuZnJvbVNlbGVjdG9yKTtcbiAgICBjb25zdCBxdWVyeTogTWFuZ29RdWVyeSA9IHsgc2VsZWN0b3I6IHNlbGVjdG9ycyB9O1xuICAgIGlmICh0aGlzLnNlbGVjdFNlbGVjdG9yKSBxdWVyeS5maWVsZHMgPSB0aGlzLnNlbGVjdFNlbGVjdG9yIGFzIHN0cmluZ1tdO1xuXG4gICAgaWYgKHRoaXMud2hlcmVDb25kaXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbjogTWFuZ29TZWxlY3RvciA9IHRoaXMucGFyc2VDb25kaXRpb24oXG4gICAgICAgIENvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgdGhpcy53aGVyZUNvbmRpdGlvbixcbiAgICAgICAgICBDb25kaXRpb24uYXR0cmlidXRlPE0+KENvdWNoREJLZXlzLlRBQkxFIGFzIGtleW9mIE0pLmVxKFxuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3JbQ291Y2hEQktleXMuVEFCTEVdXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApLnNlbGVjdG9yO1xuICAgICAgY29uc3Qgc2VsZWN0b3JLZXlzID0gT2JqZWN0LmtleXMoY29uZGl0aW9uKSBhcyBNYW5nb09wZXJhdG9yW107XG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdG9yS2V5cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhDb3VjaERCR3JvdXBPcGVyYXRvcikuaW5kZXhPZihzZWxlY3RvcktleXNbMF0pICE9PSAtMVxuICAgICAgKVxuICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yS2V5c1swXSkge1xuICAgICAgICAgIGNhc2UgQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EOlxuICAgICAgICAgICAgY29uZGl0aW9uW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gPSBbXG4gICAgICAgICAgICAgIC4uLk9iamVjdC52YWx1ZXMoXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gYXMgTWFuZ29TZWxlY3RvclxuICAgICAgICAgICAgICApLnJlZHVjZSgoYWNjdW06IE1hbmdvU2VsZWN0b3JbXSwgdmFsOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVG9vIG1hbnkga2V5cyBpbiBxdWVyeSBzZWxlY3Rvci4gc2hvdWxkIGJlIG9uZVwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGsgPSBrZXlzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChrID09PSBDb3VjaERCR3JvdXBPcGVyYXRvci5BTkQpXG4gICAgICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLih2YWxba10gYXMgYW55W10pKTtcbiAgICAgICAgICAgICAgICBlbHNlIGFjY3VtLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBxdWVyeS5zZWxlY3RvciA9IGNvbmRpdGlvbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ291Y2hEQkdyb3VwT3BlcmF0b3IuT1I6IHtcbiAgICAgICAgICAgIGNvbnN0IHM6IFJlY29yZDxhbnksIGFueT4gPSB7fTtcbiAgICAgICAgICAgIHNbQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EXSA9IFtcbiAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAuLi5PYmplY3QuZW50cmllcyhxdWVyeS5zZWxlY3RvcikubWFwKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3IgPSBzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlXCIpO1xuICAgICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY29uZGl0aW9uKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgaWYgKHF1ZXJ5LnNlbGVjdG9yW2tleV0pXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBBICR7a2V5fSBxdWVyeSBwYXJhbSBpcyBhYm91dCB0byBiZSBvdmVycmlkZGVuOiAke3F1ZXJ5LnNlbGVjdG9yW2tleV19IGJ5ICR7dmFsfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcXVlcnkuc2VsZWN0b3Jba2V5XSA9IHZhbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JkZXJCeVNlbGVjdG9yKSB7XG4gICAgICBxdWVyeS5zb3J0ID0gcXVlcnkuc29ydCB8fCBbXTtcbiAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gcXVlcnkuc2VsZWN0b3IgfHwgKHt9IGFzIE1hbmdvU2VsZWN0b3IpO1xuICAgICAgY29uc3QgW3NlbGVjdG9yLCB2YWx1ZV0gPSB0aGlzLm9yZGVyQnlTZWxlY3RvciBhcyBbXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgT3JkZXJEaXJlY3Rpb24sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVjOiBhbnkgPSB7fTtcbiAgICAgIHJlY1tzZWxlY3Rvcl0gPSB2YWx1ZTtcbiAgICAgIChxdWVyeS5zb3J0IGFzIGFueVtdKS5wdXNoKHJlYyBhcyBhbnkpO1xuICAgICAgaWYgKCFxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0pIHtcbiAgICAgICAgcXVlcnkuc2VsZWN0b3Jbc2VsZWN0b3JdID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgICAgKHF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSBhcyBNYW5nb1NlbGVjdG9yKVtDb3VjaERCT3BlcmF0b3IuQklHR0VSXSA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5saW1pdFNlbGVjdG9yKSB7XG4gICAgICBxdWVyeS5saW1pdCA9IHRoaXMubGltaXRTZWxlY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTm8gbGltaXQgc2VsZWN0b3IgZGVmaW5lZC4gVXNpbmcgZGVmYXVsdCBjb3VjaGRiIGxpbWl0IG9mICR7Q291Y2hEQlF1ZXJ5TGltaXR9YFxuICAgICAgKTtcbiAgICAgIHF1ZXJ5LmxpbWl0ID0gQ291Y2hEQlF1ZXJ5TGltaXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub2Zmc2V0U2VsZWN0b3IpIHF1ZXJ5LnNraXAgPSB0aGlzLm9mZnNldFNlbGVjdG9yO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgcGFnaW5hdG9yIGZvciB0aGUgc3RhdGVtZW50XG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgYSBDb3VjaERCUGFnaW5hdG9yIGZvciBwYWdpbmF0ZWQgcmVzdWx0c1xuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXN1bHQgdHlwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBwYWdlIHNpemVcbiAgICogQHJldHVybiB7UHJvbWlzZTxQYWdpbmF0b3I8TSwgUiwgTWFuZ29RdWVyeT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHBhZ2luYXRvclxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiB0aGVyZSdzIGFuIGVycm9yIGJ1aWxkaW5nIHRoZSBxdWVyeVxuICAgKi9cbiAgYXN5bmMgcGFnaW5hdGU8Uj4oc2l6ZTogbnVtYmVyKTogUHJvbWlzZTxQYWdpbmF0b3I8TSwgUiwgTWFuZ29RdWVyeT4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnk6IE1hbmdvUXVlcnkgPSB0aGlzLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gbmV3IENvdWNoREJQYWdpbmF0b3IoXG4gICAgICAgIHRoaXMuYWRhcHRlciBhcyBhbnksXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBzaXplLFxuICAgICAgICB0aGlzLmZyb21TZWxlY3RvclxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvY2Vzc2VzIGEgcmVjb3JkIGZyb20gQ291Y2hEQlxuICAgKiBAc3VtbWFyeSBFeHRyYWN0cyB0aGUgSUQgZnJvbSBhIENvdWNoREIgZG9jdW1lbnQgYW5kIHJldmVydHMgaXQgdG8gYSBtb2RlbCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2FueX0gciAtIFRoZSByYXcgcmVjb3JkIGZyb20gQ291Y2hEQlxuICAgKiBAcGFyYW0gcGtBdHRyIC0gVGhlIHByaW1hcnkga2V5IGF0dHJpYnV0ZSBvZiB0aGUgbW9kZWxcbiAgICogQHBhcmFtIHtcIk51bWJlclwiIHwgXCJCaWdJbnRcIiB8IHVuZGVmaW5lZH0gc2VxdWVuY2VUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIEByZXR1cm4ge2FueX0gVGhlIHByb2Nlc3NlZCByZWNvcmRcbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVjb3JkKFxuICAgIHI6IGFueSxcbiAgICBwa0F0dHI6IGtleW9mIE0sXG4gICAgc2VxdWVuY2VUeXBlOiBcIk51bWJlclwiIHwgXCJCaWdJbnRcIiB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAocltDb3VjaERCS2V5cy5JRF0pIHtcbiAgICAgIGNvbnN0IFssIC4uLmtleUFyZ3NdID0gcltDb3VjaERCS2V5cy5JRF0uc3BsaXQoQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcblxuICAgICAgY29uc3QgaWQgPSBrZXlBcmdzLmpvaW4oXCJfXCIpO1xuICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQoXG4gICAgICAgIHIsXG4gICAgICAgIHRoaXMuZnJvbVNlbGVjdG9yLFxuICAgICAgICBwa0F0dHIsXG4gICAgICAgIFNlcXVlbmNlLnBhcnNlVmFsdWUoc2VxdWVuY2VUeXBlLCBpZClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBNYW5nbyBxdWVyeVxuICAgKiBAc3VtbWFyeSBTZW5kcyBhIHJhdyBNYW5nbyBxdWVyeSB0byBDb3VjaERCIGFuZCBwcm9jZXNzZXMgdGhlIHJlc3VsdHNcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmVzdWx0IHR5cGVcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSByYXdJbnB1dCAtIFRoZSByYXcgTWFuZ28gcXVlcnkgdG8gZXhlY3V0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFI+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcXVlcnkgcmVzdWx0c1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmF3PFI+KHJhd0lucHV0OiBNYW5nb1F1ZXJ5KTogUHJvbWlzZTxSPiB7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KHJhd0lucHV0LCB0cnVlKTtcblxuICAgIGNvbnN0IHBrRGVmID0gZmluZFByaW1hcnlLZXkobmV3IHRoaXMuZnJvbVNlbGVjdG9yKCkpO1xuICAgIGNvbnN0IHBrQXR0ciA9IHBrRGVmLmlkO1xuICAgIGNvbnN0IHR5cGUgPSBwa0RlZi5wcm9wcy50eXBlO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdFNlbGVjdG9yKVxuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyKSA9PiB0aGlzLnByb2Nlc3NSZWNvcmQociwgcGtBdHRyLCB0eXBlKSkgYXMgUjtcbiAgICByZXR1cm4gcmVzdWx0cyBhcyBSO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb25kaXRpb24gaW50byBhIENvdWNoREIgTWFuZ28gcXVlcnkgc2VsZWN0b3JcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBDb25kaXRpb24gb2JqZWN0IGludG8gYSBDb3VjaERCIE1hbmdvIHF1ZXJ5IHNlbGVjdG9yIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxNPn0gY29uZGl0aW9uIC0gVGhlIGNvbmRpdGlvbiB0byBwYXJzZVxuICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgTWFuZ28gcXVlcnkgd2l0aCB0aGUgcGFyc2VkIGNvbmRpdGlvbiBhcyBpdHMgc2VsZWN0b3JcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgU3RhdGVtZW50XG4gICAqICAgcGFydGljaXBhbnQgdHJhbnNsYXRlT3BlcmF0b3JzXG4gICAqICAgcGFydGljaXBhbnQgbWVyZ2VcbiAgICpcbiAgICogICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbilcbiAgICpcbiAgICogICBOb3RlIG92ZXIgU3RhdGVtZW50OiBFeHRyYWN0IGNvbmRpdGlvbiBwYXJ0c1xuICAgKlxuICAgKiAgIGFsdCBTaW1wbGUgY29tcGFyaXNvbiBvcGVyYXRvclxuICAgKiAgICAgU3RhdGVtZW50LT4+dHJhbnNsYXRlT3BlcmF0b3JzOiB0cmFuc2xhdGVPcGVyYXRvcnMob3BlcmF0b3IpXG4gICAqICAgICB0cmFuc2xhdGVPcGVyYXRvcnMtLT4+U3RhdGVtZW50OiBSZXR1cm4gQ291Y2hEQiBvcGVyYXRvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBDcmVhdGUgc2VsZWN0b3Igd2l0aCBhdHRyaWJ1dGUgYW5kIG9wZXJhdG9yXG4gICAqICAgZWxzZSBOT1Qgb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogcGFyc2VDb25kaXRpb24oYXR0cjEpXG4gICAqICAgICBTdGF0ZW1lbnQtPj50cmFuc2xhdGVPcGVyYXRvcnM6IHRyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5OT1QpXG4gICAqICAgICB0cmFuc2xhdGVPcGVyYXRvcnMtLT4+U3RhdGVtZW50OiBSZXR1cm4gQ291Y2hEQiBOT1Qgb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogQ3JlYXRlIG5lZ2F0ZWQgc2VsZWN0b3JcbiAgICogICBlbHNlIEFORC9PUiBvcGVyYXRvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBwYXJzZUNvbmRpdGlvbihhdHRyMSlcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogcGFyc2VDb25kaXRpb24oY29tcGFyaXNvbilcbiAgICogICAgIFN0YXRlbWVudC0+PnRyYW5zbGF0ZU9wZXJhdG9yczogdHJhbnNsYXRlT3BlcmF0b3JzKG9wZXJhdG9yKVxuICAgKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PlN0YXRlbWVudDogUmV0dXJuIENvdWNoREIgZ3JvdXAgb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+Pm1lcmdlOiBtZXJnZShvcGVyYXRvciwgb3AxLCBvcDIpXG4gICAqICAgICBtZXJnZS0tPj5TdGF0ZW1lbnQ6IFJldHVybiBtZXJnZWQgc2VsZWN0b3JcbiAgICogICBlbmRcbiAgICpcbiAgICogICBTdGF0ZW1lbnQtLT4+U3RhdGVtZW50OiBSZXR1cm4gcXVlcnkgd2l0aCBzZWxlY3RvclxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uPE0+KTogTWFuZ29RdWVyeSB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE1lcmdlcyB0d28gc2VsZWN0b3JzIHdpdGggYSBsb2dpY2FsIG9wZXJhdG9yXG4gICAgICogQHN1bW1hcnkgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbWJpbmUgdHdvIHNlbGVjdG9ycyB3aXRoIGEgbG9naWNhbCBvcGVyYXRvclxuICAgICAqIEBwYXJhbSB7TWFuZ29PcGVyYXRvcn0gb3AgLSBUaGUgb3BlcmF0b3IgdG8gdXNlIGZvciBtZXJnaW5nXG4gICAgICogQHBhcmFtIHtNYW5nb1NlbGVjdG9yfSBvYmoxIC0gVGhlIGZpcnN0IHNlbGVjdG9yXG4gICAgICogQHBhcmFtIHtNYW5nb1NlbGVjdG9yfSBvYmoyIC0gVGhlIHNlY29uZCBzZWxlY3RvclxuICAgICAqIEByZXR1cm4ge01hbmdvUXVlcnl9IFRoZSBtZXJnZWQgcXVlcnlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZXJnZShcbiAgICAgIG9wOiBNYW5nb09wZXJhdG9yLFxuICAgICAgb2JqMTogTWFuZ29TZWxlY3RvcixcbiAgICAgIG9iajI6IE1hbmdvU2VsZWN0b3JcbiAgICApOiBNYW5nb1F1ZXJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogTWFuZ29RdWVyeSA9IHsgc2VsZWN0b3I6IHt9IGFzIE1hbmdvU2VsZWN0b3IgfTtcbiAgICAgIHJlc3VsdC5zZWxlY3RvcltvcF0gPSBbb2JqMSwgb2JqMl07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHsgYXR0cjEsIG9wZXJhdG9yLCBjb21wYXJpc29uIH0gPSBjb25kaXRpb24gYXMgdW5rbm93biBhcyB7XG4gICAgICBhdHRyMTogc3RyaW5nIHwgQ29uZGl0aW9uPE0+O1xuICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yIHwgR3JvdXBPcGVyYXRvcjtcbiAgICAgIGNvbXBhcmlzb246IGFueTtcbiAgICB9O1xuXG4gICAgbGV0IG9wOiBNYW5nb1NlbGVjdG9yID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICBpZiAoXG4gICAgICBbR3JvdXBPcGVyYXRvci5BTkQsIEdyb3VwT3BlcmF0b3IuT1IsIE9wZXJhdG9yLk5PVF0uaW5kZXhPZihcbiAgICAgICAgb3BlcmF0b3IgYXMgR3JvdXBPcGVyYXRvclxuICAgICAgKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIG9wW2F0dHIxIGFzIHN0cmluZ10gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgKG9wW2F0dHIxIGFzIHN0cmluZ10gYXMgTWFuZ29TZWxlY3RvcilbdHJhbnNsYXRlT3BlcmF0b3JzKG9wZXJhdG9yKV0gPVxuICAgICAgICBjb21wYXJpc29uO1xuICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09IE9wZXJhdG9yLk5PVCkge1xuICAgICAgb3AgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGF0dHIxIGFzIENvbmRpdGlvbjxNPikuc2VsZWN0b3IgYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIG9wW3RyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5OT1QpXSA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICAob3BbdHJhbnNsYXRlT3BlcmF0b3JzKE9wZXJhdG9yLk5PVCldIGFzIE1hbmdvU2VsZWN0b3IpW1xuICAgICAgICAoYXR0cjEgYXMgdW5rbm93biBhcyB7IGF0dHIxOiBzdHJpbmcgfSkuYXR0cjFcbiAgICAgIF0gPSBjb21wYXJpc29uO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcDE6IGFueSA9IHRoaXMucGFyc2VDb25kaXRpb24oYXR0cjEgYXMgQ29uZGl0aW9uPE0+KS5zZWxlY3RvcjtcbiAgICAgIGNvbnN0IG9wMjogYW55ID0gdGhpcy5wYXJzZUNvbmRpdGlvbihjb21wYXJpc29uIGFzIENvbmRpdGlvbjxNPikuc2VsZWN0b3I7XG4gICAgICBvcCA9IG1lcmdlKHRyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvciksIG9wMSwgb3AyKS5zZWxlY3RvcjtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzZWxlY3Rvcjogb3AgfTtcbiAgfVxufVxuIl19