@getopenpay/openpay-js 0.5.7-alpha.589ead1 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/{ExportResult-Bo1QOwfo.js → ExportResult-B-YLKMaU.js} +1 -1
  2. package/dist/{Resource-ByOJ8tkj.js → Resource-Bx_VuhUk.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-D_sHKsSn.js → SimpleSpanProcessor-Bh5q0GmE.js} +8 -8
  4. package/dist/{_commonjsHelpers-DnMzE-71.js → _commonjsHelpers-f76XedMs.js} +1 -1
  5. package/dist/{detect-resources-CaWtElZr.js → detect-resources-DNU1_3GE.js} +8 -8
  6. package/dist/{diag-api-DAsRXs3b.js → diag-api-D9IWSUsW.js} +2 -2
  7. package/dist/{index-DLb2g5Bf.js → index-30ZlhcLu.js} +5 -5
  8. package/dist/{index-DLeOxeWp.js → index-B5mFO64c.js} +5 -5
  9. package/dist/{index-CF-DSTKu.js → index-BEPYQb8x.js} +2 -2
  10. package/dist/{index-Die4Lhdg.js → index-C3xfmnuK.js} +7 -7
  11. package/dist/{index-Bih9tP98.js → index-DQ3qlDEd.js} +7 -7
  12. package/dist/{index-CAXewtIL.js → index-DsU78E0F.js} +1 -1
  13. package/dist/{index-BVePm1pB.js → index-DyyV4YDA.js} +4 -4
  14. package/dist/index-Xxndn7Y1.js +6823 -0
  15. package/dist/{index-BValH8xN.js → index-upVsoy_P.js} +6 -6
  16. package/dist/{index-OfX0TVSj.js → index-zbYl1-1s.js} +2 -2
  17. package/dist/index.es.js +2 -2
  18. package/dist/index.umd.js +56 -43
  19. package/dist/lifecycle-BjQ-7GLm.js +119 -0
  20. package/dist/{metrics-api-_5uS60q1.js → metrics-api-DMMrpfD3.js} +2 -2
  21. package/dist/{sdk-info-CKnpG_QI.js → sdk-info-DiazhyI_.js} +3 -3
  22. package/dist/{url-CwONqRT7.js → url-Cnrlns-i.js} +3 -3
  23. package/dist/{utils-BGeftTvk.js → utils-CX5YT7yI.js} +1 -1
  24. package/dist/{utils-DDk98YyS.js → utils-DAwtFC1B.js} +2 -2
  25. package/dist/{utils-CzFaFOLd.js → utils-DWQb1oMe.js} +4 -4
  26. package/package.json +2 -1
  27. package/dist/index-DlrGfmQY.js +0 -6800
@@ -11,4 +11,4 @@ export {
11
11
  l as _,
12
12
  b as c
13
13
  };
14
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXRpbHMtIX57MDBifX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBVcGRhdGVzIHRvIHRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZSByZXBsaWNhdGVkIHRvIEBvcGVudGVsZW1ldHJ5L2FwaSB0b28uXG4vKipcbiAqIC0gZ2xvYmFsVGhpcyAoTmV3IHN0YW5kYXJkKVxuICogLSBzZWxmIChXaWxsIHJldHVybiB0aGUgY3VycmVudCB3aW5kb3cgaW5zdGFuY2UgZm9yIHN1cHBvcnRlZCBicm93c2VycylcbiAqIC0gd2luZG93IChmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMpXG4gKiAtIGdsb2JhbCAoTm9kZUpTIGltcGxlbWVudGF0aW9uKVxuICogLSA8b2JqZWN0PiAoV2hlbiBhbGwgZWxzZSBmYWlscylcbiAqL1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMsIG5vLXVuZGVmXG52YXIgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgIDoge307XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdCBtYXAgZnJvbSB0aGUgZ2l2ZW4gdmFsdWVzXG4gKiBAcGFyYW0gdmFsdWVzIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGJlIHVzZWQgYXMga2V5cyBhbmQgdmFsdWVzIGluIHRoZSBtYXAuXG4gKiBAcmV0dXJucyBBIHBvcHVsYXRlZCB2ZXJzaW9uIG9mIHRoZSBtYXAgd2l0aCB0aGUgdmFsdWVzIGFuZCBrZXlzIGRlcml2ZWQgZnJvbSB0aGUgdmFsdWVzLlxuICovXG4vKiNfX05PX1NJREVfRUZGRUNUU19fKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnN0TWFwKHZhbHVlcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgbHAgPSAwOyBscCA8IGxlbjsgbHArKykge1xuICAgICAgICB2YXIgdmFsID0gdmFsdWVzW2xwXTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgcmVzW1N0cmluZyh2YWwpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvWy0uXS9nLCAnXycpXSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgeyBfZ2xvYmFsVGhpcyBhcyBfLCBjcmVhdGVDb25zdE1hcCBhcyBjIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBeUJBLElBQUlBLElBQWMsT0FBTyxjQUFlLFdBQ2xDLGFBQ0EsT0FBTyxRQUFTLFdBQ1osT0FDQSxPQUFPLFVBQVcsV0FDZCxTQUNBLE9BQU8sVUFBVyxXQUNkLFNBQ0EsQ0FBQztBQUFBO0FBdUJuQixTQUFTQyxFQUFlQyxHQUFRO0FBSTVCLFdBRklDLElBQU0sQ0FBQyxHQUNQQyxJQUFNRixFQUFPLFFBQ1JHLElBQUssR0FBR0EsSUFBS0QsR0FBS0MsS0FBTTtBQUM3QixRQUFJQyxJQUFNSixFQUFPRyxDQUFFO0FBQ25CLElBQUlDLE1BQ0FILEVBQUksT0FBT0csQ0FBRyxFQUFFLFlBQVksRUFBRSxRQUFRLFNBQVMsR0FBRyxDQUFDLElBQUlBO0FBQUEsRUFFL0Q7QUFDQSxTQUFPSDtBQUNYOyIsCiAgIm5hbWVzIjogWyJfZ2xvYmFsVGhpcyIsICJjcmVhdGVDb25zdE1hcCIsICJ2YWx1ZXMiLCAicmVzIiwgImxlbiIsICJscCIsICJ2YWwiXQp9Cg==
14
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXRpbHMtIX57MDBjfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBVcGRhdGVzIHRvIHRoaXMgZmlsZSBzaG91bGQgYWxzbyBiZSByZXBsaWNhdGVkIHRvIEBvcGVudGVsZW1ldHJ5L2FwaSB0b28uXG4vKipcbiAqIC0gZ2xvYmFsVGhpcyAoTmV3IHN0YW5kYXJkKVxuICogLSBzZWxmIChXaWxsIHJldHVybiB0aGUgY3VycmVudCB3aW5kb3cgaW5zdGFuY2UgZm9yIHN1cHBvcnRlZCBicm93c2VycylcbiAqIC0gd2luZG93IChmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMpXG4gKiAtIGdsb2JhbCAoTm9kZUpTIGltcGxlbWVudGF0aW9uKVxuICogLSA8b2JqZWN0PiAoV2hlbiBhbGwgZWxzZSBmYWlscylcbiAqL1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMsIG5vLXVuZGVmXG52YXIgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgIDoge307XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdCBtYXAgZnJvbSB0aGUgZ2l2ZW4gdmFsdWVzXG4gKiBAcGFyYW0gdmFsdWVzIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGJlIHVzZWQgYXMga2V5cyBhbmQgdmFsdWVzIGluIHRoZSBtYXAuXG4gKiBAcmV0dXJucyBBIHBvcHVsYXRlZCB2ZXJzaW9uIG9mIHRoZSBtYXAgd2l0aCB0aGUgdmFsdWVzIGFuZCBrZXlzIGRlcml2ZWQgZnJvbSB0aGUgdmFsdWVzLlxuICovXG4vKiNfX05PX1NJREVfRUZGRUNUU19fKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnN0TWFwKHZhbHVlcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgbHAgPSAwOyBscCA8IGxlbjsgbHArKykge1xuICAgICAgICB2YXIgdmFsID0gdmFsdWVzW2xwXTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgcmVzW1N0cmluZyh2YWwpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvWy0uXS9nLCAnXycpXSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgeyBfZ2xvYmFsVGhpcyBhcyBfLCBjcmVhdGVDb25zdE1hcCBhcyBjIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBeUJBLElBQUlBLElBQWMsT0FBTyxjQUFlLFdBQ2xDLGFBQ0EsT0FBTyxRQUFTLFdBQ1osT0FDQSxPQUFPLFVBQVcsV0FDZCxTQUNBLE9BQU8sVUFBVyxXQUNkLFNBQ0EsQ0FBQztBQUFBO0FBdUJuQixTQUFTQyxFQUFlQyxHQUFRO0FBSTVCLFdBRklDLElBQU0sQ0FBQyxHQUNQQyxJQUFNRixFQUFPLFFBQ1JHLElBQUssR0FBR0EsSUFBS0QsR0FBS0MsS0FBTTtBQUM3QixRQUFJQyxJQUFNSixFQUFPRyxDQUFFO0FBQ25CLElBQUlDLE1BQ0FILEVBQUksT0FBT0csQ0FBRyxFQUFFLFlBQVksRUFBRSxRQUFRLFNBQVMsR0FBRyxDQUFDLElBQUlBO0FBQUEsRUFFL0Q7QUFDQSxTQUFPSDtBQUNYOyIsCiAgIm5hbWVzIjogWyJfZ2xvYmFsVGhpcyIsICJjcmVhdGVDb25zdE1hcCIsICJ2YWx1ZXMiLCAicmVzIiwgImxlbiIsICJscCIsICJ2YWwiXQp9Cg==
@@ -1,4 +1,4 @@
1
- import { S as C, a as p, h as _, t as O, u as h } from "./url-CwONqRT7.js";
1
+ import { S as C, a as p, h as _, t as O, u as h } from "./url-Cnrlns-i.js";
2
2
  var T;
3
3
  (function(t) {
4
4
  t.CONNECT_END = "connectEnd", t.CONNECT_START = "connectStart", t.DECODED_BODY_SIZE = "decodedBodySize", t.DOM_COMPLETE = "domComplete", t.DOM_CONTENT_LOADED_EVENT_END = "domContentLoadedEventEnd", t.DOM_CONTENT_LOADED_EVENT_START = "domContentLoadedEventStart", t.DOM_INTERACTIVE = "domInteractive", t.DOMAIN_LOOKUP_END = "domainLookupEnd", t.DOMAIN_LOOKUP_START = "domainLookupStart", t.ENCODED_BODY_SIZE = "encodedBodySize", t.FETCH_START = "fetchStart", t.LOAD_EVENT_END = "loadEventEnd", t.LOAD_EVENT_START = "loadEventStart", t.NAVIGATION_START = "navigationStart", t.REDIRECT_END = "redirectEnd", t.REDIRECT_START = "redirectStart", t.REQUEST_START = "requestStart", t.RESPONSE_END = "responseEnd", t.RESPONSE_START = "responseStart", t.SECURE_CONNECTION_START = "secureConnectionStart", t.UNLOAD_EVENT_END = "unloadEventEnd", t.UNLOAD_EVENT_START = "unloadEventStart";
@@ -139,4 +139,4 @@ export {
139
139
  R as p,
140
140
  s
141
141
  };
142
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXRpbHMtIX57MDA3fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFMgYXMgU0VNQVRUUlNfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSCwgYSBhcyBTRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCwgaCBhcyBoclRpbWVUb05hbm9zZWNvbmRzLCB0IGFzIHRpbWVJbnB1dFRvSHJUaW1lLCB1IGFzIHVybE1hdGNoZXMgfSBmcm9tICcuL3VybC0hfnswMDh9fi5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcztcbihmdW5jdGlvbiAoUGVyZm9ybWFuY2VUaW1pbmdOYW1lcykge1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJDT05ORUNUX0VORFwiXSA9IFwiY29ubmVjdEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJDT05ORUNUX1NUQVJUXCJdID0gXCJjb25uZWN0U3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiREVDT0RFRF9CT0RZX1NJWkVcIl0gPSBcImRlY29kZWRCb2R5U2l6ZVwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJET01fQ09NUExFVEVcIl0gPSBcImRvbUNvbXBsZXRlXCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkRPTV9DT05URU5UX0xPQURFRF9FVkVOVF9FTkRcIl0gPSBcImRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJET01fQ09OVEVOVF9MT0FERURfRVZFTlRfU1RBUlRcIl0gPSBcImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkRPTV9JTlRFUkFDVElWRVwiXSA9IFwiZG9tSW50ZXJhY3RpdmVcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiRE9NQUlOX0xPT0tVUF9FTkRcIl0gPSBcImRvbWFpbkxvb2t1cEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJET01BSU5fTE9PS1VQX1NUQVJUXCJdID0gXCJkb21haW5Mb29rdXBTdGFydFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJFTkNPREVEX0JPRFlfU0laRVwiXSA9IFwiZW5jb2RlZEJvZHlTaXplXCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkZFVENIX1NUQVJUXCJdID0gXCJmZXRjaFN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkxPQURfRVZFTlRfRU5EXCJdID0gXCJsb2FkRXZlbnRFbmRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiTE9BRF9FVkVOVF9TVEFSVFwiXSA9IFwibG9hZEV2ZW50U3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiTkFWSUdBVElPTl9TVEFSVFwiXSA9IFwibmF2aWdhdGlvblN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIlJFRElSRUNUX0VORFwiXSA9IFwicmVkaXJlY3RFbmRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiUkVESVJFQ1RfU1RBUlRcIl0gPSBcInJlZGlyZWN0U3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiUkVRVUVTVF9TVEFSVFwiXSA9IFwicmVxdWVzdFN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIlJFU1BPTlNFX0VORFwiXSA9IFwicmVzcG9uc2VFbmRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiUkVTUE9OU0VfU1RBUlRcIl0gPSBcInJlc3BvbnNlU3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiU0VDVVJFX0NPTk5FQ1RJT05fU1RBUlRcIl0gPSBcInNlY3VyZUNvbm5lY3Rpb25TdGFydFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJVTkxPQURfRVZFTlRfRU5EXCJdID0gXCJ1bmxvYWRFdmVudEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJVTkxPQURfRVZFTlRfU1RBUlRcIl0gPSBcInVubG9hZEV2ZW50U3RhcnRcIjtcbn0pKFBlcmZvcm1hbmNlVGltaW5nTmFtZXMgfHwgKFBlcmZvcm1hbmNlVGltaW5nTmFtZXMgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXNlZCB0byBub3JtYWxpemUgcmVsYXRpdmUgVVJMc1xudmFyIHVybE5vcm1hbGl6aW5nQW5jaG9yO1xuZnVuY3Rpb24gZ2V0VXJsTm9ybWFsaXppbmdBbmNob3IoKSB7XG4gICAgaWYgKCF1cmxOb3JtYWxpemluZ0FuY2hvcikge1xuICAgICAgICB1cmxOb3JtYWxpemluZ0FuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybE5vcm1hbGl6aW5nQW5jaG9yO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gYmUgYWJsZSB0byB1c2UgZW51bSBhcyB0eXBlZCBrZXkgaW4gdHlwZSBhbmQgaW4gaW50ZXJmYWNlIHdoZW4gdXNpbmcgZm9yRWFjaFxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGtleVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc3RhcnRpbmcgYW4gZXZlbnQgb24gc3BhbiBiYXNlZCBvbiB7QGxpbmsgUGVyZm9ybWFuY2VFbnRyaWVzfVxuICogQHBhcmFtIHNwYW5cbiAqIEBwYXJhbSBwZXJmb3JtYW5jZU5hbWUgbmFtZSBvZiBwZXJmb3JtYW5jZSBlbnRyeSBmb3IgdGltZSBzdGFydFxuICogQHBhcmFtIGVudHJpZXNcbiAqIEBwYXJhbSByZWZQZXJmTmFtZSBuYW1lIG9mIHBlcmZvcm1hbmNlIGVudHJ5IHRvIHVzZSBmb3IgcmVmZXJlbmNlXG4gKi9cbmZ1bmN0aW9uIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgcGVyZm9ybWFuY2VOYW1lLCBlbnRyaWVzLCByZWZQZXJmTmFtZSkge1xuICAgIHZhciBwZXJmVGltZSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgcmVmVGltZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzS2V5KGVudHJpZXMsIHBlcmZvcm1hbmNlTmFtZSkgJiZcbiAgICAgICAgdHlwZW9mIGVudHJpZXNbcGVyZm9ybWFuY2VOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcGVyZlRpbWUgPSBlbnRyaWVzW3BlcmZvcm1hbmNlTmFtZV07XG4gICAgfVxuICAgIHZhciByZWZOYW1lID0gcmVmUGVyZk5hbWUgfHwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVDtcbiAgICAvLyBVc2UgYSByZWZlcmVuY2UgdGltZSB3aGljaCBpcyB0aGUgZWFybGllc3QgcG9zc2libGUgdmFsdWUgc28gdGhhdCB0aGUgcGVyZm9ybWFuY2UgdGltaW5ncyB0aGF0IGFyZSBlYXJsaWVyIHNob3VsZCBub3QgYmUgYWRkZWRcbiAgICAvLyB1c2luZyBGRVRDSCBTVEFSVCB0aW1lIGluIGNhc2Ugbm8gcmVmZXJlbmNlIGlzIHByb3ZpZGVkXG4gICAgaWYgKGhhc0tleShlbnRyaWVzLCByZWZOYW1lKSAmJiB0eXBlb2YgZW50cmllc1tyZWZOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmVmVGltZSA9IGVudHJpZXNbcmVmTmFtZV07XG4gICAgfVxuICAgIGlmIChwZXJmVGltZSAhPT0gdW5kZWZpbmVkICYmIHJlZlRpbWUgIT09IHVuZGVmaW5lZCAmJiBwZXJmVGltZSA+PSByZWZUaW1lKSB7XG4gICAgICAgIHNwYW4uYWRkRXZlbnQocGVyZm9ybWFuY2VOYW1lLCBwZXJmVGltZSk7XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFkZGluZyBuZXR3b3JrIGV2ZW50cyBhbmQgY29udGVudCBsZW5ndGggYXR0cmlidXRlc1xuICogQHBhcmFtIHNwYW5cbiAqIEBwYXJhbSByZXNvdXJjZVxuICogQHBhcmFtIGlnbm9yZU5ldHdvcmtFdmVudHNcbiAqL1xuZnVuY3Rpb24gYWRkU3Bhbk5ldHdvcmtFdmVudHMoc3BhbiwgcmVzb3VyY2UsIGlnbm9yZU5ldHdvcmtFdmVudHMpIHtcbiAgICBpZiAoaWdub3JlTmV0d29ya0V2ZW50cyA9PT0gdm9pZCAwKSB7IGlnbm9yZU5ldHdvcmtFdmVudHMgPSBmYWxzZTsgfVxuICAgIGlmICghaWdub3JlTmV0d29ya0V2ZW50cykge1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50KHNwYW4sIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMuRkVUQ0hfU1RBUlQsIHJlc291cmNlKTtcbiAgICAgICAgYWRkU3Bhbk5ldHdvcmtFdmVudChzcGFuLCBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLkRPTUFJTl9MT09LVVBfU1RBUlQsIHJlc291cmNlKTtcbiAgICAgICAgYWRkU3Bhbk5ldHdvcmtFdmVudChzcGFuLCBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLkRPTUFJTl9MT09LVVBfRU5ELCByZXNvdXJjZSk7XG4gICAgICAgIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5DT05ORUNUX1NUQVJULCByZXNvdXJjZSk7XG4gICAgICAgIGlmIChoYXNLZXkocmVzb3VyY2UsICduYW1lJykgJiZcbiAgICAgICAgICAgIHJlc291cmNlWyduYW1lJ10uc3RhcnRzV2l0aCgnaHR0cHM6JykpIHtcbiAgICAgICAgICAgIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5TRUNVUkVfQ09OTkVDVElPTl9TVEFSVCwgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5DT05ORUNUX0VORCwgcmVzb3VyY2UpO1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50KHNwYW4sIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVRVUVTVF9TVEFSVCwgcmVzb3VyY2UpO1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50KHNwYW4sIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfU1RBUlQsIHJlc291cmNlKTtcbiAgICAgICAgYWRkU3Bhbk5ldHdvcmtFdmVudChzcGFuLCBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLlJFU1BPTlNFX0VORCwgcmVzb3VyY2UpO1xuICAgIH1cbiAgICB2YXIgZW5jb2RlZExlbmd0aCA9IHJlc291cmNlW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuRU5DT0RFRF9CT0RZX1NJWkVdO1xuICAgIGlmIChlbmNvZGVkTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQVRUUlNfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSCwgZW5jb2RlZExlbmd0aCk7XG4gICAgfVxuICAgIHZhciBkZWNvZGVkTGVuZ3RoID0gcmVzb3VyY2VbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5ERUNPREVEX0JPRFlfU0laRV07XG4gICAgLy8gU3BlYzogTm90IHNldCBpZiB0cmFuc3BvcnQgZW5jb2Rpbmcgbm90IHVzZWQgKGluIHdoaWNoIGNhc2UgZW5jb2RlZCBhbmQgZGVjb2RlZCBzaXplcyBtYXRjaClcbiAgICBpZiAoZGVjb2RlZExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIGVuY29kZWRMZW5ndGggIT09IGRlY29kZWRMZW5ndGgpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQVRUUlNfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQsIGRlY29kZWRMZW5ndGgpO1xuICAgIH1cbn1cbi8qKlxuICogc29ydCByZXNvdXJjZXMgYnkgc3RhcnRUaW1lXG4gKiBAcGFyYW0gZmlsdGVyZWRSZXNvdXJjZXNcbiAqL1xuZnVuY3Rpb24gc29ydFJlc291cmNlcyhmaWx0ZXJlZFJlc291cmNlcykge1xuICAgIHJldHVybiBmaWx0ZXJlZFJlc291cmNlcy5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgdmFyIHZhbHVlQSA9IGFbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVF07XG4gICAgICAgIHZhciB2YWx1ZUIgPSBiW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuRkVUQ0hfU1RBUlRdO1xuICAgICAgICBpZiAodmFsdWVBID4gdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9KTtcbn1cbi8qKiBSZXR1cm5zIHRoZSBvcmlnaW4gaWYgcHJlc2VudCAoaWYgaW4gYnJvd3NlciBjb250ZXh0KS4gKi9cbmZ1bmN0aW9uIGdldE9yaWdpbigpIHtcbiAgICByZXR1cm4gdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLm9yaWdpbiA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogR2V0IGNsb3Nlc3QgcGVyZm9ybWFuY2UgcmVzb3VyY2UgaWdub3JpbmcgdGhlIHJlc291cmNlcyB0aGF0IGhhdmUgYmVlblxuICogYWxyZWFkeSB1c2VkLlxuICogQHBhcmFtIHNwYW5VcmxcbiAqIEBwYXJhbSBzdGFydFRpbWVIUlxuICogQHBhcmFtIGVuZFRpbWVIUlxuICogQHBhcmFtIHJlc291cmNlc1xuICogQHBhcmFtIGlnbm9yZWRSZXNvdXJjZXNcbiAqIEBwYXJhbSBpbml0aWF0b3JUeXBlXG4gKi9cbmZ1bmN0aW9uIGdldFJlc291cmNlKHNwYW5VcmwsIHN0YXJ0VGltZUhSLCBlbmRUaW1lSFIsIHJlc291cmNlcywgaWdub3JlZFJlc291cmNlcywgaW5pdGlhdG9yVHlwZSkge1xuICAgIGlmIChpZ25vcmVkUmVzb3VyY2VzID09PSB2b2lkIDApIHsgaWdub3JlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0KCk7IH1cbiAgICAvLyBkZS1yZWxhdGl2aXplIHRoZSBVUkwgYmVmb3JlIHVzYWdlIChkb2VzIG5vIGhhcm0gdG8gYWJzb2x1dGUgVVJMcylcbiAgICB2YXIgcGFyc2VkU3BhblVybCA9IHBhcnNlVXJsKHNwYW5VcmwpO1xuICAgIHNwYW5VcmwgPSBwYXJzZWRTcGFuVXJsLnRvU3RyaW5nKCk7XG4gICAgdmFyIGZpbHRlcmVkUmVzb3VyY2VzID0gZmlsdGVyUmVzb3VyY2VzRm9yU3BhbihzcGFuVXJsLCBzdGFydFRpbWVIUiwgZW5kVGltZUhSLCByZXNvdXJjZXMsIGlnbm9yZWRSZXNvdXJjZXMsIGluaXRpYXRvclR5cGUpO1xuICAgIGlmIChmaWx0ZXJlZFJlc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChmaWx0ZXJlZFJlc291cmNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0OiBmaWx0ZXJlZFJlc291cmNlc1swXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHNvcnRlZCA9IHNvcnRSZXNvdXJjZXMoZmlsdGVyZWRSZXNvdXJjZXMpO1xuICAgIGlmIChwYXJzZWRTcGFuVXJsLm9yaWdpbiAhPT0gZ2V0T3JpZ2luKCkgJiYgc29ydGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGNvcnNQcmVGbGlnaHRSZXF1ZXN0ID0gc29ydGVkWzBdO1xuICAgICAgICB2YXIgbWFpblJlcXVlc3QgPSBmaW5kTWFpblJlcXVlc3Qoc29ydGVkLCBjb3JzUHJlRmxpZ2h0UmVxdWVzdFtQZXJmb3JtYW5jZVRpbWluZ05hbWVzLlJFU1BPTlNFX0VORF0sIGVuZFRpbWVIUik7XG4gICAgICAgIHZhciByZXNwb25zZUVuZCA9IGNvcnNQcmVGbGlnaHRSZXF1ZXN0W1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfRU5EXTtcbiAgICAgICAgdmFyIGZldGNoU3RhcnQgPSBtYWluUmVxdWVzdFtQZXJmb3JtYW5jZVRpbWluZ05hbWVzLkZFVENIX1NUQVJUXTtcbiAgICAgICAgLy8gbm8gY29yc1ByZUZsaWdodFJlcXVlc3RcbiAgICAgICAgaWYgKGZldGNoU3RhcnQgPCByZXNwb25zZUVuZCkge1xuICAgICAgICAgICAgbWFpblJlcXVlc3QgPSBjb3JzUHJlRmxpZ2h0UmVxdWVzdDtcbiAgICAgICAgICAgIGNvcnNQcmVGbGlnaHRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3JzUHJlRmxpZ2h0UmVxdWVzdDogY29yc1ByZUZsaWdodFJlcXVlc3QsXG4gICAgICAgICAgICBtYWluUmVxdWVzdDogbWFpblJlcXVlc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFpblJlcXVlc3Q6IGZpbHRlcmVkUmVzb3VyY2VzWzBdLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8qKlxuICogV2lsbCBmaW5kIHRoZSBtYWluIHJlcXVlc3Qgc2tpcHBpbmcgdGhlIGNvcnMgcHJlIGZsaWdodCByZXF1ZXN0c1xuICogQHBhcmFtIHJlc291cmNlc1xuICogQHBhcmFtIGNvcnNQcmVGbGlnaHRSZXF1ZXN0RW5kVGltZVxuICogQHBhcmFtIHNwYW5FbmRUaW1lSFJcbiAqL1xuZnVuY3Rpb24gZmluZE1haW5SZXF1ZXN0KHJlc291cmNlcywgY29yc1ByZUZsaWdodFJlcXVlc3RFbmRUaW1lLCBzcGFuRW5kVGltZUhSKSB7XG4gICAgdmFyIHNwYW5FbmRUaW1lID0gaHJUaW1lVG9OYW5vc2Vjb25kcyhzcGFuRW5kVGltZUhSKTtcbiAgICB2YXIgbWluVGltZSA9IGhyVGltZVRvTmFub3NlY29uZHModGltZUlucHV0VG9IclRpbWUoY29yc1ByZUZsaWdodFJlcXVlc3RFbmRUaW1lKSk7XG4gICAgdmFyIG1haW5SZXF1ZXN0ID0gcmVzb3VyY2VzWzFdO1xuICAgIHZhciBiZXN0R2FwO1xuICAgIHZhciBsZW5ndGggPSByZXNvdXJjZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlc291cmNlID0gcmVzb3VyY2VzW2ldO1xuICAgICAgICB2YXIgcmVzb3VyY2VTdGFydFRpbWUgPSBoclRpbWVUb05hbm9zZWNvbmRzKHRpbWVJbnB1dFRvSHJUaW1lKHJlc291cmNlW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuRkVUQ0hfU1RBUlRdKSk7XG4gICAgICAgIHZhciByZXNvdXJjZUVuZFRpbWUgPSBoclRpbWVUb05hbm9zZWNvbmRzKHRpbWVJbnB1dFRvSHJUaW1lKHJlc291cmNlW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfRU5EXSkpO1xuICAgICAgICB2YXIgY3VycmVudEdhcCA9IHNwYW5FbmRUaW1lIC0gcmVzb3VyY2VFbmRUaW1lO1xuICAgICAgICBpZiAocmVzb3VyY2VTdGFydFRpbWUgPj0gbWluVGltZSAmJiAoIWJlc3RHYXAgfHwgY3VycmVudEdhcCA8IGJlc3RHYXApKSB7XG4gICAgICAgICAgICBiZXN0R2FwID0gY3VycmVudEdhcDtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0ID0gcmVzb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1haW5SZXF1ZXN0O1xufVxuLyoqXG4gKiBGaWx0ZXIgYWxsIHJlc291cmNlcyB0aGF0IGhhcyBzdGFydGVkIGFuZCBmaW5pc2hlZCBhY2NvcmRpbmcgdG8gc3BhbiBzdGFydCB0aW1lIGFuZCBlbmQgdGltZS5cbiAqICAgICBJdCB3aWxsIHJldHVybiB0aGUgY2xvc2VzdCByZXNvdXJjZSB0byBhIHN0YXJ0IHRpbWVcbiAqIEBwYXJhbSBzcGFuVXJsXG4gKiBAcGFyYW0gc3RhcnRUaW1lSFJcbiAqIEBwYXJhbSBlbmRUaW1lSFJcbiAqIEBwYXJhbSByZXNvdXJjZXNcbiAqIEBwYXJhbSBpZ25vcmVkUmVzb3VyY2VzXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclJlc291cmNlc0ZvclNwYW4oc3BhblVybCwgc3RhcnRUaW1lSFIsIGVuZFRpbWVIUiwgcmVzb3VyY2VzLCBpZ25vcmVkUmVzb3VyY2VzLCBpbml0aWF0b3JUeXBlKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IGhyVGltZVRvTmFub3NlY29uZHMoc3RhcnRUaW1lSFIpO1xuICAgIHZhciBlbmRUaW1lID0gaHJUaW1lVG9OYW5vc2Vjb25kcyhlbmRUaW1lSFIpO1xuICAgIHZhciBmaWx0ZXJlZFJlc291cmNlcyA9IHJlc291cmNlcy5maWx0ZXIoZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgIHZhciByZXNvdXJjZVN0YXJ0VGltZSA9IGhyVGltZVRvTmFub3NlY29uZHModGltZUlucHV0VG9IclRpbWUocmVzb3VyY2VbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVF0pKTtcbiAgICAgICAgdmFyIHJlc291cmNlRW5kVGltZSA9IGhyVGltZVRvTmFub3NlY29uZHModGltZUlucHV0VG9IclRpbWUocmVzb3VyY2VbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5SRVNQT05TRV9FTkRdKSk7XG4gICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5pdGlhdG9yVHlwZS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgKGluaXRpYXRvclR5cGUgfHwgJ3htbGh0dHByZXF1ZXN0JykgJiZcbiAgICAgICAgICAgIHJlc291cmNlLm5hbWUgPT09IHNwYW5VcmwgJiZcbiAgICAgICAgICAgIHJlc291cmNlU3RhcnRUaW1lID49IHN0YXJ0VGltZSAmJlxuICAgICAgICAgICAgcmVzb3VyY2VFbmRUaW1lIDw9IGVuZFRpbWUpO1xuICAgIH0pO1xuICAgIGlmIChmaWx0ZXJlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlcmVkUmVzb3VyY2VzID0gZmlsdGVyZWRSZXNvdXJjZXMuZmlsdGVyKGZ1bmN0aW9uIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuICFpZ25vcmVkUmVzb3VyY2VzLmhhcyhyZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRSZXNvdXJjZXM7XG59XG4vKipcbiAqIFBhcnNlcyB1cmwgdXNpbmcgVVJMIGNvbnN0cnVjdG9yIG9yIGZhbGxiYWNrIHRvIGFuY2hvciBlbGVtZW50LlxuICogQHBhcmFtIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmwsIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZG9jdW1lbnQuYmFzZVVSSVxuICAgICAgICAgICAgOiB0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnIC8vIFNvbWUgSlMgcnVudGltZXMgKGUuZy4gRGVubykgZG9uJ3QgZGVmaW5lIHRoaXNcbiAgICAgICAgICAgICAgICA/IGxvY2F0aW9uLmhyZWZcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gZ2V0VXJsTm9ybWFsaXppbmdBbmNob3IoKTtcbiAgICBlbGVtZW50LmhyZWYgPSB1cmw7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIFBhcnNlcyB1cmwgdXNpbmcgVVJMIGNvbnN0cnVjdG9yIG9yIGZhbGxiYWNrIHRvIGFuY2hvciBlbGVtZW50IGFuZCBzZXJpYWxpemVcbiAqIGl0IHRvIGEgc3RyaW5nLlxuICpcbiAqIFBlcmZvcm1zIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdXJscy1hbmQtZmV0Y2hpbmcuaHRtbCNwYXJzZS1hLXVybFxuICpcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVXJsKHVybCkge1xuICAgIHZhciB1cmxMaWtlID0gcGFyc2VVcmwodXJsKTtcbiAgICByZXR1cm4gdXJsTGlrZS5ocmVmO1xufVxuLyoqXG4gKiBHZXQgZWxlbWVudCBYUGF0aFxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCBlbGVtZW50XG4gKiBAcGFyYW0gb3B0aW1pc2VkIC0gd2hlbiBpZCBhdHRyaWJ1dGUgb2YgZWxlbWVudCBpcyBwcmVzZW50IHRoZSB4cGF0aCBjYW4gYmVcbiAqIHNpbXBsaWZpZWQgdG8gY29udGFpbiBpZFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZnVuY3Rpb24gZ2V0RWxlbWVudFhQYXRoKHRhcmdldCwgb3B0aW1pc2VkKSB7XG4gICAgaWYgKHRhcmdldC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIHZhciB0YXJnZXRWYWx1ZSA9IGdldE5vZGVWYWx1ZSh0YXJnZXQsIG9wdGltaXNlZCk7XG4gICAgaWYgKG9wdGltaXNlZCAmJiB0YXJnZXRWYWx1ZS5pbmRleE9mKCdAaWQnKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlO1xuICAgIH1cbiAgICB2YXIgeHBhdGggPSAnJztcbiAgICBpZiAodGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgeHBhdGggKz0gZ2V0RWxlbWVudFhQYXRoKHRhcmdldC5wYXJlbnROb2RlLCBmYWxzZSk7XG4gICAgfVxuICAgIHhwYXRoICs9IHRhcmdldFZhbHVlO1xuICAgIHJldHVybiB4cGF0aDtcbn1cbi8qKlxuICogZ2V0IG5vZGUgaW5kZXggd2l0aGluIHRoZSBzaWJsaW5nc1xuICogQHBhcmFtIHRhcmdldFxuICovXG5mdW5jdGlvbiBnZXROb2RlSW5kZXgodGFyZ2V0KSB7XG4gICAgaWYgKCF0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWRUeXBlcyA9IFt0YXJnZXQubm9kZVR5cGVdO1xuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT09IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgIGFsbG93ZWRUeXBlcy5wdXNoKE5vZGUuVEVYVF9OT0RFKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzID0gQXJyYXkuZnJvbSh0YXJnZXQucGFyZW50Tm9kZS5jaGlsZE5vZGVzKTtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgbG9jYWxOYW1lID0gZWxlbWVudC5sb2NhbE5hbWU7XG4gICAgICAgIHJldHVybiAoYWxsb3dlZFR5cGVzLmluZGV4T2YoZWxlbWVudC5ub2RlVHlwZSkgPj0gMCAmJlxuICAgICAgICAgICAgbG9jYWxOYW1lID09PSB0YXJnZXQubG9jYWxOYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID49IDEpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KSArIDE7IC8vIHhwYXRoIHN0YXJ0cyBmcm9tIDFcbiAgICB9XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIG90aGVyIHNpbWlsYXIgY2hpbGQgeHBhdGggZG9lc24ndCBuZWVkIGluZGV4XG4gICAgcmV0dXJuIDA7XG59XG4vKipcbiAqIGdldCBub2RlIHZhbHVlIGZvciB4cGF0aFxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGltaXNlZFxuICovXG5mdW5jdGlvbiBnZXROb2RlVmFsdWUodGFyZ2V0LCBvcHRpbWlzZWQpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSB0YXJnZXQubm9kZVR5cGU7XG4gICAgdmFyIGluZGV4ID0gZ2V0Tm9kZUluZGV4KHRhcmdldCk7XG4gICAgdmFyIG5vZGVWYWx1ZSA9ICcnO1xuICAgIGlmIChub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgdmFyIGlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgaWYgKG9wdGltaXNlZCAmJiBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLy8qW0BpZD1cXFwiXCIgKyBpZCArIFwiXFxcIl1cIjtcbiAgICAgICAgfVxuICAgICAgICBub2RlVmFsdWUgPSB0YXJnZXQubG9jYWxOYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHxcbiAgICAgICAgbm9kZVR5cGUgPT09IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgIG5vZGVWYWx1ZSA9ICd0ZXh0KCknO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlVHlwZSA9PT0gTm9kZS5DT01NRU5UX05PREUpIHtcbiAgICAgICAgbm9kZVZhbHVlID0gJ2NvbW1lbnQoKSc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIGlmIGluZGV4IGlzIDEgaXQgY2FuIGJlIG9taXR0ZWQgaW4geHBhdGhcbiAgICBpZiAobm9kZVZhbHVlICYmIGluZGV4ID4gMSkge1xuICAgICAgICByZXR1cm4gXCIvXCIgKyBub2RlVmFsdWUgKyBcIltcIiArIGluZGV4ICsgXCJdXCI7XG4gICAgfVxuICAgIHJldHVybiBcIi9cIiArIG5vZGVWYWx1ZTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRyYWNlIGhlYWRlcnMgc2hvdWxkIGJlIHByb3BhZ2F0ZWRcbiAqIEBwYXJhbSBzcGFuVXJsXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMoc3BhblVybCwgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJscykge1xuICAgIHZhciBwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMgPSBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzIHx8IFtdO1xuICAgIGlmICh0eXBlb2YgcHJvcGFnYXRlVHJhY2VIZWFkZXJVcmxzID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJVcmxzID0gW3Byb3BhZ2F0ZVRyYWNlSGVhZGVyVXJsc107XG4gICAgfVxuICAgIHZhciBwYXJzZWRTcGFuVXJsID0gcGFyc2VVcmwoc3BhblVybCk7XG4gICAgaWYgKHBhcnNlZFNwYW5Vcmwub3JpZ2luID09PSBnZXRPcmlnaW4oKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMuc29tZShmdW5jdGlvbiAocHJvcGFnYXRlVHJhY2VIZWFkZXJVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmxNYXRjaGVzKHNwYW5VcmwsIHByb3BhZ2F0ZVRyYWNlSGVhZGVyVXJsKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBQZXJmb3JtYW5jZVRpbWluZ05hbWVzIGFzIFAsIGFkZFNwYW5OZXR3b3JrRXZlbnQgYXMgYSwgYWRkU3Bhbk5ldHdvcmtFdmVudHMgYXMgYiwgZ2V0UmVzb3VyY2UgYXMgYywgc29ydFJlc291cmNlcyBhcyBkLCBnZXRFbGVtZW50WFBhdGggYXMgZywgaGFzS2V5IGFzIGgsIG5vcm1hbGl6ZVVybCBhcyBuLCBwYXJzZVVybCBhcyBwLCBzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMgYXMgcyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsR0FBdUMsS0FBS0MsR0FBb0QsS0FBS0MsR0FBcUIsS0FBS0MsR0FBbUIsS0FBS0MsU0FBa0I7QUFpQnZMLElBQUlDO0FBQUEsQ0FDSCxTQUFVQSxHQUF3QjtBQUMvQixFQUFBQSxFQUF1QixjQUFpQixjQUN4Q0EsRUFBdUIsZ0JBQW1CLGdCQUMxQ0EsRUFBdUIsb0JBQXVCLG1CQUM5Q0EsRUFBdUIsZUFBa0IsZUFDekNBLEVBQXVCLCtCQUFrQyw0QkFDekRBLEVBQXVCLGlDQUFvQyw4QkFDM0RBLEVBQXVCLGtCQUFxQixrQkFDNUNBLEVBQXVCLG9CQUF1QixtQkFDOUNBLEVBQXVCLHNCQUF5QixxQkFDaERBLEVBQXVCLG9CQUF1QixtQkFDOUNBLEVBQXVCLGNBQWlCLGNBQ3hDQSxFQUF1QixpQkFBb0IsZ0JBQzNDQSxFQUF1QixtQkFBc0Isa0JBQzdDQSxFQUF1QixtQkFBc0IsbUJBQzdDQSxFQUF1QixlQUFrQixlQUN6Q0EsRUFBdUIsaUJBQW9CLGlCQUMzQ0EsRUFBdUIsZ0JBQW1CLGdCQUMxQ0EsRUFBdUIs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QThCO0FBQ3hFLE1BQUlDLElBQTJCRCxLQUFnQyxDQUFDO0FBQ2hFLEdBQUksT0FBT0MsS0FBNkIsWUFDcENBLGFBQW9DLFlBQ3BDQSxJQUEyQixDQUFDQSxDQUF3QjtBQUV4RCxNQUFJeEMsSUFBZ0JDLEVBQVNQLENBQU87QUFDcEMsU0FBSU0sRUFBYyxXQUFXUixFQUFVLElBQzVCLEtBR0FnRCxFQUF5QixLQUFLLFNBQVVDLEdBQXlCO0FBQ3BFLFdBQU8zRSxFQUFXNEIsR0FBUytDLENBQXVCO0FBQUEsRUFDdEQsQ0FBQztBQUVUOyIsCiAgIm5hbWVzIjogWyJTRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIIiwgIlNFTUFUVFJTX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEIiwgImhyVGltZVRvTmFub3NlY29uZHMiLCAidGltZUlucHV0VG9IclRpbWUiLCAidXJsTWF0Y2hlcyIsICJQZXJmb3JtYW5jZVRpbWluZ05hbWVzIiwgInVybE5vcm1hbGl6aW5nQW5jaG9yIiwgImdldFVybE5vcm1hbGl6aW5nQW5jaG9yIiwgImhhc0tleSIsICJvYmoiLCAia2V5IiwgImFkZFNwYW5OZXR3b3JrRXZlbnQiLCAic3BhbiIsICJwZXJmb3JtYW5jZU5hbWUiLCAiZW50cmllcyIsICJyZWZQZXJmTmFtZSIsICJwZXJmVGltZSIsICJyZWZUaW1lIiwgInJlZk5hbWUiLCAiYWRkU3Bhbk5ldHdvcmtFdmVudHMiLCAicmVzb3VyY2UiLCAiaWdub3JlTmV0d29ya0V2ZW50cyIsICJlbmNvZGVkTGVuZ3RoIiwgImRlY29kZWRMZW5ndGgiLCAic29ydFJlc291cmNlcyIsICJmaWx0ZXJlZFJlc291cmNlcyIsICJhIiwgImIiLCAidmFsdWVBIiwgInZhbHVlQiIsICJnZXRPcmlnaW4iLCAiZ2V0UmVzb3VyY2UiLCAic3BhblVybCIsICJzdGFydFRpbWVIUiIsICJlbmRUaW1lSFIiLCAicmVzb3VyY2VzIiwgImlnbm9yZWRSZXNvdXJjZXMiLCAiaW5pdGlhdG9yVHlwZSIsICJwYXJzZWRTcGFuVXJsIiwgInBhcnNlVXJsIiwgImZpbHRlclJlc291cmNlc0ZvclNwYW4iLCAic29ydGVkIiwgImNvcnNQcmVGbGlnaHRSZXF1ZXN0IiwgIm1haW5SZXF1ZXN0IiwgImZpbmRNYWluUmVxdWVzdCIsICJyZXNwb25zZUVuZCIsICJmZXRjaFN0YXJ0IiwgImNvcnNQcmVGbGlnaHRSZXF1ZXN0RW5kVGltZSIsICJzcGFuRW5kVGltZUhSIiwgInNwYW5FbmRUaW1lIiwgIm1pblRpbWUiLCAiYmVzdEdhcCIsICJsZW5ndGgiLCAicmVzb3VyY2VTdGFydFRpbWUiLCAicmVzb3VyY2VFbmRUaW1lIiwgImN1cnJlbnRHYXAiLCAic3RhcnRUaW1lIiwgImVuZFRpbWUiLCAidXJsIiwgImVsZW1lbnQiLCAibm9ybWFsaXplVXJsIiwgInVybExpa2UiLCAiZ2V0RWxlbWVudFhQYXRoIiwgInRhcmdldCIsICJvcHRpbWlzZWQiLCAidGFyZ2V0VmFsdWUiLCAiZ2V0Tm9kZVZhbHVlIiwgInhwYXRoIiwgImdldE5vZGVJbmRleCIsICJhbGxvd2VkVHlwZXMiLCAiZWxlbWVudHMiLCAibG9jYWxOYW1lIiwgIm5vZGVUeXBlIiwgImluZGV4IiwgIm5vZGVWYWx1ZSIsICJpZCIsICJzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMiLCAicHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJscyIsICJwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMiLCAicHJvcGFnYXRlVHJhY2VIZWFkZXJVcmwiXQp9Cg==
142
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXRpbHMtIX57MDA4fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFMgYXMgU0VNQVRUUlNfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSCwgYSBhcyBTRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCwgaCBhcyBoclRpbWVUb05hbm9zZWNvbmRzLCB0IGFzIHRpbWVJbnB1dFRvSHJUaW1lLCB1IGFzIHVybE1hdGNoZXMgfSBmcm9tICcuL3VybC0hfnswMDl9fi5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcztcbihmdW5jdGlvbiAoUGVyZm9ybWFuY2VUaW1pbmdOYW1lcykge1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJDT05ORUNUX0VORFwiXSA9IFwiY29ubmVjdEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJDT05ORUNUX1NUQVJUXCJdID0gXCJjb25uZWN0U3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiREVDT0RFRF9CT0RZX1NJWkVcIl0gPSBcImRlY29kZWRCb2R5U2l6ZVwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJET01fQ09NUExFVEVcIl0gPSBcImRvbUNvbXBsZXRlXCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkRPTV9DT05URU5UX0xPQURFRF9FVkVOVF9FTkRcIl0gPSBcImRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJET01fQ09OVEVOVF9MT0FERURfRVZFTlRfU1RBUlRcIl0gPSBcImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkRPTV9JTlRFUkFDVElWRVwiXSA9IFwiZG9tSW50ZXJhY3RpdmVcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiRE9NQUlOX0xPT0tVUF9FTkRcIl0gPSBcImRvbWFpbkxvb2t1cEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJET01BSU5fTE9PS1VQX1NUQVJUXCJdID0gXCJkb21haW5Mb29rdXBTdGFydFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJFTkNPREVEX0JPRFlfU0laRVwiXSA9IFwiZW5jb2RlZEJvZHlTaXplXCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkZFVENIX1NUQVJUXCJdID0gXCJmZXRjaFN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIkxPQURfRVZFTlRfRU5EXCJdID0gXCJsb2FkRXZlbnRFbmRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiTE9BRF9FVkVOVF9TVEFSVFwiXSA9IFwibG9hZEV2ZW50U3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiTkFWSUdBVElPTl9TVEFSVFwiXSA9IFwibmF2aWdhdGlvblN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIlJFRElSRUNUX0VORFwiXSA9IFwicmVkaXJlY3RFbmRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiUkVESVJFQ1RfU1RBUlRcIl0gPSBcInJlZGlyZWN0U3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiUkVRVUVTVF9TVEFSVFwiXSA9IFwicmVxdWVzdFN0YXJ0XCI7XG4gICAgUGVyZm9ybWFuY2VUaW1pbmdOYW1lc1tcIlJFU1BPTlNFX0VORFwiXSA9IFwicmVzcG9uc2VFbmRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiUkVTUE9OU0VfU1RBUlRcIl0gPSBcInJlc3BvbnNlU3RhcnRcIjtcbiAgICBQZXJmb3JtYW5jZVRpbWluZ05hbWVzW1wiU0VDVVJFX0NPTk5FQ1RJT05fU1RBUlRcIl0gPSBcInNlY3VyZUNvbm5lY3Rpb25TdGFydFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJVTkxPQURfRVZFTlRfRU5EXCJdID0gXCJ1bmxvYWRFdmVudEVuZFwiO1xuICAgIFBlcmZvcm1hbmNlVGltaW5nTmFtZXNbXCJVTkxPQURfRVZFTlRfU1RBUlRcIl0gPSBcInVubG9hZEV2ZW50U3RhcnRcIjtcbn0pKFBlcmZvcm1hbmNlVGltaW5nTmFtZXMgfHwgKFBlcmZvcm1hbmNlVGltaW5nTmFtZXMgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXNlZCB0byBub3JtYWxpemUgcmVsYXRpdmUgVVJMc1xudmFyIHVybE5vcm1hbGl6aW5nQW5jaG9yO1xuZnVuY3Rpb24gZ2V0VXJsTm9ybWFsaXppbmdBbmNob3IoKSB7XG4gICAgaWYgKCF1cmxOb3JtYWxpemluZ0FuY2hvcikge1xuICAgICAgICB1cmxOb3JtYWxpemluZ0FuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybE5vcm1hbGl6aW5nQW5jaG9yO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gYmUgYWJsZSB0byB1c2UgZW51bSBhcyB0eXBlZCBrZXkgaW4gdHlwZSBhbmQgaW4gaW50ZXJmYWNlIHdoZW4gdXNpbmcgZm9yRWFjaFxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGtleVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBvYmo7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc3RhcnRpbmcgYW4gZXZlbnQgb24gc3BhbiBiYXNlZCBvbiB7QGxpbmsgUGVyZm9ybWFuY2VFbnRyaWVzfVxuICogQHBhcmFtIHNwYW5cbiAqIEBwYXJhbSBwZXJmb3JtYW5jZU5hbWUgbmFtZSBvZiBwZXJmb3JtYW5jZSBlbnRyeSBmb3IgdGltZSBzdGFydFxuICogQHBhcmFtIGVudHJpZXNcbiAqIEBwYXJhbSByZWZQZXJmTmFtZSBuYW1lIG9mIHBlcmZvcm1hbmNlIGVudHJ5IHRvIHVzZSBmb3IgcmVmZXJlbmNlXG4gKi9cbmZ1bmN0aW9uIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgcGVyZm9ybWFuY2VOYW1lLCBlbnRyaWVzLCByZWZQZXJmTmFtZSkge1xuICAgIHZhciBwZXJmVGltZSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgcmVmVGltZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzS2V5KGVudHJpZXMsIHBlcmZvcm1hbmNlTmFtZSkgJiZcbiAgICAgICAgdHlwZW9mIGVudHJpZXNbcGVyZm9ybWFuY2VOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcGVyZlRpbWUgPSBlbnRyaWVzW3BlcmZvcm1hbmNlTmFtZV07XG4gICAgfVxuICAgIHZhciByZWZOYW1lID0gcmVmUGVyZk5hbWUgfHwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVDtcbiAgICAvLyBVc2UgYSByZWZlcmVuY2UgdGltZSB3aGljaCBpcyB0aGUgZWFybGllc3QgcG9zc2libGUgdmFsdWUgc28gdGhhdCB0aGUgcGVyZm9ybWFuY2UgdGltaW5ncyB0aGF0IGFyZSBlYXJsaWVyIHNob3VsZCBub3QgYmUgYWRkZWRcbiAgICAvLyB1c2luZyBGRVRDSCBTVEFSVCB0aW1lIGluIGNhc2Ugbm8gcmVmZXJlbmNlIGlzIHByb3ZpZGVkXG4gICAgaWYgKGhhc0tleShlbnRyaWVzLCByZWZOYW1lKSAmJiB0eXBlb2YgZW50cmllc1tyZWZOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmVmVGltZSA9IGVudHJpZXNbcmVmTmFtZV07XG4gICAgfVxuICAgIGlmIChwZXJmVGltZSAhPT0gdW5kZWZpbmVkICYmIHJlZlRpbWUgIT09IHVuZGVmaW5lZCAmJiBwZXJmVGltZSA+PSByZWZUaW1lKSB7XG4gICAgICAgIHNwYW4uYWRkRXZlbnQocGVyZm9ybWFuY2VOYW1lLCBwZXJmVGltZSk7XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFkZGluZyBuZXR3b3JrIGV2ZW50cyBhbmQgY29udGVudCBsZW5ndGggYXR0cmlidXRlc1xuICogQHBhcmFtIHNwYW5cbiAqIEBwYXJhbSByZXNvdXJjZVxuICogQHBhcmFtIGlnbm9yZU5ldHdvcmtFdmVudHNcbiAqL1xuZnVuY3Rpb24gYWRkU3Bhbk5ldHdvcmtFdmVudHMoc3BhbiwgcmVzb3VyY2UsIGlnbm9yZU5ldHdvcmtFdmVudHMpIHtcbiAgICBpZiAoaWdub3JlTmV0d29ya0V2ZW50cyA9PT0gdm9pZCAwKSB7IGlnbm9yZU5ldHdvcmtFdmVudHMgPSBmYWxzZTsgfVxuICAgIGlmICghaWdub3JlTmV0d29ya0V2ZW50cykge1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50KHNwYW4sIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMuRkVUQ0hfU1RBUlQsIHJlc291cmNlKTtcbiAgICAgICAgYWRkU3Bhbk5ldHdvcmtFdmVudChzcGFuLCBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLkRPTUFJTl9MT09LVVBfU1RBUlQsIHJlc291cmNlKTtcbiAgICAgICAgYWRkU3Bhbk5ldHdvcmtFdmVudChzcGFuLCBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLkRPTUFJTl9MT09LVVBfRU5ELCByZXNvdXJjZSk7XG4gICAgICAgIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5DT05ORUNUX1NUQVJULCByZXNvdXJjZSk7XG4gICAgICAgIGlmIChoYXNLZXkocmVzb3VyY2UsICduYW1lJykgJiZcbiAgICAgICAgICAgIHJlc291cmNlWyduYW1lJ10uc3RhcnRzV2l0aCgnaHR0cHM6JykpIHtcbiAgICAgICAgICAgIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5TRUNVUkVfQ09OTkVDVElPTl9TVEFSVCwgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNwYW5OZXR3b3JrRXZlbnQoc3BhbiwgUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5DT05ORUNUX0VORCwgcmVzb3VyY2UpO1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50KHNwYW4sIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVRVUVTVF9TVEFSVCwgcmVzb3VyY2UpO1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50KHNwYW4sIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfU1RBUlQsIHJlc291cmNlKTtcbiAgICAgICAgYWRkU3Bhbk5ldHdvcmtFdmVudChzcGFuLCBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLlJFU1BPTlNFX0VORCwgcmVzb3VyY2UpO1xuICAgIH1cbiAgICB2YXIgZW5jb2RlZExlbmd0aCA9IHJlc291cmNlW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuRU5DT0RFRF9CT0RZX1NJWkVdO1xuICAgIGlmIChlbmNvZGVkTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQVRUUlNfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSCwgZW5jb2RlZExlbmd0aCk7XG4gICAgfVxuICAgIHZhciBkZWNvZGVkTGVuZ3RoID0gcmVzb3VyY2VbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5ERUNPREVEX0JPRFlfU0laRV07XG4gICAgLy8gU3BlYzogTm90IHNldCBpZiB0cmFuc3BvcnQgZW5jb2Rpbmcgbm90IHVzZWQgKGluIHdoaWNoIGNhc2UgZW5jb2RlZCBhbmQgZGVjb2RlZCBzaXplcyBtYXRjaClcbiAgICBpZiAoZGVjb2RlZExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIGVuY29kZWRMZW5ndGggIT09IGRlY29kZWRMZW5ndGgpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQVRUUlNfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQsIGRlY29kZWRMZW5ndGgpO1xuICAgIH1cbn1cbi8qKlxuICogc29ydCByZXNvdXJjZXMgYnkgc3RhcnRUaW1lXG4gKiBAcGFyYW0gZmlsdGVyZWRSZXNvdXJjZXNcbiAqL1xuZnVuY3Rpb24gc29ydFJlc291cmNlcyhmaWx0ZXJlZFJlc291cmNlcykge1xuICAgIHJldHVybiBmaWx0ZXJlZFJlc291cmNlcy5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgdmFyIHZhbHVlQSA9IGFbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVF07XG4gICAgICAgIHZhciB2YWx1ZUIgPSBiW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuRkVUQ0hfU1RBUlRdO1xuICAgICAgICBpZiAodmFsdWVBID4gdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9KTtcbn1cbi8qKiBSZXR1cm5zIHRoZSBvcmlnaW4gaWYgcHJlc2VudCAoaWYgaW4gYnJvd3NlciBjb250ZXh0KS4gKi9cbmZ1bmN0aW9uIGdldE9yaWdpbigpIHtcbiAgICByZXR1cm4gdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLm9yaWdpbiA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogR2V0IGNsb3Nlc3QgcGVyZm9ybWFuY2UgcmVzb3VyY2UgaWdub3JpbmcgdGhlIHJlc291cmNlcyB0aGF0IGhhdmUgYmVlblxuICogYWxyZWFkeSB1c2VkLlxuICogQHBhcmFtIHNwYW5VcmxcbiAqIEBwYXJhbSBzdGFydFRpbWVIUlxuICogQHBhcmFtIGVuZFRpbWVIUlxuICogQHBhcmFtIHJlc291cmNlc1xuICogQHBhcmFtIGlnbm9yZWRSZXNvdXJjZXNcbiAqIEBwYXJhbSBpbml0aWF0b3JUeXBlXG4gKi9cbmZ1bmN0aW9uIGdldFJlc291cmNlKHNwYW5VcmwsIHN0YXJ0VGltZUhSLCBlbmRUaW1lSFIsIHJlc291cmNlcywgaWdub3JlZFJlc291cmNlcywgaW5pdGlhdG9yVHlwZSkge1xuICAgIGlmIChpZ25vcmVkUmVzb3VyY2VzID09PSB2b2lkIDApIHsgaWdub3JlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0KCk7IH1cbiAgICAvLyBkZS1yZWxhdGl2aXplIHRoZSBVUkwgYmVmb3JlIHVzYWdlIChkb2VzIG5vIGhhcm0gdG8gYWJzb2x1dGUgVVJMcylcbiAgICB2YXIgcGFyc2VkU3BhblVybCA9IHBhcnNlVXJsKHNwYW5VcmwpO1xuICAgIHNwYW5VcmwgPSBwYXJzZWRTcGFuVXJsLnRvU3RyaW5nKCk7XG4gICAgdmFyIGZpbHRlcmVkUmVzb3VyY2VzID0gZmlsdGVyUmVzb3VyY2VzRm9yU3BhbihzcGFuVXJsLCBzdGFydFRpbWVIUiwgZW5kVGltZUhSLCByZXNvdXJjZXMsIGlnbm9yZWRSZXNvdXJjZXMsIGluaXRpYXRvclR5cGUpO1xuICAgIGlmIChmaWx0ZXJlZFJlc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChmaWx0ZXJlZFJlc291cmNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0OiBmaWx0ZXJlZFJlc291cmNlc1swXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHNvcnRlZCA9IHNvcnRSZXNvdXJjZXMoZmlsdGVyZWRSZXNvdXJjZXMpO1xuICAgIGlmIChwYXJzZWRTcGFuVXJsLm9yaWdpbiAhPT0gZ2V0T3JpZ2luKCkgJiYgc29ydGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGNvcnNQcmVGbGlnaHRSZXF1ZXN0ID0gc29ydGVkWzBdO1xuICAgICAgICB2YXIgbWFpblJlcXVlc3QgPSBmaW5kTWFpblJlcXVlc3Qoc29ydGVkLCBjb3JzUHJlRmxpZ2h0UmVxdWVzdFtQZXJmb3JtYW5jZVRpbWluZ05hbWVzLlJFU1BPTlNFX0VORF0sIGVuZFRpbWVIUik7XG4gICAgICAgIHZhciByZXNwb25zZUVuZCA9IGNvcnNQcmVGbGlnaHRSZXF1ZXN0W1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfRU5EXTtcbiAgICAgICAgdmFyIGZldGNoU3RhcnQgPSBtYWluUmVxdWVzdFtQZXJmb3JtYW5jZVRpbWluZ05hbWVzLkZFVENIX1NUQVJUXTtcbiAgICAgICAgLy8gbm8gY29yc1ByZUZsaWdodFJlcXVlc3RcbiAgICAgICAgaWYgKGZldGNoU3RhcnQgPCByZXNwb25zZUVuZCkge1xuICAgICAgICAgICAgbWFpblJlcXVlc3QgPSBjb3JzUHJlRmxpZ2h0UmVxdWVzdDtcbiAgICAgICAgICAgIGNvcnNQcmVGbGlnaHRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3JzUHJlRmxpZ2h0UmVxdWVzdDogY29yc1ByZUZsaWdodFJlcXVlc3QsXG4gICAgICAgICAgICBtYWluUmVxdWVzdDogbWFpblJlcXVlc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFpblJlcXVlc3Q6IGZpbHRlcmVkUmVzb3VyY2VzWzBdLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8qKlxuICogV2lsbCBmaW5kIHRoZSBtYWluIHJlcXVlc3Qgc2tpcHBpbmcgdGhlIGNvcnMgcHJlIGZsaWdodCByZXF1ZXN0c1xuICogQHBhcmFtIHJlc291cmNlc1xuICogQHBhcmFtIGNvcnNQcmVGbGlnaHRSZXF1ZXN0RW5kVGltZVxuICogQHBhcmFtIHNwYW5FbmRUaW1lSFJcbiAqL1xuZnVuY3Rpb24gZmluZE1haW5SZXF1ZXN0KHJlc291cmNlcywgY29yc1ByZUZsaWdodFJlcXVlc3RFbmRUaW1lLCBzcGFuRW5kVGltZUhSKSB7XG4gICAgdmFyIHNwYW5FbmRUaW1lID0gaHJUaW1lVG9OYW5vc2Vjb25kcyhzcGFuRW5kVGltZUhSKTtcbiAgICB2YXIgbWluVGltZSA9IGhyVGltZVRvTmFub3NlY29uZHModGltZUlucHV0VG9IclRpbWUoY29yc1ByZUZsaWdodFJlcXVlc3RFbmRUaW1lKSk7XG4gICAgdmFyIG1haW5SZXF1ZXN0ID0gcmVzb3VyY2VzWzFdO1xuICAgIHZhciBiZXN0R2FwO1xuICAgIHZhciBsZW5ndGggPSByZXNvdXJjZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlc291cmNlID0gcmVzb3VyY2VzW2ldO1xuICAgICAgICB2YXIgcmVzb3VyY2VTdGFydFRpbWUgPSBoclRpbWVUb05hbm9zZWNvbmRzKHRpbWVJbnB1dFRvSHJUaW1lKHJlc291cmNlW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuRkVUQ0hfU1RBUlRdKSk7XG4gICAgICAgIHZhciByZXNvdXJjZUVuZFRpbWUgPSBoclRpbWVUb05hbm9zZWNvbmRzKHRpbWVJbnB1dFRvSHJUaW1lKHJlc291cmNlW1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfRU5EXSkpO1xuICAgICAgICB2YXIgY3VycmVudEdhcCA9IHNwYW5FbmRUaW1lIC0gcmVzb3VyY2VFbmRUaW1lO1xuICAgICAgICBpZiAocmVzb3VyY2VTdGFydFRpbWUgPj0gbWluVGltZSAmJiAoIWJlc3RHYXAgfHwgY3VycmVudEdhcCA8IGJlc3RHYXApKSB7XG4gICAgICAgICAgICBiZXN0R2FwID0gY3VycmVudEdhcDtcbiAgICAgICAgICAgIG1haW5SZXF1ZXN0ID0gcmVzb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1haW5SZXF1ZXN0O1xufVxuLyoqXG4gKiBGaWx0ZXIgYWxsIHJlc291cmNlcyB0aGF0IGhhcyBzdGFydGVkIGFuZCBmaW5pc2hlZCBhY2NvcmRpbmcgdG8gc3BhbiBzdGFydCB0aW1lIGFuZCBlbmQgdGltZS5cbiAqICAgICBJdCB3aWxsIHJldHVybiB0aGUgY2xvc2VzdCByZXNvdXJjZSB0byBhIHN0YXJ0IHRpbWVcbiAqIEBwYXJhbSBzcGFuVXJsXG4gKiBAcGFyYW0gc3RhcnRUaW1lSFJcbiAqIEBwYXJhbSBlbmRUaW1lSFJcbiAqIEBwYXJhbSByZXNvdXJjZXNcbiAqIEBwYXJhbSBpZ25vcmVkUmVzb3VyY2VzXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclJlc291cmNlc0ZvclNwYW4oc3BhblVybCwgc3RhcnRUaW1lSFIsIGVuZFRpbWVIUiwgcmVzb3VyY2VzLCBpZ25vcmVkUmVzb3VyY2VzLCBpbml0aWF0b3JUeXBlKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IGhyVGltZVRvTmFub3NlY29uZHMoc3RhcnRUaW1lSFIpO1xuICAgIHZhciBlbmRUaW1lID0gaHJUaW1lVG9OYW5vc2Vjb25kcyhlbmRUaW1lSFIpO1xuICAgIHZhciBmaWx0ZXJlZFJlc291cmNlcyA9IHJlc291cmNlcy5maWx0ZXIoZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgIHZhciByZXNvdXJjZVN0YXJ0VGltZSA9IGhyVGltZVRvTmFub3NlY29uZHModGltZUlucHV0VG9IclRpbWUocmVzb3VyY2VbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVF0pKTtcbiAgICAgICAgdmFyIHJlc291cmNlRW5kVGltZSA9IGhyVGltZVRvTmFub3NlY29uZHModGltZUlucHV0VG9IclRpbWUocmVzb3VyY2VbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5SRVNQT05TRV9FTkRdKSk7XG4gICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5pdGlhdG9yVHlwZS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgKGluaXRpYXRvclR5cGUgfHwgJ3htbGh0dHByZXF1ZXN0JykgJiZcbiAgICAgICAgICAgIHJlc291cmNlLm5hbWUgPT09IHNwYW5VcmwgJiZcbiAgICAgICAgICAgIHJlc291cmNlU3RhcnRUaW1lID49IHN0YXJ0VGltZSAmJlxuICAgICAgICAgICAgcmVzb3VyY2VFbmRUaW1lIDw9IGVuZFRpbWUpO1xuICAgIH0pO1xuICAgIGlmIChmaWx0ZXJlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlcmVkUmVzb3VyY2VzID0gZmlsdGVyZWRSZXNvdXJjZXMuZmlsdGVyKGZ1bmN0aW9uIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuICFpZ25vcmVkUmVzb3VyY2VzLmhhcyhyZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRSZXNvdXJjZXM7XG59XG4vKipcbiAqIFBhcnNlcyB1cmwgdXNpbmcgVVJMIGNvbnN0cnVjdG9yIG9yIGZhbGxiYWNrIHRvIGFuY2hvciBlbGVtZW50LlxuICogQHBhcmFtIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmwsIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZG9jdW1lbnQuYmFzZVVSSVxuICAgICAgICAgICAgOiB0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnIC8vIFNvbWUgSlMgcnVudGltZXMgKGUuZy4gRGVubykgZG9uJ3QgZGVmaW5lIHRoaXNcbiAgICAgICAgICAgICAgICA/IGxvY2F0aW9uLmhyZWZcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gZ2V0VXJsTm9ybWFsaXppbmdBbmNob3IoKTtcbiAgICBlbGVtZW50LmhyZWYgPSB1cmw7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIFBhcnNlcyB1cmwgdXNpbmcgVVJMIGNvbnN0cnVjdG9yIG9yIGZhbGxiYWNrIHRvIGFuY2hvciBlbGVtZW50IGFuZCBzZXJpYWxpemVcbiAqIGl0IHRvIGEgc3RyaW5nLlxuICpcbiAqIFBlcmZvcm1zIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdXJscy1hbmQtZmV0Y2hpbmcuaHRtbCNwYXJzZS1hLXVybFxuICpcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVXJsKHVybCkge1xuICAgIHZhciB1cmxMaWtlID0gcGFyc2VVcmwodXJsKTtcbiAgICByZXR1cm4gdXJsTGlrZS5ocmVmO1xufVxuLyoqXG4gKiBHZXQgZWxlbWVudCBYUGF0aFxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCBlbGVtZW50XG4gKiBAcGFyYW0gb3B0aW1pc2VkIC0gd2hlbiBpZCBhdHRyaWJ1dGUgb2YgZWxlbWVudCBpcyBwcmVzZW50IHRoZSB4cGF0aCBjYW4gYmVcbiAqIHNpbXBsaWZpZWQgdG8gY29udGFpbiBpZFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZnVuY3Rpb24gZ2V0RWxlbWVudFhQYXRoKHRhcmdldCwgb3B0aW1pc2VkKSB7XG4gICAgaWYgKHRhcmdldC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfVxuICAgIHZhciB0YXJnZXRWYWx1ZSA9IGdldE5vZGVWYWx1ZSh0YXJnZXQsIG9wdGltaXNlZCk7XG4gICAgaWYgKG9wdGltaXNlZCAmJiB0YXJnZXRWYWx1ZS5pbmRleE9mKCdAaWQnKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlO1xuICAgIH1cbiAgICB2YXIgeHBhdGggPSAnJztcbiAgICBpZiAodGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgeHBhdGggKz0gZ2V0RWxlbWVudFhQYXRoKHRhcmdldC5wYXJlbnROb2RlLCBmYWxzZSk7XG4gICAgfVxuICAgIHhwYXRoICs9IHRhcmdldFZhbHVlO1xuICAgIHJldHVybiB4cGF0aDtcbn1cbi8qKlxuICogZ2V0IG5vZGUgaW5kZXggd2l0aGluIHRoZSBzaWJsaW5nc1xuICogQHBhcmFtIHRhcmdldFxuICovXG5mdW5jdGlvbiBnZXROb2RlSW5kZXgodGFyZ2V0KSB7XG4gICAgaWYgKCF0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWRUeXBlcyA9IFt0YXJnZXQubm9kZVR5cGVdO1xuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT09IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgIGFsbG93ZWRUeXBlcy5wdXNoKE5vZGUuVEVYVF9OT0RFKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzID0gQXJyYXkuZnJvbSh0YXJnZXQucGFyZW50Tm9kZS5jaGlsZE5vZGVzKTtcbiAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgbG9jYWxOYW1lID0gZWxlbWVudC5sb2NhbE5hbWU7XG4gICAgICAgIHJldHVybiAoYWxsb3dlZFR5cGVzLmluZGV4T2YoZWxlbWVudC5ub2RlVHlwZSkgPj0gMCAmJlxuICAgICAgICAgICAgbG9jYWxOYW1lID09PSB0YXJnZXQubG9jYWxOYW1lKTtcbiAgICB9KTtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID49IDEpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KSArIDE7IC8vIHhwYXRoIHN0YXJ0cyBmcm9tIDFcbiAgICB9XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIG90aGVyIHNpbWlsYXIgY2hpbGQgeHBhdGggZG9lc24ndCBuZWVkIGluZGV4XG4gICAgcmV0dXJuIDA7XG59XG4vKipcbiAqIGdldCBub2RlIHZhbHVlIGZvciB4cGF0aFxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGltaXNlZFxuICovXG5mdW5jdGlvbiBnZXROb2RlVmFsdWUodGFyZ2V0LCBvcHRpbWlzZWQpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSB0YXJnZXQubm9kZVR5cGU7XG4gICAgdmFyIGluZGV4ID0gZ2V0Tm9kZUluZGV4KHRhcmdldCk7XG4gICAgdmFyIG5vZGVWYWx1ZSA9ICcnO1xuICAgIGlmIChub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgdmFyIGlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgaWYgKG9wdGltaXNlZCAmJiBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLy8qW0BpZD1cXFwiXCIgKyBpZCArIFwiXFxcIl1cIjtcbiAgICAgICAgfVxuICAgICAgICBub2RlVmFsdWUgPSB0YXJnZXQubG9jYWxOYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHxcbiAgICAgICAgbm9kZVR5cGUgPT09IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgIG5vZGVWYWx1ZSA9ICd0ZXh0KCknO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlVHlwZSA9PT0gTm9kZS5DT01NRU5UX05PREUpIHtcbiAgICAgICAgbm9kZVZhbHVlID0gJ2NvbW1lbnQoKSc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIGlmIGluZGV4IGlzIDEgaXQgY2FuIGJlIG9taXR0ZWQgaW4geHBhdGhcbiAgICBpZiAobm9kZVZhbHVlICYmIGluZGV4ID4gMSkge1xuICAgICAgICByZXR1cm4gXCIvXCIgKyBub2RlVmFsdWUgKyBcIltcIiArIGluZGV4ICsgXCJdXCI7XG4gICAgfVxuICAgIHJldHVybiBcIi9cIiArIG5vZGVWYWx1ZTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRyYWNlIGhlYWRlcnMgc2hvdWxkIGJlIHByb3BhZ2F0ZWRcbiAqIEBwYXJhbSBzcGFuVXJsXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMoc3BhblVybCwgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJscykge1xuICAgIHZhciBwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMgPSBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzIHx8IFtdO1xuICAgIGlmICh0eXBlb2YgcHJvcGFnYXRlVHJhY2VIZWFkZXJVcmxzID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJVcmxzID0gW3Byb3BhZ2F0ZVRyYWNlSGVhZGVyVXJsc107XG4gICAgfVxuICAgIHZhciBwYXJzZWRTcGFuVXJsID0gcGFyc2VVcmwoc3BhblVybCk7XG4gICAgaWYgKHBhcnNlZFNwYW5Vcmwub3JpZ2luID09PSBnZXRPcmlnaW4oKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMuc29tZShmdW5jdGlvbiAocHJvcGFnYXRlVHJhY2VIZWFkZXJVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmxNYXRjaGVzKHNwYW5VcmwsIHByb3BhZ2F0ZVRyYWNlSGVhZGVyVXJsKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBQZXJmb3JtYW5jZVRpbWluZ05hbWVzIGFzIFAsIGFkZFNwYW5OZXR3b3JrRXZlbnQgYXMgYSwgYWRkU3Bhbk5ldHdvcmtFdmVudHMgYXMgYiwgZ2V0UmVzb3VyY2UgYXMgYywgc29ydFJlc291cmNlcyBhcyBkLCBnZXRFbGVtZW50WFBhdGggYXMgZywgaGFzS2V5IGFzIGgsIG5vcm1hbGl6ZVVybCBhcyBuLCBwYXJzZVVybCBhcyBwLCBzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMgYXMgcyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsR0FBdUMsS0FBS0MsR0FBb0QsS0FBS0MsR0FBcUIsS0FBS0MsR0FBbUIsS0FBS0MsU0FBa0I7QUFpQnZMLElBQUlDO0FBQUEsQ0FDSCxTQUFVQSxHQUF3QjtBQUMvQixFQUFBQSxFQUF1QixjQUFpQixjQUN4Q0EsRUFBdUIsZ0JBQW1CLGdCQUMxQ0EsRUFBdUIsb0JBQXVCLG1CQUM5Q0EsRUFBdUIsZUFBa0IsZUFDekNBLEVBQXVCLCtCQUFrQyw0QkFDekRBLEVBQXVCLGlDQUFvQyw4QkFDM0RBLEVBQXVCLGtCQUFxQixrQkFDNUNBLEVBQXVCLG9CQUF1QixtQkFDOUNBLEVBQXVCLHNCQUF5QixxQkFDaERBLEVBQXVCLG9CQUF1QixtQkFDOUNBLEVBQXVCLGNBQWlCLGNBQ3hDQSxFQUF1QixpQkFBb0IsZ0JBQzNDQSxFQUF1QixtQkFBc0Isa0JBQzdDQSxFQUF1QixtQkFBc0IsbUJBQzdDQSxFQUF1QixlQUFrQixlQUN6Q0EsRUFBdUIsaUJBQW9CLGlCQUMzQ0EsRUFBdUIsZ0JBQW1CLGdCQUMxQ0EsRUFBdUIs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QThCO0FBQ3hFLE1BQUlDLElBQTJCRCxLQUFnQyxDQUFDO0FBQ2hFLEdBQUksT0FBT0MsS0FBNkIsWUFDcENBLGFBQW9DLFlBQ3BDQSxJQUEyQixDQUFDQSxDQUF3QjtBQUV4RCxNQUFJeEMsSUFBZ0JDLEVBQVNQLENBQU87QUFDcEMsU0FBSU0sRUFBYyxXQUFXUixFQUFVLElBQzVCLEtBR0FnRCxFQUF5QixLQUFLLFNBQVVDLEdBQXlCO0FBQ3BFLFdBQU8zRSxFQUFXNEIsR0FBUytDLENBQXVCO0FBQUEsRUFDdEQsQ0FBQztBQUVUOyIsCiAgIm5hbWVzIjogWyJTRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIIiwgIlNFTUFUVFJTX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEIiwgImhyVGltZVRvTmFub3NlY29uZHMiLCAidGltZUlucHV0VG9IclRpbWUiLCAidXJsTWF0Y2hlcyIsICJQZXJmb3JtYW5jZVRpbWluZ05hbWVzIiwgInVybE5vcm1hbGl6aW5nQW5jaG9yIiwgImdldFVybE5vcm1hbGl6aW5nQW5jaG9yIiwgImhhc0tleSIsICJvYmoiLCAia2V5IiwgImFkZFNwYW5OZXR3b3JrRXZlbnQiLCAic3BhbiIsICJwZXJmb3JtYW5jZU5hbWUiLCAiZW50cmllcyIsICJyZWZQZXJmTmFtZSIsICJwZXJmVGltZSIsICJyZWZUaW1lIiwgInJlZk5hbWUiLCAiYWRkU3Bhbk5ldHdvcmtFdmVudHMiLCAicmVzb3VyY2UiLCAiaWdub3JlTmV0d29ya0V2ZW50cyIsICJlbmNvZGVkTGVuZ3RoIiwgImRlY29kZWRMZW5ndGgiLCAic29ydFJlc291cmNlcyIsICJmaWx0ZXJlZFJlc291cmNlcyIsICJhIiwgImIiLCAidmFsdWVBIiwgInZhbHVlQiIsICJnZXRPcmlnaW4iLCAiZ2V0UmVzb3VyY2UiLCAic3BhblVybCIsICJzdGFydFRpbWVIUiIsICJlbmRUaW1lSFIiLCAicmVzb3VyY2VzIiwgImlnbm9yZWRSZXNvdXJjZXMiLCAiaW5pdGlhdG9yVHlwZSIsICJwYXJzZWRTcGFuVXJsIiwgInBhcnNlVXJsIiwgImZpbHRlclJlc291cmNlc0ZvclNwYW4iLCAic29ydGVkIiwgImNvcnNQcmVGbGlnaHRSZXF1ZXN0IiwgIm1haW5SZXF1ZXN0IiwgImZpbmRNYWluUmVxdWVzdCIsICJyZXNwb25zZUVuZCIsICJmZXRjaFN0YXJ0IiwgImNvcnNQcmVGbGlnaHRSZXF1ZXN0RW5kVGltZSIsICJzcGFuRW5kVGltZUhSIiwgInNwYW5FbmRUaW1lIiwgIm1pblRpbWUiLCAiYmVzdEdhcCIsICJsZW5ndGgiLCAicmVzb3VyY2VTdGFydFRpbWUiLCAicmVzb3VyY2VFbmRUaW1lIiwgImN1cnJlbnRHYXAiLCAic3RhcnRUaW1lIiwgImVuZFRpbWUiLCAidXJsIiwgImVsZW1lbnQiLCAibm9ybWFsaXplVXJsIiwgInVybExpa2UiLCAiZ2V0RWxlbWVudFhQYXRoIiwgInRhcmdldCIsICJvcHRpbWlzZWQiLCAidGFyZ2V0VmFsdWUiLCAiZ2V0Tm9kZVZhbHVlIiwgInhwYXRoIiwgImdldE5vZGVJbmRleCIsICJhbGxvd2VkVHlwZXMiLCAiZWxlbWVudHMiLCAibG9jYWxOYW1lIiwgIm5vZGVUeXBlIiwgImluZGV4IiwgIm5vZGVWYWx1ZSIsICJpZCIsICJzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMiLCAicHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJscyIsICJwcm9wYWdhdGVUcmFjZUhlYWRlclVybHMiLCAicHJvcGFnYXRlVHJhY2VIZWFkZXJVcmwiXQp9Cg==
@@ -1,6 +1,6 @@
1
- import { d as I } from "./diag-api-DAsRXs3b.js";
2
- import { m as x } from "./metrics-api-_5uS60q1.js";
3
- import { t as E } from "./index-DlrGfmQY.js";
1
+ import { d as I } from "./diag-api-D9IWSUsW.js";
2
+ import { m as x } from "./metrics-api-DMMrpfD3.js";
3
+ import { t as E } from "./index-Xxndn7Y1.js";
4
4
  var L = (
5
5
  /** @class */
6
6
  function() {
@@ -378,4 +378,4 @@ export {
378
378
  S as l,
379
379
  F as s
380
380
  };
381
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXRpbHMtIX57MDBmfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGQgYXMgZGlhZyB9IGZyb20gJy4vZGlhZy1hcGktIX57MDA0fX4uanMnO1xuaW1wb3J0IHsgbSBhcyBtZXRyaWNzIH0gZnJvbSAnLi9tZXRyaWNzLWFwaS0hfnswMGd9fi5qcyc7XG5pbXBvcnQgeyB0IGFzIHRyYWNlIH0gZnJvbSAnLi9pbmRleC0hfnswMDV9fi5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTm9vcExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wTG9nZ2VyKCkge1xuICAgIH1cbiAgICBOb29wTG9nZ2VyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKF9sb2dSZWNvcmQpIHsgfTtcbiAgICByZXR1cm4gTm9vcExvZ2dlcjtcbn0oKSk7XG52YXIgTk9PUF9MT0dHRVIgPSBuZXcgTm9vcExvZ2dlcigpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5vb3BMb2dnZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wTG9nZ2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIE5vb3BMb2dnZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wTG9nZ2VyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcExvZ2dlclByb3ZpZGVyO1xufSgpKTtcbnZhciBOT09QX0xPR0dFUl9QUk9WSURFUiA9IG5ldyBOb29wTG9nZ2VyUHJvdmlkZXIoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBQcm94eUxvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eUxvZ2dlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXQgYSBsb2cgcmVjb3JkLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGxvZyBhcHBlbmRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9nUmVjb3JkXG4gICAgICovXG4gICAgUHJveHlMb2dnZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAobG9nUmVjb3JkKSB7XG4gICAgICAgIHRoaXMuX2dldExvZ2dlcigpLmVtaXQobG9nUmVjb3JkKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSBsb2dnZXIgZnJvbSB0aGUgcHJveHkgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSBsb2dnZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIGxvZ2dlci5cbiAgICAgKi9cbiAgICBQcm94eUxvZ2dlci5wcm90b3R5cGUuX2dldExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvZ2dlciA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlTG9nZ2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICAgICAgcmV0dXJuIE5PT1BfTE9HR0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gbG9nZ2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlMb2dnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFByb3h5TG9nZ2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJveHlMb2dnZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgUHJveHlMb2dnZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eUxvZ2dlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eUxvZ2dlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfTE9HR0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSBsb2dnZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eUxvZ2dlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlMb2dnZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVMb2dnZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldExvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eUxvZ2dlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFVwZGF0ZXMgdG8gdGhpcyBmaWxlIHNob3VsZCBhbHNvIGJlIHJlcGxpY2F0ZWQgdG8gQG9wZW50ZWxlbWV0cnkvYXBpIGFuZFxuLy8gQG9wZW50ZWxlbWV0cnkvY29yZSB0b28uXG4vKipcbiAqIC0gZ2xvYmFsVGhpcyAoTmV3IHN0YW5kYXJkKVxuICogLSBzZWxmIChXaWxsIHJldHVybiB0aGUgY3VycmVudCB3aW5kb3cgaW5zdGFuY2UgZm9yIHN1cHBvcnRlZCBicm93c2VycylcbiAqIC0gd2luZG93IChmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMpXG4gKiAtIGdsb2JhbCAoTm9kZUpTIGltcGxlbWVudGF0aW9uKVxuICogLSA8b2JqZWN0PiAoV2hlbiBhbGwgZWxzZSBmYWlscylcbiAqL1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMsIG5vLXVuZGVmXG52YXIgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgIDoge307XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgR0xPQkFMX0xPR1NfQVBJX0tFWSA9IFN5bWJvbC5mb3IoJ2lvLm9wZW50ZWxlbWV0cnkuanMuYXBpLmxvZ3MnKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG4vKipcbiAqIE1ha2UgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIGEgdmVyc2lvbiBpbnRlZ2VyIGFuZCByZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBhbiBBUEkgaWYgdGhlIHZlcnNpb25cbiAqIGlzIGNvbXBhdGlibGUsIG9yIGEgZmFsbGJhY2sgdmVyc2lvbiAodXN1YWxseSBOT09QKSBpZiBpdCBpcyBub3QuXG4gKlxuICogQHBhcmFtIHJlcXVpcmVkVmVyc2lvbiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHJldHVybiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBpbnN0YW5jZSBJbnN0YW5jZSB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgY29tcGF0aWJsZVxuICogQHBhcmFtIGZhbGxiYWNrIEZhbGxiYWNrIGluc3RhbmNlLCB1c3VhbGx5IE5PT1AsIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgbm90IGNvbXBhdGlibGVcbiAqL1xuZnVuY3Rpb24gbWFrZUdldHRlcihyZXF1aXJlZFZlcnNpb24sIGluc3RhbmNlLCBmYWxsYmFjaykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdmVyc2lvbiA9PT0gcmVxdWlyZWRWZXJzaW9uID8gaW5zdGFuY2UgOiBmYWxsYmFjaztcbiAgICB9O1xufVxuLyoqXG4gKiBBIG51bWJlciB3aGljaCBzaG91bGQgYmUgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgYmFja3dhcmRzIGluY29tcGF0aWJsZVxuICogY2hhbmdlIGlzIG1hZGUgdG8gdGhlIEFQSS4gVGhpcyBudW1iZXIgaXMgdXNlZCB3aGVuIGFuIEFQSSBwYWNrYWdlXG4gKiBhdHRlbXB0cyB0byBhY2Nlc3MgdGhlIGdsb2JhbCBBUEkgdG8gZW5zdXJlIGl0IGlzIGdldHRpbmcgYSBjb21wYXRpYmxlXG4gKiB2ZXJzaW9uLiBJZiB0aGUgZ2xvYmFsIEFQSSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBBUEkgcGFja2FnZVxuICogYXR0ZW1wdGluZyB0byBnZXQgaXQsIGEgTk9PUCBBUEkgaW1wbGVtZW50YXRpb24gd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xudmFyIEFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBMb2dzQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvZ3NBUEkoKSB7XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIgPSBuZXcgUHJveHlMb2dnZXJQcm92aWRlcigpO1xuICAgIH1cbiAgICBMb2dzQVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBMb2dzQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgTG9nc0FQSS5wcm90b3R5cGUuc2V0R2xvYmFsTG9nZ2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKF9nbG9iYWxbR0xPQkFMX0xPR1NfQVBJX0tFWV0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ2dlclByb3ZpZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgX2dsb2JhbFtHTE9CQUxfTE9HU19BUElfS0VZXSA9IG1ha2VHZXR0ZXIoQVBJX0JBQ0tXQVJEU19DT01QQVRJQklMSVRZX1ZFUlNJT04sIHByb3ZpZGVyLCBOT09QX0xPR0dFUl9QUk9WSURFUik7XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUocHJvdmlkZXIpO1xuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgTG9nZ2VyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBMb2dzQVBJLnByb3RvdHlwZS5nZXRMb2dnZXJQcm92aWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuICgoX2IgPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9MT0dTX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChfZ2xvYmFsLCBBUElfQkFDS1dBUkRTX0NPTVBBVElCSUxJVFlfVkVSU0lPTikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxvZ2dlciBmcm9tIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgTG9nZ2VyXG4gICAgICovXG4gICAgTG9nc0FQSS5wcm90b3R5cGUuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9nZ2VyUHJvdmlkZXIoKS5nZXRMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICAvKiogUmVtb3ZlIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyICovXG4gICAgTG9nc0FQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVsZXRlIF9nbG9iYWxbR0xPQkFMX0xPR1NfQVBJX0tFWV07XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIgPSBuZXcgUHJveHlMb2dnZXJQcm92aWRlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIExvZ3NBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGxvZ3MgPSBMb2dzQVBJLmdldEluc3RhbmNlKCk7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24gKGZ1bmt0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgZnVua3Rpb24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gRGVmYXVsdCB0byBjb21wbGFpbmluZyBsb3VkbHkgd2hlbiB0aGluZ3MgZG9uJ3QgZ28gYWNjb3JkaW5nIHRvIHBsYW4uXG52YXIgbG9nZ2VyID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuXG4vLyBTZXRzIGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LCBwcmVzZXJ2aW5nIGl0cyBlbnVtZXJhYmlsaXR5LlxuLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgd3JpdGFibGUuXG5mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSAob2JqLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgZW51bWVyYWJsZSA9ICEhb2JqW25hbWVdICYmIG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZShuYW1lKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuLy8gS2VlcCBpbml0aWFsaXphdGlvbiBpZGVtcG90ZW50LlxuZnVuY3Rpb24gc2hpbW1lciAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxvZ2dlcikge1xuICAgIGlmICghaXNGdW5jdGlvbihvcHRpb25zLmxvZ2dlcikpIGxvZ2dlcihcIm5ldyBsb2dnZXIgaXNuJ3QgYSBmdW5jdGlvbiwgbm90IHJlcGxhY2luZ1wiKTtcbiAgICBlbHNlIGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXAgKG5vZHVsZSwgbmFtZSwgd3JhcHBlcikge1xuICBpZiAoIW5vZHVsZSB8fCAhbm9kdWxlW25hbWVdKSB7XG4gICAgbG9nZ2VyKCdubyBvcmlnaW5hbCBmdW5jdGlvbiAnICsgbmFtZSArICcgdG8gd3JhcCcpO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCF3cmFwcGVyKSB7XG4gICAgbG9nZ2VyKCdubyB3cmFwcGVyIGZ1bmN0aW9uJyk7XG4gICAgbG9nZ2VyKChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKG5vZHVsZVtuYW1lXSkgfHwgIWlzRnVuY3Rpb24od3JhcHBlcikpIHtcbiAgICBsb2dnZXIoJ29yaWdpbmFsIG9iamVjdCBhbmQgd3JhcHBlciBtdXN0IGJlIGZ1bmN0aW9ucycpO1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIG9yaWdpbmFsID0gbm9kdWxlW25hbWVdO1xuICB2YXIgd3JhcHBlZCA9IHdyYXBwZXIob3JpZ2luYWwsIG5hbWUpO1xuXG4gIGRlZmluZVByb3BlcnR5KHdyYXBwZWQsICdfX29yaWdpbmFsJywgb3JpZ2luYWwpO1xuICBkZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCAnX191bndyYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG5vZHVsZVtuYW1lXSA9PT0gd3JhcHBlZCkgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCBvcmlnaW5hbCk7XG4gIH0pO1xuICBkZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCAnX193cmFwcGVkJywgdHJ1ZSk7XG5cbiAgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCB3cmFwcGVkKTtcbiAgcmV0dXJuIHdyYXBwZWRcbn1cblxuZnVuY3Rpb24gbWFzc1dyYXAgKG5vZHVsZXMsIG5hbWVzLCB3cmFwcGVyKSB7XG4gIGlmICghbm9kdWxlcykge1xuICAgIGxvZ2dlcignbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIG1vZHVsZXMgdG8gcGF0Y2gnKTtcbiAgICBsb2dnZXIoKG5ldyBFcnJvcigpKS5zdGFjayk7XG4gICAgcmV0dXJuXG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9kdWxlcykpIHtcbiAgICBub2R1bGVzID0gW25vZHVsZXNdO1xuICB9XG5cbiAgaWYgKCEobmFtZXMgJiYgQXJyYXkuaXNBcnJheShuYW1lcykpKSB7XG4gICAgbG9nZ2VyKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgZnVuY3Rpb25zIHRvIHdyYXAgb24gbW9kdWxlcycpO1xuICAgIHJldHVyblxuICB9XG5cbiAgbm9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2R1bGUpIHtcbiAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB3cmFwKG5vZHVsZSwgbmFtZSwgd3JhcHBlcik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bndyYXAgKG5vZHVsZSwgbmFtZSkge1xuICBpZiAoIW5vZHVsZSB8fCAhbm9kdWxlW25hbWVdKSB7XG4gICAgbG9nZ2VyKCdubyBmdW5jdGlvbiB0byB1bndyYXAuJyk7XG4gICAgbG9nZ2VyKChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFub2R1bGVbbmFtZV0uX191bndyYXApIHtcbiAgICBsb2dnZXIoJ25vIG9yaWdpbmFsIHRvIHVud3JhcCB0byAtLSBoYXMgJyArIG5hbWUgKyAnIGFscmVhZHkgYmVlbiB1bndyYXBwZWQ/Jyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZHVsZVtuYW1lXS5fX3Vud3JhcCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFzc1Vud3JhcCAobm9kdWxlcywgbmFtZXMpIHtcbiAgaWYgKCFub2R1bGVzKSB7XG4gICAgbG9nZ2VyKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgbW9kdWxlcyB0byBwYXRjaCcpO1xuICAgIGxvZ2dlcigobmV3IEVycm9yKCkpLnN0YWNrKTtcbiAgICByZXR1cm5cbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShub2R1bGVzKSkge1xuICAgIG5vZHVsZXMgPSBbbm9kdWxlc107XG4gIH1cblxuICBpZiAoIShuYW1lcyAmJiBBcnJheS5pc0FycmF5KG5hbWVzKSkpIHtcbiAgICBsb2dnZXIoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBmdW5jdGlvbnMgdG8gdW53cmFwIG9uIG1vZHVsZXMnKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIG5vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kdWxlKSB7XG4gICAgbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdW53cmFwKG5vZHVsZSwgbmFtZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5zaGltbWVyLndyYXAgPSB3cmFwO1xuc2hpbW1lci5tYXNzV3JhcCA9IG1hc3NXcmFwO1xuc2hpbW1lci51bndyYXAgPSB1bndyYXA7XG5zaGltbWVyLm1hc3NVbndyYXAgPSBtYXNzVW53cmFwO1xuXG52YXIgc2hpbW1lcl8xID0gc2hpbW1lcjtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX2Fzc2lnbiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuLyoqXG4gKiBCYXNlIGFic3RyYWN0IGludGVybmFsIGNsYXNzIGZvciBpbnN0cnVtZW50aW5nIG5vZGUgYW5kIHdlYiBwbHVnaW5zXG4gKi9cbnZhciBJbnN0cnVtZW50YXRpb25BYnN0cmFjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBJbnN0cnVtZW50YXRpb25BYnN0cmFjdChpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25OYW1lID0gaW5zdHJ1bWVudGF0aW9uTmFtZTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uID0gaW5zdHJ1bWVudGF0aW9uVmVyc2lvbjtcbiAgICAgICAgdGhpcy5fY29uZmlnID0ge307XG4gICAgICAgIC8qIEFwaSB0byB3cmFwIGluc3RydW1lbnRlZCBtZXRob2QgKi9cbiAgICAgICAgdGhpcy5fd3JhcCA9IHNoaW1tZXJfMS53cmFwO1xuICAgICAgICAvKiBBcGkgdG8gdW53cmFwIGluc3RydW1lbnRlZCBtZXRob2RzICovXG4gICAgICAgIHRoaXMuX3Vud3JhcCA9IHNoaW1tZXJfMS51bndyYXA7XG4gICAgICAgIC8qIEFwaSB0byBtYXNzIHdyYXAgaW5zdHJ1bWVudGVkIG1ldGhvZCAqL1xuICAgICAgICB0aGlzLl9tYXNzV3JhcCA9IHNoaW1tZXJfMS5tYXNzV3JhcDtcbiAgICAgICAgLyogQXBpIHRvIG1hc3MgdW53cmFwIGluc3RydW1lbnRlZCBtZXRob2RzICovXG4gICAgICAgIHRoaXMuX21hc3NVbndyYXAgPSBzaGltbWVyXzEubWFzc1Vud3JhcDtcbiAgICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZGlhZyA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogaW5zdHJ1bWVudGF0aW9uTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RyYWNlciA9IHRyYWNlLmdldFRyYWNlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBsb2dzLmdldExvZ2dlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZSwgXCJtZXRlclwiLCB7XG4gICAgICAgIC8qIFJldHVybnMgbWV0ZXIgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0ZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTZXRzIE1ldGVyUHJvdmlkZXIgdG8gdGhpcyBwbHVnaW5cbiAgICAgKiBAcGFyYW0gbWV0ZXJQcm92aWRlclxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5zZXRNZXRlclByb3ZpZGVyID0gZnVuY3Rpb24gKG1ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBtZXRlclByb3ZpZGVyLmdldE1ldGVyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUsIFwibG9nZ2VyXCIsIHtcbiAgICAgICAgLyogUmV0dXJucyBsb2dnZXIgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9nZ2VyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2V0cyBMb2dnZXJQcm92aWRlciB0byB0aGlzIHBsdWdpblxuICAgICAqIEBwYXJhbSBsb2dnZXJQcm92aWRlclxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5zZXRMb2dnZXJQcm92aWRlciA9IGZ1bmN0aW9uIChsb2dnZXJQcm92aWRlcikge1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBsb2dnZXJQcm92aWRlci5nZXRMb2dnZXIodGhpcy5pbnN0cnVtZW50YXRpb25OYW1lLCB0aGlzLmluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogR2V0IG1vZHVsZSBkZWZpbml0aW9ucyBkZWZpbmVkIGJ5IHtAbGluayBpbml0fS5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBleHBlcmltZW50YWwgY29tcGlsZS10aW1lIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHtAbGluayBJbnN0cnVtZW50YXRpb25Nb2R1bGVEZWZpbml0aW9ufVxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5nZXRNb2R1bGVEZWZpbml0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaW5pdFJlc3VsdCA9IChfYSA9IHRoaXMuaW5pdCgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGluaXRSZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW2luaXRSZXN1bHRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0UmVzdWx0O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmV3IG1ldHJpYyBpbnN0cnVtZW50cyB3aXRoIHRoZSBjdXJyZW50IE1ldGVyLlxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIC8qIFJldHVybnMgSW5zdHJ1bWVudGF0aW9uQ29uZmlnICovXG4gICAgSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3QucHJvdG90eXBlLmdldENvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldHMgSW5zdHJ1bWVudGF0aW9uQ29uZmlnIHRvIHRoaXMgcGx1Z2luXG4gICAgICogQHBhcmFtIGNvbmZpZ1xuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIC8vIGNvcHkgY29uZmlnIGZpcnN0IGxldmVsIHByb3BlcnRpZXMgdG8gZW5zdXJlIHRoZXkgYXJlIGltbXV0YWJsZS5cbiAgICAgICAgLy8gbmVzdGVkIHByb3BlcnRpZXMgYXJlIG5vdCBjb3BpZWQsIHRodXMgYXJlIG11dGFibGUgZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgdGhpcy5fY29uZmlnID0gX19hc3NpZ24oeyBlbmFibGVkOiB0cnVlIH0sIGNvbmZpZyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIFRyYWNlUHJvdmlkZXIgdG8gdGhpcyBwbHVnaW5cbiAgICAgKiBAcGFyYW0gdHJhY2VyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUuc2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAodHJhY2VyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fdHJhY2VyID0gdHJhY2VyUHJvdmlkZXIuZ2V0VHJhY2VyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUsIFwidHJhY2VyXCIsIHtcbiAgICAgICAgLyogUmV0dXJucyB0cmFjZXIgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2VyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBzcGFuIGN1c3RvbWl6YXRpb24gaG9vaywgaWYgY29uZmlndXJlZCwgYW5kIGxvZyBhbnkgZXJyb3JzLlxuICAgICAqIEFueSBzZW1hbnRpY3Mgb2YgdGhlIHRyaWdnZXIgYW5kIGluZm8gYXJlIGRlZmluZWQgYnkgdGhlIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0gaG9va0hhbmRsZXIgVGhlIG9wdGlvbmFsIGhvb2sgaGFuZGxlciB3aGljaCB0aGUgdXNlciBoYXMgY29uZmlndXJlZCB2aWEgaW5zdHJ1bWVudGF0aW9uIGNvbmZpZ1xuICAgICAqIEBwYXJhbSB0cmlnZ2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBmb3IgZXhlY3V0aW5nIHRoZSBob29rIGZvciBsb2dnaW5nIHB1cnBvc2VzXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gd2hpY2ggdGhlIGhvb2sgc2hvdWxkIGJlIGFwcGxpZWRcbiAgICAgKiBAcGFyYW0gaW5mbyBUaGUgaW5mbyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIHRoZSBob29rLCB3aXRoIHVzZWZ1bCBkYXRhIHRoZSBob29rIG1heSB1c2VcbiAgICAgKi9cbiAgICBJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUuX3J1blNwYW5DdXN0b21pemF0aW9uSG9vayA9IGZ1bmN0aW9uIChob29rSGFuZGxlciwgdHJpZ2dlck5hbWUsIHNwYW4sIGluZm8pIHtcbiAgICAgICAgaWYgKCFob29rSGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBob29rSGFuZGxlcihzcGFuLCBpbmZvKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcihcIkVycm9yIHJ1bm5pbmcgc3BhbiBjdXN0b21pemF0aW9uIGhvb2sgZHVlIHRvIGV4Y2VwdGlvbiBpbiBoYW5kbGVyXCIsIHsgdHJpZ2dlck5hbWU6IHRyaWdnZXJOYW1lIH0sIGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Q7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIGluc3RydW1lbnRpbmcgd2ViIHBsdWdpbnNcbiAqL1xudmFyIEluc3RydW1lbnRhdGlvbkJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEluc3RydW1lbnRhdGlvbkJhc2UsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSW5zdHJ1bWVudGF0aW9uQmFzZShpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgaW5zdHJ1bWVudGF0aW9uTmFtZSwgaW5zdHJ1bWVudGF0aW9uVmVyc2lvbiwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBpZiAoX3RoaXMuX2NvbmZpZy5lbmFibGVkKSB7XG4gICAgICAgICAgICBfdGhpcy5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBJbnN0cnVtZW50YXRpb25CYXNlO1xufShJbnN0cnVtZW50YXRpb25BYnN0cmFjdCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fYXdhaXRlciA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuLyoqXG4gKiBmdW5jdGlvbiB0byBleGVjdXRlIHBhdGNoZWQgZnVuY3Rpb24gYW5kIGJlaW5nIGFibGUgdG8gY2F0Y2ggZXJyb3JzXG4gKiBAcGFyYW0gZXhlY3V0ZSAtIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcGFyYW0gb25GaW5pc2ggLSBjYWxsYmFjayB0byBydW4gd2hlbiBleGVjdXRlIGZpbmlzaGVzXG4gKi9cbmZ1bmN0aW9uIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoZXhlY3V0ZSwgb25GaW5pc2gsIHByZXZlbnRUaHJvd2luZ0Vycm9yKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIHZhciByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZXhlY3V0ZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvciA9IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBvbkZpbmlzaChlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgaWYgKGVycm9yICYmICFwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIEFzeW5jIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgcGF0Y2hlZCBmdW5jdGlvbiBhbmQgYmVpbmcgYWJsZSB0byBjYXRjaCBlcnJvcnNcbiAqIEBwYXJhbSBleGVjdXRlIC0gZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWRcbiAqIEBwYXJhbSBvbkZpbmlzaCAtIGNhbGxiYWNrIHRvIHJ1biB3aGVuIGV4ZWN1dGUgZmluaXNoZXNcbiAqL1xuZnVuY3Rpb24gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jKGV4ZWN1dGUsIG9uRmluaXNoLCBwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVycm9yLCByZXN1bHQsIGVfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAzLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGV4ZWN1dGUoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVfMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBvbkZpbmlzaChlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICYmICFwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3VsdF07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgY2VydGFpbiBmdW5jdGlvbiBoYXMgYmVlbiBhbHJlYWR5IHdyYXBwZWRcbiAqIEBwYXJhbSBmdW5jXG4gKi9cbmZ1bmN0aW9uIGlzV3JhcHBlZChmdW5jKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgZnVuYy5fX29yaWdpbmFsID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiBmdW5jLl9fdW53cmFwID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIGZ1bmMuX193cmFwcGVkID09PSB0cnVlKTtcbn1cblxuZXhwb3J0IHsgSW5zdHJ1bWVudGF0aW9uQmFzZSBhcyBJLCBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlQXN5bmMgYXMgYSwgaXNXcmFwcGVkIGFzIGksIGxvZ3MgYXMgbCwgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSBhcyBzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLQSxTQUFZO0FBQzFCLFNBQVMsS0FBS0MsU0FBZTtBQUM3QixTQUFTLEtBQUtDLFNBQWE7QUFpQjNCLElBQUlDO0FBQUE7QUFBQSxFQUE0QixXQUFZO0FBQ3hDLGFBQVNBLElBQWE7QUFBQSxJQUN0QjtBQUNBLFdBQUFBLEVBQVcsVUFBVSxPQUFPLFNBQVVDLEdBQVk7QUFBQSxJQUFFLEdBQzdDRDtBQUFBLEVBQ1gsRUFBRTtBQUFBLEdBQ0VFLElBQWMsSUFBSUYsRUFBVyxHQWlCN0JHO0FBQUE7QUFBQSxFQUFvQyxXQUFZO0FBQ2hELGFBQVNBLElBQXFCO0FBQUEsSUFDOUI7QUFDQSxXQUFBQSxFQUFtQixVQUFVLFlBQVksU0FBVUMsR0FBT0MsR0FBVUMsR0FBVTtBQUMxRSxhQUFPLElBQUlOLEVBQVc7QUFBQSxJQUMxQixHQUNPRztBQUFBLEVBQ1gsRUFBRTtBQUFBLEdBQ0VJLElBQXVCLElBQUlKLEVBQW1CLEdBaUI5Q0s7QUFBQTtBQUFBLEVBQTZCLFdBQVk7QUFDekMsYUFBU0EsRUFBWUMsR0FBV0MsR0FBTUMsR0FBU0MsR0FBUztBQUNwRCxXQUFLLFlBQVlILEdBQ2pCLEtBQUssT0FBT0MsR0FDWixLQUFLLFVBQVVDLEdBQ2YsS0FBSyxVQUFVQztBQUFBLElBQ25CO0FBTUEsV0FBQUosRUFBWSxVQUFVLE9BQU8sU0FBVUssR0FBVztBQUM5QyxXQUFLLFdBQVcsRUFBRSxLQUFL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Q0FBQ0Q7QUFFVixZQUFNQztBQUdWLFdBQU9mO0FBQUEsRUFDWDtBQUNKO0FBTUEsU0FBU2dCLEVBQTRCSixHQUFTQyxHQUFVQyxHQUFzQjtBQUMxRSxTQUFPekIsRUFBVSxNQUFNLFFBQVEsUUFBUSxXQUFZO0FBQy9DLFFBQUkwQixHQUFPZixHQUFRaUI7QUFDbkIsV0FBT2hCLEVBQVksTUFBTSxTQUFVdEUsR0FBSTtBQUNuQyxjQUFRQSxFQUFHLE9BQU87QUFBQSxRQUNkLEtBQUs7QUFDRCxpQkFBQUEsRUFBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FDbEIsQ0FBQyxHQUFhaUYsRUFBUSxDQUFDO0FBQUEsUUFDbEMsS0FBSztBQUNELGlCQUFBWixJQUFTckUsRUFBRyxLQUFLLEdBQ1YsQ0FBQyxHQUFhLENBQUM7QUFBQSxRQUMxQixLQUFLO0FBQ0QsaUJBQUFzRixJQUFNdEYsRUFBRyxLQUFLLEdBQ2RvRixJQUFRRSxHQUNELENBQUMsR0FBYSxDQUFDO0FBQUEsUUFDMUIsS0FBSztBQUVELGNBREFKLEVBQVNFLEdBQU9mLENBQU0sR0FDbEJlLEtBQVMsQ0FBQ0Q7QUFFVixrQkFBTUM7QUFHVixpQkFBTyxDQUFDLEdBQWNmLENBQU07QUFBQSxRQUNoQyxLQUFLO0FBQUcsaUJBQU87QUFBQSxZQUFDO0FBQUE7QUFBQSxVQUFZO0FBQUEsTUFDaEM7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMLENBQUM7QUFDTDtBQUtBLFNBQVNrQixFQUFVQyxHQUFNO0FBQ3JCLFNBQVEsT0FBT0EsS0FBUyxjQUNwQixPQUFPQSxFQUFLLGNBQWUsY0FDM0IsT0FBT0EsRUFBSyxZQUFhLGNBQ3pCQSxFQUFLLGNBQWM7QUFDM0I7IiwKICAibmFtZXMiOiBbImRpYWciLCAibWV0cmljcyIsICJ0cmFjZSIsICJOb29wTG9nZ2VyIiwgIl9sb2dSZWNvcmQiLCAiTk9PUF9MT0dHRVIiLCAiTm9vcExvZ2dlclByb3ZpZGVyIiwgIl9uYW1lIiwgIl92ZXJzaW9uIiwgIl9vcHRpb25zIiwgIk5PT1BfTE9HR0VSX1BST1ZJREVSIiwgIlByb3h5TG9nZ2VyIiwgIl9wcm92aWRlciIsICJuYW1lIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJsb2dSZWNvcmQiLCAibG9nZ2VyIiwgIlByb3h5TG9nZ2VyUHJvdmlkZXIiLCAiX2EiLCAiZGVsZWdhdGUiLCAiX2dsb2JhbFRoaXMiLCAiR0xPQkFMX0xPR1NfQVBJX0tFWSIsICJfZ2xvYmFsIiwgIm1ha2VHZXR0ZXIiLCAicmVxdWlyZWRWZXJzaW9uIiwgImluc3RhbmNlIiwgImZhbGxiYWNrIiwgIkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OIiwgIkxvZ3NBUEkiLCAicHJvdmlkZXIiLCAiX2IiLCAibG9ncyIsICJpc0Z1bmN0aW9uIiwgImZ1bmt0aW9uIiwgImRlZmluZVByb3BlcnR5IiwgIm9iaiIsICJ2YWx1ZSIsICJlbnVtZXJhYmxlIiwgInNoaW1tZXIiLCAid3JhcCIsICJub2R1bGUiLCAid3JhcHBlciIsICJvcmlnaW5hbCIsICJ3cmFwcGVkIiwgIm1hc3NXcmFwIiwgIm5vZHVsZXMiLCAibmFtZXMiLCAidW53cmFwIiwgIm1hc3NVbndyYXAiLCAic2hpbW1lcl8xIiwgIl9fYXNzaWduIiwgInQiLCAicyIsICJpIiwgInAiLCAiSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3QiLCAiaW5zdHJ1bWVudGF0aW9uTmFtZSIsICJpbnN0cnVtZW50YXRpb25WZXJzaW9uIiwgImNvbmZpZyIsICJtZXRlclByb3ZpZGVyIiwgImxvZ2dlclByb3ZpZGVyIiwgImluaXRSZXN1bHQiLCAidHJhY2VyUHJvdmlkZXIiLCAiaG9va0hhbmRsZXIiLCAidHJpZ2dlck5hbWUiLCAic3BhbiIsICJpbmZvIiwgImUiLCAiX19leHRlbmRzIiwgImV4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgIl9fIiwgIkluc3RydW1lbnRhdGlvbkJhc2UiLCAiX3N1cGVyIiwgIl90aGlzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJzYWZlRXhlY3V0ZUluVGhlTWlkZGxlIiwgImV4ZWN1dGUiLCAib25GaW5pc2giLCAicHJldmVudFRocm93aW5nRXJyb3IiLCAiZXJyb3IiLCAic2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jIiwgImVfMSIsICJpc1dyYXBwZWQiLCAiZnVuYyJdCn0K
381
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXRpbHMtIX57MDBnfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGQgYXMgZGlhZyB9IGZyb20gJy4vZGlhZy1hcGktIX57MDA1fX4uanMnO1xuaW1wb3J0IHsgbSBhcyBtZXRyaWNzIH0gZnJvbSAnLi9tZXRyaWNzLWFwaS0hfnswMGh9fi5qcyc7XG5pbXBvcnQgeyB0IGFzIHRyYWNlIH0gZnJvbSAnLi9pbmRleC0hfnswMDZ9fi5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTm9vcExvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wTG9nZ2VyKCkge1xuICAgIH1cbiAgICBOb29wTG9nZ2VyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKF9sb2dSZWNvcmQpIHsgfTtcbiAgICByZXR1cm4gTm9vcExvZ2dlcjtcbn0oKSk7XG52YXIgTk9PUF9MT0dHRVIgPSBuZXcgTm9vcExvZ2dlcigpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5vb3BMb2dnZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wTG9nZ2VyUHJvdmlkZXIoKSB7XG4gICAgfVxuICAgIE5vb3BMb2dnZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wTG9nZ2VyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcExvZ2dlclByb3ZpZGVyO1xufSgpKTtcbnZhciBOT09QX0xPR0dFUl9QUk9WSURFUiA9IG5ldyBOb29wTG9nZ2VyUHJvdmlkZXIoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBQcm94eUxvZ2dlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eUxvZ2dlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXQgYSBsb2cgcmVjb3JkLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGxvZyBhcHBlbmRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9nUmVjb3JkXG4gICAgICovXG4gICAgUHJveHlMb2dnZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAobG9nUmVjb3JkKSB7XG4gICAgICAgIHRoaXMuX2dldExvZ2dlcigpLmVtaXQobG9nUmVjb3JkKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSBsb2dnZXIgZnJvbSB0aGUgcHJveHkgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSBsb2dnZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIGxvZ2dlci5cbiAgICAgKi9cbiAgICBQcm94eUxvZ2dlci5wcm90b3R5cGUuX2dldExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvZ2dlciA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlTG9nZ2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICAgICAgcmV0dXJuIE5PT1BfTE9HR0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gbG9nZ2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gUHJveHlMb2dnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFByb3h5TG9nZ2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUHJveHlMb2dnZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgUHJveHlMb2dnZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eUxvZ2dlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eUxvZ2dlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfTE9HR0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSBsb2dnZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eUxvZ2dlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlMb2dnZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVMb2dnZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldExvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eUxvZ2dlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIFVwZGF0ZXMgdG8gdGhpcyBmaWxlIHNob3VsZCBhbHNvIGJlIHJlcGxpY2F0ZWQgdG8gQG9wZW50ZWxlbWV0cnkvYXBpIGFuZFxuLy8gQG9wZW50ZWxlbWV0cnkvY29yZSB0b28uXG4vKipcbiAqIC0gZ2xvYmFsVGhpcyAoTmV3IHN0YW5kYXJkKVxuICogLSBzZWxmIChXaWxsIHJldHVybiB0aGUgY3VycmVudCB3aW5kb3cgaW5zdGFuY2UgZm9yIHN1cHBvcnRlZCBicm93c2VycylcbiAqIC0gd2luZG93IChmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMpXG4gKiAtIGdsb2JhbCAoTm9kZUpTIGltcGxlbWVudGF0aW9uKVxuICogLSA8b2JqZWN0PiAoV2hlbiBhbGwgZWxzZSBmYWlscylcbiAqL1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnMsIG5vLXVuZGVmXG52YXIgX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgIDoge307XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgR0xPQkFMX0xPR1NfQVBJX0tFWSA9IFN5bWJvbC5mb3IoJ2lvLm9wZW50ZWxlbWV0cnkuanMuYXBpLmxvZ3MnKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG4vKipcbiAqIE1ha2UgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIGEgdmVyc2lvbiBpbnRlZ2VyIGFuZCByZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBhbiBBUEkgaWYgdGhlIHZlcnNpb25cbiAqIGlzIGNvbXBhdGlibGUsIG9yIGEgZmFsbGJhY2sgdmVyc2lvbiAodXN1YWxseSBOT09QKSBpZiBpdCBpcyBub3QuXG4gKlxuICogQHBhcmFtIHJlcXVpcmVkVmVyc2lvbiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHJldHVybiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBpbnN0YW5jZSBJbnN0YW5jZSB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgY29tcGF0aWJsZVxuICogQHBhcmFtIGZhbGxiYWNrIEZhbGxiYWNrIGluc3RhbmNlLCB1c3VhbGx5IE5PT1AsIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgbm90IGNvbXBhdGlibGVcbiAqL1xuZnVuY3Rpb24gbWFrZUdldHRlcihyZXF1aXJlZFZlcnNpb24sIGluc3RhbmNlLCBmYWxsYmFjaykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdmVyc2lvbiA9PT0gcmVxdWlyZWRWZXJzaW9uID8gaW5zdGFuY2UgOiBmYWxsYmFjaztcbiAgICB9O1xufVxuLyoqXG4gKiBBIG51bWJlciB3aGljaCBzaG91bGQgYmUgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgYmFja3dhcmRzIGluY29tcGF0aWJsZVxuICogY2hhbmdlIGlzIG1hZGUgdG8gdGhlIEFQSS4gVGhpcyBudW1iZXIgaXMgdXNlZCB3aGVuIGFuIEFQSSBwYWNrYWdlXG4gKiBhdHRlbXB0cyB0byBhY2Nlc3MgdGhlIGdsb2JhbCBBUEkgdG8gZW5zdXJlIGl0IGlzIGdldHRpbmcgYSBjb21wYXRpYmxlXG4gKiB2ZXJzaW9uLiBJZiB0aGUgZ2xvYmFsIEFQSSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBBUEkgcGFja2FnZVxuICogYXR0ZW1wdGluZyB0byBnZXQgaXQsIGEgTk9PUCBBUEkgaW1wbGVtZW50YXRpb24gd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xudmFyIEFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBMb2dzQVBJID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvZ3NBUEkoKSB7XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIgPSBuZXcgUHJveHlMb2dnZXJQcm92aWRlcigpO1xuICAgIH1cbiAgICBMb2dzQVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBMb2dzQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgTG9nc0FQSS5wcm90b3R5cGUuc2V0R2xvYmFsTG9nZ2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKF9nbG9iYWxbR0xPQkFMX0xPR1NfQVBJX0tFWV0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ2dlclByb3ZpZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgX2dsb2JhbFtHTE9CQUxfTE9HU19BUElfS0VZXSA9IG1ha2VHZXR0ZXIoQVBJX0JBQ0tXQVJEU19DT01QQVRJQklMSVRZX1ZFUlNJT04sIHByb3ZpZGVyLCBOT09QX0xPR0dFUl9QUk9WSURFUik7XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUocHJvdmlkZXIpO1xuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgTG9nZ2VyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBMb2dzQVBJLnByb3RvdHlwZS5nZXRMb2dnZXJQcm92aWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuICgoX2IgPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9MT0dTX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChfZ2xvYmFsLCBBUElfQkFDS1dBUkRTX0NPTVBBVElCSUxJVFlfVkVSU0lPTikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxvZ2dlciBmcm9tIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgTG9nZ2VyXG4gICAgICovXG4gICAgTG9nc0FQSS5wcm90b3R5cGUuZ2V0TG9nZ2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9nZ2VyUHJvdmlkZXIoKS5nZXRMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICAvKiogUmVtb3ZlIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyICovXG4gICAgTG9nc0FQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVsZXRlIF9nbG9iYWxbR0xPQkFMX0xPR1NfQVBJX0tFWV07XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIgPSBuZXcgUHJveHlMb2dnZXJQcm92aWRlcigpO1xuICAgIH07XG4gICAgcmV0dXJuIExvZ3NBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGxvZ3MgPSBMb2dzQVBJLmdldEluc3RhbmNlKCk7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24gKGZ1bmt0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgZnVua3Rpb24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gRGVmYXVsdCB0byBjb21wbGFpbmluZyBsb3VkbHkgd2hlbiB0aGluZ3MgZG9uJ3QgZ28gYWNjb3JkaW5nIHRvIHBsYW4uXG52YXIgbG9nZ2VyID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuXG4vLyBTZXRzIGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LCBwcmVzZXJ2aW5nIGl0cyBlbnVtZXJhYmlsaXR5LlxuLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgd3JpdGFibGUuXG5mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSAob2JqLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgZW51bWVyYWJsZSA9ICEhb2JqW25hbWVdICYmIG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZShuYW1lKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuLy8gS2VlcCBpbml0aWFsaXphdGlvbiBpZGVtcG90ZW50LlxuZnVuY3Rpb24gc2hpbW1lciAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxvZ2dlcikge1xuICAgIGlmICghaXNGdW5jdGlvbihvcHRpb25zLmxvZ2dlcikpIGxvZ2dlcihcIm5ldyBsb2dnZXIgaXNuJ3QgYSBmdW5jdGlvbiwgbm90IHJlcGxhY2luZ1wiKTtcbiAgICBlbHNlIGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXAgKG5vZHVsZSwgbmFtZSwgd3JhcHBlcikge1xuICBpZiAoIW5vZHVsZSB8fCAhbm9kdWxlW25hbWVdKSB7XG4gICAgbG9nZ2VyKCdubyBvcmlnaW5hbCBmdW5jdGlvbiAnICsgbmFtZSArICcgdG8gd3JhcCcpO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCF3cmFwcGVyKSB7XG4gICAgbG9nZ2VyKCdubyB3cmFwcGVyIGZ1bmN0aW9uJyk7XG4gICAgbG9nZ2VyKChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKG5vZHVsZVtuYW1lXSkgfHwgIWlzRnVuY3Rpb24od3JhcHBlcikpIHtcbiAgICBsb2dnZXIoJ29yaWdpbmFsIG9iamVjdCBhbmQgd3JhcHBlciBtdXN0IGJlIGZ1bmN0aW9ucycpO1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIG9yaWdpbmFsID0gbm9kdWxlW25hbWVdO1xuICB2YXIgd3JhcHBlZCA9IHdyYXBwZXIob3JpZ2luYWwsIG5hbWUpO1xuXG4gIGRlZmluZVByb3BlcnR5KHdyYXBwZWQsICdfX29yaWdpbmFsJywgb3JpZ2luYWwpO1xuICBkZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCAnX191bndyYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG5vZHVsZVtuYW1lXSA9PT0gd3JhcHBlZCkgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCBvcmlnaW5hbCk7XG4gIH0pO1xuICBkZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCAnX193cmFwcGVkJywgdHJ1ZSk7XG5cbiAgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCB3cmFwcGVkKTtcbiAgcmV0dXJuIHdyYXBwZWRcbn1cblxuZnVuY3Rpb24gbWFzc1dyYXAgKG5vZHVsZXMsIG5hbWVzLCB3cmFwcGVyKSB7XG4gIGlmICghbm9kdWxlcykge1xuICAgIGxvZ2dlcignbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIG1vZHVsZXMgdG8gcGF0Y2gnKTtcbiAgICBsb2dnZXIoKG5ldyBFcnJvcigpKS5zdGFjayk7XG4gICAgcmV0dXJuXG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9kdWxlcykpIHtcbiAgICBub2R1bGVzID0gW25vZHVsZXNdO1xuICB9XG5cbiAgaWYgKCEobmFtZXMgJiYgQXJyYXkuaXNBcnJheShuYW1lcykpKSB7XG4gICAgbG9nZ2VyKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgZnVuY3Rpb25zIHRvIHdyYXAgb24gbW9kdWxlcycpO1xuICAgIHJldHVyblxuICB9XG5cbiAgbm9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2R1bGUpIHtcbiAgICBuYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB3cmFwKG5vZHVsZSwgbmFtZSwgd3JhcHBlcik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bndyYXAgKG5vZHVsZSwgbmFtZSkge1xuICBpZiAoIW5vZHVsZSB8fCAhbm9kdWxlW25hbWVdKSB7XG4gICAgbG9nZ2VyKCdubyBmdW5jdGlvbiB0byB1bndyYXAuJyk7XG4gICAgbG9nZ2VyKChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFub2R1bGVbbmFtZV0uX191bndyYXApIHtcbiAgICBsb2dnZXIoJ25vIG9yaWdpbmFsIHRvIHVud3JhcCB0byAtLSBoYXMgJyArIG5hbWUgKyAnIGFscmVhZHkgYmVlbiB1bndyYXBwZWQ/Jyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZHVsZVtuYW1lXS5fX3Vud3JhcCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFzc1Vud3JhcCAobm9kdWxlcywgbmFtZXMpIHtcbiAgaWYgKCFub2R1bGVzKSB7XG4gICAgbG9nZ2VyKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgbW9kdWxlcyB0byBwYXRjaCcpO1xuICAgIGxvZ2dlcigobmV3IEVycm9yKCkpLnN0YWNrKTtcbiAgICByZXR1cm5cbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShub2R1bGVzKSkge1xuICAgIG5vZHVsZXMgPSBbbm9kdWxlc107XG4gIH1cblxuICBpZiAoIShuYW1lcyAmJiBBcnJheS5pc0FycmF5KG5hbWVzKSkpIHtcbiAgICBsb2dnZXIoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBmdW5jdGlvbnMgdG8gdW53cmFwIG9uIG1vZHVsZXMnKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIG5vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kdWxlKSB7XG4gICAgbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdW53cmFwKG5vZHVsZSwgbmFtZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5zaGltbWVyLndyYXAgPSB3cmFwO1xuc2hpbW1lci5tYXNzV3JhcCA9IG1hc3NXcmFwO1xuc2hpbW1lci51bndyYXAgPSB1bndyYXA7XG5zaGltbWVyLm1hc3NVbndyYXAgPSBtYXNzVW53cmFwO1xuXG52YXIgc2hpbW1lcl8xID0gc2hpbW1lcjtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX2Fzc2lnbiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuLyoqXG4gKiBCYXNlIGFic3RyYWN0IGludGVybmFsIGNsYXNzIGZvciBpbnN0cnVtZW50aW5nIG5vZGUgYW5kIHdlYiBwbHVnaW5zXG4gKi9cbnZhciBJbnN0cnVtZW50YXRpb25BYnN0cmFjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBJbnN0cnVtZW50YXRpb25BYnN0cmFjdChpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25OYW1lID0gaW5zdHJ1bWVudGF0aW9uTmFtZTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uID0gaW5zdHJ1bWVudGF0aW9uVmVyc2lvbjtcbiAgICAgICAgdGhpcy5fY29uZmlnID0ge307XG4gICAgICAgIC8qIEFwaSB0byB3cmFwIGluc3RydW1lbnRlZCBtZXRob2QgKi9cbiAgICAgICAgdGhpcy5fd3JhcCA9IHNoaW1tZXJfMS53cmFwO1xuICAgICAgICAvKiBBcGkgdG8gdW53cmFwIGluc3RydW1lbnRlZCBtZXRob2RzICovXG4gICAgICAgIHRoaXMuX3Vud3JhcCA9IHNoaW1tZXJfMS51bndyYXA7XG4gICAgICAgIC8qIEFwaSB0byBtYXNzIHdyYXAgaW5zdHJ1bWVudGVkIG1ldGhvZCAqL1xuICAgICAgICB0aGlzLl9tYXNzV3JhcCA9IHNoaW1tZXJfMS5tYXNzV3JhcDtcbiAgICAgICAgLyogQXBpIHRvIG1hc3MgdW53cmFwIGluc3RydW1lbnRlZCBtZXRob2RzICovXG4gICAgICAgIHRoaXMuX21hc3NVbndyYXAgPSBzaGltbWVyXzEubWFzc1Vud3JhcDtcbiAgICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZGlhZyA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogaW5zdHJ1bWVudGF0aW9uTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RyYWNlciA9IHRyYWNlLmdldFRyYWNlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBsb2dzLmdldExvZ2dlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZSwgXCJtZXRlclwiLCB7XG4gICAgICAgIC8qIFJldHVybnMgbWV0ZXIgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0ZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTZXRzIE1ldGVyUHJvdmlkZXIgdG8gdGhpcyBwbHVnaW5cbiAgICAgKiBAcGFyYW0gbWV0ZXJQcm92aWRlclxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5zZXRNZXRlclByb3ZpZGVyID0gZnVuY3Rpb24gKG1ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBtZXRlclByb3ZpZGVyLmdldE1ldGVyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUsIFwibG9nZ2VyXCIsIHtcbiAgICAgICAgLyogUmV0dXJucyBsb2dnZXIgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9nZ2VyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2V0cyBMb2dnZXJQcm92aWRlciB0byB0aGlzIHBsdWdpblxuICAgICAqIEBwYXJhbSBsb2dnZXJQcm92aWRlclxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5zZXRMb2dnZXJQcm92aWRlciA9IGZ1bmN0aW9uIChsb2dnZXJQcm92aWRlcikge1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBsb2dnZXJQcm92aWRlci5nZXRMb2dnZXIodGhpcy5pbnN0cnVtZW50YXRpb25OYW1lLCB0aGlzLmluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogR2V0IG1vZHVsZSBkZWZpbml0aW9ucyBkZWZpbmVkIGJ5IHtAbGluayBpbml0fS5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBleHBlcmltZW50YWwgY29tcGlsZS10aW1lIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHtAbGluayBJbnN0cnVtZW50YXRpb25Nb2R1bGVEZWZpbml0aW9ufVxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5nZXRNb2R1bGVEZWZpbml0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaW5pdFJlc3VsdCA9IChfYSA9IHRoaXMuaW5pdCgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGluaXRSZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW2luaXRSZXN1bHRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0UmVzdWx0O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmV3IG1ldHJpYyBpbnN0cnVtZW50cyB3aXRoIHRoZSBjdXJyZW50IE1ldGVyLlxuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIC8qIFJldHVybnMgSW5zdHJ1bWVudGF0aW9uQ29uZmlnICovXG4gICAgSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3QucHJvdG90eXBlLmdldENvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNldHMgSW5zdHJ1bWVudGF0aW9uQ29uZmlnIHRvIHRoaXMgcGx1Z2luXG4gICAgICogQHBhcmFtIGNvbmZpZ1xuICAgICAqL1xuICAgIEluc3RydW1lbnRhdGlvbkFic3RyYWN0LnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIC8vIGNvcHkgY29uZmlnIGZpcnN0IGxldmVsIHByb3BlcnRpZXMgdG8gZW5zdXJlIHRoZXkgYXJlIGltbXV0YWJsZS5cbiAgICAgICAgLy8gbmVzdGVkIHByb3BlcnRpZXMgYXJlIG5vdCBjb3BpZWQsIHRodXMgYXJlIG11dGFibGUgZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgdGhpcy5fY29uZmlnID0gX19hc3NpZ24oeyBlbmFibGVkOiB0cnVlIH0sIGNvbmZpZyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIFRyYWNlUHJvdmlkZXIgdG8gdGhpcyBwbHVnaW5cbiAgICAgKiBAcGFyYW0gdHJhY2VyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUuc2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbiAodHJhY2VyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fdHJhY2VyID0gdHJhY2VyUHJvdmlkZXIuZ2V0VHJhY2VyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUsIFwidHJhY2VyXCIsIHtcbiAgICAgICAgLyogUmV0dXJucyB0cmFjZXIgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2VyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBzcGFuIGN1c3RvbWl6YXRpb24gaG9vaywgaWYgY29uZmlndXJlZCwgYW5kIGxvZyBhbnkgZXJyb3JzLlxuICAgICAqIEFueSBzZW1hbnRpY3Mgb2YgdGhlIHRyaWdnZXIgYW5kIGluZm8gYXJlIGRlZmluZWQgYnkgdGhlIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0gaG9va0hhbmRsZXIgVGhlIG9wdGlvbmFsIGhvb2sgaGFuZGxlciB3aGljaCB0aGUgdXNlciBoYXMgY29uZmlndXJlZCB2aWEgaW5zdHJ1bWVudGF0aW9uIGNvbmZpZ1xuICAgICAqIEBwYXJhbSB0cmlnZ2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBmb3IgZXhlY3V0aW5nIHRoZSBob29rIGZvciBsb2dnaW5nIHB1cnBvc2VzXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gd2hpY2ggdGhlIGhvb2sgc2hvdWxkIGJlIGFwcGxpZWRcbiAgICAgKiBAcGFyYW0gaW5mbyBUaGUgaW5mbyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIHRoZSBob29rLCB3aXRoIHVzZWZ1bCBkYXRhIHRoZSBob29rIG1heSB1c2VcbiAgICAgKi9cbiAgICBJbnN0cnVtZW50YXRpb25BYnN0cmFjdC5wcm90b3R5cGUuX3J1blNwYW5DdXN0b21pemF0aW9uSG9vayA9IGZ1bmN0aW9uIChob29rSGFuZGxlciwgdHJpZ2dlck5hbWUsIHNwYW4sIGluZm8pIHtcbiAgICAgICAgaWYgKCFob29rSGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBob29rSGFuZGxlcihzcGFuLCBpbmZvKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcihcIkVycm9yIHJ1bm5pbmcgc3BhbiBjdXN0b21pemF0aW9uIGhvb2sgZHVlIHRvIGV4Y2VwdGlvbiBpbiBoYW5kbGVyXCIsIHsgdHJpZ2dlck5hbWU6IHRyaWdnZXJOYW1lIH0sIGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Q7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fZXh0ZW5kcyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIGluc3RydW1lbnRpbmcgd2ViIHBsdWdpbnNcbiAqL1xudmFyIEluc3RydW1lbnRhdGlvbkJhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEluc3RydW1lbnRhdGlvbkJhc2UsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSW5zdHJ1bWVudGF0aW9uQmFzZShpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgaW5zdHJ1bWVudGF0aW9uTmFtZSwgaW5zdHJ1bWVudGF0aW9uVmVyc2lvbiwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBpZiAoX3RoaXMuX2NvbmZpZy5lbmFibGVkKSB7XG4gICAgICAgICAgICBfdGhpcy5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBJbnN0cnVtZW50YXRpb25CYXNlO1xufShJbnN0cnVtZW50YXRpb25BYnN0cmFjdCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fYXdhaXRlciA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuLyoqXG4gKiBmdW5jdGlvbiB0byBleGVjdXRlIHBhdGNoZWQgZnVuY3Rpb24gYW5kIGJlaW5nIGFibGUgdG8gY2F0Y2ggZXJyb3JzXG4gKiBAcGFyYW0gZXhlY3V0ZSAtIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcGFyYW0gb25GaW5pc2ggLSBjYWxsYmFjayB0byBydW4gd2hlbiBleGVjdXRlIGZpbmlzaGVzXG4gKi9cbmZ1bmN0aW9uIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoZXhlY3V0ZSwgb25GaW5pc2gsIHByZXZlbnRUaHJvd2luZ0Vycm9yKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIHZhciByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZXhlY3V0ZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvciA9IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBvbkZpbmlzaChlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgaWYgKGVycm9yICYmICFwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcbiAqIEFzeW5jIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgcGF0Y2hlZCBmdW5jdGlvbiBhbmQgYmVpbmcgYWJsZSB0byBjYXRjaCBlcnJvcnNcbiAqIEBwYXJhbSBleGVjdXRlIC0gZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWRcbiAqIEBwYXJhbSBvbkZpbmlzaCAtIGNhbGxiYWNrIHRvIHJ1biB3aGVuIGV4ZWN1dGUgZmluaXNoZXNcbiAqL1xuZnVuY3Rpb24gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jKGV4ZWN1dGUsIG9uRmluaXNoLCBwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVycm9yLCByZXN1bHQsIGVfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAzLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGV4ZWN1dGUoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVfMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBvbkZpbmlzaChlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICYmICFwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3VsdF07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgY2VydGFpbiBmdW5jdGlvbiBoYXMgYmVlbiBhbHJlYWR5IHdyYXBwZWRcbiAqIEBwYXJhbSBmdW5jXG4gKi9cbmZ1bmN0aW9uIGlzV3JhcHBlZChmdW5jKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgZnVuYy5fX29yaWdpbmFsID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiBmdW5jLl9fdW53cmFwID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIGZ1bmMuX193cmFwcGVkID09PSB0cnVlKTtcbn1cblxuZXhwb3J0IHsgSW5zdHJ1bWVudGF0aW9uQmFzZSBhcyBJLCBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlQXN5bmMgYXMgYSwgaXNXcmFwcGVkIGFzIGksIGxvZ3MgYXMgbCwgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSBhcyBzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLQSxTQUFZO0FBQzFCLFNBQVMsS0FBS0MsU0FBZTtBQUM3QixTQUFTLEtBQUtDLFNBQWE7QUFpQjNCLElBQUlDO0FBQUE7QUFBQSxFQUE0QixXQUFZO0FBQ3hDLGFBQVNBLElBQWE7QUFBQSxJQUN0QjtBQUNBLFdBQUFBLEVBQVcsVUFBVSxPQUFPLFNBQVVDLEdBQVk7QUFBQSxJQUFFLEdBQzdDRDtBQUFBLEVBQ1gsRUFBRTtBQUFBLEdBQ0VFLElBQWMsSUFBSUYsRUFBVyxHQWlCN0JHO0FBQUE7QUFBQSxFQUFvQyxXQUFZO0FBQ2hELGFBQVNBLElBQXFCO0FBQUEsSUFDOUI7QUFDQSxXQUFBQSxFQUFtQixVQUFVLFlBQVksU0FBVUMsR0FBT0MsR0FBVUMsR0FBVTtBQUMxRSxhQUFPLElBQUlOLEVBQVc7QUFBQSxJQUMxQixHQUNPRztBQUFBLEVBQ1gsRUFBRTtBQUFBLEdBQ0VJLElBQXVCLElBQUlKLEVBQW1CLEdBaUI5Q0s7QUFBQTtBQUFBLEVBQTZCLFdBQVk7QUFDekMsYUFBU0EsRUFBWUMsR0FBV0MsR0FBTUMsR0FBU0MsR0FBUztBQUNwRCxXQUFLLFlBQVlILEdBQ2pCLEtBQUssT0FBT0MsR0FDWixLQUFLLFVBQVVDLEdBQ2YsS0FBSyxVQUFVQztBQUFBLElBQ25CO0FBTUEsV0FBQUosRUFBWSxVQUFVLE9BQU8sU0FBVUssR0FBVztBQUM5QyxXQUFLLFdBQVcsRUFBRSxLQUFL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Q0FBQ0Q7QUFFVixZQUFNQztBQUdWLFdBQU9mO0FBQUEsRUFDWDtBQUNKO0FBTUEsU0FBU2dCLEVBQTRCSixHQUFTQyxHQUFVQyxHQUFzQjtBQUMxRSxTQUFPekIsRUFBVSxNQUFNLFFBQVEsUUFBUSxXQUFZO0FBQy9DLFFBQUkwQixHQUFPZixHQUFRaUI7QUFDbkIsV0FBT2hCLEVBQVksTUFBTSxTQUFVdEUsR0FBSTtBQUNuQyxjQUFRQSxFQUFHLE9BQU87QUFBQSxRQUNkLEtBQUs7QUFDRCxpQkFBQUEsRUFBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FDbEIsQ0FBQyxHQUFhaUYsRUFBUSxDQUFDO0FBQUEsUUFDbEMsS0FBSztBQUNELGlCQUFBWixJQUFTckUsRUFBRyxLQUFLLEdBQ1YsQ0FBQyxHQUFhLENBQUM7QUFBQSxRQUMxQixLQUFLO0FBQ0QsaUJBQUFzRixJQUFNdEYsRUFBRyxLQUFLLEdBQ2RvRixJQUFRRSxHQUNELENBQUMsR0FBYSxDQUFDO0FBQUEsUUFDMUIsS0FBSztBQUVELGNBREFKLEVBQVNFLEdBQU9mLENBQU0sR0FDbEJlLEtBQVMsQ0FBQ0Q7QUFFVixrQkFBTUM7QUFHVixpQkFBTyxDQUFDLEdBQWNmLENBQU07QUFBQSxRQUNoQyxLQUFLO0FBQUcsaUJBQU87QUFBQSxZQUFDO0FBQUE7QUFBQSxVQUFZO0FBQUEsTUFDaEM7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMLENBQUM7QUFDTDtBQUtBLFNBQVNrQixFQUFVQyxHQUFNO0FBQ3JCLFNBQVEsT0FBT0EsS0FBUyxjQUNwQixPQUFPQSxFQUFLLGNBQWUsY0FDM0IsT0FBT0EsRUFBSyxZQUFhLGNBQ3pCQSxFQUFLLGNBQWM7QUFDM0I7IiwKICAibmFtZXMiOiBbImRpYWciLCAibWV0cmljcyIsICJ0cmFjZSIsICJOb29wTG9nZ2VyIiwgIl9sb2dSZWNvcmQiLCAiTk9PUF9MT0dHRVIiLCAiTm9vcExvZ2dlclByb3ZpZGVyIiwgIl9uYW1lIiwgIl92ZXJzaW9uIiwgIl9vcHRpb25zIiwgIk5PT1BfTE9HR0VSX1BST1ZJREVSIiwgIlByb3h5TG9nZ2VyIiwgIl9wcm92aWRlciIsICJuYW1lIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJsb2dSZWNvcmQiLCAibG9nZ2VyIiwgIlByb3h5TG9nZ2VyUHJvdmlkZXIiLCAiX2EiLCAiZGVsZWdhdGUiLCAiX2dsb2JhbFRoaXMiLCAiR0xPQkFMX0xPR1NfQVBJX0tFWSIsICJfZ2xvYmFsIiwgIm1ha2VHZXR0ZXIiLCAicmVxdWlyZWRWZXJzaW9uIiwgImluc3RhbmNlIiwgImZhbGxiYWNrIiwgIkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OIiwgIkxvZ3NBUEkiLCAicHJvdmlkZXIiLCAiX2IiLCAibG9ncyIsICJpc0Z1bmN0aW9uIiwgImZ1bmt0aW9uIiwgImRlZmluZVByb3BlcnR5IiwgIm9iaiIsICJ2YWx1ZSIsICJlbnVtZXJhYmxlIiwgInNoaW1tZXIiLCAid3JhcCIsICJub2R1bGUiLCAid3JhcHBlciIsICJvcmlnaW5hbCIsICJ3cmFwcGVkIiwgIm1hc3NXcmFwIiwgIm5vZHVsZXMiLCAibmFtZXMiLCAidW53cmFwIiwgIm1hc3NVbndyYXAiLCAic2hpbW1lcl8xIiwgIl9fYXNzaWduIiwgInQiLCAicyIsICJpIiwgInAiLCAiSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3QiLCAiaW5zdHJ1bWVudGF0aW9uTmFtZSIsICJpbnN0cnVtZW50YXRpb25WZXJzaW9uIiwgImNvbmZpZyIsICJtZXRlclByb3ZpZGVyIiwgImxvZ2dlclByb3ZpZGVyIiwgImluaXRSZXN1bHQiLCAidHJhY2VyUHJvdmlkZXIiLCAiaG9va0hhbmRsZXIiLCAidHJpZ2dlck5hbWUiLCAic3BhbiIsICJpbmZvIiwgImUiLCAiX19leHRlbmRzIiwgImV4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgIl9fIiwgIkluc3RydW1lbnRhdGlvbkJhc2UiLCAiX3N1cGVyIiwgIl90aGlzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJzYWZlRXhlY3V0ZUluVGhlTWlkZGxlIiwgImV4ZWN1dGUiLCAib25GaW5pc2giLCAicHJldmVudFRocm93aW5nRXJyb3IiLCAiZXJyb3IiLCAic2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jIiwgImVfMSIsICJpc1dyYXBwZWQiLCAiZnVuYyJdCn0K
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getopenpay/openpay-js",
3
- "version": "0.5.7-alpha.589ead1",
3
+ "version": "0.5.7",
4
4
  "description": "Accept payments through OpenPay, right on your site",
5
5
  "author": "OpenPay <info@getopenpay.com> (https://getopenpay.com)",
6
6
  "license": "ISC",
@@ -32,6 +32,7 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@opentelemetry/api": "^1.9.0",
35
+ "@socheatsok78/page-lifecycle": "^0.1.2",
35
36
  "chalk": "^5.3.0",
36
37
  "penpal": "^6.2.2",
37
38
  "uuid": "^10.0.0",