@dcl/asset-packs 2.11.6 → 2.11.7
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 +505 -288
- package/catalog.json +11 -4
- package/dist/action-types.js +7 -4
- package/dist/actions.js +4 -4
- package/dist/admin-toolkit-ui/RewardsControl.js +6 -4
- package/dist/admin-toolkit-ui/SmartItemsControl.js +4 -4
- package/dist/admin-toolkit-ui/VideoControl/index.js +2 -2
- package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +2 -4
- package/dist/admin-toolkit-ui/VideoControl/utils.js +6 -3
- package/dist/bin/index.js +505 -288
- package/dist/constants.d.ts +23 -0
- package/dist/constants.js +26 -0
- package/dist/definitions.d.ts +90 -86
- package/dist/definitions.js +20 -142
- package/dist/enums.d.ts +19 -59
- package/dist/enums.js +21 -66
- package/dist/trigger-enums.d.ts +36 -0
- package/dist/trigger-enums.js +40 -0
- package/dist/triggers.js +4 -4
- package/dist/types.js +4 -3
- package/dist/versioning/framework.d.ts +20 -0
- package/dist/versioning/framework.js +141 -0
- package/dist/versioning/index.d.ts +5 -0
- package/dist/versioning/index.js +5 -0
- package/dist/versioning/registry.d.ts +135 -0
- package/dist/versioning/registry.js +162 -0
- package/package.json +2 -2
package/dist/actions.js
CHANGED
|
@@ -439,7 +439,7 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
439
439
|
function handlePlayAnimation(entity, payload) {
|
|
440
440
|
const { animation, loop, shouldReset } = payload;
|
|
441
441
|
const animator = Animator.getMutable(entity);
|
|
442
|
-
if (!animator.states.some($ => $.clip === animation)) {
|
|
442
|
+
if (!animator.states.some(($) => $.clip === animation)) {
|
|
443
443
|
animator.states = [
|
|
444
444
|
...animator.states,
|
|
445
445
|
{
|
|
@@ -809,7 +809,7 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
809
809
|
}
|
|
810
810
|
function findActionByName(entity, name) {
|
|
811
811
|
const actions = Actions.getOrNull(entity);
|
|
812
|
-
return actions?.value.find($ => $.name === name);
|
|
812
|
+
return actions?.value.find(($) => $.name === name);
|
|
813
813
|
}
|
|
814
814
|
function handleStartDelay(entity, payload) {
|
|
815
815
|
const { actions, timeout } = payload;
|
|
@@ -928,7 +928,7 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
928
928
|
const targetPosition = getWorldPosition(target);
|
|
929
929
|
const distance = Vector3.distance(entityPosition, targetPosition);
|
|
930
930
|
const entityTree = Array.from(getComponentEntityTree(engine, entity, Transform));
|
|
931
|
-
const isPartOfEntityTree = entityTree.some($ => $ === target);
|
|
931
|
+
const isPartOfEntityTree = entityTree.some(($) => $ === target);
|
|
932
932
|
if (isPartOfEntityTree) {
|
|
933
933
|
continue;
|
|
934
934
|
}
|
|
@@ -1201,4 +1201,4 @@ export function createActionsSystem(engine, pointerEventsSystem, sdkHelpers, pla
|
|
|
1201
1201
|
engine.removeEntityWithChildren(entity);
|
|
1202
1202
|
}
|
|
1203
1203
|
}
|
|
1204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUtYLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFD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QVksRUFBRTtnQkFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbkIsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNyQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUVaLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsc0JBQXNCLENBQzdCLE1BQWMsRUFDZCxPQUFxRDtRQUVyRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFbkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLFVBQVUsT0FBTyxVQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsa0JBQWtCLENBQUMsT0FBaUQ7UUFDM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUdELFNBQVMsWUFBWSxDQUFDLE1BQWM7UUFDbEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBUZXh0QWxpZ25Nb2RlLFxuICBGb250LFxuICBNb3ZlLFxuICBQQlR3ZWVuLFxuICBSb3RhdGUsXG4gIFNjYWxlLFxuICBQb2ludGVyRXZlbnRzU3lzdGVtLFxufSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQge1xuICBNYXRlcmlhbCxcbiAgQXVkaW9TdHJlYW0sXG4gIFlHVW5pdCxcbiAgWUdQb3NpdGlvblR5cGUsXG4gIFBvaW50ZXJGaWx0ZXJNb2RlLFxuICBJbnB1dEFjdGlvbixcbiAgTWVzaENvbGxpZGVyLFxuICBnZXRDb21wb25lbnRFbnRpdHlUcmVlLFxuICBUd2Vlbixcbn0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnO1xuaW1wb3J0IHR5cGUgeyBUZXh0dXJlTW92ZW1lbnRUeXBlIGFzIFNka1RleHR1cmVNb3ZlbWVudFR5cGUgfSBmcm9tICdAZGNsL2Vjcy9kaXN0L2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2RlY2VudHJhbGFuZC9zZGsvY29tcG9uZW50cy90d2Vlbi5nZW4nO1xuaW1wb3J0IHsgZ2V0RW50aXR5UGFyZW50LCBnZXRQbGF5ZXJQb3NpdGlvbiwgZ2V0V29ybGRQb3NpdGlvbiwgZ2V0V29ybGRSb3RhdGlvbiB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblBheWxvYWQsIElTREtIZWxwZXJzLCBJUGxheWVyc0hlbHBlciwgU2NyZWVuQWxpZ25Nb2RlIH0gZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQge1xuICBBY3Rpb25UeXBlLFxuICBQcm94aW1pdHlMYXllcixcbiAgVHJpZ2dlclR5cGUsXG4gIFR3ZWVuVHlwZSxcbiAgVGVsZXBvcnRNb2RlLFxuICBjbG9uZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlLCBpc1ZhbGlkU3RhdGUgfSBmcm9tICcuL3N0YXRlcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FdmVudHMsIGdldFRyaWdnZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0VUlCYWNrZ3JvdW5kLFxuICBnZXRVSVRleHQsXG4gIGdldFVJVHJhbnNmb3JtLFxuICBtYXBBbGlnblRvU2NyZWVuQWxpZ24sXG4gIHNob3dDYXB0Y2hhUHJvbXB0LFxufSBmcm9tICcuL3VpJztcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBpbml0VHJpZ2dlcnMsIGRhbWFnZVRhcmdldHMsIGhlYWxUYXJnZXRzIH0gZnJvbSAnLi90cmlnZ2Vycyc7XG5pbXBvcnQgeyBmb2xsb3dNYXAgfSBmcm9tICcuL3RyYW5zZm9ybSc7XG5pbXBvcnQgeyBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uIH0gZnJvbSAnLi90d2VlbnMnO1xuaW1wb3J0IHsgUkVXQVJEU19TRVJWRVJfVVJMIH0gZnJvbSAnLi9hZG1pbi10b29sa2l0LXVpL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjYWxsU2NyaXB0TWV0aG9kIH0gZnJvbSAnfnNkay9zY3JpcHQtdXRpbHMnO1xuaW1wb3J0IHtcbiAgbW92ZVBsYXllclRvLFxuICB0cmlnZ2VyRW1vdGUsXG4gIHRyaWdnZXJTY2VuZUVtb3RlLFxuICBvcGVuRXh0ZXJuYWxVcmwsXG4gIHRlbGVwb3J0VG8sXG4gIGNoYW5nZVJlYWxtLFxufSBmcm9tICd+c3lzdGVtL1Jlc3RyaWN0ZWRBY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgRmxhdEZldGNoSW5pdCB9IGZyb20gJ35zeXN0ZW0vU2lnbmVkRmV0Y2gnO1xuaW1wb3J0IHsgZ2V0UmVhbG0gfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnO1xuaW1wb3J0IHsgc2lnbmVkRmV0Y2ggfSBmcm9tICd+c3lzdGVtL1NpZ25lZEZldGNoJztcblxuY29uc3QgaW5pdGVkRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKTtcbmNvbnN0IHVpU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKTtcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpO1xuY29uc3QgdGV4dEVudGl0aWVzID0gbmV3IE1hcDxFbnRpdHksIEVudGl0eT4oKTsgLy8gTW9kZWwgRW50aXR5LCBUZXh0IEVudGl0eVxuXG5sZXQgaW50ZXJuYWxJbml0QWN0aW9uczogKChlbnRpdHk6IEVudGl0eSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gIGlmIChpbnRlcm5hbEluaXRBY3Rpb25zKSB7XG4gICAgcmV0dXJuIGludGVybmFsSW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGluaXRBY3Rpb25zIHdoaWxlIGFjdGlvbnNTeXN0ZW0gaGFzIG5vdCBiZWVuIGNyZWF0ZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICAgIFVpVHJhbnNmb3JtLFxuICAgIFVpVGV4dCxcbiAgICBVaUJhY2tncm91bmQsXG4gICAgVWlJbnB1dCxcbiAgICBVaUlucHV0UmVzdWx0LFxuICAgIFR3ZWVuOiBUd2VlbkNvbXBvbmVudCxcbiAgICBUd2VlblNlcXVlbmNlLFxuICAgIFZpZGVvUGxheWVyLFxuICAgIExpZ2h0U291cmNlLFxuICAgIE1haW5DYW1lcmEsXG4gICAgVmlydHVhbENhbWVyYSxcbiAgICBUZXh0U2hhcGUsXG4gICAgSW5wdXRNb2RpZmllcixcbiAgICBTa3lib3hUaW1lLFxuICB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSk7XG4gIGNvbnN0IHsgQWN0aW9ucywgU3RhdGVzLCBDb3VudGVyLCBUcmlnZ2VycywgUmV3YXJkcyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKTtcblxuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW50aXRpZXNXaXRoQWN0aW9ucykge1xuICAgICAgaW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdEFjdGlvbnMoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFjdGlvbnMuaGFzKGVudGl0eSkgfHwgaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYWN0aW9ucyBkYXRhXG4gICAgY29uc3QgYWN0aW9ucyA9IEFjdGlvbnMuZ2V0KGVudGl0eSk7XG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXMsIGFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgIG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICBpbml0UGxheUFuaW1hdGlvbihlbnRpdHkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYmluZCBhY3Rpb25zXG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucy52YWx1ZSkge1xuICAgICAgYWN0aW9uRXZlbnRzLm9uKGFjdGlvbi5uYW1lLCAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBbmltYXRpb24oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TVEFURToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U3RhdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NUQVRFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1RXRUVOOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wVHdlZW4oZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0xJREVfVEVYVFVSRToge1xuICAgICAgICAgICAgaGFuZGxlU2xpZGVUZXh0dXJlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNMSURFX1RFWFRVUkU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlU2V0Q291bnRlcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfQ09VTlRFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSOiB7XG4gICAgICAgICAgICBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUjoge1xuICAgICAgICAgICAgaGFuZGxlRGVjcmVhc2VDb3VudGVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfU09VTkQ6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk6IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFZpc2liaWxpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVBdHRhY2hUb1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5VmlkZW8oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9WSURFT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1ZJREVPX1NUUkVBTToge1xuICAgICAgICAgICAgaGFuZGxlU3RvcFZpZGVvKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXlBdWRpb1N0cmVhbShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNOiB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9BVURJT19TVFJFQU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVRlbGVwb3J0UGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlRFTEVQT1JUX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLk1PVkVfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVNb3ZlUGxheWVyKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk1PVkVfUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfREVGQVVMVF9FTU9URT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQ1VTVE9NX0VNT1RFOiB7XG4gICAgICAgICAgICBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9DVVNUT01fRU1PVEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5PUEVOX0xJTks6IHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW5MaW5rKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLk9QRU5fTElOSz4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNIT1dfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlU2hvd1RleHQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19URVhUPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSElERV9URVhUOiB7XG4gICAgICAgICAgICBoYW5kbGVIaWRlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX1RFWFQ+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9ERUxBWToge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnREZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9ERUxBWT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfREVMQVk6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BEZWxheShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0RFTEFZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfTE9PUDoge1xuICAgICAgICAgICAgaGFuZGxlU3RhcnRMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0xPT1A+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0xPT1A6IHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BMb29wKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfTE9PUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNMT05FX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlQ2xvbmVFbnRpdHkoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xPTkVfRU5USVRZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVNT1ZFX0VOVElUWToge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3ZlRW50aXR5KGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TSE9XX0lNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVTaG93SW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0hPV19JTUFHRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkhJREVfSU1BR0U6IHtcbiAgICAgICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ISURFX0lNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREFNQUdFOiB7XG4gICAgICAgICAgICBoYW5kbGVEYW1hZ2UoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuREFNQUdFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRToge1xuICAgICAgICAgICAgaGFuZGxlTW92ZVBsYXllckhlcmUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRT4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU06IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYXllckZhY2VJdGVtKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU0+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSOiB7XG4gICAgICAgICAgICBoYW5kbGVGb2xsb3dQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuRk9MTE9XX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlU3RvcEZvbGxvd2luZ1BsYXllcihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVBsYWNlT25QbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fUExBWUVSPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUjoge1xuICAgICAgICAgICAgaGFuZGxlUm90YXRlQXNQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQUNFX09OX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlUGxhY2VPbkNhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBOiB7XG4gICAgICAgICAgICBoYW5kbGVSb3RhdGVBc0NhbWVyYShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OOiB7XG4gICAgICAgICAgICBoYW5kbGVTZXRQb3NpdGlvbihlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfUk9UQVRJT046IHtcbiAgICAgICAgICAgIGhhbmRsZVNldFJvdGF0aW9uKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9ST1RBVElPTj4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TQ0FMRToge1xuICAgICAgICAgICAgaGFuZGxlU2V0U2NhbGUoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkFORE9NOiB7XG4gICAgICAgICAgICBoYW5kbGVSYW5kb20oZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUkFORE9NPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQkFUQ0g6IHtcbiAgICAgICAgICAgIGhhbmRsZUJhdGNoKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkJBVENIPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSEVBTF9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUhlYWxQbGF5ZXIoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSEVBTF9QTEFZRVI+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DTEFJTV9BSVJEUk9QOiB7XG4gICAgICAgICAgICBoYW5kbGVDbGFpbUFpcmRyb3AoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0xBSU1fQUlSRFJPUD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19PTjoge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzT24oZW50aXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTElHSFRTX09GRjoge1xuICAgICAgICAgICAgaGFuZGxlTGlnaHRzT2ZmKGVudGl0eSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkxJR0hUU19NT0RJRlk6IHtcbiAgICAgICAgICAgIGhhbmRsZUxpZ2h0c01vZGlmeShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5MSUdIVFNfTU9ESUZZPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX0NBTUVSQToge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlQ2FtZXJhKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DQU1FUkE+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DSEFOR0VfVEVYVDoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlVGV4dChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfVEVYVD4oYWN0aW9uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkZSRUVaRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZUZyZWV6ZVBsYXllcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5VTkZSRUVaRV9QTEFZRVI6IHtcbiAgICAgICAgICAgIGhhbmRsZVVuZnJlZXplUGxheWVyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TOiB7XG4gICAgICAgICAgICBoYW5kbGVDaGFuZ2VDb2xsaXNpb25zKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWDoge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlU2t5Ym94KGdldFBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfU0tZQk9YPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUkVTRVRfU0tZQk9YOiB7XG4gICAgICAgICAgICBoYW5kbGVSZXNldFNreWJveCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q6IHtcbiAgICAgICAgICAgIGhhbmRsZUNhbGxTY3JpcHRNZXRob2QoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuQ0FMTF9TQ1JJUFRfTUVUSE9EPihhY3Rpb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU6IHtcbiAgICAgICAgICAgIGhhbmRsZUxvZ1RvQ29uc29sZShnZXRQYXlsb2FkPEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU+KGFjdGlvbikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUxFVEU6IHtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZShlbnRpdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdGVkRW50aXRpZXMuYWRkKGVudGl0eSk7XG4gIH1cblxuICAvLyBMSUdIVFNfT05cbiAgZnVuY3Rpb24gaGFuZGxlTGlnaHRzT24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAobGlnaHQpIHtcbiAgICAgIGxpZ2h0LmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gTElHSFRTX09GRlxuICBmdW5jdGlvbiBoYW5kbGVMaWdodHNPZmYoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAobGlnaHQpIHtcbiAgICAgIGxpZ2h0LmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIExJR0hUU19NT0RJRllcbiAgZnVuY3Rpb24gaGFuZGxlTGlnaHRzTW9kaWZ5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTElHSFRTX01PRElGWT4pIHtcbiAgICBjb25zdCBsaWdodCA9IExpZ2h0U291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIWxpZ2h0KSByZXR1cm47XG4gICAgaWYgKHBheWxvYWQuYWN0aXZlICE9PSB1bmRlZmluZWQpIGxpZ2h0LmFjdGl2ZSA9IHBheWxvYWQuYWN0aXZlO1xuICAgIGlmIChwYXlsb2FkLmNvbG9yKSBsaWdodC5jb2xvciA9IHBheWxvYWQuY29sb3I7XG4gICAgaWYgKHBheWxvYWQuaW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIGxpZ2h0LmludGVuc2l0eSA9IHBheWxvYWQuaW50ZW5zaXR5O1xuICB9XG5cbiAgLy8gQ0hBTkdFX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VDYW1lcmEoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DSEFOR0VfQ0FNRVJBPikge1xuICAgIGNvbnN0IHRhcmdldCA9IHBheWxvYWQudmlydHVhbENhbWVyYUVudGl0eTtcblxuICAgIC8vIElmIHRhcmdldCBpcyB1bmRlZmluZWQsIHVzZSB0aGUgZW50aXR5IHRoYXQgb3ducyB0aGUgQWN0aW9ucyBjb21wb25lbnRcbiAgICAvLyBJZiB0aGF0IGVudGl0eSBoYXMgVmlydHVhbENhbWVyYSwgdXNlIGl0OyBvdGhlcndpc2UgcmV2ZXJ0IHRvIG5vcm1hbCBiZWhhdmlvclxuICAgIGxldCBjYW1lcmFFbnRpdHk6IEVudGl0eSB8IHVuZGVmaW5lZCA9IHRhcmdldDtcblxuICAgIGlmIChjYW1lcmFFbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIHRoZSBlbnRpdHkgdGhhdCBvd25zIHRoZSBBY3Rpb25zIGNvbXBvbmVudCBpZiBpdCBoYXMgVmlydHVhbENhbWVyYVxuICAgICAgaWYgKFZpcnR1YWxDYW1lcmEuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY2FtZXJhRW50aXR5ID0gZW50aXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gY2FtZXJhIHNwZWNpZmllZCBhbmQgZW50aXR5IGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsQ2FtZXJhLCByZXZlcnQgdG8gbm9ybWFsXG4gICAgICAgIGlmIChNYWluQ2FtZXJhLmhhcyhlbmdpbmUuQ2FtZXJhRW50aXR5KSkge1xuICAgICAgICAgIE1haW5DYW1lcmEuZGVsZXRlRnJvbShlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBpZiB0YXJnZXQgaXMgMCAoUm9vdEVudGl0eSksIHRyZWF0IGl0IGFzIFwicmVtb3ZlIGNhbWVyYVwiXG4gICAgLy8gVGhpcyBhbGxvd3MgdXNpbmcgMCBhcyBhIHNlbnRpbmVsIHZhbHVlIGluIGNvbXBvc2l0ZS5qc29uXG4gICAgaWYgKGNhbWVyYUVudGl0eSA9PT0gZW5naW5lLlJvb3RFbnRpdHkpIHtcbiAgICAgIGlmIChNYWluQ2FtZXJhLmhhcyhlbmdpbmUuQ2FtZXJhRW50aXR5KSkge1xuICAgICAgICBNYWluQ2FtZXJhLmRlbGV0ZUZyb20oZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoZSBzZWxlY3RlZCBlbnRpdHkgaGFzIFZpcnR1YWxDYW1lcmEgYmVmb3JlIGFwcGx5aW5nXG4gICAgaWYgKCFWaXJ0dWFsQ2FtZXJhLmhhcyhjYW1lcmFFbnRpdHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTWFpbkNhbWVyYS5jcmVhdGVPclJlcGxhY2UoZW5naW5lLkNhbWVyYUVudGl0eSwge1xuICAgICAgdmlydHVhbENhbWVyYUVudGl0eTogY2FtZXJhRW50aXR5LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ0hBTkdFX1RFWFRcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlVGV4dChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9URVhUPikge1xuICAgIGNvbnN0IHRleHQgPSBUZXh0U2hhcGUuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuXG4gICAgdGV4dC50ZXh0ID0gcGF5bG9hZC50ZXh0O1xuICAgIGlmIChwYXlsb2FkLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHRleHQuZm9udFNpemUgPSBwYXlsb2FkLmZvbnRTaXplO1xuICAgIGlmIChwYXlsb2FkLmNvbG9yKSB0ZXh0LnRleHRDb2xvciA9IHBheWxvYWQuY29sb3I7XG4gIH1cblxuICAvLyBGUkVFWkVfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUZyZWV6ZVBsYXllcigpIHtcbiAgICBJbnB1dE1vZGlmaWVyLmNyZWF0ZU9yUmVwbGFjZShlbmdpbmUuUGxheWVyRW50aXR5LCB7XG4gICAgICBtb2RlOiBJbnB1dE1vZGlmaWVyLk1vZGUuU3RhbmRhcmQoe1xuICAgICAgICBkaXNhYmxlQWxsOiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBVTkZSRUVaRV9QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVW5mcmVlemVQbGF5ZXIoKSB7XG4gICAgSW5wdXRNb2RpZmllci5jcmVhdGVPclJlcGxhY2UoZW5naW5lLlBsYXllckVudGl0eSwge1xuICAgICAgbW9kZTogSW5wdXRNb2RpZmllci5Nb2RlLlN0YW5kYXJkKHtcbiAgICAgICAgZGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENIQU5HRV9DT0xMSVNJT05TXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZUNvbGxpc2lvbnMoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNIQU5HRV9DT0xMSVNJT05TPixcbiAgKSB7XG4gICAgY29uc3QgeyB2aXNpYmxlQ29sbGlzaW9ucywgaW52aXNpYmxlQ29sbGlzaW9ucyB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBnbHRmID0gR2x0ZkNvbnRhaW5lci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgbWVzaENvbGxpZGVyID0gTWVzaENvbGxpZGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChnbHRmKSB7XG4gICAgICBpZiAodmlzaWJsZUNvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbHRmLnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gdmlzaWJsZUNvbGxpc2lvbnM7XG4gICAgICB9XG4gICAgICBpZiAoaW52aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsdGYuaW52aXNpYmxlTWVzaGVzQ29sbGlzaW9uTWFzayA9IGludmlzaWJsZUNvbGxpc2lvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgLy8gRm9yIE1lc2hDb2xsaWRlciwgdXNlIHZpc2libGVDb2xsaXNpb25zIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgaW52aXNpYmxlQ29sbGlzaW9uc1xuICAgICAgaWYgKHZpc2libGVDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVzaENvbGxpZGVyLmNvbGxpc2lvbk1hc2sgPSB2aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH0gZWxzZSBpZiAoaW52aXNpYmxlQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lc2hDb2xsaWRlci5jb2xsaXNpb25NYXNrID0gaW52aXNpYmxlQ29sbGlzaW9ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDSEFOR0VfU0tZQk9YXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVNreWJveChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0hBTkdFX1NLWUJPWD4pIHtcbiAgICBjb25zdCB7IHRpbWUsIGRpcmVjdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEVuc3VyZSB0aW1lIGlzIGEgdmFsaWQgbnVtYmVyIChzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0KVxuICAgIGlmICh0eXBlb2YgdGltZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odGltZSkgfHwgdGltZSA8IDAgfHwgdGltZSA+IDg2NDAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHNreWJveCB0aW1lIHZhbHVlOicsIHRpbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFNreWJveFRpbWUuY3JlYXRlT3JSZXBsYWNlKGVuZ2luZS5Sb290RW50aXR5LCB7XG4gICAgICBmaXhlZFRpbWU6IHRpbWUsXG4gICAgICB0cmFuc2l0aW9uTW9kZTogZGlyZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkVTRVRfU0tZQk9YXG4gIGZ1bmN0aW9uIGhhbmRsZVJlc2V0U2t5Ym94KCkge1xuICAgIGlmIChTa3lib3hUaW1lLmhhcyhlbmdpbmUuUm9vdEVudGl0eSkpIHtcbiAgICAgIFNreWJveFRpbWUuZGVsZXRlRnJvbShlbmdpbmUuUm9vdEVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICAgIHN0YXRlczogW10sXG4gICAgICB9KTtcbiAgICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplQW5pbWF0aW9uV2VpZ2h0KHJhd1dlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmF3V2VpZ2h0IDwgMCB8fCByYXdXZWlnaHQgPiAxKSByZXR1cm4gMTtcbiAgICByZXR1cm4gcmF3V2VpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUFuaW1hdGlvbihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPikge1xuICAgIGNvbnN0IHsgYW5pbWF0aW9uLCBsb29wLCBzaG91bGRSZXNldCB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGFuaW1hdG9yID0gQW5pbWF0b3IuZ2V0TXV0YWJsZShlbnRpdHkpO1xuICAgIGlmICghYW5pbWF0b3Iuc3RhdGVzLnNvbWUoJCA9PiAkLmNsaXAgPT09IGFuaW1hdGlvbikpIHtcbiAgICAgIGFuaW1hdG9yLnN0YXRlcyA9IFtcbiAgICAgICAgLi4uYW5pbWF0b3Iuc3RhdGVzLFxuICAgICAgICB7XG4gICAgICAgICAgY2xpcDogYW5pbWF0aW9uLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaXAgPSBBbmltYXRvci5nZXRDbGlwKGVudGl0eSwgYW5pbWF0aW9uKTtcbiAgICAgIGNsaXAucGxheWluZyA9IHRydWU7XG4gICAgICBjbGlwLmxvb3AgPSBsb29wID8/IGZhbHNlO1xuICAgICAgY2xpcC53ZWlnaHQgPSBub3JtYWxpemVBbmltYXRpb25XZWlnaHQoY2xpcC53ZWlnaHQgPz8gMSk7XG4gICAgICBpZiAoc2hvdWxkUmVzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGlwLnNob3VsZFJlc2V0ID0gc2hvdWxkUmVzZXQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGxheWluZyBhbmltYXRpb24nLCBlKTtcbiAgICB9XG4gIH1cblxuICAvLyBTVE9QX0FOSU1BVElPTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQW5pbWF0aW9uKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPikge1xuICAgIGlmIChBbmltYXRvci5oYXMoZW50aXR5KSkge1xuICAgICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfU1RBVEVcbiAgZnVuY3Rpb24gaGFuZGxlU2V0U3RhdGUoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KSB7XG4gICAgY29uc3Qgc3RhdGVzID0gU3RhdGVzLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChzdGF0ZXMpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpO1xuICAgICAgbGV0IG5leHRTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGF5bG9hZC5zdGF0ZTtcbiAgICAgIG5leHRTdGF0ZSA9IGlzVmFsaWRTdGF0ZShzdGF0ZXMsIG5leHRTdGF0ZSkgPyBuZXh0U3RhdGUgOiBkZWZhdWx0VmFsdWU7XG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gc3RhdGVzLmN1cnJlbnRWYWx1ZSA/PyBkZWZhdWx0VmFsdWUgPz8gdW5kZWZpbmVkO1xuICAgICAgc3RhdGVzLnByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1ZhbHVlO1xuICAgICAgc3RhdGVzLmN1cnJlbnRWYWx1ZSA9IG5leHRTdGF0ZTtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9TVEFURV9DSEFOR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNUQVJUX1RXRUVOXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VHdlZW4oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgLy8gR2V0IHRoZSBpbml0aWFsIHR3ZWVuIGlmIGV4aXN0cyB0byByZXZlcnQgdGhlIG9iamVjdCBtb3ZlbWVudCB0byB0aGF0IHNlcXVlbmNlIHdoZW4gZXhlY3V0aW5nIGEgdHdlZW4gZnJvbSBhY3Rpb25zXG4gICAgICBjb25zdCBpbml0aWFsVHdlZW4gPSBUd2VlbkNvbXBvbmVudC5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgICBsZXQgdHdlZW47XG5cbiAgICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLk1PVkVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFR3ZWVuVHlwZS5ST1RBVEVfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlUm90YXRlSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlNDQUxFX0lURU06IHtcbiAgICAgICAgICB0d2VlbiA9IGhhbmRsZVNjYWxlSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLktFRVBfUk9UQVRJTkdfSVRFTToge1xuICAgICAgICAgIHR3ZWVuID0gaGFuZGxlS2VlcFJvdGF0aW5nSXRlbShlbnRpdHksIHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gdHlwZTogJHtwYXlsb2FkLnR5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV2ZXJ0VHdlZW4oZW50aXR5LCBpbml0aWFsVHdlZW4sIHR3ZWVuKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXN0YXJ0IHRvIHRoZSBpbml0aWFsIG1vdmVtZW50IHNlcXVlbmNlIHdoZW4gZXhlY3V0aW5nIGFuIGFkaXRpb25hbCB0d2VlblxuICBmdW5jdGlvbiByZXZlcnRUd2VlbihlbnRpdHk6IEVudGl0eSwgaW5pdGlhbFR3ZWVuOiBQQlR3ZWVuIHwgbnVsbCwgdHdlZW46IFBCVHdlZW4pIHtcbiAgICBjb25zdCB0d2VlblNlcXVlbmNlID0gVHdlZW5TZXF1ZW5jZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgbGV0IF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgIC4uLnR3ZWVuLFxuICAgIH07XG5cbiAgICBpZiAoIWluaXRpYWxUd2VlbiB8fCAhdHdlZW5TZXF1ZW5jZSB8fCAhdHdlZW5TZXF1ZW5jZS5sb29wKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGluaXRpYWxUd2Vlbi5tb2RlPy4kY2FzZSkge1xuICAgICAgY2FzZSAnbW92ZSc6IHtcbiAgICAgICAgX3JldmVydFR3ZWVuID0ge1xuICAgICAgICAgIC4uLl9yZXZlcnRUd2VlbixcbiAgICAgICAgICBtb2RlOiBUd2Vlbi5Nb2RlLk1vdmUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdtb3ZlJzsgbW92ZTogTW92ZSB9KS5tb3ZlLmVuZCxcbiAgICAgICAgICAgIGVuZDogaW5pdGlhbFR3ZWVuLm1vZGUubW92ZS5zdGFydCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdyb3RhdGUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5Sb3RhdGUoe1xuICAgICAgICAgICAgc3RhcnQ6ICh0d2Vlbi5tb2RlIGFzIHsgJGNhc2U6ICdyb3RhdGUnOyByb3RhdGU6IFJvdGF0ZSB9KS5yb3RhdGUuZW5kLFxuICAgICAgICAgICAgZW5kOiBpbml0aWFsVHdlZW4ubW9kZS5yb3RhdGUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2NhbGUnOiB7XG4gICAgICAgIF9yZXZlcnRUd2VlbiA9IHtcbiAgICAgICAgICAuLi5fcmV2ZXJ0VHdlZW4sXG4gICAgICAgICAgbW9kZTogVHdlZW4uTW9kZS5TY2FsZSh7XG4gICAgICAgICAgICBzdGFydDogKHR3ZWVuLm1vZGUgYXMgeyAkY2FzZTogJ3NjYWxlJzsgc2NhbGU6IFNjYWxlIH0pLnNjYWxlLmVuZCxcbiAgICAgICAgICAgIGVuZDogaW5pdGlhbFR3ZWVuLm1vZGUuc2NhbGUuc3RhcnQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHdlZW4gbW9kZTogJHtpbml0aWFsVHdlZW4ubW9kZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaW5pdGlhbCB0d2VlbiBpcyBub3QgcGxheWluZyBidXQgdGhlIGxvb3AgcHJvcGVydHkgaXMgYWN0aXZlLCBzdGFydCBpdFxuICAgIGluaXRpYWxUd2Vlbi5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0d2VlblNlcXVlbmNlLnNlcXVlbmNlID0gW19yZXZlcnRUd2VlbiwgaW5pdGlhbFR3ZWVuXTtcbiAgfVxuXG4gIC8vIE1PVkVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVNb3ZlSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSk7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KTtcbiAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnBvc2l0aW9uLCBlbmQpIDogZW5kO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuTW92ZSh7XG4gICAgICAgIHN0YXJ0OiB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgIGVuZDogZW5kUG9zaXRpb24sXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDEwMDAsIC8vIGZyb20gc2VjcyB0byBtc1xuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUk9UQVRFX0lURU1cbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSk7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXModHdlZW4uZW5kLngsIHR3ZWVuLmVuZC55LCB0d2Vlbi5lbmQueik7XG4gICAgY29uc3QgZW5kUm90YXRpb24gPSByZWxhdGl2ZSA/IFF1YXRlcm5pb24ubXVsdGlwbHkodHJhbnNmb3JtLnJvdGF0aW9uLCBlbmQpIDogZW5kO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuUm90YXRlKHtcbiAgICAgICAgc3RhcnQ6IHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgICAgZW5kOiBlbmRSb3RhdGlvbixcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCwgLy8gZnJvbSBzZWNzIHRvIG1zXG4gICAgICBlYXNpbmdGdW5jdGlvbjogZ2V0RWFzaW5nRnVuY3Rpb25Gcm9tSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBTQ0FMRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVNjYWxlSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KGVudGl0eSk7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlbjtcbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KTtcbiAgICBjb25zdCBlbmRTY2FsZSA9IHJlbGF0aXZlID8gVmVjdG9yMy5hZGQodHJhbnNmb3JtLnNjYWxlLCBlbmQpIDogZW5kO1xuXG4gICAgcmV0dXJuIFR3ZWVuQ29tcG9uZW50LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIG1vZGU6IFR3ZWVuLk1vZGUuU2NhbGUoe1xuICAgICAgICBzdGFydDogdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgICBlbmQ6IGVuZFNjYWxlLFxuICAgICAgfSksXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLCAvLyBmcm9tIHNlY3MgdG8gbXNcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25UeXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEtFRVBfUk9UQVRJTkdfSVRFTSAoY29udGludW91cyByb3RhdGlvbilcbiAgZnVuY3Rpb24gaGFuZGxlS2VlcFJvdGF0aW5nSXRlbShlbnRpdHk6IEVudGl0eSwgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4pIHtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBpbnRlcnBvbGF0aW9uVHlwZSB9ID0gdHdlZW47XG4gICAgY29uc3QgZGlyID0gdHdlZW4uZGlyZWN0aW9uID8/IHsgeDogMCwgeTogMSwgejogMCB9O1xuICAgIGNvbnN0IHNwZWVkID0gdHdlZW4uc3BlZWQgPz8gMTtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlJvdGF0ZUNvbnRpbnVvdXMoe1xuICAgICAgICBkaXJlY3Rpb246IFF1YXRlcm5pb24uZnJvbUV1bGVyRGVncmVlcyhkaXIueCwgZGlyLnksIGRpci56KSxcbiAgICAgICAgc3BlZWQsXG4gICAgICB9KSxcbiAgICAgIGR1cmF0aW9uOiAoZHVyYXRpb24gPz8gMCkgKiAxMDAwLFxuICAgICAgZWFzaW5nRnVuY3Rpb246IGdldEVhc2luZ0Z1bmN0aW9uRnJvbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvblR5cGUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RPUF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdG9wVHdlZW4oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoVHdlZW5Db21wb25lbnQuaGFzKGVudGl0eSkpIHtcbiAgICAgIFR3ZWVuQ29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBTTElERV9URVhUVVJFXG4gIGZ1bmN0aW9uIGhhbmRsZVNsaWRlVGV4dHVyZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNMSURFX1RFWFRVUkU+KSB7XG4gICAgY29uc3QgZGlyID0gcGF5bG9hZC5kaXJlY3Rpb247XG4gICAgY29uc3Qgc3BlZWQgPSBwYXlsb2FkLnNwZWVkO1xuICAgIGNvbnN0IG1vdmVtZW50VHlwZSA9IHBheWxvYWQubW92ZW1lbnRUeXBlIGFzIHVua25vd24gYXMgU2RrVGV4dHVyZU1vdmVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHBheWxvYWQuZHVyYXRpb24gPz8gMDtcblxuICAgIHJldHVybiBUd2VlbkNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICBtb2RlOiBUd2Vlbi5Nb2RlLlRleHR1cmVNb3ZlQ29udGludW91cyh7XG4gICAgICAgIGRpcmVjdGlvbjogeyB4OiBkaXIueCwgeTogZGlyLnkgfSxcbiAgICAgICAgc3BlZWQsXG4gICAgICAgIG1vdmVtZW50VHlwZSxcbiAgICAgIH0pLFxuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMTAwMCxcbiAgICAgIGVhc2luZ0Z1bmN0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU0VUX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlU2V0Q291bnRlcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPikge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlID0gcGF5bG9hZC5jb3VudGVyO1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBJTkNSRU1FTlRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUj4sXG4gICkge1xuICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBhbW91bnQgPSBwYXlsb2FkLmFtb3VudCA/PyAxO1xuXG4gICAgaWYgKGNvdW50ZXIpIHtcbiAgICAgIGNvdW50ZXIudmFsdWUgKz0gYW1vdW50O1xuXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKTtcbiAgICB9XG4gIH1cblxuICAvLyBERUNSRUFTRV9DT1VOVEVSXG4gIGZ1bmN0aW9uIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgYW1vdW50ID0gcGF5bG9hZC5hbW91bnQgPz8gMTtcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IGFtb3VudDtcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9TT1VORFxuICBmdW5jdGlvbiBoYW5kbGVQbGF5U291bmQoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPikge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wLCB2b2x1bWUsIGdsb2JhbCB9ID0gcGF5bG9hZDtcbiAgICBpZiAoQXVkaW9Tb3VyY2UuaGFzKGVudGl0eSkpIHtcbiAgICAgIEF1ZGlvU291cmNlLnBsYXlTb3VuZChlbnRpdHksIHNyYyk7XG4gICAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoZW50aXR5KTtcbiAgICAgIGF1ZGlvU291cmNlLmxvb3AgPSBsb29wO1xuICAgICAgYXVkaW9Tb3VyY2Uudm9sdW1lID0gdm9sdW1lID8/IDE7XG4gICAgICBhdWRpb1NvdXJjZS5nbG9iYWwgPSBnbG9iYWwgPz8gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIEF1ZGlvU291cmNlLmNyZWF0ZShlbnRpdHksIHtcbiAgICAgICAgYXVkaW9DbGlwVXJsOiBzcmMsXG4gICAgICAgIGxvb3AsXG4gICAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcFNvdW5kKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+KSB7XG4gICAgY29uc3QgYXVkaW9Tb3VyY2UgPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKGF1ZGlvU291cmNlKSB7XG4gICAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1ZJU0lCSUxJVFlcbiAgZnVuY3Rpb24gaGFuZGxlU2V0VmlzaWJpbGl0eShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPikge1xuICAgIGNvbnN0IHsgdmlzaWJsZSwgY29sbGlkZXIgfSA9IHBheWxvYWQ7XG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IHZpc2libGUgfSk7XG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IG1lc2hDb2xsaWRlciA9IE1lc2hDb2xsaWRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG5cbiAgICBpZiAoY29sbGlkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGdsdGYpIHtcbiAgICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gY29sbGlkZXI7XG4gICAgICAgIGlmIChjb2xsaWRlciA9PT0gMCkge1xuICAgICAgICAgIGdsdGYudmlzaWJsZU1lc2hlc0NvbGxpc2lvbk1hc2sgPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1lc2hDb2xsaWRlcikge1xuICAgICAgICBtZXNoQ29sbGlkZXIuY29sbGlzaW9uTWFzayA9IGNvbGxpZGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFUVEFDSF9UT19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IGFuY2hvclBvaW50SWQgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgdXNlciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpPy51c2VySWQ7XG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIEF2YXRhckF0dGFjaC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7IGFuY2hvclBvaW50SWQ6IGFuY2hvclBvaW50SWQsIGF2YXRhcklkOiB1c2VyIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIERFVEFDSF9GUk9NX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVEZXRhY2hGcm9tUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSPixcbiAgKSB7XG4gICAgaWYgKEF2YXRhckF0dGFjaC5oYXMoZW50aXR5KSkge1xuICAgICAgQXZhdGFyQXR0YWNoLmRlbGV0ZUZyb20oZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBURUxFUE9SVCBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlVGVsZXBvcnRQbGF5ZXIoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5URUxFUE9SVF9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB7IG1vZGUsIHgsIHksIHJlYWxtIH0gPSBwYXlsb2FkO1xuXG4gICAgaWYgKG1vZGUgPT09IFRlbGVwb3J0TW9kZS5UT19XT1JMRCkge1xuICAgICAgaWYgKHJlYWxtKSB7XG4gICAgICAgIHZvaWQgY2hhbmdlUmVhbG0oeyByZWFsbSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9fQ09PUkRJTkFURVMgbW9kZVxuICAgICAgaWYgKHggIT09IHVuZGVmaW5lZCAmJiB5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdm9pZCB0ZWxlcG9ydFRvKHtcbiAgICAgICAgICB3b3JsZENvb3JkaW5hdGVzOiB7IHgsIHkgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRSBQTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllcihfZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUj4pIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogcGF5bG9hZC5wb3NpdGlvbixcbiAgICAgIGNhbWVyYVRhcmdldDogcGF5bG9hZC5jYW1lcmFUYXJnZXQsXG4gICAgfTtcbiAgICB2b2lkIG1vdmVQbGF5ZXJUbyhvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFBMQVkgREVGQVVMVCBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5RGVmYXVsdEVtb3RlKFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9ERUZBVUxUX0VNT1RFPixcbiAgKSB7XG4gICAgY29uc3QgeyBlbW90ZSB9ID0gcGF5bG9hZDtcbiAgICB2b2lkIHRyaWdnZXJFbW90ZSh7IHByZWRlZmluZWRFbW90ZTogZW1vdGUgfSk7XG4gIH1cblxuICAvLyBQTEFZIENVU1RPTSBFTU9URVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5Q3VzdG9tRW1vdGUoXG4gICAgX2VudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0NVU1RPTV9FTU9URT4sXG4gICkge1xuICAgIGNvbnN0IHsgc3JjLCBsb29wIH0gPSBwYXlsb2FkO1xuICAgIHZvaWQgdHJpZ2dlclNjZW5lRW1vdGUoeyBzcmMsIGxvb3AgfSk7XG4gIH1cblxuICAvLyBPUEVOIExJTktcbiAgZnVuY3Rpb24gaGFuZGxlT3BlbkxpbmsoX2VudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuT1BFTl9MSU5LPikge1xuICAgIGNvbnN0IHsgdXJsIH0gPSBwYXlsb2FkO1xuICAgIHZvaWQgb3BlbkV4dGVybmFsVXJsKHsgdXJsIH0pO1xuICB9XG5cbiAgLy8gUExBWV9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVQbGF5VmlkZW8oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4pIHtcbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAoIXZpZGVvU291cmNlICYmIHBheWxvYWQuc3JjKSB7XG4gICAgICBWaWRlb1BsYXllci5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCB7XG4gICAgICAgIHNyYzogcGF5bG9hZC5zcmMsXG4gICAgICAgIHZvbHVtZTogcGF5bG9hZC52b2x1bWUgPz8gMSxcbiAgICAgICAgbG9vcDogcGF5bG9hZC5sb29wID8/IGZhbHNlLFxuICAgICAgICBwbGF5aW5nOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEluaXQgdmlkZW8gcGxheWVyIG1hdGVyaWFsIHdoZW4gdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgYSBWaWRlb1BsYXllciBjb21wb25lbnQgZGVmaW5lZFxuICAgICAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwoZW50aXR5LCB7IE1hdGVyaWFsIH0sIE1hdGVyaWFsLmdldE9yTnVsbChlbnRpdHkpKTtcbiAgICB9XG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICBpZiAodmlkZW9Tb3VyY2U/LnNyYyAhPT0gcGF5bG9hZC5zcmMpIHtcbiAgICAgICAgdmlkZW9Tb3VyY2Uuc3JjID0gcGF5bG9hZC5zcmMgPz8gJyc7XG4gICAgICB9XG4gICAgICB2aWRlb1NvdXJjZS52b2x1bWUgPSBwYXlsb2FkLnZvbHVtZSA/PyB2aWRlb1NvdXJjZS52b2x1bWU7XG4gICAgICB2aWRlb1NvdXJjZS5sb29wID0gcGF5bG9hZC5sb29wID8/IHZpZGVvU291cmNlLmxvb3A7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgLy8gU1RPUF9WSURFT1xuICBmdW5jdGlvbiBoYW5kbGVTdG9wVmlkZW8oZW50aXR5OiBFbnRpdHksIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+KSB7XG4gICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBWaWRlb1BsYXllci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICB2aWRlb1NvdXJjZS5wbGF5aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BVURJT19TVFJFQU1cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUF1ZGlvU3RyZWFtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IHsgdXJsLCB2b2x1bWUgfSA9IHBheWxvYWQ7XG4gICAgQXVkaW9TdHJlYW0uY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgdXJsLFxuICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX0FVRElPX1NUUkVBTVxuICBmdW5jdGlvbiBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTT4sXG4gICkge1xuICAgIGNvbnN0IGF1ZGlvU291cmNlID0gQXVkaW9TdHJlYW0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNIT1dfVEVYVFxuICBmdW5jdGlvbiBoYW5kbGVTaG93VGV4dChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfVEVYVD4pIHtcbiAgICBjb25zdCB7IHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnQsIGZvbnRTaXplLCB0ZXh0QWxpZ24gfSA9IHBheWxvYWQ7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IGVudGl0eSBmb3IgdGhlIHRleHRcbiAgICBjb25zdCB0ZXh0RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpO1xuICAgIC8vIFNldCB0aGUgdGV4dCBlbnRpdHkgYXMgYSBjaGlsZCBvZiB0aGUgZW50aXR5IHRoYXQgY2FsbGVkIHRoZSBhY3Rpb25cbiAgICB0ZXh0RW50aXRpZXMuc2V0KGVudGl0eSwgdGV4dEVudGl0eSk7XG4gICAgY29uc3QgdWlUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShVaVRyYW5zZm9ybSwgdGV4dEVudGl0eSk7XG4gICAgaWYgKHVpVHJhbnNmb3JtQ29tcG9uZW50KSB7XG4gICAgICB1aVRyYW5zZm9ybUNvbXBvbmVudC5wYXJlbnQgPSBlbnRpdHk7XG4gICAgICAvLyBTZXQgdGhlIHBvaW50ZXIgZmlsdGVyIHRvIG5vbmUsIGFsbG93aW5nIHBsYXllcnMgdG8gY29udGludWUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2NlbmVcbiAgICAgIHVpVHJhbnNmb3JtQ29tcG9uZW50LnBvaW50ZXJGaWx0ZXIgPSBQb2ludGVyRmlsdGVyTW9kZS5QRk1fTk9ORTtcbiAgICAgIFVpVGV4dC5jcmVhdGVPclJlcGxhY2UodGV4dEVudGl0eSwge1xuICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgZm9udDogZm9udCBhcyB1bmtub3duIGFzIEZvbnQsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbiBhcyB1bmtub3duIGFzIFRleHRBbGlnbk1vZGUsXG4gICAgICB9KTtcbiAgICAgIHN0YXJ0VGltZW91dChlbnRpdHksIEFjdGlvblR5cGUuSElERV9URVhULCBoaWRlQWZ0ZXJTZWNvbmRzLCAoKSA9PlxuICAgICAgICBoYW5kbGVIaWRlVGV4dChlbnRpdHksIHt9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gSElERV9URVhUXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVUZXh0KGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfVEVYVD4pIHtcbiAgICBjb25zdCB0ZXh0RW50aXR5ID0gdGV4dEVudGl0aWVzLmdldChlbnRpdHkpO1xuICAgIGlmICh0ZXh0RW50aXR5KSB7XG4gICAgICAvLyBEZWxldGUgdGV4dCBjb21wb25lbnRcbiAgICAgIFVpVGV4dC5kZWxldGVGcm9tKHRleHRFbnRpdHkpO1xuICAgICAgLy8gRGVsZXRlIHRyYW5zZm9ybSBjb21wb25lbnRcbiAgICAgIFVpVHJhbnNmb3JtLmRlbGV0ZUZyb20odGV4dEVudGl0eSk7XG4gICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuICAgICAgc3RvcFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfVEVYVCk7XG4gICAgICAvLyBEZWxldGUgdGV4dCBlbnRpdHkgZnJvbSB0aGUgbWFwXG4gICAgICB0ZXh0RW50aXRpZXMuZGVsZXRlKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHk6IEVudGl0eSwgbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IEFjdGlvbnMuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgcmV0dXJuIGFjdGlvbnM/LnZhbHVlLmZpbmQoJCA9PiAkLm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgLy8gU1RBUlRfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RhcnREZWxheShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0RFTEFZPikge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgdGltZW91dCB9ID0gcGF5bG9hZDtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBhY3Rpb25OYW1lLCB0aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNUT1BfREVMQVlcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcERlbGF5KGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9ERUxBWT4pIHtcbiAgICBjb25zdCB7IGFjdGlvbiB9ID0gcGF5bG9hZDtcbiAgICBzdG9wVGltZW91dChlbnRpdHksIGFjdGlvbik7XG4gIH1cblxuICAvLyBTVEFSVF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0TG9vcChlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX0xPT1A+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBpbnRlcnZhbCB9ID0gcGF5bG9hZDtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBzdGFydEludGVydmFsKGVudGl0eSwgYWN0aW9uTmFtZSwgaW50ZXJ2YWwsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KTtcbiAgICAgICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU1RPUF9MT09QXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BMb29wKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9MT09QPikge1xuICAgIGNvbnN0IHsgYWN0aW9uIH0gPSBwYXlsb2FkO1xuICAgIHN0b3BJbnRlcnZhbChlbnRpdHksIGFjdGlvbik7XG4gIH1cblxuICAvLyBDTE9ORV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlQ2xvbmVFbnRpdHkoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTE9ORV9FTlRJVFk+KSB7XG4gICAgY29uc3QgeyBwb3NpdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgIC8vIGNsb25lIGVudGl0eVxuICAgIGNvbnN0IHsgY2xvbmVkLCBlbnRpdGllcyB9ID0gY2xvbmUoZW50aXR5LCBlbmdpbmUsIFRyYW5zZm9ybSwgVHJpZ2dlcnMsIHNka0hlbHBlcnMpO1xuICAgIGZvciAoY29uc3QgY2xvbmVkIG9mIGVudGl0aWVzLnZhbHVlcygpKSB7XG4gICAgICAvLyBpbml0aWFsaXplXG4gICAgICBpbml0QWN0aW9ucyhjbG9uZWQpO1xuICAgICAgaW5pdFRyaWdnZXJzKGNsb25lZCk7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGNsb25lZCk7XG4gICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fQ0xPTkUpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPckNyZWF0ZU11dGFibGUoY2xvbmVkKTtcbiAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgfVxuXG4gIC8vIFJFTU9WRV9FTlRJVFlcbiAgZnVuY3Rpb24gaGFuZGxlUmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJFTU9WRV9FTlRJVFk+KSB7XG4gICAgLy8gUmVtb3ZlIGFsbCB0aW1lcnMgYmVmb3JlIHJlbW92ZSB0aGUgZW50aXR5XG4gICAgc3RvcEFsbFRpbWVvdXRzKGVudGl0eSk7XG4gICAgc3RvcEFsbEludGVydmFscyhlbnRpdHkpO1xuXG4gICAgY29uc3QgdHJlZSA9IGdldENvbXBvbmVudEVudGl0eVRyZWUoZW5naW5lLCBlbnRpdHksIFRyYW5zZm9ybSk7XG4gICAgZm9yIChjb25zdCBlbnRpdHlUb1JlbW92ZSBvZiB0cmVlKSB7XG4gICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGVudGl0eVRvUmVtb3ZlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVaVN0YWNrKGFsaWduOiBTY3JlZW5BbGlnbk1vZGUpIHtcbiAgICBjb25zdCBrZXkgPSBgJHthbGlnbi5hbGlnbkl0ZW1zfSwke2FsaWduLmp1c3RpZnlDb250ZW50fWA7XG5cbiAgICBpZiAoIXVpU3RhY2tzLmhhcyhrZXkpKSB7XG4gICAgICB1aVN0YWNrcy5zZXQoa2V5LCBlbmdpbmUuYWRkRW50aXR5KCkpO1xuICAgIH1cblxuICAgIHJldHVybiB1aVN0YWNrcy5nZXQoa2V5KSE7XG4gIH1cblxuICAvLyBTSE9XX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dJbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNIT1dfSU1BR0U+KSB7XG4gICAgY29uc3QgeyBzcmMsIHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnRTaXplLCBhbGlnbiwgaGVpZ2h0LCB3aWR0aCB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEdldC9DcmVhdGUgYSBVSSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IGVudGl0eVxuICAgIGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbmdpbmUuUm9vdEVudGl0eSk7XG5cbiAgICAvLyBHZXQgYSBVSSBTdGFjayBlbnRpdHlcbiAgICBjb25zdCBzY3JlZW5BbGlnbiA9IG1hcEFsaWduVG9TY3JlZW5BbGlnbihhbGlnbik7XG4gICAgY29uc3QgdWlTdGFjayA9IGdldFVpU3RhY2soc2NyZWVuQWxpZ24pO1xuXG4gICAgLy8gVE9ETzogRml4IGl0ZW1zIHdyYXBwaW5nXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIFRyYW5zZm9ybSBmb3IgdGhlIFVJIHN0YWNrXG4gICAgY29uc3QgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCB1aVN0YWNrKTtcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LmFsaWduSXRlbXMgPSBzY3JlZW5BbGlnbi5hbGlnbkl0ZW1zO1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuanVzdGlmeUNvbnRlbnQgPSBzY3JlZW5BbGlnbi5qdXN0aWZ5Q29udGVudDtcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LnBvc2l0aW9uVHlwZSA9IFlHUG9zaXRpb25UeXBlLllHUFRfQUJTT0xVVEU7XG5cbiAgICAvLyBDcmVhdGUgYSBVSSBlbnRpdHkgYW5kIGEgVHJhbnNmb3JtIGNvbXBvbmVudCBmb3IgdGhlIGltYWdlXG4gICAgY29uc3QgaW1hZ2VFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KCk7XG4gICAgY29uc3QgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgaW1hZ2VFbnRpdHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIFlHVW5pdC5ZR1VfUE9JTlQsXG4gICAgKTtcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wYXJlbnQgPSB1aVN0YWNrO1xuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBvaW50ZXJGaWx0ZXIgPSBQb2ludGVyRmlsdGVyTW9kZS5QRk1fQkxPQ0s7XG5cbiAgICAvLyBDcmVhdGUgQmFja2dyb3VuZCBDb21wb25lbnRcbiAgICBnZXRVSUJhY2tncm91bmQoVWlCYWNrZ3JvdW5kLCBpbWFnZUVudGl0eSwgc3JjKTtcblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAvLyBDcmVhdGUgVGV4dCBDb21wb25lbnRcbiAgICAgIC8vIFRPRE86IEZpeCB0ZXh0IHdyYXBwaW5nIGFuZCBzY3JvbGxpbmdcbiAgICAgIGdldFVJVGV4dChVaVRleHQsIGltYWdlRW50aXR5LCB0ZXh0LCBmb250U2l6ZSwgd2lkdGgpO1xuICAgIH1cblxuICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiBpbWFnZUVudGl0eSxcbiAgICAgICAgb3B0czoge1xuICAgICAgICAgIGJ1dHRvbjogSW5wdXRBY3Rpb24uSUFfUE9JTlRFUixcbiAgICAgICAgICBob3ZlclRleHQ6ICdDbGljaycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLnNldChlbnRpdHksIGltYWdlRW50aXR5KTtcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMSUNLX0lNQUdFKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChoaWRlQWZ0ZXJTZWNvbmRzKSB7XG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfSU1BR0UsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIHsgaW1hZ2VFbnRpdHk6IGltYWdlRW50aXR5IH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBISURFX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVJbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KSB7XG4gICAgY29uc3QgeyBpbWFnZUVudGl0eSB9ID0gcGF5bG9hZDtcblxuICAgIGlmIChpbWFnZUVudGl0eSkge1xuICAgICAgZW5naW5lLnJlbW92ZUVudGl0eShpbWFnZUVudGl0eSBhcyBFbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGlja2VkSW1hZ2UgPSBsYXN0VWlFbnRpdHlDbGlja2VkLmdldChlbnRpdHkpO1xuICAgICAgaWYgKGNsaWNrZWRJbWFnZSkge1xuICAgICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGNsaWNrZWRJbWFnZSk7XG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuZGVsZXRlKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gREFNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZURhbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4pIHtcbiAgICBjb25zdCB7IHJhZGl1cywgbGF5ZXIsIGhpdHMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgZW50aXR5UG9zaXRpb24gPSBBdmF0YXJBdHRhY2guaGFzKGVudGl0eSlcbiAgICAgID8gZ2V0UGxheWVyUG9zaXRpb24oKVxuICAgICAgOiBnZXRXb3JsZFBvc2l0aW9uKGVudGl0eSk7XG5cbiAgICBjb25zdCBnZXRSb290ID0gKGVudGl0eTogRW50aXR5KTogRW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldEVudGl0eVBhcmVudChlbnRpdHkpO1xuICAgICAgcmV0dXJuICFwYXJlbnQgPyBlbnRpdHkgOiBnZXRSb290KHBhcmVudCk7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIGRhbWFnZVRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbih0YXJnZXQpO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3RhbmNlKGVudGl0eVBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbik7XG5cbiAgICAgIC8vIGF2b2lkIGNhdXNpbmcgZGFtYWdlIHRvIHRoZSBlbnRpdHkgaXRzZWxmIG9yIGl0cyBjaGlsZHJlblxuICAgICAgY29uc3QgZW50aXR5VHJlZSA9IEFycmF5LmZyb20oZ2V0Q29tcG9uZW50RW50aXR5VHJlZShlbmdpbmUsIGVudGl0eSwgVHJhbnNmb3JtKSk7XG4gICAgICBjb25zdCBpc1BhcnRPZkVudGl0eVRyZWUgPSBlbnRpdHlUcmVlLnNvbWUoJCA9PiAkID09PSB0YXJnZXQpO1xuICAgICAgaWYgKGlzUGFydE9mRW50aXR5VHJlZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgIGlmIChsYXllciA9PT0gUHJveGltaXR5TGF5ZXIuUExBWUVSKSB7XG4gICAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QodGFyZ2V0KTtcbiAgICAgICAgICBpZiAocm9vdCAhPT0gZW5naW5lLlBsYXllckVudGl0eSAmJiByb290ICE9PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgPT09IFByb3hpbWl0eUxheWVyLk5PTl9QTEFZRVIpIHtcbiAgICAgICAgICBjb25zdCByb290ID0gZ2V0Um9vdCh0YXJnZXQpO1xuICAgICAgICAgIGlmIChyb290ID09PSBlbmdpbmUuUGxheWVyRW50aXR5IHx8IHJvb3QgPT09IGVuZ2luZS5DYW1lcmFFbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpc3RhbmNlIDw9IHJhZGl1cykge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGhpdHMgPT09IHVuZGVmaW5lZCA/IDEgOiBNYXRoLm1heChoaXRzLCAxKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHModGFyZ2V0KTtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fREFNQUdFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1PVkVfUExBWUVSX0hFUkVcbiAgZnVuY3Rpb24gaGFuZGxlTW92ZVBsYXllckhlcmUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5NT1ZFX1BMQVlFUl9IRVJFPixcbiAgKSB7XG4gICAgY29uc3QgaGVyZSA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcbiAgICBjb25zdCByb3RhdGlvbiA9IGdldFdvcmxkUm90YXRpb24oZW50aXR5KTtcblxuICAgIC8vIFdlIFdhbnQgdGhlIHBsYXllciB0byBsb29rIDFtIGluIGZyb250IG9mIHRoZSBlbnRpdHlcbiAgICBjb25zdCBmb3J3YXJkID0gVmVjdG9yMy5Gb3J3YXJkKCk7XG4gICAgY29uc3Qgcm90YXRlZERpcmVjdGlvbiA9IFZlY3RvcjMucm90YXRlKGZvcndhcmQsIHJvdGF0aW9uKTtcbiAgICBjb25zdCBtb3ZlRGVsdGEgPSBWZWN0b3IzLnNjYWxlKHJvdGF0ZWREaXJlY3Rpb24sIDEpO1xuXG4gICAgdm9pZCBtb3ZlUGxheWVyVG8oe1xuICAgICAgbmV3UmVsYXRpdmVQb3NpdGlvbjogaGVyZSxcbiAgICAgIGF2YXRhclRhcmdldDogVmVjdG9yMy5hZGQoaGVyZSwgbW92ZURlbHRhKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSk7XG4gICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1BMQVlFUl9TUEFXTik7XG4gIH1cblxuICAvLyBQTEFZRVJfRkFDRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYXllckZhY2VJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWUVSX0ZBQ0VfSVRFTT4sXG4gICkge1xuICAgIGNvbnN0IGl0ZW1Qb3NpdGlvbiA9IGdldFdvcmxkUG9zaXRpb24oZW50aXR5KTtcbiAgICBjb25zdCBjdXJyZW50UGxheWVyUG9zaXRpb24gPSBnZXRQbGF5ZXJQb3NpdGlvbigpO1xuICAgIHZvaWQgbW92ZVBsYXllclRvKHtcbiAgICAgIG5ld1JlbGF0aXZlUG9zaXRpb246IGN1cnJlbnRQbGF5ZXJQb3NpdGlvbixcbiAgICAgIGF2YXRhclRhcmdldDogaXRlbVBvc2l0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUExBQ0VfT05fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVBsYWNlT25QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFDRV9PTl9QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IHBsYXllciA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLlBsYXllckVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBwbGF5ZXIpIHtcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHBsYXllci5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBST1RBVEVfQVNfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVJvdGF0ZUFzUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUk9UQVRFX0FTX1BMQVlFUj4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuUGxheWVyRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIHBsYXllcikge1xuICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gcGxheWVyLnJvdGF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBMQUNFX09OX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVQbGFjZU9uQ2FtZXJhKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fQ0FNRVJBPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBjYW1lcmEgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5DYW1lcmFFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgY2FtZXJhKSB7XG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBjYW1lcmEucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gUk9UQVRFX0FTX0NBTUVSQVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVBc0NhbWVyYShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19DQU1FUkE+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IGNhbWVyYSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLkNhbWVyYUVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBjYW1lcmEpIHtcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IGNhbWVyYS5yb3RhdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUE9TSVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0UG9zaXRpb24oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUE9TSVRJT04+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmFkZChcbiAgICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24sXG4gICAgICAgICAgVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRVRfUk9UQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU2V0Um90YXRpb24oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfUk9UQVRJT04+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWxhdGl2ZSkge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLm11bHRpcGx5KFxuICAgICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgICAgICBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NDQUxFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFNjYWxlKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1NDQUxFPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gVmVjdG9yMy5hZGQoXG4gICAgICAgICAgdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgICAgIFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRk9MTE9XX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVGb2xsb3dQbGF5ZXIoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5GT0xMT1dfUExBWUVSPikge1xuICAgIGNvbnN0IHsgc3BlZWQsIHgsIHksIHosIG1pbkRpc3RhbmNlIH0gPSBwYXlsb2FkO1xuICAgIGZvbGxvd01hcC5zZXQoZW50aXR5LCB7XG4gICAgICB0YXJnZXQ6IGVuZ2luZS5QbGF5ZXJFbnRpdHksXG4gICAgICBzcGVlZCxcbiAgICAgIG1pbkRpc3RhbmNlLFxuICAgICAgYXhlczogeyB4LCB5LCB6IH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBTVE9QX0ZPTExPV0lOR19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEZvbGxvd2luZ1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfRk9MTE9XSU5HX1BMQVlFUj4sXG4gICkge1xuICAgIGZvbGxvd01hcC5kZWxldGUoZW50aXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJhbmRvbShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJBTkRPTT4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvbnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWN0aW9ucy5sZW5ndGgpXTtcbiAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQmF0Y2goZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5CQVRDSD4pIHtcbiAgICBjb25zdCB7IGFjdGlvbnMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSk7XG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGZpbmRBY3Rpb25CeU5hbWUoZW50aXR5LCBhY3Rpb25OYW1lKTtcbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uRXZlbnRzLmVtaXQoYWN0aW9uLm5hbWUsIGdldFBheWxvYWQoYWN0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGVhbFBsYXllcihlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhFQUxfUExBWUVSPikge1xuICAgIGNvbnN0IHsgbXVsdGlwbGllciB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGdldFJvb3QgPSAoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0RW50aXR5UGFyZW50KGVudGl0eSk7XG4gICAgICByZXR1cm4gIXBhcmVudCA/IGVudGl0eSA6IGdldFJvb3QocGFyZW50KTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgaGVhbFRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldCk7XG4gICAgICBpZiAocm9vdCA9PT0gZW5naW5lLlBsYXllckVudGl0eSkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyh0YXJnZXQpO1xuICAgICAgICBjb25zdCB0b3RhbCA9IE1hdGgubWF4KG11bHRpcGxpZXIgPz8gMSwgMSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9IRUFMX1BMQVlFUik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KHVybDogc3RyaW5nLCBpbml0PzogRmxhdEZldGNoSW5pdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNpZ25lZEZldGNoKHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIC4uLihpbml0ID8geyBpbml0IH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgLy8gJ0Vycm9yIGZldGNoaW5nIGNhbXBhaWduIGRhdGEnXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KTtcblxuICAgICAgaWYgKCFqc29uLm9rKSB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGpzb24uZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYW1wYWlnbnNCeURpc3BlbnNlcktleShkaXNwZW5zZXJLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL2NhbXBhaWducy9rZXlzP2NhbXBhaWduX2tleT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNwZW5zZXJLZXkpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVybCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXB0Y2hhKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdChgJHtSRVdBUkRTX1NFUlZFUl9VUkx9L2FwaS9jYXB0Y2hhYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUb2tlbihcbiAgICBkaXNwZW5zZXJLZXk6IHN0cmluZyxcbiAgICBjYXB0Y2hhPzoge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfSxcbiAgKSB7XG4gICAgY29uc3QgdXJsID0gYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvcmV3YXJkc2A7XG4gICAgY29uc3QgcmVhbG0gPSBhd2FpdCBnZXRSZWFsbSh7fSk7XG4gICAgY29uc3QgcGxheWVyID0gcGxheWVyc0hlbHBlcj8uZ2V0UGxheWVyKCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNhbXBhaWduX2tleTogZGlzcGVuc2VyS2V5LFxuICAgICAgICBiZW5lZmljaWFyeTogIXBsYXllcj8uaXNHdWVzdCA/IHBsYXllcj8udXNlcklkIDogJycsXG4gICAgICAgIGNhdGFseXN0OiByZWFsbS5yZWFsbUluZm8gPyByZWFsbS5yZWFsbUluZm8uYmFzZVVybCA6ICcnLFxuICAgICAgICAuLi4oY2FwdGNoYSA/IHsgY2FwdGNoYV9pZDogY2FwdGNoYS5pZCwgY2FwdGNoYV92YWx1ZTogY2FwdGNoYS52YWx1ZSB9IDoge30pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2xhaW1BaXJkcm9wKGVudGl0eTogRW50aXR5LCBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkNMQUlNX0FJUkRST1A+KSB7XG4gICAgY29uc3QgcmV3YXJkcyA9IFJld2FyZHMuZ2V0T3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKCFyZXdhcmRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB0ZXN0TW9kZSwgY2FtcGFpZ25JZCwgZGlzcGVuc2VyS2V5IH0gPSByZXdhcmRzO1xuXG4gICAgaWYgKHRlc3RNb2RlKSB7XG4gICAgICAvLyBUT0RPOiBTaG93IGFuIFVJIGluZGljYXRpbmcgdGVzdGluZyBtb2RlXG4gICAgICAvLyAnSGFuZGxlIENsYWltIEFpcmRyb3AgaW4gVGVzdCBNb2RlIDopJ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZldGNoQ2FtcGFpZ25zQnlEaXNwZW5zZXJLZXkoZGlzcGVuc2VyS2V5KVxuICAgICAgLnRoZW4oY2FtcGFpZ25zID0+IHtcbiAgICAgICAgY29uc3QgY2FtcGFpZ24gPSBjYW1wYWlnbnMuZmluZCgoYzogYW55KSA9PiBjLmNhbXBhaWduX2lkID09PSBjYW1wYWlnbklkKTtcbiAgICAgICAgaWYgKGNhbXBhaWduICYmIGNhbXBhaWduLmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoY2FtcGFpZ24ucmVxdWlyZXNfY2FwdGNoYSkge1xuICAgICAgICAgICAgZmV0Y2hDYXB0Y2hhKClcbiAgICAgICAgICAgICAgLnRoZW4oY2FwdGNoYSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhcHRjaGEpIHtcbiAgICAgICAgICAgICAgICAgIF9zaG93Q2FwdGNoYVByb21wdChlbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25JZCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGVuc2VyS2V5LFxuICAgICAgICAgICAgICAgICAgICBjYXB0Y2hhLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goX2Vycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAgICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYXB0Y2hhJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdFRva2VuKGRpc3BlbnNlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKF9lcnJvciA9PiB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJywgZXJyb3JcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Nob3dDYXB0Y2hhUHJvbXB0KFxuICAgIF9lbnRpdHk6IEVudGl0eSxcbiAgICBkYXRhOiB7IGNhbXBhaWduSWQ6IHN0cmluZzsgZGlzcGVuc2VyS2V5OiBzdHJpbmc7IGNhcHRjaGE6IGFueSB9LFxuICApIHtcbiAgICBzaG93Q2FwdGNoYVByb21wdChcbiAgICAgIGVuZ2luZSxcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgVWlCYWNrZ3JvdW5kLFxuICAgICAgVWlUZXh0LFxuICAgICAgVWlJbnB1dCxcbiAgICAgIFVpSW5wdXRSZXN1bHQsXG4gICAgICBwb2ludGVyRXZlbnRzU3lzdGVtLFxuICAgICAgZGF0YSxcbiAgICAgIGlucHV0VGV4dCA9PiB7XG4gICAgICAgIC8vIFJlcXVlc3QgdG9rZW4gd2l0aCBjYXB0Y2hhIHZhbGlkYXRpb25cbiAgICAgICAgcmVxdWVzdFRva2VuKGRhdGEuZGlzcGVuc2VyS2V5LCB7XG4gICAgICAgICAgaWQ6IGRhdGEuY2FwdGNoYS5pZCxcbiAgICAgICAgICB2YWx1ZTogaW5wdXRUZXh0LFxuICAgICAgICB9KS50aGVuKCh0b2tlbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAvLyAnVG9rZW4gcmVxdWVzdGVkIHN1Y2Nlc3NmdWxseScsIHsgdG9rZW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDYWxsU2NyaXB0TWV0aG9kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DQUxMX1NDUklQVF9NRVRIT0Q+LFxuICApIHtcbiAgICBjb25zdCB7IHNjcmlwdFBhdGgsIG1ldGhvZE5hbWUsIHBhcmFtcyB9ID0gcGF5bG9hZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbVZhbHVlcyA9IE9iamVjdC52YWx1ZXMocGFyYW1zIHx8IHt9KTtcbiAgICAgIGNhbGxTY3JpcHRNZXRob2QoZW50aXR5LCBzY3JpcHRQYXRoLCBtZXRob2ROYW1lLCAuLi5wYXJhbVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTY3JpcHQgQWN0aW9uIEVycm9yXSBGYWlsZWQgdG8gY2FsbCAke21ldGhvZE5hbWV9IG9uICR7c2NyaXB0UGF0aH06YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIExPR19UT19DT05TT0xFXG4gIGZ1bmN0aW9uIGhhbmRsZUxvZ1RvQ29uc29sZShwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTE9HX1RPX0NPTlNPTEU+KSB7XG4gICAgY29uc29sZS5sb2cocGF5bG9hZC5tZXNzYWdlKTtcbiAgfVxuXG4gIC8vIERFTEVURVxuICBmdW5jdGlvbiBoYW5kbGVEZWxldGUoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBzdG9wQWxsVGltZW91dHMoZW50aXR5KTtcbiAgICBzdG9wQWxsSW50ZXJ2YWxzKGVudGl0eSk7XG4gICAgZW5naW5lLnJlbW92ZUVudGl0eVdpdGhDaGlsZHJlbihlbnRpdHkpO1xuICB9XG59XG4iXX0=
|
|
1204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUtYLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEdBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFDM0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUN0RCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUUvQyxJQUFJLG1CQUFtQixHQUFzQyxJQUFJLENBQUM7QUFFbEUsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFjO0lBQ3hDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN4QixPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBZSxFQUNmLG1CQUF3QyxFQUN4QyxVQUF3QixFQUN4QixhQUE4QjtJQUU5QixNQUFNLEVBQ0osUUFBUSxFQUNSLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osT0FBTyxFQUNQLGFBQWEsRUFDYixLQUFLLEVBQUUsY0FBYyxFQUNyQixhQUFhLEVBQ2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFNBQVMsRUFDVCxhQUFhLEVBQ2IsVUFBVSxHQUNYLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFHOUUsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0lBRWxDLE9BQU8sU0FBUyxhQUFhLENBQUMsR0FBVztRQUN2QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUQsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUMzQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLFNBQVMsV0FBVyxDQUFDLE1BQWM7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBR0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUdwQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxLQUFrQixFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQzlELElBQUksR0FBRyxFQUFVLENBQ2xCLENBQUM7UUFFRixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFCLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRDtvQkFDRSxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUM7UUFHRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDaEMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLEtBQUssVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQTRCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzNFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMzRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXVCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2pFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF5QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN4QixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBMkIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDekUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQzVCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXlCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2pGLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQThCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQy9FLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBNEIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDM0UsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt3QkFDakMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBOEIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDOUUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQzt3QkFDbkMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbEYsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDbEMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzFFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUErQixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMxRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO3dCQUNsQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUErQixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNoRixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO3dCQUNsQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUErQixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNoRixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt3QkFDaEMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBNkIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0UsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQzVCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXlCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7d0JBQ25DLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQWdDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2xGLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2hGLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBdUIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDakUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF1QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXVCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2pFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF5QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXdCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25FLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF1QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBMEIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQTJCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3pFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQW9CLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVELE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQThCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzlFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQThCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzlFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM5QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN6RSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO3dCQUN0Qyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFtQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN4RixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt3QkFDaEMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBNkIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt3QkFDakMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBOEIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDOUUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQTZCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQThCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzlFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUEwQixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN2RSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBMEIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF1QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQW9CLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVELE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBbUIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQzVCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQXlCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM5QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN6RSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN2QixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN4QixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBMkIsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDekUsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQTJCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3pFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUF5QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDckIsTUFBTTtvQkFDUixDQUFDO29CQUNELEtBQUssVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLG9CQUFvQixFQUFFLENBQUM7d0JBQ3ZCLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQStCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2pGLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM5QixrQkFBa0IsQ0FBQyxVQUFVLENBQTJCLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2pFLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixpQkFBaUIsRUFBRSxDQUFDO3dCQUNwQixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFnQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsRixNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzt3QkFDL0Isa0JBQWtCLENBQUMsVUFBVSxDQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxNQUFNO29CQUNSLENBQUM7b0JBQ0QsS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNyQixNQUFNO29CQUNSLENBQUM7b0JBQ0Q7d0JBQ0UsTUFBTTtnQkFDVixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBR0QsU0FBUyxjQUFjLENBQUMsTUFBYztRQUNwQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxlQUFlLENBQUMsTUFBYztRQUNyQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsT0FBZ0Q7UUFDMUYsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoRSxJQUFJLE9BQU8sQ0FBQyxLQUFLO1lBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9DLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQzNFLENBQUM7SUFHRCxTQUFTLGtCQUFrQixDQUFDLE1BQWMsRUFBRSxPQUFnRDtRQUMxRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFJM0MsSUFBSSxZQUFZLEdBQXVCLE1BQU0sQ0FBQztRQUU5QyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUUvQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsWUFBWSxHQUFHLE1BQU0sQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBRU4sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUN4QyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFJRCxJQUFJLFlBQVksS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFHRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBRUQsVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQzlDLG1CQUFtQixFQUFFLFlBQVk7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLE9BQThDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3JFLElBQUksT0FBTyxDQUFDLEtBQUs7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUdELFNBQVMsa0JBQWtCO1FBQ3pCLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUNqRCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxvQkFBb0I7UUFDM0IsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ2pELElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDaEMsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxTQUFTLHNCQUFzQixDQUM3QixNQUFjLEVBQ2QsT0FBb0Q7UUFFcEQsTUFBTSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxpQkFBaUIsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLG1CQUFtQixDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUVqQixJQUFJLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwQyxZQUFZLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDO1lBQ2pELENBQUM7aUJBQU0sSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0MsWUFBWSxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGtCQUFrQixDQUFDLE9BQWdEO1FBQzFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBR3BDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUN4RSxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xELE9BQU87UUFDVCxDQUFDO1FBRUQsVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQzVDLFNBQVMsRUFBRSxJQUFJO1lBQ2YsY0FBYyxFQUFFLFNBQVM7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFNBQVMsaUJBQWlCO1FBQ3hCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsaUJBQWlCLENBQUMsTUFBYztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN0QixNQUFNLEVBQUUsRUFBRTthQUNYLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsd0JBQXdCLENBQUMsU0FBaUI7UUFDakQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFNBQVMsbUJBQW1CLENBQUMsTUFBYyxFQUFFLE9BQWlEO1FBQzVGLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVqRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxRQUFRLENBQUMsTUFBTSxHQUFHO2dCQUNoQixHQUFHLFFBQVEsQ0FBQyxNQUFNO2dCQUNsQjtvQkFDRSxJQUFJLEVBQUUsU0FBUztpQkFDaEI7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsUUFBa0Q7UUFDN0YsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDekIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxjQUFjLENBQUMsTUFBYyxFQUFFLE9BQTRDO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLElBQUksU0FBUyxHQUF1QixPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2xELFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUN2RSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLFlBQVksSUFBSSxTQUFTLENBQUM7WUFDdkUsTUFBTSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDckMsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFFaEMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxPQUE4QztRQUN0RixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBRVosTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELElBQUksS0FBSyxDQUFDO1lBRVYsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN4QyxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDMUMsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxLQUFLLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNoRCxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUM7WUFFRCxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxZQUE0QixFQUFFLEtBQWM7UUFDL0UsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksWUFBWSxHQUFHO1lBQ2pCLEdBQUcsS0FBSztTQUNULENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRW5FLFFBQVEsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNqQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osWUFBWSxHQUFHO29CQUNiLEdBQUcsWUFBWTtvQkFDZixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ3BCLEtBQUssRUFBRyxLQUFLLENBQUMsSUFBc0MsQ0FBQyxJQUFJLENBQUMsR0FBRzt3QkFDN0QsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7cUJBQ2xDLENBQUM7aUJBQ0gsQ0FBQztnQkFDRixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDZCxZQUFZLEdBQUc7b0JBQ2IsR0FBRyxZQUFZO29CQUNmLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDdEIsS0FBSyxFQUFHLEtBQUssQ0FBQyxJQUE0QyxDQUFDLE1BQU0sQ0FBQyxHQUFHO3dCQUNyRSxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztxQkFDcEMsQ0FBQztpQkFDSCxDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLFlBQVksR0FBRztvQkFDYixHQUFHLFlBQVk7b0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNyQixLQUFLLEVBQUcsS0FBSyxDQUFDLElBQXlDLENBQUMsS0FBSyxDQUFDLEdBQUc7d0JBQ2pFLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO3FCQUNuQyxDQUFDO2lCQUNILENBQUM7Z0JBQ0YsTUFBTTtZQUNSLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO1FBR0QsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDNUIsYUFBYSxDQUFDLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBR0QsU0FBUyxjQUFjLENBQUMsTUFBYyxFQUFFLEtBQTRDO1FBQ2xGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFFMUUsT0FBTyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxTQUFTLENBQUMsUUFBUTtnQkFDekIsR0FBRyxFQUFFLFdBQVc7YUFDakIsQ0FBQztZQUNGLFFBQVEsRUFBRSxRQUFRLEdBQUcsSUFBSTtZQUN6QixjQUFjLEVBQUUsa0NBQWtDLENBQUMsaUJBQWlCLENBQUM7U0FDdEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLEtBQTRDO1FBQ3BGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVsRixPQUFPLGNBQWMsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxRQUFRO2dCQUN6QixHQUFHLEVBQUUsV0FBVzthQUNqQixDQUFDO1lBQ0YsUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJO1lBQ3pCLGNBQWMsRUFBRSxrQ0FBa0MsQ0FBQyxpQkFBaUIsQ0FBQztTQUN0RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxlQUFlLENBQUMsTUFBYyxFQUFFLEtBQTRDO1FBQ25GLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFFcEUsT0FBTyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztnQkFDdEIsR0FBRyxFQUFFLFFBQVE7YUFDZCxDQUFDO1lBQ0YsUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJO1lBQ3pCLGNBQWMsRUFBRSxrQ0FBa0MsQ0FBQyxpQkFBaUIsQ0FBQztTQUN0RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxzQkFBc0IsQ0FBQyxNQUFjLEVBQUUsS0FBNEM7UUFDMUYsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUUvQixPQUFPLGNBQWMsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNoQyxTQUFTLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxLQUFLO2FBQ04sQ0FBQztZQUNGLFFBQVEsRUFBRSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJO1lBQ2hDLGNBQWMsRUFBRSxrQ0FBa0MsQ0FBQyxpQkFBaUIsQ0FBQztTQUN0RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxlQUFlLENBQUMsTUFBYztRQUNyQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsT0FBZ0Q7UUFDMUYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzVCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUE2RCxDQUFDO1FBQzNGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBRXZDLE9BQU8sY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUM7Z0JBQ3JDLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxLQUFLO2dCQUNMLFlBQVk7YUFDYixDQUFDO1lBQ0YsUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJO1lBQ3pCLGNBQWMsRUFBRSxDQUFDO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxPQUE4QztRQUN0RixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUVoQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxzQkFBc0IsQ0FDN0IsTUFBYyxFQUNkLE9BQW9EO1FBRXBELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7WUFFeEIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMscUJBQXFCLENBQzVCLE1BQWMsRUFDZCxPQUFvRDtRQUVwRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFFbkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO1lBRXhCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FBQyxNQUFjLEVBQUUsT0FBNkM7UUFDcEYsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM5QyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QixXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNqQyxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsWUFBWSxFQUFFLEdBQUc7Z0JBQ2pCLElBQUk7Z0JBQ0osT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO2dCQUNuQixNQUFNO2FBQ1AsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FBQyxNQUFjLEVBQUUsUUFBOEM7UUFDckYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxPQUFpRDtRQUM1RixNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN0QyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQztnQkFDN0MsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLFlBQVksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsb0JBQW9CLENBQzNCLE1BQWMsRUFDZCxPQUFtRDtRQUVuRCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDaEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULFlBQVksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsc0JBQXNCLENBQzdCLE1BQWMsRUFDZCxRQUFzRDtRQUV0RCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM3QixZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxvQkFBb0IsQ0FDM0IsT0FBZSxFQUNmLE9BQWtEO1FBRWxELE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFdEMsSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUVOLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssVUFBVSxDQUFDO29CQUNkLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtpQkFDM0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFlLEVBQUUsT0FBOEM7UUFDdkYsTUFBTSxPQUFPLEdBQUc7WUFDZCxtQkFBbUIsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUNyQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDbkMsQ0FBQztRQUNGLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFHRCxTQUFTLHNCQUFzQixDQUM3QixPQUFlLEVBQ2YsT0FBcUQ7UUFFckQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMxQixLQUFLLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFHRCxTQUFTLHFCQUFxQixDQUM1QixPQUFlLEVBQ2YsT0FBb0Q7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDOUIsS0FBSyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFHRCxTQUFTLGNBQWMsQ0FBQyxPQUFlLEVBQUUsT0FBNEM7UUFDbkYsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN4QixLQUFLLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUdELFNBQVMsZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUFvRDtRQUMzRixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztnQkFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSztnQkFDM0IsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7WUFHSCxnQ0FBZ0MsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxXQUFXLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDckMsV0FBVyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsV0FBVyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDMUQsV0FBVyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEQsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLGVBQWUsQ0FBQyxNQUFjLEVBQUUsUUFBcUQ7UUFDNUYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLHFCQUFxQixDQUM1QixNQUFjLEVBQ2QsT0FBb0Q7UUFFcEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDaEMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDbEMsR0FBRztZQUNILE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxTQUFTLHFCQUFxQixDQUM1QixNQUFjLEVBQ2QsUUFBcUQ7UUFFckQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGNBQWMsQ0FBQyxNQUFjLEVBQUUsT0FBNEM7UUFDbEYsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUV0RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxvQkFBb0IsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUN6QixvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBRXJDLG9CQUFvQixDQUFDLGFBQWEsSUFBNkIsQ0FBQztZQUNoRSxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDakMsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLElBQXVCO2dCQUM3QixRQUFRO2dCQUNSLFNBQVMsRUFBRSxTQUFxQzthQUNqRCxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQ2hFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQzNCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxRQUE2QztRQUNuRixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksVUFBVSxFQUFFLENBQUM7WUFFZixNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlCLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbkMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDcEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxPQUFPLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxPQUE4QztRQUN0RixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNyQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQzdDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0MsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUE2QztRQUNwRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUdELFNBQVMsZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUE2QztRQUNwRixNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN0QyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLGFBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQy9DLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0MsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxPQUE0QztRQUNsRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUdELFNBQVMsaUJBQWlCLENBQUMsTUFBYyxFQUFFLE9BQStDO1FBQ3hGLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFHN0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BGLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFFdkMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVyQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFHRCxTQUFTLGtCQUFrQixDQUFDLE1BQWMsRUFBRSxRQUFpRDtRQUUzRixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekIsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvRCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFzQjtRQUN4QyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztJQUM1QixDQUFDO0lBR0QsU0FBUyxlQUFlLENBQUMsTUFBYyxFQUFFLE9BQTZDO1FBQ3BGLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUdoRixjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUcvQyxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFJeEMsTUFBTSx5QkFBeUIsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZFLHlCQUF5QixDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzlELHlCQUF5QixDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQ3RFLHlCQUF5QixDQUFDLFlBQVksSUFBK0IsQ0FBQztRQUd0RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxjQUFjLENBQzVDLFdBQVcsRUFDWCxXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sSUFFUCxDQUFDO1FBQ0YsdUJBQXVCLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUN6Qyx1QkFBdUIsQ0FBQyxhQUFhLElBQThCLENBQUM7UUFHcEUsZUFBZSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUdULFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELG1CQUFtQixDQUFDLGFBQWEsQ0FDL0I7WUFDRSxNQUFNLEVBQUUsV0FBVztZQUNuQixJQUFJLEVBQUU7Z0JBQ0osTUFBTSxHQUF3QjtnQkFDOUIsU0FBUyxFQUFFLE9BQU87YUFDbkI7U0FDRixFQUNELEdBQUcsRUFBRTtZQUNILG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDN0MsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUNqRSxlQUFlLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQ3RELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUE2QztRQUNwRixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWhDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFxQixDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsWUFBWSxDQUFDLE1BQWMsRUFBRSxPQUF5QztRQUM3RSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsQ0FBQyxDQUFDLGlCQUFpQixFQUFFO1lBQ3JCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QixNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWMsRUFBVSxFQUFFO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7UUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBR2xFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3hFLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkIsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksS0FBSyxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3QixJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ2pFLFNBQVM7b0JBQ1gsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksS0FBSyxLQUFLLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3QixJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ2pFLFNBQVM7b0JBQ1gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQy9CLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsb0JBQW9CLENBQzNCLE1BQWMsRUFDZCxRQUFvRDtRQUVwRCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUcxQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJELEtBQUssWUFBWSxDQUFDO1lBQ2hCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztTQUMzQyxDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBR0QsU0FBUyxvQkFBb0IsQ0FDM0IsTUFBYyxFQUNkLFFBQW9EO1FBRXBELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0scUJBQXFCLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUNsRCxLQUFLLFlBQVksQ0FBQztZQUNoQixtQkFBbUIsRUFBRSxxQkFBcUI7WUFDMUMsWUFBWSxFQUFFLFlBQVk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFNBQVMsbUJBQW1CLENBQzFCLE1BQWMsRUFDZCxRQUFtRDtRQUVuRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7WUFDeEIsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxvQkFBb0IsQ0FDM0IsTUFBYyxFQUNkLFFBQW9EO1FBRXBELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN4QixTQUFTLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLG1CQUFtQixDQUMxQixNQUFjLEVBQ2QsUUFBbUQ7UUFFbkQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsb0JBQW9CLENBQzNCLE1BQWMsRUFDZCxRQUFvRDtRQUVwRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7WUFDeEIsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsT0FBK0M7UUFDeEYsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsU0FBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUM5QixTQUFTLENBQUMsUUFBUSxFQUNsQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ2hELENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sU0FBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsT0FBK0M7UUFDeEYsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUN0QyxTQUFTLENBQUMsUUFBUSxFQUNsQixVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDN0QsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxPQUE0QztRQUNsRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQixTQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQzNCLFNBQVMsQ0FBQyxLQUFLLEVBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNoRCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFNBQVMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsa0JBQWtCLENBQUMsTUFBYyxFQUFFLE9BQWdEO1FBQzFGLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWTtZQUMzQixLQUFLO1lBQ0wsV0FBVztZQUNYLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxTQUFTLHlCQUF5QixDQUNoQyxNQUFjLEVBQ2QsUUFBeUQ7UUFFekQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsU0FBUyxZQUFZLENBQUMsTUFBYyxFQUFFLE9BQXlDO1FBQzdFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDNUIsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUF3QztRQUMzRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzVCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxPQUE4QztRQUN0RixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRS9CLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBYyxFQUFVLEVBQUU7WUFDekMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQztRQUVGLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMvQixhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssVUFBVSxPQUFPLENBQUMsR0FBVyxFQUFFLElBQW9CO1FBQ3RELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDO2dCQUNqQyxHQUFHLEVBQUUsR0FBRztnQkFDUixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFHaEMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU3QyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUdiLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUdmLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLFVBQVUsNEJBQTRCLENBQUMsWUFBb0I7UUFDOUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxrQkFBa0Isb0NBQW9DLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDeEcsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssVUFBVSxZQUFZO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsa0JBQWtCLGNBQWMsRUFBRTtZQUNsRSxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssVUFBVSxZQUFZLENBQ3pCLFlBQW9CLEVBQ3BCLE9BR0M7UUFFRCxNQUFNLEdBQUcsR0FBRyxHQUFHLGtCQUFrQixjQUFjLENBQUM7UUFDaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsYUFBYSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRTFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLFlBQVksRUFBRSxZQUFZO2dCQUMxQixXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNuRCxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzdFLENBQUM7U0FDSCxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUyxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsUUFBaUQ7UUFDM0YsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUV2RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBR2IsT0FBTztRQUNULENBQUM7UUFFRCw0QkFBNEIsQ0FBQyxZQUFZLENBQUM7YUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDMUUsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUM5QixZQUFZLEVBQUU7eUJBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNkLElBQUksT0FBTyxFQUFFLENBQUM7NEJBQ1osa0JBQWtCLENBQUMsTUFBTSxFQUFFO2dDQUN6QixVQUFVO2dDQUNWLFlBQVk7Z0NBQ1osT0FBTzs2QkFDUixDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUdoQixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUdoQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLGtCQUFrQixDQUN6QixPQUFlLEVBQ2YsSUFBZ0U7UUFFaEUsaUJBQWlCLENBQ2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLElBQUksRUFDSixTQUFTLENBQUMsRUFBRTtZQUVWLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQixLQUFLLEVBQUUsU0FBUzthQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBRVosQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsTUFBYyxFQUNkLE9BQXFEO1FBRXJELE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVuRCxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsVUFBVSxPQUFPLFVBQVUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxrQkFBa0IsQ0FBQyxPQUFpRDtRQUMzRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBR0QsU0FBUyxZQUFZLENBQUMsTUFBYztRQUNsQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJRW5naW5lLFxuICBFbnRpdHksXG4gIFRleHRBbGlnbk1vZGUsXG4gIEZvbnQsXG4gIE1vdmUsXG4gIFBCVHdlZW4sXG4gIFJvdGF0ZSxcbiAgU2NhbGUsXG4gIFBvaW50ZXJFdmVudHNTeXN0ZW0sXG59IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7XG4gIE1hdGVyaWFsLFxuICBBdWRpb1N0cmVhbSxcbiAgWUdVbml0LFxuICBZR1Bvc2l0aW9uVHlwZSxcbiAgUG9pbnRlckZpbHRlck1vZGUsXG4gIElucHV0QWN0aW9uLFxuICBNZXNoQ29sbGlkZXIsXG4gIGdldENvbXBvbmVudEVudGl0eVRyZWUsXG4gIFR3ZWVuLFxufSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG5pbXBvcnQgdHlwZSB7IFRleHR1cmVNb3ZlbWVudFR5cGUgYXMgU2RrVGV4dHVyZU1vdmVtZW50VHlwZSB9IGZyb20gJ0BkY2wvZWNzL2Rpc3QvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvZGVjZW50cmFsYW5kL3Nkay9jb21wb25lbnRzL3R3ZWVuLmdlbic7XG5pbXBvcnQgeyBnZXRFbnRpdHlQYXJlbnQsIGdldFBsYXllclBvc2l0aW9uLCBnZXRXb3JsZFBvc2l0aW9uLCBnZXRXb3JsZFJvdGF0aW9uIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uUGF5bG9hZCxcbiAgSVNES0hlbHBlcnMsXG4gIElQbGF5ZXJzSGVscGVyLFxuICBTY3JlZW5BbGlnbk1vZGUsXG4gIEFjdGlvbixcbn0gZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQge1xuICBBY3Rpb25UeXBlLFxuICBQcm94aW1pdHlMYXllcixcbiAgVHJpZ2dlclR5cGUsXG4gIFR3ZWVuVHlwZSxcbiAgVGVsZXBvcnRNb2RlLFxuICBjbG9uZSxcbiAgZ2V0Q29tcG9uZW50cyxcbiAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlLCBpc1ZhbGlkU3RhdGUgfSBmcm9tICcuL3N0YXRlcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FdmVudHMsIGdldFRyaWdnZXJFdmVudHMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQge1xuICBzdGFydEludGVydmFsLFxuICBzdGFydFRpbWVvdXQsXG4gIHN0b3BBbGxJbnRlcnZhbHMsXG4gIHN0b3BBbGxUaW1lb3V0cyxcbiAgc3RvcEludGVydmFsLFxuICBzdG9wVGltZW91dCxcbn0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0VUlCYWNrZ3JvdW5kLFxuICBnZXRVSVRleHQsXG4gIGdldFVJVHJhbnNmb3JtLFxuICBtYXBBbGlnblRvU2NyZWVuQWxpZ24sXG4gIHNob3dDYXB0Y2hhUHJvbXB0LFxufSBmcm9tICcuL3VpJztcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBpbml0VHJpZ2dlcnMsIGRhbWFnZVRhcmdldHMsIGhlYWxUYXJnZXRzIH0gZnJvbSAnLi90cmlnZ2Vycyc7XG5pbXBvcnQgeyBmb2xsb3dNYXAgfSBmcm9tICcuL3RyYW5zZm9ybSc7XG5pbXBvcnQgeyBnZXRFYXNpbmdGdW5jdGlvbkZyb21JbnRlcnBvbGF0aW9uIH0gZnJvbSAnLi90d2VlbnMnO1xuaW1wb3J0IHsgUkVXQVJEU19TRVJWRVJfVVJMIH0gZnJvbSAnLi9hZG1pbi10b29sa2l0LXVpL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjYWxsU2NyaXB0TWV0aG9kIH0gZnJvbSAnfnNkay9zY3JpcHQtdXRpbHMnO1xuaW1wb3J0IHtcbiAgbW92ZVBsYXllclRvLFxuICB0cmlnZ2VyRW1vdGUsXG4gIHRyaWdnZXJTY2VuZUVtb3RlLFxuICBvcGVuRXh0ZXJuYWxVcmwsXG4gIHRlbGVwb3J0VG8sXG4gIGNoYW5nZVJlYWxtLFxufSBmcm9tICd+c3lzdGVtL1Jlc3RyaWN0ZWRBY3Rpb25zJztcbmltcG9ydCB0eXBlIHsgRmxhdEZldGNoSW5pdCB9IGZyb20gJ35zeXN0ZW0vU2lnbmVkRmV0Y2gnO1xuaW1wb3J0IHsgZ2V0UmVhbG0gfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnO1xuaW1wb3J0IHsgc2lnbmVkRmV0Y2ggfSBmcm9tICd+c3lzdGVtL1NpZ25lZEZldGNoJztcblxuY29uc3QgaW5pdGVkRW50aXRpZXMgPSBuZXcgU2V0PEVudGl0eT4oKTtcbmNvbnN0IHVpU3RhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKTtcbmNvbnN0IGxhc3RVaUVudGl0eUNsaWNrZWQgPSBuZXcgTWFwPEVudGl0eSwgRW50aXR5PigpO1xuY29uc3QgdGV4dEVudGl0aWVzID0gbmV3IE1hcDxFbnRpdHksIEVudGl0eT4oKTsgLy8gTW9kZWwgRW50aXR5LCBUZXh0IEVudGl0eVxuXG5sZXQgaW50ZXJuYWxJbml0QWN0aW9uczogKChlbnRpdHk6IEVudGl0eSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBY3Rpb25zKGVudGl0eTogRW50aXR5KSB7XG4gIGlmIChpbnRlcm5hbEluaXRBY3Rpb25zKSB7XG4gICAgcmV0dXJuIGludGVybmFsSW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGluaXRBY3Rpb25zIHdoaWxlIGFjdGlvbnNTeXN0ZW0gaGFzIG5vdCBiZWVuIGNyZWF0ZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuICBwbGF5ZXJzSGVscGVyPzogSVBsYXllcnNIZWxwZXIsXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICAgIFVpVHJhbnNmb3JtLFxuICAgIFVpVGV4dCxcbiAgICBVaUJhY2tncm91bmQsXG4gICAgVWlJbnB1dCxcbiAgICBVaUlucHV0UmVzdWx0LFxuICAgIFR3ZWVuOiBUd2VlbkNvbXBvbmVudCxcbiAgICBUd2VlblNlcXVlbmNlLFxuICAgIFZpZGVvUGxheWVyLFxuICAgIExpZ2h0U291cmNlLFxuICAgIE1haW5DYW1lcmEsXG4gICAgVmlydHVhbENhbWVyYSxcbiAgICBUZXh0U2hhcGUsXG4gICAgSW5wdXRNb2RpZmllcixcbiAgICBTa3lib3hUaW1lLFxuICB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSk7XG4gIGNvbnN0IHsgQWN0aW9ucywgU3RhdGVzLCBDb3VudGVyLCBUcmlnZ2VycywgUmV3YXJkcyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIC8vIHNhdmUgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIGluaXQgZnVuY2lvblxuICBpbnRlcm5hbEluaXRBY3Rpb25zID0gaW5pdEFjdGlvbnM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKTtcblxuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW50aXRpZXNXaXRoQWN0aW9ucykge1xuICAgICAgaW5pdEFjdGlvbnMoZW50aXR5KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdEFjdGlvbnMoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBpZiAoIUFjdGlvbnMuaGFzKGVudGl0eSkgfHwgaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYWN0aW9ucyBkYXRhXG4gICAgY29uc3QgYWN0aW9ucyA9IEFjdGlvbnMuZ2V0KGVudGl0eSk7XG5cbiAgICAvLyBpbml0aWFsaXplIGFjdGlvbnMgZm9yIGdpdmVuIGVudGl0eVxuICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAodHlwZXM6IFNldDxzdHJpbmc+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+KSB7XG4gICAgY29uc3QgeyBzcmMsIHRleHQsIGhpZGVBZnRlclNlY29uZHMsIGZvbnRTaXplLCBhbGlnbiwgaGVpZ2h0LCB3aWR0aCB9ID0gcGF5bG9hZDtcblxuICAgIC8vIEdldC9DcmVhdGUgYSBVSSB0cmFuc2Zvcm0gZm9yIHRoZSByb290IGVudGl0eVxuICAgIGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCBlbmdpbmUuUm9vdEVudGl0eSk7XG5cbiAgICAvLyBHZXQgYSBVSSBTdGFjayBlbnRpdHlcbiAgICBjb25zdCBzY3JlZW5BbGlnbiA9IG1hcEFsaWduVG9TY3JlZW5BbGlnbihhbGlnbik7XG4gICAgY29uc3QgdWlTdGFjayA9IGdldFVpU3RhY2soc2NyZWVuQWxpZ24pO1xuXG4gICAgLy8gVE9ETzogRml4IGl0ZW1zIHdyYXBwaW5nXG4gICAgLy8gR2V0L0NyZWF0ZSBhIFVJIFRyYW5zZm9ybSBmb3IgdGhlIFVJIHN0YWNrXG4gICAgY29uc3QgdWlTdGFja1RyYW5zZm9ybUNvbXBvbmVudCA9IGdldFVJVHJhbnNmb3JtKFVpVHJhbnNmb3JtLCB1aVN0YWNrKTtcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LmFsaWduSXRlbXMgPSBzY3JlZW5BbGlnbi5hbGlnbkl0ZW1zO1xuICAgIHVpU3RhY2tUcmFuc2Zvcm1Db21wb25lbnQuanVzdGlmeUNvbnRlbnQgPSBzY3JlZW5BbGlnbi5qdXN0aWZ5Q29udGVudDtcbiAgICB1aVN0YWNrVHJhbnNmb3JtQ29tcG9uZW50LnBvc2l0aW9uVHlwZSA9IFlHUG9zaXRpb25UeXBlLllHUFRfQUJTT0xVVEU7XG5cbiAgICAvLyBDcmVhdGUgYSBVSSBlbnRpdHkgYW5kIGEgVHJhbnNmb3JtIGNvbXBvbmVudCBmb3IgdGhlIGltYWdlXG4gICAgY29uc3QgaW1hZ2VFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KCk7XG4gICAgY29uc3QgaW1hZ2VUcmFuc2Zvcm1Db21wb25lbnQgPSBnZXRVSVRyYW5zZm9ybShcbiAgICAgIFVpVHJhbnNmb3JtLFxuICAgICAgaW1hZ2VFbnRpdHksXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIFlHVW5pdC5ZR1VfUE9JTlQsXG4gICAgKTtcbiAgICBpbWFnZVRyYW5zZm9ybUNvbXBvbmVudC5wYXJlbnQgPSB1aVN0YWNrO1xuICAgIGltYWdlVHJhbnNmb3JtQ29tcG9uZW50LnBvaW50ZXJGaWx0ZXIgPSBQb2ludGVyRmlsdGVyTW9kZS5QRk1fQkxPQ0s7XG5cbiAgICAvLyBDcmVhdGUgQmFja2dyb3VuZCBDb21wb25lbnRcbiAgICBnZXRVSUJhY2tncm91bmQoVWlCYWNrZ3JvdW5kLCBpbWFnZUVudGl0eSwgc3JjKTtcblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAvLyBDcmVhdGUgVGV4dCBDb21wb25lbnRcbiAgICAgIC8vIFRPRE86IEZpeCB0ZXh0IHdyYXBwaW5nIGFuZCBzY3JvbGxpbmdcbiAgICAgIGdldFVJVGV4dChVaVRleHQsIGltYWdlRW50aXR5LCB0ZXh0LCBmb250U2l6ZSwgd2lkdGgpO1xuICAgIH1cblxuICAgIHBvaW50ZXJFdmVudHNTeXN0ZW0ub25Qb2ludGVyRG93bihcbiAgICAgIHtcbiAgICAgICAgZW50aXR5OiBpbWFnZUVudGl0eSxcbiAgICAgICAgb3B0czoge1xuICAgICAgICAgIGJ1dHRvbjogSW5wdXRBY3Rpb24uSUFfUE9JTlRFUixcbiAgICAgICAgICBob3ZlclRleHQ6ICdDbGljaycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBsYXN0VWlFbnRpdHlDbGlja2VkLnNldChlbnRpdHksIGltYWdlRW50aXR5KTtcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KTtcbiAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NMSUNLX0lNQUdFKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChoaWRlQWZ0ZXJTZWNvbmRzKSB7XG4gICAgICBzdGFydFRpbWVvdXQoZW50aXR5LCBBY3Rpb25UeXBlLkhJREVfSU1BR0UsIGhpZGVBZnRlclNlY29uZHMsICgpID0+XG4gICAgICAgIGhhbmRsZUhpZGVJbWFnZShlbnRpdHksIHsgaW1hZ2VFbnRpdHk6IGltYWdlRW50aXR5IH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBISURFX0lNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZUhpZGVJbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkhJREVfSU1BR0U+KSB7XG4gICAgY29uc3QgeyBpbWFnZUVudGl0eSB9ID0gcGF5bG9hZDtcblxuICAgIGlmIChpbWFnZUVudGl0eSkge1xuICAgICAgZW5naW5lLnJlbW92ZUVudGl0eShpbWFnZUVudGl0eSBhcyBFbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGlja2VkSW1hZ2UgPSBsYXN0VWlFbnRpdHlDbGlja2VkLmdldChlbnRpdHkpO1xuICAgICAgaWYgKGNsaWNrZWRJbWFnZSkge1xuICAgICAgICBlbmdpbmUucmVtb3ZlRW50aXR5KGNsaWNrZWRJbWFnZSk7XG4gICAgICAgIGxhc3RVaUVudGl0eUNsaWNrZWQuZGVsZXRlKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gREFNQUdFXG4gIGZ1bmN0aW9uIGhhbmRsZURhbWFnZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkRBTUFHRT4pIHtcbiAgICBjb25zdCB7IHJhZGl1cywgbGF5ZXIsIGhpdHMgfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgZW50aXR5UG9zaXRpb24gPSBBdmF0YXJBdHRhY2guaGFzKGVudGl0eSlcbiAgICAgID8gZ2V0UGxheWVyUG9zaXRpb24oKVxuICAgICAgOiBnZXRXb3JsZFBvc2l0aW9uKGVudGl0eSk7XG5cbiAgICBjb25zdCBnZXRSb290ID0gKGVudGl0eTogRW50aXR5KTogRW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldEVudGl0eVBhcmVudChlbnRpdHkpO1xuICAgICAgcmV0dXJuICFwYXJlbnQgPyBlbnRpdHkgOiBnZXRSb290KHBhcmVudCk7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIGRhbWFnZVRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0V29ybGRQb3NpdGlvbih0YXJnZXQpO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3RhbmNlKGVudGl0eVBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbik7XG5cbiAgICAgIC8vIGF2b2lkIGNhdXNpbmcgZGFtYWdlIHRvIHRoZSBlbnRpdHkgaXRzZWxmIG9yIGl0cyBjaGlsZHJlblxuICAgICAgY29uc3QgZW50aXR5VHJlZSA9IEFycmF5LmZyb20oZ2V0Q29tcG9uZW50RW50aXR5VHJlZShlbmdpbmUsIGVudGl0eSwgVHJhbnNmb3JtKSk7XG4gICAgICBjb25zdCBpc1BhcnRPZkVudGl0eVRyZWUgPSBlbnRpdHlUcmVlLnNvbWUoKCQ6IEVudGl0eSkgPT4gJCA9PT0gdGFyZ2V0KTtcbiAgICAgIGlmIChpc1BhcnRPZkVudGl0eVRyZWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXllcikge1xuICAgICAgICBpZiAobGF5ZXIgPT09IFByb3hpbWl0eUxheWVyLlBMQVlFUikge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHRhcmdldCk7XG4gICAgICAgICAgaWYgKHJvb3QgIT09IGVuZ2luZS5QbGF5ZXJFbnRpdHkgJiYgcm9vdCAhPT0gZW5naW5lLkNhbWVyYUVudGl0eSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxheWVyID09PSBQcm94aW1pdHlMYXllci5OT05fUExBWUVSKSB7XG4gICAgICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3QodGFyZ2V0KTtcbiAgICAgICAgICBpZiAocm9vdCA9PT0gZW5naW5lLlBsYXllckVudGl0eSB8fCByb290ID09PSBlbmdpbmUuQ2FtZXJhRW50aXR5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaXN0YW5jZSA8PSByYWRpdXMpIHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBoaXRzID09PSB1bmRlZmluZWQgPyAxIDogTWF0aC5tYXgoaGl0cywgMSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKHRhcmdldCk7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0RBTUFHRSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNT1ZFX1BMQVlFUl9IRVJFXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVQbGF5ZXJIZXJlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuTU9WRV9QTEFZRVJfSEVSRT4sXG4gICkge1xuICAgIGNvbnN0IGhlcmUgPSBnZXRXb3JsZFBvc2l0aW9uKGVudGl0eSk7XG4gICAgY29uc3Qgcm90YXRpb24gPSBnZXRXb3JsZFJvdGF0aW9uKGVudGl0eSk7XG5cbiAgICAvLyBXZSBXYW50IHRoZSBwbGF5ZXIgdG8gbG9vayAxbSBpbiBmcm9udCBvZiB0aGUgZW50aXR5XG4gICAgY29uc3QgZm9yd2FyZCA9IFZlY3RvcjMuRm9yd2FyZCgpO1xuICAgIGNvbnN0IHJvdGF0ZWREaXJlY3Rpb24gPSBWZWN0b3IzLnJvdGF0ZShmb3J3YXJkLCByb3RhdGlvbik7XG4gICAgY29uc3QgbW92ZURlbHRhID0gVmVjdG9yMy5zY2FsZShyb3RhdGVkRGlyZWN0aW9uLCAxKTtcblxuICAgIHZvaWQgbW92ZVBsYXllclRvKHtcbiAgICAgIG5ld1JlbGF0aXZlUG9zaXRpb246IGhlcmUsXG4gICAgICBhdmF0YXJUYXJnZXQ6IFZlY3RvcjMuYWRkKGhlcmUsIG1vdmVEZWx0YSksXG4gICAgfSk7XG5cbiAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpO1xuICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9QTEFZRVJfU1BBV04pO1xuICB9XG5cbiAgLy8gUExBWUVSX0ZBQ0VfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVQbGF5ZXJGYWNlSXRlbShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlFUl9GQUNFX0lURU0+LFxuICApIHtcbiAgICBjb25zdCBpdGVtUG9zaXRpb24gPSBnZXRXb3JsZFBvc2l0aW9uKGVudGl0eSk7XG4gICAgY29uc3QgY3VycmVudFBsYXllclBvc2l0aW9uID0gZ2V0UGxheWVyUG9zaXRpb24oKTtcbiAgICB2b2lkIG1vdmVQbGF5ZXJUbyh7XG4gICAgICBuZXdSZWxhdGl2ZVBvc2l0aW9uOiBjdXJyZW50UGxheWVyUG9zaXRpb24sXG4gICAgICBhdmF0YXJUYXJnZXQ6IGl0ZW1Qb3NpdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBMQUNFX09OX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVQbGFjZU9uUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBQ0VfT05fUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBwbGF5ZXIgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5QbGF5ZXJFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgcGxheWVyKSB7XG4gICAgICB0cmFuc2Zvcm0ucG9zaXRpb24gPSBwbGF5ZXIucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gUk9UQVRFX0FTX1BMQVlFUlxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVBc1BsYXllcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlJPVEFURV9BU19QTEFZRVI+LFxuICApIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGNvbnN0IHBsYXllciA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW5naW5lLlBsYXllckVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSAmJiBwbGF5ZXIpIHtcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IHBsYXllci5yb3RhdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBQTEFDRV9PTl9DQU1FUkFcbiAgZnVuY3Rpb24gaGFuZGxlUGxhY2VPbkNhbWVyYShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQUNFX09OX0NBTUVSQT4sXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgY29uc3QgY2FtZXJhID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbmdpbmUuQ2FtZXJhRW50aXR5KTtcbiAgICBpZiAodHJhbnNmb3JtICYmIGNhbWVyYSkge1xuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gY2FtZXJhLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJPVEFURV9BU19DQU1FUkFcbiAgZnVuY3Rpb24gaGFuZGxlUm90YXRlQXNDYW1lcmEoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ST1RBVEVfQVNfQ0FNRVJBPixcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwoZW50aXR5KTtcbiAgICBjb25zdCBjYW1lcmEgPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVuZ2luZS5DYW1lcmFFbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0gJiYgY2FtZXJhKSB7XG4gICAgICB0cmFuc2Zvcm0ucm90YXRpb24gPSBjYW1lcmEucm90YXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1BPU0lUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFBvc2l0aW9uKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1BPU0lUSU9OPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gVmVjdG9yMy5hZGQoXG4gICAgICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uLFxuICAgICAgICAgIFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uID0gVmVjdG9yMy5jcmVhdGUocGF5bG9hZC54LCBwYXlsb2FkLnksIHBheWxvYWQueik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1JPVEFUSU9OXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFJvdGF0aW9uKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1JPVEFUSU9OPikge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSk7XG4gICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHBheWxvYWQucmVsYXRpdmUpIHtcbiAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gUXVhdGVybmlvbi5tdWx0aXBseShcbiAgICAgICAgICB0cmFuc2Zvcm0ucm90YXRpb24sXG4gICAgICAgICAgUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gUXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNFVF9TQ0FMRVxuICBmdW5jdGlvbiBoYW5kbGVTZXRTY2FsZShlbnRpdHk6IEVudGl0eSwgcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TQ0FMRT4pIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlbGF0aXZlKSB7XG4gICAgICAgIHRyYW5zZm9ybS5zY2FsZSA9IFZlY3RvcjMuYWRkKFxuICAgICAgICAgIHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgICAgICBWZWN0b3IzLmNyZWF0ZShwYXlsb2FkLngsIHBheWxvYWQueSwgcGF5bG9hZC56KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybS5zY2FsZSA9IFZlY3RvcjMuY3JlYXRlKHBheWxvYWQueCwgcGF5bG9hZC55LCBwYXlsb2FkLnopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZPTExPV19QTEFZRVJcbiAgZnVuY3Rpb24gaGFuZGxlRm9sbG93UGxheWVyKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuRk9MTE9XX1BMQVlFUj4pIHtcbiAgICBjb25zdCB7IHNwZWVkLCB4LCB5LCB6LCBtaW5EaXN0YW5jZSB9ID0gcGF5bG9hZDtcbiAgICBmb2xsb3dNYXAuc2V0KGVudGl0eSwge1xuICAgICAgdGFyZ2V0OiBlbmdpbmUuUGxheWVyRW50aXR5LFxuICAgICAgc3BlZWQsXG4gICAgICBtaW5EaXN0YW5jZSxcbiAgICAgIGF4ZXM6IHsgeCwgeSwgeiB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU1RPUF9GT0xMT1dJTkdfUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BGb2xsb3dpbmdQbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0ZPTExPV0lOR19QTEFZRVI+LFxuICApIHtcbiAgICBmb2xsb3dNYXAuZGVsZXRlKGVudGl0eSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSYW5kb20oZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5SQU5ET00+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpO1xuICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb25zW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFjdGlvbnMubGVuZ3RoKV07XG4gICAgY29uc3QgYWN0aW9uID0gZmluZEFjdGlvbkJ5TmFtZShlbnRpdHksIGFjdGlvbk5hbWUpO1xuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUJhdGNoKGVudGl0eTogRW50aXR5LCBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQkFUQ0g+KSB7XG4gICAgY29uc3QgeyBhY3Rpb25zIH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpO1xuICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBmaW5kQWN0aW9uQnlOYW1lKGVudGl0eSwgYWN0aW9uTmFtZSk7XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbkV2ZW50cy5lbWl0KGFjdGlvbi5uYW1lLCBnZXRQYXlsb2FkKGFjdGlvbikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUhlYWxQbGF5ZXIoZW50aXR5OiBFbnRpdHksIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5IRUFMX1BMQVlFUj4pIHtcbiAgICBjb25zdCB7IG11bHRpcGxpZXIgfSA9IHBheWxvYWQ7XG5cbiAgICBjb25zdCBnZXRSb290ID0gKGVudGl0eTogRW50aXR5KTogRW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldEVudGl0eVBhcmVudChlbnRpdHkpO1xuICAgICAgcmV0dXJuICFwYXJlbnQgPyBlbnRpdHkgOiBnZXRSb290KHBhcmVudCk7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIGhlYWxUYXJnZXRzKSB7XG4gICAgICBjb25zdCByb290ID0gZ2V0Um9vdCh0YXJnZXQpO1xuICAgICAgaWYgKHJvb3QgPT09IGVuZ2luZS5QbGF5ZXJFbnRpdHkpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHModGFyZ2V0KTtcbiAgICAgICAgY29uc3QgdG90YWwgPSBNYXRoLm1heChtdWx0aXBsaWVyID8/IDEsIDEpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzLmVtaXQoVHJpZ2dlclR5cGUuT05fSEVBTF9QTEFZRVIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdCh1cmw6IHN0cmluZywgaW5pdD86IEZsYXRGZXRjaEluaXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzaWduZWRGZXRjaCh7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICAuLi4oaW5pdCA/IHsgaW5pdCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAgIC8vICdFcnJvciBmZXRjaGluZyBjYW1wYWlnbiBkYXRhJ1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IEpTT04ucGFyc2UocmVzcG9uc2UuYm9keSk7XG5cbiAgICAgIGlmICghanNvbi5vaykge1xuICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YSdcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBqc29uLmRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFRPRE86IFNob3cgYW4gZXJyb3IgUHJvbXB0XG4gICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YSdcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2FtcGFpZ25zQnlEaXNwZW5zZXJLZXkoZGlzcGVuc2VyS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB1cmwgPSBgJHtSRVdBUkRTX1NFUlZFUl9VUkx9L2FwaS9jYW1wYWlnbnMva2V5cz9jYW1wYWlnbl9rZXk9JHtlbmNvZGVVUklDb21wb25lbnQoZGlzcGVuc2VyS2V5KX1gO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh1cmwpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2FwdGNoYSgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QoYCR7UkVXQVJEU19TRVJWRVJfVVJMfS9hcGkvY2FwdGNoYWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0VG9rZW4oXG4gICAgZGlzcGVuc2VyS2V5OiBzdHJpbmcsXG4gICAgY2FwdGNoYT86IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH0sXG4gICkge1xuICAgIGNvbnN0IHVybCA9IGAke1JFV0FSRFNfU0VSVkVSX1VSTH0vYXBpL3Jld2FyZHNgO1xuICAgIGNvbnN0IHJlYWxtID0gYXdhaXQgZ2V0UmVhbG0oe30pO1xuICAgIGNvbnN0IHBsYXllciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjYW1wYWlnbl9rZXk6IGRpc3BlbnNlcktleSxcbiAgICAgICAgYmVuZWZpY2lhcnk6ICFwbGF5ZXI/LmlzR3Vlc3QgPyBwbGF5ZXI/LnVzZXJJZCA6ICcnLFxuICAgICAgICBjYXRhbHlzdDogcmVhbG0ucmVhbG1JbmZvID8gcmVhbG0ucmVhbG1JbmZvLmJhc2VVcmwgOiAnJyxcbiAgICAgICAgLi4uKGNhcHRjaGEgPyB7IGNhcHRjaGFfaWQ6IGNhcHRjaGEuaWQsIGNhcHRjaGFfdmFsdWU6IGNhcHRjaGEudmFsdWUgfSA6IHt9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsYWltQWlyZHJvcChlbnRpdHk6IEVudGl0eSwgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5DTEFJTV9BSVJEUk9QPikge1xuICAgIGNvbnN0IHJld2FyZHMgPSBSZXdhcmRzLmdldE9yTnVsbChlbnRpdHkpO1xuICAgIGlmICghcmV3YXJkcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGVzdE1vZGUsIGNhbXBhaWduSWQsIGRpc3BlbnNlcktleSB9ID0gcmV3YXJkcztcblxuICAgIGlmICh0ZXN0TW9kZSkge1xuICAgICAgLy8gVE9ETzogU2hvdyBhbiBVSSBpbmRpY2F0aW5nIHRlc3RpbmcgbW9kZVxuICAgICAgLy8gJ0hhbmRsZSBDbGFpbSBBaXJkcm9wIGluIFRlc3QgTW9kZSA6KSdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmZXRjaENhbXBhaWduc0J5RGlzcGVuc2VyS2V5KGRpc3BlbnNlcktleSlcbiAgICAgIC50aGVuKGNhbXBhaWducyA9PiB7XG4gICAgICAgIGNvbnN0IGNhbXBhaWduID0gY2FtcGFpZ25zLmZpbmQoKGM6IGFueSkgPT4gYy5jYW1wYWlnbl9pZCA9PT0gY2FtcGFpZ25JZCk7XG4gICAgICAgIGlmIChjYW1wYWlnbiAmJiBjYW1wYWlnbi5lbmFibGVkKSB7XG4gICAgICAgICAgaWYgKGNhbXBhaWduLnJlcXVpcmVzX2NhcHRjaGEpIHtcbiAgICAgICAgICAgIGZldGNoQ2FwdGNoYSgpXG4gICAgICAgICAgICAgIC50aGVuKGNhcHRjaGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYXB0Y2hhKSB7XG4gICAgICAgICAgICAgICAgICBfc2hvd0NhcHRjaGFQcm9tcHQoZW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgIGNhbXBhaWduSWQsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BlbnNlcktleSxcbiAgICAgICAgICAgICAgICAgICAgY2FwdGNoYSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKF9lcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdyBhbiBlcnJvciBQcm9tcHRcbiAgICAgICAgICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FwdGNoYSdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3RUb2tlbihkaXNwZW5zZXJLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChfZXJyb3IgPT4ge1xuICAgICAgICAvLyBUT0RPOiBTaG93IGFuIGVycm9yIFByb21wdFxuICAgICAgICAvLyAnRXJyb3IgZmV0Y2hpbmcgY2FtcGFpZ24gZGF0YScsIGVycm9yXG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zaG93Q2FwdGNoYVByb21wdChcbiAgICBfZW50aXR5OiBFbnRpdHksXG4gICAgZGF0YTogeyBjYW1wYWlnbklkOiBzdHJpbmc7IGRpc3BlbnNlcktleTogc3RyaW5nOyBjYXB0Y2hhOiBhbnkgfSxcbiAgKSB7XG4gICAgc2hvd0NhcHRjaGFQcm9tcHQoXG4gICAgICBlbmdpbmUsXG4gICAgICBVaVRyYW5zZm9ybSxcbiAgICAgIFVpQmFja2dyb3VuZCxcbiAgICAgIFVpVGV4dCxcbiAgICAgIFVpSW5wdXQsXG4gICAgICBVaUlucHV0UmVzdWx0LFxuICAgICAgcG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgICAgIGRhdGEsXG4gICAgICBpbnB1dFRleHQgPT4ge1xuICAgICAgICAvLyBSZXF1ZXN0IHRva2VuIHdpdGggY2FwdGNoYSB2YWxpZGF0aW9uXG4gICAgICAgIHJlcXVlc3RUb2tlbihkYXRhLmRpc3BlbnNlcktleSwge1xuICAgICAgICAgIGlkOiBkYXRhLmNhcHRjaGEuaWQsXG4gICAgICAgICAgdmFsdWU6IGlucHV0VGV4dCxcbiAgICAgICAgfSkudGhlbigodG9rZW46IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgLy8gJ1Rva2VuIHJlcXVlc3RlZCBzdWNjZXNzZnVsbHknLCB7IHRva2VuIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2FsbFNjcmlwdE1ldGhvZChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuQ0FMTF9TQ1JJUFRfTUVUSE9EPixcbiAgKSB7XG4gICAgY29uc3QgeyBzY3JpcHRQYXRoLCBtZXRob2ROYW1lLCBwYXJhbXMgfSA9IHBheWxvYWQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1WYWx1ZXMgPSBPYmplY3QudmFsdWVzKHBhcmFtcyB8fCB7fSk7XG4gICAgICBjYWxsU2NyaXB0TWV0aG9kKGVudGl0eSwgc2NyaXB0UGF0aCwgbWV0aG9kTmFtZSwgLi4ucGFyYW1WYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2NyaXB0IEFjdGlvbiBFcnJvcl0gRmFpbGVkIHRvIGNhbGwgJHttZXRob2ROYW1lfSBvbiAke3NjcmlwdFBhdGh9OmAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBMT0dfVE9fQ09OU09MRVxuICBmdW5jdGlvbiBoYW5kbGVMb2dUb0NvbnNvbGUocGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLkxPR19UT19DT05TT0xFPikge1xuICAgIGNvbnNvbGUubG9nKHBheWxvYWQubWVzc2FnZSk7XG4gIH1cblxuICAvLyBERUxFVEVcbiAgZnVuY3Rpb24gaGFuZGxlRGVsZXRlKGVudGl0eTogRW50aXR5KSB7XG4gICAgc3RvcEFsbFRpbWVvdXRzKGVudGl0eSk7XG4gICAgc3RvcEFsbEludGVydmFscyhlbnRpdHkpO1xuICAgIGVuZ2luZS5yZW1vdmVFbnRpdHlXaXRoQ2hpbGRyZW4oZW50aXR5KTtcbiAgfVxufVxuIl19
|