@inkeep/agents-api 0.58.4 → 0.58.5
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/dist/.well-known/workflow/v1/flow.cjs +95 -95
- package/dist/.well-known/workflow/v1/flow.cjs.debug.json +2 -2
- package/dist/.well-known/workflow/v1/manifest.json +5 -5
- package/dist/.well-known/workflow/v1/step.cjs.debug.json +2 -2
- package/dist/createApp.d.ts +2 -2
- package/dist/data/db/manageDbClient.d.ts +2 -2
- package/dist/data/db/runDbClient.d.ts +2 -2
- package/dist/domains/evals/routes/datasetTriggers.d.ts +2 -2
- package/dist/domains/evals/routes/index.d.ts +2 -2
- package/dist/domains/evals/workflow/routes.d.ts +2 -2
- package/dist/domains/manage/routes/index.d.ts +2 -2
- package/dist/domains/manage/routes/invitations.d.ts +2 -2
- package/dist/domains/manage/routes/passwordResetLinks.d.ts +2 -2
- package/dist/domains/manage/routes/signoz.d.ts +2 -2
- package/dist/domains/manage/routes/users.d.ts +2 -2
- package/dist/domains/mcp/routes/mcp.d.ts +2 -2
- package/dist/domains/run/agents/relationTools.d.ts +2 -2
- package/dist/domains/run/utils/token-estimator.d.ts +2 -2
- package/dist/factory.d.ts +12 -12
- package/dist/index.d.ts +11 -11
- package/dist/middleware/evalsAuth.d.ts +2 -2
- package/dist/middleware/manageAuth.d.ts +3 -3
- package/dist/middleware/projectConfig.d.ts +3 -3
- package/dist/middleware/requirePermission.d.ts +2 -2
- package/dist/middleware/runAuth.d.ts +4 -4
- package/package.json +5 -5
|
@@ -54508,87 +54508,6 @@ var require_ms = __commonJS({
|
|
|
54508
54508
|
}
|
|
54509
54509
|
});
|
|
54510
54510
|
|
|
54511
|
-
// src/domains/evals/workflow/functions/evaluateConversation.ts
|
|
54512
|
-
var getConversationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep");
|
|
54513
|
-
var getEvaluatorsStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep");
|
|
54514
|
-
var executeEvaluatorStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep");
|
|
54515
|
-
var logStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//logStep");
|
|
54516
|
-
async function _evaluateConversationWorkflow(payload) {
|
|
54517
|
-
const { conversationId, evaluatorIds } = payload;
|
|
54518
|
-
await logStep("Starting conversation evaluation", payload);
|
|
54519
|
-
const conversation = await getConversationStep(payload);
|
|
54520
|
-
const evaluators = await getEvaluatorsStep(payload);
|
|
54521
|
-
if (evaluators.length === 0) {
|
|
54522
|
-
await logStep("No valid evaluators found", {
|
|
54523
|
-
conversationId,
|
|
54524
|
-
evaluatorIds
|
|
54525
|
-
});
|
|
54526
|
-
return {
|
|
54527
|
-
success: false,
|
|
54528
|
-
reason: "No valid evaluators"
|
|
54529
|
-
};
|
|
54530
|
-
}
|
|
54531
|
-
const results = [];
|
|
54532
|
-
for (const evaluator of evaluators) {
|
|
54533
|
-
const result = await executeEvaluatorStep(payload, evaluator.id, conversation);
|
|
54534
|
-
results.push(result);
|
|
54535
|
-
}
|
|
54536
|
-
return {
|
|
54537
|
-
success: true,
|
|
54538
|
-
conversationId,
|
|
54539
|
-
resultCount: results.length
|
|
54540
|
-
};
|
|
54541
|
-
}
|
|
54542
|
-
__name(_evaluateConversationWorkflow, "_evaluateConversationWorkflow");
|
|
54543
|
-
_evaluateConversationWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow";
|
|
54544
|
-
globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow", _evaluateConversationWorkflow);
|
|
54545
|
-
var evaluateConversationWorkflow = Object.assign(_evaluateConversationWorkflow, {
|
|
54546
|
-
workflowId: "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow"
|
|
54547
|
-
});
|
|
54548
|
-
|
|
54549
|
-
// src/domains/evals/workflow/functions/runDatasetItem.ts
|
|
54550
|
-
var callChatApiStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//callChatApiStep");
|
|
54551
|
-
var createRelationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//createRelationStep");
|
|
54552
|
-
var executeEvaluatorStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//executeEvaluatorStep");
|
|
54553
|
-
var logStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//logStep");
|
|
54554
|
-
async function _runDatasetItemWorkflow(payload) {
|
|
54555
|
-
const { datasetItemId, datasetRunId, agentId, evaluatorIds, evaluationRunId } = payload;
|
|
54556
|
-
await logStep2("Starting dataset item processing", {
|
|
54557
|
-
datasetItemId,
|
|
54558
|
-
datasetRunId,
|
|
54559
|
-
agentId,
|
|
54560
|
-
hasEvaluators: !!(evaluatorIds && evaluatorIds.length > 0)
|
|
54561
|
-
});
|
|
54562
|
-
const result = await callChatApiStep(payload);
|
|
54563
|
-
if (result.conversationId) {
|
|
54564
|
-
await createRelationStep(payload, result.conversationId);
|
|
54565
|
-
if (evaluatorIds && evaluatorIds.length > 0 && evaluationRunId) {
|
|
54566
|
-
for (const evaluatorId of evaluatorIds) {
|
|
54567
|
-
await executeEvaluatorStep2(payload.tenantId, payload.projectId, result.conversationId, evaluatorId, evaluationRunId, payload.datasetItemExpectedOutput);
|
|
54568
|
-
}
|
|
54569
|
-
}
|
|
54570
|
-
} else {
|
|
54571
|
-
await logStep2("No conversation created", {
|
|
54572
|
-
datasetItemId,
|
|
54573
|
-
datasetRunId,
|
|
54574
|
-
error: result.error
|
|
54575
|
-
});
|
|
54576
|
-
}
|
|
54577
|
-
return {
|
|
54578
|
-
success: !result.error,
|
|
54579
|
-
datasetItemId,
|
|
54580
|
-
datasetRunId,
|
|
54581
|
-
conversationId: result.conversationId || null,
|
|
54582
|
-
error: result.error || null
|
|
54583
|
-
};
|
|
54584
|
-
}
|
|
54585
|
-
__name(_runDatasetItemWorkflow, "_runDatasetItemWorkflow");
|
|
54586
|
-
_runDatasetItemWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow";
|
|
54587
|
-
globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow", _runDatasetItemWorkflow);
|
|
54588
|
-
var runDatasetItemWorkflow = Object.assign(_runDatasetItemWorkflow, {
|
|
54589
|
-
workflowId: "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow"
|
|
54590
|
-
});
|
|
54591
|
-
|
|
54592
54511
|
// ../node_modules/.pnpm/@workflow+utils@4.1.0-beta.11/node_modules/@workflow/utils/dist/time.js
|
|
54593
54512
|
var import_ms = __toESM(require_ms(), 1);
|
|
54594
54513
|
|
|
@@ -54630,7 +54549,7 @@ __name(getWorkflowMetadata, "getWorkflowMetadata");
|
|
|
54630
54549
|
var fetch = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//workflow@4.1.0-beta.54//fetch");
|
|
54631
54550
|
|
|
54632
54551
|
// src/domains/run/workflow/steps/scheduledTriggerSteps.ts
|
|
54633
|
-
var
|
|
54552
|
+
var logStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//logStep");
|
|
54634
54553
|
var calculateNextExecutionStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//calculateNextExecutionStep");
|
|
54635
54554
|
var computeSleepDurationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//computeSleepDurationStep");
|
|
54636
54555
|
var getNextPendingInvocationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//getNextPendingInvocationStep");
|
|
@@ -54654,7 +54573,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54654
54573
|
const { tenantId, projectId, agentId, scheduledTriggerId } = payload;
|
|
54655
54574
|
const metadata = getWorkflowMetadata();
|
|
54656
54575
|
const runnerId = metadata.workflowRunId;
|
|
54657
|
-
await
|
|
54576
|
+
await logStep("Starting scheduled trigger runner workflow", {
|
|
54658
54577
|
tenantId,
|
|
54659
54578
|
projectId,
|
|
54660
54579
|
agentId,
|
|
@@ -54671,7 +54590,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54671
54590
|
runnerId
|
|
54672
54591
|
});
|
|
54673
54592
|
if (!enabledCheck.shouldContinue || !enabledCheck.trigger) {
|
|
54674
|
-
await
|
|
54593
|
+
await logStep("Scheduled trigger workflow stopping", {
|
|
54675
54594
|
scheduledTriggerId,
|
|
54676
54595
|
reason: enabledCheck.reason
|
|
54677
54596
|
});
|
|
@@ -54692,7 +54611,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54692
54611
|
let scheduledFor;
|
|
54693
54612
|
if (isOneTime) {
|
|
54694
54613
|
if (!trigger.runAt) {
|
|
54695
|
-
await
|
|
54614
|
+
await logStep("One-time trigger missing runAt", {
|
|
54696
54615
|
scheduledTriggerId
|
|
54697
54616
|
});
|
|
54698
54617
|
return {
|
|
@@ -54709,7 +54628,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54709
54628
|
});
|
|
54710
54629
|
scheduledFor = nextExecutionTime;
|
|
54711
54630
|
} else {
|
|
54712
|
-
await
|
|
54631
|
+
await logStep("Trigger missing both cronExpression and runAt", {
|
|
54713
54632
|
scheduledTriggerId
|
|
54714
54633
|
});
|
|
54715
54634
|
return {
|
|
@@ -54729,7 +54648,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54729
54648
|
});
|
|
54730
54649
|
invocation = result.invocation;
|
|
54731
54650
|
if (isOneTime && result.alreadyExists && invocation.status !== "pending") {
|
|
54732
|
-
await
|
|
54651
|
+
await logStep("One-time trigger already executed", {
|
|
54733
54652
|
scheduledTriggerId,
|
|
54734
54653
|
invocationId: invocation.id,
|
|
54735
54654
|
status: invocation.status
|
|
@@ -54740,13 +54659,13 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54740
54659
|
};
|
|
54741
54660
|
}
|
|
54742
54661
|
}
|
|
54743
|
-
await
|
|
54662
|
+
await logStep("Got next pending invocation", {
|
|
54744
54663
|
scheduledTriggerId,
|
|
54745
54664
|
invocationId: invocation.id,
|
|
54746
54665
|
scheduledFor: invocation.scheduledFor
|
|
54747
54666
|
});
|
|
54748
54667
|
const sleepMs = await computeSleepDurationStep(invocation.scheduledFor);
|
|
54749
|
-
await
|
|
54668
|
+
await logStep("Sleeping until scheduled time", {
|
|
54750
54669
|
scheduledTriggerId,
|
|
54751
54670
|
invocationId: invocation.id,
|
|
54752
54671
|
scheduledFor: invocation.scheduledFor,
|
|
@@ -54761,7 +54680,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54761
54680
|
runnerId
|
|
54762
54681
|
});
|
|
54763
54682
|
if (!postSleepCheck.shouldContinue || !postSleepCheck.trigger) {
|
|
54764
|
-
await
|
|
54683
|
+
await logStep("Trigger disabled/deleted during sleep, stopping", {
|
|
54765
54684
|
scheduledTriggerId,
|
|
54766
54685
|
reason: postSleepCheck.reason
|
|
54767
54686
|
});
|
|
@@ -54779,7 +54698,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54779
54698
|
invocationId: invocation.id
|
|
54780
54699
|
});
|
|
54781
54700
|
if (cancelCheck.cancelled) {
|
|
54782
|
-
await
|
|
54701
|
+
await logStep("Invocation was cancelled, skipping to next", {
|
|
54783
54702
|
scheduledTriggerId,
|
|
54784
54703
|
invocationId: invocation.id
|
|
54785
54704
|
});
|
|
@@ -54797,7 +54716,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54797
54716
|
invocationId: invocation.id
|
|
54798
54717
|
});
|
|
54799
54718
|
if (retryCancel.cancelled) {
|
|
54800
|
-
await
|
|
54719
|
+
await logStep("Invocation cancelled during retry loop", {
|
|
54801
54720
|
scheduledTriggerId,
|
|
54802
54721
|
invocationId: invocation.id
|
|
54803
54722
|
});
|
|
@@ -54840,7 +54759,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54840
54759
|
scheduledTriggerId,
|
|
54841
54760
|
invocationId: invocation.id
|
|
54842
54761
|
});
|
|
54843
|
-
await
|
|
54762
|
+
await logStep("Scheduled trigger execution completed", {
|
|
54844
54763
|
scheduledTriggerId,
|
|
54845
54764
|
invocationId: invocation.id,
|
|
54846
54765
|
conversationId: result.conversationId
|
|
@@ -54849,7 +54768,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
|
|
|
54849
54768
|
break;
|
|
54850
54769
|
}
|
|
54851
54770
|
lastError = result.error || "Unknown error";
|
|
54852
|
-
await
|
|
54771
|
+
await logStep("Scheduled trigger execution failed", {
|
|
54853
54772
|
scheduledTriggerId,
|
|
54854
54773
|
invocationId: invocation.id,
|
|
54855
54774
|
attemptNumber,
|
|
@@ -54895,7 +54814,88 @@ globalThis.__private_workflows.set("workflow//./src/domains/run/workflow/functio
|
|
|
54895
54814
|
var scheduledTriggerRunnerWorkflow = Object.assign(_scheduledTriggerRunnerWorkflow, {
|
|
54896
54815
|
workflowId: "workflow//./src/domains/run/workflow/functions/scheduledTriggerRunner//_scheduledTriggerRunnerWorkflow"
|
|
54897
54816
|
});
|
|
54898
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24udHMiLCAic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crdXRpbHNANC4xLjAtYmV0YS4xMS9ub2RlX21vZHVsZXMvQHdvcmtmbG93L3V0aWxzL3NyYy90aW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crY29yZUA0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL3NyYy9zeW1ib2xzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crY29yZUA0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL3NyYy9zbGVlcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K2NvcmVANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9zcmMvd29ya2Zsb3cvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS93b3JrZmxvd0A0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9AbmVzdGpzK2NvbW1vbkAxMS4xLjEzX3JlZmxlY3QtbWV0YWRfZjg1MjgxZjI1ODBkNzA2NWZjNTE0ZTYzN2Y1ZjVlMWYvbm9kZV9tb2R1bGVzL3dvcmtmbG93L3NyYy9zdGRsaWIudHMiLCAic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50cyIsICJzcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogSGVscGVycy5cbiAqLyB2YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgKyBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiB5O1xuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIHJldHVybiBuICogdztcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBkO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBoO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBtO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBzO1xuICAgICAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgIGNhc2UgJ21zZWNzJzpcbiAgICAgICAgY2FzZSAnbXNlYyc6XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gICAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICAgIGlmIChtc0FicyA+PSBkKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gICAgfVxuICAgIHJldHVybiBtcyArICdtcyc7XG59XG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IG0pIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IHMpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovIGZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgIi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzXCI6e1wiX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24vL19ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50c1wiOntcImV4ZWN1dGVFdmFsdWF0b3JTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIn0sXCJnZXRDb252ZXJzYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwifSxcImdldEV2YWx1YXRvcnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0RXZhbHVhdG9yc1N0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwifX19fSovO1xudmFyIGdldENvbnZlcnNhdGlvblN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwiKTtcbnZhciBnZXRFdmFsdWF0b3JzU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9nZXRFdmFsdWF0b3JzU3RlcFwiKTtcbnZhciBleGVjdXRlRXZhbHVhdG9yU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTG9nIHdvcmtmbG93IHByb2dyZXNzXG4gKi8gdmFyIGxvZ1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwiKTtcbi8qKlxuICogTWFpbiB3b3JrZmxvdyBmdW5jdGlvbiAtIG9yY2hlc3RyYXRlcyB0aGUgZXZhbHVhdGlvbiBzdGVwcy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcnVucyBpbiBhIGRldGVybWluaXN0aWMgc2FuZGJveC5cbiAqIC0gRG8gTk9UIGNhbGwgTm9kZS5qcyBBUElzIGRpcmVjdGx5IGhlcmUgKG5vIERCLCBubyBmcywgZXRjLilcbiAqIC0gQWxsIHNpZGUgZWZmZWN0cyBtdXN0IGhhcHBlbiBpbiBzdGVwIGZ1bmN0aW9uc1xuICovIGFzeW5jIGZ1bmN0aW9uIF9ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBldmFsdWF0b3JJZHMgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgY29udmVyc2F0aW9uIGV2YWx1YXRpb24nLCBwYXlsb2FkKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25TdGVwKHBheWxvYWQpO1xuICAgIGNvbnN0IGV2YWx1YXRvcnMgPSBhd2FpdCBnZXRFdmFsdWF0b3JzU3RlcChwYXlsb2FkKTtcbiAgICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgbG9nU3RlcCgnTm8gdmFsaWQgZXZhbHVhdG9ycyBmb3VuZCcsIHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgZXZhbHVhdG9ySWRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246ICdObyB2YWxpZCBldmFsdWF0b3JzJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycyl7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVFdmFsdWF0b3JTdGVwKHBheWxvYWQsIGV2YWx1YXRvci5pZCwgY29udmVyc2F0aW9uKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9O1xufVxuX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIiwgX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdydcbn0pO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgZGF0YXNldCBpdGVtcyB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqXG4gKiBUaGlzIG1ha2VzIGRhdGFzZXQgcnVuIHByb2Nlc3NpbmcgZmlyZS1hbmQtZm9yZ2V0IC0gZWFjaCBpdGVtIGlzIHF1ZXVlZFxuICogaW5kZXBlbmRlbnRseSBhbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSB3b3JrZmxvdyBzeXN0ZW0uXG4gKi8gLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHNcIjp7XCJfcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzXCI6e1wiY2FsbENoYXRBcGlTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCJ9LFwiY3JlYXRlUmVsYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY3JlYXRlUmVsYXRpb25TdGVwXCJ9LFwiZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwifSxcImxvZ1N0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCJ9fX19Ki87XG4vKipcbiAqIFN0ZXA6IENhbGwgdGhlIGNoYXQgQVBJIHRvIHByb2Nlc3MgdGhlIGRhdGFzZXQgaXRlbVxuICovIHZhciBjYWxsQ2hhdEFwaVN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDcmVhdGUgY29udmVyc2F0aW9uIHJlbGF0aW9uIGluIGRhdGFiYXNlXG4gKi8gdmFyIGNyZWF0ZVJlbGF0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9jcmVhdGVSZWxhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgYSBzaW5nbGUgZXZhbHVhdG9yIG9uIGEgY29udmVyc2F0aW9uXG4gKi8gdmFyIGV4ZWN1dGVFdmFsdWF0b3JTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0vL2V4ZWN1dGVFdmFsdWF0b3JTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBMb2cgd29ya2Zsb3cgcHJvZ3Jlc3NcbiAqLyB2YXIgbG9nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBNYWluIHdvcmtmbG93IGZ1bmN0aW9uIC0gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFzZXQgaXRlbSB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqIE9wdGlvbmFsbHkgcnVucyBldmFsdWF0b3JzIG9uIHRoZSByZXN1bHRpbmcgY29udmVyc2F0aW9uLlxuICovIGFzeW5jIGZ1bmN0aW9uIF9ydW5EYXRhc2V0SXRlbVdvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGRhdGFzZXRJdGVtSWQsIGRhdGFzZXRSdW5JZCwgYWdlbnRJZCwgZXZhbHVhdG9ySWRzLCBldmFsdWF0aW9uUnVuSWQgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgZGF0YXNldCBpdGVtIHByb2Nlc3NpbmcnLCB7XG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgaGFzRXZhbHVhdG9yczogISEoZXZhbHVhdG9ySWRzICYmIGV2YWx1YXRvcklkcy5sZW5ndGggPiAwKVxuICAgIH0pO1xuICAgIC8vIENhbGwgY2hhdCBBUElcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsQ2hhdEFwaVN0ZXAocGF5bG9hZCk7XG4gICAgLy8gQ3JlYXRlIHJlbGF0aW9uIGlmIHdlIGdvdCBhIGNvbnZlcnNhdGlvblxuICAgIGlmIChyZXN1bHQuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUmVsYXRpb25TdGVwKHBheWxvYWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCk7XG4gICAgICAgIC8vIFJ1biBldmFsdWF0aW9ucyBpZiBjb25maWd1cmVkXG4gICAgICAgIGlmIChldmFsdWF0b3JJZHMgJiYgZXZhbHVhdG9ySWRzLmxlbmd0aCA+IDAgJiYgZXZhbHVhdGlvblJ1bklkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWx1YXRvcklkIG9mIGV2YWx1YXRvcklkcyl7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUV2YWx1YXRvclN0ZXAocGF5bG9hZC50ZW5hbnRJZCwgcGF5bG9hZC5wcm9qZWN0SWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCwgZXZhbHVhdG9ySWQsIGV2YWx1YXRpb25SdW5JZCwgcGF5bG9hZC5kYXRhc2V0SXRlbUV4cGVjdGVkT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ05vIGNvbnZlcnNhdGlvbiBjcmVhdGVkJywge1xuICAgICAgICAgICAgZGF0YXNldEl0ZW1JZCxcbiAgICAgICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsXG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZCB8fCBudWxsLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yIHx8IG51bGxcbiAgICB9O1xufVxuX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIiwgX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdydcbn0pO1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIi8qKlxuICogU3RlcCBmdW5jdGlvbnMgZm9yIHNjaGVkdWxlZCB0cmlnZ2VyIHdvcmtmbG93LlxuICpcbiAqIFRoZXNlIHN0ZXAgZnVuY3Rpb25zIGhhdmUgZnVsbCBOb2RlLmpzIGFjY2VzcyBhbmQgaGFuZGxlIGFsbCBkYXRhYmFzZVxuICogb3BlcmF0aW9ucyBhbmQgZXh0ZXJuYWwgc2VydmljZSBjYWxscy5cbiAqLyAvKipfX2ludGVybmFsX3dvcmtmbG93c3tcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50c1wiOntcImFkZENvbnZlcnNhdGlvbklkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIn0sXCJjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwifSxcImNoZWNrSW52b2NhdGlvbkNhbmNlbGxlZFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwifSxcImNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCJ9LFwiY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NvbXB1dGVTbGVlcER1cmF0aW9uU3RlcFwifSxcImNyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXBcIn0sXCJkZWxldGVQZW5kaW5nSW52b2NhdGlvbnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIn0sXCJleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCJ9LFwiZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9nZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwXCJ9LFwiaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2xvZ1N0ZXBcIn0sXCJtYXJrQ29tcGxldGVkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwifSxcIm1hcmtGYWlsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCJ9LFwibWFya1J1bm5pbmdTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtSdW5uaW5nU3RlcFwifX19fSovO1xuLyoqXG4gKiBTdGVwOiBMb2cgYSBtZXNzYWdlIChhbGxvd3MgbG9nZ2luZyBmcm9tIHdvcmtmbG93IGNvbnRleHQpXG4gKi8gZXhwb3J0IHZhciBsb2dTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDYWxjdWxhdGUgdGhlIG5leHQgZXhlY3V0aW9uIHRpbWUgcmVsYXRpdmUgdG8gYSBiYXNlIHRpbWUuXG4gKi8gZXhwb3J0IHZhciBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2FsY3VsYXRlTmV4dEV4ZWN1dGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENvbXB1dGUgc2xlZXAgZHVyYXRpb25cbiAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHRvIHNsZWVwLlxuICovIGV4cG9ydCB2YXIgY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jb21wdXRlU2xlZXBEdXJhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEdldCB0aGUgbmV4dCBwZW5kaW5nIGludm9jYXRpb24gdG8gZXhlY3V0ZSAoZWFybGllc3Qgc2NoZWR1bGVkRm9yKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBwZW5kaW5nIGludm9jYXRpb25zIGV4aXN0LlxuICovIGV4cG9ydCB2YXIgZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiKTtcbi8qKlxuICogU3RlcDogRGVsZXRlIGFsbCBwZW5kaW5nIGludm9jYXRpb25zIGZvciBhIHRyaWdnZXIuXG4gKiBVc2VkIHdoZW4gY3JvbiBleHByZXNzaW9uIGNoYW5nZXMgb3IgdHJpZ2dlciBpcyBkaXNhYmxlZC5cbiAqLyBleHBvcnQgdmFyIGRlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENoZWNrIGlmIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZCBhbmQgdGhpcyBydW5uZXIgaXMgYXV0aG9yaXRhdGl2ZS5cbiAqLyBleHBvcnQgdmFyIGNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jaGVja1RyaWdnZXJFbmFibGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogVHJ5IHRvIGNyZWF0ZSBpbnZvY2F0aW9uIGlkZW1wb3RlbnRseS5cbiAqIFJldHVybnMgZXhpc3RpbmcgaW52b2NhdGlvbiBpZiBhbHJlYWR5IGNyZWF0ZWQuXG4gKi8gZXhwb3J0IHZhciBjcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiKTtcbi8qKlxuICogU3RlcDogQ2hlY2sgaWYgaW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBleGVjdXRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiBjYW5jZWxsZWQgKHNob3VsZCBza2lwIGV4ZWN1dGlvbiksIGZhbHNlIG90aGVyd2lzZVxuICovIGV4cG9ydCB2YXIgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIHJ1bm5pbmdcbiAqLyBleHBvcnQgdmFyIG1hcmtSdW5uaW5nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vbWFya1J1bm5pbmdTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBBZGQgYSBjb252ZXJzYXRpb24gSUQgdG8gdGhlIGludm9jYXRpb24ncyBjb252ZXJzYXRpb25JZHMgYXJyYXlcbiAqIENhbGxlZCBhZnRlciBlYWNoIGF0dGVtcHQgdG8gdHJhY2sgYWxsIGNvbnZlcnNhdGlvbnMgY3JlYXRlZCBkdXJpbmcgcmV0cmllc1xuICovIGV4cG9ydCB2YXIgYWRkQ29udmVyc2F0aW9uSWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IE1hcmsgaW52b2NhdGlvbiBhcyBjb21wbGV0ZWRcbiAqLyBleHBvcnQgdmFyIG1hcmtDb21wbGV0ZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIGZhaWxlZFxuICovIGV4cG9ydCB2YXIgbWFya0ZhaWxlZFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBJbmNyZW1lbnQgYXR0ZW1wdCBudW1iZXIgZm9yIHJldHJ5XG4gKi8gZXhwb3J0IHZhciBpbmNyZW1lbnRBdHRlbXB0U3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgdGhlIHNjaGVkdWxlZCB0cmlnZ2VyIHVzaW5nIGV4ZWN1dGVBZ2VudEFzeW5jLlxuICpcbiAqIFVzZXMgdGhlIHNoYXJlZCBleGVjdXRlQWdlbnRBc3luYyBmcm9tIFRyaWdnZXJTZXJ2aWNlIHdoaWNoIGluY2x1ZGVzXG4gKiBwcm9wZXIgdHJhY2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqLyBleHBvcnQgdmFyIGV4ZWN1dGVTY2hlZHVsZWRUcmlnZ2VyU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCIpO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIHRyaWdnZXJzLlxuICpcbiAqIFRoaXMgd29ya2Zsb3c6XG4gKiAxLiBHZXRzIG9yIGNyZWF0ZXMgdGhlIG5leHQgcGVuZGluZyBpbnZvY2F0aW9uXG4gKiAyLiBTbGVlcHMgdW50aWwgaXRzIHNjaGVkdWxlZCB0aW1lXG4gKiAzLiBDaGVja3MgaWYgdGhlIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZFxuICogNC4gRXhlY3V0ZXMgdGhlIGFnZW50IHdpdGggcmV0cmllc1xuICogNS4gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3BzIGJhY2sgdG8gc3RlcCAxXG4gKlxuICovIGltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIHNsZWVwIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgYWRkQ29udmVyc2F0aW9uSWRTdGVwLCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCwgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCwgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAsIGNvbXB1dGVTbGVlcER1cmF0aW9uU3RlcCwgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwLCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAsIGdldE5leHRQZW5kaW5nSW52b2NhdGlvblN0ZXAsIGluY3JlbWVudEF0dGVtcHRTdGVwLCBsb2dTdGVwLCBtYXJrQ29tcGxldGVkU3RlcCwgbWFya0ZhaWxlZFN0ZXAsIG1hcmtSdW5uaW5nU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcyc7XG4vKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50c1wiOntcIl9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIn19fX0qLztcbi8qKlxuICogR2VuZXJhdGUgaWRlbXBvdGVuY3kga2V5IGZvciBhIHNjaGVkdWxlZCBleGVjdXRpb24uXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleShzY2hlZHVsZWRUcmlnZ2VySWQsIHNjaGVkdWxlZEZvcikge1xuICAgIHJldHVybiBgc2NoZWRfJHtzY2hlZHVsZWRUcmlnZ2VySWR9XyR7c2NoZWR1bGVkRm9yfWA7XG59XG4vKipcbiAqIE1haW4gd29ya2Zsb3cgZnVuY3Rpb24gLSBydW5zIGEgc2NoZWR1bGVkIHRyaWdnZXIuXG4gKiBGb3IgY3JvbiB0cmlnZ2VycywgdGhpcyBsb29wcyBpbmRlZmluaXRlbHkgdW50aWwgZGlzYWJsZWQvZGVsZXRlZC5cbiAqIEZvciBvbmUtdGltZSB0cmlnZ2VycywgaXQgZXhlY3V0ZXMgb25jZSBhbmQgY29tcGxldGVzLlxuICpcbiAqLyBhc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IHRlbmFudElkLCBwcm9qZWN0SWQsIGFnZW50SWQsIHNjaGVkdWxlZFRyaWdnZXJJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgICBjb25zdCBydW5uZXJJZCA9IG1ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgc2NoZWR1bGVkIHRyaWdnZXIgcnVubmVyIHdvcmtmbG93Jywge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJvamVjdElkLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgIHJ1bm5lcklkXG4gICAgfSk7XG4gICAgLy8gVHJhY2sgdGhlIGxhc3Qgc2NoZWR1bGVkIHRpbWUgZm9yIGNyb24gY2FsY3VsYXRpb25zXG4gICAgbGV0IGxhc3RTY2hlZHVsZWRGb3IgPSBudWxsO1xuICAgIC8vIE1haW4gZXhlY3V0aW9uIGxvb3BcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgY29uc3QgZW5hYmxlZENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZW5hYmxlZENoZWNrLnNob3VsZENvbnRpbnVlIHx8ICFlbmFibGVkQ2hlY2sudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgd29ya2Zsb3cgc3RvcHBpbmcnLCB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyID0gZW5hYmxlZENoZWNrLnRyaWdnZXI7XG4gICAgICAgIGNvbnN0IGlzT25lVGltZSA9ICEhdHJpZ2dlci5ydW5BdDtcbiAgICAgICAgbGV0IGludm9jYXRpb24gPSBhd2FpdCBnZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRlIGludm9jYXRpb24gaWYgbm9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkRm9yO1xuICAgICAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlci5ydW5BdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdPbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246ICdvbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZEZvciA9IHRyaWdnZXIucnVuQXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuY3JvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHRFeGVjdXRpb25UaW1lIH0gPSBhd2FpdCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCh7XG4gICAgICAgICAgICAgICAgICAgIGNyb25FeHByZXNzaW9uOiB0cmlnZ2VyLmNyb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBjcm9uVGltZXpvbmU6IHRyaWdnZXIuY3JvblRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0U2NoZWR1bGVkRm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yID0gbmV4dEV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgbWlzc2luZyBib3RoIGNyb25FeHByZXNzaW9uIGFuZCBydW5BdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICd0cmlnZ2VyIG1pc3NpbmcgY3JvbkV4cHJlc3Npb24gYW5kIHJ1bkF0J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoc2NoZWR1bGVkVHJpZ2dlcklkLCBzY2hlZHVsZWRGb3IpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwKHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludm9jYXRpb24gPSByZXN1bHQuaW52b2NhdGlvbjtcbiAgICAgICAgICAgIC8vIEZvciBvbmUtdGltZSB0cmlnZ2VycywgY2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgIGlmIChpc09uZVRpbWUgJiYgcmVzdWx0LmFscmVhZHlFeGlzdHMgJiYgaW52b2NhdGlvbi5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ09uZS10aW1lIHRyaWdnZXIgYWxyZWFkeSBleGVjdXRlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogaW52b2NhdGlvbi5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdhbHJlYWR5X2V4ZWN1dGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBsb2dTdGVwKCdHb3QgbmV4dCBwZW5kaW5nIGludm9jYXRpb24nLCB7XG4gICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICBzY2hlZHVsZWRGb3I6IGludm9jYXRpb24uc2NoZWR1bGVkRm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBTbGVlcCB1bnRpbCB0aGUgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lXG4gICAgICAgIGNvbnN0IHNsZWVwTXMgPSBhd2FpdCBjb21wdXRlU2xlZXBEdXJhdGlvblN0ZXAoaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IpO1xuICAgICAgICBhd2FpdCBsb2dTdGVwKCdTbGVlcGluZyB1bnRpbCBzY2hlZHVsZWQgdGltZScsIHtcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZEZvcjogaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IsXG4gICAgICAgICAgICBzbGVlcE1zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChzbGVlcE1zKTtcbiAgICAgICAgLy8gNS4gUmUtY2hlY2sgaWYgdHJpZ2dlciBpcyBzdGlsbCBlbmFibGVkIGFmdGVyIHNsZWVwXG4gICAgICAgIGNvbnN0IHBvc3RTbGVlcENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcG9zdFNsZWVwQ2hlY2suc2hvdWxkQ29udGludWUgfHwgIXBvc3RTbGVlcENoZWNrLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgZGlzYWJsZWQvZGVsZXRlZCBkdXJpbmcgc2xlZXAsIHN0b3BwaW5nJywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICByZWFzb246IHBvc3RTbGVlcENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcG9zdFNsZWVwQ2hlY2sucmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZnJlc2ggdHJpZ2dlciBjb25maWcgKG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHNsZWVwKVxuICAgICAgICBjb25zdCBjdXJyZW50VHJpZ2dlciA9IHBvc3RTbGVlcENoZWNrLnRyaWdnZXI7XG4gICAgICAgIC8vIDYuIENoZWNrIGlmIGludm9jYXRpb24gd2FzIGNhbmNlbGxlZCBkdXJpbmcgc2xlZXBcbiAgICAgICAgY29uc3QgY2FuY2VsQ2hlY2sgPSBhd2FpdCBjaGVja0ludm9jYXRpb25DYW5jZWxsZWRTdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbENoZWNrLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkLCBza2lwcGluZyB0byBuZXh0Jywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4gRXhlY3V0ZSB3aXRoIHJldHJpZXNcbiAgICAgICAgbGV0IGF0dGVtcHROdW1iZXIgPSBpbnZvY2F0aW9uLmF0dGVtcHROdW1iZXI7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IGN1cnJlbnRUcmlnZ2VyLm1heFJldHJpZXMgKyAxO1xuICAgICAgICB3aGlsZShhdHRlbXB0TnVtYmVyIDw9IG1heEF0dGVtcHRzKXtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FuY2VsID0gYXdhaXQgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmV0cnlDYW5jZWwuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiBjYW5jZWxsZWQgZHVyaW5nIHJldHJ5IGxvb3AnLCB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHJ1bm5pbmdcbiAgICAgICAgICAgIGF3YWl0IG1hcmtSdW5uaW5nU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiBjdXJyZW50VHJpZ2dlci5tZXNzYWdlVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogY3VycmVudFRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBjdXJyZW50VHJpZ2dlci50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgICAgICBydW5Bc1VzZXJJZDogY3VycmVudFRyaWdnZXIucnVuQXNVc2VySWQsXG4gICAgICAgICAgICAgICAgY3JvblRpbWV6b25lOiBjdXJyZW50VHJpZ2dlci5jcm9uVGltZXpvbmVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2F2ZSBjb252ZXJzYXRpb24gSUQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29udmVyc2F0aW9uSWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiByZXN1bHQuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1hcmtDb21wbGV0ZWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdTY2hlZHVsZWQgdHJpZ2dlciBleGVjdXRpb24gY29tcGxldGVkJywge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgZXhlY3V0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkLFxuICAgICAgICAgICAgICAgIGF0dGVtcHROdW1iZXIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGxhc3RFcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5jcmVtZW50QXR0ZW1wdFN0ZXAoe1xuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEF0dGVtcHQ6IGF0dGVtcHROdW1iZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyKys7XG4gICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMztcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChjdXJyZW50VHJpZ2dlci5yZXRyeURlbGF5U2Vjb25kcyAqIDEwMDAgKiAoMSArIGppdHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGFzIGZhaWxlZCBpZiBhbGwgcmV0cmllcyBleGhhdXN0ZWRcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgbWFya0ZhaWxlZFN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHRoaXMgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lIGZvciBuZXh0IGNyb24gY2FsY3VsYXRpb25cbiAgICAgICAgbGFzdFNjaGVkdWxlZEZvciA9IGludm9jYXRpb24uc2NoZWR1bGVkRm9yO1xuICAgICAgICAvLyBGb3Igb25lLXRpbWUgdHJpZ2dlcnMsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGxhc3RFcnJvciA/ICdmYWlsZWQnIDogJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgLy8gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3AgY29udGludWVzIHRvIGNyZWF0ZS9nZXQgbmV4dCBpbnZvY2F0aW9uXG4gICAgfVxufVxuX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIiwgX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdyk7XG4vLyBFeHBvcnQgd2l0aCB3b3JrZmxvd0lkIGZvciB0aGUgYnVpbGQgc3lzdGVtXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93ID0gT2JqZWN0LmFzc2lnbihfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93LCB7XG4gICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci8vX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdydcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxxRUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQUNaLFFBQUksSUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQWFSLElBQUFBLFFBQU8sVUFBVSxTQUFTLEtBQUssU0FBUztBQUN4QyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsVUFBSSxPQUFPLE9BQU87QUFDbEIsVUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUc7QUFDckMsZUFBTyxNQUFNLEdBQUc7QUFBQSxNQUNwQixXQUFXLFNBQVMsWUFBWSxTQUFT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QUFBLFFBQ25DLGdCQUFnQixlQUFlO0FBQUEsUUFDL0IsYUFBYSxlQUFlO0FBQUEsUUFDNUIsY0FBYyxlQUFlO0FBQUEsTUFDakMsQ0FBQztBQUVELFVBQUksT0FBTyxnQkFBZ0I7QUFDdkIsY0FBTSxzQkFBc0I7QUFBQSxVQUN4QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsVUFDekIsZ0JBQWdCLE9BQU87QUFBQSxRQUMzQixDQUFDO0FBQUEsTUFDTDtBQUNBLFVBQUksT0FBTyxTQUFTO0FBQ2hCLGNBQU0sa0JBQWtCO0FBQUEsVUFDcEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLGNBQWMsV0FBVztBQUFBLFFBQzdCLENBQUM7QUFDRCxjQUFNQSxTQUFRLHlDQUF5QztBQUFBLFVBQ25EO0FBQUEsVUFDQSxjQUFjLFdBQVc7QUFBQSxVQUN6QixnQkFBZ0IsT0FBTztBQUFBLFFBQzNCLENBQUM7QUFDRCxvQkFBWTtBQUNaO0FBQUEsTUFDSjtBQUNBLGtCQUFZLE9BQU8sU0FBUztBQUM1QixZQUFNQSxTQUFRLHNDQUFzQztBQUFBLFFBQ2hEO0FBQUEsUUFDQSxjQUFjLFdBQVc7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsT0FBTztBQUFBLE1BQ1gsQ0FBQztBQUNELFVBQUksZ0JBQWdCLGFBQWE7QUFDN0IsY0FBTSxxQkFBcUI7QUFBQSxVQUN2QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsUUFDcEIsQ0FBQztBQUNEO0FBQ0EsY0FBTSxTQUFTLEtBQUssT0FBTyxJQUFJO0FBQy9CLGNBQU0sTUFBTSxlQUFlLG9CQUFvQixPQUFRLElBQUksT0FBTztBQUFBLE1BQ3RFLE9BQU87QUFDSDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsUUFBSSxXQUFXO0FBQ1gsWUFBTSxlQUFlO0FBQUEsUUFDakI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGNBQWMsV0FBVztBQUFBLE1BQzdCLENBQUM7QUFBQSxJQUNMO0FBRUEsdUJBQW1CLFdBQVc7QUFFOUIsUUFBSSxXQUFXO0FBQ1gsYUFBTztBQUFBLFFBQ0gsUUFBUSxZQUFZLFdBQVc7QUFBQSxRQUMvQixjQUFjLFdBQVc7QUFBQSxNQUM3QjtBQUFBLElBQ0o7QUFBQSxFQUVKO0FBQ0o7QUE3UG1CO0FBOFBuQixnQ0FBZ0MsYUFBYTtBQUM3QyxXQUFXLG9CQUFvQixJQUFJLDBHQUEwRywrQkFBK0I7QUFFckssSUFBTSxpQ0FBaUMsT0FBTyxPQUFPLGlDQUFpQztBQUFBLEVBQ3pGLFlBQVk7QUFDaEIsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1zIiwgImV4ZWN1dGVFdmFsdWF0b3JTdGVwIiwgImxvZ1N0ZXAiLCAibG9nU3RlcCIsICJsb2dTdGVwIl0KfQo=
|
|
54817
|
+
|
|
54818
|
+
// src/domains/evals/workflow/functions/evaluateConversation.ts
|
|
54819
|
+
var getConversationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep");
|
|
54820
|
+
var getEvaluatorsStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep");
|
|
54821
|
+
var executeEvaluatorStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep");
|
|
54822
|
+
var logStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//logStep");
|
|
54823
|
+
async function _evaluateConversationWorkflow(payload) {
|
|
54824
|
+
const { conversationId, evaluatorIds } = payload;
|
|
54825
|
+
await logStep2("Starting conversation evaluation", payload);
|
|
54826
|
+
const conversation = await getConversationStep(payload);
|
|
54827
|
+
const evaluators = await getEvaluatorsStep(payload);
|
|
54828
|
+
if (evaluators.length === 0) {
|
|
54829
|
+
await logStep2("No valid evaluators found", {
|
|
54830
|
+
conversationId,
|
|
54831
|
+
evaluatorIds
|
|
54832
|
+
});
|
|
54833
|
+
return {
|
|
54834
|
+
success: false,
|
|
54835
|
+
reason: "No valid evaluators"
|
|
54836
|
+
};
|
|
54837
|
+
}
|
|
54838
|
+
const results = [];
|
|
54839
|
+
for (const evaluator of evaluators) {
|
|
54840
|
+
const result = await executeEvaluatorStep(payload, evaluator.id, conversation);
|
|
54841
|
+
results.push(result);
|
|
54842
|
+
}
|
|
54843
|
+
return {
|
|
54844
|
+
success: true,
|
|
54845
|
+
conversationId,
|
|
54846
|
+
resultCount: results.length
|
|
54847
|
+
};
|
|
54848
|
+
}
|
|
54849
|
+
__name(_evaluateConversationWorkflow, "_evaluateConversationWorkflow");
|
|
54850
|
+
_evaluateConversationWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow";
|
|
54851
|
+
globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow", _evaluateConversationWorkflow);
|
|
54852
|
+
var evaluateConversationWorkflow = Object.assign(_evaluateConversationWorkflow, {
|
|
54853
|
+
workflowId: "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow"
|
|
54854
|
+
});
|
|
54855
|
+
|
|
54856
|
+
// src/domains/evals/workflow/functions/runDatasetItem.ts
|
|
54857
|
+
var callChatApiStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//callChatApiStep");
|
|
54858
|
+
var createRelationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//createRelationStep");
|
|
54859
|
+
var executeEvaluatorStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//executeEvaluatorStep");
|
|
54860
|
+
var logStep3 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/runDatasetItem//logStep");
|
|
54861
|
+
async function _runDatasetItemWorkflow(payload) {
|
|
54862
|
+
const { datasetItemId, datasetRunId, agentId, evaluatorIds, evaluationRunId } = payload;
|
|
54863
|
+
await logStep3("Starting dataset item processing", {
|
|
54864
|
+
datasetItemId,
|
|
54865
|
+
datasetRunId,
|
|
54866
|
+
agentId,
|
|
54867
|
+
hasEvaluators: !!(evaluatorIds && evaluatorIds.length > 0)
|
|
54868
|
+
});
|
|
54869
|
+
const result = await callChatApiStep(payload);
|
|
54870
|
+
if (result.conversationId) {
|
|
54871
|
+
await createRelationStep(payload, result.conversationId);
|
|
54872
|
+
if (evaluatorIds && evaluatorIds.length > 0 && evaluationRunId) {
|
|
54873
|
+
for (const evaluatorId of evaluatorIds) {
|
|
54874
|
+
await executeEvaluatorStep2(payload.tenantId, payload.projectId, result.conversationId, evaluatorId, evaluationRunId, payload.datasetItemExpectedOutput);
|
|
54875
|
+
}
|
|
54876
|
+
}
|
|
54877
|
+
} else {
|
|
54878
|
+
await logStep3("No conversation created", {
|
|
54879
|
+
datasetItemId,
|
|
54880
|
+
datasetRunId,
|
|
54881
|
+
error: result.error
|
|
54882
|
+
});
|
|
54883
|
+
}
|
|
54884
|
+
return {
|
|
54885
|
+
success: !result.error,
|
|
54886
|
+
datasetItemId,
|
|
54887
|
+
datasetRunId,
|
|
54888
|
+
conversationId: result.conversationId || null,
|
|
54889
|
+
error: result.error || null
|
|
54890
|
+
};
|
|
54891
|
+
}
|
|
54892
|
+
__name(_runDatasetItemWorkflow, "_runDatasetItemWorkflow");
|
|
54893
|
+
_runDatasetItemWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow";
|
|
54894
|
+
globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow", _runDatasetItemWorkflow);
|
|
54895
|
+
var runDatasetItemWorkflow = Object.assign(_runDatasetItemWorkflow, {
|
|
54896
|
+
workflowId: "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow"
|
|
54897
|
+
});
|
|
54898
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K3V0aWxzQDQuMS4wLWJldGEuMTEvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy91dGlscy9zcmMvdGltZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K2NvcmVANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9zcmMvc3ltYm9scy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K2NvcmVANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9zcmMvc2xlZXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvc3JjL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vd29ya2Zsb3dANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG5lc3Rqcytjb21tb25AMTEuMS4xM19yZWZsZWN0LW1ldGFkX2Y4NTI4MWYyNTgwZDcwNjVmYzUxNGU2MzdmNWY1ZTFmL25vZGVfbW9kdWxlcy93b3JrZmxvdy9zcmMvc3RkbGliLnRzIiwgInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMudHMiLCAic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L2Z1bmN0aW9ucy9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyLnRzIiwgInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50cyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogSGVscGVycy5cbiAqLyB2YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgKyBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiB5O1xuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIHJldHVybiBuICogdztcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBkO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBoO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBtO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBzO1xuICAgICAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgIGNhc2UgJ21zZWNzJzpcbiAgICAgICAgY2FzZSAnbXNlYyc6XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gICAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICAgIGlmIChtc0FicyA+PSBkKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gICAgfVxuICAgIHJldHVybiBtcyArICdtcyc7XG59XG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IG0pIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IHMpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovIGZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIi8qKlxuICogU3RlcCBmdW5jdGlvbnMgZm9yIHNjaGVkdWxlZCB0cmlnZ2VyIHdvcmtmbG93LlxuICpcbiAqIFRoZXNlIHN0ZXAgZnVuY3Rpb25zIGhhdmUgZnVsbCBOb2RlLmpzIGFjY2VzcyBhbmQgaGFuZGxlIGFsbCBkYXRhYmFzZVxuICogb3BlcmF0aW9ucyBhbmQgZXh0ZXJuYWwgc2VydmljZSBjYWxscy5cbiAqLyAvKipfX2ludGVybmFsX3dvcmtmbG93c3tcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50c1wiOntcImFkZENvbnZlcnNhdGlvbklkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIn0sXCJjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwifSxcImNoZWNrSW52b2NhdGlvbkNhbmNlbGxlZFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwifSxcImNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCJ9LFwiY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NvbXB1dGVTbGVlcER1cmF0aW9uU3RlcFwifSxcImNyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXBcIn0sXCJkZWxldGVQZW5kaW5nSW52b2NhdGlvbnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIn0sXCJleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCJ9LFwiZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9nZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwXCJ9LFwiaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2xvZ1N0ZXBcIn0sXCJtYXJrQ29tcGxldGVkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwifSxcIm1hcmtGYWlsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCJ9LFwibWFya1J1bm5pbmdTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtSdW5uaW5nU3RlcFwifX19fSovO1xuLyoqXG4gKiBTdGVwOiBMb2cgYSBtZXNzYWdlIChhbGxvd3MgbG9nZ2luZyBmcm9tIHdvcmtmbG93IGNvbnRleHQpXG4gKi8gZXhwb3J0IHZhciBsb2dTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDYWxjdWxhdGUgdGhlIG5leHQgZXhlY3V0aW9uIHRpbWUgcmVsYXRpdmUgdG8gYSBiYXNlIHRpbWUuXG4gKi8gZXhwb3J0IHZhciBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2FsY3VsYXRlTmV4dEV4ZWN1dGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENvbXB1dGUgc2xlZXAgZHVyYXRpb25cbiAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHRvIHNsZWVwLlxuICovIGV4cG9ydCB2YXIgY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jb21wdXRlU2xlZXBEdXJhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEdldCB0aGUgbmV4dCBwZW5kaW5nIGludm9jYXRpb24gdG8gZXhlY3V0ZSAoZWFybGllc3Qgc2NoZWR1bGVkRm9yKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBwZW5kaW5nIGludm9jYXRpb25zIGV4aXN0LlxuICovIGV4cG9ydCB2YXIgZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiKTtcbi8qKlxuICogU3RlcDogRGVsZXRlIGFsbCBwZW5kaW5nIGludm9jYXRpb25zIGZvciBhIHRyaWdnZXIuXG4gKiBVc2VkIHdoZW4gY3JvbiBleHByZXNzaW9uIGNoYW5nZXMgb3IgdHJpZ2dlciBpcyBkaXNhYmxlZC5cbiAqLyBleHBvcnQgdmFyIGRlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENoZWNrIGlmIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZCBhbmQgdGhpcyBydW5uZXIgaXMgYXV0aG9yaXRhdGl2ZS5cbiAqLyBleHBvcnQgdmFyIGNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jaGVja1RyaWdnZXJFbmFibGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogVHJ5IHRvIGNyZWF0ZSBpbnZvY2F0aW9uIGlkZW1wb3RlbnRseS5cbiAqIFJldHVybnMgZXhpc3RpbmcgaW52b2NhdGlvbiBpZiBhbHJlYWR5IGNyZWF0ZWQuXG4gKi8gZXhwb3J0IHZhciBjcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiKTtcbi8qKlxuICogU3RlcDogQ2hlY2sgaWYgaW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBleGVjdXRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiBjYW5jZWxsZWQgKHNob3VsZCBza2lwIGV4ZWN1dGlvbiksIGZhbHNlIG90aGVyd2lzZVxuICovIGV4cG9ydCB2YXIgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIHJ1bm5pbmdcbiAqLyBleHBvcnQgdmFyIG1hcmtSdW5uaW5nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vbWFya1J1bm5pbmdTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBBZGQgYSBjb252ZXJzYXRpb24gSUQgdG8gdGhlIGludm9jYXRpb24ncyBjb252ZXJzYXRpb25JZHMgYXJyYXlcbiAqIENhbGxlZCBhZnRlciBlYWNoIGF0dGVtcHQgdG8gdHJhY2sgYWxsIGNvbnZlcnNhdGlvbnMgY3JlYXRlZCBkdXJpbmcgcmV0cmllc1xuICovIGV4cG9ydCB2YXIgYWRkQ29udmVyc2F0aW9uSWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IE1hcmsgaW52b2NhdGlvbiBhcyBjb21wbGV0ZWRcbiAqLyBleHBvcnQgdmFyIG1hcmtDb21wbGV0ZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIGZhaWxlZFxuICovIGV4cG9ydCB2YXIgbWFya0ZhaWxlZFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBJbmNyZW1lbnQgYXR0ZW1wdCBudW1iZXIgZm9yIHJldHJ5XG4gKi8gZXhwb3J0IHZhciBpbmNyZW1lbnRBdHRlbXB0U3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgdGhlIHNjaGVkdWxlZCB0cmlnZ2VyIHVzaW5nIGV4ZWN1dGVBZ2VudEFzeW5jLlxuICpcbiAqIFVzZXMgdGhlIHNoYXJlZCBleGVjdXRlQWdlbnRBc3luYyBmcm9tIFRyaWdnZXJTZXJ2aWNlIHdoaWNoIGluY2x1ZGVzXG4gKiBwcm9wZXIgdHJhY2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqLyBleHBvcnQgdmFyIGV4ZWN1dGVTY2hlZHVsZWRUcmlnZ2VyU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCIpO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIHRyaWdnZXJzLlxuICpcbiAqIFRoaXMgd29ya2Zsb3c6XG4gKiAxLiBHZXRzIG9yIGNyZWF0ZXMgdGhlIG5leHQgcGVuZGluZyBpbnZvY2F0aW9uXG4gKiAyLiBTbGVlcHMgdW50aWwgaXRzIHNjaGVkdWxlZCB0aW1lXG4gKiAzLiBDaGVja3MgaWYgdGhlIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZFxuICogNC4gRXhlY3V0ZXMgdGhlIGFnZW50IHdpdGggcmV0cmllc1xuICogNS4gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3BzIGJhY2sgdG8gc3RlcCAxXG4gKlxuICovIGltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIHNsZWVwIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgYWRkQ29udmVyc2F0aW9uSWRTdGVwLCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCwgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCwgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAsIGNvbXB1dGVTbGVlcER1cmF0aW9uU3RlcCwgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwLCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAsIGdldE5leHRQZW5kaW5nSW52b2NhdGlvblN0ZXAsIGluY3JlbWVudEF0dGVtcHRTdGVwLCBsb2dTdGVwLCBtYXJrQ29tcGxldGVkU3RlcCwgbWFya0ZhaWxlZFN0ZXAsIG1hcmtSdW5uaW5nU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcyc7XG4vKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50c1wiOntcIl9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIn19fX0qLztcbi8qKlxuICogR2VuZXJhdGUgaWRlbXBvdGVuY3kga2V5IGZvciBhIHNjaGVkdWxlZCBleGVjdXRpb24uXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleShzY2hlZHVsZWRUcmlnZ2VySWQsIHNjaGVkdWxlZEZvcikge1xuICAgIHJldHVybiBgc2NoZWRfJHtzY2hlZHVsZWRUcmlnZ2VySWR9XyR7c2NoZWR1bGVkRm9yfWA7XG59XG4vKipcbiAqIE1haW4gd29ya2Zsb3cgZnVuY3Rpb24gLSBydW5zIGEgc2NoZWR1bGVkIHRyaWdnZXIuXG4gKiBGb3IgY3JvbiB0cmlnZ2VycywgdGhpcyBsb29wcyBpbmRlZmluaXRlbHkgdW50aWwgZGlzYWJsZWQvZGVsZXRlZC5cbiAqIEZvciBvbmUtdGltZSB0cmlnZ2VycywgaXQgZXhlY3V0ZXMgb25jZSBhbmQgY29tcGxldGVzLlxuICpcbiAqLyBhc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IHRlbmFudElkLCBwcm9qZWN0SWQsIGFnZW50SWQsIHNjaGVkdWxlZFRyaWdnZXJJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgICBjb25zdCBydW5uZXJJZCA9IG1ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgc2NoZWR1bGVkIHRyaWdnZXIgcnVubmVyIHdvcmtmbG93Jywge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJvamVjdElkLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgIHJ1bm5lcklkXG4gICAgfSk7XG4gICAgLy8gVHJhY2sgdGhlIGxhc3Qgc2NoZWR1bGVkIHRpbWUgZm9yIGNyb24gY2FsY3VsYXRpb25zXG4gICAgbGV0IGxhc3RTY2hlZHVsZWRGb3IgPSBudWxsO1xuICAgIC8vIE1haW4gZXhlY3V0aW9uIGxvb3BcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgY29uc3QgZW5hYmxlZENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZW5hYmxlZENoZWNrLnNob3VsZENvbnRpbnVlIHx8ICFlbmFibGVkQ2hlY2sudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgd29ya2Zsb3cgc3RvcHBpbmcnLCB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyID0gZW5hYmxlZENoZWNrLnRyaWdnZXI7XG4gICAgICAgIGNvbnN0IGlzT25lVGltZSA9ICEhdHJpZ2dlci5ydW5BdDtcbiAgICAgICAgbGV0IGludm9jYXRpb24gPSBhd2FpdCBnZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRlIGludm9jYXRpb24gaWYgbm9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkRm9yO1xuICAgICAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlci5ydW5BdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdPbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246ICdvbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZEZvciA9IHRyaWdnZXIucnVuQXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuY3JvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHRFeGVjdXRpb25UaW1lIH0gPSBhd2FpdCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCh7XG4gICAgICAgICAgICAgICAgICAgIGNyb25FeHByZXNzaW9uOiB0cmlnZ2VyLmNyb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBjcm9uVGltZXpvbmU6IHRyaWdnZXIuY3JvblRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0U2NoZWR1bGVkRm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yID0gbmV4dEV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgbWlzc2luZyBib3RoIGNyb25FeHByZXNzaW9uIGFuZCBydW5BdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICd0cmlnZ2VyIG1pc3NpbmcgY3JvbkV4cHJlc3Npb24gYW5kIHJ1bkF0J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoc2NoZWR1bGVkVHJpZ2dlcklkLCBzY2hlZHVsZWRGb3IpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwKHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludm9jYXRpb24gPSByZXN1bHQuaW52b2NhdGlvbjtcbiAgICAgICAgICAgIC8vIEZvciBvbmUtdGltZSB0cmlnZ2VycywgY2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgIGlmIChpc09uZVRpbWUgJiYgcmVzdWx0LmFscmVhZHlFeGlzdHMgJiYgaW52b2NhdGlvbi5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ09uZS10aW1lIHRyaWdnZXIgYWxyZWFkeSBleGVjdXRlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogaW52b2NhdGlvbi5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdhbHJlYWR5X2V4ZWN1dGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBsb2dTdGVwKCdHb3QgbmV4dCBwZW5kaW5nIGludm9jYXRpb24nLCB7XG4gICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICBzY2hlZHVsZWRGb3I6IGludm9jYXRpb24uc2NoZWR1bGVkRm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBTbGVlcCB1bnRpbCB0aGUgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lXG4gICAgICAgIGNvbnN0IHNsZWVwTXMgPSBhd2FpdCBjb21wdXRlU2xlZXBEdXJhdGlvblN0ZXAoaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IpO1xuICAgICAgICBhd2FpdCBsb2dTdGVwKCdTbGVlcGluZyB1bnRpbCBzY2hlZHVsZWQgdGltZScsIHtcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZEZvcjogaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IsXG4gICAgICAgICAgICBzbGVlcE1zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChzbGVlcE1zKTtcbiAgICAgICAgLy8gNS4gUmUtY2hlY2sgaWYgdHJpZ2dlciBpcyBzdGlsbCBlbmFibGVkIGFmdGVyIHNsZWVwXG4gICAgICAgIGNvbnN0IHBvc3RTbGVlcENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcG9zdFNsZWVwQ2hlY2suc2hvdWxkQ29udGludWUgfHwgIXBvc3RTbGVlcENoZWNrLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgZGlzYWJsZWQvZGVsZXRlZCBkdXJpbmcgc2xlZXAsIHN0b3BwaW5nJywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICByZWFzb246IHBvc3RTbGVlcENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcG9zdFNsZWVwQ2hlY2sucmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZnJlc2ggdHJpZ2dlciBjb25maWcgKG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHNsZWVwKVxuICAgICAgICBjb25zdCBjdXJyZW50VHJpZ2dlciA9IHBvc3RTbGVlcENoZWNrLnRyaWdnZXI7XG4gICAgICAgIC8vIDYuIENoZWNrIGlmIGludm9jYXRpb24gd2FzIGNhbmNlbGxlZCBkdXJpbmcgc2xlZXBcbiAgICAgICAgY29uc3QgY2FuY2VsQ2hlY2sgPSBhd2FpdCBjaGVja0ludm9jYXRpb25DYW5jZWxsZWRTdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbENoZWNrLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkLCBza2lwcGluZyB0byBuZXh0Jywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4gRXhlY3V0ZSB3aXRoIHJldHJpZXNcbiAgICAgICAgbGV0IGF0dGVtcHROdW1iZXIgPSBpbnZvY2F0aW9uLmF0dGVtcHROdW1iZXI7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IGN1cnJlbnRUcmlnZ2VyLm1heFJldHJpZXMgKyAxO1xuICAgICAgICB3aGlsZShhdHRlbXB0TnVtYmVyIDw9IG1heEF0dGVtcHRzKXtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FuY2VsID0gYXdhaXQgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmV0cnlDYW5jZWwuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiBjYW5jZWxsZWQgZHVyaW5nIHJldHJ5IGxvb3AnLCB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHJ1bm5pbmdcbiAgICAgICAgICAgIGF3YWl0IG1hcmtSdW5uaW5nU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiBjdXJyZW50VHJpZ2dlci5tZXNzYWdlVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogY3VycmVudFRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBjdXJyZW50VHJpZ2dlci50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgICAgICBydW5Bc1VzZXJJZDogY3VycmVudFRyaWdnZXIucnVuQXNVc2VySWQsXG4gICAgICAgICAgICAgICAgY3JvblRpbWV6b25lOiBjdXJyZW50VHJpZ2dlci5jcm9uVGltZXpvbmVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2F2ZSBjb252ZXJzYXRpb24gSUQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29udmVyc2F0aW9uSWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiByZXN1bHQuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1hcmtDb21wbGV0ZWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdTY2hlZHVsZWQgdHJpZ2dlciBleGVjdXRpb24gY29tcGxldGVkJywge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgZXhlY3V0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkLFxuICAgICAgICAgICAgICAgIGF0dGVtcHROdW1iZXIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGxhc3RFcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5jcmVtZW50QXR0ZW1wdFN0ZXAoe1xuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEF0dGVtcHQ6IGF0dGVtcHROdW1iZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyKys7XG4gICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMztcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChjdXJyZW50VHJpZ2dlci5yZXRyeURlbGF5U2Vjb25kcyAqIDEwMDAgKiAoMSArIGppdHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGFzIGZhaWxlZCBpZiBhbGwgcmV0cmllcyBleGhhdXN0ZWRcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgbWFya0ZhaWxlZFN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHRoaXMgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lIGZvciBuZXh0IGNyb24gY2FsY3VsYXRpb25cbiAgICAgICAgbGFzdFNjaGVkdWxlZEZvciA9IGludm9jYXRpb24uc2NoZWR1bGVkRm9yO1xuICAgICAgICAvLyBGb3Igb25lLXRpbWUgdHJpZ2dlcnMsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGxhc3RFcnJvciA/ICdmYWlsZWQnIDogJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgLy8gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3AgY29udGludWVzIHRvIGNyZWF0ZS9nZXQgbmV4dCBpbnZvY2F0aW9uXG4gICAgfVxufVxuX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIiwgX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdyk7XG4vLyBFeHBvcnQgd2l0aCB3b3JrZmxvd0lkIGZvciB0aGUgYnVpbGQgc3lzdGVtXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93ID0gT2JqZWN0LmFzc2lnbihfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93LCB7XG4gICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci8vX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdydcbn0pO1xuIiwgIi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzXCI6e1wiX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24vL19ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50c1wiOntcImV4ZWN1dGVFdmFsdWF0b3JTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIn0sXCJnZXRDb252ZXJzYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwifSxcImdldEV2YWx1YXRvcnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0RXZhbHVhdG9yc1N0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwifX19fSovO1xudmFyIGdldENvbnZlcnNhdGlvblN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwiKTtcbnZhciBnZXRFdmFsdWF0b3JzU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9nZXRFdmFsdWF0b3JzU3RlcFwiKTtcbnZhciBleGVjdXRlRXZhbHVhdG9yU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTG9nIHdvcmtmbG93IHByb2dyZXNzXG4gKi8gdmFyIGxvZ1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwiKTtcbi8qKlxuICogTWFpbiB3b3JrZmxvdyBmdW5jdGlvbiAtIG9yY2hlc3RyYXRlcyB0aGUgZXZhbHVhdGlvbiBzdGVwcy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcnVucyBpbiBhIGRldGVybWluaXN0aWMgc2FuZGJveC5cbiAqIC0gRG8gTk9UIGNhbGwgTm9kZS5qcyBBUElzIGRpcmVjdGx5IGhlcmUgKG5vIERCLCBubyBmcywgZXRjLilcbiAqIC0gQWxsIHNpZGUgZWZmZWN0cyBtdXN0IGhhcHBlbiBpbiBzdGVwIGZ1bmN0aW9uc1xuICovIGFzeW5jIGZ1bmN0aW9uIF9ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBldmFsdWF0b3JJZHMgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgY29udmVyc2F0aW9uIGV2YWx1YXRpb24nLCBwYXlsb2FkKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25TdGVwKHBheWxvYWQpO1xuICAgIGNvbnN0IGV2YWx1YXRvcnMgPSBhd2FpdCBnZXRFdmFsdWF0b3JzU3RlcChwYXlsb2FkKTtcbiAgICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgbG9nU3RlcCgnTm8gdmFsaWQgZXZhbHVhdG9ycyBmb3VuZCcsIHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgZXZhbHVhdG9ySWRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246ICdObyB2YWxpZCBldmFsdWF0b3JzJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycyl7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVFdmFsdWF0b3JTdGVwKHBheWxvYWQsIGV2YWx1YXRvci5pZCwgY29udmVyc2F0aW9uKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9O1xufVxuX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIiwgX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdydcbn0pO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgZGF0YXNldCBpdGVtcyB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqXG4gKiBUaGlzIG1ha2VzIGRhdGFzZXQgcnVuIHByb2Nlc3NpbmcgZmlyZS1hbmQtZm9yZ2V0IC0gZWFjaCBpdGVtIGlzIHF1ZXVlZFxuICogaW5kZXBlbmRlbnRseSBhbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSB3b3JrZmxvdyBzeXN0ZW0uXG4gKi8gLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHNcIjp7XCJfcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzXCI6e1wiY2FsbENoYXRBcGlTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCJ9LFwiY3JlYXRlUmVsYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY3JlYXRlUmVsYXRpb25TdGVwXCJ9LFwiZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwifSxcImxvZ1N0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCJ9fX19Ki87XG4vKipcbiAqIFN0ZXA6IENhbGwgdGhlIGNoYXQgQVBJIHRvIHByb2Nlc3MgdGhlIGRhdGFzZXQgaXRlbVxuICovIHZhciBjYWxsQ2hhdEFwaVN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDcmVhdGUgY29udmVyc2F0aW9uIHJlbGF0aW9uIGluIGRhdGFiYXNlXG4gKi8gdmFyIGNyZWF0ZVJlbGF0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9jcmVhdGVSZWxhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgYSBzaW5nbGUgZXZhbHVhdG9yIG9uIGEgY29udmVyc2F0aW9uXG4gKi8gdmFyIGV4ZWN1dGVFdmFsdWF0b3JTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0vL2V4ZWN1dGVFdmFsdWF0b3JTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBMb2cgd29ya2Zsb3cgcHJvZ3Jlc3NcbiAqLyB2YXIgbG9nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBNYWluIHdvcmtmbG93IGZ1bmN0aW9uIC0gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFzZXQgaXRlbSB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqIE9wdGlvbmFsbHkgcnVucyBldmFsdWF0b3JzIG9uIHRoZSByZXN1bHRpbmcgY29udmVyc2F0aW9uLlxuICovIGFzeW5jIGZ1bmN0aW9uIF9ydW5EYXRhc2V0SXRlbVdvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGRhdGFzZXRJdGVtSWQsIGRhdGFzZXRSdW5JZCwgYWdlbnRJZCwgZXZhbHVhdG9ySWRzLCBldmFsdWF0aW9uUnVuSWQgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgZGF0YXNldCBpdGVtIHByb2Nlc3NpbmcnLCB7XG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgaGFzRXZhbHVhdG9yczogISEoZXZhbHVhdG9ySWRzICYmIGV2YWx1YXRvcklkcy5sZW5ndGggPiAwKVxuICAgIH0pO1xuICAgIC8vIENhbGwgY2hhdCBBUElcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsQ2hhdEFwaVN0ZXAocGF5bG9hZCk7XG4gICAgLy8gQ3JlYXRlIHJlbGF0aW9uIGlmIHdlIGdvdCBhIGNvbnZlcnNhdGlvblxuICAgIGlmIChyZXN1bHQuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUmVsYXRpb25TdGVwKHBheWxvYWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCk7XG4gICAgICAgIC8vIFJ1biBldmFsdWF0aW9ucyBpZiBjb25maWd1cmVkXG4gICAgICAgIGlmIChldmFsdWF0b3JJZHMgJiYgZXZhbHVhdG9ySWRzLmxlbmd0aCA+IDAgJiYgZXZhbHVhdGlvblJ1bklkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWx1YXRvcklkIG9mIGV2YWx1YXRvcklkcyl7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUV2YWx1YXRvclN0ZXAocGF5bG9hZC50ZW5hbnRJZCwgcGF5bG9hZC5wcm9qZWN0SWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCwgZXZhbHVhdG9ySWQsIGV2YWx1YXRpb25SdW5JZCwgcGF5bG9hZC5kYXRhc2V0SXRlbUV4cGVjdGVkT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ05vIGNvbnZlcnNhdGlvbiBjcmVhdGVkJywge1xuICAgICAgICAgICAgZGF0YXNldEl0ZW1JZCxcbiAgICAgICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsXG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZCB8fCBudWxsLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yIHx8IG51bGxcbiAgICB9O1xufVxuX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIiwgX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdydcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxxRUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQUNaLFFBQUksSUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQWFSLElBQUFBLFFBQU8sVUFBVSxTQUFTLEtBQUssU0FBUztBQUN4QyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsVUFBSSxPQUFPLE9BQU87QUFDbEIsVUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUc7QUFDckMsZUFBTyxNQUFNLEdBQUc7QUFBQSxNQUNwQixXQUFXLFNBQVMsWUFBWSxTQUFT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QUFTO0FBQUEsSUFDVDtBQUFBLElBQ0EsYUFBYSxRQUFRO0FBQUEsRUFDekI7QUFDSjtBQXpCbUI7QUEwQm5CLDhCQUE4QixhQUFhO0FBQzNDLFdBQVcsb0JBQW9CLElBQUksd0dBQXdHLDZCQUE2QjtBQUVqSyxJQUFNLCtCQUErQixPQUFPLE9BQU8sK0JBQStCO0FBQUEsRUFDckYsWUFBWTtBQUNoQixDQUFDOzs7QUNwQ0csSUFBSSxrQkFBa0IsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSw4RUFBOEU7QUFHaEosSUFBSSxxQkFBcUIsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSxpRkFBaUY7QUFHdEosSUFBSUMsd0JBQXVCLFdBQVcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsbUZBQW1GO0FBRzFKLElBQUlDLFdBQVUsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSxzRUFBc0U7QUFJaEksZUFBZSx3QkFBd0IsU0FBUztBQUNoRCxRQUFNLEVBQUUsZUFBZSxjQUFjLFNBQVMsY0FBYyxnQkFBZ0IsSUFBSTtBQUNoRixRQUFNQSxTQUFRLG9DQUFvQztBQUFBLElBQzlDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixhQUFhLFNBQVM7QUFBQSxFQUM1RCxDQUFDO0FBRUQsUUFBTSxTQUFTLE1BQU0sZ0JBQWdCLE9BQU87QUFFNUMsTUFBSSxPQUFPLGdCQUFnQjtBQUN2QixVQUFNLG1CQUFtQixTQUFTLE9BQU8sY0FBYztBQUV2RCxRQUFJLGdCQUFnQixhQUFhLFNBQVMsS0FBSyxpQkFBaUI7QUFDNUQsaUJBQVcsZUFBZSxjQUFhO0FBQ25DLGNBQU1ELHNCQUFxQixRQUFRLFVBQVUsUUFBUSxXQUFXLE9BQU8sZ0JBQWdCLGFBQWEsaUJBQWlCLFFBQVEseUJBQXlCO0FBQUEsTUFDMUo7QUFBQSxJQUNKO0FBQUEsRUFDSixPQUFPO0FBQ0gsVUFBTUMsU0FBUSwyQkFBMkI7QUFBQSxNQUNyQztBQUFBLE1BQ0E7QUFBQSxNQUNBLE9BQU8sT0FBTztBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNMO0FBQ0EsU0FBTztBQUFBLElBQ0gsU0FBUyxDQUFDLE9BQU87QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLGdCQUFnQixPQUFPLGtCQUFrQjtBQUFBLElBQ3pDLE9BQU8sT0FBTyxTQUFTO0FBQUEsRUFDM0I7QUFDSjtBQWpDbUI7QUFrQ25CLHdCQUF3QixhQUFhO0FBQ3JDLFdBQVcsb0JBQW9CLElBQUksNEZBQTRGLHVCQUF1QjtBQUUvSSxJQUFNLHlCQUF5QixPQUFPLE9BQU8seUJBQXlCO0FBQUEsRUFDekUsWUFBWTtBQUNoQixDQUFDOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibXMiLCAibG9nU3RlcCIsICJleGVjdXRlRXZhbHVhdG9yU3RlcCIsICJsb2dTdGVwIl0KfQo=
|
|
54899
54899
|
`;
|
|
54900
54900
|
var POST = workflowEntrypoint(workflowCode);
|
|
54901
54901
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"workflowFiles": [
|
|
3
|
+
"/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts",
|
|
3
4
|
"/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
|
|
4
|
-
"/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts"
|
|
5
|
-
"/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts"
|
|
5
|
+
"/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts"
|
|
6
6
|
],
|
|
7
7
|
"serdeOnlyFiles": []
|
|
8
8
|
}
|
|
@@ -15,11 +15,6 @@
|
|
|
15
15
|
"stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//logStep"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
|
-
"node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/stdlib.js": {
|
|
19
|
-
"fetch": {
|
|
20
|
-
"stepId": "step//workflow@4.1.0-beta.54//fetch"
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
18
|
"node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/internal/builtins.js": {
|
|
24
19
|
"__builtin_response_array_buffer": {
|
|
25
20
|
"stepId": "__builtin_response_array_buffer"
|
|
@@ -31,6 +26,11 @@
|
|
|
31
26
|
"stepId": "__builtin_response_text"
|
|
32
27
|
}
|
|
33
28
|
},
|
|
29
|
+
"node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/stdlib.js": {
|
|
30
|
+
"fetch": {
|
|
31
|
+
"stepId": "step//workflow@4.1.0-beta.54//fetch"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
34
|
"src/domains/evals/workflow/functions/runDatasetItem.ts": {
|
|
35
35
|
"callChatApiStep": {
|
|
36
36
|
"stepId": "step//./src/domains/evals/workflow/functions/runDatasetItem//callChatApiStep"
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
"/home/runner/work/agents/agents/node_modules/.pnpm/workflow@4.1.0-beta.54_@aws-sdk+client-sts@3.970.0_@nestjs+common@11.1.13_reflect-metad_f85281f2580d7065fc514e637f5f5e1f/node_modules/workflow/dist/stdlib.js"
|
|
7
7
|
],
|
|
8
8
|
"workflowFiles": [
|
|
9
|
+
"/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts",
|
|
9
10
|
"/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
|
|
10
|
-
"/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts"
|
|
11
|
-
"/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts"
|
|
11
|
+
"/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts"
|
|
12
12
|
],
|
|
13
13
|
"serdeOnlyFiles": []
|
|
14
14
|
}
|
package/dist/createApp.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AppConfig } from "./types/app.js";
|
|
2
2
|
import "./types/index.js";
|
|
3
3
|
import { Hono } from "hono";
|
|
4
|
-
import * as
|
|
4
|
+
import * as hono_types0 from "hono/types";
|
|
5
5
|
|
|
6
6
|
//#region src/createApp.d.ts
|
|
7
7
|
declare const isWebhookRoute: (path: string) => boolean;
|
|
8
|
-
declare function createAgentsHono(config: AppConfig): Hono<
|
|
8
|
+
declare function createAgentsHono(config: AppConfig): Hono<hono_types0.BlankEnv, hono_types0.BlankSchema, "/">;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { createAgentsHono, isWebhookRoute };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _inkeep_agents_core3 from "@inkeep/agents-core";
|
|
2
2
|
|
|
3
3
|
//#region src/data/db/manageDbClient.d.ts
|
|
4
|
-
declare const manageDbClient:
|
|
4
|
+
declare const manageDbClient: _inkeep_agents_core3.AgentsManageDatabaseClient;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { manageDbClient as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _inkeep_agents_core2 from "@inkeep/agents-core";
|
|
2
2
|
|
|
3
3
|
//#region src/data/db/runDbClient.d.ts
|
|
4
|
-
declare const runDbClient:
|
|
4
|
+
declare const runDbClient: _inkeep_agents_core2.AgentsRunDatabaseClient;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { runDbClient as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono18 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/domains/evals/routes/datasetTriggers.d.ts
|
|
5
|
-
declare const app: OpenAPIHono<
|
|
5
|
+
declare const app: OpenAPIHono<hono18.Env, {}, "/">;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { app as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono10 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/domains/evals/routes/index.d.ts
|
|
5
|
-
declare const app: OpenAPIHono<
|
|
5
|
+
declare const app: OpenAPIHono<hono10.Env, {}, "/">;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { app as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono_types11 from "hono/types";
|
|
3
3
|
|
|
4
4
|
//#region src/domains/evals/workflow/routes.d.ts
|
|
5
|
-
declare const workflowRoutes: Hono<
|
|
5
|
+
declare const workflowRoutes: Hono<hono_types11.BlankEnv, hono_types11.BlankSchema, "/">;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { workflowRoutes };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono17 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/domains/manage/routes/index.d.ts
|
|
5
|
-
declare const app: OpenAPIHono<
|
|
5
|
+
declare const app: OpenAPIHono<hono17.Env, {}, "/">;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { app as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import * as
|
|
3
|
+
import * as hono_types8 from "hono/types";
|
|
4
4
|
|
|
5
5
|
//#region src/domains/manage/routes/invitations.d.ts
|
|
6
6
|
declare const invitationsRoutes: Hono<{
|
|
7
7
|
Variables: ManageAppVariables;
|
|
8
|
-
},
|
|
8
|
+
}, hono_types8.BlankSchema, "/">;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { invitationsRoutes as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import * as
|
|
3
|
+
import * as hono_types9 from "hono/types";
|
|
4
4
|
|
|
5
5
|
//#region src/domains/manage/routes/passwordResetLinks.d.ts
|
|
6
6
|
declare const passwordResetLinksRoutes: Hono<{
|
|
7
7
|
Variables: ManageAppVariables;
|
|
8
|
-
},
|
|
8
|
+
}, hono_types9.BlankSchema, "/">;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { passwordResetLinksRoutes as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import * as
|
|
3
|
+
import * as hono_types10 from "hono/types";
|
|
4
4
|
|
|
5
5
|
//#region src/domains/manage/routes/signoz.d.ts
|
|
6
6
|
declare const app: Hono<{
|
|
7
7
|
Variables: ManageAppVariables;
|
|
8
|
-
},
|
|
8
|
+
}, hono_types10.BlankSchema, "/">;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { app as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
import * as
|
|
3
|
+
import * as hono_types5 from "hono/types";
|
|
4
4
|
|
|
5
5
|
//#region src/domains/manage/routes/users.d.ts
|
|
6
6
|
declare const usersRoutes: Hono<{
|
|
7
7
|
Variables: ManageAppVariables;
|
|
8
|
-
},
|
|
8
|
+
}, hono_types5.BlankSchema, "/">;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { usersRoutes as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono_types6 from "hono/types";
|
|
3
3
|
|
|
4
4
|
//#region src/domains/mcp/routes/mcp.d.ts
|
|
5
|
-
declare const app: Hono<
|
|
5
|
+
declare const app: Hono<hono_types6.BlankEnv, hono_types6.BlankSchema, "/">;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { app as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AgentConfig, DelegateRelation } from "./agent-types.js";
|
|
2
2
|
import "./Agent.js";
|
|
3
3
|
import { InternalRelation } from "../utils/project.js";
|
|
4
|
-
import * as
|
|
4
|
+
import * as _inkeep_agents_core0 from "@inkeep/agents-core";
|
|
5
5
|
import { CredentialStoreRegistry, FullExecutionContext } from "@inkeep/agents-core";
|
|
6
6
|
import * as ai0 from "ai";
|
|
7
7
|
|
|
@@ -45,7 +45,7 @@ declare function createDelegateToAgentTool({
|
|
|
45
45
|
message: string;
|
|
46
46
|
}, {
|
|
47
47
|
toolCallId: any;
|
|
48
|
-
result:
|
|
48
|
+
result: _inkeep_agents_core0.Message | _inkeep_agents_core0.Task;
|
|
49
49
|
}>;
|
|
50
50
|
/**
|
|
51
51
|
* Parameters for building a transfer relation config
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _inkeep_agents_core1 from "@inkeep/agents-core";
|
|
2
2
|
import { BreakdownComponentDef, ContextBreakdown, calculateBreakdownTotal, createEmptyBreakdown } from "@inkeep/agents-core";
|
|
3
3
|
|
|
4
4
|
//#region src/domains/run/utils/token-estimator.d.ts
|
|
@@ -17,7 +17,7 @@ interface AssembleResult {
|
|
|
17
17
|
/** The assembled prompt string */
|
|
18
18
|
prompt: string;
|
|
19
19
|
/** Token breakdown for each component */
|
|
20
|
-
breakdown:
|
|
20
|
+
breakdown: _inkeep_agents_core1.ContextBreakdown;
|
|
21
21
|
}
|
|
22
22
|
//#endregion
|
|
23
23
|
export { AssembleResult, type BreakdownComponentDef, type ContextBreakdown, calculateBreakdownTotal, createEmptyBreakdown, estimateTokens };
|
package/dist/factory.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import "./types/index.js";
|
|
|
3
3
|
import { createAgentsHono } from "./createApp.js";
|
|
4
4
|
import { createAuth0Provider, createOIDCProvider } from "./ssoHelpers.js";
|
|
5
5
|
import { CredentialStore, ServerConfig } from "@inkeep/agents-core";
|
|
6
|
-
import * as
|
|
6
|
+
import * as hono0 from "hono";
|
|
7
7
|
import * as zod0 from "zod";
|
|
8
8
|
import { EmailServiceConfig, SSOProviderConfig, UserAuthConfig } from "@inkeep/agents-core/auth";
|
|
9
|
-
import * as
|
|
9
|
+
import * as hono_types1 from "hono/types";
|
|
10
10
|
import * as better_auth0 from "better-auth";
|
|
11
11
|
import * as better_auth_plugins0 from "better-auth/plugins";
|
|
12
12
|
import * as _better_auth_sso0 from "@better-auth/sso";
|
|
@@ -1170,25 +1170,25 @@ declare function createAgentsAuth(userAuthConfig?: UserAuthConfig, emailService?
|
|
|
1170
1170
|
ac: better_auth_plugins0.AccessControl;
|
|
1171
1171
|
roles: {
|
|
1172
1172
|
member: {
|
|
1173
|
-
authorize<K_1 extends "
|
|
1174
|
-
actions: better_auth_plugins0.Subset<"
|
|
1173
|
+
authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "ac" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>[key] | {
|
|
1174
|
+
actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>[key];
|
|
1175
1175
|
connector: "OR" | "AND";
|
|
1176
1176
|
} | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
|
|
1177
|
-
statements: better_auth_plugins0.Subset<"
|
|
1177
|
+
statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>;
|
|
1178
1178
|
};
|
|
1179
1179
|
admin: {
|
|
1180
|
-
authorize<K_1 extends "
|
|
1181
|
-
actions: better_auth_plugins0.Subset<"
|
|
1180
|
+
authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "ac" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>[key] | {
|
|
1181
|
+
actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>[key];
|
|
1182
1182
|
connector: "OR" | "AND";
|
|
1183
1183
|
} | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
|
|
1184
|
-
statements: better_auth_plugins0.Subset<"
|
|
1184
|
+
statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>;
|
|
1185
1185
|
};
|
|
1186
1186
|
owner: {
|
|
1187
|
-
authorize<K_1 extends "
|
|
1188
|
-
actions: better_auth_plugins0.Subset<"
|
|
1187
|
+
authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "ac" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>[key] | {
|
|
1188
|
+
actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>[key];
|
|
1189
1189
|
connector: "OR" | "AND";
|
|
1190
1190
|
} | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
|
|
1191
|
-
statements: better_auth_plugins0.Subset<"
|
|
1191
|
+
statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins0.Statements>;
|
|
1192
1192
|
};
|
|
1193
1193
|
};
|
|
1194
1194
|
creatorRole: "admin";
|
|
@@ -1632,6 +1632,6 @@ declare function createAgentsApp(config?: {
|
|
|
1632
1632
|
auth?: UserAuthConfig;
|
|
1633
1633
|
sandboxConfig?: SandboxConfig;
|
|
1634
1634
|
emailService?: EmailServiceConfig;
|
|
1635
|
-
}):
|
|
1635
|
+
}): hono0.Hono<hono_types1.BlankEnv, hono_types1.BlankSchema, "/">;
|
|
1636
1636
|
//#endregion
|
|
1637
1637
|
export { type SSOProviderConfig, type UserAuthConfig, createAgentsApp, createAgentsAuth, createAgentsHono, createAuth0Provider, createOIDCProvider };
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { SSOProviderConfig, UserAuthConfig, createAgentsApp } from "./factory.js
|
|
|
7
7
|
import "./sentry.js";
|
|
8
8
|
import { Hono } from "hono";
|
|
9
9
|
import * as zod344 from "zod";
|
|
10
|
-
import * as
|
|
10
|
+
import * as hono_types3 from "hono/types";
|
|
11
11
|
import * as better_auth99 from "better-auth";
|
|
12
12
|
import * as better_auth_plugins35 from "better-auth/plugins";
|
|
13
13
|
import * as _better_auth_sso11 from "@better-auth/sso";
|
|
@@ -1171,25 +1171,25 @@ declare const auth: better_auth99.Auth<{
|
|
|
1171
1171
|
ac: better_auth_plugins35.AccessControl;
|
|
1172
1172
|
roles: {
|
|
1173
1173
|
member: {
|
|
1174
|
-
authorize<K_1 extends "
|
|
1175
|
-
actions: better_auth_plugins35.Subset<"
|
|
1174
|
+
authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "ac" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>[key] | {
|
|
1175
|
+
actions: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>[key];
|
|
1176
1176
|
connector: "OR" | "AND";
|
|
1177
1177
|
} | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins35.AuthorizeResponse;
|
|
1178
|
-
statements: better_auth_plugins35.Subset<"
|
|
1178
|
+
statements: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>;
|
|
1179
1179
|
};
|
|
1180
1180
|
admin: {
|
|
1181
|
-
authorize<K_1 extends "
|
|
1182
|
-
actions: better_auth_plugins35.Subset<"
|
|
1181
|
+
authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "ac" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>[key] | {
|
|
1182
|
+
actions: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>[key];
|
|
1183
1183
|
connector: "OR" | "AND";
|
|
1184
1184
|
} | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins35.AuthorizeResponse;
|
|
1185
|
-
statements: better_auth_plugins35.Subset<"
|
|
1185
|
+
statements: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>;
|
|
1186
1186
|
};
|
|
1187
1187
|
owner: {
|
|
1188
|
-
authorize<K_1 extends "
|
|
1189
|
-
actions: better_auth_plugins35.Subset<"
|
|
1188
|
+
authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "ac" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>[key] | {
|
|
1189
|
+
actions: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>[key];
|
|
1190
1190
|
connector: "OR" | "AND";
|
|
1191
1191
|
} | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins35.AuthorizeResponse;
|
|
1192
|
-
statements: better_auth_plugins35.Subset<"
|
|
1192
|
+
statements: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "project" | "ac" | "team", better_auth_plugins35.Statements>;
|
|
1193
1193
|
};
|
|
1194
1194
|
};
|
|
1195
1195
|
creatorRole: "admin";
|
|
@@ -1627,6 +1627,6 @@ declare const auth: better_auth99.Auth<{
|
|
|
1627
1627
|
}>;
|
|
1628
1628
|
}];
|
|
1629
1629
|
}>;
|
|
1630
|
-
declare const app: Hono<
|
|
1630
|
+
declare const app: Hono<hono_types3.BlankEnv, hono_types3.BlankSchema, "/">;
|
|
1631
1631
|
//#endregion
|
|
1632
1632
|
export { type AppConfig, type AppVariables, Hono, type NativeSandboxConfig, type SSOProviderConfig, type SandboxConfig, type UserAuthConfig, type VercelSandboxConfig, auth, createAgentsApp, createAgentsHono, createAuth0Provider, createOIDCProvider, app as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseExecutionContext } from "@inkeep/agents-core";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono0 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/middleware/evalsAuth.d.ts
|
|
5
5
|
|
|
@@ -7,7 +7,7 @@ import * as hono1 from "hono";
|
|
|
7
7
|
* Middleware to authenticate API requests using Bearer token authentication
|
|
8
8
|
* First checks if token matches INKEEP_AGENTS_EVAL_API_BYPASS_SECRET,
|
|
9
9
|
*/
|
|
10
|
-
declare const evalApiKeyAuth: () =>
|
|
10
|
+
declare const evalApiKeyAuth: () => hono0.MiddlewareHandler<{
|
|
11
11
|
Variables: {
|
|
12
12
|
executionContext: BaseExecutionContext;
|
|
13
13
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseExecutionContext } from "@inkeep/agents-core";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono11 from "hono";
|
|
3
3
|
import { createAuth } from "@inkeep/agents-core/auth";
|
|
4
4
|
|
|
5
5
|
//#region src/middleware/manageAuth.d.ts
|
|
@@ -15,7 +15,7 @@ import { createAuth } from "@inkeep/agents-core/auth";
|
|
|
15
15
|
* NOTE: Database API keys are intentionally NOT accepted on manage endpoints.
|
|
16
16
|
* API keys are restricted to the run domain only (chat, agent execution).
|
|
17
17
|
*/
|
|
18
|
-
declare const manageBearerAuth: () =>
|
|
18
|
+
declare const manageBearerAuth: () => hono11.MiddlewareHandler<{
|
|
19
19
|
Variables: {
|
|
20
20
|
executionContext: BaseExecutionContext;
|
|
21
21
|
userId?: string;
|
|
@@ -29,6 +29,6 @@ declare const manageBearerAuth: () => hono2.MiddlewareHandler<{
|
|
|
29
29
|
* Uses Bearer token → manage bearer auth (bypass secret, session, Slack JWT, internal service),
|
|
30
30
|
* otherwise falls back to session auth.
|
|
31
31
|
*/
|
|
32
|
-
declare const manageBearerOrSessionAuth: () =>
|
|
32
|
+
declare const manageBearerOrSessionAuth: () => hono11.MiddlewareHandler<any, string, {}, Response>;
|
|
33
33
|
//#endregion
|
|
34
34
|
export { manageBearerAuth, manageBearerOrSessionAuth };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BaseExecutionContext, ResolvedRef } from "@inkeep/agents-core";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono13 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/middleware/projectConfig.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Middleware that fetches the full project definition from the Management API
|
|
7
7
|
*/
|
|
8
|
-
declare const projectConfigMiddleware:
|
|
8
|
+
declare const projectConfigMiddleware: hono13.MiddlewareHandler<{
|
|
9
9
|
Variables: {
|
|
10
10
|
executionContext: BaseExecutionContext;
|
|
11
11
|
resolvedRef: ResolvedRef;
|
|
@@ -15,7 +15,7 @@ declare const projectConfigMiddleware: hono0.MiddlewareHandler<{
|
|
|
15
15
|
* Creates a middleware that applies project config fetching except for specified route patterns
|
|
16
16
|
* @param skipRouteCheck - Function that returns true if the route should skip the middleware
|
|
17
17
|
*/
|
|
18
|
-
declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) =>
|
|
18
|
+
declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono13.MiddlewareHandler<{
|
|
19
19
|
Variables: {
|
|
20
20
|
executionContext: BaseExecutionContext;
|
|
21
21
|
resolvedRef: ResolvedRef;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ManageAppVariables } from "../types/app.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono1 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/middleware/requirePermission.d.ts
|
|
5
5
|
type Permission = {
|
|
@@ -9,6 +9,6 @@ declare const requirePermission: <Env$1 extends {
|
|
|
9
9
|
Variables: ManageAppVariables;
|
|
10
10
|
} = {
|
|
11
11
|
Variables: ManageAppVariables;
|
|
12
|
-
}>(permissions: Permission) =>
|
|
12
|
+
}>(permissions: Permission) => hono1.MiddlewareHandler<Env$1, string, {}, Response>;
|
|
13
13
|
//#endregion
|
|
14
14
|
export { requirePermission };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BaseExecutionContext } from "@inkeep/agents-core";
|
|
2
|
-
import * as
|
|
2
|
+
import * as hono2 from "hono";
|
|
3
3
|
|
|
4
4
|
//#region src/middleware/runAuth.d.ts
|
|
5
|
-
declare const runApiKeyAuth: () =>
|
|
5
|
+
declare const runApiKeyAuth: () => hono2.MiddlewareHandler<{
|
|
6
6
|
Variables: {
|
|
7
7
|
executionContext: BaseExecutionContext;
|
|
8
8
|
};
|
|
@@ -11,7 +11,7 @@ declare const runApiKeyAuth: () => hono10.MiddlewareHandler<{
|
|
|
11
11
|
* Creates a middleware that applies API key authentication except for specified route patterns
|
|
12
12
|
* @param skipRouteCheck - Function that returns true if the route should skip authentication
|
|
13
13
|
*/
|
|
14
|
-
declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) =>
|
|
14
|
+
declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) => hono2.MiddlewareHandler<{
|
|
15
15
|
Variables: {
|
|
16
16
|
executionContext: BaseExecutionContext;
|
|
17
17
|
};
|
|
@@ -20,7 +20,7 @@ declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) =
|
|
|
20
20
|
* Helper middleware for endpoints that optionally support API key authentication
|
|
21
21
|
* If no auth header is present, it continues without setting the executionContext
|
|
22
22
|
*/
|
|
23
|
-
declare const runOptionalAuth: () =>
|
|
23
|
+
declare const runOptionalAuth: () => hono2.MiddlewareHandler<{
|
|
24
24
|
Variables: {
|
|
25
25
|
executionContext?: BaseExecutionContext;
|
|
26
26
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-api",
|
|
3
|
-
"version": "0.58.
|
|
3
|
+
"version": "0.58.5",
|
|
4
4
|
"description": "Unified Inkeep Agents API - combines management, runtime, and evaluation capabilities",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -73,10 +73,10 @@
|
|
|
73
73
|
"pg": "^8.16.3",
|
|
74
74
|
"undici": "^7.22.0",
|
|
75
75
|
"workflow": "^4.1.0-beta.54",
|
|
76
|
-
"@inkeep/agents-core": "^0.58.
|
|
77
|
-
"@inkeep/agents-mcp": "^0.58.
|
|
78
|
-
"@inkeep/agents-work-apps": "^0.58.
|
|
79
|
-
"@inkeep/agents-email": "^0.58.
|
|
76
|
+
"@inkeep/agents-core": "^0.58.5",
|
|
77
|
+
"@inkeep/agents-mcp": "^0.58.5",
|
|
78
|
+
"@inkeep/agents-work-apps": "^0.58.5",
|
|
79
|
+
"@inkeep/agents-email": "^0.58.5"
|
|
80
80
|
},
|
|
81
81
|
"peerDependencies": {
|
|
82
82
|
"@hono/zod-openapi": "^1.1.5",
|