@pipeline-builder/pipeline-data 3.4.131 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,11 +5,12 @@
5
5
  *
6
6
  * Background: postgres-init.sql installs RLS policies on every user-data
7
7
  * table that consult two session GUCs — `app.org_id` and `app.is_sysadmin`.
8
- * Today the tables are in owner-bypass mode (the connection user owns them,
9
- * Postgres lets owners skip RLS), so the policies don't actually enforce.
10
- * Once we flip a table to `FORCE ROW LEVEL SECURITY`, every query against
11
- * it must run inside a transaction that has SET LOCAL'd both GUCs or it
12
- * returns zero rows for non-sysadmins (and may fail to write for any caller).
8
+ * Most user-data tables have been flipped to `FORCE ROW LEVEL SECURITY`, so
9
+ * the policies DO enforce even for the (owning) connection user — a query
10
+ * against a FORCE'd table must run inside a transaction that has SET LOCAL'd
11
+ * both GUCs or it returns zero rows for non-sysadmins (and may fail to write
12
+ * for any caller). A few tables remain `ENABLE`-only (owner-bypass) pending
13
+ * their soak; the same context plumbing covers both.
13
14
  *
14
15
  * This module is the seam.
15
16
  *
@@ -142,19 +143,25 @@ export async function withTenantTx(fn) {
142
143
  const isSuperAdmin = ctx?.isSuperAdmin ? 'true' : 'false';
143
144
  const statementTimeoutMs = getStatementTimeoutMs();
144
145
  return db.transaction(async (tx) => {
145
- // SET LOCAL via set_config() so the values are transaction-scoped (auto-
146
- // released on COMMIT/ROLLBACK). The driver binds the values as parameters,
147
- // so a hostile org_id can't break out of the GUC syntax.
148
- await tx.execute(sql `SELECT set_config('app.org_id', ${orgId}, true)`);
149
- await tx.execute(sql `SELECT set_config('app.is_sysadmin', ${isSuperAdmin}, true)`);
150
- // Server-side statement timeout on the REAL query path (transaction-scoped,
151
- // same set_config(is_local=true) mechanism as the RLS GUCs). `SET LOCAL
152
- // statement_timeout = $1` is rejected by Postgres, so set_config with a bound
153
- // value is used. A bare number is milliseconds. Skipped when disabled (0).
146
+ // Set every transaction-scoped GUC in a SINGLE round-trip. `set_config()`
147
+ // returns its value, so multiple calls compose in one SELECT — previously
148
+ // these were 2–3 separate `tx.execute()` round-trips PER read, each a
149
+ // network hop that taxes the shared PgBouncer pool on the hot path. `true`
150
+ // = is_local (SET LOCAL semantics: auto-released on COMMIT/ROLLBACK). The
151
+ // driver binds the values as parameters, so a hostile org_id can't break out
152
+ // of the GUC syntax.
153
+ //
154
+ // The statement_timeout GUC bounds a runaway query so it can't hold a pooled
155
+ // connection open indefinitely (`SET LOCAL statement_timeout = $1` is rejected
156
+ // by Postgres, hence set_config with a bound ms value). Included in the same
157
+ // statement when enabled (>0), dropped entirely when disabled (0).
154
158
  if (statementTimeoutMs > 0) {
155
- await tx.execute(sql `SELECT set_config('statement_timeout', ${String(statementTimeoutMs)}, true)`);
159
+ await tx.execute(sql `SELECT set_config('app.org_id', ${orgId}, true), set_config('app.is_sysadmin', ${isSuperAdmin}, true), set_config('statement_timeout', ${String(statementTimeoutMs)}, true)`);
160
+ }
161
+ else {
162
+ await tx.execute(sql `SELECT set_config('app.org_id', ${orgId}, true), set_config('app.is_sysadmin', ${isSuperAdmin}, true)`);
156
163
  }
157
164
  return fn(tx);
158
165
  });
159
166
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS90ZW5hbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBZTlDLFNBQVMsY0FBYztJQUNyQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hELElBQUksR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxRQUFRO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDdkUsdUVBQXVFO0lBQ3ZFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHFCQUFxQjtJQUM1QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hELENBQUM7QUFlRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksaUJBQWlCLEVBQWlCLENBQUM7QUFFcEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUksR0FBa0IsRUFBRSxFQUFXO0lBQ3JFLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzBFQUMwRTtBQUMxRSxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsNEVBQTRFO2NBQzFFLHdFQUF3RSxDQUMzRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxFQUEyRTtJQUUzRSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1Qsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLG1FQUFtRTtRQUNuRSw2QkFBNkI7UUFDN0IsTUFBTSxJQUFJLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUU7a0JBQ3JFLHdFQUF3RTtrQkFDeEUsK0NBQStDLENBQ2xELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsc0VBQXNFO1lBQ3RFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUU7Z0JBQ2hGLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUs7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMvQixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUUxRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLENBQUM7SUFFbkQsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNqQyx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLHlEQUF5RDtRQUN6RCxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBLG1DQUFtQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUEsd0NBQXdDLFlBQVksU0FBUyxDQUFDLENBQUM7UUFDbkYsNEVBQTRFO1FBQzVFLHdFQUF3RTtRQUN4RSw4RUFBOEU7UUFDOUUsMkVBQTJFO1FBQzNFLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQSwwQ0FBMEMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUZW5hbnQtY29udGV4dCBwbHVtYmluZyBmb3IgUG9zdGdyZXMgcm93LWxldmVsIHNlY3VyaXR5LlxuICpcbiAqIEJhY2tncm91bmQ6IHBvc3RncmVzLWluaXQuc3FsIGluc3RhbGxzIFJMUyBwb2xpY2llcyBvbiBldmVyeSB1c2VyLWRhdGFcbiAqIHRhYmxlIHRoYXQgY29uc3VsdCB0d28gc2Vzc2lvbiBHVUNzIOKAlCBgYXBwLm9yZ19pZGAgYW5kIGBhcHAuaXNfc3lzYWRtaW5gLlxuICogVG9kYXkgdGhlIHRhYmxlcyBhcmUgaW4gb3duZXItYnlwYXNzIG1vZGUgKHRoZSBjb25uZWN0aW9uIHVzZXIgb3ducyB0aGVtLFxuICogUG9zdGdyZXMgbGV0cyBvd25lcnMgc2tpcCBSTFMpLCBzbyB0aGUgcG9saWNpZXMgZG9uJ3QgYWN0dWFsbHkgZW5mb3JjZS5cbiAqIE9uY2Ugd2UgZmxpcCBhIHRhYmxlIHRvIGBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFlgLCBldmVyeSBxdWVyeSBhZ2FpbnN0XG4gKiBpdCBtdXN0IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiB0aGF0IGhhcyBTRVQgTE9DQUwnZCBib3RoIEdVQ3Mg4oCUIG9yIGl0XG4gKiByZXR1cm5zIHplcm8gcm93cyBmb3Igbm9uLXN5c2FkbWlucyAoYW5kIG1heSBmYWlsIHRvIHdyaXRlIGZvciBhbnkgY2FsbGVyKS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyB0aGUgc2VhbS5cbiAqXG4gKiAgIDEuIGB0ZW5hbnRDb250ZXh0YCAoQXN5bmNMb2NhbFN0b3JhZ2UpIGNhcnJpZXMgYHtvcmdJZCwgaXNTdXBlckFkbWlufWBcbiAqICAgICAgZG93biB0aGUgY2FsbCBjaGFpbiB3aXRob3V0IHByb3AtZHJpbGxpbmcuIFNldCBvbmNlIGF0IHRoZSByZXF1ZXN0XG4gKiAgICAgIGJvdW5kYXJ5OyByZWFkYWJsZSBmcm9tIGFueXdoZXJlLlxuICpcbiAqICAgMi4gYHdpdGhUZW5hbnRUeChmbilgIG9wZW5zIGEgdHJhbnNhY3Rpb24sIFNFVCBMT0NBTCdzIGJvdGggR1VDcyBmcm9tXG4gKiAgICAgIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB0aGVuIGludm9rZXMgYGZuKHR4KWAuIFNlcnZpY2VzIG1pZ3JhdGUgb25lXG4gKiAgICAgIGF0IGEgdGltZSBieSB3cmFwcGluZyB0aGVpciBleGlzdGluZyBkcml6emxlIGNhbGxzIGluIHRoaXMgaGVscGVyIOKAlFxuICogICAgICBgZGIuc2VsZWN0KCkuZnJvbSguLi4pYCBiZWNvbWVzIGB3aXRoVGVuYW50VHgodHggPT4gdHguc2VsZWN0KCkuZnJvbSguLi4pKWAuXG4gKlxuICogICAzLiBgcnVuV2l0aFRlbmFudENvbnRleHQoY3R4LCBmbilgIGlzIHRoZSBFeHByZXNzLW1pZGRsZXdhcmUtc2lkZVxuICogICAgICBib29rZW5kIHRoYXQgZXN0YWJsaXNoZXMgdGhlIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlIGZvciB0aGUgcmVxdWVzdC5cbiAqXG4gKiBNaWdyYXRpb24gb3JkZXIgKHNlZSBkb2NzL3BsYW5zL2YtMS0wLXJscy1lbmZvcmNlbWVudC5tZCk6XG4gKiAgIC0gRmlyc3QgYWRvcHRlcnM6IG5ld2x5LXdyaXR0ZW4gc2VydmljZXMgKGRhc2hib2FyZCwgYWxlcnQtZGVzdGluYXRpb24pXG4gKiAgICAgd2hlcmUgdGhlIGNoYW5nZSBpcyBtZWNoYW5pY2FsLlxuICogICAtIFRoZW4gaGlnaC13cml0ZSBzZXJ2aWNlcyAocGx1Z2luLCBwaXBlbGluZSkuIFNvYWsgZWFjaCBvbmUgYmVmb3JlXG4gKiAgICAgZmxpcHBpbmcgdGhlIHVuZGVybHlpbmcgdGFibGUgdG8gRk9SQ0UuXG4gKiAgIC0gYWRtaW5fYXVkaXRfbG9nIHVzZXMgYSBzeXNhZG1pbi1vbmx5IHBvbGljeSDigJQgc3lzYWRtaW4gcGF0aHMgbXVzdFxuICogICAgIGFsc28gc2V0IGBhcHAuaXNfc3lzYWRtaW4gPSAndHJ1ZSdgIG9yIHRoZXknbGwgbG9zZSBhY2Nlc3MgdG8gaXQuXG4gKi9cblxuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGRiIH0gZnJvbSAnLi9wb3N0Z3Jlcy1jb25uZWN0aW9uLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0ZW5hbnQtY29udGV4dCcpO1xuXG4vKipcbiAqIEJlaGF2aW9yIHdoZW4gYHdpdGhUZW5hbnRUeGAgaXMgaW52b2tlZCBvdXRzaWRlIGFueSBgcnVuV2l0aFRlbmFudENvbnRleHRgXG4gKiBzY29wZS4gVGhlIGVmZmVjdGl2ZSBkZWZhdWx0IGlzIGZhaWwtZmFzdCAoJ3N0cmljdCcpIGluIHByb2R1Y3Rpb24gc28gYVxuICogbWlzc2luZyB0ZW5hbnQgc2NvcGUgc3VyZmFjZXMgYXQgdGhlIGJhZCBjYWxsIHNpdGUgaW5zdGVhZCBvZiBzaWxlbnRseVxuICogcnVubmluZyB3aXRoIGVtcHR5IFJMUyBHVUNzOyBvdXRzaWRlIHByb2R1Y3Rpb24gaXQgZGVmYXVsdHMgdG8gJ3dhcm4nIHNvXG4gKiB1bi1hdWRpdGVkIGRldi90ZXN0IHBhdGhzIGtlZXAgd29ya2luZyBidXQgbG9nIGFuIGFjdGlvbmFibGUgdHJhY2UuIEFuXG4gKiBleHBsaWNpdCBSTFNfQ09OVEVYVF9NT0RFIGVudiBvdmVycmlkZSBhbHdheXMgd2lucy5cbiAqXG4gKiAnc2lsZW50JyBpcyBrZXB0IGZvciB0ZXN0cyBhbmQgc2NyaXB0cyB0aGF0IGludGVudGlvbmFsbHkgZW50ZXIgdGhlIERCXG4gKiB3aXRob3V0IGNvbnRleHQgKGUuZy4gaW50ZWdyYXRpb24gdGVzdCBzZXR1cCB0aGF0IHJ1bnMgYXMgdGhlIGNvbm5lY3Rpb25cbiAqIG93bmVyIGJlZm9yZSBhbnkgdGVuYW50IGlzIHByb3Zpc2lvbmVkKS5cbiAqL1xudHlwZSBDb250ZXh0TW9kZSA9ICdzaWxlbnQnIHwgJ3dhcm4nIHwgJ3N0cmljdCc7XG5mdW5jdGlvbiBnZXRDb250ZXh0TW9kZSgpOiBDb250ZXh0TW9kZSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LlJMU19DT05URVhUX01PREU/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYXcgPT09ICdzaWxlbnQnIHx8IHJhdyA9PT0gJ3dhcm4nIHx8IHJhdyA9PT0gJ3N0cmljdCcpIHJldHVybiByYXc7XG4gIC8vIE5vIGV4cGxpY2l0IG92ZXJyaWRlOiBmYWlsLWZhc3QgaW4gcHJvZHVjdGlvbiwgd2FybiBldmVyeXdoZXJlIGVsc2UuXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gJ3N0cmljdCcgOiAnd2Fybic7XG59XG5cbi8qKlxuICogUGVyLXN0YXRlbWVudCBzZXJ2ZXItc2lkZSB0aW1lb3V0IChtcykgYXBwbGllZCBJTlNJREUgZXZlcnkgYHdpdGhUZW5hbnRUeGBcbiAqIHRyYW5zYWN0aW9uLCBuZXh0IHRvIHRoZSBSTFMgR1VDcy4gYHdpdGhUZW5hbnRUeGAgaXMgdGhlIHJlYWwgcXVlcnkgcGF0aCBmb3JcbiAqIGFsbCBSTFMvQ1JVRCByZWFkcyBhbmQgd3JpdGVzLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBEQi1zaWRlIGd1YXJkIGJlbG9uZ3MgKHRoZVxuICogb2xkIGBDb25uZWN0aW9uLnRyYW5zYWN0aW9uYCB3cmFwcGVyIHRoYXQgc2V0IGl0IGlzIGRlYWQg4oCUIHNlZVxuICogcG9zdGdyZXMtY29ubmVjdGlvbi50cykuIEJvdW5kcyBhIHJ1bmF3YXkgcXVlcnkgc28gaXQgY2FuJ3QgaG9sZCBhIHBvb2xlZFxuICogY29ubmVjdGlvbiBvcGVuIGluZGVmaW5pdGVseS4gRW52LWNvbmZpZ3VyYWJsZSB2aWEgYERCX1NUQVRFTUVOVF9USU1FT1VUX01TYFxuICogKGRlZmF1bHQgMzBzKTsgc2V0IHRvIGAwYCB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LlxuICovXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfU1RBVEVNRU5UX1RJTUVPVVRfTVMgPz8gJycsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShyYXcpICYmIHJhdyA+PSAwID8gcmF3IDogMzAwMDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q29udGV4dCB7XG4gIC8qKiBDYWxsZXIncyBvcmcuIFVuZGVmaW5lZCBmb3IgdW4tYXV0aGVudGljYXRlZCAvIHN5c3RlbSBqb2JzLiAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgY2FsbGVyIGlzIGEgc3lzYWRtaW4gKHN5c3RlbS1vcmcgYWRtaW4pLiBCeXBhc3NlcyBSTFNcbiAgICogIHBvbGljaWVzIHZpYSB0aGUgc3lzYWRtaW4tYnlwYXNzIGJyYW5jaCBpbiBgY3VycmVudF9pc19zeXNhZG1pbigpYC4gKi9cbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xuICAvKiogT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeTogdGhlIGNhbGxlcidzIGFjdGl2ZS1vcmcgcGFyZW50IChwcmVzZW50IG9ubHkgd2hlbiB0aGVcbiAgICogIGFjdGl2ZSBvcmcgaXMgYSB0ZWFtKS4gTm90IHVzZWQgZm9yIFJMUzsgY2FycmllZCBzbyBkb3duc3RyZWFtIHNpZGUtZWZmZWN0c1xuICAgKiAgKGUuZy4gZW50aXR5LWV2ZW50IGNvbXBsaWFuY2UgZXZhbCkgY2FuIGhvbm9yIHBhcmVudCBgcHJvcGFnYXRlVG9DaGlsZHJlbmBcbiAgICogIHJ1bGVzIHdpdGhvdXQgYSByZXF1ZXN0IGluIHNjb3BlLiAqL1xuICBwYXJlbnRPcmdJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItcmVxdWVzdCB0ZW5hbnQgY29udGV4dC4gUG9wdWxhdGVkIGJ5IEV4cHJlc3MgbWlkZGxld2FyZSBvbmNlIHRoZSBKV1RcbiAqIGlzIHZhbGlkYXRlZDsgY29uc3VtZWQgYnkgYHdpdGhUZW5hbnRUeGAgYW5kIGFueSBoZWxwZXIgdGhhdCBuZWVkcyB0b1xuICoga25vdyBcIndobyBpcyB0aGUgY2FsbGVyXCIgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbmFudENvbnRleHQgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8VGVuYW50Q29udGV4dD4oKTtcblxuLyoqXG4gKiBSdW4gYGZuYCBpbnNpZGUgdGhlIGdpdmVuIHRlbmFudCBzY29wZS4gVGhlIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlXG4gKiBzdXJ2aXZlcyBhY3Jvc3MgYXN5bmMgYm91bmRhcmllcyAoUHJvbWlzZXMsIHNldFRpbWVvdXQsIGV0Yy4pLCBzbyBhbnlcbiAqIGB3aXRoVGVuYW50VHhgIGNhbGwgaW5zaWRlIGBmbmAg4oCUIGRpcmVjdGx5IG9yIHRocm91Z2ggYW55IGRlcHRoIG9mXG4gKiBhc3luYyBoZWxwZXJzIOKAlCBwaWNrcyB1cCBgY3R4YC5cbiAqXG4gKiBXcmFwIGBuZXh0KClgIGZyb20gYW4gRXhwcmVzcyBtaWRkbGV3YXJlIHRvIGVzdGFibGlzaCBwZXItcmVxdWVzdCBzY29wZTpcbiAqXG4gKiAgICAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcbiAqICAgICAgIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAoKSA9PiBuZXh0KCkpO1xuICogICAgIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aFRlbmFudENvbnRleHQ8VD4oY3R4OiBUZW5hbnRDb250ZXh0LCBmbjogKCkgPT4gVCk6IFQge1xuICByZXR1cm4gdGVuYW50Q29udGV4dC5ydW4oY3R4LCBmbik7XG59XG5cbi8qKiBSZWFkIHRoZSBjdXJyZW50IHRlbmFudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdXRzaWRlIGFuXG4gKiAgYHJ1bldpdGhUZW5hbnRDb250ZXh0YCBzY29wZSAoZS5nLiBiYWNrZ3JvdW5kIHdvcmtlcnMsIG1pZ3JhdGlvbnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbmFudENvbnRleHQoKTogVGVuYW50Q29udGV4dCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIGN1cnJlbnQgY29kZSBpcyBydW5uaW5nIGluc2lkZSBhIHRlbmFudCBzY29wZS4gQ2FsbGVyc1xuICogdGhhdCBsZWdpdGltYXRlbHkgbmVlZCB0byByZWZ1c2UgdG8gb3BlcmF0ZSB3aXRob3V0IG9uZSAoZS5nLiBoYW5kbGVyc1xuICogdGhhdCB0b3VjaCBGT1JDRSdkIFJMUyB0YWJsZXMpIGNhbiB1c2UgdGhpcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlXG4gKiBkb3duc3RyZWFtIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB0byBzdXJmYWNlIHRoZSBidWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlVGVuYW50Q29udGV4dCgpOiBUZW5hbnRDb250ZXh0IHtcbiAgY29uc3QgY3R4ID0gdGVuYW50Q29udGV4dC5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZXF1aXJlVGVuYW50Q29udGV4dDogbm8gdGVuYW50IHNjb3BlIGFjdGl2ZS4gV3JhcCB5b3VyIGhhbmRsZXIvd29ya2VyIGluICdcbiAgICAgICsgJ3J1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBhbnkgREIgY2FsbC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cblxuLyoqXG4gKiBPcGVuIGEgdHJhbnNhY3Rpb24gd2l0aCBSTFMgR1VDcyBTRVQgTE9DQUwgZnJvbSB0aGUgY3VycmVudFxuICogQXN5bmNMb2NhbFN0b3JhZ2UgdGVuYW50IGNvbnRleHQsIHRoZW4gaW52b2tlIGBmbih0eClgLlxuICpcbiAqIC0gV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHRlbmFudCBzY29wZSAoZS5nLiBmcm9tIGEgYmFja2dyb3VuZCBqb2IgdGhhdFxuICogICBkb2Vzbid0IGhhdmUgYSBjYWxsZXIgaWRlbnRpdHkpLCB0aGUgdHJhbnNhY3Rpb24gaXMgb3BlbmVkIHdpdGggYm90aFxuICogICBHVUNzIGNsZWFyZWQg4oCUIFJMUyBwb2xpY2llcyB3aWxsIHJldHVybiB6ZXJvIHJvd3Mgb24gRk9SQ0UnZCB0YWJsZXMuXG4gKiAgIENhbGxlcnMgdGhhdCBuZWVkIGEgc3lzYWRtaW4tZXF1aXZhbGVudCBzY29wZSBzaG91bGQgd3JhcCB0aGVtc2VsdmVzIGluXG4gKiAgIGBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCDigKYpYCBleHBsaWNpdGx5LlxuICpcbiAqIC0gVXNlcyBgc2V0X2NvbmZpZyhrZXksIHZhbHVlLCB0cnVlKWAgKHRoZSBib29sZWFuID0gYGlzX2xvY2FsYCwgaS5lLlxuICogICB0cmFuc2FjdGlvbi1zY29wZWQpLiBFcXVpdmFsZW50IHRvIGBTRVQgTE9DQUxgIGJ1dCB0YWtlcyB0aGUgdmFsdWUgYXNcbiAqICAgYSBwYXJhbWV0ZXIsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCDigJQgRHJpenpsZSdzIGBzcWxgIHRlbXBsYXRlIGJpbmRzIHRoZVxuICogICB2YWx1ZSBzYWZlbHkgc28gYW4gYXR0YWNrZXItY29udHJvbGxlZCBgb3JnSWRgIGNhbid0IGVzY2FwZSB0aGUgcXVvdGluZy5cbiAqXG4gKiAtIFJldHVybnMgd2hhdGV2ZXIgYGZuYCByZXR1cm5zOyB0aHJvd3Mgd2hhdGV2ZXIgYGZuYCB0aHJvd3MgKERyaXp6bGVcbiAqICAgaGFuZGxlcyB0aGUgQ09NTUlUL1JPTExCQUNLIGZvciB1cykuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVuYW50VHg8VD4oXG4gIGZuOiAodHg6IFBhcmFtZXRlcnM8UGFyYW1ldGVyczx0eXBlb2YgZGIudHJhbnNhY3Rpb24+WzBdPlswXSkgPT4gUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjdHggPSB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG5cbiAgaWYgKCFjdHgpIHtcbiAgICAvLyBTdXJmYWNlIHRoZSBidWcgaW5zdGVhZCBvZiBzaWxlbnRseSBTRVQnaW5nIGVtcHR5IEdVQ3MuIFRoZSBkZWZhdWx0XG4gICAgLy8gbW9kZSAoJ3dhcm4nKSBsb2dzIGFuIGFjdGlvbmFibGUgdHJhY2Ugc28gdGhlIGJhZCBjYWxsIHNpdGUgaXMgZWFzeVxuICAgIC8vIHRvIGZpbmQ7IHByb2R1Y3Rpb24gZGVwbG95bWVudHMgdGhhdCBoYXZlIGZpbmlzaGVkIHRoZSBhdWRpdCBjYW4gc2V0XG4gICAgLy8gUkxTX0NPTlRFWFRfTU9ERT1zdHJpY3QgdG8gZmFpbC1mYXN0IGF0IHRoZSBjYWxsIHNpdGUgKGJldHRlciBzdGFja1xuICAgIC8vIHRyYWNlIHRoYW4gdGhlIFBvc3RncmVzIFwicGVybWlzc2lvbiBkZW5pZWRcIiB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICAgIC8vIHN1cmZhY2UgZnJvbSBGT1JDRSdkIFJMUykuXG4gICAgY29uc3QgbW9kZSA9IGdldENvbnRleHRNb2RlKCk7XG4gICAgaWYgKG1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd3aXRoVGVuYW50VHggY2FsbGVkIG91dHNpZGUgYSB0ZW5hbnQgc2NvcGUuIFdyYXAgeW91ciBoYW5kbGVyL3dvcmtlciAnXG4gICAgICAgICsgJ2luIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBpbnZva2luZyAnXG4gICAgICAgICsgJ2FueSBzZXJ2aWNlIHRoYXQgdG91Y2hlcyBSTFMtZW5mb3JjZWQgdGFibGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3dhcm4nKSB7XG4gICAgICAvLyBJbmNsdWRlIGEgc3ludGhldGljIHN0YWNrIHNvIHRoZSBvZmZlbmRpbmcgY2FsbCBzaXRlIGlzIGluIHRoZSBsb2cuXG4gICAgICBsb2dnZXIud2Fybignd2l0aFRlbmFudFR4IGNhbGxlZCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlOyBSTFMgR1VDcyB3aWxsIGJlIGVtcHR5Jywge1xuICAgICAgICBzdGFjazogbmV3IEVycm9yKCd0ZW5hbnQtY29udGV4dCBtaXNzaW5nJykuc3RhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmdJZCA9IGN0eD8ub3JnSWQgPz8gJyc7XG4gIGNvbnN0IGlzU3VwZXJBZG1pbiA9IGN0eD8uaXNTdXBlckFkbWluID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICBjb25zdCBzdGF0ZW1lbnRUaW1lb3V0TXMgPSBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTtcblxuICByZXR1cm4gZGIudHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gICAgLy8gU0VUIExPQ0FMIHZpYSBzZXRfY29uZmlnKCkgc28gdGhlIHZhbHVlcyBhcmUgdHJhbnNhY3Rpb24tc2NvcGVkIChhdXRvLVxuICAgIC8vIHJlbGVhc2VkIG9uIENPTU1JVC9ST0xMQkFDSykuIFRoZSBkcml2ZXIgYmluZHMgdGhlIHZhbHVlcyBhcyBwYXJhbWV0ZXJzLFxuICAgIC8vIHNvIGEgaG9zdGlsZSBvcmdfaWQgY2FuJ3QgYnJlYWsgb3V0IG9mIHRoZSBHVUMgc3ludGF4LlxuICAgIGF3YWl0IHR4LmV4ZWN1dGUoc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdhcHAub3JnX2lkJywgJHtvcmdJZH0sIHRydWUpYCk7XG4gICAgYXdhaXQgdHguZXhlY3V0ZShzcWxgU0VMRUNUIHNldF9jb25maWcoJ2FwcC5pc19zeXNhZG1pbicsICR7aXNTdXBlckFkbWlufSwgdHJ1ZSlgKTtcbiAgICAvLyBTZXJ2ZXItc2lkZSBzdGF0ZW1lbnQgdGltZW91dCBvbiB0aGUgUkVBTCBxdWVyeSBwYXRoICh0cmFuc2FjdGlvbi1zY29wZWQsXG4gICAgLy8gc2FtZSBzZXRfY29uZmlnKGlzX2xvY2FsPXRydWUpIG1lY2hhbmlzbSBhcyB0aGUgUkxTIEdVQ3MpLiBgU0VUIExPQ0FMXG4gICAgLy8gc3RhdGVtZW50X3RpbWVvdXQgPSAkMWAgaXMgcmVqZWN0ZWQgYnkgUG9zdGdyZXMsIHNvIHNldF9jb25maWcgd2l0aCBhIGJvdW5kXG4gICAgLy8gdmFsdWUgaXMgdXNlZC4gQSBiYXJlIG51bWJlciBpcyBtaWxsaXNlY29uZHMuIFNraXBwZWQgd2hlbiBkaXNhYmxlZCAoMCkuXG4gICAgaWYgKHN0YXRlbWVudFRpbWVvdXRNcyA+IDApIHtcbiAgICAgIGF3YWl0IHR4LmV4ZWN1dGUoc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdzdGF0ZW1lbnRfdGltZW91dCcsICR7U3RyaW5nKHN0YXRlbWVudFRpbWVvdXRNcyl9LCB0cnVlKWApO1xuICAgIH1cbiAgICByZXR1cm4gZm4odHgpO1xuICB9KTtcbn1cbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS90ZW5hbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQWU5QyxTQUFTLGNBQWM7SUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4RCxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZFLHVFQUF1RTtJQUN2RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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eXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGVuYW50LWNvbnRleHQgcGx1bWJpbmcgZm9yIFBvc3RncmVzIHJvdy1sZXZlbCBzZWN1cml0eS5cbiAqXG4gKiBCYWNrZ3JvdW5kOiBwb3N0Z3Jlcy1pbml0LnNxbCBpbnN0YWxscyBSTFMgcG9saWNpZXMgb24gZXZlcnkgdXNlci1kYXRhXG4gKiB0YWJsZSB0aGF0IGNvbnN1bHQgdHdvIHNlc3Npb24gR1VDcyDigJQgYGFwcC5vcmdfaWRgIGFuZCBgYXBwLmlzX3N5c2FkbWluYC5cbiAqIE1vc3QgdXNlci1kYXRhIHRhYmxlcyBoYXZlIGJlZW4gZmxpcHBlZCB0byBgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZYCwgc29cbiAqIHRoZSBwb2xpY2llcyBETyBlbmZvcmNlIGV2ZW4gZm9yIHRoZSAob3duaW5nKSBjb25uZWN0aW9uIHVzZXIg4oCUIGEgcXVlcnlcbiAqIGFnYWluc3QgYSBGT1JDRSdkIHRhYmxlIG11c3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzIFNFVCBMT0NBTCdkXG4gKiBib3RoIEdVQ3Mgb3IgaXQgcmV0dXJucyB6ZXJvIHJvd3MgZm9yIG5vbi1zeXNhZG1pbnMgKGFuZCBtYXkgZmFpbCB0byB3cml0ZVxuICogZm9yIGFueSBjYWxsZXIpLiBBIGZldyB0YWJsZXMgcmVtYWluIGBFTkFCTEVgLW9ubHkgKG93bmVyLWJ5cGFzcykgcGVuZGluZ1xuICogdGhlaXIgc29hazsgdGhlIHNhbWUgY29udGV4dCBwbHVtYmluZyBjb3ZlcnMgYm90aC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyB0aGUgc2VhbS5cbiAqXG4gKiAgIDEuIGB0ZW5hbnRDb250ZXh0YCAoQXN5bmNMb2NhbFN0b3JhZ2UpIGNhcnJpZXMgYHtvcmdJZCwgaXNTdXBlckFkbWlufWBcbiAqICAgICAgZG93biB0aGUgY2FsbCBjaGFpbiB3aXRob3V0IHByb3AtZHJpbGxpbmcuIFNldCBvbmNlIGF0IHRoZSByZXF1ZXN0XG4gKiAgICAgIGJvdW5kYXJ5OyByZWFkYWJsZSBmcm9tIGFueXdoZXJlLlxuICpcbiAqICAgMi4gYHdpdGhUZW5hbnRUeChmbilgIG9wZW5zIGEgdHJhbnNhY3Rpb24sIFNFVCBMT0NBTCdzIGJvdGggR1VDcyBmcm9tXG4gKiAgICAgIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB0aGVuIGludm9rZXMgYGZuKHR4KWAuIFNlcnZpY2VzIG1pZ3JhdGUgb25lXG4gKiAgICAgIGF0IGEgdGltZSBieSB3cmFwcGluZyB0aGVpciBleGlzdGluZyBkcml6emxlIGNhbGxzIGluIHRoaXMgaGVscGVyIOKAlFxuICogICAgICBgZGIuc2VsZWN0KCkuZnJvbSguLi4pYCBiZWNvbWVzIGB3aXRoVGVuYW50VHgodHggPT4gdHguc2VsZWN0KCkuZnJvbSguLi4pKWAuXG4gKlxuICogICAzLiBgcnVuV2l0aFRlbmFudENvbnRleHQoY3R4LCBmbilgIGlzIHRoZSBFeHByZXNzLW1pZGRsZXdhcmUtc2lkZVxuICogICAgICBib29rZW5kIHRoYXQgZXN0YWJsaXNoZXMgdGhlIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlIGZvciB0aGUgcmVxdWVzdC5cbiAqXG4gKiBNaWdyYXRpb24gb3JkZXIgKHNlZSBkb2NzL3BsYW5zL2YtMS0wLXJscy1lbmZvcmNlbWVudC5tZCk6XG4gKiAgIC0gRmlyc3QgYWRvcHRlcnM6IG5ld2x5LXdyaXR0ZW4gc2VydmljZXMgKGRhc2hib2FyZCwgYWxlcnQtZGVzdGluYXRpb24pXG4gKiAgICAgd2hlcmUgdGhlIGNoYW5nZSBpcyBtZWNoYW5pY2FsLlxuICogICAtIFRoZW4gaGlnaC13cml0ZSBzZXJ2aWNlcyAocGx1Z2luLCBwaXBlbGluZSkuIFNvYWsgZWFjaCBvbmUgYmVmb3JlXG4gKiAgICAgZmxpcHBpbmcgdGhlIHVuZGVybHlpbmcgdGFibGUgdG8gRk9SQ0UuXG4gKiAgIC0gYWRtaW5fYXVkaXRfbG9nIHVzZXMgYSBzeXNhZG1pbi1vbmx5IHBvbGljeSDigJQgc3lzYWRtaW4gcGF0aHMgbXVzdFxuICogICAgIGFsc28gc2V0IGBhcHAuaXNfc3lzYWRtaW4gPSAndHJ1ZSdgIG9yIHRoZXknbGwgbG9zZSBhY2Nlc3MgdG8gaXQuXG4gKi9cblxuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGRiIH0gZnJvbSAnLi9wb3N0Z3Jlcy1jb25uZWN0aW9uLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0ZW5hbnQtY29udGV4dCcpO1xuXG4vKipcbiAqIEJlaGF2aW9yIHdoZW4gYHdpdGhUZW5hbnRUeGAgaXMgaW52b2tlZCBvdXRzaWRlIGFueSBgcnVuV2l0aFRlbmFudENvbnRleHRgXG4gKiBzY29wZS4gVGhlIGVmZmVjdGl2ZSBkZWZhdWx0IGlzIGZhaWwtZmFzdCAoJ3N0cmljdCcpIGluIHByb2R1Y3Rpb24gc28gYVxuICogbWlzc2luZyB0ZW5hbnQgc2NvcGUgc3VyZmFjZXMgYXQgdGhlIGJhZCBjYWxsIHNpdGUgaW5zdGVhZCBvZiBzaWxlbnRseVxuICogcnVubmluZyB3aXRoIGVtcHR5IFJMUyBHVUNzOyBvdXRzaWRlIHByb2R1Y3Rpb24gaXQgZGVmYXVsdHMgdG8gJ3dhcm4nIHNvXG4gKiB1bi1hdWRpdGVkIGRldi90ZXN0IHBhdGhzIGtlZXAgd29ya2luZyBidXQgbG9nIGFuIGFjdGlvbmFibGUgdHJhY2UuIEFuXG4gKiBleHBsaWNpdCBSTFNfQ09OVEVYVF9NT0RFIGVudiBvdmVycmlkZSBhbHdheXMgd2lucy5cbiAqXG4gKiAnc2lsZW50JyBpcyBrZXB0IGZvciB0ZXN0cyBhbmQgc2NyaXB0cyB0aGF0IGludGVudGlvbmFsbHkgZW50ZXIgdGhlIERCXG4gKiB3aXRob3V0IGNvbnRleHQgKGUuZy4gaW50ZWdyYXRpb24gdGVzdCBzZXR1cCB0aGF0IHJ1bnMgYXMgdGhlIGNvbm5lY3Rpb25cbiAqIG93bmVyIGJlZm9yZSBhbnkgdGVuYW50IGlzIHByb3Zpc2lvbmVkKS5cbiAqL1xudHlwZSBDb250ZXh0TW9kZSA9ICdzaWxlbnQnIHwgJ3dhcm4nIHwgJ3N0cmljdCc7XG5mdW5jdGlvbiBnZXRDb250ZXh0TW9kZSgpOiBDb250ZXh0TW9kZSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LlJMU19DT05URVhUX01PREU/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYXcgPT09ICdzaWxlbnQnIHx8IHJhdyA9PT0gJ3dhcm4nIHx8IHJhdyA9PT0gJ3N0cmljdCcpIHJldHVybiByYXc7XG4gIC8vIE5vIGV4cGxpY2l0IG92ZXJyaWRlOiBmYWlsLWZhc3QgaW4gcHJvZHVjdGlvbiwgd2FybiBldmVyeXdoZXJlIGVsc2UuXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gJ3N0cmljdCcgOiAnd2Fybic7XG59XG5cbi8qKlxuICogUGVyLXN0YXRlbWVudCBzZXJ2ZXItc2lkZSB0aW1lb3V0IChtcykgYXBwbGllZCBJTlNJREUgZXZlcnkgYHdpdGhUZW5hbnRUeGBcbiAqIHRyYW5zYWN0aW9uLCBuZXh0IHRvIHRoZSBSTFMgR1VDcy4gYHdpdGhUZW5hbnRUeGAgaXMgdGhlIHJlYWwgcXVlcnkgcGF0aCBmb3JcbiAqIGFsbCBSTFMvQ1JVRCByZWFkcyBhbmQgd3JpdGVzLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBEQi1zaWRlIGd1YXJkIGJlbG9uZ3MgKHRoZVxuICogb2xkIGBDb25uZWN0aW9uLnRyYW5zYWN0aW9uYCB3cmFwcGVyIHRoYXQgc2V0IGl0IGlzIGRlYWQg4oCUIHNlZVxuICogcG9zdGdyZXMtY29ubmVjdGlvbi50cykuIEJvdW5kcyBhIHJ1bmF3YXkgcXVlcnkgc28gaXQgY2FuJ3QgaG9sZCBhIHBvb2xlZFxuICogY29ubmVjdGlvbiBvcGVuIGluZGVmaW5pdGVseS4gRW52LWNvbmZpZ3VyYWJsZSB2aWEgYERCX1NUQVRFTUVOVF9USU1FT1VUX01TYFxuICogKGRlZmF1bHQgMzBzKTsgc2V0IHRvIGAwYCB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LlxuICovXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfU1RBVEVNRU5UX1RJTUVPVVRfTVMgPz8gJycsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShyYXcpICYmIHJhdyA+PSAwID8gcmF3IDogMzAwMDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q29udGV4dCB7XG4gIC8qKiBDYWxsZXIncyBvcmcuIFVuZGVmaW5lZCBmb3IgdW4tYXV0aGVudGljYXRlZCAvIHN5c3RlbSBqb2JzLiAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIENhbGxlcidzIHVzZXIgaWQuIE5vdCB1c2VkIGZvciBSTFMg4oCUIFBvc3RncmVzIHBvbGljaWVzIGFyZSBvcmctZ3JhaW5lZCxcbiAgICogIHdpdGggbm8gcGVyLXVzZXIgc2Vzc2lvbiBHVUMg4oCUIGJ1dCBjYXJyaWVkIHNvIGFwcC1sYXllciBwcmVkaWNhdGVzIHdpdGggYVxuICAgKiAgUEVSLVVTRVIgcnVuZyAocGlwZWxpbmUgdGVtcGxhdGVzJyBgcHJpdmF0ZWAgdmlzaWJpbGl0eSkgY2FuIHJlc29sdmUgXCJ3aG9cbiAgICogIGlzIGFza2luZ1wiIG9uIHBhdGhzIHRoYXQgaGF2ZSBub3doZXJlIHRvIHBhc3MgaXQsIG5vdGFibHkgQ3J1ZFNlcnZpY2Unc1xuICAgKiAgYHdyaXRlQ29uZGl0aW9uc2AuIEFic2VudCBmb3Igc3lzdGVtIGpvYnMsIHdoaWNoIGlzIHRoZSBmYWlsLWNsb3NlZCBjYXNlOlxuICAgKiAgbm8gdmlld2VyIOKHkiBubyBwcml2YXRlIHJvd3MuICovXG4gIHVzZXJJZD86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgY2FsbGVyIGlzIGEgc3lzYWRtaW4gKHN5c3RlbS1vcmcgYWRtaW4pLiBCeXBhc3NlcyBSTFNcbiAgICogIHBvbGljaWVzIHZpYSB0aGUgc3lzYWRtaW4tYnlwYXNzIGJyYW5jaCBpbiBgY3VycmVudF9pc19zeXNhZG1pbigpYC4gKi9cbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xuICAvKiogT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeTogdGhlIGNhbGxlcidzIGFjdGl2ZS1vcmcgcGFyZW50IChwcmVzZW50IG9ubHkgd2hlbiB0aGVcbiAgICogIGFjdGl2ZSBvcmcgaXMgYSB0ZWFtKS4gTm90IHVzZWQgZm9yIFJMUzsgY2FycmllZCBzbyBkb3duc3RyZWFtIHNpZGUtZWZmZWN0c1xuICAgKiAgKGUuZy4gZW50aXR5LWV2ZW50IGNvbXBsaWFuY2UgZXZhbCkgY2FuIGhvbm9yIHBhcmVudCBgcHJvcGFnYXRlVG9DaGlsZHJlbmBcbiAgICogIHJ1bGVzIHdpdGhvdXQgYSByZXF1ZXN0IGluIHNjb3BlLiAqL1xuICBwYXJlbnRPcmdJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItcmVxdWVzdCB0ZW5hbnQgY29udGV4dC4gUG9wdWxhdGVkIGJ5IEV4cHJlc3MgbWlkZGxld2FyZSBvbmNlIHRoZSBKV1RcbiAqIGlzIHZhbGlkYXRlZDsgY29uc3VtZWQgYnkgYHdpdGhUZW5hbnRUeGAgYW5kIGFueSBoZWxwZXIgdGhhdCBuZWVkcyB0b1xuICoga25vdyBcIndobyBpcyB0aGUgY2FsbGVyXCIgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbmFudENvbnRleHQgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8VGVuYW50Q29udGV4dD4oKTtcblxuLyoqXG4gKiBSdW4gYGZuYCBpbnNpZGUgdGhlIGdpdmVuIHRlbmFudCBzY29wZS4gVGhlIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlXG4gKiBzdXJ2aXZlcyBhY3Jvc3MgYXN5bmMgYm91bmRhcmllcyAoUHJvbWlzZXMsIHNldFRpbWVvdXQsIGV0Yy4pLCBzbyBhbnlcbiAqIGB3aXRoVGVuYW50VHhgIGNhbGwgaW5zaWRlIGBmbmAg4oCUIGRpcmVjdGx5IG9yIHRocm91Z2ggYW55IGRlcHRoIG9mXG4gKiBhc3luYyBoZWxwZXJzIOKAlCBwaWNrcyB1cCBgY3R4YC5cbiAqXG4gKiBXcmFwIGBuZXh0KClgIGZyb20gYW4gRXhwcmVzcyBtaWRkbGV3YXJlIHRvIGVzdGFibGlzaCBwZXItcmVxdWVzdCBzY29wZTpcbiAqXG4gKiAgICAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcbiAqICAgICAgIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAoKSA9PiBuZXh0KCkpO1xuICogICAgIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aFRlbmFudENvbnRleHQ8VD4oY3R4OiBUZW5hbnRDb250ZXh0LCBmbjogKCkgPT4gVCk6IFQge1xuICByZXR1cm4gdGVuYW50Q29udGV4dC5ydW4oY3R4LCBmbik7XG59XG5cbi8qKiBSZWFkIHRoZSBjdXJyZW50IHRlbmFudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdXRzaWRlIGFuXG4gKiAgYHJ1bldpdGhUZW5hbnRDb250ZXh0YCBzY29wZSAoZS5nLiBiYWNrZ3JvdW5kIHdvcmtlcnMsIG1pZ3JhdGlvbnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbmFudENvbnRleHQoKTogVGVuYW50Q29udGV4dCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIGN1cnJlbnQgY29kZSBpcyBydW5uaW5nIGluc2lkZSBhIHRlbmFudCBzY29wZS4gQ2FsbGVyc1xuICogdGhhdCBsZWdpdGltYXRlbHkgbmVlZCB0byByZWZ1c2UgdG8gb3BlcmF0ZSB3aXRob3V0IG9uZSAoZS5nLiBoYW5kbGVyc1xuICogdGhhdCB0b3VjaCBGT1JDRSdkIFJMUyB0YWJsZXMpIGNhbiB1c2UgdGhpcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlXG4gKiBkb3duc3RyZWFtIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB0byBzdXJmYWNlIHRoZSBidWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlVGVuYW50Q29udGV4dCgpOiBUZW5hbnRDb250ZXh0IHtcbiAgY29uc3QgY3R4ID0gdGVuYW50Q29udGV4dC5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZXF1aXJlVGVuYW50Q29udGV4dDogbm8gdGVuYW50IHNjb3BlIGFjdGl2ZS4gV3JhcCB5b3VyIGhhbmRsZXIvd29ya2VyIGluICdcbiAgICAgICsgJ3J1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBhbnkgREIgY2FsbC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cblxuLyoqXG4gKiBPcGVuIGEgdHJhbnNhY3Rpb24gd2l0aCBSTFMgR1VDcyBTRVQgTE9DQUwgZnJvbSB0aGUgY3VycmVudFxuICogQXN5bmNMb2NhbFN0b3JhZ2UgdGVuYW50IGNvbnRleHQsIHRoZW4gaW52b2tlIGBmbih0eClgLlxuICpcbiAqIC0gV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHRlbmFudCBzY29wZSAoZS5nLiBmcm9tIGEgYmFja2dyb3VuZCBqb2IgdGhhdFxuICogICBkb2Vzbid0IGhhdmUgYSBjYWxsZXIgaWRlbnRpdHkpLCB0aGUgdHJhbnNhY3Rpb24gaXMgb3BlbmVkIHdpdGggYm90aFxuICogICBHVUNzIGNsZWFyZWQg4oCUIFJMUyBwb2xpY2llcyB3aWxsIHJldHVybiB6ZXJvIHJvd3Mgb24gRk9SQ0UnZCB0YWJsZXMuXG4gKiAgIENhbGxlcnMgdGhhdCBuZWVkIGEgc3lzYWRtaW4tZXF1aXZhbGVudCBzY29wZSBzaG91bGQgd3JhcCB0aGVtc2VsdmVzIGluXG4gKiAgIGBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCDigKYpYCBleHBsaWNpdGx5LlxuICpcbiAqIC0gVXNlcyBgc2V0X2NvbmZpZyhrZXksIHZhbHVlLCB0cnVlKWAgKHRoZSBib29sZWFuID0gYGlzX2xvY2FsYCwgaS5lLlxuICogICB0cmFuc2FjdGlvbi1zY29wZWQpLiBFcXVpdmFsZW50IHRvIGBTRVQgTE9DQUxgIGJ1dCB0YWtlcyB0aGUgdmFsdWUgYXNcbiAqICAgYSBwYXJhbWV0ZXIsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCDigJQgRHJpenpsZSdzIGBzcWxgIHRlbXBsYXRlIGJpbmRzIHRoZVxuICogICB2YWx1ZSBzYWZlbHkgc28gYW4gYXR0YWNrZXItY29udHJvbGxlZCBgb3JnSWRgIGNhbid0IGVzY2FwZSB0aGUgcXVvdGluZy5cbiAqXG4gKiAtIFJldHVybnMgd2hhdGV2ZXIgYGZuYCByZXR1cm5zOyB0aHJvd3Mgd2hhdGV2ZXIgYGZuYCB0aHJvd3MgKERyaXp6bGVcbiAqICAgaGFuZGxlcyB0aGUgQ09NTUlUL1JPTExCQUNLIGZvciB1cykuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVuYW50VHg8VD4oXG4gIGZuOiAodHg6IFBhcmFtZXRlcnM8UGFyYW1ldGVyczx0eXBlb2YgZGIudHJhbnNhY3Rpb24+WzBdPlswXSkgPT4gUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjdHggPSB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG5cbiAgaWYgKCFjdHgpIHtcbiAgICAvLyBTdXJmYWNlIHRoZSBidWcgaW5zdGVhZCBvZiBzaWxlbnRseSBTRVQnaW5nIGVtcHR5IEdVQ3MuIFRoZSBkZWZhdWx0XG4gICAgLy8gbW9kZSAoJ3dhcm4nKSBsb2dzIGFuIGFjdGlvbmFibGUgdHJhY2Ugc28gdGhlIGJhZCBjYWxsIHNpdGUgaXMgZWFzeVxuICAgIC8vIHRvIGZpbmQ7IHByb2R1Y3Rpb24gZGVwbG95bWVudHMgdGhhdCBoYXZlIGZpbmlzaGVkIHRoZSBhdWRpdCBjYW4gc2V0XG4gICAgLy8gUkxTX0NPTlRFWFRfTU9ERT1zdHJpY3QgdG8gZmFpbC1mYXN0IGF0IHRoZSBjYWxsIHNpdGUgKGJldHRlciBzdGFja1xuICAgIC8vIHRyYWNlIHRoYW4gdGhlIFBvc3RncmVzIFwicGVybWlzc2lvbiBkZW5pZWRcIiB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICAgIC8vIHN1cmZhY2UgZnJvbSBGT1JDRSdkIFJMUykuXG4gICAgY29uc3QgbW9kZSA9IGdldENvbnRleHRNb2RlKCk7XG4gICAgaWYgKG1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd3aXRoVGVuYW50VHggY2FsbGVkIG91dHNpZGUgYSB0ZW5hbnQgc2NvcGUuIFdyYXAgeW91ciBoYW5kbGVyL3dvcmtlciAnXG4gICAgICAgICsgJ2luIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBpbnZva2luZyAnXG4gICAgICAgICsgJ2FueSBzZXJ2aWNlIHRoYXQgdG91Y2hlcyBSTFMtZW5mb3JjZWQgdGFibGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3dhcm4nKSB7XG4gICAgICAvLyBJbmNsdWRlIGEgc3ludGhldGljIHN0YWNrIHNvIHRoZSBvZmZlbmRpbmcgY2FsbCBzaXRlIGlzIGluIHRoZSBsb2cuXG4gICAgICBsb2dnZXIud2Fybignd2l0aFRlbmFudFR4IGNhbGxlZCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlOyBSTFMgR1VDcyB3aWxsIGJlIGVtcHR5Jywge1xuICAgICAgICBzdGFjazogbmV3IEVycm9yKCd0ZW5hbnQtY29udGV4dCBtaXNzaW5nJykuc3RhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmdJZCA9IGN0eD8ub3JnSWQgPz8gJyc7XG4gIGNvbnN0IGlzU3VwZXJBZG1pbiA9IGN0eD8uaXNTdXBlckFkbWluID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICBjb25zdCBzdGF0ZW1lbnRUaW1lb3V0TXMgPSBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTtcblxuICByZXR1cm4gZGIudHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gICAgLy8gU2V0IGV2ZXJ5IHRyYW5zYWN0aW9uLXNjb3BlZCBHVUMgaW4gYSBTSU5HTEUgcm91bmQtdHJpcC4gYHNldF9jb25maWcoKWBcbiAgICAvLyByZXR1cm5zIGl0cyB2YWx1ZSwgc28gbXVsdGlwbGUgY2FsbHMgY29tcG9zZSBpbiBvbmUgU0VMRUNUIOKAlCBwcmV2aW91c2x5XG4gICAgLy8gdGhlc2Ugd2VyZSAy4oCTMyBzZXBhcmF0ZSBgdHguZXhlY3V0ZSgpYCByb3VuZC10cmlwcyBQRVIgcmVhZCwgZWFjaCBhXG4gICAgLy8gbmV0d29yayBob3AgdGhhdCB0YXhlcyB0aGUgc2hhcmVkIFBnQm91bmNlciBwb29sIG9uIHRoZSBob3QgcGF0aC4gYHRydWVgXG4gICAgLy8gPSBpc19sb2NhbCAoU0VUIExPQ0FMIHNlbWFudGljczogYXV0by1yZWxlYXNlZCBvbiBDT01NSVQvUk9MTEJBQ0spLiBUaGVcbiAgICAvLyBkcml2ZXIgYmluZHMgdGhlIHZhbHVlcyBhcyBwYXJhbWV0ZXJzLCBzbyBhIGhvc3RpbGUgb3JnX2lkIGNhbid0IGJyZWFrIG91dFxuICAgIC8vIG9mIHRoZSBHVUMgc3ludGF4LlxuICAgIC8vXG4gICAgLy8gVGhlIHN0YXRlbWVudF90aW1lb3V0IEdVQyBib3VuZHMgYSBydW5hd2F5IHF1ZXJ5IHNvIGl0IGNhbid0IGhvbGQgYSBwb29sZWRcbiAgICAvLyBjb25uZWN0aW9uIG9wZW4gaW5kZWZpbml0ZWx5IChgU0VUIExPQ0FMIHN0YXRlbWVudF90aW1lb3V0ID0gJDFgIGlzIHJlamVjdGVkXG4gICAgLy8gYnkgUG9zdGdyZXMsIGhlbmNlIHNldF9jb25maWcgd2l0aCBhIGJvdW5kIG1zIHZhbHVlKS4gSW5jbHVkZWQgaW4gdGhlIHNhbWVcbiAgICAvLyBzdGF0ZW1lbnQgd2hlbiBlbmFibGVkICg+MCksIGRyb3BwZWQgZW50aXJlbHkgd2hlbiBkaXNhYmxlZCAoMCkuXG4gICAgaWYgKHN0YXRlbWVudFRpbWVvdXRNcyA+IDApIHtcbiAgICAgIGF3YWl0IHR4LmV4ZWN1dGUoXG4gICAgICAgIHNxbGBTRUxFQ1Qgc2V0X2NvbmZpZygnYXBwLm9yZ19pZCcsICR7b3JnSWR9LCB0cnVlKSwgc2V0X2NvbmZpZygnYXBwLmlzX3N5c2FkbWluJywgJHtpc1N1cGVyQWRtaW59LCB0cnVlKSwgc2V0X2NvbmZpZygnc3RhdGVtZW50X3RpbWVvdXQnLCAke1N0cmluZyhzdGF0ZW1lbnRUaW1lb3V0TXMpfSwgdHJ1ZSlgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdHguZXhlY3V0ZShcbiAgICAgICAgc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdhcHAub3JnX2lkJywgJHtvcmdJZH0sIHRydWUpLCBzZXRfY29uZmlnKCdhcHAuaXNfc3lzYWRtaW4nLCAke2lzU3VwZXJBZG1pbn0sIHRydWUpYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmbih0eCk7XG4gIH0pO1xufVxuIl19
package/lib/index.d.ts CHANGED
@@ -25,6 +25,7 @@
25
25
  export * from './database/index.js';
26
26
  export * from './api/query-builders.js';
27
27
  export * from './api/access-control-builder.js';
28
+ export * from './api/viewer-context.js';
28
29
  export * from './api/crud-service.js';
29
30
  export * from './api/soft-delete-sweep.js';
30
31
  export * from './api/reporting-service.js';
package/lib/index.js CHANGED
@@ -29,9 +29,10 @@ export * from './database/index.js';
29
29
  // Query builders and services
30
30
  export * from './api/query-builders.js';
31
31
  export * from './api/access-control-builder.js';
32
+ export * from './api/viewer-context.js';
32
33
  export * from './api/crud-service.js';
33
34
  export * from './api/soft-delete-sweep.js';
34
35
  export * from './api/reporting-service.js';
35
36
  // Filters
36
37
  export * from './core/query-filters.js';
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxXQUFXO0FBQ1gsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyw4QkFBOEI7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLFVBQVU7QUFDVixjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQG1vZHVsZSBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhXG4gKlxuICogRGF0YWJhc2UgbGF5ZXI6IERyaXp6bGUgT1JNIHNjaGVtYXMsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgYW5kIHF1ZXJ5IGluZnJhc3RydWN0dXJlLlxuICpcbiAqICoqRGF0YWJhc2UqKlxuICogLSBkYiDigJQgc2hhcmVkIERyaXp6bGUgZGF0YWJhc2UgaW5zdGFuY2VcbiAqIC0gZ2V0Q29ubmVjdGlvbiwgY2xvc2VDb25uZWN0aW9uIOKAlCBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIHdpdGggcmV0cnkgbG9naWNcbiAqIC0gc2NoZW1hIOKAlCBEcml6emxlIHRhYmxlIGRlZmluaXRpb25zIChwbHVnaW5zLCBwaXBlbGluZXMsIG1lc3NhZ2VzLCBjb21wbGlhbmNlLCBldGMuKVxuICpcbiAqICoqU2VydmljZXMqKlxuICogLSBDcnVkU2VydmljZSDigJQgZ2VuZXJpYyBiYXNlIGNsYXNzIGZvciBtdWx0aS10ZW5hbnQgQ1JVRCB3aXRoIGFjY2VzcyBjb250cm9sIGFuZCBwYWdpbmF0aW9uXG4gKiAtIFJlcG9ydGluZ1NlcnZpY2Ug4oCUIGFnZ3JlZ2F0ZSBxdWVyeSBhbmQgcmVwb3J0aW5nIGJhc2UgY2xhc3NcbiAqXG4gKiAqKlF1ZXJ5IEJ1aWxkZXJzKipcbiAqIC0gYnVpbGRQbHVnaW5Db25kaXRpb25zLCBidWlsZFBpcGVsaW5lQ29uZGl0aW9ucywgYnVpbGRNZXNzYWdlQ29uZGl0aW9ucyDigJQgZmlsdGVyLXRvLVNRTCBjb25kaXRpb24gYnVpbGRlcnNcbiAqIC0gYnVpbGRDb21wbGlhbmNlUG9saWN5Q29uZGl0aW9ucywgYnVpbGRDb21wbGlhbmNlUnVsZUNvbmRpdGlvbnMsIGV0Yy4g4oCUIGNvbXBsaWFuY2UgcXVlcnkgYnVpbGRlcnNcbiAqIC0gQWNjZXNzQ29udHJvbEJ1aWxkZXIg4oCUIHJvdy1sZXZlbCBhY2Nlc3MgY29udHJvbCBjb25kaXRpb24gYnVpbGRlclxuICpcbiAqICoqRmlsdGVycyoqXG4gKiAtIFBsdWdpbkZpbHRlciwgUGlwZWxpbmVGaWx0ZXIsIE1lc3NhZ2VGaWx0ZXIg4oCUIHR5cGVkIGZpbHRlciBpbnRlcmZhY2VzXG4gKiAtIENvbXBsaWFuY2VQb2xpY3lGaWx0ZXIsIENvbXBsaWFuY2VSdWxlRmlsdGVyLCBldGMuIOKAlCBjb21wbGlhbmNlIGZpbHRlciBpbnRlcmZhY2VzXG4gKiAtIGRyaXp6bGVSb3dzLCBkcml6emxlQ291bnQg4oCUIERyaXp6bGUgcmVzdWx0IHR5cGUgaGVscGVyc1xuICovXG5cbi8vIERhdGFiYXNlXG5leHBvcnQgKiBmcm9tICcuL2RhdGFiYXNlL2luZGV4LmpzJztcblxuLy8gUXVlcnkgYnVpbGRlcnMgYW5kIHNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2FwaS9xdWVyeS1idWlsZGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9hY2Nlc3MtY29udHJvbC1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL2NydWQtc2VydmljZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9zb2Z0LWRlbGV0ZS1zd2VlcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9yZXBvcnRpbmctc2VydmljZS5qcyc7XG5cbi8vIEZpbHRlcnNcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9xdWVyeS1maWx0ZXJzLmpzJztcbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxXQUFXO0FBQ1gsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyw4QkFBOEI7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsVUFBVTtBQUNWLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBAbW9kdWxlIEBwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGFcbiAqXG4gKiBEYXRhYmFzZSBsYXllcjogRHJpenpsZSBPUk0gc2NoZW1hcywgY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBhbmQgcXVlcnkgaW5mcmFzdHJ1Y3R1cmUuXG4gKlxuICogKipEYXRhYmFzZSoqXG4gKiAtIGRiIOKAlCBzaGFyZWQgRHJpenpsZSBkYXRhYmFzZSBpbnN0YW5jZVxuICogLSBnZXRDb25uZWN0aW9uLCBjbG9zZUNvbm5lY3Rpb24g4oCUIFBvc3RncmVTUUwgY29ubmVjdGlvbiBsaWZlY3ljbGUgd2l0aCByZXRyeSBsb2dpY1xuICogLSBzY2hlbWEg4oCUIERyaXp6bGUgdGFibGUgZGVmaW5pdGlvbnMgKHBsdWdpbnMsIHBpcGVsaW5lcywgbWVzc2FnZXMsIGNvbXBsaWFuY2UsIGV0Yy4pXG4gKlxuICogKipTZXJ2aWNlcyoqXG4gKiAtIENydWRTZXJ2aWNlIOKAlCBnZW5lcmljIGJhc2UgY2xhc3MgZm9yIG11bHRpLXRlbmFudCBDUlVEIHdpdGggYWNjZXNzIGNvbnRyb2wgYW5kIHBhZ2luYXRpb25cbiAqIC0gUmVwb3J0aW5nU2VydmljZSDigJQgYWdncmVnYXRlIHF1ZXJ5IGFuZCByZXBvcnRpbmcgYmFzZSBjbGFzc1xuICpcbiAqICoqUXVlcnkgQnVpbGRlcnMqKlxuICogLSBidWlsZFBsdWdpbkNvbmRpdGlvbnMsIGJ1aWxkUGlwZWxpbmVDb25kaXRpb25zLCBidWlsZE1lc3NhZ2VDb25kaXRpb25zIOKAlCBmaWx0ZXItdG8tU1FMIGNvbmRpdGlvbiBidWlsZGVyc1xuICogLSBidWlsZENvbXBsaWFuY2VQb2xpY3lDb25kaXRpb25zLCBidWlsZENvbXBsaWFuY2VSdWxlQ29uZGl0aW9ucywgZXRjLiDigJQgY29tcGxpYW5jZSBxdWVyeSBidWlsZGVyc1xuICogLSBBY2Nlc3NDb250cm9sQnVpbGRlciDigJQgcm93LWxldmVsIGFjY2VzcyBjb250cm9sIGNvbmRpdGlvbiBidWlsZGVyXG4gKlxuICogKipGaWx0ZXJzKipcbiAqIC0gUGx1Z2luRmlsdGVyLCBQaXBlbGluZUZpbHRlciwgTWVzc2FnZUZpbHRlciDigJQgdHlwZWQgZmlsdGVyIGludGVyZmFjZXNcbiAqIC0gQ29tcGxpYW5jZVBvbGljeUZpbHRlciwgQ29tcGxpYW5jZVJ1bGVGaWx0ZXIsIGV0Yy4g4oCUIGNvbXBsaWFuY2UgZmlsdGVyIGludGVyZmFjZXNcbiAqIC0gZHJpenpsZVJvd3MsIGRyaXp6bGVDb3VudCDigJQgRHJpenpsZSByZXN1bHQgdHlwZSBoZWxwZXJzXG4gKi9cblxuLy8gRGF0YWJhc2VcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWJhc2UvaW5kZXguanMnO1xuXG4vLyBRdWVyeSBidWlsZGVycyBhbmQgc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vYXBpL3F1ZXJ5LWJ1aWxkZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL2FjY2Vzcy1jb250cm9sLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvdmlld2VyLWNvbnRleHQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvY3J1ZC1zZXJ2aWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL3NvZnQtZGVsZXRlLXN3ZWVwLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL3JlcG9ydGluZy1zZXJ2aWNlLmpzJztcblxuLy8gRmlsdGVyc1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3F1ZXJ5LWZpbHRlcnMuanMnO1xuIl19
package/package.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "drizzle-orm": "0.45.2",
27
27
  "pg": "8.22.0",
28
- "@pipeline-builder/api-core": "3.4.126"
28
+ "@pipeline-builder/api-core": "4.0.1"
29
29
  },
30
30
  "keywords": [
31
31
  "ci-cd",
@@ -81,7 +81,7 @@
81
81
  "access": "public",
82
82
  "registry": "https://registry.npmjs.org/"
83
83
  },
84
- "version": "3.4.131",
84
+ "version": "4.0.2",
85
85
  "bugs": {
86
86
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
87
87
  },