arkanalyzer 1.0.27 → 1.0.29
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/config/arkanalyzer.json +1 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +9 -1
- package/lib/VFG/DVFG.d.ts +43 -0
- package/lib/VFG/DVFG.d.ts.map +1 -0
- package/lib/VFG/DVFG.js +109 -0
- package/lib/VFG/builder/DVFGBuilder.d.ts +17 -0
- package/lib/VFG/builder/DVFGBuilder.d.ts.map +1 -0
- package/lib/VFG/builder/DVFGBuilder.js +111 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -0
- package/lib/callgraph/model/CallGraph.d.ts +5 -1
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +35 -2
- package/lib/callgraph/pointerAnalysis/Pag.js +3 -3
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +11 -3
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +151 -62
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +33 -7
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +7 -2
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +10 -4
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +6 -4
- package/lib/core/base/Ref.d.ts +0 -1
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +0 -11
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/common/IRInference.d.ts +3 -0
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +62 -23
- package/lib/core/common/SdkUtils.js +1 -1
- package/lib/core/common/TypeInference.d.ts +5 -3
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +93 -60
- package/lib/core/dataflow/ReachingDef.d.ts.map +1 -1
- package/lib/core/dataflow/ReachingDef.js +1 -0
- package/lib/core/graph/BaseImplicitGraph.d.ts +1 -0
- package/lib/core/graph/BaseImplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseImplicitGraph.js +6 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -2
- package/lib/utils/pathTransfer.d.ts +1 -0
- package/lib/utils/pathTransfer.d.ts.map +1 -1
- package/lib/utils/pathTransfer.js +10 -1
- package/package.json +2 -2
|
@@ -62,7 +62,7 @@ class CSFuncID {
|
|
|
62
62
|
}
|
|
63
63
|
exports.CSFuncID = CSFuncID;
|
|
64
64
|
class PagBuilder {
|
|
65
|
-
constructor(p, cg, s, kLimit) {
|
|
65
|
+
constructor(p, cg, s, kLimit, scale) {
|
|
66
66
|
this.handledFunc = new Set();
|
|
67
67
|
this.worklist = [];
|
|
68
68
|
// TODO: change string to hash value
|
|
@@ -73,7 +73,7 @@ class PagBuilder {
|
|
|
73
73
|
this.cid2ThisLocalMap = new Map();
|
|
74
74
|
this.sdkMethodReturnValueMap = new Map();
|
|
75
75
|
// record the SDK API param, and create fake Values
|
|
76
|
-
this.
|
|
76
|
+
this.methodParamValueMap = new Map();
|
|
77
77
|
this.fakeSdkMethodParamDeclaringStmt = new Stmt_1.ArkAssignStmt(new Local_1.Local(""), new Local_1.Local(""));
|
|
78
78
|
this.funcHandledThisRound = new Set();
|
|
79
79
|
this.updatedNodesThisRound = new Map();
|
|
@@ -83,6 +83,7 @@ class PagBuilder {
|
|
|
83
83
|
this.externalScopeVariableMap = new Map();
|
|
84
84
|
this.pag = p;
|
|
85
85
|
this.cg = cg;
|
|
86
|
+
this.scale = scale;
|
|
86
87
|
this.funcPags = new Map;
|
|
87
88
|
this.ctx = new Context_1.KLimitedContextSensitive(kLimit);
|
|
88
89
|
this.scene = s;
|
|
@@ -163,52 +164,10 @@ class PagBuilder {
|
|
|
163
164
|
continue;
|
|
164
165
|
}
|
|
165
166
|
// handle call
|
|
166
|
-
|
|
167
|
-
if (ivkExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
168
|
-
let cs = this.cg.getCallSiteByStmt(stmt);
|
|
169
|
-
if (cs) {
|
|
170
|
-
// direct call is already existing in CG
|
|
171
|
-
// TODO: API Invoke stmt has anonymous method param, how to add these param into callee
|
|
172
|
-
fpag.addNormalCallSite(cs);
|
|
173
|
-
if (ivkExpr.getMethodSignature().getDeclaringClassSignature()
|
|
174
|
-
.getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME) {
|
|
175
|
-
fpag.addUnknownCallSite(cs);
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
throw new Error('Can not find static callsite');
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else if (ivkExpr instanceof Expr_1.ArkInstanceInvokeExpr || ivkExpr instanceof Expr_1.ArkPtrInvokeExpr) {
|
|
184
|
-
let ptcs = this.cg.getDynCallsiteByStmt(stmt);
|
|
185
|
-
if (ptcs) {
|
|
186
|
-
this.addToDynamicCallSite(fpag, ptcs);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
167
|
+
this.buildInvokeExprInAssignStmt(stmt, fpag);
|
|
189
168
|
}
|
|
190
|
-
else if (stmt instanceof Stmt_1.ArkInvokeStmt) {
|
|
191
|
-
|
|
192
|
-
let cs = this.cg.getCallSiteByStmt(stmt);
|
|
193
|
-
if (cs) {
|
|
194
|
-
// direct call or constructor call is already existing in CG
|
|
195
|
-
// TODO: some ptr invoke stmt is recognized as Static invoke in tests/resources/callgraph/funPtrTest1/fnPtrTest4.ts
|
|
196
|
-
// TODO: instance invoke(ptr invoke)
|
|
197
|
-
if (this.cg.isUnknownMethod(cs.calleeFuncID)) {
|
|
198
|
-
fpag.addUnknownCallSite(cs);
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
fpag.addNormalCallSite(cs);
|
|
202
|
-
}
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
let dycs = this.cg.getDynCallsiteByStmt(stmt);
|
|
206
|
-
if (dycs) {
|
|
207
|
-
this.addToDynamicCallSite(fpag, dycs);
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
throw new Error('Can not find callsite by stmt');
|
|
211
|
-
}
|
|
169
|
+
else if (stmt instanceof Stmt_1.ArkInvokeStmt && this.scale === PointerAnalysisConfig_1.PtaAnalysisScale.WholeProgram) {
|
|
170
|
+
this.buildInvokeExprInInvokeStmt(stmt, fpag);
|
|
212
171
|
}
|
|
213
172
|
else {
|
|
214
173
|
// TODO: need handle other type of stmt?
|
|
@@ -218,27 +177,119 @@ class PagBuilder {
|
|
|
218
177
|
this.pagStat.numTotalFunction++;
|
|
219
178
|
return true;
|
|
220
179
|
}
|
|
180
|
+
buildInvokeExprInAssignStmt(stmt, fpag) {
|
|
181
|
+
let ivkExpr = stmt.getInvokeExpr();
|
|
182
|
+
if (ivkExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
183
|
+
let callSites = this.cg.getCallSiteByStmt(stmt);
|
|
184
|
+
if (callSites.length !== 0) {
|
|
185
|
+
// direct call is already existing in CG
|
|
186
|
+
// TODO: API Invoke stmt has anonymous method param, how to add these param into callee
|
|
187
|
+
callSites.forEach((cs) => {
|
|
188
|
+
this.addFuncPagCallSite(fpag, cs, ivkExpr);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
throw new Error('Can not find static callsite');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else if (ivkExpr instanceof Expr_1.ArkInstanceInvokeExpr || ivkExpr instanceof Expr_1.ArkPtrInvokeExpr) {
|
|
196
|
+
let ptcs = this.cg.getDynCallsiteByStmt(stmt);
|
|
197
|
+
if (ptcs) {
|
|
198
|
+
this.addToDynamicCallSite(fpag, ptcs);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
addFuncPagCallSite(fpag, cs, ivkExpr) {
|
|
203
|
+
if (ivkExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
204
|
+
if (ivkExpr.getMethodSignature().getDeclaringClassSignature()
|
|
205
|
+
.getDeclaringFileSignature().getFileName() === Const_1.UNKNOWN_FILE_NAME) {
|
|
206
|
+
fpag.addUnknownCallSite(cs);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
fpag.addNormalCallSite(cs);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
buildInvokeExprInInvokeStmt(stmt, fpag) {
|
|
214
|
+
// TODO: discuss if we need a invokeStmt
|
|
215
|
+
let callSites = this.cg.getCallSiteByStmt(stmt);
|
|
216
|
+
if (callSites.length !== 0) {
|
|
217
|
+
// direct call or constructor call is already existing in CG
|
|
218
|
+
// TODO: some ptr invoke stmt is recognized as Static invoke in tests/resources/callgraph/funPtrTest1/fnPtrTest4.ts
|
|
219
|
+
// TODO: instance invoke(ptr invoke)
|
|
220
|
+
callSites.forEach((cs) => {
|
|
221
|
+
if (this.cg.isUnknownMethod(cs.calleeFuncID)) {
|
|
222
|
+
fpag.addUnknownCallSite(cs);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
fpag.addNormalCallSite(cs);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
let dycs = this.cg.getDynCallsiteByStmt(stmt);
|
|
231
|
+
if (dycs) {
|
|
232
|
+
this.addToDynamicCallSite(fpag, dycs);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
throw new Error('Can not find callsite by stmt');
|
|
236
|
+
}
|
|
237
|
+
}
|
|
221
238
|
/**
|
|
222
239
|
* will not create real funcPag, only create param values
|
|
223
240
|
*/
|
|
224
241
|
buildSDKFuncPag(funcID) {
|
|
225
|
-
var _a;
|
|
226
242
|
// check if SDK method
|
|
227
243
|
let cgNode = this.cg.getNode(funcID);
|
|
228
244
|
if (!cgNode.isSdkMethod()) {
|
|
229
245
|
return;
|
|
230
246
|
}
|
|
231
|
-
let
|
|
247
|
+
let paramArr = this.createDummyParamValue(funcID);
|
|
248
|
+
this.methodParamValueMap.set(funcID, paramArr);
|
|
249
|
+
}
|
|
250
|
+
createDummyParamValue(funcID, type = 1) {
|
|
251
|
+
let arkMethod = this.cg.getArkMethodByFuncID(funcID);
|
|
252
|
+
if (!arkMethod) {
|
|
253
|
+
return new Map();
|
|
254
|
+
}
|
|
255
|
+
let args = arkMethod.getParameters();
|
|
232
256
|
if (!args) {
|
|
233
|
-
return;
|
|
257
|
+
return new Map();
|
|
258
|
+
}
|
|
259
|
+
let paramArr = new Map();
|
|
260
|
+
if (type === 0) {
|
|
261
|
+
// heapObj
|
|
262
|
+
args.forEach((arg, index) => {
|
|
263
|
+
let paramType = arg.getType();
|
|
264
|
+
if (!(paramType instanceof Type_1.ClassType)) {
|
|
265
|
+
return;
|
|
266
|
+
// TODO: support more type
|
|
267
|
+
}
|
|
268
|
+
let argInstance = new Expr_1.ArkNewExpr(paramType);
|
|
269
|
+
paramArr.set(index, argInstance);
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
else if (type === 1) {
|
|
273
|
+
// Local
|
|
274
|
+
args.forEach((arg, index) => {
|
|
275
|
+
let argInstance = new Local_1.Local(arg.getName(), arg.getType());
|
|
276
|
+
argInstance.setDeclaringStmt(this.fakeSdkMethodParamDeclaringStmt);
|
|
277
|
+
paramArr.set(index, argInstance);
|
|
278
|
+
});
|
|
234
279
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
280
|
+
return paramArr;
|
|
281
|
+
}
|
|
282
|
+
createDummyParamPagNodes(value, funcID) {
|
|
283
|
+
let paramPagNodes = new Map();
|
|
284
|
+
let method = this.cg.getArkMethodByFuncID(funcID);
|
|
285
|
+
if (!method || !method.getCfg()) {
|
|
286
|
+
return paramPagNodes;
|
|
287
|
+
}
|
|
288
|
+
value.forEach((v, index) => {
|
|
289
|
+
let paramArkExprNode = this.pag.getOrNewNode(Context_1.DUMMY_CID, v, this.fakeSdkMethodParamDeclaringStmt);
|
|
290
|
+
paramPagNodes.set(index, paramArkExprNode.getID());
|
|
240
291
|
});
|
|
241
|
-
|
|
292
|
+
return paramPagNodes;
|
|
242
293
|
}
|
|
243
294
|
buildPagFromFuncPag(funcID, cid) {
|
|
244
295
|
var _a;
|
|
@@ -249,7 +300,7 @@ class PagBuilder {
|
|
|
249
300
|
if (this.handledFunc.has(`${cid}-${funcID}`)) {
|
|
250
301
|
return;
|
|
251
302
|
}
|
|
252
|
-
this.addEdgesFromFuncPag(funcPag, cid);
|
|
303
|
+
this.addEdgesFromFuncPag(funcPag, cid, funcID);
|
|
253
304
|
let interFuncPag = (_a = this.interFuncPags) === null || _a === void 0 ? void 0 : _a.get(funcID);
|
|
254
305
|
if (interFuncPag) {
|
|
255
306
|
this.addEdgesFromInterFuncPag(interFuncPag, cid);
|
|
@@ -260,11 +311,16 @@ class PagBuilder {
|
|
|
260
311
|
this.handledFunc.add(`${cid}-${funcID}`);
|
|
261
312
|
}
|
|
262
313
|
/// Add Pag Nodes and Edges in function
|
|
263
|
-
addEdgesFromFuncPag(funcPag, cid) {
|
|
314
|
+
addEdgesFromFuncPag(funcPag, cid, funcID) {
|
|
264
315
|
let inEdges = funcPag.getInternalEdges();
|
|
265
316
|
if (inEdges === undefined) {
|
|
266
317
|
return false;
|
|
267
318
|
}
|
|
319
|
+
let paramNodes;
|
|
320
|
+
let paramRefIndex = 0;
|
|
321
|
+
if (this.scale === PointerAnalysisConfig_1.PtaAnalysisScale.MethodLevel) {
|
|
322
|
+
paramNodes = this.createDummyParamPagNodes(this.createDummyParamValue(funcID, 0), funcID);
|
|
323
|
+
}
|
|
268
324
|
for (let e of inEdges) {
|
|
269
325
|
let srcPagNode = this.getOrNewPagNode(cid, e.src, e.stmt);
|
|
270
326
|
let dstPagNode = this.getOrNewPagNode(cid, e.dst, e.stmt);
|
|
@@ -273,6 +329,14 @@ class PagBuilder {
|
|
|
273
329
|
if (dstPagNode.getStmt() instanceof Stmt_1.ArkReturnStmt) {
|
|
274
330
|
dstPagNode.setStmt(e.stmt);
|
|
275
331
|
}
|
|
332
|
+
// for demand-driven analysis, add fake parameter heapObj nodes
|
|
333
|
+
if (e.src instanceof Ref_1.ArkParameterRef && this.scale === PointerAnalysisConfig_1.PtaAnalysisScale.MethodLevel) {
|
|
334
|
+
let paramObjNodeID = paramNodes === null || paramNodes === void 0 ? void 0 : paramNodes.get(paramRefIndex++);
|
|
335
|
+
if (!paramObjNodeID) {
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
this.pag.addPagEdge(this.pag.getNode(paramObjNodeID), srcPagNode, Pag_1.PagEdgeKind.Address);
|
|
339
|
+
}
|
|
276
340
|
}
|
|
277
341
|
return true;
|
|
278
342
|
}
|
|
@@ -282,6 +346,9 @@ class PagBuilder {
|
|
|
282
346
|
let ivkExpr = cs.callStmt.getInvokeExpr();
|
|
283
347
|
let calleeCid = this.ctx.getOrNewContext(cid, cs.calleeFuncID, true);
|
|
284
348
|
let calleeCGNode = this.cg.getNode(cs.calleeFuncID);
|
|
349
|
+
if (this.scale === PointerAnalysisConfig_1.PtaAnalysisScale.MethodLevel) {
|
|
350
|
+
this.addStaticPagCallReturnEdge(cs, cid, calleeCid);
|
|
351
|
+
}
|
|
285
352
|
// process the Storage API(Static)
|
|
286
353
|
if (!this.processStorage(cs, calleeCGNode, cid)) {
|
|
287
354
|
// If not Storage API, process normal edge
|
|
@@ -508,6 +575,10 @@ class PagBuilder {
|
|
|
508
575
|
if (!this.cg.detectReachable(dstCGNode.getID(), callerNode.getID())) {
|
|
509
576
|
let calleeCid = this.ctx.getOrNewContext(cid, dstCGNode.getID(), true);
|
|
510
577
|
let staticCS = new CallGraph_1.CallSite(cs.callStmt, cs.args, dstCGNode.getID(), cs.callerFuncID);
|
|
578
|
+
if (this.scale === PointerAnalysisConfig_1.PtaAnalysisScale.MethodLevel) {
|
|
579
|
+
srcNodes.push(...this.addStaticPagCallReturnEdge(staticCS, baseClassPTNode, calleeCid));
|
|
580
|
+
continue;
|
|
581
|
+
}
|
|
511
582
|
srcNodes.push(...this.processContainerPagCallEdge(staticCS, cid, baseClassPTNode));
|
|
512
583
|
srcNodes.push(...this.addStaticPagCallEdge(staticCS, cid, calleeCid));
|
|
513
584
|
// Pass base's pts to callee's this pointer
|
|
@@ -752,6 +823,21 @@ class PagBuilder {
|
|
|
752
823
|
}
|
|
753
824
|
return srcNodes;
|
|
754
825
|
}
|
|
826
|
+
addStaticPagCallReturnEdge(cs, callerCid, calleeCid) {
|
|
827
|
+
if (!calleeCid) {
|
|
828
|
+
calleeCid = this.ctx.getOrNewContext(callerCid, cs.calleeFuncID, true);
|
|
829
|
+
}
|
|
830
|
+
let srcNodes = [];
|
|
831
|
+
// Add reachable
|
|
832
|
+
let calleeNode = this.cg.getNode(cs.calleeFuncID);
|
|
833
|
+
let calleeMethod = this.scene.getMethod(calleeNode.getMethod());
|
|
834
|
+
if (!calleeMethod) {
|
|
835
|
+
// TODO: check if nodes need to delete
|
|
836
|
+
return srcNodes;
|
|
837
|
+
}
|
|
838
|
+
srcNodes.push(...this.addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod));
|
|
839
|
+
return srcNodes;
|
|
840
|
+
}
|
|
755
841
|
addCallParamPagEdge(params, cs, callerCid, calleeCid) {
|
|
756
842
|
var _a, _b, _c;
|
|
757
843
|
let srcNodes = [];
|
|
@@ -819,17 +905,18 @@ class PagBuilder {
|
|
|
819
905
|
if ((0, PTAUtils_1.IsCollectionAPI)(calleeMethod.getSignature())) {
|
|
820
906
|
return srcNodes;
|
|
821
907
|
}
|
|
822
|
-
if (!this.
|
|
908
|
+
if (!this.methodParamValueMap.has(calleeNode.getID())) {
|
|
823
909
|
this.buildSDKFuncPag(calleeNode.getID());
|
|
824
910
|
}
|
|
825
|
-
this.addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod);
|
|
911
|
+
srcNodes.push(...this.addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod));
|
|
826
912
|
srcNodes.push(...this.addSDKMethodParamPagEdge(cs, callerCid, calleeCid, calleeNode.getID()));
|
|
827
913
|
return srcNodes;
|
|
828
914
|
}
|
|
829
915
|
addSDKMethodReturnPagEdge(cs, callerCid, calleeCid, calleeMethod) {
|
|
916
|
+
let srcNodes = [];
|
|
830
917
|
let returnType = calleeMethod.getReturnType();
|
|
831
918
|
if (!(returnType instanceof Type_1.ClassType) || !(cs.callStmt instanceof Stmt_1.ArkAssignStmt)) {
|
|
832
|
-
return;
|
|
919
|
+
return srcNodes;
|
|
833
920
|
}
|
|
834
921
|
// check fake heap object exists or not
|
|
835
922
|
let cidMap = this.sdkMethodReturnValueMap.get(calleeMethod);
|
|
@@ -847,6 +934,8 @@ class PagBuilder {
|
|
|
847
934
|
let srcPagNode = this.getOrNewPagNode(calleeCid, newExpr);
|
|
848
935
|
let dstPagNode = this.getOrNewPagNode(callerCid, cs.callStmt.getLeftOp(), cs.callStmt);
|
|
849
936
|
this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Address, cs.callStmt);
|
|
937
|
+
srcNodes.push(srcPagNode.getID());
|
|
938
|
+
return srcNodes;
|
|
850
939
|
}
|
|
851
940
|
addSDKMethodParamPagEdge(cs, callerCid, calleeCid, funcID) {
|
|
852
941
|
var _a, _b;
|
|
@@ -859,7 +948,7 @@ class PagBuilder {
|
|
|
859
948
|
let paramValue;
|
|
860
949
|
if (arg instanceof Local_1.Local && arg.getType() instanceof Type_1.FunctionType) {
|
|
861
950
|
// TODO: cannot find value
|
|
862
|
-
paramValue = this.
|
|
951
|
+
paramValue = this.methodParamValueMap.get(funcID).get(i);
|
|
863
952
|
}
|
|
864
953
|
else {
|
|
865
954
|
continue;
|
|
@@ -8,6 +8,7 @@ import { Stmt } from '../../core/base/Stmt';
|
|
|
8
8
|
import { Pag } from './Pag';
|
|
9
9
|
import { PointerAnalysisConfig } from './PointerAnalysisConfig';
|
|
10
10
|
import { DiffPTData, IPtsCollection } from './PtsDS';
|
|
11
|
+
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
11
12
|
export declare class PointerAnalysis extends AbstractAnalysis {
|
|
12
13
|
private pag;
|
|
13
14
|
private pagBuilder;
|
|
@@ -19,6 +20,7 @@ export declare class PointerAnalysis extends AbstractAnalysis {
|
|
|
19
20
|
private config;
|
|
20
21
|
constructor(p: Pag, cg: CallGraph, s: Scene, config: PointerAnalysisConfig);
|
|
21
22
|
static pointerAnalysisForWholeProject(projectScene: Scene, config?: PointerAnalysisConfig): PointerAnalysis;
|
|
23
|
+
static pointerAnalysisForMethod(s: Scene, method: ArkMethod, config?: PointerAnalysisConfig): PointerAnalysis;
|
|
22
24
|
protected init(): void;
|
|
23
25
|
start(): void;
|
|
24
26
|
private postProcess;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAa,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAgF,MAAM,OAAO,CAAC;AAE1G,OAAO,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,7 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
62
62
|
this.pag = p;
|
|
63
63
|
this.cg = cg;
|
|
64
64
|
this.ptd = new PtsDS_1.DiffPTData(config.ptsCollectionCtor);
|
|
65
|
-
this.pagBuilder = new PagBuilder_1.PagBuilder(this.pag, this.cg, s, config.kLimit);
|
|
65
|
+
this.pagBuilder = new PagBuilder_1.PagBuilder(this.pag, this.cg, s, config.kLimit, config.analysisScale);
|
|
66
66
|
this.cgBuilder = new CallGraphBuilder_1.CallGraphBuilder(this.cg, s);
|
|
67
67
|
this.ptaStat = new Statistics_1.PTAStat(this);
|
|
68
68
|
this.config = config;
|
|
@@ -86,6 +86,20 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
86
86
|
pta.start();
|
|
87
87
|
return pta;
|
|
88
88
|
}
|
|
89
|
+
static pointerAnalysisForMethod(s, method, config) {
|
|
90
|
+
let cg = new CallGraph_1.CallGraph(s);
|
|
91
|
+
let cgBuilder = new CallGraphBuilder_1.CallGraphBuilder(cg, s);
|
|
92
|
+
cgBuilder.buildDirectCallGraphForScene();
|
|
93
|
+
let pag = new Pag_1.Pag();
|
|
94
|
+
if (!config) {
|
|
95
|
+
config = PointerAnalysisConfig_1.PointerAnalysisConfig.create(1, 'out/', false, false);
|
|
96
|
+
}
|
|
97
|
+
let entryMethodID = cg.getCallGraphNodeByMethod(method.getSignature()).getID();
|
|
98
|
+
let pta = new PointerAnalysis(pag, cg, s, config);
|
|
99
|
+
pta.setEntries([entryMethodID]);
|
|
100
|
+
pta.start();
|
|
101
|
+
return pta;
|
|
102
|
+
}
|
|
89
103
|
init() {
|
|
90
104
|
logger.warn(`========== Init Pointer Analysis ==========`);
|
|
91
105
|
// start statistics
|
|
@@ -143,7 +157,12 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
143
157
|
// do pointer transfer
|
|
144
158
|
this.solveWorklist();
|
|
145
159
|
// process dynamic call
|
|
146
|
-
|
|
160
|
+
if (this.config.analysisScale === PointerAnalysisConfig_1.PtaAnalysisScale.WholeProgram || this.ptaStat.iterTimes === 1) {
|
|
161
|
+
reanalyzer = this.onTheFlyDynamicCallSolve();
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
reanalyzer = false;
|
|
165
|
+
}
|
|
147
166
|
if (this.config.dotDump) {
|
|
148
167
|
this.pag.dump(path_1.default.join(this.config.outputDirectory, `pta_pag_itor#${this.ptaStat.iterTimes}.dot`));
|
|
149
168
|
}
|
|
@@ -153,6 +172,7 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
153
172
|
* get newly added Address Edge, and add them to initial WorkList
|
|
154
173
|
*/
|
|
155
174
|
initWorklist() {
|
|
175
|
+
let changed = false;
|
|
156
176
|
for (let e of this.pag.getAddrEdges()) {
|
|
157
177
|
this.ptaStat.numProcessedAddr++;
|
|
158
178
|
let { src, dst } = e.getEndPoints();
|
|
@@ -163,8 +183,10 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
163
183
|
this.worklist.push(src);
|
|
164
184
|
}
|
|
165
185
|
this.worklist.push(dst);
|
|
186
|
+
changed = true;
|
|
166
187
|
}
|
|
167
188
|
this.pag.resetAddrEdges();
|
|
189
|
+
return changed;
|
|
168
190
|
}
|
|
169
191
|
solveWorklist() {
|
|
170
192
|
while (this.worklist.length > 0) {
|
|
@@ -343,7 +365,7 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
343
365
|
let srcNodes = this.pagBuilder.handleUnprocessedCallSites(processedCallSites);
|
|
344
366
|
changed = this.addToReanalyze(srcNodes) || changed;
|
|
345
367
|
changed = this.pagBuilder.handleReachable() || changed;
|
|
346
|
-
this.initWorklist();
|
|
368
|
+
changed = this.initWorklist() || changed;
|
|
347
369
|
return changed;
|
|
348
370
|
}
|
|
349
371
|
processDynCallSite(node, pts, processedCallSites) {
|
|
@@ -455,8 +477,10 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
455
477
|
}
|
|
456
478
|
addIncomingEdgesToWorkList(valueNode, workListNodes, processedNodes) {
|
|
457
479
|
let inCopyEdges = valueNode.getIncomingCopyEdges();
|
|
458
|
-
|
|
459
|
-
|
|
480
|
+
let inThisEdges = valueNode.getIncomingThisEdges();
|
|
481
|
+
let combinedEdges = new Set([...inCopyEdges !== null && inCopyEdges !== void 0 ? inCopyEdges : [], ...inThisEdges !== null && inThisEdges !== void 0 ? inThisEdges : []]);
|
|
482
|
+
if (combinedEdges) {
|
|
483
|
+
combinedEdges.forEach(edge => {
|
|
460
484
|
let srcID = edge.getSrcID();
|
|
461
485
|
if (!processedNodes.has(srcID)) {
|
|
462
486
|
workListNodes.push(srcID);
|
|
@@ -466,8 +490,10 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
466
490
|
}
|
|
467
491
|
addOutgoingEdgesToWorkList(valueNode, workListNodes, processedNodes) {
|
|
468
492
|
let outCopyEdges = valueNode.getOutgoingCopyEdges();
|
|
469
|
-
|
|
470
|
-
|
|
493
|
+
let outThisEdges = valueNode.getOutgoingThisEdges();
|
|
494
|
+
let combinedEdges = new Set([...outCopyEdges !== null && outCopyEdges !== void 0 ? outCopyEdges : [], ...outThisEdges !== null && outThisEdges !== void 0 ? outThisEdges : []]);
|
|
495
|
+
if (combinedEdges) {
|
|
496
|
+
combinedEdges.forEach(edge => {
|
|
471
497
|
let dstID = edge.getDstID();
|
|
472
498
|
if (!processedNodes.has(dstID)) {
|
|
473
499
|
workListNodes.push(dstID);
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { IPtsCollection, PtsCollectionType } from './PtsDS';
|
|
2
2
|
import { NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
3
|
+
export declare enum PtaAnalysisScale {
|
|
4
|
+
WholeProgram = 0,
|
|
5
|
+
MethodLevel = 1
|
|
6
|
+
}
|
|
3
7
|
export declare class PointerAnalysisConfig {
|
|
4
8
|
private static instance;
|
|
5
9
|
kLimit: number;
|
|
@@ -7,10 +11,11 @@ export declare class PointerAnalysisConfig {
|
|
|
7
11
|
detectTypeDiff: boolean;
|
|
8
12
|
dotDump: boolean;
|
|
9
13
|
unhandledFuncDump: boolean;
|
|
14
|
+
analysisScale: PtaAnalysisScale;
|
|
10
15
|
ptsCollectionType: PtsCollectionType;
|
|
11
16
|
ptsCollectionCtor: new () => IPtsCollection<NodeID>;
|
|
12
|
-
constructor(kLimit: number, outputDirectory: string, detectTypeDiff?: boolean, dotDump?: boolean, unhandledFuncDump?: boolean, ptsCoType?: PtsCollectionType);
|
|
13
|
-
static create(kLimit: number, outputDirectory: string, detectTypeDiff?: boolean, dotDump?: boolean, unhandledFuncDump?: boolean, ptsCoType?: PtsCollectionType): PointerAnalysisConfig;
|
|
17
|
+
constructor(kLimit: number, outputDirectory: string, detectTypeDiff?: boolean, dotDump?: boolean, unhandledFuncDump?: boolean, analysisScale?: PtaAnalysisScale, ptsCoType?: PtsCollectionType);
|
|
18
|
+
static create(kLimit: number, outputDirectory: string, detectTypeDiff?: boolean, dotDump?: boolean, unhandledFuncDump?: boolean, analysisScale?: PtaAnalysisScale, ptsCoType?: PtsCollectionType): PointerAnalysisConfig;
|
|
14
19
|
static getInstance(): PointerAnalysisConfig;
|
|
15
20
|
}
|
|
16
21
|
//# sourceMappingURL=PointerAnalysisConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerAnalysisConfig.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysisConfig.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA2B,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAE5D,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAExC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,UAAU,cAAc,CAAC,MAAM,CAAC,CAAC;gBAM/C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,EAChF,OAAO,GAAE,OAAe,EAAE,iBAAiB,GAAE,OAAe,EAAE,SAAS,oBAAwB;
|
|
1
|
+
{"version":3,"file":"PointerAnalysisConfig.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysisConfig.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA2B,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAE5D,oBAAY,gBAAgB;IACxB,YAAY,IAAI;IAChB,WAAW,IAAI;CAClB;AAED,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAExC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,gBAAgB,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,UAAU,cAAc,CAAC,MAAM,CAAC,CAAC;gBAM/C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,EAChF,OAAO,GAAE,OAAe,EAAE,iBAAiB,GAAE,OAAe,EAC5D,aAAa,GAAE,gBAAgD,EAAE,SAAS,oBAAwB;WAuBxF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,EACzF,OAAO,GAAE,OAAe,EAAE,iBAAiB,GAAE,OAAe,EAC5D,aAAa,GAAE,gBAAgD,EAAE,SAAS,oBAAwB,GAAG,qBAAqB;WAUhH,WAAW,IAAI,qBAAqB;CAMrD"}
|
|
@@ -37,15 +37,20 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
37
37
|
return result;
|
|
38
38
|
};
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.PointerAnalysisConfig = void 0;
|
|
40
|
+
exports.PointerAnalysisConfig = exports.PtaAnalysisScale = void 0;
|
|
41
41
|
const fs = __importStar(require("fs"));
|
|
42
42
|
const PtsDS_1 = require("./PtsDS");
|
|
43
|
+
var PtaAnalysisScale;
|
|
44
|
+
(function (PtaAnalysisScale) {
|
|
45
|
+
PtaAnalysisScale[PtaAnalysisScale["WholeProgram"] = 0] = "WholeProgram";
|
|
46
|
+
PtaAnalysisScale[PtaAnalysisScale["MethodLevel"] = 1] = "MethodLevel";
|
|
47
|
+
})(PtaAnalysisScale = exports.PtaAnalysisScale || (exports.PtaAnalysisScale = {}));
|
|
43
48
|
class PointerAnalysisConfig {
|
|
44
49
|
/*
|
|
45
50
|
* Note: DO NOT use `new PointerAnalysisConfig` to initialize ptaconfig
|
|
46
51
|
* Use PointerAnalysisConfig.create() for singleton pattern
|
|
47
52
|
*/
|
|
48
|
-
constructor(kLimit, outputDirectory, detectTypeDiff = false, dotDump = false, unhandledFuncDump = false, ptsCoType = PtsDS_1.PtsCollectionType.Set) {
|
|
53
|
+
constructor(kLimit, outputDirectory, detectTypeDiff = false, dotDump = false, unhandledFuncDump = false, analysisScale = PtaAnalysisScale.WholeProgram, ptsCoType = PtsDS_1.PtsCollectionType.Set) {
|
|
49
54
|
if (kLimit > 5) {
|
|
50
55
|
throw new Error('K Limit too large');
|
|
51
56
|
}
|
|
@@ -54,6 +59,7 @@ class PointerAnalysisConfig {
|
|
|
54
59
|
this.detectTypeDiff = detectTypeDiff;
|
|
55
60
|
this.dotDump = dotDump;
|
|
56
61
|
this.unhandledFuncDump = unhandledFuncDump;
|
|
62
|
+
this.analysisScale = analysisScale;
|
|
57
63
|
this.ptsCollectionType = ptsCoType;
|
|
58
64
|
this.ptsCollectionCtor = (0, PtsDS_1.createPtsCollectionCtor)(ptsCoType);
|
|
59
65
|
if (!fs.existsSync(outputDirectory)) {
|
|
@@ -64,8 +70,8 @@ class PointerAnalysisConfig {
|
|
|
64
70
|
* Create Singleton instance
|
|
65
71
|
* The instance can be created multi-times and be overwrited
|
|
66
72
|
*/
|
|
67
|
-
static create(kLimit, outputDirectory, detectTypeDiff = false, dotDump = false, unhandledFuncDump = false, ptsCoType = PtsDS_1.PtsCollectionType.Set) {
|
|
68
|
-
PointerAnalysisConfig.instance = new PointerAnalysisConfig(kLimit, outputDirectory, detectTypeDiff, dotDump, unhandledFuncDump, ptsCoType);
|
|
73
|
+
static create(kLimit, outputDirectory, detectTypeDiff = false, dotDump = false, unhandledFuncDump = false, analysisScale = PtaAnalysisScale.WholeProgram, ptsCoType = PtsDS_1.PtsCollectionType.Set) {
|
|
74
|
+
PointerAnalysisConfig.instance = new PointerAnalysisConfig(kLimit, outputDirectory, detectTypeDiff, dotDump, unhandledFuncDump, analysisScale, ptsCoType);
|
|
69
75
|
return PointerAnalysisConfig.instance;
|
|
70
76
|
}
|
|
71
77
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"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"}
|
package/lib/core/base/Expr.js
CHANGED
|
@@ -739,10 +739,12 @@ class ArkCastExpr extends AbstractExpr {
|
|
|
739
739
|
}
|
|
740
740
|
inferType(arkMethod) {
|
|
741
741
|
var _a;
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
742
|
+
if (TypeInference_1.TypeInference.isUnclearType(this.getType())) {
|
|
743
|
+
const type = (_a = TypeInference_1.TypeInference.inferUnclearedType(this.type, arkMethod.getDeclaringArkClass())) !== null && _a !== void 0 ? _a : this.op.getType();
|
|
744
|
+
if (type !== undefined && !TypeInference_1.TypeInference.isUnclearType(type)) {
|
|
745
|
+
this.type = type;
|
|
746
|
+
IRInference_1.IRInference.inferRightWithSdkType(type, this.op.getType(), arkMethod.getDeclaringArkClass());
|
|
747
|
+
}
|
|
746
748
|
}
|
|
747
749
|
return this;
|
|
748
750
|
}
|
package/lib/core/base/Ref.d.ts
CHANGED
|
@@ -134,7 +134,6 @@ export declare class ArkParameterRef extends AbstractRef {
|
|
|
134
134
|
export declare class ArkThisRef extends AbstractRef {
|
|
135
135
|
private type;
|
|
136
136
|
constructor(type: ClassType);
|
|
137
|
-
inferType(arkMethod: ArkMethod): AbstractRef;
|
|
138
137
|
getType(): ClassType;
|
|
139
138
|
getUses(): Value[];
|
|
140
139
|
toString(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ref.d.ts","sourceRoot":"","sources":["../../../src/core/base/Ref.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAa,SAAS,EAAkB,IAAI,EAAe,MAAM,QAAQ,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Ref.d.ts","sourceRoot":"","sources":["../../../src/core/base/Ref.ts"],"names":[],"mappings":"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"}
|
package/lib/core/base/Ref.js
CHANGED
|
@@ -41,7 +41,6 @@ exports.ClosureFieldRef = exports.GlobalRef = exports.ArkCaughtExceptionRef = ex
|
|
|
41
41
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
42
42
|
const Type_1 = require("./Type");
|
|
43
43
|
const TypeInference_1 = require("../common/TypeInference");
|
|
44
|
-
const Const_1 = require("../common/Const");
|
|
45
44
|
const Stmt_1 = require("./Stmt");
|
|
46
45
|
const IRInference_1 = require("../common/IRInference");
|
|
47
46
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Ref');
|
|
@@ -258,16 +257,6 @@ class ArkThisRef extends AbstractRef {
|
|
|
258
257
|
super();
|
|
259
258
|
this.type = type;
|
|
260
259
|
}
|
|
261
|
-
inferType(arkMethod) {
|
|
262
|
-
const classSignature = this.type.getClassSignature();
|
|
263
|
-
if (classSignature.getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
|
|
264
|
-
let type = TypeInference_1.TypeInference.inferBaseType(classSignature.getDeclaringClassName(), arkMethod.getDeclaringArkClass());
|
|
265
|
-
if (type instanceof Type_1.ClassType) {
|
|
266
|
-
this.type = type;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
return this;
|
|
270
|
-
}
|
|
271
260
|
getType() {
|
|
272
261
|
return this.type;
|
|
273
262
|
}
|