@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.
- package/README.md +279 -128
- package/dist/api/apiKeys.d.ts +252 -0
- package/dist/api/apiKeys.js +298 -0
- package/dist/api/business-metrics.d.ts +188 -0
- package/dist/api/business-metrics.js +213 -0
- package/dist/api/conversation-eval.d.ts +200 -0
- package/dist/api/conversation-eval.js +235 -0
- package/dist/api/deterministic-graders.d.ts +205 -0
- package/dist/api/deterministic-graders.js +191 -0
- package/dist/api/eval-health.d.ts +250 -0
- package/dist/api/eval-health.js +224 -0
- package/dist/api/human-review.d.ts +275 -0
- package/dist/api/human-review.js +236 -0
- package/dist/api/nondeterminism.d.ts +300 -0
- package/dist/api/nondeterminism.js +250 -0
- package/dist/api/quality-metrics.d.ts +303 -0
- package/dist/api/quality-metrics.js +198 -0
- package/dist/api/roi-analytics.d.ts +263 -0
- package/dist/api/roi-analytics.js +204 -0
- package/dist/api/transcript-patterns.d.ts +204 -0
- package/dist/api/transcript-patterns.js +227 -0
- package/dist/core/client.d.ts +82 -8
- package/dist/core/client.js +223 -32
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.js +2 -2
- package/dist/core/types.d.ts +27 -2
- package/dist/core/types.js +1 -1
- package/dist/index.d.ts +415 -62
- package/dist/index.js +253 -37
- package/package.json +8 -4
package/dist/index.js
CHANGED
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
* @license MIT
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.
|
|
15
|
+
exports.isReliableEvaluation = exports.requiredPassRateForPassAtK = exports.calculatePassToK = exports.calculatePassAtK = exports.calculateHealthTrend = exports.calculateArrChange = exports.toContextSnapshot = exports.getContextAsOf = exports.captureCustomerContext = exports.LINK_METHOD_CONFIDENCE = exports.getBestLinkMethod = exports.linkRunToZendeskTicket = exports.linkRunToTicket = exports.removeZendeskMarker = exports.hasZendeskMarker = exports.parseZendeskMarker = exports.generateZendeskMarker = exports.getCalibrationQuality = exports.isWellCalibrated = exports.calculateECE = exports.calculateBrierScore = exports.groupClaimsByCategory = exports.groupClaimsByType = exports.getHighConfidenceClaims = exports.isComputed = exports.isInference = exports.isFact = exports.fromOpenAIMessages = exports.toOpenAIMessages = exports.createRunWithContext = exports.businessMetrics = exports.qualityMetrics = exports.roiAnalytics = exports.apiKeys = exports.transcriptPatterns = exports.conversationEval = exports.deterministicGraders = exports.evalHealth = exports.nondeterminism = exports.humanReview = exports.customerContext = exports.linking = exports.calibration = exports.claims = exports.runs = exports.DEFAULT_ENDPOINT = exports.SDK_VERSION = exports.isInitialized = exports.analyzer = exports.issues = void 0;
|
|
16
|
+
exports.getTraceProgress = exports.getStatusMessage = exports.isMetricStale = exports.awaitingExternalData = exports.needsMoreTraces = exports.isMetricReady = exports.getGradeColor = exports.formatQualityScore = exports.getQualityRecommendations = exports.isHallucinationRiskAcceptable = exports.passesQualityThreshold = exports.getROIQuality = exports.formatCurrency = exports.calculateAutomationSavings = exports.calculateRevenueAtRisk = exports.canAccessAgent = exports.getTimeUntilExpiry = exports.isApiKeyValid = exports.isApiKeyExpired = exports.hasPermission = exports.sortMatchesBySeverity = exports.needsAttention = exports.getRecommendations = exports.getCategoryDistribution = exports.hasEscalationRequest = exports.hasFrustrationSignals = exports.hasPiiExposure = exports.getCriticalInsights = exports.getMatchesByCategory = exports.isHighRisk = exports.analyzeConversationTrend = exports.getProblematicTurns = exports.getAggregator = exports.aggregateMajority = exports.aggregateFinalTurn = exports.aggregateWeighted = exports.aggregateAverage = exports.aggregateWorst = exports.calculateAverageScore = exports.getFailedRules = exports.allRulesPassed = exports.createJsonSchemaRule = exports.createLengthRule = exports.createContainsRule = exports.createRegexRule = exports.getSaturationRecommendation = exports.isSaturated = exports.getHealthSeverityLevel = exports.hasHealthIssue = exports.getReliabilityRecommendation = void 0;
|
|
17
|
+
exports.IpWhitelistError = exports.RateLimitError = exports.AgentScopeError = exports.PermissionDeniedError = exports.ThinkHiveValidationError = exports.ThinkHiveApiError = exports.ThinkHiveError = exports.getTrendEmoji = exports.formatMetricValue = void 0;
|
|
16
18
|
exports.init = init;
|
|
17
19
|
exports.getTracer = getTracer;
|
|
18
20
|
exports.shutdown = shutdown;
|
|
@@ -31,8 +33,13 @@ Object.defineProperty(exports, "isInitialized", { enumerable: true, get: functio
|
|
|
31
33
|
Object.defineProperty(exports, "SDK_VERSION", { enumerable: true, get: function () { return config_1.SDK_VERSION; } });
|
|
32
34
|
Object.defineProperty(exports, "DEFAULT_ENDPOINT", { enumerable: true, get: function () { return config_1.DEFAULT_ENDPOINT; } });
|
|
33
35
|
const client_1 = require("./core/client");
|
|
36
|
+
Object.defineProperty(exports, "ThinkHiveError", { enumerable: true, get: function () { return client_1.ThinkHiveError; } });
|
|
34
37
|
Object.defineProperty(exports, "ThinkHiveApiError", { enumerable: true, get: function () { return client_1.ThinkHiveApiError; } });
|
|
35
38
|
Object.defineProperty(exports, "ThinkHiveValidationError", { enumerable: true, get: function () { return client_1.ThinkHiveValidationError; } });
|
|
39
|
+
Object.defineProperty(exports, "PermissionDeniedError", { enumerable: true, get: function () { return client_1.PermissionDeniedError; } });
|
|
40
|
+
Object.defineProperty(exports, "AgentScopeError", { enumerable: true, get: function () { return client_1.AgentScopeError; } });
|
|
41
|
+
Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return client_1.RateLimitError; } });
|
|
42
|
+
Object.defineProperty(exports, "IpWhitelistError", { enumerable: true, get: function () { return client_1.IpWhitelistError; } });
|
|
36
43
|
// API clients
|
|
37
44
|
const runs_1 = require("./api/runs");
|
|
38
45
|
Object.defineProperty(exports, "runs", { enumerable: true, get: function () { return runs_1.runs; } });
|
|
@@ -53,6 +60,87 @@ Object.defineProperty(exports, "calculateBrierScore", { enumerable: true, get: f
|
|
|
53
60
|
Object.defineProperty(exports, "calculateECE", { enumerable: true, get: function () { return calibration_1.calculateECE; } });
|
|
54
61
|
Object.defineProperty(exports, "isWellCalibrated", { enumerable: true, get: function () { return calibration_1.isWellCalibrated; } });
|
|
55
62
|
Object.defineProperty(exports, "getCalibrationQuality", { enumerable: true, get: function () { return calibration_1.getCalibrationQuality; } });
|
|
63
|
+
// New Evaluation APIs
|
|
64
|
+
const human_review_1 = require("./api/human-review");
|
|
65
|
+
Object.defineProperty(exports, "humanReview", { enumerable: true, get: function () { return human_review_1.humanReview; } });
|
|
66
|
+
const nondeterminism_1 = require("./api/nondeterminism");
|
|
67
|
+
Object.defineProperty(exports, "nondeterminism", { enumerable: true, get: function () { return nondeterminism_1.nondeterminism; } });
|
|
68
|
+
Object.defineProperty(exports, "calculatePassAtK", { enumerable: true, get: function () { return nondeterminism_1.calculatePassAtK; } });
|
|
69
|
+
Object.defineProperty(exports, "calculatePassToK", { enumerable: true, get: function () { return nondeterminism_1.calculatePassToK; } });
|
|
70
|
+
Object.defineProperty(exports, "requiredPassRateForPassAtK", { enumerable: true, get: function () { return nondeterminism_1.requiredPassRateForPassAtK; } });
|
|
71
|
+
Object.defineProperty(exports, "isReliableEvaluation", { enumerable: true, get: function () { return nondeterminism_1.isReliableEvaluation; } });
|
|
72
|
+
Object.defineProperty(exports, "getReliabilityRecommendation", { enumerable: true, get: function () { return nondeterminism_1.getReliabilityRecommendation; } });
|
|
73
|
+
const eval_health_1 = require("./api/eval-health");
|
|
74
|
+
Object.defineProperty(exports, "evalHealth", { enumerable: true, get: function () { return eval_health_1.evalHealth; } });
|
|
75
|
+
Object.defineProperty(exports, "hasHealthIssue", { enumerable: true, get: function () { return eval_health_1.hasHealthIssue; } });
|
|
76
|
+
Object.defineProperty(exports, "getHealthSeverityLevel", { enumerable: true, get: function () { return eval_health_1.getSeverityLevel; } });
|
|
77
|
+
Object.defineProperty(exports, "isSaturated", { enumerable: true, get: function () { return eval_health_1.isSaturated; } });
|
|
78
|
+
Object.defineProperty(exports, "getSaturationRecommendation", { enumerable: true, get: function () { return eval_health_1.getSaturationRecommendation; } });
|
|
79
|
+
const deterministic_graders_1 = require("./api/deterministic-graders");
|
|
80
|
+
Object.defineProperty(exports, "deterministicGraders", { enumerable: true, get: function () { return deterministic_graders_1.deterministicGraders; } });
|
|
81
|
+
Object.defineProperty(exports, "createRegexRule", { enumerable: true, get: function () { return deterministic_graders_1.createRegexRule; } });
|
|
82
|
+
Object.defineProperty(exports, "createContainsRule", { enumerable: true, get: function () { return deterministic_graders_1.createContainsRule; } });
|
|
83
|
+
Object.defineProperty(exports, "createLengthRule", { enumerable: true, get: function () { return deterministic_graders_1.createLengthRule; } });
|
|
84
|
+
Object.defineProperty(exports, "createJsonSchemaRule", { enumerable: true, get: function () { return deterministic_graders_1.createJsonSchemaRule; } });
|
|
85
|
+
Object.defineProperty(exports, "allRulesPassed", { enumerable: true, get: function () { return deterministic_graders_1.allRulesPassed; } });
|
|
86
|
+
Object.defineProperty(exports, "getFailedRules", { enumerable: true, get: function () { return deterministic_graders_1.getFailedRules; } });
|
|
87
|
+
Object.defineProperty(exports, "calculateAverageScore", { enumerable: true, get: function () { return deterministic_graders_1.calculateAverageScore; } });
|
|
88
|
+
const conversation_eval_1 = require("./api/conversation-eval");
|
|
89
|
+
Object.defineProperty(exports, "conversationEval", { enumerable: true, get: function () { return conversation_eval_1.conversationEval; } });
|
|
90
|
+
Object.defineProperty(exports, "aggregateWorst", { enumerable: true, get: function () { return conversation_eval_1.aggregateWorst; } });
|
|
91
|
+
Object.defineProperty(exports, "aggregateAverage", { enumerable: true, get: function () { return conversation_eval_1.aggregateAverage; } });
|
|
92
|
+
Object.defineProperty(exports, "aggregateWeighted", { enumerable: true, get: function () { return conversation_eval_1.aggregateWeighted; } });
|
|
93
|
+
Object.defineProperty(exports, "aggregateFinalTurn", { enumerable: true, get: function () { return conversation_eval_1.aggregateFinalTurn; } });
|
|
94
|
+
Object.defineProperty(exports, "aggregateMajority", { enumerable: true, get: function () { return conversation_eval_1.aggregateMajority; } });
|
|
95
|
+
Object.defineProperty(exports, "getAggregator", { enumerable: true, get: function () { return conversation_eval_1.getAggregator; } });
|
|
96
|
+
Object.defineProperty(exports, "getProblematicTurns", { enumerable: true, get: function () { return conversation_eval_1.getProblematicTurns; } });
|
|
97
|
+
Object.defineProperty(exports, "analyzeConversationTrend", { enumerable: true, get: function () { return conversation_eval_1.analyzeConversationTrend; } });
|
|
98
|
+
const transcript_patterns_1 = require("./api/transcript-patterns");
|
|
99
|
+
Object.defineProperty(exports, "transcriptPatterns", { enumerable: true, get: function () { return transcript_patterns_1.transcriptPatterns; } });
|
|
100
|
+
Object.defineProperty(exports, "isHighRisk", { enumerable: true, get: function () { return transcript_patterns_1.isHighRisk; } });
|
|
101
|
+
Object.defineProperty(exports, "getMatchesByCategory", { enumerable: true, get: function () { return transcript_patterns_1.getMatchesByCategory; } });
|
|
102
|
+
Object.defineProperty(exports, "getCriticalInsights", { enumerable: true, get: function () { return transcript_patterns_1.getCriticalInsights; } });
|
|
103
|
+
Object.defineProperty(exports, "hasPiiExposure", { enumerable: true, get: function () { return transcript_patterns_1.hasPiiExposure; } });
|
|
104
|
+
Object.defineProperty(exports, "hasFrustrationSignals", { enumerable: true, get: function () { return transcript_patterns_1.hasFrustrationSignals; } });
|
|
105
|
+
Object.defineProperty(exports, "hasEscalationRequest", { enumerable: true, get: function () { return transcript_patterns_1.hasEscalationRequest; } });
|
|
106
|
+
Object.defineProperty(exports, "getCategoryDistribution", { enumerable: true, get: function () { return transcript_patterns_1.getCategoryDistribution; } });
|
|
107
|
+
Object.defineProperty(exports, "getRecommendations", { enumerable: true, get: function () { return transcript_patterns_1.getRecommendations; } });
|
|
108
|
+
Object.defineProperty(exports, "needsAttention", { enumerable: true, get: function () { return transcript_patterns_1.needsAttention; } });
|
|
109
|
+
Object.defineProperty(exports, "sortMatchesBySeverity", { enumerable: true, get: function () { return transcript_patterns_1.sortMatchesBySeverity; } });
|
|
110
|
+
// API Key Management (Phase 2 Security)
|
|
111
|
+
const apiKeys_1 = require("./api/apiKeys");
|
|
112
|
+
Object.defineProperty(exports, "apiKeys", { enumerable: true, get: function () { return apiKeys_1.apiKeys; } });
|
|
113
|
+
Object.defineProperty(exports, "hasPermission", { enumerable: true, get: function () { return apiKeys_1.hasPermission; } });
|
|
114
|
+
Object.defineProperty(exports, "isApiKeyExpired", { enumerable: true, get: function () { return apiKeys_1.isExpired; } });
|
|
115
|
+
Object.defineProperty(exports, "isApiKeyValid", { enumerable: true, get: function () { return apiKeys_1.isValid; } });
|
|
116
|
+
Object.defineProperty(exports, "getTimeUntilExpiry", { enumerable: true, get: function () { return apiKeys_1.getTimeUntilExpiry; } });
|
|
117
|
+
Object.defineProperty(exports, "canAccessAgent", { enumerable: true, get: function () { return apiKeys_1.canAccessAgent; } });
|
|
118
|
+
// ROI Analytics API
|
|
119
|
+
const roi_analytics_1 = require("./api/roi-analytics");
|
|
120
|
+
Object.defineProperty(exports, "roiAnalytics", { enumerable: true, get: function () { return roi_analytics_1.roiAnalytics; } });
|
|
121
|
+
Object.defineProperty(exports, "calculateRevenueAtRisk", { enumerable: true, get: function () { return roi_analytics_1.calculateRevenueAtRisk; } });
|
|
122
|
+
Object.defineProperty(exports, "calculateAutomationSavings", { enumerable: true, get: function () { return roi_analytics_1.calculateAutomationSavings; } });
|
|
123
|
+
Object.defineProperty(exports, "formatCurrency", { enumerable: true, get: function () { return roi_analytics_1.formatCurrency; } });
|
|
124
|
+
Object.defineProperty(exports, "getROIQuality", { enumerable: true, get: function () { return roi_analytics_1.getROIQuality; } });
|
|
125
|
+
// Business Metrics API
|
|
126
|
+
const business_metrics_1 = require("./api/business-metrics");
|
|
127
|
+
Object.defineProperty(exports, "businessMetrics", { enumerable: true, get: function () { return business_metrics_1.businessMetrics; } });
|
|
128
|
+
Object.defineProperty(exports, "isMetricReady", { enumerable: true, get: function () { return business_metrics_1.isMetricReady; } });
|
|
129
|
+
Object.defineProperty(exports, "needsMoreTraces", { enumerable: true, get: function () { return business_metrics_1.needsMoreTraces; } });
|
|
130
|
+
Object.defineProperty(exports, "awaitingExternalData", { enumerable: true, get: function () { return business_metrics_1.awaitingExternalData; } });
|
|
131
|
+
Object.defineProperty(exports, "isMetricStale", { enumerable: true, get: function () { return business_metrics_1.isMetricStale; } });
|
|
132
|
+
Object.defineProperty(exports, "getStatusMessage", { enumerable: true, get: function () { return business_metrics_1.getStatusMessage; } });
|
|
133
|
+
Object.defineProperty(exports, "getTraceProgress", { enumerable: true, get: function () { return business_metrics_1.getTraceProgress; } });
|
|
134
|
+
Object.defineProperty(exports, "formatMetricValue", { enumerable: true, get: function () { return business_metrics_1.formatMetricValue; } });
|
|
135
|
+
Object.defineProperty(exports, "getTrendEmoji", { enumerable: true, get: function () { return business_metrics_1.getTrendEmoji; } });
|
|
136
|
+
// Quality Metrics API
|
|
137
|
+
const quality_metrics_1 = require("./api/quality-metrics");
|
|
138
|
+
Object.defineProperty(exports, "qualityMetrics", { enumerable: true, get: function () { return quality_metrics_1.qualityMetrics; } });
|
|
139
|
+
Object.defineProperty(exports, "passesQualityThreshold", { enumerable: true, get: function () { return quality_metrics_1.passesQualityThreshold; } });
|
|
140
|
+
Object.defineProperty(exports, "isHallucinationRiskAcceptable", { enumerable: true, get: function () { return quality_metrics_1.isHallucinationRiskAcceptable; } });
|
|
141
|
+
Object.defineProperty(exports, "getQualityRecommendations", { enumerable: true, get: function () { return quality_metrics_1.getQualityRecommendations; } });
|
|
142
|
+
Object.defineProperty(exports, "formatQualityScore", { enumerable: true, get: function () { return quality_metrics_1.formatQualityScore; } });
|
|
143
|
+
Object.defineProperty(exports, "getGradeColor", { enumerable: true, get: function () { return quality_metrics_1.getGradeColor; } });
|
|
56
144
|
// Integrations
|
|
57
145
|
const ticket_linking_1 = require("./integrations/ticket-linking");
|
|
58
146
|
Object.defineProperty(exports, "linking", { enumerable: true, get: function () { return ticket_linking_1.linking; } });
|
|
@@ -291,59 +379,159 @@ function traceChain(options, fn) {
|
|
|
291
379
|
});
|
|
292
380
|
}
|
|
293
381
|
// ============================================================================
|
|
294
|
-
// V2
|
|
382
|
+
// V2 TERMINOLOGY - ISSUES API (replaces Cases)
|
|
383
|
+
// Per ITIL best practices, "Issues" is more customer-friendly than "Cases"
|
|
295
384
|
// ============================================================================
|
|
296
385
|
/**
|
|
297
|
-
*
|
|
298
|
-
*
|
|
386
|
+
* Issues API client
|
|
387
|
+
* This is the recommended API for managing clustered failure patterns
|
|
388
|
+
*
|
|
389
|
+
* @since 3.1.0
|
|
299
390
|
*/
|
|
300
|
-
exports.
|
|
391
|
+
exports.issues = {
|
|
392
|
+
/**
|
|
393
|
+
* List issues for an agent
|
|
394
|
+
*/
|
|
395
|
+
async list(agentId, options) {
|
|
396
|
+
const params = new URLSearchParams({ agentId });
|
|
397
|
+
if (options?.status)
|
|
398
|
+
params.set('status', options.status);
|
|
399
|
+
if (options?.startDate)
|
|
400
|
+
params.set('startDate', options.startDate.toISOString());
|
|
401
|
+
if (options?.endDate)
|
|
402
|
+
params.set('endDate', options.endDate.toISOString());
|
|
403
|
+
if (options?.limit)
|
|
404
|
+
params.set('limit', options.limit.toString());
|
|
405
|
+
if (options?.offset)
|
|
406
|
+
params.set('offset', options.offset.toString());
|
|
407
|
+
const response = await (0, client_1.apiRequestWithData)(`/issues?${params}`, { apiVersion: 'v2' });
|
|
408
|
+
return response.data || response;
|
|
409
|
+
},
|
|
301
410
|
/**
|
|
302
|
-
*
|
|
303
|
-
* @deprecated Use runs.create() + claims.getRunAnalysis() instead
|
|
411
|
+
* Get a single issue by ID
|
|
304
412
|
*/
|
|
305
|
-
async
|
|
306
|
-
|
|
413
|
+
async get(id) {
|
|
414
|
+
const response = await (0, client_1.apiRequestWithData)(`/issues/${id}`, { apiVersion: 'v2' });
|
|
415
|
+
return response.data || response;
|
|
416
|
+
},
|
|
417
|
+
/**
|
|
418
|
+
* Create a new issue
|
|
419
|
+
*/
|
|
420
|
+
async create(data) {
|
|
421
|
+
const response = await (0, client_1.apiRequestWithData)('/issues', {
|
|
422
|
+
method: 'POST',
|
|
423
|
+
body: data,
|
|
424
|
+
apiVersion: 'v2',
|
|
425
|
+
});
|
|
426
|
+
return response.data || response;
|
|
427
|
+
},
|
|
428
|
+
/**
|
|
429
|
+
* Update an issue
|
|
430
|
+
*/
|
|
431
|
+
async update(id, data) {
|
|
432
|
+
const response = await (0, client_1.apiRequestWithData)(`/issues/${id}`, {
|
|
433
|
+
method: 'PATCH',
|
|
434
|
+
body: data,
|
|
435
|
+
apiVersion: 'v2',
|
|
436
|
+
});
|
|
437
|
+
return response.data || response;
|
|
438
|
+
},
|
|
439
|
+
/**
|
|
440
|
+
* Get fixes for an issue
|
|
441
|
+
*/
|
|
442
|
+
async getFixes(issueId) {
|
|
443
|
+
const response = await (0, client_1.apiRequestWithData)(`/issues/${issueId}/fixes`, { apiVersion: 'v2' });
|
|
444
|
+
return response.data || response;
|
|
445
|
+
},
|
|
446
|
+
};
|
|
447
|
+
// ============================================================================
|
|
448
|
+
// V2 TERMINOLOGY - ANALYZER API (replaces Explainer user-facing)
|
|
449
|
+
// Per industry distinction: Analyzer = pattern detection/observation
|
|
450
|
+
// ============================================================================
|
|
451
|
+
/**
|
|
452
|
+
* Analyzer API client
|
|
453
|
+
* User-selected trace analysis with cost estimation and smart sampling
|
|
454
|
+
*
|
|
455
|
+
* Key improvements over v1 Explainer:
|
|
456
|
+
* - User-selected trace analysis (not automatic)
|
|
457
|
+
* - Cost estimation before execution
|
|
458
|
+
* - Smart sampling strategies
|
|
459
|
+
* - Root cause analysis by layer
|
|
460
|
+
* - Pattern aggregation across traces
|
|
461
|
+
*
|
|
462
|
+
* @since 3.1.0
|
|
463
|
+
*/
|
|
464
|
+
exports.analyzer = {
|
|
465
|
+
/**
|
|
466
|
+
* Analyze specific traces (user-selected)
|
|
467
|
+
*/
|
|
468
|
+
async analyze(options) {
|
|
469
|
+
const { traceIds, tier, includeRootCause, includeLayers } = options;
|
|
470
|
+
const response = await (0, client_1.apiRequestWithData)('/analyzer/analyze', {
|
|
307
471
|
method: 'POST',
|
|
308
472
|
body: {
|
|
309
|
-
|
|
310
|
-
userMessage: traceData.userMessage,
|
|
311
|
-
agentResponse: traceData.agentResponse,
|
|
312
|
-
userIntent: traceData.userIntent,
|
|
313
|
-
outcome: traceData.outcome || 'success',
|
|
314
|
-
duration: traceData.duration,
|
|
315
|
-
sessionId: traceData.sessionId,
|
|
316
|
-
conversationHistory: traceData.conversationHistory,
|
|
317
|
-
metadata: traceData.metadata,
|
|
318
|
-
},
|
|
319
|
-
spans: traceData.spans,
|
|
320
|
-
businessContext: traceData.businessContext,
|
|
473
|
+
traceIds,
|
|
321
474
|
options: {
|
|
322
|
-
tier
|
|
323
|
-
|
|
324
|
-
|
|
475
|
+
tier,
|
|
476
|
+
includeRootCause,
|
|
477
|
+
includeLayers,
|
|
325
478
|
},
|
|
326
479
|
},
|
|
327
|
-
apiVersion: '
|
|
480
|
+
apiVersion: 'v2',
|
|
328
481
|
});
|
|
482
|
+
return response.data || response;
|
|
329
483
|
},
|
|
330
484
|
/**
|
|
331
|
-
*
|
|
332
|
-
|
|
485
|
+
* Analyze traces by time window
|
|
486
|
+
*/
|
|
487
|
+
async analyzeWindow(options) {
|
|
488
|
+
const response = await (0, client_1.apiRequestWithData)('/analyzer/analyze-window', {
|
|
489
|
+
method: 'POST',
|
|
490
|
+
body: {
|
|
491
|
+
...options,
|
|
492
|
+
startDate: options.startDate.toISOString(),
|
|
493
|
+
endDate: options.endDate.toISOString(),
|
|
494
|
+
},
|
|
495
|
+
apiVersion: 'v2',
|
|
496
|
+
});
|
|
497
|
+
return response.data || response;
|
|
498
|
+
},
|
|
499
|
+
/**
|
|
500
|
+
* Estimate cost before running analysis
|
|
501
|
+
*/
|
|
502
|
+
async estimateCost(options) {
|
|
503
|
+
const response = await (0, client_1.apiRequestWithData)('/analyzer/estimate-cost', {
|
|
504
|
+
method: 'POST',
|
|
505
|
+
body: {
|
|
506
|
+
...options,
|
|
507
|
+
startDate: options.startDate?.toISOString(),
|
|
508
|
+
endDate: options.endDate?.toISOString(),
|
|
509
|
+
},
|
|
510
|
+
apiVersion: 'v2',
|
|
511
|
+
});
|
|
512
|
+
return response.data || response;
|
|
513
|
+
},
|
|
514
|
+
/**
|
|
515
|
+
* Get analysis results for a specific trace
|
|
333
516
|
*/
|
|
334
517
|
async get(traceId) {
|
|
335
|
-
|
|
518
|
+
const response = await (0, client_1.apiRequestWithData)(`/analyzer/${traceId}`, { apiVersion: 'v2' });
|
|
519
|
+
return response.data || response;
|
|
336
520
|
},
|
|
337
521
|
/**
|
|
338
|
-
*
|
|
339
|
-
* @deprecated
|
|
522
|
+
* Aggregate insights across multiple analyzed traces
|
|
340
523
|
*/
|
|
341
|
-
async
|
|
342
|
-
|
|
524
|
+
async summarize(options) {
|
|
525
|
+
const response = await (0, client_1.apiRequestWithData)('/analyzer/summarize', {
|
|
343
526
|
method: 'POST',
|
|
344
|
-
body:
|
|
345
|
-
|
|
527
|
+
body: {
|
|
528
|
+
...options,
|
|
529
|
+
startDate: options.startDate?.toISOString(),
|
|
530
|
+
endDate: options.endDate?.toISOString(),
|
|
531
|
+
},
|
|
532
|
+
apiVersion: 'v2',
|
|
346
533
|
});
|
|
534
|
+
return response.data || response;
|
|
347
535
|
},
|
|
348
536
|
};
|
|
349
537
|
// ============================================================================
|
|
@@ -398,8 +586,22 @@ exports.default = {
|
|
|
398
586
|
calibration: calibration_1.calibration,
|
|
399
587
|
linking: ticket_linking_1.linking,
|
|
400
588
|
customerContext: customer_context_1.customerContext,
|
|
401
|
-
//
|
|
402
|
-
|
|
589
|
+
// Evaluation APIs
|
|
590
|
+
humanReview: human_review_1.humanReview,
|
|
591
|
+
nondeterminism: nondeterminism_1.nondeterminism,
|
|
592
|
+
evalHealth: eval_health_1.evalHealth,
|
|
593
|
+
deterministicGraders: deterministic_graders_1.deterministicGraders,
|
|
594
|
+
conversationEval: conversation_eval_1.conversationEval,
|
|
595
|
+
transcriptPatterns: transcript_patterns_1.transcriptPatterns,
|
|
596
|
+
// API Key Management (Phase 2 Security)
|
|
597
|
+
apiKeys: apiKeys_1.apiKeys,
|
|
598
|
+
// Issues and Analyzer APIs
|
|
599
|
+
issues: exports.issues,
|
|
600
|
+
analyzer: exports.analyzer,
|
|
601
|
+
// ROI Analytics, Quality Metrics, and Business Metrics
|
|
602
|
+
roiAnalytics: roi_analytics_1.roiAnalytics,
|
|
603
|
+
qualityMetrics: quality_metrics_1.qualityMetrics,
|
|
604
|
+
businessMetrics: business_metrics_1.businessMetrics,
|
|
403
605
|
// Helpers
|
|
404
606
|
generateZendeskMarker: ticket_linking_1.generateZendeskMarker,
|
|
405
607
|
parseZendeskMarker: ticket_linking_1.parseZendeskMarker,
|
|
@@ -410,5 +612,19 @@ exports.default = {
|
|
|
410
612
|
isInference: claims_1.isInference,
|
|
411
613
|
calculateBrierScore: calibration_1.calculateBrierScore,
|
|
412
614
|
isWellCalibrated: calibration_1.isWellCalibrated,
|
|
615
|
+
calculatePassAtK: nondeterminism_1.calculatePassAtK,
|
|
616
|
+
isReliableEvaluation: nondeterminism_1.isReliableEvaluation,
|
|
617
|
+
isHighRisk: transcript_patterns_1.isHighRisk,
|
|
618
|
+
needsAttention: transcript_patterns_1.needsAttention,
|
|
619
|
+
// ROI helpers
|
|
620
|
+
calculateRevenueAtRisk: roi_analytics_1.calculateRevenueAtRisk,
|
|
621
|
+
formatCurrency: roi_analytics_1.formatCurrency,
|
|
622
|
+
// Quality helpers
|
|
623
|
+
passesQualityThreshold: quality_metrics_1.passesQualityThreshold,
|
|
624
|
+
isHallucinationRiskAcceptable: quality_metrics_1.isHallucinationRiskAcceptable,
|
|
625
|
+
// Business Metrics helpers
|
|
626
|
+
isMetricReady: business_metrics_1.isMetricReady,
|
|
627
|
+
needsMoreTraces: business_metrics_1.needsMoreTraces,
|
|
628
|
+
getStatusMessage: business_metrics_1.getStatusMessage,
|
|
413
629
|
};
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFvSEgsb0JBdURDO0FBS0QsOEJBS0M7QUFLRCw0QkFRQztBQVNELDRCQXVDQztBQUtELHdDQXVDQztBQUtELDhCQXFDQztBQUtELGdDQW1DQztBQTlXRCw0Q0FBb0U7QUFDcEUsd0ZBQTZFO0FBQzdFLHdEQUFvRDtBQUNwRCxrRUFBbUU7QUFDbkUsa0VBQW1FO0FBRW5FLE9BQU87QUFDUCwwQ0FRdUI7QUE2ZGQsOEZBbGVQLHNCQUFhLE9Ba2VPO0FBQUUsNEZBL2R0QixvQkFBVyxPQStkc0I7QUFBRSxpR0E5ZG5DLHlCQUFnQixPQThkbUM7QUE1ZHJELDBDQUE0RztBQTJnQm5HLGtHQTNnQmdDLDBCQUFpQixPQTJnQmhDO0FBQUUseUdBM2dCZ0MsaUNBQXdCLE9BMmdCaEM7QUF6Z0JwRCxjQUFjO0FBQ2QscUNBQThGO0FBNmQ1RixxRkE3ZE8sV0FBSSxPQTZkUDtBQVVKLHFHQXZlYSwyQkFBb0IsT0F1ZWI7QUFDcEIsaUdBeGVtQyx1QkFBZ0IsT0F3ZW5DO0FBQ2hCLG1HQXplcUQseUJBQWtCLE9BeWVyRDtBQXhlcEIseUNBUXNCO0FBcWRwQix1RkE1ZEEsZUFBTSxPQTRkQTtBQWFOLHVGQXhlQSxlQUFNLE9Bd2VBO0FBQ04sNEZBeGVBLG9CQUFXLE9Bd2VBO0FBQ1gsMkZBeGVBLG1CQUFVLE9Bd2VBO0FBQ1Ysd0dBeGVBLGdDQUF1QixPQXdlQTtBQUN2QixrR0F4ZUEsMEJBQWlCLE9Bd2VBO0FBQ2pCLHNHQXhlQSw4QkFBcUIsT0F3ZUE7QUF0ZXZCLG1EQU0yQjtBQStjekIsNEZBcGRBLHlCQUFXLE9Bb2RBO0FBbUJYLG9HQXRlQSxpQ0FBbUIsT0FzZUE7QUFDbkIsNkZBdGVBLDBCQUFZLE9Bc2VBO0FBQ1osaUdBdGVBLDhCQUFnQixPQXNlQTtBQUNoQixzR0F0ZUEsbUNBQXFC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V0FBSTtJQUNKLE1BQU0sRUFBTixlQUFNO0lBQ04sV0FBVyxFQUFYLHlCQUFXO0lBQ1gsT0FBTyxFQUFQLHdCQUFPO0lBQ1AsZUFBZSxFQUFmLGtDQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLFNBQVMsRUFBVCxpQkFBUztJQUNULFVBQVU7SUFDVixxQkFBcUIsRUFBckIsc0NBQXFCO0lBQ3JCLGtCQUFrQixFQUFsQixtQ0FBa0I7SUFDbEIsZUFBZSxFQUFmLGdDQUFlO0lBQ2Ysb0JBQW9CLEVBQXBCLDJCQUFvQjtJQUNwQixZQUFZO0lBQ1osTUFBTSxFQUFOLGVBQU07SUFDTixXQUFXLEVBQVgsb0JBQVc7SUFDWCxtQkFBbUIsRUFBbkIsaUNBQW1CO0lBQ25CLGdCQUFnQixFQUFoQiw4QkFBZ0I7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wLjBcbiAqXG4gKiBSdW4tY2VudHJpYyBBSSBhZ2VudCBvYnNlcnZhYmlsaXR5IHBsYXRmb3JtIHdpdGg6XG4gKiAtIEZhY3RzIHZzIEluZmVyZW5jZXMgKGNsYWltcyBBUEkpXG4gKiAtIERldGVybWluaXN0aWMgdGlja2V0IGxpbmtpbmcgKDcgbWV0aG9kcylcbiAqIC0gQ3VzdG9tZXIgY29udGV4dCBzbmFwc2hvdHMgKHRpbWUtc2VyaWVzKVxuICogLSBDYWxpYnJhdGVkIHByZWRpY3Rpb25zIChCcmllciBzY29yZXMpXG4gKlxuICogQHZlcnNpb24gMy4wLjBcbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbmltcG9ydCB7IHRyYWNlLCBjb250ZXh0LCBTcGFuU3RhdHVzQ29kZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBPVExQVHJhY2VFeHBvcnRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8nO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgTm9kZVRyYWNlclByb3ZpZGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGUnO1xuaW1wb3J0IHsgQmF0Y2hTcGFuUHJvY2Vzc29yIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UnO1xuXG4vLyBDb3JlXG5pbXBvcnQge1xuICBpbml0Q29uZmlnLFxuICBnZXRDb25maWcsXG4gIGlzSW5pdGlhbGl6ZWQsXG4gIHJlc2V0Q29uZmlnLFxuICBkZWJ1Z0xvZyxcbiAgU0RLX1ZFUlNJT04sXG4gIERFRkFVTFRfRU5EUE9JTlQsXG59IGZyb20gJy4vY29yZS9jb25maWcnO1xuaW1wb3J0IHsgYXBpUmVxdWVzdCwgYXBpUmVxdWVzdFdpdGhEYXRhLCBUaGlua0hpdmVBcGlFcnJvciwgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9jb3JlL2NsaWVudCc7XG5cbi8vIEFQSSBjbGllbnRzXG5pbXBvcnQgeyBydW5zLCBjcmVhdGVSdW5XaXRoQ29udGV4dCwgdG9PcGVuQUlNZXNzYWdlcywgZnJvbU9wZW5BSU1lc3NhZ2VzIH0gZnJvbSAnLi9hcGkvcnVucyc7XG5pbXBvcnQge1xuICBjbGFpbXMsXG4gIGlzRmFjdCxcbiAgaXNJbmZlcmVuY2UsXG4gIGlzQ29tcHV0ZWQsXG4gIGdldEhpZ2hDb25maWRlbmNlQ2xhaW1zLFxuICBncm91cENsYWltc0J5VHlwZSxcbiAgZ3JvdXBDbGFpbXNCeUNhdGVnb3J5LFxufSBmcm9tICcuL2FwaS9jbGFpbXMnO1xuaW1wb3J0IHtcbiAgY2FsaWJyYXRpb24sXG4gIGNhbGN1bGF0ZUJyaWVyU2NvcmUsXG4gIGNhbGN1bGF0ZUVDRSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbiAgZ2V0Q2FsaWJyYXRpb25RdWFsaXR5LFxufSBmcm9tICcuL2FwaS9jYWxpYnJhdGlvbic7XG5cbi8vIEludGVncmF0aW9uc1xuaW1wb3J0IHtcbiAgbGlua2luZyxcbiAgZ2VuZXJhdGVaZW5kZXNrTWFya2VyLFxuICBwYXJzZVplbmRlc2tNYXJrZXIsXG4gIGhhc1plbmRlc2tNYXJrZXIsXG4gIHJlbW92ZVplbmRlc2tNYXJrZXIsXG4gIGxpbmtSdW5Ub1RpY2tldCxcbiAgbGlua1J1blRvWmVuZGVza1RpY2tldCxcbiAgZ2V0QmVzdExpbmtNZXRob2QsXG4gIExJTktfTUVUSE9EX0NPTkZJREVOQ0UsXG59IGZyb20gJy4vaW50ZWdyYXRpb25zL3RpY2tldC1saW5raW5nJztcbmltcG9ydCB7XG4gIGN1c3RvbWVyQ29udGV4dCxcbiAgY2FwdHVyZUN1c3RvbWVyQ29udGV4dCxcbiAgZ2V0Q29udGV4dEFzT2YsXG4gIHRvQ29udGV4dFNuYXBzaG90LFxuICBjYWxjdWxhdGVBcnJDaGFuZ2UsXG4gIGNhbGN1bGF0ZUhlYWx0aFRyZW5kLFxufSBmcm9tICcuL2ludGVncmF0aW9ucy9jdXN0b21lci1jb250ZXh0JztcblxuLy8gUmUtZXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEluaXRPcHRpb25zLFxuICBGcmFtZXdvcmssXG4gIFJ1bk9wdGlvbnMsXG4gIFJ1bk91dGNvbWUsXG4gIENvbnZlcnNhdGlvbk1lc3NhZ2UsXG4gIEN1c3RvbWVyQ29udGV4dFNuYXBzaG90LFxuICBUaWNrZXRMaW5raW5nT3B0aW9ucyxcbiAgTGlua01ldGhvZCxcbiAgVHJhY2VPcHRpb25zLFxuICBTcGFuRGF0YSxcbiAgQnVzaW5lc3NDb250ZXh0LFxuICBDbGFpbSxcbiAgQ2xhaW1UeXBlLFxuICBDbGFpbUNhdGVnb3J5LFxuICBDb25maWRlbmNlQ2FsaWJyYXRpb24sXG4gIEV2aWRlbmNlUmVmZXJlbmNlLFxuICBBbmFseXNpc1Jlc3VsdCxcbiAgQ2FsaWJyYXRpb25TdGF0dXMsXG4gIENhbGlicmF0aW9uQnVja2V0LFxuICBQcmVkaWN0aW9uVHlwZSxcbiAgUm9pQ29uZmlnLFxuICBSb2lTdW1tYXJ5LFxuICBFeHBsYWluYWJpbGl0eVJlc3VsdCxcbiAgQXBpUmVzcG9uc2UsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBSdW5SZXNwb25zZSxcbn0gZnJvbSAnLi9jb3JlL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR0xPQkFMIFNUQVRFXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmxldCB0cmFjZXI6IFJldHVyblR5cGU8dHlwZW9mIHRyYWNlLmdldFRyYWNlcj4gfCBudWxsID0gbnVsbDtcbmxldCBwcm92aWRlcjogTm9kZVRyYWNlclByb3ZpZGVyIHwgbnVsbCA9IG51bGw7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOSVRJQUxJWkFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBUaGlua0hpdmUgU0RLIHYzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGluaXQgfSBmcm9tICdAdGhpbmtoaXZlL3Nkayc7XG4gKlxuICogaW5pdCh7XG4gKiAgIGFwaUtleTogJ3RoX3lvdXJfYXBpX2tleScsXG4gKiAgIHNlcnZpY2VOYW1lOiAnbXktYWktYWdlbnQnLFxuICogICBhdXRvSW5zdHJ1bWVudDogdHJ1ZSxcbiAqICAgZnJhbWV3b3JrczogWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdChvcHRpb25zOiBpbXBvcnQoJy4vY29yZS90eXBlcycpLkluaXRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkge1xuICAgIGRlYnVnTG9nKCdUaGlua0hpdmUgU0RLIGFscmVhZHkgaW5pdGlhbGl6ZWQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBpbml0Q29uZmlnKG9wdGlvbnMpO1xuXG4gIC8vIENvbmZpZ3VyZSBPVExQIGV4cG9ydGVyXG4gIGNvbnN0IGV4cG9ydGVySGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoY29uZmlnLmFwaUtleSkge1xuICAgIGV4cG9ydGVySGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NvbmZpZy5hcGlLZXl9YDtcbiAgfSBlbHNlIGlmIChjb25maWcuYWdlbnRJZCkge1xuICAgIGV4cG9ydGVySGVhZGVyc1snWC1BZ2VudC1JRCddID0gY29uZmlnLmFnZW50SWQ7XG4gIH1cblxuICBjb25zdCBleHBvcnRlciA9IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7XG4gICAgdXJsOiBgJHtjb25maWcuZW5kcG9pbnR9L3YxL3RyYWNlc2AsXG4gICAgaGVhZGVyczogZXhwb3J0ZXJIZWFkZXJzLFxuICB9KTtcblxuICAvLyBDcmVhdGUgT3BlblRlbGVtZXRyeSByZXNvdXJjZVxuICBjb25zdCByZXNvdXJjZSA9IFJlc291cmNlLmRlZmF1bHQoKS5tZXJnZShcbiAgICBuZXcgUmVzb3VyY2Uoe1xuICAgICAgJ3NlcnZpY2UubmFtZSc6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICd0aGlua2hpdmUuc2RrLnZlcnNpb24nOiBTREtfVkVSU0lPTixcbiAgICAgICd0aGlua2hpdmUuc2RrLmxhbmd1YWdlJzogJ3R5cGVzY3JpcHQnLFxuICAgICAgJ3RoaW5raGl2ZS5hcGkudmVyc2lvbic6IGNvbmZpZy5hcGlWZXJzaW9uLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gQ3JlYXRlIHByb3ZpZGVyIHdpdGggc3BhbiBwcm9jZXNzb3JcbiAgcHJvdmlkZXIgPSBuZXcgTm9kZVRyYWNlclByb3ZpZGVyKHtcbiAgICByZXNvdXJjZSxcbiAgICBzcGFuUHJvY2Vzc29yczogW25ldyBCYXRjaFNwYW5Qcm9jZXNzb3IoZXhwb3J0ZXIpXSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXIgcHJvdmlkZXJcbiAgcHJvdmlkZXIucmVnaXN0ZXIoKTtcblxuICAvLyBHZXQgdHJhY2VyXG4gIHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcigndGhpbmtoaXZlJywgU0RLX1ZFUlNJT04pO1xuXG4gIGlmIChjb25maWcuZGVidWcpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyFIFRoaW5rSGl2ZSBTREsgdiR7U0RLX1ZFUlNJT059IGluaXRpYWxpemVkYCk7XG4gICAgY29uc29sZS5sb2coYCAgIEVuZHBvaW50OiAke2NvbmZpZy5lbmRwb2ludH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgU2VydmljZTogJHtjb25maWcuc2VydmljZU5hbWV9YCk7XG4gICAgY29uc29sZS5sb2coYCAgIEFQSSBWZXJzaW9uOiAke2NvbmZpZy5hcGlWZXJzaW9ufWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBBdXRvLWluc3RydW1lbnQ6ICR7Y29uZmlnLmF1dG9JbnN0cnVtZW50fWApO1xuICB9XG5cbiAgLy8gU2V0dXAgYXV0by1pbnN0cnVtZW50YXRpb24gaWYgZW5hYmxlZFxuICBpZiAoY29uZmlnLmF1dG9JbnN0cnVtZW50KSB7XG4gICAgc2V0dXBBdXRvSW5zdHJ1bWVudGF0aW9uKGNvbmZpZy5mcmFtZXdvcmtzKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIHRyYWNlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhY2VyKCkge1xuICBpZiAoIXRyYWNlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpbmtIaXZlIFNESyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LicpO1xuICB9XG4gIHJldHVybiB0cmFjZXI7XG59XG5cbi8qKlxuICogU2h1dGRvd24gdGhlIFNESyBhbmQgZmx1c2ggcGVuZGluZyBzcGFuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwcm92aWRlcikge1xuICAgIGF3YWl0IHByb3ZpZGVyLnNodXRkb3duKCk7XG4gICAgcHJvdmlkZXIgPSBudWxsO1xuICB9XG4gIHRyYWNlciA9IG51bGw7XG4gIHJlc2V0Q29uZmlnKCk7XG4gIGRlYnVnTG9nKCdUaGlua0hpdmUgU0RLIHNodXRkb3duIGNvbXBsZXRlJyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRSQUNJTkcgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVHJhY2UgYW4gTExNIGNhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlTExNPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1vZGVsTmFtZT86IHN0cmluZztcbiAgICBwcm92aWRlcj86IHN0cmluZztcbiAgICBpbnB1dD86IHVua25vd247XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnTExNJyxcbiAgICAgICAgJ2xsbS5tb2RlbF9uYW1lJzogb3B0aW9ucy5tb2RlbE5hbWUsXG4gICAgICAgICdsbG0ucHJvdmlkZXInOiBvcHRpb25zLnByb3ZpZGVyLFxuICAgICAgICAnaW5wdXQudmFsdWUnOiBvcHRpb25zLmlucHV0ID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5pbnB1dCkuc3Vic3RyaW5nKDAsIDEwMDAwKSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdvdXRwdXQudmFsdWUnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpLnN1YnN0cmluZygwLCAxMDAwMCkpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZSB9KTtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkdXJhdGlvbl9tcycsIERhdGUubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIHJldHJpZXZhbCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlUmV0cmlldmFsPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHF1ZXJ5Pzogc3RyaW5nO1xuICAgIHRvcEs/OiBudW1iZXI7XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnUkVUUklFVkVSJyxcbiAgICAgICAgJ3JldHJpZXZhbC5xdWVyeSc6IG9wdGlvbnMucXVlcnksXG4gICAgICAgICdyZXRyaWV2YWwudG9wX2snOiBvcHRpb25zLnRvcEssXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ3JldHJpZXZhbC5kb2N1bWVudF9jb3VudCcsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFRyYWNlIGEgdG9vbCBjYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZVRvb2w8VD4oXG4gIG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gICAgcGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHQgPSBnZXRUcmFjZXIoKTtcblxuICByZXR1cm4gdC5zdGFydEFjdGl2ZVNwYW4oXG4gICAgb3B0aW9ucy50b29sTmFtZSB8fCBvcHRpb25zLm5hbWUsXG4gICAge1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAnb3BlbmluZmVyZW5jZS5zcGFuLmtpbmQnOiAnVE9PTCcsXG4gICAgICAgICd0b29sLm5hbWUnOiBvcHRpb25zLnRvb2xOYW1lIHx8IG9wdGlvbnMubmFtZSxcbiAgICAgICAgJ3Rvb2wucGFyYW1ldGVycyc6IG9wdGlvbnMucGFyYW1ldGVycyA/IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1ldGVycykgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgndG9vbC5vdXRwdXQnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpLnN1YnN0cmluZygwLCAxMDAwMCkpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZSB9KTtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkdXJhdGlvbl9tcycsIERhdGUubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIGNoYWluL3dvcmtmbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZUNoYWluPFQ+KFxuICBvcHRpb25zOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0PzogdW5rbm93bjtcbiAgfSxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB0ID0gZ2V0VHJhY2VyKCk7XG5cbiAgcmV0dXJuIHQuc3RhcnRBY3RpdmVTcGFuKFxuICAgIG9wdGlvbnMubmFtZSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICdvcGVuaW5mZXJlbmNlLnNwYW4ua2luZCc6ICdDSEFJTicsXG4gICAgICAgICdpbnB1dC52YWx1ZSc6IG9wdGlvbnMuaW5wdXQgPyBKU09OLnN0cmluZ2lmeShvcHRpb25zLmlucHV0KS5zdWJzdHJpbmcoMCwgMTAwMDApIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ291dHB1dC52YWx1ZScsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkuc3Vic3RyaW5nKDAsIDEwMDAwKSk7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWMiBDT01QQVRJQklMSVRZIC0gRVhQTEFJTkVSIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4cGxhaW5lciBBUEkgY2xpZW50ICh2MiBjb21wYXRpYmlsaXR5KVxuICogQGRlcHJlY2F0ZWQgVXNlIHJ1bnMgYW5kIGNsYWltcyBBUElzIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNvbnN0IGV4cGxhaW5lciA9IHtcbiAgLyoqXG4gICAqIEFuYWx5emUgYSB0cmFjZSAodjIgZm9ybWF0KVxuICAgKiBAZGVwcmVjYXRlZCBVc2UgcnVucy5jcmVhdGUoKSArIGNsYWltcy5nZXRSdW5BbmFseXNpcygpIGluc3RlYWRcbiAgICovXG4gIGFzeW5jIGFuYWx5emUoXG4gICAgdHJhY2VEYXRhOiBpbXBvcnQoJy4vY29yZS90eXBlcycpLlRyYWNlT3B0aW9ucyxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0aWVyPzogc3RyaW5nO1xuICAgICAgaW5jbHVkZVJhZ0V2YWx1YXRpb24/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZUhhbGx1Y2luYXRpb25DaGVjaz86IGJvb2xlYW47XG4gICAgICB3YWl0Rm9yUmVzdWx0PzogYm9vbGVhbjtcbiAgICAgIHdlYmhvb2tVcmw/OiBzdHJpbmc7XG4gICAgfSA9IHt9XG4gICk6IFByb21pc2U8aW1wb3J0KCcuL2NvcmUvdHlwZXMnKS5FeHBsYWluYWJpbGl0eVJlc3VsdD4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoJy9leHBsYWluZXIvYW5hbHl6ZScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICB0cmFjZToge1xuICAgICAgICAgIHVzZXJNZXNzYWdlOiB0cmFjZURhdGEudXNlck1lc3NhZ2UsXG4gICAgICAgICAgYWdlbnRSZXNwb25zZTogdHJhY2VEYXRhLmFnZW50UmVzcG9uc2UsXG4gICAgICAgICAgdXNlckludGVudDogdHJhY2VEYXRhLnVzZXJJbnRlbnQsXG4gICAgICAgICAgb3V0Y29tZTogdHJhY2VEYXRhLm91dGNvbWUgfHwgJ3N1Y2Nlc3MnLFxuICAgICAgICAgIGR1cmF0aW9uOiB0cmFjZURhdGEuZHVyYXRpb24sXG4gICAgICAgICAgc2Vzc2lvbklkOiB0cmFjZURhdGEuc2Vzc2lvbklkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbkhpc3Rvcnk6IHRyYWNlRGF0YS5jb252ZXJzYXRpb25IaXN0b3J5LFxuICAgICAgICAgIG1ldGFkYXRhOiB0cmFjZURhdGEubWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHNwYW5zOiB0cmFjZURhdGEuc3BhbnMsXG4gICAgICAgIGJ1c2luZXNzQ29udGV4dDogdHJhY2VEYXRhLmJ1c2luZXNzQ29udGV4dCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpZXI6IG9wdGlvbnMudGllcixcbiAgICAgICAgICBpbmNsdWRlUmFnRXZhbHVhdGlvbjogb3B0aW9ucy5pbmNsdWRlUmFnRXZhbHVhdGlvbiA/PyB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVIYWxsdWNpbmF0aW9uQ2hlY2s6IG9wdGlvbnMuaW5jbHVkZUhhbGx1Y2luYXRpb25DaGVjayA/PyB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIHByZXZpb3VzbHkgYW5hbHl6ZWQgdHJhY2VcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGFzeW5jIGdldCh0cmFjZUlkOiBzdHJpbmcpOiBQcm9taXNlPGltcG9ydCgnLi9jb3JlL3R5cGVzJykuRXhwbGFpbmFiaWxpdHlSZXN1bHQ+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKGAvZXhwbGFpbmVyLyR7dHJhY2VJZH1gLCB7IGFwaVZlcnNpb246ICd2MScgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0cmFjZXMgc2VtYW50aWNhbGx5XG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBhc3luYyBzZWFyY2gocGFyYW1zOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBmaWx0ZXJzPzoge1xuICAgICAgb3V0Y29tZT86IHN0cmluZztcbiAgICAgIG1pbkltcGFjdFNjb3JlPzogbnVtYmVyO1xuICAgICAgZGF0ZVJhbmdlPzogeyBmcm9tOiBEYXRlOyB0bzogRGF0ZSB9O1xuICAgIH07XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHtcbiAgICByZXN1bHRzOiBBcnJheTxpbXBvcnQoJy4vY29yZS90eXBlcycpLkV4cGxhaW5hYmlsaXR5UmVzdWx0ICYgeyBzaW1pbGFyaXR5OiBudW1iZXIgfT47XG4gICAgdG90YWw6IG51bWJlcjtcbiAgfT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoJy9leHBsYWluZXIvc2VhcmNoJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIH0pO1xuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVVUTy1JTlNUUlVNRU5UQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gc2V0dXBBdXRvSW5zdHJ1bWVudGF0aW9uKFxuICBmcmFtZXdvcmtzOiBpbXBvcnQoJy4vY29yZS90eXBlcycpLkZyYW1ld29ya1tdXG4pOiB2b2lkIHtcbiAgZGVidWdMb2coYFNldHRpbmcgdXAgYXV0by1pbnN0cnVtZW50YXRpb24gZm9yOiAke2ZyYW1ld29ya3Muam9pbignLCAnKX1gKTtcblxuICBmb3IgKGNvbnN0IGZyYW1ld29yayBvZiBmcmFtZXdvcmtzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAoZnJhbWV3b3JrKSB7XG4gICAgICAgIGNhc2UgJ29wZW5haSc6XG4gICAgICAgIGNhc2UgJ29wZW5haS1hc3Npc3RhbnRzJzpcbiAgICAgICAgICBkZWJ1Z0xvZygnT3BlbkFJIGluc3RydW1lbnRhdGlvbiByZWFkeSAodXNlIGluc3RydW1lbnRPcGVuQUlDbGllbnQpJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xhbmdjaGFpbic6XG4gICAgICAgIGNhc2UgJ2xhbmdncmFwaCc6XG4gICAgICAgICAgZGVidWdMb2coJ0xhbmdDaGFpbi9MYW5nR3JhcGggaW5zdHJ1bWVudGF0aW9uIHJlYWR5ICh1c2UgVGhpbmtIaXZlQ2FsbGJhY2tIYW5kbGVyKScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhbnRocm9waWMnOlxuICAgICAgICAgIGRlYnVnTG9nKCdBbnRocm9waWMgaW5zdHJ1bWVudGF0aW9uIHJlYWR5Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xsYW1haW5kZXgnOlxuICAgICAgICAgIGRlYnVnTG9nKCdMbGFtYUluZGV4IGluc3RydW1lbnRhdGlvbiByZWFkeScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICduOG4nOlxuICAgICAgICAgIGRlYnVnTG9nKCduOG4gaW5zdHJ1bWVudGF0aW9uIHJlYWR5Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ZvaWNlZmxvdyc6XG4gICAgICAgICAgZGVidWdMb2coJ1ZvaWNlZmxvdyBpbnN0cnVtZW50YXRpb24gcmVhZHknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGVidWdMb2coYEZhaWxlZCB0byBzZXR1cCAke2ZyYW1ld29ya30gaW5zdHJ1bWVudGF0aW9uOmAsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkUtRVhQT1JUUyAobm9uLWR1cGxpY2F0ZWQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFJlLWV4cG9ydCBmcm9tIGNvbmZpZyAobm90IHlldCBleHBvcnRlZClcbmV4cG9ydCB7IGlzSW5pdGlhbGl6ZWQsIFNES19WRVJTSU9OLCBERUZBVUxUX0VORFBPSU5UIH07XG5cbi8vIFJlLWV4cG9ydCBBUEkgY2xpZW50cyAodjMpXG5leHBvcnQge1xuICBydW5zLFxuICBjbGFpbXMsXG4gIGNhbGlicmF0aW9uLFxuICBsaW5raW5nLFxuICBjdXN0b21lckNvbnRleHQsXG59O1xuXG4vLyBSZS1leHBvcnQgaGVscGVyIGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgLy8gUnVucyBoZWxwZXJzXG4gIGNyZWF0ZVJ1bldpdGhDb250ZXh0LFxuICB0b09wZW5BSU1lc3NhZ2VzLFxuICBmcm9tT3BlbkFJTWVzc2FnZXMsXG4gIC8vIENsYWltcyBoZWxwZXJzXG4gIGlzRmFjdCxcbiAgaXNJbmZlcmVuY2UsXG4gIGlzQ29tcHV0ZWQsXG4gIGdldEhpZ2hDb25maWRlbmNlQ2xhaW1zLFxuICBncm91cENsYWltc0J5VHlwZSxcbiAgZ3JvdXBDbGFpbXNCeUNhdGVnb3J5LFxuICAvLyBDYWxpYnJhdGlvbiBoZWxwZXJzXG4gIGNhbGN1bGF0ZUJyaWVyU2NvcmUsXG4gIGNhbGN1bGF0ZUVDRSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbiAgZ2V0Q2FsaWJyYXRpb25RdWFsaXR5LFxuICAvLyBMaW5raW5nIGhlbHBlcnNcbiAgZ2VuZXJhdGVaZW5kZXNrTWFya2VyLFxuICBwYXJzZVplbmRlc2tNYXJrZXIsXG4gIGhhc1plbmRlc2tNYXJrZXIsXG4gIHJlbW92ZVplbmRlc2tNYXJrZXIsXG4gIGxpbmtSdW5Ub1RpY2tldCxcbiAgbGlua1J1blRvWmVuZGVza1RpY2tldCxcbiAgZ2V0QmVzdExpbmtNZXRob2QsXG4gIExJTktfTUVUSE9EX0NPTkZJREVOQ0UsXG4gIC8vIEN1c3RvbWVyIGNvbnRleHQgaGVscGVyc1xuICBjYXB0dXJlQ3VzdG9tZXJDb250ZXh0LFxuICBnZXRDb250ZXh0QXNPZixcbiAgdG9Db250ZXh0U25hcHNob3QsXG4gIGNhbGN1bGF0ZUFyckNoYW5nZSxcbiAgY2FsY3VsYXRlSGVhbHRoVHJlbmQsXG59O1xuXG4vLyBSZS1leHBvcnQgZXJyb3JzXG5leHBvcnQgeyBUaGlua0hpdmVBcGlFcnJvciwgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yIH07XG5cbi8vIERlZmF1bHQgZXhwb3J0IGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0LFxuICBnZXRUcmFjZXIsXG4gIHNodXRkb3duLFxuICBpc0luaXRpYWxpemVkLFxuICAvLyBUcmFjaW5nXG4gIHRyYWNlTExNLFxuICB0cmFjZVJldHJpZXZhbCxcbiAgdHJhY2VUb29sLFxuICB0cmFjZUNoYWluLFxuICAvLyBBUEkgY2xpZW50c1xuICBydW5zLFxuICBjbGFpbXMsXG4gIGNhbGlicmF0aW9uLFxuICBsaW5raW5nLFxuICBjdXN0b21lckNvbnRleHQsXG4gIC8vIFYyIGNvbXBhdGliaWxpdHlcbiAgZXhwbGFpbmVyLFxuICAvLyBIZWxwZXJzXG4gIGdlbmVyYXRlWmVuZGVza01hcmtlcixcbiAgcGFyc2VaZW5kZXNrTWFya2VyLFxuICBsaW5rUnVuVG9UaWNrZXQsXG4gIGNyZWF0ZVJ1bldpdGhDb250ZXh0LFxuICAvLyBVdGlsaXRpZXNcbiAgaXNGYWN0LFxuICBpc0luZmVyZW5jZSxcbiAgY2FsY3VsYXRlQnJpZXJTY29yZSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbn07XG4iXX0=
|
|
630
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7OztBQXVVSCxvQkF1REM7QUFLRCw4QkFLQztBQUtELDRCQVFDO0FBU0QsNEJBdUNDO0FBS0Qsd0NBdUNDO0FBS0QsOEJBcUNDO0FBS0QsZ0NBbUNDO0FBamtCRCw0Q0FBb0U7QUFDcEUsd0ZBQTZFO0FBQzdFLHdEQUFvRDtBQUNwRCxrRUFBbUU7QUFDbkUsa0VBQW1FO0FBRW5FLE9BQU87QUFDUCwwQ0FRdUI7QUE4ekJkLDhGQW4wQlAsc0JBQWEsT0FtMEJPO0FBQUUsNEZBaDBCdEIsb0JBQVcsT0FnMEJzQjtBQUFFLGlHQS96Qm5DLHlCQUFnQixPQSt6Qm1DO0FBN3pCckQsMENBU3VCO0FBbzdCckIsK0ZBMzdCQSx1QkFBYyxPQTI3QkE7QUFDZCxrR0EzN0JBLDBCQUFpQixPQTI3QkE7QUFDakIseUdBMzdCQSxpQ0FBd0IsT0EyN0JBO0FBQ3hCLHNHQTM3QkEsOEJBQXFCLE9BMjdCQTtBQUNyQixnR0EzN0JBLHdCQUFlLE9BMjdCQTtBQUNmLCtGQTM3QkEsdUJBQWMsT0EyN0JBO0FBQ2QsaUdBMzdCQSx5QkFBZ0IsT0EyN0JBO0FBeDdCbEIsY0FBYztBQUNkLHFDQUE4RjtBQXF6QjVGLHFGQXJ6Qk8sV0FBSSxPQXF6QlA7QUF5QkoscUdBOTBCYSwyQkFBb0IsT0E4MEJiO0FBQ3BCLGlHQS8wQm1DLHVCQUFnQixPQSswQm5DO0FBQ2hCLG1HQWgxQnFELHlCQUFrQixPQWcxQnJEO0FBLzBCcEIseUNBUXNCO0FBNnlCcEIsdUZBcHpCQSxlQUFNLE9Bb3pCQTtBQTRCTix1RkEvMEJBLGVBQU0sT0ErMEJBO0FBQ04sNEZBLzBCQSxvQkFBVyxPQSswQkE7QUFDWCwyRkEvMEJBLG1CQUFVLE9BKzBCQTtBQUNWLHdHQS8wQkEsZ0NBQXVCLE9BKzBCQTtBQUN2QixrR0EvMEJBLDBCQUFpQixPQSswQkE7QUFDakIsc0dBLzBCQSw4QkFBcUIsT0ErMEJBO0FBNzBCdkIsbURBTTJCO0FBdXlCekIsNEZBNXlCQSx5QkFBVyxPQTR5QkE7QUFrQ1gsb0dBNzBCQSxpQ0FBbUIsT0E2MEJBO0FBQ25CLDZGQTcwQkEsMEJBQVksT0E2MEJBO0FBQ1osaUdBNzBCQSw4QkFBZ0IsT0E2MEJBO0FBQ2hCLHNHQTcwQkEsbUNBQXFCLE9BNjBCQTtBQTEwQnZCLHNCQUFzQjtBQUN0QixxREFBaUQ7QUF3eUIvQyw0RkF4eUJPLDBCQUFXLE9Bd3lCUDtBQXZ5QmIseURBTzhCO0FBaXlCNUIsK0ZBdnlCQSwrQkFBYyxPQXV5QkE7QUFpRGQsaUdBdjFCQSxpQ0FBZ0IsT0F1MUJBO0FBQ2hCLGlHQXYxQkEsaUNBQWdCLE9BdTFCQTtBQUNoQiwyR0F2MUJBLDJDQUEwQixPQXUxQkE7QUFDMUIscUdBdjFCQSxxQ0FBb0IsT0F1MUJBO0FBQ3BCLDZHQXYxQkEsNkNBQTRCLE9BdTFCQTtBQXIxQjlCLG1EQU0yQjtBQTJ4QnpCLDJGQWh5QkEsd0JBQVUsT0FneUJBO0FBc0RWLCtGQXIxQkEsNEJBQWMsT0FxMUJBO0FBQ2QsdUdBcjFCb0IsOEJBQXNCLE9BcTFCcEI7QUFDdEIsNEZBcjFCQSx5QkFBVyxPQXExQkE7QUFDWCw0R0FyMUJBLHlDQUEyQixPQXExQkE7QUFuMUI3Qix1RUFTcUM7QUFreEJuQyxxR0ExeEJBLDRDQUFvQixPQTB4QkE7QUEwRHBCLGdHQW4xQkEsdUNBQWUsT0FtMUJBO0FBQ2YsbUdBbjFCQSwwQ0FBa0IsT0FtMUJBO0FBQ2xCLGlHQW4xQkEsd0NBQWdCLE9BbTFCQTtBQUNoQixxR0FuMUJBLDRDQUFvQixPQW0xQkE7QUFDcEIsK0ZBbjFCQSxzQ0FBYyxPQW0xQkE7QUFDZCwrRkFuMUJBLHNDQUFjLE9BbTFCQTtBQUNkLHNHQW4xQkEsNkNBQXFCLE9BbTFCQTtBQWoxQnZCLCtEQVVpQztBQXd3Qi9CLGlHQWp4QkEsb0NBQWdCLE9BaXhCQTtBQWlFaEIsK0ZBajFCQSxrQ0FBYyxPQWkxQkE7QUFDZCxpR0FqMUJBLG9DQUFnQixPQWkxQkE7QUFDaEIsa0dBajFCQSxxQ0FBaUIsT0FpMUJBO0FBQ2pCLG1HQWoxQkEsc0NBQWtCLE9BaTFCQTtBQUNsQixrR0FqMUJBLHFDQUFpQixPQWkxQkE7QUFDakIsOEZBajFCQSxpQ0FBYSxPQWkxQkE7QUFDYixvR0FqMUJBLHVDQUFtQixPQWkxQkE7QUFDbkIseUdBajFCQSw0Q0FBd0IsT0FpMUJBO0FBLzBCMUIsbUVBWW1DO0FBNHZCakMsbUdBdndCQSx3Q0FBa0IsT0F1d0JBO0FBeUVsQiwyRkEvMEJBLGdDQUFVLE9BKzBCQTtBQUNWLHFHQS8wQkEsMENBQW9CLE9BKzBCQTtBQUNwQixvR0EvMEJBLHlDQUFtQixPQSswQkE7QUFDbkIsK0ZBLzBCQSxvQ0FBYyxPQSswQkE7QUFDZCxzR0EvMEJBLDJDQUFxQixPQSswQkE7QUFDckIscUdBLzBCQSwwQ0FBb0IsT0ErMEJBO0FBQ3BCLHdHQS8wQkEsNkNBQXVCLE9BKzBCQTtBQUN2QixtR0EvMEJBLHdDQUFrQixPQSswQkE7QUFDbEIsK0ZBLzBCQSxvQ0FBYyxPQSswQkE7QUFDZCxzR0EvMEJBLDJDQUFxQixPQSswQkE7QUE1MEJ2Qix3Q0FBd0M7QUFDeEMsMkNBT3VCO0FBb3ZCckIsd0ZBMXZCQSxpQkFBTyxPQTB2QkE7QUFrRlAsOEZBMzBCQSx1QkFBYSxPQTIwQkE7QUFDYixnR0EzMEJhLG1CQUFlLE9BMjBCYjtBQUNmLDhGQTMwQlcsaUJBQWEsT0EyMEJYO0FBQ2IsbUdBMzBCQSw0QkFBa0IsT0EyMEJBO0FBQ2xCLCtGQTMwQkEsd0JBQWMsT0EyMEJBO0FBeDBCaEIsb0JBQW9CO0FBQ3BCLHVEQU02QjtBQTZ1QjNCLDZGQWx2QkEsNEJBQVksT0FrdkJBO0FBc0ZaLHVHQXYwQkEsc0NBQXNCLE9BdTBCQTtBQUN0QiwyR0F2MEJBLDBDQUEwQixPQXUwQkE7QUFDMUIsK0ZBdjBCQSw4QkFBYyxPQXUwQkE7QUFDZCw4RkF2MEJBLDZCQUFhLE9BdTBCQTtBQXAwQmYsdUJBQXVCO0FBQ3ZCLDZEQVVnQztBQWt1QjlCLGdHQTN1QkEsa0NBQWUsT0EydUJBO0FBK0ZmLDhGQXowQkEsZ0NBQWEsT0F5MEJBO0FBQ2IsZ0dBejBCQSxrQ0FBZSxPQXkwQkE7QUFDZixxR0F6MEJBLHVDQUFvQixPQXkwQkE7QUFDcEIsOEZBejBCQSxnQ0FBYSxPQXkwQkE7QUFDYixpR0F6MEJBLG1DQUFnQixPQXkwQkE7QUFDaEIsaUdBejBCQSxtQ0FBZ0IsT0F5MEJBO0FBQ2hCLGtHQXowQkEsb0NBQWlCLE9BeTBCQTtBQUNqQiw4RkF6MEJBLGdDQUFhLE9BeTBCQTtBQXQwQmYsc0JBQXNCO0FBQ3RCLDJEQU8rQjtBQXV0QjdCLCtGQTd0QkEsZ0NBQWMsT0E2dEJBO0FBMEZkLHVHQXR6QkEsd0NBQXNCLE9Bc3pCQTtBQUN0Qiw4R0F0ekJBLCtDQUE2QixPQXN6QkE7QUFDN0IsMEdBdHpCQSwyQ0FBeUIsT0FzekJBO0FBQ3pCLG1HQXR6QkEsb0NBQWtCLE9Bc3pCQTtBQUNsQiw4RkF0ekJBLCtCQUFhLE9Bc3pCQTtBQW56QmYsZUFBZTtBQUNmLGtFQVV1QztBQTZyQnJDLHdGQXRzQkEsd0JBQU8sT0Fzc0JBO0FBc0NQLHNHQTN1QkEsc0NBQXFCLE9BMnVCQTtBQUNyQixtR0EzdUJBLG1DQUFrQixPQTJ1QkE7QUFDbEIsaUdBM3VCQSxpQ0FBZ0IsT0EydUJBO0FBQ2hCLG9HQTN1QkEsb0NBQW1CLE9BMnVCQTtBQUNuQixnR0EzdUJBLGdDQUFlLE9BMnVCQTtBQUNmLHVHQTN1QkEsdUNBQXNCLE9BMnVCQTtBQUN0QixrR0EzdUJBLGtDQUFpQixPQTJ1QkE7QUFDakIsdUdBM3VCQSx1Q0FBc0IsT0EydUJBO0FBenVCeEIsc0VBT3lDO0FBc3JCdkMsZ0dBNXJCQSxrQ0FBZSxPQTRyQkE7QUE4Q2YsdUdBenVCQSx5Q0FBc0IsT0F5dUJBO0FBQ3RCLCtGQXp1QkEsaUNBQWMsT0F5dUJBO0FBQ2Qsa0dBenVCQSxvQ0FBaUIsT0F5dUJBO0FBQ2pCLG1HQXp1QkEscUNBQWtCLE9BeXVCQTtBQUNsQixxR0F6dUJBLHVDQUFvQixPQXl1QkE7QUE1bEJ0QiwrRUFBK0U7QUFDL0UsZUFBZTtBQUNmLCtFQUErRTtBQUUvRSxJQUFJLE1BQU0sR0FBOEMsSUFBSSxDQUFDO0FBQzdELElBQUksUUFBUSxHQUE4QixJQUFJLENBQUM7QUFFL0MsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixJQUFJLENBQUMsVUFBOEMsRUFBRTtJQUNuRSxJQUFJLElBQUEsc0JBQWEsR0FBRSxFQUFFLENBQUM7UUFDcEIsSUFBQSxpQkFBUSxFQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDOUMsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFVLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFbkMsMEJBQTBCO0lBQzFCLE1BQU0sZUFBZSxHQUEyQixFQUFFLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9ELENBQUM7U0FBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixlQUFlLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNqRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSw2Q0FBaUIsQ0FBQztRQUNyQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxZQUFZO1FBQ25DLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUMsQ0FBQztJQUVILGdDQUFnQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxvQkFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FDdkMsSUFBSSxvQkFBUSxDQUFDO1FBQ1gsY0FBYyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQ2xDLHVCQUF1QixFQUFFLG9CQUFXO1FBQ3BDLHdCQUF3QixFQUFFLFlBQVk7UUFDdEMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLFVBQVU7S0FDM0MsQ0FBQyxDQUNILENBQUM7SUFFRixzQ0FBc0M7SUFDdEMsUUFBUSxHQUFHLElBQUksbUNBQWtCLENBQUM7UUFDaEMsUUFBUTtRQUNSLGNBQWMsRUFBRSxDQUFDLElBQUksbUNBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbkQsQ0FBQyxDQUFDO0lBRUgsb0JBQW9CO0lBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVwQixhQUFhO0lBQ2IsTUFBTSxHQUFHLFdBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLG9CQUFXLENBQUMsQ0FBQztJQUVuRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixvQkFBVyxjQUFjLENBQUMsQ0FBQztRQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVM7SUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsUUFBUTtJQUM1QixJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLElBQUEsb0JBQVcsR0FBRSxDQUFDO0lBQ2QsSUFBQSxpQkFBUSxFQUFDLGlDQUFpQyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxvQkFBb0I7QUFDcEIsK0VBQStFO0FBRS9FOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUN0QixPQUtDLEVBQ0QsRUFBb0I7SUFFcEIsTUFBTSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFFdEIsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUN0QixPQUFPLENBQUMsSUFBSSxFQUNaO1FBQ0UsVUFBVSxFQUFFO1lBQ1YseUJBQXlCLEVBQUUsS0FBSztZQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsU0FBUztZQUNuQyxjQUFjLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDaEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDN0Y7S0FDRixFQUNELEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFjLENBQUMsQ0FBQztZQUNyQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BSUMsRUFDRCxFQUFvQjtJQUVwQixNQUFNLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV0QixPQUFPLENBQUMsQ0FBQyxlQUFlLENBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQ1o7UUFDRSxVQUFVLEVBQUU7WUFDVix5QkFBeUIsRUFBRSxXQUFXO1lBQ3RDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ2hDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxJQUFJO1NBQ2hDO0tBQ0YsRUFDRCxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDYixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFjLENBQUMsQ0FBQztZQUNyQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0gsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLE9BSUMsRUFDRCxFQUFvQjtJQUVwQixNQUFNLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV0QixPQUFPLENBQUMsQ0FBQyxlQUFlLENBQ3RCLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksRUFDaEM7UUFDRSxVQUFVLEVBQUU7WUFDVix5QkFBeUIsRUFBRSxNQUFNO1lBQ2pDLFdBQVcsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJO1lBQzdDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3ZGO0tBQ0YsRUFDRCxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDYixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBYyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBYyxDQUFDLENBQUM7WUFDckMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixPQUdDLEVBQ0QsRUFBb0I7SUFFcEIsTUFBTSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFFdEIsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUN0QixPQUFPLENBQUMsSUFBSSxFQUNaO1FBQ0UsVUFBVSxFQUFFO1lBQ1YseUJBQXlCLEVBQUUsT0FBTztZQUNsQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RjtLQUNGLEVBQ0QsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQWMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsK0NBQStDO0FBQy9DLDJFQUEyRTtBQUMzRSwrRUFBK0U7QUFFL0U7Ozs7O0dBS0c7QUFDVSxRQUFBLE1BQU0sR0FBRztJQUNwQjs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZSxFQUFFLE9BTTNCO1FBQ0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxFQUFFLE1BQU07WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsSUFBSSxPQUFPLEVBQUUsU0FBUztZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLE9BQU8sRUFBRSxPQUFPO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksT0FBTyxFQUFFLEtBQUs7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxPQUFPLEVBQUUsTUFBTTtZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUVyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQWtCLEVBQUMsV0FBVyxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBVTtRQUNsQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQWtCLEVBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFRWjtRQUNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwyQkFBa0IsRUFBQyxTQUFTLEVBQUU7WUFDbkQsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVSxFQUFFLElBT3hCO1FBQ0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLDJCQUFrQixFQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDekQsTUFBTSxFQUFFLE9BQU87WUFDZixJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQWtCLEVBQUMsV0FBVyxPQUFPLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7Q0FDRixDQUFDO0FBR0YsK0VBQStFO0FBQy9FLGlFQUFpRTtBQUNqRSxxRUFBcUU7QUFDckUsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7R0FZRztBQUNVLFFBQUEsUUFBUSxHQUFHO0lBQ3RCOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUtiO1FBQ0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwyQkFBa0IsRUFBQyxtQkFBbUIsRUFBRTtZQUM3RCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRTtnQkFDSixRQUFRO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxJQUFJO29CQUNKLGdCQUFnQjtvQkFDaEIsYUFBYTtpQkFDZDthQUNGO1lBQ0QsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsT0FBUSxRQUFnQixDQUFDLElBQUksSUFBSSxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQVluQjtRQUNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwyQkFBa0IsRUFBQywwQkFBMEIsRUFBRTtZQUNwRSxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRTtnQkFDSixHQUFHLE9BQU87Z0JBQ1YsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7YUFDdkM7WUFDRCxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxPQUFRLFFBQWdCLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BTWxCO1FBUUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLDJCQUFrQixFQUFDLHlCQUF5QixFQUFFO1lBQ25FLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLEdBQUcsT0FBTztnQkFDVixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUU7Z0JBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRTthQUN4QztZQUNELFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBZTtRQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQWtCLEVBQUMsYUFBYSxPQUFPLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLE9BQVEsUUFBZ0IsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsT0FLZjtRQUNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwyQkFBa0IsRUFBQyxxQkFBcUIsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRTtnQkFDSixHQUFHLE9BQU87Z0JBQ1YsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUU7YUFDeEM7WUFDRCxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxPQUFRLFFBQWdCLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0NBQ0YsQ0FBQztBQUdGLCtFQUErRTtBQUMvRSx1QkFBdUI7QUFDdkIsK0VBQStFO0FBRS9FLFNBQVMsd0JBQXdCLENBQy9CLFVBQThDO0lBRTlDLElBQUEsaUJBQVEsRUFBQyx3Q0FBd0MsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFMUUsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFDSCxRQUFRLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLFFBQVEsQ0FBQztnQkFDZCxLQUFLLG1CQUFtQjtvQkFDdEIsSUFBQSxpQkFBUSxFQUFDLDJEQUEyRCxDQUFDLENBQUM7b0JBQ3RFLE1BQU07Z0JBQ1IsS0FBSyxXQUFXLENBQUM7Z0JBQ2pCLEtBQUssV0FBVztvQkFDZCxJQUFBLGlCQUFRLEVBQUMsMEVBQTBFLENBQUMsQ0FBQztvQkFDckYsTUFBTTtnQkFDUixLQUFLLFdBQVc7b0JBQ2QsSUFBQSxpQkFBUSxFQUFDLGlDQUFpQyxDQUFDLENBQUM7b0JBQzVDLE1BQU07Z0JBQ1IsS0FBSyxZQUFZO29CQUNmLElBQUEsaUJBQVEsRUFBQyxrQ0FBa0MsQ0FBQyxDQUFDO29CQUM3QyxNQUFNO2dCQUNSLEtBQUssS0FBSztvQkFDUixJQUFBLGlCQUFRLEVBQUMsMkJBQTJCLENBQUMsQ0FBQztvQkFDdEMsTUFBTTtnQkFDUixLQUFLLFdBQVc7b0JBQ2QsSUFBQSxpQkFBUSxFQUFDLGlDQUFpQyxDQUFDLENBQUM7b0JBQzVDLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFBLGlCQUFRLEVBQUMsbUJBQW1CLFNBQVMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBZ0pELGlDQUFpQztBQUNqQyxrQkFBZTtJQUNiLElBQUk7SUFDSixTQUFTO0lBQ1QsUUFBUTtJQUNSLGFBQWEsRUFBYixzQkFBYTtJQUNiLFVBQVU7SUFDVixRQUFRO0lBQ1IsY0FBYztJQUNkLFNBQVM7SUFDVCxVQUFVO0lBQ1YsY0FBYztJQUNkLElBQUksRUFBSixXQUFJO0lBQ0osTUFBTSxFQUFOLGVBQU07SUFDTixXQUFXLEVBQVgseUJBQVc7SUFDWCxPQUFPLEVBQVAsd0JBQU87SUFDUCxlQUFlLEVBQWYsa0NBQWU7SUFDZixrQkFBa0I7SUFDbEIsV0FBVyxFQUFYLDBCQUFXO0lBQ1gsY0FBYyxFQUFkLCtCQUFjO0lBQ2QsVUFBVSxFQUFWLHdCQUFVO0lBQ1Ysb0JBQW9CLEVBQXBCLDRDQUFvQjtJQUNwQixnQkFBZ0IsRUFBaEIsb0NBQWdCO0lBQ2hCLGtCQUFrQixFQUFsQix3Q0FBa0I7SUFDbEIsd0NBQXdDO0lBQ3hDLE9BQU8sRUFBUCxpQkFBTztJQUNQLDJCQUEyQjtJQUMzQixNQUFNLEVBQU4sY0FBTTtJQUNOLFFBQVEsRUFBUixnQkFBUTtJQUNSLHVEQUF1RDtJQUN2RCxZQUFZLEVBQVosNEJBQVk7SUFDWixjQUFjLEVBQWQsZ0NBQWM7SUFDZCxlQUFlLEVBQWYsa0NBQWU7SUFDZixVQUFVO0lBQ1YscUJBQXFCLEVBQXJCLHNDQUFxQjtJQUNyQixrQkFBa0IsRUFBbEIsbUNBQWtCO0lBQ2xCLGVBQWUsRUFBZixnQ0FBZTtJQUNmLG9CQUFvQixFQUFwQiwyQkFBb0I7SUFDcEIsWUFBWTtJQUNaLE1BQU0sRUFBTixlQUFNO0lBQ04sV0FBVyxFQUFYLG9CQUFXO0lBQ1gsbUJBQW1CLEVBQW5CLGlDQUFtQjtJQUNuQixnQkFBZ0IsRUFBaEIsOEJBQWdCO0lBQ2hCLGdCQUFnQixFQUFoQixpQ0FBZ0I7SUFDaEIsb0JBQW9CLEVBQXBCLHFDQUFvQjtJQUNwQixVQUFVLEVBQVYsZ0NBQVU7SUFDVixjQUFjLEVBQWQsb0NBQWM7SUFDZCxjQUFjO0lBQ2Qsc0JBQXNCLEVBQXRCLHNDQUFzQjtJQUN0QixjQUFjLEVBQWQsOEJBQWM7SUFDZCxrQkFBa0I7SUFDbEIsc0JBQXNCLEVBQXRCLHdDQUFzQjtJQUN0Qiw2QkFBNkIsRUFBN0IsK0NBQTZCO0lBQzdCLDJCQUEyQjtJQUMzQixhQUFhLEVBQWIsZ0NBQWE7SUFDYixlQUFlLEVBQWYsa0NBQWU7SUFDZixnQkFBZ0IsRUFBaEIsbUNBQWdCO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaW5rSGl2ZSBTREsgdjMuMC4wXG4gKlxuICogUnVuLWNlbnRyaWMgQUkgYWdlbnQgb2JzZXJ2YWJpbGl0eSBwbGF0Zm9ybSB3aXRoOlxuICogLSBGYWN0cyB2cyBJbmZlcmVuY2VzIChjbGFpbXMgQVBJKVxuICogLSBEZXRlcm1pbmlzdGljIHRpY2tldCBsaW5raW5nICg3IG1ldGhvZHMpXG4gKiAtIEN1c3RvbWVyIGNvbnRleHQgc25hcHNob3RzICh0aW1lLXNlcmllcylcbiAqIC0gQ2FsaWJyYXRlZCBwcmVkaWN0aW9ucyAoQnJpZXIgc2NvcmVzKVxuICpcbiAqIEB2ZXJzaW9uIDMuMC4wXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG5pbXBvcnQgeyB0cmFjZSwgY29udGV4dCwgU3BhblN0YXR1c0NvZGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLXByb3RvJztcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzJztcbmltcG9ydCB7IE5vZGVUcmFjZXJQcm92aWRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlJztcbmltcG9ydCB7IEJhdGNoU3BhblByb2Nlc3NvciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlJztcblxuLy8gQ29yZVxuaW1wb3J0IHtcbiAgaW5pdENvbmZpZyxcbiAgZ2V0Q29uZmlnLFxuICBpc0luaXRpYWxpemVkLFxuICByZXNldENvbmZpZyxcbiAgZGVidWdMb2csXG4gIFNES19WRVJTSU9OLFxuICBERUZBVUxUX0VORFBPSU5ULFxufSBmcm9tICcuL2NvcmUvY29uZmlnJztcbmltcG9ydCB7XG4gIGFwaVJlcXVlc3RXaXRoRGF0YSxcbiAgVGhpbmtIaXZlRXJyb3IsXG4gIFRoaW5rSGl2ZUFwaUVycm9yLFxuICBUaGlua0hpdmVWYWxpZGF0aW9uRXJyb3IsXG4gIFBlcm1pc3Npb25EZW5pZWRFcnJvcixcbiAgQWdlbnRTY29wZUVycm9yLFxuICBSYXRlTGltaXRFcnJvcixcbiAgSXBXaGl0ZWxpc3RFcnJvcixcbn0gZnJvbSAnLi9jb3JlL2NsaWVudCc7XG5cbi8vIEFQSSBjbGllbnRzXG5pbXBvcnQgeyBydW5zLCBjcmVhdGVSdW5XaXRoQ29udGV4dCwgdG9PcGVuQUlNZXNzYWdlcywgZnJvbU9wZW5BSU1lc3NhZ2VzIH0gZnJvbSAnLi9hcGkvcnVucyc7XG5pbXBvcnQge1xuICBjbGFpbXMsXG4gIGlzRmFjdCxcbiAgaXNJbmZlcmVuY2UsXG4gIGlzQ29tcHV0ZWQsXG4gIGdldEhpZ2hDb25maWRlbmNlQ2xhaW1zLFxuICBncm91cENsYWltc0J5VHlwZSxcbiAgZ3JvdXBDbGFpbXNCeUNhdGVnb3J5LFxufSBmcm9tICcuL2FwaS9jbGFpbXMnO1xuaW1wb3J0IHtcbiAgY2FsaWJyYXRpb24sXG4gIGNhbGN1bGF0ZUJyaWVyU2NvcmUsXG4gIGNhbGN1bGF0ZUVDRSxcbiAgaXNXZWxsQ2FsaWJyYXRlZCxcbiAgZ2V0Q2FsaWJyYXRpb25RdWFsaXR5LFxufSBmcm9tICcuL2FwaS9jYWxpYnJhdGlvbic7XG5cbi8vIE5ldyBFdmFsdWF0aW9uIEFQSXNcbmltcG9ydCB7IGh1bWFuUmV2aWV3IH0gZnJvbSAnLi9hcGkvaHVtYW4tcmV2aWV3JztcbmltcG9ydCB7XG4gIG5vbmRldGVybWluaXNtLFxuICBjYWxjdWxhdGVQYXNzQXRLLFxuICBjYWxjdWxhdGVQYXNzVG9LLFxuICByZXF1aXJlZFBhc3NSYXRlRm9yUGFzc0F0SyxcbiAgaXNSZWxpYWJsZUV2YWx1YXRpb24sXG4gIGdldFJlbGlhYmlsaXR5UmVjb21tZW5kYXRpb24sXG59IGZyb20gJy4vYXBpL25vbmRldGVybWluaXNtJztcbmltcG9ydCB7XG4gIGV2YWxIZWFsdGgsXG4gIGhhc0hlYWx0aElzc3VlLFxuICBnZXRTZXZlcml0eUxldmVsIGFzIGdldEhlYWx0aFNldmVyaXR5TGV2ZWwsXG4gIGlzU2F0dXJhdGVkLFxuICBnZXRTYXR1cmF0aW9uUmVjb21tZW5kYXRpb24sXG59IGZyb20gJy4vYXBpL2V2YWwtaGVhbHRoJztcbmltcG9ydCB7XG4gIGRldGVybWluaXN0aWNHcmFkZXJzLFxuICBjcmVhdGVSZWdleFJ1bGUsXG4gIGNyZWF0ZUNvbnRhaW5zUnVsZSxcbiAgY3JlYXRlTGVuZ3RoUnVsZSxcbiAgY3JlYXRlSnNvblNjaGVtYVJ1bGUsXG4gIGFsbFJ1bGVzUGFzc2VkLFxuICBnZXRGYWlsZWRSdWxlcyxcbiAgY2FsY3VsYXRlQXZlcmFnZVNjb3JlLFxufSBmcm9tICcuL2FwaS9kZXRlcm1pbmlzdGljLWdyYWRlcnMnO1xuaW1wb3J0IHtcbiAgY29udmVyc2F0aW9uRXZhbCxcbiAgYWdncmVnYXRlV29yc3QsXG4gIGFnZ3JlZ2F0ZUF2ZXJhZ2UsXG4gIGFnZ3JlZ2F0ZVdlaWdodGVkLFxuICBhZ2dyZWdhdGVGaW5hbFR1cm4sXG4gIGFnZ3JlZ2F0ZU1ham9yaXR5LFxuICBnZXRBZ2dyZWdhdG9yLFxuICBnZXRQcm9ibGVtYXRpY1R1cm5zLFxuICBhbmFseXplQ29udmVyc2F0aW9uVHJlbmQsXG59IGZyb20gJy4vYXBpL2NvbnZlcnNhdGlvbi1ldmFsJztcbmltcG9ydCB7XG4gIHRyYW5zY3JpcHRQYXR0ZXJucyxcbiAgaXNIaWdoUmlzayxcbiAgZ2V0TWF0Y2hlc0J5Q2F0ZWdvcnksXG4gIGdldENyaXRpY2FsSW5zaWdodHMsXG4gIGhhc1BpaUV4cG9zdXJlLFxuICBoYXNGcnVzdHJhdGlvblNpZ25hbHMsXG4gIGhhc0VzY2FsYXRpb25SZXF1ZXN0LFxuICBnZXRDYXRlZ29yeURpc3RyaWJ1dGlvbixcbiAgZ2V0UmVjb21tZW5kYXRpb25zLFxuICBuZWVkc0F0dGVudGlvbixcbiAgc29ydE1hdGNoZXNCeVNldmVyaXR5LFxufSBmcm9tICcuL2FwaS90cmFuc2NyaXB0LXBhdHRlcm5zJztcblxuLy8gQVBJIEtleSBNYW5hZ2VtZW50IChQaGFzZSAyIFNlY3VyaXR5KVxuaW1wb3J0IHtcbiAgYXBpS2V5cyxcbiAgaGFzUGVybWlzc2lvbixcbiAgaXNFeHBpcmVkIGFzIGlzQXBpS2V5RXhwaXJlZCxcbiAgaXNWYWxpZCBhcyBpc0FwaUtleVZhbGlkLFxuICBnZXRUaW1lVW50aWxFeHBpcnksXG4gIGNhbkFjY2Vzc0FnZW50LFxufSBmcm9tICcuL2FwaS9hcGlLZXlzJztcblxuLy8gUk9JIEFuYWx5dGljcyBBUElcbmltcG9ydCB7XG4gIHJvaUFuYWx5dGljcyxcbiAgY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayxcbiAgY2FsY3VsYXRlQXV0b21hdGlvblNhdmluZ3MsXG4gIGZvcm1hdEN1cnJlbmN5LFxuICBnZXRST0lRdWFsaXR5LFxufSBmcm9tICcuL2FwaS9yb2ktYW5hbHl0aWNzJztcblxuLy8gQnVzaW5lc3MgTWV0cmljcyBBUElcbmltcG9ydCB7XG4gIGJ1c2luZXNzTWV0cmljcyxcbiAgaXNNZXRyaWNSZWFkeSxcbiAgbmVlZHNNb3JlVHJhY2VzLFxuICBhd2FpdGluZ0V4dGVybmFsRGF0YSxcbiAgaXNNZXRyaWNTdGFsZSxcbiAgZ2V0U3RhdHVzTWVzc2FnZSxcbiAgZ2V0VHJhY2VQcm9ncmVzcyxcbiAgZm9ybWF0TWV0cmljVmFsdWUsXG4gIGdldFRyZW5kRW1vamksXG59IGZyb20gJy4vYXBpL2J1c2luZXNzLW1ldHJpY3MnO1xuXG4vLyBRdWFsaXR5IE1ldHJpY3MgQVBJXG5pbXBvcnQge1xuICBxdWFsaXR5TWV0cmljcyxcbiAgcGFzc2VzUXVhbGl0eVRocmVzaG9sZCxcbiAgaXNIYWxsdWNpbmF0aW9uUmlza0FjY2VwdGFibGUsXG4gIGdldFF1YWxpdHlSZWNvbW1lbmRhdGlvbnMsXG4gIGZvcm1hdFF1YWxpdHlTY29yZSxcbiAgZ2V0R3JhZGVDb2xvcixcbn0gZnJvbSAnLi9hcGkvcXVhbGl0eS1tZXRyaWNzJztcblxuLy8gSW50ZWdyYXRpb25zXG5pbXBvcnQge1xuICBsaW5raW5nLFxuICBnZW5lcmF0ZVplbmRlc2tNYXJrZXIsXG4gIHBhcnNlWmVuZGVza01hcmtlcixcbiAgaGFzWmVuZGVza01hcmtlcixcbiAgcmVtb3ZlWmVuZGVza01hcmtlcixcbiAgbGlua1J1blRvVGlja2V0LFxuICBsaW5rUnVuVG9aZW5kZXNrVGlja2V0LFxuICBnZXRCZXN0TGlua01ldGhvZCxcbiAgTElOS19NRVRIT0RfQ09ORklERU5DRSxcbn0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvdGlja2V0LWxpbmtpbmcnO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJDb250ZXh0LFxuICBjYXB0dXJlQ3VzdG9tZXJDb250ZXh0LFxuICBnZXRDb250ZXh0QXNPZixcbiAgdG9Db250ZXh0U25hcHNob3QsXG4gIGNhbGN1bGF0ZUFyckNoYW5nZSxcbiAgY2FsY3VsYXRlSGVhbHRoVHJlbmQsXG59IGZyb20gJy4vaW50ZWdyYXRpb25zL2N1c3RvbWVyLWNvbnRleHQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgSW5pdE9wdGlvbnMsXG4gIEZyYW1ld29yayxcbiAgUnVuT3B0aW9ucyxcbiAgUnVuT3V0Y29tZSxcbiAgQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQ3VzdG9tZXJDb250ZXh0U25hcHNob3QsXG4gIFRpY2tldExpbmtpbmdPcHRpb25zLFxuICBMaW5rTWV0aG9kLFxuICBUcmFjZU9wdGlvbnMsXG4gIFRyYWNlQ3VzdG9tRmxhZyxcbiAgU3BhbkRhdGEsXG4gIEJ1c2luZXNzQ29udGV4dCxcbiAgQ2xhaW0sXG4gIENsYWltVHlwZSxcbiAgQ2xhaW1DYXRlZ29yeSxcbiAgQ29uZmlkZW5jZUNhbGlicmF0aW9uLFxuICBFdmlkZW5jZVJlZmVyZW5jZSxcbiAgQW5hbHlzaXNSZXN1bHQsXG4gIENhbGlicmF0aW9uU3RhdHVzLFxuICBDYWxpYnJhdGlvbkJ1Y2tldCxcbiAgUHJlZGljdGlvblR5cGUsXG4gIFJvaUNvbmZpZyxcbiAgUm9pU3VtbWFyeSxcbiAgRXhwbGFpbmFiaWxpdHlSZXN1bHQsXG4gIEFwaVJlc3BvbnNlLFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgUnVuUmVzcG9uc2UsXG59IGZyb20gJy4vY29yZS90eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCBldmFsdWF0aW9uIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEh1bWFuUmV2aWV3U3RhdHVzLFxuICBIdW1hblJldmlld1R5cGUsXG4gIEh1bWFuUmV2aWV3UXVldWVJdGVtLFxuICBDYWxpYnJhdGlvblNldCxcbiAgUmV2aWV3ZXJDYWxpYnJhdGlvbixcbiAgUXVldWVTdGF0cyxcbn0gZnJvbSAnLi9hcGkvaHVtYW4tcmV2aWV3JztcblxuZXhwb3J0IHR5cGUge1xuICBOb25kZXRlcm1pbmlzbVJ1blR5cGUsXG4gIE5vbmRldGVybWluaXNtUnVuU3RhdHVzLFxuICBOb25kZXRlcm1pbmlzbVJ1bixcbiAgTm9uZGV0ZXJtaW5pc21TYW1wbGUsXG4gIFRyYWNlQW5hbHlzaXMsXG4gIENyaXRlcmlvbkFuYWx5c2lzLFxuICBSdW5TdW1tYXJ5LFxufSBmcm9tICcuL2FwaS9ub25kZXRlcm1pbmlzbSc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgU2F0dXJhdGlvblR5cGUsXG4gIEhlYWx0aFN0YXR1cyxcbiAgUmVncmVzc2lvblNldmVyaXR5LFxuICBFdmFsSGVhbHRoU25hcHNob3QsXG4gIEV2YWxSZWdyZXNzaW9uLFxuICBIZWFsdGhSZXBvcnQsXG59IGZyb20gJy4vYXBpL2V2YWwtaGVhbHRoJztcblxuZXhwb3J0IHR5cGUge1xuICBSdWxlVHlwZSxcbiAgRGV0ZXJtaW5pc3RpY0V2YWxSZXN1bHQsXG4gIFJ1bGVSZXN1bHQsXG4gIFJ1bGVUeXBlSW5mbyxcbiAgUnVsZVRlbXBsYXRlLFxufSBmcm9tICcuL2FwaS9kZXRlcm1pbmlzdGljLWdyYWRlcnMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEFnZ3JlZ2F0ZU1ldGhvZCxcbiAgU2Vzc2lvblRyYWNlLFxuICBUdXJuRXZhbHVhdGlvbixcbiAgQ29udmVyc2F0aW9uRXZhbFJlc3VsdCxcbiAgQWdncmVnYXRpb25NZXRob2RJbmZvLFxufSBmcm9tICcuL2FwaS9jb252ZXJzYXRpb24tZXZhbCc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUGF0dGVybkNhdGVnb3J5LFxuICBQYXR0ZXJuT3V0Y29tZSxcbiAgUGF0dGVyblNldmVyaXR5LFxuICBQYXR0ZXJuTWF0Y2gsXG4gIFBhdHRlcm5JbnNpZ2h0LFxuICBBbmFseXNpc1Jlc3VsdCBhcyBQYXR0ZXJuQW5hbHlzaXNSZXN1bHQsXG4gIFBhdHRlcm5DYXRlZ29yeUluZm8sXG4gIEJ1aWx0SW5QYXR0ZXJuLFxufSBmcm9tICcuL2FwaS90cmFuc2NyaXB0LXBhdHRlcm5zJztcblxuLy8gUmUtZXhwb3J0IEFQSSBLZXkgdHlwZXMgKFBoYXNlIDIgU2VjdXJpdHkpXG5leHBvcnQgdHlwZSB7XG4gIEFwaUtleVBlcm1pc3Npb25zLFxuICBTY29wZVR5cGUsXG4gIEVudmlyb25tZW50LFxuICBDcmVhdGVBcGlLZXlPcHRpb25zLFxuICBBcGlLZXksXG4gIENyZWF0ZUFwaUtleVJlc3VsdCxcbn0gZnJvbSAnLi9hcGkvYXBpS2V5cyc7XG5cbi8vIFJlLWV4cG9ydCBST0kgQW5hbHl0aWNzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEluZHVzdHJ5Q29uZmlnLFxuICBDdXN0b21JbmR1c3RyeUNvbmZpZyxcbiAgUk9JTWV0cmljcyxcbiAgQnVzaW5lc3NJbXBhY3QsXG4gIFJPSVN1bW1hcnksXG4gIFRyZW5kRGF0YVBvaW50LFxuICBDb3JyZWxhdGlvbixcbiAgUGF0dGVybkNsdXN0ZXIsXG4gIENvcnJlbGF0aW9uQW5hbHlzaXMsXG59IGZyb20gJy4vYXBpL3JvaS1hbmFseXRpY3MnO1xuXG4vLyBSZS1leHBvcnQgUXVhbGl0eSBNZXRyaWNzIHR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIFJldHJpZXZlZENvbnRleHQsXG4gIEdyb3VuZFRydXRoQ29udGV4dCxcbiAgR3JvdW5kZWRTcGFuLFxuICBVbmdyb3VuZGVkU3BhbixcbiAgQ2l0YXRpb25NYXAsXG4gIFJBR0V2YWx1YXRpb24sXG4gIFJBR0V2aWRlbmNlLFxuICBIYWxsdWNpbmF0aW9uSW5zdGFuY2UsXG4gIEhhbGx1Y2luYXRpb25SZXBvcnQsXG4gIEdyb3VuZGVkbmVzc1Jlc3VsdCxcbiAgQmF0Y2hFdmFsdWF0aW9uUmVzdWx0LFxuICBCYXRjaEV2YWx1YXRpb25TdW1tYXJ5LFxufSBmcm9tICcuL2FwaS9xdWFsaXR5LW1ldHJpY3MnO1xuXG4vLyBSZS1leHBvcnQgQnVzaW5lc3MgTWV0cmljcyB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBNZXRyaWNUcmVuZCxcbiAgTWV0cmljU3RhdHVzLFxuICBDdXJyZW50TWV0cmljUmVzcG9uc2UsXG4gIE1ldHJpY0hpc3RvcnlQb2ludCxcbiAgTWV0cmljSGlzdG9yeVN1bW1hcnksXG4gIE1ldHJpY0hpc3RvcnlSZXNwb25zZSxcbiAgUmVjb3JkTWV0cmljT3B0aW9ucyxcbiAgUmVjb3JkTWV0cmljUmVzcG9uc2UsXG59IGZyb20gJy4vYXBpL2J1c2luZXNzLW1ldHJpY3MnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHTE9CQUwgU1RBVEVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubGV0IHRyYWNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdHJhY2UuZ2V0VHJhY2VyPiB8IG51bGwgPSBudWxsO1xubGV0IHByb3ZpZGVyOiBOb2RlVHJhY2VyUHJvdmlkZXIgfCBudWxsID0gbnVsbDtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSU5JVElBTElaQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbml0aWFsaXplIFRoaW5rSGl2ZSBTREsgdjNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgaW5pdCB9IGZyb20gJ0B0aGlua2hpdmUvc2RrJztcbiAqXG4gKiBpbml0KHtcbiAqICAgYXBpS2V5OiAndGhfeW91cl9hcGlfa2V5JyxcbiAqICAgc2VydmljZU5hbWU6ICdteS1haS1hZ2VudCcsXG4gKiAgIGF1dG9JbnN0cnVtZW50OiB0cnVlLFxuICogICBmcmFtZXdvcmtzOiBbJ2xhbmdjaGFpbicsICdvcGVuYWknXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG9wdGlvbnM6IGltcG9ydCgnLi9jb3JlL3R5cGVzJykuSW5pdE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBpZiAoaXNJbml0aWFsaXplZCgpKSB7XG4gICAgZGVidWdMb2coJ1RoaW5rSGl2ZSBTREsgYWxyZWFkeSBpbml0aWFsaXplZCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IGluaXRDb25maWcob3B0aW9ucyk7XG5cbiAgLy8gQ29uZmlndXJlIE9UTFAgZXhwb3J0ZXJcbiAgY29uc3QgZXhwb3J0ZXJIZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChjb25maWcuYXBpS2V5KSB7XG4gICAgZXhwb3J0ZXJIZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y29uZmlnLmFwaUtleX1gO1xuICB9IGVsc2UgaWYgKGNvbmZpZy5hZ2VudElkKSB7XG4gICAgZXhwb3J0ZXJIZWFkZXJzWydYLUFnZW50LUlEJ10gPSBjb25maWcuYWdlbnRJZDtcbiAgfVxuXG4gIGNvbnN0IGV4cG9ydGVyID0gbmV3IE9UTFBUcmFjZUV4cG9ydGVyKHtcbiAgICB1cmw6IGAke2NvbmZpZy5lbmRwb2ludH0vdjEvdHJhY2VzYCxcbiAgICBoZWFkZXJzOiBleHBvcnRlckhlYWRlcnMsXG4gIH0pO1xuXG4gIC8vIENyZWF0ZSBPcGVuVGVsZW1ldHJ5IHJlc291cmNlXG4gIGNvbnN0IHJlc291cmNlID0gUmVzb3VyY2UuZGVmYXVsdCgpLm1lcmdlKFxuICAgIG5ldyBSZXNvdXJjZSh7XG4gICAgICAnc2VydmljZS5uYW1lJzogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgJ3RoaW5raGl2ZS5zZGsudmVyc2lvbic6IFNES19WRVJTSU9OLFxuICAgICAgJ3RoaW5raGl2ZS5zZGsubGFuZ3VhZ2UnOiAndHlwZXNjcmlwdCcsXG4gICAgICAndGhpbmtoaXZlLmFwaS52ZXJzaW9uJzogY29uZmlnLmFwaVZlcnNpb24sXG4gICAgfSlcbiAgKTtcblxuICAvLyBDcmVhdGUgcHJvdmlkZXIgd2l0aCBzcGFuIHByb2Nlc3NvclxuICBwcm92aWRlciA9IG5ldyBOb2RlVHJhY2VyUHJvdmlkZXIoe1xuICAgIHJlc291cmNlLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbbmV3IEJhdGNoU3BhblByb2Nlc3NvcihleHBvcnRlcildLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciBwcm92aWRlclxuICBwcm92aWRlci5yZWdpc3RlcigpO1xuXG4gIC8vIEdldCB0cmFjZXJcbiAgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKCd0aGlua2hpdmUnLCBTREtfVkVSU0lPTik7XG5cbiAgaWYgKGNvbmZpZy5kZWJ1Zykge1xuICAgIGNvbnNvbGUubG9nKGDinIUgVGhpbmtIaXZlIFNESyB2JHtTREtfVkVSU0lPTn0gaW5pdGlhbGl6ZWRgKTtcbiAgICBjb25zb2xlLmxvZyhgICAgRW5kcG9pbnQ6ICR7Y29uZmlnLmVuZHBvaW50fWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBTZXJ2aWNlOiAke2NvbmZpZy5zZXJ2aWNlTmFtZX1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgQVBJIFZlcnNpb246ICR7Y29uZmlnLmFwaVZlcnNpb259YCk7XG4gICAgY29uc29sZS5sb2coYCAgIEF1dG8taW5zdHJ1bWVudDogJHtjb25maWcuYXV0b0luc3RydW1lbnR9YCk7XG4gIH1cblxuICAvLyBTZXR1cCBhdXRvLWluc3RydW1lbnRhdGlvbiBpZiBlbmFibGVkXG4gIGlmIChjb25maWcuYXV0b0luc3RydW1lbnQpIHtcbiAgICBzZXR1cEF1dG9JbnN0cnVtZW50YXRpb24oY29uZmlnLmZyYW1ld29ya3MpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBnbG9iYWwgdHJhY2VyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFjZXIoKSB7XG4gIGlmICghdHJhY2VyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlua0hpdmUgU0RLIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0KCkgZmlyc3QuJyk7XG4gIH1cbiAgcmV0dXJuIHRyYWNlcjtcbn1cblxuLyoqXG4gKiBTaHV0ZG93biB0aGUgU0RLIGFuZCBmbHVzaCBwZW5kaW5nIHNwYW5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHByb3ZpZGVyKSB7XG4gICAgYXdhaXQgcHJvdmlkZXIuc2h1dGRvd24oKTtcbiAgICBwcm92aWRlciA9IG51bGw7XG4gIH1cbiAgdHJhY2VyID0gbnVsbDtcbiAgcmVzZXRDb25maWcoKTtcbiAgZGVidWdMb2coJ1RoaW5rSGl2ZSBTREsgc2h1dGRvd24gY29tcGxldGUnKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFJBQ0lORyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBUcmFjZSBhbiBMTE0gY2FsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VMTE08VD4oXG4gIG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbW9kZWxOYW1lPzogc3RyaW5nO1xuICAgIHByb3ZpZGVyPzogc3RyaW5nO1xuICAgIGlucHV0PzogdW5rbm93bjtcbiAgfSxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB0ID0gZ2V0VHJhY2VyKCk7XG5cbiAgcmV0dXJuIHQuc3RhcnRBY3RpdmVTcGFuKFxuICAgIG9wdGlvbnMubmFtZSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICdvcGVuaW5mZXJlbmNlLnNwYW4ua2luZCc6ICdMTE0nLFxuICAgICAgICAnbGxtLm1vZGVsX25hbWUnOiBvcHRpb25zLm1vZGVsTmFtZSxcbiAgICAgICAgJ2xsbS5wcm92aWRlcic6IG9wdGlvbnMucHJvdmlkZXIsXG4gICAgICAgICdpbnB1dC52YWx1ZSc6IG9wdGlvbnMuaW5wdXQgPyBKU09OLnN0cmluZ2lmeShvcHRpb25zLmlucHV0KS5zdWJzdHJpbmcoMCwgMTAwMDApIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ291dHB1dC52YWx1ZScsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkuc3Vic3RyaW5nKDAsIDEwMDAwKSk7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFRyYWNlIGEgcmV0cmlldmFsIG9wZXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VSZXRyaWV2YWw8VD4oXG4gIG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcXVlcnk/OiBzdHJpbmc7XG4gICAgdG9wSz86IG51bWJlcjtcbiAgfSxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB0ID0gZ2V0VHJhY2VyKCk7XG5cbiAgcmV0dXJuIHQuc3RhcnRBY3RpdmVTcGFuKFxuICAgIG9wdGlvbnMubmFtZSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICdvcGVuaW5mZXJlbmNlLnNwYW4ua2luZCc6ICdSRVRSSUVWRVInLFxuICAgICAgICAncmV0cmlldmFsLnF1ZXJ5Jzogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgJ3JldHJpZXZhbC50b3Bfayc6IG9wdGlvbnMudG9wSyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgncmV0cmlldmFsLmRvY3VtZW50X2NvdW50JywgcmVzdWx0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2UgfSk7XG4gICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZHVyYXRpb25fbXMnLCBEYXRlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogVHJhY2UgYSB0b29sIGNhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlVG9vbDxUPihcbiAgb3B0aW9uczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0b29sTmFtZT86IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0sXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgdCA9IGdldFRyYWNlcigpO1xuXG4gIHJldHVybiB0LnN0YXJ0QWN0aXZlU3BhbihcbiAgICBvcHRpb25zLnRvb2xOYW1lIHx8IG9wdGlvbnMubmFtZSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICdvcGVuaW5mZXJlbmNlLnNwYW4ua2luZCc6ICdUT09MJyxcbiAgICAgICAgJ3Rvb2wubmFtZSc6IG9wdGlvbnMudG9vbE5hbWUgfHwgb3B0aW9ucy5uYW1lLFxuICAgICAgICAndG9vbC5wYXJhbWV0ZXJzJzogb3B0aW9ucy5wYXJhbWV0ZXJzID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5wYXJhbWV0ZXJzKSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCd0b29sLm91dHB1dCcsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkuc3Vic3RyaW5nKDAsIDEwMDAwKSk7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlIH0pO1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2R1cmF0aW9uX21zJywgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFRyYWNlIGEgY2hhaW4vd29ya2Zsb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlQ2hhaW48VD4oXG4gIG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ/OiB1bmtub3duO1xuICB9LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHQgPSBnZXRUcmFjZXIoKTtcblxuICByZXR1cm4gdC5zdGFydEFjdGl2ZVNwYW4oXG4gICAgb3B0aW9ucy5uYW1lLFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgJ29wZW5pbmZlcmVuY2Uuc3Bhbi5raW5kJzogJ0NIQUlOJyxcbiAgICAgICAgJ2lucHV0LnZhbHVlJzogb3B0aW9ucy5pbnB1dCA/IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaW5wdXQpLnN1YnN0cmluZygwLCAxMDAwMCkgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnb3V0cHV0LnZhbHVlJywgSlNPTi5zdHJpbmdpZnkocmVzdWx0KS5zdWJzdHJpbmcoMCwgMTAwMDApKTtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2UgfSk7XG4gICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZHVyYXRpb25fbXMnLCBEYXRlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFYyIFRFUk1JTk9MT0dZIC0gSVNTVUVTIEFQSSAocmVwbGFjZXMgQ2FzZXMpXG4vLyBQZXIgSVRJTCBiZXN0IHByYWN0aWNlcywgXCJJc3N1ZXNcIiBpcyBtb3JlIGN1c3RvbWVyLWZyaWVuZGx5IHRoYW4gXCJDYXNlc1wiXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSXNzdWVzIEFQSSBjbGllbnRcbiAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIEFQSSBmb3IgbWFuYWdpbmcgY2x1c3RlcmVkIGZhaWx1cmUgcGF0dGVybnNcbiAqXG4gKiBAc2luY2UgMy4xLjBcbiAqL1xuZXhwb3J0IGNvbnN0IGlzc3VlcyA9IHtcbiAgLyoqXG4gICAqIExpc3QgaXNzdWVzIGZvciBhbiBhZ2VudFxuICAgKi9cbiAgYXN5bmMgbGlzdChhZ2VudElkOiBzdHJpbmcsIG9wdGlvbnM/OiB7XG4gICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZT86IERhdGU7XG4gICAgZW5kRGF0ZT86IERhdGU7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBhZ2VudElkIH0pO1xuICAgIGlmIChvcHRpb25zPy5zdGF0dXMpIHBhcmFtcy5zZXQoJ3N0YXR1cycsIG9wdGlvbnMuc3RhdHVzKTtcbiAgICBpZiAob3B0aW9ucz8uc3RhcnREYXRlKSBwYXJhbXMuc2V0KCdzdGFydERhdGUnLCBvcHRpb25zLnN0YXJ0RGF0ZS50b0lTT1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucz8uZW5kRGF0ZSkgcGFyYW1zLnNldCgnZW5kRGF0ZScsIG9wdGlvbnMuZW5kRGF0ZS50b0lTT1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucz8ubGltaXQpIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0aW9ucy5saW1pdC50b1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucz8ub2Zmc2V0KSBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRpb25zLm9mZnNldC50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdFdpdGhEYXRhKGAvaXNzdWVzPyR7cGFyYW1zfWAsIHsgYXBpVmVyc2lvbjogJ3YyJyB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGlzc3VlIGJ5IElEXG4gICAqL1xuICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoYC9pc3N1ZXMvJHtpZH1gLCB7IGFwaVZlcnNpb246ICd2MicgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpc3N1ZVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IHtcbiAgICBhZ2VudElkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgc2V2ZXJpdHk/OiBzdHJpbmc7XG4gICAgcGF0dGVybj86IHN0cmluZztcbiAgICBleGFtcGxlVHJhY2VJZHM/OiBzdHJpbmdbXTtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9pc3N1ZXMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBhcGlWZXJzaW9uOiAndjInLFxuICAgIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gaXNzdWVcbiAgICovXG4gIGFzeW5jIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIHNldmVyaXR5Pzogc3RyaW5nO1xuICAgIGFzc2lnbmVkVG8/OiBzdHJpbmc7XG4gICAgcmVzb2x1dGlvbk5vdGVzPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3RXaXRoRGF0YShgL2lzc3Vlcy8ke2lkfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBhcGlWZXJzaW9uOiAndjInLFxuICAgIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgZml4ZXMgZm9yIGFuIGlzc3VlXG4gICAqL1xuICBhc3luYyBnZXRGaXhlcyhpc3N1ZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoYC9pc3N1ZXMvJHtpc3N1ZUlkfS9maXhlc2AsIHsgYXBpVmVyc2lvbjogJ3YyJyB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcbn07XG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVjIgVEVSTUlOT0xPR1kgLSBBTkFMWVpFUiBBUEkgKHJlcGxhY2VzIEV4cGxhaW5lciB1c2VyLWZhY2luZylcbi8vIFBlciBpbmR1c3RyeSBkaXN0aW5jdGlvbjogQW5hbHl6ZXIgPSBwYXR0ZXJuIGRldGVjdGlvbi9vYnNlcnZhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEFuYWx5emVyIEFQSSBjbGllbnRcbiAqIFVzZXItc2VsZWN0ZWQgdHJhY2UgYW5hbHlzaXMgd2l0aCBjb3N0IGVzdGltYXRpb24gYW5kIHNtYXJ0IHNhbXBsaW5nXG4gKlxuICogS2V5IGltcHJvdmVtZW50cyBvdmVyIHYxIEV4cGxhaW5lcjpcbiAqIC0gVXNlci1zZWxlY3RlZCB0cmFjZSBhbmFseXNpcyAobm90IGF1dG9tYXRpYylcbiAqIC0gQ29zdCBlc3RpbWF0aW9uIGJlZm9yZSBleGVjdXRpb25cbiAqIC0gU21hcnQgc2FtcGxpbmcgc3RyYXRlZ2llc1xuICogLSBSb290IGNhdXNlIGFuYWx5c2lzIGJ5IGxheWVyXG4gKiAtIFBhdHRlcm4gYWdncmVnYXRpb24gYWNyb3NzIHRyYWNlc1xuICpcbiAqIEBzaW5jZSAzLjEuMFxuICovXG5leHBvcnQgY29uc3QgYW5hbHl6ZXIgPSB7XG4gIC8qKlxuICAgKiBBbmFseXplIHNwZWNpZmljIHRyYWNlcyAodXNlci1zZWxlY3RlZClcbiAgICovXG4gIGFzeW5jIGFuYWx5emUob3B0aW9uczoge1xuICAgIHRyYWNlSWRzOiBzdHJpbmdbXTtcbiAgICB0aWVyPzogJ2Zhc3QnIHwgJ3N0YW5kYXJkJyB8ICdkZWVwJztcbiAgICBpbmNsdWRlUm9vdENhdXNlPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlTGF5ZXJzPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgeyB0cmFjZUlkcywgdGllciwgaW5jbHVkZVJvb3RDYXVzZSwgaW5jbHVkZUxheWVycyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3RXaXRoRGF0YSgnL2FuYWx5emVyL2FuYWx5emUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdHJhY2VJZHMsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aWVyLFxuICAgICAgICAgIGluY2x1ZGVSb290Q2F1c2UsXG4gICAgICAgICAgaW5jbHVkZUxheWVycyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiAndjInLFxuICAgIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBbmFseXplIHRyYWNlcyBieSB0aW1lIHdpbmRvd1xuICAgKi9cbiAgYXN5bmMgYW5hbHl6ZVdpbmRvdyhvcHRpb25zOiB7XG4gICAgYWdlbnRJZDogc3RyaW5nO1xuICAgIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgICBlbmREYXRlOiBEYXRlO1xuICAgIGZpbHRlcnM/OiB7XG4gICAgICBvdXRjb21lcz86ICgnZmFpbHVyZScgfCAnZXJyb3InIHwgJ3N1Y2Nlc3MnKVtdO1xuICAgICAgbWluU2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcbiAgICB9O1xuICAgIHNhbXBsaW5nPzoge1xuICAgICAgc3RyYXRlZ3k6ICdhbGwnIHwgJ2ZhaWx1cmVzX29ubHknIHwgJ3NtYXJ0JyB8ICdyYW5kb20nO1xuICAgICAgc2FtcGxlUGVyY2VudD86IG51bWJlcjtcbiAgICB9O1xuICB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3RXaXRoRGF0YSgnL2FuYWx5emVyL2FuYWx5emUtd2luZG93Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0YXJ0RGF0ZTogb3B0aW9ucy5zdGFydERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZW5kRGF0ZTogb3B0aW9ucy5lbmREYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogJ3YyJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKHJlc3BvbnNlIGFzIGFueSkuZGF0YSB8fCByZXNwb25zZTtcbiAgfSxcblxuICAvKipcbiAgICogRXN0aW1hdGUgY29zdCBiZWZvcmUgcnVubmluZyBhbmFseXNpc1xuICAgKi9cbiAgYXN5bmMgZXN0aW1hdGVDb3N0KG9wdGlvbnM6IHtcbiAgICB0cmFjZUlkcz86IHN0cmluZ1tdO1xuICAgIGFnZW50SWQ/OiBzdHJpbmc7XG4gICAgc3RhcnREYXRlPzogRGF0ZTtcbiAgICBlbmREYXRlPzogRGF0ZTtcbiAgICB0aWVyOiAnZmFzdCcgfCAnc3RhbmRhcmQnIHwgJ2RlZXAnO1xuICB9KTogUHJvbWlzZTx7XG4gICAgZXN0aW1hdGVkVHJhY2VzOiBudW1iZXI7XG4gICAgZXN0aW1hdGVkVG9rZW5zOiBudW1iZXI7XG4gICAgZXN0aW1hdGVkQ29zdDogbnVtYmVyO1xuICAgIGVzdGltYXRlZENyZWRpdHM6IG51bWJlcjtcbiAgICB0aWVyOiBzdHJpbmc7XG4gICAgbm90ZTogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9hbmFseXplci9lc3RpbWF0ZS1jb3N0Jywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0YXJ0RGF0ZTogb3B0aW9ucy5zdGFydERhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGVuZERhdGU6IG9wdGlvbnMuZW5kRGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiAndjInLFxuICAgIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYW5hbHlzaXMgcmVzdWx0cyBmb3IgYSBzcGVjaWZpYyB0cmFjZVxuICAgKi9cbiAgYXN5bmMgZ2V0KHRyYWNlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoYC9hbmFseXplci8ke3RyYWNlSWR9YCwgeyBhcGlWZXJzaW9uOiAndjInIH0pO1xuICAgIHJldHVybiAocmVzcG9uc2UgYXMgYW55KS5kYXRhIHx8IHJlc3BvbnNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgaW5zaWdodHMgYWNyb3NzIG11bHRpcGxlIGFuYWx5emVkIHRyYWNlc1xuICAgKi9cbiAgYXN5bmMgc3VtbWFyaXplKG9wdGlvbnM6IHtcbiAgICBhbmFseXNpc0lkcz86IHN0cmluZ1tdO1xuICAgIGFnZW50SWQ/OiBzdHJpbmc7XG4gICAgc3RhcnREYXRlPzogRGF0ZTtcbiAgICBlbmREYXRlPzogRGF0ZTtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0V2l0aERhdGEoJy9hbmFseXplci9zdW1tYXJpemUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc3RhcnREYXRlOiBvcHRpb25zLnN0YXJ0RGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgZW5kRGF0ZTogb3B0aW9ucy5lbmREYXRlPy50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGFwaVZlcnNpb246ICd2MicsXG4gICAgfSk7XG4gICAgcmV0dXJuIChyZXNwb25zZSBhcyBhbnkpLmRhdGEgfHwgcmVzcG9uc2U7XG4gIH0sXG59O1xuXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFVVE8tSU5TVFJVTUVOVEFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIHNldHVwQXV0b0luc3RydW1lbnRhdGlvbihcbiAgZnJhbWV3b3JrczogaW1wb3J0KCcuL2NvcmUvdHlwZXMnKS5GcmFtZXdvcmtbXVxuKTogdm9pZCB7XG4gIGRlYnVnTG9nKGBTZXR0aW5nIHVwIGF1dG8taW5zdHJ1bWVudGF0aW9uIGZvcjogJHtmcmFtZXdvcmtzLmpvaW4oJywgJyl9YCk7XG5cbiAgZm9yIChjb25zdCBmcmFtZXdvcmsgb2YgZnJhbWV3b3Jrcykge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGZyYW1ld29yaykge1xuICAgICAgICBjYXNlICdvcGVuYWknOlxuICAgICAgICBjYXNlICdvcGVuYWktYXNzaXN0YW50cyc6XG4gICAgICAgICAgZGVidWdMb2coJ09wZW5BSSBpbnN0cnVtZW50YXRpb24gcmVhZHkgKHVzZSBpbnN0cnVtZW50T3BlbkFJQ2xpZW50KScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsYW5nY2hhaW4nOlxuICAgICAgICBjYXNlICdsYW5nZ3JhcGgnOlxuICAgICAgICAgIGRlYnVnTG9nKCdMYW5nQ2hhaW4vTGFuZ0dyYXBoIGluc3RydW1lbnRhdGlvbiByZWFkeSAodXNlIFRoaW5rSGl2ZUNhbGxiYWNrSGFuZGxlciknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYW50aHJvcGljJzpcbiAgICAgICAgICBkZWJ1Z0xvZygnQW50aHJvcGljIGluc3RydW1lbnRhdGlvbiByZWFkeScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsbGFtYWluZGV4JzpcbiAgICAgICAgICBkZWJ1Z0xvZygnTGxhbWFJbmRleCBpbnN0cnVtZW50YXRpb24gcmVhZHknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbjhuJzpcbiAgICAgICAgICBkZWJ1Z0xvZygnbjhuIGluc3RydW1lbnRhdGlvbiByZWFkeScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd2b2ljZWZsb3cnOlxuICAgICAgICAgIGRlYnVnTG9nKCdWb2ljZWZsb3cgaW5zdHJ1bWVudGF0aW9uIHJlYWR5Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnTG9nKGBGYWlsZWQgdG8gc2V0dXAgJHtmcmFtZXdvcmt9IGluc3RydW1lbnRhdGlvbjpgLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJFLUVYUE9SVFMgKG5vbi1kdXBsaWNhdGVkKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBSZS1leHBvcnQgZnJvbSBjb25maWcgKG5vdCB5ZXQgZXhwb3J0ZWQpXG5leHBvcnQgeyBpc0luaXRpYWxpemVkLCBTREtfVkVSU0lPTiwgREVGQVVMVF9FTkRQT0lOVCB9O1xuXG4vLyBSZS1leHBvcnQgQVBJIGNsaWVudHMgKHYzKVxuZXhwb3J0IHtcbiAgcnVucyxcbiAgY2xhaW1zLFxuICBjYWxpYnJhdGlvbixcbiAgbGlua2luZyxcbiAgY3VzdG9tZXJDb250ZXh0LFxuICAvLyBOZXcgZXZhbHVhdGlvbiBBUElzXG4gIGh1bWFuUmV2aWV3LFxuICBub25kZXRlcm1pbmlzbSxcbiAgZXZhbEhlYWx0aCxcbiAgZGV0ZXJtaW5pc3RpY0dyYWRlcnMsXG4gIGNvbnZlcnNhdGlvbkV2YWwsXG4gIHRyYW5zY3JpcHRQYXR0ZXJucyxcbiAgLy8gQVBJIEtleSBNYW5hZ2VtZW50IChQaGFzZSAyIFNlY3VyaXR5KVxuICBhcGlLZXlzLFxuICAvLyBST0kgQW5hbHl0aWNzLCBRdWFsaXR5IE1ldHJpY3MsIGFuZCBCdXNpbmVzcyBNZXRyaWNzXG4gIHJvaUFuYWx5dGljcyxcbiAgcXVhbGl0eU1ldHJpY3MsXG4gIGJ1c2luZXNzTWV0cmljcyxcbn07XG5cbi8vIE5vdGU6IGlzc3VlcyBhbmQgYW5hbHl6ZXIgYXJlIGFscmVhZHkgZXhwb3J0ZWQgdmlhICdleHBvcnQgY29uc3QnIGFib3ZlXG5cbi8vIFJlLWV4cG9ydCBoZWxwZXIgZnVuY3Rpb25zXG5leHBvcnQge1xuICAvLyBSdW5zIGhlbHBlcnNcbiAgY3JlYXRlUnVuV2l0aENvbnRleHQsXG4gIHRvT3BlbkFJTWVzc2FnZXMsXG4gIGZyb21PcGVuQUlNZXNzYWdlcyxcbiAgLy8gQ2xhaW1zIGhlbHBlcnNcbiAgaXNGYWN0LFxuICBpc0luZmVyZW5jZSxcbiAgaXNDb21wdXRlZCxcbiAgZ2V0SGlnaENvbmZpZGVuY2VDbGFpbXMsXG4gIGdyb3VwQ2xhaW1zQnlUeXBlLFxuICBncm91cENsYWltc0J5Q2F0ZWdvcnksXG4gIC8vIENhbGlicmF0aW9uIGhlbHBlcnNcbiAgY2FsY3VsYXRlQnJpZXJTY29yZSxcbiAgY2FsY3VsYXRlRUNFLFxuICBpc1dlbGxDYWxpYnJhdGVkLFxuICBnZXRDYWxpYnJhdGlvblF1YWxpdHksXG4gIC8vIExpbmtpbmcgaGVscGVyc1xuICBnZW5lcmF0ZVplbmRlc2tNYXJrZXIsXG4gIHBhcnNlWmVuZGVza01hcmtlcixcbiAgaGFzWmVuZGVza01hcmtlcixcbiAgcmVtb3ZlWmVuZGVza01hcmtlcixcbiAgbGlua1J1blRvVGlja2V0LFxuICBsaW5rUnVuVG9aZW5kZXNrVGlja2V0LFxuICBnZXRCZXN0TGlua01ldGhvZCxcbiAgTElOS19NRVRIT0RfQ09ORklERU5DRSxcbiAgLy8gQ3VzdG9tZXIgY29udGV4dCBoZWxwZXJzXG4gIGNhcHR1cmVDdXN0b21lckNvbnRleHQsXG4gIGdldENvbnRleHRBc09mLFxuICB0b0NvbnRleHRTbmFwc2hvdCxcbiAgY2FsY3VsYXRlQXJyQ2hhbmdlLFxuICBjYWxjdWxhdGVIZWFsdGhUcmVuZCxcbiAgLy8gTm9uLWRldGVybWluaXNtIGhlbHBlcnNcbiAgY2FsY3VsYXRlUGFzc0F0SyxcbiAgY2FsY3VsYXRlUGFzc1RvSyxcbiAgcmVxdWlyZWRQYXNzUmF0ZUZvclBhc3NBdEssXG4gIGlzUmVsaWFibGVFdmFsdWF0aW9uLFxuICBnZXRSZWxpYWJpbGl0eVJlY29tbWVuZGF0aW9uLFxuICAvLyBFdmFsIGhlYWx0aCBoZWxwZXJzXG4gIGhhc0hlYWx0aElzc3VlLFxuICBnZXRIZWFsdGhTZXZlcml0eUxldmVsLFxuICBpc1NhdHVyYXRlZCxcbiAgZ2V0U2F0dXJhdGlvblJlY29tbWVuZGF0aW9uLFxuICAvLyBEZXRlcm1pbmlzdGljIGdyYWRlcnMgaGVscGVyc1xuICBjcmVhdGVSZWdleFJ1bGUsXG4gIGNyZWF0ZUNvbnRhaW5zUnVsZSxcbiAgY3JlYXRlTGVuZ3RoUnVsZSxcbiAgY3JlYXRlSnNvblNjaGVtYVJ1bGUsXG4gIGFsbFJ1bGVzUGFzc2VkLFxuICBnZXRGYWlsZWRSdWxlcyxcbiAgY2FsY3VsYXRlQXZlcmFnZVNjb3JlLFxuICAvLyBDb252ZXJzYXRpb24gZXZhbCBoZWxwZXJzXG4gIGFnZ3JlZ2F0ZVdvcnN0LFxuICBhZ2dyZWdhdGVBdmVyYWdlLFxuICBhZ2dyZWdhdGVXZWlnaHRlZCxcbiAgYWdncmVnYXRlRmluYWxUdXJuLFxuICBhZ2dyZWdhdGVNYWpvcml0eSxcbiAgZ2V0QWdncmVnYXRvcixcbiAgZ2V0UHJvYmxlbWF0aWNUdXJucyxcbiAgYW5hbHl6ZUNvbnZlcnNhdGlvblRyZW5kLFxuICAvLyBUcmFuc2NyaXB0IHBhdHRlcm5zIGhlbHBlcnNcbiAgaXNIaWdoUmlzayxcbiAgZ2V0TWF0Y2hlc0J5Q2F0ZWdvcnksXG4gIGdldENyaXRpY2FsSW5zaWdodHMsXG4gIGhhc1BpaUV4cG9zdXJlLFxuICBoYXNGcnVzdHJhdGlvblNpZ25hbHMsXG4gIGhhc0VzY2FsYXRpb25SZXF1ZXN0LFxuICBnZXRDYXRlZ29yeURpc3RyaWJ1dGlvbixcbiAgZ2V0UmVjb21tZW5kYXRpb25zLFxuICBuZWVkc0F0dGVudGlvbixcbiAgc29ydE1hdGNoZXNCeVNldmVyaXR5LFxuICAvLyBBUEkgS2V5IGhlbHBlcnNcbiAgaGFzUGVybWlzc2lvbixcbiAgaXNBcGlLZXlFeHBpcmVkLFxuICBpc0FwaUtleVZhbGlkLFxuICBnZXRUaW1lVW50aWxFeHBpcnksXG4gIGNhbkFjY2Vzc0FnZW50LFxuICAvLyBST0kgQW5hbHl0aWNzIGhlbHBlcnNcbiAgY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayxcbiAgY2FsY3VsYXRlQXV0b21hdGlvblNhdmluZ3MsXG4gIGZvcm1hdEN1cnJlbmN5LFxuICBnZXRST0lRdWFsaXR5LFxuICAvLyBRdWFsaXR5IE1ldHJpY3MgaGVscGVyc1xuICBwYXNzZXNRdWFsaXR5VGhyZXNob2xkLFxuICBpc0hhbGx1Y2luYXRpb25SaXNrQWNjZXB0YWJsZSxcbiAgZ2V0UXVhbGl0eVJlY29tbWVuZGF0aW9ucyxcbiAgZm9ybWF0UXVhbGl0eVNjb3JlLFxuICBnZXRHcmFkZUNvbG9yLFxuICAvLyBCdXNpbmVzcyBNZXRyaWNzIGhlbHBlcnNcbiAgaXNNZXRyaWNSZWFkeSxcbiAgbmVlZHNNb3JlVHJhY2VzLFxuICBhd2FpdGluZ0V4dGVybmFsRGF0YSxcbiAgaXNNZXRyaWNTdGFsZSxcbiAgZ2V0U3RhdHVzTWVzc2FnZSxcbiAgZ2V0VHJhY2VQcm9ncmVzcyxcbiAgZm9ybWF0TWV0cmljVmFsdWUsXG4gIGdldFRyZW5kRW1vamksXG59O1xuXG4vLyBSZS1leHBvcnQgZXJyb3JzIChpbmNsdWRpbmcgbmV3IHNlY3VyaXR5IGVycm9ycylcbmV4cG9ydCB7XG4gIFRoaW5rSGl2ZUVycm9yLFxuICBUaGlua0hpdmVBcGlFcnJvcixcbiAgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yLFxuICBQZXJtaXNzaW9uRGVuaWVkRXJyb3IsXG4gIEFnZW50U2NvcGVFcnJvcixcbiAgUmF0ZUxpbWl0RXJyb3IsXG4gIElwV2hpdGVsaXN0RXJyb3IsXG59O1xuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCxcbiAgZ2V0VHJhY2VyLFxuICBzaHV0ZG93bixcbiAgaXNJbml0aWFsaXplZCxcbiAgLy8gVHJhY2luZ1xuICB0cmFjZUxMTSxcbiAgdHJhY2VSZXRyaWV2YWwsXG4gIHRyYWNlVG9vbCxcbiAgdHJhY2VDaGFpbixcbiAgLy8gQVBJIGNsaWVudHNcbiAgcnVucyxcbiAgY2xhaW1zLFxuICBjYWxpYnJhdGlvbixcbiAgbGlua2luZyxcbiAgY3VzdG9tZXJDb250ZXh0LFxuICAvLyBFdmFsdWF0aW9uIEFQSXNcbiAgaHVtYW5SZXZpZXcsXG4gIG5vbmRldGVybWluaXNtLFxuICBldmFsSGVhbHRoLFxuICBkZXRlcm1pbmlzdGljR3JhZGVycyxcbiAgY29udmVyc2F0aW9uRXZhbCxcbiAgdHJhbnNjcmlwdFBhdHRlcm5zLFxuICAvLyBBUEkgS2V5IE1hbmFnZW1lbnQgKFBoYXNlIDIgU2VjdXJpdHkpXG4gIGFwaUtleXMsXG4gIC8vIElzc3VlcyBhbmQgQW5hbHl6ZXIgQVBJc1xuICBpc3N1ZXMsXG4gIGFuYWx5emVyLFxuICAvLyBST0kgQW5hbHl0aWNzLCBRdWFsaXR5IE1ldHJpY3MsIGFuZCBCdXNpbmVzcyBNZXRyaWNzXG4gIHJvaUFuYWx5dGljcyxcbiAgcXVhbGl0eU1ldHJpY3MsXG4gIGJ1c2luZXNzTWV0cmljcyxcbiAgLy8gSGVscGVyc1xuICBnZW5lcmF0ZVplbmRlc2tNYXJrZXIsXG4gIHBhcnNlWmVuZGVza01hcmtlcixcbiAgbGlua1J1blRvVGlja2V0LFxuICBjcmVhdGVSdW5XaXRoQ29udGV4dCxcbiAgLy8gVXRpbGl0aWVzXG4gIGlzRmFjdCxcbiAgaXNJbmZlcmVuY2UsXG4gIGNhbGN1bGF0ZUJyaWVyU2NvcmUsXG4gIGlzV2VsbENhbGlicmF0ZWQsXG4gIGNhbGN1bGF0ZVBhc3NBdEssXG4gIGlzUmVsaWFibGVFdmFsdWF0aW9uLFxuICBpc0hpZ2hSaXNrLFxuICBuZWVkc0F0dGVudGlvbixcbiAgLy8gUk9JIGhlbHBlcnNcbiAgY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayxcbiAgZm9ybWF0Q3VycmVuY3ksXG4gIC8vIFF1YWxpdHkgaGVscGVyc1xuICBwYXNzZXNRdWFsaXR5VGhyZXNob2xkLFxuICBpc0hhbGx1Y2luYXRpb25SaXNrQWNjZXB0YWJsZSxcbiAgLy8gQnVzaW5lc3MgTWV0cmljcyBoZWxwZXJzXG4gIGlzTWV0cmljUmVhZHksXG4gIG5lZWRzTW9yZVRyYWNlcyxcbiAgZ2V0U3RhdHVzTWVzc2FnZSxcbn07XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thinkhive/sdk",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "ThinkHive SDK v3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
|
+
"description": "ThinkHive SDK v3.3 - AI agent observability with business metrics, ROI analytics, and 25+ trace format support",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -68,10 +68,14 @@
|
|
|
68
68
|
"homepage": "https://thinkhive.ai",
|
|
69
69
|
"repository": {
|
|
70
70
|
"type": "git",
|
|
71
|
-
"url": "https://github.com/
|
|
71
|
+
"url": "https://github.com/Abdul-Omira/ThinkHiveMind.git",
|
|
72
|
+
"directory": "thinkhive-js"
|
|
72
73
|
},
|
|
73
74
|
"bugs": {
|
|
74
|
-
"url": "https://github.com/
|
|
75
|
+
"url": "https://github.com/Abdul-Omira/ThinkHiveMind/issues"
|
|
76
|
+
},
|
|
77
|
+
"publishConfig": {
|
|
78
|
+
"access": "public"
|
|
75
79
|
},
|
|
76
80
|
"engines": {
|
|
77
81
|
"node": ">=18.0.0"
|