css-to-tailwind-react 0.3.2 → 0.3.4

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.
package/dist/cssParser.js CHANGED
@@ -89,25 +89,55 @@ class CSSParser {
89
89
  const conversionWarnings = [];
90
90
  declarations.forEach(decl => {
91
91
  const valueToConvert = this.resolveDeclarationValue(decl.value, selector, specificity, variants);
92
+ let convertedInThisBlock = false;
92
93
  if (valueToConvert.hasUnresolved) {
94
+ const multiResult = this.mapper.convertPropertyWithMultiple(decl.property, valueToConvert.resolvedValue || decl.value);
95
+ if (multiResult.classes.length > 0) {
96
+ multiResult.classes.forEach((className) => {
97
+ conversionResults.push({
98
+ declaration: decl,
99
+ converted: true,
100
+ className,
101
+ resolvedValue: valueToConvert.resolvedValue || decl.value
102
+ });
103
+ });
104
+ multiResult.warnings.forEach(w => conversionWarnings.push(w));
105
+ convertedInThisBlock = true;
106
+ }
107
+ if (!convertedInThisBlock) {
108
+ conversionResults.push({
109
+ declaration: decl,
110
+ converted: false,
111
+ className: null,
112
+ resolvedValue: valueToConvert.resolvedValue
113
+ });
114
+ conversionWarnings.push(`Could not fully resolve var() in: ${decl.property}: ${decl.value}`);
115
+ }
116
+ return;
117
+ }
118
+ const multiResult = this.mapper.convertPropertyWithMultiple(decl.property, valueToConvert.resolvedValue);
119
+ if (multiResult.classes.length > 0) {
120
+ multiResult.classes.forEach((className) => {
121
+ conversionResults.push({
122
+ declaration: decl,
123
+ converted: true,
124
+ className,
125
+ resolvedValue: valueToConvert.resolvedValue
126
+ });
127
+ });
128
+ multiResult.warnings.forEach(w => conversionWarnings.push(w));
129
+ }
130
+ else {
131
+ const result = this.mapper.convertProperty(decl.property, valueToConvert.resolvedValue);
93
132
  conversionResults.push({
94
133
  declaration: decl,
95
- converted: false,
96
- className: null,
134
+ converted: !result.skipped && result.className !== null,
135
+ className: result.className,
97
136
  resolvedValue: valueToConvert.resolvedValue
98
137
  });
99
- conversionWarnings.push(`Could not fully resolve var() in: ${decl.property}: ${decl.value}`);
100
- return;
101
- }
102
- const result = this.mapper.convertProperty(decl.property, valueToConvert.resolvedValue);
103
- conversionResults.push({
104
- declaration: decl,
105
- converted: !result.skipped && result.className !== null,
106
- className: result.className,
107
- resolvedValue: valueToConvert.resolvedValue
108
- });
109
- if (result.skipped && result.reason) {
110
- conversionWarnings.push(result.reason);
138
+ if (result.skipped && result.reason) {
139
+ conversionWarnings.push(result.reason);
140
+ }
111
141
  }
112
142
  });
113
143
  const utilities = conversionResults
@@ -482,4 +512,4 @@ class CSSParser {
482
512
  }
483
513
  }
484
514
  exports.CSSParser = CSSParser;
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLG1GQU00QztBQUM1QywrREFNa0M7QUFDbEMseUVBS3VDO0FBRXZDLCtEQVNrQztBQTBDbEMsTUFBYSxTQUFTO0lBTXBCLFlBQVksTUFBc0IsRUFBRSxPQUFtRDtRQUgvRSx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFJckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxJQUFBLGlEQUE0QixFQUFDLE9BQU8sQ0FBQztZQUN2QyxDQUFDLENBQUMsSUFBQSxtQ0FBYyxHQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWdCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLElBQW1CLEVBQ25CLHFCQUErQixFQUFFO1FBRWpDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixNQUFNLGNBQWMsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDO1lBRTVDLElBQUksS0FBb0IsQ0FBQztZ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akIsQ0FBQztDQUNGO0FBL21CRCw4QkErbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBvc3Rjc3MsIHsgUm9vdCwgUnVsZSwgRGVjbGFyYXRpb24sIEF0UnVsZSB9IGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHNhZmVQYXJzZXIgZnJvbSAncG9zdGNzcy1zYWZlLXBhcnNlcic7XG5pbXBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHkgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IFxuICBCcmVha3BvaW50LCBcbiAgZ2V0QnJlYWtwb2ludHMsIFxuICByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnLFxuICBwcm9jZXNzTWVkaWFRdWVyeSBcbn0gZnJvbSAnLi91dGlscy9icmVha3BvaW50UmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzLFxuICBQYXJzZWRTZWxlY3RvclxufSBmcm9tICcuL3V0aWxzL3BzZXVkb1NlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIHByb2Nlc3NEZXNjZW5kYW50U2VsZWN0b3IsXG4gIERlc2NlbmRhbnRTZWxlY3RvcixcbiAgU2VsZWN0b3JQYXJ0LFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVVdGlsaXR5LFxuICBhc3NlbWJsZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eSxcbiAgbWVyZ2VVdGlsaXRpZXMsXG4gIG5vcm1hbGl6ZVZhcmlhbnRPcmRlclxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHksXG4gIGNhbGN1bGF0ZURlc2NlbmRhbnRTcGVjaWZpY2l0eSxcbiAgWkVST19TUEVDSUZJQ0lUWVxufSBmcm9tICcuL3V0aWxzL3NwZWNpZmljaXR5Q2FsY3VsYXRvcic7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUZvclV0aWxpdHkgfSBmcm9tICcuL3V0aWxzL3Byb3BlcnR5TWFwcGVyJztcbmltcG9ydCB7XG4gIFZhcmlhYmxlUmVnaXN0cnksXG4gIFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgVmFyaWFibGVTY29wZSxcbiAgUmVzb2x1dGlvbkNvbnRleHQsXG4gIGlzQ3NzVmFyaWFibGUsXG4gIGlzVmFyRXhwcmVzc2lvbixcbiAgY3JlYXRlR2xvYmFsU2NvcGUsXG4gIGNyZWF0ZVNlbGVjdG9yU2NvcGVcbn0gZnJvbSAnLi91dGlscy92YXJpYWJsZVJlZ2lzdHJ5JztcblxuZXhwb3J0IGludGVyZmFjZSBVdGlsaXR5V2l0aFZhcmlhbnQge1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YXJpYW50czogc3RyaW5nW107XG4gIGNzc1Byb3BlcnR5OiBzdHJpbmc7XG4gIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eTtcbiAgc291cmNlT3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RvclRhcmdldCB7XG4gIHR5cGU6ICdjbGFzcycgfCAnZWxlbWVudCc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NSdWxlIHtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXTtcbiAgY29udmVydGVkQ2xhc3Nlczogc3RyaW5nW107XG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhWYXJpYW50W107XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIGZ1bGx5Q29udmVydGVkOiBib29sZWFuO1xuICBwYXJ0aWFsQ29udmVyc2lvbjogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xuICBpc0Rlc2NlbmRhbnQ6IGJvb2xlYW47XG4gIHBhcmVudFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG4gIHRhcmdldFNlbGVjdG9yPzogU2VsZWN0b3JUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuICBwcml2YXRlIHNvdXJjZU9yZGVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSB2YXJpYWJsZVJlZ2lzdHJ5OiBWYXJpYWJsZVJlZ2lzdHJ5O1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIsIHNjcmVlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddPikge1xuICAgIHRoaXMubWFwcGVyID0gbWFwcGVyO1xuICAgIHRoaXMuYnJlYWtwb2ludHMgPSBzY3JlZW5zIFxuICAgICAgPyByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnKHNjcmVlbnMpIFxuICAgICAgOiBnZXRCcmVha3BvaW50cygpO1xuICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeSA9IG5ldyBWYXJpYWJsZVJlZ2lzdHJ5KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U291cmNlT3JkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zb3VyY2VPcmRlckNvdW50ZXIgPSAwO1xuICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXh0U291cmNlT3JkZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKyt0aGlzLnNvdXJjZU9yZGVyQ291bnRlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFZhcmlhYmxlcyhcbiAgICBub2RlOiBSb290IHwgQXRSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB2b2lkIHtcbiAgICBsZXQgc291cmNlT3JkZXIgPSAwO1xuICAgIFxuICAgIG5vZGUud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IHJ1bGUuc2VsZWN0b3I7XG4gICAgICBjb25zdCBpc1Jvb3RTZWxlY3RvciA9IHNlbGVjdG9yID09PSAnOnJvb3QnO1xuICAgICAgXG4gICAgICBsZXQgc2NvcGU6IFZhcmlhYmxlU2NvcGU7XG4gICAgICBsZXQgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5O1xuICAgICAgXG4gICAgICBpZiAoaXNSb290U2VsZWN0b3IpIHtcbiAgICAgICAgc2NvcGUgPSBjcmVhdGVHbG9iYWxTY29wZSgpO1xuICAgICAgICBzcGVjaWZpY2l0eSA9IHsgaW5saW5lOiAwLCBpZDogMCwgY2xhc3M6IDAsIGVsZW1lbnQ6IDAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc0NvbXBsZXgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXJzZWQucGFyZW50KSB7XG4gICAgICAgICAgc2NvcGUgPSBjcmVhdGVTZWxlY3RvclNjb3BlKHNlbGVjdG9yLCBwYXJzZWQucGFyZW50LnR5cGUpO1xuICAgICAgICAgIHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RvclR5cGUgPSBzZWxlY3Rvci5zdGFydHNXaXRoKCcuJykgPyAnY2xhc3MnIDogJ2VsZW1lbnQnO1xuICAgICAgICAgIHNjb3BlID0gY3JlYXRlU2VsZWN0b3JTY29wZShzZWxlY3Rvciwgc2VsZWN0b3JUeXBlKTtcbiAgICAgICAgICBzcGVjaWZpY2l0eSA9IGNhbGN1bGF0ZVNlbGVjdG9yU3BlY2lmaWNpdHkoc2VsZWN0b3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgIGlmICghaXNDc3NWYXJpYWJsZShkZWNsLnByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB2YXJEZWY6IFZhcmlhYmxlRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBkZWNsLnByb3AsXG4gICAgICAgICAgdmFsdWU6IGRlY2wudmFsdWUsXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgc3BlY2lmaWNpdHksXG4gICAgICAgICAgc291cmNlT3JkZXI6ICsrc291cmNlT3JkZXIsXG4gICAgICAgICAgdmFyaWFudHM6IGFkZGl0aW9uYWxWYXJpYW50c1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YXJpYWJsZVJlZ2lzdHJ5LnJlZ2lzdGVyKHZhckRlZik7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZWdpc3RlcmVkIENTUyB2YXJpYWJsZTogJHtkZWNsLnByb3B9ID0gJHtkZWNsLnZhbHVlfSAoc2NvcGU6ICR7c2NvcGUudHlwZX0pYCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURlY2xhcmF0aW9uVmFsdWUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eSxcbiAgICB2YXJpYW50czogc3RyaW5nW11cbiAgKTogeyByZXNvbHZlZFZhbHVlOiBzdHJpbmc7IGhhc1VucmVzb2x2ZWQ6IGJvb2xlYW4gfSB7XG4gICAgaWYgKCFpc1ZhckV4cHJlc3Npb24odmFsdWUpKSB7XG4gICAgICByZXR1cm4geyByZXNvbHZlZFZhbHVlOiB2YWx1ZSwgaGFzVW5yZXNvbHZlZDogZmFsc2UgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY29udGV4dDogUmVzb2x1dGlvbkNvbnRleHQgPSB7XG4gICAgICBzZWxlY3RvcixcbiAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgdmFyaWFudHNcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFyaWFibGVSZWdpc3RyeS5yZXNvbHZlVmFsdWUodmFsdWUsIGNvbnRleHQpO1xuICAgIHJldHVybiB7IHJlc29sdmVkVmFsdWU6IHJlc3VsdC52YWx1ZSwgaGFzVW5yZXNvbHZlZDogcmVzdWx0Lmhhc1VucmVzb2x2ZWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERlY2xhcmF0aW9ucyhcbiAgICBkZWNsYXJhdGlvbnM6IENTU1Byb3BlcnR5W10sXG4gICAgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5LFxuICAgIHNvdXJjZU9yZGVyOiBudW1iZXIsXG4gICAgc2VsZWN0b3I6IHN0cmluZyA9ICcnLFxuICAgIHZhcmlhbnRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IHtcbiAgICB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdO1xuICAgIGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47XG4gICAgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgY29udmVyc2lvblJlc3VsdHM6IEFycmF5PHtcbiAgICAgIGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTtcbiAgICAgIGNvbnZlcnRlZDogYm9vbGVhbjtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHJlc29sdmVkVmFsdWU/OiBzdHJpbmc7XG4gICAgfT4gPSBbXTtcbiAgICBjb25zdCBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlVG9Db252ZXJ0ID0gdGhpcy5yZXNvbHZlRGVjbGFyYXRpb25WYWx1ZShcbiAgICAgICAgZGVjbC52YWx1ZSxcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgICB2YXJpYW50c1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKHZhbHVlVG9Db252ZXJ0Lmhhc1VucmVzb2x2ZWQpIHtcbiAgICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgZGVjbGFyYXRpb246IGRlY2wsXG4gICAgICAgICAgY29udmVydGVkOiBmYWxzZSxcbiAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZWRWYWx1ZTogdmFsdWVUb0NvbnZlcnQucmVzb2x2ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2goYENvdWxkIG5vdCBmdWxseSByZXNvbHZlIHZhcigpIGluOiAke2RlY2wucHJvcGVydHl9OiAke2RlY2wudmFsdWV9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXBwZXIuY29udmVydFByb3BlcnR5KGRlY2wucHJvcGVydHksIHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWUpO1xuICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsLFxuICAgICAgICBjb252ZXJ0ZWQ6ICFyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQuY2xhc3NOYW1lICE9PSBudWxsLFxuICAgICAgICBjbGFzc05hbWU6IHJlc3VsdC5jbGFzc05hbWUsXG4gICAgICAgIHJlc29sdmVkVmFsdWU6IHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5za2lwcGVkICYmIHJlc3VsdC5yZWFzb24pIHtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2gocmVzdWx0LnJlYXNvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdID0gY29udmVyc2lvblJlc3VsdHNcbiAgICAgIC5maWx0ZXIociA9PiByLmNvbnZlcnRlZCAmJiByLmNsYXNzTmFtZSlcbiAgICAgIC5tYXAociA9PiAoe1xuICAgICAgICB2YWx1ZTogci5jbGFzc05hbWUhLFxuICAgICAgICB2YXJpYW50czogW10sXG4gICAgICAgIGNzc1Byb3BlcnR5OiByLmRlY2xhcmF0aW9uLnByb3BlcnR5LFxuICAgICAgICBzcGVjaWZpY2l0eSxcbiAgICAgICAgc291cmNlT3JkZXJcbiAgICAgIH0pKTtcblxuICAgIHJldHVybiB7IHV0aWxpdGllcywgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2ltcGxlUnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGVzOiBDU1NSdWxlW107IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT5bXTsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMoc2VsZWN0b3IpO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkU2VsZWN0b3JzID0gcGFyc2VkU2VsZWN0b3JzLmZpbHRlcihzID0+ICFzLmlzQ29tcGxleCAmJiBzLmJhc2VDbGFzcyk7XG4gICAgXG4gICAgaWYgKHZhbGlkU2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjc3NSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvblJlc3VsdHM6IEFycmF5PHsgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5OyBjb252ZXJ0ZWQ6IGJvb2xlYW47IGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDsgcmVzb2x2ZWRWYWx1ZT86IHN0cmluZyB9PltdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgdmFsaWRTZWxlY3RvcnMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU9yZGVyID0gdGhpcy5nZXROZXh0U291cmNlT3JkZXIoKTtcbiAgICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlU2VsZWN0b3JTcGVjaWZpY2l0eShzZWxlY3Rvcik7XG4gICAgICBjb25zdCBwc2V1ZG9Db3VudCA9IChwYXJzZWQucHNldWRvcyB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgc3BlY2lmaWNpdHlXaXRoUHNldWRvID0ge1xuICAgICAgICBpbmxpbmU6IHNwZWNpZmljaXR5LmlubGluZSxcbiAgICAgICAgaWQ6IHNwZWNpZmljaXR5LmlkLFxuICAgICAgICBjbGFzczogc3BlY2lmaWNpdHkuY2xhc3MgKyBwc2V1ZG9Db3VudCxcbiAgICAgICAgZWxlbWVudDogc3BlY2lmaWNpdHkuZWxlbWVudFxuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcHNldWRvVmFyaWFudHMgPSBwYXJzZWQucHNldWRvcyB8fCBbXTtcbiAgICAgIGNvbnN0IGFsbFZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi5wc2V1ZG9WYXJpYW50cywgLi4uYWRkaXRpb25hbFZhcmlhbnRzXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgc3BlY2lmaWNpdHlXaXRoUHNldWRvLFxuICAgICAgICBzb3VyY2VPcmRlcixcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGFsbFZhcmlhbnRzXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCB1dGlsaXRpZXNGb3JTZWxlY3RvciA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICB2YXJpYW50czogYWxsVmFyaWFudHNcbiAgICAgIH0pKTtcblxuICAgICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc0ZvclNlbGVjdG9yKTtcblxuICAgICAgY29uc3QgYWxsRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVyc2lvblJlc3VsdHMuZXZlcnkociA9PiByLmNvbnZlcnRlZCk7XG4gICAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgICBjb25zdCBjc3NSdWxlOiBDU1NSdWxlID0ge1xuICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgIGNsYXNzTmFtZTogcGFyc2VkLmJhc2VDbGFzcyxcbiAgICAgICAgZGVjbGFyYXRpb25zLFxuICAgICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgICB1dGlsaXRpZXM6IHV0aWxpdGllc0ZvclNlbGVjdG9yLFxuICAgICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgZnVsbHlDb252ZXJ0ZWQ6IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcGFydGlhbENvbnZlcnNpb246IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgJiYgIWFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0Rlc2NlbmRhbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBjc3NSdWxlcy5wdXNoKGNzc1J1bGUpO1xuICAgICAgYWxsQ29udmVyc2lvblJlc3VsdHMucHVzaChjb252ZXJzaW9uUmVzdWx0cyk7XG4gICAgICBhbGxDb252ZXJzaW9uV2FybmluZ3MucHVzaCguLi5jb252ZXJzaW9uV2FybmluZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNzc1J1bGVzLCBjb252ZXJzaW9uUmVzdWx0czogYWxsQ29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5nczogYWxsQ29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEZXNjZW5kYW50UnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGU6IENTU1J1bGU7IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gfSB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcnVsZS5zZWxlY3RvcjtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgXG4gICAgaWYgKHBhcnNlZC5pc0NvbXBsZXggfHwgIXBhcnNlZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNsLnZhbHVlLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eTogZGVjbC5wcm9wLFxuICAgICAgICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlT3JkZXIgPSB0aGlzLmdldE5leHRTb3VyY2VPcmRlcigpO1xuICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBzcGVjaWZpY2l0eSxcbiAgICAgIHNvdXJjZU9yZGVyLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBhZGRpdGlvbmFsVmFyaWFudHNcbiAgICApO1xuICAgIFxuICAgIGNvbnN0IHV0aWxpdGllc1dpdGhWYXJpYW50cyA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgLi4udSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc1dpdGhWYXJpYW50cyk7XG5cbiAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFyc2VkLnBhcmVudC50eXBlID09PSAnY2xhc3MnID8gcGFyc2VkLnBhcmVudC5uYW1lIDogJyc7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHBhcnNlZC50YXJnZXQudHlwZSA9PT0gJ2NsYXNzJyA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCA6IHBhcnNlZC50YXJnZXQubmFtZTtcblxuICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNXaXRoVmFyaWFudHMsXG4gICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgaXNEZXNjZW5kYW50OiB0cnVlLFxuICAgICAgcGFyZW50U2VsZWN0b3I6IHBhcnNlZC5wYXJlbnQsXG4gICAgICB0YXJnZXRTZWxlY3RvcjogcGFyc2VkLnRhcmdldFxuICAgIH07XG5cbiAgICByZXR1cm4geyBjc3NSdWxlLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZShjc3M6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q1NTUGFyc2VSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0U291cmNlT3JkZXIoKTtcbiAgICBjb25zdCBydWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290ID0gYXdhaXQgcG9zdGNzcygpLnByb2Nlc3MoY3NzLCB7XG4gICAgICAgIHBhcnNlcjogc2FmZVBhcnNlcixcbiAgICAgICAgZnJvbTogZmlsZVBhdGhcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5yb290KTtcblxuICAgICAgdGhpcy5jb2xsZWN0VmFyaWFibGVzKHJvb3QsIFtdKTtcblxuICAgICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICAgIGlmIChhdFJ1bGUubmFtZSAhPT0gJ21lZGlhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhUmVzdWx0ID0gcHJvY2Vzc01lZGlhUXVlcnkoYXRSdWxlLnBhcmFtcywgdGhpcy5icmVha3BvaW50cyk7XG5cbiAgICAgICAgaWYgKG1lZGlhUmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1lZGlhUmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZCBtZWRpYSBxdWVyeTogJHthdFJ1bGUucGFyYW1zfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVWYXJpYW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNvbGxlY3RWYXJpYWJsZXMoYXRSdWxlLCBbcmVzcG9uc2l2ZVZhcmlhbnRdKTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRSdWxlczogUnVsZVtdID0gW107XG4gICAgICAgIGF0UnVsZS53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgICAgICBuZXN0ZWRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgbmVzdGVkUnVsZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdGhpcy5wcm9jZXNzRGVzY2VuZGFudFJ1bGUocnVsZSwgW3Jlc3BvbnNpdmVWYXJpYW50XSk7XG4gICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBkZXNjZW5kYW50IHJ1bGUgJHtydWxlLnNlbGVjdG9yfSBpbiBAbWVkaWEg4oaSICR7cmVzcG9uc2l2ZVZhcmlhbnR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjciBvZiBkZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wucHJvcCA9PT0gY3IuZGVjbGFyYXRpb24ucHJvcGVydHkgJiYgZGVjbC52YWx1ZSA9PT0gY3IuZGVjbGFyYXRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFBhcnRpYWwgY29udmVyc2lvbiBvZiBkZXNjZW5kYW50IHJ1bGUgaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaW1wbGVSZXN1bHQgPSB0aGlzLnByb2Nlc3NTaW1wbGVSdWxlKHJ1bGUsIFtyZXNwb25zaXZlVmFyaWFudF0pO1xuICAgICAgICAgIGlmIChzaW1wbGVSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNzc1J1bGVzKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgaWYgKGFueUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgICAgICBpZiAoYWxsRnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBydWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIHJ1bGUgLiR7Y2xhc3NOYW1lc30gaW4gQG1lZGlhIChtaW4td2lkdGgpIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFNraXBwZWQgcnVsZSBpbiBAbWVkaWE6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZW1wdHkgQG1lZGlhIHJ1bGVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRSZXN1bHQgPSB0aGlzLnByb2Nlc3NEZXNjZW5kYW50UnVsZShydWxlKTtcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICBydWxlcy5wdXNoKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZSk7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCguLi5kZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0LmNzc1J1bGUuZnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZGVzY2VuZGFudCBydWxlICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgZGVzY2VuZGFudCBydWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbXBsZVJlc3VsdCA9IHRoaXMucHJvY2Vzc1NpbXBsZVJ1bGUocnVsZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXNpbXBsZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHJ1bGUuc2VsZWN0b3IpO1xuICAgICAgICAgIGlmIChwYXJzZWQuaXNDb21wbGV4KSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHBhcnNlZC5yZWFzb24gfHwgYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VNdWx0aXBsZVNlbGVjdG9ycyhydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbXBsZXggPSBwYXJzZWRTZWxlY3RvcnMuZXZlcnkocyA9PiBzLmlzQ29tcGxleCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChhbGxDb21wbGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYXNvbnMgPSBwYXJzZWRTZWxlY3RvcnMubWFwKHMgPT4gcy5yZWFzb24pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCguLi5yZWFzb25zIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXMucHVzaCguLi5zaW1wbGVSZXN1bHQuY3NzUnVsZXMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAoYW55Q29udmVydGVkKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgIGlmIChhbGxGdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgcnVsZSAuJHtjbGFzc05hbWVzfSAoYWxsIGRlY2xhcmF0aW9ucyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgcnVsZWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW5EZWxldGUgPSByb290Lm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGNvbnN0IG5ld0NzcyA9IHJvb3QudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3NzOiBuZXdDc3MsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICBjYW5EZWxldGUsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIENTUyAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENTUyBwYXJzaW5nIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUludGVybmFsU3R5bGUoaHRtbDogc3RyaW5nKTogeyBcbiAgICBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IHN0eWxlczogQXJyYXk8eyBjb250ZW50OiBzdHJpbmc7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XG4gICAgbGV0IG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHN0eWxlUmVnZXguZXhlYyhodG1sKSkgIT09IG51bGwpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHtcbiAgICAgICAgY29udGVudDogbWF0Y2hbMV0udHJpbSgpLFxuICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0eWxlcywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlSW50ZXJuYWxDU1MoaHRtbDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIHJ1bGVzOiBDU1NSdWxlW107XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBhbGxSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG1vZGlmaWVkSHRtbCA9IGh0bWw7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB0aGlzLnBhcnNlSW50ZXJuYWxTdHlsZShodG1sKTtcblxuICAgIGZvciAobGV0IGkgPSBzdHlsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzW2ldO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlKHN0eWxlLmNvbnRlbnQsIGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIGFsbFJ1bGVzLnB1c2goLi4ucmVzdWx0LnJ1bGVzKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaCguLi5yZXN1bHQud2FybmluZ3MpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5jYW5EZWxldGUgfHwgcmVzdWx0LmNzcy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpICsgbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IG1vZGlmaWVkSHRtbC5zbGljZSgwLCBzdHlsZS5zdGFydCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgICAgY29uc3QgdGFnU3RhcnQgPSBodG1sLnNsaWNlKHN0eWxlLnN0YXJ0KS5tYXRjaCgvPHN0eWxlW14+XSo+Lyk/LlswXSB8fCAnPHN0eWxlPic7XG4gICAgICAgICAgICBjb25zdCB0YWdFbmQgPSAnPC9zdHlsZT4nO1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gYmVmb3JlICsgdGFnU3RhcnQgKyAnXFxuJyArIHJlc3VsdC5jc3MgKyAnXFxuJyArIHRhZ0VuZCArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZSBibG9jazogJHtlcnJvcn1gKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaChgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIHN0eWxlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBtb2RpZmllZEh0bWwsXG4gICAgICBydWxlczogYWxsUnVsZXMsXG4gICAgICBoYXNDaGFuZ2VzLFxuICAgICAgd2FybmluZ3M6IGFsbFdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RJbXBvcnRQYXRocyhjb2RlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnRcXHMrWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXTs/L2c7XG4gICAgbGV0IG1hdGNoO1xuICAgIFxuICAgIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlUmVnZXggPSAvcmVxdWlyZVxccypcXChcXHMqWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXVxccypcXCkvZztcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29kZSkpICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnRzO1xuICB9XG59Il19
515
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLG1GQU00QztBQUM1QywrREFNa0M7QUFDbEMseUVBS3VDO0FBRXZDLCtEQVNrQztBQTBDbEMsTUFBYSxTQUFTO0lBTXBCLFlBQVksTUFBc0IsRUFBRSxPQUFtRDtRQUgvRSx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFJckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxJQUFBLGlEQUE0QixFQUFDLE9BQU8sQ0FBQztZQUN2QyxDQUFDLENBQUMsSUFBQSxtQ0FBYyxHQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksbUNBQWdCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLElBQW1CLEVBQ25CLHFCQUErQixFQUFFO1FBRWpDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixNQUFNLGNBQWMsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDO1lBRTVDLElBQUksS0FBb0IsQ0FBQztZ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LENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLDRDQUE0QyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQWhwQkQsOEJBZ3BCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwb3N0Y3NzLCB7IFJvb3QsIFJ1bGUsIERlY2xhcmF0aW9uLCBBdFJ1bGUgfSBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBzYWZlUGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2FmZS1wYXJzZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRNYXBwZXIsIENTU1Byb3BlcnR5IH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBcbiAgQnJlYWtwb2ludCwgXG4gIGdldEJyZWFrcG9pbnRzLCBcbiAgcmVzb2x2ZUJyZWFrcG9pbnRzRnJvbUNvbmZpZyxcbiAgcHJvY2Vzc01lZGlhUXVlcnkgXG59IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmltcG9ydCB7XG4gIHByb2Nlc3NQc2V1ZG9TZWxlY3RvcixcbiAgcGFyc2VNdWx0aXBsZVNlbGVjdG9ycyxcbiAgUGFyc2VkU2VsZWN0b3Jcbn0gZnJvbSAnLi91dGlscy9wc2V1ZG9TZWxlY3RvclJlc29sdmVyJztcbmltcG9ydCB7XG4gIHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yLFxuICBwcm9jZXNzRGVzY2VuZGFudFNlbGVjdG9yLFxuICBEZXNjZW5kYW50U2VsZWN0b3IsXG4gIFNlbGVjdG9yUGFydCxcbiAgaXNIdG1sRWxlbWVudFxufSBmcm9tICcuL3V0aWxzL2Rlc2NlbmRhbnRTZWxlY3RvclJlc29sdmVyJztcbmltcG9ydCB7XG4gIGFzc2VtYmxlVXRpbGl0eSxcbiAgYXNzZW1ibGVVdGlsaXRpZXMsXG4gIE1lcmdlZFV0aWxpdHksXG4gIG1lcmdlVXRpbGl0aWVzLFxuICBub3JtYWxpemVWYXJpYW50T3JkZXJcbn0gZnJvbSAnLi91dGlscy92YXJpYW50QXNzZW1ibGVyJztcbmltcG9ydCB7XG4gIFNwZWNpZmljaXR5LFxuICBjYWxjdWxhdGVTZWxlY3RvclNwZWNpZmljaXR5LFxuICBjYWxjdWxhdGVEZXNjZW5kYW50U3BlY2lmaWNpdHksXG4gIFpFUk9fU1BFQ0lGSUNJVFlcbn0gZnJvbSAnLi91dGlscy9zcGVjaWZpY2l0eUNhbGN1bGF0b3InO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlGb3JVdGlsaXR5IH0gZnJvbSAnLi91dGlscy9wcm9wZXJ0eU1hcHBlcic7XG5pbXBvcnQge1xuICBWYXJpYWJsZVJlZ2lzdHJ5LFxuICBWYXJpYWJsZURlZmluaXRpb24sXG4gIFZhcmlhYmxlU2NvcGUsXG4gIFJlc29sdXRpb25Db250ZXh0LFxuICBpc0Nzc1ZhcmlhYmxlLFxuICBpc1ZhckV4cHJlc3Npb24sXG4gIGNyZWF0ZUdsb2JhbFNjb3BlLFxuICBjcmVhdGVTZWxlY3RvclNjb3BlXG59IGZyb20gJy4vdXRpbHMvdmFyaWFibGVSZWdpc3RyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXRpbGl0eVdpdGhWYXJpYW50IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgdmFyaWFudHM6IHN0cmluZ1tdO1xuICBjc3NQcm9wZXJ0eTogc3RyaW5nO1xuICBzcGVjaWZpY2l0eTogU3BlY2lmaWNpdHk7XG4gIHNvdXJjZU9yZGVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0b3JUYXJnZXQge1xuICB0eXBlOiAnY2xhc3MnIHwgJ2VsZW1lbnQnO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUnVsZSB7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBkZWNsYXJhdGlvbnM6IENTU1Byb3BlcnR5W107XG4gIGNvbnZlcnRlZENsYXNzZXM6IHN0cmluZ1tdO1xuICB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdO1xuICBza2lwcGVkOiBib29sZWFuO1xuICBmdWxseUNvbnZlcnRlZDogYm9vbGVhbjtcbiAgcGFydGlhbENvbnZlcnNpb246IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbiAgaXNEZXNjZW5kYW50OiBib29sZWFuO1xuICBwYXJlbnRTZWxlY3Rvcj86IFNlbGVjdG9yVGFyZ2V0O1xuICB0YXJnZXRTZWxlY3Rvcj86IFNlbGVjdG9yVGFyZ2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTU1BhcnNlUmVzdWx0IHtcbiAgY3NzOiBzdHJpbmc7XG4gIHJ1bGVzOiBDU1NSdWxlW107XG4gIGhhc0NoYW5nZXM6IGJvb2xlYW47XG4gIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgd2FybmluZ3M6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTU1VzYWdlTWFwIHtcbiAgW2NsYXNzTmFtZTogc3RyaW5nXTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBDU1NQYXJzZXIge1xuICBwcml2YXRlIG1hcHBlcjogVGFpbHdpbmRNYXBwZXI7XG4gIHByaXZhdGUgYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRbXTtcbiAgcHJpdmF0ZSBzb3VyY2VPcmRlckNvdW50ZXI6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgdmFyaWFibGVSZWdpc3RyeTogVmFyaWFibGVSZWdpc3RyeTtcblxuICBjb25zdHJ1Y3RvcihtYXBwZXI6IFRhaWx3aW5kTWFwcGVyLCBzY3JlZW5zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4pIHtcbiAgICB0aGlzLm1hcHBlciA9IG1hcHBlcjtcbiAgICB0aGlzLmJyZWFrcG9pbnRzID0gc2NyZWVucyBcbiAgICAgID8gcmVzb2x2ZUJyZWFrcG9pbnRzRnJvbUNvbmZpZyhzY3JlZW5zKSBcbiAgICAgIDogZ2V0QnJlYWtwb2ludHMoKTtcbiAgICB0aGlzLnZhcmlhYmxlUmVnaXN0cnkgPSBuZXcgVmFyaWFibGVSZWdpc3RyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFNvdXJjZU9yZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc291cmNlT3JkZXJDb3VudGVyID0gMDtcbiAgICB0aGlzLnZhcmlhYmxlUmVnaXN0cnkuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmV4dFNvdXJjZU9yZGVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICsrdGhpcy5zb3VyY2VPcmRlckNvdW50ZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RWYXJpYWJsZXMoXG4gICAgbm9kZTogUm9vdCB8IEF0UnVsZSxcbiAgICBhZGRpdGlvbmFsVmFyaWFudHM6IHN0cmluZ1tdID0gW11cbiAgKTogdm9pZCB7XG4gICAgbGV0IHNvdXJjZU9yZGVyID0gMDtcbiAgICBcbiAgICBub2RlLndhbGtSdWxlcygocnVsZSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgICAgY29uc3QgaXNSb290U2VsZWN0b3IgPSBzZWxlY3RvciA9PT0gJzpyb290JztcbiAgICAgIFxuICAgICAgbGV0IHNjb3BlOiBWYXJpYWJsZVNjb3BlO1xuICAgICAgbGV0IHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eTtcbiAgICAgIFxuICAgICAgaWYgKGlzUm9vdFNlbGVjdG9yKSB7XG4gICAgICAgIHNjb3BlID0gY3JlYXRlR2xvYmFsU2NvcGUoKTtcbiAgICAgICAgc3BlY2lmaWNpdHkgPSB7IGlubGluZTogMCwgaWQ6IDAsIGNsYXNzOiAwLCBlbGVtZW50OiAwIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIGlmIChwYXJzZWQuaXNDb21wbGV4KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocGFyc2VkLnBhcmVudCkge1xuICAgICAgICAgIHNjb3BlID0gY3JlYXRlU2VsZWN0b3JTY29wZShzZWxlY3RvciwgcGFyc2VkLnBhcmVudC50eXBlKTtcbiAgICAgICAgICBzcGVjaWZpY2l0eSA9IGNhbGN1bGF0ZURlc2NlbmRhbnRTcGVjaWZpY2l0eShcbiAgICAgICAgICAgIHBhcnNlZC5wYXJlbnQudHlwZSxcbiAgICAgICAgICAgIHBhcnNlZC5wYXJlbnQubmFtZSxcbiAgICAgICAgICAgIHBhcnNlZC50YXJnZXQudHlwZSxcbiAgICAgICAgICAgIHBhcnNlZC50YXJnZXQubmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0b3JUeXBlID0gc2VsZWN0b3Iuc3RhcnRzV2l0aCgnLicpID8gJ2NsYXNzJyA6ICdlbGVtZW50JztcbiAgICAgICAgICBzY29wZSA9IGNyZWF0ZVNlbGVjdG9yU2NvcGUoc2VsZWN0b3IsIHNlbGVjdG9yVHlwZSk7XG4gICAgICAgICAgc3BlY2lmaWNpdHkgPSBjYWxjdWxhdGVTZWxlY3RvclNwZWNpZmljaXR5KHNlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICBpZiAoIWlzQ3NzVmFyaWFibGUoZGVjbC5wcm9wKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdmFyRGVmOiBWYXJpYWJsZURlZmluaXRpb24gPSB7XG4gICAgICAgICAgbmFtZTogZGVjbC5wcm9wLFxuICAgICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlLFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIHNwZWNpZmljaXR5LFxuICAgICAgICAgIHNvdXJjZU9yZGVyOiArK3NvdXJjZU9yZGVyLFxuICAgICAgICAgIHZhcmlhbnRzOiBhZGRpdGlvbmFsVmFyaWFudHNcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudmFyaWFibGVSZWdpc3RyeS5yZWdpc3Rlcih2YXJEZWYpO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVnaXN0ZXJlZCBDU1MgdmFyaWFibGU6ICR7ZGVjbC5wcm9wfSA9ICR7ZGVjbC52YWx1ZX0gKHNjb3BlOiAke3Njb3BlLnR5cGV9KWApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEZWNsYXJhdGlvblZhbHVlKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICBzcGVjaWZpY2l0eTogU3BlY2lmaWNpdHksXG4gICAgdmFyaWFudHM6IHN0cmluZ1tdXG4gICk6IHsgcmVzb2x2ZWRWYWx1ZTogc3RyaW5nOyBoYXNVbnJlc29sdmVkOiBib29sZWFuIH0ge1xuICAgIGlmICghaXNWYXJFeHByZXNzaW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHsgcmVzb2x2ZWRWYWx1ZTogdmFsdWUsIGhhc1VucmVzb2x2ZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGNvbnRleHQ6IFJlc29sdXRpb25Db250ZXh0ID0ge1xuICAgICAgc2VsZWN0b3IsXG4gICAgICBzcGVjaWZpY2l0eSxcbiAgICAgIHZhcmlhbnRzXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhcmlhYmxlUmVnaXN0cnkucmVzb2x2ZVZhbHVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4geyByZXNvbHZlZFZhbHVlOiByZXN1bHQudmFsdWUsIGhhc1VucmVzb2x2ZWQ6IHJlc3VsdC5oYXNVbnJlc29sdmVkIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdLFxuICAgIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eSxcbiAgICBzb3VyY2VPcmRlcjogbnVtYmVyLFxuICAgIHNlbGVjdG9yOiBzdHJpbmcgPSAnJyxcbiAgICB2YXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7XG4gICAgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXTtcbiAgICBjb252ZXJzaW9uUmVzdWx0czogQXJyYXk8eyBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7IGNvbnZlcnRlZDogYm9vbGVhbjsgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsOyByZXNvbHZlZFZhbHVlPzogc3RyaW5nIH0+O1xuICAgIGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7XG4gICAgICBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7XG4gICAgICBjb252ZXJ0ZWQ6IGJvb2xlYW47XG4gICAgICBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICByZXNvbHZlZFZhbHVlPzogc3RyaW5nO1xuICAgIH0+ID0gW107XG4gICAgY29uc3QgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZGVjbGFyYXRpb25zLmZvckVhY2goZGVjbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVRvQ29udmVydCA9IHRoaXMucmVzb2x2ZURlY2xhcmF0aW9uVmFsdWUoXG4gICAgICAgIGRlY2wudmFsdWUsXG4gICAgICAgIHNlbGVjdG9yLFxuICAgICAgICBzcGVjaWZpY2l0eSxcbiAgICAgICAgdmFyaWFudHNcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGxldCBjb252ZXJ0ZWRJblRoaXNCbG9jayA9IGZhbHNlO1xuICAgICAgXG4gICAgICBpZiAodmFsdWVUb0NvbnZlcnQuaGFzVW5yZXNvbHZlZCkge1xuICAgICAgICBjb25zdCBtdWx0aVJlc3VsdCA9IHRoaXMubWFwcGVyLmNvbnZlcnRQcm9wZXJ0eVdpdGhNdWx0aXBsZShkZWNsLnByb3BlcnR5LCB2YWx1ZVRvQ29udmVydC5yZXNvbHZlZFZhbHVlIHx8IGRlY2wudmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKG11bHRpUmVzdWx0LmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG11bHRpUmVzdWx0LmNsYXNzZXMuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb252ZXJzaW9uUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgZGVjbGFyYXRpb246IGRlY2wsXG4gICAgICAgICAgICAgIGNvbnZlcnRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlOiB2YWx1ZVRvQ29udmVydC5yZXNvbHZlZFZhbHVlIHx8IGRlY2wudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG11bHRpUmVzdWx0Lndhcm5pbmdzLmZvckVhY2godyA9PiBjb252ZXJzaW9uV2FybmluZ3MucHVzaCh3KSk7XG4gICAgICAgICAgY29udmVydGVkSW5UaGlzQmxvY2sgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoIWNvbnZlcnRlZEluVGhpc0Jsb2NrKSB7XG4gICAgICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbCxcbiAgICAgICAgICAgIGNvbnZlcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgICAgICAgICByZXNvbHZlZFZhbHVlOiB2YWx1ZVRvQ29udmVydC5yZXNvbHZlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2goYENvdWxkIG5vdCBmdWxseSByZXNvbHZlIHZhcigpIGluOiAke2RlY2wucHJvcGVydHl9OiAke2RlY2wudmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBtdWx0aVJlc3VsdCA9IHRoaXMubWFwcGVyLmNvbnZlcnRQcm9wZXJ0eVdpdGhNdWx0aXBsZShkZWNsLnByb3BlcnR5LCB2YWx1ZVRvQ29udmVydC5yZXNvbHZlZFZhbHVlKTtcbiAgICAgIFxuICAgICAgaWYgKG11bHRpUmVzdWx0LmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBtdWx0aVJlc3VsdC5jbGFzc2VzLmZvckVhY2goKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnZlcnNpb25SZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgZGVjbGFyYXRpb246IGRlY2wsXG4gICAgICAgICAgICBjb252ZXJ0ZWQ6IHRydWUsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICByZXNvbHZlZFZhbHVlOiB2YWx1ZVRvQ29udmVydC5yZXNvbHZlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtdWx0aVJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKHcgPT4gY29udmVyc2lvbldhcm5pbmdzLnB1c2godykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXBwZXIuY29udmVydFByb3BlcnR5KGRlY2wucHJvcGVydHksIHZhbHVlVG9Db252ZXJ0LnJlc29sdmVkVmFsdWUpO1xuICAgICAgICBjb252ZXJzaW9uUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbCxcbiAgICAgICAgICBjb252ZXJ0ZWQ6ICFyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQuY2xhc3NOYW1lICE9PSBudWxsLFxuICAgICAgICAgIGNsYXNzTmFtZTogcmVzdWx0LmNsYXNzTmFtZSxcbiAgICAgICAgICByZXNvbHZlZFZhbHVlOiB2YWx1ZVRvQ29udmVydC5yZXNvbHZlZFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzdWx0LnNraXBwZWQgJiYgcmVzdWx0LnJlYXNvbikge1xuICAgICAgICAgIGNvbnZlcnNpb25XYXJuaW5ncy5wdXNoKHJlc3VsdC5yZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdID0gY29udmVyc2lvblJlc3VsdHNcbiAgICAgIC5maWx0ZXIociA9PiByLmNvbnZlcnRlZCAmJiByLmNsYXNzTmFtZSlcbiAgICAgIC5tYXAociA9PiAoe1xuICAgICAgICB2YWx1ZTogci5jbGFzc05hbWUhLFxuICAgICAgICB2YXJpYW50czogW10sXG4gICAgICAgIGNzc1Byb3BlcnR5OiByLmRlY2xhcmF0aW9uLnByb3BlcnR5LFxuICAgICAgICBzcGVjaWZpY2l0eSxcbiAgICAgICAgc291cmNlT3JkZXJcbiAgICAgIH0pKTtcblxuICAgIHJldHVybiB7IHV0aWxpdGllcywgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2ltcGxlUnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGVzOiBDU1NSdWxlW107IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT5bXTsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMoc2VsZWN0b3IpO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkU2VsZWN0b3JzID0gcGFyc2VkU2VsZWN0b3JzLmZpbHRlcihzID0+ICFzLmlzQ29tcGxleCAmJiBzLmJhc2VDbGFzcyk7XG4gICAgXG4gICAgaWYgKHZhbGlkU2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjc3NSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvblJlc3VsdHM6IEFycmF5PHsgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5OyBjb252ZXJ0ZWQ6IGJvb2xlYW47IGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDsgcmVzb2x2ZWRWYWx1ZT86IHN0cmluZyB9PltdID0gW107XG4gICAgY29uc3QgYWxsQ29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgdmFsaWRTZWxlY3RvcnMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU9yZGVyID0gdGhpcy5nZXROZXh0U291cmNlT3JkZXIoKTtcbiAgICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlU2VsZWN0b3JTcGVjaWZpY2l0eShzZWxlY3Rvcik7XG4gICAgICBjb25zdCBwc2V1ZG9Db3VudCA9IChwYXJzZWQucHNldWRvcyB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgc3BlY2lmaWNpdHlXaXRoUHNldWRvID0ge1xuICAgICAgICBpbmxpbmU6IHNwZWNpZmljaXR5LmlubGluZSxcbiAgICAgICAgaWQ6IHNwZWNpZmljaXR5LmlkLFxuICAgICAgICBjbGFzczogc3BlY2lmaWNpdHkuY2xhc3MgKyBwc2V1ZG9Db3VudCxcbiAgICAgICAgZWxlbWVudDogc3BlY2lmaWNpdHkuZWxlbWVudFxuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcHNldWRvVmFyaWFudHMgPSBwYXJzZWQucHNldWRvcyB8fCBbXTtcbiAgICAgIGNvbnN0IGFsbFZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi5wc2V1ZG9WYXJpYW50cywgLi4uYWRkaXRpb25hbFZhcmlhbnRzXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgc3BlY2lmaWNpdHlXaXRoUHNldWRvLFxuICAgICAgICBzb3VyY2VPcmRlcixcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGFsbFZhcmlhbnRzXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCB1dGlsaXRpZXNGb3JTZWxlY3RvciA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICB2YXJpYW50czogYWxsVmFyaWFudHNcbiAgICAgIH0pKTtcblxuICAgICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc0ZvclNlbGVjdG9yKTtcblxuICAgICAgY29uc3QgYWxsRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVyc2lvblJlc3VsdHMuZXZlcnkociA9PiByLmNvbnZlcnRlZCk7XG4gICAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgICBjb25zdCBjc3NSdWxlOiBDU1NSdWxlID0ge1xuICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgIGNsYXNzTmFtZTogcGFyc2VkLmJhc2VDbGFzcyxcbiAgICAgICAgZGVjbGFyYXRpb25zLFxuICAgICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgICB1dGlsaXRpZXM6IHV0aWxpdGllc0ZvclNlbGVjdG9yLFxuICAgICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgZnVsbHlDb252ZXJ0ZWQ6IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcGFydGlhbENvbnZlcnNpb246IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgJiYgIWFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0Rlc2NlbmRhbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBjc3NSdWxlcy5wdXNoKGNzc1J1bGUpO1xuICAgICAgYWxsQ29udmVyc2lvblJlc3VsdHMucHVzaChjb252ZXJzaW9uUmVzdWx0cyk7XG4gICAgICBhbGxDb252ZXJzaW9uV2FybmluZ3MucHVzaCguLi5jb252ZXJzaW9uV2FybmluZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNzc1J1bGVzLCBjb252ZXJzaW9uUmVzdWx0czogYWxsQ29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5nczogYWxsQ29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEZXNjZW5kYW50UnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGU6IENTU1J1bGU7IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7IHJlc29sdmVkVmFsdWU/OiBzdHJpbmcgfT47IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gfSB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcnVsZS5zZWxlY3RvcjtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgXG4gICAgaWYgKHBhcnNlZC5pc0NvbXBsZXggfHwgIXBhcnNlZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNsLnZhbHVlLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBwcm9wZXJ0eTogZGVjbC5wcm9wLFxuICAgICAgICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlT3JkZXIgPSB0aGlzLmdldE5leHRTb3VyY2VPcmRlcigpO1xuICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gY2FsY3VsYXRlRGVzY2VuZGFudFNwZWNpZmljaXR5KFxuICAgICAgcGFyc2VkLnBhcmVudC50eXBlLFxuICAgICAgcGFyc2VkLnBhcmVudC5uYW1lLFxuICAgICAgcGFyc2VkLnRhcmdldC50eXBlLFxuICAgICAgcGFyc2VkLnRhcmdldC5uYW1lXG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXRpbGl0aWVzLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH0gPSB0aGlzLmNvbnZlcnREZWNsYXJhdGlvbnMoXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBzcGVjaWZpY2l0eSxcbiAgICAgIHNvdXJjZU9yZGVyLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBhZGRpdGlvbmFsVmFyaWFudHNcbiAgICApO1xuICAgIFxuICAgIGNvbnN0IHV0aWxpdGllc1dpdGhWYXJpYW50cyA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgLi4udSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllc1dpdGhWYXJpYW50cyk7XG5cbiAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICBjb25zdCBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID0gY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gcGFyc2VkLnBhcmVudC50eXBlID09PSAnY2xhc3MnID8gcGFyc2VkLnBhcmVudC5uYW1lIDogJyc7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHBhcnNlZC50YXJnZXQudHlwZSA9PT0gJ2NsYXNzJyA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCA6IHBhcnNlZC50YXJnZXQubmFtZTtcblxuICAgIGNvbnN0IGNzc1J1bGU6IENTU1J1bGUgPSB7XG4gICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNXaXRoVmFyaWFudHMsXG4gICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICBwYXJ0aWFsQ29udmVyc2lvbjogc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCAmJiAhYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkLFxuICAgICAgaXNEZXNjZW5kYW50OiB0cnVlLFxuICAgICAgcGFyZW50U2VsZWN0b3I6IHBhcnNlZC5wYXJlbnQsXG4gICAgICB0YXJnZXRTZWxlY3RvcjogcGFyc2VkLnRhcmdldFxuICAgIH07XG5cbiAgICByZXR1cm4geyBjc3NSdWxlLCBjb252ZXJzaW9uUmVzdWx0cywgY29udmVyc2lvbldhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZShjc3M6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q1NTUGFyc2VSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0U291cmNlT3JkZXIoKTtcbiAgICBjb25zdCBydWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290ID0gYXdhaXQgcG9zdGNzcygpLnByb2Nlc3MoY3NzLCB7XG4gICAgICAgIHBhcnNlcjogc2FmZVBhcnNlcixcbiAgICAgICAgZnJvbTogZmlsZVBhdGhcbiAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5yb290KTtcblxuICAgICAgdGhpcy5jb2xsZWN0VmFyaWFibGVzKHJvb3QsIFtdKTtcblxuICAgICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICAgIGlmIChhdFJ1bGUubmFtZSAhPT0gJ21lZGlhJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhUmVzdWx0ID0gcHJvY2Vzc01lZGlhUXVlcnkoYXRSdWxlLnBhcmFtcywgdGhpcy5icmVha3BvaW50cyk7XG5cbiAgICAgICAgaWYgKG1lZGlhUmVzdWx0LnNraXBwZWQpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1lZGlhUmVzdWx0LnJlYXNvbiB8fCBgU2tpcHBlZCBtZWRpYSBxdWVyeTogJHthdFJ1bGUucGFyYW1zfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVWYXJpYW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNvbGxlY3RWYXJpYWJsZXMoYXRSdWxlLCBbcmVzcG9uc2l2ZVZhcmlhbnRdKTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRSdWxlczogUnVsZVtdID0gW107XG4gICAgICAgIGF0UnVsZS53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgICAgICBuZXN0ZWRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgbmVzdGVkUnVsZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdGhpcy5wcm9jZXNzRGVzY2VuZGFudFJ1bGUocnVsZSwgW3Jlc3BvbnNpdmVWYXJpYW50XSk7XG4gICAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBkZXNjZW5kYW50IHJ1bGUgJHtydWxlLnNlbGVjdG9yfSBpbiBAbWVkaWEg4oaSICR7cmVzcG9uc2l2ZVZhcmlhbnR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjciBvZiBkZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wucHJvcCA9PT0gY3IuZGVjbGFyYXRpb24ucHJvcGVydHkgJiYgZGVjbC52YWx1ZSA9PT0gY3IuZGVjbGFyYXRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFBhcnRpYWwgY29udmVyc2lvbiBvZiBkZXNjZW5kYW50IHJ1bGUgaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzaW1wbGVSZXN1bHQgPSB0aGlzLnByb2Nlc3NTaW1wbGVSdWxlKHJ1bGUsIFtyZXNwb25zaXZlVmFyaWFudF0pO1xuICAgICAgICAgIGlmIChzaW1wbGVSZXN1bHQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNzc1J1bGVzKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4uc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgaWYgKGFueUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgICAgICBpZiAoYWxsRnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBydWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZW1vdmVkIHJ1bGUgLiR7Y2xhc3NOYW1lc30gaW4gQG1lZGlhIChtaW4td2lkdGgpIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGNyLmNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gaW4gQG1lZGlhIOKGkiAke3Jlc3BvbnNpdmVWYXJpYW50fWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFNraXBwZWQgcnVsZSBpbiBAbWVkaWE6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZW1wdHkgQG1lZGlhIHJ1bGVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRSZXN1bHQgPSB0aGlzLnByb2Nlc3NEZXNjZW5kYW50UnVsZShydWxlKTtcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQpIHtcbiAgICAgICAgICBydWxlcy5wdXNoKGRlc2NlbmRhbnRSZXN1bHQuY3NzUnVsZSk7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCguLi5kZXNjZW5kYW50UmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC5jc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kYW50UmVzdWx0LmNzc1J1bGUuZnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZGVzY2VuZGFudCBydWxlICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgZGVzY2VuZGFudFJlc3VsdC5jb252ZXJzaW9uUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgZGVzY2VuZGFudCBydWxlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbXBsZVJlc3VsdCA9IHRoaXMucHJvY2Vzc1NpbXBsZVJ1bGUocnVsZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXNpbXBsZVJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHJ1bGUuc2VsZWN0b3IpO1xuICAgICAgICAgIGlmIChwYXJzZWQuaXNDb21wbGV4KSB7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHBhcnNlZC5yZWFzb24gfHwgYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VNdWx0aXBsZVNlbGVjdG9ycyhydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbXBsZXggPSBwYXJzZWRTZWxlY3RvcnMuZXZlcnkocyA9PiBzLmlzQ29tcGxleCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChhbGxDb21wbGV4KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYXNvbnMgPSBwYXJzZWRTZWxlY3RvcnMubWFwKHMgPT4gcy5yZWFzb24pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCguLi5yZWFzb25zIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXMucHVzaCguLi5zaW1wbGVSZXN1bHQuY3NzUnVsZXMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnNpbXBsZVJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAoYW55Q29udmVydGVkKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHNpbXBsZVJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgIGlmIChhbGxGdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzaW1wbGVSZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgcnVsZSAuJHtjbGFzc05hbWVzfSAoYWxsIGRlY2xhcmF0aW9ucyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2Ygc2ltcGxlUmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgcnVsZWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW5EZWxldGUgPSByb290Lm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGNvbnN0IG5ld0NzcyA9IHJvb3QudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3NzOiBuZXdDc3MsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICBjYW5EZWxldGUsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIENTUyAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENTUyBwYXJzaW5nIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUludGVybmFsU3R5bGUoaHRtbDogc3RyaW5nKTogeyBcbiAgICBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IHN0eWxlczogQXJyYXk8eyBjb250ZW50OiBzdHJpbmc7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XG4gICAgbGV0IG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHN0eWxlUmVnZXguZXhlYyhodG1sKSkgIT09IG51bGwpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHtcbiAgICAgICAgY29udGVudDogbWF0Y2hbMV0udHJpbSgpLFxuICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0eWxlcywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlSW50ZXJuYWxDU1MoaHRtbDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIHJ1bGVzOiBDU1NSdWxlW107XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBhbGxSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG1vZGlmaWVkSHRtbCA9IGh0bWw7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB0aGlzLnBhcnNlSW50ZXJuYWxTdHlsZShodG1sKTtcblxuICAgIGZvciAobGV0IGkgPSBzdHlsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzW2ldO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlKHN0eWxlLmNvbnRlbnQsIGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIGFsbFJ1bGVzLnB1c2goLi4ucmVzdWx0LnJ1bGVzKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaCguLi5yZXN1bHQud2FybmluZ3MpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5jYW5EZWxldGUgfHwgcmVzdWx0LmNzcy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpICsgbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IG1vZGlmaWVkSHRtbC5zbGljZSgwLCBzdHlsZS5zdGFydCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgICAgY29uc3QgdGFnU3RhcnQgPSBodG1sLnNsaWNlKHN0eWxlLnN0YXJ0KS5tYXRjaCgvPHN0eWxlW14+XSo+Lyk/LlswXSB8fCAnPHN0eWxlPic7XG4gICAgICAgICAgICBjb25zdCB0YWdFbmQgPSAnPC9zdHlsZT4nO1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gYmVmb3JlICsgdGFnU3RhcnQgKyAnXFxuJyArIHJlc3VsdC5jc3MgKyAnXFxuJyArIHRhZ0VuZCArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZSBibG9jazogJHtlcnJvcn1gKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaChgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIHN0eWxlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBtb2RpZmllZEh0bWwsXG4gICAgICBydWxlczogYWxsUnVsZXMsXG4gICAgICBoYXNDaGFuZ2VzLFxuICAgICAgd2FybmluZ3M6IGFsbFdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RJbXBvcnRQYXRocyhjb2RlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnRcXHMrWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXTs/L2c7XG4gICAgbGV0IG1hdGNoO1xuICAgIFxuICAgIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlUmVnZXggPSAvcmVxdWlyZVxccypcXChcXHMqWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXVxccypcXCkvZztcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29kZSkpICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnRzO1xuICB9XG59Il19
@@ -68,6 +68,13 @@ export declare class TailwindMapper {
68
68
  private convertOpacity;
69
69
  private convertWordBreak;
70
70
  private convertZIndex;
71
+ private convertGridTemplateColumns;
72
+ private convertGridTemplateRows;
73
+ private convertGridColumn;
74
+ private convertGridRow;
75
+ private convertPlaceItems;
76
+ private convertPlaceContent;
77
+ private convertPlaceSelf;
71
78
  convertMultiple(properties: CSSProperty[]): {
72
79
  classes: string[];
73
80
  warnings: string[];