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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/seerpalace/view/seerpalace_summon_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, '914bc0au5JForoMCyNYI0tk', 'seerpalace_summon_panel');
// Scripts/mod/seerpalace/view/seerpalace_summon_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的 (先知圣殿)
// <br/>Create: 2019-03-22 15:05:34
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var SeerpalaceSummonItem = require("seerpalace_summon_Item");
 
var SeerpalaceController = require("seerpalace_controller");
 
var BackpackController = require("backpack_controller");
 
var SeerpalaceConst = require("seerpalace_const");
 
var Seerpalace_summonPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("seerpalace", "seerpalace_summon_panel");
    this.is_playing = false; // 是否正在播放召唤特效
 
    this.summon_list = {};
    this.summon_pos = {};
    this.ctrl = SeerpalaceController.getInstance();
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {},
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    var _this = this;
 
    var self = this;
    this.npc_sk = this.seekChild("npcAni", sp.Skeleton); //npc动画
 
    this.ball_effect_sk = this.seekChild("pos_ball").getChildByName("action").getComponent(sp.Skeleton); //水晶球动画
    //-- NPC
 
    this.handleNPCEffect(true); //-- 水晶球(常驻)
 
    this.handleBallEffect(true);
 
    var _loop = function _loop(i) {
      var pos_node = _this.seekChild("main_container").getChildByName("image_stage").getChildByName("pos_node_" + i);
 
      if (pos_node) {
        Utils.delayRun(pos_node, i * 3 / 60, function () {
          var summon_icon = self.summon_list[i];
 
          if (!summon_icon) {
            summon_icon = new SeerpalaceSummonItem({
              parent: self,
              index: i
            });
            summon_icon.setParent(pos_node);
            summon_icon.show();
            self.summon_list[i] = summon_icon;
          }
        });
        self.summon_pos[i] = pos_node;
      }
    };
 
    for (var i = 1; i < 5; ++i) {
      _loop(i);
    }
 
    self.btn_summon_nd = this.seekChild("btn_summon");
    self.btn_summon_lb = this.seekChild("btn_summon_label", cc.Label);
    self.btn_summon_sp = this.seekChild("icon", cc.Sprite);
    var path = PathTool.getIconPath("item", SeerpalaceConst.Good_ZhiHui);
    this.loadRes(path, function (SpriteFrame) {
      this.btn_summon_sp.spriteFrame = SpriteFrame;
    }.bind(this));
    this.btn_summon_sp.node.active = false;
    var desk_sp = this.seekChild("desk", cc.Sprite);
    this.loadRes(PathTool.getBigBg("bigbg_77"), function (res) {
      desk_sp.spriteFrame = res;
    });
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.btn_summon_nd.on("touchend", this._onClickSummonBtn, this);
    this.ball_effect_sk.setCompleteListener(function () {
      if (this.is_playing == false) return;
 
      this._onSummonAniCallBack();
 
      this.handleBallEffect();
    }.bind(this));
    this.npc_sk.setCompleteListener(function () {
      if (this.npc_ani_status == 1) return;
 
      this._onNPCAniCallBack();
    }.bind(this));
  },
  addToParent: function addToParent(status) {
    status = status || false;
 
    if (status) {
      this.show();
    } else {
      this.hide();
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    this.ball_effect_sk.skeletonData = null;
    this.npc_sk.skeletonData = null;
  },
  handleNPCEffect: function handleNPCEffect(status) {
    var self = this;
    self.npc_ani_status = 1; // 标识当前npc的动作类型
 
    var sketon_path = PathTool.getSpinePath("E24110", "action");
    this.loadRes(sketon_path, function (skeleton_data) {
      this.npc_sk.skeletonData = skeleton_data;
      this.npc_sk.setAnimation(0, "action1", true);
    }.bind(this));
  },
  handleBallEffect: function handleBallEffect() {
    var self = this;
    var sketon_path = PathTool.getSpinePath("E24111", "action");
    this.loadRes(sketon_path, function (skeleton_data) {
      this.ball_effect_sk.skeletonData = skeleton_data;
      this.ball_effect_sk.setAnimation(0, "action", true);
    }.bind(this));
  },
  // -- 水晶球召唤特效
  handleSummonEffect: function handleSummonEffect() {
    var self = this;
 
    if (this.ball_effect_sk) {
      var sketon_path = PathTool.getSpinePath("E24112", "action");
      this.loadRes(sketon_path, function (skeleton_data) {
        this.ball_effect_sk.skeletonData = skeleton_data;
        this.ball_effect_sk.setAnimation(0, "action", false);
      }.bind(this));
    }
  },
  // -- 水晶球召唤特效完毕再请求召唤协议
  _onSummonAniCallBack: function _onSummonAniCallBack() {
    var group_id = this.select_card.getSummonGroupId();
    this.ctrl.requestSeerpalaceSummon(group_id);
    this.is_playing = false;
  },
  // -- npc的召唤特效播放完再请求召唤协议
  _onNPCAniCallBack: function _onNPCAniCallBack() {
    var self = this;
 
    if (self.npc_sk && self.npc_ani_status == 2) {
      this.npc_sk.setAnimation(0, "action1", true);
      self.npc_ani_status = 1;
    }
  },
  //-- 点击了卡牌
  _onClickSummonCard: function _onClickSummonCard(card) {
    var self = this;
    if (self.is_playing) return; // -- 播放召唤特效中不让切换选择卡牌
 
    if (self.select_card) {
      self.select_card.setSelectStatus(false);
    }
 
    if (card) {
      self.select_card = card;
      self.select_card.setSelectStatus(true);
    }
 
    self.updateSummonBtnLabel();
    this.btn_summon_sp.node.active = true;
  },
  updateSummonBtnLabel: function updateSummonBtnLabel() {
    var self = this;
 
    if (self.select_card) {
      var summon_cost = self.select_card.getSummonCostItem();
 
      if (summon_cost) {
        var bid = summon_cost[0][0];
        var num = summon_cost[0][1];
        var item_config = Utils.getItemConfig(bid);
 
        if (item_config) {
          this.loadRes(PathTool.getItemRes(bid), function (SpriteFrame) {
            this.btn_summon_lb.spriteFrame = SpriteFrame;
          }.bind(this));
          self.btn_summon_lb.string = num + " 召唤";
        }
      }
    } else {// self.btn_summon_label.setString(TI18N("<div outline=2,#4a2606>召唤</div>"))
    }
  },
  _onClickSummonBtn: function _onClickSummonBtn() {
    Utils.playButtonSound(1);
    var self = this;
    if (self.is_playing) return;
 
    if (self.select_card) {
      var summon_cost = self.select_card.getSummonCostItem();
 
      if (summon_cost) {
        var bid = summon_cost[0][0];
        var num = summon_cost[0][1];
        var have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid); // -- 背包物品足够则先播放召唤特效再请求召唤协议,不足则直接请求协议(弹出物品来源和提示)
 
        if (have_num >= num && self.npc_sk) {
          self.npc_ani_status = 2;
          self.is_playing = true;
          this.npc_sk.setAnimation(0, "action2", false);
          self.handleSummonEffect();
        } else {
          var group_id = self.select_card.getSummonGroupId();
          this.ctrl.requestSeerpalaceSummon(group_id);
        }
      }
    } else {
      message("请先选择一种卡牌");
    }
  }
});
module.exports = Seerpalace_summonPanel;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxzZWVycGFsYWNlXFx2aWV3XFxzZWVycGFsYWNlX3N1bW1vbl9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJTZWVycGFsYWNlU3VtbW9uSXRlbSIsIlNlZXJwYWxhY2VDb250cm9sbGVyIiwiQmFja3BhY2tDb250cm9sbGVyIiwiU2VlcnBhbGFjZUNvbnN0IiwiU2VlcnBhbGFjZV9zdW1tb25QYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpc19wbGF5aW5nIiwic3VtbW9uX2xpc3QiLCJzdW1tb25fcG9zIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImluaXRQYW5lbCIsInNlbGYiLCJucGNfc2siLCJzZWVrQ2hpbGQiLCJzcCIsIlNrZWxldG9uIiwiYmFsbF9lZmZlY3Rfc2siLCJnZXRDaGlsZEJ5TmFtZSIsImdldENvbXBvbmVudCIsImhhbmRsZU5QQ0VmZmVjdCIsImhhbmRsZUJhbGxFZmZlY3QiLCJpIiwicG9zX25vZGUiLCJVdGlscyIsImRlbGF5UnVuIiwic3VtbW9uX2ljb24iLCJwYXJlbnQiLCJpbmRleCIsInNldFBhcmVudCIsInNob3ciLCJidG5fc3VtbW9uX25kIiwiYnRuX3N1bW1vbl9sYiIsIkxhYmVsIiwiYnRuX3N1bW1vbl9zcCIsIlNwcml0ZSIsInBhdGgiLCJnZXRJY29uUGF0aCIsIkdvb2RfWmhpSHVpIiwibG9hZFJlcyIsIlNwcml0ZUZyYW1lIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwibm9kZSIsImFjdGl2ZSIsImRlc2tfc3AiLCJnZXRCaWdCZyIsInJlcyIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIl9vbkNsaWNrU3VtbW9uQnRuIiwic2V0Q29tcGxldGVMaXN0ZW5lciIsIl9vblN1bW1vbkFuaUNhbGxCYWNrIiwibnBjX2FuaV9zdGF0dXMiLCJfb25OUENBbmlDYWxsQmFjayIsImFkZFRvUGFyZW50Iiwic3RhdHVzIiwiaGlkZSIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsIm9uRGVsZXRlIiwic2tlbGV0b25EYXRhIiwic2tldG9uX3BhdGgiLCJnZXRTcGluZVBhdGgiLCJza2VsZXRvbl9kYXRhIiwic2V0QW5pbWF0aW9uIiwiaGFuZGxlU3VtbW9uRWZmZWN0IiwiZ3JvdXBfaWQiLCJzZWxlY3RfY2FyZCIsImdldFN1bW1vbkdyb3VwSWQiLCJyZXF1ZXN0U2VlcnBhbGFjZVN1bW1vbiIsIl9vbkNsaWNrU3VtbW9uQ2FyZCIsImNhcmQiLCJzZXRTZWxlY3RTdGF0dXMiLCJ1cGRhdGVTdW1tb25CdG5MYWJlbCIsInN1bW1vbl9jb3N0IiwiZ2V0U3VtbW9uQ29zdEl0ZW0iLCJiaWQiLCJudW0iLCJpdGVtX2NvbmZpZyIsImdldEl0ZW1Db25maWciLCJnZXRJdGVtUmVzIiwic3RyaW5nIiwicGxheUJ1dHRvblNvdW5kIiwiaGF2ZV9udW0iLCJnZXRNb2RlbCIsImdldEl0ZW1OdW1CeUJpZCIsIm1lc3NhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsb0JBQW9CLEdBQUdELE9BQU8sQ0FBQyx3QkFBRCxDQUFsQzs7QUFDQSxJQUFJRSxvQkFBb0IsR0FBR0YsT0FBTyxDQUFDLHVCQUFELENBQWxDOztBQUNBLElBQUlHLGtCQUFrQixHQUFHSCxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUksZUFBZSxHQUFHSixPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBQ0EsSUFBSUssc0JBQXNCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ2xDLGFBQVNDLFNBRHlCO0FBRWxDQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCWCxRQUFRLENBQUNZLGFBQVQsQ0FBdUIsWUFBdkIsRUFBcUMseUJBQXJDLENBQWxCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFsQixDQUZjLENBRVU7O0FBQ3hCLFNBQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZYixvQkFBb0IsQ0FBQ2MsV0FBckIsRUFBWjtBQUNILEdBUmlDO0FBVWxDO0FBQ0FDLEVBQUFBLFVBQVUsRUFBQyxzQkFBVSxDQUVwQixDQWJpQztBQWVsQztBQUNBQyxFQUFBQSxTQUFTLEVBQUMscUJBQVU7QUFBQTs7QUFDaEIsUUFBSUMsSUFBSSxHQUFHLElBQVg7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0MsU0FBTCxDQUFlLFFBQWYsRUFBd0JDLEVBQUUsQ0FBQ0MsUUFBM0IsQ0FBZCxDQUZnQixDQUVtQzs7QUFDbkQsU0FBS0MsY0FBTCxHQUFzQixLQUFLSCxTQUFMLENBQWUsVUFBZixFQUEyQkksY0FBM0IsQ0FBMEMsUUFBMUMsRUFBb0RDLFlBQXBELENBQWlFSixFQUFFLENBQUNDLFFBQXBFLENBQXRCLENBSGdCLENBR29GO0FBQ3BHOztBQUNBLFNBQUtJLGVBQUwsQ0FBcUIsSUFBckIsRUFMZ0IsQ0FNaEI7O0FBQ0EsU0FBS0MsZ0JBQUwsQ0FBc0IsSUFBdEI7O0FBUGdCLCtCQVFSQyxDQVJRO0FBU1osVUFBSUMsUUFBUSxHQUFHLEtBQUksQ0FBQ1QsU0FBTCxDQUFlLGdCQUFmLEVBQWlDSSxjQUFqQyxDQUFnRCxhQUFoRCxFQUErREEsY0FBL0QsQ0FBOEUsY0FBY0ksQ0FBNUYsQ0FBZjs7QUFDQSxVQUFJQyxRQUFKLEVBQWE7QUFDVEMsUUFBQUEsS0FBSyxDQUFDQyxRQUFOLENBQWVGLFFBQWYsRUFBeUJELENBQUMsR0FBQyxDQUFGLEdBQUksRUFBN0IsRUFBaUMsWUFBWTtBQUN6QyxjQUFJSSxXQUFXLEdBQUdkLElBQUksQ0FBQ04sV0FBTCxDQUFpQmdCLENBQWpCLENBQWxCOztBQUNJLGNBQUksQ0FBQ0ksV0FBTCxFQUFpQjtBQUNiQSxZQUFBQSxXQUFXLEdBQUcsSUFBSWhDLG9CQUFKLENBQXlCO0FBQ25DaUMsY0FBQUEsTUFBTSxFQUFDZixJQUQ0QjtBQUVuQ2dCLGNBQUFBLEtBQUssRUFBQ047QUFGNkIsYUFBekIsQ0FBZDtBQUlBSSxZQUFBQSxXQUFXLENBQUNHLFNBQVosQ0FBc0JOLFFBQXRCO0FBQ0FHLFlBQUFBLFdBQVcsQ0FBQ0ksSUFBWjtBQUNBbEIsWUFBQUEsSUFBSSxDQUFDTixXQUFMLENBQWlCZ0IsQ0FBakIsSUFBc0JJLFdBQXRCO0FBQ0g7QUFDSixTQVhMO0FBWUlkLFFBQUFBLElBQUksQ0FBQ0wsVUFBTCxDQUFnQmUsQ0FBaEIsSUFBcUJDLFFBQXJCO0FBQ1A7QUF4Qlc7O0FBUWhCLFNBQUksSUFBSUQsQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxHQUFDLENBQWQsRUFBZ0IsRUFBRUEsQ0FBbEIsRUFBb0I7QUFBQSxZQUFaQSxDQUFZO0FBaUJuQjs7QUFDRFYsSUFBQUEsSUFBSSxDQUFDbUIsYUFBTCxHQUFxQixLQUFLakIsU0FBTCxDQUFlLFlBQWYsQ0FBckI7QUFDQUYsSUFBQUEsSUFBSSxDQUFDb0IsYUFBTCxHQUFxQixLQUFLbEIsU0FBTCxDQUFlLGtCQUFmLEVBQWtDZixFQUFFLENBQUNrQyxLQUFyQyxDQUFyQjtBQUNBckIsSUFBQUEsSUFBSSxDQUFDc0IsYUFBTCxHQUFxQixLQUFLcEIsU0FBTCxDQUFlLE1BQWYsRUFBc0JmLEVBQUUsQ0FBQ29DLE1BQXpCLENBQXJCO0FBQ0EsUUFBSUMsSUFBSSxHQUFHNUMsUUFBUSxDQUFDNkMsV0FBVCxDQUFxQixNQUFyQixFQUE0QnhDLGVBQWUsQ0FBQ3lDLFdBQTVDLENBQVg7QUFDQSxTQUFLQyxPQUFMLENBQWFILElBQWIsRUFBa0IsVUFBU0ksV0FBVCxFQUFxQjtBQUNuQyxXQUFLTixhQUFMLENBQW1CTyxXQUFuQixHQUFrQ0QsV0FBbEM7QUFDSCxLQUZpQixDQUVoQkUsSUFGZ0IsQ0FFWCxJQUZXLENBQWxCO0FBR0EsU0FBS1IsYUFBTCxDQUFtQlMsSUFBbkIsQ0FBd0JDLE1BQXhCLEdBQWlDLEtBQWpDO0FBQ0EsUUFBSUMsT0FBTyxHQUFHLEtBQUsvQixTQUFMLENBQWUsTUFBZixFQUFzQmYsRUFBRSxDQUFDb0MsTUFBekIsQ0FBZDtBQUNBLFNBQUtJLE9BQUwsQ0FBYS9DLFFBQVEsQ0FBQ3NELFFBQVQsQ0FBa0IsVUFBbEIsQ0FBYixFQUEyQyxVQUFTQyxHQUFULEVBQWE7QUFDcERGLE1BQUFBLE9BQU8sQ0FBQ0osV0FBUixHQUFzQk0sR0FBdEI7QUFDSCxLQUZEO0FBR0gsR0F0RGlDO0FBd0RsQztBQUNBQyxFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFDcEIsU0FBS2pCLGFBQUwsQ0FBbUJrQixFQUFuQixDQUFzQixVQUF0QixFQUFpQyxLQUFLQyxpQkFBdEMsRUFBd0QsSUFBeEQ7QUFDQSxTQUFLakMsY0FBTCxDQUFvQmtDLG1CQUFwQixDQUF5QyxZQUFVO0FBQy9DLFVBQUcsS0FBSzlDLFVBQUwsSUFBbUIsS0FBdEIsRUFBNkI7O0FBQzdCLFdBQUsrQyxvQkFBTDs7QUFDQSxXQUFLL0IsZ0JBQUw7QUFDSCxLQUp3QyxDQUl2Q3FCLElBSnVDLENBSWxDLElBSmtDLENBQXpDO0FBS0EsU0FBSzdCLE1BQUwsQ0FBWXNDLG1CQUFaLENBQWlDLFlBQVU7QUFDdkMsVUFBRyxLQUFLRSxjQUFMLElBQXVCLENBQTFCLEVBQTZCOztBQUM3QixXQUFLQyxpQkFBTDtBQUNILEtBSGdDLENBRy9CWixJQUgrQixDQUcxQixJQUgwQixDQUFqQztBQUlILEdBcEVpQztBQXNFbENhLEVBQUFBLFdBdEVrQyx1QkFzRXJCQyxNQXRFcUIsRUFzRWI7QUFDakJBLElBQUFBLE1BQU0sR0FBR0EsTUFBTSxJQUFJLEtBQW5COztBQUNBLFFBQUdBLE1BQUgsRUFBVTtBQUNOLFdBQUsxQixJQUFMO0FBQ0gsS0FGRCxNQUVLO0FBQ0QsV0FBSzJCLElBQUw7QUFDSDtBQUNKLEdBN0VpQztBQThFbEM7QUFDQUMsRUFBQUEsTUFBTSxFQUFDLGdCQUFTQyxNQUFULEVBQWdCLENBRXRCLENBakZpQztBQW1GbEM7QUFDQUMsRUFBQUEsTUFBTSxFQUFDLGtCQUFVLENBRWhCLENBdEZpQztBQXdGbEM7QUFDQUMsRUFBQUEsUUFBUSxFQUFDLG9CQUFVO0FBQ2YsU0FBSzVDLGNBQUwsQ0FBb0I2QyxZQUFwQixHQUFtQyxJQUFuQztBQUNBLFNBQUtqRCxNQUFMLENBQVlpRCxZQUFaLEdBQTJCLElBQTNCO0FBQ0gsR0E1RmlDO0FBNkZsQzFDLEVBQUFBLGVBN0ZrQywyQkE2RmxCb0MsTUE3RmtCLEVBNkZYO0FBQ25CLFFBQUk1QyxJQUFJLEdBQUcsSUFBWDtBQUNBQSxJQUFBQSxJQUFJLENBQUN5QyxjQUFMLEdBQXNCLENBQXRCLENBRm1CLENBRUs7O0FBQ3hCLFFBQUlVLFdBQVcsR0FBR3ZFLFFBQVEsQ0FBQ3dFLFlBQVQsQ0FBc0IsUUFBdEIsRUFBZ0MsUUFBaEMsQ0FBbEI7QUFDQSxTQUFLekIsT0FBTCxDQUFhd0IsV0FBYixFQUEwQixVQUFTRSxhQUFULEVBQXVCO0FBQzdDLFdBQUtwRCxNQUFMLENBQVlpRCxZQUFaLEdBQTJCRyxhQUEzQjtBQUNBLFdBQUtwRCxNQUFMLENBQVlxRCxZQUFaLENBQXlCLENBQXpCLEVBQTRCLFNBQTVCLEVBQXVDLElBQXZDO0FBQ0gsS0FIeUIsQ0FHeEJ4QixJQUh3QixDQUduQixJQUhtQixDQUExQjtBQUtILEdBdEdpQztBQXVHbENyQixFQUFBQSxnQkF2R2tDLDhCQXVHaEI7QUFDZCxRQUFJVCxJQUFJLEdBQUcsSUFBWDtBQUNBLFFBQUltRCxXQUFXLEdBQUd2RSxRQUFRLENBQUN3RSxZQUFULENBQXNCLFFBQXRCLEVBQWdDLFFBQWhDLENBQWxCO0FBQ0EsU0FBS3pCLE9BQUwsQ0FBYXdCLFdBQWIsRUFBMEIsVUFBU0UsYUFBVCxFQUF1QjtBQUM3QyxXQUFLaEQsY0FBTCxDQUFvQjZDLFlBQXBCLEdBQW1DRyxhQUFuQztBQUNBLFdBQUtoRCxjQUFMLENBQW9CaUQsWUFBcEIsQ0FBaUMsQ0FBakMsRUFBb0MsUUFBcEMsRUFBOEMsSUFBOUM7QUFDSCxLQUh5QixDQUd4QnhCLElBSHdCLENBR25CLElBSG1CLENBQTFCO0FBSUgsR0E5R2lDO0FBK0dsQztBQUNBeUIsRUFBQUEsa0JBaEhrQyxnQ0FnSFo7QUFDbEIsUUFBSXZELElBQUksR0FBRyxJQUFYOztBQUNBLFFBQUcsS0FBS0ssY0FBUixFQUF1QjtBQUNuQixVQUFJOEMsV0FBVyxHQUFHdkUsUUFBUSxDQUFDd0UsWUFBVCxDQUFzQixRQUF0QixFQUFnQyxRQUFoQyxDQUFsQjtBQUNBLFdBQUt6QixPQUFMLENBQWF3QixXQUFiLEVBQTBCLFVBQVNFLGFBQVQsRUFBdUI7QUFDN0MsYUFBS2hELGNBQUwsQ0FBb0I2QyxZQUFwQixHQUFtQ0csYUFBbkM7QUFDQSxhQUFLaEQsY0FBTCxDQUFvQmlELFlBQXBCLENBQWlDLENBQWpDLEVBQW9DLFFBQXBDLEVBQThDLEtBQTlDO0FBQ0gsT0FIeUIsQ0FHeEJ4QixJQUh3QixDQUduQixJQUhtQixDQUExQjtBQUlIO0FBQ0osR0F6SGlDO0FBMEhsQztBQUNBVSxFQUFBQSxvQkEzSGtDLGtDQTJIVjtBQUNwQixRQUFJZ0IsUUFBUSxHQUFHLEtBQUtDLFdBQUwsQ0FBaUJDLGdCQUFqQixFQUFmO0FBQ0EsU0FBSzlELElBQUwsQ0FBVStELHVCQUFWLENBQWtDSCxRQUFsQztBQUNBLFNBQUsvRCxVQUFMLEdBQWtCLEtBQWxCO0FBQ0gsR0EvSGlDO0FBZ0lsQztBQUNBaUQsRUFBQUEsaUJBaklrQywrQkFpSWI7QUFDakIsUUFBSTFDLElBQUksR0FBRyxJQUFYOztBQUNBLFFBQUlBLElBQUksQ0FBQ0MsTUFBTCxJQUFlRCxJQUFJLENBQUN5QyxjQUFMLElBQXVCLENBQTFDLEVBQTZDO0FBQ3pDLFdBQUt4QyxNQUFMLENBQVlxRCxZQUFaLENBQXlCLENBQXpCLEVBQTRCLFNBQTVCLEVBQXVDLElBQXZDO0FBQ0F0RCxNQUFBQSxJQUFJLENBQUN5QyxjQUFMLEdBQXNCLENBQXRCO0FBQ0g7QUFDSixHQXZJaUM7QUF3SWxDO0FBQ0FtQixFQUFBQSxrQkF6SWtDLDhCQXlJZEMsSUF6SWMsRUF5SVI7QUFDdEIsUUFBSTdELElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSUEsSUFBSSxDQUFDUCxVQUFULEVBQXNCLE9BRkEsQ0FFTzs7QUFDN0IsUUFBSU8sSUFBSSxDQUFDeUQsV0FBVCxFQUFxQjtBQUNqQnpELE1BQUFBLElBQUksQ0FBQ3lELFdBQUwsQ0FBaUJLLGVBQWpCLENBQWlDLEtBQWpDO0FBQ0g7O0FBQ0QsUUFBSUQsSUFBSixFQUFTO0FBQ0w3RCxNQUFBQSxJQUFJLENBQUN5RCxXQUFMLEdBQW1CSSxJQUFuQjtBQUNBN0QsTUFBQUEsSUFBSSxDQUFDeUQsV0FBTCxDQUFpQkssZUFBakIsQ0FBaUMsSUFBakM7QUFDSDs7QUFDRDlELElBQUFBLElBQUksQ0FBQytELG9CQUFMO0FBQ0EsU0FBS3pDLGFBQUwsQ0FBbUJTLElBQW5CLENBQXdCQyxNQUF4QixHQUFpQyxJQUFqQztBQUNILEdBckppQztBQXNKbEMrQixFQUFBQSxvQkF0SmtDLGtDQXNKWjtBQUNsQixRQUFJL0QsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSUEsSUFBSSxDQUFDeUQsV0FBVCxFQUFxQjtBQUNqQixVQUFJTyxXQUFXLEdBQUdoRSxJQUFJLENBQUN5RCxXQUFMLENBQWlCUSxpQkFBakIsRUFBbEI7O0FBQ0EsVUFBSUQsV0FBSixFQUFpQjtBQUNiLFlBQUlFLEdBQUcsR0FBR0YsV0FBVyxDQUFDLENBQUQsQ0FBWCxDQUFlLENBQWYsQ0FBVjtBQUNBLFlBQUlHLEdBQUcsR0FBR0gsV0FBVyxDQUFDLENBQUQsQ0FBWCxDQUFlLENBQWYsQ0FBVjtBQUNBLFlBQUlJLFdBQVcsR0FBR3hELEtBQUssQ0FBQ3lELGFBQU4sQ0FBb0JILEdBQXBCLENBQWxCOztBQUNBLFlBQUlFLFdBQUosRUFBaUI7QUFDYixlQUFLekMsT0FBTCxDQUFhL0MsUUFBUSxDQUFDMEYsVUFBVCxDQUFvQkosR0FBcEIsQ0FBYixFQUF1QyxVQUFTdEMsV0FBVCxFQUFzQjtBQUN6RCxpQkFBS1IsYUFBTCxDQUFtQlMsV0FBbkIsR0FBaUNELFdBQWpDO0FBQ0gsV0FGc0MsQ0FFckNFLElBRnFDLENBRWhDLElBRmdDLENBQXZDO0FBR0E5QixVQUFBQSxJQUFJLENBQUNvQixhQUFMLENBQW1CbUQsTUFBbkIsR0FBNEJKLEdBQUcsR0FBRyxLQUFsQztBQUNIO0FBQ0o7QUFDSixLQWJELE1BYUssQ0FDRDtBQUNIO0FBQ0osR0F4S2lDO0FBeUtsQzdCLEVBQUFBLGlCQXpLa0MsK0JBeUtmO0FBQ2YxQixJQUFBQSxLQUFLLENBQUM0RCxlQUFOLENBQXNCLENBQXRCO0FBQ0EsUUFBSXhFLElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSUEsSUFBSSxDQUFDUCxVQUFULEVBQXNCOztBQUN0QixRQUFJTyxJQUFJLENBQUN5RCxXQUFULEVBQXFCO0FBQ2pCLFVBQUlPLFdBQVcsR0FBR2hFLElBQUksQ0FBQ3lELFdBQUwsQ0FBaUJRLGlCQUFqQixFQUFsQjs7QUFDQSxVQUFJRCxXQUFKLEVBQWdCO0FBQ1osWUFBSUUsR0FBRyxHQUFHRixXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUsQ0FBZixDQUFWO0FBQ0EsWUFBSUcsR0FBRyxHQUFHSCxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUsQ0FBZixDQUFWO0FBQ0EsWUFBSVMsUUFBUSxHQUFHekYsa0JBQWtCLENBQUNhLFdBQW5CLEdBQWlDNkUsUUFBakMsR0FBNENDLGVBQTVDLENBQTREVCxHQUE1RCxDQUFmLENBSFksQ0FJWjs7QUFDQSxZQUFJTyxRQUFRLElBQUlOLEdBQVosSUFBbUJuRSxJQUFJLENBQUNDLE1BQTVCLEVBQW9DO0FBQ2hDRCxVQUFBQSxJQUFJLENBQUN5QyxjQUFMLEdBQXNCLENBQXRCO0FBQ0F6QyxVQUFBQSxJQUFJLENBQUNQLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxlQUFLUSxNQUFMLENBQVlxRCxZQUFaLENBQXlCLENBQXpCLEVBQTRCLFNBQTVCLEVBQXVDLEtBQXZDO0FBQ0F0RCxVQUFBQSxJQUFJLENBQUN1RCxrQkFBTDtBQUNILFNBTEQsTUFLSztBQUNELGNBQUlDLFFBQVEsR0FBR3hELElBQUksQ0FBQ3lELFdBQUwsQ0FBaUJDLGdCQUFqQixFQUFmO0FBQ0EsZUFBSzlELElBQUwsQ0FBVStELHVCQUFWLENBQWtDSCxRQUFsQztBQUNIO0FBQ0o7QUFDSixLQWpCRCxNQWlCSztBQUNEb0IsTUFBQUEsT0FBTyxDQUFDLFVBQUQsQ0FBUDtBQUNIO0FBQ0o7QUFqTWlDLENBQVQsQ0FBN0I7QUFvTUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVGLHNCQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahCAo5YWI55+l5Zyj5q6/KVxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMjIgMTU6MDU6MzRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgU2VlcnBhbGFjZVN1bW1vbkl0ZW0gPSByZXF1aXJlKFwic2VlcnBhbGFjZV9zdW1tb25fSXRlbVwiKSBcbnZhciBTZWVycGFsYWNlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJzZWVycGFsYWNlX2NvbnRyb2xsZXJcIilcbnZhciBCYWNrcGFja0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiYmFja3BhY2tfY29udHJvbGxlclwiKVxudmFyIFNlZXJwYWxhY2VDb25zdCA9IHJlcXVpcmUoXCJzZWVycGFsYWNlX2NvbnN0XCIpXG52YXIgU2VlcnBhbGFjZV9zdW1tb25QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwic2VlcnBhbGFjZVwiLCBcInNlZXJwYWxhY2Vfc3VtbW9uX3BhbmVsXCIpO1xuICAgICAgICB0aGlzLmlzX3BsYXlpbmcgPSBmYWxzZSAvLyDmmK/lkKbmraPlnKjmkq3mlL7lj6zllKTnibnmlYhcbiAgICAgICAgdGhpcy5zdW1tb25fbGlzdCA9IHt9XG4gICAgICAgIHRoaXMuc3VtbW9uX3BvcyA9IHt9XG4gICAgICAgIHRoaXMuY3RybCA9IFNlZXJwYWxhY2VDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICB0aGlzLm5wY19zayA9IHRoaXMuc2Vla0NoaWxkKFwibnBjQW5pXCIsc3AuU2tlbGV0b24pIC8vbnBj5Yqo55S7XG4gICAgICAgIHRoaXMuYmFsbF9lZmZlY3Rfc2sgPSB0aGlzLnNlZWtDaGlsZChcInBvc19iYWxsXCIpLmdldENoaWxkQnlOYW1lKFwiYWN0aW9uXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikgLy/msLTmmbbnkIPliqjnlLtcbiAgICAgICAgLy8tLSBOUENcbiAgICAgICAgdGhpcy5oYW5kbGVOUENFZmZlY3QodHJ1ZSlcbiAgICAgICAgLy8tLSDmsLTmmbbnkIPvvIjluLjpqbvvvIlcbiAgICAgICAgdGhpcy5oYW5kbGVCYWxsRWZmZWN0KHRydWUpXG4gICAgICAgIGZvcihsZXQgaT0xO2k8NTsrK2kpe1xuICAgICAgICAgICAgbGV0IHBvc19ub2RlID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKS5nZXRDaGlsZEJ5TmFtZShcImltYWdlX3N0YWdlXCIpLmdldENoaWxkQnlOYW1lKFwicG9zX25vZGVfXCIgKyBpKVxuICAgICAgICAgICAgaWYgKHBvc19ub2RlKXtcbiAgICAgICAgICAgICAgICBVdGlscy5kZWxheVJ1bihwb3Nfbm9kZSwgaSozLzYwLCBmdW5jdGlvbiAoICl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdW1tb25faWNvbiA9IHNlbGYuc3VtbW9uX2xpc3RbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VtbW9uX2ljb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1vbl9pY29uID0gbmV3IFNlZXJwYWxhY2VTdW1tb25JdGVtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OnNlbGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tb25faWNvbi5zZXRQYXJlbnQocG9zX25vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1vbl9pY29uLnNob3coKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VtbW9uX2xpc3RbaV0gPSBzdW1tb25faWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN1bW1vbl9wb3NbaV0gPSBwb3Nfbm9kZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuYnRuX3N1bW1vbl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwiYnRuX3N1bW1vblwiKVxuICAgICAgICBzZWxmLmJ0bl9zdW1tb25fbGIgPSB0aGlzLnNlZWtDaGlsZChcImJ0bl9zdW1tb25fbGFiZWxcIixjYy5MYWJlbClcbiAgICAgICAgc2VsZi5idG5fc3VtbW9uX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJpY29uXCIsY2MuU3ByaXRlKVxuICAgICAgICBsZXQgcGF0aCA9IFBhdGhUb29sLmdldEljb25QYXRoKFwiaXRlbVwiLFNlZXJwYWxhY2VDb25zdC5Hb29kX1poaUh1aSlcbiAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsZnVuY3Rpb24oU3ByaXRlRnJhbWUpe1xuICAgICAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLnNwcml0ZUZyYW1lICA9IFNwcml0ZUZyYW1lXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGxldCBkZXNrX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJkZXNrXCIsY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwiYmlnYmdfNzdcIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIGRlc2tfc3Auc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5idG5fc3VtbW9uX25kLm9uKFwidG91Y2hlbmRcIix0aGlzLl9vbkNsaWNrU3VtbW9uQnRuLHRoaXMpXG4gICAgICAgIHRoaXMuYmFsbF9lZmZlY3Rfc2suc2V0Q29tcGxldGVMaXN0ZW5lcigoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNfcGxheWluZyA9PSBmYWxzZSkgcmV0dXJuXG4gICAgICAgICAgICB0aGlzLl9vblN1bW1vbkFuaUNhbGxCYWNrKClcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFsbEVmZmVjdCgpXG4gICAgICAgIH0uYmluZCh0aGlzKSkpXG4gICAgICAgIHRoaXMubnBjX3NrLnNldENvbXBsZXRlTGlzdGVuZXIoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZih0aGlzLm5wY19hbmlfc3RhdHVzID09IDEpIHJldHVyblxuICAgICAgICAgICAgdGhpcy5fb25OUENBbmlDYWxsQmFjaygpXG4gICAgICAgIH0uYmluZCh0aGlzKSkpXG4gICAgfSxcblxuICAgIGFkZFRvUGFyZW50KCBzdGF0dXMgKXtcbiAgICAgICAgc3RhdHVzID0gc3RhdHVzIHx8IGZhbHNlXG4gICAgICAgIGlmKHN0YXR1cyl7XG4gICAgICAgICAgICB0aGlzLnNob3coKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6ZnVuY3Rpb24ocGFyYW1zKXtcblxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNrZWxldG9uRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMubnBjX3NrLnNrZWxldG9uRGF0YSA9IG51bGw7XG4gICAgfSxcbiAgICBoYW5kbGVOUENFZmZlY3Qoc3RhdHVzKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIHNlbGYubnBjX2FuaV9zdGF0dXMgPSAxIC8vIOagh+ivhuW9k+WJjW5wY+eahOWKqOS9nOexu+Wei1xuICAgICAgICB2YXIgc2tldG9uX3BhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFMjQxMTBcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgIHRoaXMubG9hZFJlcyhza2V0b25fcGF0aCwgZnVuY3Rpb24oc2tlbGV0b25fZGF0YSl7XG4gICAgICAgICAgICB0aGlzLm5wY19zay5za2VsZXRvbkRhdGEgPSBza2VsZXRvbl9kYXRhO1xuICAgICAgICAgICAgdGhpcy5ucGNfc2suc2V0QW5pbWF0aW9uKDAsIFwiYWN0aW9uMVwiLCB0cnVlKTsgICAgICAgICAgIFxuICAgICAgICB9LmJpbmQodGhpcykpOyAgICBcbiAgICAgICAgXG4gICAgfSxcbiAgICBoYW5kbGVCYWxsRWZmZWN0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICB2YXIgc2tldG9uX3BhdGggPSBQYXRoVG9vbC5nZXRTcGluZVBhdGgoXCJFMjQxMTFcIiwgXCJhY3Rpb25cIik7XG4gICAgICAgIHRoaXMubG9hZFJlcyhza2V0b25fcGF0aCwgZnVuY3Rpb24oc2tlbGV0b25fZGF0YSl7XG4gICAgICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNrZWxldG9uRGF0YSA9IHNrZWxldG9uX2RhdGE7XG4gICAgICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNldEFuaW1hdGlvbigwLCBcImFjdGlvblwiLCB0cnVlKTsgICAgICAgICAgIFxuICAgICAgICB9LmJpbmQodGhpcykpOyAgICAgICAgIFxuICAgIH0sXG4gICAgLy8gLS0g5rC05pm255CD5Y+s5ZSk54m55pWIXG4gICAgaGFuZGxlU3VtbW9uRWZmZWN0KCAgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmKHRoaXMuYmFsbF9lZmZlY3Rfc2spe1xuICAgICAgICAgICAgbGV0IHNrZXRvbl9wYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKFwiRTI0MTEyXCIsIFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHNrZXRvbl9wYXRoLCBmdW5jdGlvbihza2VsZXRvbl9kYXRhKXtcbiAgICAgICAgICAgICAgICB0aGlzLmJhbGxfZWZmZWN0X3NrLnNrZWxldG9uRGF0YSA9IHNrZWxldG9uX2RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWxsX2VmZmVjdF9zay5zZXRBbmltYXRpb24oMCwgXCJhY3Rpb25cIiwgZmFsc2UpOyAgICAgICAgICAgXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpOyAgXG4gICAgICAgIH1cbiAgICB9LCAgICBcbiAgICAvLyAtLSDmsLTmmbbnkIPlj6zllKTnibnmlYjlrozmr5Xlho3or7fmsYLlj6zllKTljY/orq5cbiAgICBfb25TdW1tb25BbmlDYWxsQmFjayggICl7XG4gICAgICAgIGxldCBncm91cF9pZCA9IHRoaXMuc2VsZWN0X2NhcmQuZ2V0U3VtbW9uR3JvdXBJZCgpXG4gICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0U2VlcnBhbGFjZVN1bW1vbihncm91cF9pZClcbiAgICAgICAgdGhpcy5pc19wbGF5aW5nID0gZmFsc2VcbiAgICB9LFxuICAgIC8vIC0tIG5wY+eahOWPrOWUpOeJueaViOaSreaUvuWujOWGjeivt+axguWPrOWUpOWNj+iurlxuICAgIF9vbk5QQ0FuaUNhbGxCYWNrKCAgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmIChzZWxmLm5wY19zayAmJiBzZWxmLm5wY19hbmlfc3RhdHVzID09IDIpIHtcbiAgICAgICAgICAgIHRoaXMubnBjX3NrLnNldEFuaW1hdGlvbigwLCBcImFjdGlvbjFcIiwgdHJ1ZSk7IFxuICAgICAgICAgICAgc2VsZi5ucGNfYW5pX3N0YXR1cyA9IDFcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8tLSDngrnlh7vkuobljaHniYxcbiAgICBfb25DbGlja1N1bW1vbkNhcmQoIGNhcmQgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmIChzZWxmLmlzX3BsYXlpbmcpICByZXR1cm4gLy8gLS0g5pKt5pS+5Y+s5ZSk54m55pWI5Lit5LiN6K6p5YiH5o2i6YCJ5oup5Y2h54mMXG4gICAgICAgIGlmIChzZWxmLnNlbGVjdF9jYXJkKXtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0X2NhcmQuc2V0U2VsZWN0U3RhdHVzKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIGlmIChjYXJkKXtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0X2NhcmQgPSBjYXJkXG4gICAgICAgICAgICBzZWxmLnNlbGVjdF9jYXJkLnNldFNlbGVjdFN0YXR1cyh0cnVlKVxuICAgICAgICB9IFxuICAgICAgICBzZWxmLnVwZGF0ZVN1bW1vbkJ0bkxhYmVsKCkgICBcbiAgICAgICAgdGhpcy5idG5fc3VtbW9uX3NwLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICB9LFxuICAgIHVwZGF0ZVN1bW1vbkJ0bkxhYmVsKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RfY2FyZCl7XG4gICAgICAgICAgICBsZXQgc3VtbW9uX2Nvc3QgPSBzZWxmLnNlbGVjdF9jYXJkLmdldFN1bW1vbkNvc3RJdGVtKClcbiAgICAgICAgICAgIGlmIChzdW1tb25fY29zdCkge1xuICAgICAgICAgICAgICAgIGxldCBiaWQgPSBzdW1tb25fY29zdFswXVswXVxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBzdW1tb25fY29zdFswXVsxXVxuICAgICAgICAgICAgICAgIGxldCBpdGVtX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoYmlkKVxuICAgICAgICAgICAgICAgIGlmIChpdGVtX2NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0SXRlbVJlcyhiaWQpLCBmdW5jdGlvbihTcHJpdGVGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5fc3VtbW9uX2xiLnNwcml0ZUZyYW1lID0gU3ByaXRlRnJhbWU7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYnRuX3N1bW1vbl9sYi5zdHJpbmcgPSBudW0gKyBcIiDlj6zllKRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvLyBzZWxmLmJ0bl9zdW1tb25fbGFiZWwuc2V0U3RyaW5nKFRJMThOKFwiPGRpdiBvdXRsaW5lPTIsIzRhMjYwNj7lj6zllKQ8L2Rpdj5cIikpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIF9vbkNsaWNrU3VtbW9uQnRuKCl7XG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgaWYgKHNlbGYuaXNfcGxheWluZykgIHJldHVybiBcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0X2NhcmQpe1xuICAgICAgICAgICAgbGV0IHN1bW1vbl9jb3N0ID0gc2VsZi5zZWxlY3RfY2FyZC5nZXRTdW1tb25Db3N0SXRlbSgpXG4gICAgICAgICAgICBpZiAoc3VtbW9uX2Nvc3Qpe1xuICAgICAgICAgICAgICAgIGxldCBiaWQgPSBzdW1tb25fY29zdFswXVswXVxuICAgICAgICAgICAgICAgIGxldCBudW0gPSBzdW1tb25fY29zdFswXVsxXVxuICAgICAgICAgICAgICAgIGxldCBoYXZlX251bSA9IEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0SXRlbU51bUJ5QmlkKGJpZClcbiAgICAgICAgICAgICAgICAvLyAtLSDog4zljIXnianlk4HotrPlpJ/liJnlhYjmkq3mlL7lj6zllKTnibnmlYjlho3or7fmsYLlj6zllKTljY/orq7vvIzkuI3otrPliJnnm7TmjqXor7fmsYLljY/orq7vvIjlvLnlh7rnianlk4HmnaXmupDlkozmj5DnpLrvvIlcbiAgICAgICAgICAgICAgICBpZiAoaGF2ZV9udW0gPj0gbnVtICYmIHNlbGYubnBjX3NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubnBjX2FuaV9zdGF0dXMgPSAyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfcGxheWluZyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ucGNfc2suc2V0QW5pbWF0aW9uKDAsIFwiYWN0aW9uMlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlU3VtbW9uRWZmZWN0KClcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwX2lkID0gc2VsZi5zZWxlY3RfY2FyZC5nZXRTdW1tb25Hcm91cElkKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RTZWVycGFsYWNlU3VtbW9uKGdyb3VwX2lkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBtZXNzYWdlKFwi6K+35YWI6YCJ5oup5LiA56eN5Y2h54mMXCIpXG4gICAgICAgIH1cbiAgICB9LCAgICBcbiAgICBcbn0pXG5tb2R1bGUuZXhwb3J0cyA9IFNlZXJwYWxhY2Vfc3VtbW9uUGFuZWw7Il19