@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.
- package/fesm2022/magic-xpa-utils.mjs +1222 -72
- package/fesm2022/magic-xpa-utils.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/package.json +2 -4
- package/src/MsgInterface.d.ts +5 -0
- package/src/StrUtil.d.ts +1 -0
- package/src/XMLConstants.d.ts +2 -0
- package/esm2022/index.mjs +0 -27
- package/esm2022/magic-xpa-utils.mjs +0 -2
- package/esm2022/src/Base64.mjs +0 -164
- package/esm2022/src/ChoiceUtils.mjs +0 -79
- package/esm2022/src/Constants.mjs +0 -74
- package/esm2022/src/DateTimeUtils.mjs +0 -54
- package/esm2022/src/DateUtil.mjs +0 -58
- package/esm2022/src/InternalInterface.mjs +0 -341
- package/esm2022/src/JSON_Utils.mjs +0 -7
- package/esm2022/src/Logger.mjs +0 -216
- package/esm2022/src/MagicConstants.mjs +0 -12
- package/esm2022/src/Misc.mjs +0 -98
- package/esm2022/src/MsgInterface.mjs +0 -192
- package/esm2022/src/PICInterface.mjs +0 -60
- package/esm2022/src/PlatformUtils.mjs +0 -11
- package/esm2022/src/Queue.mjs +0 -28
- package/esm2022/src/Randomizer.mjs +0 -34
- package/esm2022/src/RequestInfo.mjs +0 -28
- package/esm2022/src/Rtf.mjs +0 -614
- package/esm2022/src/StorageAttribute.mjs +0 -84
- package/esm2022/src/StrUtil.mjs +0 -453
- package/esm2022/src/SyncExecutionHelper.mjs +0 -21
- package/esm2022/src/UtilDateJpn.mjs +0 -232
- package/esm2022/src/UtilImeJpn.mjs +0 -13
- package/esm2022/src/UtilStrByteMode.mjs +0 -300
- package/esm2022/src/XMLConstants.mjs +0 -169
- package/esm2022/src/Xml/XmlParser.mjs +0 -247
- package/esm2022/src/enums.mjs +0 -1763
package/esm2022/src/Rtf.mjs
DELETED
|
@@ -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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QixDQUFDO0lBQ3JGLE1BQU0sQ0FBVSxVQUFVLEdBQVcsUUFBUSxDQUFDO0lBQzlDLE1BQU0sQ0FBVSxRQUFRLEdBQVcsS0FBSyxDQUFDO0lBR3pDLE1BQU0sQ0FBVSxNQUFNLEdBQWU7UUFDM0MsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7S0FDN0YsQ0FBQztJQUdNLE1BQU0sQ0FBVSxRQUFRLEdBQWlCO1FBQy9DLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQzFHLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQzNHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzVHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzVHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQzNILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQzdILElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xILElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3RHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ25ILElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ2xILElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3pILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQzNILElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQzNHLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ2hJLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3BILElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3pILElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ25ILElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3RILElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3hHLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2pHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzlHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2pILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2pILElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xILElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzdHLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2hILElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQy9HLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzNHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzFHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDbkQsQ0FB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LEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFTTyxXQUFXLENBQUMsT0FBZTtRQUNqQyxJQUFJLFFBQVEsR0FBVyxDQUFDLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBU08sVUFBVSxDQUFDLElBQVk7UUFDN0IsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW5jb2RpbmcsIEhhc2h0YWJsZSwgTkNoYXIsIE5OdW1iZXIsIFN0YWNrLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtVdGlsU3RyQnl0ZU1vZGV9IGZyb20gXCIuL1V0aWxTdHJCeXRlTW9kZVwiO1xyXG5cclxuLy9AZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgUnRmX1NZTUJPTCB7XHJcbiAgc3pLZXl3b3JkOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8qIFJURiBrZXl3b3JkICovXHJcbiAga3dkOiBSdGZfS1dEID0gbnVsbDtcclxuICAvKiBiYXNlIGFjdGlvbiB0byB0YWtlICovXHJcbiAgaWR4SW5SZ3Byb3A6IGFueSA9IG51bGw7XHJcbiAgLyogaW5kZXggaW50byBwcm9wZXJ0eSB0YWJsZSBpZiBrd2QgPT0ga3dkUHJvcCAqL1xyXG5cclxuICAvKiBpbmRleCBpbnRvIGRlc3RpbmF0aW9uIHRhYmxlIGlmIGt3ZCA9PSBrd2REZXN0ICAqL1xyXG5cclxuICAvKiBjaGFyYWN0ZXIgdG8gcHJpbnQgaWYga3dkID09IGt3ZENoYXIgICAgICAgICAgICAqL1xyXG4gIGNvbnN0cnVjdG9yKGtleVdvcmQ6IHN0cmluZywga3dkOiBSdGZfS1dELCBpZHhJblJncHJvcDogYW55KSB7XHJcbiAgICB0aGlzLnN6S2V5d29yZCA9IGtleVdvcmQ7XHJcbiAgICB0aGlzLmt3ZCA9IGt3ZDtcclxuICAgIHRoaXMuaWR4SW5SZ3Byb3AgPSBpZHhJblJncHJvcDtcclxuICB9XHJcbn1cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFJ0Zl9QUk9QIHtcclxuICBhY3RuOiBSdGZfQUNUTiA9IG51bGw7XHJcbiAgLyogc2l6ZSBvZiB2YWx1ZSAqL1xyXG4gIHByb3A6IFJ0Zl9QUk9QVFlQRSA9IG51bGw7XHJcblxyXG4gIC8qIHN0cnVjdHVyZSBjb250YWluaW5nIHZhbHVlICovXHJcblxyXG4gIGNvbnN0cnVjdG9yKGFjdG46IFJ0Zl9BQ1ROLCBwcm9wOiBSdGZfUFJPUFRZUEUpIHtcclxuICAgIHRoaXMuYWN0biA9IGFjdG47XHJcbiAgICB0aGlzLnByb3AgPSBwcm9wO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgUnRmX1N0YWNrU2F2ZSB7XHJcbiAgcmRzOiBSdGZfUkRTID0gbnVsbDtcclxuICByaXM6IFJ0Zl9SSVMgPSBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfS1dEIHtcclxuICBDSEFSLFxyXG4gIERFU1QsXHJcbiAgUFJPUCxcclxuICBTUEVDXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9QUk9QVFlQRSB7XHJcbiAgQ0hQLFxyXG4gIFBBUCxcclxuICBTRVAsXHJcbiAgRE9QXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9BQ1ROIHtcclxuICBTUEVDLFxyXG4gIEJZVEUsXHJcbiAgV09SRFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfSVBGTiB7XHJcbiAgQklOLFxyXG4gIEhFWCxcclxuICBTS0lQX0RFU1QsXHJcbiAgQlJFQUssXHJcbiAgTkVXLFxyXG4gIEZPTlQsXHJcbiAgQ0hBUlNFVCxcclxuICBVTklDT0RFXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9JREVTVCB7XHJcbiAgUElDVCxcclxuICBDT0xPUixcclxuICBTS0lQXHJcbn1cclxuXHJcbi8qIHR5cGVzIG9mIHByb3BlcnRpZXMgKi9cclxuZXhwb3J0IGVudW0gUnRmX0lQUk9QIHtcclxuICBCT0xEID0gMCxcclxuICBJVEFMSUMsXHJcbiAgVU5ERVJMSU5FLFxyXG4gIEZPTlQsXHJcbiAgU0laRSxcclxuICBDT0xPUixcclxuICBSRUQsXHJcbiAgR1JFRU4sXHJcbiAgQkxVRSxcclxuICBMRUZUX0lORCxcclxuICBSSUdIVF9JTkQsXHJcbiAgRklSU1RfSU5ELFxyXG4gIENPTFMsXHJcbiAgUEdOX1gsXHJcbiAgUEdOX1ksXHJcbiAgWEFfUEFHRSxcclxuICBZQV9QQUdFLFxyXG4gIFhBX0xFRlQsXHJcbiAgWEFfUklHSFQsXHJcbiAgWUFfVE9QLFxyXG4gIFlBX0JPVFRPTSxcclxuICBQR05fU1RBUlQsXHJcbiAgU0JLLFxyXG4gIFBHTl9GT1JNQVQsXHJcbiAgRkFDSU5HX1AsXHJcbiAgTEFORFNDQVBFLFxyXG4gIEpVU1QsXHJcbiAgUEFSRCxcclxuICBQTEFJTixcclxuICBTRUNURCxcclxuICBCVUxMRVQsXHJcbiAgWEFfQlVMTEVULFxyXG4gIE1BWFxyXG59XHJcblxyXG4vKiBSdGYgRGVzdGluYXRpb24gU3RhdGUgKi9cclxuZXhwb3J0IGVudW0gUnRmX1JEUyB7XHJcbiAgTk9STSxcclxuICBDT0xPUixcclxuICBTS0lQLFxyXG4gIE5FV1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfRXJyb3JSdGYge1xyXG4gIE9LLFxyXG4gIFNUQUNLX1VOREVSRkxPVyxcclxuICBTVEFDS19PVkVSRkxPVyxcclxuICBVTk1BVENIRURfQlJBQ0UsXHJcbiAgSU5WQUxJRF9IRVgsXHJcbiAgQkFEX1RBQkxFLFxyXG4gIEFTU0VSVElPTixcclxuICBFTkRfT0ZfRklMRSxcclxuICBCVUZGRVJfVE9PX1NNQUxMXHJcbn1cclxuXHJcbi8vIFRPRE8gOlxyXG4vLyBSdGZfUnRmQ2hhciBzaG91bGQgYWN0dWFsbHkgYmUgZW51bS5cclxuLy8gQnV0IGNvbXB1dGVkIHN0cmluZyB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIGRlZmluZWQgaW4gZW51bS5cclxuLy8gU28sIHdlIGNhbm5vdCBoYXZlIFN0cmluZy5mcm9tQ2hhckNvZGUoWFhYKS5cclxuLy8gV2UgaGF2ZSAyIG9wdGlvbnM6XHJcbi8vIDEuIENvbnZlcnQgdGhpcyBlbnVtIGludG8gYSBjbGFzcyB3aXRoIGFsbCBzdGF0aWMgcmVhZG9ubHkgaXRlbXMuXHJcbi8vIDIuIEtlZXAgaXQgYXMgZW51bSB3aXRoIG51bWVyaWMgdmFsdWVzIChjaGFyIGNvZGVzKS5cclxuLy8gR29pbmcgd2l0aCAjMSBub3csIHNpbmNlIEAyIG1ha2VzIHRoZSBjb2RlIHVnbHkuXHJcbi8vIFdpbGwgZXZhbGF1dGUgbGF0ZXIgaWYgcmVxdWlyZWQuXHJcbmV4cG9ydCBjbGFzcyBSdGZfUnRmQ2hhciB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IENSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDBkKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgTEYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MEEpO1xyXG4gIHN0YXRpYyByZWFkb25seSBUQUIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDkpO1xyXG4gIHN0YXRpYyByZWFkb25seSBCVUxMRVQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4OTUpO1xyXG4gIHN0YXRpYyByZWFkb25seSBUSUxEQSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhBMCk7XHJcbiAgc3RhdGljIHJlYWRvbmx5IERBU0ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4QUQpO1xyXG4gIHN0YXRpYyByZWFkb25seSBEQVNIX0NIQVIgPSAnLSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFFVT1RFID0gJ1xcJyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IERCTFFVT1RFID0gJ1wiJztcclxuICBzdGF0aWMgcmVhZG9ubHkgT1BFTklOR0JSQUNFID0gJ3snO1xyXG4gIHN0YXRpYyByZWFkb25seSBDTE9TSU5HQlJBQ0UgPSAnfSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEJBQ0tTTEFTSCA9ICdcXFxcJztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX1JJUyB7XHJcbiAgTk9STSxcclxuICBCSU4sXHJcbiAgSEVYLFxyXG4gIFVOSUNPREVcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJ0ZiB7XHJcbiAgcHJpdmF0ZSBfZ3JvdXA6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY2JCaW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbFBhcmFtOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NraXBEZXN0SWZVbms6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9vdXRwdXRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc0NybGZTcGVjaWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGVzdFN0YXRlOiBSdGZfUkRTID0gbnVsbDtcclxuICBwcml2YXRlIF9pbnRlcm5hbFN0YXRlOiBSdGZfUklTID0gbnVsbDtcclxuICBwcml2YXRlIF9zdGFjazogU3RhY2s8UnRmX1N0YWNrU2F2ZT4gPSBudWxsO1xyXG4gIHByaXZhdGUgX2luZGV4OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2ZvbnROdW06IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhcnNldFRhYmxlOiBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+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==
|