diff --git a/addons/cetmix_tower_server/static/src/components/ace_variables/autocomplete_popup.esm.js b/addons/cetmix_tower_server/static/src/components/ace_variables/autocomplete_popup.esm.js new file mode 100644 index 0000000..1ed1837 --- /dev/null +++ b/addons/cetmix_tower_server/static/src/components/ace_variables/autocomplete_popup.esm.js @@ -0,0 +1 @@ +LyoqIEBvZG9vLW1vZHVsZSAqKi8KCmltcG9ydCB7Q29tcG9uZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gIkBvZG9vL293bCI7CgpjbGFzcyBBdXRvY29tcGxldGVQb3B1cCBleHRlbmRzIENvbXBvbmVudCB7CiAgICAvKioKICAgICAqIENvbXBvbmVudCBzZXR1cCBtZXRob2QgdGhhdCBpbml0aWFsaXplcyByZWZzLCBzdGF0ZSwgYW5kIGVmZmVjdHMKICAgICAqLwogICAgc2V0dXAoKSB7CiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHVzZVJlZigicG9wdXBSZWYiKTsKICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gdXNlUmVmKCJzZWFyY2hJbnB1dCIpOwogICAgICAgIHRoaXMuaXRlbXNDb250YWluZXIgPSB1c2VSZWYoIml0ZW1zQ29udGFpbmVyIik7CgogICAgICAgIC8vIFN0YXRlIGZvciBzZWFyY2ggZnVuY3Rpb25hbGl0eQogICAgICAgIHRoaXMuc3RhdGUgPSB1c2VTdGF0ZSh7CiAgICAgICAgICAgIHNlYXJjaFRlcm06ICIiLAogICAgICAgIH0pOwoKICAgICAgICB1c2VFZmZlY3QoCiAgICAgICAgICAgICgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAoKSA9PiBbdGhpcy5wcm9wcy5zZWxlY3RlZEluZGV4XQogICAgICAgICk7CgogICAgICAgIC8vIEF1dG8tZm9jdXMgc2VhcmNoIGlucHV0IHdoZW4gcG9wdXAgb3BlbnMKICAgICAgICB1c2VFZmZlY3QoCiAgICAgICAgICAgICgpID0+IHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LmVsKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIERPTSBpcyByZWFkeQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LmVsLmZvY3VzKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAoKSA9PiBbXQogICAgICAgICk7CgogICAgICAgIHVzZUVmZmVjdCgKICAgICAgICAgICAgKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMucG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9wdXBSZWYuZWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuZWwuc3R5bGUubGVmdCA9IGAke3RoaXMucHJvcHMucG9zaXRpb24ubGVmdH1weGA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmVsLnN0eWxlLnRvcCA9IGAke3RoaXMucHJvcHMucG9zaXRpb24udG9wfXB4YDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuZWwuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAoKSA9PiBbdGhpcy5wcm9wcy5wb3NpdGlvbl0KICAgICAgICApOwoKICAgICAgICAvLyBDbGVhbnVwIGVmZmVjdCB0byBjbGVhciBzZWFyY2ggdGltZW91dAogICAgICAgIHVzZUVmZmVjdCgKICAgICAgICAgICAgKCkgPT4gewogICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICgpID0+IFtdCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZXMgc2VhcmNoIHRlcm0gZnJvbSBleHRlcm5hbCBrZXlib2FyZCBpbnB1dCAoZnJvbSBlZGl0b3IpCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2hhciAtIFRoZSBjaGFyYWN0ZXIgdHlwZWQgb3IgJ0JhY2tzcGFjZScgZm9yIGRlbGV0aW9uCiAgICAgKi8KICAgIHVwZGF0ZVNlYXJjaEZyb21FZGl0b3IoY2hhcikgewogICAgICAgIGlmIChjaGFyID09PSAiQmFja3NwYWNlIikgewogICAgICAgICAgICB0aGlzLnN0YXRlLnNlYXJjaFRlcm0gPSB0aGlzLnN0YXRlLnNlYXJjaFRlcm0uc2xpY2UoMCwgLTEpOwogICAgICAgIH0gZWxzZSBpZiAoY2hhci5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZWFyY2hUZXJtICs9IGNoYXI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnByb3BzLm9uU2VsZWN0ZWRJbmRleENoYW5nZSkgewogICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0ZWRJbmRleENoYW5nZSgwKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXJzIGNvbW1hbmRzIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIHdpdGggZW5oYW5jZWQgc2VhcmNoIGNhcGFiaWxpdGllcwogICAgICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBhbmQgc29ydGVkIGFycmF5IG9mIGNvbW1hbmRzIG1hdGNoaW5nIHRoZSBzZWFyY2ggdGVybQogICAgICovCiAgICBnZXQgZmlsdGVyZWRDb21tYW5kcygpIHsKICAgICAgICBpZiAoIXRoaXMuc3RhdGUuc2VhcmNoVGVybS50cmltKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29tbWFuZHM7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy5zdGF0ZS5zZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIEZpbHRlciBhbmQgc2NvcmUgY29tbWFuZHMgYmFzZWQgb24gc2VhcmNoIHJlbGV2YW5jZQogICAgICAgIGNvbnN0IHNjb3JlZENvbW1hbmRzID0gdGhpcy5wcm9wcy5jb21tYW5kcwogICAgICAgICAgICAubWFwKChjb21tYW5kKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gKGNvbW1hbmQubmFtZSB8fCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IChjb21tYW5kLnJlZmVyZW5jZSB8fCAiIikudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgICAgICBsZXQgc2NvcmUgPSAwOwoKICAgICAgICAgICAgICAgIC8vIEV4YWN0IG1hdGNoZXMgZ2V0IGhpZ2hlc3QgcHJpb3JpdHkKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBzZWFyY2hUZXJtIHx8IHJlZmVyZW5jZSA9PT0gc2VhcmNoVGVybSkgewogICAgICAgICAgICAgICAgICAgIHNjb3JlID0gMTAwMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIHNlYXJjaCB0ZXJtIGdldHMgaGlnaCBwcmlvcml0eQogICAgICAgICAgICAgICAgZWxzZSBpZiAoCiAgICAgICAgICAgICAgICAgICAgbmFtZS5zdGFydHNXaXRoKHNlYXJjaFRlcm0pIHx8CiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLnN0YXJ0c1dpdGgoc2VhcmNoVGVybSkKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIHNjb3JlID0gMTAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ29udGFpbnMgc2VhcmNoIHRlcm0gZ2V0cyBtZWRpdW0gcHJpb3JpdHkKICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUuaW5jbHVkZXMoc2VhcmNoVGVybSkgfHwgcmVmZXJlbmNlLmluY2x1ZGVzKHNlYXJjaFRlcm0pKSB7CiAgICAgICAgICAgICAgICAgICAgc2NvcmUgPSAxMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNoCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBCb29zdCBzY29yZSBmb3IgbmFtZSBtYXRjaGVzIG92ZXIgcmVmZXJlbmNlIG1hdGNoZXMKICAgICAgICAgICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKHNlYXJjaFRlcm0pKSB7CiAgICAgICAgICAgICAgICAgICAgc2NvcmUgKz0gNTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBCb29zdCBzY29yZSBmb3Igc2hvcnRlciBtYXRjaGVzIChtb3JlIHJlbGV2YW50KQogICAgICAgICAgICAgICAgc2NvcmUgKz0gTWF0aC5tYXgoMCwgNTAgLSBNYXRoLm1pbihuYW1lLmxlbmd0aCwgcmVmZXJlbmNlLmxlbmd0aCkpOwoKICAgICAgICAgICAgICAgIHJldHVybiB7Y29tbWFuZCwgc2NvcmV9OwogICAgICAgICAgICB9KQogICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBudWxsKQogICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpCiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uY29tbWFuZCk7CgogICAgICAgIHJldHVybiBzY29yZWRDb21tYW5kczsKICAgIH0KCiAgICAvKioKICAgICAqIERlYm91bmNlcyB0aGUgc2VhcmNoIGZpbHRlcmluZwogICAgICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFRlcm0gLSBUaGUgc2VhcmNoIHRlcm0gdG8gc2V0CiAgICAgKi8KICAgIGRlYm91bmNlZFNlYXJjaChzZWFyY2hUZXJtKSB7CiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdGUuc2VhcmNoVGVybSA9IHNlYXJjaFRlcm07CiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm9uU2VsZWN0ZWRJbmRleENoYW5nZSkgewogICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdGVkSW5kZXhDaGFuZ2UoMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCAxNTApOwogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBzZWFyY2ggaW5wdXQgY2hhbmdlcwogICAgICogQHBhcmFtIHtFdmVudH0gZXYgLSBUaGUgaW5wdXQgZXZlbnQKICAgICAqLwogICAgb25TZWFyY2hJbnB1dChldikgewogICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMuZGVib3VuY2VkU2VhcmNoKGV2LnRhcmdldC52YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21tb24ga2V5Ym9hcmQgbmF2aWdhdGlvbiBsb2dpYwogICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldiAtIFRoZSBrZXlib2FyZCBldmVudAogICAgICovCiAgICBoYW5kbGVLZXlib2FyZE5hdmlnYXRpb24oZXYpIHsKICAgICAgICBpZiAoZXYua2V5ID09PSAiQXJyb3dEb3duIikgewogICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IE1hdGgubWluKAogICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuc2VsZWN0ZWRJbmRleCB8fCAwKSArIDEsCiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQ29tbWFuZHMubGVuZ3RoIC0gMQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblNlbGVjdGVkSW5kZXhDaGFuZ2UpIHsKICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3RlZEluZGV4Q2hhbmdlKG5ld0luZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWQoKTsKICAgICAgICB9IGVsc2UgaWYgKGV2LmtleSA9PT0gIkFycm93VXAiKSB7CiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gTWF0aC5tYXgoKHRoaXMucHJvcHMuc2VsZWN0ZWRJbmRleCB8fCAwKSAtIDEsIDApOwogICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblNlbGVjdGVkSW5kZXhDaGFuZ2UpIHsKICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3RlZEluZGV4Q2hhbmdlKG5ld0luZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWQoKTsKICAgICAgICB9IGVsc2UgaWYgKGV2LmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbW1hbmQgPQogICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZENvbW1hbmRzW3RoaXMucHJvcHMuc2VsZWN0ZWRJbmRleCB8fCAwXTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ29tbWFuZCkgewogICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljayhzZWxlY3RlZENvbW1hbmQpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChldi5rZXkgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMucHJvcHMub25JdGVtQ2xpY2sobnVsbCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiBzZWFyY2ggaW5wdXQKICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXYgLSBUaGUga2V5Ym9hcmQgZXZlbnQKICAgICAqLwogICAgb25TZWFyY2hLZXlEb3duKGV2KSB7CiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZE5hdmlnYXRpb24oZXYpOwogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBmb2N1cyBldmVudHMgb24gc2VhcmNoIGlucHV0CiAgICAgKiBAcGFyYW0ge0ZvY3VzRXZlbnR9IGV2IC0gVGhlIGZvY3VzIGV2ZW50CiAgICAgKi8KICAgIG9uU2VhcmNoRm9jdXMoZXYpIHsKICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEhhbmRsZXMgYmx1ciBldmVudHMgb24gc2VhcmNoIGlucHV0CiAgICAgKiBAcGFyYW0ge0ZvY3VzRXZlbnR9IGV2IC0gVGhlIGJsdXIgZXZlbnQKICAgICAqLwogICAgb25TZWFyY2hCbHVyKGV2KSB7CiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBzZWFyY2ggaW5wdXQKICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXYgLSBUaGUgY2xpY2sgZXZlbnQKICAgICAqLwogICAgb25TZWFyY2hDbGljayhldikgewogICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBtb3VzZWRvd24gZXZlbnRzIG9uIHNlYXJjaCBpbnB1dAogICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldiAtIFRoZSBtb3VzZWRvd24gZXZlbnQKICAgICAqLwogICAgb25TZWFyY2hNb3VzZURvd24oZXYpIHsKICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEhhbmRsZXMgaXRlbSBjbGljayBldmVudHMKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb21tYW5kIC0gVGhlIHNlbGVjdGVkIGNvbW1hbmQgb2JqZWN0CiAgICAgKi8KICAgIG9uSXRlbUNsaWNrKGNvbW1hbmQpIHsKICAgICAgICB0aGlzLnByb3BzLm9uSXRlbUNsaWNrKGNvbW1hbmQpOwogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBjbG9zZSBidXR0b24gY2xpY2sgZXZlbnRzCiAgICAgKi8KICAgIG9uQ2xvc2VDbGljaygpIHsKICAgICAgICB0aGlzLnByb3BzLm9uSXRlbUNsaWNrKG51bGwpOwogICAgfQoKICAgIC8qKgogICAgICogSGFuZGxlcyBnbG9iYWwga2V5ZG93biBldmVudHMgZm9yIHRoZSBwb3B1cAogICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldiAtIFRoZSBrZXlib2FyZCBldmVudAogICAgICovCiAgICBvbktleURvd24oZXYpIHsKICAgICAgICAvLyBIYW5kbGUgc2VhcmNoIGlucHV0IGZyb20gZWRpdG9yIGtleWJvYXJkIGV2ZW50cwogICAgICAgIGlmIChldi5rZXkubGVuZ3RoID09PSAxICYmIGV2LmtleS5tYXRjaCgvW2EtekEtWjAtOV9dLykpIHsKICAgICAgICAgICAgLy8gQWRkIHR5cGVkIGNoYXJhY3RlciB0byBzZWFyY2gKICAgICAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hGcm9tRWRpdG9yKGV2LmtleSk7CiAgICAgICAgfSBlbHNlIGlmIChldi5rZXkgPT09ICJCYWNrc3BhY2UiKSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBsYXN0IGNoYXJhY3RlciBmcm9tIHNlYXJjaAogICAgICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZyb21FZGl0b3IoIkJhY2tzcGFjZSIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFVzZSBjb21tb24ga2V5Ym9hcmQgbmF2aWdhdGlvbiBsb2dpYwogICAgICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkTmF2aWdhdGlvbihldik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2Nyb2xscyB0aGUgc2VsZWN0ZWQgaXRlbSBpbnRvIHZpZXcKICAgICAqLwogICAgc2Nyb2xsVG9TZWxlY3RlZCgpIHsKICAgICAgICBjb25zdCBpdGVtc0NvbnRhaW5lciA9IHRoaXMuaXRlbXNDb250YWluZXIuZWw7CiAgICAgICAgaWYgKAogICAgICAgICAgICBpdGVtc0NvbnRhaW5lciAmJgogICAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkSW5kZXggIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkSW5kZXggPj0gMCAmJgogICAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkSW5kZXggPCBpdGVtc0NvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGgKICAgICAgICApIHsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gaXRlbXNDb250YWluZXIuY2hpbGRyZW5bdGhpcy5wcm9wcy5zZWxlY3RlZEluZGV4XTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkgewogICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLnNjcm9sbEludG9WaWV3KHsKICAgICAgICAgICAgICAgICAgICBibG9jazogIm5lYXJlc3QiLAogICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiAic21vb3RoIiwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBDU1MgY2xhc3MgZm9yIGF1dG9jb21wbGV0ZSBpdGVtIGJhc2VkIG9uIHNlbGVjdGlvbiBzdGF0ZQogICAgICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IC0gVGhlIGl0ZW0gaW5kZXgKICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IENTUyBjbGFzcyBzdHJpbmcKICAgICAqLwogICAgZ2V0SXRlbUNsYXNzKGluZGV4KSB7CiAgICAgICAgcmV0dXJuIGluZGV4ID09PSAodGhpcy5wcm9wcy5zZWxlY3RlZEluZGV4IHx8IDApCiAgICAgICAgICAgID8gImFjZS1hdXRvY29tcGxldGUtaXRlbSBhY2UtYXV0b2NvbXBsZXRlLWl0ZW0tc2VsZWN0ZWQiCiAgICAgICAgICAgIDogImFjZS1hdXRvY29tcGxldGUtaXRlbSI7CiAgICB9Cn0KCkF1dG9jb21wbGV0ZVBvcHVwLnRlbXBsYXRlID0gImNldG1peF90b3dlcl9zZXJ2ZXIuQXV0b2NvbXBsZXRlUG9wdXAiOwpBdXRvY29tcGxldGVQb3B1cC5wcm9wcyA9IHsKICAgIGNvbW1hbmRzOiB7dHlwZTogQXJyYXl9LAogICAgb25JdGVtQ2xpY2s6IHt0eXBlOiBGdW5jdGlvbn0sCiAgICBwb3NpdGlvbjoge3R5cGU6IE9iamVjdH0sCiAgICBzZWxlY3RlZEluZGV4OiB7dHlwZTogTnVtYmVyLCBvcHRpb25hbDogdHJ1ZX0sCiAgICBvblNlbGVjdGVkSW5kZXhDaGFuZ2U6IHt0eXBlOiBGdW5jdGlvbiwgb3B0aW9uYWw6IHRydWV9LAogICAgdHlwZToge3R5cGU6IFN0cmluZywgb3B0aW9uYWw6IHRydWV9LAp9OwoKZXhwb3J0IHtBdXRvY29tcGxldGVQb3B1cH07Cg== \ No newline at end of file