@agoric/vats 0.15.1 → 0.15.2-calypso-dev-84eb287.0
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.md +3 -0
- package/index.d.ts +6 -0
- package/index.d.ts.map +1 -0
- package/index.js +9 -0
- package/package.json +43 -48
- package/scripts/build-bundles.js +19 -0
- package/src/bridge-target.d.ts +193 -0
- package/src/bridge-target.d.ts.map +1 -0
- package/src/bridge-target.js +316 -0
- package/src/bridge.d.ts +14 -4
- package/src/bridge.d.ts.map +1 -1
- package/src/bridge.js +45 -16
- package/src/centralSupply.d.ts +3 -3
- package/src/centralSupply.d.ts.map +1 -1
- package/src/centralSupply.js +3 -5
- package/src/core/README.md +1 -1
- package/src/core/basic-behaviors.d.ts +24 -39
- package/src/core/basic-behaviors.d.ts.map +1 -1
- package/src/core/basic-behaviors.js +63 -63
- package/src/core/boot-chain.d.ts +178 -44
- package/src/core/boot-chain.d.ts.map +1 -1
- package/src/core/boot-chain.js +5 -5
- package/src/core/boot-sim.d.ts +5 -43
- package/src/core/boot-sim.d.ts.map +1 -1
- package/src/core/boot-sim.js +3 -4
- package/src/core/boot-solo.d.ts +5 -43
- package/src/core/boot-solo.d.ts.map +1 -1
- package/src/core/boot-solo.js +4 -5
- package/src/core/chain-behaviors.d.ts +10 -26
- package/src/core/chain-behaviors.d.ts.map +1 -1
- package/src/core/chain-behaviors.js +38 -42
- package/src/core/client-behaviors.d.ts +2 -1
- package/src/core/client-behaviors.d.ts.map +1 -1
- package/src/core/client-behaviors.js +6 -5
- package/src/core/core-eval-env.d.ts +40 -0
- package/src/core/demoIssuers.d.ts +24 -26
- package/src/core/demoIssuers.d.ts.map +1 -1
- package/src/core/demoIssuers.js +37 -37
- package/src/core/lib-boot.d.ts +17 -53
- package/src/core/lib-boot.d.ts.map +1 -1
- package/src/core/lib-boot.js +52 -60
- package/src/core/promise-space.d.ts +4 -7
- package/src/core/promise-space.d.ts.map +1 -1
- package/src/core/promise-space.js +15 -16
- package/src/core/sim-behaviors.d.ts +3 -3
- package/src/core/sim-behaviors.d.ts.map +1 -1
- package/src/core/sim-behaviors.js +1 -1
- package/src/core/startWalletFactory.d.ts +23 -27
- package/src/core/startWalletFactory.d.ts.map +1 -1
- package/src/core/startWalletFactory.js +32 -18
- package/src/core/types-ambient.d.ts +538 -0
- package/src/core/types-ambient.js +1 -0
- package/src/core/utils.d.ts +47 -92
- package/src/core/utils.d.ts.map +1 -1
- package/src/core/utils.js +58 -50
- package/src/crc.d.ts +2 -6
- package/src/crc.d.ts.map +1 -1
- package/src/crc.js +5 -16
- package/src/ibc.d.ts +30 -35
- package/src/ibc.d.ts.map +1 -1
- package/src/ibc.js +740 -491
- package/src/lib-board.d.ts +49 -121
- package/src/lib-board.d.ts.map +1 -1
- package/src/lib-board.js +49 -50
- package/src/localchain.d.ts +195 -0
- package/src/localchain.d.ts.map +1 -0
- package/src/localchain.js +324 -0
- package/src/mintHolder.d.ts +6 -4
- package/src/mintHolder.d.ts.map +1 -1
- package/src/mintHolder.js +19 -21
- package/src/nameHub.d.ts +27 -5
- package/src/nameHub.d.ts.map +1 -1
- package/src/nameHub.js +33 -26
- package/src/priceAuthorityRegistry.d.ts +21 -0
- package/src/priceAuthorityRegistry.d.ts.map +1 -0
- package/src/priceAuthorityRegistry.js +220 -0
- package/src/proposals/kread-proposal.d.ts +15 -0
- package/src/proposals/kread-proposal.d.ts.map +1 -0
- package/src/proposals/kread-proposal.js +24 -0
- package/src/proposals/localchain-proposal.d.ts +62 -0
- package/src/proposals/localchain-proposal.d.ts.map +1 -0
- package/src/proposals/localchain-proposal.js +128 -0
- package/src/proposals/localchain-test.d.ts +25 -0
- package/src/proposals/localchain-test.d.ts.map +1 -0
- package/src/proposals/localchain-test.js +89 -0
- package/src/proposals/namesByAddress-fix-proposal.d.ts +22 -0
- package/src/proposals/namesByAddress-fix-proposal.d.ts.map +1 -0
- package/src/proposals/namesByAddress-fix-proposal.js +55 -0
- package/src/proposals/network-proposal.d.ts +23 -8
- package/src/proposals/network-proposal.d.ts.map +1 -1
- package/src/proposals/network-proposal.js +90 -65
- package/src/proposals/probeZcfBundle.d.ts +26 -0
- package/src/proposals/probeZcfBundle.d.ts.map +1 -0
- package/src/proposals/probeZcfBundle.js +72 -0
- package/src/proposals/restart-vats-proposal.d.ts +4 -2
- package/src/proposals/restart-vats-proposal.d.ts.map +1 -1
- package/src/proposals/restart-vats-proposal.js +20 -8
- package/src/proposals/transfer-proposal.d.ts +37 -0
- package/src/proposals/transfer-proposal.d.ts.map +1 -0
- package/src/proposals/transfer-proposal.js +115 -0
- package/src/proposals/upgrade-bank-proposal.d.ts +27 -0
- package/src/proposals/upgrade-bank-proposal.d.ts.map +1 -0
- package/src/proposals/upgrade-bank-proposal.js +42 -0
- package/src/proposals/upgrade-provisionPool-proposal.d.ts +27 -0
- package/src/proposals/upgrade-provisionPool-proposal.d.ts.map +1 -0
- package/src/proposals/upgrade-provisionPool-proposal.js +67 -0
- package/src/proposals/upgrade-zoe-proposal.d.ts +27 -0
- package/src/proposals/upgrade-zoe-proposal.d.ts.map +1 -0
- package/src/proposals/upgrade-zoe-proposal.js +42 -0
- package/src/proposals/vtransfer-echoer.d.ts +24 -0
- package/src/proposals/vtransfer-echoer.d.ts.map +1 -0
- package/src/proposals/vtransfer-echoer.js +42 -0
- package/src/proposals/zcf-only-proposal.d.ts +33 -0
- package/src/proposals/zcf-only-proposal.d.ts.map +1 -0
- package/src/proposals/zcf-only-proposal.js +36 -0
- package/src/proposals/zcf-proposal.d.ts +30 -0
- package/src/proposals/zcf-proposal.d.ts.map +1 -0
- package/src/proposals/zcf-proposal.js +50 -0
- package/src/repl.d.ts +3 -3
- package/src/repl.d.ts.map +1 -1
- package/src/repl.js +11 -5
- package/src/transfer.d.ts +111 -0
- package/src/transfer.d.ts.map +1 -0
- package/src/transfer.js +260 -0
- package/src/types.d.ts +237 -105
- package/src/types.js +1 -97
- package/src/vat-agoricNames.d.ts +4 -4
- package/src/vat-agoricNames.d.ts.map +1 -1
- package/src/vat-agoricNames.js +2 -4
- package/src/vat-bank.d.ts +217 -149
- package/src/vat-bank.d.ts.map +1 -1
- package/src/vat-bank.js +96 -68
- package/src/vat-board.d.ts +24 -24
- package/src/vat-board.d.ts.map +1 -1
- package/src/vat-board.js +0 -1
- package/src/vat-bridge.d.ts +9 -23
- package/src/vat-bridge.d.ts.map +1 -1
- package/src/vat-bridge.js +1 -2
- package/src/vat-ibc.d.ts +16 -4
- package/src/vat-ibc.d.ts.map +1 -1
- package/src/vat-ibc.js +20 -9
- package/src/vat-localchain.d.ts +37 -0
- package/src/vat-localchain.d.ts.map +1 -0
- package/src/vat-localchain.js +29 -0
- package/src/vat-mints.d.ts +31 -31
- package/src/vat-mints.d.ts.map +1 -1
- package/src/vat-mints.js +6 -7
- package/src/vat-network.d.ts +69 -1
- package/src/vat-network.d.ts.map +1 -1
- package/src/vat-network.js +45 -3
- package/src/vat-priceAuthority.d.ts +4 -4
- package/src/vat-priceAuthority.d.ts.map +1 -1
- package/src/vat-priceAuthority.js +1 -1
- package/src/vat-provisioning.d.ts +6 -6
- package/src/vat-provisioning.d.ts.map +1 -1
- package/src/vat-provisioning.js +15 -12
- package/src/vat-transfer.d.ts +81 -0
- package/src/vat-transfer.d.ts.map +1 -0
- package/src/vat-transfer.js +63 -0
- package/src/vat-zoe.d.ts +4 -1
- package/src/vat-zoe.d.ts.map +1 -1
- package/src/vat-zoe.js +10 -2
- package/src/virtual-purse.d.ts +46 -21
- package/src/virtual-purse.d.ts.map +1 -1
- package/src/virtual-purse.js +57 -46
- package/src/walletFlags.d.ts +2 -2
- package/src/walletFlags.js +1 -2
- package/tools/bank-utils.d.ts +20 -0
- package/tools/bank-utils.d.ts.map +1 -0
- package/tools/bank-utils.js +92 -0
- package/tools/board-utils.d.ts +39 -0
- package/tools/board-utils.d.ts.map +1 -0
- package/tools/board-utils.js +92 -0
- package/tools/boot-test-utils.d.ts +88 -0
- package/tools/boot-test-utils.d.ts.map +1 -0
- package/tools/boot-test-utils.js +157 -0
- package/tools/fake-bridge.d.ts +18 -0
- package/tools/fake-bridge.d.ts.map +1 -0
- package/tools/fake-bridge.js +289 -0
- package/tools/ibc-utils.d.ts +29 -0
- package/tools/ibc-utils.d.ts.map +1 -0
- package/tools/ibc-utils.js +115 -0
- package/decentral-core-config.json +0 -66
- package/decentral-demo-config.json +0 -155
- package/decentral-devnet-config.json +0 -216
- package/decentral-itest-vaults-config.json +0 -210
- package/decentral-main-vaults-config.json +0 -229
- package/decentral-test-vaults-config.json +0 -195
- package/demo-proposals.json +0 -5
- package/exported.js +0 -1
- package/jsconfig.build.json +0 -12
- package/jsconfig.json +0 -13
- package/src/core/types.d.ts +0 -764
- package/src/core/types.d.ts.map +0 -1
- package/src/core/types.js +0 -347
- package/src/provisionPool.d.ts +0 -164
- package/src/provisionPool.d.ts.map +0 -1
- package/src/provisionPool.js +0 -113
- package/src/provisionPoolKit.d.ts +0 -392
- package/src/provisionPoolKit.d.ts.map +0 -1
- package/src/provisionPoolKit.js +0 -464
- package/src/tokens.d.ts +0 -36
- package/src/tokens.d.ts.map +0 -1
- package/src/tokens.js +0 -37
- package/src/types.d.ts.map +0 -1
- package/src/vat-sharing.d.ts +0 -54
- package/src/vat-sharing.d.ts.map +0 -1
- package/src/vat-sharing.js +0 -14
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { E } from '@endo/far';
|
|
2
|
+
import { M } from '@endo/patterns';
|
|
3
|
+
|
|
4
|
+
import { BridgeHandlerI } from './bridge.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {any} MostlyPureData ideally should be PureData, but that type is
|
|
8
|
+
* too restrictive to work out-of-the-box.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const { details: X, Fail } = assert;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {object} TargetApp an object representing the app that receives
|
|
15
|
+
* upcalls from the low-level TargetHost on the other side of a bridge
|
|
16
|
+
* @property {(obj: MostlyPureData) => Promise<MostlyPureData>} receiveUpcall
|
|
17
|
+
* receive data from the TargetHost, and return a data result
|
|
18
|
+
*/
|
|
19
|
+
// TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
|
|
20
|
+
export const TargetAppI = M.interface('TargetApp', {
|
|
21
|
+
receiveUpcall: M.callWhen(M.any()).returns(M.any()),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {object} TargetHost an object representing the host that receives
|
|
26
|
+
* downcalls from the high-level TargetApp over a bridge
|
|
27
|
+
* @property {(obj: MostlyPureData) => Promise<MostlyPureData>} sendDowncall
|
|
28
|
+
* send data to the TargetHost, which returns a data result
|
|
29
|
+
*/
|
|
30
|
+
// TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
|
|
31
|
+
export const TargetHostI = M.interface('TargetHost', {
|
|
32
|
+
sendDowncall: M.callWhen(M.any()).returns(M.any()),
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @typedef {object} AppTransformer an object for replacing a TargetApp,
|
|
37
|
+
* generally with a wrapper that intercepts its inputs and/or results to
|
|
38
|
+
* ensure conformance with a protocol and/or interface (e.g., an active tap
|
|
39
|
+
* can encode results of the wrapped TargetApp into an acknowledgement
|
|
40
|
+
* message)
|
|
41
|
+
* @property {(
|
|
42
|
+
* app: ERef<TargetApp>,
|
|
43
|
+
* targetHost: ERef<TargetHost>,
|
|
44
|
+
* ...args: unknown[]
|
|
45
|
+
* ) => ERef<TargetApp>} wrapApp
|
|
46
|
+
*/
|
|
47
|
+
// TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
|
|
48
|
+
export const AppTransformerI = M.interface('AppTransformer', {
|
|
49
|
+
wrapApp: M.callWhen(
|
|
50
|
+
M.await(M.remotable('TargetAppI')),
|
|
51
|
+
M.await(M.remotable('TargetHostI')),
|
|
52
|
+
)
|
|
53
|
+
.rest(M.any())
|
|
54
|
+
.returns(M.remotable('TargetAppI')),
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @typedef {object} TargetRegistration is an ExoClass of its own, and each
|
|
59
|
+
* instance is an attenuation of a BridgeTargetKit `targetRegistry` facet that
|
|
60
|
+
* has access to internal state thereof but has been scoped down to a single
|
|
61
|
+
* target.
|
|
62
|
+
* @property {() => Promise<void>} revoke performs unregistration (and sends the
|
|
63
|
+
* corresponding "BRIDGE_TARGET_UNREGISTER" message to the targetHost).
|
|
64
|
+
* @property {(targetApp: ERef<TargetApp>) => Promise<void>} updateTargetApp
|
|
65
|
+
* replaces the app associated with the target (but with no corresponding
|
|
66
|
+
* message).
|
|
67
|
+
*/
|
|
68
|
+
// TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
|
|
69
|
+
export const TargetRegistrationI = M.interface('TargetRegistration', {
|
|
70
|
+
updateTargetApp: M.callWhen(M.await(M.remotable('TargetAppI'))).returns(),
|
|
71
|
+
revoke: M.callWhen().returns(),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @typedef {object} TargetRegistry
|
|
76
|
+
* @property {(
|
|
77
|
+
* target: string,
|
|
78
|
+
* targetApp: ERef<TargetApp>,
|
|
79
|
+
* args?: unknown[],
|
|
80
|
+
* ) => Promise<TargetRegistration>} register
|
|
81
|
+
* @property {(
|
|
82
|
+
* target: string,
|
|
83
|
+
* targetApp: ERef<TargetApp>,
|
|
84
|
+
* args?: unknown[],
|
|
85
|
+
* ) => Promise<void>} reregister
|
|
86
|
+
* @property {(target: string) => Promise<void>} unregister
|
|
87
|
+
*/
|
|
88
|
+
// TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
|
|
89
|
+
const TargetRegistryI = M.interface('TargetRegistry', {
|
|
90
|
+
register: M.callWhen(M.string(), M.await(M.remotable('TargetAppI')))
|
|
91
|
+
.optional(M.array())
|
|
92
|
+
.returns(M.remotable('TargetRegistration')),
|
|
93
|
+
reregister: M.callWhen(M.string(), M.await(M.remotable('TargetAppI')))
|
|
94
|
+
.optional(M.array())
|
|
95
|
+
.returns(),
|
|
96
|
+
unregister: M.callWhen(M.string()).returns(),
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
/** @param {import('@agoric/base-zone').Zone} zone */
|
|
100
|
+
export const prepareTargetRegistration = zone =>
|
|
101
|
+
zone.exoClass(
|
|
102
|
+
'TargetRegistration',
|
|
103
|
+
TargetRegistrationI,
|
|
104
|
+
/**
|
|
105
|
+
* @param {string} target
|
|
106
|
+
* @param {TargetRegistry} registry
|
|
107
|
+
* @param {unknown[] | null} args
|
|
108
|
+
*/
|
|
109
|
+
(target, registry, args) => ({
|
|
110
|
+
target,
|
|
111
|
+
/** @type {TargetRegistry | null} */
|
|
112
|
+
registry,
|
|
113
|
+
args,
|
|
114
|
+
}),
|
|
115
|
+
{
|
|
116
|
+
/**
|
|
117
|
+
* Atomically point the registration at a different app.
|
|
118
|
+
*
|
|
119
|
+
* @param {TargetApp} app new app to handle messages for the target
|
|
120
|
+
*/
|
|
121
|
+
async updateTargetApp(app) {
|
|
122
|
+
const { target, registry, args } = this.state;
|
|
123
|
+
if (!registry) {
|
|
124
|
+
throw Fail`Registration for ${target} is already revoked`;
|
|
125
|
+
}
|
|
126
|
+
return E(registry).reregister(
|
|
127
|
+
target,
|
|
128
|
+
app,
|
|
129
|
+
/** @type {unknown[]} */ (args),
|
|
130
|
+
);
|
|
131
|
+
},
|
|
132
|
+
/** Atomically delete the registration. */
|
|
133
|
+
async revoke() {
|
|
134
|
+
const { target, registry } = this.state;
|
|
135
|
+
if (!registry) {
|
|
136
|
+
throw Fail`Registration for ${target} is already revoked`;
|
|
137
|
+
}
|
|
138
|
+
this.state.registry = null;
|
|
139
|
+
this.state.args = null;
|
|
140
|
+
return E(registry).unregister(target);
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* A BridgeTargetKit is associated with a ScopedBridgeManager (essentially a
|
|
147
|
+
* specific named channel on a bridge, cf. {@link ./bridge.js}) and a particular
|
|
148
|
+
* inbound event type and an optional app transformer. It consists of three
|
|
149
|
+
* facets:
|
|
150
|
+
*
|
|
151
|
+
* - `targetHost` has a `downcall` method for sending outbound messages via the
|
|
152
|
+
* bridge to the VM host.
|
|
153
|
+
* - `targetRegistry` has `register`, `reregister` and `unregister` methods to
|
|
154
|
+
* register/reregister/unregister an "app" (or rather its transformation) with
|
|
155
|
+
* a "target" corresponding to an address on the targetHost. Each target may
|
|
156
|
+
* be associated with at most one app at any given time, and registration and
|
|
157
|
+
* unregistration each send a message to the targetHost of the state change
|
|
158
|
+
* (of type "BRIDGE_TARGET_REGISTER" and "BRIDGE_TARGET_UNREGISTER",
|
|
159
|
+
* respectively). `reregister` is a method that atomically redirects the
|
|
160
|
+
* target to a new (transformed) app.
|
|
161
|
+
* - `bridgeHandler` has a `fromBridge` method for receiving from the
|
|
162
|
+
* ScopedBridgeManager inbound messages of the associated event type and
|
|
163
|
+
* dispatching them to the app registered for their target.
|
|
164
|
+
*
|
|
165
|
+
* @param {import('@agoric/base-zone').Zone} zone
|
|
166
|
+
* @param {ReturnType<typeof prepareTargetRegistration>} makeTargetRegistration
|
|
167
|
+
*/
|
|
168
|
+
export const prepareBridgeTargetKit = (zone, makeTargetRegistration) =>
|
|
169
|
+
zone.exoClassKit(
|
|
170
|
+
'BridgeTargetKit',
|
|
171
|
+
{
|
|
172
|
+
bridgeHandler: BridgeHandlerI,
|
|
173
|
+
targetHost: TargetHostI,
|
|
174
|
+
targetRegistry: TargetRegistryI,
|
|
175
|
+
},
|
|
176
|
+
/**
|
|
177
|
+
* @template {import('@agoric/internal').BridgeIdValue} T
|
|
178
|
+
* @param {import('./types').ScopedBridgeManager<T>} manager
|
|
179
|
+
* @param {string} inboundEventType
|
|
180
|
+
* @param {AppTransformer} [appTransformer]
|
|
181
|
+
*/
|
|
182
|
+
(manager, inboundEventType, appTransformer = undefined) => ({
|
|
183
|
+
manager,
|
|
184
|
+
inboundEventType,
|
|
185
|
+
appTransformer,
|
|
186
|
+
/** @type {MapStore<string, ERef<TargetApp>>} */
|
|
187
|
+
targetToApp: zone.detached().mapStore('targetToApp'),
|
|
188
|
+
}),
|
|
189
|
+
{
|
|
190
|
+
bridgeHandler: {
|
|
191
|
+
fromBridge(obj) {
|
|
192
|
+
const { inboundEventType, targetToApp } = this.state;
|
|
193
|
+
const { type, target } = obj;
|
|
194
|
+
|
|
195
|
+
type === inboundEventType ||
|
|
196
|
+
Fail`Invalid inbound event type ${type}; expected ${inboundEventType}`;
|
|
197
|
+
|
|
198
|
+
target || Fail`Missing target property in ${obj}`;
|
|
199
|
+
|
|
200
|
+
const app = targetToApp.get(target);
|
|
201
|
+
return E(app).receiveUpcall(obj);
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
targetHost: {
|
|
205
|
+
async sendDowncall(obj) {
|
|
206
|
+
const { manager } = this.state;
|
|
207
|
+
return E(manager).toBridge(obj);
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
targetRegistry: {
|
|
211
|
+
/**
|
|
212
|
+
* Register an app to handle messages for a target.
|
|
213
|
+
*
|
|
214
|
+
* @param {string} target
|
|
215
|
+
* @param {TargetApp} app
|
|
216
|
+
* @param {unknown[]} [args]
|
|
217
|
+
* @returns {Promise<TargetRegistration>} power to set or delete the
|
|
218
|
+
* registration
|
|
219
|
+
*/
|
|
220
|
+
async register(target, app, args = []) {
|
|
221
|
+
const { targetHost } = this.facets;
|
|
222
|
+
const { appTransformer, targetToApp } = this.state;
|
|
223
|
+
|
|
224
|
+
// Because wrapping an app is async, we verify absence of an existing
|
|
225
|
+
// registration twice (once to avoid the unnecessary invocation and
|
|
226
|
+
// once inside `init`), but attempt to throw similar errors in both
|
|
227
|
+
// cases.
|
|
228
|
+
!targetToApp.has(target) || Fail`Target ${target} already registered`;
|
|
229
|
+
const wrappedApp = await (appTransformer
|
|
230
|
+
? E(appTransformer).wrapApp(app, targetHost, ...args)
|
|
231
|
+
: app);
|
|
232
|
+
try {
|
|
233
|
+
targetToApp.init(target, wrappedApp);
|
|
234
|
+
} catch (cause) {
|
|
235
|
+
throw assert.error(
|
|
236
|
+
X`Target ${target} already registered`,
|
|
237
|
+
undefined,
|
|
238
|
+
{ cause },
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
await E(targetHost).sendDowncall({
|
|
243
|
+
type: 'BRIDGE_TARGET_REGISTER',
|
|
244
|
+
target,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
return makeTargetRegistration(
|
|
248
|
+
target,
|
|
249
|
+
this.facets.targetRegistry,
|
|
250
|
+
args,
|
|
251
|
+
);
|
|
252
|
+
},
|
|
253
|
+
/**
|
|
254
|
+
* Update the app that handles messages for a target.
|
|
255
|
+
*
|
|
256
|
+
* @param {string} target
|
|
257
|
+
* @param {TargetApp} app
|
|
258
|
+
* @param {unknown[]} [args]
|
|
259
|
+
* @returns {Promise<void>}
|
|
260
|
+
*/
|
|
261
|
+
async reregister(target, app, args = []) {
|
|
262
|
+
const { targetHost } = this.facets;
|
|
263
|
+
const { appTransformer, targetToApp } = this.state;
|
|
264
|
+
|
|
265
|
+
// Because wrapping an app is async, we verify absence of an existing
|
|
266
|
+
// registration twice (once to avoid the unnecessary invocation and
|
|
267
|
+
// once inside `set`), but attempt to throw similar errors in both
|
|
268
|
+
// cases.
|
|
269
|
+
targetToApp.has(target) ||
|
|
270
|
+
Fail`Target ${target} is already unregistered`;
|
|
271
|
+
const wrappedApp = await (appTransformer
|
|
272
|
+
? E(appTransformer).wrapApp(app, targetHost, ...args)
|
|
273
|
+
: app);
|
|
274
|
+
try {
|
|
275
|
+
targetToApp.set(target, wrappedApp);
|
|
276
|
+
} catch (cause) {
|
|
277
|
+
throw assert.error(
|
|
278
|
+
X`Target ${target} is already unregistered`,
|
|
279
|
+
undefined,
|
|
280
|
+
{ cause },
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
/**
|
|
285
|
+
* Unregister the target, bypassing the attenuated `TargetRegistration`
|
|
286
|
+
* API.
|
|
287
|
+
*
|
|
288
|
+
* @param {string} target
|
|
289
|
+
* @returns {Promise<void>}
|
|
290
|
+
*/
|
|
291
|
+
async unregister(target) {
|
|
292
|
+
const { targetHost } = this.facets;
|
|
293
|
+
const { targetToApp } = this.state;
|
|
294
|
+
targetToApp.has(target) || Fail`Target ${target} is already deleted`;
|
|
295
|
+
targetToApp.delete(target);
|
|
296
|
+
await E(targetHost).sendDowncall({
|
|
297
|
+
type: 'BRIDGE_TARGET_UNREGISTER',
|
|
298
|
+
target,
|
|
299
|
+
});
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
);
|
|
304
|
+
harden(prepareBridgeTargetKit);
|
|
305
|
+
|
|
306
|
+
/** @param {import('@agoric/base-zone').Zone} zone */
|
|
307
|
+
export const prepareBridgeTargetModule = zone => {
|
|
308
|
+
const makeTargetRegistration = prepareTargetRegistration(zone);
|
|
309
|
+
const makeBridgeTargetKit = prepareBridgeTargetKit(
|
|
310
|
+
zone,
|
|
311
|
+
makeTargetRegistration,
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
return harden({ makeBridgeTargetKit });
|
|
315
|
+
};
|
|
316
|
+
harden(prepareBridgeTargetModule);
|
package/src/bridge.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
export
|
|
2
|
-
export const
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export function makeScopedBridge<BridgeId extends import("@agoric/internal").BridgeIdValue>(bridgeManager: ERef<import("./types.js").BridgeManager>, bridgeIdValue: BridgeId, handler?: import("@agoric/internal").Remote<import("./types.js").BridgeHandler, {}> | undefined): Promise<import("./types.js").ScopedBridgeManager<BridgeId>>;
|
|
2
|
+
export const BridgeHandlerI: import("@endo/patterns").InterfaceGuard<{
|
|
3
|
+
fromBridge: import("@endo/patterns").MethodGuard;
|
|
4
|
+
}>;
|
|
5
|
+
export const BridgeScopedManagerI: import("@endo/patterns").InterfaceGuard<{
|
|
6
|
+
fromBridge: import("@endo/patterns").MethodGuard;
|
|
7
|
+
toBridge: import("@endo/patterns").MethodGuard;
|
|
8
|
+
initHandler: import("@endo/patterns").MethodGuard;
|
|
9
|
+
setHandler: import("@endo/patterns").MethodGuard;
|
|
10
|
+
}>;
|
|
11
|
+
export const BridgeManagerI: import("@endo/patterns").InterfaceGuard<{
|
|
12
|
+
register: import("@endo/patterns").MethodGuard;
|
|
13
|
+
}>;
|
|
14
|
+
export function prepareBridgeManager(zone: import("@agoric/zone").Zone, D: DProxy): (bridgeDevice: BridgeDevice) => import("./types.js").BridgeManager;
|
|
5
15
|
//# sourceMappingURL=bridge.d.ts.map
|
package/src/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["bridge.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["bridge.js"],"names":[],"mappings":"AAqBO,iCARiD,QAAQ,SAAnD,OAAQ,kBAAkB,EAAE,aAAc,iBAC5C,IAAI,CAAC,OAAO,YAAY,EAAE,aAAa,CAAC,iBACxC,QAAQ,oGAIN,OAAO,CAAC,OAAO,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAKrE;AAEH;;GAEG;AAEH;;;;;GAKG;AAEH;;GAIG;AAmEI,2CAHI,OAAO,cAAc,EAAE,IAAI,KAC3B,MAAM,kBAuFJ,YAAY,KACV,OAAO,YAAY,EAAE,aAAa,CA2BhD"}
|
package/src/bridge.js
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
|
|
3
1
|
import { M } from '@agoric/store';
|
|
4
|
-
import '@agoric/store/exported.js';
|
|
5
2
|
import { E } from '@endo/far';
|
|
6
|
-
import './core/types.js';
|
|
7
3
|
|
|
8
4
|
const { Fail, details: X } = assert;
|
|
9
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Helper to type the registered scoped bridge correctly.
|
|
8
|
+
*
|
|
9
|
+
* FIXME: This is needed because `register` is not an async function, so
|
|
10
|
+
* `E(x).register` needs to reconstruct its return value as a Promise, which
|
|
11
|
+
* loses the function's genericity. If `register` was async, we could use its
|
|
12
|
+
* type directly, and it would remain generic.
|
|
13
|
+
*
|
|
14
|
+
* @template {import('@agoric/internal').BridgeIdValue} BridgeId
|
|
15
|
+
* @param {ERef<import('./types.js').BridgeManager>} bridgeManager
|
|
16
|
+
* @param {BridgeId} bridgeIdValue
|
|
17
|
+
* @param {import('@agoric/internal').Remote<
|
|
18
|
+
* import('./types.js').BridgeHandler
|
|
19
|
+
* >} [handler]
|
|
20
|
+
* @returns {Promise<import('./types.js').ScopedBridgeManager<BridgeId>>}
|
|
21
|
+
*/
|
|
22
|
+
export const makeScopedBridge = (bridgeManager, bridgeIdValue, handler) =>
|
|
23
|
+
/** @type {Promise<import('./types.js').ScopedBridgeManager<BridgeId>>} */ (
|
|
24
|
+
E(bridgeManager).register(bridgeIdValue, handler)
|
|
25
|
+
);
|
|
26
|
+
|
|
10
27
|
export const BridgeHandlerI = M.interface('BridgeHandler', {
|
|
11
28
|
fromBridge: M.call(M.any()).returns(M.promise()),
|
|
12
29
|
});
|
|
@@ -34,17 +51,17 @@ const BridgeManagerIKit = harden({
|
|
|
34
51
|
}),
|
|
35
52
|
});
|
|
36
53
|
|
|
37
|
-
/**
|
|
38
|
-
* @param {import('@agoric/zone').Zone} zone
|
|
39
|
-
*/
|
|
54
|
+
/** @param {import('@agoric/zone').Zone} zone */
|
|
40
55
|
const prepareScopedManager = zone => {
|
|
41
56
|
const makeScopedManager = zone.exoClass(
|
|
42
57
|
'BridgeScopedManager',
|
|
43
58
|
BridgeScopedManagerI,
|
|
44
59
|
/**
|
|
45
60
|
* @param {string} bridgeId
|
|
46
|
-
* @param {{
|
|
47
|
-
*
|
|
61
|
+
* @param {{
|
|
62
|
+
* outbound: (bridgeId: string, obj: unknown) => Promise<any>;
|
|
63
|
+
* }} toBridge
|
|
64
|
+
* @param {import('./types.js').BridgeHandler} [inboundHandler]
|
|
48
65
|
*/
|
|
49
66
|
(bridgeId, toBridge, inboundHandler) => ({
|
|
50
67
|
bridgeId,
|
|
@@ -93,14 +110,16 @@ export const prepareBridgeManager = (zone, D) => {
|
|
|
93
110
|
const makeScopedManager = prepareScopedManager(zone);
|
|
94
111
|
|
|
95
112
|
/**
|
|
96
|
-
* Create a bridge manager for multiplexing messages to and from a bridge
|
|
97
|
-
* using string-named channels.
|
|
113
|
+
* Create a bridge manager for multiplexing messages to and from a bridge
|
|
114
|
+
* device using string-named channels.
|
|
98
115
|
*
|
|
99
116
|
* @param {BridgeDevice} bridgeDevice The bridge to manage
|
|
100
117
|
* @returns {{
|
|
101
|
-
* manager: import('./types.js').BridgeManager
|
|
102
|
-
* privateInbounder: { inbound(srcID: string, obj: unknown): void }
|
|
103
|
-
* privateOutbounder: {
|
|
118
|
+
* manager: import('./types.js').BridgeManager;
|
|
119
|
+
* privateInbounder: { inbound(srcID: string, obj: unknown): void };
|
|
120
|
+
* privateOutbounder: {
|
|
121
|
+
* outbound(dstID: string, obj: unknown): Promise<any>;
|
|
122
|
+
* };
|
|
104
123
|
* }}
|
|
105
124
|
*/
|
|
106
125
|
const makeBridgeManagerKit = zone.exoClassKit(
|
|
@@ -108,7 +127,12 @@ export const prepareBridgeManager = (zone, D) => {
|
|
|
108
127
|
BridgeManagerIKit,
|
|
109
128
|
/** @param {BridgeDevice} bridgeDevice */
|
|
110
129
|
bridgeDevice => ({
|
|
111
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* @type {MapStore<
|
|
132
|
+
* string,
|
|
133
|
+
* ReturnType<ReturnType<typeof prepareScopedManager>>
|
|
134
|
+
* >}
|
|
135
|
+
*/
|
|
112
136
|
scopedManagers: zone.detached().mapStore('scopedManagers'),
|
|
113
137
|
bridgeDevice,
|
|
114
138
|
}),
|
|
@@ -156,7 +180,12 @@ export const prepareBridgeManager = (zone, D) => {
|
|
|
156
180
|
},
|
|
157
181
|
);
|
|
158
182
|
|
|
159
|
-
/**
|
|
183
|
+
/**
|
|
184
|
+
* @type {MapStore<
|
|
185
|
+
* BridgeDevice,
|
|
186
|
+
* ReturnType<typeof makeBridgeManagerKit>
|
|
187
|
+
* >}
|
|
188
|
+
*/
|
|
160
189
|
const bridgeToManagerKit = zone.mapStore('bridgeToManagerKit');
|
|
161
190
|
|
|
162
191
|
/**
|
package/src/centralSupply.d.ts
CHANGED
|
@@ -4,9 +4,9 @@ export function start(zcf: ZCF<{
|
|
|
4
4
|
feeMintAccess: FeeMintAccess;
|
|
5
5
|
}): Promise<{
|
|
6
6
|
creatorFacet: {
|
|
7
|
-
getBootstrapPayment: () => Payment<any>;
|
|
8
|
-
} & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
9
|
-
getBootstrapPayment: () => Payment<any>;
|
|
7
|
+
getBootstrapPayment: () => globalThis.Payment<any>;
|
|
8
|
+
} & import("@endo/pass-style").RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
9
|
+
getBootstrapPayment: () => globalThis.Payment<any>;
|
|
10
10
|
}>;
|
|
11
11
|
}>;
|
|
12
12
|
export type CentralSupplyContract = ContractOf<typeof start>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"centralSupply.d.ts","sourceRoot":"","sources":["centralSupply.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"centralSupply.d.ts","sourceRoot":"","sources":["centralSupply.js"],"names":[],"mappings":"AAaO,2BANI,GAAG,CAAC;IACd,qBAAyB,EAAE,MAAM,CAAC;CAC/B,CAAC,qBAEF;IAAmC,aAAa,EAAxC,aAAa;CACvB;;;;;;GAyBA;oCAGa,UAAU,CAAC,OAAO,KAAK,CAAC"}
|
package/src/centralSupply.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
|
|
3
1
|
import { AmountMath } from '@agoric/ertp';
|
|
4
2
|
import { E, Far } from '@endo/far';
|
|
5
3
|
|
|
6
4
|
/**
|
|
7
|
-
* The sole purpose of this contract is to mint the initial
|
|
8
|
-
*
|
|
5
|
+
* The sole purpose of this contract is to mint the initial supply of the
|
|
6
|
+
* central currency, RUN.
|
|
9
7
|
*
|
|
10
8
|
* @param {ZCF<{
|
|
11
|
-
*
|
|
9
|
+
* bootstrapPaymentValue: bigint;
|
|
12
10
|
* }>} zcf
|
|
13
11
|
* @param {object} privateArgs
|
|
14
12
|
* @param {FeeMintAccess} privateArgs.feeMintAccess
|
package/src/core/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Core vats and supports
|
|
2
2
|
|
|
3
3
|
This directory contains modules that build vats that boot other vats. If that's all it did, it could terminate but it also has persistent responsibilities:
|
|
4
|
-
- hold the `CORE_EVAL` bridge handler
|
|
4
|
+
- hold the `CORE_EVAL` bridge handler (see `bridgeCoreEval` in [chain-behaviors.js](./chain-behaviors.js)
|
|
5
5
|
- hold a PrioritySenderManager handed out to some contracts
|
|
6
6
|
|
|
7
7
|
Bootstrap vats must not hold precious state (see https://github.com/Agoric/agoric-sdk/issues/4548). These state aren't _precious_ because they can be reconstructed.
|
|
@@ -1,31 +1,24 @@
|
|
|
1
|
-
export function makeVatsFromBundles({ vats, devices, consume: { vatStore }, produce: { vatAdminSvc, loadVat, loadCriticalVat }, }: BootstrapPowers & {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}): Promise<void>;
|
|
6
|
-
export function produceStartGovernedUpgradable({ zone, consume: { chainTimerService, diagnostics, economicCommitteeCreatorFacet, zoe, }, produce, installation: { consume: { contractGovernor }, }, }: BootstrapSpace & {
|
|
7
|
-
zone: import('@agoric/zone').Zone;
|
|
8
|
-
consume: {
|
|
9
|
-
economicCommitteeCreatorFacet: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']['economicCommitteeCreatorFacet'];
|
|
1
|
+
export function makeVatsFromBundles({ vats, devices, consume: { vatStore }, produce: { vatAdminSvc, loadVat, loadCriticalVat }, }: BootstrapPowers & {
|
|
2
|
+
produce: {
|
|
3
|
+
loadVat: Producer<VatLoader>;
|
|
4
|
+
loadCriticalVat: Producer<VatLoader>;
|
|
10
5
|
};
|
|
11
6
|
}): Promise<void>;
|
|
12
|
-
export function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
7
|
+
export function produceDiagnostics({ produce }: Pick<ChainBootstrapSpace, "produce">): Promise<void>;
|
|
8
|
+
export function produceStartUpgradable({ zone, consume: { diagnostics, zoe }, produce, }: BootstrapSpace & {
|
|
9
|
+
zone: import("@agoric/zone").Zone;
|
|
16
10
|
}): Promise<void>;
|
|
17
|
-
export function
|
|
11
|
+
export function produceStartGovernedUpgradable({ zone, consume: { chainTimerService, diagnostics, economicCommitteeCreatorFacet, zoe, }, produce, installation: { consume: { contractGovernor }, }, }: BootstrapSpace & {
|
|
12
|
+
zone: import("@agoric/zone").Zone;
|
|
18
13
|
consume: {
|
|
19
|
-
|
|
14
|
+
economicCommitteeCreatorFacet: import("@agoric/inter-protocol/src/proposals/econ-behaviors.js").EconomyBootstrapPowers["consume"]["economicCommitteeCreatorFacet"];
|
|
20
15
|
};
|
|
21
16
|
}): Promise<void>;
|
|
17
|
+
export function buildZoe({ consume: { vatAdminSvc, loadCriticalVat, client }, produce: { zoe, feeMintAccess }, brand: { produce: { Invitation: invitationBrand }, }, issuer: { produce: { Invitation: invitationIssuer }, }, }: BootstrapPowers): Promise<void>;
|
|
18
|
+
export function startPriceAuthorityRegistry({ consume: { loadCriticalVat, client }, produce, }: BootstrapPowers): Promise<void>;
|
|
22
19
|
export function makeOracleBrands({ namedVat: { consume: { agoricNames }, }, oracleBrand: { produce: { USD }, }, }: BootstrapPowers & NamedVatPowers): Promise<void>;
|
|
23
20
|
export function produceBoard({ consume: { client }, produce: { board: pBoard }, namedVat: { consume: { board: vatBoard }, }, }: BootstrapPowers & NamedVatPowers): Promise<void>;
|
|
24
|
-
export function makeBoard({ consume: { loadCriticalVat, client }, produce: { board: { resolve: resolveBoard }, }, }: BootstrapPowers
|
|
25
|
-
consume: {
|
|
26
|
-
loadCriticalVat: ERef<VatLoader<BoardVat>>;
|
|
27
|
-
};
|
|
28
|
-
}): Promise<void>;
|
|
21
|
+
export function makeBoard({ consume: { loadCriticalVat, client }, produce: { board: { resolve: resolveBoard }, }, }: BootstrapPowers): Promise<void>;
|
|
29
22
|
export function produceNamesByAddress({ consume: { agoricNames, provisioning: provisioningOptP, client }, produce: { namesByAddress, namesByAddressAdmin }, }: BootstrapPowers): Promise<void>;
|
|
30
23
|
export function makeAddressNameHubs({ consume: { agoricNames: agoricNamesP, client }, produce, }: BootstrapSpace): Promise<void>;
|
|
31
24
|
export function makeClientBanks({ consume: { namesByAddressAdmin, client, bankManager, walletFactoryStartResult, }, }: BootstrapSpace): Promise<void>;
|
|
@@ -37,30 +30,22 @@ export function mintInitialSupply({ vatParameters: { argv: { bootMsg }, }, consu
|
|
|
37
30
|
};
|
|
38
31
|
};
|
|
39
32
|
}): Promise<void>;
|
|
40
|
-
export function addBankAssets({ consume: { agoricNamesAdmin, initialSupply, bridgeManager: bridgeManagerP, loadCriticalVat, startUpgradable, zoe, }, produce: { bankManager, bldIssuerKit }, installation: { consume: { mintHolder }, }, issuer: { produce: produceIssuer }, brand: { produce: produceBrand }, }: BootstrapSpace
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
};
|
|
44
|
-
}): Promise<void>;
|
|
45
|
-
/** @type {import('./lib-boot').BootstrapManifest} */
|
|
46
|
-
export const BASIC_BOOTSTRAP_PERMITS: import('./lib-boot').BootstrapManifest;
|
|
47
|
-
/**
|
|
48
|
-
* as from createVatByName
|
|
49
|
-
*/
|
|
50
|
-
export type CreateVatResults = import('@agoric/swingset-vat').CreateVatResults;
|
|
33
|
+
export function addBankAssets({ consume: { agoricNamesAdmin, initialSupply, bridgeManager: bridgeManagerP, loadCriticalVat, startUpgradable, zoe, }, produce: { bankManager, bldIssuerKit }, installation: { consume: { mintHolder }, }, issuer: { produce: produceIssuer }, brand: { produce: produceBrand }, }: BootstrapSpace): Promise<void>;
|
|
34
|
+
/** @type {import('./lib-boot.js').BootstrapManifest} */
|
|
35
|
+
export const BASIC_BOOTSTRAP_PERMITS: import("./lib-boot.js").BootstrapManifest;
|
|
51
36
|
export type VatStore = MapStore<string, CreateVatResults>;
|
|
52
|
-
export type ZoeVat = ERef<ReturnType<typeof import("../vat-zoe.js").buildRootObject>>;
|
|
53
|
-
export type PriceAuthorityVat = ERef<ReturnType<typeof import("../vat-priceAuthority.js").buildRootObject>>;
|
|
54
37
|
declare namespace bootMsgEx {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
38
|
+
let type: string;
|
|
39
|
+
let chainID: string;
|
|
40
|
+
let storagePort: number;
|
|
41
|
+
let supplyCoins: {
|
|
59
42
|
denom: string;
|
|
60
43
|
amount: string;
|
|
61
44
|
}[];
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
let swingsetPort: number;
|
|
46
|
+
let vbankPort: number;
|
|
47
|
+
let vibcPort: number;
|
|
64
48
|
}
|
|
49
|
+
import type { CreateVatResults } from '@agoric/swingset-vat';
|
|
65
50
|
export {};
|
|
66
51
|
//# sourceMappingURL=basic-behaviors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-behaviors.d.ts","sourceRoot":"","sources":["basic-behaviors.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"basic-behaviors.d.ts","sourceRoot":"","sources":["basic-behaviors.js"],"names":[],"mappings":"AAgEO,mIATI,eAAe,GAAG;IAC5B,OAAW,EAAE;QACb,OAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,eAAqB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACtC,CAAC;CACH,iBA4DH;AAIM,gDADK,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,iBAW/C;AAGM,0FADK,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAA;CAAE,iBAiCjE;AAqGM,uMAPI,cAAc,GAAG;IAC3B,IAAQ,EAAE,OAAO,cAAc,EAAE,IAAI,CAAC;IACtC,OAAW,EAAE;QACb,6BAAmC,EAAE,OAAO,wDAAwD,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC;KACpK,CAAC;CACH,iBA6DH;AAMM,gOAFI,eAAe,iBAyBzB;AAMM,gGAFI,eAAe,iBAgBzB;AAQM,mHAFI,eAAe,GAAG,cAAc,iBAe1C;AAIM,gIADK,eAAe,GAAG,cAAc,iBAW3C;AAOM,qHAFI,eAAe,iBAWzB;AAcM,+JAFI,eAAe,iBAwBzB;AAQM,kGAFI,cAAc,iBA6BxB;AAIM,uHADK,cAAc,iBAkCzB;AAIM,oIADK,cAAc,iBAiBzB;AASM,0MAJI,eAAe,GAAG;IAC5B,aAAiB,EAAE;QAAE,IAAI,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,SAAS,CAAA;SAAE,CAAA;KAAE,CAAC;CACzD,iBAmCH;AAQM,kTAFI,cAAc,iBAsFxB;AAGD,wDAAwD;AACxD,sCADW,OAAO,eAAe,EAAE,iBAAiB,CA0IlD;uBA5wBY,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;;;;;;;;;;;;;sCASb,sBAAsB"}
|