cdk-nextjs 0.7.11 → 0.7.12

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.
@@ -163,7 +163,10 @@ class RuntimeImageOptimizer {
163
163
  return {
164
164
  buffer: result.buffer,
165
165
  contentType: result.contentType,
166
- cacheControl: null,
166
+ // The object's own, as `fetchInternalImage` passes on the file's
167
+ // `Cache-Control`: the optimizer keeps the result for its max-age, a
168
+ // year for an immutable `_next/static/media` file.
169
+ cacheControl: result.cacheControl,
167
170
  // Encoded as for a route's response: `fetchInternalImage` does too.
168
171
  etag: (0, image_utils_1.extractEtag)(result.etag, result.buffer),
169
172
  };
@@ -336,4 +339,4 @@ function loadImageRuntime({ manifest }) {
336
339
  };
337
340
  return { next, nextConfig };
338
341
  }
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpZEEsc0RBY0M7QUEvZEQsc0RBQXNEO0FBQ3REOzs7Ozs7OztHQVFHO0FBQ0gseUNBQStEO0FBQy9ELHVDQUF5QztBQUl6Qyw4Q0FBdUU7QUFDdkUsK0NBQStFO0FBQy9FLDhEQUEyRDtBQUUzRCxpREFBNEM7QUFDNUMsaUNBQThDO0FBa0Y5QyxNQUFhLHFCQUFxQjtJQUtJO0lBSm5CLEVBQUUsR0FBRyxJQUFBLGVBQVEsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sQ0FBdUM7SUFDN0MsVUFBVSxDQUF1QjtJQUV6QyxZQUFvQyxPQUE4QjtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUFHLENBQUM7SUFFdEU7Ozs7OztPQU1HO0lBQ0ksU0FBUztRQUNkLDRFQUE0RTtRQUM1RSw4Q0FBOEM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEdBQXdCLEVBQ3hCLEdBQXVCLEVBQ3ZCLEdBQVEsRUFDUixTQUE4QztRQUU5Qyw2RUFBNkU7UUFDN0UsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sRUFDSixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixj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LE1BQU0sQ0FBQyxZQUFZLElBQUksU0FBUztRQUM5QyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCO0tBQ3hCLENBQUM7SUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKipcbiAqIGAvX25leHQvaW1hZ2VgLCBmb2xkZWQgaW50byB0aGUgcnVudGltZSBjb3JlLlxuICpcbiAqIFRoZSByZXNwb25zZSBpcyB3cml0dGVuIHRvIGEge0BsaW5rIFNoaW1TZXJ2ZXJSZXNwb25zZX0gcmF0aGVyIHRoYW4gc3RyYWlnaHQgdG9cbiAqIGEgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbSwgc28gaXQgY29tcG9zZXMgd2l0aCByb3V0aW5nOiBkaXNwYXRjaCBvbmx5IGNsYXNzaWZpZXNcbiAqIGEgcmVxdWVzdCBhcyBpbWFnZSBvcHRpbWl6YXRpb24gKmFmdGVyKiBtaWRkbGV3YXJlIGhhcyBoYWQgaXQsIHdoaWNoIGlzIHdoYXRcbiAqIG1ha2VzIGBOZXh0UmVzcG9uc2UucmV3cml0ZSgpYCBvbnRvIGFuIGltYWdlIHdvcmsuIFRoYXQgaXMgYWxzbyB3aHkgdGhlcmUgaXMgbm9cbiAqIGxvbmdlciBhIGRlZGljYXRlZCBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhIOKAlCBtaWRkbGV3YXJlIG5ldmVyIHJhbiBmb3IgaXQuXG4gKi9cbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgaXNBYnNvbHV0ZVBhdGgsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWdDb21wbGV0ZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2NvbmZpZy1zaGFyZWQuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVkUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGUvdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL2h0dHAvcmVxdWVzdFwiO1xuaW1wb3J0IHsgYXNTZXJ2ZXJSZXNwb25zZSwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vaHR0cC9yZXNwb25zZVwiO1xuaW1wb3J0IHsgZXh0cmFjdEV0YWcsIGZldGNoRnJvbVMzLCByZXNvbHZlRXJyb3JSZXNwb25zZSB9IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5pbXBvcnQgeyBDREtfTkVYVEpTX1ZFUlNJT04gfSBmcm9tIFwiLi4vY2RrLW5leHRqcy12ZXJzaW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9tYW5pZmVzdFwiO1xuaW1wb3J0IHsgbmV4dE1vZHVsZSB9IGZyb20gXCIuL25leHQtbW9kdWxlc1wiO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZSwgczNDbGllbnQgfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKlxuICogUmVxdWlyZWQgdGhyb3VnaCB7QGxpbmsgbmV4dE1vZHVsZX0gcmF0aGVyIHRoYW4gaW1wb3J0ZWQsIGJlY2F1c2UgYG5leHRgIGlzXG4gKiBleHRlcm5hbCB0byB0aGUgc2hlbGwgYnVuZGxlcyBhbmQgZG9lcyBub3QgcmVzb2x2ZSBmcm9tIHdoZXJlIHRoZXkgc2l0LiBFdmVyeVxuICogdHlwZSBoZXJlIGlzIHN0aWxsIHRoZSByZWFsIG9uZTogYHR5cGVvZiBpbXBvcnQoLi4uKWAgaXMgZXJhc2VkLlxuICovXG5pbnRlcmZhY2UgTmV4dEltYWdlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IG9wdGltaXplcjogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpO1xuICByZWFkb25seSBzZXJ2ZVN0YXRpYzogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIpO1xufVxuXG4vKiogVGhlIG1vZHVsZXMgb25seSB0aGUgaW1hZ2UgY2FjaGUgbmVlZHMsIGxvYWRlZCB3aXRoIGl0LiAqL1xuaW50ZXJmYWNlIE5leHRJbWFnZUNhY2hlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IHJlc3BvbnNlQ2FjaGU6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpO1xufVxuXG4vKiogQSBgY2FjaGVIYW5kbGVyYCBjbGFzcywgYXMgYG5leHQuY29uZmlnYCdzIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBleHBvcnRzIGl0LiAqL1xudHlwZSBDYWNoZUhhbmRsZXJDbGFzcyA9IG5ldyAoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSA9PiBOb25OdWxsYWJsZTxcbiAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgIE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl1bXCJJbWFnZU9wdGltaXplckNhY2hlXCJdXG4gID5bMF1bXCJjYWNoZUhhbmRsZXJcIl1cbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VPcHRpbWl6ZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVwbG95bWVudFJvb3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdDtcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfQlVDS0VUX05BTUVgLiBFbXB0eSB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrXG4gICAqIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIHdoaWNoIHNlbmRzIGV2ZXJ5IG9uZSB0byBgZmV0Y2hJbnRlcm5hbGAuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfS0VZX1BSRUZJWGAuIEVtcHR5IHdoZW4gdGhlIGFzc2V0cyBzaXQgYXQgdGhlIHJvb3RcbiAgICogb2YgdGhlIGJ1Y2tldCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXRLZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcXVlc3RzIGEgbG9jYWwgc291cmNlIGZyb20gdGhlIGFwcCdzIG93biByb3V0ZXMsIGZvciBvbmUgUzMgaGFzIG5vIGZpbGVcbiAgICogZm9yOiBgPEltYWdlIHNyYz1cIi9hcGkvYXZhdGFyP2lkPTQyXCI+YCwgc2VydmVkIGJ5IGEgcm91dGUgaGFuZGxlci4gYG5leHRcbiAgICogc3RhcnRgIGZldGNoZXMgZXZlcnkgbG9jYWwgc291cmNlIHRoYXQgd2F5IChgZmV0Y2hJbnRlcm5hbEltYWdlYCk7IGhlcmUgaXRcbiAgICogaXMgdGhlIGZhbGxiYWNrLCBzaW5jZSBuZWFybHkgZXZlcnkgc291cmNlIGlzIGEgZmlsZSwgYW5kIGEgYEdldE9iamVjdGAgaXNcbiAgICogZmFyIGNoZWFwZXIgdGhhbiBhIHJvdXRlIGludm9jYXRpb24uXG4gICAqXG4gICAqIEdpdmVuIHRoZSByZXF1ZXN0IGJlaW5nIG9wdGltaXplZCwgZm9yIGl0cyBhdXRob3JpdHk7IGxpa2UgYG5leHQgc3RhcnRgLFxuICAgKiB0aGUgdmlld2VyJ3MgY29va2llcyBhbmQgb3RoZXIgaGVhZGVycyBhcmUgbm90IHRoZSBpbXBsZW1lbnRhdGlvbidzIHRvXG4gICAqIGZvcndhcmQuIEFuZCBnaXZlbiBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCBwYXN0IHdoaWNoIGl0IHN0b3BzXG4gICAqIHJlYWRpbmcgYW5kIGFuc3dlcnMge0BsaW5rIEludGVybmFsSW1hZ2VSZXNwb25zZS50b29MYXJnZX0uXG4gICAqL1xuICByZWFkb25seSBmZXRjaEludGVybmFsOiAoXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICkgPT4gUHJvbWlzZTxJbnRlcm5hbEltYWdlUmVzcG9uc2U+O1xuICAvKipcbiAgICogTG9hZHMgdGhlIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBmcm9tIGl0cyBmaWxlIFVSTC4gQSBzZWFtIGZvciB0ZXN0cywgd2hpY2hcbiAgICogcnVuIGFzIENvbW1vbkpTIGFuZCBjYW5ub3QgYGltcG9ydCgpYCBhIFVSTC5cbiAgICogQGRlZmF1bHQgLSBgaW1wb3J0KClgXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRNb2R1bGU/OiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKiBUaGUgcmVzcG9uc2Uge0BsaW5rIEltYWdlT3B0aW1pemVyT3B0aW9ucy5mZXRjaEludGVybmFsfSBnb3QuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsSW1hZ2VSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVhZGVyczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+PjtcbiAgcmVhZG9ubHkgYm9keTogQnVmZmVyO1xuICAvKipcbiAgICogVGhlIGBmdW5jdGlvbkdyb3Vwc2AgZ3JvdXAgd2hvc2UgcGFja2FnZSBoYXMgdGhlIHJvdXRlIHRoYXQgc2VydmVzIHRoZVxuICAgKiBzb3VyY2UsIHdoZW4gaXQgaXMgbm90IHRoaXMgZnVuY3Rpb24nczogdGhlcmUgaXMgbm8gcmVzcG9uc2UgdG8gdXNlLCBhbmRcbiAgICogdGhlIG9wdGltaXplciBhbnN3ZXJzIGFuIGV4cGxpY2l0IDUwMiByYXRoZXIgdGhhbiBhIFwibm90IGEgdmFsaWQgaW1hZ2VcIi5cbiAgICovXG4gIHJlYWRvbmx5IG90aGVyR3JvdXA/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm9keSBwYXNzZWQgYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgc28gaXQgd2FzIGN1dCBvZmY6IGEgNDEzLCBhc1xuICAgKiBgbmV4dCBzdGFydGAgYW5zd2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHRvb0xhcmdlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVJbWFnZU9wdGltaXplciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgczMgPSBzM0NsaWVudCgpO1xuICBwcml2YXRlIGxvYWRlZD86IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+O1xuICBwcml2YXRlIGltYWdlQ2FjaGU/OiBQcm9taXNlPEltYWdlQ2FjaGU+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEltYWdlT3B0aW1pemVyT3B0aW9ucykge31cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYXBwIHNlcnZlcyBgL19uZXh0L2ltYWdlYCBhdCBhbGwuIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIDQwNFxuICAgKiB3aGVuIGBpbWFnZXMudW5vcHRpbWl6ZWRgIGlzIHNldCBvciBhIG5vbi1kZWZhdWx0IGBsb2FkZXJgIGlzIGNvbmZpZ3VyZWRcbiAgICogKGBuZXh0LXNlcnZlci5qc2ApLCBhbmQgc28gZG9lcyB0aGUgcnVudGltZTogb3RoZXJ3aXNlIGFueW9uZSBjYW4gbWFrZSB0aGVcbiAgICogY29tcHV0ZSBydW4gc2hhcnAgYW5kIHdyaXRlIHRoZSBpbWFnZSBjYWNoZSBvbiBhbiBlbmRwb2ludCB0aGUgYXBwIHR1cm5lZFxuICAgKiBvZmYuXG4gICAqL1xuICBwdWJsaWMgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIEZyb20gdGhlIG1hbmlmZXN0IGFsb25lOiBhbiBhcHAgdGhhdCB0dXJuZWQgaW1hZ2VzIG9mZiBzaG91bGRuJ3QgbG9hZCB0aGVcbiAgICAvLyBvcHRpbWl6ZXIgKGFuZCBgc2hhcnBgKSBqdXN0IHRvIGFuc3dlciA0MDQuXG4gICAgY29uc3QgaW1hZ2VzID0gbWFuaWZlc3RJbWFnZXModGhpcy5vcHRpb25zLm1hbmlmZXN0KTtcbiAgICByZXR1cm4gaW1hZ2VzLmxvYWRlciA9PT0gXCJkZWZhdWx0XCIgJiYgIWltYWdlcy51bm9wdGltaXplZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGUoXG4gICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogU2hpbVNlcnZlclJlc3BvbnNlLFxuICAgIHVybDogVVJMLFxuICAgIHdhaXRVbnRpbDogKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4pID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlc29sdmVkIG9uIHRoZSBmaXJzdCBpbWFnZSByZXF1ZXN0IHJhdGhlciB0aGFuIGF0IGNvbGQgc3RhcnQ6IGFuIGFwcCB3aXRoXG4gICAgLy8gbm8gYDxJbWFnZT5gIHNob3VsZCBub3QgcGF5IGZvciB0aGUgYG5leHRgIG1vZHVsZSBsb2Fkcy5cbiAgICB0aGlzLmxvYWRlZCA/Pz0gbG9hZEltYWdlUnVudGltZSh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgbmV4dCwgbmV4dENvbmZpZyB9ID0gdGhpcy5sb2FkZWQ7XG4gICAgY29uc3QgaW1hZ2VzQ29uZmlnID0gbmV4dENvbmZpZy5pbWFnZXM7XG4gICAgY29uc3Qge1xuICAgICAgSW1hZ2VFcnJvcixcbiAgICAgIEltYWdlT3B0aW1pemVyQ2FjaGUsXG4gICAgICBmZXRjaEV4dGVybmFsSW1hZ2UsXG4gICAgICBpbWFnZU9wdGltaXplcixcbiAgICAgIHNlbmRSZXNwb25zZSxcbiAgICB9ID0gbmV4dC5vcHRpbWl6ZXI7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zID0gSW1hZ2VPcHRpbWl6ZXJDYWNoZS52YWxpZGF0ZVBhcmFtcyhcbiAgICAgICAgcmVxIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgICB0eXBlb2YgSW1hZ2VPcHRpbWl6ZXJDYWNoZS52YWxpZGF0ZVBhcmFtc1xuICAgICAgICA+WzBdLFxuICAgICAgICBPYmplY3QuZnJvbUVudHJpZXModXJsLnNlYXJjaFBhcmFtcyksXG4gICAgICAgIG5leHRDb25maWcsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICAgIGlmIChcImVycm9yTWVzc2FnZVwiIGluIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gc2VuZFRleHQocmVzLCA0MDAsIHBhcmFtcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGhyZWYsIGlzQWJzb2x1dGUgfSA9IHBhcmFtcztcbiAgICAgIGNvbnN0IG9wdGltaXplID0gYXN5bmMgKHByZXZpb3VzQ2FjaGVFbnRyeT86IFByZXZpb3VzSW1hZ2VFbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCB1cHN0cmVhbSA9IGlzQWJzb2x1dGVcbiAgICAgICAgICA/IGF3YWl0IGZldGNoRXh0ZXJuYWxJbWFnZShcbiAgICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLmRhbmdlcm91c2x5QWxsb3dMb2NhbElQLFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcubWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLm1heGltdW1SZWRpcmVjdHMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBhd2FpdCB0aGlzLmZldGNoTG9jYWwoXG4gICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgICAgbmV4dENvbmZpZyxcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLm1heGltdW1SZXNwb25zZUJvZHksXG4gICAgICAgICAgICAgIG5leHQub3B0aW1pemVyLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBvcHRpbWl6ZWQgPSBhd2FpdCBpbWFnZU9wdGltaXplcihcbiAgICAgICAgICB1cHN0cmVhbSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhwZXJpbWVudGFsOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbCxcbiAgICAgICAgICAgIGltYWdlczoge1xuICAgICAgICAgICAgICBkYW5nZXJvdXNseUFsbG93U1ZHOiBpbWFnZXNDb25maWcuZGFuZ2Vyb3VzbHlBbGxvd1NWRyxcbiAgICAgICAgICAgICAgbWluaW11bUNhY2hlVFRMOiBpbWFnZXNDb25maWcubWluaW11bUNhY2hlVFRMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNEZXY6IGZhbHNlLCBwcmV2aW91c0NhY2hlRW50cnkgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBgaW1hZ2VPcHRpbWl6ZXJgIHJlcG9ydHMgYSBmYWlsZWQgb3B0aW1pemF0aW9uIGJ5IHJldHVybmluZyB0aGVcbiAgICAgICAgLy8gdW50b3VjaGVkIHVwc3RyZWFtIGltYWdlIGFsb25nc2lkZSBgZXJyb3JgIHJhdGhlciB0aGFuIHRocm93aW5nLCBzb1xuICAgICAgICAvLyB3aXRob3V0IHRoaXMgYSBicm9rZW4gYHNoYXJwYCBpbnN0YWxsIHNlcnZlcyBmdWxsLXNpemUgb3JpZ2luYWxzIHdpdGhcbiAgICAgICAgLy8gYSAyMDAgaW5kZWZpbml0ZWx5IGFuZCBub3RoaW5nIGluIHRoZSBsb2dzIHNheXMgd2h5LlxuICAgICAgICBpZiAob3B0aW1pemVkLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gb3B0aW1pemUgJHtocmVmfSwgc2VydmluZyB0aGUgdW5vcHRpbWl6ZWQgb3JpZ2luYWw6YCxcbiAgICAgICAgICAgIG9wdGltaXplZC5lcnJvcixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpbWl6ZWQ7XG4gICAgICB9O1xuXG4gICAgICAvLyBOZXh0J3Mgb3duIHJlc3BvbnNlIHdyaXRlciwgcmF0aGVyIHRoYW4gYSByZXN0YXRlbWVudCBvZiBpdCwgc28gdGhlXG4gICAgICAvLyBoZWFkZXJzIGBuZXh0IHN0YXJ0YCBzZW5kcyBjb21lIHdpdGggaXQ6IHRoZSB5ZWFyLWxvbmcgYGltbXV0YWJsZWAgZm9yXG4gICAgICAvLyBhIGAvX25leHQvc3RhdGljL21lZGlhYCBzcmMsIGBJZi1Ob25lLU1hdGNoYCBhcyBgZnJlc2hgIHJlYWRzIGl0ICh3ZWFrXG4gICAgICAvLyBhbmQgbGlzdGVkIHRhZ3MsIGBDYWNoZS1Db250cm9sOiBuby1jYWNoZWApLCBhIGBDb250ZW50LURpc3Bvc2l0aW9uYFxuICAgICAgLy8gdGhhdCBSRkMgNTk4Ny1lbmNvZGVzIGEgZmlsZW5hbWUgYHdyaXRlSGVhZGAgd291bGQgcmVqZWN0IGFzXG4gICAgICAvLyBub24tbGF0aW4xLCBgQ29udGVudC1MZW5ndGhgLCBhbmQgbm8gYm9keSBmb3IgSEVBRC4gVGhlIHJlc3RhdGVkXG4gICAgICAvLyB2ZXJzaW9uIGhhZCBkcmlmdGVkIG9uIGV2ZXJ5IG9uZSBvZiB0aG9zZS5cbiAgICAgIGNvbnN0IHNlbmQgPSAoXG4gICAgICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgICAgICBidWZmZXI6IEJ1ZmZlcixcbiAgICAgICAgZXRhZzogc3RyaW5nLFxuICAgICAgICB4Q2FjaGU6IFwiTUlTU1wiIHwgXCJISVRcIiB8IFwiU1RBTEVcIixcbiAgICAgICAgbWF4QWdlOiBudW1iZXIsXG4gICAgICApID0+IHtcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgIHNlbmRSZXNwb25zZShcbiAgICAgICAgICByZXEgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBzZW5kUmVzcG9uc2U+WzBdLFxuICAgICAgICAgIGFzU2VydmVyUmVzcG9uc2UocmVzKSxcbiAgICAgICAgICBocmVmLFxuICAgICAgICAgIGV4dGVuc2lvbixcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgZXRhZyxcbiAgICAgICAgICBwYXJhbXMuaXNTdGF0aWMsXG4gICAgICAgICAgeENhY2hlLFxuICAgICAgICAgIGltYWdlc0NvbmZpZyxcbiAgICAgICAgICBtYXhBZ2UsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICAvLyBgbmV4dCBzdGFydGAncyBgaGFuZGxlTmV4dEltYWdlUmVxdWVzdGAsIHN0ZXAgZm9yIHN0ZXA6IGFcbiAgICAgIC8vIGBSZXNwb25zZUNhY2hlYCBvdmVyIGFuIGBJbWFnZU9wdGltaXplckNhY2hlYCBiYWNrZWQgYnkgdGhlIGFwcCdzXG4gICAgICAvLyBgY2FjaGVIYW5kbGVyYCwgc28gYSBoaXQgc2tpcHMgdGhlIGZldGNoIGFuZCBgc2hhcnBgLCBhIHN0YWxlIGVudHJ5IGlzXG4gICAgICAvLyBzZXJ2ZWQgd2hpbGUgaXQgaXMgcmVnZW5lcmF0ZWQsIGFuZCBjb25jdXJyZW50IG1pc3NlcyBmb3Igb25lIGltYWdlXG4gICAgICAvLyBvcHRpbWl6ZSBpdCBvbmNlLiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAgaXMgdGhlIFMzIGNhY2hlLCB3aGljaCB0aGVcbiAgICAgIC8vIGFkYXB0ZXIgdHVybnMgb24gd2l0aCBgaW1hZ2VzLmN1c3RvbUNhY2hlSGFuZGxlcmA6IHdpdGggbm8gQ0ROIGluIGZyb250XG4gICAgICAvLyAodGhlIFJlZ2lvbmFsIHR5cGVzKSBldmVyeSByZXF1ZXN0IHdvdWxkIG90aGVyd2lzZSBydW4gYHNoYXJwYCBhZ2FpbixcbiAgICAgIC8vIGFuZCBiZWhpbmQgQ2xvdWRGcm9udCBlYWNoIGVkZ2UgbWlzcyBpcyBhbiBTMyByZWFkIGluc3RlYWQuXG4gICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKHRoaXMubG9hZGVkKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgY2FjaGUucmVzcG9uc2VzLmdldChcbiAgICAgICAgSW1hZ2VPcHRpbWl6ZXJDYWNoZS5nZXRDYWNoZUtleShwYXJhbXMpLFxuICAgICAgICBhc3luYyAoeyBwcmV2aW91c0NhY2hlRW50cnkgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgYnVmZmVyLCBjb250ZW50VHlwZSwgbWF4QWdlLCBldGFnLCB1cHN0cmVhbUV0YWcgfSA9XG4gICAgICAgICAgICBhd2FpdCBvcHRpbWl6ZShwcmV2aW91c0NhY2hlRW50cnkgYXMgUHJldmlvdXNJbWFnZUVudHJ5KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAga2luZDogSU1BR0VfS0lORCxcbiAgICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgICBldGFnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IG5leHQuc2VydmVTdGF0aWMuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKSA/PyBcIlwiLFxuICAgICAgICAgICAgICB1cHN0cmVhbUV0YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IG1heEFnZSwgZXhwaXJlOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcm91dGVLaW5kOiBJTUFHRV9LSU5ELFxuICAgICAgICAgIGluY3JlbWVudGFsQ2FjaGU6IGRlZmVyV3JpdGVzKGNhY2hlLmltYWdlcywgd2FpdFVudGlsKSxcbiAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICAvLyBBIHN0YWxlIGVudHJ5IGlzIHNlcnZlZCBhdCBvbmNlIGFuZCByZWdlbmVyYXRlZCBpbiB0aGUgYmFja2dyb3VuZDtcbiAgICAgICAgICAvLyB3aXRob3V0IHRoaXMsIGEgTGFtYmRhIGNvdWxkIGZyZWV6ZSB3aXRoIHRoZSByZWdlbmVyYXRpb24gaGFsZiBkb25lLlxuICAgICAgICAgIHdhaXRVbnRpbCxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8SW1hZ2VDYWNoZVtcInJlc3BvbnNlc1wiXVtcImdldFwiXT5bMl0sXG4gICAgICApO1xuICAgICAgLy8gQSBmYWlsZWQgcmVuZGVyLCBmcm9tIG5leHQgMTYuNDsgYG5leHQtc2VydmVyLmpzYCByZXRocm93cyBpdCB0aGUgc2FtZVxuICAgICAgLy8gd2F5LiBUaGUgZ2VuZXJhdG9yIGFib3ZlIHRocm93cyBpbnN0ZWFkLCBzbyB0aGlzIGlzIHRoZSB0eXBlJ3MgY2FzZS5cbiAgICAgIGlmIChlbnRyeSAmJiBcImVycm9yXCIgaW4gZW50cnkpIHtcbiAgICAgICAgdGhyb3cgZW50cnkuZXJyb3I7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGVudHJ5Py52YWx1ZSBhc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIGtpbmQ6IHN0cmluZztcbiAgICAgICAgICAgIGV4dGVuc2lvbjogc3RyaW5nO1xuICAgICAgICAgICAgYnVmZmVyOiBCdWZmZXI7XG4gICAgICAgICAgICBldGFnOiBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB8IG51bGxcbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWU/LmtpbmQgIT09IElNQUdFX0tJTkQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGltYWdlIGNhY2hlIHJldHVybmVkIG5vIGltYWdlIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgc2VuZChcbiAgICAgICAgdmFsdWUuZXh0ZW5zaW9uLFxuICAgICAgICB2YWx1ZS5idWZmZXIsXG4gICAgICAgIHZhbHVlLmV0YWcsXG4gICAgICAgIGVudHJ5IS5pc01pc3MgPyBcIk1JU1NcIiA6IGVudHJ5IS5pc1N0YWxlID8gXCJTVEFMRVwiIDogXCJISVRcIixcbiAgICAgICAgZW50cnkhLmNhY2hlQ29udHJvbD8ucmV2YWxpZGF0ZSB8fCAwLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0gPSByZXNvbHZlRXJyb3JSZXNwb25zZShlcnJvciwgSW1hZ2VFcnJvcik7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA+PSA1MDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkltYWdlIG9wdGltaXphdGlvbiBmYWlsZWQ6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHNlbmRUZXh0KHJlcywgc3RhdHVzQ29kZSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0ZWQgb24gZmFpbHVyZSwgYXMgYEVudHJ5cG9pbnRSZWdpc3RyeS5sb2FkYCBldmljdHMgYSBmYWlsZWQgbW9kdWxlIGxvYWQ6XG4gICAqIGEgdHJhbnNpZW50IGZhaWx1cmUgaW1wb3J0aW5nIHRoZSBgY2FjaGVIYW5kbGVyYCAoRU1GSUxFIHVuZGVyIGEgY29sZC1zdGFydFxuICAgKiBidXJzdCkgd291bGQgb3RoZXJ3aXNlIDUwMCBldmVyeSBpbWFnZSByZXF1ZXN0IHVudGlsIHRoZSBzYW5kYm94IHJlY3ljbGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkQ2FjaGUoXG4gICAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbiAgKTogUHJvbWlzZTxJbWFnZUNhY2hlPiB7XG4gICAgaWYgKCF0aGlzLmltYWdlQ2FjaGUpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gbG9hZEltYWdlQ2FjaGUodGhpcy5vcHRpb25zLCBsb2FkZWQpO1xuICAgICAgdGhpcy5pbWFnZUNhY2hlID0gY2FjaGU7XG4gICAgICBjYWNoZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlQ2FjaGUgPT09IGNhY2hlKSB7XG4gICAgICAgICAgdGhpcy5pbWFnZUNhY2hlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hMb2NhbChcbiAgICByZXE6IFNoaW1JbmNvbWluZ01lc3NhZ2UsXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIG5leHRDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+W1wibmV4dENvbmZpZ1wiXSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICAgb3B0aW1pemVyOiBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdLFxuICApIHtcbiAgICBjb25zdCB7IGJ1Y2tldCwgZmV0Y2hJbnRlcm5hbCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIC8vIE5vIGJ1Y2tldCB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIGFuZFxuICAgIC8vIHRoZSByb3V0ZXMgc2VydmUgdGhvc2UgYXMgdGhleSBzZXJ2ZSBhbnl0aGluZyBTMyBoYXMgbm8gZmlsZSBmb3IuXG4gICAgaWYgKGJ1Y2tldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICAgICAgdGhpcy5zMyxcbiAgICAgICAgICBidWNrZXQsXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmxCYXNlUGF0aDogbmV4dENvbmZpZy5iYXNlUGF0aCxcbiAgICAgICAgICAgIGtleVByZWZpeDogdGhpcy5vcHRpb25zLmJ1Y2tldEtleVByZWZpeCxcbiAgICAgICAgICAgIGFzc2V0UHJlZml4OiBuZXh0Q29uZmlnLmFzc2V0UHJlZml4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBidWZmZXI6IHJlc3VsdC5idWZmZXIsXG4gICAgICAgICAgY29udGVudFR5cGU6IHJlc3VsdC5jb250ZW50VHlwZSxcbiAgICAgICAgICBjYWNoZUNvbnRyb2w6IG51bGwsXG4gICAgICAgICAgLy8gRW5jb2RlZCBhcyBmb3IgYSByb3V0ZSdzIHJlc3BvbnNlOiBgZmV0Y2hJbnRlcm5hbEltYWdlYCBkb2VzIHRvby5cbiAgICAgICAgICBldGFnOiBleHRyYWN0RXRhZyhyZXN1bHQuZXRhZywgcmVzdWx0LmJ1ZmZlciksXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vU3VjaEtleVwiO1xuICAgICAgICBpZiAoIW1pc3NpbmcpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgY2hlY2tzLCBhbmQgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVzcG9uc2UuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEludGVybmFsKGhyZWYsIHJlcSwgbWF4aW11bVJlc3BvbnNlQm9keSk7XG4gICAgaWYgKHJlc3BvbnNlLm90aGVyR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSBkZXBsb3ltZW50IHByb2JsZW0sIG5vdCBhIGJhZCBgdXJsYDogbGVhdmUgdGhlIHJvdXRlIGluIHRoZSBkZWZhdWx0XG4gICAgICAvLyBncm91cCwgb3Igc2VydmUgdGhlIGltYWdlIGFzIGEgZmlsZSAocHVibGljLyBvciBhIHN0YXRpYyBpbXBvcnQpLlxuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA1MDIsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaXRzIHNvdXJjZSBpcyBhIHJvdXRlIGluIGFub3RoZXIgJyArXG4gICAgICAgICAgYGZ1bmN0aW9uR3JvdXBzIGdyb3VwIChcIiR7cmVzcG9uc2Uub3RoZXJHcm91cH1cIiksIHdoaWNoIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICBcIm9wdGltaXplciBjYW5ub3QgZmV0Y2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS50b29MYXJnZSkge1xuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA0MTMsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLnN0YXR1c0NvZGUgfHwgcmVzcG9uc2UuYm9keS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBvcHRpbWl6ZXIuSW1hZ2VFcnJvcihcbiAgICAgICAgNDAwLFxuICAgICAgICAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgdmFsaWQgYnV0IGludGVybmFsIHJlc3BvbnNlIGlzIGludmFsaWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcjogcmVzcG9uc2UuYm9keSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmaXJzdFZhbHVlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pID8/IG51bGwsXG4gICAgICBjYWNoZUNvbnRyb2w6IGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pID8/IG51bGwsXG4gICAgICBldGFnOiBleHRyYWN0RXRhZyhcbiAgICAgICAgZmlyc3RWYWx1ZShyZXNwb25zZS5oZWFkZXJzLmV0YWcpID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlLmJvZHksXG4gICAgICApLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBgQ2FjaGVkUm91dGVLaW5kLklNQUdFYCwgd2hpY2ggaXMgYWxzbyBgUm91dGVLaW5kLklNQUdFYC4gUmVzdGF0ZWQ6IHRoZSBlbnVtIGlzXG4gKiBhIHJ1bnRpbWUgdmFsdWUgb2YgYG5leHRgLCB3aGljaCB0aGUgYnVuZGxlIGNhbm5vdCBpbXBvcnQuXG4gKi9cbmNvbnN0IElNQUdFX0tJTkQgPSBcIklNQUdFXCIgYXMgQ2FjaGVkUm91dGVLaW5kLklNQUdFO1xuXG4vKiogYGltYWdlT3B0aW1pemVyYCdzIGBwcmV2aW91c0NhY2hlRW50cnlgLiAqL1xudHlwZSBQcmV2aW91c0ltYWdlRW50cnkgPSBQYXJhbWV0ZXJzPFxuICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiaW1hZ2VPcHRpbWl6ZXJcIl1cbj5bM11bXCJwcmV2aW91c0NhY2hlRW50cnlcIl07XG5cbmludGVyZmFjZSBJbWFnZUNhY2hlIHtcbiAgcmVhZG9ubHkgcmVzcG9uc2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl1cbiAgPjtcbiAgcmVhZG9ubHkgaW1hZ2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXVtcIkltYWdlT3B0aW1pemVyQ2FjaGVcIl1cbiAgPjtcbn1cblxuLyoqXG4gKiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAsIGNvbnN0cnVjdGVkIHRoZSB3YXkgYG5leHQgc3RhcnRgIGNvbnN0cnVjdHMgaXQgZm9yXG4gKiBpbWFnZXMgKGBuZXh0LXNlcnZlci5qc2AsIGBoYW5kbGVOZXh0SW1hZ2VSZXF1ZXN0YCk6IG9uY2UsIGFuZCBrZXB0LCBzbyBpdHNcbiAqIGluLW1lbW9yeSBsYXllciBsYXN0cyBhY3Jvc3MgcmVxdWVzdHMuIEl0cyBwYXRoIGluIHRoZSBtYW5pZmVzdCBpcyByZWxhdGl2ZVxuICogdG8gdGhlIGRpc3QgZGlyOyBzZWUge0BsaW5rIGNhY2hlSGFuZGxlclVybH0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZUNhY2hlKFxuICB7IGRlcGxveW1lbnRSb290LCBtYW5pZmVzdCwgaW1wb3J0TW9kdWxlIH06IEltYWdlT3B0aW1pemVyT3B0aW9ucyxcbiAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbik6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IGxvYWRlZDtcbiAgY29uc3QgbW9kdWxlczogTmV4dEltYWdlQ2FjaGVNb2R1bGVzID0ge1xuICAgIHJlc3BvbnNlQ2FjaGU6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpLFxuICB9O1xuICBjb25zdCBkaXN0RGlyID0gam9pbihcbiAgICBkZXBsb3ltZW50Um9vdCxcbiAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgbWFuaWZlc3QuY29uZmlnLmRpc3REaXIsXG4gICk7XG4gIGxldCBjYWNoZUhhbmRsZXI6IEluc3RhbmNlVHlwZTxDYWNoZUhhbmRsZXJDbGFzcz4gfCB1bmRlZmluZWQ7XG4gIGlmIChuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcikge1xuICAgIGNvbnN0IHVybCA9IGNhY2hlSGFuZGxlclVybChkaXN0RGlyLCBuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcik7XG4gICAgY29uc3QgaW1wb3J0ZWQgPSAoYXdhaXQgKGltcG9ydE1vZHVsZVxuICAgICAgPyBpbXBvcnRNb2R1bGUodXJsKVxuICAgICAgOiBpbXBvcnQodXJsKSkpIGFzIHsgZGVmYXVsdD86IENhY2hlSGFuZGxlckNsYXNzIH0gJiBDYWNoZUhhbmRsZXJDbGFzcztcbiAgICBjb25zdCBDYWNoZUhhbmRsZXIgPSBpbXBvcnRlZC5kZWZhdWx0ID8/IGltcG9ydGVkO1xuICAgIGNhY2hlSGFuZGxlciA9IG5ldyBDYWNoZUhhbmRsZXIoe1xuICAgICAgZGV2OiBmYWxzZSxcbiAgICAgIGZsdXNoVG9EaXNrOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbC5pc3JGbHVzaFRvRGlzayxcbiAgICAgIHNlcnZlckRpc3REaXI6IGpvaW4oZGlzdERpciwgXCJzZXJ2ZXJcIiksXG4gICAgICBtYXhNZW1vcnlDYWNoZVNpemU6IG5leHRDb25maWcuY2FjaGVNYXhNZW1vcnlTaXplLFxuICAgICAgcmV2YWxpZGF0ZWRUYWdzOiBbXSxcbiAgICAgIF9yZXF1ZXN0SGVhZGVyczoge30sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZXM6IG5ld0ltYWdlUmVzcG9uc2VDYWNoZShtb2R1bGVzLnJlc3BvbnNlQ2FjaGUuZGVmYXVsdCksXG4gICAgaW1hZ2VzOiBuZXcgbmV4dC5vcHRpbWl6ZXIuSW1hZ2VPcHRpbWl6ZXJDYWNoZSh7XG4gICAgICBkaXN0RGlyLFxuICAgICAgbmV4dENvbmZpZyxcbiAgICAgIGNhY2hlSGFuZGxlcixcbiAgICB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgbmV3IFJlc3BvbnNlQ2FjaGUoLi4uKWAgZm9yIGltYWdlcywgb24gZWl0aGVyIHNpZGUgb2YgbmV4dCAxNi4zLjguIEJlZm9yZVxuICogaXQgdGhlIGNvbnN0cnVjdG9yIHRvb2sgYG1pbmltYWxNb2RlYDsgZnJvbSBpdCwgYHsgbWluaW1hbE1vZGUsIHJvdXRlIH1gLCBhbmRcbiAqIGl0IHRocm93cyB3aXRob3V0IGEgYHJvdXRlYCAtIGBuZXh0LXNlcnZlci5qc2AgcGFzc2VzIGBcImltYWdlXCJgLiBOZWl0aGVyIGZvcm1cbiAqIGNhbiBzdGFuZCBpbiBmb3IgdGhlIG90aGVyOiBhbiBvbGRlciBgbmV4dGAgdGFrZXMgdGhlIG9wdGlvbnMgb2JqZWN0IGFzIGFcbiAqIHRydXRoeSBgbWluaW1hbE1vZGVgLCBhbmQgMTYuMy44IHJlamVjdHMgYSBiYXJlIGBmYWxzZWAuXG4gKlxuICogVG9sZCBhcGFydCBieSB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIHRoZSBvbGRlciBmb3JtIHJhdGhlciB0aGFuIGJ5XG4gKiB0aGUgdmVyc2lvbiwgd2hpY2ggYSBjYW5hcnkgZG9lcyBub3Qgb3JkZXIsIG9yIGJ5IGl0cyBwcml2YXRlIGZpZWxkczogMTYuMy44XG4gKiBkZXN0cnVjdHVyZXMgYSBiYXJlIGBmYWxzZWAgaW50byBubyBgcm91dGVgIGFuZCB0aHJvd3MuIE9ubHkgdGhhdCB0aHJvd1xuICogc2VsZWN0cyB0aGUgbmV3ZXIgZm9ybTsgYW55IG90aGVyIGVycm9yIGZyb20gdGhlIGNvbnN0cnVjdG9yIGlzIHJldGhyb3duXG4gKiByYXRoZXIgdGhhbiByZWFkIGFzIGEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld0ltYWdlUmVzcG9uc2VDYWNoZShcbiAgUmVzcG9uc2VDYWNoZTogTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0sXG4pOiBJbnN0YW5jZVR5cGU8TmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0+IHtcbiAgY29uc3QgTGVnYWN5ID0gUmVzcG9uc2VDYWNoZSBhcyB1bmtub3duIGFzIG5ldyAoXG4gICAgbWluaW1hbE1vZGU6IGJvb2xlYW4sXG4gICkgPT4gSW5zdGFuY2VUeXBlPHR5cGVvZiBSZXNwb25zZUNhY2hlPjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeShmYWxzZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghU3RyaW5nKChlcnIgYXMgRXJyb3IpPy5tZXNzYWdlKS5pbmNsdWRlcyhcInJlcXVpcmVzIGEgc291cmNlIHJvdXRlXCIpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2VDYWNoZSh7IG1pbmltYWxNb2RlOiBmYWxzZSwgcm91dGU6IFwiaW1hZ2VcIiB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGBmb3JtYXREeW5hbWljSW1wb3J0UGF0aGAgZnJvbSBgbmV4dC9kaXN0L2xpYi9mb3JtYXQtZHluYW1pYy1pbXBvcnQtcGF0aC5qc2AsXG4gKiByZXN0YXRlZDogYG5leHQgYnVpbGRgIGRvZXNuJ3QgdHJhY2UgdGhhdCBtb2R1bGUgaW50byB0aGUgZGVwbG95bWVudCwgc29cbiAqIGxvYWRpbmcgaXQgZmFpbGVkIGV2ZXJ5IGltYWdlIHJlcXVlc3Qgd2l0aCB0aGUgY2FjaGUgb24uIE5vIGBmaWxlOi8vYCBjYXNlOlxuICogdGhlIGFkYXB0ZXIgYWxyZWFkeSB0dXJuZWQgb25lIGludG8gYSBwYXRoIChgZGlzdFJlbGF0aXZlQ2FjaGVIYW5kbGVyYCkuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFuZGxlclVybChkaXN0RGlyOiBzdHJpbmcsIGNhY2hlSGFuZGxlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoXG4gICAgaXNBYnNvbHV0ZVBhdGgoY2FjaGVIYW5kbGVyKSA/IGNhY2hlSGFuZGxlciA6IGpvaW4oZGlzdERpciwgY2FjaGVIYW5kbGVyKSxcbiAgKS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIGBpbWFnZXNgLCB3aXRoIGl0cyBgc2V0YCBtb3ZlZCBvZmYgdGhlIHJlc3BvbnNlJ3MgY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBgUmVzcG9uc2VDYWNoZWAgYXdhaXRzIHRoZSB3cml0ZSBvZiBhIGZyZXNobHkgb3B0aW1pemVkIGltYWdlIGJlZm9yZSBpdCBoYW5kc1xuICogdGhlIGltYWdlIGJhY2ssIHNvIGV2ZXJ5IG1pc3MgcGFpZCBhbiBTMyBgUHV0T2JqZWN0YCAofjMwIG1zIG1lYXN1cmVkKSBiZWZvcmVcbiAqIGl0cyBmaXJzdCBieXRlLiBUaGUgd3JpdGUgaXMgcmVnaXN0ZXJlZCB3aXRoIGB3YWl0VW50aWxgIGluc3RlYWQsIHdoaWNoIHRoZVxuICogcnVudGltZSBkcmFpbnMgYmVmb3JlIGEgTGFtYmRhIGludm9jYXRpb24gcmV0dXJucyBvciBhIGNvbnRhaW5lciBzaHV0cyBkb3duLFxuICogc28gaXQgc3RpbGwgbGFuZHMuIEEgZmFpbGVkIHdyaXRlIGlzIGxvZ2dlZDsgdGhlIG5leHQgcmVxdWVzdCBvcHRpbWl6ZXMgdGhlXG4gKiBpbWFnZSBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBpdCB3b3VsZCBoYXZlIGRvbmUgYW55d2F5LlxuICovXG5mdW5jdGlvbiBkZWZlcldyaXRlcyhcbiAgaW1hZ2VzOiBJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdLFxuICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuKTogSW1hZ2VDYWNoZVtcImltYWdlc1wiXSB7XG4gIGNvbnN0IGRlZmVycmVkID0gT2JqZWN0LmNyZWF0ZShpbWFnZXMpIGFzIEltYWdlQ2FjaGVbXCJpbWFnZXNcIl07XG4gIGRlZmVycmVkLnNldCA9ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJpbWFnZXNcIl1bXCJzZXRcIl0+KSA9PiB7XG4gICAgd2FpdFVudGlsKFxuICAgICAgaW1hZ2VzLnNldCguLi5hcmdzKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYWNoZSBhbiBvcHRpbWl6ZWQgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICByZXR1cm4gZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRUZXh0KFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICBib2R5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgcmVzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgcmVzLmVuZChib2R5KTtcbn1cblxuLyoqXG4gKiBgbWFuaWZlc3QuY29uZmlnLmltYWdlc2AsIG9uY2UgdGhlIG1hbmlmZXN0IGlzIGtub3duIHRvIGJlIG9uZSB0aGlzIHJ1bnRpbWVcbiAqIHJlYWRzICh3aXRoIGBleHBlcmltZW50YWxgLCDigKYpLiBUaGUgZmllbGRzIGFyZSB0eXBlZCBgdW5rbm93bmAsIHNvIG9ubHkgdGhlXG4gKiB2ZXJzaW9uIGNhdGNoZXMgYSBtYW5pZmVzdCBhbm90aGVyIGNkay1uZXh0anMgd3JvdGU7IGBOZXh0anNCdWlsZGAgcmVqZWN0cyBvbmVcbiAqIGF0IHN5bnRoLCB3aGljaCBhIGhhbmQtd2lyZWQgZnVuY3Rpb24gc2tpcHMuXG4gKi9cbmZ1bmN0aW9uIG1hbmlmZXN0SW1hZ2VzKFxuICBtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0LFxuKTogTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdIHtcbiAgaWYgKG1hbmlmZXN0LmNka05leHRqc1ZlcnNpb24gIT09IENES19ORVhUSlNfVkVSU0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgYWRhcHRlciBtYW5pZmVzdCB3YXMgd3JpdHRlbiBieSBjZGstbmV4dGpzIGAgK1xuICAgICAgICBgJHttYW5pZmVzdC5jZGtOZXh0anNWZXJzaW9uID8/IFwiKHVua25vd24pXCJ9LCBidXQgdGhpcyBydW50aW1lIGlzIGAgK1xuICAgICAgICBgY2RrLW5leHRqcyAke0NES19ORVhUSlNfVkVSU0lPTn0uIFJlYnVpbGQgdGhlIGFwcCB3aXRoIHRoaXMgdmVyc2lvbi5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1hbmlmZXN0LmNvbmZpZy5pbWFnZXMgYXMgTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpbWl6ZXIncyBgbmV4dENvbmZpZ2AsIGZyb20gdGhlIGFkYXB0ZXIgbWFuaWZlc3QsIHdoaWNoIGNvcGllZCBpdCBvdXRcbiAqIG9mIHRoZSBidWlsZCdzIGBjdHguY29uZmlnYCAoYEFkYXB0ZXJNYW5pZmVzdENvbmZpZy5pbWFnZXNgKTogYWxyZWFkeSByZXNvbHZlZFxuICogYW5kIGRlZmF1bHRlZCwgc28gbmVpdGhlciBgZ2V0TmV4dENvbmZpZ1J1bnRpbWVgIG5vciBgaW1hZ2VDb25maWdEZWZhdWx0YCBpc1xuICogbmVlZGVkLiBPbmx5IHRoZSBmaWVsZHMgTmV4dCdzIGltYWdlIGNvZGUgcmVhZHM7IHRoZSBjYXN0IGlzIGJlY2F1c2UgdGhlXG4gKiBtYW5pZmVzdCBzdG9yZXMgdGhlbSBhcyBKU09OLlxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2VSdW50aW1lKHsgbWFuaWZlc3QgfTogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zKSB7XG4gIGNvbnN0IG5leHQ6IE5leHRJbWFnZU1vZHVsZXMgPSB7XG4gICAgb3B0aW1pemVyOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIiksXG4gICAgc2VydmVTdGF0aWM6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3NlcnZlLXN0YXRpYy5qc1wiKSxcbiAgfTtcbiAgY29uc3QgeyBjb25maWcgfSA9IG1hbmlmZXN0O1xuICBjb25zdCBuZXh0Q29uZmlnID0ge1xuICAgIGJhc2VQYXRoOiBjb25maWcuYmFzZVBhdGgsXG4gICAgYXNzZXRQcmVmaXg6IGNvbmZpZy5hc3NldFByZWZpeCxcbiAgICBpbWFnZXM6IG1hbmlmZXN0SW1hZ2VzKG1hbmlmZXN0KSxcbiAgICBleHBlcmltZW50YWw6IGNvbmZpZy5leHBlcmltZW50YWwsXG4gICAgY2FjaGVIYW5kbGVyOiBjb25maWcuY2FjaGVIYW5kbGVyID8/IHVuZGVmaW5lZCxcbiAgICBjYWNoZU1heE1lbW9yeVNpemU6IGNvbmZpZy5jYWNoZU1heE1lbW9yeVNpemUsXG4gIH0gYXMgTmV4dENvbmZpZ0NvbXBsZXRlO1xuICByZXR1cm4geyBuZXh0LCBuZXh0Q29uZmlnIH07XG59XG4iXX0=
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvZEEsc0RBY0M7QUFsZUQsc0RBQXNEO0FBQ3REOzs7Ozs7OztHQVFHO0FBQ0gseUNBQStEO0FBQy9ELHVDQUF5QztBQUl6Qyw4Q0FBdUU7QUFDdkUsK0NBQStFO0FBQy9FLDhEQUEyRDtBQUUzRCxpREFBNEM7QUFDNUMsaUNBQThDO0FBa0Y5QyxNQUFhLHFCQUFxQjtJQUtJO0lBSm5CLEVBQUUsR0FBRyxJQUFBLGVBQVEsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sQ0FBdUM7SUFDN0MsVUFBVSxDQUF1QjtJQUV6QyxZQUFvQyxPQUE4QjtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUFHLENBQUM7SUFFdEU7Ozs7OztPQU1HO0lBQ0ksU0FBUztRQUNkLDRFQUE0RTtRQUM1RSw4Q0FBOEM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEdBQXdCLEVBQ3hCLEdBQXVCLEVBQ3ZCLEdBQVEsRUFDUixTQUE4QztRQUU5Qyw2RUFBNkU7UUFDN0UsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sRUFDSixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixj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LENBQUM7UUFDaEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxJQUFJLFNBQVM7UUFDOUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtLQUN4QixDQUFDO0lBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyoqXG4gKiBgL19uZXh0L2ltYWdlYCwgZm9sZGVkIGludG8gdGhlIHJ1bnRpbWUgY29yZS5cbiAqXG4gKiBUaGUgcmVzcG9uc2UgaXMgd3JpdHRlbiB0byBhIHtAbGluayBTaGltU2VydmVyUmVzcG9uc2V9IHJhdGhlciB0aGFuIHN0cmFpZ2h0IHRvXG4gKiBhIExhbWJkYSByZXNwb25zZSBzdHJlYW0sIHNvIGl0IGNvbXBvc2VzIHdpdGggcm91dGluZzogZGlzcGF0Y2ggb25seSBjbGFzc2lmaWVzXG4gKiBhIHJlcXVlc3QgYXMgaW1hZ2Ugb3B0aW1pemF0aW9uICphZnRlciogbWlkZGxld2FyZSBoYXMgaGFkIGl0LCB3aGljaCBpcyB3aGF0XG4gKiBtYWtlcyBgTmV4dFJlc3BvbnNlLnJld3JpdGUoKWAgb250byBhbiBpbWFnZSB3b3JrLiBUaGF0IGlzIGFsc28gd2h5IHRoZXJlIGlzIG5vXG4gKiBsb25nZXIgYSBkZWRpY2F0ZWQgaW1hZ2Ugb3B0aW1pemF0aW9uIExhbWJkYSDigJQgbWlkZGxld2FyZSBuZXZlciByYW4gZm9yIGl0LlxuICovXG5pbXBvcnQgeyBpc0Fic29sdXRlIGFzIGlzQWJzb2x1dGVQYXRoLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnQ29tcGxldGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9jb25maWctc2hhcmVkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENhY2hlZFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNoaW1JbmNvbWluZ01lc3NhZ2UgfSBmcm9tIFwiLi9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IGFzU2VydmVyUmVzcG9uc2UsIFNoaW1TZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL2h0dHAvcmVzcG9uc2VcIjtcbmltcG9ydCB7IGV4dHJhY3RFdGFnLCBmZXRjaEZyb21TMywgcmVzb2x2ZUVycm9yUmVzcG9uc2UgfSBmcm9tIFwiLi9pbWFnZS11dGlsc1wiO1xuaW1wb3J0IHsgQ0RLX05FWFRKU19WRVJTSU9OIH0gZnJvbSBcIi4uL2Nkay1uZXh0anMtdmVyc2lvblwiO1xuaW1wb3J0IHsgQWRhcHRlck1hbmlmZXN0IH0gZnJvbSBcIi4vbWFuaWZlc3RcIjtcbmltcG9ydCB7IG5leHRNb2R1bGUgfSBmcm9tIFwiLi9uZXh0LW1vZHVsZXNcIjtcbmltcG9ydCB7IGZpcnN0VmFsdWUsIHMzQ2xpZW50IH0gZnJvbSBcIi4vdXRpbFwiO1xuXG4vKipcbiAqIFJlcXVpcmVkIHRocm91Z2gge0BsaW5rIG5leHRNb2R1bGV9IHJhdGhlciB0aGFuIGltcG9ydGVkLCBiZWNhdXNlIGBuZXh0YCBpc1xuICogZXh0ZXJuYWwgdG8gdGhlIHNoZWxsIGJ1bmRsZXMgYW5kIGRvZXMgbm90IHJlc29sdmUgZnJvbSB3aGVyZSB0aGV5IHNpdC4gRXZlcnlcbiAqIHR5cGUgaGVyZSBpcyBzdGlsbCB0aGUgcmVhbCBvbmU6IGB0eXBlb2YgaW1wb3J0KC4uLilgIGlzIGVyYXNlZC5cbiAqL1xuaW50ZXJmYWNlIE5leHRJbWFnZU1vZHVsZXMge1xuICByZWFkb25seSBvcHRpbWl6ZXI6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiKTtcbiAgcmVhZG9ubHkgc2VydmVTdGF0aWM6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL3NlcnZlLXN0YXRpYy5qc1wiKTtcbn1cblxuLyoqIFRoZSBtb2R1bGVzIG9ubHkgdGhlIGltYWdlIGNhY2hlIG5lZWRzLCBsb2FkZWQgd2l0aCBpdC4gKi9cbmludGVyZmFjZSBOZXh0SW1hZ2VDYWNoZU1vZHVsZXMge1xuICByZWFkb25seSByZXNwb25zZUNhY2hlOiB0eXBlb2YgaW1wb3J0KFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZS9pbmRleC5qc1wiKTtcbn1cblxuLyoqIEEgYGNhY2hlSGFuZGxlcmAgY2xhc3MsIGFzIGBuZXh0LmNvbmZpZ2AncyBgY2FjaGVIYW5kbGVyYCBtb2R1bGUgZXhwb3J0cyBpdC4gKi9cbnR5cGUgQ2FjaGVIYW5kbGVyQ2xhc3MgPSBuZXcgKFxuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbikgPT4gTm9uTnVsbGFibGU8XG4gIENvbnN0cnVjdG9yUGFyYW1ldGVyczxcbiAgICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiSW1hZ2VPcHRpbWl6ZXJDYWNoZVwiXVxuICA+WzBdW1wiY2FjaGVIYW5kbGVyXCJdXG4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlT3B0aW1pemVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRlcGxveW1lbnRSb290OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBgQ0RLX05FWFRKU19TVEFUSUNfQVNTRVRTX0JVQ0tFVF9OQU1FYC4gRW1wdHkgd2hlbiB0aGUgc291cmNlcyBhcmUgb24gZGlza1xuICAgKiAoYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2ApLCB3aGljaCBzZW5kcyBldmVyeSBvbmUgdG8gYGZldGNoSW50ZXJuYWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgQ0RLX05FWFRKU19TVEFUSUNfQVNTRVRTX0tFWV9QUkVGSVhgLiBFbXB0eSB3aGVuIHRoZSBhc3NldHMgc2l0IGF0IHRoZSByb290XG4gICAqIG9mIHRoZSBidWNrZXQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0S2V5UHJlZml4OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBhIGxvY2FsIHNvdXJjZSBmcm9tIHRoZSBhcHAncyBvd24gcm91dGVzLCBmb3Igb25lIFMzIGhhcyBubyBmaWxlXG4gICAqIGZvcjogYDxJbWFnZSBzcmM9XCIvYXBpL2F2YXRhcj9pZD00MlwiPmAsIHNlcnZlZCBieSBhIHJvdXRlIGhhbmRsZXIuIGBuZXh0XG4gICAqIHN0YXJ0YCBmZXRjaGVzIGV2ZXJ5IGxvY2FsIHNvdXJjZSB0aGF0IHdheSAoYGZldGNoSW50ZXJuYWxJbWFnZWApOyBoZXJlIGl0XG4gICAqIGlzIHRoZSBmYWxsYmFjaywgc2luY2UgbmVhcmx5IGV2ZXJ5IHNvdXJjZSBpcyBhIGZpbGUsIGFuZCBhIGBHZXRPYmplY3RgIGlzXG4gICAqIGZhciBjaGVhcGVyIHRoYW4gYSByb3V0ZSBpbnZvY2F0aW9uLlxuICAgKlxuICAgKiBHaXZlbiB0aGUgcmVxdWVzdCBiZWluZyBvcHRpbWl6ZWQsIGZvciBpdHMgYXV0aG9yaXR5OyBsaWtlIGBuZXh0IHN0YXJ0YCxcbiAgICogdGhlIHZpZXdlcidzIGNvb2tpZXMgYW5kIG90aGVyIGhlYWRlcnMgYXJlIG5vdCB0aGUgaW1wbGVtZW50YXRpb24ncyB0b1xuICAgKiBmb3J3YXJkLiBBbmQgZ2l2ZW4gYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgcGFzdCB3aGljaCBpdCBzdG9wc1xuICAgKiByZWFkaW5nIGFuZCBhbnN3ZXJzIHtAbGluayBJbnRlcm5hbEltYWdlUmVzcG9uc2UudG9vTGFyZ2V9LlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hJbnRlcm5hbDogKFxuICAgIGhyZWY6IHN0cmluZyxcbiAgICByZXE6IFNoaW1JbmNvbWluZ01lc3NhZ2UsXG4gICAgbWF4aW11bVJlc3BvbnNlQm9keTogbnVtYmVyLFxuICApID0+IFByb21pc2U8SW50ZXJuYWxJbWFnZVJlc3BvbnNlPjtcbiAgLyoqXG4gICAqIExvYWRzIHRoZSBgY2FjaGVIYW5kbGVyYCBtb2R1bGUgZnJvbSBpdHMgZmlsZSBVUkwuIEEgc2VhbSBmb3IgdGVzdHMsIHdoaWNoXG4gICAqIHJ1biBhcyBDb21tb25KUyBhbmQgY2Fubm90IGBpbXBvcnQoKWAgYSBVUkwuXG4gICAqIEBkZWZhdWx0IC0gYGltcG9ydCgpYFxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0TW9kdWxlPzogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG4vKiogVGhlIHJlc3BvbnNlIHtAbGluayBJbWFnZU9wdGltaXplck9wdGlvbnMuZmV0Y2hJbnRlcm5hbH0gZ290LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbEltYWdlUmVzcG9uc2Uge1xuICByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlYWRlcnM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRvbmx5IGJvZHk6IEJ1ZmZlcjtcbiAgLyoqXG4gICAqIFRoZSBgZnVuY3Rpb25Hcm91cHNgIGdyb3VwIHdob3NlIHBhY2thZ2UgaGFzIHRoZSByb3V0ZSB0aGF0IHNlcnZlcyB0aGVcbiAgICogc291cmNlLCB3aGVuIGl0IGlzIG5vdCB0aGlzIGZ1bmN0aW9uJ3M6IHRoZXJlIGlzIG5vIHJlc3BvbnNlIHRvIHVzZSwgYW5kXG4gICAqIHRoZSBvcHRpbWl6ZXIgYW5zd2VycyBhbiBleHBsaWNpdCA1MDIgcmF0aGVyIHRoYW4gYSBcIm5vdCBhIHZhbGlkIGltYWdlXCIuXG4gICAqL1xuICByZWFkb25seSBvdGhlckdyb3VwPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGJvZHkgcGFzc2VkIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWAsIHNvIGl0IHdhcyBjdXQgb2ZmOiBhIDQxMywgYXNcbiAgICogYG5leHQgc3RhcnRgIGFuc3dlcnMuXG4gICAqL1xuICByZWFkb25seSB0b29MYXJnZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHMzID0gczNDbGllbnQoKTtcbiAgcHJpdmF0ZSBsb2FkZWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPjtcbiAgcHJpdmF0ZSBpbWFnZUNhY2hlPzogUHJvbWlzZTxJbWFnZUNhY2hlPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbWFnZU9wdGltaXplck9wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFwcCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAgYXQgYWxsLiBgbmV4dCBzdGFydGAgYW5zd2VycyA0MDRcbiAgICogd2hlbiBgaW1hZ2VzLnVub3B0aW1pemVkYCBpcyBzZXQgb3IgYSBub24tZGVmYXVsdCBgbG9hZGVyYCBpcyBjb25maWd1cmVkXG4gICAqIChgbmV4dC1zZXJ2ZXIuanNgKSwgYW5kIHNvIGRvZXMgdGhlIHJ1bnRpbWU6IG90aGVyd2lzZSBhbnlvbmUgY2FuIG1ha2UgdGhlXG4gICAqIGNvbXB1dGUgcnVuIHNoYXJwIGFuZCB3cml0ZSB0aGUgaW1hZ2UgY2FjaGUgb24gYW4gZW5kcG9pbnQgdGhlIGFwcCB0dXJuZWRcbiAgICogb2ZmLlxuICAgKi9cbiAgcHVibGljIGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBGcm9tIHRoZSBtYW5pZmVzdCBhbG9uZTogYW4gYXBwIHRoYXQgdHVybmVkIGltYWdlcyBvZmYgc2hvdWxkbid0IGxvYWQgdGhlXG4gICAgLy8gb3B0aW1pemVyIChhbmQgYHNoYXJwYCkganVzdCB0byBhbnN3ZXIgNDA0LlxuICAgIGNvbnN0IGltYWdlcyA9IG1hbmlmZXN0SW1hZ2VzKHRoaXMub3B0aW9ucy5tYW5pZmVzdCk7XG4gICAgcmV0dXJuIGltYWdlcy5sb2FkZXIgPT09IFwiZGVmYXVsdFwiICYmICFpbWFnZXMudW5vcHRpbWl6ZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlKFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgICB1cmw6IFVSTCxcbiAgICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBSZXNvbHZlZCBvbiB0aGUgZmlyc3QgaW1hZ2UgcmVxdWVzdCByYXRoZXIgdGhhbiBhdCBjb2xkIHN0YXJ0OiBhbiBhcHAgd2l0aFxuICAgIC8vIG5vIGA8SW1hZ2U+YCBzaG91bGQgbm90IHBheSBmb3IgdGhlIGBuZXh0YCBtb2R1bGUgbG9hZHMuXG4gICAgdGhpcy5sb2FkZWQgPz89IGxvYWRJbWFnZVJ1bnRpbWUodGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IHRoaXMubG9hZGVkO1xuICAgIGNvbnN0IGltYWdlc0NvbmZpZyA9IG5leHRDb25maWcuaW1hZ2VzO1xuICAgIGNvbnN0IHtcbiAgICAgIEltYWdlRXJyb3IsXG4gICAgICBJbWFnZU9wdGltaXplckNhY2hlLFxuICAgICAgZmV0Y2hFeHRlcm5hbEltYWdlLFxuICAgICAgaW1hZ2VPcHRpbWl6ZXIsXG4gICAgICBzZW5kUmVzcG9uc2UsXG4gICAgfSA9IG5leHQub3B0aW1pemVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IEltYWdlT3B0aW1pemVyQ2FjaGUudmFsaWRhdGVQYXJhbXMoXG4gICAgICAgIHJlcSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIEltYWdlT3B0aW1pemVyQ2FjaGUudmFsaWRhdGVQYXJhbXNcbiAgICAgICAgPlswXSxcbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHVybC5zZWFyY2hQYXJhbXMpLFxuICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBpZiAoXCJlcnJvck1lc3NhZ2VcIiBpbiBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHNlbmRUZXh0KHJlcywgNDAwLCBwYXJhbXMuZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBocmVmLCBpc0Fic29sdXRlIH0gPSBwYXJhbXM7XG4gICAgICBjb25zdCBvcHRpbWl6ZSA9IGFzeW5jIChwcmV2aW91c0NhY2hlRW50cnk/OiBQcmV2aW91c0ltYWdlRW50cnkpID0+IHtcbiAgICAgICAgY29uc3QgdXBzdHJlYW0gPSBpc0Fic29sdXRlXG4gICAgICAgICAgPyBhd2FpdCBmZXRjaEV4dGVybmFsSW1hZ2UoXG4gICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5kYW5nZXJvdXNseUFsbG93TG9jYWxJUCxcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLm1heGltdW1SZXNwb25zZUJvZHksXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5tYXhpbXVtUmVkaXJlY3RzLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogYXdhaXQgdGhpcy5mZXRjaExvY2FsKFxuICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgIG5leHRDb25maWcsXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5tYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgICBuZXh0Lm9wdGltaXplcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW1pemVkID0gYXdhaXQgaW1hZ2VPcHRpbWl6ZXIoXG4gICAgICAgICAgdXBzdHJlYW0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbDogbmV4dENvbmZpZy5leHBlcmltZW50YWwsXG4gICAgICAgICAgICBpbWFnZXM6IHtcbiAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlBbGxvd1NWRzogaW1hZ2VzQ29uZmlnLmRhbmdlcm91c2x5QWxsb3dTVkcsXG4gICAgICAgICAgICAgIG1pbmltdW1DYWNoZVRUTDogaW1hZ2VzQ29uZmlnLm1pbmltdW1DYWNoZVRUTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzRGV2OiBmYWxzZSwgcHJldmlvdXNDYWNoZUVudHJ5IH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gYGltYWdlT3B0aW1pemVyYCByZXBvcnRzIGEgZmFpbGVkIG9wdGltaXphdGlvbiBieSByZXR1cm5pbmcgdGhlXG4gICAgICAgIC8vIHVudG91Y2hlZCB1cHN0cmVhbSBpbWFnZSBhbG9uZ3NpZGUgYGVycm9yYCByYXRoZXIgdGhhbiB0aHJvd2luZywgc29cbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIGEgYnJva2VuIGBzaGFycGAgaW5zdGFsbCBzZXJ2ZXMgZnVsbC1zaXplIG9yaWdpbmFscyB3aXRoXG4gICAgICAgIC8vIGEgMjAwIGluZGVmaW5pdGVseSBhbmQgbm90aGluZyBpbiB0aGUgbG9ncyBzYXlzIHdoeS5cbiAgICAgICAgaWYgKG9wdGltaXplZC5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIG9wdGltaXplICR7aHJlZn0sIHNlcnZpbmcgdGhlIHVub3B0aW1pemVkIG9yaWdpbmFsOmAsXG4gICAgICAgICAgICBvcHRpbWl6ZWQuZXJyb3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW1pemVkO1xuICAgICAgfTtcblxuICAgICAgLy8gTmV4dCdzIG93biByZXNwb25zZSB3cml0ZXIsIHJhdGhlciB0aGFuIGEgcmVzdGF0ZW1lbnQgb2YgaXQsIHNvIHRoZVxuICAgICAgLy8gaGVhZGVycyBgbmV4dCBzdGFydGAgc2VuZHMgY29tZSB3aXRoIGl0OiB0aGUgeWVhci1sb25nIGBpbW11dGFibGVgIGZvclxuICAgICAgLy8gYSBgL19uZXh0L3N0YXRpYy9tZWRpYWAgc3JjLCBgSWYtTm9uZS1NYXRjaGAgYXMgYGZyZXNoYCByZWFkcyBpdCAod2Vha1xuICAgICAgLy8gYW5kIGxpc3RlZCB0YWdzLCBgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVgKSwgYSBgQ29udGVudC1EaXNwb3NpdGlvbmBcbiAgICAgIC8vIHRoYXQgUkZDIDU5ODctZW5jb2RlcyBhIGZpbGVuYW1lIGB3cml0ZUhlYWRgIHdvdWxkIHJlamVjdCBhc1xuICAgICAgLy8gbm9uLWxhdGluMSwgYENvbnRlbnQtTGVuZ3RoYCwgYW5kIG5vIGJvZHkgZm9yIEhFQUQuIFRoZSByZXN0YXRlZFxuICAgICAgLy8gdmVyc2lvbiBoYWQgZHJpZnRlZCBvbiBldmVyeSBvbmUgb2YgdGhvc2UuXG4gICAgICBjb25zdCBzZW5kID0gKFxuICAgICAgICBleHRlbnNpb246IHN0cmluZyxcbiAgICAgICAgYnVmZmVyOiBCdWZmZXIsXG4gICAgICAgIGV0YWc6IHN0cmluZyxcbiAgICAgICAgeENhY2hlOiBcIk1JU1NcIiB8IFwiSElUXCIgfCBcIlNUQUxFXCIsXG4gICAgICAgIG1heEFnZTogbnVtYmVyLFxuICAgICAgKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gMjAwO1xuICAgICAgICBzZW5kUmVzcG9uc2UoXG4gICAgICAgICAgcmVxIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2Ygc2VuZFJlc3BvbnNlPlswXSxcbiAgICAgICAgICBhc1NlcnZlclJlc3BvbnNlKHJlcyksXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICBleHRlbnNpb24sXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGV0YWcsXG4gICAgICAgICAgcGFyYW1zLmlzU3RhdGljLFxuICAgICAgICAgIHhDYWNoZSxcbiAgICAgICAgICBpbWFnZXNDb25maWcsXG4gICAgICAgICAgbWF4QWdlLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgLy8gYG5leHQgc3RhcnRgJ3MgYGhhbmRsZU5leHRJbWFnZVJlcXVlc3RgLCBzdGVwIGZvciBzdGVwOiBhXG4gICAgICAvLyBgUmVzcG9uc2VDYWNoZWAgb3ZlciBhbiBgSW1hZ2VPcHRpbWl6ZXJDYWNoZWAgYmFja2VkIGJ5IHRoZSBhcHAnc1xuICAgICAgLy8gYGNhY2hlSGFuZGxlcmAsIHNvIGEgaGl0IHNraXBzIHRoZSBmZXRjaCBhbmQgYHNoYXJwYCwgYSBzdGFsZSBlbnRyeSBpc1xuICAgICAgLy8gc2VydmVkIHdoaWxlIGl0IGlzIHJlZ2VuZXJhdGVkLCBhbmQgY29uY3VycmVudCBtaXNzZXMgZm9yIG9uZSBpbWFnZVxuICAgICAgLy8gb3B0aW1pemUgaXQgb25jZS4gVGhlIGFwcCdzIGBjYWNoZUhhbmRsZXJgIGlzIHRoZSBTMyBjYWNoZSwgd2hpY2ggdGhlXG4gICAgICAvLyBhZGFwdGVyIHR1cm5zIG9uIHdpdGggYGltYWdlcy5jdXN0b21DYWNoZUhhbmRsZXJgOiB3aXRoIG5vIENETiBpbiBmcm9udFxuICAgICAgLy8gKHRoZSBSZWdpb25hbCB0eXBlcykgZXZlcnkgcmVxdWVzdCB3b3VsZCBvdGhlcndpc2UgcnVuIGBzaGFycGAgYWdhaW4sXG4gICAgICAvLyBhbmQgYmVoaW5kIENsb3VkRnJvbnQgZWFjaCBlZGdlIG1pc3MgaXMgYW4gUzMgcmVhZCBpbnN0ZWFkLlxuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSh0aGlzLmxvYWRlZCk7XG4gICAgICBjb25zdCBlbnRyeSA9IGF3YWl0IGNhY2hlLnJlc3BvbnNlcy5nZXQoXG4gICAgICAgIEltYWdlT3B0aW1pemVyQ2FjaGUuZ2V0Q2FjaGVLZXkocGFyYW1zKSxcbiAgICAgICAgYXN5bmMgKHsgcHJldmlvdXNDYWNoZUVudHJ5IH0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IGJ1ZmZlciwgY29udGVudFR5cGUsIG1heEFnZSwgZXRhZywgdXBzdHJlYW1FdGFnIH0gPVxuICAgICAgICAgICAgYXdhaXQgb3B0aW1pemUocHJldmlvdXNDYWNoZUVudHJ5IGFzIFByZXZpb3VzSW1hZ2VFbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIGtpbmQ6IElNQUdFX0tJTkQsXG4gICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgZXRhZyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBuZXh0LnNlcnZlU3RhdGljLmdldEV4dGVuc2lvbihjb250ZW50VHlwZSkgPz8gXCJcIixcbiAgICAgICAgICAgICAgdXBzdHJlYW1FdGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDogeyByZXZhbGlkYXRlOiBtYXhBZ2UsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHJvdXRlS2luZDogSU1BR0VfS0lORCxcbiAgICAgICAgICBpbmNyZW1lbnRhbENhY2hlOiBkZWZlcldyaXRlcyhjYWNoZS5pbWFnZXMsIHdhaXRVbnRpbCksXG4gICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgLy8gQSBzdGFsZSBlbnRyeSBpcyBzZXJ2ZWQgYXQgb25jZSBhbmQgcmVnZW5lcmF0ZWQgaW4gdGhlIGJhY2tncm91bmQ7XG4gICAgICAgICAgLy8gd2l0aG91dCB0aGlzLCBhIExhbWJkYSBjb3VsZCBmcmVlemUgd2l0aCB0aGUgcmVnZW5lcmF0aW9uIGhhbGYgZG9uZS5cbiAgICAgICAgICB3YWl0VW50aWwsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJyZXNwb25zZXNcIl1bXCJnZXRcIl0+WzJdLFxuICAgICAgKTtcbiAgICAgIC8vIEEgZmFpbGVkIHJlbmRlciwgZnJvbSBuZXh0IDE2LjQ7IGBuZXh0LXNlcnZlci5qc2AgcmV0aHJvd3MgaXQgdGhlIHNhbWVcbiAgICAgIC8vIHdheS4gVGhlIGdlbmVyYXRvciBhYm92ZSB0aHJvd3MgaW5zdGVhZCwgc28gdGhpcyBpcyB0aGUgdHlwZSdzIGNhc2UuXG4gICAgICBpZiAoZW50cnkgJiYgXCJlcnJvclwiIGluIGVudHJ5KSB7XG4gICAgICAgIHRocm93IGVudHJ5LmVycm9yO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBlbnRyeT8udmFsdWUgYXNcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBraW5kOiBzdHJpbmc7XG4gICAgICAgICAgICBleHRlbnNpb246IHN0cmluZztcbiAgICAgICAgICAgIGJ1ZmZlcjogQnVmZmVyO1xuICAgICAgICAgICAgZXRhZzogc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfCBudWxsXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlPy5raW5kICE9PSBJTUFHRV9LSU5EKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBpbWFnZSBjYWNoZSByZXR1cm5lZCBubyBpbWFnZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIHNlbmQoXG4gICAgICAgIHZhbHVlLmV4dGVuc2lvbixcbiAgICAgICAgdmFsdWUuYnVmZmVyLFxuICAgICAgICB2YWx1ZS5ldGFnLFxuICAgICAgICBlbnRyeSEuaXNNaXNzID8gXCJNSVNTXCIgOiBlbnRyeSEuaXNTdGFsZSA/IFwiU1RBTEVcIiA6IFwiSElUXCIsXG4gICAgICAgIGVudHJ5IS5jYWNoZUNvbnRyb2w/LnJldmFsaWRhdGUgfHwgMCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgbWVzc2FnZSB9ID0gcmVzb2x2ZUVycm9yUmVzcG9uc2UoZXJyb3IsIEltYWdlRXJyb3IpO1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPj0gNTAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbWFnZSBvcHRpbWl6YXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBzZW5kVGV4dChyZXMsIHN0YXR1c0NvZGUsIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmljdGVkIG9uIGZhaWx1cmUsIGFzIGBFbnRyeXBvaW50UmVnaXN0cnkubG9hZGAgZXZpY3RzIGEgZmFpbGVkIG1vZHVsZSBsb2FkOlxuICAgKiBhIHRyYW5zaWVudCBmYWlsdXJlIGltcG9ydGluZyB0aGUgYGNhY2hlSGFuZGxlcmAgKEVNRklMRSB1bmRlciBhIGNvbGQtc3RhcnRcbiAgICogYnVyc3QpIHdvdWxkIG90aGVyd2lzZSA1MDAgZXZlcnkgaW1hZ2UgcmVxdWVzdCB1bnRpbCB0aGUgc2FuZGJveCByZWN5Y2xlcy5cbiAgICovXG4gIHByaXZhdGUgbG9hZENhY2hlKFxuICAgIGxvYWRlZDogUmV0dXJuVHlwZTx0eXBlb2YgbG9hZEltYWdlUnVudGltZT4sXG4gICk6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICAgIGlmICghdGhpcy5pbWFnZUNhY2hlKSB7XG4gICAgICBjb25zdCBjYWNoZSA9IGxvYWRJbWFnZUNhY2hlKHRoaXMub3B0aW9ucywgbG9hZGVkKTtcbiAgICAgIHRoaXMuaW1hZ2VDYWNoZSA9IGNhY2hlO1xuICAgICAgY2FjaGUuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUNhY2hlID09PSBjYWNoZSkge1xuICAgICAgICAgIHRoaXMuaW1hZ2VDYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmltYWdlQ2FjaGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoTG9jYWwoXG4gICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgIGhyZWY6IHN0cmluZyxcbiAgICBuZXh0Q29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPltcIm5leHRDb25maWdcIl0sXG4gICAgbWF4aW11bVJlc3BvbnNlQm9keTogbnVtYmVyLFxuICAgIG9wdGltaXplcjogTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXSxcbiAgKSB7XG4gICAgY29uc3QgeyBidWNrZXQsIGZldGNoSW50ZXJuYWwgfSA9IHRoaXMub3B0aW9ucztcbiAgICAvLyBObyBidWNrZXQgd2hlbiB0aGUgc291cmNlcyBhcmUgb24gZGlzayAoYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2ApLCBhbmRcbiAgICAvLyB0aGUgcm91dGVzIHNlcnZlIHRob3NlIGFzIHRoZXkgc2VydmUgYW55dGhpbmcgUzMgaGFzIG5vIGZpbGUgZm9yLlxuICAgIGlmIChidWNrZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgICAgIHRoaXMuczMsXG4gICAgICAgICAgYnVja2V0LFxuICAgICAgICAgIGhyZWYsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsQmFzZVBhdGg6IG5leHRDb25maWcuYmFzZVBhdGgsXG4gICAgICAgICAgICBrZXlQcmVmaXg6IHRoaXMub3B0aW9ucy5idWNrZXRLZXlQcmVmaXgsXG4gICAgICAgICAgICBhc3NldFByZWZpeDogbmV4dENvbmZpZy5hc3NldFByZWZpeCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1heGltdW1SZXNwb25zZUJvZHksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnVmZmVyOiByZXN1bHQuYnVmZmVyLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiByZXN1bHQuY29udGVudFR5cGUsXG4gICAgICAgICAgLy8gVGhlIG9iamVjdCdzIG93biwgYXMgYGZldGNoSW50ZXJuYWxJbWFnZWAgcGFzc2VzIG9uIHRoZSBmaWxlJ3NcbiAgICAgICAgICAvLyBgQ2FjaGUtQ29udHJvbGA6IHRoZSBvcHRpbWl6ZXIga2VlcHMgdGhlIHJlc3VsdCBmb3IgaXRzIG1heC1hZ2UsIGFcbiAgICAgICAgICAvLyB5ZWFyIGZvciBhbiBpbW11dGFibGUgYF9uZXh0L3N0YXRpYy9tZWRpYWAgZmlsZS5cbiAgICAgICAgICBjYWNoZUNvbnRyb2w6IHJlc3VsdC5jYWNoZUNvbnRyb2wsXG4gICAgICAgICAgLy8gRW5jb2RlZCBhcyBmb3IgYSByb3V0ZSdzIHJlc3BvbnNlOiBgZmV0Y2hJbnRlcm5hbEltYWdlYCBkb2VzIHRvby5cbiAgICAgICAgICBldGFnOiBleHRyYWN0RXRhZyhyZXN1bHQuZXRhZywgcmVzdWx0LmJ1ZmZlciksXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vU3VjaEtleVwiO1xuICAgICAgICBpZiAoIW1pc3NpbmcpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgY2hlY2tzLCBhbmQgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVzcG9uc2UuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEludGVybmFsKGhyZWYsIHJlcSwgbWF4aW11bVJlc3BvbnNlQm9keSk7XG4gICAgaWYgKHJlc3BvbnNlLm90aGVyR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSBkZXBsb3ltZW50IHByb2JsZW0sIG5vdCBhIGJhZCBgdXJsYDogbGVhdmUgdGhlIHJvdXRlIGluIHRoZSBkZWZhdWx0XG4gICAgICAvLyBncm91cCwgb3Igc2VydmUgdGhlIGltYWdlIGFzIGEgZmlsZSAocHVibGljLyBvciBhIHN0YXRpYyBpbXBvcnQpLlxuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA1MDIsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaXRzIHNvdXJjZSBpcyBhIHJvdXRlIGluIGFub3RoZXIgJyArXG4gICAgICAgICAgYGZ1bmN0aW9uR3JvdXBzIGdyb3VwIChcIiR7cmVzcG9uc2Uub3RoZXJHcm91cH1cIiksIHdoaWNoIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICBcIm9wdGltaXplciBjYW5ub3QgZmV0Y2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS50b29MYXJnZSkge1xuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA0MTMsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLnN0YXR1c0NvZGUgfHwgcmVzcG9uc2UuYm9keS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBvcHRpbWl6ZXIuSW1hZ2VFcnJvcihcbiAgICAgICAgNDAwLFxuICAgICAgICAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgdmFsaWQgYnV0IGludGVybmFsIHJlc3BvbnNlIGlzIGludmFsaWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcjogcmVzcG9uc2UuYm9keSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmaXJzdFZhbHVlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pID8/IG51bGwsXG4gICAgICBjYWNoZUNvbnRyb2w6IGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pID8/IG51bGwsXG4gICAgICBldGFnOiBleHRyYWN0RXRhZyhcbiAgICAgICAgZmlyc3RWYWx1ZShyZXNwb25zZS5oZWFkZXJzLmV0YWcpID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlLmJvZHksXG4gICAgICApLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBgQ2FjaGVkUm91dGVLaW5kLklNQUdFYCwgd2hpY2ggaXMgYWxzbyBgUm91dGVLaW5kLklNQUdFYC4gUmVzdGF0ZWQ6IHRoZSBlbnVtIGlzXG4gKiBhIHJ1bnRpbWUgdmFsdWUgb2YgYG5leHRgLCB3aGljaCB0aGUgYnVuZGxlIGNhbm5vdCBpbXBvcnQuXG4gKi9cbmNvbnN0IElNQUdFX0tJTkQgPSBcIklNQUdFXCIgYXMgQ2FjaGVkUm91dGVLaW5kLklNQUdFO1xuXG4vKiogYGltYWdlT3B0aW1pemVyYCdzIGBwcmV2aW91c0NhY2hlRW50cnlgLiAqL1xudHlwZSBQcmV2aW91c0ltYWdlRW50cnkgPSBQYXJhbWV0ZXJzPFxuICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiaW1hZ2VPcHRpbWl6ZXJcIl1cbj5bM11bXCJwcmV2aW91c0NhY2hlRW50cnlcIl07XG5cbmludGVyZmFjZSBJbWFnZUNhY2hlIHtcbiAgcmVhZG9ubHkgcmVzcG9uc2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl1cbiAgPjtcbiAgcmVhZG9ubHkgaW1hZ2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXVtcIkltYWdlT3B0aW1pemVyQ2FjaGVcIl1cbiAgPjtcbn1cblxuLyoqXG4gKiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAsIGNvbnN0cnVjdGVkIHRoZSB3YXkgYG5leHQgc3RhcnRgIGNvbnN0cnVjdHMgaXQgZm9yXG4gKiBpbWFnZXMgKGBuZXh0LXNlcnZlci5qc2AsIGBoYW5kbGVOZXh0SW1hZ2VSZXF1ZXN0YCk6IG9uY2UsIGFuZCBrZXB0LCBzbyBpdHNcbiAqIGluLW1lbW9yeSBsYXllciBsYXN0cyBhY3Jvc3MgcmVxdWVzdHMuIEl0cyBwYXRoIGluIHRoZSBtYW5pZmVzdCBpcyByZWxhdGl2ZVxuICogdG8gdGhlIGRpc3QgZGlyOyBzZWUge0BsaW5rIGNhY2hlSGFuZGxlclVybH0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZUNhY2hlKFxuICB7IGRlcGxveW1lbnRSb290LCBtYW5pZmVzdCwgaW1wb3J0TW9kdWxlIH06IEltYWdlT3B0aW1pemVyT3B0aW9ucyxcbiAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbik6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IGxvYWRlZDtcbiAgY29uc3QgbW9kdWxlczogTmV4dEltYWdlQ2FjaGVNb2R1bGVzID0ge1xuICAgIHJlc3BvbnNlQ2FjaGU6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpLFxuICB9O1xuICBjb25zdCBkaXN0RGlyID0gam9pbihcbiAgICBkZXBsb3ltZW50Um9vdCxcbiAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgbWFuaWZlc3QuY29uZmlnLmRpc3REaXIsXG4gICk7XG4gIGxldCBjYWNoZUhhbmRsZXI6IEluc3RhbmNlVHlwZTxDYWNoZUhhbmRsZXJDbGFzcz4gfCB1bmRlZmluZWQ7XG4gIGlmIChuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcikge1xuICAgIGNvbnN0IHVybCA9IGNhY2hlSGFuZGxlclVybChkaXN0RGlyLCBuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcik7XG4gICAgY29uc3QgaW1wb3J0ZWQgPSAoYXdhaXQgKGltcG9ydE1vZHVsZVxuICAgICAgPyBpbXBvcnRNb2R1bGUodXJsKVxuICAgICAgOiBpbXBvcnQodXJsKSkpIGFzIHsgZGVmYXVsdD86IENhY2hlSGFuZGxlckNsYXNzIH0gJiBDYWNoZUhhbmRsZXJDbGFzcztcbiAgICBjb25zdCBDYWNoZUhhbmRsZXIgPSBpbXBvcnRlZC5kZWZhdWx0ID8/IGltcG9ydGVkO1xuICAgIGNhY2hlSGFuZGxlciA9IG5ldyBDYWNoZUhhbmRsZXIoe1xuICAgICAgZGV2OiBmYWxzZSxcbiAgICAgIGZsdXNoVG9EaXNrOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbC5pc3JGbHVzaFRvRGlzayxcbiAgICAgIHNlcnZlckRpc3REaXI6IGpvaW4oZGlzdERpciwgXCJzZXJ2ZXJcIiksXG4gICAgICBtYXhNZW1vcnlDYWNoZVNpemU6IG5leHRDb25maWcuY2FjaGVNYXhNZW1vcnlTaXplLFxuICAgICAgcmV2YWxpZGF0ZWRUYWdzOiBbXSxcbiAgICAgIF9yZXF1ZXN0SGVhZGVyczoge30sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZXM6IG5ld0ltYWdlUmVzcG9uc2VDYWNoZShtb2R1bGVzLnJlc3BvbnNlQ2FjaGUuZGVmYXVsdCksXG4gICAgaW1hZ2VzOiBuZXcgbmV4dC5vcHRpbWl6ZXIuSW1hZ2VPcHRpbWl6ZXJDYWNoZSh7XG4gICAgICBkaXN0RGlyLFxuICAgICAgbmV4dENvbmZpZyxcbiAgICAgIGNhY2hlSGFuZGxlcixcbiAgICB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgbmV3IFJlc3BvbnNlQ2FjaGUoLi4uKWAgZm9yIGltYWdlcywgb24gZWl0aGVyIHNpZGUgb2YgbmV4dCAxNi4zLjguIEJlZm9yZVxuICogaXQgdGhlIGNvbnN0cnVjdG9yIHRvb2sgYG1pbmltYWxNb2RlYDsgZnJvbSBpdCwgYHsgbWluaW1hbE1vZGUsIHJvdXRlIH1gLCBhbmRcbiAqIGl0IHRocm93cyB3aXRob3V0IGEgYHJvdXRlYCAtIGBuZXh0LXNlcnZlci5qc2AgcGFzc2VzIGBcImltYWdlXCJgLiBOZWl0aGVyIGZvcm1cbiAqIGNhbiBzdGFuZCBpbiBmb3IgdGhlIG90aGVyOiBhbiBvbGRlciBgbmV4dGAgdGFrZXMgdGhlIG9wdGlvbnMgb2JqZWN0IGFzIGFcbiAqIHRydXRoeSBgbWluaW1hbE1vZGVgLCBhbmQgMTYuMy44IHJlamVjdHMgYSBiYXJlIGBmYWxzZWAuXG4gKlxuICogVG9sZCBhcGFydCBieSB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIHRoZSBvbGRlciBmb3JtIHJhdGhlciB0aGFuIGJ5XG4gKiB0aGUgdmVyc2lvbiwgd2hpY2ggYSBjYW5hcnkgZG9lcyBub3Qgb3JkZXIsIG9yIGJ5IGl0cyBwcml2YXRlIGZpZWxkczogMTYuMy44XG4gKiBkZXN0cnVjdHVyZXMgYSBiYXJlIGBmYWxzZWAgaW50byBubyBgcm91dGVgIGFuZCB0aHJvd3MuIE9ubHkgdGhhdCB0aHJvd1xuICogc2VsZWN0cyB0aGUgbmV3ZXIgZm9ybTsgYW55IG90aGVyIGVycm9yIGZyb20gdGhlIGNvbnN0cnVjdG9yIGlzIHJldGhyb3duXG4gKiByYXRoZXIgdGhhbiByZWFkIGFzIGEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld0ltYWdlUmVzcG9uc2VDYWNoZShcbiAgUmVzcG9uc2VDYWNoZTogTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0sXG4pOiBJbnN0YW5jZVR5cGU8TmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0+IHtcbiAgY29uc3QgTGVnYWN5ID0gUmVzcG9uc2VDYWNoZSBhcyB1bmtub3duIGFzIG5ldyAoXG4gICAgbWluaW1hbE1vZGU6IGJvb2xlYW4sXG4gICkgPT4gSW5zdGFuY2VUeXBlPHR5cGVvZiBSZXNwb25zZUNhY2hlPjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeShmYWxzZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghU3RyaW5nKChlcnIgYXMgRXJyb3IpPy5tZXNzYWdlKS5pbmNsdWRlcyhcInJlcXVpcmVzIGEgc291cmNlIHJvdXRlXCIpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2VDYWNoZSh7IG1pbmltYWxNb2RlOiBmYWxzZSwgcm91dGU6IFwiaW1hZ2VcIiB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGBmb3JtYXREeW5hbWljSW1wb3J0UGF0aGAgZnJvbSBgbmV4dC9kaXN0L2xpYi9mb3JtYXQtZHluYW1pYy1pbXBvcnQtcGF0aC5qc2AsXG4gKiByZXN0YXRlZDogYG5leHQgYnVpbGRgIGRvZXNuJ3QgdHJhY2UgdGhhdCBtb2R1bGUgaW50byB0aGUgZGVwbG95bWVudCwgc29cbiAqIGxvYWRpbmcgaXQgZmFpbGVkIGV2ZXJ5IGltYWdlIHJlcXVlc3Qgd2l0aCB0aGUgY2FjaGUgb24uIE5vIGBmaWxlOi8vYCBjYXNlOlxuICogdGhlIGFkYXB0ZXIgYWxyZWFkeSB0dXJuZWQgb25lIGludG8gYSBwYXRoIChgZGlzdFJlbGF0aXZlQ2FjaGVIYW5kbGVyYCkuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFuZGxlclVybChkaXN0RGlyOiBzdHJpbmcsIGNhY2hlSGFuZGxlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoXG4gICAgaXNBYnNvbHV0ZVBhdGgoY2FjaGVIYW5kbGVyKSA/IGNhY2hlSGFuZGxlciA6IGpvaW4oZGlzdERpciwgY2FjaGVIYW5kbGVyKSxcbiAgKS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIGBpbWFnZXNgLCB3aXRoIGl0cyBgc2V0YCBtb3ZlZCBvZmYgdGhlIHJlc3BvbnNlJ3MgY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBgUmVzcG9uc2VDYWNoZWAgYXdhaXRzIHRoZSB3cml0ZSBvZiBhIGZyZXNobHkgb3B0aW1pemVkIGltYWdlIGJlZm9yZSBpdCBoYW5kc1xuICogdGhlIGltYWdlIGJhY2ssIHNvIGV2ZXJ5IG1pc3MgcGFpZCBhbiBTMyBgUHV0T2JqZWN0YCAofjMwIG1zIG1lYXN1cmVkKSBiZWZvcmVcbiAqIGl0cyBmaXJzdCBieXRlLiBUaGUgd3JpdGUgaXMgcmVnaXN0ZXJlZCB3aXRoIGB3YWl0VW50aWxgIGluc3RlYWQsIHdoaWNoIHRoZVxuICogcnVudGltZSBkcmFpbnMgYmVmb3JlIGEgTGFtYmRhIGludm9jYXRpb24gcmV0dXJucyBvciBhIGNvbnRhaW5lciBzaHV0cyBkb3duLFxuICogc28gaXQgc3RpbGwgbGFuZHMuIEEgZmFpbGVkIHdyaXRlIGlzIGxvZ2dlZDsgdGhlIG5leHQgcmVxdWVzdCBvcHRpbWl6ZXMgdGhlXG4gKiBpbWFnZSBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBpdCB3b3VsZCBoYXZlIGRvbmUgYW55d2F5LlxuICovXG5mdW5jdGlvbiBkZWZlcldyaXRlcyhcbiAgaW1hZ2VzOiBJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdLFxuICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuKTogSW1hZ2VDYWNoZVtcImltYWdlc1wiXSB7XG4gIGNvbnN0IGRlZmVycmVkID0gT2JqZWN0LmNyZWF0ZShpbWFnZXMpIGFzIEltYWdlQ2FjaGVbXCJpbWFnZXNcIl07XG4gIGRlZmVycmVkLnNldCA9ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJpbWFnZXNcIl1bXCJzZXRcIl0+KSA9PiB7XG4gICAgd2FpdFVudGlsKFxuICAgICAgaW1hZ2VzLnNldCguLi5hcmdzKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYWNoZSBhbiBvcHRpbWl6ZWQgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICByZXR1cm4gZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRUZXh0KFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICBib2R5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgcmVzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgcmVzLmVuZChib2R5KTtcbn1cblxuLyoqXG4gKiBgbWFuaWZlc3QuY29uZmlnLmltYWdlc2AsIG9uY2UgdGhlIG1hbmlmZXN0IGlzIGtub3duIHRvIGJlIG9uZSB0aGlzIHJ1bnRpbWVcbiAqIHJlYWRzICh3aXRoIGBleHBlcmltZW50YWxgLCDigKYpLiBUaGUgZmllbGRzIGFyZSB0eXBlZCBgdW5rbm93bmAsIHNvIG9ubHkgdGhlXG4gKiB2ZXJzaW9uIGNhdGNoZXMgYSBtYW5pZmVzdCBhbm90aGVyIGNkay1uZXh0anMgd3JvdGU7IGBOZXh0anNCdWlsZGAgcmVqZWN0cyBvbmVcbiAqIGF0IHN5bnRoLCB3aGljaCBhIGhhbmQtd2lyZWQgZnVuY3Rpb24gc2tpcHMuXG4gKi9cbmZ1bmN0aW9uIG1hbmlmZXN0SW1hZ2VzKFxuICBtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0LFxuKTogTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdIHtcbiAgaWYgKG1hbmlmZXN0LmNka05leHRqc1ZlcnNpb24gIT09IENES19ORVhUSlNfVkVSU0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgYWRhcHRlciBtYW5pZmVzdCB3YXMgd3JpdHRlbiBieSBjZGstbmV4dGpzIGAgK1xuICAgICAgICBgJHttYW5pZmVzdC5jZGtOZXh0anNWZXJzaW9uID8/IFwiKHVua25vd24pXCJ9LCBidXQgdGhpcyBydW50aW1lIGlzIGAgK1xuICAgICAgICBgY2RrLW5leHRqcyAke0NES19ORVhUSlNfVkVSU0lPTn0uIFJlYnVpbGQgdGhlIGFwcCB3aXRoIHRoaXMgdmVyc2lvbi5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1hbmlmZXN0LmNvbmZpZy5pbWFnZXMgYXMgTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpbWl6ZXIncyBgbmV4dENvbmZpZ2AsIGZyb20gdGhlIGFkYXB0ZXIgbWFuaWZlc3QsIHdoaWNoIGNvcGllZCBpdCBvdXRcbiAqIG9mIHRoZSBidWlsZCdzIGBjdHguY29uZmlnYCAoYEFkYXB0ZXJNYW5pZmVzdENvbmZpZy5pbWFnZXNgKTogYWxyZWFkeSByZXNvbHZlZFxuICogYW5kIGRlZmF1bHRlZCwgc28gbmVpdGhlciBgZ2V0TmV4dENvbmZpZ1J1bnRpbWVgIG5vciBgaW1hZ2VDb25maWdEZWZhdWx0YCBpc1xuICogbmVlZGVkLiBPbmx5IHRoZSBmaWVsZHMgTmV4dCdzIGltYWdlIGNvZGUgcmVhZHM7IHRoZSBjYXN0IGlzIGJlY2F1c2UgdGhlXG4gKiBtYW5pZmVzdCBzdG9yZXMgdGhlbSBhcyBKU09OLlxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2VSdW50aW1lKHsgbWFuaWZlc3QgfTogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zKSB7XG4gIGNvbnN0IG5leHQ6IE5leHRJbWFnZU1vZHVsZXMgPSB7XG4gICAgb3B0aW1pemVyOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIiksXG4gICAgc2VydmVTdGF0aWM6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3NlcnZlLXN0YXRpYy5qc1wiKSxcbiAgfTtcbiAgY29uc3QgeyBjb25maWcgfSA9IG1hbmlmZXN0O1xuICBjb25zdCBuZXh0Q29uZmlnID0ge1xuICAgIGJhc2VQYXRoOiBjb25maWcuYmFzZVBhdGgsXG4gICAgYXNzZXRQcmVmaXg6IGNvbmZpZy5hc3NldFByZWZpeCxcbiAgICBpbWFnZXM6IG1hbmlmZXN0SW1hZ2VzKG1hbmlmZXN0KSxcbiAgICBleHBlcmltZW50YWw6IGNvbmZpZy5leHBlcmltZW50YWwsXG4gICAgY2FjaGVIYW5kbGVyOiBjb25maWcuY2FjaGVIYW5kbGVyID8/IHVuZGVmaW5lZCxcbiAgICBjYWNoZU1heE1lbW9yeVNpemU6IGNvbmZpZy5jYWNoZU1heE1lbW9yeVNpemUsXG4gIH0gYXMgTmV4dENvbmZpZ0NvbXBsZXRlO1xuICByZXR1cm4geyBuZXh0LCBuZXh0Q29uZmlnIH07XG59XG4iXX0=
@@ -290,6 +290,26 @@ describe("RuntimeImageOptimizer sources", () => {
290
290
  cacheControl: "public, max-age=120",
291
291
  });
292
292
  });
293
+ // `next start` passes on the file's own header, which sets how long the
294
+ // optimized image is kept.
295
+ it("hands the optimizer the S3 object's Cache-Control", async () => {
296
+ const send = jest.fn(async () => ({
297
+ Body: (async function* () {
298
+ yield Buffer.from("s3-bytes");
299
+ })(),
300
+ ContentType: "image/png",
301
+ CacheControl: "public, max-age=31536000, immutable",
302
+ ETag: '"abc"',
303
+ }));
304
+ const { head } = await request("/_next/static/media/logo.png", {
305
+ via: optimizerFor({ s3: { send } }),
306
+ });
307
+ expect(head.statusCode).toBe(200);
308
+ expect(image_optimizer_js_1.imageOptimizer.mock.lastCall[0]).toMatchObject({
309
+ buffer: Buffer.from("s3-bytes"),
310
+ cacheControl: "public, max-age=31536000, immutable",
311
+ });
312
+ });
293
313
  // `NextjsRegionalContainers`: the file is on disk, and a GetObject for it is
294
314
  // a wasted round trip.
295
315
  it("goes straight to the app's routes when there is no bucket", async () => {
@@ -445,4 +465,4 @@ describe("RuntimeImageOptimizer cache", () => {
445
465
  }
446
466
  });
447
467
  });
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2hDLGlGQUFpRjtBQUNqRix5RUFBeUU7QUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQztJQUM1RCxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUMxQixDQUFDLENBQUMsQ0FBQztBQUVKLHFDQUFpRDtBQUNqRCx5Q0FBZ0Q7QUFDaEQscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBdUM7QUFFdkMsNEVBQXFFO0FBQ3JFLDBFQUEwRTtBQUMxRSw0Q0FBcUQ7QUFDckQsOENBQW1FO0FBQ25FLHNDQUF5QztBQUN6QyxtQ0FJaUI7QUFDakIsOERBQTJEO0FBRTNELGlEQUE2QztBQUU3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDM0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBRXRCLDZFQUE2RTtBQUM3RSxTQUFTLEtBQUs7SUFDWixNQUFNLElBQUksR0FBRyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFBLG1CQUFTLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLGVBQWU7SUFDWixNQUFNLENBQVUsT0FBTyxHQUFHLElBQUks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QUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtczNcIik7XG4vLyBUaGUgcmVhbCBtb2R1bGUsIHdpdGggdGhlIG9uZSBzdGVwIHRoYXQgbmVlZHMgYHNoYXJwYCBzdHViYmVkIG91dDogdGhlc2UgdGVzdHNcbi8vIGFyZSBhYm91dCB0aGUgcmVzcG9uc2UgYGhhbmRsZWAgd3JpdGVzLCBub3QgYWJvdXQgb3B0aW1pemluZyBhbiBpbWFnZS5cbmplc3QubW9jayhcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbChcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpLFxuICBpbWFnZU9wdGltaXplcjogamVzdC5mbigpLFxufSkpO1xuXG5pbXBvcnQgeyBta2RpclN5bmMsIG1rZHRlbXBTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSGVhZGVyVmFsdWUgfSBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7IGltYWdlT3B0aW1pemVyIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCI7XG5pbXBvcnQgeyBpbWFnZUNvbmZpZ0RlZmF1bHQgfSBmcm9tIFwibmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vaHR0cC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNwb25zZUhlYWQsIFNoaW1TZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL2h0dHAvcmVzcG9uc2VcIjtcbmltcG9ydCB7IHBpcGVUb1NpbmsgfSBmcm9tIFwiLi9odHRwL3NpbmtcIjtcbmltcG9ydCB7XG4gIEltYWdlT3B0aW1pemVyT3B0aW9ucyxcbiAgbmV3SW1hZ2VSZXNwb25zZUNhY2hlLFxuICBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIsXG59IGZyb20gXCIuL2ltYWdlXCI7XG5pbXBvcnQgeyBDREtfTkVYVEpTX1ZFUlNJT04gfSBmcm9tIFwiLi4vY2RrLW5leHRqcy12ZXJzaW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9tYW5pZmVzdFwiO1xuaW1wb3J0IHsgdXNlTmV4dEZyb20gfSBmcm9tIFwiLi9uZXh0LW1vZHVsZXNcIjtcblxuY29uc3QgUE5HID0gQnVmZmVyLmZyb20oXCJvcHRpbWl6ZWQtYnl0ZXNcIik7XG5jb25zdCBFVEFHID0gXCJhYmMxMjNcIjtcblxuLyoqIEEgZGVwbG95bWVudCByb290LCB3aGljaCB0aGUgZGlzdCBkaXIgdGhlIGltYWdlIGNhY2hlIHVzZXMgc2l0cyB1bmRlci4gKi9cbmZ1bmN0aW9uIHN0YWdlKCk6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3QgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtaW1hZ2UtXCIpKTtcbiAgbWtkaXJTeW5jKGpvaW4ocm9vdCwgXCIubmV4dFwiKSk7XG4gIHJldHVybiByb290O1xufVxuXG4vKiogVGhlIGFwcCdzIGBjYWNoZUhhbmRsZXJgLCByZWR1Y2VkIHRvIGEgbWFwOiB3aGF0IHRoZSBTMyBoYW5kbGVyIGlzIHRvIGl0LiAqL1xuY2xhc3MgTWFwQ2FjaGVIYW5kbGVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBlbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG4gIHB1YmxpYyBzdGF0aWMgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIE1hcENhY2hlSGFuZGxlci5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE1hcENhY2hlSGFuZGxlci5lbnRyaWVzLmdldChrZXkpID8/IG51bGw7XG4gIH1cbiAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBNYXBDYWNoZUhhbmRsZXIuZW50cmllcy5zZXQoa2V5LCB7IHZhbHVlLCBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCkgfSk7XG4gIH1cbn1cblxubGV0IGltcG9ydGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IHMzSGl0ID0ge1xuICBzZW5kOiBhc3luYyAoKSA9PiAoe1xuICAgIEJvZHk6IFtCdWZmZXIuZnJvbShcInVwc3RyZWFtLWJ5dGVzXCIpXSxcbiAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICBFVGFnOiAnXCJ1cHN0cmVhbVwiJyxcbiAgfSksXG59IGFzIHVua25vd24gYXMgUzNDbGllbnQ7XG5cbi8qKiBBbiBvcHRpbWl6ZXIgb3ZlciB7QGxpbmsgTWFwQ2FjaGVIYW5kbGVyfSwgYXMgdGhlIGFkYXB0ZXIgY29uZmlndXJlcyBvbmUuICovXG5mdW5jdGlvbiBvcHRpbWl6ZXJGb3IoXG4gIG9wdGlvbnM6IHtcbiAgICBpbWFnZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmZXRjaEludGVybmFsPzogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zW1wiZmV0Y2hJbnRlcm5hbFwiXTtcbiAgICBpbXBvcnRNb2R1bGU/OiBJbWFnZU9wdGltaXplck9wdGlvbnNbXCJpbXBvcnRNb2R1bGVcIl07XG4gICAgczM/OiBTM0NsaWVudDtcbiAgICBidWNrZXQ/OiBzdHJpbmc7XG4gIH0gPSB7fSxcbik6IFJ1bnRpbWVJbWFnZU9wdGltaXplciB7XG4gIGNvbnN0IHZpYSA9IG5ldyBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIoe1xuICAgIGRlcGxveW1lbnRSb290OiBzdGFnZSgpLFxuICAgIC8vIEp1c3QgdGhlIGZpZWxkcyBgbG9hZEltYWdlUnVudGltZWAgcmVhZHMuXG4gICAgbWFuaWZlc3Q6IHtcbiAgICAgIGNka05leHRqc1ZlcnNpb246IENES19ORVhUSlNfVkVSU0lPTixcbiAgICAgIHJlbGF0aXZlUHJvamVjdERpcjogXCJcIixcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBiYXNlUGF0aDogXCJcIixcbiAgICAgICAgYXNzZXRQcmVmaXg6IFwiXCIsXG4gICAgICAgIGRpc3REaXI6IFwiLm5leHRcIixcbiAgICAgICAgZXhwZXJpbWVudGFsOiB7fSxcbiAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgLi4uaW1hZ2VDb25maWdEZWZhdWx0LFxuICAgICAgICAgIGxvY2FsUGF0dGVybnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAuLi5vcHRpb25zLmltYWdlcyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FjaGVIYW5kbGVyOlxuICAgICAgICAgIFwiLi4vbm9kZV9tb2R1bGVzL2Nkay1uZXh0anMvbGliL2FkYXB0ZXIvY2FjaGUtaGFuZGxlci5tanNcIixcbiAgICAgICAgY2FjaGVNYXhNZW1vcnlTaXplOiAwLFxuICAgICAgfSxcbiAgICB9IGFzIHVua25vd24gYXMgQWRhcHRlck1hbmlmZXN0LFxuICAgIGJ1Y2tldDogb3B0aW9ucy5idWNrZXQgPz8gXCJhc3NldHNcIixcbiAgICBidWNrZXRLZXlQcmVmaXg6IFwiXCIsXG4gICAgZmV0Y2hJbnRlcm5hbDpcbiAgICAgIG9wdGlvbnMuZmV0Y2hJbnRlcm5hbCA/P1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBmZXRjaEludGVybmFsXCIpO1xuICAgICAgfSksXG4gICAgaW1wb3J0TW9kdWxlOlxuICAgICAgb3B0aW9ucy5pbXBvcnRNb2R1bGUgPz9cbiAgICAgIChhc3luYyAodXJsKSA9PiB7XG4gICAgICAgIGltcG9ydGVkID0gdXJsO1xuICAgICAgICByZXR1cm4geyBkZWZhdWx0OiBNYXBDYWNoZUhhbmRsZXIgfTtcbiAgICAgIH0pLFxuICB9KTtcbiAgKHZpYSBhcyB1bmtub3duIGFzIHsgczM6IFMzQ2xpZW50IH0pLnMzID0gb3B0aW9ucy5zMyA/PyBzM0hpdDtcbiAgcmV0dXJuIHZpYTtcbn1cblxubGV0IG9wdGltaXplcjogUnVudGltZUltYWdlT3B0aW1pemVyO1xuXG5iZWZvcmVBbGwoKCkgPT4ge1xuICB1c2VOZXh0RnJvbShqb2luKF9fZGlybmFtZSwgXCIuLi8uLlwiKSk7XG4gIG9wdGltaXplciA9IG9wdGltaXplckZvcigpO1xufSk7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBNYXBDYWNoZUhhbmRsZXIuZW50cmllcy5jbGVhcigpO1xuICBpbXBvcnRlZCA9IHVuZGVmaW5lZDtcbiAgKGltYWdlT3B0aW1pemVyIGFzIGplc3QuTW9jaykubW9ja0NsZWFyKCk7XG4gIChpbWFnZU9wdGltaXplciBhcyBqZXN0Lk1vY2spLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICBidWZmZXI6IFBORyxcbiAgICBjb250ZW50VHlwZTogXCJpbWFnZS93ZWJwXCIsXG4gICAgbWF4QWdlOiA2MCxcbiAgICBldGFnOiBFVEFHLFxuICB9KTtcbn0pO1xuXG5pbnRlcmZhY2UgQW5zd2VyIHtcbiAgcmVhZG9ubHkgaGVhZDogUmVzcG9uc2VIZWFkO1xuICByZWFkb25seSBib2R5OiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoXG4gIHNyYzogc3RyaW5nLFxuICBpbml0OiB7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHZpYT86IFJ1bnRpbWVJbWFnZU9wdGltaXplcjtcbiAgICB3YWl0VW50aWw/OiAocHJvbWlzZTogUHJvbWlzZTx1bmtub3duPikgPT4gdm9pZDtcbiAgfSA9IHt9LFxuKTogUHJvbWlzZTxBbnN3ZXI+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChcbiAgICBgaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9fbmV4dC9pbWFnZT91cmw9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX0mdz02NDAmcT03NWAsXG4gICk7XG4gIGNvbnN0IHJlcSA9IG5ldyBTaGltSW5jb21pbmdNZXNzYWdlKHtcbiAgICBtZXRob2Q6IGluaXQubWV0aG9kID8/IFwiR0VUXCIsXG4gICAgdXJsOiBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAsXG4gICAgaGVhZGVyczogeyBhY2NlcHQ6IFwiaW1hZ2Uvd2VicFwiLCAuLi5pbml0LmhlYWRlcnMgfSxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgbGV0IGhlYWQ6IFJlc3BvbnNlSGVhZCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBkb25lID0gcGlwZVRvU2luayhcbiAgICByZXEsXG4gICAgcmVzLFxuICAgIHtcbiAgICAgIGJlZ2luKHJlc3BvbnNlSGVhZCkge1xuICAgICAgICBoZWFkID0gcmVzcG9uc2VIZWFkO1xuICAgICAgICByZXR1cm4gbmV3IFdyaXRhYmxlKHtcbiAgICAgICAgICB3cml0ZShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBjb21wcmVzczogZmFsc2UgfSxcbiAgKTtcbiAgY29uc3QgcGVuZGluZzogQXJyYXk8UHJvbWlzZTx1bmtub3duPj4gPSBbXTtcbiAgYXdhaXQgKGluaXQudmlhID8/IG9wdGltaXplcikuaGFuZGxlKFxuICAgIHJlcSxcbiAgICByZXMsXG4gICAgdXJsLFxuICAgIGluaXQud2FpdFVudGlsID8/ICgocHJvbWlzZSkgPT4gcGVuZGluZy5wdXNoKHByb21pc2UpKSxcbiAgKTtcbiAgYXdhaXQgZG9uZTtcbiAgLy8gU2V0dGxlZCwgbm90IGF3YWl0ZWQ6IHRoZSBydW50aW1lIGxvZ3MgYSByZWplY3Rpb24gcmF0aGVyIHRoYW4gZmFpbGluZyBvbiBpdC5cbiAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHBlbmRpbmcpO1xuICByZXR1cm4geyBoZWFkOiBoZWFkISwgYm9keTogQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCkgfTtcbn1cblxuZGVzY3JpYmUoXCJuZXdJbWFnZVJlc3BvbnNlQ2FjaGVcIiwgKCkgPT4ge1xuICB0eXBlIFJlc3BvbnNlQ2FjaGVDbGFzcyA9IFBhcmFtZXRlcnM8dHlwZW9mIG5ld0ltYWdlUmVzcG9uc2VDYWNoZT5bMF07XG5cbiAgLyoqIG5leHQgPCAxNi4zLjgncyBgUmVzcG9uc2VDYWNoZWA6IGAobWluaW1hbF9tb2RlLCBtYXhTaXplLCB0dGwpYC4gKi9cbiAgY2xhc3MgTGVnYWN5UmVzcG9uc2VDYWNoZSB7XG4gICAgcmVhZG9ubHkgbWluaW1hbF9tb2RlOiB1bmtub3duO1xuICAgIGNvbnN0cnVjdG9yKG1pbmltYWxNb2RlOiB1bmtub3duKSB7XG4gICAgICB0aGlzLm1pbmltYWxfbW9kZSA9IG1pbmltYWxNb2RlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogbmV4dCA+PSAxNi4zLjgnczogYCh7IG1pbmltYWxNb2RlLCByb3V0ZSwgLi4uIH0pYCwgdGhyb3dpbmcgd2l0aG91dCBhIHJvdXRlLlxuICAgKiBUaGUgZmllbGQgaXMgcmVuYW1lZCBoZXJlIHRvIHNob3cgdGhlIGNob2ljZSBkb2Vzbid0IGRlcGVuZCBvbiBpdC5cbiAgICovXG4gIGNsYXNzIFJvdXRlUmVzcG9uc2VDYWNoZSB7XG4gICAgcmVhZG9ubHkgbW9kZTogdW5rbm93bjtcbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICBtaW5pbWFsTW9kZSxcbiAgICAgIHJvdXRlLFxuICAgIH06IHtcbiAgICAgIG1pbmltYWxNb2RlOiBib29sZWFuO1xuICAgICAgcm91dGU/OiB1bmtub3duO1xuICAgIH0pIHtcbiAgICAgIGlmICghcm91dGUpIHRocm93IG5ldyBFcnJvcihcIlJlc3BvbnNlIGNhY2hlIHJlcXVpcmVzIGEgc291cmNlIHJvdXRlXCIpO1xuICAgICAgdGhpcy5tb2RlID0gbWluaW1hbE1vZGU7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdCA9IChSZXNwb25zZUNhY2hlOiBuZXcgKGFyZzogbmV2ZXIpID0+IG9iamVjdCkgPT5cbiAgICBuZXdJbWFnZVJlc3BvbnNlQ2FjaGUoXG4gICAgICBSZXNwb25zZUNhY2hlIGFzIHVua25vd24gYXMgUmVzcG9uc2VDYWNoZUNsYXNzLFxuICAgICkgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpdChcInBhc3NlcyB7IG1pbmltYWxNb2RlLCByb3V0ZTogJ2ltYWdlJyB9IHRvIGEgbmV4dCB0aGF0IHRha2VzIGl0XCIsICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGNvbnN0cnVjdChSb3V0ZVJlc3BvbnNlQ2FjaGUpO1xuICAgIGV4cGVjdChjYWNoZSkudG9CZUluc3RhbmNlT2YoUm91dGVSZXNwb25zZUNhY2hlKTtcbiAgICBleHBlY3QoY2FjaGUubW9kZSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIC8vIEJ5IHdoYXQgdGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMsIG5vdCB0aGUgdmVyc2lvbjogYSBjYW5hcnkgY3V0IGJlZm9yZVxuICAvLyAxNi4zLjgncyBjaGFuZ2UgcmVhZHMgYXMgbmV3ZXIgdGhhbiBpdC5cbiAgaXQoXCJwYXNzZXMgbWluaW1hbE1vZGUgYWxvbmUgdG8gYSBuZXh0IHRoYXQgdG9vayB0aGUgb3B0aW9ucyBhcyBtaW5pbWFsTW9kZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY2FjaGUgPSBjb25zdHJ1Y3QoTGVnYWN5UmVzcG9uc2VDYWNoZSk7XG4gICAgZXhwZWN0KGNhY2hlKS50b0JlSW5zdGFuY2VPZihMZWdhY3lSZXNwb25zZUNhY2hlKTtcbiAgICBleHBlY3QoY2FjaGUubWluaW1hbF9tb2RlKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXRocm93cyBhIGNvbnN0cnVjdG9yIGVycm9yIHRoYXQgaXNuJ3QgdGhlIG1pc3Npbmcgcm91dGVcIiwgKCkgPT4ge1xuICAgIGNsYXNzIEJyb2tlblJlc3BvbnNlQ2FjaGUge1xuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImJvb21cIik7XG4gICAgICB9XG4gICAgfVxuICAgIGV4cGVjdCgoKSA9PiBjb25zdHJ1Y3QoQnJva2VuUmVzcG9uc2VDYWNoZSkpLnRvVGhyb3coXCJib29tXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlJ1bnRpbWVJbWFnZU9wdGltaXplci5pc0VuYWJsZWRcIiwgKCkgPT4ge1xuICBjb25zdCB3aXRoSW1hZ2VzID0gKGltYWdlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+XG4gICAgb3B0aW1pemVyRm9yKHsgaW1hZ2VzIH0pO1xuXG4gIC8vIFdoZXJlIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIDQwNCByYXRoZXIgdGhhbiBvcHRpbWl6ZS5cbiAgaXQoXCJpcyBvZmYgZm9yIGltYWdlcy51bm9wdGltaXplZCBhbmQgZm9yIGEgbm9uLWRlZmF1bHQgbG9hZGVyXCIsICgpID0+IHtcbiAgICBleHBlY3Qod2l0aEltYWdlcyh7fSkuaXNFbmFibGVkKCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHdpdGhJbWFnZXMoeyB1bm9wdGltaXplZDogdHJ1ZSB9KS5pc0VuYWJsZWQoKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KFxuICAgICAgd2l0aEltYWdlcyh7IGxvYWRlcjogXCJjdXN0b21cIiwgbG9hZGVyRmlsZTogXCIuL2xvYWRlci5qc1wiIH0pLmlzRW5hYmxlZCgpLFxuICAgICkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwibmFtZXMgYSBtYW5pZmVzdCBmcm9tIGFuIG9sZGVyIGNkay1uZXh0anMgaW5zdGVhZCBvZiBhIFR5cGVFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgdmlhID0gb3B0aW1pemVyRm9yKCk7XG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gKFxuICAgICAgdmlhIGFzIHVua25vd24gYXMgeyBvcHRpb25zOiB7IG1hbmlmZXN0OiB7IGNka05leHRqc1ZlcnNpb246IHN0cmluZyB9IH0gfVxuICAgICkub3B0aW9ucztcbiAgICBtYW5pZmVzdC5jZGtOZXh0anNWZXJzaW9uID0gXCIwLjYuMlwiO1xuICAgIGV4cGVjdCgoKSA9PiB2aWEuaXNFbmFibGVkKCkpLnRvVGhyb3coL3dyaXR0ZW4gYnkgY2RrLW5leHRqcyAwXFwuNlxcLjIvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJSdW50aW1lSW1hZ2VPcHRpbWl6ZXIgcmVzcG9uc2VcIiwgKCkgPT4ge1xuICBpdChcImFuc3dlcnMgd2l0aCB0aGUgaGVhZGVycyBuZXh0IHN0YXJ0IHNlbmRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQsIGJvZHkgfSA9IGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL2xvZ28ucG5nXCIpO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3QoaGVhZC5oZWFkZXJzKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcInB1YmxpYywgbWF4LWFnZT02MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL3dlYnBcIixcbiAgICAgIFwiY29udGVudC1sZW5ndGhcIjogU3RyaW5nKFBORy5sZW5ndGgpLFxuICAgICAgXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI6ICdhdHRhY2htZW50OyBmaWxlbmFtZT1cImxvZ28ud2VicFwiJyxcbiAgICAgIFwiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIjogaW1hZ2VDb25maWdEZWZhdWx0LmNvbnRlbnRTZWN1cml0eVBvbGljeSxcbiAgICAgIGV0YWc6IEVUQUcsXG4gICAgICB2YXJ5OiBcIkFjY2VwdFwiLFxuICAgICAgXCJ4LW5leHRqcy1jYWNoZVwiOiBcIk1JU1NcIixcbiAgICB9KTtcbiAgICBleHBlY3QoYm9keSkudG9CZShQTkcudG9TdHJpbmcoKSk7XG4gIH0pO1xuXG4gIC8vIENvbnRlbnQtaGFzaGVkLCBzbyB0aGUgbmFtZSBjaGFuZ2VzIHdoZW5ldmVyIHRoZSBieXRlcyBkby5cbiAgaXQoXCJjYWNoZXMgYSBzdGF0aWNhbGx5IGltcG9ydGVkIGltYWdlIGZvciBhIHllYXIsIGltbXV0YWJsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBoZWFkIH0gPSBhd2FpdCByZXF1ZXN0KFwiL19uZXh0L3N0YXRpYy9tZWRpYS9sb2dvLjNmMmExYy5wbmdcIik7XG4gICAgZXhwZWN0KGhlYWQuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInB1YmxpYywgbWF4LWFnZT0zMTUzNjAwMDAsIGltbXV0YWJsZVwiLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIGB3cml0ZUhlYWRgIHJlamVjdHMgYSBoZWFkZXIgdmFsdWUgb3V0c2lkZSBsYXRpbjEgd2l0aCBFUlJfSU5WQUxJRF9DSEFSLFxuICAvLyBhbmQgdGhlIExhbWJkYSBzaW5rIHdyaXRlcyB0aGUgaGVhZCB0aHJvdWdoIGl0LlxuICBpdChcImVuY29kZXMgYSBub24tbGF0aW4xIGZpbGVuYW1lIHJhdGhlciB0aGFuIHNlbmRpbmcgaXQgcmF3XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvw7xtbGF1dC3lhpnnnJ8ucG5nXCIpO1xuICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gaGVhZC5oZWFkZXJzW1wiY29udGVudC1kaXNwb3NpdGlvblwiXTtcbiAgICBleHBlY3QoZGlzcG9zaXRpb24pLnRvTWF0Y2goL15hdHRhY2htZW50OyBmaWxlbmFtZT1cIlteXCJdKlwiOyBmaWxlbmFtZVxcKj0vKTtcbiAgICBleHBlY3QoZGlzcG9zaXRpb24pLnRvQ29udGFpbihcbiAgICAgIGBmaWxlbmFtZSo9VVRGLTgnJyR7ZW5jb2RlVVJJQ29tcG9uZW50KFwiw7xtbGF1dC3lhpnnnJ8ud2VicFwiKX1gLFxuICAgICk7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUhlYWRlclZhbHVlKFwiQ29udGVudC1EaXNwb3NpdGlvblwiLCBkaXNwb3NpdGlvbiksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJ0aGUgZXhhY3QgdGFnXCIsIEVUQUddLFxuICAgIFtcImEgd2VhayBmb3JtIG9mIGl0XCIsIGBXLyR7RVRBR31gXSxcbiAgICBbXCJhIGxpc3QgY29udGFpbmluZyBpdFwiLCBgXCJvdGhlclwiLCAke0VUQUd9YF0sXG4gICAgW1wiYSB3aWxkY2FyZFwiLCBcIipcIl0sXG4gIF0pKFwiYW5zd2VycyAzMDQgdG8gSWYtTm9uZS1NYXRjaCB3aXRoICVzXCIsIGFzeW5jIChfbmFtZSwgaWZOb25lTWF0Y2gpID0+IHtcbiAgICBjb25zdCB7IGhlYWQsIGJvZHkgfSA9IGF3YWl0IHJlcXVlc3QoXCIvbG9nby5wbmdcIiwge1xuICAgICAgaGVhZGVyczogeyBcImlmLW5vbmUtbWF0Y2hcIjogaWZOb25lTWF0Y2ggfSxcbiAgICB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDMwNCk7XG4gICAgZXhwZWN0KGhlYWQuaGVhZGVycy5ldGFnKS50b0JlKEVUQUcpO1xuICAgIGV4cGVjdChoZWFkLmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFxuICAgICAgXCJwdWJsaWMsIG1heC1hZ2U9NjAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KGJvZHkpLnRvQmUoXCJcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyAyMDAgdG8gYW4gSWYtTm9uZS1NYXRjaCB0aGF0IGRvZXMgbm90IG1hdGNoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvbG9nby5wbmdcIiwge1xuICAgICAgaGVhZGVyczogeyBcImlmLW5vbmUtbWF0Y2hcIjogJ1wib3RoZXJcIicgfSxcbiAgICB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gIH0pO1xuXG4gIGl0KFwic2VuZHMgdGhlIGhlYWRlcnMgYnV0IG5vIGJvZHkgdG8gSEVBRFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBoZWFkLCBib2R5IH0gPSBhd2FpdCByZXF1ZXN0KFwiL2xvZ28ucG5nXCIsIHsgbWV0aG9kOiBcIkhFQURcIiB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KGhlYWQuaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlKFN0cmluZyhQTkcubGVuZ3RoKSk7XG4gICAgZXhwZWN0KGJvZHkpLnRvQmUoXCJcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUnVudGltZUltYWdlT3B0aW1pemVyIHNvdXJjZXNcIiwgKCkgPT4ge1xuICAvLyBgbmV4dCBzdGFydGAgZmV0Y2hlcyBhIHJlbW90ZSBzb3VyY2Ugb25seSB3aGVuIGByZW1vdGVQYXR0ZXJuc2Agb3IgYGRvbWFpbnNgXG4gIC8vIGFsbG93IGl0OyB0aGUgc3RhZ2UncyBjb25maWcgYWxsb3dzIG5vbmUuIEFueXRoaW5nIGVsc2Ugd291bGQgbWFrZSB0aGVcbiAgLy8gb3B0aW1pemVyIGFuIG9wZW4gcHJveHkgaW50byB3aGF0ZXZlciBpdCBjYW4gcmVhY2guXG4gIGl0LmVhY2goW1xuICAgIFtcImFub3RoZXIgb3JpZ2luXCIsIFwiaHR0cHM6Ly9ldmlsLmV4YW1wbGUudGVzdC94LnBuZ1wiXSxcbiAgICBbXCJpbnN0YW5jZSBtZXRhZGF0YVwiLCBcImh0dHA6Ly8xNjkuMjU0LjE2OS4yNTQvbGF0ZXN0L21ldGEtZGF0YS9cIl0sXG4gICAgW1wiYSBwcm90b2NvbC1yZWxhdGl2ZSB1cmxcIiwgXCIvL2V2aWwuZXhhbXBsZS50ZXN0L3gucG5nXCJdLFxuICBdKShcInJlamVjdHMgYSByZW1vdGUgc291cmNlIHRoYXQgaXMgbm90IGFsbG93ZWQ6ICVzXCIsIGFzeW5jIChfbmFtZSwgc3JjKSA9PiB7XG4gICAgY29uc3QgeyBoZWFkLCBib2R5IH0gPSBhd2FpdCByZXF1ZXN0KHNyYyk7XG4gICAgZXhwZWN0KGhlYWQuc3RhdHVzQ29kZSkudG9CZSg0MDApO1xuICAgIGV4cGVjdChib2R5KS50b01hdGNoKC9cInVybFwiIHBhcmFtZXRlci8pO1xuICAgIGV4cGVjdChpbWFnZU9wdGltaXplcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gd2l0aFMzTWlzcyhcbiAgICBmZXRjaEludGVybmFsPzogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zW1wiZmV0Y2hJbnRlcm5hbFwiXSxcbiAgKTogUnVudGltZUltYWdlT3B0aW1pemVyIHtcbiAgICByZXR1cm4gb3B0aW1pemVyRm9yKHtcbiAgICAgIGZldGNoSW50ZXJuYWwsXG4gICAgICBzMzoge1xuICAgICAgICBzZW5kOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoXCJtaXNzaW5nXCIpLCB7IG5hbWU6IFwiTm9TdWNoS2V5XCIgfSk7XG4gICAgICAgIH0sXG4gICAgICB9IGFzIHVua25vd24gYXMgUzNDbGllbnQsXG4gICAgfSk7XG4gIH1cblxuICBpdChcImZhbGxzIGJhY2sgdG8gdGhlIGFwcCdzIHJvdXRlcyBmb3IgYSBzb3VyY2UgUzMgaGFzIG5vIGZpbGUgZm9yXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmZXRjaEludGVybmFsID0gamVzdC5mbihhc3luYyAoKSA9PiAoe1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL3BuZ1wiLFxuICAgICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJwdWJsaWMsIG1heC1hZ2U9MTIwXCIsXG4gICAgICB9LFxuICAgICAgYm9keTogQnVmZmVyLmZyb20oXCJyb3V0ZS1ieXRlc1wiKSxcbiAgICB9KSk7XG4gICAgY29uc3QgeyBoZWFkIH0gPSBhd2FpdCByZXF1ZXN0KFwiL2FwaS9hdmF0YXI/aWQ9NDJcIiwge1xuICAgICAgdmlhOiB3aXRoUzNNaXNzKGZldGNoSW50ZXJuYWwpLFxuICAgIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3QoZmV0Y2hJbnRlcm5hbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBcIi9hcGkvYXZhdGFyP2lkPTQyXCIsXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGltYWdlQ29uZmlnRGVmYXVsdC5tYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICk7XG4gICAgZXhwZWN0KChpbWFnZU9wdGltaXplciBhcyBqZXN0Lk1vY2spLm1vY2subGFzdENhbGxbMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgYnVmZmVyOiBCdWZmZXIuZnJvbShcInJvdXRlLWJ5dGVzXCIpLFxuICAgICAgY29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBjYWNoZUNvbnRyb2w6IFwicHVibGljLCBtYXgtYWdlPTEyMFwiLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyBgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYDogdGhlIGZpbGUgaXMgb24gZGlzaywgYW5kIGEgR2V0T2JqZWN0IGZvciBpdCBpc1xuICAvLyBhIHdhc3RlZCByb3VuZCB0cmlwLlxuICBpdChcImdvZXMgc3RyYWlnaHQgdG8gdGhlIGFwcCdzIHJvdXRlcyB3aGVuIHRoZXJlIGlzIG5vIGJ1Y2tldFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VuZCA9IGplc3QuZm4oKTtcbiAgICBjb25zdCBmZXRjaEludGVybmFsID0gamVzdC5mbihhc3luYyAoKSA9PiAoe1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL3BuZ1wiIH0sXG4gICAgICBib2R5OiBCdWZmZXIuZnJvbShcImRpc2stYnl0ZXNcIiksXG4gICAgfSkpO1xuICAgIGNvbnN0IHsgaGVhZCB9ID0gYXdhaXQgcmVxdWVzdChcIi9sb2dvLnBuZ1wiLCB7XG4gICAgICB2aWE6IG9wdGltaXplckZvcih7XG4gICAgICAgIGJ1Y2tldDogXCJcIixcbiAgICAgICAgZmV0Y2hJbnRlcm5hbCxcbiAgICAgICAgczM6IHsgc2VuZCB9IGFzIHVua25vd24gYXMgUzNDbGllbnQsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KGZldGNoSW50ZXJuYWwpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgXCIvbG9nby5wbmdcIixcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgaW1hZ2VDb25maWdEZWZhdWx0Lm1heGltdW1SZXNwb25zZUJvZHksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIDQwMCB3aGVuIHRoZSByb3V0ZSBzZW5kcyBubyBib2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvYXBpL2F2YXRhcj9pZD00MlwiLCB7XG4gICAgICB2aWE6IHdpdGhTM01pc3MoYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0LFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgYm9keTogQnVmZmVyLmFsbG9jKDApLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoNDAwKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGFuIGV4cGxpY2l0IDUwMiBmb3IgYSBzb3VyY2Ugc2VydmVkIGJ5IGFub3RoZXIgZnVuY3Rpb25Hcm91cHMgZ3JvdXBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaGVhZCwgYm9keSB9ID0gYXdhaXQgcmVxdWVzdChcIi9hcGkvYXZhdGFyP2lkPTQyXCIsIHtcbiAgICAgICAgdmlhOiB3aXRoUzNNaXNzKGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICBib2R5OiBCdWZmZXIuYWxsb2MoMCksXG4gICAgICAgICAgb3RoZXJHcm91cDogXCJhdmF0YXJzXCIsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGhlYWQuc3RhdHVzQ29kZSkudG9CZSg1MDIpO1xuICAgICAgZXhwZWN0KGJvZHkpLnRvTWF0Y2goL2Fub3RoZXIgZnVuY3Rpb25Hcm91cHMgZ3JvdXAvKTtcbiAgICAgIGV4cGVjdChpbWFnZU9wdGltaXplcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWAsIHdoaWNoIGBuZXh0IHN0YXJ0YCBlbmZvcmNlcyBvbiBsb2NhbFxuICAvLyBzb3VyY2VzIHRvbzogcGFzdCBpdCwgdGhlIHNvdXJjZSBpcyBub3QgcmVhZCBpbnRvIG1lbW9yeS5cbiAgaXQoXCJhbnN3ZXJzIDQxMyBmb3IgYSByb3V0ZSByZXNwb25zZSBvdmVyIG1heGltdW1SZXNwb25zZUJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgaGVhZCB9ID0gYXdhaXQgcmVxdWVzdChcIi9hcGkvZXhwb3J0XCIsIHtcbiAgICAgIHZpYTogd2l0aFMzTWlzcyhhc3luYyAoKSA9PiAoe1xuICAgICAgICBzdGF0dXNDb2RlOiAwLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgYm9keTogQnVmZmVyLmFsbG9jKDApLFxuICAgICAgICB0b29MYXJnZTogdHJ1ZSxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDQxMyk7XG4gICAgZXhwZWN0KGltYWdlT3B0aW1pemVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgNDEzIGZvciBhbiBTMyBvYmplY3Qgb3ZlciBtYXhpbXVtUmVzcG9uc2VCb2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvdmlkZW8ubXA0XCIsIHtcbiAgICAgIHZpYTogb3B0aW1pemVyRm9yKHtcbiAgICAgICAgaW1hZ2VzOiB7IG1heGltdW1SZXNwb25zZUJvZHk6IDEwIH0sXG4gICAgICAgIHMzOiB7XG4gICAgICAgICAgc2VuZDogYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgIEJvZHk6IFtCdWZmZXIuZnJvbShcIm5ldmVyIHJlYWRcIildLFxuICAgICAgICAgICAgQ29udGVudExlbmd0aDogMTEsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBTM0NsaWVudCxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoNDEzKTtcbiAgICBleHBlY3QoaW1hZ2VPcHRpbWl6ZXIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUnVudGltZUltYWdlT3B0aW1pemVyIGNhY2hlXCIsICgpID0+IHtcbiAgaXQoXCJvcHRpbWl6ZXMgb25jZSwgdGhlbiBhbnN3ZXJzIGZyb20gdGhlIGNhY2hlIGhhbmRsZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHZpYSA9IG9wdGltaXplckZvcigpO1xuICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgcmVxdWVzdChcIi9waG90b3MvY2FjaGVkLnBuZ1wiLCB7IHZpYSB9KTtcbiAgICBleHBlY3QoZmlyc3QuaGVhZC5oZWFkZXJzW1wieC1uZXh0anMtY2FjaGVcIl0pLnRvQmUoXCJNSVNTXCIpO1xuICAgIGV4cGVjdChmaXJzdC5ib2R5KS50b0JlKFBORy50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IHNlY29uZCA9IGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL2NhY2hlZC5wbmdcIiwgeyB2aWEgfSk7XG4gICAgZXhwZWN0KHNlY29uZC5oZWFkLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3Qoc2Vjb25kLmhlYWQuaGVhZGVyc1tcIngtbmV4dGpzLWNhY2hlXCJdKS50b0JlKFwiSElUXCIpO1xuICAgIGV4cGVjdChzZWNvbmQuYm9keSkudG9CZShQTkcudG9TdHJpbmcoKSk7XG4gICAgZXhwZWN0KHNlY29uZC5oZWFkLmhlYWRlcnMuZXRhZykudG9CZShFVEFHKTtcbiAgICBleHBlY3QoaW1hZ2VPcHRpbWl6ZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgIC8vIFRoZSBlbnRyeSBgbmV4dCBzdGFydGAgd291bGQgaGF2ZSB3cml0dGVuLlxuICAgIGNvbnN0IFtlbnRyeV0gPSBbLi4uTWFwQ2FjaGVIYW5kbGVyLmVudHJpZXMudmFsdWVzKCldIGFzIEFycmF5PHtcbiAgICAgIHZhbHVlOiB7IGtpbmQ6IHN0cmluZzsgZXh0ZW5zaW9uOiBzdHJpbmcgfTtcbiAgICB9PjtcbiAgICBleHBlY3QoZW50cnkudmFsdWUpLnRvTWF0Y2hPYmplY3QoeyBraW5kOiBcIklNQUdFXCIsIGV4dGVuc2lvbjogXCJ3ZWJwXCIgfSk7XG4gIH0pO1xuXG4gIC8vIEFub3RoZXIgaW5zdGFuY2U6IG5vdGhpbmcgaW4gbWVtb3J5LCBzbyB0aGUgaGl0IGlzIHRoZSBjYWNoZSBoYW5kbGVyJ3MuXG4gIGl0KFwic2hhcmVzIHRoZSBvcHRpbWl6ZWQgaW1hZ2UgYWNyb3NzIGluc3RhbmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcmVxdWVzdChcIi9waG90b3Mvc2hhcmVkLnBuZ1wiLCB7IHZpYTogb3B0aW1pemVyRm9yKCkgfSk7XG4gICAgY29uc3Qgb3RoZXIgPSBhd2FpdCByZXF1ZXN0KFwiL3Bob3Rvcy9zaGFyZWQucG5nXCIsIHsgdmlhOiBvcHRpbWl6ZXJGb3IoKSB9KTtcbiAgICBleHBlY3Qob3RoZXIuaGVhZC5oZWFkZXJzW1wieC1uZXh0anMtY2FjaGVcIl0pLnRvQmUoXCJISVRcIik7XG4gICAgZXhwZWN0KGltYWdlT3B0aW1pemVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBtYW5pZmVzdCBuYW1lcyBpdCByZWxhdGl2ZSB0byB0aGUgZGlzdCBkaXIuXG4gIGl0KFwibG9hZHMgdGhlIGFwcCdzIGNhY2hlSGFuZGxlciBmcm9tIHdoZXJlIG5leHQgc3RhcnQgd291bGRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL2NhY2hlZC5wbmdcIiwgeyB2aWE6IG9wdGltaXplckZvcigpIH0pO1xuICAgIGV4cGVjdChpbXBvcnRlZCkudG9NYXRjaChcbiAgICAgIC9eZmlsZTpcXC9cXC8uKlxcL25vZGVfbW9kdWxlc1xcL2Nkay1uZXh0anNcXC9saWJcXC9hZGFwdGVyXFwvY2FjaGUtaGFuZGxlclxcLm1qcyQvLFxuICAgICk7XG4gICAgZXhwZWN0KE1hcENhY2hlSGFuZGxlci5vcHRpb25zKS50b01hdGNoT2JqZWN0KHsgZGV2OiBmYWxzZSB9KTtcbiAgfSk7XG5cbiAgLy8gQSB0cmFuc2llbnQgZmFpbHVyZSBsb2FkaW5nIHRoZSBjYWNoZUhhbmRsZXIgKEVNRklMRSBpbiBhIGNvbGQtc3RhcnRcbiAgLy8gYnVyc3QpIG11c3Qgbm90IGZhaWwgZXZlcnkgbGF0ZXIgaW1hZ2UgcmVxdWVzdCBvbiB0aGUgaW5zdGFuY2UuXG4gIGl0KFwicmV0cmllcyBsb2FkaW5nIHRoZSBjYWNoZUhhbmRsZXIgYWZ0ZXIgYSBmYWlsZWQgbG9hZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1wb3J0TW9kdWxlID0gamVzdFxuICAgICAgICAuZm4oKVxuICAgICAgICAubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkVNRklMRVwiKSlcbiAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKHsgZGVmYXVsdDogTWFwQ2FjaGVIYW5kbGVyIH0pO1xuICAgICAgY29uc3QgdmlhID0gb3B0aW1pemVyRm9yKHsgaW1wb3J0TW9kdWxlIH0pO1xuICAgICAgZXhwZWN0KFxuICAgICAgICAoYXdhaXQgcmVxdWVzdChcIi9waG90b3MvcmV0cnkucG5nXCIsIHsgdmlhIH0pKS5oZWFkLnN0YXR1c0NvZGUsXG4gICAgICApLnRvQmUoNTAwKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgKGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL3JldHJ5LnBuZ1wiLCB7IHZpYSB9KSkuaGVhZC5zdGF0dXNDb2RlLFxuICAgICAgKS50b0JlKDIwMCk7XG4gICAgICBleHBlY3QoaW1wb3J0TW9kdWxlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgd3JpdGUgb2YgYSBmcmVzaCBpbWFnZSBnb2VzIHRvIGB3YWl0VW50aWxgLCBub3QgaW4gZnJvbnQgb2YgdGhlXG4gIC8vIHJlc3BvbnNlOiB0aGUgaW1hZ2UgaXMgc2VudCBiZWZvcmUgdGhlIGNhY2hlIGhhbmRsZXIgaGFzIGl0LlxuICBpdChcIndyaXRlcyBhIG1pc3MgdG8gdGhlIGNhY2hlIGFmdGVyIGFuc3dlcmluZywgdGhyb3VnaCB3YWl0VW50aWxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEEgd3JpdGUgdGhhdCBjYW4ndCBmaW5pc2ggdW50aWwgcmVsZWFzZWQ6IGlmIHRoZSByZXNwb25zZSB3YWl0ZWQgb24gaXQsXG4gICAgLy8gYHJlcXVlc3RgIHdvdWxkIG5ldmVyIHJldHVybi5cbiAgICBsZXQgcmVsZWFzZSE6ICgpID0+IHZvaWQ7XG4gICAgY29uc3QgZ2F0ZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAocmVsZWFzZSA9IHJlc29sdmUpKTtcbiAgICBjb25zdCBzZXQgPSBNYXBDYWNoZUhhbmRsZXIucHJvdG90eXBlLnNldDtcbiAgICBNYXBDYWNoZUhhbmRsZXIucHJvdG90eXBlLnNldCA9IGFzeW5jIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBhd2FpdCBnYXRlO1xuICAgICAgcmV0dXJuIHNldC5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlbmRpbmc6IEFycmF5PFByb21pc2U8dW5rbm93bj4+ID0gW107XG4gICAgICBjb25zdCBmaXJzdCA9IGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL2RlZmVycmVkLnBuZ1wiLCB7XG4gICAgICAgIHZpYTogb3B0aW1pemVyRm9yKCksXG4gICAgICAgIHdhaXRVbnRpbDogKHByb21pc2UpID0+IHBlbmRpbmcucHVzaChwcm9taXNlKSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGZpcnN0LmhlYWQuaGVhZGVyc1tcIngtbmV4dGpzLWNhY2hlXCJdKS50b0JlKFwiTUlTU1wiKTtcbiAgICAgIGV4cGVjdChNYXBDYWNoZUhhbmRsZXIuZW50cmllcy5zaXplKS50b0JlKDApO1xuXG4gICAgICByZWxlYXNlKCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwZW5kaW5nKTtcbiAgICAgIGV4cGVjdChNYXBDYWNoZUhhbmRsZXIuZW50cmllcy5zaXplKS50b0JlKDEpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBNYXBDYWNoZUhhbmRsZXIucHJvdG90eXBlLnNldCA9IHNldDtcbiAgICB9XG4gIH0pO1xufSk7XG4iXX0=
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2hDLGlGQUFpRjtBQUNqRix5RUFBeUU7QUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQztJQUM1RCxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUMxQixDQUFDLENBQUMsQ0FBQztBQUVKLHFDQUFpRDtBQUNqRCx5Q0FBZ0Q7QUFDaEQscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBdUM7QUFFdkMsNEVBQXFFO0FBQ3JFLDBFQUEwRTtBQUMxRSw0Q0FBcUQ7QUFDckQsOENBQW1FO0FBQ25FLHNDQUF5QztBQUN6QyxtQ0FJaUI7QUFDakIsOERBQTJEO0FBRTNELGlEQUE2QztBQUU3QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDM0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBRXRCLDZFQUE2RTtBQUM3RSxTQUFTLEtBQUs7SUFDWixNQUFNLElBQUksR0FBRyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFBLG1CQUFTLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLGVBQWU7SUFDWixNQUFNLENBQVUsT0FBTyxHQUFHLElBQUks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QyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcbi8vIFRoZSByZWFsIG1vZHVsZSwgd2l0aCB0aGUgb25lIHN0ZXAgdGhhdCBuZWVkcyBgc2hhcnBgIHN0dWJiZWQgb3V0OiB0aGVzZSB0ZXN0c1xuLy8gYXJlIGFib3V0IHRoZSByZXNwb25zZSBgaGFuZGxlYCB3cml0ZXMsIG5vdCBhYm91dCBvcHRpbWl6aW5nIGFuIGltYWdlLlxuamVzdC5tb2NrKFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIiwgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIiksXG4gIGltYWdlT3B0aW1pemVyOiBqZXN0LmZuKCksXG59KSk7XG5cbmltcG9ydCB7IG1rZGlyU3luYywgbWtkdGVtcFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVIZWFkZXJWYWx1ZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgaW1hZ2VPcHRpbWl6ZXIgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIjtcbmltcG9ydCB7IGltYWdlQ29uZmlnRGVmYXVsdCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcuanNcIjtcbmltcG9ydCB7IFNoaW1JbmNvbWluZ01lc3NhZ2UgfSBmcm9tIFwiLi9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc3BvbnNlSGVhZCwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vaHR0cC9yZXNwb25zZVwiO1xuaW1wb3J0IHsgcGlwZVRvU2luayB9IGZyb20gXCIuL2h0dHAvc2lua1wiO1xuaW1wb3J0IHtcbiAgSW1hZ2VPcHRpbWl6ZXJPcHRpb25zLFxuICBuZXdJbWFnZVJlc3BvbnNlQ2FjaGUsXG4gIFJ1bnRpbWVJbWFnZU9wdGltaXplcixcbn0gZnJvbSBcIi4vaW1hZ2VcIjtcbmltcG9ydCB7IENES19ORVhUSlNfVkVSU0lPTiB9IGZyb20gXCIuLi9jZGstbmV4dGpzLXZlcnNpb25cIjtcbmltcG9ydCB7IEFkYXB0ZXJNYW5pZmVzdCB9IGZyb20gXCIuL21hbmlmZXN0XCI7XG5pbXBvcnQgeyB1c2VOZXh0RnJvbSB9IGZyb20gXCIuL25leHQtbW9kdWxlc1wiO1xuXG5jb25zdCBQTkcgPSBCdWZmZXIuZnJvbShcIm9wdGltaXplZC1ieXRlc1wiKTtcbmNvbnN0IEVUQUcgPSBcImFiYzEyM1wiO1xuXG4vKiogQSBkZXBsb3ltZW50IHJvb3QsIHdoaWNoIHRoZSBkaXN0IGRpciB0aGUgaW1hZ2UgY2FjaGUgdXNlcyBzaXRzIHVuZGVyLiAqL1xuZnVuY3Rpb24gc3RhZ2UoKTogc3RyaW5nIHtcbiAgY29uc3Qgcm9vdCA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1pbWFnZS1cIikpO1xuICBta2RpclN5bmMoam9pbihyb290LCBcIi5uZXh0XCIpKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8qKiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAsIHJlZHVjZWQgdG8gYSBtYXA6IHdoYXQgdGhlIFMzIGhhbmRsZXIgaXMgdG8gaXQuICovXG5jbGFzcyBNYXBDYWNoZUhhbmRsZXIge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgcHVibGljIHN0YXRpYyBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgTWFwQ2FjaGVIYW5kbGVyLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG4gIHB1YmxpYyBhc3luYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTWFwQ2FjaGVIYW5kbGVyLmVudHJpZXMuZ2V0KGtleSkgPz8gbnVsbDtcbiAgfVxuICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIE1hcENhY2hlSGFuZGxlci5lbnRyaWVzLnNldChrZXksIHsgdmFsdWUsIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSB9KTtcbiAgfVxufVxuXG5sZXQgaW1wb3J0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuY29uc3QgczNIaXQgPSB7XG4gIHNlbmQ6IGFzeW5jICgpID0+ICh7XG4gICAgQm9keTogW0J1ZmZlci5mcm9tKFwidXBzdHJlYW0tYnl0ZXNcIildLFxuICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgIEVUYWc6ICdcInVwc3RyZWFtXCInLFxuICB9KSxcbn0gYXMgdW5rbm93biBhcyBTM0NsaWVudDtcblxuLyoqIEFuIG9wdGltaXplciBvdmVyIHtAbGluayBNYXBDYWNoZUhhbmRsZXJ9LCBhcyB0aGUgYWRhcHRlciBjb25maWd1cmVzIG9uZS4gKi9cbmZ1bmN0aW9uIG9wdGltaXplckZvcihcbiAgb3B0aW9uczoge1xuICAgIGltYWdlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZldGNoSW50ZXJuYWw/OiBJbWFnZU9wdGltaXplck9wdGlvbnNbXCJmZXRjaEludGVybmFsXCJdO1xuICAgIGltcG9ydE1vZHVsZT86IEltYWdlT3B0aW1pemVyT3B0aW9uc1tcImltcG9ydE1vZHVsZVwiXTtcbiAgICBzMz86IFMzQ2xpZW50O1xuICAgIGJ1Y2tldD86IHN0cmluZztcbiAgfSA9IHt9LFxuKTogUnVudGltZUltYWdlT3B0aW1pemVyIHtcbiAgY29uc3QgdmlhID0gbmV3IFJ1bnRpbWVJbWFnZU9wdGltaXplcih7XG4gICAgZGVwbG95bWVudFJvb3Q6IHN0YWdlKCksXG4gICAgLy8gSnVzdCB0aGUgZmllbGRzIGBsb2FkSW1hZ2VSdW50aW1lYCByZWFkcy5cbiAgICBtYW5pZmVzdDoge1xuICAgICAgY2RrTmV4dGpzVmVyc2lvbjogQ0RLX05FWFRKU19WRVJTSU9OLFxuICAgICAgcmVsYXRpdmVQcm9qZWN0RGlyOiBcIlwiLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBhc3NldFByZWZpeDogXCJcIixcbiAgICAgICAgZGlzdERpcjogXCIubmV4dFwiLFxuICAgICAgICBleHBlcmltZW50YWw6IHt9LFxuICAgICAgICBpbWFnZXM6IHtcbiAgICAgICAgICAuLi5pbWFnZUNvbmZpZ0RlZmF1bHQsXG4gICAgICAgICAgbG9jYWxQYXR0ZXJuczogdW5kZWZpbmVkLFxuICAgICAgICAgIC4uLm9wdGlvbnMuaW1hZ2VzLFxuICAgICAgICB9LFxuICAgICAgICBjYWNoZUhhbmRsZXI6XG4gICAgICAgICAgXCIuLi9ub2RlX21vZHVsZXMvY2RrLW5leHRqcy9saWIvYWRhcHRlci9jYWNoZS1oYW5kbGVyLm1qc1wiLFxuICAgICAgICBjYWNoZU1heE1lbW9yeVNpemU6IDAsXG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBBZGFwdGVyTWFuaWZlc3QsXG4gICAgYnVja2V0OiBvcHRpb25zLmJ1Y2tldCA/PyBcImFzc2V0c1wiLFxuICAgIGJ1Y2tldEtleVByZWZpeDogXCJcIixcbiAgICBmZXRjaEludGVybmFsOlxuICAgICAgb3B0aW9ucy5mZXRjaEludGVybmFsID8/XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGZldGNoSW50ZXJuYWxcIik7XG4gICAgICB9KSxcbiAgICBpbXBvcnRNb2R1bGU6XG4gICAgICBvcHRpb25zLmltcG9ydE1vZHVsZSA/P1xuICAgICAgKGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgaW1wb3J0ZWQgPSB1cmw7XG4gICAgICAgIHJldHVybiB7IGRlZmF1bHQ6IE1hcENhY2hlSGFuZGxlciB9O1xuICAgICAgfSksXG4gIH0pO1xuICAodmlhIGFzIHVua25vd24gYXMgeyBzMzogUzNDbGllbnQgfSkuczMgPSBvcHRpb25zLnMzID8/IHMzSGl0O1xuICByZXR1cm4gdmlhO1xufVxuXG5sZXQgb3B0aW1pemVyOiBSdW50aW1lSW1hZ2VPcHRpbWl6ZXI7XG5cbmJlZm9yZUFsbCgoKSA9PiB7XG4gIHVzZU5leHRGcm9tKGpvaW4oX19kaXJuYW1lLCBcIi4uLy4uXCIpKTtcbiAgb3B0aW1pemVyID0gb3B0aW1pemVyRm9yKCk7XG59KTtcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIE1hcENhY2hlSGFuZGxlci5lbnRyaWVzLmNsZWFyKCk7XG4gIGltcG9ydGVkID0gdW5kZWZpbmVkO1xuICAoaW1hZ2VPcHRpbWl6ZXIgYXMgamVzdC5Nb2NrKS5tb2NrQ2xlYXIoKTtcbiAgKGltYWdlT3B0aW1pemVyIGFzIGplc3QuTW9jaykubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgIGJ1ZmZlcjogUE5HLFxuICAgIGNvbnRlbnRUeXBlOiBcImltYWdlL3dlYnBcIixcbiAgICBtYXhBZ2U6IDYwLFxuICAgIGV0YWc6IEVUQUcsXG4gIH0pO1xufSk7XG5cbmludGVyZmFjZSBBbnN3ZXIge1xuICByZWFkb25seSBoZWFkOiBSZXNwb25zZUhlYWQ7XG4gIHJlYWRvbmx5IGJvZHk6IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChcbiAgc3JjOiBzdHJpbmcsXG4gIGluaXQ6IHtcbiAgICBtZXRob2Q/OiBzdHJpbmc7XG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgdmlhPzogUnVudGltZUltYWdlT3B0aW1pemVyO1xuICAgIHdhaXRVbnRpbD86IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkO1xuICB9ID0ge30sXG4pOiBQcm9taXNlPEFuc3dlcj4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgIGBodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L19uZXh0L2ltYWdlP3VybD0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZ3PTY0MCZxPTc1YCxcbiAgKTtcbiAgY29uc3QgcmVxID0gbmV3IFNoaW1JbmNvbWluZ01lc3NhZ2Uoe1xuICAgIG1ldGhvZDogaW5pdC5tZXRob2QgPz8gXCJHRVRcIixcbiAgICB1cmw6IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCxcbiAgICBoZWFkZXJzOiB7IGFjY2VwdDogXCJpbWFnZS93ZWJwXCIsIC4uLmluaXQuaGVhZGVycyB9LFxuICB9KTtcbiAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICBsZXQgaGVhZDogUmVzcG9uc2VIZWFkIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKFxuICAgIHJlcSxcbiAgICByZXMsXG4gICAge1xuICAgICAgYmVnaW4ocmVzcG9uc2VIZWFkKSB7XG4gICAgICAgIGhlYWQgPSByZXNwb25zZUhlYWQ7XG4gICAgICAgIHJldHVybiBuZXcgV3JpdGFibGUoe1xuICAgICAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IGNvbXByZXNzOiBmYWxzZSB9LFxuICApO1xuICBjb25zdCBwZW5kaW5nOiBBcnJheTxQcm9taXNlPHVua25vd24+PiA9IFtdO1xuICBhd2FpdCAoaW5pdC52aWEgPz8gb3B0aW1pemVyKS5oYW5kbGUoXG4gICAgcmVxLFxuICAgIHJlcyxcbiAgICB1cmwsXG4gICAgaW5pdC53YWl0VW50aWwgPz8gKChwcm9taXNlKSA9PiBwZW5kaW5nLnB1c2gocHJvbWlzZSkpLFxuICApO1xuICBhd2FpdCBkb25lO1xuICAvLyBTZXR0bGVkLCBub3QgYXdhaXRlZDogdGhlIHJ1bnRpbWUgbG9ncyBhIHJlamVjdGlvbiByYXRoZXIgdGhhbiBmYWlsaW5nIG9uIGl0LlxuICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocGVuZGluZyk7XG4gIHJldHVybiB7IGhlYWQ6IGhlYWQhLCBib2R5OiBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoKSB9O1xufVxuXG5kZXNjcmliZShcIm5ld0ltYWdlUmVzcG9uc2VDYWNoZVwiLCAoKSA9PiB7XG4gIHR5cGUgUmVzcG9uc2VDYWNoZUNsYXNzID0gUGFyYW1ldGVyczx0eXBlb2YgbmV3SW1hZ2VSZXNwb25zZUNhY2hlPlswXTtcblxuICAvKiogbmV4dCA8IDE2LjMuOCdzIGBSZXNwb25zZUNhY2hlYDogYChtaW5pbWFsX21vZGUsIG1heFNpemUsIHR0bClgLiAqL1xuICBjbGFzcyBMZWdhY3lSZXNwb25zZUNhY2hlIHtcbiAgICByZWFkb25seSBtaW5pbWFsX21vZGU6IHVua25vd247XG4gICAgY29uc3RydWN0b3IobWluaW1hbE1vZGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMubWluaW1hbF9tb2RlID0gbWluaW1hbE1vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBuZXh0ID49IDE2LjMuOCdzOiBgKHsgbWluaW1hbE1vZGUsIHJvdXRlLCAuLi4gfSlgLCB0aHJvd2luZyB3aXRob3V0IGEgcm91dGUuXG4gICAqIFRoZSBmaWVsZCBpcyByZW5hbWVkIGhlcmUgdG8gc2hvdyB0aGUgY2hvaWNlIGRvZXNuJ3QgZGVwZW5kIG9uIGl0LlxuICAgKi9cbiAgY2xhc3MgUm91dGVSZXNwb25zZUNhY2hlIHtcbiAgICByZWFkb25seSBtb2RlOiB1bmtub3duO1xuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgIG1pbmltYWxNb2RlLFxuICAgICAgcm91dGUsXG4gICAgfToge1xuICAgICAgbWluaW1hbE1vZGU6IGJvb2xlYW47XG4gICAgICByb3V0ZT86IHVua25vd247XG4gICAgfSkge1xuICAgICAgaWYgKCFyb3V0ZSkgdGhyb3cgbmV3IEVycm9yKFwiUmVzcG9uc2UgY2FjaGUgcmVxdWlyZXMgYSBzb3VyY2Ugcm91dGVcIik7XG4gICAgICB0aGlzLm1vZGUgPSBtaW5pbWFsTW9kZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY29uc3RydWN0ID0gKFJlc3BvbnNlQ2FjaGU6IG5ldyAoYXJnOiBuZXZlcikgPT4gb2JqZWN0KSA9PlxuICAgIG5ld0ltYWdlUmVzcG9uc2VDYWNoZShcbiAgICAgIFJlc3BvbnNlQ2FjaGUgYXMgdW5rbm93biBhcyBSZXNwb25zZUNhY2hlQ2xhc3MsXG4gICAgKSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGl0KFwicGFzc2VzIHsgbWluaW1hbE1vZGUsIHJvdXRlOiAnaW1hZ2UnIH0gdG8gYSBuZXh0IHRoYXQgdGFrZXMgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNhY2hlID0gY29uc3RydWN0KFJvdXRlUmVzcG9uc2VDYWNoZSk7XG4gICAgZXhwZWN0KGNhY2hlKS50b0JlSW5zdGFuY2VPZihSb3V0ZVJlc3BvbnNlQ2FjaGUpO1xuICAgIGV4cGVjdChjYWNoZS5tb2RlKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgLy8gQnkgd2hhdCB0aGUgY29uc3RydWN0b3IgYWNjZXB0cywgbm90IHRoZSB2ZXJzaW9uOiBhIGNhbmFyeSBjdXQgYmVmb3JlXG4gIC8vIDE2LjMuOCdzIGNoYW5nZSByZWFkcyBhcyBuZXdlciB0aGFuIGl0LlxuICBpdChcInBhc3NlcyBtaW5pbWFsTW9kZSBhbG9uZSB0byBhIG5leHQgdGhhdCB0b29rIHRoZSBvcHRpb25zIGFzIG1pbmltYWxNb2RlXCIsICgpID0+IHtcbiAgICBjb25zdCBjYWNoZSA9IGNvbnN0cnVjdChMZWdhY3lSZXNwb25zZUNhY2hlKTtcbiAgICBleHBlY3QoY2FjaGUpLnRvQmVJbnN0YW5jZU9mKExlZ2FjeVJlc3BvbnNlQ2FjaGUpO1xuICAgIGV4cGVjdChjYWNoZS5taW5pbWFsX21vZGUpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdChcInJldGhyb3dzIGEgY29uc3RydWN0b3IgZXJyb3IgdGhhdCBpc24ndCB0aGUgbWlzc2luZyByb3V0ZVwiLCAoKSA9PiB7XG4gICAgY2xhc3MgQnJva2VuUmVzcG9uc2VDYWNoZSB7XG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYm9vbVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZXhwZWN0KCgpID0+IGNvbnN0cnVjdChCcm9rZW5SZXNwb25zZUNhY2hlKSkudG9UaHJvdyhcImJvb21cIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUnVudGltZUltYWdlT3B0aW1pemVyLmlzRW5hYmxlZFwiLCAoKSA9PiB7XG4gIGNvbnN0IHdpdGhJbWFnZXMgPSAoaW1hZ2VzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT5cbiAgICBvcHRpbWl6ZXJGb3IoeyBpbWFnZXMgfSk7XG5cbiAgLy8gV2hlcmUgYG5leHQgc3RhcnRgIGFuc3dlcnMgNDA0IHJhdGhlciB0aGFuIG9wdGltaXplLlxuICBpdChcImlzIG9mZiBmb3IgaW1hZ2VzLnVub3B0aW1pemVkIGFuZCBmb3IgYSBub24tZGVmYXVsdCBsb2FkZXJcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCh3aXRoSW1hZ2VzKHt9KS5pc0VuYWJsZWQoKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3Qod2l0aEltYWdlcyh7IHVub3B0aW1pemVkOiB0cnVlIH0pLmlzRW5hYmxlZCgpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QoXG4gICAgICB3aXRoSW1hZ2VzKHsgbG9hZGVyOiBcImN1c3RvbVwiLCBsb2FkZXJGaWxlOiBcIi4vbG9hZGVyLmpzXCIgfSkuaXNFbmFibGVkKCksXG4gICAgKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoXCJuYW1lcyBhIG1hbmlmZXN0IGZyb20gYW4gb2xkZXIgY2RrLW5leHRqcyBpbnN0ZWFkIG9mIGEgVHlwZUVycm9yXCIsICgpID0+IHtcbiAgICBjb25zdCB2aWEgPSBvcHRpbWl6ZXJGb3IoKTtcbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSAoXG4gICAgICB2aWEgYXMgdW5rbm93biBhcyB7IG9wdGlvbnM6IHsgbWFuaWZlc3Q6IHsgY2RrTmV4dGpzVmVyc2lvbjogc3RyaW5nIH0gfSB9XG4gICAgKS5vcHRpb25zO1xuICAgIG1hbmlmZXN0LmNka05leHRqc1ZlcnNpb24gPSBcIjAuNi4yXCI7XG4gICAgZXhwZWN0KCgpID0+IHZpYS5pc0VuYWJsZWQoKSkudG9UaHJvdygvd3JpdHRlbiBieSBjZGstbmV4dGpzIDBcXC42XFwuMi8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlJ1bnRpbWVJbWFnZU9wdGltaXplciByZXNwb25zZVwiLCAoKSA9PiB7XG4gIGl0KFwiYW5zd2VycyB3aXRoIHRoZSBoZWFkZXJzIG5leHQgc3RhcnQgc2VuZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgaGVhZCwgYm9keSB9ID0gYXdhaXQgcmVxdWVzdChcIi9waG90b3MvbG9nby5wbmdcIik7XG4gICAgZXhwZWN0KGhlYWQuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChoZWFkLmhlYWRlcnMpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwicHVibGljLCBtYXgtYWdlPTYwLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiaW1hZ2Uvd2VicFwiLFxuICAgICAgXCJjb250ZW50LWxlbmd0aFwiOiBTdHJpbmcoUE5HLmxlbmd0aCksXG4gICAgICBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjogJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPVwibG9nby53ZWJwXCInLFxuICAgICAgXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiOiBpbWFnZUNvbmZpZ0RlZmF1bHQuY29udGVudFNlY3VyaXR5UG9saWN5LFxuICAgICAgZXRhZzogRVRBRyxcbiAgICAgIHZhcnk6IFwiQWNjZXB0XCIsXG4gICAgICBcIngtbmV4dGpzLWNhY2hlXCI6IFwiTUlTU1wiLFxuICAgIH0pO1xuICAgIGV4cGVjdChib2R5KS50b0JlKFBORy50b1N0cmluZygpKTtcbiAgfSk7XG5cbiAgLy8gQ29udGVudC1oYXNoZWQsIHNvIHRoZSBuYW1lIGNoYW5nZXMgd2hlbmV2ZXIgdGhlIGJ5dGVzIGRvLlxuICBpdChcImNhY2hlcyBhIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2UgZm9yIGEgeWVhciwgaW1tdXRhYmxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvX25leHQvc3RhdGljL21lZGlhL2xvZ28uM2YyYTFjLnBuZ1wiKTtcbiAgICBleHBlY3QoaGVhZC5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwMCwgaW1tdXRhYmxlXCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gYHdyaXRlSGVhZGAgcmVqZWN0cyBhIGhlYWRlciB2YWx1ZSBvdXRzaWRlIGxhdGluMSB3aXRoIEVSUl9JTlZBTElEX0NIQVIsXG4gIC8vIGFuZCB0aGUgTGFtYmRhIHNpbmsgd3JpdGVzIHRoZSBoZWFkIHRocm91Z2ggaXQuXG4gIGl0KFwiZW5jb2RlcyBhIG5vbi1sYXRpbjEgZmlsZW5hbWUgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCByYXdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgaGVhZCB9ID0gYXdhaXQgcmVxdWVzdChcIi/DvG1sYXV0LeWGmeecny5wbmdcIik7XG4gICAgY29uc3QgZGlzcG9zaXRpb24gPSBoZWFkLmhlYWRlcnNbXCJjb250ZW50LWRpc3Bvc2l0aW9uXCJdO1xuICAgIGV4cGVjdChkaXNwb3NpdGlvbikudG9NYXRjaCgvXmF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiW15cIl0qXCI7IGZpbGVuYW1lXFwqPS8pO1xuICAgIGV4cGVjdChkaXNwb3NpdGlvbikudG9Db250YWluKFxuICAgICAgYGZpbGVuYW1lKj1VVEYtOCcnJHtlbmNvZGVVUklDb21wb25lbnQoXCLDvG1sYXV0LeWGmeecny53ZWJwXCIpfWAsXG4gICAgKTtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHZhbGlkYXRlSGVhZGVyVmFsdWUoXCJDb250ZW50LURpc3Bvc2l0aW9uXCIsIGRpc3Bvc2l0aW9uKSxcbiAgICApLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1xuICAgIFtcInRoZSBleGFjdCB0YWdcIiwgRVRBR10sXG4gICAgW1wiYSB3ZWFrIGZvcm0gb2YgaXRcIiwgYFcvJHtFVEFHfWBdLFxuICAgIFtcImEgbGlzdCBjb250YWluaW5nIGl0XCIsIGBcIm90aGVyXCIsICR7RVRBR31gXSxcbiAgICBbXCJhIHdpbGRjYXJkXCIsIFwiKlwiXSxcbiAgXSkoXCJhbnN3ZXJzIDMwNCB0byBJZi1Ob25lLU1hdGNoIHdpdGggJXNcIiwgYXN5bmMgKF9uYW1lLCBpZk5vbmVNYXRjaCkgPT4ge1xuICAgIGNvbnN0IHsgaGVhZCwgYm9keSB9ID0gYXdhaXQgcmVxdWVzdChcIi9sb2dvLnBuZ1wiLCB7XG4gICAgICBoZWFkZXJzOiB7IFwiaWYtbm9uZS1tYXRjaFwiOiBpZk5vbmVNYXRjaCB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoMzA0KTtcbiAgICBleHBlY3QoaGVhZC5oZWFkZXJzLmV0YWcpLnRvQmUoRVRBRyk7XG4gICAgZXhwZWN0KGhlYWQuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInB1YmxpYywgbWF4LWFnZT02MCwgbXVzdC1yZXZhbGlkYXRlXCIsXG4gICAgKTtcbiAgICBleHBlY3QoYm9keSkudG9CZShcIlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIDIwMCB0byBhbiBJZi1Ob25lLU1hdGNoIHRoYXQgZG9lcyBub3QgbWF0Y2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgaGVhZCB9ID0gYXdhaXQgcmVxdWVzdChcIi9sb2dvLnBuZ1wiLCB7XG4gICAgICBoZWFkZXJzOiB7IFwiaWYtbm9uZS1tYXRjaFwiOiAnXCJvdGhlclwiJyB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgfSk7XG5cbiAgaXQoXCJzZW5kcyB0aGUgaGVhZGVycyBidXQgbm8gYm9keSB0byBIRUFEXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQsIGJvZHkgfSA9IGF3YWl0IHJlcXVlc3QoXCIvbG9nby5wbmdcIiwgeyBtZXRob2Q6IFwiSEVBRFwiIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3QoaGVhZC5oZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl0pLnRvQmUoU3RyaW5nKFBORy5sZW5ndGgpKTtcbiAgICBleHBlY3QoYm9keSkudG9CZShcIlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJSdW50aW1lSW1hZ2VPcHRpbWl6ZXIgc291cmNlc1wiLCAoKSA9PiB7XG4gIC8vIGBuZXh0IHN0YXJ0YCBmZXRjaGVzIGEgcmVtb3RlIHNvdXJjZSBvbmx5IHdoZW4gYHJlbW90ZVBhdHRlcm5zYCBvciBgZG9tYWluc2BcbiAgLy8gYWxsb3cgaXQ7IHRoZSBzdGFnZSdzIGNvbmZpZyBhbGxvd3Mgbm9uZS4gQW55dGhpbmcgZWxzZSB3b3VsZCBtYWtlIHRoZVxuICAvLyBvcHRpbWl6ZXIgYW4gb3BlbiBwcm94eSBpbnRvIHdoYXRldmVyIGl0IGNhbiByZWFjaC5cbiAgaXQuZWFjaChbXG4gICAgW1wiYW5vdGhlciBvcmlnaW5cIiwgXCJodHRwczovL2V2aWwuZXhhbXBsZS50ZXN0L3gucG5nXCJdLFxuICAgIFtcImluc3RhbmNlIG1ldGFkYXRhXCIsIFwiaHR0cDovLzE2OS4yNTQuMTY5LjI1NC9sYXRlc3QvbWV0YS1kYXRhL1wiXSxcbiAgICBbXCJhIHByb3RvY29sLXJlbGF0aXZlIHVybFwiLCBcIi8vZXZpbC5leGFtcGxlLnRlc3QveC5wbmdcIl0sXG4gIF0pKFwicmVqZWN0cyBhIHJlbW90ZSBzb3VyY2UgdGhhdCBpcyBub3QgYWxsb3dlZDogJXNcIiwgYXN5bmMgKF9uYW1lLCBzcmMpID0+IHtcbiAgICBjb25zdCB7IGhlYWQsIGJvZHkgfSA9IGF3YWl0IHJlcXVlc3Qoc3JjKTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDQwMCk7XG4gICAgZXhwZWN0KGJvZHkpLnRvTWF0Y2goL1widXJsXCIgcGFyYW1ldGVyLyk7XG4gICAgZXhwZWN0KGltYWdlT3B0aW1pemVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBmdW5jdGlvbiB3aXRoUzNNaXNzKFxuICAgIGZldGNoSW50ZXJuYWw/OiBJbWFnZU9wdGltaXplck9wdGlvbnNbXCJmZXRjaEludGVybmFsXCJdLFxuICApOiBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIge1xuICAgIHJldHVybiBvcHRpbWl6ZXJGb3Ioe1xuICAgICAgZmV0Y2hJbnRlcm5hbCxcbiAgICAgIHMzOiB7XG4gICAgICAgIHNlbmQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIm1pc3NpbmdcIiksIHsgbmFtZTogXCJOb1N1Y2hLZXlcIiB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBTM0NsaWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIGl0KFwiZmFsbHMgYmFjayB0byB0aGUgYXBwJ3Mgcm91dGVzIGZvciBhIHNvdXJjZSBTMyBoYXMgbm8gZmlsZSBmb3JcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZldGNoSW50ZXJuYWwgPSBqZXN0LmZuKGFzeW5jICgpID0+ICh7XG4gICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcInB1YmxpYywgbWF4LWFnZT0xMjBcIixcbiAgICAgIH0sXG4gICAgICBib2R5OiBCdWZmZXIuZnJvbShcInJvdXRlLWJ5dGVzXCIpLFxuICAgIH0pKTtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvYXBpL2F2YXRhcj9pZD00MlwiLCB7XG4gICAgICB2aWE6IHdpdGhTM01pc3MoZmV0Y2hJbnRlcm5hbCksXG4gICAgfSk7XG4gICAgZXhwZWN0KGhlYWQuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChmZXRjaEludGVybmFsKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwiL2FwaS9hdmF0YXI/aWQ9NDJcIixcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgaW1hZ2VDb25maWdEZWZhdWx0Lm1heGltdW1SZXNwb25zZUJvZHksXG4gICAgKTtcbiAgICBleHBlY3QoKGltYWdlT3B0aW1pemVyIGFzIGplc3QuTW9jaykubW9jay5sYXN0Q2FsbFswXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICBidWZmZXI6IEJ1ZmZlci5mcm9tKFwicm91dGUtYnl0ZXNcIiksXG4gICAgICBjb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIGNhY2hlQ29udHJvbDogXCJwdWJsaWMsIG1heC1hZ2U9MTIwXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGBuZXh0IHN0YXJ0YCBwYXNzZXMgb24gdGhlIGZpbGUncyBvd24gaGVhZGVyLCB3aGljaCBzZXRzIGhvdyBsb25nIHRoZVxuICAvLyBvcHRpbWl6ZWQgaW1hZ2UgaXMga2VwdC5cbiAgaXQoXCJoYW5kcyB0aGUgb3B0aW1pemVyIHRoZSBTMyBvYmplY3QncyBDYWNoZS1Db250cm9sXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZW5kID0gamVzdC5mbihhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIEJ1ZmZlci5mcm9tKFwiczMtYnl0ZXNcIik7XG4gICAgICB9KSgpLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBDYWNoZUNvbnRyb2w6IFwicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwLCBpbW11dGFibGVcIixcbiAgICAgIEVUYWc6ICdcImFiY1wiJyxcbiAgICB9KSk7XG4gICAgY29uc3QgeyBoZWFkIH0gPSBhd2FpdCByZXF1ZXN0KFwiL19uZXh0L3N0YXRpYy9tZWRpYS9sb2dvLnBuZ1wiLCB7XG4gICAgICB2aWE6IG9wdGltaXplckZvcih7IHMzOiB7IHNlbmQgfSBhcyB1bmtub3duIGFzIFMzQ2xpZW50IH0pLFxuICAgIH0pO1xuICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBleHBlY3QoKGltYWdlT3B0aW1pemVyIGFzIGplc3QuTW9jaykubW9jay5sYXN0Q2FsbFswXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICBidWZmZXI6IEJ1ZmZlci5mcm9tKFwiczMtYnl0ZXNcIiksXG4gICAgICBjYWNoZUNvbnRyb2w6IFwicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwLCBpbW11dGFibGVcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2A6IHRoZSBmaWxlIGlzIG9uIGRpc2ssIGFuZCBhIEdldE9iamVjdCBmb3IgaXQgaXNcbiAgLy8gYSB3YXN0ZWQgcm91bmQgdHJpcC5cbiAgaXQoXCJnb2VzIHN0cmFpZ2h0IHRvIHRoZSBhcHAncyByb3V0ZXMgd2hlbiB0aGVyZSBpcyBubyBidWNrZXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlbmQgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgZmV0Y2hJbnRlcm5hbCA9IGplc3QuZm4oYXN5bmMgKCkgPT4gKHtcbiAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJpbWFnZS9wbmdcIiB9LFxuICAgICAgYm9keTogQnVmZmVyLmZyb20oXCJkaXNrLWJ5dGVzXCIpLFxuICAgIH0pKTtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvbG9nby5wbmdcIiwge1xuICAgICAgdmlhOiBvcHRpbWl6ZXJGb3Ioe1xuICAgICAgICBidWNrZXQ6IFwiXCIsXG4gICAgICAgIGZldGNoSW50ZXJuYWwsXG4gICAgICAgIHMzOiB7IHNlbmQgfSBhcyB1bmtub3duIGFzIFMzQ2xpZW50LFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgZXhwZWN0KGhlYWQuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChmZXRjaEludGVybmFsKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwiL2xvZ28ucG5nXCIsXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGltYWdlQ29uZmlnRGVmYXVsdC5tYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyA0MDAgd2hlbiB0aGUgcm91dGUgc2VuZHMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBoZWFkIH0gPSBhd2FpdCByZXF1ZXN0KFwiL2FwaS9hdmF0YXI/aWQ9NDJcIiwge1xuICAgICAgdmlhOiB3aXRoUzNNaXNzKGFzeW5jICgpID0+ICh7XG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGJvZHk6IEJ1ZmZlci5hbGxvYygwKSxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDQwMCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhbiBleHBsaWNpdCA1MDIgZm9yIGEgc291cmNlIHNlcnZlZCBieSBhbm90aGVyIGZ1bmN0aW9uR3JvdXBzIGdyb3VwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGhlYWQsIGJvZHkgfSA9IGF3YWl0IHJlcXVlc3QoXCIvYXBpL2F2YXRhcj9pZD00MlwiLCB7XG4gICAgICAgIHZpYTogd2l0aFMzTWlzcyhhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHN0YXR1c0NvZGU6IDAsXG4gICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgYm9keTogQnVmZmVyLmFsbG9jKDApLFxuICAgICAgICAgIG90aGVyR3JvdXA6IFwiYXZhdGFyc1wiLFxuICAgICAgICB9KSksXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChoZWFkLnN0YXR1c0NvZGUpLnRvQmUoNTAyKTtcbiAgICAgIGV4cGVjdChib2R5KS50b01hdGNoKC9hbm90aGVyIGZ1bmN0aW9uR3JvdXBzIGdyb3VwLyk7XG4gICAgICBleHBlY3QoaW1hZ2VPcHRpbWl6ZXIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWxcbiAgLy8gc291cmNlcyB0b286IHBhc3QgaXQsIHRoZSBzb3VyY2UgaXMgbm90IHJlYWQgaW50byBtZW1vcnkuXG4gIGl0KFwiYW5zd2VycyA0MTMgZm9yIGEgcm91dGUgcmVzcG9uc2Ugb3ZlciBtYXhpbXVtUmVzcG9uc2VCb2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGhlYWQgfSA9IGF3YWl0IHJlcXVlc3QoXCIvYXBpL2V4cG9ydFwiLCB7XG4gICAgICB2aWE6IHdpdGhTM01pc3MoYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGJvZHk6IEJ1ZmZlci5hbGxvYygwKSxcbiAgICAgICAgdG9vTGFyZ2U6IHRydWUsXG4gICAgICB9KSksXG4gICAgfSk7XG4gICAgZXhwZWN0KGhlYWQuc3RhdHVzQ29kZSkudG9CZSg0MTMpO1xuICAgIGV4cGVjdChpbWFnZU9wdGltaXplcikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIDQxMyBmb3IgYW4gUzMgb2JqZWN0IG92ZXIgbWF4aW11bVJlc3BvbnNlQm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBoZWFkIH0gPSBhd2FpdCByZXF1ZXN0KFwiL3ZpZGVvLm1wNFwiLCB7XG4gICAgICB2aWE6IG9wdGltaXplckZvcih7XG4gICAgICAgIGltYWdlczogeyBtYXhpbXVtUmVzcG9uc2VCb2R5OiAxMCB9LFxuICAgICAgICBzMzoge1xuICAgICAgICAgIHNlbmQ6IGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICBCb2R5OiBbQnVmZmVyLmZyb20oXCJuZXZlciByZWFkXCIpXSxcbiAgICAgICAgICAgIENvbnRlbnRMZW5ndGg6IDExLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgUzNDbGllbnQsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICBleHBlY3QoaGVhZC5zdGF0dXNDb2RlKS50b0JlKDQxMyk7XG4gICAgZXhwZWN0KGltYWdlT3B0aW1pemVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlJ1bnRpbWVJbWFnZU9wdGltaXplciBjYWNoZVwiLCAoKSA9PiB7XG4gIGl0KFwib3B0aW1pemVzIG9uY2UsIHRoZW4gYW5zd2VycyBmcm9tIHRoZSBjYWNoZSBoYW5kbGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB2aWEgPSBvcHRpbWl6ZXJGb3IoKTtcbiAgICBjb25zdCBmaXJzdCA9IGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL2NhY2hlZC5wbmdcIiwgeyB2aWEgfSk7XG4gICAgZXhwZWN0KGZpcnN0LmhlYWQuaGVhZGVyc1tcIngtbmV4dGpzLWNhY2hlXCJdKS50b0JlKFwiTUlTU1wiKTtcbiAgICBleHBlY3QoZmlyc3QuYm9keSkudG9CZShQTkcudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCByZXF1ZXN0KFwiL3Bob3Rvcy9jYWNoZWQucG5nXCIsIHsgdmlhIH0pO1xuICAgIGV4cGVjdChzZWNvbmQuaGVhZC5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNlY29uZC5oZWFkLmhlYWRlcnNbXCJ4LW5leHRqcy1jYWNoZVwiXSkudG9CZShcIkhJVFwiKTtcbiAgICBleHBlY3Qoc2Vjb25kLmJvZHkpLnRvQmUoUE5HLnRvU3RyaW5nKCkpO1xuICAgIGV4cGVjdChzZWNvbmQuaGVhZC5oZWFkZXJzLmV0YWcpLnRvQmUoRVRBRyk7XG4gICAgZXhwZWN0KGltYWdlT3B0aW1pemVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICAvLyBUaGUgZW50cnkgYG5leHQgc3RhcnRgIHdvdWxkIGhhdmUgd3JpdHRlbi5cbiAgICBjb25zdCBbZW50cnldID0gWy4uLk1hcENhY2hlSGFuZGxlci5lbnRyaWVzLnZhbHVlcygpXSBhcyBBcnJheTx7XG4gICAgICB2YWx1ZTogeyBraW5kOiBzdHJpbmc7IGV4dGVuc2lvbjogc3RyaW5nIH07XG4gICAgfT47XG4gICAgZXhwZWN0KGVudHJ5LnZhbHVlKS50b01hdGNoT2JqZWN0KHsga2luZDogXCJJTUFHRVwiLCBleHRlbnNpb246IFwid2VicFwiIH0pO1xuICB9KTtcblxuICAvLyBBbm90aGVyIGluc3RhbmNlOiBub3RoaW5nIGluIG1lbW9yeSwgc28gdGhlIGhpdCBpcyB0aGUgY2FjaGUgaGFuZGxlcidzLlxuICBpdChcInNoYXJlcyB0aGUgb3B0aW1pemVkIGltYWdlIGFjcm9zcyBpbnN0YW5jZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL3NoYXJlZC5wbmdcIiwgeyB2aWE6IG9wdGltaXplckZvcigpIH0pO1xuICAgIGNvbnN0IG90aGVyID0gYXdhaXQgcmVxdWVzdChcIi9waG90b3Mvc2hhcmVkLnBuZ1wiLCB7IHZpYTogb3B0aW1pemVyRm9yKCkgfSk7XG4gICAgZXhwZWN0KG90aGVyLmhlYWQuaGVhZGVyc1tcIngtbmV4dGpzLWNhY2hlXCJdKS50b0JlKFwiSElUXCIpO1xuICAgIGV4cGVjdChpbWFnZU9wdGltaXplcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICAvLyBUaGUgbWFuaWZlc3QgbmFtZXMgaXQgcmVsYXRpdmUgdG8gdGhlIGRpc3QgZGlyLlxuICBpdChcImxvYWRzIHRoZSBhcHAncyBjYWNoZUhhbmRsZXIgZnJvbSB3aGVyZSBuZXh0IHN0YXJ0IHdvdWxkXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByZXF1ZXN0KFwiL3Bob3Rvcy9jYWNoZWQucG5nXCIsIHsgdmlhOiBvcHRpbWl6ZXJGb3IoKSB9KTtcbiAgICBleHBlY3QoaW1wb3J0ZWQpLnRvTWF0Y2goXG4gICAgICAvXmZpbGU6XFwvXFwvLipcXC9ub2RlX21vZHVsZXNcXC9jZGstbmV4dGpzXFwvbGliXFwvYWRhcHRlclxcL2NhY2hlLWhhbmRsZXJcXC5tanMkLyxcbiAgICApO1xuICAgIGV4cGVjdChNYXBDYWNoZUhhbmRsZXIub3B0aW9ucykudG9NYXRjaE9iamVjdCh7IGRldjogZmFsc2UgfSk7XG4gIH0pO1xuXG4gIC8vIEEgdHJhbnNpZW50IGZhaWx1cmUgbG9hZGluZyB0aGUgY2FjaGVIYW5kbGVyIChFTUZJTEUgaW4gYSBjb2xkLXN0YXJ0XG4gIC8vIGJ1cnN0KSBtdXN0IG5vdCBmYWlsIGV2ZXJ5IGxhdGVyIGltYWdlIHJlcXVlc3Qgb24gdGhlIGluc3RhbmNlLlxuICBpdChcInJldHJpZXMgbG9hZGluZyB0aGUgY2FjaGVIYW5kbGVyIGFmdGVyIGEgZmFpbGVkIGxvYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltcG9ydE1vZHVsZSA9IGplc3RcbiAgICAgICAgLmZuKClcbiAgICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJFTUZJTEVcIikpXG4gICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZSh7IGRlZmF1bHQ6IE1hcENhY2hlSGFuZGxlciB9KTtcbiAgICAgIGNvbnN0IHZpYSA9IG9wdGltaXplckZvcih7IGltcG9ydE1vZHVsZSB9KTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgKGF3YWl0IHJlcXVlc3QoXCIvcGhvdG9zL3JldHJ5LnBuZ1wiLCB7IHZpYSB9KSkuaGVhZC5zdGF0dXNDb2RlLFxuICAgICAgKS50b0JlKDUwMCk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIChhd2FpdCByZXF1ZXN0KFwiL3Bob3Rvcy9yZXRyeS5wbmdcIiwgeyB2aWEgfSkpLmhlYWQuc3RhdHVzQ29kZSxcbiAgICAgICkudG9CZSgyMDApO1xuICAgICAgZXhwZWN0KGltcG9ydE1vZHVsZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVGhlIHdyaXRlIG9mIGEgZnJlc2ggaW1hZ2UgZ29lcyB0byBgd2FpdFVudGlsYCwgbm90IGluIGZyb250IG9mIHRoZVxuICAvLyByZXNwb25zZTogdGhlIGltYWdlIGlzIHNlbnQgYmVmb3JlIHRoZSBjYWNoZSBoYW5kbGVyIGhhcyBpdC5cbiAgaXQoXCJ3cml0ZXMgYSBtaXNzIHRvIHRoZSBjYWNoZSBhZnRlciBhbnN3ZXJpbmcsIHRocm91Z2ggd2FpdFVudGlsXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBBIHdyaXRlIHRoYXQgY2FuJ3QgZmluaXNoIHVudGlsIHJlbGVhc2VkOiBpZiB0aGUgcmVzcG9uc2Ugd2FpdGVkIG9uIGl0LFxuICAgIC8vIGByZXF1ZXN0YCB3b3VsZCBuZXZlciByZXR1cm4uXG4gICAgbGV0IHJlbGVhc2UhOiAoKSA9PiB2b2lkO1xuICAgIGNvbnN0IGdhdGUgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgY29uc3Qgc2V0ID0gTWFwQ2FjaGVIYW5kbGVyLnByb3RvdHlwZS5zZXQ7XG4gICAgTWFwQ2FjaGVIYW5kbGVyLnByb3RvdHlwZS5zZXQgPSBhc3luYyBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgYXdhaXQgZ2F0ZTtcbiAgICAgIHJldHVybiBzZXQuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZW5kaW5nOiBBcnJheTxQcm9taXNlPHVua25vd24+PiA9IFtdO1xuICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCByZXF1ZXN0KFwiL3Bob3Rvcy9kZWZlcnJlZC5wbmdcIiwge1xuICAgICAgICB2aWE6IG9wdGltaXplckZvcigpLFxuICAgICAgICB3YWl0VW50aWw6IChwcm9taXNlKSA9PiBwZW5kaW5nLnB1c2gocHJvbWlzZSksXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChmaXJzdC5oZWFkLmhlYWRlcnNbXCJ4LW5leHRqcy1jYWNoZVwiXSkudG9CZShcIk1JU1NcIik7XG4gICAgICBleHBlY3QoTWFwQ2FjaGVIYW5kbGVyLmVudHJpZXMuc2l6ZSkudG9CZSgwKTtcblxuICAgICAgcmVsZWFzZSgpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGVuZGluZyk7XG4gICAgICBleHBlY3QoTWFwQ2FjaGVIYW5kbGVyLmVudHJpZXMuc2l6ZSkudG9CZSgxKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgTWFwQ2FjaGVIYW5kbGVyLnByb3RvdHlwZS5zZXQgPSBzZXQ7XG4gICAgfVxuICB9KTtcbn0pO1xuIl19
@@ -37033,7 +37033,7 @@ var require_package = __commonJS({
37033
37033
  publishConfig: {
37034
37034
  access: "public"
37035
37035
  },
37036
- version: "0.7.11",
37036
+ version: "0.7.12",
37037
37037
  packageManager: "pnpm@10.32.1",
37038
37038
  jest: {
37039
37039
  coverageProvider: "v8",
@@ -38310,6 +38310,7 @@ async function fetchFromS3(s32, bucket, url, location, maximumBody) {
38310
38310
  return {
38311
38311
  buffer: Buffer.concat(chunks),
38312
38312
  contentType: response.ContentType || null,
38313
+ cacheControl: response.CacheControl || null,
38313
38314
  etag: response.ETag || ""
38314
38315
  };
38315
38316
  }
@@ -38561,7 +38562,10 @@ var RuntimeImageOptimizer = class {
38561
38562
  return {
38562
38563
  buffer: result.buffer,
38563
38564
  contentType: result.contentType,
38564
- cacheControl: null,
38565
+ // The object's own, as `fetchInternalImage` passes on the file's
38566
+ // `Cache-Control`: the optimizer keeps the result for its max-age, a
38567
+ // year for an immutable `_next/static/media` file.
38568
+ cacheControl: result.cacheControl,
38565
38569
  // Encoded as for a route's response: `fetchInternalImage` does too.
38566
38570
  etag: extractEtag(result.etag, result.buffer)
38567
38571
  };
@@ -37033,7 +37033,7 @@ var require_package = __commonJS({
37033
37033
  publishConfig: {
37034
37034
  access: "public"
37035
37035
  },
37036
- version: "0.7.11",
37036
+ version: "0.7.12",
37037
37037
  packageManager: "pnpm@10.32.1",
37038
37038
  jest: {
37039
37039
  coverageProvider: "v8",
@@ -38310,6 +38310,7 @@ async function fetchFromS3(s32, bucket, url, location, maximumBody) {
38310
38310
  return {
38311
38311
  buffer: Buffer.concat(chunks),
38312
38312
  contentType: response.ContentType || null,
38313
+ cacheControl: response.CacheControl || null,
38313
38314
  etag: response.ETag || ""
38314
38315
  };
38315
38316
  }
@@ -38561,7 +38562,10 @@ var RuntimeImageOptimizer = class {
38561
38562
  return {
38562
38563
  buffer: result.buffer,
38563
38564
  contentType: result.contentType,
38564
- cacheControl: null,
38565
+ // The object's own, as `fetchInternalImage` passes on the file's
38566
+ // `Cache-Control`: the optimizer keeps the result for its max-age, a
38567
+ // year for an immutable `_next/static/media` file.
38568
+ cacheControl: result.cacheControl,
38565
38569
  // Encoded as for a route's response: `fetchInternalImage` does too.
38566
38570
  etag: extractEtag(result.etag, result.buffer)
38567
38571
  };
package/package.json CHANGED
@@ -84,7 +84,7 @@
84
84
  "publishConfig": {
85
85
  "access": "public"
86
86
  },
87
- "version": "0.7.11",
87
+ "version": "0.7.12",
88
88
  "jest": {
89
89
  "coverageProvider": "v8",
90
90
  "testPathIgnorePatterns": [