|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/common/viewclass.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, 'd63b5L717NIk7RrUbhm1PXP', 'viewclass');
|
// Scripts/common/viewclass.js
|
|
"use strict";
|
|
var LoaderManager = require("loadermanager");
|
|
window.ViewClass = cc.Class({
|
"extends": BaseClass,
|
ctor: function ctor() {
|
this.active_status = true;
|
this.base_view_event_list = {};
|
this.res_list = {};
|
this.update_timers = {};
|
this.parent = null;
|
this.ticks = {};
|
this.rleasePrefab = true;
|
},
|
|
/**
|
* 递归获取子节点
|
* @Author Zhx
|
* @DateTime 2017-12-06
|
* @param {[type]} parent 父节点
|
* @param {[type]} uiName 子节点名称
|
* @return {[type]} [description]
|
*/
|
seekChild: function seekChild(parent, uiName, component) {
|
if (!parent || !(typeof parent == "string") && !(parent instanceof cc.Node)) return;
|
|
if (typeof parent == "string") {
|
if (uiName && cc.js.isChildClassOf(uiName, cc.Component)) component = uiName;
|
uiName = parent;
|
parent = this.root_wnd;
|
}
|
|
if (uiName && cc.js.isChildClassOf(uiName, cc.Component)) component = uiName;
|
if (parent.name === uiName) return parent;
|
var childrens = parent.getChildren();
|
|
for (var index in childrens) {
|
var resultNode = this.seekChild(childrens[index], uiName, component);
|
|
if (resultNode) {
|
if (component) return resultNode.getComponent(component);
|
return resultNode;
|
}
|
}
|
},
|
// 加载资源
|
loadRes: function loadRes(path, callback) {
|
if (this.res_list[path]) {
|
if (this.root_wnd && this.root_wnd.isValid) {
|
callback(this.res_list[path]);
|
} else {
|
console.log("节点已销毁", this.prefabPath);
|
}
|
|
return;
|
} else {
|
LoaderManager.getInstance().loadRes(path, function (res_object) {
|
if (!this.isCache && (this.is_close || this["delete"])) {
|
return;
|
}
|
|
if (!(res_object instanceof cc.Node)) this.res_list[path] = res_object;
|
|
if (this.root_wnd && this.root_wnd.isValid) {
|
callback(res_object);
|
} else {
|
console.log("节点已销毁", this.prefabPath);
|
}
|
}.bind(this));
|
}
|
},
|
setParent: function setParent(parent) {
|
this.parent = parent;
|
},
|
deleteMe: function deleteMe() {
|
// this.iss
|
cc.log("deleteMe", this.prefabPath);
|
this.removeGlobalEvent();
|
|
if (this.root_wnd && !this.isCache) {
|
// this.root_wnd.destroyAllChildren();
|
this.root_wnd.destroy();
|
this.root_wnd = null;
|
}
|
|
if (this.mainloop_timer) gcore.Timer.del(this.mainloop_timer);
|
|
for (var timer_i in this.update_timers) {
|
if (this.update_timers[timer_i]) gcore.Timer.del(this.update_timers[timer_i]["timer"]);
|
this.update_timers[timer_i] = null;
|
} // LoaderManager.getInstance().deleteRes(this.prefabPath);
|
|
|
for (var key in this.res_list) {
|
LoaderManager.getInstance().releaseRes(key);
|
}
|
|
if (!this.isCache) {
|
if (this.rleasePrefab) LoaderManager.getInstance().releasePrefab(this.prefabPath);
|
}
|
},
|
|
/**
|
* 添加通用监听事件
|
* @param {*} eveny_type
|
* @param {*} callback
|
*/
|
addGlobalEvent: function addGlobalEvent(event_type, callback) {
|
if (!event_type) return;
|
|
if (!this.base_view_event_list[event_type]) {
|
this.base_view_event_list[event_type] = gcore.GlobalEvent.bind(event_type, function () {
|
if (callback) {
|
for (var _len = arguments.length, value = new Array(_len), _key = 0; _key < _len; _key++) {
|
value[_key] = arguments[_key];
|
}
|
|
callback.apply(this, value);
|
}
|
}.bind(this));
|
return this.base_view_event_list[event_type];
|
}
|
},
|
removeGlobalEvent: function removeGlobalEvent(event_hand) {
|
if (!event_hand) {
|
for (var key in this.base_view_event_list) {
|
if (this.base_view_event_list[key]) gcore.GlobalEvent.unbind(this.base_view_event_list[key]);
|
}
|
|
this.base_view_event_list = null;
|
} else {
|
if (this.base_view_event_list[event_hand]) {
|
gcore.GlobalEvent.unbind(this.base_view_event_list[event_hand]);
|
delete this.base_view_event_list[event_hand];
|
}
|
}
|
},
|
startUpdate: function startUpdate(times, update_cb, interval) {
|
times = times > 0 ? times : -1;
|
interval = interval || 100;
|
|
if (times > 0) {
|
if (update_cb) {
|
var timer_count = 0;
|
var timer_index = null;
|
|
for (var timer_i in this.update_timers) {
|
if (!this.update_timers[timer_i]) {
|
timer_index = timer_i;
|
break;
|
}
|
|
timer_count += 1;
|
}
|
|
if (!timer_index) timer_index = "udpatetimer_" + timer_count;
|
this.update_timers[timer_index] = {};
|
this.update_timers[timer_index]["finish"] = 0;
|
this.update_timers[timer_index]["times"] = times;
|
this.update_timers[timer_index]["timer"] = gcore.Timer.set(function (callback, timer_index) {
|
if (callback) callback(this.update_timers[timer_index]["finish"]);
|
|
if (this.update_timers[timer_index]) {
|
this.update_timers[timer_index]["finish"] += 1;
|
|
if (this.update_timers[timer_index]["finish"] == this.update_timers[timer_index]["times"]) {
|
gcore.Timer.del(this.update_timers[timer_index]["timer"]);
|
this.update_timers[timer_index] = null;
|
}
|
}
|
}.bind(this, update_cb, timer_index), interval, times);
|
return this.update_timers[timer_index]["timer"];
|
}
|
} else {
|
if (!this.mainloop_timer) {
|
this.mainloop_timer = gcore.Timer.set(function () {
|
if (this.update) this.update(200 / 1000);
|
}.bind(this), 200, -1);
|
return this.mainloop_timer;
|
}
|
}
|
},
|
stopUpdate: function stopUpdate(timer_hander) {
|
if (timer_hander) {
|
for (var timer_i in this.update_timers) {
|
if (this.update_timers[timer_i] && this.update_timers[timer_i]["timer"] === timer_hander) {
|
gcore.Timer.del(this.update_timers[timer_i]["timer"]);
|
this.update_timers[timer_i] = null;
|
}
|
}
|
} else {
|
if (this.mainloop_timer) {
|
gcore.Timer.del(this.mainloop_timer);
|
this.mainloop_timer = null;
|
}
|
}
|
},
|
isOpen: function isOpen() {
|
if (this.root_wnd && this.root_wnd.active) return true;
|
return false;
|
},
|
addTicket: function addTicket(cf, interval, index) {
|
interval = typeof parseInt(interval) == "number" ? interval * 1000 : 0;
|
var tick_id = gcore.Timer.set(function (cb) {
|
if (cb) cb();
|
}.bind(this, cf), interval, 1);
|
if (index) this.ticks[index] = tick_id;
|
},
|
delTicker: function delTicker(index) {
|
if (this.ticks[index]) {
|
gcore.Timer.del(this.ticks[index]);
|
delete this.ticks[index];
|
}
|
},
|
hasTicket: function hasTicket(index) {
|
return !!this.ticks[index];
|
},
|
seekChildByTag: function seekChildByTag(parent, tag) {
|
if (!parent) return;
|
|
if (parent.ui_tag === tag) {
|
return parent;
|
}
|
|
var childrens = parent.getChildren();
|
|
for (var index in childrens) {
|
var resultNode = this.seekChildByTag(childrens[index], tag);
|
if (resultNode) return resultNode;
|
}
|
}
|
});
|
|
cc._RF.pop();
|
}
|
if (nodeEnv) {
|
__define(__module.exports, __require, __module);
|
}
|
else {
|
__quick_compile_project__.registerModuleFunc(__filename, function () {
|
__define(__module.exports, __require, __module);
|
});
|
}
|
})();
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFx2aWV3Y2xhc3MuanMiXSwibmFtZXMiOlsiTG9hZGVyTWFuYWdlciIsInJlcXVpcmUiLCJ3aW5kb3ciLCJWaWV3Q2xhc3MiLCJjYyIsIkNsYXNzIiwiQmFzZUNsYXNzIiwiY3RvciIsImFjdGl2ZV9zdGF0dXMiLCJiYXNlX3ZpZXdfZXZlbnRfbGlzdCIsInJlc19saXN0IiwidXBkYXRlX3RpbWVycyIsInBhcmVudCIsInRpY2tzIiwicmxlYXNlUHJlZmFiIiwic2Vla0NoaWxkIiwidWlOYW1lIiwiY29tcG9uZW50IiwiTm9kZSIsImpzIiwiaXNDaGlsZENsYXNzT2YiLCJDb21wb25lbnQiLCJyb290X3duZCIsIm5hbWUiLCJjaGlsZHJlbnMiLCJnZXRDaGlsZHJlbiIsImluZGV4IiwicmVzdWx0Tm9kZSIsImdldENvbXBvbmVudCIsImxvYWRSZXMiLCJwYXRoIiwiY2FsbGJhY2siLCJpc1ZhbGlkIiwiY29uc29sZSIsImxvZyIsInByZWZhYlBhdGgiLCJnZXRJbnN0YW5jZSIsInJlc19vYmplY3QiLCJpc0NhY2hlIiwiaXNfY2xvc2UiLCJiaW5kIiwic2V0UGFyZW50IiwiZGVsZXRlTWUiLCJyZW1vdmVHbG9iYWxFdmVudCIsImRlc3Ryb3kiLCJtYWlubG9vcF90aW1lciIsImdjb3JlIiwiVGltZXIiLCJkZWwiLCJ0aW1lcl9pIiwia2V5IiwicmVsZWFzZVJlcyIsInJlbGVhc2VQcmVmYWIiLCJhZGRHbG9iYWxFdmVudCIsImV2ZW50X3R5cGUiLCJHbG9iYWxFdmVudCIsInZhbHVlIiwiYXBwbHkiLCJldmVudF9oYW5kIiwidW5iaW5kIiwic3RhcnRVcGRhdGUiLCJ0aW1lcyIsInVwZGF0ZV9jYiIsImludGVydmFsIiwidGltZXJfY291bnQiLCJ0aW1lcl9pbmRleCIsInNldCIsInVwZGF0ZSIsInN0b3BVcGRhdGUiLCJ0aW1lcl9oYW5kZXIiLCJpc09wZW4iLCJhY3RpdmUiLCJhZGRUaWNrZXQiLCJjZiIsInBhcnNlSW50IiwidGlja19pZCIsImNiIiwiZGVsVGlja2VyIiwiaGFzVGlja2V0Iiwic2Vla0NoaWxkQnlUYWciLCJ0YWciLCJ1aV90YWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBSUEsYUFBYSxHQUFHQyxPQUFPLENBQUMsZUFBRCxDQUEzQjs7QUFDQUMsTUFBTSxDQUFDQyxTQUFQLEdBQW1CQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUN4QixhQUFTQyxTQURlO0FBR3hCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVc7QUFDYixTQUFLQyxhQUFMLEdBQXFCLElBQXJCO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEIsRUFBNUI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxJQUFkO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLEVBQWI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLElBQXBCO0FBQ0gsR0FYdUI7O0FBYXhCOzs7Ozs7OztBQVFBQyxFQUFBQSxTQUFTLEVBQUUsbUJBQVNILE1BQVQsRUFBaUJJLE1BQWpCLEVBQXlCQyxTQUF6QixFQUFvQztBQUMzQyxRQUFJLENBQUNMLE1BQUQsSUFBWSxFQUFFLE9BQU9BLE1BQVAsSUFBaUIsUUFBbkIsS0FBZ0MsRUFBRUEsTUFBTSxZQUFZUixFQUFFLENBQUNjLElBQXZCLENBQWhELEVBQStFOztBQUUvRSxRQUFJLE9BQU9OLE1BQVAsSUFBaUIsUUFBckIsRUFBK0I7QUFDM0IsVUFBSUksTUFBTSxJQUFJWixFQUFFLENBQUNlLEVBQUgsQ0FBTUMsY0FBTixDQUFxQkosTUFBckIsRUFBNkJaLEVBQUUsQ0FBQ2lCLFNBQWhDLENBQWQsRUFDSUosU0FBUyxHQUFHRCxNQUFaO0FBQ0pBLE1BQUFBLE1BQU0sR0FBR0osTUFBVDtBQUNBQSxNQUFBQSxNQUFNLEdBQUcsS0FBS1UsUUFBZDtBQUNIOztBQUVELFFBQUlOLE1BQU0sSUFBS1osRUFBRSxDQUFDZSxFQUFI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QWxCLEVBQTZCO0FBQ3pCLFVBQUlHLFVBQVUsR0FBRyxLQUFLb0QsY0FBTCxDQUFvQnZELFNBQVMsQ0FBQ0UsS0FBRCxDQUE3QixFQUFzQ3NELEdBQXRDLENBQWpCO0FBQ0EsVUFBSXJELFVBQUosRUFBZ0IsT0FBT0EsVUFBUDtBQUNuQjtBQUNKO0FBN091QixDQUFULENBQW5CIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTG9hZGVyTWFuYWdlciA9IHJlcXVpcmUoXCJsb2FkZXJtYW5hZ2VyXCIpO1xyXG53aW5kb3cuVmlld0NsYXNzID0gY2MuQ2xhc3Moe1xyXG4gICAgZXh0ZW5kczogQmFzZUNsYXNzLFxyXG5cclxuICAgIGN0b3I6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlX3N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5iYXNlX3ZpZXdfZXZlbnRfbGlzdCA9IHt9O1xyXG4gICAgICAgIHRoaXMucmVzX2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLnVwZGF0ZV90aW1lcnMgPSB7fTtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50aWNrcyA9IHt9O1xyXG4gICAgICAgIHRoaXMucmxlYXNlUHJlZmFiID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDpgJLlvZLojrflj5blrZDoioLngrlcclxuICAgICAqIEBBdXRob3IgICBaaHhcclxuICAgICAqIEBEYXRlVGltZSAyMDE3LTEyLTA2XHJcbiAgICAgKiBAcGFyYW0gICAge1t0eXBlXX0gICBwYXJlbnQg54i26IqC54K5XHJcbiAgICAgKiBAcGFyYW0gICAge1t0eXBlXX0gICB1aU5hbWUg5a2Q6IqC54K55ZCN56ewXHJcbiAgICAgKiBAcmV0dXJuICAge1t0eXBlXX0gICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBzZWVrQ2hpbGQ6IGZ1bmN0aW9uKHBhcmVudCwgdWlOYW1lLCBjb21wb25lbnQpIHtcclxuICAgICAgICBpZiAoIXBhcmVudCB8fCAoISh0eXBlb2YgcGFyZW50ID09IFwic3RyaW5nXCIpICYmICEocGFyZW50IGluc3RhbmNlb2YgY2MuTm9kZSkpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyZW50ID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgaWYgKHVpTmFtZSAmJiBjYy5qcy5pc0NoaWxkQ2xhc3NPZih1aU5hbWUsIGNjLkNvbXBvbmVudCkpXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSB1aU5hbWU7IFxyXG4gICAgICAgICAgICB1aU5hbWUgPSBwYXJlbnQ7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucm9vdF93bmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodWlOYW1lICYmIChjYy5qcy5pc0NoaWxkQ2xhc3NPZih1aU5hbWUsIGNjLkNvbXBvbmVudCkpKVxyXG4gICAgICAgICAgICBjb21wb25lbnQgPSB1aU5hbWU7XHJcbiAgICAgICAgaWYgKHBhcmVudC5uYW1lID09PSB1aU5hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbnMgPSBwYXJlbnQuZ2V0Q2hpbGRyZW4oKTtcclxuICAgICAgICBmb3IgKHZhciBpbmRleCBpbiBjaGlsZHJlbnMpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdE5vZGUgPSB0aGlzLnNlZWtDaGlsZChjaGlsZHJlbnNbaW5kZXhdLCB1aU5hbWUsIGNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50KSByZXR1cm4gcmVzdWx0Tm9kZS5nZXRDb21wb25lbnQoY29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHROb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDliqDovb3otYTmupBcclxuICAgIGxvYWRSZXM6ZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spe1xyXG4gICAgICAgIGlmKHRoaXMucmVzX2xpc3RbcGF0aF0pe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvb3Rfd25kICYmIHRoaXMucm9vdF93bmQuaXNWYWxpZCl7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzLnJlc19saXN0W3BhdGhdKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6IqC54K55bey6ZSA5q+BXCIsdGhpcy5wcmVmYWJQYXRoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkUmVzKHBhdGgsZnVuY3Rpb24ocmVzX29iamVjdCl7XHJcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc0NhY2hlICYmICh0aGlzLmlzX2Nsb3NlIHx8IHRoaXMuZGVsZXRlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCEocmVzX29iamVjdCBpbnN0YW5jZW9mIGNjLk5vZGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzX2xpc3RbcGF0aF0gPSByZXNfb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucm9vdF93bmQgJiYgdGhpcy5yb290X3duZC5pc1ZhbGlkKXtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXNfb2JqZWN0KVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLoioLngrnlt7LplIDmr4FcIix0aGlzLnByZWZhYlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSkgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFBhcmVudDogZnVuY3Rpb24ocGFyZW50KSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZU1lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyB0aGlzLmlzc1xyXG4gICAgICAgIGNjLmxvZyhcImRlbGV0ZU1lXCIsdGhpcy5wcmVmYWJQYXRoKVxyXG4gICAgICAgIHRoaXMucmVtb3ZlR2xvYmFsRXZlbnQoKTtcclxuICAgICAgICBpZih0aGlzLnJvb3Rfd25kICYmICF0aGlzLmlzQ2FjaGUpe1xyXG4gICAgICAgICAgICAvLyB0aGlzLnJvb3Rfd25kLmRlc3Ryb3lBbGxDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5yb290X3duZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tYWlubG9vcF90aW1lcilcclxuICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMubWFpbmxvb3BfdGltZXIpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB0aW1lcl9pIGluIHRoaXMudXBkYXRlX3RpbWVycyl7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaV0pXHJcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2ldW1widGltZXJcIl0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2ldID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5kZWxldGVSZXModGhpcy5wcmVmYWJQYXRoKTtcclxuICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLnJlc19saXN0KXtcclxuICAgICAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlbGVhc2VSZXMoa2V5KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2FjaGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmxlYXNlUHJlZmFiKVxyXG4gICAgICAgICAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlbGVhc2VQcmVmYWIodGhpcy5wcmVmYWJQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5re75Yqg6YCa55So55uR5ZCs5LqL5Lu2XHJcbiAgICAgKiBAcGFyYW0geyp9IGV2ZW55X3R5cGUgXHJcbiAgICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrIFxyXG4gICAgICovXHJcbiAgICBhZGRHbG9iYWxFdmVudDogZnVuY3Rpb24gKGV2ZW50X3R5cGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCFldmVudF90eXBlKSByZXR1cm5cclxuICAgICAgICBpZiAoIXRoaXMuYmFzZV92aWV3X2V2ZW50X2xpc3RbZXZlbnRfdHlwZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlX3ZpZXdfZXZlbnRfbGlzdFtldmVudF90eXBlXSA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoZXZlbnRfdHlwZSwgKGZ1bmN0aW9uICguLi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlX3ZpZXdfZXZlbnRfbGlzdFtldmVudF90eXBlXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUdsb2JhbEV2ZW50OmZ1bmN0aW9uKGV2ZW50X2hhbmQpe1xyXG4gICAgICAgIGlmICghZXZlbnRfaGFuZCkge1xyXG4gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLmJhc2Vfdmlld19ldmVudF9saXN0KXtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhc2Vfdmlld19ldmVudF9saXN0W2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMuYmFzZV92aWV3X2V2ZW50X2xpc3Rba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5iYXNlX3ZpZXdfZXZlbnRfbGlzdCA9IG51bGw7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZV92aWV3X2V2ZW50X2xpc3RbZXZlbnRfaGFuZF0pIHtcclxuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LnVuYmluZCh0aGlzLmJhc2Vfdmlld19ldmVudF9saXN0W2V2ZW50X2hhbmRdKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJhc2Vfdmlld19ldmVudF9saXN0W2V2ZW50X2hhbmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzdGFydFVwZGF0ZTogZnVuY3Rpb24odGltZXMsIHVwZGF0ZV9jYiwgaW50ZXJ2YWwpIHtcclxuICAgICAgICB0aW1lcyA9IHRpbWVzID4gMCA/IHRpbWVzIDogLTE7XHJcbiAgICAgICAgaW50ZXJ2YWwgPSBpbnRlcnZhbCB8fCAxMDA7XHJcbiAgICAgICAgaWYgKHRpbWVzID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlX2NiKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGltZXJfY291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVyX2luZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHRpbWVyX2kgaW4gdGhpcy51cGRhdGVfdGltZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfaW5kZXggPSB0aW1lcl9pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXJfY291bnQgKz0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVyX2luZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyX2luZGV4ID0gXCJ1ZHBhdGV0aW1lcl9cIiArIHRpbWVyX2NvdW50XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaW5kZXhdID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaW5kZXhdW1wiZmluaXNoXCJdID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlX3RpbWVyc1t0aW1lcl9pbmRleF1bXCJ0aW1lc1wiXSA9IHRpbWVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2luZGV4XVtcInRpbWVyXCJdID0gZ2NvcmUuVGltZXIuc2V0KGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZXJfaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2luZGV4XVtcImZpbmlzaFwiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlX3RpbWVyc1t0aW1lcl9pbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2luZGV4XVtcImZpbmlzaFwiXSArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2luZGV4XVtcImZpbmlzaFwiXSA9PSB0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaW5kZXhdW1widGltZXNcIl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaW5kZXhdW1widGltZXJcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcywgdXBkYXRlX2NiLCB0aW1lcl9pbmRleCksIGludGVydmFsLCB0aW1lcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVfdGltZXJzW3RpbWVyX2luZGV4XVtcInRpbWVyXCJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm1haW5sb29wX3RpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5sb29wX3RpbWVyID0gZ2NvcmUuVGltZXIuc2V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cGRhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKDIwMC8xMDAwKTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMjAwLCAtMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWlubG9vcF90aW1lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc3RvcFVwZGF0ZTogZnVuY3Rpb24odGltZXJfaGFuZGVyKSB7XHJcbiAgICAgICAgaWYgKHRpbWVyX2hhbmRlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciB0aW1lcl9pIGluIHRoaXMudXBkYXRlX3RpbWVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlX3RpbWVyc1t0aW1lcl9pXSAmJiB0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaV1bXCJ0aW1lclwiXSA9PT0gdGltZXJfaGFuZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudXBkYXRlX3RpbWVyc1t0aW1lcl9pXVtcInRpbWVyXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZV90aW1lcnNbdGltZXJfaV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWFpbmxvb3BfdGltZXIpIHtcclxuICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLm1haW5sb29wX3RpbWVyKTsgICBcclxuICAgICAgICAgICAgICAgIHRoaXMubWFpbmxvb3BfdGltZXIgPSBudWxsOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNPcGVuOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5yb290X3duZCAmJiB0aGlzLnJvb3Rfd25kLmFjdGl2ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlIFxyXG4gICAgfSwgXHJcblxyXG4gICAgYWRkVGlja2V0OiBmdW5jdGlvbihjZiwgaW50ZXJ2YWwsIGluZGV4KSB7XHJcbiAgICAgICAgaW50ZXJ2YWwgPSAodHlwZW9mIHBhcnNlSW50KGludGVydmFsKSA9PSBcIm51bWJlclwiKSA/IGludGVydmFsICogMTAwMCA6IDA7XHJcbiAgICAgICAgdmFyIHRpY2tfaWQgPSBnY29yZS5UaW1lci5zZXQoZnVuY3Rpb24oY2IpIHtcclxuICAgICAgICAgICAgaWYgKGNiKVxyXG4gICAgICAgICAgICAgICAgY2IoKTtcclxuICAgICAgICB9LmJpbmQodGhpcywgY2YpLCBpbnRlcnZhbCwgMSk7XHJcbiAgICAgICAgaWYgKGluZGV4KVxyXG4gICAgICAgICAgICB0aGlzLnRpY2tzW2luZGV4XSA9IHRpY2tfaWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbFRpY2tlcjogZnVuY3Rpb24oaW5kZXgpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGlja3NbaW5kZXhdKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudGlja3NbaW5kZXhdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIGhhc1RpY2tldDogZnVuY3Rpb24oaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnRpY2tzW2luZGV4XVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgc2Vla0NoaWxkQnlUYWc6IGZ1bmN0aW9uKHBhcmVudCwgdGFnKSB7XHJcbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcclxuICAgICAgICBpZiAocGFyZW50LnVpX3RhZyA9PT0gdGFnKSB7ICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2hpbGRyZW5zID0gcGFyZW50LmdldENoaWxkcmVuKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaW5kZXggaW4gY2hpbGRyZW5zKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHROb2RlID0gdGhpcy5zZWVrQ2hpbGRCeVRhZyhjaGlsZHJlbnNbaW5kZXhdLCB0YWcpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0Tm9kZSkgcmV0dXJuIHJlc3VsdE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbn0pIl19
|