difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/backpack/view/round_item_panel.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, '95e3aibvCVMCbKjpQtTGBhL', 'round_item_panel');
// Scripts/mod/backpack/view/round_item_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     物品(圆形的)
// <br/>Create: 2019-04-25 19:50:35
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var Round_itemPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("backpack", "round_item");
 
    if (arguments && arguments.length > 0) {
      this.click = arguments[0];
      this.scale = arguments[1] || 1;
      this.scale1 = arguments[2] || 1;
    }
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {
    this.isUnEnabled = false;
    this.redpointVisible = false;
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    if (this.scale != 1) {
      this.root_wnd.setScale(this.scale);
    }
 
    this.main_container = this.root_wnd.getChildByName("main_container");
    this.background = this.main_container.getChildByName("background");
    this.round_bg = this.background.getChildByName("round_bg");
    this.item_icon = this.main_container.getChildByName("icon");
    this.item_icon.setScale(this.scale1);
    this.num_label = this.main_container.getChildByName("num").getComponent(cc.Label);
    this.num_label.string = "";
    this.num_bg = this.main_container.getChildByName("num_bg");
    this.num_bg_size = this.num_bg.getContentSize();
    this.redpoint = this.main_container.getChildByName("redpoint");
    this.redpoint.active = false;
    this.round_res_id = PathTool.getRoundQualityBg(1);
 
    if (this.tmepData) {
      this.updateData(this.tmepData);
    }
 
    this.setItemUnEnabled(this.isUnEnabled);
    this.setVisibleRedPoint(this.redpointVisible);
  },
  // 红点
  setVisibleRedPoint: function setVisibleRedPoint(visible) {
    visible = visible || false;
    this.redpointVisible = visible;
 
    if (this.redpoint) {
      this.redpoint.active = visible;
    }
  },
  // 物品
  setVisibleIcon: function setVisibleIcon(visible) {
    visible = visible || false;
 
    if (this.item_icon) {
      this.item_icon.active = visible;
    }
  },
  // 物品框颜色
  setSelfBackground: function setSelfBackground(quality) {
    quality = quality || 1;
    var res_id = PathTool.getRoundQualityBg(quality);
    this.round_res_id = res_id;
    this.loadRes(this.round_res_id, function (res) {
      this.background.getComponent(cc.Sprite).spriteFrame = res;
    }.bind(this));
  },
  // 光圈
  setVisibleRoundBG: function setVisibleRoundBG(visible) {
    visible = visible || false;
 
    if (this.round_bg) {
      this.round_bg.active = visible;
    }
  },
  getData: function getData() {
    return this.data;
  },
  // 点击回调
  addCallBack: function addCallBack(callback) {
    this.callback = callback;
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    //当用户点击的时候记录鼠标点击状态
    this.root_wnd.on(cc.Node.EventType.TOUCH_START, function (event) {
      var touches = event.getTouches();
      this.touch_began = touches[0].getDelta();
    }, this); //当鼠标抬起的时候恢复状态
 
    this.root_wnd.on(cc.Node.EventType.TOUCH_END, function (event) {
      var touches = event.getTouches();
      this.touch_end = touches[0].getDelta();
      var is_click = true;
 
      if (this.touch_began != null) {
        is_click = Math.abs(this.touch_end.x - this.touch_began.x) <= 20 && Math.abs(this.touch_end.y - this.touch_began.y) <= 20;
      }
 
      if (is_click == true) {
        Utils.playButtonSound(ButtonSound.Normal);
 
        if (this.btn_call_fun) {
          this.btn_call_fun();
        } else {
          if (this.is_show_tips && this.data != null) {
            var bid = this.data.bid || this.data.base_id || this.data.id;
            var type = 0;
 
            if (this.data) {
              if (this.data.config && this.data.config.type) {
                type = this.data.config.type;
              } else if (this.data.type) {
                type = this.data.type;
              }
            }
 
            var BackPackConst = require("backpack_const");
 
            if (BackPackConst.checkIsEquip(type) && !this.is_spec) {
              var HeroController = require("hero_controller");
 
              HeroController.getInstance().openEquipTips(true, this.data);
            } else {
              var config;
 
              if (this.data.config) {
                config = this.data.config;
              } else {
                config = Utils.getItemConfig(bid);
              } // 虽然显示物品来源,但是如果没有配置也不需要显示
 
 
              if (this.is_show_source == true && config.source && Utils.next(config.source)) {
                var BackpackController = require("backpack_controller");
 
                BackpackController.getInstance().openTipsSource(true, config);
              } else {
                var TipsController = require("tips_controller");
 
                TipsController.getInstance().showGoodsTips(config);
              }
            }
 
            return;
          }
        }
 
        if (this.callback) {
          this.callback();
        }
      }
    }, this);
  },
  // 显示tips的开关
  setDefaultTip: function setDefaultTip(is_show_tips) {
    if (is_show_tips == null) {
      is_show_tips = true;
    }
 
    this.is_show_tips = is_show_tips;
  },
  // 物品数据
  setBaseData: function setBaseData(data) {
    this.tmepData = data;
 
    if (this.root_wnd) {
      this.updateData(data);
    }
  },
  updateData: function updateData(data) {
    var config = Utils.getItemConfig(data.bid);
    if (config == null) return;
    this.data = config;
    this.item_icon.active = true;
    var head_icon = PathTool.getItemRes(config.icon);
    this.loadRes(head_icon, function (res) {
      this.item_icon.getComponent(cc.Sprite).spriteFrame = res;
    }.bind(this)); //  设置数量显示
 
    this.setSelfNum(data.num); //  设置背景
 
    this.setSelfBackground(config.quality);
  },
  setSelfNum: function setSelfNum(num) {
    num = num || 0;
    this.num_label.node.active = num > 1;
    this.num_bg.active = num > 1;
 
    if (num > 1) {
      this.num_label.string = num;
      this.updateNumBGSize();
    }
  },
  updateNumBGSize: function updateNumBGSize() {
    var size = this.num_label.node.getContentSize();
    var width = size.width;
 
    if (width < 50) {
      width = 50;
    }
 
    this.num_bg.setContentSize(cc.size(width + 6, this.num_bg_size.height));
  },
  //置灰
  setItemUnEnabled: function setItemUnEnabled(bool) {
    this.isUnEnabled = bool;
 
    if (this.background) {
      this.background.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
    }
 
    if (this.round_bg) {
      this.round_bg.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
    }
 
    if (this.item_icon) {
      this.item_icon.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
    }
 
    if (this.num_bg) {
      this.num_bg.getChildByName("background").getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
    }
 
    if (this.redpoint) {
      this.redpoint.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {}
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcdmlld1xccm91bmRfaXRlbV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJSb3VuZF9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiY2xpY2siLCJzY2FsZSIsInNjYWxlMSIsImluaXRDb25maWciLCJpc1VuRW5hYmxlZCIsInJlZHBvaW50VmlzaWJsZSIsImluaXRQYW5lbCIsInJvb3Rfd25kIiwic2V0U2NhbGUiLCJtYWluX2NvbnRhaW5lciIsImdldENoaWxkQnlOYW1lIiwiYmFja2dyb3VuZCIsInJvdW5kX2JnIiwiaXRlbV9pY29uIiwibnVtX2xhYmVsIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJudW1fYmciLCJudW1fYmdfc2l6ZSIsImdldENvbnRlbnRTaXplIiwicmVkcG9pbnQiLCJhY3RpdmUiLCJyb3VuZF9yZXNfaWQiLCJnZXRSb3VuZFF1YWxpdHlCZyIsInRtZXBEYXRhIiwidXBkYXRlRGF0YSIsInNldEl0ZW1VbkVuYWJsZWQiLCJzZXRWaXNpYmxlUmVkUG9pbnQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZUljb24iLCJzZXRTZWxmQmFja2dyb3VuZCIsInF1YWxpdHkiLCJyZXNfaWQiLCJsb2FkUmVzIiwicmVzIiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwic2V0VmlzaWJsZVJvdW5kQkciLCJnZXREYXRhIiwiZGF0YSIsImFkZENhbGxCYWNrIiwiY2FsbGJhY2siLCJyZWdpc3RlckV2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfU1RBUlQiLCJldmVudCIsInRvdWNoZXMiLCJnZXRUb3VjaGVzIiwidG91Y2hfYmVnYW4iLCJnZXREZWx0YSIsIlRPVUNIX0VORCIsInRvdWNoX2VuZCIsImlzX2NsaWNrIiwiTWF0aCIsImFicyIsIngiLCJ5IiwiVXRpbHMiLCJwbGF5QnV0dG9uU291bmQiLCJCdXR0b25Tb3VuZCIsIk5vcm1hbCIsImJ0bl9jYWxsX2Z1biIsImlzX3Nob3dfdGlwcyIsImJpZCIsImJhc2VfaWQiLCJpZCIsInR5cGUiLCJjb25maWciLCJCYWNrUGFja0NvbnN0IiwiY2hlY2tJc0VxdWlwIiwiaXNfc3BlYyIsIkhlcm9Db250cm9sbGVyIiwiZ2V0SW5zdGFuY2UiLCJvcGVuRXF1aXBUaXBzIiwiZ2V0SXRlbUNvbmZpZyIsImlzX3Nob3dfc291cmNlIiwic291cmNlIiwibmV4dCIsIkJhY2twYWNrQ29udHJvbGxlciIsIm9wZW5UaXBzU291cmNlIiwiVGlwc0NvbnRyb2xsZXIiLCJzaG93R29vZHNUaXBzIiwic2V0RGVmYXVsdFRpcCIsInNldEJhc2VEYXRhIiwiaGVhZF9pY29uIiwiZ2V0SXRlbVJlcyIsImljb24iLCJzZXRTZWxmTnVtIiwibnVtIiwibm9kZSIsInVwZGF0ZU51bUJHU2l6ZSIsInNpemUiLCJ3aWR0aCIsInNldENvbnRlbnRTaXplIiwiaGVpZ2h0IiwiYm9vbCIsInNldFN0YXRlIiwiU3RhdGUiLCJOT1JNQUwiLCJHUkFZIiwib25TaG93IiwicGFyYW1zIiwib25IaWRlIiwib25EZWxldGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxlQUFlLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzNCLGFBQVNDLFNBRGtCO0FBRTNCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCUCxRQUFRLENBQUNRLGFBQVQsQ0FBdUIsVUFBdkIsRUFBbUMsWUFBbkMsQ0FBbEI7O0FBRUEsUUFBR0MsU0FBUyxJQUFJQSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkMsRUFB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LFFBQUwsQ0FBY04sWUFBZCxDQUEyQnZCLEVBQUUsQ0FBQzRDLE1BQTlCLEVBQXNDZ0UsUUFBdEMsQ0FBK0MsQ0FBQ0QsSUFBRCxHQUFRM0csRUFBRSxDQUFDNEMsTUFBSCxDQUFVaUUsS0FBVixDQUFnQkMsTUFBeEIsR0FBaUM5RyxFQUFFLENBQUM0QyxNQUFILENBQVVpRSxLQUFWLENBQWdCRSxJQUFoRztBQUNIO0FBQ0osR0F2TzBCO0FBeU8zQjtBQUNBQyxFQUFBQSxNQUFNLEVBQUMsZ0JBQVNDLE1BQVQsRUFBZ0IsQ0FFdEIsQ0E1TzBCO0FBOE8zQjtBQUNBQyxFQUFBQSxNQUFNLEVBQUMsa0JBQVUsQ0FFaEIsQ0FqUDBCO0FBbVAzQjtBQUNBQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVUsQ0FFbEI7QUF0UDBCLENBQVQsQ0FBdEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDnianlk4HvvIjlnIblvaLnmoTvvIlcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTI1IDE5OjUwOjM1XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFJvdW5kX2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYmFja3BhY2tcIiwgXCJyb3VuZF9pdGVtXCIpO1xuXG4gICAgICAgIGlmKGFyZ3VtZW50cyAmJiBhcmd1bWVudHMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICB0aGlzLmNsaWNrID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5zY2FsZSA9IGFyZ3VtZW50c1sxXSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZTEgPSBhcmd1bWVudHNbMl0gfHwgMTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmlzVW5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVkcG9pbnRWaXNpYmxlID0gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5zY2FsZSE9MSl7XG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnNldFNjYWxlKHRoaXMuc2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMucm91bmRfYmcgPSB0aGlzLmJhY2tncm91bmQuZ2V0Q2hpbGRCeU5hbWUoXCJyb3VuZF9iZ1wiKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaXRlbV9pY29uID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImljb25cIik7XG4gICAgICAgIHRoaXMuaXRlbV9pY29uLnNldFNjYWxlKHRoaXMuc2NhbGUxKTtcbiAgICAgICAgdGhpcy5udW1fbGFiZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibnVtXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMubnVtX2xhYmVsLnN0cmluZyA9IFwiXCI7XG4gICAgICAgIHRoaXMubnVtX2JnID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm51bV9iZ1wiKTtcbiAgICAgICAgdGhpcy5udW1fYmdfc2l6ZSA9IHRoaXMubnVtX2JnLmdldENvbnRlbnRTaXplKCk7XG5cbiAgICAgICAgdGhpcy5yZWRwb2ludCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyZWRwb2ludFwiKTtcbiAgICAgICAgdGhpcy5yZWRwb2ludC5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnJvdW5kX3Jlc19pZCA9IFBhdGhUb29sLmdldFJvdW5kUXVhbGl0eUJnKDEpO1xuXG4gICAgICAgIGlmKHRoaXMudG1lcERhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKHRoaXMudG1lcERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRJdGVtVW5FbmFibGVkKHRoaXMuaXNVbkVuYWJsZWQpO1xuICAgICAgICB0aGlzLnNldFZpc2libGVSZWRQb2ludCh0aGlzLnJlZHBvaW50VmlzaWJsZSk7XG4gICAgfSxcblxuICAgIC8vIOe6oueCuVxuICAgIHNldFZpc2libGVSZWRQb2ludDpmdW5jdGlvbih2aXNpYmxlKXtcbiAgICAgICAgdmlzaWJsZSA9IHZpc2libGUgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMucmVkcG9pbnRWaXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgaWYodGhpcy5yZWRwb2ludCl7XG4gICAgICAgICAgICB0aGlzLnJlZHBvaW50LmFjdGl2ZSA9IHZpc2libGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g54mp5ZOBXG4gICAgc2V0VmlzaWJsZUljb246ZnVuY3Rpb24odmlzaWJsZSl7XG4gICAgICAgIHZpc2libGUgPSB2aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICBpZih0aGlzLml0ZW1faWNvbil7XG4gICAgICAgICAgICB0aGlzLml0ZW1faWNvbi5hY3RpdmUgPSB2aXNpYmxlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOeJqeWTgeahhuminOiJslxuICAgIHNldFNlbGZCYWNrZ3JvdW5kOmZ1bmN0aW9uKHF1YWxpdHkpe1xuICAgICAgICBxdWFsaXR5ID0gcXVhbGl0eSB8fCAxO1xuICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0Um91bmRRdWFsaXR5QmcocXVhbGl0eSk7XG4gICAgICAgIHRoaXMucm91bmRfcmVzX2lkID0gcmVzX2lkO1xuICAgICAgICB0aGlzLmxvYWRSZXModGhpcy5yb3VuZF9yZXNfaWQsZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0sXG5cbiAgICAvLyDlhYnlnIhcbiAgICBzZXRWaXNpYmxlUm91bmRCRzpmdW5jdGlvbih2aXNpYmxlKXtcbiAgICAgICAgdmlzaWJsZSA9IHZpc2libGUgfHwgZmFsc2U7XG4gICAgICAgIGlmKHRoaXMucm91bmRfYmcpe1xuICAgICAgICAgICAgdGhpcy5yb3VuZF9iZy5hY3RpdmUgPSB2aXNpYmxlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldERhdGE6ZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICAvLyDngrnlh7vlm57osINcbiAgICBhZGRDYWxsQmFjazpmdW5jdGlvbihjYWxsYmFjayl7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgLy/lvZPnlKjmiLfngrnlh7vnmoTml7blgJnorrDlvZXpvKDmoIfngrnlh7vnirbmgIFcbiAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5nZXRUb3VjaGVzKCk7XG4gICAgICAgICAgICB0aGlzLnRvdWNoX2JlZ2FuID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuXG4gICAgICAgIH0sdGhpcyk7XG5cbiAgICAgICAgLy/lvZPpvKDmoIfmiqzotbfnmoTml7blgJnmgaLlpI3nirbmgIFcbiAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuZ2V0VG91Y2hlcygpO1xuICAgICAgICAgICAgdGhpcy50b3VjaF9lbmQgPSB0b3VjaGVzWzBdLmdldERlbHRhKCk7XG5cbiAgICAgICAgICAgIHZhciBpc19jbGljayA9IHRydWU7XG4gICAgICAgICAgICBpZih0aGlzLnRvdWNoX2JlZ2FuICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIGlzX2NsaWNrID0gTWF0aC5hYnModGhpcy50b3VjaF9lbmQueCAtIHRoaXMudG91Y2hfYmVnYW4ueCkgPD0gMjAgJiYgTWF0aC5hYnModGhpcy50b3VjaF9lbmQueSAtIHRoaXMudG91Y2hfYmVnYW4ueSkgPD0gMjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc19jbGljayA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmJ0bl9jYWxsX2Z1bil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2NhbGxfZnVuKCk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNfc2hvd190aXBzICYmIHRoaXMuZGF0YSAhPSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaWQgPSB0aGlzLmRhdGEuYmlkIHx8IHRoaXMuZGF0YS5iYXNlX2lkIHx8IHRoaXMuZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhLmNvbmZpZyAmJiB0aGlzLmRhdGEuY29uZmlnLnR5cGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdGhpcy5kYXRhLmNvbmZpZy50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZGF0YS50eXBlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHRoaXMuZGF0YS50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCYWNrUGFja0NvbnN0ID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFja1BhY2tDb25zdC5jaGVja0lzRXF1aXAodHlwZSkgJiYgKCF0aGlzLmlzX3NwZWMpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuRXF1aXBUaXBzKHRydWUsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5jb25maWcpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSB0aGlzLmRhdGEuY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGJpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiZveeEtuaYvuekuueJqeWTgeadpea6kCzkvYbmmK/lpoLmnpzmsqHmnInphY3nva7kuZ/kuI3pnIDopoHmmL7npLpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmlzX3Nob3dfc291cmNlID09IHRydWUgJiYgY29uZmlnLnNvdXJjZSAmJiBVdGlscy5uZXh0KGNvbmZpZy5zb3VyY2UpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJhY2twYWNrQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYWNrcGFja19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVGlwc1NvdXJjZSh0cnVlLCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVGlwc0NvbnRyb2xsZXIgPSByZXF1aXJlKFwidGlwc19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNob3dHb29kc1RpcHMoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5jYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcyk7XG4gICAgfSxcblxuICAgIC8vIOaYvuekunRpcHPnmoTlvIDlhbNcbiAgICBzZXREZWZhdWx0VGlwOmZ1bmN0aW9uKGlzX3Nob3dfdGlwcyl7XG4gICAgICAgIGlmKGlzX3Nob3dfdGlwcyA9PSBudWxsKXtcbiAgICAgICAgICAgIGlzX3Nob3dfdGlwcyA9IHRydWU7ICAgIFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNfc2hvd190aXBzID0gaXNfc2hvd190aXBzO1xuICAgIH0sXG5cbiAgICAvLyDnianlk4HmlbDmja5cbiAgICBzZXRCYXNlRGF0YTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy50bWVwRGF0YSA9IGRhdGE7XG4gICAgICAgIGlmKHRoaXMucm9vdF93bmQpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICB1cGRhdGVEYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB2YXIgY29uZmlnID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyhkYXRhLmJpZCk7XG4gICAgICAgIGlmKGNvbmZpZyA9PSBudWxsKXJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhID0gY29uZmlnO1xuXG4gICAgICAgIHRoaXMuaXRlbV9pY29uLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHZhciBoZWFkX2ljb24gPSBQYXRoVG9vbC5nZXRJdGVtUmVzKGNvbmZpZy5pY29uKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKGhlYWRfaWNvbixmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGhpcy5pdGVtX2ljb24uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyAg6K6+572u5pWw6YeP5pi+56S6XG5cdCAgICB0aGlzLnNldFNlbGZOdW0oZGF0YS5udW0pO1xuXG5cdCAgICAvLyAg6K6+572u6IOM5pmvXG5cdCAgICB0aGlzLnNldFNlbGZCYWNrZ3JvdW5kKGNvbmZpZy5xdWFsaXR5KTtcbiAgICB9LFxuXG4gICAgc2V0U2VsZk51bTpmdW5jdGlvbihudW0pe1xuICAgICAgICBudW0gPSBudW0gfHwgMDtcbiAgICAgICAgdGhpcy5udW1fbGFiZWwubm9kZS5hY3RpdmUgPSBudW0gPjE7XG4gICAgICAgIHRoaXMubnVtX2JnLmFjdGl2ZSA9IG51bSA+IDE7XG4gICAgICAgIGlmKG51bSA+IDEpe1xuICAgICAgICAgICAgdGhpcy5udW1fbGFiZWwuc3RyaW5nID0gbnVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOdW1CR1NpemUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVOdW1CR1NpemU6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLm51bV9sYWJlbC5ub2RlLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciB3aWR0aCA9IHNpemUud2lkdGg7XG4gICAgICAgIGlmKHdpZHRoIDwgNTApe1xuICAgICAgICAgICAgd2lkdGggPSA1MDsgICAgXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1fYmcuc2V0Q29udGVudFNpemUoY2Muc2l6ZSh3aWR0aCs2LCB0aGlzLm51bV9iZ19zaXplLmhlaWdodCkpO1xuICAgIH0sXG5cbiAgICAvL+e9rueBsFxuICAgIHNldEl0ZW1VbkVuYWJsZWQ6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgIHRoaXMuaXNVbkVuYWJsZWQgPSBib29sO1xuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc2V0U3RhdGUoIWJvb2wgPyBjYy5TcHJpdGUuU3RhdGUuTk9STUFMIDogY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm91bmRfYmcpIHtcbiAgICAgICAgICAgIHRoaXMucm91bmRfYmcuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc2V0U3RhdGUoIWJvb2wgPyBjYy5TcHJpdGUuU3RhdGUuTk9STUFMIDogY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXRlbV9pY29uKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1faWNvbi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zZXRTdGF0ZSghYm9vbCA/IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwgOiBjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5udW1fYmcpIHtcbiAgICAgICAgICAgIHRoaXMubnVtX2JnLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zZXRTdGF0ZSghYm9vbCA/IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwgOiBjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWRwb2ludCkge1xuICAgICAgICAgICAgdGhpcy5yZWRwb2ludC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zZXRTdGF0ZSghYm9vbCA/IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwgOiBjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzpmdW5jdGlvbihwYXJhbXMpe1xuXG4gICAgfSxcblxuICAgIC8vIOmdouadv+iuvue9ruS4jeWPr+ingeeahOWbnuiwgyzov5nph4zlgZrkuIDkupvkuI3lj6/op4HnmoTlsY/olL3lpITnkIZcbiAgICBvbkhpZGU6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDlvZPpnaLmnb/ku47kuLvoioLngrnph4rmlL7mjonnmoTosIPnlKjmjqXlj6Ms6ZyA6KaB5omL5Yqo6LCD55SoLOiAjOS4lOS5n+S4gOWumuimgeiwg+eUqFxuICAgIG9uRGVsZXRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxufSkiXX0=