@magic-xpa/utils 4.1200.0-dev4120.21 → 4.1200.0-dev4120.212

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,614 +0,0 @@
1
- import { Encoding, Hashtable, NChar, NNumber, Stack } from "@magic-xpa/mscorelib";
2
- import { UtilStrByteMode } from "./UtilStrByteMode";
3
- export class Rtf_SYMBOL {
4
- szKeyword = null;
5
- kwd = null;
6
- idxInRgprop = null;
7
- constructor(keyWord, kwd, idxInRgprop) {
8
- this.szKeyword = keyWord;
9
- this.kwd = kwd;
10
- this.idxInRgprop = idxInRgprop;
11
- }
12
- }
13
- export class Rtf_PROP {
14
- actn = null;
15
- prop = null;
16
- constructor(actn, prop) {
17
- this.actn = actn;
18
- this.prop = prop;
19
- }
20
- }
21
- class Rtf_StackSave {
22
- rds = null;
23
- ris = null;
24
- }
25
- export var Rtf_KWD;
26
- (function (Rtf_KWD) {
27
- Rtf_KWD[Rtf_KWD["CHAR"] = 0] = "CHAR";
28
- Rtf_KWD[Rtf_KWD["DEST"] = 1] = "DEST";
29
- Rtf_KWD[Rtf_KWD["PROP"] = 2] = "PROP";
30
- Rtf_KWD[Rtf_KWD["SPEC"] = 3] = "SPEC";
31
- })(Rtf_KWD || (Rtf_KWD = {}));
32
- export var Rtf_PROPTYPE;
33
- (function (Rtf_PROPTYPE) {
34
- Rtf_PROPTYPE[Rtf_PROPTYPE["CHP"] = 0] = "CHP";
35
- Rtf_PROPTYPE[Rtf_PROPTYPE["PAP"] = 1] = "PAP";
36
- Rtf_PROPTYPE[Rtf_PROPTYPE["SEP"] = 2] = "SEP";
37
- Rtf_PROPTYPE[Rtf_PROPTYPE["DOP"] = 3] = "DOP";
38
- })(Rtf_PROPTYPE || (Rtf_PROPTYPE = {}));
39
- export var Rtf_ACTN;
40
- (function (Rtf_ACTN) {
41
- Rtf_ACTN[Rtf_ACTN["SPEC"] = 0] = "SPEC";
42
- Rtf_ACTN[Rtf_ACTN["BYTE"] = 1] = "BYTE";
43
- Rtf_ACTN[Rtf_ACTN["WORD"] = 2] = "WORD";
44
- })(Rtf_ACTN || (Rtf_ACTN = {}));
45
- export var Rtf_IPFN;
46
- (function (Rtf_IPFN) {
47
- Rtf_IPFN[Rtf_IPFN["BIN"] = 0] = "BIN";
48
- Rtf_IPFN[Rtf_IPFN["HEX"] = 1] = "HEX";
49
- Rtf_IPFN[Rtf_IPFN["SKIP_DEST"] = 2] = "SKIP_DEST";
50
- Rtf_IPFN[Rtf_IPFN["BREAK"] = 3] = "BREAK";
51
- Rtf_IPFN[Rtf_IPFN["NEW"] = 4] = "NEW";
52
- Rtf_IPFN[Rtf_IPFN["FONT"] = 5] = "FONT";
53
- Rtf_IPFN[Rtf_IPFN["CHARSET"] = 6] = "CHARSET";
54
- Rtf_IPFN[Rtf_IPFN["UNICODE"] = 7] = "UNICODE";
55
- })(Rtf_IPFN || (Rtf_IPFN = {}));
56
- export var Rtf_IDEST;
57
- (function (Rtf_IDEST) {
58
- Rtf_IDEST[Rtf_IDEST["PICT"] = 0] = "PICT";
59
- Rtf_IDEST[Rtf_IDEST["COLOR"] = 1] = "COLOR";
60
- Rtf_IDEST[Rtf_IDEST["SKIP"] = 2] = "SKIP";
61
- })(Rtf_IDEST || (Rtf_IDEST = {}));
62
- export var Rtf_IPROP;
63
- (function (Rtf_IPROP) {
64
- Rtf_IPROP[Rtf_IPROP["BOLD"] = 0] = "BOLD";
65
- Rtf_IPROP[Rtf_IPROP["ITALIC"] = 1] = "ITALIC";
66
- Rtf_IPROP[Rtf_IPROP["UNDERLINE"] = 2] = "UNDERLINE";
67
- Rtf_IPROP[Rtf_IPROP["FONT"] = 3] = "FONT";
68
- Rtf_IPROP[Rtf_IPROP["SIZE"] = 4] = "SIZE";
69
- Rtf_IPROP[Rtf_IPROP["COLOR"] = 5] = "COLOR";
70
- Rtf_IPROP[Rtf_IPROP["RED"] = 6] = "RED";
71
- Rtf_IPROP[Rtf_IPROP["GREEN"] = 7] = "GREEN";
72
- Rtf_IPROP[Rtf_IPROP["BLUE"] = 8] = "BLUE";
73
- Rtf_IPROP[Rtf_IPROP["LEFT_IND"] = 9] = "LEFT_IND";
74
- Rtf_IPROP[Rtf_IPROP["RIGHT_IND"] = 10] = "RIGHT_IND";
75
- Rtf_IPROP[Rtf_IPROP["FIRST_IND"] = 11] = "FIRST_IND";
76
- Rtf_IPROP[Rtf_IPROP["COLS"] = 12] = "COLS";
77
- Rtf_IPROP[Rtf_IPROP["PGN_X"] = 13] = "PGN_X";
78
- Rtf_IPROP[Rtf_IPROP["PGN_Y"] = 14] = "PGN_Y";
79
- Rtf_IPROP[Rtf_IPROP["XA_PAGE"] = 15] = "XA_PAGE";
80
- Rtf_IPROP[Rtf_IPROP["YA_PAGE"] = 16] = "YA_PAGE";
81
- Rtf_IPROP[Rtf_IPROP["XA_LEFT"] = 17] = "XA_LEFT";
82
- Rtf_IPROP[Rtf_IPROP["XA_RIGHT"] = 18] = "XA_RIGHT";
83
- Rtf_IPROP[Rtf_IPROP["YA_TOP"] = 19] = "YA_TOP";
84
- Rtf_IPROP[Rtf_IPROP["YA_BOTTOM"] = 20] = "YA_BOTTOM";
85
- Rtf_IPROP[Rtf_IPROP["PGN_START"] = 21] = "PGN_START";
86
- Rtf_IPROP[Rtf_IPROP["SBK"] = 22] = "SBK";
87
- Rtf_IPROP[Rtf_IPROP["PGN_FORMAT"] = 23] = "PGN_FORMAT";
88
- Rtf_IPROP[Rtf_IPROP["FACING_P"] = 24] = "FACING_P";
89
- Rtf_IPROP[Rtf_IPROP["LANDSCAPE"] = 25] = "LANDSCAPE";
90
- Rtf_IPROP[Rtf_IPROP["JUST"] = 26] = "JUST";
91
- Rtf_IPROP[Rtf_IPROP["PARD"] = 27] = "PARD";
92
- Rtf_IPROP[Rtf_IPROP["PLAIN"] = 28] = "PLAIN";
93
- Rtf_IPROP[Rtf_IPROP["SECTD"] = 29] = "SECTD";
94
- Rtf_IPROP[Rtf_IPROP["BULLET"] = 30] = "BULLET";
95
- Rtf_IPROP[Rtf_IPROP["XA_BULLET"] = 31] = "XA_BULLET";
96
- Rtf_IPROP[Rtf_IPROP["MAX"] = 32] = "MAX";
97
- })(Rtf_IPROP || (Rtf_IPROP = {}));
98
- export var Rtf_RDS;
99
- (function (Rtf_RDS) {
100
- Rtf_RDS[Rtf_RDS["NORM"] = 0] = "NORM";
101
- Rtf_RDS[Rtf_RDS["COLOR"] = 1] = "COLOR";
102
- Rtf_RDS[Rtf_RDS["SKIP"] = 2] = "SKIP";
103
- Rtf_RDS[Rtf_RDS["NEW"] = 3] = "NEW";
104
- })(Rtf_RDS || (Rtf_RDS = {}));
105
- export var Rtf_ErrorRtf;
106
- (function (Rtf_ErrorRtf) {
107
- Rtf_ErrorRtf[Rtf_ErrorRtf["OK"] = 0] = "OK";
108
- Rtf_ErrorRtf[Rtf_ErrorRtf["STACK_UNDERFLOW"] = 1] = "STACK_UNDERFLOW";
109
- Rtf_ErrorRtf[Rtf_ErrorRtf["STACK_OVERFLOW"] = 2] = "STACK_OVERFLOW";
110
- Rtf_ErrorRtf[Rtf_ErrorRtf["UNMATCHED_BRACE"] = 3] = "UNMATCHED_BRACE";
111
- Rtf_ErrorRtf[Rtf_ErrorRtf["INVALID_HEX"] = 4] = "INVALID_HEX";
112
- Rtf_ErrorRtf[Rtf_ErrorRtf["BAD_TABLE"] = 5] = "BAD_TABLE";
113
- Rtf_ErrorRtf[Rtf_ErrorRtf["ASSERTION"] = 6] = "ASSERTION";
114
- Rtf_ErrorRtf[Rtf_ErrorRtf["END_OF_FILE"] = 7] = "END_OF_FILE";
115
- Rtf_ErrorRtf[Rtf_ErrorRtf["BUFFER_TOO_SMALL"] = 8] = "BUFFER_TOO_SMALL";
116
- })(Rtf_ErrorRtf || (Rtf_ErrorRtf = {}));
117
- export class Rtf_RtfChar {
118
- static CR = String.fromCharCode(0x0d);
119
- static LF = String.fromCharCode(0x0A);
120
- static TAB = String.fromCharCode(0x09);
121
- static BULLET = String.fromCharCode(0x95);
122
- static TILDA = String.fromCharCode(0xA0);
123
- static DASH = String.fromCharCode(0xAD);
124
- static DASH_CHAR = '-';
125
- static QUOTE = '\'';
126
- static DBLQUOTE = '"';
127
- static OPENINGBRACE = '{';
128
- static CLOSINGBRACE = '}';
129
- static BACKSLASH = '\\';
130
- }
131
- export var Rtf_RIS;
132
- (function (Rtf_RIS) {
133
- Rtf_RIS[Rtf_RIS["NORM"] = 0] = "NORM";
134
- Rtf_RIS[Rtf_RIS["BIN"] = 1] = "BIN";
135
- Rtf_RIS[Rtf_RIS["HEX"] = 2] = "HEX";
136
- Rtf_RIS[Rtf_RIS["UNICODE"] = 3] = "UNICODE";
137
- })(Rtf_RIS || (Rtf_RIS = {}));
138
- export class Rtf {
139
- _group = 0;
140
- _cbBin = 0;
141
- _lParam = 0;
142
- _skipDestIfUnk = false;
143
- _outputOnce = false;
144
- _processCrlfSpecial = false;
145
- _destState = null;
146
- _internalState = null;
147
- _stack = null;
148
- _index = 0;
149
- _fontNum = 0;
150
- _charsetTable = new Hashtable();
151
- _codePageTable = new Hashtable();
152
- static RTF_PREFIX = "{\\rtf";
153
- static CHAR_PAR = "par";
154
- static rgprop = [
155
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP),
156
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP),
157
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP),
158
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP),
159
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.PAP),
160
- new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.PAP),
161
- new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.SEP),
162
- new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP),
163
- new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP),
164
- new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP),
165
- new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.WORD, Rtf_PROPTYPE.DOP),
166
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.SEP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.SEP),
167
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.DOP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.DOP),
168
- new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.PAP),
169
- new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.SEP)
170
- ];
171
- static rgsymRtf = [
172
- new Rtf_SYMBOL("b", Rtf_KWD.PROP, Rtf_IPROP.BOLD), new Rtf_SYMBOL("ul", Rtf_KWD.PROP, Rtf_IPROP.UNDERLINE),
173
- new Rtf_SYMBOL("i", Rtf_KWD.PROP, Rtf_IPROP.ITALIC), new Rtf_SYMBOL("li", Rtf_KWD.PROP, Rtf_IPROP.LEFT_IND),
174
- new Rtf_SYMBOL("ri", Rtf_KWD.PROP, Rtf_IPROP.RIGHT_IND), new Rtf_SYMBOL("fi", Rtf_KWD.PROP, Rtf_IPROP.FIRST_IND),
175
- new Rtf_SYMBOL("cols", Rtf_KWD.PROP, Rtf_IPROP.COLS), new Rtf_SYMBOL("sbknone", Rtf_KWD.PROP, Rtf_IPROP.SBK),
176
- new Rtf_SYMBOL("sbkcol", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("sbkeven", Rtf_KWD.PROP, Rtf_IPROP.SBK),
177
- new Rtf_SYMBOL("sbkodd", Rtf_KWD.PROP, Rtf_IPROP.SBK), new Rtf_SYMBOL("sbkpage", Rtf_KWD.PROP, Rtf_IPROP.SBK),
178
- new Rtf_SYMBOL("pgnx", Rtf_KWD.PROP, Rtf_IPROP.PGN_X), new Rtf_SYMBOL("pgny", Rtf_KWD.PROP, Rtf_IPROP.PGN_Y),
179
- new Rtf_SYMBOL("pgndec", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("pgnucrm", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT),
180
- new Rtf_SYMBOL("pgnlcrm", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("pgnucltr", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT),
181
- new Rtf_SYMBOL("pgnlcltr", Rtf_KWD.PROP, Rtf_IPROP.PGN_FORMAT), new Rtf_SYMBOL("qc", Rtf_KWD.PROP, Rtf_IPROP.JUST),
182
- new Rtf_SYMBOL("ql", Rtf_KWD.PROP, Rtf_IPROP.JUST), new Rtf_SYMBOL("qr", Rtf_KWD.PROP, Rtf_IPROP.JUST),
183
- new Rtf_SYMBOL("qj", Rtf_KWD.PROP, Rtf_IPROP.JUST), new Rtf_SYMBOL("paperw", Rtf_KWD.PROP, Rtf_IPROP.XA_PAGE),
184
- new Rtf_SYMBOL("paperh", Rtf_KWD.PROP, Rtf_IPROP.YA_PAGE), new Rtf_SYMBOL("margl", Rtf_KWD.PROP, Rtf_IPROP.XA_LEFT),
185
- new Rtf_SYMBOL("margr", Rtf_KWD.PROP, Rtf_IPROP.XA_RIGHT), new Rtf_SYMBOL("margt", Rtf_KWD.PROP, Rtf_IPROP.YA_TOP),
186
- new Rtf_SYMBOL("margb", Rtf_KWD.PROP, Rtf_IPROP.YA_BOTTOM), new Rtf_SYMBOL("pgnstart", Rtf_KWD.PROP, Rtf_IPROP.PGN_START),
187
- new Rtf_SYMBOL("facingp", Rtf_KWD.PROP, Rtf_IPROP.FACING_P), new Rtf_SYMBOL("landscape", Rtf_KWD.PROP, Rtf_IPROP.LANDSCAPE),
188
- new Rtf_SYMBOL("par", Rtf_KWD.CHAR, Rtf_RtfChar.LF), new Rtf_SYMBOL("\0x0a", Rtf_KWD.CHAR, Rtf_RtfChar.LF),
189
- new Rtf_SYMBOL("\0x0d", Rtf_KWD.CHAR, Rtf_RtfChar.LF), new Rtf_SYMBOL("tab", Rtf_KWD.CHAR, Rtf_RtfChar.TAB),
190
- new Rtf_SYMBOL("ldblquote", Rtf_KWD.CHAR, Rtf_RtfChar.DBLQUOTE), new Rtf_SYMBOL("rdblquote", Rtf_KWD.CHAR, Rtf_RtfChar.DBLQUOTE),
191
- new Rtf_SYMBOL("lquote", Rtf_KWD.CHAR, Rtf_RtfChar.QUOTE), new Rtf_SYMBOL("rquote", Rtf_KWD.CHAR, Rtf_RtfChar.QUOTE),
192
- new Rtf_SYMBOL("bullet", Rtf_KWD.CHAR, Rtf_RtfChar.BULLET), new Rtf_SYMBOL("endash", Rtf_KWD.CHAR, Rtf_RtfChar.DASH_CHAR),
193
- new Rtf_SYMBOL("emdash", Rtf_KWD.CHAR, Rtf_RtfChar.DASH_CHAR), new Rtf_SYMBOL("~", Rtf_KWD.CHAR, Rtf_RtfChar.TILDA),
194
- new Rtf_SYMBOL("-", Rtf_KWD.CHAR, Rtf_RtfChar.DASH), new Rtf_SYMBOL("{", Rtf_KWD.CHAR, Rtf_RtfChar.OPENINGBRACE),
195
- new Rtf_SYMBOL("}", Rtf_KWD.CHAR, Rtf_RtfChar.CLOSINGBRACE), new Rtf_SYMBOL("\\", Rtf_KWD.CHAR, Rtf_RtfChar.BACKSLASH),
196
- new Rtf_SYMBOL("bin", Rtf_KWD.SPEC, Rtf_IPFN.BIN), new Rtf_SYMBOL("*", Rtf_KWD.SPEC, Rtf_IPFN.SKIP_DEST),
197
- new Rtf_SYMBOL("'", Rtf_KWD.SPEC, Rtf_IPFN.HEX), new Rtf_SYMBOL("f", Rtf_KWD.SPEC, Rtf_IPFN.FONT),
198
- new Rtf_SYMBOL("fcharset", Rtf_KWD.SPEC, Rtf_IPFN.CHARSET), new Rtf_SYMBOL("u", Rtf_KWD.SPEC, Rtf_IPFN.UNICODE),
199
- new Rtf_SYMBOL("author", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("buptim", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
200
- new Rtf_SYMBOL("colortbl", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("comment", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
201
- new Rtf_SYMBOL("creatim", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("doccomm", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
202
- new Rtf_SYMBOL("fonttbl", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footer", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
203
- new Rtf_SYMBOL("footerf", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footerl", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
204
- new Rtf_SYMBOL("footerr", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("footnote", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
205
- new Rtf_SYMBOL("ftncn", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("ftnsep", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
206
- new Rtf_SYMBOL("ftnsepc", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("header", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
207
- new Rtf_SYMBOL("headerf", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("headerl", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
208
- new Rtf_SYMBOL("headerr", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("info", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
209
- new Rtf_SYMBOL("keywords", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("operator", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
210
- new Rtf_SYMBOL("pict", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("printim", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
211
- new Rtf_SYMBOL("private1", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("revtim", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
212
- new Rtf_SYMBOL("rxe", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("stylesheet", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
213
- new Rtf_SYMBOL("subject", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("tc", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
214
- new Rtf_SYMBOL("title", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("txe", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
215
- new Rtf_SYMBOL("xe", Rtf_KWD.DEST, Rtf_IDEST.SKIP)
216
- ];
217
- constructor() {
218
- this._stack = new Stack();
219
- this._group = 0;
220
- this._cbBin = 0;
221
- this._lParam = 0;
222
- this._outputOnce = false;
223
- this._skipDestIfUnk = false;
224
- this._processCrlfSpecial = false;
225
- this._destState = Rtf_RDS.NORM;
226
- this._internalState = Rtf_RIS.NORM;
227
- this._fontNum = 0;
228
- if (UtilStrByteMode.isLocaleDefLangDBCS()) {
229
- this.setCodePageTable();
230
- }
231
- }
232
- static isRtf(str) {
233
- let isRtf = false;
234
- if (str !== null && str.startsWith(this.RTF_PREFIX)) {
235
- isRtf = true;
236
- }
237
- return isRtf;
238
- }
239
- toTxt(rtfTxt, outputTxt) {
240
- let cNibble = 2;
241
- let b = 0;
242
- let currPos = 0;
243
- let skipNewline = false;
244
- let blobStrLen;
245
- let blobChar;
246
- let ec;
247
- let dbcsBytes = new Uint8Array(2);
248
- let skipParseChar = false;
249
- let charset = 0;
250
- let codePage = 0;
251
- this._outputOnce = false;
252
- this._processCrlfSpecial = false;
253
- blobStrLen = rtfTxt.length;
254
- this._index = 0;
255
- this._destState = Rtf_RDS.NORM;
256
- if (rtfTxt === null || blobStrLen === 0 || !Rtf.isRtf(rtfTxt)) {
257
- return Rtf_ErrorRtf.OK;
258
- }
259
- while (this._index < blobStrLen) {
260
- blobChar = rtfTxt[this._index];
261
- this._index++;
262
- if (this._group < 0)
263
- return Rtf_ErrorRtf.STACK_UNDERFLOW;
264
- if (this._internalState === Rtf_RIS.BIN) {
265
- if ((ec = this.ParseChar(blobChar, outputTxt)) !== Rtf_ErrorRtf.OK)
266
- return ec;
267
- }
268
- else {
269
- switch (blobChar) {
270
- case Rtf_RtfChar.OPENINGBRACE:
271
- skipNewline = false;
272
- if ((ec = this.PushState()) !== Rtf_ErrorRtf.OK)
273
- return ec;
274
- break;
275
- case Rtf_RtfChar.CLOSINGBRACE:
276
- skipNewline = true;
277
- if ((ec = this.PopState()) !== Rtf_ErrorRtf.OK)
278
- return ec;
279
- break;
280
- case Rtf_RtfChar.BACKSLASH:
281
- skipNewline = false;
282
- if ((ec = this.ParseKeyword(rtfTxt, outputTxt)) !== Rtf_ErrorRtf.OK)
283
- return ec;
284
- break;
285
- case Rtf_RtfChar.LF:
286
- case Rtf_RtfChar.CR:
287
- if (this._processCrlfSpecial) {
288
- if (blobChar === Rtf_RtfChar.LF) {
289
- this._processCrlfSpecial = false;
290
- }
291
- }
292
- else {
293
- if (blobChar === Rtf_RtfChar.LF || (blobChar === Rtf_RtfChar.CR && skipNewline && !this._outputOnce))
294
- break;
295
- }
296
- default:
297
- if (blobChar !== Rtf_RtfChar.CR)
298
- skipNewline = false;
299
- if (this._internalState === Rtf_RIS.NORM) {
300
- if ((ec = this.ParseChar(blobChar, outputTxt)) !== Rtf_ErrorRtf.OK)
301
- return ec;
302
- }
303
- else if (this._internalState === Rtf_RIS.UNICODE) {
304
- if ((ec = this.ParseChar(String.fromCharCode(this._lParam), outputTxt)) !== Rtf_ErrorRtf.OK)
305
- return ec;
306
- this._internalState = Rtf_RIS.NORM;
307
- }
308
- else {
309
- if (this._internalState !== Rtf_RIS.HEX)
310
- return Rtf_ErrorRtf.ASSERTION;
311
- b = b << 4;
312
- if (NChar.IsDigit(blobChar))
313
- b += blobChar.charCodeAt(0) - '0'.charCodeAt(0);
314
- else {
315
- if (NChar.IsLower(blobChar)) {
316
- if (blobChar < 'a' || blobChar > 'f')
317
- return Rtf_ErrorRtf.INVALID_HEX;
318
- b += 10 + blobChar.charCodeAt(0) - 'a'.charCodeAt(0);
319
- }
320
- else {
321
- if (blobChar < 'A' || blobChar > 'F')
322
- return Rtf_ErrorRtf.INVALID_HEX;
323
- b += 10 + blobChar.charCodeAt(0) - 'A'.charCodeAt(0);
324
- }
325
- }
326
- cNibble--;
327
- if (cNibble === 0) {
328
- if (UtilStrByteMode.isLocaleDefLangDBCS()) {
329
- charset = this.getCharset(this._fontNum);
330
- if (!skipParseChar && Rtf.is1stByte(b, charset)) {
331
- dbcsBytes[0] = b;
332
- dbcsBytes[1] = 0;
333
- skipParseChar = true;
334
- }
335
- else {
336
- if (skipParseChar && Rtf.is2ndByte(b, charset))
337
- dbcsBytes[1] = b;
338
- else {
339
- dbcsBytes[0] = b;
340
- dbcsBytes[1] = 0;
341
- }
342
- codePage = this.getCodePage(charset);
343
- let workStr = Encoding.GetEncoding(codePage).GetString(dbcsBytes, 0, 2);
344
- b = workStr.charCodeAt(0);
345
- skipParseChar = false;
346
- }
347
- }
348
- if (!skipParseChar) {
349
- if ((ec = this.ParseChar(String.fromCharCode(b), outputTxt)) !== Rtf_ErrorRtf.OK)
350
- return ec;
351
- }
352
- cNibble = 2;
353
- b = 0;
354
- this._internalState = Rtf_RIS.NORM;
355
- }
356
- }
357
- break;
358
- }
359
- }
360
- }
361
- if (this._group < 0)
362
- return Rtf_ErrorRtf.STACK_UNDERFLOW;
363
- if (this._group > 0)
364
- return Rtf_ErrorRtf.UNMATCHED_BRACE;
365
- currPos = outputTxt.Length;
366
- if (currPos >= 3 && (outputTxt.get_Item(currPos - 3) === Rtf_RtfChar.CR && outputTxt.get_Item(currPos - 2) === Rtf_RtfChar.LF && outputTxt.get_Item(currPos - 1) === Rtf_RtfChar.CR || outputTxt.get_Item(currPos - 3) === Rtf_RtfChar.LF && outputTxt.get_Item(currPos - 2) === Rtf_RtfChar.CR && outputTxt.get_Item(currPos - 1) === Rtf_RtfChar.CR))
367
- outputTxt.Remove(currPos - 3, 3);
368
- return Rtf_ErrorRtf.OK;
369
- }
370
- ParseChar(ch, outputTxt) {
371
- let ret = Rtf_ErrorRtf.OK;
372
- if (this._internalState === Rtf_RIS.BIN && --this._cbBin <= 0) {
373
- this._internalState = Rtf_RIS.NORM;
374
- }
375
- if (this._destState === Rtf_RDS.SKIP) {
376
- }
377
- else if (this._destState === Rtf_RDS.NORM) {
378
- ret = this.PrintChar(ch, outputTxt);
379
- }
380
- else {
381
- }
382
- return ret;
383
- }
384
- PrintChar(ch, outputTxt) {
385
- if ((ch >= ' ' || ch === Rtf_RtfChar.CR || ch === Rtf_RtfChar.LF) && ch !== String.fromCharCode(183)) {
386
- outputTxt.Append(ch);
387
- }
388
- if (ch >= ' ') {
389
- this._outputOnce = true;
390
- }
391
- return Rtf_ErrorRtf.OK;
392
- }
393
- PushState() {
394
- let stackSave = new Rtf_StackSave();
395
- if (stackSave === null) {
396
- return Rtf_ErrorRtf.STACK_OVERFLOW;
397
- }
398
- stackSave.rds = this._destState;
399
- stackSave.ris = this._internalState;
400
- this._internalState = Rtf_RIS.NORM;
401
- this._stack.push(stackSave);
402
- this._group++;
403
- return Rtf_ErrorRtf.OK;
404
- }
405
- PopState() {
406
- let savedPop = this._stack.pop();
407
- if (savedPop === null) {
408
- return Rtf_ErrorRtf.STACK_UNDERFLOW;
409
- }
410
- this._destState = savedPop.rds;
411
- this._internalState = savedPop.ris;
412
- this._group--;
413
- return Rtf_ErrorRtf.OK;
414
- }
415
- ParseKeyword(rtfTxt, outputTxt) {
416
- let ch;
417
- let fNeg = false;
418
- let szKeyword = "";
419
- let szParameter = "";
420
- if ((ch = rtfTxt[this._index++]) === String.fromCharCode(0)) {
421
- return Rtf_ErrorRtf.END_OF_FILE;
422
- }
423
- if (!NChar.IsLetter(ch)) {
424
- szKeyword = szKeyword + ch;
425
- return this.TranslateKeyword(szKeyword, outputTxt);
426
- }
427
- for (; NChar.IsLetter(ch); ch = rtfTxt[this._index++])
428
- szKeyword = szKeyword + ch;
429
- if (ch === '-') {
430
- fNeg = true;
431
- if ((ch = rtfTxt[this._index++]) === String.fromCharCode(0))
432
- return Rtf_ErrorRtf.END_OF_FILE;
433
- }
434
- if (NChar.IsDigit(ch)) {
435
- for (; NChar.IsDigit(ch); ch = rtfTxt[this._index++])
436
- szParameter = szParameter + ch;
437
- this._lParam = NNumber.Parse(szParameter);
438
- if (fNeg)
439
- this._lParam = -this._lParam;
440
- }
441
- if (ch !== ' ')
442
- this._index--;
443
- if (szKeyword === Rtf.CHAR_PAR) {
444
- if (rtfTxt[this._index] === Rtf_RtfChar.CR && rtfTxt[this._index + 1] === Rtf_RtfChar.LF)
445
- this._processCrlfSpecial = true;
446
- }
447
- if (this._processCrlfSpecial) {
448
- return Rtf_ErrorRtf.OK;
449
- }
450
- else {
451
- return this.TranslateKeyword(szKeyword, outputTxt);
452
- }
453
- }
454
- TranslateKeyword(szKeyword, outputTxt) {
455
- let result = Rtf_ErrorRtf.OK;
456
- let isym;
457
- for (isym = 0; isym < Rtf.rgsymRtf.length; isym++) {
458
- if (szKeyword === Rtf.rgsymRtf[isym].szKeyword) {
459
- break;
460
- }
461
- }
462
- if (isym === Rtf.rgsymRtf.length) {
463
- if (this._skipDestIfUnk) {
464
- this._destState = Rtf_RDS.SKIP;
465
- }
466
- this._skipDestIfUnk = false;
467
- }
468
- else {
469
- result = Rtf_ErrorRtf.BAD_TABLE;
470
- this._skipDestIfUnk = false;
471
- if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.PROP) {
472
- result = this.validateProp(Rtf.rgsymRtf[isym].idxInRgprop);
473
- }
474
- else if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.CHAR) {
475
- result = this.ParseChar((Rtf.rgsymRtf[isym].idxInRgprop), outputTxt);
476
- }
477
- else if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.DEST) {
478
- result = this.changeDestState();
479
- }
480
- else if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.SPEC) {
481
- result = this.ParseSpecialKeyword(Rtf.rgsymRtf[isym].idxInRgprop);
482
- }
483
- }
484
- return result;
485
- }
486
- validateProp(iprop) {
487
- let ret = Rtf_ErrorRtf.OK;
488
- if (this._destState === Rtf_RDS.SKIP) {
489
- return ret;
490
- }
491
- if (Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.DOP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.SEP &&
492
- Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.PAP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.CHP &&
493
- Rtf.rgprop[iprop].actn !== Rtf_ACTN.SPEC) {
494
- ret = Rtf_ErrorRtf.BAD_TABLE;
495
- }
496
- if (Rtf.rgprop[iprop].actn !== Rtf_ACTN.BYTE && Rtf.rgprop[iprop].actn !== Rtf_ACTN.WORD && Rtf.rgprop[iprop].actn !== Rtf_ACTN.SPEC) {
497
- ret = Rtf_ErrorRtf.BAD_TABLE;
498
- }
499
- return ret;
500
- }
501
- changeDestState() {
502
- if (this._destState === Rtf_RDS.SKIP) {
503
- return Rtf_ErrorRtf.OK;
504
- }
505
- this._destState = Rtf_RDS.SKIP;
506
- return Rtf_ErrorRtf.OK;
507
- }
508
- ParseSpecialKeyword(ipfn) {
509
- let ret = Rtf_ErrorRtf.OK;
510
- if (!UtilStrByteMode.isLocaleDefLangDBCS()) {
511
- if (this._destState === Rtf_RDS.SKIP && ipfn !== Rtf_IPFN.BIN) {
512
- return ret;
513
- }
514
- if (ipfn === Rtf_IPFN.FONT || ipfn === Rtf_IPFN.CHARSET || ipfn === Rtf_IPFN.UNICODE) {
515
- return ret;
516
- }
517
- }
518
- else {
519
- if (this._destState === Rtf_RDS.SKIP && ipfn !== Rtf_IPFN.BIN && ipfn !== Rtf_IPFN.FONT &&
520
- ipfn !== Rtf_IPFN.CHARSET && ipfn !== Rtf_IPFN.UNICODE) {
521
- return ret;
522
- }
523
- }
524
- if (ipfn === Rtf_IPFN.BIN) {
525
- this._internalState = Rtf_RIS.BIN;
526
- this._cbBin = this._lParam;
527
- }
528
- else if (ipfn === Rtf_IPFN.SKIP_DEST) {
529
- this._skipDestIfUnk = true;
530
- }
531
- else if (ipfn === Rtf_IPFN.HEX) {
532
- this._internalState = Rtf_RIS.HEX;
533
- }
534
- else if (ipfn === Rtf_IPFN.FONT) {
535
- this._fontNum = this._lParam;
536
- }
537
- else if (ipfn === Rtf_IPFN.CHARSET) {
538
- this._charsetTable.set_Item(this._fontNum, this._lParam);
539
- }
540
- else if (ipfn === Rtf_IPFN.UNICODE) {
541
- this._internalState = Rtf_RIS.UNICODE;
542
- }
543
- else {
544
- ret = Rtf_ErrorRtf.BAD_TABLE;
545
- }
546
- return ret;
547
- }
548
- static is1stByte(dbcsBytes, charset) {
549
- let ret = false;
550
- if (dbcsBytes > 255)
551
- return ret;
552
- switch (charset) {
553
- case 128:
554
- ret = (129 <= dbcsBytes && dbcsBytes <= 159) || (224 <= dbcsBytes && dbcsBytes <= 254);
555
- break;
556
- case 129:
557
- case 134:
558
- case 136:
559
- ret = (129 <= dbcsBytes);
560
- break;
561
- default:
562
- break;
563
- }
564
- return ret;
565
- }
566
- static is2ndByte(dbcsBytes, charset) {
567
- let ret = false;
568
- if (dbcsBytes > 255)
569
- return ret;
570
- switch (charset) {
571
- case 128:
572
- ret = (dbcsBytes !== 127) && (64 <= dbcsBytes && dbcsBytes <= 252);
573
- break;
574
- case 129:
575
- case 134:
576
- case 136:
577
- ret = (64 <= dbcsBytes);
578
- break;
579
- default:
580
- break;
581
- }
582
- return ret;
583
- }
584
- setCodePageTable() {
585
- this._codePageTable.set_Item(0, 1252);
586
- this._codePageTable.set_Item(128, 932);
587
- this._codePageTable.set_Item(129, 949);
588
- this._codePageTable.set_Item(134, 936);
589
- this._codePageTable.set_Item(136, 950);
590
- this._codePageTable.set_Item(161, 1253);
591
- this._codePageTable.set_Item(162, 1254);
592
- this._codePageTable.set_Item(177, 1255);
593
- this._codePageTable.set_Item(178, 1256);
594
- this._codePageTable.set_Item(186, 1257);
595
- this._codePageTable.set_Item(204, 1251);
596
- this._codePageTable.set_Item(222, 874);
597
- this._codePageTable.set_Item(238, 1250);
598
- }
599
- getCodePage(charset) {
600
- let codePage = 0;
601
- if (this._codePageTable.ContainsKey(charset)) {
602
- codePage = this._codePageTable.get_Item(charset);
603
- }
604
- return codePage;
605
- }
606
- getCharset(font) {
607
- let charset = 0;
608
- if (this._charsetTable.ContainsKey(font)) {
609
- charset = this._charsetTable.get_Item(font);
610
- }
611
- return charset;
612
- }
613
- }
614
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnRmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1J0Zi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHbEQsTUFBTSxPQUFPLFVBQVU7SUFDckIsU0FBUyxHQUFXLElBQUksQ0FBQztJQUV6QixHQUFHLEdBQVksSUFBSSxDQUFDO0lBRXBCLFdBQVcsR0FBUSxJQUFJLENBQUM7SUFNeEIsWUFBWSxPQUFlLEVBQUUsR0FBWSxFQUFFLFdBQWdCO1FBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFDbkIsSUFBSSxHQUFhLElBQUksQ0FBQztJQUV0QixJQUFJLEdBQWlCLElBQUksQ0FBQztJQUkxQixZQUFZLElBQWMsRUFBRSxJQUFrQjtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGFBQWE7SUFDakIsR0FBRyxHQUFZLElBQUksQ0FBQztJQUNwQixHQUFHLEdBQVksSUFBSSxDQUFDO0NBQ3JCO0FBRUQsTUFBTSxDQUFOLElBQVksT0FLWDtBQUxELFdBQVksT0FBTztJQUNqQixxQ0FBSSxDQUFBO0lBQ0oscUNBQUksQ0FBQTtJQUNKLHFDQUFJLENBQUE7SUFDSixxQ0FBSSxDQUFBO0FBQ04sQ0FBQyxFQUxXLE9BQU8sS0FBUCxP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QixDQUFDO0lBQ3JGLE1BQU0sQ0FBVSxVQUFVLEdBQVcsUUFBUSxDQUFDO0lBQzlDLE1BQU0sQ0FBVSxRQUFRLEdBQVcsS0FBSyxDQUFDO0lBR3pDLE1BQU0sQ0FBVSxNQUFNLEdBQWU7UUFDM0MsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7S0FDN0YsQ0FBQztJQUdNLE1BQU0sQ0FBVSxRQUFRLEdBQWlCO1FBQy9DLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQzFHLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQzNHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzVHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzVHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQzNILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQzdILElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xILElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3RHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ25ILElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ2xILElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3pILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQzNILElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQzNHLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ2hJLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3BILElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3pILElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ25ILElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3RILElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3hHLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2pHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzlHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2pILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2pILElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xILElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzNHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzFHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDbkQsQ0FBQztJQUlGO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFTRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQVc7UUFDdEIsSUFBSSxLQUFLLEdBQVksS0FBSyxDQUFDO1FBQzNCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuRCxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFhTSxLQUFLLENBQUMsTUFBYyxFQUFFLFNBQXdCO1FBQ25ELElBQUksT0FBTyxHQUFXLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUNqQyxJQUFJLFVBQWtCLENBQUM7UUFDdkIsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksRUFBZ0IsQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBZSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLGFBQWEsR0FBWSxLQUFLLENBQUM7UUFDbkMsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRTtZQUMvQixRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFZCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDakIsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO1lBR3RDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDO2FBQ2I7aUJBQ0k7Z0JBQ0gsUUFBUSxRQUFRLEVBQUU7b0JBQ2hCLEtBQUssV0FBVyxDQUFDLFlBQVk7d0JBQzNCLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7NEJBQzdDLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE1BQU07b0JBRVIsS0FBSyxXQUFXLENBQUMsWUFBWTt3QkFDM0IsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxZQUFZLENBQUMsRUFBRTs0QkFDNUMsT0FBTyxFQUFFLENBQUM7d0JBQ1osTUFBTTtvQkFFUixLQUFLLFdBQVcsQ0FBQyxTQUFTO3dCQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDO3dCQUNwQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7NEJBQ2pFLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE1BQU07b0JBRVIsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUNwQixLQUFLLFdBQVcsQ0FBQyxFQUFFO3dCQUNqQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTs0QkFFNUIsSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUUsRUFBRTtnQ0FDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQzs2QkFDbEM7eUJBQ0Y7NkJBQ0k7NEJBS0gsSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0NBQ2xHLE1BQU07eUJBQ1Q7b0JBR0g7d0JBQ0UsSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUU7NEJBQzdCLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7Z0NBQ2hFLE9BQU8sRUFBRSxDQUFDO3lCQUNiOzZCQUNJLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsT0FBTyxFQUFFOzRCQUNoRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsRUFBRTtnQ0FDekYsT0FBTyxFQUFFLENBQUM7NEJBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO3lCQUNwQzs2QkFDSTs0QkFFSCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssT0FBTyxDQUFDLEdBQUc7Z0NBQ3JDLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQzs0QkFDaEMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQ0FDekIsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FDN0M7Z0NBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29DQUMzQixJQUFJLFFBQVEsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLEdBQUc7d0NBQ2xDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQztvQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ3REO3FDQUNJO29DQUNILElBQUksUUFBUSxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsR0FBRzt3Q0FDbEMsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO29DQUNsQyxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FDdEQ7NkJBQ0Y7NEJBQ0QsT0FBTyxFQUFFLENBQUM7NEJBQ1YsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO2dDQUNqQixJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO29DQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0NBR3pDLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0NBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0NBQ2pCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0NBQ2pCLGFBQWEsR0FBRyxJQUFJLENBQUM7cUNBQ3RCO3lDQUNJO3dDQUVILElBQUksYUFBYSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzs0Q0FDNUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs2Q0FFZDs0Q0FDSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRDQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lDQUNsQjt3Q0FHRCxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3Q0FDckMsSUFBSSxPQUFPLEdBQVcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3Q0FDaEYsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzFCLGFBQWEsR0FBRyxLQUFLLENBQUM7cUNBQ3ZCO2lDQUNGO2dDQUNELElBQUksQ0FBQyxhQUFhLEVBQUU7b0NBQ2xCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7d0NBQzlFLE9BQU8sRUFBRSxDQUFDO2lDQUNiO2dDQUNELE9BQU8sR0FBRyxDQUFDLENBQUM7Z0NBQ1osQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDTixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7NkJBQ3BDO3lCQUNGO3dCQUVELE1BQU07aUJBQ1Q7YUFFRjtTQUVGO1FBR0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2pCLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQztRQU10QyxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNwVixTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkMsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFXTyxTQUFTLENBQUMsRUFBVSxFQUFFLFNBQXdCO1FBQ3BELElBQUksR0FBRyxHQUFpQixZQUFZLENBQUMsRUFBRSxDQUFDO1FBRXhDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7U0FDckM7YUFFSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtZQUV6QyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDckM7YUFDSTtTQUVKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBV08sU0FBUyxDQUFDLEVBQVUsRUFBRSxTQUF3QjtRQUdwRCxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtRQUVELE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBT08sU0FBUztRQUNmLElBQUksU0FBUyxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1FBRW5ELElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtZQUN0QixPQUFPLFlBQVksQ0FBQyxjQUFjLENBQUM7U0FDcEM7UUFFRCxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDaEMsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFZCxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQU9PLFFBQVE7UUFDZCxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVoRCxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDckIsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFZCxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQVdPLFlBQVksQ0FBQyxNQUFjLEVBQUUsU0FBd0I7UUFDM0QsSUFBSSxFQUFVLENBQUM7UUFDZixJQUFJLElBQUksR0FBWSxLQUFLLENBQUM7UUFDMUIsSUFBSSxTQUFTLEdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksV0FBVyxHQUFXLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0QsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO1NBQ2pDO1FBR0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdkIsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRTdCLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtZQUNkLElBQUksR0FBRyxJQUFJLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUM7U0FDbkM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRCxXQUFXLEdBQUcsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUVqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFMUMsSUFBSSxJQUFJO2dCQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxFQUFFLEtBQUssR0FBRztZQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVoQixJQUFJLFNBQVMsS0FBTSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBUS9CLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFO2dCQUN0RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQ3hCO2FBQ0k7WUFDSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBV08sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxTQUF3QjtRQUNsRSxJQUFJLE1BQU0sR0FBaUIsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQVksQ0FBQztRQUdqQixLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2pELElBQUksU0FBUyxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO2dCQUM5QyxNQUFNO2FBQ1A7U0FDRjtRQUdELElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2FBRWhDO1lBR0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7U0FDN0I7YUFDSTtZQUNILE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBR2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBRTVCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDM0MsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN2RTtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hELE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUN0RTtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hELE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDakM7aUJBQ0ksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNoRCxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFXLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDN0U7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFTTyxZQUFZLENBQUMsS0FBZ0I7UUFDbkMsSUFBSSxHQUFHLEdBQWlCLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFFcEMsT0FBTyxHQUFHLENBQUM7U0FFWjtRQUdELElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRztZQUM1RixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHO1lBQzFGLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7U0FDOUI7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ3BJLEdBQUcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBT08sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtZQUVwQyxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7U0FFeEI7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFHL0IsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFTTyxtQkFBbUIsQ0FBQyxJQUFjO1FBQ3hDLElBQUksR0FBRyxHQUFpQixZQUFZLENBQUMsRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFFN0QsT0FBTyxHQUFHLENBQUM7YUFFWjtZQUVELElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BGLE9BQU8sR0FBRyxDQUFDO2FBQ1o7U0FDRjthQUNJO1lBQ0gsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNyRixJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDeEQsT0FBTyxHQUFHLENBQUM7YUFDWjtTQUNGO1FBRUQsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzVCO2FBQ0ksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjthQUNJLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1NBQ25DO2FBQ0ksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDdEM7YUFDSSxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xFO2FBQ0ksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDdkM7YUFDSTtZQUNILEdBQUcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDekQsSUFBSSxHQUFHLEdBQVksS0FBSyxDQUFDO1FBRXpCLElBQUksU0FBUyxHQUFHLEdBQUc7WUFDakIsT0FBTyxHQUFHLENBQUM7UUFFYixRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssR0FBRztnQkFDTixHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RixNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFXTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN6RCxJQUFJLEdBQUcsR0FBWSxLQUFLLENBQUM7UUFDekIsSUFBSSxTQUFTLEdBQUcsR0FBRztZQUNqQixPQUFPLEdBQUcsQ0FBQztRQUViLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxHQUFHO2dCQUNOLEdBQUcsR0FBRyxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFRTyxnQkFBZ0I7UUFFdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFTTyxXQUFXLENBQUMsT0FBZTtRQUNqQyxJQUFJLFFBQVEsR0FBVyxDQUFDLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBU08sVUFBVSxDQUFDLElBQVk7UUFDN0IsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW5jb2RpbmcsIEhhc2h0YWJsZSwgTkNoYXIsIE5OdW1iZXIsIFN0YWNrLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtVdGlsU3RyQnl0ZU1vZGV9IGZyb20gXCIuL1V0aWxTdHJCeXRlTW9kZVwiO1xyXG5cclxuLy9AZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgUnRmX1NZTUJPTCB7XHJcbiAgc3pLZXl3b3JkOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8qIFJURiBrZXl3b3JkICovXHJcbiAga3dkOiBSdGZfS1dEID0gbnVsbDtcclxuICAvKiBiYXNlIGFjdGlvbiB0byB0YWtlICovXHJcbiAgaWR4SW5SZ3Byb3A6IGFueSA9IG51bGw7XHJcbiAgLyogaW5kZXggaW50byBwcm9wZXJ0eSB0YWJsZSBpZiBrd2QgPT0ga3dkUHJvcCAqL1xyXG5cclxuICAvKiBpbmRleCBpbnRvIGRlc3RpbmF0aW9uIHRhYmxlIGlmIGt3ZCA9PSBrd2REZXN0ICAqL1xyXG5cclxuICAvKiBjaGFyYWN0ZXIgdG8gcHJpbnQgaWYga3dkID09IGt3ZENoYXIgICAgICAgICAgICAqL1xyXG4gIGNvbnN0cnVjdG9yKGtleVdvcmQ6IHN0cmluZywga3dkOiBSdGZfS1dELCBpZHhJblJncHJvcDogYW55KSB7XHJcbiAgICB0aGlzLnN6S2V5d29yZCA9IGtleVdvcmQ7XHJcbiAgICB0aGlzLmt3ZCA9IGt3ZDtcclxuICAgIHRoaXMuaWR4SW5SZ3Byb3AgPSBpZHhJblJncHJvcDtcclxuICB9XHJcbn1cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFJ0Zl9QUk9QIHtcclxuICBhY3RuOiBSdGZfQUNUTiA9IG51bGw7XHJcbiAgLyogc2l6ZSBvZiB2YWx1ZSAqL1xyXG4gIHByb3A6IFJ0Zl9QUk9QVFlQRSA9IG51bGw7XHJcblxyXG4gIC8qIHN0cnVjdHVyZSBjb250YWluaW5nIHZhbHVlICovXHJcblxyXG4gIGNvbnN0cnVjdG9yKGFjdG46IFJ0Zl9BQ1ROLCBwcm9wOiBSdGZfUFJPUFRZUEUpIHtcclxuICAgIHRoaXMuYWN0biA9IGFjdG47XHJcbiAgICB0aGlzLnByb3AgPSBwcm9wO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgUnRmX1N0YWNrU2F2ZSB7XHJcbiAgcmRzOiBSdGZfUkRTID0gbnVsbDtcclxuICByaXM6IFJ0Zl9SSVMgPSBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfS1dEIHtcclxuICBDSEFSLFxyXG4gIERFU1QsXHJcbiAgUFJPUCxcclxuICBTUEVDXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9QUk9QVFlQRSB7XHJcbiAgQ0hQLFxyXG4gIFBBUCxcclxuICBTRVAsXHJcbiAgRE9QXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9BQ1ROIHtcclxuICBTUEVDLFxyXG4gIEJZVEUsXHJcbiAgV09SRFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfSVBGTiB7XHJcbiAgQklOLFxyXG4gIEhFWCxcclxuICBTS0lQX0RFU1QsXHJcbiAgQlJFQUssXHJcbiAgTkVXLFxyXG4gIEZPTlQsXHJcbiAgQ0hBUlNFVCxcclxuICBVTklDT0RFXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9JREVTVCB7XHJcbiAgUElDVCxcclxuICBDT0xPUixcclxuICBTS0lQXHJcbn1cclxuXHJcbi8qIHR5cGVzIG9mIHByb3BlcnRpZXMgKi9cclxuZXhwb3J0IGVudW0gUnRmX0lQUk9QIHtcclxuICBCT0xEID0gMCxcclxuICBJVEFMSUMsXHJcbiAgVU5ERVJMSU5FLFxyXG4gIEZPTlQsXHJcbiAgU0laRSxcclxuICBDT0xPUixcclxuICBSRUQsXHJcbiAgR1JFRU4sXHJcbiAgQkxVRSxcclxuICBMRUZUX0lORCxcclxuICBSSUdIVF9JTkQsXHJcbiAgRklSU1RfSU5ELFxyXG4gIENPTFMsXHJcbiAgUEdOX1gsXHJcbiAgUEdOX1ksXHJcbiAgWEFfUEFHRSxcclxuICBZQV9QQUdFLFxyXG4gIFhBX0xFRlQsXHJcbiAgWEFfUklHSFQsXHJcbiAgWUFfVE9QLFxyXG4gIFlBX0JPVFRPTSxcclxuICBQR05fU1RBUlQsXHJcbiAgU0JLLFxyXG4gIFBHTl9GT1JNQVQsXHJcbiAgRkFDSU5HX1AsXHJcbiAgTEFORFNDQVBFLFxyXG4gIEpVU1QsXHJcbiAgUEFSRCxcclxuICBQTEFJTixcclxuICBTRUNURCxcclxuICBCVUxMRVQsXHJcbiAgWEFfQlVMTEVULFxyXG4gIE1BWFxyXG59XHJcblxyXG4vKiBSdGYgRGVzdGluYXRpb24gU3RhdGUgKi9cclxuZXhwb3J0IGVudW0gUnRmX1JEUyB7XHJcbiAgTk9STSxcclxuICBDT0xPUixcclxuICBTS0lQLFxyXG4gIE5FV1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfRXJyb3JSdGYge1xyXG4gIE9LLFxyXG4gIFNUQUNLX1VOREVSRkxPVyxcclxuICBTVEFDS19PVkVSRkxPVyxcclxuICBVTk1BVENIRURfQlJBQ0UsXHJcbiAgSU5WQUxJRF9IRVgsXHJcbiAgQkFEX1RBQkxFLFxyXG4gIEFTU0VSVElPTixcclxuICBFTkRfT0ZfRklMRSxcclxuICBCVUZGRVJfVE9PX1NNQUxMXHJcbn1cclxuXHJcbi8vIFRPRE8gOlxyXG4vLyBSdGZfUnRmQ2hhciBzaG91bGQgYWN0dWFsbHkgYmUgZW51bS5cclxuLy8gQnV0IGNvbXB1dGVkIHN0cmluZyB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIGRlZmluZWQgaW4gZW51bS5cclxuLy8gU28sIHdlIGNhbm5vdCBoYXZlIFN0cmluZy5mcm9tQ2hhckNvZGUoWFhYKS5cclxuLy8gV2UgaGF2ZSAyIG9wdGlvbnM6XHJcbi8vIDEuIENvbnZlcnQgdGhpcyBlbnVtIGludG8gYSBjbGFzcyB3aXRoIGFsbCBzdGF0aWMgcmVhZG9ubHkgaXRlbXMuXHJcbi8vIDIuIEtlZXAgaXQgYXMgZW51bSB3aXRoIG51bWVyaWMgdmFsdWVzIChjaGFyIGNvZGVzKS5cclxuLy8gR29pbmcgd2l0aCAjMSBub3csIHNpbmNlIEAyIG1ha2VzIHRoZSBjb2RlIHVnbHkuXHJcbi8vIFdpbGwgZXZhbGF1dGUgbGF0ZXIgaWYgcmVxdWlyZWQuXHJcbmV4cG9ydCBjbGFzcyBSdGZfUnRmQ2hhciB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IENSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDBkKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgTEYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MEEpO1xyXG4gIHN0YXRpYyByZWFkb25seSBUQUIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDkpO1xyXG4gIHN0YXRpYyByZWFkb25seSBCVUxMRVQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4OTUpO1xyXG4gIHN0YXRpYyByZWFkb25seSBUSUxEQSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhBMCk7XHJcbiAgc3RhdGljIHJlYWRvbmx5IERBU0ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4QUQpO1xyXG4gIHN0YXRpYyByZWFkb25seSBEQVNIX0NIQVIgPSAnLSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFFVT1RFID0gJ1xcJyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IERCTFFVT1RFID0gJ1wiJztcclxuICBzdGF0aWMgcmVhZG9ubHkgT1BFTklOR0JSQUNFID0gJ3snO1xyXG4gIHN0YXRpYyByZWFkb25seSBDTE9TSU5HQlJBQ0UgPSAnfSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEJBQ0tTTEFTSCA9ICdcXFxcJztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX1JJUyB7XHJcbiAgTk9STSxcclxuICBCSU4sXHJcbiAgSEVYLFxyXG4gIFVOSUNPREVcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJ0ZiB7XHJcbiAgcHJpdmF0ZSBfZ3JvdXA6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY2JCaW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbFBhcmFtOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NraXBEZXN0SWZVbms6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9vdXRwdXRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc0NybGZTcGVjaWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGVzdFN0YXRlOiBSdGZfUkRTID0gbnVsbDtcclxuICBwcml2YXRlIF9pbnRlcm5hbFN0YXRlOiBSdGZfUklTID0gbnVsbDtcclxuICBwcml2YXRlIF9zdGFjazogU3RhY2s8UnRmX1N0YWNrU2F2ZT4gPSBudWxsO1xyXG4gIHByaXZhdGUgX2luZGV4OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2ZvbnROdW06IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhcnNldFRhYmxlOiBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+ID0gbmV3IEhhc2h0YWJsZTxudW1iZXIsIG51bWJlcj4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2RlUGFnZVRhYmxlOiBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+ID0gbmV3IEhhc2h0YWJsZTxudW1iZXIsIG51bWJlcj4oKTtcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBSVEZfUFJFRklYOiBzdHJpbmcgPSBcIntcXFxccnRmXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ0hBUl9QQVI6IHN0cmluZyA9IFwicGFyXCI7XHJcblxyXG4gIC8qIFByb3BlcnR5IGRlc2NyaXB0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJncHJvcDogUnRmX1BST1BbXSA9IFtcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLlBBUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLlBBUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuUEFQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuU0VQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5TRVApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5TRVApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuRE9QKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuRE9QKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLlNFUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuU0VQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuRE9QKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5ET1ApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5QQVApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uU1BFQywgUnRmX1BST1BUWVBFLlBBUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uU1BFQywgUnRmX1BST1BUWVBFLkNIUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5TUEVDLCBSdGZfUFJPUFRZUEUuU0VQKVxyXG4gIF07XHJcblxyXG4gIC8qIEtleXdvcmQgZGVzY3JpcHRpb25zICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcmdzeW1SdGY6IFJ0Zl9TWU1CT0xbXSA9IFtcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiYlwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5CT0xEKSwgbmV3IFJ0Zl9TWU1CT0woXCJ1bFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5VTkRFUkxJTkUpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJpXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLklUQUxJQyksIG5ldyBSdGZfU1lNQk9MKFwibGlcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuTEVGVF9JTkQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJyaVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5SSUdIVF9JTkQpLCBuZXcgUnRmX1NZTUJPTChcImZpXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkZJUlNUX0lORCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImNvbHNcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuQ09MUyksIG5ldyBSdGZfU1lNQk9MKFwic2Jrbm9uZVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5TQkspLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJzYmtjb2xcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuU0JLKSwgbmV3IFJ0Zl9TWU1CT0woXCJzYmtldmVuXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlNCSyksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInNia29kZFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5TQkspLCBuZXcgUnRmX1NZTUJPTChcInNia3BhZ2VcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuU0JLKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGdueFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fWCksIG5ldyBSdGZfU1lNQk9MKFwicGdueVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fWSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBnbmRlY1wiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSwgbmV3IFJ0Zl9TWU1CT0woXCJwZ251Y3JtXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlBHTl9GT1JNQVQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJwZ25sY3JtXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlBHTl9GT1JNQVQpLCBuZXcgUnRmX1NZTUJPTChcInBnbnVjbHRyXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlBHTl9GT1JNQVQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJwZ25sY2x0clwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSwgbmV3IFJ0Zl9TWU1CT0woXCJxY1wiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5KVVNUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicWxcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuSlVTVCksIG5ldyBSdGZfU1lNQk9MKFwicXJcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuSlVTVCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInFqXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkpVU1QpLCBuZXcgUnRmX1NZTUJPTChcInBhcGVyd1wiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5YQV9QQUdFKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGFwZXJoXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLllBX1BBR0UpLCBuZXcgUnRmX1NZTUJPTChcIm1hcmdsXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlhBX0xFRlQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJtYXJnclwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5YQV9SSUdIVCksIG5ldyBSdGZfU1lNQk9MKFwibWFyZ3RcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuWUFfVE9QKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwibWFyZ2JcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuWUFfQk9UVE9NKSwgbmV3IFJ0Zl9TWU1CT0woXCJwZ25zdGFydFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fU1RBUlQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmYWNpbmdwXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkZBQ0lOR19QKSwgbmV3IFJ0Zl9TWU1CT0woXCJsYW5kc2NhcGVcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuTEFORFNDQVBFKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGFyXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuTEYpLCBuZXcgUnRmX1NZTUJPTChcIlxcMHgwYVwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkxGKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiXFwweDBkXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuTEYpLCBuZXcgUnRmX1NZTUJPTChcInRhYlwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLlRBQiksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImxkYmxxdW90ZVwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRCTFFVT1RFKSwgbmV3IFJ0Zl9TWU1CT0woXCJyZGJscXVvdGVcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5EQkxRVU9URSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImxxdW90ZVwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLlFVT1RFKSwgbmV3IFJ0Zl9TWU1CT0woXCJycXVvdGVcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5RVU9URSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImJ1bGxldFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkJVTExFVCksIG5ldyBSdGZfU1lNQk9MKFwiZW5kYXNoXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuREFTSF9DSEFSKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiZW1kYXNoXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuREFTSF9DSEFSKSwgbmV3IFJ0Zl9TWU1CT0woXCJ+XCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuVElMREEpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCItXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuREFTSCksIG5ldyBSdGZfU1lNQk9MKFwie1wiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLk9QRU5JTkdCUkFDRSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcIn1cIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5DTE9TSU5HQlJBQ0UpLCBuZXcgUnRmX1NZTUJPTChcIlxcXFxcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5CQUNLU0xBU0gpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJiaW5cIiwgUnRmX0tXRC5TUEVDLCBSdGZfSVBGTi5CSU4pLCBuZXcgUnRmX1NZTUJPTChcIipcIiwgUnRmX0tXRC5TUEVDLCBSdGZfSVBGTi5TS0lQX0RFU1QpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCInXCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uSEVYKSwgbmV3IFJ0Zl9TWU1CT0woXCJmXCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uRk9OVCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImZjaGFyc2V0XCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uQ0hBUlNFVCksIG5ldyBSdGZfU1lNQk9MKFwidVwiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLlVOSUNPREUpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJhdXRob3JcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiYnVwdGltXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJjb2xvcnRibFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJjb21tZW50XCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJjcmVhdGltXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImRvY2NvbW1cIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImZvbnR0YmxcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiZm9vdGVyXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmb290ZXJmXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImZvb3RlcmxcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImZvb3RlcnJcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiZm9vdG5vdGVcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImZ0bmNuXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImZ0bnNlcFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiZnRuc2VwY1wiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJoZWFkZXJcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImhlYWRlcmZcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiaGVhZGVybFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiaGVhZGVyclwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJpbmZvXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJrZXl3b3Jkc1wiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJvcGVyYXRvclwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGljdFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJwcmludGltXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJwcml2YXRlMVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJyZXZ0aW1cIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInJ4ZVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJzdHlsZXNoZWV0XCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJzdWJqZWN0XCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcInRjXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJ0aXRsZVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJ0eGVcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInhlXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApXHJcbiAgXTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDb25zdHJ1Y3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9zdGFjayA9IG5ldyBTdGFjazxSdGZfU3RhY2tTYXZlPigpO1xyXG4gICAgdGhpcy5fZ3JvdXAgPSAwO1xyXG4gICAgdGhpcy5fY2JCaW4gPSAwO1xyXG4gICAgdGhpcy5fbFBhcmFtID0gMDtcclxuICAgIHRoaXMuX291dHB1dE9uY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuX3NraXBEZXN0SWZVbmsgPSBmYWxzZTtcclxuICAgIHRoaXMuX3Byb2Nlc3NDcmxmU3BlY2lhbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZGVzdFN0YXRlID0gUnRmX1JEUy5OT1JNO1xyXG4gICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IFJ0Zl9SSVMuTk9STTtcclxuICAgIHRoaXMuX2ZvbnROdW0gPSAwO1xyXG4gICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgdGhpcy5zZXRDb2RlUGFnZVRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENoZWNrcyBpZiB0aGUgYmxvYiBoYXMgYSBSdGYgZGF0YSBvciBub3RcclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc1J0ZihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzUnRmOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoc3RyICE9PSBudWxsICYmIHN0ci5zdGFydHNXaXRoKHRoaXMuUlRGX1BSRUZJWCkpIHtcclxuICAgICAgaXNSdGYgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzUnRmO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDb252ZXJ0cyBSdGYgVGV4dCB0byBQbGFpbiBUZXh0XHJcbiAgLy8vIFN0ZXAgMTogSXNvbGF0ZSBSVEYga2V5d29yZHMgYW5kIHNlbmQgdGhlbSB0byBQYXJzZUtleXdvcmQ7IFB1c2ggYW5kIHBvcCBzdGF0ZSBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZlxyXG4gIC8vLyBSVEYgZ3JvdXBzIFNlbmQgdGV4dCB0byBQYXJzZUNoYXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJ0ZlR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dHB1dFR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyB0b1R4dChydGZUeHQ6IHN0cmluZywgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCBjTmliYmxlOiBudW1iZXIgPSAyO1xyXG4gICAgbGV0IGI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY3VyclBvczogbnVtYmVyID0gMDtcclxuICAgIGxldCBza2lwTmV3bGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGJsb2JTdHJMZW46IG51bWJlcjtcclxuICAgIGxldCBibG9iQ2hhcjogc3RyaW5nO1xyXG4gICAgbGV0IGVjOiBSdGZfRXJyb3JSdGY7XHJcbiAgICBsZXQgZGJjc0J5dGVzOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMik7XHJcbiAgICBsZXQgc2tpcFBhcnNlQ2hhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGNoYXJzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY29kZVBhZ2U6IG51bWJlciA9IDA7XHJcblxyXG4gICAgdGhpcy5fb3V0cHV0T25jZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsID0gZmFsc2U7XHJcbiAgICBibG9iU3RyTGVuID0gcnRmVHh0Lmxlbmd0aDtcclxuICAgIHRoaXMuX2luZGV4ID0gMDtcclxuICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IFJ0Zl9SRFMuTk9STTtcclxuICAgIGlmIChydGZUeHQgPT09IG51bGwgfHwgYmxvYlN0ckxlbiA9PT0gMCB8fCAhUnRmLmlzUnRmKHJ0ZlR4dCkpIHtcclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5faW5kZXggPCBibG9iU3RyTGVuKSB7XHJcbiAgICAgIGJsb2JDaGFyID0gcnRmVHh0W3RoaXMuX2luZGV4XTtcclxuICAgICAgdGhpcy5faW5kZXgrKztcclxuXHJcbiAgICAgIGlmICh0aGlzLl9ncm91cCA8IDApXHJcbiAgICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5TVEFDS19VTkRFUkZMT1c7XHJcblxyXG4gICAgICAvKiBpZiB3ZSdyZSBwYXJzaW5nIGJpbmFyeSBkYXRhLCBoYW5kbGUgaXQgZGlyZWN0bHkgKi9cclxuICAgICAgaWYgKHRoaXMuX2ludGVybmFsU3RhdGUgPT09IFJ0Zl9SSVMuQklOKSB7XHJcbiAgICAgICAgaWYgKChlYyA9IHRoaXMuUGFyc2VDaGFyKGJsb2JDaGFyLCBvdXRwdXRUeHQpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHN3aXRjaCAoYmxvYkNoYXIpIHtcclxuICAgICAgICAgIGNhc2UgUnRmX1J0ZkNoYXIuT1BFTklOR0JSQUNFOlxyXG4gICAgICAgICAgICBza2lwTmV3bGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5QdXNoU3RhdGUoKSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgICAgICByZXR1cm4gZWM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgUnRmX1J0ZkNoYXIuQ0xPU0lOR0JSQUNFOlxyXG4gICAgICAgICAgICBza2lwTmV3bGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBvcFN0YXRlKCkpICE9PSBSdGZfRXJyb3JSdGYuT0spXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLkJBQ0tTTEFTSDpcclxuICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKChlYyA9IHRoaXMuUGFyc2VLZXl3b3JkKHJ0ZlR4dCwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgICAgICByZXR1cm4gZWM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgUnRmX1J0ZkNoYXIuTEY6XHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLkNSOiAgLyogY3IgYW5kIGxmIGFyZSBub2lzZSBjaGFyYWN0ZXJzLi4uICovXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzQ3JsZlNwZWNpYWwpIHtcclxuICAgICAgICAgICAgICAvKiBPbmNlIHdlIHJlYWNoIHRoZSAweDBhIHdoaWxlIFByb2Nlc3NDUkxGU3BlY2lhbF8sIHJlc2V0IHRoZSBQcm9jZXNzQ1JMRlNwZWNpYWxfICovXHJcbiAgICAgICAgICAgICAgaWYgKGJsb2JDaGFyID09PSBSdGZfUnRmQ2hhci5MRikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgICAvKiBza2lwIG5ldyBsaW5lcyBjb21pbmcgb25seSBmcm9tIHRoZSBSVEYgaGVhZGVyIDEvMS85OCAtICMyMzkwICovXHJcbiAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgICAgICAgICAgIC8qIFNraXAgdGhlIExGICgweDBhKSBpZiB3ZSBhcmUgbm90IGluIHRoZSBQcm9jZXNzQ1JMRlNwZWNpYWxfICovXHJcbiAgICAgICAgICAgICAgaWYgKGJsb2JDaGFyID09PSBSdGZfUnRmQ2hhci5MRiB8fCAoYmxvYkNoYXIgPT09IFJ0Zl9SdGZDaGFyLkNSICYmIHNraXBOZXdsaW5lICYmICF0aGlzLl9vdXRwdXRPbmNlKSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgaWYgKGJsb2JDaGFyICE9PSBSdGZfUnRmQ2hhci5DUilcclxuICAgICAgICAgICAgICBza2lwTmV3bGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxTdGF0ZSA9PT0gUnRmX1JJUy5OT1JNKSB7XHJcbiAgICAgICAgICAgICAgaWYgKChlYyA9IHRoaXMuUGFyc2VDaGFyKGJsb2JDaGFyLCBvdXRwdXRUeHQpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2ludGVybmFsU3RhdGUgPT09IFJ0Zl9SSVMuVU5JQ09ERSkge1xyXG4gICAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlQ2hhcihTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2xQYXJhbSksIG91dHB1dFR4dCkpICE9PSBSdGZfRXJyb3JSdGYuT0spXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWM7XHJcbiAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IFJ0Zl9SSVMuTk9STTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAvKiBwYXJzaW5nIGhleCBkYXRhICovXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsU3RhdGUgIT09IFJ0Zl9SSVMuSEVYKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5BU1NFUlRJT047XHJcbiAgICAgICAgICAgICAgYiA9IGIgPDwgNDtcclxuICAgICAgICAgICAgICBpZiAoTkNoYXIuSXNEaWdpdChibG9iQ2hhcikpXHJcbiAgICAgICAgICAgICAgICBiICs9IGJsb2JDaGFyLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChOQ2hhci5Jc0xvd2VyKGJsb2JDaGFyKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYmxvYkNoYXIgPCAnYScgfHwgYmxvYkNoYXIgPiAnZicpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5JTlZBTElEX0hFWDtcclxuICAgICAgICAgICAgICAgICAgYiArPSAxMCArIGJsb2JDaGFyLmNoYXJDb2RlQXQoMCkgLSAnYScuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYmxvYkNoYXIgPCAnQScgfHwgYmxvYkNoYXIgPiAnRicpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5JTlZBTElEX0hFWDtcclxuICAgICAgICAgICAgICAgICAgYiArPSAxMCArIGJsb2JDaGFyLmNoYXJDb2RlQXQoMCkgLSAnQScuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY05pYmJsZS0tO1xyXG4gICAgICAgICAgICAgIGlmIChjTmliYmxlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gdGhpcy5nZXRDaGFyc2V0KHRoaXMuX2ZvbnROdW0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gbGVhZGluZyBieXRlIG9mIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgIGlmICghc2tpcFBhcnNlQ2hhciAmJiBSdGYuaXMxc3RCeXRlKGIsIGNoYXJzZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGJjc0J5dGVzWzBdID0gYjtcclxuICAgICAgICAgICAgICAgICAgICBkYmNzQnl0ZXNbMV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHNraXBQYXJzZUNoYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRyYWlsaW5nIGJ5dGUgb2YgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2tpcFBhcnNlQ2hhciAmJiBSdGYuaXMybmRCeXRlKGIsIGNoYXJzZXQpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgZGJjc0J5dGVzWzFdID0gYjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRiY3NCeXRlc1swXSA9IGI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYmNzQnl0ZXNbMV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBEQkNTIHRvIFVuaWNvZGVcclxuICAgICAgICAgICAgICAgICAgICBjb2RlUGFnZSA9IHRoaXMuZ2V0Q29kZVBhZ2UoY2hhcnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdvcmtTdHI6IHN0cmluZyA9IEVuY29kaW5nLkdldEVuY29kaW5nKGNvZGVQYWdlKS5HZXRTdHJpbmcoZGJjc0J5dGVzLCAwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBiID0gd29ya1N0ci5jaGFyQ29kZUF0KDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHNraXBQYXJzZUNoYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFza2lwUGFyc2VDaGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlQ2hhcihTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLCBvdXRwdXRUeHQpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNOaWJibGUgPSAyO1xyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5OT1JNO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvKiBlbmQgZWxzZSAocmlzICE9IHJpc05vcm0pICovXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKiBzd2l0Y2ggKi9cclxuICAgICAgfVxyXG4gICAgICAvKiBlbHNlIChyaXMgIT0gcmlzQmluKSAqL1xyXG4gICAgfVxyXG4gICAgLyogd2hpbGUgKi9cclxuXHJcbiAgICBpZiAodGhpcy5fZ3JvdXAgPCAwKVxyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLlNUQUNLX1VOREVSRkxPVztcclxuICAgIGlmICh0aGlzLl9ncm91cCA+IDApXHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuVU5NQVRDSEVEX0JSQUNFO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBFbGltaW5hdGUgc3VmZml4IG9mIGNhcnJpZ2UgcmV0dXJuICsgbGluZSBmZWVkICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgLyogKENoZWNrIGxhc3QgY2hhcmFjdGVycyAtIGp1c3QgaW4gY2FzZSBmb3JtYXQgaXMgbm90IHRoZSBleHBlY3RlZCkgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBjdXJyUG9zID0gb3V0cHV0VHh0Lkxlbmd0aDtcclxuICAgIGlmIChjdXJyUG9zID49IDMgJiYgKG91dHB1dFR4dC5nZXRfSXRlbShjdXJyUG9zIC0gMykgPT09IFJ0Zl9SdGZDaGFyLkNSICYmIG91dHB1dFR4dC5nZXRfSXRlbShjdXJyUG9zIC0gMikgPT09IFJ0Zl9SdGZDaGFyLkxGICYmIG91dHB1dFR4dC5nZXRfSXRlbShjdXJyUG9zIC0gMSkgPT09IFJ0Zl9SdGZDaGFyLkNSIHx8IG91dHB1dFR4dC5nZXRfSXRlbShjdXJyUG9zIC0gMykgPT09IFJ0Zl9SdGZDaGFyLkxGICYmIG91dHB1dFR4dC5nZXRfSXRlbShjdXJyUG9zIC0gMikgPT09IFJ0Zl9SdGZDaGFyLkNSICYmIG91dHB1dFR4dC5nZXRfSXRlbShjdXJyUG9zIC0gMSkgPT09IFJ0Zl9SdGZDaGFyLkNSKSlcclxuICAgICAgb3V0cHV0VHh0LlJlbW92ZShjdXJyUG9zIC0gMywgMyk7XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUm91dGUgdGhlIGNoYXJhY3RlciB0byB0aGUgYXBwcm9wcmlhdGUgZGVzdGluYXRpb24gc3RyZWFtLlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2hcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRwdXRUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIFBhcnNlQ2hhcihjaDogc3RyaW5nLCBvdXRwdXRUeHQ6IFN0cmluZ0J1aWxkZXIpOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IHJldDogUnRmX0Vycm9yUnRmID0gUnRmX0Vycm9yUnRmLk9LO1xyXG5cclxuICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlID09PSBSdGZfUklTLkJJTiAmJiAtLXRoaXMuX2NiQmluIDw9IDApIHtcclxuICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IFJ0Zl9SSVMuTk9STTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVApIHtcclxuICAgIH1cclxuICAgIC8qIFRvc3MgdGhpcyBjaGFyYWN0ZXIuICovXHJcbiAgICBlbHNlIGlmICh0aGlzLl9kZXN0U3RhdGUgPT09IFJ0Zl9SRFMuTk9STSkge1xyXG4gICAgICAvKiBPdXRwdXQgYSBjaGFyYWN0ZXIuIFByb3BlcnRpZXMgYXJlIHZhbGlkIGF0IHRoaXMgcG9pbnQuICovXHJcbiAgICAgIHJldCA9IHRoaXMuUHJpbnRDaGFyKGNoLCBvdXRwdXRUeHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8qIGhhbmRsZSBvdGhlciBkZXN0aW5hdGlvbnMuLi4uICovXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBTZW5kIGEgY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgZmlsZS5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib3V0cHV0VHh0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQcmludENoYXIoY2g6IHN0cmluZywgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIC8qIEFsbG93IGNhcnJpZ2UgcmV0dXJuICsgbGluZSBmZWVkIGluIHRleHQsIGJ1dCByZW1vdmUgYnVsbGV0IHNpZ24gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICgoY2ggPj0gJyAnIHx8IGNoID09PSBSdGZfUnRmQ2hhci5DUiB8fCBjaCA9PT0gUnRmX1J0ZkNoYXIuTEYpICYmIGNoICE9PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDE4MykpIHtcclxuICAgICAgb3V0cHV0VHh0LkFwcGVuZChjaCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoID49ICcgJykge1xyXG4gICAgICB0aGlzLl9vdXRwdXRPbmNlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUnRmX0Vycm9yUnRmLk9LO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBTYXZlIHJlbGV2YW50IGluZm8gb24gYSBsaW5rZWQgbGlzdCBvZiBTQVZFIHN0cnVjdHVyZXMuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIFB1c2hTdGF0ZSgpOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IHN0YWNrU2F2ZTogUnRmX1N0YWNrU2F2ZSA9IG5ldyBSdGZfU3RhY2tTYXZlKCk7XHJcblxyXG4gICAgaWYgKHN0YWNrU2F2ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLlNUQUNLX09WRVJGTE9XO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YWNrU2F2ZS5yZHMgPSB0aGlzLl9kZXN0U3RhdGU7XHJcbiAgICBzdGFja1NhdmUucmlzID0gdGhpcy5faW50ZXJuYWxTdGF0ZTtcclxuICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcblxyXG4gICAgdGhpcy5fc3RhY2sucHVzaChzdGFja1NhdmUpO1xyXG4gICAgdGhpcy5fZ3JvdXArKztcclxuXHJcbiAgICByZXR1cm4gUnRmX0Vycm9yUnRmLk9LO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBBbHdheXMgcmVzdG9yZSByZWxldmFudCBpbmZvIGZyb20gdGhlIHRvcCBvZiB0aGUgU0FWRSBsaXN0LlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQb3BTdGF0ZSgpOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IHNhdmVkUG9wOiBSdGZfU3RhY2tTYXZlID0gdGhpcy5fc3RhY2sucG9wKCk7XHJcblxyXG4gICAgaWYgKHNhdmVkUG9wID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuU1RBQ0tfVU5ERVJGTE9XO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IHNhdmVkUG9wLnJkcztcclxuICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBzYXZlZFBvcC5yaXM7XHJcblxyXG4gICAgdGhpcy5fZ3JvdXAtLTtcclxuXHJcbiAgICByZXR1cm4gUnRmX0Vycm9yUnRmLk9LO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBTdGVwIDI6IGdldCBhIGNvbnRyb2wgd29yZCAoYW5kIGl0cyBhc3NvY2lhdGVkIHZhbHVlKSBhbmQgY2FsbCBUcmFuc2xhdGVLZXl3b3JkIHRvIGRpc3BhdGNoIHRoZSBjb250cm9sLlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicnRmVHh0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib3V0cHV0VHh0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQYXJzZUtleXdvcmQocnRmVHh0OiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBsZXQgY2g6IHN0cmluZztcclxuICAgIGxldCBmTmVnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3pLZXl3b3JkOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IHN6UGFyYW1ldGVyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIGlmICgoY2ggPSBydGZUeHRbdGhpcy5faW5kZXgrK10pID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApKSB7XHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuRU5EX09GX0ZJTEU7XHJcbiAgICB9XHJcblxyXG4gICAgLyogYSBjb250cm9sIHN5bWJvbDsgbm8gZGVsaW1pdGVyLiAqL1xyXG4gICAgaWYgKCFOQ2hhci5Jc0xldHRlcihjaCkpIHtcclxuICAgICAgc3pLZXl3b3JkID0gc3pLZXl3b3JkICsgY2g7XHJcbiAgICAgIHJldHVybiB0aGlzLlRyYW5zbGF0ZUtleXdvcmQoc3pLZXl3b3JkLCBvdXRwdXRUeHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoOyBOQ2hhci5Jc0xldHRlcihjaCk7IGNoID0gcnRmVHh0W3RoaXMuX2luZGV4KytdKVxyXG4gICAgICBzektleXdvcmQgPSBzektleXdvcmQgKyBjaDtcclxuXHJcbiAgICBpZiAoY2ggPT09ICctJykge1xyXG4gICAgICBmTmVnID0gdHJ1ZTtcclxuICAgICAgaWYgKChjaCA9IHJ0ZlR4dFt0aGlzLl9pbmRleCsrXSkgPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoMCkpXHJcbiAgICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5FTkRfT0ZfRklMRTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoTkNoYXIuSXNEaWdpdChjaCkpIHtcclxuICAgICAgZm9yICg7IE5DaGFyLklzRGlnaXQoY2gpOyBjaCA9IHJ0ZlR4dFt0aGlzLl9pbmRleCsrXSlcclxuICAgICAgICBzelBhcmFtZXRlciA9IHN6UGFyYW1ldGVyICsgY2g7XHJcblxyXG4gICAgICB0aGlzLl9sUGFyYW0gPSBOTnVtYmVyLlBhcnNlKHN6UGFyYW1ldGVyKTtcclxuXHJcbiAgICAgIGlmIChmTmVnKVxyXG4gICAgICAgIHRoaXMuX2xQYXJhbSA9IC10aGlzLl9sUGFyYW07XHJcbiAgICB9XHJcbiAgICBpZiAoY2ggIT09ICcgJylcclxuICAgICAgdGhpcy5faW5kZXgtLTtcclxuXHJcbiAgICBpZiAoc3pLZXl3b3JkID09PSAgUnRmLkNIQVJfUEFSKSB7XHJcbiAgICAgIC8qIGlmIHdlIGdldCBhIFJURiBzZXF1ZW5jZSBvZiBcXHBhclsweGRdWzB4YV0sIGllIGEgXFxwYXIga3dkIGZvbGxvd2VkICAgKi9cclxuICAgICAgLyogaW1taWRpYXRlbHkgYnkgdGhlIENSIGFuZCBMRiwgdGhlbiBpZ25vcmUgdGhlIFxccGFyIGt3ZC4gb3RoZXJ3aXNlICAgICovXHJcbiAgICAgIC8qIHdlIHdpbGwgdHJhbnNsYXRlIHRoZSBcXHBhciAtIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYSBMRiAoMHhhKSBhbmQgYWxzbyAqL1xyXG4gICAgICAvKiB0aGUgZm9sbG93aW5nIDB4MGQgaXMgdHJhbnNsYXRlZCB0byAweDBhLCB0aHVzIHJlc3VsdGluZyBpbiBUV08gTEYncyAqL1xyXG4gICAgICAvKiBiZWluZyBpbnNlcnRlZCBpbnN0ZWFkIG9mIGp1c3Qgb25lIExGLiBTbyBieSBza2lwcGluZyBbXFxwYXJdIGFuZCAgICAgKi9cclxuICAgICAgLyogdHJhbnNsYXRpbmcgb25seSB0aGUgWzB4ZCAweGFdIHdpbGwgcmVzdWx0IGluIG9ubHkgb25lIExGIGFwcGVhcmluZyAgKi9cclxuICAgICAgLyogLSB3aGljaCBpcyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgaWYgKHJ0ZlR4dFt0aGlzLl9pbmRleF0gPT09IFJ0Zl9SdGZDaGFyLkNSICYmIHJ0ZlR4dFt0aGlzLl9pbmRleCArIDFdID09PSBSdGZfUnRmQ2hhci5MRilcclxuICAgICAgICB0aGlzLl9wcm9jZXNzQ3JsZlNwZWNpYWwgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wcm9jZXNzQ3JsZlNwZWNpYWwpIHtcclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGVLZXl3b3JkKHN6S2V5d29yZCwgb3V0cHV0VHh0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU3RlcCAzLiBTZWFyY2ggcmdzeW1SdGYgZm9yIHN6S2V5d29yZCBhbmQgZXZhbHVhdGUgaXQgYXBwcm9wcmlhdGVseS5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN6S2V5d29yZFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dHB1dFR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgVHJhbnNsYXRlS2V5d29yZChzektleXdvcmQ6IHN0cmluZywgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXN1bHQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuICAgIGxldCBpc3ltOiBudW1iZXI7XHJcblxyXG4gICAgLyogc2VhcmNoIGZvciBzektleXdvcmQgaW4gcmdzeW1SdGYgKi9cclxuICAgIGZvciAoaXN5bSA9IDA7IGlzeW0gPCBSdGYucmdzeW1SdGYubGVuZ3RoOyBpc3ltKyspIHtcclxuICAgICAgaWYgKHN6S2V5d29yZCA9PT0gUnRmLnJnc3ltUnRmW2lzeW1dLnN6S2V5d29yZCkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyogY29udHJvbCB3b3JkIG5vdCBmb3VuZCAqL1xyXG4gICAgaWYgKGlzeW0gPT09IFJ0Zi5yZ3N5bVJ0Zi5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMuX3NraXBEZXN0SWZVbmspIHtcclxuICAgICAgICAvKiBpZiB0aGlzIGlzIGEgbmV3IGRlc3RpbmF0aW9uICovXHJcbiAgICAgICAgdGhpcy5fZGVzdFN0YXRlID0gUnRmX1JEUy5TS0lQO1xyXG4gICAgICAgIC8qIHNraXAgdGhlIGRlc3RpbmF0aW9uICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIGVsc2UganVzdCBkaXNjYXJkIGl0ICovXHJcbiAgICAgIHRoaXMuX3NraXBEZXN0SWZVbmsgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSBSdGZfRXJyb3JSdGYuQkFEX1RBQkxFO1xyXG5cclxuICAgICAgLyogZm91bmQgaXQhIHVzZSBrd2QgYW5kIGlkeEluUmdwcm9wIHRvIGRldGVybWluZSB3aGF0IHRvIGRvIHdpdGggaXQuICovXHJcbiAgICAgIHRoaXMuX3NraXBEZXN0SWZVbmsgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChSdGYucmdzeW1SdGZbaXN5bV0ua3dkID09PSBSdGZfS1dELlBST1ApIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLnZhbGlkYXRlUHJvcCg8UnRmX0lQUk9QPlJ0Zi5yZ3N5bVJ0Zltpc3ltXS5pZHhJblJncHJvcCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoUnRmLnJnc3ltUnRmW2lzeW1dLmt3ZCA9PT0gUnRmX0tXRC5DSEFSKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5QYXJzZUNoYXIoKFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5pZHhJblJncHJvcCksIG91dHB1dFR4dCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoUnRmLnJnc3ltUnRmW2lzeW1dLmt3ZCA9PT0gUnRmX0tXRC5ERVNUKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5jaGFuZ2VEZXN0U3RhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChSdGYucmdzeW1SdGZbaXN5bV0ua3dkID09PSBSdGZfS1dELlNQRUMpIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLlBhcnNlU3BlY2lhbEtleXdvcmQoPFJ0Zl9JUEZOPlJ0Zi5yZ3N5bVJ0Zltpc3ltXS5pZHhJblJncHJvcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBWYWxpZGF0ZSB0aGUgcHJvcGVydHkgaWRlbnRpZmllZCBieSBfaXByb3BfIHRvIHRoZSB2YWx1ZSBfdmFsXy5cclxuICAvLy8gcHJldmlvdXNseSBjYWxsZWQgQXBwbHlwcm9wY2hhbmdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpcHJvcFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wKGlwcm9wOiBSdGZfSVBST1ApOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IHJldDogUnRmX0Vycm9yUnRmID0gUnRmX0Vycm9yUnRmLk9LO1xyXG5cclxuICAgIGlmICh0aGlzLl9kZXN0U3RhdGUgPT09IFJ0Zl9SRFMuU0tJUCkge1xyXG4gICAgICAvKiBJZiB3ZSdyZSBza2lwcGluZyB0ZXh0LCAqL1xyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAvKiBkb24ndCBkbyBhbnl0aGluZy4gKi9cclxuICAgIH1cclxuXHJcbiAgICAvKiB2YWxpZGF0ZSBwcm9wICovXHJcbiAgICBpZiAoUnRmLnJncHJvcFtpcHJvcF0ucHJvcCAhPT0gUnRmX1BST1BUWVBFLkRPUCAmJiBSdGYucmdwcm9wW2lwcm9wXS5wcm9wICE9PSBSdGZfUFJPUFRZUEUuU0VQICYmXHJcbiAgICAgIFJ0Zi5yZ3Byb3BbaXByb3BdLnByb3AgIT09IFJ0Zl9QUk9QVFlQRS5QQVAgJiYgUnRmLnJncHJvcFtpcHJvcF0ucHJvcCAhPT0gUnRmX1BST1BUWVBFLkNIUCAmJlxyXG4gICAgICBSdGYucmdwcm9wW2lwcm9wXS5hY3RuICE9PSBSdGZfQUNUTi5TUEVDKSB7XHJcbiAgICAgIHJldCA9IFJ0Zl9FcnJvclJ0Zi5CQURfVEFCTEU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFJ0Zi5yZ3Byb3BbaXByb3BdLmFjdG4gIT09IFJ0Zl9BQ1ROLkJZVEUgJiYgUnRmLnJncHJvcFtpcHJvcF0uYWN0biAhPT0gUnRmX0FDVE4uV09SRCAmJiBSdGYucmdwcm9wW2lwcm9wXS5hY3RuICE9PSBSdGZfQUNUTi5TUEVDKSB7XHJcbiAgICAgIHJldCA9IFJ0Zl9FcnJvclJ0Zi5CQURfVEFCTEU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ2hhbmdlIHRvIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZS5cclxuICAvLy8gcHJldmlvdXNseSBjYWxsZWQgQ2hhbmdlRGVzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBjaGFuZ2VEZXN0U3RhdGUoKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGlmICh0aGlzLl9kZXN0U3RhdGUgPT09IFJ0Zl9SRFMuU0tJUCkge1xyXG4gICAgICAvKiBpZiB3ZSdyZSBza2lwcGluZyB0ZXh0LCAqL1xyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLk9LO1xyXG4gICAgICAvKiBkb24ndCBkbyBhbnl0aGluZyAqL1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IFJ0Zl9SRFMuU0tJUDtcclxuICAgIC8qIHdoZW4gaW4gZG91YnQsIHNraXAgaXQuLi4gKi9cclxuXHJcbiAgICByZXR1cm4gUnRmX0Vycm9yUnRmLk9LO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBFdmFsdWF0ZSBhbiBSVEYgY29udHJvbCB0aGF0IG5lZWRzIHNwZWNpYWwgcHJvY2Vzc2luZy5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlwZm5cIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIFBhcnNlU3BlY2lhbEtleXdvcmQoaXBmbjogUnRmX0lQRk4pOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IHJldDogUnRmX0Vycm9yUnRmID0gUnRmX0Vycm9yUnRmLk9LO1xyXG5cclxuICAgIGlmICghVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSkge1xyXG4gICAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVAgJiYgaXBmbiAhPT0gUnRmX0lQRk4uQklOKSB7XHJcbiAgICAgICAgLyogaWYgd2UncmUgc2tpcHBpbmcsIGFuZCBpdCdzIG5vdCAqL1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgLyogdGhlIFxcYmluIGtleXdvcmQsIGlnbm9yZSBpdC4gKi9cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlwZm4gPT09IFJ0Zl9JUEZOLkZPTlQgfHwgaXBmbiA9PT0gUnRmX0lQRk4uQ0hBUlNFVCB8fCBpcGZuID09PSBSdGZfSVBGTi5VTklDT0RFKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9kZXN0U3RhdGUgPT09IFJ0Zl9SRFMuU0tJUCAmJiBpcGZuICE9PSBSdGZfSVBGTi5CSU4gJiYgaXBmbiAhPT0gUnRmX0lQRk4uRk9OVCAmJlxyXG4gICAgICAgIGlwZm4gIT09IFJ0Zl9JUEZOLkNIQVJTRVQgJiYgaXBmbiAhPT0gUnRmX0lQRk4uVU5JQ09ERSkge1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uQklOKSB7XHJcbiAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLkJJTjtcclxuICAgICAgdGhpcy5fY2JCaW4gPSB0aGlzLl9sUGFyYW07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpcGZuID09PSBSdGZfSVBGTi5TS0lQX0RFU1QpIHtcclxuICAgICAgdGhpcy5fc2tpcERlc3RJZlVuayA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpcGZuID09PSBSdGZfSVBGTi5IRVgpIHtcclxuICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IFJ0Zl9SSVMuSEVYO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uRk9OVCkge1xyXG4gICAgICB0aGlzLl9mb250TnVtID0gPG51bWJlcj50aGlzLl9sUGFyYW07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpcGZuID09PSBSdGZfSVBGTi5DSEFSU0VUKSB7XHJcbiAgICAgIHRoaXMuX2NoYXJzZXRUYWJsZS5zZXRfSXRlbSh0aGlzLl9mb250TnVtLCA8bnVtYmVyPnRoaXMuX2xQYXJhbSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpcGZuID09PSBSdGZfSVBGTi5VTklDT0RFKSB7XHJcbiAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLlVOSUNPREU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0ID0gUnRmX0Vycm9yUnRmLkJBRF9UQUJMRTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaXMxc3RCeXRlKGRiY3NCeXRlczogbnVtYmVyLCBjaGFyc2V0OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCByZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZGJjc0J5dGVzID4gMjU1KVxyXG4gICAgICByZXR1cm4gcmV0O1xyXG5cclxuICAgIHN3aXRjaCAoY2hhcnNldCkge1xyXG4gICAgICBjYXNlIDEyODpcclxuICAgICAgICByZXQgPSAoMTI5IDw9IGRiY3NCeXRlcyAmJiBkYmNzQnl0ZXMgPD0gMTU5KSB8fCAoMjI0IDw9IGRiY3NCeXRlcyAmJiBkYmNzQnl0ZXMgPD0gMjU0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxMjk6XHJcbiAgICAgIGNhc2UgMTM0OlxyXG4gICAgICBjYXNlIDEzNjpcclxuICAgICAgICByZXQgPSAoMTI5IDw9IGRiY3NCeXRlcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDaGVja3MgaWYgdGhlIGJ5dGUgaXMgd2l0aGluIHRoZSB0cmFpbGluZyBieXRlIHJhbmdlLlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGJjc0J5dGVzXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2hhcnNldFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGlzMm5kQnl0ZShkYmNzQnl0ZXM6IG51bWJlciwgY2hhcnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoZGJjc0J5dGVzID4gMjU1KVxyXG4gICAgICByZXR1cm4gcmV0O1xyXG5cclxuICAgIHN3aXRjaCAoY2hhcnNldCkge1xyXG4gICAgICBjYXNlIDEyODpcclxuICAgICAgICByZXQgPSAoZGJjc0J5dGVzICE9PSAxMjcpICYmICg2NCA8PSBkYmNzQnl0ZXMgJiYgZGJjc0J5dGVzIDw9IDI1Mik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTI5OlxyXG4gICAgICBjYXNlIDEzNDpcclxuICAgICAgY2FzZSAxMzY6XHJcbiAgICAgICAgcmV0ID0gKDY0IDw9IGRiY3NCeXRlcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDcmVhdGUgYSBoYXNodGFibGUgb2YgY29kZXBhZ2UgYXNzb2NpYXRlZCB3aXRoIGNoYXJzZXQuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc2V0Q29kZVBhZ2VUYWJsZSgpOiB2b2lkIHtcclxuICAgIC8vIGFkZCBlbGVtZW50cyB3aXRoIGtleSAoY2hhcnNldCkgYW5kIHZhbHVlIChjb2RlcGFnZSkgaW50byB0aGUgdGFibGUuXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDAsIDEyNTIpOyAgICAvLyBBTlNJX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTI4LCA5MzIpOyAgIC8vIFNISUZUSklTX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTI5LCA5NDkpOyAgIC8vIEhBTkdVTF9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDEzNCwgOTM2KTsgICAvLyBHQjIzMTJfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxMzYsIDk1MCk7ICAgLy8gQ0hJTkVTRUJJRzVfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxNjEsIDEyNTMpOyAgLy8gR1JFRUtfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxNjIsIDEyNTQpOyAgLy8gVFVSS0lTSF9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDE3NywgMTI1NSk7ICAvLyBIRUJSRVdfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxNzgsIDEyNTYpOyAgLy8gQVJBQklDIF9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDE4NiwgMTI1Nyk7ICAvLyBCQUxUSUNfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgyMDQsIDEyNTEpOyAgLy8gUlVTU0lBTl9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDIyMiwgODc0KTsgICAvLyBUSEFJX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMjM4LCAxMjUwKTsgIC8vIEVBU1RFVVJPUEVfQ0hBUlNFVFxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXQgY29kZXBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIGNoYXJzZXQuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjaGFyc2V0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRDb2RlUGFnZShjaGFyc2V0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvZGVQYWdlOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLl9jb2RlUGFnZVRhYmxlLkNvbnRhaW5zS2V5KGNoYXJzZXQpKSB7XHJcbiAgICAgIGNvZGVQYWdlID0gdGhpcy5fY29kZVBhZ2VUYWJsZS5nZXRfSXRlbShjaGFyc2V0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29kZVBhZ2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldCBjaGFyc2V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb250IGluZGV4LlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9udFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0Q2hhcnNldChmb250OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGNoYXJzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NoYXJzZXRUYWJsZS5Db250YWluc0tleShmb250KSkge1xyXG4gICAgICBjaGFyc2V0ID0gdGhpcy5fY2hhcnNldFRhYmxlLmdldF9JdGVtKGZvbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJzZXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==