Load.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/utils/Load.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, '91177+aHIdM+IaYQMcIzjtc', 'Load');
  13. // script/utils/Load.ts
  14. "use strict";
  15. Object.defineProperty(exports, "__esModule", { value: true });
  16. var ResConst_1 = require("../data/const/ResConst");
  17. var TypeConst_1 = require("../data/const/TypeConst");
  18. var GameDataCenter_1 = require("../data/GameDataCenter");
  19. var AssetsBundleMgr_1 = require("./AssetsBundleMgr");
  20. /**
  21. * 动态加载资源
  22. */
  23. var Load = /** @class */ (function () {
  24. function Load() {
  25. }
  26. Load.loadPrefabByBundle = function (bundle, prefab, callback) {
  27. cc.assetManager.loadBundle(bundle, cc.Prefab, function (err, bundle) {
  28. if (err) {
  29. console.warn(err);
  30. return;
  31. }
  32. bundle.load(prefab, cc.Prefab, function (err, prefab) {
  33. if (callback) {
  34. callback(prefab);
  35. }
  36. });
  37. });
  38. };
  39. // 根据详细地址加载图片资源
  40. Load.loadTexture = function (node, url, callback, needDelFirst) {
  41. var _this = this;
  42. if (callback === void 0) { callback = function (success) { }; }
  43. if (needDelFirst === void 0) { needDelFirst = true; }
  44. if (node.getComponent(cc.Sprite) == null) {
  45. node.addComponent(cc.Sprite);
  46. }
  47. var bundleName = url.split("/")[0];
  48. if (this.resList[bundleName] != null && this.resList[bundleName][url] != null && this.resList[bundleName][url].isValid && this.resList[bundleName][url].loaded) {
  49. if (this.resList[bundleName][url].getTexture().isValid && this.resList[bundleName][url].getTexture().loaded) {
  50. node.getComponent(cc.Sprite).spriteFrame = this.resList[bundleName][url];
  51. callback(true);
  52. return;
  53. }
  54. }
  55. if (needDelFirst) {
  56. node.getComponent(cc.Sprite).spriteFrame = null;
  57. }
  58. if (node['imageTag'] == null) {
  59. node['imageTag'] = 1;
  60. }
  61. else {
  62. if (node['imageTag'] > 100) {
  63. node['imageTag'] = 1;
  64. }
  65. else {
  66. node['imageTag'] += 1;
  67. }
  68. }
  69. var _tempImageTag = node['imageTag'];
  70. if (!bundleName || bundleName == "")
  71. return;
  72. AssetsBundleMgr_1.default.loadBundle(bundleName, function (error, bundle) {
  73. if (error) {
  74. console.error("bundle\u52A0\u8F7D\u5931\u8D25: " + bundleName);
  75. if (needDelFirst == false) {
  76. node.getComponent(cc.Sprite).spriteFrame = null;
  77. }
  78. return;
  79. }
  80. var realUrl = url.slice(url.indexOf("/") + 1);
  81. bundle.load(realUrl, cc.SpriteFrame, function (err, asset) {
  82. if (!node.isValid) {
  83. return;
  84. }
  85. if (err) {
  86. console.warn("加载资源失败:", url);
  87. if (needDelFirst == false) {
  88. node.getComponent(cc.Sprite).spriteFrame = null;
  89. }
  90. callback(false);
  91. return;
  92. }
  93. if (_tempImageTag != node['imageTag']) {
  94. return;
  95. }
  96. if (_this.resList[bundleName] == null) {
  97. _this.resList[bundleName] = {};
  98. }
  99. _this.resList[bundleName][url] = asset;
  100. node.getComponent(cc.Sprite).spriteFrame = asset;
  101. callback(true);
  102. });
  103. });
  104. };
  105. // 根据道具配置id加载道具图标
  106. Load.loadItemIcon = function (node, kindItem, callback) {
  107. var _a, _b;
  108. if (callback === void 0) { callback = function (success) { }; }
  109. if ((kindItem === null || kindItem === void 0 ? void 0 : kindItem[0]) == TypeConst_1.ItemKind.money) {
  110. this.loadTexture(node, ResConst_1.IconUrl.item + ((_a = GameDataCenter_1.default.item.getItemCfgBase(kindItem)) === null || _a === void 0 ? void 0 : _a.icon), callback);
  111. }
  112. else {
  113. this.loadTexture(node, ResConst_1.IconUrl.item + ((_b = GameDataCenter_1.default.item.getItemCfgBase(kindItem)) === null || _b === void 0 ? void 0 : _b.icon), callback);
  114. // console.error("loadItemIcon:未处理的道具类型:", kindItem[0])
  115. }
  116. };
  117. // 根据详细地址加载Spine资源
  118. Load.loadSpine = function (node, url, callback, needDelFirst) {
  119. var _this = this;
  120. if (callback === void 0) { callback = function (success) { }; }
  121. if (needDelFirst === void 0) { needDelFirst = true; }
  122. if (node.getComponent(sp.Skeleton) == null) {
  123. node.addComponent(sp.Skeleton);
  124. }
  125. var bundleName = url.split("/")[0];
  126. if (this.spineList[bundleName] != null && this.spineList[bundleName][url] != null && this.spineList[bundleName][url].isValid && this.spineList[bundleName][url].loaded) {
  127. // if (this.spineList[bundleName][url].getTexture().isValid && this.spineList[bundleName][url].getTexture().loaded) {
  128. node.getComponent(sp.Skeleton).skeletonData = this.spineList[bundleName][url];
  129. callback(true);
  130. return;
  131. // }
  132. }
  133. if (needDelFirst) {
  134. node.getComponent(sp.Skeleton).skeletonData = null;
  135. }
  136. if (node['imageTag'] == null) {
  137. node['imageTag'] = 1;
  138. }
  139. else {
  140. if (node['imageTag'] > 100) {
  141. node['imageTag'] = 1;
  142. }
  143. else {
  144. node['imageTag'] += 1;
  145. }
  146. }
  147. var _tempImageTag = node['imageTag'];
  148. AssetsBundleMgr_1.default.loadBundle(bundleName, function (error, bundle) {
  149. if (error) {
  150. console.error("bundle\u52A0\u8F7D\u5931\u8D25: " + bundleName);
  151. if (needDelFirst == false) {
  152. node.getComponent(cc.Sprite).spriteFrame = null;
  153. }
  154. return;
  155. }
  156. var realUrl = url.slice(url.indexOf("/") + 1);
  157. bundle.load(realUrl, sp.SkeletonData, function (err, asset) {
  158. if (!node.isValid) {
  159. return;
  160. }
  161. if (err) {
  162. console.warn("加载资源失败:", url);
  163. if (needDelFirst == false) {
  164. node.getComponent(sp.Skeleton).skeletonData = null;
  165. }
  166. callback(false);
  167. return;
  168. }
  169. if (_tempImageTag != node['imageTag']) {
  170. return;
  171. }
  172. if (_this.spineList[bundleName] == null) {
  173. _this.spineList[bundleName] = {};
  174. }
  175. _this.spineList[bundleName][url] = asset;
  176. node.getComponent(sp.Skeleton).skeletonData = asset;
  177. callback(true);
  178. });
  179. });
  180. };
  181. // // 根据详细地址获取图片资源
  182. // static getTexture(url: string, callback: Function = (success: boolean, asset: cc.SpriteFrame) => { }) {
  183. // let bundleName = url.split("/")[0]
  184. // if (this.resList[bundleName] != null && this.resList[bundleName][url] != null && this.resList[bundleName][url].isValid && this.resList[bundleName][url].loaded) {
  185. // if (this.resList[bundleName][url].getTexture().isValid && this.resList[bundleName][url].getTexture().loaded) {
  186. // callback(true, this.resList[bundleName][url])
  187. // }
  188. // }
  189. // AssetsBundleMgr.loadBundle(bundleName, (error, bundle: cc.AssetManager.Bundle) => {
  190. // if (error) {
  191. // console.error(`bundle加载失败: ${bundleName}`);
  192. // return;
  193. // }
  194. // let realUrl = url.slice(url.indexOf("/") + 1)
  195. // bundle.load(realUrl, cc.SpriteFrame, (err, asset: cc.SpriteFrame) => {
  196. // if (err) {
  197. // console.warn("加载资源失败:", url)
  198. // callback(false)
  199. // return null
  200. // }
  201. // if (this.resList[bundleName] == null) {
  202. // this.resList[bundleName] = {}
  203. // }
  204. // this.resList[bundleName][url] = asset
  205. // callback(true, this.resList[bundleName][url])
  206. // })
  207. // });
  208. // }
  209. Load.clearByBundle = function (bundleName) {
  210. if (this.resList[bundleName] != null) {
  211. this.resList[bundleName] = {};
  212. }
  213. };
  214. Load.clear = function () {
  215. this.resList = {};
  216. };
  217. Load.resList = {};
  218. Load.spineList = {};
  219. return Load;
  220. }());
  221. exports.default = Load;
  222. cc._RF.pop();
  223. }
  224. if (nodeEnv) {
  225. __define(__module.exports, __require, __module);
  226. }
  227. else {
  228. __quick_compile_project__.registerModuleFunc(__filename, function () {
  229. __define(__module.exports, __require, __module);
  230. });
  231. }
  232. })();
  233. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvdXRpbHMvTG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLG1EQUFnRDtBQUNoRCxxREFBa0Q7QUFDbEQseURBQW1EO0FBQ25ELHFEQUErQztBQUUvQzs7R0FFRztBQUNIO0lBQUE7SUFtTEEsQ0FBQztJQWxMVSx1QkFBa0IsR0FBekIsVUFBMEIsTUFBYyxFQUFFLE1BQWMsRUFBRSxRQUFtQjtRQUN6RSxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFDLEdBQUcsRUFBRSxNQUE4QjtZQUM5RSxJQUFJLEdBQUcsRUFBRTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNqQixPQUFNO2FBQ1Q7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU07Z0JBQ2hELElBQUksUUFBUSxFQUFFO29CQUNWLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDbkI7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGVBQWU7SUFDUixnQkFBVyxHQUFsQixVQUFtQixJQUFhLEVBQUUsR0FBVyxFQUFFLFFBQThDLEVBQUUsWUFBNEI7UUFBM0gsaUJBd0RDO1FBeEQ4Qyx5QkFBQSxFQUFBLHFCQUFzQixPQUFnQixJQUFPLENBQUM7UUFBRSw2QkFBQSxFQUFBLG1CQUE0QjtRQUN2SCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUMvQjtRQUNELElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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TyxHQUFHLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBcEtNLFlBQU8sR0FBZ0UsRUFBRSxDQUFBO0lBcUV6RSxjQUFTLEdBQWlFLEVBQUUsQ0FBQTtJQWdHdkYsV0FBQztDQW5MRCxBQW1MQyxJQUFBO2tCQW5Mb0IsSUFBSSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHYW1lY2ZnIGZyb20gXCIuLi9jb21tb24vZ2FtZUNmZ1wiXG5pbXBvcnQgeyBLaW5kSXRlbSB9IGZyb20gXCIuLi9jb21tb24vWHlzXCJcbmltcG9ydCB7IEljb25VcmwgfSBmcm9tIFwiLi4vZGF0YS9jb25zdC9SZXNDb25zdFwiXG5pbXBvcnQgeyBJdGVtS2luZCB9IGZyb20gXCIuLi9kYXRhL2NvbnN0L1R5cGVDb25zdFwiXG5pbXBvcnQgR2FtZURhdGFDZW50ZXIgZnJvbSBcIi4uL2RhdGEvR2FtZURhdGFDZW50ZXJcIlxuaW1wb3J0IEFzc2V0c0J1bmRsZU1nciBmcm9tIFwiLi9Bc3NldHNCdW5kbGVNZ3JcIlxuXG4vKipcbiAqIOWKqOaAgeWKoOi9vei1hOa6kFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2FkIHtcbiAgICBzdGF0aWMgbG9hZFByZWZhYkJ5QnVuZGxlKGJ1bmRsZTogc3RyaW5nLCBwcmVmYWI6IHN0cmluZywgY2FsbGJhY2s/OiBGdW5jdGlvbikge1xuICAgICAgICBjYy5hc3NldE1hbmFnZXIubG9hZEJ1bmRsZShidW5kbGUsIGNjLlByZWZhYiwgKGVyciwgYnVuZGxlOiBjYy5Bc3NldE1hbmFnZXIuQnVuZGxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycilcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1bmRsZS5sb2FkKHByZWZhYiwgY2MuUHJlZmFiLCBmdW5jdGlvbiAoZXJyLCBwcmVmYWIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socHJlZmFiKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHN0YXRpYyByZXNMaXN0OiB7IFtidW5kbGVOYW1lOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGNjLlNwcml0ZUZyYW1lIH0gfSA9IHt9XG4gICAgLy8g5qC55o2u6K+m57uG5Zyw5Z2A5Yqg6L295Zu+54mH6LWE5rqQXG4gICAgc3RhdGljIGxvYWRUZXh0dXJlKG5vZGU6IGNjLk5vZGUsIHVybDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gPSAoc3VjY2VzczogYm9vbGVhbikgPT4geyB9LCBuZWVkRGVsRmlyc3Q6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGlmIChub2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpID09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUuYWRkQ29tcG9uZW50KGNjLlNwcml0ZSlcbiAgICAgICAgfVxuICAgICAgICBsZXQgYnVuZGxlTmFtZSA9IHVybC5zcGxpdChcIi9cIilbMF1cbiAgICAgICAgaWYgKHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXSAhPSBudWxsICYmIHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXVt1cmxdICE9IG51bGwgJiYgdGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdW3VybF0uaXNWYWxpZCAmJiB0aGlzLnJlc0xpc3RbYnVuZGxlTmFtZV1bdXJsXS5sb2FkZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc0xpc3RbYnVuZGxlTmFtZV1bdXJsXS5nZXRUZXh0dXJlKCkuaXNWYWxpZCAmJiB0aGlzLnJlc0xpc3RbYnVuZGxlTmFtZV1bdXJsXS5nZXRUZXh0dXJlKCkubG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXVt1cmxdXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmVlZERlbEZpcnN0KSB7XG4gICAgICAgICAgICBub2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlWydpbWFnZVRhZyddID09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGVbJ2ltYWdlVGFnJ10gPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobm9kZVsnaW1hZ2VUYWcnXSA+IDEwMCkge1xuICAgICAgICAgICAgICAgIG5vZGVbJ2ltYWdlVGFnJ10gPSAxXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGVbJ2ltYWdlVGFnJ10gKz0gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBfdGVtcEltYWdlVGFnID0gbm9kZVsnaW1hZ2VUYWcnXVxuICAgICAgICBpZiAoIWJ1bmRsZU5hbWUgfHwgYnVuZGxlTmFtZSA9PSBcIlwiKSByZXR1cm47XG4gICAgICAgIEFzc2V0c0J1bmRsZU1nci5sb2FkQnVuZGxlKGJ1bmRsZU5hbWUsIChlcnJvciwgYnVuZGxlOiBjYy5Bc3NldE1hbmFnZXIuQnVuZGxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBidW5kbGXliqDovb3lpLHotKU6ICR7YnVuZGxlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAobmVlZERlbEZpcnN0ID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZWFsVXJsID0gdXJsLnNsaWNlKHVybC5pbmRleE9mKFwiL1wiKSArIDEpXG4gICAgICAgICAgICBidW5kbGUubG9hZChyZWFsVXJsLCBjYy5TcHJpdGVGcmFtZSwgKGVyciwgYXNzZXQ6IGNjLlNwcml0ZUZyYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmlzVmFsaWQpIHsgcmV0dXJuIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIuWKoOi9vei1hOa6kOWksei0pTpcIiwgdXJsKVxuICAgICAgICAgICAgICAgICAgICBpZiAobmVlZERlbEZpcnN0ID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF90ZW1wSW1hZ2VUYWcgIT0gbm9kZVsnaW1hZ2VUYWcnXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXSA9IHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXVt1cmxdID0gYXNzZXRcbiAgICAgICAgICAgICAgICBub2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gYXNzZXRcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0cnVlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIOagueaNrumBk+WFt+mFjee9rmlk5Yqg6L296YGT5YW35Zu+5qCHXG4gICAgc3RhdGljIGxvYWRJdGVtSWNvbihub2RlOiBjYy5Ob2RlLCBraW5kSXRlbTogS2luZEl0ZW0sIGNhbGxiYWNrOiBGdW5jdGlvbiA9IChzdWNjZXNzOiBib29sZWFuKSA9PiB7IH0pIHtcbiAgICAgICAgaWYgKGtpbmRJdGVtPy5bMF0gPT0gSXRlbUtpbmQubW9uZXkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFRleHR1cmUobm9kZSwgSWNvblVybC5pdGVtICsgR2FtZURhdGFDZW50ZXIuaXRlbS5nZXRJdGVtQ2ZnQmFzZShraW5kSXRlbSk/Lmljb24sIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkVGV4dHVyZShub2RlLCBJY29uVXJsLml0ZW0gKyBHYW1lRGF0YUNlbnRlci5pdGVtLmdldEl0ZW1DZmdCYXNlKGtpbmRJdGVtKT8uaWNvbiwgY2FsbGJhY2spXG4gICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFwibG9hZEl0ZW1JY29uOuacquWkhOeQhueahOmBk+WFt+exu+WeizpcIiwga2luZEl0ZW1bMF0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc3BpbmVMaXN0OiB7IFtidW5kbGVOYW1lOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHNwLlNrZWxldG9uRGF0YSB9IH0gPSB7fVxuICAgIC8vIOagueaNruivpue7huWcsOWdgOWKoOi9vVNwaW5l6LWE5rqQXG4gICAgc3RhdGljIGxvYWRTcGluZShub2RlOiBjYy5Ob2RlLCB1cmw6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uID0gKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHsgfSwgbmVlZERlbEZpcnN0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pID09IG51bGwpIHtcbiAgICAgICAgICAgIG5vZGUuYWRkQ29tcG9uZW50KHNwLlNrZWxldG9uKVxuICAgICAgICB9XG4gICAgICAgIGxldCBidW5kbGVOYW1lID0gdXJsLnNwbGl0KFwiL1wiKVswXVxuICAgICAgICBpZiAodGhpcy5zcGluZUxpc3RbYnVuZGxlTmFtZV0gIT0gbnVsbCAmJiB0aGlzLnNwaW5lTGlzdFtidW5kbGVOYW1lXVt1cmxdICE9IG51bGwgJiYgdGhpcy5zcGluZUxpc3RbYnVuZGxlTmFtZV1bdXJsXS5pc1ZhbGlkICYmIHRoaXMuc3BpbmVMaXN0W2J1bmRsZU5hbWVdW3VybF0ubG9hZGVkKSB7XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5zcGluZUxpc3RbYnVuZGxlTmFtZV1bdXJsXS5nZXRUZXh0dXJlKCkuaXNWYWxpZCAmJiB0aGlzLnNwaW5lTGlzdFtidW5kbGVOYW1lXVt1cmxdLmdldFRleHR1cmUoKS5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2tlbGV0b25EYXRhID0gdGhpcy5zcGluZUxpc3RbYnVuZGxlTmFtZV1bdXJsXVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWREZWxGaXJzdCkge1xuICAgICAgICAgICAgbm9kZS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pLnNrZWxldG9uRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZVsnaW1hZ2VUYWcnXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBub2RlWydpbWFnZVRhZyddID0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vZGVbJ2ltYWdlVGFnJ10gPiAxMDApIHtcbiAgICAgICAgICAgICAgICBub2RlWydpbWFnZVRhZyddID0gMVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlWydpbWFnZVRhZyddICs9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgX3RlbXBJbWFnZVRhZyA9IG5vZGVbJ2ltYWdlVGFnJ11cbiAgICAgICAgQXNzZXRzQnVuZGxlTWdyLmxvYWRCdW5kbGUoYnVuZGxlTmFtZSwgKGVycm9yLCBidW5kbGU6IGNjLkFzc2V0TWFuYWdlci5CdW5kbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGJ1bmRsZeWKoOi9veWksei0pTogJHtidW5kbGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGlmIChuZWVkRGVsRmlyc3QgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlYWxVcmwgPSB1cmwuc2xpY2UodXJsLmluZGV4T2YoXCIvXCIpICsgMSlcbiAgICAgICAgICAgIGJ1bmRsZS5sb2FkKHJlYWxVcmwsIHNwLlNrZWxldG9uRGF0YSwgKGVyciwgYXNzZXQ6IHNwLlNrZWxldG9uRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5pc1ZhbGlkKSB7IHJldHVybiB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCLliqDovb3otYTmupDlpLHotKU6XCIsIHVybClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWREZWxGaXJzdCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pLnNrZWxldG9uRGF0YSA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfdGVtcEltYWdlVGFnICE9IG5vZGVbJ2ltYWdlVGFnJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNwaW5lTGlzdFtidW5kbGVOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BpbmVMaXN0W2J1bmRsZU5hbWVdID0ge31cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zcGluZUxpc3RbYnVuZGxlTmFtZV1bdXJsXSA9IGFzc2V0XG4gICAgICAgICAgICAgICAgbm9kZS5nZXRDb21wb25lbnQoc3AuU2tlbGV0b24pLnNrZWxldG9uRGF0YSA9IGFzc2V0XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC8vIOagueaNruivpue7huWcsOWdgOiOt+WPluWbvueJh+i1hOa6kFxuICAgIC8vIHN0YXRpYyBnZXRUZXh0dXJlKHVybDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gPSAoc3VjY2VzczogYm9vbGVhbiwgYXNzZXQ6IGNjLlNwcml0ZUZyYW1lKSA9PiB7IH0pIHtcbiAgICAvLyAgICAgbGV0IGJ1bmRsZU5hbWUgPSB1cmwuc3BsaXQoXCIvXCIpWzBdXG4gICAgLy8gICAgIGlmICh0aGlzLnJlc0xpc3RbYnVuZGxlTmFtZV0gIT0gbnVsbCAmJiB0aGlzLnJlc0xpc3RbYnVuZGxlTmFtZV1bdXJsXSAhPSBudWxsICYmIHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXVt1cmxdLmlzVmFsaWQgJiYgdGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdW3VybF0ubG9hZGVkKSB7XG4gICAgLy8gICAgICAgICBpZiAodGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdW3VybF0uZ2V0VGV4dHVyZSgpLmlzVmFsaWQgJiYgdGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdW3VybF0uZ2V0VGV4dHVyZSgpLmxvYWRlZCkge1xuICAgIC8vICAgICAgICAgICAgIGNhbGxiYWNrKHRydWUsIHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXVt1cmxdKVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIEFzc2V0c0J1bmRsZU1nci5sb2FkQnVuZGxlKGJ1bmRsZU5hbWUsIChlcnJvciwgYnVuZGxlOiBjYy5Bc3NldE1hbmFnZXIuQnVuZGxlKSA9PiB7XG4gICAgLy8gICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBidW5kbGXliqDovb3lpLHotKU6ICR7YnVuZGxlTmFtZX1gKTtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm47XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICBsZXQgcmVhbFVybCA9IHVybC5zbGljZSh1cmwuaW5kZXhPZihcIi9cIikgKyAxKVxuICAgIC8vICAgICAgICAgYnVuZGxlLmxvYWQocmVhbFVybCwgY2MuU3ByaXRlRnJhbWUsIChlcnIsIGFzc2V0OiBjYy5TcHJpdGVGcmFtZSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwi5Yqg6L296LWE5rqQ5aSx6LSlOlwiLCB1cmwpXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKVxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdID09IG51bGwpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdID0ge31cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdW3VybF0gPSBhc3NldFxuICAgIC8vICAgICAgICAgICAgIGNhbGxiYWNrKHRydWUsIHRoaXMucmVzTGlzdFtidW5kbGVOYW1lXVt1cmxdKVxuICAgIC8vICAgICAgICAgfSlcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuXG4gICAgc3RhdGljIGNsZWFyQnlCdW5kbGUoYnVuZGxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc0xpc3RbYnVuZGxlTmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNMaXN0W2J1bmRsZU5hbWVdID0ge31cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMucmVzTGlzdCA9IHt9XG4gICAgfVxufSJdfQ==