arkanalyzer 1.0.22 → 1.0.24
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/README.en.md +8 -0
- package/README.md +9 -0
- package/lib/Scene.js +4 -4
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +4 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +3 -2
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +58 -26
- package/lib/core/base/Constant.d.ts +3 -0
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +7 -1
- package/lib/core/base/Expr.d.ts +24 -5
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +58 -9
- package/lib/core/base/Ref.d.ts +1 -0
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +14 -13
- package/lib/core/base/Type.d.ts +10 -1
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +16 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +3 -1
- package/lib/core/common/Builtin.d.ts.map +1 -1
- package/lib/core/common/Builtin.js +3 -3
- package/lib/core/common/Const.d.ts +1 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +3 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +1 -1
- package/lib/core/common/IRInference.d.ts +2 -2
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +39 -23
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +10 -12
- package/lib/core/common/TSConst.d.ts +1 -0
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TSConst.js +2 -1
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +16 -11
- package/lib/core/common/ValueUtil.d.ts +2 -1
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +3 -0
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +1 -0
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +45 -0
- package/lib/core/model/ArkClass.d.ts +11 -2
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +25 -6
- package/lib/core/model/ArkExport.d.ts +5 -1
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +6 -0
- package/lib/core/model/ArkField.d.ts +5 -0
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +6 -0
- package/lib/core/model/ArkFile.d.ts +13 -1
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +19 -2
- package/lib/core/model/ArkImport.d.ts +5 -1
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +6 -0
- package/lib/core/model/ArkMethod.d.ts +8 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +13 -0
- package/lib/core/model/ArkNamespace.d.ts +5 -1
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +6 -0
- package/lib/core/model/ArkSignature.d.ts +2 -2
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +6 -5
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +5 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +4 -6
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +1 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +16 -13
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +5 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +4 -0
- package/lib/utils/FileUtils.d.ts +2 -0
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +12 -0
- package/lib/utils/getAllFiles.js +2 -2
- package/package.json +2 -2
package/README.en.md
CHANGED
|
@@ -77,6 +77,14 @@ npm install -g typescript
|
|
|
77
77
|
cd arkanalyzer
|
|
78
78
|
npm install
|
|
79
79
|
```
|
|
80
|
+
5. [Optional] Generate the latest API documentation, which will be created at docs/api_docs.
|
|
81
|
+
```shell
|
|
82
|
+
npm run gendoc
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Docmentations
|
|
86
|
+
|
|
87
|
+
1. ArkAnalyzer API docmentations,refer to the [link](https://gitcode.com/openharmony-sig/arkanalyzer/wiki/globals.md).
|
|
80
88
|
|
|
81
89
|
## Commit codes
|
|
82
90
|
Follow the code repository standards of Openharmony-Sig, refer to the [link](docs/HowToCreatePR.md#english)
|
package/README.md
CHANGED
|
@@ -84,6 +84,15 @@ npm install -g typescript
|
|
|
84
84
|
```shell
|
|
85
85
|
npm install
|
|
86
86
|
```
|
|
87
|
+
5. 【可选】生成最新API文档,文档生成在 docs/api_docs。
|
|
88
|
+
```shell
|
|
89
|
+
npm run gendoc
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## ArkAnalyzer 文档
|
|
93
|
+
|
|
94
|
+
1. ArkAnalyzer 快速入门文档,请参考:[链接](https://gitcode.com/openharmony-sig/arkanalyzer/wiki/ArkAnalyzer%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97.md)。
|
|
95
|
+
2. ArkAnalyzer API文档,请参考:[链接](https://gitcode.com/openharmony-sig/arkanalyzer/wiki/globals.md)。
|
|
87
96
|
|
|
88
97
|
## ArkAnalyzer 代码上库
|
|
89
98
|
遵守openharmony-sig代码上库规范, 操作方法请参考:[链接](docs/HowToCreatePR.md#中文)
|
package/lib/Scene.js
CHANGED
|
@@ -310,7 +310,7 @@ class Scene {
|
|
|
310
310
|
this.projectFiles.forEach((file) => {
|
|
311
311
|
logger.info('=== parse file:', file);
|
|
312
312
|
try {
|
|
313
|
-
const arkFile = new ArkFile_1.ArkFile();
|
|
313
|
+
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file));
|
|
314
314
|
arkFile.setScene(this);
|
|
315
315
|
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName);
|
|
316
316
|
this.filesMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
|
|
@@ -340,7 +340,7 @@ class Scene {
|
|
|
340
340
|
return;
|
|
341
341
|
}
|
|
342
342
|
try {
|
|
343
|
-
const arkFile = new ArkFile_1.ArkFile();
|
|
343
|
+
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(projectFile));
|
|
344
344
|
arkFile.setScene(this);
|
|
345
345
|
(0, ArkFileBuilder_1.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName());
|
|
346
346
|
for (const [modulePath, moduleName] of this.modulePath2NameMap) {
|
|
@@ -539,7 +539,7 @@ class Scene {
|
|
|
539
539
|
allFiles.forEach((file) => {
|
|
540
540
|
logger.info('=== parse sdk file:', file);
|
|
541
541
|
try {
|
|
542
|
-
const arkFile = new ArkFile_1.ArkFile();
|
|
542
|
+
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file));
|
|
543
543
|
arkFile.setScene(this);
|
|
544
544
|
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, path_1.default.normalize(sdkPath), arkFile, sdkName);
|
|
545
545
|
ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile).forEach(cls => {
|
|
@@ -1299,7 +1299,7 @@ class ModuleScene {
|
|
|
1299
1299
|
(0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames).forEach((file) => {
|
|
1300
1300
|
logger.info('=== parse file:', file);
|
|
1301
1301
|
try {
|
|
1302
|
-
const arkFile = new ArkFile_1.ArkFile();
|
|
1302
|
+
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file));
|
|
1303
1303
|
arkFile.setScene(this.projectScene);
|
|
1304
1304
|
arkFile.setModuleScene(this);
|
|
1305
1305
|
(0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAG,SAAS,CAAC;IACzB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE5B,CAAC,EAAE,KAAK;IAIb,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAOxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAgBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IA8BnD,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAG,SAAS,CAAC;IACzB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE5B,CAAC,EAAE,KAAK;IAIb,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAOxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAgBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IA8BnD,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAyBrD,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,eAAe,EAAE;IAapF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAG,IAAI;CAU5H"}
|
|
@@ -114,7 +114,10 @@ class AbstractAnalysis {
|
|
|
114
114
|
}
|
|
115
115
|
cfg.getStmts().forEach((stmt) => {
|
|
116
116
|
if (stmt.containsInvokeExpr()) {
|
|
117
|
-
this.resolveCall(cgNode.getID(), stmt).forEach(
|
|
117
|
+
this.resolveCall(cgNode.getID(), stmt).forEach((callSite) => {
|
|
118
|
+
calleeMethods.push(callSite);
|
|
119
|
+
this.cg.addStmtToCallSiteMap(stmt, callSite);
|
|
120
|
+
});
|
|
118
121
|
}
|
|
119
122
|
});
|
|
120
123
|
return calleeMethods;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CallGraph,
|
|
1
|
+
import { CallGraph, CallSite, DynCallSite, FuncID } from '../model/CallGraph';
|
|
2
2
|
import { Scene } from '../../Scene';
|
|
3
3
|
import { Stmt } from '../../core/base/Stmt';
|
|
4
4
|
import { ArkThisRef } from '../../core/base/Ref';
|
|
@@ -6,7 +6,7 @@ import { Value } from '../../core/base/Value';
|
|
|
6
6
|
import { Local } from '../../core/base/Local';
|
|
7
7
|
import { NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
8
8
|
import { ContextID } from './Context';
|
|
9
|
-
import {
|
|
9
|
+
import { FuncPag, InterFuncPag, Pag, PagNode, PagNodeType, StorageType } from './Pag';
|
|
10
10
|
import { IPtsCollection } from './PtsDS';
|
|
11
11
|
export declare class CSFuncID {
|
|
12
12
|
cid: ContextID;
|
|
@@ -74,6 +74,7 @@ export declare class PagBuilder {
|
|
|
74
74
|
handleUnprocessedCallSites(processedCallSites: Set<DynCallSite>): NodeID[];
|
|
75
75
|
private addThisRefCallEdge;
|
|
76
76
|
addStaticPagCallEdge(cs: CallSite, callerCid: ContextID, calleeCid?: ContextID): NodeID[];
|
|
77
|
+
addCallParamPagEdge(params: Value[], cs: CallSite, callerCid: ContextID, calleeCid: ContextID): NodeID[];
|
|
77
78
|
private addSDKMethodPagCallEdge;
|
|
78
79
|
private addSDKMethodReturnPagEdge;
|
|
79
80
|
private addSDKMethodParamPagEdge;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -434,7 +434,7 @@ class PagBuilder {
|
|
|
434
434
|
if (invokeExpr instanceof Expr_1.ArkInstanceInvokeExpr) {
|
|
435
435
|
base = invokeExpr.getBase();
|
|
436
436
|
}
|
|
437
|
-
else if (invokeExpr instanceof Expr_1.ArkPtrInvokeExpr) {
|
|
437
|
+
else if (invokeExpr instanceof Expr_1.ArkPtrInvokeExpr && invokeExpr.getFuncPtrLocal() instanceof Local_1.Local) {
|
|
438
438
|
base = invokeExpr.getFuncPtrLocal();
|
|
439
439
|
}
|
|
440
440
|
// TODO: check base under different cid
|
|
@@ -699,7 +699,6 @@ class PagBuilder {
|
|
|
699
699
|
* Return src node
|
|
700
700
|
*/
|
|
701
701
|
addStaticPagCallEdge(cs, callerCid, calleeCid) {
|
|
702
|
-
var _a, _b;
|
|
703
702
|
if (!calleeCid) {
|
|
704
703
|
calleeCid = this.ctx.getOrNewContext(callerCid, cs.calleeFuncID, true);
|
|
705
704
|
}
|
|
@@ -726,30 +725,7 @@ class PagBuilder {
|
|
|
726
725
|
let params = calleeMethod.getCfg().getStmts()
|
|
727
726
|
.filter(stmt => stmt instanceof Stmt_1.ArkAssignStmt && stmt.getRightOp() instanceof Ref_1.ArkParameterRef)
|
|
728
727
|
.map(stmt => stmt.getRightOp());
|
|
729
|
-
|
|
730
|
-
if (argNum) {
|
|
731
|
-
// add args to parameters edges
|
|
732
|
-
for (let i = 0; i < argNum; i++) {
|
|
733
|
-
let arg = (_b = cs.args) === null || _b === void 0 ? void 0 : _b.at(i);
|
|
734
|
-
let param = params.at(i);
|
|
735
|
-
// TODO: param type should be ArkParameterRef?
|
|
736
|
-
if (arg && param) {
|
|
737
|
-
if (arg instanceof Constant_1.Constant) {
|
|
738
|
-
continue;
|
|
739
|
-
}
|
|
740
|
-
if (arg instanceof Expr_1.AbstractExpr) {
|
|
741
|
-
// TODO: handle this
|
|
742
|
-
continue;
|
|
743
|
-
}
|
|
744
|
-
// Get or create new PAG node for argument and parameter
|
|
745
|
-
let srcPagNode = this.getOrNewPagNode(callerCid, arg, cs.callStmt);
|
|
746
|
-
let dstPagNode = this.getOrNewPagNode(calleeCid, param, cs.callStmt);
|
|
747
|
-
this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
|
|
748
|
-
srcNodes.push(srcPagNode.getID());
|
|
749
|
-
}
|
|
750
|
-
// TODO: handle other types of parmeters
|
|
751
|
-
}
|
|
752
|
-
}
|
|
728
|
+
srcNodes.push(...this.addCallParamPagEdge(params, cs, callerCid, calleeCid));
|
|
753
729
|
// add ret to caller edges
|
|
754
730
|
let retStmts = calleeMethod.getReturnStmt();
|
|
755
731
|
// TODO: call statement must be a assignment state
|
|
@@ -776,6 +752,62 @@ class PagBuilder {
|
|
|
776
752
|
}
|
|
777
753
|
return srcNodes;
|
|
778
754
|
}
|
|
755
|
+
addCallParamPagEdge(params, cs, callerCid, calleeCid) {
|
|
756
|
+
var _a, _b, _c;
|
|
757
|
+
let srcNodes = [];
|
|
758
|
+
let argNum = (_a = cs.args) === null || _a === void 0 ? void 0 : _a.length;
|
|
759
|
+
if (argNum === params.length) {
|
|
760
|
+
// add args to parameters edges
|
|
761
|
+
for (let i = 0; i < argNum; i++) {
|
|
762
|
+
let arg = (_b = cs.args) === null || _b === void 0 ? void 0 : _b.at(i);
|
|
763
|
+
let param = params.at(i);
|
|
764
|
+
if (!arg || !param) {
|
|
765
|
+
return srcNodes;
|
|
766
|
+
}
|
|
767
|
+
if (arg instanceof Constant_1.Constant || arg instanceof Expr_1.AbstractExpr) {
|
|
768
|
+
// TODO: handle AbstractExpr
|
|
769
|
+
continue;
|
|
770
|
+
}
|
|
771
|
+
// Get or create new PAG node for argument and parameter
|
|
772
|
+
let srcPagNode = this.getOrNewPagNode(callerCid, arg, cs.callStmt);
|
|
773
|
+
let dstPagNode = this.getOrNewPagNode(calleeCid, param, cs.callStmt);
|
|
774
|
+
this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
|
|
775
|
+
srcNodes.push(srcPagNode.getID());
|
|
776
|
+
// TODO: handle other types of parmeters
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
else {
|
|
780
|
+
/**
|
|
781
|
+
* process foreach situation
|
|
782
|
+
* e.g. arr.forEach((item) => { ... })
|
|
783
|
+
* cs.args is anonymous method local, will have only 1 parameter
|
|
784
|
+
* but inside foreach will have >= 1 parameters
|
|
785
|
+
*/
|
|
786
|
+
if (!(((_c = cs.callStmt.getInvokeExpr()) === null || _c === void 0 ? void 0 : _c.getMethodSignature().getMethodSubSignature().getMethodName()) === 'forEach')) {
|
|
787
|
+
return srcNodes;
|
|
788
|
+
}
|
|
789
|
+
// container value is the base value of callstmt, its points-to is PagNewContainerExprNode
|
|
790
|
+
let containerValue = cs.callStmt.getInvokeExpr().getBase();
|
|
791
|
+
let param = params.at(0);
|
|
792
|
+
if (!containerValue || !param) {
|
|
793
|
+
return srcNodes;
|
|
794
|
+
}
|
|
795
|
+
let basePagNode = this.getOrNewPagNode(callerCid, containerValue, cs.callStmt);
|
|
796
|
+
let dstPagNode = this.getOrNewPagNode(calleeCid, param, cs.callStmt);
|
|
797
|
+
for (let pt of basePagNode.getPointTo()) {
|
|
798
|
+
let newContainerExprPagNode = this.pag.getNode(pt);
|
|
799
|
+
// PagNewContainerExprNode's points-to is the element node
|
|
800
|
+
if (!newContainerExprPagNode || !newContainerExprPagNode.getElementNode()) {
|
|
801
|
+
continue;
|
|
802
|
+
}
|
|
803
|
+
let srcPagNode = this.pag.getNode(newContainerExprPagNode.getElementNode());
|
|
804
|
+
// connect the element node with the value inside foreach
|
|
805
|
+
this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
|
|
806
|
+
srcNodes.push(srcPagNode.getID());
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
return srcNodes;
|
|
810
|
+
}
|
|
779
811
|
addSDKMethodPagCallEdge(cs, callerCid, calleeCid) {
|
|
780
812
|
let srcNodes = [];
|
|
781
813
|
let calleeNode = this.cg.getNode(cs.calleeFuncID);
|
|
@@ -33,6 +33,9 @@ export declare class BooleanConstant extends Constant {
|
|
|
33
33
|
export declare class NumberConstant extends Constant {
|
|
34
34
|
constructor(value: number);
|
|
35
35
|
}
|
|
36
|
+
export declare class BigIntConstant extends Constant {
|
|
37
|
+
constructor(value: bigint);
|
|
38
|
+
}
|
|
36
39
|
export declare class StringConstant extends Constant {
|
|
37
40
|
constructor(value: string);
|
|
38
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../../../src/core/base/Constant.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../../../src/core/base/Constant.ts"],"names":[],"mappings":"AAeA,OAAO,EAA6D,IAAI,EAAiB,MAAM,QAAQ,CAAC;AACxG,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,qBAAa,QAAS,YAAW,KAAK;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;gBAEhB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAKrC;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,KAAK,EAAE;IAIzB;;;OAGG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACI,QAAQ,IAAI,MAAM;CAS5B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAE7C,KAAK,EAAE,OAAO;WAIZ,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY;CAG1D;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAsB;;WAMxC,WAAW,IAAI,YAAY;CAG5C;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA2B;;WAM7C,WAAW,IAAI,iBAAiB;CAGjD"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.UndefinedConstant = exports.NullConstant = exports.StringConstant = exports.NumberConstant = exports.BooleanConstant = exports.Constant = void 0;
|
|
17
|
+
exports.UndefinedConstant = exports.NullConstant = exports.StringConstant = exports.BigIntConstant = exports.NumberConstant = exports.BooleanConstant = exports.Constant = void 0;
|
|
18
18
|
const Type_1 = require("./Type");
|
|
19
19
|
const TSConst_1 = require("../common/TSConst");
|
|
20
20
|
/**
|
|
@@ -75,6 +75,12 @@ class NumberConstant extends Constant {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
exports.NumberConstant = NumberConstant;
|
|
78
|
+
class BigIntConstant extends Constant {
|
|
79
|
+
constructor(value) {
|
|
80
|
+
super(value.toString(), Type_1.BigIntType.getInstance());
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.BigIntConstant = BigIntConstant;
|
|
78
84
|
class StringConstant extends Constant {
|
|
79
85
|
constructor(value) {
|
|
80
86
|
super(value.toString(), Type_1.StringType.getInstance());
|
package/lib/core/base/Expr.d.ts
CHANGED
|
@@ -97,13 +97,30 @@ export declare class ArkStaticInvokeExpr extends AbstractInvokeExpr {
|
|
|
97
97
|
toString(): string;
|
|
98
98
|
inferType(arkMethod: ArkMethod): AbstractInvokeExpr;
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* 1. Local PtrInvokeExpr
|
|
102
|
+
*
|
|
103
|
+
* ```typescript
|
|
104
|
+
* func foo():void {
|
|
105
|
+
* }
|
|
106
|
+
* let ptr = foo;
|
|
107
|
+
* ptr();
|
|
108
|
+
* ```
|
|
109
|
+
* 2. FieldRef PtrInvokeExpr
|
|
110
|
+
*
|
|
111
|
+
* ```typescript
|
|
112
|
+
* class A {
|
|
113
|
+
* b:()=> void()
|
|
114
|
+
* }
|
|
115
|
+
* new A().b()
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
100
118
|
export declare class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
101
|
-
private
|
|
102
|
-
constructor(methodSignature: MethodSignature, ptr: Local, args: Value[], realGenericTypes?: Type[]);
|
|
103
|
-
setFunPtrLocal(ptr: Local): void;
|
|
104
|
-
getFuncPtrLocal(): Local;
|
|
119
|
+
private funPtr;
|
|
120
|
+
constructor(methodSignature: MethodSignature, ptr: Local | AbstractFieldRef, args: Value[], realGenericTypes?: Type[]);
|
|
121
|
+
setFunPtrLocal(ptr: Local | AbstractFieldRef): void;
|
|
122
|
+
getFuncPtrLocal(): Local | AbstractFieldRef;
|
|
105
123
|
toString(): string;
|
|
106
|
-
inferType(arkMethod: ArkMethod): ArkPtrInvokeExpr;
|
|
107
124
|
getUses(): Value[];
|
|
108
125
|
}
|
|
109
126
|
export declare class ArkNewExpr extends AbstractExpr {
|
|
@@ -245,6 +262,7 @@ export declare class ArkTypeOfExpr extends AbstractExpr {
|
|
|
245
262
|
getUses(): Value[];
|
|
246
263
|
getType(): Type;
|
|
247
264
|
toString(): string;
|
|
265
|
+
inferType(arkMethod: ArkMethod): AbstractExpr;
|
|
248
266
|
}
|
|
249
267
|
export declare class ArkInstanceOfExpr extends AbstractExpr {
|
|
250
268
|
private op;
|
|
@@ -256,6 +274,7 @@ export declare class ArkInstanceOfExpr extends AbstractExpr {
|
|
|
256
274
|
getType(): Type;
|
|
257
275
|
getUses(): Value[];
|
|
258
276
|
toString(): string;
|
|
277
|
+
inferType(arkMethod: ArkMethod): AbstractExpr;
|
|
259
278
|
}
|
|
260
279
|
export declare class ArkCastExpr extends AbstractExpr {
|
|
261
280
|
private op;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAEH,SAAS,EAET,SAAS,EAKT,IAAI,EAKP,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,gBAAgB,
|
|
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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Copyright (c) 2024-2025 Huawei Device Co., Ltd.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
6
6
|
* You may obtain a copy of the License at
|
|
@@ -200,21 +200,49 @@ class ArkStaticInvokeExpr extends AbstractInvokeExpr {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
exports.ArkStaticInvokeExpr = ArkStaticInvokeExpr;
|
|
203
|
+
/**
|
|
204
|
+
* 1. Local PtrInvokeExpr
|
|
205
|
+
*
|
|
206
|
+
* ```typescript
|
|
207
|
+
* func foo():void {
|
|
208
|
+
* }
|
|
209
|
+
* let ptr = foo;
|
|
210
|
+
* ptr();
|
|
211
|
+
* ```
|
|
212
|
+
* 2. FieldRef PtrInvokeExpr
|
|
213
|
+
*
|
|
214
|
+
* ```typescript
|
|
215
|
+
* class A {
|
|
216
|
+
* b:()=> void()
|
|
217
|
+
* }
|
|
218
|
+
* new A().b()
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
203
221
|
class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
204
222
|
constructor(methodSignature, ptr, args, realGenericTypes) {
|
|
205
223
|
super(methodSignature, args, realGenericTypes);
|
|
206
|
-
this.
|
|
224
|
+
this.funPtr = ptr;
|
|
207
225
|
}
|
|
208
226
|
setFunPtrLocal(ptr) {
|
|
209
|
-
this.
|
|
227
|
+
this.funPtr = ptr;
|
|
210
228
|
}
|
|
211
229
|
getFuncPtrLocal() {
|
|
212
|
-
return this.
|
|
230
|
+
return this.funPtr;
|
|
213
231
|
}
|
|
214
232
|
toString() {
|
|
215
233
|
let strs = [];
|
|
216
234
|
strs.push('ptrinvoke <');
|
|
217
|
-
|
|
235
|
+
let ptrName = '';
|
|
236
|
+
if (this.funPtr instanceof Local_1.Local) {
|
|
237
|
+
ptrName = this.funPtr.getName();
|
|
238
|
+
}
|
|
239
|
+
else if (this.funPtr instanceof Ref_1.ArkInstanceFieldRef) {
|
|
240
|
+
ptrName = this.funPtr.getBase().getName() + '.' + this.funPtr.getFieldName();
|
|
241
|
+
}
|
|
242
|
+
else if (this.funPtr instanceof Ref_1.ArkStaticFieldRef) {
|
|
243
|
+
ptrName = this.funPtr.getFieldName();
|
|
244
|
+
}
|
|
245
|
+
strs.push(this.getMethodSignature().toString(ptrName));
|
|
218
246
|
strs.push('>(');
|
|
219
247
|
if (this.getArgs().length > 0) {
|
|
220
248
|
for (const arg of this.getArgs()) {
|
|
@@ -226,10 +254,6 @@ class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
|
226
254
|
strs.push(')');
|
|
227
255
|
return strs.join('');
|
|
228
256
|
}
|
|
229
|
-
inferType(arkMethod) {
|
|
230
|
-
// TODO: handle type inference
|
|
231
|
-
return this;
|
|
232
|
-
}
|
|
233
257
|
getUses() {
|
|
234
258
|
let uses = [];
|
|
235
259
|
uses.push(this.getFuncPtrLocal());
|
|
@@ -526,6 +550,9 @@ class AbstractBinopExpr extends AbstractExpr {
|
|
|
526
550
|
if (op1Type === Type_1.NumberType.getInstance() && op2Type === Type_1.NumberType.getInstance()) {
|
|
527
551
|
type = Type_1.NumberType.getInstance();
|
|
528
552
|
}
|
|
553
|
+
if (op1Type === Type_1.BigIntType.getInstance() && op2Type === Type_1.BigIntType.getInstance()) {
|
|
554
|
+
type = Type_1.BigIntType.getInstance();
|
|
555
|
+
}
|
|
529
556
|
break;
|
|
530
557
|
case '-':
|
|
531
558
|
case '*':
|
|
@@ -534,6 +561,9 @@ class AbstractBinopExpr extends AbstractExpr {
|
|
|
534
561
|
if (op1Type === Type_1.NumberType.getInstance() && op2Type === Type_1.NumberType.getInstance()) {
|
|
535
562
|
type = Type_1.NumberType.getInstance();
|
|
536
563
|
}
|
|
564
|
+
if (op1Type === Type_1.BigIntType.getInstance() && op2Type === Type_1.BigIntType.getInstance()) {
|
|
565
|
+
type = Type_1.BigIntType.getInstance();
|
|
566
|
+
}
|
|
537
567
|
break;
|
|
538
568
|
case '!=':
|
|
539
569
|
case '!==':
|
|
@@ -553,6 +583,9 @@ class AbstractBinopExpr extends AbstractExpr {
|
|
|
553
583
|
case '^':
|
|
554
584
|
case '<<':
|
|
555
585
|
case '>>':
|
|
586
|
+
if (op1Type === Type_1.BigIntType.getInstance() && op2Type === Type_1.BigIntType.getInstance()) {
|
|
587
|
+
type = Type_1.BigIntType.getInstance();
|
|
588
|
+
}
|
|
556
589
|
case '>>>':
|
|
557
590
|
if (op1Type === Type_1.NumberType.getInstance() && op2Type === Type_1.NumberType.getInstance()) {
|
|
558
591
|
type = Type_1.NumberType.getInstance();
|
|
@@ -635,6 +668,12 @@ class ArkTypeOfExpr extends AbstractExpr {
|
|
|
635
668
|
toString() {
|
|
636
669
|
return 'typeof ' + this.op;
|
|
637
670
|
}
|
|
671
|
+
inferType(arkMethod) {
|
|
672
|
+
if (this.op instanceof Ref_1.AbstractRef || this.op instanceof AbstractExpr) {
|
|
673
|
+
this.op.inferType(arkMethod);
|
|
674
|
+
}
|
|
675
|
+
return this;
|
|
676
|
+
}
|
|
638
677
|
}
|
|
639
678
|
exports.ArkTypeOfExpr = ArkTypeOfExpr;
|
|
640
679
|
class ArkInstanceOfExpr extends AbstractExpr {
|
|
@@ -664,6 +703,16 @@ class ArkInstanceOfExpr extends AbstractExpr {
|
|
|
664
703
|
toString() {
|
|
665
704
|
return this.op + ' instanceof ' + this.checkType;
|
|
666
705
|
}
|
|
706
|
+
inferType(arkMethod) {
|
|
707
|
+
TypeInference_1.TypeInference.inferValueType(this.op, arkMethod);
|
|
708
|
+
if (TypeInference_1.TypeInference.isUnclearType(this.checkType)) {
|
|
709
|
+
const newType = TypeInference_1.TypeInference.inferUnclearedType(this.checkType, arkMethod.getDeclaringArkClass());
|
|
710
|
+
if (newType) {
|
|
711
|
+
this.checkType = newType;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
return this;
|
|
715
|
+
}
|
|
667
716
|
}
|
|
668
717
|
exports.ArkInstanceOfExpr = ArkInstanceOfExpr;
|
|
669
718
|
// 类型转换
|
package/lib/core/base/Ref.d.ts
CHANGED
|
@@ -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,
|
|
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
|
@@ -243,19 +243,7 @@ class ArkParameterRef extends AbstractRef {
|
|
|
243
243
|
this.paramType = newType;
|
|
244
244
|
}
|
|
245
245
|
inferType(arkMethod) {
|
|
246
|
-
|
|
247
|
-
if (this.paramType instanceof Type_1.UnknownType || this.paramType instanceof Type_1.UnclearReferenceType) {
|
|
248
|
-
const type1 = (_a = arkMethod.getSignature().getMethodSubSignature().getParameters()[this.index]) === null || _a === void 0 ? void 0 : _a.getType();
|
|
249
|
-
if (!TypeInference_1.TypeInference.isUnclearType(type1)) {
|
|
250
|
-
this.paramType = type1;
|
|
251
|
-
return this;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
let type = TypeInference_1.TypeInference.inferUnclearedType(this.paramType, arkMethod.getDeclaringArkClass());
|
|
255
|
-
if (type) {
|
|
256
|
-
this.paramType = type;
|
|
257
|
-
}
|
|
258
|
-
return this;
|
|
246
|
+
return IRInference_1.IRInference.inferParameterRef(this, arkMethod);
|
|
259
247
|
}
|
|
260
248
|
getUses() {
|
|
261
249
|
return [];
|
|
@@ -369,5 +357,18 @@ class ClosureFieldRef extends AbstractRef {
|
|
|
369
357
|
toString() {
|
|
370
358
|
return this.base.toString() + '.' + this.getFieldName();
|
|
371
359
|
}
|
|
360
|
+
inferType(arkMethod) {
|
|
361
|
+
var _a;
|
|
362
|
+
if (TypeInference_1.TypeInference.isUnclearType(this.type)) {
|
|
363
|
+
let type = this.base.getType();
|
|
364
|
+
if (type instanceof Type_1.LexicalEnvType) {
|
|
365
|
+
type = (_a = type.getClosures().find(c => c.getName() === this.fieldName)) === null || _a === void 0 ? void 0 : _a.getType();
|
|
366
|
+
}
|
|
367
|
+
if (type && !TypeInference_1.TypeInference.isUnclearType(type)) {
|
|
368
|
+
this.type = type;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return this;
|
|
372
|
+
}
|
|
372
373
|
}
|
|
373
374
|
exports.ClosureFieldRef = ClosureFieldRef;
|
package/lib/core/base/Type.d.ts
CHANGED
|
@@ -61,6 +61,15 @@ export declare class NumberType extends PrimitiveType {
|
|
|
61
61
|
private constructor();
|
|
62
62
|
static getInstance(): NumberType;
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* bigint type
|
|
66
|
+
* @category core/base/type
|
|
67
|
+
*/
|
|
68
|
+
export declare class BigIntType extends PrimitiveType {
|
|
69
|
+
private static readonly INSTANCE;
|
|
70
|
+
private constructor();
|
|
71
|
+
static getInstance(): BigIntType;
|
|
72
|
+
}
|
|
64
73
|
export declare class StringType extends PrimitiveType {
|
|
65
74
|
private static readonly INSTANCE;
|
|
66
75
|
private constructor();
|
|
@@ -269,7 +278,7 @@ export declare class GenericType extends Type {
|
|
|
269
278
|
private name;
|
|
270
279
|
private defaultType?;
|
|
271
280
|
private constraint?;
|
|
272
|
-
private index
|
|
281
|
+
private index;
|
|
273
282
|
constructor(name: string, defaultType?: Type, constraint?: Type);
|
|
274
283
|
getName(): string;
|
|
275
284
|
getDefaultType(): Type | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Type.d.ts","sourceRoot":"","sources":["../../../src/core/base/Type.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"Type.d.ts","sourceRoot":"","sources":["../../../src/core/base/Type.ts"],"names":[],"mappings":"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"}
|