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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/battle/view/battle_camp_window.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, '9f32f8mi0xM7p1LxrXy34aU', 'battle_camp_window');
// Scripts/mod/battle/view/battle_camp_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-04-11 10:35:32
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var CommonScrollView = require("common_scrollview");
 
var BattleCampItem = require("battle_camp_Item");
 
var BattleController = require("battle_controller");
 
var BattleEvent = require("battle_event");
 
var Battle_campWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("battle", "battle_camp_view");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Full; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = BattleController.getInstance();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {},
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    var self = this;
    self.background = self.root_wnd.getChildByName("background");
    var main_container = self.root_wnd.getChildByName("main_container");
    var title_label_1 = main_container.getChildByName("title_label_1").getComponent(cc.Label);
    title_label_1.string = Utils.TI18N("种族克制");
    var title_label_2 = main_container.getChildByName("title_label_2").getComponent(cc.Label);
    title_label_2.string = Utils.TI18N("种族克制效果:");
    var attr_label_1 = main_container.getChildByName("attr_label_1").getComponent(cc.Label);
    attr_label_1.string = Utils.TI18N("伤害+25%");
    var attr_label_2 = main_container.getChildByName("attr_label_2").getComponent(cc.Label);
    attr_label_2.string = Utils.TI18N("命中+20%");
    self.background.scale = FIT_SCALE;
    var list_panel = main_container.getChildByName("list_panel");
    var scroll_view_size = cc.size(list_panel.width, list_panel.height);
    var setting = {
      item_class: BattleCampItem,
      // -- 单元类
      start_x: 0,
      //-- 第一个单元的X起点
      space_x: 0,
      // -- x方向的间隔
      start_y: 0,
      //-- 第一个单元的Y起点
      space_y: 5,
      //-- y方向的间隔
      item_width: 603,
      //-- 单元的尺寸width
      item_height: 143,
      //-- 单元的尺寸height
      row: 0,
      //-- 行数,作用于水平滚动类型
      col: 1,
      //-- 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    self.camp_scrollview = new CommonScrollView();
    self.camp_scrollview.createScroll(list_panel, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.background.on("touchend", function () {
      Utils.playButtonSound(2);
      this.ctrl.openBattleCampView(false);
    }, this);
    this.addGlobalEvent(BattleEvent.EXIT_FIGHT, function () {
      this.ctrl.openBattleCampView(false);
    }.bind(this));
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(form_id_list) {
    this.form_id_list = form_id_list || [];
    this.form_pos_info = {};
 
    for (var k = 0; k < this.form_id_list.length; ++k) {
      var form_id = this.form_id_list[k];
      var form_cfg = Config.combat_halo_data.data_halo[form_id];
 
      if (form_cfg) {
        for (var i = 0; i < form_cfg.pos_info.length; ++i) {
          var v = form_cfg.pos_info[i];
          var camp_type = v[0];
          var camp_num = v[1];
 
          if (!this.form_pos_info[camp_type]) {
            this.form_pos_info[camp_type] = camp_num;
          } else {
            this.form_pos_info[camp_type] = this.form_pos_info[camp_type] + camp_num;
          }
        }
      }
    }
 
    this.refreshCampList();
  },
  refreshCampList: function refreshCampList() {
    var self = this;
    var camp_show_config = Config.combat_halo_data.data_halo_show;
 
    if (camp_show_config) {
      var camp_data = [];
 
      for (var k in camp_show_config) {
        var v = camp_show_config[k];
        var data = Utils.deepCopy(v);
        var show_cfg = {};
        show_cfg.id = k;
        show_cfg.is_activate = false;
 
        for (var j in data) {
          var cfg = data[j];
          cfg.is_activate = this.checkIsActivateCamp(cfg.pos_info);
 
          if (cfg.is_activate) {
            show_cfg.is_activate = true;
          }
 
          if (!show_cfg.name) {
            show_cfg.name = cfg.name;
          }
 
          if (!show_cfg.icon) {
            show_cfg.icon = cfg.icon;
          }
        }
 
        show_cfg.attr_data = data;
        camp_data.push(show_cfg);
      }
 
      var SortFunc = function SortFunc(objA, objB) {
        if (objA.is_activate && !objB.is_activate) {
          return -1;
        } else if (!objA.is_activate && objB.is_activate) {
          return 1;
        } else {
          return objA.id - objB.id;
        }
      };
 
      camp_data.sort(SortFunc);
 
      for (var i = 0; i < camp_data.length; ++i) {
        camp_data[i].index = i;
      }
 
      self.camp_scrollview.setData(camp_data);
    }
  },
  checkIsActivateCamp: function checkIsActivateCamp(pos_info) {
    var is_activate = false;
 
    if (pos_info && Utils.next(pos_info) != null) {
      is_activate = true;
 
      for (var i = 0; i < pos_info.length; ++i) {
        var v = pos_info[i];
        var camp_type = v[0];
        var camp_num = v[1];
        var have_num = 0;
 
        for (var _type in this.form_pos_info) {
          var num = this.form_pos_info[_type];
 
          if (_type == camp_type) {
            have_num = num;
            break;
          }
        }
 
        if (camp_num > have_num) {
          is_activate = false;
          break;
        }
      }
    }
 
    return is_activate;
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.camp_scrollview) {
      this.camp_scrollview.deleteMe();
      this.camp_scrollview = null;
    }
 
    this.ctrl.openBattleCampView(false);
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYXR0bGVcXHZpZXdcXGJhdHRsZV9jYW1wX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJDb21tb25TY3JvbGxWaWV3IiwiQmF0dGxlQ2FtcEl0ZW0iLCJCYXR0bGVDb250cm9sbGVyIiwiQmF0dGxlRXZlbnQiLCJCYXR0bGVfY2FtcFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpbml0Q29uZmlnIiwib3BlbkNhbGxCYWNrIiwic2VsZiIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJ0aXRsZV9sYWJlbF8xIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwidGl0bGVfbGFiZWxfMiIsImF0dHJfbGFiZWxfMSIsImF0dHJfbGFiZWxfMiIsInNjYWxlIiwiRklUX1NDQUxFIiwibGlzdF9wYW5lbCIsInNjcm9sbF92aWV3X3NpemUiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJzZXR0aW5nIiwiaXRlbV9jbGFzcyIsInN0YXJ0X3giLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiaXRlbV9oZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJjYW1wX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsIm9wZW5CYXR0bGVDYW1wVmlldyIsImFkZEdsb2JhbEV2ZW50IiwiRVhJVF9GSUdIVCIsImJpbmQiLCJvcGVuUm9vdFduZCIsImZvcm1faWRfbGlzdCIsImZvcm1fcG9zX2luZm8iLCJrIiwibGVuZ3RoIiwiZm9ybV9pZCIsImZvcm1fY2ZnIiwiQ29uZmlnIiwiY29tYmF0X2hhbG9fZGF0YSIsImRhdGFfaGFsbyIsImkiLCJwb3NfaW5mbyIsInYiLCJjYW1wX3R5cGUiLCJjYW1wX251bSIsInJlZnJlc2hDYW1wTGlzdCIsImNhbXBfc2hvd19jb25maWciLCJkYXRhX2hhbG9fc2hvdyIsImNhbXBfZGF0YSIsImRhdGEiLCJkZWVwQ29weSIsInNob3dfY2ZnIiwiaWQiLCJpc19hY3RpdmF0ZSIsImoiLCJjZmciLCJjaGVja0lzQWN0aXZhdGVDYW1wIiwibmFtZSIsImljb24iLCJhdHRyX2RhdGEiLCJwdXNoIiwiU29ydEZ1bmMiLCJvYmpBIiwib2JqQiIsInNvcnQiLCJpbmRleCIsInNldERhdGEiLCJuZXh0IiwiaGF2ZV9udW0iLCJfdHlwZSIsIm51bSIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsa0JBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsZ0JBQWdCLEdBQUdILE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxJQUFJSSxXQUFXLEdBQUdKLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlLLGlCQUFpQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUM3QixhQUFTQyxRQURvQjtBQUU3QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlgsUUFBUSxDQUFDWSxhQUFULENB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S0EsZUFBTCxDQUFxQndELFFBQXJCO0FBQ0EsV0FBS3hELGVBQUwsR0FBdUIsSUFBdkI7QUFDSDs7QUFDRCxTQUFLcEMsSUFBTCxDQUFVOEMsa0JBQVYsQ0FBNkIsS0FBN0I7QUFDSDtBQTVKNEIsQ0FBVCxDQUF4QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDQtMTEgMTA6MzU6MzJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBCYXR0bGVDYW1wSXRlbSA9IHJlcXVpcmUoXCJiYXR0bGVfY2FtcF9JdGVtXCIpXG52YXIgQmF0dGxlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYXR0bGVfY29udHJvbGxlclwiKVxudmFyIEJhdHRsZUV2ZW50ID0gcmVxdWlyZShcImJhdHRsZV9ldmVudFwiKVxudmFyIEJhdHRsZV9jYW1wV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhdHRsZVwiLCBcImJhdHRsZV9jYW1wX3ZpZXdcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IEJhdHRsZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmJhY2tncm91bmQgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgbGV0IG1haW5fY29udGFpbmVyID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xuICAgICAgICBsZXQgdGl0bGVfbGFiZWxfMSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGl0bGVfbGFiZWxfMVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRpdGxlX2xhYmVsXzEuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi56eN5peP5YWL5Yi2XCIpKVxuICAgICAgICBsZXQgdGl0bGVfbGFiZWxfMiA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidGl0bGVfbGFiZWxfMlwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRpdGxlX2xhYmVsXzIuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi56eN5peP5YWL5Yi25pWI5p6cOlwiKSlcbiAgICAgICAgbGV0IGF0dHJfbGFiZWxfMSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYXR0cl9sYWJlbF8xXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgYXR0cl9sYWJlbF8xLnN0cmluZyA9IChVdGlscy5USTE4TihcIuS8pOWusysyNSVcIikpXG4gICAgICAgIGxldCBhdHRyX2xhYmVsXzIgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImF0dHJfbGFiZWxfMlwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIGF0dHJfbGFiZWxfMi5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLlkb3kuK0rMjAlXCIpKVxuICAgICAgICBzZWxmLmJhY2tncm91bmQuc2NhbGUgPSBGSVRfU0NBTEU7XG5cbiAgICAgICAgbGV0IGxpc3RfcGFuZWwgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImxpc3RfcGFuZWxcIik7XG4gICAgICAgIGxldCBzY3JvbGxfdmlld19zaXplID0gY2Muc2l6ZShsaXN0X3BhbmVsLndpZHRoLCBsaXN0X3BhbmVsLmhlaWdodCk7XG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzcyA6IEJhdHRsZUNhbXBJdGVtLCAgICAgLy8gLS0g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94IDogMCwgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3ggOiAwLCAgICAgICAgICAgICAgICAgICAvLyAtLSB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95IDogMCwgICAgICAgICAgICAgICAgICAgIC8vLS0g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeSA6IDUsICAgICAgICAgICAgICAgICAgIC8vLS0geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgaXRlbV93aWR0aCA6IDYwMywgICAgICAgICAgICAgICAvLy0tIOWNleWFg+eahOWwuuWvuHdpZHRoXG4gICAgICAgICAgICBpdGVtX2hlaWdodCA6IDE0MywgICAgICAgICAgICAgIC8vLS0g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3cgOiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2wgOiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOWIl+aVsO+8jOS9nOeUqOS6juWeguebtOa7muWKqOexu+Wei1xuICAgICAgICAgICAgbmVlZF9keW5hbWljIDogdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5jYW1wX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpOyBcbiAgICAgICAgc2VsZi5jYW1wX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKGxpc3RfcGFuZWwsIGNjLnYyKDAsMCkgLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nKTtcbiAgICBcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLm9uKFwidG91Y2hlbmRcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDIpXG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkJhdHRsZUNhbXBWaWV3KGZhbHNlKVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoQmF0dGxlRXZlbnQuRVhJVF9GSUdIVCxmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5CYXR0bGVDYW1wVmlldyhmYWxzZSlcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihmb3JtX2lkX2xpc3Qpe1xuICAgICAgICB0aGlzLmZvcm1faWRfbGlzdCA9IGZvcm1faWRfbGlzdCB8fCBbXTtcbiAgICAgICAgdGhpcy5mb3JtX3Bvc19pbmZvID0ge31cbiAgICAgICAgZm9yKGxldCBrPTA7azx0aGlzLmZvcm1faWRfbGlzdC5sZW5ndGg7KytrKXtcbiAgICAgICAgICAgIGxldCBmb3JtX2lkID0gdGhpcy5mb3JtX2lkX2xpc3Rba11cbiAgICAgICAgICAgIGxldCBmb3JtX2NmZyA9IENvbmZpZy5jb21iYXRfaGFsb19kYXRhLmRhdGFfaGFsb1tmb3JtX2lkXVxuICAgICAgICAgICAgaWYoZm9ybV9jZmcpe1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8Zm9ybV9jZmcucG9zX2luZm8ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gZm9ybV9jZmcucG9zX2luZm9baV1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbXBfdHlwZSA9IHZbMF1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbXBfbnVtID0gdlsxXVxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5mb3JtX3Bvc19pbmZvW2NhbXBfdHlwZV0pe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtX3Bvc19pbmZvW2NhbXBfdHlwZV0gPSBjYW1wX251bVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybV9wb3NfaW5mb1tjYW1wX3R5cGVdID0gdGhpcy5mb3JtX3Bvc19pbmZvW2NhbXBfdHlwZV0gKyBjYW1wX251bVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaENhbXBMaXN0KCk7XG4gICAgfSxcbiAgICByZWZyZXNoQ2FtcExpc3QoICApe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBjYW1wX3Nob3dfY29uZmlnID0gQ29uZmlnLmNvbWJhdF9oYWxvX2RhdGEuZGF0YV9oYWxvX3Nob3c7XG4gICAgICAgIGlmIChjYW1wX3Nob3dfY29uZmlnKXtcbiAgICAgICAgICAgIGxldCBjYW1wX2RhdGEgPSBbXTtcbiAgICAgICAgICAgIGZvcihsZXQgayBpbiBjYW1wX3Nob3dfY29uZmlnKXtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGNhbXBfc2hvd19jb25maWdba107XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBVdGlscy5kZWVwQ29weSh2KTtcbiAgICAgICAgICAgICAgICBsZXQgc2hvd19jZmcgPSB7fVxuICAgICAgICAgICAgICAgIHNob3dfY2ZnLmlkID0ga1xuXHRcdFx0ICAgIHNob3dfY2ZnLmlzX2FjdGl2YXRlID0gZmFsc2VcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjZmcgPSBkYXRhW2pdXG4gICAgICAgICAgICAgICAgICAgIGNmZy5pc19hY3RpdmF0ZSA9IHRoaXMuY2hlY2tJc0FjdGl2YXRlQ2FtcChjZmcucG9zX2luZm8pXG4gICAgICAgICAgICAgICAgICAgIGlmKGNmZy5pc19hY3RpdmF0ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93X2NmZy5pc19hY3RpdmF0ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZighc2hvd19jZmcubmFtZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93X2NmZy5uYW1lID0gY2ZnLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZighc2hvd19jZmcuaWNvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93X2NmZy5pY29uID0gY2ZnLmljb25cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzaG93X2NmZy5hdHRyX2RhdGEgPSBkYXRhXG4gICAgICAgICAgICAgICAgY2FtcF9kYXRhLnB1c2goc2hvd19jZmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgU29ydEZ1bmMgPSBmdW5jdGlvbiggb2JqQSwgb2JqQil7XG4gICAgICAgICAgICAgICAgaWYgKG9iakEuaXNfYWN0aXZhdGUgJiYgIW9iakIuaXNfYWN0aXZhdGUpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoIW9iakEuaXNfYWN0aXZhdGUgJiYgb2JqQi5pc19hY3RpdmF0ZSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqQS5pZCAtIG9iakIuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FtcF9kYXRhLnNvcnQoU29ydEZ1bmMpO1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxjYW1wX2RhdGEubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgY2FtcF9kYXRhW2ldLmluZGV4ID0gaVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5jYW1wX3Njcm9sbHZpZXcuc2V0RGF0YShjYW1wX2RhdGEpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjaGVja0lzQWN0aXZhdGVDYW1wKHBvc19pbmZvKXtcbiAgICAgICAgbGV0IGlzX2FjdGl2YXRlID0gZmFsc2VcbiAgICAgICAgaWYocG9zX2luZm8gJiYgVXRpbHMubmV4dChwb3NfaW5mbykgIT0gbnVsbCl7XG4gICAgICAgICAgICBpc19hY3RpdmF0ZSA9IHRydWVcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8cG9zX2luZm8ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgbGV0IHYgPSBwb3NfaW5mb1tpXVxuICAgICAgICAgICAgICAgIGxldCBjYW1wX3R5cGUgPSB2WzBdXG4gICAgICAgICAgICAgICAgbGV0IGNhbXBfbnVtID0gdlsxXVxuICAgICAgICAgICAgICAgIGxldCBoYXZlX251bSA9IDBcbiAgICAgICAgICAgICAgICBmb3IobGV0IF90eXBlIGluIHRoaXMuZm9ybV9wb3NfaW5mbyl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW0gPSB0aGlzLmZvcm1fcG9zX2luZm9bX3R5cGVdXG4gICAgICAgICAgICAgICAgICAgIGlmKF90eXBlID09IGNhbXBfdHlwZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXZlX251bSA9IG51bVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihjYW1wX251bSA+IGhhdmVfbnVtKXtcbiAgICAgICAgICAgICAgICAgICAgaXNfYWN0aXZhdGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNfYWN0aXZhdGVcbiAgICB9LFxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0aGlzLmNhbXBfc2Nyb2xsdmlldyl7XG4gICAgICAgICAgICB0aGlzLmNhbXBfc2Nyb2xsdmlldy5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5jYW1wX3Njcm9sbHZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5vcGVuQmF0dGxlQ2FtcFZpZXcoZmFsc2UpXG4gICAgfSxcbn0pIl19