@blokjs/trigger-pubsub 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -46,10 +46,9 @@ export class PubSubTrigger extends TriggerBase {
46
46
  */
47
47
  loadNodes() {
48
48
  this.nodeMap.nodes = new NodeMap();
49
- const nodeKeys = Object.keys(this.nodes);
50
- for (const key of nodeKeys) {
51
- this.nodeMap.nodes.addNode(key, this.nodes[key]);
52
- }
49
+ // Register each node under its own node.name (the canonical use: ref, ADR
50
+ // 0002) the Nodes.ts map keys are cosmetic; the collision guard catches dups.
51
+ this.nodeMap.nodes.addNodes(Object.values(this.nodes));
53
52
  }
54
53
  /**
55
54
  * Load workflows into the workflow map
@@ -284,4 +283,4 @@ export class PubSubTrigger extends TriggerBase {
284
283
  }
285
284
  }
286
285
  export default PubSubTrigger;
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHViU3ViVHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJTdWJUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFHSCxPQUFPLEVBRU4sYUFBYSxFQUViLE9BQU8sRUFDUCxXQUFXLEdBRVgsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWdGbEM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGFBQWMsU0FBUSxXQUFXO0lBQzVDLE9BQU8sR0FBa0IsRUFBbUIsQ0FBQztJQUNwQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUkseUJBQXlCLEVBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FDdEMsQ0FBQztJQUNpQixNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUVoRDs7Ozs7O09BTUc7SUFDTyxPQUFPLENBQWlCO0lBRWxDOzs7O09BSUc7SUFDTyxXQUFXLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNOUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFH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QUFHLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztZQUNGLENBQUM7b0JBQVMsQ0FBQztnQkFDVixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFFRCxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHViU3ViVHJpZ2dlciAtIEJhc2UgY2xhc3MgZm9yIHB1Yi9zdWItYmFzZWQgd29ya2Zsb3cgdHJpZ2dlcnNcbiAqXG4gKiBFeHRlbmRzIFRyaWdnZXJCYXNlIHRvIHN1cHBvcnQgcHViL3N1YiB0cmlnZ2VyczpcbiAqIC0gR0NQIFB1Yi9TdWJcbiAqIC0gQVdTIFNOUyAodmlhIFNRUyBzdWJzY3JpcHRpb24pXG4gKiAtIEF6dXJlIFNlcnZpY2UgQnVzXG4gKlxuICogUGF0dGVybjpcbiAqIDEuIGxvYWROb2RlcygpIC0gTG9hZCBhdmFpbGFibGUgbm9kZXMgaW50byBOb2RlTWFwXG4gKiAyLiBsb2FkV29ya2Zsb3dzKCkgLSBMb2FkIHdvcmtmbG93cyB3aXRoIHB1YnN1YiB0cmlnZ2Vyc1xuICogMy4gc3RhcnRTdWJzY3JpYmVyKCkgLSBDb25uZWN0IHRvIHB1Yi9zdWIgYW5kIHN0YXJ0IHJlY2VpdmluZyBtZXNzYWdlc1xuICogNC4gRm9yIGVhY2ggbWVzc2FnZTpcbiAqICAgIC0gTWF0Y2ggd29ya2Zsb3cgYnkgdHJpZ2dlciBjb25maWcgKHRvcGljL3N1YnNjcmlwdGlvbilcbiAqICAgIC0gQ3JlYXRlIGNvbnRleHQgd2l0aCB0aGlzLmNyZWF0ZUNvbnRleHQoKVxuICogICAgLSBQb3B1bGF0ZSBjdHgucmVxdWVzdCB3aXRoIG1lc3NhZ2UgZGF0YVxuICogICAgLSBFeGVjdXRlIHdvcmtmbG93IHZpYSB0aGlzLnJ1bihjdHgpXG4gKiAgICAtIEFjay9uYWNrIGJhc2VkIG9uIHJlc3BvbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQdWJTdWJQcm92aWRlciwgUHViU3ViVHJpZ2dlck9wdHMsIFdvcmtmbG93VjJCdWlsZGVyIH0gZnJvbSBcIkBibG9ranMvaGVscGVyXCI7XG5pbXBvcnQge1xuXHR0eXBlIEJsb2tTZXJ2aWNlLFxuXHREZWZhdWx0TG9nZ2VyLFxuXHR0eXBlIEdsb2JhbE9wdGlvbnMsXG5cdE5vZGVNYXAsXG5cdFRyaWdnZXJCYXNlLFxuXHR0eXBlIFRyaWdnZXJSZXNwb25zZSxcbn0gZnJvbSBcIkBibG9ranMvcnVubmVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyB0eXBlIFNwYW4sIFNwYW5TdGF0dXNDb2RlLCBtZXRyaWNzLCB0cmFjZSB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG4vKipcbiAqIE1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBwdWIvc3ViXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHViU3ViTWVzc2FnZSB7XG5cdC8qKiBVbmlxdWUgbWVzc2FnZSBJRCAqL1xuXHRpZDogc3RyaW5nO1xuXHQvKiogTWVzc2FnZSBib2R5IChwYXJzZWQpICovXG5cdGJvZHk6IHVua25vd247XG5cdC8qKiBNZXNzYWdlIGF0dHJpYnV0ZXMvbWV0YWRhdGEgKi9cblx0YXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqIE9yaWdpbmFsIHJhdyBtZXNzYWdlIGZyb20gcHJvdmlkZXIgKi9cblx0cmF3OiB1bmtub3duO1xuXHQvKiogVG9waWMgbmFtZSAqL1xuXHR0b3BpYzogc3RyaW5nO1xuXHQvKiogU3Vic2NyaXB0aW9uIG5hbWUgKi9cblx0c3Vic2NyaXB0aW9uPzogc3RyaW5nO1xuXHQvKiogUHVibGlzaCB0aW1lc3RhbXAgKi9cblx0cHVibGlzaFRpbWU/OiBEYXRlO1xuXHQvKiogQWNrbm93bGVkZ2UgdGhlIG1lc3NhZ2UgKi9cblx0YWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHQvKiogUmVqZWN0L25hY2sgdGhlIG1lc3NhZ2UgKi9cblx0bmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBQdWIvU3ViIGFkYXB0ZXIgaW50ZXJmYWNlIC0gaW1wbGVtZW50ZWQgYnkgZWFjaCBwcm92aWRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YlN1YkFkYXB0ZXIge1xuXHQvKiogUHJvdmlkZXIgbmFtZSAqL1xuXHRyZWFkb25seSBwcm92aWRlcjogUHViU3ViUHJvdmlkZXI7XG5cblx0LyoqIENvbm5lY3QgdG8gdGhlIHB1Yi9zdWIgc3lzdGVtICovXG5cdGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKiogRGlzY29ubmVjdCBmcm9tIHRoZSBwdWIvc3ViIHN5c3RlbSAqL1xuXHRkaXNjb25uZWN0KCk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqIFN1YnNjcmliZSB0byBhIHRvcGljIGFuZCByZWNlaXZlIG1lc3NhZ2VzICovXG5cdHN1YnNjcmliZShjb25maWc6IFB1YlN1YlRyaWdnZXJPcHRzLCBoYW5kbGVyOiAobWVzc2FnZTogUHViU3ViTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD47XG5cblx0LyoqIFVuc3Vic2NyaWJlIGZyb20gYSB0b3BpYyAqL1xuXHR1bnN1YnNjcmliZShzdWJzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNiDigJQgcHVibGlzaCBhIHNpbmdsZSBtZXNzYWdlIHRvIGEgdG9waWMuIFVzZWQgYnkgdGhlXG5cdCAqIGBAYmxva2pzL3B1YnN1Yi1wdWJsaXNoYCBoZWxwZXIgYW5kIGFueSB3b3JrZmxvdyB0aGF0IGZhbi1vdXRzXG5cdCAqIGV2ZW50cyB0byBzdWJzY3JpYmVycy4gUHJvdmlkZXItcG9ydGFibGU6IGVhY2ggYWRhcHRlciB3cmFwcyBpdHNcblx0ICogbmF0aXZlIHByb2R1Y2VyIGNsaWVudC5cblx0ICpcblx0ICogT3B0aW9uYWwgYHBhcnRpdGlvbktleWAgLyBgb3JkZXJpbmdLZXlgIGlzIGhvbm9yZWQgYnkgcHJvdmlkZXJzXG5cdCAqIHRoYXQgc3VwcG9ydCBwZXIta2V5IG9yZGVyaW5nIChLYWZrYSwgR0NQIFB1Yi9TdWIgb3JkZXJlZFxuXHQgKiBkZWxpdmVyeSkuIElnbm9yZWQgb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGlzaCh0b3BpYzogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duLCBvcHRzPzogeyBwYXJ0aXRpb25LZXk/OiBzdHJpbmc7IG9yZGVyaW5nS2V5Pzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKiBDaGVjayBpZiBjb25uZWN0ZWQgKi9cblx0aXNDb25uZWN0ZWQoKTogYm9vbGVhbjtcblxuXHQvKiogSGVhbHRoIGNoZWNrICovXG5cdGhlYWx0aENoZWNrKCk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogV29ya2Zsb3cgbW9kZWwgd2l0aCBwdWIvc3ViIHRyaWdnZXIgY29uZmlndXJhdGlvblxuICovXG5pbnRlcmZhY2UgUHViU3ViV29ya2Zsb3dNb2RlbCB7XG5cdHBhdGg6IHN0cmluZztcblx0Y29uZmlnOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHZlcnNpb246IHN0cmluZztcblx0XHR0cmlnZ2VyPzoge1xuXHRcdFx0cHVic3ViPzogUHViU3ViVHJpZ2dlck9wdHM7XG5cdFx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHRcdH07XG5cdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0fTtcbn1cblxuLyoqXG4gKiBQdWJTdWJUcmlnZ2VyIC0gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcHViL3N1Yi1iYXNlZCB0cmlnZ2Vyc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUHViU3ViVHJpZ2dlciBleHRlbmRzIFRyaWdnZXJCYXNlIHtcblx0cHJvdGVjdGVkIG5vZGVNYXA6IEdsb2JhbE9wdGlvbnMgPSB7fSBhcyBHbG9iYWxPcHRpb25zO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfTkFNRSB8fCBcInRyaWdnZXItcHVic3ViLXdvcmtmbG93XCIsXG5cdFx0cHJvY2Vzcy5lbnYuUFJPSkVDVF9WRVJTSU9OIHx8IFwiMC4wLjFcIixcblx0KTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlciA9IG5ldyBEZWZhdWx0TG9nZ2VyKCk7XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNiDigJQgYmFjay1jb21wYXQgZGVmYXVsdCBhZGFwdGVyLiBXaGVuIHN1YmNsYXNzZXMgc2V0XG5cdCAqIGBwcm90ZWN0ZWQgYWRhcHRlciA9IG5ldyBHQ1BQdWJTdWJBZGFwdGVyKClgIChwcmUtdjAuNyBwYXR0ZXJuKSxcblx0ICogQUxMIHdvcmtmbG93cyByb3V0ZSB0aHJvdWdoIGl0IHJlZ2FyZGxlc3Mgb2YgdGhlaXIgYHByb3ZpZGVyYFxuXHQgKiBmaWVsZC4gV2hlbiB1bnNldCwgZWFjaCB3b3JrZmxvdydzIGBwcm92aWRlcmAgaXMgcmVzb2x2ZWQgdmlhXG5cdCAqIHRoZSBmYWN0b3J5LlxuXHQgKi9cblx0cHJvdGVjdGVkIGFkYXB0ZXI/OiBQdWJTdWJBZGFwdGVyO1xuXG5cdC8qKlxuXHQgKiB2MC43IFBSIDYg4oCUIGFkYXB0ZXIgcG9vbCwga2V5ZWQgYnkgcHJvdmlkZXIuIFBvcHVsYXRlZCBsYXppbHkgaW5cblx0ICogYGxpc3RlbigpYCBhcyB3b3JrZmxvd3MgYXJlIG1hdGNoZWQgdG8gcHJvdmlkZXJzLiBEcmFpbmVkIGluXG5cdCAqIGBzdG9wKClgLiBPbmUgYWRhcHRlciAob25lIGJyb2tlciBjb25uZWN0aW9uKSBwZXIgcHJvdmlkZXIuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYWRhcHRlclBvb2w6IE1hcDxzdHJpbmcsIFB1YlN1YkFkYXB0ZXI+ID0gbmV3IE1hcCgpO1xuXG5cdC8vIFN1YmNsYXNzZXMgcHJvdmlkZSB0aGVzZVxuXHRwcm90ZWN0ZWQgYWJzdHJhY3Qgbm9kZXM6IFJlY29yZDxzdHJpbmcsIEJsb2tTZXJ2aWNlPHVua25vd24+Pjtcblx0cHJvdGVjdGVkIGFic3RyYWN0IHdvcmtmbG93czogUmVjb3JkPHN0cmluZywgV29ya2Zsb3dWMkJ1aWxkZXI+O1xuXG5cdC8qKlxuXHQgKiBMb2FkIG5vZGVzIGludG8gdGhlIG5vZGUgbWFwXG5cdCAqL1xuXHRsb2FkTm9kZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLm5vZGVzID0gbmV3IE5vZGVNYXAoKTtcblx0XHRjb25zdCBub2RlS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubm9kZXMpO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIG5vZGVLZXlzKSB7XG5cdFx0XHR0aGlzLm5vZGVNYXAubm9kZXMuYWRkTm9kZShrZXksIHRoaXMubm9kZXNba2V5XSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvYWQgd29ya2Zsb3dzIGludG8gdGhlIHdvcmtmbG93IG1hcFxuXHQgKi9cblx0bG9hZFdvcmtmbG93cygpOiB2b2lkIHtcblx0XHR0aGlzLm5vZGVNYXAud29ya2Zsb3dzID0gdGhpcy53b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogU3RhcnQgdGhlIHB1Yi9zdWIgc3Vic2NyaWJlciAtIG1haW4gZW50cnkgcG9pbnRcblx0ICovXG5cdGFzeW5jIGxpc3RlbigpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRDb3VudGVyKCk7XG5cblx0XHQvLyBJbml0aWFsaXplIG5vZGVzIGFuZCB3b3JrZmxvd3MgKGNhbGxlZCBoZXJlIGJlY2F1c2Ugc3ViY2xhc3MgcHJvcGVydGllc1xuXHRcdC8vIGFyZW4ndCBhdmFpbGFibGUgaW4gcGFyZW50IGNvbnN0cnVjdG9yKVxuXHRcdHRoaXMubG9hZE5vZGVzKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cblx0XHQvLyBGNSDCtyBpbnN0YWxsIGNyYXNoL29ycGhhbi9qYW5pdG9yL3NodXRkb3duIGhhbmRsZXJzIHNvIGFcblx0XHQvLyBwdWJzdWItb25seSBwcm9jZXNzIGdldHMgdGhlIHNhbWUgcnVuLXN0YXRlIGludGVncml0eSArIHN0b3JhZ2Vcblx0XHQvLyBoeWdpZW5lIGd1YXJhbnRlZXMgYXMgSFRUUC9Xb3JrZXIuIEVhY2ggaGFuZGxlciBpcyBpZGVtcG90ZW50LlxuXHRcdHRoaXMuaW5zdGFsbE9wZXJhdGlvbmFsSGFuZGxlcnModGhpcy5sb2dnZXIpO1xuXG5cdFx0Ly8gRjYgwrcgZmVlZCB0aGUgV29ya2Zsb3dSZWdpc3RyeSBmcm9tIHRoZSBub2RlTWFwIHNvIGBzdWJ3b3JrZmxvdzpgXG5cdFx0Ly8gc3RlcHMgKyB0cmlnZ2VyL3dvcmtmbG93L3Byb2Nlc3MtZ2xvYmFsIG1pZGRsZXdhcmUgcmVzb2x2ZSBpbiBhXG5cdFx0Ly8gcHVic3ViLW9ubHkgZGVwbG95bWVudC5cblx0XHR0aGlzLnJlZ2lzdGVyV29ya2Zsb3dzRnJvbU5vZGVNYXAodGhpcy5sb2dnZXIpO1xuXG5cdFx0Ly8gRjE0IMK3IHNlZWQgdGhlIHByb2Nlc3MtZ2xvYmFsIG1pZGRsZXdhcmUgY2hhaW4gZnJvbVxuXHRcdC8vIGBCTE9LX0dMT0JBTF9NSURETEVXQVJFYCAoaWRlbXBvdGVudCDigJQgcHJvZ3JhbW1hdGljXG5cdFx0Ly8gc2V0R2xvYmFsTWlkZGxld2FyZSB0YWtlcyBwcmVjZWRlbmNlKS5cblx0XHR0aGlzLnNlZWRHbG9iYWxNaWRkbGV3YXJlRnJvbUVudih0aGlzLmxvZ2dlcik7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gRmluZCBhbGwgd29ya2Zsb3dzIHdpdGggcHViL3N1YiB0cmlnZ2Vyc1xuXHRcdFx0Y29uc3QgcHVic3ViV29ya2Zsb3dzID0gdGhpcy5nZXRQdWJTdWJXb3JrZmxvd3MoKTtcblxuXHRcdFx0aWYgKHB1YnN1YldvcmtmbG93cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKFwiTm8gd29ya2Zsb3dzIHdpdGggcHViL3N1YiB0cmlnZ2VycyBmb3VuZFwiKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdWJzY3JpYmUgdG8gZWFjaCB0b3BpYyB2aWEgdGhlIGFkYXB0ZXIgdGhhdCBvd25zIGl0c1xuXHRcdFx0Ly8gcHJvdmlkZXIuIFBlci13b3JrZmxvdyBgcHJvdmlkZXJgIGZpZWxkIHdpdGggc3ViY2xhc3MtXG5cdFx0XHQvLyBhZGFwdGVyIGJhY2stY29tcGF0IChoYW5kbGVkIGluIHJlc29sdmVBZGFwdGVyRm9yV29ya2Zsb3cpLlxuXHRcdFx0Zm9yIChjb25zdCB3b3JrZmxvdyBvZiBwdWJzdWJXb3JrZmxvd3MpIHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gd29ya2Zsb3cuY29uZmlnLnRyaWdnZXI/LnB1YnN1YiBhcyBQdWJTdWJUcmlnZ2VyT3B0cztcblx0XHRcdFx0Y29uc3QgYWRhcHRlciA9IGF3YWl0IHRoaXMucmVzb2x2ZUFkYXB0ZXJGb3JXb3JrZmxvdyhjb25maWcpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXG5cdFx0XHRcdFx0YFN1YnNjcmliaW5nIHRvIHRvcGljOiAke2NvbmZpZy50b3BpY30gdmlhICR7YWRhcHRlci5wcm92aWRlcn0gKHN1YnNjcmlwdGlvbjogJHtjb25maWcuc3Vic2NyaXB0aW9uID8/IFwiPGF1dG8+XCJ9LCBncm91cDogJHtjb25maWcuY29uc3VtZXJHcm91cCA/PyBcIjxmYW4tb3V0PlwifSlgLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGF3YWl0IGFkYXB0ZXIuc3Vic2NyaWJlKGNvbmZpZywgYXN5bmMgKG1lc3NhZ2UpID0+IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZSwgd29ya2Zsb3csIGNvbmZpZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYFB1Yi9TdWIgdHJpZ2dlciBzdGFydGVkLiBMaXN0ZW5pbmcgdG8gJHtwdWJzdWJXb3JrZmxvd3MubGVuZ3RofSBzdWJzY3JpcHRpb24ocylgKTtcblxuXHRcdFx0Ly8gRW5hYmxlIEhNUiBpbiBkZXZlbG9wbWVudCBtb2RlXG5cdFx0XHRpZiAocHJvY2Vzcy5lbnYuQkxPS19ITVIgPT09IFwidHJ1ZVwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lbmFibGVIb3RSZWxvYWQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0YXJ0IHB1Yi9zdWIgdHJpZ2dlcjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3RvcCB0aGUgcHViL3N1YiBzdWJzY3JpYmVyIOKAlCBkcmFpbnMgZXZlcnkgYWRhcHRlciBpbiB0aGUgcG9vbFxuXHQgKiBwbHVzIHRoZSBzdWJjbGFzcy1zZXQgYWRhcHRlciAoaWYgYW55KS5cblx0ICovXG5cdGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Zm9yIChjb25zdCBhZGFwdGVyIG9mIHRoaXMuYWRhcHRlclBvb2wudmFsdWVzKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGFkYXB0ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbYmxva11bcHVic3ViXSBkaXNjb25uZWN0IGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFkYXB0ZXJQb29sLmNsZWFyKCk7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiUHViL1N1YiB0cmlnZ2VyIHN0b3BwZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogdjAuNyBQUiA2IOKAlCBwaWNrIHRoZSBhZGFwdGVyIGZvciBhIHdvcmtmbG93J3MgYHByb3ZpZGVyYCBmaWVsZC5cblx0ICpcblx0ICogUmVzb2x1dGlvbiBvcmRlcjpcblx0ICogICAxLiBTdWJjbGFzcy1zZXQgYHRoaXMuYWRhcHRlcmAgKGJhY2stY29tcGF0KS5cblx0ICogICAyLiBQZXItd29ya2Zsb3cgYHByb3ZpZGVyYCBmaWVsZCB2aWEgdGhlIGZhY3RvcnkuXG5cdCAqICAgMy4gYEJMT0tfUFVCU1VCX0FEQVBURVJgIGVudiB2YXIuXG5cdCAqICAgNC4gYFwibmF0c1wiYCBmYWxsYmFjay5cblx0ICpcblx0ICogQWRhcHRlcnMgYXJlIGNvbm5lY3RlZCBvbiBmaXJzdCB1c2UgYW5kIHBvb2xlZCBwZXIgcHJvdmlkZXIuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgcmVzb2x2ZUFkYXB0ZXJGb3JXb3JrZmxvdyhjb25maWc6IFB1YlN1YlRyaWdnZXJPcHRzKTogUHJvbWlzZTxQdWJTdWJBZGFwdGVyPiB7XG5cdFx0aWYgKHRoaXMuYWRhcHRlcikge1xuXHRcdFx0aWYgKCF0aGlzLmFkYXB0ZXIuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmFkYXB0ZXIuY29ubmVjdCgpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYENvbm5lY3RlZCB0byAke3RoaXMuYWRhcHRlci5wcm92aWRlcn0gcHViL3N1YiBzeXN0ZW0gKHN1YmNsYXNzIGFkYXB0ZXIpYCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFkYXB0ZXJQb29sLnNldCh0aGlzLmFkYXB0ZXIucHJvdmlkZXIsIHRoaXMuYWRhcHRlcik7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGFwdGVyO1xuXHRcdH1cblx0XHRjb25zdCB7IHJlc29sdmVQcm92aWRlciwgY3JlYXRlUHViU3ViQWRhcHRlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi9hZGFwdGVycy9mYWN0b3J5XCIpO1xuXHRcdGNvbnN0IHByb3ZpZGVyID0gcmVzb2x2ZVByb3ZpZGVyKGNvbmZpZy5wcm92aWRlcik7XG5cdFx0bGV0IGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJQb29sLmdldChwcm92aWRlcik7XG5cdFx0aWYgKCFhZGFwdGVyKSB7XG5cdFx0XHRhZGFwdGVyID0gY3JlYXRlUHViU3ViQWRhcHRlcihwcm92aWRlcik7XG5cdFx0XHRhd2FpdCBhZGFwdGVyLmNvbm5lY3QoKTtcblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgQ29ubmVjdGVkIHRvICR7YWRhcHRlci5wcm92aWRlcn0gcHViL3N1YiBzeXN0ZW1gKTtcblx0XHRcdHRoaXMuYWRhcHRlclBvb2wuc2V0KHByb3ZpZGVyLCBhZGFwdGVyKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFkYXB0ZXI7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgb25IbXJXb3JrZmxvd0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbSE1SXSBQdWIvU3ViIHdvcmtmbG93IGNoYW5nZWQsIHJlbG9hZGluZy4uLlwiKTtcblx0XHRhd2FpdCB0aGlzLndhaXRGb3JJbkZsaWdodFJlcXVlc3RzKCk7XG5cdFx0YXdhaXQgdGhpcy5zdG9wKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cdFx0YXdhaXQgdGhpcy5saXN0ZW4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHdvcmtmbG93cyB0aGF0IGhhdmUgcHViL3N1YiB0cmlnZ2Vyc1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldFB1YlN1YldvcmtmbG93cygpOiBQdWJTdWJXb3JrZmxvd01vZGVsW10ge1xuXHRcdGNvbnN0IHdvcmtmbG93czogUHViU3ViV29ya2Zsb3dNb2RlbFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IFtwYXRoLCB3b3JrZmxvd10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ub2RlTWFwLndvcmtmbG93cyB8fCB7fSkpIHtcblx0XHRcdC8vIFdvcmtmbG93VjJCdWlsZGVyIGV4cG9zZXMgYSBfY29uZmlnIHByb3BlcnR5XG5cdFx0XHRjb25zdCB3b3JrZmxvd0NvbmZpZyA9ICh3b3JrZmxvdyBhcyB1bmtub3duIGFzIHsgX2NvbmZpZzogUHViU3ViV29ya2Zsb3dNb2RlbFtcImNvbmZpZ1wiXSB9KS5fY29uZmlnO1xuXG5cdFx0XHRpZiAod29ya2Zsb3dDb25maWc/LnRyaWdnZXIpIHtcblx0XHRcdFx0Y29uc3QgdHJpZ2dlclR5cGUgPSBPYmplY3Qua2V5cyh3b3JrZmxvd0NvbmZpZy50cmlnZ2VyKVswXTtcblxuXHRcdFx0XHRpZiAodHJpZ2dlclR5cGUgPT09IFwicHVic3ViXCIgJiYgd29ya2Zsb3dDb25maWcudHJpZ2dlci5wdWJzdWIpIHtcblx0XHRcdFx0XHR3b3JrZmxvd3MucHVzaCh7XG5cdFx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdFx0Y29uZmlnOiB3b3JrZmxvd0NvbmZpZyxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGFuIGluY29taW5nIG1lc3NhZ2Vcblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBoYW5kbGVNZXNzYWdlKFxuXHRcdG1lc3NhZ2U6IFB1YlN1Yk1lc3NhZ2UsXG5cdFx0d29ya2Zsb3c6IFB1YlN1YldvcmtmbG93TW9kZWwsXG5cdFx0Y29uZmlnOiBQdWJTdWJUcmlnZ2VyT3B0cyxcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaWQgPSBtZXNzYWdlLmlkIHx8IHV1aWQoKTtcblx0XHRjb25zdCBkZWZhdWx0TWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKFwiZGVmYXVsdFwiKTtcblx0XHRjb25zdCBwdWJzdWJNZXNzYWdlcyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwicHVic3ViX21lc3NhZ2VzXCIsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlB1Yi9TdWIgbWVzc2FnZXMgcHJvY2Vzc2VkXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcHVic3ViRXJyb3JzID0gZGVmYXVsdE1ldGVyLmNyZWF0ZUNvdW50ZXIoXCJwdWJzdWJfZXJyb3JzXCIsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlB1Yi9TdWIgbWVzc2FnZSBwcm9jZXNzaW5nIGVycm9yc1wiLFxuXHRcdH0pO1xuXG5cdFx0YXdhaXQgdGhpcy50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKGBwdWJzdWI6JHtjb25maWcudG9waWN9YCwgYXN5bmMgKHNwYW46IFNwYW4pID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cblx0XHRcdFx0Ly8gSW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHdvcmtmbG93XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5pbml0KHdvcmtmbG93LnBhdGgsIHRoaXMubm9kZU1hcCk7XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbnRleHRcblx0XHRcdFx0Y29uc3QgY3R4OiBDb250ZXh0ID0gdGhpcy5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCwgd29ya2Zsb3cucGF0aCwgaWQpO1xuXG5cdFx0XHRcdC8vIFBvcHVsYXRlIHJlcXVlc3Qgd2l0aCBtZXNzYWdlIGRhdGFcblx0XHRcdFx0Y3R4LnJlcXVlc3QgPSB7XG5cdFx0XHRcdFx0Ym9keTogbWVzc2FnZS5ib2R5LFxuXHRcdFx0XHRcdGhlYWRlcnM6IG1lc3NhZ2UuYXR0cmlidXRlcyxcblx0XHRcdFx0XHRxdWVyeToge30sXG5cdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHR0b3BpYzogbWVzc2FnZS50b3BpYyxcblx0XHRcdFx0XHRcdHN1YnNjcmlwdGlvbjogbWVzc2FnZS5zdWJzY3JpcHRpb24gfHwgXCJcIixcblx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZS5pZCxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9IGFzIHVua25vd24gYXMgUmVxdWVzdENvbnRleHQ7XG5cblx0XHRcdFx0Ly8gU3RvcmUgbWVzc2FnZSBtZXRhZGF0YSBpbiBjb250ZXh0XG5cdFx0XHRcdGlmICghY3R4LnZhcnMpIGN0eC52YXJzID0ge307XG5cdFx0XHRcdGN0eC52YXJzLl9wdWJzdWJfbWVzc2FnZSA9IHtcblx0XHRcdFx0XHR0b3BpYzogbWVzc2FnZS50b3BpYyxcblx0XHRcdFx0XHRzdWJzY3JpcHRpb246IG1lc3NhZ2Uuc3Vic2NyaXB0aW9uIHx8IFwiXCIsXG5cdFx0XHRcdFx0cHVibGlzaFRpbWU6IG1lc3NhZ2UucHVibGlzaFRpbWU/LnRvSVNPU3RyaW5nKCkgPz8gXCJcIixcblx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlLmF0dHJpYnV0ZXMpLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBQcm9jZXNzaW5nIG1lc3NhZ2UgZnJvbSAke2NvbmZpZy50b3BpY306ICR7aWR9YCk7XG5cblx0XHRcdFx0Ly8gRjEgwrcgYXBwbHkgdGhlIG1lcmdlZCBtaWRkbGV3YXJlIGNoYWluIChwcm9jZXNzLWdsb2JhbCDihpJcblx0XHRcdFx0Ly8gd29ya2Zsb3ctbGV2ZWwg4oaSIHRyaWdnZXItbGV2ZWwpIGJlZm9yZSB0aGUgbWFpbiB3b3JrZmxvd1xuXHRcdFx0XHQvLyBib2R5LCBhZnRlciBjdHgucmVxdWVzdCBpcyBwb3B1bGF0ZWQgc28gbWlkZGxld2FyZSBzZWVzIHRoZVxuXHRcdFx0XHQvLyByZWFsIGJvZHkvaGVhZGVycy4gQSB0aHJvd2luZyBtaWRkbGV3YXJlIHByb3BhZ2F0ZXMgdG8gdGhlXG5cdFx0XHRcdC8vIG91dGVyIGNhdGNoIChuYWNrKS4gUHJlLWZpeCBwdWJzdWIgc2lsZW50bHkgc2tpcHBlZCBBTExcblx0XHRcdFx0Ly8gbWlkZGxld2FyZSDigJQgaW5jbHVkaW5nIGF1dGggZ2F0ZXMuXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwbHlNaWRkbGV3YXJlQ2hhaW4oY3R4LCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgd29ya2Zsb3dcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2U6IFRyaWdnZXJSZXNwb25zZSA9IGF3YWl0IHRoaXMucnVuKGN0eCk7XG5cdFx0XHRcdGNvbnN0IGVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdC8vIFNldCBzcGFuIGF0dHJpYnV0ZXNcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIHRydWUpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIm1lc3NhZ2VfaWRcIiwgaWQpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInRvcGljXCIsIGNvbmZpZy50b3BpYyk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3Vic2NyaXB0aW9uXCIsIGNvbmZpZy5zdWJzY3JpcHRpb24gPz8gXCI8YXV0bz5cIik7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwicHJvdmlkZXJcIiwgY29uZmlnLnByb3ZpZGVyID8/IFwiPGRlZmF1bHQ+XCIpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImVsYXBzZWRfbXNcIiwgZW5kIC0gc3RhcnQpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdC8vIFJlY29yZCBtZXRyaWNzXG5cdFx0XHRcdHB1YnN1Yk1lc3NhZ2VzLmFkZCgxLCB7XG5cdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHR0b3BpYzogY29uZmlnLnRvcGljLFxuXHRcdFx0XHRcdHN1YnNjcmlwdGlvbjogY29uZmlnLnN1YnNjcmlwdGlvbiA/PyBcIjxhdXRvPlwiLFxuXHRcdFx0XHRcdHByb3ZpZGVyOiBjb25maWcucHJvdmlkZXIgPz8gXCI8ZGVmYXVsdD5cIixcblx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRzdWNjZXNzOiBcInRydWVcIixcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y3R4LmxvZ2dlci5sb2coYE1lc3NhZ2UgcHJvY2Vzc2VkIGluICR7KGVuZCAtIHN0YXJ0KS50b0ZpeGVkKDIpfW1zOiAke2lkfWApO1xuXG5cdFx0XHRcdC8vIEFja25vd2xlZGdlIG1lc3NhZ2UgaWYgY29uZmlndXJlZFxuXHRcdFx0XHRpZiAoY29uZmlnLmFjayAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlLmFjaygpO1xuXHRcdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBNZXNzYWdlIGFja25vd2xlZGdlZDogJHtpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlO1xuXG5cdFx0XHRcdC8vIFNldCBzcGFuIGVycm9yXG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yIGFzIEVycm9yKTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH0pO1xuXG5cdFx0XHRcdC8vIFJlY29yZCBlcnJvciBtZXRyaWNzXG5cdFx0XHRcdHB1YnN1YkVycm9ycy5hZGQoMSwge1xuXHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0dG9waWM6IGNvbmZpZy50b3BpYyxcblx0XHRcdFx0XHRzdWJzY3JpcHRpb246IGNvbmZpZy5zdWJzY3JpcHRpb24gPz8gXCI8YXV0bz5cIixcblx0XHRcdFx0XHRwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyID8/IFwiPGRlZmF1bHQ+XCIsXG5cdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogdGhpcy5jb25maWd1cmF0aW9uPy5uYW1lIHx8IFwidW5rbm93blwiLFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgbWVzc2FnZSAke2lkfTogJHtlcnJvck1lc3NhZ2V9YCwgKGVycm9yIGFzIEVycm9yKS5zdGFjayk7XG5cblx0XHRcdFx0Ly8gTmFjayBtZXNzYWdlXG5cdFx0XHRcdGlmIChjb25maWcuYWNrICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2UubmFjaygpO1xuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgTWVzc2FnZSBuYWNrZWQ6ICR7aWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHNwYW4uZW5kKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHViU3ViVHJpZ2dlcjtcbiJdfQ==
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHViU3ViVHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJTdWJUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFHSCxPQUFPLEVBRU4sYUFBYSxFQUViLE9BQU8sRUFDUCxXQUFXLEdBRVgsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWdGbEM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGFBQWMsU0FBUSxXQUFXO0lBQzVDLE9BQU8sR0FBa0IsRUFBbUIsQ0FBQztJQUNwQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUkseUJBQXlCLEVBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FDdEMsQ0FBQztJQUNpQixNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUVoRDs7Ozs7O09BTUc7SUFDTyxPQUFPLENBQWlCO0lBRWxDOzs7O09BSUc7SUFDTyxXQUFXLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNOUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQywwRUFBMEU7UUFDMUUsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQTBCLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdB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QUcsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztZQUNGLENBQUM7b0JBQVMsQ0FBQztnQkFDVixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Q7QUFFRCxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHViU3ViVHJpZ2dlciAtIEJhc2UgY2xhc3MgZm9yIHB1Yi9zdWItYmFzZWQgd29ya2Zsb3cgdHJpZ2dlcnNcbiAqXG4gKiBFeHRlbmRzIFRyaWdnZXJCYXNlIHRvIHN1cHBvcnQgcHViL3N1YiB0cmlnZ2VyczpcbiAqIC0gR0NQIFB1Yi9TdWJcbiAqIC0gQVdTIFNOUyAodmlhIFNRUyBzdWJzY3JpcHRpb24pXG4gKiAtIEF6dXJlIFNlcnZpY2UgQnVzXG4gKlxuICogUGF0dGVybjpcbiAqIDEuIGxvYWROb2RlcygpIC0gTG9hZCBhdmFpbGFibGUgbm9kZXMgaW50byBOb2RlTWFwXG4gKiAyLiBsb2FkV29ya2Zsb3dzKCkgLSBMb2FkIHdvcmtmbG93cyB3aXRoIHB1YnN1YiB0cmlnZ2Vyc1xuICogMy4gc3RhcnRTdWJzY3JpYmVyKCkgLSBDb25uZWN0IHRvIHB1Yi9zdWIgYW5kIHN0YXJ0IHJlY2VpdmluZyBtZXNzYWdlc1xuICogNC4gRm9yIGVhY2ggbWVzc2FnZTpcbiAqICAgIC0gTWF0Y2ggd29ya2Zsb3cgYnkgdHJpZ2dlciBjb25maWcgKHRvcGljL3N1YnNjcmlwdGlvbilcbiAqICAgIC0gQ3JlYXRlIGNvbnRleHQgd2l0aCB0aGlzLmNyZWF0ZUNvbnRleHQoKVxuICogICAgLSBQb3B1bGF0ZSBjdHgucmVxdWVzdCB3aXRoIG1lc3NhZ2UgZGF0YVxuICogICAgLSBFeGVjdXRlIHdvcmtmbG93IHZpYSB0aGlzLnJ1bihjdHgpXG4gKiAgICAtIEFjay9uYWNrIGJhc2VkIG9uIHJlc3BvbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQdWJTdWJQcm92aWRlciwgUHViU3ViVHJpZ2dlck9wdHMsIFdvcmtmbG93VjJCdWlsZGVyIH0gZnJvbSBcIkBibG9ranMvaGVscGVyXCI7XG5pbXBvcnQge1xuXHR0eXBlIEJsb2tTZXJ2aWNlLFxuXHREZWZhdWx0TG9nZ2VyLFxuXHR0eXBlIEdsb2JhbE9wdGlvbnMsXG5cdE5vZGVNYXAsXG5cdFRyaWdnZXJCYXNlLFxuXHR0eXBlIFRyaWdnZXJSZXNwb25zZSxcbn0gZnJvbSBcIkBibG9ranMvcnVubmVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIE5vZGVCYXNlLCBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAYmxva2pzL3NoYXJlZFwiO1xuaW1wb3J0IHsgdHlwZSBTcGFuLCBTcGFuU3RhdHVzQ29kZSwgbWV0cmljcywgdHJhY2UgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvYXBpXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcblxuLyoqXG4gKiBNZXNzYWdlIHJlY2VpdmVkIGZyb20gcHViL3N1YlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YlN1Yk1lc3NhZ2Uge1xuXHQvKiogVW5pcXVlIG1lc3NhZ2UgSUQgKi9cblx0aWQ6IHN0cmluZztcblx0LyoqIE1lc3NhZ2UgYm9keSAocGFyc2VkKSAqL1xuXHRib2R5OiB1bmtub3duO1xuXHQvKiogTWVzc2FnZSBhdHRyaWJ1dGVzL21ldGFkYXRhICovXG5cdGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdC8qKiBPcmlnaW5hbCByYXcgbWVzc2FnZSBmcm9tIHByb3ZpZGVyICovXG5cdHJhdzogdW5rbm93bjtcblx0LyoqIFRvcGljIG5hbWUgKi9cblx0dG9waWM6IHN0cmluZztcblx0LyoqIFN1YnNjcmlwdGlvbiBuYW1lICovXG5cdHN1YnNjcmlwdGlvbj86IHN0cmluZztcblx0LyoqIFB1Ymxpc2ggdGltZXN0YW1wICovXG5cdHB1Ymxpc2hUaW1lPzogRGF0ZTtcblx0LyoqIEFja25vd2xlZGdlIHRoZSBtZXNzYWdlICovXG5cdGFjazogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0LyoqIFJlamVjdC9uYWNrIHRoZSBtZXNzYWdlICovXG5cdG5hY2s6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogUHViL1N1YiBhZGFwdGVyIGludGVyZmFjZSAtIGltcGxlbWVudGVkIGJ5IGVhY2ggcHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJTdWJBZGFwdGVyIHtcblx0LyoqIFByb3ZpZGVyIG5hbWUgKi9cblx0cmVhZG9ubHkgcHJvdmlkZXI6IFB1YlN1YlByb3ZpZGVyO1xuXG5cdC8qKiBDb25uZWN0IHRvIHRoZSBwdWIvc3ViIHN5c3RlbSAqL1xuXHRjb25uZWN0KCk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqIERpc2Nvbm5lY3QgZnJvbSB0aGUgcHViL3N1YiBzeXN0ZW0gKi9cblx0ZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKiBTdWJzY3JpYmUgdG8gYSB0b3BpYyBhbmQgcmVjZWl2ZSBtZXNzYWdlcyAqL1xuXHRzdWJzY3JpYmUoY29uZmlnOiBQdWJTdWJUcmlnZ2VyT3B0cywgaGFuZGxlcjogKG1lc3NhZ2U6IFB1YlN1Yk1lc3NhZ2UpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKiBVbnN1YnNjcmliZSBmcm9tIGEgdG9waWMgKi9cblx0dW5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiB2MC43IFBSIDYg4oCUIHB1Ymxpc2ggYSBzaW5nbGUgbWVzc2FnZSB0byBhIHRvcGljLiBVc2VkIGJ5IHRoZVxuXHQgKiBgQGJsb2tqcy9wdWJzdWItcHVibGlzaGAgaGVscGVyIGFuZCBhbnkgd29ya2Zsb3cgdGhhdCBmYW4tb3V0c1xuXHQgKiBldmVudHMgdG8gc3Vic2NyaWJlcnMuIFByb3ZpZGVyLXBvcnRhYmxlOiBlYWNoIGFkYXB0ZXIgd3JhcHMgaXRzXG5cdCAqIG5hdGl2ZSBwcm9kdWNlciBjbGllbnQuXG5cdCAqXG5cdCAqIE9wdGlvbmFsIGBwYXJ0aXRpb25LZXlgIC8gYG9yZGVyaW5nS2V5YCBpcyBob25vcmVkIGJ5IHByb3ZpZGVyc1xuXHQgKiB0aGF0IHN1cHBvcnQgcGVyLWtleSBvcmRlcmluZyAoS2Fma2EsIEdDUCBQdWIvU3ViIG9yZGVyZWRcblx0ICogZGVsaXZlcnkpLiBJZ25vcmVkIG90aGVyd2lzZS5cblx0ICovXG5cdHB1Ymxpc2godG9waWM6IHN0cmluZywgcGF5bG9hZDogdW5rbm93biwgb3B0cz86IHsgcGFydGl0aW9uS2V5Pzogc3RyaW5nOyBvcmRlcmluZ0tleT86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKiogQ2hlY2sgaWYgY29ubmVjdGVkICovXG5cdGlzQ29ubmVjdGVkKCk6IGJvb2xlYW47XG5cblx0LyoqIEhlYWx0aCBjaGVjayAqL1xuXHRoZWFsdGhDaGVjaygpOiBQcm9taXNlPGJvb2xlYW4+O1xufVxuXG4vKipcbiAqIFdvcmtmbG93IG1vZGVsIHdpdGggcHViL3N1YiB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25cbiAqL1xuaW50ZXJmYWNlIFB1YlN1YldvcmtmbG93TW9kZWwge1xuXHRwYXRoOiBzdHJpbmc7XG5cdGNvbmZpZzoge1xuXHRcdG5hbWU6IHN0cmluZztcblx0XHR2ZXJzaW9uOiBzdHJpbmc7XG5cdFx0dHJpZ2dlcj86IHtcblx0XHRcdHB1YnN1Yj86IFB1YlN1YlRyaWdnZXJPcHRzO1xuXHRcdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0XHR9O1xuXHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdH07XG59XG5cbi8qKlxuICogUHViU3ViVHJpZ2dlciAtIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHB1Yi9zdWItYmFzZWQgdHJpZ2dlcnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFB1YlN1YlRyaWdnZXIgZXh0ZW5kcyBUcmlnZ2VyQmFzZSB7XG5cdHByb3RlY3RlZCBub2RlTWFwOiBHbG9iYWxPcHRpb25zID0ge30gYXMgR2xvYmFsT3B0aW9ucztcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJ0cmlnZ2VyLXB1YnN1Yi13b3JrZmxvd1wiLFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfVkVSU0lPTiB8fCBcIjAuMC4xXCIsXG5cdCk7XG5cdHByb3RlY3RlZCByZWFkb25seSBsb2dnZXIgPSBuZXcgRGVmYXVsdExvZ2dlcigpO1xuXG5cdC8qKlxuXHQgKiB2MC43IFBSIDYg4oCUIGJhY2stY29tcGF0IGRlZmF1bHQgYWRhcHRlci4gV2hlbiBzdWJjbGFzc2VzIHNldFxuXHQgKiBgcHJvdGVjdGVkIGFkYXB0ZXIgPSBuZXcgR0NQUHViU3ViQWRhcHRlcigpYCAocHJlLXYwLjcgcGF0dGVybiksXG5cdCAqIEFMTCB3b3JrZmxvd3Mgcm91dGUgdGhyb3VnaCBpdCByZWdhcmRsZXNzIG9mIHRoZWlyIGBwcm92aWRlcmBcblx0ICogZmllbGQuIFdoZW4gdW5zZXQsIGVhY2ggd29ya2Zsb3cncyBgcHJvdmlkZXJgIGlzIHJlc29sdmVkIHZpYVxuXHQgKiB0aGUgZmFjdG9yeS5cblx0ICovXG5cdHByb3RlY3RlZCBhZGFwdGVyPzogUHViU3ViQWRhcHRlcjtcblxuXHQvKipcblx0ICogdjAuNyBQUiA2IOKAlCBhZGFwdGVyIHBvb2wsIGtleWVkIGJ5IHByb3ZpZGVyLiBQb3B1bGF0ZWQgbGF6aWx5IGluXG5cdCAqIGBsaXN0ZW4oKWAgYXMgd29ya2Zsb3dzIGFyZSBtYXRjaGVkIHRvIHByb3ZpZGVycy4gRHJhaW5lZCBpblxuXHQgKiBgc3RvcCgpYC4gT25lIGFkYXB0ZXIgKG9uZSBicm9rZXIgY29ubmVjdGlvbikgcGVyIHByb3ZpZGVyLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFkYXB0ZXJQb29sOiBNYXA8c3RyaW5nLCBQdWJTdWJBZGFwdGVyPiA9IG5ldyBNYXAoKTtcblxuXHQvLyBTdWJjbGFzc2VzIHByb3ZpZGUgdGhlc2Vcblx0cHJvdGVjdGVkIGFic3RyYWN0IG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBCbG9rU2VydmljZTx1bmtub3duPj47XG5cdHByb3RlY3RlZCBhYnN0cmFjdCB3b3JrZmxvd3M6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93VjJCdWlsZGVyPjtcblxuXHQvKipcblx0ICogTG9hZCBub2RlcyBpbnRvIHRoZSBub2RlIG1hcFxuXHQgKi9cblx0bG9hZE5vZGVzKCk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcC5ub2RlcyA9IG5ldyBOb2RlTWFwKCk7XG5cdFx0Ly8gUmVnaXN0ZXIgZWFjaCBub2RlIHVuZGVyIGl0cyBvd24gbm9kZS5uYW1lICh0aGUgY2Fub25pY2FsIHVzZTogcmVmLCBBRFJcblx0XHQvLyAwMDAyKSDigJQgdGhlIE5vZGVzLnRzIG1hcCBrZXlzIGFyZSBjb3NtZXRpYzsgdGhlIGNvbGxpc2lvbiBndWFyZCBjYXRjaGVzIGR1cHMuXG5cdFx0dGhpcy5ub2RlTWFwLm5vZGVzLmFkZE5vZGVzKE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykgYXMgdW5rbm93biBhcyBOb2RlQmFzZVtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkIHdvcmtmbG93cyBpbnRvIHRoZSB3b3JrZmxvdyBtYXBcblx0ICovXG5cdGxvYWRXb3JrZmxvd3MoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLndvcmtmbG93cyA9IHRoaXMud29ya2Zsb3dzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBwdWIvc3ViIHN1YnNjcmliZXIgLSBtYWluIGVudHJ5IHBvaW50XG5cdCAqL1xuXHRhc3luYyBsaXN0ZW4oKTogUHJvbWlzZTxudW1iZXI+IHtcblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLnN0YXJ0Q291bnRlcigpO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBub2RlcyBhbmQgd29ya2Zsb3dzIChjYWxsZWQgaGVyZSBiZWNhdXNlIHN1YmNsYXNzIHByb3BlcnRpZXNcblx0XHQvLyBhcmVuJ3QgYXZhaWxhYmxlIGluIHBhcmVudCBjb25zdHJ1Y3Rvcilcblx0XHR0aGlzLmxvYWROb2RlcygpO1xuXHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXG5cdFx0Ly8gRjUgwrcgaW5zdGFsbCBjcmFzaC9vcnBoYW4vamFuaXRvci9zaHV0ZG93biBoYW5kbGVycyBzbyBhXG5cdFx0Ly8gcHVic3ViLW9ubHkgcHJvY2VzcyBnZXRzIHRoZSBzYW1lIHJ1bi1zdGF0ZSBpbnRlZ3JpdHkgKyBzdG9yYWdlXG5cdFx0Ly8gaHlnaWVuZSBndWFyYW50ZWVzIGFzIEhUVFAvV29ya2VyLiBFYWNoIGhhbmRsZXIgaXMgaWRlbXBvdGVudC5cblx0XHR0aGlzLmluc3RhbGxPcGVyYXRpb25hbEhhbmRsZXJzKHRoaXMubG9nZ2VyKTtcblxuXHRcdC8vIEY2IMK3IGZlZWQgdGhlIFdvcmtmbG93UmVnaXN0cnkgZnJvbSB0aGUgbm9kZU1hcCBzbyBgc3Vid29ya2Zsb3c6YFxuXHRcdC8vIHN0ZXBzICsgdHJpZ2dlci93b3JrZmxvdy9wcm9jZXNzLWdsb2JhbCBtaWRkbGV3YXJlIHJlc29sdmUgaW4gYVxuXHRcdC8vIHB1YnN1Yi1vbmx5IGRlcGxveW1lbnQuXG5cdFx0dGhpcy5yZWdpc3RlcldvcmtmbG93c0Zyb21Ob2RlTWFwKHRoaXMubG9nZ2VyKTtcblxuXHRcdC8vIEYxNCDCtyBzZWVkIHRoZSBwcm9jZXNzLWdsb2JhbCBtaWRkbGV3YXJlIGNoYWluIGZyb21cblx0XHQvLyBgQkxPS19HTE9CQUxfTUlERExFV0FSRWAgKGlkZW1wb3RlbnQg4oCUIHByb2dyYW1tYXRpY1xuXHRcdC8vIHNldEdsb2JhbE1pZGRsZXdhcmUgdGFrZXMgcHJlY2VkZW5jZSkuXG5cdFx0dGhpcy5zZWVkR2xvYmFsTWlkZGxld2FyZUZyb21FbnYodGhpcy5sb2dnZXIpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIEZpbmQgYWxsIHdvcmtmbG93cyB3aXRoIHB1Yi9zdWIgdHJpZ2dlcnNcblx0XHRcdGNvbnN0IHB1YnN1YldvcmtmbG93cyA9IHRoaXMuZ2V0UHViU3ViV29ya2Zsb3dzKCk7XG5cblx0XHRcdGlmIChwdWJzdWJXb3JrZmxvd3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhcIk5vIHdvcmtmbG93cyB3aXRoIHB1Yi9zdWIgdHJpZ2dlcnMgZm91bmRcIik7XG5cdFx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3Vic2NyaWJlIHRvIGVhY2ggdG9waWMgdmlhIHRoZSBhZGFwdGVyIHRoYXQgb3ducyBpdHNcblx0XHRcdC8vIHByb3ZpZGVyLiBQZXItd29ya2Zsb3cgYHByb3ZpZGVyYCBmaWVsZCB3aXRoIHN1YmNsYXNzLVxuXHRcdFx0Ly8gYWRhcHRlciBiYWNrLWNvbXBhdCAoaGFuZGxlZCBpbiByZXNvbHZlQWRhcHRlckZvcldvcmtmbG93KS5cblx0XHRcdGZvciAoY29uc3Qgd29ya2Zsb3cgb2YgcHVic3ViV29ya2Zsb3dzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbmZpZyA9IHdvcmtmbG93LmNvbmZpZy50cmlnZ2VyPy5wdWJzdWIgYXMgUHViU3ViVHJpZ2dlck9wdHM7XG5cdFx0XHRcdGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCB0aGlzLnJlc29sdmVBZGFwdGVyRm9yV29ya2Zsb3coY29uZmlnKTtcblx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKFxuXHRcdFx0XHRcdGBTdWJzY3JpYmluZyB0byB0b3BpYzogJHtjb25maWcudG9waWN9IHZpYSAke2FkYXB0ZXIucHJvdmlkZXJ9IChzdWJzY3JpcHRpb246ICR7Y29uZmlnLnN1YnNjcmlwdGlvbiA/PyBcIjxhdXRvPlwifSwgZ3JvdXA6ICR7Y29uZmlnLmNvbnN1bWVyR3JvdXAgPz8gXCI8ZmFuLW91dD5cIn0pYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhd2FpdCBhZGFwdGVyLnN1YnNjcmliZShjb25maWcsIGFzeW5jIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UsIHdvcmtmbG93LCBjb25maWcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5sb2dnZXIubG9nKGBQdWIvU3ViIHRyaWdnZXIgc3RhcnRlZC4gTGlzdGVuaW5nIHRvICR7cHVic3ViV29ya2Zsb3dzLmxlbmd0aH0gc3Vic2NyaXB0aW9uKHMpYCk7XG5cblx0XHRcdC8vIEVuYWJsZSBITVIgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuXHRcdFx0aWYgKHByb2Nlc3MuZW52LkJMT0tfSE1SID09PSBcInRydWVcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZW5hYmxlSG90UmVsb2FkKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzdGFydCBwdWIvc3ViIHRyaWdnZXI6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3AgdGhlIHB1Yi9zdWIgc3Vic2NyaWJlciDigJQgZHJhaW5zIGV2ZXJ5IGFkYXB0ZXIgaW4gdGhlIHBvb2xcblx0ICogcGx1cyB0aGUgc3ViY2xhc3Mtc2V0IGFkYXB0ZXIgKGlmIGFueSkuXG5cdCAqL1xuXHRhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGZvciAoY29uc3QgYWRhcHRlciBvZiB0aGlzLmFkYXB0ZXJQb29sLnZhbHVlcygpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBhZGFwdGVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3B1YnN1Yl0gZGlzY29ubmVjdCBmYWlsZWQ6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5hZGFwdGVyUG9vbC5jbGVhcigpO1xuXHRcdHRoaXMubG9nZ2VyLmxvZyhcIlB1Yi9TdWIgdHJpZ2dlciBzdG9wcGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNiDigJQgcGljayB0aGUgYWRhcHRlciBmb3IgYSB3b3JrZmxvdydzIGBwcm92aWRlcmAgZmllbGQuXG5cdCAqXG5cdCAqIFJlc29sdXRpb24gb3JkZXI6XG5cdCAqICAgMS4gU3ViY2xhc3Mtc2V0IGB0aGlzLmFkYXB0ZXJgIChiYWNrLWNvbXBhdCkuXG5cdCAqICAgMi4gUGVyLXdvcmtmbG93IGBwcm92aWRlcmAgZmllbGQgdmlhIHRoZSBmYWN0b3J5LlxuXHQgKiAgIDMuIGBCTE9LX1BVQlNVQl9BREFQVEVSYCBlbnYgdmFyLlxuXHQgKiAgIDQuIGBcIm5hdHNcImAgZmFsbGJhY2suXG5cdCAqXG5cdCAqIEFkYXB0ZXJzIGFyZSBjb25uZWN0ZWQgb24gZmlyc3QgdXNlIGFuZCBwb29sZWQgcGVyIHByb3ZpZGVyLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIHJlc29sdmVBZGFwdGVyRm9yV29ya2Zsb3coY29uZmlnOiBQdWJTdWJUcmlnZ2VyT3B0cyk6IFByb21pc2U8UHViU3ViQWRhcHRlcj4ge1xuXHRcdGlmICh0aGlzLmFkYXB0ZXIpIHtcblx0XHRcdGlmICghdGhpcy5hZGFwdGVyLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5hZGFwdGVyLmNvbm5lY3QoKTtcblx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKGBDb25uZWN0ZWQgdG8gJHt0aGlzLmFkYXB0ZXIucHJvdmlkZXJ9IHB1Yi9zdWIgc3lzdGVtIChzdWJjbGFzcyBhZGFwdGVyKWApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5hZGFwdGVyUG9vbC5zZXQodGhpcy5hZGFwdGVyLnByb3ZpZGVyLCB0aGlzLmFkYXB0ZXIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRhcHRlcjtcblx0XHR9XG5cdFx0Y29uc3QgeyByZXNvbHZlUHJvdmlkZXIsIGNyZWF0ZVB1YlN1YkFkYXB0ZXIgfSA9IGF3YWl0IGltcG9ydChcIi4vYWRhcHRlcnMvZmFjdG9yeVwiKTtcblx0XHRjb25zdCBwcm92aWRlciA9IHJlc29sdmVQcm92aWRlcihjb25maWcucHJvdmlkZXIpO1xuXHRcdGxldCBhZGFwdGVyID0gdGhpcy5hZGFwdGVyUG9vbC5nZXQocHJvdmlkZXIpO1xuXHRcdGlmICghYWRhcHRlcikge1xuXHRcdFx0YWRhcHRlciA9IGNyZWF0ZVB1YlN1YkFkYXB0ZXIocHJvdmlkZXIpO1xuXHRcdFx0YXdhaXQgYWRhcHRlci5jb25uZWN0KCk7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYENvbm5lY3RlZCB0byAke2FkYXB0ZXIucHJvdmlkZXJ9IHB1Yi9zdWIgc3lzdGVtYCk7XG5cdFx0XHR0aGlzLmFkYXB0ZXJQb29sLnNldChwcm92aWRlciwgYWRhcHRlcik7XG5cdFx0fVxuXHRcdHJldHVybiBhZGFwdGVyO1xuXHR9XG5cblx0cHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIG9uSG1yV29ya2Zsb3dDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiW0hNUl0gUHViL1N1YiB3b3JrZmxvdyBjaGFuZ2VkLCByZWxvYWRpbmcuLi5cIik7XG5cdFx0YXdhaXQgdGhpcy53YWl0Rm9ySW5GbGlnaHRSZXF1ZXN0cygpO1xuXHRcdGF3YWl0IHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXHRcdGF3YWl0IHRoaXMubGlzdGVuKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFsbCB3b3JrZmxvd3MgdGhhdCBoYXZlIHB1Yi9zdWIgdHJpZ2dlcnNcblx0ICovXG5cdHByb3RlY3RlZCBnZXRQdWJTdWJXb3JrZmxvd3MoKTogUHViU3ViV29ya2Zsb3dNb2RlbFtdIHtcblx0XHRjb25zdCB3b3JrZmxvd3M6IFB1YlN1YldvcmtmbG93TW9kZWxbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBbcGF0aCwgd29ya2Zsb3ddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubm9kZU1hcC53b3JrZmxvd3MgfHwge30pKSB7XG5cdFx0XHQvLyBXb3JrZmxvd1YyQnVpbGRlciBleHBvc2VzIGEgX2NvbmZpZyBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgd29ya2Zsb3dDb25maWcgPSAod29ya2Zsb3cgYXMgdW5rbm93biBhcyB7IF9jb25maWc6IFB1YlN1YldvcmtmbG93TW9kZWxbXCJjb25maWdcIl0gfSkuX2NvbmZpZztcblxuXHRcdFx0aWYgKHdvcmtmbG93Q29uZmlnPy50cmlnZ2VyKSB7XG5cdFx0XHRcdGNvbnN0IHRyaWdnZXJUeXBlID0gT2JqZWN0LmtleXMod29ya2Zsb3dDb25maWcudHJpZ2dlcilbMF07XG5cblx0XHRcdFx0aWYgKHRyaWdnZXJUeXBlID09PSBcInB1YnN1YlwiICYmIHdvcmtmbG93Q29uZmlnLnRyaWdnZXIucHVic3ViKSB7XG5cdFx0XHRcdFx0d29ya2Zsb3dzLnB1c2goe1xuXHRcdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHRcdGNvbmZpZzogd29ya2Zsb3dDb25maWcsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gd29ya2Zsb3dzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBhbiBpbmNvbWluZyBtZXNzYWdlXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlTWVzc2FnZShcblx0XHRtZXNzYWdlOiBQdWJTdWJNZXNzYWdlLFxuXHRcdHdvcmtmbG93OiBQdWJTdWJXb3JrZmxvd01vZGVsLFxuXHRcdGNvbmZpZzogUHViU3ViVHJpZ2dlck9wdHMsXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGlkID0gbWVzc2FnZS5pZCB8fCB1dWlkKCk7XG5cdFx0Y29uc3QgZGVmYXVsdE1ldGVyID0gbWV0cmljcy5nZXRNZXRlcihcImRlZmF1bHRcIik7XG5cdFx0Y29uc3QgcHVic3ViTWVzc2FnZXMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcInB1YnN1Yl9tZXNzYWdlc1wiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQdWIvU3ViIG1lc3NhZ2VzIHByb2Nlc3NlZFwiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHB1YnN1YkVycm9ycyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwicHVic3ViX2Vycm9yc1wiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQdWIvU3ViIG1lc3NhZ2UgcHJvY2Vzc2luZyBlcnJvcnNcIixcblx0XHR9KTtcblxuXHRcdGF3YWl0IHRoaXMudHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihgcHVic3ViOiR7Y29uZmlnLnRvcGljfWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdC8vIEluaXRpYWxpemUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyB3b3JrZmxvd1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdCh3b3JrZmxvdy5wYXRoLCB0aGlzLm5vZGVNYXApO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IGN0eDogQ29udGV4dCA9IHRoaXMuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQsIHdvcmtmbG93LnBhdGgsIGlkKTtcblxuXHRcdFx0XHQvLyBQb3B1bGF0ZSByZXF1ZXN0IHdpdGggbWVzc2FnZSBkYXRhXG5cdFx0XHRcdGN0eC5yZXF1ZXN0ID0ge1xuXHRcdFx0XHRcdGJvZHk6IG1lc3NhZ2UuYm9keSxcblx0XHRcdFx0XHRoZWFkZXJzOiBtZXNzYWdlLmF0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0cXVlcnk6IHt9LFxuXHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0dG9waWM6IG1lc3NhZ2UudG9waWMsXG5cdFx0XHRcdFx0XHRzdWJzY3JpcHRpb246IG1lc3NhZ2Uuc3Vic2NyaXB0aW9uIHx8IFwiXCIsXG5cdFx0XHRcdFx0XHRtZXNzYWdlSWQ6IG1lc3NhZ2UuaWQsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIFJlcXVlc3RDb250ZXh0O1xuXG5cdFx0XHRcdC8vIFN0b3JlIG1lc3NhZ2UgbWV0YWRhdGEgaW4gY29udGV4dFxuXHRcdFx0XHRpZiAoIWN0eC52YXJzKSBjdHgudmFycyA9IHt9O1xuXHRcdFx0XHRjdHgudmFycy5fcHVic3ViX21lc3NhZ2UgPSB7XG5cdFx0XHRcdFx0dG9waWM6IG1lc3NhZ2UudG9waWMsXG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uOiBtZXNzYWdlLnN1YnNjcmlwdGlvbiB8fCBcIlwiLFxuXHRcdFx0XHRcdHB1Ymxpc2hUaW1lOiBtZXNzYWdlLnB1Ymxpc2hUaW1lPy50b0lTT1N0cmluZygpID8/IFwiXCIsXG5cdFx0XHRcdFx0YXR0cmlidXRlczogSlNPTi5zdHJpbmdpZnkobWVzc2FnZS5hdHRyaWJ1dGVzKSxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjdHgubG9nZ2VyLmxvZyhgUHJvY2Vzc2luZyBtZXNzYWdlIGZyb20gJHtjb25maWcudG9waWN9OiAke2lkfWApO1xuXG5cdFx0XHRcdC8vIEYxIMK3IGFwcGx5IHRoZSBtZXJnZWQgbWlkZGxld2FyZSBjaGFpbiAocHJvY2Vzcy1nbG9iYWwg4oaSXG5cdFx0XHRcdC8vIHdvcmtmbG93LWxldmVsIOKGkiB0cmlnZ2VyLWxldmVsKSBiZWZvcmUgdGhlIG1haW4gd29ya2Zsb3dcblx0XHRcdFx0Ly8gYm9keSwgYWZ0ZXIgY3R4LnJlcXVlc3QgaXMgcG9wdWxhdGVkIHNvIG1pZGRsZXdhcmUgc2VlcyB0aGVcblx0XHRcdFx0Ly8gcmVhbCBib2R5L2hlYWRlcnMuIEEgdGhyb3dpbmcgbWlkZGxld2FyZSBwcm9wYWdhdGVzIHRvIHRoZVxuXHRcdFx0XHQvLyBvdXRlciBjYXRjaCAobmFjaykuIFByZS1maXggcHVic3ViIHNpbGVudGx5IHNraXBwZWQgQUxMXG5cdFx0XHRcdC8vIG1pZGRsZXdhcmUg4oCUIGluY2x1ZGluZyBhdXRoIGdhdGVzLlxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcGx5TWlkZGxld2FyZUNoYWluKGN0eCwgdGhpcy5ub2RlTWFwKTtcblxuXHRcdFx0XHQvLyBFeGVjdXRlIHdvcmtmbG93XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlOiBUcmlnZ2VyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJ1bihjdHgpO1xuXHRcdFx0XHRjb25zdCBlbmQgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuXHRcdFx0XHQvLyBTZXQgc3BhbiBhdHRyaWJ1dGVzXG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCB0cnVlKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJtZXNzYWdlX2lkXCIsIGlkKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ0b3BpY1wiLCBjb25maWcudG9waWMpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInN1YnNjcmlwdGlvblwiLCBjb25maWcuc3Vic2NyaXB0aW9uID8/IFwiPGF1dG8+XCIpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInByb3ZpZGVyXCIsIGNvbmZpZy5wcm92aWRlciA/PyBcIjxkZWZhdWx0PlwiKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJlbGFwc2VkX21zXCIsIGVuZCAtIHN0YXJ0KTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcblxuXHRcdFx0XHQvLyBSZWNvcmQgbWV0cmljc1xuXHRcdFx0XHRwdWJzdWJNZXNzYWdlcy5hZGQoMSwge1xuXHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0dG9waWM6IGNvbmZpZy50b3BpYyxcblx0XHRcdFx0XHRzdWJzY3JpcHRpb246IGNvbmZpZy5zdWJzY3JpcHRpb24gPz8gXCI8YXV0bz5cIixcblx0XHRcdFx0XHRwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyID8/IFwiPGRlZmF1bHQ+XCIsXG5cdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogdGhpcy5jb25maWd1cmF0aW9uLm5hbWUsXG5cdFx0XHRcdFx0c3VjY2VzczogXCJ0cnVlXCIsXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGN0eC5sb2dnZXIubG9nKGBNZXNzYWdlIHByb2Nlc3NlZCBpbiAkeyhlbmQgLSBzdGFydCkudG9GaXhlZCgyKX1tczogJHtpZH1gKTtcblxuXHRcdFx0XHQvLyBBY2tub3dsZWRnZSBtZXNzYWdlIGlmIGNvbmZpZ3VyZWRcblx0XHRcdFx0aWYgKGNvbmZpZy5hY2sgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0YXdhaXQgbWVzc2FnZS5hY2soKTtcblx0XHRcdFx0XHRjdHgubG9nZ2VyLmxvZyhgTWVzc2FnZSBhY2tub3dsZWRnZWQ6ICR7aWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IChlcnJvciBhcyBFcnJvcikubWVzc2FnZTtcblxuXHRcdFx0XHQvLyBTZXQgc3BhbiBlcnJvclxuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInN1Y2Nlc3NcIiwgZmFsc2UpO1xuXHRcdFx0XHRzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvciBhcyBFcnJvcik7XG5cdFx0XHRcdHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9KTtcblxuXHRcdFx0XHQvLyBSZWNvcmQgZXJyb3IgbWV0cmljc1xuXHRcdFx0XHRwdWJzdWJFcnJvcnMuYWRkKDEsIHtcblx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdHRvcGljOiBjb25maWcudG9waWMsXG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uOiBjb25maWcuc3Vic2NyaXB0aW9uID8/IFwiPGF1dG8+XCIsXG5cdFx0XHRcdFx0cHJvdmlkZXI6IGNvbmZpZy5wcm92aWRlciA/PyBcIjxkZWZhdWx0PlwiLFxuXHRcdFx0XHRcdHdvcmtmbG93X25hbWU6IHRoaXMuY29uZmlndXJhdGlvbj8ubmFtZSB8fCBcInVua25vd25cIixcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIG1lc3NhZ2UgJHtpZH06ICR7ZXJyb3JNZXNzYWdlfWAsIChlcnJvciBhcyBFcnJvcikuc3RhY2spO1xuXG5cdFx0XHRcdC8vIE5hY2sgbWVzc2FnZVxuXHRcdFx0XHRpZiAoY29uZmlnLmFjayAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlLm5hY2soKTtcblx0XHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYE1lc3NhZ2UgbmFja2VkOiAke2lkfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRzcGFuLmVuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1YlN1YlRyaWdnZXI7XG4iXX0=
@@ -10,6 +10,7 @@
10
10
  * - AWS_REGION: AWS region (default: us-east-1)
11
11
  * - AWS_ACCESS_KEY_ID: AWS access key (optional if using IAM roles)
12
12
  * - AWS_SECRET_ACCESS_KEY: AWS secret key (optional if using IAM roles)
13
+ * - AWS_ENDPOINT_URL: override endpoint for both SNS + SQS (LocalStack / ElasticMQ)
13
14
  * - SQS_WAIT_TIME_SECONDS: Long polling wait time (default: 20)
14
15
  * - SQS_MAX_MESSAGES: Max messages per receive (default: 10)
15
16
  */
@@ -20,6 +21,8 @@ import type { PubSubAdapter, PubSubMessage } from "../PubSubTrigger";
20
21
  */
21
22
  export interface AWSSNSConfig {
22
23
  region: string;
24
+ /** Override endpoint for both SNS + SQS (LocalStack / ElasticMQ). */
25
+ endpoint?: string;
23
26
  waitTimeSeconds?: number;
24
27
  maxNumberOfMessages?: number;
25
28
  }
@@ -10,6 +10,7 @@
10
10
  * - AWS_REGION: AWS region (default: us-east-1)
11
11
  * - AWS_ACCESS_KEY_ID: AWS access key (optional if using IAM roles)
12
12
  * - AWS_SECRET_ACCESS_KEY: AWS secret key (optional if using IAM roles)
13
+ * - AWS_ENDPOINT_URL: override endpoint for both SNS + SQS (LocalStack / ElasticMQ)
13
14
  * - SQS_WAIT_TIME_SECONDS: Long polling wait time (default: 20)
14
15
  * - SQS_MAX_MESSAGES: Max messages per receive (default: 10)
15
16
  */
@@ -37,6 +38,7 @@ export class AWSSNSAdapter {
37
38
  constructor(config) {
38
39
  this.config = {
39
40
  region: config?.region || process.env.AWS_REGION || "us-east-1",
41
+ endpoint: config?.endpoint ?? process.env.AWS_ENDPOINT_URL,
40
42
  waitTimeSeconds: config?.waitTimeSeconds ?? Number.parseInt(process.env.SQS_WAIT_TIME_SECONDS || "20", 10),
41
43
  maxNumberOfMessages: config?.maxNumberOfMessages ?? Number.parseInt(process.env.SQS_MAX_MESSAGES || "10", 10),
42
44
  };
@@ -52,6 +54,7 @@ export class AWSSNSAdapter {
52
54
  const { SQSClient } = await import("@aws-sdk/client-sqs");
53
55
  this.sqsClient = new SQSClient({
54
56
  region: this.config.region,
57
+ endpoint: this.config.endpoint,
55
58
  });
56
59
  this.connected = true;
57
60
  this.shouldStop = false;
@@ -89,6 +92,21 @@ export class AWSSNSAdapter {
89
92
  throw new Error("[AWSSNSAdapter] `subscription` is required — must be the SQS queue URL bound to the SNS topic.");
90
93
  }
91
94
  const queueUrl = config.subscription;
95
+ // SQS has no replay: a message is gone once deleted, and a queue only
96
+ // holds what was delivered after the SNS subscription existed. There is
97
+ // no earliest/latest/seq/timestamp cursor to honor, so `startFrom` would
98
+ // be a silent lie. Reject at startup rather than pretend.
99
+ if (config.startFrom !== undefined) {
100
+ throw new Error("[AWSSNSAdapter] `startFrom` is not supported for provider 'aws' — SQS cannot replay retained history. Remove `startFrom` (or use a broker with a durable log such as Kafka / Redis Streams / NATS JetStream).");
101
+ }
102
+ // SNS->SQS topology is fan-out at the SNS layer (each subscribed queue
103
+ // gets its own copy) and competing-consumer WITHIN a single queue (many
104
+ // pollers share one queue). There is no Kafka-style group rebalancing to
105
+ // join, so `consumerGroup` has no effect here. Warn so authors don't
106
+ // expect partition assignment / group semantics.
107
+ if (config.consumerGroup) {
108
+ console.warn(`[AWSSNSAdapter] \`consumerGroup\` ("${config.consumerGroup}") has no effect for provider 'aws'. SNS->SQS fan-out is per-subscribed-queue; competing consumers share one SQS queue URL. There is no Kafka-style group rebalancing.`);
109
+ }
92
110
  // Start polling the SQS queue
93
111
  this.poll(queueUrl, config, handler);
94
112
  console.log(`[AWSSNSAdapter] Subscribed to queue: ${queueUrl} (topic: ${config.topic})`);
@@ -105,6 +123,10 @@ export class AWSSNSAdapter {
105
123
  QueueUrl: queueUrl,
106
124
  MaxNumberOfMessages: config.maxMessages || this.config.maxNumberOfMessages,
107
125
  WaitTimeSeconds: this.config.waitTimeSeconds,
126
+ // `ackDeadline` (seconds) → SQS per-receive VisibilityTimeout: how
127
+ // long a received message is hidden before it reappears if not
128
+ // deleted. Omitted → SQS falls back to the queue-level default.
129
+ ...(typeof config.ackDeadline === "number" ? { VisibilityTimeout: config.ackDeadline } : {}),
108
130
  MessageAttributeNames: ["All"],
109
131
  AttributeNames: ["All"],
110
132
  });
@@ -225,7 +247,7 @@ export class AWSSNSAdapter {
225
247
  const moduleName = "@aws-sdk/client-sns";
226
248
  // biome-ignore lint/suspicious/noExplicitAny: SDK loaded at runtime as a peer dep.
227
249
  const sns = await import(moduleName);
228
- const client = new sns.SNSClient({ region: this.config.region });
250
+ const client = new sns.SNSClient({ region: this.config.region, endpoint: this.config.endpoint });
229
251
  const isFifo = topic.endsWith(".fifo");
230
252
  const params = {
231
253
  TopicArn: topic,
@@ -260,4 +282,4 @@ export class AWSSNSAdapter {
260
282
  }
261
283
  }
262
284
  export default AWSSNSAdapter;
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVdTU05TQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9BV1NTTlNBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBSUgsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUE0QmxDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDaEIsUUFBUSxHQUFHLEtBQWMsQ0FBQztJQUUzQixTQUFTLENBQXdCO0lBQ2pDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsTUFBTSxDQUFlO0lBQ3JCLGdCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzFELFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7OztPQUdHO0lBQ0ssZ0JBQWdCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQVksTUFBOEI7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7WUFDL0QsZUFBZSxFQUFFLE1BQU0sRUFBRSxlQUFlLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7WUFDMUcsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQzdHLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBRTNCLElBQUksQ0FBQztZQUNKLDRCQUE0QjtZQUM1QixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO2dCQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkNBQTZDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUNkLDZCQUE4QixLQUFlLENBQUMsT0FBTywrRUFBK0UsQ0FDcEksQ0FBQztRQUNILENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsOEJBQThCO1FBQzlCLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxRCxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBeUIsRUFBRSxPQUFrRDtRQUM1RixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRXJDLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsUUFBUSxZQUFZLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxJQUFJLENBQ2pCLFFBQWdCLEVBQ2hCLE1BQXlCLEVBQ3pCLE9BQWtEO1FBRWxELElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRTVCLElBQUksQ0FBQztZQUNKLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFFNUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQztnQkFDekMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7Z0JBQzFFLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWU7Z0JBQzVDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUM5QixjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0QsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDckMsNEJBQTRCO29CQUM1QixJQUFJLFVBQW1DLENBQUM7b0JBQ3hDLElBQUksSUFBYSxDQUFDO29CQUVsQixJQUFJLENBQUM7d0JBQ0osVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQTRCLENBQUM7d0JBQ3JFLG9EQUFvRDt3QkFDcEQsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQzlELElBQUksQ0FBQztnQ0FDSixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ3ZDLENBQUM7NEJBQUMsTUFBTSxDQUFDO2dDQUNSLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDOzRCQUMzQixDQUFDO3dCQUNGLENBQUM7NkJBQU0sQ0FBQzs0QkFDUCxJQUFJLEdBQUcsVUFBVSxDQUFDO3dCQUNuQixDQUFDO29CQUNGLENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNSLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUNoQixVQUFVLEdBQUcsRUFBRSxDQUFDO29CQUNqQixDQUFDO29CQUVELDJDQUEyQztvQkFDM0MsTUFBTSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztvQkFFOUMseUJBQXlCO29CQUN6QixJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMzQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDOzRCQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUE2QixDQUFDOzRCQUM5QyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7d0JBQzdDLENBQUM7b0JBQ0YsQ0FBQztvQkFFRCxzQ0FBc0M7b0JBQ3RDLElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQ2xDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7NEJBQ3hFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQzdDLENBQUM7b0JBQ0YsQ0FBQztvQkFFRCx5QkFBeUI7b0JBQ3pCLE1BQU0sYUFBYSxHQUFrQjt3QkFDcEMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7d0JBQ25ELElBQUk7d0JBQ0osVUFBVTt3QkFDVixHQUFHLEVBQUUsR0FBRzt3QkFDUixLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSzt3QkFDMUMsWUFBWSxFQUFFLFFBQVE7d0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO3dCQUMvRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUU7NEJBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztnQ0FDOUMsUUFBUSxFQUFFLFFBQVE7Z0NBQ2xCLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTs2QkFDaEMsQ0FBQyxDQUFDOzRCQUNILE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNuRCxDQUFDO3dCQUNELElBQUksRUFBRSxLQUFLLElBQUksRUFBRTs0QkFDaEIsMERBQTBEOzRCQUMxRCxnREFBZ0Q7NEJBQ2hELE1BQU0sRUFBRSw4QkFBOEIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7NEJBQy9FLE1BQU0sYUFBYSxHQUFHLElBQUksOEJBQThCLENBQUM7Z0NBQ3hELFFBQVEsRUFBRSxRQUFRO2dDQUNsQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7Z0NBQ2hDLGlCQUFpQixFQUFFLENBQUM7NkJBQ3BCLENBQUMsQ0FBQzs0QkFDSCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDbkQsQ0FBQztxQkFDRCxDQUFDO29CQUVGLGtCQUFrQjtvQkFDbEIsSUFBSSxDQUFDO3dCQUNKLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUM5QixDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQThDLEtBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUN4RixDQUFDO2dCQUNGLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBbUMsS0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0I7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2QsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FDWixLQUFhLEVBQ2IsT0FBZ0IsRUFDaEIsSUFBc0Q7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1FBQ3pDLG1GQUFtRjtRQUNuRixNQUFNLEdBQUcsR0FBUSxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQTRCO1lBQ3ZDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUN4RSxDQUFDO1FBQ0YsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxFQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQztZQUM3RSxNQUFNLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0osTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7Z0JBQVMsQ0FBQztZQUNWLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVsQyxJQUFJLENBQUM7WUFDSixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDRixDQUFDO0NBQ0Q7QUFFRCxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQVdTU05TQWRhcHRlciAtIEFXUyBTTlMvU1FTIGFkYXB0ZXIgZm9yIFB1YlN1YlRyaWdnZXJcbiAqXG4gKiBVc2VzIEFXUyBTREsgdjMgZm9yIFNOUy9TUVMgY29ubmVjdGl2aXR5LlxuICogU05TIHRvcGljcyBkZWxpdmVyIHRvIFNRUyBxdWV1ZXMsIHdoaWNoIHRoaXMgYWRhcHRlciBwb2xscy5cbiAqXG4gKiBSZXF1aXJlczogbnBtIGluc3RhbGwgQGF3cy1zZGsvY2xpZW50LXNucyBAYXdzLXNkay9jbGllbnQtc3FzXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBBV1NfUkVHSU9OOiBBV1MgcmVnaW9uIChkZWZhdWx0OiB1cy1lYXN0LTEpXG4gKiAtIEFXU19BQ0NFU1NfS0VZX0lEOiBBV1MgYWNjZXNzIGtleSAob3B0aW9uYWwgaWYgdXNpbmcgSUFNIHJvbGVzKVxuICogLSBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IEFXUyBzZWNyZXQga2V5IChvcHRpb25hbCBpZiB1c2luZyBJQU0gcm9sZXMpXG4gKiAtIFNRU19XQUlUX1RJTUVfU0VDT05EUzogTG9uZyBwb2xsaW5nIHdhaXQgdGltZSAoZGVmYXVsdDogMjApXG4gKiAtIFNRU19NQVhfTUVTU0FHRVM6IE1heCBtZXNzYWdlcyBwZXIgcmVjZWl2ZSAoZGVmYXVsdDogMTApXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlQXR0cmlidXRlVmFsdWUsIFNRU0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtc3FzXCI7XG5pbXBvcnQgdHlwZSB7IFB1YlN1YlRyaWdnZXJPcHRzIH0gZnJvbSBcIkBibG9ranMvaGVscGVyXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB0eXBlIHsgUHViU3ViQWRhcHRlciwgUHViU3ViTWVzc2FnZSB9IGZyb20gXCIuLi9QdWJTdWJUcmlnZ2VyXCI7XG5cbi8qKlxuICogU2hhcGUgb2YgYW4gU05TIG5vdGlmaWNhdGlvbiB3aGVuIGRlbGl2ZXJlZCB0byBhbiBTUVMgc3Vic2NyaXB0aW9uLlxuICogU05TLXRvLVNRUyBzdWJzY3JpcHRpb25zIHdyYXAgdGhlIHB1Ymxpc2hlcidzIHBheWxvYWQgaW5zaWRlIGEgSlNPTlxuICogZW52ZWxvcGU7IHRoZSByZWNlaXZlciBwYXJzZXMgYG1zZy5Cb2R5YCBhcyB0aGlzIGVudmVsb3BlIGFuZCByZWFkc1xuICogYE1lc3NhZ2VgICh0aGUgYWN0dWFsIHBheWxvYWQpIHBsdXMgdGhlIFNOUy1zaWRlIGF0dHJpYnV0ZXMuXG4gKi9cbmludGVyZmFjZSBTTlNOb3RpZmljYXRpb25FbnZlbG9wZSB7XG5cdFR5cGU/OiBzdHJpbmc7XG5cdE1lc3NhZ2VJZD86IHN0cmluZztcblx0VG9waWNBcm4/OiBzdHJpbmc7XG5cdE1lc3NhZ2U/OiBzdHJpbmc7XG5cdFN1YmplY3Q/OiBzdHJpbmc7XG5cdFRpbWVzdGFtcD86IHN0cmluZztcblx0TWVzc2FnZUF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCB7IFR5cGU/OiBzdHJpbmc7IFZhbHVlPzogc3RyaW5nIH0+O1xufVxuXG4vKipcbiAqIEFXUyBTTlMvU1FTIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBV1NTTlNDb25maWcge1xuXHRyZWdpb246IHN0cmluZztcblx0d2FpdFRpbWVTZWNvbmRzPzogbnVtYmVyO1xuXHRtYXhOdW1iZXJPZk1lc3NhZ2VzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFXU1NOU0FkYXB0ZXIgLSBBV1MgU05TIGltcGxlbWVudGF0aW9uIHVzaW5nIFNRUyBzdWJzY3JpcHRpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBBV1NTTlNBZGFwdGVyIGltcGxlbWVudHMgUHViU3ViQWRhcHRlciB7XG5cdHJlYWRvbmx5IHByb3ZpZGVyID0gXCJhd3NcIiBhcyBjb25zdDtcblxuXHRwcml2YXRlIHNxc0NsaWVudDogU1FTQ2xpZW50IHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIGNvbm5lY3RlZCA9IGZhbHNlO1xuXHRwcml2YXRlIGNvbmZpZzogQVdTU05TQ29uZmlnO1xuXHRwcml2YXRlIHBvbGxpbmdJbnRlcnZhbHM6IE1hcDxzdHJpbmcsIE5vZGVKUy5UaW1lb3V0PiA9IG5ldyBNYXAoKTtcblx0cHJpdmF0ZSBzaG91bGRTdG9wID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFR5cGUtbmFycm93aW5nIGFjY2Vzc29yIGZvciBgdGhpcy5zcXNDbGllbnRgLiBGaWVsZCBpcyB1bmRlZmluZWRcblx0ICogdW50aWwgYGNvbm5lY3QoKWAgcnVucy5cblx0ICovXG5cdHByaXZhdGUgcmVxdWlyZVNxc0NsaWVudCgpOiBTUVNDbGllbnQge1xuXHRcdGlmICghdGhpcy5zcXNDbGllbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIltBV1NTTlNBZGFwdGVyXSBTUVMgY2xpZW50IGlzIG5vdCBpbml0aWFsaXNlZCDigJQgY2FsbCBjb25uZWN0KCkgZmlyc3RcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnNxc0NsaWVudDtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKGNvbmZpZz86IFBhcnRpYWw8QVdTU05TQ29uZmlnPikge1xuXHRcdHRoaXMuY29uZmlnID0ge1xuXHRcdFx0cmVnaW9uOiBjb25maWc/LnJlZ2lvbiB8fCBwcm9jZXNzLmVudi5BV1NfUkVHSU9OIHx8IFwidXMtZWFzdC0xXCIsXG5cdFx0XHR3YWl0VGltZVNlY29uZHM6IGNvbmZpZz8ud2FpdFRpbWVTZWNvbmRzID8/IE51bWJlci5wYXJzZUludChwcm9jZXNzLmVudi5TUVNfV0FJVF9USU1FX1NFQ09ORFMgfHwgXCIyMFwiLCAxMCksXG5cdFx0XHRtYXhOdW1iZXJPZk1lc3NhZ2VzOiBjb25maWc/Lm1heE51bWJlck9mTWVzc2FnZXMgPz8gTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LlNRU19NQVhfTUVTU0FHRVMgfHwgXCIxMFwiLCAxMCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25uZWN0IHRvIEFXU1xuXHQgKi9cblx0YXN5bmMgY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5jb25uZWN0ZWQpIHJldHVybjtcblxuXHRcdHRyeSB7XG5cdFx0XHQvLyBEeW5hbWljIGltcG9ydCBvZiBBV1MgU0RLXG5cdFx0XHRjb25zdCB7IFNRU0NsaWVudCB9ID0gYXdhaXQgaW1wb3J0KFwiQGF3cy1zZGsvY2xpZW50LXNxc1wiKTtcblxuXHRcdFx0dGhpcy5zcXNDbGllbnQgPSBuZXcgU1FTQ2xpZW50KHtcblx0XHRcdFx0cmVnaW9uOiB0aGlzLmNvbmZpZy5yZWdpb24sXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zaG91bGRTdG9wID0gZmFsc2U7XG5cdFx0XHRjb25zb2xlLmxvZyhgW0FXU1NOU0FkYXB0ZXJdIENvbm5lY3RlZCB0byBBV1MgU05TL1NRUzogJHt0aGlzLmNvbmZpZy5yZWdpb259YCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEZhaWxlZCB0byBjb25uZWN0IHRvIEFXUzogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9LiBNYWtlIHN1cmUgQGF3cy1zZGsvY2xpZW50LXNxcyBpcyBpbnN0YWxsZWQ6IG5wbSBpbnN0YWxsIEBhd3Mtc2RrL2NsaWVudC1zcXNgLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY29ubmVjdCBmcm9tIEFXU1xuXHQgKi9cblx0YXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29ubmVjdGVkKSByZXR1cm47XG5cblx0XHR0aGlzLnNob3VsZFN0b3AgPSB0cnVlO1xuXG5cdFx0Ly8gQ2xlYXIgYWxsIHBvbGxpbmcgaW50ZXJ2YWxzXG5cdFx0Zm9yIChjb25zdCBbcXVldWVVcmwsIGludGVydmFsXSBvZiB0aGlzLnBvbGxpbmdJbnRlcnZhbHMpIHtcblx0XHRcdGNsZWFyVGltZW91dChpbnRlcnZhbCk7XG5cdFx0fVxuXHRcdHRoaXMucG9sbGluZ0ludGVydmFscy5jbGVhcigpO1xuXG5cdFx0dGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcblx0XHRjb25zb2xlLmxvZyhcIltBV1NTTlNBZGFwdGVyXSBEaXNjb25uZWN0ZWQgZnJvbSBBV1MgU05TL1NRU1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gYW4gU05TIHRvcGljIHZpYSBTUVMgcXVldWVcblx0ICogTm90ZTogVGhlIFNRUyBxdWV1ZSBzaG91bGQgYmUgcHJlLWNvbmZpZ3VyZWQgYXMgYW4gU05TIHN1YnNjcmlwdGlvblxuXHQgKi9cblx0YXN5bmMgc3Vic2NyaWJlKGNvbmZpZzogUHViU3ViVHJpZ2dlck9wdHMsIGhhbmRsZXI6IChtZXNzYWdlOiBQdWJTdWJNZXNzYWdlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm90IGNvbm5lY3RlZCB0byBBV1MuIENhbGwgY29ubmVjdCgpIGZpcnN0LlwiKTtcblx0XHR9XG5cblx0XHQvLyBJbiBBV1MsIHN1YnNjcmlwdGlvbiBpcyB0aGUgU1FTIHF1ZXVlIFVSTCB0aGF0J3Mgc3Vic2NyaWJlZCB0byB0aGUgU05TIHRvcGljLlxuXHRcdGlmICghY29uZmlnLnN1YnNjcmlwdGlvbikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiW0FXU1NOU0FkYXB0ZXJdIGBzdWJzY3JpcHRpb25gIGlzIHJlcXVpcmVkIOKAlCBtdXN0IGJlIHRoZSBTUVMgcXVldWUgVVJMIGJvdW5kIHRvIHRoZSBTTlMgdG9waWMuXCIpO1xuXHRcdH1cblx0XHRjb25zdCBxdWV1ZVVybCA9IGNvbmZpZy5zdWJzY3JpcHRpb247XG5cblx0XHQvLyBTdGFydCBwb2xsaW5nIHRoZSBTUVMgcXVldWVcblx0XHR0aGlzLnBvbGwocXVldWVVcmwsIGNvbmZpZywgaGFuZGxlcik7XG5cblx0XHRjb25zb2xlLmxvZyhgW0FXU1NOU0FkYXB0ZXJdIFN1YnNjcmliZWQgdG8gcXVldWU6ICR7cXVldWVVcmx9ICh0b3BpYzogJHtjb25maWcudG9waWN9KWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBvbGwgU1FTIHF1ZXVlIGZvciBtZXNzYWdlcyAobG9uZyBwb2xsaW5nKVxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBwb2xsKFxuXHRcdHF1ZXVlVXJsOiBzdHJpbmcsXG5cdFx0Y29uZmlnOiBQdWJTdWJUcmlnZ2VyT3B0cyxcblx0XHRoYW5kbGVyOiAobWVzc2FnZTogUHViU3ViTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPixcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuc2hvdWxkU3RvcCkgcmV0dXJuO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgUmVjZWl2ZU1lc3NhZ2VDb21tYW5kLCBEZWxldGVNZXNzYWdlQ29tbWFuZCB9ID0gYXdhaXQgaW1wb3J0KFwiQGF3cy1zZGsvY2xpZW50LXNxc1wiKTtcblxuXHRcdFx0Y29uc3QgY29tbWFuZCA9IG5ldyBSZWNlaXZlTWVzc2FnZUNvbW1hbmQoe1xuXHRcdFx0XHRRdWV1ZVVybDogcXVldWVVcmwsXG5cdFx0XHRcdE1heE51bWJlck9mTWVzc2FnZXM6IGNvbmZpZy5tYXhNZXNzYWdlcyB8fCB0aGlzLmNvbmZpZy5tYXhOdW1iZXJPZk1lc3NhZ2VzLFxuXHRcdFx0XHRXYWl0VGltZVNlY29uZHM6IHRoaXMuY29uZmlnLndhaXRUaW1lU2Vjb25kcyxcblx0XHRcdFx0TWVzc2FnZUF0dHJpYnV0ZU5hbWVzOiBbXCJBbGxcIl0sXG5cdFx0XHRcdEF0dHJpYnV0ZU5hbWVzOiBbXCJBbGxcIl0sXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVpcmVTcXNDbGllbnQoKS5zZW5kKGNvbW1hbmQpO1xuXG5cdFx0XHRpZiAocmVzcG9uc2UuTWVzc2FnZXMgJiYgcmVzcG9uc2UuTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1zZyBvZiByZXNwb25zZS5NZXNzYWdlcykge1xuXHRcdFx0XHRcdC8vIFBhcnNlIFNOUyBtZXNzYWdlIHdyYXBwZXJcblx0XHRcdFx0XHRsZXQgc25zTWVzc2FnZTogU05TTm90aWZpY2F0aW9uRW52ZWxvcGU7XG5cdFx0XHRcdFx0bGV0IGJvZHk6IHVua25vd247XG5cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0c25zTWVzc2FnZSA9IEpTT04ucGFyc2UobXNnLkJvZHkgfHwgXCJ7fVwiKSBhcyBTTlNOb3RpZmljYXRpb25FbnZlbG9wZTtcblx0XHRcdFx0XHRcdC8vIFNOUyB3cmFwcyB0aGUgYWN0dWFsIG1lc3NhZ2UgaW4gYSBcIk1lc3NhZ2VcIiBmaWVsZFxuXHRcdFx0XHRcdFx0aWYgKHNuc01lc3NhZ2UuVHlwZSA9PT0gXCJOb3RpZmljYXRpb25cIiAmJiBzbnNNZXNzYWdlLk1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRib2R5ID0gSlNPTi5wYXJzZShzbnNNZXNzYWdlLk1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRib2R5ID0gc25zTWVzc2FnZS5NZXNzYWdlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRib2R5ID0gc25zTWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdGJvZHkgPSBtc2cuQm9keTtcblx0XHRcdFx0XHRcdHNuc01lc3NhZ2UgPSB7fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgZnJvbSBib3RoIFNRUyBhbmQgU05TXG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG5cdFx0XHRcdFx0Ly8gU1FTIG1lc3NhZ2UgYXR0cmlidXRlc1xuXHRcdFx0XHRcdGlmIChtc2cuTWVzc2FnZUF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgW2tleSwgYXR0cl0gb2YgT2JqZWN0LmVudHJpZXMobXNnLk1lc3NhZ2VBdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzcXNBdHRyID0gYXR0ciBhcyBNZXNzYWdlQXR0cmlidXRlVmFsdWU7XG5cdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNba2V5XSA9IHNxc0F0dHIuU3RyaW5nVmFsdWUgfHwgXCJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTTlMgbWVzc2FnZSBhdHRyaWJ1dGVzIChpZiBwcmVzZW50KVxuXHRcdFx0XHRcdGlmIChzbnNNZXNzYWdlLk1lc3NhZ2VBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIGF0dHJdIG9mIE9iamVjdC5lbnRyaWVzKHNuc01lc3NhZ2UuTWVzc2FnZUF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNbYHNuc18ke2tleX1gXSA9IGF0dHIuVmFsdWUgfHwgXCJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgcHViL3N1YiBtZXNzYWdlXG5cdFx0XHRcdFx0Y29uc3QgcHVic3ViTWVzc2FnZTogUHViU3ViTWVzc2FnZSA9IHtcblx0XHRcdFx0XHRcdGlkOiBzbnNNZXNzYWdlLk1lc3NhZ2VJZCB8fCBtc2cuTWVzc2FnZUlkIHx8IHV1aWQoKSxcblx0XHRcdFx0XHRcdGJvZHksXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzLFxuXHRcdFx0XHRcdFx0cmF3OiBtc2csXG5cdFx0XHRcdFx0XHR0b3BpYzogc25zTWVzc2FnZS5Ub3BpY0FybiB8fCBjb25maWcudG9waWMsXG5cdFx0XHRcdFx0XHRzdWJzY3JpcHRpb246IHF1ZXVlVXJsLFxuXHRcdFx0XHRcdFx0cHVibGlzaFRpbWU6IHNuc01lc3NhZ2UuVGltZXN0YW1wID8gbmV3IERhdGUoc25zTWVzc2FnZS5UaW1lc3RhbXApIDogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdGFjazogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkZWxldGVDb21tYW5kID0gbmV3IERlbGV0ZU1lc3NhZ2VDb21tYW5kKHtcblx0XHRcdFx0XHRcdFx0XHRRdWV1ZVVybDogcXVldWVVcmwsXG5cdFx0XHRcdFx0XHRcdFx0UmVjZWlwdEhhbmRsZTogbXNnLlJlY2VpcHRIYW5kbGUsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlcXVpcmVTcXNDbGllbnQoKS5zZW5kKGRlbGV0ZUNvbW1hbmQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG5hY2s6IGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gTGV0IHRoZSB2aXNpYmlsaXR5IHRpbWVvdXQgZXhwaXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZVxuXHRcdFx0XHRcdFx0XHQvLyBPciBjaGFuZ2UgdmlzaWJpbGl0eSB0byAwIGZvciBpbW1lZGlhdGUgcmV0cnlcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUNvbW1hbmQgfSA9IGF3YWl0IGltcG9ydChcIkBhd3Mtc2RrL2NsaWVudC1zcXNcIik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYW5nZUNvbW1hbmQgPSBuZXcgQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlDb21tYW5kKHtcblx0XHRcdFx0XHRcdFx0XHRRdWV1ZVVybDogcXVldWVVcmwsXG5cdFx0XHRcdFx0XHRcdFx0UmVjZWlwdEhhbmRsZTogbXNnLlJlY2VpcHRIYW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0VmlzaWJpbGl0eVRpbWVvdXQ6IDAsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlcXVpcmVTcXNDbGllbnQoKS5zZW5kKGNoYW5nZUNvbW1hbmQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Ly8gUHJvY2VzcyBtZXNzYWdlXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IGhhbmRsZXIocHVic3ViTWVzc2FnZSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYFtBV1NTTlNBZGFwdGVyXSBFcnJvciBwcm9jZXNzaW5nIG1lc3NhZ2U6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbQVdTU05TQWRhcHRlcl0gUG9sbGluZyBlcnJvcjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udGludWUgcG9sbGluZyB1bmxlc3Mgc3RvcHBlZFxuXHRcdGlmICghdGhpcy5zaG91bGRTdG9wKSB7XG5cdFx0XHRjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnBvbGwocXVldWVVcmwsIGNvbmZpZywgaGFuZGxlciksIDApO1xuXHRcdFx0dGhpcy5wb2xsaW5nSW50ZXJ2YWxzLnNldChxdWV1ZVVybCwgdGltZW91dCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVuc3Vic2NyaWJlIGZyb20gYSBxdWV1ZSAoc3RvcHMgcG9sbGluZylcblx0ICovXG5cdGFzeW5jIHVuc3Vic2NyaWJlKHF1ZXVlVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcnZhbCA9IHRoaXMucG9sbGluZ0ludGVydmFscy5nZXQocXVldWVVcmwpO1xuXHRcdGlmIChpbnRlcnZhbCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KGludGVydmFsKTtcblx0XHRcdHRoaXMucG9sbGluZ0ludGVydmFscy5kZWxldGUocXVldWVVcmwpO1xuXHRcdFx0Y29uc29sZS5sb2coYFtBV1NTTlNBZGFwdGVyXSBVbnN1YnNjcmliZWQgZnJvbSBxdWV1ZTogJHtxdWV1ZVVybH1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgY29ubmVjdGVkIHRvIEFXU1xuXHQgKi9cblx0aXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNiDigJQgcHVibGlzaCB0byBhbiBTTlMgdG9waWMuXG5cdCAqXG5cdCAqIGB0b3BpY2AgbXVzdCBiZSB0aGUgU05TIHRvcGljIEFSTi4gYHBhcnRpdGlvbktleWAgL1xuXHQgKiBgb3JkZXJpbmdLZXlgIG1hcCB0byB0aGUgRklGTyBgTWVzc2FnZUdyb3VwSWRgIGZpZWxkIGZvclxuXHQgKiBgLmZpZm9gIHRvcGljczsgaWdub3JlZCBvdGhlcndpc2UuXG5cdCAqL1xuXHRhc3luYyBwdWJsaXNoKFxuXHRcdHRvcGljOiBzdHJpbmcsXG5cdFx0cGF5bG9hZDogdW5rbm93bixcblx0XHRvcHRzPzogeyBwYXJ0aXRpb25LZXk/OiBzdHJpbmc7IG9yZGVyaW5nS2V5Pzogc3RyaW5nIH0sXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIltibG9rXVtwdWJzdWItYXdzXSBub3QgY29ubmVjdGVkLiBDYWxsIGNvbm5lY3QoKSBmaXJzdC5cIik7XG5cdFx0Y29uc3QgbW9kdWxlTmFtZSA9IFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiO1xuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogU0RLIGxvYWRlZCBhdCBydW50aW1lIGFzIGEgcGVlciBkZXAuXG5cdFx0Y29uc3Qgc25zOiBhbnkgPSBhd2FpdCBpbXBvcnQobW9kdWxlTmFtZSk7XG5cdFx0Y29uc3QgY2xpZW50ID0gbmV3IHNucy5TTlNDbGllbnQoeyByZWdpb246IHRoaXMuY29uZmlnLnJlZ2lvbiB9KTtcblx0XHRjb25zdCBpc0ZpZm8gPSB0b3BpYy5lbmRzV2l0aChcIi5maWZvXCIpO1xuXHRcdGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG5cdFx0XHRUb3BpY0FybjogdG9waWMsXG5cdFx0XHRNZXNzYWdlOiB0eXBlb2YgcGF5bG9hZCA9PT0gXCJzdHJpbmdcIiA/IHBheWxvYWQgOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcblx0XHR9O1xuXHRcdGlmIChpc0ZpZm8pIHtcblx0XHRcdHBhcmFtcy5NZXNzYWdlR3JvdXBJZCA9IG9wdHM/LnBhcnRpdGlvbktleSA/PyBvcHRzPy5vcmRlcmluZ0tleSA/PyBcImRlZmF1bHRcIjtcblx0XHRcdHBhcmFtcy5NZXNzYWdlRGVkdXBsaWNhdGlvbklkID0gYCR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX1gO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgY2xpZW50LnNlbmQobmV3IHNucy5QdWJsaXNoQ29tbWFuZChwYXJhbXMpKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0Y2xpZW50LmRlc3Ryb3k/LigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIZWFsdGggY2hlY2sgLSB2ZXJpZnkgQVdTIGNvbm5lY3Rpdml0eVxuXHQgKi9cblx0YXN5bmMgaGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgTGlzdFF1ZXVlc0NvbW1hbmQgfSA9IGF3YWl0IGltcG9ydChcIkBhd3Mtc2RrL2NsaWVudC1zcXNcIik7XG5cdFx0XHRjb25zdCBjb21tYW5kID0gbmV3IExpc3RRdWV1ZXNDb21tYW5kKHsgTWF4UmVzdWx0czogMSB9KTtcblx0XHRcdGF3YWl0IHRoaXMucmVxdWlyZVNxc0NsaWVudCgpLnNlbmQoY29tbWFuZCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQVdTU05TQWRhcHRlcjtcbiJdfQ==
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVdTU05TQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9BV1NTTlNBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBOEJsQzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2hCLFFBQVEsR0FBRyxLQUFjLENBQUM7SUFFM0IsU0FBUyxDQUF3QjtJQUNqQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE1BQU0sQ0FBZTtJQUNyQixnQkFBZ0IsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCOzs7T0FHRztJQUNLLGdCQUFnQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLE1BQThCO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDYixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxXQUFXO1lBQy9ELFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQzFELGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzFHLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxtQkFBbUIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxH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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0osTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7Z0JBQVMsQ0FBQztZQUNWLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVsQyxJQUFJLENBQUM7WUFDSixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQWlCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDRixDQUFDO0NBQ0Q7QUFFRCxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQVdTU05TQWRhcHRlciAtIEFXUyBTTlMvU1FTIGFkYXB0ZXIgZm9yIFB1YlN1YlRyaWdnZXJcbiAqXG4gKiBVc2VzIEFXUyBTREsgdjMgZm9yIFNOUy9TUVMgY29ubmVjdGl2aXR5LlxuICogU05TIHRvcGljcyBkZWxpdmVyIHRvIFNRUyBxdWV1ZXMsIHdoaWNoIHRoaXMgYWRhcHRlciBwb2xscy5cbiAqXG4gKiBSZXF1aXJlczogbnBtIGluc3RhbGwgQGF3cy1zZGsvY2xpZW50LXNucyBAYXdzLXNkay9jbGllbnQtc3FzXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBBV1NfUkVHSU9OOiBBV1MgcmVnaW9uIChkZWZhdWx0OiB1cy1lYXN0LTEpXG4gKiAtIEFXU19BQ0NFU1NfS0VZX0lEOiBBV1MgYWNjZXNzIGtleSAob3B0aW9uYWwgaWYgdXNpbmcgSUFNIHJvbGVzKVxuICogLSBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IEFXUyBzZWNyZXQga2V5IChvcHRpb25hbCBpZiB1c2luZyBJQU0gcm9sZXMpXG4gKiAtIEFXU19FTkRQT0lOVF9VUkw6IG92ZXJyaWRlIGVuZHBvaW50IGZvciBib3RoIFNOUyArIFNRUyAoTG9jYWxTdGFjayAvIEVsYXN0aWNNUSlcbiAqIC0gU1FTX1dBSVRfVElNRV9TRUNPTkRTOiBMb25nIHBvbGxpbmcgd2FpdCB0aW1lIChkZWZhdWx0OiAyMClcbiAqIC0gU1FTX01BWF9NRVNTQUdFUzogTWF4IG1lc3NhZ2VzIHBlciByZWNlaXZlIChkZWZhdWx0OiAxMClcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VBdHRyaWJ1dGVWYWx1ZSwgU1FTQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zcXNcIjtcbmltcG9ydCB0eXBlIHsgUHViU3ViVHJpZ2dlck9wdHMgfSBmcm9tIFwiQGJsb2tqcy9oZWxwZXJcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHR5cGUgeyBQdWJTdWJBZGFwdGVyLCBQdWJTdWJNZXNzYWdlIH0gZnJvbSBcIi4uL1B1YlN1YlRyaWdnZXJcIjtcblxuLyoqXG4gKiBTaGFwZSBvZiBhbiBTTlMgbm90aWZpY2F0aW9uIHdoZW4gZGVsaXZlcmVkIHRvIGFuIFNRUyBzdWJzY3JpcHRpb24uXG4gKiBTTlMtdG8tU1FTIHN1YnNjcmlwdGlvbnMgd3JhcCB0aGUgcHVibGlzaGVyJ3MgcGF5bG9hZCBpbnNpZGUgYSBKU09OXG4gKiBlbnZlbG9wZTsgdGhlIHJlY2VpdmVyIHBhcnNlcyBgbXNnLkJvZHlgIGFzIHRoaXMgZW52ZWxvcGUgYW5kIHJlYWRzXG4gKiBgTWVzc2FnZWAgKHRoZSBhY3R1YWwgcGF5bG9hZCkgcGx1cyB0aGUgU05TLXNpZGUgYXR0cmlidXRlcy5cbiAqL1xuaW50ZXJmYWNlIFNOU05vdGlmaWNhdGlvbkVudmVsb3BlIHtcblx0VHlwZT86IHN0cmluZztcblx0TWVzc2FnZUlkPzogc3RyaW5nO1xuXHRUb3BpY0Fybj86IHN0cmluZztcblx0TWVzc2FnZT86IHN0cmluZztcblx0U3ViamVjdD86IHN0cmluZztcblx0VGltZXN0YW1wPzogc3RyaW5nO1xuXHRNZXNzYWdlQXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHsgVHlwZT86IHN0cmluZzsgVmFsdWU/OiBzdHJpbmcgfT47XG59XG5cbi8qKlxuICogQVdTIFNOUy9TUVMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFXU1NOU0NvbmZpZyB7XG5cdHJlZ2lvbjogc3RyaW5nO1xuXHQvKiogT3ZlcnJpZGUgZW5kcG9pbnQgZm9yIGJvdGggU05TICsgU1FTIChMb2NhbFN0YWNrIC8gRWxhc3RpY01RKS4gKi9cblx0ZW5kcG9pbnQ/OiBzdHJpbmc7XG5cdHdhaXRUaW1lU2Vjb25kcz86IG51bWJlcjtcblx0bWF4TnVtYmVyT2ZNZXNzYWdlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBV1NTTlNBZGFwdGVyIC0gQVdTIFNOUyBpbXBsZW1lbnRhdGlvbiB1c2luZyBTUVMgc3Vic2NyaXB0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgQVdTU05TQWRhcHRlciBpbXBsZW1lbnRzIFB1YlN1YkFkYXB0ZXIge1xuXHRyZWFkb25seSBwcm92aWRlciA9IFwiYXdzXCIgYXMgY29uc3Q7XG5cblx0cHJpdmF0ZSBzcXNDbGllbnQ6IFNRU0NsaWVudCB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBjb25uZWN0ZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBjb25maWc6IEFXU1NOU0NvbmZpZztcblx0cHJpdmF0ZSBwb2xsaW5nSW50ZXJ2YWxzOiBNYXA8c3RyaW5nLCBOb2RlSlMuVGltZW91dD4gPSBuZXcgTWFwKCk7XG5cdHByaXZhdGUgc2hvdWxkU3RvcCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUeXBlLW5hcnJvd2luZyBhY2Nlc3NvciBmb3IgYHRoaXMuc3FzQ2xpZW50YC4gRmllbGQgaXMgdW5kZWZpbmVkXG5cdCAqIHVudGlsIGBjb25uZWN0KClgIHJ1bnMuXG5cdCAqL1xuXHRwcml2YXRlIHJlcXVpcmVTcXNDbGllbnQoKTogU1FTQ2xpZW50IHtcblx0XHRpZiAoIXRoaXMuc3FzQ2xpZW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbQVdTU05TQWRhcHRlcl0gU1FTIGNsaWVudCBpcyBub3QgaW5pdGlhbGlzZWQg4oCUIGNhbGwgY29ubmVjdCgpIGZpcnN0XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zcXNDbGllbnQ7XG5cdH1cblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiBQYXJ0aWFsPEFXU1NOU0NvbmZpZz4pIHtcblx0XHR0aGlzLmNvbmZpZyA9IHtcblx0XHRcdHJlZ2lvbjogY29uZmlnPy5yZWdpb24gfHwgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCBcInVzLWVhc3QtMVwiLFxuXHRcdFx0ZW5kcG9pbnQ6IGNvbmZpZz8uZW5kcG9pbnQgPz8gcHJvY2Vzcy5lbnYuQVdTX0VORFBPSU5UX1VSTCxcblx0XHRcdHdhaXRUaW1lU2Vjb25kczogY29uZmlnPy53YWl0VGltZVNlY29uZHMgPz8gTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LlNRU19XQUlUX1RJTUVfU0VDT05EUyB8fCBcIjIwXCIsIDEwKSxcblx0XHRcdG1heE51bWJlck9mTWVzc2FnZXM6IGNvbmZpZz8ubWF4TnVtYmVyT2ZNZXNzYWdlcyA/PyBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuU1FTX01BWF9NRVNTQUdFUyB8fCBcIjEwXCIsIDEwKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbm5lY3QgdG8gQVdTXG5cdCAqL1xuXHRhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIER5bmFtaWMgaW1wb3J0IG9mIEFXUyBTREtcblx0XHRcdGNvbnN0IHsgU1FTQ2xpZW50IH0gPSBhd2FpdCBpbXBvcnQoXCJAYXdzLXNkay9jbGllbnQtc3FzXCIpO1xuXG5cdFx0XHR0aGlzLnNxc0NsaWVudCA9IG5ldyBTUVNDbGllbnQoe1xuXHRcdFx0XHRyZWdpb246IHRoaXMuY29uZmlnLnJlZ2lvbixcblx0XHRcdFx0ZW5kcG9pbnQ6IHRoaXMuY29uZmlnLmVuZHBvaW50LFxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2hvdWxkU3RvcCA9IGZhbHNlO1xuXHRcdFx0Y29uc29sZS5sb2coYFtBV1NTTlNBZGFwdGVyXSBDb25uZWN0ZWQgdG8gQVdTIFNOUy9TUVM6ICR7dGhpcy5jb25maWcucmVnaW9ufWApO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBGYWlsZWQgdG8gY29ubmVjdCB0byBBV1M6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfS4gTWFrZSBzdXJlIEBhd3Mtc2RrL2NsaWVudC1zcXMgaXMgaW5zdGFsbGVkOiBucG0gaW5zdGFsbCBAYXdzLXNkay9jbGllbnQtc3FzYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3QgZnJvbSBBV1Ncblx0ICovXG5cdGFzeW5jIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0dGhpcy5zaG91bGRTdG9wID0gdHJ1ZTtcblxuXHRcdC8vIENsZWFyIGFsbCBwb2xsaW5nIGludGVydmFsc1xuXHRcdGZvciAoY29uc3QgW3F1ZXVlVXJsLCBpbnRlcnZhbF0gb2YgdGhpcy5wb2xsaW5nSW50ZXJ2YWxzKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoaW50ZXJ2YWwpO1xuXHRcdH1cblx0XHR0aGlzLnBvbGxpbmdJbnRlcnZhbHMuY2xlYXIoKTtcblxuXHRcdHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG5cdFx0Y29uc29sZS5sb2coXCJbQVdTU05TQWRhcHRlcl0gRGlzY29ubmVjdGVkIGZyb20gQVdTIFNOUy9TUVNcIik7XG5cdH1cblxuXHQvKipcblx0ICogU3Vic2NyaWJlIHRvIGFuIFNOUyB0b3BpYyB2aWEgU1FTIHF1ZXVlXG5cdCAqIE5vdGU6IFRoZSBTUVMgcXVldWUgc2hvdWxkIGJlIHByZS1jb25maWd1cmVkIGFzIGFuIFNOUyBzdWJzY3JpcHRpb25cblx0ICovXG5cdGFzeW5jIHN1YnNjcmliZShjb25maWc6IFB1YlN1YlRyaWdnZXJPcHRzLCBoYW5kbGVyOiAobWVzc2FnZTogUHViU3ViTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vdCBjb25uZWN0ZWQgdG8gQVdTLiBDYWxsIGNvbm5lY3QoKSBmaXJzdC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gQVdTLCBzdWJzY3JpcHRpb24gaXMgdGhlIFNRUyBxdWV1ZSBVUkwgdGhhdCdzIHN1YnNjcmliZWQgdG8gdGhlIFNOUyB0b3BpYy5cblx0XHRpZiAoIWNvbmZpZy5zdWJzY3JpcHRpb24pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIltBV1NTTlNBZGFwdGVyXSBgc3Vic2NyaXB0aW9uYCBpcyByZXF1aXJlZCDigJQgbXVzdCBiZSB0aGUgU1FTIHF1ZXVlIFVSTCBib3VuZCB0byB0aGUgU05TIHRvcGljLlwiKTtcblx0XHR9XG5cdFx0Y29uc3QgcXVldWVVcmwgPSBjb25maWcuc3Vic2NyaXB0aW9uO1xuXG5cdFx0Ly8gU1FTIGhhcyBubyByZXBsYXk6IGEgbWVzc2FnZSBpcyBnb25lIG9uY2UgZGVsZXRlZCwgYW5kIGEgcXVldWUgb25seVxuXHRcdC8vIGhvbGRzIHdoYXQgd2FzIGRlbGl2ZXJlZCBhZnRlciB0aGUgU05TIHN1YnNjcmlwdGlvbiBleGlzdGVkLiBUaGVyZSBpc1xuXHRcdC8vIG5vIGVhcmxpZXN0L2xhdGVzdC9zZXEvdGltZXN0YW1wIGN1cnNvciB0byBob25vciwgc28gYHN0YXJ0RnJvbWAgd291bGRcblx0XHQvLyBiZSBhIHNpbGVudCBsaWUuIFJlamVjdCBhdCBzdGFydHVwIHJhdGhlciB0aGFuIHByZXRlbmQuXG5cdFx0aWYgKGNvbmZpZy5zdGFydEZyb20gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIltBV1NTTlNBZGFwdGVyXSBgc3RhcnRGcm9tYCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm92aWRlciAnYXdzJyDigJQgU1FTIGNhbm5vdCByZXBsYXkgcmV0YWluZWQgaGlzdG9yeS4gUmVtb3ZlIGBzdGFydEZyb21gIChvciB1c2UgYSBicm9rZXIgd2l0aCBhIGR1cmFibGUgbG9nIHN1Y2ggYXMgS2Fma2EgLyBSZWRpcyBTdHJlYW1zIC8gTkFUUyBKZXRTdHJlYW0pLlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBTTlMtPlNRUyB0b3BvbG9neSBpcyBmYW4tb3V0IGF0IHRoZSBTTlMgbGF5ZXIgKGVhY2ggc3Vic2NyaWJlZCBxdWV1ZVxuXHRcdC8vIGdldHMgaXRzIG93biBjb3B5KSBhbmQgY29tcGV0aW5nLWNvbnN1bWVyIFdJVEhJTiBhIHNpbmdsZSBxdWV1ZSAobWFueVxuXHRcdC8vIHBvbGxlcnMgc2hhcmUgb25lIHF1ZXVlKS4gVGhlcmUgaXMgbm8gS2Fma2Etc3R5bGUgZ3JvdXAgcmViYWxhbmNpbmcgdG9cblx0XHQvLyBqb2luLCBzbyBgY29uc3VtZXJHcm91cGAgaGFzIG5vIGVmZmVjdCBoZXJlLiBXYXJuIHNvIGF1dGhvcnMgZG9uJ3Rcblx0XHQvLyBleHBlY3QgcGFydGl0aW9uIGFzc2lnbm1lbnQgLyBncm91cCBzZW1hbnRpY3MuXG5cdFx0aWYgKGNvbmZpZy5jb25zdW1lckdyb3VwKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdGBbQVdTU05TQWRhcHRlcl0gXFxgY29uc3VtZXJHcm91cFxcYCAoXCIke2NvbmZpZy5jb25zdW1lckdyb3VwfVwiKSBoYXMgbm8gZWZmZWN0IGZvciBwcm92aWRlciAnYXdzJy4gU05TLT5TUVMgZmFuLW91dCBpcyBwZXItc3Vic2NyaWJlZC1xdWV1ZTsgY29tcGV0aW5nIGNvbnN1bWVycyBzaGFyZSBvbmUgU1FTIHF1ZXVlIFVSTC4gVGhlcmUgaXMgbm8gS2Fma2Etc3R5bGUgZ3JvdXAgcmViYWxhbmNpbmcuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RhcnQgcG9sbGluZyB0aGUgU1FTIHF1ZXVlXG5cdFx0dGhpcy5wb2xsKHF1ZXVlVXJsLCBjb25maWcsIGhhbmRsZXIpO1xuXG5cdFx0Y29uc29sZS5sb2coYFtBV1NTTlNBZGFwdGVyXSBTdWJzY3JpYmVkIHRvIHF1ZXVlOiAke3F1ZXVlVXJsfSAodG9waWM6ICR7Y29uZmlnLnRvcGljfSlgKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQb2xsIFNRUyBxdWV1ZSBmb3IgbWVzc2FnZXMgKGxvbmcgcG9sbGluZylcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcG9sbChcblx0XHRxdWV1ZVVybDogc3RyaW5nLFxuXHRcdGNvbmZpZzogUHViU3ViVHJpZ2dlck9wdHMsXG5cdFx0aGFuZGxlcjogKG1lc3NhZ2U6IFB1YlN1Yk1lc3NhZ2UpID0+IFByb21pc2U8dm9pZD4sXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLnNob3VsZFN0b3ApIHJldHVybjtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB7IFJlY2VpdmVNZXNzYWdlQ29tbWFuZCwgRGVsZXRlTWVzc2FnZUNvbW1hbmQgfSA9IGF3YWl0IGltcG9ydChcIkBhd3Mtc2RrL2NsaWVudC1zcXNcIik7XG5cblx0XHRcdGNvbnN0IGNvbW1hbmQgPSBuZXcgUmVjZWl2ZU1lc3NhZ2VDb21tYW5kKHtcblx0XHRcdFx0UXVldWVVcmw6IHF1ZXVlVXJsLFxuXHRcdFx0XHRNYXhOdW1iZXJPZk1lc3NhZ2VzOiBjb25maWcubWF4TWVzc2FnZXMgfHwgdGhpcy5jb25maWcubWF4TnVtYmVyT2ZNZXNzYWdlcyxcblx0XHRcdFx0V2FpdFRpbWVTZWNvbmRzOiB0aGlzLmNvbmZpZy53YWl0VGltZVNlY29uZHMsXG5cdFx0XHRcdC8vIGBhY2tEZWFkbGluZWAgKHNlY29uZHMpIOKGkiBTUVMgcGVyLXJlY2VpdmUgVmlzaWJpbGl0eVRpbWVvdXQ6IGhvd1xuXHRcdFx0XHQvLyBsb25nIGEgcmVjZWl2ZWQgbWVzc2FnZSBpcyBoaWRkZW4gYmVmb3JlIGl0IHJlYXBwZWFycyBpZiBub3Rcblx0XHRcdFx0Ly8gZGVsZXRlZC4gT21pdHRlZCDihpIgU1FTIGZhbGxzIGJhY2sgdG8gdGhlIHF1ZXVlLWxldmVsIGRlZmF1bHQuXG5cdFx0XHRcdC4uLih0eXBlb2YgY29uZmlnLmFja0RlYWRsaW5lID09PSBcIm51bWJlclwiID8geyBWaXNpYmlsaXR5VGltZW91dDogY29uZmlnLmFja0RlYWRsaW5lIH0gOiB7fSksXG5cdFx0XHRcdE1lc3NhZ2VBdHRyaWJ1dGVOYW1lczogW1wiQWxsXCJdLFxuXHRcdFx0XHRBdHRyaWJ1dGVOYW1lczogW1wiQWxsXCJdLFxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1aXJlU3FzQ2xpZW50KCkuc2VuZChjb21tYW5kKTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlLk1lc3NhZ2VzICYmIHJlc3BvbnNlLk1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBtc2cgb2YgcmVzcG9uc2UuTWVzc2FnZXMpIHtcblx0XHRcdFx0XHQvLyBQYXJzZSBTTlMgbWVzc2FnZSB3cmFwcGVyXG5cdFx0XHRcdFx0bGV0IHNuc01lc3NhZ2U6IFNOU05vdGlmaWNhdGlvbkVudmVsb3BlO1xuXHRcdFx0XHRcdGxldCBib2R5OiB1bmtub3duO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHNuc01lc3NhZ2UgPSBKU09OLnBhcnNlKG1zZy5Cb2R5IHx8IFwie31cIikgYXMgU05TTm90aWZpY2F0aW9uRW52ZWxvcGU7XG5cdFx0XHRcdFx0XHQvLyBTTlMgd3JhcHMgdGhlIGFjdHVhbCBtZXNzYWdlIGluIGEgXCJNZXNzYWdlXCIgZmllbGRcblx0XHRcdFx0XHRcdGlmIChzbnNNZXNzYWdlLlR5cGUgPT09IFwiTm90aWZpY2F0aW9uXCIgJiYgc25zTWVzc2FnZS5NZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Ym9keSA9IEpTT04ucGFyc2Uoc25zTWVzc2FnZS5NZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym9keSA9IHNuc01lc3NhZ2UuTWVzc2FnZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ym9keSA9IHNuc01lc3NhZ2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRib2R5ID0gbXNnLkJvZHk7XG5cdFx0XHRcdFx0XHRzbnNNZXNzYWdlID0ge307XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRXh0cmFjdCBhdHRyaWJ1dGVzIGZyb20gYm90aCBTUVMgYW5kIFNOU1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuXHRcdFx0XHRcdC8vIFNRUyBtZXNzYWdlIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRpZiAobXNnLk1lc3NhZ2VBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIGF0dHJdIG9mIE9iamVjdC5lbnRyaWVzKG1zZy5NZXNzYWdlQXR0cmlidXRlcykpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3FzQXR0ciA9IGF0dHIgYXMgTWVzc2FnZUF0dHJpYnV0ZVZhbHVlO1xuXHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzW2tleV0gPSBzcXNBdHRyLlN0cmluZ1ZhbHVlIHx8IFwiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU05TIG1lc3NhZ2UgYXR0cmlidXRlcyAoaWYgcHJlc2VudClcblx0XHRcdFx0XHRpZiAoc25zTWVzc2FnZS5NZXNzYWdlQXR0cmlidXRlcykge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCBhdHRyXSBvZiBPYmplY3QuZW50cmllcyhzbnNNZXNzYWdlLk1lc3NhZ2VBdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzW2BzbnNfJHtrZXl9YF0gPSBhdHRyLlZhbHVlIHx8IFwiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHB1Yi9zdWIgbWVzc2FnZVxuXHRcdFx0XHRcdGNvbnN0IHB1YnN1Yk1lc3NhZ2U6IFB1YlN1Yk1lc3NhZ2UgPSB7XG5cdFx0XHRcdFx0XHRpZDogc25zTWVzc2FnZS5NZXNzYWdlSWQgfHwgbXNnLk1lc3NhZ2VJZCB8fCB1dWlkKCksXG5cdFx0XHRcdFx0XHRib2R5LFxuXHRcdFx0XHRcdFx0YXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdHJhdzogbXNnLFxuXHRcdFx0XHRcdFx0dG9waWM6IHNuc01lc3NhZ2UuVG9waWNBcm4gfHwgY29uZmlnLnRvcGljLFxuXHRcdFx0XHRcdFx0c3Vic2NyaXB0aW9uOiBxdWV1ZVVybCxcblx0XHRcdFx0XHRcdHB1Ymxpc2hUaW1lOiBzbnNNZXNzYWdlLlRpbWVzdGFtcCA/IG5ldyBEYXRlKHNuc01lc3NhZ2UuVGltZXN0YW1wKSA6IG5ldyBEYXRlKCksXG5cdFx0XHRcdFx0XHRhY2s6IGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVsZXRlQ29tbWFuZCA9IG5ldyBEZWxldGVNZXNzYWdlQ29tbWFuZCh7XG5cdFx0XHRcdFx0XHRcdFx0UXVldWVVcmw6IHF1ZXVlVXJsLFxuXHRcdFx0XHRcdFx0XHRcdFJlY2VpcHRIYW5kbGU6IG1zZy5SZWNlaXB0SGFuZGxlLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5yZXF1aXJlU3FzQ2xpZW50KCkuc2VuZChkZWxldGVDb21tYW5kKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRuYWNrOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIExldCB0aGUgdmlzaWJpbGl0eSB0aW1lb3V0IGV4cGlyZSB0byByZXR1cm4gdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0Ly8gT3IgY2hhbmdlIHZpc2liaWxpdHkgdG8gMCBmb3IgaW1tZWRpYXRlIHJldHJ5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHsgQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlDb21tYW5kIH0gPSBhd2FpdCBpbXBvcnQoXCJAYXdzLXNkay9jbGllbnQtc3FzXCIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFuZ2VDb21tYW5kID0gbmV3IENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5Q29tbWFuZCh7XG5cdFx0XHRcdFx0XHRcdFx0UXVldWVVcmw6IHF1ZXVlVXJsLFxuXHRcdFx0XHRcdFx0XHRcdFJlY2VpcHRIYW5kbGU6IG1zZy5SZWNlaXB0SGFuZGxlLFxuXHRcdFx0XHRcdFx0XHRcdFZpc2liaWxpdHlUaW1lb3V0OiAwLFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5yZXF1aXJlU3FzQ2xpZW50KCkuc2VuZChjaGFuZ2VDb21tYW5kKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdC8vIFByb2Nlc3MgbWVzc2FnZVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBoYW5kbGVyKHB1YnN1Yk1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBbQVdTU05TQWRhcHRlcl0gRXJyb3IgcHJvY2Vzc2luZyBtZXNzYWdlOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgW0FXU1NOU0FkYXB0ZXJdIFBvbGxpbmcgZXJyb3I6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdH1cblxuXHRcdC8vIENvbnRpbnVlIHBvbGxpbmcgdW5sZXNzIHN0b3BwZWRcblx0XHRpZiAoIXRoaXMuc2hvdWxkU3RvcCkge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wb2xsKHF1ZXVlVXJsLCBjb25maWcsIGhhbmRsZXIpLCAwKTtcblx0XHRcdHRoaXMucG9sbGluZ0ludGVydmFscy5zZXQocXVldWVVcmwsIHRpbWVvdXQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVbnN1YnNjcmliZSBmcm9tIGEgcXVldWUgKHN0b3BzIHBvbGxpbmcpXG5cdCAqL1xuXHRhc3luYyB1bnN1YnNjcmliZShxdWV1ZVVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaW50ZXJ2YWwgPSB0aGlzLnBvbGxpbmdJbnRlcnZhbHMuZ2V0KHF1ZXVlVXJsKTtcblx0XHRpZiAoaW50ZXJ2YWwpIHtcblx0XHRcdGNsZWFyVGltZW91dChpbnRlcnZhbCk7XG5cdFx0XHR0aGlzLnBvbGxpbmdJbnRlcnZhbHMuZGVsZXRlKHF1ZXVlVXJsKTtcblx0XHRcdGNvbnNvbGUubG9nKGBbQVdTU05TQWRhcHRlcl0gVW5zdWJzY3JpYmVkIGZyb20gcXVldWU6ICR7cXVldWVVcmx9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGNvbm5lY3RlZCB0byBBV1Ncblx0ICovXG5cdGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbm5lY3RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiB2MC43IFBSIDYg4oCUIHB1Ymxpc2ggdG8gYW4gU05TIHRvcGljLlxuXHQgKlxuXHQgKiBgdG9waWNgIG11c3QgYmUgdGhlIFNOUyB0b3BpYyBBUk4uIGBwYXJ0aXRpb25LZXlgIC9cblx0ICogYG9yZGVyaW5nS2V5YCBtYXAgdG8gdGhlIEZJRk8gYE1lc3NhZ2VHcm91cElkYCBmaWVsZCBmb3Jcblx0ICogYC5maWZvYCB0b3BpY3M7IGlnbm9yZWQgb3RoZXJ3aXNlLlxuXHQgKi9cblx0YXN5bmMgcHVibGlzaChcblx0XHR0b3BpYzogc3RyaW5nLFxuXHRcdHBheWxvYWQ6IHVua25vd24sXG5cdFx0b3B0cz86IHsgcGFydGl0aW9uS2V5Pzogc3RyaW5nOyBvcmRlcmluZ0tleT86IHN0cmluZyB9LFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29ubmVjdGVkKSB0aHJvdyBuZXcgRXJyb3IoXCJbYmxva11bcHVic3ViLWF3c10gbm90IGNvbm5lY3RlZC4gQ2FsbCBjb25uZWN0KCkgZmlyc3QuXCIpO1xuXHRcdGNvbnN0IG1vZHVsZU5hbWUgPSBcIkBhd3Mtc2RrL2NsaWVudC1zbnNcIjtcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFNESyBsb2FkZWQgYXQgcnVudGltZSBhcyBhIHBlZXIgZGVwLlxuXHRcdGNvbnN0IHNuczogYW55ID0gYXdhaXQgaW1wb3J0KG1vZHVsZU5hbWUpO1xuXHRcdGNvbnN0IGNsaWVudCA9IG5ldyBzbnMuU05TQ2xpZW50KHsgcmVnaW9uOiB0aGlzLmNvbmZpZy5yZWdpb24sIGVuZHBvaW50OiB0aGlzLmNvbmZpZy5lbmRwb2ludCB9KTtcblx0XHRjb25zdCBpc0ZpZm8gPSB0b3BpYy5lbmRzV2l0aChcIi5maWZvXCIpO1xuXHRcdGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG5cdFx0XHRUb3BpY0FybjogdG9waWMsXG5cdFx0XHRNZXNzYWdlOiB0eXBlb2YgcGF5bG9hZCA9PT0gXCJzdHJpbmdcIiA/IHBheWxvYWQgOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcblx0XHR9O1xuXHRcdGlmIChpc0ZpZm8pIHtcblx0XHRcdHBhcmFtcy5NZXNzYWdlR3JvdXBJZCA9IG9wdHM/LnBhcnRpdGlvbktleSA/PyBvcHRzPy5vcmRlcmluZ0tleSA/PyBcImRlZmF1bHRcIjtcblx0XHRcdHBhcmFtcy5NZXNzYWdlRGVkdXBsaWNhdGlvbklkID0gYCR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX1gO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgY2xpZW50LnNlbmQobmV3IHNucy5QdWJsaXNoQ29tbWFuZChwYXJhbXMpKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0Y2xpZW50LmRlc3Ryb3k/LigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIZWFsdGggY2hlY2sgLSB2ZXJpZnkgQVdTIGNvbm5lY3Rpdml0eVxuXHQgKi9cblx0YXN5bmMgaGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgTGlzdFF1ZXVlc0NvbW1hbmQgfSA9IGF3YWl0IGltcG9ydChcIkBhd3Mtc2RrL2NsaWVudC1zcXNcIik7XG5cdFx0XHRjb25zdCBjb21tYW5kID0gbmV3IExpc3RRdWV1ZXNDb21tYW5kKHsgTWF4UmVzdWx0czogMSB9KTtcblx0XHRcdGF3YWl0IHRoaXMucmVxdWlyZVNxc0NsaWVudCgpLnNlbmQoY29tbWFuZCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQVdTU05TQWRhcHRlcjtcbiJdfQ==
@@ -26,11 +26,14 @@ export declare class AzureServiceBusAdapter implements PubSubAdapter {
26
26
  private receivers;
27
27
  private connected;
28
28
  private config;
29
+ private healthTarget;
29
30
  /**
30
31
  * Type-narrowing accessor for `this.client`. Field is undefined until
31
32
  * `connect()` runs.
32
33
  */
33
34
  private requireClient;
35
+ private receiverKey;
36
+ private rejectUnsupportedOptions;
34
37
  constructor(config?: AzureServiceBusConfig);
35
38
  /**
36
39
  * Connect to Azure Service Bus
@@ -55,8 +58,9 @@ export declare class AzureServiceBusAdapter implements PubSubAdapter {
55
58
  /**
56
59
  * v0.7 PR 6 — publish to an Azure Service Bus topic.
57
60
  *
58
- * `partitionKey` maps to Service Bus's `partitionKey`; `orderingKey`
59
- * maps to `sessionId` (for session-enabled topics).
61
+ * `partitionKey` maps to Service Bus's `partitionKey`. `orderingKey`
62
+ * would require session receivers, so it is rejected until sessions are
63
+ * implemented end to end.
60
64
  */
61
65
  publish(topic: string, payload: unknown, opts?: {
62
66
  partitionKey?: string;
@@ -18,6 +18,7 @@ export class AzureServiceBusAdapter {
18
18
  receivers = new Map();
19
19
  connected = false;
20
20
  config;
21
+ healthTarget;
21
22
  /**
22
23
  * Type-narrowing accessor for `this.client`. Field is undefined until
23
24
  * `connect()` runs.
@@ -28,6 +29,29 @@ export class AzureServiceBusAdapter {
28
29
  }
29
30
  return this.client;
30
31
  }
32
+ receiverKey(topic, subscription) {
33
+ return subscription ? `${topic}/${subscription}` : topic;
34
+ }
35
+ rejectUnsupportedOptions(config) {
36
+ if (config.consumerGroup) {
37
+ throw new Error("[AzureServiceBusAdapter] `consumerGroup` is not supported for provider 'azure' — use the Service Bus subscription name as the competing-consumer group.");
38
+ }
39
+ if (config.durable === false) {
40
+ throw new Error("[AzureServiceBusAdapter] `durable: false` is not supported for provider 'azure'.");
41
+ }
42
+ if (config.startFrom !== undefined) {
43
+ throw new Error("[AzureServiceBusAdapter] `startFrom` is not supported for provider 'azure'.");
44
+ }
45
+ if (config.deadLetterTopic) {
46
+ throw new Error("[AzureServiceBusAdapter] `deadLetterTopic` is not supported for provider 'azure' — use the entity's native dead-letter subqueue.");
47
+ }
48
+ if (config.maxMessages !== undefined && config.maxMessages !== 10) {
49
+ throw new Error("[AzureServiceBusAdapter] `maxMessages` is not supported for streaming Azure subscriptions.");
50
+ }
51
+ if (config.ackDeadline !== undefined && config.ackDeadline !== 30) {
52
+ throw new Error("[AzureServiceBusAdapter] `ackDeadline` is not supported for provider 'azure'.");
53
+ }
54
+ }
31
55
  constructor(config) {
32
56
  this.config = {
33
57
  connectionString: config?.connectionString || process.env.AZURE_SERVICE_BUS_CONNECTION_STRING,
@@ -87,6 +111,7 @@ export class AzureServiceBusAdapter {
87
111
  if (!this.connected) {
88
112
  throw new Error("Not connected to Azure Service Bus. Call connect() first.");
89
113
  }
114
+ this.rejectUnsupportedOptions(config);
90
115
  const client = this.requireClient();
91
116
  let receiver;
92
117
  // Determine if this is a topic subscription or a queue
@@ -102,7 +127,7 @@ export class AzureServiceBusAdapter {
102
127
  receiveMode: config.ack !== false ? "peekLock" : "receiveAndDelete",
103
128
  });
104
129
  }
105
- const subscriptionKey = `${config.topic}/${config.subscription}`;
130
+ const subscriptionKey = this.receiverKey(config.topic, config.subscription);
106
131
  // Message handler
107
132
  const processMessage = async (sbMessage) => {
108
133
  // Parse message body
@@ -161,6 +186,7 @@ export class AzureServiceBusAdapter {
161
186
  processError,
162
187
  });
163
188
  this.receivers.set(subscriptionKey, receiver);
189
+ this.healthTarget = { topic: config.topic, subscription: config.subscription };
164
190
  console.log(`[AzureServiceBusAdapter] Subscribed to: ${subscriptionKey}`);
165
191
  }
166
192
  /**
@@ -183,18 +209,21 @@ export class AzureServiceBusAdapter {
183
209
  /**
184
210
  * v0.7 PR 6 — publish to an Azure Service Bus topic.
185
211
  *
186
- * `partitionKey` maps to Service Bus's `partitionKey`; `orderingKey`
187
- * maps to `sessionId` (for session-enabled topics).
212
+ * `partitionKey` maps to Service Bus's `partitionKey`. `orderingKey`
213
+ * would require session receivers, so it is rejected until sessions are
214
+ * implemented end to end.
188
215
  */
189
216
  async publish(topic, payload, opts) {
190
217
  if (!this.connected)
191
218
  throw new Error("[blok][pubsub-azure] not connected. Call connect() first.");
219
+ if (opts?.orderingKey) {
220
+ throw new Error("[blok][pubsub-azure] `orderingKey` requires Azure Service Bus sessions, which this adapter does not support yet.");
221
+ }
192
222
  const sender = this.requireClient().createSender(topic);
193
223
  try {
194
224
  await sender.sendMessages({
195
225
  body: payload,
196
226
  partitionKey: opts?.partitionKey,
197
- sessionId: opts?.orderingKey,
198
227
  });
199
228
  }
200
229
  finally {
@@ -208,18 +237,23 @@ export class AzureServiceBusAdapter {
208
237
  if (!this.connected)
209
238
  return false;
210
239
  try {
211
- // Create a temporary receiver to test connectivity
212
- const testReceiver = this.requireClient().createReceiver("$default", {
213
- receiveMode: "peekLock",
214
- });
215
- await testReceiver.close();
240
+ if (!this.healthTarget)
241
+ return true;
242
+ const testReceiver = this.healthTarget.subscription
243
+ ? this.requireClient().createReceiver(this.healthTarget.topic, this.healthTarget.subscription)
244
+ : this.requireClient().createReceiver(this.healthTarget.topic);
245
+ try {
246
+ await testReceiver.peekMessages(1);
247
+ }
248
+ finally {
249
+ await testReceiver.close();
250
+ }
216
251
  return true;
217
252
  }
218
253
  catch {
219
- // Queue might not exist but connection is healthy if we got here
220
- return this.connected;
254
+ return false;
221
255
  }
222
256
  }
223
257
  }
224
258
  export default AzureServiceBusAdapter;
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVTZXJ2aWNlQnVzQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9BenVyZVNlcnZpY2VCdXNBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQVNILE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBV2xDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixRQUFRLEdBQUcsT0FBZ0IsQ0FBQztJQUU3QixNQUFNLENBQStCO0lBQ3JDLFNBQVMsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2RCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE1BQU0sQ0FBd0I7SUFFdEM7OztPQUdHO0lBQ0ssYUFBYTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFZLE1BQThCO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDYixnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUM7WUFDN0YsdUJBQXVCLEVBQ3RCLE1BQU0sRUFBRSx1QkFBdUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQztTQUMzRixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUUzQixJQUFJLENBQUM7WUFDSix1Q0FBdUM7WUFDdkMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUVoRSxJQUFJLElB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QUUsVUFBVTthQUN2QixDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUixpRUFBaUU7WUFDakUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLENBQUM7SUFDRixDQUFDO0NBQ0Q7QUFFRCxlQUFlLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBenVyZVNlcnZpY2VCdXNBZGFwdGVyIC0gQXp1cmUgU2VydmljZSBCdXMgYWRhcHRlciBmb3IgUHViU3ViVHJpZ2dlclxuICpcbiAqIFVzZXMgQGF6dXJlL3NlcnZpY2UtYnVzIGZvciBBenVyZSBTZXJ2aWNlIEJ1cyBjb25uZWN0aXZpdHkuXG4gKiBSZXF1aXJlczogbnBtIGluc3RhbGwgQGF6dXJlL3NlcnZpY2UtYnVzXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBBWlVSRV9TRVJWSUNFX0JVU19DT05ORUNUSU9OX1NUUklORzogQXp1cmUgU2VydmljZSBCdXMgY29ubmVjdGlvbiBzdHJpbmdcbiAqIC0gQVpVUkVfU0VSVklDRV9CVVNfRlVMTFlfUVVBTElGSUVEX05BTUVTUEFDRTogRnVsbHkgcXVhbGlmaWVkIG5hbWVzcGFjZSAoaWYgdXNpbmcgRGVmYXVsdEF6dXJlQ3JlZGVudGlhbClcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG5cdFByb2Nlc3NFcnJvckFyZ3MsXG5cdFNlcnZpY2VCdXNDbGllbnQsXG5cdFNlcnZpY2VCdXNSZWNlaXZlZE1lc3NhZ2UsXG5cdFNlcnZpY2VCdXNSZWNlaXZlcixcbn0gZnJvbSBcIkBhenVyZS9zZXJ2aWNlLWJ1c1wiO1xuaW1wb3J0IHR5cGUgeyBQdWJTdWJUcmlnZ2VyT3B0cyB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgdHlwZSB7IFB1YlN1YkFkYXB0ZXIsIFB1YlN1Yk1lc3NhZ2UgfSBmcm9tIFwiLi4vUHViU3ViVHJpZ2dlclwiO1xuXG4vKipcbiAqIEF6dXJlIFNlcnZpY2UgQnVzIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBenVyZVNlcnZpY2VCdXNDb25maWcge1xuXHRjb25uZWN0aW9uU3RyaW5nPzogc3RyaW5nO1xuXHRmdWxseVF1YWxpZmllZE5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBenVyZVNlcnZpY2VCdXNBZGFwdGVyIC0gQXp1cmUgU2VydmljZSBCdXMgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEF6dXJlU2VydmljZUJ1c0FkYXB0ZXIgaW1wbGVtZW50cyBQdWJTdWJBZGFwdGVyIHtcblx0cmVhZG9ubHkgcHJvdmlkZXIgPSBcImF6dXJlXCIgYXMgY29uc3Q7XG5cblx0cHJpdmF0ZSBjbGllbnQ6IFNlcnZpY2VCdXNDbGllbnQgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgcmVjZWl2ZXJzOiBNYXA8c3RyaW5nLCBTZXJ2aWNlQnVzUmVjZWl2ZXI+ID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIGNvbm5lY3RlZCA9IGZhbHNlO1xuXHRwcml2YXRlIGNvbmZpZzogQXp1cmVTZXJ2aWNlQnVzQ29uZmlnO1xuXG5cdC8qKlxuXHQgKiBUeXBlLW5hcnJvd2luZyBhY2Nlc3NvciBmb3IgYHRoaXMuY2xpZW50YC4gRmllbGQgaXMgdW5kZWZpbmVkIHVudGlsXG5cdCAqIGBjb25uZWN0KClgIHJ1bnMuXG5cdCAqL1xuXHRwcml2YXRlIHJlcXVpcmVDbGllbnQoKTogU2VydmljZUJ1c0NsaWVudCB7XG5cdFx0aWYgKCF0aGlzLmNsaWVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIGNsaWVudCBpcyBub3QgaW5pdGlhbGlzZWQg4oCUIGNhbGwgY29ubmVjdCgpIGZpcnN0XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jbGllbnQ7XG5cdH1cblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiBBenVyZVNlcnZpY2VCdXNDb25maWcpIHtcblx0XHR0aGlzLmNvbmZpZyA9IHtcblx0XHRcdGNvbm5lY3Rpb25TdHJpbmc6IGNvbmZpZz8uY29ubmVjdGlvblN0cmluZyB8fCBwcm9jZXNzLmVudi5BWlVSRV9TRVJWSUNFX0JVU19DT05ORUNUSU9OX1NUUklORyxcblx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlOlxuXHRcdFx0XHRjb25maWc/LmZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlIHx8IHByb2Nlc3MuZW52LkFaVVJFX1NFUlZJQ0VfQlVTX0ZVTExZX1FVQUxJRklFRF9OQU1FU1BBQ0UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25uZWN0IHRvIEF6dXJlIFNlcnZpY2UgQnVzXG5cdCAqL1xuXHRhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIER5bmFtaWMgaW1wb3J0IG9mIEBhenVyZS9zZXJ2aWNlLWJ1c1xuXHRcdFx0Y29uc3QgeyBTZXJ2aWNlQnVzQ2xpZW50IH0gPSBhd2FpdCBpbXBvcnQoXCJAYXp1cmUvc2VydmljZS1idXNcIik7XG5cblx0XHRcdGlmICh0aGlzLmNvbmZpZy5jb25uZWN0aW9uU3RyaW5nKSB7XG5cdFx0XHRcdHRoaXMuY2xpZW50ID0gbmV3IFNlcnZpY2VCdXNDbGllbnQodGhpcy5jb25maWcuY29ubmVjdGlvblN0cmluZyk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29uZmlnLmZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlKSB7XG5cdFx0XHRcdC8vIFdvdWxkIG5lZWQgQGF6dXJlL2lkZW50aXR5IGZvciBEZWZhdWx0QXp1cmVDcmVkZW50aWFsXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk1hbmFnZWQgaWRlbnRpdHkgYXV0aGVudGljYXRpb24gcmVxdWlyZXMgQGF6dXJlL2lkZW50aXR5IHBhY2thZ2VcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFaXRoZXIgY29ubmVjdGlvblN0cmluZyBvciBmdWxseVF1YWxpZmllZE5hbWVzcGFjZSBpcyByZXF1aXJlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS5sb2coXCJbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gQ29ubmVjdGVkIHRvIEF6dXJlIFNlcnZpY2UgQnVzXCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBGYWlsZWQgdG8gY29ubmVjdCB0byBBenVyZSBTZXJ2aWNlIEJ1czogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9LiBNYWtlIHN1cmUgQGF6dXJlL3NlcnZpY2UtYnVzIGlzIGluc3RhbGxlZDogbnBtIGluc3RhbGwgQGF6dXJlL3NlcnZpY2UtYnVzYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3QgZnJvbSBBenVyZSBTZXJ2aWNlIEJ1c1xuXHQgKi9cblx0YXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29ubmVjdGVkKSByZXR1cm47XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gQ2xvc2UgYWxsIHJlY2VpdmVyc1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgcmVjZWl2ZXJdIG9mIHRoaXMucmVjZWl2ZXJzKSB7XG5cdFx0XHRcdGF3YWl0IHJlY2VpdmVyLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlY2VpdmVycy5jbGVhcigpO1xuXG5cdFx0XHRhd2FpdCB0aGlzLnJlcXVpcmVDbGllbnQoKS5jbG9zZSgpO1xuXHRcdFx0dGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcblx0XHRcdGNvbnNvbGUubG9nKFwiW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIERpc2Nvbm5lY3RlZCBmcm9tIEF6dXJlIFNlcnZpY2UgQnVzXCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gRXJyb3IgZGlzY29ubmVjdGluZzogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1YnNjcmliZSB0byBhbiBBenVyZSBTZXJ2aWNlIEJ1cyB0b3BpYy9zdWJzY3JpcHRpb24gb3IgcXVldWVcblx0ICovXG5cdGFzeW5jIHN1YnNjcmliZShjb25maWc6IFB1YlN1YlRyaWdnZXJPcHRzLCBoYW5kbGVyOiAobWVzc2FnZTogUHViU3ViTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vdCBjb25uZWN0ZWQgdG8gQXp1cmUgU2VydmljZSBCdXMuIENhbGwgY29ubmVjdCgpIGZpcnN0LlwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBjbGllbnQgPSB0aGlzLnJlcXVpcmVDbGllbnQoKTtcblx0XHRsZXQgcmVjZWl2ZXI6IFNlcnZpY2VCdXNSZWNlaXZlcjtcblxuXHRcdC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgdG9waWMgc3Vic2NyaXB0aW9uIG9yIGEgcXVldWVcblx0XHRpZiAoY29uZmlnLnN1YnNjcmlwdGlvbiAmJiBjb25maWcudG9waWMpIHtcblx0XHRcdC8vIFRvcGljIHdpdGggc3Vic2NyaXB0aW9uXG5cdFx0XHRyZWNlaXZlciA9IGNsaWVudC5jcmVhdGVSZWNlaXZlcihjb25maWcudG9waWMsIGNvbmZpZy5zdWJzY3JpcHRpb24sIHtcblx0XHRcdFx0cmVjZWl2ZU1vZGU6IGNvbmZpZy5hY2sgIT09IGZhbHNlID8gXCJwZWVrTG9ja1wiIDogXCJyZWNlaXZlQW5kRGVsZXRlXCIsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gUXVldWVcblx0XHRcdHJlY2VpdmVyID0gY2xpZW50LmNyZWF0ZVJlY2VpdmVyKGNvbmZpZy5zdWJzY3JpcHRpb24gfHwgY29uZmlnLnRvcGljLCB7XG5cdFx0XHRcdHJlY2VpdmVNb2RlOiBjb25maWcuYWNrICE9PSBmYWxzZSA/IFwicGVla0xvY2tcIiA6IFwicmVjZWl2ZUFuZERlbGV0ZVwiLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uS2V5ID0gYCR7Y29uZmlnLnRvcGljfS8ke2NvbmZpZy5zdWJzY3JpcHRpb259YDtcblxuXHRcdC8vIE1lc3NhZ2UgaGFuZGxlclxuXHRcdGNvbnN0IHByb2Nlc3NNZXNzYWdlID0gYXN5bmMgKHNiTWVzc2FnZTogU2VydmljZUJ1c1JlY2VpdmVkTWVzc2FnZSkgPT4ge1xuXHRcdFx0Ly8gUGFyc2UgbWVzc2FnZSBib2R5XG5cdFx0XHRsZXQgYm9keTogdW5rbm93bjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0eXBlb2Ygc2JNZXNzYWdlLmJvZHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRib2R5ID0gSlNPTi5wYXJzZShzYk1lc3NhZ2UuYm9keSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ym9keSA9IHNiTWVzc2FnZS5ib2R5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0Ym9keSA9IHNiTWVzc2FnZS5ib2R5O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBFeHRyYWN0IGFwcGxpY2F0aW9uIHByb3BlcnRpZXMgYXMgYXR0cmlidXRlc1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0aWYgKHNiTWVzc2FnZS5hcHBsaWNhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2JNZXNzYWdlLmFwcGxpY2F0aW9uUHJvcGVydGllcykpIHtcblx0XHRcdFx0XHRhdHRyaWJ1dGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBwdWIvc3ViIG1lc3NhZ2Vcblx0XHRcdGNvbnN0IHB1YnN1Yk1lc3NhZ2U6IFB1YlN1Yk1lc3NhZ2UgPSB7XG5cdFx0XHRcdC8vIGBtZXNzYWdlSWRgIG1heSBiZSBzdHJpbmcgfCBudW1iZXIgfCBCdWZmZXIgcGVyIEF6dXJlIFNESzsgY29lcmNlIHRvIHN0cmluZy5cblx0XHRcdFx0aWQ6IHNiTWVzc2FnZS5tZXNzYWdlSWQgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhzYk1lc3NhZ2UubWVzc2FnZUlkKSA6IHV1aWQoKSxcblx0XHRcdFx0Ym9keSxcblx0XHRcdFx0YXR0cmlidXRlcyxcblx0XHRcdFx0cmF3OiBzYk1lc3NhZ2UsXG5cdFx0XHRcdHRvcGljOiBjb25maWcudG9waWMsXG5cdFx0XHRcdHN1YnNjcmlwdGlvbjogY29uZmlnLnN1YnNjcmlwdGlvbixcblx0XHRcdFx0cHVibGlzaFRpbWU6IHNiTWVzc2FnZS5lbnF1ZXVlZFRpbWVVdGMgPyBuZXcgRGF0ZShzYk1lc3NhZ2UuZW5xdWV1ZWRUaW1lVXRjKSA6IG5ldyBEYXRlKCksXG5cdFx0XHRcdGFjazogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGF3YWl0IHJlY2VpdmVyLmNvbXBsZXRlTWVzc2FnZShzYk1lc3NhZ2UpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYWNrOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgcmVjZWl2ZXIuYWJhbmRvbk1lc3NhZ2Uoc2JNZXNzYWdlKTtcblx0XHRcdFx0fSxcblx0XHRcdH07XG5cblx0XHRcdC8vIFByb2Nlc3MgbWVzc2FnZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgaGFuZGxlcihwdWJzdWJNZXNzYWdlKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYFtBenVyZVNlcnZpY2VCdXNBZGFwdGVyXSBFcnJvciBwcm9jZXNzaW5nIG1lc3NhZ2U6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBFcnJvciBoYW5kbGVyIOKAlCBBenVyZSBTREsgcGFzc2VzIGEgYFByb2Nlc3NFcnJvckFyZ3NgIHdpdGggdGhlXG5cdFx0Ly8gdW5kZXJseWluZyBlcnJvciBpbnNpZGUgYGFyZ3MuZXJyb3JgIHBsdXMgY29udGV4dHVhbCBmaWVsZHMuXG5cdFx0Y29uc3QgcHJvY2Vzc0Vycm9yID0gYXN5bmMgKGFyZ3M6IFByb2Nlc3NFcnJvckFyZ3MpID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFtBenVyZVNlcnZpY2VCdXNBZGFwdGVyXSBFcnJvcjogJHthcmdzLmVycm9yLm1lc3NhZ2V9YCk7XG5cdFx0fTtcblxuXHRcdC8vIFN1YnNjcmliZSB0byBtZXNzYWdlc1xuXHRcdHJlY2VpdmVyLnN1YnNjcmliZSh7XG5cdFx0XHRwcm9jZXNzTWVzc2FnZSxcblx0XHRcdHByb2Nlc3NFcnJvcixcblx0XHR9KTtcblxuXHRcdHRoaXMucmVjZWl2ZXJzLnNldChzdWJzY3JpcHRpb25LZXksIHJlY2VpdmVyKTtcblxuXHRcdGNvbnNvbGUubG9nKGBbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gU3Vic2NyaWJlZCB0bzogJHtzdWJzY3JpcHRpb25LZXl9YCk7XG5cdH1cblxuXHQvKipcblx0ICogVW5zdWJzY3JpYmUgZnJvbSBBenVyZSBTZXJ2aWNlIEJ1c1xuXHQgKi9cblx0YXN5bmMgdW5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByZWNlaXZlciA9IHRoaXMucmVjZWl2ZXJzLmdldChzdWJzY3JpcHRpb25LZXkpO1xuXHRcdGlmIChyZWNlaXZlcikge1xuXHRcdFx0YXdhaXQgcmVjZWl2ZXIuY2xvc2UoKTtcblx0XHRcdHRoaXMucmVjZWl2ZXJzLmRlbGV0ZShzdWJzY3JpcHRpb25LZXkpO1xuXHRcdFx0Y29uc29sZS5sb2coYFtBenVyZVNlcnZpY2VCdXNBZGFwdGVyXSBVbnN1YnNjcmliZWQgZnJvbTogJHtzdWJzY3JpcHRpb25LZXl9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGNvbm5lY3RlZCB0byBBenVyZSBTZXJ2aWNlIEJ1c1xuXHQgKi9cblx0aXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNiDigJQgcHVibGlzaCB0byBhbiBBenVyZSBTZXJ2aWNlIEJ1cyB0b3BpYy5cblx0ICpcblx0ICogYHBhcnRpdGlvbktleWAgbWFwcyB0byBTZXJ2aWNlIEJ1cydzIGBwYXJ0aXRpb25LZXlgOyBgb3JkZXJpbmdLZXlgXG5cdCAqIG1hcHMgdG8gYHNlc3Npb25JZGAgKGZvciBzZXNzaW9uLWVuYWJsZWQgdG9waWNzKS5cblx0ICovXG5cdGFzeW5jIHB1Ymxpc2goXG5cdFx0dG9waWM6IHN0cmluZyxcblx0XHRwYXlsb2FkOiB1bmtub3duLFxuXHRcdG9wdHM/OiB7IHBhcnRpdGlvbktleT86IHN0cmluZzsgb3JkZXJpbmdLZXk/OiBzdHJpbmcgfSxcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgdGhyb3cgbmV3IEVycm9yKFwiW2Jsb2tdW3B1YnN1Yi1henVyZV0gbm90IGNvbm5lY3RlZC4gQ2FsbCBjb25uZWN0KCkgZmlyc3QuXCIpO1xuXHRcdGNvbnN0IHNlbmRlciA9IHRoaXMucmVxdWlyZUNsaWVudCgpLmNyZWF0ZVNlbmRlcih0b3BpYyk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHNlbmRlci5zZW5kTWVzc2FnZXMoe1xuXHRcdFx0XHRib2R5OiBwYXlsb2FkLFxuXHRcdFx0XHRwYXJ0aXRpb25LZXk6IG9wdHM/LnBhcnRpdGlvbktleSxcblx0XHRcdFx0c2Vzc2lvbklkOiBvcHRzPy5vcmRlcmluZ0tleSxcblx0XHRcdH0pO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRhd2FpdCBzZW5kZXIuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGVhbHRoIGNoZWNrIC0gdmVyaWZ5IEF6dXJlIFNlcnZpY2UgQnVzIGNvbm5lY3Rpdml0eVxuXHQgKi9cblx0YXN5bmMgaGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIENyZWF0ZSBhIHRlbXBvcmFyeSByZWNlaXZlciB0byB0ZXN0IGNvbm5lY3Rpdml0eVxuXHRcdFx0Y29uc3QgdGVzdFJlY2VpdmVyID0gdGhpcy5yZXF1aXJlQ2xpZW50KCkuY3JlYXRlUmVjZWl2ZXIoXCIkZGVmYXVsdFwiLCB7XG5cdFx0XHRcdHJlY2VpdmVNb2RlOiBcInBlZWtMb2NrXCIsXG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IHRlc3RSZWNlaXZlci5jbG9zZSgpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBRdWV1ZSBtaWdodCBub3QgZXhpc3QgYnV0IGNvbm5lY3Rpb24gaXMgaGVhbHRoeSBpZiB3ZSBnb3QgaGVyZVxuXHRcdFx0cmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBBenVyZVNlcnZpY2VCdXNBZGFwdGVyO1xuIl19
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVTZXJ2aWNlQnVzQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9BenVyZVNlcnZpY2VCdXNBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQVNILE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBV2xDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixRQUFRLEdBQUcsT0FBZ0IsQ0FBQztJQUU3QixNQUFNLENBQStCO0lBQ3JDLFNBQVMsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN2RCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE1BQU0sQ0FBd0I7SUFDOUIsWUFBWSxDQUF1RDtJQUUzRTs7O09BR0c7SUFDSyxhQUFhO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhLEVBQUUsWUFBcUI7UUFDdkQsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUQsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQXlCO1FBQ3pELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ2QseUpBQXlKLENBQ3pKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsSUFBSSxNQUFNLENB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TyxLQUFLLENBQUM7UUFFbEMsSUFBSSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtnQkFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQzlGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDO2dCQUNKLE1BQU0sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxDQUFDO29CQUFTLENBQUM7Z0JBQ1YsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNSLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNGLENBQUM7Q0FDRDtBQUVELGVBQWUsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF6dXJlU2VydmljZUJ1c0FkYXB0ZXIgLSBBenVyZSBTZXJ2aWNlIEJ1cyBhZGFwdGVyIGZvciBQdWJTdWJUcmlnZ2VyXG4gKlxuICogVXNlcyBAYXp1cmUvc2VydmljZS1idXMgZm9yIEF6dXJlIFNlcnZpY2UgQnVzIGNvbm5lY3Rpdml0eS5cbiAqIFJlcXVpcmVzOiBucG0gaW5zdGFsbCBAYXp1cmUvc2VydmljZS1idXNcbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIEFaVVJFX1NFUlZJQ0VfQlVTX0NPTk5FQ1RJT05fU1RSSU5HOiBBenVyZSBTZXJ2aWNlIEJ1cyBjb25uZWN0aW9uIHN0cmluZ1xuICogLSBBWlVSRV9TRVJWSUNFX0JVU19GVUxMWV9RVUFMSUZJRURfTkFNRVNQQUNFOiBGdWxseSBxdWFsaWZpZWQgbmFtZXNwYWNlIChpZiB1c2luZyBEZWZhdWx0QXp1cmVDcmVkZW50aWFsKVxuICovXG5cbmltcG9ydCB0eXBlIHtcblx0UHJvY2Vzc0Vycm9yQXJncyxcblx0U2VydmljZUJ1c0NsaWVudCxcblx0U2VydmljZUJ1c1JlY2VpdmVkTWVzc2FnZSxcblx0U2VydmljZUJ1c1JlY2VpdmVyLFxufSBmcm9tIFwiQGF6dXJlL3NlcnZpY2UtYnVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1YlN1YlRyaWdnZXJPcHRzIH0gZnJvbSBcIkBibG9ranMvaGVscGVyXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB0eXBlIHsgUHViU3ViQWRhcHRlciwgUHViU3ViTWVzc2FnZSB9IGZyb20gXCIuLi9QdWJTdWJUcmlnZ2VyXCI7XG5cbi8qKlxuICogQXp1cmUgU2VydmljZSBCdXMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF6dXJlU2VydmljZUJ1c0NvbmZpZyB7XG5cdGNvbm5lY3Rpb25TdHJpbmc/OiBzdHJpbmc7XG5cdGZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF6dXJlU2VydmljZUJ1c0FkYXB0ZXIgLSBBenVyZSBTZXJ2aWNlIEJ1cyBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgQXp1cmVTZXJ2aWNlQnVzQWRhcHRlciBpbXBsZW1lbnRzIFB1YlN1YkFkYXB0ZXIge1xuXHRyZWFkb25seSBwcm92aWRlciA9IFwiYXp1cmVcIiBhcyBjb25zdDtcblxuXHRwcml2YXRlIGNsaWVudDogU2VydmljZUJ1c0NsaWVudCB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSByZWNlaXZlcnM6IE1hcDxzdHJpbmcsIFNlcnZpY2VCdXNSZWNlaXZlcj4gPSBuZXcgTWFwKCk7XG5cdHByaXZhdGUgY29ubmVjdGVkID0gZmFsc2U7XG5cdHByaXZhdGUgY29uZmlnOiBBenVyZVNlcnZpY2VCdXNDb25maWc7XG5cdHByaXZhdGUgaGVhbHRoVGFyZ2V0OiB7IHRvcGljOiBzdHJpbmc7IHN1YnNjcmlwdGlvbj86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUeXBlLW5hcnJvd2luZyBhY2Nlc3NvciBmb3IgYHRoaXMuY2xpZW50YC4gRmllbGQgaXMgdW5kZWZpbmVkIHVudGlsXG5cdCAqIGBjb25uZWN0KClgIHJ1bnMuXG5cdCAqL1xuXHRwcml2YXRlIHJlcXVpcmVDbGllbnQoKTogU2VydmljZUJ1c0NsaWVudCB7XG5cdFx0aWYgKCF0aGlzLmNsaWVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIGNsaWVudCBpcyBub3QgaW5pdGlhbGlzZWQg4oCUIGNhbGwgY29ubmVjdCgpIGZpcnN0XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jbGllbnQ7XG5cdH1cblxuXHRwcml2YXRlIHJlY2VpdmVyS2V5KHRvcGljOiBzdHJpbmcsIHN1YnNjcmlwdGlvbj86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHN1YnNjcmlwdGlvbiA/IGAke3RvcGljfS8ke3N1YnNjcmlwdGlvbn1gIDogdG9waWM7XG5cdH1cblxuXHRwcml2YXRlIHJlamVjdFVuc3VwcG9ydGVkT3B0aW9ucyhjb25maWc6IFB1YlN1YlRyaWdnZXJPcHRzKTogdm9pZCB7XG5cdFx0aWYgKGNvbmZpZy5jb25zdW1lckdyb3VwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIGBjb25zdW1lckdyb3VwYCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm92aWRlciAnYXp1cmUnIOKAlCB1c2UgdGhlIFNlcnZpY2UgQnVzIHN1YnNjcmlwdGlvbiBuYW1lIGFzIHRoZSBjb21wZXRpbmctY29uc3VtZXIgZ3JvdXAuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoY29uZmlnLmR1cmFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gYGR1cmFibGU6IGZhbHNlYCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm92aWRlciAnYXp1cmUnLlwiKTtcblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5zdGFydEZyb20gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIGBzdGFydEZyb21gIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3ZpZGVyICdhenVyZScuXCIpO1xuXHRcdH1cblx0XHRpZiAoY29uZmlnLmRlYWRMZXR0ZXJUb3BpYykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIltBenVyZVNlcnZpY2VCdXNBZGFwdGVyXSBgZGVhZExldHRlclRvcGljYCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm92aWRlciAnYXp1cmUnIOKAlCB1c2UgdGhlIGVudGl0eSdzIG5hdGl2ZSBkZWFkLWxldHRlciBzdWJxdWV1ZS5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChjb25maWcubWF4TWVzc2FnZXMgIT09IHVuZGVmaW5lZCAmJiBjb25maWcubWF4TWVzc2FnZXMgIT09IDEwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gYG1heE1lc3NhZ2VzYCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdHJlYW1pbmcgQXp1cmUgc3Vic2NyaXB0aW9ucy5cIik7XG5cdFx0fVxuXHRcdGlmIChjb25maWcuYWNrRGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiBjb25maWcuYWNrRGVhZGxpbmUgIT09IDMwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gYGFja0RlYWRsaW5lYCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm92aWRlciAnYXp1cmUnLlwiKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiBBenVyZVNlcnZpY2VCdXNDb25maWcpIHtcblx0XHR0aGlzLmNvbmZpZyA9IHtcblx0XHRcdGNvbm5lY3Rpb25TdHJpbmc6IGNvbmZpZz8uY29ubmVjdGlvblN0cmluZyB8fCBwcm9jZXNzLmVudi5BWlVSRV9TRVJWSUNFX0JVU19DT05ORUNUSU9OX1NUUklORyxcblx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlOlxuXHRcdFx0XHRjb25maWc/LmZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlIHx8IHByb2Nlc3MuZW52LkFaVVJFX1NFUlZJQ0VfQlVTX0ZVTExZX1FVQUxJRklFRF9OQU1FU1BBQ0UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25uZWN0IHRvIEF6dXJlIFNlcnZpY2UgQnVzXG5cdCAqL1xuXHRhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmNvbm5lY3RlZCkgcmV0dXJuO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIER5bmFtaWMgaW1wb3J0IG9mIEBhenVyZS9zZXJ2aWNlLWJ1c1xuXHRcdFx0Y29uc3QgeyBTZXJ2aWNlQnVzQ2xpZW50IH0gPSBhd2FpdCBpbXBvcnQoXCJAYXp1cmUvc2VydmljZS1idXNcIik7XG5cblx0XHRcdGlmICh0aGlzLmNvbmZpZy5jb25uZWN0aW9uU3RyaW5nKSB7XG5cdFx0XHRcdHRoaXMuY2xpZW50ID0gbmV3IFNlcnZpY2VCdXNDbGllbnQodGhpcy5jb25maWcuY29ubmVjdGlvblN0cmluZyk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29uZmlnLmZ1bGx5UXVhbGlmaWVkTmFtZXNwYWNlKSB7XG5cdFx0XHRcdC8vIFdvdWxkIG5lZWQgQGF6dXJlL2lkZW50aXR5IGZvciBEZWZhdWx0QXp1cmVDcmVkZW50aWFsXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk1hbmFnZWQgaWRlbnRpdHkgYXV0aGVudGljYXRpb24gcmVxdWlyZXMgQGF6dXJlL2lkZW50aXR5IHBhY2thZ2VcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFaXRoZXIgY29ubmVjdGlvblN0cmluZyBvciBmdWxseVF1YWxpZmllZE5hbWVzcGFjZSBpcyByZXF1aXJlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS5sb2coXCJbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gQ29ubmVjdGVkIHRvIEF6dXJlIFNlcnZpY2UgQnVzXCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBGYWlsZWQgdG8gY29ubmVjdCB0byBBenVyZSBTZXJ2aWNlIEJ1czogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9LiBNYWtlIHN1cmUgQGF6dXJlL3NlcnZpY2UtYnVzIGlzIGluc3RhbGxlZDogbnBtIGluc3RhbGwgQGF6dXJlL3NlcnZpY2UtYnVzYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3QgZnJvbSBBenVyZSBTZXJ2aWNlIEJ1c1xuXHQgKi9cblx0YXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29ubmVjdGVkKSByZXR1cm47XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gQ2xvc2UgYWxsIHJlY2VpdmVyc1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgcmVjZWl2ZXJdIG9mIHRoaXMucmVjZWl2ZXJzKSB7XG5cdFx0XHRcdGF3YWl0IHJlY2VpdmVyLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlY2VpdmVycy5jbGVhcigpO1xuXG5cdFx0XHRhd2FpdCB0aGlzLnJlcXVpcmVDbGllbnQoKS5jbG9zZSgpO1xuXHRcdFx0dGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcblx0XHRcdGNvbnNvbGUubG9nKFwiW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIERpc2Nvbm5lY3RlZCBmcm9tIEF6dXJlIFNlcnZpY2UgQnVzXCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gRXJyb3IgZGlzY29ubmVjdGluZzogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1YnNjcmliZSB0byBhbiBBenVyZSBTZXJ2aWNlIEJ1cyB0b3BpYy9zdWJzY3JpcHRpb24gb3IgcXVldWVcblx0ICovXG5cdGFzeW5jIHN1YnNjcmliZShjb25maWc6IFB1YlN1YlRyaWdnZXJPcHRzLCBoYW5kbGVyOiAobWVzc2FnZTogUHViU3ViTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vdCBjb25uZWN0ZWQgdG8gQXp1cmUgU2VydmljZSBCdXMuIENhbGwgY29ubmVjdCgpIGZpcnN0LlwiKTtcblx0XHR9XG5cdFx0dGhpcy5yZWplY3RVbnN1cHBvcnRlZE9wdGlvbnMoY29uZmlnKTtcblxuXHRcdGNvbnN0IGNsaWVudCA9IHRoaXMucmVxdWlyZUNsaWVudCgpO1xuXHRcdGxldCByZWNlaXZlcjogU2VydmljZUJ1c1JlY2VpdmVyO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB0b3BpYyBzdWJzY3JpcHRpb24gb3IgYSBxdWV1ZVxuXHRcdGlmIChjb25maWcuc3Vic2NyaXB0aW9uICYmIGNvbmZpZy50b3BpYykge1xuXHRcdFx0Ly8gVG9waWMgd2l0aCBzdWJzY3JpcHRpb25cblx0XHRcdHJlY2VpdmVyID0gY2xpZW50LmNyZWF0ZVJlY2VpdmVyKGNvbmZpZy50b3BpYywgY29uZmlnLnN1YnNjcmlwdGlvbiwge1xuXHRcdFx0XHRyZWNlaXZlTW9kZTogY29uZmlnLmFjayAhPT0gZmFsc2UgPyBcInBlZWtMb2NrXCIgOiBcInJlY2VpdmVBbmREZWxldGVcIixcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBRdWV1ZVxuXHRcdFx0cmVjZWl2ZXIgPSBjbGllbnQuY3JlYXRlUmVjZWl2ZXIoY29uZmlnLnN1YnNjcmlwdGlvbiB8fCBjb25maWcudG9waWMsIHtcblx0XHRcdFx0cmVjZWl2ZU1vZGU6IGNvbmZpZy5hY2sgIT09IGZhbHNlID8gXCJwZWVrTG9ja1wiIDogXCJyZWNlaXZlQW5kRGVsZXRlXCIsXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBzdWJzY3JpcHRpb25LZXkgPSB0aGlzLnJlY2VpdmVyS2V5KGNvbmZpZy50b3BpYywgY29uZmlnLnN1YnNjcmlwdGlvbik7XG5cblx0XHQvLyBNZXNzYWdlIGhhbmRsZXJcblx0XHRjb25zdCBwcm9jZXNzTWVzc2FnZSA9IGFzeW5jIChzYk1lc3NhZ2U6IFNlcnZpY2VCdXNSZWNlaXZlZE1lc3NhZ2UpID0+IHtcblx0XHRcdC8vIFBhcnNlIG1lc3NhZ2UgYm9keVxuXHRcdFx0bGV0IGJvZHk6IHVua25vd247XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHNiTWVzc2FnZS5ib2R5ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Ym9keSA9IEpTT04ucGFyc2Uoc2JNZXNzYWdlLmJvZHkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJvZHkgPSBzYk1lc3NhZ2UuYm9keTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdGJvZHkgPSBzYk1lc3NhZ2UuYm9keTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRXh0cmFjdCBhcHBsaWNhdGlvbiBwcm9wZXJ0aWVzIGFzIGF0dHJpYnV0ZXNcblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRcdGlmIChzYk1lc3NhZ2UuYXBwbGljYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNiTWVzc2FnZS5hcHBsaWNhdGlvblByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdFx0YXR0cmlidXRlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgcHViL3N1YiBtZXNzYWdlXG5cdFx0XHRjb25zdCBwdWJzdWJNZXNzYWdlOiBQdWJTdWJNZXNzYWdlID0ge1xuXHRcdFx0XHQvLyBgbWVzc2FnZUlkYCBtYXkgYmUgc3RyaW5nIHwgbnVtYmVyIHwgQnVmZmVyIHBlciBBenVyZSBTREs7IGNvZXJjZSB0byBzdHJpbmcuXG5cdFx0XHRcdGlkOiBzYk1lc3NhZ2UubWVzc2FnZUlkICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoc2JNZXNzYWdlLm1lc3NhZ2VJZCkgOiB1dWlkKCksXG5cdFx0XHRcdGJvZHksXG5cdFx0XHRcdGF0dHJpYnV0ZXMsXG5cdFx0XHRcdHJhdzogc2JNZXNzYWdlLFxuXHRcdFx0XHR0b3BpYzogY29uZmlnLnRvcGljLFxuXHRcdFx0XHRzdWJzY3JpcHRpb246IGNvbmZpZy5zdWJzY3JpcHRpb24sXG5cdFx0XHRcdHB1Ymxpc2hUaW1lOiBzYk1lc3NhZ2UuZW5xdWV1ZWRUaW1lVXRjID8gbmV3IERhdGUoc2JNZXNzYWdlLmVucXVldWVkVGltZVV0YykgOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRhY2s6IGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRhd2FpdCByZWNlaXZlci5jb21wbGV0ZU1lc3NhZ2Uoc2JNZXNzYWdlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0bmFjazogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGF3YWl0IHJlY2VpdmVyLmFiYW5kb25NZXNzYWdlKHNiTWVzc2FnZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBQcm9jZXNzIG1lc3NhZ2Vcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGhhbmRsZXIocHVic3ViTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gRXJyb3IgcHJvY2Vzc2luZyBtZXNzYWdlOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gRXJyb3IgaGFuZGxlciDigJQgQXp1cmUgU0RLIHBhc3NlcyBhIGBQcm9jZXNzRXJyb3JBcmdzYCB3aXRoIHRoZVxuXHRcdC8vIHVuZGVybHlpbmcgZXJyb3IgaW5zaWRlIGBhcmdzLmVycm9yYCBwbHVzIGNvbnRleHR1YWwgZmllbGRzLlxuXHRcdGNvbnN0IHByb2Nlc3NFcnJvciA9IGFzeW5jIChhcmdzOiBQcm9jZXNzRXJyb3JBcmdzKSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBbQXp1cmVTZXJ2aWNlQnVzQWRhcHRlcl0gRXJyb3I6ICR7YXJncy5lcnJvci5tZXNzYWdlfWApO1xuXHRcdH07XG5cblx0XHQvLyBTdWJzY3JpYmUgdG8gbWVzc2FnZXNcblx0XHRyZWNlaXZlci5zdWJzY3JpYmUoe1xuXHRcdFx0cHJvY2Vzc01lc3NhZ2UsXG5cdFx0XHRwcm9jZXNzRXJyb3IsXG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlY2VpdmVycy5zZXQoc3Vic2NyaXB0aW9uS2V5LCByZWNlaXZlcik7XG5cdFx0dGhpcy5oZWFsdGhUYXJnZXQgPSB7IHRvcGljOiBjb25maWcudG9waWMsIHN1YnNjcmlwdGlvbjogY29uZmlnLnN1YnNjcmlwdGlvbiB9O1xuXG5cdFx0Y29uc29sZS5sb2coYFtBenVyZVNlcnZpY2VCdXNBZGFwdGVyXSBTdWJzY3JpYmVkIHRvOiAke3N1YnNjcmlwdGlvbktleX1gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnN1YnNjcmliZSBmcm9tIEF6dXJlIFNlcnZpY2UgQnVzXG5cdCAqL1xuXHRhc3luYyB1bnN1YnNjcmliZShzdWJzY3JpcHRpb25LZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHJlY2VpdmVyID0gdGhpcy5yZWNlaXZlcnMuZ2V0KHN1YnNjcmlwdGlvbktleSk7XG5cdFx0aWYgKHJlY2VpdmVyKSB7XG5cdFx0XHRhd2FpdCByZWNlaXZlci5jbG9zZSgpO1xuXHRcdFx0dGhpcy5yZWNlaXZlcnMuZGVsZXRlKHN1YnNjcmlwdGlvbktleSk7XG5cdFx0XHRjb25zb2xlLmxvZyhgW0F6dXJlU2VydmljZUJ1c0FkYXB0ZXJdIFVuc3Vic2NyaWJlZCBmcm9tOiAke3N1YnNjcmlwdGlvbktleX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgY29ubmVjdGVkIHRvIEF6dXJlIFNlcnZpY2UgQnVzXG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogdjAuNyBQUiA2IOKAlCBwdWJsaXNoIHRvIGFuIEF6dXJlIFNlcnZpY2UgQnVzIHRvcGljLlxuXHQgKlxuXHQgKiBgcGFydGl0aW9uS2V5YCBtYXBzIHRvIFNlcnZpY2UgQnVzJ3MgYHBhcnRpdGlvbktleWAuIGBvcmRlcmluZ0tleWBcblx0ICogd291bGQgcmVxdWlyZSBzZXNzaW9uIHJlY2VpdmVycywgc28gaXQgaXMgcmVqZWN0ZWQgdW50aWwgc2Vzc2lvbnMgYXJlXG5cdCAqIGltcGxlbWVudGVkIGVuZCB0byBlbmQuXG5cdCAqL1xuXHRhc3luYyBwdWJsaXNoKFxuXHRcdHRvcGljOiBzdHJpbmcsXG5cdFx0cGF5bG9hZDogdW5rbm93bixcblx0XHRvcHRzPzogeyBwYXJ0aXRpb25LZXk/OiBzdHJpbmc7IG9yZGVyaW5nS2V5Pzogc3RyaW5nIH0sXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIltibG9rXVtwdWJzdWItYXp1cmVdIG5vdCBjb25uZWN0ZWQuIENhbGwgY29ubmVjdCgpIGZpcnN0LlwiKTtcblx0XHRpZiAob3B0cz8ub3JkZXJpbmdLZXkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJbYmxva11bcHVic3ViLWF6dXJlXSBgb3JkZXJpbmdLZXlgIHJlcXVpcmVzIEF6dXJlIFNlcnZpY2UgQnVzIHNlc3Npb25zLCB3aGljaCB0aGlzIGFkYXB0ZXIgZG9lcyBub3Qgc3VwcG9ydCB5ZXQuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCBzZW5kZXIgPSB0aGlzLnJlcXVpcmVDbGllbnQoKS5jcmVhdGVTZW5kZXIodG9waWMpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBzZW5kZXIuc2VuZE1lc3NhZ2VzKHtcblx0XHRcdFx0Ym9keTogcGF5bG9hZCxcblx0XHRcdFx0cGFydGl0aW9uS2V5OiBvcHRzPy5wYXJ0aXRpb25LZXksXG5cdFx0XHR9KTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgc2VuZGVyLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhlYWx0aCBjaGVjayAtIHZlcmlmeSBBenVyZSBTZXJ2aWNlIEJ1cyBjb25uZWN0aXZpdHlcblx0ICovXG5cdGFzeW5jIGhlYWx0aENoZWNrKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHJldHVybiBmYWxzZTtcblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIXRoaXMuaGVhbHRoVGFyZ2V0KSByZXR1cm4gdHJ1ZTtcblx0XHRcdGNvbnN0IHRlc3RSZWNlaXZlciA9IHRoaXMuaGVhbHRoVGFyZ2V0LnN1YnNjcmlwdGlvblxuXHRcdFx0XHQ/IHRoaXMucmVxdWlyZUNsaWVudCgpLmNyZWF0ZVJlY2VpdmVyKHRoaXMuaGVhbHRoVGFyZ2V0LnRvcGljLCB0aGlzLmhlYWx0aFRhcmdldC5zdWJzY3JpcHRpb24pXG5cdFx0XHRcdDogdGhpcy5yZXF1aXJlQ2xpZW50KCkuY3JlYXRlUmVjZWl2ZXIodGhpcy5oZWFsdGhUYXJnZXQudG9waWMpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGVzdFJlY2VpdmVyLnBlZWtNZXNzYWdlcygxKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGF3YWl0IHRlc3RSZWNlaXZlci5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF6dXJlU2VydmljZUJ1c0FkYXB0ZXI7XG4iXX0=