@nlabs/reaktor 0.1.4 → 0.1.6
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/data/conversations.js +6 -5
- package/lib/data/files.d.ts +1 -1
- package/lib/data/files.js +40 -40
- package/lib/data/groups.d.ts +1 -1
- package/lib/data/groups.js +26 -26
- package/lib/data/images.d.ts +14 -7
- package/lib/data/images.js +438 -332
- package/lib/data/ios.js +1 -1
- package/lib/data/messages.js +27 -27
- package/lib/data/posts.js +5 -4
- package/lib/data/reactions.js +1 -1
- package/lib/data/s3.js +1 -1
- package/lib/data/subscription.js +1 -1
- package/lib/data/tags.d.ts +1 -1
- package/lib/data/tags.js +36 -36
- package/lib/data/users.d.ts +2 -0
- package/lib/data/users.js +63 -6
- package/lib/types/auth.d.ts +1 -0
- package/lib/types/files.d.ts +2 -2
- package/lib/types/images.d.ts +16 -2
- package/lib/utils/auth.js +11 -3
- package/package.json +5 -4
|
@@ -34,10 +34,6 @@ function _templateObject() {
|
|
|
34
34
|
|
|
35
35
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
36
36
|
|
|
37
|
-
/**
|
|
38
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
39
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
40
|
-
*/
|
|
41
37
|
import { createHash, parseId } from '@nlabs/utils';
|
|
42
38
|
import { aql } from 'arangojs';
|
|
43
39
|
import cloneDeep from 'lodash/cloneDeep';
|
|
@@ -48,6 +44,11 @@ import { getLimit, useDb } from '../utils';
|
|
|
48
44
|
import { logError } from '../utils/analytics';
|
|
49
45
|
import { getUrlImages } from './images';
|
|
50
46
|
import { getDisplayName } from './users';
|
|
47
|
+
/**
|
|
48
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
49
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
50
|
+
*/
|
|
51
|
+
|
|
51
52
|
var eventCategory = 'conversations';
|
|
52
53
|
export var getConversationList = function getConversationList(context, from, to) {
|
|
53
54
|
var action = 'getList';
|
|
@@ -194,4 +195,4 @@ export var updateConversation = function updateConversation(context, item) {
|
|
|
194
195
|
});
|
|
195
196
|
});
|
|
196
197
|
};
|
|
197
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2NvbnZlcnNhdGlvbnMudHMiXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJhcWwiLCJjbG9uZURlZXAiLCJpZGVudGl0eSIsImlzRW1wdHkiLCJwaWNrIiwiZ2V0TGltaXQiLCJ1c2VEYiIsImxvZ0Vycm9yIiwiZ2V0VXJsSW1hZ2VzIiwiZ2V0RGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5IiwiZ2V0Q29udmVyc2F0aW9uTGlzdCIsImNvbnRleHQiLCJmcm9tIiwidG8iLCJhY3Rpb24iLCJkYXRhYmFzZSIsInNlc3Npb25JZCIsInVzZXJJZCIsImxpbWl0IiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiYWxsIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJnZXREaXJlY3RDb252ZXJzYXRpb24iLCJmb3JtYXRVc2VySWQiLCJuZXh0IiwiY29udmVyc2F0aW9uIiwidXNlcnMiLCJsZW5ndGgiLCJtYXAiLCJ1c2VyIiwidXNlcktleSIsIl9rZXkiLCJpbWdJZCIsInRodW1iVXJsRGF0YSIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlIiwidHlwZUlkIiwibmFtZSIsInRodW1iIiwiZ2V0Q29udmVyc2F0aW9uIiwiY29udm9JZCIsImZvcm1hdENvbnZvSWQiLCJ1cGRhdGVDb252ZXJzYXRpb24iLCJpdGVtIiwiZGlyZWN0IiwiaWQiLCJyY3B0IiwiZm9ybWF0SWQiLCJqb2luIiwibm93IiwiRGF0ZSIsInVwZGF0ZSIsInVuZGVmaW5lZCIsIm1vZGlmaWVkIiwiaW5zZXJ0IiwiYWRkZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBSUEsU0FBUUEsVUFBUixFQUFvQkMsT0FBcEIsUUFBa0MsY0FBbEM7QUFDQSxTQUFRQyxHQUFSLFFBQWtCLFVBQWxCO0FBR0EsT0FBT0MsU0FBUCxNQUFzQixrQkFBdEI7QUFDQSxP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SUFBakI7O0FBTUEsTUFBTXJDLE1BQWdCLEdBQUdwQixHQUFILHFCQUF1QnFELEVBQXZCLEVBQ1hTLE1BRFcsRUFFWEgsTUFGVyxDQUF0QjtBQUtBLFNBQU9yRCxLQUFLLENBQUNVLFFBQUQsQ0FBTCxDQUFnQkssS0FBaEIsQ0FBc0JELE1BQXRCLEVBQ0pFLElBREksQ0FDQyxVQUFDQyxNQUFEO0FBQUEsV0FBeUJBLE1BQU0sQ0FBQ1EsSUFBUCxFQUF6QjtBQUFBLEdBREQsRUFFSlQsSUFGSSxDQUVDO0FBQUEsUUFBQ1UsWUFBRCx1RUFBa0MsRUFBbEM7QUFBQSxXQUF5Q0EsWUFBekM7QUFBQSxHQUZELEVBR0pQLEtBSEksQ0FHRSxVQUFDQyxLQUFEO0FBQUEsV0FBa0JuQixRQUFRLENBQUM7QUFDaENRLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENZLE1BQUFBLFFBQVEsRUFBRWpCLGFBRnNCO0FBR2hDa0IsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQUQsRUFJOUJGLEtBSjhCLEVBSXZCZCxPQUp1QixDQUFSLENBSU5VLElBSk0sQ0FJRDtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSkMsQ0FBbEI7QUFBQSxHQUhGLENBQVA7QUFRRCxDQW5DTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9hcWwtcXVlcnknO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICdsb2Rhc2gvaWRlbnRpdHknO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICd0eXBlcy9hdXRoJztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0LCBDb252ZXJzYXRpb25UeXBlLCBJbWFnZVVybERhdGEsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0VXJsSW1hZ2VzfSBmcm9tICcuL2ltYWdlcyc7XG5pbXBvcnQge2dldERpc3BsYXlOYW1lfSBmcm9tICcuL3VzZXJzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2NvbnZlcnNhdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uTGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGMgSU4gY29udmVyc2F0aW9uc1xuICAgIEZJTFRFUiBQT1NJVElPTihjLnVzZXJzLCBcIiR7c2Vzc2lvbklkfVwiLCBmYWxzZSlcbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBnIElOIGMudXNlcnNcbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgZyA9PSB1Ll9rZXlcbiAgICAgIFJFVFVSTiB7X2tleTp1Ll9rZXksIGZpcnN0OnUuZmlyc3QsIGxhc3Q6dS5sYXN0LCBuYW1lOnUubmFtZSwgZW1haWw6dS5lbWFpbCwgdXNlcm5hbWU6dS51c2VybmFtZSwgcGhvdG86dS5waG90byB9XG4gICAgKVxuICAgIEZJTFRFUiBMRU5HVEgodSkgPiAxXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIHtfa2V5OmMuX2tleSwgbmFtZTogYy5uYW1lLCBkaXJlY3Q6IGMuZGlyZWN0LCB1c2VyczogdX1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBjb252ZXJzYXRpb25zXG4gICAgRklMVEVSIExFTkdUSChjLnVzZXJzKSA9PSAyICYmXG4gICAgUE9TSVRJT04oYy51c2VycywgJHtzZXNzaW9uSWR9LCBmYWxzZSkgJiZcbiAgICBQT1NJVElPTihjLnVzZXJzLCAke2Zvcm1hdFVzZXJJZH0sIGZhbHNlKVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGcgSU4gYy51c2Vyc1xuICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiB1c2VyLl9rZXkgPT0gZ1xuICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7dXNlcnMgPSBbXX0gPSBjb252ZXJzYXRpb247XG5cbiAgICAgIGlmKHVzZXJzLmxlbmd0aCkge1xuICAgICAgICBjb252ZXJzYXRpb24udXNlcnMgPSB1c2Vycy5tYXAoKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3Qge19rZXk6IHVzZXJLZXksIGltZ0lkfSA9IHVzZXI7XG4gICAgICAgICAgY29uc3QgdGh1bWJVcmxEYXRhOiBJbWFnZVVybERhdGEgPSB7XG4gICAgICAgICAgICBkaXJlY3Rvcnk6ICdpbWFnZXMnLFxuICAgICAgICAgICAgaW1nSWQsXG4gICAgICAgICAgICBpc1RodW1iOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogJ3VzZXJzJyxcbiAgICAgICAgICAgIHR5cGVJZDogdXNlcktleVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnVzZXIsXG4gICAgICAgICAgICBuYW1lOiBnZXREaXNwbGF5TmFtZSh1c2VyKSxcbiAgICAgICAgICAgIHRodW1iOiBnZXRVcmxJbWFnZXModGh1bWJVcmxEYXRhKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZvSWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252b0lkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZvSWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gY29udmVyc2F0aW9uc1xuICAgIEZJTFRFUiAke2Zvcm1hdENvbnZvSWR9ID09IGMuX2tleSAmJiBJU19MSVNUKGMudXNlcnMpICYmIFBPU0lUSU9OKGMudXNlcnMsICR7c2Vzc2lvbklkfSwgZmFsc2UpXG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgZyBJTiBjLnVzZXJzXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIGcgPT0gdS5fa2V5XG4gICAgICBSRVRVUk4ge19rZXk6dS5fa2V5LCBmaXJzdDp1LmZpcnN0LCBsYXN0OnUubGFzdCwgbmFtZTp1Lm5hbWUsIGVtYWlsOnUuZW1haWwsIHVzZXJuYW1lOnUudXNlcm5hbWUsIHBob3RvOnUucGhvdG8gfVxuICAgIClcbiAgICBGSUxURVIgTEVOR1RIKHUpID4gMVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4ge1xuICAgICAgaWYoIWlzRW1wdHkoY29udmVyc2F0aW9uKSkge1xuICAgICAgICBjb252ZXJzYXRpb24udXNlcnMgPSBjb252ZXJzYXRpb24udXNlcnMubWFwKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtfa2V5OiB1c2VyS2V5LCBpbWdJZH0gPSB1c2VyO1xuICAgICAgICAgIGNvbnN0IHRodW1iVXJsRGF0YTogSW1hZ2VVcmxEYXRhID0ge1xuICAgICAgICAgICAgZGlyZWN0b3J5OiAnaW1hZ2VzJyxcbiAgICAgICAgICAgIGltZ0lkLFxuICAgICAgICAgICAgaXNUaHVtYjogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICd1c2VycycsXG4gICAgICAgICAgICB0eXBlSWQ6IHVzZXJLZXlcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi51c2VyLFxuICAgICAgICAgICAgbmFtZTogZ2V0RGlzcGxheU5hbWUodXNlciksXG4gICAgICAgICAgICB0aHVtYjogZ2V0VXJsSW1hZ2VzKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCB7ZGlyZWN0LCBpZCwgbmFtZSwgdXNlcnN9ID0gcGljayhpdGVtLCBpZGVudGl0eSk7XG4gIGNvbnN0IHJjcHQ6IFVzZXJUeXBlW10gPSB1c2VycyB8fCBbXTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IGl0ZW0uaWQgfHwgY3JlYXRlSGFzaChgY29udm8tJHtzZXNzaW9uSWR9LSR7cmNwdC5qb2luKCcnKX1gKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAvLyBEaXJlY3QgbWVzc2FnZVxuICAgIGRpcmVjdDogISFkaXJlY3QgPyBkaXJlY3QgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiAhIW5hbWUgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIC8vIFVzZXJzXG4gICAgdXNlcnM6ICEhdXNlcnMgPyB1c2VycyA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdElkLFxuICAgIGFkZGVkOiBub3dcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtpZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4gY29udmVyc2F0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdfQ==
|
|
198
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2NvbnZlcnNhdGlvbnMudHMiXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJhcWwiLCJjbG9uZURlZXAiLCJpZGVudGl0eSIsImlzRW1wdHkiLCJwaWNrIiwiZ2V0TGltaXQiLCJ1c2VEYiIsImxvZ0Vycm9yIiwiZ2V0VXJsSW1hZ2VzIiwiZ2V0RGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5IiwiZ2V0Q29udmVyc2F0aW9uTGlzdCIsImNvbnRleHQiLCJmcm9tIiwidG8iLCJhY3Rpb24iLCJkYXRhYmFzZSIsInNlc3Npb25JZCIsInVzZXJJZCIsImxpbWl0IiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiYWxsIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJnZXREaXJlY3RDb252ZXJzYXRpb24iLCJmb3JtYXRVc2VySWQiLCJuZXh0IiwiY29udmVyc2F0aW9uIiwidXNlcnMiLCJsZW5ndGgiLCJtYXAiLCJ1c2VyIiwidXNlcktleSIsIl9rZXkiLCJpbWdJZCIsInRodW1iVXJsRGF0YSIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlIiwidHlwZUlkIiwibmFtZSIsInRodW1iIiwiZ2V0Q29udmVyc2F0aW9uIiwiY29udm9JZCIsImZvcm1hdENvbnZvSWQiLCJ1cGRhdGVDb252ZXJzYXRpb24iLCJpdGVtIiwiZGlyZWN0IiwiaWQiLCJyY3B0IiwiZm9ybWF0SWQiLCJqb2luIiwibm93IiwiRGF0ZSIsInVwZGF0ZSIsInVuZGVmaW5lZCIsIm1vZGlmaWVkIiwiaW5zZXJ0IiwiYWRkZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFNBQVFBLFVBQVIsRUFBb0JDLE9BQXBCLFFBQWtDLGNBQWxDO0FBQ0EsU0FBUUMsR0FBUixRQUFrQixVQUFsQjtBQUdBLE9BQU9DLFNBQVAsTUFBc0Isa0JBQXRCO0FBQ0EsT0FBT0MsUUFBUCxNQUFxQixpQkFBckI7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLGdCQUFwQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsYUFBakI7QUFJQSxTQUFRQyxRQUFSLEVBQWtCQyxLQUFsQixRQUE4QixVQUE5QjtBQUNBLFNBQVFDLFFBQVIsUUFBdUIsb0JBQXZCO0FBQ0EsU0FBUUMsWUFBUixRQUEyQixVQUEzQjtBQUNBLFNBQVFDLGNBQVIsUUFBNkIsU0FBN0I7QUFFQTs7Ozs7QUFJQSxJQUFNQyxhQUFxQixHQUFHLGVBQTlCO0FBRUEsT0FBTyxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUNDLE9BQUQsRUFBc0JDLElBQXRCLEVBQW9DQyxFQUFwQyxFQUFnRjtBQUNqSCxNQUFNQyxNQUFjLEdBQUcsU0FBdkI7QUFEaUgsTUFFMUdDLFFBRjBHLEdBRTNFSixPQUYyRSxDQUUxR0ksUUFGMEc7QUFBQSxNQUV4RkMsU0FGd0YsR0FFM0VMLE9BRjJFLENBRWhHTSxNQUZnRztBQUdqSCxNQUFNQyxLQUFvQixHQUFHZCxRQUFRLENBQUNRLElBQUQsRUFBT0MsRUFBUCxDQUFyQztBQUNBLE1BQU1NLE1BQWMsb0VBQ1VILFNBRFYsOFFBU2hCRSxLQUFLLENBQUNuQixHQVRVLHlFQUFwQjtBQVlBLFNBQU9NLEtBQUssQ0FBQ1UsUUFBRCxDQUFMLENBQWdCSyxLQUFoQixDQUFzQkQsTUFBdEIsRUFDSkUsSUFESSxDQUNDLFVBQUNDLE1BQUQ7QUFBQSxXQUF5QkEsTUFBTSxDQUFDQyxHQUFQLEVBQXpCO0FBQUEsR0FERCxFQUVKQyxLQUZJLENBRUUsVUFBQ0MsS0FBRDtBQUFBLFdBQWtCbkIsUUFBUSxDQUFDO0FBQ2hDUSxNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDWSxNQUFBQSxRQUFRLEVBQUVqQixhQUZzQjtBQUdoQ2tCLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFELEVBSTlCRixLQUo4QixFQUl2QmQsT0FKdUIsQ0FBUixDQUlOVSxJQUpNLENBSUQ7QUFBQSxhQUFNLElBQU47QUFBQSxLQUpDLENBQWxCO0FBQUEsR0FGRixDQUFQO0FBT0QsQ0F2Qk07QUF5QlAsT0FBTyxJQUFNTyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUNqQixPQUFELEVBQXNCTSxNQUF0QixFQUFvRTtBQUN2RyxNQUFNSCxNQUFjLEdBQUcsV0FBdkI7QUFEdUcsTUFFaEdDLFFBRmdHLEdBRWpFSixPQUZpRSxDQUVoR0ksUUFGZ0c7QUFBQSxNQUU5RUMsU0FGOEUsR0FFakVMLE9BRmlFLENBRXRGTSxNQUZzRjtBQUd2RyxNQUFNWSxZQUFvQixHQUFHL0IsT0FBTyxDQUFDbUIsTUFBRCxDQUFwQztBQUVBLE1BQU1FLE1BQWdCLEdBQUdwQixHQUFILG9CQUVBaUIsU0FGQSxFQUdBYSxZQUhBLENBQXRCO0FBYUEsU0FBT3hCLEtBQUssQ0FBQ1UsUUFBRCxDQUFMLENBQWdCSyxLQUFoQixDQUFzQkQsTUFBdEIsRUFDSkUsSUFESSxDQUNDLFVBQUNDLE1BQUQ7QUFBQSxXQUF5QkEsTUFBTSxDQUFDUSxJQUFQLEVBQXpCO0FBQUEsR0FERCxFQUVKVCxJQUZJLENBRUMsWUFBeUM7QUFBQSxRQUF4Q1UsWUFBd0MsdUVBQVAsRUFBTztBQUFBLDhCQUN4QkEsWUFEd0IsQ0FDdENDLEtBRHNDO0FBQUEsUUFDdENBLEtBRHNDLG9DQUM5QixFQUQ4Qjs7QUFHN0MsUUFBR0EsS0FBSyxDQUFDQyxNQUFULEVBQWlCO0FBQ2ZGLE1BQUFBLFlBQVksQ0FBQ0MsS0FBYixHQUFxQkEsS0FBSyxDQUFDRSxHQUFOLENBQVUsVUFBQ0MsSUFBRCxFQUFvQjtBQUFBLFlBQ3BDQyxPQURvQyxHQUNsQkQsSUFEa0IsQ0FDMUNFLElBRDBDO0FBQUEsWUFDM0JDLEtBRDJCLEdBQ2xCSCxJQURrQixDQUMzQkcsS0FEMkI7QUFFakQsWUFBTUMsWUFBMEIsR0FBRztBQUNqQ0MsVUFBQUEsU0FBUyxFQUFFLFFBRHNCO0FBRWpDRixVQUFBQSxLQUFLLEVBQUxBLEtBRmlDO0FBR2pDRyxVQUFBQSxPQUFPLEVBQUUsSUFId0I7QUFJakNDLFVBQUFBLElBQUksRUFBRSxPQUoyQjtBQUtqQ0MsVUFBQUEsTUFBTSxFQUFFUDtBQUx5QixTQUFuQztBQU9BLGlDQUNLRCxJQURMO0FBRUVTLFVBQUFBLElBQUksRUFBRXBDLGNBQWMsQ0FBQzJCLElBQUQsQ0FGdEI7QUFHRVUsVUFBQUEsS0FBSyxFQUFFdEMsWUFBWSxDQUFDZ0MsWUFBRDtBQUhyQjtBQUtELE9BZG9CLENBQXJCO0FBZUQ7O0FBRUQsV0FBT1IsWUFBUDtBQUNELEdBeEJJLEVBeUJKUCxLQXpCSSxDQXlCRSxVQUFDQyxLQUFEO0FBQUEsV0FBa0JuQixRQUFRLENBQUM7QUFDaENRLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENZLE1BQUFBLFFBQVEsRUFBRWpCLGFBRnNCO0FBR2hDa0IsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQUQsRUFJOUJGLEtBSjhCLEVBSXZCZCxPQUp1QixDQUFSLENBSU5VLElBSk0sQ0FJRDtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSkMsQ0FBbEI7QUFBQSxHQXpCRixDQUFQO0FBOEJELENBaERNO0FBa0RQLE9BQU8sSUFBTXlCLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBQ25DLE9BQUQsRUFBc0JvQyxPQUF0QixFQUFxRTtBQUNsRyxNQUFNakMsTUFBYyxHQUFHLFNBQXZCO0FBRGtHLE1BRTNGQyxRQUYyRixHQUU1REosT0FGNEQsQ0FFM0ZJLFFBRjJGO0FBQUEsTUFFekVDLFNBRnlFLEdBRTVETCxPQUY0RCxDQUVqRk0sTUFGaUY7QUFHbEcsTUFBTStCLGFBQXFCLEdBQUdsRCxPQUFPLENBQUNpRCxPQUFELENBQXJDO0FBRUEsTUFBTTVCLE1BQWdCLEdBQUdwQixHQUFILHFCQUNYaUQsYUFEVyxFQUN5RGhDLFNBRHpELENBQXRCO0FBWUEsU0FBT1gsS0FBSyxDQUFDVSxRQUFELENBQUwsQ0FBZ0JLLEtBQWhCLENBQXNCRCxNQUF0QixFQUNKRSxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNRLElBQVAsRUFBekI7QUFBQSxHQURELEVBRUpULElBRkksQ0FFQyxZQUF5QztBQUFBLFFBQXhDVSxZQUF3Qyx1RUFBUCxFQUFPOztBQUM3QyxRQUFHLENBQUM3QixPQUFPLENBQUM2QixZQUFELENBQVgsRUFBMkI7QUFDekJBLE1BQUFBLFlBQVksQ0FBQ0MsS0FBYixHQUFxQkQsWUFBWSxDQUFDQyxLQUFiLENBQW1CRSxHQUFuQixDQUF1QixVQUFDQyxJQUFELEVBQW9CO0FBQUEsWUFDakRDLE9BRGlELEdBQy9CRCxJQUQrQixDQUN2REUsSUFEdUQ7QUFBQSxZQUN4Q0MsS0FEd0MsR0FDL0JILElBRCtCLENBQ3hDRyxLQUR3QztBQUU5RCxZQUFNQyxZQUEwQixHQUFHO0FBQ2pDQyxVQUFBQSxTQUFTLEVBQUUsUUFEc0I7QUFFakNGLFVBQUFBLEtBQUssRUFBTEEsS0FGaUM7QUFHakNHLFVBQUFBLE9BQU8sRUFBRSxJQUh3QjtBQUlqQ0MsVUFBQUEsSUFBSSxFQUFFLE9BSjJCO0FBS2pDQyxVQUFBQSxNQUFNLEVBQUVQO0FBTHlCLFNBQW5DO0FBT0EsaUNBQ0tELElBREw7QUFFRVMsVUFBQUEsSUFBSSxFQUFFcEMsY0FBYyxDQUFDMkIsSUFBRCxDQUZ0QjtBQUdFVSxVQUFBQSxLQUFLLEVBQUV0QyxZQUFZLENBQUNnQyxZQUFEO0FBSHJCO0FBS0QsT0Fkb0IsQ0FBckI7QUFnQkEsYUFBT1IsWUFBUDtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNELEdBdkJJLEVBd0JKUCxLQXhCSSxDQXdCRSxVQUFDQyxLQUFEO0FBQUEsV0FBa0JuQixRQUFRLENBQUM7QUFDaENRLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENZLE1BQUFBLFFBQVEsRUFBRWpCLGFBRnNCO0FBR2hDa0IsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQUQsRUFJOUJGLEtBSjhCLEVBSXZCZCxPQUp1QixDQUFSLENBSU5VLElBSk0sQ0FJRDtBQUFBLGFBQU0sSUFBTjtBQUFBLEtBSkMsQ0FBbEI7QUFBQSxHQXhCRixDQUFQO0FBNkJELENBOUNNO0FBZ0RQLE9BQU8sSUFBTTRCLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQ3RDLE9BQUQsRUFBc0J1QyxJQUF0QixFQUEwRDtBQUMxRixNQUFNcEMsTUFBYyxHQUFHLFFBQXZCO0FBRDBGLE1BRW5GQyxRQUZtRixHQUVwREosT0FGb0QsQ0FFbkZJLFFBRm1GO0FBQUEsTUFFakVDLFNBRmlFLEdBRXBETCxPQUZvRCxDQUV6RU0sTUFGeUU7O0FBQUEsY0FHeERkLElBQUksQ0FBQytDLElBQUQsRUFBT2pELFFBQVAsQ0FIb0Q7QUFBQSxNQUduRmtELE1BSG1GLFNBR25GQSxNQUhtRjtBQUFBLE1BRzNFQyxFQUgyRSxTQUczRUEsRUFIMkU7QUFBQSxNQUd2RVIsSUFIdUUsU0FHdkVBLElBSHVFO0FBQUEsTUFHakVaLEtBSGlFLFNBR2pFQSxLQUhpRTs7QUFJMUYsTUFBTXFCLElBQWdCLEdBQUdyQixLQUFLLElBQUksRUFBbEM7QUFDQSxNQUFNc0IsUUFBZ0IsR0FBR0osSUFBSSxDQUFDRSxFQUFMLElBQVd2RCxVQUFVLGlCQUFVbUIsU0FBVixjQUF1QnFDLElBQUksQ0FBQ0UsSUFBTCxDQUFVLEVBQVYsQ0FBdkIsRUFBOUM7QUFDQSxNQUFNQyxHQUFXLEdBQUdDLElBQUksQ0FBQ0QsR0FBTCxFQUFwQjtBQUNBLE1BQU1FLE1BQVcsR0FBRztBQUNsQjtBQUNBUCxJQUFBQSxNQUFNLEVBQUUsQ0FBQyxDQUFDQSxNQUFGLEdBQVdBLE1BQVgsR0FBb0JRLFNBRlY7QUFHbEJDLElBQUFBLFFBQVEsRUFBRUosR0FIUTtBQUlsQlosSUFBQUEsSUFBSSxFQUFFLENBQUMsQ0FBQ0EsSUFBRixHQUFTQSxJQUFULEdBQWdCZSxTQUpKO0FBS2xCO0FBQ0EzQixJQUFBQSxLQUFLLEVBQUUsQ0FBQyxDQUFDQSxLQUFGLEdBQVVBLEtBQVYsR0FBa0IyQjtBQU5QLEdBQXBCOztBQVNBLE1BQU1FLE1BQVcscUJBQ1o3RCxTQUFTLENBQUMwRCxNQUFELENBREc7QUFFZnJCLElBQUFBLElBQUksRUFBRWlCLFFBRlM7QUFHZlEsSUFBQUEsS0FBSyxFQUFFTjtBQUhRLElBQWpCOztBQU1BLE1BQU1yQyxNQUFnQixHQUFHcEIsR0FBSCxxQkFBdUJxRCxFQUF2QixFQUNYUyxNQURXLEVBRVhILE1BRlcsQ0FBdEI7QUFLQSxTQUFPckQsS0FBSyxDQUFDVSxRQUFELENBQUwsQ0FBZ0JLLEtBQWhCLENBQXNCRCxNQUF0QixFQUNKRSxJQURJLENBQ0MsVUFBQ0MsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNRLElBQVAsRUFBekI7QUFBQSxHQURELEVBRUpULElBRkksQ0FFQztBQUFBLFFBQUNVLFlBQUQsdUVBQWtDLEVBQWxDO0FBQUEsV0FBeUNBLFlBQXpDO0FBQUEsR0FGRCxFQUdKUCxLQUhJLENBR0UsVUFBQ0MsS0FBRDtBQUFBLFdBQWtCbkIsUUFBUSxDQUFDO0FBQ2hDUSxNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDWSxNQUFBQSxRQUFRLEVBQUVqQixhQUZzQjtBQUdoQ2tCLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFELEVBSTlCRixLQUo4QixFQUl2QmQsT0FKdUIsQ0FBUixDQUlOVSxJQUpNLENBSUQ7QUFBQSxhQUFNLElBQU47QUFBQSxLQUpDLENBQWxCO0FBQUEsR0FIRixDQUFQO0FBUUQsQ0FuQ00iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9hcWwtcXVlcnknO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICdsb2Rhc2gvaWRlbnRpdHknO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICd0eXBlcy9hdXRoJztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0LCBDb252ZXJzYXRpb25UeXBlLCBJbWFnZVVybERhdGEsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0VXJsSW1hZ2VzfSBmcm9tICcuL2ltYWdlcyc7XG5pbXBvcnQge2dldERpc3BsYXlOYW1lfSBmcm9tICcuL3VzZXJzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdjb252ZXJzYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkxpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBjIElOIGNvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgUE9TSVRJT04oYy51c2VycywgXCIke3Nlc3Npb25JZH1cIiwgZmFsc2UpXG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgZyBJTiBjLnVzZXJzXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIGcgPT0gdS5fa2V5XG4gICAgICBSRVRVUk4ge19rZXk6dS5fa2V5LCBmaXJzdDp1LmZpcnN0LCBsYXN0OnUubGFzdCwgbmFtZTp1Lm5hbWUsIGVtYWlsOnUuZW1haWwsIHVzZXJuYW1lOnUudXNlcm5hbWUsIHBob3RvOnUucGhvdG8gfVxuICAgIClcbiAgICBGSUxURVIgTEVOR1RIKHUpID4gMVxuICAgICR7bGltaXQuYXFsfVxuICAgIFJFVFVSTiB7X2tleTpjLl9rZXksIG5hbWU6IGMubmFtZSwgZGlyZWN0OiBjLmRpcmVjdCwgdXNlcnM6IHV9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gY29udmVyc2F0aW9uc1xuICAgIEZJTFRFUiBMRU5HVEgoYy51c2VycykgPT0gMiAmJlxuICAgIFBPU0lUSU9OKGMudXNlcnMsICR7c2Vzc2lvbklkfSwgZmFsc2UpICYmXG4gICAgUE9TSVRJT04oYy51c2VycywgJHtmb3JtYXRVc2VySWR9LCBmYWxzZSlcbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBnIElOIGMudXNlcnNcbiAgICAgIEZPUiB1c2VyIElOIHVzZXJzXG4gICAgICBGSUxURVIgdXNlci5fa2V5ID09IGdcbiAgICAgIFJFVFVSTiB1c2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge3VzZXJzID0gW119ID0gY29udmVyc2F0aW9uO1xuXG4gICAgICBpZih1c2Vycy5sZW5ndGgpIHtcbiAgICAgICAgY29udmVyc2F0aW9uLnVzZXJzID0gdXNlcnMubWFwKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtfa2V5OiB1c2VyS2V5LCBpbWdJZH0gPSB1c2VyO1xuICAgICAgICAgIGNvbnN0IHRodW1iVXJsRGF0YTogSW1hZ2VVcmxEYXRhID0ge1xuICAgICAgICAgICAgZGlyZWN0b3J5OiAnaW1hZ2VzJyxcbiAgICAgICAgICAgIGltZ0lkLFxuICAgICAgICAgICAgaXNUaHVtYjogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICd1c2VycycsXG4gICAgICAgICAgICB0eXBlSWQ6IHVzZXJLZXlcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi51c2VyLFxuICAgICAgICAgICAgbmFtZTogZ2V0RGlzcGxheU5hbWUodXNlciksXG4gICAgICAgICAgICB0aHVtYjogZ2V0VXJsSW1hZ2VzKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgJHtmb3JtYXRDb252b0lkfSA9PSBjLl9rZXkgJiYgSVNfTElTVChjLnVzZXJzKSAmJiBQT1NJVElPTihjLnVzZXJzLCAke3Nlc3Npb25JZH0sIGZhbHNlKVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGcgSU4gYy51c2Vyc1xuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiBnID09IHUuX2tleVxuICAgICAgUkVUVVJOIHtfa2V5OnUuX2tleSwgZmlyc3Q6dS5maXJzdCwgbGFzdDp1Lmxhc3QsIG5hbWU6dS5uYW1lLCBlbWFpbDp1LmVtYWlsLCB1c2VybmFtZTp1LnVzZXJuYW1lLCBwaG90bzp1LnBob3RvIH1cbiAgICApXG4gICAgRklMVEVSIExFTkdUSCh1KSA+IDFcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IHtcbiAgICAgIGlmKCFpc0VtcHR5KGNvbnZlcnNhdGlvbikpIHtcbiAgICAgICAgY29udmVyc2F0aW9uLnVzZXJzID0gY29udmVyc2F0aW9uLnVzZXJzLm1hcCgodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCB7X2tleTogdXNlcktleSwgaW1nSWR9ID0gdXNlcjtcbiAgICAgICAgICBjb25zdCB0aHVtYlVybERhdGE6IEltYWdlVXJsRGF0YSA9IHtcbiAgICAgICAgICAgIGRpcmVjdG9yeTogJ2ltYWdlcycsXG4gICAgICAgICAgICBpbWdJZCxcbiAgICAgICAgICAgIGlzVGh1bWI6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAndXNlcnMnLFxuICAgICAgICAgICAgdHlwZUlkOiB1c2VyS2V5XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgIG5hbWU6IGdldERpc3BsYXlOYW1lKHVzZXIpLFxuICAgICAgICAgICAgdGh1bWI6IGdldFVybEltYWdlcyh0aHVtYlVybERhdGEpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3Qge2RpcmVjdCwgaWQsIG5hbWUsIHVzZXJzfSA9IHBpY2soaXRlbSwgaWRlbnRpdHkpO1xuICBjb25zdCByY3B0OiBVc2VyVHlwZVtdID0gdXNlcnMgfHwgW107XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBpdGVtLmlkIHx8IGNyZWF0ZUhhc2goYGNvbnZvLSR7c2Vzc2lvbklkfS0ke3JjcHQuam9pbignJyl9YCk7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgLy8gRGlyZWN0IG1lc3NhZ2VcbiAgICBkaXJlY3Q6ICEhZGlyZWN0ID8gZGlyZWN0IDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogISFuYW1lID8gbmFtZSA6IHVuZGVmaW5lZCxcbiAgICAvLyBVc2Vyc1xuICAgIHVzZXJzOiAhIXVzZXJzID8gdXNlcnMgOiB1bmRlZmluZWRcbiAgfTtcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRJZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7aWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXX0=
|
package/lib/data/files.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export declare const getYouTubeTrends: (context: ApiContext, limit?: number) =>
|
|
|
9
9
|
export declare const getYouTubeSearch: (context: ApiContext, query: string, limit?: number) => Promise<any[]>;
|
|
10
10
|
export declare const getPathUserFiles: (userId: string, filename: string) => string;
|
|
11
11
|
export declare const getUrlUserFiles: (userId: string, filename: string, dir?: string, type?: string) => string;
|
|
12
|
+
export declare const createFile: (db: Database, file: FileType) => Promise<FileType>;
|
|
12
13
|
export declare const linkFiles: (db: Database, files: FileType[], postId: string) => Promise<any>;
|
|
13
14
|
export declare const updateFiles: (db: Database, postId: string, files: FileType[]) => Promise<any>;
|
|
14
|
-
export declare const createFile: (db: Database, file: FileType) => Promise<FileType>;
|
|
15
15
|
export declare const encodeBase64: (buffer: Buffer) => string;
|
|
16
16
|
export declare const decodeBase64: (dataString: string) => object;
|
package/lib/data/files.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function _templateObject3() {
|
|
2
|
-
var data = _taggedTemplateLiteral(["
|
|
2
|
+
var data = _taggedTemplateLiteral(["REMOVE {_key:", "} IN isPosted"]);
|
|
3
3
|
|
|
4
4
|
_templateObject3 = function _templateObject3() {
|
|
5
5
|
return data;
|
|
@@ -9,7 +9,7 @@ function _templateObject3() {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
function _templateObject2() {
|
|
12
|
-
var data = _taggedTemplateLiteral(["
|
|
12
|
+
var data = _taggedTemplateLiteral(["UPSERT {_key: ", "}\n INSERT ", "\n UPDATE {}\n IN files RETURN NEW"]);
|
|
13
13
|
|
|
14
14
|
_templateObject2 = function _templateObject2() {
|
|
15
15
|
return data;
|
|
@@ -34,20 +34,22 @@ function _templateObject() {
|
|
|
34
34
|
|
|
35
35
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
36
36
|
|
|
37
|
-
/**
|
|
38
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
39
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
40
|
-
*/
|
|
41
37
|
import { get as httpGet } from '@nlabs/rip-hunter';
|
|
42
38
|
import { createHash, parseId, parseString } from '@nlabs/utils';
|
|
43
39
|
import { aql } from 'arangojs';
|
|
44
40
|
import { google } from 'googleapis';
|
|
45
41
|
import { UserError } from 'graphql-errors';
|
|
42
|
+
import isEmpty from 'lodash/isEmpty';
|
|
46
43
|
import * as request from 'request-promise';
|
|
47
44
|
import { Config } from '../config';
|
|
48
45
|
import { useDb } from '../utils';
|
|
49
46
|
import { resizeSaveImage } from './images';
|
|
50
47
|
import { createPostEdge } from './posts';
|
|
48
|
+
/**
|
|
49
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
50
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
51
|
+
*/
|
|
52
|
+
|
|
51
53
|
var youtube = google.youtube({
|
|
52
54
|
auth: Config.get('google.key'),
|
|
53
55
|
version: 'v3'
|
|
@@ -62,19 +64,15 @@ export var addFile = function addFile(context) {
|
|
|
62
64
|
var database = context.database,
|
|
63
65
|
sessionId = context.userId,
|
|
64
66
|
userType = context.userType;
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
_item$name = item.name,
|
|
71
|
-
name = _item$name === void 0 ? '' : _item$name,
|
|
72
|
-
_item$url = item.url,
|
|
73
|
-
url = _item$url === void 0 ? '' : _item$url; // Id
|
|
67
|
+
var description = item.description,
|
|
68
|
+
fileId = item.fileId,
|
|
69
|
+
fileType = item.fileType,
|
|
70
|
+
name = item.name,
|
|
71
|
+
url = item.url; // Id
|
|
74
72
|
|
|
75
|
-
var
|
|
73
|
+
var formatFileId = fileId ? parseId(fileId) : createHash("file-".concat(sessionId)); // Name
|
|
76
74
|
|
|
77
|
-
var isUrl = url
|
|
75
|
+
var isUrl = isEmpty(url); // If no name, get it from url path
|
|
78
76
|
|
|
79
77
|
var formatName = parseString(name, 160);
|
|
80
78
|
var formatType = parseString(fileType, 16);
|
|
@@ -142,9 +140,9 @@ export var addFile = function addFile(context) {
|
|
|
142
140
|
var now = Date.now(); // If image, resize and create a thumbnail
|
|
143
141
|
|
|
144
142
|
if (isImage) {
|
|
145
|
-
return resizeSaveImage(
|
|
143
|
+
return resizeSaveImage(context, formatFileId, buf, uploadType).then(function (resizedImage) {
|
|
146
144
|
var insert = _objectSpread({}, resizedImage, {
|
|
147
|
-
_key:
|
|
145
|
+
_key: formatFileId,
|
|
148
146
|
added: now,
|
|
149
147
|
description: formatDesc,
|
|
150
148
|
fileType: formatType,
|
|
@@ -160,7 +158,7 @@ export var addFile = function addFile(context) {
|
|
|
160
158
|
}
|
|
161
159
|
|
|
162
160
|
var insert = {
|
|
163
|
-
_key:
|
|
161
|
+
_key: formatFileId,
|
|
164
162
|
added: now,
|
|
165
163
|
description: formatDesc,
|
|
166
164
|
fileType: formatType,
|
|
@@ -284,6 +282,7 @@ export var getYouTubeSearch = function getYouTubeSearch(context, query) {
|
|
|
284
282
|
youtube.search.list({
|
|
285
283
|
maxResults: limit,
|
|
286
284
|
part: 'snippet',
|
|
285
|
+
// eslint-disable-next-line
|
|
287
286
|
q: query,
|
|
288
287
|
regionCode: 'US'
|
|
289
288
|
}, function (error, data) {
|
|
@@ -323,6 +322,22 @@ export var getUrlUserFiles = function getUrlUserFiles(userId, filename) {
|
|
|
323
322
|
|
|
324
323
|
return "https://box.".concat(Config.get('app.url'), "/defaults/user_wh.jpg");
|
|
325
324
|
};
|
|
325
|
+
export var createFile = function createFile(db, file) {
|
|
326
|
+
var fileId = file.fileId;
|
|
327
|
+
var insert = {
|
|
328
|
+
_key: fileId,
|
|
329
|
+
added: Date.now()
|
|
330
|
+
};
|
|
331
|
+
var aqlQry = aql(_templateObject2(), fileId, insert);
|
|
332
|
+
return db.query(aqlQry).then(function (cursor) {
|
|
333
|
+
return cursor.next();
|
|
334
|
+
}).then(function () {
|
|
335
|
+
var updatedFile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
336
|
+
return updatedFile;
|
|
337
|
+
}).catch(function (error) {
|
|
338
|
+
throw error;
|
|
339
|
+
});
|
|
340
|
+
};
|
|
326
341
|
export var linkFiles = function linkFiles(db, files, postId) {
|
|
327
342
|
return Promise.all(files.map(function (file) {
|
|
328
343
|
return createFile(db, file).then(function (file) {
|
|
@@ -337,7 +352,7 @@ export var updateFiles = function updateFiles(db, postId, files) {
|
|
|
337
352
|
// Remove linked edges
|
|
338
353
|
return Promise.all(edges.map(function (edge) {
|
|
339
354
|
var edgeKey = edge._key;
|
|
340
|
-
var aqlQry = aql(
|
|
355
|
+
var aqlQry = aql(_templateObject3(), edgeKey);
|
|
341
356
|
return db.query(aqlQry).catch(function (error) {
|
|
342
357
|
throw error;
|
|
343
358
|
});
|
|
@@ -363,29 +378,14 @@ export var updateFiles = function updateFiles(db, postId, files) {
|
|
|
363
378
|
throw error;
|
|
364
379
|
});
|
|
365
380
|
};
|
|
366
|
-
export var createFile = function createFile(db, file) {
|
|
367
|
-
var insert = {
|
|
368
|
-
_key: file.id,
|
|
369
|
-
added: Date.now()
|
|
370
|
-
};
|
|
371
|
-
var aqlQry = aql(_templateObject3(), file.id, insert);
|
|
372
|
-
return db.query(aqlQry).then(function (cursor) {
|
|
373
|
-
return cursor.next();
|
|
374
|
-
}).then(function () {
|
|
375
|
-
var updatedFile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
376
|
-
return updatedFile;
|
|
377
|
-
}).catch(function (error) {
|
|
378
|
-
throw error;
|
|
379
|
-
});
|
|
380
|
-
};
|
|
381
381
|
export var encodeBase64 = function encodeBase64(buffer) {
|
|
382
382
|
return new Buffer(buffer).toString('base64');
|
|
383
383
|
};
|
|
384
384
|
export var decodeBase64 = function decodeBase64(dataString) {
|
|
385
|
-
// const getData = (str: string) => str.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/) || [];
|
|
386
385
|
var getData = function getData(str) {
|
|
387
|
-
return str.match(/^data:([A-Za-z
|
|
388
|
-
};
|
|
386
|
+
return str.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/) || [];
|
|
387
|
+
}; // const getData = (base64: string) => base64.substr(base64.indexOf(',') + 1);
|
|
388
|
+
|
|
389
389
|
|
|
390
390
|
var matches = getData(dataString);
|
|
391
391
|
|
|
@@ -403,4 +403,4 @@ export var decodeBase64 = function decodeBase64(dataString) {
|
|
|
403
403
|
type: matches[1]
|
|
404
404
|
};
|
|
405
405
|
};
|
|
406
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2ZpbGVzLnRzIl0sIm5hbWVzIjpbImdldCIsImh0dHBHZXQiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwiZ29vZ2xlIiwiVXNlckVycm9yIiwicmVxdWVzdCIsIkNvbmZpZyIsInVzZURiIiwicmVzaXplU2F2ZUltYWdlIiwiY3JlYXRlUG9zdEVkZ2UiLCJ5b3V0dWJlIiwiYXV0aCIsInZlcnNpb24iLCJkZWZhdWx0cyIsImVuY29kaW5nIiwiYWRkRmlsZSIsImNvbnRleHQiLCJpdGVtIiwiZGF0YWJhc2UiLCJzZXNzaW9uSWQiLCJ1c2VySWQiLCJ1c2VyVHlwZSIsImRlc2NyaXB0aW9uIiwiZmlsZVR5cGUiLCJpZCIsIm5hbWUiLCJ1cmwiLCJmaWxlSWQiLCJpc1VybCIsImZvcm1hdE5hbWUiLCJmb3JtYXRUeXBlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJuYW1lQXJyIiwic3BsaXQiLCJleHQiLCJsZW5ndGgiLCJpc0ltYWdlIiwiZm9ybWF0RGVzYyIsInNhdmVUb0RiIiwiaW5zZXJ0IiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImZpbGUiLCJjYXRjaCIsImVycm9yIiwidXBsb2FkRmlsZSIsImJ1ZiIsInVwbG9hZFR5cGUiLCJub3ciLCJEYXRlIiwicmVzaXplZEltYWdlIiwiX2tleSIsImFkZGVkIiwibW9kaWZpZWQiLCJ1cmkiLCJib2R5IiwiQnVmZmVyIiwiYmFzZTY0IiwiYnVmZmVyIiwiRXJyb3IiLCJnZXRHaXBoeVRyZW5kcyIsImxpbWl0IiwiZ2lmVXJsIiwicmVzIiwianNvbiIsImRhdGEiLCJtYXAiLCJnaWZJbWFnZSIsImltYWdlcyIsIm9yaWdpbmFsIiwiZml4ZWRfaGVpZ2h0X3NtYWxsIiwidGh1bWIiLCJ0eXBlIiwiZ2V0R2lwaHlTZWFyY2giLCJmb3JtYXRRdWVyeSIsImVuY29kZVVSSSIsImZldGNoIiwiZ2V0WW91VHViZVRyZW5kcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidmlkZW9zIiwibGlzdCIsImNoYXJ0IiwibWF4UmVzdWx0cyIsInBhcnQiLCJyZWdpb25Db2RlIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJpdGVtcyIsInNuaXBwZXQiLCJ0aHVtYm5haWxzIiwiaGlnaCIsImdldFlvdVR1YmVTZWFyY2giLCJzZWFyY2giLCJxIiwiZ2V0UGF0aFVzZXJGaWxlcyIsImZpbGVuYW1lIiwiZ2V0VXJsVXNlckZpbGVzIiwiZGlyIiwibGlua0ZpbGVzIiwiZGIiLCJmaWxlcyIsInBvc3RJZCIsImFsbCIsImNyZWF0ZUZpbGUiLCJ1cGRhdGVGaWxlcyIsImVkZ2VDb2xsZWN0aW9uIiwiaW5FZGdlcyIsImVkZ2VzIiwiZWRnZSIsImVkZ2VLZXkiLCJ1cGRhdGVkRmlsZSIsImVuY29kZUJhc2U2NCIsInRvU3RyaW5nIiwiZGVjb2RlQmFzZTY0IiwiZGF0YVN0cmluZyIsImdldERhdGEiLCJzdHIiLCJtYXRjaCIsIm1hdGNoZXMiLCJkZWNvZGVVUklDb21wb25lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBSUEsU0FBUUEsR0FBRyxJQUFJQyxPQUFmLFFBQTZCLG1CQUE3QjtBQUNBLFNBQVFDLFVBQVIsRUFBb0JDLE9BQXBCLEVBQTZCQyxXQUE3QixRQUErQyxjQUEvQztBQUNBLFNBQVFDLEdBQVIsUUFBNEIsVUFBNUI7QUFHQSxTQUFRQyxNQUFSLFFBQXFCLFlBQXJCO0FBQ0EsU0FBUUMsU0FBUixRQUF3QixnQkFBeEI7QUFDQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsaUJBQXpCO0FBR0EsU0FBUUMsTUFBUixRQUFxQixXQUFyQjtBQUVBLFNBQVFDLEtBQVIsUUFBb0IsVUFBcEI7QUFDQSxTQUFRQyxlQUFSLFFBQThCLFVBQTlCO0FBQ0EsU0FBUUMsY0FBUixRQUE2QixTQUE3QjtBQUVBLElBQU1DLE9BQU8sR0FBR1AsTUFBTSxDQUFDTyxPQUFQLENBQWU7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QWdDO0FBQzFEO0FBQ0EsTUFBTUMsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsR0FBRDtBQUFBLFdBQWlCQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxtQ0FBVixLQUFrRCxFQUFuRTtBQUFBLEdBQWhCOztBQUNBLE1BQUlDLE9BQU8sR0FBR0gsT0FBTyxDQUFDRCxVQUFELENBQXJCOztBQUVBLE1BQUdJLE9BQU8sQ0FBQ3hGLE1BQVIsS0FBbUIsQ0FBdEIsRUFBeUI7QUFDdkI7QUFDQXdGLElBQUFBLE9BQU8sR0FBR0gsT0FBTyxDQUFDSSxrQkFBa0IsQ0FBQ0wsVUFBRCxDQUFuQixDQUFqQixDQUZ1QixDQUl2Qjs7QUFDQSxRQUFHSSxPQUFPLENBQUN4RixNQUFSLEtBQW1CLENBQXRCLEVBQXlCO0FBQ3ZCLFlBQU0yQixLQUFLLENBQUMsc0JBQUQsQ0FBWDtBQUNEO0FBQ0Y7O0FBRUQsU0FBTztBQUNMTSxJQUFBQSxJQUFJLEVBQUUsSUFBSVQsTUFBSixDQUFXZ0UsT0FBTyxDQUFDLENBQUQsQ0FBbEIsRUFBdUIsUUFBdkIsQ0FERDtBQUVMaEQsSUFBQUEsSUFBSSxFQUFFZ0QsT0FBTyxDQUFDLENBQUQ7QUFGUixHQUFQO0FBSUQsQ0FuQk0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsLCBEYXRhYmFzZX0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9hcWwtcXVlcnknO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9jdXJzb3InO1xuaW1wb3J0IHtnb29nbGV9IGZyb20gJ2dvb2dsZWFwaXMnO1xuaW1wb3J0IHtVc2VyRXJyb3J9IGZyb20gJ2dyYXBocWwtZXJyb3JzJztcbmltcG9ydCAqIGFzIHJlcXVlc3QgZnJvbSAncmVxdWVzdC1wcm9taXNlJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAndHlwZXMvYXV0aCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtyZXNpemVTYXZlSW1hZ2V9IGZyb20gJy4vaW1hZ2VzJztcbmltcG9ydCB7Y3JlYXRlUG9zdEVkZ2V9IGZyb20gJy4vcG9zdHMnO1xuXG5jb25zdCB5b3V0dWJlID0gZ29vZ2xlLnlvdXR1YmUoe2F1dGg6IENvbmZpZy5nZXQoJ2dvb2dsZS5rZXknKSwgdmVyc2lvbjogJ3YzJ30pO1xucmVxdWVzdC5kZWZhdWx0cyh7ZW5jb2Rpbmc6IG51bGx9KTtcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2ZpbGVzJztcblxuLy8gVXBsb2FkIGZpbGVcbmV4cG9ydCBjb25zdCBhZGRGaWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IEZpbGVUeXBlID0ge30pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWQsIHVzZXJUeXBlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGZpbGVUeXBlID0gJycsXG4gICAgaWQsXG4gICAgbmFtZSA9ICcnLFxuICAgIHVybCA9ICcnXG4gIH0gPSBpdGVtO1xuXG4gIC8vIElkXG4gIGNvbnN0IGZpbGVJZDogc3RyaW5nID0gaWQgPyBwYXJzZUlkKGlkKSA6IGNyZWF0ZUhhc2goYGZpbGUtJHtzZXNzaW9uSWR9YCk7XG5cbiAgLy8gTmFtZVxuICBjb25zdCBpc1VybDogYm9vbGVhbiA9IHVybCAhPT0gJyc7XG5cbiAgLy8gSWYgbm8gbmFtZSwgZ2V0IGl0IGZyb20gdXJsIHBhdGhcbiAgbGV0IGZvcm1hdE5hbWU6IHN0cmluZyA9IHBhcnNlU3RyaW5nKG5hbWUsIDE2MCk7XG4gIGxldCBmb3JtYXRUeXBlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhmaWxlVHlwZSwgMTYpO1xuXG4gIGlmKGZvcm1hdE5hbWUgPT09ICcnICYmIGlzVXJsKSB7XG4gICAgZm9ybWF0TmFtZSA9IHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgfVxuXG4gIGlmKGZvcm1hdFR5cGUgPT09ICcnKSB7XG4gICAgY29uc3QgbmFtZUFycjogc3RyaW5nW10gPSBmb3JtYXROYW1lLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgZXh0OiBzdHJpbmcgPSBuYW1lQXJyW25hbWVBcnIubGVuZ3RoIC0gMV07XG5cbiAgICBzd2l0Y2goZXh0KSB7XG4gICAgICBjYXNlICdqcGVnJzpcbiAgICAgIGNhc2UgJ2pwZyc6XG4gICAgICAgIGZvcm1hdFR5cGUgPSAnaW1hZ2UvanBlZyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncG5nJzpcbiAgICAgICAgZm9ybWF0VHlwZSA9ICdpbWFnZS9wbmcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ppcCc6XG4gICAgICAgIGZvcm1hdFR5cGUgPSAnYXBwbGljYXRpb24vemlwJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBsZXQgaXNJbWFnZTogYm9vbGVhbjtcblxuICBzd2l0Y2goZm9ybWF0VHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBpc0ltYWdlID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpc0ltYWdlID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIERlc2NyaXB0aW9uXG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApO1xuXG4gIC8vIE9ubHkgYWxsb3cgZmlsZSB1cGxvYWRzIHRvIHByZW1pdW0gdXNlcnNcbiAgaWYoIWlzSW1hZ2UgJiYgdXNlclR5cGUgIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdhY2NvdW50X3Jlc3RyaWN0aW9uJyk7XG4gIH1cblxuICBjb25zdCBzYXZlVG9EYiA9IChpbnNlcnQ6IEZpbGVUeXBlKSA9PiB7XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGZpbGVzIFJFVFVSTiBORVdgO1xuXG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC50aGVuKChmaWxlID0ge30pID0+IGZpbGUpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwbG9hZEZpbGUgPSAoYnVmOiBCdWZmZXIsIHVwbG9hZFR5cGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIElmIGltYWdlLCByZXNpemUgYW5kIGNyZWF0ZSBhIHRodW1ibmFpbFxuICAgIGlmKGlzSW1hZ2UpIHtcbiAgICAgIHJldHVybiByZXNpemVTYXZlSW1hZ2Uoc2Vzc2lvbklkLCBmaWxlSWQsIGJ1ZiwgdXBsb2FkVHlwZSlcbiAgICAgICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogRmlsZVR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IEZpbGVUeXBlID0ge1xuICAgICAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICAgICAgX2tleTogZmlsZUlkLFxuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgICAgICAgICAgZmlsZVR5cGU6IGZvcm1hdFR5cGUsXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBzYXZlVG9EYihpbnNlcnQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaW5zZXJ0OiBGaWxlVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZpbGVJZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICAgIGZpbGVUeXBlOiBmb3JtYXRUeXBlLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIG5hbWU6IGZvcm1hdE5hbWUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH07XG5cbiAgICByZXR1cm4gc2F2ZVRvRGIoaW5zZXJ0KTtcbiAgfTtcblxuICAvLyBJZiBmaWxlIGlzIGEgdXJsIHBhdGgsIGRvd25sb2FkIHRoZSBmaWxlIGFuZCBzYXZlXG4gIGlmKGlzVXJsKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QuZ2V0KHtlbmNvZGluZzogbnVsbCwgdXJpOiB1cmx9KVxuICAgICAgLnRoZW4oKGJvZHkpID0+IHVwbG9hZEZpbGUobmV3IEJ1ZmZlcihib2R5LCAnYmluYXJ5JyksIGZvcm1hdFR5cGUpKVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcignZmlsZV9yZXF1ZXN0Jyk7XG4gICAgICB9KTtcbiAgfSBlbHNlIGlmKGl0ZW0uYmFzZTY0ICE9PSAnJykge1xuICAgIGNvbnN0IGJ1ZmZlcjogQnVmZmVyID0gbmV3IEJ1ZmZlcihpdGVtLmJhc2U2NCk7XG4gICAgcmV0dXJuIHVwbG9hZEZpbGUoYnVmZmVyLCBmb3JtYXRUeXBlKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbGVfcmVxdWlyZWQnKTtcbn07XG5cbi8vIEdpcGh5XG5leHBvcnQgY29uc3QgZ2V0R2lwaHlUcmVuZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICBjb25zdCBnaWZVcmw6IHN0cmluZyA9IGBodHRwOi8vYXBpLmdpcGh5LmNvbS92MS9naWZzL3RyZW5kaW5nP2FwaV9rZXk9JHtDb25maWcuZ2V0KCdnaXBoeS5rZXknKX0mbGltaXQ9JHtsaW1pdH1gO1xuXG4gIHJldHVybiBodHRwR2V0KGdpZlVybClcbiAgICAudGhlbigocmVzOiBSZXNwb25zZSkgPT4gcmVzLmpzb24oKSlcbiAgICAudGhlbigoanNvbikgPT4ganNvbi5kYXRhLm1hcCgoZ2lmSW1hZ2UgPSB7aWQ6IG51bGwsIGltYWdlczogbnVsbH0pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGltYWdlczoge1xuICAgICAgICAgIG9yaWdpbmFsOiB7dXJsID0gJyd9ID0ge30sXG4gICAgICAgICAgZml4ZWRfaGVpZ2h0X3NtYWxsOiB7dXJsOiB0aHVtYiA9ICcnfSA9IHt9XG4gICAgICAgIH0gPSB7fVxuICAgICAgfSA9IGdpZkltYWdlO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgdGh1bWIsXG4gICAgICAgIHR5cGU6ICdnaXBoeScsXG4gICAgICAgIHVybFxuICAgICAgfTtcbiAgICB9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2lwaHlTZWFyY2ggPSAoY29udGV4dDogQXBpQ29udGV4dCwgcXVlcnk6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICBjb25zdCBmb3JtYXRRdWVyeTogc3RyaW5nID0gZW5jb2RlVVJJKHF1ZXJ5KTtcbiAgY29uc3QgZ2lmVXJsOiBzdHJpbmcgPSBgaHR0cDovL2FwaS5naXBoeS5jb20vdjEvZ2lmcy9zZWFyY2g/cT0ke2Zvcm1hdFF1ZXJ5fSZhcGlfa2V5PSR7Q29uZmlnLmdldCgnZ2lwaHkua2V5Jyl9JmxpbWl0PSR7bGltaXR9YDtcblxuICByZXR1cm4gZmV0Y2goZ2lmVXJsKVxuICAgIC50aGVuKChyZXM6IFJlc3BvbnNlKSA9PiByZXMuanNvbigpKVxuICAgIC50aGVuKChqc29uKSA9PiBqc29uLmRhdGEubWFwKChnaWZJbWFnZSA9IHtpZDogbnVsbCwgaW1hZ2VzOiBudWxsfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgb3JpZ2luYWw6IHt1cmwgPSAnJ30gPSB7fSxcbiAgICAgICAgICBmaXhlZF9oZWlnaHRfc21hbGw6IHt1cmw6IHRodW1iID0gJyd9ID0ge31cbiAgICAgICAgfSA9IHt9XG4gICAgICB9ID0gZ2lmSW1hZ2U7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkLFxuICAgICAgICB0aHVtYixcbiAgICAgICAgdHlwZTogJ2dpcGh5JyxcbiAgICAgICAgdXJsXG4gICAgICB9O1xuICAgIH0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlVHJlbmRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxpbWl0OiBudW1iZXIgPSAzMCk6IFByb21pc2U8YW55W10+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnZpZGVvcy5saXN0KHtcbiAgICAgIGNoYXJ0OiAnbW9zdFBvcHVsYXInLFxuICAgICAgbWF4UmVzdWx0czogbGltaXQsXG4gICAgICBwYXJ0OiAnc25pcHBldCcsXG4gICAgICByZWdpb25Db2RlOiAnVVMnXG4gICAgfSwgKGVycm9yOiBFcnJvciwgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvclswXS5tZXNzYWdlKSk7XG4gICAgICB9IGVsc2UgaWYoZGF0YSkge1xuICAgICAgICBjb25zdCBsaXN0ID0gZGF0YS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgdGh1bWI6IGl0ZW0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsLFxuICAgICAgICAgIHR5cGU6ICd5b3V0dWJlJyxcbiAgICAgICAgICB1cmw6IGBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7aXRlbS5pZH1gXG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXNvbHZlKGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlU2VhcmNoID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHF1ZXJ5OiBzdHJpbmcsIGxpbWl0OiBudW1iZXIgPSAzMCk6IFByb21pc2U8YW55W10+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnNlYXJjaC5saXN0KHtcbiAgICAgIG1heFJlc3VsdHM6IGxpbWl0LFxuICAgICAgcGFydDogJ3NuaXBwZXQnLFxuICAgICAgcTogcXVlcnksXG4gICAgICByZWdpb25Db2RlOiAnVVMnXG4gICAgfSwgKGVycm9yOiBFcnJvciwgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvclswXS5tZXNzYWdlKSk7XG4gICAgICB9IGVsc2UgaWYoZGF0YSkge1xuICAgICAgICBjb25zdCB7aXRlbXN9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICB0aHVtYjogaXRlbS5zbmlwcGV0LnRodW1ibmFpbHMuaGlnaC51cmwsXG4gICAgICAgICAgdHlwZTogJ3lvdXR1YmUnLFxuICAgICAgICAgIHVybDogYGh0dHA6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtpdGVtLmlkfWBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJlc29sdmUobGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gRmlsZXNcbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlckZpbGVzID0gKHVzZXJJZDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vZmlsZXMvJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFVzZXJGaWxlcyA9ICh1c2VySWQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAnZmlsZXMnLCB0eXBlOiBzdHJpbmcgPSAncHJvZmlsZScpOiBzdHJpbmcgPT4ge1xuICBpZihmaWxlbmFtZSkge1xuICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9L3VzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xuICB9XG5cbiAgaWYodHlwZSA9PT0gJ3Byb2ZpbGUnKSB7XG4gICAgcmV0dXJuIGBodHRwczovL2JveC4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vZGVmYXVsdHMvdXNlcl9iay5qcGdgO1xuICB9XG5cbiAgcmV0dXJuIGBodHRwczovL2JveC4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vZGVmYXVsdHMvdXNlcl93aC5qcGdgO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpbmtGaWxlcyA9IChkYjogRGF0YWJhc2UsIGZpbGVzOiBGaWxlVHlwZVtdLCBwb3N0SWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiA9PiB7XG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGVUeXBlKSA9PiBjcmVhdGVGaWxlKGRiLCBmaWxlKVxuICAgICAgLnRoZW4oKGZpbGU6IEZpbGVUeXBlKSA9PiBjcmVhdGVQb3N0RWRnZShkYiwgZmlsZSwgcG9zdElkKSkpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZXMgPSAoZGI6IERhdGFiYXNlLCBwb3N0SWQ6IHN0cmluZywgZmlsZXM6IEZpbGVUeXBlW10pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmVkZ2VDb2xsZWN0aW9uKCdpc1Bvc3RlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKHBvc3RJZClcbiAgICAudGhlbigoZWRnZXMpID0+IHtcbiAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSB7X2tleToke2VkZ2VLZXl9fSBJTiBpc1Bvc3RlZGA7XG5cbiAgICAgICAgICAgIHJldHVybiBkYi5xdWVyeShhcWxRcnkpLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gTGluayBmaWxlc1xuICAgICAgICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGRiLCBmaWxlcywgcG9zdElkKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gTGluayBmaWxlc1xuICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGRiLCBmaWxlcywgcG9zdElkKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWxlcztcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWxlID0gKGRiOiBEYXRhYmFzZSwgZmlsZTogRmlsZVR5cGUpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIF9rZXk6IGZpbGUuaWQsXG4gICAgYWRkZWQ6IERhdGUubm93KClcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmaWxlLmlkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFIHt9XG4gICAgSU4gZmlsZXMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZEZpbGU6IEZpbGVUeXBlID0ge30pID0+IHVwZGF0ZWRGaWxlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVCYXNlNjQgPSAoYnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gbmV3IEJ1ZmZlcihidWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlY29kZUJhc2U2NCA9IChkYXRhU3RyaW5nOiBzdHJpbmcpOiBvYmplY3QgPT4ge1xuICAvLyBjb25zdCBnZXREYXRhID0gKHN0cjogc3RyaW5nKSA9PiBzdHIubWF0Y2goL15kYXRhOihbQS1aYS16LStcXC9dKyk7YmFzZTY0LCguKykkLykgfHwgW107XG4gIGNvbnN0IGdldERhdGEgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5tYXRjaCgvXmRhdGE6KFtBLVphLXotKy9dKyk7YmFzZTY0LCguKykkLykgfHwgW107XG4gIGxldCBtYXRjaGVzID0gZ2V0RGF0YShkYXRhU3RyaW5nKTtcblxuICBpZihtYXRjaGVzLmxlbmd0aCAhPT0gMykge1xuICAgIC8vIElmIGludmFsaWQgbWFrZSBzdXJlIHdlIGRvbid0IG5lZWQgdG8gZGVjb2RlXG4gICAgbWF0Y2hlcyA9IGdldERhdGEoZGVjb2RlVVJJQ29tcG9uZW50KGRhdGFTdHJpbmcpKTtcblxuICAgIC8vIENoZWNrIGl0IGFnYWluLlxuICAgIGlmKG1hdGNoZXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBpbnB1dCBzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRhdGE6IG5ldyBCdWZmZXIobWF0Y2hlc1syXSwgJ2Jhc2U2NCcpLFxuICAgIHR5cGU6IG1hdGNoZXNbMV1cbiAgfTtcbn07XG4iXX0=
|
|
406
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2ZpbGVzLnRzIl0sIm5hbWVzIjpbImdldCIsImh0dHBHZXQiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwiZ29vZ2xlIiwiVXNlckVycm9yIiwiaXNFbXB0eSIsInJlcXVlc3QiLCJDb25maWciLCJ1c2VEYiIsInJlc2l6ZVNhdmVJbWFnZSIsImNyZWF0ZVBvc3RFZGdlIiwieW91dHViZSIsImF1dGgiLCJ2ZXJzaW9uIiwiZGVmYXVsdHMiLCJlbmNvZGluZyIsImFkZEZpbGUiLCJjb250ZXh0IiwiaXRlbSIsImRhdGFiYXNlIiwic2Vzc2lvbklkIiwidXNlcklkIiwidXNlclR5cGUiLCJkZXNjcmlwdGlvbiIsImZpbGVJZCIsImZpbGVUeXBlIiwibmFtZSIsInVybCIsImZvcm1hdEZpbGVJZCIsImlzVXJsIiwiZm9ybWF0TmFtZSIsImZvcm1hdFR5cGUiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIm5hbWVBcnIiLCJzcGxpdCIsImV4dCIsImxlbmd0aCIsImlzSW1hZ2UiLCJmb3JtYXREZXNjIiwic2F2ZVRvRGIiLCJpbnNlcnQiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiZmlsZSIsImNhdGNoIiwiZXJyb3IiLCJ1cGxvYWRGaWxlIiwiYnVmIiwidXBsb2FkVHlwZSIsIm5vdyIsIkRhdGUiLCJyZXNpemVkSW1hZ2UiLCJfa2V5IiwiYWRkZWQiLCJtb2RpZmllZCIsInVyaSIsImJvZHkiLCJCdWZmZXIiLCJiYXNlNjQiLCJidWZmZXIiLCJFcnJvciIsImdldEdpcGh5VHJlbmRzIiwibGltaXQiLCJnaWZVcmwiLCJyZXMiLCJqc29uIiwiZGF0YSIsIm1hcCIsImdpZkltYWdlIiwiaWQiLCJpbWFnZXMiLCJvcmlnaW5hbCIsImZpeGVkX2hlaWdodF9zbWFsbCIsInRodW1iIiwidHlwZSIsImdldEdpcGh5U2VhcmNoIiwiZm9ybWF0UXVlcnkiLCJlbmNvZGVVUkkiLCJmZXRjaCIsImdldFlvdVR1YmVUcmVuZHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInZpZGVvcyIsImxpc3QiLCJjaGFydCIsIm1heFJlc3VsdHMiLCJwYXJ0IiwicmVnaW9uQ29kZSIsImNvbnNvbGUiLCJtZXNzYWdlIiwiaXRlbXMiLCJzbmlwcGV0IiwidGh1bWJuYWlscyIsImhpZ2giLCJnZXRZb3VUdWJlU2VhcmNoIiwic2VhcmNoIiwicSIsImdldFBhdGhVc2VyRmlsZXMiLCJmaWxlbmFtZSIsImdldFVybFVzZXJGaWxlcyIsImRpciIsImNyZWF0ZUZpbGUiLCJkYiIsInVwZGF0ZWRGaWxlIiwibGlua0ZpbGVzIiwiZmlsZXMiLCJwb3N0SWQiLCJhbGwiLCJ1cGRhdGVGaWxlcyIsImVkZ2VDb2xsZWN0aW9uIiwiaW5FZGdlcyIsImVkZ2VzIiwiZWRnZSIsImVkZ2VLZXkiLCJlbmNvZGVCYXNlNjQiLCJ0b1N0cmluZyIsImRlY29kZUJhc2U2NCIsImRhdGFTdHJpbmciLCJnZXREYXRhIiwic3RyIiwibWF0Y2giLCJtYXRjaGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFRQSxHQUFHLElBQUlDLE9BQWYsUUFBNkIsbUJBQTdCO0FBQ0EsU0FBUUMsVUFBUixFQUFvQkMsT0FBcEIsRUFBNkJDLFdBQTdCLFFBQStDLGNBQS9DO0FBQ0EsU0FBUUMsR0FBUixRQUE0QixVQUE1QjtBQUdBLFNBQVFDLE1BQVIsUUFBcUIsWUFBckI7QUFDQSxTQUFRQyxTQUFSLFFBQXdCLGdCQUF4QjtBQUNBLE9BQU9DLE9BQVAsTUFBb0IsZ0JBQXBCO0FBQ0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLGlCQUF6QjtBQUdBLFNBQVFDLE1BQVIsUUFBcUIsV0FBckI7QUFFQSxTQUFRQyxLQUFSLFFBQW9CLFVBQXBCO0FBQ0EsU0FBUUMsZUFBUixRQUE4QixVQUE5QjtBQUNBLFNBQVFDLGNBQVIsUUFBNkIsU0FB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QU8sR0FBRyxTQUFWQSxPQUFVLENBQUNDLEdBQUQ7QUFBQSxXQUFpQkEsR0FBRyxDQUFDQyxLQUFKLENBQVUsb0NBQVYsS0FBbUQsRUFBcEU7QUFBQSxHQUFoQixDQUQwRCxDQUUxRDs7O0FBQ0EsTUFBSUMsT0FBTyxHQUFHSCxPQUFPLENBQUNELFVBQUQsQ0FBckI7O0FBRUEsTUFBR0ksT0FBTyxDQUFDekYsTUFBUixLQUFtQixDQUF0QixFQUF5QjtBQUN2QjtBQUNBeUYsSUFBQUEsT0FBTyxHQUFHSCxPQUFPLENBQUNJLGtCQUFrQixDQUFDTCxVQUFELENBQW5CLENBQWpCLENBRnVCLENBSXZCOztBQUNBLFFBQUdJLE9BQU8sQ0FBQ3pGLE1BQVIsS0FBbUIsQ0FBdEIsRUFBeUI7QUFDdkIsWUFBTTJCLEtBQUssQ0FBQyxzQkFBRCxDQUFYO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPO0FBQ0xNLElBQUFBLElBQUksRUFBRSxJQUFJVCxNQUFKLENBQVdpRSxPQUFPLENBQUMsQ0FBRCxDQUFsQixFQUF1QixRQUF2QixDQUREO0FBRUxoRCxJQUFBQSxJQUFJLEVBQUVnRCxPQUFPLENBQUMsQ0FBRDtBQUZSLEdBQVA7QUFJRCxDQW5CTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcbmltcG9ydCB7Z29vZ2xlfSBmcm9tICdnb29nbGVhcGlzJztcbmltcG9ydCB7VXNlckVycm9yfSBmcm9tICdncmFwaHFsLWVycm9ycyc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgKiBhcyByZXF1ZXN0IGZyb20gJ3JlcXVlc3QtcHJvbWlzZSc7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJ3R5cGVzL2F1dGgnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ZpbGVzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7cmVzaXplU2F2ZUltYWdlfSBmcm9tICcuL2ltYWdlcyc7XG5pbXBvcnQge2NyZWF0ZVBvc3RFZGdlfSBmcm9tICcuL3Bvc3RzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmNvbnN0IHlvdXR1YmUgPSBnb29nbGUueW91dHViZSh7YXV0aDogQ29uZmlnLmdldCgnZ29vZ2xlLmtleScpLCB2ZXJzaW9uOiAndjMnfSk7XG5yZXF1ZXN0LmRlZmF1bHRzKHtlbmNvZGluZzogbnVsbH0pO1xuXG4vLyBjb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnZmlsZXMnO1xuXG4vLyBVcGxvYWQgZmlsZVxuZXhwb3J0IGNvbnN0IGFkZEZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogRmlsZVR5cGUgPSB7fSk6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZCwgdXNlclR5cGV9ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGZpbGVJZCxcbiAgICBmaWxlVHlwZSxcbiAgICBuYW1lLFxuICAgIHVybFxuICB9ID0gaXRlbTtcblxuICAvLyBJZFxuICBjb25zdCBmb3JtYXRGaWxlSWQ6IHN0cmluZyA9IGZpbGVJZCA/IHBhcnNlSWQoZmlsZUlkKSA6IGNyZWF0ZUhhc2goYGZpbGUtJHtzZXNzaW9uSWR9YCk7XG5cbiAgLy8gTmFtZVxuICBjb25zdCBpc1VybDogYm9vbGVhbiA9IGlzRW1wdHkodXJsKTtcblxuICAvLyBJZiBubyBuYW1lLCBnZXQgaXQgZnJvbSB1cmwgcGF0aFxuICBsZXQgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VTdHJpbmcobmFtZSwgMTYwKTtcbiAgbGV0IGZvcm1hdFR5cGU6IHN0cmluZyA9IHBhcnNlU3RyaW5nKGZpbGVUeXBlLCAxNik7XG5cbiAgaWYoZm9ybWF0TmFtZSA9PT0gJycgJiYgaXNVcmwpIHtcbiAgICBmb3JtYXROYW1lID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuICB9XG5cbiAgaWYoZm9ybWF0VHlwZSA9PT0gJycpIHtcbiAgICBjb25zdCBuYW1lQXJyOiBzdHJpbmdbXSA9IGZvcm1hdE5hbWUuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBleHQ6IHN0cmluZyA9IG5hbWVBcnJbbmFtZUFyci5sZW5ndGggLSAxXTtcblxuICAgIHN3aXRjaChleHQpIHtcbiAgICAgIGNhc2UgJ2pwZWcnOlxuICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgZm9ybWF0VHlwZSA9ICdpbWFnZS9qcGVnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwbmcnOlxuICAgICAgICBmb3JtYXRUeXBlID0gJ2ltYWdlL3BuZyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgZm9ybWF0VHlwZSA9ICdhcHBsaWNhdGlvbi96aXAnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBpc0ltYWdlOiBib29sZWFuO1xuXG4gIHN3aXRjaChmb3JtYXRUeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGlzSW1hZ2UgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlzSW1hZ2UgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gRGVzY3JpcHRpb25cbiAgY29uc3QgZm9ybWF0RGVzYzogc3RyaW5nID0gcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCk7XG5cbiAgLy8gT25seSBhbGxvdyBmaWxlIHVwbG9hZHMgdG8gcHJlbWl1bSB1c2Vyc1xuICBpZighaXNJbWFnZSAmJiB1c2VyVHlwZSAhPT0gMikge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2FjY291bnRfcmVzdHJpY3Rpb24nKTtcbiAgfVxuXG4gIGNvbnN0IHNhdmVUb0RiID0gKGluc2VydDogRmlsZVR5cGUpID0+IHtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gZmlsZXMgUkVUVVJOIE5FV2A7XG5cbiAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLnRoZW4oKGZpbGUgPSB7fSkgPT4gZmlsZSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gIH07XG5cbiAgY29uc3QgdXBsb2FkRmlsZSA9IChidWY6IEJ1ZmZlciwgdXBsb2FkVHlwZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuXG4gICAgLy8gSWYgaW1hZ2UsIHJlc2l6ZSBhbmQgY3JlYXRlIGEgdGh1bWJuYWlsXG4gICAgaWYoaXNJbWFnZSkge1xuICAgICAgcmV0dXJuIHJlc2l6ZVNhdmVJbWFnZShjb250ZXh0LCBmb3JtYXRGaWxlSWQsIGJ1ZiwgdXBsb2FkVHlwZSlcbiAgICAgICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogRmlsZVR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IEZpbGVUeXBlID0ge1xuICAgICAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICAgICAgX2tleTogZm9ybWF0RmlsZUlkLFxuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgICAgICAgICAgZmlsZVR5cGU6IGZvcm1hdFR5cGUsXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBzYXZlVG9EYihpbnNlcnQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaW5zZXJ0OiBGaWxlVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdEZpbGVJZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICAgIGZpbGVUeXBlOiBmb3JtYXRUeXBlLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIG5hbWU6IGZvcm1hdE5hbWUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH07XG5cbiAgICByZXR1cm4gc2F2ZVRvRGIoaW5zZXJ0KTtcbiAgfTtcblxuICAvLyBJZiBmaWxlIGlzIGEgdXJsIHBhdGgsIGRvd25sb2FkIHRoZSBmaWxlIGFuZCBzYXZlXG4gIGlmKGlzVXJsKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QuZ2V0KHtlbmNvZGluZzogbnVsbCwgdXJpOiB1cmx9KVxuICAgICAgLnRoZW4oKGJvZHkpID0+IHVwbG9hZEZpbGUobmV3IEJ1ZmZlcihib2R5LCAnYmluYXJ5JyksIGZvcm1hdFR5cGUpKVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcignZmlsZV9yZXF1ZXN0Jyk7XG4gICAgICB9KTtcbiAgfSBlbHNlIGlmKGl0ZW0uYmFzZTY0ICE9PSAnJykge1xuICAgIGNvbnN0IGJ1ZmZlcjogQnVmZmVyID0gbmV3IEJ1ZmZlcihpdGVtLmJhc2U2NCk7XG4gICAgcmV0dXJuIHVwbG9hZEZpbGUoYnVmZmVyLCBmb3JtYXRUeXBlKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbGVfcmVxdWlyZWQnKTtcbn07XG5cbi8vIEdpcGh5XG5leHBvcnQgY29uc3QgZ2V0R2lwaHlUcmVuZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICBjb25zdCBnaWZVcmw6IHN0cmluZyA9IGBodHRwOi8vYXBpLmdpcGh5LmNvbS92MS9naWZzL3RyZW5kaW5nP2FwaV9rZXk9JHtDb25maWcuZ2V0KCdnaXBoeS5rZXknKX0mbGltaXQ9JHtsaW1pdH1gO1xuXG4gIHJldHVybiBodHRwR2V0KGdpZlVybClcbiAgICAudGhlbigocmVzOiBSZXNwb25zZSkgPT4gcmVzLmpzb24oKSlcbiAgICAudGhlbigoanNvbikgPT4ganNvbi5kYXRhLm1hcCgoZ2lmSW1hZ2UgPSB7aWQ6IG51bGwsIGltYWdlczogbnVsbH0pID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGltYWdlczoge1xuICAgICAgICAgIG9yaWdpbmFsOiB7dXJsID0gJyd9ID0ge30sXG4gICAgICAgICAgZml4ZWRfaGVpZ2h0X3NtYWxsOiB7dXJsOiB0aHVtYiA9ICcnfSA9IHt9XG4gICAgICAgIH0gPSB7fVxuICAgICAgfSA9IGdpZkltYWdlO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgdGh1bWIsXG4gICAgICAgIHR5cGU6ICdnaXBoeScsXG4gICAgICAgIHVybFxuICAgICAgfTtcbiAgICB9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2lwaHlTZWFyY2ggPSAoY29udGV4dDogQXBpQ29udGV4dCwgcXVlcnk6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICBjb25zdCBmb3JtYXRRdWVyeTogc3RyaW5nID0gZW5jb2RlVVJJKHF1ZXJ5KTtcbiAgY29uc3QgZ2lmVXJsOiBzdHJpbmcgPSBgaHR0cDovL2FwaS5naXBoeS5jb20vdjEvZ2lmcy9zZWFyY2g/cT0ke2Zvcm1hdFF1ZXJ5fSZhcGlfa2V5PSR7Q29uZmlnLmdldCgnZ2lwaHkua2V5Jyl9JmxpbWl0PSR7bGltaXR9YDtcblxuICByZXR1cm4gZmV0Y2goZ2lmVXJsKVxuICAgIC50aGVuKChyZXM6IFJlc3BvbnNlKSA9PiByZXMuanNvbigpKVxuICAgIC50aGVuKChqc29uKSA9PiBqc29uLmRhdGEubWFwKChnaWZJbWFnZSA9IHtpZDogbnVsbCwgaW1hZ2VzOiBudWxsfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgb3JpZ2luYWw6IHt1cmwgPSAnJ30gPSB7fSxcbiAgICAgICAgICBmaXhlZF9oZWlnaHRfc21hbGw6IHt1cmw6IHRodW1iID0gJyd9ID0ge31cbiAgICAgICAgfSA9IHt9XG4gICAgICB9ID0gZ2lmSW1hZ2U7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkLFxuICAgICAgICB0aHVtYixcbiAgICAgICAgdHlwZTogJ2dpcGh5JyxcbiAgICAgICAgdXJsXG4gICAgICB9O1xuICAgIH0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlVHJlbmRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxpbWl0OiBudW1iZXIgPSAzMCk6IFByb21pc2U8YW55W10+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnZpZGVvcy5saXN0KHtcbiAgICAgIGNoYXJ0OiAnbW9zdFBvcHVsYXInLFxuICAgICAgbWF4UmVzdWx0czogbGltaXQsXG4gICAgICBwYXJ0OiAnc25pcHBldCcsXG4gICAgICByZWdpb25Db2RlOiAnVVMnXG4gICAgfSwgKGVycm9yOiBFcnJvciwgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvclswXS5tZXNzYWdlKSk7XG4gICAgICB9IGVsc2UgaWYoZGF0YSkge1xuICAgICAgICBjb25zdCBsaXN0ID0gZGF0YS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgdGh1bWI6IGl0ZW0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsLFxuICAgICAgICAgIHR5cGU6ICd5b3V0dWJlJyxcbiAgICAgICAgICB1cmw6IGBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7aXRlbS5pZH1gXG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXNvbHZlKGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuXG5leHBvcnQgY29uc3QgZ2V0WW91VHViZVNlYXJjaCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBxdWVyeTogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPGFueVtdPiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgeW91dHViZS5zZWFyY2gubGlzdCh7XG4gICAgICBtYXhSZXN1bHRzOiBsaW1pdCxcbiAgICAgIHBhcnQ6ICdzbmlwcGV0JyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgcTogcXVlcnksXG4gICAgICByZWdpb25Db2RlOiAnVVMnXG4gICAgfSwgKGVycm9yOiBFcnJvciwgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvclswXS5tZXNzYWdlKSk7XG4gICAgICB9IGVsc2UgaWYoZGF0YSkge1xuICAgICAgICBjb25zdCB7aXRlbXN9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICB0aHVtYjogaXRlbS5zbmlwcGV0LnRodW1ibmFpbHMuaGlnaC51cmwsXG4gICAgICAgICAgdHlwZTogJ3lvdXR1YmUnLFxuICAgICAgICAgIHVybDogYGh0dHA6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtpdGVtLmlkfWBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJlc29sdmUobGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4vLyBGaWxlc1xuZXhwb3J0IGNvbnN0IGdldFBhdGhVc2VyRmlsZXMgPSAodXNlcklkOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gYHVzZXJzLyR7dXNlcklkfS9maWxlcy8ke2ZpbGVuYW1lfWA7XG5cbmV4cG9ydCBjb25zdCBnZXRVcmxVc2VyRmlsZXMgPSAodXNlcklkOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGRpcjogc3RyaW5nID0gJ2ZpbGVzJywgdHlwZTogc3RyaW5nID0gJ3Byb2ZpbGUnKTogc3RyaW5nID0+IHtcbiAgaWYoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gYGh0dHBzOi8vYm94LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS91c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbiAgfVxuXG4gIGlmKHR5cGUgPT09ICdwcm9maWxlJykge1xuICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9L2RlZmF1bHRzL3VzZXJfYmsuanBnYDtcbiAgfVxuXG4gIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9L2RlZmF1bHRzL3VzZXJfd2guanBnYDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWxlID0gKGRiOiBEYXRhYmFzZSwgZmlsZTogRmlsZVR5cGUpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IHtmaWxlSWR9ID0gZmlsZTtcbiAgY29uc3QgaW5zZXJ0OiBhbnkgPSB7XG4gICAgX2tleTogZmlsZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7ZmlsZUlkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFIHt9XG4gICAgSU4gZmlsZXMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZEZpbGU6IEZpbGVUeXBlID0ge30pID0+IHVwZGF0ZWRGaWxlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBsaW5rRmlsZXMgPSAoZGI6IERhdGFiYXNlLCBmaWxlczogRmlsZVR5cGVbXSwgcG9zdElkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT5cbiAgUHJvbWlzZS5hbGwoXG4gICAgZmlsZXMubWFwKChmaWxlOiBGaWxlVHlwZSkgPT4gY3JlYXRlRmlsZShkYiwgZmlsZSlcbiAgICAgIC50aGVuKChmaWxlOiBGaWxlVHlwZSkgPT4gY3JlYXRlUG9zdEVkZ2UoZGIsIGZpbGUsIHBvc3RJZCkpKVxuICApO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZXMgPSAoZGI6IERhdGFiYXNlLCBwb3N0SWQ6IHN0cmluZywgZmlsZXM6IEZpbGVUeXBlW10pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRiLmVkZ2VDb2xsZWN0aW9uKCdpc1Bvc3RlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKHBvc3RJZClcbiAgICAudGhlbigoZWRnZXMpID0+IHtcbiAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtfa2V5OiBlZGdlS2V5fSA9IGVkZ2U7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSB7X2tleToke2VkZ2VLZXl9fSBJTiBpc1Bvc3RlZGA7XG5cbiAgICAgICAgICAgIHJldHVybiBkYi5xdWVyeShhcWxRcnkpLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gTGluayBmaWxlc1xuICAgICAgICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGRiLCBmaWxlcywgcG9zdElkKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gTGluayBmaWxlc1xuICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGRiLCBmaWxlcywgcG9zdElkKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWxlcztcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVCYXNlNjQgPSAoYnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcgPT4gbmV3IEJ1ZmZlcihidWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuZXhwb3J0IGNvbnN0IGRlY29kZUJhc2U2NCA9IChkYXRhU3RyaW5nOiBzdHJpbmcpOiBvYmplY3QgPT4ge1xuICBjb25zdCBnZXREYXRhID0gKHN0cjogc3RyaW5nKSA9PiBzdHIubWF0Y2goL15kYXRhOihbQS1aYS16LStcXC9dKyk7YmFzZTY0LCguKykkLykgfHwgW107XG4gIC8vIGNvbnN0IGdldERhdGEgPSAoYmFzZTY0OiBzdHJpbmcpID0+IGJhc2U2NC5zdWJzdHIoYmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICBsZXQgbWF0Y2hlcyA9IGdldERhdGEoZGF0YVN0cmluZyk7XG5cbiAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICAvLyBJZiBpbnZhbGlkIG1ha2Ugc3VyZSB3ZSBkb24ndCBuZWVkIHRvIGRlY29kZVxuICAgIG1hdGNoZXMgPSBnZXREYXRhKGRlY29kZVVSSUNvbXBvbmVudChkYXRhU3RyaW5nKSk7XG5cbiAgICAvLyBDaGVjayBpdCBhZ2Fpbi5cbiAgICBpZihtYXRjaGVzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgaW5wdXQgc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBuZXcgQnVmZmVyKG1hdGNoZXNbMl0sICdiYXNlNjQnKSxcbiAgICB0eXBlOiBtYXRjaGVzWzFdXG4gIH07XG59O1xuIl19
|
package/lib/data/groups.d.ts
CHANGED
|
@@ -5,9 +5,9 @@ export declare const getGroupListByUser: (context: ApiContext, from: number, to:
|
|
|
5
5
|
export declare const getGroupListByTags: (context: ApiContext, tags: string[], from: number, to: number) => Promise<GroupType[]>;
|
|
6
6
|
export declare const getGroup: (context: ApiContext, itemId: string) => Promise<GroupType>;
|
|
7
7
|
export declare const getGroupDetails: (context: ApiContext, groupId: string) => Promise<GroupType>;
|
|
8
|
+
export declare const createGroupEdge: (database: string, userId: string, groupId: string, type: string) => Promise<GroupEdgeType>;
|
|
8
9
|
export declare const addGroup: (context: ApiContext, item?: GroupType) => Promise<GroupType>;
|
|
9
10
|
export declare const updateGroup: (context: ApiContext, item?: GroupType) => Promise<GroupType>;
|
|
10
11
|
export declare const deleteGroup: (context: ApiContext, itemId: string) => Promise<GroupType>;
|
|
11
12
|
export declare const getGroupsByReaction: (context: ApiContext, reaction: string) => Promise<GroupType[]>;
|
|
12
13
|
export declare const isGrouped: (database: string, userId: string, groupId: string) => Promise<GroupUserType>;
|
|
13
|
-
export declare const createGroupEdge: (database: string, userId: string, groupId: string, type: string) => Promise<GroupEdgeType>;
|
package/lib/data/groups.js
CHANGED
|
@@ -174,6 +174,31 @@ export var getGroupDetails = function getGroupDetails(context, groupId) {
|
|
|
174
174
|
});
|
|
175
175
|
});
|
|
176
176
|
};
|
|
177
|
+
export var createGroupEdge = function createGroupEdge(database, userId, groupId, type) {
|
|
178
|
+
var action = 'createGroupEdge';
|
|
179
|
+
var formatUserId = parseId(userId);
|
|
180
|
+
var formatGroupId = parseId(groupId);
|
|
181
|
+
var formatType = parseChar(type, 16);
|
|
182
|
+
var now = Date.now();
|
|
183
|
+
var edgeCollection = useDb(database).edgeCollection('isGrouped');
|
|
184
|
+
var edgeId = createHash("group-".concat(formatUserId, "-").concat(formatGroupId));
|
|
185
|
+
var edge = {
|
|
186
|
+
_key: edgeId,
|
|
187
|
+
added: now,
|
|
188
|
+
type: formatType
|
|
189
|
+
};
|
|
190
|
+
return edgeCollection.save(edge, "users/".concat(formatUserId), "groups/".concat(formatGroupId)).catch(function (error) {
|
|
191
|
+
return logError({
|
|
192
|
+
action: action,
|
|
193
|
+
category: eventCategory,
|
|
194
|
+
label: 'db_error'
|
|
195
|
+
}, error, {
|
|
196
|
+
id: formatUserId
|
|
197
|
+
}).then(function () {
|
|
198
|
+
return null;
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
};
|
|
177
202
|
export var addGroup = function addGroup(context) {
|
|
178
203
|
var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
179
204
|
var action = 'add';
|
|
@@ -326,29 +351,4 @@ export var isGrouped = function isGrouped(database, userId, groupId) {
|
|
|
326
351
|
});
|
|
327
352
|
});
|
|
328
353
|
};
|
|
329
|
-
export var createGroupEdge = function createGroupEdge(database, userId, groupId, type) {
|
|
330
|
-
var action = 'createGroupEdge';
|
|
331
|
-
var formatUserId = parseId(userId);
|
|
332
|
-
var formatGroupId = parseId(groupId);
|
|
333
|
-
var formatType = parseChar(type, 16);
|
|
334
|
-
var now = Date.now();
|
|
335
|
-
var edgeCollection = useDb(database).edgeCollection('isGrouped');
|
|
336
|
-
var edgeId = createHash("group-".concat(formatUserId, "-").concat(formatGroupId));
|
|
337
|
-
var edge = {
|
|
338
|
-
_key: edgeId,
|
|
339
|
-
added: now,
|
|
340
|
-
type: formatType
|
|
341
|
-
};
|
|
342
|
-
return edgeCollection.save(edge, "users/".concat(formatUserId), "groups/".concat(formatGroupId)).catch(function (error) {
|
|
343
|
-
return logError({
|
|
344
|
-
action: action,
|
|
345
|
-
category: eventCategory,
|
|
346
|
-
label: 'db_error'
|
|
347
|
-
}, error, {
|
|
348
|
-
id: formatUserId
|
|
349
|
-
}).then(function () {
|
|
350
|
-
return null;
|
|
351
|
-
});
|
|
352
|
-
});
|
|
353
|
-
};
|
|
354
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2dyb3Vwcy50cyJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsImFxbCIsImZsYXR0ZW4iLCJ1bmlxQnkiLCJnZXRMaW1pdCIsImxvZ0Vycm9yIiwidXNlRGIiLCJleHRyYWN0VGFncyIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRHcm91cExpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJsaW1pdCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiZ2V0R3JvdXBMaXN0QnlVc2VyIiwic2Vzc2lvbklkIiwidXNlcklkIiwiZ2V0R3JvdXBMaXN0QnlUYWdzIiwidGFncyIsIlByb21pc2UiLCJtYXAiLCJ0YWdOYW1lIiwiZm9ybWF0VGFnTmFtZSIsInJlc3VsdHMiLCJnZXRHcm91cCIsIml0ZW1JZCIsImZvcm1hdEl0ZW1JZCIsIm5leHQiLCJncm91cCIsImdldEdyb3VwRGV0YWlscyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiYWRkR3JvdXAiLCJpdGVtIiwibm93IiwiRGF0ZSIsImRlc2NyaXB0aW9uIiwibmFtZSIsInR5cGUiLCJpZCIsImZvcm1hdERlc2MiLCJzdWJzdHIiLCJmb3JtYXRUeXBlIiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwibW9kaWZpZWQiLCJkYiIsIml0ZW1UeXBlIiwiY3JlYXRlR3JvdXBFZGdlIiwidXBkYXRlR3JvdXAiLCJ1cGRhdGUiLCJncm91cEtleSIsImRlbGV0ZUdyb3VwIiwiZ2V0R3JvdXBzQnlSZWFjdGlvbiIsInJlYWN0aW9uIiwiZm9ybWF0UmVhY3Rpb24iLCJ1c2VyRG9jSWQiLCJpc0dyb3VwZWQiLCJmb3JtYXRVc2VySWQiLCJpc1ZhbGlkIiwibGVuZ3RoIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlSWQiLCJlZGdlIiwic2F2ZSJd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QSxXQUFrQmpCLFFBQVEsQ0FBQztBQUNoQ1EsTUFBQUEsTUFBTSxFQUFOQSxNQURnQztBQUVoQ1UsTUFBQUEsUUFBUSxFQUFFZixhQUZzQjtBQUdoQ2dCLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFELEVBSTlCRixLQUo4QixFQUl2QjtBQUFDNEIsTUFBQUEsRUFBRSxFQUFFb0I7QUFBTCxLQUp1QixDQUFSLENBSUtwRCxJQUpMLENBSVU7QUFBQSxhQUFNLElBQU47QUFBQSxLQUpWLENBQWxCO0FBQUEsR0FERixDQUFQO0FBTUQsQ0F0Qk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsLCBEYXRhYmFzZX0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9hcWwtcXVlcnknO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9jdXJzb3InO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gvdW5pcUJ5JztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtHcm91cEVkZ2VUeXBlLCBHcm91cFR5cGUsIEdyb3VwVXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL2dyb3Vwcyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFcnJvciwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3N9IGZyb20gJy4vdGFncyc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdncm91cHMnO1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgZyBpbiBncm91cHNcbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7bGltaXQuYXFsfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzOnVzZXJzfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlVc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5VXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBnLCBlIElOIElOQk9VTkQgXCIke2B1c2Vycy8ke3Nlc3Npb25JZH1gfVwiIGlzR3JvdXBlZFxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBpc0dyb3VwZWRcbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlUYWdzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ3M6IHN0cmluZ1tdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcblxuICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgKHRhZ3MgfHwgW10pLm1hcCgodGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXRUYWdOYW1lOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ05hbWUpO1xuICAgICAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gICAgICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCwgZSBJTiBPVVRCT1VORCBcIiR7YHRhZ3MvJHtmb3JtYXRUYWdOYW1lfWB9XCIgaXNUYWdnZWRcbiAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgIExFVCBsaWtlcyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCBsaWtlIElOIElOQk9VTkQgcC5faWQgbGlrZXNcbiAgICAgICAgICAgIEZJTFRFUiBsaWtlLnZhbHVlID09ICdsaWtlJ1xuICAgICAgICAgICAgUkVUVVJOIGxpa2VcbiAgICAgICAgICApXG4gICAgICAgICAgTEVUIGRpc2xpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2Rpc2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBGSUxURVIgZS50eXBlID09ICdwb3N0JyAmJiBwLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwge3VzZXI6dSwgbGlrZXM6TEVOR1RIKGxpa2VzKSwgZGlzbGlrZXM6TEVOR1RIKGRpc2xpa2VzKX0pYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gICAgfSlcbiAgKVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiB1bmlxQnkoZmxhdHRlbihyZXN1bHRzKSwgJ19rZXknKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcsIGUgSU4gSU5CT1VORCAke2B1c2Vycy8ke3Nlc3Npb25JZH1gfSBpc0dyb3VwZWRcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGlzR3JvdXBlZFxuICAgICAgICBSRVRVUk4gTUVSR0UgKHUsIHt0eXBlOmwudHlwZX0pXG4gICAgICApXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzOnVzZXJzfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwRGV0YWlscyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREZXRhaWxzJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcgSU4gZ3JvdXBzXG4gICAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0R3JvdXBJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBnYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSA9IHt9KSA9PiBncm91cClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUgPSB7fSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBuYW1lID0gJ1VudGl0bGVkJyxcbiAgICB0eXBlXG4gIH06IEdyb3VwVHlwZSA9IGl0ZW07XG4gIGNvbnN0IGlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBncm91cC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0RGVzYzogc3RyaW5nID0gZGVzY3JpcHRpb24uc3Vic3RyKDAsIDY0MCk7XG4gIGNvbnN0IGZvcm1hdFR5cGU6IHN0cmluZyA9IHBhcnNlQ2hhcih0eXBlLCAxNikgfHwgJ3ByaXZhdGUnO1xuICBjb25zdCBpbnNlcnQ6IEdyb3VwVHlwZSA9IHtcbiAgICBfa2V5OiBpZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZSxcbiAgICB0eXBlOiBmb3JtYXRUeXBlXG4gIH07XG4gIGNvbnN0IGRiOiBEYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGdyb3VwcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1UeXBlOiBzdHJpbmcgPSAnZ3JvdXBzJztcblxuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB7X2tleTogZ3JvdXBJZH06IEdyb3VwVHlwZSA9IGdyb3VwO1xuICAgICAgcmV0dXJuIGV4dHJhY3RUYWdzKGRiLCBpdGVtVHlwZSwgZ3JvdXBJZCwgZm9ybWF0RGVzYylcbiAgICAgICAgLnRoZW4oKCkgPT4gY3JlYXRlR3JvdXBFZGdlKGRhdGFiYXNlLCBzZXNzaW9uSWQsIGdyb3VwSWQsICdhZG1pbicpLnRoZW4oKCkgPT4gZ3JvdXApKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IEdyb3VwVHlwZSA9IHt9KTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGlkLFxuICAgIG5hbWUgPSAnVW50aXRsZWQnXG4gIH06IEdyb3VwVHlwZSA9IGl0ZW07XG4gIGNvbnN0IGl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0RGVzYzogc3RyaW5nID0gZGVzY3JpcHRpb24uc3Vic3RyKDAsIDY0MCk7XG4gIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZVxuICB9O1xuICBjb25zdCBkYjogRGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7aXRlbUlkfSBXSVRIICR7dXBkYXRlfSBJTiBncm91cHMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogZ3JvdXBLZXl9ID0gZ3JvdXA7XG4gICAgICBjb25zdCBpdGVtVHlwZTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgcmV0dXJuIGV4dHJhY3RUYWdzKGRiLCBpdGVtVHlwZSwgZ3JvdXBLZXksIGRlc2NyaXB0aW9uKS50aGVuKCgpID0+IGdyb3VwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgIFJFTU9WRSBnIElOIGdyb3Vwc1xuICAgICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBzQnlSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRHcm91cHNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbjogc3RyaW5nID0gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMik7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgciBJTiBPVVRCT1VORCAke3VzZXJEb2NJZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLnZhbHVlID09ICR7Zm9ybWF0UmVhY3Rpb259XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4ge3ZhbHVlOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcm91cGVkID0gKGRhdGFiYXNlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVXNlclR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnaXNHcm91cGVkJztcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcgSU4gZ3JvdXBzXG4gICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEdyb3VwSWR9XG4gICAgRk9SIHUgSU4gSU5CT1VORCBnLl9pZCBpc0dyb3VwZWRcbiAgICBGSUxURVIgdS5fa2V5ID09ICR7Zm9ybWF0VXNlcklkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IFtdKSA9PiB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gISFyZXN1bHRzLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgaXNWYWxpZCxcbiAgICAgICAgdXNlcklkXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge2lkOiB1c2VySWR9KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcm91cEVkZ2UgPSAoZGF0YWJhc2U6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZywgdHlwZTogc3RyaW5nKTogUHJvbWlzZTxHcm91cEVkZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2NyZWF0ZUdyb3VwRWRnZSc7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBmb3JtYXRUeXBlOiBzdHJpbmcgPSBwYXJzZUNoYXIodHlwZSwgMTYpO1xuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZSkuZWRnZUNvbGxlY3Rpb24oJ2lzR3JvdXBlZCcpO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGdyb3VwLSR7Zm9ybWF0VXNlcklkfS0ke2Zvcm1hdEdyb3VwSWR9YCk7XG5cbiAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIHR5cGU6IGZvcm1hdFR5cGVcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YCwgYGdyb3Vwcy8ke2Zvcm1hdEdyb3VwSWR9YClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7aWQ6IGZvcm1hdFVzZXJJZH0pLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdfQ==
|
|
354
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2dyb3Vwcy50cyJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsImFxbCIsImZsYXR0ZW4iLCJ1bmlxQnkiLCJnZXRMaW1pdCIsImxvZ0Vycm9yIiwidXNlRGIiLCJleHRyYWN0VGFncyIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRHcm91cExpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJsaW1pdCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiZ2V0R3JvdXBMaXN0QnlVc2VyIiwic2Vzc2lvbklkIiwidXNlcklkIiwiZ2V0R3JvdXBMaXN0QnlUYWdzIiwidGFncyIsIlByb21pc2UiLCJtYXAiLCJ0YWdOYW1lIiwiZm9ybWF0VGFnTmFtZSIsInJlc3VsdHMiLCJnZXRHcm91cCIsIml0ZW1JZCIsImZvcm1hdEl0ZW1JZCIsIm5leHQiLCJncm91cCIsImdldEdyb3VwRGV0YWlscyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY3JlYXRlR3JvdXBFZGdlIiwidHlwZSIsImZvcm1hdFVzZXJJZCIsImZvcm1hdFR5cGUiLCJub3ciLCJEYXRlIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlSWQiLCJlZGdlIiwiX2tleSIsImFkZGVkIiwic2F2ZSIsImlkIiwiYWRkR3JvdXAiLCJpdGVtIiwiZGVzY3JpcHRpb24iLCJuYW1lIiwiZm9ybWF0RGVzYyIsInN1YnN0ciIsImluc2VydCIsIm1vZGlmaWVkIiwiZGIiLCJpdGVtVHlwZSIsInVwZGF0ZUdyb3VwIiwidXBkYXRlIiwiZ3JvdXBLZXkiLCJkZWxldGVHcm91cCIsImdldEdyb3Vwc0J5UmVhY3Rpb24iLCJyZWFjdGlvbiIsImZvcm1hdFJlYWN0aW9uIiwidXNlckRvY0lkIiwiaXNHcm91cGVkIiwiaXNWYWxpZCIsImxlbmd0aCJd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akIsUUFBUSxDQUFDO0FBQ2hDUSxNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDVSxNQUFBQSxRQUFRLEVBQUVmLGFBRnNCO0FBR2hDZ0IsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQUQsRUFJOUJGLEtBSjhCLEVBSXZCO0FBQUNpQyxNQUFBQSxFQUFFLEVBQUU1QjtBQUFMLEtBSnVCLENBQVIsQ0FJRFQsSUFKQyxDQUlJO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKSixDQUFsQjtBQUFBLEdBWEYsQ0FBUDtBQWdCRCxDQTNCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWwsIERhdGFiYXNlfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2FxbC1xdWVyeSc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2N1cnNvcic7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuXG5pbXBvcnQge0FyYW5nb0RCTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtleHRyYWN0VGFnc30gZnJvbSAnLi90YWdzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBnIGluIGdyb3Vwc1xuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBpc0dyb3VwZWRcbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIGUgSU4gSU5CT1VORCBcIiR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9XCIgaXNHcm91cGVkXG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGlzR3JvdXBlZFxuICAgICAgICBSRVRVUk4gTUVSR0UgKHUsIHt0eXBlOmwudHlwZX0pXG4gICAgICApXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgZy5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ3M6IHN0cmluZ1tdLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAodGFncyB8fCBbXSkubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdFRhZ05hbWU6IHN0cmluZyA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwLCBlIElOIE9VVEJPVU5EIFwiJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH1cIiBpc1RhZ2dlZFxuICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7dXNlcjp1LCBsaWtlczpMRU5HVEgobGlrZXMpLCBkaXNsaWtlczpMRU5HVEgoZGlzbGlrZXMpfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KVxuICApXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAnX2tleScpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZywgZSBJTiBJTkJPVU5EICR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9IGlzR3JvdXBlZFxuICAgICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBEZXRhaWxzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERldGFpbHMnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0R3JvdXBJZDogc3RyaW5nID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiBncm91cHNcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIGdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgZGF0YWJhc2U6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nXG4pOiBQcm9taXNlPEdyb3VwRWRnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnY3JlYXRlR3JvdXBFZGdlJztcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGZvcm1hdFR5cGU6IHN0cmluZyA9IHBhcnNlQ2hhcih0eXBlLCAxNik7XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlKS5lZGdlQ29sbGVjdGlvbignaXNHcm91cGVkJyk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtmb3JtYXRVc2VySWR9LSR7Zm9ybWF0R3JvdXBJZH1gKTtcblxuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBub3csXG4gICAgdHlwZTogZm9ybWF0VHlwZVxuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gLCBgZ3JvdXBzLyR7Zm9ybWF0R3JvdXBJZH1gKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHtpZDogZm9ybWF0VXNlcklkfSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlID0ge30pOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgbmFtZSA9ICdVbnRpdGxlZCcsXG4gICAgdHlwZVxuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IGRlc2NyaXB0aW9uLnN1YnN0cigwLCA2NDApO1xuICBjb25zdCBmb3JtYXRUeXBlOiBzdHJpbmcgPSBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJztcbiAgY29uc3QgaW5zZXJ0OiBHcm91cFR5cGUgPSB7XG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWUsXG4gICAgdHlwZTogZm9ybWF0VHlwZVxuICB9O1xuICBjb25zdCBkYjogRGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBncm91cHMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBpdGVtVHlwZTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3Qge19rZXk6IGdyb3VwSWR9OiBHcm91cFR5cGUgPSBncm91cDtcbiAgICAgIHJldHVybiBleHRyYWN0VGFncyhkYiwgaXRlbVR5cGUsIGdyb3VwSWQsIGZvcm1hdERlc2MpXG4gICAgICAgIC50aGVuKCgpID0+IGNyZWF0ZUdyb3VwRWRnZShkYXRhYmFzZSwgc2Vzc2lvbklkLCBncm91cElkLCAnYWRtaW4nKS50aGVuKCgpID0+IGdyb3VwKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUgPSB7fSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpZCxcbiAgICBuYW1lID0gJ1VudGl0bGVkJ1xuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IGRlc2NyaXB0aW9uLnN1YnN0cigwLCA2NDApO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcbiAgY29uc3QgZGI6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2UpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke2l0ZW1JZH0gV0lUSCAke3VwZGF0ZX0gSU4gZ3JvdXBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGdyb3VwS2V5fSA9IGdyb3VwO1xuICAgICAgY29uc3QgaXRlbVR5cGU6IHN0cmluZyA9ICdncm91cHMnO1xuXG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIHJldHVybiBleHRyYWN0VGFncyhkYiwgaXRlbVR5cGUsIGdyb3VwS2V5LCBkZXNjcmlwdGlvbikudGhlbigoKSA9PiBncm91cCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiBncm91cHNcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBSRU1PVkUgZyBJTiBncm91cHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3Vwc0J5UmVhY3Rpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgcmVhY3Rpb246IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0R3JvdXBzQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb246IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIHIgSU4gT1VUQk9VTkQgJHt1c2VyRG9jSWR9IGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci52YWx1ZSA9PSAke2Zvcm1hdFJlYWN0aW9ufVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHt2YWx1ZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR3JvdXBlZCA9IChkYXRhYmFzZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2lzR3JvdXBlZCc7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgIEZPUiB1IElOIElOQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgRklMVEVSIHUuX2tleSA9PSAke2Zvcm1hdFVzZXJJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZCA9ICEhcmVzdWx0cy5sZW5ndGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIGlzVmFsaWQsXG4gICAgICAgIHVzZXJJZFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHtpZDogdXNlcklkfSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl19
|