openclaw-productboard 1.0.14 → 1.0.15
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.
|
@@ -147,6 +147,9 @@ export class ProductBoardClient {
|
|
|
147
147
|
this.cache.invalidatePattern('pb_feature_search:');
|
|
148
148
|
}
|
|
149
149
|
async searchFeatures(query, limit = 50) {
|
|
150
|
+
if (!query) {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
150
153
|
const cacheKey = ApiCache.generateKey('pb_feature_search', { query, limit });
|
|
151
154
|
return this.cache.wrap(cacheKey, async () => {
|
|
152
155
|
// ProductBoard doesn't have a dedicated search endpoint for features
|
|
@@ -271,6 +274,9 @@ export class ProductBoardClient {
|
|
|
271
274
|
// Search Methods
|
|
272
275
|
// ============================================
|
|
273
276
|
async search(params) {
|
|
277
|
+
if (!params.query) {
|
|
278
|
+
return [];
|
|
279
|
+
}
|
|
274
280
|
const cacheKey = ApiCache.generateKey('pb_search', { query: params.query, type: params.type, limit: params.limit });
|
|
275
281
|
return this.cache.wrap(cacheKey, async () => {
|
|
276
282
|
const results = [];
|
|
@@ -369,4 +375,4 @@ export class ProductBoardClient {
|
|
|
369
375
|
return this.rateLimiter.stats();
|
|
370
376
|
}
|
|
371
377
|
}
|
|
372
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBd0QsTUFBTSxPQUFPLENBQUM7QUFxQjdFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQWUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEIsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixNQUFNLENBQWdCO0lBQ3RCLEtBQUssQ0FBVztJQUNoQixXQUFXLENBQWM7SUFDekIsT0FBTyxDQUFTO0lBRXhCLFlBQVksTUFBb0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDO1FBRXJELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzVDLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFdBQVcsRUFBRSxHQUFHO2FBQ2pCO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUNwQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUk7U0FDNUMsQ0FBQyxDQUFDO1FB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WUFDNUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvZHVjdEJvYXJkIEFQSSBDbGllbnRcbiAqL1xuXG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtcbiAgRmVhdHVyZSxcbiAgUHJvZHVjdCxcbiAgQ29tcG9uZW50LFxuICBOb3RlLFxuICBVc2VyLFxuICBDdXJyZW50VXNlcixcbiAgU2VhcmNoUmVzdWx0LFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgQ3JlYXRlRmVhdHVyZVBhcmFtcyxcbiAgVXBkYXRlRmVhdHVyZVBhcmFtcyxcbiAgTGlzdEZlYXR1cmVzUGFyYW1zLFxuICBMaXN0UHJvZHVjdHNQYXJhbXMsXG4gIENyZWF0ZU5vdGVQYXJhbXMsXG4gIExpc3ROb3Rlc1BhcmFtcyxcbiAgTGlzdFVzZXJzUGFyYW1zLFxuICBTZWFyY2hQYXJhbXMsXG4gIFBsdWdpbkNvbmZpZyxcbiAgUHJvZHVjdEhpZXJhcmNoeSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBwYXJzZUFwaUVycm9yLFxuICBpc1JldHJ5YWJsZUVycm9yLFxuICBnZXRSZXRyeURlbGF5LFxuICBQcm9kdWN0Qm9hcmRFcnJvcixcbn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgQXBpQ2FjaGUsIGdldENhY2hlIH0gZnJvbSAnLi4vdXRpbHMvY2FjaGUuanMnO1xuaW1wb3J0IHsgUmF0ZUxpbWl0ZXIsIGdldFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vdXRpbHMvcmF0ZS1saW1pdGVyLmpzJztcblxuY29uc3QgREVGQVVMVF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5wcm9kdWN0Ym9hcmQuY29tJztcbmNvbnN0IE1BWF9SRVRSSUVTID0gMztcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RCb2FyZENsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuICBwcml2YXRlIGNhY2hlOiBBcGlDYWNoZTtcbiAgcHJpdmF0ZSByYXRlTGltaXRlcjogUmF0ZUxpbWl0ZXI7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUGx1Z2luQ29uZmlnKSB7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmFwaUJhc2VVcmwgfHwgREVGQVVMVF9CQVNFX1VSTDtcblxuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7Y29uZmlnLmFwaVRva2VufWAsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdYLVZlcnNpb24nOiAnMScsXG4gICAgICB9LFxuICAgICAgdGltZW91dDogMzAwMDAsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhY2hlID0gZ2V0Q2FjaGUoe1xuICAgICAgdHRsOiAoY29uZmlnLmNhY2hlVHRsU2Vjb25kcyB8fCAzMDApICogMTAwMCxcbiAgICB9KTtcblxuICAgIHRoaXMucmF0ZUxpbWl0ZXIgPSBnZXRSYXRlTGltaXRlcih7XG4gICAgICBtYXhUb2tlbnM6IGNvbmZpZy5yYXRlTGltaXRQZXJNaW51dGUgfHwgMTAwLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR1cEludGVyY2VwdG9ycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEludGVyY2VwdG9ycygpOiB2b2lkIHtcbiAgICAvLyBSZXNwb25zZSBpbnRlcmNlcHRvciBmb3IgZXJyb3IgaGFuZGxpbmdcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZSxcbiAgICAgIChlcnJvcjogQXhpb3NFcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCB7IHN0YXR1cywgZGF0YSwgaGVhZGVycyB9ID0gZXJyb3IucmVzcG9uc2U7XG4gICAgICAgICAgdGhyb3cgcGFyc2VBcGlFcnJvcihcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIGRhdGEgYXMgeyBjb2RlPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nOyBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSxcbiAgICAgICAgICAgIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgUHJvZHVjdEJvYXJkRXJyb3IoXG4gICAgICAgICAgZXJyb3IubWVzc2FnZSB8fCAnTmV0d29yayBlcnJvcicsXG4gICAgICAgICAgJ05FVFdPUktfRVJST1InLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSByZXF1ZXN0IHdpdGggcmV0cnkgbG9naWMgYW5kIHJhdGUgbGltaXRpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyxcbiAgICByZXRyeUNvdW50ID0gMFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJhdGVMaW1pdGVyLmFjcXVpcmUoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Q8VD4oY29uZmlnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaXNSZXRyeWFibGVFcnJvcihlcnJvcikgJiYgcmV0cnlDb3VudCA8IE1BWF9SRVRSSUVTKSB7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gZ2V0UmV0cnlEZWxheShlcnJvciwgcmV0cnlDb3VudCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2xlZXAoZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KGNvbmZpZywgcmV0cnlDb3VudCArIDEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFnaW5hdGUgdGhyb3VnaCBhbGwgcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYWdpbmF0ZTxUPihcbiAgICBlbmRwb2ludDogc3RyaW5nLFxuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgICBtYXhJdGVtcz86IG51bWJlclxuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICAgIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgubWluKHBhcmFtcy5saW1pdCBhcyBudW1iZXIgfHwgMTAwLCAxMDApO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8UGFnaW5hdGVkUmVzcG9uc2U8VD4+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBlbmRwb2ludCxcbiAgICAgICAgcGFyYW1zOiB7IC4uLnBhcmFtcywgbGltaXQsIHBhZ2VDdXJzb3I6IGN1cnNvciB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdHMucHVzaCguLi5yZXNwb25zZS5kYXRhKTtcblxuICAgICAgaWYgKG1heEl0ZW1zICYmIHJlc3VsdHMubGVuZ3RoID49IG1heEl0ZW1zKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRzLnNsaWNlKDAsIG1heEl0ZW1zKTtcbiAgICAgIH1cblxuICAgICAgY3Vyc29yID0gcmVzcG9uc2UubGlua3M/Lm5leHRcbiAgICAgICAgPyBuZXcgVVJMKHJlc3BvbnNlLmxpbmtzLm5leHQpLnNlYXJjaFBhcmFtcy5nZXQoJ3BhZ2VDdXJzb3InKSB8fCB1bmRlZmluZWRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfSB3aGlsZSAoY3Vyc29yKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRmVhdHVyZSBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgY3JlYXRlRmVhdHVyZShwYXJhbXM6IENyZWF0ZUZlYXR1cmVQYXJhbXMpOiBQcm9taXNlPEZlYXR1cmU+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBGZWF0dXJlIH0+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiAnL2ZlYXR1cmVzJyxcbiAgICAgIGRhdGE6IHsgZGF0YTogcGFyYW1zIH0sXG4gICAgfSk7XG5cbiAgICAvLyBJbnZhbGlkYXRlIGZlYXR1cmUgbGlzdCBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX2xpc3Q6Jyk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9zZWFyY2g6Jyk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0RmVhdHVyZXMocGFyYW1zOiBMaXN0RmVhdHVyZXNQYXJhbXMgPSB7fSk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICBpZiAocGFyYW1zLnByb2R1Y3RJZCkgcXVlcnlQYXJhbXNbJ3Byb2R1Y3QuaWQnXSA9IHBhcmFtcy5wcm9kdWN0SWQ7XG4gICAgICBpZiAocGFyYW1zLmNvbXBvbmVudElkKSBxdWVyeVBhcmFtc1snY29tcG9uZW50LmlkJ10gPSBwYXJhbXMuY29tcG9uZW50SWQ7XG4gICAgICBpZiAocGFyYW1zLnN0YXR1cykgcXVlcnlQYXJhbXMuc3RhdHVzID0gcGFyYW1zLnN0YXR1cztcbiAgICAgIGlmIChwYXJhbXMub3duZXJJZCkgcXVlcnlQYXJhbXNbJ293bmVyLmlkJ10gPSBwYXJhbXMub3duZXJJZDtcblxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGU8RmVhdHVyZT4oJy9mZWF0dXJlcycsIHF1ZXJ5UGFyYW1zLCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmVhdHVyZShpZDogc3RyaW5nKTogUHJvbWlzZTxGZWF0dXJlPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9nZXQnLCB7IGlkIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogRmVhdHVyZSB9Pih7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogYC9mZWF0dXJlcy8ke2lkfWAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZlYXR1cmUoaWQ6IHN0cmluZywgcGFyYW1zOiBVcGRhdGVGZWF0dXJlUGFyYW1zKTogUHJvbWlzZTxGZWF0dXJlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogRmVhdHVyZSB9Pih7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB1cmw6IGAvZmVhdHVyZXMvJHtpZH1gLFxuICAgICAgZGF0YTogeyBkYXRhOiBwYXJhbXMgfSxcbiAgICB9KTtcblxuICAgIC8vIEludmFsaWRhdGUgY2FjaGVzXG4gICAgdGhpcy5jYWNoZS5kZWxldGUoQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2ZlYXR1cmVfZ2V0JywgeyBpZCB9KSk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9saXN0OicpO1xuICAgIHRoaXMuY2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oJ3BiX2ZlYXR1cmVfc2VhcmNoOicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmVhdHVyZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0PHZvaWQ+KHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB1cmw6IGAvZmVhdHVyZXMvJHtpZH1gLFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9nZXQnLCB7IGlkIH0pKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX2xpc3Q6Jyk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9zZWFyY2g6Jyk7XG4gIH1cblxuICBhc3luYyBzZWFyY2hGZWF0dXJlcyhxdWVyeTogc3RyaW5nLCBsaW1pdCA9IDUwKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX3NlYXJjaCcsIHsgcXVlcnksIGxpbWl0IH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUHJvZHVjdEJvYXJkIGRvZXNuJ3QgaGF2ZSBhIGRlZGljYXRlZCBzZWFyY2ggZW5kcG9pbnQgZm9yIGZlYXR1cmVzXG4gICAgICAvLyBXZSdsbCBsaXN0IGFsbCBhbmQgZmlsdGVyIGNsaWVudC1zaWRlXG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMubGlzdEZlYXR1cmVzKHsgbGltaXQ6IDUwMCB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5TG93ZXIgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICByZXR1cm4gZmVhdHVyZXNcbiAgICAgICAgLmZpbHRlcigoZikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IGYubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKTtcbiAgICAgICAgICBjb25zdCBkZXNjTWF0Y2ggPSBmLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpO1xuICAgICAgICAgIHJldHVybiBuYW1lTWF0Y2ggfHwgZGVzY01hdGNoO1xuICAgICAgICB9KVxuICAgICAgICAuc2xpY2UoMCwgbGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUHJvZHVjdCBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgbGlzdFByb2R1Y3RzKHBhcmFtczogTGlzdFByb2R1Y3RzUGFyYW1zID0ge30pOiBQcm9taXNlPFByb2R1Y3RbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3Byb2R1Y3RfbGlzdCcsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxQcm9kdWN0PignL3Byb2R1Y3RzJywge30sIHBhcmFtcy5saW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRQcm9kdWN0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFByb2R1Y3Q+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9wcm9kdWN0X2dldCcsIHsgaWQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBQcm9kdWN0IH0+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgL3Byb2R1Y3RzLyR7aWR9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdENvbXBvbmVudHMocGFyYW1zOiB7IHByb2R1Y3RJZD86IHN0cmluZzsgbGltaXQ/OiBudW1iZXIgfSA9IHt9KTogUHJvbWlzZTxDb21wb25lbnRbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2NvbXBvbmVudF9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgaWYgKHBhcmFtcy5wcm9kdWN0SWQpIHF1ZXJ5UGFyYW1zWydwcm9kdWN0LmlkJ10gPSBwYXJhbXMucHJvZHVjdElkO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxDb21wb25lbnQ+KCcvY29tcG9uZW50cycsIHF1ZXJ5UGFyYW1zLCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZHVjdEhpZXJhcmNoeSgpOiBQcm9taXNlPFByb2R1Y3RIaWVyYXJjaHk+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9wcm9kdWN0X2hpZXJhcmNoeScsIHt9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0cywgY29tcG9uZW50c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMubGlzdFByb2R1Y3RzKHsgbGltaXQ6IDUwMCB9KSxcbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50cyh7IGxpbWl0OiA1MDAgfSksXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIHsgcHJvZHVjdHMsIGNvbXBvbmVudHMgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE5vdGUgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIGNyZWF0ZU5vdGUocGFyYW1zOiBDcmVhdGVOb3RlUGFyYW1zKTogUHJvbWlzZTxOb3RlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogTm90ZSB9Pih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogJy9ub3RlcycsXG4gICAgICBkYXRhOiB7IGRhdGE6IHBhcmFtcyB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBub3RlIGxpc3QgY2FjaGVzXG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfbm90ZV9saXN0OicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdE5vdGVzKHBhcmFtczogTGlzdE5vdGVzUGFyYW1zID0ge30pOiBQcm9taXNlPE5vdGVbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX25vdGVfbGlzdCcsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGlmIChwYXJhbXMuY3JlYXRlZEZyb20pIHF1ZXJ5UGFyYW1zLmNyZWF0ZWRGcm9tID0gcGFyYW1zLmNyZWF0ZWRGcm9tO1xuICAgICAgaWYgKHBhcmFtcy5jcmVhdGVkVG8pIHF1ZXJ5UGFyYW1zLmNyZWF0ZWRUbyA9IHBhcmFtcy5jcmVhdGVkVG87XG5cbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPE5vdGU+KCcvbm90ZXMnLCBxdWVyeVBhcmFtcywgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vdGUoaWQ6IHN0cmluZyk6IFByb21pc2U8Tm90ZT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX25vdGVfZ2V0JywgeyBpZCB9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IGRhdGE6IE5vdGUgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGAvbm90ZXMvJHtpZH1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhdHRhY2hOb3RlVG9GZWF0dXJlKG5vdGVJZDogc3RyaW5nLCBmZWF0dXJlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdDx2b2lkPih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogYC9ub3Rlcy8ke25vdGVJZH0vY29ubmVjdGlvbnNgLFxuICAgICAgZGF0YToge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZmVhdHVyZTogeyBpZDogZmVhdHVyZUlkIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfbm90ZV9nZXQnLCB7IGlkOiBub3RlSWQgfSkpO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQ6IGZlYXR1cmVJZCB9KSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VyIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPEN1cnJlbnRVc2VyPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfdXNlcl9jdXJyZW50Jywge30pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogQ3VycmVudFVzZXIgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6ICcvdXNlcnMvbWUnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0VXNlcnMocGFyYW1zOiBMaXN0VXNlcnNQYXJhbXMgPSB7fSk6IFByb21pc2U8VXNlcltdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfdXNlcl9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPFVzZXI+KCcvdXNlcnMnLCB7fSwgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlYXJjaCBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgc2VhcmNoKHBhcmFtczogU2VhcmNoUGFyYW1zKTogUHJvbWlzZTxTZWFyY2hSZXN1bHRbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3NlYXJjaCcsIHsgcXVlcnk6IHBhcmFtcy5xdWVyeSwgdHlwZTogcGFyYW1zLnR5cGUsIGxpbWl0OiBwYXJhbXMubGltaXQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHRzOiBTZWFyY2hSZXN1bHRbXSA9IFtdO1xuICAgICAgY29uc3QgcXVlcnlMb3dlciA9IHBhcmFtcy5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbGltaXQgPSBwYXJhbXMubGltaXQgfHwgNTA7XG5cbiAgICAgIC8vIFNlYXJjaCBmZWF0dXJlc1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ2ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgdGhpcy5zZWFyY2hGZWF0dXJlcyhxdWVyeUxvd2VyLCBsaW1pdCk7XG4gICAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgICAuLi5mZWF0dXJlcy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAnZmVhdHVyZScgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGYubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbGlua3M6IGYubGlua3MsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlYXJjaCBwcm9kdWN0c1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ3Byb2R1Y3QnKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RzID0gYXdhaXQgdGhpcy5saXN0UHJvZHVjdHMoeyBsaW1pdDogMTAwIH0pO1xuICAgICAgICBjb25zdCBtYXRjaGluZ1Byb2R1Y3RzID0gcHJvZHVjdHNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgIHAubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICBwLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLm1hdGNoaW5nUHJvZHVjdHMubWFwKChwKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ3Byb2R1Y3QnIGFzIGNvbnN0LFxuICAgICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGxpbmtzOiBwLmxpbmtzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWFyY2ggY29tcG9uZW50c1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGF3YWl0IHRoaXMubGlzdENvbXBvbmVudHMoeyBsaW1pdDogMTAwIH0pO1xuICAgICAgICBjb25zdCBtYXRjaGluZ0NvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICBjLm5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcikgfHxcbiAgICAgICAgICAgICAgYy5kZXNjcmlwdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc2xpY2UoMCwgbGltaXQpO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgICAuLi5tYXRjaGluZ0NvbXBvbmVudHMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogYy5pZCxcbiAgICAgICAgICAgIG5hbWU6IGMubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbGlua3M6IGMubGlua3MsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlYXJjaCBub3Rlc1xuICAgICAgaWYgKCFwYXJhbXMudHlwZSB8fCBwYXJhbXMudHlwZSA9PT0gJ25vdGUnKSB7XG4gICAgICAgIGNvbnN0IG5vdGVzID0gYXdhaXQgdGhpcy5saXN0Tm90ZXMoeyBsaW1pdDogMTAwIH0pO1xuICAgICAgICBjb25zdCBtYXRjaGluZ05vdGVzID0gbm90ZXNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKG4pID0+XG4gICAgICAgICAgICAgIG4udGl0bGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcikgfHxcbiAgICAgICAgICAgICAgbi5jb250ZW50Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLm1hdGNoaW5nTm90ZXMubWFwKChuKSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogJ25vdGUnIGFzIGNvbnN0LFxuICAgICAgICAgICAgaWQ6IG4uaWQsXG4gICAgICAgICAgICB0aXRsZTogbi50aXRsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG4uY29udGVudD8uc3Vic3RyaW5nKDAsIDIwMCksXG4gICAgICAgICAgICBsaW5rczogbi5saW5rcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdHMuc2xpY2UoMCwgbGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXRpbGl0eSBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBBUEkgdG9rZW4gYnkgbWFraW5nIGEgdGVzdCByZXF1ZXN0XG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZVRva2VuKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNhY2hlZCBkYXRhXG4gICAqL1xuICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdGlzdGljc1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuc3RhdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmF0ZSBsaW1pdGVyIHN0YXRpc3RpY3NcbiAgICovXG4gIGdldFJhdGVMaW1pdGVyU3RhdHMoKTogeyB0b2tlbnM6IG51bWJlcjsgbWF4VG9rZW5zOiBudW1iZXI7IHdhaXRUaW1lOiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHRoaXMucmF0ZUxpbWl0ZXIuc3RhdHMoKTtcbiAgfVxufVxuIl19
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBd0QsTUFBTSxPQUFPLENBQUM7QUFxQjdFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQWUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEIsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixNQUFNLENBQWdCO0lBQ3RCLEtBQUssQ0FBVztJQUNoQixXQUFXLENBQWM7SUFDekIsT0FBTyxDQUFTO0lBRXhCLFlBQVksTUFBb0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDO1FBRXJELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzVDLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFdBQVcsRUFBRSxHQUFHO2FBQ2pCO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUNwQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUk7U0FDNUMsQ0FBQyxDQUFDO1FB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SUFDTCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGtCQUFrQjtJQUNsQiwrQ0FBK0M7SUFFL0M7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYTtRQUNqQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm9kdWN0Qm9hcmQgQVBJIENsaWVudFxuICovXG5cbmltcG9ydCBheGlvcywgeyBBeGlvc0luc3RhbmNlLCBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQge1xuICBGZWF0dXJlLFxuICBQcm9kdWN0LFxuICBDb21wb25lbnQsXG4gIE5vdGUsXG4gIFVzZXIsXG4gIEN1cnJlbnRVc2VyLFxuICBTZWFyY2hSZXN1bHQsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBDcmVhdGVGZWF0dXJlUGFyYW1zLFxuICBVcGRhdGVGZWF0dXJlUGFyYW1zLFxuICBMaXN0RmVhdHVyZXNQYXJhbXMsXG4gIExpc3RQcm9kdWN0c1BhcmFtcyxcbiAgQ3JlYXRlTm90ZVBhcmFtcyxcbiAgTGlzdE5vdGVzUGFyYW1zLFxuICBMaXN0VXNlcnNQYXJhbXMsXG4gIFNlYXJjaFBhcmFtcyxcbiAgUGx1Z2luQ29uZmlnLFxuICBQcm9kdWN0SGllcmFyY2h5LFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIHBhcnNlQXBpRXJyb3IsXG4gIGlzUmV0cnlhYmxlRXJyb3IsXG4gIGdldFJldHJ5RGVsYXksXG4gIFByb2R1Y3RCb2FyZEVycm9yLFxufSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBBcGlDYWNoZSwgZ2V0Q2FjaGUgfSBmcm9tICcuLi91dGlscy9jYWNoZS5qcyc7XG5pbXBvcnQgeyBSYXRlTGltaXRlciwgZ2V0UmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi91dGlscy9yYXRlLWxpbWl0ZXIuanMnO1xuXG5jb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnByb2R1Y3Rib2FyZC5jb20nO1xuY29uc3QgTUFYX1JFVFJJRVMgPSAzO1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjdEJvYXJkQ2xpZW50IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zSW5zdGFuY2U7XG4gIHByaXZhdGUgY2FjaGU6IEFwaUNhY2hlO1xuICBwcml2YXRlIHJhdGVMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQbHVnaW5Db25maWcpIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYXBpQmFzZVVybCB8fCBERUZBVUxUX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy5iYXNlVXJsLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtjb25maWcuYXBpVG9rZW59YCxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1gtVmVyc2lvbic6ICcxJyxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiAzMDAwMCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2FjaGUgPSBnZXRDYWNoZSh7XG4gICAgICB0dGw6IChjb25maWcuY2FjaGVUdGxTZWNvbmRzIHx8IDMwMCkgKiAxMDAwLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yYXRlTGltaXRlciA9IGdldFJhdGVMaW1pdGVyKHtcbiAgICAgIG1heFRva2VuczogY29uZmlnLnJhdGVMaW1pdFBlck1pbnV0ZSB8fCAxMDAsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldHVwSW50ZXJjZXB0b3JzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSW50ZXJjZXB0b3JzKCk6IHZvaWQge1xuICAgIC8vIFJlc3BvbnNlIGludGVyY2VwdG9yIGZvciBlcnJvciBoYW5kbGluZ1xuICAgIHRoaXMuY2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoXG4gICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLFxuICAgICAgKGVycm9yOiBBeGlvc0Vycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHsgc3RhdHVzLCBkYXRhLCBoZWFkZXJzIH0gPSBlcnJvci5yZXNwb25zZTtcbiAgICAgICAgICB0aHJvdyBwYXJzZUFwaUVycm9yKFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgZGF0YSBhcyB7IGNvZGU/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmc7IGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LFxuICAgICAgICAgICAgaGVhZGVyc1sncmV0cnktYWZ0ZXInXSBhcyBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBQcm9kdWN0Qm9hcmRFcnJvcihcbiAgICAgICAgICBlcnJvci5tZXNzYWdlIHx8ICdOZXR3b3JrIGVycm9yJyxcbiAgICAgICAgICAnTkVUV09SS19FUlJPUicsXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHJlcXVlc3Qgd2l0aCByZXRyeSBsb2dpYyBhbmQgcmF0ZSBsaW1pdGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICAgIHJldHJ5Q291bnQgPSAwXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGF3YWl0IHRoaXMucmF0ZUxpbWl0ZXIuYWNxdWlyZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdDxUPihjb25maWcpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChpc1JldHJ5YWJsZUVycm9yKGVycm9yKSAmJiByZXRyeUNvdW50IDwgTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgY29uc3QgZGVsYXkgPSBnZXRSZXRyeURlbGF5KGVycm9yLCByZXRyeUNvdW50KTtcbiAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oY29uZmlnLCByZXRyeUNvdW50ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYWdpbmF0ZSB0aHJvdWdoIGFsbCByZXN1bHRzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBhZ2luYXRlPFQ+KFxuICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuICAgIG1heEl0ZW1zPzogbnVtYmVyXG4gICk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcmVzdWx0czogVFtdID0gW107XG4gICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5taW4ocGFyYW1zLmxpbWl0IGFzIG51bWJlciB8fCAxMDAsIDEwMCk7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdDxQYWdpbmF0ZWRSZXNwb25zZTxUPj4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGVuZHBvaW50LFxuICAgICAgICBwYXJhbXM6IHsgLi4ucGFyYW1zLCBsaW1pdCwgcGFnZUN1cnNvcjogY3Vyc29yIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy5wdXNoKC4uLnJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICBpZiAobWF4SXRlbXMgJiYgcmVzdWx0cy5sZW5ndGggPj0gbWF4SXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuc2xpY2UoMCwgbWF4SXRlbXMpO1xuICAgICAgfVxuXG4gICAgICBjdXJzb3IgPSByZXNwb25zZS5saW5rcz8ubmV4dFxuICAgICAgICA/IG5ldyBVUkwocmVzcG9uc2UubGlua3MubmV4dCkuc2VhcmNoUGFyYW1zLmdldCgncGFnZUN1cnNvcicpIHx8IHVuZGVmaW5lZFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9IHdoaWxlIChjdXJzb3IpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGZWF0dXJlIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBjcmVhdGVGZWF0dXJlKHBhcmFtczogQ3JlYXRlRmVhdHVyZVBhcmFtcyk6IFByb21pc2U8RmVhdHVyZT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IGRhdGE6IEZlYXR1cmUgfT4oe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6ICcvZmVhdHVyZXMnLFxuICAgICAgZGF0YTogeyBkYXRhOiBwYXJhbXMgfSxcbiAgICB9KTtcblxuICAgIC8vIEludmFsaWRhdGUgZmVhdHVyZSBsaXN0IGNhY2hlc1xuICAgIHRoaXMuY2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oJ3BiX2ZlYXR1cmVfbGlzdDonKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX3NlYXJjaDonKTtcblxuICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGZWF0dXJlcyhwYXJhbXM6IExpc3RGZWF0dXJlc1BhcmFtcyA9IHt9KTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2xpc3QnLCBwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICAgIGlmIChwYXJhbXMucHJvZHVjdElkKSBxdWVyeVBhcmFtc1sncHJvZHVjdC5pZCddID0gcGFyYW1zLnByb2R1Y3RJZDtcbiAgICAgIGlmIChwYXJhbXMuY29tcG9uZW50SWQpIHF1ZXJ5UGFyYW1zWydjb21wb25lbnQuaWQnXSA9IHBhcmFtcy5jb21wb25lbnRJZDtcbiAgICAgIGlmIChwYXJhbXMuc3RhdHVzKSBxdWVyeVBhcmFtcy5zdGF0dXMgPSBwYXJhbXMuc3RhdHVzO1xuICAgICAgaWYgKHBhcmFtcy5vd25lcklkKSBxdWVyeVBhcmFtc1snb3duZXIuaWQnXSA9IHBhcmFtcy5vd25lcklkO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxGZWF0dXJlPignL2ZlYXR1cmVzJywgcXVlcnlQYXJhbXMsIHBhcmFtcy5saW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRGZWF0dXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPEZlYXR1cmU+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBGZWF0dXJlIH0+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgL2ZlYXR1cmVzLyR7aWR9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmVhdHVyZShpZDogc3RyaW5nLCBwYXJhbXM6IFVwZGF0ZUZlYXR1cmVQYXJhbXMpOiBQcm9taXNlPEZlYXR1cmU+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBGZWF0dXJlIH0+KHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIHVybDogYC9mZWF0dXJlcy8ke2lkfWAsXG4gICAgICBkYXRhOiB7IGRhdGE6IHBhcmFtcyB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfZmVhdHVyZV9nZXQnLCB7IGlkIH0pKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX2xpc3Q6Jyk7XG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfZmVhdHVyZV9zZWFyY2g6Jyk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVGZWF0dXJlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3Q8dm9pZD4oe1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHVybDogYC9mZWF0dXJlcy8ke2lkfWAsXG4gICAgfSk7XG5cbiAgICAvLyBJbnZhbGlkYXRlIGNhY2hlc1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQgfSkpO1xuICAgIHRoaXMuY2FjaGUuaW52YWxpZGF0ZVBhdHRlcm4oJ3BiX2ZlYXR1cmVfbGlzdDonKTtcbiAgICB0aGlzLmNhY2hlLmludmFsaWRhdGVQYXR0ZXJuKCdwYl9mZWF0dXJlX3NlYXJjaDonKTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaEZlYXR1cmVzKHF1ZXJ5OiBzdHJpbmcsIGxpbWl0ID0gNTApOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX3NlYXJjaCcsIHsgcXVlcnksIGxpbWl0IH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUHJvZHVjdEJvYXJkIGRvZXNuJ3QgaGF2ZSBhIGRlZGljYXRlZCBzZWFyY2ggZW5kcG9pbnQgZm9yIGZlYXR1cmVzXG4gICAgICAvLyBXZSdsbCBsaXN0IGFsbCBhbmQgZmlsdGVyIGNsaWVudC1zaWRlXG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IHRoaXMubGlzdEZlYXR1cmVzKHsgbGltaXQ6IDUwMCB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5TG93ZXIgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICByZXR1cm4gZmVhdHVyZXNcbiAgICAgICAgLmZpbHRlcigoZikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IGYubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKTtcbiAgICAgICAgICBjb25zdCBkZXNjTWF0Y2ggPSBmLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpO1xuICAgICAgICAgIHJldHVybiBuYW1lTWF0Y2ggfHwgZGVzY01hdGNoO1xuICAgICAgICB9KVxuICAgICAgICAuc2xpY2UoMCwgbGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUHJvZHVjdCBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgbGlzdFByb2R1Y3RzKHBhcmFtczogTGlzdFByb2R1Y3RzUGFyYW1zID0ge30pOiBQcm9taXNlPFByb2R1Y3RbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX3Byb2R1Y3RfbGlzdCcsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxQcm9kdWN0PignL3Byb2R1Y3RzJywge30sIHBhcmFtcy5saW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRQcm9kdWN0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFByb2R1Y3Q+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9wcm9kdWN0X2dldCcsIHsgaWQgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8eyBkYXRhOiBQcm9kdWN0IH0+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgL3Byb2R1Y3RzLyR7aWR9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdENvbXBvbmVudHMocGFyYW1zOiB7IHByb2R1Y3RJZD86IHN0cmluZzsgbGltaXQ/OiBudW1iZXIgfSA9IHt9KTogUHJvbWlzZTxDb21wb25lbnRbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX2NvbXBvbmVudF9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgaWYgKHBhcmFtcy5wcm9kdWN0SWQpIHF1ZXJ5UGFyYW1zWydwcm9kdWN0LmlkJ10gPSBwYXJhbXMucHJvZHVjdElkO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZTxDb21wb25lbnQ+KCcvY29tcG9uZW50cycsIHF1ZXJ5UGFyYW1zLCBwYXJhbXMubGltaXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZHVjdEhpZXJhcmNoeSgpOiBQcm9taXNlPFByb2R1Y3RIaWVyYXJjaHk+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9wcm9kdWN0X2hpZXJhcmNoeScsIHt9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0cywgY29tcG9uZW50c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMubGlzdFByb2R1Y3RzKHsgbGltaXQ6IDUwMCB9KSxcbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50cyh7IGxpbWl0OiA1MDAgfSksXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIHsgcHJvZHVjdHMsIGNvbXBvbmVudHMgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE5vdGUgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIGNyZWF0ZU5vdGUocGFyYW1zOiBDcmVhdGVOb3RlUGFyYW1zKTogUHJvbWlzZTxOb3RlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogTm90ZSB9Pih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogJy9ub3RlcycsXG4gICAgICBkYXRhOiB7IGRhdGE6IHBhcmFtcyB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBub3RlIGxpc3QgY2FjaGVzXG4gICAgdGhpcy5jYWNoZS5pbnZhbGlkYXRlUGF0dGVybigncGJfbm90ZV9saXN0OicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdE5vdGVzKHBhcmFtczogTGlzdE5vdGVzUGFyYW1zID0ge30pOiBQcm9taXNlPE5vdGVbXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX25vdGVfbGlzdCcsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZS53cmFwKGNhY2hlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGlmIChwYXJhbXMuY3JlYXRlZEZyb20pIHF1ZXJ5UGFyYW1zLmNyZWF0ZWRGcm9tID0gcGFyYW1zLmNyZWF0ZWRGcm9tO1xuICAgICAgaWYgKHBhcmFtcy5jcmVhdGVkVG8pIHF1ZXJ5UGFyYW1zLmNyZWF0ZWRUbyA9IHBhcmFtcy5jcmVhdGVkVG87XG5cbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPE5vdGU+KCcvbm90ZXMnLCBxdWVyeVBhcmFtcywgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vdGUoaWQ6IHN0cmluZyk6IFByb21pc2U8Tm90ZT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gQXBpQ2FjaGUuZ2VuZXJhdGVLZXkoJ3BiX25vdGVfZ2V0JywgeyBpZCB9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDx7IGRhdGE6IE5vdGUgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGAvbm90ZXMvJHtpZH1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhdHRhY2hOb3RlVG9GZWF0dXJlKG5vdGVJZDogc3RyaW5nLCBmZWF0dXJlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdDx2b2lkPih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogYC9ub3Rlcy8ke25vdGVJZH0vY29ubmVjdGlvbnNgLFxuICAgICAgZGF0YToge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZmVhdHVyZTogeyBpZDogZmVhdHVyZUlkIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW52YWxpZGF0ZSBjYWNoZXNcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfbm90ZV9nZXQnLCB7IGlkOiBub3RlSWQgfSkpO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKEFwaUNhY2hlLmdlbmVyYXRlS2V5KCdwYl9mZWF0dXJlX2dldCcsIHsgaWQ6IGZlYXR1cmVJZCB9KSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VyIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPEN1cnJlbnRVc2VyPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfdXNlcl9jdXJyZW50Jywge30pO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUud3JhcChjYWNoZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHsgZGF0YTogQ3VycmVudFVzZXIgfT4oe1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6ICcvdXNlcnMvbWUnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0VXNlcnMocGFyYW1zOiBMaXN0VXNlcnNQYXJhbXMgPSB7fSk6IFByb21pc2U8VXNlcltdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfdXNlcl9saXN0JywgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlPFVzZXI+KCcvdXNlcnMnLCB7fSwgcGFyYW1zLmxpbWl0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlYXJjaCBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgc2VhcmNoKHBhcmFtczogU2VhcmNoUGFyYW1zKTogUHJvbWlzZTxTZWFyY2hSZXN1bHRbXT4ge1xuICAgIGlmICghcGFyYW1zLnF1ZXJ5KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVLZXkgPSBBcGlDYWNoZS5nZW5lcmF0ZUtleSgncGJfc2VhcmNoJywgeyBxdWVyeTogcGFyYW1zLnF1ZXJ5LCB0eXBlOiBwYXJhbXMudHlwZSwgbGltaXQ6IHBhcmFtcy5saW1pdCB9KTtcblxuICAgIHJldHVybiB0aGlzLmNhY2hlLndyYXAoY2FjaGVLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IFNlYXJjaFJlc3VsdFtdID0gW107XG4gICAgICBjb25zdCBxdWVyeUxvd2VyID0gcGFyYW1zLnF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBsaW1pdCA9IHBhcmFtcy5saW1pdCB8fCA1MDtcblxuICAgICAgLy8gU2VhcmNoIGZlYXR1cmVzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAnZmVhdHVyZScpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCB0aGlzLnNlYXJjaEZlYXR1cmVzKHF1ZXJ5TG93ZXIsIGxpbWl0KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLmZlYXR1cmVzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICAgIHR5cGU6ICdmZWF0dXJlJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGlkOiBmLmlkLFxuICAgICAgICAgICAgbmFtZTogZi5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGYuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBsaW5rczogZi5saW5rcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VhcmNoIHByb2R1Y3RzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjdHMgPSBhd2FpdCB0aGlzLmxpc3RQcm9kdWN0cyh7IGxpbWl0OiAxMDAgfSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nUHJvZHVjdHMgPSBwcm9kdWN0c1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgcC5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpIHx8XG4gICAgICAgICAgICAgIHAuZGVzY3JpcHRpb24/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcilcbiAgICAgICAgICApXG4gICAgICAgICAgLnNsaWNlKDAsIGxpbWl0KTtcblxuICAgICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgICAgLi4ubWF0Y2hpbmdQcm9kdWN0cy5tYXAoKHApID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAncHJvZHVjdCcgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbGlua3M6IHAubGlua3MsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlYXJjaCBjb21wb25lbnRzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gYXdhaXQgdGhpcy5saXN0Q29tcG9uZW50cyh7IGxpbWl0OiAxMDAgfSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nQ29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgIGMubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICBjLmRlc2NyaXB0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5TG93ZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICAgIC4uLm1hdGNoaW5nQ29tcG9uZW50cy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAnY29tcG9uZW50JyBhcyBjb25zdCxcbiAgICAgICAgICAgIGlkOiBjLmlkLFxuICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBsaW5rczogYy5saW5rcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VhcmNoIG5vdGVzXG4gICAgICBpZiAoIXBhcmFtcy50eXBlIHx8IHBhcmFtcy50eXBlID09PSAnbm90ZScpIHtcbiAgICAgICAgY29uc3Qgbm90ZXMgPSBhd2FpdCB0aGlzLmxpc3ROb3Rlcyh7IGxpbWl0OiAxMDAgfSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nTm90ZXMgPSBub3Rlc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAobikgPT5cbiAgICAgICAgICAgICAgbi50aXRsZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeUxvd2VyKSB8fFxuICAgICAgICAgICAgICBuLmNvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnlMb3dlcilcbiAgICAgICAgICApXG4gICAgICAgICAgLnNsaWNlKDAsIGxpbWl0KTtcblxuICAgICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgICAgLi4ubWF0Y2hpbmdOb3Rlcy5tYXAoKG4pID0+ICh7XG4gICAgICAgICAgICB0eXBlOiAnbm90ZScgYXMgY29uc3QsXG4gICAgICAgICAgICBpZDogbi5pZCxcbiAgICAgICAgICAgIHRpdGxlOiBuLnRpdGxlLFxuICAgICAgICAgICAgY29udGVudDogbi5jb250ZW50Py5zdWJzdHJpbmcoMCwgMjAwKSxcbiAgICAgICAgICAgIGxpbmtzOiBuLmxpbmtzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0cy5zbGljZSgwLCBsaW1pdCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVdGlsaXR5IE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIEFQSSB0b2tlbiBieSBtYWtpbmcgYSB0ZXN0IHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlVG9rZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGVkIGRhdGFcbiAgICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzXG4gICAqL1xuICBnZXRDYWNoZVN0YXRzKCk6IHsgc2l6ZTogbnVtYmVyOyBtYXg6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5zdGF0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByYXRlIGxpbWl0ZXIgc3RhdGlzdGljc1xuICAgKi9cbiAgZ2V0UmF0ZUxpbWl0ZXJTdGF0cygpOiB7IHRva2VuczogbnVtYmVyOyBtYXhUb2tlbnM6IG51bWJlcjsgd2FpdFRpbWU6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdGhpcy5yYXRlTGltaXRlci5zdGF0cygpO1xuICB9XG59XG4iXX0=
|