@expressive/mvc 0.60.3 → 0.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -146,4 +146,4 @@ class Context {
146
146
  export {
147
147
  Context
148
148
  };
149
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGFkZExpc3RlbmVyIH0gZnJvbSAnLi9jb250cm9sJztcbmltcG9ydCB7IGV2ZW50LCBNb2RlbCwgUEFSRU5ULCB1aWQgfSBmcm9tICcuL21vZGVsJztcblxuY29uc3QgTE9PS1VQID0gbmV3IFdlYWtNYXA8TW9kZWwsIENvbnRleHQgfCAoKGdvdDogQ29udGV4dCkgPT4gdm9pZClbXT4oKTtcbmNvbnN0IEtFWVMgPSBuZXcgTWFwPHN5bWJvbCB8IE1vZGVsLlR5cGUsIHN5bWJvbD4oKTtcblxuZnVuY3Rpb24ga2V5KFQ6IE1vZGVsLlR5cGUgfCBzeW1ib2wsIHVwc3RyZWFtPzogYm9vbGVhbik6IHN5bWJvbCB7XG4gIGxldCBLID0gS0VZUy5nZXQoVCk7XG5cbiAgaWYoIUspXG4gICAgS0VZUy5zZXQoVCwgSyA9IFN5bWJvbChcbiAgICAgIHR5cGVvZiBUID09IFwic3ltYm9sXCIgPyBcImdldCBcIiArIFQuZGVzY3JpcHRpb24gOiBTdHJpbmcoVClcbiAgICApKTtcbiAgXG4gIHJldHVybiB1cHN0cmVhbSA/IGtleShLKSA6IEs7XG59XG5cbmZ1bmN0aW9uIGtleXMoZnJvbTogTW9kZWwuVHlwZSwgdXBzdHJlYW0/OiBib29sZWFuKXtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3ltYm9sPigpO1xuXG4gIGRvIHtcbiAgICBrZXlzLmFkZChrZXkoZnJvbSwgdXBzdHJlYW0pKTtcbiAgfVxuICB3aGlsZSgoZnJvbSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihmcm9tKSkgIT09IE1vZGVsKTtcblxuICByZXR1cm4ga2V5cztcbn1cblxuZGVjbGFyZSBuYW1lc3BhY2UgQ29udGV4dCB7XG4gIHR5cGUgTXVsdGlwbGU8VCBleHRlbmRzIE1vZGVsPiA9IHtcbiAgICBba2V5OiBzdHJpbmcgfCBudW1iZXJdOiBNb2RlbC5Jbml0PFQ+IHwgVDtcbiAgfTtcblxuICB0eXBlIEFjY2VwdDxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPSBUIHwgTW9kZWwuSW5pdDxUPiB8IE11bHRpcGxlPFQ+O1xuXG4gIHR5cGUgRXhwZWN0PFQgZXh0ZW5kcyBNb2RlbCA9IE1vZGVsPiA9IChtb2RlbDogVCkgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuaW50ZXJmYWNlIENvbnRleHQge1xuICBba2V5OiBzeW1ib2xdOiBNb2RlbCB8IENvbnRleHQuRXhwZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbn1cblxuY2xhc3MgQ29udGV4dCB7XG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihvbjogTW9kZWwsIGNhbGxiYWNrOiAoKGdvdDogQ29udGV4dCkgPT4gdm9pZCkpOiB2b2lkO1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4ob246IE1vZGVsKTogQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgc3RhdGljIGdldCh7IGlzIH06IE1vZGVsLCBjYWxsYmFjaz86IChnb3Q6IENvbnRleHQpID0+IHZvaWQpe1xuICAgIGNvbnN0IHdhaXRpbmcgPSBMT09LVVAuZ2V0KGlzKTtcblxuICAgIGlmKHdhaXRpbmcgaW5zdGFuY2VvZiBDb250ZXh0KXtcbiAgICAgIGlmKGNhbGxiYWNrKVxuICAgICAgICBjYWxsYmFjayh3YWl0aW5nKTtcblxuICAgICAgcmV0dXJuIHdhaXRpbmc7XG4gICAgfVxuXG4gICAgaWYoY2FsbGJhY2spXG4gICAgICBpZih3YWl0aW5nKSBcbiAgICAgICAgd2FpdGluZy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgXG4gICAgICAgIExPT0tVUC5zZXQoaXMsIFtjYWxsYmFja10pO1xuICB9XG5cbiAgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBsYXllciA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNb2RlbCB8IE1vZGVsLlR5cGU+KCk7XG4gIHByb3RlY3RlZCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0cz86IENvbnRleHQuQWNjZXB0KXtcbiAgICBpZihpbnB1dHMpXG4gICAgICB0aGlzLmluY2x1ZGUoaW5wdXRzKTtcbiAgfVxuXG4gIC8qKiBSdW4gY2FsbGJhY2sgd2hlbiBhIHNwZWNpZmllZCB0eXBlIGlzIHJlZ2lzdGVyZWQgdG8gYSAqKmNoaWxkKiogY29udGV4dC4gKi9cbiAgcHVibGljIGhhczxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrOiAobW9kZWw6IFQpID0+IHZvaWQpe1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXkoVHlwZSwgdHJ1ZSksIHsgdmFsdWU6IGNhbGxiYWNrLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cblxuICAvKiogRmluZCBzcGVjaWZpZWQgdHlwZSByZWdpc3RlcmVkIHRvIGEgcGFyZW50IGNvbnRleHQuIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kLiAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4oVHlwZTogTW9kZWwuVHlwZTxUPiwgcmVxdWlyZTogdHJ1ZSk6IFQ7XG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlPzogYm9vbGVhbik6IFQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlPzogYm9vbGVhbil7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpc1trZXkoVHlwZSldO1xuXG4gICAgaWYocmVzdWx0ID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgZmluZCAke1R5cGV9IGluIGNvbnRleHQsIGJ1dCBtdWx0aXBsZSB3ZXJlIGRlZmluZWQuYCk7XG5cbiAgICBpZihyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG5cbiAgICBpZihyZXF1aXJlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke1R5cGV9IGluIGNvbnRleHQuYCk7XG4gIH1cblxuICBwdWJsaWMgcHVzaChpbnB1dHM/OiBDb250ZXh0LkFjY2VwdCl7XG4gICAgY29uc3QgbmV4dCA9IE9iamVjdC5jcmVhdGUodGhpcykgYXMgdGhpcztcblxuICAgIHRoaXMuY2xlYW51cCA9IG5ldyBTZXQoWygpID0+IG5leHQucG9wKCksIC4uLnRoaXMuY2xlYW51cF0pO1xuXG4gICAgbmV4dC5sYXllciA9IG5ldyBNYXAoKTtcbiAgICBuZXh0LmNsZWFudXAgPSBuZXcgU2V0KCk7XG5cbiAgICBpZihpbnB1dHMpXG4gICAgICBuZXh0LmluY2x1ZGUoaW5wdXRzKTtcblxuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgcHVibGljIHBvcCgpe1xuICAgIGZvcihjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSlcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpW2tleV07XG5cbiAgICB0aGlzLmNsZWFudXAuZm9yRWFjaChjYiA9PiBjYigpKTtcbiAgICB0aGlzLmNsZWFudXAuY2xlYXIoKTtcbiAgICB0aGlzLmxheWVyLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgaW5jbHVkZTxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIGlucHV0czogQ29udGV4dC5BY2NlcHQ8VD4sXG4gICAgZm9yRWFjaD86IENvbnRleHQuRXhwZWN0PFQ+XG4gICl7XG4gICAgY29uc3QgaW5pdCA9IG5ldyBNYXA8TW9kZWwsIGJvb2xlYW4+KCk7XG5cbiAgICBpZih0eXBlb2YgaW5wdXRzID09IFwiZnVuY3Rpb25cIiB8fCBpbnB1dHMgaW5zdGFuY2VvZiBNb2RlbClcbiAgICAgIGlucHV0cyA9IHsgW2ZvckVhY2ggPyAwIDogdGhpcy5sYXllci5zaXplXTogaW5wdXRzIH07XG5cbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goKFtLLCBWXTogW3N0cmluZywgTW9kZWwgfCBNb2RlbC5Jbml0PE1vZGVsPl0pID0+IHtcbiAgICAgIGlmKE1vZGVsLmlzKFYpIHx8IFYgaW5zdGFuY2VvZiBNb2RlbCl7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMubGF5ZXIuZ2V0KEspO1xuICBcbiAgICAgICAgaWYoIWV4aXN0cyl7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFkZChWKTtcbiAgXG4gICAgICAgICAgdGhpcy5sYXllci5zZXQoSywgVik7XG4gICAgICAgICAgaW5pdC5zZXQoaW5zdGFuY2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbnRleHQgbXVzdCBmb3JjZS1yZXNldCBiZWNhdXNlIGlucHV0cyBhcmUgbm8gbG9uZ2VyIHNhZmUuXG4gICAgICAgIGVsc2UgaWYoZXhpc3RzICE9PSBWKXsgICAgXG4gICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgICAgdGhpcy5pbmNsdWRlKGlucHV0cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbnRleHQgbWF5IG9ubHkgaW5jbHVkZSBpbnN0YW5jZSBvciBjbGFzcyBcXGBleHRlbmRzIE1vZGVsXFxgIGJ1dCBnb3QgJHtcbiAgICAgICAgICBLID09ICcwJyB8fCBLID09IFYgPyBWIDogYCR7Vn0gKGFzICcke0t9JylgXG4gICAgICAgIH0uYFxuICAgICAgKTtcbiAgICB9KVxuXG4gICAgZm9yKGNvbnN0IFttb2RlbCwgZXhwbGljaXRdIG9mIGluaXQpe1xuICAgICAgbW9kZWwuc2V0KCk7XG5cbiAgICAgIGlmKGV4cGxpY2l0ICYmIGZvckVhY2gpXG4gICAgICAgICAgZm9yRWFjaChtb2RlbCBhcyBUKTtcblxuICAgICAgZm9yKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgbW9kZWwpXG4gICAgICAgIGlmKFBBUkVOVC5nZXQodmFsdWUgYXMgTW9kZWwpID09PSBtb2RlbCl7XG4gICAgICAgICAgdGhpcy5hZGQodmFsdWUgYXMgTW9kZWwsIHRydWUpO1xuICAgICAgICAgIGluaXQuc2V0KHZhbHVlIGFzIE1vZGVsLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgaW5wdXQ6IFQgfCBNb2RlbC5Jbml0PFQ+LFxuICAgIGltcGxpY2l0PzogYm9vbGVhbil7XG5cbiAgICBjb25zdCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuICAgIGxldCBUOiBNb2RlbC5UeXBlPFQ+O1xuICAgIGxldCBJOiBUO1xuXG4gICAgaWYodHlwZW9mIGlucHV0ID09IFwiZnVuY3Rpb25cIil7XG4gICAgICBUID0gaW5wdXQ7XG4gICAgICBJID0gbmV3IGlucHV0KCkgYXMgVDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBUID0gaW5wdXQuY29uc3RydWN0b3IgYXMgTW9kZWwuVHlwZTxUPjtcbiAgICAgIEkgPSBpbnB1dDtcbiAgICB9XG5cbiAgICBrZXlzKFQsIHRydWUpLmZvckVhY2goSyA9PiB7XG4gICAgICBjb25zdCBleHBlY3RzID0gdGhpc1tLXSBhcyBDb250ZXh0LkV4cGVjdCB8IHVuZGVmaW5lZDtcbiAgXG4gICAgICBpZighZXhwZWN0cylcbiAgICAgICAgcmV0dXJuO1xuICBcbiAgICAgIGFkZExpc3RlbmVyKEksIGV2ZW50ID0+IHtcbiAgICAgICAgaWYoZXZlbnQgPT09IHRydWUpe1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gZXhwZWN0cyhJKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgIGlmKGNhbGxiYWNrKVxuICAgICAgICAgICAgY2xlYW51cC5hZGQoY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KSAgXG4gICAgfSk7XG5cbiAgICBrZXlzKFQpLmZvckVhY2goSyA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFzT3duUHJvcGVydHkoSykgPyBudWxsIDogSTtcblxuICAgICAgaWYodmFsdWUgfHwgdGhpc1tLXSAhPT0gSSAmJiAhaW1wbGljaXQpXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBLLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jbGVhbnVwLmFkZCgoKSA9PiB7XG4gICAgICBjbGVhbnVwLmZvckVhY2goY2IgPT4gY2IoKSk7XG5cbiAgICAgIGlmKEkgIT09IGlucHV0KVxuICAgICAgICBldmVudChJLCBudWxsKTtcbiAgICB9KVxuXG4gICAgY29uc3Qgd2FpdGluZyA9IExPT0tVUC5nZXQoSSk7XG4gIFxuICAgIGlmKHdhaXRpbmcgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIHdhaXRpbmcuZm9yRWFjaChjYiA9PiBjYih0aGlzKSk7XG5cbiAgICBMT09LVVAuc2V0KEksIHRoaXMpO1xuXG4gICAgcmV0dXJuIEk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dCB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxPQUFPLE9BQU8sUUFBUSxXQUFXO0FBRTFDLE1BQU0sU0FBUyxvQkFBSSxRQUFxRDtBQUN4RSxNQUFNLE9BQU8sb0JBQUksSUFBaUM7QUFFbEQsU0FBUyxJQUFJLEdBQXdCLFVBQTRCO0FBQy9ELE1BQUksSUFBSSxLQUFLLElBQUksQ0FBQztBQUVsQixNQUFHLENBQUM7QUFDRixTQUFLLElBQUksR0FBRyxJQUFJO0FBQUEsTUFDZCxPQUFPLEtBQUssV0FBVyxTQUFTLEVBQUUsY0FBYyxPQUFPLENBQUM7QUFBQSxJQUMxRCxDQUFDO0FBRUgsU0FBTyxXQUFXLElBQUksQ0FBQyxJQUFJO0FBQzdCO0FBRUEsU0FBUyxLQUFLLE1BQWtCLFVBQW1C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QUEsSUFDRixDQUFDO0FBRUQsZUFBVSxDQUFDLE9BQU8sUUFBUSxLQUFLLE1BQUs7QUFDbEMsWUFBTSxJQUFJO0FBRVYsVUFBRyxZQUFZO0FBQ1gsZ0JBQVEsS0FBVTtBQUV0QixpQkFBVSxDQUFDLE1BQU0sS0FBSyxLQUFLO0FBQ3pCLFlBQUcsT0FBTyxJQUFJLEtBQWMsTUFBTSxPQUFNO0FBQ3RDLGVBQUssSUFBSSxPQUFnQixJQUFJO0FBQzdCLGVBQUssSUFBSSxPQUFnQixLQUFLO0FBQUEsUUFDaEM7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUFBLEVBRVUsSUFDUixPQUNBLFVBQW1CO0FBRW5CLFVBQU0sVUFBVSxvQkFBSSxJQUFnQjtBQUNwQyxRQUFJO0FBQ0osUUFBSTtBQUVKLFFBQUcsT0FBTyxTQUFTLFlBQVc7QUFDNUIsVUFBSTtBQUNKLFVBQUksSUFBSSxNQUFNO0FBQUEsSUFDaEIsT0FDSztBQUNILFVBQUksTUFBTTtBQUNWLFVBQUk7QUFBQSxJQUNOO0FBRUEsU0FBSyxHQUFHLElBQUksRUFBRSxRQUFRLE9BQUs7QUFDekIsWUFBTSxVQUFVLEtBQUssQ0FBQztBQUV0QixVQUFHLENBQUM7QUFDRjtBQUVGLGtCQUFZLEdBQUcsQ0FBQUMsV0FBUztBQUN0QixZQUFHQSxXQUFVLE1BQUs7QUFDaEIsZ0JBQU0sV0FBVyxRQUFRLENBQUM7QUFFMUIsY0FBRztBQUNELG9CQUFRLElBQUksUUFBUTtBQUFBLFFBQ3hCO0FBRUEsZUFBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELFNBQUssQ0FBQyxFQUFFLFFBQVEsT0FBSztBQUNuQixZQUFNLFFBQVEsS0FBSyxlQUFlLENBQUMsSUFBSSxPQUFPO0FBRTlDLFVBQUcsU0FBUyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7QUFDNUIsZUFBTyxlQUFlLE1BQU0sR0FBRztBQUFBLFVBQzdCLGNBQWM7QUFBQSxVQUNkO0FBQUEsUUFDRixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsU0FBSyxRQUFRLElBQUksTUFBTTtBQUNyQixjQUFRLFFBQVEsUUFBTSxHQUFHLENBQUM7QUFFMUIsVUFBRyxNQUFNO0FBQ1AsY0FBTSxHQUFHLElBQUk7QUFBQSxJQUNqQixDQUFDO0FBRUQsVUFBTSxVQUFVLE9BQU8sSUFBSSxDQUFDO0FBRTVCLFFBQUcsbUJBQW1CO0FBQ3BCLGNBQVEsUUFBUSxRQUFNLEdBQUcsSUFBSSxDQUFDO0FBRWhDLFdBQU8sSUFBSSxHQUFHLElBQUk7QUFFbEIsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFsia2V5cyIsICJyZXF1aXJlIiwgImtleSIsICJldmVudCJdCn0K
149
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGFkZExpc3RlbmVyIH0gZnJvbSAnLi9jb250cm9sJztcbmltcG9ydCB7IGV2ZW50LCBNb2RlbCwgUEFSRU5ULCB1aWQgfSBmcm9tICcuL21vZGVsJztcblxuY29uc3QgTE9PS1VQID0gbmV3IFdlYWtNYXA8TW9kZWwsIENvbnRleHQgfCAoKGdvdDogQ29udGV4dCkgPT4gdm9pZClbXT4oKTtcbmNvbnN0IEtFWVMgPSBuZXcgTWFwPHN5bWJvbCB8IE1vZGVsLlR5cGUsIHN5bWJvbD4oKTtcblxuZnVuY3Rpb24ga2V5KFQ6IE1vZGVsLlR5cGUgfCBzeW1ib2wsIHVwc3RyZWFtPzogYm9vbGVhbik6IHN5bWJvbCB7XG4gIGxldCBLID0gS0VZUy5nZXQoVCk7XG5cbiAgaWYoIUspXG4gICAgS0VZUy5zZXQoVCwgSyA9IFN5bWJvbChcbiAgICAgIHR5cGVvZiBUID09IFwic3ltYm9sXCIgPyBcImdldCBcIiArIFQuZGVzY3JpcHRpb24gOiBTdHJpbmcoVClcbiAgICApKTtcbiAgXG4gIHJldHVybiB1cHN0cmVhbSA/IGtleShLKSA6IEs7XG59XG5cbmZ1bmN0aW9uIGtleXMoZnJvbTogTW9kZWwuVHlwZSwgdXBzdHJlYW0/OiBib29sZWFuKXtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3ltYm9sPigpO1xuXG4gIGRvIHtcbiAgICBrZXlzLmFkZChrZXkoZnJvbSwgdXBzdHJlYW0pKTtcbiAgfVxuICB3aGlsZSgoZnJvbSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihmcm9tKSkgIT09IE1vZGVsKTtcblxuICByZXR1cm4ga2V5cztcbn1cblxuZGVjbGFyZSBuYW1lc3BhY2UgQ29udGV4dCB7XG4gIHR5cGUgTXVsdGlwbGU8VCBleHRlbmRzIE1vZGVsPiA9IHtcbiAgICBba2V5OiBzdHJpbmcgfCBudW1iZXJdOiBNb2RlbC5Jbml0PFQ+IHwgVDtcbiAgfTtcblxuICB0eXBlIEFjY2VwdDxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPSBUIHwgTW9kZWwuSW5pdDxUPiB8IE11bHRpcGxlPFQ+O1xuXG4gIHR5cGUgRXhwZWN0PFQgZXh0ZW5kcyBNb2RlbCA9IE1vZGVsPiA9IChtb2RlbDogVCkgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuaW50ZXJmYWNlIENvbnRleHQge1xuICBba2V5OiBzeW1ib2xdOiBNb2RlbCB8IENvbnRleHQuRXhwZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbn1cblxuY2xhc3MgQ29udGV4dCB7XG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihvbjogTW9kZWwsIGNhbGxiYWNrOiAoKGdvdDogQ29udGV4dCkgPT4gdm9pZCkpOiB2b2lkO1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4ob246IE1vZGVsKTogQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgc3RhdGljIGdldCh7IGlzIH06IE1vZGVsLCBjYWxsYmFjaz86IChnb3Q6IENvbnRleHQpID0+IHZvaWQpe1xuICAgIGNvbnN0IHdhaXRpbmcgPSBMT09LVVAuZ2V0KGlzKTtcblxuICAgIGlmKHdhaXRpbmcgaW5zdGFuY2VvZiBDb250ZXh0KXtcbiAgICAgIGlmKGNhbGxiYWNrKVxuICAgICAgICBjYWxsYmFjayh3YWl0aW5nKTtcblxuICAgICAgcmV0dXJuIHdhaXRpbmc7XG4gICAgfVxuXG4gICAgaWYoY2FsbGJhY2spXG4gICAgICBpZih3YWl0aW5nKSBcbiAgICAgICAgd2FpdGluZy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgXG4gICAgICAgIExPT0tVUC5zZXQoaXMsIFtjYWxsYmFja10pO1xuICB9XG5cbiAgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBsYXllciA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNb2RlbCB8IE1vZGVsLlR5cGU+KCk7XG4gIHByb3RlY3RlZCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0cz86IENvbnRleHQuQWNjZXB0KXtcbiAgICBpZihpbnB1dHMpXG4gICAgICB0aGlzLmluY2x1ZGUoaW5wdXRzKTtcbiAgfVxuXG4gIC8qKiBSdW4gY2FsbGJhY2sgd2hlbiBhIHNwZWNpZmllZCB0eXBlIGlzIHJlZ2lzdGVyZWQgdG8gYSAqKmNoaWxkKiogY29udGV4dC4gKi9cbiAgcHVibGljIGhhczxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrOiAobW9kZWw6IFQpID0+IHZvaWQpe1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXkoVHlwZSwgdHJ1ZSksIHsgdmFsdWU6IGNhbGxiYWNrLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cblxuICAvKiogRmluZCBzcGVjaWZpZWQgdHlwZSByZWdpc3RlcmVkIHRvIGEgcGFyZW50IGNvbnRleHQuIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kLiAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4oVHlwZTogTW9kZWwuVHlwZTxUPiwgcmVxdWlyZTogdHJ1ZSk6IFQ7XG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlPzogYm9vbGVhbik6IFQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlPzogYm9vbGVhbil7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpc1trZXkoVHlwZSldO1xuXG4gICAgaWYocmVzdWx0ID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgZmluZCAke1R5cGV9IGluIGNvbnRleHQsIGJ1dCBtdWx0aXBsZSB3ZXJlIGRlZmluZWQuYCk7XG5cbiAgICBpZihyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG5cbiAgICBpZihyZXF1aXJlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke1R5cGV9IGluIGNvbnRleHQuYCk7XG4gIH1cblxuICBwdWJsaWMgcHVzaChpbnB1dHM/OiBDb250ZXh0LkFjY2VwdCl7XG4gICAgY29uc3QgbmV4dCA9IE9iamVjdC5jcmVhdGUodGhpcykgYXMgdGhpcztcblxuICAgIHRoaXMuY2xlYW51cCA9IG5ldyBTZXQoWygpID0+IG5leHQucG9wKCksIC4uLnRoaXMuY2xlYW51cF0pO1xuXG4gICAgbmV4dC5sYXllciA9IG5ldyBNYXAoKTtcbiAgICBuZXh0LmNsZWFudXAgPSBuZXcgU2V0KCk7XG5cbiAgICBpZihpbnB1dHMpXG4gICAgICBuZXh0LmluY2x1ZGUoaW5wdXRzKTtcblxuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgcHVibGljIHBvcCgpe1xuICAgIGZvcihjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSlcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpW2tleV07XG5cbiAgICB0aGlzLmNsZWFudXAuZm9yRWFjaChjYiA9PiBjYigpKTtcbiAgICB0aGlzLmNsZWFudXAuY2xlYXIoKTtcbiAgICB0aGlzLmxheWVyLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgaW5jbHVkZTxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIGlucHV0czogQ29udGV4dC5BY2NlcHQ8VD4sXG4gICAgZm9yRWFjaD86IENvbnRleHQuRXhwZWN0PFQ+XG4gICl7XG4gICAgY29uc3QgaW5pdCA9IG5ldyBNYXA8TW9kZWwsIGJvb2xlYW4+KCk7XG5cbiAgICBpZih0eXBlb2YgaW5wdXRzID09IFwiZnVuY3Rpb25cIiB8fCBpbnB1dHMgaW5zdGFuY2VvZiBNb2RlbClcbiAgICAgIGlucHV0cyA9IHsgW2ZvckVhY2ggPyAwIDogdGhpcy5sYXllci5zaXplXTogaW5wdXRzIH07XG5cbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goKFtLLCBWXTogW3N0cmluZywgTW9kZWwgfCBNb2RlbC5Jbml0PE1vZGVsPl0pID0+IHtcbiAgICAgIGlmKE1vZGVsLmlzKFYpIHx8IFYgaW5zdGFuY2VvZiBNb2RlbCl7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMubGF5ZXIuZ2V0KEspO1xuICBcbiAgICAgICAgaWYoIWV4aXN0cyl7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFkZChWKTtcbiAgXG4gICAgICAgICAgdGhpcy5sYXllci5zZXQoSywgVik7XG4gICAgICAgICAgaW5pdC5zZXQoaW5zdGFuY2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbnRleHQgbXVzdCBmb3JjZS1yZXNldCBiZWNhdXNlIGlucHV0cyBhcmUgbm8gbG9uZ2VyIHNhZmUuXG4gICAgICAgIGVsc2UgaWYoZXhpc3RzICE9PSBWKXsgICAgXG4gICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgICAgdGhpcy5pbmNsdWRlKGlucHV0cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbnRleHQgbWF5IG9ubHkgaW5jbHVkZSBpbnN0YW5jZSBvciBjbGFzcyBcXGBleHRlbmRzIE1vZGVsXFxgIGJ1dCBnb3QgJHtcbiAgICAgICAgICBLID09ICcwJyB8fCBLID09IFYgPyBWIDogYCR7Vn0gKGFzICcke0t9JylgXG4gICAgICAgIH0uYFxuICAgICAgKTtcbiAgICB9KVxuXG4gICAgZm9yKGNvbnN0IFttb2RlbCwgZXhwbGljaXRdIG9mIGluaXQpe1xuICAgICAgbW9kZWwuc2V0KCk7XG5cbiAgICAgIGlmKGV4cGxpY2l0ICYmIGZvckVhY2gpXG4gICAgICAgIGZvckVhY2gobW9kZWwgYXMgVCk7XG5cbiAgICAgIGZvcihjb25zdCBbX2tleSwgdmFsdWVdIG9mIG1vZGVsKVxuICAgICAgICBpZihQQVJFTlQuZ2V0KHZhbHVlIGFzIE1vZGVsKSA9PT0gbW9kZWwpe1xuICAgICAgICAgIHRoaXMuYWRkKHZhbHVlIGFzIE1vZGVsLCB0cnVlKTtcbiAgICAgICAgICBpbml0LnNldCh2YWx1ZSBhcyBNb2RlbCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIGlucHV0OiBUIHwgTW9kZWwuSW5pdDxUPixcbiAgICBpbXBsaWNpdD86IGJvb2xlYW4pe1xuXG4gICAgY29uc3QgY2xlYW51cCA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgICBsZXQgVDogTW9kZWwuVHlwZTxUPjtcbiAgICBsZXQgSTogVDtcblxuICAgIGlmKHR5cGVvZiBpbnB1dCA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgVCA9IGlucHV0O1xuICAgICAgSSA9IG5ldyBpbnB1dCgpIGFzIFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgVCA9IGlucHV0LmNvbnN0cnVjdG9yIGFzIE1vZGVsLlR5cGU8VD47XG4gICAgICBJID0gaW5wdXQ7XG4gICAgfVxuXG4gICAga2V5cyhULCB0cnVlKS5mb3JFYWNoKEsgPT4ge1xuICAgICAgY29uc3QgZXhwZWN0cyA9IHRoaXNbS10gYXMgQ29udGV4dC5FeHBlY3QgfCB1bmRlZmluZWQ7XG4gIFxuICAgICAgaWYoIWV4cGVjdHMpXG4gICAgICAgIHJldHVybjtcbiAgXG4gICAgICBhZGRMaXN0ZW5lcihJLCBldmVudCA9PiB7XG4gICAgICAgIGlmKGV2ZW50ID09PSB0cnVlKXtcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGV4cGVjdHMoSSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICBpZihjYWxsYmFjaylcbiAgICAgICAgICAgIGNsZWFudXAuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSkgIFxuICAgIH0pO1xuXG4gICAga2V5cyhUKS5mb3JFYWNoKEsgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhc093blByb3BlcnR5KEspID8gbnVsbCA6IEk7XG5cbiAgICAgIGlmKHZhbHVlIHx8IHRoaXNbS10gIT09IEkgJiYgIWltcGxpY2l0KVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgSywge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2xlYW51cC5hZGQoKCkgPT4ge1xuICAgICAgY2xlYW51cC5mb3JFYWNoKGNiID0+IGNiKCkpO1xuXG4gICAgICBpZihJICE9PSBpbnB1dClcbiAgICAgICAgZXZlbnQoSSwgbnVsbCk7XG4gICAgfSlcblxuICAgIGNvbnN0IHdhaXRpbmcgPSBMT09LVVAuZ2V0KEkpO1xuICBcbiAgICBpZih3YWl0aW5nIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICB3YWl0aW5nLmZvckVhY2goY2IgPT4gY2IodGhpcykpO1xuXG4gICAgTE9PS1VQLnNldChJLCB0aGlzKTtcblxuICAgIHJldHVybiBJO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbnRleHQgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsT0FBTyxPQUFPLFFBQVEsV0FBVztBQUUxQyxNQUFNLFNBQVMsb0JBQUksUUFBcUQ7QUFDeEUsTUFBTSxPQUFPLG9CQUFJLElBQWlDO0FBRWxELFNBQVMsSUFBSSxHQUF3QixVQUE0QjtBQUMvRCxNQUFJLElBQUksS0FBSyxJQUFJLENBQUM7QUFFbEIsTUFBRyxDQUFDO0FBQ0YsU0FBSyxJQUFJLEdBQUcsSUFBSTtBQUFBLE1BQ2QsT0FBTyxLQUFLLFdBQVcsU0FBUyxFQUFFLGNBQWMsT0FBTyxDQUFDO0FBQUEsSUFDMUQsQ0FBQztBQUVILFNBQU8sV0FBVyxJQUFJLENBQUMsSUFBSTtBQUM3QjtBQUVBLFNBQVMsS0FBSyxNQUFrQixVQUFtQjtB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LElBQ0YsQ0FBQztBQUVELGVBQVUsQ0FBQyxPQUFPLFFBQVEsS0FBSyxNQUFLO0FBQ2xDLFlBQU0sSUFBSTtBQUVWLFVBQUcsWUFBWTtBQUNiLGdCQUFRLEtBQVU7QUFFcEIsaUJBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSztBQUN6QixZQUFHLE9BQU8sSUFBSSxLQUFjLE1BQU0sT0FBTTtBQUN0QyxlQUFLLElBQUksT0FBZ0IsSUFBSTtBQUM3QixlQUFLLElBQUksT0FBZ0IsS0FBSztBQUFBLFFBQ2hDO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFBQSxFQUVVLElBQ1IsT0FDQSxVQUFtQjtBQUVuQixVQUFNLFVBQVUsb0JBQUksSUFBZ0I7QUFDcEMsUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFHLE9BQU8sU0FBUyxZQUFXO0FBQzVCLFVBQUk7QUFDSixVQUFJLElBQUksTUFBTTtBQUFBLElBQ2hCLE9BQ0s7QUFDSCxVQUFJLE1BQU07QUFDVixVQUFJO0FBQUEsSUFDTjtBQUVBLFNBQUssR0FBRyxJQUFJLEVBQUUsUUFBUSxPQUFLO0FBQ3pCLFlBQU0sVUFBVSxLQUFLLENBQUM7QUFFdEIsVUFBRyxDQUFDO0FBQ0Y7QUFFRixrQkFBWSxHQUFHLENBQUFDLFdBQVM7QUFDdEIsWUFBR0EsV0FBVSxNQUFLO0FBQ2hCLGdCQUFNLFdBQVcsUUFBUSxDQUFDO0FBRTFCLGNBQUc7QUFDRCxvQkFBUSxJQUFJLFFBQVE7QUFBQSxRQUN4QjtBQUVBLGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxTQUFLLENBQUMsRUFBRSxRQUFRLE9BQUs7QUFDbkIsWUFBTSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksT0FBTztBQUU5QyxVQUFHLFNBQVMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBQzVCLGVBQU8sZUFBZSxNQUFNLEdBQUc7QUFBQSxVQUM3QixjQUFjO0FBQUEsVUFDZDtBQUFBLFFBQ0YsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELFNBQUssUUFBUSxJQUFJLE1BQU07QUFDckIsY0FBUSxRQUFRLFFBQU0sR0FBRyxDQUFDO0FBRTFCLFVBQUcsTUFBTTtBQUNQLGNBQU0sR0FBRyxJQUFJO0FBQUEsSUFDakIsQ0FBQztBQUVELFVBQU0sVUFBVSxPQUFPLElBQUksQ0FBQztBQUU1QixRQUFHLG1CQUFtQjtBQUNwQixjQUFRLFFBQVEsUUFBTSxHQUFHLElBQUksQ0FBQztBQUVoQyxXQUFPLElBQUksR0FBRyxJQUFJO0FBRWxCLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbImtleXMiLCAicmVxdWlyZSIsICJrZXkiLCAiZXZlbnQiXQp9Cg==
@@ -15,20 +15,22 @@ function get(arg0, arg1) {
15
15
  };
16
16
  var assign = assign2;
17
17
  const hasParent = PARENT.get(subject);
18
- if (!hasParent) {
19
- if (arg1 === true)
20
- throw new Error(`${subject} may only exist as a child of type ${arg0}.`);
21
- Context.get(subject, (context) => {
22
- const model = context.get(arg0);
23
- if (model)
24
- assign2(model);
25
- else if (arg1 !== false)
26
- throw new Error(`Required ${arg0} not found in context for ${subject}.`);
27
- });
28
- } else if (!arg0 || hasParent instanceof arg0)
29
- assign2(hasParent);
30
- else
31
- throw new Error(`New ${subject} created as child of ${hasParent}, but must be instanceof ${arg0}.`);
18
+ if (!hasParent && arg1 === true)
19
+ throw new Error(`${subject} may only exist as a child of type ${arg0}.`);
20
+ else if (hasParent) {
21
+ if (hasParent instanceof arg0) {
22
+ assign2(hasParent);
23
+ return {};
24
+ } else if (arg1 === true)
25
+ throw new Error(`New ${subject} created as child of ${hasParent}, but must be instanceof ${arg0}.`);
26
+ }
27
+ Context.get(subject, (context) => {
28
+ const model = context.get(arg0);
29
+ if (model)
30
+ assign2(model);
31
+ else if (arg1 !== false)
32
+ throw new Error(`Required ${arg0} not found in context for ${subject}.`);
33
+ });
32
34
  return {
33
35
  get: arg1 !== false
34
36
  };
@@ -84,4 +86,4 @@ function get(arg0, arg1) {
84
86
  export {
85
87
  get
86
88
  };
87
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2dldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgY3JlYXRlRWZmZWN0IH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBmZXRjaCwgTUVUSE9ELCBNb2RlbCwgUEFSRU5ULCBldmVudCwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG50eXBlIFR5cGU8VCBleHRlbmRzIE1vZGVsPiA9IE1vZGVsLlR5cGU8VD4gJiB0eXBlb2YgTW9kZWw7XG5cbmNvbnN0IFNUQUxFID0gbmV3IFdlYWtTZXQ8KCkgPT4gdm9pZD4oKTtcblxuZGVjbGFyZSBuYW1lc3BhY2UgZ2V0IHtcbiAgdHlwZSBDb21wdXRlPFQsIFMgPSBhbnk+ID0gKG9uOiBTLCBrZXk6IHN0cmluZykgPT4gVDtcblxuICB0eXBlIEZhY3Rvcnk8VCwgUyA9IGFueT4gPSAodGhpczogUywga2V5OiBzdHJpbmcsIHRoaXNBcmc6IFMpID0+IFQ7XG5cbiAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIHR5cGUgRWZmZWN0PFQ+ID0gKG1vZGVsOiBULCBrZXk6IHN0cmluZykgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBhc3NpZ25zIHRoZSBjb250cm9sbGVyIHdoaWNoIHNwYXduZWQgdGhpcyBob3N0LlxuICogV2hlbiBwYXJlbnQgYXNzaWducyBhbiBpbnN0YW5jZSB2aWEgYHVzZSgpYCBkaXJlY3RpdmUsIGl0XG4gKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGNoaWxkIHVwb24gdGhpcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNsYXNzLiBcbiAqIEBwYXJhbSBleHBlY3RQYXJlbnQgLSBJZiB0cnVlLCB3aWxsIHRocm93IGlmIE1vZGVsIGlzIGNyZWF0ZWQgd2l0aG91dCBhIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBhc1BhcmVudD86IHRydWUpOiBUO1xuXG4vKipcbiAqIEZldGNoZXMgYW5kIGFzc2lnbnMgdGhlIGNvbnRyb2xsZXIgd2hpY2ggc3Bhd25lZCB0aGlzIGhvc3QuXG4gKiBXaGVuIHBhcmVudCBhc3NpZ25zIGFuIGluc3RhbmNlIHZpYSBgdXNlKClgIGRpcmVjdGl2ZSwgaXRcbiAqIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gY2hpbGQgdXBvbiB0aGlzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIFR5cGUgLSBUeXBlIG9mIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIHRoaXMgY2xhc3MuIFxuICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgZmFsc2UsIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQuIE90aGVyd2lzZSB3aWxsIHRocm93IHN1c3BlbnNlLlxuICovXG5mdW5jdGlvbiBnZXQgPFQgZXh0ZW5kcyBNb2RlbD4gKFR5cGU6IE1vZGVsLlR5cGU8VD4sIHJlcXVpcmVkPzogZmFsc2UpOiBUIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlIGZyb20gYSBmb3JlaWduIG1vZGVsLiBPdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24sXG4gKiB3aGVyZSB0aGUgZm9yZWlnbiBtb2RlbCB3aWxsIGJlIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLlxuICogXG4gKiBAcGFyYW0gc291cmNlIC0gVHlwZSBvZiBNb2RlbCB0byBmZXRjaCBmb3IgY29tcHV0YXRpb24uXG4gKiBAcGFyYW0gY29tcHV0ZSAtIENvbXB1dGUgZnVuY3Rpb24uIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBlZmZlY3Q6IGdldC5FZmZlY3Q8VD4pOiBUO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZSAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIGNvbXB1dGVkIHZhbHVlIHdpbGwgYmUgYSBzdWJzY3JpYmVyLlxuICogQHBhcmFtIGNvbXB1dGUgLSBDb21wdXRlIGZ1bmN0aW9uLiBCb3VuZCB0byBhIHN1YnNjcmliZXItcHJveHkgb2Ygc291cmNlLCByZXR1cm5zIG91dHB1dCB2YWx1ZS4gV2lsbCB1cGRhdGUgYXV0b21hdGljYWxseSBhcyBpbnB1dCB2YWx1ZXMgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBnZXQgPFIsIFQgZXh0ZW5kcyBNb2RlbD4gKHNvdXJjZTogVCwgY29tcHV0ZTogZ2V0LkNvbXB1dGU8UiwgVD4pOiBSO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgaXMgcmV0dXJuZWQgYnkgZnVuY3Rpb24gZnJvbSBwcm92aWRlZCBmYWN0b3J5LlxuICogXG4gKiBGYWN0b3J5IGlzIGJvdW5kIHRvIG93bmVyIG9mIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb21wdXRlIC0gRmFjdG9yeSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGdldHRlciB0byBzdWJzY3JpYmUgZGVwZW5kYW5jaWVzLlxuICovXG5mdW5jdGlvbiBnZXQgPFIsIFQ+IChjb21wdXRlOiBnZXQuRmFjdG9yeTxSLCBUPik6IFI7XG4gXG5mdW5jdGlvbiBnZXQ8UiwgVCBleHRlbmRzIE1vZGVsPihcbiAgYXJnMDogVCB8IGdldC5GYWN0b3J5PFIsIFQ+IHwgVHlwZTxUPixcbiAgYXJnMT86IEZ1bmN0aW9uIHwgYm9vbGVhbil7XG5cbiAgcmV0dXJuIHVzZSgoa2V5LCBzdWJqZWN0LCBzdGF0ZSkgPT4ge1xuICAgIGlmKHR5cGVvZiBhcmcwID09IFwic3ltYm9sXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRlZCB0byB1c2UgYW4gaW5zdHJ1Y3Rpb24gcmVzdWx0IChwcm9iYWJseSB1c2Ugb3IgZ2V0KSBhcyBjb21wdXRlZCBzb3VyY2UgZm9yICR7c3ViamVjdH0uJHtrZXl9LiBUaGlzIGlzIG5vdCBhbGxvd2VkLmApXG5cbiAgICBpZihNb2RlbC5pcyhhcmcwKSl7XG4gICAgICBjb25zdCBoYXNQYXJlbnQgPSBQQVJFTlQuZ2V0KHN1YmplY3QpIGFzIFQ7XG5cbiAgICAgIC8vIFRPRE86IG5vdGlmeSBvbiBkaXNjb3ZlcmVkIGNvbnRleHQgXG4gICAgICBmdW5jdGlvbiBhc3NpZ24odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB2YWx1ZS5nZXQoeCA9PiAoYXJnMSBhcyBGdW5jdGlvbikoeCwga2V5KSk7XG5cbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZighaGFzUGFyZW50KXtcbiAgICAgICAgaWYoYXJnMSA9PT0gdHJ1ZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3ViamVjdH0gbWF5IG9ubHkgZXhpc3QgYXMgYSBjaGlsZCBvZiB0eXBlICR7YXJnMH0uYCk7XG5cbiAgICAgICAgQ29udGV4dC5nZXQoc3ViamVjdCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0KGFyZzApO1xuXG4gICAgICAgICAgaWYobW9kZWwpXG4gICAgICAgICAgICBhc3NpZ24obW9kZWwpO1xuICAgICAgICAgIGVsc2UgaWYoYXJnMSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkICR7YXJnMH0gbm90IGZvdW5kIGluIGNvbnRleHQgZm9yICR7c3ViamVjdH0uYClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKCFhcmcwIHx8IGhhc1BhcmVudCBpbnN0YW5jZW9mIGFyZzApXG4gICAgICAgIGFzc2lnbihoYXNQYXJlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5ldyAke3N1YmplY3R9IGNyZWF0ZWQgYXMgY2hpbGQgb2YgJHtoYXNQYXJlbnR9LCBidXQgbXVzdCBiZSBpbnN0YW5jZW9mICR7YXJnMH0uYCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldDogYXJnMSAhPT0gZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGxldCBmcm9tID0gc3ViamVjdDtcbiAgICBcbiAgICBpZihhcmcwIGluc3RhbmNlb2YgTW9kZWwpe1xuICAgICAgZnJvbSA9IGFyZzA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZm4gPSBNRVRIT0QuZ2V0KGFyZzApIHx8IGFyZzA7XG4gICAgICBhcmcxID0gKChwLCBrKSA9PiBmbi5jYWxsKHAsIGssIHApKSBhcyBnZXQuRWZmZWN0PFQ+O1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZTogZ2V0LlNvdXJjZTxUPiA9IHJlc29sdmUgPT4gcmVzb2x2ZShmcm9tKTtcbiAgICBjb25zdCBnZXR0ZXIgPSBhcmcxIGFzIGdldC5Db21wdXRlPFIsIFQ+O1xuXG4gICAgbGV0IHJlc2V0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGlzQXN5bmM6IGJvb2xlYW47XG4gICAgbGV0IHByb3h5OiBhbnk7XG5cbiAgICBmdW5jdGlvbiBjb25uZWN0KG1vZGVsOiBNb2RlbCl7XG4gICAgICByZXNldCA9IGNyZWF0ZUVmZmVjdChtb2RlbCwgY3VycmVudCA9PiB7XG4gICAgICAgIHByb3h5ID0gY3VycmVudDtcblxuICAgICAgICBpZighKGtleSBpbiBzdGF0ZSkgfHwgU1RBTEUuZGVsZXRlKGNvbXB1dGUpKVxuICAgICAgICAgIGNvbXB1dGUoIXJlc2V0KTtcblxuICAgICAgICByZXR1cm4gKGRpZFVwZGF0ZSkgPT4ge1xuICAgICAgICAgIGlmKGRpZFVwZGF0ZSl7XG4gICAgICAgICAgICBTVEFMRS5hZGQoY29tcHV0ZSk7XG4gICAgICAgICAgICBldmVudChzdWJqZWN0LCBrZXksIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sIGZhbHNlKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGUoaW5pdGlhbD86IGJvb2xlYW4pe1xuICAgICAgbGV0IG5leHQ6IFIgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHQgPSBnZXR0ZXIuY2FsbChwcm94eSwgcHJveHksIGtleSk7XG4gICAgICB9XG4gICAgICBjYXRjaChlcnIpe1xuICAgICAgICBjb25zb2xlLndhcm4oYEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlICR7aW5pdGlhbCA/IFwiaW5pdGlhbGl6aW5nXCIgOiBcInJlZnJlc2hpbmdcIn0gJHtzdWJqZWN0fS4ke2tleX0uYClcblxuICAgICAgICBpZihpbml0aWFsKVxuICAgICAgICAgIHRocm93IGVycjtcblxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIG5leHQsICFpc0FzeW5jKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYoIXByb3h5KXtcbiAgICAgICAgc291cmNlKGNvbm5lY3QpO1xuICAgICAgICBpc0FzeW5jID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYoU1RBTEUuZGVsZXRlKGNvbXB1dGUpKVxuICAgICAgICBjb21wdXRlKCk7XG5cbiAgICAgIHJldHVybiBmZXRjaChzdWJqZWN0LCBrZXksICFwcm94eSkgYXMgVDtcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCB7IGdldCB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFTLG9CQUFvQjtBQUM3QixTQUFTLE9BQU8sUUFBUSxPQUFPLFFBQVEsT0FBTyxjQUFjO0FBQzVELFNBQVMsV0FBVztBQUlwQixNQUFNLFFBQVEsb0JBQUksUUFBb0I7QUEwRHRDLFNBQVMsSUFDUCxNQUNBLE1BQTBCO0FBRTFCLFNBQU8sSUFBSSxDQUFDLEtBQUssU0FBUyxVQUFVO0FBQ2xDLFFBQUcsT0FBTyxRQUFRO0FBQ2hCLFlBQU0sSUFBSSxNQUFNLHVGQUF1RixPQUFPLElBQUksR0FBRyx3QkFBd0I7QUFFL0ksUUFBRyxNQUFNLEdBQUcsSUFBSSxHQUFFO0FBSWhCLFVBQVNBLFVBQVQsU0FBZ0IsT0FBVTtBQUN4QixZQUFJLE9BQU8sUUFBUTtBQUNqQixnQkFBTSxJQUFJLE9BQU0sS0FBa0IsR0FBRyxHQUFHLENBQUM7QUFFM0MsZUFBTyxTQUFTLEtBQUssS0FBSztBQUFBLE1BQzVCO0FBTFMsbUJBQUFBO0FBSFQsWUFBTSxZQUFZLE9BQU8sSUFBSSxPQUFPO0FBVXBDLFVBQUcsQ0FBQyxXQUFVO0FBQ1osWUFBRyxTQUFTO0FBQ1YsZ0JBQU0sSUFBSSxNQUFNLEdBQUcsT0FBTyxzQ0FBc0MsSUFBSSxHQUFHO0FBRXpFLGdCQUFRLElBQUksU0FBUyxDQUFDLFlBQVk7QUFDaEMsZ0JBQU0sUUFBUSxRQUFRLElBQUksSUFBSTtBQUU5QixjQUFHO0FBQ0QsWUFBQUEsUUFBTyxLQUFLO0FBQUEsbUJBQ04sU0FBUztBQUNmLGtCQUFNLElBQUksTUFBTSxZQUFZLElBQUksNkJBQTZCLE9BQU8sR0FBRztBQUFBLFFBQzNFLENBQUM7QUFBQSxNQUNILFdBQ1EsQ0FBQyxRQUFRLHFCQUFxQjtBQUNwQyxRQUFBQSxRQUFPLFNBQVM7QUFBQTtBQUVoQixjQUFNLElBQUksTUFBTSxPQUFPLE9BQU8sd0JBQXdCLFNBQVMsNEJBQTRCLElBQUksR0FBRztBQUVwRyxhQUFPO0FBQUEsUUFDTCxLQUFLLFNBQVM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLE9BQU87QUFFWCxRQUFHLGdCQUFnQixPQUFNO0FBQ3ZCLGFBQU87QUFBQSxJQUNULE9BQ0s7QUFDSCxZQUFNLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSztBQUMvQixhQUFRLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUFBLElBQ25DO0FBRUEsVUFBTSxTQUF3QixhQUFXLFFBQVEsSUFBSTtBQUNyRCxVQUFNLFNBQVM7QUFFZixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFFSixhQUFTLFFBQVEsT0FBYTtBQUM1QixjQUFRLGFBQWEsT0FBTyxhQUFXO0FBQ3JDLGdCQUFRO0FBRVIsWUFBRyxFQUFFLE9BQU8sVUFBVSxNQUFNLE9BQU8sT0FBTztBQUN4QyxrQkFBUSxDQUFDLEtBQUs7QUFFaEIsZUFBTyxDQUFDLGNBQWM7QUFDcEIsY0FBRyxXQUFVO0FBQ1gsa0JBQU0sSUFBSSxPQUFPO0FBQ2pCLGtCQUFNLFNBQVMsS0FBSyxJQUFJO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBQUEsTUFDRixHQUFHLEtBQUs7QUFBQSxJQUNWO0FBRUEsYUFBUyxRQUFRLFNBQWtCO0FBQ2pDLFVBQUk7QUFFSixVQUFJO0FBQ0YsZUFBTyxPQUFPLEtBQUssT0FBTyxPQUFPLEdBQUc7QUFBQSxNQUN0QyxTQUNNLEtBQUk7QUFDUixnQkFBUSxLQUFLLGlDQUFpQyxVQUFVLGlCQUFpQixZQUFZLElBQUksT0FBTyxJQUFJLEdBQUcsR0FBRztBQUUxRyxZQUFHO0FBQ0QsZ0JBQU07QUFFUixnQkFBUSxNQUFNLEdBQUc7QUFBQSxNQUNuQjtBQUVBLGFBQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxPQUFPO0FBQUEsSUFDckM7QUFFQSxXQUFPLE1BQU07QUFDWCxVQUFHLENBQUMsT0FBTTtBQUNSLGVBQU8sT0FBTztBQUNkLGtCQUFVO0FBQUEsTUFDWjtBQUVBLFVBQUcsTUFBTSxPQUFPLE9BQU87QUFDckIsZ0JBQVE7QUFFVixhQUFPLE1BQU0sU0FBUyxLQUFLLENBQUMsS0FBSztBQUFBLElBQ25DO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbImFzc2lnbiJdCn0K
89
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2dldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgY3JlYXRlRWZmZWN0IH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBmZXRjaCwgTUVUSE9ELCBNb2RlbCwgUEFSRU5ULCBldmVudCwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG50eXBlIFR5cGU8VCBleHRlbmRzIE1vZGVsPiA9IE1vZGVsLlR5cGU8VD4gJiB0eXBlb2YgTW9kZWw7XG5cbmNvbnN0IFNUQUxFID0gbmV3IFdlYWtTZXQ8KCkgPT4gdm9pZD4oKTtcblxuZGVjbGFyZSBuYW1lc3BhY2UgZ2V0IHtcbiAgdHlwZSBDb21wdXRlPFQsIFMgPSBhbnk+ID0gKG9uOiBTLCBrZXk6IHN0cmluZykgPT4gVDtcblxuICB0eXBlIEZhY3Rvcnk8VCwgUyA9IGFueT4gPSAodGhpczogUywga2V5OiBzdHJpbmcsIHRoaXNBcmc6IFMpID0+IFQ7XG5cbiAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIHR5cGUgRWZmZWN0PFQ+ID0gKG1vZGVsOiBULCBrZXk6IHN0cmluZykgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBhc3NpZ25zIHRoZSBjb250cm9sbGVyIHdoaWNoIHNwYXduZWQgdGhpcyBob3N0LlxuICogV2hlbiBwYXJlbnQgYXNzaWducyBhbiBpbnN0YW5jZSB2aWEgYHVzZSgpYCBkaXJlY3RpdmUsIGl0XG4gKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGNoaWxkIHVwb24gdGhpcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNsYXNzLiBcbiAqIEBwYXJhbSBleHBlY3RQYXJlbnQgLSBJZiB0cnVlLCB3aWxsIHRocm93IGlmIE1vZGVsIGlzIGNyZWF0ZWQgd2l0aG91dCBhIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBhc1BhcmVudD86IHRydWUpOiBUO1xuXG4vKipcbiAqIEZldGNoZXMgYW5kIGFzc2lnbnMgdGhlIGNvbnRyb2xsZXIgd2hpY2ggc3Bhd25lZCB0aGlzIGhvc3QuXG4gKiBXaGVuIHBhcmVudCBhc3NpZ25zIGFuIGluc3RhbmNlIHZpYSBgdXNlKClgIGRpcmVjdGl2ZSwgaXRcbiAqIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gY2hpbGQgdXBvbiB0aGlzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIFR5cGUgLSBUeXBlIG9mIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIHRoaXMgY2xhc3MuIFxuICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgZmFsc2UsIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQuIE90aGVyd2lzZSB3aWxsIHRocm93IHN1c3BlbnNlLlxuICovXG5mdW5jdGlvbiBnZXQgPFQgZXh0ZW5kcyBNb2RlbD4gKFR5cGU6IE1vZGVsLlR5cGU8VD4sIHJlcXVpcmVkPzogZmFsc2UpOiBUIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlIGZyb20gYSBmb3JlaWduIG1vZGVsLiBPdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24sXG4gKiB3aGVyZSB0aGUgZm9yZWlnbiBtb2RlbCB3aWxsIGJlIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLlxuICogXG4gKiBAcGFyYW0gc291cmNlIC0gVHlwZSBvZiBNb2RlbCB0byBmZXRjaCBmb3IgY29tcHV0YXRpb24uXG4gKiBAcGFyYW0gY29tcHV0ZSAtIENvbXB1dGUgZnVuY3Rpb24uIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBlZmZlY3Q6IGdldC5FZmZlY3Q8VD4pOiBUO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZSAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIGNvbXB1dGVkIHZhbHVlIHdpbGwgYmUgYSBzdWJzY3JpYmVyLlxuICogQHBhcmFtIGNvbXB1dGUgLSBDb21wdXRlIGZ1bmN0aW9uLiBCb3VuZCB0byBhIHN1YnNjcmliZXItcHJveHkgb2Ygc291cmNlLCByZXR1cm5zIG91dHB1dCB2YWx1ZS4gV2lsbCB1cGRhdGUgYXV0b21hdGljYWxseSBhcyBpbnB1dCB2YWx1ZXMgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBnZXQgPFIsIFQgZXh0ZW5kcyBNb2RlbD4gKHNvdXJjZTogVCwgY29tcHV0ZTogZ2V0LkNvbXB1dGU8UiwgVD4pOiBSO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgaXMgcmV0dXJuZWQgYnkgZnVuY3Rpb24gZnJvbSBwcm92aWRlZCBmYWN0b3J5LlxuICogXG4gKiBGYWN0b3J5IGlzIGJvdW5kIHRvIG93bmVyIG9mIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb21wdXRlIC0gRmFjdG9yeSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGdldHRlciB0byBzdWJzY3JpYmUgZGVwZW5kYW5jaWVzLlxuICovXG5mdW5jdGlvbiBnZXQgPFIsIFQ+IChjb21wdXRlOiBnZXQuRmFjdG9yeTxSLCBUPik6IFI7XG4gXG5mdW5jdGlvbiBnZXQ8UiwgVCBleHRlbmRzIE1vZGVsPihcbiAgYXJnMDogVCB8IGdldC5GYWN0b3J5PFIsIFQ+IHwgVHlwZTxUPixcbiAgYXJnMT86IEZ1bmN0aW9uIHwgYm9vbGVhbil7XG5cbiAgcmV0dXJuIHVzZSgoa2V5LCBzdWJqZWN0LCBzdGF0ZSkgPT4ge1xuICAgIGlmKHR5cGVvZiBhcmcwID09IFwic3ltYm9sXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRlZCB0byB1c2UgYW4gaW5zdHJ1Y3Rpb24gcmVzdWx0IChwcm9iYWJseSB1c2Ugb3IgZ2V0KSBhcyBjb21wdXRlZCBzb3VyY2UgZm9yICR7c3ViamVjdH0uJHtrZXl9LiBUaGlzIGlzIG5vdCBhbGxvd2VkLmApXG5cbiAgICBpZihNb2RlbC5pcyhhcmcwKSl7XG4gICAgICBjb25zdCBoYXNQYXJlbnQgPSBQQVJFTlQuZ2V0KHN1YmplY3QpIGFzIFQ7XG5cbiAgICAgIC8vIFRPRE86IG5vdGlmeSBvbiBkaXNjb3ZlcmVkIGNvbnRleHQgXG4gICAgICBmdW5jdGlvbiBhc3NpZ24odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB2YWx1ZS5nZXQoeCA9PiAoYXJnMSBhcyBGdW5jdGlvbikoeCwga2V5KSk7XG5cbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZighaGFzUGFyZW50ICYmIGFyZzEgPT09IHRydWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdWJqZWN0fSBtYXkgb25seSBleGlzdCBhcyBhIGNoaWxkIG9mIHR5cGUgJHthcmcwfS5gKTtcbiAgICAgIGVsc2UgaWYoaGFzUGFyZW50KVxuICAgICAgICBpZihoYXNQYXJlbnQgaW5zdGFuY2VvZiBhcmcwKXtcbiAgICAgICAgICBhc3NpZ24oaGFzUGFyZW50KTtcbiAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGFyZzEgPT09IHRydWUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOZXcgJHtzdWJqZWN0fSBjcmVhdGVkIGFzIGNoaWxkIG9mICR7aGFzUGFyZW50fSwgYnV0IG11c3QgYmUgaW5zdGFuY2VvZiAke2FyZzB9LmApO1xuIFxuICAgICAgQ29udGV4dC5nZXQoc3ViamVjdCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldChhcmcwKTtcblxuICAgICAgICBpZihtb2RlbClcbiAgICAgICAgICBhc3NpZ24obW9kZWwpO1xuICAgICAgICBlbHNlIGlmKGFyZzEgIT09IGZhbHNlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgJHthcmcwfSBub3QgZm91bmQgaW4gY29udGV4dCBmb3IgJHtzdWJqZWN0fS5gKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldDogYXJnMSAhPT0gZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGxldCBmcm9tID0gc3ViamVjdDtcbiAgICBcbiAgICBpZihhcmcwIGluc3RhbmNlb2YgTW9kZWwpe1xuICAgICAgZnJvbSA9IGFyZzA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZm4gPSBNRVRIT0QuZ2V0KGFyZzApIHx8IGFyZzA7XG4gICAgICBhcmcxID0gKChwLCBrKSA9PiBmbi5jYWxsKHAsIGssIHApKSBhcyBnZXQuRWZmZWN0PFQ+O1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZTogZ2V0LlNvdXJjZTxUPiA9IHJlc29sdmUgPT4gcmVzb2x2ZShmcm9tKTtcbiAgICBjb25zdCBnZXR0ZXIgPSBhcmcxIGFzIGdldC5Db21wdXRlPFIsIFQ+O1xuXG4gICAgbGV0IHJlc2V0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGlzQXN5bmM6IGJvb2xlYW47XG4gICAgbGV0IHByb3h5OiBhbnk7XG5cbiAgICBmdW5jdGlvbiBjb25uZWN0KG1vZGVsOiBNb2RlbCl7XG4gICAgICByZXNldCA9IGNyZWF0ZUVmZmVjdChtb2RlbCwgY3VycmVudCA9PiB7XG4gICAgICAgIHByb3h5ID0gY3VycmVudDtcblxuICAgICAgICBpZighKGtleSBpbiBzdGF0ZSkgfHwgU1RBTEUuZGVsZXRlKGNvbXB1dGUpKVxuICAgICAgICAgIGNvbXB1dGUoIXJlc2V0KTtcblxuICAgICAgICByZXR1cm4gKGRpZFVwZGF0ZSkgPT4ge1xuICAgICAgICAgIGlmKGRpZFVwZGF0ZSl7XG4gICAgICAgICAgICBTVEFMRS5hZGQoY29tcHV0ZSk7XG4gICAgICAgICAgICBldmVudChzdWJqZWN0LCBrZXksIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sIGZhbHNlKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGUoaW5pdGlhbD86IGJvb2xlYW4pe1xuICAgICAgbGV0IG5leHQ6IFIgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHQgPSBnZXR0ZXIuY2FsbChwcm94eSwgcHJveHksIGtleSk7XG4gICAgICB9XG4gICAgICBjYXRjaChlcnIpe1xuICAgICAgICBjb25zb2xlLndhcm4oYEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlICR7aW5pdGlhbCA/IFwiaW5pdGlhbGl6aW5nXCIgOiBcInJlZnJlc2hpbmdcIn0gJHtzdWJqZWN0fS4ke2tleX0uYClcblxuICAgICAgICBpZihpbml0aWFsKVxuICAgICAgICAgIHRocm93IGVycjtcblxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIG5leHQsICFpc0FzeW5jKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYoIXByb3h5KXtcbiAgICAgICAgc291cmNlKGNvbm5lY3QpO1xuICAgICAgICBpc0FzeW5jID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYoU1RBTEUuZGVsZXRlKGNvbXB1dGUpKVxuICAgICAgICBjb21wdXRlKCk7XG5cbiAgICAgIHJldHVybiBmZXRjaChzdWJqZWN0LCBrZXksICFwcm94eSkgYXMgVDtcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCB7IGdldCB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFTLG9CQUFvQjtBQUM3QixTQUFTLE9BQU8sUUFBUSxPQUFPLFFBQVEsT0FBTyxjQUFjO0FBQzVELFNBQVMsV0FBVztBQUlwQixNQUFNLFFBQVEsb0JBQUksUUFBb0I7QUEwRHRDLFNBQVMsSUFDUCxNQUNBLE1BQTBCO0FBRTFCLFNBQU8sSUFBSSxDQUFDLEtBQUssU0FBUyxVQUFVO0FBQ2xDLFFBQUcsT0FBTyxRQUFRO0FBQ2hCLFlBQU0sSUFBSSxNQUFNLHVGQUF1RixPQUFPLElBQUksR0FBRyx3QkFBd0I7QUFFL0ksUUFBRyxNQUFNLEdBQUcsSUFBSSxHQUFFO0FBSWhCLFVBQVNBLFVBQVQsU0FBZ0IsT0FBVTtBQUN4QixZQUFJLE9BQU8sUUFBUTtBQUNqQixnQkFBTSxJQUFJLE9BQU0sS0FBa0IsR0FBRyxHQUFHLENBQUM7QUFFM0MsZUFBTyxTQUFTLEtBQUssS0FBSztBQUFBLE1BQzVCO0FBTFMsbUJBQUFBO0FBSFQsWUFBTSxZQUFZLE9BQU8sSUFBSSxPQUFPO0FBVXBDLFVBQUcsQ0FBQyxhQUFhLFNBQVM7QUFDeEIsY0FBTSxJQUFJLE1BQU0sR0FBRyxPQUFPLHNDQUFzQyxJQUFJLEdBQUc7QUFBQSxlQUNqRTtBQUNOLFlBQUcscUJBQXFCLE1BQUs7QUFDM0IsVUFBQUEsUUFBTyxTQUFTO0FBQ2hCLGlCQUFPLENBQUM7QUFBQSxRQUNWLFdBQ1EsU0FBUztBQUNmLGdCQUFNLElBQUksTUFBTSxPQUFPLE9BQU8sd0JBQXdCLFNBQVMsNEJBQTRCLElBQUksR0FBRztBQUFBO0FBRXRHLGNBQVEsSUFBSSxTQUFTLENBQUMsWUFBWTtBQUNoQyxjQUFNLFFBQVEsUUFBUSxJQUFJLElBQUk7QUFFOUIsWUFBRztBQUNELFVBQUFBLFFBQU8sS0FBSztBQUFBLGlCQUNOLFNBQVM7QUFDZixnQkFBTSxJQUFJLE1BQU0sWUFBWSxJQUFJLDZCQUE2QixPQUFPLEdBQUc7QUFBQSxNQUMzRSxDQUFDO0FBRUQsYUFBTztBQUFBLFFBQ0wsS0FBSyxTQUFTO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPO0FBRVgsUUFBRyxnQkFBZ0IsT0FBTTtBQUN2QixhQUFPO0FBQUEsSUFDVCxPQUNLO0FBQ0gsWUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUs7QUFDL0IsYUFBUSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNuQztBQUVBLFVBQU0sU0FBd0IsYUFBVyxRQUFRLElBQUk7QUFDckQsVUFBTSxTQUFTO0FBRWYsUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBRUosYUFBUyxRQUFRLE9BQWE7QUFDNUIsY0FBUSxhQUFhLE9BQU8sYUFBVztBQUNyQyxnQkFBUTtBQUVSLFlBQUcsRUFBRSxPQUFPLFVBQVUsTUFBTSxPQUFPLE9BQU87QUFDeEMsa0JBQVEsQ0FBQyxLQUFLO0FBRWhCLGVBQU8sQ0FBQyxjQUFjO0FBQ3BCLGNBQUcsV0FBVTtBQUNYLGtCQUFNLElBQUksT0FBTztBQUNqQixrQkFBTSxTQUFTLEtBQUssSUFBSTtBQUFBLFVBQzFCO0FBQUEsUUFDRjtBQUFBLE1BQ0YsR0FBRyxLQUFLO0FBQUEsSUFDVjtBQUVBLGFBQVMsUUFBUSxTQUFrQjtBQUNqQyxVQUFJO0FBRUosVUFBSTtBQUNGLGVBQU8sT0FBTyxLQUFLLE9BQU8sT0FBTyxHQUFHO0FBQUEsTUFDdEMsU0FDTSxLQUFJO0FBQ1IsZ0JBQVEsS0FBSyxpQ0FBaUMsVUFBVSxpQkFBaUIsWUFBWSxJQUFJLE9BQU8sSUFBSSxHQUFHLEdBQUc7QUFFMUcsWUFBRztBQUNELGdCQUFNO0FBRVIsZ0JBQVEsTUFBTSxHQUFHO0FBQUEsTUFDbkI7QUFFQSxhQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsT0FBTztBQUFBLElBQ3JDO0FBRUEsV0FBTyxNQUFNO0FBQ1gsVUFBRyxDQUFDLE9BQU07QUFDUixlQUFPLE9BQU87QUFDZCxrQkFBVTtBQUFBLE1BQ1o7QUFFQSxVQUFHLE1BQU0sT0FBTyxPQUFPO0FBQ3JCLGdCQUFRO0FBRVYsYUFBTyxNQUFNLFNBQVMsS0FBSyxDQUFDLEtBQUs7QUFBQSxJQUNuQztBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJhc3NpZ24iXQp9Cg==
@@ -1,4 +1,4 @@
1
- import { context } from "../control";
1
+ import { addListener, context } from "../control";
2
2
  import { update } from "../model";
3
3
  import { use } from "./use";
4
4
  const { defineProperty, defineProperties } = Object;
@@ -22,8 +22,13 @@ function ref(arg, arg2) {
22
22
  const set = (value2) => {
23
23
  update(subject, key2, value2);
24
24
  };
25
- defineProperty(set, "current", { get, set });
26
- defineProperty(set, "get", { value: get });
25
+ defineProperties(set, {
26
+ current: { get, set },
27
+ get: { value: get },
28
+ on: {
29
+ value: (callback) => addListener(subject, () => callback(state[key2]), key2)
30
+ }
31
+ });
27
32
  defineProperty(value, key2, { value: set });
28
33
  }
29
34
  });
@@ -51,7 +56,10 @@ function ref(arg, arg2) {
51
56
  state[key] = null;
52
57
  value = defineProperties(set, {
53
58
  current: { get, set },
54
- get: { value: get }
59
+ get: { value: get },
60
+ on: {
61
+ value: (callback) => addListener(subject, () => callback(state[key]), key)
62
+ }
55
63
  });
56
64
  }
57
65
  defineProperty(subject, key, { value });
@@ -60,4 +68,4 @@ function ref(arg, arg2) {
60
68
  export {
61
69
  ref
62
70
  };
63
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3JlZi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJy4uL2NvbnRyb2wnO1xuaW1wb3J0IHsgTW9kZWwsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgeyBkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydGllcyB9ID0gT2JqZWN0O1xuXG5kZWNsYXJlIG5hbWVzcGFjZSByZWYge1xuICB0eXBlIENhbGxiYWNrPFQ+ID0gKGFyZ3VtZW50OiBUKSA9PlxuICAgICgobmV4dDogVCB8IG51bGwpID0+IHZvaWQpIHwgUHJvbWlzZTx2b2lkPiB8IHZvaWQgfCBib29sZWFuO1xuXG4gIGludGVyZmFjZSBPYmplY3Q8VCA9IGFueT4ge1xuICAgIChuZXh0OiBUIHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKiogQ3VycmVudCB2YWx1ZSBoZWxkIGJ5IHRoaXMgcmVmZXJlbmNlLiAqL1xuICAgIGN1cnJlbnQ6IFQgfCBudWxsO1xuXG4gICAgLyoqIFJldHJpZXZlIGN1cnJlbnQgdmFsdWUuICovXG4gICAgZ2V0KCk6IFQgfCBudWxsO1xuICB9XG5cbiAgLyoqIE9iamVjdCB3aXRoIHJlZmVyZW5jZXMgdG8gYWxsIG1hbmFnZWQgdmFsdWVzIG9mIGBUYC4gKi9cblxuICAvKiogT2JqZWN0IHdpdGggcmVmZXJlbmNlcyB0byBhbGwgbWFuYWdlZCB2YWx1ZXMgb2YgYFRgLiAqL1xuICB0eXBlIFByb3h5PFQgZXh0ZW5kcyBNb2RlbD4gPVxuICAgICYgeyBbUCBpbiBNb2RlbC5GaWVsZDxUPl0tPzogT2JqZWN0PFRbUF0+IH1cbiAgICAmIHsgZ2V0KCk6IFQgfTtcblxuICB0eXBlIEN1c3RvbVByb3h5PFQgZXh0ZW5kcyBNb2RlbCwgUj4gPVxuICAgICYgeyBbUCBpbiBNb2RlbC5GaWVsZDxUPl0tPzogUiB9XG4gICAgJiB7IGdldCgpOiBUIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCByZWZlcmVuY2VzIHRvIGFsbCBtYW5hZ2VkIHZhbHVlcy5cbiAqIEVhY2ggcHJvcGVydHkgaXMgYSBmdW5jdGlvbiB0byBzZXQgdmFsdWUgaW4gc3RhdGUgd2hlbiBpbnZva2VkLlxuICpcbiAqICpQcm9wZXJ0aWVzIGFyZSBzaW11bHRhbmVvdXNseSBhIHJlZi1mdW5jdGlvbiBhbmQgcmVmLW9iamVjdCwgdXNlIGFzIG5lZWRlZC4qXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIHRvIHJlZmVyZW5jZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VCBleHRlbmRzIE1vZGVsPiAodGFyZ2V0OiBUKTogcmVmLlByb3h5PFQ+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIGJhc2VkIG9uIG1hbmFnZWQgdmFsdWVzLlxuICogRWFjaCBwcm9wZXJ0eSB3aWxsIGludm9rZSBtYXBwZXIgZnVuY3Rpb24gb24gZmlyc3QgYWNjZXNzIHN1cHBseVxuICogdGhlIGl0cyByZXR1cm4gdmFsdWUgZ29pbmcgZm9yd2FyZC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gU291cmNlIG1vZGVsIGZyb20gd2hpY2ggdG8gcmVmZXJlbmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBtYXBwZXIgLSBGdW5jdGlvbiBwcm9kdWNpbmcgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGZvciBhbnkgZ2l2ZW4gcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8TyBleHRlbmRzIE1vZGVsLCBSPlxuICAodGFyZ2V0OiBPLCBtYXBwZXI6IChrZXk6IE1vZGVsLkZpZWxkPE8+KSA9PiBSKTogcmVmLkN1c3RvbVByb3h5PE8sIFI+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZWYtY29tcGF0aWJsZSBwcm9wZXJ0eS5cbiAqIFdpbGwgcGVyc2lzdCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdG8gdGhpcyBhcmUgbWFkZSBwYXJ0IG9mIGNvbnRyb2xsZXIgZXZlbnQtc3RyZWFtLlxuICpcbiAqICpPdXRwdXQgaXMgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHN5bmNocm9ub3VzbHkgZmlyZSB3aGVuIHJlZmVyZW5jZSBpcyBmaXJzdCBzZXQgb3IgZG9lcyB1cGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VD4gKGNhbGxiYWNrPzogcmVmLkNhbGxiYWNrPFQ+KTogcmVmLk9iamVjdDxUPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVmLWNvbXBhdGlibGUgcHJvcGVydHkuXG4gKiBXaWxsIHBlcnNpc3QgdmFsdWUsIGFuZCB1cGRhdGVzIHRvIHRoaXMgYXJlIG1hZGUgcGFydCBvZiBjb250cm9sbGVyIGV2ZW50LXN0cmVhbS5cbiAqXG4gKiAqT3V0cHV0IGlzIHNpbXVsdGFuZW91c2x5IGEgcmVmLWZ1bmN0aW9uIGFuZCByZWYtb2JqZWN0LCB1c2UgYXMgbmVlZGVkLipcbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byBzeW5jaHJvbm91c2x5IGZpcmUgd2hlbiByZWZlcmVuY2UgaXMgZmlyc3Qgc2V0IG9yIGRvZXMgdXBkYXRlLlxuICogQHBhcmFtIGlnbm9yZU51bGwgLSBEZWZhdWx0IGB0cnVlYC4gSWYgYGZhbHNlYCwgd2lsbCBzdGlsbCBjYWxsYmFjayB3aXRoIGBudWxsYC5cbiAqL1xuZnVuY3Rpb24gcmVmIDxUPiAoY2FsbGJhY2s6IHJlZi5DYWxsYmFjazxUIHwgbnVsbD4sIGlnbm9yZU51bGw6IGJvb2xlYW4pOiByZWYuT2JqZWN0PFQ+O1xuXG5mdW5jdGlvbiByZWY8VD4oXG4gIGFyZz86IHJlZi5DYWxsYmFjazxUPiB8IE1vZGVsLFxuICBhcmcyPzogKChrZXk6IHN0cmluZykgPT4gYW55KSB8IGJvb2xlYW4pe1xuXG4gIHJldHVybiB1c2U8VD4oKGtleSwgc3ViamVjdCwgc3RhdGUpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB7fTtcblxuICAgIGlmKGFyZyA9PT0gc3ViamVjdClcbiAgICAgIHN1YmplY3QuZ2V0KCgpID0+IHtcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBzdGF0ZSlcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZ2V0KCl7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gYXJnMihrZXkpO1xuICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCBrZXksIHsgdmFsdWU6IG91dCB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3RhdGVba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHNldCA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCB2YWx1ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShzZXQsIFwiY3VycmVudFwiLCB7IGdldCwgc2V0IH0pO1xuICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkoc2V0LCBcImdldFwiLCB7IHZhbHVlOiBnZXQgfSk7XG4gICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7IHZhbHVlOiBzZXQgfSk7XG4gICAgICAgICAgfVxuICAgICAgfSlcblxuICAgIGVsc2UgaWYodHlwZW9mIGFyZyA9PSBcIm9iamVjdFwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgb2JqZWN0IHdoaWNoIGlzIG5vdCAndGhpcydcIik7XG5cbiAgICBlbHNlIHtcbiAgICAgIGxldCB1bnNldDogKChuZXh0OiBUKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgZ2V0ID0gKCkgPT4gc3RhdGVba2V5XTtcbiAgICAgIGNvbnN0IHNldCA9ICh2YWx1ZT86IGFueSkgPT4ge1xuICAgICAgICBpZighdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpIHx8ICFhcmcpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmKHVuc2V0KVxuICAgICAgICAgIHVuc2V0ID0gdm9pZCB1bnNldCh2YWx1ZSk7XG4gICAgXG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsICYmIGFyZzIgIT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjdHggPSBjb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IG91dCA9IGFyZy5jYWxsKHN1YmplY3QsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgZmx1c2ggPSBjdHgoKTtcblxuICAgICAgICB1bnNldCA9IGtleSA9PiB7XG4gICAgICAgICAgaWYodHlwZW9mIG91dCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBvdXQoa2V5KTtcblxuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gIFxuICAgICAgc3RhdGVba2V5XSA9IG51bGw7XG4gICAgICB2YWx1ZSA9IGRlZmluZVByb3BlcnRpZXMoc2V0LCB7XG4gICAgICAgIGN1cnJlbnQ6IHsgZ2V0LCBzZXQgfSxcbiAgICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQgfVxuICAgICAgfSkgYXMgcmVmLk9iamVjdDxUPjtcbiAgICB9XG5cbiAgICBkZWZpbmVQcm9wZXJ0eShzdWJqZWN0LCBrZXksIHsgdmFsdWUgfSk7XG4gIH0pXG59XG5cbmV4cG9ydCB7IHJlZiB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxlQUFlO0FBQ3hCLFNBQWdCLGNBQWM7QUFDOUIsU0FBUyxXQUFXO0FBRXBCLE1BQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUFzRTdDLFNBQVMsSUFDUCxLQUNBLE1BQXdDO0FBRXhDLFNBQU8sSUFBTyxDQUFDLEtBQUssU0FBUyxVQUFVO0FBQ3JDLFFBQUksUUFBUSxDQUFDO0FBRWIsUUFBRyxRQUFRO0FBQ1QsY0FBUSxJQUFJLE1BQU07QUFDaEIsbUJBQVVBLFFBQU87QUFDZixjQUFHLE9BQU8sUUFBUTtBQUNoQiwyQkFBZSxPQUFPQSxNQUFLO0FBQUEsY0FDekIsY0FBYztBQUFBLGNBQ2QsTUFBSztBQUNILHNCQUFNLE1BQU0sS0FBS0EsSUFBRztBQUNwQiwrQkFBZSxPQUFPQSxNQUFLLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsdUJBQU87QUFBQSxjQUNUO0FBQUEsWUFDRixDQUFDO0FBQUEsZUFDRTtBQUNILGtCQUFNLE1BQU0sTUFBTSxNQUFNQSxJQUFHO0FBQzNCLGtCQUFNLE1BQU0sQ0FBQ0MsV0FBbUI7QUFDOUIscUJBQU8sU0FBU0QsTUFBS0MsTUFBSztBQUFBLFlBQzVCO0FBRUEsMkJBQWUsS0FBSyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFDM0MsMkJBQWUsS0FBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsMkJBQWUsT0FBT0QsTUFBSyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsVUFDM0M7QUFBQSxNQUNKLENBQUM7QUFBQSxhQUVLLE9BQU8sT0FBTztBQUNwQixZQUFNLElBQUksTUFBTSw2REFBNkQ7QUFBQSxTQUUxRTtBQUNILFVBQUk7QUFFSixZQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUc7QUFDM0IsWUFBTSxNQUFNLENBQUNDLFdBQWdCO0FBQzNCLFlBQUcsQ0FBQyxPQUFPLFNBQVMsS0FBS0EsTUFBSyxLQUFLLENBQUM7QUFDbEM7QUFFRixZQUFHO0FBQ0Qsa0JBQVEsS0FBSyxNQUFNQSxNQUFLO0FBRTFCLFlBQUdBLFdBQVUsUUFBUSxTQUFTO0FBQzVCO0FBRUYsY0FBTSxNQUFNLFFBQVE7QUFDcEIsY0FBTSxNQUFNLElBQUksS0FBSyxTQUFTQSxNQUFLO0FBQ25DLGNBQU0sUUFBUSxJQUFJO0FBRWxCLGdCQUFRLENBQUFELFNBQU87QUFDYixjQUFHLE9BQU8sT0FBTztBQUNmLGdCQUFJQSxJQUFHO0FBRVQsZ0JBQU07QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUVBLFlBQU0sR0FBRyxJQUFJO0FBQ2IsY0FBUSxpQkFBaUIsS0FBSztBQUFBLFFBQzVCLFNBQVMsRUFBRSxLQUFLLElBQUk7QUFBQSxRQUNwQixLQUFLLEVBQUUsT0FBTyxJQUFJO0FBQUEsTUFDcEIsQ0FBQztBQUFBLElBQ0g7QUFFQSxtQkFBZSxTQUFTLEtBQUssRUFBRSxNQUFNLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbImtleSIsICJ2YWx1ZSJdCn0K
71
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3JlZi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIGNvbnRleHQgfSBmcm9tICcuLi9jb250cm9sJztcbmltcG9ydCB7IE1vZGVsLCB1cGRhdGUgfSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQgeyB1c2UgfSBmcm9tICcuL3VzZSc7XG5cbmNvbnN0IHsgZGVmaW5lUHJvcGVydHksIGRlZmluZVByb3BlcnRpZXMgfSA9IE9iamVjdDtcblxuZGVjbGFyZSBuYW1lc3BhY2UgcmVmIHtcbiAgdHlwZSBDYWxsYmFjazxUPiA9IChhcmd1bWVudDogVCkgPT5cbiAgICAoKG5leHQ6IFQgfCBudWxsKSA9PiB2b2lkKSB8IFByb21pc2U8dm9pZD4gfCB2b2lkIHwgYm9vbGVhbjtcblxuICBpbnRlcmZhY2UgT2JqZWN0PFQgPSBhbnk+IHtcbiAgICAobmV4dDogVCB8IG51bGwpOiB2b2lkO1xuXG4gICAgLyoqIEN1cnJlbnQgdmFsdWUgaGVsZCBieSB0aGlzIHJlZmVyZW5jZS4gKi9cbiAgICBjdXJyZW50OiBUIHwgbnVsbDtcblxuICAgIC8qKiBcbiAgICAgKiBTdWJzY3JpYmUgdG8gY2hhbmdlcyBvZiB0aGlzIHJlZmVyZW5jZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGUgY3VycmVudCB2YWx1ZSB3aGVuIGl0IGNoYW5nZXMuXG4gICAgICogQHJldHVybnMgVW5zdWJzY3JpYmUgZnVuY3Rpb24gdG8gc3RvcCBsaXN0ZW5pbmcgdG8gY2hhbmdlcy5cbiAgICAgKi9cbiAgICBvbihjYWxsYmFjazogKHZhbHVlOiBUKSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcblxuICAgIC8qKiBSZXRyaWV2ZSBjdXJyZW50IHZhbHVlLiAqL1xuICAgIGdldCgpOiBUIHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBPYmplY3Qgd2l0aCByZWZlcmVuY2VzIHRvIGFsbCBtYW5hZ2VkIHZhbHVlcyBvZiBgVGAuICovXG5cbiAgLyoqIE9iamVjdCB3aXRoIHJlZmVyZW5jZXMgdG8gYWxsIG1hbmFnZWQgdmFsdWVzIG9mIGBUYC4gKi9cbiAgdHlwZSBQcm94eTxUIGV4dGVuZHMgTW9kZWw+ID1cbiAgICAmIHsgW1AgaW4gTW9kZWwuRmllbGQ8VD5dLT86IE9iamVjdDxUW1BdPiB9XG4gICAgJiB7IGdldCgpOiBUIH07XG5cbiAgdHlwZSBDdXN0b21Qcm94eTxUIGV4dGVuZHMgTW9kZWwsIFI+ID1cbiAgICAmIHsgW1AgaW4gTW9kZWwuRmllbGQ8VD5dLT86IFIgfVxuICAgICYgeyBnZXQoKTogVCB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggcmVmZXJlbmNlcyB0byBhbGwgbWFuYWdlZCB2YWx1ZXMuXG4gKiBFYWNoIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gdG8gc2V0IHZhbHVlIGluIHN0YXRlIHdoZW4gaW52b2tlZC5cbiAqXG4gKiAqUHJvcGVydGllcyBhcmUgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBTb3VyY2UgbW9kZWwgZnJvbSB3aGljaCB0byByZWZlcmVuY2UgdmFsdWVzLlxuICovXG5mdW5jdGlvbiByZWYgPFQgZXh0ZW5kcyBNb2RlbD4gKHRhcmdldDogVCk6IHJlZi5Qcm94eTxUPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBiYXNlZCBvbiBtYW5hZ2VkIHZhbHVlcy5cbiAqIEVhY2ggcHJvcGVydHkgd2lsbCBpbnZva2UgbWFwcGVyIGZ1bmN0aW9uIG9uIGZpcnN0IGFjY2VzcyBzdXBwbHlcbiAqIHRoZSBpdHMgcmV0dXJuIHZhbHVlIGdvaW5nIGZvcndhcmQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIHRvIHJlZmVyZW5jZSB2YWx1ZXMuXG4gKiBAcGFyYW0gbWFwcGVyIC0gRnVuY3Rpb24gcHJvZHVjaW5nIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYW55IGdpdmVuIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiByZWYgPE8gZXh0ZW5kcyBNb2RlbCwgUj5cbiAgKHRhcmdldDogTywgbWFwcGVyOiAoa2V5OiBNb2RlbC5GaWVsZDxPPikgPT4gUik6IHJlZi5DdXN0b21Qcm94eTxPLCBSPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVmLWNvbXBhdGlibGUgcHJvcGVydHkuXG4gKiBXaWxsIHBlcnNpc3QgdmFsdWUsIGFuZCB1cGRhdGVzIHRvIHRoaXMgYXJlIG1hZGUgcGFydCBvZiBjb250cm9sbGVyIGV2ZW50LXN0cmVhbS5cbiAqXG4gKiAqT3V0cHV0IGlzIHNpbXVsdGFuZW91c2x5IGEgcmVmLWZ1bmN0aW9uIGFuZCByZWYtb2JqZWN0LCB1c2UgYXMgbmVlZGVkLipcbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byBzeW5jaHJvbm91c2x5IGZpcmUgd2hlbiByZWZlcmVuY2UgaXMgZmlyc3Qgc2V0IG9yIGRvZXMgdXBkYXRlLlxuICovXG5mdW5jdGlvbiByZWYgPFQ+IChjYWxsYmFjaz86IHJlZi5DYWxsYmFjazxUPik6IHJlZi5PYmplY3Q8VD47XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZi1jb21wYXRpYmxlIHByb3BlcnR5LlxuICogV2lsbCBwZXJzaXN0IHZhbHVlLCBhbmQgdXBkYXRlcyB0byB0aGlzIGFyZSBtYWRlIHBhcnQgb2YgY29udHJvbGxlciBldmVudC1zdHJlYW0uXG4gKlxuICogKk91dHB1dCBpcyBzaW11bHRhbmVvdXNseSBhIHJlZi1mdW5jdGlvbiBhbmQgcmVmLW9iamVjdCwgdXNlIGFzIG5lZWRlZC4qXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gc3luY2hyb25vdXNseSBmaXJlIHdoZW4gcmVmZXJlbmNlIGlzIGZpcnN0IHNldCBvciBkb2VzIHVwZGF0ZS5cbiAqIEBwYXJhbSBpZ25vcmVOdWxsIC0gRGVmYXVsdCBgdHJ1ZWAuIElmIGBmYWxzZWAsIHdpbGwgc3RpbGwgY2FsbGJhY2sgd2l0aCBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VD4gKGNhbGxiYWNrOiByZWYuQ2FsbGJhY2s8VCB8IG51bGw+LCBpZ25vcmVOdWxsOiBib29sZWFuKTogcmVmLk9iamVjdDxUPjtcblxuZnVuY3Rpb24gcmVmPFQ+KFxuICBhcmc/OiByZWYuQ2FsbGJhY2s8VD4gfCBNb2RlbCxcbiAgYXJnMj86ICgoa2V5OiBzdHJpbmcpID0+IGFueSkgfCBib29sZWFuKXtcblxuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QsIHN0YXRlKSA9PiB7XG4gICAgbGV0IHZhbHVlID0ge307XG5cbiAgICBpZihhcmcgPT09IHN1YmplY3QpXG4gICAgICBzdWJqZWN0LmdldCgoKSA9PiB7XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gc3RhdGUpXG4gICAgICAgICAgaWYodHlwZW9mIGFyZzIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodmFsdWUsIGtleSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGdldCgpe1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dCA9IGFyZzIoa2V5KTtcbiAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7IHZhbHVlOiBvdXQgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdldCA9ICgpID0+IHN0YXRlW2tleV07XG4gICAgICAgICAgICBjb25zdCBzZXQgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkZWZpbmVQcm9wZXJ0aWVzKHNldCwge1xuICAgICAgICAgICAgICBjdXJyZW50OiB7IGdldCwgc2V0ICB9LFxuICAgICAgICAgICAgICBnZXQ6IHsgdmFsdWU6IGdldCB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAoY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gdm9pZCkgPT4gXG4gICAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihzdWJqZWN0LCAoKSA9PiBjYWxsYmFjayhzdGF0ZVtrZXldKSwga2V5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodmFsdWUsIGtleSwgeyB2YWx1ZTogc2V0IH0pO1xuICAgICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICBlbHNlIGlmKHR5cGVvZiBhcmcgPT0gXCJvYmplY3RcIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZiBpbnN0cnVjdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9iamVjdCB3aGljaCBpcyBub3QgJ3RoaXMnXCIpO1xuXG4gICAgZWxzZSB7XG4gICAgICBsZXQgdW5zZXQ6ICgobmV4dDogVCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGdldCA9ICgpID0+IHN0YXRlW2tleV07XG4gICAgICBjb25zdCBzZXQgPSAodmFsdWU/OiBhbnkpID0+IHtcbiAgICAgICAgaWYoIXVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKSB8fCAhYXJnKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZih1bnNldClcbiAgICAgICAgICB1bnNldCA9IHZvaWQgdW5zZXQodmFsdWUpO1xuICAgIFxuICAgICAgICBpZih2YWx1ZSA9PT0gbnVsbCAmJiBhcmcyICE9PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3R4ID0gY29udGV4dCgpO1xuICAgICAgICBjb25zdCBvdXQgPSBhcmcuY2FsbChzdWJqZWN0LCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGZsdXNoID0gY3R4KCk7XG5cbiAgICAgICAgdW5zZXQgPSBrZXkgPT4ge1xuICAgICAgICAgIGlmKHR5cGVvZiBvdXQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgb3V0KGtleSk7XG5cbiAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICBcbiAgICAgIHN0YXRlW2tleV0gPSBudWxsO1xuICAgICAgdmFsdWUgPSBkZWZpbmVQcm9wZXJ0aWVzKHNldCwge1xuICAgICAgICBjdXJyZW50OiB7IGdldCwgc2V0IH0sXG4gICAgICAgIGdldDogeyB2YWx1ZTogZ2V0IH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgdmFsdWU6IChjYWxsYmFjazogKHZhbHVlOiBUKSA9PiB2b2lkKSA9PiBcbiAgICAgICAgICAgIGFkZExpc3RlbmVyKHN1YmplY3QsICgpID0+IGNhbGxiYWNrKHN0YXRlW2tleV0pLCBrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pIGFzIHJlZi5PYmplY3Q8VD47XG4gICAgfVxuXG4gICAgZGVmaW5lUHJvcGVydHkoc3ViamVjdCwga2V5LCB7IHZhbHVlIH0pO1xuICB9KVxufVxuXG5leHBvcnQgeyByZWYgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsYUFBYSxlQUFlO0FBQ3JDLFNBQWdCLGNBQWM7QUFDOUIsU0FBUyxXQUFXO0FBRXBCLE1BQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUE4RTdDLFNBQVMsSUFDUCxLQUNBLE1BQXdDO0FBRXhDLFNBQU8sSUFBTyxDQUFDLEtBQUssU0FBUyxVQUFVO0FBQ3JDLFFBQUksUUFBUSxDQUFDO0FBRWIsUUFBRyxRQUFRO0FBQ1QsY0FBUSxJQUFJLE1BQU07QUFDaEIsbUJBQVVBLFFBQU87QUFDZixjQUFHLE9BQU8sUUFBUTtBQUNoQiwyQkFBZSxPQUFPQSxNQUFLO0FBQUEsY0FDekIsY0FBYztBQUFBLGNBQ2QsTUFBSztBQUNILHNCQUFNLE1BQU0sS0FBS0EsSUFBRztBQUNwQiwrQkFBZSxPQUFPQSxNQUFLLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsdUJBQU87QUFBQSxjQUNUO0FBQUEsWUFDRixDQUFDO0FBQUEsZUFDRTtBQUNILGtCQUFNLE1BQU0sTUFBTSxNQUFNQSxJQUFHO0FBQzNCLGtCQUFNLE1BQU0sQ0FBQ0MsV0FBbUI7QUFDOUIscUJBQU8sU0FBU0QsTUFBS0MsTUFBSztBQUFBLFlBQzVCO0FBRUEsNkJBQWlCLEtBQUs7QUFBQSxjQUNwQixTQUFTLEVBQUUsS0FBSyxJQUFLO0FBQUEsY0FDckIsS0FBSyxFQUFFLE9BQU8sSUFBSTtBQUFBLGNBQ2xCLElBQUk7QUFBQSxnQkFDRixPQUFPLENBQUMsYUFDTixZQUFZLFNBQVMsTUFBTSxTQUFTLE1BQU1ELElBQUcsQ0FBQyxHQUFHQSxJQUFHO0FBQUEsY0FDeEQ7QUFBQSxZQUNGLENBQUM7QUFFRCwyQkFBZSxPQUFPQSxNQUFLLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFBQSxVQUMzQztBQUFBLE1BQ0osQ0FBQztBQUFBLGFBRUssT0FBTyxPQUFPO0FBQ3BCLFlBQU0sSUFBSSxNQUFNLDZEQUE2RDtBQUFBLFNBRTFFO0FBQ0gsVUFBSTtBQUVKLFlBQU0sTUFBTSxNQUFNLE1BQU0sR0FBRztBQUMzQixZQUFNLE1BQU0sQ0FBQ0MsV0FBZ0I7QUFDM0IsWUFBRyxDQUFDLE9BQU8sU0FBUyxLQUFLQSxNQUFLLEtBQUssQ0FBQztBQUNsQztBQUVGLFlBQUc7QUFDRCxrQkFBUSxLQUFLLE1BQU1BLE1BQUs7QUFFMUIsWUFBR0EsV0FBVSxRQUFRLFNBQVM7QUFDNUI7QUFFRixjQUFNLE1BQU0sUUFBUTtBQUNwQixjQUFNLE1BQU0sSUFBSSxLQUFLLFNBQVNBLE1BQUs7QUFDbkMsY0FBTSxRQUFRLElBQUk7QUFFbEIsZ0JBQVEsQ0FBQUQsU0FBTztBQUNiLGNBQUcsT0FBTyxPQUFPO0FBQ2YsZ0JBQUlBLElBQUc7QUFFVCxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBRUEsWUFBTSxHQUFHLElBQUk7QUFDYixjQUFRLGlCQUFpQixLQUFLO0FBQUEsUUFDNUIsU0FBUyxFQUFFLEtBQUssSUFBSTtBQUFBLFFBQ3BCLEtBQUssRUFBRSxPQUFPLElBQUk7QUFBQSxRQUNsQixJQUFJO0FBQUEsVUFDRixPQUFPLENBQUMsYUFDTixZQUFZLFNBQVMsTUFBTSxTQUFTLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRztBQUFBLFFBQ3hEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLG1CQUFlLFNBQVMsS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUFBLEVBQ3hDLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsia2V5IiwgInZhbHVlIl0KfQo=
@@ -1,45 +1,48 @@
1
1
  import { watch } from "../control";
2
2
  import { fetch, mayAdopt, Model, PARENT, STATE, update } from "../model";
3
- const INSTRUCT = /* @__PURE__ */ new Map();
3
+ const INSTRUCTION = /* @__PURE__ */ new Map();
4
4
  function use(arg1, arg2) {
5
5
  const token = Symbol("instruction");
6
- if (Model.is(arg1)) {
7
- const Type = arg1;
8
- arg1 = (key, subject) => {
9
- function set(next) {
10
- if (next ? !(next instanceof Type) : arg2 !== false)
11
- throw new Error(`${subject}.${key} expected Model of type ${Type} but got ${next && next.constructor}.`);
12
- update(subject, key, next);
13
- if (next && typeof arg2 == "function")
14
- arg2(next);
15
- return false;
16
- }
17
- const value = new Type();
18
- set(value);
19
- PARENT.set(value, subject);
20
- return { set };
21
- };
22
- }
23
- INSTRUCT.set(token, arg1);
6
+ if (Model.is(arg1))
7
+ arg1 = child(arg1, arg2);
8
+ INSTRUCTION.set(token, arg1);
24
9
  return token;
25
10
  }
26
- Model.on((_, model) => {
27
- const state = STATE.get(model);
28
- for (const key in model) {
29
- const { value } = Object.getOwnPropertyDescriptor(model, key);
30
- const instruction = INSTRUCT.get(value);
11
+ function child(type, arg2) {
12
+ return (key, subject) => {
13
+ function set(next) {
14
+ if (next ? !(next instanceof type) : arg2 !== false)
15
+ throw new Error(`${subject}.${key} expected Model of type ${type} but got ${next && next.constructor}.`);
16
+ update(subject, key, next);
17
+ if (next && typeof arg2 == "function")
18
+ arg2(next);
19
+ return false;
20
+ }
21
+ const value = new type();
22
+ set(value);
23
+ PARENT.set(value, subject);
24
+ value.set();
25
+ return { set };
26
+ };
27
+ }
28
+ function init() {
29
+ const state = STATE.get(this);
30
+ for (const key in this) {
31
+ const { value } = Object.getOwnPropertyDescriptor(this, key);
32
+ const instruction = INSTRUCTION.get(value);
31
33
  if (!instruction) {
32
- mayAdopt(model, value);
34
+ mayAdopt(this, value);
33
35
  continue;
34
36
  }
35
- INSTRUCT.delete(value);
36
- delete model[key];
37
- const output = instruction.call(model, key, model, state);
37
+ INSTRUCTION.delete(value);
38
+ delete this[key];
39
+ const output = instruction.call(this, key, this, state);
38
40
  if (!output)
39
41
  continue;
40
42
  const desc = typeof output == "object" ? output : { get: output };
41
43
  if ("value" in desc)
42
44
  state[key] = desc.value;
45
+ const model = this;
43
46
  Object.defineProperty(model, key, {
44
47
  enumerable: desc.enumerable !== false,
45
48
  get() {
@@ -57,8 +60,9 @@ Model.on((_, model) => {
57
60
  });
58
61
  }
59
62
  return null;
60
- });
63
+ }
64
+ Model.on(init);
61
65
  export {
62
66
  use
63
67
  };
64
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi9jb250cm9sJztcbmltcG9ydCB7IGZldGNoLCBtYXlBZG9wdCwgTW9kZWwsIFBBUkVOVCwgU1RBVEUsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcblxuY29uc3QgSU5TVFJVQ1QgPSBuZXcgTWFwPHN5bWJvbCwgTW9kZWwuSW5zdHJ1Y3Rpb24+KCk7XG5cbmZ1bmN0aW9uIHVzZSA8VD4gKGluc3RydWN0aW9uOiBNb2RlbC5JbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5cbmZ1bmN0aW9uIHVzZSA8VCBleHRlbmRzIE1vZGVsPiAoVHlwZTogTW9kZWwuSW5pdDxUPiwgcmVxdWlyZWQ6IGZhbHNlKTogVCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gdXNlIDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5Jbml0PFQ+LCByZWFkeT86IChpOiBUKSA9PiB2b2lkKTogVDtcblxuZnVuY3Rpb24gdXNlKFxuICBhcmcxOiBNb2RlbC5Jbml0IHwgTW9kZWwuSW5zdHJ1Y3Rpb24sXG4gIGFyZzI/OiAoKGk6IE1vZGVsKSA9PiB2b2lkKSB8IGJvb2xlYW4pe1xuXG4gIGNvbnN0IHRva2VuID0gU3ltYm9sKFwiaW5zdHJ1Y3Rpb25cIik7XG5cbiAgaWYoTW9kZWwuaXMoYXJnMSkpe1xuICAgIGNvbnN0IFR5cGUgPSBhcmcxO1xuXG4gICAgYXJnMSA9IChrZXksIHN1YmplY3QpID0+IHtcbiAgICAgIGZ1bmN0aW9uIHNldChuZXh0OiBNb2RlbCB8IHVuZGVmaW5lZCl7XG4gICAgICAgIGlmKG5leHQgPyAhKG5leHQgaW5zdGFuY2VvZiBUeXBlKSA6IGFyZzIgIT09IGZhbHNlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdWJqZWN0fS4ke2tleX0gZXhwZWN0ZWQgTW9kZWwgb2YgdHlwZSAke1R5cGV9IGJ1dCBnb3QgJHtuZXh0ICYmIG5leHQuY29uc3RydWN0b3J9LmApO1xuICBcbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgbmV4dCk7XG4gIFxuICAgICAgICBpZihuZXh0ICYmIHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBhcmcyKG5leHQpO1xuICBcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IG5ldyBUeXBlKCk7XG5cbiAgICAgIHNldCh2YWx1ZSk7XG4gICAgICBQQVJFTlQuc2V0KHZhbHVlLCBzdWJqZWN0KTtcbiAgXG4gICAgICByZXR1cm4geyBzZXQgfTtcbiAgICB9XG4gIH1cblxuICBJTlNUUlVDVC5zZXQodG9rZW4sIGFyZzEpO1xuICByZXR1cm4gdG9rZW47XG59XG5cbk1vZGVsLm9uKChfLCBtb2RlbCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IFNUQVRFLmdldChtb2RlbCkhO1xuXG4gIGZvcihjb25zdCBrZXkgaW4gbW9kZWwpe1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobW9kZWwsIGtleSkhO1xuICAgIGNvbnN0IGluc3RydWN0aW9uID0gSU5TVFJVQ1QuZ2V0KHZhbHVlKTtcblxuICAgIGlmKCFpbnN0cnVjdGlvbil7XG4gICAgICBtYXlBZG9wdChtb2RlbCwgdmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgSU5TVFJVQ1QuZGVsZXRlKHZhbHVlKTtcbiAgICBkZWxldGUgKG1vZGVsIGFzIGFueSlba2V5XTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGluc3RydWN0aW9uLmNhbGwobW9kZWwsIGtleSwgbW9kZWwsIHN0YXRlKTtcblxuICAgIGlmKCFvdXRwdXQpXG4gICAgICBjb250aW51ZTtcblxuICAgIGNvbnN0IGRlc2MgPSB0eXBlb2Ygb3V0cHV0ID09IFwib2JqZWN0XCIgPyBvdXRwdXQgOiB7IGdldDogb3V0cHV0IH07XG5cbiAgICBpZihcInZhbHVlXCIgaW4gZGVzYylcbiAgICAgIHN0YXRlW2tleV0gPSBkZXNjLnZhbHVlO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZGVsLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSAhPT0gZmFsc2UsXG4gICAgICBnZXQodGhpczogTW9kZWwpe1xuICAgICAgICByZXR1cm4gd2F0Y2godGhpcywga2V5LCBcbiAgICAgICAgICB0eXBlb2YgZGVzYy5nZXQgPT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IGRlc2MuZ2V0KHRoaXMpXG4gICAgICAgICAgICA6IGZldGNoKG1vZGVsLCBrZXksIGRlc2MuZ2V0KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHNldChuZXh0KXtcbiAgICAgICAgaWYoZGVzYy5zZXQgPT09IGZhbHNlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbH0uJHtrZXl9IGlzIHJlYWQtb25seS5gKTtcblxuICAgICAgICB1cGRhdGUobW9kZWwsIGtleSwgbmV4dCwgZGVzYy5zZXQpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5leHBvcnQgeyB1c2UgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsYUFBYTtBQUN0QixTQUFTLE9BQU8sVUFBVSxPQUFPLFFBQVEsT0FBTyxjQUFjO0FBRTlELE1BQU0sV0FBVyxvQkFBSSxJQUErQjtBQVFwRCxTQUFTLElBQ1AsTUFDQSxNQUFzQztBQUV0QyxRQUFNLFFBQVEsT0FBTyxhQUFhO0FBRWxDLE1BQUcsTUFBTSxHQUFHLElBQUksR0FBRTtBQUNoQixVQUFNLE9BQU87QUFFYixXQUFPLENBQUMsS0FBSyxZQUFZO0FBQ3ZCLGVBQVMsSUFBSSxNQUF3QjtBQUNuQyxZQUFHLE9BQU8sRUFBRSxnQkFBZ0IsUUFBUSxTQUFTO0FBQzNDLGdCQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sSUFBSSxHQUFHLDJCQUEyQixJQUFJLFlBQVksUUFBUSxLQUFLLFdBQVcsR0FBRztBQUV6RyxlQUFPLFNBQVMsS0FBSyxJQUFJO0FBRXpCLFlBQUcsUUFBUSxPQUFPLFFBQVE7QUFDeEIsZUFBSyxJQUFJO0FBRVgsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLFFBQVEsSUFBSSxLQUFLO0FBRXZCLFVBQUksS0FBSztBQUNULGFBQU8sSUFBSSxPQUFPLE9BQU87QUFFekIsYUFBTyxFQUFFLElBQUk7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFdBQVMsSUFBSSxPQUFPLElBQUk7QUFDeEIsU0FBTztBQUNUO0FBRUEsTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVO0FBQ3JCLFFBQU0sUUFBUSxNQUFNLElBQUksS0FBSztBQUU3QixhQUFVLE9BQU8sT0FBTTtBQUNyQixVQUFNLEVBQUUsTUFBTSxJQUFJLE9BQU8seUJBQXlCLE9BQU8sR0FBRztBQUM1RCxVQUFNLGNBQWMsU0FBUyxJQUFJLEtBQUs7QUFFdEMsUUFBRyxDQUFDLGFBQVk7QUFDZCxlQUFTLE9BQU8sS0FBSztBQUNyQjtBQUFBLElBQ0Y7QUFFQSxhQUFTLE9BQU8sS0FBSztBQUNyQixXQUFRLE1BQWMsR0FBRztBQUV6QixVQUFNLFNBQVMsWUFBWSxLQUFLLE9BQU8sS0FBSyxPQUFPLEtBQUs7QUFFeEQsUUFBRyxDQUFDO0FBQ0Y7QUFFRixVQUFNLE9BQU8sT0FBTyxVQUFVLFdBQVcsU0FBUyxFQUFFLEtBQUssT0FBTztBQUVoRSxRQUFHLFdBQVc7QUFDWixZQUFNLEdBQUcsSUFBSSxLQUFLO0FBRXBCLFdBQU8sZUFBZSxPQUFPLEtBQUs7QUFBQSxNQUNoQyxZQUFZLEtBQUssZUFBZTtBQUFBLE1BQ2hDLE1BQWdCO0FBQ2QsZUFBTztBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFDakIsT0FBTyxLQUFLLE9BQU8sYUFDZixLQUFLLElBQUksSUFBSSxJQUNiLE1BQU0sT0FBTyxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsSUFBSSxNQUFLO0FBQ1AsWUFBRyxLQUFLLFFBQVE7QUFDZCxnQkFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLElBQUksR0FBRyxnQkFBZ0I7QUFFakQsZUFBTyxPQUFPLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxNQUNuQztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1QsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K
68
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi9jb250cm9sJztcbmltcG9ydCB7IGZldGNoLCBtYXlBZG9wdCwgTW9kZWwsIFBBUkVOVCwgU1RBVEUsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcblxuY29uc3QgSU5TVFJVQ1RJT04gPSBuZXcgTWFwPHN5bWJvbCwgTW9kZWwuSW5zdHJ1Y3Rpb24+KCk7XG5cbmZ1bmN0aW9uIHVzZSA8VD4gKGluc3RydWN0aW9uOiBNb2RlbC5JbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5cbmZ1bmN0aW9uIHVzZSA8VCBleHRlbmRzIE1vZGVsPiAoVHlwZTogTW9kZWwuSW5pdDxUPiwgcmVxdWlyZWQ6IGZhbHNlKTogVCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gdXNlIDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5Jbml0PFQ+LCByZWFkeT86IChpOiBUKSA9PiB2b2lkKTogVDtcblxuZnVuY3Rpb24gdXNlKFxuICBhcmcxOiBNb2RlbC5Jbml0IHwgTW9kZWwuSW5zdHJ1Y3Rpb24sXG4gIGFyZzI/OiAoKGk6IE1vZGVsKSA9PiB2b2lkKSB8IGJvb2xlYW4pe1xuXG4gIGNvbnN0IHRva2VuID0gU3ltYm9sKFwiaW5zdHJ1Y3Rpb25cIik7XG5cbiAgaWYoTW9kZWwuaXMoYXJnMSkpXG4gICAgYXJnMSA9IGNoaWxkKGFyZzEsIGFyZzIpO1xuXG4gIElOU1RSVUNUSU9OLnNldCh0b2tlbiwgYXJnMSk7XG4gIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gY2hpbGQoXG4gIHR5cGU6IE1vZGVsLkluaXQ8TW9kZWw+LFxuICBhcmcyPzogKChpOiBNb2RlbCkgPT4gdm9pZCkgfCBib29sZWFuXG4pOiBNb2RlbC5JbnN0cnVjdGlvbjxhbnksIGFueT4ge1xuICByZXR1cm4gKGtleSwgc3ViamVjdCkgPT4ge1xuICAgIGZ1bmN0aW9uIHNldChuZXh0OiBNb2RlbCB8IHVuZGVmaW5lZCl7XG4gICAgICBpZihuZXh0ID8gIShuZXh0IGluc3RhbmNlb2YgdHlwZSkgOiBhcmcyICE9PSBmYWxzZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N1YmplY3R9LiR7a2V5fSBleHBlY3RlZCBNb2RlbCBvZiB0eXBlICR7dHlwZX0gYnV0IGdvdCAke25leHQgJiYgbmV4dC5jb25zdHJ1Y3Rvcn0uYCk7XG5cbiAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIG5leHQpO1xuXG4gICAgICBpZihuZXh0ICYmIHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgYXJnMihuZXh0KTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IHR5cGUoKTtcblxuICAgIHNldCh2YWx1ZSk7XG4gICAgUEFSRU5ULnNldCh2YWx1ZSwgc3ViamVjdCk7XG4gICAgdmFsdWUuc2V0KCk7XG5cbiAgICByZXR1cm4geyBzZXQgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0KHRoaXM6IE1vZGVsKXtcbiAgY29uc3Qgc3RhdGUgPSBTVEFURS5nZXQodGhpcykhO1xuXG4gIGZvcihjb25zdCBrZXkgaW4gdGhpcyl7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBrZXkpITtcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IElOU1RSVUNUSU9OLmdldCh2YWx1ZSk7XG5cbiAgICBpZighaW5zdHJ1Y3Rpb24pe1xuICAgICAgbWF5QWRvcHQodGhpcywgdmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgSU5TVFJVQ1RJT04uZGVsZXRlKHZhbHVlKTtcbiAgICBkZWxldGUgKHRoaXMgYXMgYW55KVtrZXldO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gaW5zdHJ1Y3Rpb24uY2FsbCh0aGlzLCBrZXksIHRoaXMsIHN0YXRlKTtcblxuICAgIGlmKCFvdXRwdXQpXG4gICAgICBjb250aW51ZTtcblxuICAgIGNvbnN0IGRlc2MgPSB0eXBlb2Ygb3V0cHV0ID09IFwib2JqZWN0XCIgPyBvdXRwdXQgOiB7IGdldDogb3V0cHV0IH07XG5cbiAgICBpZihcInZhbHVlXCIgaW4gZGVzYylcbiAgICAgIHN0YXRlW2tleV0gPSBkZXNjLnZhbHVlO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZGVsLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSAhPT0gZmFsc2UsXG4gICAgICBnZXQodGhpczogTW9kZWwpe1xuICAgICAgICByZXR1cm4gd2F0Y2godGhpcywga2V5LCBcbiAgICAgICAgICB0eXBlb2YgZGVzYy5nZXQgPT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IGRlc2MuZ2V0KHRoaXMpXG4gICAgICAgICAgICA6IGZldGNoKG1vZGVsLCBrZXksIGRlc2MuZ2V0KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHNldChuZXh0KXtcbiAgICAgICAgaWYoZGVzYy5zZXQgPT09IGZhbHNlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbH0uJHtrZXl9IGlzIHJlYWQtb25seS5gKTtcblxuICAgICAgICB1cGRhdGUobW9kZWwsIGtleSwgbmV4dCwgZGVzYy5zZXQpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuTW9kZWwub24oaW5pdCk7XG5cbmV4cG9ydCB7IHVzZSB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsT0FBTyxVQUFVLE9BQU8sUUFBUSxPQUFPLGNBQWM7QUFFOUQsTUFBTSxjQUFjLG9CQUFJLElBQStCO0FBUXZELFNBQVMsSUFDUCxNQUNBLE1BQXNDO0FBRXRDLFFBQU0sUUFBUSxPQUFPLGFBQWE7QUFFbEMsTUFBRyxNQUFNLEdBQUcsSUFBSTtBQUNkLFdBQU8sTUFBTSxNQUFNLElBQUk7QUFFekIsY0FBWSxJQUFJLE9BQU8sSUFBSTtBQUMzQixTQUFPO0FBQ1Q7QUFFQSxTQUFTLE1BQ1AsTUFDQSxNQUM2QjtBQUM3QixTQUFPLENBQUMsS0FBSyxZQUFZO0FBQ3ZCLGFBQVMsSUFBSSxNQUF3QjtBQUNuQyxVQUFHLE9BQU8sRUFBRSxnQkFBZ0IsUUFBUSxTQUFTO0FBQzNDLGNBQU0sSUFBSSxNQUFNLEdBQUcsT0FBTyxJQUFJLEdBQUcsMkJBQTJCLElBQUksWUFBWSxRQUFRLEtBQUssV0FBVyxHQUFHO0FBRXpHLGFBQU8sU0FBUyxLQUFLLElBQUk7QUFFekIsVUFBRyxRQUFRLE9BQU8sUUFBUTtBQUN4QixhQUFLLElBQUk7QUFFWCxhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sUUFBUSxJQUFJLEtBQUs7QUFFdkIsUUFBSSxLQUFLO0FBQ1QsV0FBTyxJQUFJLE9BQU8sT0FBTztBQUN6QixVQUFNLElBQUk7QUFFVixXQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ2Y7QUFDRjtBQUVBLFNBQVMsT0FBaUI7QUFDeEIsUUFBTSxRQUFRLE1BQU0sSUFBSSxJQUFJO0FBRTVCLGFBQVUsT0FBTyxNQUFLO0FBQ3BCLFVBQU0sRUFBRSxNQUFNLElBQUksT0FBTyx5QkFBeUIsTUFBTSxHQUFHO0FBQzNELFVBQU0sY0FBYyxZQUFZLElBQUksS0FBSztBQUV6QyxRQUFHLENBQUMsYUFBWTtBQUNkLGVBQVMsTUFBTSxLQUFLO0FBQ3BCO0FBQUEsSUFDRjtBQUVBLGdCQUFZLE9BQU8sS0FBSztBQUN4QixXQUFRLEtBQWEsR0FBRztBQUV4QixVQUFNLFNBQVMsWUFBWSxLQUFLLE1BQU0sS0FBSyxNQUFNLEtBQUs7QUFFdEQsUUFBRyxDQUFDO0FBQ0Y7QUFFRixVQUFNLE9BQU8sT0FBTyxVQUFVLFdBQVcsU0FBUyxFQUFFLEtBQUssT0FBTztBQUVoRSxRQUFHLFdBQVc7QUFDWixZQUFNLEdBQUcsSUFBSSxLQUFLO0FBRXBCLFVBQU0sUUFBUTtBQUVkLFdBQU8sZUFBZSxPQUFPLEtBQUs7QUFBQSxNQUNoQyxZQUFZLEtBQUssZUFBZTtBQUFBLE1BQ2hDLE1BQWdCO0FBQ2QsZUFBTztBQUFBLFVBQU07QUFBQSxVQUFNO0FBQUEsVUFDakIsT0FBTyxLQUFLLE9BQU8sYUFDZixLQUFLLElBQUksSUFBSSxJQUNiLE1BQU0sT0FBTyxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsSUFBSSxNQUFLO0FBQ1AsWUFBRyxLQUFLLFFBQVE7QUFDZCxnQkFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLElBQUksR0FBRyxnQkFBZ0I7QUFFakQsZUFBTyxPQUFPLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxNQUNuQztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxNQUFNLEdBQUcsSUFBSTsiLAogICJuYW1lcyI6IFtdCn0K
package/dist/esm/model.js CHANGED
@@ -39,19 +39,9 @@ class Model {
39
39
  if (key === arg1)
40
40
  return arg2.call(self, key, self);
41
41
  });
42
- if (arg1 && typeof arg1 == "object") {
43
- const methods = METHODS.get(self.constructor);
44
- for (const key in arg1) {
45
- const bind = methods.get(key);
46
- if (bind)
47
- bind.call(self, arg1[key]);
48
- else if (key in self)
49
- if (arg2 === true || !Object.getOwnPropertyDescriptor(self, key)?.set)
50
- update(self, key, arg1[key], arg2 === true);
51
- else
52
- self[key] = arg1[key];
53
- }
54
- } else
42
+ if (arg1 && typeof arg1 == "object")
43
+ assign(self, arg1, arg2 === true);
44
+ else
55
45
  event(self, arg1);
56
46
  return pending(self);
57
47
  }
@@ -104,6 +94,19 @@ define(Model, "toString", {
104
94
  return this.name;
105
95
  }
106
96
  });
97
+ function assign(subject, data, silent) {
98
+ const methods = METHODS.get(subject.constructor);
99
+ for (const key in data) {
100
+ const bind = methods.get(key);
101
+ if (bind)
102
+ bind.call(subject, data[key]);
103
+ else if (key in subject && key !== "is") {
104
+ const desc = Object.getOwnPropertyDescriptor(subject, key);
105
+ const set = desc && desc.set;
106
+ set.call(subject, data[key], silent === true);
107
+ }
108
+ }
109
+ }
107
110
  function prepare(model) {
108
111
  let T = model.constructor;
109
112
  if (T === Model)
@@ -142,7 +145,6 @@ function prepare(model) {
142
145
  }
143
146
  }
144
147
  function init(model, args) {
145
- const methods = METHODS.get(model.constructor);
146
148
  const state = {};
147
149
  STATE.set(model, state);
148
150
  args = args.flat().filter((arg) => {
@@ -153,21 +155,6 @@ function init(model, args) {
153
155
  addListener(model, () => {
154
156
  if (!PARENT.has(model))
155
157
  PARENT.set(model, null);
156
- args.forEach((arg) => {
157
- const use = typeof arg == "function" ? arg.call(model, model) : arg;
158
- if (use instanceof Promise)
159
- use.catch((err) => {
160
- console.error(`Async error in constructor for ${model}:`);
161
- console.error(err);
162
- });
163
- else if (typeof use == "function")
164
- addListener(model, use, null);
165
- else if (typeof use == "object") {
166
- for (const key in use)
167
- if (key in model || methods.has(key))
168
- model[key] = use[key];
169
- }
170
- });
171
158
  for (const key in model) {
172
159
  const desc = Object.getOwnPropertyDescriptor(model, key);
173
160
  if ("value" in desc) {
@@ -177,13 +164,25 @@ function init(model, args) {
177
164
  get() {
178
165
  return watch(this, key, state[key]);
179
166
  },
180
- set(value) {
181
- update(model, key, value);
167
+ set(value, silent) {
168
+ update(model, key, value, silent);
182
169
  mayAdopt(model, value);
183
170
  }
184
171
  });
185
172
  }
186
173
  }
174
+ args.forEach((arg) => {
175
+ const use = typeof arg == "function" ? arg.call(model, model) : arg;
176
+ if (use instanceof Promise)
177
+ use.catch((err) => {
178
+ console.error(`Async error in constructor for ${model}:`);
179
+ console.error(err);
180
+ });
181
+ else if (typeof use == "function")
182
+ addListener(model, use, null);
183
+ else if (typeof use == "object")
184
+ assign(model, use, true);
185
+ });
187
186
  addListener(model, () => {
188
187
  for (const [_, value] of model)
189
188
  if (value instanceof Model && PARENT.get(value) === model)
@@ -255,7 +254,7 @@ function update(subject, key, value, arg) {
255
254
  if (typeof out == "function")
256
255
  value = out();
257
256
  }
258
- if (value === previous)
257
+ if (value === previous && value !== void 0)
259
258
  return;
260
259
  state[key] = value;
261
260
  if (arg !== true)
@@ -276,4 +275,4 @@ export {
276
275
  uid,
277
276
  update
278
277
  };
279
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL21vZGVsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBhZGRMaXN0ZW5lciwgY3JlYXRlRWZmZWN0LCBldmVudCwgT25VcGRhdGUsIHBlbmRpbmcsIFBFTkRJTkdfS0VZUywgd2F0Y2ggfSBmcm9tICcuL2NvbnRyb2wnO1xuXG5jb25zdCBkZWZpbmUgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8qKiBSZWdpc3RlciBmb3IgYWxsIGFjdGl2ZSBtb2RlbHMgdmlhIHN0cmluZyBpZGVudGlmaWVycyAodXN1YWxseSB1bmlxdWUpLiAqL1xuY29uc3QgSUQgPSBuZXcgV2Vha01hcDxNb2RlbCwgc3RyaW5nPigpO1xuXG4vKiogSW50ZXJuYWwgc3RhdGUgYXNzaWduZWQgdG8gbW9kZWxzLiAqL1xuY29uc3QgU1RBVEUgPSBuZXcgV2Vha01hcDxNb2RlbCwgUmVjb3JkPHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgdW5rbm93bj4+KCk7XG5cbi8qKiBFeHRlcm5hbCBsaXN0ZW5lcnMgZm9yIGFueSBnaXZlbiBNb2RlbC4gKi9cbmNvbnN0IE5PVElGWSA9IG5ldyBXZWFrTWFwPE1vZGVsLlR5cGUsIFNldDxPblVwZGF0ZT4+KCk7XG5cbi8qKiBQYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcy4gKi9cbmNvbnN0IFBBUkVOVCA9IG5ldyBXZWFrTWFwPE1vZGVsLCBNb2RlbCB8IG51bGw+KCk7XG5cbi8qKiBMaXN0IG9mIG1ldGhvZHMgZGVmaW5lZCBieSBhIGdpdmVuIHR5cGUuICovXG5jb25zdCBNRVRIT0RTID0gbmV3IFdlYWtNYXA8TW9kZWwuVHlwZSwgTWFwPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IHZvaWQ+PigpO1xuXG4vKiogUmVmZXJlbmNlIGJvdW5kIGluc3RhbmNlIG1ldGhvZHMgdG8gcmVhbCBvbmVzLiAqL1xuY29uc3QgTUVUSE9EID0gbmV3IFdlYWtNYXA8YW55LCBhbnk+KCk7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIE1vZGVsIHtcbiAgLyoqIEFueSB0eXBlIG9mIE1vZGVsLCB1c2luZyBvd24gY2xhc3MgY29uc3RydWN0b3IgYXMgaXRzIGlkZW50aWZpZXIuICovXG4gIHR5cGUgVHlwZTxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPVxuICAgIChhYnN0cmFjdCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKSAmIHR5cGVvZiBNb2RlbDtcblxuICAvKiogQSBNb2RlbCBjb25zdHJ1Y3RvciwgYnV0IHdoaWNoIGlzIG5vdCBhYnN0cmFjdC4gKi9cbiAgdHlwZSBJbml0PFQgZXh0ZW5kcyBNb2RlbCA9IE1vZGVsPiA9XG4gICAgKG5ldyAoLi4uYXJnczogTW9kZWwuQXJnczxUPikgPT4gVCkgJiBPbWl0PHR5cGVvZiBNb2RlbCwgbmV2ZXI+O1xuXG4gIC8qKlxuICAgKiBNb2RlbCBjb25zdHJ1Y3RvciBjYWxsYmFjayAtIGlzIGNhbGxlZCB3aGVuIE1vZGVsIGZpbmlzaGVzIGludGlhbGl6aW5nLlxuICAgKiBSZXR1cm5lZCBmdW5jdGlvbiB3aWxsIHJ1biB3aGVuIG1vZGVsIGlzIGRlc3Ryb3llZC5cbiAgICovXG4gIHR5cGUgQ2FsbGJhY2s8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID1cbiAgICAodGhpczogVCwgdGhpc0FyZzogVCkgPT4gUHJvbWlzZTx2b2lkPiB8ICgoKSA9PiB2b2lkKSB8IEFzc2lnbjxUPiB8IHZvaWQ7XG5cbiAgLyoqIE1vZGVsIGNvbnN0cnVjdG9yIGFyZ3VtZW50ICovXG4gIHR5cGUgQXJndW1lbnQ8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gQXNzaWduPFQ+IHwgQ2FsbGJhY2s8VD4gfCBzdHJpbmcgfCB2b2lkO1xuXG4gIC8qKiBNb2RlbCBjb25zdHJ1Y3RvciBhcmd1bWVudHMgKi9cbiAgdHlwZSBBcmdzPFQgZXh0ZW5kcyBNb2RlbCA9IGFueT4gPSAoQXJndW1lbnQ8VD4gfCBBcmdzPFQ+KVtdO1xuXG4gIC8qKiBTdWJzZXQgb2YgYGtleW9mIFRgIHdoaWNoIGFyZSBub3QgbWV0aG9kcyBvciBkZWZpbmVkIGJ5IGJhc2UgTW9kZWwgVS4gKiovXG4gIHR5cGUgRmllbGQ8VD4gPSBFeGNsdWRlPGtleW9mIFQsIGtleW9mIE1vZGVsPjtcblxuICAvKiogQW55IHZhbGlkIGtleSBmb3IgbW9kZWwsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gRmllbGQ8VD4uICovXG4gIHR5cGUgRXZlbnQ8VD4gPSBGaWVsZDxUPiB8IChzdHJpbmcgJiB7fSkgfCBudW1iZXIgfCBzeW1ib2w7XG5cbiAgLyoqIE9iamVjdCBvdmVybGF5IHRvIG92ZXJyaWRlIHZhbHVlcyBhbmQgbWV0aG9kcyBvbiBhIG1vZGVsLiAqL1xuICB0eXBlIEFzc2lnbjxUPiA9IHtcbiAgICBbSyBpbiBGaWVsZDxUPl0/OlxuICAgICAgVFtLXSBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSIFxuICAgICAgICA/ICh0aGlzOiBULCAuLi5hcmdzOiBBKSA9PiBSXG4gICAgICAgIDogVFtLXTtcbiAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBFeHBvcnQvSW1wb3J0IGNvbXBhdGlibGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcHJvcGVydHkgaW4gYSBNb2RlbC4gKi9cbiAgdHlwZSBFeHBvcnQ8Uj4gPSBSIGV4dGVuZHMgeyBnZXQoKTogaW5mZXIgVCB9ID8gVCA6IFI7XG5cbiAgLyoqIFZhbHVlIGZvciBhIHByb3BlcnR5IG1hbmFnZWQgYnkgYSBtb2RlbC4gKi9cbiAgdHlwZSBWYWx1ZTxUIGV4dGVuZHMgTW9kZWwsIEsgZXh0ZW5kcyBFdmVudDxUPj4gPVxuICAgIEsgZXh0ZW5kcyBrZXlvZiBUID8gRXhwb3J0PFRbS10+IDogdW5rbm93bjtcblxuICB0eXBlIE9uRXZlbnQ8VCBleHRlbmRzIE1vZGVsPiA9XG4gICAgKHRoaXM6IFQsIGtleTogdW5rbm93biwgc291cmNlOiBUKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkIHwgbnVsbDtcblxuICB0eXBlIE9uVXBkYXRlPFQgZXh0ZW5kcyBNb2RlbCwgSyBleHRlbmRzIEV2ZW50PFQ+PiA9XG4gICAgKHRoaXM6IFQsIGtleTogSywgdGhpc0FyZzogSykgPT4gdm9pZDtcblxuICAvKipcbiAgICogVmFsdWVzIGZyb20gY3VycmVudCBzdGF0ZSBvZiBnaXZlbiBtb2RlbC5cbiAgICogRGlmZmVycyBmcm9tIGBWYWx1ZXNgIGFzIHZhbHVlcyBoZXJlIHdpbGwgZHJpbGxcbiAgICogaW50byBcInJlYWxcIiB2YWx1ZXMgaGVsZCBieSBleG90aWNzIGxpa2UgcmVmLk9iamVjdC5cbiAgICovXG4gIHR5cGUgU3RhdGU8VD4gPSB7IFtQIGluIEZpZWxkPFQ+XTogRXhwb3J0PFRbUF0+IH07XG5cbiAgLyoqIE9iamVjdCBjb21wZXJhYmxlIHRvIGRhdGEgZm91bmQgaW4gVC4gKi9cbiAgdHlwZSBWYWx1ZXM8VD4gPSB7IFtQIGluIEZpZWxkPFQ+XT86IEV4cG9ydDxUW1BdPiB9O1xuXG4gIC8qKiBFeG90aWMgdmFsdWUsIHdoZXJlIGFjdHVhbCB2YWx1ZSBpcyBjb250YWluZWQgd2l0aGluLiAqL1xuICB0eXBlIFJlZjxUID0gYW55PiA9IHtcbiAgICAobmV4dDogVCk6IHZvaWQ7XG4gICAgY3VycmVudDogVCB8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBzdWJzY3JpYmVkIHRvIHBhcmVudCBhbmQgdXBkYXRlcyB3aGVuIGFjY2Vzc2VkIHByb3BlcnRpZXMgY2hhbmdlLlxuICAgKiBcbiAgICogQHBhcmFtIGN1cnJlbnQgLSBDdXJyZW50IHN0YXRlIG9mIHRoaXMgbW9kZWwuIFRoaXMgaXMgYSBwcm94eSB3aGljaCBkZXRlY3RzIHByb3BlcnRpZXMgd2hpY2hcbiAgICogd2hlcmUgYWNjZXNzZWQsIGFuZCB0aHVzIGRlcGVuZGVkIHVwb24gdG8gc3RheSBjdXJyZW50LlxuICAgKiBcbiAgICogQHBhcmFtIHVwZGF0ZSAtIFNldCBvZiBwcm9wZXJ0aWVzIHdoaWNoIGhhdmUgY2hhbmdlZCwgYW5kIGV2ZW50cyBmaXJlZCwgc2luY2UgbGFzdCB1cGRhdGUuXG4gICAqIFxuICAgKiBAcmV0dXJucyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhpcyBlZmZlY3QgaXMgc3RhbGUuXG4gICAqL1xuICB0eXBlIEVmZmVjdDxUPiA9ICh0aGlzOiBULCBjdXJyZW50OiBULCB1cGRhdGU6IFNldDxFdmVudDxUPj4pID0+XG4gICAgRWZmZWN0Q2FsbGJhY2sgfCBQcm9taXNlPHZvaWQ+IHwgbnVsbCB8IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJuZWQgYnkgZWZmZWN0LiBXaWxsIGJlIGNhbGxlZCB3aGVuIGVmZmVjdCBpcyBzdGFsZS5cbiAgICogXG4gICAqIEBwYXJhbSB1cGRhdGUgLSBgdHJ1ZWAgaWYgdXBkYXRlIGlzIHBlbmRpbmcsIGBmYWxzZWAgZWZmZWN0IGhhcyBiZWVuIGNhbmNlbGxlZCwgYG51bGxgIGlmIG1vZGVsIGlzIGRlc3Ryb3llZC5cbiAgICovXG4gIHR5cGUgRWZmZWN0Q2FsbGJhY2sgPSAoKHVwZGF0ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQpO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAgICogT3B0aW9uYWwgcmV0dXJuZWQgY2FsbGJhY2sgd2lsbCBydW4gd2hlbiBvbmNlIHVwb24gZmlyc3QgYWNjZXNzLlxuICAgKi9cbiAgdHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgTW9kZWwgPSBhbnk+ID1cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbGxvdyBmb3IgbnVtYmVycy9zeW1ib2wgcHJvcGVydGllcz9cbiAgICAodGhpczogTSwga2V5OiBFeHRyYWN0PEZpZWxkPE0+LCBzdHJpbmc+LCB0aGlzQXJnOiBNLCBzdGF0ZTogU3RhdGU8TT4pID0+XG4gICAgICBEZXNjcmlwdG9yPFQ+IHwgKChzb3VyY2U6IE0pID0+IFQpIHwgdm9pZDtcblxuICB0eXBlIEdldHRlcjxUPiA9IChzb3VyY2U6IE1vZGVsKSA9PiBUO1xuICB0eXBlIFNldHRlcjxUPiA9ICh2YWx1ZTogVCwgcHJldmlvdXM6IFQpID0+IGJvb2xlYW4gfCB2b2lkIHwgKCgpID0+IFQpO1xuXG4gIHR5cGUgRGVzY3JpcHRvcjxUID0gYW55PiA9IHtcbiAgICBnZXQ/OiBHZXR0ZXI8VD4gfCBib29sZWFuO1xuICAgIHNldD86IFNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgZW51bWVyYWJsZT86IGJvb2xlYW47XG4gICAgdmFsdWU/OiBUO1xuICB9XG59XG5cbmludGVyZmFjZSBNb2RlbCB7XG4gIC8qKlxuICAgKiBMb29wYmFjayB0byBpbnN0YW5jZSBvZiB0aGlzIG1vZGVsLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGluIGEgc3Vic2NyaWJlZCBjb250ZXh0LFxuICAgKiB0byBrZWVwIHdyaXRlIGFjY2VzcyB0byBgdGhpc2AgYWZ0ZXIgYSBkZXN0cnVjdHVyZS4gWW91IGNhbiB1c2UgaXQgdG8gcmVhZCB2YXJpYWJsZXMgc2lsZW50bHkgYXMgd2VsbC5cbiAgICoqL1xuICBpczogdGhpcztcbn1cblxuYWJzdHJhY3QgY2xhc3MgTW9kZWwge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBNb2RlbC5BcmdzKXtcbiAgICBwcmVwYXJlKHRoaXMpO1xuICAgIGRlZmluZSh0aGlzLCBcImlzXCIsIHsgdmFsdWU6IHRoaXMgfSk7XG4gICAgaW5pdCh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWxsIGN1cnJlbnQgdmFsdWVzIGZyb20gc3RhdGUuIEZsYXR0ZW5zIGFsbCBtb2RlbHMgYW5kIGV4b3RpYyB2YWx1ZXMgcmVjdXJzaXZlbHkuXG4gICAqIFxuICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhbGwgdmFsdWVzIGZyb20gdGhpcyBtb2RlbC5cbiAgICoqL1xuICBnZXQoKTogTW9kZWwuU3RhdGU8dGhpcz47XG5cbiAgLyoqXG4gICAqIFJ1biBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcnVuIGF1dG9tYXRpY2FsbHkgd2hlbiBhY2Nlc3NlZCB2YWx1ZXMgY2hhbmdlLlxuICAgKiBcbiAgICogQHBhcmFtIGVmZmVjdCBGdW5jdGlvbiB0byBydW4sIGFuZCBhZ2FpbiB3aGVuZXZlciBhY2Nlc3NlZCB2YWx1ZXMgY2hhbmdlLlxuICAgKiAgICAgICAgICAgICAgIElmIGVmZmVjdCByZXR1cm5zIGEgZnVuY3Rpb24sIGl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzIChzeW5jcm9ub3VzbHkpLFxuICAgKiAgICAgICAgICAgICAgIGVmZmVjdCBpcyBjYW5jZWxsZWQsIG9yIHBhcmVudCBtb2RlbCBpcyBkZXN0cm95ZWQuXG4gICAqIEByZXR1cm5zIEZ1bmN0aW9uIHRvIGNhbmNlbCBsaXN0ZW5lci5cbiAgICovXG4gIGdldChlZmZlY3Q6IE1vZGVsLkVmZmVjdDx0aGlzPik6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEdldCB2YWx1ZSBvZiBhIHByb3BlcnR5LlxuICAgKiBcbiAgICogQHBhcmFtIGtleSAtIFByb3BlcnR5IHRvIGdldCB2YWx1ZSBvZi5cbiAgICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgdHJ1ZSwgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLlxuICAgKiBAcmV0dXJucyBWYWx1ZSBvZiBwcm9wZXJ0eS5cbiAgICovXG4gIGdldDxUIGV4dGVuZHMgTW9kZWwuRXZlbnQ8dGhpcz4+KGtleTogVCwgcmVxdWlyZWQ/OiBib29sZWFuKTogTW9kZWwuVmFsdWU8dGhpcywgVD47XG5cbiAgLyoqXG4gICAqIFJ1biBhIGZ1bmN0aW9uIHdoZW4gYSBwcm9wZXJ0eSBpcyB1cGRhdGVkLlxuICAgKiBcbiAgICogQHBhcmFtIGtleSAtIFByb3BlcnR5IHRvIHdhdGNoIGZvciB1cGRhdGVzLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gcHJvcGVydHkgaXMgdXBkYXRlZC5cbiAgICogQHJldHVybnMgRnVuY3Rpb24gdG8gY2FuY2VsIGxpc3RlbmVyLlxuICAgKi9cbiAgZ2V0PFQgZXh0ZW5kcyBNb2RlbC5FdmVudDx0aGlzPj4oa2V5OiBULCBjYWxsYmFjazogTW9kZWwuT25VcGRhdGU8dGhpcywgVD4pOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtb2RlbCBpcyBleHBpcmVkLlxuICAgKiBcbiAgICogQHBhcmFtIHN0YXR1cyAtIGBudWxsYCB0byBjaGVjayBpZiBtb2RlbCBpcyBleHBpcmVkLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbW9kZWwgaXMgZXhwaXJlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBnZXQoc3RhdHVzOiBudWxsKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBtb2RlbCBpcyB0byBiZSBkZXN0cm95ZWQuXG4gICAqIFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gbW9kZWwgaXMgZGVzdHJveWVkLlxuICAgKiBAcmV0dXJucyBGdW5jdGlvbiB0byBjYW5jZWwgbGlzdGVuZXIuXG4gICAqL1xuICBnZXQoc3RhdHVzOiBudWxsLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQ7XG5cbiAgZ2V0KGFyZzE/OiBNb2RlbC5FZmZlY3Q8dGhpcz4gfCBzdHJpbmcgfCBudWxsLCBhcmcyPzogYm9vbGVhbiB8IE1vZGVsLk9uVXBkYXRlPHRoaXMsIGFueT4pe1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzLmlzO1xuXG4gICAgaWYodHlwZW9mIGFyZzEgPT0gXCJmdW5jdGlvblwiKXtcbiAgICAgIGxldCBwZW5kaW5nID0gbmV3IFNldDxNb2RlbC5FdmVudDx0aGlzPj4oKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVmZmVjdChzZWxmLCAocHJveHkpID0+IHtcbiAgICAgICAgY29uc3QgY2IgPSBhcmcxLmNhbGwocHJveHksIHByb3h5LCBwZW5kaW5nKTtcblxuICAgICAgICByZXR1cm4gY2IgPT09IG51bGwgPyBudWxsIDogKCh1cGRhdGUpID0+IHtcbiAgICAgICAgICBwZW5kaW5nID0gUEVORElOR19LRVlTLmdldChzZWxmKSE7XG4gICAgICAgICAgaWYodHlwZW9mIGNiID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGNiKHVwZGF0ZSk7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgYXJnMSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgc25hcHNob3Qoc2VsZikgOlxuICAgICAgICB0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIgP1xuICAgICAgICAgIGFkZExpc3RlbmVyKHNlbGYsIGFyZzIsIGFyZzEpIDpcbiAgICAgICAgICBhcmcxID09PSBudWxsID9cbiAgICAgICAgICAgIE9iamVjdC5pc0Zyb3plbihTVEFURS5nZXQoc2VsZikpIDpcbiAgICAgICAgICAgIGZldGNoKHNlbGYsIGFyZzEsIGFyZzIpXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1cGRhdGUgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgb2JqZWN0IHdpdGggdXBkYXRlZCB2YWx1ZXMsIGB1bmRlZmluZWRgIGlmIHRoZXJlIG5vIHVwZGF0ZSBpcyBwZW5kaW5nLlxuICAgKiovXG4gIHNldCgpOiBQcm9taXNlTGlrZTxNb2RlbC5FdmVudDx0aGlzPltdPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVXBkYXRlIG11bGl0cGxlIHByb3BlcnRpZXMgYXQgb25jZS4gTWVyZ2VzIGFyZ3VtZW50IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICogUHJvcGVydGllcyB3aGljaCBhcmUgbm90IG1hbmFnZWQgYnkgdGhpcyBtb2RlbCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFxuICAgKiBAcGFyYW0gYXNzaWduIC0gT2JqZWN0IHdpdGggcHJvcGVydGllcyB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSBzaWxlbnQgLSBJZiBhbiB1cGRhdGUgZG9lcyBvY2N1ciwgbGlzdGVuZXJzIHdpbGwgbm90IGJlIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyBhbiBhcnJheSBvZiBrZXlzIHVwZGF0ZWQsIGB1bmRlZmluZWRgIChpbW1lZGlhdGVseSkgaWYgYSBub29wLlxuICAgKi9cbiAgc2V0KGFzc2lnbj86IE1vZGVsLkFzc2lnbjx0aGlzPiwgc2lsZW50PzogYm9vbGVhbik6IFByb21pc2VMaWtlPE1vZGVsLkV2ZW50PHRoaXM+W10+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBQdXNoIGFuIHVwZGF0ZS4gVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGFzc29jaWF0ZWQgcHJvcGVydHkuXG4gICAqIFxuICAgKiBVc2VmdWwgd2hlcmUgYSBwcm9wZXJ0eSB2YWx1ZSBpbnRlcm5hbGx5IGhhcyBjaGFuZ2VkLCBidXQgdGhlIG9iamVjdCBpcyB0aGUgc2FtZS5cbiAgICogRm9yIGV4YW1wbGU6IEFuIGFycmF5IGhhcyBwdXNoZWQgYSBuZXcgdmFsdWUsIG9yIGEgbmVzdGVkIHByb3BlcnR5IGlzIHVwZGF0ZWQuXG4gICAqIFxuICAgKiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgdG8gZGlzcGF0Y2ggYXJiaXRyYXJ5IGV2ZW50cy5cbiAgICogU3ltYm9scyBhcmUgcmVjb21tZW5kZWQgYXMgbm9uLXByb3BlcnR5IGV2ZW50cywgaG93ZXZlciB5b3UgY2FuIHVzZSBhbnkgc3RyaW5nLlxuICAgKiBJZiBkb2luZyBzbywgYmUgc3VyZSB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggcHJvcGVydHkgbmFtZXMhIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXNcbiAgICogdG8gcHJlZml4IGFuIGV2ZW50IHdpdGggXCIhXCIgYW5kL29yIHVzZSBkYXNoLWNhc2UuIGUuZy4gYHNldChcIiFldmVudFwiKWAgb3IgYHNldChcIm15LWV2ZW50XCIpYC5cbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBQcm9wZXJ0eSBvciBldmVudCB0byBkaXNwYXRjaC5cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBhbiBhcnJheSBvZiBrZXlzIHVwZGF0ZWQuXG4gICAqL1xuICBzZXQoa2V5OiBNb2RlbC5FdmVudDx0aGlzPik6IFByb21pc2VMaWtlPE1vZGVsLkV2ZW50PHRoaXM+W10+O1xuXG4gIC8qKlxuICAgKiBDYWxsIGEgZnVuY3Rpb24gd2hlbiB1cGRhdGUgb2NjdXJzLlxuICAgKiBcbiAgICogR2l2ZW4gZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBldmVyeSBhc3NpZ25tZW50ICh3aGljaCBjaGFuZ2VzIHZhbHVlKSBvciBleHBsaWNpdCBgc2V0YC5cbiAgICogXG4gICAqIFRvIHJ1biBsb2dpYyBvbiBmaW5hbCB2YWx1ZSBvbmx5LCBjYWxsYmFjayBtYXkgcmV0dXJuIGEgZnVuY3Rpb24uIFVzaW5nIHRoZSBzYW1lXG4gICAqIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgd2lsbCBlbnN1cmUgaXQgaXMgY2FsbGVkIG9ubHkgd2hlbiBldmVudHMgYXJlIHNldHRsZWQuXG4gICAqIFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdXBkYXRlIG9jY3Vycy5cbiAgICogQHJldHVybnMgRnVuY3Rpb24gdG8gcmVtb3ZlIGxpc3RlbmVyLiBXaWxsIHJldHVybiBgdHJ1ZWAgaWYgcmVtb3ZlZCwgYGZhbHNlYCBpZiBpbmFjdGl2ZSBhbHJlYWR5LlxuICAgKiBcbiAgKi9cbiAgc2V0KGNhbGxiYWNrOiBNb2RlbC5PbkV2ZW50PHRoaXM+KTogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2FsbCBhIGZ1bmN0aW9uIHdoZW4gYSBwcm9wZXJ0eSBpcyB1cGRhdGVkLlxuICAgKiBVbmxpa2UgYGdldGAsIHRoaXMgY2Fsc2wgc3luY2hyb25vdXNseSBhbmQgd2lsbCBmaXJlIGFzIG1hbnkgdGltZXMgYXMgdGhlIHByb3BlcnR5IGlzIHVwZGF0ZWQuXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gUHJvcGVydHkgdG8gd2F0Y2ggZm9yIHVwZGF0ZXMuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBwcm9wZXJ0eSBpcyB1cGRhdGVkLlxuICAgKi9cbiAgc2V0KGtleTogTW9kZWwuRXZlbnQ8dGhpcz4gfCBudWxsLCBjYWxsYmFjazogTW9kZWwuT25FdmVudDx0aGlzPik6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlY2xhcmUgYW4gZW5kIHRvIHVwZGF0ZXMuIFRoaXMgZXZlbnQgaXMgZmluYWwgYW5kIHdpbGwgZnJlZXplIHN0YXRlLlxuICAgKiBUaGlzIGV2ZW50IGNhbiBiZSB3YXRjaGVkIGZvciBhcyB3ZWxsLCB0byBydW4gY2xlYW51cCBsb2dpYyBhbmQgaW50ZXJuYWxseSB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzLlxuICAgKiBcbiAgICogQHBhcmFtIHN0YXR1cyAtIGBudWxsYCB0byBlbmQgdXBkYXRlcy5cbiAgICovXG4gIHNldChzdGF0dXM6IG51bGwpOiB2b2lkO1xuXG4gIHNldChcbiAgICBhcmcxPzogTW9kZWwuT25FdmVudDx0aGlzPiB8IE1vZGVsLkFzc2lnbjx0aGlzPiB8IE1vZGVsLkV2ZW50PHRoaXM+IHwgbnVsbCxcbiAgICBhcmcyPzogYm9vbGVhbiB8IE1vZGVsLk9uRXZlbnQ8dGhpcz4pe1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXMuaXM7XG5cbiAgICBpZih0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICByZXR1cm4gYWRkTGlzdGVuZXIoc2VsZiwga2V5ID0+IHtcbiAgICAgICAgaWYodHlwZW9mIGtleSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgIHJldHVybiBhcmcxLmNhbGwoc2VsZiwga2V5LCBzZWxmKTtcbiAgICAgIH0pXG4gICAgICBcbiAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICByZXR1cm4gYWRkTGlzdGVuZXIoc2VsZiwga2V5ID0+IHtcbiAgICAgICAgaWYoa2V5ID09PSBhcmcxKVxuICAgICAgICAgIHJldHVybiBhcmcyLmNhbGwoc2VsZiwga2V5LCBzZWxmKTtcbiAgICAgIH0pO1xuXG4gICAgaWYoYXJnMSAmJiB0eXBlb2YgYXJnMSA9PSBcIm9iamVjdFwiKXtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSBNRVRIT0RTLmdldChzZWxmLmNvbnN0cnVjdG9yIGFzIE1vZGVsLlR5cGUpITtcbiAgICBcbiAgICAgIGZvcihjb25zdCBrZXkgaW4gYXJnMSl7XG4gICAgICAgIGNvbnN0IGJpbmQgPSBtZXRob2RzLmdldChrZXkpO1xuICAgICAgICBpZihiaW5kKVxuICAgICAgICAgIGJpbmQuY2FsbChzZWxmLCBhcmcxW2tleV0pO1xuICAgICAgICBlbHNlIGlmKGtleSBpbiBzZWxmKVxuICAgICAgICAgIGlmKGFyZzIgPT09IHRydWUgfHwgIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc2VsZiwga2V5KT8uc2V0KVxuICAgICAgICAgICAgdXBkYXRlKHNlbGYsIGtleSwgYXJnMVtrZXldLCBhcmcyID09PSB0cnVlKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAoc2VsZiBhcyBhbnkpW2tleV0gPSBhcmcxW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIGV2ZW50KHNlbGYsIGFyZzEpO1xuXG4gICAgcmV0dXJuIHBlbmRpbmcoc2VsZik7XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIG1hbmFnZWQgcHJvcGVydGllcyBpbiB0aGlzIGluc3RhbmNlIG9mIE1vZGVsLlxuICAgKiBZZWlsZHMgdGhlIGtleSBhbmQgY3VycmVudCB2YWx1ZSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAgICovXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFtzdHJpbmcsIHVua25vd25dPiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFNUQVRFLmdldCh0aGlzLmlzKSEpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIGFjdGl2YXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgbW9kZWwuXG4gICAqIFxuICAgKiAqKkltcG9ydGFudCoqIC0gVW5saWtlIGBuZXcgdGhpcyguLi4pYCAtIHRoaXMgbWV0aG9kIGFsc28gYWN0aXZhdGVzIHN0YXRlLlxuICAgKiBcbiAgICogQHBhcmFtIGFyZ3MgLSBhcmd1bWVudHMgc2VudCB0byBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIG5ldzxUIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE1vZGVsLkluaXQ8VD4sIC4uLmFyZ3M6IE1vZGVsLkFyZ3M8VD4pe1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHRoaXMoLi4uYXJncyk7XG4gICAgZXZlbnQoaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgZXF1aXZhbGVudCBvZiBgeCBpbnN0YW5jZW9mIHRoaXNgLlxuICAgKiBEZXRlcm1pbmVzIGlmIHByb3ZpZGVkIGNsYXNzIGlzIGEgc3VidHlwZSBvZiB0aGlzIG9uZS5cbiAgICogSWYgc28sIGxhbmd1YWdlIHNlcnZlciB3aWxsIG1ha2UgYXZhaWxhYmxlIGFsbCBzdGF0aWNcbiAgICogbWV0aG9kcyBhbmQgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzLlxuICAgKi9cbiAgc3RhdGljIGlzPFQgZXh0ZW5kcyBNb2RlbC5UeXBlPih0aGlzOiBULCBtYXliZTogdW5rbm93bik6IG1heWJlIGlzIFQge1xuICAgIHJldHVybiBtYXliZSA9PT0gdGhpcyB8fCB0eXBlb2YgbWF5YmUgPT0gXCJmdW5jdGlvblwiICYmIG1heWJlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBydW4gd2hlbiBhbnkgaW5zdGFuY2Ugb2YgdGhpcyBNb2RlbCBpcyB1cGRhdGVkLiBcbiAgICovXG4gIHN0YXRpYyBvbjxUIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE1vZGVsLlR5cGU8VD4sIGxpc3RlbmVyOiBNb2RlbC5PbkV2ZW50PFQ+KXtcbiAgICBsZXQgbm90aWZ5ID0gTk9USUZZLmdldCh0aGlzKTtcblxuICAgIGlmKCFub3RpZnkpXG4gICAgICBOT1RJRlkuc2V0KHRoaXMsIG5vdGlmeSA9IG5ldyBTZXQpO1xuXG4gICAgbm90aWZ5LmFkZChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gKCkgPT4gbm90aWZ5LmRlbGV0ZShsaXN0ZW5lcik7XG4gIH1cbn1cblxuZGVmaW5lKE1vZGVsLnByb3RvdHlwZSwgXCJ0b1N0cmluZ1wiLCB7XG4gIHZhbHVlKCl7XG4gICAgcmV0dXJuIElELmdldCh0aGlzLmlzKTtcbiAgfVxufSk7XG5cbmRlZmluZShNb2RlbCwgXCJ0b1N0cmluZ1wiLCB7XG4gIHZhbHVlKCl7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxufSk7XG5cbi8qKiBBcHBseSBpbnN0cnVjdGlvbnMgYW5kIGluaGVyaXRlZCBldmVudCBsaXN0ZW5lcnMuIEVuc3VyZSBjbGFzcyBtZXRhZGF0YSBpcyByZWFkeS4gKi9cbmZ1bmN0aW9uIHByZXBhcmUobW9kZWw6IE1vZGVsKXtcbiAgbGV0IFQgPSBtb2RlbC5jb25zdHJ1Y3RvciBhcyBNb2RlbC5UeXBlO1xuXG4gIGlmKFQgPT09IE1vZGVsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgYmFzZSBNb2RlbC5cIik7XG5cbiAgY29uc3QgY2hhaW4gPSBbXSBhcyBNb2RlbC5UeXBlW107XG4gIGxldCBrZXlzID0gbmV3IE1hcDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiB2b2lkPigpO1xuXG4gIElELnNldChtb2RlbCwgYCR7VH0tJHt1aWQoKX1gKTtcblxuICB3aGlsZShULm5hbWUpe1xuICAgIGZvcihjb25zdCBjYiBvZiBOT1RJRlkuZ2V0KFQpIHx8IFtdKVxuICAgICAgYWRkTGlzdGVuZXIobW9kZWwsIGNiKTtcblxuICAgIGlmKFQgPT09IE1vZGVsKSBicmVhaztcbiAgICBlbHNlIGNoYWluLnVuc2hpZnQoVCk7XG5cbiAgICBUID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKFQpXG4gIH1cblxuICBmb3IoY29uc3QgdHlwZSBvZiBjaGFpbil7XG4gICAgaWYoTUVUSE9EUy5oYXModHlwZSkpe1xuICAgICAga2V5cyA9IE1FVEhPRFMuZ2V0KHR5cGUpITtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIE1FVEhPRFMuc2V0KHR5cGUsIGtleXMgPSBuZXcgTWFwKGtleXMpKTtcblxuICAgIGZvcihjb25zdCBba2V5LCB7IHZhbHVlIH1dIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModHlwZS5wcm90b3R5cGUpXG4gICAgKSl7XG4gICAgICBpZighdmFsdWUgfHwga2V5ID09IFwiY29uc3RydWN0b3JcIilcbiAgICAgICAgY29udGludWU7XG4gICAgICBcbiAgICAgIGZ1bmN0aW9uIGJpbmQodGhpczogTW9kZWwsIG1ldGhvZCA9IHZhbHVlKXtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtZXRob2QuYmluZCh0aGlzLmlzKTtcbiAgICAgICAgXG4gICAgICAgIE1FVEhPRC5zZXQodmFsdWUsIG1ldGhvZCk7XG4gICAgICAgIGRlZmluZSh0aGlzLmlzLCBrZXksIHsgdmFsdWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBrZXlzLnNldChrZXksIGJpbmQpO1xuICAgICAgZGVmaW5lKHR5cGUucHJvdG90eXBlLCBrZXksIHsgZ2V0OiBiaW5kLCBzZXQ6IGJpbmQgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwbHkgbW9kZWwgYXJndWVtbnRzLCBydW4gY2FsbGJhY2tzIGFuZCBvYnNlcnZlIHByb3BlcnRpZXMuXG4gKiBBY2N1bXVsYXRlIGFuZCBoYW5kbGUgY2xlYW51cCBldmVudHMuXG4gKiovXG5mdW5jdGlvbiBpbml0KG1vZGVsOiBNb2RlbCwgYXJnczogTW9kZWwuQXJncyl7XG4gIGNvbnN0IG1ldGhvZHMgPSBNRVRIT0RTLmdldChtb2RlbC5jb25zdHJ1Y3RvciBhcyBNb2RlbC5UeXBlKSE7XG4gIGNvbnN0IHN0YXRlID0ge30gYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgdW5rbm93bj47XG5cbiAgU1RBVEUuc2V0KG1vZGVsLCBzdGF0ZSk7XG5cbiAgYXJncyA9IGFyZ3MuZmxhdCgpLmZpbHRlcihhcmcgPT4ge1xuICAgIGlmKHR5cGVvZiBhcmcgIT0gXCJzdHJpbmdcIilcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgSUQuc2V0KG1vZGVsLCBhcmcpO1xuICB9KTtcblxuICBhZGRMaXN0ZW5lcihtb2RlbCwgKCkgPT4ge1xuICAgIGlmKCFQQVJFTlQuaGFzKG1vZGVsKSlcbiAgICAgIFBBUkVOVC5zZXQobW9kZWwsIG51bGwpO1xuICAgIFxuICAgIGFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICBjb25zdCB1c2UgPSB0eXBlb2YgYXJnID09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IGFyZy5jYWxsKG1vZGVsLCBtb2RlbClcbiAgICAgICAgOiBhcmcgYXMgTW9kZWwuQXNzaWduPE1vZGVsPjtcblxuICAgICAgaWYodXNlIGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgdXNlLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQXN5bmMgZXJyb3IgaW4gY29uc3RydWN0b3IgZm9yICR7bW9kZWx9OmApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICBlbHNlIGlmKHR5cGVvZiB1c2UgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBhZGRMaXN0ZW5lcihtb2RlbCwgdXNlLCBudWxsKVxuICAgICAgZWxzZSBpZih0eXBlb2YgdXNlID09IFwib2JqZWN0XCIpXG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gdXNlKVxuICAgICAgICAgIGlmKGtleSBpbiBtb2RlbCB8fCBtZXRob2RzLmhhcyhrZXkpKVxuICAgICAgICAgICAgbW9kZWxba2V5IGFzIGtleW9mIE1vZGVsXSA9IHVzZVtrZXldIGFzIGFueTtcbiAgICB9KTtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gbW9kZWwpe1xuICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobW9kZWwsIGtleSkhO1xuXG4gICAgICBpZihcInZhbHVlXCIgaW4gZGVzYyl7XG4gICAgICAgIHVwZGF0ZShtb2RlbCwga2V5LCBkZXNjLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgZGVmaW5lKG1vZGVsLCBrZXksIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIGdldCgpe1xuICAgICAgICAgICAgcmV0dXJuIHdhdGNoKHRoaXMsIGtleSwgc3RhdGVba2V5XSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQodmFsdWUpe1xuICAgICAgICAgICAgdXBkYXRlKG1vZGVsLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIG1heUFkb3B0KG1vZGVsLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRMaXN0ZW5lcihtb2RlbCwgKCkgPT4ge1xuICAgICAgZm9yKGNvbnN0IFtfLCB2YWx1ZV0gb2YgbW9kZWwpXG4gICAgICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgTW9kZWwgJiYgUEFSRU5ULmdldCh2YWx1ZSkgPT09IG1vZGVsKVxuICAgICAgICAgIHZhbHVlLnNldChudWxsKTtcbiAgXG4gICAgICBPYmplY3QuZnJlZXplKHN0YXRlKTtcbiAgICB9LCBudWxsKTtcbiAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXlBZG9wdChwYXJlbnQ6IE1vZGVsLCBjaGlsZDogdW5rbm93bil7XG4gIGlmKGNoaWxkIGluc3RhbmNlb2YgTW9kZWwgJiYgIVBBUkVOVC5oYXMoY2hpbGQpKXtcbiAgICBQQVJFTlQuc2V0KGNoaWxkLCBwYXJlbnQpO1xuICAgIGV2ZW50KGNoaWxkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmZXRjaChzdWJqZWN0OiBNb2RlbCwgcHJvcGVydHk6IHN0cmluZywgcmVxdWlyZWQ/OiBib29sZWFuKXtcbiAgY29uc3Qgc3RhdGUgPSBTVEFURS5nZXQoc3ViamVjdCkhO1xuICBcbiAgaWYocHJvcGVydHkgaW4gc3RhdGUgfHwgcmVxdWlyZWQgPT09IGZhbHNlKXtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlW3Byb3BlcnR5XTtcblxuICAgIGlmKHZhbHVlICE9PSB1bmRlZmluZWQgfHwgIXJlcXVpcmVkKVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYCR7c3ViamVjdH0uJHtwcm9wZXJ0eX0gaXMgbm90IHlldCBhdmFpbGFibGUuYCk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhZGRMaXN0ZW5lcihzdWJqZWN0LCBrZXkgPT4ge1xuICAgICAgaWYoa2V5ID09PSBwcm9wZXJ0eSl7XG4gICAgICAgIHJlc29sdmUoc3RhdGVba2V5XSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZihrZXkgPT09IG51bGwpXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7c3ViamVjdH0gaXMgZGVzdHJveWVkLmApKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGhyb3cgT2JqZWN0LmFzc2lnbihwcm9taXNlLCB7XG4gICAgdG9TdHJpbmc6ICgpID0+IFN0cmluZyhlcnJvciksXG4gICAgbmFtZTogXCJTdXNwZW5zZVwiLFxuICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gIH0pO1xufVxuXG4vKiogQ3VycmVudGx5IGFjY3VtdWxhdGluZyBleHBvcnQuIFN0b3JlcyByZWFsIHZhbHVlcyBvZiBwbGFjZWhvbGRlciBwcm9wZXJ0aWVzIHN1Y2ggYXMgcmVmKCkgb3IgY2hpbGQgbW9kZWxzLiAqL1xubGV0IEVYUE9SVDogTWFwPGFueSwgYW55PiB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gc25hcHNob3Q8VCBleHRlbmRzIE1vZGVsPihtb2RlbDogVCk6IE1vZGVsLlN0YXRlPFQ+IHtcbiAgY29uc3QgdmFsdWVzID0ge30gYXMgYW55O1xuICBsZXQgaXNOb3RSZWN1cnNpdmU7XG5cbiAgaWYoIUVYUE9SVCl7XG4gICAgaXNOb3RSZWN1cnNpdmUgPSB0cnVlO1xuICAgIEVYUE9SVCA9IG5ldyBNYXAoW1ttb2RlbCwgdmFsdWVzXV0pO1xuICB9XG5cbiAgZm9yKGxldCBba2V5LCB2YWx1ZV0gb2YgbW9kZWwpe1xuICAgIGlmKEVYUE9SVC5oYXModmFsdWUpKVxuICAgICAgdmFsdWUgPSBFWFBPUlQuZ2V0KHZhbHVlKTtcbiAgICBlbHNlIGlmKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIFwiZ2V0XCIgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmdldCA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgRVhQT1JULnNldCh2YWx1ZSwgdmFsdWUgPSB2YWx1ZS5nZXQoKSk7XG5cbiAgICB2YWx1ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgaWYoaXNOb3RSZWN1cnNpdmUpXG4gICAgRVhQT1JUID0gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHZhbHVlcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZTxUPihcbiAgc3ViamVjdDogTW9kZWwsXG4gIGtleTogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLFxuICB2YWx1ZTogVCxcbiAgYXJnPzogYm9vbGVhbiB8IE1vZGVsLlNldHRlcjxUPil7XG5cbiAgY29uc3Qgc3RhdGUgPSBTVEFURS5nZXQoc3ViamVjdCkhO1xuXG4gIGlmKE9iamVjdC5pc0Zyb3plbihzdGF0ZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUcmllZCB0byB1cGRhdGUgJHtTdHJpbmcoa2V5KX0gYnV0ICR7c3ViamVjdH0gaXMgZGVzdHJveWVkLmApO1xuXG4gIGNvbnN0IHByZXZpb3VzID0gc3RhdGVba2V5XSBhcyBUO1xuXG4gIGlmKHR5cGVvZiBhcmcgPT0gXCJmdW5jdGlvblwiKXtcbiAgICBjb25zdCBvdXQgPSBhcmcuY2FsbChzdWJqZWN0LCB2YWx1ZSwgcHJldmlvdXMpO1xuXG4gICAgaWYob3V0ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmKHR5cGVvZiBvdXQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgdmFsdWUgPSBvdXQoKTtcbiAgfVxuXG4gIGlmKHZhbHVlID09PSBwcmV2aW91cylcbiAgICByZXR1cm47XG5cbiAgc3RhdGVba2V5XSA9IHZhbHVlO1xuXG4gIGlmKGFyZyAhPT0gdHJ1ZSlcbiAgICBldmVudChzdWJqZWN0LCBrZXkpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUmFuZG9tIGFscGhhbnVtYmVyaWMgb2YgbGVuZ3RoIDY7IGFsd2F5cyBzdGFydHMgd2l0aCBhIGxldHRlci4gKi9cbmZ1bmN0aW9uIHVpZCgpe1xuICByZXR1cm4gKDAuMjc4ICsgTWF0aC5yYW5kb20oKSAqIDAuNzIyKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpLnRvVXBwZXJDYXNlKCk7XG59XG5cbmV4cG9ydCB7XG4gIGV2ZW50LFxuICBmZXRjaCxcbiAgbWF5QWRvcHQsXG4gIE1FVEhPRCxcbiAgTW9kZWwsXG4gIFBBUkVOVCxcbiAgU1RBVEUs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
278
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL21vZGVsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBhZGRMaXN0ZW5lciwgY3JlYXRlRWZmZWN0LCBldmVudCwgT25VcGRhdGUsIHBlbmRpbmcsIFBFTkRJTkdfS0VZUywgd2F0Y2ggfSBmcm9tICcuL2NvbnRyb2wnO1xuXG5jb25zdCBkZWZpbmUgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8qKiBSZWdpc3RlciBmb3IgYWxsIGFjdGl2ZSBtb2RlbHMgdmlhIHN0cmluZyBpZGVudGlmaWVycyAodXN1YWxseSB1bmlxdWUpLiAqL1xuY29uc3QgSUQgPSBuZXcgV2Vha01hcDxNb2RlbCwgc3RyaW5nPigpO1xuXG4vKiogSW50ZXJuYWwgc3RhdGUgYXNzaWduZWQgdG8gbW9kZWxzLiAqL1xuY29uc3QgU1RBVEUgPSBuZXcgV2Vha01hcDxNb2RlbCwgUmVjb3JkPHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgdW5rbm93bj4+KCk7XG5cbi8qKiBFeHRlcm5hbCBsaXN0ZW5lcnMgZm9yIGFueSBnaXZlbiBNb2RlbC4gKi9cbmNvbnN0IE5PVElGWSA9IG5ldyBXZWFrTWFwPE1vZGVsLlR5cGUsIFNldDxPblVwZGF0ZT4+KCk7XG5cbi8qKiBQYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcy4gKi9cbmNvbnN0IFBBUkVOVCA9IG5ldyBXZWFrTWFwPE1vZGVsLCBNb2RlbCB8IG51bGw+KCk7XG5cbi8qKiBMaXN0IG9mIG1ldGhvZHMgZGVmaW5lZCBieSBhIGdpdmVuIHR5cGUuICovXG5jb25zdCBNRVRIT0RTID0gbmV3IFdlYWtNYXA8TW9kZWwuVHlwZSwgTWFwPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IHZvaWQ+PigpO1xuXG4vKiogUmVmZXJlbmNlIGJvdW5kIGluc3RhbmNlIG1ldGhvZHMgdG8gcmVhbCBvbmVzLiAqL1xuY29uc3QgTUVUSE9EID0gbmV3IFdlYWtNYXA8YW55LCBhbnk+KCk7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIE1vZGVsIHtcbiAgLyoqIEFueSB0eXBlIG9mIE1vZGVsLCB1c2luZyBvd24gY2xhc3MgY29uc3RydWN0b3IgYXMgaXRzIGlkZW50aWZpZXIuICovXG4gIHR5cGUgVHlwZTxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPVxuICAgIChhYnN0cmFjdCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKSAmIHR5cGVvZiBNb2RlbDtcblxuICAvKiogQSBNb2RlbCBjb25zdHJ1Y3RvciwgYnV0IHdoaWNoIGlzIG5vdCBhYnN0cmFjdC4gKi9cbiAgdHlwZSBJbml0PFQgZXh0ZW5kcyBNb2RlbCA9IE1vZGVsPiA9XG4gICAgKG5ldyAoLi4uYXJnczogTW9kZWwuQXJnczxUPikgPT4gVCkgJiBPbWl0PHR5cGVvZiBNb2RlbCwgbmV2ZXI+O1xuXG4gIC8qKlxuICAgKiBNb2RlbCBjb25zdHJ1Y3RvciBjYWxsYmFjayAtIGlzIGNhbGxlZCB3aGVuIE1vZGVsIGZpbmlzaGVzIGludGlhbGl6aW5nLlxuICAgKiBSZXR1cm5lZCBmdW5jdGlvbiB3aWxsIHJ1biB3aGVuIG1vZGVsIGlzIGRlc3Ryb3llZC5cbiAgICovXG4gIHR5cGUgQ2FsbGJhY2s8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID1cbiAgICAodGhpczogVCwgdGhpc0FyZzogVCkgPT4gUHJvbWlzZTx2b2lkPiB8ICgoKSA9PiB2b2lkKSB8IEFzc2lnbjxUPiB8IHZvaWQ7XG5cbiAgLyoqIE1vZGVsIGNvbnN0cnVjdG9yIGFyZ3VtZW50ICovXG4gIHR5cGUgQXJndW1lbnQ8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gQXNzaWduPFQ+IHwgQ2FsbGJhY2s8VD4gfCBzdHJpbmcgfCB2b2lkO1xuXG4gIC8qKiBNb2RlbCBjb25zdHJ1Y3RvciBhcmd1bWVudHMgKi9cbiAgdHlwZSBBcmdzPFQgZXh0ZW5kcyBNb2RlbCA9IGFueT4gPSAoQXJndW1lbnQ8VD4gfCBBcmdzPFQ+KVtdO1xuXG4gIC8qKiBTdWJzZXQgb2YgYGtleW9mIFRgIHdoaWNoIGFyZSBub3QgbWV0aG9kcyBvciBkZWZpbmVkIGJ5IGJhc2UgTW9kZWwgVS4gKiovXG4gIHR5cGUgRmllbGQ8VD4gPSBFeGNsdWRlPGtleW9mIFQsIGtleW9mIE1vZGVsPjtcblxuICAvKiogQW55IHZhbGlkIGtleSBmb3IgbW9kZWwsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gRmllbGQ8VD4uICovXG4gIHR5cGUgRXZlbnQ8VD4gPSBGaWVsZDxUPiB8IChzdHJpbmcgJiB7fSkgfCBudW1iZXIgfCBzeW1ib2w7XG5cbiAgLyoqIE9iamVjdCBvdmVybGF5IHRvIG92ZXJyaWRlIHZhbHVlcyBhbmQgbWV0aG9kcyBvbiBhIG1vZGVsLiAqL1xuICB0eXBlIEFzc2lnbjxUPiA9IHtcbiAgICBbSyBpbiBGaWVsZDxUPl0/OlxuICAgICAgVFtLXSBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSIFxuICAgICAgICA/ICh0aGlzOiBULCAuLi5hcmdzOiBBKSA9PiBSXG4gICAgICAgIDogVFtLXTtcbiAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBFeHBvcnQvSW1wb3J0IGNvbXBhdGlibGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcHJvcGVydHkgaW4gYSBNb2RlbC4gKi9cbiAgdHlwZSBFeHBvcnQ8Uj4gPSBSIGV4dGVuZHMgeyBnZXQoKTogaW5mZXIgVCB9ID8gVCA6IFI7XG5cbiAgLyoqIFZhbHVlIGZvciBhIHByb3BlcnR5IG1hbmFnZWQgYnkgYSBtb2RlbC4gKi9cbiAgdHlwZSBWYWx1ZTxUIGV4dGVuZHMgTW9kZWwsIEsgZXh0ZW5kcyBFdmVudDxUPj4gPVxuICAgIEsgZXh0ZW5kcyBrZXlvZiBUID8gRXhwb3J0PFRbS10+IDogdW5rbm93bjtcblxuICB0eXBlIE9uRXZlbnQ8VCBleHRlbmRzIE1vZGVsPiA9XG4gICAgKHRoaXM6IFQsIGtleTogdW5rbm93biwgc291cmNlOiBUKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkIHwgbnVsbDtcblxuICB0eXBlIE9uVXBkYXRlPFQgZXh0ZW5kcyBNb2RlbCwgSyBleHRlbmRzIEV2ZW50PFQ+PiA9XG4gICAgKHRoaXM6IFQsIGtleTogSywgdGhpc0FyZzogSykgPT4gdm9pZDtcblxuICAvKipcbiAgICogVmFsdWVzIGZyb20gY3VycmVudCBzdGF0ZSBvZiBnaXZlbiBtb2RlbC5cbiAgICogRGlmZmVycyBmcm9tIGBWYWx1ZXNgIGFzIHZhbHVlcyBoZXJlIHdpbGwgZHJpbGxcbiAgICogaW50byBcInJlYWxcIiB2YWx1ZXMgaGVsZCBieSBleG90aWNzIGxpa2UgcmVmLk9iamVjdC5cbiAgICovXG4gIHR5cGUgU3RhdGU8VD4gPSB7IFtQIGluIEZpZWxkPFQ+XTogRXhwb3J0PFRbUF0+IH07XG5cbiAgLyoqIE9iamVjdCBjb21wZXJhYmxlIHRvIGRhdGEgZm91bmQgaW4gVC4gKi9cbiAgdHlwZSBWYWx1ZXM8VD4gPSB7IFtQIGluIEZpZWxkPFQ+XT86IEV4cG9ydDxUW1BdPiB9O1xuXG4gIC8qKiBFeG90aWMgdmFsdWUsIHdoZXJlIGFjdHVhbCB2YWx1ZSBpcyBjb250YWluZWQgd2l0aGluLiAqL1xuICB0eXBlIFJlZjxUID0gYW55PiA9IHtcbiAgICAobmV4dDogVCk6IHZvaWQ7XG4gICAgY3VycmVudDogVCB8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBzdWJzY3JpYmVkIHRvIHBhcmVudCBhbmQgdXBkYXRlcyB3aGVuIGFjY2Vzc2VkIHByb3BlcnRpZXMgY2hhbmdlLlxuICAgKiBcbiAgICogQHBhcmFtIGN1cnJlbnQgLSBDdXJyZW50IHN0YXRlIG9mIHRoaXMgbW9kZWwuIFRoaXMgaXMgYSBwcm94eSB3aGljaCBkZXRlY3RzIHByb3BlcnRpZXMgd2hpY2hcbiAgICogd2hlcmUgYWNjZXNzZWQsIGFuZCB0aHVzIGRlcGVuZGVkIHVwb24gdG8gc3RheSBjdXJyZW50LlxuICAgKiBcbiAgICogQHBhcmFtIHVwZGF0ZSAtIFNldCBvZiBwcm9wZXJ0aWVzIHdoaWNoIGhhdmUgY2hhbmdlZCwgYW5kIGV2ZW50cyBmaXJlZCwgc2luY2UgbGFzdCB1cGRhdGUuXG4gICAqIFxuICAgKiBAcmV0dXJucyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhpcyBlZmZlY3QgaXMgc3RhbGUuXG4gICAqL1xuICB0eXBlIEVmZmVjdDxUPiA9ICh0aGlzOiBULCBjdXJyZW50OiBULCB1cGRhdGU6IFNldDxFdmVudDxUPj4pID0+XG4gICAgRWZmZWN0Q2FsbGJhY2sgfCBQcm9taXNlPHZvaWQ+IHwgbnVsbCB8IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJuZWQgYnkgZWZmZWN0LiBXaWxsIGJlIGNhbGxlZCB3aGVuIGVmZmVjdCBpcyBzdGFsZS5cbiAgICogXG4gICAqIEBwYXJhbSB1cGRhdGUgLSBgdHJ1ZWAgaWYgdXBkYXRlIGlzIHBlbmRpbmcsIGBmYWxzZWAgZWZmZWN0IGhhcyBiZWVuIGNhbmNlbGxlZCwgYG51bGxgIGlmIG1vZGVsIGlzIGRlc3Ryb3llZC5cbiAgICovXG4gIHR5cGUgRWZmZWN0Q2FsbGJhY2sgPSAoKHVwZGF0ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQpO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAgICogT3B0aW9uYWwgcmV0dXJuZWQgY2FsbGJhY2sgd2lsbCBydW4gd2hlbiBvbmNlIHVwb24gZmlyc3QgYWNjZXNzLlxuICAgKi9cbiAgdHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgTW9kZWwgPSBhbnk+ID1cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbGxvdyBmb3IgbnVtYmVycy9zeW1ib2wgcHJvcGVydGllcz9cbiAgICAodGhpczogTSwga2V5OiBFeHRyYWN0PEZpZWxkPE0+LCBzdHJpbmc+LCB0aGlzQXJnOiBNLCBzdGF0ZTogU3RhdGU8TT4pID0+XG4gICAgICBEZXNjcmlwdG9yPFQ+IHwgKChzb3VyY2U6IE0pID0+IFQpIHwgdm9pZDtcblxuICB0eXBlIEdldHRlcjxUPiA9IChzb3VyY2U6IE1vZGVsKSA9PiBUO1xuICB0eXBlIFNldHRlcjxUPiA9ICh2YWx1ZTogVCwgcHJldmlvdXM6IFQpID0+IGJvb2xlYW4gfCB2b2lkIHwgKCgpID0+IFQpO1xuXG4gIHR5cGUgRGVzY3JpcHRvcjxUID0gYW55PiA9IHtcbiAgICBnZXQ/OiBHZXR0ZXI8VD4gfCBib29sZWFuO1xuICAgIHNldD86IFNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgZW51bWVyYWJsZT86IGJvb2xlYW47XG4gICAgdmFsdWU/OiBUO1xuICB9XG59XG5cbmludGVyZmFjZSBNb2RlbCB7XG4gIC8qKlxuICAgKiBMb29wYmFjayB0byBpbnN0YW5jZSBvZiB0aGlzIG1vZGVsLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGluIGEgc3Vic2NyaWJlZCBjb250ZXh0LFxuICAgKiB0byBrZWVwIHdyaXRlIGFjY2VzcyB0byBgdGhpc2AgYWZ0ZXIgYSBkZXN0cnVjdHVyZS4gWW91IGNhbiB1c2UgaXQgdG8gcmVhZCB2YXJpYWJsZXMgc2lsZW50bHkgYXMgd2VsbC5cbiAgICoqL1xuICBpczogdGhpcztcbn1cblxuYWJzdHJhY3QgY2xhc3MgTW9kZWwge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBNb2RlbC5BcmdzKXtcbiAgICBwcmVwYXJlKHRoaXMpO1xuICAgIGRlZmluZSh0aGlzLCBcImlzXCIsIHsgdmFsdWU6IHRoaXMgfSk7XG4gICAgaW5pdCh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWxsIGN1cnJlbnQgdmFsdWVzIGZyb20gc3RhdGUuIEZsYXR0ZW5zIGFsbCBtb2RlbHMgYW5kIGV4b3RpYyB2YWx1ZXMgcmVjdXJzaXZlbHkuXG4gICAqIFxuICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhbGwgdmFsdWVzIGZyb20gdGhpcyBtb2RlbC5cbiAgICoqL1xuICBnZXQoKTogTW9kZWwuU3RhdGU8dGhpcz47XG5cbiAgLyoqXG4gICAqIFJ1biBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcnVuIGF1dG9tYXRpY2FsbHkgd2hlbiBhY2Nlc3NlZCB2YWx1ZXMgY2hhbmdlLlxuICAgKiBcbiAgICogQHBhcmFtIGVmZmVjdCBGdW5jdGlvbiB0byBydW4sIGFuZCBhZ2FpbiB3aGVuZXZlciBhY2Nlc3NlZCB2YWx1ZXMgY2hhbmdlLlxuICAgKiAgICAgICAgICAgICAgIElmIGVmZmVjdCByZXR1cm5zIGEgZnVuY3Rpb24sIGl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzIChzeW5jcm9ub3VzbHkpLFxuICAgKiAgICAgICAgICAgICAgIGVmZmVjdCBpcyBjYW5jZWxsZWQsIG9yIHBhcmVudCBtb2RlbCBpcyBkZXN0cm95ZWQuXG4gICAqIEByZXR1cm5zIEZ1bmN0aW9uIHRvIGNhbmNlbCBsaXN0ZW5lci5cbiAgICovXG4gIGdldChlZmZlY3Q6IE1vZGVsLkVmZmVjdDx0aGlzPik6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEdldCB2YWx1ZSBvZiBhIHByb3BlcnR5LlxuICAgKiBcbiAgICogQHBhcmFtIGtleSAtIFByb3BlcnR5IHRvIGdldCB2YWx1ZSBvZi5cbiAgICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgdHJ1ZSwgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLlxuICAgKiBAcmV0dXJucyBWYWx1ZSBvZiBwcm9wZXJ0eS5cbiAgICovXG4gIGdldDxUIGV4dGVuZHMgTW9kZWwuRXZlbnQ8dGhpcz4+KGtleTogVCwgcmVxdWlyZWQ/OiBib29sZWFuKTogTW9kZWwuVmFsdWU8dGhpcywgVD47XG5cbiAgLyoqXG4gICAqIFJ1biBhIGZ1bmN0aW9uIHdoZW4gYSBwcm9wZXJ0eSBpcyB1cGRhdGVkLlxuICAgKiBcbiAgICogQHBhcmFtIGtleSAtIFByb3BlcnR5IHRvIHdhdGNoIGZvciB1cGRhdGVzLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gcHJvcGVydHkgaXMgdXBkYXRlZC5cbiAgICogQHJldHVybnMgRnVuY3Rpb24gdG8gY2FuY2VsIGxpc3RlbmVyLlxuICAgKi9cbiAgZ2V0PFQgZXh0ZW5kcyBNb2RlbC5FdmVudDx0aGlzPj4oa2V5OiBULCBjYWxsYmFjazogTW9kZWwuT25VcGRhdGU8dGhpcywgVD4pOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtb2RlbCBpcyBleHBpcmVkLlxuICAgKiBcbiAgICogQHBhcmFtIHN0YXR1cyAtIGBudWxsYCB0byBjaGVjayBpZiBtb2RlbCBpcyBleHBpcmVkLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbW9kZWwgaXMgZXhwaXJlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBnZXQoc3RhdHVzOiBudWxsKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBtb2RlbCBpcyB0byBiZSBkZXN0cm95ZWQuXG4gICAqIFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gbW9kZWwgaXMgZGVzdHJveWVkLlxuICAgKiBAcmV0dXJucyBGdW5jdGlvbiB0byBjYW5jZWwgbGlzdGVuZXIuXG4gICAqL1xuICBnZXQoc3RhdHVzOiBudWxsLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQ7XG5cbiAgZ2V0KGFyZzE/OiBNb2RlbC5FZmZlY3Q8dGhpcz4gfCBzdHJpbmcgfCBudWxsLCBhcmcyPzogYm9vbGVhbiB8IE1vZGVsLk9uVXBkYXRlPHRoaXMsIGFueT4pe1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzLmlzO1xuXG4gICAgaWYodHlwZW9mIGFyZzEgPT0gXCJmdW5jdGlvblwiKXtcbiAgICAgIGxldCBwZW5kaW5nID0gbmV3IFNldDxNb2RlbC5FdmVudDx0aGlzPj4oKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVmZmVjdChzZWxmLCAocHJveHkpID0+IHtcbiAgICAgICAgY29uc3QgY2IgPSBhcmcxLmNhbGwocHJveHksIHByb3h5LCBwZW5kaW5nKTtcblxuICAgICAgICByZXR1cm4gY2IgPT09IG51bGwgPyBudWxsIDogKCh1cGRhdGUpID0+IHtcbiAgICAgICAgICBwZW5kaW5nID0gUEVORElOR19LRVlTLmdldChzZWxmKSE7XG4gICAgICAgICAgaWYodHlwZW9mIGNiID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGNiKHVwZGF0ZSk7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgYXJnMSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgc25hcHNob3Qoc2VsZikgOlxuICAgICAgICB0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIgP1xuICAgICAgICAgIGFkZExpc3RlbmVyKHNlbGYsIGFyZzIsIGFyZzEpIDpcbiAgICAgICAgICBhcmcxID09PSBudWxsID9cbiAgICAgICAgICAgIE9iamVjdC5pc0Zyb3plbihTVEFURS5nZXQoc2VsZikpIDpcbiAgICAgICAgICAgIGZldGNoKHNlbGYsIGFyZzEsIGFyZzIpXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1cGRhdGUgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgb2JqZWN0IHdpdGggdXBkYXRlZCB2YWx1ZXMsIGB1bmRlZmluZWRgIGlmIHRoZXJlIG5vIHVwZGF0ZSBpcyBwZW5kaW5nLlxuICAgKiovXG4gIHNldCgpOiBQcm9taXNlTGlrZTxNb2RlbC5FdmVudDx0aGlzPltdPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVXBkYXRlIG11bGl0cGxlIHByb3BlcnRpZXMgYXQgb25jZS4gTWVyZ2VzIGFyZ3VtZW50IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICogUHJvcGVydGllcyB3aGljaCBhcmUgbm90IG1hbmFnZWQgYnkgdGhpcyBtb2RlbCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFxuICAgKiBAcGFyYW0gYXNzaWduIC0gT2JqZWN0IHdpdGggcHJvcGVydGllcyB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSBzaWxlbnQgLSBJZiBhbiB1cGRhdGUgZG9lcyBvY2N1ciwgbGlzdGVuZXJzIHdpbGwgbm90IGJlIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyBhbiBhcnJheSBvZiBrZXlzIHVwZGF0ZWQsIGB1bmRlZmluZWRgIChpbW1lZGlhdGVseSkgaWYgYSBub29wLlxuICAgKi9cbiAgc2V0KGFzc2lnbj86IE1vZGVsLkFzc2lnbjx0aGlzPiwgc2lsZW50PzogYm9vbGVhbik6IFByb21pc2VMaWtlPE1vZGVsLkV2ZW50PHRoaXM+W10+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBQdXNoIGFuIHVwZGF0ZS4gVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGFzc29jaWF0ZWQgcHJvcGVydHkuXG4gICAqIFxuICAgKiBVc2VmdWwgd2hlcmUgYSBwcm9wZXJ0eSB2YWx1ZSBpbnRlcm5hbGx5IGhhcyBjaGFuZ2VkLCBidXQgdGhlIG9iamVjdCBpcyB0aGUgc2FtZS5cbiAgICogRm9yIGV4YW1wbGU6IEFuIGFycmF5IGhhcyBwdXNoZWQgYSBuZXcgdmFsdWUsIG9yIGEgbmVzdGVkIHByb3BlcnR5IGlzIHVwZGF0ZWQuXG4gICAqIFxuICAgKiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgdG8gZGlzcGF0Y2ggYXJiaXRyYXJ5IGV2ZW50cy5cbiAgICogU3ltYm9scyBhcmUgcmVjb21tZW5kZWQgYXMgbm9uLXByb3BlcnR5IGV2ZW50cywgaG93ZXZlciB5b3UgY2FuIHVzZSBhbnkgc3RyaW5nLlxuICAgKiBJZiBkb2luZyBzbywgYmUgc3VyZSB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggcHJvcGVydHkgbmFtZXMhIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXNcbiAgICogdG8gcHJlZml4IGFuIGV2ZW50IHdpdGggXCIhXCIgYW5kL29yIHVzZSBkYXNoLWNhc2UuIGUuZy4gYHNldChcIiFldmVudFwiKWAgb3IgYHNldChcIm15LWV2ZW50XCIpYC5cbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBQcm9wZXJ0eSBvciBldmVudCB0byBkaXNwYXRjaC5cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBhbiBhcnJheSBvZiBrZXlzIHVwZGF0ZWQuXG4gICAqL1xuICBzZXQoa2V5OiBNb2RlbC5FdmVudDx0aGlzPik6IFByb21pc2VMaWtlPE1vZGVsLkV2ZW50PHRoaXM+W10+O1xuXG4gIC8qKlxuICAgKiBDYWxsIGEgZnVuY3Rpb24gd2hlbiB1cGRhdGUgb2NjdXJzLlxuICAgKiBcbiAgICogR2l2ZW4gZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBldmVyeSBhc3NpZ25tZW50ICh3aGljaCBjaGFuZ2VzIHZhbHVlKSBvciBleHBsaWNpdCBgc2V0YC5cbiAgICogXG4gICAqIFRvIHJ1biBsb2dpYyBvbiBmaW5hbCB2YWx1ZSBvbmx5LCBjYWxsYmFjayBtYXkgcmV0dXJuIGEgZnVuY3Rpb24uIFVzaW5nIHRoZSBzYW1lXG4gICAqIGZ1bmN0aW9uIGZvciBvbmUgb3IgbW9yZSBldmVudHMgd2lsbCBlbnN1cmUgaXQgaXMgY2FsbGVkIG9ubHkgd2hlbiBldmVudHMgYXJlIHNldHRsZWQuXG4gICAqIFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdXBkYXRlIG9jY3Vycy5cbiAgICogQHJldHVybnMgRnVuY3Rpb24gdG8gcmVtb3ZlIGxpc3RlbmVyLiBXaWxsIHJldHVybiBgdHJ1ZWAgaWYgcmVtb3ZlZCwgYGZhbHNlYCBpZiBpbmFjdGl2ZSBhbHJlYWR5LlxuICAgKiBcbiAgKi9cbiAgc2V0KGNhbGxiYWNrOiBNb2RlbC5PbkV2ZW50PHRoaXM+KTogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2FsbCBhIGZ1bmN0aW9uIHdoZW4gYSBwcm9wZXJ0eSBpcyB1cGRhdGVkLlxuICAgKiBVbmxpa2UgYGdldGAsIHRoaXMgY2Fsc2wgc3luY2hyb25vdXNseSBhbmQgd2lsbCBmaXJlIGFzIG1hbnkgdGltZXMgYXMgdGhlIHByb3BlcnR5IGlzIHVwZGF0ZWQuXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gUHJvcGVydHkgdG8gd2F0Y2ggZm9yIHVwZGF0ZXMuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBwcm9wZXJ0eSBpcyB1cGRhdGVkLlxuICAgKi9cbiAgc2V0KGtleTogTW9kZWwuRXZlbnQ8dGhpcz4gfCBudWxsLCBjYWxsYmFjazogTW9kZWwuT25FdmVudDx0aGlzPik6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlY2xhcmUgYW4gZW5kIHRvIHVwZGF0ZXMuIFRoaXMgZXZlbnQgaXMgZmluYWwgYW5kIHdpbGwgZnJlZXplIHN0YXRlLlxuICAgKiBUaGlzIGV2ZW50IGNhbiBiZSB3YXRjaGVkIGZvciBhcyB3ZWxsLCB0byBydW4gY2xlYW51cCBsb2dpYyBhbmQgaW50ZXJuYWxseSB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzLlxuICAgKiBcbiAgICogQHBhcmFtIHN0YXR1cyAtIGBudWxsYCB0byBlbmQgdXBkYXRlcy5cbiAgICovXG4gIHNldChzdGF0dXM6IG51bGwpOiB2b2lkO1xuXG4gIHNldChcbiAgICBhcmcxPzogTW9kZWwuT25FdmVudDx0aGlzPiB8IE1vZGVsLkFzc2lnbjx0aGlzPiB8IE1vZGVsLkV2ZW50PHRoaXM+IHwgbnVsbCxcbiAgICBhcmcyPzogYm9vbGVhbiB8IE1vZGVsLk9uRXZlbnQ8dGhpcz4pe1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXMuaXM7XG5cbiAgICBpZih0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICByZXR1cm4gYWRkTGlzdGVuZXIoc2VsZiwga2V5ID0+IHtcbiAgICAgICAgaWYodHlwZW9mIGtleSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgIHJldHVybiBhcmcxLmNhbGwoc2VsZiwga2V5LCBzZWxmKTtcbiAgICAgIH0pXG4gICAgICBcbiAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICByZXR1cm4gYWRkTGlzdGVuZXIoc2VsZiwga2V5ID0+IHtcbiAgICAgICAgaWYoa2V5ID09PSBhcmcxKVxuICAgICAgICAgIHJldHVybiBhcmcyLmNhbGwoc2VsZiwga2V5LCBzZWxmKTtcbiAgICAgIH0pO1xuXG4gICAgaWYoYXJnMSAmJiB0eXBlb2YgYXJnMSA9PSBcIm9iamVjdFwiKVxuICAgICAgYXNzaWduKHNlbGYsIGFyZzEsIGFyZzIgPT09IHRydWUpO1xuICAgIGVsc2VcbiAgICAgIGV2ZW50KHNlbGYsIGFyZzEpO1xuXG4gICAgcmV0dXJuIHBlbmRpbmcoc2VsZik7XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIG1hbmFnZWQgcHJvcGVydGllcyBpbiB0aGlzIGluc3RhbmNlIG9mIE1vZGVsLlxuICAgKiBZZWlsZHMgdGhlIGtleSBhbmQgY3VycmVudCB2YWx1ZSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAgICovXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFtzdHJpbmcsIHVua25vd25dPiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFNUQVRFLmdldCh0aGlzLmlzKSEpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIGFjdGl2YXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgbW9kZWwuXG4gICAqIFxuICAgKiAqKkltcG9ydGFudCoqIC0gVW5saWtlIGBuZXcgdGhpcyguLi4pYCAtIHRoaXMgbWV0aG9kIGFsc28gYWN0aXZhdGVzIHN0YXRlLlxuICAgKiBcbiAgICogQHBhcmFtIGFyZ3MgLSBhcmd1bWVudHMgc2VudCB0byBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIG5ldzxUIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE1vZGVsLkluaXQ8VD4sIC4uLmFyZ3M6IE1vZGVsLkFyZ3M8VD4pe1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHRoaXMoLi4uYXJncyk7XG4gICAgZXZlbnQoaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgZXF1aXZhbGVudCBvZiBgeCBpbnN0YW5jZW9mIHRoaXNgLlxuICAgKiBEZXRlcm1pbmVzIGlmIHByb3ZpZGVkIGNsYXNzIGlzIGEgc3VidHlwZSBvZiB0aGlzIG9uZS5cbiAgICogSWYgc28sIGxhbmd1YWdlIHNlcnZlciB3aWxsIG1ha2UgYXZhaWxhYmxlIGFsbCBzdGF0aWNcbiAgICogbWV0aG9kcyBhbmQgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzLlxuICAgKi9cbiAgc3RhdGljIGlzPFQgZXh0ZW5kcyBNb2RlbC5UeXBlPih0aGlzOiBULCBtYXliZTogdW5rbm93bik6IG1heWJlIGlzIFQge1xuICAgIHJldHVybiBtYXliZSA9PT0gdGhpcyB8fCB0eXBlb2YgbWF5YmUgPT0gXCJmdW5jdGlvblwiICYmIG1heWJlLnByb3RvdHlwZSBpbnN0YW5jZW9mIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBydW4gd2hlbiBhbnkgaW5zdGFuY2Ugb2YgdGhpcyBNb2RlbCBpcyB1cGRhdGVkLiBcbiAgICovXG4gIHN0YXRpYyBvbjxUIGV4dGVuZHMgTW9kZWw+KHRoaXM6IE1vZGVsLlR5cGU8VD4sIGxpc3RlbmVyOiBNb2RlbC5PbkV2ZW50PFQ+KXtcbiAgICBsZXQgbm90aWZ5ID0gTk9USUZZLmdldCh0aGlzKTtcblxuICAgIGlmKCFub3RpZnkpXG4gICAgICBOT1RJRlkuc2V0KHRoaXMsIG5vdGlmeSA9IG5ldyBTZXQpO1xuXG4gICAgbm90aWZ5LmFkZChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gKCkgPT4gbm90aWZ5LmRlbGV0ZShsaXN0ZW5lcik7XG4gIH1cbn1cblxuZGVmaW5lKE1vZGVsLnByb3RvdHlwZSwgXCJ0b1N0cmluZ1wiLCB7XG4gIHZhbHVlKCl7XG4gICAgcmV0dXJuIElELmdldCh0aGlzLmlzKTtcbiAgfVxufSk7XG5cbmRlZmluZShNb2RlbCwgXCJ0b1N0cmluZ1wiLCB7XG4gIHZhbHVlKCl7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGFzc2lnbihzdWJqZWN0OiBNb2RlbCwgZGF0YTogTW9kZWwuQXNzaWduPE1vZGVsPiwgc2lsZW50PzogYm9vbGVhbil7XG4gIGNvbnN0IG1ldGhvZHMgPSBNRVRIT0RTLmdldChzdWJqZWN0LmNvbnN0cnVjdG9yIGFzIE1vZGVsLlR5cGUpITtcbiAgICBcbiAgZm9yKGNvbnN0IGtleSBpbiBkYXRhKXtcbiAgICBjb25zdCBiaW5kID0gbWV0aG9kcy5nZXQoa2V5KTtcbiAgICBpZihiaW5kKVxuICAgICAgYmluZC5jYWxsKHN1YmplY3QsIGRhdGFba2V5XSk7XG4gICAgZWxzZSBpZihrZXkgaW4gc3ViamVjdCAmJiBrZXkgIT09IFwiaXNcIil7XG4gICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0LCBrZXkpITtcbiAgICAgIGNvbnN0IHNldCA9IGRlc2MgJiYgZGVzYy5zZXQgYXMgKHZhbHVlOiBhbnksIHNpbGVudD86IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAgIHNldC5jYWxsKHN1YmplY3QsIGRhdGFba2V5XSwgc2lsZW50ID09PSB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEFwcGx5IGluc3RydWN0aW9ucyBhbmQgaW5oZXJpdGVkIGV2ZW50IGxpc3RlbmVycy4gRW5zdXJlIGNsYXNzIG1ldGFkYXRhIGlzIHJlYWR5LiAqL1xuZnVuY3Rpb24gcHJlcGFyZShtb2RlbDogTW9kZWwpe1xuICBsZXQgVCA9IG1vZGVsLmNvbnN0cnVjdG9yIGFzIE1vZGVsLlR5cGU7XG5cbiAgaWYoVCA9PT0gTW9kZWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBiYXNlIE1vZGVsLlwiKTtcblxuICBjb25zdCBjaGFpbiA9IFtdIGFzIE1vZGVsLlR5cGVbXTtcbiAgbGV0IGtleXMgPSBuZXcgTWFwPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IHZvaWQ+KCk7XG5cbiAgSUQuc2V0KG1vZGVsLCBgJHtUfS0ke3VpZCgpfWApO1xuXG4gIHdoaWxlKFQubmFtZSl7XG4gICAgZm9yKGNvbnN0IGNiIG9mIE5PVElGWS5nZXQoVCkgfHwgW10pXG4gICAgICBhZGRMaXN0ZW5lcihtb2RlbCwgY2IpO1xuXG4gICAgaWYoVCA9PT0gTW9kZWwpIGJyZWFrO1xuICAgIGVsc2UgY2hhaW4udW5zaGlmdChUKTtcblxuICAgIFQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVClcbiAgfVxuXG4gIGZvcihjb25zdCB0eXBlIG9mIGNoYWluKXtcbiAgICBpZihNRVRIT0RTLmhhcyh0eXBlKSl7XG4gICAgICBrZXlzID0gTUVUSE9EUy5nZXQodHlwZSkhO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgTUVUSE9EUy5zZXQodHlwZSwga2V5cyA9IG5ldyBNYXAoa2V5cykpO1xuXG4gICAgZm9yKGNvbnN0IFtrZXksIHsgdmFsdWUgfV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0eXBlLnByb3RvdHlwZSlcbiAgICApKXtcbiAgICAgIGlmKCF2YWx1ZSB8fCBrZXkgPT0gXCJjb25zdHJ1Y3RvclwiKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIFxuICAgICAgZnVuY3Rpb24gYmluZCh0aGlzOiBNb2RlbCwgbWV0aG9kID0gdmFsdWUpe1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldGhvZC5iaW5kKHRoaXMuaXMpO1xuICAgICAgICBcbiAgICAgICAgTUVUSE9ELnNldCh2YWx1ZSwgbWV0aG9kKTtcbiAgICAgICAgZGVmaW5lKHRoaXMuaXMsIGtleSwgeyB2YWx1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGtleXMuc2V0KGtleSwgYmluZCk7XG4gICAgICBkZWZpbmUodHlwZS5wcm90b3R5cGUsIGtleSwgeyBnZXQ6IGJpbmQsIHNldDogYmluZCB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBseSBtb2RlbCBhcmd1ZW1udHMsIHJ1biBjYWxsYmFja3MgYW5kIG9ic2VydmUgcHJvcGVydGllcy5cbiAqIEFjY3VtdWxhdGUgYW5kIGhhbmRsZSBjbGVhbnVwIGV2ZW50cy5cbiAqKi9cbmZ1bmN0aW9uIGluaXQobW9kZWw6IE1vZGVsLCBhcmdzOiBNb2RlbC5BcmdzKXtcbiAgY29uc3Qgc3RhdGUgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB1bmtub3duPjtcblxuICBTVEFURS5zZXQobW9kZWwsIHN0YXRlKTtcblxuICBhcmdzID0gYXJncy5mbGF0KCkuZmlsdGVyKGFyZyA9PiB7XG4gICAgaWYodHlwZW9mIGFyZyAhPSBcInN0cmluZ1wiKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBJRC5zZXQobW9kZWwsIGFyZyk7XG4gIH0pO1xuXG4gIGFkZExpc3RlbmVyKG1vZGVsLCAoKSA9PiB7XG4gICAgaWYoIVBBUkVOVC5oYXMobW9kZWwpKVxuICAgICAgUEFSRU5ULnNldChtb2RlbCwgbnVsbCk7XG5cbiAgICBmb3IoY29uc3Qga2V5IGluIG1vZGVsKXtcbiAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG1vZGVsLCBrZXkpITtcblxuICAgICAgaWYoXCJ2YWx1ZVwiIGluIGRlc2Mpe1xuICAgICAgICB1cGRhdGUobW9kZWwsIGtleSwgZGVzYy52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIGRlZmluZShtb2RlbCwga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBnZXQoKXtcbiAgICAgICAgICAgIHJldHVybiB3YXRjaCh0aGlzLCBrZXksIHN0YXRlW2tleV0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0KHZhbHVlLCBzaWxlbnQ/OiBib29sZWFuKXtcbiAgICAgICAgICAgIHVwZGF0ZShtb2RlbCwga2V5LCB2YWx1ZSwgc2lsZW50KTtcbiAgICAgICAgICAgIG1heUFkb3B0KG1vZGVsLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgYXJncy5mb3JFYWNoKChhcmcpID0+IHtcbiAgICAgIGNvbnN0IHVzZSA9IHR5cGVvZiBhcmcgPT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gYXJnLmNhbGwobW9kZWwsIG1vZGVsKVxuICAgICAgICA6IGFyZyBhcyBNb2RlbC5Bc3NpZ248TW9kZWw+O1xuXG4gICAgICBpZih1c2UgaW5zdGFuY2VvZiBQcm9taXNlKVxuICAgICAgICB1c2UuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBBc3luYyBlcnJvciBpbiBjb25zdHJ1Y3RvciBmb3IgJHttb2RlbH06YCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYodHlwZW9mIHVzZSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGFkZExpc3RlbmVyKG1vZGVsLCB1c2UsIG51bGwpXG4gICAgICBlbHNlIGlmKHR5cGVvZiB1c2UgPT0gXCJvYmplY3RcIilcbiAgICAgICAgYXNzaWduKG1vZGVsLCB1c2UsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgYWRkTGlzdGVuZXIobW9kZWwsICgpID0+IHtcbiAgICAgIGZvcihjb25zdCBbXywgdmFsdWVdIG9mIG1vZGVsKVxuICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIE1vZGVsICYmIFBBUkVOVC5nZXQodmFsdWUpID09PSBtb2RlbClcbiAgICAgICAgICB2YWx1ZS5zZXQobnVsbCk7XG4gIFxuICAgICAgT2JqZWN0LmZyZWV6ZShzdGF0ZSk7XG4gICAgfSwgbnVsbCk7XG4gIFxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWF5QWRvcHQocGFyZW50OiBNb2RlbCwgY2hpbGQ6IHVua25vd24pe1xuICBpZihjaGlsZCBpbnN0YW5jZW9mIE1vZGVsICYmICFQQVJFTlQuaGFzKGNoaWxkKSl7XG4gICAgUEFSRU5ULnNldChjaGlsZCwgcGFyZW50KTtcbiAgICBldmVudChjaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmV0Y2goc3ViamVjdDogTW9kZWwsIHByb3BlcnR5OiBzdHJpbmcsIHJlcXVpcmVkPzogYm9vbGVhbil7XG4gIGNvbnN0IHN0YXRlID0gU1RBVEUuZ2V0KHN1YmplY3QpITtcbiAgXG4gIGlmKHByb3BlcnR5IGluIHN0YXRlIHx8IHJlcXVpcmVkID09PSBmYWxzZSl7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZVtwcm9wZXJ0eV07XG5cbiAgICBpZih2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICFyZXF1aXJlZClcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGAke3N1YmplY3R9LiR7cHJvcGVydHl9IGlzIG5vdCB5ZXQgYXZhaWxhYmxlLmApO1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYWRkTGlzdGVuZXIoc3ViamVjdCwga2V5ID0+IHtcbiAgICAgIGlmKGtleSA9PT0gcHJvcGVydHkpe1xuICAgICAgICByZXNvbHZlKHN0YXRlW2tleV0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYoa2V5ID09PSBudWxsKVxuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3N1YmplY3R9IGlzIGRlc3Ryb3llZC5gKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRocm93IE9iamVjdC5hc3NpZ24ocHJvbWlzZSwge1xuICAgIHRvU3RyaW5nOiAoKSA9PiBTdHJpbmcoZXJyb3IpLFxuICAgIG5hbWU6IFwiU3VzcGVuc2VcIixcbiAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgIHN0YWNrOiBlcnJvci5zdGFja1xuICB9KTtcbn1cblxuLyoqIEN1cnJlbnRseSBhY2N1bXVsYXRpbmcgZXhwb3J0LiBTdG9yZXMgcmVhbCB2YWx1ZXMgb2YgcGxhY2Vob2xkZXIgcHJvcGVydGllcyBzdWNoIGFzIHJlZigpIG9yIGNoaWxkIG1vZGVscy4gKi9cbmxldCBFWFBPUlQ6IE1hcDxhbnksIGFueT4gfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIHNuYXBzaG90PFQgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFQpOiBNb2RlbC5TdGF0ZTxUPiB7XG4gIGNvbnN0IHZhbHVlcyA9IHt9IGFzIGFueTtcbiAgbGV0IGlzTm90UmVjdXJzaXZlO1xuXG4gIGlmKCFFWFBPUlQpe1xuICAgIGlzTm90UmVjdXJzaXZlID0gdHJ1ZTtcbiAgICBFWFBPUlQgPSBuZXcgTWFwKFtbbW9kZWwsIHZhbHVlc11dKTtcbiAgfVxuXG4gIGZvcihsZXQgW2tleSwgdmFsdWVdIG9mIG1vZGVsKXtcbiAgICBpZihFWFBPUlQuaGFzKHZhbHVlKSlcbiAgICAgIHZhbHVlID0gRVhQT1JULmdldCh2YWx1ZSk7XG4gICAgZWxzZSBpZih2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiBcImdldFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5nZXQgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIEVYUE9SVC5zZXQodmFsdWUsIHZhbHVlID0gdmFsdWUuZ2V0KCkpO1xuXG4gICAgdmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGlmKGlzTm90UmVjdXJzaXZlKVxuICAgIEVYUE9SVCA9IHVuZGVmaW5lZDtcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh2YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGU8VD4oXG4gIHN1YmplY3Q6IE1vZGVsLFxuICBrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCxcbiAgdmFsdWU6IFQsXG4gIGFyZz86IGJvb2xlYW4gfCBNb2RlbC5TZXR0ZXI8VD4pe1xuXG4gIGNvbnN0IHN0YXRlID0gU1RBVEUuZ2V0KHN1YmplY3QpITtcblxuICBpZihPYmplY3QuaXNGcm96ZW4oc3RhdGUpKVxuICAgIHRocm93IG5ldyBFcnJvcihgVHJpZWQgdG8gdXBkYXRlICR7U3RyaW5nKGtleSl9IGJ1dCAke3N1YmplY3R9IGlzIGRlc3Ryb3llZC5gKTtcblxuICBjb25zdCBwcmV2aW91cyA9IHN0YXRlW2tleV0gYXMgVDtcblxuICBpZih0eXBlb2YgYXJnID09IFwiZnVuY3Rpb25cIil7XG4gICAgY29uc3Qgb3V0ID0gYXJnLmNhbGwoc3ViamVjdCwgdmFsdWUsIHByZXZpb3VzKTtcblxuICAgIGlmKG91dCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZih0eXBlb2Ygb3V0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgIHZhbHVlID0gb3V0KCk7XG4gIH1cblxuICBpZih2YWx1ZSA9PT0gcHJldmlvdXMgJiYgdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG5cbiAgc3RhdGVba2V5XSA9IHZhbHVlO1xuXG4gIGlmKGFyZyAhPT0gdHJ1ZSlcbiAgICBldmVudChzdWJqZWN0LCBrZXkpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUmFuZG9tIGFscGhhbnVtYmVyaWMgb2YgbGVuZ3RoIDY7IGFsd2F5cyBzdGFydHMgd2l0aCBhIGxldHRlci4gKi9cbmZ1bmN0aW9uIHVpZCgpe1xuICByZXR1cm4gKDAuMjc4ICsgTWF0aC5yYW5kb20oKSAqIDAuNzIyKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpLnRvVXBwZXJDYXNlKCk7XG59XG5cbmV4cG9ydCB7XG4gIGV2ZW50LFxuICBmZXRjaCxcbiAgbWF5QWRvcHQsXG4gIE1FVEhPRCxcbiAgTW9kZWwsXG4gIFBBUkVOVCxc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
package/dist/index.d.ts CHANGED
@@ -295,6 +295,13 @@ declare namespace ref {
295
295
  (next: T | null): void;
296
296
  /** Current value held by this reference. */
297
297
  current: T | null;
298
+ /**
299
+ * Subscribe to changes of this reference.
300
+ *
301
+ * @param callback - Callback to invoke with the current value when it changes.
302
+ * @returns Unsubscribe function to stop listening to changes.
303
+ */
304
+ on(callback: (value: T) => void): () => void;
298
305
  /** Retrieve current value. */
299
306
  get(): T | null;
300
307
  }