kernels-bot commited on
Commit
d2ffd9b
·
verified ·
1 Parent(s): 1f49c27

Uploaded using `kernel-builder`.

Browse files
build/torch-stable-abi210-rocm71-x86_64-linux/__init__.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+
3
+ from ._ops import ops
4
+
5
+ from . import layers
6
+
7
+
8
+ def silu_and_mul(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
9
+ ops.silu_and_mul(out, x)
10
+ return out
11
+
12
+
13
+ def mul_and_silu(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
14
+ ops.mul_and_silu(out, x)
15
+ return out
16
+
17
+
18
+ def gelu_and_mul(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
19
+ ops.gelu_and_mul(out, x)
20
+ return out
21
+
22
+
23
+ def gelu_tanh_and_mul(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
24
+ ops.gelu_tanh_and_mul(out, x)
25
+ return out
26
+
27
+
28
+ def fatrelu_and_mul(out: torch.Tensor, x: torch.Tensor, threshold: float = 0.0) -> torch.Tensor:
29
+ ops.fatrelu_and_mul(out, x, threshold)
30
+ return out
31
+
32
+
33
+ def gelu(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
34
+ ops.gelu(out, x)
35
+ return out
36
+
37
+ def silu(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
38
+ ops.silu(out, x)
39
+ return out
40
+
41
+
42
+ def gelu_tanh(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
43
+ ops.gelu_tanh(out, x)
44
+ return out
45
+
46
+
47
+ def gelu_fast(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
48
+ ops.gelu_fast(out, x)
49
+ return out
50
+
51
+
52
+ def gelu_new(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
53
+ ops.gelu_new(out, x)
54
+ return out
55
+
56
+
57
+ def gelu_quick(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
58
+ ops.gelu_quick(out, x)
59
+ return out
60
+
61
+
62
+ __all__ = [
63
+ "silu_and_mul",
64
+ "mul_and_silu",
65
+ "gelu_and_mul",
66
+ "gelu_tanh_and_mul",
67
+ "fatrelu_and_mul",
68
+ "gelu_fast",
69
+ "gelu_new",
70
+ "gelu_quick",
71
+ "gelu_tanh",
72
+ "silu",
73
+ "gelu",
74
+ "layers",
75
+ ]
build/torch-stable-abi210-rocm71-x86_64-linux/_activation_rocm_2f7c452.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e097494b6471f77ecf031e20bc95f57b5f946b6cc6881a947f052f67755d934d
3
+ size 1238624
build/torch-stable-abi210-rocm71-x86_64-linux/_ops.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from . import _activation_rocm_2f7c452
3
+ ops = torch.ops._activation_rocm_2f7c452
4
+
5
+ def add_op_namespace_prefix(op_name: str):
6
+ """
7
+ Prefix op by namespace.
8
+ """
9
+ return f"_activation_rocm_2f7c452::{op_name}"
build/torch-stable-abi210-rocm71-x86_64-linux/activation/__init__.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import ctypes
2
+ import importlib.util
3
+ import sys
4
+ from pathlib import Path
5
+ from types import ModuleType
6
+
7
+
8
+ def _import_from_path(file_path: Path) -> ModuleType:
9
+ # We cannot use the module name as-is, after adding it to `sys.modules`,
10
+ # it would also be used for other imports. So, we make a module name that
11
+ # depends on the path for it to be unique using the hex-encoded hash of
12
+ # the path.
13
+ path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
14
+ module_name = path_hash
15
+ spec = importlib.util.spec_from_file_location(module_name, file_path)
16
+ if spec is None:
17
+ raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
18
+ module = importlib.util.module_from_spec(spec)
19
+ if module is None:
20
+ raise ImportError(f"Cannot load module {module_name} from spec")
21
+ sys.modules[module_name] = module
22
+ spec.loader.exec_module(module) # type: ignore
23
+ return module
24
+
25
+
26
+ globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))
build/torch-stable-abi210-rocm71-x86_64-linux/layers.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+
4
+ from ._ops import ops
5
+
6
+
7
+ class SiluAndMul(nn.Module):
8
+ """An activation function for SwiGLU.
9
+
10
+ The function computes x -> silu(x[:d]) * x[d:] where d = x.shape[-1] // 2.
11
+
12
+ Shapes:
13
+ x: (num_tokens, 2 * d) or (batch_size, seq_len, 2 * d)
14
+ return: (num_tokens, d) or (batch_size, seq_len, d)
15
+ """
16
+
17
+ can_torch_compile: bool = True
18
+
19
+ def forward(self, x: torch.Tensor):
20
+ if not x.is_contiguous():
21
+ x = x.contiguous()
22
+ d = x.shape[-1] // 2
23
+ output_shape = x.shape[:-1] + (d,)
24
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
25
+ ops.silu_and_mul(out, x)
26
+ return out
27
+
28
+ class Silu(nn.Module):
29
+ """An activation function for SiLU.
30
+
31
+ The function computes x -> silu(x).
32
+
33
+ Shapes:
34
+ x: (num_tokens, d) or (batch_size, seq_len, d)
35
+ return: (num_tokens, d) or (batch_size, seq_len, d)
36
+ """
37
+
38
+ can_torch_compile: bool = True
39
+
40
+ def forward(self, x: torch.Tensor):
41
+ if not x.is_contiguous():
42
+ x = x.contiguous()
43
+ out = torch.empty_like(x)
44
+ ops.silu(out, x)
45
+ return out
46
+
47
+ class Gelu(nn.Module):
48
+ """An activation function for GELU.
49
+
50
+ The function computes x -> gelu(x).
51
+
52
+ Shapes:
53
+ x: (num_tokens, d) or (batch_size, seq_len, d)
54
+ return: (num_tokens, d) or (batch_size, seq_len, d)
55
+ """
56
+
57
+ can_torch_compile: bool = True
58
+
59
+ def forward(self, x: torch.Tensor):
60
+ if not x.is_contiguous():
61
+ x = x.contiguous()
62
+ out = torch.empty_like(x)
63
+ ops.gelu(out, x)
64
+ return out
65
+
66
+ class GeluTanh(nn.Module):
67
+ """An activation function for GELU with `tanh` approximation.
68
+
69
+ The function computes x -> gelu_tanh(x).
70
+
71
+ Shapes:
72
+ x: (num_tokens, d) or (batch_size, seq_len, d)
73
+ return: (num_tokens, d) or (batch_size, seq_len, d)
74
+ """
75
+
76
+ can_torch_compile: bool = True
77
+
78
+ def forward(self, x: torch.Tensor):
79
+ if not x.is_contiguous():
80
+ x = x.contiguous()
81
+ out = torch.empty_like(x)
82
+ ops.gelu_tanh(out, x)
83
+ return out
84
+
85
+
86
+ class MulAndSilu(nn.Module):
87
+ """An activation function for SwiGLU.
88
+
89
+ The function computes x -> x[:d] * silu(x[d:]) where d = x.shape[-1] // 2.
90
+
91
+ Shapes:
92
+ x: (num_tokens, 2 * d) or (batch_size, seq_len, 2 * d)
93
+ return: (num_tokens, d) or (batch_size, seq_len, d)
94
+ """
95
+
96
+ can_torch_compile: bool = True
97
+
98
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
99
+ if not x.is_contiguous():
100
+ x = x.contiguous()
101
+ d = x.shape[-1] // 2
102
+ output_shape = x.shape[:-1] + (d,)
103
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
104
+ ops.mul_and_silu(out, x)
105
+ return out
106
+
107
+
108
+ class GeluAndMul(nn.Module):
109
+ """An activation function for GeGLU.
110
+
111
+ The function computes x -> GELU(x[:d]) * x[d:] where d = x.shape[-1] // 2.
112
+
113
+ Shapes:
114
+ x: (batch_size, seq_len, 2 * d) or (num_tokens, 2 * d)
115
+ return: (batch_size, seq_len, d) or (num_tokens, d)
116
+ """
117
+
118
+ can_torch_compile: bool = True
119
+
120
+ def forward(self, x: torch.Tensor):
121
+ if not x.is_contiguous():
122
+ x = x.contiguous()
123
+ d = x.shape[-1] // 2
124
+ output_shape = x.shape[:-1] + (d,)
125
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
126
+ ops.gelu_and_mul(out, x)
127
+ return out
128
+
129
+
130
+ class GeluTanhAndMul(nn.Module):
131
+ can_torch_compile: bool = True
132
+
133
+ def forward(self, x: torch.Tensor):
134
+ if not x.is_contiguous():
135
+ x = x.contiguous()
136
+ d = x.shape[-1] // 2
137
+ output_shape = x.shape[:-1] + (d,)
138
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
139
+ ops.gelu_tanh_and_mul(out, x)
140
+ return out
141
+
142
+
143
+ class FatreluAndMul(nn.Module):
144
+ """An activation function for FATReLU.
145
+
146
+ The function computes x -> FATReLU(x[:d]) * x[d:] where
147
+ d = x.shape[-1] // 2.
148
+ This is used in openbmb/MiniCPM-S-1B-sft.
149
+
150
+ Shapes:
151
+ x: (num_tokens, 2 * d) or (batch_size, seq_len, 2 * d)
152
+ return: (num_tokens, d) or (batch_size, seq_len, d)
153
+ """
154
+
155
+ can_torch_compile: bool = True
156
+
157
+ def __init__(self, threshold: float = 0.0):
158
+ super().__init__()
159
+ self.threshold = threshold
160
+
161
+ def forward(self, x: torch.Tensor):
162
+ if not x.is_contiguous():
163
+ x = x.contiguous()
164
+ d = x.shape[-1] // 2
165
+ output_shape = x.shape[:-1] + (d,)
166
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
167
+ ops.fatrelu_and_mul(out, x, self.threshold)
168
+ return out
169
+
170
+
171
+ class FastGELU(nn.Module):
172
+ can_torch_compile: bool = True
173
+
174
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
175
+ if not x.is_contiguous():
176
+ x = x.contiguous()
177
+ out = torch.empty_like(x)
178
+ ops.gelu_fast(out, x)
179
+ return out
180
+
181
+
182
+ class NewGELU(nn.Module):
183
+ can_torch_compile: bool = True
184
+
185
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
186
+ if not x.is_contiguous():
187
+ x = x.contiguous()
188
+ out = torch.empty_like(x)
189
+ ops.gelu_new(out, x)
190
+ return out
191
+
192
+
193
+ class QuickGELU(nn.Module):
194
+ can_torch_compile: bool = True
195
+
196
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
197
+ if not x.is_contiguous():
198
+ x = x.contiguous()
199
+ out = torch.empty_like(x)
200
+ ops.gelu_quick(out, x)
201
+ return out
build/torch-stable-abi210-rocm71-x86_64-linux/metadata.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "activation",
3
+ "id": "_activation_rocm_2f7c452",
4
+ "version": 1,
5
+ "license": "Apache-2.0",
6
+ "python-depends": [],
7
+ "backend": {
8
+ "type": "rocm",
9
+ "archs": [
10
+ "gfx1030",
11
+ "gfx1100",
12
+ "gfx1101",
13
+ "gfx906",
14
+ "gfx908",
15
+ "gfx90a",
16
+ "gfx942"
17
+ ]
18
+ },
19
+ "digest": {
20
+ "algorithm": "sha256",
21
+ "files": {
22
+ "__init__.py": "NQdhY7p9BPoMw0NQodMKFTPSQXBlrsX3yUdP8MEHyH0=",
23
+ "_activation_rocm_2f7c452.abi3.so": "4JdJS2Rx937PAx4gvJX1e1+Ua2zGiBqUfwUvZ3Vdk00=",
24
+ "_ops.py": "3Up8PGecjSkm1Gx9CxN3Z2LWJC8B8zHzA/D0NVPOWhI=",
25
+ "activation/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY=",
26
+ "layers.py": "wWX07+W0BNFA7RyCE0jYH7aa2U3B8aiiIpu/Q4xsE0w="
27
+ }
28
+ },
29
+ "provenance": {
30
+ "kernel-builder": {
31
+ "version": "0.17.0-dev0",
32
+ "sha": "81580bb92577f2f7228661ca2a221fc052375709",
33
+ "dirty": false
34
+ },
35
+ "kernel": {
36
+ "sha": "2f7c452801641012cf6aa9bdf042431457024033",
37
+ "dirty": false
38
+ }
39
+ }
40
+ }
build/torch-stable-abi210-rocm71-x86_64-linux/metadata.json.sigstore ADDED
@@ -0,0 +1 @@
 
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtGgAwIBAgIUR/sVmk9juGVyXDf2ezWWkPl5C0QwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzA5MTU1MzU0WhcNMjYwNzA5MTYwMzU0WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKBUxqCNjRklmTtd9ZSeymlhXTjFFBT1f0A2KuV1FOkgXb7nwcwo1HiZCHEgpSMXQbIpiw0xHbAdJTbGlxhgz56OCBfAwggXsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU67mBDusMdaEKlcGlxeC9+pVgMUAwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmY3YzQ1MjgwMTY0MTAxMmNmNmFhOWJkZjA0MjQzMTQ1NzAyNDAzMzATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmY3YzQ1MjgwMTY0MTAxMmNmNmFhOWJkZjA0MjQzMTQ1NzAyNDAzMzAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmY3YzQ1MjgwMTY0MTAxMmNmNmFhOWJkZjA0MjQzMTQ1NzAyNDAzMzAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJmN2M0NTI4MDE2NDEwMTJjZjZhYTliZGYwNDI0MzE0NTcwMjQwMzMwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjkwMzA3NzExMDMvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABn0eV6N0AAAQDAEcwRQIhAIUoYqZg6DIx4KHGpLt6u53+6lELfTwqbaZ8eutsJXuEAiBFlIbm4GKB6E5PAgIe4r+yQL+MXD1NFmsxmAM9znoRjzAKBggqhkjOPQQDAwNnADBkAjAYgwwtkP1ef3YQq+qIADkZzxXKO9aMRGnexhvuTxvYA9l9YMZDDn8K16Oc5sOJLAsCMGTfvzElygmN36jgCHUyacHql6/fgb+mmd60Tt1HfeRU1ueDpVqQPxeULkkuBqmPiA=="},"tlogEntries":[{"logIndex":"2129329963","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783612434","inclusionPromise":{"signedEntryTimestamp":"MEYCIQDHBbqbMA0aZADO2OZVslUmg8dnhyPlXe41Saj23aKsjQIhAKA2EnR9l+7n4FegTEna8NaKWcPNkSAgOYhXVfa41Gu3"},"inclusionProof":{"logIndex":"2007425701","rootHash":"nq78OMQU8SEM9ucEoh+TLvO7GWD8N8DrHsgwLzYqndI=","treeSize":"2007425705","hashes":["sqbRtA2PzZd9tkn/Vr8Rd2zFfYA97W0ksjXidbmVRQY=","eGjCnl/zuNhkBxZPhrQKtoetAFStTvQSRCNt0GvHaXM=","dRnhD2a1ojfNBYhQL/OeiHqtph3iTnHev/PxIi89UH4=","qsjgjnbgQ+ecOfd5pXdm0M9cz/kAbjiHv017MU/AzvI=","3mHG+ZJaFmih4pxKOkeaTgfIMN5QiDPozsqIva4PdlQ=","v/JuXGHGvaCRZwmdaYZ5WlkaBotRvM+6rN+V5rMSnBg=","uezSplZ6aSYS1CKVIOfYnG170Mk8/7G6n11Bclfeyb0=","FBbA4Yu86QMk64BeKAst9dOYmJWFZPxiAtTKG34eRYA=","uiW6kxxRMI2917LAPOX/p1N0dil7i0VhDq50IAHxRGA=","gTMML7CrFoIz2uT4M+1fkZBgi12FSyTDQEPCVIoGK14=","CCu7OkQW6+npAh6Tygn9JYdKku6AUboDosZP3sI7yKQ=","uwnh4tLrO/3+ywQ63CnFW6mU2V+y+Db8CobG3g6S0Hk=","Kezfh1XcoOp9KAwr7OWyF8C7cr/mZBPGqKHTdO0BnDs=","LD5Ws0n7JWm8O7qGvHNSZug32ByFM1WblCpsDJh5M6o=","f8knrc4LOu/X8scT5SBvEgFJSd7vZZ0LzSaC0Z3lm/U=","WajL3ZhY6ZX9meV3VTH9TkrbM31OF4o6+7foL0Uf6PI=","cyKMKBvHkQtwb2xR5svh+YppANOVdn7X8t4DuKMxICA=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2007425705\nnq78OMQU8SEM9ucEoh+TLvO7GWD8N8DrHsgwLzYqndI=\n\n— rekor.sigstore.dev wNI9ajBGAiEAmSEEOXARyLV8RrBatupb8iGQvhx8npKya0q5PHPZYL8CIQCN64KvBIuxU/7ruKNcQhbqwOLSJDIRRfCsqKsI8IoXzg==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlMTA3ZmMxNTc2YjlhZGY5NGJiMmIzZDU0NjYxMjk3NzI4MDRlN2ZiZjY1NjUxMzM2YWI4ZTRiYTlkYzVmZmQzIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJRllxZmQ4VEc1eVcrVitBWFVRaTJKWUcwendwQ2paM2JybXNKNFRWam9MYUFpQStRU2h6dE1NY1Y5VktBT2pCYWtRUnlCeTEyRVhTakk5Q0pYSzU4VUJxaXc9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRha05EUW5SSFowRjNTVUpCWjBsVlVpOXpWbTFyT1dwMVIxWjVXRVJtTW1WNlYxZHJVR3cxUXpCUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVRWTlZGVXhUWHBWTUZkb1kwNU5hbGwzVG5wQk5VMVVXWGROZWxVd1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZMUWxWNGNVTk9hbEpyYkcxVWRHUTVXbE5sZVcxc2FGaFVha1pHUWxReFpqQkJNa3NLZFZZeFJrOXJaMWhpTjI1M1kzZHZNVWhwV2tOSVJXZHdVMDFZVVdKSmNHbDNNSGhJWWtGa1NsUmlSMng0YUdkNk5UWlBRMEptUVhkbloxaHpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlUyTjIxQ0NrUjFjMDFrWVVWTGJHTkhiSGhsUXprcmNGWm5UVlZCZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVmt6V1hwUk1VMXFaM2ROVkZrd1RWUkJlRTF0VG0xT2JVWm9DazlYU210YWFrRXdUV3BSZWsxVVVURk9la0Y1VGtSQmVrMTZRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0V1ROWmVsRXhUV3BuZDAxVVdUQk5WRUY0VFcxT2JVNXRSbWhQVjBwcldtcEJNRTFxVVhvS1RWUlJNVTU2UVhsT1JFRjZUWHBCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0V1ROWmVsRXhUV3BuZDAxVVdUQk5WRUY0VFcxT2JVNXRSbWdLVDFkS2ExcHFRVEJOYWxGNlRWUlJNVTU2UVhsT1JFRjZUWHBCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiVTR5VFRBS1RsUkpORTFFUlRKT1JFVjNUVlJLYWxwcVdtaFpWR3hwV2tkWmQwNUVTVEJOZWtVd1RsUmpkMDFxVVhkTmVrMTNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW10M1RYcEJNMDU2UlhoTlJFMTJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0VKSWIwRUtaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNHdaVlkyVGpCQlFVRlJSQXBCUldOM1VsRkphRUZKVlc5WmNWcG5Oa1JKZURSTFNFZHdUSFEyZFRVekt6WnNSVXhtVkhkeFltRmFPR1YxZEhOS1dIVkZRV2xDUm14SlltMDBSMHRDQ2paRk5WQkJaMGxsTkhJcmVWRk1LMDFZUkRGT1JtMXplRzFCVFRsNmJtOVNhbnBCUzBKblozRm9hMnBQVUZGUlJFRjNUbTVCUkVKclFXcEJXV2QzZDNRS2ExQXhaV1l6V1ZGeEszRkpRVVJyV25wNFdFdFBPV0ZOVWtkdVpYaG9kblZVZUhaWlFUbHNPVmxOV2tSRWJqaExNVFpQWXpWelQwcE1RWE5EVFVkVVpncDJla1ZzZVdkdFRqTTJhbWREU0ZWNVlXTkljV3cyTDJabllpdHRiV1EyTUZSME1VaG1aVkpWTVhWbFJIQldjVkZRZUdWVlRHdHJkVUp4YlZCcFFUMDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgT0HiLQkTTCpW0saIhKGOltZPtfSFYagVAyuwPE1EQlwCFQC3Ejx1B6Eq+pXfenWl+w3NTJ9gsxgPMjAyNjA3MDkxNTUzNTRaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHaMIIB1gIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDcwOTE1NTM1NFowLwYJKoZIhvcNAQkEMSIEIO2hymvbNSTkeCZc4oHdPSV+Q5UmGSYfndzDaldpUe41MIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRmMGQCMCZrOfbNcGo5QSc3rgEXekK5y2MOhBTZCDpZptszNxp1HxDxDlfKwYUB4CLA1DUm8wIwN75cqEkq+mBA/0oKGTUw+C5eU/cBL41RZfonwgjV181RKp2EUP32uqnBkSOzUbFb"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"4Qf8FXa5rflLsrPVRmEpdygE5/v2VlEzarjkup3F/9M="},"signature":"MEQCIFYqfd8TG5yW+V+AXUQi2JYG0zwpCjZ3brmsJ4TVjoLaAiA+QShztMMcV9VKAOjBakQRyBy12EXSjI9CJXK58UBqiw=="}}
build/torch-stable-abi210-rocm72-x86_64-linux/__init__.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+
3
+ from ._ops import ops
4
+
5
+ from . import layers
6
+
7
+
8
+ def silu_and_mul(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
9
+ ops.silu_and_mul(out, x)
10
+ return out
11
+
12
+
13
+ def mul_and_silu(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
14
+ ops.mul_and_silu(out, x)
15
+ return out
16
+
17
+
18
+ def gelu_and_mul(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
19
+ ops.gelu_and_mul(out, x)
20
+ return out
21
+
22
+
23
+ def gelu_tanh_and_mul(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
24
+ ops.gelu_tanh_and_mul(out, x)
25
+ return out
26
+
27
+
28
+ def fatrelu_and_mul(out: torch.Tensor, x: torch.Tensor, threshold: float = 0.0) -> torch.Tensor:
29
+ ops.fatrelu_and_mul(out, x, threshold)
30
+ return out
31
+
32
+
33
+ def gelu(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
34
+ ops.gelu(out, x)
35
+ return out
36
+
37
+ def silu(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
38
+ ops.silu(out, x)
39
+ return out
40
+
41
+
42
+ def gelu_tanh(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
43
+ ops.gelu_tanh(out, x)
44
+ return out
45
+
46
+
47
+ def gelu_fast(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
48
+ ops.gelu_fast(out, x)
49
+ return out
50
+
51
+
52
+ def gelu_new(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
53
+ ops.gelu_new(out, x)
54
+ return out
55
+
56
+
57
+ def gelu_quick(out: torch.Tensor, x: torch.Tensor) -> torch.Tensor:
58
+ ops.gelu_quick(out, x)
59
+ return out
60
+
61
+
62
+ __all__ = [
63
+ "silu_and_mul",
64
+ "mul_and_silu",
65
+ "gelu_and_mul",
66
+ "gelu_tanh_and_mul",
67
+ "fatrelu_and_mul",
68
+ "gelu_fast",
69
+ "gelu_new",
70
+ "gelu_quick",
71
+ "gelu_tanh",
72
+ "silu",
73
+ "gelu",
74
+ "layers",
75
+ ]
build/torch-stable-abi210-rocm72-x86_64-linux/_activation_rocm_2f7c452.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a25aeee24e9036e8ec169e106d52fb2ab30b5f3a99d54c8fc60e9d99e686423c
3
+ size 1097312
build/torch-stable-abi210-rocm72-x86_64-linux/_ops.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from . import _activation_rocm_2f7c452
3
+ ops = torch.ops._activation_rocm_2f7c452
4
+
5
+ def add_op_namespace_prefix(op_name: str):
6
+ """
7
+ Prefix op by namespace.
8
+ """
9
+ return f"_activation_rocm_2f7c452::{op_name}"
build/torch-stable-abi210-rocm72-x86_64-linux/activation/__init__.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import ctypes
2
+ import importlib.util
3
+ import sys
4
+ from pathlib import Path
5
+ from types import ModuleType
6
+
7
+
8
+ def _import_from_path(file_path: Path) -> ModuleType:
9
+ # We cannot use the module name as-is, after adding it to `sys.modules`,
10
+ # it would also be used for other imports. So, we make a module name that
11
+ # depends on the path for it to be unique using the hex-encoded hash of
12
+ # the path.
13
+ path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
14
+ module_name = path_hash
15
+ spec = importlib.util.spec_from_file_location(module_name, file_path)
16
+ if spec is None:
17
+ raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
18
+ module = importlib.util.module_from_spec(spec)
19
+ if module is None:
20
+ raise ImportError(f"Cannot load module {module_name} from spec")
21
+ sys.modules[module_name] = module
22
+ spec.loader.exec_module(module) # type: ignore
23
+ return module
24
+
25
+
26
+ globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))
build/torch-stable-abi210-rocm72-x86_64-linux/layers.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+
4
+ from ._ops import ops
5
+
6
+
7
+ class SiluAndMul(nn.Module):
8
+ """An activation function for SwiGLU.
9
+
10
+ The function computes x -> silu(x[:d]) * x[d:] where d = x.shape[-1] // 2.
11
+
12
+ Shapes:
13
+ x: (num_tokens, 2 * d) or (batch_size, seq_len, 2 * d)
14
+ return: (num_tokens, d) or (batch_size, seq_len, d)
15
+ """
16
+
17
+ can_torch_compile: bool = True
18
+
19
+ def forward(self, x: torch.Tensor):
20
+ if not x.is_contiguous():
21
+ x = x.contiguous()
22
+ d = x.shape[-1] // 2
23
+ output_shape = x.shape[:-1] + (d,)
24
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
25
+ ops.silu_and_mul(out, x)
26
+ return out
27
+
28
+ class Silu(nn.Module):
29
+ """An activation function for SiLU.
30
+
31
+ The function computes x -> silu(x).
32
+
33
+ Shapes:
34
+ x: (num_tokens, d) or (batch_size, seq_len, d)
35
+ return: (num_tokens, d) or (batch_size, seq_len, d)
36
+ """
37
+
38
+ can_torch_compile: bool = True
39
+
40
+ def forward(self, x: torch.Tensor):
41
+ if not x.is_contiguous():
42
+ x = x.contiguous()
43
+ out = torch.empty_like(x)
44
+ ops.silu(out, x)
45
+ return out
46
+
47
+ class Gelu(nn.Module):
48
+ """An activation function for GELU.
49
+
50
+ The function computes x -> gelu(x).
51
+
52
+ Shapes:
53
+ x: (num_tokens, d) or (batch_size, seq_len, d)
54
+ return: (num_tokens, d) or (batch_size, seq_len, d)
55
+ """
56
+
57
+ can_torch_compile: bool = True
58
+
59
+ def forward(self, x: torch.Tensor):
60
+ if not x.is_contiguous():
61
+ x = x.contiguous()
62
+ out = torch.empty_like(x)
63
+ ops.gelu(out, x)
64
+ return out
65
+
66
+ class GeluTanh(nn.Module):
67
+ """An activation function for GELU with `tanh` approximation.
68
+
69
+ The function computes x -> gelu_tanh(x).
70
+
71
+ Shapes:
72
+ x: (num_tokens, d) or (batch_size, seq_len, d)
73
+ return: (num_tokens, d) or (batch_size, seq_len, d)
74
+ """
75
+
76
+ can_torch_compile: bool = True
77
+
78
+ def forward(self, x: torch.Tensor):
79
+ if not x.is_contiguous():
80
+ x = x.contiguous()
81
+ out = torch.empty_like(x)
82
+ ops.gelu_tanh(out, x)
83
+ return out
84
+
85
+
86
+ class MulAndSilu(nn.Module):
87
+ """An activation function for SwiGLU.
88
+
89
+ The function computes x -> x[:d] * silu(x[d:]) where d = x.shape[-1] // 2.
90
+
91
+ Shapes:
92
+ x: (num_tokens, 2 * d) or (batch_size, seq_len, 2 * d)
93
+ return: (num_tokens, d) or (batch_size, seq_len, d)
94
+ """
95
+
96
+ can_torch_compile: bool = True
97
+
98
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
99
+ if not x.is_contiguous():
100
+ x = x.contiguous()
101
+ d = x.shape[-1] // 2
102
+ output_shape = x.shape[:-1] + (d,)
103
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
104
+ ops.mul_and_silu(out, x)
105
+ return out
106
+
107
+
108
+ class GeluAndMul(nn.Module):
109
+ """An activation function for GeGLU.
110
+
111
+ The function computes x -> GELU(x[:d]) * x[d:] where d = x.shape[-1] // 2.
112
+
113
+ Shapes:
114
+ x: (batch_size, seq_len, 2 * d) or (num_tokens, 2 * d)
115
+ return: (batch_size, seq_len, d) or (num_tokens, d)
116
+ """
117
+
118
+ can_torch_compile: bool = True
119
+
120
+ def forward(self, x: torch.Tensor):
121
+ if not x.is_contiguous():
122
+ x = x.contiguous()
123
+ d = x.shape[-1] // 2
124
+ output_shape = x.shape[:-1] + (d,)
125
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
126
+ ops.gelu_and_mul(out, x)
127
+ return out
128
+
129
+
130
+ class GeluTanhAndMul(nn.Module):
131
+ can_torch_compile: bool = True
132
+
133
+ def forward(self, x: torch.Tensor):
134
+ if not x.is_contiguous():
135
+ x = x.contiguous()
136
+ d = x.shape[-1] // 2
137
+ output_shape = x.shape[:-1] + (d,)
138
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
139
+ ops.gelu_tanh_and_mul(out, x)
140
+ return out
141
+
142
+
143
+ class FatreluAndMul(nn.Module):
144
+ """An activation function for FATReLU.
145
+
146
+ The function computes x -> FATReLU(x[:d]) * x[d:] where
147
+ d = x.shape[-1] // 2.
148
+ This is used in openbmb/MiniCPM-S-1B-sft.
149
+
150
+ Shapes:
151
+ x: (num_tokens, 2 * d) or (batch_size, seq_len, 2 * d)
152
+ return: (num_tokens, d) or (batch_size, seq_len, d)
153
+ """
154
+
155
+ can_torch_compile: bool = True
156
+
157
+ def __init__(self, threshold: float = 0.0):
158
+ super().__init__()
159
+ self.threshold = threshold
160
+
161
+ def forward(self, x: torch.Tensor):
162
+ if not x.is_contiguous():
163
+ x = x.contiguous()
164
+ d = x.shape[-1] // 2
165
+ output_shape = x.shape[:-1] + (d,)
166
+ out = torch.empty(output_shape, dtype=x.dtype, device=x.device)
167
+ ops.fatrelu_and_mul(out, x, self.threshold)
168
+ return out
169
+
170
+
171
+ class FastGELU(nn.Module):
172
+ can_torch_compile: bool = True
173
+
174
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
175
+ if not x.is_contiguous():
176
+ x = x.contiguous()
177
+ out = torch.empty_like(x)
178
+ ops.gelu_fast(out, x)
179
+ return out
180
+
181
+
182
+ class NewGELU(nn.Module):
183
+ can_torch_compile: bool = True
184
+
185
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
186
+ if not x.is_contiguous():
187
+ x = x.contiguous()
188
+ out = torch.empty_like(x)
189
+ ops.gelu_new(out, x)
190
+ return out
191
+
192
+
193
+ class QuickGELU(nn.Module):
194
+ can_torch_compile: bool = True
195
+
196
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
197
+ if not x.is_contiguous():
198
+ x = x.contiguous()
199
+ out = torch.empty_like(x)
200
+ ops.gelu_quick(out, x)
201
+ return out
build/torch-stable-abi210-rocm72-x86_64-linux/metadata.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "activation",
3
+ "id": "_activation_rocm_2f7c452",
4
+ "version": 1,
5
+ "license": "Apache-2.0",
6
+ "python-depends": [],
7
+ "backend": {
8
+ "type": "rocm",
9
+ "archs": [
10
+ "gfx1030",
11
+ "gfx1100",
12
+ "gfx1101",
13
+ "gfx906",
14
+ "gfx908",
15
+ "gfx90a",
16
+ "gfx942"
17
+ ]
18
+ },
19
+ "digest": {
20
+ "algorithm": "sha256",
21
+ "files": {
22
+ "__init__.py": "NQdhY7p9BPoMw0NQodMKFTPSQXBlrsX3yUdP8MEHyH0=",
23
+ "_activation_rocm_2f7c452.abi3.so": "olru4k6QNujsFp4QbVL7KrMLXzqZ1UyPxg6dmeaGQjw=",
24
+ "_ops.py": "3Up8PGecjSkm1Gx9CxN3Z2LWJC8B8zHzA/D0NVPOWhI=",
25
+ "activation/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY=",
26
+ "layers.py": "wWX07+W0BNFA7RyCE0jYH7aa2U3B8aiiIpu/Q4xsE0w="
27
+ }
28
+ },
29
+ "provenance": {
30
+ "kernel-builder": {
31
+ "version": "0.17.0-dev0",
32
+ "sha": "81580bb92577f2f7228661ca2a221fc052375709",
33
+ "dirty": false
34
+ },
35
+ "kernel": {
36
+ "sha": "2f7c452801641012cf6aa9bdf042431457024033",
37
+ "dirty": false
38
+ }
39
+ }
40
+ }
build/torch-stable-abi210-rocm72-x86_64-linux/metadata.json.sigstore ADDED
@@ -0,0 +1 @@
 
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtGgAwIBAgIUOiZMwPwEJKVNUiJwvO852UnD0jgwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzA5MTU1MzU1WhcNMjYwNzA5MTYwMzU1WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+46eCYHG+d5u9L5110YRibpfSJqlYOQYNdKaehxU4vALuOStjkbk2HC6Wmz/YPOCnZl90v7VI6mmN0ncVSlrraOCBfAwggXsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUiHKWqNYV4BSQGFK+3Wu1kpyDW7YwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmY3YzQ1MjgwMTY0MTAxMmNmNmFhOWJkZjA0MjQzMTQ1NzAyNDAzMzATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmY3YzQ1MjgwMTY0MTAxMmNmNmFhOWJkZjA0MjQzMTQ1NzAyNDAzMzAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmY3YzQ1MjgwMTY0MTAxMmNmNmFhOWJkZjA0MjQzMTQ1NzAyNDAzMzAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJmN2M0NTI4MDE2NDEwMTJjZjZhYTliZGYwNDI0MzE0NTcwMjQwMzMwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjkwMzA3NzExMDMvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABn0eV7FAAAAQDAEcwRQIgKmeBn8nPd/vkhcXNXq7tDkYdFqxRdLnEIQVWpQWTmEUCIQD1zMZjr7tqa1FVp9mQAzfx1G8fKuB7/6JFVJACjX6xuzAKBggqhkjOPQQDAwNnADBkAjBm3CSql29IGPlB4DzrQOfTzD7fkYfzNLYA89ukVwN8D9ulr7mvuWkXm44HJDlMlwwCMCO1Lp0NFDntfkXN3pldxNszFMxKkUUXsQ7zIZbn3dDpXj6SPqx88UTUM2m4p3wQww=="},"tlogEntries":[{"logIndex":"2129330132","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783612435","inclusionPromise":{"signedEntryTimestamp":"MEQCIDy2d1CP92+AQpY1ZDhKEzFCOV1xlSd83gLN0cQ4oLaoAiBXjsI/6vr6VUO1V5cX4JyUbzq2D3cYPFVZQDDgcQKuJQ=="},"inclusionProof":{"logIndex":"2007425870","rootHash":"zt4t69FjoWlm/h7fKijSIk1d4Kw+y+18CKA6dBCkoXs=","treeSize":"2007425907","hashes":["e2LRovoelq4L3ZAw41entiOrm3QA5cCCsYE7FpNIU9E=","Hzh0AEPHTmc+22FpxnI6MXWu2HSJt6xacOIVs0VZhP4=","IiK3wmFpt457skYdBOuccV+erRKIUsVdytjE32F2AZo=","oEoe2lB/iFtc/OcabNbQAHvJii42EVXPLa7s4WU5Iqw=","aAaOKw1B7OANUy5RfLXk851tqKMkJt9S4HzZB1Og4jo=","jyU5iehLCgGM5jZFXmKO7ksuB2Y5D3lk+xRzeYqnJJc=","tpxcFm6s4ACOc8X1ihYUxuupIXMWF323mmYq2jE8N9E=","cAXtCe90cx9GqsvAeHaMzIM5iDf0+yUh7QrHha5MGp8=","uezSplZ6aSYS1CKVIOfYnG170Mk8/7G6n11Bclfeyb0=","FBbA4Yu86QMk64BeKAst9dOYmJWFZPxiAtTKG34eRYA=","uiW6kxxRMI2917LAPOX/p1N0dil7i0VhDq50IAHxRGA=","gTMML7CrFoIz2uT4M+1fkZBgi12FSyTDQEPCVIoGK14=","CCu7OkQW6+npAh6Tygn9JYdKku6AUboDosZP3sI7yKQ=","uwnh4tLrO/3+ywQ63CnFW6mU2V+y+Db8CobG3g6S0Hk=","Kezfh1XcoOp9KAwr7OWyF8C7cr/mZBPGqKHTdO0BnDs=","LD5Ws0n7JWm8O7qGvHNSZug32ByFM1WblCpsDJh5M6o=","f8knrc4LOu/X8scT5SBvEgFJSd7vZZ0LzSaC0Z3lm/U=","WajL3ZhY6ZX9meV3VTH9TkrbM31OF4o6+7foL0Uf6PI=","cyKMKBvHkQtwb2xR5svh+YppANOVdn7X8t4DuKMxICA=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2007425907\nzt4t69FjoWlm/h7fKijSIk1d4Kw+y+18CKA6dBCkoXs=\n\n— rekor.sigstore.dev wNI9ajBGAiEAyaOI3r2xkqM6Rjto0jxNg8/iSOjZkv/0ZulUecS15ygCIQDjN0zT1BJfYFpF0pISyhZ7JWbYP3zMmG8yCm39/4eoWQ==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlNzAwN2JhN2QzYzY2NDIzNjEzOGI4NGE3ZjYxNzg1MDZlYjUzZjA2ZWViNDY1MTg4YzVhMmQwNTYzNDg4YWI2In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJRVJscXViZHpUYytKdlAyU0hjbk41REdjN05VSSs0ejBKZDRFTm5nNGkvL0FpRUF6cUQyQ1U1a0w4d1htaW03TjJDUG5VR2JMYVJjUzBSZ0hoTXNqaVZUSlQ0PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRha05EUW5SSFowRjNTVUpCWjBsVlQybGFUWGRRZDBWS1MxWk9WV2xLZDNaUE9EVXlWVzVFTUdwbmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVRWTlZGVXhUWHBWTVZkb1kwNU5hbGwzVG5wQk5VMVVXWGROZWxVeFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVVyTkRabFExbElSeXRrTlhVNVREVXhNVEJaVW1saWNHWlRTbkZzV1U5UldVNWtTMkVLWldoNFZUUjJRVXgxVDFOMGFtdGlhekpJUXpaWGJYb3ZXVkJQUTI1YWJEa3dkamRXU1RadGJVNHdibU5XVTJ4eWNtRlBRMEptUVhkbloxaHpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZwU0V0WENuRk9XVlkwUWxOUlIwWkxLek5YZFRGcmNIbEVWemRaZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVmt6V1hwUk1VMXFaM2ROVkZrd1RWUkJlRTF0VG0xT2JVWm9DazlYU210YWFrRXdUV3BSZWsxVVVURk9la0Y1VGtSQmVrMTZRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0V1ROWmVsRXhUV3BuZDAxVVdUQk5WRUY0VFcxT2JVNXRSbWhQVjBwcldtcEJNRTFxVVhvS1RWUlJNVTU2UVhsT1JFRjZUWHBCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0V1ROWmVsRXhUV3BuZDAxVVdUQk5WRUY0VFcxT2JVNXRSbWdLVDFkS2ExcHFRVEJOYWxGNlRWUlJNVTU2UVhsT1JFRjZUWHBCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiVTR5VFRBS1RsUkpORTFFUlRKT1JFVjNUVlJLYWxwcVdtaFpWR3hwV2tkWmQwNUVTVEJOZWtVd1RsUmpkMDFxVVhkTmVrMTNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW10M1RYcEJNMDU2UlhoTlJFMTJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0VKSWIwRUtaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNHdaVlkzUmtGQlFVRlJSQXBCUldOM1VsRkpaMHR0WlVKdU9HNVFaQzkyYTJoaldFNVljVGQwUkd0WlpFWnhlRkprVEc1RlNWRldWM0JSVjFSdFJWVkRTVkZFTVhwTldtcHlOM1J4Q21FeFJsWndPVzFSUVhwbWVERkhPR1pMZFVJM0x6WktSbFpLUVVOcVdEWjRkWHBCUzBKblozRm9hMnBQVUZGUlJFRjNUbTVCUkVKclFXcENiVE5EVTNFS2JESTVTVWRRYkVJMFJIcHlVVTltVkhwRU4yWnJXV1o2VGt4WlFUZzVkV3RXZDA0NFJEbDFiSEkzYlhaMVYydFliVFEwU0VwRWJFMXNkM2REVFVOUE1RcE1jREJPUmtSdWRHWnJXRTR6Y0d4a2VFNXpla1pOZUV0clZWVlljMUUzZWtsYVltNHpaRVJ3V0dvMlUxQnhlRGc0VlZSVlRUSnROSEF6ZDFGM2R6MDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgs9nzoO8Sp6GnEiCNjJLB/fQjqW0nLS2yUhjBcD46XjsCFQDrNCTV/poTEWox7UA8WWoKb5O/5BgPMjAyNjA3MDkxNTUzNTVaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHaMIIB1gIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDcwOTE1NTM1NVowLwYJKoZIhvcNAQkEMSIEIE2FAww7AbcI0xG18xy/oJ3JambrTA2CowHSd0OXGXLiMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRmMGQCMAs0guJB+7RL+4qAGOkPVhY4znzWj8BjkZd0spcCQnXCnwauez50+KO6qtL22CJfBgIwSeX89ZshUl5uOtyFoMHtNLnlHqE1/rSaKzqjyM8ehFuD5caGpK0EmDd6AnDnlWsT"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"5wB7p9PGZCNhOLhKf2F4UG61PwbutGUYjFotBWNIirY="},"signature":"MEUCIERlqubdzTc+JvP2SHcnN5DGc7NUI+4z0Jd4ENng4i//AiEAzqD2CU5kL8wXmim7N2CPnUGbLaRcS0RgHhMsjiVTJT4="}}