@magic-xpa/gui 4.1200.0-dev4120.21 → 4.1200.0-dev4120.213
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-gui.mjs +5724 -249
- package/fesm2022/magic-xpa-gui.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/package.json +2 -4
- package/src/GuiEnums.d.ts +3 -0
- package/src/gui/GuiMgControl.d.ts +1 -0
- package/src/management/exp/ExpressionInterface.d.ts +1 -0
- package/src/management/gui/MgControlBase.d.ts +1 -1
- package/src/management/gui/PropInterface.d.ts +2 -1
- package/esm2022/index.mjs +0 -71
- package/esm2022/magic-xpa-gui.mjs +0 -2
- package/esm2022/src/Commands.mjs +0 -184
- package/esm2022/src/Events.mjs +0 -425
- package/esm2022/src/EventsProcessor.mjs +0 -67
- package/esm2022/src/FocusManager.mjs +0 -34
- package/esm2022/src/GuiConstants.mjs +0 -68
- package/esm2022/src/GuiEnums.mjs +0 -301
- package/esm2022/src/GuiEnvironment.mjs +0 -4
- package/esm2022/src/IFlowMonitorQueue.mjs +0 -2
- package/esm2022/src/Manager.mjs +0 -91
- package/esm2022/src/UIBridge.mjs +0 -33
- package/esm2022/src/env/IEnvironment.mjs +0 -2
- package/esm2022/src/gui/ControlBase.mjs +0 -3
- package/esm2022/src/gui/GuiMgControl.mjs +0 -123
- package/esm2022/src/gui/GuiMgForm.mjs +0 -4
- package/esm2022/src/gui/KeyboardItem.mjs +0 -135
- package/esm2022/src/gui/LastFocusedVal.mjs +0 -11
- package/esm2022/src/gui/MgValue.mjs +0 -16
- package/esm2022/src/gui/PropParentInterface.mjs +0 -2
- package/esm2022/src/gui/low/DialogHandler.mjs +0 -7
- package/esm2022/src/gui/low/GuiCommand.mjs +0 -68
- package/esm2022/src/gui/low/GuiCommandQueue.mjs +0 -35
- package/esm2022/src/gui/low/GuiInteractive.mjs +0 -178
- package/esm2022/src/gui/low/Style.mjs +0 -20
- package/esm2022/src/management/RuntimeContextBase.mjs +0 -42
- package/esm2022/src/management/data/BlobType.mjs +0 -281
- package/esm2022/src/management/data/DcValues.mjs +0 -214
- package/esm2022/src/management/data/DcValuesBuilderBase.mjs +0 -96
- package/esm2022/src/management/data/FieldDef.mjs +0 -331
- package/esm2022/src/management/data/FieldsTable.mjs +0 -54
- package/esm2022/src/management/data/GuiDataViewBase.mjs +0 -88
- package/esm2022/src/management/data/GuiFieldBase.mjs +0 -82
- package/esm2022/src/management/data/IRecord.mjs +0 -2
- package/esm2022/src/management/data/IReferencedObject.mjs +0 -2
- package/esm2022/src/management/data/NUM_TYPE.mjs +0 -1739
- package/esm2022/src/management/data/ObjectReferenceBase.mjs +0 -48
- package/esm2022/src/management/data/ObjectReferencesCollection.mjs +0 -27
- package/esm2022/src/management/data/RecordUtils.mjs +0 -361
- package/esm2022/src/management/data/VectorType.mjs +0 -612
- package/esm2022/src/management/data/VectorTypeBase.mjs +0 -88
- package/esm2022/src/management/events/IActionManager.mjs +0 -2
- package/esm2022/src/management/events/IGuiEventsManager.mjs +0 -2
- package/esm2022/src/management/exp/ExpressionInterface.mjs +0 -244
- package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +0 -305
- package/esm2022/src/management/gui/ControlTable.mjs +0 -118
- package/esm2022/src/management/gui/DisplayConvertor.mjs +0 -1649
- package/esm2022/src/management/gui/FieldValidator.mjs +0 -711
- package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +0 -24
- package/esm2022/src/management/gui/GuiFormPropertyAdapter.mjs +0 -11
- package/esm2022/src/management/gui/HebrewDate.mjs +0 -278
- package/esm2022/src/management/gui/Helps.mjs +0 -237
- package/esm2022/src/management/gui/MgControlBase.mjs +0 -1869
- package/esm2022/src/management/gui/MgFormBase.mjs +0 -741
- package/esm2022/src/management/gui/PIC.mjs +0 -1185
- package/esm2022/src/management/gui/PropDefaults.mjs +0 -230
- package/esm2022/src/management/gui/PropInterface.mjs +0 -246
- package/esm2022/src/management/gui/PropTable.mjs +0 -221
- package/esm2022/src/management/gui/Property.mjs +0 -1362
- package/esm2022/src/management/gui/ValidationDetails.mjs +0 -248
- package/esm2022/src/management/gui/ValidationDetailsBase.mjs +0 -93
- package/esm2022/src/management/gui/WrongFormatException.mjs +0 -29
- package/esm2022/src/management/tasks/GuiDataCollection.mjs +0 -4
- package/esm2022/src/management/tasks/GuiTaskBase.mjs +0 -511
- package/esm2022/src/management/tasks/IMGDataTable.mjs +0 -2
- package/esm2022/src/management/tasks/ITask.mjs +0 -2
- package/esm2022/src/management/tasks/MgTimer.mjs +0 -21
- package/esm2022/src/management/tasks/TaskDefinitionId.mjs +0 -54
- package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +0 -41
- package/esm2022/src/util/MemoryUtil.mjs +0 -35
- package/esm2022/src/util/ObjectReference.mjs +0 -36
- package/esm2022/src/util/UsernamePasswordCredentials.mjs +0 -52
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
import { Logger, StrUtil } from '@magic-xpa/utils';
|
|
2
|
-
import { ApplicationException, Debug, Encoding, ISO_8859_1_Encoding, NNumber, NString } from '@magic-xpa/mscorelib';
|
|
3
|
-
import { GuiConstants } from '../../GuiConstants';
|
|
4
|
-
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
5
|
-
export class BlobType {
|
|
6
|
-
static CONTENT_TYPE_UNKNOWN = '0';
|
|
7
|
-
static CONTENT_TYPE_ANSI = '1';
|
|
8
|
-
static CONTENT_TYPE_UNICODE = '2';
|
|
9
|
-
static CONTENT_TYPE_BINARY = '3';
|
|
10
|
-
static getContentType(blob) {
|
|
11
|
-
try {
|
|
12
|
-
let tokens = StrUtil.tokenize(blob, /,|;/);
|
|
13
|
-
return tokens[4].charAt(0);
|
|
14
|
-
}
|
|
15
|
-
catch (Exception) {
|
|
16
|
-
throw new ApplicationException(" in BlobType.getContentType blob is in invalid format");
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
static getEmptyBlobPrefix(vecCellAttr) {
|
|
20
|
-
return NString.Format("0,0,{0},{1},0", '\0', vecCellAttr);
|
|
21
|
-
}
|
|
22
|
-
static getBlobPrefixForContentType(contentType) {
|
|
23
|
-
return NString.Format("0,0,{0},{0},{1};", '\0', contentType);
|
|
24
|
-
}
|
|
25
|
-
static getPrefix(str) {
|
|
26
|
-
let idx = str.indexOf(';');
|
|
27
|
-
return str.substr(0, idx + 1);
|
|
28
|
-
}
|
|
29
|
-
static getEncodingFromContentType(ContentType) {
|
|
30
|
-
let encoding;
|
|
31
|
-
if (ContentType === BlobType.CONTENT_TYPE_UNICODE)
|
|
32
|
-
encoding = Encoding.Unicode;
|
|
33
|
-
else if (ContentType === BlobType.CONTENT_TYPE_ANSI)
|
|
34
|
-
encoding = GuiEnvironment.Environment.GetEncoding();
|
|
35
|
-
else
|
|
36
|
-
encoding = ISO_8859_1_Encoding.ISO_8859_1;
|
|
37
|
-
return encoding;
|
|
38
|
-
}
|
|
39
|
-
static MbToUnicode(BytesInMb) {
|
|
40
|
-
let result = null;
|
|
41
|
-
try {
|
|
42
|
-
let UnicodeString = GuiEnvironment.Environment.GetEncoding().GetString(BytesInMb, 0, BytesInMb.length);
|
|
43
|
-
result = Encoding.Unicode.GetBytes(UnicodeString);
|
|
44
|
-
}
|
|
45
|
-
catch (Exception) {
|
|
46
|
-
result = null;
|
|
47
|
-
}
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
static UnicodeToMb(BytesInUnicode) {
|
|
51
|
-
let result = null;
|
|
52
|
-
try {
|
|
53
|
-
let UnicodeString = Encoding.Unicode.GetString(BytesInUnicode, 0, BytesInUnicode.length);
|
|
54
|
-
result = GuiEnvironment.Environment.GetEncoding().GetBytes(UnicodeString);
|
|
55
|
-
}
|
|
56
|
-
catch (Exception) {
|
|
57
|
-
result = null;
|
|
58
|
-
}
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
static getString(blob) {
|
|
62
|
-
let result = null;
|
|
63
|
-
let bytes = null;
|
|
64
|
-
if (BlobType.isValidBlob(blob)) {
|
|
65
|
-
let contentType = BlobType.getContentType(blob);
|
|
66
|
-
if (contentType !== BlobType.CONTENT_TYPE_UNICODE)
|
|
67
|
-
contentType = BlobType.CONTENT_TYPE_ANSI;
|
|
68
|
-
try {
|
|
69
|
-
bytes = BlobType.getBytes(blob);
|
|
70
|
-
let encoding = BlobType.getEncodingFromContentType(contentType);
|
|
71
|
-
result = encoding.GetString(bytes, 0, bytes.length);
|
|
72
|
-
let index = result.indexOf('\0');
|
|
73
|
-
if (index !== -1)
|
|
74
|
-
result = result.substr(0, index);
|
|
75
|
-
}
|
|
76
|
-
catch (Exception) {
|
|
77
|
-
result = null;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
else
|
|
81
|
-
Debug.Assert(false);
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
static createFromString(blobStr, contentType) {
|
|
85
|
-
let blob = null;
|
|
86
|
-
let srcContentType = contentType;
|
|
87
|
-
let bytes = null;
|
|
88
|
-
if (contentType !== BlobType.CONTENT_TYPE_UNICODE)
|
|
89
|
-
srcContentType = BlobType.CONTENT_TYPE_ANSI;
|
|
90
|
-
try {
|
|
91
|
-
if (blobStr.constructor === ArrayBuffer) {
|
|
92
|
-
bytes = new Uint8Array(blobStr);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
let encoding = BlobType.getEncodingFromContentType(srcContentType);
|
|
96
|
-
bytes = encoding.GetBytes(blobStr);
|
|
97
|
-
}
|
|
98
|
-
blob = BlobType.createFromBytes(bytes, contentType);
|
|
99
|
-
}
|
|
100
|
-
catch (Exception) {
|
|
101
|
-
blob = null;
|
|
102
|
-
}
|
|
103
|
-
return blob;
|
|
104
|
-
}
|
|
105
|
-
static getBytes(str) {
|
|
106
|
-
let bytes = null;
|
|
107
|
-
let data = BlobType.removeBlobPrefix(str);
|
|
108
|
-
try {
|
|
109
|
-
let encoding = ISO_8859_1_Encoding.ISO_8859_1;
|
|
110
|
-
bytes = encoding.GetBytes(data);
|
|
111
|
-
}
|
|
112
|
-
catch (Exception) {
|
|
113
|
-
bytes = null;
|
|
114
|
-
}
|
|
115
|
-
return bytes;
|
|
116
|
-
}
|
|
117
|
-
static createFromBytes(bytes, contentType) {
|
|
118
|
-
let blobStr = '';
|
|
119
|
-
let blobPrefix;
|
|
120
|
-
let blobData;
|
|
121
|
-
blobPrefix = BlobType.getBlobPrefixForContentType(contentType);
|
|
122
|
-
try {
|
|
123
|
-
let encoding = ISO_8859_1_Encoding.ISO_8859_1;
|
|
124
|
-
blobData = encoding.GetString(bytes, 0, bytes.length);
|
|
125
|
-
}
|
|
126
|
-
catch (Exception) {
|
|
127
|
-
blobData = null;
|
|
128
|
-
}
|
|
129
|
-
blobStr = blobPrefix + blobData;
|
|
130
|
-
return blobStr;
|
|
131
|
-
}
|
|
132
|
-
static copyBlob(dest, src) {
|
|
133
|
-
let srcBytes;
|
|
134
|
-
let destBytes;
|
|
135
|
-
if (src === null)
|
|
136
|
-
return null;
|
|
137
|
-
else if (dest === null)
|
|
138
|
-
return src;
|
|
139
|
-
srcBytes = BlobType.getBytes(src);
|
|
140
|
-
let destContentType = BlobType.getContentType(dest);
|
|
141
|
-
let srcContentType = BlobType.getContentType(src);
|
|
142
|
-
if (srcContentType === BlobType.CONTENT_TYPE_ANSI && destContentType === BlobType.CONTENT_TYPE_UNICODE)
|
|
143
|
-
destBytes = BlobType.MbToUnicode(srcBytes);
|
|
144
|
-
else if (srcContentType === BlobType.CONTENT_TYPE_UNICODE && destContentType === BlobType.CONTENT_TYPE_ANSI)
|
|
145
|
-
destBytes = BlobType.UnicodeToMb(srcBytes);
|
|
146
|
-
else
|
|
147
|
-
destBytes = srcBytes;
|
|
148
|
-
dest = BlobType.createFromBytes(destBytes, destContentType);
|
|
149
|
-
return dest;
|
|
150
|
-
}
|
|
151
|
-
static removeBlobPrefix(source) {
|
|
152
|
-
let idx;
|
|
153
|
-
if (source !== null) {
|
|
154
|
-
idx = source.indexOf(';');
|
|
155
|
-
if (idx < 0)
|
|
156
|
-
Logger.Instance.WriteToLog("Error: invalid blob prefix", true);
|
|
157
|
-
return source.substr(idx + 1);
|
|
158
|
-
}
|
|
159
|
-
else
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
static isValidBlob(blob) {
|
|
163
|
-
let isValid = true;
|
|
164
|
-
if (blob === null || blob.indexOf(';') < 0)
|
|
165
|
-
isValid = false;
|
|
166
|
-
if (isValid) {
|
|
167
|
-
let contentType = BlobType.getContentType(blob);
|
|
168
|
-
if (contentType !== BlobType.CONTENT_TYPE_ANSI && contentType !== BlobType.CONTENT_TYPE_BINARY && contentType !== BlobType.CONTENT_TYPE_UNICODE && contentType !== BlobType.CONTENT_TYPE_UNKNOWN)
|
|
169
|
-
isValid = false;
|
|
170
|
-
}
|
|
171
|
-
return isValid;
|
|
172
|
-
}
|
|
173
|
-
static setContentType(str, contentType) {
|
|
174
|
-
let result = "";
|
|
175
|
-
try {
|
|
176
|
-
let prefixLastIndex = str.indexOf(";");
|
|
177
|
-
let prefix = str.substr(0, prefixLastIndex);
|
|
178
|
-
let dataLength = str.length - (prefix.length + 1);
|
|
179
|
-
let data = str.substr(prefixLastIndex + 1, dataLength);
|
|
180
|
-
let prefixTokens = StrUtil.tokenize(prefix, /,|;/);
|
|
181
|
-
for (let i = 0; i < GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT; i = i + 1) {
|
|
182
|
-
if (i === 4)
|
|
183
|
-
result = result + contentType + ",";
|
|
184
|
-
else
|
|
185
|
-
result = result + prefixTokens[i] + ",";
|
|
186
|
-
}
|
|
187
|
-
return result.substr(0, result.length - 1) + ";" + data;
|
|
188
|
-
}
|
|
189
|
-
catch (Exception) {
|
|
190
|
-
throw new ApplicationException(" in BlobType.setContentType : invalid format");
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
static SetVecCellAttr(str, vecCellAttr) {
|
|
194
|
-
let result = "";
|
|
195
|
-
try {
|
|
196
|
-
let prefixLastIndex = str.indexOf(";");
|
|
197
|
-
let prefix = str.substr(0, prefixLastIndex);
|
|
198
|
-
let data = str.substr(prefixLastIndex + 1);
|
|
199
|
-
let tokens = StrUtil.tokenize(prefix, /,|;/);
|
|
200
|
-
for (let i = 0; i < GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT; i = i + 1) {
|
|
201
|
-
if (i === 3)
|
|
202
|
-
result = result + vecCellAttr + ",";
|
|
203
|
-
else
|
|
204
|
-
result = result + tokens[i] + ",";
|
|
205
|
-
}
|
|
206
|
-
return result.substr(0, result.length - 1) + ";" + data;
|
|
207
|
-
}
|
|
208
|
-
catch (Exception) {
|
|
209
|
-
throw new ApplicationException(" in XMLparser.blobPrefixLength invalid format");
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
static GetVecCellAttr(blobStr) {
|
|
213
|
-
try {
|
|
214
|
-
let tokens = StrUtil.tokenize(blobStr, /,|;/);
|
|
215
|
-
return tokens[3].charAt(0);
|
|
216
|
-
}
|
|
217
|
-
catch (Exception) {
|
|
218
|
-
throw new ApplicationException(" in BlobType.GetVecCellAttr(): blob is in invalid format");
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
static blobPrefixLength(blob) {
|
|
222
|
-
try {
|
|
223
|
-
let prefixLength = blob.indexOf(';') + 1;
|
|
224
|
-
let prefix = blob.substr(0, prefixLength);
|
|
225
|
-
if (prefixLength > 0) {
|
|
226
|
-
let tokens = StrUtil.tokenize(prefix, ",");
|
|
227
|
-
if (tokens.length === GuiConstants.BLOB_PREFIX_ELEMENTS_COUNT)
|
|
228
|
-
return prefixLength;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (Exception) {
|
|
232
|
-
}
|
|
233
|
-
throw new ApplicationException(" in XMLparser.blobPrefixLength invalid format");
|
|
234
|
-
}
|
|
235
|
-
static getKey(blobStr) {
|
|
236
|
-
let tokens = StrUtil.tokenize(blobStr, /,|;/);
|
|
237
|
-
let key = 0;
|
|
238
|
-
if (tokens.length > 5) {
|
|
239
|
-
try {
|
|
240
|
-
key = NNumber.Parse(tokens[0]);
|
|
241
|
-
}
|
|
242
|
-
catch (Exception) {
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
return key;
|
|
246
|
-
}
|
|
247
|
-
static getBlobSize(blob) {
|
|
248
|
-
let size = 0;
|
|
249
|
-
try {
|
|
250
|
-
let tokens = StrUtil.tokenize(blob, /,|;/);
|
|
251
|
-
if (tokens.length > 5) {
|
|
252
|
-
size = blob.length;
|
|
253
|
-
for (let i = 0; i < 5; i = i + 1) {
|
|
254
|
-
size = size - tokens[i].length;
|
|
255
|
-
size = size - 1;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
catch (Exception) {
|
|
260
|
-
}
|
|
261
|
-
return size;
|
|
262
|
-
}
|
|
263
|
-
static ParseContentType(contentType) {
|
|
264
|
-
let newContentType = ' ';
|
|
265
|
-
switch (contentType) {
|
|
266
|
-
case 0:
|
|
267
|
-
newContentType = BlobType.CONTENT_TYPE_UNKNOWN;
|
|
268
|
-
break;
|
|
269
|
-
case 1:
|
|
270
|
-
newContentType = BlobType.CONTENT_TYPE_ANSI;
|
|
271
|
-
break;
|
|
272
|
-
case 2:
|
|
273
|
-
newContentType = BlobType.CONTENT_TYPE_UNICODE;
|
|
274
|
-
break;
|
|
275
|
-
case 3:
|
|
276
|
-
newContentType = BlobType.CONTENT_TYPE_BINARY;
|
|
277
|
-
}
|
|
278
|
-
return newContentType;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvYlR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9CbG9iVHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFvQixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxNQUFNLE9BQU8sUUFBUTtJQUNuQixNQUFNLENBQUMsb0JBQW9CLEdBQVcsR0FBRyxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBVyxHQUFHLENBQUM7SUFDdkMsTUFBTSxDQUFDLG9CQUFvQixHQUFXLEdBQUcsQ0FBQztJQUMxQyxNQUFNLENBQUMsbUJBQW1CLEdBQVcsR0FBRyxDQUFDO0lBT3pDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUNoQyxJQUFJO1lBQ0YsSUFBSSxNQUFNLEdBQWEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxTQUFTLEVBQUU7WUFDaEIsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHVEQUF1RCxDQUFDLENBQUM7U0FDekY7SUFDSCxDQUFDO0lBT0QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQW1CO1FBQzNDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFF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QUM7Z0JBQ0osY0FBYyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDL0MsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixjQUFjLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciwgU3RvcmFnZUF0dHJpYnV0ZSwgU3RyVXRpbCB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkV4Y2VwdGlvbiwgRGVidWcsIEVuY29kaW5nLCBJU09fODg1OV8xX0VuY29kaW5nLCBOTnVtYmVyLCBOU3RyaW5nIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBHdWlDb25zdGFudHMgfSBmcm9tICcuLi8uLi9HdWlDb25zdGFudHMnO1xyXG5pbXBvcnQgeyBHdWlFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuXHJcbmV4cG9ydCBjbGFzcyBCbG9iVHlwZSB7XHJcbiAgc3RhdGljIENPTlRFTlRfVFlQRV9VTktOT1dOOiBzdHJpbmcgPSAnMCc7XHJcbiAgc3RhdGljIENPTlRFTlRfVFlQRV9BTlNJOiBzdHJpbmcgPSAnMSc7XHJcbiAgc3RhdGljIENPTlRFTlRfVFlQRV9VTklDT0RFOiBzdHJpbmcgPSAnMic7XHJcbiAgc3RhdGljIENPTlRFTlRfVFlQRV9CSU5BUlk6IHN0cmluZyA9ICczJztcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm5zIHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIGJsb2I8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYmxvYlwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRDb250ZW50VHlwZShibG9iOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHRva2Vuczogc3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGJsb2IsIC8sfDsvKTtcclxuICAgICAgcmV0dXJuIHRva2Vuc1s0XS5jaGFyQXQoMCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoRXhjZXB0aW9uKSB7XHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIiBpbiBCbG9iVHlwZS5nZXRDb250ZW50VHlwZSBibG9iIGlzIGluIGludmFsaWQgZm9ybWF0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDcmVhdGVzIGFuIGVtcHR5IGJsb2IgcHJlZml4IHdpdGggYSBnaXZlbiBjZWxsIGF0dHJpYnV0ZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2ZWNDZWxsQXR0clwiPmluIGNhc2UgdGhpcyBibG9iIGlzIHZlY3RvciB0aGUgY2VsbHMgdHlwZSBlbHNlIDBcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFuIGVtcHR5IGJsb2IgcHJlZml4IHdpdGhvdXQgdGhlICc7XCIgYXQgdGhlIGVuZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldEVtcHR5QmxvYlByZWZpeCh2ZWNDZWxsQXR0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdChcIjAsMCx7MH0sezF9LDBcIiwgJ1xcMCcsIHZlY0NlbGxBdHRyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRlbnRUeXBlXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldEJsb2JQcmVmaXhGb3JDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdChcIjAsMCx7MH0sezB9LHsxfTtcIiwgJ1xcMCcsIGNvbnRlbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmV0dXJucyB0aGUgaGVhZGVyIG9ubHk8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldFByZWZpeChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaWR4OiBudW1iZXIgPSBzdHIuaW5kZXhPZignOycpLyonOycqLztcclxuICAgIHJldHVybiBzdHIuc3Vic3RyKDAsIGlkeCArIDEpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiQ29udGVudFR5cGVcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0RW5jb2RpbmdGcm9tQ29udGVudFR5cGUoQ29udGVudFR5cGU6IHN0cmluZyk6IEVuY29kaW5nIHtcclxuICAgIGxldCBlbmNvZGluZzogRW5jb2Rpbmc7XHJcblxyXG4gICAgaWYgKENvbnRlbnRUeXBlID09PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5JQ09ERSlcclxuICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5Vbmljb2RlO1xyXG4gICAgZWxzZSBpZiAoQ29udGVudFR5cGUgPT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9BTlNJKVxyXG4gICAgICBlbmNvZGluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldEVuY29kaW5nKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGVuY29kaW5nID0gSVNPXzg4NTlfMV9FbmNvZGluZy5JU09fODg1OV8xO1xyXG5cclxuICAgIHJldHVybiBlbmNvZGluZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhbnNpIGJ5dGVzIHRvIHVuaWNvZGUgYnl0ZXMuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJCeXRlc0luTWJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTWJUb1VuaWNvZGUoQnl0ZXNJbk1iOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XHJcbiAgICBsZXQgcmVzdWx0OiBVaW50OEFycmF5ID0gbnVsbDtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgVW5pY29kZVN0cmluZzogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RW5jb2RpbmcoKS5HZXRTdHJpbmcoQnl0ZXNJbk1iLCAwLCBCeXRlc0luTWIubGVuZ3RoKTtcclxuICAgICAgcmVzdWx0ID0gRW5jb2RpbmcuVW5pY29kZS5HZXRCeXRlcyhVbmljb2RlU3RyaW5nKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFeGNlcHRpb24pIHtcclxuICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHVuaWNvZGUgYnl0ZXMgdG8gYW5zaSBieXRlcy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIkJ5dGVzSW5Vbmljb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIFVuaWNvZGVUb01iKEJ5dGVzSW5Vbmljb2RlOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XHJcbiAgICBsZXQgcmVzdWx0OiBVaW50OEFycmF5ID0gbnVsbDtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgVW5pY29kZVN0cmluZzogc3RyaW5nID0gRW5jb2RpbmcuVW5pY29kZS5HZXRTdHJpbmcoQnl0ZXNJblVuaWNvZGUsIDAsIEJ5dGVzSW5Vbmljb2RlLmxlbmd0aCk7XHJcblxyXG4gICAgICByZXN1bHQgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRFbmNvZGluZygpLkdldEJ5dGVzKFVuaWNvZGVTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQXNzdW1lcyB0aGUgZ2l2ZW4gYmxvYiBjb250YWlucyBhIHN0cmluZyBhbmQgcmV0dXJucyBpdC4gSWYgdGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgYmxvYiBpcyBub3QgVW5pY29kZVxyXG4gIC8vLyB0aGVuIGFzc3VtZSBpdCBpcyBBTlNJLlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYmxvYlwiPmEgdmFsaWQgcmVwcmVzZW50YXRpb24gb2YgYSBibG9iXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIGNvbnRhaW5lZCBieSB0aGUgYmxvYlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldFN0cmluZyhibG9iOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBieXRlczogVWludDhBcnJheSA9IG51bGw7XHJcblxyXG4gICAgaWYgKEJsb2JUeXBlLmlzVmFsaWRCbG9iKGJsb2IpKSB7XHJcbiAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUoYmxvYik7XHJcbiAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREUpXHJcbiAgICAgICAgY29udGVudFR5cGUgPSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQU5TSTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYnl0ZXMgPSBCbG9iVHlwZS5nZXRCeXRlcyhibG9iKTtcclxuXHJcbiAgICAgICAgbGV0IGVuY29kaW5nOiBFbmNvZGluZyA9IEJsb2JUeXBlLmdldEVuY29kaW5nRnJvbUNvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTtcclxuICAgICAgICByZXN1bHQgPSBlbmNvZGluZy5HZXRTdHJpbmcoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gcmVzdWx0LmluZGV4T2YoJ1xcMCcpLyonXHUwMDAwJyovO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyKDAsIGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBEZWJ1Zy5Bc3NlcnQoZmFsc2UpO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENyZWF0ZSBhIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBjb250ZW50IHR5cGUgZnJvbSB0aGUgZGlzcGxheSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImJsb2JTdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRlbnRUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBjcmVhdGVGcm9tU3RyaW5nKGJsb2JTdHI6IHN0cmluZywgY29udGVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgYmxvYjogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBzcmNDb250ZW50VHlwZTogc3RyaW5nID0gY29udGVudFR5cGU7XHJcbiAgICBsZXQgYnl0ZXM6IFVpbnQ4QXJyYXkgPSBudWxsO1xyXG5cclxuICAgIGlmIChjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREUpXHJcbiAgICAgIHNyY0NvbnRlbnRUeXBlID0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0FOU0k7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYoYmxvYlN0ci5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcclxuICAgICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KDxBcnJheUJ1ZmZlcj48YW55PmJsb2JTdHIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBlbmNvZGluZzogRW5jb2RpbmcgPSBCbG9iVHlwZS5nZXRFbmNvZGluZ0Zyb21Db250ZW50VHlwZShzcmNDb250ZW50VHlwZSk7XHJcblxyXG4gICAgICAgIGJ5dGVzID0gZW5jb2RpbmcuR2V0Qnl0ZXMoYmxvYlN0cik7XHJcbiAgICAgIH1cclxuICAgICAgYmxvYiA9IEJsb2JUeXBlLmNyZWF0ZUZyb21CeXRlcyhieXRlcywgY29udGVudFR5cGUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICBibG9iID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYmxvYjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gR2V0IGJsb2IgY29udGVudHMgYXMgYnl0ZSBhcnJheVxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYmxvYlwiPmNvbnRlbnRzIGluY2x1ZGluZyBibG9iIHByZWZpeFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYnl0ZSBhcnJheSBhY2NvcmRpbmcgdG8gY29udGVudCB0eXBlIGluIGJsb2IgcHJlZml4XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0Qnl0ZXMoc3RyOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcclxuICAgIGxldCBieXRlczogVWludDhBcnJheSA9IG51bGw7XHJcbiAgICBsZXQgZGF0YTogc3RyaW5nID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeChzdHIpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBlbmNvZGluZzogRW5jb2RpbmcgPSBJU09fODg1OV8xX0VuY29kaW5nLklTT184ODU5XzE7XHJcbiAgICAgIGJ5dGVzID0gZW5jb2RpbmcuR2V0Qnl0ZXMoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoRXhjZXB0aW9uKSB7XHJcbiAgICAgIGJ5dGVzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYnl0ZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENyZWF0ZSBhIGJsb2Igb2YgdGhlIHNwZWNpZmllZCBjb250ZW50IHR5cGUgZnJvbSB0aGUgYnl0ZSBhcnJheVxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiQnl0ZXNcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZW50VHlwZVwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgY3JlYXRlRnJvbUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5LCBjb250ZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBibG9iU3RyID0gJyc7XHJcbiAgICBsZXQgYmxvYlByZWZpeDogc3RyaW5nO1xyXG4gICAgbGV0IGJsb2JEYXRhOiBzdHJpbmc7XHJcblxyXG4gICAgYmxvYlByZWZpeCA9IEJsb2JUeXBlLmdldEJsb2JQcmVmaXhGb3JDb250ZW50VHlwZShjb250ZW50VHlwZSk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGVuY29kaW5nOiBJU09fODg1OV8xX0VuY29kaW5nID0gSVNPXzg4NTlfMV9FbmNvZGluZy5JU09fODg1OV8xO1xyXG4gICAgICBibG9iRGF0YSA9IGVuY29kaW5nLkdldFN0cmluZyhieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFeGNlcHRpb24pIHtcclxuICAgICAgYmxvYkRhdGEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGJsb2JTdHIgPSBibG9iUHJlZml4ICsgYmxvYkRhdGE7XHJcblxyXG4gICAgcmV0dXJuIGJsb2JTdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZXN0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3JjXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGNvcHlCbG9iKGRlc3Q6IHN0cmluZywgc3JjOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHNyY0J5dGVzOiBVaW50OEFycmF5O1xyXG4gICAgbGV0IGRlc3RCeXRlczogVWludDhBcnJheTtcclxuXHJcbiAgICBpZiAoc3JjID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGVsc2UgaWYgKGRlc3QgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBzcmM7XHJcblxyXG4gICAgc3JjQnl0ZXMgPSBCbG9iVHlwZS5nZXRCeXRlcyhzcmMpO1xyXG5cclxuICAgIGxldCBkZXN0Q29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKGRlc3QpO1xyXG4gICAgbGV0IHNyY0NvbnRlbnRUeXBlOiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZShzcmMpO1xyXG5cclxuICAgIGlmIChzcmNDb250ZW50VHlwZSA9PT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0FOU0kgJiYgZGVzdENvbnRlbnRUeXBlID09PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5JQ09ERSlcclxuICAgICAgZGVzdEJ5dGVzID0gQmxvYlR5cGUuTWJUb1VuaWNvZGUoc3JjQnl0ZXMpO1xyXG4gICAgZWxzZSBpZiAoc3JjQ29udGVudFR5cGUgPT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTklDT0RFICYmIGRlc3RDb250ZW50VHlwZSA9PT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0FOU0kpXHJcbiAgICAgIGRlc3RCeXRlcyA9IEJsb2JUeXBlLlVuaWNvZGVUb01iKHNyY0J5dGVzKTtcclxuICAgIGVsc2VcclxuICAgICAgZGVzdEJ5dGVzID0gc3JjQnl0ZXM7XHJcblxyXG4gICAgZGVzdCA9IEJsb2JUeXBlLmNyZWF0ZUZyb21CeXRlcyhkZXN0Qnl0ZXMsIGRlc3RDb250ZW50VHlwZSk7XHJcblxyXG4gICAgcmV0dXJuIGRlc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlbW92ZXMgYmxvYiBwcmVmaXggZnJvbSBzb3VyY2U8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291cmNlXCI+LSBibG9iIHZhbHVlXHJcbiAgLy8vXHJcbiAgLy8vXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIHJlbW92ZUJsb2JQcmVmaXgoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGlkeDogbnVtYmVyO1xyXG4gICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZHggPSBzb3VyY2UuaW5kZXhPZignOycpO1xyXG4gICAgICBpZiAoaWR4IDwgMClcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVRvTG9nKFwiRXJyb3I6IGludmFsaWQgYmxvYiBwcmVmaXhcIiwgdHJ1ZSk7XHJcbiAgICAgIHJldHVybiBzb3VyY2Uuc3Vic3RyKGlkeCArIDEpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2tzIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBibG9iPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImJsb2JcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgdGhlIGJsb2IgaXMgdmFsaWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc1ZhbGlkQmxvYihibG9iOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoYmxvYiA9PT0gbnVsbCB8fCBibG9iLmluZGV4T2YoJzsnKSA8IDApXHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKGJsb2IpO1xyXG4gICAgICBpZiAoY29udGVudFR5cGUgIT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9BTlNJICYmIGNvbnRlbnRUeXBlICE9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZICYmIGNvbnRlbnRUeXBlICE9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5JQ09ERSAmJiBjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOS05PV04pXHJcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmFsaWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0Q29udGVudFR5cGUoc3RyOiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcHJlZml4TGFzdEluZGV4OiBudW1iZXIgPSBzdHIuaW5kZXhPZihcIjtcIik7XHJcbiAgICAgIGxldCBwcmVmaXg6IHN0cmluZyA9IHN0ci5zdWJzdHIoMCwgcHJlZml4TGFzdEluZGV4KTtcclxuXHJcbiAgICAgIGxldCBkYXRhTGVuZ3RoOiBudW1iZXIgPSBzdHIubGVuZ3RoIC0gKHByZWZpeC5sZW5ndGggKyAxKTtcclxuICAgICAgbGV0IGRhdGE6IHN0cmluZyA9IHN0ci5zdWJzdHIocHJlZml4TGFzdEluZGV4ICsgMSwgZGF0YUxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgcHJlZml4VG9rZW5zOiBzdHJpbmdbXSA9IFN0clV0aWwudG9rZW5pemUocHJlZml4LCAvLHw7Lyk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgR3VpQ29uc3RhbnRzLkJMT0JfUFJFRklYX0VMRU1FTlRTX0NPVU5UOyBpID0gaSArIDEpIHtcclxuICAgICAgICBpZiAoaSA9PT0gNClcclxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGNvbnRlbnRUeXBlICsgXCIsXCI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgcHJlZml4VG9rZW5zW2ldICsgXCIsXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdC5zdWJzdHIoMCwgcmVzdWx0Lmxlbmd0aCAtIDEpICsgXCI7XCIgKyBkYXRhO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCIgaW4gQmxvYlR5cGUuc2V0Q29udGVudFR5cGUgOiBpbnZhbGlkIGZvcm1hdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUmVwbGFjZSB0aGUgdmVjdG9yJ3MgY2VsbCBhdHRyaWJ1dGUgaW4gdGhlIGJsb2IgcHJlZml4IGJ5IHRoZSBzcGVjaWZpZWQgb25lPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPmEgdmFsaWQgYmxvYiBzdHJpbmcgKGkuZS4gcHJlZml4O2RhdGEpIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmVjQ2VsbEF0dHJcIj5hdHRyaWJ1dGUgdG8gaW5zZXJ0IGludG8gdGhlIHByZWZpeCA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgYmxvYiBzdHJpbmcgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBTZXRWZWNDZWxsQXR0cihzdHI6IHN0cmluZywgdmVjQ2VsbEF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gXCJcIjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBwcmVmaXhMYXN0SW5kZXg6IG51bWJlciA9IHN0ci5pbmRleE9mKFwiO1wiKTtcclxuICAgICAgbGV0IHByZWZpeDogc3RyaW5nID0gc3RyLnN1YnN0cigwLCBwcmVmaXhMYXN0SW5kZXgpO1xyXG5cclxuICAgICAgbGV0IGRhdGE6IHN0cmluZyA9IHN0ci5zdWJzdHIocHJlZml4TGFzdEluZGV4ICsgMSk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXSA9IFN0clV0aWwudG9rZW5pemUocHJlZml4LCAvLHw7Lyk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgR3VpQ29uc3RhbnRzLkJMT0JfUFJFRklYX0VMRU1FTlRTX0NPVU5UOyBpID0gaSArIDEpIHtcclxuICAgICAgICBpZiAoaSA9PT0gMylcclxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIDxzdHJpbmc+dmVjQ2VsbEF0dHIgKyBcIixcIjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB0b2tlbnNbaV0gKyBcIixcIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0LnN1YnN0cigwLCByZXN1bHQubGVuZ3RoIC0gMSkgKyBcIjtcIiArIGRhdGE7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoRXhjZXB0aW9uKSB7XHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIiBpbiBYTUxwYXJzZXIuYmxvYlByZWZpeExlbmd0aCBpbnZhbGlkIGZvcm1hdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUmV0dXJucyB0aGUgVmVjdG9yJyBjZWxsIGF0dHJpYnV0ZSBmcm9tIHRoZSBwcmVmaXguIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJibG9iU3RyXCI+QSB2YWxpZCBibG9iIHN0cmluZyAgKGkuZS4gcHJlZml4O2RhdGEpIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0VmVjQ2VsbEF0dHIoYmxvYlN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShibG9iU3RyLCAvLHw7Lyk7XHJcblxyXG4gICAgICByZXR1cm4gdG9rZW5zWzNdLmNoYXJBdCgwKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFeGNlcHRpb24pIHtcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiIGluIEJsb2JUeXBlLkdldFZlY0NlbGxBdHRyKCk6IGJsb2IgaXMgaW4gaW52YWxpZCBmb3JtYXRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBibG9iIHByZWZpeC4gVGhlIHByZWZpeCBpcyBpbiB0aGUgZm9ybWF0OlxyXG4gIC8vLyA8dHQ+XCJPYmpIYW5kbGUsVmFyaWFudElkeCxDb250ZW50VHlwZSxWZWNDZWxsQXR0cjtcIjwvdHQ+LiBUaGUgbGVuZ3RoIGluY2x1ZGVzIHRoZSBjb21tYXMgYW5kIHRoZVxyXG4gIC8vLyBzZW1pY29sb24uXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJibG9iXCI+YSB2YWxpZCBibG9iXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgYmxvYiBwcmVmaXggbGVuZ3RoXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgYmxvYlByZWZpeExlbmd0aChibG9iOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHByZWZpeExlbmd0aDogbnVtYmVyID0gYmxvYi5pbmRleE9mKCc7JykgKyAxO1xyXG4gICAgICBsZXQgcHJlZml4OiBzdHJpbmcgPSBibG9iLnN1YnN0cigwLCBwcmVmaXhMZW5ndGgpO1xyXG5cclxuICAgICAgLy8gY2hlY2sgaWYgdGhlIHByZWZpeCBpcyB2YWxpZFxyXG4gICAgICBpZiAocHJlZml4TGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCB0b2tlbnM6IHN0cmluZ1tdID0gU3RyVXRpbC50b2tlbml6ZShwcmVmaXgsIFwiLFwiKTtcclxuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gR3VpQ29uc3RhbnRzLkJMT0JfUFJFRklYX0VMRU1FTlRTX0NPVU5UKVxyXG4gICAgICAgICAgcmV0dXJuIHByZWZpeExlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICAvLyBpbnZhbGlkIHByZWZpeFxyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIiBpbiBYTUxwYXJzZXIuYmxvYlByZWZpeExlbmd0aCBpbnZhbGlkIGZvcm1hdFwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0cyB0aGUga2V5IGZyb20gYSBibG9iIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYmxvYlN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0S2V5KGJsb2JTdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXSA9IFN0clV0aWwudG9rZW5pemUoYmxvYlN0ciwgLyx8Oy8pO1xyXG4gICAgbGV0IGtleTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBrZXkgPSBOTnVtYmVyLlBhcnNlKHRva2Vuc1swXSk7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKEV4Y2VwdGlvbikge1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2FsY3VsYXRlcyB0aGUgYmxvYiBzaXplIGhlbGQgaW4gdGhlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYmxvYlwiPiBUaGUgc3RyaW5nIGhvbGRpbmcgdGhlIGJsb2IgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRCbG9iU2l6ZShibG9iOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHRva2Vuczogc3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGJsb2IsIC8sfDsvKTtcclxuICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgc2l6ZSA9IGJsb2IubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCA1OyBpID0gaSArIDEpIHtcclxuICAgICAgICAgIHNpemUgPSBzaXplIC0gdG9rZW5zW2ldLmxlbmd0aDtcclxuICAgICAgICAgIHNpemUgPSBzaXplIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChFeGNlcHRpb24pIHtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2l6ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUGFyc2UgY29udGVudCB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZW50VHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgUGFyc2VDb250ZW50VHlwZShjb250ZW50VHlwZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBuZXdDb250ZW50VHlwZTogc3RyaW5nID0gJyAnO1xyXG4gICAgc3dpdGNoIChjb250ZW50VHlwZSkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgbmV3Q29udGVudFR5cGUgPSBCbG9iVHlwZS5DT05URU5UX1RZUEVfVU5LTk9XTjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIG5ld0NvbnRlbnRUeXBlID0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0FOU0k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBuZXdDb250ZW50VHlwZSA9IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTklDT0RFO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgbmV3Q29udGVudFR5cGUgPSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0NvbnRlbnRUeXBlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { GuiConstants } from "../../GuiConstants";
|
|
2
|
-
import { StorageAttribute, StrUtil } from "@magic-xpa/utils";
|
|
3
|
-
import { NUM_TYPE } from "./NUM_TYPE";
|
|
4
|
-
import { ApplicationException, NString } from "@magic-xpa/mscorelib";
|
|
5
|
-
import { VectorType } from "./VectorType";
|
|
6
|
-
export const EMPTY_DCREF = -2;
|
|
7
|
-
export const NOT_FOUND = GuiConstants.DEFAULT_VALUE_INT;
|
|
8
|
-
export class DcValues {
|
|
9
|
-
_id = 0;
|
|
10
|
-
_type = StorageAttribute.NONE;
|
|
11
|
-
_refCount = 0;
|
|
12
|
-
_nullFlags = null;
|
|
13
|
-
_isNumericType = false;
|
|
14
|
-
_numVals = null;
|
|
15
|
-
_linkVals = null;
|
|
16
|
-
_dispVals = null;
|
|
17
|
-
get HasReferences() {
|
|
18
|
-
return this._refCount > 0;
|
|
19
|
-
}
|
|
20
|
-
constructor(empty) {
|
|
21
|
-
if (empty) {
|
|
22
|
-
this._id = EMPTY_DCREF;
|
|
23
|
-
}
|
|
24
|
-
this._isNumericType = false;
|
|
25
|
-
}
|
|
26
|
-
GetAttr() {
|
|
27
|
-
return this._type;
|
|
28
|
-
}
|
|
29
|
-
setType(type) {
|
|
30
|
-
this._type = type;
|
|
31
|
-
if (this._type === StorageAttribute.MEMO)
|
|
32
|
-
this._type = StorageAttribute.ALPHA;
|
|
33
|
-
if (this._type === StorageAttribute.NUMERIC || this._type === StorageAttribute.DATE ||
|
|
34
|
-
this._type === StorageAttribute.TIME) {
|
|
35
|
-
this._isNumericType = true;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
SetID(newId) {
|
|
39
|
-
this._id = newId;
|
|
40
|
-
}
|
|
41
|
-
SetDisplayValues(displayValues) {
|
|
42
|
-
if (displayValues !== null)
|
|
43
|
-
this._dispVals = displayValues.slice();
|
|
44
|
-
else
|
|
45
|
-
this._dispVals = null;
|
|
46
|
-
}
|
|
47
|
-
SetLinkValues(linkValues) {
|
|
48
|
-
if (linkValues !== null)
|
|
49
|
-
this._linkVals = linkValues.slice();
|
|
50
|
-
else
|
|
51
|
-
this._linkVals = null;
|
|
52
|
-
this.setNumericVals();
|
|
53
|
-
}
|
|
54
|
-
setNullFlags(nullFlags) {
|
|
55
|
-
if (nullFlags !== null)
|
|
56
|
-
this._nullFlags = nullFlags.slice();
|
|
57
|
-
else
|
|
58
|
-
this._nullFlags = null;
|
|
59
|
-
}
|
|
60
|
-
setNumericVals() {
|
|
61
|
-
if (this._isNumericType && this._linkVals !== null) {
|
|
62
|
-
this._numVals = new Array(this._linkVals.length);
|
|
63
|
-
for (let i = 0; i < this._linkVals.length; i = i + 1) {
|
|
64
|
-
this._numVals[i] = new NUM_TYPE(this._linkVals[i]);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
this._numVals = null;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
getId() {
|
|
72
|
-
return this._id;
|
|
73
|
-
}
|
|
74
|
-
getDispVals() {
|
|
75
|
-
return this._dispVals;
|
|
76
|
-
}
|
|
77
|
-
GetLinkVals() {
|
|
78
|
-
return this._linkVals;
|
|
79
|
-
}
|
|
80
|
-
getIndexOf(mgVal, isVectorValue, isNull, extraVals, extraNums, splitCommaSeperatedVals) {
|
|
81
|
-
let result = NOT_FOUND;
|
|
82
|
-
let tmpMgVal;
|
|
83
|
-
let ctrlNumVal;
|
|
84
|
-
let trimmedVal;
|
|
85
|
-
let vals = null;
|
|
86
|
-
let nums = null;
|
|
87
|
-
let offset = 0;
|
|
88
|
-
let firstFitMatchIdx;
|
|
89
|
-
let firstFitMatchLength = -1;
|
|
90
|
-
let minLength = -1;
|
|
91
|
-
let compStr = "";
|
|
92
|
-
let indice = null;
|
|
93
|
-
let values = null;
|
|
94
|
-
if (isNull) {
|
|
95
|
-
let i = 0;
|
|
96
|
-
indice = [
|
|
97
|
-
NOT_FOUND
|
|
98
|
-
];
|
|
99
|
-
for (i = 0; this._nullFlags !== null && i < this._nullFlags.length; i++) {
|
|
100
|
-
if (this._nullFlags[i]) {
|
|
101
|
-
indice[0] = i;
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return indice;
|
|
106
|
-
}
|
|
107
|
-
if (!isVectorValue) {
|
|
108
|
-
if (splitCommaSeperatedVals) {
|
|
109
|
-
values = mgVal.split(',');
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
values = [
|
|
113
|
-
mgVal
|
|
114
|
-
];
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
let vectorType = new VectorType(mgVal);
|
|
119
|
-
values = vectorType.GetCellValues();
|
|
120
|
-
}
|
|
121
|
-
indice = new Array(values.length);
|
|
122
|
-
for (let iCtr = 0; iCtr < values.length; iCtr = iCtr + 1) {
|
|
123
|
-
result = NOT_FOUND;
|
|
124
|
-
firstFitMatchIdx = NOT_FOUND;
|
|
125
|
-
tmpMgVal = values[iCtr];
|
|
126
|
-
if (this._isNumericType || extraNums !== null) {
|
|
127
|
-
ctrlNumVal = new NUM_TYPE(tmpMgVal);
|
|
128
|
-
trimmedVal = tmpMgVal;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
ctrlNumVal = null;
|
|
132
|
-
trimmedVal = StrUtil.rtrim(tmpMgVal);
|
|
133
|
-
}
|
|
134
|
-
for (let i = 0; i < 2 && result === NOT_FOUND; i++) {
|
|
135
|
-
switch (i) {
|
|
136
|
-
case 0:
|
|
137
|
-
vals = extraVals;
|
|
138
|
-
nums = extraNums;
|
|
139
|
-
offset = 0;
|
|
140
|
-
break;
|
|
141
|
-
case 1:
|
|
142
|
-
default:
|
|
143
|
-
if (this._isNumericType || nums != null)
|
|
144
|
-
offset = (nums == null ? 0 : nums.length);
|
|
145
|
-
else
|
|
146
|
-
offset = (vals == null ? 0 : vals.length);
|
|
147
|
-
vals = this._linkVals;
|
|
148
|
-
nums = this._numVals;
|
|
149
|
-
break;
|
|
150
|
-
}
|
|
151
|
-
if (vals != null) {
|
|
152
|
-
for (let j = 0; j < vals.length && result === NOT_FOUND; j++) {
|
|
153
|
-
if (this._isNumericType || nums != null) {
|
|
154
|
-
if (NUM_TYPE.num_cmp(ctrlNumVal, nums[j]) === 0 || tmpMgVal === vals[j] ||
|
|
155
|
-
tmpMgVal === vals[j]) {
|
|
156
|
-
result = j + offset;
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
if (vals[j] === tmpMgVal || trimmedVal.length > 0 && StrUtil.rtrim(vals[j]) === trimmedVal) {
|
|
162
|
-
result = j + offset;
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
if (trimmedVal.length === 0 && StrUtil.rtrim(vals[j]).length === 0) {
|
|
166
|
-
result = j + offset;
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
if (result === NOT_FOUND && trimmedVal.length > 0) {
|
|
170
|
-
minLength = Math.min(trimmedVal.length, vals[j].length);
|
|
171
|
-
compStr = trimmedVal.substr(0, minLength);
|
|
172
|
-
if (compStr.length > 0 && vals[j].startsWith(compStr)) {
|
|
173
|
-
if (minLength > firstFitMatchLength) {
|
|
174
|
-
firstFitMatchIdx = j + offset;
|
|
175
|
-
firstFitMatchLength = minLength;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
if (result === NOT_FOUND)
|
|
184
|
-
result = firstFitMatchIdx;
|
|
185
|
-
indice[iCtr] = result;
|
|
186
|
-
}
|
|
187
|
-
return indice;
|
|
188
|
-
}
|
|
189
|
-
getLinkValue(idx) {
|
|
190
|
-
let lnkVal = null;
|
|
191
|
-
if (this._linkVals !== null) {
|
|
192
|
-
lnkVal = this._linkVals[idx];
|
|
193
|
-
}
|
|
194
|
-
return lnkVal;
|
|
195
|
-
}
|
|
196
|
-
isNull(idx) {
|
|
197
|
-
if (this._nullFlags == null)
|
|
198
|
-
return false;
|
|
199
|
-
return this._nullFlags[idx];
|
|
200
|
-
}
|
|
201
|
-
AddReference() {
|
|
202
|
-
this._refCount++;
|
|
203
|
-
}
|
|
204
|
-
RemoveReference() {
|
|
205
|
-
this._refCount--;
|
|
206
|
-
if (this._refCount < 0) {
|
|
207
|
-
throw new ApplicationException("in dcVals.decrease() references count is less than zero");
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
ToString() {
|
|
211
|
-
return NString.Format("{{DCValues 0x{0:X8}, {1} refs}}", this._id, this._refCount);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGNWYWx1ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9EY1ZhbHVlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLG9CQUFvQixFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFHeEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxZQUFZLENBQUMsaUJBQWlCLENBQUM7QUFHaEUsTUFBTSxPQUFPLFFBQVE7SUFHWCxHQUFHLEdBQVcsQ0FBQyxDQUFDO0lBQ2hCLEtBQUssR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ2hELFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsVUFBVSxHQUFjLElBQUksQ0FBQztJQUM3QixjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLFFBQVEsR0FBZSxJQUFJLENBQUM7SUFDNUIsU0FBUyxHQUFhLElBQUksQ0FBQztJQUMzQixTQUFTLEdBQWEsSUFBSSxDQUFDO0lBRW5DLElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQU9ELFlBQVksS0FBYztRQUN4QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFL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UyxHQUFHLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksb0JBQW9CLENBQUMseURBQXlELENBQUMsQ0FBQztTQUMzRjtJQUNILENBQUM7SUFLRCxRQUFRO1FBQ04sT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVJlZmVyZW5jZWRPYmplY3R9IGZyb20gXCIuL0lSZWZlcmVuY2VkT2JqZWN0XCI7XHJcbmltcG9ydCB7R3VpQ29uc3RhbnRzfSBmcm9tIFwiLi4vLi4vR3VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7U3RvcmFnZUF0dHJpYnV0ZSwgU3RyVXRpbH0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtOVU1fVFlQRX0gZnJvbSBcIi4vTlVNX1RZUEVcIjtcclxuaW1wb3J0IHtBcHBsaWNhdGlvbkV4Y2VwdGlvbiwgTlN0cmluZ30gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7VmVjdG9yVHlwZX0gZnJvbSBcIi4vVmVjdG9yVHlwZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBFTVBUWV9EQ1JFRjogbnVtYmVyID0gLTI7XHJcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkQ6IG51bWJlciA9IEd1aUNvbnN0YW50cy5ERUZBVUxUX1ZBTFVFX0lOVDtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRGNWYWx1ZXMgaW1wbGVtZW50cyBJUmVmZXJlbmNlZE9iamVjdCB7XHJcblxyXG5cclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90eXBlOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FOyAvLyBBbHBoYSB8IE51bWVyaWMgfCBEYXRlIHwgVGltZSB8IExvZ2ljYWxcclxuICBwcml2YXRlIF9yZWZDb3VudDogbnVtYmVyID0gMDsgLy8gcmVmZXJlbmNlcyBjb3VudGVyXHJcbiAgcHJpdmF0ZSBfbnVsbEZsYWdzOiBib29sZWFuW10gPSBudWxsOyAvLyBsaW5rZWQgbnVsbCB2YWx1ZSBmbGFnc1xyXG4gIHByaXZhdGUgX2lzTnVtZXJpY1R5cGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gdHJ1ZSBpZiB0aGUgdHlwZSBpcyBvbmUgb2Y6IG51bWVyaWMsIGRhdGUsIHRpbWVcclxuICBwcml2YXRlIF9udW1WYWxzOiBOVU1fVFlQRVtdID0gbnVsbDsgLy8gbnVtZXJpYyBsaW5rZWQgdmFsdWVzXHJcbiAgcHJpdmF0ZSBfbGlua1ZhbHM6IHN0cmluZ1tdID0gbnVsbDsgLy8gbGlua2VkIHZhbHVlc1xyXG4gIHByaXZhdGUgX2Rpc3BWYWxzOiBzdHJpbmdbXSA9IG51bGw7IC8vIGRpc3BsYXkgdmFsdWVzXHJcblxyXG4gIGdldCBIYXNSZWZlcmVuY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZkNvdW50ID4gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImVtcHR5XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc1ZlY3RvclwiPjwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IoZW1wdHk6IGJvb2xlYW4pIHtcclxuICAgIGlmIChlbXB0eSkge1xyXG4gICAgICB0aGlzLl9pZCA9IEVNUFRZX0RDUkVGO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNOdW1lcmljVHlwZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHRoZSBhdHRyIG9mIERjVmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRBdHRyKCk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG5cclxuICBzZXRUeXBlKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTylcclxuICAgICAgdGhpcy5fdHlwZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IHRoaXMuX3R5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fFxyXG4gICAgICB0aGlzLl90eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpIHtcclxuICAgICAgdGhpcy5faXNOdW1lcmljVHlwZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTZXRJRChuZXdJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pZCA9IG5ld0lkO1xyXG4gIH1cclxuXHJcbiAgU2V0RGlzcGxheVZhbHVlcyhkaXNwbGF5VmFsdWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKGRpc3BsYXlWYWx1ZXMgIT09IG51bGwpXHJcbiAgICAgIHRoaXMuX2Rpc3BWYWxzID0gZGlzcGxheVZhbHVlcy5zbGljZSgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9kaXNwVmFscyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBTZXRMaW5rVmFsdWVzKGxpbmtWYWx1ZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAobGlua1ZhbHVlcyAhPT0gbnVsbClcclxuICAgICAgdGhpcy5fbGlua1ZhbHMgPSBsaW5rVmFsdWVzLnNsaWNlKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2xpbmtWYWxzID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNldE51bWVyaWNWYWxzKCk7XHJcbiAgfVxyXG5cclxuICBzZXROdWxsRmxhZ3MobnVsbEZsYWdzOiBib29sZWFuW10pOiB2b2lkIHtcclxuICAgIGlmIChudWxsRmxhZ3MgIT09IG51bGwpXHJcbiAgICAgIHRoaXMuX251bGxGbGFncyA9IG51bGxGbGFncy5zbGljZSgpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fbnVsbEZsYWdzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TnVtZXJpY1ZhbHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNOdW1lcmljVHlwZSAmJiB0aGlzLl9saW5rVmFscyAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9udW1WYWxzID0gbmV3IEFycmF5PE5VTV9UWVBFPih0aGlzLl9saW5rVmFscy5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fbGlua1ZhbHMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICB0aGlzLl9udW1WYWxzW2ldID0gbmV3IE5VTV9UWVBFKHRoaXMuX2xpbmtWYWxzW2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX251bVZhbHMgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGlkIG9mIHRoaXMgZGNWYWxzIG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0SWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGRpc3BsYXkgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXREaXNwVmFscygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcFZhbHM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiBMaW5rIGZpZWxkIHZhbHVlcy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldExpbmtWYWxzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLl9saW5rVmFscztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBhcnJheSBvZiBpbmRpY2UgZm9yIGFuIGl0ZW0gaW4gdGhlIGxpc3QgYnkgY29tcGFyaW5nIHRoZSBtZ1ZhbCB0byB0aGUgbGlua2VkIHZhbHVlIG9yICgtMSkgaWYgbm9uZSB3YXNcclxuICAvLy8gICBmb3VuZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ1ZhbFwiPnRoZSBpbnRlcm5hbCB2YWx1ZSB0byBsb29rIGZvciA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNWZWN0b3JWYWx1ZVwiPkRlbm90ZXMgd2hldGhlciB0aGUgdmFsdWUgaW4gbWdWYWwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSB2ZWN0b3IgKHRydWUpIG9yIG5vdCAoZmFsc2UpLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc051bGxcIj50cnVlIGlmIHRoZSB2YWx1ZSB0byBsb29rIGZvciBpcyBudWxsIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHRyYVZhbHNcIj5BZGRpdGlvbmFsIHZhbHVlcywgcHJlcGVuZGVkIHRvIHRoZSBzZWFyY2hlZCB2YWx1ZXMuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHRyYU51bXNcIj5BZGRpdGlvbmFsIG51bWVyaWMgdmFsdWVzIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgc2VhcmNoZWQgdmFsdWVzLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcGxpdENvbW1hU2VwZXJhdGVkVmFsc1wiPnRvIHNwbGl0IHRoZSB2YWwgb24gY29tbWEgb3Igbm90IDwvcGFyYW0+XHJcbiAgZ2V0SW5kZXhPZihtZ1ZhbDogc3RyaW5nLCBpc1ZlY3RvclZhbHVlOiBib29sZWFuLCBpc051bGw6IGJvb2xlYW4sIGV4dHJhVmFsczogc3RyaW5nW10sIGV4dHJhTnVtczogTlVNX1RZUEVbXSwgc3BsaXRDb21tYVNlcGVyYXRlZFZhbHM6IGJvb2xlYW4pOiBudW1iZXJbXSB7XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSBOT1RfRk9VTkQ7XHJcblxyXG4gICAgbGV0IHRtcE1nVmFsOiBzdHJpbmc7XHJcbiAgICBsZXQgY3RybE51bVZhbDogTlVNX1RZUEU7XHJcbiAgICBsZXQgdHJpbW1lZFZhbDogc3RyaW5nO1xyXG4gICAgbGV0IHZhbHM6IHN0cmluZ1tdID0gbnVsbDtcclxuICAgIGxldCBudW1zOiBOVU1fVFlQRVtdID0gbnVsbDtcclxuICAgIGxldCBvZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZmlyc3RGaXRNYXRjaElkeDtcclxuICAgIGxldCBmaXJzdEZpdE1hdGNoTGVuZ3RoOiBudW1iZXIgPSAtMTtcclxuICAgIGxldCBtaW5MZW5ndGg6IG51bWJlciA9IC0xO1xyXG4gICAgbGV0IGNvbXBTdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgaW5kaWNlOiBudW1iZXJbXSA9IG51bGw7XHJcbiAgICBsZXQgdmFsdWVzOiBzdHJpbmdbXSA9IG51bGw7XHJcblxyXG4gICAgaWYgKGlzTnVsbCkge1xyXG4gICAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuICAgICAgaW5kaWNlID0gW1xyXG4gICAgICAgIE5PVF9GT1VORFxyXG4gICAgICBdO1xyXG4gICAgICBmb3IgKGkgPSAwOyB0aGlzLl9udWxsRmxhZ3MgIT09IG51bGwgJiYgaSA8IHRoaXMuX251bGxGbGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLl9udWxsRmxhZ3NbaV0pIHtcclxuICAgICAgICAgIGluZGljZVswXSA9IGk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpbmRpY2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzVmVjdG9yVmFsdWUpIHtcclxuICAgICAgLy8gc3BsaXQgdGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXM7XHJcbiAgICAgIGlmIChzcGxpdENvbW1hU2VwZXJhdGVkVmFscykge1xyXG4gICAgICAgIHZhbHVlcyA9IG1nVmFsLnNwbGl0KCcsJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFsdWVzID0gW1xyXG4gICAgICAgICAgbWdWYWxcclxuICAgICAgICBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHZlY3RvclR5cGU6IFZlY3RvclR5cGUgPSBuZXcgVmVjdG9yVHlwZShtZ1ZhbCk7XHJcbiAgICAgIHZhbHVlcyA9IHZlY3RvclR5cGUuR2V0Q2VsbFZhbHVlcygpO1xyXG4gICAgfVxyXG4gICAgaW5kaWNlID0gbmV3IEFycmF5PG51bWJlcj4odmFsdWVzLmxlbmd0aCk7XHJcblxyXG4gICAgZm9yIChsZXQgaUN0cjogbnVtYmVyID0gMDsgaUN0ciA8IHZhbHVlcy5sZW5ndGg7IGlDdHIgPSBpQ3RyICsgMSkge1xyXG4gICAgICByZXN1bHQgPSBOT1RfRk9VTkQ7XHJcbiAgICAgIGZpcnN0Rml0TWF0Y2hJZHggPSBOT1RfRk9VTkQ7XHJcblxyXG4gICAgICB0bXBNZ1ZhbCA9IHZhbHVlc1tpQ3RyXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9pc051bWVyaWNUeXBlIHx8IGV4dHJhTnVtcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY3RybE51bVZhbCA9IG5ldyBOVU1fVFlQRSh0bXBNZ1ZhbCk7XHJcbiAgICAgICAgdHJpbW1lZFZhbCA9IHRtcE1nVmFsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGN0cmxOdW1WYWwgPSBudWxsO1xyXG4gICAgICAgIHRyaW1tZWRWYWwgPSBTdHJVdGlsLnJ0cmltKHRtcE1nVmFsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUnVuIHR3byBwYXNzZXMuIEZpcnN0IG9uZSBvbiBleHRyYSB2YWx1ZXMsIHNlY29uZCBvbmUgb24gdmFsdWVzIGJlbG9uZ2luZyB0byB0aGlzIG9iamVjdFxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIgJiYgcmVzdWx0ID09PSBOT1RfRk9VTkQ7IGkrKykge1xyXG4gICAgICAgIHN3aXRjaCAoaSkge1xyXG4gICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICB2YWxzID0gZXh0cmFWYWxzO1xyXG4gICAgICAgICAgICBudW1zID0gZXh0cmFOdW1zO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNOdW1lcmljVHlwZSB8fCBudW1zICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gKG51bXMgPT0gbnVsbCA/IDAgOiBudW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBvZmZzZXQgPSAodmFscyA9PSBudWxsID8gMCA6IHZhbHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgdmFscyA9IHRoaXMuX2xpbmtWYWxzO1xyXG4gICAgICAgICAgICBudW1zID0gdGhpcy5fbnVtVmFscztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFscyAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHMubGVuZ3RoICYmIHJlc3VsdCA9PT0gTk9UX0ZPVU5EOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTnVtZXJpY1R5cGUgfHwgbnVtcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKE5VTV9UWVBFLm51bV9jbXAoY3RybE51bVZhbCwgbnVtc1tqXSkgPT09IDAgfHwgdG1wTWdWYWwgPT09IHZhbHNbal0gfHxcclxuICAgICAgICAgICAgICAgIHRtcE1nVmFsID09PSB2YWxzW2pdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgbnVtZXJpYyB0eXBlIGlzIGZvdW5kIGV4YWN0bHlcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGogKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHNbal0gPT09IHRtcE1nVmFsIHx8IHRyaW1tZWRWYWwubGVuZ3RoID4gMCAmJiBTdHJVdGlsLnJ0cmltKHZhbHNbal0pID09PSB0cmltbWVkVmFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBJZiBNYWdpYyBzZW50IHVzIGEgYmxhbmsgdmFsdWUsIGFuZCBzdWNoIGEgdmFsdWUgZXhpc3RzIGluIHRoZSBcIm5vbiBEQyByYW5nZVwiIHNlbGVjdCBpdC5cclxuICAgICAgICAgICAgICAvLyBRQ1IgIyA3NTEwMzcgLSBzZWFyY2ggZm9yIGJsYW5rIHZhbHVlcyBldmVuIGluIHRoZSBsaW5rZWQgdmFsdWVzIGFycmF5IG9mIHRoZSBkYXRhIGNvbnRyb2xcclxuICAgICAgICAgICAgICBpZiAodHJpbW1lZFZhbC5sZW5ndGggPT09IDAgJiYgU3RyVXRpbC5ydHJpbSh2YWxzW2pdKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGogKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIHNhdmUgdGhlIGZpcnN0IGZpdHRpbmcgcmVzdWx0XHJcbiAgICAgICAgICAgICAgLy8gZml4ZWQgYnVnIzogOTM1MDE1LCB0aGUgY29tcGFyaXNvbiB3aWxsIGJlIGFjY29yZGluZyB0byB0aGUgbWluIGxlbmd0aCBvZiB0aGUgZGF0YSAmIHRoZSBvcHRpb25zXHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gTk9UX0ZPVU5EICYmIHRyaW1tZWRWYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbWluTGVuZ3RoID0gTWF0aC5taW4odHJpbW1lZFZhbC5sZW5ndGgsIHZhbHNbal0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGNvbXBTdHIgPSB0cmltbWVkVmFsLnN1YnN0cigwLCBtaW5MZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBTdHIubGVuZ3RoID4gMCAmJiB2YWxzW2pdLnN0YXJ0c1dpdGgoY29tcFN0cikpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBtaW4gbGVuZ3RoIG1hdGNoLCBjaGVjayBpZiBpdCBpcyB0aGUgZmlyc3QgZml0IG1hdGNoLlxyXG4gICAgICAgICAgICAgICAgICAvLyBlZzogaWYgbGlzdCBoYXMgYSxhYWEsYWFhYWEgYW5kIGZpZWxkIHZhbHVlIGlzICdhYScgdGhlbiBmaXJzdCBmaXQgbWF0Y2ggaXMgJ2FhYScuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmIGxpc3QgaXMgYSxhYWFhYSxhYWEgYW5kIGZpZWxkIHZhbHVlIGlzICdhYScgdGhlbiBmaXJzdCBmaXQgbWF0Y2ggaXMgJ2FhYWFhJy5cclxuICAgICAgICAgICAgICAgICAgLy8gaWYgZmlyc3QgZml0IG5vdCBmb3VuZCwgdGhlbiBjbG9zZXN0IG1hdGNoIGlzIHVzZWQgKGVnLSBpZiBmaWVsZCB2YWx1ZSBpc1xyXG4gICAgICAgICAgICAgICAgICAvLyAnYWFhYWFhYWFhJyBpbiBib3RoIHRoZSBhYm92ZSBsaXN0LCBjbG9zZXN0IG1hdGNoIHdvdWxkIGJlICdhYWFhYScpLlxyXG4gICAgICAgICAgICAgICAgICBpZiAobWluTGVuZ3RoID4gZmlyc3RGaXRNYXRjaExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0TWF0Y2hJZHggPSBqICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Rml0TWF0Y2hMZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXN1bHQgPT09IE5PVF9GT1VORClcclxuICAgICAgICByZXN1bHQgPSBmaXJzdEZpdE1hdGNoSWR4O1xyXG5cclxuICAgICAgLy8gc3RvcmUgaW5kaWNlIGZvdW5kIGluIGludGVnZXIgYXJyYXkuXHJcbiAgICAgIGluZGljZVtpQ3RyXSA9IHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5kaWNlO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXRzIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIGxpbmsgaXRlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj50aGUgaW5kZXggb2YgdGhlIGxpbmsgdmFsdWUgKDAgPSBmaXJzdCBpdGVtKSA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gTWFnaWMgdmFsdWUgb2YgdGhlIGl0ZW0gPC9yZXR1cm5zPlxyXG4gIGdldExpbmtWYWx1ZShpZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbG5rVmFsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9saW5rVmFscyAhPT0gbnVsbCkge1xyXG4gICAgICBsbmtWYWwgPSB0aGlzLl9saW5rVmFsc1tpZHhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsbmtWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlLCBpZiB2YWx1ZSBhdCBpbmRleCBpZHggaXMgbnVsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0aGVcIj5pbmRleCBvZiBhbiBpdGVtIGluIHRoZSBsaXN0IDwvcGFyYW0+XHJcbiAgaXNOdWxsKGlkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5fbnVsbEZsYWdzID09IG51bGwpXHJcbiAgICAvLyBoYXBwZW5zIGZvciBub24tREMgY2hvaWNlIGNvbnRyb2xzXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbnVsbEZsYWdzW2lkeF07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZXMgY291bnQgYnkgMVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQWRkUmVmZXJlbmNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVmQ291bnQrKztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlcyBjb3VudCBieSAxXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBSZW1vdmVSZWZlcmVuY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWZDb3VudC0tO1xyXG4gICAgaWYgKHRoaXMuX3JlZkNvdW50IDwgMCkge1xyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBkY1ZhbHMuZGVjcmVhc2UoKSByZWZlcmVuY2VzIGNvdW50IGlzIGxlc3MgdGhhbiB6ZXJvXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlcyBjb3VudCBpcyB6ZXJvXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBUb1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwie3tEQ1ZhbHVlcyAweHswOlg4fSwgezF9IHJlZnN9fVwiLCB0aGlzLl9pZCwgdGhpcy5fcmVmQ291bnQpO1xyXG4gIH1cclxufVxyXG4iXX0=
|