__vite_ssr_exportName__("ConnectionResolver", () => { try { return ConnectionResolver } catch {} });
__vite_ssr_exportName__("make", () => { try { return make } catch {} });
__vite_ssr_exportName__("layer", () => { try { return layer } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/shared/src/relayTracing.ts", {"importedNames":["withRelayClientTracing"]});
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Context.js");
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Effect.js");
const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Layer.js");
const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Option.js");
const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http/HttpClient.js");
const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/authorization/remote.ts", {"importedNames":["appendClientConnectionParams","readClientOwnerParams"]});
const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/authorization/service.ts");
const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/platform/capabilities.ts");
const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/catalog.ts", {"importedNames":["BearerConnectionCredential","BearerConnectionProfile","SshConnectionProfile"]});
const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/credentialStore.ts");
const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/errors.ts", {"importedNames":["credentialMissingError","environmentMismatchError","mapRemoteEnvironmentError","profileMissingError"]});
const __vite_ssr_import_13__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/pullRequestRoutingPermissions.ts", {"importedNames":["PullRequestRoutingPermissions","pullRequestRoutingConnectionKey"]});
const __vite_ssr_import_14__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/model.ts", {"importedNames":["ConnectionBlockedError"]});
const __vite_ssr_import_15__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/profileStore.ts");
const __vite_ssr_import_16__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/compatibility.ts", {"importedNames":["appendOrchestrationProtocol","orchestrationProtocolCompatibilityError"]});
const __vite_ssr_import_17__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/routes.ts", {"importedNames":["credentialConnectionId"]});
const __vite_ssr_import_18__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/environment/descriptor.ts", {"importedNames":["fetchRemoteEnvironmentDescriptor"]});



















class ConnectionResolver extends __vite_ssr_import_1__.Service()("@t3tools/client-runtime/connection/resolver/ConnectionResolver") {};
const isBearerProfile = __vite_ssr_import_5__.is((0,__vite_ssr_import_10__.BearerConnectionProfile));
const isSshProfile = __vite_ssr_import_5__.is((0,__vite_ssr_import_10__.SshConnectionProfile));
const isBearerCredential = __vite_ssr_import_5__.is((0,__vite_ssr_import_10__.BearerConnectionCredential));
function primarySocketUrl(target, clientMetadata, owners) {
	const url = new URL(target.wsBaseUrl);
	if (url.pathname === "" || url.pathname === "/") {
		url.pathname = "/ws";
	};
	(0,__vite_ssr_import_7__.appendClientConnectionParams)(url, clientMetadata, "direct", owners);
	return url.toString();
}
const makePrimaryBroker = __vite_ssr_import_2__.fn("clientRuntime.connection.broker.makePrimary")(function* () {
	const auth = yield* __vite_ssr_import_9__.PrimaryEnvironmentAuth;
	const presentation = yield* __vite_ssr_import_9__.ClientPresentation;
	const remote = yield* __vite_ssr_import_8__.RemoteEnvironmentAuthorization;
	return __vite_ssr_import_2__.fn("clientRuntime.connection.broker.primary")(function* (target) {
		const bearerToken = yield* auth.bearerToken;
		if (__vite_ssr_import_4__.isNone(bearerToken)) {
			return {
				environmentId: target.environmentId,
				label: target.label,
				httpBaseUrl: target.httpBaseUrl,
				socketUrl: primarySocketUrl(target, presentation.metadata, yield* __vite_ssr_import_7__.readClientOwnerParams),
				httpAuthorization: null,
				target
			};
		};
		const authorized = yield* remote.authorizeBearer({
			expectedEnvironmentId: target.environmentId,
			httpBaseUrl: target.httpBaseUrl,
			wsBaseUrl: target.wsBaseUrl,
			bearerToken: bearerToken.value,
			connectionMethod: "direct"
		});
		return {
			...authorized,
			target
		};
	});
});
const makeBearerBroker = __vite_ssr_import_2__.fn("clientRuntime.connection.broker.makeBearer")(function* () {
	const credentials = yield* __vite_ssr_import_11__.ConnectionCredentialStore;
	const remote = yield* __vite_ssr_import_8__.RemoteEnvironmentAuthorization;
	return __vite_ssr_import_2__.fn("clientRuntime.connection.broker.bearer")(function* (entry) {
		const target = entry.target;
		const profile = yield* __vite_ssr_import_2__.fromOption(entry.profile, () => (0,__vite_ssr_import_12__.profileMissingError)(target.connectionId));
		if (!isBearerProfile(profile)) {
			return yield* new __vite_ssr_import_14__.ConnectionBlockedError({
				reason: "configuration",
				detail: `Connection profile ${target.connectionId} is not a bearer connection.`
			});
		};
		if (profile.environmentId !== target.environmentId) {
			return yield* (0,__vite_ssr_import_12__.environmentMismatchError)({
				expected: target.environmentId,
				actual: profile.environmentId
			});
		};
		if (profile.authorization === "t3-connect") {
			const authorized = yield* remote.authorizeDpop({
				expectedEnvironmentId: target.environmentId,
				directEndpoint: {
					httpBaseUrl: profile.httpBaseUrl,
					wsBaseUrl: profile.wsBaseUrl
				}
			});
			return {
				...authorized,
				target
			};
		};
		const credential = yield* credentials.get((0,__vite_ssr_import_17__.credentialConnectionId)(target.connectionId)).pipe(__vite_ssr_import_2__.flatMap(__vite_ssr_import_4__.match({
			onNone: () => __vite_ssr_import_2__.fail((0,__vite_ssr_import_12__.credentialMissingError)(target.connectionId)),
			onSome: __vite_ssr_import_2__.succeed
		})));
		if (!isBearerCredential(credential)) {
			return yield* (0,__vite_ssr_import_12__.credentialMissingError)(target.connectionId);
		};
		const authorized = yield* remote.authorizeBearer({
			expectedEnvironmentId: target.environmentId,
			httpBaseUrl: profile.httpBaseUrl,
			wsBaseUrl: profile.wsBaseUrl,
			bearerToken: credential.token,
			connectionMethod: "direct"
		});
		return {
			environmentId: authorized.environmentId,
			label: authorized.label,
			httpBaseUrl: authorized.httpBaseUrl,
			socketUrl: authorized.socketUrl,
			httpAuthorization: authorized.httpAuthorization,
			target
		};
	});
});
const makeRelayBroker = __vite_ssr_import_2__.fn("clientRuntime.connection.broker.makeRelay")(function* () {
	const remote = yield* __vite_ssr_import_8__.RemoteEnvironmentAuthorization;
	return __vite_ssr_import_2__.fnUntraced(function* (target) {
		const authorized = yield* remote.authorizeDpop({ expectedEnvironmentId: target.environmentId });
		return {
			environmentId: authorized.environmentId,
			label: authorized.label,
			httpBaseUrl: authorized.httpBaseUrl,
			socketUrl: authorized.socketUrl,
			httpAuthorization: authorized.httpAuthorization,
			target
		};
	}, __vite_ssr_import_2__.withSpan("clientRuntime.connection.broker.relay"), (0,__vite_ssr_import_0__.withRelayClientTracing));
});
const makeSshBroker = __vite_ssr_import_2__.fn("clientRuntime.connection.broker.makeSsh")(function* () {
	const profiles = yield* __vite_ssr_import_15__.ConnectionProfileStore;
	const credentials = yield* __vite_ssr_import_11__.ConnectionCredentialStore;
	const ssh = yield* __vite_ssr_import_9__.SshEnvironmentGateway;
	const remote = yield* __vite_ssr_import_8__.RemoteEnvironmentAuthorization;
	return __vite_ssr_import_2__.fn("clientRuntime.connection.broker.ssh")(function* (entry) {
		const target = entry.target;
		const profile = yield* __vite_ssr_import_2__.fromOption(entry.profile, () => (0,__vite_ssr_import_12__.profileMissingError)(target.connectionId));
		if (!isSshProfile(profile)) {
			return yield* new __vite_ssr_import_14__.ConnectionBlockedError({
				reason: "configuration",
				detail: `Connection profile ${target.connectionId} is not an SSH connection.`
			});
		};
		if (profile.environmentId !== target.environmentId) {
			return yield* (0,__vite_ssr_import_12__.environmentMismatchError)({
				expected: target.environmentId,
				actual: profile.environmentId
			});
		};
		// Each pairing adds a session on the host, so connects reuse the saved token.
		const saved = __vite_ssr_import_4__.getOrUndefined(yield* credentials.get(target.connectionId));
		const savedToken = saved !== undefined && isBearerCredential(saved) ? saved.token : undefined;
		const prepared = yield* ssh.prepare({
			connectionId: target.connectionId,
			expectedEnvironmentId: target.environmentId,
			target: profile.target,
			...savedToken === undefined ? {} : { bearerToken: savedToken }
		});
		if (prepared.bearerToken !== savedToken) {
			yield* credentials.put(target.connectionId, new __vite_ssr_import_10__.BearerConnectionCredential({ token: prepared.bearerToken }));
		};
		const preparedProfile = new __vite_ssr_import_10__.SshConnectionProfile({
			connectionId: profile.connectionId,
			environmentId: profile.environmentId,
			label: profile.label,
			target: prepared.bootstrap.target
		});
		if ((0,__vite_ssr_import_13__.pullRequestRoutingConnectionKey)(entry) !== (0,__vite_ssr_import_13__.pullRequestRoutingConnectionKey)({
			...entry,
			profile: __vite_ssr_import_4__.some(preparedProfile)
		})) {
			const permissions = yield* __vite_ssr_import_13__.PullRequestRoutingPermissions;
			yield* permissions.forget(target.environmentId);
		};
		yield* profiles.put(preparedProfile);
		const authorized = yield* remote.authorizeBearer({
			expectedEnvironmentId: target.environmentId,
			httpBaseUrl: prepared.bootstrap.httpBaseUrl,
			wsBaseUrl: prepared.bootstrap.wsBaseUrl,
			bearerToken: prepared.bearerToken,
			connectionMethod: "ssh"
		});
		return {
			environmentId: authorized.environmentId,
			label: authorized.label,
			httpBaseUrl: authorized.httpBaseUrl,
			socketUrl: authorized.socketUrl,
			httpAuthorization: authorized.httpAuthorization,
			target
		};
	});
});
/** @public */
const make = __vite_ssr_import_2__.gen(function* () {
	const primary = yield* makePrimaryBroker();
	const bearer = yield* makeBearerBroker();
	const relay = yield* makeRelayBroker();
	const ssh = yield* makeSshBroker();
	const httpClient = yield* __vite_ssr_import_6__.HttpClient;
	const authorize = __vite_ssr_import_2__.fn("clientRuntime.connection.broker.authorize")(function* (entry) {
		const target = entry.target;
		yield* __vite_ssr_import_2__.annotateCurrentSpan({
			"connection.environment.id": target.environmentId,
			"connection.target.kind": target._tag
		});
		const prepared = yield* (() => {
			switch (target._tag) {
				case "PrimaryConnectionTarget": return primary(target);
				case "BearerConnectionTarget": return bearer({
					...entry,
					target
				});
				case "RelayConnectionTarget": return relay(target);
				case "SshConnectionTarget": return ssh({
					...entry,
					target
				});
			}
		})();
		const descriptor = yield* (0,__vite_ssr_import_18__.fetchRemoteEnvironmentDescriptor)({ httpBaseUrl: prepared.httpBaseUrl }).pipe(__vite_ssr_import_2__.mapError((0,__vite_ssr_import_12__.mapRemoteEnvironmentError)), __vite_ssr_import_2__.provideService(__vite_ssr_import_6__.HttpClient, httpClient));
		if (descriptor.environmentId !== target.environmentId) {
			return yield* (0,__vite_ssr_import_12__.environmentMismatchError)({
				expected: target.environmentId,
				actual: descriptor.environmentId
			});
		};
		return {
			prepared,
			descriptor
		};
	});
	const prepare = __vite_ssr_import_2__.fn("clientRuntime.connection.broker.prepare")(function* (entry) {
		const { prepared, descriptor } = yield* authorize(entry);
		const compatibilityError = (0,__vite_ssr_import_16__.orchestrationProtocolCompatibilityError)(descriptor);
		if (compatibilityError !== null) {
			return yield* compatibilityError;
		};
		return {
			...prepared,
			socketUrl: (0,__vite_ssr_import_16__.appendOrchestrationProtocol)(prepared.socketUrl)
		};
	});
	return ConnectionResolver.of({
		prepare,
		prepareForUpdate: authorize
	});
});
const layer = __vite_ssr_import_3__.effect(ConnectionResolver, make);
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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QUMsS0FDRCxzQkFBTyxZQUFTLGlEQUF5QixHQUN6QyxzQkFBTyxlQUFlLHNCQUFXLFlBQVksVUFBVSxDQUN6RDtFQUNBLElBQUksV0FBVyxrQkFBa0IsT0FBTyxlQUFlO0dBQ3JELE9BQU8sT0FBTyxvREFBeUI7SUFDckMsVUFBVSxPQUFPO0lBQ2pCLFFBQVEsV0FBVztHQUNyQixDQUFDO0VBQ0g7RUFDQSxPQUFPO0dBQUU7R0FBVTtFQUFXO0NBQ2hDLENBQUM7Q0FFRCxNQUFNLFVBQVUsc0JBQU8sR0FBRyx5Q0FBeUMsQ0FBQyxDQUFDLFdBQ25FLE9BQ0E7RUFDQSxNQUFNLEVBQUUsVUFBVSxlQUFlLE9BQU8sVUFBVSxLQUFLO0VBQ3ZELE1BQU0scUJBQXFCLG1FQUF3QyxVQUFVO0VBQzdFLElBQUksdUJBQXVCLE1BQU07R0FDL0IsT0FBTyxPQUFPO0VBQ2hCO0VBQ0EsT0FBTztHQUNMLEdBQUc7R0FDSCxXQUFXLHVEQUE0QixTQUFTLFNBQVM7RUFDM0Q7Q0FDRixDQUFDO0NBRUQsT0FBTyxtQkFBbUIsR0FBRztFQUFFO0VBQVMsa0JBQWtCO0NBQVUsQ0FBQztBQUN2RSxDQUFDO0FBRU0sTUFBTSxRQUFRLHNCQUFNLE9BQU8sb0JBQW9CLElBQUkiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInJlc29sdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQXV0aENsaWVudFByZXNlbnRhdGlvbk1ldGFkYXRhLFxuICBFeGVjdXRpb25FbnZpcm9ubWVudERlc2NyaXB0b3IsXG59IGZyb20gXCJAdDN0b29scy9jb250cmFjdHNcIjtcbmltcG9ydCB7IHdpdGhSZWxheUNsaWVudFRyYWNpbmcgfSBmcm9tIFwiQHQzdG9vbHMvc2hhcmVkL3JlbGF5VHJhY2luZ1wiO1xuaW1wb3J0ICogYXMgQ29udGV4dCBmcm9tIFwiZWZmZWN0L0NvbnRleHRcIjtcbmltcG9ydCAqIGFzIEVmZmVjdCBmcm9tIFwiZWZmZWN0L0VmZmVjdFwiO1xuaW1wb3J0ICogYXMgTGF5ZXIgZnJvbSBcImVmZmVjdC9MYXllclwiO1xuaW1wb3J0ICogYXMgT3B0aW9uIGZyb20gXCJlZmZlY3QvT3B0aW9uXCI7XG5pbXBvcnQgKiBhcyBTY2hlbWEgZnJvbSBcImVmZmVjdC9TY2hlbWFcIjtcbmltcG9ydCAqIGFzIEh0dHBDbGllbnQgZnJvbSBcImVmZmVjdC9odHRwL0h0dHBDbGllbnRcIjtcblxuaW1wb3J0IHtcbiAgYXBwZW5kQ2xpZW50Q29ubmVjdGlvblBhcmFtcyxcbiAgdHlwZSBDbGllbnRPd25lclBhcmFtcyxcbiAgcmVhZENsaWVudE93bmVyUGFyYW1zLFxufSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9yZW1vdGUudHNcIjtcbmltcG9ydCAqIGFzIFJlbW90ZUVudmlyb25tZW50QXV0aG9yaXphdGlvbiBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9zZXJ2aWNlLnRzXCI7XG5pbXBvcnQgKiBhcyBDbGllbnRDYXBhYmlsaXRpZXMgZnJvbSBcIi4uL3BsYXRmb3JtL2NhcGFiaWxpdGllcy50c1wiO1xuaW1wb3J0IHtcbiAgQmVhcmVyQ29ubmVjdGlvbkNyZWRlbnRpYWwsXG4gIEJlYXJlckNvbm5lY3Rpb25Qcm9maWxlLFxuICB0eXBlIENvbm5lY3Rpb25DYXRhbG9nRW50cnksXG4gIFNzaENvbm5lY3Rpb25Qcm9maWxlLFxufSBmcm9tIFwiLi9jYXRhbG9nLnRzXCI7XG5pbXBvcnQgKiBhcyBDb25uZWN0aW9uQ3JlZGVudGlhbFN0b3JlIGZyb20gXCIuL2NyZWRlbnRpYWxTdG9yZS50c1wiO1xuaW1wb3J0IHtcbiAgY3JlZGVudGlhbE1pc3NpbmdFcnJvcixcbiAgZW52aXJvbm1lbnRNaXNtYXRjaEVycm9yLFxuICBtYXBSZW1vdGVFbnZpcm9ubWVudEVycm9yLFxuICBwcm9maWxlTWlzc2luZ0Vycm9yLFxufSBmcm9tIFwiLi9lcnJvcnMudHNcIjtcbmltcG9ydCB7XG4gIFB1bGxSZXF1ZXN0Um91dGluZ1Blcm1pc3Npb25zLFxuICBwdWxsUmVxdWVzdFJvdXRpbmdDb25uZWN0aW9uS2V5LFxufSBmcm9tIFwiLi9wdWxsUmVxdWVzdFJvdXRpbmdQZXJtaXNzaW9ucy50c1wiO1xuaW1wb3J0IHR5cGUge1xuICBCZWFyZXJDb25uZWN0aW9uVGFyZ2V0LFxuICBDb25uZWN0aW9uVGFyZ2V0LFxuICBQcmVwYXJlZENvbm5lY3Rpb24sXG4gIFByaW1hcnlDb25uZWN0aW9uVGFyZ2V0LFxuICBSZWxheUNvbm5lY3Rpb25UYXJnZXQsXG4gIFNzaENvbm5lY3Rpb25UYXJnZXQsXG59IGZyb20gXCIuL21vZGVsLnRzXCI7XG5pbXBvcnQgeyBDb25uZWN0aW9uQmxvY2tlZEVycm9yLCB0eXBlIENvbm5lY3Rpb25BdHRlbXB0RXJyb3IgfSBmcm9tIFwiLi9tb2RlbC50c1wiO1xuaW1wb3J0ICogYXMgQ29ubmVjdGlvblByb2ZpbGVTdG9yZSBmcm9tIFwiLi9wcm9maWxlU3RvcmUudHNcIjtcbmltcG9ydCB7XG4gIGFwcGVuZE9yY2hlc3RyYXRpb25Qcm90b2NvbCxcbiAgb3JjaGVzdHJhdGlvblByb3RvY29sQ29tcGF0aWJpbGl0eUVycm9yLFxufSBmcm9tIFwiLi9jb21wYXRpYmlsaXR5LnRzXCI7XG5pbXBvcnQgeyBjcmVkZW50aWFsQ29ubmVjdGlvbklkIH0gZnJvbSBcIi4vcm91dGVzLnRzXCI7XG5pbXBvcnQgeyBmZXRjaFJlbW90ZUVudmlyb25tZW50RGVzY3JpcHRvciB9IGZyb20gXCIuLi9lbnZpcm9ubWVudC9kZXNjcmlwdG9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uUmVzb2x2ZXIgZXh0ZW5kcyBDb250ZXh0LlNlcnZpY2U8XG4gIENvbm5lY3Rpb25SZXNvbHZlcixcbiAge1xuICAgIHJlYWRvbmx5IHByZXBhcmU6IChcbiAgICAgIGVudHJ5OiBDb25uZWN0aW9uQ2F0YWxvZ0VudHJ5LFxuICAgICkgPT4gRWZmZWN0LkVmZmVjdDxQcmVwYXJlZENvbm5lY3Rpb24sIENvbm5lY3Rpb25BdHRlbXB0RXJyb3I+O1xuICAgIC8qKlxuICAgICAqIEF1dGhvcml6ZXMgYSBzb2NrZXQgd2l0aG91dCB0aGUgb3JjaGVzdHJhdGlvbiBwcm90b2NvbCBnYXRlLCBmb3IgaG9zdHNcbiAgICAgKiB0b28gb2xkIHRvIGNvbm5lY3Qgbm9ybWFsbHkuIE9ubHkgdXBkYXRlIFJQQ3MgbWF5IHJ1biBvdmVyIGl0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHByZXBhcmVGb3JVcGRhdGU6IChlbnRyeTogQ29ubmVjdGlvbkNhdGFsb2dFbnRyeSkgPT4gRWZmZWN0LkVmZmVjdDxcbiAgICAgIHtcbiAgICAgICAgcmVhZG9ubHkgcHJlcGFyZWQ6IFByZXBhcmVkQ29ubmVjdGlvbjtcbiAgICAgICAgcmVhZG9ubHkgZGVzY3JpcHRvcjogRXhlY3V0aW9uRW52aXJvbm1lbnREZXNjcmlwdG9yO1xuICAgICAgfSxcbiAgICAgIENvbm5lY3Rpb25BdHRlbXB0RXJyb3JcbiAgICA+O1xuICB9XG4+KCkoXCJAdDN0b29scy9jbGllbnQtcnVudGltZS9jb25uZWN0aW9uL3Jlc29sdmVyL0Nvbm5lY3Rpb25SZXNvbHZlclwiKSB7fVxuXG5jb25zdCBpc0JlYXJlclByb2ZpbGUgPSBTY2hlbWEuaXMoQmVhcmVyQ29ubmVjdGlvblByb2ZpbGUpO1xuY29uc3QgaXNTc2hQcm9maWxlID0gU2NoZW1hLmlzKFNzaENvbm5lY3Rpb25Qcm9maWxlKTtcbmNvbnN0IGlzQmVhcmVyQ3JlZGVudGlhbCA9IFNjaGVtYS5pcyhCZWFyZXJDb25uZWN0aW9uQ3JlZGVudGlhbCk7XG5cbmZ1bmN0aW9uIHByaW1hcnlTb2NrZXRVcmwoXG4gIHRhcmdldDogUHJpbWFyeUNvbm5lY3Rpb25UYXJnZXQsXG4gIGNsaWVudE1ldGFkYXRhOiBBdXRoQ2xpZW50UHJlc2VudGF0aW9uTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gIG93bmVyczogQ2xpZW50T3duZXJQYXJhbXMsXG4pOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHRhcmdldC53c0Jhc2VVcmwpO1xuICBpZiAodXJsLnBhdGhuYW1lID09PSBcIlwiIHx8IHVybC5wYXRobmFtZSA9PT0gXCIvXCIpIHtcbiAgICB1cmwucGF0aG5hbWUgPSBcIi93c1wiO1xuICB9XG4gIGFwcGVuZENsaWVudENvbm5lY3Rpb25QYXJhbXModXJsLCBjbGllbnRNZXRhZGF0YSwgXCJkaXJlY3RcIiwgb3duZXJzKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5jb25zdCBtYWtlUHJpbWFyeUJyb2tlciA9IEVmZmVjdC5mbihcImNsaWVudFJ1bnRpbWUuY29ubmVjdGlvbi5icm9rZXIubWFrZVByaW1hcnlcIikoZnVuY3Rpb24qICgpIHtcbiAgY29uc3QgYXV0aCA9IHlpZWxkKiBDbGllbnRDYXBhYmlsaXRpZXMuUHJpbWFyeUVudmlyb25tZW50QXV0aDtcbiAgY29uc3QgcHJlc2VudGF0aW9uID0geWllbGQqIENsaWVudENhcGFiaWxpdGllcy5DbGllbnRQcmVzZW50YXRpb247XG4gIGNvbnN0IHJlbW90ZSA9IHlpZWxkKiBSZW1vdGVFbnZpcm9ubWVudEF1dGhvcml6YXRpb24uUmVtb3RlRW52aXJvbm1lbnRBdXRob3JpemF0aW9uO1xuXG4gIHJldHVybiBFZmZlY3QuZm4oXCJjbGllbnRSdW50aW1lLmNvbm5lY3Rpb24uYnJva2VyLnByaW1hcnlcIikoZnVuY3Rpb24qIChcbiAgICB0YXJnZXQ6IFByaW1hcnlDb25uZWN0aW9uVGFyZ2V0LFxuICApIHtcbiAgICBjb25zdCBiZWFyZXJUb2tlbiA9IHlpZWxkKiBhdXRoLmJlYXJlclRva2VuO1xuICAgIGlmIChPcHRpb24uaXNOb25lKGJlYXJlclRva2VuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnRJZDogdGFyZ2V0LmVudmlyb25tZW50SWQsXG4gICAgICAgIGxhYmVsOiB0YXJnZXQubGFiZWwsXG4gICAgICAgIGh0dHBCYXNlVXJsOiB0YXJnZXQuaHR0cEJhc2VVcmwsXG4gICAgICAgIHNvY2tldFVybDogcHJpbWFyeVNvY2tldFVybCh0YXJnZXQsIHByZXNlbnRhdGlvbi5tZXRhZGF0YSwgeWllbGQqIHJlYWRDbGllbnRPd25lclBhcmFtcyksXG4gICAgICAgIGh0dHBBdXRob3JpemF0aW9uOiBudWxsLFxuICAgICAgICB0YXJnZXQsXG4gICAgICB9IHNhdGlzZmllcyBQcmVwYXJlZENvbm5lY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3QgYXV0aG9yaXplZCA9IHlpZWxkKiByZW1vdGUuYXV0aG9yaXplQmVhcmVyKHtcbiAgICAgIGV4cGVjdGVkRW52aXJvbm1lbnRJZDogdGFyZ2V0LmVudmlyb25tZW50SWQsXG4gICAgICBodHRwQmFzZVVybDogdGFyZ2V0Lmh0dHBCYXNlVXJsLFxuICAgICAgd3NCYXNlVXJsOiB0YXJnZXQud3NCYXNlVXJsLFxuICAgICAgYmVhcmVyVG9rZW46IGJlYXJlclRva2VuLnZhbHVlLFxuICAgICAgY29ubmVjdGlvbk1ldGhvZDogXCJkaXJlY3RcIixcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXV0aG9yaXplZCxcbiAgICAgIHRhcmdldCxcbiAgICB9IHNhdGlzZmllcyBQcmVwYXJlZENvbm5lY3Rpb247XG4gIH0pO1xufSk7XG5cbmNvbnN0IG1ha2VCZWFyZXJCcm9rZXIgPSBFZmZlY3QuZm4oXCJjbGllbnRSdW50aW1lLmNvbm5lY3Rpb24uYnJva2VyLm1ha2VCZWFyZXJcIikoZnVuY3Rpb24qICgpIHtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSB5aWVsZCogQ29ubmVjdGlvbkNyZWRlbnRpYWxTdG9yZS5Db25uZWN0aW9uQ3JlZGVudGlhbFN0b3JlO1xuICBjb25zdCByZW1vdGUgPSB5aWVsZCogUmVtb3RlRW52aXJvbm1lbnRBdXRob3JpemF0aW9uLlJlbW90ZUVudmlyb25tZW50QXV0aG9yaXphdGlvbjtcblxuICByZXR1cm4gRWZmZWN0LmZuKFwiY2xpZW50UnVudGltZS5jb25uZWN0aW9uLmJyb2tlci5iZWFyZXJcIikoZnVuY3Rpb24qIChcbiAgICBlbnRyeTogQ29ubmVjdGlvbkNhdGFsb2dFbnRyeSAmIHsgcmVhZG9ubHkgdGFyZ2V0OiBCZWFyZXJDb25uZWN0aW9uVGFyZ2V0IH0sXG4gICkge1xuICAgIGNvbnN0IHRhcmdldCA9IGVudHJ5LnRhcmdldDtcbiAgICBjb25zdCBwcm9maWxlID0geWllbGQqIEVmZmVjdC5mcm9tT3B0aW9uKGVudHJ5LnByb2ZpbGUsICgpID0+XG4gICAgICBwcm9maWxlTWlzc2luZ0Vycm9yKHRhcmdldC5jb25uZWN0aW9uSWQpLFxuICAgICk7XG4gICAgaWYgKCFpc0JlYXJlclByb2ZpbGUocHJvZmlsZSkpIHtcbiAgICAgIHJldHVybiB5aWVsZCogbmV3IENvbm5lY3Rpb25CbG9ja2VkRXJyb3Ioe1xuICAgICAgICByZWFzb246IFwiY29uZmlndXJhdGlvblwiLFxuICAgICAgICBkZXRhaWw6IGBDb25uZWN0aW9uIHByb2ZpbGUgJHt0YXJnZXQuY29ubmVjdGlvbklkfSBpcyBub3QgYSBiZWFyZXIgY29ubmVjdGlvbi5gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwcm9maWxlLmVudmlyb25tZW50SWQgIT09IHRhcmdldC5lbnZpcm9ubWVudElkKSB7XG4gICAgICByZXR1cm4geWllbGQqIGVudmlyb25tZW50TWlzbWF0Y2hFcnJvcih7XG4gICAgICAgIGV4cGVjdGVkOiB0YXJnZXQuZW52aXJvbm1lbnRJZCxcbiAgICAgICAgYWN0dWFsOiBwcm9maWxlLmVudmlyb25tZW50SWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByb2ZpbGUuYXV0aG9yaXphdGlvbiA9PT0gXCJ0My1jb25uZWN0XCIpIHtcbiAgICAgIGNvbnN0IGF1dGhvcml6ZWQgPSB5aWVsZCogcmVtb3RlLmF1dGhvcml6ZURwb3Aoe1xuICAgICAgICBleHBlY3RlZEVudmlyb25tZW50SWQ6IHRhcmdldC5lbnZpcm9ubWVudElkLFxuICAgICAgICBkaXJlY3RFbmRwb2ludDogeyBodHRwQmFzZVVybDogcHJvZmlsZS5odHRwQmFzZVVybCwgd3NCYXNlVXJsOiBwcm9maWxlLndzQmFzZVVybCB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyAuLi5hdXRob3JpemVkLCB0YXJnZXQgfSBzYXRpc2ZpZXMgUHJlcGFyZWRDb25uZWN0aW9uO1xuICAgIH1cbiAgICBjb25zdCBjcmVkZW50aWFsID0geWllbGQqIGNyZWRlbnRpYWxzLmdldChjcmVkZW50aWFsQ29ubmVjdGlvbklkKHRhcmdldC5jb25uZWN0aW9uSWQpKS5waXBlKFxuICAgICAgRWZmZWN0LmZsYXRNYXAoXG4gICAgICAgIE9wdGlvbi5tYXRjaCh7XG4gICAgICAgICAgb25Ob25lOiAoKSA9PiBFZmZlY3QuZmFpbChjcmVkZW50aWFsTWlzc2luZ0Vycm9yKHRhcmdldC5jb25uZWN0aW9uSWQpKSxcbiAgICAgICAgICBvblNvbWU6IEVmZmVjdC5zdWNjZWVkLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoIWlzQmVhcmVyQ3JlZGVudGlhbChjcmVkZW50aWFsKSkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBjcmVkZW50aWFsTWlzc2luZ0Vycm9yKHRhcmdldC5jb25uZWN0aW9uSWQpO1xuICAgIH1cbiAgICBjb25zdCBhdXRob3JpemVkID0geWllbGQqIHJlbW90ZS5hdXRob3JpemVCZWFyZXIoe1xuICAgICAgZXhwZWN0ZWRFbnZpcm9ubWVudElkOiB0YXJnZXQuZW52aXJvbm1lbnRJZCxcbiAgICAgIGh0dHBCYXNlVXJsOiBwcm9maWxlLmh0dHBCYXNlVXJsLFxuICAgICAgd3NCYXNlVXJsOiBwcm9maWxlLndzQmFzZVVybCxcbiAgICAgIGJlYXJlclRva2VuOiBjcmVkZW50aWFsLnRva2VuLFxuICAgICAgY29ubmVjdGlvbk1ldGhvZDogXCJkaXJlY3RcIixcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZW52aXJvbm1lbnRJZDogYXV0aG9yaXplZC5lbnZpcm9ubWVudElkLFxuICAgICAgbGFiZWw6IGF1dGhvcml6ZWQubGFiZWwsXG4gICAgICBodHRwQmFzZVVybDogYXV0aG9yaXplZC5odHRwQmFzZVVybCxcbiAgICAgIHNvY2tldFVybDogYXV0aG9yaXplZC5zb2NrZXRVcmwsXG4gICAgICBodHRwQXV0aG9yaXphdGlvbjogYXV0aG9yaXplZC5odHRwQXV0aG9yaXphdGlvbixcbiAgICAgIHRhcmdldCxcbiAgICB9IHNhdGlzZmllcyBQcmVwYXJlZENvbm5lY3Rpb247XG4gIH0pO1xufSk7XG5cbmNvbnN0IG1ha2VSZWxheUJyb2tlciA9IEVmZmVjdC5mbihcImNsaWVudFJ1bnRpbWUuY29ubmVjdGlvbi5icm9rZXIubWFrZVJlbGF5XCIpKGZ1bmN0aW9uKiAoKSB7XG4gIGNvbnN0IHJlbW90ZSA9IHlpZWxkKiBSZW1vdGVFbnZpcm9ubWVudEF1dGhvcml6YXRpb24uUmVtb3RlRW52aXJvbm1lbnRBdXRob3JpemF0aW9uO1xuXG4gIHJldHVybiBFZmZlY3QuZm5VbnRyYWNlZChcbiAgICBmdW5jdGlvbiogKHRhcmdldDogUmVsYXlDb25uZWN0aW9uVGFyZ2V0KSB7XG4gICAgICBjb25zdCBhdXRob3JpemVkID0geWllbGQqIHJlbW90ZS5hdXRob3JpemVEcG9wKHtcbiAgICAgICAgZXhwZWN0ZWRFbnZpcm9ubWVudElkOiB0YXJnZXQuZW52aXJvbm1lbnRJZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnRJZDogYXV0aG9yaXplZC5lbnZpcm9ubWVudElkLFxuICAgICAgICBsYWJlbDogYXV0aG9yaXplZC5sYWJlbCxcbiAgICAgICAgaHR0cEJhc2VVcmw6IGF1dGhvcml6ZWQuaHR0cEJhc2VVcmwsXG4gICAgICAgIHNvY2tldFVybDogYXV0aG9yaXplZC5zb2NrZXRVcmwsXG4gICAgICAgIGh0dHBBdXRob3JpemF0aW9uOiBhdXRob3JpemVkLmh0dHBBdXRob3JpemF0aW9uLFxuICAgICAgICB0YXJnZXQsXG4gICAgICB9IHNhdGlzZmllcyBQcmVwYXJlZENvbm5lY3Rpb247XG4gICAgfSxcbiAgICBFZmZlY3Qud2l0aFNwYW4oXCJjbGllbnRSdW50aW1lLmNvbm5lY3Rpb24uYnJva2VyLnJlbGF5XCIpLFxuICAgIHdpdGhSZWxheUNsaWVudFRyYWNpbmcsXG4gICk7XG59KTtcblxuY29uc3QgbWFrZVNzaEJyb2tlciA9IEVmZmVjdC5mbihcImNsaWVudFJ1bnRpbWUuY29ubmVjdGlvbi5icm9rZXIubWFrZVNzaFwiKShmdW5jdGlvbiogKCkge1xuICBjb25zdCBwcm9maWxlcyA9IHlpZWxkKiBDb25uZWN0aW9uUHJvZmlsZVN0b3JlLkNvbm5lY3Rpb25Qcm9maWxlU3RvcmU7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0geWllbGQqIENvbm5lY3Rpb25DcmVkZW50aWFsU3RvcmUuQ29ubmVjdGlvbkNyZWRlbnRpYWxTdG9yZTtcbiAgY29uc3Qgc3NoID0geWllbGQqIENsaWVudENhcGFiaWxpdGllcy5Tc2hFbnZpcm9ubWVudEdhdGV3YXk7XG4gIGNvbnN0IHJlbW90ZSA9IHlpZWxkKiBSZW1vdGVFbnZpcm9ubWVudEF1dGhvcml6YXRpb24uUmVtb3RlRW52aXJvbm1lbnRBdXRob3JpemF0aW9uO1xuXG4gIHJldHVybiBFZmZlY3QuZm4oXCJjbGllbnRSdW50aW1lLmNvbm5lY3Rpb24uYnJva2VyLnNzaFwiKShmdW5jdGlvbiogKFxuICAgIGVudHJ5OiBDb25uZWN0aW9uQ2F0YWxvZ0VudHJ5ICYgeyByZWFkb25seSB0YXJnZXQ6IFNzaENvbm5lY3Rpb25UYXJnZXQgfSxcbiAgKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZW50cnkudGFyZ2V0O1xuICAgIGNvbnN0IHByb2ZpbGUgPSB5aWVsZCogRWZmZWN0LmZyb21PcHRpb24oZW50cnkucHJvZmlsZSwgKCkgPT5cbiAgICAgIHByb2ZpbGVNaXNzaW5nRXJyb3IodGFyZ2V0LmNvbm5lY3Rpb25JZCksXG4gICAgKTtcbiAgICBpZiAoIWlzU3NoUHJvZmlsZShwcm9maWxlKSkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBuZXcgQ29ubmVjdGlvbkJsb2NrZWRFcnJvcih7XG4gICAgICAgIHJlYXNvbjogXCJjb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGRldGFpbDogYENvbm5lY3Rpb24gcHJvZmlsZSAke3RhcmdldC5jb25uZWN0aW9uSWR9IGlzIG5vdCBhbiBTU0ggY29ubmVjdGlvbi5gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwcm9maWxlLmVudmlyb25tZW50SWQgIT09IHRhcmdldC5lbnZpcm9ubWVudElkKSB7XG4gICAgICByZXR1cm4geWllbGQqIGVudmlyb25tZW50TWlzbWF0Y2hFcnJvcih7XG4gICAgICAgIGV4cGVjdGVkOiB0YXJnZXQuZW52aXJvbm1lbnRJZCxcbiAgICAgICAgYWN0dWFsOiBwcm9maWxlLmVudmlyb25tZW50SWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gRWFjaCBwYWlyaW5nIGFkZHMgYSBzZXNzaW9uIG9uIHRoZSBob3N0LCBzbyBjb25uZWN0cyByZXVzZSB0aGUgc2F2ZWQgdG9rZW4uXG4gICAgY29uc3Qgc2F2ZWQgPSBPcHRpb24uZ2V0T3JVbmRlZmluZWQoeWllbGQqIGNyZWRlbnRpYWxzLmdldCh0YXJnZXQuY29ubmVjdGlvbklkKSk7XG4gICAgY29uc3Qgc2F2ZWRUb2tlbiA9IHNhdmVkICE9PSB1bmRlZmluZWQgJiYgaXNCZWFyZXJDcmVkZW50aWFsKHNhdmVkKSA/IHNhdmVkLnRva2VuIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZXBhcmVkID0geWllbGQqIHNzaC5wcmVwYXJlKHtcbiAgICAgIGNvbm5lY3Rpb25JZDogdGFyZ2V0LmNvbm5lY3Rpb25JZCxcbiAgICAgIGV4cGVjdGVkRW52aXJvbm1lbnRJZDogdGFyZ2V0LmVudmlyb25tZW50SWQsXG4gICAgICB0YXJnZXQ6IHByb2ZpbGUudGFyZ2V0LFxuICAgICAgLi4uKHNhdmVkVG9rZW4gPT09IHVuZGVmaW5lZCA/IHt9IDogeyBiZWFyZXJUb2tlbjogc2F2ZWRUb2tlbiB9KSxcbiAgICB9KTtcbiAgICBpZiAocHJlcGFyZWQuYmVhcmVyVG9rZW4gIT09IHNhdmVkVG9rZW4pIHtcbiAgICAgIHlpZWxkKiBjcmVkZW50aWFscy5wdXQoXG4gICAgICAgIHRhcmdldC5jb25uZWN0aW9uSWQsXG4gICAgICAgIG5ldyBCZWFyZXJDb25uZWN0aW9uQ3JlZGVudGlhbCh7IHRva2VuOiBwcmVwYXJlZC5iZWFyZXJUb2tlbiB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHByZXBhcmVkUHJvZmlsZSA9IG5ldyBTc2hDb25uZWN0aW9uUHJvZmlsZSh7XG4gICAgICBjb25uZWN0aW9uSWQ6IHByb2ZpbGUuY29ubmVjdGlvbklkLFxuICAgICAgZW52aXJvbm1lbnRJZDogcHJvZmlsZS5lbnZpcm9ubWVudElkLFxuICAgICAgbGFiZWw6IHByb2ZpbGUubGFiZWwsXG4gICAgICB0YXJnZXQ6IHByZXBhcmVkLmJvb3RzdHJhcC50YXJnZXQsXG4gICAgfSk7XG4gICAgaWYgKFxuICAgICAgcHVsbFJlcXVlc3RSb3V0aW5nQ29ubmVjdGlvbktleShlbnRyeSkgIT09XG4gICAgICBwdWxsUmVxdWVzdFJvdXRpbmdDb25uZWN0aW9uS2V5KHsgLi4uZW50cnksIHByb2ZpbGU6IE9wdGlvbi5zb21lKHByZXBhcmVkUHJvZmlsZSkgfSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0geWllbGQqIFB1bGxSZXF1ZXN0Um91dGluZ1Blcm1pc3Npb25zO1xuICAgICAgeWllbGQqIHBlcm1pc3Npb25zLmZvcmdldCh0YXJnZXQuZW52aXJvbm1lbnRJZCk7XG4gICAgfVxuICAgIHlpZWxkKiBwcm9maWxlcy5wdXQocHJlcGFyZWRQcm9maWxlKTtcbiAgICBjb25zdCBhdXRob3JpemVkID0geWllbGQqIHJlbW90ZS5hdXRob3JpemVCZWFyZXIoe1xuICAgICAgZXhwZWN0ZWRFbnZpcm9ubWVudElkOiB0YXJnZXQuZW52aXJvbm1lbnRJZCxcbiAgICAgIGh0dHBCYXNlVXJsOiBwcmVwYXJlZC5ib290c3RyYXAuaHR0cEJhc2VVcmwsXG4gICAgICB3c0Jhc2VVcmw6IHByZXBhcmVkLmJvb3RzdHJhcC53c0Jhc2VVcmwsXG4gICAgICBiZWFyZXJUb2tlbjogcHJlcGFyZWQuYmVhcmVyVG9rZW4sXG4gICAgICBjb25uZWN0aW9uTWV0aG9kOiBcInNzaFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBlbnZpcm9ubWVudElkOiBhdXRob3JpemVkLmVudmlyb25tZW50SWQsXG4gICAgICBsYWJlbDogYXV0aG9yaXplZC5sYWJlbCxcbiAgICAgIGh0dHBCYXNlVXJsOiBhdXRob3JpemVkLmh0dHBCYXNlVXJsLFxuICAgICAgc29ja2V0VXJsOiBhdXRob3JpemVkLnNvY2tldFVybCxcbiAgICAgIGh0dHBBdXRob3JpemF0aW9uOiBhdXRob3JpemVkLmh0dHBBdXRob3JpemF0aW9uLFxuICAgICAgdGFyZ2V0LFxuICAgIH0gc2F0aXNmaWVzIFByZXBhcmVkQ29ubmVjdGlvbjtcbiAgfSk7XG59KTtcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBtYWtlID0gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICBjb25zdCBwcmltYXJ5ID0geWllbGQqIG1ha2VQcmltYXJ5QnJva2VyKCk7XG4gIGNvbnN0IGJlYXJlciA9IHlpZWxkKiBtYWtlQmVhcmVyQnJva2VyKCk7XG4gIGNvbnN0IHJlbGF5ID0geWllbGQqIG1ha2VSZWxheUJyb2tlcigpO1xuICBjb25zdCBzc2ggPSB5aWVsZCogbWFrZVNzaEJyb2tlcigpO1xuICBjb25zdCBodHRwQ2xpZW50ID0geWllbGQqIEh0dHBDbGllbnQuSHR0cENsaWVudDtcblxuICBjb25zdCBhdXRob3JpemUgPSBFZmZlY3QuZm4oXCJjbGllbnRSdW50aW1lLmNvbm5lY3Rpb24uYnJva2VyLmF1dGhvcml6ZVwiKShmdW5jdGlvbiogKFxuICAgIGVudHJ5OiBDb25uZWN0aW9uQ2F0YWxvZ0VudHJ5LFxuICApIHtcbiAgICBjb25zdCB0YXJnZXQ6IENvbm5lY3Rpb25UYXJnZXQgPSBlbnRyeS50YXJnZXQ7XG4gICAgeWllbGQqIEVmZmVjdC5hbm5vdGF0ZUN1cnJlbnRTcGFuKHtcbiAgICAgIFwiY29ubmVjdGlvbi5lbnZpcm9ubWVudC5pZFwiOiB0YXJnZXQuZW52aXJvbm1lbnRJZCxcbiAgICAgIFwiY29ubmVjdGlvbi50YXJnZXQua2luZFwiOiB0YXJnZXQuX3RhZyxcbiAgICB9KTtcbiAgICBjb25zdCBwcmVwYXJlZCA9IHlpZWxkKiAoKCkgPT4ge1xuICAgICAgc3dpdGNoICh0YXJnZXQuX3RhZykge1xuICAgICAgICBjYXNlIFwiUHJpbWFyeUNvbm5lY3Rpb25UYXJnZXRcIjpcbiAgICAgICAgICByZXR1cm4gcHJpbWFyeSh0YXJnZXQpO1xuICAgICAgICBjYXNlIFwiQmVhcmVyQ29ubmVjdGlvblRhcmdldFwiOlxuICAgICAgICAgIHJldHVybiBiZWFyZXIoeyAuLi5lbnRyeSwgdGFyZ2V0IH0pO1xuICAgICAgICBjYXNlIFwiUmVsYXlDb25uZWN0aW9uVGFyZ2V0XCI6XG4gICAgICAgICAgcmV0dXJuIHJlbGF5KHRhcmdldCk7XG4gICAgICAgIGNhc2UgXCJTc2hDb25uZWN0aW9uVGFyZ2V0XCI6XG4gICAgICAgICAgcmV0dXJuIHNzaCh7IC4uLmVudHJ5LCB0YXJnZXQgfSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0geWllbGQqIGZldGNoUmVtb3RlRW52aXJvbm1lbnREZXNjcmlwdG9yKHtcbiAgICAgIGh0dHBCYXNlVXJsOiBwcmVwYXJlZC5odHRwQmFzZVVybCxcbiAgICB9KS5waXBlKFxuICAgICAgRWZmZWN0Lm1hcEVycm9yKG1hcFJlbW90ZUVudmlyb25tZW50RXJyb3IpLFxuICAgICAgRWZmZWN0LnByb3ZpZGVTZXJ2aWNlKEh0dHBDbGllbnQuSHR0cENsaWVudCwgaHR0cENsaWVudCksXG4gICAgKTtcbiAgICBpZiAoZGVzY3JpcHRvci5lbnZpcm9ubWVudElkICE9PSB0YXJnZXQuZW52aXJvbm1lbnRJZCkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBlbnZpcm9ubWVudE1pc21hdGNoRXJyb3Ioe1xuICAgICAgICBleHBlY3RlZDogdGFyZ2V0LmVudmlyb25tZW50SWQsXG4gICAgICAgIGFjdHVhbDogZGVzY3JpcHRvci5lbnZpcm9ubWVudElkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IHByZXBhcmVkLCBkZXNjcmlwdG9yIH07XG4gIH0pO1xuXG4gIGNvbnN0IHByZXBhcmUgPSBFZmZlY3QuZm4oXCJjbGllbnRSdW50aW1lLmNvbm5lY3Rpb24uYnJva2VyLnByZXBhcmVcIikoZnVuY3Rpb24qIChcbiAgICBlbnRyeTogQ29ubmVjdGlvbkNhdGFsb2dFbnRyeSxcbiAgKSB7XG4gICAgY29uc3QgeyBwcmVwYXJlZCwgZGVzY3JpcHRvciB9ID0geWllbGQqIGF1dGhvcml6ZShlbnRyeSk7XG4gICAgY29uc3QgY29tcGF0aWJpbGl0eUVycm9yID0gb3JjaGVzdHJhdGlvblByb3RvY29sQ29tcGF0aWJpbGl0eUVycm9yKGRlc2NyaXB0b3IpO1xuICAgIGlmIChjb21wYXRpYmlsaXR5RXJyb3IgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB5aWVsZCogY29tcGF0aWJpbGl0eUVycm9yO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJlcGFyZWQsXG4gICAgICBzb2NrZXRVcmw6IGFwcGVuZE9yY2hlc3RyYXRpb25Qcm90b2NvbChwcmVwYXJlZC5zb2NrZXRVcmwpLFxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiBDb25uZWN0aW9uUmVzb2x2ZXIub2YoeyBwcmVwYXJlLCBwcmVwYXJlRm9yVXBkYXRlOiBhdXRob3JpemUgfSk7XG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyID0gTGF5ZXIuZWZmZWN0KENvbm5lY3Rpb25SZXNvbHZlciwgbWFrZSk7XG4iXSwiZmlsZSI6Ii9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2Nvbm5lY3Rpb24vcmVzb2x2ZXIudHMifQ==

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2Nvbm5lY3Rpb24vcmVzb2x2ZXIudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NsaWVudC1ydW50aW1lL3NyYy9jb25uZWN0aW9uL3Jlc29sdmVyLnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjEiLCIyMiIsIjIzIiwiMjQiLCIyNSIsIjI2Il0sW10sWyI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIyNCIsIjI1IiwiMjYiXSx7fSwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9zaGFyZWQvc3JjL3JlbGF5VHJhY2luZy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvQ29udGV4dC5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvRWZmZWN0LmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9MYXllci5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvT3B0aW9uLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9TY2hlbWEuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L2h0dHAvSHR0cENsaWVudC5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2F1dGhvcml6YXRpb24vcmVtb3RlLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvYXV0aG9yaXphdGlvbi9zZXJ2aWNlLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvcGxhdGZvcm0vY2FwYWJpbGl0aWVzLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvY29ubmVjdGlvbi9jYXRhbG9nLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvY29ubmVjdGlvbi9jcmVkZW50aWFsU3RvcmUudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NsaWVudC1ydW50aW1lL3NyYy9jb25uZWN0aW9uL2Vycm9ycy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2Nvbm5lY3Rpb24vcHVsbFJlcXVlc3RSb3V0aW5nUGVybWlzc2lvbnMudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NsaWVudC1ydW50aW1lL3NyYy9jb25uZWN0aW9uL21vZGVsLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvY29ubmVjdGlvbi9wcm9maWxlU3RvcmUudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NsaWVudC1ydW50aW1lL3NyYy9jb25uZWN0aW9uL2NvbXBhdGliaWxpdHkudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NsaWVudC1ydW50aW1lL3NyYy9jb25uZWN0aW9uL3JvdXRlcy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2Vudmlyb25tZW50L2Rlc2NyaXB0b3IudHMiXQ==