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
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/common/basepanel.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, 'fbdb9UbFnJAFp1QhzS6W3lv', 'basepanel');
// Scripts/common/basepanel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
//      基础标签页或者独立的panel
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var LoaderManager = require("loadermanager");
 
var ViewClass = require("viewclass");
 
window.BasePanel = cc.Class({
  "extends": ViewClass,
  ctor: function ctor() {
    this.scale = 1;
    this.x = 0;
    this.y = 0;
    this.initConfig();
    this.root_wnd = null;
  },
  wating: false,
  prefabPath: "",
  // 预设路径
  loading: false,
  // 是否在加载中
  fastShowThenHide: false,
  // 还没有异步加载完成,就要隐藏掉了
  isFirstOpen: false,
  // 是否是第一次打开
  setParent: function setParent(parent) {
    this._super(parent);
 
    this.isInLoading = false, this.fastShowThenHide = false, this.isFirstOpen = true;
    this.base_view_event_list = {};
    this.res_list = {};
    this.visible = true;
 
    if (this.root_wnd && parent instanceof cc.Node) {
      this.root_wnd.parent = parent;
    }
  },
  // 子类实现具体的,比如说监听事件,或者其他
  initConfig: function initConfig() {},
  initPanel: function initPanel() {},
  registerEvent: function registerEvent() {},
  onShow: function onShow() {},
  onHide: function onHide() {},
  onDelete: function onDelete() {},
  // 加载预设
  onLoadPanel: function onLoadPanel() {
    var self = this;
 
    if (!this.waiting_timer && this.wating && !window.hide_loading) {
      this.waiting_timer = gcore.Timer.set(function () {
        this.is_wating = true;
        game.updateWaitingStatus(WaitingStaus.LOADING);
      }.bind(this), 1500, 1);
    }
 
    LoaderManager.getInstance().loadRes(this.prefabPath, function (res_object) {
      // if (error) {
      //     cc.log("加载Prefab失败,原因:" + error);
      //     return;
      // }
      if (self.waiting_timer) {
        gcore.Timer.del(self.waiting_timer);
        self.waiting_timer = null;
      }
 
      if (self.is_wating) {
        game.updateWaitingStatus();
        self.is_wating = false;
      }
 
      if (self["delete"] || !self.parent._children) {
        return;
      }
 
      self.root_wnd = res_object;
      self.root_wnd.parent = self.parent;
      self.root_wnd.scale = self.scale;
 
      if (self.zIndex) {
        self.setZIndex(self.zIndex);
      }
 
      if (!self.visible) {
        self.setVisible(false);
      } // self.root_wnd.active = self.visible;
 
 
      if (self.zIndex && self.zIndex >= 0) {
        self.root_wnd.zIndex = self.zIndex;
      } // 缓存位置
 
 
      if (self.cache_x != null && self.cache_y != null) {
        self.root_wnd.setPosition(self.cache_x, self.cache_y);
        self.cache_x = null;
        self.cache_y = null;
      }
 
      if (self.cache_ap_y != null && self.cache_ap_x != null) {
        self.root_wnd.setAnchorPoint(self.cache_ap_x, self.cache_ap_y);
        self.cache_ap_x = null;
        self.cache_ap_y = null;
      } // 第一次打开直接回调初始化.获取对象或者组件
 
 
      if (self.isFirstOpen == true) {
        self.isFirstOpen = false;
        self.initPanel();
        self.registerEvent();
      }
 
      self.isInLoading = false; // 加载完成之后,需要判断是否有逻辑隐藏掉
 
      if (self.fastShowThenHide == true) {
        self.fastShowThenHide = false; // self.root_wnd.active = false;
 
        self.setVisible(false);
      } else {
        self.onShow(self.open_params);
      }
 
      if (self.root_wnd && self.root_wnd.getComponent(cc.Widget)) {
        self.roow_wdg = self.root_wnd.getComponent(cc.Widget);
      }
 
      if (self.root_wnd_cb) self.root_wnd_cb(self.root_wnd);
    });
  },
  // 显示窗体处理
  show: function show(params) {
    if (this.isInLoading == true) {
      return;
    }
 
    this.open_params = params;
 
    if (this.root_wnd == null) {
      this.isInLoading = true;
      this.onLoadPanel();
    } else {
      this.isInLoading = false; // this.root_wnd.active = true;
 
      if (this.root_wnd.active) this.setVisible(true);
      this.onShow(params);
    }
  },
  // 关掉窗体
  hide: function hide() {
    if (this.root_wnd) {
      this.setVisible(false); // this.root_wnd.active = false;
 
      this.onHide();
    } else {
      this.fastShowThenHide = true;
    }
  },
  // 是否可见
  setVisible: function setVisible(status, dir) {
    this.visible = status;
 
    if (this.root_wnd) {
      if (status) {
        if (this.roow_wdg) {
          this.roow_wdg.alignMode = cc.Widget.AlignMode.ON_WINDOW_RESIZE;
        }
 
        this.setPosition(this.x, this.y);
        this.cur_visible = false;
      } else {
        if (!this.cur_visible) {
          if (this.roow_wdg) {
            this.roow_wdg.alignMode = cc.Widget.AlignMode.ONCE;
          }
 
          if (dir == ScrollViewDir.vertical) {
            this.root_wnd.x -= cc.winSize.width * 2;
          } else if (dir == ScrollViewDir.horizontal) {
            this.root_wnd.x -= cc.winSize.height * 2;
            this.root_wnd.y -= cc.winSize.height * 2;
          } else {
            this.root_wnd.x -= cc.winSize.width * 2;
          } // this.visible_x = this.root_wnd.x;
 
 
          this.cur_visible = true;
        }
      } // this.root_wnd.active = status;
 
 
      if (this.onVisible) this.onVisible(status);
    }
  },
  //新增一些不受cur_visible控制的显隐
  setActive: function setActive(status) {
    this.visible = status;
 
    if (this.root_wnd) {
      if (status) {
        this.setPosition(this.x, this.y);
      } else {
        this.root_wnd.x -= cc.winSize.width * 2;
      }
    }
  },
  isOpen: function isOpen() {
    if (this.root_wnd && !this.cur_visible) return true;
    return false;
  },
  setPosVisible: function setPosVisible() {
    if (this.root_wnd) this.root_wnd.x -= 1000;
  },
  getVisible: function getVisible() {
    return this.visible;
  },
  setScale: function setScale(scale) {
    this.scale = scale;
    if (this.root_wnd) this.root_wnd.scale = scale;
  },
  setZIndex: function setZIndex(zIndex) {
    this.zIndex = zIndex;
    if (this.root_wnd) this.root_wnd.zIndex = zIndex;
  },
  deleteMe: function deleteMe() {
    this["delete"] = true;
    this.onDelete();
 
    this._super(); // this.removeGlobalEvent();
    // if(this.root_wnd){
    //     this.root_wnd.destroyAllChildren();
    //     this.root_wnd.destroy();
    //     this.root_wnd = null;
    // }
    // // LoaderManager.getInstance().deleteRes(this.prefabPath);
    // LoaderManager.getInstance().releasePrefab(this.prefabPath);
    // for(var key in this.res_list){
    //     LoaderManager.getInstance().releaseRes(key)
    // }
 
  },
  // 设置坐标位置
  setPosition: function setPosition(x, y) {
    if (x == null || y == null) return;
    this.x = x;
    this.y = y;
 
    if (this.root_wnd) {
      this.root_wnd.setPosition(x, y);
    } else {
      this.cache_x = x;
      this.cache_y = y;
    }
  },
  // 设置锚点
  setAnchorPoint: function setAnchorPoint(x, y) {
    this.ap_x = x;
    this.ap_y = y;
 
    if (this.root_wnd) {
      this.root_wnd.setAnchorPoint(0.5, 0.5);
    } else {
      this.cache_ap_x = x;
      this.cache_ap_y = y;
    }
  },
  getPositionX: function getPositionX() {
    return this.x;
  },
  getPositionY: function getPositionY() {
    return this.y;
  },
  getRootWnd: function getRootWnd(cb) {
    this.root_wnd_cb = cb;
    if (this.root_wnd) this.root_wnd_cb(this.root_wnd);
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFxiYXNlcGFuZWwuanMiXSwibmFtZXMiOlsiTG9hZGVyTWFuYWdlciIsInJlcXVpcmUiLCJWaWV3Q2xhc3MiLCJ3aW5kb3ciLCJCYXNlUGFuZWwiLCJjYyIsIkNsYXNzIiwiY3RvciIsInNjYWxlIiwieCIsInkiLCJpbml0Q29uZmlnIiwicm9vdF93bmQiLCJ3YXRpbmciLCJwcmVmYWJQYXRoIiwibG9hZGluZyIsImZhc3RTaG93VGhlbkhpZGUiLCJpc0ZpcnN0T3BlbiIsInNldFBhcmVudCIsInBhcmVudCIsIl9zdXBlciIsImlzSW5Mb2FkaW5nIiwiYmFzZV92aWV3X2V2ZW50X2xpc3QiLCJyZXNfbGlzdCIsInZpc2libGUiLCJOb2RlIiwiaW5pdFBhbmVsIiwicmVnaXN0ZXJFdmVudCIsIm9uU2hvdyIsIm9uSGlkZSIsIm9uRGVsZXRlIiwib25Mb2FkUGFuZWwiLCJzZWxmIiwid2FpdGluZ190aW1lciIsImhpZGVfbG9hZGluZyIsImdjb3JlIiwiVGltZXIiLCJzZXQiLCJpc193YXRpbmciLCJnYW1lIiwidXBkYXRlV2FpdGluZ1N0YXR1cyIsIldhaXRpbmdTdGF1cyIsIkxPQURJTkciLCJiaW5kIiwiZ2V0SW5zdGFuY2UiLCJsb2FkUmVzIiwicmVzX29iamVjdCIsImRlbCIsIl9jaGlsZHJlbiIsInpJbmRleCIsInNldFpJbmRleCIsInNldFZpc2libGUiLCJjYWNoZV94IiwiY2FjaGVfeSIsInNldFBvc2l0aW9uIiwiY2FjaGVfYXBfeSIsImNhY2hlX2FwX3giLCJzZXRBbmNob3JQb2ludCIsIm9wZW5fcGFyYW1zIiwiZ2V0Q29tcG9uZW50IiwiV2lkZ2V0Iiwicm9vd193ZGciLCJyb290X3duZF9jYiIsInNob3ciLCJwYXJhbXMiLCJhY3RpdmUiLCJoaWRlIiwic3RhdHVzIiwiZGlyIiwiYWxpZ25Nb2RlIiwiQWxpZ25Nb2RlIiwiT05fV0lORE9XX1JFU0laRSIsImN1cl92aXNpYmxlIiwiT05DRSIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIndpblNpemUiLCJ3aWR0aCIsImhvcml6b250YWwiLCJoZWlnaHQiLCJvblZpc2libGUiLCJzZXRBY3RpdmUiLCJpc09wZW4iLCJzZXRQb3NWaXNpYmxlIiwiZ2V0VmlzaWJsZSIsInNldFNjYWxlIiwiZGVsZXRlTWUiLCJhcF94IiwiYXBfeSIsImdldFBvc2l0aW9uWCIsImdldFBvc2l0aW9uWSIsImdldFJvb3RXbmQiLCJjYiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxhQUFhLEdBQUdDLE9BQU8sQ0FBQyxlQUFELENBQTNCOztBQUNBLElBQUlDLFNBQVMsR0FBR0QsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBRUFFLE1BQU0sQ0FBQ0MsU0FBUCxHQUFtQkMsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDeEIsYUFBU0osU0FEZTtBQUV4QkssRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLQyxDQUFMLEdBQVMsQ0FBVDtBQUNBLFNBQUtDLENBQUwsR0FBUyxDQUFUO0FBQ0EsU0FBS0MsVUFBTDtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDSCxHQVJ1QjtBQVN4QkMsRUFBQUEsTUFBTSxFQUFFLEtBVGdCO0FBVXhCQyxFQUFBQSxVQUFVLEVBQUUsRUFWWTtBQVVJO0FBQzVCQyxFQUFBQSxPQUFPLEVBQUUsS0FYZTtBQVdJO0FBQzVCQyxFQUFBQSxnQkFBZ0IsRUFBRSxLQVpNO0FBWUk7QUFDNUJDLEVBQUFBLFdBQVcsRUFBRSxLQWJXO0FBYUk7QUFFNUJDLEVBQUFBLFNBQVMsRUFBRSxtQkFBVUMsTUFBVixFQUFrQjtBQUN6QixTQUFLQyxNQUFMLENBQVlELE1BQVo7O0FBQ0EsU0FBS0UsV0FBTCxHQUFtQixLQUFuQixFQUNJLEtBQUtMLGdCQUFMLEdBQXdCLEtBRDVCLEVBRUksS0FBS0MsV0FBTCxHQUFtQixJ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QUFsQjtBQUNBLFdBQUs4QyxVQUFMLEdBQWtCN0MsQ0FBbEI7QUFDSDtBQUNKLEdBclF1QjtBQXVReEIrRSxFQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsV0FBTyxLQUFLaEYsQ0FBWjtBQUNILEdBelF1QjtBQTJReEJpRixFQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsV0FBTyxLQUFLaEYsQ0FBWjtBQUNILEdBN1F1QjtBQStReEJpRixFQUFBQSxVQUFVLEVBQUUsb0JBQVVDLEVBQVYsRUFBYztBQUN0QixTQUFLOUIsV0FBTCxHQUFtQjhCLEVBQW5CO0FBQ0EsUUFBSSxLQUFLaEYsUUFBVCxFQUNJLEtBQUtrRCxXQUFMLENBQWlCLEtBQUtsRCxRQUF0QjtBQUNQO0FBblJ1QixDQUFULENBQW5CIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogc2hpcmFob0BzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDln7rnoYDmoIfnrb7pobXmiJbogIXni6znq4vnmoRwYW5lbFxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBMb2FkZXJNYW5hZ2VyID0gcmVxdWlyZShcImxvYWRlcm1hbmFnZXJcIik7XG52YXIgVmlld0NsYXNzID0gcmVxdWlyZShcInZpZXdjbGFzc1wiKTtcblxud2luZG93LkJhc2VQYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBWaWV3Q2xhc3MsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNjYWxlID0gMTtcbiAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgdGhpcy5pbml0Q29uZmlnKClcbiAgICAgICAgdGhpcy5yb290X3duZCA9IG51bGw7XG4gICAgfSxcbiAgICB3YXRpbmc6IGZhbHNlLFxuICAgIHByZWZhYlBhdGg6IFwiXCIsICAgICAgICAgICAgIC8vIOmihOiuvui3r+W+hFxuICAgIGxvYWRpbmc6IGZhbHNlLCAgICAgICAgICAgICAvLyDmmK/lkKblnKjliqDovb3kuK1cbiAgICBmYXN0U2hvd1RoZW5IaWRlOiBmYWxzZSwgICAgLy8g6L+Y5rKh5pyJ5byC5q2l5Yqg6L295a6M5oiQLOWwseimgemakOiXj+aOieS6hlxuICAgIGlzRmlyc3RPcGVuOiBmYWxzZSwgICAgICAgICAvLyDmmK/lkKbmmK/nrKzkuIDmrKHmiZPlvIBcblxuICAgIHNldFBhcmVudDogZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB0aGlzLl9zdXBlcihwYXJlbnQpO1xuICAgICAgICB0aGlzLmlzSW5Mb2FkaW5nID0gZmFsc2UsXG4gICAgICAgICAgICB0aGlzLmZhc3RTaG93VGhlbkhpZGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHRoaXMuaXNGaXJzdE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmJhc2Vfdmlld19ldmVudF9saXN0ID0ge307XG4gICAgICAgIHRoaXMucmVzX2xpc3QgPSB7fVxuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCAmJiBwYXJlbnQgaW5zdGFuY2VvZiBjYy5Ob2RlKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnBhcmVudCA9IHBhcmVudFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWtkOexu+WunueOsOWFt+S9k+eahCzmr5TlpoLor7Tnm5HlkKzkuovku7Ys5oiW6ICF5YW25LuWXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkgeyB9LFxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkgeyB9LFxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBvblNob3c6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBvbkhpZGU6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkgeyB9LFxuXG4gICAgLy8g5Yqg6L296aKE6K6+XG4gICAgb25Mb2FkUGFuZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdfdGltZXIgJiYgdGhpcy53YXRpbmcgJiYgIXdpbmRvdy5oaWRlX2xvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZ190aW1lciA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc193YXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGdhbWUudXBkYXRlV2FpdGluZ1N0YXR1cyhXYWl0aW5nU3RhdXMuTE9BRElORyk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksIDE1MDAsIDEpXG4gICAgICAgIH1cbiAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXModGhpcy5wcmVmYWJQYXRoLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xuICAgICAgICAgICAgLy8gaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgICAgY2MubG9nKFwi5Yqg6L29UHJlZmFi5aSx6LSlLOWOn+WboDpcIiArIGVycm9yKTtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLndhaXRpbmdfdGltZXIpIHtcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwoc2VsZi53YWl0aW5nX3RpbWVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLndhaXRpbmdfdGltZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc193YXRpbmcpIHtcbiAgICAgICAgICAgICAgICBnYW1lLnVwZGF0ZVdhaXRpbmdTdGF0dXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlzX3dhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5kZWxldGUgfHwgIXNlbGYucGFyZW50Ll9jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5yb290X3duZCA9IHJlc19vYmplY3Q7XG4gICAgICAgICAgICBzZWxmLnJvb3Rfd25kLnBhcmVudCA9IHNlbGYucGFyZW50O1xuICAgICAgICAgICAgc2VsZi5yb290X3duZC5zY2FsZSA9IHNlbGYuc2NhbGU7XG4gICAgICAgICAgICBpZiAoc2VsZi56SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldFpJbmRleChzZWxmLnpJbmRleClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNlbGYucm9vdF93bmQuYWN0aXZlID0gc2VsZi52aXNpYmxlO1xuXG4gICAgICAgICAgICBpZiAoc2VsZi56SW5kZXggJiYgc2VsZi56SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYucm9vdF93bmQuekluZGV4ID0gc2VsZi56SW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOe8k+WtmOS9jee9rlxuICAgICAgICAgICAgaWYgKHNlbGYuY2FjaGVfeCAhPSBudWxsICYmIHNlbGYuY2FjaGVfeSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yb290X3duZC5zZXRQb3NpdGlvbihzZWxmLmNhY2hlX3gsIHNlbGYuY2FjaGVfeSlcbiAgICAgICAgICAgICAgICBzZWxmLmNhY2hlX3ggPSBudWxsO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVfeSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLmNhY2hlX2FwX3kgIT0gbnVsbCAmJiBzZWxmLmNhY2hlX2FwX3ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNlbGYucm9vdF93bmQuc2V0QW5jaG9yUG9pbnQoc2VsZi5jYWNoZV9hcF94LCBzZWxmLmNhY2hlX2FwX3kpXG4gICAgICAgICAgICAgICAgc2VsZi5jYWNoZV9hcF94ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzZWxmLmNhY2hlX2FwX3kgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDnrKzkuIDmrKHmiZPlvIDnm7TmjqXlm57osIPliJ3lp4vljJYu6I635Y+W5a+56LGh5oiW6ICF57uE5Lu2XG4gICAgICAgICAgICBpZiAoc2VsZi5pc0ZpcnN0T3BlbiA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pc0ZpcnN0T3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5pbml0UGFuZWwoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyRXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaXNJbkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8g5Yqg6L295a6M5oiQ5LmL5ZCOLOmcgOimgeWIpOaWreaYr+WQpuaciemAu+i+kemakOiXj+aOiVxuICAgICAgICAgICAgaWYgKHNlbGYuZmFzdFNob3dUaGVuSGlkZSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5mYXN0U2hvd1RoZW5IaWRlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAvLyBzZWxmLnJvb3Rfd25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYub25TaG93KHNlbGYub3Blbl9wYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5yb290X3duZCAmJiBzZWxmLnJvb3Rfd25kLmdldENvbXBvbmVudChjYy5XaWRnZXQpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yb293X3dkZyA9IHNlbGYucm9vdF93bmQuZ2V0Q29tcG9uZW50KGNjLldpZGdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxmLnJvb3Rfd25kX2NiKVxuICAgICAgICAgICAgICAgIHNlbGYucm9vdF93bmRfY2Ioc2VsZi5yb290X3duZCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyDmmL7npLrnqpfkvZPlpITnkIZcbiAgICBzaG93OiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5Mb2FkaW5nID09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRoaXMub3Blbl9wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbkxvYWRQYW5lbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0luTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gdGhpcy5yb290X3duZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMucm9vdF93bmQuYWN0aXZlKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub25TaG93KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5YWz5o6J56qX5L2TXG4gICAgaGlkZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgIC8vIHRoaXMucm9vdF93bmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9uSGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mYXN0U2hvd1RoZW5IaWRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmmK/lkKblj6/op4FcbiAgICBzZXRWaXNpYmxlOiBmdW5jdGlvbiAoc3RhdHVzLCBkaXIpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gc3RhdHVzO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3dfd2RnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vd193ZGcuYWxpZ25Nb2RlID0gY2MuV2lkZ2V0LkFsaWduTW9kZS5PTl9XSU5ET1dfUkVTSVpFO1xuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih0aGlzLngsIHRoaXMueSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cl92aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJfdmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb293X3dkZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb293X3dkZy5hbGlnbk1vZGUgPSBjYy5XaWRnZXQuQWxpZ25Nb2RlLk9OQ0U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyID09IFNjcm9sbFZpZXdEaXIudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQueCAtPSBjYy53aW5TaXplLndpZHRoICogMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXIgPT0gU2Nyb2xsVmlld0Rpci5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnggLT0gY2Mud2luU2l6ZS5oZWlnaHQgKiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290X3duZC55IC09IGNjLndpblNpemUuaGVpZ2h0ICogMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQueCAtPSBjYy53aW5TaXplLndpZHRoICogMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudmlzaWJsZV94ID0gdGhpcy5yb290X3duZC54O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cl92aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGlzLnJvb3Rfd25kLmFjdGl2ZSA9IHN0YXR1cztcbiAgICAgICAgICAgIGlmICh0aGlzLm9uVmlzaWJsZSlcbiAgICAgICAgICAgICAgICB0aGlzLm9uVmlzaWJsZShzdGF0dXMpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5paw5aKe5LiA5Lqb5LiN5Y+XY3VyX3Zpc2libGXmjqfliLbnmoTmmL7pmpBcbiAgICBzZXRBY3RpdmU6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gc3RhdHVzO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy54LCB0aGlzLnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnggLT0gY2Mud2luU2l6ZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNPcGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kICYmICF0aGlzLmN1cl92aXNpYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzZXRQb3NWaXNpYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKVxuICAgICAgICAgICAgdGhpcy5yb290X3duZC54IC09IDEwMDA7XG4gICAgfSxcblxuICAgIGdldFZpc2libGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVxuICAgIH0sXG5cbiAgICBzZXRTY2FsZTogZnVuY3Rpb24gKHNjYWxlKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnNjYWxlID0gc2NhbGU7XG4gICAgfSxcblxuICAgIHNldFpJbmRleDogZnVuY3Rpb24gKHpJbmRleCkge1xuICAgICAgICB0aGlzLnpJbmRleCA9IHpJbmRleDtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnpJbmRleCA9IHpJbmRleDtcbiAgICB9LFxuXG4gICAgZGVsZXRlTWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uRGVsZXRlKCk7XG4gICAgICAgIHRoaXMuX3N1cGVyKCk7XG4gICAgICAgIC8vIHRoaXMucmVtb3ZlR2xvYmFsRXZlbnQoKTtcbiAgICAgICAgLy8gaWYodGhpcy5yb290X3duZCl7XG4gICAgICAgIC8vICAgICB0aGlzLnJvb3Rfd25kLmRlc3Ryb3lBbGxDaGlsZHJlbigpO1xuICAgICAgICAvLyAgICAgdGhpcy5yb290X3duZC5kZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLnJvb3Rfd25kID0gbnVsbDtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAvLyBMb2FkZXJNYW5hZ2VyLmdldEluc3RhbmNlKCkuZGVsZXRlUmVzKHRoaXMucHJlZmFiUGF0aCk7XG4gICAgICAgIC8vIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZWxlYXNlUHJlZmFiKHRoaXMucHJlZmFiUGF0aCk7XG4gICAgICAgIC8vIGZvcih2YXIga2V5IGluIHRoaXMucmVzX2xpc3Qpe1xuICAgICAgICAvLyAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlbGVhc2VSZXMoa2V5KVxuICAgICAgICAvLyB9XG4gICAgfSxcblxuICAgIC8vIOiuvue9ruWdkOagh+S9jee9rlxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICBpZiAoeCA9PSBudWxsIHx8IHkgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRoaXMueCA9IHhcbiAgICAgICAgdGhpcy55ID0geVxuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5zZXRQb3NpdGlvbih4LCB5KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV94ID0geDtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfeSA9IHlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDorr7nva7plJrngrlcbiAgICBzZXRBbmNob3JQb2ludDogZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgdGhpcy5hcF94ID0geDtcbiAgICAgICAgdGhpcy5hcF95ID0geTtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQuc2V0QW5jaG9yUG9pbnQoMC41LCAwLjUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV9hcF94ID0geDtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfYXBfeSA9IHk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UG9zaXRpb25YOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhcbiAgICB9LFxuXG4gICAgZ2V0UG9zaXRpb25ZOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnlcbiAgICB9LFxuXG4gICAgZ2V0Um9vdFduZDogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHRoaXMucm9vdF93bmRfY2IgPSBjYjtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kX2NiKHRoaXMucm9vdF93bmQpO1xuICAgIH0sXG59KVxuIl19