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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/task/view/task_item.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, 'ce126O5KCVEQYu6H1HFG5om', 'task_item');
// Scripts/mod/task/view/task_item.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
//      用户输入框
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var TaskConst = require("task_const");
 
var TaskEvent = require("task_event");
 
var TaskController = require("task_controller");
 
var TaskItem = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("task", "task_item");
    this.item_list = [];
  },
  initPanel: function initPanel() {
    this.btn_img_res = "common_1098";
    this.container = this.root_wnd.getChildByName("container");
    this.task_desc = this.container.getChildByName("task_desc").getComponent(cc.Label);
    this.btn_container = this.container.getChildByName("btn_container");
    this.goto_btn = this.btn_container.getChildByName("goto_btn");
    this.goto_btn_label = this.goto_btn.getChildByName("label").getComponent(cc.Label);
    this.goto_btn_label.string = Utils.TI18N("前往");
    this.goto_btn_img = this.goto_btn.getComponent(cc.Sprite);
    this.progress = this.btn_container.getChildByName("progress").getComponent(cc.ProgressBar);
    this.value = this.btn_container.getChildByName("value").getComponent(cc.Label);
    this.value.string = Utils.TI18N("0/0");
    this.progress.progress = 0;
    this.completed_img = this.container.getChildByName("completed_img");
  },
  registerEvent: function registerEvent() {
    if (this.goto_btn) {
      this.goto_btn.on(cc.Node.EventType.TOUCH_END, function () {
        if (this.data != null && this.data.config != null) {
          if (this.data.finish == TaskConst.task_status.un_finish) {
            if (this.data.progress != null) {
              for (var i in this.data.progress) {
                var v = this.data.progress[i];
 
                if (v.finish == 0) {
                  TaskController.getInstance().handleTaskProgress(this.data, i);
                  break;
                }
              }
            }
          } else if (this.data.finish == TaskConst.task_status.finish) {
            if (this.data.type == TaskConst.type.quest) {
              TaskController.getInstance().requestSubmitTask(this.data.id);
            } else if (this.data.type == TaskConst.type.feat) {
              TaskController.getInstance().requestSubmitFeat(this.data.id);
            }
          }
        }
      }, this);
    }
  },
  addCallBack: function addCallBack(value) {
    this.callback = value;
  },
  // 退出的时候移除一下吧.要不然可能有些人不会手动移除,就会报错
  registerScriptHandler: function registerScriptHandler(event) {
    if ("enter" == event) {} else if ("exit" == event) {
      if (this.data != null) {
        if (this.update_self_event != null) {
          this.data.unbind(this.update_self_event);
          this.update_self_event = null;
        }
 
        this.data = null;
      }
    }
  },
  //必要添加的数据传入方法
  setData: function setData(data) {
    this.data = data;
    if (this.root_wnd != null) this.onShow();
  },
  onShow: function onShow() {
    // if (this.data != null) {
    //     if (this.update_self_event != null) {
    //         this.data.unbind(this.update_self_event);
    //         this.update_self_event = null;
    //     }
    //     this.data = null;
    // }
    // this.data = data;
    if (this.update_self_event == null) {
      this.update_self_event = this.data.bind(TaskEvent.UpdateSingleQuest, function () {
        this.updateSelf();
      }.bind(this));
    }
 
    this.fillAwardsItems();
    this.updateSelf();
  },
  // @desc:创建展示物品
  // author:{author}
  // time:2018-05-26 13:56:08
  // return
  fillAwardsItems: function fillAwardsItems() {
    if (this.data == null || this.data.config == null || this.data.config.commit_rewards == null) return;
 
    for (var i in this.item_list) {
      var item = this.item_list[i];
      item.setVisible(false);
    }
 
    for (var i in this.data.config.commit_rewards) {
      var v = this.data.config.commit_rewards[i];
      var _bid = v[0];
      var _num = v[1];
      var item = this.item_list[i];
 
      if (item == null) {
        item = ItemsPool.getInstance().getItem("backpack_item");
        item.initConfig(false, 0.7, false, true);
 
        var _x = (BackPackItem.Width * 0.7 + 20) * i + 58;
 
        item.setPosition(_x, 54);
        item.show();
        item.setParent(this.container);
        this.item_list[i] = item;
      } else {
        item.setVisible(true);
      }
 
      item.setData({
        bid: _bid,
        num: _num
      });
    }
  },
  changeImg: function changeImg(res) {
    this.loadRes(res, function (sf_obj) {
      this.goto_btn_img.spriteFrame = sf_obj;
    }.bind(this));
  },
  updateSelf: function updateSelf() {
    if (this.data == null) return;
    this.id = this.data.id;
    this.finish_sort = this.data.finish_sort;
    this.completed_img.active = this.data.finish == TaskConst.task_status.completed;
    this.btn_container.active = this.data.finish != TaskConst.task_status.completed;
    var btn_img_res = "";
 
    if (this.data.finish == TaskConst.task_status.un_finish) {
      this.goto_btn_label.string = Utils.TI18N("前往");
      btn_img_res = "common_1098";
      this.goto_btn_label.node.color = new cc.Color(0x25, 0x55, 0x05, 0xff);
    } else if (this.data.finish == TaskConst.task_status.finish) {
      this.goto_btn_label.string = Utils.TI18N("提交");
      btn_img_res = "common_1027";
      this.goto_btn_label.node.color = new cc.Color(0x71, 0x28, 0x04);
    }
 
    if (this.btn_img_res != btn_img_res && btn_img_res != "") {
      this.btn_img_res = btn_img_res;
      this.changeImg(PathTool.getCommonIcomPath(btn_img_res));
    }
 
    if (this.data.finish != TaskConst.task_status.completed) {
      if (this.data.progress != null) {
        var progress = this.data.progress[0];
 
        if (progress != null) {
          this.value.string = cc.js.formatStr("%s/%s", Utils.getMoneyString(progress.value), Utils.getMoneyString(progress.target_val));
          this.progress.progress = progress.value / progress.target_val;
        }
      }
    }
 
    this.task_desc.string = this.data.getTaskContent();
  },
  suspendAllActions: function suspendAllActions() {
    if (this.data != null) {
      if (this.update_self_event != null) {
        this.data.unbind(this.update_self_event);
        this.update_self_event = null;
      }
 
      this.data = null;
    }
  },
  onDelete: function onDelete() {
    for (var i in this.item_list) {
      var v = this.item_list[i];
      if (v) v.deleteMe();
    }
 
    this.item_list = null;
    this.suspendAllActions();
  }
});
module.exports = TaskItem;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx0YXNrXFx2aWV3XFx0YXNrX2l0ZW0uanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiVGFza0NvbnN0IiwiVGFza0V2ZW50IiwiVGFza0NvbnRyb2xsZXIiLCJUYXNrSXRlbSIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpdGVtX2xpc3QiLCJpbml0UGFuZWwiLCJidG5faW1nX3JlcyIsImNvbnRhaW5lciIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJ0YXNrX2Rlc2MiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsImJ0bl9jb250YWluZXIiLCJnb3RvX2J0biIsImdvdG9fYnRuX2xhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsImdvdG9fYnRuX2ltZyIsIlNwcml0ZSIsInByb2dyZXNzIiwiUHJvZ3Jlc3NCYXIiLCJ2YWx1ZSIsImNvbXBsZXRlZF9pbWciLCJyZWdpc3RlckV2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwiZGF0YSIsImNvbmZpZyIsImZpbmlzaCIsInRhc2tfc3RhdHVzIiwidW5fZmluaXNoIiwiaSIsInYiLCJnZXRJbnN0YW5jZSIsImhhbmRsZVRhc2tQcm9ncmVzcyIsInR5cGUiLCJxdWVzdCIsInJlcXVlc3RTdWJtaXRUYXNrIiwiaWQiLCJmZWF0IiwicmVxdWVzdFN1Ym1pdEZlYXQiLCJhZGRDYWxsQmFjayIsImNhbGxiYWNrIiwicmVnaXN0ZXJTY3JpcHRIYW5kbGVyIiwiZXZlbnQiLCJ1cGRhdGVfc2VsZl9ldmVudCIsInVuYmluZCIsInNldERhdGEiLCJvblNob3ciLCJiaW5kIiwiVXBkYXRlU2luZ2xlUXVlc3QiLCJ1cGRhdGVTZWxmIiwiZmlsbEF3YXJkc0l0ZW1zIiwiY29tbWl0X3Jld2FyZHMiLCJpdGVtIiwic2V0VmlzaWJsZSIsIl9iaWQiLCJfbnVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsImluaXRDb25maWciLCJfeCIsIkJhY2tQYWNrSXRlbSIsIldpZHRoIiwic2V0UG9zaXRpb24iLCJzaG93Iiwic2V0UGFyZW50IiwiYmlkIiwibnVtIiwiY2hhbmdlSW1nIiwicmVzIiwibG9hZFJlcyIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiZmluaXNoX3NvcnQiLCJhY3RpdmUiLCJjb21wbGV0ZWQiLCJub2RlIiwiY29sb3IiLCJDb2xvciIsImdldENvbW1vbkljb21QYXRoIiwianMiLCJmb3JtYXRTdHIiLCJnZXRNb25leVN0cmluZyIsInRhcmdldF92YWwiLCJnZXRUYXNrQ29udGVudCIsInN1c3BlbmRBbGxBY3Rpb25zIiwib25EZWxldGUiLCJkZWxldGVNZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxTQUFTLEdBQUdELE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBLElBQUlFLFNBQVMsR0FBR0YsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsSUFBSUcsY0FBYyxHQUFHSCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBR0EsSUFBSUksUUFBUSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUNwQixhQUFTQyxTQURXO0FBRXBCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCVixRQUFRLENBQUNXLGFBQVQsQ0FBdUIsTUFBdkIsRUFBK0IsV0FBL0IsQ0FBbEI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0gsR0FMbUI7QUFRcEJDLEVBQUFBLFNBQVMsRUFBRSxxQkFBWTtBQUNuQixTQUFLQyxXQUFMLEdBQW1CLGFBQW5CO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixLQUFLQyxRQUFMLENBQWNDLGNBQWQsQ0FB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QUcsS0FBS2hDLFNBQUwsQ0FBZStCLENBQWYsQ0FBUjtBQUNBLFVBQUlDLENBQUosRUFDSUEsQ0FBQyxDQUFDd0QsUUFBRjtBQUNQOztBQUNELFNBQUt4RixTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS3NGLGlCQUFMO0FBQ0g7QUFsTW1CLENBQVQsQ0FBZjtBQXNNQUcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCakcsUUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIEBhdXRob3I6IHNoaXJhaG9Ac3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOeUqOaIt+i+k+WFpeahhlxyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBUYXNrQ29uc3QgPSByZXF1aXJlKFwidGFza19jb25zdFwiKTtcclxudmFyIFRhc2tFdmVudCA9IHJlcXVpcmUoXCJ0YXNrX2V2ZW50XCIpO1xyXG52YXIgVGFza0NvbnRyb2xsZXIgPSByZXF1aXJlKFwidGFza19jb250cm9sbGVyXCIpO1xyXG5cclxuXHJcbnZhciBUYXNrSXRlbSA9IGNjLkNsYXNzKHtcclxuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcclxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwidGFza1wiLCBcInRhc2tfaXRlbVwiKTtcclxuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IFtdO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5idG5faW1nX3JlcyA9IFwiY29tbW9uXzEwOThcIjtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJjb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy50YXNrX2Rlc2MgPSB0aGlzLmNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRhc2tfZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG5cclxuICAgICAgICB0aGlzLmJ0bl9jb250YWluZXIgPSB0aGlzLmNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9jb250YWluZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMuZ290b19idG4gPSB0aGlzLmJ0bl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJnb3RvX2J0blwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5nb3RvX2J0bl9sYWJlbCA9IHRoaXMuZ290b19idG4uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZ290b19idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliY3lvoBcIik7XHJcbiAgICAgICAgdGhpcy5nb3RvX2J0bl9pbWcgPSB0aGlzLmdvdG9fYnRuLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG5cclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gdGhpcy5idG5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicHJvZ3Jlc3NcIikuZ2V0Q29tcG9uZW50KGNjLlByb2dyZXNzQmFyKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5idG5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidmFsdWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLnZhbHVlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwiMC8wXCIpO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MucHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmNvbXBsZXRlZF9pbWcgPSB0aGlzLmNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNvbXBsZXRlZF9pbWdcIik7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ290b19idG4pIHtcclxuICAgICAgICAgICAgdGhpcy5nb3RvX2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCAmJiB0aGlzLmRhdGEuY29uZmlnICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpbmlzaCA9PSBUYXNrQ29uc3QudGFza19zdGF0dXMudW5fZmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEucHJvZ3Jlc3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmRhdGEucHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuZGF0YS5wcm9ncmVzc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodi5maW5pc2ggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmhhbmRsZVRhc2tQcm9ncmVzcyh0aGlzLmRhdGEsIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmZpbmlzaCA9PSBUYXNrQ29uc3QudGFza19zdGF0dXMuZmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEudHlwZSA9PSBUYXNrQ29uc3QudHlwZS5xdWVzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFza0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5yZXF1ZXN0U3VibWl0VGFzayh0aGlzLmRhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS50eXBlID09IFRhc2tDb25zdC50eXBlLmZlYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVxdWVzdFN1Ym1pdEZlYXQodGhpcy5kYXRhLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRDYWxsQmFjazogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IHZhbHVlXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIOmAgOWHuueahOaXtuWAmeenu+mZpOS4gOS4i+WQpy7opoHkuI3nhLblj6/og73mnInkupvkurrkuI3kvJrmiYvliqjnp7vpmaQs5bCx5Lya5oql6ZSZXHJcbiAgICByZWdpc3RlclNjcmlwdEhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGlmIChcImVudGVyXCIgPT0gZXZlbnQpIHtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmIChcImV4aXRcIiA9PSBldmVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwZGF0ZV9zZWxmX2V2ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEudW5iaW5kKHRoaXMudXBkYXRlX3NlbGZfZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/lv4XopoHmt7vliqDnmoTmlbDmja7kvKDlhaXmlrnms5VcclxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5vblNob3coKVxyXG4gICAgfSxcclxuXHJcbiAgICBvblNob3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAvLyAgICAgaWYgKHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5kYXRhLnVuYmluZCh0aGlzLnVwZGF0ZV9zZWxmX2V2ZW50KTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV9zZWxmX2V2ZW50ID0gdGhpcy5kYXRhLmJpbmQoVGFza0V2ZW50LlVwZGF0ZVNpbmdsZVF1ZXN0LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGYoKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGxBd2FyZHNJdGVtcygpXHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZigpXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEBkZXNjOuWIm+W7uuWxleekuueJqeWTgVxyXG4gICAgLy8gYXV0aG9yOnthdXRob3J9XHJcbiAgICAvLyB0aW1lOjIwMTgtMDUtMjYgMTM6NTY6MDhcclxuICAgIC8vIHJldHVyblxyXG4gICAgZmlsbEF3YXJkc0l0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsIHx8IHRoaXMuZGF0YS5jb25maWcgPT0gbnVsbCB8fCB0aGlzLmRhdGEuY29uZmlnLmNvbW1pdF9yZXdhcmRzID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5pdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1fbGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbS5zZXRWaXNpYmxlKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZGF0YS5jb25maWcuY29tbWl0X3Jld2FyZHMpIHtcclxuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLmRhdGEuY29uZmlnLmNvbW1pdF9yZXdhcmRzW2ldO1xyXG4gICAgICAgICAgICB2YXIgX2JpZCA9IHZbMF07XHJcbiAgICAgICAgICAgIHZhciBfbnVtID0gdlsxXTtcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1fbGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pbml0Q29uZmlnKGZhbHNlLCAwLjcsIGZhbHNlLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgdmFyIF94ID0gKEJhY2tQYWNrSXRlbS5XaWR0aCAqIDAuNyArIDIwKSAqIGkgKyA1ODtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oX3gsIDU0KTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQodGhpcy5jb250YWluZXIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldFZpc2libGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbS5zZXREYXRhKHsgYmlkOiBfYmlkLCBudW06IF9udW0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjaGFuZ2VJbWc6ZnVuY3Rpb24ocmVzKXtcclxuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbihzZl9vYmope1xyXG4gICAgICAgICAgICB0aGlzLmdvdG9fYnRuX2ltZy5zcHJpdGVGcmFtZSA9IHNmX29iajtcclxuICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVNlbGY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmRhdGEuaWQ7XHJcbiAgICAgICAgdGhpcy5maW5pc2hfc29ydCA9IHRoaXMuZGF0YS5maW5pc2hfc29ydDtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlZF9pbWcuYWN0aXZlID0gdGhpcy5kYXRhLmZpbmlzaCA9PSBUYXNrQ29uc3QudGFza19zdGF0dXMuY29tcGxldGVkO1xyXG4gICAgICAgIHRoaXMuYnRuX2NvbnRhaW5lci5hY3RpdmUgPSB0aGlzLmRhdGEuZmluaXNoICE9IFRhc2tDb25zdC50YXNrX3N0YXR1cy5jb21wbGV0ZWQ7XHJcblxyXG4gICAgICAgIHZhciBidG5faW1nX3JlcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5maW5pc2ggPT0gVGFza0NvbnN0LnRhc2tfc3RhdHVzLnVuX2ZpbmlzaCkgeyBcclxuICAgICAgICAgICAgdGhpcy5nb3RvX2J0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWJjeW+gFwiKTtcclxuICAgICAgICAgICAgYnRuX2ltZ19yZXMgPSBcImNvbW1vbl8xMDk4XCI7XHJcbiAgICAgICAgICAgIHRoaXMuZ290b19idG5fbGFiZWwubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDI1LCAweDU1LCAweDA1LCAweGZmKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuZmluaXNoID09IFRhc2tDb25zdC50YXNrX3N0YXR1cy5maW5pc2gpIHtcclxuICAgICAgICAgICAgdGhpcy5nb3RvX2J0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaPkOS6pFwiKTtcclxuICAgICAgICAgICAgYnRuX2ltZ19yZXMgPSBcImNvbW1vbl8xMDI3XCI7XHJcbiAgICAgICAgICAgIHRoaXMuZ290b19idG5fbGFiZWwubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDcxLCAweDI4LCAweDA0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJ0bl9pbWdfcmVzICE9IGJ0bl9pbWdfcmVzICYmIGJ0bl9pbWdfcmVzIT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmJ0bl9pbWdfcmVzID0gYnRuX2ltZ19yZXM7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1nKFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKGJ0bl9pbWdfcmVzKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuZmluaXNoICE9IFRhc2tDb25zdC50YXNrX3N0YXR1cy5jb21wbGV0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5wcm9ncmVzcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSB0aGlzLmRhdGEucHJvZ3Jlc3NbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFwiJXMvJXNcIiwgVXRpbHMuZ2V0TW9uZXlTdHJpbmcocHJvZ3Jlc3MudmFsdWUpLCBVdGlscy5nZXRNb25leVN0cmluZyhwcm9ncmVzcy50YXJnZXRfdmFsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzcy5wcm9ncmVzcyA9IHByb2dyZXNzLnZhbHVlIC8gcHJvZ3Jlc3MudGFyZ2V0X3ZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhc2tfZGVzYy5zdHJpbmcgPSB0aGlzLmRhdGEuZ2V0VGFza0NvbnRlbnQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VzcGVuZEFsbEFjdGlvbnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnVuYmluZCh0aGlzLnVwZGF0ZV9zZWxmX2V2ZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5pdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgdmFyIHYgPSB0aGlzLml0ZW1fbGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKHYpXHJcbiAgICAgICAgICAgICAgICB2LmRlbGV0ZU1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN1c3BlbmRBbGxBY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGFza0l0ZW07Il19