Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/mets.corals.io/wp-content/metras.v32.1/node_modules/postcss-sass/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/mets.corals.io/wp-content/metras.v32.1/node_modules/postcss-sass/parser.js
'use strict';

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var postcss = require('postcss');
var gonzales = require('gonzales-pe');

var DEFAULT_RAWS_ROOT = {
  before: ''
};

var DEFAULT_RAWS_RULE = {
  before: '',
  between: ''
};

var DEFAULT_RAWS_DECL = {
  before: '',
  between: '',
  semicolon: false
};

var DEFAULT_COMMENT_DECL = {
  before: '',
  left: '',
  right: ''
};

var SassParser = function () {
  function SassParser(input) {
    _classCallCheck(this, SassParser);

    this.input = input;
  }

  _createClass(SassParser, [{
    key: 'parse',
    value: function parse() {
      try {
        this.node = gonzales.parse(this.input.css, { syntax: 'sass' });
      } catch (error) {
        throw this.input.error(error.message, error.line, 1);
      }
      this.lines = this.input.css.match(/^.*(\r?\n|$)/gm);
      this.root = this.stylesheet(this.node);
    }
  }, {
    key: 'extractSource',
    value: function extractSource(start, end) {
      var nodeLines = this.lines.slice(start.line - 1, end.line);

      nodeLines[0] = nodeLines[0].substring(start.column - 1);
      var last = nodeLines.length - 1;
      nodeLines[last] = nodeLines[last].substring(0, end.column);

      return nodeLines.join('');
    }
  }, {
    key: 'stylesheet',
    value: function stylesheet(node) {
      var _this = this;

      // Create and set parameters for Root node
      var root = postcss.root();
      root.source = {
        start: node.start,
        end: node.end,
        input: this.input
        // Raws for root node
      };root.raws = {
        semicolon: DEFAULT_RAWS_ROOT.semicolon,
        before: DEFAULT_RAWS_ROOT.before
        // Store spaces before root (if exist)
      };this.raws = {
        before: ''
      };
      node.content.forEach(function (contentNode) {
        return _this.process(contentNode, root);
      });
      return root;
    }
  }, {
    key: 'process',
    value: function process(node, parent) {
      if (this[node.type]) {
        return this[node.type](node, parent) || null;
      } else {
        return null;
      }
    }
  }, {
    key: 'ruleset',
    value: function ruleset(node, parent) {
      var _this2 = this;

      // Loop to find the deepest ruleset node
      this.raws.multiRuleProp = '';

      node.content.forEach(function (contentNode) {
        switch (contentNode.type) {
          case 'block':
            {
              // Create Rule node
              var rule = postcss.rule();
              rule.selector = '';
              // Object to store raws for Rule
              var ruleRaws = {
                before: _this2.raws.before || DEFAULT_RAWS_RULE.before,
                between: DEFAULT_RAWS_RULE.between

                // Variable to store spaces and symbols before declaration property
              };_this2.raws.before = '';
              _this2.raws.comment = false;

              // Look up throw all nodes in current ruleset node
              node.content.filter(function (content) {
                return content.type === 'block';
              }).forEach(function (innerContentNode) {
                return _this2.process(innerContentNode, rule);
              });

              if (rule.nodes.length) {
                // Write selector to Rule
                rule.selector = _this2.extractSource(node.start, contentNode.start).slice(0, -1).replace(/\s+$/, function (spaces) {
                  ruleRaws.between = spaces;
                  return '';
                });
                // Set parameters for Rule node
                rule.parent = parent;
                rule.source = {
                  start: node.start,
                  end: node.end,
                  input: _this2.input
                };
                rule.raws = ruleRaws;
                parent.nodes.push(rule);
              }
              break;
            }
          default:
        }
      });
    }
  }, {
    key: 'block',
    value: function block(node, parent) {
      var _this3 = this;

      // If nested rules exist, wrap current rule in new rule node
      if (this.raws.multiRule) {
        if (this.raws.multiRulePropVariable) {
          this.raws.multiRuleProp = '$' + this.raws.multiRuleProp;
        }
        var multiRule = Object.assign(postcss.rule(), {
          source: {
            start: {
              line: node.start.line - 1,
              column: node.start.column
            },
            end: node.end,
            input: this.input
          },
          raws: {
            before: this.raws.before || DEFAULT_RAWS_RULE.before,
            between: DEFAULT_RAWS_RULE.between
          },
          parent: parent,
          selector: (this.raws.customProperty ? '--' : '') + this.raws.multiRuleProp
        });
        parent.push(multiRule);
        parent = multiRule;
      }

      this.raws.before = '';

      // Looking for declaration node in block node
      node.content.forEach(function (contentNode) {
        return _this3.process(contentNode, parent);
      });
      if (this.raws.multiRule) {
        this.raws.beforeMulti = this.raws.before;
      }
    }
  }, {
    key: 'declaration',
    value: function declaration(node, parent) {
      var _this4 = this;

      var isBlockInside = false;
      // Create Declaration node
      var declarationNode = postcss.decl();
      declarationNode.prop = '';

      // Object to store raws for Declaration
      var declarationRaws = Object.assign(declarationNode.raws, {
        before: this.raws.before || DEFAULT_RAWS_DECL.before,
        between: DEFAULT_RAWS_DECL.between,
        semicolon: DEFAULT_RAWS_DECL.semicolon
      });

      this.raws.property = false;
      this.raws.betweenBefore = false;
      this.raws.comment = false;
      // Looking for property and value node in declaration node
      node.content.forEach(function (contentNode) {
        switch (contentNode.type) {
          case 'customProperty':
            _this4.raws.customProperty = true;
          // fall through
          case 'property':
            {
              /* this.raws.property to detect is property is already defined in current object */
              _this4.raws.property = true;
              _this4.raws.multiRuleProp = contentNode.content[0].content;
              _this4.raws.multiRulePropVariable = contentNode.content[0].type === 'variable';
              _this4.process(contentNode, declarationNode);
              break;
            }
          case 'propertyDelimiter':
            {
              if (_this4.raws.property && !_this4.raws.betweenBefore) {
                /* If property is already defined and there's no ':' before it */
                declarationRaws.between += contentNode.content;
                _this4.raws.multiRuleProp += contentNode.content;
              } else {
                /* If ':' goes before property declaration, like :width 100px */
                _this4.raws.betweenBefore = true;
                declarationRaws.before += contentNode.content;
                _this4.raws.multiRuleProp += contentNode.content;
              }
              break;
            }
          case 'space':
            {
              declarationRaws.between += contentNode.content;
              break;
            }
          case 'value':
            {
              // Look up for a value for current property
              switch (contentNode.content[0].type) {
                case 'block':
                  {
                    isBlockInside = true;
                    // If nested rules exist
                    if (Array.isArray(contentNode.content[0].content)) {
                      _this4.raws.multiRule = true;
                    }
                    _this4.process(contentNode.content[0], parent);
                    break;
                  }
                case 'variable':
                  {
                    declarationNode.value = '$';
                    _this4.process(contentNode, declarationNode);
                    break;
                  }
                case 'color':
                  {
                    declarationNode.value = '#';
                    _this4.process(contentNode, declarationNode);
                    break;
                  }
                case 'number':
                  {
                    if (contentNode.content.length > 1) {
                      declarationNode.value = contentNode.content.join('');
                    } else {
                      _this4.process(contentNode, declarationNode);
                    }
                    break;
                  }
                case 'parentheses':
                  {
                    declarationNode.value = '(';
                    _this4.process(contentNode, declarationNode);
                    break;
                  }
                default:
                  {
                    _this4.process(contentNode, declarationNode);
                  }
              }
              break;
            }
          default:
        }
      });

      if (!isBlockInside) {
        // Set parameters for Declaration node
        declarationNode.source = {
          start: node.start,
          end: node.end,
          input: this.input
        };
        declarationNode.parent = parent;
        parent.nodes.push(declarationNode);
      }

      this.raws.before = '';
      this.raws.customProperty = false;
      this.raws.multiRuleProp = '';
      this.raws.property = false;
    }
  }, {
    key: 'customProperty',
    value: function customProperty(node, parent) {
      this.property(node, parent);
      parent.prop = '--' + parent.prop;
    }
  }, {
    key: 'property',
    value: function property(node, parent) {
      // Set property for Declaration node
      switch (node.content[0].type) {
        case 'variable':
          {
            parent.prop += '$';
            break;
          }
        case 'interpolation':
          {
            this.raws.interpolation = true;
            parent.prop += '#{';
            break;
          }
        default:
      }
      parent.prop += node.content[0].content;
      if (this.raws.interpolation) {
        parent.prop += '}';
        this.raws.interpolation = false;
      }
    }
  }, {
    key: 'value',
    value: function value(node, parent) {
      if (!parent.value) {
        parent.value = '';
      }
      // Set value for Declaration node
      if (node.content.length) {
        node.content.forEach(function (contentNode) {
          switch (contentNode.type) {
            case 'important':
              {
                parent.raws.important = contentNode.content;
                parent.important = true;
                var match = parent.value.match(/^(.*?)(\s*)$/);
                if (match) {
                  parent.raws.important = match[2] + parent.raws.important;
                  parent.value = match[1];
                }
                break;
              }
            case 'parentheses':
              {
                parent.value += contentNode.content.join('') + ')';
                break;
              }
            case 'percentage':
              {
                parent.value += contentNode.content.join('') + '%';
                break;
              }
            default:
              {
                if (contentNode.content.constructor === Array) {
                  parent.value += contentNode.content.join('');
                } else {
                  parent.value += contentNode.content;
                }
              }
          }
        });
      }
    }
  }, {
    key: 'singlelineComment',
    value: function singlelineComment(node, parent) {
      return this.comment(node, parent, true);
    }
  }, {
    key: 'multilineComment',
    value: function multilineComment(node, parent) {
      return this.comment(node, parent, false);
    }
  }, {
    key: 'comment',
    value: function comment(node, parent, inline) {
      // https://github.com/nodesecurity/eslint-plugin-security#detect-unsafe-regex
      // eslint-disable-next-line security/detect-unsafe-regex
      var text = node.content.match(/^(\s*)((?:\S[\s\S]*?)?)(\s*)$/);

      this.raws.comment = true;

      var comment = Object.assign(postcss.comment(), {
        text: text[2],
        raws: {
          before: this.raws.before || DEFAULT_COMMENT_DECL.before,
          left: text[1],
          right: text[3],
          inline: inline
        },
        source: {
          start: {
            line: node.start.line,
            column: node.start.column
          },
          end: node.end,
          input: this.input
        },
        parent: parent
      });

      if (this.raws.beforeMulti) {
        comment.raws.before += this.raws.beforeMulti;
        this.raws.beforeMulti = undefined;
      }

      parent.nodes.push(comment);
      this.raws.before = '';
    }
  }, {
    key: 'space',
    value: function space(node, parent) {
      // Spaces before root and rule
      switch (parent.type) {
        case 'root':
          {
            this.raws.before += node.content;
            break;
          }
        case 'rule':
          {
            if (this.raws.comment) {
              this.raws.before += node.content;
            } else if (this.raws.loop) {
              parent.selector += node.content;
            } else {
              this.raws.before = (this.raws.before || '\n') + node.content;
            }
            break;
          }
        default:
      }
    }
  }, {
    key: 'declarationDelimiter',
    value: function declarationDelimiter(node) {
      this.raws.before += node.content;
    }
  }, {
    key: 'loop',
    value: function loop(node, parent) {
      var _this5 = this;

      var loop = postcss.rule();
      this.raws.comment = false;
      this.raws.multiRule = false;
      this.raws.loop = true;
      loop.selector = '';
      loop.raws = {
        before: this.raws.before || DEFAULT_RAWS_RULE.before,
        between: DEFAULT_RAWS_RULE.between
      };
      if (this.raws.beforeMulti) {
        loop.raws.before += this.raws.beforeMulti;
        this.raws.beforeMulti = undefined;
      }
      node.content.forEach(function (contentNode, i) {
        if (node.content[i + 1] && node.content[i + 1].type === 'block') {
          _this5.raws.loop = false;
        }
        _this5.process(contentNode, loop);
      });
      parent.nodes.push(loop);
      this.raws.loop = false;
    }
  }, {
    key: 'atkeyword',
    value: function atkeyword(node, parent) {
      parent.selector += '@' + node.content;
    }
  }, {
    key: 'operator',
    value: function operator(node, parent) {
      parent.selector += node.content;
    }
  }, {
    key: 'variable',
    value: function variable(node, parent) {
      if (this.raws.loop) {
        parent.selector += '$' + node.content[0].content;
      } else {
        parent.selector += '#' + node.content[0].content;
      }
    }
  }, {
    key: 'ident',
    value: function ident(node, parent) {
      parent.selector += node.content;
    }
  }]);

  return SassParser;
}();

module.exports = SassParser;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci5lczYiXSwibmFtZXMiOlsicG9zdGNzcyIsInJlcXVpcmUiLCJnb256YWxlcyIsIkRFRkFVTFRfUkFXU19ST09UIiwiYmVmb3JlIiwiREVGQVVMVF9SQVdTX1JVTEUiLCJiZXR3ZWVuIiwiREVGQVVMVF9SQVdTX0RFQ0wiLCJzZW1pY29sb24iLCJERUZBVUxUX0NPTU1FTlRfREVDTCIsImxlZnQiLCJyaWdodCIsIlNhc3NQYXJzZXIiLCJpbnB1dCIsIm5vZGUiLCJwYXJzZSIsImNzcyIsInN5bnRheCIsImVycm9yIiwibWVzc2FnZSIsImxpbmUiLCJsaW5lcyIsIm1hdGNoIiwicm9vdCIsInN0eWxlc2hlZXQiLCJzdGFydCIsImVuZCIsIm5vZGVMaW5lcyIsInNsaWNlIiwic3Vic3RyaW5nIiwiY29sdW1uIiwibGFzdCIsImxlbmd0aCIsImpvaW4iLCJzb3VyY2UiLCJyYXdzIiwiY29udGVudCIsImZvckVhY2giLCJwcm9jZXNzIiwiY29udGVudE5vZGUiLCJwYXJlbnQiLCJ0eXBlIiwibXVsdGlSdWxlUHJvcCIsInJ1bGUiLCJzZWxlY3RvciIsInJ1bGVSYXdzIiwiY29tbWVudCIsImZpbHRlciIsImlubmVyQ29udGVudE5vZGUiLCJub2RlcyIsImV4dHJhY3RTb3VyY2UiLCJyZXBsYWNlIiwic3BhY2VzIiwicHVzaCIsIm11bHRpUnVsZSIsIm11bHRpUnVsZVByb3BWYXJpYWJsZSIsIk9iamVjdCIsImFzc2lnbiIsImN1c3RvbVByb3BlcnR5IiwiYmVmb3JlTXVsdGkiLCJpc0Jsb2NrSW5zaWRlIiwiZGVjbGFyYXRpb25Ob2RlIiwiZGVjbCIsInByb3AiLCJkZWNsYXJhdGlvblJhd3MiLCJwcm9wZXJ0eSIsImJldHdlZW5CZWZvcmUiLCJBcnJheSIsImlzQXJyYXkiLCJ2YWx1ZSIsImludGVycG9sYXRpb24iLCJpbXBvcnRhbnQiLCJjb25zdHJ1Y3RvciIsImlubGluZSIsInRleHQiLCJ1bmRlZmluZWQiLCJsb29wIiwiaSIsIm1vZHVsZSIs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LFVBQWpCIiwiZmlsZSI6InBhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHBvc3Rjc3MgPSByZXF1aXJlKCdwb3N0Y3NzJylcbmNvbnN0IGdvbnphbGVzID0gcmVxdWlyZSgnZ29uemFsZXMtcGUnKVxuXG5jb25zdCBERUZBVUxUX1JBV1NfUk9PVCA9IHtcbiAgYmVmb3JlOiAnJ1xufVxuXG5jb25zdCBERUZBVUxUX1JBV1NfUlVMRSA9IHtcbiAgYmVmb3JlOiAnJyxcbiAgYmV0d2VlbjogJydcbn1cblxuY29uc3QgREVGQVVMVF9SQVdTX0RFQ0wgPSB7XG4gIGJlZm9yZTogJycsXG4gIGJldHdlZW46ICcnLFxuICBzZW1pY29sb246IGZhbHNlXG59XG5cbmNvbnN0IERFRkFVTFRfQ09NTUVOVF9ERUNMID0ge1xuICBiZWZvcmU6ICcnLFxuICBsZWZ0OiAnJyxcbiAgcmlnaHQ6ICcnXG59XG5cbmNsYXNzIFNhc3NQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoaW5wdXQpIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXRcbiAgfVxuICBwYXJzZSAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubm9kZSA9IGdvbnphbGVzLnBhcnNlKHRoaXMuaW5wdXQuY3NzLCB7IHN5bnRheDogJ3Nhc3MnIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuaW5wdXQuZXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3IubGluZSwgMSlcbiAgICB9XG4gICAgdGhpcy5saW5lcyA9IHRoaXMuaW5wdXQuY3NzLm1hdGNoKC9eLiooXFxyP1xcbnwkKS9nbSlcbiAgICB0aGlzLnJvb3QgPSB0aGlzLnN0eWxlc2hlZXQodGhpcy5ub2RlKVxuICB9XG4gIGV4dHJhY3RTb3VyY2UgKHN0YXJ0LCBlbmQpIHtcbiAgICBsZXQgbm9kZUxpbmVzID0gdGhpcy5saW5lcy5zbGljZShcbiAgICAgIHN0YXJ0LmxpbmUgLSAxLFxuICAgICAgZW5kLmxpbmVcbiAgICApXG5cbiAgICBub2RlTGluZXNbMF0gPSBub2RlTGluZXNbMF0uc3Vic3RyaW5nKHN0YXJ0LmNvbHVtbiAtIDEpXG4gICAgbGV0IGxhc3QgPSBub2RlTGluZXMubGVuZ3RoIC0gMVxuICAgIG5vZGVMaW5lc1tsYXN0XSA9IG5vZGVMaW5lc1tsYXN0XS5zdWJzdHJpbmcoMCwgZW5kLmNvbHVtbilcblxuICAgIHJldHVybiBub2RlTGluZXMuam9pbignJylcbiAgfVxuICBzdHlsZXNoZWV0IChub2RlKSB7XG4gICAgLy8gQ3JlYXRlIGFuZCBzZXQgcGFyYW1ldGVycyBmb3IgUm9vdCBub2RlXG4gICAgbGV0IHJvb3QgPSBwb3N0Y3NzLnJvb3QoKVxuICAgIHJvb3Quc291cmNlID0ge1xuICAgICAgc3RhcnQ6IG5vZGUuc3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuZW5kLFxuICAgICAgaW5wdXQ6IHRoaXMuaW5wdXRcbiAgICB9XG4gICAgLy8gUmF3cyBmb3Igcm9vdCBub2RlXG4gICAgcm9vdC5yYXdzID0ge1xuICAgICAgc2VtaWNvbG9uOiBERUZBVUxUX1JBV1NfUk9PVC5zZW1pY29sb24sXG4gICAgICBiZWZvcmU6IERFRkFVTFRfUkFXU19ST09ULmJlZm9yZVxuICAgIH1cbiAgICAvLyBTdG9yZSBzcGFjZXMgYmVmb3JlIHJvb3QgKGlmIGV4aXN0KVxuICAgIHRoaXMucmF3cyA9IHtcbiAgICAgIGJlZm9yZTogJydcbiAgICB9XG4gICAgbm9kZS5jb250ZW50LmZvckVhY2goY29udGVudE5vZGUgPT4gdGhpcy5wcm9jZXNzKGNvbnRlbnROb2RlLCByb290KSlcbiAgICByZXR1cm4gcm9vdFxuICB9XG4gIHByb2Nlc3MgKG5vZGUsIHBhcmVudCkge1xuICAgIGlmICh0aGlzW25vZGUudHlwZV0pIHtcbiAgICAgIHJldHVybiB0aGlzW25vZGUudHlwZV0obm9kZSwgcGFyZW50KSB8fCBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG4gIHJ1bGVzZXQgKG5vZGUsIHBhcmVudCkge1xuICAgIC8vIExvb3AgdG8gZmluZCB0aGUgZGVlcGVzdCBydWxlc2V0IG5vZGVcbiAgICB0aGlzLnJhd3MubXVsdGlSdWxlUHJvcCA9ICcnXG5cbiAgICBub2RlLmNvbnRlbnQuZm9yRWFjaChjb250ZW50Tm9kZSA9PiB7XG4gICAgICBzd2l0Y2ggKGNvbnRlbnROb2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYmxvY2snOiB7XG4gICAgICAgICAgLy8gQ3JlYXRlIFJ1bGUgbm9kZVxuICAgICAgICAgIGxldCBydWxlID0gcG9zdGNzcy5ydWxlKClcbiAgICAgICAgICBydWxlLnNlbGVjdG9yID0gJydcbiAgICAgICAgICAvLyBPYmplY3QgdG8gc3RvcmUgcmF3cyBmb3IgUnVsZVxuICAgICAgICAgIGxldCBydWxlUmF3cyA9IHtcbiAgICAgICAgICAgIGJlZm9yZTogdGhpcy5yYXdzLmJlZm9yZSB8fCBERUZBVUxUX1JBV1NfUlVMRS5iZWZvcmUsXG4gICAgICAgICAgICBiZXR3ZWVuOiBERUZBVUxUX1JBV1NfUlVMRS5iZXR3ZWVuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFyaWFibGUgdG8gc3RvcmUgc3BhY2VzIGFuZCBzeW1ib2xzIGJlZm9yZSBkZWNsYXJhdGlvbiBwcm9wZXJ0eVxuICAgICAgICAgIHRoaXMucmF3cy5iZWZvcmUgPSAnJ1xuICAgICAgICAgIHRoaXMucmF3cy5jb21tZW50ID0gZmFsc2VcblxuICAgICAgICAgIC8vIExvb2sgdXAgdGhyb3cgYWxsIG5vZGVzIGluIGN1cnJlbnQgcnVsZXNldCBub2RlXG4gICAgICAgICAgbm9kZS5jb250ZW50XG4gICAgICAgICAgICAuZmlsdGVyKGNvbnRlbnQgPT4gY29udGVudC50eXBlID09PSAnYmxvY2snKVxuICAgICAgICAgICAgLmZvckVhY2goaW5uZXJDb250ZW50Tm9kZSA9PiB0aGlzLnByb2Nlc3MoaW5uZXJDb250ZW50Tm9kZSwgcnVsZSkpXG5cbiAgICAgICAgICBpZiAocnVsZS5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIFdyaXRlIHNlbGVjdG9yIHRvIFJ1bGVcbiAgICAgICAgICAgIHJ1bGUuc2VsZWN0b3IgPSB0aGlzLmV4dHJhY3RTb3VyY2UoXG4gICAgICAgICAgICAgIG5vZGUuc3RhcnQsXG4gICAgICAgICAgICAgIGNvbnRlbnROb2RlLnN0YXJ0XG4gICAgICAgICAgICApLnNsaWNlKDAsIC0xKS5yZXBsYWNlKC9cXHMrJC8sIHNwYWNlcyA9PiB7XG4gICAgICAgICAgICAgIHJ1bGVSYXdzLmJldHdlZW4gPSBzcGFjZXNcbiAgICAgICAgICAgICAgcmV0dXJuICcnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLy8gU2V0IHBhcmFtZXRlcnMgZm9yIFJ1bGUgbm9kZVxuICAgICAgICAgICAgcnVsZS5wYXJlbnQgPSBwYXJlbnRcbiAgICAgICAgICAgIHJ1bGUuc291cmNlID0ge1xuICAgICAgICAgICAgICBzdGFydDogbm9kZS5zdGFydCxcbiAgICAgICAgICAgICAgZW5kOiBub2RlLmVuZCxcbiAgICAgICAgICAgICAgaW5wdXQ6IHRoaXMuaW5wdXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bGUucmF3cyA9IHJ1bGVSYXdzXG4gICAgICAgICAgICBwYXJlbnQubm9kZXMucHVzaChydWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBibG9jayAobm9kZSwgcGFyZW50KSB7XG4gICAgLy8gSWYgbmVzdGVkIHJ1bGVzIGV4aXN0LCB3cmFwIGN1cnJlbnQgcnVsZSBpbiBuZXcgcnVsZSBub2RlXG4gICAgaWYgKHRoaXMucmF3cy5tdWx0aVJ1bGUpIHtcbiAgICAgIGlmICh0aGlzLnJhd3MubXVsdGlSdWxlUHJvcFZhcmlhYmxlKSB7XG4gICAgICAgIHRoaXMucmF3cy5tdWx0aVJ1bGVQcm9wID0gYCQkeyB0aGlzLnJhd3MubXVsdGlSdWxlUHJvcCB9YFxuICAgICAgfVxuICAgICAgbGV0IG11bHRpUnVsZSA9IE9iamVjdC5hc3NpZ24ocG9zdGNzcy5ydWxlKCksIHtcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGxpbmU6IG5vZGUuc3RhcnQubGluZSAtIDEsXG4gICAgICAgICAgICBjb2x1bW46IG5vZGUuc3RhcnQuY29sdW1uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmQ6IG5vZGUuZW5kLFxuICAgICAgICAgIGlucHV0OiB0aGlzLmlucHV0XG4gICAgICAgIH0sXG4gICAgICAgIHJhd3M6IHtcbiAgICAgICAgICBiZWZvcmU6IHRoaXMucmF3cy5iZWZvcmUgfHwgREVGQVVMVF9SQVdTX1JVTEUuYmVmb3JlLFxuICAgICAgICAgIGJldHdlZW46IERFRkFVTFRfUkFXU19SVUxFLmJldHdlZW5cbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBzZWxlY3RvcjogKHRoaXMucmF3cy5jdXN0b21Qcm9wZXJ0eSA/ICctLScgOiAnJykgKyB0aGlzLnJhd3MubXVsdGlSdWxlUHJvcFxuICAgICAgfSlcbiAgICAgIHBhcmVudC5wdXNoKG11bHRpUnVsZSlcbiAgICAgIHBhcmVudCA9IG11bHRpUnVsZVxuICAgIH1cblxuICAgIHRoaXMucmF3cy5iZWZvcmUgPSAnJ1xuXG4gICAgLy8gTG9va2luZyBmb3IgZGVjbGFyYXRpb24gbm9kZSBpbiBibG9jayBub2RlXG4gICAgbm9kZS5jb250ZW50LmZvckVhY2goY29udGVudE5vZGUgPT4gdGhpcy5wcm9jZXNzKGNvbnRlbnROb2RlLCBwYXJlbnQpKVxuICAgIGlmICh0aGlzLnJhd3MubXVsdGlSdWxlKSB7XG4gICAgICB0aGlzLnJhd3MuYmVmb3JlTXVsdGkgPSB0aGlzLnJhd3MuYmVmb3JlXG4gICAgfVxuICB9XG4gIGRlY2xhcmF0aW9uIChub2RlLCBwYXJlbnQpIHtcbiAgICBsZXQgaXNCbG9ja0luc2lkZSA9IGZhbHNlXG4gICAgLy8gQ3JlYXRlIERlY2xhcmF0aW9uIG5vZGVcbiAgICBsZXQgZGVjbGFyYXRpb25Ob2RlID0gcG9zdGNzcy5kZWNsKClcbiAgICBkZWNsYXJhdGlvbk5vZGUucHJvcCA9ICcnXG5cbiAgICAvLyBPYmplY3QgdG8gc3RvcmUgcmF3cyBmb3IgRGVjbGFyYXRpb25cbiAgICBsZXQgZGVjbGFyYXRpb25SYXdzID0gT2JqZWN0LmFzc2lnbihkZWNsYXJhdGlvbk5vZGUucmF3cywge1xuICAgICAgYmVmb3JlOiB0aGlzLnJhd3MuYmVmb3JlIHx8IERFRkFVTFRfUkFXU19ERUNMLmJlZm9yZSxcbiAgICAgIGJldHdlZW46IERFRkFVTFRfUkFXU19ERUNMLmJldHdlZW4sXG4gICAgICBzZW1pY29sb246IERFRkFVTFRfUkFXU19ERUNMLnNlbWljb2xvblxuICAgIH0pXG5cbiAgICB0aGlzLnJhd3MucHJvcGVydHkgPSBmYWxzZVxuICAgIHRoaXMucmF3cy5iZXR3ZWVuQmVmb3JlID0gZmFsc2VcbiAgICB0aGlzLnJhd3MuY29tbWVudCA9IGZhbHNlXG4gICAgLy8gTG9va2luZyBmb3IgcHJvcGVydHkgYW5kIHZhbHVlIG5vZGUgaW4gZGVjbGFyYXRpb24gbm9kZVxuICAgIG5vZGUuY29udGVudC5mb3JFYWNoKGNvbnRlbnROb2RlID0+IHtcbiAgICAgIHN3aXRjaCAoY29udGVudE5vZGUudHlwZSkge1xuICAgICAgICBjYXNlICdjdXN0b21Qcm9wZXJ0eSc6XG4gICAgICAgICAgdGhpcy5yYXdzLmN1c3RvbVByb3BlcnR5ID0gdHJ1ZVxuICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaFxuICAgICAgICBjYXNlICdwcm9wZXJ0eSc6IHtcbiAgICAgICAgICAvKiB0aGlzLnJhd3MucHJvcGVydHkgdG8gZGV0ZWN0IGlzIHByb3BlcnR5IGlzIGFscmVhZHkgZGVmaW5lZCBpbiBjdXJyZW50IG9iamVjdCAqL1xuICAgICAgICAgIHRoaXMucmF3cy5wcm9wZXJ0eSA9IHRydWVcbiAgICAgICAgICB0aGlzLnJhd3MubXVsdGlSdWxlUHJvcCA9IGNvbnRlbnROb2RlLmNvbnRlbnRbMF0uY29udGVudFxuICAgICAgICAgIHRoaXMucmF3cy5tdWx0aVJ1bGVQcm9wVmFyaWFibGUgPSBjb250ZW50Tm9kZS5jb250ZW50WzBdLnR5cGUgPT09ICd2YXJpYWJsZSdcbiAgICAgICAgICB0aGlzLnByb2Nlc3MoY29udGVudE5vZGUsIGRlY2xhcmF0aW9uTm9kZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3Byb3BlcnR5RGVsaW1pdGVyJzoge1xuICAgICAgICAgIGlmICh0aGlzLnJhd3MucHJvcGVydHkgJiYgIXRoaXMucmF3cy5iZXR3ZWVuQmVmb3JlKSB7XG4gICAgICAgICAgICAvKiBJZiBwcm9wZXJ0eSBpcyBhbHJlYWR5IGRlZmluZWQgYW5kIHRoZXJlJ3Mgbm8gJzonIGJlZm9yZSBpdCAqL1xuICAgICAgICAgICAgZGVjbGFyYXRpb25SYXdzLmJldHdlZW4gKz0gY29udGVudE5vZGUuY29udGVudFxuICAgICAgICAgICAgdGhpcy5yYXdzLm11bHRpUnVsZVByb3AgKz0gY29udGVudE5vZGUuY29udGVudFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBJZiAnOicgZ29lcyBiZWZvcmUgcHJvcGVydHkgZGVjbGFyYXRpb24sIGxpa2UgOndpZHRoIDEwMHB4ICovXG4gICAgICAgICAgICB0aGlzLnJhd3MuYmV0d2VlbkJlZm9yZSA9IHRydWVcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uUmF3cy5iZWZvcmUgKz0gY29udGVudE5vZGUuY29udGVudFxuICAgICAgICAgICAgdGhpcy5yYXdzLm11bHRpUnVsZVByb3AgKz0gY29udGVudE5vZGUuY29udGVudFxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3NwYWNlJzoge1xuICAgICAgICAgIGRlY2xhcmF0aW9uUmF3cy5iZXR3ZWVuICs9IGNvbnRlbnROb2RlLmNvbnRlbnRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgICAgIC8vIExvb2sgdXAgZm9yIGEgdmFsdWUgZm9yIGN1cnJlbnQgcHJvcGVydHlcbiAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnROb2RlLmNvbnRlbnRbMF0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYmxvY2snOiB7XG4gICAgICAgICAgICAgIGlzQmxvY2tJbnNpZGUgPSB0cnVlXG4gICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBydWxlcyBleGlzdFxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50Tm9kZS5jb250ZW50WzBdLmNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXdzLm11bHRpUnVsZSA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoY29udGVudE5vZGUuY29udGVudFswXSwgcGFyZW50KVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAndmFyaWFibGUnOiB7XG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uTm9kZS52YWx1ZSA9ICckJ1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoY29udGVudE5vZGUsIGRlY2xhcmF0aW9uTm9kZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzoge1xuICAgICAgICAgICAgICBkZWNsYXJhdGlvbk5vZGUudmFsdWUgPSAnIydcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGNvbnRlbnROb2RlLCBkZWNsYXJhdGlvbk5vZGUpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50Tm9kZS5jb250ZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbk5vZGUudmFsdWUgPSBjb250ZW50Tm9kZS5jb250ZW50LmpvaW4oJycpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGNvbnRlbnROb2RlLCBkZWNsYXJhdGlvbk5vZGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3BhcmVudGhlc2VzJzoge1xuICAgICAgICAgICAgICBkZWNsYXJhdGlvbk5vZGUudmFsdWUgPSAnKCdcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGNvbnRlbnROb2RlLCBkZWNsYXJhdGlvbk5vZGUpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyhjb250ZW50Tm9kZSwgZGVjbGFyYXRpb25Ob2RlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmICghaXNCbG9ja0luc2lkZSkge1xuICAgICAgLy8gU2V0IHBhcmFtZXRlcnMgZm9yIERlY2xhcmF0aW9uIG5vZGVcbiAgICAgIGRlY2xhcmF0aW9uTm9kZS5zb3VyY2UgPSB7XG4gICAgICAgIHN0YXJ0OiBub2RlLnN0YXJ0LFxuICAgICAgICBlbmQ6IG5vZGUuZW5kLFxuICAgICAgICBpbnB1dDogdGhpcy5pbnB1dFxuICAgICAgfVxuICAgICAgZGVjbGFyYXRpb25Ob2RlLnBhcmVudCA9IHBhcmVudFxuICAgICAgcGFyZW50Lm5vZGVzLnB1c2goZGVjbGFyYXRpb25Ob2RlKVxuICAgIH1cblxuICAgIHRoaXMucmF3cy5iZWZvcmUgPSAnJ1xuICAgIHRoaXMucmF3cy5jdXN0b21Qcm9wZXJ0eSA9IGZhbHNlXG4gICAgdGhpcy5yYXdzLm11bHRpUnVsZVByb3AgPSAnJ1xuICAgIHRoaXMucmF3cy5wcm9wZXJ0eSA9IGZhbHNlXG4gIH1cbiAgY3VzdG9tUHJvcGVydHkgKG5vZGUsIHBhcmVudCkge1xuICAgIHRoaXMucHJvcGVydHkobm9kZSwgcGFyZW50KVxuICAgIHBhcmVudC5wcm9wID0gYC0tJHsgcGFyZW50LnByb3AgfWBcbiAgfVxuICBwcm9wZXJ0eSAobm9kZSwgcGFyZW50KSB7XG4gICAgLy8gU2V0IHByb3BlcnR5IGZvciBEZWNsYXJhdGlvbiBub2RlXG4gICAgc3dpdGNoIChub2RlLmNvbnRlbnRbMF0udHlwZSkge1xuICAgICAgY2FzZSAndmFyaWFibGUnOiB7XG4gICAgICAgIHBhcmVudC5wcm9wICs9ICckJ1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnaW50ZXJwb2xhdGlvbic6IHtcbiAgICAgICAgdGhpcy5yYXdzLmludGVycG9sYXRpb24gPSB0cnVlXG4gICAgICAgIHBhcmVudC5wcm9wICs9ICcjeydcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICAgIHBhcmVudC5wcm9wICs9IG5vZGUuY29udGVudFswXS5jb250ZW50XG4gICAgaWYgKHRoaXMucmF3cy5pbnRlcnBvbGF0aW9uKSB7XG4gICAgICBwYXJlbnQucHJvcCArPSAnfSdcbiAgICAgIHRoaXMucmF3cy5pbnRlcnBvbGF0aW9uID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgdmFsdWUgKG5vZGUsIHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LnZhbHVlKSB7XG4gICAgICBwYXJlbnQudmFsdWUgPSAnJ1xuICAgIH1cbiAgICAvLyBTZXQgdmFsdWUgZm9yIERlY2xhcmF0aW9uIG5vZGVcbiAgICBpZiAobm9kZS5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgbm9kZS5jb250ZW50LmZvckVhY2goY29udGVudE5vZGUgPT4ge1xuICAgICAgICBzd2l0Y2ggKGNvbnRlbnROb2RlLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdpbXBvcnRhbnQnOiB7XG4gICAgICAgICAgICBwYXJlbnQucmF3cy5pbXBvcnRhbnQgPSBjb250ZW50Tm9kZS5jb250ZW50XG4gICAgICAgICAgICBwYXJlbnQuaW1wb3J0YW50ID0gdHJ1ZVxuICAgICAgICAgICAgbGV0IG1hdGNoID0gcGFyZW50LnZhbHVlLm1hdGNoKC9eKC4qPykoXFxzKikkLylcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICBwYXJlbnQucmF3cy5pbXBvcnRhbnQgPSBtYXRjaFsyXSArIHBhcmVudC5yYXdzLmltcG9ydGFudFxuICAgICAgICAgICAgICBwYXJlbnQudmFsdWUgPSBtYXRjaFsxXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncGFyZW50aGVzZXMnOiB7XG4gICAgICAgICAgICBwYXJlbnQudmFsdWUgKz0gY29udGVudE5vZGUuY29udGVudC5qb2luKCcnKSArICcpJ1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6IHtcbiAgICAgICAgICAgIHBhcmVudC52YWx1ZSArPSBjb250ZW50Tm9kZS5jb250ZW50LmpvaW4oJycpICsgJyUnXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBpZiAoY29udGVudE5vZGUuY29udGVudC5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgcGFyZW50LnZhbHVlICs9IGNvbnRlbnROb2RlLmNvbnRlbnQuam9pbignJylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcmVudC52YWx1ZSArPSBjb250ZW50Tm9kZS5jb250ZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBzaW5nbGVsaW5lQ29tbWVudCAobm9kZSwgcGFyZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudChub2RlLCBwYXJlbnQsIHRydWUpXG4gIH1cbiAgbXVsdGlsaW5lQ29tbWVudCAobm9kZSwgcGFyZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudChub2RlLCBwYXJlbnQsIGZhbHNlKVxuICB9XG4gIGNvbW1lbnQgKG5vZGUsIHBhcmVudCwgaW5saW5lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVzZWN1cml0eS9lc2xpbnQtcGx1Z2luLXNlY3VyaXR5I2RldGVjdC11bnNhZmUtcmVnZXhcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LXVuc2FmZS1yZWdleFxuICAgIGxldCB0ZXh0ID0gbm9kZS5jb250ZW50Lm1hdGNoKC9eKFxccyopKCg/OlxcU1tcXHNcXFNdKj8pPykoXFxzKikkLylcblxuICAgIHRoaXMucmF3cy5jb21tZW50ID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnQgPSBPYmplY3QuYXNzaWduKHBvc3Rjc3MuY29tbWVudCgpLCB7XG4gICAgICB0ZXh0OiB0ZXh0WzJdLFxuICAgICAgcmF3czoge1xuICAgICAgICBiZWZvcmU6IHRoaXMucmF3cy5iZWZvcmUgfHwgREVGQVVMVF9DT01NRU5UX0RFQ0wuYmVmb3JlLFxuICAgICAgICBsZWZ0OiB0ZXh0WzFdLFxuICAgICAgICByaWdodDogdGV4dFszXSxcbiAgICAgICAgaW5saW5lXG4gICAgICB9LFxuICAgICAgc291cmNlOiB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgbGluZTogbm9kZS5zdGFydC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogbm9kZS5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiBub2RlLmVuZCxcbiAgICAgICAgaW5wdXQ6IHRoaXMuaW5wdXRcbiAgICAgIH0sXG4gICAgICBwYXJlbnRcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucmF3cy5iZWZvcmVNdWx0aSkge1xuICAgICAgY29tbWVudC5yYXdzLmJlZm9yZSArPSB0aGlzLnJhd3MuYmVmb3JlTXVsdGlcbiAgICAgIHRoaXMucmF3cy5iZWZvcmVNdWx0aSA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHBhcmVudC5ub2Rlcy5wdXNoKGNvbW1lbnQpXG4gICAgdGhpcy5yYXdzLmJlZm9yZSA9ICcnXG4gIH1cbiAgc3BhY2UgKG5vZGUsIHBhcmVudCkge1xuICAgIC8vIFNwYWNlcyBiZWZvcmUgcm9vdCBhbmQgcnVsZVxuICAgIHN3aXRjaCAocGFyZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3Jvb3QnOiB7XG4gICAgICAgIHRoaXMucmF3cy5iZWZvcmUgKz0gbm9kZS5jb250ZW50XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdydWxlJzoge1xuICAgICAgICBpZiAodGhpcy5yYXdzLmNvbW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnJhd3MuYmVmb3JlICs9IG5vZGUuY29udGVudFxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmF3cy5sb29wKSB7XG4gICAgICAgICAgcGFyZW50LnNlbGVjdG9yICs9IG5vZGUuY29udGVudFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmF3cy5iZWZvcmUgPSAodGhpcy5yYXdzLmJlZm9yZSB8fCAnXFxuJykgKyBub2RlLmNvbnRlbnRcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cbiAgZGVjbGFyYXRpb25EZWxpbWl0ZXIgKG5vZGUpIHtcbiAgICB0aGlzLnJhd3MuYmVmb3JlICs9IG5vZGUuY29udGVudFxuICB9XG4gIGxvb3AgKG5vZGUsIHBhcmVudCkge1xuICAgIGxldCBsb29wID0gcG9zdGNzcy5ydWxlKClcbiAgICB0aGlzLnJhd3MuY29tbWVudCA9IGZhbHNlXG4gICAgdGhpcy5yYXdzLm11bHRpUnVsZSA9IGZhbHNlXG4gICAgdGhpcy5yYXdzLmxvb3AgPSB0cnVlXG4gICAgbG9vcC5zZWxlY3RvciA9ICcnXG4gICAgbG9vcC5yYXdzID0ge1xuICAgICAgYmVmb3JlOiB0aGlzLnJhd3MuYmVmb3JlIHx8IERFRkFVTFRfUkFXU19SVUxFLmJlZm9yZSxcbiAgICAgIGJldHdlZW46IERFRkFVTFRfUkFXU19SVUxFLmJldHdlZW5cbiAgICB9XG4gICAgaWYgKHRoaXMucmF3cy5iZWZvcmVNdWx0aSkge1xuICAgICAgbG9vcC5yYXdzLmJlZm9yZSArPSB0aGlzLnJhd3MuYmVmb3JlTXVsdGlcbiAgICAgIHRoaXMucmF3cy5iZWZvcmVNdWx0aSA9IHVuZGVmaW5lZFxuICAgIH1cbiAgICBub2RlLmNvbnRlbnQuZm9yRWFjaCgoY29udGVudE5vZGUsIGkpID0+IHtcbiAgICAgIGlmIChub2RlLmNvbnRlbnRbaSArIDFdICYmIG5vZGUuY29udGVudFtpICsgMV0udHlwZSA9PT0gJ2Jsb2NrJykge1xuICAgICAgICB0aGlzLnJhd3MubG9vcCA9IGZhbHNlXG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3MoY29udGVudE5vZGUsIGxvb3ApXG4gICAgfSlcbiAgICBwYXJlbnQubm9kZXMucHVzaChsb29wKVxuICAgIHRoaXMucmF3cy5sb29wID0gZmFsc2VcbiAgfVxuICBhdGtleXdvcmQgKG5vZGUsIHBhcmVudCkge1xuICAgIHBhcmVudC5zZWxlY3RvciArPSBgQCR7IG5vZGUuY29udGVudCB9YFxuICB9XG4gIG9wZXJhdG9yIChub2RlLCBwYXJlbnQpIHtcbiAgICBwYXJlbnQuc2VsZWN0b3IgKz0gbm9kZS5jb250ZW50XG4gIH1cbiAgdmFyaWFibGUgKG5vZGUsIHBhcmVudCkge1xuICAgIGlmICh0aGlzLnJhd3MubG9vcCkge1xuICAgICAgcGFyZW50LnNlbGVjdG9yICs9IGAkJHsgbm9kZS5jb250ZW50WzBdLmNvbnRlbnQgfWBcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50LnNlbGVjdG9yICs9IGAjJHsgbm9kZS5jb250ZW50WzBdLmNvbnRlbnQgfWBcbiAgICB9XG4gIH1cbiAgaWRlbnQgKG5vZGUsIHBhcmVudCkge1xuICAgIHBhcmVudC5zZWxlY3RvciArPSBub2RlLmNvbnRlbnRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNhc3NQYXJzZXJcbiJdfQ==

Spamworldpro Mini