"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:
filesCache.remove(path);
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 () {
filesCache.remove(path);
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];
}
}
insertBeforeElem.parentNode.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) {
var versionMatch = ua.match(/version\/([\.\d]+)/i);
useCssLoadPatch = versionMatch && versionMatch[1] && parseFloat(versionMatch[1]) < 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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RUFBRSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ25ELDJDQUFlLEdBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxBQUFDLENBQUM7eUJBQzFGO3FCQUNKOztBQUVELHdCQUFHLGVBQWUsRUFBRTtBQUNoQiw0QkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLDRCQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBTTtBQUMzQixnQ0FBSTtBQUNBLGtDQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUNsQix5Q0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzQixrQ0FBRSxDQUFDLE1BQU0sRUFBRSxDQUFDOzZCQUNmLENBQUMsT0FBTSxDQUFDLEVBQUU7QUFDUCxvQ0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDYixzQ0FBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lDQUNoQjs2QkFDSjt5QkFDSixFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUNWO2lCQUNKOztBQUVELHVCQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUM7YUFDM0IsQ0FBQzs7QUFFRixtQkFBTyxTQUFTLENBQUM7U0FDcEIsQ0FBQyxDQUFBO0tBQ0wsQ0FBQyxDQUFDO0NBRU4sQ0FBQSxDQUFFLE9BQU8sQ0FBQyxDQUFDIiwiZmlsZSI6IkM6L3dhbXAvd3d3L29jTGF6eUxvYWQvc3JjL29jTGF6eUxvYWQubG9hZGVycy5jb21tb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoYW5ndWxhciA9PiB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcblxyXG4gICAgYW5ndWxhci5tb2R1bGUoJ29jLmxhenlMb2FkJykuY29uZmlnKCRwcm92aWRlID0+IHtcclxuICAgICAgICAkcHJvdmlkZS5kZWNvcmF0b3IoJyRvY0xhenlMb2FkJywgZnVuY3Rpb24oJGRlbGVnYXRlLCAkcSwgJHdpbmRvdywgJGludGVydmFsKSB7XHJcbiAgICAgICAgICAgIHZhciB1YUNzc0NoZWNrZWQgPSBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yID0gJHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8ICR3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTtcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBMb2FkIGEganMvY3NzIGZpbGVcclxuICAgICAgICAgICAgICogQHBhcmFtIHR5cGVcclxuICAgICAgICAgICAgICogQHBhcmFtIHBhdGhcclxuICAgICAgICAgICAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBwcm9taXNlXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAkZGVsZWdhdGUuYnVpbGRFbGVtZW50ID0gZnVuY3Rpb24gYnVpbGRFbGVtZW50KHR5cGUsIHBhdGgsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICBlbCxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNDYWNoZSA9ICRkZWxlZ2F0ZS5fZ2V0RmlsZXNDYWNoZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlQnVzdGVyID0gZnVuY3Rpb24gY2FjaGVCdXN0ZXIodXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih1cmwuaW5kZXhPZignPycpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVybC5zdWJzdHJpbmcoMCwgdXJsLmxlbmd0aCAtIDEpID09PSAnJicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7IHVybCB9X2RjPSR7IGRjIH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAkeyB1cmwgfSZfZGM9JHsgZGMgfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7IHVybCB9P19kYz0keyBkYyB9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHByb21pc2UgZWFybHkgc28gdGhlIGZpbGUgbG9hZCBjYW4gYmUgZGV0ZWN0ZWQgYnkgb3RoZXIgcGFyYWxsZWwgbGF6eSBsb2Fkc1xyXG4gICAgICAgICAgICAgICAgLy8gKGllOiBtdWx0aXBsZSByb3V0ZXMgb24gb25lIHBhZ2UpIGEgJ3RydWUnIHZhbHVlIGlzbid0IHN1ZmZpY2llbnRcclxuICAgICAgICAgICAgICAgIC8vIGFzIGl0IGNhdXNlcyBmYWxzZSBwb3NpdGl2ZSBsb2FkIHJlc3VsdHMuXHJcbiAgICAgICAgICAgICAgICBpZihhbmd1bGFyLmlzVW5kZWZpbmVkKGZpbGVzQ2FjaGUuZ2V0KHBhdGgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzQ2FjaGUucHV0KHBhdGgsIGRlZmVycmVkLnByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBpbiBjYXNlIG1vcmUgY29udGVudCB0eXBlcyBhcmUgYWRkZWQgbGF0ZXJcclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY3NzJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSAkd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudHlwZSA9ICd0ZXh0L2Nzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuaHJlZiA9IHBhcmFtcy5jYWNoZSA9PT0gZmFsc2UgPyBjYWNoZUJ1c3RlcihwYXRoKSA6IHBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2pzJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSAkd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5zcmMgPSBwYXJhbXMuY2FjaGUgPT09IGZhbHNlID8gY2FjaGVCdXN0ZXIocGF0aCkgOiBwYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlc0NhY2hlLnJlbW92ZShwYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihgUmVxdWVzdGVkIHR5cGUgXCIkeyB0eXBlIH1cIiBpcyBub3Qga25vd24uIENvdWxkIG5vdCBpbmplY3QgXCIkeyBwYXRoIH1cImApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbC5vbmxvYWQgPSBlbFsnb25yZWFkeXN0YXRlY2hhbmdlJ10gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoKGVsWydyZWFkeVN0YXRlJ10gJiYgIS9eY3xsb2FkZS8udGVzdChlbFsncmVhZHlTdGF0ZSddKSkgfHwgbG9hZGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgZWwub25sb2FkID0gZWxbJ29ucmVhZHlzdGF0ZWNoYW5nZSddID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZWQgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICRkZWxlZ2F0ZS5fYnJvYWRjYXN0KCdvY0xhenlMb2FkLmZpbGVMb2FkZWQnLCBwYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZWwub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzQ2FjaGUucmVtb3ZlKHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdChuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkICR7IHBhdGggfWApKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBlbC5hc3luYyA9IHBhcmFtcy5zZXJpZSA/IDAgOiAxO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBpbnNlcnRCZWZvcmVFbGVtID0gYW5jaG9yLmxhc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtcy5pbnNlcnRCZWZvcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFuZ3VsYXIuZWxlbWVudChhbmd1bGFyLmlzRGVmaW5lZCh3aW5kb3cualF1ZXJ5KSA/IHBhcmFtcy5pbnNlcnRCZWZvcmUgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcmFtcy5pbnNlcnRCZWZvcmUpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50ICYmIGVsZW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVFbGVtID0gZWxlbWVudFswXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVFbGVtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLCBpbnNlcnRCZWZvcmVFbGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgIFRoZSBldmVudCBsb2FkIG9yIHJlYWR5c3RhdGVjaGFuZ2UgZG9lc24ndCBmaXJlIGluOlxyXG4gICAgICAgICAgICAgICAgIC0gaU9TIDwgNiAgICAgICAoZGVmYXVsdCBtb2JpbGUgYnJvd3NlcilcclxuICAgICAgICAgICAgICAgICAtIEFuZHJvaWQgPCA0LjQgKGRlZmF1bHQgbW9iaWxlIGJyb3dzZXIpXHJcbiAgICAgICAgICAgICAgICAgLSBTYWZhcmkgPCA2ICAgIChkZXNrdG9wIGJyb3dzZXIpXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGlmKHR5cGUgPT0gJ2NzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZighdWFDc3NDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1YSA9ICR3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaU9TIDwgNlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigvaVAoaG9uZXxvZHxhZCkvLnRlc3QoJHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9ICgkd2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uKS5tYXRjaCgvT1MgKFxcZCspXyhcXGQrKV8/KFxcZCspPy8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlPU1ZlcnNpb24gPSBwYXJzZUZsb2F0KFtwYXJzZUludCh2WzFdLCAxMCksIHBhcnNlSW50KHZbMl0sIDEwKSwgcGFyc2VJbnQodlszXSB8fCAwLCAxMCldLmpvaW4oJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VDc3NMb2FkUGF0Y2ggPSBpT1NWZXJzaW9uIDwgNjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHVhLmluZGV4T2YoXCJhbmRyb2lkXCIpID4gLTEpIHsgLy8gQW5kcm9pZCA8IDQuNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuZHJvaWRWZXJzaW9uID0gcGFyc2VGbG9hdCh1YS5zbGljZSh1YS5pbmRleE9mKFwiYW5kcm9pZFwiKSArIDgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNzc0xvYWRQYXRjaCA9IGFuZHJvaWRWZXJzaW9uIDwgNC40O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYodWEuaW5kZXhPZignc2FmYXJpJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb25NYXRjaCA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFtcXC5cXGRdKykvaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VDc3NMb2FkUGF0Y2ggPSAodmVyc2lvbk1hdGNoICYmIHZlcnNpb25NYXRjaFsxXSAmJiBwYXJzZUZsb2F0KHZlcnNpb25NYXRjaFsxXSkgPCA2KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYodXNlQ3NzTG9hZFBhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmllcyA9IDEwMDA7IC8vICogMjAgPSAyMDAwMCBtaWxpc2Vjb25kc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSAkaW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zaGVldC5jc3NSdWxlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW50ZXJ2YWwuY2FuY2VsKGludGVydmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5vbmxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC0tdHJpZXMgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5vbmVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAyMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICRkZWxlZ2F0ZTtcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG59KShhbmd1bGFyKTtcclxuIl19 |