agl 40.5.1 → 41.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +43 -0
- package/dist_serve/bundle.js +3514 -3357
- package/dist_serve/bundle.js.map +2 -2
- package/dist_serve/bundle.js.third-party-notices.json +58 -32
- package/dist_serve/bundle.js.third-party-notices.txt +108 -33
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/aglapi/aglapisurface.document.js +64 -37
- package/dist_ts/classes.aglhome.d.ts +5 -0
- package/dist_ts/classes.aglhome.js +2 -1
- package/dist_ts/classes.authstore.js +5 -1
- package/dist_ts/classes.controller.d.ts +8 -0
- package/dist_ts/classes.controller.js +119 -22
- package/dist_ts/classes.controllereventdelivery.d.ts +72 -0
- package/dist_ts/classes.controllereventdelivery.js +233 -0
- package/dist_ts/classes.flexmodels.public.js +4 -1
- package/dist_ts/classes.flexprojectionreader.d.ts +6 -0
- package/dist_ts/classes.flexprojectionreader.js +29 -5
- package/dist_ts/classes.flexservice.d.ts +2 -1
- package/dist_ts/classes.flexservice.js +34 -6
- package/dist_ts/classes.flexstore.d.ts +41 -4
- package/dist_ts/classes.flexstore.js +266 -203
- package/dist_ts/classes.inferencegateway.d.ts +35 -1
- package/dist_ts/classes.inferencegateway.js +86 -26
- package/dist_ts/classes.inferenceservice.d.ts +4 -2
- package/dist_ts/classes.inferenceservice.js +5 -4
- package/dist_ts/classes.proxycontrol.d.ts +58 -4
- package/dist_ts/classes.proxycontrol.js +23 -44
- package/dist_ts/classes.proxycontrolclient.d.ts +15 -5
- package/dist_ts/classes.proxycontrolclient.js +67 -17
- package/dist_ts/classes.proxydaemon.d.ts +22 -3
- package/dist_ts/classes.proxydaemon.js +73 -12
- package/dist_ts/classes.proxyleaseholder.d.ts +43 -14
- package/dist_ts/classes.proxyleaseholder.js +66 -22
- package/dist_ts/classes.proxystore.d.ts +9 -0
- package/dist_ts/classes.proxystore.js +15 -7
- package/dist_ts/classes.ticketnotifier.js +4 -2
- package/dist_ts/classes.ticketstore.d.ts +50 -2
- package/dist_ts/classes.ticketstore.js +195 -78
- package/dist_ts/classes.workercallerbindings.d.ts +66 -0
- package/dist_ts/classes.workercallerbindings.js +211 -0
- package/dist_ts/classes.workercallers.d.ts +63 -2
- package/dist_ts/classes.workercallers.js +430 -65
- package/dist_ts/driver/classes.drivereventrelay.d.ts +13 -1
- package/dist_ts/driver/classes.drivereventrelay.js +99 -6
- package/dist_ts/driver/functions.driverinstructions.d.ts +1 -1
- package/dist_ts/driver/functions.driverinstructions.js +1 -1
- package/dist_ts/driver/functions.drivertools.d.ts +11 -2
- package/dist_ts/driver/functions.drivertools.js +19 -9
- package/dist_ts/fleet/classes.boardpump.d.ts +8 -2
- package/dist_ts/fleet/classes.boardpump.js +38 -20
- package/dist_ts/fleet/classes.ticketeffects.d.ts +17 -2
- package/dist_ts/fleet/classes.ticketeffects.js +16 -10
- package/dist_ts/fleet/classes.workerlaunches.d.ts +12 -5
- package/dist_ts/fleet/classes.workerlaunches.js +25 -19
- package/dist_ts/fleet/classes.workers.d.ts +21 -0
- package/dist_ts/fleet/classes.workers.js +110 -17
- package/dist_ts/fleet/functions.workervalidation.js +2 -2
- package/dist_ts/functions.flexprivatesnapshot.d.ts +102 -0
- package/dist_ts/functions.flexprivatesnapshot.js +461 -0
- package/dist_ts/functions.inferencecli.d.ts +3 -2
- package/dist_ts/functions.inferencecli.js +67 -5
- package/dist_ts/functions.inferencecliarguments.d.ts +6 -2
- package/dist_ts/functions.inferencecliarguments.js +29 -2
- package/dist_ts/functions.inferencelaunch.d.ts +24 -0
- package/dist_ts/functions.inferencelaunch.js +42 -2
- package/dist_ts/functions.mcptickettools.d.ts +3 -0
- package/dist_ts/functions.mcptickettools.js +2 -2
- package/dist_ts/functions.proxycontract.d.ts +11 -0
- package/dist_ts/functions.proxycontract.js +12 -1
- package/dist_ts/functions.proxysocket.d.ts +6 -0
- package/dist_ts/functions.proxysocket.js +46 -0
- package/dist_ts/functions.ticketcli.d.ts +1 -1
- package/dist_ts/functions.ticketcli.js +8 -4
- package/dist_ts/functions.ticketvalidation.d.ts +3 -0
- package/dist_ts/functions.ticketvalidation.js +7 -4
- package/dist_ts/functions.workerprocessproof.d.ts +6 -0
- package/dist_ts/functions.workerprocessproof.js +28 -4
- package/dist_ts/interfaces.flexipc.d.ts +21 -2
- package/dist_ts/interfaces.flexipc.js +33 -16
- package/dist_ts_interfaces/fleetworkers.d.ts +6 -0
- package/dist_ts_interfaces/interfaces.d.ts +1 -1
- package/dist_ts_interfaces/interfaces.js +1 -1
- package/dist_ts_interfaces/requests.tickets.d.ts +8 -12
- package/dist_ts_interfaces/tickets.d.ts +37 -9
- package/dist_ts_interfaces/tickets.js +7 -1
- package/dist_ts_interfaces/workercallers.d.ts +43 -4
- package/package.json +7 -7
- package/readme.md +156 -23
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/aglapi/aglapisurface.document.ts +63 -36
- package/ts/classes.aglhome.ts +6 -0
- package/ts/classes.authstore.ts +4 -0
- package/ts/classes.controller.ts +141 -32
- package/ts/classes.controllereventdelivery.ts +289 -0
- package/ts/classes.flexmodels.public.ts +10 -0
- package/ts/classes.flexprojectionreader.ts +30 -3
- package/ts/classes.flexservice.ts +33 -5
- package/ts/classes.flexstore.ts +381 -246
- package/ts/classes.inferencegateway.ts +104 -23
- package/ts/classes.inferenceservice.ts +6 -3
- package/ts/classes.proxycontrol.ts +76 -39
- package/ts/classes.proxycontrolclient.ts +72 -20
- package/ts/classes.proxydaemon.ts +85 -15
- package/ts/classes.proxyleaseholder.ts +84 -28
- package/ts/classes.proxystore.ts +16 -5
- package/ts/classes.ticketnotifier.ts +3 -1
- package/ts/classes.ticketstore.ts +201 -75
- package/ts/classes.workercallerbindings.ts +147 -0
- package/ts/classes.workercallers.ts +410 -59
- package/ts/driver/classes.drivereventrelay.ts +89 -4
- package/ts/driver/functions.driverinstructions.ts +1 -1
- package/ts/driver/functions.drivertools.ts +22 -8
- package/ts/fleet/classes.boardpump.ts +51 -19
- package/ts/fleet/classes.ticketeffects.ts +25 -11
- package/ts/fleet/classes.workerlaunches.ts +23 -15
- package/ts/fleet/classes.workers.ts +79 -17
- package/ts/fleet/functions.workervalidation.ts +1 -1
- package/ts/functions.flexprivatesnapshot.ts +601 -0
- package/ts/functions.inferencecli.ts +61 -7
- package/ts/functions.inferencecliarguments.ts +32 -1
- package/ts/functions.inferencelaunch.ts +49 -2
- package/ts/functions.mcptickettools.ts +1 -1
- package/ts/functions.proxycontract.ts +12 -0
- package/ts/functions.proxysocket.ts +39 -0
- package/ts/functions.ticketcli.ts +7 -3
- package/ts/functions.ticketvalidation.ts +7 -3
- package/ts/functions.workerprocessproof.ts +27 -4
- package/ts/interfaces.flexipc.ts +50 -21
- package/ts_interfaces/fleetworkers.ts +6 -0
- package/ts_interfaces/interfaces.ts +1 -1
- package/ts_interfaces/requests.tickets.ts +9 -6
- package/ts_interfaces/tickets.ts +32 -1
- package/ts_interfaces/workercallers.ts +32 -4
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements.harnesscontrollerapp.ts +19 -8
- package/ts_web/elements.ticketboard.ts +16 -4
- package/ts_web/settings.general.ts +10 -4
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import { workerCallerLaunchIdEnvironmentVariable, workerCallerLaunchGenerationEnvironmentVariable, controllerMcpCallerCredentialEnvironmentVariable, } from '../dist_ts_interfaces/index.js';
|
|
3
3
|
import { anonymousControllerMcpCaller, ControllerMcpCallerRegistry } from './classes.mcpcallerregistry.js';
|
|
4
|
-
import { resolveWorkerBridgeCommand, resolveClaudeWorkerExecutable, verifyClaudeWorkerProcess, verifyWorkerBridge, workerSnapshotsEqual, WorkerCallerProofError, isWorkerCallerProofRefusal, } from './functions.workerprocessproof.js';
|
|
4
|
+
import { resolveWorkerBridgeCommand, resolveClaudeWorkerExecutable, verifyClaudeWorkerProcess, readWorkerBridge, verifyWorkerBridge, workerSnapshotsEqual, WorkerCallerProofError, isWorkerCallerProofRefusal, } from './functions.workerprocessproof.js';
|
|
5
|
+
import { workerCallerDigest, workerProcessSnapshotDigest, } from './classes.workercallerbindings.js';
|
|
5
6
|
const pending = () => ({ callerPending: true, bindingRevision: 0 });
|
|
7
|
+
/** How long a bridge refused for a reason that may pass (an unread inventory, a job not yet in its process) waits before its next proof. */
|
|
8
|
+
const transientRefusalMs = 5_000;
|
|
9
|
+
const maximumRefusals = 64;
|
|
10
|
+
const maximumLoggedReasons = 4096;
|
|
11
|
+
const proofReason = (errorArg) => errorArg instanceof WorkerCallerProofError
|
|
12
|
+
? errorArg.message : `a process could not be read (${errorArg.code ?? 'unknown'})`;
|
|
6
13
|
const assertIdentifier = (valueArg) => {
|
|
7
14
|
if (typeof valueArg !== 'string' || !/^[A-Za-z0-9_.:-]{1,256}$/u.test(valueArg))
|
|
8
15
|
throw new Error('Invalid worker launch identifier.');
|
|
@@ -12,16 +19,34 @@ export class ControllerWorkerCallers {
|
|
|
12
19
|
launches = new Map();
|
|
13
20
|
sessions = new Map();
|
|
14
21
|
challenges = new Map();
|
|
22
|
+
/** Each worker's current launch, prepared by this controller or kept from before its restart. */
|
|
23
|
+
workers = new Map();
|
|
24
|
+
/** Per worker, the chain its kept binding's writes, deletion and restoration run on, one at a time. */
|
|
25
|
+
workerTails = new Map();
|
|
26
|
+
/** Pending reasons logged for launches this controller does not hold, by launch digest and reason. */
|
|
27
|
+
loggedUnknown = new Set();
|
|
15
28
|
closed = false;
|
|
16
29
|
proof;
|
|
30
|
+
log;
|
|
17
31
|
constructor(options) {
|
|
18
32
|
this.options = options;
|
|
19
|
-
this.proof = options.processProof ?? { resolveCommand: resolveWorkerBridgeCommand,
|
|
20
|
-
|
|
33
|
+
this.proof = options.processProof ?? { resolveCommand: resolveWorkerBridgeCommand, resolveClaude: resolveClaudeWorkerExecutable,
|
|
34
|
+
verifyClaude: verifyClaudeWorkerProcess, readBridge: readWorkerBridge, verifyBridge: verifyWorkerBridge };
|
|
35
|
+
this.log = options.log ?? ((lineArg) => console.warn(lineArg));
|
|
21
36
|
}
|
|
22
37
|
async prepareWorkerCaller(launchArg) {
|
|
23
38
|
assertIdentifier(launchArg.launchId);
|
|
24
39
|
assertIdentifier(launchArg.projectId);
|
|
40
|
+
if (typeof launchArg.workerId !== 'string' || launchArg.workerId.length > 1024 || !launchArg.workerId.startsWith(`${launchArg.projectId}:`)) {
|
|
41
|
+
throw new Error('Invalid worker launch identifier.');
|
|
42
|
+
}
|
|
43
|
+
const refusable = () => this.closed || this.launches.has(launchArg.launchId) || !['claude', 'codex'].includes(launchArg.harnessId);
|
|
44
|
+
if (refusable())
|
|
45
|
+
throw new Error('Worker launch cannot be prepared.');
|
|
46
|
+
// A worker holds one current launch; one kept from before a restart gives way like any other.
|
|
47
|
+
const previous = this.workers.get(launchArg.workerId);
|
|
48
|
+
if (previous && previous.state !== 'revoked')
|
|
49
|
+
await this.revokeWorkerCaller({ launchId: previous.launch.launchId, reason: 'replacement' });
|
|
25
50
|
// A revoked launch stays as a tombstone so its id is never prepared again; the oldest give way to new launches.
|
|
26
51
|
for (const [launchId, record] of this.launches) {
|
|
27
52
|
if (this.launches.size < 65536)
|
|
@@ -29,28 +54,22 @@ export class ControllerWorkerCallers {
|
|
|
29
54
|
if (record.state === 'revoked' && launchId !== launchArg.launchId)
|
|
30
55
|
this.launches.delete(launchId);
|
|
31
56
|
}
|
|
32
|
-
if (
|
|
33
|
-
|| !['claude', 'codex'].includes(launchArg.harnessId))
|
|
57
|
+
if (refusable() || this.launches.size >= 65536)
|
|
34
58
|
throw new Error('Worker launch cannot be prepared.');
|
|
35
59
|
const record = { launch: structuredClone(launchArg), generation: plugins.crypto.randomBytes(24).toString('base64url'),
|
|
36
|
-
state: 'prepared', revision: 0, credentials: new Map(), leases: 0, serial: Promise.resolve() };
|
|
60
|
+
state: 'prepared', revision: 0, credentials: new Map(), leases: 0, serial: Promise.resolve(), refusals: new Map(), logged: new Set(), verified: true };
|
|
37
61
|
this.launches.set(launchArg.launchId, record);
|
|
62
|
+
this.workers.set(launchArg.workerId, record);
|
|
38
63
|
try {
|
|
39
|
-
const
|
|
40
|
-
const servers = master.mcpServers.filter(server => server.name === 'agl'
|
|
41
|
-
&& (!server.targets || server.targets.includes(launchArg.harnessId)));
|
|
42
|
-
if (servers.length !== 1 || servers[0].transport !== 'stdio'
|
|
43
|
-
|| Object.keys(servers[0].envFrom).length > 0
|
|
44
|
-
|| Object.hasOwn(servers[0].env, controllerMcpCallerCredentialEnvironmentVariable)) {
|
|
45
|
-
throw new Error('The Configuration master must define one non-secret stdio agl server for this harness.');
|
|
46
|
-
}
|
|
47
|
-
const server = servers[0];
|
|
64
|
+
const server = await this.approvedServer(launchArg.harnessId);
|
|
48
65
|
record.command = await this.proof.resolveCommand(server);
|
|
49
66
|
if (launchArg.harnessId === 'claude')
|
|
50
67
|
record.claudeExecutable = await this.proof.resolveClaude();
|
|
51
68
|
else
|
|
52
69
|
record.codex = await this.options.captureCodexOrigin(launchArg);
|
|
53
70
|
this.requireState(record, 'prepared');
|
|
71
|
+
await this.keep(record, 0);
|
|
72
|
+
this.requireState(record, 'prepared');
|
|
54
73
|
return { launchGeneration: record.generation, bindingRevision: 0, callerPending: true,
|
|
55
74
|
...(launchArg.harnessId === 'claude' ? { claudeMcpConfig: { mcpServers: { agl: {
|
|
56
75
|
...structuredClone(server.native?.claude ?? {}), type: 'stdio', command: server.command, args: [...server.args],
|
|
@@ -70,47 +89,7 @@ export class ControllerWorkerCallers {
|
|
|
70
89
|
const record = this.launches.get(bindingArg.launchId);
|
|
71
90
|
if (!record)
|
|
72
91
|
throw new Error('The worker launch is unavailable.');
|
|
73
|
-
await this.serialize(record,
|
|
74
|
-
if (this.closed || !['prepared', 'bound'].includes(record.state)
|
|
75
|
-
|| bindingArg.projectId !== record.launch.projectId || bindingArg.harnessId !== record.launch.harnessId
|
|
76
|
-
|| bindingArg.expectedBindingRevision !== record.revision || !record.command
|
|
77
|
-
|| (record.binding && bindingArg.nativeSessionId !== record.binding.nativeSessionId)
|
|
78
|
-
|| !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(bindingArg.nativeSessionId)) {
|
|
79
|
-
throw new Error('The worker binding is stale or inconsistent.');
|
|
80
|
-
}
|
|
81
|
-
const ticketSessionId = `${bindingArg.harnessId}:${bindingArg.nativeSessionId}`;
|
|
82
|
-
const existing = this.sessions.get(ticketSessionId);
|
|
83
|
-
if (existing && existing !== record)
|
|
84
|
-
throw new Error('The native worker session already belongs to another launch.');
|
|
85
|
-
let parent;
|
|
86
|
-
if (bindingArg.harnessId === 'claude') {
|
|
87
|
-
parent = await this.proof.verifyClaude(bindingArg.claudeProcess, record.claudeExecutable);
|
|
88
|
-
if (record.binding?.harnessId === 'claude' && record.binding.claudeProcess.jobId !== bindingArg.claudeProcess.jobId) {
|
|
89
|
-
throw new Error('A worker binding cannot change its native job.');
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
if (!record.codex || !await record.codex.isCurrent())
|
|
94
|
-
throw new Error('The Codex launch origin is no longer current.');
|
|
95
|
-
parent = record.codex.parent;
|
|
96
|
-
}
|
|
97
|
-
if (this.closed || record.state === 'revoked' || record.state === 'quiescing')
|
|
98
|
-
throw new Error('The worker launch was revoked.');
|
|
99
|
-
const other = this.sessions.get(ticketSessionId);
|
|
100
|
-
if (other && other !== record)
|
|
101
|
-
throw new Error('The native worker session already belongs to another launch.');
|
|
102
|
-
this.sessions.set(ticketSessionId, record);
|
|
103
|
-
record.state = 'quiescing';
|
|
104
|
-
this.clearCredentials(record);
|
|
105
|
-
this.clearChallenge(record);
|
|
106
|
-
await this.drain(record);
|
|
107
|
-
this.requireState(record, 'quiescing');
|
|
108
|
-
record.binding = structuredClone(bindingArg);
|
|
109
|
-
record.parent = parent;
|
|
110
|
-
record.ticketSessionId = ticketSessionId;
|
|
111
|
-
record.revision += 1;
|
|
112
|
-
record.state = 'bound';
|
|
113
|
-
});
|
|
92
|
+
await this.serialize(record, () => this.bind(record, bindingArg));
|
|
114
93
|
if (bindingArg.harnessId === 'codex') {
|
|
115
94
|
try {
|
|
116
95
|
await this.challenge(record);
|
|
@@ -135,23 +114,39 @@ export class ControllerWorkerCallers {
|
|
|
135
114
|
bindingRevision: record.revision, ...(record.ticketSessionId ? { ticketSessionId: record.ticketSessionId } : {}) };
|
|
136
115
|
}
|
|
137
116
|
async revokeWorkerCaller(requestArg) {
|
|
117
|
+
const forGood = requestArg.reason !== 'generation_change';
|
|
118
|
+
if ('workerId' in requestArg) {
|
|
119
|
+
const workerId = requestArg.workerId;
|
|
120
|
+
// Marked revoked and deleted in one step of the worker's chain, so no restoration or bind of it can follow.
|
|
121
|
+
const current = await this.withWorker(workerId, async () => {
|
|
122
|
+
const record = this.workers.get(workerId);
|
|
123
|
+
if (record)
|
|
124
|
+
this.markRevoked(record);
|
|
125
|
+
if (forGood)
|
|
126
|
+
await this.options.bindings?.delete(workerId);
|
|
127
|
+
return record;
|
|
128
|
+
});
|
|
129
|
+
if (current)
|
|
130
|
+
await this.settleRevocation(current);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
138
133
|
const record = this.launches.get(requestArg.launchId);
|
|
139
134
|
if (!record)
|
|
140
135
|
return;
|
|
141
|
-
record
|
|
142
|
-
this.
|
|
143
|
-
this.
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this.sessions.delete(record.ticketSessionId);
|
|
136
|
+
this.markRevoked(record);
|
|
137
|
+
await this.settleRevocation(record);
|
|
138
|
+
const bindings = this.options.bindings;
|
|
139
|
+
if (forGood && bindings && record.launch.harnessId === 'claude') {
|
|
140
|
+
await this.withWorker(record.launch.workerId, () => bindings.delete(record.launch.workerId, workerCallerDigest(record.launch.launchId)));
|
|
141
|
+
}
|
|
148
142
|
}
|
|
149
143
|
async enroll(requestArg, connectionArg) {
|
|
150
144
|
let record;
|
|
151
145
|
if ('launchId' in requestArg) {
|
|
152
|
-
record = this.launches.get(requestArg.launchId);
|
|
146
|
+
record = this.launches.get(requestArg.launchId) ?? await this.restore(requestArg);
|
|
153
147
|
if (!record || record.launch.harnessId !== 'claude' || record.generation !== requestArg.launchGeneration)
|
|
154
148
|
return pending();
|
|
149
|
+
return this.enrollClaude(record, requestArg.bridgePid, connectionArg);
|
|
155
150
|
}
|
|
156
151
|
else if ('challenge' in requestArg) {
|
|
157
152
|
record = this.challenges.get(requestArg.challenge);
|
|
@@ -212,6 +207,376 @@ export class ControllerWorkerCallers {
|
|
|
212
207
|
this.closed = true;
|
|
213
208
|
await Promise.all([...this.launches.keys()].map(launchId => this.revokeWorkerCaller({ launchId, reason: 'generation_change' })));
|
|
214
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Binds `recordArg` to `bindingArg`, inside its serial chain: a Claude launch to its background job and, when it has
|
|
212
|
+
* one, the job's process; a Codex launch to its thread on the proved origin. The kept binding is written first.
|
|
213
|
+
*/
|
|
214
|
+
async bind(record, bindingArg, commandArg) {
|
|
215
|
+
if (this.closed || !['prepared', 'bound'].includes(record.state)
|
|
216
|
+
|| bindingArg.projectId !== record.launch.projectId || bindingArg.harnessId !== record.launch.harnessId
|
|
217
|
+
|| bindingArg.expectedBindingRevision !== record.revision || !record.command
|
|
218
|
+
|| (record.binding && bindingArg.nativeSessionId !== record.binding.nativeSessionId)
|
|
219
|
+
|| !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u.test(bindingArg.nativeSessionId)
|
|
220
|
+
|| (bindingArg.harnessId === 'claude' && (typeof bindingArg.claudeJobId !== 'string' || !bindingArg.claudeJobId
|
|
221
|
+
|| (bindingArg.claudeProcess && bindingArg.claudeProcess.jobId !== bindingArg.claudeJobId)))) {
|
|
222
|
+
throw new Error('The worker binding is stale or inconsistent.');
|
|
223
|
+
}
|
|
224
|
+
const ticketSessionId = `${bindingArg.harnessId}:${bindingArg.nativeSessionId}`;
|
|
225
|
+
const existing = this.sessions.get(ticketSessionId);
|
|
226
|
+
if (existing && existing !== record)
|
|
227
|
+
throw new Error('The native worker session already belongs to another launch.');
|
|
228
|
+
let parent;
|
|
229
|
+
if (bindingArg.harnessId === 'claude') {
|
|
230
|
+
if (record.binding?.harnessId === 'claude' && record.binding.claudeJobId !== bindingArg.claudeJobId) {
|
|
231
|
+
throw new Error('A worker binding cannot change its native job.');
|
|
232
|
+
}
|
|
233
|
+
// A job whose process already exited binds without one; the job's next process proves itself as its bridge enrolls.
|
|
234
|
+
parent = bindingArg.claudeProcess ? await this.proof.verifyClaude(bindingArg.claudeProcess, record.claudeExecutable) : undefined;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
if (!record.codex || !await record.codex.isCurrent())
|
|
238
|
+
throw new Error('The Codex launch origin is no longer current.');
|
|
239
|
+
parent = record.codex.parent;
|
|
240
|
+
}
|
|
241
|
+
if (this.closed || record.state === 'revoked' || record.state === 'quiescing')
|
|
242
|
+
throw new Error('The worker launch was revoked.');
|
|
243
|
+
const other = this.sessions.get(ticketSessionId);
|
|
244
|
+
if (other && other !== record)
|
|
245
|
+
throw new Error('The native worker session already belongs to another launch.');
|
|
246
|
+
if (bindingArg.harnessId === 'claude') {
|
|
247
|
+
await this.keep(record, record.revision + 1, { nativeSessionId: bindingArg.nativeSessionId, jobId: bindingArg.claudeJobId,
|
|
248
|
+
...(parent ? { process: { pid: parent.pid, startTicks: parent.startTicks, snapshotDigest: workerProcessSnapshotDigest(parent) } } : {}) }, commandArg);
|
|
249
|
+
if (this.closed || record.state !== 'prepared' && record.state !== 'bound')
|
|
250
|
+
throw new Error('The worker launch was revoked.');
|
|
251
|
+
}
|
|
252
|
+
this.sessions.set(ticketSessionId, record);
|
|
253
|
+
record.state = 'quiescing';
|
|
254
|
+
this.clearCredentials(record);
|
|
255
|
+
this.clearChallenge(record);
|
|
256
|
+
await this.drain(record);
|
|
257
|
+
this.requireState(record, 'quiescing');
|
|
258
|
+
record.binding = structuredClone(bindingArg);
|
|
259
|
+
record.parent = parent;
|
|
260
|
+
if (commandArg)
|
|
261
|
+
record.command = structuredClone(commandArg);
|
|
262
|
+
record.ticketSessionId = ticketSessionId;
|
|
263
|
+
record.revision += 1;
|
|
264
|
+
record.state = 'bound';
|
|
265
|
+
record.verified = true;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Enrolls the bridge of a Claude launch: against the process the launch is bound to, or, when that process is gone or
|
|
269
|
+
* replaced, after the fleet proved the bridge's process to be the next process of the same job.
|
|
270
|
+
*/
|
|
271
|
+
async enrollClaude(recordArg, bridgePidArg, connectionArg) {
|
|
272
|
+
if (recordArg.state === 'bound' && recordArg.parent && recordArg.verified) {
|
|
273
|
+
try {
|
|
274
|
+
const response = await this.enrollCredential(recordArg, bridgePidArg, connectionArg);
|
|
275
|
+
if (!response.callerPending)
|
|
276
|
+
return response;
|
|
277
|
+
}
|
|
278
|
+
catch (errorArg) {
|
|
279
|
+
if (!isWorkerCallerProofRefusal(errorArg))
|
|
280
|
+
throw errorArg;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (recordArg.state !== 'bound') {
|
|
284
|
+
this.logPending(recordArg, recordArg.state === 'revoked' ? 'its launch was revoked' : 'its launch is not bound to a Claude job yet');
|
|
285
|
+
return pending();
|
|
286
|
+
}
|
|
287
|
+
const outcome = await this.reprove(recordArg, bridgePidArg, connectionArg);
|
|
288
|
+
if (outcome.kind === 'ended') {
|
|
289
|
+
this.logPending(recordArg, `${outcome.reason}; its launch is revoked`);
|
|
290
|
+
await this.revokeWorkerCaller({ launchId: recordArg.launch.launchId, reason: 'failure' });
|
|
291
|
+
return pending();
|
|
292
|
+
}
|
|
293
|
+
if (outcome.kind === 'refused' || outcome.kind === 'remembered') {
|
|
294
|
+
if (outcome.kind === 'refused')
|
|
295
|
+
this.logPending(recordArg, outcome.reason);
|
|
296
|
+
return pending();
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
return await this.enrollCredential(recordArg, bridgePidArg, connectionArg);
|
|
300
|
+
}
|
|
301
|
+
catch (errorArg) {
|
|
302
|
+
if (!isWorkerCallerProofRefusal(errorArg))
|
|
303
|
+
throw errorArg;
|
|
304
|
+
this.logPending(recordArg, proofReason(errorArg));
|
|
305
|
+
return pending();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Proves the bridge's process to be the current process of the job the launch is bound to, from a fresh inventory the
|
|
310
|
+
* fleet reads, and binds the launch to it at the current revision. A bridge refused for good is remembered for its
|
|
311
|
+
* process's life, one refused for a reason that may pass for a short while; neither is proved again at every call.
|
|
312
|
+
*/
|
|
313
|
+
async reprove(recordArg, bridgePidArg, connectionArg) {
|
|
314
|
+
const observe = this.options.observeClaudeJob;
|
|
315
|
+
if (!observe)
|
|
316
|
+
return { kind: 'refused', reason: 'the process its launch is bound to is gone, and no fleet proves the job\'s next process' };
|
|
317
|
+
let bridge, command = recordArg.command;
|
|
318
|
+
try {
|
|
319
|
+
bridge = await this.proof.readBridge(connectionArg, bridgePidArg, command);
|
|
320
|
+
}
|
|
321
|
+
catch (errorArg) {
|
|
322
|
+
if (!isWorkerCallerProofRefusal(errorArg))
|
|
323
|
+
throw errorArg;
|
|
324
|
+
// An upgrade re-executes a bridge in place onto the build the controller runs now: it runs the command this
|
|
325
|
+
// controller resolves from its own configured `agl` entry, never one the bridge names.
|
|
326
|
+
let current;
|
|
327
|
+
try {
|
|
328
|
+
current = await this.currentCommand();
|
|
329
|
+
}
|
|
330
|
+
catch (resolveArg) {
|
|
331
|
+
return { kind: 'refused', reason: `${proofReason(errorArg)} (the approved bridge command cannot be resolved now: ${resolveArg instanceof Error ? resolveArg.message : 'unknown failure'})` };
|
|
332
|
+
}
|
|
333
|
+
if (plugins.util.isDeepStrictEqual(current, command))
|
|
334
|
+
return { kind: 'refused', reason: proofReason(errorArg) };
|
|
335
|
+
try {
|
|
336
|
+
bridge = await this.proof.readBridge(connectionArg, bridgePidArg, current);
|
|
337
|
+
}
|
|
338
|
+
catch (currentArg) {
|
|
339
|
+
if (!isWorkerCallerProofRefusal(currentArg))
|
|
340
|
+
throw currentArg;
|
|
341
|
+
return { kind: 'refused', reason: proofReason(errorArg) };
|
|
342
|
+
}
|
|
343
|
+
command = current;
|
|
344
|
+
}
|
|
345
|
+
const key = workerProcessSnapshotDigest(bridge);
|
|
346
|
+
if ((recordArg.refusals.get(key) ?? 0) > Date.now())
|
|
347
|
+
return { kind: 'remembered' };
|
|
348
|
+
return this.serialize(recordArg, async () => {
|
|
349
|
+
const record = recordArg, binding = record.binding;
|
|
350
|
+
if (this.closed || record.state !== 'bound' || binding?.harnessId !== 'claude' || !record.command) {
|
|
351
|
+
return { kind: 'refused', reason: 'its launch is no longer bound' };
|
|
352
|
+
}
|
|
353
|
+
// Read in the serial chain: an enrollment that ran before may have kept the bridge's new command already.
|
|
354
|
+
const sameCommand = plugins.util.isDeepStrictEqual(command, record.command);
|
|
355
|
+
// An enrollment that waited here finds the launch bound to this bridge's process already.
|
|
356
|
+
if (sameCommand && record.verified && record.parent && record.parent.pid === bridge.parentPid
|
|
357
|
+
&& await this.processStands(record, record.parent))
|
|
358
|
+
return { kind: 'rebound' };
|
|
359
|
+
const refuse = (reasonArg, forGoodArg) => {
|
|
360
|
+
if (record.refusals.size >= maximumRefusals)
|
|
361
|
+
record.refusals.delete(record.refusals.keys().next().value);
|
|
362
|
+
record.refusals.set(key, forGoodArg ? Number.POSITIVE_INFINITY : Date.now() + transientRefusalMs);
|
|
363
|
+
return { kind: 'refused', reason: reasonArg };
|
|
364
|
+
};
|
|
365
|
+
const observed = await observe({ workerId: record.launch.workerId, projectId: record.launch.projectId,
|
|
366
|
+
nativeSessionId: binding.nativeSessionId, jobId: binding.claudeJobId });
|
|
367
|
+
if (observed.state === 'ended')
|
|
368
|
+
return { kind: 'ended', reason: observed.reason };
|
|
369
|
+
if (observed.state === 'unproven')
|
|
370
|
+
return refuse(observed.reason, false);
|
|
371
|
+
if (observed.state === 'settled')
|
|
372
|
+
return refuse('its Claude job lists no running process', false);
|
|
373
|
+
if (this.closed || record.state !== 'bound')
|
|
374
|
+
return { kind: 'refused', reason: 'its launch is no longer bound' };
|
|
375
|
+
if (observed.process.jobId !== binding.claudeJobId)
|
|
376
|
+
return { kind: 'ended', reason: 'its session continues as another Claude job' };
|
|
377
|
+
// The inventory can still list the process Claude Code just replaced, so this refusal may pass.
|
|
378
|
+
if (observed.process.pid !== bridge.parentPid)
|
|
379
|
+
return refuse('its bridge does not run under the process of its Claude job', false);
|
|
380
|
+
// A restored launch whose kept process is still the job's: the inventory confirmed it, and nothing is bound again.
|
|
381
|
+
if (sameCommand && record.parent && record.parent.pid === observed.process.pid && record.parent.startTicks === observed.process.startTicks
|
|
382
|
+
&& await this.processStands(record, record.parent)) {
|
|
383
|
+
record.verified = true;
|
|
384
|
+
return { kind: 'rebound' };
|
|
385
|
+
}
|
|
386
|
+
let executable, parent;
|
|
387
|
+
try {
|
|
388
|
+
executable = await this.proof.resolveClaude();
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
return refuse('the approved Claude Code executable cannot be resolved', false);
|
|
392
|
+
}
|
|
393
|
+
try {
|
|
394
|
+
parent = await this.proof.verifyClaude(observed.process, executable);
|
|
395
|
+
}
|
|
396
|
+
catch (errorArg) {
|
|
397
|
+
if (!isWorkerCallerProofRefusal(errorArg))
|
|
398
|
+
throw errorArg;
|
|
399
|
+
return refuse('the process of its Claude job is not the approved Claude Code executable', false);
|
|
400
|
+
}
|
|
401
|
+
try {
|
|
402
|
+
await this.proof.verifyBridge(connectionArg, bridge.pid, command, parent);
|
|
403
|
+
}
|
|
404
|
+
catch (errorArg) {
|
|
405
|
+
if (!isWorkerCallerProofRefusal(errorArg))
|
|
406
|
+
throw errorArg;
|
|
407
|
+
return refuse('its bridge is not proved to be a direct child of the process of its Claude job', true);
|
|
408
|
+
}
|
|
409
|
+
record.claudeExecutable = executable;
|
|
410
|
+
try {
|
|
411
|
+
await this.bind(record, { launchId: record.launch.launchId, projectId: record.launch.projectId, harnessId: 'claude',
|
|
412
|
+
nativeSessionId: binding.nativeSessionId, expectedBindingRevision: record.revision, claudeJobId: binding.claudeJobId,
|
|
413
|
+
claudeProcess: observed.process }, sameCommand ? undefined : command);
|
|
414
|
+
}
|
|
415
|
+
catch (errorArg) {
|
|
416
|
+
// Revoked while it was proved: the revocation wins.
|
|
417
|
+
if (this.revoked(record))
|
|
418
|
+
return { kind: 'refused', reason: 'its launch was revoked' };
|
|
419
|
+
throw errorArg;
|
|
420
|
+
}
|
|
421
|
+
return { kind: 'rebound' };
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
/** Whether the Claude process `processArg` the launch was proved against still runs, unchanged. */
|
|
425
|
+
async processStands(recordArg, processArg) {
|
|
426
|
+
if (recordArg.binding?.harnessId !== 'claude' || !recordArg.claudeExecutable)
|
|
427
|
+
return false;
|
|
428
|
+
try {
|
|
429
|
+
return workerSnapshotsEqual(processArg, await this.proof.verifyClaude({ jobId: recordArg.binding.claudeJobId,
|
|
430
|
+
pid: processArg.pid, startTicks: processArg.startTicks }, recordArg.claudeExecutable));
|
|
431
|
+
}
|
|
432
|
+
catch (errorArg) {
|
|
433
|
+
if (isWorkerCallerProofRefusal(errorArg))
|
|
434
|
+
return false;
|
|
435
|
+
throw errorArg;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* The launch a restarted controller kept for a bridge that presents it, as it was bound: found by its id's digest,
|
|
440
|
+
* checked against its generation's, and only while it is still its worker's current launch. It is restored
|
|
441
|
+
* unverified: its bridge enrolls only after a fresh inventory shows the job still the worker's, in the kept process
|
|
442
|
+
* when that still runs unchanged, or in the bridge's process, which then proves itself as the job's next process.
|
|
443
|
+
*/
|
|
444
|
+
async restore(requestArg) {
|
|
445
|
+
const store = this.options.bindings;
|
|
446
|
+
if (!store || this.closed)
|
|
447
|
+
return undefined;
|
|
448
|
+
const launchDigest = workerCallerDigest(requestArg.launchId);
|
|
449
|
+
const found = await store.find(launchDigest);
|
|
450
|
+
const refusal = !found ? 'its launch is not the current launch of a fleet worker'
|
|
451
|
+
: found.generationDigest !== workerCallerDigest(requestArg.launchGeneration) ? 'its launch generation does not match'
|
|
452
|
+
: !found.binding ? 'its launch was never bound to a Claude job' : undefined;
|
|
453
|
+
if (!found || refusal) {
|
|
454
|
+
this.logUnknown(launchDigest, refusal);
|
|
455
|
+
return undefined;
|
|
456
|
+
}
|
|
457
|
+
return this.withWorker(found.id, async () => {
|
|
458
|
+
const kept = await store.find(launchDigest);
|
|
459
|
+
if (!kept?.binding || kept.id !== found.id || kept.generationDigest !== found.generationDigest) {
|
|
460
|
+
this.logUnknown(launchDigest, 'its worker holds another launch now');
|
|
461
|
+
return undefined;
|
|
462
|
+
}
|
|
463
|
+
const ticketSessionId = `claude:${kept.binding.nativeSessionId}`;
|
|
464
|
+
const record = { launch: { launchId: requestArg.launchId, projectId: kept.projectId, workerId: kept.id, harnessId: 'claude' },
|
|
465
|
+
generation: requestArg.launchGeneration, state: 'bound', revision: kept.revision, command: structuredClone(kept.command),
|
|
466
|
+
claudeExecutable: kept.claudeExecutable, binding: { launchId: requestArg.launchId, projectId: kept.projectId, harnessId: 'claude',
|
|
467
|
+
nativeSessionId: kept.binding.nativeSessionId, expectedBindingRevision: kept.revision - 1, claudeJobId: kept.binding.jobId },
|
|
468
|
+
ticketSessionId, credentials: new Map(), leases: 0, serial: Promise.resolve(), refusals: new Map(), logged: new Set(), verified: false };
|
|
469
|
+
const parent = kept.binding.process ? await this.keptProcess(record, kept.binding.process) : undefined;
|
|
470
|
+
if (parent)
|
|
471
|
+
record.parent = parent;
|
|
472
|
+
// Decided in one step after the last await: a launch prepared or restored meanwhile wins.
|
|
473
|
+
const held = this.launches.get(requestArg.launchId);
|
|
474
|
+
if (held)
|
|
475
|
+
return held;
|
|
476
|
+
const current = this.workers.get(kept.id), other = this.sessions.get(ticketSessionId);
|
|
477
|
+
if (this.closed || current && current.state !== 'revoked' || this.launches.size >= 65536) {
|
|
478
|
+
this.logUnknown(launchDigest, 'its worker holds another launch now');
|
|
479
|
+
return undefined;
|
|
480
|
+
}
|
|
481
|
+
if (other && other.state !== 'revoked') {
|
|
482
|
+
this.logUnknown(launchDigest, 'its session belongs to another launch');
|
|
483
|
+
return undefined;
|
|
484
|
+
}
|
|
485
|
+
this.launches.set(requestArg.launchId, record);
|
|
486
|
+
this.workers.set(kept.id, record);
|
|
487
|
+
this.sessions.set(ticketSessionId, record);
|
|
488
|
+
return record;
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
/** The kept process of a restored launch while it still runs as it was proved: the same PID, start and snapshot. */
|
|
492
|
+
async keptProcess(recordArg, processArg) {
|
|
493
|
+
if (recordArg.binding?.harnessId !== 'claude')
|
|
494
|
+
return undefined;
|
|
495
|
+
try {
|
|
496
|
+
const snapshot = await this.proof.verifyClaude({ jobId: recordArg.binding.claudeJobId, pid: processArg.pid, startTicks: processArg.startTicks }, recordArg.claudeExecutable);
|
|
497
|
+
return workerProcessSnapshotDigest(snapshot) === processArg.snapshotDigest ? snapshot : undefined;
|
|
498
|
+
}
|
|
499
|
+
catch (errorArg) {
|
|
500
|
+
if (isWorkerCallerProofRefusal(errorArg))
|
|
501
|
+
return undefined;
|
|
502
|
+
throw errorArg;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/** Keeps the binding of a Claude launch at `revisionArg`: prepared, or bound to `bindingArg`. Refused once the launch is revoked. */
|
|
506
|
+
async keep(recordArg, revisionArg, bindingArg, commandArg = recordArg.command) {
|
|
507
|
+
const store = this.options.bindings;
|
|
508
|
+
if (!store || recordArg.launch.harnessId !== 'claude')
|
|
509
|
+
return;
|
|
510
|
+
await this.withWorker(recordArg.launch.workerId, async () => {
|
|
511
|
+
if (this.closed || recordArg.state === 'revoked')
|
|
512
|
+
throw new Error('The worker launch was revoked.');
|
|
513
|
+
await store.save({ id: recordArg.launch.workerId, projectId: recordArg.launch.projectId, harnessId: 'claude',
|
|
514
|
+
launchDigest: workerCallerDigest(recordArg.launch.launchId), generationDigest: workerCallerDigest(recordArg.generation),
|
|
515
|
+
command: structuredClone(commandArg), claudeExecutable: recordArg.claudeExecutable, revision: revisionArg,
|
|
516
|
+
...(bindingArg ? { binding: structuredClone(bindingArg) } : {}) });
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
/** The one non-secret stdio `agl` MCP server the Configuration master defines for `harnessArg`. */
|
|
520
|
+
async approvedServer(harnessArg) {
|
|
521
|
+
const master = await this.options.readMaster();
|
|
522
|
+
const servers = master.mcpServers.filter(server => server.name === 'agl' && (!server.targets || server.targets.includes(harnessArg)));
|
|
523
|
+
const server = servers[0];
|
|
524
|
+
if (servers.length !== 1 || server?.transport !== 'stdio' || Object.keys(server.envFrom).length > 0
|
|
525
|
+
|| Object.hasOwn(server.env, controllerMcpCallerCredentialEnvironmentVariable)) {
|
|
526
|
+
throw new Error('The Configuration master must define one non-secret stdio agl server for this harness.');
|
|
527
|
+
}
|
|
528
|
+
return server;
|
|
529
|
+
}
|
|
530
|
+
/** The bridge command this controller approves now for Claude launches, resolved from its own configured `agl` entry. */
|
|
531
|
+
async currentCommand() {
|
|
532
|
+
return this.proof.resolveCommand(await this.approvedServer('claude'));
|
|
533
|
+
}
|
|
534
|
+
/** Runs `operationArg` on the worker's chain: kept-binding writes, deletion and restoration of one worker never interleave. */
|
|
535
|
+
withWorker(workerIdArg, operationArg) {
|
|
536
|
+
const task = (this.workerTails.get(workerIdArg) ?? Promise.resolve()).then(operationArg);
|
|
537
|
+
const tail = task.then(() => undefined, () => undefined);
|
|
538
|
+
this.workerTails.set(workerIdArg, tail);
|
|
539
|
+
void tail.then(() => { if (this.workerTails.get(workerIdArg) === tail)
|
|
540
|
+
this.workerTails.delete(workerIdArg); });
|
|
541
|
+
return task;
|
|
542
|
+
}
|
|
543
|
+
/** Whether the launch was revoked, also by this controller closing; a method, so a check after an await reads the state again. */
|
|
544
|
+
revoked(recordArg) {
|
|
545
|
+
return this.closed || recordArg.state === 'revoked';
|
|
546
|
+
}
|
|
547
|
+
markRevoked(recordArg) {
|
|
548
|
+
recordArg.state = 'revoked';
|
|
549
|
+
this.clearChallenge(recordArg);
|
|
550
|
+
this.clearCredentials(recordArg);
|
|
551
|
+
}
|
|
552
|
+
async settleRevocation(recordArg) {
|
|
553
|
+
await this.drain(recordArg);
|
|
554
|
+
await recordArg.serial.catch(() => undefined);
|
|
555
|
+
if (recordArg.ticketSessionId && this.sessions.get(recordArg.ticketSessionId) === recordArg)
|
|
556
|
+
this.sessions.delete(recordArg.ticketSessionId);
|
|
557
|
+
if (this.workers.get(recordArg.launch.workerId) === recordArg)
|
|
558
|
+
this.workers.delete(recordArg.launch.workerId);
|
|
559
|
+
}
|
|
560
|
+
/** Writes once per launch and reason why its bridge's enrollment stays pending; never a credential or the launch id. */
|
|
561
|
+
logPending(recordArg, reasonArg) {
|
|
562
|
+
if (recordArg.logged.has(reasonArg))
|
|
563
|
+
return;
|
|
564
|
+
if (recordArg.logged.size >= 32)
|
|
565
|
+
recordArg.logged.clear();
|
|
566
|
+
recordArg.logged.add(reasonArg);
|
|
567
|
+
this.log(`The MCP caller of fleet worker ${recordArg.launch.workerId}${recordArg.ticketSessionId ? ` (${recordArg.ticketSessionId})` : ''} `
|
|
568
|
+
+ `stays unverified: ${reasonArg}.`);
|
|
569
|
+
}
|
|
570
|
+
/** As `logPending`, for a launch this controller does not hold. */
|
|
571
|
+
logUnknown(launchDigestArg, reasonArg) {
|
|
572
|
+
const key = `${launchDigestArg}:${reasonArg}`;
|
|
573
|
+
if (this.loggedUnknown.has(key))
|
|
574
|
+
return;
|
|
575
|
+
if (this.loggedUnknown.size >= maximumLoggedReasons)
|
|
576
|
+
this.loggedUnknown.clear();
|
|
577
|
+
this.loggedUnknown.add(key);
|
|
578
|
+
this.log(`A fleet worker's MCP caller stays unverified: ${reasonArg}.`);
|
|
579
|
+
}
|
|
215
580
|
async enrollCredential(recordArg, bridgePidArg, connectionArg, challengeArg) {
|
|
216
581
|
return this.serialize(recordArg, async () => {
|
|
217
582
|
const revision = recordArg.revision;
|
|
@@ -336,4 +701,4 @@ export class ControllerWorkerCallers {
|
|
|
336
701
|
await new Promise(resolve => { recordArg.drained = () => { existing?.(); resolve(); }; });
|
|
337
702
|
}
|
|
338
703
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53b3JrZXJjYWxsZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xhc3Nlcy53b3JrZXJjYWxsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx1Q0FBdUMsRUFBRSwrQ0FBK0MsRUFDeEYsZ0RBQWdELEdBSWpELE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0csT0FBTyxFQUNMLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUNwRixrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsR0FFN0YsTUFBTSxtQ0FBbUMsQ0FBQztBQXFEM0MsTUFBTSxPQUFPLEdBQUcsR0FBb0MsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFRLEVBQUU7SUFDbEQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3hJLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyx1QkFBdUI7SUFPTCxPQUFPO0lBTm5CLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUM1QyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDNUMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQ3ZELE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDTixLQUFLLENBQTRCO0lBRWxELFlBQTZCLE9BQXVDO3VCQUF2QyxPQUFPO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxFQUFFLGNBQWMsRUFBRSwwQkFBMEI7WUFDL0UsYUFBYSxFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUM5SCxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQW1DO1FBQ2xFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsZ0hBQWdIO1FBQ2hILEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLO2dCQUFFLE1BQU07WUFDdEMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSztlQUNsRixDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sTUFBTSxHQUFrQixFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDbEksS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2pHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLO21CQUNuRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxPQUFPO21CQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQzttQkFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLGdEQUFnRCxDQUFDLEVBQUUsQ0FBQztnQkFDckYsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1lBQzVHLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pELElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFRO2dCQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7O2dCQUM1RixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJO2dCQUNuRixHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dDQUM3RSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQ0FDL0csR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsdUNBQXVDLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUTtvQ0FDakYsQ0FBQywrQ0FBK0MsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUU7NkJBQ3pFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsaUJBQWlCLEVBQUU7NEJBQzVDLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVU7NEJBQ2xGLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7eUJBQ2xGLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUM7UUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkYsTUFBTSxRQUFRLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBcUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7bUJBQzNELFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVM7bUJBQ3BHLFVBQVUsQ0FBQyx1QkFBdUIsS0FBSyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87bUJBQ3pFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsZUFBZSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO21CQUNqRixDQUFDLGlFQUFpRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDekcsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxJQUFJLFFBQVEsS0FBSyxNQUFNO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztZQUNySCxJQUFJLE1BQThCLENBQUM7WUFDbkMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxnQkFBaUIsQ0FBQyxDQUFDO2dCQUMzRixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEgsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssV0FBVztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDakksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDakQsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLE1BQU07Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQy9HLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDdkIsTUFBTSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDekMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDO2dCQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO2dCQUN0RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLHVCQUF1QixHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMvRCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RixDQUFDO2dCQUNELE1BQU0sUUFBUSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFnQixFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUVNLHFCQUFxQixDQUFDLFdBQW1CO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUM7WUFDL0UsZUFBZSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN2SCxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQXdFO1FBQ3RHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25JLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQW1DLEVBQUUsYUFBdUM7UUFDOUYsSUFBSSxNQUFpQyxDQUFDO1FBQ3RDLElBQUksVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsZ0JBQWdCO2dCQUFFLE9BQU8sT0FBTyxFQUFFLENBQUM7UUFDN0gsQ0FBQzthQUFNLElBQUksV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsS0FBSyxVQUFVLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLE9BQU87Z0JBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQztRQUN4SSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO2dCQUFFLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDaEcsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDN0YsSUFBSSxRQUFRO2dCQUFFLE9BQU8sUUFBUSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixPQUFPLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2xHLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFDNUUsV0FBVyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSwwQkFBMEIsQ0FBQyxRQUFRLENBQUM7Z0JBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQztZQUMzRCxNQUFNLFFBQVEsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBNkMsRUFBRSxhQUF1QztRQUN2RyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWU7WUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RILElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxPQUFPLElBQUksT0FBTyxFQUFFLGNBQWMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQztlQUM3SCxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxlQUFlO21CQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLLE1BQU07Z0JBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSw0QkFBNEIsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3SCxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUM3QixJQUFJLFFBQVE7d0JBQUUsT0FBTztvQkFDckIsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDaEIsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQ25CLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7d0JBQzNCLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQ2QsQ0FBQztnQkFDSCxDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuSSxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQXdCLEVBQUUsWUFBb0IsRUFDM0UsYUFBdUMsRUFBRSxZQUFxQjtRQUM5RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDcEMsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQztZQUNuSCxJQUFJLFlBQVksS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxZQUFZO2dCQUFFLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDekYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0UsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTTttQkFDNUUsQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDO2dCQUFFLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDNUYsSUFBSSxZQUFZLEtBQUssU0FBUztnQkFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pELElBQUksUUFBUSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkcsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2RyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVE7Z0JBQzlHLG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFFBQVE7Z0JBQ2xGLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUM1RSxlQUFlLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxlQUFnQjtnQkFDL0YsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuSCxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxTQUF3QjtRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ3BDLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEtBQUssUUFBUTtZQUFFLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDckYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUN2RyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkUsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEcsU0FBUyxDQUFDLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDeEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBd0IsRUFBRSxXQUFtQixFQUFFLFlBQW9CO1FBQzVGLElBQUksT0FBa0QsQ0FBQztRQUN2RCxJQUFJLENBQUM7WUFDSCxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQzlHLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQVEsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDO2dCQUNqRyxJQUFJLE9BQU8sQ0FBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3SSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssWUFBWSxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUM7bUJBQzVJLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBTSxDQUFDLFNBQVMsRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDdkgsQ0FBQztRQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sUUFBUSxDQUFDO1FBQ2pCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksT0FBTztnQkFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxLQUFLLFdBQVc7Z0JBQUUsU0FBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBd0IsRUFBRSxZQUFvQixFQUM5RSxhQUF1QztRQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsUUFBUTttQkFDM0QsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUNsRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNO21CQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUMzRyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBd0IsRUFBRSxZQUFvQixFQUFFLGFBQXVDO1FBQ2hILElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtlQUNwRixDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFBRSxNQUFNLElBQUksc0JBQXNCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN0SSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBd0IsRUFBRSxZQUFvQixFQUFFLGFBQXVDLEVBQ3pHLFdBQW9DO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2pGLE9BQU8sV0FBVyxLQUFLLFNBQVMsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSwwQkFBMEIsQ0FBQyxRQUFRLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDdkQsTUFBTSxRQUFRLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFTyxTQUFTLENBQUksU0FBd0IsRUFBRSxZQUE4QjtRQUMzRSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUF3QixFQUFFLFFBQWdDO1FBQzdFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQXdCO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0csU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQXdCO1FBQzdDLElBQUksU0FBUyxDQUFDLFNBQVM7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckUsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBd0I7UUFDMUMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ25DLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDbkMsTUFBTSxJQUFJLE9BQU8sQ0FBTyxPQUFPLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztDQUNGIn0=
|
|
704
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53b3JrZXJjYWxsZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xhc3Nlcy53b3JrZXJjYWxsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx1Q0FBdUMsRUFBRSwrQ0FBK0MsRUFDeEYsZ0RBQWdELEdBS2pELE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0csT0FBTyxFQUNMLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUNwRixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsR0FFL0csTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQUUsMkJBQTJCLEdBRWhELE1BQU0sbUNBQW1DLENBQUM7QUFrRjNDLE1BQU0sT0FBTyxHQUFHLEdBQW9DLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRyw0SUFBNEk7QUFDNUksTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBaUIsRUFBVSxFQUFFLENBQUMsUUFBUSxZQUFZLHNCQUFzQjtJQUMzRixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0NBQWlDLFFBQWtDLENBQUMsSUFBSSxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQ2hILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFRLEVBQUU7SUFDbEQsSUFB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
|