@taimos/radball-digital-api 0.0.13 → 0.0.15

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.
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Scalars | @taimos/radball-digital-api</title><meta name="description" content="Documentation for @taimos/radball-digital-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@taimos/radball-digital-api</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">Scalars</a></li></ul><h1>Type Alias Scalars</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>All built-in and custom scalars, mapped to their actual values</p>
2
- </div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">type</span> <span class="tsd-kind-type-alias">Scalars</span> <span class="tsd-signature-symbol">=</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#awsdate">AWSDate</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsdatetime">AWSDateTime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsemail">AWSEmail</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsipaddress">AWSIPAddress</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsjson">AWSJSON</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsphone">AWSPhone</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awstime">AWSTime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awstimestamp">AWSTimestamp</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsurl">AWSURL</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#bigint">BigInt</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#boolean">Boolean</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#double">Double</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#float">Float</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#id">ID</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#int">Int</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#string">String</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#awsdate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>AWS<wbr/>Date</span></a>
2
+ </div></section><div class="tsd-signature"><span class="tsd-signature-keyword">type</span> <span class="tsd-kind-type-alias">Scalars</span> <span class="tsd-signature-symbol">=</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#awsdate">AWSDate</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsdatetime">AWSDateTime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsemail">AWSEmail</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsipaddress">AWSIPAddress</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsjson">AWSJSON</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsphone">AWSPhone</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awstime">AWSTime</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awstimestamp">AWSTimestamp</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#awsurl">AWSURL</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#bigint">BigInt</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#boolean">Boolean</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#double">Double</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#float">Float</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#id">ID</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#int">Int</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#string">String</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">input</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">output</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#awsdate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>AWS<wbr/>Date</span></a>
3
3
  <a href="#awsdatetime" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>AWS<wbr/>Date<wbr/>Time</span></a>
4
4
  <a href="#awsemail" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>AWS<wbr/>Email</span></a>
5
5
  <a href="#awsipaddress" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>AWSIP<wbr/>Address</span></a>
@@ -24,6 +24,7 @@ export declare function checkGym(gym: SaveGymInput | ModifyGymInput): Validation
24
24
  export declare function validateGym(gym: SaveGymInput | ModifyGymInput): void;
25
25
  export declare function checkSeason(season: SaveSeasonInput | ModifySeasonInput): ValidationCheckResult;
26
26
  export declare function validateSeason(season: SaveSeasonInput | ModifySeasonInput): void;
27
+ export declare function isSeasonOpenForRegistration(season: SaveSeasonInput | ModifySeasonInput, date: string): boolean;
27
28
  export declare function checkPerson(person: SavePersonInput | ModifyPersonInput): ValidationCheckResult;
28
29
  export declare function validatePerson(person: SavePersonInput | ModifyPersonInput): void;
29
30
  export declare function checkAssociation(association: SaveAssociationInput | ModifyAssociationInput): ValidationCheckResult;
package/lib/validation.js CHANGED
@@ -11,6 +11,7 @@ exports.checkGym = checkGym;
11
11
  exports.validateGym = validateGym;
12
12
  exports.checkSeason = checkSeason;
13
13
  exports.validateSeason = validateSeason;
14
+ exports.isSeasonOpenForRegistration = isSeasonOpenForRegistration;
14
15
  exports.checkPerson = checkPerson;
15
16
  exports.validatePerson = validatePerson;
16
17
  exports.checkAssociation = checkAssociation;
@@ -269,6 +270,17 @@ function validateSeason(season) {
269
270
  const result = checkSeason(season);
270
271
  result.validate();
271
272
  }
273
+ function isSeasonOpenForRegistration(season, date) {
274
+ const { registrationStart, registrationEnd } = season;
275
+ if (!registrationStart || !registrationEnd)
276
+ return false;
277
+ // Expect AWSDate (YYYY-MM-DD); guard to keep comparisons reliable
278
+ const isAwsDate = (s) => /^\d{4}-\d{2}-\d{2}$/.test(s);
279
+ if (!isAwsDate(date) || !isAwsDate(registrationStart) || !isAwsDate(registrationEnd))
280
+ return false;
281
+ // Inclusive range
282
+ return registrationStart <= date && date <= registrationEnd;
283
+ }
272
284
  function checkPerson(person) {
273
285
  const result = new ValidationCheckResult();
274
286
  // Name validations
@@ -419,10 +431,14 @@ function checkTeam(team) {
419
431
  result.addError('exemptionRequest', 'Freistellungsantrag darf 1000 Zeichen nicht überschreiten');
420
432
  }
421
433
  }
434
+ // Player IDs validation
435
+ if (!team.playerIds || team.playerIds.length < 2) {
436
+ result.addError('playerIds', 'Es müssen mindestens 2 Spieler für ein Team angegeben werden');
437
+ }
422
438
  return result;
423
439
  }
424
440
  function validateTeam(team) {
425
441
  const result = checkTeam(team);
426
442
  result.validate();
427
443
  }
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRDQSxvQ0E0QkM7QUFFRCwwQ0FHQztBQUVELGtDQTBDQztBQUVELHdDQUdDO0FBRUQsOEJBMENDO0FBRUQsb0NBR0M7QUFFRCw0QkEwQkM7QUFFRCxrQ0FHQztBQUVELGtDQXdFQztBQUVELHdDQUdDO0FBRUQsa0NBb0RDO0FBRUQsd0NBR0M7QUFFRCw0Q0FpQ0M7QUFFRCxrREFHQztBQUVELDRDQThCQztBQUVELGtEQUdDO0FBRUQsOEJBaUNDO0FBRUQsb0NBR0M7QUE3Y0QsTUFBYSxxQkFBcUI7SUFBbEM7UUFFa0IsYUFBUSxHQUFrQyxFQUFFLENBQUM7UUFDN0MsV0FBTSxHQUFrQyxFQUFFLENBQUM7SUFxQzdELENBQUM7SUFuQ1EsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENB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SUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsMkRBQTJELENBQUMsQ0FBQztRQUNuRyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBeUQ7SUFDcEYsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzcywgTW9kaWZ5QXNzb2NpYXRpb25JbnB1dCwgTW9kaWZ5Q2x1YklucHV0LCBNb2RpZnlHeW1JbnB1dCwgTW9kaWZ5TGVhZ3VlSW5wdXQsIE1vZGlmeVBlcnNvbklucHV0LCBNb2RpZnlTZWFzb25JbnB1dCwgU2F2ZUFzc29jaWF0aW9uSW5wdXQsIFNhdmVDbHViSW5wdXQsIFNhdmVHeW1JbnB1dCwgU2F2ZUxlYWd1ZUdyb3VwSW5wdXQsIFNhdmVMZWFndWVJbnB1dCwgU2F2ZVBlcnNvbklucHV0LCBTYXZlU2Vhc29uSW5wdXQsIE1vZGlmeUxlYWd1ZUdyb3VwSW5wdXQsIFNhdmVUZWFtSW5wdXQsIE1vZGlmeVRlYW1JbnB1dCwgUmVnaXN0ZXJUZWFtSW5wdXQgfSBmcm9tICdAZ2VuZXJhdGVkL2dyYXBocWwubW9kZWwuZ2VuZXJhdGVkJztcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JzOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuXG4gIHB1YmxpYyBhZGRXYXJuaW5nKGZpZWxkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy53YXJuaW5nc1tmaWVsZF0pIHtcbiAgICAgIHRoaXMud2FybmluZ3NbZmllbGRdID0gW107XG4gICAgfVxuICAgIHRoaXMud2FybmluZ3NbZmllbGRdLnB1c2gobWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRXJyb3IoZmllbGQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVycm9yc1tmaWVsZF0pIHtcbiAgICAgIHRoaXMuZXJyb3JzW2ZpZWxkXSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmVycm9yc1tmaWVsZF0ucHVzaChtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmVycm9ycykuZmxhdCgpO1xuICB9XG5cbiAgcHVibGljIGdldFdhcm5pbmdNZXNzYWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy53YXJuaW5ncykuZmxhdCgpO1xuICB9XG5cbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFcnJvck1lc3NhZ2VzKCkuam9pbignOyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXYXJuaW5nTWVzc2FnZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXYXJuaW5nTWVzc2FnZXMoKS5qb2luKCc7ICcpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlc1N0cmluZygpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIGlmIChhZGRyZXNzPy5jaXR5Py50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjaXR5JywgJ1N0YWR0IGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLmNpdHkhLmxlbmd0aCA+IDIwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY2l0eScsICdTdGFkdCBkYXJmIDIwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICBpZiAoYWRkcmVzcz8uY291bnRyeT8udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY291bnRyeScsICdMYW5kIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLmNvdW50cnkhLmxlbmd0aCA+IDIwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjb3VudHJ5JywgJ0xhbmQgZGFyZiAyMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICBpZiAoYWRkcmVzcz8uc3RyZWV0Py50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzdHJlZXQnLCAnU3RyYcOfZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoYWRkcmVzcy5zdHJlZXQhLmxlbmd0aCA+IDIwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc3RyZWV0JywgJ1N0cmHDn2UgZGFyZiAyMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgaWYgKGFkZHJlc3M/LnppcD8udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignemlwJywgJ1BMWiBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoYWRkcmVzcy56aXAhLmxlbmd0aCA+IDIwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCd6aXAnLCAnUExaIGRhcmYgMjAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrQWRkcmVzcyhhZGRyZXNzKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0xlYWd1ZShsZWFndWU6IFNhdmVMZWFndWVJbnB1dCB8IE1vZGlmeUxlYWd1ZUlucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIEFnZSByYW5nZSB2YWxpZGF0aW9uc1xuICBpZiAobGVhZ3VlLm1pbkFnZSAhPSB1bmRlZmluZWQgJiYgbGVhZ3VlLm1heEFnZSAhPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGVhZ3VlLm1pbkFnZSA8IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWluQWdlJywgJ01pbmRlc3RhbHRlciBkYXJmIG5pY2h0IG5lZ2F0aXYgc2VpbicpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA8IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltYWxhbHRlciBkYXJmIG5pY2h0IG5lZ2F0aXYgc2VpbicpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA8IGxlYWd1ZS5taW5BZ2UpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltYWxhbHRlciBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIGRlbSBNaW5kZXN0YWx0ZXIgc2VpbicpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA+IDEwMCkgeyAvLyBhZGp1c3QgYXMgbmVlZGVkXG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ21heEFnZScsICdNYXhpbWFsYWx0ZXIgw7xiZXJzY2hyZWl0ZXQgZGFzIHZlcm7DvG5mdGlnZSBMaW1pdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFsZWFndWUubmFtZSB8fCBsZWFndWUubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0xpZ2FuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChsZWFndWUubmFtZS5sZW5ndGggPiAxMDApIHsgLy8gYWRqdXN0IG1heCBsZW5ndGggYXMgbmVlZGVkXG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0xpZ2FuYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIERlc2NyaXB0aW9uIHZhbGlkYXRpb24gKGlmIHJlcXVpcmVkKVxuICBpZiAobGVhZ3VlLmRlc2NyaXB0aW9uICYmIGxlYWd1ZS5kZXNjcmlwdGlvbi5sZW5ndGggPiA1MDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2Rlc2NyaXB0aW9uJywgJ0Jlc2NocmVpYnVuZyBkYXJmIDUwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBTaG9ydCBuYW1lIHZhbGlkYXRpb25cbiAgaWYgKGxlYWd1ZS5zaG9ydE5hbWUpIHtcbiAgICBpZiAobGVhZ3VlLnNob3J0TmFtZS5sZW5ndGggPiAxMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnS3Vyem5hbWUgZGFyZiAxMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICAgIGlmICghL15bQS1aYS16MC05XSskLy50ZXN0KGxlYWd1ZS5zaG9ydE5hbWUpKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdLdXJ6bmFtZSBkYXJmIG51ciBhbHBoYW51bWVyaXNjaGUgWmVpY2hlbiBlbnRoYWx0ZW4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMZWFndWUobGVhZ3VlOiBTYXZlTGVhZ3VlSW5wdXQgfCBNb2RpZnlMZWFndWVJbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0xlYWd1ZShsZWFndWUpO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ2x1YihjbHViOiBTYXZlQ2x1YklucHV0IHwgTW9kaWZ5Q2x1YklucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIEZ1bGwgbmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIWNsdWIubmFtZSB8fCBjbHViLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdWZXJlaW5zbmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoY2x1Yi5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdWZXJlaW5zbmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBTaG9ydCBuYW1lIHZhbGlkYXRpb25zXG4gIGlmIChjbHViLnNob3J0TmFtZSkge1xuICAgIGlmIChjbHViLnNob3J0TmFtZS5sZW5ndGggPiAzMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnS3Vyem5hbWUgZGFyZiAzMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2Vic2l0ZSB2YWxpZGF0aW9uXG4gIGlmIChjbHViLndlYnNpdGUpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTChjbHViLndlYnNpdGUpO1xuICAgICAgaWYgKCFjbHViLndlYnNpdGUuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFjbHViLndlYnNpdGUuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICByZXN1bHQuYWRkRXJyb3IoJ3dlYnNpdGUnLCAnV2Vic2l0ZSBtdXNzIG1pdCBodHRwOi8vIG9kZXIgaHR0cHM6Ly8gYmVnaW5uZW4nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignd2Vic2l0ZScsICdVbmfDvGx0aWdlIFdlYnNpdGUtVVJMJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uXG4gIGlmIChjbHViLmFkZHJlc3MgJiYgKGNsdWIuYWRkcmVzcy5jaXR5IHx8IGNsdWIuYWRkcmVzcy5zdHJlZXQgfHwgY2x1Yi5hZGRyZXNzLnppcCkpIHtcbiAgICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKGNsdWIuYWRkcmVzcyk7XG4gICAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkRXJyb3IoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gICAgfSk7XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkV2FybmluZyhgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsdWIoY2x1YjogU2F2ZUNsdWJJbnB1dCB8IE1vZGlmeUNsdWJJbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0NsdWIoY2x1Yik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHeW0oZ3ltOiBTYXZlR3ltSW5wdXQgfCBNb2RpZnlHeW1JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghZ3ltLm5hbWUgfHwgZ3ltLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdIYWxsZW5uYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChneW0ubmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnSGFsbGVubmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBhdmFpbGFibGUgZmllbGRzIHZhbGlkYXRpb25cbiAgaWYgKCFneW0uYXZhaWxhYmxlRmllbGRzIHx8IGd5bS5hdmFpbGFibGVGaWVsZHMudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignYXZhaWxhYmxlRmllbGRzJywgJ1ZlcmbDvGdiYXJlIEZlbGRlciBzaW5kIGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uc1xuICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKGd5bS5hZGRyZXNzKTtcbiAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC5lcnJvcnMpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRFcnJvcihgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgfSk7XG4gIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQud2FybmluZ3MpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRXYXJuaW5nKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHeW0oZ3ltOiBTYXZlR3ltSW5wdXQgfCBNb2RpZnlHeW1JbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0d5bShneW0pO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2Vhc29uKHNlYXNvbjogU2F2ZVNlYXNvbklucHV0IHwgTW9kaWZ5U2Vhc29uSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIXNlYXNvbi5uYW1lIHx8IHNlYXNvbi5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnU2Fpc29ubmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoc2Vhc29uLm5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1NhaXNvbm5hbWUgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHZhbGlkIGRhdGVzXG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHNlYXNvbi5zdGFydERhdGUpO1xuICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoc2Vhc29uLmVuZERhdGUpO1xuICBjb25zdCByZWdpc3RyYXRpb25FbmQgPSBuZXcgRGF0ZShzZWFzb24ucmVnaXN0cmF0aW9uRW5kKTtcblxuICBpZiAoaXNOYU4oc3RhcnREYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kRGF0ZS5nZXRUaW1lKCkpIHx8IGlzTmFOKHJlZ2lzdHJhdGlvbkVuZC5nZXRUaW1lKCkpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdkYXRlcycsICdVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQnKTtcbiAgfVxuXG4gIGlmIChzZWFzb24ucmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25TdGFydCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCk7XG4gICAgaWYgKGlzTmFOKHJlZ2lzdHJhdGlvblN0YXJ0LmdldFRpbWUoKSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uU3RhcnQnLCAnVW5nw7xsdGlnZXMgRGF0dW1zZm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vhc29uIGRhdGUgdmFsaWRhdGlvbnNcbiAgaWYgKGVuZERhdGUgPD0gc3RhcnREYXRlKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdlbmREYXRlJywgJ1NhaXNvbi1FbmRkYXR1bSBtdXNzIG5hY2ggZGVtIFN0YXJ0ZGF0dW0gbGllZ2VuJyk7XG4gIH1cblxuICAvLyBSZWdpc3RyYXRpb24gcGVyaW9kIHZhbGlkYXRpb25zXG4gIGlmIChzZWFzb24ucmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25TdGFydCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCk7XG4gICAgaWYgKHJlZ2lzdHJhdGlvblN0YXJ0KSB7XG4gICAgICBpZiAocmVnaXN0cmF0aW9uRW5kIDw9IHJlZ2lzdHJhdGlvblN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uRW5kJywgJ0FubWVsZHVuZ3NlbmRlIG11c3MgbmFjaCBkZW0gQW5tZWxkdW5nc3N0YXJ0IGxpZWdlbicpO1xuICAgICAgfVxuICAgICAgaWYgKHJlZ2lzdHJhdGlvblN0YXJ0ID49IHN0YXJ0RGF0ZSkge1xuICAgICAgICByZXN1bHQuYWRkRXJyb3IoJ3JlZ2lzdHJhdGlvblN0YXJ0JywgJ0FubWVsZHVuZyBtdXNzIHZvciBkZW0gU2Fpc29uc3RhcnQgYmVnaW5uZW4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVnaXN0cmF0aW9uRW5kID4gc3RhcnREYXRlKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdyZWdpc3RyYXRpb25FbmQnLCAnQW5tZWxkdW5nIG11c3Mgdm9yIGRlbSBTYWlzb25zdGFydCBlbmRlbicpO1xuICB9XG5cbiAgLy8gRnV0dXJlIGRhdGUgdmFsaWRhdGlvblxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAoc3RhcnREYXRlIDwgbm93KSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzdGFydERhdGUnLCAnU2Fpc29uLVN0YXJ0ZGF0dW0gZGFyZiBuaWNodCBpbiBkZXIgVmVyZ2FuZ2VuaGVpdCBsaWVnZW4nKTtcbiAgfVxuXG4gIC8vIExlYWd1ZSBvcmRlciB2YWxpZGF0aW9uIChvbmx5IGZvciBNb2RpZnlTZWFzb25JbnB1dClcbiAgaWYgKCdsZWFndWVPcmRlcicgaW4gc2Vhc29uICYmIHNlYXNvbi5sZWFndWVPcmRlciAmJiBBcnJheS5pc0FycmF5KHNlYXNvbi5sZWFndWVPcmRlcikpIHtcbiAgICBpZiAoc2Vhc29uLmxlYWd1ZU9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgbGVhZ3VlIElEc1xuICAgICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldChzZWFzb24ubGVhZ3VlT3JkZXIpO1xuICAgICAgaWYgKHVuaXF1ZUlkcy5zaXplICE9PSBzZWFzb24ubGVhZ3VlT3JkZXIubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcignbGVhZ3VlT3JkZXInLCAnTGlnYS1SZWloZW5mb2xnZSBkYXJmIGtlaW5lIGRvcHBlbHRlbiBMaWdhLUlEcyBlbnRoYWx0ZW4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGVtcHR5IGxlYWd1ZSBJRHNcbiAgICAgIGNvbnN0IGVtcHR5SWRzID0gc2Vhc29uLmxlYWd1ZU9yZGVyLmZpbHRlcigoaWQ6IHN0cmluZykgPT4gIWlkIHx8IGlkLnRyaW0oKS5sZW5ndGggPT09IDApO1xuICAgICAgaWYgKGVtcHR5SWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0LmFkZEVycm9yKCdsZWFndWVPcmRlcicsICdMaWdhLVJlaWhlbmZvbGdlIGRhcmYga2VpbmUgbGVlcmVuIExpZ2EtSURzIGVudGhhbHRlbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlYXNvbihzZWFzb246IFNhdmVTZWFzb25JbnB1dCB8IE1vZGlmeVNlYXNvbklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrU2Vhc29uKHNlYXNvbik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQZXJzb24ocGVyc29uOiBTYXZlUGVyc29uSW5wdXQgfCBNb2RpZnlQZXJzb25JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghcGVyc29uLmZpcnN0TmFtZT8udHJpbSgpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdmaXJzdE5hbWUnLCAnVm9ybmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICBpZiAoIXBlcnNvbi5sYXN0TmFtZT8udHJpbSgpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdsYXN0TmFtZScsICdOYWNobmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICAvLyBFbWFpbCB2YWxpZGF0aW9uXG4gIGlmIChwZXJzb24uZW1haWwgJiYgIS9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QocGVyc29uLmVtYWlsKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignZW1haWwnLCAnVW5nw7xsdGlnZXMgRS1NYWlsLUZvcm1hdCcpO1xuICB9XG5cbiAgLy8gUGhvbmUgbnVtYmVyIHZhbGlkYXRpb25cbiAgaWYgKHBlcnNvbi5waG9uZSkge1xuICAgIC8vIEFsbG93IGRpZ2l0cywgc3BhY2VzLCArLCAtLCBhbmQgKClcbiAgICBjb25zdCBwaG9uZVJlZ2V4ID0gL15bXFxkXFxzKygpLV17OCwyMH0kLztcbiAgICBpZiAoIXBob25lUmVnZXgudGVzdChwZXJzb24ucGhvbmUpKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Bob25lJywgJ1VuZ8O8bHRpZ2VzIFRlbGVmb25udW1tZXItRm9ybWF0ICgrNDkgMTIzNCA1Njc4OTApJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGF0ZSBvZiBiaXJ0aCB2YWxpZGF0aW9uXG4gIGlmIChwZXJzb24uZGF0ZU9mQmlydGgpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocGVyc29uLmRhdGVPZkJpcnRoKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2RhdGVPZkJpcnRoJywgJ1VuZ8O8bHRpZ2VzIEdlYnVydHNkYXR1bXNmb3JtYXQnKTtcbiAgICB9XG4gICAgLy8gQWRkIGFnZSByZXN0cmljdGlvbnMgaWYgbmVlZGVkXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGlmIChkYXRlID4gdG9kYXkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignZGF0ZU9mQmlydGgnLCAnR2VidXJ0c2RhdHVtIGRhcmYgbmljaHQgaW4gZGVyIFp1a3VuZnQgbGllZ2VuJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uXG4gIGlmIChwZXJzb24uYWRkcmVzcyAmJiAocGVyc29uLmFkZHJlc3MuY2l0eSB8fCBwZXJzb24uYWRkcmVzcy5zdHJlZXQgfHwgcGVyc29uLmFkZHJlc3MuemlwKSkge1xuICAgIGNvbnN0IGFkZHJlc3NSZXN1bHQgPSBjaGVja0FkZHJlc3MocGVyc29uLmFkZHJlc3MpO1xuICAgIC8vIE1lcmdlIGFkZHJlc3MgZXJyb3JzIGludG8gdGhlIG1haW4gcmVzdWx0XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC5lcnJvcnMpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZEVycm9yKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICAgIH0pO1xuICAgIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQud2FybmluZ3MpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZFdhcm5pbmcoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQZXJzb24ocGVyc29uOiBTYXZlUGVyc29uSW5wdXQgfCBNb2RpZnlQZXJzb25JbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja1BlcnNvbihwZXJzb24pO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQXNzb2NpYXRpb24oYXNzb2NpYXRpb246IFNhdmVBc3NvY2lhdGlvbklucHV0IHwgTW9kaWZ5QXNzb2NpYXRpb25JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25cbiAgaWYgKCFhc3NvY2lhdGlvbi5uYW1lPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnVmVyYmFuZHNuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhc3NvY2lhdGlvbi5uYW1lLmxlbmd0aCA+IDEwMCkgeyAvLyBhZGp1c3QgbWF4IGxlbmd0aCBhcyBuZWVkZWRcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnVmVyYmFuZHNuYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIENvbnRhY3QgRW1haWwgdmFsaWRhdGlvblxuICBpZiAoIWFzc29jaWF0aW9uLmNvbnRhY3RFbWFpbD8udHJpbSgpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjb250YWN0RW1haWwnLCAnS29udGFrdC1FLU1haWwgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9IGVsc2UgaWYgKCEvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KGFzc29jaWF0aW9uLmNvbnRhY3RFbWFpbCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvbnRhY3RFbWFpbCcsICdVbmfDvGx0aWdlcyBLb250YWt0LUUtTWFpbC1Gb3JtYXQnKTtcbiAgfVxuXG4gIC8vIENvbnRhY3QgTmFtZSB2YWxpZGF0aW9uXG4gIGlmICghYXNzb2NpYXRpb24uY29udGFjdE5hbWU/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY29udGFjdE5hbWUnLCAnS29udGFrdG5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uXG4gIGNvbnN0IGFkZHJlc3NSZXN1bHQgPSBjaGVja0FkZHJlc3MoYXNzb2NpYXRpb24uYWRkcmVzcyk7XG4gIC8vIE1lcmdlIGFkZHJlc3MgZXJyb3JzIGludG8gdGhlIG1haW4gcmVzdWx0XG4gIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQuZXJyb3JzKS5mb3JFYWNoKChbZmllbGQsIG1lc3NhZ2VzXSkgPT4ge1xuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkRXJyb3IoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gIH0pO1xuICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0Lndhcm5pbmdzKS5mb3JFYWNoKChbZmllbGQsIG1lc3NhZ2VzXSkgPT4ge1xuICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkV2FybmluZyhgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQXNzb2NpYXRpb24oYXNzb2NpYXRpb246IFNhdmVBc3NvY2lhdGlvbklucHV0IHwgTW9kaWZ5QXNzb2NpYXRpb25JbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0Fzc29jaWF0aW9uKGFzc29jaWF0aW9uKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0xlYWd1ZUdyb3VwKGxlYWd1ZUdyb3VwOiBTYXZlTGVhZ3VlR3JvdXBJbnB1dCB8IE1vZGlmeUxlYWd1ZUdyb3VwSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIWxlYWd1ZUdyb3VwLm5hbWUgfHwgbGVhZ3VlR3JvdXAubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1N0YWZmZWxuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChsZWFndWVHcm91cC5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdTdGFmZmVsbmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBOdW1iZXIgdmFsaWRhdGlvblxuICBpZiAobGVhZ3VlR3JvdXAubnVtYmVyIDwgMSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbnVtYmVyJywgJ1N0YWZmZWxudW1tZXIgbXVzcyBwb3NpdGl2IHNlaW4nKTtcbiAgfVxuXG4gIC8vIFNob3J0IG5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFsZWFndWVHcm91cC5zaG9ydE5hbWUgfHwgbGVhZ3VlR3JvdXAuc2hvcnROYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdTdGFmZmVsLUt1cnpuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChsZWFndWVHcm91cC5zaG9ydE5hbWUubGVuZ3RoID4gMTApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdTdGFmZmVsLUt1cnpuYW1lIGRhcmYgMTAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9IGVsc2UgaWYgKCEvXltBLVphLXowLTldKyQvLnRlc3QobGVhZ3VlR3JvdXAuc2hvcnROYW1lKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc2hvcnROYW1lJywgJ1N0YWZmZWwtS3Vyem5hbWUgZGFyZiBudXIgYWxwaGFudW1lcmlzY2hlIFplaWNoZW4gZW50aGFsdGVuJyk7XG4gIH1cblxuICAvLyBSZWd1bGF0aW9uIHZhbGlkYXRpb25cbiAgaWYgKCFsZWFndWVHcm91cC5yZWd1bGF0aW9uIHx8IGxlYWd1ZUdyb3VwLnJlZ3VsYXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcigncmVndWxhdGlvbicsICdTdGFmZmVsLVJlZ2VsdW5nZW4gc2luZCBlcmZvcmRlcmxpY2gnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxlYWd1ZUdyb3VwKGxlYWd1ZUdyb3VwOiBTYXZlTGVhZ3VlR3JvdXBJbnB1dCB8IE1vZGlmeUxlYWd1ZUdyb3VwSW5wdXQpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tMZWFndWVHcm91cChsZWFndWVHcm91cCk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tUZWFtKHRlYW06IFNhdmVUZWFtSW5wdXQgfCBNb2RpZnlUZWFtSW5wdXQgfCBSZWdpc3RlclRlYW1JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25cbiAgaWYgKCduYW1lJyBpbiB0ZWFtICYmIHRlYW0ubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRlYW0ubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnVGVhbW5hbWUgZGFyZiBuaWNodCBsZWVyIHNlaW4nKTtcbiAgICB9IGVsc2UgaWYgKHRlYW0ubmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdUZWFtbmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEoJ2lkJyBpbiB0ZWFtKSkgeyAvLyBpZiBpZCBpcyBub3QgaW4gdGVhbSwgdGhlbiBpdCBpcyBhIG5ldyB0ZWFtXG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1RlYW1uYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfVxuXG4gIC8vIExlYWd1ZSBJRCB2YWxpZGF0aW9uXG4gIGlmICgnbGVhZ3VlSWQnIGluIHRlYW0gJiYgdGVhbS5sZWFndWVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRlYW0ubGVhZ3VlSWQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdsZWFndWVJZCcsICdMaWdhLUlEIGRhcmYgbmljaHQgbGVlciBzZWluJyk7XG4gICAgfSBlbHNlIGlmICh0ZWFtLmxlYWd1ZUlkLmxlbmd0aCA+IDEwMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdsZWFndWVJZCcsICdMaWdhLUlEIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoISgnaWQnIGluIHRlYW0pKSB7IC8vIGlmIGlkIGlzIG5vdCBpbiB0ZWFtLCB0aGVuIGl0IGlzIGEgbmV3IHRlYW1cbiAgICByZXN1bHQuYWRkRXJyb3IoJ2xlYWd1ZUlkJywgJ0xpZ2EtSUQgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgLy8gRXhlbXB0aW9uIHJlcXVlc3QgdmFsaWRhdGlvblxuICBpZiAodGVhbS5leGVtcHRpb25SZXF1ZXN0KSB7XG4gICAgaWYgKHRlYW0uZXhlbXB0aW9uUmVxdWVzdC50cmltKCkubGVuZ3RoID4gMTAwMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdleGVtcHRpb25SZXF1ZXN0JywgJ0ZyZWlzdGVsbHVuZ3NhbnRyYWcgZGFyZiAxMDAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZWFtKHRlYW06IFNhdmVUZWFtSW5wdXQgfCBNb2RpZnlUZWFtSW5wdXQgfCBSZWdpc3RlclRlYW1JbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja1RlYW0odGVhbSk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5cbiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRDQSxvQ0E0QkM7QUFFRCwwQ0FHQztBQUVELGtDQTBDQztBQUVELHdDQUdDO0FBRUQsOEJBMENDO0FBRUQsb0NBR0M7QUFFRCw0QkEwQkM7QUFFRCxrQ0FHQztBQUVELGtDQXdFQztBQUVELHdDQUdDO0FBRUQsa0VBUUM7QUFFRCxrQ0FvREM7QUFFRCx3Q0FHQztBQUVELDRDQWlDQztBQUVELGtEQUdDO0FBRUQsNENBOEJDO0FBRUQsa0RBR0M7QUFFRCw4QkFzQ0M7QUFFRCxvQ0FHQztBQTVkRCxNQUFhLHFCQUFxQjtJQUFsQztRQUVrQixhQUFRLEdBQWtDLEVBQUUsQ0FBQztRQUM3QyxXQUFNLEdBQWtDLEVBQUUsQ0FBQztJQXFDN0QsQ0FBQztJQW5DUSxVQUFVLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhLEVBQUUsT0FBZTtRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sTUFBTSxD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Q0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzcywgTW9kaWZ5QXNzb2NpYXRpb25JbnB1dCwgTW9kaWZ5Q2x1YklucHV0LCBNb2RpZnlHeW1JbnB1dCwgTW9kaWZ5TGVhZ3VlSW5wdXQsIE1vZGlmeVBlcnNvbklucHV0LCBNb2RpZnlTZWFzb25JbnB1dCwgU2F2ZUFzc29jaWF0aW9uSW5wdXQsIFNhdmVDbHViSW5wdXQsIFNhdmVHeW1JbnB1dCwgU2F2ZUxlYWd1ZUdyb3VwSW5wdXQsIFNhdmVMZWFndWVJbnB1dCwgU2F2ZVBlcnNvbklucHV0LCBTYXZlU2Vhc29uSW5wdXQsIE1vZGlmeUxlYWd1ZUdyb3VwSW5wdXQsIFNhdmVUZWFtSW5wdXQsIE1vZGlmeVRlYW1JbnB1dCwgUmVnaXN0ZXJUZWFtSW5wdXQgfSBmcm9tICdAZ2VuZXJhdGVkL2dyYXBocWwubW9kZWwuZ2VuZXJhdGVkJztcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JzOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuXG4gIHB1YmxpYyBhZGRXYXJuaW5nKGZpZWxkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy53YXJuaW5nc1tmaWVsZF0pIHtcbiAgICAgIHRoaXMud2FybmluZ3NbZmllbGRdID0gW107XG4gICAgfVxuICAgIHRoaXMud2FybmluZ3NbZmllbGRdLnB1c2gobWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRXJyb3IoZmllbGQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVycm9yc1tmaWVsZF0pIHtcbiAgICAgIHRoaXMuZXJyb3JzW2ZpZWxkXSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmVycm9yc1tmaWVsZF0ucHVzaChtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmVycm9ycykuZmxhdCgpO1xuICB9XG5cbiAgcHVibGljIGdldFdhcm5pbmdNZXNzYWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy53YXJuaW5ncykuZmxhdCgpO1xuICB9XG5cbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFcnJvck1lc3NhZ2VzKCkuam9pbignOyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXYXJuaW5nTWVzc2FnZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXYXJuaW5nTWVzc2FnZXMoKS5qb2luKCc7ICcpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0RXJyb3JNZXNzYWdlc1N0cmluZygpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIGlmIChhZGRyZXNzPy5jaXR5Py50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjaXR5JywgJ1N0YWR0IGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLmNpdHkhLmxlbmd0aCA+IDIwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY2l0eScsICdTdGFkdCBkYXJmIDIwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICBpZiAoYWRkcmVzcz8uY291bnRyeT8udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY291bnRyeScsICdMYW5kIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChhZGRyZXNzLmNvdW50cnkhLmxlbmd0aCA+IDIwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjb3VudHJ5JywgJ0xhbmQgZGFyZiAyMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICBpZiAoYWRkcmVzcz8uc3RyZWV0Py50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzdHJlZXQnLCAnU3RyYcOfZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoYWRkcmVzcy5zdHJlZXQhLmxlbmd0aCA+IDIwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignc3RyZWV0JywgJ1N0cmHDn2UgZGFyZiAyMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgaWYgKGFkZHJlc3M/LnppcD8udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignemlwJywgJ1BMWiBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoYWRkcmVzcy56aXAhLmxlbmd0aCA+IDIwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCd6aXAnLCAnUExaIGRhcmYgMjAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrQWRkcmVzcyhhZGRyZXNzKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0xlYWd1ZShsZWFndWU6IFNhdmVMZWFndWVJbnB1dCB8IE1vZGlmeUxlYWd1ZUlucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIEFnZSByYW5nZSB2YWxpZGF0aW9uc1xuICBpZiAobGVhZ3VlLm1pbkFnZSAhPSB1bmRlZmluZWQgJiYgbGVhZ3VlLm1heEFnZSAhPSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGVhZ3VlLm1pbkFnZSA8IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWluQWdlJywgJ01pbmRlc3RhbHRlciBkYXJmIG5pY2h0IG5lZ2F0aXYgc2VpbicpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA8IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltYWxhbHRlciBkYXJmIG5pY2h0IG5lZ2F0aXYgc2VpbicpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA8IGxlYWd1ZS5taW5BZ2UpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbWF4QWdlJywgJ01heGltYWxhbHRlciBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIGRlbSBNaW5kZXN0YWx0ZXIgc2VpbicpO1xuICAgIH1cbiAgICBpZiAobGVhZ3VlLm1heEFnZSA+IDEwMCkgeyAvLyBhZGp1c3QgYXMgbmVlZGVkXG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ21heEFnZScsICdNYXhpbWFsYWx0ZXIgw7xiZXJzY2hyZWl0ZXQgZGFzIHZlcm7DvG5mdGlnZSBMaW1pdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFsZWFndWUubmFtZSB8fCBsZWFndWUubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0xpZ2FuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChsZWFndWUubmFtZS5sZW5ndGggPiAxMDApIHsgLy8gYWRqdXN0IG1heCBsZW5ndGggYXMgbmVlZGVkXG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ0xpZ2FuYW1lIGRhcmYgMTAwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfVxuXG4gIC8vIERlc2NyaXB0aW9uIHZhbGlkYXRpb24gKGlmIHJlcXVpcmVkKVxuICBpZiAobGVhZ3VlLmRlc2NyaXB0aW9uICYmIGxlYWd1ZS5kZXNjcmlwdGlvbi5sZW5ndGggPiA1MDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2Rlc2NyaXB0aW9uJywgJ0Jlc2NocmVpYnVuZyBkYXJmIDUwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBTaG9ydCBuYW1lIHZhbGlkYXRpb25cbiAgaWYgKGxlYWd1ZS5zaG9ydE5hbWUpIHtcbiAgICBpZiAobGVhZ3VlLnNob3J0TmFtZS5sZW5ndGggPiAxMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnS3Vyem5hbWUgZGFyZiAxMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICAgIGlmICghL15bQS1aYS16MC05XSskLy50ZXN0KGxlYWd1ZS5zaG9ydE5hbWUpKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdLdXJ6bmFtZSBkYXJmIG51ciBhbHBoYW51bWVyaXNjaGUgWmVpY2hlbiBlbnRoYWx0ZW4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMZWFndWUobGVhZ3VlOiBTYXZlTGVhZ3VlSW5wdXQgfCBNb2RpZnlMZWFndWVJbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0xlYWd1ZShsZWFndWUpO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ2x1YihjbHViOiBTYXZlQ2x1YklucHV0IHwgTW9kaWZ5Q2x1YklucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIEZ1bGwgbmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIWNsdWIubmFtZSB8fCBjbHViLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdWZXJlaW5zbmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoY2x1Yi5uYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdWZXJlaW5zbmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBTaG9ydCBuYW1lIHZhbGlkYXRpb25zXG4gIGlmIChjbHViLnNob3J0TmFtZSkge1xuICAgIGlmIChjbHViLnNob3J0TmFtZS5sZW5ndGggPiAzMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnS3Vyem5hbWUgZGFyZiAzMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2Vic2l0ZSB2YWxpZGF0aW9uXG4gIGlmIChjbHViLndlYnNpdGUpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTChjbHViLndlYnNpdGUpO1xuICAgICAgaWYgKCFjbHViLndlYnNpdGUuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFjbHViLndlYnNpdGUuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICByZXN1bHQuYWRkRXJyb3IoJ3dlYnNpdGUnLCAnV2Vic2l0ZSBtdXNzIG1pdCBodHRwOi8vIG9kZXIgaHR0cHM6Ly8gYmVnaW5uZW4nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignd2Vic2l0ZScsICdVbmfDvGx0aWdlIFdlYnNpdGUtVVJMJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uXG4gIGlmIChjbHViLmFkZHJlc3MgJiYgKGNsdWIuYWRkcmVzcy5jaXR5IHx8IGNsdWIuYWRkcmVzcy5zdHJlZXQgfHwgY2x1Yi5hZGRyZXNzLnppcCkpIHtcbiAgICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKGNsdWIuYWRkcmVzcyk7XG4gICAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkRXJyb3IoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gICAgfSk7XG4gICAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiByZXN1bHQuYWRkV2FybmluZyhgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsdWIoY2x1YjogU2F2ZUNsdWJJbnB1dCB8IE1vZGlmeUNsdWJJbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0NsdWIoY2x1Yik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tHeW0oZ3ltOiBTYXZlR3ltSW5wdXQgfCBNb2RpZnlHeW1JbnB1dCk6IFZhbGlkYXRpb25DaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQoKTtcblxuICAvLyBOYW1lIHZhbGlkYXRpb25zXG4gIGlmICghZ3ltLm5hbWUgfHwgZ3ltLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdIYWxsZW5uYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmIChneW0ubmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnSGFsbGVubmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBhdmFpbGFibGUgZmllbGRzIHZhbGlkYXRpb25cbiAgaWYgKCFneW0uYXZhaWxhYmxlRmllbGRzIHx8IGd5bS5hdmFpbGFibGVGaWVsZHMudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignYXZhaWxhYmxlRmllbGRzJywgJ1ZlcmbDvGdiYXJlIEZlbGRlciBzaW5kIGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgLy8gQWRkcmVzcyB2YWxpZGF0aW9uc1xuICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKGd5bS5hZGRyZXNzKTtcbiAgLy8gTWVyZ2UgYWRkcmVzcyBlcnJvcnMgaW50byB0aGUgbWFpbiByZXN1bHRcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC5lcnJvcnMpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRFcnJvcihgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgfSk7XG4gIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQud2FybmluZ3MpLmZvckVhY2goKFtmaWVsZCwgbWVzc2FnZXNdKSA9PiB7XG4gICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRXYXJuaW5nKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHeW0oZ3ltOiBTYXZlR3ltSW5wdXQgfCBNb2RpZnlHeW1JbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja0d5bShneW0pO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2Vhc29uKHNlYXNvbjogU2F2ZVNlYXNvbklucHV0IHwgTW9kaWZ5U2Vhc29uSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIXNlYXNvbi5uYW1lIHx8IHNlYXNvbi5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnU2Fpc29ubmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoc2Vhc29uLm5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1NhaXNvbm5hbWUgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHZhbGlkIGRhdGVzXG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHNlYXNvbi5zdGFydERhdGUpO1xuICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoc2Vhc29uLmVuZERhdGUpO1xuICBjb25zdCByZWdpc3RyYXRpb25FbmQgPSBuZXcgRGF0ZShzZWFzb24ucmVnaXN0cmF0aW9uRW5kKTtcblxuICBpZiAoaXNOYU4oc3RhcnREYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kRGF0ZS5nZXRUaW1lKCkpIHx8IGlzTmFOKHJlZ2lzdHJhdGlvbkVuZC5nZXRUaW1lKCkpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdkYXRlcycsICdVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQnKTtcbiAgfVxuXG4gIGlmIChzZWFzb24ucmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25TdGFydCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCk7XG4gICAgaWYgKGlzTmFOKHJlZ2lzdHJhdGlvblN0YXJ0LmdldFRpbWUoKSkpIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uU3RhcnQnLCAnVW5nw7xsdGlnZXMgRGF0dW1zZm9ybWF0Jyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vhc29uIGRhdGUgdmFsaWRhdGlvbnNcbiAgaWYgKGVuZERhdGUgPD0gc3RhcnREYXRlKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdlbmREYXRlJywgJ1NhaXNvbi1FbmRkYXR1bSBtdXNzIG5hY2ggZGVtIFN0YXJ0ZGF0dW0gbGllZ2VuJyk7XG4gIH1cblxuICAvLyBSZWdpc3RyYXRpb24gcGVyaW9kIHZhbGlkYXRpb25zXG4gIGlmIChzZWFzb24ucmVnaXN0cmF0aW9uU3RhcnQpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25TdGFydCA9IG5ldyBEYXRlKHNlYXNvbi5yZWdpc3RyYXRpb25TdGFydCk7XG4gICAgaWYgKHJlZ2lzdHJhdGlvblN0YXJ0KSB7XG4gICAgICBpZiAocmVnaXN0cmF0aW9uRW5kIDw9IHJlZ2lzdHJhdGlvblN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcigncmVnaXN0cmF0aW9uRW5kJywgJ0FubWVsZHVuZ3NlbmRlIG11c3MgbmFjaCBkZW0gQW5tZWxkdW5nc3N0YXJ0IGxpZWdlbicpO1xuICAgICAgfVxuICAgICAgaWYgKHJlZ2lzdHJhdGlvblN0YXJ0ID49IHN0YXJ0RGF0ZSkge1xuICAgICAgICByZXN1bHQuYWRkRXJyb3IoJ3JlZ2lzdHJhdGlvblN0YXJ0JywgJ0FubWVsZHVuZyBtdXNzIHZvciBkZW0gU2Fpc29uc3RhcnQgYmVnaW5uZW4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVnaXN0cmF0aW9uRW5kID4gc3RhcnREYXRlKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdyZWdpc3RyYXRpb25FbmQnLCAnQW5tZWxkdW5nIG11c3Mgdm9yIGRlbSBTYWlzb25zdGFydCBlbmRlbicpO1xuICB9XG5cbiAgLy8gRnV0dXJlIGRhdGUgdmFsaWRhdGlvblxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAoc3RhcnREYXRlIDwgbm93KSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzdGFydERhdGUnLCAnU2Fpc29uLVN0YXJ0ZGF0dW0gZGFyZiBuaWNodCBpbiBkZXIgVmVyZ2FuZ2VuaGVpdCBsaWVnZW4nKTtcbiAgfVxuXG4gIC8vIExlYWd1ZSBvcmRlciB2YWxpZGF0aW9uIChvbmx5IGZvciBNb2RpZnlTZWFzb25JbnB1dClcbiAgaWYgKCdsZWFndWVPcmRlcicgaW4gc2Vhc29uICYmIHNlYXNvbi5sZWFndWVPcmRlciAmJiBBcnJheS5pc0FycmF5KHNlYXNvbi5sZWFndWVPcmRlcikpIHtcbiAgICBpZiAoc2Vhc29uLmxlYWd1ZU9yZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgbGVhZ3VlIElEc1xuICAgICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldChzZWFzb24ubGVhZ3VlT3JkZXIpO1xuICAgICAgaWYgKHVuaXF1ZUlkcy5zaXplICE9PSBzZWFzb24ubGVhZ3VlT3JkZXIubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5hZGRFcnJvcignbGVhZ3VlT3JkZXInLCAnTGlnYS1SZWloZW5mb2xnZSBkYXJmIGtlaW5lIGRvcHBlbHRlbiBMaWdhLUlEcyBlbnRoYWx0ZW4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGVtcHR5IGxlYWd1ZSBJRHNcbiAgICAgIGNvbnN0IGVtcHR5SWRzID0gc2Vhc29uLmxlYWd1ZU9yZGVyLmZpbHRlcigoaWQ6IHN0cmluZykgPT4gIWlkIHx8IGlkLnRyaW0oKS5sZW5ndGggPT09IDApO1xuICAgICAgaWYgKGVtcHR5SWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0LmFkZEVycm9yKCdsZWFndWVPcmRlcicsICdMaWdhLVJlaWhlbmZvbGdlIGRhcmYga2VpbmUgbGVlcmVuIExpZ2EtSURzIGVudGhhbHRlbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlYXNvbihzZWFzb246IFNhdmVTZWFzb25JbnB1dCB8IE1vZGlmeVNlYXNvbklucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrU2Vhc29uKHNlYXNvbik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWFzb25PcGVuRm9yUmVnaXN0cmF0aW9uKHNlYXNvbjogU2F2ZVNlYXNvbklucHV0IHwgTW9kaWZ5U2Vhc29uSW5wdXQsIGRhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHJlZ2lzdHJhdGlvblN0YXJ0LCByZWdpc3RyYXRpb25FbmQgfSA9IHNlYXNvbjtcbiAgaWYgKCFyZWdpc3RyYXRpb25TdGFydCB8fCAhcmVnaXN0cmF0aW9uRW5kKSByZXR1cm4gZmFsc2U7XG4gIC8vIEV4cGVjdCBBV1NEYXRlIChZWVlZLU1NLUREKTsgZ3VhcmQgdG8ga2VlcCBjb21wYXJpc29ucyByZWxpYWJsZVxuICBjb25zdCBpc0F3c0RhdGUgPSAoczogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdChzKTtcbiAgaWYgKCFpc0F3c0RhdGUoZGF0ZSkgfHwgIWlzQXdzRGF0ZShyZWdpc3RyYXRpb25TdGFydCkgfHwgIWlzQXdzRGF0ZShyZWdpc3RyYXRpb25FbmQpKSByZXR1cm4gZmFsc2U7XG4gIC8vIEluY2x1c2l2ZSByYW5nZVxuICByZXR1cm4gcmVnaXN0cmF0aW9uU3RhcnQgPD0gZGF0ZSAmJiBkYXRlIDw9IHJlZ2lzdHJhdGlvbkVuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUGVyc29uKHBlcnNvbjogU2F2ZVBlcnNvbklucHV0IHwgTW9kaWZ5UGVyc29uSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uc1xuICBpZiAoIXBlcnNvbi5maXJzdE5hbWU/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignZmlyc3ROYW1lJywgJ1Zvcm5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgaWYgKCFwZXJzb24ubGFzdE5hbWU/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbGFzdE5hbWUnLCAnTmFjaG5hbWUgaXN0IGVyZm9yZGVybGljaCcpO1xuICB9XG5cbiAgLy8gRW1haWwgdmFsaWRhdGlvblxuICBpZiAocGVyc29uLmVtYWlsICYmICEvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHBlcnNvbi5lbWFpbCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2VtYWlsJywgJ1VuZ8O8bHRpZ2VzIEUtTWFpbC1Gb3JtYXQnKTtcbiAgfVxuXG4gIC8vIFBob25lIG51bWJlciB2YWxpZGF0aW9uXG4gIGlmIChwZXJzb24ucGhvbmUpIHtcbiAgICAvLyBBbGxvdyBkaWdpdHMsIHNwYWNlcywgKywgLSwgYW5kICgpXG4gICAgY29uc3QgcGhvbmVSZWdleCA9IC9eW1xcZFxccysoKS1dezgsMjB9JC87XG4gICAgaWYgKCFwaG9uZVJlZ2V4LnRlc3QocGVyc29uLnBob25lKSkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdwaG9uZScsICdVbmfDvGx0aWdlcyBUZWxlZm9ubnVtbWVyLUZvcm1hdCAoKzQ5IDEyMzQgNTY3ODkwKScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERhdGUgb2YgYmlydGggdmFsaWRhdGlvblxuICBpZiAocGVyc29uLmRhdGVPZkJpcnRoKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHBlcnNvbi5kYXRlT2ZCaXJ0aCk7XG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCdkYXRlT2ZCaXJ0aCcsICdVbmfDvGx0aWdlcyBHZWJ1cnRzZGF0dW1zZm9ybWF0Jyk7XG4gICAgfVxuICAgIC8vIEFkZCBhZ2UgcmVzdHJpY3Rpb25zIGlmIG5lZWRlZFxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoZGF0ZSA+IHRvZGF5KSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ2RhdGVPZkJpcnRoJywgJ0dlYnVydHNkYXR1bSBkYXJmIG5pY2h0IGluIGRlciBadWt1bmZ0IGxpZWdlbicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZHJlc3MgdmFsaWRhdGlvblxuICBpZiAocGVyc29uLmFkZHJlc3MgJiYgKHBlcnNvbi5hZGRyZXNzLmNpdHkgfHwgcGVyc29uLmFkZHJlc3Muc3RyZWV0IHx8IHBlcnNvbi5hZGRyZXNzLnppcCkpIHtcbiAgICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKHBlcnNvbi5hZGRyZXNzKTtcbiAgICAvLyBNZXJnZSBhZGRyZXNzIGVycm9ycyBpbnRvIHRoZSBtYWluIHJlc3VsdFxuICAgIE9iamVjdC5lbnRyaWVzKGFkZHJlc3NSZXN1bHQuZXJyb3JzKS5mb3JFYWNoKChbZmllbGQsIG1lc3NhZ2VzXSkgPT4ge1xuICAgICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRFcnJvcihgYWRkcmVzcy4ke2ZpZWxkfWAsIG1lc3NhZ2UpKTtcbiAgICB9KTtcbiAgICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0Lndhcm5pbmdzKS5mb3JFYWNoKChbZmllbGQsIG1lc3NhZ2VzXSkgPT4ge1xuICAgICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHJlc3VsdC5hZGRXYXJuaW5nKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGVyc29uKHBlcnNvbjogU2F2ZVBlcnNvbklucHV0IHwgTW9kaWZ5UGVyc29uSW5wdXQpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tQZXJzb24ocGVyc29uKTtcbiAgcmVzdWx0LnZhbGlkYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0Fzc29jaWF0aW9uKGFzc29jaWF0aW9uOiBTYXZlQXNzb2NpYXRpb25JbnB1dCB8IE1vZGlmeUFzc29jaWF0aW9uSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uXG4gIGlmICghYXNzb2NpYXRpb24ubmFtZT8udHJpbSgpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1ZlcmJhbmRzbmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAoYXNzb2NpYXRpb24ubmFtZS5sZW5ndGggPiAxMDApIHsgLy8gYWRqdXN0IG1heCBsZW5ndGggYXMgbmVlZGVkXG4gICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1ZlcmJhbmRzbmFtZSBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gIH1cblxuICAvLyBDb250YWN0IEVtYWlsIHZhbGlkYXRpb25cbiAgaWYgKCFhc3NvY2lhdGlvbi5jb250YWN0RW1haWw/LnRyaW0oKSkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignY29udGFjdEVtYWlsJywgJ0tvbnRha3QtRS1NYWlsIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfSBlbHNlIGlmICghL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdChhc3NvY2lhdGlvbi5jb250YWN0RW1haWwpKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdjb250YWN0RW1haWwnLCAnVW5nw7xsdGlnZXMgS29udGFrdC1FLU1haWwtRm9ybWF0Jyk7XG4gIH1cblxuICAvLyBDb250YWN0IE5hbWUgdmFsaWRhdGlvblxuICBpZiAoIWFzc29jaWF0aW9uLmNvbnRhY3ROYW1lPy50cmltKCkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ2NvbnRhY3ROYW1lJywgJ0tvbnRha3RuYW1lIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfVxuXG4gIC8vIEFkZHJlc3MgdmFsaWRhdGlvblxuICBjb25zdCBhZGRyZXNzUmVzdWx0ID0gY2hlY2tBZGRyZXNzKGFzc29jaWF0aW9uLmFkZHJlc3MpO1xuICAvLyBNZXJnZSBhZGRyZXNzIGVycm9ycyBpbnRvIHRoZSBtYWluIHJlc3VsdFxuICBPYmplY3QuZW50cmllcyhhZGRyZXNzUmVzdWx0LmVycm9ycykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZEVycm9yKGBhZGRyZXNzLiR7ZmllbGR9YCwgbWVzc2FnZSkpO1xuICB9KTtcbiAgT2JqZWN0LmVudHJpZXMoYWRkcmVzc1Jlc3VsdC53YXJuaW5ncykuZm9yRWFjaCgoW2ZpZWxkLCBtZXNzYWdlc10pID0+IHtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4gcmVzdWx0LmFkZFdhcm5pbmcoYGFkZHJlc3MuJHtmaWVsZH1gLCBtZXNzYWdlKSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFzc29jaWF0aW9uKGFzc29jaWF0aW9uOiBTYXZlQXNzb2NpYXRpb25JbnB1dCB8IE1vZGlmeUFzc29jaWF0aW9uSW5wdXQpOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gY2hlY2tBc3NvY2lhdGlvbihhc3NvY2lhdGlvbik7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tMZWFndWVHcm91cChsZWFndWVHcm91cDogU2F2ZUxlYWd1ZUdyb3VwSW5wdXQgfCBNb2RpZnlMZWFndWVHcm91cElucHV0KTogVmFsaWRhdGlvbkNoZWNrUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25DaGVja1Jlc3VsdCgpO1xuXG4gIC8vIE5hbWUgdmFsaWRhdGlvbnNcbiAgaWYgKCFsZWFndWVHcm91cC5uYW1lIHx8IGxlYWd1ZUdyb3VwLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdTdGFmZmVsbmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAobGVhZ3VlR3JvdXAubmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnU3RhZmZlbG5hbWUgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICB9XG5cbiAgLy8gTnVtYmVyIHZhbGlkYXRpb25cbiAgaWYgKGxlYWd1ZUdyb3VwLm51bWJlciA8IDEpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ251bWJlcicsICdTdGFmZmVsbnVtbWVyIG11c3MgcG9zaXRpdiBzZWluJyk7XG4gIH1cblxuICAvLyBTaG9ydCBuYW1lIHZhbGlkYXRpb25zXG4gIGlmICghbGVhZ3VlR3JvdXAuc2hvcnROYW1lIHx8IGxlYWd1ZUdyb3VwLnNob3J0TmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnU3RhZmZlbC1LdXJ6bmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH0gZWxzZSBpZiAobGVhZ3VlR3JvdXAuc2hvcnROYW1lLmxlbmd0aCA+IDEwKSB7XG4gICAgcmVzdWx0LmFkZEVycm9yKCdzaG9ydE5hbWUnLCAnU3RhZmZlbC1LdXJ6bmFtZSBkYXJmIDEwIFplaWNoZW4gbmljaHQgw7xiZXJzY2hyZWl0ZW4nKTtcbiAgfSBlbHNlIGlmICghL15bQS1aYS16MC05XSskLy50ZXN0KGxlYWd1ZUdyb3VwLnNob3J0TmFtZSkpIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3Nob3J0TmFtZScsICdTdGFmZmVsLUt1cnpuYW1lIGRhcmYgbnVyIGFscGhhbnVtZXJpc2NoZSBaZWljaGVuIGVudGhhbHRlbicpO1xuICB9XG5cbiAgLy8gUmVndWxhdGlvbiB2YWxpZGF0aW9uXG4gIGlmICghbGVhZ3VlR3JvdXAucmVndWxhdGlvbiB8fCBsZWFndWVHcm91cC5yZWd1bGF0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXN1bHQuYWRkRXJyb3IoJ3JlZ3VsYXRpb24nLCAnU3RhZmZlbC1SZWdlbHVuZ2VuIHNpbmQgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMZWFndWVHcm91cChsZWFndWVHcm91cDogU2F2ZUxlYWd1ZUdyb3VwSW5wdXQgfCBNb2RpZnlMZWFndWVHcm91cElucHV0KTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IGNoZWNrTGVhZ3VlR3JvdXAobGVhZ3VlR3JvdXApO1xuICByZXN1bHQudmFsaWRhdGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVGVhbSh0ZWFtOiBTYXZlVGVhbUlucHV0IHwgTW9kaWZ5VGVhbUlucHV0IHwgUmVnaXN0ZXJUZWFtSW5wdXQpOiBWYWxpZGF0aW9uQ2hlY2tSZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvbkNoZWNrUmVzdWx0KCk7XG5cbiAgLy8gTmFtZSB2YWxpZGF0aW9uXG4gIGlmICgnbmFtZScgaW4gdGVhbSAmJiB0ZWFtLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0ZWFtLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmFkZEVycm9yKCduYW1lJywgJ1RlYW1uYW1lIGRhcmYgbmljaHQgbGVlciBzZWluJyk7XG4gICAgfSBlbHNlIGlmICh0ZWFtLm5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgICByZXN1bHQuYWRkRXJyb3IoJ25hbWUnLCAnVGVhbW5hbWUgZGFyZiAxMDAgWmVpY2hlbiBuaWNodCDDvGJlcnNjaHJlaXRlbicpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghKCdpZCcgaW4gdGVhbSkpIHsgLy8gaWYgaWQgaXMgbm90IGluIHRlYW0sIHRoZW4gaXQgaXMgYSBuZXcgdGVhbVxuICAgIHJlc3VsdC5hZGRFcnJvcignbmFtZScsICdUZWFtbmFtZSBpc3QgZXJmb3JkZXJsaWNoJyk7XG4gIH1cblxuICAvLyBMZWFndWUgSUQgdmFsaWRhdGlvblxuICBpZiAoJ2xlYWd1ZUlkJyBpbiB0ZWFtICYmIHRlYW0ubGVhZ3VlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0ZWFtLmxlYWd1ZUlkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbGVhZ3VlSWQnLCAnTGlnYS1JRCBkYXJmIG5pY2h0IGxlZXIgc2VpbicpO1xuICAgIH0gZWxzZSBpZiAodGVhbS5sZWFndWVJZC5sZW5ndGggPiAxMDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignbGVhZ3VlSWQnLCAnTGlnYS1JRCBkYXJmIDEwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEoJ2lkJyBpbiB0ZWFtKSkgeyAvLyBpZiBpZCBpcyBub3QgaW4gdGVhbSwgdGhlbiBpdCBpcyBhIG5ldyB0ZWFtXG4gICAgcmVzdWx0LmFkZEVycm9yKCdsZWFndWVJZCcsICdMaWdhLUlEIGlzdCBlcmZvcmRlcmxpY2gnKTtcbiAgfVxuXG4gIC8vIEV4ZW1wdGlvbiByZXF1ZXN0IHZhbGlkYXRpb25cbiAgaWYgKHRlYW0uZXhlbXB0aW9uUmVxdWVzdCkge1xuICAgIGlmICh0ZWFtLmV4ZW1wdGlvblJlcXVlc3QudHJpbSgpLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIHJlc3VsdC5hZGRFcnJvcignZXhlbXB0aW9uUmVxdWVzdCcsICdGcmVpc3RlbGx1bmdzYW50cmFnIGRhcmYgMTAwMCBaZWljaGVuIG5pY2h0IMO8YmVyc2NocmVpdGVuJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGxheWVyIElEcyB2YWxpZGF0aW9uXG4gIGlmICghdGVhbS5wbGF5ZXJJZHMgfHwgdGVhbS5wbGF5ZXJJZHMubGVuZ3RoIDwgMikge1xuICAgIHJlc3VsdC5hZGRFcnJvcigncGxheWVySWRzJywgJ0VzIG3DvHNzZW4gbWluZGVzdGVucyAyIFNwaWVsZXIgZsO8ciBlaW4gVGVhbSBhbmdlZ2ViZW4gd2VyZGVuJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZWFtKHRlYW06IFNhdmVUZWFtSW5wdXQgfCBNb2RpZnlUZWFtSW5wdXQgfCBSZWdpc3RlclRlYW1JbnB1dCk6IHZvaWQge1xuICBjb25zdCByZXN1bHQgPSBjaGVja1RlYW0odGVhbSk7XG4gIHJlc3VsdC52YWxpZGF0ZSgpO1xufVxuXG5cbiJdfQ==
package/package.json CHANGED
@@ -38,9 +38,9 @@
38
38
  "@graphql-codegen/cli": "^5.0.7",
39
39
  "@graphql-codegen/typescript": "^4.1.6",
40
40
  "@stylistic/eslint-plugin": "^2",
41
- "@taimos/projen": "^0.1.21",
41
+ "@taimos/projen": "^0.1.22",
42
42
  "@types/jest": "^30.0.0",
43
- "@types/node": "^24.3.0",
43
+ "@types/node": "^24.3.1",
44
44
  "@typescript-eslint/eslint-plugin": "^8",
45
45
  "@typescript-eslint/parser": "^8",
46
46
  "commit-and-tag-version": "^12",
@@ -54,7 +54,7 @@
54
54
  "projen-pipelines": "^0.2.14",
55
55
  "ts-jest": "^29.4.1",
56
56
  "ts-node": "^10.9.2",
57
- "typedoc": "^0.28.11",
57
+ "typedoc": "^0.28.12",
58
58
  "typescript": "^5.9.2"
59
59
  },
60
60
  "dependencies": {
@@ -73,7 +73,7 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "version": "0.0.13",
76
+ "version": "0.0.15",
77
77
  "jest": {
78
78
  "coverageProvider": "v8",
79
79
  "moduleNameMapper": {