@dcl/asset-packs 2.14.2 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +2169 -616
- package/catalog.json +127 -1
- package/dist/actions.js +8 -8
- package/dist/admin-toolkit-ui/Button.d.ts +1 -1
- package/dist/admin-toolkit-ui/Button.js +2 -2
- package/dist/admin-toolkit-ui/Error.d.ts +2 -2
- package/dist/admin-toolkit-ui/Error.js +4 -4
- package/dist/admin-toolkit-ui/Header.js +1 -1
- package/dist/admin-toolkit-ui/Modal.d.ts +19 -0
- package/dist/admin-toolkit-ui/Modal.js +37 -0
- package/dist/admin-toolkit-ui/ModerationControl/UsersList.d.ts +3 -3
- package/dist/admin-toolkit-ui/ModerationControl/UsersList.js +14 -8
- package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +4 -5
- package/dist/admin-toolkit-ui/ModerationControl/index.js +19 -11
- package/dist/admin-toolkit-ui/ModerationControl/styles/AddUserInputStyles.js +4 -4
- package/dist/admin-toolkit-ui/ModerationControl/styles/UsersListStyles.d.ts +2 -0
- package/dist/admin-toolkit-ui/ModerationControl/styles/UsersListStyles.js +13 -5
- package/dist/admin-toolkit-ui/RewardsControl.d.ts +2 -2
- package/dist/admin-toolkit-ui/RewardsControl.js +9 -5
- package/dist/admin-toolkit-ui/SmartItemsControl.d.ts +2 -2
- package/dist/admin-toolkit-ui/SmartItemsControl.js +6 -4
- package/dist/admin-toolkit-ui/TextAnnouncements.d.ts +2 -2
- package/dist/admin-toolkit-ui/TextAnnouncements.js +9 -5
- package/dist/admin-toolkit-ui/TextAnnouncementsControl.d.ts +3 -3
- package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +15 -7
- package/dist/admin-toolkit-ui/VideoControl/DclCast/CompactDclCast.d.ts +11 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/CompactDclCast.js +90 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/DclCastInfo.d.ts +6 -4
- package/dist/admin-toolkit-ui/VideoControl/DclCast/DclCastInfo.js +71 -57
- package/dist/admin-toolkit-ui/VideoControl/DclCast/PresentationPanel.d.ts +10 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/PresentationPanel.js +67 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/SharePresentationModal.d.ts +6 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/SharePresentationModal.js +74 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/SpeakerShowcase.d.ts +11 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/SpeakerShowcase.js +110 -0
- package/dist/admin-toolkit-ui/VideoControl/DclCast/index.d.ts +17 -3
- package/dist/admin-toolkit-ui/VideoControl/DclCast/index.js +208 -35
- package/dist/admin-toolkit-ui/VideoControl/DclCast/styles.d.ts +73 -1
- package/dist/admin-toolkit-ui/VideoControl/DclCast/styles.js +193 -3
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +17 -13
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.d.ts +1 -1
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +8 -8
- package/dist/admin-toolkit-ui/VideoControl/VideoUrl.d.ts +2 -2
- package/dist/admin-toolkit-ui/VideoControl/VideoUrl.js +9 -9
- package/dist/admin-toolkit-ui/VideoControl/VolumeControl.d.ts +3 -2
- package/dist/admin-toolkit-ui/VideoControl/VolumeControl.js +8 -10
- package/dist/admin-toolkit-ui/VideoControl/api.d.ts +49 -0
- package/dist/admin-toolkit-ui/VideoControl/api.js +185 -1
- package/dist/admin-toolkit-ui/VideoControl/index.d.ts +16 -15
- package/dist/admin-toolkit-ui/VideoControl/index.js +57 -21
- package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +2 -2
- package/dist/admin-toolkit-ui/VideoControl/utils.js +3 -3
- package/dist/admin-toolkit-ui/constants.d.ts +2 -3
- package/dist/admin-toolkit-ui/constants.js +4 -4
- package/dist/admin-toolkit-ui/fetch-utils.js +2 -2
- package/dist/admin-toolkit-ui/index.d.ts +4 -4
- package/dist/admin-toolkit-ui/index.js +40 -18
- package/dist/admin-toolkit-ui/types.d.ts +19 -0
- package/dist/admin-toolkit-ui/types.js +1 -1
- package/dist/admin.js +2 -2
- package/dist/bin/index.js +2169 -616
- package/dist/ui.js +4 -4
- package/package.json +5 -5
package/dist/actions.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Material, AudioStream, MeshCollider, getComponentEntityTree, Tween, } from '@dcl/ecs';
|
|
2
2
|
import { Quaternion, Vector3 } from '@dcl/sdk/math';
|
|
3
|
+
import { movePlayerTo, triggerEmote, triggerSceneEmote, openExternalUrl, teleportTo, changeRealm, } from '~system/RestrictedActions';
|
|
4
|
+
import { getRealm } from '~system/Runtime';
|
|
5
|
+
import { signedFetch } from '~system/SignedFetch';
|
|
3
6
|
import { getEntityParent, getPlayerPosition, getWorldPosition, getWorldRotation } from './helpers';
|
|
4
7
|
import { ActionType, ProximityLayer, TriggerType, TweenType, TeleportMode, clone, getComponents, initVideoPlayerComponentMaterial, } from './definitions';
|
|
5
8
|
import { getDefaultValue, isValidState } from './states';
|
|
@@ -12,11 +15,8 @@ import { getExplorerComponents } from './components';
|
|
|
12
15
|
import { initTriggers, damageTargets, healTargets } from './triggers';
|
|
13
16
|
import { followMap } from './transform';
|
|
14
17
|
import { getEasingFunctionFromInterpolation } from './tweens';
|
|
15
|
-
import {
|
|
18
|
+
import { getRewardsServerUrl } from './admin-toolkit-ui/constants';
|
|
16
19
|
import { callScriptMethod } from '~sdk/script-utils';
|
|
17
|
-
import { movePlayerTo, triggerEmote, triggerSceneEmote, openExternalUrl, teleportTo, changeRealm, } from '~system/RestrictedActions';
|
|
18
|
-
import { getRealm } from '~system/Runtime';
|
|
19
|
-
import { signedFetch } from '~system/SignedFetch';
|
|
20
20
|
const initedEntities = new Set();
|
|
21
21
|
const uiStacks = new Map();
|
|
22
22
|
const lastUiEntityClicked = new Map();
|
|
@@ -1106,12 +1106,12 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
1106
1106
|
}
|
|
1107
1107
|
}
|
|
1108
1108
|
async function fetchCampaignsByDispenserKey(dispenserKey) {
|
|
1109
|
-
const url = `${
|
|
1109
|
+
const url = `${getRewardsServerUrl()}/api/campaigns/keys?campaign_key=${encodeURIComponent(dispenserKey)}`;
|
|
1110
1110
|
const response = await request(url);
|
|
1111
1111
|
return response;
|
|
1112
1112
|
}
|
|
1113
1113
|
async function fetchCaptcha() {
|
|
1114
|
-
const response = await request(`${
|
|
1114
|
+
const response = await request(`${getRewardsServerUrl()}/api/captcha`, {
|
|
1115
1115
|
method: 'POST',
|
|
1116
1116
|
headers: {
|
|
1117
1117
|
'Content-Type': 'application/json',
|
|
@@ -1120,7 +1120,7 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
1120
1120
|
return response;
|
|
1121
1121
|
}
|
|
1122
1122
|
async function requestToken(dispenserKey, captcha) {
|
|
1123
|
-
const url = `${
|
|
1123
|
+
const url = `${getRewardsServerUrl()}/api/rewards`;
|
|
1124
1124
|
const realm = await getRealm({});
|
|
1125
1125
|
const player = playersHelper?.getPlayer();
|
|
1126
1126
|
const response = await request(url, {
|
|
@@ -1202,4 +1202,4 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
1202
1202
|
engine.removeEntityWithChildren(entity);
|
|
1203
1203
|
}
|
|
1204
1204
|
}
|
|
1205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUtYLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFD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SCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJRW5naW5lLFxuICBFbnRpdHksXG4gIFRleHRBbGlnbk1vZGUsXG4gIEZvbnQsXG4gIE1vdmUsXG4gIFBCVHdlZW4sXG4gIFJvdGF0ZSxcbiAgU2NhbGUsXG4gIFBvaW50ZXJFdmVudHNTeXN0ZW0sXG59IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIE1hdGVyaWFsLFxuICBBdWRpb1N0cmVhbSxcbiAgWUdVbml0LFxuICBZR1Bvc2l0aW9uVHlwZSxcbiAgUG9pbnRlckZpbHRlck1vZGUsXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG4gIGdldENvbXBvbmVudEVudGl0eVRyZWUsXG4gIFR3ZWVuLFxufSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG5pbXBvcnQgdHlwZSB7IFRleHR1cmVNb3ZlbWVudFR5cGUgYXMgU2RrVGV4dHVyZU1vdmVtZW50VHlwZSB9IGZyb20gJ0BkY2wvZWNzL2Rpc3QvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvZGVjZW50cmFsYW5kL3Nkay9jb21wb25lbnRzL3R3ZWVuLmdlbic7XG5pbXBvcnQgeyBnZXRFbnRpdHlQYXJlbnQsIGdldFBsYXllclBvc2l0aW9uLCBnZXRXb3JsZFBvc2l0aW9uLCBnZXRXb3JsZFJvdGF0aW9uIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uUGF5bG9hZCxcbiAgSVNES0hlbHBlcnMsXG4gIElQbGF5ZXJzSGVscGVyLFxuICBTY3JlZW5BbGlnbk1vZGUsXG4gIEFjdGlvbixcbn0gZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQge1xuICBBY3Rpb25UeXBlLFxuICBQcm94aW1pdHlMYXllcixcbiAgVHJpZ2dlclR5cGUsXG4gIFR3ZWVuVHlwZSxcbiAgVGVsZXBvcnRNb2RlLFxuICBjbG9uZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlLCBpc1ZhbGlkU3RhdGUgfSBmcm9tICcuL3N0YXRlcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FdmVudHMsIGdldFRyaWdnZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0VUlCYWNrZ3JvdW5kLFxuICBnZXRVSVRleHQsXG4gIGdldFVJVHJhbnNmb3JtLFxuICBtYXBBbGlnblRvU2NyZWVuQWxpZ24sXG4gIHNob3dDYXB0Y2hhUHJvbXB0LFxufSBmcm9tICcuL3VpJztcbmltcG9ydCB7IEFsaWduTW9kZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgZ2V0RXhwbG9yZXJDb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IGluaXRUcmlnZ2VycywgZGFtYWdlVGFyZ2V0cywgaGVhbFRhcmdldHMgfSBmcm9tICcuL3RyaWdnZXJzJztcbmltcG9ydCB7IGZvbGxvd01hcCB9IGZyb20gJy4vdHJhbnNmb3JtJztcbmltcG9ydCB7IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24gfSBmcm9tICcuL3R3ZWVucyc7XG5pbXBvcnQgeyBSRVdBUkRTX1NFUlZFUl9VUkwgfSBmcm9tICcuL2FkbWluLXRvb2xraXQtdWkvY29uc3RhbnRzJztcbmltcG9ydCB7IGNhbGxTY3JpcHRNZXRob2QgfSBmcm9tICd+c2RrL3NjcmlwdC11dGlscyc7XG5pbXBvcnQge1xuICBtb3ZlUGxheWVyVG8sXG4gIHRyaWdnZXJFbW90ZSxcbiAgdHJpZ2dlclNjZW5lRW1vdGUsXG4gIG9wZW5FeHRlcm5hbFVybCxcbiAgdGVsZXBvcnRUbyxcbiAgY2hhbmdlUmVhbG0sXG59IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBGbGF0RmV0Y2hJbml0IH0gZnJvbSAnfnN5c3RlbS9TaWduZWRGZXRjaCc7XG5pbXBvcnQgeyBnZXRSZWFsbSB9IGZyb20gJ35zeXN0ZW0vUnVudGltZSc7XG5pbXBvcnQgeyBzaWduZWRGZXRjaCB9IGZyb20gJ35zeXN0ZW0vU2lnbmVkRmV0Y2gnO1xuXG5jb25zdCBpbml0ZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpO1xuY29uc3QgdWlTdGFja3MgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5PigpO1xuY29uc3QgbGFzdFVpRW50aXR5Q2xpY2tlZCA9IG5ldyBNYXA8RW50aXR5LCBFbnRpdHk+KCk7XG5jb25zdCB0ZXh0RW50aXRpZXMgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpOyAvLyBNb2RlbCBFbnRpdHksIFRleHQgRW50aXR5XG5cbmxldCBpbnRlcm5hbEluaXRBY3Rpb25zOiAoKGVudGl0eTogRW50aXR5KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEFjdGlvbnMoZW50aXR5OiBFbnRpdHkpIHtcbiAgaWYgKGludGVybmFsSW5pdEFjdGlvbnMpIHtcbiAgICByZXR1cm4gaW50ZXJuYWxJbml0QWN0aW9ucyhlbnRpdHkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgaW5pdEFjdGlvbnMgd2hpbGUgYWN0aW9uc1N5c3RlbSBoYXMgbm90IGJlZW4gY3JlYXRlZCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uc1N5c3RlbShcbiAgZW5naW5lOiBJRW5naW5lLFxuICBwb2ludGVyRXZlbnRzU3lzdGVtOiBQb2ludGVyRXZlbnRzU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICBjb25zdCB7XG4gICAgQW5pbWF0b3IsXG4gICAgVHJhbnNmb3JtLFxuICAgIEF1ZGlvU291cmNlLFxuICAgIEF2YXRhckF0dGFjaCxcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LFxuICAgIEdsdGZDb250YWluZXIsXG4gICAgVWlUcmFuc2Zvcm0sXG4gICAgVWlUZXh0LFxuICAgIFVpQmFja2dyb3VuZCxcbiAgICBVaUlucHV0LFxuICAgIFVpSW5wdXRSZXN1bHQsXG4gICAgVHdlZW46IFR3ZWVuQ29tcG9uZW50LFxuICAgIFR3ZWVuU2VxdWVuY2UsXG4gICAgVmlkZW9QbGF5ZXIsXG4gICAgTGlnaHRTb3VyY2UsXG4gICAgTWFpbkNhbWVyYSxcbiAgICBWaXJ0dWFsQ2FtZXJhLFxuICAgIFRleHRTaGFwZSxcbiAgICBJbnB1dE1vZGlmaWVyLFxuICAgIFNreWJveFRpbWUsXG4gIH0gPSBnZXRFeHBsb3JlckNvbXBvbmVudHMoZW5naW5lKTtcbiAgY29uc3QgeyBBY3Rpb25zLCBTdGF0ZXMsIENvdW50ZXIsIFRyaWdnZXJzLCBSZXdhcmRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSk7XG5cbiAgLy8gc2F2ZSBpbnRlcm5hbCByZWZlcmVuY2UgdG8gaW5pdCBmdW5jaW9uXG4gIGludGVybmFsSW5pdEFjdGlvbnMgPSBpbml0QWN0aW9ucztcblxuICByZXR1cm4gZnVuY3Rpb24gYWN0aW9uc1N5c3RlbShfZHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGVudGl0aWVzV2l0aEFjdGlvbnMgPSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFjdGlvbnMpO1xuXG4gICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbnRpdGllc1dpdGhBY3Rpb25zKSB7XG4gICAgICBpbml0QWN0aW9ucyhlbnRpdHkpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpbml0QWN0aW9ucyhlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQWN0aW9ucy5oYXMoZW50aXR5KSB8fCBpbml0ZWRFbnRpdGllcy5oYXMoZW50aXR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBhY3Rpb25zIGRhdGFcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXQoZW50aXR5KTtcblxuICAgIC8vIGluaXRpYWxpemUgYWN0aW9ucyBmb3IgZ2l2ZW4gZW50aXR5XG4gICAgY29uc3QgdHlwZXMgPSBhY3Rpb25zLnZhbHVlLnJlZHVjZShcbiAgICAgICh0eXBlczogU2V0PHN0cmluZz4sIGFjdGlvbjogQWN0aW9uKSA9PiB0eXBlcy5hZGQoYWN0aW9uLnR5cGUpLFxuICAgICAgbmV3IFNldDxzdHJpbmc+KCksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiaW5kIGFjdGlvbnNcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zLnZhbHVlKSB7XG4gICAgICBhY3Rpb25FdmVudHMub24oYWN0aW9uLm5hbWUsICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlUGxheUFuaW1hdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wQW5pbWF0aW9uKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NUQVRFOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRTdGF0ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9UV0VFTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnRUd2VlbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BUd2VlbihlbnRpdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TTElERV9URVhUVVJFOiB7XG4gICAgICAgICAgICBoYW5kbGVTbGlkZVRleHR1cmUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0xJREVfVEVYVFVSRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUluY3JlbWVudENvdW50ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUNSRUFTRV9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZWNyZWFzZUNvdW50ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfU09VTkQ6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9TT1VORDoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcFNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWToge1xuICAgICAgICAgICAgaGFuZGxlU2V0VmlzaWJpbGl0eShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUF0dGFjaFRvUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlWaWRlbyhlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wVmlkZW8oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTToge1xuICAgICAgICAgICAgaGFuZGxlUGxheUF1ZGlvU3RyZWFtKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlVGVsZXBvcnRQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTU9WRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZU1vdmVQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlEZWZhdWx0RW1vdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlDdXN0b21FbW90ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk9QRU5fTElOSzoge1xuICAgICAgICAgICAgaGFuZGxlT3BlbkxpbmsoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0hPV19URVhUOiB7XG4gICAgICAgICAgICBoYW5kbGVTaG93VGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX1RFWFQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ISURFX1RFWFQ6IHtcbiAgICAgICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUQVJUX0RFTEFZOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydERlbGF5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9ERUxBWToge1xuICAgICAgICAgICAgaGFuZGxlU3RvcERlbGF5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfREVMQVk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9MT09QOiB7XG4gICAgICAgICAgICBoYW5kbGVTdGFydExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcExvb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0xPTkVfRU5USVRZOiB7XG4gICAgICAgICAgICBoYW5kbGVDbG9uZUVudGl0eShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SRU1PVkVfRU5USVRZOiB7XG4gICAgICAgICAgICBoYW5kbGVSZW1vdmVFbnRpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfSU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZVNob3dJbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX0lNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9JTUFHRToge1xuICAgICAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5EQU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZURhbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5EQU1BR0U+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVySGVyZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWUVSX0ZBQ0VfSVRFTToge1xuICAgICAgICAgICAgaGFuZGxlUGxheWVyRmFjZUl0ZW0oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWUVSX0ZBQ0VfSVRFTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUZvbGxvd1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wRm9sbG93aW5nUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQUNFX09OX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlUGxhY2VPblBsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ST1RBVEVfQVNfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVSb3RhdGVBc1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGFjZU9uQ2FtZXJhKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX0NBTUVSQT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE6IHtcbiAgICAgICAgICAgIGhhbmRsZVJvdGF0ZUFzQ2FtZXJhKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfUE9TSVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFBvc2l0aW9uKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9QT1NJVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9ST1RBVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU2V0Um90YXRpb24oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1JPVEFUSU9OPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NDQUxFOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRTY2FsZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU0NBTEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SQU5ET006IHtcbiAgICAgICAgICAgIGhhbmRsZVJhbmRvbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5SQU5ET00+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5CQVRDSDoge1xuICAgICAgICAgICAgaGFuZGxlQmF0Y2goZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQkFUQ0g+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5IRUFMX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlSGVhbFBsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5IRUFMX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMQUlNX0FJUkRST1A6IHtcbiAgICAgICAgICAgIGhhbmRsZUNsYWltQWlyZHJvcChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DTEFJTV9BSVJEUk9QPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTElHSFRTX09OOiB7XG4gICAgICAgICAgICBoYW5kbGVMaWdodHNPbihlbnRpdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5MSUdIVFNfT0ZGOiB7XG4gICAgICAgICAgICBoYW5kbGVMaWdodHNPZmYoZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTElHSFRTX01PRElGWToge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzTW9kaWZ5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkxJR0hUU19NT0RJRlk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DSEFOR0VfQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2VDYW1lcmEoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX0NBTUVSQT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNIQU5HRV9URVhUOiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2VUZXh0KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9URVhUPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuRlJFRVpFX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlRnJlZXplUGxheWVyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlVORlJFRVpFX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlVW5mcmVlemVQbGF5ZXIoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX0NPTExJU0lPTlM6IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZUNvbGxpc2lvbnMoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX0NPTExJU0lPTlM+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DSEFOR0VfU0tZQk9YOiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2VTa3lib3goZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9TS1lCT1g+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5SRVNFVF9TS1lCT1g6IHtcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U2t5Ym94KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNBTExfU0NSSVBUX01FVEhPRDoge1xuICAgICAgICAgICAgaGFuZGxlQ2FsbFNjcmlwdE1ldGhvZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5MT0dfVE9fQ09OU09MRToge1xuICAgICAgICAgICAgaGFuZGxlTG9nVG9Db25zb2xlKGdldFBheWxvYWQ8QWN0aW9uVHlwZS5MT0dfVE9fQ09OU09MRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkRFTEVURToge1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlKGVudGl0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0ZWRFbnRpdGllcy5hZGQoZW50aXR5KTtcbiAgfVxuXG4gIC8vIExJR0hUU19PTlxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNPbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGNvbnN0IGxpZ2h0ID0gTGlnaHRTb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChsaWdodCkge1xuICAgICAgbGlnaHQuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBMSUdIVFNfT0ZGXG4gIGZ1bmN0aW9uIGhhbmRsZUxpZ2h0c09mZihlbnRpdHk6IEVudGl0eSkge1xuICAgIGNvbnN0IGxpZ2h0ID0gTGlnaHRTb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChsaWdodCkge1xuICAgICAgbGlnaHQuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gTElHSFRTX01PRElGWVxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNNb2RpZnkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5MSUdIVFNfTU9ESUZZPikge1xuICAgIGNvbnN0IGxpZ2h0ID0gTGlnaHRTb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghbGlnaHQpIHJldHVybjtcbiAgICBpZiAocGF5bG9hZC5hY3RpdmUgIT09IHVuZGVmaW5lZCkgbGlnaHQuYWN0aXZlID0gcGF5bG9hZC5hY3RpdmU7XG4gICAgaWYgKHBheWxvYWQuY29sb3IpIGxpZ2h0LmNvbG9yID0gcGF5bG9hZC5jb2xvcjtcbiAgICBpZiAocGF5bG9hZC5pbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkgbGlnaHQuaW50ZW5zaXR5ID0gcGF5bG9hZC5pbnRlbnNpdHk7XG4gIH1cblxuICAvLyBDSEFOR0VfQ0FNRVJBXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZUNhbWVyYShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DQU1FUkE+KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcGF5bG9hZC52aXJ0dWFsQ2FtZXJhRW50aXR5O1xuXG4gICAgLy8gSWYgdGFyZ2V0IGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBlbnRpdHkgdGhhdCBvd25zIHRoZSBBY3Rpb25zIGNvbXBvbmVudFxuICAgIC8vIElmIHRoYXQgZW50aXR5IGhhcyBWaXJ0dWFsQ2FtZXJhLCB1c2UgaXQ7IG90aGVyd2lzZSByZXZlcnQgdG8gbm9ybWFsIGJlaGF2aW9yXG4gICAgbGV0IGNhbWVyYUVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkID0gdGFyZ2V0O1xuXG4gICAgaWYgKGNhbWVyYUVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgdGhlIGVudGl0eSB0aGF0IG93bnMgdGhlIEFjdGlvbnMgY29tcG9uZW50IGlmIGl0IGhhcyBWaXJ0dWFsQ2FtZXJhXG4gICAgICBpZiAoVmlydHVhbENhbWVyYS5oYXMoZW50aXR5KSkge1xuICAgICAgICBjYW1lcmFFbnRpdHkgPSBlbnRpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBjYW1lcmEgc3BlY2lmaWVkIGFuZCBlbnRpdHkgZG9lc24ndCBoYXZlIFZpcnR1YWxDYW1lcmEsIHJldmVydCB0byBub3JtYWxcbiAgICAgICAgaWYgKE1haW5DYW1lcmEuaGFzKGVuZ2luZS5DYW1lcmFFbnRpdHkpKSB7XG4gICAgICAgICAgTWFpbkNhbWVyYS5kZWxldGVGcm9tKGVuZ2luZS5DYW1lcmFFbnRpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IGlmIHRhcmdldCBpcyAwIChSb290RW50aXR5KSwgdHJlYXQgaXQgYXMgXCJyZW1vdmUgY2FtZXJhXCJcbiAgICAvLyBUaGlzIGFsbG93cyB1c2luZyAwIGFzIGEgc2VudGluZWwgdmFsdWUgaW4gY29tcG9zaXRlLmpzb25cbiAgICBpZiAoY2FtZXJhRW50aXR5ID09PSBlbmdpbmUuUm9vdEVudGl0eSkge1xuICAgICAgaWYgKE1haW5DYW1lcmEuaGFzKGVuZ2luZS5DYW1lcmFFbnRpdHkpKSB7XG4gICAgICAgIE1haW5DYW1lcmEuZGVsZXRlRnJvbShlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhlIHNlbGVjdGVkIGVudGl0eSBoYXMgVmlydHVhbENhbWVyYSBiZWZvcmUgYXBwbHlpbmdcbiAgICBpZiAoIVZpcnR1YWxDYW1lcmEuaGFzKGNhbWVyYUVudGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBNYWluQ2FtZXJhLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuQ2FtZXJhRW50aXR5LCB7XG4gICAgICB2aXJ0dWFsQ2FtZXJhRW50aXR5OiBjYW1lcmFFbnRpdHksXG4gICAgfSk7XG4gIH1cblxuICAvLyBDSEFOR0VfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VUZXh0KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1RFWFQ+KSB7XG4gICAgY29uc3QgdGV4dCA9IFRleHRTaGFwZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG5cbiAgICB0ZXh0LnRleHQgPSBwYXlsb2FkLnRleHQ7XG4gICAgaWYgKHBheWxvYWQuZm9udFNpemUgIT09IHVuZGVmaW5lZCkgdGV4dC5mb250U2l6ZSA9IHBheWxvYWQuZm9udFNpemU7XG4gICAgaWYgKHBheWxvYWQuY29sb3IpIHRleHQudGV4dENvbG9yID0gcGF5bG9hZC5jb2xvcjtcbiAgfVxuXG4gIC8vIEZSRUVaRV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRnJlZXplUGxheWVyKCkge1xuICAgIElucHV0TW9kaWZpZXIuY3JlYXRlT3JSZXBsYWNlKGVuZ2luZS5QbGF5ZXJFbnRpdHksIHtcbiAgICAgIG1vZGU6IElucHV0TW9kaWZpZXIuTW9kZS5TdGFuZGFyZCh7XG4gICAgICAgIGRpc2FibGVBbGw6IHRydWUsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVORlJFRVpFX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVVbmZyZWV6ZVBsYXllcigpIHtcbiAgICBJbnB1dE1vZGlmaWVyLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuUGxheWVyRW50aXR5LCB7XG4gICAgICBtb2RlOiBJbnB1dE1vZGlmaWVyLk1vZGUuU3RhbmRhcmQoe1xuICAgICAgICBkaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ0hBTkdFX0NPTExJU0lPTlNcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlQ29sbGlzaW9ucyhcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX0NPTExJU0lPTlM+LFxuICApIHtcbiAgICBjb25zdCB7IHZpc2libGVDb2xsaXNpb25zLCBpbnZpc2libGVDb2xsaXNpb25zIH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGdsdGYgPSBHbHRmQ29udGFpbmVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBtZXNoQ29sbGlkZXIgPSBNZXNoQ29sbGlkZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKGdsdGYpIHtcbiAgICAgIGlmICh2aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsdGYudmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSB2aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICAgIGlmIChpbnZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gaW52aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWVzaENvbGxpZGVyKSB7XG4gICAgICAvLyBGb3IgTWVzaENvbGxpZGVyLCB1c2UgdmlzaWJsZUNvbGxpc2lvbnMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBpbnZpc2libGVDb2xsaXNpb25zXG4gICAgICBpZiAodmlzaWJsZUNvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZXNoQ29sbGlkZXIuY29sbGlzaW9uTWFzayA9IHZpc2libGVDb2xsaXNpb25zO1xuICAgICAgfSBlbHNlIGlmIChpbnZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSBpbnZpc2libGVDb2xsaXNpb25zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENIQU5HRV9TS1lCT1hcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlU2t5Ym94KHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfU0tZQk9YPikge1xuICAgIGNvbnN0IHsgdGltZSwgZGlyZWN0aW9uIH0gPSBwYXlsb2FkO1xuXG4gICAgLy8gRW5zdXJlIHRpbWUgaXMgYSB2YWxpZCBudW1iZXIgKHNlY29uZHMgc2luY2UgbWlkbmlnaHQpXG4gICAgaWYgKHR5cGVvZiB0aW1lICE9PSAnbnVtYmVyJyB8fCBpc05hTih0aW1lKSB8fCB0aW1lIDwgMCB8fCB0aW1lID4gODY0MDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgc2t5Ym94IHRpbWUgdmFsdWU6JywgdGltZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgU2t5Ym94VGltZS5jcmVhdGVPclJlcGxhY2UoZW5naW5lLlJvb3RFbnRpdHksIHtcbiAgICAgIGZpeGVkVGltZTogdGltZSxcbiAgICAgIHRyYW5zaXRpb25Nb2RlOiBkaXJlY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBSRVNFVF9TS1lCT1hcbiAgZnVuY3Rpb24gaGFuZGxlUmVzZXRTa3lib3goKSB7XG4gICAgaWYgKFNreWJveFRpbWUuaGFzKGVuZ2luZS5Sb290RW50aXR5KSkge1xuICAgICAgU2t5Ym94VGltZS5kZWxldGVGcm9tKGVuZ2luZS5Sb290RW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FOSU1BVElPTlxuICBmdW5jdGlvbiBpbml0UGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmICghQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgc3RhdGVzOiBbXSxcbiAgICAgIH0pO1xuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVBbmltYXRpb25XZWlnaHQocmF3V2VpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyYXdXZWlnaHQgPCAwIHx8IHJhd1dlaWdodCA+IDEpIHJldHVybiAxO1xuICAgIHJldHVybiByYXdXZWlnaHQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QW5pbWF0aW9uKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KSB7XG4gICAgY29uc3QgeyBhbmltYXRpb24sIGxvb3AsIHNob3VsZFJlc2V0IH0gPSBwYXlsb2FkO1xuXG4gICAgY29uc3QgYW5pbWF0b3IgPSBBbmltYXRvci5nZXRNdXRhYmxlKGVudGl0eSk7XG4gICAgaWYgKCFhbmltYXRvci5zdGF0ZXMuc29tZSgoJDogeyBjbGlwOiBzdHJpbmcgfSkgPT4gJC5jbGlwID09PSBhbmltYXRpb24pKSB7XG4gICAgICBhbmltYXRvci5zdGF0ZXMgPSBbXG4gICAgICAgIC4uLmFuaW1hdG9yLnN0YXRlcyxcbiAgICAgICAge1xuICAgICAgICAgIGNsaXA6IGFuaW1hdGlvbixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGlwID0gQW5pbWF0b3IuZ2V0Q2xpcChlbnRpdHksIGFuaW1hdGlvbik7XG4gICAgICBjbGlwLnBsYXlpbmcgPSB0cnVlO1xuICAgICAgY2xpcC5sb29wID0gbG9vcCA/PyBmYWxzZTtcbiAgICAgIGNsaXAud2VpZ2h0ID0gbm9ybWFsaXplQW5pbWF0aW9uV2VpZ2h0KGNsaXAud2VpZ2h0ID8/IDEpO1xuICAgICAgaWYgKHNob3VsZFJlc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xpcC5zaG91bGRSZXNldCA9IHNob3VsZFJlc2V0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYXlpbmcgYW5pbWF0aW9uJywgZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9BTklNQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSwgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4pIHtcbiAgICBpZiAoQW5pbWF0b3IuaGFzKGVudGl0eSkpIHtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NUQVRFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFN0YXRlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPikge1xuICAgIGNvbnN0IHN0YXRlcyA9IFN0YXRlcy5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG5cbiAgICBpZiAoc3RhdGVzKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoc3RhdGVzKTtcbiAgICAgIGxldCBuZXh0U3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHBheWxvYWQuc3RhdGU7XG4gICAgICBuZXh0U3RhdGUgPSBpc1ZhbGlkU3RhdGUoc3RhdGVzLCBuZXh0U3RhdGUpID8gbmV4dFN0YXRlIDogZGVmYXVsdFZhbHVlO1xuICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHN0YXRlcy5jdXJyZW50VmFsdWUgPz8gZGVmYXVsdFZhbHVlID8/IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlcy5wcmV2aW91c1ZhbHVlID0gcHJldmlvdXNWYWx1ZTtcbiAgICAgIHN0YXRlcy5jdXJyZW50VmFsdWUgPSBuZXh0U3RhdGU7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fU1RBVEVfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBTVEFSVF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFR3ZWVuKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KSB7XG4gICAgaWYgKHBheWxvYWQpIHtcbiAgICAgIC8vIEdldCB0aGUgaW5pdGlhbCB0d2VlbiBpZiBleGlzdHMgdG8gcmV2ZXJ0IHRoZSBvYmplY3QgbW92ZW1lbnQgdG8gdGhhdCBzZXF1ZW5jZSB3aGVuIGV4ZWN1dGluZyBhIHR3ZWVuIGZyb20gYWN0aW9uc1xuICAgICAgY29uc3QgaW5pdGlhbFR3ZWVuID0gVHdlZW5Db21wb25lbnQuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgICAgbGV0IHR3ZWVuO1xuXG4gICAgICBzd2l0Y2ggKHBheWxvYWQudHlwZSkge1xuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5NT1ZFX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZU1vdmVJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuUk9UQVRFX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZVJvdGF0ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5TQ0FMRV9JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVTY2FsZUl0ZW0oZW50aXR5LCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5LRUVQX1JPVEFUSU5HX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZUtlZXBSb3RhdGluZ0l0ZW0oZW50aXR5LCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR3ZWVuIHR5cGU6ICR7cGF5bG9hZC50eXBlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldmVydFR3ZWVuKGVudGl0eSwgaW5pdGlhbFR3ZWVuLCB0d2Vlbik7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdGFydCB0byB0aGUgaW5pdGlhbCBtb3ZlbWVudCBzZXF1ZW5jZSB3aGVuIGV4ZWN1dGluZyBhbiBhZGl0aW9uYWwgdHdlZW5cbiAgZnVuY3Rpb24gcmV2ZXJ0VHdlZW4oZW50aXR5OiBFbnRpdHksIGluaXRpYWxUd2VlbjogUEJUd2VlbiB8IG51bGwsIHR3ZWVuOiBQQlR3ZWVuKSB7XG4gICAgY29uc3QgdHdlZW5TZXF1ZW5jZSA9IFR3ZWVuU2VxdWVuY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGxldCBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAuLi50d2VlbixcbiAgICB9O1xuXG4gICAgaWYgKCFpbml0aWFsVHdlZW4gfHwgIXR3ZWVuU2VxdWVuY2UgfHwgIXR3ZWVuU2VxdWVuY2UubG9vcCkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChpbml0aWFsVHdlZW4ubW9kZT8uJGNhc2UpIHtcbiAgICAgIGNhc2UgJ21vdmUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgICAgIHN0YXJ0OiAodHdlZW4ubW9kZSBhcyB7ICRjYXNlOiAnbW92ZSc7IG1vdmU6IE1vdmUgfSkubW92ZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLm1vdmUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncm90YXRlJzoge1xuICAgICAgICBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAgICAgLi4uX3JldmVydFR3ZWVuLFxuICAgICAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuUm90YXRlKHtcbiAgICAgICAgICAgIHN0YXJ0OiAodHdlZW4ubW9kZSBhcyB7ICRjYXNlOiAncm90YXRlJzsgcm90YXRlOiBSb3RhdGUgfSkucm90YXRlLmVuZCxcbiAgICAgICAgICAgIGVuZDogaW5pdGlhbFR3ZWVuLm1vZGUucm90YXRlLnN0YXJ0LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3NjYWxlJzoge1xuICAgICAgICBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAgICAgLi4uX3JldmVydFR3ZWVuLFxuICAgICAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuU2NhbGUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdzY2FsZSc7IHNjYWxlOiBTY2FsZSB9KS5zY2FsZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLnNjYWxlLnN0YXJ0LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR3ZWVuIG1vZGU6ICR7aW5pdGlhbFR3ZWVuLm1vZGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGluaXRpYWwgdHdlZW4gaXMgbm90IHBsYXlpbmcgYnV0IHRoZSBsb29wIHByb3BlcnR5IGlzIGFjdGl2ZSwgc3RhcnQgaXRcbiAgICBpbml0aWFsVHdlZW4ucGxheWluZyA9IHRydWU7XG4gICAgdHdlZW5TZXF1ZW5jZS5zZXF1ZW5jZSA9IFtfcmV2ZXJ0VHdlZW4sIGluaXRpYWxUd2Vlbl07XG4gIH1cblxuICAvLyBNT1ZFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlTW92ZUl0ZW0oZW50aXR5OiBFbnRpdHksIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpO1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW47XG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueik7XG4gICAgY29uc3QgZW5kUG9zaXRpb24gPSByZWxhdGl2ZSA/IFZlY3RvcjMuYWRkKHRyYW5zZm9ybS5wb3NpdGlvbiwgZW5kKSA6IGVuZDtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLk1vdmUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnBvc2l0aW9uLFxuICAgICAgICBlbmQ6IGVuZFBvc2l0aW9uLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJPVEFURV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUl0ZW0oZW50aXR5OiBFbnRpdHksIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpO1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW47XG4gICAgY29uc3QgZW5kID0gUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopO1xuICAgIGNvbnN0IGVuZFJvdGF0aW9uID0gcmVsYXRpdmUgPyBRdWF0ZXJuaW9uLm11bHRpcGx5KHRyYW5zZm9ybS5yb3RhdGlvbiwgZW5kKSA6IGVuZDtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZSh7XG4gICAgICAgIHN0YXJ0OiB0cmFuc2Zvcm0ucm90YXRpb24sXG4gICAgICAgIGVuZDogZW5kUm90YXRpb24sXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsIC8vIGZyb20gc2VjcyB0byBtc1xuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU0NBTEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVTY2FsZUl0ZW0oZW50aXR5OiBFbnRpdHksIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpO1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW47XG4gICAgY29uc3QgZW5kID0gVmVjdG9yMy5jcmVhdGUodHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueik7XG4gICAgY29uc3QgZW5kU2NhbGUgPSByZWxhdGl2ZSA/IFZlY3RvcjMuYWRkKHRyYW5zZm9ybS5zY2FsZSwgZW5kKSA6IGVuZDtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlNjYWxlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgICAgZW5kOiBlbmRTY2FsZSxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBLRUVQX1JPVEFUSU5HX0lURU0gKGNvbnRpbnVvdXMgcm90YXRpb24pXG4gIGZ1bmN0aW9uIGhhbmRsZUtlZXBSb3RhdGluZ0l0ZW0oZW50aXR5OiBFbnRpdHksIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KSB7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGRpciA9IHR3ZWVuLmRpcmVjdGlvbiA/PyB7IHg6IDAsIHk6IDEsIHo6IDAgfTtcbiAgICBjb25zdCBzcGVlZCA9IHR3ZWVuLnNwZWVkID8/IDE7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGVDb250aW51b3VzKHtcbiAgICAgICAgZGlyZWN0aW9uOiBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoZGlyLngsIGRpci55LCBkaXIueiksXG4gICAgICAgIHNwZWVkLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogKGR1cmF0aW9uID8/IDApICogMTAwMCxcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNUT1BfVFdFRU5cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFR3ZWVuKGVudGl0eTogRW50aXR5KSB7XG4gICAgaWYgKFR3ZWVuQ29tcG9uZW50LmhhcyhlbnRpdHkpKSB7XG4gICAgICBUd2VlbkNvbXBvbmVudC5kZWxldGVGcm9tKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU0xJREVfVEVYVFVSRVxuICBmdW5jdGlvbiBoYW5kbGVTbGlkZVRleHR1cmUoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TTElERV9URVhUVVJFPikge1xuICAgIGNvbnN0IGRpciA9IHBheWxvYWQuZGlyZWN0aW9uO1xuICAgIGNvbnN0IHNwZWVkID0gcGF5bG9hZC5zcGVlZDtcbiAgICBjb25zdCBtb3ZlbWVudFR5cGUgPSBwYXlsb2FkLm1vdmVtZW50VHlwZSBhcyB1bmtub3duIGFzIFNka1RleHR1cmVNb3ZlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZHVyYXRpb24gPSBwYXlsb2FkLmR1cmF0aW9uID8/IDA7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5UZXh0dXJlTW92ZUNvbnRpbnVvdXMoe1xuICAgICAgICBkaXJlY3Rpb246IHsgeDogZGlyLngsIHk6IGRpci55IH0sXG4gICAgICAgIHNwZWVkLFxuICAgICAgICBtb3ZlbWVudFR5cGUsXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsXG4gICAgICBlYXNpbmdGdW5jdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNFVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZVNldENvdW50ZXIoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfQ09VTlRFUj4pIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSA9IHBheWxvYWQuY291bnRlcjtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSU5DUkVNRU5UX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlSW5jcmVtZW50Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgYW1vdW50ID0gcGF5bG9hZC5hbW91bnQgPz8gMTtcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlICs9IGFtb3VudDtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSk7XG4gICAgfVxuICB9XG5cbiAgLy8gREVDUkVBU0VfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVEZWNyZWFzZUNvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGFtb3VudCA9IHBheWxvYWQuYW1vdW50ID8/IDE7XG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSAtPSBhbW91bnQ7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlUGxheVNvdW5kKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4pIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCwgdm9sdW1lLCBnbG9iYWwgfSA9IHBheWxvYWQ7XG4gICAgaWYgKEF1ZGlvU291cmNlLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdWRpb1NvdXJjZS5wbGF5U291bmQoZW50aXR5LCBzcmMpO1xuICAgICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGVudGl0eSk7XG4gICAgICBhdWRpb1NvdXJjZS5sb29wID0gbG9vcDtcbiAgICAgIGF1ZGlvU291cmNlLnZvbHVtZSA9IHZvbHVtZSA/PyAxO1xuICAgICAgYXVkaW9Tb3VyY2UuZ2xvYmFsID0gZ2xvYmFsID8/IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBBdWRpb1NvdXJjZS5jcmVhdGUoZW50aXR5LCB7XG4gICAgICAgIGF1ZGlvQ2xpcFVybDogc3JjLFxuICAgICAgICBsb29wLFxuICAgICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgICAgICBnbG9iYWwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BTb3VuZChlbnRpdHk6IEVudGl0eSwgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPikge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9WSVNJQklMSVRZXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFZpc2liaWxpdHkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWT4pIHtcbiAgICBjb25zdCB7IHZpc2libGUsIGNvbGxpZGVyIH0gPSBwYXlsb2FkO1xuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyB2aXNpYmxlIH0pO1xuICAgIGNvbnN0IGdsdGYgPSBHbHRmQ29udGFpbmVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBtZXNoQ29sbGlkZXIgPSBNZXNoQ29sbGlkZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKGNvbGxpZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChnbHRmKSB7XG4gICAgICAgIGdsdGYuaW52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IGNvbGxpZGVyO1xuICAgICAgICBpZiAoY29sbGlkZXIgPT09IDApIHtcbiAgICAgICAgICBnbHRmLnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtZXNoQ29sbGlkZXIpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSBjb2xsaWRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBVFRBQ0hfVE9fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUF0dGFjaFRvUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmNob3JQb2ludElkIH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IHVzZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKT8udXNlcklkO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBBdmF0YXJBdHRhY2guY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyBhbmNob3JQb2ludElkOiBhbmNob3JQb2ludElkLCBhdmF0YXJJZDogdXNlciB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBERVRBQ0hfRlJPTV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4sXG4gICkge1xuICAgIGlmIChBdmF0YXJBdHRhY2guaGFzKGVudGl0eSkpIHtcbiAgICAgIEF2YXRhckF0dGFjaC5kZWxldGVGcm9tKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVEVMRVBPUlQgUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVRlbGVwb3J0UGxheWVyKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuVEVMRVBPUlRfUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgeyBtb2RlLCB4LCB5LCByZWFsbSB9ID0gcGF5bG9hZDtcblxuICAgIGlmIChtb2RlID09PSBUZWxlcG9ydE1vZGUuVE9fV09STEQpIHtcbiAgICAgIGlmIChyZWFsbSkge1xuICAgICAgICB2b2lkIGNoYW5nZVJlYWxtKHsgcmVhbG0gfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPX0NPT1JESU5BVEVTIG1vZGVcbiAgICAgIGlmICh4ICE9PSB1bmRlZmluZWQgJiYgeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZvaWQgdGVsZXBvcnRUbyh7XG4gICAgICAgICAgd29ybGRDb29yZGluYXRlczogeyB4LCB5IH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkUgUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVQbGF5ZXIoX2VudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVI+KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIG5ld1JlbGF0aXZlUG9zaXRpb246IHBheWxvYWQucG9zaXRpb24sXG4gICAgICBjYW1lcmFUYXJnZXQ6IHBheWxvYWQuY2FtZXJhVGFyZ2V0LFxuICAgIH07XG4gICAgdm9pZCBtb3ZlUGxheWVyVG8ob3B0aW9ucyk7XG4gIH1cblxuICAvLyBQTEFZIERFRkFVTFQgRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheURlZmF1bHRFbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgZW1vdGUgfSA9IHBheWxvYWQ7XG4gICAgdm9pZCB0cmlnZ2VyRW1vdGUoeyBwcmVkZWZpbmVkRW1vdGU6IGVtb3RlIH0pO1xuICB9XG5cbiAgLy8gUExBWSBDVVNUT00gRU1PVEVcbiAgZnVuY3Rpb24gaGFuZGxlUGxheUN1c3RvbUVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU+LFxuICApIHtcbiAgICBjb25zdCB7IHNyYywgbG9vcCB9ID0gcGF5bG9hZDtcbiAgICB2b2lkIHRyaWdnZXJTY2VuZUVtb3RlKHsgc3JjLCBsb29wIH0pO1xuICB9XG5cbiAgLy8gT1BFTiBMSU5LXG4gIGZ1bmN0aW9uIGhhbmRsZU9wZW5MaW5rKF9lbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4pIHtcbiAgICBjb25zdCB7IHVybCB9ID0gcGF5bG9hZDtcbiAgICB2b2lkIG9wZW5FeHRlcm5hbFVybCh7IHVybCB9KTtcbiAgfVxuXG4gIC8vIFBMQVlfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlUGxheVZpZGVvKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KSB7XG4gICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCF2aWRlb1NvdXJjZSAmJiBwYXlsb2FkLnNyYykge1xuICAgICAgVmlkZW9QbGF5ZXIuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgICBzcmM6IHBheWxvYWQuc3JjLFxuICAgICAgICB2b2x1bWU6IHBheWxvYWQudm9sdW1lID8/IDEsXG4gICAgICAgIGxvb3A6IHBheWxvYWQubG9vcCA/PyBmYWxzZSxcbiAgICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbml0IHZpZGVvIHBsYXllciBtYXRlcmlhbCB3aGVuIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIGEgVmlkZW9QbGF5ZXIgY29tcG9uZW50IGRlZmluZWRcbiAgICAgIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsKGVudGl0eSwgeyBNYXRlcmlhbCB9LCBNYXRlcmlhbC5nZXRPck51bGwoZW50aXR5KSk7XG4gICAgfVxuICAgIGlmICh2aWRlb1NvdXJjZSkge1xuICAgICAgaWYgKHZpZGVvU291cmNlPy5zcmMgIT09IHBheWxvYWQuc3JjKSB7XG4gICAgICAgIHZpZGVvU291cmNlLnNyYyA9IHBheWxvYWQuc3JjID8/ICcnO1xuICAgICAgfVxuICAgICAgdmlkZW9Tb3VyY2Uudm9sdW1lID0gcGF5bG9hZC52b2x1bWUgPz8gdmlkZW9Tb3VyY2Uudm9sdW1lO1xuICAgICAgdmlkZW9Tb3VyY2UubG9vcCA9IHBheWxvYWQubG9vcCA/PyB2aWRlb1NvdXJjZS5sb29wO1xuICAgICAgdmlkZW9Tb3VyY2UucGxheWluZyA9IHRydWU7XG4gICAgfVxuICB9XG4gIC8vIFNUT1BfVklERU9cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFZpZGVvKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPikge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICh2aWRlb1NvdXJjZSkge1xuICAgICAgdmlkZW9Tb3VyY2UucGxheWluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfQVVESU9fU1RSRUFNXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCB7IHVybCwgdm9sdW1lIH0gPSBwYXlsb2FkO1xuICAgIEF1ZGlvU3RyZWFtLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIHVybCxcbiAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RPUF9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU3RyZWFtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICAgIGF1ZGlvU291cmNlLnBsYXlpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBTSE9XX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlU2hvd1RleHQoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TSE9XX1RFWFQ+KSB7XG4gICAgY29uc3QgeyB0ZXh0LCBoaWRlQWZ0ZXJTZWNvbmRzLCBmb250LCBmb250U2l6ZSwgdGV4dEFsaWduIH0gPSBwYXlsb2FkO1xuICAgIC8vIENyZWF0ZSBhIG5ldyBlbnRpdHkgZm9yIHRoZSB0ZXh0XG4gICAgY29uc3QgdGV4dEVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKTtcbiAgICAvLyBTZXQgdGhlIHRleHQgZW50aXR5IGFzIGEgY2hpbGQgb2YgdGhlIGVudGl0eSB0aGF0IGNhbGxlZCB0aGUgYWN0aW9uXG4gICAgdGV4dEVudGl0aWVzLnNldChlbnRpdHksIHRleHRFbnRpdHkpO1xuICAgIGNvbnN0IHVpVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIHRleHRFbnRpdHkpO1xuICAgIGlmICh1aVRyYW5zZm9ybUNvbXBvbmVudCkge1xuICAgICAgdWlUcmFuc2Zvcm1Db21wb25lbnQucGFyZW50ID0gZW50aXR5O1xuICAgICAgLy8gU2V0IHRoZSBwb2ludGVyIGZpbHRlciB0byBub25lLCBhbGxvd2luZyBwbGF5ZXJzIHRvIGNvbnRpbnVlIGludGVyYWN0aW5nIHdpdGggdGhlIHNjZW5lXG4gICAgICB1aVRyYW5zZm9ybUNvbXBvbmVudC5wb2ludGVyRmlsdGVyID0gUG9pbnRlckZpbHRlck1vZGUuUEZNX05PTkU7XG4gICAgICBVaVRleHQuY3JlYXRlT3JSZXBsYWNlKHRleHRFbnRpdHksIHtcbiAgICAgICAgdmFsdWU6IHRleHQsXG4gICAgICAgIGZvbnQ6IGZvbnQgYXMgdW5rbm93biBhcyBGb250LFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24gYXMgdW5rbm93biBhcyBUZXh0QWxpZ25Nb2RlLFxuICAgICAgfSk7XG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfVEVYVCwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZVRleHQoZW50aXR5LCB7fSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVIaWRlVGV4dChlbnRpdHk6IEVudGl0eSwgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX1RFWFQ+KSB7XG4gICAgY29uc3QgdGV4dEVudGl0eSA9IHRleHRFbnRpdGllcy5nZXQoZW50aXR5KTtcbiAgICBpZiAodGV4dEVudGl0eSkge1xuICAgICAgLy8gRGVsZXRlIHRleHQgY29tcG9uZW50XG4gICAgICBVaVRleHQuZGVsZXRlRnJvbSh0ZXh0RW50aXR5KTtcbiAgICAgIC8vIERlbGV0ZSB0cmFuc2Zvcm0gY29tcG9uZW50XG4gICAgICBVaVRyYW5zZm9ybS5kZWxldGVGcm9tKHRleHRFbnRpdHkpO1xuICAgICAgLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcbiAgICAgIHN0b3BUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQpO1xuICAgICAgLy8gRGVsZXRlIHRleHQgZW50aXR5IGZyb20gdGhlIG1hcFxuICAgICAgdGV4dEVudGl0aWVzLmRlbGV0ZShlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5OiBFbnRpdHksIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBBY3Rpb25zLmdldE9yTnVsbChlbnRpdHkpO1xuICAgIHJldHVybiBhY3Rpb25zPy52YWx1ZS5maW5kKCgkOiBBY3Rpb24pID0+ICQubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvLyBTVEFSVF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdGFydERlbGF5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfREVMQVk+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCB0aW1lb3V0IH0gPSBwYXlsb2FkO1xuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIGFjdGlvbk5hbWUsIHRpbWVvdXQsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9ERUxBWVxuICBmdW5jdGlvbiBoYW5kbGVTdG9wRGVsYXkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPikge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkO1xuICAgIHN0b3BUaW1lb3V0KGVudGl0eSwgYWN0aW9uKTtcbiAgfVxuXG4gIC8vIFNUQVJUX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRMb29wKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfTE9PUD4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMsIGludGVydmFsIH0gPSBwYXlsb2FkO1xuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHN0YXJ0SW50ZXJ2YWwoZW50aXR5LCBhY3Rpb25OYW1lLCBpbnRlcnZhbCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpO1xuICAgICAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0xPT1BcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcExvb3AoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0xPT1A+KSB7XG4gICAgY29uc3QgeyBhY3Rpb24gfSA9IHBheWxvYWQ7XG4gICAgc3RvcEludGVydmFsKGVudGl0eSwgYWN0aW9uKTtcbiAgfVxuXG4gIC8vIENMT05FX0VOVElUWVxuICBmdW5jdGlvbiBoYW5kbGVDbG9uZUVudGl0eShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMT05FX0VOVElUWT4pIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSBwYXlsb2FkO1xuXG4gICAgLy8gY2xvbmUgZW50aXR5XG4gICAgY29uc3QgeyBjbG9uZWQsIGVudGl0aWVzIH0gPSBjbG9uZShlbnRpdHksIGVuZ2luZSwgVHJhbnNmb3JtLCBUcmlnZ2Vycywgc2RrSGVscGVycyk7XG4gICAgZm9yIChjb25zdCBjbG9uZWQgb2YgZW50aXRpZXMudmFsdWVzKCkpIHtcbiAgICAgIC8vIGluaXRpYWxpemVcbiAgICAgIGluaXRBY3Rpb25zKGNsb25lZCk7XG4gICAgICBpbml0VHJpZ2dlcnMoY2xvbmVkKTtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoY2xvbmVkKTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTE9ORSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE9yQ3JlYXRlTXV0YWJsZShjbG9uZWQpO1xuICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLy8gUkVNT1ZFX0VOVElUWVxuICBmdW5jdGlvbiBoYW5kbGVSZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWT4pIHtcbiAgICAvLyBSZW1vdmUgYWxsIHRpbWVycyBiZWZvcmUgcmVtb3ZlIHRoZSBlbnRpdHlcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KTtcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSk7XG5cbiAgICBjb25zdCB0cmVlID0gZ2V0Q29tcG9uZW50RW50aXR5VHJlZShlbmdpbmUsIGVudGl0eSwgVHJhbnNmb3JtKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eVRvUmVtb3ZlIG9mIHRyZWUpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoZW50aXR5VG9SZW1vdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFVpU3RhY2soYWxpZ246IFNjcmVlbkFsaWduTW9kZSkge1xuICAgIGNvbnN0IGtleSA9IGAke2FsaWduLmFsaWduSXRlbXN9LCR7YWxpZ24uanVzdGlmeUNvbnRlbnR9YDtcblxuICAgIGlmICghdWlTdGFja3MuaGFzKGtleSkpIHtcbiAgICAgIHVpU3RhY2tzLnNldChrZXksIGVuZ2luZS5hZGRFbnRpdHkoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVpU3RhY2tzLmdldChrZXkpITtcbiAgfVxuXG4gIC8vIFNIT1dfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlU2hvd0ltYWdlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0hPV19JTUFHRT4pIHtcbiAgICBjb25zdCB7IHNyYywgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udFNpemUsIGFsaWduLCBoZWlnaHQsIHdpZHRoIH0gPSBwYXlsb2FkO1xuXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIHRyYW5zZm9ybSBmb3IgdGhlIHJvb3QgZW50aXR5XG4gICAgZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIGVuZ2luZS5Sb290RW50aXR5KTtcblxuICAgIC8vIEdldCBhIFVJIFN0YWNrIGVudGl0eVxuICAgIC8vIERlZmF1bHQgdG8gY2VudGVyIGFsaWdubWVudCBpZiBhbGlnbiBpcyBub3QgcHJvdmlkZWRcbiAgICBjb25zdCBzY3JlZW5BbGlnbiA9IG1hcEFsaWduVG9TY3JlZW5BbGlnbihhbGlnbiA/PyBBbGlnbk1vZGUuVEFNX01JRERMRV9DRU5URVIpO1xuICAgIGNvbnN0IHVpU3RhY2sgPSBnZXRVaVN0YWNrKHNjcmVlbkFsaWduKTtcblxuICAgIC8vIFRPRE86IEZpeCBpdGVtcyB3cmFwcGluZ1xuICAgIC8vIEdldC9DcmVhdGUgYSBVSSBUcmFuc2Zvcm0gZm9yIHRoZSBVSSBzdGFja1xuICAgIGNvbnN0IHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShVaVRyYW5zZm9ybSwgdWlTdGFjayk7XG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5hbGlnbkl0ZW1zID0gc2NyZWVuQWxpZ24uYWxpZ25JdGVtcztcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50Lmp1c3RpZnlDb250ZW50ID0gc2NyZWVuQWxpZ24uanVzdGlmeUNvbnRlbnQ7XG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5wb3NpdGlvblR5cGUgPSBZR1Bvc2l0aW9uVHlwZS5ZR1BUX0FCU09MVVRFO1xuXG4gICAgLy8gQ3JlYXRlIGEgVUkgZW50aXR5IGFuZCBhIFRyYW5zZm9ybSBjb21wb25lbnQgZm9yIHRoZSBpbWFnZVxuICAgIGNvbnN0IGltYWdlRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpO1xuICAgIGNvbnN0IGltYWdlVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oXG4gICAgICBVaVRyYW5zZm9ybSxcbiAgICAgIGltYWdlRW50aXR5LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBZR1VuaXQuWUdVX1BPSU5ULFxuICAgICk7XG4gICAgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQucGFyZW50ID0gdWlTdGFjaztcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wb2ludGVyRmlsdGVyID0gUG9pbnRlckZpbHRlck1vZGUuUEZNX0JMT0NLO1xuXG4gICAgLy8gQ3JlYXRlIEJhY2tncm91bmQgQ29tcG9uZW50XG4gICAgZ2V0VUlCYWNrZ3JvdW5kKFVpQmFja2dyb3VuZCwgaW1hZ2VFbnRpdHksIHNyYyk7XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgLy8gQ3JlYXRlIFRleHQgQ29tcG9uZW50XG4gICAgICAvLyBUT0RPOiBGaXggdGV4dCB3cmFwcGluZyBhbmQgc2Nyb2xsaW5nXG4gICAgICBnZXRVSVRleHQoVWlUZXh0LCBpbWFnZUVudGl0eSwgdGV4dCwgZm9udFNpemUsIHdpZHRoKTtcbiAgICB9XG5cbiAgICBwb2ludGVyRXZlbnRzU3lzdGVtLm9uUG9pbnRlckRvd24oXG4gICAgICB7XG4gICAgICAgIGVudGl0eTogaW1hZ2VFbnRpdHksXG4gICAgICAgIG9wdHM6IHtcbiAgICAgICAgICBidXR0b246IElucHV0QWN0aW9uLklBX1BPSU5URVIsXG4gICAgICAgICAgaG92ZXJUZXh0OiAnQ2xpY2snLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5zZXQoZW50aXR5LCBpbWFnZUVudGl0eSk7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTElDS19JTUFHRSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAoaGlkZUFmdGVyU2Vjb25kcykge1xuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX0lNQUdFLCBoaWRlQWZ0ZXJTZWNvbmRzLCAoKSA9PlxuICAgICAgICBoYW5kbGVIaWRlSW1hZ2UoZW50aXR5LCB7IGltYWdlRW50aXR5OiBpbWFnZUVudGl0eSB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9JTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVIaWRlSW1hZ2UoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPikge1xuICAgIGNvbnN0IHsgaW1hZ2VFbnRpdHkgfSA9IHBheWxvYWQ7XG5cbiAgICBpZiAoaW1hZ2VFbnRpdHkpIHtcbiAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoaW1hZ2VFbnRpdHkgYXMgRW50aXR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xpY2tlZEltYWdlID0gbGFzdFVpRW50aXR5Q2xpY2tlZC5nZXQoZW50aXR5KTtcbiAgICAgIGlmIChjbGlja2VkSW1hZ2UpIHtcbiAgICAgICAgZW5naW5lLnJlbW92ZUVudGl0eShjbGlja2VkSW1hZ2UpO1xuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLmRlbGV0ZShlbnRpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERBTUFHRVxuICBmdW5jdGlvbiBoYW5kbGVEYW1hZ2UoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5EQU1BR0U+KSB7XG4gICAgY29uc3QgeyByYWRpdXMsIGxheWVyLCBoaXRzIH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGVudGl0eVBvc2l0aW9uID0gQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpXG4gICAgICA/IGdldFBsYXllclBvc2l0aW9uKClcbiAgICAgIDogZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpO1xuXG4gICAgY29uc3QgZ2V0Um9vdCA9IChlbnRpdHk6IEVudGl0eSk6IEVudGl0eSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBnZXRFbnRpdHlQYXJlbnQoZW50aXR5KTtcbiAgICAgIHJldHVybiAhcGFyZW50ID8gZW50aXR5IDogZ2V0Um9vdChwYXJlbnQpO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBkYW1hZ2VUYXJnZXRzKSB7XG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IGdldFdvcmxkUG9zaXRpb24odGFyZ2V0KTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gVmVjdG9yMy5kaXN0YW5jZShlbnRpdHlQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb24pO1xuXG4gICAgICAvLyBhdm9pZCBjYXVzaW5nIGRhbWFnZSB0byB0aGUgZW50aXR5IGl0c2VsZiBvciBpdHMgY2hpbGRyZW5cbiAgICAgIGNvbnN0IGVudGl0eVRyZWUgPSBBcnJheS5mcm9tKGdldENvbXBvbmVudEVudGl0eVRyZWUoZW5naW5lLCBlbnRpdHksIFRyYW5zZm9ybSkpO1xuICAgICAgY29uc3QgaXNQYXJ0T2ZFbnRpdHlUcmVlID0gZW50aXR5VHJlZS5zb21lKCgkOiBFbnRpdHkpID0+ICQgPT09IHRhcmdldCk7XG4gICAgICBpZiAoaXNQYXJ0T2ZFbnRpdHlUcmVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgaWYgKGxheWVyID09PSBQcm94aW1pdHlMYXllci5QTEFZRVIpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gZ2V0Um9vdCh0YXJnZXQpO1xuICAgICAgICAgIGlmIChyb290ICE9PSBlbmdpbmUuUGxheWVyRW50aXR5ICYmIHJvb3QgIT09IGVuZ2luZS5DYW1lcmFFbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuTk9OX1BMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldCk7XG4gICAgICAgICAgaWYgKHJvb3QgPT09IGVuZ2luZS5QbGF5ZXJFbnRpdHkgfHwgcm9vdCA9PT0gZW5naW5lLkNhbWVyYUVudGl0eSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlzdGFuY2UgPD0gcmFkaXVzKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gaGl0cyA9PT0gdW5kZWZpbmVkID8gMSA6IE1hdGgubWF4KGhpdHMsIDEpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpO1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9EQU1BR0UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRV9QTEFZRVJfSEVSRVxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVySGVyZShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSX0hFUkU+LFxuICApIHtcbiAgICBjb25zdCBoZXJlID0gZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpO1xuICAgIGNvbnN0IHJvdGF0aW9uID0gZ2V0V29ybGRSb3RhdGlvbihlbnRpdHkpO1xuXG4gICAgLy8gV2UgV2FudCB0aGUgcGxheWVyIHRvIGxvb2sgMW0gaW4gZnJvbnQgb2YgdGhlIGVudGl0eVxuICAgIGNvbnN0IGZvcndhcmQgPSBWZWN0b3IzLkZvcndhcmQoKTtcbiAgICBjb25zdCByb3RhdGVkRGlyZWN0aW9uID0gVmVjdG9yMy5yb3RhdGUoZm9yd2FyZCwgcm90YXRpb24pO1xuICAgIGNvbnN0IG1vdmVEZWx0YSA9IFZlY3RvcjMuc2NhbGUocm90YXRlZERpcmVjdGlvbiwgMSk7XG5cbiAgICB2b2lkIG1vdmVQbGF5ZXJUbyh7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBoZXJlLFxuICAgICAgYXZhdGFyVGFyZ2V0OiBWZWN0b3IzLmFkZChoZXJlLCBtb3ZlRGVsdGEpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fUExBWUVSX1NQQVdOKTtcbiAgfVxuXG4gIC8vIFBMQVlFUl9GQUNFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheWVyRmFjZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZRVJfRkFDRV9JVEVNPixcbiAgKSB7XG4gICAgY29uc3QgaXRlbVBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbihlbnRpdHkpO1xuICAgIGNvbnN0IGN1cnJlbnRQbGF5ZXJQb3NpdGlvbiA9IGdldFBsYXllclBvc2l0aW9uKCk7XG4gICAgdm9pZCBtb3ZlUGxheWVyVG8oe1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogY3VycmVudFBsYXllclBvc2l0aW9uLFxuICAgICAgYXZhdGFyVGFyZ2V0OiBpdGVtUG9zaXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBQTEFDRV9PTl9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlUGxhY2VPblBsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIHBsYXllcikge1xuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gcGxheWVyLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJPVEFURV9BU19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlQXNQbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBwbGF5ZXIgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgcGxheWVyKSB7XG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBwbGF5ZXIucm90YXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gUExBQ0VfT05fQ0FNRVJBXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25DYW1lcmEoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBjYW1lcmEpIHtcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IGNhbWVyYS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfQ0FNRVJBXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX0NBTUVSQT4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgY2FtZXJhID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIGNhbWVyYSkge1xuICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gY2FtZXJhLnJvdGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9QT1NJVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTZXRQb3NpdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9QT1NJVElPTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlbGF0aXZlKSB7XG4gICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMuYWRkKFxuICAgICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgICAgICBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9ST1RBVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTZXRSb3RhdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9ST1RBVElPTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlbGF0aXZlKSB7XG4gICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IFF1YXRlcm5pb24ubXVsdGlwbHkoXG4gICAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgICAgIFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU0NBTEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U2NhbGUoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU0NBTEU+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0uc2NhbGUgPSBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGT0xMT1dfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUZvbGxvd1BsYXllcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkZPTExPV19QTEFZRVI+KSB7XG4gICAgY29uc3QgeyBzcGVlZCwgeCwgeSwgeiwgbWluRGlzdGFuY2UgfSA9IHBheWxvYWQ7XG4gICAgZm9sbG93TWFwLnNldChlbnRpdHksIHtcbiAgICAgIHRhcmdldDogZW5naW5lLlBsYXllckVudGl0eSxcbiAgICAgIHNwZWVkLFxuICAgICAgbWluRGlzdGFuY2UsXG4gICAgICBheGVzOiB7IHgsIHksIHogfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNUT1BfRk9MTE9XSU5HX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wRm9sbG93aW5nUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9GT0xMT1dJTkdfUExBWUVSPixcbiAgKSB7XG4gICAgZm9sbG93TWFwLmRlbGV0ZShlbnRpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmFuZG9tKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUkFORE9NPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhY3Rpb25zLmxlbmd0aCldO1xuICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKTtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVCYXRjaChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVIZWFsUGxheWVyKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+KSB7XG4gICAgY29uc3QgeyBtdWx0aXBsaWVyIH0gPSBwYXlsb2FkO1xuXG4gICAgY29uc3QgZ2V0Um9vdCA9IChlbnRpdHk6IEVudGl0eSk6IEVudGl0eSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBnZXRFbnRpdHlQYXJlbnQoZW50aXR5KTtcbiAgICAgIHJldHVybiAhcGFyZW50ID8gZW50aXR5IDogZ2V0Um9vdChwYXJlbnQpO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBoZWFsVGFyZ2V0cykge1xuICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QodGFyZ2V0KTtcbiAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5KSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgobXVsdGlwbGllciA/PyAxLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0hFQUxfUExBWUVSKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcsIGluaXQ/OiBGbGF0RmV0Y2hJbml0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2lnbmVkRmV0Y2goe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgLi4uKGluaXQgPyB7IGluaXQgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YSdcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBKU09OLnBhcnNlKHJlc3BvbnNlLmJvZHkpO1xuXG4gICAgICBpZiAoIWpzb24ub2spIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ganNvbi5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhbXBhaWduc0J5RGlzcGVuc2VyS2V5KGRpc3BlbnNlcktleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvY2FtcGFpZ25zL2tleXM/Y2FtcGFpZ25fa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc3BlbnNlcktleSl9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QodXJsKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaENhcHRjaGEoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL2NhcHRjaGFgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFRva2VuKFxuICAgIGRpc3BlbnNlcktleTogc3RyaW5nLFxuICAgIGNhcHRjaGE/OiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9LFxuICApIHtcbiAgICBjb25zdCB1cmwgPSBgJHtSRVdBUkRTX1NFUlZFUl9VUkx9L2FwaS9yZXdhcmRzYDtcbiAgICBjb25zdCByZWFsbSA9IGF3YWl0IGdldFJlYWxtKHt9KTtcbiAgICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY2FtcGFpZ25fa2V5OiBkaXNwZW5zZXJLZXksXG4gICAgICAgIGJlbmVmaWNpYXJ5OiAhcGxheWVyPy5pc0d1ZXN0ID8gcGxheWVyPy51c2VySWQgOiAnJyxcbiAgICAgICAgY2F0YWx5c3Q6IHJlYWxtLnJlYWxtSW5mbyA/IHJlYWxtLnJlYWxtSW5mby5iYXNlVXJsIDogJycsXG4gICAgICAgIC4uLihjYXB0Y2hhID8geyBjYXB0Y2hhX2lkOiBjYXB0Y2hhLmlkLCBjYXB0Y2hhX3ZhbHVlOiBjYXB0Y2hhLnZhbHVlIH0gOiB7fSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDbGFpbUFpcmRyb3AoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4pIHtcbiAgICBjb25zdCByZXdhcmRzID0gUmV3YXJkcy5nZXRPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIXJld2FyZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRlc3RNb2RlLCBjYW1wYWlnbklkLCBkaXNwZW5zZXJLZXkgfSA9IHJld2FyZHM7XG5cbiAgICBpZiAodGVzdE1vZGUpIHtcbiAgICAgIC8vIFRPRE86IFNob3cgYW4gVUkgaW5kaWNhdGluZyB0ZXN0aW5nIG1vZGVcbiAgICAgIC8vICdIYW5kbGUgQ2xhaW0gQWlyZHJvcCBpbiBUZXN0IE1vZGUgOiknXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmV0Y2hDYW1wYWlnbnNCeURpc3BlbnNlcktleShkaXNwZW5zZXJLZXkpXG4gICAgICAudGhlbihjYW1wYWlnbnMgPT4ge1xuICAgICAgICBjb25zdCBjYW1wYWlnbiA9IGNhbXBhaWducy5maW5kKChjOiBhbnkpID0+IGMuY2FtcGFpZ25faWQgPT09IGNhbXBhaWduSWQpO1xuICAgICAgICBpZiAoY2FtcGFpZ24gJiYgY2FtcGFpZ24uZW5hYmxlZCkge1xuICAgICAgICAgIGlmIChjYW1wYWlnbi5yZXF1aXJlc19jYXB0Y2hhKSB7XG4gICAgICAgICAgICBmZXRjaENhcHRjaGEoKVxuICAgICAgICAgICAgICAudGhlbihjYXB0Y2hhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FwdGNoYSkge1xuICAgICAgICAgICAgICAgICAgX3Nob3dDYXB0Y2hhUHJvbXB0KGVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbklkLFxuICAgICAgICAgICAgICAgICAgICBkaXNwZW5zZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGNhcHRjaGEsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaChfZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgICAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhcHRjaGEnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0VG9rZW4oZGlzcGVuc2VyS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnLCBlcnJvclxuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc2hvd0NhcHRjaGFQcm9tcHQoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIGRhdGE6IHsgY2FtcGFpZ25JZDogc3RyaW5nOyBkaXNwZW5zZXJLZXk6IHN0cmluZzsgY2FwdGNoYTogYW55IH0sXG4gICkge1xuICAgIHNob3dDYXB0Y2hhUHJvbXB0KFxuICAgICAgZW5naW5lLFxuICAgICAgVWlUcmFuc2Zvcm0sXG4gICAgICBVaUJhY2tncm91bmQsXG4gICAgICBVaVRleHQsXG4gICAgICBVaUlucHV0LFxuICAgICAgVWlJbnB1dFJlc3VsdCxcbiAgICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gICAgICBkYXRhLFxuICAgICAgaW5wdXRUZXh0ID0+IHtcbiAgICAgICAgLy8gUmVxdWVzdCB0b2tlbiB3aXRoIGNhcHRjaGEgdmFsaWRhdGlvblxuICAgICAgICByZXF1ZXN0VG9rZW4oZGF0YS5kaXNwZW5zZXJLZXksIHtcbiAgICAgICAgICBpZDogZGF0YS5jYXB0Y2hhLmlkLFxuICAgICAgICAgIHZhbHVlOiBpbnB1dFRleHQsXG4gICAgICAgIH0pLnRoZW4oKHRva2VuOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIC8vICdUb2tlbiByZXF1ZXN0ZWQgc3VjY2Vzc2Z1bGx5JywgeyB0b2tlbiB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNhbGxTY3JpcHRNZXRob2QoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNBTExfU0NSSVBUX01FVEhPRD4sXG4gICkge1xuICAgIGNvbnN0IHsgc2NyaXB0UGF0aCwgbWV0aG9kTmFtZSwgcGFyYW1zIH0gPSBwYXlsb2FkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhwYXJhbXMgfHwge30pO1xuICAgICAgY2FsbFNjcmlwdE1ldGhvZChlbnRpdHksIHNjcmlwdFBhdGgsIG1ldGhvZE5hbWUsIC4uLnBhcmFtVmFsdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NjcmlwdCBBY3Rpb24gRXJyb3JdIEZhaWxlZCB0byBjYWxsICR7bWV0aG9kTmFtZX0gb24gJHtzY3JpcHRQYXRofTpgLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gTE9HX1RPX0NPTlNPTEVcbiAgZnVuY3Rpb24gaGFuZGxlTG9nVG9Db25zb2xlKHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5MT0dfVE9fQ09OU09MRT4pIHtcbiAgICBjb25zb2xlLmxvZyhwYXlsb2FkLm1lc3NhZ2UpO1xuICB9XG5cbiAgLy8gREVMRVRFXG4gIGZ1bmN0aW9uIGhhbmRsZURlbGV0ZShlbnRpdHk6IEVudGl0eSkge1xuICAgIHN0b3BBbGxUaW1lb3V0cyhlbnRpdHkpO1xuICAgIHN0b3BBbGxJbnRlcnZhbHMoZW50aXR5KTtcbiAgICBlbmdpbmUucmVtb3ZlRW50aXR5V2l0aENoaWxkcmVuKGVudGl0eSk7XG4gIH1cbn1cbiJdfQ==
|
|
1205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUtYLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVFuRyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsYUFBYSxFQUNiLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFDTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsY0FBYyxFQUNkLHFC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O0lBQzFDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJRW5naW5lLFxuICBFbnRpdHksXG4gIFRleHRBbGlnbk1vZGUsXG4gIEZvbnQsXG4gIE1vdmUsXG4gIFBCVHdlZW4sXG4gIFJvdGF0ZSxcbiAgU2NhbGUsXG4gIFBvaW50ZXJFdmVudHNTeXN0ZW0sXG59IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIE1hdGVyaWFsLFxuICBBdWRpb1N0cmVhbSxcbiAgWUdVbml0LFxuICBZR1Bvc2l0aW9uVHlwZSxcbiAgUG9pbnRlckZpbHRlck1vZGUsXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG4gIGdldENvbXBvbmVudEVudGl0eVRyZWUsXG4gIFR3ZWVuLFxufSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG5pbXBvcnQgdHlwZSB7IFRleHR1cmVNb3ZlbWVudFR5cGUgYXMgU2RrVGV4dHVyZU1vdmVtZW50VHlwZSB9IGZyb20gJ0BkY2wvZWNzL2Rpc3QvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvZGVjZW50cmFsYW5kL3Nkay9jb21wb25lbnRzL3R3ZWVuLmdlbic7XG5pbXBvcnQge1xuICBtb3ZlUGxheWVyVG8sXG4gIHRyaWdnZXJFbW90ZSxcbiAgdHJpZ2dlclNjZW5lRW1vdGUsXG4gIG9wZW5FeHRlcm5hbFVybCxcbiAgdGVsZXBvcnRUbyxcbiAgY2hhbmdlUmVhbG0sXG59IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBGbGF0RmV0Y2hJbml0IH0gZnJvbSAnfnN5c3RlbS9TaWduZWRGZXRjaCc7XG5pbXBvcnQgeyBnZXRSZWFsbSB9IGZyb20gJ35zeXN0ZW0vUnVudGltZSc7XG5pbXBvcnQgeyBzaWduZWRGZXRjaCB9IGZyb20gJ35zeXN0ZW0vU2lnbmVkRmV0Y2gnO1xuaW1wb3J0IHsgZ2V0RW50aXR5UGFyZW50LCBnZXRQbGF5ZXJQb3NpdGlvbiwgZ2V0V29ybGRQb3NpdGlvbiwgZ2V0V29ybGRSb3RhdGlvbiB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvblBheWxvYWQsXG4gIElTREtIZWxwZXJzLFxuICBJUGxheWVyc0hlbHBlcixcbiAgU2NyZWVuQWxpZ25Nb2RlLFxuICBBY3Rpb24sXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZSxcbiAgUHJveGltaXR5TGF5ZXIsXG4gIFRyaWdnZXJUeXBlLFxuICBUd2VlblR5cGUsXG4gIFRlbGVwb3J0TW9kZSxcbiAgY2xvbmUsXG4gIGdldENvbXBvbmVudHMsXG4gIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsLFxufSBmcm9tICcuL2RlZmluaXRpb25zJztcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSwgaXNWYWxpZFN0YXRlIH0gZnJvbSAnLi9zdGF0ZXMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uRXZlbnRzLCBnZXRUcmlnZ2VyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHtcbiAgc3RhcnRJbnRlcnZhbCxcbiAgc3RhcnRUaW1lb3V0LFxuICBzdG9wQWxsSW50ZXJ2YWxzLFxuICBzdG9wQWxsVGltZW91dHMsXG4gIHN0b3BJbnRlcnZhbCxcbiAgc3RvcFRpbWVvdXQsXG59IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0UGF5bG9hZCB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJztcbmltcG9ydCB7XG4gIGdldFVJQmFja2dyb3VuZCxcbiAgZ2V0VUlUZXh0LFxuICBnZXRVSVRyYW5zZm9ybSxcbiAgbWFwQWxpZ25Ub1NjcmVlbkFsaWduLFxuICBzaG93Q2FwdGNoYVByb21wdCxcbn0gZnJvbSAnLi91aSc7XG5pbXBvcnQgeyBBbGlnbk1vZGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBpbml0VHJpZ2dlcnMsIGRhbWFnZVRhcmdldHMsIGhlYWxUYXJnZXRzIH0gZnJvbSAnLi90cmlnZ2Vycyc7XG5pbXBvcnQgeyBmb2xsb3dNYXAgfSBmcm9tICcuL3RyYW5zZm9ybSc7XG5pbXBvcnQgeyBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uIH0gZnJvbSAnLi90d2VlbnMnO1xuaW1wb3J0IHsgZ2V0UmV3YXJkc1NlcnZlclVybCB9IGZyb20gJy4vYWRtaW4tdG9vbGtpdC11aS9jb25zdGFudHMnO1xuaW1wb3J0IHsgY2FsbFNjcmlwdE1ldGhvZCB9IGZyb20gJ35zZGsvc2NyaXB0LXV0aWxzJztcblxuY29uc3QgaW5pdGVkRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKTtcbmNvbnN0IHVpU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKTtcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpO1xuY29uc3QgdGV4dEVudGl0aWVzID0gbmV3IE1hcDxFbnRpdHksIEVudGl0eT4oKTsgLy8gTW9kZWwgRW50aXR5LCBUZXh0IEVudGl0eVxuXG5sZXQgaW50ZXJuYWxJbml0QWN0aW9uczogKChlbnRpdHk6IEVudGl0eSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gIGlmIChpbnRlcm5hbEluaXRBY3Rpb25zKSB7XG4gICAgcmV0dXJuIGludGVybmFsSW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGluaXRBY3Rpb25zIHdoaWxlIGFjdGlvbnNTeXN0ZW0gaGFzIG5vdCBiZWVuIGNyZWF0ZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICAgIFVpVHJhbnNmb3JtLFxuICAgIFVpVGV4dCxcbiAgICBVaUJhY2tncm91bmQsXG4gICAgVWlJbnB1dCxcbiAgICBVaUlucHV0UmVzdWx0LFxuICAgIFR3ZWVuOiBUd2VlbkNvbXBvbmVudCxcbiAgICBUd2VlblNlcXVlbmNlLFxuICAgIFZpZGVvUGxheWVyLFxuICAgIExpZ2h0U291cmNlLFxuICAgIE1haW5DYW1lcmEsXG4gICAgVmlydHVhbENhbWVyYSxcbiAgICBUZXh0U2hhcGUsXG4gICAgSW5wdXRNb2RpZmllcixcbiAgICBTa3lib3hUaW1lLFxuICB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSk7XG4gIGNvbnN0IHsgQWN0aW9ucywgU3RhdGVzLCBDb3VudGVyLCBUcmlnZ2VycywgUmV3YXJkcyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKTtcblxuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW50aXRpZXNXaXRoQWN0aW9ucykge1xuICAgICAgaW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdEFjdGlvbnMoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFjdGlvbnMuaGFzKGVudGl0eSkgfHwgaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYWN0aW9ucyBkYXRhXG4gICAgY29uc3QgYWN0aW9ucyA9IEFjdGlvbnMuZ2V0KGVudGl0eSk7XG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXM6IFNldDxzdHJpbmc+LCBhY3Rpb246IEFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgIG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICBpbml0UGxheUFuaW1hdGlvbihlbnRpdHkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYmluZCBhY3Rpb25zXG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucy52YWx1ZSkge1xuICAgICAgYWN0aW9uRXZlbnRzLm9uKGFjdGlvbi5uYW1lLCAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBbmltYXRpb24oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TVEFURToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U3RhdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1RXRUVOOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wVHdlZW4oZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0xJREVfVEVYVFVSRToge1xuICAgICAgICAgICAgaGFuZGxlU2xpZGVUZXh0dXJlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNMSURFX1RFWFRVUkU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlU2V0Q291bnRlcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfQ09VTlRFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlRGVjcmVhc2VDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfU09VTkQ6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFZpc2liaWxpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVBdHRhY2hUb1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5VmlkZW8oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTToge1xuICAgICAgICAgICAgaGFuZGxlU3RvcFZpZGVvKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVRlbGVwb3J0UGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5PUEVOX0xJTks6IHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW5MaW5rKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9URVhUOiB7XG4gICAgICAgICAgICBoYW5kbGVIaWRlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX1RFWFQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9ERUxBWToge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnREZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BEZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnRMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0xPT1A+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlQ2xvbmVFbnRpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xPTkVfRU5USVRZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3ZlRW50aXR5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TSE9XX0lNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVTaG93SW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19JTUFHRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfSU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREFNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVEYW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREFNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRToge1xuICAgICAgICAgICAgaGFuZGxlTW92ZVBsYXllckhlcmUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXllckZhY2VJdGVtKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVGb2xsb3dQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuRk9MTE9XX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEZvbGxvd2luZ1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYWNlT25QbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlUm90YXRlQXNQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQUNFX09OX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlUGxhY2VPbkNhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVSb3RhdGVBc0NhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRQb3NpdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfUk9UQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFJvdGF0aW9uKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9ST1RBVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TQ0FMRToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U2NhbGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkFORE9NOiB7XG4gICAgICAgICAgICBoYW5kbGVSYW5kb20oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUkFORE9NPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQkFUQ0g6IHtcbiAgICAgICAgICAgIGhhbmRsZUJhdGNoKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSEVBTF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUhlYWxQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DTEFJTV9BSVJEUk9QOiB7XG4gICAgICAgICAgICBoYW5kbGVDbGFpbUFpcmRyb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19PTjoge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzT24oZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTElHSFRTX09GRjoge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzT2ZmKGVudGl0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19NT0RJRlk6IHtcbiAgICAgICAgICAgIGhhbmRsZUxpZ2h0c01vZGlmeShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5MSUdIVFNfTU9ESUZZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlQ2FtZXJhKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DSEFOR0VfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfVEVYVD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkZSRUVaRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUZyZWV6ZVBsYXllcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5VTkZSRUVaRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVVuZnJlZXplUGxheWVyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TOiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2VDb2xsaXNpb25zKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWDoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlU2t5Ym94KGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfU0tZQk9YPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVTRVRfU0tZQk9YOiB7XG4gICAgICAgICAgICBoYW5kbGVSZXNldFNreWJveCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q6IHtcbiAgICAgICAgICAgIGhhbmRsZUNhbGxTY3JpcHRNZXRob2QoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0FMTF9TQ1JJUFRfTUVUSE9EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU6IHtcbiAgICAgICAgICAgIGhhbmRsZUxvZ1RvQ29uc29sZShnZXRQYXlsb2FkPEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUxFVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZShlbnRpdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdGVkRW50aXRpZXMuYWRkKGVudGl0eSk7XG4gIH1cblxuICAvLyBMSUdIVFNfT05cbiAgZnVuY3Rpb24gaGFuZGxlTGlnaHRzT24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAobGlnaHQpIHtcbiAgICAgIGxpZ2h0LmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gTElHSFRTX09GRlxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNPZmYoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAobGlnaHQpIHtcbiAgICAgIGxpZ2h0LmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIExJR0hUU19NT0RJRllcbiAgZnVuY3Rpb24gaGFuZGxlTGlnaHRzTW9kaWZ5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTElHSFRTX01PRElGWT4pIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIWxpZ2h0KSByZXR1cm47XG4gICAgaWYgKHBheWxvYWQuYWN0aXZlICE9PSB1bmRlZmluZWQpIGxpZ2h0LmFjdGl2ZSA9IHBheWxvYWQuYWN0aXZlO1xuICAgIGlmIChwYXlsb2FkLmNvbG9yKSBsaWdodC5jb2xvciA9IHBheWxvYWQuY29sb3I7XG4gICAgaWYgKHBheWxvYWQuaW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIGxpZ2h0LmludGVuc2l0eSA9IHBheWxvYWQuaW50ZW5zaXR5O1xuICB9XG5cbiAgLy8gQ0hBTkdFX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VDYW1lcmEoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfQ0FNRVJBPikge1xuICAgIGNvbnN0IHRhcmdldCA9IHBheWxvYWQudmlydHVhbENhbWVyYUVudGl0eTtcblxuICAgIC8vIElmIHRhcmdldCBpcyB1bmRlZmluZWQsIHVzZSB0aGUgZW50aXR5IHRoYXQgb3ducyB0aGUgQWN0aW9ucyBjb21wb25lbnRcbiAgICAvLyBJZiB0aGF0IGVudGl0eSBoYXMgVmlydHVhbENhbWVyYSwgdXNlIGl0OyBvdGhlcndpc2UgcmV2ZXJ0IHRvIG5vcm1hbCBiZWhhdmlvclxuICAgIGxldCBjYW1lcmFFbnRpdHk6IEVudGl0eSB8IHVuZGVmaW5lZCA9IHRhcmdldDtcblxuICAgIGlmIChjYW1lcmFFbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIHRoZSBlbnRpdHkgdGhhdCBvd25zIHRoZSBBY3Rpb25zIGNvbXBvbmVudCBpZiBpdCBoYXMgVmlydHVhbENhbWVyYVxuICAgICAgaWYgKFZpcnR1YWxDYW1lcmEuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY2FtZXJhRW50aXR5ID0gZW50aXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gY2FtZXJhIHNwZWNpZmllZCBhbmQgZW50aXR5IGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsQ2FtZXJhLCByZXZlcnQgdG8gbm9ybWFsXG4gICAgICAgIGlmIChNYWluQ2FtZXJhLmhhcyhlbmdpbmUuQ2FtZXJhRW50aXR5KSkge1xuICAgICAgICAgIE1haW5DYW1lcmEuZGVsZXRlRnJvbShlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBpZiB0YXJnZXQgaXMgMCAoUm9vdEVudGl0eSksIHRyZWF0IGl0IGFzIFwicmVtb3ZlIGNhbWVyYVwiXG4gICAgLy8gVGhpcyBhbGxvd3MgdXNpbmcgMCBhcyBhIHNlbnRpbmVsIHZhbHVlIGluIGNvbXBvc2l0ZS5qc29uXG4gICAgaWYgKGNhbWVyYUVudGl0eSA9PT0gZW5naW5lLlJvb3RFbnRpdHkpIHtcbiAgICAgIGlmIChNYWluQ2FtZXJhLmhhcyhlbmdpbmUuQ2FtZXJhRW50aXR5KSkge1xuICAgICAgICBNYWluQ2FtZXJhLmRlbGV0ZUZyb20oZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoZSBzZWxlY3RlZCBlbnRpdHkgaGFzIFZpcnR1YWxDYW1lcmEgYmVmb3JlIGFwcGx5aW5nXG4gICAgaWYgKCFWaXJ0dWFsQ2FtZXJhLmhhcyhjYW1lcmFFbnRpdHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTWFpbkNhbWVyYS5jcmVhdGVPclJlcGxhY2UoZW5naW5lLkNhbWVyYUVudGl0eSwge1xuICAgICAgdmlydHVhbENhbWVyYUVudGl0eTogY2FtZXJhRW50aXR5LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ0hBTkdFX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlVGV4dChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9URVhUPikge1xuICAgIGNvbnN0IHRleHQgPSBUZXh0U2hhcGUuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuXG4gICAgdGV4dC50ZXh0ID0gcGF5bG9hZC50ZXh0O1xuICAgIGlmIChwYXlsb2FkLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHRleHQuZm9udFNpemUgPSBwYXlsb2FkLmZvbnRTaXplO1xuICAgIGlmIChwYXlsb2FkLmNvbG9yKSB0ZXh0LnRleHRDb2xvciA9IHBheWxvYWQuY29sb3I7XG4gIH1cblxuICAvLyBGUkVFWkVfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUZyZWV6ZVBsYXllcigpIHtcbiAgICBJbnB1dE1vZGlmaWVyLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuUGxheWVyRW50aXR5LCB7XG4gICAgICBtb2RlOiBJbnB1dE1vZGlmaWVyLk1vZGUuU3RhbmRhcmQoe1xuICAgICAgICBkaXNhYmxlQWxsOiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBVTkZSRUVaRV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVW5mcmVlemVQbGF5ZXIoKSB7XG4gICAgSW5wdXRNb2RpZmllci5jcmVhdGVPclJlcGxhY2UoZW5naW5lLlBsYXllckVudGl0eSwge1xuICAgICAgbW9kZTogSW5wdXRNb2RpZmllci5Nb2RlLlN0YW5kYXJkKHtcbiAgICAgICAgZGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENIQU5HRV9DT0xMSVNJT05TXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZUNvbGxpc2lvbnMoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TPixcbiAgKSB7XG4gICAgY29uc3QgeyB2aXNpYmxlQ29sbGlzaW9ucywgaW52aXNpYmxlQ29sbGlzaW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBnbHRmID0gR2x0ZkNvbnRhaW5lci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChnbHRmKSB7XG4gICAgICBpZiAodmlzaWJsZUNvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbHRmLnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gdmlzaWJsZUNvbGxpc2lvbnM7XG4gICAgICB9XG4gICAgICBpZiAoaW52aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsdGYuaW52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IGludmlzaWJsZUNvbGxpc2lvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgLy8gRm9yIE1lc2hDb2xsaWRlciwgdXNlIHZpc2libGVDb2xsaXNpb25zIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgaW52aXNpYmxlQ29sbGlzaW9uc1xuICAgICAgaWYgKHZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSB2aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH0gZWxzZSBpZiAoaW52aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lc2hDb2xsaWRlci5jb2xsaXNpb25NYXNrID0gaW52aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDSEFOR0VfU0tZQk9YXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVNreWJveChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWD4pIHtcbiAgICBjb25zdCB7IHRpbWUsIGRpcmVjdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEVuc3VyZSB0aW1lIGlzIGEgdmFsaWQgbnVtYmVyIChzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0KVxuICAgIGlmICh0eXBlb2YgdGltZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odGltZSkgfHwgdGltZSA8IDAgfHwgdGltZSA+IDg2NDAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHNreWJveCB0aW1lIHZhbHVlOicsIHRpbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFNreWJveFRpbWUuY3JlYXRlT3JSZXBsYWNlKGVuZ2luZS5Sb290RW50aXR5LCB7XG4gICAgICBmaXhlZFRpbWU6IHRpbWUsXG4gICAgICB0cmFuc2l0aW9uTW9kZTogZGlyZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkVTRVRfU0tZQk9YXG4gIGZ1bmN0aW9uIGhhbmRsZVJlc2V0U2t5Ym94KCkge1xuICAgIGlmIChTa3lib3hUaW1lLmhhcyhlbmdpbmUuUm9vdEVudGl0eSkpIHtcbiAgICAgIFNreWJveFRpbWUuZGVsZXRlRnJvbShlbmdpbmUuUm9vdEVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICAgIHN0YXRlczogW10sXG4gICAgICB9KTtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplQW5pbWF0aW9uV2VpZ2h0KHJhd1dlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmF3V2VpZ2h0IDwgMCB8fCByYXdXZWlnaHQgPiAxKSByZXR1cm4gMTtcbiAgICByZXR1cm4gcmF3V2VpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPikge1xuICAgIGNvbnN0IHsgYW5pbWF0aW9uLCBsb29wLCBzaG91bGRSZXNldCB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGFuaW1hdG9yID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgIGlmICghYW5pbWF0b3Iuc3RhdGVzLnNvbWUoKCQ6IHsgY2xpcDogc3RyaW5nIH0pID0+ICQuY2xpcCA9PT0gYW5pbWF0aW9uKSkge1xuICAgICAgYW5pbWF0b3Iuc3RhdGVzID0gW1xuICAgICAgICAuLi5hbmltYXRvci5zdGF0ZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGlwOiBhbmltYXRpb24sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpcCA9IEFuaW1hdG9yLmdldENsaXAoZW50aXR5LCBhbmltYXRpb24pO1xuICAgICAgY2xpcC5wbGF5aW5nID0gdHJ1ZTtcbiAgICAgIGNsaXAubG9vcCA9IGxvb3AgPz8gZmFsc2U7XG4gICAgICBjbGlwLndlaWdodCA9IG5vcm1hbGl6ZUFuaW1hdGlvbldlaWdodChjbGlwLndlaWdodCA/PyAxKTtcbiAgICAgIGlmIChzaG91bGRSZXNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsaXAuc2hvdWxkUmVzZXQgPSBzaG91bGRSZXNldDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwbGF5aW5nIGFuaW1hdGlvbicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfQU5JTUFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBbmltYXRpb24oZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT04+KSB7XG4gICAgaWYgKEFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9TVEFURVxuICBmdW5jdGlvbiBoYW5kbGVTZXRTdGF0ZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4pIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKHN0YXRlcykge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHN0YXRlcyk7XG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlO1xuICAgICAgbmV4dFN0YXRlID0gaXNWYWxpZFN0YXRlKHN0YXRlcywgbmV4dFN0YXRlKSA/IG5leHRTdGF0ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBzdGF0ZXMuY3VycmVudFZhbHVlID8/IGRlZmF1bHRWYWx1ZSA/PyB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZXMucHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XG4gICAgICBzdGF0ZXMuY3VycmVudFZhbHVlID0gbmV4dFN0YXRlO1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU1RBUlRfVFdFRU5cbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUd2VlbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICAvLyBHZXQgdGhlIGluaXRpYWwgdHdlZW4gaWYgZXhpc3RzIHRvIHJldmVydCB0aGUgb2JqZWN0IG1vdmVtZW50IHRvIHRoYXQgc2VxdWVuY2Ugd2hlbiBleGVjdXRpbmcgYSB0d2VlbiBmcm9tIGFjdGlvbnNcbiAgICAgIGNvbnN0IGluaXRpYWxUd2VlbiA9IFR3ZWVuQ29tcG9uZW50LmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICAgIGxldCB0d2VlbjtcblxuICAgICAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUd2VlblR5cGUuTU9WRV9JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVNb3ZlSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlJPVEFURV9JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuU0NBTEVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlU2NhbGVJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuS0VFUF9ST1RBVElOR19JVEVNOiB7XG4gICAgICAgICAgdHdlZW4gPSBoYW5kbGVLZWVwUm90YXRpbmdJdGVtKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiB0eXBlOiAke3BheWxvYWQudHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXZlcnRUd2VlbihlbnRpdHksIGluaXRpYWxUd2VlbiwgdHdlZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RhcnQgdG8gdGhlIGluaXRpYWwgbW92ZW1lbnQgc2VxdWVuY2Ugd2hlbiBleGVjdXRpbmcgYW4gYWRpdGlvbmFsIHR3ZWVuXG4gIGZ1bmN0aW9uIHJldmVydFR3ZWVuKGVudGl0eTogRW50aXR5LCBpbml0aWFsVHdlZW46IFBCVHdlZW4gfCBudWxsLCB0d2VlbjogUEJUd2Vlbikge1xuICAgIGNvbnN0IHR3ZWVuU2VxdWVuY2UgPSBUd2VlblNlcXVlbmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBsZXQgX3JldmVydFR3ZWVuID0ge1xuICAgICAgLi4udHdlZW4sXG4gICAgfTtcblxuICAgIGlmICghaW5pdGlhbFR3ZWVuIHx8ICF0d2VlblNlcXVlbmNlIHx8ICF0d2VlblNlcXVlbmNlLmxvb3ApIHJldHVybjtcblxuICAgIHN3aXRjaCAoaW5pdGlhbFR3ZWVuLm1vZGU/LiRjYXNlKSB7XG4gICAgICBjYXNlICdtb3ZlJzoge1xuICAgICAgICBfcmV2ZXJ0VHdlZW4gPSB7XG4gICAgICAgICAgLi4uX3JldmVydFR3ZWVuLFxuICAgICAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuTW92ZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ21vdmUnOyBtb3ZlOiBNb3ZlIH0pLm1vdmUuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5tb3ZlLnN0YXJ0LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JvdGF0ZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ3JvdGF0ZSc7IHJvdGF0ZTogUm90YXRlIH0pLnJvdGF0ZS5lbmQsXG4gICAgICAgICAgICBlbmQ6IGluaXRpYWxUd2Vlbi5tb2RlLnJvdGF0ZS5zdGFydCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzY2FsZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlNjYWxlKHtcbiAgICAgICAgICAgIHN0YXJ0OiAodHdlZW4ubW9kZSBhcyB7ICRjYXNlOiAnc2NhbGUnOyBzY2FsZTogU2NhbGUgfSkuc2NhbGUuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5zY2FsZS5zdGFydCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiBtb2RlOiAke2luaXRpYWxUd2Vlbi5tb2RlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbml0aWFsIHR3ZWVuIGlzIG5vdCBwbGF5aW5nIGJ1dCB0aGUgbG9vcCBwcm9wZXJ0eSBpcyBhY3RpdmUsIHN0YXJ0IGl0XG4gICAgaW5pdGlhbFR3ZWVuLnBsYXlpbmcgPSB0cnVlO1xuICAgIHR3ZWVuU2VxdWVuY2Uuc2VxdWVuY2UgPSBbX3JldmVydFR3ZWVuLCBpbml0aWFsVHdlZW5dO1xuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KTtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopO1xuICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0ucG9zaXRpb24sIGVuZCkgOiBlbmQ7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Nb3ZlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5wb3NpdGlvbixcbiAgICAgICAgZW5kOiBlbmRQb3NpdGlvbixcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBST1RBVEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KTtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGVuZCA9IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KTtcbiAgICBjb25zdCBlbmRSb3RhdGlvbiA9IHJlbGF0aXZlID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZCkgOiBlbmQ7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnJvdGF0aW9uLFxuICAgICAgICBlbmQ6IGVuZFJvdGF0aW9uLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNDQUxFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlU2NhbGVJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KTtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSwgcmVsYXRpdmUgfSA9IHR3ZWVuO1xuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopO1xuICAgIGNvbnN0IGVuZFNjYWxlID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0uc2NhbGUsIGVuZCkgOiBlbmQ7XG5cbiAgICByZXR1cm4gVHdlZW5Db21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgbW9kZTogVHdlZW4uTW9kZS5TY2FsZSh7XG4gICAgICAgIHN0YXJ0OiB0cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgIGVuZDogZW5kU2NhbGUsXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsIC8vIGZyb20gc2VjcyB0byBtc1xuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gS0VFUF9ST1RBVElOR19JVEVNIChjb250aW51b3VzIHJvdGF0aW9uKVxuICBmdW5jdGlvbiBoYW5kbGVLZWVwUm90YXRpbmdJdGVtKGVudGl0eTogRW50aXR5LCB0d2VlbjogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPikge1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBkaXIgPSB0d2Vlbi5kaXJlY3Rpb24gPz8geyB4OiAwLCB5OiAxLCB6OiAwIH07XG4gICAgY29uc3Qgc3BlZWQgPSB0d2Vlbi5zcGVlZCA/PyAxO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuUm90YXRlQ29udGludW91cyh7XG4gICAgICAgIGRpcmVjdGlvbjogUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKGRpci54LCBkaXIueSwgZGlyLnopLFxuICAgICAgICBzcGVlZCxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IChkdXJhdGlvbiA/PyAwKSAqIDEwMDAsXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX1RXRUVOXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BUd2VlbihlbnRpdHk6IEVudGl0eSkge1xuICAgIGlmIChUd2VlbkNvbXBvbmVudC5oYXMoZW50aXR5KSkge1xuICAgICAgVHdlZW5Db21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNMSURFX1RFWFRVUkVcbiAgZnVuY3Rpb24gaGFuZGxlU2xpZGVUZXh0dXJlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0xJREVfVEVYVFVSRT4pIHtcbiAgICBjb25zdCBkaXIgPSBwYXlsb2FkLmRpcmVjdGlvbjtcbiAgICBjb25zdCBzcGVlZCA9IHBheWxvYWQuc3BlZWQ7XG4gICAgY29uc3QgbW92ZW1lbnRUeXBlID0gcGF5bG9hZC5tb3ZlbWVudFR5cGUgYXMgdW5rbm93biBhcyBTZGtUZXh0dXJlTW92ZW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGF5bG9hZC5kdXJhdGlvbiA/PyAwO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuVGV4dHVyZU1vdmVDb250aW51b3VzKHtcbiAgICAgICAgZGlyZWN0aW9uOiB7IHg6IGRpci54LCB5OiBkaXIueSB9LFxuICAgICAgICBzcGVlZCxcbiAgICAgICAgbW92ZW1lbnRUeXBlLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgZWFzaW5nRnVuY3Rpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICAvLyBTRVRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVTZXRDb3VudGVyKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgPSBwYXlsb2FkLmNvdW50ZXI7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElOQ1JFTUVOVF9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZUluY3JlbWVudENvdW50ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPixcbiAgKSB7XG4gICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGFtb3VudCA9IHBheWxvYWQuYW1vdW50ID8/IDE7XG5cbiAgICBpZiAoY291bnRlcikge1xuICAgICAgY291bnRlci52YWx1ZSArPSBhbW91bnQ7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ09VTlRFUl9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBhbW91bnQgPSBwYXlsb2FkLmFtb3VudCA/PyAxO1xuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgLT0gYW1vdW50O1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlTb3VuZChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfU09VTkQ+KSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AsIHZvbHVtZSwgZ2xvYmFsIH0gPSBwYXlsb2FkO1xuICAgIGlmIChBdWRpb1NvdXJjZS5oYXMoZW50aXR5KSkge1xuICAgICAgQXVkaW9Tb3VyY2UucGxheVNvdW5kKGVudGl0eSwgc3JjKTtcbiAgICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9Tb3VyY2UuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgICAgYXVkaW9Tb3VyY2UubG9vcCA9IGxvb3A7XG4gICAgICBhdWRpb1NvdXJjZS52b2x1bWUgPSB2b2x1bWUgPz8gMTtcbiAgICAgIGF1ZGlvU291cmNlLmdsb2JhbCA9IGdsb2JhbCA/PyBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlKGVudGl0eSwge1xuICAgICAgICBhdWRpb0NsaXBVcmw6IHNyYyxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVTdG9wU291bmQoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9TT1VORD4pIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICAgIGF1ZGlvU291cmNlLnBsYXlpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfVklTSUJJTElUWVxuICBmdW5jdGlvbiBoYW5kbGVTZXRWaXNpYmlsaXR5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KSB7XG4gICAgY29uc3QgeyB2aXNpYmxlLCBjb2xsaWRlciB9ID0gcGF5bG9hZDtcbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgdmlzaWJsZSB9KTtcbiAgICBjb25zdCBnbHRmID0gR2x0ZkNvbnRhaW5lci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChjb2xsaWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZ2x0Zikge1xuICAgICAgICBnbHRmLmludmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSBjb2xsaWRlcjtcbiAgICAgICAgaWYgKGNvbGxpZGVyID09PSAwKSB7XG4gICAgICAgICAgZ2x0Zi52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWVzaENvbGxpZGVyKSB7XG4gICAgICAgIG1lc2hDb2xsaWRlci5jb2xsaXNpb25NYXNrID0gY29sbGlkZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQVRUQUNIX1RPX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVBdHRhY2hUb1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgYW5jaG9yUG9pbnRJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCB1c2VyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk/LnVzZXJJZDtcbiAgICBpZiAodXNlcikge1xuICAgICAgQXZhdGFyQXR0YWNoLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgYW5jaG9yUG9pbnRJZDogYW5jaG9yUG9pbnRJZCwgYXZhdGFySWQ6IHVzZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gREVUQUNIX0ZST01fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+LFxuICApIHtcbiAgICBpZiAoQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdmF0YXJBdHRhY2guZGVsZXRlRnJvbShlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRFTEVQT1JUIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVUZWxlcG9ydFBsYXllcihcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHsgbW9kZSwgeCwgeSwgcmVhbG0gfSA9IHBheWxvYWQ7XG5cbiAgICBpZiAobW9kZSA9PT0gVGVsZXBvcnRNb2RlLlRPX1dPUkxEKSB7XG4gICAgICBpZiAocmVhbG0pIHtcbiAgICAgICAgdm9pZCBjaGFuZ2VSZWFsbSh7IHJlYWxtIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT19DT09SRElOQVRFUyBtb2RlXG4gICAgICBpZiAoeCAhPT0gdW5kZWZpbmVkICYmIHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2b2lkIHRlbGVwb3J0VG8oe1xuICAgICAgICAgIHdvcmxkQ29vcmRpbmF0ZXM6IHsgeCwgeSB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNT1ZFIFBMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlUGxheWVyKF9lbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBwYXlsb2FkLnBvc2l0aW9uLFxuICAgICAgY2FtZXJhVGFyZ2V0OiBwYXlsb2FkLmNhbWVyYVRhcmdldCxcbiAgICB9O1xuICAgIHZvaWQgbW92ZVBsYXllclRvKG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUExBWSBERUZBVUxUIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlEZWZhdWx0RW1vdGUoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0RFRkFVTFRfRU1PVEU+LFxuICApIHtcbiAgICBjb25zdCB7IGVtb3RlIH0gPSBwYXlsb2FkO1xuICAgIHZvaWQgdHJpZ2dlckVtb3RlKHsgcHJlZGVmaW5lZEVtb3RlOiBlbW90ZSB9KTtcbiAgfVxuXG4gIC8vIFBMQVkgQ1VTVE9NIEVNT1RFXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlDdXN0b21FbW90ZShcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AgfSA9IHBheWxvYWQ7XG4gICAgdm9pZCB0cmlnZ2VyU2NlbmVFbW90ZSh7IHNyYywgbG9vcCB9KTtcbiAgfVxuXG4gIC8vIE9QRU4gTElOS1xuICBmdW5jdGlvbiBoYW5kbGVPcGVuTGluayhfZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5PUEVOX0xJTks+KSB7XG4gICAgY29uc3QgeyB1cmwgfSA9IHBheWxvYWQ7XG4gICAgdm9pZCBvcGVuRXh0ZXJuYWxVcmwoeyB1cmwgfSk7XG4gIH1cblxuICAvLyBQTEFZX1ZJREVPXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXlWaWRlbyhlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPikge1xuICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdmlkZW9Tb3VyY2UgJiYgcGF5bG9hZC5zcmMpIHtcbiAgICAgIFZpZGVvUGxheWVyLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgICAgc3JjOiBwYXlsb2FkLnNyYyxcbiAgICAgICAgdm9sdW1lOiBwYXlsb2FkLnZvbHVtZSA/PyAxLFxuICAgICAgICBsb29wOiBwYXlsb2FkLmxvb3AgPz8gZmFsc2UsXG4gICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gSW5pdCB2aWRlbyBwbGF5ZXIgbWF0ZXJpYWwgd2hlbiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSBhIFZpZGVvUGxheWVyIGNvbXBvbmVudCBkZWZpbmVkXG4gICAgICBpbml0VmlkZW9QbGF5ZXJDb21wb25lbnRNYXRlcmlhbChlbnRpdHksIHsgTWF0ZXJpYWwgfSwgTWF0ZXJpYWwuZ2V0T3JOdWxsKGVudGl0eSkpO1xuICAgIH1cbiAgICBpZiAodmlkZW9Tb3VyY2UpIHtcbiAgICAgIGlmICh2aWRlb1NvdXJjZT8uc3JjICE9PSBwYXlsb2FkLnNyYykge1xuICAgICAgICB2aWRlb1NvdXJjZS5zcmMgPSBwYXlsb2FkLnNyYyA/PyAnJztcbiAgICAgIH1cbiAgICAgIHZpZGVvU291cmNlLnZvbHVtZSA9IHBheWxvYWQudm9sdW1lID8/IHZpZGVvU291cmNlLnZvbHVtZTtcbiAgICAgIHZpZGVvU291cmNlLmxvb3AgPSBwYXlsb2FkLmxvb3AgPz8gdmlkZW9Tb3VyY2UubG9vcDtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSB0cnVlO1xuICAgIH1cbiAgfVxuICAvLyBTVE9QX1ZJREVPXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BWaWRlbyhlbnRpdHk6IEVudGl0eSwgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodmlkZW9Tb3VyY2UpIHtcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFZX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgeyB1cmwsIHZvbHVtZSB9ID0gcGF5bG9hZDtcbiAgICBBdWRpb1N0cmVhbS5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICB1cmwsXG4gICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgdm9sdW1lOiB2b2x1bWUgPz8gMSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNUT1BfQVVESU9fU1RSRUFNXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BBdWRpb1N0cmVhbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPixcbiAgKSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1N0cmVhbS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU0hPV19URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dUZXh0KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPikge1xuICAgIGNvbnN0IHsgdGV4dCwgaGlkZUFmdGVyU2Vjb25kcywgZm9udCwgZm9udFNpemUsIHRleHRBbGlnbiB9ID0gcGF5bG9hZDtcbiAgICAvLyBDcmVhdGUgYSBuZXcgZW50aXR5IGZvciB0aGUgdGV4dFxuICAgIGNvbnN0IHRleHRFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KCk7XG4gICAgLy8gU2V0IHRoZSB0ZXh0IGVudGl0eSBhcyBhIGNoaWxkIG9mIHRoZSBlbnRpdHkgdGhhdCBjYWxsZWQgdGhlIGFjdGlvblxuICAgIHRleHRFbnRpdGllcy5zZXQoZW50aXR5LCB0ZXh0RW50aXR5KTtcbiAgICBjb25zdCB1aVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCB0ZXh0RW50aXR5KTtcbiAgICBpZiAodWlUcmFuc2Zvcm1Db21wb25lbnQpIHtcbiAgICAgIHVpVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IGVudGl0eTtcbiAgICAgIC8vIFNldCB0aGUgcG9pbnRlciBmaWx0ZXIgdG8gbm9uZSwgYWxsb3dpbmcgcGxheWVycyB0byBjb250aW51ZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzY2VuZVxuICAgICAgdWlUcmFuc2Zvcm1Db21wb25lbnQucG9pbnRlckZpbHRlciA9IFBvaW50ZXJGaWx0ZXJNb2RlLlBGTV9OT05FO1xuICAgICAgVWlUZXh0LmNyZWF0ZU9yUmVwbGFjZSh0ZXh0RW50aXR5LCB7XG4gICAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgICBmb250OiBmb250IGFzIHVua25vd24gYXMgRm9udCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduIGFzIHVua25vd24gYXMgVGV4dEFsaWduTW9kZSxcbiAgICAgIH0pO1xuICAgICAgc3RhcnRUaW1lb3V0KGVudGl0eSwgQWN0aW9uVHlwZS5ISURFX1RFWFQsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVUZXh0KGVudGl0eSwge30pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBISURFX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlSGlkZVRleHQoZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9URVhUPikge1xuICAgIGNvbnN0IHRleHRFbnRpdHkgPSB0ZXh0RW50aXRpZXMuZ2V0KGVudGl0eSk7XG4gICAgaWYgKHRleHRFbnRpdHkpIHtcbiAgICAgIC8vIERlbGV0ZSB0ZXh0IGNvbXBvbmVudFxuICAgICAgVWlUZXh0LmRlbGV0ZUZyb20odGV4dEVudGl0eSk7XG4gICAgICAvLyBEZWxldGUgdHJhbnNmb3JtIGNvbXBvbmVudFxuICAgICAgVWlUcmFuc2Zvcm0uZGVsZXRlRnJvbSh0ZXh0RW50aXR5KTtcbiAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG4gICAgICBzdG9wVGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9URVhUKTtcbiAgICAgIC8vIERlbGV0ZSB0ZXh0IGVudGl0eSBmcm9tIHRoZSBtYXBcbiAgICAgIHRleHRFbnRpdGllcy5kZWxldGUoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eTogRW50aXR5LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KTtcbiAgICByZXR1cm4gYWN0aW9ucz8udmFsdWUuZmluZCgoJDogQWN0aW9uKSA9PiAkLm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgLy8gU1RBUlRfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnREZWxheShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZDtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBhY3Rpb25OYW1lLCB0aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcERlbGF5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4pIHtcbiAgICBjb25zdCB7IGFjdGlvbiB9ID0gcGF5bG9hZDtcbiAgICBzdG9wVGltZW91dChlbnRpdHksIGFjdGlvbik7XG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0xPT1A+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBpbnRlcnZhbCB9ID0gcGF5bG9hZDtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydEludGVydmFsKGVudGl0eSwgYWN0aW9uTmFtZSwgaW50ZXJ2YWwsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BMb29wKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPikge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkO1xuICAgIHN0b3BJbnRlcnZhbChlbnRpdHksIGFjdGlvbik7XG4gIH1cblxuICAvLyBDTE9ORV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlQ2xvbmVFbnRpdHkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+KSB7XG4gICAgY29uc3QgeyBwb3NpdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgIC8vIGNsb25lIGVudGl0eVxuICAgIGNvbnN0IHsgY2xvbmVkLCBlbnRpdGllcyB9ID0gY2xvbmUoZW50aXR5LCBlbmdpbmUsIFRyYW5zZm9ybSwgVHJpZ2dlcnMsIHNka0hlbHBlcnMpO1xuICAgIGZvciAoY29uc3QgY2xvbmVkIG9mIGVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICAvLyBpbml0aWFsaXplXG4gICAgICBpbml0QWN0aW9ucyhjbG9uZWQpO1xuICAgICAgaW5pdFRyaWdnZXJzKGNsb25lZCk7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGNsb25lZCk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xPTkUpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmVkKTtcbiAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8vIFJFTU9WRV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlUmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KSB7XG4gICAgLy8gUmVtb3ZlIGFsbCB0aW1lcnMgYmVmb3JlIHJlbW92ZSB0aGUgZW50aXR5XG4gICAgc3RvcEFsbFRpbWVvdXRzKGVudGl0eSk7XG4gICAgc3RvcEFsbEludGVydmFscyhlbnRpdHkpO1xuXG4gICAgY29uc3QgdHJlZSA9IGdldENvbXBvbmVudEVudGl0eVRyZWUoZW5naW5lLCBlbnRpdHksIFRyYW5zZm9ybSk7XG4gICAgZm9yIChjb25zdCBlbnRpdHlUb1JlbW92ZSBvZiB0cmVlKSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGVudGl0eVRvUmVtb3ZlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVaVN0YWNrKGFsaWduOiBTY3JlZW5BbGlnbk1vZGUpIHtcbiAgICBjb25zdCBrZXkgPSBgJHthbGlnbi5hbGlnbkl0ZW1zfSwke2FsaWduLmp1c3RpZnlDb250ZW50fWA7XG5cbiAgICBpZiAoIXVpU3RhY2tzLmhhcyhrZXkpKSB7XG4gICAgICB1aVN0YWNrcy5zZXQoa2V5LCBlbmdpbmUuYWRkRW50aXR5KCkpO1xuICAgIH1cblxuICAgIHJldHVybiB1aVN0YWNrcy5nZXQoa2V5KSE7XG4gIH1cblxuICAvLyBTSE9XX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dJbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KSB7XG4gICAgY29uc3QgeyBzcmMsIHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnRTaXplLCBhbGlnbiwgaGVpZ2h0LCB3aWR0aCB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEdldC9DcmVhdGUgYSBVSSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IGVudGl0eVxuICAgIGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbmdpbmUuUm9vdEVudGl0eSk7XG5cbiAgICAvLyBHZXQgYSBVSSBTdGFjayBlbnRpdHlcbiAgICAvLyBEZWZhdWx0IHRvIGNlbnRlciBhbGlnbm1lbnQgaWYgYWxpZ24gaXMgbm90IHByb3ZpZGVkXG4gICAgY29uc3Qgc2NyZWVuQWxpZ24gPSBtYXBBbGlnblRvU2NyZWVuQWxpZ24oYWxpZ24gPz8gQWxpZ25Nb2RlLlRBTV9NSURETEVfQ0VOVEVSKTtcbiAgICBjb25zdCB1aVN0YWNrID0gZ2V0VWlTdGFjayhzY3JlZW5BbGlnbik7XG5cbiAgICAvLyBUT0RPOiBGaXggaXRlbXMgd3JhcHBpbmdcbiAgICAvLyBHZXQvQ3JlYXRlIGEgVUkgVHJhbnNmb3JtIGZvciB0aGUgVUkgc3RhY2tcbiAgICBjb25zdCB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50ID0gZ2V0VUlUcmFuc2Zvcm0oVWlUcmFuc2Zvcm0sIHVpU3RhY2spO1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuYWxpZ25JdGVtcyA9IHNjcmVlbkFsaWduLmFsaWduSXRlbXM7XG4gICAgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudC5qdXN0aWZ5Q29udGVudCA9IHNjcmVlbkFsaWduLmp1c3RpZnlDb250ZW50O1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQucG9zaXRpb25UeXBlID0gWUdQb3NpdGlvblR5cGUuWUdQVF9BQlNPTFVURTtcblxuICAgIC8vIENyZWF0ZSBhIFVJIGVudGl0eSBhbmQgYSBUcmFuc2Zvcm0gY29tcG9uZW50IGZvciB0aGUgaW1hZ2VcbiAgICBjb25zdCBpbWFnZUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKTtcbiAgICBjb25zdCBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFxuICAgICAgVWlUcmFuc2Zvcm0sXG4gICAgICBpbWFnZUVudGl0eSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgWUdVbml0LllHVV9QT0lOVCxcbiAgICApO1xuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBhcmVudCA9IHVpU3RhY2s7XG4gICAgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQucG9pbnRlckZpbHRlciA9IFBvaW50ZXJGaWx0ZXJNb2RlLlBGTV9CTE9DSztcblxuICAgIC8vIENyZWF0ZSBCYWNrZ3JvdW5kIENvbXBvbmVudFxuICAgIGdldFVJQmFja2dyb3VuZChVaUJhY2tncm91bmQsIGltYWdlRW50aXR5LCBzcmMpO1xuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIC8vIENyZWF0ZSBUZXh0IENvbXBvbmVudFxuICAgICAgLy8gVE9ETzogRml4IHRleHQgd3JhcHBpbmcgYW5kIHNjcm9sbGluZ1xuICAgICAgZ2V0VUlUZXh0KFVpVGV4dCwgaW1hZ2VFbnRpdHksIHRleHQsIGZvbnRTaXplLCB3aWR0aCk7XG4gICAgfVxuXG4gICAgcG9pbnRlckV2ZW50c1N5c3RlbS5vblBvaW50ZXJEb3duKFxuICAgICAge1xuICAgICAgICBlbnRpdHk6IGltYWdlRW50aXR5LFxuICAgICAgICBvcHRzOiB7XG4gICAgICAgICAgYnV0dG9uOiBJbnB1dEFjdGlvbi5JQV9QT0lOVEVSLFxuICAgICAgICAgIGhvdmVyVGV4dDogJ0NsaWNrJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuc2V0KGVudGl0eSwgaW1hZ2VFbnRpdHkpO1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xJQ0tfSU1BR0UpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKGhpZGVBZnRlclNlY29uZHMpIHtcbiAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9JTUFHRSwgaGlkZUFmdGVyU2Vjb25kcywgKCkgPT5cbiAgICAgICAgaGFuZGxlSGlkZUltYWdlKGVudGl0eSwgeyBpbWFnZUVudGl0eTogaW1hZ2VFbnRpdHkgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhJREVfSU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlSGlkZUltYWdlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSElERV9JTUFHRT4pIHtcbiAgICBjb25zdCB7IGltYWdlRW50aXR5IH0gPSBwYXlsb2FkO1xuXG4gICAgaWYgKGltYWdlRW50aXR5KSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGltYWdlRW50aXR5IGFzIEVudGl0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRJbWFnZSA9IGxhc3RVaUVudGl0eUNsaWNrZWQuZ2V0KGVudGl0eSk7XG4gICAgICBpZiAoY2xpY2tlZEltYWdlKSB7XG4gICAgICAgIGVuZ2luZS5yZW1vdmVFbnRpdHkoY2xpY2tlZEltYWdlKTtcbiAgICAgICAgbGFzdFVpRW50aXR5Q2xpY2tlZC5kZWxldGUoZW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEQU1BR0VcbiAgZnVuY3Rpb24gaGFuZGxlRGFtYWdlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuREFNQUdFPikge1xuICAgIGNvbnN0IHsgcmFkaXVzLCBsYXllciwgaGl0cyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBlbnRpdHlQb3NpdGlvbiA9IEF2YXRhckF0dGFjaC5oYXMoZW50aXR5KVxuICAgICAgPyBnZXRQbGF5ZXJQb3NpdGlvbigpXG4gICAgICA6IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSk7XG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgZGFtYWdlVGFyZ2V0cykge1xuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSBnZXRXb3JsZFBvc2l0aW9uKHRhcmdldCk7XG4gICAgICBjb25zdCBkaXN0YW5jZSA9IFZlY3RvcjMuZGlzdGFuY2UoZW50aXR5UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKTtcblxuICAgICAgLy8gYXZvaWQgY2F1c2luZyBkYW1hZ2UgdG8gdGhlIGVudGl0eSBpdHNlbGYgb3IgaXRzIGNoaWxkcmVuXG4gICAgICBjb25zdCBlbnRpdHlUcmVlID0gQXJyYXkuZnJvbShnZXRDb21wb25lbnRFbnRpdHlUcmVlKGVuZ2luZSwgZW50aXR5LCBUcmFuc2Zvcm0pKTtcbiAgICAgIGNvbnN0IGlzUGFydE9mRW50aXR5VHJlZSA9IGVudGl0eVRyZWUuc29tZSgoJDogRW50aXR5KSA9PiAkID09PSB0YXJnZXQpO1xuICAgICAgaWYgKGlzUGFydE9mRW50aXR5VHJlZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuUExBWUVSKSB7XG4gICAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QodGFyZ2V0KTtcbiAgICAgICAgICBpZiAocm9vdCAhPT0gZW5naW5lLlBsYXllckVudGl0eSAmJiByb290ICE9PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgPT09IFByb3hpbWl0eUxheWVyLk5PTl9QTEFZRVIpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gZ2V0Um9vdCh0YXJnZXQpO1xuICAgICAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5IHx8IHJvb3QgPT09IGVuZ2luZS5DYW1lcmFFbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlIDw9IHJhZGl1cykge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGhpdHMgPT09IHVuZGVmaW5lZCA/IDEgOiBNYXRoLm1heChoaXRzLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHModGFyZ2V0KTtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fREFNQUdFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfUExBWUVSX0hFUkVcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllckhlcmUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPixcbiAgKSB7XG4gICAgY29uc3QgaGVyZSA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcbiAgICBjb25zdCByb3RhdGlvbiA9IGdldFdvcmxkUm90YXRpb24oZW50aXR5KTtcblxuICAgIC8vIFdlIFdhbnQgdGhlIHBsYXllciB0byBsb29rIDFtIGluIGZyb250IG9mIHRoZSBlbnRpdHlcbiAgICBjb25zdCBmb3J3YXJkID0gVmVjdG9yMy5Gb3J3YXJkKCk7XG4gICAgY29uc3Qgcm90YXRlZERpcmVjdGlvbiA9IFZlY3RvcjMucm90YXRlKGZvcndhcmQsIHJvdGF0aW9uKTtcbiAgICBjb25zdCBtb3ZlRGVsdGEgPSBWZWN0b3IzLnNjYWxlKHJvdGF0ZWREaXJlY3Rpb24sIDEpO1xuXG4gICAgdm9pZCBtb3ZlUGxheWVyVG8oe1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogaGVyZSxcbiAgICAgIGF2YXRhclRhcmdldDogVmVjdG9yMy5hZGQoaGVyZSwgbW92ZURlbHRhKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1BMQVlFUl9TUEFXTik7XG4gIH1cblxuICAvLyBQTEFZRVJfRkFDRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXllckZhY2VJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWUVSX0ZBQ0VfSVRFTT4sXG4gICkge1xuICAgIGNvbnN0IGl0ZW1Qb3NpdGlvbiA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcbiAgICBjb25zdCBjdXJyZW50UGxheWVyUG9zaXRpb24gPSBnZXRQbGF5ZXJQb3NpdGlvbigpO1xuICAgIHZvaWQgbW92ZVBsYXllclRvKHtcbiAgICAgIG5ld1JlbGF0aXZlUG9zaXRpb246IGN1cnJlbnRQbGF5ZXJQb3NpdGlvbixcbiAgICAgIGF2YXRhclRhcmdldDogaXRlbVBvc2l0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUExBQ0VfT05fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IHBsYXllciA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLlBsYXllckVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBwbGF5ZXIpIHtcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBsYXllci5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIHBsYXllcikge1xuICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gcGxheWVyLnJvdGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBMQUNFX09OX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVQbGFjZU9uQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBjYW1lcmEgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5DYW1lcmFFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgY2FtZXJhKSB7XG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBjYW1lcmEucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gUk9UQVRFX0FTX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVBc0NhbWVyYShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBjYW1lcmEpIHtcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IGNhbWVyYS5yb3RhdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUE9TSVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0UG9zaXRpb24oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUk9UQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0Um90YXRpb24oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUk9UQVRJT04+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLm11bHRpcGx5KFxuICAgICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgICAgICBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NDQUxFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFNjYWxlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gVmVjdG9yMy5hZGQoXG4gICAgICAgICAgdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgICAgIFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRk9MTE9XX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVGb2xsb3dQbGF5ZXIoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSPikge1xuICAgIGNvbnN0IHsgc3BlZWQsIHgsIHksIHosIG1pbkRpc3RhbmNlIH0gPSBwYXlsb2FkO1xuICAgIGZvbGxvd01hcC5zZXQoZW50aXR5LCB7XG4gICAgICB0YXJnZXQ6IGVuZ2luZS5QbGF5ZXJFbnRpdHksXG4gICAgICBzcGVlZCxcbiAgICAgIG1pbkRpc3RhbmNlLFxuICAgICAgYXhlczogeyB4LCB5LCB6IH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX0ZPTExPV0lOR19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEZvbGxvd2luZ1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUj4sXG4gICkge1xuICAgIGZvbGxvd01hcC5kZWxldGUoZW50aXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJhbmRvbShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWN0aW9ucy5sZW5ndGgpXTtcbiAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQmF0Y2goZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5CQVRDSD4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKTtcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGVhbFBsYXllcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhFQUxfUExBWUVSPikge1xuICAgIGNvbnN0IHsgbXVsdGlwbGllciB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSk7XG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgaGVhbFRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldCk7XG4gICAgICBpZiAocm9vdCA9PT0gZW5naW5lLlBsYXllckVudGl0eSkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpO1xuICAgICAgICBjb25zdCB0b3RhbCA9IE1hdGgubWF4KG11bHRpcGxpZXIgPz8gMSwgMSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9IRUFMX1BMQVlFUik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KHVybDogc3RyaW5nLCBpbml0PzogRmxhdEZldGNoSW5pdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNpZ25lZEZldGNoKHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIC4uLihpbml0ID8geyBpbml0IH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KTtcblxuICAgICAgaWYgKCFqc29uLm9rKSB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGpzb24uZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYW1wYWlnbnNCeURpc3BlbnNlcktleShkaXNwZW5zZXJLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IGAke2dldFJld2FyZHNTZXJ2ZXJVcmwoKX0vYXBpL2NhbXBhaWducy9rZXlzP2NhbXBhaWduX2tleT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNwZW5zZXJLZXkpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVybCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXB0Y2hhKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdChgJHtnZXRSZXdhcmRzU2VydmVyVXJsKCl9L2FwaS9jYXB0Y2hhYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUb2tlbihcbiAgICBkaXNwZW5zZXJLZXk6IHN0cmluZyxcbiAgICBjYXB0Y2hhPzoge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfSxcbiAgKSB7XG4gICAgY29uc3QgdXJsID0gYCR7Z2V0UmV3YXJkc1NlcnZlclVybCgpfS9hcGkvcmV3YXJkc2A7XG4gICAgY29uc3QgcmVhbG0gPSBhd2FpdCBnZXRSZWFsbSh7fSk7XG4gICAgY29uc3QgcGxheWVyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNhbXBhaWduX2tleTogZGlzcGVuc2VyS2V5LFxuICAgICAgICBiZW5lZmljaWFyeTogIXBsYXllcj8uaXNHdWVzdCA/IHBsYXllcj8udXNlcklkIDogJycsXG4gICAgICAgIGNhdGFseXN0OiByZWFsbS5yZWFsbUluZm8gPyByZWFsbS5yZWFsbUluZm8uYmFzZVVybCA6ICcnLFxuICAgICAgICAuLi4oY2FwdGNoYSA/IHsgY2FwdGNoYV9pZDogY2FwdGNoYS5pZCwgY2FwdGNoYV92YWx1ZTogY2FwdGNoYS52YWx1ZSB9IDoge30pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xhaW1BaXJkcm9wKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMQUlNX0FJUkRST1A+KSB7XG4gICAgY29uc3QgcmV3YXJkcyA9IFJld2FyZHMuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCFyZXdhcmRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB0ZXN0TW9kZSwgY2FtcGFpZ25JZCwgZGlzcGVuc2VyS2V5IH0gPSByZXdhcmRzO1xuXG4gICAgaWYgKHRlc3RNb2RlKSB7XG4gICAgICAvLyBUT0RPOiBTaG93IGFuIFVJIGluZGljYXRpbmcgdGVzdGluZyBtb2RlXG4gICAgICAvLyAnSGFuZGxlIENsYWltIEFpcmRyb3AgaW4gVGVzdCBNb2RlIDopJ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZldGNoQ2FtcGFpZ25zQnlEaXNwZW5zZXJLZXkoZGlzcGVuc2VyS2V5KVxuICAgICAgLnRoZW4oY2FtcGFpZ25zID0+IHtcbiAgICAgICAgY29uc3QgY2FtcGFpZ24gPSBjYW1wYWlnbnMuZmluZCgoYzogYW55KSA9PiBjLmNhbXBhaWduX2lkID09PSBjYW1wYWlnbklkKTtcbiAgICAgICAgaWYgKGNhbXBhaWduICYmIGNhbXBhaWduLmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoY2FtcGFpZ24ucmVxdWlyZXNfY2FwdGNoYSkge1xuICAgICAgICAgICAgZmV0Y2hDYXB0Y2hhKClcbiAgICAgICAgICAgICAgLnRoZW4oY2FwdGNoYSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhcHRjaGEpIHtcbiAgICAgICAgICAgICAgICAgIF9zaG93Q2FwdGNoYVByb21wdChlbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25JZCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGVuc2VyS2V5LFxuICAgICAgICAgICAgICAgICAgICBjYXB0Y2hhLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAgICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYXB0Y2hhJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdFRva2VuKGRpc3BlbnNlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKF9lcnJvciA9PiB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJywgZXJyb3JcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Nob3dDYXB0Y2hhUHJvbXB0KFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBkYXRhOiB7IGNhbXBhaWduSWQ6IHN0cmluZzsgZGlzcGVuc2VyS2V5OiBzdHJpbmc7IGNhcHRjaGE6IGFueSB9LFxuICApIHtcbiAgICBzaG93Q2FwdGNoYVByb21wdChcbiAgICAgIGVuZ2luZSxcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgVWlCYWNrZ3JvdW5kLFxuICAgICAgVWlUZXh0LFxuICAgICAgVWlJbnB1dCxcbiAgICAgIFVpSW5wdXRSZXN1bHQsXG4gICAgICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICAgICAgZGF0YSxcbiAgICAgIGlucHV0VGV4dCA9PiB7XG4gICAgICAgIC8vIFJlcXVlc3QgdG9rZW4gd2l0aCBjYXB0Y2hhIHZhbGlkYXRpb25cbiAgICAgICAgcmVxdWVzdFRva2VuKGRhdGEuZGlzcGVuc2VyS2V5LCB7XG4gICAgICAgICAgaWQ6IGRhdGEuY2FwdGNoYS5pZCxcbiAgICAgICAgICB2YWx1ZTogaW5wdXRUZXh0LFxuICAgICAgICB9KS50aGVuKCh0b2tlbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAvLyAnVG9rZW4gcmVxdWVzdGVkIHN1Y2Nlc3NmdWxseScsIHsgdG9rZW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDYWxsU2NyaXB0TWV0aG9kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q+LFxuICApIHtcbiAgICBjb25zdCB7IHNjcmlwdFBhdGgsIG1ldGhvZE5hbWUsIHBhcmFtcyB9ID0gcGF5bG9hZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbVZhbHVlcyA9IE9iamVjdC52YWx1ZXMocGFyYW1zIHx8IHt9KTtcbiAgICAgIGNhbGxTY3JpcHRNZXRob2QoZW50aXR5LCBzY3JpcHRQYXRoLCBtZXRob2ROYW1lLCAuLi5wYXJhbVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTY3JpcHQgQWN0aW9uIEVycm9yXSBGYWlsZWQgdG8gY2FsbCAke21ldGhvZE5hbWV9IG9uICR7c2NyaXB0UGF0aH06YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIExPR19UT19DT05TT0xFXG4gIGZ1bmN0aW9uIGhhbmRsZUxvZ1RvQ29uc29sZShwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU+KSB7XG4gICAgY29uc29sZS5sb2cocGF5bG9hZC5tZXNzYWdlKTtcbiAgfVxuXG4gIC8vIERFTEVURVxuICBmdW5jdGlvbiBoYW5kbGVEZWxldGUoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KTtcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSk7XG4gICAgZW5naW5lLnJlbW92ZUVudGl0eVdpdGhDaGlsZHJlbihlbnRpdHkpO1xuICB9XG59XG4iXX0=
|