@thurinlabs/identity-kit 1.3.3 → 1.3.5

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.
@@ -8816,9 +8816,9 @@ var ThurinEmbed = (() => {
8816
8816
  // node_modules/viem/_esm/utils/address/isAddress.js
8817
8817
  function isAddress(address, options) {
8818
8818
  const { strict = true } = options ?? {};
8819
- const cacheKey = `${address}.${strict}`;
8820
- if (isAddressCache.has(cacheKey))
8821
- return isAddressCache.get(cacheKey);
8819
+ const cacheKey2 = `${address}.${strict}`;
8820
+ if (isAddressCache.has(cacheKey2))
8821
+ return isAddressCache.get(cacheKey2);
8822
8822
  const result = (() => {
8823
8823
  if (!addressRegex.test(address))
8824
8824
  return false;
@@ -8828,7 +8828,7 @@ var ThurinEmbed = (() => {
8828
8828
  return checksumAddress(address) === address;
8829
8829
  return true;
8830
8830
  })();
8831
- isAddressCache.set(cacheKey, result);
8831
+ isAddressCache.set(cacheKey2, result);
8832
8832
  return result;
8833
8833
  }
8834
8834
  var addressRegex, isAddressCache;
@@ -23153,6 +23153,53 @@ ${prettyStateOverride(stateOverride)}`;
23153
23153
  }
23154
23154
  }
23155
23155
 
23156
+ // node_modules/viem/_esm/utils/observe.js
23157
+ var listenersCache = /* @__PURE__ */ new Map();
23158
+ var cleanupCache = /* @__PURE__ */ new Map();
23159
+ var callbackCount = 0;
23160
+ function observe(observerId, callbacks, fn2) {
23161
+ const callbackId = ++callbackCount;
23162
+ const getListeners = () => listenersCache.get(observerId) || [];
23163
+ const unsubscribe = () => {
23164
+ const listeners2 = getListeners();
23165
+ listenersCache.set(observerId, listeners2.filter((cb) => cb.id !== callbackId));
23166
+ };
23167
+ const unwatch = () => {
23168
+ const listeners2 = getListeners();
23169
+ if (!listeners2.some((cb) => cb.id === callbackId))
23170
+ return;
23171
+ const cleanup2 = cleanupCache.get(observerId);
23172
+ if (listeners2.length === 1 && cleanup2) {
23173
+ const p2 = cleanup2();
23174
+ if (p2 instanceof Promise)
23175
+ p2.catch(() => {
23176
+ });
23177
+ }
23178
+ unsubscribe();
23179
+ };
23180
+ const listeners = getListeners();
23181
+ listenersCache.set(observerId, [
23182
+ ...listeners,
23183
+ { id: callbackId, fns: callbacks }
23184
+ ]);
23185
+ if (listeners && listeners.length > 0)
23186
+ return unwatch;
23187
+ const emit = {};
23188
+ for (const key in callbacks) {
23189
+ emit[key] = ((...args) => {
23190
+ const listeners2 = getListeners();
23191
+ if (listeners2.length === 0)
23192
+ return;
23193
+ for (const listener of listeners2)
23194
+ listener.fns[key]?.(...args);
23195
+ });
23196
+ }
23197
+ const cleanup = fn2(emit);
23198
+ if (typeof cleanup === "function")
23199
+ cleanupCache.set(observerId, cleanup);
23200
+ return unwatch;
23201
+ }
23202
+
23156
23203
  // node_modules/viem/_esm/utils/wait.js
23157
23204
  async function wait(time) {
23158
23205
  return new Promise((res) => setTimeout(res, time));
@@ -23181,6 +23228,178 @@ ${prettyStateOverride(stateOverride)}`;
23181
23228
  });
23182
23229
  }
23183
23230
 
23231
+ // node_modules/viem/_esm/actions/public/watchBlockNumber.js
23232
+ init_fromHex();
23233
+
23234
+ // node_modules/viem/_esm/utils/poll.js
23235
+ function poll(fn2, { emitOnBegin, initialWaitTime, interval }) {
23236
+ let active = true;
23237
+ const unwatch = () => active = false;
23238
+ const watch = async () => {
23239
+ let data;
23240
+ if (emitOnBegin)
23241
+ data = await fn2({ unpoll: unwatch });
23242
+ const initialWait = await initialWaitTime?.(data) ?? interval;
23243
+ await wait(initialWait);
23244
+ const poll2 = async () => {
23245
+ if (!active)
23246
+ return;
23247
+ await fn2({ unpoll: unwatch });
23248
+ await wait(interval);
23249
+ poll2();
23250
+ };
23251
+ poll2();
23252
+ };
23253
+ watch();
23254
+ return unwatch;
23255
+ }
23256
+
23257
+ // node_modules/viem/_esm/actions/public/watchBlockNumber.js
23258
+ init_stringify();
23259
+
23260
+ // node_modules/viem/_esm/utils/promise/withCache.js
23261
+ var promiseCache = /* @__PURE__ */ new Map();
23262
+ var responseCache = /* @__PURE__ */ new Map();
23263
+ function getCache(cacheKey2) {
23264
+ const buildCache = (cacheKey3, cache) => ({
23265
+ clear: () => cache.delete(cacheKey3),
23266
+ get: () => cache.get(cacheKey3),
23267
+ set: (data) => cache.set(cacheKey3, data)
23268
+ });
23269
+ const promise = buildCache(cacheKey2, promiseCache);
23270
+ const response = buildCache(cacheKey2, responseCache);
23271
+ return {
23272
+ clear: () => {
23273
+ promise.clear();
23274
+ response.clear();
23275
+ },
23276
+ promise,
23277
+ response
23278
+ };
23279
+ }
23280
+ async function withCache(fn2, { cacheKey: cacheKey2, cacheTime = Number.POSITIVE_INFINITY }) {
23281
+ const cache = getCache(cacheKey2);
23282
+ const response = cache.response.get();
23283
+ if (response && cacheTime > 0) {
23284
+ const age = Date.now() - response.created.getTime();
23285
+ if (age < cacheTime)
23286
+ return response.data;
23287
+ }
23288
+ let promise = cache.promise.get();
23289
+ if (!promise) {
23290
+ promise = fn2();
23291
+ cache.promise.set(promise);
23292
+ }
23293
+ try {
23294
+ const data = await promise;
23295
+ cache.response.set({ created: /* @__PURE__ */ new Date(), data });
23296
+ return data;
23297
+ } finally {
23298
+ cache.promise.clear();
23299
+ }
23300
+ }
23301
+
23302
+ // node_modules/viem/_esm/actions/public/getBlockNumber.js
23303
+ var cacheKey = (id) => `blockNumber.${id}`;
23304
+ async function getBlockNumber(client, { cacheTime = client.cacheTime } = {}) {
23305
+ const blockNumberHex = await withCache(() => client.request({
23306
+ method: "eth_blockNumber"
23307
+ }), { cacheKey: cacheKey(client.uid), cacheTime });
23308
+ return BigInt(blockNumberHex);
23309
+ }
23310
+
23311
+ // node_modules/viem/_esm/actions/public/watchBlockNumber.js
23312
+ function watchBlockNumber(client, { emitOnBegin = false, emitMissed = false, onBlockNumber, onError, poll: poll_, pollingInterval = client.pollingInterval }) {
23313
+ const enablePolling = (() => {
23314
+ if (typeof poll_ !== "undefined")
23315
+ return poll_;
23316
+ if (client.transport.type === "webSocket" || client.transport.type === "ipc")
23317
+ return false;
23318
+ if (client.transport.type === "fallback" && (client.transport.transports[0].config.type === "webSocket" || client.transport.transports[0].config.type === "ipc"))
23319
+ return false;
23320
+ return true;
23321
+ })();
23322
+ let prevBlockNumber;
23323
+ const pollBlockNumber = () => {
23324
+ const observerId = stringify([
23325
+ "watchBlockNumber",
23326
+ client.uid,
23327
+ emitOnBegin,
23328
+ emitMissed,
23329
+ pollingInterval
23330
+ ]);
23331
+ return observe(observerId, { onBlockNumber, onError }, (emit) => poll(async () => {
23332
+ try {
23333
+ const blockNumber = await getAction(client, getBlockNumber, "getBlockNumber")({ cacheTime: 0 });
23334
+ if (prevBlockNumber !== void 0) {
23335
+ if (blockNumber === prevBlockNumber)
23336
+ return;
23337
+ if (blockNumber - prevBlockNumber > 1 && emitMissed) {
23338
+ for (let i2 = prevBlockNumber + 1n; i2 < blockNumber; i2++) {
23339
+ emit.onBlockNumber(i2, prevBlockNumber);
23340
+ prevBlockNumber = i2;
23341
+ }
23342
+ }
23343
+ }
23344
+ if (prevBlockNumber === void 0 || blockNumber > prevBlockNumber) {
23345
+ emit.onBlockNumber(blockNumber, prevBlockNumber);
23346
+ prevBlockNumber = blockNumber;
23347
+ }
23348
+ } catch (err) {
23349
+ emit.onError?.(err);
23350
+ }
23351
+ }, {
23352
+ emitOnBegin,
23353
+ interval: pollingInterval
23354
+ }));
23355
+ };
23356
+ const subscribeBlockNumber = () => {
23357
+ const observerId = stringify([
23358
+ "watchBlockNumber",
23359
+ client.uid,
23360
+ emitOnBegin,
23361
+ emitMissed
23362
+ ]);
23363
+ return observe(observerId, { onBlockNumber, onError }, (emit) => {
23364
+ let active = true;
23365
+ let unsubscribe = () => active = false;
23366
+ (async () => {
23367
+ try {
23368
+ const transport = (() => {
23369
+ if (client.transport.type === "fallback") {
23370
+ const transport2 = client.transport.transports.find((transport3) => transport3.config.type === "webSocket" || transport3.config.type === "ipc");
23371
+ if (!transport2)
23372
+ return client.transport;
23373
+ return transport2.value;
23374
+ }
23375
+ return client.transport;
23376
+ })();
23377
+ const { unsubscribe: unsubscribe_ } = await transport.subscribe({
23378
+ params: ["newHeads"],
23379
+ onData(data) {
23380
+ if (!active)
23381
+ return;
23382
+ const blockNumber = hexToBigInt(data.result?.number);
23383
+ emit.onBlockNumber(blockNumber, prevBlockNumber);
23384
+ prevBlockNumber = blockNumber;
23385
+ },
23386
+ onError(error) {
23387
+ emit.onError?.(error);
23388
+ }
23389
+ });
23390
+ unsubscribe = unsubscribe_;
23391
+ if (!active)
23392
+ unsubscribe();
23393
+ } catch (err) {
23394
+ onError?.(err);
23395
+ }
23396
+ })();
23397
+ return () => unsubscribe();
23398
+ });
23399
+ };
23400
+ return enablePolling ? pollBlockNumber() : subscribeBlockNumber();
23401
+ }
23402
+
23184
23403
  // node_modules/viem/_esm/utils/buildRequest.js
23185
23404
  init_base();
23186
23405
  init_request();
@@ -23189,14 +23408,14 @@ ${prettyStateOverride(stateOverride)}`;
23189
23408
 
23190
23409
  // node_modules/viem/_esm/utils/promise/withDedupe.js
23191
23410
  init_lru();
23192
- var promiseCache = /* @__PURE__ */ new LruMap(8192);
23411
+ var promiseCache2 = /* @__PURE__ */ new LruMap(8192);
23193
23412
  function withDedupe(fn2, { enabled = true, id }) {
23194
23413
  if (!enabled || !id)
23195
23414
  return fn2();
23196
- if (promiseCache.get(id))
23197
- return promiseCache.get(id);
23198
- const promise = fn2().finally(() => promiseCache.delete(id));
23199
- promiseCache.set(id, promise);
23415
+ if (promiseCache2.get(id))
23416
+ return promiseCache2.get(id);
23417
+ const promise = fn2().finally(() => promiseCache2.delete(id));
23418
+ promiseCache2.set(id, promise);
23200
23419
  return promise;
23201
23420
  }
23202
23421
 
@@ -24752,7 +24971,7 @@ ${prettyStateOverride(stateOverride)}`;
24752
24971
  }
24753
24972
 
24754
24973
  // src/provider.tsx
24755
- var import_react7 = __toESM(require_react(), 1);
24974
+ var import_react8 = __toESM(require_react(), 1);
24756
24975
 
24757
24976
  // node_modules/wagmi/dist/esm/context.js
24758
24977
  var import_react2 = __toESM(require_react(), 1);
@@ -25501,6 +25720,14 @@ ${prettyStateOverride(stateOverride)}`;
25501
25720
  }
25502
25721
  }
25503
25722
 
25723
+ // node_modules/@wagmi/core/dist/esm/actions/getBlockNumber.js
25724
+ function getBlockNumber2(config, parameters = {}) {
25725
+ const { chainId, ...rest } = parameters;
25726
+ const client = config.getClient({ chainId });
25727
+ const action = getAction2(client, getBlockNumber, "getBlockNumber");
25728
+ return action(rest);
25729
+ }
25730
+
25504
25731
  // node_modules/@wagmi/core/dist/esm/actions/getChainId.js
25505
25732
  function getChainId(config) {
25506
25733
  return config.state.chainId;
@@ -25629,6 +25856,28 @@ ${prettyStateOverride(stateOverride)}`;
25629
25856
  }
25630
25857
  };
25631
25858
 
25859
+ // node_modules/@wagmi/core/dist/esm/actions/watchBlockNumber.js
25860
+ function watchBlockNumber2(config, parameters) {
25861
+ const { syncConnectedChain = config._internal.syncConnectedChain, ...rest } = parameters;
25862
+ let unwatch;
25863
+ const listener = (chainId) => {
25864
+ if (unwatch)
25865
+ unwatch();
25866
+ const client = config.getClient({ chainId });
25867
+ const action = getAction2(client, watchBlockNumber, "watchBlockNumber");
25868
+ unwatch = action(rest);
25869
+ return unwatch;
25870
+ };
25871
+ const unlisten = listener(parameters.chainId);
25872
+ let unsubscribe;
25873
+ if (syncConnectedChain && !parameters.chainId)
25874
+ unsubscribe = config.subscribe(({ chainId }) => chainId, async (chainId) => listener(chainId));
25875
+ return () => {
25876
+ unlisten?.();
25877
+ unsubscribe?.();
25878
+ };
25879
+ }
25880
+
25632
25881
  // node_modules/@wagmi/core/dist/esm/actions/watchChainId.js
25633
25882
  function watchChainId(config, parameters) {
25634
25883
  const { onChange } = parameters;
@@ -29619,6 +29868,22 @@ ${prettyStateOverride(stateOverride)}`;
29619
29868
  return rest;
29620
29869
  }
29621
29870
 
29871
+ // node_modules/@wagmi/core/dist/esm/query/getBlockNumber.js
29872
+ function getBlockNumberQueryOptions(config, options = {}) {
29873
+ return {
29874
+ gcTime: 0,
29875
+ async queryFn({ queryKey }) {
29876
+ const { scopeKey: _2, ...parameters } = queryKey[1];
29877
+ const blockNumber = await getBlockNumber2(config, parameters);
29878
+ return blockNumber ?? null;
29879
+ },
29880
+ queryKey: getBlockNumberQueryKey(options)
29881
+ };
29882
+ }
29883
+ function getBlockNumberQueryKey(options = {}) {
29884
+ return ["blockNumber", filterQueryOptions(options)];
29885
+ }
29886
+
29622
29887
  // node_modules/@wagmi/core/dist/esm/query/getEnsAddress.js
29623
29888
  function getEnsAddressQueryOptions(config, options = {}) {
29624
29889
  return {
@@ -29944,6 +30209,63 @@ ${prettyStateOverride(stateOverride)}`;
29944
30209
  return (0, import_react4.useSyncExternalStore)((onChange) => watchChainId(config, { onChange }), () => getChainId(config), () => getChainId(config));
29945
30210
  }
29946
30211
 
30212
+ // node_modules/wagmi/dist/esm/hooks/useWatchBlockNumber.js
30213
+ var import_react5 = __toESM(require_react(), 1);
30214
+ function useWatchBlockNumber(parameters = {}) {
30215
+ const { enabled = true, onBlockNumber, config: _2, ...rest } = parameters;
30216
+ const config = useConfig(parameters);
30217
+ const configChainId = useChainId({ config });
30218
+ const chainId = parameters.chainId ?? configChainId;
30219
+ (0, import_react5.useEffect)(() => {
30220
+ if (!enabled)
30221
+ return;
30222
+ if (!onBlockNumber)
30223
+ return;
30224
+ return watchBlockNumber2(config, {
30225
+ ...rest,
30226
+ chainId,
30227
+ onBlockNumber
30228
+ });
30229
+ }, [
30230
+ chainId,
30231
+ config,
30232
+ enabled,
30233
+ onBlockNumber,
30234
+ ///
30235
+ rest.onError,
30236
+ rest.emitMissed,
30237
+ rest.emitOnBegin,
30238
+ rest.poll,
30239
+ rest.pollingInterval,
30240
+ rest.syncConnectedChain
30241
+ ]);
30242
+ }
30243
+
30244
+ // node_modules/wagmi/dist/esm/hooks/useBlockNumber.js
30245
+ function useBlockNumber(parameters = {}) {
30246
+ const { query = {}, watch } = parameters;
30247
+ const config = useConfig(parameters);
30248
+ const queryClient = useQueryClient();
30249
+ const configChainId = useChainId({ config });
30250
+ const chainId = parameters.chainId ?? configChainId;
30251
+ const options = getBlockNumberQueryOptions(config, {
30252
+ ...parameters,
30253
+ chainId
30254
+ });
30255
+ useWatchBlockNumber({
30256
+ ...{
30257
+ config: parameters.config,
30258
+ chainId: parameters.chainId,
30259
+ ...typeof watch === "object" ? watch : {}
30260
+ },
30261
+ enabled: Boolean((query.enabled ?? true) && (typeof watch === "object" ? watch.enabled : watch)),
30262
+ onBlockNumber(blockNumber) {
30263
+ queryClient.setQueryData(options.queryKey, blockNumber);
30264
+ }
30265
+ });
30266
+ return useQuery2({ ...query, ...options });
30267
+ }
30268
+
29947
30269
  // node_modules/wagmi/dist/esm/hooks/useEnsAddress.js
29948
30270
  function useEnsAddress(parameters = {}) {
29949
30271
  const { name, query = {} } = parameters;
@@ -30000,12 +30322,12 @@ ${prettyStateOverride(stateOverride)}`;
30000
30322
  }
30001
30323
 
30002
30324
  // node_modules/wagmi/dist/esm/hooks/useReadContracts.js
30003
- var import_react5 = __toESM(require_react(), 1);
30325
+ var import_react6 = __toESM(require_react(), 1);
30004
30326
  function useReadContracts(parameters = {}) {
30005
30327
  const { contracts = [], query = {} } = parameters;
30006
30328
  const config = useConfig(parameters);
30007
30329
  const chainId = useChainId({ config });
30008
- const contractsChainId = (0, import_react5.useMemo)(() => {
30330
+ const contractsChainId = (0, import_react6.useMemo)(() => {
30009
30331
  if (contracts.length === 0)
30010
30332
  return void 0;
30011
30333
  const firstChainId = contracts[0].chainId;
@@ -30014,7 +30336,7 @@ ${prettyStateOverride(stateOverride)}`;
30014
30336
  return void 0;
30015
30337
  }, [contracts]);
30016
30338
  const options = readContractsQueryOptions(config, { ...parameters, chainId: contractsChainId ?? chainId });
30017
- const enabled = (0, import_react5.useMemo)(() => {
30339
+ const enabled = (0, import_react6.useMemo)(() => {
30018
30340
  let isContractsValid = false;
30019
30341
  for (const contract of contracts) {
30020
30342
  const { abi, address, functionName } = contract;
@@ -30035,14 +30357,14 @@ ${prettyStateOverride(stateOverride)}`;
30035
30357
  }
30036
30358
 
30037
30359
  // src/context.ts
30038
- var import_react6 = __toESM(require_react(), 1);
30360
+ var import_react7 = __toESM(require_react(), 1);
30039
30361
  var defaultConfig = {
30040
30362
  baseUrl: "https://thurin.id",
30041
30363
  network: "mainnet"
30042
30364
  };
30043
- var IdentityKitContext = (0, import_react6.createContext)(defaultConfig);
30365
+ var IdentityKitContext = (0, import_react7.createContext)(defaultConfig);
30044
30366
  function useIdentityKitConfig() {
30045
- return (0, import_react6.useContext)(IdentityKitContext);
30367
+ return (0, import_react7.useContext)(IdentityKitContext);
30046
30368
  }
30047
30369
 
30048
30370
  // src/provider.tsx
@@ -30068,7 +30390,7 @@ ${prettyStateOverride(stateOverride)}`;
30068
30390
  hasWagmi = true;
30069
30391
  } catch {
30070
30392
  }
30071
- const wagmiConfig = (0, import_react7.useMemo)(() => createDefaultWagmiConfig(rpcUrl, network), [rpcUrl, network]);
30393
+ const wagmiConfig = (0, import_react8.useMemo)(() => createDefaultWagmiConfig(rpcUrl, network), [rpcUrl, network]);
30072
30394
  if (hasWagmi) {
30073
30395
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
30074
30396
  }
@@ -30082,13 +30404,29 @@ ${prettyStateOverride(stateOverride)}`;
30082
30404
  network = "mainnet",
30083
30405
  registryAddress
30084
30406
  }) {
30085
- const config = (0, import_react7.useMemo)(
30407
+ const config = (0, import_react8.useMemo)(
30086
30408
  () => ({ rpcUrl, neynarApiKey, baseUrl, network, registryAddress }),
30087
30409
  [rpcUrl, neynarApiKey, baseUrl, network, registryAddress]
30088
30410
  );
30089
30411
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(IdentityKitContext.Provider, { value: config, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WagmiDetector, { rpcUrl, network, children }) });
30090
30412
  }
30091
30413
 
30414
+ // src/core/identityError.ts
30415
+ function needsRpcProbe(s2) {
30416
+ return s2.ensEmpty || s2.ensFailed || s2.claimsFailed;
30417
+ }
30418
+ function identityErrorKind(s2) {
30419
+ if (!needsRpcProbe(s2) || s2.rpcAnswered === void 0) return null;
30420
+ if (!s2.rpcAnswered) return "rpc";
30421
+ if (s2.ensEmpty && !s2.ensFailed) return "not-found";
30422
+ return "read";
30423
+ }
30424
+ var IDENTITY_ERROR_TEXT = {
30425
+ rpc: "Couldn't reach the RPC, so nothing here is known yet.",
30426
+ "not-found": "No address for this name.",
30427
+ read: "Couldn't read the registry."
30428
+ };
30429
+
30092
30430
  // node_modules/@adraffy/ens-normalize/dist/index.mjs
30093
30431
  var COMPRESSED$1 = "AEkVMQnvDV0B0wKWAQYBQgDpATQAoQDcAIUApwBsAOMAcACTAEUAigBRAHkAPgA/ACwANwAoAGIAHgAvACsAJQAXAC8AHAAhACIALwAVACsAEQAiAAsAGwARABgAFwA7ACoAKwAsADQAFgAtABIAHAAhAA4AHQAdABUAFgAZAA0ADgAXABAAGQAUABIEtAYQASIUOjfDBdMAsQCuPwFnAKUBA10jAK5/Ly8vLwE/pwUJ6/0HPwbkMQVXBVgAPSs5APa2EQbIwQuUCkEDyJ4zAsUKLwKOoQKG2D+Ob4kCxcsCg/IBH98JAPKtAUECLY0KP48A4wDiChUAF9S5yAwLPZ0EG3cA/QI5GL0P6wkGKekFBIFnDRsHLQCrAGmR76WcfwBbBpMjBukAGwA7DJMAWxVbqft7uycM2yDPCLspA7EUOwD3LWujAKF9GAAXBCXXFgEdALkZzQT6CSBMNwmXCYgeG1ZZTOODQgATAAwAFQAOa1QAIQAOAEfuFdg98zlYypXmLgoQHV9NWD3sABMADAAVAA5rIFxAlwDD6wAbADkMxQAbFVup+3EB224cHQVbBeIC0J8CxLAKTBykZRRzGm1M9QC7DWcC4QALLTSJF8mRAoF7ARMbAL0NZwLhAAstAUhQJZFMCgMt+wUyCddpF60B10MASSsSdwIxFiEC6ye5N2sAOeEB9SUAxw7LtQEbY4EAsQUABQCK00kFG8MfBxcAqCfRAaErLQObAGcBChk+7Td0BBgXAKoBxwIhANMrEnM681CwBZA6dyc1SAX6JwVZBVivuAVpO11CEjpYQZd7k2ZfofgLEwPFByXxdyMEo0sCU1MCdRurJwGPo6U1WwNFFwSDYQkA0QarPy8jBykCOV0AawFhH3EAgx0ZAJUBSbcAJ2kXAa/FAzctIUNTAW9ZBmUCZQDxSRcDKQEFAElBAKsAXQBzACu1Bgfz7xmNfwAJIQApALMbRwHRAdsHCzGXeIHoAAoAEQA0AD0AODN3edPAEF8QXAFNCUxsOhULAqwPpgvlERUM0SrL09gANKkH6wNTB+sDUwNTB+sH6wNTB+sDUwNTA1MDUxwK8BrTwBBfD0gEbQWOBYsE1giDJkkRgQcoCNJUDXQeHEcDRQD8IyVJHDuTMwslQkwMTQMH/DZCbKd9OANHMatU9ZCiA8syTzlsAR5xEqAAKg9zHDW1Tn56R3GgCktPrrV/SWJOZwK+Oqg/+AohCZNvu3dOBj0QFyehEPMMLwGxATcN6UvUBO0GNwTFH3kZFQ/JlZgIoS3ZDOkm3y6dgFYj8Sp/BelL8DzZC0lRZA9VC2EJ3zpfgUoDHQEJIocK2Q01CGkQ7wrFZw3hEUEHNQPRSZYAoQb9Cw0dMRWxJgxiqAsFOXMG9xryC4smqxMlevgFzxodBkkBJRr7AMsu44WsWi1cGE9bBf8LISPDFKRQHA0hQLN4RBoXBxElpQKNQ2xKg1EyHo8h8jw5DWIuD1F4B/E8ARlLC308mkanRQoRzj6JPUQiRUwoBDF7LCsnhwnLD4EMtXxuAVUJHQmtDG0TLRETN8EINQcVKZcgJxEIHUaRYJYE85sD7xPNAwcFOwk9Bw8DsRwpEyoVJQUJgSDTAu820S6vAotWfAETBccPIR/bEExH3A7lCJcCYQN/JecAKRUdABMilwg/XwBbj9RTAS7HCMNqaCNwA2MU410RbweNDlMHoxwvFbsc3XDEXgeGBCifqwlXAXEJlQFbBN8IBTVXjJwgPWdPi1QYlyBdQTtd+AItDGEVm0S5h3QChw9nEhcBMQFvBzUM/QJzEekRZxCRCOeGADWxM/Q6IQRLIX8gDQojA0tsygsjJvUM9GUBnxJeAwg0OXfqZ6dgsiAX+QcVMsFBXCHtC45PyQyYGr0YPlQqGeAHuwPvGu8n5kFTBfsDnw86STPqBLkLZQiHCTsARQ6fEwfTGGYKbYzMAS2HAbOVA1ONfwJriwYzBwcAYweDBXXhABkCowifAAEAywNTADUCqQeZABUAgT0BOQMjKwEd4QKLA48ILccBkSsB7yUEF78MEQDzM25GAsOtAoBmZp4F2VQCigJFMQFJIQQBSkNNA6tt3QDXAEcGD9tDARGnRscW3z8B22snAMMA9wABMQcBPQHJAe9pALMBWwstCZ6vsQFJ5SUAfwARZwHTAoUA2QAxAHvtAU8ASQVV9QXPAktFAQ0tFCdTXQG3AxsBLwEJAHUGx4mhxQMbBGkHzwIQFxXdAu8qB7EDItsTyULBAr3aUQAyEgo0CrUKtB9f81wvAi1uPUwACh+kPsM/SgVNO087VDtPO1Q7TztUO087VDtPO1QDk7veu94KaF9BYecMog3QRMQ6RRPXYE1gLhPELbMUvRXKJVIZORq4JwEl4FUFDwAtz2YsCCg0cRe4ADspZIM9Y4IeLApHHONTjVT0LRcArUueM6sNqBsRRDwFQ3XpYiYWCgoeAmR9AmI+V0mrVzccAqHzAmiUAmYFAp+AOBcHAmY3AmYiBGoEewN/DwN+jjkCOXMTOX46Hx8CbBkCMjI4BgJtwwJtquuGL2NBJwFjANoA3QBGAQeUDIkA+ge+AAmxAncrAnaeOwJ5Rz8CeLYZWNdFqkbTAnw7AnrEAn0FAnzsBVUFHEf8SHlfIAAnEUlUSlcRE0rIAtD9AtDISyMDiEsDh+JEwZEuAvKdXP8DA6pLykwpIctNSE2rAos7AorUvRcDGT9jAbMCjjMCjlg8k30CjtUCjlh0UbBTMQZS0FSBApP3ApMIAOUAGFUaVatVzAIsFymRgjLdeGJFNzUCl5sC765YHaQAVSEClosClniYAKVZqFoFfUkANwKWsQKWSlxAXM0CmccCmWBcxl0DFQKclzm+OpkCnBICn5cCnrSGABkLLSYLAp3tAp6OALE5YTBh6wKezwKgagGlAp6bGwKeSqFjxGQjIScCJ6sCJnoCoPcCoEgCotkCocACpisCpcoCp/sAeQKn7mh4aK3/RWoYas0CrN8CrKoCrWMCrP4CVxkCVdgCsd3TAx9KbJMCsrkJArLkE2zcbV9tRFsDJckCtlg3O26MAylBArhaArlDEQK5JnNwMnDdAr0VArvWcJIDMg0CvoRx/gMzbQK+FnMec0sCw8cCwwBzfnRHMUF03AM8owM8lgM9uwLFeALGQwLGDIUCyGVNAshAAslLAskqAmSZAt3OeHVdeKp5IUvMAxifZv4CYfAZ75Ugewdejl63DQLPZwLPaCtHT87vD5sAwqkCz28BJeYDTg5+RwEC3CMC24YC0ksDUlgDU1sA/QNViICFO8cS6VxBghiCz4LKg4kC2sMC2dqEDIRFpzgDhqEAKwNkCoZtVfUAUQLfYQLetG9zAuIr7RAB8ywjAfSXAfLOgwLr7wLpbHUC6vUC6uAA9UMBtQLuhQLrmJamlv8C7jsDhdyYdXDccZ0C8v8AZQOOEpmPAvcPA5FqA5KDAveUAvnVAvhimhiap7czmxoDnX8C/vYBFwA1nxifrwMFiQOmZgOm1QDNwQMGZqGEogEFAwxFAQsBGwdpBl21YwEAtwRnuw2HHq8JABNxNQAfAy8SSQOFewFfIx0AjOsAHQDmnwObjQizBhufwQCnBRG76R09PhZ4BWg3PkArQiFCtF9xEV+8AJbFBTIAkEwZm7k7JmAyEbrPDi8YxhiJyfYFVwVYBVcFWAVjBVgFVwVYBVcFWAVXBVgFVwVYRhUI14VnAgICCmRe6SsEyQOxBi+7uwC7BKe7AOdAKRayBUY+aT5wQj9Ctl91N1/oAFgRM6sAjP7Ma8v8pudGej0mIwQrFic2NX5t32rB8RnCLGkBa9duMBcFXwVqycHJuAjPSVsAAAAKfF59i74AMz+BAAMW0QblrSMFAIzDCwMBDQDlZR09JB9KQrFCvEE4I18nYDYnOCMJwT0KRD9DPng+gT5wPnECiUK8SUI7X8tOT2pNCixrVC9qC24fX+AzOhsJZ5sKYiMrPB0mQqtCvCvMAcv8X8kOHy4JCAkifp3fajotShfJq8msCWXBy8wKYEFfD+UQoxEAk40dRUIlG6ltOc44CjM/Qz5wQj8cBwodTEdsWywtWuG8Egp97R0rQj8cXQhKCQ4zVENCNwQ7Q5wsCoEbLUI/G/UIUyIjGDAxAAWPYfBeCnFkyWALYC0jbkNgGTkCGx5gswYCaxBlTmBNEQFk52AVYJVgfWCzYEtgkWgWFwa1DtxVqbxaC0MWqwG7K83BAh8VABwDHgF5AmwvMJVSgAGKCrhHGgDkI3SOCsoNpk3qAZsCh5xPBUBfAPf3BwA0FlcMC6UMJB+6r0eAgQw0ABUTnyuCCHoC0gtLZREbANhOBnUECh5aADEAtritAJQnCxZvqyQ4nxkBWwGGCfwD2e0PBqoGSga5AB3LValaCbthE4kLLT8OuwG7ASICR1ooKCggHh8hLBImBiEMjQBUAm5XkEmVAW4fD3FHAdN1D85RIBmpsE3qBxEFTF8A9/cHAHoGJGwKKwulODAtx69WDQsAX7wLAGNAlQh6AOpN7yIbvwAxALa4rQCUJy07Ds4CkBh7ULtYyHRyjsOlmw/ZFUkb7AEpEFwSBh/lAccJOhCTBQ8rDDYLABEAs+AiAQIApADhAJiCCrJrOS8AFABbG8YubHYqDcEQAjskHNPhHB4LG30CewTBCqrxbAAnLQ6mLs6hHAe7CQAQOg+7GkcczaF3HgE9Kl8cLs4RGQB9q9ocAuugCAHCAULz5B9lAb4Jtwz6CDwKPgAFwAs9AksNuwi8DTwKvAk8DrsFmAEbawouzqEqD4sa4QHDAREWOwCgCzsLuxC7BBiqe9wAO2sMPAACpgm8BRvQ9QUBvgH6bsoGewG7D00RErwBAQDqAQAAdBVbBhbLFPxvF7sYOxjbL7ZtvgNIqLsAB7sALrsC6w5WAAq7BAAeuwJVICp/FTwVuwG+J+QAsloBvSjgo7vIAAFbAAG7AAJbAALjAAg7AA67AgAbu6VbDr/EAPQAaPuoOwMBu5UnSwDn3Rm7CBp7CKEFCv9wAN+7p7sau6OLeXIG+6mbgwASuwYbCwG8AACGAG27BgALu6c7ARo7ugihnMoBuwvtB8CpOwDhewG/AADlABW7AAb7AAm7AGmLABq7GLuOaRX7AA5rAC5LHgAGuwAXuwghAA1KAcIAt68mAcAAALQADpsAHBsBv/7hCqEABcYLFRXbAAebAEK7AQIAabsAC3sAHbsACLsJoQAFygBunxnVAJEIIQAFygABOwAH2wAdmwghAAaaAAl7ABsrAG0bAOa7gAAIWwAUuwkhAAbKAOOLAAk7C6EOxPtfAAc7AG6cQEgARwADOwAJrQM3AAcbABl7Abv/Aab7AAobAAo7AAn7p+sGuwAJGwADCwAQOwAIPAAUOwARawAPiwAN6wANuwAZCwYWGwAVOwBumxm7ALobLgATOwMAaSsKAOFLAAI7AARSABd7BRsABtAAGLsAC/sAX7sAa/sA5IsBuwAXdgG8AAFyC6EABUoAbXYAB/sA5XsAHGseAXsoUgA5RQD+Bw0McgAoKnABpAUIXgG8XiMMCQdvS2xfKokfPBRiLTYDoQq0AdgAFgLRA24BdnJHUhQhA08CFT4BLAYDc0a8e1J6QAApADEB+wBTCtsAe5AsASsAduUNETJGAUoAVwUAAVABB4rMAHg7BCClAFoA1hUAlWg3H4sAzWuxAM/UFgjCdXMbGFYdCdEBiJCrIlNTTUgSPMKJ+QB/HDdAKSvgEZdPAHIBKSwwKUIZDwMwVQT3xe4AS2XcAGoCcQI/EXo6x3guNdUGBQAQGx0KCAwqBB8dKU5TTgi5ugAKEs0AJgABGgCGAIkAjjUA7gC0AOAAnTwAuwCrAKYAoQDyAJ8A0wCcAOsBDAEHAMAAeQBaAMsAzQEHANcA6wCIAKIBNQDjANgA1QMBByoz1NTU1LbA3M3QzkMyFwFNAVcvRwFVAWQBYwFWAUdLQ0VoDQFOFQcIAzI2DAcAIg0kJiksODo6PT09Pj8OQB5RUVFRU1NSUylUVVdWVhxdYWFgYmEjZmhwb3JycnJycnR0dHR0dHR0dHR0dnZ3dnVbAEDsAEUAlgB0AC4AYvIAigBTAFMAMwJz6QCH//LyAGAAj+wAmwBLAF4AYPn5qgCBAIEAZQBSAK0AHgCyAH8CPAI/APgA4wD6APoA5AD7AOUA5QDkAOIAKQJ3AU0BPAE6AVABOgE6AToBNQE0ATQBNAEYAVQPACsIAABNFwoWAxUWDgCKAJIAogBLAGQYAi0AcABpAJEDEgMkKgMeQT5HKQCLAksAwwJTAqAAugKSApICkgKSApICkgKHApICkgKSApICkgKSApECkQKUApwCkwKSApICkAKQApACkAKOApECcQHQApMCmwKSApICkRZ5CwD6BQOnAl0CNhcBUBA1At4RCisTAUo3E02RAXekPAFlWQD/Az1HAQAAkykeGI9qAClgAGkALgCJA5TMi/CuhFoFuisOwhEBndV0KgsEIzFsATNabAGyAN5+gH9+gH6BgoJ+g4aEfoWIhoCHgoiCiX6Kfot+jIqNfo5+j4KQfpF+kn6TfpSDlYiWgpd+2gLabOEC2GwAgmwkbKAAg2xsBEkERgRIBEsESQRPBEwERwRNBE8ETgRKBEwETwCWZmwAowOIbAC0ZgEFbADJUWxsAM9sAgxsAPZabAD2ARkA9gD0APQA9QD0A31ebNSEI2XAAPYA9AD0APUA9BxsbACJWmwA9gCJARkA9gCJAL4A6AAIAPYAiQN9XmzUhCNlwBxsAPdabAEZAPYA9gD0APQA9QD0APcA9AD0APUA9AN9XmzUhCNlwBxsbACJWmwBGQD2AIkA9gCJAu0A9gCJAL4CNwD3AIkDfV5s1IQjZcAcbAJDATZsAkoBOWwCS8FsbAJXbGwDnwLtA58DnwOgA6ADoAOg1IQjZcAGA31ebBxsbACJWmwBGQOfAIkDnwCJAu0DnwCJAL4CNwOfAInUhCNlwAYDfV5sHGwEPmwAiQQ/AIkGjTFtIDFs1m4DKGwDrAJsbABVWv4VMgJsbACJAmwAVAEAul5sAmxebGwAiV5sAmxebD3YAEls1gJsbEbCxxP/x5BApA0KYFA89AsjTx97EHmJQPyocItC2JnNFRCEnFU6SFTDoI0PxeRNRoNRWkpzVnWW8pTagkNmgf+jGupqZ3eu50LAFnc+OzfJwdub1AdpOy76VnijWNR/CMEevikQkFyQuLuPajxWi9chqOoMJ7qpCN4sx3LJG4Myu8kD68wC6+iAwt+pU1JEeY13rpCVkXSZfinVKn4xZpxsI3Lp8bJLrJ9ujkrIalMRBAcv/GSKEtowzcEn5XmJw2BagB8V2UWJoJHZ14SXhM7p0XeGFOuw6mlvyq99WYp5XxrO6ru9nn4RHcOkJ7hx5UqWtman7yVMLzYXQefQRUdIY70RYQE8+aAzCNSGQkXiHfnHYRMi+xczKDdZLk3AV1gzxkkSHLjBwuq8shIJ+/RAbqjqQbugFhe0rqklu432EERkM5k9y1DXzds46oLqKAx6OhPT2WiqEfhaITn7OF9Y694AmKmUvbpWp0xJqDaf3jeNJXnK6NpnGcFOmbclbARC+5+5U52ufw5b0Hh+2LrrNimvZe4eYmApRsZnJE310SqB+1xB6rSJfnV1f2D0awB18Oc0sXAFqIlgHgWiaZGdvP5CJUSsCTCQUC335+iSkwPlLJJ5lwjTSn9Lw22NbK1Tu8w+bUpHtDRDPho7Gun8aw2Jzu9i+N0Ot/kPMbLAb/rUQ82kfpk85qLDkfxLl39QPDngo72GYh/Xigbpcm1pA23D2ywt3D8GgMOao040wDqkHxOEx0OhC+ZmHiIdjK7yRbfJD2ouZbAedhD3p7s8WDmCJfNforgDYPGAXSI08fTjPZ5B37lc5VXGzc1vJmibDwBNVzXuaUzg7N5H4BxqjhJ+kz9HLUJys7bpBDYAPvbut13AwJCWd059tS8YTYgC8HwrkewBfa1LSSpmMr9uR2EekTiAMH+Mx4AGzgbquccwBDlLmRhgXL/YiLPCEb6d2k5qJ6o800qddABkpqt7NG+sc2uvHZwZs57W1AHTFM1KkMShasADAh2FvzbzJOzVDMS3ZlT2BSFKdnkZFB6JyqJbhm6XANis9TrtzJdlPVp+rl8v3nIke6Jou7m2TKu53Vounupgkz2LzrQPhhatLIG7rfF/gUKWp15X3LKt+ZvuCDSqPUigF9yJntimC1HJR7Yj/dUrLAXWrT+1tnwPJJLGKAlQ5VeNDWRKCTt2vz3rJuo4+gIt75/Mkfl/gSZblZ9r/SEeeosZXneli/xNh1WVCvkRt2RnyyjtMkMqhzXh1PVOCbILqv0r7rGYm0CHIyKdhHL90cl9E1I6eEtQTCt6RXj8M0HHrHCHLVRpNM6WIbT5BCMGVnL0o5895qSRbCJz+5I8PGMhAN/Xrj4BgIdlKqlHtBHqTJwmK169toZ2IWxNzrAbIG7zh85Q/LG2A4yBcaBel52zdunokB0lv3A7kXnTI7M6ZnfZ7nwuj5lkGhqSpW+w5CI/FmRlplBEbnZy1ZxS3DL8rf1YWhO5XivWZBSRh1gFsjjyj3qRG1cm/6ors7WsEif6WRxns1MKDZa6KrbfMQ/swIb+2nb0tqxHeii6FcgVeAjE/Xwac1owx04dJKG8R5YQgHNnEfHf0qb8WOnU0eQSjazq+IK7cSuCqYzPEUB/x+QgGZqM3dBoYvNvZVOHDkbgdilWdagqO5bkybXfLpyMPuGq8mvAAEZGbR6RwXGlW9ErOWTfnjfx6dXFJqBj0OBSGFz4lWQasNOmVJeN4SFWSLfOGB/7ehV5YuoNNROHZEG9ElVuMnqbDMMuDleOt/cN/gsWxGw128mwU8/HxkOKqdTZnI7dHka67WCTf/FmBrxpNCaKJ1GxBTCSS7MNfhNj8S4Gtotg6Z3AM9cAeVROnppUMaiV5jjudLnNqoVrKO1/FijLlAc74kxydxKX1RQuMqHR63eecYr5o6MJ+B78VsLlCrpelWh6GOrCOBIoQmIcdpJL1pwE2zzZqBkecGTdK8KMOB6r1eNRURyrz6M899TZaoS/vNOxHf+5gORU+OyYIcIW6diP25GHF6u8TNjuL/GJzCnLLXd01KrsjRa51v4+O/VIAWXESJxfxWjv628J+cWUQpoD+Yytzs3jSMRJ23/XT+vUdtUMLDQq1vnIoeg/GjWh88MT6k9dRqDaQ+vodilFgvjuNw5pJpId9mfwyYeLCGb3BmHXdfQfhfPRQaupe/f8TG4Bk3eDKlYBaEK3kZYNN2Sdxz47m/vYBxvIOKtnqplB1pebzuXmAr/MuzQCknKe653dzaWQQ7MUhWYWvzIZwLe1v0rXxImLaz+AkAu+sYikhouNF3EW6w4crZ6MuUiDbIAx8XhAfegcvW6x9BPb3/sCxGWu9YyatqExB+TSm69qIkI9IwhjrcnzME+jWBx4mNQm5WwLzUjSyY4FZ0aMF5YFlXUD4hL4XfOeYv5rDe2s2D/Cn+28fZ9UCnOQvXFMnQqfc0G+ZqOWWD9l/liqUPaNQzZjxCHpUAD8Rcc90MniQ02ugHWsUupFUvhC9usY7zNPt5F2jO7qgzhafsQSd50jgLrC6Qx6bpHbXR3WNAu1BzGmwbz+ebGmwTjdy006Y6zipP7n/OJlvSmbq+SY+nefAVKK6EBMPbce5n3IdRI8+vbxCpN53rw3TvgNds1SuMiuLGxt89L71mxPDeanGhyHvOjmO56tnVpoHalQnL6TqNuqKsHjHCIKB4pCgj4WyYPvRvYvqi5EMr7lN3MotPR/KH7JUD1lZbU0QzfbrEBJnuQiVAyAC9vwXWp2TRU1/0aapyAH2cbglEHVAdl+1rb1u147uV0td1eNoQZsqHrIMIYVPXtLk2TIU3cJE08PjoYNDpfF/IcJnYQHl6nsplczX3Rgah4NbJJHl//5scUufqsSd//kbIS406ZWoMP//+jhGUswX/5nVNz/jAj9KmXPtAmMiK+khhbn1w/mELzZMT/WxcW//y/jsHaOM/61oAW/CjYhJtY622/TtMYuP7bilBvbiT3vB9n8IcFPnwM78H0KfhYDRdY5PhWJ4jWRQzB+HT5NVZV56LG82hcQms+jOTT/c9Y9sx5rPi1/wB7f/+c5UfUCKk3iwwCuywUc2MGnAwsXf1E5hoI55x1Q/Qby+sWH8NRjavZ8VaDsdi1NUVhH86BJHX1yaFt1w1OYeL5LVmdN+5Q+KuTvXEPDzUCg6xp0HhsUhTWSe7MZMM/6rsTUb0/nbUE3YQlGGt48kT1/6cnf6yHnvHtQx9EosOXN077yyEq/jE3YTiG/5SEJmXFeocJJ1EAd6vKeK6VEdJLOZ1km/EwOnZWCQpzCLKPHxrfh4yJhGq//2dos2E/3+MOcdW5EsgIdmTQUQetzRy5fQHhDBl37XbWzsqO/cASEDjyst1/8NEROqVAxWnddQV+umJ8IrKVgKvGaTc0GsQ4s8h0Osql5QKwlddPDjJhKInyWqYUKmmlIts+FIcXZ6yM6cljbsjUG2ksSOkuIw4sYHffRNgBOLApvD6XrR6Rt0rV2Uf8IpnIUVnb9Twt91QjAaD/dStSWDxg7aYY+VXIgnuowYdOkjywa2hlgrnI6PjaU3e3UjQ5Yk5mdIJGyHnv3/P+1EkMav1yFyF+FeJE/RXnWBw+Nh0aOo6TGlKX7d+dkP9+brvr79SdtXJtcD/aXBGiMNfG6/NQniQHYQlK78FEHDqOh+bDI0o+2Ub0h53EL/vlzjrBczVEZz2bOtvIL+DIzDkk9nCWt7tlqsq3l9JMtJk3r5HG2iJ9b/X11TG6wwMAjHLQ2oasaMEsydh88QPvI+hmqIHhvalpKoKOueJR0eZ9J8G2alNOIOy98jwvbc87Ewk9d+5G/tUijTmlbjFlDKXV05HalKxaRTrucc73On7yzAPS6f2v4ogiaWyWeV73dv/MsQT5HjRrsYV9dLAcI3T+zC2qEVINyNpEhoKV+xVSuWtT4AhBfpnZ7unIM+HX3msI0HiI+P+z2PFgkjGi5PqEbG/wNIWeRUjPtDEgbbubN+I4JaDLrW9borRBDob7ZFx+JdKeFVUKVeWqb/c88Ol7DhM0suLtuEd8tkDSMTD3DFx8UphPINHMHi51hAPttXL4Ektt/lKEUG/R4qZKohHjVpAcPIMiHyWr6xR8/EWnNJvBFET76yCdk5er7ADB/1bgoImhpSiZ/omZjPKPCEeZsOwvPmXL+1vlJNeGO3TzySmGA1X6e58gLrazDM71jywM1XL8zKHN6G3kB31Y8vLtP982N975SZXk2JwDvmv7AY/aDsFFk1v+nE7/hbvuOWhBH4kuemeYozPk2K22Vx/YGiDTLU7YilpOt29u3RZMBh4UJjlTP5ItxTzWv6ebL9b+GSU1Vsm2S8LMfVfJczaBSqE8J1A4YUjpsALL7++bwCPXFhaufdpDFtBlHb9makeYbqdg9ltvK/HwF/rNE6KrtWUkEcxmTB7Iyu5TiVaIgW/YxzQhpArliIMkOoK5L7ShVtF+DYqV01mk7fwop04hQRwg4KFmr5z9nYf05VVqkSe7gfnx5bxxlQ0qEV0jiwzf064qG11iEqjHcUgDWWsDs/LEGlzX31T5KVL+7D4EoKim7HBagiqRo5JI3WfDBgpKIruWz9j/J6Hp5Q/EJbMWB8NeSMuFarNw3AEYPBJtYQO/4oD/ZgPTSQ06di0EeumX5EbrdThO+fvYEVSxLtZ3AJkee0Xn0sDwNtiiZhJjJRDuG1YRKB1vOulfd9JjHeyu+UHTmrtra/pm+8Rixh4WKiLaLOCxIbZNoWRZSyyUGLPjAaAo+SQBpfO2uruWrzFxLlpvrXJNMCWtlJDKGAnlWK5xpU2tcxXbeD+sbdfwYXt/qTwDk6UqXR/aUt099DhSNl4Nk8mXwpw+b0nvjKOG6Mg1PRXjrMUMANvNgEArv8nMJs3vj1aHi8MHz/UfJWWzkcrSpZTNBhduXlGR7i+ip/THDp5R9KRNcDKECgtwgXg4EFN5HHfikP/XvsoCkHTg+NbsD8Gl6eknk4Arwn/BWGJ0hgW0/gUKrzuGZhub7igRP3abetpIm+24xEOlWl3YKpm2qTBFvX8ddDRvm1LcwnCJuEfZx12qPY9TrntMIQsv316zvpyWnyStX8VU4j6tQk+CWlLBUCJR6MdH9Cp7g2qdn2WM9qFbREmejH09dlWEPm8hPF0L7RxwRRdiCs0DP8ewk6ApoELkKU9hckSdbnXm8UHJmaNXjxv/q0fTTpu8rnl9lN0vQCpDRbCtcz12rGRFEA7Cfg7FhZn5QFkNmv1ZURKEsiZce1nS9K7HrwpC7yJV4Xt3eAVbLJfoXHrtwG60Z8gwaSnmxoL3s2ZlRqggZN/MHo1oUS4L+GwObFI596Ld4Mvi8l+cQmF1gJpkpnDio7TuO35npaMHiWzFqPSX3qNgkIPGuX0qGYnPIVsM901Yu8oZnOZOY1TbtIdFUNKNq2dP8SJ4F/VCEzIjF0/Rh+7UrZj80tC6rognVH3mqa8eCs/lcQU1Pjj98kBmAKDbZUTwosv02UunRR3n0X6c+f73mtwB7/WbQ16gO431EtwZbNG1SM4TZPBnsQSESlsfG2JLQXx5xWf4bmQ/xcVCPISAX5897JxHKLD/Xkgu57+ABR2+MMtEbX64+MNlBHpKC7sjlWVEShf5qA+dGc59LFVlZrX/Enq9z/v+wnZ1HErmxmjJjxOA+hAjVUWgtq6ygAi/8ewJDjUMFw3zhQFtbyTLDPFd21Ji5S5QPZo9nMSxdg1+DGFSN0wlWt7XeYPbHqLfliV0J1kOhQNp0VbUPy0MS2Ms66OxtSWvaULaWHnfAA+sieVVgtjDwN3nKonWapkSKRN8BKKJQpCfqo8RQI5udhfu5s5+7vwsppmAJDgz2GNA7d43VdbV2l/SrvEu4RYslmNJmfSOVbssxAhSYy6WxpIQdDB0FVBpZ6IM8yr81QN+XLZ3n/wed/R+s6LslkxKbzzst/GkRbe6rFmtvJCwr1T44ETM+IMgOnjUO0eG6a1n2w7lwM1oFBvzMUWRkNFOvKcx3oSb5XdenZ5dXsute6nkRypBiSdAtA2fxAd8UdLOZW/MB7fZoEuFheQXijdaF8kuaRZoSeWdKOkKsGYEGaXfaDKTu0WMTcLniQs7KRCz9iK3SP+Y2xIjkfVGqFLSQ6vh+A1u6FdfwXsv1VPMfi2cxmdM+/xTgMXEyo2ZGcQ2YmPsghnYdv2+z48JpGZA4tUK1p1q2VdVxyfypXEXcrxKKtmt8UdW7sHWmKMqDuBBM3J/JUQx8eUYN4pJ5oRqvdiPHU1o/WPjiKvnlCqOdyxlxF54L9PrtLD1NejZ9aZDivVr6ZfMFK1/psVygoPIAnphcJWWb9+5IKMKmgRQULsTPZi6Bw4wP32zVEoKcHpP73CkFAqS98nSaGoWDjDJiaACJn4p5o1jq9R4Q4VcibhXF//LHP0bdf63kRVZdRbbhGe7sDQcyWS5tpkfeYHnff25WK+4FpzLlAcbaKmHdIBqOw3fImx1uqQIADH0TyHzFlqTG6nMoY81svP0T6BIyELMS8tMe+E1p6TFP6sVpZa6VNaTumufD5aj9goRa9SAmdJT4HhI2r0egj8UrgFb8L59wGLnYlzkLAiUd3m/WWIIEU61kPoEjd3gIVy/fiBcgqQqHnoXpL0SqLGdGGgn7DQeVMSYWHfjno1FngIKP9cjYaTlcRP6bZunjHP13/lbVm4awti894pTf/ZNNqr4OR+tDVie/m+rC8QpVnRbsCMPukOH87B2jM4AG6pHuXl1x9SiKdhYJVOhfo/+SCaGjUW2CoogL1FFhFGN9o+acoVLl0SXs/3vrSccmZeAF3NewFuOg/P12QYKQF+SH+KYcNnsAhIAELPBUgre/KRUJEA+KPD0MHRjv+3J/j2Z23MuJmkfy7leWcMsti8wXLSHgXFJTaksx1Woi6oljwxFVIJG12SBSZLNJDbXMYPekmiXT4FclKI35BFgqnYpKfcsr+f8HUXQoHJ9UYZ4J5YMiHHyAxg6eidhodgqJ2Htf/xYEx+G0zXchuzlt8hcAl+AT8NCQ4orFc4DerabF1enA7NTLnvtZh3FUwqIOvY7Q4DYmoDHwXTSw5UNNh6r7j0B/ezMYJMDcw4+6gCTZX4YQ+7Xs8de72vsR3cmfpxIX64/6KR1p3VX4F6vfHEzxzarh8aDH4G1DFoBBM6npXFpK+Rh+WrcFclAeAxi0PoaR9CpOxxGLSdvxKVSw8oOOanG/soKImRopN38AdcUhhM2GT/PgQeSQrG12njuJJD5Z7vWfAZmFybYLdSA91kB4aoBhoj1Z//KNIVVujqaLLRwCkbyn4vh0739C9V9iSjybeOIeSOvNs7LW1a7EUtNoKAnOGML4U8KBXpfrw73WjAszJG4Qscq+Xr3kZWR4Omm0xT6qE9y6FNSpstV4onMZSqCEJ+3VX9qjvdx5QVrM0WXxmPZxejdfnihcFAjzv5PjlTl6ickDbHe6+Lch52pjOPqk+m3RZ+bh2JSMGtFBuODbMchrpRVlt16NTQ05Ps0IDtWlUmWfP2vX8M4YDynIuOZ4Ck91+591B98Gw9fw+yQogTR8CSg0zaJu+rlBo/mr3A+1NziF+kdubz+whc857AZt6DwIBIF5+5yiaaf3ByQp1Fm3sOkZDAzwsYSQTM/Kv6idkugF63FDobDdUY3huruU+sCaBuRR+HmOowvmZoBjZHNh77SXFtmY/oOUE7ifN7nBHAo83S/xvcS6H4Ci2u/9Id62Wv6Ui+zMNLAzhfkTkVcW2BwrnYvpur0ZDlzs+ZLsmGTWvd1892t78gx1YjEJusGcxphjLkV0UfAKlekfSBVWHE2ahk4AbbRmHyL7GYdtKfdlINwrcdJuf3Cee1nfUojDQn/YmItESOFhtLzrkEv4k2XpMU9oaJQ3VUC+1INh6BE68pkHameGJm4Gvdb24Q0fXWxd9Tp3A9mzFSe4qXDGGDIV4AAGV1jIDfveknH1TwWpUT6HiQxKP3AAHJNkJeRlj/mXBmS4S1j8FK6YmpK7jyyAiRbsMCCLoJcx01fvgpMvKQRxu9IOwymconQjD56g7ksOrcOeoTbius4JnGesAS1DtgdaophYsw1wGIsMS3P7K6doE3K5czznqPQLSRRF/Ylzb5NtSKsL33SgskFNCF4khn5LWaDxI23ZRi2hzqN8uW8UzZEBYy68+VtGLSymQrXGUlr2nO2BbBIT5Vh1RmGAyDXaW0FPrpx3wv2UYdFk9tSl+906bMxCuXQaKDQP/U19UEcVGK4gmksL8lAorxQSAOwpeYX9xrZsh6yoGaL/X5O3tgQC8OM+/GvxnW9XvAtu/JxAigydfSmZfqZfg1XOcHNOpLlN8j64OZ36l5qawDBJ62YaTvxeNmm5gowCdBosgcpHOgNgwA+sknN8XmsR2IYChcafl9bGNMZ/nB5guWuvEziv6QI2bP2DtyKWG/qUjZMaxy+wASkkVGtuwGtywkTYG6MYrZBo18vYcww48G/+f+eITA/qMwbLlJC0S3+/ai2pPvkOhRRVmGTuSupaxhIk0xoXLtixCxSAn4Z3OnUS3wBqVscLI4P3GP7i/6gxYsswsVmkvDXFLhO/OKcur8flegCSKiqmVpIRvCzgbjEA0mXPn+RExXY/2OE1f/BYuWpRQY8gCDpMOYBx9Gn4tL3hihSIR1ixh2PIIT7cr2gUJbfs76EKYG52Jk0UZF/PQkBxGuFCEWXnG6ue/hTIqjTRq1sotVrKrwIGHDrITyuanUzbIYdgdEeV88K1VD82TYB2B61Ft+tB1KqHPmT9+hWoaV+iF3SuvtJqvnoLaA8wxrD56AUMULEgzO9SvBcBAfqz/dzMYzwMt/YLszDbmGe1bcHHfFMcvGql9bf/tp+Hrj4q18aNnftGjmXTfws39emn7/5IBxog9MrmftAA5Oq4awenm8HimWO72dwVlHcHmutVMdrMHw+p2vzpzT+B0iIZ+IEpplwWhClcXlxhxAsF3CHRnnaUEqq3ByQ+cqhe5SvR4SFxh/LZoQwtj8QZQGT1BzY2EMpYnUcZWQEPlwFZw+7UryK9qV8KgruYsvyMoK16KI2sN4SOblrVwhyiL8+IBZ8cpUhsJQSU7TFHAi+L2F0sn0y+FtDODlnuif2Mba8QddPZYYxjTsIgkMe3M6+7kXxUfZvbCUlyq71J1eNczGk6Vqw6rSx2K3vM+DjLxDRGzWepTO2qTT/W8S7u0QXcyFUahcB4vq8xCYTpy8iswtnyz7Kx6lgTEQJ9RqkgEIN6DOUqB0uRdeYuDa7AP7Zy9z+ZlTsmVR5vtV71m3dmdtNeWghbr5PnPJtjXAzcvZjxyV96VEx/B1TA0IEQSI50ywGuIbmAYdQg/l/rxhQLX+6uOLyFsaUt6mtjpAJkLfehnB6MlOHnNOrWLvCBqVBS07jcM+4RzLEed3f3/0Xwp92U+nataNHyEgnnuYR6PXEjRLETz0xrt3UglfK7Bn4aNlXG7cZco4lMziLv5+Mh2JCww3mz69Z9ZMRR/xv5EKJ38IFxKd9dw5CgPIXja/gzAshMbF14/qBIgNkdUQeP8YE7SrICGtiTnAKTyA9cXa3OauDHxZOdTP7yuYBzD1UcHstIO16FxF1bRUAlSkszI83YufTchU8OPnnozDl9bS0y6CnnjGwgj9M61cXcZsljjhLeT/Vq+30ScN2PcT/dOoxUDqDS38+OpCCzLDdnwHQc3ECQVIkaxmdPaZTSdfp2jjGzSdNLM5yPQsgJDl+ZnhclDQi8ltUnkqWJ323IvTZPN8rn0+EshL1cx9PiaLTzUsryn9Zp2Nt/detUAh4N/2I3dlMQqjHFxSihv0uykzflq5clMy2ZBaxoEb0/QMp03IQQus3vnZd/NOmSsmgqXqKFP3ozyDgY7RQS+npabe/hNG+5sa5FtvL8v0uYuag2NewYkcol3TOTadpuncCnDgOGpmLnTQ1PEPUN2cNsrW8LYfIv+hzfb7vod+ipXHzmbgj5Fzc6RcT/5PD7VQ8nTJBNj1urkVUx9uJvTWmqY08OC80rGDLaWXv243VB16gjt4Xtwp5H2UDR0LiKW24Ed/sOO8jl1yEU/XAb3h7ScKnCFy/V3sICrkY1D0K9fSokHIL0s5/7DLShLAPXRbV7fbv4qj6OwHC9d5PlEOX3LRpQ3P7hcSAKlIKPDM83ypz56U5+rJeo0cyUtC7wltL8wqEiNSgZsDWzACc7RFoZqhlD0+sihIBQlkQTXmvUyIOZhkQX2zqME5VRC7ms1sa3CY+odMn3mMBiTvCMKnnCxg5ZPLq4GUDB4jF8Br2K4x4sxfWjGXQatJ25I1JyrIv2Z4bP1jKw5C+B2/s0v4dGUOsaS6IPIQV3ETQ+F2fSl2BPBXHzyYN8VmwWIrKeMX9pyGWuAOVXwkxJsRBaBVzLhZDP8ONGncknL5DpTxHN32GgFWMwsc0GmL0oRDmRT8u2lvjAKUIi0MmXhIHSlFeh3Qh5pP6ap4YUd6b569ZIaHgya2AyD12cPxY0In/PBjzDctTaKJCU+xc6m9RkNLDEE8guvxtJP8sl8N9bLqw0F/qejaBlcHYqw31zYpsutQp07hsP1vhGdl4hJ1wA7OCsAHnKj9879uSHILEmuZ6vI1lT4tvnWCVKZhhYrWHW9oPKPKpbOC6FTjf/OtUvwmiXr2ykvyLzHGQeyS7BenZpL3N/CaF5T7Gkml7JXN5cj0PKaDpZVImD61FuMgFHPqSHvt4Ej4KBdAfdcoO3AjQPLwwtKsgGM+ty4lNZMBEItJSRLunG5ckrM/BeoXWoPZVvEoIzLgFQYPupMwZCXis4W2SCJ2zsefZqCj+aTfSq1FYdUj2UeJALvVTf7vuuikOE1Hit3UIAGUi/sqgMum9vw218y1FlY/9XnOji9nqhGAcMYICc7BiqLZj5N+cKEuSAuiyWbMg81ZD1lHovy/we2eaCcCv4MzEW3O0mVA/t2xdA0cxTVbXmFhn+tARDpvDz5ftLr15OAAmvo2QiAky+feVO4bGibv2nlBmBzqx0lEDfEm4UnEs11pbnwZlJ/0Y73/wBPYfTNZiJKR73TzdCW1BffiJq9bLjQmaKnU0+gN8sfe25IKSUCooQwxePDrFn3a/zUgWxvPoTYVXfobY/GV2qqTkeVDV9D8657fhY0/wiaJ5NfLxhXbE/naxs34N0hd6vxNfdm1TCnozm/NKSCThchoYgMF7Z2tzXFovRfsNVkf86JjrM60r7UIuV3bsmfrMOqzjXjN6HPBG25zCJ3QLueySbj9oFvX/HxWBqh31PBPxduCVAxMqC9HK+YL3oBZqBruoh6LKvdMqoz0PYXUBrwbiioyE8Tj5ImjJmiOOWLbAZvIZ/l9rIPljx3T5glJ2ewlfuIT5GlodQsAf/IEtmYkML5SRQGxxwW+rlZkD8belJNu09Itwx9xDULTnemVDeojdbgcd2gKGM9aO00Jivtbs7ZyOSE8IPh98GfvatD8Ud5uHcZfAfMiPSlIxd4UqeSDzuNfbKDuFepkyC/s3j9fawmhY1b9NqDi0ZS5eP35l7rL2eK5QlWLlyCmxx8AFaFiTuD2pMUxZV5mBSJuJduOaq2ZrWpu28DE8jl/hisBz7bGWH6qLF0ayWNq1Sejtcs8KQrQqJk5P9QHDYHOIolgNsMDmEaWcTelghbfFCDqWrq6YLwDWy+m68ec5nShgq2fduUBpQUuKKKgnttaUX9PRfMmxqJyU7e0RLr1bev+ge1KK0bZyhHKKDE8gQX9Vf7rNHWOxBtZcxwwGusyMpH77qWZxXsQmbgIGhtiO+gSSRCyu/ek+OFsz1HMiQH0IHV7PjJi3dszYfFp8ue9h4+AfKte4MTiehPvxNcm/T1t9vsFZx8rHN5ie77r2jzZOq/Em4Q+H9sNcZakf9HnzCc1fJixppxP8FQABmVnqa6GbJhwaka7WH7Wdoz1WxOjSNV8N9sgW5S3Ppgkut+TTCkjA+AodUOk1KIR+8G8S3WrSZG4nyqfJ6FEjXl6a/LEoRMHZUqfPRWvwqrtXYy9IUsmUGzkqi76ib4NANCe5DnyOxnFRZ9d8FdBVBjra3iNuZhJuWW5Omi/hBigqDsg0mu2AhfJDXdwyMIJ33HHHPfS2JtjegRejX11m41TbNL+Qp7mR0g9CPKTj9PIjuSycGN/YPozXI4zarXuAeLv5CHKtKcJKRbd6R2oLNiEt0T8+QIVJH7zt9ncKMgd49vV2P1AyScZ9Qzbu3m3LBnuu6dw7aE0b6r4kzVkI/GUS88mA53L/rLtntkFlZXGtIoqNP2mD3eVv08AVVPT3wJn81zpbJV9SuqZ6Pd1ge0Zz2RFHeCdV5CLPftH9V5o9+VzFu4R0QeumqDwUhXn3IyYotdJnxr1l3BqWnQVAeDBEOtPyJQx1q5+mODiClXtYeBLTWtsJ42AMBcf/IFIhpfhYO08hsg0Ik+DpQFNOKReK3o3cudkxWX0soPtI5eSFOA6yNylS+IQjrQtYQ/5s4UcixJfokumBUjpH9ofSjUTwPCapGFndfqqG5IHeMMvfg+88SXm7bNyjk6pGKzL+WxDAdqKtQ72WWVbOk3I+ueGuammmB2pvFZvqIcU/lvW3n9+r2lycnQLE4OX9R1jIgW4cDjJ3v8dAa66mVcfC7ptCr5io6mCaA9qI9T9FFWqo1ZAaMxgxAu8aXqmaOYryMND2sTUfoHvxcYK7hEiJhCLYFDx3PBhE97c2a0ub1/ePJcyJOqr7UaTAPTJ+xvZtjb/40sloY1ltRnTkWILmIP2b7S3AdXCR+YiArMUHwdncpjpyDGfzqGOUoAuaamWzAMacQtb34/M32FEgR5lUEf8fRzFrZUhzQj0fR7/6gdzdnVVvcSneLmtqJ930VCCDORY8CVdQWdo/S3PNkX3pQsPVKWIYGAMrFZoq8bQ/OJBDSXP7KSBdL3QN0Zqd393p6VFc7DnlnFiN00SY5Nux7yadeIM0Upl2rVsu8/VAI";
30094
30432
  var FENCED = /* @__PURE__ */ new Map([[8217, "apostrophe"], [8260, "fraction slash"], [12539, "middle dot"]]);
@@ -31035,7 +31373,7 @@ ${prettyStateOverride(stateOverride)}`;
31035
31373
  const registry = getRegistry(config.network, config.registryAddress);
31036
31374
  const chain = chainFor(config.network);
31037
31375
  const owner = address;
31038
- const { data: rows, isLoading: rowsLoading } = useReadContract({
31376
+ const { data: rows, isLoading: rowsLoading, isFetched: rowsFetched, error: rowsError, refetch: refetchRows } = useReadContract({
31039
31377
  address: registry.address,
31040
31378
  abi: REGISTRY_ABI,
31041
31379
  functionName: "attestationsOf",
@@ -31051,7 +31389,7 @@ ${prettyStateOverride(stateOverride)}`;
31051
31389
  args: [owner, BigInt(i2)],
31052
31390
  chainId: chain.id
31053
31391
  })) : [];
31054
- const { data: payloads, isLoading: payloadsLoading } = useReadContracts({
31392
+ const { data: payloads, isLoading: payloadsLoading, error: payloadsError, refetch: refetchPayloads } = useReadContracts({
31055
31393
  contracts,
31056
31394
  query: { enabled: contracts.length > 0 }
31057
31395
  });
@@ -31091,7 +31429,7 @@ ${prettyStateOverride(stateOverride)}`;
31091
31429
  enabled: !!rows && payloadsReady,
31092
31430
  staleTime: 3e5
31093
31431
  });
31094
- const isLoading = rowsLoading || payloadsLoading || verifyLoading || !!owner && rows !== void 0 && !payloadsReady;
31432
+ const isLoading = rowsLoading || !!owner && !rowsFetched || payloadsLoading || verifyLoading || !!owner && rows !== void 0 && !payloadsReady;
31095
31433
  const activeClaims = (claims || []).filter((c2) => !c2.revoked);
31096
31434
  const verifiedClaims = activeClaims.filter((c2) => c2.verification?.verified);
31097
31435
  const currentFingerprint = verifiedClaims.length > 0 ? verifiedClaims[verifiedClaims.length - 1].fingerprint : null;
@@ -31100,7 +31438,15 @@ ${prettyStateOverride(stateOverride)}`;
31100
31438
  totalClaims: count,
31101
31439
  activeClaims: activeClaims.length,
31102
31440
  currentFingerprint,
31103
- isLoading
31441
+ isLoading,
31442
+ /** A registry read failed (the RPC may be down; useThurinIdentity finds out which). */
31443
+ error: rowsError ?? payloadsError ?? null,
31444
+ refetch: () => {
31445
+ if (owner) {
31446
+ refetchRows();
31447
+ if (contracts.length > 0) refetchPayloads();
31448
+ }
31449
+ }
31104
31450
  };
31105
31451
  }
31106
31452
 
@@ -31513,7 +31859,7 @@ ${prettyStateOverride(stateOverride)}`;
31513
31859
  const chain = chainFor(useIdentityKitConfig().network);
31514
31860
  const isAddr = ensOrAddress ? isAddress2(ensOrAddress) : false;
31515
31861
  const ensInput = ensOrAddress && !isAddr ? safeNormalize(ensOrAddress) : void 0;
31516
- const { data: resolvedAddress } = useEnsAddress({
31862
+ const { data: resolvedAddress, error: ensError, isFetched: ensFetched, refetch: refetchEns } = useEnsAddress({
31517
31863
  name: ensInput,
31518
31864
  chainId: chain.id,
31519
31865
  query: { enabled: !!ensInput }
@@ -31531,7 +31877,9 @@ ${prettyStateOverride(stateOverride)}`;
31531
31877
  totalClaims,
31532
31878
  activeClaims,
31533
31879
  currentFingerprint,
31534
- isLoading: claimsLoading
31880
+ isLoading: claimsLoading,
31881
+ error: claimsError,
31882
+ refetch: refetchClaims
31535
31883
  } = useAttestations(address);
31536
31884
  const currentClaim = [...claims].reverse().find(
31537
31885
  (c2) => !c2.revoked && c2.verification?.verified && c2.fingerprint === currentFingerprint
@@ -31542,6 +31890,21 @@ ${prettyStateOverride(stateOverride)}`;
31542
31890
  isLoading: proofsLoading
31543
31891
  } = usePGPProofs(currentFingerprint, currentClaim?.pgpPublicKey ?? null);
31544
31892
  const { efp, isLoading: efpLoading } = useEFPGraph(address);
31893
+ const lookup = { ensEmpty: !!ensInput && ensFetched && !resolvedAddress, ensFailed: !!ensError, claimsFailed: !!claimsError };
31894
+ const probeNeeded = needsRpcProbe(lookup);
31895
+ const probe = useBlockNumber({
31896
+ chainId: chain.id,
31897
+ scopeKey: `thurin-rpc-probe:${ensOrAddress ?? ""}`,
31898
+ query: { enabled: probeNeeded, retry: 0, staleTime: 0, gcTime: 0 }
31899
+ });
31900
+ const rpcAnswered = !probeNeeded || probe.isFetching ? void 0 : probe.isSuccess ? true : probe.isError ? false : void 0;
31901
+ const errorKind = identityErrorKind({ ...lookup, rpcAnswered });
31902
+ const probing = probeNeeded && rpcAnswered === void 0;
31903
+ const retry = () => {
31904
+ if (ensInput) refetchEns();
31905
+ refetchClaims();
31906
+ if (probeNeeded) probe.refetch();
31907
+ };
31545
31908
  return {
31546
31909
  address,
31547
31910
  ensName: displayName,
@@ -31553,8 +31916,12 @@ ${prettyStateOverride(stateOverride)}`;
31553
31916
  pgpKeyInfo,
31554
31917
  proofs,
31555
31918
  efp,
31556
- isLoading: claimsLoading || proofsLoading || efpLoading,
31557
- error: null
31919
+ // "Not finished" counts as loading, including queries paused in a background tab: the card
31920
+ // must not render defaults (zeros) for an identity it hasn't looked up yet.
31921
+ isLoading: !!ensInput && !ensFetched || claimsLoading || proofsLoading || efpLoading || probing,
31922
+ error: errorKind ? new Error(IDENTITY_ERROR_TEXT[errorKind]) : null,
31923
+ errorKind,
31924
+ retry
31558
31925
  };
31559
31926
  }
31560
31927
 
@@ -31578,6 +31945,19 @@ ${prettyStateOverride(stateOverride)}`;
31578
31945
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "thurin-card", "data-thurin-theme": theme, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "thurin-card-loading", children: "Loading identity..." }) });
31579
31946
  }
31580
31947
  const displayAddress = identity.address || null;
31948
+ if (identity.errorKind) {
31949
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "thurin-card", "data-thurin-theme": theme, children: [
31950
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "thurin-card-header", children: [
31951
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThurinLogo, {}),
31952
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "thurin-card-name", children: identity.ensName || ens || address }) })
31953
+ ] }),
31954
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "thurin-card-error", role: "status", children: [
31955
+ identity.error?.message,
31956
+ identity.errorKind !== "not-found" && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "thurin-card-retry", onClick: identity.retry, children: "Try again" })
31957
+ ] }),
31958
+ profileUrl && identity.errorKind !== "not-found" && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("a", { className: "thurin-card-link", href: profileUrl, target: "_blank", rel: "noopener noreferrer", children: "View on Thurin" })
31959
+ ] });
31960
+ }
31581
31961
  const verifiedProofs = identity.proofs.filter((p2) => p2.status === "verified").length;
31582
31962
  const hasVerifiedPgp = identity.claims.some((c2) => c2.verification?.verified && !c2.revoked);
31583
31963
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "thurin-card", "data-thurin-theme": theme, children: [
@@ -31605,7 +31985,7 @@ ${prettyStateOverride(stateOverride)}`;
31605
31985
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "thurin-card-stat-label", children: "Proofs" })
31606
31986
  ] }),
31607
31987
  /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "thurin-card-stat", children: [
31608
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "thurin-card-stat-value", children: identity.efp?.followers ?? 0 }),
31988
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "thurin-card-stat-value", children: identity.efp ? identity.efp.followers : "\u2013" }),
31609
31989
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "thurin-card-stat-label", children: "Followers" })
31610
31990
  ] })
31611
31991
  ] }),
@@ -31638,7 +32018,7 @@ ${prettyStateOverride(stateOverride)}`;
31638
32018
  var themes_default = '[data-thurin-theme="thurin"] {\n --thurin-bg: #1a1a12;\n --thurin-surface: #252518;\n --thurin-surface-deep: #151510;\n --thurin-border: #3a3a2a;\n --thurin-text: #faf9f5;\n --thurin-text-muted: #a8a598;\n --thurin-heading: #7c9a3e;\n --thurin-primary: #7c9a3e;\n --thurin-primary-dim: #5c7a2e;\n --thurin-secondary: #c9a227;\n --thurin-success: #7c9a3e;\n --thurin-error: #d44a4a;\n}\n\n[data-thurin-theme="dark"] {\n --thurin-bg: #141010;\n --thurin-surface: #1e1918;\n --thurin-surface-deep: #110e0c;\n --thurin-border: #352a22;\n --thurin-text: #ede5d8;\n --thurin-text-muted: #a09080;\n --thurin-heading: #f0ece4;\n --thurin-primary: #c9a227;\n --thurin-primary-dim: #8a7020;\n --thurin-secondary: #d4a04a;\n --thurin-success: #7c9a3e;\n --thurin-error: #d44a4a;\n}\n\n[data-thurin-theme="light"] {\n --thurin-bg: #faf9f5;\n --thurin-surface: #f0efe8;\n --thurin-surface-deep: #e8e7e0;\n --thurin-border: #d0cfc4;\n --thurin-text: #2a2a22;\n --thurin-text-muted: #6b6960;\n --thurin-heading: #5a7228;\n --thurin-primary: #5a7228;\n --thurin-primary-dim: #7c9a3e;\n --thurin-secondary: #a8861e;\n --thurin-success: #5a7228;\n --thurin-error: #b83a3a;\n}\n';
31639
32019
 
31640
32020
  // src/components/ThurinCard/ThurinCard.css?raw
31641
- var ThurinCard_default = ".thurin-card {\n font-family: 'Crimson Pro', Georgia, serif;\n background: var(--thurin-surface);\n border: 1px solid var(--thurin-border);\n border-radius: 8px;\n padding: 20px;\n color: var(--thurin-text);\n max-width: 380px;\n width: 100%;\n}\n\n.thurin-card * {\n box-sizing: border-box;\n}\n\n.thurin-card-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n}\n\n.thurin-card-header:hover .thurin-card-name {\n color: var(--thurin-primary);\n}\n\n.thurin-card-avatar {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 2px solid var(--thurin-border);\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.thurin-card-avatar-placeholder {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 2px solid var(--thurin-border);\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.thurin-card-name {\n font-family: 'Cinzel', serif;\n font-size: 18px;\n font-weight: 700;\n color: var(--thurin-heading);\n line-height: 1.2;\n}\n\n.thurin-card-address {\n font-family: 'Share Tech Mono', monospace;\n font-size: 11px;\n color: var(--thurin-text-muted);\n margin-top: 2px;\n word-break: break-all;\n}\n\n.thurin-card-stats {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.thurin-card-stat {\n text-align: center;\n padding: 8px 4px;\n background: var(--thurin-surface-deep);\n border-radius: 4px;\n}\n\n.thurin-card-stat-value {\n font-family: 'Cinzel', serif;\n font-size: 20px;\n font-weight: 700;\n color: var(--thurin-heading);\n display: block;\n}\n\n.thurin-card-stat-label {\n font-family: 'Share Tech Mono', monospace;\n font-size: 10px;\n color: var(--thurin-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.thurin-card-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-bottom: 16px;\n}\n\n.thurin-card-badge {\n font-family: 'Share Tech Mono', monospace;\n font-size: 11px;\n padding: 3px 8px;\n border-radius: 3px;\n border: 1px solid;\n}\n\n.thurin-card-badge--verified {\n color: var(--thurin-success);\n border-color: var(--thurin-success);\n}\n\n.thurin-card-badge--unverified {\n color: var(--thurin-text-muted);\n border-color: var(--thurin-border);\n}\n\n.thurin-card-link {\n display: block;\n text-align: right;\n font-size: 12px;\n color: var(--thurin-text-muted);\n text-decoration: none;\n}\n\n.thurin-card-link:hover {\n color: var(--thurin-primary);\n}\n\n.thurin-card-loading {\n text-align: center;\n padding: 24px;\n color: var(--thurin-text-muted);\n font-size: 14px;\n}\n";
32021
+ var ThurinCard_default = ".thurin-card {\n font-family: 'Crimson Pro', Georgia, serif;\n background: var(--thurin-surface);\n border: 1px solid var(--thurin-border);\n border-radius: 8px;\n padding: 20px;\n color: var(--thurin-text);\n max-width: 380px;\n width: 100%;\n}\n\n.thurin-card * {\n box-sizing: border-box;\n}\n\n.thurin-card-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n}\n\n.thurin-card-header:hover .thurin-card-name {\n color: var(--thurin-primary);\n}\n\n.thurin-card-avatar {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 2px solid var(--thurin-border);\n object-fit: cover;\n flex-shrink: 0;\n}\n\n.thurin-card-avatar-placeholder {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 2px solid var(--thurin-border);\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.thurin-card-name {\n font-family: 'Cinzel', serif;\n font-size: 18px;\n font-weight: 700;\n color: var(--thurin-heading);\n line-height: 1.2;\n}\n\n.thurin-card-address {\n font-family: 'Share Tech Mono', monospace;\n font-size: 11px;\n color: var(--thurin-text-muted);\n margin-top: 2px;\n word-break: break-all;\n}\n\n.thurin-card-stats {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.thurin-card-stat {\n text-align: center;\n padding: 8px 4px;\n background: var(--thurin-surface-deep);\n border-radius: 4px;\n}\n\n.thurin-card-stat-value {\n font-family: 'Cinzel', serif;\n font-size: 20px;\n font-weight: 700;\n color: var(--thurin-heading);\n display: block;\n}\n\n.thurin-card-stat-label {\n font-family: 'Share Tech Mono', monospace;\n font-size: 10px;\n color: var(--thurin-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.thurin-card-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-bottom: 16px;\n}\n\n.thurin-card-badge {\n font-family: 'Share Tech Mono', monospace;\n font-size: 11px;\n padding: 3px 8px;\n border-radius: 3px;\n border: 1px solid;\n}\n\n.thurin-card-badge--verified {\n color: var(--thurin-success);\n border-color: var(--thurin-success);\n}\n\n.thurin-card-badge--unverified {\n color: var(--thurin-text-muted);\n border-color: var(--thurin-border);\n}\n\n.thurin-card-link {\n display: block;\n text-align: right;\n font-size: 12px;\n color: var(--thurin-text-muted);\n text-decoration: none;\n}\n\n.thurin-card-link:hover {\n color: var(--thurin-primary);\n}\n\n.thurin-card-loading {\n text-align: center;\n padding: 24px;\n color: var(--thurin-text-muted);\n font-size: 14px;\n}\n\n.thurin-card-error {\n margin: 12px 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--thurin-text-muted);\n}\n\n.thurin-card-retry {\n display: inline;\n margin-left: 8px;\n padding: 0;\n background: none;\n border: none;\n font: inherit;\n color: var(--thurin-primary);\n text-decoration: underline;\n text-underline-offset: 3px;\n cursor: pointer;\n}\n";
31642
32022
 
31643
32023
  // src/embed.tsx
31644
32024
  var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);