@rusticarcade/palette 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,12 +29,11 @@ INVALID_ENV
29
29
  Failed to find a custom elements registry in this environment. Is a window
30
30
  global available with a customElements property?
31
31
  `,
32
- [100 /* DUPE_TAGNAME */]: `
33
- DUPE_TAGNAME
34
- Failed to register a custom element with the tagname %s because another
35
- custom element is already defined with that name.
32
+ [2 /* INVALID_CALLSITE */]: `
33
+ INVALID_CALLSITE
34
+ A function was invoked with an invalid set of parameters.
36
35
  `,
37
- [101 /* INVALID_TAGNAME */]: `
36
+ [100 /* INVALID_TAGNAME */]: `
38
37
  INVALID_TAGNAME
39
38
  Failed to determine a valid HTML Tag to use when registering a component as a
40
39
  custom element. Specify a static readonly tagName property on your component
@@ -59,44 +58,39 @@ type. Values must be a string, HTMLElement.
59
58
 
60
59
  Instead, got %s: %s.
61
60
  `,
62
- [200 /* TEMPLATE_INVALID */]: `
61
+ [200 /* TEMPLATE_INVALID_VALUE */]: `
63
62
  TEMPLATE_INVALID
64
63
  The value %s cannot be interpolated via the Template html string helper.
65
64
  Values may only be HTMLTemplateElements (template content is adopted) or
66
65
  strings (shorthand for a ::swap directive on an element)
67
66
  `,
68
- [201 /* TEMPLATE_INVALID_NOTATION */]: `
67
+ [201 /* TEMPLATE_INVALID_NOTATION_SYNTAX */]: `
69
68
  TEMPLATE_INVALID_NOTATION
70
69
  A template value notation failed to parse. Notations must begin with one of
71
70
  @, $, *, or #, followed by a dot-separated path of accessor names. Optionally,
72
- notations may have modifiers around them, such as the NOT() modifier.
71
+ notations may have modifiers such as the ! modifier.
73
72
 
74
73
  The notation that failed to parse was "%s"
75
74
  `,
76
- [202 /* TEMPLATE_INVALID_COMPONENT */]: `
75
+ [203 /* TEMPLATE_INVALID_COMPONENT */]: `
77
76
  TEMPLATE_INVALID_COMPONENT
78
77
  Failed to interpolate a Component in an html template string due to the
79
78
  Component having an invalid tagName property.
80
79
 
81
80
  Component "%s" has an invalid tagName property "%s"
82
81
  `,
83
- [205 /* TEMPLATE_MISSING_LIST_PARENT */]: `
84
- TEMPLATE_MISSING_LIST_PARENT
85
- A template failed to prepare an ::each directive because no valid parent node
86
- was found for the list to render into.
87
- `,
88
- [203 /* TEMPLATE_INVALID_LIST */]: `
82
+ [204 /* TEMPLATE_INVALID_LIST_DATA */]: `
89
83
  TEMPLATE_INVALID_LIST
90
84
  A template failed to render because an ::each directive fetched a value which
91
85
  was not an array of actionable data.
92
86
  `,
93
- [204 /* TEMPLATE_INVALID_NODE_REF */]: `
87
+ [3 /* MISSING_NODE_REF */]: `
94
88
  TEMPLATE_INVALID_NODE_REF
95
89
  A template failed to prepare a node from a compiled source. Typically, this
96
90
  means something is broken within the compiled template rather than an error with
97
91
  the template content itself.
98
92
  `,
99
- [206 /* TEMPLATE_MISSING_LIST_KEY */]: `
93
+ [205 /* TEMPLATE_MISSING_LIST_KEY */]: `
100
94
  TEMPLATE_MISSING_LIST_KEY
101
95
  A template failed to compile because an ::each directive was found on an element
102
96
  without a corresponding ::key directive. ::each directives must have a ::key
@@ -105,11 +99,27 @@ value for each item in the list.
105
99
 
106
100
  Example: <li ::each="$items" ::key="#id"> ... </li>
107
101
  `,
108
- [207 /* TEMPLATE_DUPLICATE_LIST_KEY */]: `
102
+ [206 /* TEMPLATE_DUPLICATE_LIST_KEY */]: `
109
103
  TEMPLATE_DUPLICATE_LIST_KEY
110
104
  A list failed to render because item key %s appeared multiple times when
111
105
  resolving list item keys. Each ::key directive must reference a notation whose
112
106
  value is unique for each list item.
107
+ `,
108
+ [207 /* TEMPLATE_INVALID_CONDITIONAL */]: `
109
+ TEMPLATE_INVALID_CONDITIONAL
110
+ A template failed to compile due to an invalid use of conditional directives.
111
+
112
+ Conditional elements must be siblings. The first conditional branch must use an
113
+ ::if directive, followed by zero or more ::else-if directives, and finally zero
114
+ or one ::else directive.
115
+
116
+ ::if and ::else-if directives must specify a notation to evaluate. ::else does
117
+ not take any values and is just a binary attribute.
118
+ `,
119
+ [202 /* TEMPLATE_MISSING_NOTATION */]: `
120
+ TEMPLATE_MISSING_NOTATION
121
+ A template failed to compile because a %s directive did not have an associated
122
+ notation despite requiring one.
113
123
  `,
114
124
  [303 /* INVALID_STATE_KEY */]: `
115
125
  INVALID_STATE_KEY
@@ -144,6 +154,19 @@ during a render lifecycle method such as beforeUpdate() or afterUpdate(). If
144
154
  state changes unconditionally during a render, the render will infinitely loop.
145
155
  Updating render source data during a render cycle is supported, but infinite
146
156
  update loops may occur if unchecked.
157
+ `,
158
+ [208 /* TEMPLATE_INVALID_KEY_DIRECTIVE */]: `
159
+ TEMPLATE_INVALID_KEY_DIRECTIVE
160
+ A template failed to compile because a ::key directive was found on an element
161
+ with no associated ::each directive. ::key directives can only be used in
162
+ association with list rendering via ::each.
163
+ `,
164
+ [209 /* TEMPLATE_PARENT_REQUIRED */]: `
165
+ TEMPLATE_PARENT_REQUIRED
166
+ A template failed to compile due to an element which requires a parent having
167
+ no available parent in the template.
168
+
169
+ ::each and ::if/::else-if/::else elements must have a parent node.
147
170
  `
148
171
  };
149
172
  return DEV_ERROR_INFO[code];
@@ -239,7 +262,7 @@ class LRUCache {
239
262
  this._data.delete(firstKey);
240
263
  }
241
264
  };
242
- get metrics() {
265
+ getMetrics() {
243
266
  if (true) {
244
267
  const { hits = 0, misses = 0 } = this._metrics ?? {};
245
268
  const lookups = hits + misses;
@@ -253,14 +276,6 @@ class LRUCache {
253
276
  hitRate
254
277
  };
255
278
  }
256
- return {
257
- lookups: 0,
258
- hits: 0,
259
- misses: 0,
260
- capacity: 0,
261
- entries: 0,
262
- hitRate: 0
263
- };
264
279
  }
265
280
  setCapacity = (maxSize) => {
266
281
  if (maxSize <= 0 && true) {
@@ -343,5 +358,5 @@ export {
343
358
  cleanupGlobalTestDOM
344
359
  };
345
360
 
346
- //# debugId=925A43921950535764756E2164756E21
347
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3Rlc3QtdXRpbC9nbG9iYWwtZW52LnRzIiwgInNyYy9lcnJvcnMudHMiLCAic3JjL3V0aWwvYXR0cmlidXRlcy50cyIsICJzcmMvdXRpbC9scnUtY2FjaGUudHMiLCAic3JjL3V0aWwvZnJhZ21lbnRzLnRzIiwgInNyYy90ZXN0LXV0aWwvdGFncy50cyIsICJzcmMvdGVzdC11dGlsL3JlbmRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKlxuICogQ29weXJpZ2h0IMKpIFJ1c3RpYyBBcmNhZGUsIExMQyAyMDI2XG4gKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cbiAqL1xuXG5pbXBvcnQgeyBHbG9iYWxSZWdpc3RyYXRvciB9IGZyb20gXCJAaGFwcHktZG9tL2dsb2JhbC1yZWdpc3RyYXRvclwiO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIGdsb2JhbCB0ZXN0IERPTSBlbnZpcm9ubWVudCAodXNpbmcgSGFwcHlET00pXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlR2xvYmFsVGVzdERPTSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY2xlYW51cEdsb2JhbFRlc3RET00oKTtcbiAgR2xvYmFsUmVnaXN0cmF0b3IucmVnaXN0ZXIoKTtcbn1cblxuLyoqXG4gKiBDbGVhbnVwIHRoZSBnbG9iYWwgdGVzdCBET00gZW52aXJvbm1lbnQgKHVzaW5nIEhhcHB5RE9NKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYW51cEdsb2JhbFRlc3RET00oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aGlsZSAoZG9jdW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgQnVuLnNsZWVwKDEpO1xuXG4gIGlmIChHbG9iYWxSZWdpc3RyYXRvci5pc1JlZ2lzdGVyZWQpIHtcbiAgICBHbG9iYWxSZWdpc3RyYXRvci51bnJlZ2lzdGVyKCk7XG4gIH1cbn1cbiIsCiAgICAiLypcbiAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcbiAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwczovL21vemlsbGEub3JnL01QTC8yLjAvLlxuICovXG4vKipcbiAqIFBvc3NpYmxlIGVycm9yIHR5cGVzIGZvciB7QGxpbmsgUGFsZXR0ZUVycm9yfVxuICpcbiAqIENvZGVzIGFyZSBjYXRlZ29yaXplZCBpbnRvIGdyb3VwcyBieSB0aGUgMTAwJ3M6XG4gKlxuICogLSAwIC0gOTk6IEludmFyaWFudHNcbiAqIC0gMTAwIC0gMTk5OiBDdXN0b20gRWxlbWVudHMgLyBFbnZpcm9ubWVudCBFcnJvcnNcbiAqIC0gMjAwIC0gMjk5OiBUZW1wbGF0aW5nIEVycm9yc1xuICogLSAzMDAgLSAzOTk6IFJ1bnRpbWUgRXJyb3JzXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEVycm9yQ29kZSB7XG4gIC8vIDAgLSA5OTogSW52YXJpYW50c1xuICBJTlZBUklBTlQgPSAwLFxuICBJTlZBTElEX0VOViA9IDEsXG5cbiAgLy8gMTAwIC0gMTk5OiBDdXN0b20gRWxlbWVudHMgRXJyb3JzXG4gIERVUEVfVEFHTkFNRSA9IDEwMCxcbiAgSU5WQUxJRF9UQUdOQU1FID0gMTAxLFxuXG4gIC8vIDIwMCAtIDI5OTogVGVtcGxhdGUgRXJyb3JzXG4gIFRFTVBMQVRFX0lOVkFMSUQgPSAyMDAsXG4gIFRFTVBMQVRFX0lOVkFMSURfTk9UQVRJT04gPSAyMDEsXG4gIFRFTVBMQVRFX0lOVkFMSURfQ09NUE9ORU5UID0gMjAyLFxuICBURU1QTEFURV9JTlZBTElEX0xJU1QgPSAyMDMsXG4gIFRFTVBMQVRFX0lOVkFMSURfTk9ERV9SRUYgPSAyMDQsXG4gIFRFTVBMQVRFX01JU1NJTkdfTElTVF9QQVJFTlQgPSAyMDUsXG4gIFRFTVBMQVRFX01JU1NJTkdfTElTVF9LRVkgPSAyMDYsXG4gIFRFTVBMQVRFX0RVUExJQ0FURV9MSVNUX0tFWSA9IDIwNyxcblxuICAvLyAzMDAgLSAzOTk6IFJ1bnRpbWUgRXJyb3JzXG4gIE1JU1NJTkdfRUxFTUVOVCA9IDMwMCxcbiAgTUlTU0lOR19TVEFURSA9IDMwMSxcbiAgSU5WQUxJRF9DT05URU5UID0gMzAyLFxuICBJTlZBTElEX1NUQVRFX0tFWSA9IDMwMyxcbiAgSU5WQUxJRF9TVEFURV9VUERBVEUgPSAzMDQsXG4gIFNUQVRFX0xPQ0tFRCA9IDMwNSxcbiAgTUFYX1NFUVVFTlRJQUxfUkVOREVSUyA9IDMwNixcbn1cblxuZnVuY3Rpb24gZ2V0RGV2RXJyb3IoY29kZTogRXJyb3JDb2RlKSB7XG4gIGNvbnN0IERFVl9FUlJPUl9JTkZPOiBSZWNvcmQ8RXJyb3JDb2RlLCBzdHJpbmc+ID0ge1xuICAgIFtFcnJvckNvZGUuSU5WQVJJQU5UXTogYFxuSU5WQVJJQU5UXG5BIGNvbmRpdGlvbiBoYXMgb2NjdXJyZWQgd2hpY2ggc2hvdWxkIG5ldmVyIGhhcHBlbiwgc3VjaCBhcyBhIGNvZGUgcGF0aCB0aGF0XG5zaG91bGRuJ3QgYmUgcmVhY2hhYmxlIHdoZW4gdXNpbmcgY29ycmVjdCB0eXBlcywgb3IgYSBkaXNhbGxvd2VkIHN0YXRlLlxuYCxcblxuICAgIFtFcnJvckNvZGUuSU5WQUxJRF9FTlZdOiBgXG5JTlZBTElEX0VOVlxuRmFpbGVkIHRvIGZpbmQgYSBjdXN0b20gZWxlbWVudHMgcmVnaXN0cnkgaW4gdGhpcyBlbnZpcm9ubWVudC4gSXMgYSB3aW5kb3dcbmdsb2JhbCBhdmFpbGFibGUgd2l0aCBhIGN1c3RvbUVsZW1lbnRzIHByb3BlcnR5P1xuYCxcblxuICAgIFtFcnJvckNvZGUuRFVQRV9UQUdOQU1FXTogYFxuRFVQRV9UQUdOQU1FXG5GYWlsZWQgdG8gcmVnaXN0ZXIgYSBjdXN0b20gZWxlbWVudCB3aXRoIHRoZSB0YWduYW1lICVzIGJlY2F1c2UgYW5vdGhlclxuY3VzdG9tIGVsZW1lbnQgaXMgYWxyZWFkeSBkZWZpbmVkIHdpdGggdGhhdCBuYW1lLlxuYCxcblxuICAgIFtFcnJvckNvZGUuSU5WQUxJRF9UQUdOQU1FXTogYFxuSU5WQUxJRF9UQUdOQU1FXG5GYWlsZWQgdG8gZGV0ZXJtaW5lIGEgdmFsaWQgSFRNTCBUYWcgdG8gdXNlIHdoZW4gcmVnaXN0ZXJpbmcgYSBjb21wb25lbnQgYXMgYVxuY3VzdG9tIGVsZW1lbnQuIFNwZWNpZnkgYSBzdGF0aWMgcmVhZG9ubHkgdGFnTmFtZSBwcm9wZXJ0eSBvbiB5b3VyIGNvbXBvbmVudFxuY2xhc3Mgb3IgcHJvdmlkZSBhIHRhZ05hbWUgYXJndW1lbnQgdG8gQ29tcG9uZW50LnJlZ2lzdGVyLlxuXG5BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGRpcmVjdGx5IHJlZ2lzdGVyIHlvdXIgZWxlbWVudCBhcyB5b3Ugd291bGQgYW55IG90aGVyXG5IVE1MIGN1c3RvbSBlbGVtZW50OiBjdXN0b21FbGVtZW50cy5kZWZpbmUoXCJteS10YWdcIiwgTXlDb21wb25lbnRDbGFzcyk7XG5gLFxuXG4gICAgW0Vycm9yQ29kZS5NSVNTSU5HX0VMRU1FTlRdOiBgXG5NSVNTSU5HX0VMRU1FTlRcbkFuIGVsZW1lbnQgd2FzIGV4cGVjdGVkIHRvIGV4aXN0IGJ1dCB3YXMgbm90IGZvdW5kIHdoZW4gdGhlIERPTSB3YXMgcXVlcmllZC5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLk1JU1NJTkdfU1RBVEVdOiBgXG5NSVNTSU5HX1NUQVRFXG5BIENvbXBvbmVudCdzIHJlYWN0aXZlIHN0YXRlIHdhcyBhY2Nlc3NlZCwgYnV0IG5vIGluaXRpYWxTdGF0ZSBpcyBkZWZpbmVkIGZvclxudGhlIENvbXBvbmVudCdzIGNsYXNzLiBJbml0aWFsIHN0YXRlIG11c3QgYmUgZGVmaW5lZCBhcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24uXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5JTlZBTElEX0NPTlRFTlRdOiBgXG5JTlZBTElEX0NPTlRFTlRcblRyaWVkIHRvIHNldCBhIHZhbHVlIGFzIGNvbnRlbnQgaW4gYSB0ZW1wbGF0ZSwgYnV0IHRoZSB2YWx1ZSB3YXMgbm90IGEgc3VwcG9ydGVkXG50eXBlLiBWYWx1ZXMgbXVzdCBiZSBhIHN0cmluZywgSFRNTEVsZW1lbnQuXG5cbkluc3RlYWQsIGdvdCAlczogJXMuXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9JTlZBTElEXTogYFxuVEVNUExBVEVfSU5WQUxJRFxuVGhlIHZhbHVlICVzIGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgdmlhIHRoZSBUZW1wbGF0ZSBodG1sIHN0cmluZyBoZWxwZXIuXG5WYWx1ZXMgbWF5IG9ubHkgYmUgSFRNTFRlbXBsYXRlRWxlbWVudHMgKHRlbXBsYXRlIGNvbnRlbnQgaXMgYWRvcHRlZCkgb3JcbnN0cmluZ3MgKHNob3J0aGFuZCBmb3IgYSA6OnN3YXAgZGlyZWN0aXZlIG9uIGFuIGVsZW1lbnQpXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9JTlZBTElEX05PVEFUSU9OXTogYFxuVEVNUExBVEVfSU5WQUxJRF9OT1RBVElPTlxuQSB0ZW1wbGF0ZSB2YWx1ZSBub3RhdGlvbiBmYWlsZWQgdG8gcGFyc2UuIE5vdGF0aW9ucyBtdXN0IGJlZ2luIHdpdGggb25lIG9mXG5ALCAkLCAqLCBvciAjLCBmb2xsb3dlZCBieSBhIGRvdC1zZXBhcmF0ZWQgcGF0aCBvZiBhY2Nlc3NvciBuYW1lcy4gT3B0aW9uYWxseSxcbm5vdGF0aW9ucyBtYXkgaGF2ZSBtb2RpZmllcnMgYXJvdW5kIHRoZW0sIHN1Y2ggYXMgdGhlIE5PVCgpIG1vZGlmaWVyLlxuXG5UaGUgbm90YXRpb24gdGhhdCBmYWlsZWQgdG8gcGFyc2Ugd2FzIFwiJXNcIlxuYCxcbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX0lOVkFMSURfQ09NUE9ORU5UXTogYFxuVEVNUExBVEVfSU5WQUxJRF9DT01QT05FTlRcbkZhaWxlZCB0byBpbnRlcnBvbGF0ZSBhIENvbXBvbmVudCBpbiBhbiBodG1sIHRlbXBsYXRlIHN0cmluZyBkdWUgdG8gdGhlXG5Db21wb25lbnQgaGF2aW5nIGFuIGludmFsaWQgdGFnTmFtZSBwcm9wZXJ0eS5cblxuQ29tcG9uZW50IFwiJXNcIiBoYXMgYW4gaW52YWxpZCB0YWdOYW1lIHByb3BlcnR5IFwiJXNcIlxuICAgIGAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX01JU1NJTkdfTElTVF9QQVJFTlRdOiBgXG5URU1QTEFURV9NSVNTSU5HX0xJU1RfUEFSRU5UXG5BIHRlbXBsYXRlIGZhaWxlZCB0byBwcmVwYXJlIGFuIDo6ZWFjaCBkaXJlY3RpdmUgYmVjYXVzZSBubyB2YWxpZCBwYXJlbnQgbm9kZVxud2FzIGZvdW5kIGZvciB0aGUgbGlzdCB0byByZW5kZXIgaW50by5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX0lOVkFMSURfTElTVF06IGBcblRFTVBMQVRFX0lOVkFMSURfTElTVFxuQSB0ZW1wbGF0ZSBmYWlsZWQgdG8gcmVuZGVyIGJlY2F1c2UgYW4gOjplYWNoIGRpcmVjdGl2ZSBmZXRjaGVkIGEgdmFsdWUgd2hpY2hcbndhcyBub3QgYW4gYXJyYXkgb2YgYWN0aW9uYWJsZSBkYXRhLlxuYCxcblxuICAgIFtFcnJvckNvZGUuVEVNUExBVEVfSU5WQUxJRF9OT0RFX1JFRl06IGBcblRFTVBMQVRFX0lOVkFMSURfTk9ERV9SRUZcbkEgdGVtcGxhdGUgZmFpbGVkIHRvIHByZXBhcmUgYSBub2RlIGZyb20gYSBjb21waWxlZCBzb3VyY2UuIFR5cGljYWxseSwgdGhpc1xubWVhbnMgc29tZXRoaW5nIGlzIGJyb2tlbiB3aXRoaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlIHJhdGhlciB0aGFuIGFuIGVycm9yIHdpdGhcbnRoZSB0ZW1wbGF0ZSBjb250ZW50IGl0c2VsZi5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX01JU1NJTkdfTElTVF9LRVldOiBgXG5URU1QTEFURV9NSVNTSU5HX0xJU1RfS0VZXG5BIHRlbXBsYXRlIGZhaWxlZCB0byBjb21waWxlIGJlY2F1c2UgYW4gOjplYWNoIGRpcmVjdGl2ZSB3YXMgZm91bmQgb24gYW4gZWxlbWVudFxud2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgOjprZXkgZGlyZWN0aXZlLiA6OmVhY2ggZGlyZWN0aXZlcyBtdXN0IGhhdmUgYSA6OmtleVxuZGlyZWN0aXZlIHNwZWNpZmllZCBvbiB0aGUgc2FtZSBlbGVtZW50LCB3aG9zZSBub3RhdGlvbiBldmFsdWF0ZXMgdG8gYSB1bmlxdWVcbnZhbHVlIGZvciBlYWNoIGl0ZW0gaW4gdGhlIGxpc3QuXG5cbkV4YW1wbGU6IDxsaSA6OmVhY2g9XCIkaXRlbXNcIiA6OmtleT1cIiNpZFwiPiAuLi4gPC9saT5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX0RVUExJQ0FURV9MSVNUX0tFWV06IGBcblRFTVBMQVRFX0RVUExJQ0FURV9MSVNUX0tFWVxuQSBsaXN0IGZhaWxlZCB0byByZW5kZXIgYmVjYXVzZSBpdGVtIGtleSAlcyBhcHBlYXJlZCBtdWx0aXBsZSB0aW1lcyB3aGVuXG5yZXNvbHZpbmcgbGlzdCBpdGVtIGtleXMuIEVhY2ggOjprZXkgZGlyZWN0aXZlIG11c3QgcmVmZXJlbmNlIGEgbm90YXRpb24gd2hvc2VcbnZhbHVlIGlzIHVuaXF1ZSBmb3IgZWFjaCBsaXN0IGl0ZW0uXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5JTlZBTElEX1NUQVRFX0tFWV06IGBcbklOVkFMSURfU1RBVEVfS0VZXG5UcmllZCB0byBhY2Nlc3MgYSBzdGF0ZSBwcm9wZXJ0eSB3aGljaCBkb2VzIG5vdCBleGlzdFxuXG5LZXkgcGF0aDogJXNcbmAsXG5cbiAgICBbRXJyb3JDb2RlLklOVkFMSURfU1RBVEVfVVBEQVRFXTogYFxuSU5WQUxJRF9TVEFURV9VUERBVEVcbkEgQ29tcG9uZW50J3Mgc2V0U3RhdGUoKSB3YXMgY2FsbGVkIHdpdGggYSB2YWx1ZSB3aGljaCBjb3VsZCBub3QgYmUgcGF0Y2hlZCBpblxudG8gdGhlIGV4aXN0aW5nIGNvbXBvbmVudCBzdGF0ZS5cblxuc2V0U3RhdGUoKSB0YWtlcyBhIHBhcnRpYWwgb2JqZWN0IGRlc2NyaWJpbmcgc3RhdGUga2V5cyB0byB1cGRhdGUuXG5cbkluc3RlYWQsIHJlY2VpdmVkOiAlc1xuYCxcblxuICAgIFtFcnJvckNvZGUuU1RBVEVfTE9DS0VEXTogYFxuU1RBVEVfTE9DS0VEXG5BIFN0YXRlIHJlY2VpdmVkIGEgcmVxdWVzdCB0byB1cGRhdGUgb3IgbG9jayB3aGlsZSBhbHJlYWR5IGxvY2tlZC5cblN0YXRlcyBtYXkgYmUgbG9ja2VkIHVzaW5nIHRoZSAubG9jaygpIG1ldGhvZCBhbmQgdW5sb2NrZWQgdXNpbmcgdGhlIC51bmxvY2soKVxubWV0aG9kLiBTdGF0ZXMgbG9jayBkdXJpbmcgYXN5bmMgbXV0YXRpb25zIGRvbmUgdGhyb3VnaCB0aGUgLm11dGF0ZUFzeW5jKClcbm1ldGhvZCBpZiBcInRydWVcIiBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuXG5cbllvdSBjYW4gY2hlY2sgdGhlIGxvY2sgc3RhdHVzIG9mIGEgU3RhdGUgaW5zdGFuY2Ugd2l0aCAuaXNMb2NrZWRcbmAsXG5cbiAgICBbRXJyb3JDb2RlLk1BWF9TRVFVRU5USUFMX1JFTkRFUlNdOiBgXG5NQVhfU0VRVUVOVElBTF9SRU5ERVJTXG5BIGNvbXBvbmVudCBoYXMgZXJyb3JlZCBhZnRlciByZS1yZW5kZXJpbmcgbW9yZSB0aGFuICVzIHRpbWVzIGluIHRoZSBzYW1lIGZyYW1lLlxuXG5UaGlzIHR5cGljYWxseSBoYXBwZW5zIGJlY2F1c2Ugc3RhdGUgb3IgbGl2ZSBhdHRyaWJ1dGVzIGFyZSBiZWluZyBtb2RpZmllZFxuZHVyaW5nIGEgcmVuZGVyIGxpZmVjeWNsZSBtZXRob2Qgc3VjaCBhcyBiZWZvcmVVcGRhdGUoKSBvciBhZnRlclVwZGF0ZSgpLiBJZlxuc3RhdGUgY2hhbmdlcyB1bmNvbmRpdGlvbmFsbHkgZHVyaW5nIGEgcmVuZGVyLCB0aGUgcmVuZGVyIHdpbGwgaW5maW5pdGVseSBsb29wLlxuVXBkYXRpbmcgcmVuZGVyIHNvdXJjZSBkYXRhIGR1cmluZyBhIHJlbmRlciBjeWNsZSBpcyBzdXBwb3J0ZWQsIGJ1dCBpbmZpbml0ZVxudXBkYXRlIGxvb3BzIG1heSBvY2N1ciBpZiB1bmNoZWNrZWQuXG5gLFxuICB9O1xuXG4gIHJldHVybiBERVZfRVJST1JfSU5GT1tjb2RlXTtcbn1cblxuLyoqXG4gKiBBbiBlcnJvciBvcmlnaW5hdGluZyBmcm9tIHdpdGhpbiBhIFBhbGV0dGUgc3Vic3lzdGVtLlxuICpcbiAqIEluIHRoZSBgZGV2ZWxvcG1lbnRgIGVudmlyb25tZW50LCB0aGUgZXJyb3Igd2lsbCBzdXJmYWNlIHdpdGggZXh0ZW5kZWQgaW5mb1xuICogYWJvdXQgdGhlIGVycm9yIGFuZCBhbnkgZGV0YWlscyB3aGljaCBtYXkgYmUgcmVsZXZhbnQgdG8gaGVscCB3aXRoIGRlYnVnZ2luZy5cbiAqXG4gKiBJbiB0aGUgYHByb2R1Y3Rpb25gIGVudmlyb25tZW50LCBhIG1pbmltYWwgZXJyb3Igb25seSBzdXJmYWNpbmcgdGhlIG51bWVyaWNcbiAqIGVycm9yIGNvZGUgaXMgdGhyb3duIGluc3RlYWQuXG4gKlxuICogQ29kZXMgYXJlIGNhdGVnb3JpemVkIGludG8gZ3JvdXBzIGJ5IHRoZSAxMDAnczpcbiAqXG4gKiAtIDAgLSA5OTogSW52YXJpYW50c1xuICogLSAxMDAgLSAxOTk6IEN1c3RvbSBFbGVtZW50cyAvIEVudmlyb25tZW50IEVycm9yc1xuICogLSAyMDAgLSAyOTk6IFRlbXBsYXRpbmcgRXJyb3JzXG4gKiAtIDMwMCAtIDM5OTogUnVudGltZSBFcnJvcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFBhbGV0dGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZSA9IFwiUGFsZXR0ZUVycm9yXCI7XG4gIGNvZGU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihjb2RlOiBudW1iZXIsIC4uLnZhbHVlczogc3RyaW5nW10pIHtcbiAgICBsZXQgbWVzc2FnZSA9IGBDb2RlOiAke2NvZGV9YDtcbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgbWVzc2FnZSArPSBnZXREZXZFcnJvcihjb2RlKTtcblxuICAgICAgZm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoYCVzYCwgU3RyaW5nKHZhbCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cbn1cbiIsCiAgICAiLypcbiAqIENvcHlyaWdodCDCqSBSdXN0aWMgQXJjYWRlLCBMTEMgMjAyNlxuICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xuICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHBzOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG4gKi9cblxuaW1wb3J0IHsgRXJyb3JDb2RlLCBQYWxldHRlRXJyb3IgfSBmcm9tIFwiI2Vycm9yXCI7XG5cbi8qKiBBbiBhdHRyaWJ1dGUgdmFsdWUgYXMgcmVhZCBmcm9tIGEgRE9NIGVsZW1lbnQgKi9cbnR5cGUgQXR0cmlidXRlVmFsdWUgPSBzdHJpbmcgfCBudWxsO1xuXG4vKiogQSBNYXAgb2Ygc3RyaW5nIGF0dHJpYnV0ZSBuYW1lcyB0byB7QGxpbmsgQXR0cmlidXRlVmFsdWV9ICovXG50eXBlIEF0dHJpYnV0ZU1hcCA9IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZVZhbHVlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUF0dHJpYnV0ZSh2YWx1ZTogdW5rbm93bik6IEF0dHJpYnV0ZVZhbHVlIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZU1hcChcbiAgc291cmNlOiBvYmplY3QgfCBNYXA8c3RyaW5nLCB1bmtub3duPiB8IEhUTUxFbGVtZW50LFxuKTogQXR0cmlidXRlTWFwIHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KCk7XG5cbiAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHNvdXJjZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XG4gICAgICBtYXAuc2V0KG5hbWUsIHNlcmlhbGl6ZUF0dHJpYnV0ZShzb3VyY2UuZ2V0QXR0cmlidXRlKG5hbWUpKSk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHNvdXJjZSkge1xuICAgICAgbWFwLnNldChrZXksIHNlcmlhbGl6ZUF0dHJpYnV0ZSh2YWwpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSBcIm9iamVjdFwiICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgICBtYXAuc2V0KGtleSwgc2VyaWFsaXplQXR0cmlidXRlKHZhbCkpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgdGhyb3cgbmV3IFBhbGV0dGVFcnJvcihFcnJvckNvZGUuSU5WQVJJQU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlTWFwKFxuICB0YXJnZXQ6IEhUTUxFbGVtZW50LFxuICBhdHRyczogQXR0cmlidXRlTWFwLFxuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnJlbnROYW1lcyA9IG5ldyBTZXQodGFyZ2V0LmdldEF0dHJpYnV0ZU5hbWVzKCkpO1xuICBjb25zdCBpbmNvbWluZ05hbWVzID0gbmV3IFNldChhdHRycy5rZXlzKCkpO1xuICBjb25zdCBhdHRyaWJ1dGVzVG9SZW1vdmUgPSBjdXJyZW50TmFtZXMuZGlmZmVyZW5jZShpbmNvbWluZ05hbWVzKTtcblxuICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cmlidXRlc1RvUmVtb3ZlKSB7XG4gICAgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW25hbWUsIHZhbF0gb2YgYXR0cnMpIHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIi8qXG4gKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cbiAqL1xudHlwZSBNZXRyaWNzID0ge1xuICBoaXRzOiBudW1iZXI7XG4gIG1pc3NlczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTFJVQ2FjaGVNZXRyaWNzID0ge1xuICBsb29rdXBzOiBudW1iZXI7XG4gIGhpdHM6IG51bWJlcjtcbiAgbWlzc2VzOiBudW1iZXI7XG4gIGNhcGFjaXR5OiBudW1iZXI7XG4gIGVudHJpZXM6IG51bWJlcjtcbiAgaGl0UmF0ZTogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBBIHNpbXBsZSBpbi1tZW1vcnkgTFJVIENhY2hlIHVzaW5nIEphdmFTY3JpcHQgbWFwcy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIENhY2hlZCBuZXR3b3JrIHJlcXVlc3RcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBBIGNhY2hlIG9mIEFQSSBVUkxzIHRvIHRoZWlyIHJldHVybmVkIHBheWxvYWRzXG4gKiBjb25zdCBjYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIEFQSVBheWxvYWQ+KCk7XG4gKlxuICogYXN5bmMgZnVuY3Rpb24gbWFrZVJlcXVlc3QodXJsOiBzdHJpbmcpIHtcbiAqICAgbGV0IGNhY2hlZCA9IGNhY2hlLmdldCh1cmwpO1xuICogICBpZiAoY2FjaGVkKSB7XG4gKiAgICAgcmV0dXJuIGNhY2hlZDtcbiAqICAgfVxuICpcbiAqICAgLy8gLi4uIE1ha2UgdGhlIHJlcXVlc3QgYW5kIGNhY2hlLnNldCgpIHRoZSByZXNwb25zZVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZTxLLCBWPiB7XG4gIHByaXZhdGUgX21heFNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZGF0YTogTWFwPEssIFY+O1xuICBwcml2YXRlIF9tZXRyaWNzOiBNZXRyaWNzID0geyBoaXRzOiAwLCBtaXNzZXM6IDAgfTtcblxuICBjb25zdHJ1Y3RvcihtYXhTaXplOiBudW1iZXIgPSA1MDApIHtcbiAgICBpZiAobWF4U2l6ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMUlUgQ2FjaGUgY2FwYWNpdHkgbXVzdCBiZSA+PSAxXCIpO1xuICAgIH1cblxuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB0aGlzLl9tZXRyaWNzID0geyBoaXRzOiAwLCBtaXNzZXM6IDAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLl9kYXRhID0gbmV3IE1hcDxLLCBWPigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJpbSA9ICgpID0+IHtcbiAgICB3aGlsZSAodGhpcy5fZGF0YS5zaXplID4gdGhpcy5fbWF4U2l6ZSkge1xuICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLl9kYXRhLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICBpZiAoZmlyc3RLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN1cmRcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9kYXRhLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgcGVyZm9ybWFuY2UgbWV0cmljcyBmcm9tIHRoaXMgTFJVIENhY2hlIGluc3RhbmNlLlxuICAgKlxuICAgKiBJbiBkZXZlbG9wbWVudCBtb2RlLCB0aGlzIHJldHVybnMgaW5zaWdodHMgaW50byBoaXRzL21pc3NlcyBvZiB0aGUgY2FjaGUsXG4gICAqIGFzIHdlbGwgYXMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgZW50cnkgY291bnQuXG4gICAqXG4gICAqIEluIHByb2R1Y3Rpb24gbW9kZSwgdGhpcyByZXR1cm5zIGEgcGxhY2Vob2xkZXIgb2JqZWN0LCBhcyBtZXRyaWMgY29sbGVjdGlvblxuICAgKiBpcyBub3QgYWN0aXZlIGluIHByb2R1Y3Rpb24uXG4gICAqL1xuICBnZXQgbWV0cmljcygpOiBMUlVDYWNoZU1ldHJpY3Mge1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBjb25zdCB7IGhpdHMgPSAwLCBtaXNzZXMgPSAwIH0gPSB0aGlzLl9tZXRyaWNzID8/IHt9O1xuICAgICAgY29uc3QgbG9va3VwcyA9IGhpdHMgKyBtaXNzZXM7XG4gICAgICBjb25zdCBoaXRSYXRlID0gbG9va3VwcyA9PT0gMCA/IDAgOiBoaXRzIC8gbG9va3VwcztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9va3VwcyxcbiAgICAgICAgaGl0czogaGl0cyxcbiAgICAgICAgbWlzc2VzOiBtaXNzZXMsXG4gICAgICAgIGNhcGFjaXR5OiB0aGlzLl9tYXhTaXplLFxuICAgICAgICBlbnRyaWVzOiB0aGlzLl9kYXRhLnNpemUsXG4gICAgICAgIGhpdFJhdGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsb29rdXBzOiAwLFxuICAgICAgaGl0czogMCxcbiAgICAgIG1pc3NlczogMCxcbiAgICAgIGNhcGFjaXR5OiAwLFxuICAgICAgZW50cmllczogMCxcbiAgICAgIGhpdFJhdGU6IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIG1heGltdW0gY2FjaGUgc2l6ZSBmb3IgdGhpcyBpbnN0YW5jZS4gSW1tZWRpYXRlbHkgdHJpZ2dlcnMgYVxuICAgKiBwdXJnZSBvZiBjYWNoZWQgY29udGVudHMgaWYgdGhlIG5ldyBjYXBhY2l0eSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnRcbiAgICogbnVtYmVyIG9mIGNhY2hlZCBlbnRyaWVzLlxuICAgKi9cbiAgc2V0Q2FwYWNpdHkgPSAobWF4U2l6ZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYgKG1heFNpemUgPD0gMCAmJiBfX0RFVl9fKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW1BhbGV0dGUgTFJVIENhY2hlXSBDYWNoZSBzaXplIGlzIDw9IDAuIENhY2hlIGlzIGRpc2FibGVkLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLl90cmltKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgdmFsdWUgZnJvbSB0aGUgY2FjaGUsIHJldHVybmluZyBgdW5kZWZpbmVkYCBpZiBubyB2YWx1ZSB3YXMgZm91bmRcbiAgICovXG4gIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEuZ2V0KGtleSk7XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKF9fREVWX18pIHtcbiAgICAgICAgdGhpcy5fbWV0cmljcy5taXNzZXMgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIGFuZCByZS1zZXQgdGhlIHZhbHVlIHRvIG1vdmUgdGhlIGtleSB0byB0aGUgZW5kIG9mIHRoZSBrZXkgbGlzdFxuICAgIHRoaXMuX2RhdGEuZGVsZXRlKGtleSk7XG4gICAgdGhpcy5fZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAoX19ERVZfXykge1xuICAgICAgdGhpcy5fbWV0cmljcy5oaXRzICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIHZhbHVlIGluIHRoZSBjYWNoZS4gVGhpcyBhbHNvIG1vdmVzIHRoZSB2YWx1ZSB0byB0aGUgYmFjayBvZiB0aGUgbGlzdFxuICAgKiBvZiB2YWx1ZXMgdG8gY29uc2lkZXIgZXZpY3Rpbmcgd2hlbiB0aGUgY2FjaGUgaXMgZnVsbC5cbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGlmIGV4aXN0cyB0byB1cGRhdGUgcG9zaXRpb25cbiAgICBpZiAodGhpcy5fZGF0YS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5fZGF0YS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChrZXksIHZhbHVlKTtcblxuICAgIGlmICh0aGlzLl9kYXRhLnNpemUgPiB0aGlzLl9tYXhTaXplKSB7XG4gICAgICB0aGlzLl90cmltKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjb250ZW50cyBvZiB0aGlzIGNhY2hlIGluc3RhbmNlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9kYXRhLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIGNhY2hlIGluc3RhbmNlXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnNpemU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTFJVQ2FjaGU7XG4iLAogICAgIi8qXG4gKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cbiAqL1xuaW1wb3J0IExSVUNhY2hlIGZyb20gXCIuL2xydS1jYWNoZVwiO1xuXG5leHBvcnQgY29uc3QgZnJhZ21lbnRDYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIERvY3VtZW50RnJhZ21lbnQ+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBodG1sVG9GcmFnbWVudChodG1sOiBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgY29uc3QgbG9va3VwID0gZnJhZ21lbnRDYWNoZS5nZXQoaHRtbCk7XG5cbiAgaWYgKGxvb2t1cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGxvb2t1cC5jbG9uZU5vZGUodHJ1ZSkgYXMgRG9jdW1lbnRGcmFnbWVudDtcbiAgfVxuXG4gIGNvbnN0IHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHRlbXAuaW5uZXJIVE1MID0gaHRtbDtcbiAgZnJhZ21lbnRDYWNoZS5zZXQoaHRtbCwgdGVtcC5jb250ZW50KTtcbiAgcmV0dXJuIHRlbXAuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgRG9jdW1lbnRGcmFnbWVudDtcbn1cbiIsCiAgICAiLypcbiAqIENvcHlyaWdodCDCqSBSdXN0aWMgQXJjYWRlLCBMTEMgMjAyNlxuICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xuICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHBzOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHRhZyBuYW1lIGZvciB1c2UgaW4gYSB0ZXN0IGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IHJhbmRvbVRhZ05hbWUgPSAoKSA9PiB7XG4gIGNvbnN0IGlkID0gY3J5cHRvLnJhbmRvbVVVSUQoKS5yZXBsYWNlQWxsKFwiLVwiLCBcIlwiKS5zbGljZSgwLCAxMCk7XG4gIHJldHVybiBgdGVzdC1lbGVtZW50LSR7aWR9YDtcbn07XG4iLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgwqkgUnVzdGljIEFyY2FkZSwgTExDIDIwMjZcbiAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcbiAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwczovL21vemlsbGEub3JnL01QTC8yLjAvLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50IH0gZnJvbSBcIiNjb21wb25lbnRcIjtcbmltcG9ydCB7IGFwcGx5QXR0cmlidXRlTWFwLCBjcmVhdGVBdHRyaWJ1dGVNYXAgfSBmcm9tIFwiI3V0aWxcIjtcbmltcG9ydCB7IHJhbmRvbVRhZ05hbWUgfSBmcm9tIFwiLi90YWdzXCI7XG5cbi8qKlxuICogUmVuZGVyIGEgUGFsZXR0ZSBDb21wb25lbnQgY2xhc3MgYXMgYSB0ZXN0IGVsZW1lbnRcbiAqXG4gKiBJZiB0aGUgY2xhc3MgaXMgbm90IHlldCByZWdpc3RlcmVkLCBpdCBpcyBhdXRvLXJlZ2lzdGVyZWQgYmVmb3JlIGNyZWF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogdGVzdChcImNvbXBvbmVudCBkb2VzIHNvbWV0aGluZ1wiLCBhc3luYyAoKSA9PiB7XG4gKiAgIGxldCBzb21ldGhpbmdNb2NrID0gbW9jaygpO1xuICpcbiAqICAgY2xhc3MgTXlUZXN0Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAqICAgICBzY3JpcHQoKSB7XG4gKiAgICAgICBzb21ldGhpbmdNb2NrKCk7XG4gKiAgICAgfVxuICogICB9XG4gKlxuICogICBhd2FpdCByZW5kZXJUZXN0Q29tcG9uZW50KE15VGVzdENvbXBvbmVudCk7XG4gKiAgIGV4cGVjdChzb21ldGhpbmdNb2NrKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBjb21wb25lbnQgVGhlIGNvbXBvbmVudCBjbGFzcyB0byByZWdpc3RlciBhbmQgY3JlYXRlXG4gKiBAcGFyYW0gYXR0cmlidXRlcyBBIHJlY29yZCBvZiBhdHRyaWJ1dGVzIHRvIGFwcGx5XG4gKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgcmVuZGVyZWQgQ29tcG9uZW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJUZXN0Q29tcG9uZW50PEUgZXh0ZW5kcyB0eXBlb2YgQ29tcG9uZW50PGFueT4+KFxuICBjb21wb25lbnQ6IEUsXG4gIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8SW5zdGFuY2VUeXBlPEU+PiB7XG4gIC8vIEVycm9yIGVhcmx5IGlmIG1pc2NvbmZpZ3VyZWRcbiAgaWYgKFxuICAgIHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICB0eXBlb2Ygd2luZG93LmN1c3RvbUVsZW1lbnRzID09PSBcInVuZGVmaW5lZFwiXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiRmFpbGVkIHRvIHJlbmRlciB0ZXN0IGNvbXBvbmVudDogXCIgK1xuICAgICAgICBcIndpbmRvdy5jdXN0b21FbGVtZW50cyBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuXCIsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHVzZVRhZ25hbWUgPVxuICAgIGNvbXBvbmVudC50YWdOYW1lID09PSBcIlwiID8gcmFuZG9tVGFnTmFtZSgpIDogY29tcG9uZW50LnRhZ05hbWU7XG5cbiAgLy8gUmVhc3NpZ24gdGhlIHRhZ25hbWUgYmFjayB0byB0aGUgY29tcG9uZW50IHRvIGVuc3VyZSBpdCBpcyBzZXQgYmVmb3JlIHJlZ2lzdHJhdGlvblxuICBjb21wb25lbnQudGFnTmFtZSA9IHVzZVRhZ25hbWU7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBpZiBuZWVkIGJlXG4gIGlmICghY3VzdG9tRWxlbWVudHMuZ2V0KHVzZVRhZ25hbWUpKSB7XG4gICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKFxuICAgICAgdXNlVGFnbmFtZSxcbiAgICAgIGNvbXBvbmVudCBhcyB1bmtub3duIGFzIEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3RvcixcbiAgICApO1xuICB9XG5cbiAgLy8gQ29uc3RydWN0IGEgdGVzdCBpbnN0YW5jZVxuICBjb25zdCAkY29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb21wb25lbnQudGFnTmFtZSk7XG5cbiAgLy8gQXBwbHkgYXR0cmlidXRlcyBiZWZvcmUgcmVuZGVyaW5nXG4gIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IGNyZWF0ZUF0dHJpYnV0ZU1hcChhdHRyaWJ1dGVzID8/IHt9KTtcbiAgYXBwbHlBdHRyaWJ1dGVNYXAoJGNvbXBvbmVudCwgYXR0cmlidXRlTWFwKTtcblxuICAvLyBSZW5kZXIgYW5kIGF3YWl0IHRvIGFsbG93IG1pY3JvdGFza3MgdG8gc2V0dGxlXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kKCRjb21wb25lbnQpO1xuICBhd2FpdCBCdW4uc2xlZXAoMSk7XG5cbiAgLy8gUmV0dXJuIHRoZSByZW5kZXJlZCBpbnN0YW5jZVxuICByZXR1cm4gJGNvbXBvbmVudCBhcyBJbnN0YW5jZVR5cGU8RT47XG59XG5cbi8qKlxuICogRm9yY2UgYSByZW5kZXIgb24gdGhlIHRhcmdldCBlbGVtZW50XG4gKlxuICogUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgcmVuZGVyIGhhcyBjb21wbGV0ZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcmVuZGVyVGVzdENvbXBvbmVudChlbGVtZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgZWxlbWVudC5yZXF1ZXN0UmVuZGVyKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IEJ1bi5zbGVlcCgxKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOztB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
361
+ //# debugId=B28F8ED5EC4B8E7C64756E2164756E21
362
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3Rlc3QtdXRpbC9nbG9iYWwtZW52LnRzIiwgInNyYy9lcnJvcnMudHMiLCAic3JjL3V0aWwvYXR0cmlidXRlcy50cyIsICJzcmMvdXRpbC9scnUtY2FjaGUudHMiLCAic3JjL3V0aWwvZnJhZ21lbnRzLnRzIiwgInNyYy90ZXN0LXV0aWwvdGFncy50cyIsICJzcmMvdGVzdC11dGlsL3JlbmRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKlxuICogQ29weXJpZ2h0IMKpIFJ1c3RpYyBBcmNhZGUsIExMQyAyMDI2XG4gKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cbiAqL1xuXG5pbXBvcnQgeyBHbG9iYWxSZWdpc3RyYXRvciB9IGZyb20gXCJAaGFwcHktZG9tL2dsb2JhbC1yZWdpc3RyYXRvclwiO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIGdsb2JhbCB0ZXN0IERPTSBlbnZpcm9ubWVudCAodXNpbmcgSGFwcHlET00pXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlR2xvYmFsVGVzdERPTSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY2xlYW51cEdsb2JhbFRlc3RET00oKTtcbiAgR2xvYmFsUmVnaXN0cmF0b3IucmVnaXN0ZXIoKTtcbn1cblxuLyoqXG4gKiBDbGVhbnVwIHRoZSBnbG9iYWwgdGVzdCBET00gZW52aXJvbm1lbnQgKHVzaW5nIEhhcHB5RE9NKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYW51cEdsb2JhbFRlc3RET00oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aGlsZSAoZG9jdW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgQnVuLnNsZWVwKDEpO1xuXG4gIGlmIChHbG9iYWxSZWdpc3RyYXRvci5pc1JlZ2lzdGVyZWQpIHtcbiAgICBHbG9iYWxSZWdpc3RyYXRvci51bnJlZ2lzdGVyKCk7XG4gIH1cbn1cbiIsCiAgICAiLypcbiAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcbiAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwczovL21vemlsbGEub3JnL01QTC8yLjAvLlxuICovXG4vKipcbiAqIFBvc3NpYmxlIGVycm9yIHR5cGVzIGZvciB7QGxpbmsgUGFsZXR0ZUVycm9yfVxuICpcbiAqIENvZGVzIGFyZSBjYXRlZ29yaXplZCBpbnRvIGdyb3VwcyBieSB0aGUgMTAwJ3M6XG4gKlxuICogLSAwIC0gOTk6IEludmFyaWFudHNcbiAqIC0gMTAwIC0gMTk5OiBDdXN0b20gRWxlbWVudHMgLyBFbnZpcm9ubWVudCBFcnJvcnNcbiAqIC0gMjAwIC0gMjk5OiBUZW1wbGF0aW5nIEVycm9yc1xuICogLSAzMDAgLSAzOTk6IFJ1bnRpbWUgRXJyb3JzXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEVycm9yQ29kZSB7XG4gIC8vIDAgLSA5OTogSW52YXJpYW50c1xuICBJTlZBUklBTlQgPSAwLFxuICBJTlZBTElEX0VOViA9IDEsXG4gIElOVkFMSURfQ0FMTFNJVEUgPSAyLFxuICBNSVNTSU5HX05PREVfUkVGID0gMyxcblxuICAvLyAxMDAgLSAxOTk6IEN1c3RvbSBFbGVtZW50cyBFcnJvcnNcbiAgSU5WQUxJRF9UQUdOQU1FID0gMTAwLFxuXG4gIC8vIDIwMCAtIDI5OTogVGVtcGxhdGUgRXJyb3JzXG4gIFRFTVBMQVRFX0lOVkFMSURfVkFMVUUgPSAyMDAsXG4gIFRFTVBMQVRFX0lOVkFMSURfTk9UQVRJT05fU1lOVEFYID0gMjAxLFxuICBURU1QTEFURV9NSVNTSU5HX05PVEFUSU9OID0gMjAyLFxuICBURU1QTEFURV9JTlZBTElEX0NPTVBPTkVOVCA9IDIwMyxcbiAgVEVNUExBVEVfSU5WQUxJRF9MSVNUX0RBVEEgPSAyMDQsXG4gIFRFTVBMQVRFX01JU1NJTkdfTElTVF9LRVkgPSAyMDUsXG4gIFRFTVBMQVRFX0RVUExJQ0FURV9MSVNUX0tFWSA9IDIwNixcbiAgVEVNUExBVEVfSU5WQUxJRF9DT05ESVRJT05BTCA9IDIwNyxcbiAgVEVNUExBVEVfSU5WQUxJRF9LRVlfRElSRUNUSVZFID0gMjA4LFxuICBURU1QTEFURV9QQVJFTlRfUkVRVUlSRUQgPSAyMDksXG5cbiAgLy8gMzAwIC0gMzk5OiBSdW50aW1lIEVycm9yc1xuICBNSVNTSU5HX0VMRU1FTlQgPSAzMDAsXG4gIE1JU1NJTkdfU1RBVEUgPSAzMDEsXG4gIElOVkFMSURfQ09OVEVOVCA9IDMwMixcbiAgSU5WQUxJRF9TVEFURV9LRVkgPSAzMDMsXG4gIElOVkFMSURfU1RBVEVfVVBEQVRFID0gMzA0LFxuICBTVEFURV9MT0NLRUQgPSAzMDUsXG4gIE1BWF9TRVFVRU5USUFMX1JFTkRFUlMgPSAzMDYsXG59XG5cbmZ1bmN0aW9uIGdldERldkVycm9yKGNvZGU6IEVycm9yQ29kZSkge1xuICBjb25zdCBERVZfRVJST1JfSU5GTzogUmVjb3JkPEVycm9yQ29kZSwgc3RyaW5nPiA9IHtcbiAgICBbRXJyb3JDb2RlLklOVkFSSUFOVF06IGBcbklOVkFSSUFOVFxuQSBjb25kaXRpb24gaGFzIG9jY3VycmVkIHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4sIHN1Y2ggYXMgYSBjb2RlIHBhdGggdGhhdFxuc2hvdWxkbid0IGJlIHJlYWNoYWJsZSB3aGVuIHVzaW5nIGNvcnJlY3QgdHlwZXMsIG9yIGEgZGlzYWxsb3dlZCBzdGF0ZS5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLklOVkFMSURfRU5WXTogYFxuSU5WQUxJRF9FTlZcbkZhaWxlZCB0byBmaW5kIGEgY3VzdG9tIGVsZW1lbnRzIHJlZ2lzdHJ5IGluIHRoaXMgZW52aXJvbm1lbnQuIElzIGEgd2luZG93XG5nbG9iYWwgYXZhaWxhYmxlIHdpdGggYSBjdXN0b21FbGVtZW50cyBwcm9wZXJ0eT9cbmAsXG4gICAgW0Vycm9yQ29kZS5JTlZBTElEX0NBTExTSVRFXTogYFxuSU5WQUxJRF9DQUxMU0lURVxuQSBmdW5jdGlvbiB3YXMgaW52b2tlZCB3aXRoIGFuIGludmFsaWQgc2V0IG9mIHBhcmFtZXRlcnMuICAgXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5JTlZBTElEX1RBR05BTUVdOiBgXG5JTlZBTElEX1RBR05BTUVcbkZhaWxlZCB0byBkZXRlcm1pbmUgYSB2YWxpZCBIVE1MIFRhZyB0byB1c2Ugd2hlbiByZWdpc3RlcmluZyBhIGNvbXBvbmVudCBhcyBhXG5jdXN0b20gZWxlbWVudC4gU3BlY2lmeSBhIHN0YXRpYyByZWFkb25seSB0YWdOYW1lIHByb3BlcnR5IG9uIHlvdXIgY29tcG9uZW50XG5jbGFzcyBvciBwcm92aWRlIGEgdGFnTmFtZSBhcmd1bWVudCB0byBDb21wb25lbnQucmVnaXN0ZXIuXG5cbkFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlyZWN0bHkgcmVnaXN0ZXIgeW91ciBlbGVtZW50IGFzIHlvdSB3b3VsZCBhbnkgb3RoZXJcbkhUTUwgY3VzdG9tIGVsZW1lbnQ6IGN1c3RvbUVsZW1lbnRzLmRlZmluZShcIm15LXRhZ1wiLCBNeUNvbXBvbmVudENsYXNzKTtcbmAsXG5cbiAgICBbRXJyb3JDb2RlLk1JU1NJTkdfRUxFTUVOVF06IGBcbk1JU1NJTkdfRUxFTUVOVFxuQW4gZWxlbWVudCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3QgYnV0IHdhcyBub3QgZm91bmQgd2hlbiB0aGUgRE9NIHdhcyBxdWVyaWVkLlxuYCxcblxuICAgIFtFcnJvckNvZGUuTUlTU0lOR19TVEFURV06IGBcbk1JU1NJTkdfU1RBVEVcbkEgQ29tcG9uZW50J3MgcmVhY3RpdmUgc3RhdGUgd2FzIGFjY2Vzc2VkLCBidXQgbm8gaW5pdGlhbFN0YXRlIGlzIGRlZmluZWQgZm9yXG50aGUgQ29tcG9uZW50J3MgY2xhc3MuIEluaXRpYWwgc3RhdGUgbXVzdCBiZSBkZWZpbmVkIGFzIGFuIG9iamVjdCBvciBmdW5jdGlvbi5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLklOVkFMSURfQ09OVEVOVF06IGBcbklOVkFMSURfQ09OVEVOVFxuVHJpZWQgdG8gc2V0IGEgdmFsdWUgYXMgY29udGVudCBpbiBhIHRlbXBsYXRlLCBidXQgdGhlIHZhbHVlIHdhcyBub3QgYSBzdXBwb3J0ZWRcbnR5cGUuIFZhbHVlcyBtdXN0IGJlIGEgc3RyaW5nLCBIVE1MRWxlbWVudC5cblxuSW5zdGVhZCwgZ290ICVzOiAlcy5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX0lOVkFMSURfVkFMVUVdOiBgXG5URU1QTEFURV9JTlZBTElEXG5UaGUgdmFsdWUgJXMgY2Fubm90IGJlIGludGVycG9sYXRlZCB2aWEgdGhlIFRlbXBsYXRlIGh0bWwgc3RyaW5nIGhlbHBlci5cblZhbHVlcyBtYXkgb25seSBiZSBIVE1MVGVtcGxhdGVFbGVtZW50cyAodGVtcGxhdGUgY29udGVudCBpcyBhZG9wdGVkKSBvclxuc3RyaW5ncyAoc2hvcnRoYW5kIGZvciBhIDo6c3dhcCBkaXJlY3RpdmUgb24gYW4gZWxlbWVudClcbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX0lOVkFMSURfTk9UQVRJT05fU1lOVEFYXTogYFxuVEVNUExBVEVfSU5WQUxJRF9OT1RBVElPTlxuQSB0ZW1wbGF0ZSB2YWx1ZSBub3RhdGlvbiBmYWlsZWQgdG8gcGFyc2UuIE5vdGF0aW9ucyBtdXN0IGJlZ2luIHdpdGggb25lIG9mXG5ALCAkLCAqLCBvciAjLCBmb2xsb3dlZCBieSBhIGRvdC1zZXBhcmF0ZWQgcGF0aCBvZiBhY2Nlc3NvciBuYW1lcy4gT3B0aW9uYWxseSxcbm5vdGF0aW9ucyBtYXkgaGF2ZSBtb2RpZmllcnMgc3VjaCBhcyB0aGUgISBtb2RpZmllci5cblxuVGhlIG5vdGF0aW9uIHRoYXQgZmFpbGVkIHRvIHBhcnNlIHdhcyBcIiVzXCJcbmAsXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9JTlZBTElEX0NPTVBPTkVOVF06IGBcblRFTVBMQVRFX0lOVkFMSURfQ09NUE9ORU5UXG5GYWlsZWQgdG8gaW50ZXJwb2xhdGUgYSBDb21wb25lbnQgaW4gYW4gaHRtbCB0ZW1wbGF0ZSBzdHJpbmcgZHVlIHRvIHRoZVxuQ29tcG9uZW50IGhhdmluZyBhbiBpbnZhbGlkIHRhZ05hbWUgcHJvcGVydHkuXG5cbkNvbXBvbmVudCBcIiVzXCIgaGFzIGFuIGludmFsaWQgdGFnTmFtZSBwcm9wZXJ0eSBcIiVzXCJcbiAgICBgLFxuXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9JTlZBTElEX0xJU1RfREFUQV06IGBcblRFTVBMQVRFX0lOVkFMSURfTElTVFxuQSB0ZW1wbGF0ZSBmYWlsZWQgdG8gcmVuZGVyIGJlY2F1c2UgYW4gOjplYWNoIGRpcmVjdGl2ZSBmZXRjaGVkIGEgdmFsdWUgd2hpY2hcbndhcyBub3QgYW4gYXJyYXkgb2YgYWN0aW9uYWJsZSBkYXRhLlxuYCxcblxuICAgIFtFcnJvckNvZGUuTUlTU0lOR19OT0RFX1JFRl06IGBcblRFTVBMQVRFX0lOVkFMSURfTk9ERV9SRUZcbkEgdGVtcGxhdGUgZmFpbGVkIHRvIHByZXBhcmUgYSBub2RlIGZyb20gYSBjb21waWxlZCBzb3VyY2UuIFR5cGljYWxseSwgdGhpc1xubWVhbnMgc29tZXRoaW5nIGlzIGJyb2tlbiB3aXRoaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlIHJhdGhlciB0aGFuIGFuIGVycm9yIHdpdGhcbnRoZSB0ZW1wbGF0ZSBjb250ZW50IGl0c2VsZi5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX01JU1NJTkdfTElTVF9LRVldOiBgXG5URU1QTEFURV9NSVNTSU5HX0xJU1RfS0VZXG5BIHRlbXBsYXRlIGZhaWxlZCB0byBjb21waWxlIGJlY2F1c2UgYW4gOjplYWNoIGRpcmVjdGl2ZSB3YXMgZm91bmQgb24gYW4gZWxlbWVudFxud2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgOjprZXkgZGlyZWN0aXZlLiA6OmVhY2ggZGlyZWN0aXZlcyBtdXN0IGhhdmUgYSA6OmtleVxuZGlyZWN0aXZlIHNwZWNpZmllZCBvbiB0aGUgc2FtZSBlbGVtZW50LCB3aG9zZSBub3RhdGlvbiBldmFsdWF0ZXMgdG8gYSB1bmlxdWVcbnZhbHVlIGZvciBlYWNoIGl0ZW0gaW4gdGhlIGxpc3QuXG5cbkV4YW1wbGU6IDxsaSA6OmVhY2g9XCIkaXRlbXNcIiA6OmtleT1cIiNpZFwiPiAuLi4gPC9saT5cbmAsXG5cbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX0RVUExJQ0FURV9MSVNUX0tFWV06IGBcblRFTVBMQVRFX0RVUExJQ0FURV9MSVNUX0tFWVxuQSBsaXN0IGZhaWxlZCB0byByZW5kZXIgYmVjYXVzZSBpdGVtIGtleSAlcyBhcHBlYXJlZCBtdWx0aXBsZSB0aW1lcyB3aGVuXG5yZXNvbHZpbmcgbGlzdCBpdGVtIGtleXMuIEVhY2ggOjprZXkgZGlyZWN0aXZlIG11c3QgcmVmZXJlbmNlIGEgbm90YXRpb24gd2hvc2VcbnZhbHVlIGlzIHVuaXF1ZSBmb3IgZWFjaCBsaXN0IGl0ZW0uXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9JTlZBTElEX0NPTkRJVElPTkFMXTogYFxuVEVNUExBVEVfSU5WQUxJRF9DT05ESVRJT05BTFxuQSB0ZW1wbGF0ZSBmYWlsZWQgdG8gY29tcGlsZSBkdWUgdG8gYW4gaW52YWxpZCB1c2Ugb2YgY29uZGl0aW9uYWwgZGlyZWN0aXZlcy5cblxuQ29uZGl0aW9uYWwgZWxlbWVudHMgbXVzdCBiZSBzaWJsaW5ncy4gVGhlIGZpcnN0IGNvbmRpdGlvbmFsIGJyYW5jaCBtdXN0IHVzZSBhblxuOjppZiBkaXJlY3RpdmUsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSA6OmVsc2UtaWYgZGlyZWN0aXZlcywgYW5kIGZpbmFsbHkgemVyb1xub3Igb25lIDo6ZWxzZSBkaXJlY3RpdmUuXG5cbjo6aWYgYW5kIDo6ZWxzZS1pZiBkaXJlY3RpdmVzIG11c3Qgc3BlY2lmeSBhIG5vdGF0aW9uIHRvIGV2YWx1YXRlLiA6OmVsc2UgZG9lc1xubm90IHRha2UgYW55IHZhbHVlcyBhbmQgaXMganVzdCBhIGJpbmFyeSBhdHRyaWJ1dGUuXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9NSVNTSU5HX05PVEFUSU9OXTogYFxuVEVNUExBVEVfTUlTU0lOR19OT1RBVElPTlxuQSB0ZW1wbGF0ZSBmYWlsZWQgdG8gY29tcGlsZSBiZWNhdXNlIGEgJXMgZGlyZWN0aXZlIGRpZCBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkXG5ub3RhdGlvbiBkZXNwaXRlIHJlcXVpcmluZyBvbmUuXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5JTlZBTElEX1NUQVRFX0tFWV06IGBcbklOVkFMSURfU1RBVEVfS0VZXG5UcmllZCB0byBhY2Nlc3MgYSBzdGF0ZSBwcm9wZXJ0eSB3aGljaCBkb2VzIG5vdCBleGlzdFxuXG5LZXkgcGF0aDogJXNcbmAsXG5cbiAgICBbRXJyb3JDb2RlLklOVkFMSURfU1RBVEVfVVBEQVRFXTogYFxuSU5WQUxJRF9TVEFURV9VUERBVEVcbkEgQ29tcG9uZW50J3Mgc2V0U3RhdGUoKSB3YXMgY2FsbGVkIHdpdGggYSB2YWx1ZSB3aGljaCBjb3VsZCBub3QgYmUgcGF0Y2hlZCBpblxudG8gdGhlIGV4aXN0aW5nIGNvbXBvbmVudCBzdGF0ZS5cblxuc2V0U3RhdGUoKSB0YWtlcyBhIHBhcnRpYWwgb2JqZWN0IGRlc2NyaWJpbmcgc3RhdGUga2V5cyB0byB1cGRhdGUuXG5cbkluc3RlYWQsIHJlY2VpdmVkOiAlc1xuYCxcblxuICAgIFtFcnJvckNvZGUuU1RBVEVfTE9DS0VEXTogYFxuU1RBVEVfTE9DS0VEXG5BIFN0YXRlIHJlY2VpdmVkIGEgcmVxdWVzdCB0byB1cGRhdGUgb3IgbG9jayB3aGlsZSBhbHJlYWR5IGxvY2tlZC5cblN0YXRlcyBtYXkgYmUgbG9ja2VkIHVzaW5nIHRoZSAubG9jaygpIG1ldGhvZCBhbmQgdW5sb2NrZWQgdXNpbmcgdGhlIC51bmxvY2soKVxubWV0aG9kLiBTdGF0ZXMgbG9jayBkdXJpbmcgYXN5bmMgbXV0YXRpb25zIGRvbmUgdGhyb3VnaCB0aGUgLm11dGF0ZUFzeW5jKClcbm1ldGhvZCBpZiBcInRydWVcIiBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuXG5cbllvdSBjYW4gY2hlY2sgdGhlIGxvY2sgc3RhdHVzIG9mIGEgU3RhdGUgaW5zdGFuY2Ugd2l0aCAuaXNMb2NrZWRcbmAsXG5cbiAgICBbRXJyb3JDb2RlLk1BWF9TRVFVRU5USUFMX1JFTkRFUlNdOiBgXG5NQVhfU0VRVUVOVElBTF9SRU5ERVJTXG5BIGNvbXBvbmVudCBoYXMgZXJyb3JlZCBhZnRlciByZS1yZW5kZXJpbmcgbW9yZSB0aGFuICVzIHRpbWVzIGluIHRoZSBzYW1lIGZyYW1lLlxuXG5UaGlzIHR5cGljYWxseSBoYXBwZW5zIGJlY2F1c2Ugc3RhdGUgb3IgbGl2ZSBhdHRyaWJ1dGVzIGFyZSBiZWluZyBtb2RpZmllZFxuZHVyaW5nIGEgcmVuZGVyIGxpZmVjeWNsZSBtZXRob2Qgc3VjaCBhcyBiZWZvcmVVcGRhdGUoKSBvciBhZnRlclVwZGF0ZSgpLiBJZlxuc3RhdGUgY2hhbmdlcyB1bmNvbmRpdGlvbmFsbHkgZHVyaW5nIGEgcmVuZGVyLCB0aGUgcmVuZGVyIHdpbGwgaW5maW5pdGVseSBsb29wLlxuVXBkYXRpbmcgcmVuZGVyIHNvdXJjZSBkYXRhIGR1cmluZyBhIHJlbmRlciBjeWNsZSBpcyBzdXBwb3J0ZWQsIGJ1dCBpbmZpbml0ZVxudXBkYXRlIGxvb3BzIG1heSBvY2N1ciBpZiB1bmNoZWNrZWQuXG5gLFxuXG4gICAgW0Vycm9yQ29kZS5URU1QTEFURV9JTlZBTElEX0tFWV9ESVJFQ1RJVkVdOiBgXG5URU1QTEFURV9JTlZBTElEX0tFWV9ESVJFQ1RJVkVcbkEgdGVtcGxhdGUgZmFpbGVkIHRvIGNvbXBpbGUgYmVjYXVzZSBhIDo6a2V5IGRpcmVjdGl2ZSB3YXMgZm91bmQgb24gYW4gZWxlbWVudFxud2l0aCBubyBhc3NvY2lhdGVkIDo6ZWFjaCBkaXJlY3RpdmUuIDo6a2V5IGRpcmVjdGl2ZXMgY2FuIG9ubHkgYmUgdXNlZCBpblxuYXNzb2NpYXRpb24gd2l0aCBsaXN0IHJlbmRlcmluZyB2aWEgOjplYWNoLlxuYCxcbiAgICBbRXJyb3JDb2RlLlRFTVBMQVRFX1BBUkVOVF9SRVFVSVJFRF06IGBcblRFTVBMQVRFX1BBUkVOVF9SRVFVSVJFRFxuQSB0ZW1wbGF0ZSBmYWlsZWQgdG8gY29tcGlsZSBkdWUgdG8gYW4gZWxlbWVudCB3aGljaCByZXF1aXJlcyBhIHBhcmVudCBoYXZpbmdcbm5vIGF2YWlsYWJsZSBwYXJlbnQgaW4gdGhlIHRlbXBsYXRlLlxuXG46OmVhY2ggYW5kIDo6aWYvOjplbHNlLWlmLzo6ZWxzZSBlbGVtZW50cyBtdXN0IGhhdmUgYSBwYXJlbnQgbm9kZS5cbmAsXG4gIH07XG5cbiAgcmV0dXJuIERFVl9FUlJPUl9JTkZPW2NvZGVdO1xufVxuXG4vKipcbiAqIEFuIGVycm9yIG9yaWdpbmF0aW5nIGZyb20gd2l0aGluIGEgUGFsZXR0ZSBzdWJzeXN0ZW0uXG4gKlxuICogSW4gdGhlIGBkZXZlbG9wbWVudGAgZW52aXJvbm1lbnQsIHRoZSBlcnJvciB3aWxsIHN1cmZhY2Ugd2l0aCBleHRlbmRlZCBpbmZvXG4gKiBhYm91dCB0aGUgZXJyb3IgYW5kIGFueSBkZXRhaWxzIHdoaWNoIG1heSBiZSByZWxldmFudCB0byBoZWxwIHdpdGggZGVidWdnaW5nLlxuICpcbiAqIEluIHRoZSBgcHJvZHVjdGlvbmAgZW52aXJvbm1lbnQsIGEgbWluaW1hbCBlcnJvciBvbmx5IHN1cmZhY2luZyB0aGUgbnVtZXJpY1xuICogZXJyb3IgY29kZSBpcyB0aHJvd24gaW5zdGVhZC5cbiAqXG4gKiBDb2RlcyBhcmUgY2F0ZWdvcml6ZWQgaW50byBncm91cHMgYnkgdGhlIDEwMCdzOlxuICpcbiAqIC0gMCAtIDk5OiBJbnZhcmlhbnRzXG4gKiAtIDEwMCAtIDE5OTogQ3VzdG9tIEVsZW1lbnRzIC8gRW52aXJvbm1lbnQgRXJyb3JzXG4gKiAtIDIwMCAtIDI5OTogVGVtcGxhdGluZyBFcnJvcnNcbiAqIC0gMzAwIC0gMzk5OiBSdW50aW1lIEVycm9yc1xuICovXG5leHBvcnQgY2xhc3MgUGFsZXR0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lID0gXCJQYWxldHRlRXJyb3JcIjtcbiAgY29kZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGNvZGU6IG51bWJlciwgLi4udmFsdWVzOiBzdHJpbmdbXSkge1xuICAgIGxldCBtZXNzYWdlID0gYENvZGU6ICR7Y29kZX1gO1xuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBtZXNzYWdlICs9IGdldERldkVycm9yKGNvZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShgJXNgLCBTdHJpbmcodmFsKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxufVxuIiwKICAgICIvKlxuICogQ29weXJpZ2h0IMKpIFJ1c3RpYyBBcmNhZGUsIExMQyAyMDI2XG4gKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cbiAqL1xuXG5pbXBvcnQgeyBFcnJvckNvZGUsIFBhbGV0dGVFcnJvciB9IGZyb20gXCIjZXJyb3JcIjtcblxuLyoqIEFuIGF0dHJpYnV0ZSB2YWx1ZSBhcyByZWFkIGZyb20gYSBET00gZWxlbWVudCAqL1xudHlwZSBBdHRyaWJ1dGVWYWx1ZSA9IHN0cmluZyB8IG51bGw7XG5cbi8qKiBBIE1hcCBvZiBzdHJpbmcgYXR0cmlidXRlIG5hbWVzIHRvIHtAbGluayBBdHRyaWJ1dGVWYWx1ZX0gKi9cbnR5cGUgQXR0cmlidXRlTWFwID0gTWFwPHN0cmluZywgQXR0cmlidXRlVmFsdWU+O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlKHZhbHVlOiB1bmtub3duKTogQXR0cmlidXRlVmFsdWUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlTWFwKFxuICBzb3VyY2U6IG9iamVjdCB8IE1hcDxzdHJpbmcsIHVua25vd24+IHwgSFRNTEVsZW1lbnQsXG4pOiBBdHRyaWJ1dGVNYXAge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD4oKTtcblxuICBpZiAoc291cmNlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygc291cmNlLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcbiAgICAgIG1hcC5zZXQobmFtZSwgc2VyaWFsaXplQXR0cmlidXRlKHNvdXJjZS5nZXRBdHRyaWJ1dGUobmFtZSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2Ygc291cmNlKSB7XG4gICAgICBtYXAuc2V0KGtleSwgc2VyaWFsaXplQXR0cmlidXRlKHZhbCkpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwib2JqZWN0XCIgJiYgc291cmNlICE9PSBudWxsKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICAgIG1hcC5zZXQoa2V5LCBzZXJpYWxpemVBdHRyaWJ1dGUodmFsKSk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICB0aHJvdyBuZXcgUGFsZXR0ZUVycm9yKEVycm9yQ29kZS5JTlZBUklBTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGVNYXAoXG4gIHRhcmdldDogSFRNTEVsZW1lbnQsXG4gIGF0dHJzOiBBdHRyaWJ1dGVNYXAsXG4pOiB2b2lkIHtcbiAgY29uc3QgY3VycmVudE5hbWVzID0gbmV3IFNldCh0YXJnZXQuZ2V0QXR0cmlidXRlTmFtZXMoKSk7XG4gIGNvbnN0IGluY29taW5nTmFtZXMgPSBuZXcgU2V0KGF0dHJzLmtleXMoKSk7XG4gIGNvbnN0IGF0dHJpYnV0ZXNUb1JlbW92ZSA9IGN1cnJlbnROYW1lcy5kaWZmZXJlbmNlKGluY29taW5nTmFtZXMpO1xuXG4gIGZvciAoY29uc3QgYXR0ciBvZiBhdHRyaWJ1dGVzVG9SZW1vdmUpIHtcbiAgICB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsXSBvZiBhdHRycykge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsKTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiLypcbiAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcbiAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwczovL21vemlsbGEub3JnL01QTC8yLjAvLlxuICovXG50eXBlIE1ldHJpY3MgPSB7XG4gIGhpdHM6IG51bWJlcjtcbiAgbWlzc2VzOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMUlVDYWNoZU1ldHJpY3MgPSB7XG4gIGxvb2t1cHM6IG51bWJlcjtcbiAgaGl0czogbnVtYmVyO1xuICBtaXNzZXM6IG51bWJlcjtcbiAgY2FwYWNpdHk6IG51bWJlcjtcbiAgZW50cmllczogbnVtYmVyO1xuICBoaXRSYXRlOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEEgc2ltcGxlIGluLW1lbW9yeSBMUlUgQ2FjaGUgdXNpbmcgSmF2YVNjcmlwdCBtYXBzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogQ2FjaGVkIG5ldHdvcmsgcmVxdWVzdFxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEEgY2FjaGUgb2YgQVBJIFVSTHMgdG8gdGhlaXIgcmV0dXJuZWQgcGF5bG9hZHNcbiAqIGNvbnN0IGNhY2hlID0gbmV3IExSVUNhY2hlPHN0cmluZywgQVBJUGF5bG9hZD4oKTtcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBtYWtlUmVxdWVzdCh1cmw6IHN0cmluZykge1xuICogICBsZXQgY2FjaGVkID0gY2FjaGUuZ2V0KHVybCk7XG4gKiAgIGlmIChjYWNoZWQpIHtcbiAqICAgICByZXR1cm4gY2FjaGVkO1xuICogICB9XG4gKlxuICogICAvLyAuLi4gTWFrZSB0aGUgcmVxdWVzdCBhbmQgY2FjaGUuc2V0KCkgdGhlIHJlc3BvbnNlXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExSVUNhY2hlPEssIFY+IHtcbiAgcHJpdmF0ZSBfbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9kYXRhOiBNYXA8SywgVj47XG4gIHByaXZhdGUgX21ldHJpY3M6IE1ldHJpY3MgPSB7IGhpdHM6IDAsIG1pc3NlczogMCB9O1xuXG4gIGNvbnN0cnVjdG9yKG1heFNpemU6IG51bWJlciA9IDUwMCkge1xuICAgIGlmIChtYXhTaXplIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxSVSBDYWNoZSBjYXBhY2l0eSBtdXN0IGJlID49IDFcIik7XG4gICAgfVxuXG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIHRoaXMuX21ldHJpY3MgPSB7IGhpdHM6IDAsIG1pc3NlczogMCB9O1xuICAgIH1cblxuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgTWFwPEssIFY+KCk7XG4gIH1cblxuICBwcml2YXRlIF90cmltID0gKCkgPT4ge1xuICAgIHdoaWxlICh0aGlzLl9kYXRhLnNpemUgPiB0aGlzLl9tYXhTaXplKSB7XG4gICAgICBjb25zdCBmaXJzdEtleSA9IHRoaXMuX2RhdGEua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICAgIGlmIChmaXJzdEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3VyZFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2RhdGEuZGVsZXRlKGZpcnN0S2V5KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBwZXJmb3JtYW5jZSBtZXRyaWNzIGZyb20gdGhpcyBMUlUgQ2FjaGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEluIGRldmVsb3BtZW50IG1vZGUsIHRoaXMgcmV0dXJucyBpbnNpZ2h0cyBpbnRvIGhpdHMvbWlzc2VzIG9mIHRoZSBjYWNoZSxcbiAgICogYXMgd2VsbCBhcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBlbnRyeSBjb3VudC5cbiAgICpcbiAgICogSW4gcHJvZHVjdGlvbiBtb2RlLCB0aGlzIHJldHVybnMgYSBwbGFjZWhvbGRlciBvYmplY3QsIGFzIG1ldHJpYyBjb2xsZWN0aW9uXG4gICAqIGlzIG5vdCBhY3RpdmUgaW4gcHJvZHVjdGlvbi5cbiAgICovXG4gIGdldE1ldHJpY3MoKTogTFJVQ2FjaGVNZXRyaWNzIHwgdm9pZCB7XG4gICAgaWYgKF9fREVWX18pIHtcbiAgICAgIGNvbnN0IHsgaGl0cyA9IDAsIG1pc3NlcyA9IDAgfSA9IHRoaXMuX21ldHJpY3MgPz8ge307XG4gICAgICBjb25zdCBsb29rdXBzID0gaGl0cyArIG1pc3NlcztcbiAgICAgIGNvbnN0IGhpdFJhdGUgPSBsb29rdXBzID09PSAwID8gMCA6IGhpdHMgLyBsb29rdXBzO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb29rdXBzLFxuICAgICAgICBoaXRzOiBoaXRzLFxuICAgICAgICBtaXNzZXM6IG1pc3NlcyxcbiAgICAgICAgY2FwYWNpdHk6IHRoaXMuX21heFNpemUsXG4gICAgICAgIGVudHJpZXM6IHRoaXMuX2RhdGEuc2l6ZSxcbiAgICAgICAgaGl0UmF0ZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgbWF4aW11bSBjYWNoZSBzaXplIGZvciB0aGlzIGluc3RhbmNlLiBJbW1lZGlhdGVseSB0cmlnZ2VycyBhXG4gICAqIHB1cmdlIG9mIGNhY2hlZCBjb250ZW50cyBpZiB0aGUgbmV3IGNhcGFjaXR5IGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudFxuICAgKiBudW1iZXIgb2YgY2FjaGVkIGVudHJpZXMuXG4gICAqL1xuICBzZXRDYXBhY2l0eSA9IChtYXhTaXplOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBpZiAobWF4U2l6ZSA8PSAwICYmIF9fREVWX18pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbUGFsZXR0ZSBMUlUgQ2FjaGVdIENhY2hlIHNpemUgaXMgPD0gMC4gQ2FjaGUgaXMgZGlzYWJsZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuICAgIHRoaXMuX3RyaW0oKTtcbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2ggYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSwgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGlmIG5vIHZhbHVlIHdhcyBmb3VuZFxuICAgKi9cbiAgZ2V0KGtleTogSyk6IFYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXQoa2V5KTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoX19ERVZfXykge1xuICAgICAgICB0aGlzLl9tZXRyaWNzLm1pc3NlcyArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBEZWxldGUgYW5kIHJlLXNldCB0aGUgdmFsdWUgdG8gbW92ZSB0aGUga2V5IHRvIHRoZSBlbmQgb2YgdGhlIGtleSBsaXN0XG4gICAgdGhpcy5fZGF0YS5kZWxldGUoa2V5KTtcbiAgICB0aGlzLl9kYXRhLnNldChrZXksIHZhbHVlKTtcblxuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICB0aGlzLl9tZXRyaWNzLmhpdHMgKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgdmFsdWUgaW4gdGhlIGNhY2hlLiBUaGlzIGFsc28gbW92ZXMgdGhlIHZhbHVlIHRvIHRoZSBiYWNrIG9mIHRoZSBsaXN0XG4gICAqIG9mIHZhbHVlcyB0byBjb25zaWRlciBldmljdGluZyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxuICAgKi9cbiAgc2V0KGtleTogSywgdmFsdWU6IFYpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgaWYgZXhpc3RzIHRvIHVwZGF0ZSBwb3NpdGlvblxuICAgIGlmICh0aGlzLl9kYXRhLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLl9kYXRhLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuX2RhdGEuc2l6ZSA+IHRoaXMuX21heFNpemUpIHtcbiAgICAgIHRoaXMuX3RyaW0oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNvbnRlbnRzIG9mIHRoaXMgY2FjaGUgaW5zdGFuY2VcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgY2FjaGUgaW5zdGFuY2VcbiAgICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMUlVDYWNoZTtcbiIsCiAgICAiLypcbiAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWNcbiAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcbiAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwczovL21vemlsbGEub3JnL01QTC8yLjAvLlxuICovXG5pbXBvcnQgTFJVQ2FjaGUgZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5cbmV4cG9ydCBjb25zdCBmcmFnbWVudENhY2hlID0gbmV3IExSVUNhY2hlPHN0cmluZywgRG9jdW1lbnRGcmFnbWVudD4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxUb0ZyYWdtZW50KGh0bWw6IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICBjb25zdCBsb29rdXAgPSBmcmFnbWVudENhY2hlLmdldChodG1sKTtcblxuICBpZiAobG9va3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbG9va3VwLmNsb25lTm9kZSh0cnVlKSBhcyBEb2N1bWVudEZyYWdtZW50O1xuICB9XG5cbiAgY29uc3QgdGVtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcC5pbm5lckhUTUwgPSBodG1sO1xuICBmcmFnbWVudENhY2hlLnNldChodG1sLCB0ZW1wLmNvbnRlbnQpO1xuICByZXR1cm4gdGVtcC5jb250ZW50LmNsb25lTm9kZSh0cnVlKSBhcyBEb2N1bWVudEZyYWdtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZyYWdtZW50KGh0bWw6IHN0cmluZywgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpOiB2b2lkIHtcbiAgZnJhZ21lbnRDYWNoZS5zZXQoaHRtbCwgZnJhZ21lbnQpO1xufVxuIiwKICAgICIvKlxuICogQ29weXJpZ2h0IMKpIFJ1c3RpYyBBcmNhZGUsIExMQyAyMDI2XG4gKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljXG4gKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gdGFnIG5hbWUgZm9yIHVzZSBpbiBhIHRlc3QgZWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgcmFuZG9tVGFnTmFtZSA9ICgpID0+IHtcbiAgY29uc3QgaWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2VBbGwoXCItXCIsIFwiXCIpLnNsaWNlKDAsIDEwKTtcbiAgcmV0dXJuIGB0ZXN0LWVsZW1lbnQtJHtpZH1gO1xufTtcbiIsCiAgICAiLypcbiAqIENvcHlyaWdodCDCqSBSdXN0aWMgQXJjYWRlLCBMTEMgMjAyNlxuICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xuICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHBzOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tIFwiI2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgYXBwbHlBdHRyaWJ1dGVNYXAsIGNyZWF0ZUF0dHJpYnV0ZU1hcCB9IGZyb20gXCIjdXRpbFwiO1xuaW1wb3J0IHsgcmFuZG9tVGFnTmFtZSB9IGZyb20gXCIuL3RhZ3NcIjtcblxuLyoqXG4gKiBSZW5kZXIgYSBQYWxldHRlIENvbXBvbmVudCBjbGFzcyBhcyBhIHRlc3QgZWxlbWVudFxuICpcbiAqIElmIHRoZSBjbGFzcyBpcyBub3QgeWV0IHJlZ2lzdGVyZWQsIGl0IGlzIGF1dG8tcmVnaXN0ZXJlZCBiZWZvcmUgY3JlYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0ZXN0KFwiY29tcG9uZW50IGRvZXMgc29tZXRoaW5nXCIsIGFzeW5jICgpID0+IHtcbiAqICAgbGV0IHNvbWV0aGluZ01vY2sgPSBtb2NrKCk7XG4gKlxuICogICBjbGFzcyBNeVRlc3RDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICAgIHNjcmlwdCgpIHtcbiAqICAgICAgIHNvbWV0aGluZ01vY2soKTtcbiAqICAgICB9XG4gKiAgIH1cbiAqXG4gKiAgIGF3YWl0IHJlbmRlclRlc3RDb21wb25lbnQoTXlUZXN0Q29tcG9uZW50KTtcbiAqICAgZXhwZWN0KHNvbWV0aGluZ01vY2spLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCBUaGUgY29tcG9uZW50IGNsYXNzIHRvIHJlZ2lzdGVyIGFuZCBjcmVhdGVcbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIEEgcmVjb3JkIG9mIGF0dHJpYnV0ZXMgdG8gYXBwbHlcbiAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSByZW5kZXJlZCBDb21wb25lbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlc3RDb21wb25lbnQ8RSBleHRlbmRzIHR5cGVvZiBDb21wb25lbnQ8YW55Pj4oXG4gIGNvbXBvbmVudDogRSxcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUHJvbWlzZTxJbnN0YW5jZVR5cGU8RT4+IHtcbiAgLy8gRXJyb3IgZWFybHkgaWYgbWlzY29uZmlndXJlZFxuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgIHR5cGVvZiB3aW5kb3cuY3VzdG9tRWxlbWVudHMgPT09IFwidW5kZWZpbmVkXCJcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJGYWlsZWQgdG8gcmVuZGVyIHRlc3QgY29tcG9uZW50OiBcIiArXG4gICAgICAgIFwid2luZG93LmN1c3RvbUVsZW1lbnRzIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC5cIixcbiAgICApO1xuICB9XG5cbiAgY29uc3QgdXNlVGFnbmFtZSA9XG4gICAgY29tcG9uZW50LnRhZ05hbWUgPT09IFwiXCIgPyByYW5kb21UYWdOYW1lKCkgOiBjb21wb25lbnQudGFnTmFtZTtcblxuICAvLyBSZWFzc2lnbiB0aGUgdGFnbmFtZSBiYWNrIHRvIHRoZSBjb21wb25lbnQgdG8gZW5zdXJlIGl0IGlzIHNldCBiZWZvcmUgcmVnaXN0cmF0aW9uXG4gIGNvbXBvbmVudC50YWdOYW1lID0gdXNlVGFnbmFtZTtcblxuICAvLyBSZWdpc3RlciB0aGUgY29tcG9uZW50IGlmIG5lZWQgYmVcbiAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQodXNlVGFnbmFtZSkpIHtcbiAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoXG4gICAgICB1c2VUYWduYW1lLFxuICAgICAgY29tcG9uZW50IGFzIHVua25vd24gYXMgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLFxuICAgICk7XG4gIH1cblxuICAvLyBDb25zdHJ1Y3QgYSB0ZXN0IGluc3RhbmNlXG4gIGNvbnN0ICRjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudC50YWdOYW1lKTtcblxuICAvLyBBcHBseSBhdHRyaWJ1dGVzIGJlZm9yZSByZW5kZXJpbmdcbiAgY29uc3QgYXR0cmlidXRlTWFwID0gY3JlYXRlQXR0cmlidXRlTWFwKGF0dHJpYnV0ZXMgPz8ge30pO1xuICBhcHBseUF0dHJpYnV0ZU1hcCgkY29tcG9uZW50LCBhdHRyaWJ1dGVNYXApO1xuXG4gIC8vIFJlbmRlciBhbmQgYXdhaXQgdG8gYWxsb3cgbWljcm90YXNrcyB0byBzZXR0bGVcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmQoJGNvbXBvbmVudCk7XG4gIGF3YWl0IEJ1bi5zbGVlcCgxKTtcblxuICAvLyBSZXR1cm4gdGhlIHJlbmRlcmVkIGluc3RhbmNlXG4gIHJldHVybiAkY29tcG9uZW50IGFzIEluc3RhbmNlVHlwZTxFPjtcbn1cblxuLyoqXG4gKiBGb3JjZSBhIHJlbmRlciBvbiB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSByZW5kZXIgaGFzIGNvbXBsZXRlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVyZW5kZXJUZXN0Q29tcG9uZW50KGVsZW1lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBlbGVtZW50LnJlcXVlc3RSZW5kZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgQnVuLnNsZWVwKDEpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBT0E7QUFLQSxlQUFzQixvQkFBb0IsR0FBa0I7QUFBQSxFQUMxRCxNQUFNLHFCQUFxQjtBQUFBLEVBQzNCLGtCQUFrQixTQUFTO0FBQUE7QUFNN0IsZUFBc0Isb0JBQW9CLEdBQWtCO0FBQUEsRUFDMUQsSUFBSSxPQUFPLGFBQWEsYUFBYTtBQUFBLElBQ25DLE9BQU8sU0FBUyxZQUFZO0FBQUEsTUFDMUIsU0FBUyxZQUFZLFNBQVMsVUFBVTtBQUFBLElBQzFDO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUFBLEVBRWpCLElBQUksa0JBQWtCLGNBQWM7QUFBQSxJQUNsQyxrQkFBa0IsV0FBVztBQUFBLEVBQy9CO0FBQUE7O0FDZ0JGLFNBQVMsV0FBVyxDQUFDLE1BQWlCO0FBQUEsRUFDcEMsTUFBTSxpQkFBNEM7QUFBQSxLQUMvQyxvQkFBc0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBTXRCLHNCQUF3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FLeEIsMkJBQTZCO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FLN0IsNEJBQTRCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBVTVCLDRCQUE0QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBSzVCLDBCQUEwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FNMUIsNEJBQTRCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FRNUIsbUNBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBT25DLDZDQUE2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FRN0MsdUNBQXVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FRdkMsdUNBQXVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQU12QywyQkFBNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FPN0Isc0NBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBVXRDLHdDQUF3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQU94Qyx5Q0FBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBWXpDLHNDQUFzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FNdEMsOEJBQThCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBTzlCLGlDQUFpQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQVVqQyx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FVekIsbUNBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FXbkMsMkNBQTJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBTTNDLHFDQUFxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3hDO0FBQUEsRUFFQSxPQUFPLGVBQWU7QUFBQTtBQUFBO0FBbUJqQixNQUFNLHFCQUFxQixNQUFNO0FBQUEsRUFDdEMsT0FBTztBQUFBLEVBQ1A7QUFBQSxFQUVBLFdBQVcsQ0FBQyxTQUFpQixRQUFrQjtBQUFBLElBQzdDLElBQUksVUFBVSxTQUFTO0FBQUEsSUFDdkIsSUFBSSxNQUFTO0FBQUEsTUFDWCxXQUFXLFlBQVksSUFBSTtBQUFBLE1BRTNCLFdBQVcsT0FBTyxRQUFRO0FBQUEsUUFDeEIsVUFBVSxRQUFRLFFBQVEsTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUFBLE1BQzdDO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBTSxPQUFPO0FBQUEsSUFDYixLQUFLLE9BQU87QUFBQTtBQUVoQjs7O0FDL09PLFNBQVMsa0JBQWtCLENBQUMsT0FBZ0M7QUFBQSxFQUNqRSxJQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVO0FBQUEsSUFDMUQsT0FBTyxHQUFHO0FBQUEsRUFDWjtBQUFBLEVBRUEsSUFBSSxVQUFVLE1BQU07QUFBQSxJQUNsQixPQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsSUFBSSxVQUFVLFFBQVEsVUFBVSxTQUFTLFVBQVUsV0FBVztBQUFBLElBQzVELE9BQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxPQUFPLE1BQU0sU0FBUztBQUFBO0FBR2pCLFNBQVMsa0JBQWtCLENBQ2hDLFFBQ2M7QUFBQSxFQUNkLE1BQU0sTUFBTSxJQUFJO0FBQUEsRUFFaEIsSUFBSSxrQkFBa0IsYUFBYTtBQUFBLElBQ2pDLFdBQVcsUUFBUSxPQUFPLGtCQUFrQixHQUFHO0FBQUEsTUFDN0MsSUFBSSxJQUFJLE1BQU0sbUJBQW1CLE9BQU8sYUFBYSxJQUFJLENBQUMsQ0FBQztBQUFBLElBQzdEO0FBQUEsSUFDQSxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsSUFBSSxrQkFBa0IsS0FBSztBQUFBLElBQ3pCLFlBQVksS0FBSyxRQUFRLFFBQVE7QUFBQSxNQUMvQixJQUFJLElBQUksS0FBSyxtQkFBbUIsR0FBRyxDQUFDO0FBQUEsSUFDdEM7QUFBQSxJQUNBLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxJQUFJLE9BQU8sV0FBVyxZQUFZLFdBQVcsTUFBTTtBQUFBLElBQ2pELFlBQVksS0FBSyxRQUFRLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFBQSxNQUMvQyxJQUFJLElBQUksS0FBSyxtQkFBbUIsR0FBRyxDQUFDO0FBQUEsSUFDdEM7QUFBQSxJQUNBLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxNQUFNLElBQUksOEJBQWdDO0FBQUE7QUFHckMsU0FBUyxpQkFBaUIsQ0FDL0IsUUFDQSxPQUNNO0FBQUEsRUFDTixNQUFNLGVBQWUsSUFBSSxJQUFJLE9BQU8sa0JBQWtCLENBQUM7QUFBQSxFQUN2RCxNQUFNLGdCQUFnQixJQUFJLElBQUksTUFBTSxLQUFLLENBQUM7QUFBQSxFQUMxQyxNQUFNLHFCQUFxQixhQUFhLFdBQVcsYUFBYTtBQUFBLEVBRWhFLFdBQVcsUUFBUSxvQkFBb0I7QUFBQSxJQUNyQyxPQUFPLGdCQUFnQixJQUFJO0FBQUEsRUFDN0I7QUFBQSxFQUVBLFlBQVksTUFBTSxRQUFRLE9BQU87QUFBQSxJQUMvQixJQUFJLFFBQVEsTUFBTTtBQUFBLE1BQ2hCLE9BQU8sZ0JBQWdCLElBQUk7QUFBQSxJQUM3QixFQUFPO0FBQUEsTUFDTCxPQUFPLGFBQWEsTUFBTSxHQUFHO0FBQUE7QUFBQSxFQUVqQztBQUFBOztBQ3RDSyxNQUFNLFNBQWU7QUFBQSxFQUNsQjtBQUFBLEVBQ0E7QUFBQSxFQUNBLFdBQW9CLEVBQUUsTUFBTSxHQUFHLFFBQVEsRUFBRTtBQUFBLEVBRWpELFdBQVcsQ0FBQyxVQUFrQixLQUFLO0FBQUEsSUFDakMsSUFBSSxXQUFXLEdBQUc7QUFBQSxNQUNoQixNQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxJQUNuRDtBQUFBLElBRUEsSUFBSSxNQUFTO0FBQUEsTUFDWCxLQUFLLFdBQVcsRUFBRSxNQUFNLEdBQUcsUUFBUSxFQUFFO0FBQUEsSUFDdkM7QUFBQSxJQUVBLEtBQUssV0FBVztBQUFBLElBQ2hCLEtBQUssUUFBUSxJQUFJO0FBQUE7QUFBQSxFQUdYLFFBQVEsTUFBTTtBQUFBLElBQ3BCLE9BQU8sS0FBSyxNQUFNLE9BQU8sS0FBSyxVQUFVO0FBQUEsTUFDdEMsTUFBTSxXQUFXLEtBQUssTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQUEsTUFDMUMsSUFBSSxhQUFhLFdBQVc7QUFBQSxRQUMxQixNQUFNLElBQUksTUFBTSxRQUFRO0FBQUEsTUFDMUI7QUFBQSxNQUNBLEtBQUssTUFBTSxPQUFPLFFBQVE7QUFBQSxJQUM1QjtBQUFBO0FBQUEsRUFZRixVQUFVLEdBQTJCO0FBQUEsSUFDbkMsSUFBSSxNQUFTO0FBQUEsTUFDWCxRQUFRLE9BQU8sR0FBRyxTQUFTLE1BQU0sS0FBSyxZQUFZLENBQUM7QUFBQSxNQUNuRCxNQUFNLFVBQVUsT0FBTztBQUFBLE1BQ3ZCLE1BQU0sVUFBVSxZQUFZLElBQUksSUFBSSxPQUFPO0FBQUEsTUFFM0MsT0FBTztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBVSxLQUFLO0FBQUEsUUFDZixTQUFTLEtBQUssTUFBTTtBQUFBLFFBQ3BCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBLEVBUUYsY0FBYyxDQUFDLFlBQTBCO0FBQUEsSUFDdkMsSUFBSSxXQUFXLEtBQUssTUFBUztBQUFBLE1BQzNCLFFBQVEsS0FDTiw0REFDRjtBQUFBLElBQ0Y7QUFBQSxJQUVBLEtBQUssV0FBVztBQUFBLElBQ2hCLEtBQUssTUFBTTtBQUFBO0FBQUEsRUFNYixHQUFHLENBQUMsS0FBdUI7QUFBQSxJQUN6QixNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksR0FBRztBQUFBLElBRWhDLElBQUksVUFBVSxXQUFXO0FBQUEsTUFDdkIsSUFBSSxNQUFTO0FBQUEsUUFDWCxLQUFLLFNBQVMsVUFBVTtBQUFBLE1BQzFCO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUdBLEtBQUssTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUNyQixLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUs7QUFBQSxJQUV6QixJQUFJLE1BQVM7QUFBQSxNQUNYLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDeEI7QUFBQSxJQUVBLE9BQU87QUFBQTtBQUFBLEVBT1QsR0FBRyxDQUFDLEtBQVEsT0FBZ0I7QUFBQSxJQUUxQixJQUFJLEtBQUssTUFBTSxJQUFJLEdBQUcsR0FBRztBQUFBLE1BQ3ZCLEtBQUssTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUN2QjtBQUFBLElBRUEsS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLO0FBQUEsSUFFekIsSUFBSSxLQUFLLE1BQU0sT0FBTyxLQUFLLFVBQVU7QUFBQSxNQUNuQyxLQUFLLE1BQU07QUFBQSxJQUNiO0FBQUE7QUFBQSxFQU1GLEtBQUssR0FBUztBQUFBLElBQ1osS0FBSyxNQUFNLE1BQU07QUFBQTtBQUFBLE1BTWYsSUFBSSxHQUFXO0FBQUEsSUFDakIsT0FBTyxLQUFLLE1BQU07QUFBQTtBQUV0QjtBQUVBLElBQWU7OztBQy9KUixJQUFNLGdCQUFnQixJQUFJOztBQ0cxQixJQUFNLGdCQUFnQixNQUFNO0FBQUEsRUFDakMsTUFBTSxLQUFLLE9BQU8sV0FBVyxFQUFFLFdBQVcsS0FBSyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBQSxFQUM5RCxPQUFPLGdCQUFnQjtBQUFBOzs7QUN5QnpCLGVBQXNCLG1CQUFvRCxDQUN4RSxXQUNBLGFBQzBCO0FBQUEsRUFFMUIsSUFDRSxPQUFPLFdBQVcsZUFDbEIsT0FBTyxPQUFPLG1CQUFtQixhQUNqQztBQUFBLElBQ0EsTUFBTSxJQUFJLE1BQ1Isc0NBQ0UsNkRBQ0o7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFNLGFBQ0osVUFBVSxZQUFZLEtBQUssY0FBYyxJQUFJLFVBQVU7QUFBQSxFQUd6RCxVQUFVLFVBQVU7QUFBQSxFQUdwQixJQUFJLENBQUMsZUFBZSxJQUFJLFVBQVUsR0FBRztBQUFBLElBQ25DLGVBQWUsT0FDYixZQUNBLFNBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFHQSxNQUFNLGFBQWEsU0FBUyxjQUFjLFVBQVUsT0FBTztBQUFBLEVBRzNELE1BQU0sZUFBZSxtQkFBbUIsZUFBYyxDQUFDLENBQUM7QUFBQSxFQUN4RCxrQkFBa0IsWUFBWSxZQUFZO0FBQUEsRUFHMUMsU0FBUyxLQUFLLE9BQU8sVUFBVTtBQUFBLEVBQy9CLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFBQSxFQUdqQixPQUFPO0FBQUE7QUFRVCxlQUFzQixxQkFBcUIsQ0FBQyxTQUFtQztBQUFBLEVBQzdFLE9BQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUFBLElBQzlCLFFBQVEsY0FBYyxZQUFZO0FBQUEsTUFDaEMsTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQ2pCLFFBQVE7QUFBQSxLQUNUO0FBQUEsR0FDRjtBQUFBOyIsCiAgImRlYnVnSWQiOiAiQjI4RjhFRDVFQzRCOEU3QzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rusticarcade/palette",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Native web development, but make it joyful",
5
5
  "keywords": [
6
6
  "palette",