@thinkhive/sdk 3.1.0 → 3.3.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.
@@ -5,21 +5,46 @@
5
5
  * Centralized HTTP client with authentication and error handling
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ThinkHiveValidationError = exports.ThinkHiveApiError = void 0;
8
+ exports.IpWhitelistError = exports.RateLimitError = exports.AgentScopeError = exports.PermissionDeniedError = exports.ThinkHiveValidationError = exports.ThinkHiveApiError = exports.ThinkHiveError = void 0;
9
9
  exports.apiRequest = apiRequest;
10
10
  exports.apiRequestWithData = apiRequestWithData;
11
11
  const config_1 = require("./config");
12
+ // ============================================================================
13
+ // RETRY CONFIGURATION
14
+ // ============================================================================
15
+ const MAX_RETRIES = 3;
16
+ const INITIAL_BACKOFF = 500; // ms
17
+ const MAX_BACKOFF = 8000; // ms
18
+ const RETRYABLE_CODES = new Set([408, 429, 500, 502, 503, 504]);
19
+ /**
20
+ * Calculate backoff time for retry attempt
21
+ */
22
+ function calculateBackoff(attempt, retryAfter) {
23
+ if (retryAfter !== undefined) {
24
+ return Math.min(retryAfter * 1000, MAX_BACKOFF); // Convert seconds to ms
25
+ }
26
+ const backoff = INITIAL_BACKOFF * Math.pow(2, attempt);
27
+ return Math.min(backoff, MAX_BACKOFF);
28
+ }
12
29
  /**
13
- * Make an authenticated API request
30
+ * Sleep for a given number of milliseconds
31
+ */
32
+ function sleep(ms) {
33
+ return new Promise((resolve) => setTimeout(resolve, ms));
34
+ }
35
+ /**
36
+ * Make an authenticated API request with retry logic
14
37
  */
15
38
  async function apiRequest(path, options = {}) {
16
39
  const config = (0, config_1.getConfig)();
17
- const { method = 'GET', body, headers = {}, apiVersion } = options;
40
+ const { method = 'GET', body, headers = {}, apiVersion, maxRetries, timeout } = options;
18
41
  const version = apiVersion || config.apiVersion;
19
42
  const url = `${config.endpoint}/api/${version}${path}`;
43
+ const retries = maxRetries ?? MAX_RETRIES;
44
+ const requestTimeout = timeout ?? 30000; // Default 30s
20
45
  const requestHeaders = {
21
46
  'Content-Type': 'application/json',
22
- 'X-SDK-Version': '3.0.0',
47
+ 'X-SDK-Version': '3.2.0',
23
48
  ...headers,
24
49
  };
25
50
  if (config.apiKey) {
@@ -29,32 +54,108 @@ async function apiRequest(path, options = {}) {
29
54
  requestHeaders['X-Agent-ID'] = config.agentId;
30
55
  }
31
56
  (0, config_1.debugLog)(`${method} ${url}`);
32
- const response = await fetch(url, {
33
- method,
34
- headers: requestHeaders,
35
- body: body ? JSON.stringify(body) : undefined,
36
- });
37
- // Handle deprecation warnings
38
- if (response.headers.has('Deprecation')) {
39
- const sunset = response.headers.get('Sunset');
40
- const link = response.headers.get('Link');
41
- console.warn(`[ThinkHive] Deprecation warning: This endpoint is deprecated.` +
42
- (sunset ? ` Sunset: ${sunset}` : '') +
43
- (link ? ` Successor: ${link}` : ''));
44
- }
45
- if (!response.ok) {
46
- const errorText = await response.text();
47
- let errorData = {};
57
+ let lastError = null;
58
+ for (let attempt = 0; attempt <= retries; attempt++) {
48
59
  try {
49
- errorData = JSON.parse(errorText);
60
+ // Create abort controller for timeout
61
+ const controller = new AbortController();
62
+ const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
63
+ let response;
64
+ try {
65
+ response = await fetch(url, {
66
+ method,
67
+ headers: requestHeaders,
68
+ body: body ? JSON.stringify(body) : undefined,
69
+ signal: controller.signal,
70
+ });
71
+ }
72
+ finally {
73
+ clearTimeout(timeoutId);
74
+ }
75
+ // Handle deprecation warnings
76
+ if (response.headers.has('Deprecation')) {
77
+ const sunset = response.headers.get('Sunset');
78
+ const link = response.headers.get('Link');
79
+ console.warn(`[ThinkHive] Deprecation warning: This endpoint is deprecated.` +
80
+ (sunset ? ` Sunset: ${sunset}` : '') +
81
+ (link ? ` Successor: ${link}` : ''));
82
+ }
83
+ // Check if response is retryable
84
+ if (RETRYABLE_CODES.has(response.status) && attempt < retries) {
85
+ // Get Retry-After header if present (for 429 responses)
86
+ let retryAfter;
87
+ if (response.status === 429) {
88
+ const retryAfterHeader = response.headers.get('Retry-After');
89
+ if (retryAfterHeader) {
90
+ retryAfter = parseFloat(retryAfterHeader);
91
+ if (isNaN(retryAfter)) {
92
+ retryAfter = undefined;
93
+ }
94
+ }
95
+ }
96
+ const backoff = calculateBackoff(attempt, retryAfter);
97
+ (0, config_1.debugLog)(`Retrying after ${backoff}ms (attempt ${attempt + 1}/${retries})`);
98
+ await sleep(backoff);
99
+ continue;
100
+ }
101
+ if (!response.ok) {
102
+ const errorText = await response.text();
103
+ let errorData = {};
104
+ try {
105
+ errorData = JSON.parse(errorText);
106
+ }
107
+ catch {
108
+ errorData = { message: errorText };
109
+ }
110
+ // Handle rate limit specifically
111
+ if (response.status === 429) {
112
+ const retryAfterHeader = response.headers.get('Retry-After');
113
+ const retryAfter = retryAfterHeader ? parseFloat(retryAfterHeader) * 1000 : 60000;
114
+ throw new RateLimitError(retryAfter);
115
+ }
116
+ throw new ThinkHiveApiError(errorData.message || `HTTP ${response.status}`, response.status, errorData.code);
117
+ }
118
+ return response.json();
50
119
  }
51
- catch {
52
- errorData = { message: errorText };
120
+ catch (error) {
121
+ // Handle abort (timeout)
122
+ if (error instanceof Error && error.name === 'AbortError') {
123
+ lastError = new ThinkHiveApiError(`Request timed out after ${requestTimeout}ms`, 408);
124
+ if (attempt < retries) {
125
+ const backoff = calculateBackoff(attempt);
126
+ (0, config_1.debugLog)(`Request timed out, retrying after ${backoff}ms (attempt ${attempt + 1}/${retries})`);
127
+ await sleep(backoff);
128
+ continue;
129
+ }
130
+ throw lastError;
131
+ }
132
+ // Handle network errors (TypeError from fetch)
133
+ if (error instanceof TypeError) {
134
+ lastError = new ThinkHiveApiError(`Network error: ${error.message}`, 503);
135
+ if (attempt < retries) {
136
+ const backoff = calculateBackoff(attempt);
137
+ (0, config_1.debugLog)(`Network error, retrying after ${backoff}ms (attempt ${attempt + 1}/${retries})`);
138
+ await sleep(backoff);
139
+ continue;
140
+ }
141
+ throw lastError;
142
+ }
143
+ // Re-throw ThinkHive errors (non-retryable)
144
+ if (error instanceof ThinkHiveError) {
145
+ throw error;
146
+ }
147
+ // Unknown error
148
+ lastError = error instanceof Error ? error : new Error(String(error));
149
+ if (attempt < retries) {
150
+ const backoff = calculateBackoff(attempt);
151
+ await sleep(backoff);
152
+ continue;
153
+ }
154
+ throw new ThinkHiveApiError(`Request failed: ${lastError.message}`, 500);
53
155
  }
54
- const error = new ThinkHiveApiError(errorData.message || `HTTP ${response.status}`, response.status, errorData.code);
55
- throw error;
56
156
  }
57
- return response.json();
157
+ // Should not reach here, but just in case
158
+ throw lastError || new ThinkHiveApiError('Request failed after all retries', 500);
58
159
  }
59
160
  /**
60
161
  * Make an API request and extract data from response wrapper
@@ -69,21 +170,111 @@ async function apiRequestWithData(path, options = {}) {
69
170
  // ============================================================================
70
171
  // ERRORS
71
172
  // ============================================================================
72
- class ThinkHiveApiError extends Error {
73
- constructor(message, statusCode, code) {
173
+ /**
174
+ * Base error class for ThinkHive SDK errors
175
+ */
176
+ class ThinkHiveError extends Error {
177
+ constructor(message, code, statusCode, details) {
74
178
  super(message);
75
- this.statusCode = statusCode;
76
179
  this.code = code;
180
+ this.statusCode = statusCode;
181
+ this.details = details;
182
+ this.name = 'ThinkHiveError';
183
+ }
184
+ }
185
+ exports.ThinkHiveError = ThinkHiveError;
186
+ /**
187
+ * API request error - returned from ThinkHive server
188
+ */
189
+ class ThinkHiveApiError extends ThinkHiveError {
190
+ constructor(message, statusCode, code) {
191
+ super(message, code || 'API_ERROR', statusCode);
77
192
  this.name = 'ThinkHiveApiError';
78
193
  }
79
194
  }
80
195
  exports.ThinkHiveApiError = ThinkHiveApiError;
81
- class ThinkHiveValidationError extends Error {
196
+ /**
197
+ * Validation error - invalid input parameters
198
+ */
199
+ class ThinkHiveValidationError extends ThinkHiveError {
82
200
  constructor(message, field) {
83
- super(message);
201
+ super(message, 'VALIDATION_ERROR', 400, field ? { field } : undefined);
84
202
  this.field = field;
85
203
  this.name = 'ThinkHiveValidationError';
86
204
  }
87
205
  }
88
206
  exports.ThinkHiveValidationError = ThinkHiveValidationError;
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFvQkgsZ0NBMkRDO0FBS0QsZ0RBYUM7QUEvRkQscUNBQStDO0FBZS9DOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFVBQVUsQ0FDOUIsSUFBWSxFQUNaLFVBQTBCLEVBQUU7SUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBUyxHQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRW5FLE1BQU0sT0FBTyxHQUFHLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ2hELE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsUUFBUSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFFdkQsTUFBTSxjQUFjLEdBQTJCO1FBQzdDLGNBQWMsRUFBRSxrQkFBa0I7UUFDbEMsZUFBZSxFQUFFLE9BQU87UUFDeEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RCxDQUFDO1NBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUEsaUJBQVEsRUFBQyxHQUFHLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxNQUFNO1FBQ04sT0FBTyxFQUFF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ZW50XG4gKlxuICogQ2VudHJhbGl6ZWQgSFRUUCBjbGllbnQgd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqL1xuXG5pbXBvcnQgeyBnZXRDb25maWcsIGRlYnVnTG9nIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIVFRQIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zIHtcbiAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdERUxFVEUnO1xuICBib2R5PzogdW5rbm93bjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBPdmVycmlkZSBBUEkgdmVyc2lvbiBmb3IgdGhpcyByZXF1ZXN0ICovXG4gIGFwaVZlcnNpb24/OiAndjEnIHwgJ3YzJztcbn1cblxuLyoqXG4gKiBNYWtlIGFuIGF1dGhlbnRpY2F0ZWQgQVBJIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3Q8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IG1ldGhvZCA9ICdHRVQnLCBib2R5LCBoZWFkZXJzID0ge30sIGFwaVZlcnNpb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdmVyc2lvbiA9IGFwaVZlcnNpb24gfHwgY29uZmlnLmFwaVZlcnNpb247XG4gIGNvbnN0IHVybCA9IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpLyR7dmVyc2lvbn0ke3BhdGh9YDtcblxuICBjb25zdCByZXF1ZXN0SGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICdYLVNESy1WZXJzaW9uJzogJzMuMC4wJyxcbiAgICAuLi5oZWFkZXJzLFxuICB9O1xuXG4gIGlmIChjb25maWcuYXBpS2V5KSB7XG4gICAgcmVxdWVzdEhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXBpS2V5fWA7XG4gIH0gZWxzZSBpZiAoY29uZmlnLmFnZW50SWQpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1snWC1BZ2VudC1JRCddID0gY29uZmlnLmFnZW50SWQ7XG4gIH1cblxuICBkZWJ1Z0xvZyhgJHttZXRob2R9ICR7dXJsfWApO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kLFxuICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIGJvZHk6IGJvZHkgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmhhcygnRGVwcmVjYXRpb24nKSkge1xuICAgIGNvbnN0IHN1bnNldCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTdW5zZXQnKTtcbiAgICBjb25zdCBsaW5rID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xpbmsnKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW1RoaW5rSGl2ZV0gRGVwcmVjYXRpb24gd2FybmluZzogVGhpcyBlbmRwb2ludCBpcyBkZXByZWNhdGVkLmAgK1xuICAgICAgICAoc3Vuc2V0ID8gYCBTdW5zZXQ6ICR7c3Vuc2V0fWAgOiAnJykgK1xuICAgICAgICAobGluayA/IGAgU3VjY2Vzc29yOiAke2xpbmt9YCA6ICcnKVxuICAgICk7XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGxldCBlcnJvckRhdGE6IHsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IHN0cmluZyB9ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIGVycm9yRGF0YSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGVycm9yRGF0YSA9IHsgbWVzc2FnZTogZXJyb3JUZXh0IH07XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoXG4gICAgICBlcnJvckRhdGEubWVzc2FnZSB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gLFxuICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgZXJyb3JEYXRhLmNvZGVcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gQVBJIHJlcXVlc3QgYW5kIGV4dHJhY3QgZGF0YSBmcm9tIHJlc3BvbnNlIHdyYXBwZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3RXaXRoRGF0YTxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPFQ+PihwYXRoLCBvcHRpb25zKTtcbiAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKFxuICAgICAgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgNTAwLFxuICAgICAgcmVzcG9uc2UuZXJyb3I/LmNvZGVcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5kYXRhIGFzIFQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVSUk9SU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY2xhc3MgVGhpbmtIaXZlQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUaGlua0hpdmVBcGlFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZD86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuIl19
207
+ /**
208
+ * Permission denied error - API key lacks required permissions
209
+ * @example
210
+ * ```typescript
211
+ * try {
212
+ * await thinkHive.traces.create(...);
213
+ * } catch (error) {
214
+ * if (error instanceof PermissionDeniedError) {
215
+ * console.log('API key needs write permission');
216
+ * }
217
+ * }
218
+ * ```
219
+ */
220
+ class PermissionDeniedError extends ThinkHiveError {
221
+ constructor(message, details) {
222
+ super(message, 'PERMISSION_DENIED', 403, details);
223
+ this.name = 'PermissionDeniedError';
224
+ }
225
+ }
226
+ exports.PermissionDeniedError = PermissionDeniedError;
227
+ /**
228
+ * Agent scope violation error - API key not authorized for this agent
229
+ * @example
230
+ * ```typescript
231
+ * // Create key scoped to specific agents
232
+ * const key = await thinkHive.apiKeys.create({
233
+ * name: 'Agent A Key',
234
+ * allowedAgentIds: ['agent-a-id']
235
+ * });
236
+ *
237
+ * // Attempting to use for Agent B will throw AgentScopeError
238
+ * ```
239
+ */
240
+ class AgentScopeError extends ThinkHiveError {
241
+ constructor(agentId, allowedAgents) {
242
+ super(`API key not authorized for agent ${agentId}`, 'AGENT_SCOPE_VIOLATION', 403, { agentId, allowedAgents });
243
+ this.name = 'AgentScopeError';
244
+ }
245
+ }
246
+ exports.AgentScopeError = AgentScopeError;
247
+ /**
248
+ * Rate limit exceeded error
249
+ * @example
250
+ * ```typescript
251
+ * try {
252
+ * await thinkHive.traces.create(...);
253
+ * } catch (error) {
254
+ * if (error instanceof RateLimitError) {
255
+ * // Wait and retry
256
+ * await sleep(error.retryAfter);
257
+ * await thinkHive.traces.create(...);
258
+ * }
259
+ * }
260
+ * ```
261
+ */
262
+ class RateLimitError extends ThinkHiveError {
263
+ constructor(retryAfter) {
264
+ super(`Rate limit exceeded. Retry after ${retryAfter}ms`, 'RATE_LIMIT_EXCEEDED', 429, { retryAfter });
265
+ this.retryAfter = retryAfter;
266
+ this.name = 'RateLimitError';
267
+ }
268
+ }
269
+ exports.RateLimitError = RateLimitError;
270
+ /**
271
+ * IP whitelist violation error
272
+ */
273
+ class IpWhitelistError extends ThinkHiveError {
274
+ constructor(clientIp) {
275
+ super('Request IP address is not authorized for this API key', 'IP_WHITELIST_VIOLATION', 403, { clientIp });
276
+ this.name = 'IpWhitelistError';
277
+ }
278
+ }
279
+ exports.IpWhitelistError = IpWhitelistError;
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFtREgsZ0NBZ0pDO0FBS0QsZ0RBYUM7QUFuTkQscUNBQStDO0FBRy9DLCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRS9FLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUs7QUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE9BQWUsRUFBRSxVQUFtQjtJQUM1RCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUMzRSxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQWtCRDs7R0FFRztBQUNJLEtB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QUF1RCxFQUN2RCx3QkFBd0IsRUFDeEIsR0FBRyxFQUNILEVBQUUsUUFBUSxFQUFFLENBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBVkQsNENBVUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaW5rSGl2ZSBTREsgdjMuMCAtIEhUVFAgQ2xpZW50XG4gKlxuICogQ2VudHJhbGl6ZWQgSFRUUCBjbGllbnQgd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqL1xuXG5pbXBvcnQgeyBnZXRDb25maWcsIGRlYnVnTG9nIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRVRSWSBDT05GSUdVUkFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IE1BWF9SRVRSSUVTID0gMztcbmNvbnN0IElOSVRJQUxfQkFDS09GRiA9IDUwMDsgLy8gbXNcbmNvbnN0IE1BWF9CQUNLT0ZGID0gODAwMDsgLy8gbXNcbmNvbnN0IFJFVFJZQUJMRV9DT0RFUyA9IG5ldyBTZXQoWzQwOCwgNDI5LCA1MDAsIDUwMiwgNTAzLCA1MDRdKTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgYmFja29mZiB0aW1lIGZvciByZXRyeSBhdHRlbXB0XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdDogbnVtYmVyLCByZXRyeUFmdGVyPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBNYXRoLm1pbihyZXRyeUFmdGVyICogMTAwMCwgTUFYX0JBQ0tPRkYpOyAvLyBDb252ZXJ0IHNlY29uZHMgdG8gbXNcbiAgfVxuICBjb25zdCBiYWNrb2ZmID0gSU5JVElBTF9CQUNLT0ZGICogTWF0aC5wb3coMiwgYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLm1pbihiYWNrb2ZmLCBNQVhfQkFDS09GRik7XG59XG5cbi8qKlxuICogU2xlZXAgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICovXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIVFRQIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zIHtcbiAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJztcbiAgYm9keT86IHVua25vd247XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogT3ZlcnJpZGUgQVBJIHZlcnNpb24gZm9yIHRoaXMgcmVxdWVzdCAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2MicgfCAndjMnO1xuICAvKiogT3ZlcnJpZGUgbWF4IHJldHJpZXMgZm9yIHRoaXMgcmVxdWVzdCAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXV0aGVudGljYXRlZCBBUEkgcmVxdWVzdCB3aXRoIHJldHJ5IGxvZ2ljXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlSZXF1ZXN0PFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBtZXRob2QgPSAnR0VUJywgYm9keSwgaGVhZGVycyA9IHt9LCBhcGlWZXJzaW9uLCBtYXhSZXRyaWVzLCB0aW1lb3V0IH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBhcGlWZXJzaW9uIHx8IGNvbmZpZy5hcGlWZXJzaW9uO1xuICBjb25zdCB1cmwgPSBgJHtjb25maWcuZW5kcG9pbnR9L2FwaS8ke3ZlcnNpb259JHtwYXRofWA7XG4gIGNvbnN0IHJldHJpZXMgPSBtYXhSZXRyaWVzID8/IE1BWF9SRVRSSUVTO1xuICBjb25zdCByZXF1ZXN0VGltZW91dCA9IHRpbWVvdXQgPz8gMzAwMDA7IC8vIERlZmF1bHQgMzBzXG5cbiAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAnWC1TREstVmVyc2lvbic6ICczLjIuMCcsXG4gICAgLi4uaGVhZGVycyxcbiAgfTtcblxuICBpZiAoY29uZmlnLmFwaUtleSkge1xuICAgIHJlcXVlc3RIZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y29uZmlnLmFwaUtleX1gO1xuICB9IGVsc2UgaWYgKGNvbmZpZy5hZ2VudElkKSB7XG4gICAgcmVxdWVzdEhlYWRlcnNbJ1gtQWdlbnQtSUQnXSA9IGNvbmZpZy5hZ2VudElkO1xuICB9XG5cbiAgZGVidWdMb2coYCR7bWV0aG9kfSAke3VybH1gKTtcblxuICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IG51bGwgPSBudWxsO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IHJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYWJvcnQgY29udHJvbGxlciBmb3IgdGltZW91dFxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCByZXF1ZXN0VGltZW91dCk7XG5cbiAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICBib2R5OiBib2R5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVycy5oYXMoJ0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc3Qgc3Vuc2V0ID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1N1bnNldCcpO1xuICAgICAgICBjb25zdCBsaW5rID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xpbmsnKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbVGhpbmtIaXZlXSBEZXByZWNhdGlvbiB3YXJuaW5nOiBUaGlzIGVuZHBvaW50IGlzIGRlcHJlY2F0ZWQuYCArXG4gICAgICAgICAgICAoc3Vuc2V0ID8gYCBTdW5zZXQ6ICR7c3Vuc2V0fWAgOiAnJykgK1xuICAgICAgICAgICAgKGxpbmsgPyBgIFN1Y2Nlc3NvcjogJHtsaW5rfWAgOiAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgaXMgcmV0cnlhYmxlXG4gICAgICBpZiAoUkVUUllBQkxFX0NPREVTLmhhcyhyZXNwb25zZS5zdGF0dXMpICYmIGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgIC8vIEdldCBSZXRyeS1BZnRlciBoZWFkZXIgaWYgcHJlc2VudCAoZm9yIDQyOSByZXNwb25zZXMpXG4gICAgICAgIGxldCByZXRyeUFmdGVyOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnUmV0cnktQWZ0ZXInKTtcbiAgICAgICAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgICAgICAgcmV0cnlBZnRlciA9IHBhcnNlRmxvYXQocmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocmV0cnlBZnRlcikpIHtcbiAgICAgICAgICAgICAgcmV0cnlBZnRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0LCByZXRyeUFmdGVyKTtcbiAgICAgICAgZGVidWdMb2coYFJldHJ5aW5nIGFmdGVyICR7YmFja29mZn1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3JldHJpZXN9KWApO1xuICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBsZXQgZXJyb3JEYXRhOiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVycm9yRGF0YSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgZXJyb3JEYXRhID0geyBtZXNzYWdlOiBlcnJvclRleHQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSByYXRlIGxpbWl0IHNwZWNpZmljYWxseVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IHJldHJ5QWZ0ZXJIZWFkZXIgPyBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJIZWFkZXIpICogMTAwMCA6IDYwMDAwO1xuICAgICAgICAgIHRocm93IG5ldyBSYXRlTGltaXRFcnJvcihyZXRyeUFmdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUaGlua0hpdmVBcGlFcnJvcihcbiAgICAgICAgICBlcnJvckRhdGEubWVzc2FnZSB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gLFxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBlcnJvckRhdGEuY29kZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpIGFzIFByb21pc2U8VD47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBhYm9ydCAodGltZW91dClcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBsYXN0RXJyb3IgPSBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoYFJlcXVlc3QgdGltZWQgb3V0IGFmdGVyICR7cmVxdWVzdFRpbWVvdXR9bXNgLCA0MDgpO1xuICAgICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0KTtcbiAgICAgICAgICBkZWJ1Z0xvZyhgUmVxdWVzdCB0aW1lZCBvdXQsIHJldHJ5aW5nIGFmdGVyICR7YmFja29mZn1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3JldHJpZXN9KWApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIG5ldHdvcmsgZXJyb3JzIChUeXBlRXJyb3IgZnJvbSBmZXRjaClcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoYE5ldHdvcmsgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCA1MDMpO1xuICAgICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0KTtcbiAgICAgICAgICBkZWJ1Z0xvZyhgTmV0d29yayBlcnJvciwgcmV0cnlpbmcgYWZ0ZXIgJHtiYWNrb2ZmfW1zIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7cmV0cmllc30pYCk7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBSZS10aHJvdyBUaGlua0hpdmUgZXJyb3JzIChub24tcmV0cnlhYmxlKVxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGhpbmtIaXZlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIFVua25vd24gZXJyb3JcbiAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgICAgIGlmIChhdHRlbXB0IDwgcmV0cmllcykge1xuICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0KTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKGBSZXF1ZXN0IGZhaWxlZDogJHtsYXN0RXJyb3IubWVzc2FnZX1gLCA1MDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNob3VsZCBub3QgcmVhY2ggaGVyZSwgYnV0IGp1c3QgaW4gY2FzZVxuICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKCdSZXF1ZXN0IGZhaWxlZCBhZnRlciBhbGwgcmV0cmllcycsIDUwMCk7XG59XG5cbi8qKlxuICogTWFrZSBhbiBBUEkgcmVxdWVzdCBhbmQgZXh0cmFjdCBkYXRhIGZyb20gcmVzcG9uc2Ugd3JhcHBlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpUmVxdWVzdFdpdGhEYXRhPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8VD4+KHBhdGgsIG9wdGlvbnMpO1xuICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoXG4gICAgICByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICA1MDAsXG4gICAgICByZXNwb25zZS5lcnJvcj8uY29kZVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgYXMgVDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVJST1JTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQmFzZSBlcnJvciBjbGFzcyBmb3IgVGhpbmtIaXZlIFNESyBlcnJvcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZT86IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUaGlua0hpdmVFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBlcnJvciAtIHJldHVybmVkIGZyb20gVGhpbmtIaXZlIHNlcnZlclxuICovXG5leHBvcnQgY2xhc3MgVGhpbmtIaXZlQXBpRXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgY29kZT86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjb2RlIHx8ICdBUElfRVJST1InLCBzdGF0dXNDb2RlKTtcbiAgICB0aGlzLm5hbWUgPSAnVGhpbmtIaXZlQXBpRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGlvbiBlcnJvciAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY2xhc3MgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UsICdWQUxJREFUSU9OX0VSUk9SJywgNDAwLCBmaWVsZCA/IHsgZmllbGQgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1RoaW5rSGl2ZVZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBQZXJtaXNzaW9uIGRlbmllZCBlcnJvciAtIEFQSSBrZXkgbGFja3MgcmVxdWlyZWQgcGVybWlzc2lvbnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cnkge1xuICogICBhd2FpdCB0aGlua0hpdmUudHJhY2VzLmNyZWF0ZSguLi4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUGVybWlzc2lvbkRlbmllZEVycm9yKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0FQSSBrZXkgbmVlZHMgd3JpdGUgcGVybWlzc2lvbicpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25EZW5pZWRFcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnUEVSTUlTU0lPTl9ERU5JRUQnLCA0MDMsIGRldGFpbHMpO1xuICAgIHRoaXMubmFtZSA9ICdQZXJtaXNzaW9uRGVuaWVkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogQWdlbnQgc2NvcGUgdmlvbGF0aW9uIGVycm9yIC0gQVBJIGtleSBub3QgYXV0aG9yaXplZCBmb3IgdGhpcyBhZ2VudFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBrZXkgc2NvcGVkIHRvIHNwZWNpZmljIGFnZW50c1xuICogY29uc3Qga2V5ID0gYXdhaXQgdGhpbmtIaXZlLmFwaUtleXMuY3JlYXRlKHtcbiAqICAgbmFtZTogJ0FnZW50IEEgS2V5JyxcbiAqICAgYWxsb3dlZEFnZW50SWRzOiBbJ2FnZW50LWEtaWQnXVxuICogfSk7XG4gKlxuICogLy8gQXR0ZW1wdGluZyB0byB1c2UgZm9yIEFnZW50IEIgd2lsbCB0aHJvdyBBZ2VudFNjb3BlRXJyb3JcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQWdlbnRTY29wZUVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgYWxsb3dlZEFnZW50czogc3RyaW5nW11cbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBgQVBJIGtleSBub3QgYXV0aG9yaXplZCBmb3IgYWdlbnQgJHthZ2VudElkfWAsXG4gICAgICAnQUdFTlRfU0NPUEVfVklPTEFUSU9OJyxcbiAgICAgIDQwMyxcbiAgICAgIHsgYWdlbnRJZCwgYWxsb3dlZEFnZW50cyB9XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnQWdlbnRTY29wZUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFJhdGUgbGltaXQgZXhjZWVkZWQgZXJyb3JcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cnkge1xuICogICBhd2FpdCB0aGlua0hpdmUudHJhY2VzLmNyZWF0ZSguLi4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmF0ZUxpbWl0RXJyb3IpIHtcbiAqICAgICAvLyBXYWl0IGFuZCByZXRyeVxuICogICAgIGF3YWl0IHNsZWVwKGVycm9yLnJldHJ5QWZ0ZXIpO1xuICogICAgIGF3YWl0IHRoaW5rSGl2ZS50cmFjZXMuY3JlYXRlKC4uLik7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0RXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSByZXRyeUFmdGVyOiBudW1iZXJcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmF0ZSBsaW1pdCBleGNlZWRlZC4gUmV0cnkgYWZ0ZXIgJHtyZXRyeUFmdGVyfW1zYCxcbiAgICAgICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgIDQyOSxcbiAgICAgIHsgcmV0cnlBZnRlciB9XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnUmF0ZUxpbWl0RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogSVAgd2hpdGVsaXN0IHZpb2xhdGlvbiBlcnJvclxuICovXG5leHBvcnQgY2xhc3MgSXBXaGl0ZWxpc3RFcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IoY2xpZW50SXA6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgJ1JlcXVlc3QgSVAgYWRkcmVzcyBpcyBub3QgYXV0aG9yaXplZCBmb3IgdGhpcyBBUEkga2V5JyxcbiAgICAgICdJUF9XSElURUxJU1RfVklPTEFUSU9OJyxcbiAgICAgIDQwMyxcbiAgICAgIHsgY2xpZW50SXAgfVxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0lwV2hpdGVsaXN0RXJyb3InO1xuICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@
2
2
  * ThinkHive SDK v3.0 - Configuration
3
3
  */
4
4
  import type { InitOptions, Framework } from './types';
5
- export declare const SDK_VERSION = "3.0.0";
5
+ export declare const SDK_VERSION = "3.3.0";
6
6
  export declare const DEFAULT_ENDPOINT = "https://thinkhivemind-h25z7pvd3q-uc.a.run.app";
7
7
  export declare const DEFAULT_SERVICE_NAME = "my-ai-agent";
8
8
  export interface ResolvedConfig {
@@ -12,7 +12,7 @@ exports.debugLog = debugLog;
12
12
  // ============================================================================
13
13
  // CONSTANTS
14
14
  // ============================================================================
15
- exports.SDK_VERSION = '3.0.0';
15
+ exports.SDK_VERSION = '3.3.0';
16
16
  exports.DEFAULT_ENDPOINT = 'https://thinkhivemind-h25z7pvd3q-uc.a.run.app';
17
17
  exports.DEFAULT_SERVICE_NAME = 'my-ai-agent';
18
18
  let config = null;
@@ -73,4 +73,4 @@ function debugLog(...args) {
73
73
  console.log('[ThinkHive]', ...args);
74
74
  }
75
75
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBcUNILGdDQXVCQztBQU1ELDhCQUtDO0FBS0Qsc0NBRUM7QUFLRCxrQ0FHQztBQUtELDRCQUlDO0FBM0ZELCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN0QixRQUFBLGdCQUFnQixHQUFHLCtDQUErQyxDQUFDO0FBQ25FLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBaUJsRCxJQUFJLE1BQU0sR0FBMEIsSUFBSSxDQUFDO0FBQ3pDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxVQUF1QixFQUFFO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztJQUV4RSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUc7UUFDUCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksd0JBQWdCO1FBQ2hGLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksNEJBQW9CO1FBQzlGLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUs7UUFDL0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ3pELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDN0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTtLQUN2QyxDQUFDO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVc7SUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDdEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsSUFBZTtJQUN6QyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJbml0T3B0aW9ucywgRnJhbWV3b3JrIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlNUQU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnMy4wLjAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRU5EUE9JTlQgPSAnaHR0cHM6Ly90aGlua2hpdmVtaW5kLWgyNXo3cHZkM3EtdWMuYS5ydW4uYXBwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9ICdteS1haS1hZ2VudCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdMT0JBTCBDT05GSUcgU1RBVEVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZENvbmZpZyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGF1dG9JbnN0cnVtZW50OiBib29sZWFuO1xuICBmcmFtZXdvcmtzOiBGcmFtZXdvcmtbXTtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGFwaVZlcnNpb246ICd2MScgfCAndjMnO1xufVxuXG5sZXQgY29uZmlnOiBSZXNvbHZlZENvbmZpZyB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJRyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZnJvbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29uZmlnKG9wdGlvbnM6IEluaXRPcHRpb25zID0ge30pOiBSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BUElfS0VZIHx8ICcnO1xuICBjb25zdCBhZ2VudElkID0gb3B0aW9ucy5hZ2VudElkIHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BR0VOVF9JRCB8fCAnJztcblxuICBpZiAoIWFwaUtleSAmJiAhYWdlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdFaXRoZXIgYXBpS2V5IG9yIGFnZW50SWQgbXVzdCBiZSBwcm92aWRlZCAob3Igc2V0IFRISU5LSElWRV9BUElfS0VZIGVudiB2YXIpJ1xuICAgICk7XG4gIH1cblxuICBjb25maWcgPSB7XG4gICAgYXBpS2V5LFxuICAgIGFnZW50SWQsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX0VORFBPSU5UIHx8IERFRkFVTFRfRU5EUE9JTlQsXG4gICAgc2VydmljZU5hbWU6IG9wdGlvbnMuc2VydmljZU5hbWUgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX1NFUlZJQ0VfTkFNRSB8fCBERUZBVUxUX1NFUlZJQ0VfTkFNRSxcbiAgICBhdXRvSW5zdHJ1bWVudDogb3B0aW9ucy5hdXRvSW5zdHJ1bWVudCA/PyBmYWxzZSxcbiAgICBmcmFtZXdvcmtzOiBvcHRpb25zLmZyYW1ld29ya3MgfHwgWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gICAgZGVidWc6IG9wdGlvbnMuZGVidWcgPz8gZmFsc2UsXG4gICAgYXBpVmVyc2lvbjogb3B0aW9ucy5hcGlWZXJzaW9uID8/ICd2MycsXG4gIH07XG5cbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgaWYgbm90IGluaXRpYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogUmVzb2x2ZWRDb25maWcge1xuICBpZiAoIWNvbmZpZyB8fCAhaW5pdGlhbGl6ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaW5rSGl2ZSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIFNESyBpcyBpbml0aWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluaXRpYWxpemVkO1xufVxuXG4vKipcbiAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gKGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDb25maWcoKTogdm9pZCB7XG4gIGNvbmZpZyA9IG51bGw7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG59XG5cbi8qKlxuICogRGVidWcgbG9nIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWdMb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmIChjb25maWc/LmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coJ1tUaGlua0hpdmVdJywgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBcUNILGdDQXVCQztBQU1ELDhCQUtDO0FBS0Qsc0NBRUM7QUFLRCxrQ0FHQztBQUtELDRCQUlDO0FBM0ZELCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN0QixRQUFBLGdCQUFnQixHQUFHLCtDQUErQyxDQUFDO0FBQ25FLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBaUJsRCxJQUFJLE1BQU0sR0FBMEIsSUFBSSxDQUFDO0FBQ3pDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxVQUF1QixFQUFFO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztJQUV4RSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUc7UUFDUCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksd0JBQWdCO1FBQ2hGLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksNEJBQW9CO1FBQzlGLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUs7UUFDL0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ3pELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDN0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTtLQUN2QyxDQUFDO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVc7SUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDdEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsSUFBZTtJQUN6QyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJbml0T3B0aW9ucywgRnJhbWV3b3JrIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlNUQU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnMy4zLjAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRU5EUE9JTlQgPSAnaHR0cHM6Ly90aGlua2hpdmVtaW5kLWgyNXo3cHZkM3EtdWMuYS5ydW4uYXBwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9ICdteS1haS1hZ2VudCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdMT0JBTCBDT05GSUcgU1RBVEVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZENvbmZpZyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGF1dG9JbnN0cnVtZW50OiBib29sZWFuO1xuICBmcmFtZXdvcmtzOiBGcmFtZXdvcmtbXTtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGFwaVZlcnNpb246ICd2MScgfCAndjMnO1xufVxuXG5sZXQgY29uZmlnOiBSZXNvbHZlZENvbmZpZyB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJRyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZnJvbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29uZmlnKG9wdGlvbnM6IEluaXRPcHRpb25zID0ge30pOiBSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BUElfS0VZIHx8ICcnO1xuICBjb25zdCBhZ2VudElkID0gb3B0aW9ucy5hZ2VudElkIHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BR0VOVF9JRCB8fCAnJztcblxuICBpZiAoIWFwaUtleSAmJiAhYWdlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdFaXRoZXIgYXBpS2V5IG9yIGFnZW50SWQgbXVzdCBiZSBwcm92aWRlZCAob3Igc2V0IFRISU5LSElWRV9BUElfS0VZIGVudiB2YXIpJ1xuICAgICk7XG4gIH1cblxuICBjb25maWcgPSB7XG4gICAgYXBpS2V5LFxuICAgIGFnZW50SWQsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX0VORFBPSU5UIHx8IERFRkFVTFRfRU5EUE9JTlQsXG4gICAgc2VydmljZU5hbWU6IG9wdGlvbnMuc2VydmljZU5hbWUgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX1NFUlZJQ0VfTkFNRSB8fCBERUZBVUxUX1NFUlZJQ0VfTkFNRSxcbiAgICBhdXRvSW5zdHJ1bWVudDogb3B0aW9ucy5hdXRvSW5zdHJ1bWVudCA/PyBmYWxzZSxcbiAgICBmcmFtZXdvcmtzOiBvcHRpb25zLmZyYW1ld29ya3MgfHwgWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gICAgZGVidWc6IG9wdGlvbnMuZGVidWcgPz8gZmFsc2UsXG4gICAgYXBpVmVyc2lvbjogb3B0aW9ucy5hcGlWZXJzaW9uID8/ICd2MycsXG4gIH07XG5cbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgaWYgbm90IGluaXRpYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogUmVzb2x2ZWRDb25maWcge1xuICBpZiAoIWNvbmZpZyB8fCAhaW5pdGlhbGl6ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaW5rSGl2ZSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIFNESyBpcyBpbml0aWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluaXRpYWxpemVkO1xufVxuXG4vKipcbiAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gKGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDb25maWcoKTogdm9pZCB7XG4gIGNvbmZpZyA9IG51bGw7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG59XG5cbi8qKlxuICogRGVidWcgbG9nIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWdMb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmIChjb25maWc/LmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coJ1tUaGlua0hpdmVdJywgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
@@ -50,6 +50,15 @@ export interface RunOptions {
50
50
  ticketLinking?: TicketLinkingOptions;
51
51
  /** Custom metadata */
52
52
  metadata?: Record<string, unknown>;
53
+ /**
54
+ * Request evaluation when run is ingested.
55
+ * Overrides agent's auto_evaluate setting for this run.
56
+ *
57
+ * - true: Force evaluation on this run
58
+ * - false: Skip evaluation even if agent has auto_evaluate enabled
59
+ * - undefined: Use agent's auto_evaluate setting (default)
60
+ */
61
+ runEvaluation?: boolean;
53
62
  }
54
63
  export type RunOutcome = 'resolved' | 'escalated' | 'abandoned' | 'failed' | 'transferred' | 'pending';
55
64
  export interface ConversationMessage {
@@ -93,6 +102,11 @@ export interface TicketLinkingOptions {
93
102
  customFieldValue?: string;
94
103
  }
95
104
  export type LinkMethod = 'sdk_explicit' | 'zendesk_marker' | 'custom_field' | 'middleware_stamp' | 'session_match' | 'email_time_window' | 'manual';
105
+ /**
106
+ * Classification flags for categorizing trace issues
107
+ * Separate from binary outcome (success/failure)
108
+ */
109
+ export type TraceCustomFlag = 'hallucination' | 'policy_violation' | 'tone_issue' | 'retrieval_miss' | 'error';
96
110
  /**
97
111
  * Trace options (v2 format, converted to runs internally)
98
112
  * @deprecated Use RunOptions instead
@@ -104,8 +118,10 @@ export interface TraceOptions {
104
118
  agentResponse: string;
105
119
  /** User's detected intent */
106
120
  userIntent?: string;
107
- /** Outcome: success, failure, partial_success */
108
- outcome?: 'success' | 'failure' | 'partial_success';
121
+ /** Binary outcome: success or failure */
122
+ outcome?: 'success' | 'failure';
123
+ /** Classification flags for categorizing the issue type (hallucination, policy_violation, etc.) */
124
+ customFlags?: TraceCustomFlag[];
109
125
  /** Duration in milliseconds */
110
126
  duration?: number;
111
127
  /** Session ID for conversation tracking */
@@ -121,6 +137,15 @@ export interface TraceOptions {
121
137
  businessContext?: BusinessContext;
122
138
  /** Custom metadata */
123
139
  metadata?: Record<string, unknown>;
140
+ /**
141
+ * Request evaluation when trace is ingested.
142
+ * Overrides agent's auto_evaluate setting for this trace.
143
+ *
144
+ * - true: Force evaluation on this trace
145
+ * - false: Skip evaluation even if agent has auto_evaluate enabled
146
+ * - undefined: Use agent's auto_evaluate setting (default)
147
+ */
148
+ runEvaluation?: boolean;
124
149
  }
125
150
  export interface SpanData {
126
151
  id?: string;
@@ -5,4 +5,4 @@
5
5
  * Run-centric types with facts vs inferences and customer context snapshots
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ29yZSBUeXBlc1xuICpcbiAqIFJ1bi1jZW50cmljIHR5cGVzIHdpdGggZmFjdHMgdnMgaW5mZXJlbmNlcyBhbmQgY3VzdG9tZXIgY29udGV4dCBzbmFwc2hvdHNcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTklUIE9QVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIC8qKiBUaGlua0hpdmUgQVBJIGtleSAoc3RhcnRzIHdpdGggdGhfKSAqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBBZ2VudCBJRCAqL1xuICBhZ2VudElkPzogc3RyaW5nO1xuICAvKiogVGhpbmtIaXZlIEFQSSBlbmRwb2ludCAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFNlcnZpY2UgbmFtZSBmb3IgdHJhY2VzICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIGF1dG8taW5zdHJ1bWVudGF0aW9uICovXG4gIGF1dG9JbnN0cnVtZW50PzogYm9vbGVhbjtcbiAgLyoqIEZyYW1ld29ya3MgdG8gYXV0by1pbnN0cnVtZW50ICovXG4gIGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqIEFQSSB2ZXJzaW9uIChkZWZhdWx0OiAndjMnKSAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2Myc7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1ld29yayA9XG4gIHwgJ2xhbmdjaGFpbidcbiAgfCAnbGFuZ2dyYXBoJ1xuICB8ICdvcGVuYWknXG4gIHwgJ29wZW5haS1hc3Npc3RhbnRzJ1xuICB8ICdhbnRocm9waWMnXG4gIHwgJ2xsYW1haW5kZXgnXG4gIHwgJ244bidcbiAgfCAndm9pY2VmbG93JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUlVOIE9QVElPTlMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgcnVuICh2MyBhdG9taWMgdW5pdClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFnZW50IElEICovXG4gIGFnZW50SWQ6IHN0cmluZztcbiAgLyoqIFdoZW4gdGhlIHJ1biBzdGFydGVkICovXG4gIHN0YXJ0ZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBXaGVuIHRoZSBydW4gZW5kZWQgKi9cbiAgZW5kZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBSdW4gb3V0Y29tZSAqL1xuICBvdXRjb21lPzogUnVuT3V0Y29tZTtcbiAgLyoqIFJlYXNvbiBmb3IgdGhlIG91dGNvbWUgKi9cbiAgb3V0Y29tZVJlYXNvbj86IHN0cmluZztcbiAgLyoqIENvbnZlcnNhdGlvbiBtZXNzYWdlcyAqL1xuICBjb252ZXJzYXRpb25NZXNzYWdlczogQ29udmVyc2F0aW9uTWVzc2FnZVtdO1xuICAvKiogTW9kZWwgSUQgdXNlZCAqL1xuICBtb2RlbElkPzogc3RyaW5nO1xuICAvKiogUHJvbXB0IHZlcnNpb24gKi9cbiAgcHJvbXB0VmVyc2lvbj86IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b21lciBjb250ZXh0IHNuYXBzaG90IChBUlIsIGhlYWx0aCBBUyBPRiB0aGlzIHJ1bikgKi9cbiAgY3VzdG9tZXJDb250ZXh0PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIC8qKiBUaWNrZXQgbGlua2luZyBvcHRpb25zICovXG4gIHRpY2tldExpbmtpbmc/OiBUaWNrZXRMaW5raW5nT3B0aW9ucztcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgdHlwZSBSdW5PdXRjb21lID1cbiAgfCAncmVzb2x2ZWQnXG4gIHwgJ2VzY2FsYXRlZCdcbiAgfCAnYWJhbmRvbmVkJ1xuICB8ICdmYWlsZWQnXG4gIHwgJ3RyYW5zZmVycmVkJ1xuICB8ICdwZW5kaW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25NZXNzYWdlIHtcbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCcgfCAnc3lzdGVtJyB8ICd0b29sJztcbiAgY29udGVudDogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENVU1RPTUVSIENPTlRFWFQgU05BUFNIT1QgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEN1c3RvbWVyIGNvbnRleHQgY2FwdHVyZWQgQVMgT0YgdGhlIHJ1biB0aW1lIChub3QgY3VycmVudCB2YWx1ZXMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tZXJDb250ZXh0U25hcHNob3Qge1xuICAvKiogQ3VzdG9tZXIgYWNjb3VudCBJRCAqL1xuICBjdXN0b21lcklkPzogc3RyaW5nO1xuICAvKiogQVJSIGF0IHRoZSB0aW1lIG9mIHRoZSBydW4gKG5vdCBjdXJyZW50IEFSUikgKi9cbiAgYXJyPzogbnVtYmVyO1xuICAvKiogSGVhbHRoIHNjb3JlIGF0IHRoZSB0aW1lIG9mIHRoZSBydW4gKDAtMTAwKSAqL1xuICBoZWFsdGhTY29yZT86IG51bWJlcjtcbiAgLyoqIEN1c3RvbWVyIHNlZ21lbnQgKGUuZy4sICdlbnRlcnByaXNlJywgJ21pZC1tYXJrZXQnLCAnc21iJykgKi9cbiAgc2VnbWVudD86IHN0cmluZztcbiAgLyoqIFdoZW4gdGhpcyBzbmFwc2hvdCB3YXMgY2FwdHVyZWQgKi9cbiAgY2FwdHVyZWRBdD86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKHdpbGwgYmUgdmFsaWRhdGVkIGFnYWluc3Qgc2NoZW1hKSAqL1xuICBjdXN0b21GaWVsZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVElDS0VUIExJTktJTkcgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaXN0aWMgdGlja2V0IGxpbmtpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWNrZXRMaW5raW5nT3B0aW9ucyB7XG4gIC8qKiBMaW5rIG1ldGhvZCB0byB1c2UgKi9cbiAgbWV0aG9kOiBMaW5rTWV0aG9kO1xuICAvKiogVGlja2V0IElEIChmb3Igc2RrX2V4cGxpY2l0IG1ldGhvZCkgKi9cbiAgdGlja2V0SWQ/OiBzdHJpbmc7XG4gIC8qKiBFeHRlcm5hbCB0aWNrZXQgSUQgKGUuZy4sIFplbmRlc2sgdGlja2V0IElEKSAqL1xuICBleHRlcm5hbFRpY2tldElkPzogc3RyaW5nO1xuICAvKiogUGxhdGZvcm0gZm9yIGV4dGVybmFsIHRpY2tldCAqL1xuICBwbGF0Zm9ybT86ICd6ZW5kZXNrJyB8ICdpbnRlcmNvbScgfCAnc2FsZXNmb3JjZScgfCAnZnJlc2hkZXNrJztcbiAgLyoqIEN1c3RvbSBmaWVsZCBuYW1lIGZvciBsaW5raW5nICovXG4gIGN1c3RvbUZpZWxkTmFtZT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZCB2YWx1ZSAqL1xuICBjdXN0b21GaWVsZFZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW5rTWV0aG9kID1cbiAgfCAnc2RrX2V4cGxpY2l0JyAgICAgIC8vIERpcmVjdCBTREsgY2FsbCB3aXRoIHRpY2tldCBJRCAoY29uZmlkZW5jZTogMS4wKVxuICB8ICd6ZW5kZXNrX21hcmtlcicgICAgLy8gRW1iZWRkZWQgVEhJRCBtYXJrZXIgaW4gcmVzcG9uc2UgKGNvbmZpZGVuY2U6IDEuMClcbiAgfCAnY3VzdG9tX2ZpZWxkJyAgICAgIC8vIFplbmRlc2sgY3VzdG9tIGZpZWxkIChjb25maWRlbmNlOiAxLjApXG4gIHwgJ21pZGRsZXdhcmVfc3RhbXAnICAvLyBNaWRkbGV3YXJlLWluamVjdGVkIHRyYWNlIElEIChjb25maWRlbmNlOiAwLjk4KVxuICB8ICdzZXNzaW9uX21hdGNoJyAgICAgLy8gU2Vzc2lvbiBJRCBjb3JyZWxhdGlvbiAoY29uZmlkZW5jZTogMC45NSlcbiAgfCAnZW1haWxfdGltZV93aW5kb3cnIC8vIEVtYWlsICsgMTVtaW4gd2luZG93IChjb25maWRlbmNlOiAwLjYpXG4gIHwgJ21hbnVhbCc7ICAgICAgICAgICAvLyBIdW1hbi1hc3NpZ25lZCAoY29uZmlkZW5jZTogMS4wKVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUUkFDRSBPUFRJT05TICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRyYWNlIG9wdGlvbnMgKHYyIGZvcm1hdCwgY29udmVydGVkIHRvIHJ1bnMgaW50ZXJuYWxseSlcbiAqIEBkZXByZWNhdGVkIFVzZSBSdW5PcHRpb25zIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZU9wdGlvbnMge1xuICAvKiogVXNlcidzIG1lc3NhZ2UvcXVlcnkgKi9cbiAgdXNlck1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIEFnZW50J3MgcmVzcG9uc2UgKi9cbiAgYWdlbnRSZXNwb25zZTogc3RyaW5nO1xuICAvKiogVXNlcidzIGRldGVjdGVkIGludGVudCAqL1xuICB1c2VySW50ZW50Pzogc3RyaW5nO1xuICAvKiogT3V0Y29tZTogc3VjY2VzcywgZmFpbHVyZSwgcGFydGlhbF9zdWNjZXNzICovXG4gIG91dGNvbWU/OiAnc3VjY2VzcycgfCAnZmFpbHVyZScgfCAncGFydGlhbF9zdWNjZXNzJztcbiAgLyoqIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAqL1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDb252ZXJzYXRpb24gaGlzdG9yeSAqL1xuICBjb252ZXJzYXRpb25IaXN0b3J5PzogQXJyYXk8eyByb2xlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PjtcbiAgLyoqIFNwYW4gZGF0YSBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cbiAgc3BhbnM/OiBTcGFuRGF0YVtdO1xuICAvKiogQnVzaW5lc3MgY29udGV4dCBmb3IgUk9JIGNhbGN1bGF0aW9uICovXG4gIGJ1c2luZXNzQ29udGV4dD86IEJ1c2luZXNzQ29udGV4dDtcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EYXRhIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ2xsbScgfCAndG9vbCcgfCAncmV0cmlldmFsJyB8ICdlbWJlZGRpbmcnIHwgJ2NoYWluJyB8ICdjdXN0b20nO1xuICBzdGFydFRpbWU/OiBEYXRlO1xuICBlbmRUaW1lPzogRGF0ZTtcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgc3RhdHVzPzogJ29rJyB8ICdlcnJvcicgfCAndGltZW91dCc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBpbnB1dD86IHVua25vd247XG4gIG91dHB1dD86IHVua25vd247XG4gIC8vIExMTS1zcGVjaWZpY1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHByb21wdFRva2Vucz86IG51bWJlcjtcbiAgY29tcGxldGlvblRva2Vucz86IG51bWJlcjtcbiAgLy8gVG9vbC1zcGVjaWZpY1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgdG9vbFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gUmV0cmlldmFsLXNwZWNpZmljXG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBkb2N1bWVudENvdW50PzogbnVtYmVyO1xuICB0b3BTY29yZT86IG51bWJlcjtcbiAgc291cmNlcz86IHN0cmluZ1tdO1xuICAvLyBDaGlsZHJlblxuICBjaGlsZHJlbj86IFNwYW5EYXRhW107XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEN1c3RvbWVyQ29udGV4dFNuYXBzaG90IGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0NvbnRleHQge1xuICAvKiogQ3VzdG9tZXIgSUQgKi9cbiAgY3VzdG9tZXJJZD86IHN0cmluZztcbiAgLyoqIFRyYW5zYWN0aW9uIHZhbHVlIGluIGRvbGxhcnMgKi9cbiAgdHJhbnNhY3Rpb25WYWx1ZT86IG51bWJlcjtcbiAgLyoqIFByaW9yaXR5IGxldmVsICovXG4gIHByaW9yaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gIC8qKiBEZXBhcnRtZW50ICovXG4gIGRlcGFydG1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBJbmR1c3RyeSB2ZXJ0aWNhbCAqL1xuICBpbmR1c3RyeT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKi9cbiAgY3VzdG9tPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENMQUlNIFRZUEVTICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBIGNsYWltIGFib3V0IGEgcnVuIChmYWN0IHZzIGluZmVyZW5jZSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFpbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuYWx5c2lzSWQ6IHN0cmluZztcbiAgLyoqIFR5cGUgb2YgY2xhaW0gKi9cbiAgY2xhaW1UeXBlOiBDbGFpbVR5cGU7XG4gIC8qKiBDYXRlZ29yeSBvZiB0aGUgY2xhaW0gKi9cbiAgY2xhaW1DYXRlZ29yeTogQ2xhaW1DYXRlZ29yeTtcbiAgLyoqIFRoZSBjbGFpbSB0ZXh0ICovXG4gIGNsYWltVGV4dDogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGNsYWltICgwLTEpICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIEhvdyB3ZWxsIGNhbGlicmF0ZWQgaXMgdGhpcyBjb25maWRlbmNlICovXG4gIGNvbmZpZGVuY2VDYWxpYnJhdGlvbjogQ29uZmlkZW5jZUNhbGlicmF0aW9uO1xuICAvKiogRXZpZGVuY2Ugc3VwcG9ydGluZyB0aGlzIGNsYWltICovXG4gIGV2aWRlbmNlOiBFdmlkZW5jZVJlZmVyZW5jZVtdO1xuICAvKiogSXMgdGhpcyBjbGFpbSBleHBsYWluYWJsZSB0byBlbmQgdXNlcnMgKi9cbiAgaXNFeHBsYWluYWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2JhYmlsaXR5IHZhbHVlIGZvciBwcm9iYWJpbGl0eSBjbGFpbXMgKi9cbiAgcHJvYmFiaWxpdHlWYWx1ZT86IG51bWJlcjtcbiAgLyoqIEh1bWFuLWFzc2lnbmVkIHZlcmlmaWNhdGlvbiBzdGF0dXMgKi9cbiAgaHVtYW5WZXJpZmllZD86IGJvb2xlYW47XG4gIC8qKiBIdW1hbiB2ZXJpZmljYXRpb24gdmVyZGljdCAqL1xuICBodW1hblZlcmRpY3Q/OiAnY29uZmlybWVkJyB8ICdyZWplY3RlZCcgfCAnbW9kaWZpZWQnO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENsYWltVHlwZSA9ICdvYnNlcnZlZCcgfCAnaW5mZXJyZWQnIHwgJ2NvbXB1dGVkJztcbmV4cG9ydCB0eXBlIENsYWltQ2F0ZWdvcnkgPVxuICB8ICdvdXRjb21lJ1xuICB8ICdyb290X2NhdXNlJ1xuICB8ICdjdXN0b21lcl9pbXBhY3QnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ3JldmVudWVfaW1wYWN0J1xuICB8ICdxdWFsaXR5J1xuICB8ICdvdGhlcic7XG5leHBvcnQgdHlwZSBDb25maWRlbmNlQ2FsaWJyYXRpb24gPSAnY2FsaWJyYXRlZCcgfCAndW5jYWxpYnJhdGVkJyB8ICduZWVkc19tb3JlX2RhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlUmVmZXJlbmNlIHtcbiAgLyoqIFR5cGUgb2YgZXZpZGVuY2UgKi9cbiAgdHlwZTogJ3NwYW4nIHwgJ21lc3NhZ2UnIHwgJ3Rvb2xfY2FsbCcgfCAnZXh0ZXJuYWwnIHwgJ2NvbXB1dGVkJztcbiAgLyoqIElEIG9mIHRoZSByZWZlcmVuY2VkIGl0ZW0gKi9cbiAgcmVmZXJlbmNlSWQ6IHN0cmluZztcbiAgLyoqIEhvdyByZWxldmFudCBpcyB0aGlzIGV2aWRlbmNlICovXG4gIHJlbGV2YW5jZTogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGV2aWRlbmNlICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU5BTFlTSVMgUkVTVUxUICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGFuYWx5c2lzVmVyc2lvbjogc3RyaW5nO1xuICBtb2RlbFVzZWQ6IHN0cmluZztcbiAgLyoqIE92ZXJhbGwgb3V0Y29tZSB2ZXJkaWN0ICovXG4gIG91dGNvbWVWZXJkaWN0OiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqIENvbmZpZGVuY2UgaW4gdGhlIHZlcmRpY3QgKDAtMSkgKi9cbiAgb3V0Y29tZUNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIFJvb3QgY2F1c2UgY2F0ZWdvcnkgaWYgZmFpbHVyZSAqL1xuICByb290Q2F1c2VDYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIENvbmZpZGVuY2UgaW4gcm9vdCBjYXVzZSAoMC0xKSAqL1xuICByb290Q2F1c2VDb25maWRlbmNlPzogbnVtYmVyO1xuICAvKiogSXMgdGhpcyB0aGUgY3VycmVudCBhbmFseXNpcyAqL1xuICBpc0N1cnJlbnQ6IGJvb2xlYW47XG4gIC8qKiBJRCBvZiBhbmFseXNpcyB0aGF0IHN1cGVyc2VkZWQgdGhpcyBvbmUgKi9cbiAgc3VwZXJzZWRlZEJ5Pzogc3RyaW5nO1xuICAvKiogQ2xhaW1zIGZyb20gdGhpcyBhbmFseXNpcyAqL1xuICBjbGFpbXM6IENsYWltW107XG4gIGFuYWx5emVkQXQ/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0FMSUJSQVRJT04gVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uU3RhdHVzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwcmVkaWN0aW9uVHlwZTogUHJlZGljdGlvblR5cGU7XG4gIC8qKiBCcmllciBzY29yZSAobG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGdvb2QpICovXG4gIGJyaWVyU2NvcmU6IG51bWJlcjtcbiAgLyoqIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yICovXG4gIGVjZTogbnVtYmVyO1xuICAvKiogU2FtcGxlIGNvdW50ICovXG4gIHNhbXBsZUNvdW50OiBudW1iZXI7XG4gIC8qKiBJcyB0aGUgbW9kZWwgd2VsbC1jYWxpYnJhdGVkICovXG4gIGlzQ2FsaWJyYXRlZDogYm9vbGVhbjtcbiAgLyoqIENhbGlicmF0aW9uIGJ5IGNvbmZpZGVuY2UgYnVja2V0ICovXG4gIGJ1Y2tldHM6IENhbGlicmF0aW9uQnVja2V0W107XG4gIGxhc3RVcGRhdGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQcmVkaWN0aW9uVHlwZSA9XG4gIHwgJ291dGNvbWUnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ2VzY2FsYXRpb25fcmlzaydcbiAgfCAncmVzb2x1dGlvbl90aW1lJ1xuICB8ICdjdXN0b21lcl9zYXRpc2ZhY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uQnVja2V0IHtcbiAgYnVja2V0U3RhcnQ6IG51bWJlcjtcbiAgYnVja2V0RW5kOiBudW1iZXI7XG4gIHByZWRpY3RlZFByb2JhYmlsaXR5OiBudW1iZXI7XG4gIGFjdHVhbEZyZXF1ZW5jeTogbnVtYmVyO1xuICBzYW1wbGVDb3VudDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBST0kgVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvaUNvbmZpZyB7XG4gIC8qKiBDb3N0IHBlciBzdXBwb3J0IHRpY2tldCBkZWZsZWN0ZWQgKi9cbiAgdGlja2V0RGVmbGVjdGlvblZhbHVlOiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBlc2NhbGF0aW9uICovXG4gIGVzY2FsYXRpb25Db3N0OiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBob3VyIG9mIGFnZW50IHRpbWUgKi9cbiAgYWdlbnRIb3VybHlDb3N0OiBudW1iZXI7XG4gIC8qKiBBdmVyYWdlIHJlc29sdXRpb24gdGltZSAobWludXRlcykgKi9cbiAgYXZnUmVzb2x1dGlvbk1pbnV0ZXM6IG51bWJlcjtcbiAgLyoqIENTQVQgaW1wYWN0IG11bHRpcGxpZXIgKi9cbiAgY3NhdEltcGFjdE11bHRpcGxpZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb2lTdW1tYXJ5IHtcbiAgcGVyaW9kOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9O1xuICAvKiogVG90YWwgZXN0aW1hdGVkIHNhdmluZ3MgKi9cbiAgdG90YWxTYXZpbmdzOiBudW1iZXI7XG4gIC8qKiBCcmVha2Rvd24gYnkgY2F0ZWdvcnkgKi9cbiAgYnJlYWtkb3duOiB7XG4gICAgdGlja2V0RGVmbGVjdGlvbjogbnVtYmVyO1xuICAgIGVzY2FsYXRpb25QcmV2ZW50aW9uOiBudW1iZXI7XG4gICAgdGltZVRvUmVzb2x1dGlvbjogbnVtYmVyO1xuICAgIGNodXJuUHJldmVudGlvbjogbnVtYmVyO1xuICB9O1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGVzZSBlc3RpbWF0ZXMgKi9cbiAgY29uZmlkZW5jZTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgLyoqIE1ldGhvZG9sb2d5IHVzZWQgKi9cbiAgbWV0aG9kb2xvZ3k6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVhQTEFJTkFCSUxJVFkgUkVTVUxUICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBBbmFseXNpc1Jlc3VsdCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpbmFiaWxpdHlSZXN1bHQge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIGV4cGxhaW5hYmlsaXR5SWQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBvdXRjb21lOiB7XG4gICAgdmVyZGljdDogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gICAgY29uZmlkZW5jZTogbnVtYmVyO1xuICAgIHJlYXNvbmluZzogc3RyaW5nO1xuICB9O1xuICBidXNpbmVzc0ltcGFjdDoge1xuICAgIGltcGFjdFNjb3JlOiBudW1iZXI7XG4gICAgY3VzdG9tZXJTYXRpc2ZhY3Rpb246IG51bWJlcjtcbiAgICByZXZlbnVlUmlzazogc3RyaW5nO1xuICB9O1xuICByZWNvbW1lbmRhdGlvbnM6IEFycmF5PHtcbiAgICBwcmlvcml0eTogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgZXhwZWN0ZWRJbXBhY3Q6IHN0cmluZztcbiAgfT47XG4gIHJhZ0V2YWx1YXRpb24/OiB7XG4gICAgZ3JvdW5kZWRuZXNzOiBudW1iZXI7XG4gICAgZmFpdGhmdWxuZXNzOiBudW1iZXI7XG4gICAgYW5zd2VyUmVsZXZhbmNlOiBudW1iZXI7XG4gIH07XG4gIGhhbGx1Y2luYXRpb25SZXBvcnQ/OiB7XG4gICAgZGV0ZWN0ZWQ6IGJvb2xlYW47XG4gICAgdHlwZXM6IHN0cmluZ1tdO1xuICAgIHNldmVyaXR5OiBzdHJpbmc7XG4gIH07XG4gIHByb2Nlc3NpbmdUaW1lTXM6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVBJIFJFU1BPTlNFIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2U8VD4ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogVDtcbiAgZXJyb3I/OiB7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRSZXNwb25zZTxUPiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHtcbiAgICBpdGVtczogVFtdO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5SZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbXBhbnlJZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHRpY2tldElkPzogc3RyaW5nO1xuICBjdXN0b21lckFjY291bnRJZD86IHN0cmluZztcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgb3V0Y29tZT86IFJ1bk91dGNvbWU7XG4gIG91dGNvbWVSZWFzb24/OiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBDb252ZXJzYXRpb25NZXNzYWdlW107XG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIHByb21wdFZlcnNpb24/OiBzdHJpbmc7XG4gIGN1c3RvbWVyQ29udGV4dFNuYXBzaG90PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIHplbmRlc2tNYXJrZXI/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ29yZSBUeXBlc1xuICpcbiAqIFJ1bi1jZW50cmljIHR5cGVzIHdpdGggZmFjdHMgdnMgaW5mZXJlbmNlcyBhbmQgY3VzdG9tZXIgY29udGV4dCBzbmFwc2hvdHNcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTklUIE9QVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIC8qKiBUaGlua0hpdmUgQVBJIGtleSAoc3RhcnRzIHdpdGggdGhfKSAqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBBZ2VudCBJRCAqL1xuICBhZ2VudElkPzogc3RyaW5nO1xuICAvKiogVGhpbmtIaXZlIEFQSSBlbmRwb2ludCAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFNlcnZpY2UgbmFtZSBmb3IgdHJhY2VzICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIGF1dG8taW5zdHJ1bWVudGF0aW9uICovXG4gIGF1dG9JbnN0cnVtZW50PzogYm9vbGVhbjtcbiAgLyoqIEZyYW1ld29ya3MgdG8gYXV0by1pbnN0cnVtZW50ICovXG4gIGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqIEFQSSB2ZXJzaW9uIChkZWZhdWx0OiAndjMnKSAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2Myc7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1ld29yayA9XG4gIHwgJ2xhbmdjaGFpbidcbiAgfCAnbGFuZ2dyYXBoJ1xuICB8ICdvcGVuYWknXG4gIHwgJ29wZW5haS1hc3Npc3RhbnRzJ1xuICB8ICdhbnRocm9waWMnXG4gIHwgJ2xsYW1haW5kZXgnXG4gIHwgJ244bidcbiAgfCAndm9pY2VmbG93JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUlVOIE9QVElPTlMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgcnVuICh2MyBhdG9taWMgdW5pdClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFnZW50IElEICovXG4gIGFnZW50SWQ6IHN0cmluZztcbiAgLyoqIFdoZW4gdGhlIHJ1biBzdGFydGVkICovXG4gIHN0YXJ0ZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBXaGVuIHRoZSBydW4gZW5kZWQgKi9cbiAgZW5kZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBSdW4gb3V0Y29tZSAqL1xuICBvdXRjb21lPzogUnVuT3V0Y29tZTtcbiAgLyoqIFJlYXNvbiBmb3IgdGhlIG91dGNvbWUgKi9cbiAgb3V0Y29tZVJlYXNvbj86IHN0cmluZztcbiAgLyoqIENvbnZlcnNhdGlvbiBtZXNzYWdlcyAqL1xuICBjb252ZXJzYXRpb25NZXNzYWdlczogQ29udmVyc2F0aW9uTWVzc2FnZVtdO1xuICAvKiogTW9kZWwgSUQgdXNlZCAqL1xuICBtb2RlbElkPzogc3RyaW5nO1xuICAvKiogUHJvbXB0IHZlcnNpb24gKi9cbiAgcHJvbXB0VmVyc2lvbj86IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b21lciBjb250ZXh0IHNuYXBzaG90IChBUlIsIGhlYWx0aCBBUyBPRiB0aGlzIHJ1bikgKi9cbiAgY3VzdG9tZXJDb250ZXh0PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIC8qKiBUaWNrZXQgbGlua2luZyBvcHRpb25zICovXG4gIHRpY2tldExpbmtpbmc/OiBUaWNrZXRMaW5raW5nT3B0aW9ucztcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogUmVxdWVzdCBldmFsdWF0aW9uIHdoZW4gcnVuIGlzIGluZ2VzdGVkLlxuICAgKiBPdmVycmlkZXMgYWdlbnQncyBhdXRvX2V2YWx1YXRlIHNldHRpbmcgZm9yIHRoaXMgcnVuLlxuICAgKlxuICAgKiAtIHRydWU6IEZvcmNlIGV2YWx1YXRpb24gb24gdGhpcyBydW5cbiAgICogLSBmYWxzZTogU2tpcCBldmFsdWF0aW9uIGV2ZW4gaWYgYWdlbnQgaGFzIGF1dG9fZXZhbHVhdGUgZW5hYmxlZFxuICAgKiAtIHVuZGVmaW5lZDogVXNlIGFnZW50J3MgYXV0b19ldmFsdWF0ZSBzZXR0aW5nIChkZWZhdWx0KVxuICAgKi9cbiAgcnVuRXZhbHVhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJ1bk91dGNvbWUgPVxuICB8ICdyZXNvbHZlZCdcbiAgfCAnZXNjYWxhdGVkJ1xuICB8ICdhYmFuZG9uZWQnXG4gIHwgJ2ZhaWxlZCdcbiAgfCAndHJhbnNmZXJyZWQnXG4gIHwgJ3BlbmRpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbk1lc3NhZ2Uge1xuICByb2xlOiAndXNlcicgfCAnYXNzaXN0YW50JyB8ICdzeXN0ZW0nIHwgJ3Rvb2wnO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ1VTVE9NRVIgQ09OVEVYVCBTTkFQU0hPVCAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3VzdG9tZXIgY29udGV4dCBjYXB0dXJlZCBBUyBPRiB0aGUgcnVuIHRpbWUgKG5vdCBjdXJyZW50IHZhbHVlcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lckNvbnRleHRTbmFwc2hvdCB7XG4gIC8qKiBDdXN0b21lciBhY2NvdW50IElEICovXG4gIGN1c3RvbWVySWQ/OiBzdHJpbmc7XG4gIC8qKiBBUlIgYXQgdGhlIHRpbWUgb2YgdGhlIHJ1biAobm90IGN1cnJlbnQgQVJSKSAqL1xuICBhcnI/OiBudW1iZXI7XG4gIC8qKiBIZWFsdGggc2NvcmUgYXQgdGhlIHRpbWUgb2YgdGhlIHJ1biAoMC0xMDApICovXG4gIGhlYWx0aFNjb3JlPzogbnVtYmVyO1xuICAvKiogQ3VzdG9tZXIgc2VnbWVudCAoZS5nLiwgJ2VudGVycHJpc2UnLCAnbWlkLW1hcmtldCcsICdzbWInKSAqL1xuICBzZWdtZW50Pzogc3RyaW5nO1xuICAvKiogV2hlbiB0aGlzIHNuYXBzaG90IHdhcyBjYXB0dXJlZCAqL1xuICBjYXB0dXJlZEF0Pzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGZpZWxkcyAod2lsbCBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBzY2hlbWEpICovXG4gIGN1c3RvbUZpZWxkcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUSUNLRVQgTElOS0lORyAodjMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZGV0ZXJtaW5pc3RpYyB0aWNrZXQgbGlua2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tldExpbmtpbmdPcHRpb25zIHtcbiAgLyoqIExpbmsgbWV0aG9kIHRvIHVzZSAqL1xuICBtZXRob2Q6IExpbmtNZXRob2Q7XG4gIC8qKiBUaWNrZXQgSUQgKGZvciBzZGtfZXhwbGljaXQgbWV0aG9kKSAqL1xuICB0aWNrZXRJZD86IHN0cmluZztcbiAgLyoqIEV4dGVybmFsIHRpY2tldCBJRCAoZS5nLiwgWmVuZGVzayB0aWNrZXQgSUQpICovXG4gIGV4dGVybmFsVGlja2V0SWQ/OiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBmb3IgZXh0ZXJuYWwgdGlja2V0ICovXG4gIHBsYXRmb3JtPzogJ3plbmRlc2snIHwgJ2ludGVyY29tJyB8ICdzYWxlc2ZvcmNlJyB8ICdmcmVzaGRlc2snO1xuICAvKiogQ3VzdG9tIGZpZWxkIG5hbWUgZm9yIGxpbmtpbmcgKi9cbiAgY3VzdG9tRmllbGROYW1lPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGZpZWxkIHZhbHVlICovXG4gIGN1c3RvbUZpZWxkVmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIExpbmtNZXRob2QgPVxuICB8ICdzZGtfZXhwbGljaXQnICAgICAgLy8gRGlyZWN0IFNESyBjYWxsIHdpdGggdGlja2V0IElEIChjb25maWRlbmNlOiAxLjApXG4gIHwgJ3plbmRlc2tfbWFya2VyJyAgICAvLyBFbWJlZGRlZCBUSElEIG1hcmtlciBpbiByZXNwb25zZSAoY29uZmlkZW5jZTogMS4wKVxuICB8ICdjdXN0b21fZmllbGQnICAgICAgLy8gWmVuZGVzayBjdXN0b20gZmllbGQgKGNvbmZpZGVuY2U6IDEuMClcbiAgfCAnbWlkZGxld2FyZV9zdGFtcCcgIC8vIE1pZGRsZXdhcmUtaW5qZWN0ZWQgdHJhY2UgSUQgKGNvbmZpZGVuY2U6IDAuOTgpXG4gIHwgJ3Nlc3Npb25fbWF0Y2gnICAgICAvLyBTZXNzaW9uIElEIGNvcnJlbGF0aW9uIChjb25maWRlbmNlOiAwLjk1KVxuICB8ICdlbWFpbF90aW1lX3dpbmRvdycgLy8gRW1haWwgKyAxNW1pbiB3aW5kb3cgKGNvbmZpZGVuY2U6IDAuNilcbiAgfCAnbWFudWFsJzsgICAgICAgICAgIC8vIEh1bWFuLWFzc2lnbmVkIChjb25maWRlbmNlOiAxLjApXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRSQUNFIE9QVElPTlMgKHYyIGNvbXBhdGliaWxpdHkpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhc3NpZmljYXRpb24gZmxhZ3MgZm9yIGNhdGVnb3JpemluZyB0cmFjZSBpc3N1ZXNcbiAqIFNlcGFyYXRlIGZyb20gYmluYXJ5IG91dGNvbWUgKHN1Y2Nlc3MvZmFpbHVyZSlcbiAqL1xuZXhwb3J0IHR5cGUgVHJhY2VDdXN0b21GbGFnID1cbiAgfCAnaGFsbHVjaW5hdGlvbidcbiAgfCAncG9saWN5X3Zpb2xhdGlvbidcbiAgfCAndG9uZV9pc3N1ZSdcbiAgfCAncmV0cmlldmFsX21pc3MnXG4gIHwgJ2Vycm9yJztcblxuLyoqXG4gKiBUcmFjZSBvcHRpb25zICh2MiBmb3JtYXQsIGNvbnZlcnRlZCB0byBydW5zIGludGVybmFsbHkpXG4gKiBAZGVwcmVjYXRlZCBVc2UgUnVuT3B0aW9ucyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2VPcHRpb25zIHtcbiAgLyoqIFVzZXIncyBtZXNzYWdlL3F1ZXJ5ICovXG4gIHVzZXJNZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBBZ2VudCdzIHJlc3BvbnNlICovXG4gIGFnZW50UmVzcG9uc2U6IHN0cmluZztcbiAgLyoqIFVzZXIncyBkZXRlY3RlZCBpbnRlbnQgKi9cbiAgdXNlckludGVudD86IHN0cmluZztcbiAgLyoqIEJpbmFyeSBvdXRjb21lOiBzdWNjZXNzIG9yIGZhaWx1cmUgKi9cbiAgb3V0Y29tZT86ICdzdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqIENsYXNzaWZpY2F0aW9uIGZsYWdzIGZvciBjYXRlZ29yaXppbmcgdGhlIGlzc3VlIHR5cGUgKGhhbGx1Y2luYXRpb24sIHBvbGljeV92aW9sYXRpb24sIGV0Yy4pICovXG4gIGN1c3RvbUZsYWdzPzogVHJhY2VDdXN0b21GbGFnW107XG4gIC8qKiBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKi9cbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIC8qKiBTZXNzaW9uIElEIGZvciBjb252ZXJzYXRpb24gdHJhY2tpbmcgKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICAvKiogQ29udmVyc2F0aW9uIGhpc3RvcnkgKi9cbiAgY29udmVyc2F0aW9uSGlzdG9yeT86IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gIC8qKiBTcGFuIGRhdGEgZm9yIGRldGFpbGVkIGFuYWx5c2lzICovXG4gIHNwYW5zPzogU3BhbkRhdGFbXTtcbiAgLyoqIEJ1c2luZXNzIGNvbnRleHQgZm9yIFJPSSBjYWxjdWxhdGlvbiAqL1xuICBidXNpbmVzc0NvbnRleHQ/OiBCdXNpbmVzc0NvbnRleHQ7XG4gIC8qKiBDdXN0b20gbWV0YWRhdGEgKi9cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFJlcXVlc3QgZXZhbHVhdGlvbiB3aGVuIHRyYWNlIGlzIGluZ2VzdGVkLlxuICAgKiBPdmVycmlkZXMgYWdlbnQncyBhdXRvX2V2YWx1YXRlIHNldHRpbmcgZm9yIHRoaXMgdHJhY2UuXG4gICAqXG4gICAqIC0gdHJ1ZTogRm9yY2UgZXZhbHVhdGlvbiBvbiB0aGlzIHRyYWNlXG4gICAqIC0gZmFsc2U6IFNraXAgZXZhbHVhdGlvbiBldmVuIGlmIGFnZW50IGhhcyBhdXRvX2V2YWx1YXRlIGVuYWJsZWRcbiAgICogLSB1bmRlZmluZWQ6IFVzZSBhZ2VudCdzIGF1dG9fZXZhbHVhdGUgc2V0dGluZyAoZGVmYXVsdClcbiAgICovXG4gIHJ1bkV2YWx1YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EYXRhIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ2xsbScgfCAndG9vbCcgfCAncmV0cmlldmFsJyB8ICdlbWJlZGRpbmcnIHwgJ2NoYWluJyB8ICdjdXN0b20nO1xuICBzdGFydFRpbWU/OiBEYXRlO1xuICBlbmRUaW1lPzogRGF0ZTtcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgc3RhdHVzPzogJ29rJyB8ICdlcnJvcicgfCAndGltZW91dCc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBpbnB1dD86IHVua25vd247XG4gIG91dHB1dD86IHVua25vd247XG4gIC8vIExMTS1zcGVjaWZpY1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHByb21wdFRva2Vucz86IG51bWJlcjtcbiAgY29tcGxldGlvblRva2Vucz86IG51bWJlcjtcbiAgLy8gVG9vbC1zcGVjaWZpY1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgdG9vbFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gUmV0cmlldmFsLXNwZWNpZmljXG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBkb2N1bWVudENvdW50PzogbnVtYmVyO1xuICB0b3BTY29yZT86IG51bWJlcjtcbiAgc291cmNlcz86IHN0cmluZ1tdO1xuICAvLyBDaGlsZHJlblxuICBjaGlsZHJlbj86IFNwYW5EYXRhW107XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEN1c3RvbWVyQ29udGV4dFNuYXBzaG90IGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0NvbnRleHQge1xuICAvKiogQ3VzdG9tZXIgSUQgKi9cbiAgY3VzdG9tZXJJZD86IHN0cmluZztcbiAgLyoqIFRyYW5zYWN0aW9uIHZhbHVlIGluIGRvbGxhcnMgKi9cbiAgdHJhbnNhY3Rpb25WYWx1ZT86IG51bWJlcjtcbiAgLyoqIFByaW9yaXR5IGxldmVsICovXG4gIHByaW9yaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gIC8qKiBEZXBhcnRtZW50ICovXG4gIGRlcGFydG1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBJbmR1c3RyeSB2ZXJ0aWNhbCAqL1xuICBpbmR1c3RyeT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKi9cbiAgY3VzdG9tPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENMQUlNIFRZUEVTICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBIGNsYWltIGFib3V0IGEgcnVuIChmYWN0IHZzIGluZmVyZW5jZSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFpbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuYWx5c2lzSWQ6IHN0cmluZztcbiAgLyoqIFR5cGUgb2YgY2xhaW0gKi9cbiAgY2xhaW1UeXBlOiBDbGFpbVR5cGU7XG4gIC8qKiBDYXRlZ29yeSBvZiB0aGUgY2xhaW0gKi9cbiAgY2xhaW1DYXRlZ29yeTogQ2xhaW1DYXRlZ29yeTtcbiAgLyoqIFRoZSBjbGFpbSB0ZXh0ICovXG4gIGNsYWltVGV4dDogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGNsYWltICgwLTEpICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIEhvdyB3ZWxsIGNhbGlicmF0ZWQgaXMgdGhpcyBjb25maWRlbmNlICovXG4gIGNvbmZpZGVuY2VDYWxpYnJhdGlvbjogQ29uZmlkZW5jZUNhbGlicmF0aW9uO1xuICAvKiogRXZpZGVuY2Ugc3VwcG9ydGluZyB0aGlzIGNsYWltICovXG4gIGV2aWRlbmNlOiBFdmlkZW5jZVJlZmVyZW5jZVtdO1xuICAvKiogSXMgdGhpcyBjbGFpbSBleHBsYWluYWJsZSB0byBlbmQgdXNlcnMgKi9cbiAgaXNFeHBsYWluYWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2JhYmlsaXR5IHZhbHVlIGZvciBwcm9iYWJpbGl0eSBjbGFpbXMgKi9cbiAgcHJvYmFiaWxpdHlWYWx1ZT86IG51bWJlcjtcbiAgLyoqIEh1bWFuLWFzc2lnbmVkIHZlcmlmaWNhdGlvbiBzdGF0dXMgKi9cbiAgaHVtYW5WZXJpZmllZD86IGJvb2xlYW47XG4gIC8qKiBIdW1hbiB2ZXJpZmljYXRpb24gdmVyZGljdCAqL1xuICBodW1hblZlcmRpY3Q/OiAnY29uZmlybWVkJyB8ICdyZWplY3RlZCcgfCAnbW9kaWZpZWQnO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENsYWltVHlwZSA9ICdvYnNlcnZlZCcgfCAnaW5mZXJyZWQnIHwgJ2NvbXB1dGVkJztcbmV4cG9ydCB0eXBlIENsYWltQ2F0ZWdvcnkgPVxuICB8ICdvdXRjb21lJ1xuICB8ICdyb290X2NhdXNlJ1xuICB8ICdjdXN0b21lcl9pbXBhY3QnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ3JldmVudWVfaW1wYWN0J1xuICB8ICdxdWFsaXR5J1xuICB8ICdvdGhlcic7XG5leHBvcnQgdHlwZSBDb25maWRlbmNlQ2FsaWJyYXRpb24gPSAnY2FsaWJyYXRlZCcgfCAndW5jYWxpYnJhdGVkJyB8ICduZWVkc19tb3JlX2RhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlUmVmZXJlbmNlIHtcbiAgLyoqIFR5cGUgb2YgZXZpZGVuY2UgKi9cbiAgdHlwZTogJ3NwYW4nIHwgJ21lc3NhZ2UnIHwgJ3Rvb2xfY2FsbCcgfCAnZXh0ZXJuYWwnIHwgJ2NvbXB1dGVkJztcbiAgLyoqIElEIG9mIHRoZSByZWZlcmVuY2VkIGl0ZW0gKi9cbiAgcmVmZXJlbmNlSWQ6IHN0cmluZztcbiAgLyoqIEhvdyByZWxldmFudCBpcyB0aGlzIGV2aWRlbmNlICovXG4gIHJlbGV2YW5jZTogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGV2aWRlbmNlICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU5BTFlTSVMgUkVTVUxUICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGFuYWx5c2lzVmVyc2lvbjogc3RyaW5nO1xuICBtb2RlbFVzZWQ6IHN0cmluZztcbiAgLyoqIE92ZXJhbGwgb3V0Y29tZSB2ZXJkaWN0ICovXG4gIG91dGNvbWVWZXJkaWN0OiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqIENvbmZpZGVuY2UgaW4gdGhlIHZlcmRpY3QgKDAtMSkgKi9cbiAgb3V0Y29tZUNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIFJvb3QgY2F1c2UgY2F0ZWdvcnkgaWYgZmFpbHVyZSAqL1xuICByb290Q2F1c2VDYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIENvbmZpZGVuY2UgaW4gcm9vdCBjYXVzZSAoMC0xKSAqL1xuICByb290Q2F1c2VDb25maWRlbmNlPzogbnVtYmVyO1xuICAvKiogSXMgdGhpcyB0aGUgY3VycmVudCBhbmFseXNpcyAqL1xuICBpc0N1cnJlbnQ6IGJvb2xlYW47XG4gIC8qKiBJRCBvZiBhbmFseXNpcyB0aGF0IHN1cGVyc2VkZWQgdGhpcyBvbmUgKi9cbiAgc3VwZXJzZWRlZEJ5Pzogc3RyaW5nO1xuICAvKiogQ2xhaW1zIGZyb20gdGhpcyBhbmFseXNpcyAqL1xuICBjbGFpbXM6IENsYWltW107XG4gIGFuYWx5emVkQXQ/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0FMSUJSQVRJT04gVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uU3RhdHVzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwcmVkaWN0aW9uVHlwZTogUHJlZGljdGlvblR5cGU7XG4gIC8qKiBCcmllciBzY29yZSAobG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGdvb2QpICovXG4gIGJyaWVyU2NvcmU6IG51bWJlcjtcbiAgLyoqIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yICovXG4gIGVjZTogbnVtYmVyO1xuICAvKiogU2FtcGxlIGNvdW50ICovXG4gIHNhbXBsZUNvdW50OiBudW1iZXI7XG4gIC8qKiBJcyB0aGUgbW9kZWwgd2VsbC1jYWxpYnJhdGVkICovXG4gIGlzQ2FsaWJyYXRlZDogYm9vbGVhbjtcbiAgLyoqIENhbGlicmF0aW9uIGJ5IGNvbmZpZGVuY2UgYnVja2V0ICovXG4gIGJ1Y2tldHM6IENhbGlicmF0aW9uQnVja2V0W107XG4gIGxhc3RVcGRhdGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQcmVkaWN0aW9uVHlwZSA9XG4gIHwgJ291dGNvbWUnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ2VzY2FsYXRpb25fcmlzaydcbiAgfCAncmVzb2x1dGlvbl90aW1lJ1xuICB8ICdjdXN0b21lcl9zYXRpc2ZhY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uQnVja2V0IHtcbiAgYnVja2V0U3RhcnQ6IG51bWJlcjtcbiAgYnVja2V0RW5kOiBudW1iZXI7XG4gIHByZWRpY3RlZFByb2JhYmlsaXR5OiBudW1iZXI7XG4gIGFjdHVhbEZyZXF1ZW5jeTogbnVtYmVyO1xuICBzYW1wbGVDb3VudDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBST0kgVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvaUNvbmZpZyB7XG4gIC8qKiBDb3N0IHBlciBzdXBwb3J0IHRpY2tldCBkZWZsZWN0ZWQgKi9cbiAgdGlja2V0RGVmbGVjdGlvblZhbHVlOiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBlc2NhbGF0aW9uICovXG4gIGVzY2FsYXRpb25Db3N0OiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBob3VyIG9mIGFnZW50IHRpbWUgKi9cbiAgYWdlbnRIb3VybHlDb3N0OiBudW1iZXI7XG4gIC8qKiBBdmVyYWdlIHJlc29sdXRpb24gdGltZSAobWludXRlcykgKi9cbiAgYXZnUmVzb2x1dGlvbk1pbnV0ZXM6IG51bWJlcjtcbiAgLyoqIENTQVQgaW1wYWN0IG11bHRpcGxpZXIgKi9cbiAgY3NhdEltcGFjdE11bHRpcGxpZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb2lTdW1tYXJ5IHtcbiAgcGVyaW9kOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9O1xuICAvKiogVG90YWwgZXN0aW1hdGVkIHNhdmluZ3MgKi9cbiAgdG90YWxTYXZpbmdzOiBudW1iZXI7XG4gIC8qKiBCcmVha2Rvd24gYnkgY2F0ZWdvcnkgKi9cbiAgYnJlYWtkb3duOiB7XG4gICAgdGlja2V0RGVmbGVjdGlvbjogbnVtYmVyO1xuICAgIGVzY2FsYXRpb25QcmV2ZW50aW9uOiBudW1iZXI7XG4gICAgdGltZVRvUmVzb2x1dGlvbjogbnVtYmVyO1xuICAgIGNodXJuUHJldmVudGlvbjogbnVtYmVyO1xuICB9O1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGVzZSBlc3RpbWF0ZXMgKi9cbiAgY29uZmlkZW5jZTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgLyoqIE1ldGhvZG9sb2d5IHVzZWQgKi9cbiAgbWV0aG9kb2xvZ3k6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVhQTEFJTkFCSUxJVFkgUkVTVUxUICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBBbmFseXNpc1Jlc3VsdCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpbmFiaWxpdHlSZXN1bHQge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIGV4cGxhaW5hYmlsaXR5SWQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBvdXRjb21lOiB7XG4gICAgdmVyZGljdDogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gICAgY29uZmlkZW5jZTogbnVtYmVyO1xuICAgIHJlYXNvbmluZzogc3RyaW5nO1xuICB9O1xuICBidXNpbmVzc0ltcGFjdDoge1xuICAgIGltcGFjdFNjb3JlOiBudW1iZXI7XG4gICAgY3VzdG9tZXJTYXRpc2ZhY3Rpb246IG51bWJlcjtcbiAgICByZXZlbnVlUmlzazogc3RyaW5nO1xuICB9O1xuICByZWNvbW1lbmRhdGlvbnM6IEFycmF5PHtcbiAgICBwcmlvcml0eTogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgZXhwZWN0ZWRJbXBhY3Q6IHN0cmluZztcbiAgfT47XG4gIHJhZ0V2YWx1YXRpb24/OiB7XG4gICAgZ3JvdW5kZWRuZXNzOiBudW1iZXI7XG4gICAgZmFpdGhmdWxuZXNzOiBudW1iZXI7XG4gICAgYW5zd2VyUmVsZXZhbmNlOiBudW1iZXI7XG4gIH07XG4gIGhhbGx1Y2luYXRpb25SZXBvcnQ/OiB7XG4gICAgZGV0ZWN0ZWQ6IGJvb2xlYW47XG4gICAgdHlwZXM6IHN0cmluZ1tdO1xuICAgIHNldmVyaXR5OiBzdHJpbmc7XG4gIH07XG4gIHByb2Nlc3NpbmdUaW1lTXM6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVBJIFJFU1BPTlNFIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2U8VD4ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogVDtcbiAgZXJyb3I/OiB7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRSZXNwb25zZTxUPiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHtcbiAgICBpdGVtczogVFtdO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5SZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbXBhbnlJZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHRpY2tldElkPzogc3RyaW5nO1xuICBjdXN0b21lckFjY291bnRJZD86IHN0cmluZztcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgb3V0Y29tZT86IFJ1bk91dGNvbWU7XG4gIG91dGNvbWVSZWFzb24/OiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBDb252ZXJzYXRpb25NZXNzYWdlW107XG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIHByb21wdFZlcnNpb24/OiBzdHJpbmc7XG4gIGN1c3RvbWVyQ29udGV4dFNuYXBzaG90PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIHplbmRlc2tNYXJrZXI/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cbiJdfQ==