"use strict";
(function (angular) {
"use strict";
angular.module("oc.lazyLoad").config(function ($provide) {
$provide.decorator("$ocLazyLoad", function ($delegate, $q, $window, $interval) {
var uaCssChecked = false,
useCssLoadPatch = false,
anchor = $window.document.getElementsByTagName("head")[0] || $window.document.getElementsByTagName("body")[0];
/**
* Load a js/css file
* @param type
* @param path
* @param params
* @returns promise
*/
$delegate.buildElement = function buildElement(type, path, params) {
var deferred = $q.defer(),
el,
loaded,
filesCache = $delegate._getFilesCache(),
cacheBuster = function cacheBuster(url) {
var dc = new Date().getTime();
Iif (url.indexOf("?") >= 0) {
if (url.substring(0, url.length - 1) === "&") {
return "" + url + "_dc=" + dc;
}
return "" + url + "&_dc=" + dc;
} else {
return "" + url + "?_dc=" + dc;
}
};
// Store the promise early so the file load can be detected by other parallel lazy loads
// (ie: multiple routes on one page) a 'true' value isn't sufficient
// as it causes false positive load results.
Eif (angular.isUndefined(filesCache.get(path))) {
filesCache.put(path, deferred.promise);
}
// Switch in case more content types are added later
switch (type) {
case "css":
el = $window.document.createElement("link");
el.type = "text/css";
el.rel = "stylesheet";
el.href = params.cache === false ? cacheBuster(path) : path;
break;
case "js":
el = $window.document.createElement("script");
el.src = params.cache === false ? cacheBuster(path) : path;
break;
default:
deferred.reject(new Error("Requested type \"" + type + "\" is not known. Could not inject \"" + path + "\""));
break;
}
el.onload = el.onreadystatechange = function (e) {
Iif (el.readyState && !/^c|loade/.test(el.readyState) || loaded) return;
el.onload = el.onreadystatechange = null;
loaded = 1;
$delegate._broadcast("ocLazyLoad.fileLoaded", path);
deferred.resolve();
};
el.onerror = function () {
deferred.reject(new Error("Unable to load " + path));
};
el.async = params.serie ? 0 : 1;
var insertBeforeElem = anchor.lastChild;
if (params.insertBefore) {
var element = angular.element(angular.isDefined(window.jQuery) ? params.insertBefore : document.querySelector(params.insertBefore));
Eif (element && element.length > 0) {
insertBeforeElem = element[0];
}
}
anchor.insertBefore(el, insertBeforeElem);
/*
The event load or readystatechange doesn't fire in:
- iOS < 6 (default mobile browser)
- Android < 4.4 (default mobile browser)
- Safari < 6 (desktop browser)
*/
if (type == "css") {
Eif (!uaCssChecked) {
var ua = $window.navigator.userAgent.toLowerCase();
// iOS < 6
Iif (/iP(hone|od|ad)/.test($window.navigator.platform)) {
var v = $window.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join("."));
useCssLoadPatch = iOSVersion < 6;
} else Iif (ua.indexOf("android") > -1) {
// Android < 4.4
var androidVersion = parseFloat(ua.slice(ua.indexOf("android") + 8));
useCssLoadPatch = androidVersion < 4.4;
} else Iif (ua.indexOf("safari") > -1 && ua.indexOf("chrome") == -1 && ua.indexOf("phantomjs") == -1) {
var safariVersion = parseFloat(ua.match(/version\/([\.\d]+)/i)[1]);
useCssLoadPatch = safariVersion < 6;
}
}
Iif (useCssLoadPatch) {
var tries = 1000; // * 20 = 20000 miliseconds
var interval = $interval(function () {
try {
el.sheet.cssRules;
$interval.cancel(interval);
el.onload();
} catch (e) {
if (--tries <= 0) {
el.onerror();
}
}
}, 20);
}
}
return deferred.promise;
};
return $delegate;
});
});
})(angular);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkM6L3dhbXAvd3d3L29jTGF6eUxvYWQvc3JjL29jTGF6eUxvYWQubG9hZGVycy5jb21tb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxDQUFDLFVBQUEsT0FBTyxFQUFJO0FBQ1IsZ0JBQVksQ0FBQzs7QUFFYixXQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLFFBQVEsRUFBSTtBQUM3QyxnQkFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsVUFBUyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7QUFDMUUsZ0JBQUksWUFBWSxHQUFHLEtBQUs7Z0JBQ3BCLGVBQWUsR0FBRyxLQUFLO2dCQUN2QixNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7QUFTbEgscUJBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDL0Qsb0JBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUU7b0JBQ3JCLEVBQUU7b0JBQ0YsTUFBTTtvQkFDTixVQUFVLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBRTtvQkFDdkMsV0FBVyxHQUFHLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNwQyx3QkFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5Qix3QkFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0Qiw0QkFBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFL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R0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsMkNBQWUsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO3lCQUN2QztxQkFDSjs7QUFFRCx3QkFBRyxlQUFlLEVBQUU7QUFDaEIsNEJBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQiw0QkFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQU07QUFDM0IsZ0NBQUk7QUFDQSxrQ0FBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDbEIseUNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0Isa0NBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs2QkFDZixDQUFDLE9BQU0sQ0FBQyxFQUFFO0FBQ1Asb0NBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ2Isc0NBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQ0FDaEI7NkJBQ0o7eUJBQ0osRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDVjtpQkFDSjs7QUFFRCx1QkFBTyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQzNCLENBQUM7O0FBRUYsbUJBQU8sU0FBUyxDQUFDO1NBQ3BCLENBQUMsQ0FBQTtLQUNMLENBQUMsQ0FBQztDQUVOLENBQUEsQ0FBRSxPQUFPLENBQUMsQ0FBQyIsImZpbGUiOiJDOi93YW1wL3d3dy9vY0xhenlMb2FkL3NyYy9vY0xhenlMb2FkLmxvYWRlcnMuY29tbW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGFuZ3VsYXIgPT4ge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdvYy5sYXp5TG9hZCcpLmNvbmZpZygkcHJvdmlkZSA9PiB7XG4gICAgICAgICRwcm92aWRlLmRlY29yYXRvcignJG9jTGF6eUxvYWQnLCBmdW5jdGlvbigkZGVsZWdhdGUsICRxLCAkd2luZG93LCAkaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHZhciB1YUNzc0NoZWNrZWQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICB1c2VDc3NMb2FkUGF0Y2ggPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbmNob3IgPSAkd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgJHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIExvYWQgYSBqcy9jc3MgZmlsZVxuICAgICAgICAgICAgICogQHBhcmFtIHR5cGVcbiAgICAgICAgICAgICAqIEBwYXJhbSBwYXRoXG4gICAgICAgICAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBwcm9taXNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICRkZWxlZ2F0ZS5idWlsZEVsZW1lbnQgPSBmdW5jdGlvbiBidWlsZEVsZW1lbnQodHlwZSwgcGF0aCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNDYWNoZSA9ICRkZWxlZ2F0ZS5fZ2V0RmlsZXNDYWNoZSgpLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZUJ1c3RlciA9IGZ1bmN0aW9uIGNhY2hlQnVzdGVyKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih1cmwuaW5kZXhPZignPycpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSA9PT0gJyYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHsgdXJsIH1fZGM9JHsgZGMgfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHsgdXJsIH0mX2RjPSR7IGRjIH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7IHVybCB9P19kYz0keyBkYyB9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBwcm9taXNlIGVhcmx5IHNvIHRoZSBmaWxlIGxvYWQgY2FuIGJlIGRldGVjdGVkIGJ5IG90aGVyIHBhcmFsbGVsIGxhenkgbG9hZHNcbiAgICAgICAgICAgICAgICAvLyAoaWU6IG11bHRpcGxlIHJvdXRlcyBvbiBvbmUgcGFnZSkgYSAndHJ1ZScgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudFxuICAgICAgICAgICAgICAgIC8vIGFzIGl0IGNhdXNlcyBmYWxzZSBwb3NpdGl2ZSBsb2FkIHJlc3VsdHMuXG4gICAgICAgICAgICAgICAgaWYoYW5ndWxhci5pc1VuZGVmaW5lZChmaWxlc0NhY2hlLmdldChwYXRoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNDYWNoZS5wdXQocGF0aCwgZGVmZXJyZWQucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU3dpdGNoIGluIGNhc2UgbW9yZSBjb250ZW50IHR5cGVzIGFyZSBhZGRlZCBsYXRlclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nzcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBlbCA9ICR3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5ocmVmID0gcGFyYW1zLmNhY2hlID09PSBmYWxzZSA/IGNhY2hlQnVzdGVyKHBhdGgpIDogcGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdqcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBlbCA9ICR3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5zcmMgPSBwYXJhbXMuY2FjaGUgPT09IGZhbHNlID8gY2FjaGVCdXN0ZXIocGF0aCkgOiBwYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdChuZXcgRXJyb3IoYFJlcXVlc3RlZCB0eXBlIFwiJHsgdHlwZSB9XCIgaXMgbm90IGtub3duLiBDb3VsZCBub3QgaW5qZWN0IFwiJHsgcGF0aCB9XCJgKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWwub25sb2FkID0gZWxbJ29ucmVhZHlzdGF0ZWNoYW5nZSddID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBpZigoZWxbJ3JlYWR5U3RhdGUnXSAmJiAhL15jfGxvYWRlLy50ZXN0KGVsWydyZWFkeVN0YXRlJ10pKSB8fCBsb2FkZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgZWwub25sb2FkID0gZWxbJ29ucmVhZHlzdGF0ZWNoYW5nZSddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgJGRlbGVnYXRlLl9icm9hZGNhc3QoJ29jTGF6eUxvYWQuZmlsZUxvYWRlZCcsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBlbC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdChuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkICR7IHBhdGggfWApKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGVsLmFzeW5jID0gcGFyYW1zLnNlcmllID8gMCA6IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlRWxlbSA9IGFuY2hvci5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgaWYocGFyYW1zLmluc2VydEJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFuZ3VsYXIuZWxlbWVudChhbmd1bGFyLmlzRGVmaW5lZCh3aW5kb3cualF1ZXJ5KSA/IHBhcmFtcy5pbnNlcnRCZWZvcmUgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcmFtcy5pbnNlcnRCZWZvcmUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudCAmJiBlbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEJlZm9yZUVsZW0gPSBlbGVtZW50WzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFuY2hvci5pbnNlcnRCZWZvcmUoZWwsIGluc2VydEJlZm9yZUVsZW0pO1xuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgVGhlIGV2ZW50IGxvYWQgb3IgcmVhZHlzdGF0ZWNoYW5nZSBkb2Vzbid0IGZpcmUgaW46XG4gICAgICAgICAgICAgICAgIC0gaU9TIDwgNiAgICAgICAoZGVmYXVsdCBtb2JpbGUgYnJvd3NlcilcbiAgICAgICAgICAgICAgICAgLSBBbmRyb2lkIDwgNC40IChkZWZhdWx0IG1vYmlsZSBicm93c2VyKVxuICAgICAgICAgICAgICAgICAtIFNhZmFyaSA8IDYgICAgKGRlc2t0b3AgYnJvd3NlcilcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZih0eXBlID09ICdjc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCF1YUNzc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1YSA9ICR3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpT1MgPCA2XG4gICAgICAgICAgICAgICAgICAgICAgICBpZigvaVAoaG9uZXxvZHxhZCkvLnRlc3QoJHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSAoJHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbikubWF0Y2goL09TIChcXGQrKV8oXFxkKylfPyhcXGQrKT8vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaU9TVmVyc2lvbiA9IHBhcnNlRmxvYXQoW3BhcnNlSW50KHZbMV0sIDEwKSwgcGFyc2VJbnQodlsyXSwgMTApLCBwYXJzZUludCh2WzNdIHx8IDAsIDEwKV0uam9pbignLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VDc3NMb2FkUGF0Y2ggPSBpT1NWZXJzaW9uIDwgNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZih1YS5pbmRleE9mKFwiYW5kcm9pZFwiKSA+IC0xKSB7IC8vIEFuZHJvaWQgPCA0LjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5kcm9pZFZlcnNpb24gPSBwYXJzZUZsb2F0KHVhLnNsaWNlKHVhLmluZGV4T2YoXCJhbmRyb2lkXCIpICsgOCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IGFuZHJvaWRWZXJzaW9uIDwgNC40O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHVhLmluZGV4T2YoJ3NhZmFyaScpID4gLTEgJiYgdWEuaW5kZXhPZignY2hyb21lJykgPT0gLTEgJiYgdWEuaW5kZXhPZigncGhhbnRvbWpzJykgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2FmYXJpVmVyc2lvbiA9IHBhcnNlRmxvYXQodWEubWF0Y2goL3ZlcnNpb25cXC8oW1xcLlxcZF0rKS9pKVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ3NzTG9hZFBhdGNoID0gc2FmYXJpVmVyc2lvbiA8IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZih1c2VDc3NMb2FkUGF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmllcyA9IDEwMDA7IC8vICogMjAgPSAyMDAwMCBtaWxpc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gJGludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGludGVydmFsLmNhbmNlbChpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLm9ubG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigtLXRyaWVzIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLm9uZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuICRkZWxlZ2F0ZTtcbiAgICAgICAgfSlcbiAgICB9KTtcblxufSkoYW5ndWxhcik7XG4iXX0= |