@pipeline-builder/api-core 5.2.6 → 5.2.7
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/lib/constants/ai-providers.js +1 -1
- package/lib/constants/http-status.js +1 -1
- package/lib/constants/index.js +1 -1
- package/lib/constants/time.js +1 -1
- package/lib/errors/app-errors.js +1 -1
- package/lib/errors/index.js +1 -1
- package/lib/helpers/access-helpers.d.ts +19 -0
- package/lib/helpers/access-helpers.js +24 -4
- package/lib/helpers/content-disposition.js +1 -1
- package/lib/helpers/crud-helpers.js +1 -1
- package/lib/helpers/index.d.ts +1 -1
- package/lib/helpers/index.js +2 -2
- package/lib/helpers/org-hierarchy-http.js +1 -1
- package/lib/helpers/org-hierarchy.js +1 -1
- package/lib/helpers/restore-helpers.js +1 -1
- package/lib/helpers/sse-helpers.js +13 -2
- package/lib/helpers/support-calendar.js +1 -1
- package/lib/index.js +1 -1
- package/lib/middleware/ask-provenance.js +1 -1
- package/lib/middleware/assurance.js +1 -1
- package/lib/middleware/auth.js +1 -1
- package/lib/middleware/deferred-quota-check.js +1 -1
- package/lib/middleware/ecosystem-guard.js +1 -1
- package/lib/middleware/index.js +1 -1
- package/lib/middleware/jwt-verify.js +1 -1
- package/lib/middleware/mongo-sanitize.js +1 -1
- package/lib/middleware/on-behalf.js +1 -1
- package/lib/middleware/permission-gates.js +1 -1
- package/lib/middleware/quota-exempt-routes.js +1 -1
- package/lib/middleware/revocation.js +1 -1
- package/lib/middleware/route-table.js +16 -1
- package/lib/middleware/service-tokens.js +1 -1
- package/lib/middleware/step-up.js +1 -1
- package/lib/middleware/system-org.d.ts +18 -5
- package/lib/middleware/system-org.js +19 -6
- package/lib/openapi/extend-zod.js +1 -1
- package/lib/openapi/index.js +1 -1
- package/lib/openapi/registry.js +1 -1
- package/lib/openapi/routes/ask-routes.js +1 -1
- package/lib/openapi/routes/billing-routes.js +1 -1
- package/lib/openapi/routes/image-registry-routes.js +1 -1
- package/lib/openapi/routes/index.js +1 -1
- package/lib/openapi/routes/message-routes.js +1 -1
- package/lib/openapi/routes/pipeline-routes.js +1 -1
- package/lib/openapi/routes/pipeline-template-routes.js +1 -1
- package/lib/openapi/routes/plugin-routes.js +1 -1
- package/lib/openapi/routes/quota-routes.js +1 -1
- package/lib/openapi/schema-registry.js +1 -1
- package/lib/routes/health.js +1 -1
- package/lib/routes/index.js +1 -1
- package/lib/services/ai-call-weight.js +1 -1
- package/lib/services/alert-delivery.js +1 -1
- package/lib/services/api-key-exchange.js +1 -1
- package/lib/services/audit-context.js +1 -1
- package/lib/services/audit-spool.js +1 -1
- package/lib/services/cache-service.js +1 -1
- package/lib/services/circuit-breaker.js +1 -1
- package/lib/services/compliance-client.js +1 -1
- package/lib/services/compliance-event-subscriber.js +1 -1
- package/lib/services/durable-event-bus.js +1 -1
- package/lib/services/ecosystem-notify-client.d.ts +7 -1
- package/lib/services/ecosystem-notify-client.js +9 -3
- package/lib/services/entity-events.js +1 -1
- package/lib/services/env-redis.js +1 -1
- package/lib/services/http-client.js +19 -3
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.js +2 -2
- package/lib/services/jwks-cache.js +1 -1
- package/lib/services/leader-lock.js +1 -1
- package/lib/services/notification-channels.js +1 -1
- package/lib/services/org-ai-client.js +1 -1
- package/lib/services/pagerduty-inbound.js +1 -1
- package/lib/services/pagerduty.js +1 -1
- package/lib/services/quota-increment-batcher.js +1 -1
- package/lib/services/quota.js +1 -1
- package/lib/services/remote-audit-client.js +1 -1
- package/lib/services/retry-forever.js +1 -1
- package/lib/services/retry-strategy.js +1 -1
- package/lib/services/s3-client.js +1 -1
- package/lib/services/scheduler.js +1 -1
- package/lib/services/service-boot.js +1 -1
- package/lib/services/service-keys.js +2 -2
- package/lib/services/sse-ticket-store.js +1 -1
- package/lib/services/system-notification.js +1 -1
- package/lib/services/token-revocation.js +1 -1
- package/lib/services/version-vuln-policy.d.ts +11 -0
- package/lib/services/version-vuln-policy.js +33 -7
- package/lib/types/ai-catalog.js +1 -1
- package/lib/types/ask-proposals.d.ts +23 -0
- package/lib/types/ask-proposals.js +29 -1
- package/lib/types/audit-events.js +1 -1
- package/lib/types/build-catalog.d.ts +65 -0
- package/lib/types/build-catalog.js +95 -1
- package/lib/types/catalog-metadata.js +1 -1
- package/lib/types/common.js +1 -1
- package/lib/types/compliance-exemption.js +1 -1
- package/lib/types/ecosystem-notifications.d.ts +9 -0
- package/lib/types/ecosystem-notifications.js +15 -6
- package/lib/types/ecosystem.d.ts +1 -6
- package/lib/types/ecosystem.js +18 -5
- package/lib/types/error-codes.js +1 -1
- package/lib/types/feature-flags.d.ts +17 -1
- package/lib/types/feature-flags.js +1 -1
- package/lib/types/http.js +1 -1
- package/lib/types/index.d.ts +3 -3
- package/lib/types/index.js +4 -4
- package/lib/types/metadata-keys.js +1 -1
- package/lib/types/permissions.d.ts +60 -13
- package/lib/types/permissions.js +63 -14
- package/lib/types/pipeline-template.js +1 -1
- package/lib/types/pipeline.js +1 -1
- package/lib/types/plugin-catalog.js +1 -1
- package/lib/types/plugin-health.js +1 -1
- package/lib/types/plugin-scan.d.ts +69 -0
- package/lib/types/plugin-scan.js +77 -1
- package/lib/types/quota-catalog.js +15 -2
- package/lib/types/quota-tiers.d.ts +27 -160
- package/lib/types/quota-tiers.js +47 -255
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +9 -1
- package/lib/types/reserved-tags.js +1 -1
- package/lib/types/tier-limits.d.ts +210 -0
- package/lib/types/tier-limits.js +254 -0
- package/lib/types/usage-projection.js +1 -1
- package/lib/types/visibility.js +1 -1
- package/lib/types/wire-vocabulary.d.ts +7 -0
- package/lib/types/wire-vocabulary.js +7 -1
- package/lib/utils/alias-resolver.js +1 -1
- package/lib/utils/api-key.js +1 -1
- package/lib/utils/audit.js +1 -1
- package/lib/utils/aws-scrub.js +1 -1
- package/lib/utils/compliance-attributes.js +1 -1
- package/lib/utils/concurrency-gate.d.ts +98 -0
- package/lib/utils/concurrency-gate.js +110 -0
- package/lib/utils/concurrency.js +1 -1
- package/lib/utils/crash-handlers.js +1 -1
- package/lib/utils/date.js +1 -1
- package/lib/utils/dsse.js +1 -1
- package/lib/utils/env.d.ts +11 -0
- package/lib/utils/env.js +14 -1
- package/lib/utils/headers.js +1 -1
- package/lib/utils/identity.js +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +2 -1
- package/lib/utils/jwk.js +2 -2
- package/lib/utils/logger.js +1 -1
- package/lib/utils/metric-emitter.js +1 -1
- package/lib/utils/object.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/plugin-compliance.d.ts +9 -1
- package/lib/utils/plugin-compliance.js +1 -1
- package/lib/utils/proof-of-work.js +1 -1
- package/lib/utils/response.js +1 -1
- package/lib/utils/retention.js +1 -1
- package/lib/utils/safe-require.js +1 -1
- package/lib/utils/secret-encryption.js +1 -1
- package/lib/utils/secret-rotation.js +1 -1
- package/lib/utils/secure-compare.js +1 -1
- package/lib/utils/sensitive-patterns.js +1 -1
- package/lib/utils/service-registry.js +1 -1
- package/lib/utils/ssrf.js +1 -1
- package/lib/validation/ai-schemas.js +1 -1
- package/lib/validation/common-schemas.js +1 -1
- package/lib/validation/dockerfile-static.js +1 -1
- package/lib/validation/index.d.ts +1 -1
- package/lib/validation/index.js +2 -2
- package/lib/validation/message-schemas.d.ts +73 -0
- package/lib/validation/message-schemas.js +63 -2
- package/lib/validation/middleware.js +1 -1
- package/lib/validation/pipeline-schemas.js +1 -1
- package/lib/validation/pipeline-template-schemas.js +1 -1
- package/lib/validation/plugin-base-images.js +1 -1
- package/lib/validation/plugin-catalog-detect.js +1 -1
- package/lib/validation/plugin-catalog-metadata.js +1 -1
- package/lib/validation/plugin-heuristics.js +1 -1
- package/lib/validation/plugin-lint.js +1 -1
- package/lib/validation/plugin-name-confusable.js +1 -1
- package/lib/validation/plugin-schemas.js +1 -1
- package/lib/validation/plugin-spec-schema.js +1 -1
- package/lib/validation/plugin-template-contract.js +1 -1
- package/package.json +11 -4
|
@@ -231,6 +231,21 @@ function toEntry(method, path, gates) {
|
|
|
231
231
|
quota.checked.push(g.quotaType);
|
|
232
232
|
break;
|
|
233
233
|
}
|
|
234
|
+
// A GATE KIND THAT REACHES HERE WOULD BE INVISIBLE, which is the one
|
|
235
|
+
// failure this table cannot afford. `docs/permission-catalog` and the
|
|
236
|
+
// permission contract are both DERIVED from these entries, so a kind
|
|
237
|
+
// nothing projects leaves the route's cell blank — and the contract's
|
|
238
|
+
// "a weakening fails HERE" test then passes over a route whose real
|
|
239
|
+
// requirement it never saw. That is exactly what the dynamicAuthz note
|
|
240
|
+
// above records paying for once: gates that were correct but invisible.
|
|
241
|
+
//
|
|
242
|
+
// So this is a compile error, not a runtime one: adding a member to
|
|
243
|
+
// `RouteGate` fails the build until someone decides how it appears in the
|
|
244
|
+
// table. The throw is unreachable except through a cast.
|
|
245
|
+
default: {
|
|
246
|
+
const _exhaustive = g;
|
|
247
|
+
throw new Error(`Unprojected route gate kind: ${JSON.stringify(_exhaustive)}`);
|
|
248
|
+
}
|
|
234
249
|
}
|
|
235
250
|
}
|
|
236
251
|
// An exempt route's apiCalls meter + check skip it at runtime, so the table
|
|
@@ -309,4 +324,4 @@ export function summarizeRouteTable(table) {
|
|
|
309
324
|
internal: table.filter((e) => e.internalCallers.length > 0).length,
|
|
310
325
|
};
|
|
311
326
|
}
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9yb3V0ZS10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBYzlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUztDQUNwRixDQUFDO0FBOERYLHNFQUFzRTtBQUN0RSxpRUFBaUU7QUFDakUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUM3RCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUl6RTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQW1CLEVBQUssRUFBRSxHQUFHLEtBQWtCO0lBQ3pFLE1BQU0sQ0FBQyxHQUFHLEVBQWdCLENBQUM7SUFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJ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LGdCQUFnQixJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1SSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUQsT0FBTztRQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUM5QyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUM1RCxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtLQUNuRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEludHJvc3BlY3RhYmxlIHJvdXRlIHRhYmxlLlxuICpcbiAqIEF1dGhvcml6YXRpb24gaXMgc3BsaXQgYmV0d2VlbiByb3V0ZXIgbW91bnRzIChgYXBwLnVzZSgnL3gnLCBnYXRlLCByb3V0ZXIpYClcbiAqIGFuZCBpbmRpdmlkdWFsIHJvdXRlcywgc28gZ3JlcHBpbmcgc291cmNlIGNhbid0IHByb3ZlIHRoYXQgZXZlcnkgcm91dGUgaXNcbiAqIGdhdGVkLiBJbnN0ZWFkLCBldmVyeSBnYXRlIG1pZGRsZXdhcmUgaW4gdGhpcyBwYWNrYWdlIGNhcnJpZXMgTUVUQURBVEEgKHdoYXQgaXRcbiAqIHJlcXVpcmVzKSwgYW5kIHtAbGluayBidWlsZFJvdXRlVGFibGV9IHdhbGtzIGFuIGFzc2VtYmxlZCBFeHByZXNzIGFwcCBhbmRcbiAqIHJlc29sdmVzLCBwZXIgbWV0aG9kICsgcGF0aCwgdGhlIGZ1bGwgY2hhaW4gb2YgZ2F0ZXMgRXhwcmVzcyB3b3VsZCBydW4gYmVmb3JlXG4gKiB0aGUgaGFuZGxlcjogcGVybWlzc2lvbnMsIHN5c3RlbS1hZG1pbiwgc2VydmljZSBwcmluY2lwYWwsIHN0ZXAtdXAsIGZlYXR1cmUsXG4gKiB0b2tlbiBzY29wZSwgYW5kIHRoZSBhdWRpdCBhY3Rpb25zIHRoZSByb3V0ZSBkZWNsYXJlcyB2aWEge0BsaW5rIGF1ZGl0ZWR9LlxuICpcbiAqIEV4cHJlc3MgNSAocm91dGVyQDIpIGRvZXMgbm90IGtlZXAgYSBtb3VudCdzIHBhdGggc3RyaW5nIG9uIGl0cyBsYXllciwgc28gdGhpc1xuICogbW9kdWxlIHJlY29yZHMgaXQ6IG9uIGltcG9ydCBpdCB3cmFwcyBgUm91dGVyLnByb3RvdHlwZS51c2VgIHRvIHN0YW1wIGVhY2ggbmV3XG4gKiBsYXllciB3aXRoIHRoZSBwYXRoIGl0IHdhcyBtb3VudGVkIGF0LiBhcGktY29yZSBpcyBpbXBvcnRlZCBiZWZvcmUgYW55IHJvdXRlXG4gKiBtb2R1bGUgcmVnaXN0ZXJzIGEgcm91dGUsIHNvIGV2ZXJ5IGxheWVyIGFuIGFwcCBidWlsZHMgaXMgc3RhbXBlZC4gVGhlIHdyYXBcbiAqIG9ubHkgYWRkcyBhIHN5bWJvbCBwcm9wZXJ0eTsgcm91dGluZyBiZWhhdmlvdXIgaXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgaXNRdW90YUV4ZW1wdFJvdXRlIH0gZnJvbSAnLi9xdW90YS1leGVtcHQtcm91dGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL3R5cGVzL3Blcm1pc3Npb25zLmpzJztcblxuLyoqXG4gKiBXaGF0IGEgTUFDSElORSBjcmVkZW50aWFsIChQQVQsIHNlcnZpY2UgYWNjb3VudCkgbWVldHMgb24gYSByb3V0ZSBnYXRlZCBieVxuICogYHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZWAgd2hpbGUgdGhlIG9yZydzIGFkbWluLU1GQSBwb2xpY3kgaXMgb246XG4gKiAgIC0gYGFsbG93YCAg4oCUIHRoZSByb3V0ZSBpcyBsZWdpdGltYXRlbHkgbWFjaGluZS1jYWxsYWJsZSAoYXV0b21hdGlvbiB0aGF0XG4gKiAgICAgICAgICAgICAgICBtYW5hZ2VzIG1lbWJlcnMsIHJvbGVzLCBiaWxsaW5n4oCmKTsgdGhlIHBvbGljeSBpcyBhYm91dCBob3dcbiAqICAgICAgICAgICAgICAgIHN0cm9uZ2x5IGEgUEVSU09OJ3Mgc2Vzc2lvbiB3YXMgb3BlbmVkLCBzbyBpdCBkb2VzIG5vdCBhcHBseTtcbiAqICAgLSBgcmVmdXNlYCDigJQgb25seSBhIHBlcnNvbiBtYXkgZG8gdGhpcyB3aGlsZSB0aGUgcG9saWN5IGlzIG9uICg0MDNcbiAqICAgICAgICAgICAgICAgIGBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEYCksIGUuZy4gbWludGluZyBhbm90aGVyIGNyZWRlbnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ0FkbWluQXNzdXJhbmNlTWFjaGluZXMgPSAnYWxsb3cnIHwgJ3JlZnVzZSc7XG5cbi8qKlxuICogVGhlIENMT1NFRCBzZXQgb2YgcHJpbmNpcGFsIGtpbmRzIGEgYGR5bmFtaWNBdXRoemAgcnVsZSBtYXkgYWRtaXQuXG4gKlxuICogQSByb3V0ZSB3aG9zZSBhdXRob3JpdHkgaXMgcmVzb2x2ZWQgaW4gdGhlIGhhbmRsZXIgc3RpbGwgaGFzIHRvIHNheSBXSE8gY2FuXG4gKiBnZXQgdGhyb3VnaCBpdC4gVGhlc2UgYXJlIHRoZSBraW5kcywgZGVsaWJlcmF0ZWx5IGNvYXJzZSDigJQgdGhlIHByZWNpc2VcbiAqIHByZWRpY2F0ZSBsaXZlcyBpbiB0aGUgcHJvc2UgcnVsZSBhbmQgaW4gdGhlIGNvZGU6XG4gKlxuICogIC0gYHN1cGVyYWRtaW5gICAgIOKAlCB0aGUgYFVzZXIuaXNTdXBlckFkbWluYCBmbGFnIChgaXNTeXN0ZW1BZG1pbihyZXEpYCkuXG4gKiAgLSBgc3lzdGVtLW9yZ2AgICAg4oCUIGEgbWVtYmVyIG9mIHRoZSBzeXN0ZW0gb3JnIGhvbGRpbmcgYSBuYW1lZCBwZXJtaXNzaW9uO1xuICogICAgICAgICAgICAgICAgICAgICAgbGlzdCB0aGUgaWRzIGluIGBwZXJtaXNzaW9uc2Agc28gdGhlIGNvdmVyYWdlIHNjYW4gYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udHJhY3QgY2FuIHNlZSB0aGVtLlxuICogIC0gYHRlbmFudC1hZG1pbmAgIOKAlCBhbiBhZG1pbiBvciBvd25lciBvZiB0aGUgdGFyZ2V0J3Mgb3duIG9yZywgb3Igb2YgYW5cbiAqICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yIG9mIGl0LiBOT1QgYSBzdXBlcmFkbWluIGJ5IHZpcnR1ZSBvZiB0aGUgZmxhZzpcbiAqICAgICAgICAgICAgICAgICAgICAgIHNldmVyYWwgb2YgdGhlc2UgcnVsZXMgcmVmdXNlIHRoZSBmbGFnIG9uIHB1cnBvc2UuXG4gKiAgLSBgdGVuYW50LW1lbWJlcmAg4oCUIGFueSBtZW1iZXIgb2YgdGhlIHRhcmdldCdzIG9yZywgYWRtaW4gb3Igbm90LlxuICogIC0gYHN1YmplY3RgICAgICAgIOKAlCB0aGUgdmVyeSB1c2VyIHRoZSByZXF1ZXN0IGlzIGFib3V0IChzZWxmLXNlcnZpY2UpLlxuICogIC0gYHNlcnZpY2VgICAgICAgIOKAlCBhIHNlcnZpY2UgcHJpbmNpcGFsIC8gaW50ZXJuYWwgY2FsbGVyLlxuICogIC0gYGdhdGV3YXlgICAgICAgIOKAlCB0aGUgaW5ncmVzcyBpdHNlbGYgc3VwcGxpZXMgdGhlIGZhY3QgKHRoZSBjb25zb2xlXG4gKiAgICAgICAgICAgICAgICAgICAgICBgYXV0aF9yZXF1ZXN0YCBwYXNzZXMgdGhlIGNvbnNvbGUgY2xhc3MgaW4gYSBoZWFkZXIpLlxuICovXG5leHBvcnQgY29uc3QgRFlOQU1JQ19QUklOQ0lQQUxTID0gW1xuICAnc3VwZXJhZG1pbicsICdzeXN0ZW0tb3JnJywgJ3RlbmFudC1hZG1pbicsICd0ZW5hbnQtbWVtYmVyJywgJ3N1YmplY3QnLCAnc2VydmljZScsICdnYXRld2F5Jyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBEeW5hbWljUHJpbmNpcGFsID0gdHlwZW9mIERZTkFNSUNfUFJJTkNJUEFMU1tudW1iZXJdO1xuXG4vKiogT25lIHJlcXVpcmVtZW50IGEgZ2F0ZSBtaWRkbGV3YXJlIGVuZm9yY2VzLiAqL1xuZXhwb3J0IHR5cGUgUm91dGVHYXRlID1cbiAgfCB7IGtpbmQ6ICdhdXRoJyB9XG4gIHwgeyBraW5kOiAncGVybWlzc2lvbic7IG1vZGU6ICdhbnknIHwgJ2FsbCc7IHBlcm1pc3Npb25zOiByZWFkb25seSBQZXJtaXNzaW9uW107IGFsbG93U2VydmljZT86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ3N5c3RlbUFkbWluJyB9XG4gIC8qKlxuICAgKiBBdXRob3JpemF0aW9uIHRoZSByb3V0ZSBDQU5OT1QgZXhwcmVzcyBzdGF0aWNhbGx5LCByZXNvbHZlZCBpbiB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogU29tZSBhdXRob3JpdHkgZGVwZW5kcyBvbiB0aGUgcmVxdWVzdDogaW1wZXJzb25hdGlvbiBhc2tzIHdoZXRoZXIgdGhlIGNhbGxlclxuICAgKiBpcyBhIHN5c2FkbWluIE9SIGFuIGFkbWluIG9mIGFuIGFuY2VzdG9yIG9mIHRoZSBUQVJHRVQgdXNlcidzIG9yZywgd2hpY2ggaXNcbiAgICogb25seSBhbnN3ZXJhYmxlIG9uY2UgdGhlIHRhcmdldCBpcyBrbm93bi4gVGhvc2UgZ2F0ZXMgd2VyZSBjb3JyZWN0IGJ1dFxuICAgKiBpbnZpc2libGUg4oCUIHRoZSByb3V0ZSB0YWJsZSBzaG93ZWQgbm8gcmVxdWlyZW1lbnQsIGFuZFxuICAgKiBgZG9jcy9wZXJtaXNzaW9uLWNvbnRyYWN0Lm1kYCBpcyBkZXJpdmVkIGZyb20gdGhlIHRhYmxlLCBzbyB0aGUgYXJ0aWZhY3QgdGhlXG4gICAqIHJlcG8gY2FsbHMgaXRzIHJldmlldyBzdXJmYWNlIHJlYWQgYmxhbmsgZm9yIHRoZSBzdHJvbmdlc3QgcHJpdmlsZWdlIGluIHRoZVxuICAgKiBzeXN0ZW0uXG4gICAqXG4gICAqIFRoaXMgcmVjb3JkcyB0aGUgcmVxdWlyZW1lbnQgaW4gcHJvc2UgQU5EIGFzIGEgY2xvc2VkIHNldCBvZiBwcmluY2lwYWxcbiAgICoga2luZHMuIEl0IGF1dGhvcml6ZXMgTk9USElORzsgdGhlIGhhbmRsZXIgc3RpbGwgZG9lcyB0aGUgd29yay4gSXRzIHZhbHVlIGlzXG4gICAqIHRoYXQgYSByZXZpZXdlciByZWFkaW5nIHRoZSBjb250cmFjdCBzZWVzIGEgc3RhdGVkIHJ1bGUgaW5zdGVhZCBvZiBhbiBlbXB0eVxuICAgKiBjZWxsLCBhbmQgdGhhdCByZW1vdmluZyB0aGUgcmVhbCBjaGVjayBsZWF2ZXMgYSBkZWNsYXJhdGlvbiBiZWhpbmQgdGhhdCBub1xuICAgKiBsb25nZXIgbWF0Y2hlcy5cbiAgICpcbiAgICogV0hZIGByZWFjaGFibGVCeWAgRVhJU1RTIEJFU0lERSBUSEUgUFJPU0UuIFByb3NlIGlzIHVucmV2aWV3YWJsZSBieSBhIHRlc3QsXG4gICAqIGFuZCBvbmUgb2YgdGhlc2UgcnVsZXMgd2FzIHdyb25nOiB0aGUgaW1wZXJzb25hdGlvbiBgZGVjaWRlYCByb3V0ZSBkZWNsYXJlZFxuICAgKiBcImEgRElGRkVSRU5UIHN5c2FkbWluIHRoYW4gdGhlIHJlcXVlc3RlciAodHdvLXBlcnNvbiBydWxlKVwiLCB3aGljaCBpcyBvbmx5XG4gICAqIGl0cyBicmVhay1nbGFzcyBicmFuY2gg4oCUIHRoZSBvcmRpbmFyeSBicmFuY2ggaXMgdGhlIHRlbmFudCdzIG5hbWVkIGFwcHJvdmVyXG4gICAqIG9yIGEgZ2VudWluZSB0ZW5hbnQgYWRtaW4sIGFuZCBhIHN5c2FkbWluIGFsb25lIGlzIGV4cGxpY2l0bHkgUkVGVVNFRCB0aGVyZS5cbiAgICogTm90aGluZyBjb3VsZCBub3RpY2UsIGJlY2F1c2UgdGhlIG9ubHkgbWFjaGluZS1yZWFkYWJsZSBmaWVsZHMgc2FpZFxuICAgKiBgc3lzdGVtQWRtaW46IGZhbHNlLCBwZXJtaXNzaW9uczogW11gLiBBIGNsb3NlZCBzZXQgbWFrZXMgdGhlIGF1dGhvclxuICAgKiBlbnVtZXJhdGUgcHJpbmNpcGFscywgbGV0cyB0aGUgY292ZXJhZ2Ugc2NhbiBhc3NlcnQgdGhlIGRlY2xhcmF0aW9uIGV4aXN0cyxcbiAgICogYW5kIGxldHMgXCJ3aGljaCByb3V0ZXMgY2FuIHRoZSBzdXBlcmFkbWluIGZsYWcgcmVhY2g/XCIgYmUgYW5zd2VyZWQgYnkgYVxuICAgKiBxdWVyeSBpbnN0ZWFkIG9mIGJ5IHJlYWRpbmcgc2l4IHBhcmFncmFwaHMuXG4gICAqL1xuICB8IHsga2luZDogJ2R5bmFtaWNBdXRoeic7IHJ1bGU6IHN0cmluZzsgcmVhY2hhYmxlQnk6IHJlYWRvbmx5IER5bmFtaWNQcmluY2lwYWxbXTsgcGVybWlzc2lvbnM/OiByZWFkb25seSBQZXJtaXNzaW9uW10gfVxuICB8IHsga2luZDogJ3NlcnZpY2VQcmluY2lwYWwnIH1cbiAgLyoqIEFuIElOVEVSTkFMIHJvdXRlOiB1c2VyIHRva2VucyByZWZ1c2VkIG91dHJpZ2h0LCBvbmx5IHRoZXNlIHNlcnZpY2VzIGFkbWl0dGVkLiAqL1xuICB8IHsga2luZDogJ2ludGVybmFsU2VydmljZSc7IGNhbGxlcnM6IHJlYWRvbmx5IHN0cmluZ1tdIH1cbiAgfCB7IGtpbmQ6ICdzdGVwVXAnOyBtZXRob2RzPzogcmVhZG9ubHkgc3RyaW5nW10gfVxuICAvKiogVGhlIHdob2xlIFNFU1NJT04gbXVzdCBiZSBNRkEtZ3JhZGUgKGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSB9KWApLCBhbmRcbiAgICogIG9wdGlvbmFsbHkgbm8gb2xkZXIgdGhhbiBgbWF4QWdlYCBzZWNvbmRzLiBgZXhlbXB0YCBuYW1lcyBhIGNhcnZlLW91dCB0aGVcbiAgICogIGdhdGUgYXBwbGllcyB0byBhIG5hcnJvdyBjbGFzcyBvZiByZXF1ZXN0IChzZWUgYEFzc3VyYW5jZU9wdGlvbnMuZXhlbXB0YCksXG4gICAqICBzbyBhIHJvdXRlIHdob3NlIGxldmVsIGlzIGNvbmRpdGlvbmFsIHNheXMgc28gb24gdGhlIHRhYmxlLiAqL1xuICB8IHsga2luZDogJ2Fzc3VyYW5jZSc7IG1pbkFzc3VyYW5jZTogMSB8IDI7IG1heEFnZT86IG51bWJlcjsgZXhlbXB0Pzogc3RyaW5nIH1cbiAgLyoqIFRoZSBzZXNzaW9uIG11c3QgYmUgTUZBLWdyYWRlIFdIRU4gdGhlIG9yZydzIGBhZG1pbkFjdGlvbnNSZXF1aXJlTWZhYFxuICAgKiAgcG9saWN5IGlzIG9uIChgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCkuIGBtYWNoaW5lc2Agc2F5cyB3aGF0IGEgbWFjaGluZVxuICAgKiAgY3JlZGVudGlhbCBtZWV0cyBvbiB0aGUgcm91dGUgd2hpbGUgdGhlIHBvbGljeSBpcyBvbi4gKi9cbiAgfCB7IGtpbmQ6ICdvcmdBZG1pbkFzc3VyYW5jZSc7IG1hY2hpbmVzOiBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzIH1cbiAgLyoqIFRoZSBjYWxsZXIncyBBQ1RJVkUgb3JnIG11c3QgYmUgdGhlIHN5c3RlbSBvcmcgKGByZXF1aXJlU3lzdGVtT3JnYCkg4oCUIHRoZVxuICAgKiAgcGx1Z2luLWVjb3N5c3RlbSBnb3Zlcm5hbmNlIGJvdW5kYXJ5IChkb2NzL3J1bmJvb2tzL2Vjb3N5c3RlbS1tb2RlcmF0aW9uLm1kKS4gKi9cbiAgfCB7IGtpbmQ6ICdzeXN0ZW1PcmcnIH1cbiAgfCB7IGtpbmQ6ICdmZWF0dXJlJzsgZmVhdHVyZTogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdzY29wZSc7IHNjb3BlOiBzdHJpbmcgfVxuICB8IHsga2luZDogJ2F1ZGl0JzsgYWN0aW9uczogcmVhZG9ubHkgc3RyaW5nW10gfVxuICAvKiogQSBxdW90YSBtaWRkbGV3YXJlOiBgbWV0ZXJgIGluY3JlbWVudHMgdGhlIHR5cGUgb25jZSBwZXIgMnh4XG4gICAqICAoYG1ldGVyUXVvdGFPblN1Y2Nlc3NgKSwgYGNoZWNrYCA0MjlzIHdoZW4gdGhlIHR5cGUgaXMgc3BlbnQgKGBjaGVja1F1b3RhYCkuXG4gICAqICBSZWNvcmRlZCBzbyB0aGUgcXVvdGEgY292ZXJhZ2UgY2hlY2sgY2FuIHNlZSBhbiB1bm1ldGVyZWQgdXNlciByb3V0ZSDigJQgYW5kIGFcbiAgICogIHJvdXRlIG1ldGVyZWQgVFdJQ0UsIHdoaWNoIGRvdWJsZS1iaWxscyBldmVyeSBjYWxsLiAqL1xuICB8IHsga2luZDogJ3F1b3RhJzsgbW9kZTogJ21ldGVyJyB8ICdjaGVjayc7IHF1b3RhVHlwZTogc3RyaW5nIH07XG5cbi8vIFN5bWJvbC5mb3IsIG5vdCBTeW1ib2woKTogYSB0ZXN0IHRoYXQgbG9hZHMgYXBpLWNvcmUgdHdpY2UgKEVTTSArIGFcbi8vIHJlcXVpcmVBY3R1YWwgY29weSkgbXVzdCBzdGlsbCBzZWUgdGFncyBzZXQgYnkgdGhlIG90aGVyIGNvcHkuXG5jb25zdCBHQVRFUyA9IFN5bWJvbC5mb3IoJ3BpcGVsaW5lLWJ1aWxkZXIucm91dGUtZ2F0ZXMnKTtcbmNvbnN0IExBWUVSX1BBVEggPSBTeW1ib2wuZm9yKCdwaXBlbGluZS1idWlsZGVyLmxheWVyLXBhdGgnKTtcbmNvbnN0IFJFQ09SREVSX0lOU1RBTExFRCA9IFN5bWJvbC5mb3IoJ3BpcGVsaW5lLWJ1aWxkZXIucm91dGUtcmVjb3JkZXInKTtcblxudHlwZSBUYWdnZWQgPSB7IFtHQVRFU10/OiBSb3V0ZUdhdGVbXSB9O1xuXG4vKipcbiAqIEF0dGFjaCBnYXRlIG1ldGFkYXRhIHRvIGEgbWlkZGxld2FyZSBmdW5jdGlvbiAoYXBwZW5kcyB0byBhbnkgZXhpc3RpbmcgdGFncylcbiAqIGFuZCByZXR1cm4gdGhlIHNhbWUgZnVuY3Rpb24uIFVzZSBpdCBmb3IgYSBzZXJ2aWNlLWxvY2FsIGdhdGUgc28gdGhlIHJvdXRlXG4gKiB0YWJsZSBrbm93cyB3aGF0IGl0IGVuZm9yY2VzIOKAlCBlLmcuIGEgaGFuZGxlci1sZXZlbCBgcmVxdWlyZUNvbXBsaWFuY2VXcml0ZWBcbiAqIHRhZ2dlZCBgeyBraW5kOiAncGVybWlzc2lvbicsIG1vZGU6ICdhbnknLCBwZXJtaXNzaW9uczogWydjb21wbGlhbmNlOndyaXRlJ10gfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWdSb3V0ZUdhdGU8VCBleHRlbmRzIG9iamVjdD4oZm46IFQsIC4uLmdhdGVzOiBSb3V0ZUdhdGVbXSk6IFQge1xuICBjb25zdCB0ID0gZm4gYXMgVCAmIFRhZ2dlZDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIEdBVEVTLCB7IHZhbHVlOiBbLi4uKHRbR0FURVNdID8/IFtdKSwgLi4uZ2F0ZXNdLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgcmV0dXJuIGZuO1xufVxuXG4vKiogVGhlIGdhdGUgbWV0YWRhdGEgYXR0YWNoZWQgdG8gYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIChlbXB0eSB3aGVuIHVudGFnZ2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZUdhdGVzKGZuOiB1bmtub3duKTogcmVhZG9ubHkgUm91dGVHYXRlW10ge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gW107XG4gIHJldHVybiAoZm4gYXMgVGFnZ2VkKVtHQVRFU10gPz8gW107XG59XG5cbi8qKlxuICogRGVjbGFyZSB0aGUgYXVkaXQgYWN0aW9uKHMpIGEgcm91dGUgZW1pdHMuIEEgbm8tb3AgbWlkZGxld2FyZSB3aG9zZSBvbmx5IGpvYlxuICogaXMgdG8gcHV0IHRoZSBhY3Rpb24gb24gdGhlIHJvdXRlIHRhYmxlLCBzbyB0aGUgY292ZXJhZ2UgdGVzdCBjYW4gcmVxdWlyZSBhblxuICogYXVkaXQgZGVjbGFyYXRpb24gb24gZXZlcnkgd3JpdGUgcm91dGUuIFBsYWNlIGl0IGluIHRoZSByb3V0ZSdzIGNoYWluOlxuICogYHJvdXRlci5wb3N0KCcvJywgYXVkaXRlZCgncGlwZWxpbmUuY3JlYXRlJyksIGhhbmRsZXIpYC4gVGhlIGhhbmRsZXIgc3RpbGxcbiAqIGVtaXRzIHRoZSBldmVudCBpdHNlbGYuXG4gKi9cbi8qKlxuICogRGVjbGFyZSBhdXRob3JpemF0aW9uIHRoYXQgdGhlIGhhbmRsZXIgcmVzb2x2ZXMgKHNlZSB0aGUgYGR5bmFtaWNBdXRoemAgZ2F0ZSkuXG4gKiBBIG5vLW9wIG1pZGRsZXdhcmUsIGV4YWN0bHkgbGlrZSB7QGxpbmsgYXVkaXRlZH06IGl0IHJlY29yZHMgdGhlIHJ1bGUgb24gdGhlXG4gKiByb3V0ZSB0YWJsZSBzbyB0aGUgY29udHJhY3QgY2FuIHByaW50IGl0LlxuICpcbiAqIGBydWxlYCBpcyByZWFkIGJ5IGEgaHVtYW4sIHNvIGl0IHNob3VsZCBuYW1lIHRoZSByZWFsIHByZWRpY2F0ZSDigJQgZS5nLlxuICogYCdzeXNhZG1pbiwgb3IgYW4gYWRtaW4gb2YgYW4gYW5jZXN0b3Igb3JnIG9mIHRoZSB0YXJnZXQgdXNlcidgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHluYW1pY0F1dGh6KFxuICBydWxlOiBzdHJpbmcsXG4gIG9wdHM6IHsgcmVhY2hhYmxlQnk6IHJlYWRvbmx5IER5bmFtaWNQcmluY2lwYWxbXTsgcGVybWlzc2lvbnM/OiByZWFkb25seSBQZXJtaXNzaW9uW10gfSxcbik6IChyZXE6IHVua25vd24sIHJlczogdW5rbm93biwgbmV4dDogKCkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gIGlmIChvcHRzLnJlYWNoYWJsZUJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZHluYW1pY0F1dGh6KFwiJHtydWxlfVwiKSBtdXN0IG5hbWUgYXQgbGVhc3Qgb25lIHByaW5jaXBhbCBraW5kIGluIHJlYWNoYWJsZUJ5YCk7XG4gIH1cbiAgZm9yIChjb25zdCBwIG9mIG9wdHMucmVhY2hhYmxlQnkpIHtcbiAgICBpZiAoIURZTkFNSUNfUFJJTkNJUEFMUy5pbmNsdWRlcyhwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkeW5hbWljQXV0aHooXCIke3J1bGV9XCIpOiB1bmtub3duIHByaW5jaXBhbCBcIiR7cH1cIiDigJQgb25lIG9mICR7RFlOQU1JQ19QUklOQ0lQQUxTLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWdSb3V0ZUdhdGUoXG4gICAgZnVuY3Rpb24gZHluYW1pY0F1dGh6Um91dGUoX3JlcTogdW5rbm93biwgX3JlczogdW5rbm93biwgbmV4dDogKCkgPT4gdm9pZCkgeyBuZXh0KCk7IH0sXG4gICAgeyBraW5kOiAnZHluYW1pY0F1dGh6JywgcnVsZSwgcmVhY2hhYmxlQnk6IFsuLi5vcHRzLnJlYWNoYWJsZUJ5XSwgLi4uKG9wdHMucGVybWlzc2lvbnMgJiYgeyBwZXJtaXNzaW9uczogWy4uLm9wdHMucGVybWlzc2lvbnNdIH0pIH0sXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdGVkKC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogKHJlcTogdW5rbm93biwgcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgcmV0dXJuIHRhZ1JvdXRlR2F0ZShmdW5jdGlvbiBhdWRpdGVkUm91dGUoX3JlcTogdW5rbm93biwgX3JlczogdW5rbm93biwgbmV4dDogKCkgPT4gdm9pZCkgeyBuZXh0KCk7IH0sIHsga2luZDogJ2F1ZGl0JywgYWN0aW9ucyB9KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNb3VudC1wYXRoIHJlY29yZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBMYXllciB7XG4gIGhhbmRsZTogdW5rbm93bjtcbiAgcm91dGU/OiB7IHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdOyBtZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjsgc3RhY2s6IEFycmF5PHsgbWV0aG9kPzogc3RyaW5nOyBoYW5kbGU6IHVua25vd24gfT4gfTtcbiAgbWF0Y2hlcnM6IEFycmF5PChwYXRoOiBzdHJpbmcpID0+IHVua25vd24+O1xuICAvKiogcm91dGVyQDIncyBcIm1vdW50ZWQgYXQgJy8nIHdpdGggZW5kOmZhbHNlXCIgZmFzdCBwYXRoIOKAlCBtYXRjaGVzIEFOWSBwYXRoLiAqL1xuICBzbGFzaD86IGJvb2xlYW47XG4gIFtMQVlFUl9QQVRIXT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJvdXRlckxpa2UgeyBzdGFjazogTGF5ZXJbXSB9XG5cbmZ1bmN0aW9uIGluc3RhbGxSb3V0ZVJlY29yZGVyKCk6IHZvaWQge1xuICBjb25zdCBwcm90byA9IChleHByZXNzLlJvdXRlciBhcyB1bmtub3duIGFzIHsgcHJvdG90eXBlOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiB9KS5wcm90b3R5cGU7XG4gIGlmIChwcm90b1tSRUNPUkRFUl9JTlNUQUxMRURdKSByZXR1cm47XG4gIGNvbnN0IG9yaWdpbmFsVXNlID0gcHJvdG8udXNlIGFzICh0aGlzOiBSb3V0ZXJMaWtlLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG4gIHByb3RvLnVzZSA9IGZ1bmN0aW9uIHJlY29yZGluZ1VzZSh0aGlzOiBSb3V0ZXJMaWtlLCAuLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgICBjb25zdCBiZWZvcmUgPSB0aGlzLnN0YWNrLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbFVzZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAvLyBTYW1lIHBhdGggZGlzYW1iaWd1YXRpb24gYXMgcm91dGVyQDIncyBgdXNlYDogYSBsZWFkaW5nIG5vbi1mdW5jdGlvblxuICAgIC8vIChwb3NzaWJseSBuZXN0ZWQgaW4gYXJyYXlzKSBpcyB0aGUgcGF0aDsgb3RoZXJ3aXNlIHRoZSBtb3VudCBpcyAnLycuXG4gICAgbGV0IGZpcnN0OiB1bmtub3duID0gYXJnc1swXTtcbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShmaXJzdCkgJiYgZmlyc3QubGVuZ3RoID4gMCkgZmlyc3QgPSBmaXJzdFswXTtcbiAgICBjb25zdCBwYXRoID0gdHlwZW9mIGZpcnN0ID09PSAnZnVuY3Rpb24nID8gJy8nIDogU3RyaW5nKGFyZ3NbMF0pO1xuICAgIGZvciAobGV0IGkgPSBiZWZvcmU7IGkgPCB0aGlzLnN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5zdGFja1tpXSwgTEFZRVJfUEFUSCwgeyB2YWx1ZTogcGF0aCwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBSRUNPUkRFUl9JTlNUQUxMRUQsIHsgdmFsdWU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xufVxuXG5pbnN0YWxsUm91dGVSZWNvcmRlcigpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRhYmxlIGNvbnN0cnVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBSZXNvbHZlZCByZXF1aXJlbWVudHMgZm9yIG9uZSBtZXRob2QgKyBwYXRoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhYmxlRW50cnkge1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICAvKiogQXV0aGVudGljYXRpb24gcnVucyBiZWZvcmUgdGhlIGhhbmRsZXIgKHJlcXVpcmVBdXRoKS4gKi9cbiAgYXV0aDogYm9vbGVhbjtcbiAgLyoqIEVhY2ggcGVybWlzc2lvbiBnYXRlIGluIHRoZSBjaGFpbiAoYWxsIG11c3QgcGFzczsgZWFjaCBpcyBhbnktb2Ygb3IgYWxsLW9mKS4gKi9cbiAgcGVybWlzc2lvbnM6IEFycmF5PHsgbW9kZTogJ2FueScgfCAnYWxsJzsgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXTsgYWxsb3dTZXJ2aWNlOiBib29sZWFuIH0+O1xuICBzeXN0ZW1BZG1pbjogYm9vbGVhbjtcbiAgc2VydmljZVByaW5jaXBhbDogYm9vbGVhbjtcbiAgLyoqIEF1dGhvcml6YXRpb24gdGhlIEhBTkRMRVIgcmVzb2x2ZXMsIGluIHByb3NlIOKAlCBzZWUgdGhlIGBkeW5hbWljQXV0aHpgIGdhdGUuXG4gICAqICBFbXB0eSB3aGVuIHRoZSByb3V0ZSdzIGF1dGhvcml0eSBpcyBmdWxseSBleHByZXNzZWQgYnkgdGhlIGdhdGVzIGFib3ZlLiAqL1xuICBkeW5hbWljQXV0aHo6IHN0cmluZ1tdO1xuICAvKiogVGhlIHByaW5jaXBhbCBraW5kcyB0aG9zZSBkeW5hbWljIHJ1bGVzIGFkbWl0LCBkZWR1cGVkIGFuZCBzb3J0ZWQuIEFic2VudFxuICAgKiAgd2hlbiB0aGUgcm91dGUgZGVjbGFyZXMgbm8gZHluYW1pYyBydWxlLCBzbyB0YWJsZXMgd2l0aG91dCBvbmUgYXJlXG4gICAqICB1bmNoYW5nZWQuIFRoaXMgaXMgdGhlIG1hY2hpbmUtcmVhZGFibGUgaGFsZiBvZiBgZHluYW1pY0F1dGh6YDogaXQgaXMgaG93XG4gICAqICBcIndoaWNoIHJvdXRlcyBjYW4gdGhlIHN1cGVyYWRtaW4gZmxhZyByZWFjaD9cIiBpcyBhbnN3ZXJhYmxlIHdpdGhvdXRcbiAgICogIHJlYWRpbmcgcHJvc2UuICovXG4gIGR5bmFtaWNSZWFjaGFibGVCeT86IER5bmFtaWNQcmluY2lwYWxbXTtcbiAgLyoqIFBlcm1pc3Npb24gaWRzIGEgZHluYW1pYyBydWxlIGNvbnN1bHRzIGluc2lkZSB0aGUgaGFuZGxlciwgZGVkdXBlZCBhbmRcbiAgICogIHNvcnRlZC4gQWJzZW50IHdoZW4gbm9uZSBkb2VzLiBUaGVzZSBhcmUgUkVBTCBlbmZvcmNlbWVudCDigJQgdGhlIGNvdmVyYWdlXG4gICAqICBzY2FuIGNvdW50cyBhIGB1c2VySGFzUGVybWlzc2lvbihyZXEsICd4JylgIGluIGEgY29udHJvbGxlciDigJQgc28gdGhlXG4gICAqICBjb250cmFjdCBzaG91bGQgbm90IHJlYWQgYXMgdGhvdWdoIHRoZSByb3V0ZSBhc2tlZCBmb3Igbm90aGluZy4gKi9cbiAgZHluYW1pY1Blcm1pc3Npb25zPzogUGVybWlzc2lvbltdO1xuICAvKipcbiAgICogVGhlIHNlcnZpY2VzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIHJvdXRlIHdoZW4gaXQgaXMgSU5URVJOQUwgKGByZXF1aXJlSW50ZXJuYWxTZXJ2aWNlYCkuXG4gICAqIEFuIGVtcHR5IGFycmF5IG1lYW5zIHRoZSByb3V0ZSBpcyBub3QgaW50ZXJuYWwg4oCUIGEgdXNlciB0b2tlbiBtYXkgcmVhY2ggaXQsXG4gICAqIHN1YmplY3QgdG8gdGhlIG90aGVyIGdhdGVzLiBTb3J0ZWQsIHNvIHRoZSBnZW5lcmF0ZWQgdGFibGUgaXMgc3RhYmxlLlxuICAgKi9cbiAgaW50ZXJuYWxDYWxsZXJzOiBzdHJpbmdbXTtcbiAgc3RlcFVwOiBib29sZWFuO1xuICAvKiogV2hlbiB0aGUgc3RlcC11cCBnYXRlIG5hbWVzIHRoZSBmYWN0b3JzIHRoYXQgbWF5IGVhcm4gaXQgKGBbJ3dlYmF1dGhuJyxcbiAgICogICd0b3RwJ11gIG9uIHRoZSBtb3N0IGRhbmdlcm91cyByb3V0ZXMpLCB0aGUgYWxsb3dlZCBtZXRob2RzLiBFbXB0eSBtZWFuc1xuICAgKiAgYW55IGZhY3RvciBzYXRpc2ZpZXMgaXQuIFNvcnRlZCwgc28gdGhlIGdlbmVyYXRlZCB0YWJsZSBpcyBzdGFibGUuICovXG4gIHN0ZXBVcE1ldGhvZHM6IHN0cmluZ1tdO1xuICAvKiogSGlnaGVzdCBgbWluQXNzdXJhbmNlYCBhbnkgZ2F0ZSBpbiB0aGUgY2hhaW4gZGVtYW5kczsgMCB3aGVuIG5vbmUgZG9lcy4gKi9cbiAgbWluQXNzdXJhbmNlOiAwIHwgMSB8IDI7XG4gIC8qKiBUaWdodGVzdCBgbWF4QWdlYCAoc2Vjb25kcykgYW55IGFzc3VyYW5jZSBnYXRlIGluIHRoZSBjaGFpbiBkZW1hbmRzLiAqL1xuICBtYXhBZ2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbmFtZWQgY2FydmUtb3V0cyB0aGUgY2hhaW4ncyBhc3N1cmFuY2UgZ2F0ZXMgYWxsb3cgKHNvcnRlZCkuIEFic2VudCB3aGVuXG4gICAqIHRoZXJlIGFyZSBub25lLCBzbyBhIHRhYmxlIG9mIHJvdXRlcyB3aXRob3V0IG9uZSBpcyB1bmNoYW5nZWQuIEEgcmV2aWV3ZXJcbiAgICogcmVhZGluZyBgbWluQXNzdXJhbmNlOiAyYCBuZXh0IHRvIGBhc3N1cmFuY2VFeGVtcHQ6IFtcImJvb3RzdHJhcC1zZXR1cFwiXWBcbiAgICoga25vd3MgdGhlIGxldmVsIGlzIHJlcXVpcmVkIG9mIGV2ZXJ5b25lIEVYQ0VQVCB0aGF0IG5hbWVkIGNhc2UuXG4gICAqL1xuICBhc3N1cmFuY2VFeGVtcHQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgcm91dGUgcmVxdWlyZXMgYW4gTUZBLWdyYWRlIHNlc3Npb24gV0hFTiB0aGUgb3JnJ3NcbiAgICogYGFkbWluQWN0aW9uc1JlcXVpcmVNZmFgIHBvbGljeSBpcyBvbiAoYHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZWApLCB3aXRoXG4gICAqIHdoYXQgYSBtYWNoaW5lIGNyZWRlbnRpYWwgbWVldHMgdGhlcmUuIEFic2VudCAobm90IGBmYWxzZWApIG90aGVyd2lzZSwgc29cbiAgICogdGhlIHRhYmxlIG9mIGEgc2VydmljZSB0aGF0IHVzZXMgbm8gc3VjaCBnYXRlIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIG9yZ0FkbWluQXNzdXJhbmNlPzogeyBtYWNoaW5lczogT3JnQWRtaW5Bc3N1cmFuY2VNYWNoaW5lcyB9O1xuICAvKipcbiAgICogUHJlc2VudCAoYWx3YXlzIGB0cnVlYCkgd2hlbiB0aGUgY2hhaW4gcnVucyBgcmVxdWlyZVN5c3RlbU9yZ2A6IG9ubHkgYVxuICAgKiBjYWxsZXIgd2hvc2UgYWN0aXZlIG9yZyBpcyB0aGUgc3lzdGVtIG9yZyBnZXRzIHRocm91Z2guIEFic2VudCBvdGhlcndpc2UsXG4gICAqIHNvIHRoZSB0YWJsZSBvZiBhIHNlcnZpY2Ugd2l0aCBubyBlY29zeXN0ZW0tZ292ZXJuYW5jZSByb3V0ZSBpcyB1bmNoYW5nZWQuXG4gICAqL1xuICBzeXN0ZW1Pcmc/OiB0cnVlO1xuICBmZWF0dXJlczogc3RyaW5nW107XG4gIHNjb3Blczogc3RyaW5nW107XG4gIGF1ZGl0OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBxdW90YSBtaWRkbGV3YXJlIGluIHRoZSBjaGFpbjogdGhlIHR5cGVzIG1ldGVyZWQgKG9uY2UgcGVyIDJ4eCkgYW5kXG4gICAqIGNoZWNrZWQgKDQyOSB3aGVuIHNwZW50KS4gYG1ldGVyZWRgIGlzIE5PVCBkZWR1cGVkIOKAlCBhIHR5cGUgbGlzdGVkIHR3aWNlIGlzXG4gICAqIG1ldGVyZWQgdHdpY2UsIHdoaWNoIHRoZSBjb3ZlcmFnZSBjaGVjayBmbGFncy4gYGV4ZW1wdGAgbWFya3MgYSByb3V0ZSBvbiB0aGVcbiAgICogZmxlZXQtd2lkZSBgUVVPVEFfRVhFTVBUX1JPVVRFU2AgbGlzdCwgd2hlcmUgdGhlIGBhcGlDYWxsc2AgbWV0ZXIgYW5kIGNoZWNrXG4gICAqIGFyZSBuby1vcHMgYXQgcnVudGltZSAoc28gYGFwaUNhbGxzYCBpcyBsZWZ0IG91dCBvZiBib3RoIGxpc3RzKS4gQWJzZW50IHdoZW5cbiAgICogdGhlIGNoYWluIGhhcyBubyBxdW90YSBtaWRkbGV3YXJlIGFuZCB0aGUgcm91dGUgaXMgbm90IGV4ZW1wdC5cbiAgICovXG4gIHF1b3RhPzogeyBtZXRlcmVkOiBzdHJpbmdbXTsgY2hlY2tlZDogc3RyaW5nW107IGV4ZW1wdD86IHRydWUgfTtcbn1cblxuaW50ZXJmYWNlIENhbmRpZGF0ZSB7IGxheWVyOiBMYXllcjsgcHJlZml4OiBzdHJpbmcgfVxuXG5mdW5jdGlvbiBqb2luUGF0aChwcmVmaXg6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkID0gYCR7cHJlZml4LnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3BhdGgucmVwbGFjZSgvXlxcLysvLCAnJyl9YDtcbiAgcmV0dXJuIGpvaW5lZC5sZW5ndGggPiAxID8gam9pbmVkLnJlcGxhY2UoL1xcLyskLywgJycpIDogJy8nO1xufVxuXG5mdW5jdGlvbiBpc1JvdXRlcihoYW5kbGU6IHVua25vd24pOiBoYW5kbGUgaXMgUm91dGVyTGlrZSB7XG4gIHJldHVybiB0eXBlb2YgaGFuZGxlID09PSAnZnVuY3Rpb24nICYmIEFycmF5LmlzQXJyYXkoKGhhbmRsZSBhcyBQYXJ0aWFsPFJvdXRlckxpa2U+KS5zdGFjayk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIG1pZGRsZXdhcmUgbGF5ZXIgKG1vdW50ZWQgdW5kZXIgYHByZWZpeGApIHJ1bnMgZm9yIGBmdWxsUGF0aGAuXG4gKiBNaXJyb3JzIGBMYXllci5wcm90b3R5cGUubWF0Y2hgLCBpbmNsdWRpbmcgaXRzIGZhc3QgcGF0aDogYSBsYXllciBhZGRlZCB3aXRoXG4gKiBubyBwYXRoIChgcm91dGVyLnVzZShnYXRlKWApIG1hdGNoZXMgRVZFUlkgcGF0aCB1bmRlciBpdHMgcm91dGVyIOKAlCB3aGljaCBpc1xuICogZXhhY3RseSBob3cgdGhlIHNoYXJlZCBgcmVxdWlyZVBlcm1pc3Npb25gIGdhdGVzIGJldHdlZW4gdHdvIGByb3V0ZXIudXNlKC4uLilgXG4gKiBtb3VudHMgcmVhY2ggdGhlIHJvdXRlcnMgcmVnaXN0ZXJlZCBhZnRlciB0aGVtLlxuICovXG5mdW5jdGlvbiBhcHBsaWVzKGM6IENhbmRpZGF0ZSwgZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBiYXNlID0gYy5wcmVmaXggPT09ICcvJyA/ICcnIDogYy5wcmVmaXg7XG4gIGlmIChiYXNlICYmIGZ1bGxQYXRoICE9PSBiYXNlICYmICFmdWxsUGF0aC5zdGFydHNXaXRoKGAke2Jhc2V9L2ApKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjLmxheWVyLnNsYXNoKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcmVsID0gZnVsbFBhdGguc2xpY2UoYmFzZS5sZW5ndGgpIHx8ICcvJztcbiAgcmV0dXJuIGMubGF5ZXIubWF0Y2hlcnMuc29tZSgobSkgPT4gbShyZWwpICE9PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RHYXRlcyhmbnM6IHVua25vd25bXSk6IFJvdXRlR2F0ZVtdIHtcbiAgcmV0dXJuIGZucy5mbGF0TWFwKChmbikgPT4gZ2V0Um91dGVHYXRlcyhmbikpO1xufVxuXG5mdW5jdGlvbiB0b0VudHJ5KG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGdhdGVzOiBSb3V0ZUdhdGVbXSk6IFJvdXRlVGFibGVFbnRyeSB7XG4gIGNvbnN0IGVudHJ5OiBSb3V0ZVRhYmxlRW50cnkgPSB7XG4gICAgbWV0aG9kLFxuICAgIHBhdGgsXG4gICAgYXV0aDogZmFsc2UsXG4gICAgcGVybWlzc2lvbnM6IFtdLFxuICAgIHN5c3RlbUFkbWluOiBmYWxzZSxcbiAgICBzZXJ2aWNlUHJpbmNpcGFsOiBmYWxzZSxcbiAgICBkeW5hbWljQXV0aHo6IFtdLFxuICAgIGludGVybmFsQ2FsbGVyczogW10sXG4gICAgc3RlcFVwOiBmYWxzZSxcbiAgICBzdGVwVXBNZXRob2RzOiBbXSxcbiAgICBtaW5Bc3N1cmFuY2U6IDAsXG4gICAgZmVhdHVyZXM6IFtdLFxuICAgIHNjb3BlczogW10sXG4gICAgYXVkaXQ6IFtdLFxuICB9O1xuICBmb3IgKGNvbnN0IGcgb2YgZ2F0ZXMpIHtcbiAgICBzd2l0Y2ggKGcua2luZCkge1xuICAgICAgY2FzZSAnYXV0aCc6IGVudHJ5LmF1dGggPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ3Blcm1pc3Npb24nOiBlbnRyeS5wZXJtaXNzaW9ucy5wdXNoKHsgbW9kZTogZy5tb2RlLCBwZXJtaXNzaW9uczogWy4uLmcucGVybWlzc2lvbnNdLCBhbGxvd1NlcnZpY2U6IGcuYWxsb3dTZXJ2aWNlID09PSB0cnVlIH0pOyBicmVhaztcbiAgICAgIGNhc2UgJ3N5c3RlbUFkbWluJzogZW50cnkuc3lzdGVtQWRtaW4gPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ3NlcnZpY2VQcmluY2lwYWwnOiBlbnRyeS5zZXJ2aWNlUHJpbmNpcGFsID0gdHJ1ZTsgYnJlYWs7XG4gICAgICBjYXNlICdkeW5hbWljQXV0aHonOlxuICAgICAgICBpZiAoIWVudHJ5LmR5bmFtaWNBdXRoei5pbmNsdWRlcyhnLnJ1bGUpKSBlbnRyeS5keW5hbWljQXV0aHoucHVzaChnLnJ1bGUpO1xuICAgICAgICBlbnRyeS5keW5hbWljUmVhY2hhYmxlQnkgPSBbLi4ubmV3IFNldChbLi4uKGVudHJ5LmR5bmFtaWNSZWFjaGFibGVCeSA/PyBbXSksIC4uLmcucmVhY2hhYmxlQnldKV0uc29ydCgpO1xuICAgICAgICBpZiAoZy5wZXJtaXNzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZW50cnkuZHluYW1pY1Blcm1pc3Npb25zID0gWy4uLm5ldyBTZXQoWy4uLihlbnRyeS5keW5hbWljUGVybWlzc2lvbnMgPz8gW10pLCAuLi5nLnBlcm1pc3Npb25zXSldLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ludGVybmFsU2VydmljZSc6IGZvciAoY29uc3QgYyBvZiBnLmNhbGxlcnMpIGlmICghZW50cnkuaW50ZXJuYWxDYWxsZXJzLmluY2x1ZGVzKGMpKSBlbnRyeS5pbnRlcm5hbENhbGxlcnMucHVzaChjKTsgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwVXAnOlxuICAgICAgICBlbnRyeS5zdGVwVXAgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgZy5tZXRob2RzID8/IFtdKSBpZiAoIWVudHJ5LnN0ZXBVcE1ldGhvZHMuaW5jbHVkZXMobSkpIGVudHJ5LnN0ZXBVcE1ldGhvZHMucHVzaChtKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxuICAgICAgICAvLyBTZXZlcmFsIGdhdGVzIG1heSBhcHBseTsgdGhlIFNUUklDVEVTVCB3aW5zLCBzaW5jZSBldmVyeSBvbmUgb2YgdGhlbSBydW5zLlxuICAgICAgICBpZiAoZy5taW5Bc3N1cmFuY2UgPiBlbnRyeS5taW5Bc3N1cmFuY2UpIGVudHJ5Lm1pbkFzc3VyYW5jZSA9IGcubWluQXNzdXJhbmNlO1xuICAgICAgICBpZiAoZy5tYXhBZ2UgIT09IHVuZGVmaW5lZCkgZW50cnkubWF4QWdlID0gZW50cnkubWF4QWdlID09PSB1bmRlZmluZWQgPyBnLm1heEFnZSA6IE1hdGgubWluKGVudHJ5Lm1heEFnZSwgZy5tYXhBZ2UpO1xuICAgICAgICBpZiAoZy5leGVtcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVudHJ5LmFzc3VyYW5jZUV4ZW1wdCA9IFsuLi5uZXcgU2V0KFsuLi4oZW50cnkuYXNzdXJhbmNlRXhlbXB0ID8/IFtdKSwgZy5leGVtcHRdKV0uc29ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3JnQWRtaW5Bc3N1cmFuY2UnOlxuICAgICAgICAvLyBTdHJpY3Rlc3Qgd2luczogb25lIGByZWZ1c2VgIGluIHRoZSBjaGFpbiByZWZ1c2VzIG1hY2hpbmVzLlxuICAgICAgICBlbnRyeS5vcmdBZG1pbkFzc3VyYW5jZSA9IHtcbiAgICAgICAgICBtYWNoaW5lczogZW50cnkub3JnQWRtaW5Bc3N1cmFuY2U/Lm1hY2hpbmVzID09PSAncmVmdXNlJyB8fCBnLm1hY2hpbmVzID09PSAncmVmdXNlJyA/ICdyZWZ1c2UnIDogJ2FsbG93JyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzeXN0ZW1PcmcnOiBlbnRyeS5zeXN0ZW1PcmcgPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ2ZlYXR1cmUnOiBpZiAoIWVudHJ5LmZlYXR1cmVzLmluY2x1ZGVzKGcuZmVhdHVyZSkpIGVudHJ5LmZlYXR1cmVzLnB1c2goZy5mZWF0dXJlKTsgYnJlYWs7XG4gICAgICBjYXNlICdzY29wZSc6IGlmICghZW50cnkuc2NvcGVzLmluY2x1ZGVzKGcuc2NvcGUpKSBlbnRyeS5zY29wZXMucHVzaChnLnNjb3BlKTsgYnJlYWs7XG4gICAgICBjYXNlICdhdWRpdCc6IGZvciAoY29uc3QgYSBvZiBnLmFjdGlvbnMpIGlmICghZW50cnkuYXVkaXQuaW5jbHVkZXMoYSkpIGVudHJ5LmF1ZGl0LnB1c2goYSk7IGJyZWFrO1xuICAgICAgY2FzZSAncXVvdGEnOiB7XG4gICAgICAgIGNvbnN0IHF1b3RhID0gZW50cnkucXVvdGEgPz8gKGVudHJ5LnF1b3RhID0geyBtZXRlcmVkOiBbXSwgY2hlY2tlZDogW10gfSk7XG4gICAgICAgIGlmIChnLm1vZGUgPT09ICdtZXRlcicpIHF1b3RhLm1ldGVyZWQucHVzaChnLnF1b3RhVHlwZSk7XG4gICAgICAgIGVsc2UgaWYgKCFxdW90YS5jaGVja2VkLmluY2x1ZGVzKGcucXVvdGFUeXBlKSkgcXVvdGEuY2hlY2tlZC5wdXNoKGcucXVvdGFUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFuIGV4ZW1wdCByb3V0ZSdzIGFwaUNhbGxzIG1ldGVyICsgY2hlY2sgc2tpcCBpdCBhdCBydW50aW1lLCBzbyB0aGUgdGFibGVcbiAgLy8gc2F5cyB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgcmF0aGVyIHRoYW4gd2hhdCBpcyBtb3VudGVkLlxuICBpZiAoaXNRdW90YUV4ZW1wdFJvdXRlKG1ldGhvZCwgcGF0aCkpIHtcbiAgICBjb25zdCBxdW90YSA9IGVudHJ5LnF1b3RhID8/IHsgbWV0ZXJlZDogW10sIGNoZWNrZWQ6IFtdIH07XG4gICAgZW50cnkucXVvdGEgPSB7XG4gICAgICBtZXRlcmVkOiBxdW90YS5tZXRlcmVkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBjaGVja2VkOiBxdW90YS5jaGVja2VkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBleGVtcHQ6IHRydWUsXG4gICAgfTtcbiAgfVxuICBlbnRyeS5pbnRlcm5hbENhbGxlcnMuc29ydCgpO1xuICBlbnRyeS5zdGVwVXBNZXRob2RzLnNvcnQoKTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5mdW5jdGlvbiB3YWxrKHN0YWNrOiBMYXllcltdLCBwcmVmaXg6IHN0cmluZywgaW5oZXJpdGVkOiBDYW5kaWRhdGVbXSwgb3V0OiBSb3V0ZVRhYmxlRW50cnlbXSwgc2VlbjogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgbG9jYWw6IENhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbGF5ZXIgb2Ygc3RhY2spIHtcbiAgICBpZiAobGF5ZXIucm91dGUpIHtcbiAgICAgIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShsYXllci5yb3V0ZS5wYXRoKSA/IGxheWVyLnJvdXRlLnBhdGggOiBbbGF5ZXIucm91dGUucGF0aF07XG4gICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMobGF5ZXIucm91dGUubWV0aG9kcykubWFwKChtKSA9PiAobSA9PT0gJ19hbGwnID8gJyonIDogbS50b1VwcGVyQ2FzZSgpKSk7XG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiBwYXRocykge1xuICAgICAgICBjb25zdCBmdWxsID0gam9pblBhdGgocHJlZml4LCBTdHJpbmcocm91dGVQYXRoKSk7XG4gICAgICAgIGNvbnN0IGNoYWluID0gWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLmZpbHRlcigoYykgPT4gYXBwbGllcyhjLCBmdWxsKSkubWFwKChjKSA9PiBjLmxheWVyLmhhbmRsZSk7XG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHttZXRob2R9ICR7ZnVsbH1gO1xuICAgICAgICAgIC8vIEZpcnN0IHJlZ2lzdHJhdGlvbiB3aW5zLCBhcyBpbiBFeHByZXNzOiBhIGxhdGVyIGR1cGxpY2F0ZSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgICBjb25zdCByb3V0ZUZucyA9IGxheWVyLnJvdXRlLnN0YWNrXG4gICAgICAgICAgICAuZmlsdGVyKChsKSA9PiBsLm1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8IGwubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IG1ldGhvZCB8fCBtZXRob2QgPT09ICcqJylcbiAgICAgICAgICAgIC5tYXAoKGwpID0+IGwuaGFuZGxlKTtcbiAgICAgICAgICBvdXQucHVzaCh0b0VudHJ5KG1ldGhvZCwgZnVsbCwgY29sbGVjdEdhdGVzKFsuLi5jaGFpbiwgLi4ucm91dGVGbnNdKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1JvdXRlcihsYXllci5oYW5kbGUpKSB7XG4gICAgICBjb25zdCBtb3VudFBhdGggPSBqb2luUGF0aChwcmVmaXgsIGxheWVyW0xBWUVSX1BBVEhdID8/ICcvJyk7XG4gICAgICAvLyBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgdGhpcyByb3V0ZXIgKGFuY2VzdG9ycyArIGVhcmxpZXIgc2libGluZ3MpXG4gICAgICAvLyBpcyBpbmhlcml0ZWQ7IGFwcGxpY2FiaWxpdHkgaXMgcmUtY2hlY2tlZCBhZ2FpbnN0IGVhY2ggZnVsbCByb3V0ZSBwYXRoLlxuICAgICAgd2FsayhsYXllci5oYW5kbGUuc3RhY2ssIG1vdW50UGF0aCwgWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLCBvdXQsIHNlZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbC5wdXNoKHsgbGF5ZXIsIHByZWZpeCB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcm91dGUgdGFibGUgb2YgYW4gYXNzZW1ibGVkIEV4cHJlc3MgYXBwIChvciByb3V0ZXIpOiBvbmUgZW50cnkgcGVyXG4gKiByZWFjaGFibGUgbWV0aG9kICsgcGF0aCB3aXRoIGV2ZXJ5IGdhdGUgdGhhdCBydW5zIGJlZm9yZSBpdHMgaGFuZGxlci5cbiAqIEhFQUQgaXMgZm9sZGVkIGludG8gR0VULCBhcyBFeHByZXNzIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJvdXRlVGFibGUoYXBwOiB1bmtub3duKTogUm91dGVUYWJsZUVudHJ5W10ge1xuICBjb25zdCByb290ID0gKGFwcCBhcyB7IHJvdXRlcj86IFJvdXRlckxpa2UgfSkucm91dGVyID8/IChhcHAgYXMgUm91dGVyTGlrZSk7XG4gIGNvbnN0IG91dDogUm91dGVUYWJsZUVudHJ5W10gPSBbXTtcbiAgaWYgKCFyb290IHx8ICFBcnJheS5pc0FycmF5KHJvb3Quc3RhY2spKSByZXR1cm4gb3V0O1xuICB3YWxrKHJvb3Quc3RhY2ssICcvJywgW10sIG91dCwgbmV3IFNldCgpKTtcbiAgcmV0dXJuIG91dC5zb3J0KChhLCBiKSA9PiAoYS5wYXRoID09PSBiLnBhdGggPyBhLm1ldGhvZC5sb2NhbGVDb21wYXJlKGIubWV0aG9kKSA6IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtZXRob2QgbXV0YXRlcyBzdGF0ZSAoZXZlcnl0aGluZyBleGNlcHQgR0VUL0hFQUQvT1BUSU9OUykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXcml0ZU1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIVsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLmluY2x1ZGVzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqIFN1bW1hcnkgY291bnRzIGZvciBhIHN0YXJ0dXAgbG9nIGxpbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUm91dGVUYWJsZSh0YWJsZTogcmVhZG9ubHkgUm91dGVUYWJsZUVudHJ5W10pOiB7IHJvdXRlczogbnVtYmVyOyB3cml0ZXM6IG51bWJlcjsgdW5nYXRlZDogbnVtYmVyOyB1bmF1ZGl0ZWQ6IG51bWJlcjsgaW50ZXJuYWw6IG51bWJlciB9IHtcbiAgY29uc3QgZ2F0ZWQgPSAoZTogUm91dGVUYWJsZUVudHJ5KTogYm9vbGVhbiA9PiBlLnBlcm1pc3Npb25zLmxlbmd0aCA+IDAgfHwgZS5zeXN0ZW1BZG1pbiB8fCBlLnNlcnZpY2VQcmluY2lwYWwgfHwgZS5keW5hbWljQXV0aHoubGVuZ3RoID4gMDtcbiAgY29uc3Qgd3JpdGVzID0gdGFibGUuZmlsdGVyKChlKSA9PiBpc1dyaXRlTWV0aG9kKGUubWV0aG9kKSk7XG4gIHJldHVybiB7XG4gICAgcm91dGVzOiB0YWJsZS5sZW5ndGgsXG4gICAgd3JpdGVzOiB3cml0ZXMubGVuZ3RoLFxuICAgIHVuZ2F0ZWQ6IHRhYmxlLmZpbHRlcigoZSkgPT4gIWdhdGVkKGUpKS5sZW5ndGgsXG4gICAgdW5hdWRpdGVkOiB3cml0ZXMuZmlsdGVyKChlKSA9PiBlLmF1ZGl0Lmxlbmd0aCA9PT0gMCkubGVuZ3RoLFxuICAgIGludGVybmFsOiB0YWJsZS5maWx0ZXIoKGUpID0+IGUuaW50ZXJuYWxDYWxsZXJzLmxlbmd0aCA+IDApLmxlbmd0aCxcbiAgfTtcbn1cbiJdfQ==
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdGFibGUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3JvdXRlLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFjOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQ3BGLENBQUM7QUE4RFgsc0VBQXNFO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDekQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzdELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBSXpFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBbUIsRUFBSyxFQUFFLEdBQUcsS0FBa0I7SUFDekUsTUFBTSxDQUFDLEdBQUcsRUFBZ0IsQ0FBQztJQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25JLE9BQU8sRUFBRSxD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cnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogSW50cm9zcGVjdGFibGUgcm91dGUgdGFibGUuXG4gKlxuICogQXV0aG9yaXphdGlvbiBpcyBzcGxpdCBiZXR3ZWVuIHJvdXRlciBtb3VudHMgKGBhcHAudXNlKCcveCcsIGdhdGUsIHJvdXRlcilgKVxuICogYW5kIGluZGl2aWR1YWwgcm91dGVzLCBzbyBncmVwcGluZyBzb3VyY2UgY2FuJ3QgcHJvdmUgdGhhdCBldmVyeSByb3V0ZSBpc1xuICogZ2F0ZWQuIEluc3RlYWQsIGV2ZXJ5IGdhdGUgbWlkZGxld2FyZSBpbiB0aGlzIHBhY2thZ2UgY2FycmllcyBNRVRBREFUQSAod2hhdCBpdFxuICogcmVxdWlyZXMpLCBhbmQge0BsaW5rIGJ1aWxkUm91dGVUYWJsZX0gd2Fsa3MgYW4gYXNzZW1ibGVkIEV4cHJlc3MgYXBwIGFuZFxuICogcmVzb2x2ZXMsIHBlciBtZXRob2QgKyBwYXRoLCB0aGUgZnVsbCBjaGFpbiBvZiBnYXRlcyBFeHByZXNzIHdvdWxkIHJ1biBiZWZvcmVcbiAqIHRoZSBoYW5kbGVyOiBwZXJtaXNzaW9ucywgc3lzdGVtLWFkbWluLCBzZXJ2aWNlIHByaW5jaXBhbCwgc3RlcC11cCwgZmVhdHVyZSxcbiAqIHRva2VuIHNjb3BlLCBhbmQgdGhlIGF1ZGl0IGFjdGlvbnMgdGhlIHJvdXRlIGRlY2xhcmVzIHZpYSB7QGxpbmsgYXVkaXRlZH0uXG4gKlxuICogRXhwcmVzcyA1IChyb3V0ZXJAMikgZG9lcyBub3Qga2VlcCBhIG1vdW50J3MgcGF0aCBzdHJpbmcgb24gaXRzIGxheWVyLCBzbyB0aGlzXG4gKiBtb2R1bGUgcmVjb3JkcyBpdDogb24gaW1wb3J0IGl0IHdyYXBzIGBSb3V0ZXIucHJvdG90eXBlLnVzZWAgdG8gc3RhbXAgZWFjaCBuZXdcbiAqIGxheWVyIHdpdGggdGhlIHBhdGggaXQgd2FzIG1vdW50ZWQgYXQuIGFwaS1jb3JlIGlzIGltcG9ydGVkIGJlZm9yZSBhbnkgcm91dGVcbiAqIG1vZHVsZSByZWdpc3RlcnMgYSByb3V0ZSwgc28gZXZlcnkgbGF5ZXIgYW4gYXBwIGJ1aWxkcyBpcyBzdGFtcGVkLiBUaGUgd3JhcFxuICogb25seSBhZGRzIGEgc3ltYm9sIHByb3BlcnR5OyByb3V0aW5nIGJlaGF2aW91ciBpcyB1bmNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBpc1F1b3RhRXhlbXB0Um91dGUgfSBmcm9tICcuL3F1b3RhLWV4ZW1wdC1yb3V0ZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvcGVybWlzc2lvbnMuanMnO1xuXG4vKipcbiAqIFdoYXQgYSBNQUNISU5FIGNyZWRlbnRpYWwgKFBBVCwgc2VydmljZSBhY2NvdW50KSBtZWV0cyBvbiBhIHJvdXRlIGdhdGVkIGJ5XG4gKiBgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCB3aGlsZSB0aGUgb3JnJ3MgYWRtaW4tTUZBIHBvbGljeSBpcyBvbjpcbiAqICAgLSBgYWxsb3dgICDigJQgdGhlIHJvdXRlIGlzIGxlZ2l0aW1hdGVseSBtYWNoaW5lLWNhbGxhYmxlIChhdXRvbWF0aW9uIHRoYXRcbiAqICAgICAgICAgICAgICAgIG1hbmFnZXMgbWVtYmVycywgcm9sZXMsIGJpbGxpbmfigKYpOyB0aGUgcG9saWN5IGlzIGFib3V0IGhvd1xuICogICAgICAgICAgICAgICAgc3Ryb25nbHkgYSBQRVJTT04ncyBzZXNzaW9uIHdhcyBvcGVuZWQsIHNvIGl0IGRvZXMgbm90IGFwcGx5O1xuICogICAtIGByZWZ1c2VgIOKAlCBvbmx5IGEgcGVyc29uIG1heSBkbyB0aGlzIHdoaWxlIHRoZSBwb2xpY3kgaXMgb24gKDQwM1xuICogICAgICAgICAgICAgICAgYEhVTUFOX1NFU1NJT05fUkVRVUlSRURgKSwgZS5nLiBtaW50aW5nIGFub3RoZXIgY3JlZGVudGlhbC5cbiAqL1xuZXhwb3J0IHR5cGUgT3JnQWRtaW5Bc3N1cmFuY2VNYWNoaW5lcyA9ICdhbGxvdycgfCAncmVmdXNlJztcblxuLyoqXG4gKiBUaGUgQ0xPU0VEIHNldCBvZiBwcmluY2lwYWwga2luZHMgYSBgZHluYW1pY0F1dGh6YCBydWxlIG1heSBhZG1pdC5cbiAqXG4gKiBBIHJvdXRlIHdob3NlIGF1dGhvcml0eSBpcyByZXNvbHZlZCBpbiB0aGUgaGFuZGxlciBzdGlsbCBoYXMgdG8gc2F5IFdITyBjYW5cbiAqIGdldCB0aHJvdWdoIGl0LiBUaGVzZSBhcmUgdGhlIGtpbmRzLCBkZWxpYmVyYXRlbHkgY29hcnNlIOKAlCB0aGUgcHJlY2lzZVxuICogcHJlZGljYXRlIGxpdmVzIGluIHRoZSBwcm9zZSBydWxlIGFuZCBpbiB0aGUgY29kZTpcbiAqXG4gKiAgLSBgc3VwZXJhZG1pbmAgICAg4oCUIHRoZSBgVXNlci5pc1N1cGVyQWRtaW5gIGZsYWcgKGBpc1N5c3RlbUFkbWluKHJlcSlgKS5cbiAqICAtIGBzeXN0ZW0tb3JnYCAgICDigJQgYSBtZW1iZXIgb2YgdGhlIHN5c3RlbSBvcmcgaG9sZGluZyBhIG5hbWVkIHBlcm1pc3Npb247XG4gKiAgICAgICAgICAgICAgICAgICAgICBsaXN0IHRoZSBpZHMgaW4gYHBlcm1pc3Npb25zYCBzbyB0aGUgY292ZXJhZ2Ugc2NhbiBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250cmFjdCBjYW4gc2VlIHRoZW0uXG4gKiAgLSBgdGVuYW50LWFkbWluYCAg4oCUIGFuIGFkbWluIG9yIG93bmVyIG9mIHRoZSB0YXJnZXQncyBvd24gb3JnLCBvciBvZiBhblxuICogICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3Igb2YgaXQuIE5PVCBhIHN1cGVyYWRtaW4gYnkgdmlydHVlIG9mIHRoZSBmbGFnOlxuICogICAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCBvZiB0aGVzZSBydWxlcyByZWZ1c2UgdGhlIGZsYWcgb24gcHVycG9zZS5cbiAqICAtIGB0ZW5hbnQtbWVtYmVyYCDigJQgYW55IG1lbWJlciBvZiB0aGUgdGFyZ2V0J3Mgb3JnLCBhZG1pbiBvciBub3QuXG4gKiAgLSBgc3ViamVjdGAgICAgICAg4oCUIHRoZSB2ZXJ5IHVzZXIgdGhlIHJlcXVlc3QgaXMgYWJvdXQgKHNlbGYtc2VydmljZSkuXG4gKiAgLSBgc2VydmljZWAgICAgICAg4oCUIGEgc2VydmljZSBwcmluY2lwYWwgLyBpbnRlcm5hbCBjYWxsZXIuXG4gKiAgLSBgZ2F0ZXdheWAgICAgICAg4oCUIHRoZSBpbmdyZXNzIGl0c2VsZiBzdXBwbGllcyB0aGUgZmFjdCAodGhlIGNvbnNvbGVcbiAqICAgICAgICAgICAgICAgICAgICAgIGBhdXRoX3JlcXVlc3RgIHBhc3NlcyB0aGUgY29uc29sZSBjbGFzcyBpbiBhIGhlYWRlcikuXG4gKi9cbmV4cG9ydCBjb25zdCBEWU5BTUlDX1BSSU5DSVBBTFMgPSBbXG4gICdzdXBlcmFkbWluJywgJ3N5c3RlbS1vcmcnLCAndGVuYW50LWFkbWluJywgJ3RlbmFudC1tZW1iZXInLCAnc3ViamVjdCcsICdzZXJ2aWNlJywgJ2dhdGV3YXknLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIER5bmFtaWNQcmluY2lwYWwgPSB0eXBlb2YgRFlOQU1JQ19QUklOQ0lQQUxTW251bWJlcl07XG5cbi8qKiBPbmUgcmVxdWlyZW1lbnQgYSBnYXRlIG1pZGRsZXdhcmUgZW5mb3JjZXMuICovXG5leHBvcnQgdHlwZSBSb3V0ZUdhdGUgPVxuICB8IHsga2luZDogJ2F1dGgnIH1cbiAgfCB7IGtpbmQ6ICdwZXJtaXNzaW9uJzsgbW9kZTogJ2FueScgfCAnYWxsJzsgcGVybWlzc2lvbnM6IHJlYWRvbmx5IFBlcm1pc3Npb25bXTsgYWxsb3dTZXJ2aWNlPzogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiAnc3lzdGVtQWRtaW4nIH1cbiAgLyoqXG4gICAqIEF1dGhvcml6YXRpb24gdGhlIHJvdXRlIENBTk5PVCBleHByZXNzIHN0YXRpY2FsbHksIHJlc29sdmVkIGluIHRoZSBoYW5kbGVyLlxuICAgKlxuICAgKiBTb21lIGF1dGhvcml0eSBkZXBlbmRzIG9uIHRoZSByZXF1ZXN0OiBpbXBlcnNvbmF0aW9uIGFza3Mgd2hldGhlciB0aGUgY2FsbGVyXG4gICAqIGlzIGEgc3lzYWRtaW4gT1IgYW4gYWRtaW4gb2YgYW4gYW5jZXN0b3Igb2YgdGhlIFRBUkdFVCB1c2VyJ3Mgb3JnLCB3aGljaCBpc1xuICAgKiBvbmx5IGFuc3dlcmFibGUgb25jZSB0aGUgdGFyZ2V0IGlzIGtub3duLiBUaG9zZSBnYXRlcyB3ZXJlIGNvcnJlY3QgYnV0XG4gICAqIGludmlzaWJsZSDigJQgdGhlIHJvdXRlIHRhYmxlIHNob3dlZCBubyByZXF1aXJlbWVudCwgYW5kXG4gICAqIGBkb2NzL3Blcm1pc3Npb24tY29udHJhY3QubWRgIGlzIGRlcml2ZWQgZnJvbSB0aGUgdGFibGUsIHNvIHRoZSBhcnRpZmFjdCB0aGVcbiAgICogcmVwbyBjYWxscyBpdHMgcmV2aWV3IHN1cmZhY2UgcmVhZCBibGFuayBmb3IgdGhlIHN0cm9uZ2VzdCBwcml2aWxlZ2UgaW4gdGhlXG4gICAqIHN5c3RlbS5cbiAgICpcbiAgICogVGhpcyByZWNvcmRzIHRoZSByZXF1aXJlbWVudCBpbiBwcm9zZSBBTkQgYXMgYSBjbG9zZWQgc2V0IG9mIHByaW5jaXBhbFxuICAgKiBraW5kcy4gSXQgYXV0aG9yaXplcyBOT1RISU5HOyB0aGUgaGFuZGxlciBzdGlsbCBkb2VzIHRoZSB3b3JrLiBJdHMgdmFsdWUgaXNcbiAgICogdGhhdCBhIHJldmlld2VyIHJlYWRpbmcgdGhlIGNvbnRyYWN0IHNlZXMgYSBzdGF0ZWQgcnVsZSBpbnN0ZWFkIG9mIGFuIGVtcHR5XG4gICAqIGNlbGwsIGFuZCB0aGF0IHJlbW92aW5nIHRoZSByZWFsIGNoZWNrIGxlYXZlcyBhIGRlY2xhcmF0aW9uIGJlaGluZCB0aGF0IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzLlxuICAgKlxuICAgKiBXSFkgYHJlYWNoYWJsZUJ5YCBFWElTVFMgQkVTSURFIFRIRSBQUk9TRS4gUHJvc2UgaXMgdW5yZXZpZXdhYmxlIGJ5IGEgdGVzdCxcbiAgICogYW5kIG9uZSBvZiB0aGVzZSBydWxlcyB3YXMgd3Jvbmc6IHRoZSBpbXBlcnNvbmF0aW9uIGBkZWNpZGVgIHJvdXRlIGRlY2xhcmVkXG4gICAqIFwiYSBESUZGRVJFTlQgc3lzYWRtaW4gdGhhbiB0aGUgcmVxdWVzdGVyICh0d28tcGVyc29uIHJ1bGUpXCIsIHdoaWNoIGlzIG9ubHlcbiAgICogaXRzIGJyZWFrLWdsYXNzIGJyYW5jaCDigJQgdGhlIG9yZGluYXJ5IGJyYW5jaCBpcyB0aGUgdGVuYW50J3MgbmFtZWQgYXBwcm92ZXJcbiAgICogb3IgYSBnZW51aW5lIHRlbmFudCBhZG1pbiwgYW5kIGEgc3lzYWRtaW4gYWxvbmUgaXMgZXhwbGljaXRseSBSRUZVU0VEIHRoZXJlLlxuICAgKiBOb3RoaW5nIGNvdWxkIG5vdGljZSwgYmVjYXVzZSB0aGUgb25seSBtYWNoaW5lLXJlYWRhYmxlIGZpZWxkcyBzYWlkXG4gICAqIGBzeXN0ZW1BZG1pbjogZmFsc2UsIHBlcm1pc3Npb25zOiBbXWAuIEEgY2xvc2VkIHNldCBtYWtlcyB0aGUgYXV0aG9yXG4gICAqIGVudW1lcmF0ZSBwcmluY2lwYWxzLCBsZXRzIHRoZSBjb3ZlcmFnZSBzY2FuIGFzc2VydCB0aGUgZGVjbGFyYXRpb24gZXhpc3RzLFxuICAgKiBhbmQgbGV0cyBcIndoaWNoIHJvdXRlcyBjYW4gdGhlIHN1cGVyYWRtaW4gZmxhZyByZWFjaD9cIiBiZSBhbnN3ZXJlZCBieSBhXG4gICAqIHF1ZXJ5IGluc3RlYWQgb2YgYnkgcmVhZGluZyBzaXggcGFyYWdyYXBocy5cbiAgICovXG4gIHwgeyBraW5kOiAnZHluYW1pY0F1dGh6JzsgcnVsZTogc3RyaW5nOyByZWFjaGFibGVCeTogcmVhZG9ubHkgRHluYW1pY1ByaW5jaXBhbFtdOyBwZXJtaXNzaW9ucz86IHJlYWRvbmx5IFBlcm1pc3Npb25bXSB9XG4gIHwgeyBraW5kOiAnc2VydmljZVByaW5jaXBhbCcgfVxuICAvKiogQW4gSU5URVJOQUwgcm91dGU6IHVzZXIgdG9rZW5zIHJlZnVzZWQgb3V0cmlnaHQsIG9ubHkgdGhlc2Ugc2VydmljZXMgYWRtaXR0ZWQuICovXG4gIHwgeyBraW5kOiAnaW50ZXJuYWxTZXJ2aWNlJzsgY2FsbGVyczogcmVhZG9ubHkgc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N0ZXBVcCc7IG1ldGhvZHM/OiByZWFkb25seSBzdHJpbmdbXSB9XG4gIC8qKiBUaGUgd2hvbGUgU0VTU0lPTiBtdXN0IGJlIE1GQS1ncmFkZSAoYHJlcXVpcmVBdXRoKHsgbWluQXNzdXJhbmNlIH0pYCksIGFuZFxuICAgKiAgb3B0aW9uYWxseSBubyBvbGRlciB0aGFuIGBtYXhBZ2VgIHNlY29uZHMuIGBleGVtcHRgIG5hbWVzIGEgY2FydmUtb3V0IHRoZVxuICAgKiAgZ2F0ZSBhcHBsaWVzIHRvIGEgbmFycm93IGNsYXNzIG9mIHJlcXVlc3QgKHNlZSBgQXNzdXJhbmNlT3B0aW9ucy5leGVtcHRgKSxcbiAgICogIHNvIGEgcm91dGUgd2hvc2UgbGV2ZWwgaXMgY29uZGl0aW9uYWwgc2F5cyBzbyBvbiB0aGUgdGFibGUuICovXG4gIHwgeyBraW5kOiAnYXNzdXJhbmNlJzsgbWluQXNzdXJhbmNlOiAxIHwgMjsgbWF4QWdlPzogbnVtYmVyOyBleGVtcHQ/OiBzdHJpbmcgfVxuICAvKiogVGhlIHNlc3Npb24gbXVzdCBiZSBNRkEtZ3JhZGUgV0hFTiB0aGUgb3JnJ3MgYGFkbWluQWN0aW9uc1JlcXVpcmVNZmFgXG4gICAqICBwb2xpY3kgaXMgb24gKGByZXF1aXJlT3JnQWRtaW5Bc3N1cmFuY2VgKS4gYG1hY2hpbmVzYCBzYXlzIHdoYXQgYSBtYWNoaW5lXG4gICAqICBjcmVkZW50aWFsIG1lZXRzIG9uIHRoZSByb3V0ZSB3aGlsZSB0aGUgcG9saWN5IGlzIG9uLiAqL1xuICB8IHsga2luZDogJ29yZ0FkbWluQXNzdXJhbmNlJzsgbWFjaGluZXM6IE9yZ0FkbWluQXNzdXJhbmNlTWFjaGluZXMgfVxuICAvKiogVGhlIGNhbGxlcidzIEFDVElWRSBvcmcgbXVzdCBiZSB0aGUgc3lzdGVtIG9yZyAoYHJlcXVpcmVTeXN0ZW1PcmdgKSDigJQgdGhlXG4gICAqICBwbHVnaW4tZWNvc3lzdGVtIGdvdmVybmFuY2UgYm91bmRhcnkgKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiAqL1xuICB8IHsga2luZDogJ3N5c3RlbU9yZycgfVxuICB8IHsga2luZDogJ2ZlYXR1cmUnOyBmZWF0dXJlOiBzdHJpbmcgfVxuICB8IHsga2luZDogJ3Njb3BlJzsgc2NvcGU6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnYXVkaXQnOyBhY3Rpb25zOiByZWFkb25seSBzdHJpbmdbXSB9XG4gIC8qKiBBIHF1b3RhIG1pZGRsZXdhcmU6IGBtZXRlcmAgaW5jcmVtZW50cyB0aGUgdHlwZSBvbmNlIHBlciAyeHhcbiAgICogIChgbWV0ZXJRdW90YU9uU3VjY2Vzc2ApLCBgY2hlY2tgIDQyOXMgd2hlbiB0aGUgdHlwZSBpcyBzcGVudCAoYGNoZWNrUXVvdGFgKS5cbiAgICogIFJlY29yZGVkIHNvIHRoZSBxdW90YSBjb3ZlcmFnZSBjaGVjayBjYW4gc2VlIGFuIHVubWV0ZXJlZCB1c2VyIHJvdXRlIOKAlCBhbmQgYVxuICAgKiAgcm91dGUgbWV0ZXJlZCBUV0lDRSwgd2hpY2ggZG91YmxlLWJpbGxzIGV2ZXJ5IGNhbGwuICovXG4gIHwgeyBraW5kOiAncXVvdGEnOyBtb2RlOiAnbWV0ZXInIHwgJ2NoZWNrJzsgcXVvdGFUeXBlOiBzdHJpbmcgfTtcblxuLy8gU3ltYm9sLmZvciwgbm90IFN5bWJvbCgpOiBhIHRlc3QgdGhhdCBsb2FkcyBhcGktY29yZSB0d2ljZSAoRVNNICsgYVxuLy8gcmVxdWlyZUFjdHVhbCBjb3B5KSBtdXN0IHN0aWxsIHNlZSB0YWdzIHNldCBieSB0aGUgb3RoZXIgY29weS5cbmNvbnN0IEdBVEVTID0gU3ltYm9sLmZvcigncGlwZWxpbmUtYnVpbGRlci5yb3V0ZS1nYXRlcycpO1xuY29uc3QgTEFZRVJfUEFUSCA9IFN5bWJvbC5mb3IoJ3BpcGVsaW5lLWJ1aWxkZXIubGF5ZXItcGF0aCcpO1xuY29uc3QgUkVDT1JERVJfSU5TVEFMTEVEID0gU3ltYm9sLmZvcigncGlwZWxpbmUtYnVpbGRlci5yb3V0ZS1yZWNvcmRlcicpO1xuXG50eXBlIFRhZ2dlZCA9IHsgW0dBVEVTXT86IFJvdXRlR2F0ZVtdIH07XG5cbi8qKlxuICogQXR0YWNoIGdhdGUgbWV0YWRhdGEgdG8gYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIChhcHBlbmRzIHRvIGFueSBleGlzdGluZyB0YWdzKVxuICogYW5kIHJldHVybiB0aGUgc2FtZSBmdW5jdGlvbi4gVXNlIGl0IGZvciBhIHNlcnZpY2UtbG9jYWwgZ2F0ZSBzbyB0aGUgcm91dGVcbiAqIHRhYmxlIGtub3dzIHdoYXQgaXQgZW5mb3JjZXMg4oCUIGUuZy4gYSBoYW5kbGVyLWxldmVsIGByZXF1aXJlQ29tcGxpYW5jZVdyaXRlYFxuICogdGFnZ2VkIGB7IGtpbmQ6ICdwZXJtaXNzaW9uJywgbW9kZTogJ2FueScsIHBlcm1pc3Npb25zOiBbJ2NvbXBsaWFuY2U6d3JpdGUnXSB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ1JvdXRlR2F0ZTxUIGV4dGVuZHMgb2JqZWN0PihmbjogVCwgLi4uZ2F0ZXM6IFJvdXRlR2F0ZVtdKTogVCB7XG4gIGNvbnN0IHQgPSBmbiBhcyBUICYgVGFnZ2VkO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgR0FURVMsIHsgdmFsdWU6IFsuLi4odFtHQVRFU10gPz8gW10pLCAuLi5nYXRlc10sIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICByZXR1cm4gZm47XG59XG5cbi8qKiBUaGUgZ2F0ZSBtZXRhZGF0YSBhdHRhY2hlZCB0byBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gKGVtcHR5IHdoZW4gdW50YWdnZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlR2F0ZXMoZm46IHVua25vd24pOiByZWFkb25seSBSb3V0ZUdhdGVbXSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHJldHVybiBbXTtcbiAgcmV0dXJuIChmbiBhcyBUYWdnZWQpW0dBVEVTXSA/PyBbXTtcbn1cblxuLyoqXG4gKiBEZWNsYXJlIHRoZSBhdWRpdCBhY3Rpb24ocykgYSByb3V0ZSBlbWl0cy4gQSBuby1vcCBtaWRkbGV3YXJlIHdob3NlIG9ubHkgam9iXG4gKiBpcyB0byBwdXQgdGhlIGFjdGlvbiBvbiB0aGUgcm91dGUgdGFibGUsIHNvIHRoZSBjb3ZlcmFnZSB0ZXN0IGNhbiByZXF1aXJlIGFuXG4gKiBhdWRpdCBkZWNsYXJhdGlvbiBvbiBldmVyeSB3cml0ZSByb3V0ZS4gUGxhY2UgaXQgaW4gdGhlIHJvdXRlJ3MgY2hhaW46XG4gKiBgcm91dGVyLnBvc3QoJy8nLCBhdWRpdGVkKCdwaXBlbGluZS5jcmVhdGUnKSwgaGFuZGxlcilgLiBUaGUgaGFuZGxlciBzdGlsbFxuICogZW1pdHMgdGhlIGV2ZW50IGl0c2VsZi5cbiAqL1xuLyoqXG4gKiBEZWNsYXJlIGF1dGhvcml6YXRpb24gdGhhdCB0aGUgaGFuZGxlciByZXNvbHZlcyAoc2VlIHRoZSBgZHluYW1pY0F1dGh6YCBnYXRlKS5cbiAqIEEgbm8tb3AgbWlkZGxld2FyZSwgZXhhY3RseSBsaWtlIHtAbGluayBhdWRpdGVkfTogaXQgcmVjb3JkcyB0aGUgcnVsZSBvbiB0aGVcbiAqIHJvdXRlIHRhYmxlIHNvIHRoZSBjb250cmFjdCBjYW4gcHJpbnQgaXQuXG4gKlxuICogYHJ1bGVgIGlzIHJlYWQgYnkgYSBodW1hbiwgc28gaXQgc2hvdWxkIG5hbWUgdGhlIHJlYWwgcHJlZGljYXRlIOKAlCBlLmcuXG4gKiBgJ3N5c2FkbWluLCBvciBhbiBhZG1pbiBvZiBhbiBhbmNlc3RvciBvcmcgb2YgdGhlIHRhcmdldCB1c2VyJ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkeW5hbWljQXV0aHooXG4gIHJ1bGU6IHN0cmluZyxcbiAgb3B0czogeyByZWFjaGFibGVCeTogcmVhZG9ubHkgRHluYW1pY1ByaW5jaXBhbFtdOyBwZXJtaXNzaW9ucz86IHJlYWRvbmx5IFBlcm1pc3Npb25bXSB9LFxuKTogKHJlcTogdW5rbm93biwgcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgaWYgKG9wdHMucmVhY2hhYmxlQnkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkeW5hbWljQXV0aHooXCIke3J1bGV9XCIpIG11c3QgbmFtZSBhdCBsZWFzdCBvbmUgcHJpbmNpcGFsIGtpbmQgaW4gcmVhY2hhYmxlQnlgKTtcbiAgfVxuICBmb3IgKGNvbnN0IHAgb2Ygb3B0cy5yZWFjaGFibGVCeSkge1xuICAgIGlmICghRFlOQU1JQ19QUklOQ0lQQUxTLmluY2x1ZGVzKHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGR5bmFtaWNBdXRoeihcIiR7cnVsZX1cIik6IHVua25vd24gcHJpbmNpcGFsIFwiJHtwfVwiIOKAlCBvbmUgb2YgJHtEWU5BTUlDX1BSSU5DSVBBTFMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ1JvdXRlR2F0ZShcbiAgICBmdW5jdGlvbiBkeW5hbWljQXV0aHpSb3V0ZShfcmVxOiB1bmtub3duLCBfcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSB7IG5leHQoKTsgfSxcbiAgICB7IGtpbmQ6ICdkeW5hbWljQXV0aHonLCBydWxlLCByZWFjaGFibGVCeTogWy4uLm9wdHMucmVhY2hhYmxlQnldLCAuLi4ob3B0cy5wZXJtaXNzaW9ucyAmJiB7IHBlcm1pc3Npb25zOiBbLi4ub3B0cy5wZXJtaXNzaW9uc10gfSkgfSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0ZWQoLi4uYWN0aW9uczogc3RyaW5nW10pOiAocmVxOiB1bmtub3duLCByZXM6IHVua25vd24sIG5leHQ6ICgpID0+IHZvaWQpID0+IHZvaWQge1xuICByZXR1cm4gdGFnUm91dGVHYXRlKGZ1bmN0aW9uIGF1ZGl0ZWRSb3V0ZShfcmVxOiB1bmtub3duLCBfcmVzOiB1bmtub3duLCBuZXh0OiAoKSA9PiB2b2lkKSB7IG5leHQoKTsgfSwgeyBraW5kOiAnYXVkaXQnLCBhY3Rpb25zIH0pO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vdW50LXBhdGggcmVjb3JkaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIExheWVyIHtcbiAgaGFuZGxlOiB1bmtub3duO1xuICByb3V0ZT86IHsgcGF0aDogc3RyaW5nIHwgc3RyaW5nW107IG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+OyBzdGFjazogQXJyYXk8eyBtZXRob2Q/OiBzdHJpbmc7IGhhbmRsZTogdW5rbm93biB9PiB9O1xuICBtYXRjaGVyczogQXJyYXk8KHBhdGg6IHN0cmluZykgPT4gdW5rbm93bj47XG4gIC8qKiByb3V0ZXJAMidzIFwibW91bnRlZCBhdCAnLycgd2l0aCBlbmQ6ZmFsc2VcIiBmYXN0IHBhdGgg4oCUIG1hdGNoZXMgQU5ZIHBhdGguICovXG4gIHNsYXNoPzogYm9vbGVhbjtcbiAgW0xBWUVSX1BBVEhdPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUm91dGVyTGlrZSB7IHN0YWNrOiBMYXllcltdIH1cblxuZnVuY3Rpb24gaW5zdGFsbFJvdXRlUmVjb3JkZXIoKTogdm9pZCB7XG4gIGNvbnN0IHByb3RvID0gKGV4cHJlc3MuUm91dGVyIGFzIHVua25vd24gYXMgeyBwcm90b3R5cGU6IFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+IH0pLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvW1JFQ09SREVSX0lOU1RBTExFRF0pIHJldHVybjtcbiAgY29uc3Qgb3JpZ2luYWxVc2UgPSBwcm90by51c2UgYXMgKHRoaXM6IFJvdXRlckxpa2UsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbiAgcHJvdG8udXNlID0gZnVuY3Rpb24gcmVjb3JkaW5nVXNlKHRoaXM6IFJvdXRlckxpa2UsIC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsVXNlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIC8vIFNhbWUgcGF0aCBkaXNhbWJpZ3VhdGlvbiBhcyByb3V0ZXJAMidzIGB1c2VgOiBhIGxlYWRpbmcgbm9uLWZ1bmN0aW9uXG4gICAgLy8gKHBvc3NpYmx5IG5lc3RlZCBpbiBhcnJheXMpIGlzIHRoZSBwYXRoOyBvdGhlcndpc2UgdGhlIG1vdW50IGlzICcvJy5cbiAgICBsZXQgZmlyc3Q6IHVua25vd24gPSBhcmdzWzBdO1xuICAgIHdoaWxlIChBcnJheS5pc0FycmF5KGZpcnN0KSAmJiBmaXJzdC5sZW5ndGggPiAwKSBmaXJzdCA9IGZpcnN0WzBdO1xuICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgZmlyc3QgPT09ICdmdW5jdGlvbicgPyAnLycgOiBTdHJpbmcoYXJnc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IGJlZm9yZTsgaSA8IHRoaXMuc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnN0YWNrW2ldLCBMQVlFUl9QQVRILCB7IHZhbHVlOiBwYXRoLCBlbnVtZXJhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIFJFQ09SREVSX0lOU1RBTExFRCwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG59XG5cbmluc3RhbGxSb3V0ZVJlY29yZGVyKCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGFibGUgY29uc3RydWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFJlc29sdmVkIHJlcXVpcmVtZW50cyBmb3Igb25lIG1ldGhvZCArIHBhdGguICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVFbnRyeSB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKiBBdXRoZW50aWNhdGlvbiBydW5zIGJlZm9yZSB0aGUgaGFuZGxlciAocmVxdWlyZUF1dGgpLiAqL1xuICBhdXRoOiBib29sZWFuO1xuICAvKiogRWFjaCBwZXJtaXNzaW9uIGdhdGUgaW4gdGhlIGNoYWluIChhbGwgbXVzdCBwYXNzOyBlYWNoIGlzIGFueS1vZiBvciBhbGwtb2YpLiAqL1xuICBwZXJtaXNzaW9uczogQXJyYXk8eyBtb2RlOiAnYW55JyB8ICdhbGwnOyBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdOyBhbGxvd1NlcnZpY2U6IGJvb2xlYW4gfT47XG4gIHN5c3RlbUFkbWluOiBib29sZWFuO1xuICBzZXJ2aWNlUHJpbmNpcGFsOiBib29sZWFuO1xuICAvKiogQXV0aG9yaXphdGlvbiB0aGUgSEFORExFUiByZXNvbHZlcywgaW4gcHJvc2Ug4oCUIHNlZSB0aGUgYGR5bmFtaWNBdXRoemAgZ2F0ZS5cbiAgICogIEVtcHR5IHdoZW4gdGhlIHJvdXRlJ3MgYXV0aG9yaXR5IGlzIGZ1bGx5IGV4cHJlc3NlZCBieSB0aGUgZ2F0ZXMgYWJvdmUuICovXG4gIGR5bmFtaWNBdXRoejogc3RyaW5nW107XG4gIC8qKiBUaGUgcHJpbmNpcGFsIGtpbmRzIHRob3NlIGR5bmFtaWMgcnVsZXMgYWRtaXQsIGRlZHVwZWQgYW5kIHNvcnRlZC4gQWJzZW50XG4gICAqICB3aGVuIHRoZSByb3V0ZSBkZWNsYXJlcyBubyBkeW5hbWljIHJ1bGUsIHNvIHRhYmxlcyB3aXRob3V0IG9uZSBhcmVcbiAgICogIHVuY2hhbmdlZC4gVGhpcyBpcyB0aGUgbWFjaGluZS1yZWFkYWJsZSBoYWxmIG9mIGBkeW5hbWljQXV0aHpgOiBpdCBpcyBob3dcbiAgICogIFwid2hpY2ggcm91dGVzIGNhbiB0aGUgc3VwZXJhZG1pbiBmbGFnIHJlYWNoP1wiIGlzIGFuc3dlcmFibGUgd2l0aG91dFxuICAgKiAgcmVhZGluZyBwcm9zZS4gKi9cbiAgZHluYW1pY1JlYWNoYWJsZUJ5PzogRHluYW1pY1ByaW5jaXBhbFtdO1xuICAvKiogUGVybWlzc2lvbiBpZHMgYSBkeW5hbWljIHJ1bGUgY29uc3VsdHMgaW5zaWRlIHRoZSBoYW5kbGVyLCBkZWR1cGVkIGFuZFxuICAgKiAgc29ydGVkLiBBYnNlbnQgd2hlbiBub25lIGRvZXMuIFRoZXNlIGFyZSBSRUFMIGVuZm9yY2VtZW50IOKAlCB0aGUgY292ZXJhZ2VcbiAgICogIHNjYW4gY291bnRzIGEgYHVzZXJIYXNQZXJtaXNzaW9uKHJlcSwgJ3gnKWAgaW4gYSBjb250cm9sbGVyIOKAlCBzbyB0aGVcbiAgICogIGNvbnRyYWN0IHNob3VsZCBub3QgcmVhZCBhcyB0aG91Z2ggdGhlIHJvdXRlIGFza2VkIGZvciBub3RoaW5nLiAqL1xuICBkeW5hbWljUGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gIC8qKlxuICAgKiBUaGUgc2VydmljZXMgYWxsb3dlZCB0byBjYWxsIHRoaXMgcm91dGUgd2hlbiBpdCBpcyBJTlRFUk5BTCAoYHJlcXVpcmVJbnRlcm5hbFNlcnZpY2VgKS5cbiAgICogQW4gZW1wdHkgYXJyYXkgbWVhbnMgdGhlIHJvdXRlIGlzIG5vdCBpbnRlcm5hbCDigJQgYSB1c2VyIHRva2VuIG1heSByZWFjaCBpdCxcbiAgICogc3ViamVjdCB0byB0aGUgb3RoZXIgZ2F0ZXMuIFNvcnRlZCwgc28gdGhlIGdlbmVyYXRlZCB0YWJsZSBpcyBzdGFibGUuXG4gICAqL1xuICBpbnRlcm5hbENhbGxlcnM6IHN0cmluZ1tdO1xuICBzdGVwVXA6IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRoZSBzdGVwLXVwIGdhdGUgbmFtZXMgdGhlIGZhY3RvcnMgdGhhdCBtYXkgZWFybiBpdCAoYFsnd2ViYXV0aG4nLFxuICAgKiAgJ3RvdHAnXWAgb24gdGhlIG1vc3QgZGFuZ2Vyb3VzIHJvdXRlcyksIHRoZSBhbGxvd2VkIG1ldGhvZHMuIEVtcHR5IG1lYW5zXG4gICAqICBhbnkgZmFjdG9yIHNhdGlzZmllcyBpdC4gU29ydGVkLCBzbyB0aGUgZ2VuZXJhdGVkIHRhYmxlIGlzIHN0YWJsZS4gKi9cbiAgc3RlcFVwTWV0aG9kczogc3RyaW5nW107XG4gIC8qKiBIaWdoZXN0IGBtaW5Bc3N1cmFuY2VgIGFueSBnYXRlIGluIHRoZSBjaGFpbiBkZW1hbmRzOyAwIHdoZW4gbm9uZSBkb2VzLiAqL1xuICBtaW5Bc3N1cmFuY2U6IDAgfCAxIHwgMjtcbiAgLyoqIFRpZ2h0ZXN0IGBtYXhBZ2VgIChzZWNvbmRzKSBhbnkgYXNzdXJhbmNlIGdhdGUgaW4gdGhlIGNoYWluIGRlbWFuZHMuICovXG4gIG1heEFnZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lZCBjYXJ2ZS1vdXRzIHRoZSBjaGFpbidzIGFzc3VyYW5jZSBnYXRlcyBhbGxvdyAoc29ydGVkKS4gQWJzZW50IHdoZW5cbiAgICogdGhlcmUgYXJlIG5vbmUsIHNvIGEgdGFibGUgb2Ygcm91dGVzIHdpdGhvdXQgb25lIGlzIHVuY2hhbmdlZC4gQSByZXZpZXdlclxuICAgKiByZWFkaW5nIGBtaW5Bc3N1cmFuY2U6IDJgIG5leHQgdG8gYGFzc3VyYW5jZUV4ZW1wdDogW1wiYm9vdHN0cmFwLXNldHVwXCJdYFxuICAgKiBrbm93cyB0aGUgbGV2ZWwgaXMgcmVxdWlyZWQgb2YgZXZlcnlvbmUgRVhDRVBUIHRoYXQgbmFtZWQgY2FzZS5cbiAgICovXG4gIGFzc3VyYW5jZUV4ZW1wdD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSByb3V0ZSByZXF1aXJlcyBhbiBNRkEtZ3JhZGUgc2Vzc2lvbiBXSEVOIHRoZSBvcmcnc1xuICAgKiBgYWRtaW5BY3Rpb25zUmVxdWlyZU1mYWAgcG9saWN5IGlzIG9uIChgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCksIHdpdGhcbiAgICogd2hhdCBhIG1hY2hpbmUgY3JlZGVudGlhbCBtZWV0cyB0aGVyZS4gQWJzZW50IChub3QgYGZhbHNlYCkgb3RoZXJ3aXNlLCBzb1xuICAgKiB0aGUgdGFibGUgb2YgYSBzZXJ2aWNlIHRoYXQgdXNlcyBubyBzdWNoIGdhdGUgaXMgdW5jaGFuZ2VkLlxuICAgKi9cbiAgb3JnQWRtaW5Bc3N1cmFuY2U/OiB7IG1hY2hpbmVzOiBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzIH07XG4gIC8qKlxuICAgKiBQcmVzZW50IChhbHdheXMgYHRydWVgKSB3aGVuIHRoZSBjaGFpbiBydW5zIGByZXF1aXJlU3lzdGVtT3JnYDogb25seSBhXG4gICAqIGNhbGxlciB3aG9zZSBhY3RpdmUgb3JnIGlzIHRoZSBzeXN0ZW0gb3JnIGdldHMgdGhyb3VnaC4gQWJzZW50IG90aGVyd2lzZSxcbiAgICogc28gdGhlIHRhYmxlIG9mIGEgc2VydmljZSB3aXRoIG5vIGVjb3N5c3RlbS1nb3Zlcm5hbmNlIHJvdXRlIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIHN5c3RlbU9yZz86IHRydWU7XG4gIGZlYXR1cmVzOiBzdHJpbmdbXTtcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbiAgYXVkaXQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIHF1b3RhIG1pZGRsZXdhcmUgaW4gdGhlIGNoYWluOiB0aGUgdHlwZXMgbWV0ZXJlZCAob25jZSBwZXIgMnh4KSBhbmRcbiAgICogY2hlY2tlZCAoNDI5IHdoZW4gc3BlbnQpLiBgbWV0ZXJlZGAgaXMgTk9UIGRlZHVwZWQg4oCUIGEgdHlwZSBsaXN0ZWQgdHdpY2UgaXNcbiAgICogbWV0ZXJlZCB0d2ljZSwgd2hpY2ggdGhlIGNvdmVyYWdlIGNoZWNrIGZsYWdzLiBgZXhlbXB0YCBtYXJrcyBhIHJvdXRlIG9uIHRoZVxuICAgKiBmbGVldC13aWRlIGBRVU9UQV9FWEVNUFRfUk9VVEVTYCBsaXN0LCB3aGVyZSB0aGUgYGFwaUNhbGxzYCBtZXRlciBhbmQgY2hlY2tcbiAgICogYXJlIG5vLW9wcyBhdCBydW50aW1lIChzbyBgYXBpQ2FsbHNgIGlzIGxlZnQgb3V0IG9mIGJvdGggbGlzdHMpLiBBYnNlbnQgd2hlblxuICAgKiB0aGUgY2hhaW4gaGFzIG5vIHF1b3RhIG1pZGRsZXdhcmUgYW5kIHRoZSByb3V0ZSBpcyBub3QgZXhlbXB0LlxuICAgKi9cbiAgcXVvdGE/OiB7IG1ldGVyZWQ6IHN0cmluZ1tdOyBjaGVja2VkOiBzdHJpbmdbXTsgZXhlbXB0PzogdHJ1ZSB9O1xufVxuXG5pbnRlcmZhY2UgQ2FuZGlkYXRlIHsgbGF5ZXI6IExheWVyOyBwcmVmaXg6IHN0cmluZyB9XG5cbmZ1bmN0aW9uIGpvaW5QYXRoKHByZWZpeDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBqb2luZWQgPSBgJHtwcmVmaXgucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cGF0aC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gO1xuICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDEgPyBqb2luZWQucmVwbGFjZSgvXFwvKyQvLCAnJykgOiAnLyc7XG59XG5cbmZ1bmN0aW9uIGlzUm91dGVyKGhhbmRsZTogdW5rbm93bik6IGhhbmRsZSBpcyBSb3V0ZXJMaWtlIHtcbiAgcmV0dXJuIHR5cGVvZiBoYW5kbGUgPT09ICdmdW5jdGlvbicgJiYgQXJyYXkuaXNBcnJheSgoaGFuZGxlIGFzIFBhcnRpYWw8Um91dGVyTGlrZT4pLnN0YWNrKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgbWlkZGxld2FyZSBsYXllciAobW91bnRlZCB1bmRlciBgcHJlZml4YCkgcnVucyBmb3IgYGZ1bGxQYXRoYC5cbiAqIE1pcnJvcnMgYExheWVyLnByb3RvdHlwZS5tYXRjaGAsIGluY2x1ZGluZyBpdHMgZmFzdCBwYXRoOiBhIGxheWVyIGFkZGVkIHdpdGhcbiAqIG5vIHBhdGggKGByb3V0ZXIudXNlKGdhdGUpYCkgbWF0Y2hlcyBFVkVSWSBwYXRoIHVuZGVyIGl0cyByb3V0ZXIg4oCUIHdoaWNoIGlzXG4gKiBleGFjdGx5IGhvdyB0aGUgc2hhcmVkIGByZXF1aXJlUGVybWlzc2lvbmAgZ2F0ZXMgYmV0d2VlbiB0d28gYHJvdXRlci51c2UoLi4uKWBcbiAqIG1vdW50cyByZWFjaCB0aGUgcm91dGVycyByZWdpc3RlcmVkIGFmdGVyIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIGFwcGxpZXMoYzogQ2FuZGlkYXRlLCBmdWxsUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2UgPSBjLnByZWZpeCA9PT0gJy8nID8gJycgOiBjLnByZWZpeDtcbiAgaWYgKGJhc2UgJiYgZnVsbFBhdGggIT09IGJhc2UgJiYgIWZ1bGxQYXRoLnN0YXJ0c1dpdGgoYCR7YmFzZX0vYCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKGMubGF5ZXIuc2xhc2gpIHJldHVybiB0cnVlO1xuICBjb25zdCByZWwgPSBmdWxsUGF0aC5zbGljZShiYXNlLmxlbmd0aCkgfHwgJy8nO1xuICByZXR1cm4gYy5sYXllci5tYXRjaGVycy5zb21lKChtKSA9PiBtKHJlbCkgIT09IGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdEdhdGVzKGZuczogdW5rbm93bltdKTogUm91dGVHYXRlW10ge1xuICByZXR1cm4gZm5zLmZsYXRNYXAoKGZuKSA9PiBnZXRSb3V0ZUdhdGVzKGZuKSk7XG59XG5cbmZ1bmN0aW9uIHRvRW50cnkobWV0aG9kOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgZ2F0ZXM6IFJvdXRlR2F0ZVtdKTogUm91dGVUYWJsZUVudHJ5IHtcbiAgY29uc3QgZW50cnk6IFJvdXRlVGFibGVFbnRyeSA9IHtcbiAgICBtZXRob2QsXG4gICAgcGF0aCxcbiAgICBhdXRoOiBmYWxzZSxcbiAgICBwZXJtaXNzaW9uczogW10sXG4gICAgc3lzdGVtQWRtaW46IGZhbHNlLFxuICAgIHNlcnZpY2VQcmluY2lwYWw6IGZhbHNlLFxuICAgIGR5bmFtaWNBdXRoejogW10sXG4gICAgaW50ZXJuYWxDYWxsZXJzOiBbXSxcbiAgICBzdGVwVXA6IGZhbHNlLFxuICAgIHN0ZXBVcE1ldGhvZHM6IFtdLFxuICAgIG1pbkFzc3VyYW5jZTogMCxcbiAgICBmZWF0dXJlczogW10sXG4gICAgc2NvcGVzOiBbXSxcbiAgICBhdWRpdDogW10sXG4gIH07XG4gIGZvciAoY29uc3QgZyBvZiBnYXRlcykge1xuICAgIHN3aXRjaCAoZy5raW5kKSB7XG4gICAgICBjYXNlICdhdXRoJzogZW50cnkuYXV0aCA9IHRydWU7IGJyZWFrO1xuICAgICAgY2FzZSAncGVybWlzc2lvbic6IGVudHJ5LnBlcm1pc3Npb25zLnB1c2goeyBtb2RlOiBnLm1vZGUsIHBlcm1pc3Npb25zOiBbLi4uZy5wZXJtaXNzaW9uc10sIGFsbG93U2VydmljZTogZy5hbGxvd1NlcnZpY2UgPT09IHRydWUgfSk7IGJyZWFrO1xuICAgICAgY2FzZSAnc3lzdGVtQWRtaW4nOiBlbnRyeS5zeXN0ZW1BZG1pbiA9IHRydWU7IGJyZWFrO1xuICAgICAgY2FzZSAnc2VydmljZVByaW5jaXBhbCc6IGVudHJ5LnNlcnZpY2VQcmluY2lwYWwgPSB0cnVlOyBicmVhaztcbiAgICAgIGNhc2UgJ2R5bmFtaWNBdXRoeic6XG4gICAgICAgIGlmICghZW50cnkuZHluYW1pY0F1dGh6LmluY2x1ZGVzKGcucnVsZSkpIGVudHJ5LmR5bmFtaWNBdXRoei5wdXNoKGcucnVsZSk7XG4gICAgICAgIGVudHJ5LmR5bmFtaWNSZWFjaGFibGVCeSA9IFsuLi5uZXcgU2V0KFsuLi4oZW50cnkuZHluYW1pY1JlYWNoYWJsZUJ5ID8/IFtdKSwgLi4uZy5yZWFjaGFibGVCeV0pXS5zb3J0KCk7XG4gICAgICAgIGlmIChnLnBlcm1pc3Npb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBlbnRyeS5keW5hbWljUGVybWlzc2lvbnMgPSBbLi4ubmV3IFNldChbLi4uKGVudHJ5LmR5bmFtaWNQZXJtaXNzaW9ucyA/PyBbXSksIC4uLmcucGVybWlzc2lvbnNdKV0uc29ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW50ZXJuYWxTZXJ2aWNlJzogZm9yIChjb25zdCBjIG9mIGcuY2FsbGVycykgaWYgKCFlbnRyeS5pbnRlcm5hbENhbGxlcnMuaW5jbHVkZXMoYykpIGVudHJ5LmludGVybmFsQ2FsbGVycy5wdXNoKGMpOyBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBVcCc6XG4gICAgICAgIGVudHJ5LnN0ZXBVcCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBnLm1ldGhvZHMgPz8gW10pIGlmICghZW50cnkuc3RlcFVwTWV0aG9kcy5pbmNsdWRlcyhtKSkgZW50cnkuc3RlcFVwTWV0aG9kcy5wdXNoKG0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc3VyYW5jZSc6XG4gICAgICAgIC8vIFNldmVyYWwgZ2F0ZXMgbWF5IGFwcGx5OyB0aGUgU1RSSUNURVNUIHdpbnMsIHNpbmNlIGV2ZXJ5IG9uZSBvZiB0aGVtIHJ1bnMuXG4gICAgICAgIGlmIChnLm1pbkFzc3VyYW5jZSA+IGVudHJ5Lm1pbkFzc3VyYW5jZSkgZW50cnkubWluQXNzdXJhbmNlID0gZy5taW5Bc3N1cmFuY2U7XG4gICAgICAgIGlmIChnLm1heEFnZSAhPT0gdW5kZWZpbmVkKSBlbnRyeS5tYXhBZ2UgPSBlbnRyeS5tYXhBZ2UgPT09IHVuZGVmaW5lZCA/IGcubWF4QWdlIDogTWF0aC5taW4oZW50cnkubWF4QWdlLCBnLm1heEFnZSk7XG4gICAgICAgIGlmIChnLmV4ZW1wdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW50cnkuYXNzdXJhbmNlRXhlbXB0ID0gWy4uLm5ldyBTZXQoWy4uLihlbnRyeS5hc3N1cmFuY2VFeGVtcHQgPz8gW10pLCBnLmV4ZW1wdF0pXS5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcmdBZG1pbkFzc3VyYW5jZSc6XG4gICAgICAgIC8vIFN0cmljdGVzdCB3aW5zOiBvbmUgYHJlZnVzZWAgaW4gdGhlIGNoYWluIHJlZnVzZXMgbWFjaGluZXMuXG4gICAgICAgIGVudHJ5Lm9yZ0FkbWluQXNzdXJhbmNlID0ge1xuICAgICAgICAgIG1hY2hpbmVzOiBlbnRyeS5vcmdBZG1pbkFzc3VyYW5jZT8ubWFjaGluZXMgPT09ICdyZWZ1c2UnIHx8IGcubWFjaGluZXMgPT09ICdyZWZ1c2UnID8gJ3JlZnVzZScgOiAnYWxsb3cnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N5c3RlbU9yZyc6IGVudHJ5LnN5c3RlbU9yZyA9IHRydWU7IGJyZWFrO1xuICAgICAgY2FzZSAnZmVhdHVyZSc6IGlmICghZW50cnkuZmVhdHVyZXMuaW5jbHVkZXMoZy5mZWF0dXJlKSkgZW50cnkuZmVhdHVyZXMucHVzaChnLmZlYXR1cmUpOyBicmVhaztcbiAgICAgIGNhc2UgJ3Njb3BlJzogaWYgKCFlbnRyeS5zY29wZXMuaW5jbHVkZXMoZy5zY29wZSkpIGVudHJ5LnNjb3Blcy5wdXNoKGcuc2NvcGUpOyBicmVhaztcbiAgICAgIGNhc2UgJ2F1ZGl0JzogZm9yIChjb25zdCBhIG9mIGcuYWN0aW9ucykgaWYgKCFlbnRyeS5hdWRpdC5pbmNsdWRlcyhhKSkgZW50cnkuYXVkaXQucHVzaChhKTsgYnJlYWs7XG4gICAgICBjYXNlICdxdW90YSc6IHtcbiAgICAgICAgY29uc3QgcXVvdGEgPSBlbnRyeS5xdW90YSA/PyAoZW50cnkucXVvdGEgPSB7IG1ldGVyZWQ6IFtdLCBjaGVja2VkOiBbXSB9KTtcbiAgICAgICAgaWYgKGcubW9kZSA9PT0gJ21ldGVyJykgcXVvdGEubWV0ZXJlZC5wdXNoKGcucXVvdGFUeXBlKTtcbiAgICAgICAgZWxzZSBpZiAoIXF1b3RhLmNoZWNrZWQuaW5jbHVkZXMoZy5xdW90YVR5cGUpKSBxdW90YS5jaGVja2VkLnB1c2goZy5xdW90YVR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIEEgR0FURSBLSU5EIFRIQVQgUkVBQ0hFUyBIRVJFIFdPVUxEIEJFIElOVklTSUJMRSwgd2hpY2ggaXMgdGhlIG9uZVxuICAgICAgLy8gZmFpbHVyZSB0aGlzIHRhYmxlIGNhbm5vdCBhZmZvcmQuIGBkb2NzL3Blcm1pc3Npb24tY2F0YWxvZ2AgYW5kIHRoZVxuICAgICAgLy8gcGVybWlzc2lvbiBjb250cmFjdCBhcmUgYm90aCBERVJJVkVEIGZyb20gdGhlc2UgZW50cmllcywgc28gYSBraW5kXG4gICAgICAvLyBub3RoaW5nIHByb2plY3RzIGxlYXZlcyB0aGUgcm91dGUncyBjZWxsIGJsYW5rIOKAlCBhbmQgdGhlIGNvbnRyYWN0J3NcbiAgICAgIC8vIFwiYSB3ZWFrZW5pbmcgZmFpbHMgSEVSRVwiIHRlc3QgdGhlbiBwYXNzZXMgb3ZlciBhIHJvdXRlIHdob3NlIHJlYWxcbiAgICAgIC8vIHJlcXVpcmVtZW50IGl0IG5ldmVyIHNhdy4gVGhhdCBpcyBleGFjdGx5IHdoYXQgdGhlIGR5bmFtaWNBdXRoeiBub3RlXG4gICAgICAvLyBhYm92ZSByZWNvcmRzIHBheWluZyBmb3Igb25jZTogZ2F0ZXMgdGhhdCB3ZXJlIGNvcnJlY3QgYnV0IGludmlzaWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBTbyB0aGlzIGlzIGEgY29tcGlsZSBlcnJvciwgbm90IGEgcnVudGltZSBvbmU6IGFkZGluZyBhIG1lbWJlciB0b1xuICAgICAgLy8gYFJvdXRlR2F0ZWAgZmFpbHMgdGhlIGJ1aWxkIHVudGlsIHNvbWVvbmUgZGVjaWRlcyBob3cgaXQgYXBwZWFycyBpbiB0aGVcbiAgICAgIC8vIHRhYmxlLiBUaGUgdGhyb3cgaXMgdW5yZWFjaGFibGUgZXhjZXB0IHRocm91Z2ggYSBjYXN0LlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBnO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucHJvamVjdGVkIHJvdXRlIGdhdGUga2luZDogJHtKU09OLnN0cmluZ2lmeShfZXhoYXVzdGl2ZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFuIGV4ZW1wdCByb3V0ZSdzIGFwaUNhbGxzIG1ldGVyICsgY2hlY2sgc2tpcCBpdCBhdCBydW50aW1lLCBzbyB0aGUgdGFibGVcbiAgLy8gc2F5cyB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgcmF0aGVyIHRoYW4gd2hhdCBpcyBtb3VudGVkLlxuICBpZiAoaXNRdW90YUV4ZW1wdFJvdXRlKG1ldGhvZCwgcGF0aCkpIHtcbiAgICBjb25zdCBxdW90YSA9IGVudHJ5LnF1b3RhID8/IHsgbWV0ZXJlZDogW10sIGNoZWNrZWQ6IFtdIH07XG4gICAgZW50cnkucXVvdGEgPSB7XG4gICAgICBtZXRlcmVkOiBxdW90YS5tZXRlcmVkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBjaGVja2VkOiBxdW90YS5jaGVja2VkLmZpbHRlcigodCkgPT4gdCAhPT0gJ2FwaUNhbGxzJyksXG4gICAgICBleGVtcHQ6IHRydWUsXG4gICAgfTtcbiAgfVxuICBlbnRyeS5pbnRlcm5hbENhbGxlcnMuc29ydCgpO1xuICBlbnRyeS5zdGVwVXBNZXRob2RzLnNvcnQoKTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5mdW5jdGlvbiB3YWxrKHN0YWNrOiBMYXllcltdLCBwcmVmaXg6IHN0cmluZywgaW5oZXJpdGVkOiBDYW5kaWRhdGVbXSwgb3V0OiBSb3V0ZVRhYmxlRW50cnlbXSwgc2VlbjogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgbG9jYWw6IENhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbGF5ZXIgb2Ygc3RhY2spIHtcbiAgICBpZiAobGF5ZXIucm91dGUpIHtcbiAgICAgIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShsYXllci5yb3V0ZS5wYXRoKSA/IGxheWVyLnJvdXRlLnBhdGggOiBbbGF5ZXIucm91dGUucGF0aF07XG4gICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMobGF5ZXIucm91dGUubWV0aG9kcykubWFwKChtKSA9PiAobSA9PT0gJ19hbGwnID8gJyonIDogbS50b1VwcGVyQ2FzZSgpKSk7XG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiBwYXRocykge1xuICAgICAgICBjb25zdCBmdWxsID0gam9pblBhdGgocHJlZml4LCBTdHJpbmcocm91dGVQYXRoKSk7XG4gICAgICAgIGNvbnN0IGNoYWluID0gWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLmZpbHRlcigoYykgPT4gYXBwbGllcyhjLCBmdWxsKSkubWFwKChjKSA9PiBjLmxheWVyLmhhbmRsZSk7XG4gICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBgJHttZXRob2R9ICR7ZnVsbH1gO1xuICAgICAgICAgIC8vIEZpcnN0IHJlZ2lzdHJhdGlvbiB3aW5zLCBhcyBpbiBFeHByZXNzOiBhIGxhdGVyIGR1cGxpY2F0ZSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgICAgICBjb25zdCByb3V0ZUZucyA9IGxheWVyLnJvdXRlLnN0YWNrXG4gICAgICAgICAgICAuZmlsdGVyKChsKSA9PiBsLm1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8IGwubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IG1ldGhvZCB8fCBtZXRob2QgPT09ICcqJylcbiAgICAgICAgICAgIC5tYXAoKGwpID0+IGwuaGFuZGxlKTtcbiAgICAgICAgICBvdXQucHVzaCh0b0VudHJ5KG1ldGhvZCwgZnVsbCwgY29sbGVjdEdhdGVzKFsuLi5jaGFpbiwgLi4ucm91dGVGbnNdKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1JvdXRlcihsYXllci5oYW5kbGUpKSB7XG4gICAgICBjb25zdCBtb3VudFBhdGggPSBqb2luUGF0aChwcmVmaXgsIGxheWVyW0xBWUVSX1BBVEhdID8/ICcvJyk7XG4gICAgICAvLyBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgdGhpcyByb3V0ZXIgKGFuY2VzdG9ycyArIGVhcmxpZXIgc2libGluZ3MpXG4gICAgICAvLyBpcyBpbmhlcml0ZWQ7IGFwcGxpY2FiaWxpdHkgaXMgcmUtY2hlY2tlZCBhZ2FpbnN0IGVhY2ggZnVsbCByb3V0ZSBwYXRoLlxuICAgICAgd2FsayhsYXllci5oYW5kbGUuc3RhY2ssIG1vdW50UGF0aCwgWy4uLmluaGVyaXRlZCwgLi4ubG9jYWxdLCBvdXQsIHNlZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbC5wdXNoKHsgbGF5ZXIsIHByZWZpeCB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcm91dGUgdGFibGUgb2YgYW4gYXNzZW1ibGVkIEV4cHJlc3MgYXBwIChvciByb3V0ZXIpOiBvbmUgZW50cnkgcGVyXG4gKiByZWFjaGFibGUgbWV0aG9kICsgcGF0aCB3aXRoIGV2ZXJ5IGdhdGUgdGhhdCBydW5zIGJlZm9yZSBpdHMgaGFuZGxlci5cbiAqIEhFQUQgaXMgZm9sZGVkIGludG8gR0VULCBhcyBFeHByZXNzIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJvdXRlVGFibGUoYXBwOiB1bmtub3duKTogUm91dGVUYWJsZUVudHJ5W10ge1xuICBjb25zdCByb290ID0gKGFwcCBhcyB7IHJvdXRlcj86IFJvdXRlckxpa2UgfSkucm91dGVyID8/IChhcHAgYXMgUm91dGVyTGlrZSk7XG4gIGNvbnN0IG91dDogUm91dGVUYWJsZUVudHJ5W10gPSBbXTtcbiAgaWYgKCFyb290IHx8ICFBcnJheS5pc0FycmF5KHJvb3Quc3RhY2spKSByZXR1cm4gb3V0O1xuICB3YWxrKHJvb3Quc3RhY2ssICcvJywgW10sIG91dCwgbmV3IFNldCgpKTtcbiAgcmV0dXJuIG91dC5zb3J0KChhLCBiKSA9PiAoYS5wYXRoID09PSBiLnBhdGggPyBhLm1ldGhvZC5sb2NhbGVDb21wYXJlKGIubWV0aG9kKSA6IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBtZXRob2QgbXV0YXRlcyBzdGF0ZSAoZXZlcnl0aGluZyBleGNlcHQgR0VUL0hFQUQvT1BUSU9OUykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXcml0ZU1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIVsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLmluY2x1ZGVzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKTtcbn1cblxuLyoqIFN1bW1hcnkgY291bnRzIGZvciBhIHN0YXJ0dXAgbG9nIGxpbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUm91dGVUYWJsZSh0YWJsZTogcmVhZG9ubHkgUm91dGVUYWJsZUVudHJ5W10pOiB7IHJvdXRlczogbnVtYmVyOyB3cml0ZXM6IG51bWJlcjsgdW5nYXRlZDogbnVtYmVyOyB1bmF1ZGl0ZWQ6IG51bWJlcjsgaW50ZXJuYWw6IG51bWJlciB9IHtcbiAgY29uc3QgZ2F0ZWQgPSAoZTogUm91dGVUYWJsZUVudHJ5KTogYm9vbGVhbiA9PiBlLnBlcm1pc3Npb25zLmxlbmd0aCA+IDAgfHwgZS5zeXN0ZW1BZG1pbiB8fCBlLnNlcnZpY2VQcmluY2lwYWwgfHwgZS5keW5hbWljQXV0aHoubGVuZ3RoID4gMDtcbiAgY29uc3Qgd3JpdGVzID0gdGFibGUuZmlsdGVyKChlKSA9PiBpc1dyaXRlTWV0aG9kKGUubWV0aG9kKSk7XG4gIHJldHVybiB7XG4gICAgcm91dGVzOiB0YWJsZS5sZW5ndGgsXG4gICAgd3JpdGVzOiB3cml0ZXMubGVuZ3RoLFxuICAgIHVuZ2F0ZWQ6IHRhYmxlLmZpbHRlcigoZSkgPT4gIWdhdGVkKGUpKS5sZW5ndGgsXG4gICAgdW5hdWRpdGVkOiB3cml0ZXMuZmlsdGVyKChlKSA9PiBlLmF1ZGl0Lmxlbmd0aCA9PT0gMCkubGVuZ3RoLFxuICAgIGludGVybmFsOiB0YWJsZS5maWx0ZXIoKGUpID0+IGUuaW50ZXJuYWxDYWxsZXJzLmxlbmd0aCA+IDApLmxlbmd0aCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -157,4 +157,4 @@ export function verifyServicePrincipal(req) {
|
|
|
157
157
|
return false;
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS10b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOztHQUVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JILE9BQU8sRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELDhFQUE4RTtBQUM5RSw0QkFBNEI7QUFDNUIsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSxzRUFBc0U7QUFDdEUsOEVBQThFO0FBQzlFLGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCw2RUFBNkU7QUFDN0UsK0RBQStEO0FBQy9ELGtGQUFrRjtBQUNsRiw4Q0FBOEM7QUFDOUMsRUFBRTtBQUNGLHlFQUF5RTtBQUN6RSxpREFBaUQ7QUFDakQsOEVBQThFO0FBRTlFLE1BQU0saUNBQWlDLEdBQUcsR0FBRyxDQUFDO0FBRTlDOzs7Ozs7R0FNRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQ2xDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7S0FDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQztLQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFB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QUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2VydmljZS10by1zZXJ2aWNlIHRva2VucyBhbmQgc2VydmljZS1wcmluY2lwYWwgY2hlY2tzLlxuICovXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBoYXNWYWxpZElkZW50aXR5Q2xhaW1zLCBpc3N1ZXJBdWRpZW5jZU9wdGlvbnMgfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgU0VSVklDRV9TVUJKRUNUX1BSRUZJWCwgaXNTZXJ2aWNlS2lkLCBzaWduU2VydmljZUp3dCwgdmVyaWZ5U2VydmljZUp3dCB9IGZyb20gJy4uL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy5qcyc7XG5pbXBvcnQgeyB0eXBlIEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgdHlwZSBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vdHlwZXMvcGVybWlzc2lvbnMuanMnO1xuaW1wb3J0IHsgZGVjb2RlSnd0SGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvandrLmpzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VydmljZS10by1zZXJ2aWNlIHRva2Vuc1xuLy9cbi8vIEludGVyLXNlcnZpY2UgSFRUUCBjYWxscyAoYmlsbGluZyDihpIgbWVzc2FnZSwgcGxhdGZvcm0g4oaSIGNvbXBsaWFuY2UsIGV0Yy4pXG4vLyBuZWVkIHRvIHNhdGlzZnkgdGhlIHNhbWUgYHJlcXVpcmVBdXRoYCBtaWRkbGV3YXJlIGFzIHVzZXIgcmVxdWVzdHMuXG4vLyBgc2lnblNlcnZpY2VUb2tlbmAgbWludHMgYSBzaG9ydC1saXZlZCBFUzI1NiBKV1Qgc2lnbmVkIHdpdGggVEhJUyBzZXJ2aWNlJ3Ncbi8vIE9XTiBrZXkgKHNlZSBgc2VydmljZXMvc2VydmljZS1rZXlzLnRzYCksIGNhcnJ5aW5nIGBwcmluY2lwYWxUeXBlOiAnc2VydmljZSdgXG4vLyBhbmQgbmFtaW5nIHRoZSBjYWxsaW5nIHNlcnZpY2UgdmlhIGBzdWI6ICdzZXJ2aWNlOjxuYW1lPidgLiBHYXRlcyBicmFuY2ggb25cbi8vIHRoZSBjbGFpbTsgdGhlIHN1YmplY3QgbmFtZXMg4oCUIGFuZCBzaW5jZSAjMTQgdGhlIG5hbWUgaXMgY3J5cHRvZ3JhcGhpY2FsbHlcbi8vIGJvdW5kIHRvIHRoZSBzaWduaW5nIGtleSwgc28gaXQgY2FuIGFsc28gYmUgdHJ1c3RlZC5cbi8vIGByZXF1aXJlQXV0aGAgYWNjZXB0cyB0aGVzZSB0b2tlbnMgdHJhbnNwYXJlbnRseSDigJQgdGhleSBwYXNzIGBkZWNvZGVkLnN1YmBcbi8vIGFuZCBgZGVjb2RlZC5yb2xlYCBjaGVja3MsIGFuZCB0aGUgZG93bnN0cmVhbSBvcmcvcm9sZSBnYXRlc1xuLy8gKGByZXF1aXJlT3JnTWVtYmVyc2hpcGAgaW4gcGxhdGZvcm0ncyBjb250cm9sbGVyIGhlbHBlcnMsIGByZXF1aXJlU3lzdGVtQWRtaW5gKVxuLy8gcmVseSBvbiB0aGUgb3JnL3JvbGUgZW1iZWRkZWQgaW4gdGhlIHRva2VuLlxuLy9cbi8vIFRva2VucyBkZWZhdWx0IHRvIDUtbWludXRlIFRUTCDigJQgbG9uZyBlbm91Z2ggdG8gc3Vydml2ZSBhIGJhY2tlbmQgaG9wLFxuLy8gc2hvcnQgZW5vdWdoIHRoYXQgYSBsZWFrZWQgdG9rZW4gaXMgbG93LXZhbHVlLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IERFRkFVTFRfU0VSVklDRV9UT0tFTl9UVExfU0VDT05EUyA9IDMwMDtcblxuLyoqXG4gKiBEZW55bGlzdCBvZiBzZXJ2aWNlIE5BTUVTICh0aGUgYDxuYW1lPmAgaW4gYHN1Yjogc2VydmljZTo8bmFtZT5gKSB3aG9zZSB0b2tlbnNcbiAqIGByZXF1aXJlQXV0aGAgbXVzdCByZWplY3QuIFJlYWQgZnJvbSBgU0VSVklDRV9UT0tFTl9ERU5ZTElTVGAgKGNvbW1hLXNlcGFyYXRlZClcbiAqIGF0IHByb2Nlc3Mgc3RhcnQsIHNvIGFybWluZyBpdCBpcyBhIGNvbmZpZyBjaGFuZ2UgKyByb2xsb3V0IOKAlCBpdCBjdXRzIG9mZiBhXG4gKiBjb21wcm9taXNlZCBzZXJ2aWNlIFdJVEhPVVQgcm90YXRpbmcgYW55IGtleSwgYW5kIHdpdGhvdXQgaW52YWxpZGF0aW5nIGV2ZXJ5XG4gKiBvdGhlciBzZXJ2aWNlJ3MgdG9rZW5zIGFzIGNvbGxhdGVyYWwuXG4gKi9cbmNvbnN0IHNlcnZpY2VUb2tlbkRlbnlsaXN0ID0gbmV3IFNldChcbiAgKHByb2Nlc3MuZW52LlNFUlZJQ0VfVE9LRU5fREVOWUxJU1QgfHwgJycpXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pLFxuKTtcblxuLyoqXG4gKiBUaGUgY2FsbGluZyBzZXJ2aWNlJ3MgbmFtZSBmb3IgYSBTRVJWSUNFIHByaW5jaXBhbCAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2ApLFxuICogZWxzZSBgdW5kZWZpbmVkYC4gQSB1c2VyIHRva2VuIG5ldmVyIHlpZWxkcyBhIG5hbWUsIHdoYXRldmVyIGl0cyBgc3ViYCBzYXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZU5hbWVPZihjbGFpbXM6IHsgcHJpbmNpcGFsVHlwZT86IHN0cmluZzsgc3ViPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY2xhaW1zPy5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgfHwgdHlwZW9mIGNsYWltcy5zdWIgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoIWNsYWltcy5zdWIuc3RhcnRzV2l0aChTRVJWSUNFX1NVQkpFQ1RfUFJFRklYKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNsYWltcy5zdWIuc2xpY2UoU0VSVklDRV9TVUJKRUNUX1BSRUZJWC5sZW5ndGgpIHx8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGUgY2xhaW1zIGFyZSBhIHNlcnZpY2UgcHJpbmNpcGFsIHdob3NlIHNlcnZpY2UgaXMgb24gdGhlIGRlbnlsaXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZVRva2VuRGVuaWVkKGNsYWltczogeyBwcmluY2lwYWxUeXBlPzogc3RyaW5nOyBzdWI/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICBpZiAoc2VydmljZVRva2VuRGVueWxpc3Quc2l6ZSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBuYW1lID0gc2VydmljZU5hbWVPZihjbGFpbXMpO1xuICByZXR1cm4gbmFtZSAhPT0gdW5kZWZpbmVkICYmIHNlcnZpY2VUb2tlbkRlbnlsaXN0LmhhcyhuYW1lKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlVG9rZW5PcHRpb25zIHtcbiAgLyoqIENhbGxpbmcgc2VydmljZSBpZGVudGlmaWVyIChlLmcuICdiaWxsaW5nJywgJ3BsYXRmb3JtJykuIEVtYmVkZGVkIGFzIGBzdWI6IHNlcnZpY2U6PG5hbWU+YC4gKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgLyoqIEFjdGl2ZSBvcmcgY29udGV4dCBmb3IgdGhlIGNhbGwuIFVzZSB0aGUgdGFyZ2V0IHRlbmFudCdzIG9yZyBpZCwgb3IgdGhlXG4gICAqICB3ZWxsLWtub3duIGBTWVNURU1fT1JHX0lEYCAoYW4gT2JqZWN0SWQpIGZvciBzeXN0ZW0td2lkZSBvcHMg4oCUIE5PVCB0aGUgc3RyaW5nXG4gICAqICAnc3lzdGVtJywgd2hpY2ggaWQtYmFzZWQgc3lzdGVtLW9yZyBjaGVja3Mgd29uJ3QgcmVjb2duaXplLiAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIEFjdGl2ZSBvcmcgbmFtZS4gRGVmYXVsdHMgdG8gb3JnSWQuICovXG4gIG9yZ05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUVEwgaW4gc2Vjb25kcyAoZGVmYXVsdCAzMDApLiAqL1xuICB0dGxTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogUm9sZSB0aGUgdG9rZW4gY2FycmllcyAocmVxdWlyZWQg4oCUIG5vIGltcGxpY2l0IGRlZmF1bHQpLiAqKlBhc3MgdGhlIExPV0VTVFxuICAgKiByb2xlIHRoZSBjYWxsIGFjdHVhbGx5IG5lZWRzKiogKGAnbWVtYmVyJ2AgZm9yIHJlYWQgLyBkYXRhLXBsYW5lIGNhbGxzKSBzbyBhXG4gICAqIGxlYWtlZCBzZXJ2aWNlIHRva2VuIGNhbid0IHBlcmZvcm0gYWRtaW4gYWN0aW9ucyBpbiB0aGUgdGFyZ2V0IG9yZy5cbiAgICogYGlzQWRtaW5gIGlzIGRlcml2ZWQgZnJvbSB0aGlzIChhZG1pbnxvd25lciDihpIgdHJ1ZSkuXG4gICAqL1xuICByb2xlOiAnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInO1xuICAvKipcbiAgICogT3B0aW9uYWwgZmluZS1ncmFpbmVkIHBlcm1pc3Npb24gY2xhaW0uIFByZWZlciB0aGlzICsgYHJvbGU6ICdtZW1iZXInYCBvdmVyIGFcbiAgICogaGlnaCByb2xlIHdoZW4gYSBjYWxsIG5lZWRzIE9ORSBzcGVjaWZpYyBjYXBhYmlsaXR5IChlLmcuIGBbJ3BsdWdpbnM6d3JpdGUnXWBcbiAgICogdG8gcHVzaCBhIHBsdWdpbiBpbWFnZSkg4oCUIHRoZSB0b2tlbiB0aGVuIHNhdGlzZmllcyB0aGF0IHBlcm1pc3Npb24gZ2F0ZVxuICAgKiBXSVRIT1VUIGNhcnJ5aW5nIGBpc0FkbWluYCwgc28gYSBsZWFrZWQgdG9rZW4gY2FuJ3QgcGVyZm9ybSBhZG1pbiBhY3Rpb25zLlxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gIC8qKlxuICAgKiBTaWduZWQgY2xhaW0gKGBhdWRpdENyb3NzT3JnOiB0cnVlYCkgbGV0dGluZyBhbiBgL2F1ZGl0L2V2ZW50c2AgZGVsaXZlcnkgbmFtZVxuICAgKiBhbiBgYWZmZWN0ZWRPcmdJZGAgb3V0c2lkZSB0aGUgdG9rZW4ncyBvcmcuIFNldCBPTkxZIGJ5IHRoZSByZW1vdGUtYXVkaXRcbiAgICogY2xpZW50LCBhbmQgb25seSB3aGVuIHRoZSBldmVudCdzIHZlcmlmaWVkIGluYm91bmQgcHJpbmNpcGFsIHdhcyBhXG4gICAqIHN1cGVyYWRtaW4gb3IgYSBzeXN0ZW0tb3JnIG1lbWJlciDigJQgbmV2ZXIgZnJvbSBjYWxsLXNpdGUgaW5wdXQuIE1lYW5zXG4gICAqIG5vdGhpbmcgdG8gYW55IG90aGVyIHJvdXRlLlxuICAgKi9cbiAgYXVkaXRDcm9zc09yZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWludCBhIEpXVCBpZGVudGlmeWluZyB0aGUgY2FsbGluZyBzZXJ2aWNlLiBVc2VkIGZvciBpbnRlci1zZXJ2aWNlIEhUVFAgY2FsbHMuXG4gKiBUaGUgdG9rZW4gc2F0aXNmaWVzIGByZXF1aXJlQXV0aGAgYW5kICh3aGVuIG9yZ0lkIGlzIHByZXNlbnQpIGByZXF1aXJlT3JnYW5pemF0aW9uYC5cbiAqIFNjb3BlIGl0IHdpdGggYG9wdHMucm9sZWAg4oCUIGxlYXN0IHByaXZpbGVnZSBrZWVwcyBhIGxlYWtlZCB0b2tlbiBsb3ctdmFsdWUuXG4gKlxuICogYG9wdHMuc2VydmljZU5hbWVgIG11c3QgYmUgVEhJUyBwcm9jZXNzJ3Mgb3duIGlkZW50aXR5IChgU0VSVklDRV9OQU1FYCk6IGFcbiAqIHNlcnZpY2UgaG9sZHMgb25seSBpdHMgb3duIHNpZ25pbmcga2V5LCBzbyBtaW50aW5nIGEgdG9rZW4gdGhhdCBuYW1lcyBhbm90aGVyXG4gKiBzZXJ2aWNlIHRocm93cyByYXRoZXIgdGhhbiBwcm9kdWNpbmcgb25lIGV2ZXJ5IHBlZXIgd291bGQgcmVqZWN0LiBUaGF0IGlzIHRoZVxuICogb25lIGJlaGF2aW91ciBjaGFuZ2UgIzE0IGZvcmNlcyBvbiBjYWxsZXJzIOKAlCBzZWUgYHNlcnZpY2VzL3NlcnZpY2Uta2V5cy50c2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU2VydmljZVRva2VuKG9wdHM6IFNlcnZpY2VUb2tlbk9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCByb2xlID0gb3B0cy5yb2xlO1xuICBjb25zdCBwYXlsb2FkOiBPbWl0PEp3dFBheWxvYWQsICdzdWInPiA9IHtcbiAgICB1c2VybmFtZTogYCR7b3B0cy5zZXJ2aWNlTmFtZX0tc2VydmljZWAsXG4gICAgZW1haWw6IGAke29wdHMuc2VydmljZU5hbWV9QGludGVybmFsYCxcbiAgICBwcmluY2lwYWxUeXBlOiAnc2VydmljZScsXG4gICAgdG9rZW5fdXNlOiAnYWNjZXNzJyxcbiAgICByb2xlLFxuICAgIGlzQWRtaW46IHJvbGUgPT09ICdvd25lcicgfHwgcm9sZSA9PT0gJ2FkbWluJyxcbiAgICB0eXBlOiAnYWNjZXNzJyxcbiAgICBvcmdhbml6YXRpb25JZDogb3B0cy5vcmdJZCxcbiAgICBvcmdhbml6YXRpb25OYW1lOiBvcHRzLm9yZ05hbWUgPz8gb3B0cy5vcmdJZCxcbiAgICAvLyBVbmlxdWUgdG9rZW4gaWQgb24gZXZlcnkgbWludC4gQ29tYmluZWQgd2l0aCB0aGUgc2hvcnQgKDMwMHMgZGVmYXVsdCkgVFRMXG4gICAgLy8gdGhpcyBnaXZlcyBlYWNoIHNlcnZpY2UgdG9rZW4gYSBkaXN0aW5jdCBpZGVudGl0eSDigJQgdGhlIGNvcnJlbGF0aW9uIGhhbmRsZVxuICAgIC8vIGZvciB0cmFjaW5nIHdoaWNoIG1pbnQgcGVyZm9ybWVkIGEgY3Jvc3Mtc2VydmljZSBhY3Rpb24sIGFuZCB0aGUgYnVpbGRpbmdcbiAgICAvLyBibG9jayBmb3IgcmVwbGF5IGRldGVjdGlvbiAoYSB2ZXJpZmllciBjYW4gdHJhY2sgc2VlbiBqdGlzKS4gSXQgZG9lcyBOT1RcbiAgICAvLyBieSBpdHNlbGYgcHJldmVudCByZXBsYXkgd2l0aGluIHRoZSBUVEwgd2luZG93LlxuICAgIGp0aTogcmFuZG9tVVVJRCgpLFxuICAgIC8vIExlYXN0LXByaXZpbGVnZSBjYXBhYmlsaXR5IGNsYWltIChvcHRpb25hbCkg4oCUIGxldHMgYSBtZW1iZXItcm9sZSB0b2tlblxuICAgIC8vIHNhdGlzZnkgYSBzcGVjaWZpYyBwZXJtaXNzaW9uIGdhdGUgd2l0aG91dCBjYXJyeWluZyBpc0FkbWluLlxuICAgIC4uLihvcHRzLnBlcm1pc3Npb25zICYmIG9wdHMucGVybWlzc2lvbnMubGVuZ3RoID4gMCA/IHsgcGVybWlzc2lvbnM6IG9wdHMucGVybWlzc2lvbnMgfSA6IHt9KSxcbiAgICAuLi4ob3B0cy5hdWRpdENyb3NzT3JnID8geyBhdWRpdENyb3NzT3JnOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gIH07XG4gIC8vIGBzdWJgLCBgaWF0YC9gZXhwYCBhbmQgdGhlIG9wdGlvbmFsIGlzc3Vlci9hdWRpZW5jZSB0aGF0IHJlcXVpcmVBdXRoXG4gIC8vIHZlcmlmaWVzIGFyZSBzdGFtcGVkIGJ5IHRoZSBzaWduZXIsIHNvIHRoZXJlIGlzIGV4YWN0bHkgb25lIHBsYWNlIHRoYXRcbiAgLy8gZGVjaWRlcyB3aGF0IGEgc2VydmljZSB0b2tlbiBzYXlzLlxuICByZXR1cm4gc2lnblNlcnZpY2VKd3QocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwge1xuICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lLFxuICAgIGV4cGlyZXNJblNlY29uZHM6IG9wdHMudHRsU2Vjb25kcyA/PyBERUZBVUxUX1NFUlZJQ0VfVE9LRU5fVFRMX1NFQ09ORFMsXG4gICAgLi4uaXNzdWVyQXVkaWVuY2VPcHRpb25zKCksXG4gIH0pO1xufVxuXG4vKiogQ29udmVuaWVuY2U6IHJldHVybnMgYSBgQmVhcmVyIDx0b2tlbj5gIGhlYWRlciB2YWx1ZSBmb3IgZmV0Y2gvYXhpb3MgY2FsbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZUF1dGhIZWFkZXIob3B0czogU2VydmljZVRva2VuT3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBgQmVhcmVyICR7c2lnblNlcnZpY2VUb2tlbihvcHRzKX1gO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGByZXEudXNlcmAgaXMgYSBzZXJ2aWNlIHByaW5jaXBhbCAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2AsIG1pbnRlZCBieSBgc2lnblNlcnZpY2VUb2tlbmApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZVByaW5jaXBhbChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlcS51c2VyPy5wcmluY2lwYWxUeXBlID09PSAnc2VydmljZSc7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGByZXEudXNlcmAgaXMgYW4gT1JHIFNFUlZJQ0UgQUNDT1VOVCAoYHByaW5jaXBhbFR5cGU6XG4gKiAnc2VydmljZV9hY2NvdW50J2ApIOKAlCBhIG5vbi1odW1hbiBwcmluY2lwYWwgb3duZWQgYnkgb25lIG9yZywgYXV0aGVudGljYXRpbmdcbiAqIHdpdGggYSBgcGJfc2Ff4oCmYCBrZXkgZXhjaGFuZ2VkIGF0IHBsYXRmb3JtLlxuICpcbiAqIEEgc2VydmljZSBhY2NvdW50IGlzIE5PVCBhbiBpbnRlcm5hbCBzZXJ2aWNlIHByaW5jaXBhbDogaXQgaG9sZHMgb3JnIFJvbGVzIGFuZFxuICogaXMgc3ViamVjdCB0byBldmVyeSBwZXJtaXNzaW9uIGdhdGUgYSBtZW1iZXIgaXMuIFdoYXQgaXQgY2FuIG5ldmVyIGRvIGlzXG4gKiBzYXRpc2Z5IGEgSFVNQU4tcHJlc2VuY2UgcmVxdWlyZW1lbnQg4oCUIHN0ZXAtdXAgKGFuZCBhbnkgbGF0ZXIgYXNzdXJhbmNlIGdhdGUpXG4gKiByZWZ1c2VzIGl0IG91dHJpZ2h0LCBiZWNhdXNlIHRoZXJlIGlzIG5vIHBlcnNvbiBiZWhpbmQgaXQgdG8gcmUtdmVyaWZ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlQWNjb3VudFByaW5jaXBhbChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlcS51c2VyPy5wcmluY2lwYWxUeXBlID09PSAnc2VydmljZV9hY2NvdW50Jztcbn1cblxuLyoqIFRydWUgd2hlbiBgcmVxLnVzZXJgIGlzIHRoZSBuYW1lZCBpbnRlcm5hbCBzZXJ2aWNlIChlLmcuIGAnYmlsbGluZydgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VQcmluY2lwYWxOYW1lZChyZXE6IFJlcXVlc3QsIHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNlcnZpY2VOYW1lT2YocmVxLnVzZXIpID09PSBzZXJ2aWNlTmFtZTtcbn1cblxuLyoqXG4gKiBQUkUtYXV0aCBjaGVjazogY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZ5IHRoZSByZXF1ZXN0IGNhcnJpZXMgYSB2YWxpZCwgc2lnbmVkXG4gKiBTRVJWSUNFIHRva2VuIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCkuIFVubGlrZSB7QGxpbmsgaXNTZXJ2aWNlUHJpbmNpcGFsfVxuICogKHdoaWNoIHJlYWRzIHRoZSBhbHJlYWR5LXBvcHVsYXRlZCBgcmVxLnVzZXJgKSwgdGhpcyB2ZXJpZmllcyB0aGUgYmVhcmVyIHRva2VuXG4gKiBpdHNlbGYsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBCRUZPUkUgYHJlcXVpcmVBdXRoYCBydW5zIOKAlCBlLmcuIHRoZSBnbG9iYWwgcmF0ZVxuICogbGltaXRlcidzIGBza2lwYCwgd2hpY2ggbXVzdCBub3QgdHJ1c3QgdGhlIHNwb29mYWJsZSBgeC1pbnRlcm5hbC1zZXJ2aWNlYFxuICogaGVhZGVyLiBNaXJyb3JzIGByZXF1aXJlQXV0aGAncyBTRVJWSUNFIGNoYWluIGV4YWN0bHkgKHRoZSBzaWduZXIncyBvd24ga2V5LFxuICogcmVzb2x2ZWQgYnkgYGtpZGAsIHdpdGggdGhlIGBzdWJgL3NpZ25lciBhZ3JlZW1lbnQgY2hlY2sgYW5kIHRoZSBvcHRpb25hbFxuICogaXNzdWVyL2F1ZGllbmNlKSBhbmQgcmV0dXJucyBgZmFsc2VgIG9uIGFueSBtaXNzaW5nL2ludmFsaWQvbm9uLXNlcnZpY2UgdG9rZW5cbiAqIOKAlCBpbmNsdWRpbmcgYW55IHBsYXRmb3JtLXNpZ25lZCBVU0VSIHRva2VuLCB3aG9zZSBga2lkYCBpcyBub3QgaW4gdGhlIHNlcnZpY2VcbiAqIGJ1bmRsZSBhdCBhbGwuIFN0YXlzIFNZTkNIUk9OT1VTLCB3aGljaCBpcyB3aHkgdGhlIHBlci1zZXJ2aWNlIHB1YmxpYyBrZXlzIGFyZVxuICogZGlzdHJpYnV0ZWQgYXMgYSBtb3VudGVkIGJ1bmRsZSByYXRoZXIgdGhhbiBmZXRjaGVkIG92ZXIgSFRUUC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwocmVxOiBSZXF1ZXN0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnRzID0gcmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKTtcbiAgaWYgKCFwYXJ0cyB8fCBwYXJ0cy5sZW5ndGggIT09IDIgfHwgcGFydHNbMF0gIT09ICdCZWFyZXInKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgaGVhZGVyID0gZGVjb2RlSnd0SGVhZGVyKHBhcnRzWzFdKTtcbiAgICBpZiAoIWhlYWRlcj8ua2lkIHx8ICFpc1NlcnZpY2VLaWQoaGVhZGVyLmtpZCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkZWNvZGVkID0gdmVyaWZ5U2VydmljZUp3dDxKd3RQYXlsb2FkPihwYXJ0c1sxXSwgeyBraWQ6IGhlYWRlci5raWQsIC4uLmlzc3VlckF1ZGllbmNlT3B0aW9ucygpIH0pO1xuICAgIGlmIChkZWNvZGVkLnR5cGUgIT09ICdhY2Nlc3MnIHx8IGRlY29kZWQucHJpbmNpcGFsVHlwZSAhPT0gJ3NlcnZpY2UnIHx8ICFoYXNWYWxpZElkZW50aXR5Q2xhaW1zKGRlY29kZWQpKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gQSBkZW55bGlzdGVkIChraWxsZWQpIHNlcnZpY2UgbXVzdCBOT1QgYmUgdHJlYXRlZCBhcyBhIHRydXN0ZWQgcHJpbmNpcGFsIOKAlFxuICAgIC8vIG90aGVyd2lzZSBpdCBrZWVwcyB0aGUgcmF0ZS1saW1pdGVyIGV4ZW1wdGlvbiBldmVuIHRob3VnaCByZXF1aXJlQXV0aCByZWplY3RzXG4gICAgLy8gaXQgb24gcmVhbCByb3V0ZXMuIEZvbGQgdGhlIGtpbGwtc3dpdGNoIGludG8gdGhlIHByZS1hdXRoIGNoZWNrIHRvby5cbiAgICByZXR1cm4gIWlzU2VydmljZVRva2VuRGVuaWVkKGRlY29kZWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS10b2tlbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7O0dBRUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckgsT0FBTyxFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsOEVBQThFO0FBQzlFLDRCQUE0QjtBQUM1QixFQUFFO0FBQ0YsNEVBQTRFO0FBQzVFLHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELDZFQUE2RTtBQUM3RSwrREFBK0Q7QUFDL0Qsa0ZBQWtGO0FBQ2xGLDhDQUE4QztBQUM5QyxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLGlEQUFpRDtBQUNqRCw4RUFBOEU7QUFFOUUsTUFBTSxpQ0FBaUMsR0FBRyxHQUFHLENBQUM7QUFFOUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FDbEMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztLQUN2QyxLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDcEIsTUFB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QUM7SUFDeEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zIGFuZCBzZXJ2aWNlLXByaW5jaXBhbCBjaGVja3MuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGhhc1ZhbGlkSWRlbnRpdHlDbGFpbXMsIGlzc3VlckF1ZGllbmNlT3B0aW9ucyB9IGZyb20gJy4vand0LXZlcmlmeS5qcyc7XG5pbXBvcnQgeyBTRVJWSUNFX1NVQkpFQ1RfUFJFRklYLCBpc1NlcnZpY2VLaWQsIHNpZ25TZXJ2aWNlSnd0LCB2ZXJpZnlTZXJ2aWNlSnd0IH0gZnJvbSAnLi4vc2VydmljZXMvc2VydmljZS1rZXlzLmpzJztcbmltcG9ydCB7IHR5cGUgSnd0UGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyB0eXBlIFBlcm1pc3Npb24gfSBmcm9tICcuLi90eXBlcy9wZXJtaXNzaW9ucy5qcyc7XG5pbXBvcnQgeyBkZWNvZGVKd3RIZWFkZXIgfSBmcm9tICcuLi91dGlscy9qd2suanMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zXG4vL1xuLy8gSW50ZXItc2VydmljZSBIVFRQIGNhbGxzIChiaWxsaW5nIOKGkiBtZXNzYWdlLCBwbGF0Zm9ybSDihpIgY29tcGxpYW5jZSwgZXRjLilcbi8vIG5lZWQgdG8gc2F0aXNmeSB0aGUgc2FtZSBgcmVxdWlyZUF1dGhgIG1pZGRsZXdhcmUgYXMgdXNlciByZXF1ZXN0cy5cbi8vIGBzaWduU2VydmljZVRva2VuYCBtaW50cyBhIHNob3J0LWxpdmVkIEVTMjU2IEpXVCBzaWduZWQgd2l0aCBUSElTIHNlcnZpY2Unc1xuLy8gT1dOIGtleSAoc2VlIGBzZXJ2aWNlcy9zZXJ2aWNlLWtleXMudHNgKSwgY2FycnlpbmcgYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJ2Bcbi8vIGFuZCBuYW1pbmcgdGhlIGNhbGxpbmcgc2VydmljZSB2aWEgYHN1YjogJ3NlcnZpY2U6PG5hbWU+J2AuIEdhdGVzIGJyYW5jaCBvblxuLy8gdGhlIGNsYWltOyB0aGUgc3ViamVjdCBuYW1lcyDigJQgYW5kIHNpbmNlICMxNCB0aGUgbmFtZSBpcyBjcnlwdG9ncmFwaGljYWxseVxuLy8gYm91bmQgdG8gdGhlIHNpZ25pbmcga2V5LCBzbyBpdCBjYW4gYWxzbyBiZSB0cnVzdGVkLlxuLy8gYHJlcXVpcmVBdXRoYCBhY2NlcHRzIHRoZXNlIHRva2VucyB0cmFuc3BhcmVudGx5IOKAlCB0aGV5IHBhc3MgYGRlY29kZWQuc3ViYFxuLy8gYW5kIGBkZWNvZGVkLnJvbGVgIGNoZWNrcywgYW5kIHRoZSBkb3duc3RyZWFtIG9yZy9yb2xlIGdhdGVzXG4vLyAoYHJlcXVpcmVPcmdNZW1iZXJzaGlwYCBpbiBwbGF0Zm9ybSdzIGNvbnRyb2xsZXIgaGVscGVycywgYHJlcXVpcmVTeXN0ZW1BZG1pbmApXG4vLyByZWx5IG9uIHRoZSBvcmcvcm9sZSBlbWJlZGRlZCBpbiB0aGUgdG9rZW4uXG4vL1xuLy8gVG9rZW5zIGRlZmF1bHQgdG8gNS1taW51dGUgVFRMIOKAlCBsb25nIGVub3VnaCB0byBzdXJ2aXZlIGEgYmFja2VuZCBob3AsXG4vLyBzaG9ydCBlbm91Z2ggdGhhdCBhIGxlYWtlZCB0b2tlbiBpcyBsb3ctdmFsdWUuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgREVGQVVMVF9TRVJWSUNFX1RPS0VOX1RUTF9TRUNPTkRTID0gMzAwO1xuXG4vKipcbiAqIERlbnlsaXN0IG9mIHNlcnZpY2UgTkFNRVMgKHRoZSBgPG5hbWU+YCBpbiBgc3ViOiBzZXJ2aWNlOjxuYW1lPmApIHdob3NlIHRva2Vuc1xuICogYHJlcXVpcmVBdXRoYCBtdXN0IHJlamVjdC4gUmVhZCBmcm9tIGBTRVJWSUNFX1RPS0VOX0RFTllMSVNUYCAoY29tbWEtc2VwYXJhdGVkKVxuICogYXQgcHJvY2VzcyBzdGFydCwgc28gYXJtaW5nIGl0IGlzIGEgY29uZmlnIGNoYW5nZSArIHJvbGxvdXQg4oCUIGl0IGN1dHMgb2ZmIGFcbiAqIGNvbXByb21pc2VkIHNlcnZpY2UgV0lUSE9VVCByb3RhdGluZyBhbnkga2V5LCBhbmQgd2l0aG91dCBpbnZhbGlkYXRpbmcgZXZlcnlcbiAqIG90aGVyIHNlcnZpY2UncyB0b2tlbnMgYXMgY29sbGF0ZXJhbC5cbiAqL1xuY29uc3Qgc2VydmljZVRva2VuRGVueWxpc3QgPSBuZXcgU2V0KFxuICAocHJvY2Vzcy5lbnYuU0VSVklDRV9UT0tFTl9ERU5ZTElTVCB8fCAnJylcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbiksXG4pO1xuXG4vKipcbiAqIFRoZSBjYWxsaW5nIHNlcnZpY2UncyBuYW1lIGZvciBhIFNFUlZJQ0UgcHJpbmNpcGFsIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCksXG4gKiBlbHNlIGB1bmRlZmluZWRgLiBBIHVzZXIgdG9rZW4gbmV2ZXIgeWllbGRzIGEgbmFtZSwgd2hhdGV2ZXIgaXRzIGBzdWJgIHNheXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlTmFtZU9mKGNsYWltczogeyBwcmluY2lwYWxUeXBlPzogc3RyaW5nOyBzdWI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjbGFpbXM/LnByaW5jaXBhbFR5cGUgIT09ICdzZXJ2aWNlJyB8fCB0eXBlb2YgY2xhaW1zLnN1YiAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghY2xhaW1zLnN1Yi5zdGFydHNXaXRoKFNFUlZJQ0VfU1VCSkVDVF9QUkVGSVgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY2xhaW1zLnN1Yi5zbGljZShTRVJWSUNFX1NVQkpFQ1RfUFJFRklYLmxlbmd0aCkgfHwgdW5kZWZpbmVkO1xufVxuXG4vKiogVHJ1ZSB3aGVuIHRoZSBjbGFpbXMgYXJlIGEgc2VydmljZSBwcmluY2lwYWwgd2hvc2Ugc2VydmljZSBpcyBvbiB0aGUgZGVueWxpc3QuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlVG9rZW5EZW5pZWQoY2xhaW1zOiB7IHByaW5jaXBhbFR5cGU/OiBzdHJpbmc7IHN1Yj86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gIGlmIChzZXJ2aWNlVG9rZW5EZW55bGlzdC5zaXplID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG5hbWUgPSBzZXJ2aWNlTmFtZU9mKGNsYWltcyk7XG4gIHJldHVybiBuYW1lICE9PSB1bmRlZmluZWQgJiYgc2VydmljZVRva2VuRGVueWxpc3QuaGFzKG5hbWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VUb2tlbk9wdGlvbnMge1xuICAvKiogQ2FsbGluZyBzZXJ2aWNlIGlkZW50aWZpZXIgKGUuZy4gJ2JpbGxpbmcnLCAncGxhdGZvcm0nKS4gRW1iZWRkZWQgYXMgYHN1Yjogc2VydmljZTo8bmFtZT5gLiAqL1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZyBjb250ZXh0IGZvciB0aGUgY2FsbC4gVXNlIHRoZSB0YXJnZXQgdGVuYW50J3Mgb3JnIGlkLCBvciB0aGVcbiAgICogIHdlbGwta25vd24gYFNZU1RFTV9PUkdfSURgIChhbiBPYmplY3RJZCkgZm9yIHN5c3RlbS13aWRlIG9wcyDigJQgTk9UIHRoZSBzdHJpbmdcbiAgICogICdzeXN0ZW0nLCB3aGljaCBpZC1iYXNlZCBzeXN0ZW0tb3JnIGNoZWNrcyB3b24ndCByZWNvZ25pemUuICovXG4gIG9yZ0lkPzogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZyBuYW1lLiBEZWZhdWx0cyB0byBvcmdJZC4gKi9cbiAgb3JnTmFtZT86IHN0cmluZztcbiAgLyoqIFRUTCBpbiBzZWNvbmRzIChkZWZhdWx0IDMwMCkuICovXG4gIHR0bFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSb2xlIHRoZSB0b2tlbiBjYXJyaWVzIChyZXF1aXJlZCDigJQgbm8gaW1wbGljaXQgZGVmYXVsdCkuICoqUGFzcyB0aGUgTE9XRVNUXG4gICAqIHJvbGUgdGhlIGNhbGwgYWN0dWFsbHkgbmVlZHMqKiAoYCdtZW1iZXInYCBmb3IgcmVhZCAvIGRhdGEtcGxhbmUgY2FsbHMpIHNvIGFcbiAgICogbGVha2VkIHNlcnZpY2UgdG9rZW4gY2FuJ3QgcGVyZm9ybSBhZG1pbiBhY3Rpb25zIGluIHRoZSB0YXJnZXQgb3JnLlxuICAgKiBgaXNBZG1pbmAgaXMgZGVyaXZlZCBmcm9tIHRoaXMgKGFkbWlufG93bmVyIOKGkiB0cnVlKS5cbiAgICovXG4gIHJvbGU6ICdvd25lcicgfCAnYWRtaW4nIHwgJ21lbWJlcic7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaW5lLWdyYWluZWQgcGVybWlzc2lvbiBjbGFpbS4gUHJlZmVyIHRoaXMgKyBgcm9sZTogJ21lbWJlcidgIG92ZXIgYVxuICAgKiBoaWdoIHJvbGUgd2hlbiBhIGNhbGwgbmVlZHMgT05FIHNwZWNpZmljIGNhcGFiaWxpdHkgKGUuZy4gYFsncGx1Z2luczp3cml0ZSddYFxuICAgKiB0byBwdXNoIGEgcGx1Z2luIGltYWdlKSDigJQgdGhlIHRva2VuIHRoZW4gc2F0aXNmaWVzIHRoYXQgcGVybWlzc2lvbiBnYXRlXG4gICAqIFdJVEhPVVQgY2FycnlpbmcgYGlzQWRtaW5gLCBzbyBhIGxlYWtlZCB0b2tlbiBjYW4ndCBwZXJmb3JtIGFkbWluIGFjdGlvbnMuXG4gICAqL1xuICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25bXTtcbiAgLyoqXG4gICAqIFNpZ25lZCBjbGFpbSAoYGF1ZGl0Q3Jvc3NPcmc6IHRydWVgKSBsZXR0aW5nIGFuIGAvYXVkaXQvZXZlbnRzYCBkZWxpdmVyeSBuYW1lXG4gICAqIGFuIGBhZmZlY3RlZE9yZ0lkYCBvdXRzaWRlIHRoZSB0b2tlbidzIG9yZy4gU2V0IE9OTFkgYnkgdGhlIHJlbW90ZS1hdWRpdFxuICAgKiBjbGllbnQsIGFuZCBvbmx5IHdoZW4gdGhlIGV2ZW50J3MgdmVyaWZpZWQgaW5ib3VuZCBwcmluY2lwYWwgd2FzIGFcbiAgICogc3VwZXJhZG1pbiBvciBhIHN5c3RlbS1vcmcgbWVtYmVyIOKAlCBuZXZlciBmcm9tIGNhbGwtc2l0ZSBpbnB1dC4gTWVhbnNcbiAgICogbm90aGluZyB0byBhbnkgb3RoZXIgcm91dGUuXG4gICAqL1xuICBhdWRpdENyb3NzT3JnPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNaW50IGEgSldUIGlkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIHNlcnZpY2UuIFVzZWQgZm9yIGludGVyLXNlcnZpY2UgSFRUUCBjYWxscy5cbiAqIFRoZSB0b2tlbiBzYXRpc2ZpZXMgYHJlcXVpcmVBdXRoYCBhbmQgKHdoZW4gb3JnSWQgaXMgcHJlc2VudCkgYHJlcXVpcmVPcmdhbml6YXRpb25gLlxuICogU2NvcGUgaXQgd2l0aCBgb3B0cy5yb2xlYCDigJQgbGVhc3QgcHJpdmlsZWdlIGtlZXBzIGEgbGVha2VkIHRva2VuIGxvdy12YWx1ZS5cbiAqXG4gKiBgb3B0cy5zZXJ2aWNlTmFtZWAgbXVzdCBiZSBUSElTIHByb2Nlc3MncyBvd24gaWRlbnRpdHkgKGBTRVJWSUNFX05BTUVgKTogYVxuICogc2VydmljZSBob2xkcyBvbmx5IGl0cyBvd24gc2lnbmluZyBrZXksIHNvIG1pbnRpbmcgYSB0b2tlbiB0aGF0IG5hbWVzIGFub3RoZXJcbiAqIHNlcnZpY2UgdGhyb3dzIHJhdGhlciB0aGFuIHByb2R1Y2luZyBvbmUgZXZlcnkgcGVlciB3b3VsZCByZWplY3QuIFRoYXQgaXMgdGhlXG4gKiBvbmUgYmVoYXZpb3VyIGNoYW5nZSAjMTQgZm9yY2VzIG9uIGNhbGxlcnMg4oCUIHNlZSBgc2VydmljZXMvc2VydmljZS1rZXlzLnRzYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25TZXJ2aWNlVG9rZW4ob3B0czogU2VydmljZVRva2VuT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHJvbGUgPSBvcHRzLnJvbGU7XG4gIGNvbnN0IHBheWxvYWQ6IE9taXQ8Snd0UGF5bG9hZCwgJ3N1Yic+ID0ge1xuICAgIHVzZXJuYW1lOiBgJHtvcHRzLnNlcnZpY2VOYW1lfS1zZXJ2aWNlYCxcbiAgICBlbWFpbDogYCR7b3B0cy5zZXJ2aWNlTmFtZX1AaW50ZXJuYWxgLFxuICAgIHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlJyxcbiAgICB0b2tlbl91c2U6ICdhY2Nlc3MnLFxuICAgIHJvbGUsXG4gICAgaXNBZG1pbjogcm9sZSA9PT0gJ293bmVyJyB8fCByb2xlID09PSAnYWRtaW4nLFxuICAgIHR5cGU6ICdhY2Nlc3MnLFxuICAgIG9yZ2FuaXphdGlvbklkOiBvcHRzLm9yZ0lkLFxuICAgIG9yZ2FuaXphdGlvbk5hbWU6IG9wdHMub3JnTmFtZSA/PyBvcHRzLm9yZ0lkLFxuICAgIC8vIFVuaXF1ZSB0b2tlbiBpZCBvbiBldmVyeSBtaW50LiBDb21iaW5lZCB3aXRoIHRoZSBzaG9ydCAoMzAwcyBkZWZhdWx0KSBUVExcbiAgICAvLyB0aGlzIGdpdmVzIGVhY2ggc2VydmljZSB0b2tlbiBhIGRpc3RpbmN0IGlkZW50aXR5IOKAlCB0aGUgY29ycmVsYXRpb24gaGFuZGxlXG4gICAgLy8gZm9yIHRyYWNpbmcgd2hpY2ggbWludCBwZXJmb3JtZWQgYSBjcm9zcy1zZXJ2aWNlIGFjdGlvbiwgYW5kIHRoZSBidWlsZGluZ1xuICAgIC8vIGJsb2NrIGZvciByZXBsYXkgZGV0ZWN0aW9uIChhIHZlcmlmaWVyIGNhbiB0cmFjayBzZWVuIGp0aXMpLiBJdCBkb2VzIE5PVFxuICAgIC8vIGJ5IGl0c2VsZiBwcmV2ZW50IHJlcGxheSB3aXRoaW4gdGhlIFRUTCB3aW5kb3cuXG4gICAganRpOiByYW5kb21VVUlEKCksXG4gICAgLy8gTGVhc3QtcHJpdmlsZWdlIGNhcGFiaWxpdHkgY2xhaW0gKG9wdGlvbmFsKSDigJQgbGV0cyBhIG1lbWJlci1yb2xlIHRva2VuXG4gICAgLy8gc2F0aXNmeSBhIHNwZWNpZmljIHBlcm1pc3Npb24gZ2F0ZSB3aXRob3V0IGNhcnJ5aW5nIGlzQWRtaW4uXG4gICAgLi4uKG9wdHMucGVybWlzc2lvbnMgJiYgb3B0cy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwID8geyBwZXJtaXNzaW9uczogb3B0cy5wZXJtaXNzaW9ucyB9IDoge30pLFxuICAgIC4uLihvcHRzLmF1ZGl0Q3Jvc3NPcmcgPyB7IGF1ZGl0Q3Jvc3NPcmc6IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYHN1YmAsIGBpYXRgL2BleHBgIGFuZCB0aGUgb3B0aW9uYWwgaXNzdWVyL2F1ZGllbmNlIHRoYXQgcmVxdWlyZUF1dGhcbiAgLy8gdmVyaWZpZXMgYXJlIHN0YW1wZWQgYnkgdGhlIHNpZ25lciwgc28gdGhlcmUgaXMgZXhhY3RseSBvbmUgcGxhY2UgdGhhdFxuICAvLyBkZWNpZGVzIHdoYXQgYSBzZXJ2aWNlIHRva2VuIHNheXMuXG4gIHJldHVybiBzaWduU2VydmljZUp3dChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB7XG4gICAgc2VydmljZU5hbWU6IG9wdHMuc2VydmljZU5hbWUsXG4gICAgZXhwaXJlc0luU2Vjb25kczogb3B0cy50dGxTZWNvbmRzID8/IERFRkFVTFRfU0VSVklDRV9UT0tFTl9UVExfU0VDT05EUyxcbiAgICAuLi5pc3N1ZXJBdWRpZW5jZU9wdGlvbnMoKSxcbiAgfSk7XG59XG5cbi8qKiBDb252ZW5pZW5jZTogcmV0dXJucyBhIGBCZWFyZXIgPHRva2VuPmAgaGVhZGVyIHZhbHVlIGZvciBmZXRjaC9heGlvcyBjYWxscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlQXV0aEhlYWRlcihvcHRzOiBTZXJ2aWNlVG9rZW5PcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBCZWFyZXIgJHtzaWduU2VydmljZVRva2VuKG9wdHMpfWA7XG59XG5cbi8qKiBUcnVlIHdoZW4gYHJlcS51c2VyYCBpcyBhIHNlcnZpY2UgcHJpbmNpcGFsIChgcHJpbmNpcGFsVHlwZTogJ3NlcnZpY2UnYCwgbWludGVkIGJ5IGBzaWduU2VydmljZVRva2VuYCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlUHJpbmNpcGFsKHJlcTogUmVxdWVzdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVxLnVzZXI/LnByaW5jaXBhbFR5cGUgPT09ICdzZXJ2aWNlJztcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYHJlcS51c2VyYCBpcyBhbiBPUkcgU0VSVklDRSBBQ0NPVU5UIChgcHJpbmNpcGFsVHlwZTpcbiAqICdzZXJ2aWNlX2FjY291bnQnYCkg4oCUIGEgbm9uLWh1bWFuIHByaW5jaXBhbCBvd25lZCBieSBvbmUgb3JnLCBhdXRoZW50aWNhdGluZ1xuICogd2l0aCBhIGBwYl9zYV/igKZgIGtleSBleGNoYW5nZWQgYXQgcGxhdGZvcm0uXG4gKlxuICogQSBzZXJ2aWNlIGFjY291bnQgaXMgTk9UIGFuIGludGVybmFsIHNlcnZpY2UgcHJpbmNpcGFsOiBpdCBob2xkcyBvcmcgUm9sZXMgYW5kXG4gKiBpcyBzdWJqZWN0IHRvIGV2ZXJ5IHBlcm1pc3Npb24gZ2F0ZSBhIG1lbWJlciBpcy4gV2hhdCBpdCBjYW4gbmV2ZXIgZG8gaXNcbiAqIHNhdGlzZnkgYSBIVU1BTi1wcmVzZW5jZSByZXF1aXJlbWVudCDigJQgc3RlcC11cCAoYW5kIGFueSBsYXRlciBhc3N1cmFuY2UgZ2F0ZSlcbiAqIHJlZnVzZXMgaXQgb3V0cmlnaHQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gcGVyc29uIGJlaGluZCBpdCB0byByZS12ZXJpZnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VBY2NvdW50UHJpbmNpcGFsKHJlcTogUmVxdWVzdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVxLnVzZXI/LnByaW5jaXBhbFR5cGUgPT09ICdzZXJ2aWNlX2FjY291bnQnO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGByZXEudXNlcmAgaXMgdGhlIG5hbWVkIGludGVybmFsIHNlcnZpY2UgKGUuZy4gYCdiaWxsaW5nJ2ApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZVByaW5jaXBhbE5hbWVkKHJlcTogUmVxdWVzdCwgc2VydmljZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2VydmljZU5hbWVPZihyZXEudXNlcikgPT09IHNlcnZpY2VOYW1lO1xufVxuXG4vKipcbiAqIFBSRS1hdXRoIGNoZWNrOiBjcnlwdG9ncmFwaGljYWxseSB2ZXJpZnkgdGhlIHJlcXVlc3QgY2FycmllcyBhIHZhbGlkLCBzaWduZWRcbiAqIFNFUlZJQ0UgdG9rZW4gKGBwcmluY2lwYWxUeXBlOiAnc2VydmljZSdgKS4gVW5saWtlIHtAbGluayBpc1NlcnZpY2VQcmluY2lwYWx9XG4gKiAod2hpY2ggcmVhZHMgdGhlIGFscmVhZHktcG9wdWxhdGVkIGByZXEudXNlcmApLCB0aGlzIHZlcmlmaWVzIHRoZSBiZWFyZXIgdG9rZW5cbiAqIGl0c2VsZiwgc28gaXQgaXMgc2FmZSB0byBjYWxsIEJFRk9SRSBgcmVxdWlyZUF1dGhgIHJ1bnMg4oCUIGUuZy4gdGhlIGdsb2JhbCByYXRlXG4gKiBsaW1pdGVyJ3MgYHNraXBgLCB3aGljaCBtdXN0IG5vdCB0cnVzdCB0aGUgc3Bvb2ZhYmxlIGB4LWludGVybmFsLXNlcnZpY2VgXG4gKiBoZWFkZXIuIE1pcnJvcnMgYHJlcXVpcmVBdXRoYCdzIFNFUlZJQ0UgY2hhaW4gZXhhY3RseSAodGhlIHNpZ25lcidzIG93biBrZXksXG4gKiByZXNvbHZlZCBieSBga2lkYCwgd2l0aCB0aGUgYHN1YmAvc2lnbmVyIGFncmVlbWVudCBjaGVjayBhbmQgdGhlIG9wdGlvbmFsXG4gKiBpc3N1ZXIvYXVkaWVuY2UpIGFuZCByZXR1cm5zIGBmYWxzZWAgb24gYW55IG1pc3NpbmcvaW52YWxpZC9ub24tc2VydmljZSB0b2tlblxuICog4oCUIGluY2x1ZGluZyBhbnkgcGxhdGZvcm0tc2lnbmVkIFVTRVIgdG9rZW4sIHdob3NlIGBraWRgIGlzIG5vdCBpbiB0aGUgc2VydmljZVxuICogYnVuZGxlIGF0IGFsbC4gU3RheXMgU1lOQ0hST05PVVMsIHdoaWNoIGlzIHdoeSB0aGUgcGVyLXNlcnZpY2UgcHVibGljIGtleXMgYXJlXG4gKiBkaXN0cmlidXRlZCBhcyBhIG1vdW50ZWQgYnVuZGxlIHJhdGhlciB0aGFuIGZldGNoZWQgb3ZlciBIVFRQLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2VydmljZVByaW5jaXBhbChyZXE6IFJlcXVlc3QpOiBib29sZWFuIHtcbiAgY29uc3QgcGFydHMgPSByZXEuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpO1xuICBpZiAoIXBhcnRzIHx8IHBhcnRzLmxlbmd0aCAhPT0gMiB8fCBwYXJ0c1swXSAhPT0gJ0JlYXJlcicpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXIgPSBkZWNvZGVKd3RIZWFkZXIocGFydHNbMV0pO1xuICAgIGlmICghaGVhZGVyPy5raWQgfHwgIWlzU2VydmljZUtpZChoZWFkZXIua2lkKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRlY29kZWQgPSB2ZXJpZnlTZXJ2aWNlSnd0PEp3dFBheWxvYWQ+KHBhcnRzWzFdLCB7IGtpZDogaGVhZGVyLmtpZCwgLi4uaXNzdWVyQXVkaWVuY2VPcHRpb25zKCkgfSk7XG4gICAgaWYgKGRlY29kZWQudHlwZSAhPT0gJ2FjY2VzcycgfHwgZGVjb2RlZC5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgfHwgIWhhc1ZhbGlkSWRlbnRpdHlDbGFpbXMoZGVjb2RlZCkpIHJldHVybiBmYWxzZTtcbiAgICAvLyBBIGRlbnlsaXN0ZWQgKGtpbGxlZCkgc2VydmljZSBtdXN0IE5PVCBiZSB0cmVhdGVkIGFzIGEgdHJ1c3RlZCBwcmluY2lwYWwg4oCUXG4gICAgLy8gb3RoZXJ3aXNlIGl0IGtlZXBzIHRoZSByYXRlLWxpbWl0ZXIgZXhlbXB0aW9uIGV2ZW4gdGhvdWdoIHJlcXVpcmVBdXRoIHJlamVjdHNcbiAgICAvLyBpdCBvbiByZWFsIHJvdXRlcy4gRm9sZCB0aGUga2lsbC1zd2l0Y2ggaW50byB0aGUgcHJlLWF1dGggY2hlY2sgdG9vLlxuICAgIHJldHVybiAhaXNTZXJ2aWNlVG9rZW5EZW5pZWQoZGVjb2RlZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
@@ -197,4 +197,4 @@ async function _requireStepUp(options, req, res, next) {
|
|
|
197
197
|
}
|
|
198
198
|
next();
|
|
199
199
|
}
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC11cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3N0ZXAtdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQXFCdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQXdCLE1BQU0sMEJBQTBCLENBQUM7QUFDNUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDO0FBU2pDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQTRCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBcUJwRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFxQixLQUFLLENBQUMsQ0FBQztJQUUvRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvRCxN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O1lBQy9FLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsNkJBQTZCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN0RSxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksRUFBRSxDQUFDO0FBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIGByZXF1aXJlU3RlcFVwYCDigJQgYSBzaGFyZWQgc3RlcC11cCAocmVjZW50LXBhc3N3b3JkLXJldmVyaWZ5KSBnYXRlIGZvciB0aGVcbiAqIHN0YXRlbGVzcyBhcGkgc2VydmljZXMsIG1pcnJvcmluZyB0aGUgcGxhdGZvcm0gbWlkZGxld2FyZSBvZiB0aGUgc2FtZSBuYW1lLlxuICpcbiAqIEZsb3c6IHRoZSBVSSBoaXRzIGBQT1NUIC9hcGkvYXV0aC9zdGVwLXVwYCAocGxhdGZvcm0pIHRvIHJlLXZlcmlmeSB0aGUgdXNlcjtcbiAqIHBsYXRmb3JtIG1pbnRzIGEgc2hvcnQtbGl2ZWQgKDYwcykgYHN0ZXAtdXBgIEpXVCB3aXRoIHRoZSBTQU1FIEVTMjU2IHNpZ25pbmdcbiAqIGtleSBpdCBtaW50cyBhY2Nlc3MgdG9rZW5zIHdpdGgsIHNvIHRoZXNlIHNlcnZpY2VzIHZlcmlmeSBpdCB0aHJvdWdoIHRoZSBzYW1lXG4gKiBKV0tTLiBUaGUgVUlcbiAqIHJlcGxheXMgaXQgYXMgdGhlIGBYLVN0ZXAtVXAtVG9rZW5gIGhlYWRlciBvbiB0aGUgZGVzdHJ1Y3RpdmUvc2Vuc2l0aXZlIGNhbGw7XG4gKiB0aGlzIG1pZGRsZXdhcmUgdmVyaWZpZXMgaXQsIGJpbmRzIGl0IHRvIHRoZSBjYWxsZXIgKGBzdWJgIG1hdGNoKSwgYW5kXG4gKiBjb25zdW1lcyBpdHMgYGp0aWAgb25jZSAoUmVkaXMtYmFja2VkIGNyb3NzLWluc3RhbmNlIHdoZW4gY29uZmlndXJlZCwgZWxzZSBhXG4gKiBib3VuZGVkIHByb2Nlc3MtbG9jYWwgc2V0KSBzbyBhIHJlcGxheSBpbnNpZGUgdGhlIFRUTCBpcyByZWplY3RlZC5cbiAqXG4gKiBXSFkgaGVyZTogcmVzdG9yZSBlbmRwb2ludHMgb24gdGhlIGFwaSBzZXJ2aWNlcyAocGlwZWxpbmUvcGx1Z2luLy4uLikgYXJlXG4gKiBzdGVwLXVwLWdhdGVkLCBzbyB0aGUgdmVyaWZ5ICsgc2luZ2xlLXVzZSBqdGkgbGl2ZSBpbiBhcGktY29yZSB3aGVyZSBhbnlcbiAqIHNlcnZpY2UgY2FuIHJlcXVpcmUgdGhlbS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHZlcmlmeVVzZXJKd3QgfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgcmVjb3JkQXV0aHpEZW5pYWwgfSBmcm9tICcuL3Blcm1pc3Npb24tZ2F0ZXMuanMnO1xuaW1wb3J0IHsgdGFnUm91dGVHYXRlIH0gZnJvbSAnLi9yb3V0ZS10YWJsZS5qcyc7XG5pbXBvcnQgeyBpc1NlcnZpY2VBY2NvdW50UHJpbmNpcGFsLCBpc1NlcnZpY2VQcmluY2lwYWwgfSBmcm9tICcuL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50LCBjcmVhdGVSZWRpc1JlYWR5R2F0ZSwgdHlwZSBSZWFkeUF3YXJlUmVkaXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHsgZ2V0SGVhZGVyU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvaGVhZGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3N0ZXAtdXAnKTtcbmNvbnN0IEhFQURFUiA9ICd4LXN0ZXAtdXAtdG9rZW4nO1xuXG4vKipcbiAqIEhvdyBhIHN0ZXAtdXAgdG9rZW4gd2FzIGVhcm5lZC4gTWlycm9ycyBwbGF0Zm9ybSdzIGBTdGVwVXBNZXRob2RgOyBrZXB0IGhlcmVcbiAqIGFzIGl0cyBvd24gdW5pb24gc28gYSB2ZXJpZmllciBjYW4gbmFtZSB0aGUgZmFjdG9ycyBpdCBhY2NlcHRzIHdpdGhvdXRcbiAqIGltcG9ydGluZyBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IHR5cGUgU3RlcFVwTWV0aG9kID0gJ3Bhc3N3b3JkJyB8ICd3ZWJhdXRobicgfCAndG90cCcgfCAncmVhdXRoJztcblxuLyoqXG4gKiBUaGUgZmFjdG9ycyB0aGF0IGNvdW50IGFzIGEgU0VDT05EIEZBQ1RPUiwgZm9yIHJvdXRlcyB0aGF0IG1heSBvbmx5IGJlXG4gKiB1bmxvY2tlZCBieSBvbmUgKCM4OiBpbXBlcnNvbmF0aW9uLCBLTVMsIElkUCBzZXR0aW5ncywgcGxhdGZvcm0gYWRtaW4pLlxuICpcbiAqIEEgcGFzc3dvcmQgb3IgYSBwcm92aWRlciByZS1hdXRoIHByb3ZlcyB0aGUgc2FtZSBzaW5nbGUgZmFjdG9yIHRoZSBzZXNzaW9uIHdhc1xuICogYWxyZWFkeSBvcGVuZWQgd2l0aCwgc28gb24gdGhvc2Ugcm91dGVzIHRoZXkgYXJlIG5vdCBlbm91Z2g6IHRoZSBwb2ludCBpcyB0aGF0XG4gKiBzb21lb25lIGhvbGRpbmcgb25seSBhIHN0b2xlbiBzZXNzaW9uIOKAlCBvciBvbmx5IGEgc3RvbGVuIHBhc3N3b3JkIOKAlCBjYW5ub3RcbiAqIHByb2NlZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVFJPTkdfU1RFUF9VUF9NRVRIT0RTOiByZWFkb25seSBTdGVwVXBNZXRob2RbXSA9IFsnd2ViYXV0aG4nLCAndG90cCddO1xuXG4vKiogUGF5bG9hZCBvZiBhIHBsYXRmb3JtLWlzc3VlZCBzdGVwLXVwIHRva2VuIChzZWUgcGxhdGZvcm0gaXNzdWVTdGVwVXBUb2tlbikuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBVcFRva2VuUGF5bG9hZCB7XG4gIHR5cGU6ICdzdGVwLXVwJztcbiAgc3ViOiBzdHJpbmc7XG4gIGp0aTogc3RyaW5nO1xuICAvKiogV2hpY2ggZmFjdG9yIGVhcm5lZCBpdC4gQWJzZW50IG9ubHkgb24gYSB0b2tlbiBtaW50ZWQgYmVmb3JlIHRoZSBjbGFpbVxuICAgKiAgZXhpc3RlZCwgd2hpY2ggYSBtZXRob2QtcmVzdHJpY3RlZCBnYXRlIHRyZWF0cyBhcyBcIm5vdCBwcm92ZW5cIi4gKi9cbiAgbWV0aG9kPzogU3RlcFVwTWV0aG9kO1xuICBpYXQ6IG51bWJlcjtcbiAgZXhwOiBudW1iZXI7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgcmVxdWlyZVN0ZXBVcH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVTdGVwVXBPcHRpb25zIHtcbiAgLyoqIFJlc3RyaWN0IHdoaWNoIGZhY3RvcnMgbWF5IGVhcm4gdGhlIHN0ZXAtdXAgKGUuZy4ge0BsaW5rIFNUUk9OR19TVEVQX1VQX01FVEhPRFN9KS5cbiAgICogIE9taXR0ZWQgbWVhbnMgYW55IGZhY3RvciB0aGUgcGxhdGZvcm0gd2lsbCBpc3N1ZSBhIHRva2VuIGZvci4gKi9cbiAgbWV0aG9kcz86IHJlYWRvbmx5IFN0ZXBVcE1ldGhvZFtdO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhIHN0ZXAtdXAgdG9rZW46IGEgdmFsaWQgRVMyNTYgc2lnbmF0dXJlIGZyb20gb25lIG9mIHBsYXRmb3JtJ3NcbiAqIHB1Ymxpc2hlZCBzaWduaW5nIGtleXMsIGlzc3VlciBhbmQgYXVkaWVuY2Ugd2hlbiBjb25maWd1cmVkLCBBTkQgdGhlXG4gKiBgdHlwZTogJ3N0ZXAtdXAnYCArIGBqdGlgIGNsYWltcyDigJQgYSBwbGFpbiBhY2Nlc3MgdG9rZW4gaXMgc2lnbmVkIGJ5IHRoZSBzYW1lXG4gKiBrZXkgYW5kIGNhcnJpZXMgdGhlIHNhbWUgYHN1YmAsIHNvIHdpdGhvdXQgYXNzZXJ0aW5nIHRoZSBzdGVwLXVwIHNoYXBlIGl0XG4gKiB3b3VsZCBieXBhc3MgdGhlIGdhdGUuIFRocm93cyBvbiBhbnkgZmFpbHVyZSAoYW4gdW5mZXRjaGFibGUga2V5IHNldCBpbmNsdWRlZDpcbiAqIGFuIHVudmVyaWZpYWJsZSB0b2tlbiBpcyBub3QgYSBzdGVwLXVwKS4gRG9lcyBOT1QgYmluZCB0byBhIGNhbGxlciDigJRcbiAqIGByZXF1aXJlU3RlcFVwYCBkb2VzIHRoZSBgc3ViYCBtYXRjaCBhbmQgc2luZ2xlLXVzZSBjb25zdW1lLlxuICpcbiAqIERlbGVnYXRlcyB0byBgcmVxdWlyZUF1dGhgJ3Mgb3duIHByaW1pdGl2ZSAoYHZlcmlmeVVzZXJKd3RgKSByYXRoZXIgdGhhblxuICogcmUtaW1wbGVtZW50aW5nIGl0LiBUaGUgaGFuZC1yb2xsZWQgY29weSB0aGlzIHJlcGxhY2VkIGRyb3BwZWQgVFdPIG9mIGl0c1xuICogZ3VhcmRzOiBpdCBuZXZlciBwaW5uZWQgaXNzdWVyL2F1ZGllbmNlLCBhbmQgaXRzIHByZXZpb3VzLXNlY3JldCByZXRyeSBoYWQgbm9cbiAqIGV4cGlyeS9ub3QtYmVmb3JlIGNhcnZlLW91dCwgc28gYW4gRVhQSVJFRCB0b2tlbiBzdXJmYWNlZCBhcyBhIHNpZ25hdHVyZSBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVN0ZXBVcFRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFN0ZXBVcFRva2VuUGF5bG9hZD4ge1xuICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdmVyaWZ5VXNlckp3dDxTdGVwVXBUb2tlblBheWxvYWQ+KHRva2VuKTtcblxuICBpZiAocGF5bG9hZC50eXBlICE9PSAnc3RlcC11cCcgfHwgIXBheWxvYWQuanRpIHx8ICFwYXlsb2FkLnN1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcignSU5WQUxJRF9TVEVQX1VQX1RPS0VOJyk7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8vIC0tIFNpbmdsZS11c2UganRpIHN0b3JlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWRpcyBTRVQgTlggRVggd2hlbiBSZWRpcyBpcyBjb25maWd1cmVkIChjcm9zcy1pbnN0YW5jZSBzaW5nbGUtdXNlKTsgZWxzZSBhXG4vLyBib3VuZGVkIHByb2Nlc3MtbG9jYWwgbWFwIHdpdGggVFRMIHN3ZWVwIChwZXItcHJvY2VzcykuIEEgc3RlcC11cCB0b2tlbiBpc1xuLy8gNjBzLWxpdmVkLiBXaGVuIFJlZGlzIElTIGNvbmZpZ3VyZWQgaXQncyB0aGUgYXV0aG9yaXRhdGl2ZSBzdG9yZTogYSBSZWRpc1xuLy8gZXJyb3IgRkFJTFMgQ0xPU0VEICh0aHJvd3Mg4oaSIFNURVBfVVBfSU5WQUxJRCwgdXNlciByZS12ZXJpZmllcykgcmF0aGVyIHRoYW5cbi8vIGRlZ3JhZGluZyB0byB0aGUgcGVyLWluc3RhbmNlIG1lbSBndWFyZCwgd2hpY2ggd291bGQgYWNjZXB0IGEgY3Jvc3MtaW5zdGFuY2Vcbi8vIHJlcGxheSBkdXJpbmcgdGhlIG91dGFnZS4gVGhlIG1lbSBndWFyZCBpcyB1c2VkIE9OTFkgd2hlbiBSZWRpcyBpcyBhYnNlbnQuXG5cbnR5cGUgSnRpUmVkaXMgPSBSZWFkeUF3YXJlUmVkaXMgJiB7IHNldDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPiB9O1xubGV0IF9yZWRpczogSnRpUmVkaXMgfCBudWxsIHwgdW5kZWZpbmVkO1xubGV0IF9yZWRpc1JlYWR5OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQ7XG4vKipcbiAqIFRoZSBqdGkgY2xpZW50LCBidWlsdCBsYXppbHkuIFRoZSBlbnYgY2xpZW50IGhhcyBubyBvZmZsaW5lIHF1ZXVlLCBzbyBhIFNFVCBvblxuICogYSBjb25uZWN0aW9uIHRoYXQgaXNuJ3QgdXAgeWV0IGlzIHJlamVjdGVkIOKAlCB0aGUgRklSU1Qgc3RlcC11cCBvbiBldmVyeSBwb2RcbiAqIHdvdWxkIGZhaWwuIFdhaXQgKGJvdW5kZWQsIG5ldmVyIHJlamVjdGluZykgZm9yIHJlYWRpbmVzcyBiZWZvcmVcbiAqIGhhbmRpbmcgaXQgb3V0OyBhIGdlbnVpbmVseSBkb3duIFJlZGlzIHN0aWxsIGZhaWxzIGNsb3NlZCBvbiB0aGUgU0VUIGJlbG93LlxuICovXG5hc3luYyBmdW5jdGlvbiByZWRpcygpOiBQcm9taXNlPEp0aVJlZGlzIHwgbnVsbD4ge1xuICBpZiAoX3JlZGlzID09PSB1bmRlZmluZWQpIHtcbiAgICBfcmVkaXMgPSBjcmVhdGVFbnZSZWRpc0NsaWVudDxKdGlSZWRpcz4oJ3N0ZXAtdXAtanRpJyk7XG4gICAgX3JlZGlzUmVhZHkgPSBfcmVkaXMgPyBjcmVhdGVSZWRpc1JlYWR5R2F0ZShfcmVkaXMpIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmIChfcmVkaXNSZWFkeSkgYXdhaXQgX3JlZGlzUmVhZHkoKTtcbiAgcmV0dXJuIF9yZWRpcztcbn1cblxuY29uc3QgbWVtSnRpID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8ganRpIC0+IGV4cGlyeSBlcG9jaCBtc1xuY29uc3QgbWVtU3dlZXAgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGZvciAoY29uc3QgW2p0aSwgZXhwXSBvZiBtZW1KdGkpIGlmIChleHAgPD0gbm93KSBtZW1KdGkuZGVsZXRlKGp0aSk7XG59LCAzMF8wMDApO1xubWVtU3dlZXAudW5yZWY/LigpO1xuXG4vKipcbiAqIEhhcmQgY2VpbGluZyBvbiB0aGUgcHJvY2Vzcy1sb2NhbCBqdGkgc2V0LlxuICpcbiAqIFRoZSAzMHMgc3dlZXAgYWxvbmUgZG9lcyBOT1QgYm91bmQgaXQ6IGVudHJpZXMgb25seSBsZWF2ZSBvbmNlIHRoZWlyIHRva2VuJ3NcbiAqIFRUTCBoYXMgcGFzc2VkLCBzbyBhIGJ1cnN0IG9mIHN0ZXAtdXAgdHJhZmZpYyAob3IgYSBmbG9vZCBvZiBkaXN0aW5jdCBmb3JnZWRcbiAqIGp0aXMgb24gYSBSZWRpcy1sZXNzIGRlcGxveW1lbnQpIGdyb3dzIHRoZSBtYXAgZmFzdGVyIHRoYW4gdGhlIHN3ZWVwIGRyYWluc1xuICogaXQuIFRoaXMgaXMgYSByZXBsYXkgZ3VhcmQsIHNvIHNoZWRkaW5nIHRoZSBPTERFU1QgZW50cmllcyBpcyB0aGUgc2FmZVxuICogZGlyZWN0aW9uOiB0aGUgd29yc3QgY2FzZSBpcyB0aGF0IGEgbG9uZy1leHBpcmVkIGp0aSBjb3VsZCBiZSByZXBsYXllZCwgYW5kXG4gKiBleHBpcnkgaXMgZW5mb3JjZWQgaW5kZXBlbmRlbnRseSBieSB0aGUgdG9rZW4ncyBvd24gYGV4cGAuXG4gKi9cbmNvbnN0IE1FTV9KVElfTUFYID0gMTBfMDAwO1xuXG4vKiogRHJvcCB0aGUgc29vbmVzdC10by1leHBpcmUgZW50cmllcyB1bnRpbCB0aGUgbWFwIGlzIHVuZGVyIHRoZSBjZWlsaW5nLiAqL1xuZnVuY3Rpb24gZXZpY3RPbGRlc3RKdGkoKTogdm9pZCB7XG4gIGlmIChtZW1KdGkuc2l6ZSA8IE1FTV9KVElfTUFYKSByZXR1cm47XG4gIGNvbnN0IGJ5RXhwaXJ5ID0gWy4uLm1lbUp0aS5lbnRyaWVzKCldLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgY29uc3QgZXhjZXNzID0gbWVtSnRpLnNpemUgLSBNRU1fSlRJX01BWCArIDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXhjZXNzOyBpICs9IDEpIG1lbUp0aS5kZWxldGUoYnlFeHBpcnlbaV1bMF0pO1xufVxuXG4vKipcbiAqIENvbnN1bWUgYSBzdGVwLXVwIGBqdGlgIGV4YWN0bHkgb25jZS4gUmV0dXJucyB0cnVlIGlmIHRoaXMgY2FsbCBjbGFpbWVkIGl0XG4gKiAoZmlyc3QgdXNlKSwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgY29uc3VtZWQgKHJlcGxheSkuIGBleHBFcG9jaFNlY29uZHNgIGlzXG4gKiB0aGUgdG9rZW4ncyBgZXhwYCwgc28gdGhlIG1hcmtlciBhdXRvLWV4cGlyZXMgd2l0aCB0aGUgdG9rZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25zdW1lU3RlcFVwSnRpKGp0aTogc3RyaW5nLCBleHBFcG9jaFNlY29uZHM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB0dGxTZWNvbmRzID0gTWF0aC5tYXgoMSwgZXhwRXBvY2hTZWNvbmRzIC0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkpO1xuICBjb25zdCBjbGllbnQgPSBhd2FpdCByZWRpcygpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgLy8gUmVkaXMgY29uZmlndXJlZCDih5IgYXV0aG9yaXRhdGl2ZSBjcm9zcy1pbnN0YW5jZSBzdG9yZS4gU0VUIE5YIEVYIOKGkiAnT0snXG4gICAgLy8gd2hlbiBuZXdseSBzZXQsIG51bGwgd2hlbiBhbHJlYWR5IGNvbnN1bWVkLiBBIHRocm93biBSZWRpcyBlcnJvciBpcyBOT1RcbiAgICAvLyBjYXVnaHQgaGVyZTogaXQgcHJvcGFnYXRlcyBzbyBgcmVxdWlyZVN0ZXBVcGAgZmFpbHMgY2xvc2VkIChTVEVQX1VQX0lOVkFMSUQpXG4gICAgLy8gaW5zdGVhZCBvZiBzaWxlbnRseSBkZWdyYWRpbmcgdG8gdGhlIHBlci1pbnN0YW5jZSBtZW0gZ3VhcmQuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnNldChgc3RlcHVwOmp0aToke2p0aX1gLCAnMScsICdFWCcsIHR0bFNlY29uZHMsICdOWCcpO1xuICAgIHJldHVybiByZXMgPT09ICdPSyc7XG4gIH1cbiAgLy8gTm8gUmVkaXMg4oeSIHNpbmdsZS1pbnN0YW5jZSBkZXBsb3ltZW50OyB0aGUgcHJvY2Vzcy1sb2NhbCBtYXAgSVMgdGhlIHN0b3JlLlxuICBpZiAobWVtSnRpLmhhcyhqdGkpKSByZXR1cm4gZmFsc2U7XG4gIGV2aWN0T2xkZXN0SnRpKCk7XG4gIG1lbUp0aS5zZXQoanRpLCBEYXRlLm5vdygpICsgdHRsU2Vjb25kcyAqIDEwMDApO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmU6IHJlcXVpcmUgYSB2YWxpZCwgY2FsbGVyLWJvdW5kLCBzaW5nbGUtdXNlIHN0ZXAtdXAgdG9rZW4gaW5cbiAqIHRoZSBgWC1TdGVwLVVwLVRva2VuYCBoZWFkZXIuIE11c3QgcnVuIEFGVEVSIGByZXF1aXJlQXV0aGAgKG5lZWRzIGByZXEudXNlcmApLlxuICpcbiAqIFVzZSBkaXJlY3RseSAoYHJvdXRlci5wb3N0KCcveCcsIHJlcXVpcmVBdXRoLCByZXF1aXJlU3RlcFVwLCBoKWApIGZvciB0aGVcbiAqIG9yZGluYXJ5IGFueS1mYWN0b3IgZ2F0ZSwgb3IgY2FsbCBpdCB3aXRoIGB7IG1ldGhvZHMgfWAgdG8gZGVtYW5kIHRoYXQgdGhlXG4gKiBjb25maXJtYXRpb24gd2FzIGVhcm5lZCBieSBhIHNwZWNpZmljIGZhY3RvciDigJQgYHJlcXVpcmVTdGVwVXAoeyBtZXRob2RzOlxuICogU1RST05HX1NURVBfVVBfTUVUSE9EUyB9KWAgb24gdGhlIHJvdXRlcyB3aGVyZSBhIHBhc3N3b3JkIHJlLXByb21wdCBpcyBub3QgYVxuICogbWVhbmluZ2Z1bCBzZWNvbmQgcHJvb2YuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlU3RlcFVwKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlU3RlcFVwKG9wdGlvbnM6IFJlcXVpcmVTdGVwVXBPcHRpb25zKTogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTdGVwVXAoXG4gIHJlcU9yT3B0aW9uczogUmVxdWVzdCB8IFJlcXVpcmVTdGVwVXBPcHRpb25zLFxuICByZXM/OiBSZXNwb25zZSxcbiAgbmV4dD86IE5leHRGdW5jdGlvbixcbik6IFByb21pc2U8dm9pZD4gfCAoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gIC8vIFRoZSBkaXJlY3QgZm9ybSBSRVRVUk5TIHRoZSBwcm9taXNlIChFeHByZXNzIGlnbm9yZXMgaXQ7IGEgdGVzdCBhd2FpdHMgaXQpLFxuICAvLyBzbyBjb21wb3NpbmcgdGhlIGdhdGUgYXMgYHJvdXRlci5wb3N0KCcveCcsIHJlcXVpcmVTdGVwVXAsIGgpYCBiZWhhdmVzXG4gIC8vIGV4YWN0bHkgYXMgaXQgZGlkIGJlZm9yZSB0aGUgb3B0aW9ucyBmb3JtIGV4aXN0ZWQuXG4gIGlmIChyZXMgJiYgbmV4dCAmJiAnaGVhZGVycycgaW4gcmVxT3JPcHRpb25zKSB7XG4gICAgcmV0dXJuIF9yZXF1aXJlU3RlcFVwKHt9LCByZXFPck9wdGlvbnMgYXMgUmVxdWVzdCwgcmVzLCBuZXh0KTtcbiAgfVxuICBjb25zdCBvcHRpb25zID0gcmVxT3JPcHRpb25zIGFzIFJlcXVpcmVTdGVwVXBPcHRpb25zO1xuICByZXR1cm4gdGFnUm91dGVHYXRlKFxuICAgIChyZXFJbm5lcjogUmVxdWVzdCwgcmVzSW5uZXI6IFJlc3BvbnNlLCBuZXh0SW5uZXI6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgICAgdm9pZCBfcmVxdWlyZVN0ZXBVcChvcHRpb25zLCByZXFJbm5lciwgcmVzSW5uZXIsIG5leHRJbm5lcik7XG4gICAgfSxcbiAgICB7IGtpbmQ6ICdzdGVwVXAnLCAuLi4ob3B0aW9ucy5tZXRob2RzID8geyBtZXRob2RzOiBbLi4ub3B0aW9ucy5tZXRob2RzXSB9IDoge30pIH0sXG4gICk7XG59XG50YWdSb3V0ZUdhdGUocmVxdWlyZVN0ZXBVcCwgeyBraW5kOiAnc3RlcFVwJyB9KTtcblxuYXN5bmMgZnVuY3Rpb24gX3JlcXVpcmVTdGVwVXAob3B0aW9uczogUmVxdWlyZVN0ZXBVcE9wdGlvbnMsIHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFZlcmlmaWVkIGludGVybmFsIHNlcnZpY2UgcHJpbmNpcGFscyBhcmUgRVhFTVBUOiBzdGVwLXVwIGlzIGEgcmUtdmVyaWZ5LXRoZS1cbiAgLy8gSFVNQU4gZ2F0ZSAodGhleSByZXBsYXkgYSBwYXNzd29yZC1yZXZlcmlmeSB0b2tlbiksIHdoaWNoIGEgc2VydmljZSB0b2tlblxuICAvLyBzdHJ1Y3R1cmFsbHkgY2Fubm90IHByb2R1Y2UuIFNlcnZpY2VzIGFscmVhZHkgYnlwYXNzIGByZXF1aXJlUGVybWlzc2lvbmAgb25cbiAgLy8gdGhlIHNhbWUgdHJ1c3QgYmFzaXMgKGEgc2lnbmVkIHNlcnZpY2UgSldUKSwgYW5kIGludGVybmFsIGNhbGxlcnMgb2YgYVxuICAvLyBzdGVwLXVwLWdhdGVkIHJvdXRlIOKAlCBlLmcuIHRoZSBwbGF0Zm9ybSBvcmctY2FzY2FkZSdzIGBERUxFVEUgL3F1b3Rhcy86b3JnSWRgXG4gIC8vIG9yIHRoZSBiaWxsaW5n4oaScXVvdGEgZW50aXRsZW1lbnQgc3luYyDigJQgd291bGQgb3RoZXJ3aXNlIGJlIGhhcmQtYmxvY2tlZC5cbiAgLy8gU2FmZTogYSBzZXJ2aWNlIHRva2VuIGNhbiBvbmx5IGJlIG1pbnRlZCB3aXRoIGEgU0VSVklDRSdzIG93biBFUzI1NiBrZXksXG4gIC8vIHdoaWNoIG5vIGV4dGVybmFsIGNsaWVudCBob2xkcywgc28gdGhpcyBjYW4ndCBiZSBzcG9vZmVkIHRvIHNraXBcbiAgLy8gc3RlcC11cC5cbiAgaWYgKGlzU2VydmljZVByaW5jaXBhbChyZXEpKSB7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEFuIE9SRyBTRVJWSUNFIEFDQ09VTlQgaXMgdGhlIG9wcG9zaXRlIGNhc2U6IGl0IGlzIHN1YmplY3QgdG8gZXZlcnkgZ2F0ZSBhXG4gIC8vIG1lbWJlciBpcywgYW5kIHRoZXJlIGlzIG5vIHBlcnNvbiBiZWhpbmQgaXQgdG8gcmUtdmVyaWZ5IOKAlCBzbyBpdCBjYW4gTkVWRVJcbiAgLy8gcGFzcyBzdGVwLXVwLiBSZWZ1c2UgZXhwbGljaXRseSAocmF0aGVyIHRoYW4gbGV0dGluZyBpdCBmYWxsIHRocm91Z2ggdG8gdGhlXG4gIC8vIGBzdWJgLWJvdW5kIHRva2VuIGNoZWNrLCB3aGljaCB3b3VsZCBmYWlsIHdpdGggYSBjb25mdXNpbmcgU1RFUF9VUF9NSVNNQVRDSClcbiAgLy8gc28gXCJhIG1hY2hpbmUgY3JlZGVudGlhbCBuZXZlciBzYXRpc2ZpZXMgYW4gYXNzdXJhbmNlIHJlcXVpcmVtZW50XCIgaXMgYVxuICAvLyBwcm9wZXJ0eSBvZiB0aGlzIGdhdGUsIG5vdCBhIHNpZGUgZWZmZWN0IG9mIGhvdyBzdGVwLXVwIHRva2VucyBhcmUgbWludGVkLlxuICBpZiAoaXNTZXJ2aWNlQWNjb3VudFByaW5jaXBhbChyZXEpKSB7XG4gICAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnc3RlcC11cCAoU1RFUF9VUF9OT1RfQVZBSUxBQkxFOiBzZXJ2aWNlIGFjY291bnQpJyk7XG4gICAgc2VuZEVycm9yKHJlcywgNDAzLCAnQSBzZXJ2aWNlIGFjY291bnQgY2Fubm90IHBlcmZvcm0gdGhpcyBhY3Rpb24g4oCUIGl0IHJlcXVpcmVzIGEgcGVyc29uIHRvIHJlLXZlcmlmeScsICdTVEVQX1VQX05PVF9BVkFJTEFCTEUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjYWxsZXJTdWIgPSAocmVxIGFzIFJlcXVlc3QgJiB7IHVzZXI/OiB7IHN1Yj86IHN0cmluZyB9IH0pLnVzZXI/LnN1YjtcbiAgaWYgKCFjYWxsZXJTdWIpIHtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDEsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsICdVTkFVVEhPUklaRUQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0b2tlbiA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1tIRUFERVJdKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdmVyaWZpY2F0aW9uIHJlcXVpcmVkJywgJ1NURVBfVVBfUkVRVUlSRUQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcGF5bG9hZDogU3RlcFVwVG9rZW5QYXlsb2FkO1xuICB0cnkge1xuICAgIHBheWxvYWQgPSBhd2FpdCB2ZXJpZnlTdGVwVXBUb2tlbih0b2tlbik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEEgcHJlc2VudGVkLWJ1dC11bnZlcmlmaWFibGUgdG9rZW4gKGZvcmdlZCwgZXhwaXJlZCwgd3Jvbmcga2V5KSBpcyBvbiB0aGVcbiAgICAvLyB0cmFpbDsgYSBNSVNTSU5HIG9uZSAoU1RFUF9VUF9SRVFVSVJFRCBhYm92ZSkgaXMgdGhlIFVJJ3Mgbm9ybWFsIGZpcnN0XG4gICAgLy8gYXR0ZW1wdCBhbmQgaXMgbm90LlxuICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ3N0ZXAtdXAgKFNURVBfVVBfSU5WQUxJRCknKTtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDEsICdTdGVwLXVwIHRva2VuIGludmFsaWQgb3IgZXhwaXJlZCcsICdTVEVQX1VQX0lOVkFMSUQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF5bG9hZC5zdWIgIT09IGNhbGxlclN1Yikge1xuICAgIC8vIFNvbWVvbmUgZWxzZSdzIHN0ZXAtdXAgdG9rZW4gcmVwbGF5ZWQgb24gdGhpcyBzZXNzaW9uIOKAlCBuZXZlciBhIFVJIGJ1Zy5cbiAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdzdGVwLXVwIChTVEVQX1VQX01JU01BVENIKScpO1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdG9rZW4gZG9lcyBub3QgbWF0Y2ggc2Vzc2lvbicsICdTVEVQX1VQX01JU01BVENIJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRmFjdG9yIHJlc3RyaWN0aW9uLiBDaGVja2VkIEJFRk9SRSB0aGUganRpIGlzIGNvbnN1bWVkLCBzbyBhIHRva2VuXG4gIC8vIGVhcm5lZCBieSB0aGUgd3JvbmcgZmFjdG9yIGNhbiBzdGlsbCBiZSBzcGVudCBvbiBhIHJvdXRlIHRoYXQgYWNjZXB0cyBpdCDigJRcbiAgLy8gYnVybmluZyBpdCBoZXJlIHdvdWxkIG1ha2UgdGhlIHJlZnVzYWwgZGVzdHJ1Y3RpdmUgYXMgd2VsbCBhcyBjb25mdXNpbmcuXG4gIGlmIChvcHRpb25zLm1ldGhvZHMgJiYgIShwYXlsb2FkLm1ldGhvZCAmJiBvcHRpb25zLm1ldGhvZHMuaW5jbHVkZXMocGF5bG9hZC5tZXRob2QpKSkge1xuICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgYHN0ZXAtdXAgKFNURVBfVVBfTUVUSE9EX1JFUVVJUkVEOiAke29wdGlvbnMubWV0aG9kcy5qb2luKCcgb3IgJyl9LCBnb3QgJHtwYXlsb2FkLm1ldGhvZCA/PyAnbm9uZSd9KWApO1xuICAgIHNlbmRFcnJvcihcbiAgICAgIHJlcywgNDAxLFxuICAgICAgJ1RoaXMgYWN0aW9uIG11c3QgYmUgY29uZmlybWVkIHdpdGggYSBwYXNza2V5IG9yIGFuIGF1dGhlbnRpY2F0b3IgY29kZScsXG4gICAgICAnU1RFUF9VUF9NRVRIT0RfUkVRVUlSRUQnLFxuICAgICAgeyBtZXRob2RzOiBbLi4ub3B0aW9ucy5tZXRob2RzXSB9LFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoIShhd2FpdCBjb25zdW1lU3RlcFVwSnRpKHBheWxvYWQuanRpLCBwYXlsb2FkLmV4cCkpKSB7XG4gICAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdzdGVwLXVwIChTVEVQX1VQX1JFUExBWSknKTtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdG9rZW4gYWxyZWFkeSB1c2VkIG9yIGV4cGlyZWQnLCAnU1RFUF9VUF9SRVBMQVknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignU3RlcC11cCBqdGkgY29uc3VtZSBlcnJvcmVkJywgeyBlcnJvcjogU3RyaW5nKGVycikgfSk7XG4gICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB2ZXJpZmljYXRpb24gZmFpbGVkJywgJ1NURVBfVVBfSU5WQUxJRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5leHQoKTtcbn1cbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC11cC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvc3RlcC11cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBcUJ0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUM7QUFTakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBNEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFxQnBGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQXFCLEtBQUssQ0FBQyxDQUFDO0lBRS9ELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9ELE1BQU0sSUFBSSxLQUFLLENB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LENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSw2QkFBNkIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RFLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogYHJlcXVpcmVTdGVwVXBgIOKAlCBhIHNoYXJlZCBzdGVwLXVwIChyZWNlbnQtcGFzc3dvcmQtcmV2ZXJpZnkpIGdhdGUgZm9yIHRoZVxuICogc3RhdGVsZXNzIGFwaSBzZXJ2aWNlcywgbWlycm9yaW5nIHRoZSBwbGF0Zm9ybSBtaWRkbGV3YXJlIG9mIHRoZSBzYW1lIG5hbWUuXG4gKlxuICogRmxvdzogdGhlIFVJIGhpdHMgYFBPU1QgL2FwaS9hdXRoL3N0ZXAtdXBgIChwbGF0Zm9ybSkgdG8gcmUtdmVyaWZ5IHRoZSB1c2VyO1xuICogcGxhdGZvcm0gbWludHMgYSBzaG9ydC1saXZlZCAoNjBzKSBgc3RlcC11cGAgSldUIHdpdGggdGhlIFNBTUUgRVMyNTYgc2lnbmluZ1xuICoga2V5IGl0IG1pbnRzIGFjY2VzcyB0b2tlbnMgd2l0aCwgc28gdGhlc2Ugc2VydmljZXMgdmVyaWZ5IGl0IHRocm91Z2ggdGhlIHNhbWVcbiAqIEpXS1MuIFRoZSBVSVxuICogcmVwbGF5cyBpdCBhcyB0aGUgYFgtU3RlcC1VcC1Ub2tlbmAgaGVhZGVyIG9uIHRoZSBkZXN0cnVjdGl2ZS9zZW5zaXRpdmUgY2FsbDtcbiAqIHRoaXMgbWlkZGxld2FyZSB2ZXJpZmllcyBpdCwgYmluZHMgaXQgdG8gdGhlIGNhbGxlciAoYHN1YmAgbWF0Y2gpLCBhbmRcbiAqIGNvbnN1bWVzIGl0cyBganRpYCBvbmNlIChSZWRpcy1iYWNrZWQgY3Jvc3MtaW5zdGFuY2Ugd2hlbiBjb25maWd1cmVkLCBlbHNlIGFcbiAqIGJvdW5kZWQgcHJvY2Vzcy1sb2NhbCBzZXQpIHNvIGEgcmVwbGF5IGluc2lkZSB0aGUgVFRMIGlzIHJlamVjdGVkLlxuICpcbiAqIFdIWSBoZXJlOiByZXN0b3JlIGVuZHBvaW50cyBvbiB0aGUgYXBpIHNlcnZpY2VzIChwaXBlbGluZS9wbHVnaW4vLi4uKSBhcmVcbiAqIHN0ZXAtdXAtZ2F0ZWQsIHNvIHRoZSB2ZXJpZnkgKyBzaW5nbGUtdXNlIGp0aSBsaXZlIGluIGFwaS1jb3JlIHdoZXJlIGFueVxuICogc2VydmljZSBjYW4gcmVxdWlyZSB0aGVtLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgdmVyaWZ5VXNlckp3dCB9IGZyb20gJy4vand0LXZlcmlmeS5qcyc7XG5pbXBvcnQgeyByZWNvcmRBdXRoekRlbmlhbCB9IGZyb20gJy4vcGVybWlzc2lvbi1nYXRlcy5qcyc7XG5pbXBvcnQgeyB0YWdSb3V0ZUdhdGUgfSBmcm9tICcuL3JvdXRlLXRhYmxlLmpzJztcbmltcG9ydCB7IGlzU2VydmljZUFjY291bnRQcmluY2lwYWwsIGlzU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4vc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNDbGllbnQsIGNyZWF0ZVJlZGlzUmVhZHlHYXRlLCB0eXBlIFJlYWR5QXdhcmVSZWRpcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vudi1yZWRpcy5qcyc7XG5pbXBvcnQgeyBnZXRIZWFkZXJTdHJpbmcgfSBmcm9tICcuLi91dGlscy9oZWFkZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc3RlcC11cCcpO1xuY29uc3QgSEVBREVSID0gJ3gtc3RlcC11cC10b2tlbic7XG5cbi8qKlxuICogSG93IGEgc3RlcC11cCB0b2tlbiB3YXMgZWFybmVkLiBNaXJyb3JzIHBsYXRmb3JtJ3MgYFN0ZXBVcE1ldGhvZGA7IGtlcHQgaGVyZVxuICogYXMgaXRzIG93biB1bmlvbiBzbyBhIHZlcmlmaWVyIGNhbiBuYW1lIHRoZSBmYWN0b3JzIGl0IGFjY2VwdHMgd2l0aG91dFxuICogaW1wb3J0aW5nIHBsYXRmb3JtLlxuICovXG5leHBvcnQgdHlwZSBTdGVwVXBNZXRob2QgPSAncGFzc3dvcmQnIHwgJ3dlYmF1dGhuJyB8ICd0b3RwJyB8ICdyZWF1dGgnO1xuXG4vKipcbiAqIFRoZSBmYWN0b3JzIHRoYXQgY291bnQgYXMgYSBTRUNPTkQgRkFDVE9SLCBmb3Igcm91dGVzIHRoYXQgbWF5IG9ubHkgYmVcbiAqIHVubG9ja2VkIGJ5IG9uZSAoIzg6IGltcGVyc29uYXRpb24sIEtNUywgSWRQIHNldHRpbmdzLCBwbGF0Zm9ybSBhZG1pbikuXG4gKlxuICogQSBwYXNzd29yZCBvciBhIHByb3ZpZGVyIHJlLWF1dGggcHJvdmVzIHRoZSBzYW1lIHNpbmdsZSBmYWN0b3IgdGhlIHNlc3Npb24gd2FzXG4gKiBhbHJlYWR5IG9wZW5lZCB3aXRoLCBzbyBvbiB0aG9zZSByb3V0ZXMgdGhleSBhcmUgbm90IGVub3VnaDogdGhlIHBvaW50IGlzIHRoYXRcbiAqIHNvbWVvbmUgaG9sZGluZyBvbmx5IGEgc3RvbGVuIHNlc3Npb24g4oCUIG9yIG9ubHkgYSBzdG9sZW4gcGFzc3dvcmQg4oCUIGNhbm5vdFxuICogcHJvY2VlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUUk9OR19TVEVQX1VQX01FVEhPRFM6IHJlYWRvbmx5IFN0ZXBVcE1ldGhvZFtdID0gWyd3ZWJhdXRobicsICd0b3RwJ107XG5cbi8qKiBQYXlsb2FkIG9mIGEgcGxhdGZvcm0taXNzdWVkIHN0ZXAtdXAgdG9rZW4gKHNlZSBwbGF0Zm9ybSBpc3N1ZVN0ZXBVcFRva2VuKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFVwVG9rZW5QYXlsb2FkIHtcbiAgdHlwZTogJ3N0ZXAtdXAnO1xuICBzdWI6IHN0cmluZztcbiAganRpOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBmYWN0b3IgZWFybmVkIGl0LiBBYnNlbnQgb25seSBvbiBhIHRva2VuIG1pbnRlZCBiZWZvcmUgdGhlIGNsYWltXG4gICAqICBleGlzdGVkLCB3aGljaCBhIG1ldGhvZC1yZXN0cmljdGVkIGdhdGUgdHJlYXRzIGFzIFwibm90IHByb3ZlblwiLiAqL1xuICBtZXRob2Q/OiBTdGVwVXBNZXRob2Q7XG4gIGlhdDogbnVtYmVyO1xuICBleHA6IG51bWJlcjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayByZXF1aXJlU3RlcFVwfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWlyZVN0ZXBVcE9wdGlvbnMge1xuICAvKiogUmVzdHJpY3Qgd2hpY2ggZmFjdG9ycyBtYXkgZWFybiB0aGUgc3RlcC11cCAoZS5nLiB7QGxpbmsgU1RST05HX1NURVBfVVBfTUVUSE9EU30pLlxuICAgKiAgT21pdHRlZCBtZWFucyBhbnkgZmFjdG9yIHRoZSBwbGF0Zm9ybSB3aWxsIGlzc3VlIGEgdG9rZW4gZm9yLiAqL1xuICBtZXRob2RzPzogcmVhZG9ubHkgU3RlcFVwTWV0aG9kW107XG59XG5cbi8qKlxuICogVmVyaWZ5IGEgc3RlcC11cCB0b2tlbjogYSB2YWxpZCBFUzI1NiBzaWduYXR1cmUgZnJvbSBvbmUgb2YgcGxhdGZvcm0nc1xuICogcHVibGlzaGVkIHNpZ25pbmcga2V5cywgaXNzdWVyIGFuZCBhdWRpZW5jZSB3aGVuIGNvbmZpZ3VyZWQsIEFORCB0aGVcbiAqIGB0eXBlOiAnc3RlcC11cCdgICsgYGp0aWAgY2xhaW1zIOKAlCBhIHBsYWluIGFjY2VzcyB0b2tlbiBpcyBzaWduZWQgYnkgdGhlIHNhbWVcbiAqIGtleSBhbmQgY2FycmllcyB0aGUgc2FtZSBgc3ViYCwgc28gd2l0aG91dCBhc3NlcnRpbmcgdGhlIHN0ZXAtdXAgc2hhcGUgaXRcbiAqIHdvdWxkIGJ5cGFzcyB0aGUgZ2F0ZS4gVGhyb3dzIG9uIGFueSBmYWlsdXJlIChhbiB1bmZldGNoYWJsZSBrZXkgc2V0IGluY2x1ZGVkOlxuICogYW4gdW52ZXJpZmlhYmxlIHRva2VuIGlzIG5vdCBhIHN0ZXAtdXApLiBEb2VzIE5PVCBiaW5kIHRvIGEgY2FsbGVyIOKAlFxuICogYHJlcXVpcmVTdGVwVXBgIGRvZXMgdGhlIGBzdWJgIG1hdGNoIGFuZCBzaW5nbGUtdXNlIGNvbnN1bWUuXG4gKlxuICogRGVsZWdhdGVzIHRvIGByZXF1aXJlQXV0aGAncyBvd24gcHJpbWl0aXZlIChgdmVyaWZ5VXNlckp3dGApIHJhdGhlciB0aGFuXG4gKiByZS1pbXBsZW1lbnRpbmcgaXQuIFRoZSBoYW5kLXJvbGxlZCBjb3B5IHRoaXMgcmVwbGFjZWQgZHJvcHBlZCBUV08gb2YgaXRzXG4gKiBndWFyZHM6IGl0IG5ldmVyIHBpbm5lZCBpc3N1ZXIvYXVkaWVuY2UsIGFuZCBpdHMgcHJldmlvdXMtc2VjcmV0IHJldHJ5IGhhZCBub1xuICogZXhwaXJ5L25vdC1iZWZvcmUgY2FydmUtb3V0LCBzbyBhbiBFWFBJUkVEIHRva2VuIHN1cmZhY2VkIGFzIGEgc2lnbmF0dXJlIGVycm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U3RlcFVwVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8U3RlcFVwVG9rZW5QYXlsb2FkPiB7XG4gIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB2ZXJpZnlVc2VySnd0PFN0ZXBVcFRva2VuUGF5bG9hZD4odG9rZW4pO1xuXG4gIGlmIChwYXlsb2FkLnR5cGUgIT09ICdzdGVwLXVwJyB8fCAhcGF5bG9hZC5qdGkgfHwgIXBheWxvYWQuc3ViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJTlZBTElEX1NURVBfVVBfVE9LRU4nKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZDtcbn1cblxuLy8gLS0gU2luZ2xlLXVzZSBqdGkgc3RvcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZGlzIFNFVCBOWCBFWCB3aGVuIFJlZGlzIGlzIGNvbmZpZ3VyZWQgKGNyb3NzLWluc3RhbmNlIHNpbmdsZS11c2UpOyBlbHNlIGFcbi8vIGJvdW5kZWQgcHJvY2Vzcy1sb2NhbCBtYXAgd2l0aCBUVEwgc3dlZXAgKHBlci1wcm9jZXNzKS4gQSBzdGVwLXVwIHRva2VuIGlzXG4vLyA2MHMtbGl2ZWQuIFdoZW4gUmVkaXMgSVMgY29uZmlndXJlZCBpdCdzIHRoZSBhdXRob3JpdGF0aXZlIHN0b3JlOiBhIFJlZGlzXG4vLyBlcnJvciBGQUlMUyBDTE9TRUQgKHRocm93cyDihpIgU1RFUF9VUF9JTlZBTElELCB1c2VyIHJlLXZlcmlmaWVzKSByYXRoZXIgdGhhblxuLy8gZGVncmFkaW5nIHRvIHRoZSBwZXItaW5zdGFuY2UgbWVtIGd1YXJkLCB3aGljaCB3b3VsZCBhY2NlcHQgYSBjcm9zcy1pbnN0YW5jZVxuLy8gcmVwbGF5IGR1cmluZyB0aGUgb3V0YWdlLiBUaGUgbWVtIGd1YXJkIGlzIHVzZWQgT05MWSB3aGVuIFJlZGlzIGlzIGFic2VudC5cblxudHlwZSBKdGlSZWRpcyA9IFJlYWR5QXdhcmVSZWRpcyAmIHsgc2V0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+IH07XG5sZXQgX3JlZGlzOiBKdGlSZWRpcyB8IG51bGwgfCB1bmRlZmluZWQ7XG5sZXQgX3JlZGlzUmVhZHk6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcbi8qKlxuICogVGhlIGp0aSBjbGllbnQsIGJ1aWx0IGxhemlseS4gVGhlIGVudiBjbGllbnQgaGFzIG5vIG9mZmxpbmUgcXVldWUsIHNvIGEgU0VUIG9uXG4gKiBhIGNvbm5lY3Rpb24gdGhhdCBpc24ndCB1cCB5ZXQgaXMgcmVqZWN0ZWQg4oCUIHRoZSBGSVJTVCBzdGVwLXVwIG9uIGV2ZXJ5IHBvZFxuICogd291bGQgZmFpbC4gV2FpdCAoYm91bmRlZCwgbmV2ZXIgcmVqZWN0aW5nKSBmb3IgcmVhZGluZXNzIGJlZm9yZVxuICogaGFuZGluZyBpdCBvdXQ7IGEgZ2VudWluZWx5IGRvd24gUmVkaXMgc3RpbGwgZmFpbHMgY2xvc2VkIG9uIHRoZSBTRVQgYmVsb3cuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlZGlzKCk6IFByb21pc2U8SnRpUmVkaXMgfCBudWxsPiB7XG4gIGlmIChfcmVkaXMgPT09IHVuZGVmaW5lZCkge1xuICAgIF9yZWRpcyA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PEp0aVJlZGlzPignc3RlcC11cC1qdGknKTtcbiAgICBfcmVkaXNSZWFkeSA9IF9yZWRpcyA/IGNyZWF0ZVJlZGlzUmVhZHlHYXRlKF9yZWRpcykgOiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKF9yZWRpc1JlYWR5KSBhd2FpdCBfcmVkaXNSZWFkeSgpO1xuICByZXR1cm4gX3JlZGlzO1xufVxuXG5jb25zdCBtZW1KdGkgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBqdGkgLT4gZXhwaXJ5IGVwb2NoIG1zXG5jb25zdCBtZW1Td2VlcCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbanRpLCBleHBdIG9mIG1lbUp0aSkgaWYgKGV4cCA8PSBub3cpIG1lbUp0aS5kZWxldGUoanRpKTtcbn0sIDMwXzAwMCk7XG5tZW1Td2VlcC51bnJlZj8uKCk7XG5cbi8qKlxuICogSGFyZCBjZWlsaW5nIG9uIHRoZSBwcm9jZXNzLWxvY2FsIGp0aSBzZXQuXG4gKlxuICogVGhlIDMwcyBzd2VlcCBhbG9uZSBkb2VzIE5PVCBib3VuZCBpdDogZW50cmllcyBvbmx5IGxlYXZlIG9uY2UgdGhlaXIgdG9rZW4nc1xuICogVFRMIGhhcyBwYXNzZWQsIHNvIGEgYnVyc3Qgb2Ygc3RlcC11cCB0cmFmZmljIChvciBhIGZsb29kIG9mIGRpc3RpbmN0IGZvcmdlZFxuICoganRpcyBvbiBhIFJlZGlzLWxlc3MgZGVwbG95bWVudCkgZ3Jvd3MgdGhlIG1hcCBmYXN0ZXIgdGhhbiB0aGUgc3dlZXAgZHJhaW5zXG4gKiBpdC4gVGhpcyBpcyBhIHJlcGxheSBndWFyZCwgc28gc2hlZGRpbmcgdGhlIE9MREVTVCBlbnRyaWVzIGlzIHRoZSBzYWZlXG4gKiBkaXJlY3Rpb246IHRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgYSBsb25nLWV4cGlyZWQganRpIGNvdWxkIGJlIHJlcGxheWVkLCBhbmRcbiAqIGV4cGlyeSBpcyBlbmZvcmNlZCBpbmRlcGVuZGVudGx5IGJ5IHRoZSB0b2tlbidzIG93biBgZXhwYC5cbiAqL1xuY29uc3QgTUVNX0pUSV9NQVggPSAxMF8wMDA7XG5cbi8qKiBEcm9wIHRoZSBzb29uZXN0LXRvLWV4cGlyZSBlbnRyaWVzIHVudGlsIHRoZSBtYXAgaXMgdW5kZXIgdGhlIGNlaWxpbmcuICovXG5mdW5jdGlvbiBldmljdE9sZGVzdEp0aSgpOiB2b2lkIHtcbiAgaWYgKG1lbUp0aS5zaXplIDwgTUVNX0pUSV9NQVgpIHJldHVybjtcbiAgY29uc3QgYnlFeHBpcnkgPSBbLi4ubWVtSnRpLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICBjb25zdCBleGNlc3MgPSBtZW1KdGkuc2l6ZSAtIE1FTV9KVElfTUFYICsgMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGNlc3M7IGkgKz0gMSkgbWVtSnRpLmRlbGV0ZShieUV4cGlyeVtpXVswXSk7XG59XG5cbi8qKlxuICogQ29uc3VtZSBhIHN0ZXAtdXAgYGp0aWAgZXhhY3RseSBvbmNlLiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjYWxsIGNsYWltZWQgaXRcbiAqIChmaXJzdCB1c2UpLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBjb25zdW1lZCAocmVwbGF5KS4gYGV4cEVwb2NoU2Vjb25kc2AgaXNcbiAqIHRoZSB0b2tlbidzIGBleHBgLCBzbyB0aGUgbWFya2VyIGF1dG8tZXhwaXJlcyB3aXRoIHRoZSB0b2tlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbnN1bWVTdGVwVXBKdGkoanRpOiBzdHJpbmcsIGV4cEVwb2NoU2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHR0bFNlY29uZHMgPSBNYXRoLm1heCgxLCBleHBFcG9jaFNlY29uZHMgLSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSk7XG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IHJlZGlzKCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICAvLyBSZWRpcyBjb25maWd1cmVkIOKHkiBhdXRob3JpdGF0aXZlIGNyb3NzLWluc3RhbmNlIHN0b3JlLiBTRVQgTlggRVgg4oaSICdPSydcbiAgICAvLyB3aGVuIG5ld2x5IHNldCwgbnVsbCB3aGVuIGFscmVhZHkgY29uc3VtZWQuIEEgdGhyb3duIFJlZGlzIGVycm9yIGlzIE5PVFxuICAgIC8vIGNhdWdodCBoZXJlOiBpdCBwcm9wYWdhdGVzIHNvIGByZXF1aXJlU3RlcFVwYCBmYWlscyBjbG9zZWQgKFNURVBfVVBfSU5WQUxJRClcbiAgICAvLyBpbnN0ZWFkIG9mIHNpbGVudGx5IGRlZ3JhZGluZyB0byB0aGUgcGVyLWluc3RhbmNlIG1lbSBndWFyZC5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuc2V0KGBzdGVwdXA6anRpOiR7anRpfWAsICcxJywgJ0VYJywgdHRsU2Vjb25kcywgJ05YJyk7XG4gICAgcmV0dXJuIHJlcyA9PT0gJ09LJztcbiAgfVxuICAvLyBObyBSZWRpcyDih5Igc2luZ2xlLWluc3RhbmNlIGRlcGxveW1lbnQ7IHRoZSBwcm9jZXNzLWxvY2FsIG1hcCBJUyB0aGUgc3RvcmUuXG4gIGlmIChtZW1KdGkuaGFzKGp0aSkpIHJldHVybiBmYWxzZTtcbiAgZXZpY3RPbGRlc3RKdGkoKTtcbiAgbWVtSnRpLnNldChqdGksIERhdGUubm93KCkgKyB0dGxTZWNvbmRzICogMTAwMCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgbWlkZGxld2FyZTogcmVxdWlyZSBhIHZhbGlkLCBjYWxsZXItYm91bmQsIHNpbmdsZS11c2Ugc3RlcC11cCB0b2tlbiBpblxuICogdGhlIGBYLVN0ZXAtVXAtVG9rZW5gIGhlYWRlci4gTXVzdCBydW4gQUZURVIgYHJlcXVpcmVBdXRoYCAobmVlZHMgYHJlcS51c2VyYCkuXG4gKlxuICogVXNlIGRpcmVjdGx5IChgcm91dGVyLnBvc3QoJy94JywgcmVxdWlyZUF1dGgsIHJlcXVpcmVTdGVwVXAsIGgpYCkgZm9yIHRoZVxuICogb3JkaW5hcnkgYW55LWZhY3RvciBnYXRlLCBvciBjYWxsIGl0IHdpdGggYHsgbWV0aG9kcyB9YCB0byBkZW1hbmQgdGhhdCB0aGVcbiAqIGNvbmZpcm1hdGlvbiB3YXMgZWFybmVkIGJ5IGEgc3BlY2lmaWMgZmFjdG9yIOKAlCBgcmVxdWlyZVN0ZXBVcCh7IG1ldGhvZHM6XG4gKiBTVFJPTkdfU1RFUF9VUF9NRVRIT0RTIH0pYCBvbiB0aGUgcm91dGVzIHdoZXJlIGEgcGFzc3dvcmQgcmUtcHJvbXB0IGlzIG5vdCBhXG4gKiBtZWFuaW5nZnVsIHNlY29uZCBwcm9vZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTdGVwVXAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVTdGVwVXAob3B0aW9uczogUmVxdWlyZVN0ZXBVcE9wdGlvbnMpOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZVN0ZXBVcChcbiAgcmVxT3JPcHRpb25zOiBSZXF1ZXN0IHwgUmVxdWlyZVN0ZXBVcE9wdGlvbnMsXG4gIHJlcz86IFJlc3BvbnNlLFxuICBuZXh0PzogTmV4dEZ1bmN0aW9uLFxuKTogUHJvbWlzZTx2b2lkPiB8ICgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHZvaWQpIHtcbiAgLy8gVGhlIGRpcmVjdCBmb3JtIFJFVFVSTlMgdGhlIHByb21pc2UgKEV4cHJlc3MgaWdub3JlcyBpdDsgYSB0ZXN0IGF3YWl0cyBpdCksXG4gIC8vIHNvIGNvbXBvc2luZyB0aGUgZ2F0ZSBhcyBgcm91dGVyLnBvc3QoJy94JywgcmVxdWlyZVN0ZXBVcCwgaClgIGJlaGF2ZXNcbiAgLy8gZXhhY3RseSBhcyBpdCBkaWQgYmVmb3JlIHRoZSBvcHRpb25zIGZvcm0gZXhpc3RlZC5cbiAgaWYgKHJlcyAmJiBuZXh0ICYmICdoZWFkZXJzJyBpbiByZXFPck9wdGlvbnMpIHtcbiAgICByZXR1cm4gX3JlcXVpcmVTdGVwVXAoe30sIHJlcU9yT3B0aW9ucyBhcyBSZXF1ZXN0LCByZXMsIG5leHQpO1xuICB9XG4gIGNvbnN0IG9wdGlvbnMgPSByZXFPck9wdGlvbnMgYXMgUmVxdWlyZVN0ZXBVcE9wdGlvbnM7XG4gIHJldHVybiB0YWdSb3V0ZUdhdGUoXG4gICAgKHJlcUlubmVyOiBSZXF1ZXN0LCByZXNJbm5lcjogUmVzcG9uc2UsIG5leHRJbm5lcjogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgICB2b2lkIF9yZXF1aXJlU3RlcFVwKG9wdGlvbnMsIHJlcUlubmVyLCByZXNJbm5lciwgbmV4dElubmVyKTtcbiAgICB9LFxuICAgIHsga2luZDogJ3N0ZXBVcCcsIC4uLihvcHRpb25zLm1ldGhvZHMgPyB7IG1ldGhvZHM6IFsuLi5vcHRpb25zLm1ldGhvZHNdIH0gOiB7fSkgfSxcbiAgKTtcbn1cbnRhZ1JvdXRlR2F0ZShyZXF1aXJlU3RlcFVwLCB7IGtpbmQ6ICdzdGVwVXAnIH0pO1xuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWlyZVN0ZXBVcChvcHRpb25zOiBSZXF1aXJlU3RlcFVwT3B0aW9ucywgcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gVmVyaWZpZWQgaW50ZXJuYWwgc2VydmljZSBwcmluY2lwYWxzIGFyZSBFWEVNUFQ6IHN0ZXAtdXAgaXMgYSByZS12ZXJpZnktdGhlLVxuICAvLyBIVU1BTiBnYXRlICh0aGV5IHJlcGxheSBhIHBhc3N3b3JkLXJldmVyaWZ5IHRva2VuKSwgd2hpY2ggYSBzZXJ2aWNlIHRva2VuXG4gIC8vIHN0cnVjdHVyYWxseSBjYW5ub3QgcHJvZHVjZS4gU2VydmljZXMgYWxyZWFkeSBieXBhc3MgYHJlcXVpcmVQZXJtaXNzaW9uYCBvblxuICAvLyB0aGUgc2FtZSB0cnVzdCBiYXNpcyAoYSBzaWduZWQgc2VydmljZSBKV1QpLCBhbmQgaW50ZXJuYWwgY2FsbGVycyBvZiBhXG4gIC8vIHN0ZXAtdXAtZ2F0ZWQgcm91dGUg4oCUIGUuZy4gdGhlIHBsYXRmb3JtIG9yZy1jYXNjYWRlJ3MgYERFTEVURSAvcXVvdGFzLzpvcmdJZGBcbiAgLy8gb3IgdGhlIGJpbGxpbmfihpJxdW90YSBlbnRpdGxlbWVudCBzeW5jIOKAlCB3b3VsZCBvdGhlcndpc2UgYmUgaGFyZC1ibG9ja2VkLlxuICAvLyBTYWZlOiBhIHNlcnZpY2UgdG9rZW4gY2FuIG9ubHkgYmUgbWludGVkIHdpdGggYSBTRVJWSUNFJ3Mgb3duIEVTMjU2IGtleSxcbiAgLy8gd2hpY2ggbm8gZXh0ZXJuYWwgY2xpZW50IGhvbGRzLCBzbyB0aGlzIGNhbid0IGJlIHNwb29mZWQgdG8gc2tpcFxuICAvLyBzdGVwLXVwLlxuICBpZiAoaXNTZXJ2aWNlUHJpbmNpcGFsKHJlcSkpIHtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW4gT1JHIFNFUlZJQ0UgQUNDT1VOVCBpcyB0aGUgb3Bwb3NpdGUgY2FzZTogaXQgaXMgc3ViamVjdCB0byBldmVyeSBnYXRlIGFcbiAgLy8gbWVtYmVyIGlzLCBhbmQgdGhlcmUgaXMgbm8gcGVyc29uIGJlaGluZCBpdCB0byByZS12ZXJpZnkg4oCUIHNvIGl0IGNhbiBORVZFUlxuICAvLyBwYXNzIHN0ZXAtdXAuIFJlZnVzZSBleHBsaWNpdGx5IChyYXRoZXIgdGhhbiBsZXR0aW5nIGl0IGZhbGwgdGhyb3VnaCB0byB0aGVcbiAgLy8gYHN1YmAtYm91bmQgdG9rZW4gY2hlY2ssIHdoaWNoIHdvdWxkIGZhaWwgd2l0aCBhIGNvbmZ1c2luZyBTVEVQX1VQX01JU01BVENIKVxuICAvLyBzbyBcImEgbWFjaGluZSBjcmVkZW50aWFsIG5ldmVyIHNhdGlzZmllcyBhbiBhc3N1cmFuY2UgcmVxdWlyZW1lbnRcIiBpcyBhXG4gIC8vIHByb3BlcnR5IG9mIHRoaXMgZ2F0ZSwgbm90IGEgc2lkZSBlZmZlY3Qgb2YgaG93IHN0ZXAtdXAgdG9rZW5zIGFyZSBtaW50ZWQuXG4gIGlmIChpc1NlcnZpY2VBY2NvdW50UHJpbmNpcGFsKHJlcSkpIHtcbiAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdzdGVwLXVwIChTVEVQX1VQX05PVF9BVkFJTEFCTEU6IHNlcnZpY2UgYWNjb3VudCknKTtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDMsICdBIHNlcnZpY2UgYWNjb3VudCBjYW5ub3QgcGVyZm9ybSB0aGlzIGFjdGlvbiDigJQgaXQgcmVxdWlyZXMgYSBwZXJzb24gdG8gcmUtdmVyaWZ5JywgJ1NURVBfVVBfTk9UX0FWQUlMQUJMRScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhbGxlclN1YiA9IChyZXEgYXMgUmVxdWVzdCAmIHsgdXNlcj86IHsgc3ViPzogc3RyaW5nIH0gfSkudXNlcj8uc3ViO1xuICBpZiAoIWNhbGxlclN1Yikge1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJywgJ1VOQVVUSE9SSVpFRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzW0hFQURFUl0pO1xuICBpZiAoIXRva2VuKSB7XG4gICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB2ZXJpZmljYXRpb24gcmVxdWlyZWQnLCAnU1RFUF9VUF9SRVFVSVJFRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwYXlsb2FkOiBTdGVwVXBUb2tlblBheWxvYWQ7XG4gIHRyeSB7XG4gICAgcGF5bG9hZCA9IGF3YWl0IHZlcmlmeVN0ZXBVcFRva2VuKHRva2VuKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQSBwcmVzZW50ZWQtYnV0LXVudmVyaWZpYWJsZSB0b2tlbiAoZm9yZ2VkLCBleHBpcmVkLCB3cm9uZyBrZXkpIGlzIG9uIHRoZVxuICAgIC8vIHRyYWlsOyBhIE1JU1NJTkcgb25lIChTVEVQX1VQX1JFUVVJUkVEIGFib3ZlKSBpcyB0aGUgVUkncyBub3JtYWwgZmlyc3RcbiAgICAvLyBhdHRlbXB0IGFuZCBpcyBub3QuXG4gICAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnc3RlcC11cCAoU1RFUF9VUF9JTlZBTElEKScpO1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMSwgJ1N0ZXAtdXAgdG9rZW4gaW52YWxpZCBvciBleHBpcmVkJywgJ1NURVBfVVBfSU5WQUxJRCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLnN1YiAhPT0gY2FsbGVyU3ViKSB7XG4gICAgLy8gU29tZW9uZSBlbHNlJ3Mgc3RlcC11cCB0b2tlbiByZXBsYXllZCBvbiB0aGlzIHNlc3Npb24g4oCUIG5ldmVyIGEgVUkgYnVnLlxuICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ3N0ZXAtdXAgKFNURVBfVVBfTUlTTUFUQ0gpJyk7XG4gICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB0b2tlbiBkb2VzIG5vdCBtYXRjaCBzZXNzaW9uJywgJ1NURVBfVVBfTUlTTUFUQ0gnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGYWN0b3IgcmVzdHJpY3Rpb24uIENoZWNrZWQgQkVGT1JFIHRoZSBqdGkgaXMgY29uc3VtZWQsIHNvIGEgdG9rZW5cbiAgLy8gZWFybmVkIGJ5IHRoZSB3cm9uZyBmYWN0b3IgY2FuIHN0aWxsIGJlIHNwZW50IG9uIGEgcm91dGUgdGhhdCBhY2NlcHRzIGl0IOKAlFxuICAvLyBidXJuaW5nIGl0IGhlcmUgd291bGQgbWFrZSB0aGUgcmVmdXNhbCBkZXN0cnVjdGl2ZSBhcyB3ZWxsIGFzIGNvbmZ1c2luZy5cbiAgaWYgKG9wdGlvbnMubWV0aG9kcyAmJiAhKHBheWxvYWQubWV0aG9kICYmIG9wdGlvbnMubWV0aG9kcy5pbmNsdWRlcyhwYXlsb2FkLm1ldGhvZCkpKSB7XG4gICAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCBgc3RlcC11cCAoU1RFUF9VUF9NRVRIT0RfUkVRVUlSRUQ6ICR7b3B0aW9ucy5tZXRob2RzLmpvaW4oJyBvciAnKX0sIGdvdCAke3BheWxvYWQubWV0aG9kID8/ICdub25lJ30pYCk7XG4gICAgc2VuZEVycm9yKFxuICAgICAgcmVzLCA0MDEsXG4gICAgICAnVGhpcyBhY3Rpb24gbXVzdCBiZSBjb25maXJtZWQgd2l0aCBhIHBhc3NrZXkgb3IgYW4gYXV0aGVudGljYXRvciBjb2RlJyxcbiAgICAgICdTVEVQX1VQX01FVEhPRF9SRVFVSVJFRCcsXG4gICAgICB7IG1ldGhvZHM6IFsuLi5vcHRpb25zLm1ldGhvZHNdIH0sXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGlmICghKGF3YWl0IGNvbnN1bWVTdGVwVXBKdGkocGF5bG9hZC5qdGksIHBheWxvYWQuZXhwKSkpIHtcbiAgICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ3N0ZXAtdXAgKFNURVBfVVBfUkVQTEFZKScpO1xuICAgICAgc2VuZEVycm9yKHJlcywgNDAxLCAnU3RlcC11cCB0b2tlbiBhbHJlYWR5IHVzZWQgb3IgZXhwaXJlZCcsICdTVEVQX1VQX1JFUExBWScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdTdGVwLXVwIGp0aSBjb25zdW1lIGVycm9yZWQnLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KTtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDEsICdTdGVwLXVwIHZlcmlmaWNhdGlvbiBmYWlsZWQnLCAnU1RFUF9VUF9JTlZBTElEJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbmV4dCgpO1xufVxuIl19
|
|
@@ -3,12 +3,25 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* The system tenant's canonical org **id** — a fixed, well-known ObjectId (NOT
|
|
6
|
-
* the string 'system').
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* the string 'system'). The single value every service resolves the system
|
|
7
|
+
* tenant through. The system org's human identifier stays the slug/name
|
|
8
|
+
* 'system' (see {@link SYSTEM_ORG_SLUG}); only its `_id` is this ObjectId.
|
|
9
|
+
*
|
|
10
|
+
* NOT ENV-OVERRIDABLE, and the removed override is worth a note so nobody
|
|
11
|
+
* re-adds it. It read `process.env.SYSTEM_ORG_ID` "for alternate installs" —
|
|
12
|
+
* but the schema contradicts it: `postgres-init.sql` hardcodes this literal as
|
|
13
|
+
* the DEFAULT on 23 org-scoped columns and seeds its rows with it. So an
|
|
14
|
+
* override moved the application's idea of the system org while the database's
|
|
15
|
+
* stayed put, which is a half-feature that fails in the worst possible
|
|
16
|
+
* place — tenancy. The divergence was already being worked around in two spots
|
|
17
|
+
* (`query-builders.ts` drops an orgId predicate over it; the ecosystem
|
|
18
|
+
* bootstrap repairs the Official publisher), and the knob appeared in no
|
|
19
|
+
* `.env.example`, so nothing could set it deliberately anyway.
|
|
20
|
+
*
|
|
21
|
+
* An alternate install changes the DDL and this constant together, or not at
|
|
22
|
+
* all.
|
|
10
23
|
*/
|
|
11
|
-
export declare const SYSTEM_ORG_ID
|
|
24
|
+
export declare const SYSTEM_ORG_ID = "000000000000000000000001";
|
|
12
25
|
/** The system org's well-known slug/name (the human identifier; its `_id` is {@link SYSTEM_ORG_ID}). */
|
|
13
26
|
export declare const SYSTEM_ORG_SLUG = "system";
|
|
14
27
|
/**
|
|
@@ -5,12 +5,25 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* The system tenant's canonical org **id** — a fixed, well-known ObjectId (NOT
|
|
8
|
-
* the string 'system').
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* the string 'system'). The single value every service resolves the system
|
|
9
|
+
* tenant through. The system org's human identifier stays the slug/name
|
|
10
|
+
* 'system' (see {@link SYSTEM_ORG_SLUG}); only its `_id` is this ObjectId.
|
|
11
|
+
*
|
|
12
|
+
* NOT ENV-OVERRIDABLE, and the removed override is worth a note so nobody
|
|
13
|
+
* re-adds it. It read `process.env.SYSTEM_ORG_ID` "for alternate installs" —
|
|
14
|
+
* but the schema contradicts it: `postgres-init.sql` hardcodes this literal as
|
|
15
|
+
* the DEFAULT on 23 org-scoped columns and seeds its rows with it. So an
|
|
16
|
+
* override moved the application's idea of the system org while the database's
|
|
17
|
+
* stayed put, which is a half-feature that fails in the worst possible
|
|
18
|
+
* place — tenancy. The divergence was already being worked around in two spots
|
|
19
|
+
* (`query-builders.ts` drops an orgId predicate over it; the ecosystem
|
|
20
|
+
* bootstrap repairs the Official publisher), and the knob appeared in no
|
|
21
|
+
* `.env.example`, so nothing could set it deliberately anyway.
|
|
22
|
+
*
|
|
23
|
+
* An alternate install changes the DDL and this constant together, or not at
|
|
24
|
+
* all.
|
|
12
25
|
*/
|
|
13
|
-
export const SYSTEM_ORG_ID =
|
|
26
|
+
export const SYSTEM_ORG_ID = '000000000000000000000001';
|
|
14
27
|
/** The system org's well-known slug/name (the human identifier; its `_id` is {@link SYSTEM_ORG_ID}). */
|
|
15
28
|
export const SYSTEM_ORG_SLUG = 'system';
|
|
16
29
|
/**
|
|
@@ -22,4 +35,4 @@ export const SYSTEM_ORG_SLUG = 'system';
|
|
|
22
35
|
export function isSystemOrgId(orgId, orgName) {
|
|
23
36
|
return orgId?.toLowerCase() === SYSTEM_ORG_ID || orgName?.toLowerCase() === SYSTEM_ORG_SLUG;
|
|
24
37
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLW9yZy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvc3lzdGVtLW9yZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOztHQUVHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsMEJBQTBCLENBQUM7QUFFeEQsd0dBQXdHO0FBQ3hHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWMsRUFBRSxPQUFnQjtJQUM1RCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxhQUFhLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQztBQUM5RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHN5c3RlbSB0ZW5hbnQncyB3ZWxsLWtub3duIGlkZW50aXR5LlxuICovXG5cbi8qKlxuICogVGhlIHN5c3RlbSB0ZW5hbnQncyBjYW5vbmljYWwgb3JnICoqaWQqKiDigJQgYSBmaXhlZCwgd2VsbC1rbm93biBPYmplY3RJZCAoTk9UXG4gKiB0aGUgc3RyaW5nICdzeXN0ZW0nKS4gVGhlIHNpbmdsZSB2YWx1ZSBldmVyeSBzZXJ2aWNlIHJlc29sdmVzIHRoZSBzeXN0ZW1cbiAqIHRlbmFudCB0aHJvdWdoLiBUaGUgc3lzdGVtIG9yZydzIGh1bWFuIGlkZW50aWZpZXIgc3RheXMgdGhlIHNsdWcvbmFtZVxuICogJ3N5c3RlbScgKHNlZSB7QGxpbmsgU1lTVEVNX09SR19TTFVHfSk7IG9ubHkgaXRzIGBfaWRgIGlzIHRoaXMgT2JqZWN0SWQuXG4gKlxuICogTk9UIEVOVi1PVkVSUklEQUJMRSwgYW5kIHRoZSByZW1vdmVkIG92ZXJyaWRlIGlzIHdvcnRoIGEgbm90ZSBzbyBub2JvZHlcbiAqIHJlLWFkZHMgaXQuIEl0IHJlYWQgYHByb2Nlc3MuZW52LlNZU1RFTV9PUkdfSURgIFwiZm9yIGFsdGVybmF0ZSBpbnN0YWxsc1wiIOKAlFxuICogYnV0IHRoZSBzY2hlbWEgY29udHJhZGljdHMgaXQ6IGBwb3N0Z3Jlcy1pbml0LnNxbGAgaGFyZGNvZGVzIHRoaXMgbGl0ZXJhbCBhc1xuICogdGhlIERFRkFVTFQgb24gMjMgb3JnLXNjb3BlZCBjb2x1bW5zIGFuZCBzZWVkcyBpdHMgcm93cyB3aXRoIGl0LiBTbyBhblxuICogb3ZlcnJpZGUgbW92ZWQgdGhlIGFwcGxpY2F0aW9uJ3MgaWRlYSBvZiB0aGUgc3lzdGVtIG9yZyB3aGlsZSB0aGUgZGF0YWJhc2Unc1xuICogc3RheWVkIHB1dCwgd2hpY2ggaXMgYSBoYWxmLWZlYXR1cmUgdGhhdCBmYWlscyBpbiB0aGUgd29yc3QgcG9zc2libGVcbiAqIHBsYWNlIOKAlCB0ZW5hbmN5LiBUaGUgZGl2ZXJnZW5jZSB3YXMgYWxyZWFkeSBiZWluZyB3b3JrZWQgYXJvdW5kIGluIHR3byBzcG90c1xuICogKGBxdWVyeS1idWlsZGVycy50c2AgZHJvcHMgYW4gb3JnSWQgcHJlZGljYXRlIG92ZXIgaXQ7IHRoZSBlY29zeXN0ZW1cbiAqIGJvb3RzdHJhcCByZXBhaXJzIHRoZSBPZmZpY2lhbCBwdWJsaXNoZXIpLCBhbmQgdGhlIGtub2IgYXBwZWFyZWQgaW4gbm9cbiAqIGAuZW52LmV4YW1wbGVgLCBzbyBub3RoaW5nIGNvdWxkIHNldCBpdCBkZWxpYmVyYXRlbHkgYW55d2F5LlxuICpcbiAqIEFuIGFsdGVybmF0ZSBpbnN0YWxsIGNoYW5nZXMgdGhlIERETCBhbmQgdGhpcyBjb25zdGFudCB0b2dldGhlciwgb3Igbm90IGF0XG4gKiBhbGwuXG4gKi9cbmV4cG9ydCBjb25zdCBTWVNURU1fT1JHX0lEID0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSc7XG5cbi8qKiBUaGUgc3lzdGVtIG9yZydzIHdlbGwta25vd24gc2x1Zy9uYW1lICh0aGUgaHVtYW4gaWRlbnRpZmllcjsgaXRzIGBfaWRgIGlzIHtAbGluayBTWVNURU1fT1JHX0lEfSkuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX09SR19TTFVHID0gJ3N5c3RlbSc7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3JnSWQgb3Igb3JnTmFtZS9zbHVnIG1hdGNoZXMgdGhlIHN5c3RlbSBvcmcuIFVzZSB0aGlzIGluc3RlYWQgb2ZcbiAqIGNvbXBhcmluZyBkaXJlY3RseTogdGhlIGlkIGlzIG5vdyBhbiBPYmplY3RJZCAoe0BsaW5rIFNZU1RFTV9PUkdfSUR9KSB3aGlsZSB0aGVcbiAqIG5hbWUvc2x1ZyBpcyAnc3lzdGVtJyAoe0BsaW5rIFNZU1RFTV9PUkdfU0xVR30pLCBzbyB0aGUgdHdvIGFyZSBjb21wYXJlZCBhZ2FpbnN0XG4gKiB0aGVpciByZXNwZWN0aXZlIGNhbm9uaWNhbCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N5c3RlbU9yZ0lkKG9yZ0lkPzogc3RyaW5nLCBvcmdOYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcmdJZD8udG9Mb3dlckNhc2UoKSA9PT0gU1lTVEVNX09SR19JRCB8fCBvcmdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSBTWVNURU1fT1JHX1NMVUc7XG59XG5cbiJdfQ==
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
extendZodWithOpenApi(z);
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kLXpvZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGkvZXh0ZW5kLXpvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXh0ZW5kWm9kV2l0aE9wZW5BcGkgfSBmcm9tICdAYXN0ZWFzb2x1dGlvbnMvem9kLXRvLW9wZW5hcGknO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmV4dGVuZFpvZFdpdGhPcGVuQXBpKHopO1xuIl19
|
package/lib/openapi/index.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
// Public API
|
|
4
4
|
export { registry, generateOpenApiSpec } from './registry.js';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsYUFBYTtBQUNiLE9BQU8sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gUHVibGljIEFQSVxuZXhwb3J0IHsgcmVnaXN0cnksIGdlbmVyYXRlT3BlbkFwaVNwZWMgfSBmcm9tICcuL3JlZ2lzdHJ5LmpzJztcbmV4cG9ydCB0eXBlIHsgT3BlbkFwaVNwZWNPcHRpb25zIH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG4iXX0=
|
package/lib/openapi/registry.js
CHANGED
|
@@ -35,4 +35,4 @@ export function generateOpenApiSpec(options) {
|
|
|
35
35
|
],
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3JlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxxRUFBcUU7QUFDckUsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFVOUMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBRXpCLHNDQUFzQztBQUN0QyxTQUFTLGlCQUFpQjtJQUN4QixJQUFJLFlBQVk7UUFBRSxPQUFPO0lBQ3pCLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDcEIsZUFBZSxFQUFFLENBQUM7SUFDbEIsaUJBQWlCLEVBQUUsQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLE9BQTRCO0lBRTVCLGlCQUFpQixFQUFFLENBQUM7SUFFcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEUsT0FBTyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7UUFDaEMsT0FBTyxFQUFFLE9BQU87UUFDaEIsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksc0JBQXNCO1lBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU87WUFDcEMsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksaUdBQWlHO1NBQ3ZJO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRTtTQUNwRTtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgT3BlbkFQSVJlZ2lzdHJ5LCBPcGVuQXBpR2VuZXJhdG9yVjMxIH0gZnJvbSAnQGFzdGVhc29sdXRpb25zL3pvZC10by1vcGVuYXBpJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJBbGxSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyByZWdpc3RlclNjaGVtYXMgfSBmcm9tICcuL3NjaGVtYS1yZWdpc3RyeS5qcyc7XG5cbi8qKiBTaGFyZWQgT3BlbkFQSSByZWdpc3RyeSBmb3IgYWxsIHNjaGVtYSBhbmQgcGF0aCByZWdpc3RyYXRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IE9wZW5BUElSZWdpc3RyeSgpO1xuXG4vKiogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIGdlbmVyYXRlZCBPcGVuQVBJIHNwZWMuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BcGlTcGVjT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2VydmVyVXJsPzogc3RyaW5nO1xufVxuXG5sZXQgX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbi8qKiBFeGVjdXRlIGFsbCByZWdpc3RyYXRpb25zIG9uY2UuICovXG5mdW5jdGlvbiBlbnN1cmVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgaWYgKF9pbml0aWFsaXplZCkgcmV0dXJuO1xuICBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZWdpc3RlclNjaGVtYXMoKTtcbiAgcmVnaXN0ZXJBbGxSb3V0ZXMoKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29tcGxldGUgT3BlbkFQSSAzLjEuMCBzcGVjaWZpY2F0aW9uIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciBzcGVjIG1ldGFkYXRhXG4gKiBAcmV0dXJucyBPcGVuQVBJIDMuMSBzcGVjaWZpY2F0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcGVuQXBpU3BlYyhcbiAgb3B0aW9ucz86IE9wZW5BcGlTcGVjT3B0aW9ucyxcbik6IFJldHVyblR5cGU8T3BlbkFwaUdlbmVyYXRvclYzMVsnZ2VuZXJhdGVEb2N1bWVudCddPiB7XG4gIGVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE9wZW5BcGlHZW5lcmF0b3JWMzEocmVnaXN0cnkuZGVmaW5pdGlvbnMpO1xuICByZXR1cm4gZ2VuZXJhdG9yLmdlbmVyYXRlRG9jdW1lbnQoe1xuICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdQaXBlbGluZSBCdWlsZGVyIEFQSScsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCcsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gJ0NJL0NEIFBpcGVsaW5lIEJ1aWxkZXIgUGxhdGZvcm0gQVBJIOKAlCBtYW5hZ2UgcGlwZWxpbmVzLCBwbHVnaW5zLCBtZXNzYWdlcywgcXVvdGFzLCBhbmQgYmlsbGluZy4nLFxuICAgIH0sXG4gICAgc2VydmVyczogW1xuICAgICAgeyB1cmw6IG9wdGlvbnM/LnNlcnZlclVybCA/PyAnL2FwaScsIGRlc2NyaXB0aW9uOiAnQVBJIGJhc2UgcGF0aCcgfSxcbiAgICBdLFxuICB9KTtcbn1cbiJdfQ==
|