diff --git a/index.html b/index.html index f33bc340..b314e08f 100644 --- a/index.html +++ b/index.html @@ -1129,7 +1129,7 @@

Rust

# Cargo.toml
 
 [dependencies]
-bitbazaar = "0.0.35"
+bitbazaar = "0.0.36"
 

Usage

Please see the documentation for details.

diff --git a/js_ref/classes/log.GlobalLog.html b/js_ref/classes/log.GlobalLog.html index 375d4dbe..db896d12 100644 --- a/js_ref/classes/log.GlobalLog.html +++ b/js_ref/classes/log.GlobalLog.html @@ -1,4 +1,4 @@ -GlobalLog | bitbazaar

Class GlobalLog

Hierarchy

  • GlobalLog

Constructors

constructor +GlobalLog | bitbazaar

Class GlobalLog

Hierarchy

  • GlobalLog

Constructors

Properties

Constructors

  • Create the global logger, must setup oltp (http), console can be optionally setup and will just print logs.

    -

    Parameters

    • __namedParameters: {
          console?: ConsoleArgs;
          otlp: OltpArgs;
      }
      • Optional console?: ConsoleArgs
      • otlp: OltpArgs

    Returns GlobalLog

Properties

console: null | ConsoleArgs
logger: Logger
loggerProvider: LoggerProvider
meterProvider: MeterProvider
oltp: OltpArgs
orig_console_fns: ConsoleFns
tracer: Tracer
tracerProvider: WebTracerProvider

Methods

  • Parameters

    • severityText: LogLevel
    • message: string
    • attributes: undefined | LogAttributes

    Returns void

  • Log a debug message.

    -

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Log an error message.

    -

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Log an info message.

    -

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Get a new Meter instance to record metrics with.

    +

    Parameters

    • __namedParameters: {
          console?: ConsoleArgs;
          otlp: OltpArgs;
      }
      • Optional console?: ConsoleArgs
      • otlp: OltpArgs

    Returns GlobalLog

Properties

console: null | ConsoleArgs
logger: Logger
loggerProvider: LoggerProvider
meterProvider: MeterProvider
oltp: OltpArgs
orig_console_fns: ConsoleFns
tracer: Tracer
tracerProvider: WebTracerProvider

Methods

  • Parameters

    • severityText: LogLevel
    • message: string
    • attributes: undefined | LogAttributes

    Returns void

  • Log a debug message.

    +

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Log an error message.

    +

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Log an info message.

    +

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Get a new Meter instance to record metrics with.

    Parameters

    • name: string
    • opts: MeterOptions | {
          version?: string;
      } = {}

    Returns Meter

    Example

    const meter = globalLog.getMeter("example-meter");
    const counter = meter.createCounter('metric_name');
    counter.add(10, { 'key': 'value' });
    -
  • Log a warning message.

    -

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Run a sync callback inside a span.

    -

    Type Parameters

    • T

    Parameters

    • name: string
    • cb: ((span) => T)
        • (span): T
        • Parameters

          • span: any

          Returns T

    Returns T

  • Run an async callback inside a span.

    -

    Type Parameters

    • T

    Parameters

    • name: string
    • cb: ((span) => Promise<T>)
        • (span): Promise<T>
        • Parameters

          • span: any

          Returns Promise<T>

    Returns Promise<T>

Generated using TypeDoc

\ No newline at end of file +
  • Log a warning message.

    +

    Parameters

    • message: string
    • Optional attributes: LogAttributes

    Returns void

  • Run a sync callback inside a span.

    +

    Type Parameters

    • T

    Parameters

    • name: string
    • cb: ((span) => T)
        • (span): T
        • Parameters

          • span: any

          Returns T

    Returns T

  • Run an async callback inside a span.

    +

    Type Parameters

    • T

    Parameters

    • name: string
    • cb: ((span) => Promise<T>)
        • (span): Promise<T>
        • Parameters

          • span: any

          Returns Promise<T>

    Returns Promise<T>

Generated using TypeDoc

\ No newline at end of file diff --git a/js_ref/functions/color.createSteppedScale.html b/js_ref/functions/color.createSteppedScale.html index 32de26bb..19e235f8 100644 --- a/js_ref/functions/color.createSteppedScale.html +++ b/js_ref/functions/color.createSteppedScale.html @@ -1,3 +1,3 @@ createSteppedScale | bitbazaar

Function createSteppedScale

  • Creates a scale around an input color with the requested number of steps. E.g. 5 steps requested, it will go: darker1, darker2, input, lighter1, lighter2.

    -

    Parameters

    • __namedParameters: SteppedScaleProps

    Returns string[]

Generated using TypeDoc

\ No newline at end of file +

Parameters

Returns string[]

Generated using TypeDoc

\ No newline at end of file diff --git a/js_ref/functions/index.hello.html b/js_ref/functions/index.hello.html index b86f59d7..fa1b481d 100644 --- a/js_ref/functions/index.hello.html +++ b/js_ref/functions/index.hello.html @@ -1 +1 @@ -hello | bitbazaar

Function hello

  • Returns string

Generated using TypeDoc

\ No newline at end of file +hello | bitbazaar

Function hello

  • Returns string

Generated using TypeDoc

\ No newline at end of file diff --git a/js_ref/functions/utils.add.html b/js_ref/functions/utils.add.html index fef76cae..5af0dfc1 100644 --- a/js_ref/functions/utils.add.html +++ b/js_ref/functions/utils.add.html @@ -1 +1 @@ -add | bitbazaar

Function add

  • Parameters

    • a: number
    • b: number

    Returns number

Generated using TypeDoc

\ No newline at end of file +add | bitbazaar

Function add

  • Parameters

    • a: number
    • b: number

    Returns number

Generated using TypeDoc

\ No newline at end of file diff --git a/js_ref/functions/utils.assertNever.html b/js_ref/functions/utils.assertNever.html index f2eeed1d..f4c4ff04 100644 --- a/js_ref/functions/utils.assertNever.html +++ b/js_ref/functions/utils.assertNever.html @@ -1,2 +1,2 @@ assertNever | bitbazaar

Function assertNever

  • Placed in switch default, enforces compiler to check all cases in a switch are matched and this is never reached:

    -

    Parameters

    • neverVal: never

    Returns never

Generated using TypeDoc

\ No newline at end of file +

Parameters

Returns never

Generated using TypeDoc

\ No newline at end of file diff --git a/js_ref/functions/utils.genPath.html b/js_ref/functions/utils.genPath.html index 8d4382a9..dd4d2581 100644 --- a/js_ref/functions/utils.genPath.html +++ b/js_ref/functions/utils.genPath.html @@ -1,3 +1,3 @@ genPath | bitbazaar

Function genPath

  • Helper to make all paths safe, can specify if should start or end with a slash. Works with filepaths and urls, with dynamic defaults depending on what comes in.

    -

    Parameters

    • path_in: string
    • __namedParameters: {
          eSlash?: boolean;
          extra?: string[];
          sShlash?: boolean;
      } = {}
      • Optional eSlash?: boolean
      • Optional extra?: string[]
      • Optional sShlash?: boolean

    Returns string

Generated using TypeDoc

\ No newline at end of file +

Parameters

Returns string

Generated using TypeDoc

\ No newline at end of file diff --git a/js_ref/functions/vite.createConfig.html b/js_ref/functions/vite.createConfig.html index 57d483db..319e7904 100644 --- a/js_ref/functions/vite.createConfig.html +++ b/js_ref/functions/vite.createConfig.html @@ -14,4 +14,4 @@
  • Vite will process it further
  • The final minified index.html will be added to the assets folder, where it should be the root of a static site, or server manually from a backend server.
  • -

    Parameters

    Returns UserConfig

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    Returns UserConfig

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/functions/wouter.route.html b/js_ref/functions/wouter.route.html index 8ad62fe0..87803d7c 100644 --- a/js_ref/functions/wouter.route.html +++ b/js_ref/functions/wouter.route.html @@ -1,2 +1,2 @@ route | bitbazaar

    Function route

    Generated using TypeDoc

    \ No newline at end of file +

    Type Parameters

    Parameters

    Returns InnerRouteConfig_T<RouteParamsOutput_T<Params>>

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/functions/wouter.routeParams.html b/js_ref/functions/wouter.routeParams.html index 9c0739cb..787ed6b6 100644 --- a/js_ref/functions/wouter.routeParams.html +++ b/js_ref/functions/wouter.routeParams.html @@ -2,4 +2,4 @@

    Type Parameters

    Parameters

    Returns T

    Generated using TypeDoc

    \ No newline at end of file +

    Returns T

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/functions/wouter.routes.html b/js_ref/functions/wouter.routes.html index 2126b2e7..b0ac7eb4 100644 --- a/js_ref/functions/wouter.routes.html +++ b/js_ref/functions/wouter.routes.html @@ -1,4 +1,4 @@ routes | bitbazaar

    Function routes

    • The producer of wouter components and all the routes, with a fallback and param coercion.

      Type Parameters

      • const T extends Record<string, InnerRouteConfig_T<any>>

      Parameters

      • __namedParameters: {
            Comp404: ComponentType<{}>;
            routes: T;
        }
        • Comp404: ComponentType<{}>
        • routes: T

      Returns {
          paths: {
              [K in string | number | symbol]: T[K] extends InnerRouteConfig_T<X>
                  ? RouteConfig_T<X>
                  : never
          };
          switch: Element;
      }

      an object containing the wouter component and all the routes, should be wrapped in a . Render with routes.switch, build paths with routes.paths.home.build({foo: "bar"}), etc.

      -
      • paths: {
            [K in string | number | symbol]: T[K] extends InnerRouteConfig_T<X>
                ? RouteConfig_T<X>
                : never
        }
      • switch: Element

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/interfaces/vite.TopViteConfig.html b/js_ref/interfaces/vite.TopViteConfig.html index 0f696c1d..ccf652ff 100644 --- a/js_ref/interfaces/vite.TopViteConfig.html +++ b/js_ref/interfaces/vite.TopViteConfig.html @@ -1,4 +1,4 @@ -TopViteConfig | bitbazaar

    Interface TopViteConfig

    Hierarchy

    • TopViteConfig

    Properties

    alias? +TopViteConfig | bitbazaar

    Interface TopViteConfig

    Hierarchy

    • TopViteConfig

    Properties

    alias? extraNonFrontendGlobs? favicon192PngPath favicon512PngPath @@ -19,17 +19,17 @@ }

    Or better yet, just use the tsconfig paths:
    import tsconfig from "./tsconfig.json";
    alias: tsconfig.compilerOptions.paths,
    -
    extraNonFrontendGlobs?: string[]

    Extra globs to exclude from traversal, can help with performance:

    -
    favicon192PngPath: string
    favicon512PngPath: string
    inspect?: boolean

    Include the inspect plugin, which allows you to see how vite is transforming code:

    -
    port: number
    proxy?: ProxyConf

    Proxy rules to apply to the dev server (i.e. when it should forward requests to a backend)

    -
    sameDomStaticPath: string

    The os path to the files that will deployed to sameDomStaticUrl. +

    extraNonFrontendGlobs?: string[]

    Extra globs to exclude from traversal, can help with performance:

    +
    favicon192PngPath: string
    favicon512PngPath: string
    inspect?: boolean

    Include the inspect plugin, which allows you to see how vite is transforming code:

    +
    port: number
    proxy?: ProxyConf

    Proxy rules to apply to the dev server (i.e. when it should forward requests to a backend)

    +
    sameDomStaticPath: string

    The os path to the files that will deployed to sameDomStaticUrl. Note if the static files are hosted on the same domain (i.e. not linking to a cdn, these can be the same as main static version) E.g. /.../~sds

    -
    sameDomStaticUrl: string

    The absolute url online that sameDomStaticPath files can be retrieved from +

    sameDomStaticUrl: string

    The absolute url online that sameDomStaticPath files can be retrieved from Note if the static files are hosted on the same domain (i.e. not linking to a cdn, these can be the same as main static version) E.g. https://example.com/~sds

    -
    serverFs?: FileSystemServeOptions
    siteDescription: string
    siteName: string
    staticPath: string

    The os path to the files that will deployed to staticUrl. +

    serverFs?: FileSystemServeOptions
    siteDescription: string
    siteName: string
    staticPath: string

    The os path to the files that will deployed to staticUrl. E.g. /.../static

    -
    staticUrl: string

    The absolute url online that staticPath files can be retrieved from +

    staticUrl: string

    The absolute url online that staticPath files can be retrieved from E.g. https://example.com/static

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/modules/color.html b/js_ref/modules/color.html index dc38994d..71fbf9ab 100644 --- a/js_ref/modules/color.html +++ b/js_ref/modules/color.html @@ -1,2 +1,2 @@ -color | bitbazaar

    Module color

    Index

    Functions

    createSteppedScale +color | bitbazaar

    Module color

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/modules/index.html b/js_ref/modules/index.html index 0eb8a286..67e4842c 100644 --- a/js_ref/modules/index.html +++ b/js_ref/modules/index.html @@ -1,2 +1,2 @@ -index | bitbazaar

    Module index

    Index

    Functions

    hello +index | bitbazaar

    Module index

    Index

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/modules/log.html b/js_ref/modules/log.html index c94a4bfb..fa63207b 100644 --- a/js_ref/modules/log.html +++ b/js_ref/modules/log.html @@ -1,4 +1,4 @@ -log | bitbazaar

    Module log

    Index

    Classes

    GlobalLog +log | bitbazaar

    Module log

    Index

    Classes

    Type Aliases

    Variables

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/modules/utils.html b/js_ref/modules/utils.html index ee771c39..c329fbf8 100644 --- a/js_ref/modules/utils.html +++ b/js_ref/modules/utils.html @@ -1,4 +1,4 @@ -utils | bitbazaar

    Module utils

    Index

    Variables

    areTestsRunning +utils | bitbazaar

    Module utils

    Index

    Variables

    Functions

    add assertNever genPath diff --git a/js_ref/modules/vite.html b/js_ref/modules/vite.html index 4b80f2d1..50316a9c 100644 --- a/js_ref/modules/vite.html +++ b/js_ref/modules/vite.html @@ -1,3 +1,3 @@ -vite | bitbazaar

    Module vite

    Index

    Interfaces

    TopViteConfig +vite | bitbazaar

    Module vite

    Index

    Interfaces

    Functions

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/modules/wouter.html b/js_ref/modules/wouter.html index 2bcd3247..4eb65901 100644 --- a/js_ref/modules/wouter.html +++ b/js_ref/modules/wouter.html @@ -1,4 +1,4 @@ -wouter | bitbazaar

    Module wouter

    Index

    Type Aliases

    RouteConfig_T +wouter | bitbazaar

    Module wouter

    Index

    Type Aliases

    Functions

    route routeParams diff --git a/js_ref/types/log.LogLevel.html b/js_ref/types/log.LogLevel.html index f54afa99..dbba1522 100644 --- a/js_ref/types/log.LogLevel.html +++ b/js_ref/types/log.LogLevel.html @@ -1 +1 @@ -LogLevel | bitbazaar

    Type alias LogLevel

    LogLevel: "DEBUG" | "INFO" | "WARN" | "ERROR"

    Generated using TypeDoc

    \ No newline at end of file +LogLevel | bitbazaar

    Type alias LogLevel

    LogLevel: "DEBUG" | "INFO" | "WARN" | "ERROR"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/types/wouter.RouteConfig_T.html b/js_ref/types/wouter.RouteConfig_T.html index 7a83e2b4..0d28f363 100644 --- a/js_ref/types/wouter.RouteConfig_T.html +++ b/js_ref/types/wouter.RouteConfig_T.html @@ -1 +1 @@ -RouteConfig_T | bitbazaar

    Type alias RouteConfig_T<ParamsOutput>

    RouteConfig_T<ParamsOutput>: InnerRouteConfig_T<ParamsOutput> & {
        route: React.JSX.Element;
    }

    Type Parameters

    Type declaration

    • route: React.JSX.Element

    Generated using TypeDoc

    \ No newline at end of file +RouteConfig_T | bitbazaar

    Type alias RouteConfig_T<ParamsOutput>

    RouteConfig_T<ParamsOutput>: InnerRouteConfig_T<ParamsOutput> & {
        route: React.JSX.Element;
    }

    Type Parameters

    Type declaration

    • route: React.JSX.Element

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/types/wouter.RouteParamsOutput_T.html b/js_ref/types/wouter.RouteParamsOutput_T.html index 88a92a83..c3e5031c 100644 --- a/js_ref/types/wouter.RouteParamsOutput_T.html +++ b/js_ref/types/wouter.RouteParamsOutput_T.html @@ -1 +1 @@ -RouteParamsOutput_T | bitbazaar

    Type alias RouteParamsOutput_T<Params>

    RouteParamsOutput_T<Params>: {
        [K in Params[number][0]]: Extract<Params[number], readonly [K, any]>[1] extends "int" | "float"
            ? number
            : Extract<Params[number], readonly [K, any]>[1] extends "boolean"
                ? boolean
                : Extract<Params[number], readonly [K, any]>[1] extends "string"
                    ? string
                    : never
    }

    Type Parameters

    • Params extends RouteParams_T

    Generated using TypeDoc

    \ No newline at end of file +RouteParamsOutput_T | bitbazaar

    Type alias RouteParamsOutput_T<Params>

    RouteParamsOutput_T<Params>: {
        [K in Params[number][0]]: Extract<Params[number], readonly [K, any]>[1] extends "int" | "float"
            ? number
            : Extract<Params[number], readonly [K, any]>[1] extends "boolean"
                ? boolean
                : Extract<Params[number], readonly [K, any]>[1] extends "string"
                    ? string
                    : never
    }

    Type Parameters

    • Params extends RouteParams_T

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/variables/log.LOG.html b/js_ref/variables/log.LOG.html index 63c7b67f..8b77d80a 100644 --- a/js_ref/variables/log.LOG.html +++ b/js_ref/variables/log.LOG.html @@ -1 +1 @@ -LOG | bitbazaar

    Variable LOGConst

    LOG: GlobalLog = ...

    Generated using TypeDoc

    \ No newline at end of file +LOG | bitbazaar

    Variable LOGConst

    LOG: GlobalLog = ...

    Generated using TypeDoc

    \ No newline at end of file diff --git a/js_ref/variables/utils.areTestsRunning.html b/js_ref/variables/utils.areTestsRunning.html index 1de2dc10..7aceba86 100644 --- a/js_ref/variables/utils.areTestsRunning.html +++ b/js_ref/variables/utils.areTestsRunning.html @@ -1 +1 @@ -areTestsRunning | bitbazaar

    Variable areTestsRunningConst

    areTestsRunning: boolean = ...

    Generated using TypeDoc

    \ No newline at end of file +areTestsRunning | bitbazaar

    Variable areTestsRunningConst

    areTestsRunning: boolean = ...

    Generated using TypeDoc

    \ No newline at end of file diff --git a/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/invoked.timestamp b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/invoked.timestamp new file mode 100644 index 00000000..e00328da --- /dev/null +++ b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/output b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/output new file mode 100644 index 00000000..e1cb096e --- /dev/null +++ b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/output @@ -0,0 +1 @@ +cargo:rustc-cfg=CHANNEL_NIGHTLY diff --git a/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/root-output b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/root-output new file mode 100644 index 00000000..48a87dbc --- /dev/null +++ b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/root-output @@ -0,0 +1 @@ +/home/runner/work/bitbazaar/bitbazaar/./docs/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/out \ No newline at end of file diff --git a/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/stderr b/rust_ref/debug/build/bitbazaar-acf3a3859dd9e74d/stderr new file mode 100644 index 00000000..e69de29b diff --git a/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build-script-build b/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build-script-build new file mode 100644 index 00000000..daa33ac7 Binary files /dev/null and b/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build-script-build differ diff --git a/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488 b/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488 new file mode 100644 index 00000000..daa33ac7 Binary files /dev/null and b/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488 differ diff --git a/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488.d b/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488.d new file mode 100644 index 00000000..48f82285 --- /dev/null +++ b/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488.d @@ -0,0 +1,5 @@ +/home/runner/work/bitbazaar/bitbazaar/./docs/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488: build.rs + +/home/runner/work/bitbazaar/bitbazaar/./docs/rust_ref/debug/build/bitbazaar-da325dfd3188f488/build_script_build-da325dfd3188f488.d: build.rs + +build.rs: diff --git a/rust_ref/doc/bitbazaar/all.html b/rust_ref/doc/bitbazaar/all.html index 32d78d96..adfc2c6b 100644 --- a/rust_ref/doc/bitbazaar/all.html +++ b/rust_ref/doc/bitbazaar/all.html @@ -1,2 +1,2 @@ -List of all items in this crate -
    \ No newline at end of file +List of all items in this crate +
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/cli/enum.BashErr.html b/rust_ref/doc/bitbazaar/cli/enum.BashErr.html index 97270dad..a445e174 100644 --- a/rust_ref/doc/bitbazaar/cli/enum.BashErr.html +++ b/rust_ref/doc/bitbazaar/cli/enum.BashErr.html @@ -1,4 +1,4 @@ -BashErr in bitbazaar::cli - Rust +BashErr in bitbazaar::cli - Rust

    Enum bitbazaar::cli::BashErr

    source ·
    pub enum BashErr {
         BashSyntaxError,
         BashFeatureUnsupported,
    @@ -7,7 +7,7 @@
     

    Variants§

    §

    BashSyntaxError

    BashSyntaxError

    §

    BashFeatureUnsupported

    BashFeatureUnsupported

    §

    InternalError

    InternalError

    -

    Trait Implementations§

    source§

    impl Context for BashErr

    §

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    Available on nightly only.
    Provide values which can then be requested by [Report].
    source§

    impl Debug for BashErr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for BashErr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Context for BashErr

    §

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    Available on nightly only.
    Provide values which can then be requested by [Report].
    source§

    impl Debug for BashErr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for BashErr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/rust_ref/doc/bitbazaar/cli/index.html b/rust_ref/doc/bitbazaar/cli/index.html index 0b1c1121..d170b2be 100644 --- a/rust_ref/doc/bitbazaar/cli/index.html +++ b/rust_ref/doc/bitbazaar/cli/index.html @@ -1,3 +1,3 @@ -bitbazaar::cli - Rust +bitbazaar::cli - Rust

    Module bitbazaar::cli

    source ·
    Available on crate feature cli only.
    Expand description

    Command line interface utilities.

    Structs§

    • Execute an arbitrary bash script.
    • The result of running a command

    Enums§

    • User facing error type for Bash functionality.
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/cli/struct.Bash.html b/rust_ref/doc/bitbazaar/cli/struct.Bash.html index 69b48517..1735ef16 100644 --- a/rust_ref/doc/bitbazaar/cli/struct.Bash.html +++ b/rust_ref/doc/bitbazaar/cli/struct.Bash.html @@ -1,4 +1,4 @@ -Bash in bitbazaar::cli - Rust +Bash in bitbazaar::cli - Rust

    Struct bitbazaar::cli::Bash

    source ·
    pub struct Bash { /* private fields */ }
    Available on crate feature cli only.
    Expand description

    Execute an arbitrary bash script.

    WARNING: this opens up the possibility of dependency injection attacks, so should only be used when the command is trusted. If compiled usage is all that’s needed, use something like rust_cmd_lib instead, which only provides a macro literal interface. diff --git a/rust_ref/doc/bitbazaar/cli/struct.CmdOut.html b/rust_ref/doc/bitbazaar/cli/struct.CmdOut.html index 7074baaa..25241ba8 100644 --- a/rust_ref/doc/bitbazaar/cli/struct.CmdOut.html +++ b/rust_ref/doc/bitbazaar/cli/struct.CmdOut.html @@ -1,4 +1,4 @@ -CmdOut in bitbazaar::cli - Rust

    +CmdOut in bitbazaar::cli - Rust

    Struct bitbazaar::cli::CmdOut

    source ·
    pub struct CmdOut {
         pub stdout: String,
         pub stderr: String,
    diff --git a/rust_ref/doc/bitbazaar/errors/index.html b/rust_ref/doc/bitbazaar/errors/index.html
    index ff58a0f3..44452f73 100644
    --- a/rust_ref/doc/bitbazaar/errors/index.html
    +++ b/rust_ref/doc/bitbazaar/errors/index.html
    @@ -1,3 +1,3 @@
    -bitbazaar::errors - Rust
    +bitbazaar::errors - Rust
         

    Module bitbazaar::errors

    source ·
    Expand description

    Error handling utilities.

    Structs§

    • A generic trace_stack error to use when you don’t want to create custom error types.
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/errors/struct.AnyErr.html b/rust_ref/doc/bitbazaar/errors/struct.AnyErr.html index c37fcd3c..08c3fac9 100644 --- a/rust_ref/doc/bitbazaar/errors/struct.AnyErr.html +++ b/rust_ref/doc/bitbazaar/errors/struct.AnyErr.html @@ -1,4 +1,4 @@ -AnyErr in bitbazaar::errors - Rust +AnyErr in bitbazaar::errors - Rust

    Struct bitbazaar::errors::AnyErr

    source ·
    pub struct AnyErr;
    Expand description

    A generic trace_stack error to use when you don’t want to create custom error types.

    Trait Implementations§

    source§

    impl Context for AnyErr

    §

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    Available on nightly only.
    Provide values which can then be requested by [Report].
    source§

    impl Debug for AnyErr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for AnyErr

    source§

    fn default() -> AnyErr

    Returns the “default value” for a type. Read more
    source§

    impl Display for AnyErr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/rust_ref/doc/bitbazaar/hash/fn.fnv1a.html b/rust_ref/doc/bitbazaar/hash/fn.fnv1a.html index 007198af..60c485d3 100644 --- a/rust_ref/doc/bitbazaar/hash/fn.fnv1a.html +++ b/rust_ref/doc/bitbazaar/hash/fn.fnv1a.html @@ -1,4 +1,4 @@ -fnv1a in bitbazaar::hash - Rust +fnv1a in bitbazaar::hash - Rust

    Function bitbazaar::hash::fnv1a

    source ·
    pub fn fnv1a(input: &[u8]) -> u64
    Expand description

    FNV1a hash function. Note this is completely insecure, and should not be used for secure hashing. It should be used when speed is needed, and the hash does not need to be secure.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/hash/index.html b/rust_ref/doc/bitbazaar/hash/index.html index 2c43f607..d5dee85b 100644 --- a/rust_ref/doc/bitbazaar/hash/index.html +++ b/rust_ref/doc/bitbazaar/hash/index.html @@ -1,4 +1,4 @@ -bitbazaar::hash - Rust +bitbazaar::hash - Rust

    Module bitbazaar::hash

    source ·
    Expand description

    Hashing utilities.

    Functions§

    • FNV1a hash function. Note this is completely insecure, and should not be used for secure hashing. It should be used when speed is needed, and the hash does not need to be secure.
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/index.html b/rust_ref/doc/bitbazaar/index.html index a246b556..2bdb955e 100644 --- a/rust_ref/doc/bitbazaar/index.html +++ b/rust_ref/doc/bitbazaar/index.html @@ -1,4 +1,4 @@ -bitbazaar - Rust

    Available on crate features opentelemetry-grpc or opentelemetry-http only.
    Expand description

    Connect this program’s span to the trace that is represented by the provided HTTP headers. E.g. connect an axum handler’s trace/span to the nginx trace/span.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/log/fn.shutdown.html b/rust_ref/doc/bitbazaar/log/fn.shutdown.html index c2199448..bc209273 100644 --- a/rust_ref/doc/bitbazaar/log/fn.shutdown.html +++ b/rust_ref/doc/bitbazaar/log/fn.shutdown.html @@ -1,3 +1,3 @@ -shutdown in bitbazaar::log - Rust +shutdown in bitbazaar::log - Rust

    Function bitbazaar::log::shutdown

    source ·
    pub fn shutdown() -> Result<(), AnyErr>
    Expand description

    Shutdown the logger, traces and metrics, should be called when the program is about to exit.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/log/global_log/builder/struct.GlobalLogBuilder.html b/rust_ref/doc/bitbazaar/log/global_log/builder/struct.GlobalLogBuilder.html new file mode 100644 index 00000000..8b4a9abd --- /dev/null +++ b/rust_ref/doc/bitbazaar/log/global_log/builder/struct.GlobalLogBuilder.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

    Redirecting to ../../../../bitbazaar/log/struct.GlobalLogBuilder.html...

    + + + \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/log/index.html b/rust_ref/doc/bitbazaar/log/index.html index 46623310..ccfe4e7d 100644 --- a/rust_ref/doc/bitbazaar/log/index.html +++ b/rust_ref/doc/bitbazaar/log/index.html @@ -1,6 +1,6 @@ -bitbazaar::log - Rust -

    Module bitbazaar::log

    source ·
    Expand description

    Logging utilities

    -

    Structs§

    • A simple clap argument group for controlling the log level for cli usage.
    • The global logger/tracer for stdout, file and full open telemetry. Works with the tracing crates (info!, debug!, warn!, error!) and span funcs and decorators.

    Functions§

    Implementations§

    source§

    impl GlobalLog

    source

    pub fn builder() -> GlobalLogBuilder

    Create a builder to configure the global logger.

    +

    Implementations§

    source§

    impl GlobalLog

    source

    pub fn builder() -> GlobalLogBuilder

    Create a builder to configure the global logger.

    source

    pub fn setup_quick_stdout_global_logging( level_from: Level ) -> Result<(), AnyErr>

    A managed wrapper on creation of the GlobalLog and registering it as the global logger.

    Sets up console logging only. Should only be used for quick logging, as an example and testing.

    source

    pub fn register_global(self) -> Result<(), AnyErr>

    Register the logger as the global logger/tracer/metric manager, can only be done once during the lifetime of the program.

    If you need temporary globality, use the GlobalLog::with_tmp_global method.

    -
    source

    pub fn meter(&self, name: impl Into<Cow<'static, str>>) -> Result<Meter, AnyErr>

    Available on crate feature opentelemetry only.
    source

    pub fn meter(&self, name: impl Into<Cow<'static, str>>) -> Result<Meter, AnyErr>

    Available on crate features opentelemetry-grpc or opentelemetry-http only.
    source

    pub fn set_span_parent_from_http_headers( &self, span: &Span, headers: &HeaderMap -) -> Result<(), AnyErr>

    Available on crate feature opentelemetry only.
    Available on crate features opentelemetry-grpc or opentelemetry-http only.
    source

    pub fn set_response_headers_from_ctx<B>( &self, response: &mut Response<B> -) -> Result<(), AnyErr>

    Available on crate feature opentelemetry only.
    Available on crate features opentelemetry-grpc or opentelemetry-http only.
    source

    pub fn with_tmp_global<T>(&self, f: impl FnOnce() -> T) -> Result<T, AnyErr>

    Temporarily make the logger global, for the duration of the given closure.

    If you want to make the logger global permanently, use the GlobalLog::register_global method.

    source

    pub fn flush(&self) -> Result<(), AnyErr>

    See super::global_fns::flush`

    diff --git a/rust_ref/doc/bitbazaar/log/struct.GlobalLogBuilder.html b/rust_ref/doc/bitbazaar/log/struct.GlobalLogBuilder.html new file mode 100644 index 00000000..bc105dcc --- /dev/null +++ b/rust_ref/doc/bitbazaar/log/struct.GlobalLogBuilder.html @@ -0,0 +1,86 @@ +GlobalLogBuilder in bitbazaar::log - Rust +
    pub struct GlobalLogBuilder { /* private fields */ }
    Expand description

    The global log builder. See the GlobalLog struct for more information.

    +

    Implementations§

    source§

    impl GlobalLogBuilder

    source

    pub fn build(self) -> Result<GlobalLog, AnyErr>

    Build the global log from the configured builder.

    +
    source

    pub fn stdout(self, pretty: bool, include_loc: bool) -> Self

    Write to stdout:

    +

    Arguments:

    +
      +
    • pretty: When enabled, logs are formatted more verbosely, but easier on the eyes.
    • +
    • include_loc: When enabled, log contains write location (file and line).
    • +
    +
    source

    pub fn file( + self, + file_prefix: impl Into<String>, + dir: impl Into<PathBuf> +) -> Self

    Write to a file:

    +

    Arguments:

    +
      +
    • file_prefix: The prefix for the filenames, e.g. “graphs.log” which will come out as “graphs.log.2021-01-21,
    • +
    • dir: The directory to hold the log files, e.g. “./logs/”, will create if missing.
    • +
    +
    source

    pub fn custom( + self, + pretty: bool, + include_loc: bool, + include_color: bool, + include_ts: bool, + writer: fn(_: &[u8]) +) -> Self

    Write to a custom writer.

    +

    Arguments:

    +
      +
    • pretty: When enabled, logs are formatted more verbosely, but easier on the eyes.
    • +
    • include_loc: When enabled, log contains write location (file and line).
    • +
    • include_color: When enabled, log contains colors.
    • +
    • include_ts: When enabled, log contains timestamp.
    • +
    • writer: The fn to handle writing, passed the raw byte string.
    • +
    +

    If needing a string in the writer, can do:

    +

    let log = String::from_utf8_lossy(log);

    +
    source

    pub fn otlp_grpc( + self, + port: u16, + service_name: impl Into<String>, + service_version: impl Into<String> +) -> Self

    Available on crate feature opentelemetry-grpc only.

    Write to an open telemetry provider via grpc. This works with the tokio runtime.

    +

    Arguments:

    +
      +
    • port: The localhost port the open telemetry collector is running on and accepting grpc connections:
    • +
    • service_name: The name of the service:
    • +
    • service_version: The active version/deployment of the service:
    • +
    +
    source

    pub fn otlp_http( + self, + endpoint: impl Into<String>, + service_name: impl Into<String>, + service_version: impl Into<String> +) -> Self

    Available on crate feature opentelemetry-http only.

    Write to an open telemetry provider via http. This works with wasm!

    +

    Arguments:

    +
      +
    • endpoint: The url string to connect via http to, e.g. “/otlp” or “http://localhost/otlp”:
    • +
    • service_name: The name of the service:
    • +
    • service_version: The active version/deployment of the service:
    • +
    +
    source

    pub fn level_from(self, level: Level) -> Result<Self, AnyErr>

    Set the minimum level to log for.

    +

    NOTE: Applies to the last set output type only.

    +
    source

    pub fn loc_matcher(self, loc_matcher: Regex) -> Result<Self, AnyErr>

    Available on crate feature log-filter only.

    A regex that must be satisfied for a log to be accepted by this target. +E.g. if regex is ‘logging::tests’ then only locations containing this will be logged by this target. +Note that when None, will match all locations other than those matched by other layers with a loc_matcher.

    +

    NOTE: Applies to the last set output type only.

    +

    Trait Implementations§

    source§

    impl Default for GlobalLogBuilder

    source§

    fn default() -> GlobalLogBuilder

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    §

    impl<T> FutureExt for T

    §

    fn with_context(self, otel_cx: Context) -> WithContext<Self>

    Attaches the provided Context to this type, returning a WithContext +wrapper. Read more
    §

    fn with_current_context(self) -> WithContext<Self>

    Attaches the current Context to this type, returning a WithContext +wrapper. Read more
    §

    impl<T> Instrument for T

    §

    fn instrument(self, span: Span) -> Instrumented<Self>

    Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
    §

    fn in_current_span(self) -> Instrumented<Self>

    Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
    source§

    impl<T, U> Into<U> for T
    where + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T> IntoRequest<T> for T

    source§

    fn into_request(self) -> Request<T>

    Wrap the input message T in a tonic::Request
    source§

    impl<T, U> TryFrom<U> for T
    where + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for T
    where + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    §

    impl<V, T> VZip<V> for T
    where + V: MultiLane<T>,

    §

    fn vzip(self) -> V

    §

    impl<T> WithSubscriber for T

    §

    fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
    where + S: Into<Dispatch>,

    Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
    §

    fn with_current_subscriber(self) -> WithDispatch<Self>

    Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/macro.anyerr.html b/rust_ref/doc/bitbazaar/macro.anyerr.html index b60080c4..cf8f1377 100644 --- a/rust_ref/doc/bitbazaar/macro.anyerr.html +++ b/rust_ref/doc/bitbazaar/macro.anyerr.html @@ -1,4 +1,4 @@ -anyerr in bitbazaar - Rust +anyerr in bitbazaar - Rust

    Macro bitbazaar::anyerr

    source ·
    macro_rules! anyerr {
         () => { ... };
         ($str:expr) => { ... };
    diff --git a/rust_ref/doc/bitbazaar/macro.err.html b/rust_ref/doc/bitbazaar/macro.err.html
    index 3c3c6e5a..5059b0d3 100644
    --- a/rust_ref/doc/bitbazaar/macro.err.html
    +++ b/rust_ref/doc/bitbazaar/macro.err.html
    @@ -1,4 +1,4 @@
    -err in bitbazaar - Rust
    +err in bitbazaar - Rust
         

    Macro bitbazaar::err

    source ·
    macro_rules! err {
         ($err_variant:expr) => { ... };
         ($err_variant:expr, $str:expr) => { ... };
    diff --git a/rust_ref/doc/bitbazaar/macro.panic_on_err.html b/rust_ref/doc/bitbazaar/macro.panic_on_err.html
    index c354a017..16c351fc 100644
    --- a/rust_ref/doc/bitbazaar/macro.panic_on_err.html
    +++ b/rust_ref/doc/bitbazaar/macro.panic_on_err.html
    @@ -1,4 +1,4 @@
    -panic_on_err in bitbazaar - Rust
    +panic_on_err in bitbazaar - Rust
         
    macro_rules! panic_on_err {
         ($closure:block) => { ... };
     }
    Expand description

    When working in a function that cannot return a result, use this to auto panic with the formatted error if something goes wrong.

    diff --git a/rust_ref/doc/bitbazaar/macro.timeit.html b/rust_ref/doc/bitbazaar/macro.timeit.html index ae24fecc..4a621e9a 100644 --- a/rust_ref/doc/bitbazaar/macro.timeit.html +++ b/rust_ref/doc/bitbazaar/macro.timeit.html @@ -1,4 +1,4 @@ -timeit in bitbazaar - Rust +timeit in bitbazaar - Rust

    Macro bitbazaar::timeit

    source ·
    macro_rules! timeit {
         ($desc:expr, $code:block) => { ... };
     }
    Available on crate feature timing only.
    Expand description

    Time a block of code and log to the global time recorder.

    diff --git a/rust_ref/doc/bitbazaar/macro.warn_user_once.html b/rust_ref/doc/bitbazaar/macro.warn_user_once.html index 22600a42..9eeaad76 100644 --- a/rust_ref/doc/bitbazaar/macro.warn_user_once.html +++ b/rust_ref/doc/bitbazaar/macro.warn_user_once.html @@ -1,4 +1,4 @@ -warn_user_once in bitbazaar - Rust +warn_user_once in bitbazaar - Rust
    macro_rules! warn_user_once {
         ($($arg:tt)*) => { ... };
     }
    Expand description

    Warn a user once, with uniqueness determined by the calling location itself.

    diff --git a/rust_ref/doc/bitbazaar/macro.warn_user_once_by_id.html b/rust_ref/doc/bitbazaar/macro.warn_user_once_by_id.html index 46f33a50..9264457e 100644 --- a/rust_ref/doc/bitbazaar/macro.warn_user_once_by_id.html +++ b/rust_ref/doc/bitbazaar/macro.warn_user_once_by_id.html @@ -1,4 +1,4 @@ -warn_user_once_by_id in bitbazaar - Rust +warn_user_once_by_id in bitbazaar - Rust
    macro_rules! warn_user_once_by_id {
         ($id:expr, $($arg:tt)*) => { ... };
     }
    Expand description

    Warn a user once, with uniqueness determined by the given ID.

    diff --git a/rust_ref/doc/bitbazaar/misc/fn.in_ci.html b/rust_ref/doc/bitbazaar/misc/fn.in_ci.html index fd79a7b5..f2221d9e 100644 --- a/rust_ref/doc/bitbazaar/misc/fn.in_ci.html +++ b/rust_ref/doc/bitbazaar/misc/fn.in_ci.html @@ -1,3 +1,3 @@ -in_ci in bitbazaar::misc - Rust +in_ci in bitbazaar::misc - Rust

    Function bitbazaar::misc::in_ci

    source ·
    pub fn in_ci() -> bool
    Expand description

    Returns true if the current process seems to be running in CI.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/misc/fn.is_tcp_port_listening.html b/rust_ref/doc/bitbazaar/misc/fn.is_tcp_port_listening.html index 400bd603..ffa7ed8c 100644 --- a/rust_ref/doc/bitbazaar/misc/fn.is_tcp_port_listening.html +++ b/rust_ref/doc/bitbazaar/misc/fn.is_tcp_port_listening.html @@ -1,3 +1,3 @@ -is_tcp_port_listening in bitbazaar::misc - Rust +is_tcp_port_listening in bitbazaar::misc - Rust
    pub fn is_tcp_port_listening(host: &str, port: u16) -> Result<bool, AnyErr>
    Expand description

    Check if a port is listening for a given ipv4 address and port.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/misc/index.html b/rust_ref/doc/bitbazaar/misc/index.html index 88630d55..7f94d263 100644 --- a/rust_ref/doc/bitbazaar/misc/index.html +++ b/rust_ref/doc/bitbazaar/misc/index.html @@ -1,3 +1,3 @@ -bitbazaar::misc - Rust +bitbazaar::misc - Rust

    Module bitbazaar::misc

    source ·
    Expand description

    Completely miscellaneous utilities

    Functions§

    • Returns true if the current process seems to be running in CI.
    • Check if a port is listening for a given ipv4 address and port.
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/redis/index.html b/rust_ref/doc/bitbazaar/redis/index.html index dcd0f94c..23343870 100644 --- a/rust_ref/doc/bitbazaar/redis/index.html +++ b/rust_ref/doc/bitbazaar/redis/index.html @@ -1,4 +1,4 @@ -bitbazaar::redis - Rust +bitbazaar::redis - Rust

    Module bitbazaar::redis

    source ·
    Available on crate feature redis only.
    Expand description

    Redis utilities

    Structs§

    • A wrapper around redis to make it more concise to use and not need redis in the downstream Cargo.toml.
    • A command builder struct. Committed with RedisBatch::fire.
    • Wrapper around a lazy redis connection.
    • A wrapper on an arbitrary json object to allow reading and writing to redis. Use RedisJsonConsume::consume to extract the inner json object.
    • A lua script wrapper. Should be created once per script.
    • Represents a individual script call with specific args and keys.

    Traits§

    • A trait to allow consuming a redis wrapper and returning the inner json object.
    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/redis/struct.Redis.html b/rust_ref/doc/bitbazaar/redis/struct.Redis.html index 2b1d30a4..36e16cca 100644 --- a/rust_ref/doc/bitbazaar/redis/struct.Redis.html +++ b/rust_ref/doc/bitbazaar/redis/struct.Redis.html @@ -1,4 +1,4 @@ -Redis in bitbazaar::redis - Rust +Redis in bitbazaar::redis - Rust

    Struct bitbazaar::redis::Redis

    source ·
    pub struct Redis { /* private fields */ }
    Available on crate feature redis only.
    Expand description

    A wrapper around redis to make it more concise to use and not need redis in the downstream Cargo.toml.

    This wrapper attempts to return very few errors to help build in automatic redis failure handling into downstream code. All redis errors (availability, unexpected content) will be logged as errors and results returned as None (or similar) where possible.

    diff --git a/rust_ref/doc/bitbazaar/redis/struct.RedisBatch.html b/rust_ref/doc/bitbazaar/redis/struct.RedisBatch.html index 42d30d4a..27f362cf 100644 --- a/rust_ref/doc/bitbazaar/redis/struct.RedisBatch.html +++ b/rust_ref/doc/bitbazaar/redis/struct.RedisBatch.html @@ -1,4 +1,4 @@ -RedisBatch in bitbazaar::redis - Rust +RedisBatch in bitbazaar::redis - Rust

    Struct bitbazaar::redis::RedisBatch

    source ·
    pub struct RedisBatch<'a, 'b, 'c, ReturnType = ()> { /* private fields */ }
    Available on crate feature redis only.
    Expand description

    A command builder struct. Committed with RedisBatch::fire.

    Batched commands are run in order, but other commands from different sources may be interleaved. Note each command may be run twice, if scripts needed caching to redis.

    diff --git a/rust_ref/doc/bitbazaar/redis/struct.RedisConn.html b/rust_ref/doc/bitbazaar/redis/struct.RedisConn.html index a5d78e69..e55babc6 100644 --- a/rust_ref/doc/bitbazaar/redis/struct.RedisConn.html +++ b/rust_ref/doc/bitbazaar/redis/struct.RedisConn.html @@ -1,4 +1,4 @@ -RedisConn in bitbazaar::redis - Rust +RedisConn in bitbazaar::redis - Rust

    Struct bitbazaar::redis::RedisConn

    source ·
    pub struct RedisConn<'a> { /* private fields */ }
    Available on crate feature redis only.
    Expand description

    Wrapper around a lazy redis connection.

    Implementations§

    source§

    impl<'a> RedisConn<'a>

    Public methods for RedisConn.

    source

    pub fn batch<'ref_lt>(&'ref_lt mut self) -> RedisBatch<'ref_lt, 'a, '_>

    Get a new RedisBatch for this connection that commands can be piped together with.

    diff --git a/rust_ref/doc/bitbazaar/redis/struct.RedisJson.html b/rust_ref/doc/bitbazaar/redis/struct.RedisJson.html index e75dab08..c70527c2 100644 --- a/rust_ref/doc/bitbazaar/redis/struct.RedisJson.html +++ b/rust_ref/doc/bitbazaar/redis/struct.RedisJson.html @@ -1,4 +1,4 @@ -RedisJson in bitbazaar::redis - Rust +RedisJson in bitbazaar::redis - Rust

    Struct bitbazaar::redis::RedisJson

    source ·
    pub struct RedisJson<T: Serialize + for<'a> Deserialize<'a>>(pub T);
    Available on crate feature redis only.
    Expand description

    A wrapper on an arbitrary json object to allow reading and writing to redis. Use RedisJsonConsume::consume to extract the inner json object.

    Tuple Fields§

    §0: T

    Trait Implementations§

    source§

    impl<T: Debug + Serialize + for<'a> Deserialize<'a>> Debug for RedisJson<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<T> FromRedisValue for RedisJson<T>
    where diff --git a/rust_ref/doc/bitbazaar/redis/struct.RedisScript.html b/rust_ref/doc/bitbazaar/redis/struct.RedisScript.html index aa5bd19e..2bc11e9f 100644 --- a/rust_ref/doc/bitbazaar/redis/struct.RedisScript.html +++ b/rust_ref/doc/bitbazaar/redis/struct.RedisScript.html @@ -1,4 +1,4 @@ -RedisScript in bitbazaar::redis - Rust +RedisScript in bitbazaar::redis - Rust
    pub struct RedisScript { /* private fields */ }
    Available on crate feature redis only.
    Expand description

    A lua script wrapper. Should be created once per script.

    Implementations§

    source§

    impl RedisScript

    source

    pub fn new(code: &'static str) -> RedisScript

    Create the script object. Use include_str!() to allow the script to exist in its own file for highlighting etc.

    diff --git a/rust_ref/doc/bitbazaar/redis/struct.RedisScriptInvoker.html b/rust_ref/doc/bitbazaar/redis/struct.RedisScriptInvoker.html index 1d423fd0..a59014e6 100644 --- a/rust_ref/doc/bitbazaar/redis/struct.RedisScriptInvoker.html +++ b/rust_ref/doc/bitbazaar/redis/struct.RedisScriptInvoker.html @@ -1,4 +1,4 @@ -RedisScriptInvoker in bitbazaar::redis - Rust +RedisScriptInvoker in bitbazaar::redis - Rust
    pub struct RedisScriptInvoker<'a> { /* private fields */ }
    Available on crate feature redis only.
    Expand description

    Represents a individual script call with specific args and keys.

    Implementations§

    source§

    impl<'a> RedisScriptInvoker<'a>

    source

    pub fn arg<'b, T: ToRedisArgs>(self, arg: T) -> Self
    where 'a: 'b,

    Add a regular argument. I.e. ARGV[i]

    diff --git a/rust_ref/doc/bitbazaar/redis/trait.RedisJsonConsume.html b/rust_ref/doc/bitbazaar/redis/trait.RedisJsonConsume.html index 5bb0ac46..8fd84ee3 100644 --- a/rust_ref/doc/bitbazaar/redis/trait.RedisJsonConsume.html +++ b/rust_ref/doc/bitbazaar/redis/trait.RedisJsonConsume.html @@ -1,4 +1,4 @@ -RedisJsonConsume in bitbazaar::redis - Rust +RedisJsonConsume in bitbazaar::redis - Rust
    pub trait RedisJsonConsume<T> {
         // Required method
         fn consume(self) -> T;
    diff --git a/rust_ref/doc/bitbazaar/timing/fn.format_duration.html b/rust_ref/doc/bitbazaar/timing/fn.format_duration.html
    index e8a396db..e8364601 100644
    --- a/rust_ref/doc/bitbazaar/timing/fn.format_duration.html
    +++ b/rust_ref/doc/bitbazaar/timing/fn.format_duration.html
    @@ -1,3 +1,3 @@
    -format_duration in bitbazaar::timing - Rust
    +format_duration in bitbazaar::timing - Rust
         
    pub fn format_duration(duration: Duration) -> String
    Available on crate feature timing only.
    Expand description

    Format a duration in a human readable format.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/timing/index.html b/rust_ref/doc/bitbazaar/timing/index.html index 96a8d5fc..05e958b3 100644 --- a/rust_ref/doc/bitbazaar/timing/index.html +++ b/rust_ref/doc/bitbazaar/timing/index.html @@ -1,3 +1,3 @@ -bitbazaar::timing - Rust +bitbazaar::timing - Rust

    Module bitbazaar::timing

    source ·
    Available on crate feature timing only.
    Expand description

    Timing utilities

    Structs§

    • A struct for recording time spent in various blocks of code.

    Statics§

    Functions§

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/timing/static.GLOBAL_TIME_RECORDER.html b/rust_ref/doc/bitbazaar/timing/static.GLOBAL_TIME_RECORDER.html index 4d1e9002..401e6078 100644 --- a/rust_ref/doc/bitbazaar/timing/static.GLOBAL_TIME_RECORDER.html +++ b/rust_ref/doc/bitbazaar/timing/static.GLOBAL_TIME_RECORDER.html @@ -1,3 +1,3 @@ -GLOBAL_TIME_RECORDER in bitbazaar::timing - Rust +GLOBAL_TIME_RECORDER in bitbazaar::timing - Rust
    pub static GLOBAL_TIME_RECORDER: Lazy<TimeRecorder>
    Available on crate feature timing only.
    Expand description

    A global time recorder, used by the timeit! macro.

    \ No newline at end of file diff --git a/rust_ref/doc/bitbazaar/timing/struct.TimeRecorder.html b/rust_ref/doc/bitbazaar/timing/struct.TimeRecorder.html index f9571003..181af785 100644 --- a/rust_ref/doc/bitbazaar/timing/struct.TimeRecorder.html +++ b/rust_ref/doc/bitbazaar/timing/struct.TimeRecorder.html @@ -1,4 +1,4 @@ -TimeRecorder in bitbazaar::timing - Rust +TimeRecorder in bitbazaar::timing - Rust
    pub struct TimeRecorder { /* private fields */ }
    Available on crate feature timing only.
    Expand description

    A struct for recording time spent in various blocks of code.

    Implementations§

    source§

    impl TimeRecorder

    source

    pub fn new() -> Self

    Create a new time recorder.

    source

    pub fn timeit<R, F: FnOnce() -> R>(&self, description: &str, f: F) -> R

    Time a block of code and log to the time recorder.

    diff --git a/rust_ref/doc/search-index.js b/rust_ref/doc/search-index.js index 5175f9ff..f0bca00f 100644 --- a/rust_ref/doc/search-index.js +++ b/rust_ref/doc/search-index.js @@ -1,5 +1,5 @@ var searchIndex = new Map(JSON.parse('[\ -["bitbazaar",{"doc":"bitbazaar - An assortment of publicly available …","t":"QCQCCCCQCQCQQFGPPFPNNNNNNNNNNONNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNFNNNNNNNNNNNNNHFFNNNNNNNHNNNNNNNNNNNNHNHNHNHNNHNONNNNNNNNONNNHHFFFFKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNJFNNNHNNNNNNNNNNN","n":["anyerr","cli","err","errors","hash","log","misc","panic_on_err","redis","timeit","timing","warn_user_once","warn_user_once_by_id","Bash","BashErr","BashFeatureUnsupported","BashSyntaxError","CmdOut","InternalError","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","chdir","clone","clone_into","cmd","code","default","env","fmt","fmt","fmt","from","from","from","from_ref","into","into","into","into_request","into_request","into_request","new","run","std_all","stderr","stdout","success","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","AnyErr","borrow","borrow_mut","default","fmt","fmt","from","into","into_request","to_string","try_from","try_into","type_id","vzip","fnv1a","ClapLogLevelArgs","GlobalLog","augment_args","augment_args_for_update","borrow","borrow","borrow_mut","borrow_mut","builder","flush","flush","fmt","from","from","from_arg_matches","from_arg_matches_mut","group_id","into","into","into_request","into_request","level","meter","meter","record_exception","register_global","set_response_headers_from_ctx","set_response_headers_from_ctx","set_span_parent_from_http_headers","set_span_parent_from_http_headers","setup_quick_stdout_global_logging","shutdown","shutdown","silent","try_from","try_from","try_into","try_into","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","verbose","vzip","vzip","with_tmp_global","in_ci","is_tcp_port_listening","Redis","RedisBatch","RedisConn","RedisJson","RedisJsonConsume","RedisScript","RedisScriptInvoker","arg","batch","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cached_fn","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clone","clone_into","conn","consume","consume","eq","equivalent","equivalent","equivalent","equivalent","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","final_key","final_namespace","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fmt","fmt","from","from","from","from","from","from","from_redis_value","from_ref","get","get","get","get","get","get","get","get","get","get","get","get","get","get","get","get","get","hash","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","invoker","key","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","new","new","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","set","set","set","set","set","set","set","set","set","set","set","set","set","set","set","set","set","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","write_redis_args","GLOBAL_TIME_RECORDER","TimeRecorder","borrow","borrow_mut","default","format_duration","format_verbose","from","into","into_request","new","timeit","total_elapsed","try_from","try_into","type_id","vzip"],"q":[[0,"bitbazaar"],[13,"bitbazaar::cli"],[65,"bitbazaar::errors"],[79,"bitbazaar::hash"],[80,"bitbazaar::log"],[126,"bitbazaar::misc"],[128,"bitbazaar::redis"],[402,"bitbazaar::timing"],[419,"std::path"],[420,"alloc::string"],[421,"core::convert"],[422,"core::fmt"],[423,"core::fmt"],[424,"tonic::request"],[425,"error_stack::result"],[426,"core::any"],[427,"clap_builder::builder::command"],[428,"clap_builder::parser::matches::arg_matches"],[429,"clap_builder"],[430,"clap_builder::util::id"],[431,"core::option"],[432,"tracing_core::metadata"],[433,"opentelemetry::metrics::meter"],[434,"alloc::borrow"],[435,"http::response"],[436,"tracing::span"],[437,"http::header::map"],[438,"core::ops::function"],[439,"redis::types"],[440,"core::time"],[441,"redis::types"],[442,"core::iter::traits::collect"],[443,"serde::ser"],[444,"serde::de"],[445,"core::fmt"],[446,"alloc::vec"],[447,"core::marker"],[448,"redis::types"]],"d":["A macro for building Report<AnyErr> objects with string …","Command line interface utilities.","A macro for building Report<ArbitraryErrorStackErr> …","Error handling utilities.","Hashing utilities.","Logging utilities","Completely miscellaneous utilities","When working in a function that cannot return a result, …","Redis utilities","Time a block of code and log to the global time recorder.","Timing utilities","Warn a user once, with uniqueness determined by the …","Warn a user once, with uniqueness determined by the given …","Execute an arbitrary bash script.","User facing error type for Bash functionality.","BashFeatureUnsupported","BashSyntaxError","The result of running a command","InternalError","","","","","","","Set the root directory to run the commands in.","","","Add a new command to the bash script.","The exit code of the command:","","Add an environment variable to the bash script.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Create a new Bash builder.","Execute the current contents of the bash script.","Combines the stdout and stderr into a single string.","The stderr of the command:","The stdout of the command:","Returns true when the command exited with a zero exit code.","","","","","","","","","","","","","","","A generic trace_stack error to use when you don’t want …","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","FNV1a hash function. Note this is completely insecure, and …","A simple clap argument group for controlling the log level …","The global logger/tracer for stdout, file and full open …","","","","","","","Create a builder to configure the global logger.","Force through logs, traces and metrics, useful in e.g. …","See super::global_fns::flush`","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","","","Convert the clap log level argument group into a log level …","Returns a new opentelemetry::metrics::Meter with the …","See super::global_fns::meter`","Record an exception to the currently active span. Matches …","Register the logger as the global logger/tracer/metric …","Set the response headers from the current span context. So …","See super::global_fns::set_response_headers_from_ctx`","Connect this program’s span to the trace that is …","See super::global_fns::set_span_parent_from_http_headers`","A managed wrapper on creation of the GlobalLog and …","Shutdown the logger, traces and metrics, should be called …","See super::global_fns::shutdown`","Print diagnostics, but nothing else. Disable all logging …","","","","","","","","","Enable verbose logging.","","","Temporarily make the logger global, for the duration of …","Returns true if the current process seems to be running in …","Check if a port is listening for a given ipv4 address and …","A wrapper around redis to make it more concise to use and …","A command builder struct. Committed with RedisBatch::fire.","Wrapper around a lazy redis connection.","A wrapper on an arbitrary json object to allow reading and …","A trait to allow consuming a redis wrapper and returning …","A lua script wrapper. Should be created once per script.","Represents a individual script call with specific args and …","Add a regular argument. I.e. ARGV[i]","Get a new RedisBatch for this connection that commands can …","","","","","","","","","","","","","Cache an async function in redis with an optional expiry. …","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","","","Get a RedisConn redis can be called with.","Extract the inner json object from the redis wrapper.","","","","","","","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Redis keys are all prefixed, use this to finalise a key …","Redis keys are all prefixed, use this to finalise a …","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the result. If redis …","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","Create a new script invoker for an individual script call.","Add a key argument. I.e. KEYS[i]","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Create a new global redis wrapper from the given Redis URL …","Create the script object. Use include_str!() to allow the …","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","","","","","","","","","","","","","","","","","","","","","","","","","","","A global time recorder, used by the timeit! macro.","A struct for recording time spent in various blocks of …","","","","Format a duration in a human readable format.","Format the logs in a verbose, table format.","Returns the argument unchanged.","Calls U::from(self).","","Create a new time recorder.","Time a block of code and log to the time recorder.","Using from creation time rather than the specific …","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,1,3,9,1,3,9,1,3,3,1,3,1,1,3,9,9,1,3,9,3,1,3,9,1,3,9,1,1,3,3,3,3,3,9,1,3,9,1,3,9,1,3,9,1,3,9,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,22,22,21,22,21,22,21,0,21,22,21,22,22,22,22,21,22,21,22,22,0,21,0,21,0,21,0,21,21,0,21,22,21,22,21,22,21,22,22,22,22,21,22,21,0,0,0,0,0,0,0,0,0,37,39,40,39,37,48,50,47,40,39,37,48,50,47,39,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,47,47,48,49,50,47,47,47,47,47,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,39,39,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,50,47,40,39,37,48,50,47,50,47,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,47,40,39,37,48,50,47,40,39,37,48,50,47,47,37,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,47,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,47,40,39,37,48,50,47,40,39,37,48,50,47,40,39,37,48,50,47,40,39,37,48,50,47,50,0,0,60,60,60,0,60,60,60,60,60,60,60,60,60,60,60],"f":"```````````````````{ce{}{}}00000{{bd}b}{ff}{{ce}h{}{}}{{bc}b{{l{j}}}}`{{}b}{{bce}b{{l{j}}}{{l{j}}}}{{fn}A`}{{Abn}A`}{{Abn}{{Af{hAd}}}}{cc{}}000:::{c{{Ah{e}}}{}{}}006{b{{Aj{fAb}}}}{fj}``{fAl}>{cj{}}{c{{Af{e}}}{}{}}00000{cAn{}}00{ce{}{}}00`00{{}B`}{{B`n}A`}0:2954432{{{Bd{Bb}}}Bf}``{BhBh}04444`{{}{{Aj{hB`}}}}{Bj{{Aj{hB`}}}}{{Bln}A`}??{Bn{{Af{BlC`}}}}0{{}{{Cd{Cb}}}}99{c{{Ah{e}}}{}{}}0{Bl{{Cd{Cf}}}}{c{{Aj{ChB`}}}{{l{{Cl{Cj}}}}}}{{Bjc}{{Aj{ChB`}}}{{l{{Cl{Cj}}}}}}{{ce}h{{l{j}}}{{l{j}}}}8{{{Cn{c}}}{{Aj{hB`}}}{}}{{Bj{Cn{c}}}{{Aj{hB`}}}{}}{{D`Db}{{Aj{hB`}}}}{{BjD`Db}{{Aj{hB`}}}}{Cf{{Aj{hB`}}}}>=`{c{{Af{e}}}{}{}}000{cAn{}}0{{BlBn}{{Af{hC`}}}}0`{ce{}{}}0{{Bje}{{Aj{cB`}}}{}{{Df{}{{Dd{c}}}}}}{{}Al}{{CjDh}{{Aj{AlB`}}}}```````{{Djc}DjDl}{DnE`}555555555555{{DnCjc{Cd{Eb}}i}{{Aj{eB`}}}{{l{{Cl{Cj}}}}}{EdDl}{{Ef{}{{Dd{{Aj{eB`}}}}}}}{{Df{}{{Dd{g}}}}}}{{{E`{{Eh{cegikmoAaAc}}}}CjAg}{{E`{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ae}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjBa}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ao}}}}}}{{{E`{{Eh{cegikmoAa}}}}CjAe}{{E`{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ac}}}}}}{{{E`{{Eh{cegikmo}}}}CjAc}{{E`{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Aa}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBc}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ba}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAm}{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ak}}}}}}{{{E`{{Eh{cegikm}}}}CjAa}{{E`{{Eh{cegikm}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{o}}}}}}{{{E`{h}}Cje}{{E`{h}}}{{l{{Cl{Cj}}}}}{{El{}{{Ej{c}}}}}}{{{E`{{Eh{cegik}}}}Cjo}{{E`{{Eh{cegik}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{m}}}}}}{{{E`{{Eh{cegi}}}}Cjm}{{E`{{Eh{cegi}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{k}}}}}}{{{E`{{Eh{ceg}}}}Cjk}{{E`{{Eh{ceg}}}}}EdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{i}}}}}}{{{E`{{Eh{ce}}}}Cji}{{E`{{Eh{ce}}}}}EdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{g}}}}}}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAi}{{E`{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ag}}}}}}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAk}{{E`{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ai}}}}}}{{{E`{{Eh{c}}}}Cjg}{{E`{{Eh{c}}}}}Ed{{l{{Cl{Cj}}}}}{{El{}{{Ej{e}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjAo}{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Am}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBe}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Bc}}}}}}{{{E`{{Eh{cegikmoAaAc}}}}Cj}{{E`{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd}{{{E`{{Eh{ceg}}}}Cj}{{E`{{Eh{ceg}}}}}EdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}Cj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmo}}}}Cj}{{E`{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAe}}}}Cj}{{E`{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}Cj}{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}Cj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}Cj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAg}}}}Cj}{{E`{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikm}}}}Cj}{{E`{{Eh{cegikm}}}}}EdEdEdEdEdEd}{{{E`{{Eh{ce}}}}Cj}{{E`{{Eh{ce}}}}}EdEd}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}Cj}{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{h}}Cj}{{E`{h}}}}{{{E`{{Eh{c}}}}Cj}{{E`{{Eh{c}}}}}Ed}{{{E`{{Eh{cegikmoAa}}}}Cj}{{E`{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd}{{{E`{{Eh{cegik}}}}Cj}{{E`{{Eh{cegik}}}}}EdEdEdEdEd}{{{E`{{Eh{cegi}}}}Cj}{{E`{{Eh{cegi}}}}}EdEdEdEd}{EnEn}{{ce}h{}{}}{F`Dn}{Fbc{}}{{{Fd{c}}}c{FfFh}}{{EnEn}Al}{{ce}Al{}{}}000{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBa}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoAl}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAa}}}}CjAc}{{E`{{Eh{cegikmoAaAl}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjAm}{{E`{{Eh{cegikmoAaAcAeAgAiAkAl}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegi}}}}Cjk}{{E`{{Eh{cegiAl}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{ceg}}}}Cji}{{E`{{Eh{cegAl}}}}}EdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAc}}}}CjAe}{{E`{{Eh{cegikmoAaAcAl}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAk}{{E`{{Eh{cegikmoAaAcAeAgAiAl}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{ce}}}}Cjg}{{E`{{Eh{ceAl}}}}}EdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBc}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBaAl}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAg}{{E`{{Eh{cegikmoAaAcAeAl}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmo}}}}CjAa}{{E`{{Eh{cegikmoAl}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{c}}}}Cje}{{E`{{Eh{cAl}}}}}Ed{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegik}}}}Cjm}{{E`{{Eh{cegikAl}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{h}}Cjc}{{E`{{Eh{Al}}}}}{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjAo}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAl}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAi}{{E`{{Eh{cegikmoAaAcAeAgAl}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{{E`{{Eh{cegikm}}}}Cjo}{{E`{{Eh{cegikmAl}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}}{{DnCj{Cl{Cj}}}j}{{DnCj}j}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}{{Cd{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegik}}}}}{{Cd{{Eh{cegik}}}}}EdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}{{Cd{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}{{Cd{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}{{Cd{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}{{Cd{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{c}}}}}{{Cd{c}}}Ed}{{{E`{h}}}{{Cd{h}}}}{{{E`{{Eh{ce}}}}}{{Cd{{Eh{ce}}}}}EdEd}{{{E`{{Eh{ceg}}}}}{{Cd{{Eh{ceg}}}}}EdEdEd}{{{E`{{Eh{cegi}}}}}{{Cd{{Eh{cegi}}}}}EdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAg}}}}}{{Cd{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikm}}}}}{{Cd{{Eh{cegikm}}}}}EdEdEdEdEdEd}{{{E`{{Eh{cegikmo}}}}}{{Cd{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAa}}}}}{{Cd{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAc}}}}}{{Cd{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAe}}}}}{{Cd{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd}{{{Fd{c}}n}A`{FjFfFh}}{{Enn}A`}{cc{}}00000{Fl{{Fn{{Fd{c}}}}}{FfFh}}1{{{E`{{Eh{ceg}}}}Cji}{{E`{{Eh{ceg{Cd{k}}}}}}}EdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAi}{{E`{{Eh{cegikmoAaAcAeAg{Cd{Ak}}}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBc}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa{Cd{Be}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{h}}Cjc}{{E`{{Eh{{Cd{e}}}}}}}{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAa}}}}CjAc}{{E`{{Eh{cegikmoAa{Cd{Ae}}}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegik}}}}Cjm}{{E`{{Eh{cegik{Cd{o}}}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikm}}}}Cjo}{{E`{{Eh{cegikm{Cd{Aa}}}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{c}}}}Cje}{{E`{{Eh{c{Cd{g}}}}}}}Ed{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjAm}{{E`{{Eh{cegikmoAaAcAeAgAiAk{Cd{Ao}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBa}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo{Cd{Bc}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAk}{{E`{{Eh{cegikmoAaAcAeAgAi{Cd{Am}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAc}}}}CjAe}{{E`{{Eh{cegikmoAaAc{Cd{Ag}}}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAg}{{E`{{Eh{cegikmoAaAcAe{Cd{Ai}}}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{ce}}}}Cjg}{{E`{{Eh{ce{Cd{i}}}}}}}EdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegi}}}}Cjk}{{E`{{Eh{cegi{Cd{m}}}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjAo}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm{Cd{Ba}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{{E`{{Eh{cegikmo}}}}CjAa}{{E`{{Eh{cegikmo{Cd{Ac}}}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Ed}{{Enc}hG`}{ce{}{}}00000{c{{Ah{e}}}{}{}}00000{EnDj}{{Djc}DjDl}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAi}{{E`{{Eh{cegikmoAaAcAe{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ag}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjAo}{{E`{{Eh{cegikmoAaAcAeAgAiAk{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Am}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAm}{{E`{{Eh{cegikmoAaAcAeAgAi{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ak}}}}}}{{{E`{{Eh{cegikmo}}}}CjAc}{{E`{{Eh{cegikmo{Gb{Al}}}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Aa}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBe}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Bc}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjBa}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ao}}}}}}{{{E`{{Eh{cegikmoAaAc}}}}CjAg}{{E`{{Eh{cegikmoAaAc{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ae}}}}}}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAk}{{E`{{Eh{cegikmoAaAcAeAg{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ai}}}}}}{{{E`{{Eh{ce}}}}Cji}{{E`{{Eh{ce{Gb{Al}}}}}}}EdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{g}}}}}}{{{E`{{Eh{c}}}}Cjg}{{E`{{Eh{c{Gb{Al}}}}}}}Ed{{l{{Cl{Cj}}}}}{{El{}{{Ej{e}}}}}}{{{E`{{Eh{cegi}}}}Cjm}{{E`{{Eh{cegi{Gb{Al}}}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{k}}}}}}{{{E`{{Eh{cegikm}}}}CjAa}{{E`{{Eh{cegikm{Gb{Al}}}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{o}}}}}}{{{E`{h}}Cje}{{E`{{Eh{{Gb{Al}}}}}}}{{l{{Cl{Cj}}}}}{{El{}{{Ej{c}}}}}}{{{E`{{Eh{cegikmoAa}}}}CjAe}{{E`{{Eh{cegikmoAa{Gb{Al}}}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ac}}}}}}{{{E`{{Eh{ceg}}}}Cjk}{{E`{{Eh{ceg{Gb{Al}}}}}}}EdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{i}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBc}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo{Gb{Al}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ba}}}}}}{{{E`{{Eh{cegik}}}}Cjo}{{E`{{Eh{cegik{Gb{Al}}}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{m}}}}}}{{{E`{{Eh{cegikmoAaAc}}}}CjAg}{{E`{{Eh{cegikmoAaAc{Gb{{Cd{Ai}}}}}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ae}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBc}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo{Gb{{Cd{Be}}}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ba}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAi}{{E`{{Eh{cegikmoAaAcAe{Gb{{Cd{Ak}}}}}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ag}}}}}Ed}{{{E`{{Eh{cegik}}}}Cjo}{{E`{{Eh{cegik{Gb{{Cd{Aa}}}}}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{m}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAm}{{E`{{Eh{cegikmoAaAcAeAgAi{Gb{{Cd{Ao}}}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ak}}}}}Ed}{{{E`{h}}Cje}{{E`{{Eh{{Gb{{Cd{g}}}}}}}}}{{l{{Cl{Cj}}}}}{{El{}{{Ej{c}}}}}Ed}{{{E`{{Eh{cegi}}}}Cjm}{{E`{{Eh{cegi{Gb{{Cd{o}}}}}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{k}}}}}Ed}{{{E`{{Eh{ce}}}}Cji}{{E`{{Eh{ce{Gb{{Cd{k}}}}}}}}}EdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{g}}}}}Ed}{{{E`{{Eh{c}}}}Cjg}{{E`{{Eh{c{Gb{{Cd{i}}}}}}}}}Ed{{l{{Cl{Cj}}}}}{{El{}{{Ej{e}}}}}Ed}{{{E`{{Eh{cegikm}}}}CjAa}{{E`{{Eh{cegikm{Gb{{Cd{Ac}}}}}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{o}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjBa}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm{Gb{{Cd{Bc}}}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ao}}}}}Ed}{{{E`{{Eh{cegikmoAa}}}}CjAe}{{E`{{Eh{cegikmoAa{Gb{{Cd{Ag}}}}}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ac}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjAo}{{E`{{Eh{cegikmoAaAcAeAgAiAk{Gb{{Cd{Ba}}}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Am}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBe}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa{Gb{{Cd{Bg}}}}}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Bc}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAk}{{E`{{Eh{cegikmoAaAcAeAg{Gb{{Cd{Am}}}}}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Ai}}}}}Ed}{{{E`{{Eh{cegikmo}}}}CjAc}{{E`{{Eh{cegikmo{Gb{{Cd{Ae}}}}}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{Aa}}}}}Ed}{{{E`{{Eh{ceg}}}}Cjk}{{E`{{Eh{ceg{Gb{{Cd{m}}}}}}}}}EdEdEd{{l{{Cl{Cj}}}}}{{El{}{{Ej{i}}}}}Ed}{{{E`{{Eh{ce}}}}Cjk{Cd{Eb}}}{{E`{{Eh{ce}}}}}EdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{gi}}}}}}}}{{{E`{{Eh{cegikmo}}}}CjAe{Cd{Eb}}}{{E`{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AaAc}}}}}}}}{{{E`{{Eh{c}}}}Cji{Cd{Eb}}}{{E`{{Eh{c}}}}}Ed{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{eg}}}}}}}}{{{E`{{Eh{cegik}}}}CjAa{Cd{Eb}}}{{E`{{Eh{cegik}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{mo}}}}}}}}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAk{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AgAi}}}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBe{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{BaBc}}}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjBc{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AoBa}}}}}}}}{{{E`{{Eh{cegikm}}}}CjAc{Cd{Eb}}}{{E`{{Eh{cegikm}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{oAa}}}}}}}}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAm{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AiAk}}}}}}}}{{{E`{h}}Cjg{Cd{Eb}}}{{E`{h}}}{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{ce}}}}}}}}{{{E`{{Eh{ceg}}}}Cjm{Cd{Eb}}}{{E`{{Eh{ceg}}}}}EdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{ik}}}}}}}}{{{E`{{Eh{cegikmoAa}}}}CjAg{Cd{Eb}}}{{E`{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AcAe}}}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAo{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AkAm}}}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBg{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{BcBe}}}}}}}}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjBa{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AmAo}}}}}}}}{{{E`{{Eh{cegikmoAaAc}}}}CjAi{Cd{Eb}}}{{E`{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{AeAg}}}}}}}}{{{E`{{Eh{cegi}}}}Cjo{Cd{Eb}}}{{E`{{Eh{cegi}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}Dl{{El{}{{Ej{{Eh{km}}}}}}}}{{ce}{{Aj{F`B`}}}{{l{j}}}{{l{j}}}}{CjEn}{{{E`{{Eh{cegik}}}}Dj}{{E`{{Eh{cegikm}}}}}EdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAc}}}}Dj}{{E`{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{ce}}}}Dj}{{E`{{Eh{ceg}}}}}EdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegi}}}}Dj}{{E`{{Eh{cegik}}}}}EdEdEdEdEd}{{{E`{{Eh{cegikmo}}}}Dj}{{E`{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd}{{{E`{h}}Dj}{{E`{{Eh{c}}}}}Ed}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBaBc}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAe}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{c}}}}Dj}{{E`{{Eh{ce}}}}}EdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAa}}}}Dj}{{E`{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd}{{{E`{{Eh{ceg}}}}Dj}{{E`{{Eh{cegi}}}}}EdEdEdEd}{{{E`{{Eh{cegikm}}}}Dj}{{E`{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAg}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAg}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikm}}}}Dj}{{E`{{Eh{cegikm}}}}}EdEdEdEdEdEd}{{{E`{{Eh{ce}}}}Dj}{{E`{{Eh{ce}}}}}EdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmo}}}}Dj}{{E`{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{c}}}}Dj}{{E`{{Eh{c}}}}}Ed}{{{E`{h}}Dj}{{E`{h}}}}{{{E`{{Eh{cegikmoAaAcAe}}}}Dj}{{E`{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAa}}}}Dj}{{E`{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd}{{{E`{{Eh{cegik}}}}Dj}{{E`{{Eh{cegik}}}}}EdEdEdEdEd}{{{E`{{Eh{ceg}}}}Dj}{{E`{{Eh{ceg}}}}}EdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}Dj}{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegikmoAaAc}}}}Dj}{{E`{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd}{{{E`{{Eh{cegi}}}}Dj}{{E`{{Eh{cegi}}}}}EdEdEdEd}{{{E`{{Eh{cegi}}}}Cjkm{Cd{Eb}}}{{E`{{Eh{cegi}}}}}EdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}CjAoBa{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAkAm}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAc}}}}CjAeAg{Cd{Eb}}}{{E`{{Eh{cegikmoAaAc}}}}}EdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}CjBaBc{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAo}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikm}}}}CjoAa{Cd{Eb}}}{{E`{{Eh{cegikm}}}}}EdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmo}}}}CjAaAc{Cd{Eb}}}{{E`{{Eh{cegikmo}}}}}EdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{c}}}}Cjeg{Cd{Eb}}}{{E`{{Eh{c}}}}}Ed{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAeAgAi}}}}CjAkAm{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAi}}}}}EdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}CjAmAo{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAk}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{ceg}}}}Cjik{Cd{Eb}}}{{E`{{Eh{ceg}}}}}EdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{ce}}}}Cjgi{Cd{Eb}}}{{E`{{Eh{ce}}}}}EdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{h}}Cjce{Cd{Eb}}}{{E`{h}}}{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}CjBcBe{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAe}}}}CjAgAi{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAe}}}}}EdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegik}}}}Cjmo{Cd{Eb}}}{{E`{{Eh{cegik}}}}}EdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAa}}}}CjAcAe{Cd{Eb}}}{{E`{{Eh{cegikmoAa}}}}}EdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{{{E`{{Eh{cegikmoAaAcAeAg}}}}CjAiAk{Cd{Eb}}}{{E`{{Eh{cegikmoAaAcAeAg}}}}}EdEdEdEdEdEdEdEdEdEdEd{{l{{Cl{Cj}}}}}Dl}{ce{}{}}{c{{Af{e}}}{}{}}00000000000{cAn{}}00000222222{{{Fd{c}}e}h{FfFh}{GdGf}}``33{{}Gh}{Ebj}{Gh{{Aj{jB`}}}}{cc{}}7{c{{Ah{e}}}{}{}}4{{GhCje}c{}{{Df{}{{Dd{c}}}}}}{Gh{{Aj{EbB`}}}}998:","c":[],"p":[[5,"Bash",13],[5,"Path",419],[5,"CmdOut",13],[1,"unit"],[5,"String",420],[10,"Into",421],[5,"Formatter",422],[8,"Result",422],[6,"BashErr",13],[5,"Error",422],[6,"Result",423],[5,"Request",424],[8,"Result",425],[1,"bool"],[5,"TypeId",426],[5,"AnyErr",65],[1,"u8"],[1,"slice"],[1,"u64"],[5,"Command",427],[5,"GlobalLog",80],[5,"ClapLogLevelArgs",80],[5,"ArgMatches",428],[8,"Error",429],[5,"Id",430],[6,"Option",431],[5,"Level",432],[5,"Meter",433],[1,"str"],[6,"Cow",434],[5,"Response",435],[5,"Span",436],[5,"HeaderMap",437],[17,"Output"],[10,"FnOnce",438],[1,"u16"],[5,"RedisScriptInvoker",128],[10,"ToRedisArgs",439],[5,"RedisConn",128],[5,"RedisBatch",128],[5,"Duration",440],[10,"FromRedisValue",439],[10,"Future",441],[1,"tuple"],[17,"Item"],[10,"IntoIterator",442],[5,"RedisScript",128],[5,"Redis",128],[10,"RedisJsonConsume",128],[5,"RedisJson",128],[10,"Serialize",443],[10,"Deserialize",444],[10,"Debug",422],[6,"Value",439],[8,"RedisResult",439],[10,"Hasher",445],[5,"Vec",446],[10,"Sized",447],[10,"RedisWrite",439],[5,"TimeRecorder",402]],"b":[[33,"impl-Debug-for-BashErr"],[34,"impl-Display-for-BashErr"],[69,"impl-Debug-for-AnyErr"],[70,"impl-Display-for-AnyErr"],[150,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[151,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[152,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[153,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[154,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[155,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[156,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[157,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[158,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[159,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[160,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[161,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[162,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[163,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[164,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[165,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[166,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[167,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[168,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[169,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[170,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[171,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[172,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[173,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[174,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[175,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[176,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[177,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[178,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[179,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[180,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[181,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[182,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[183,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[194,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[195,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[196,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[197,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[198,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[199,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[200,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[201,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[202,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[203,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[204,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[205,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[206,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[207,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[208,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[209,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[210,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[213,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[214,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[215,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[216,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[217,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[218,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[219,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(R,)%3E"],[220,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[221,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[222,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[223,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[224,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[225,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[226,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[227,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[228,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[229,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[240,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[241,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[242,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[243,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[244,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[245,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[246,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[247,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[248,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[249,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[250,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[251,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[252,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[253,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[254,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[255,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[256,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[272,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[273,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[274,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[275,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[276,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[277,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[278,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[279,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[280,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[281,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[282,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[283,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[284,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[285,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[286,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[287,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[288,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[289,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[290,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[291,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[292,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[293,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[294,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[295,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[296,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[297,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[298,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[299,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[300,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[301,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[302,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[303,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[304,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[305,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[306,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[307,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[308,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[309,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[310,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[311,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[312,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[313,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[314,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[315,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[316,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[317,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[318,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[319,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[320,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[321,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[322,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[325,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[326,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[327,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[328,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[329,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[330,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[331,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[332,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[333,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[334,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[335,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[336,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[337,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[338,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[339,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[340,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[341,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[342,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[343,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[344,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[345,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[346,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[347,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[348,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[349,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[350,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[351,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[352,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[353,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[354,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[355,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[356,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[357,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[358,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[359,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[360,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[361,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[362,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[363,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[364,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[365,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[366,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[367,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[368,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[369,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[370,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[371,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[372,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[373,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[374,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[375,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"]]}]\ +["bitbazaar",{"doc":"bitbazaar - An assortment of publicly available …","t":"QCQCCCCQCQCQQFGPPFPNNNNNNNNNNONNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNFNNNNNNNNNNNNNHFFFNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNHNNNHNHNHNNHNONNNNNNNNNNNNONNNNHHFFFFKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNJFNNNHNNNNNNNNNNN","n":["anyerr","cli","err","errors","hash","log","misc","panic_on_err","redis","timeit","timing","warn_user_once","warn_user_once_by_id","Bash","BashErr","BashFeatureUnsupported","BashSyntaxError","CmdOut","InternalError","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","chdir","clone","clone_into","cmd","code","default","env","fmt","fmt","fmt","from","from","from","from_ref","into","into","into","into_request","into_request","into_request","new","run","std_all","stderr","stdout","success","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","AnyErr","borrow","borrow_mut","default","fmt","fmt","from","into","into_request","to_string","try_from","try_into","type_id","vzip","fnv1a","ClapLogLevelArgs","GlobalLog","GlobalLogBuilder","augment_args","augment_args_for_update","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","build","builder","custom","default","file","flush","flush","fmt","from","from","from","from_arg_matches","from_arg_matches_mut","group_id","into","into","into","into_request","into_request","into_request","level","level_from","loc_matcher","meter","meter","otlp_grpc","otlp_http","record_exception","register_global","set_response_headers_from_ctx","set_response_headers_from_ctx","set_span_parent_from_http_headers","set_span_parent_from_http_headers","setup_quick_stdout_global_logging","shutdown","shutdown","silent","stdout","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","verbose","vzip","vzip","vzip","with_tmp_global","in_ci","is_tcp_port_listening","Redis","RedisBatch","RedisConn","RedisJson","RedisJsonConsume","RedisScript","RedisScriptInvoker","arg","batch","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cached_fn","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clear_namespace","clone","clone_into","conn","consume","consume","eq","equivalent","equivalent","equivalent","equivalent","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","exists","final_key","final_namespace","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fire","fmt","fmt","from","from","from","from","from","from","from_redis_value","from_ref","get","get","get","get","get","get","get","get","get","get","get","get","get","get","get","get","get","hash","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","invoker","key","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mexists","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mget","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","mset","new","new","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","script_no_return","set","set","set","set","set","set","set","set","set","set","set","set","set","set","set","set","set","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","write_redis_args","GLOBAL_TIME_RECORDER","TimeRecorder","borrow","borrow_mut","default","format_duration","format_verbose","from","into","into_request","new","timeit","total_elapsed","try_from","try_into","type_id","vzip"],"q":[[0,"bitbazaar"],[13,"bitbazaar::cli"],[65,"bitbazaar::errors"],[79,"bitbazaar::hash"],[80,"bitbazaar::log"],[145,"bitbazaar::misc"],[147,"bitbazaar::redis"],[421,"bitbazaar::timing"],[438,"std::path"],[439,"alloc::string"],[440,"core::convert"],[441,"core::fmt"],[442,"core::fmt"],[443,"tonic::request"],[444,"error_stack::result"],[445,"core::any"],[446,"clap_builder::builder::command"],[447,"std::path"],[448,"clap_builder"],[449,"clap_builder::util::id"],[450,"core::option"],[451,"tracing_core::metadata"],[452,"regex::regex::string"],[453,"opentelemetry::metrics::meter"],[454,"alloc::borrow"],[455,"http::response"],[456,"tracing::span"],[457,"http::header::map"],[458,"core::ops::function"],[459,"redis::types"],[460,"core::time"],[461,"redis::types"],[462,"core::iter::traits::collect"],[463,"serde::ser"],[464,"serde::de"],[465,"core::fmt"],[466,"alloc::vec"],[467,"core::marker"],[468,"redis::types"]],"d":["A macro for building Report<AnyErr> objects with string …","Command line interface utilities.","A macro for building Report<ArbitraryErrorStackErr> …","Error handling utilities.","Hashing utilities.","Logging utilities","Completely miscellaneous utilities","When working in a function that cannot return a result, …","Redis utilities","Time a block of code and log to the global time recorder.","Timing utilities","Warn a user once, with uniqueness determined by the …","Warn a user once, with uniqueness determined by the given …","Execute an arbitrary bash script.","User facing error type for Bash functionality.","BashFeatureUnsupported","BashSyntaxError","The result of running a command","InternalError","","","","","","","Set the root directory to run the commands in.","","","Add a new command to the bash script.","The exit code of the command:","","Add an environment variable to the bash script.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Create a new Bash builder.","Execute the current contents of the bash script.","Combines the stdout and stderr into a single string.","The stderr of the command:","The stdout of the command:","Returns true when the command exited with a zero exit code.","","","","","","","","","","","","","","","A generic trace_stack error to use when you don’t want …","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","FNV1a hash function. Note this is completely insecure, and …","A simple clap argument group for controlling the log level …","The global logger/tracer for stdout, file and full open …","The global log builder. See the GlobalLog struct for more …","","","","","","","","","Build the global log from the configured builder.","Create a builder to configure the global logger.","Write to a custom writer.","","Write to a file:","Force through logs, traces and metrics, useful in e.g. …","See super::global_fns::flush`","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Convert the clap log level argument group into a log level …","Set the minimum level to log for.","A regex that must be satisfied for a log to be accepted by …","Returns a new opentelemetry::metrics::Meter with the …","See super::global_fns::meter`","Write to an open telemetry provider via grpc. This works …","Write to an open telemetry provider via http. This works …","Record an exception to the currently active span. Matches …","Register the logger as the global logger/tracer/metric …","Set the response headers from the current span context. So …","See super::global_fns::set_response_headers_from_ctx`","Connect this program’s span to the trace that is …","See super::global_fns::set_span_parent_from_http_headers`","A managed wrapper on creation of the GlobalLog and …","Shutdown the logger, traces and metrics, should be called …","See super::global_fns::shutdown`","Print diagnostics, but nothing else. Disable all logging …","Write to stdout:","","","","","","","","","","","","Enable verbose logging.","","","","Temporarily make the logger global, for the duration of …","Returns true if the current process seems to be running in …","Check if a port is listening for a given ipv4 address and …","A wrapper around redis to make it more concise to use and …","A command builder struct. Committed with RedisBatch::fire.","Wrapper around a lazy redis connection.","A wrapper on an arbitrary json object to allow reading and …","A trait to allow consuming a redis wrapper and returning …","A lua script wrapper. Should be created once per script.","Represents a individual script call with specific args and …","Add a regular argument. I.e. ARGV[i]","Get a new RedisBatch for this connection that commands can …","","","","","","","","","","","","","Cache an async function in redis with an optional expiry. …","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear one or more keys.","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","Clear all keys under a given namespace","","","Get a RedisConn redis can be called with.","Extract the inner json object from the redis wrapper.","","","","","","","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Check if a key exists.","Redis keys are all prefixed, use this to finalise a key …","Redis keys are all prefixed, use this to finalise a …","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the result. If redis …","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","Commit the batch and return the command results in a tuple.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","Get a value from a key. Returning None if the key doesn’…","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","Create a new script invoker for an individual script call.","Add a key argument. I.e. KEYS[i]","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Check if multiple keys exists.","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Get multiple values (MGET) of the same type at once. …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Set multiple values (MSET) of the same type at once. If …","Create a new global redis wrapper from the given Redis URL …","Create the script object. Use include_str!() to allow the …","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script).","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Run an arbitrary redis (lua script). But discards any …","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","Set a key to a value with an optional expiry.","","","","","","","","","","","","","","","","","","","","","","","","","","","A global time recorder, used by the timeit! macro.","A struct for recording time spent in various blocks of …","","","","Format a duration in a human readable format.","Format the logs in a verbose, table format.","Returns the argument unchanged.","Calls U::from(self).","","Create a new time recorder.","Time a block of code and log to the time recorder.","Using from creation time rather than the specific …","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,1,3,9,1,3,9,1,3,3,1,3,1,1,3,9,9,1,3,9,3,1,3,9,1,3,9,1,1,3,3,3,3,3,9,1,3,9,1,3,9,1,3,9,1,3,9,0,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,24,24,22,24,21,22,24,21,21,22,21,21,21,0,22,24,22,24,21,24,24,24,22,24,21,22,24,21,24,21,21,0,22,21,21,0,22,0,22,0,22,22,0,22,24,21,22,24,21,22,24,21,22,24,21,24,24,24,22,24,21,22,0,0,0,0,0,0,0,0,0,40,42,43,42,40,51,53,50,43,42,40,51,53,50,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,50,50,51,52,53,50,50,50,50,50,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,53,50,43,42,40,51,53,50,53,50,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,50,43,42,40,51,53,50,43,42,40,51,53,50,50,40,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,51,50,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,50,43,42,40,51,53,50,43,42,40,51,53,50,43,42,40,51,53,50,43,42,40,51,53,50,53,0,0,63,63,63,0,63,63,63,63,63,63,63,63,63,63,63],"f":"```````````````````{ce{}{}}00000{{bd}b}{ff}{{ce}h{}{}}{{bc}b{{l{j}}}}`{{}b}{{bce}b{{l{j}}}{{l{j}}}}{{fn}A`}{{Abn}A`}{{Abn}{{Af{hAd}}}}{cc{}}000:::{c{{Ah{e}}}{}{}}006{b{{Aj{fAb}}}}{fj}``{fAl}>{cj{}}{c{{Af{e}}}{}{}}00000{cAn{}}00{ce{}{}}00`00{{}B`}{{B`n}A`}0:2954432{{{Bd{Bb}}}Bf}```{BhBh}0444444{Bj{{Aj{BlB`}}}}{{}Bj}{{BjAlAlAlAl}Bj}1{{Bjce}Bj{{l{j}}}{{l{Bn}}}}{{}{{Aj{hB`}}}}{Bl{{Aj{hB`}}}}{{C`n}A`}{cc{}}00{Cb{{Af{C`Cd}}}}0{{}{{Ch{Cf}}}}>>>{c{{Ah{e}}}{}{}}00{C`{{Ch{Cj}}}}{{BjCj}{{Aj{BjB`}}}}{{BjCl}{{Aj{BjB`}}}}{c{{Aj{CnB`}}}{{l{{Db{D`}}}}}}{{Blc}{{Aj{CnB`}}}{{l{{Db{D`}}}}}}{{BjDdce}Bj{{l{j}}}{{l{j}}}}{{Bjceg}Bj{{l{j}}}{{l{j}}}{{l{j}}}}{{ce}h{{l{j}}}{{l{j}}}}={{{Df{c}}}{{Aj{hB`}}}{}}{{Bl{Df{c}}}{{Aj{hB`}}}{}}{{DhDj}{{Aj{hB`}}}}{{BlDhDj}{{Aj{hB`}}}}{Cj{{Aj{hB`}}}}{{}{{Aj{hB`}}}}{Bl{{Aj{hB`}}}}`{{BjAlAl}Bj}{c{{Af{e}}}{}{}}00000{cAn{}}00{{C`Cb}{{Af{hCd}}}}0`{ce{}{}}00{{Ble}{{Aj{cB`}}}{}{{Dn{}{{Dl{c}}}}}}{{}Al}{{D`Dd}{{Aj{AlB`}}}}```````{{E`c}E`Eb}{EdEf}555555555555{{EdD`c{Ch{Eh}}i}{{Aj{eB`}}}{{l{{Db{D`}}}}}{EjEb}{{El{}{{Dl{{Aj{eB`}}}}}}}{{Dn{}{{Dl{g}}}}}}{{{Ef{{En{ceg}}}}D`k}{{Ef{{En{ceg}}}}}EjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{i}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`Bc}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ba}}}}}}{{{Ef{{En{ce}}}}D`i}{{Ef{{En{ce}}}}}EjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{g}}}}}}{{{Ef{{En{cegikm}}}}D`Aa}{{Ef{{En{cegikm}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{o}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`Ao}{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Am}}}}}}{{{Ef{{En{c}}}}D`g}{{Ef{{En{c}}}}}Ej{{l{{Db{D`}}}}}{{Fb{}{{F`{e}}}}}}{{{Ef{{En{cegikmo}}}}D`Ac}{{Ef{{En{cegikmo}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Aa}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`Ba}{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ao}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`Be}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Bc}}}}}}{{{Ef{{En{cegikmoAa}}}}D`Ae}{{Ef{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ac}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`Am}{{Ef{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ak}}}}}}{{{Ef{h}}D`e}{{Ef{h}}}{{l{{Db{D`}}}}}{{Fb{}{{F`{c}}}}}}{{{Ef{{En{cegikmoAaAcAe}}}}D`Ai}{{Ef{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ag}}}}}}{{{Ef{{En{cegikmoAaAc}}}}D`Ag}{{Ef{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ae}}}}}}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`Ak}{{Ef{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ai}}}}}}{{{Ef{{En{cegi}}}}D`m}{{Ef{{En{cegi}}}}}EjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{k}}}}}}{{{Ef{{En{cegik}}}}D`o}{{Ef{{En{cegik}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{m}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`}{{Ef{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegi}}}}D`}{{Ef{{En{cegi}}}}}EjEjEjEj}{{{Ef{{En{ceg}}}}D`}{{Ef{{En{ceg}}}}}EjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{ce}}}}D`}{{Ef{{En{ce}}}}}EjEj}{{{Ef{{En{cegikmoAaAcAe}}}}D`}{{Ef{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAa}}}}D`}{{Ef{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmo}}}}D`}{{Ef{{En{cegikmo}}}}}EjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`}{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{h}}D`}{{Ef{h}}}}{{{Ef{{En{cegikm}}}}D`}{{Ef{{En{cegikm}}}}}EjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`}{{Ef{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAc}}}}D`}{{Ef{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`}{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegik}}}}D`}{{Ef{{En{cegik}}}}}EjEjEjEjEj}{{{Ef{{En{c}}}}D`}{{Ef{{En{c}}}}}Ej}{FdFd}{{ce}h{}{}}{FfEd}{Fhc{}}{{{Fj{c}}}c{FlFn}}{{FdFd}Al}{{ce}Al{}{}}000{{{Ef{{En{cegi}}}}D`k}{{Ef{{En{cegiAl}}}}}EjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAa}}}}D`Ac}{{Ef{{En{cegikmoAaAl}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{ce}}}}D`g}{{Ef{{En{ceAl}}}}}EjEj{{l{{Db{D`}}}}}}{{{Ef{{En{ceg}}}}D`i}{{Ef{{En{cegAl}}}}}EjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAe}}}}D`Ag}{{Ef{{En{cegikmoAaAcAeAl}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`Ai}{{Ef{{En{cegikmoAaAcAeAgAl}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAc}}}}D`Ae}{{Ef{{En{cegikmoAaAcAl}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`Ak}{{Ef{{En{cegikmoAaAcAeAgAiAl}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegik}}}}D`m}{{Ef{{En{cegikAl}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikm}}}}D`o}{{Ef{{En{cegikmAl}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{c}}}}D`e}{{Ef{{En{cAl}}}}}Ej{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`Am}{{Ef{{En{cegikmoAaAcAeAgAiAkAl}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`Bc}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBaAl}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmo}}}}D`Aa}{{Ef{{En{cegikmoAl}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{h}}D`c}{{Ef{{En{Al}}}}}{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`Ba}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoAl}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`Ao}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAl}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}}{{EdD`{Db{D`}}}j}{{EdD`}j}{{{Ef{{En{cegik}}}}}{{Ch{{En{cegik}}}}}EjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}{{Ch{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{c}}}}}{{Ch{c}}}Ej}{{{Ef{h}}}{{Ch{h}}}}{{{Ef{{En{ce}}}}}{{Ch{{En{ce}}}}}EjEj}{{{Ef{{En{ceg}}}}}{{Ch{{En{ceg}}}}}EjEjEj}{{{Ef{{En{cegi}}}}}{{Ch{{En{cegi}}}}}EjEjEjEj}{{{Ef{{En{cegikm}}}}}{{Ch{{En{cegikm}}}}}EjEjEjEjEjEj}{{{Ef{{En{cegikmo}}}}}{{Ch{{En{cegikmo}}}}}EjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAa}}}}}{{Ch{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAc}}}}}{{Ch{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAe}}}}}{{Ch{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAg}}}}}{{Ch{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}}{{Ch{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}{{Ch{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}{{Ch{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}{{Ch{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Fj{c}}n}A`{G`FlFn}}{{Fdn}A`}{cc{}}00000{Gb{{Gd{{Fj{c}}}}}{FlFn}}1{{{Ef{{En{c}}}}D`e}{{Ef{{En{c{Ch{g}}}}}}}Ej{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`Ai}{{Ef{{En{cegikmoAaAcAeAg{Ch{Ak}}}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`Ba}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo{Ch{Bc}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{h}}D`c}{{Ef{{En{{Ch{e}}}}}}}{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmo}}}}D`Aa}{{Ef{{En{cegikmo{Ch{Ac}}}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`Am}{{Ef{{En{cegikmoAaAcAeAgAiAk{Ch{Ao}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikm}}}}D`o}{{Ef{{En{cegikm{Ch{Aa}}}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegi}}}}D`k}{{Ef{{En{cegi{Ch{m}}}}}}}EjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{ceg}}}}D`i}{{Ef{{En{ceg{Ch{k}}}}}}}EjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAa}}}}D`Ac}{{Ef{{En{cegikmoAa{Ch{Ae}}}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`Bc}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa{Ch{Be}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAc}}}}D`Ae}{{Ef{{En{cegikmoAaAc{Ch{Ag}}}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`Ao}{{Ef{{En{cegikmoAaAcAeAgAiAkAm{Ch{Ba}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{ce}}}}D`g}{{Ef{{En{ce{Ch{i}}}}}}}EjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAe}}}}D`Ag}{{Ef{{En{cegikmoAaAcAe{Ch{Ai}}}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegik}}}}D`m}{{Ef{{En{cegik{Ch{o}}}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`Ak}{{Ef{{En{cegikmoAaAcAeAgAi{Ch{Am}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Ej}{{Fdc}hGf}{ce{}{}}00000{c{{Ah{e}}}{}{}}00000{FdE`}{{E`c}E`Eb}{{{Ef{{En{c}}}}D`g}{{Ef{{En{c{Gh{Al}}}}}}}Ej{{l{{Db{D`}}}}}{{Fb{}{{F`{e}}}}}}{{{Ef{{En{cegik}}}}D`o}{{Ef{{En{cegik{Gh{Al}}}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{m}}}}}}{{{Ef{{En{cegikmoAa}}}}D`Ae}{{Ef{{En{cegikmoAa{Gh{Al}}}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ac}}}}}}{{{Ef{h}}D`e}{{Ef{{En{{Gh{Al}}}}}}}{{l{{Db{D`}}}}}{{Fb{}{{F`{c}}}}}}{{{Ef{{En{cegikmoAaAc}}}}D`Ag}{{Ef{{En{cegikmoAaAc{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ae}}}}}}{{{Ef{{En{ceg}}}}D`k}{{Ef{{En{ceg{Gh{Al}}}}}}}EjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{i}}}}}}{{{Ef{{En{cegikmoAaAcAe}}}}D`Ai}{{Ef{{En{cegikmoAaAcAe{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ag}}}}}}{{{Ef{{En{cegikmo}}}}D`Ac}{{Ef{{En{cegikmo{Gh{Al}}}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Aa}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`Be}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Bc}}}}}}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`Ak}{{Ef{{En{cegikmoAaAcAeAg{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ai}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`Am}{{Ef{{En{cegikmoAaAcAeAgAi{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ak}}}}}}{{{Ef{{En{cegi}}}}D`m}{{Ef{{En{cegi{Gh{Al}}}}}}}EjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{k}}}}}}{{{Ef{{En{cegikm}}}}D`Aa}{{Ef{{En{cegikm{Gh{Al}}}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{o}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`Ao}{{Ef{{En{cegikmoAaAcAeAgAiAk{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Am}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`Bc}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ba}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`Ba}{{Ef{{En{cegikmoAaAcAeAgAiAkAm{Gh{Al}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ao}}}}}}{{{Ef{{En{ce}}}}D`i}{{Ef{{En{ce{Gh{Al}}}}}}}EjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{g}}}}}}{{{Ef{{En{cegikmoAaAcAe}}}}D`Ai}{{Ef{{En{cegikmoAaAcAe{Gh{{Ch{Ak}}}}}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ag}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`Ak}{{Ef{{En{cegikmoAaAcAeAg{Gh{{Ch{Am}}}}}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ai}}}}}Ej}{{{Ef{{En{cegikmoAa}}}}D`Ae}{{Ef{{En{cegikmoAa{Gh{{Ch{Ag}}}}}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ac}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`Ba}{{Ef{{En{cegikmoAaAcAeAgAiAkAm{Gh{{Ch{Bc}}}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ao}}}}}Ej}{{{Ef{{En{ce}}}}D`i}{{Ef{{En{ce{Gh{{Ch{k}}}}}}}}}EjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{g}}}}}Ej}{{{Ef{h}}D`e}{{Ef{{En{{Gh{{Ch{g}}}}}}}}}{{l{{Db{D`}}}}}{{Fb{}{{F`{c}}}}}Ej}{{{Ef{{En{cegik}}}}D`o}{{Ef{{En{cegik{Gh{{Ch{Aa}}}}}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{m}}}}}Ej}{{{Ef{{En{ceg}}}}D`k}{{Ef{{En{ceg{Gh{{Ch{m}}}}}}}}}EjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{i}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`Ao}{{Ef{{En{cegikmoAaAcAeAgAiAk{Gh{{Ch{Ba}}}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Am}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`Be}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa{Gh{{Ch{Bg}}}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Bc}}}}}Ej}{{{Ef{{En{cegikmo}}}}D`Ac}{{Ef{{En{cegikmo{Gh{{Ch{Ae}}}}}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Aa}}}}}Ej}{{{Ef{{En{cegikmoAaAc}}}}D`Ag}{{Ef{{En{cegikmoAaAc{Gh{{Ch{Ai}}}}}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ae}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`Am}{{Ef{{En{cegikmoAaAcAeAgAi{Gh{{Ch{Ao}}}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ak}}}}}Ej}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`Bc}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo{Gh{{Ch{Be}}}}}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{Ba}}}}}Ej}{{{Ef{{En{c}}}}D`g}{{Ef{{En{c{Gh{{Ch{i}}}}}}}}}Ej{{l{{Db{D`}}}}}{{Fb{}{{F`{e}}}}}Ej}{{{Ef{{En{cegikm}}}}D`Aa}{{Ef{{En{cegikm{Gh{{Ch{Ac}}}}}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{o}}}}}Ej}{{{Ef{{En{cegi}}}}D`m}{{Ef{{En{cegi{Gh{{Ch{o}}}}}}}}}EjEjEjEj{{l{{Db{D`}}}}}{{Fb{}{{F`{k}}}}}Ej}{{{Ef{{En{cegikm}}}}D`Ac{Ch{Eh}}}{{Ef{{En{cegikm}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{oAa}}}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`Ao{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AkAm}}}}}}}}{{{Ef{{En{cegikmo}}}}D`Ae{Ch{Eh}}}{{Ef{{En{cegikmo}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AaAc}}}}}}}}{{{Ef{{En{c}}}}D`i{Ch{Eh}}}{{Ef{{En{c}}}}}Ej{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{eg}}}}}}}}{{{Ef{{En{cegi}}}}D`o{Ch{Eh}}}{{Ef{{En{cegi}}}}}EjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{km}}}}}}}}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`Am{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AiAk}}}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`Bg{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{BcBe}}}}}}}}{{{Ef{{En{cegik}}}}D`Aa{Ch{Eh}}}{{Ef{{En{cegik}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{mo}}}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`Ba{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AmAo}}}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`Be{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{BaBc}}}}}}}}{{{Ef{{En{cegikmoAaAc}}}}D`Ai{Ch{Eh}}}{{Ef{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AeAg}}}}}}}}{{{Ef{{En{cegikmoAa}}}}D`Ag{Ch{Eh}}}{{Ef{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AcAe}}}}}}}}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`Bc{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AoBa}}}}}}}}{{{Ef{{En{ceg}}}}D`m{Ch{Eh}}}{{Ef{{En{ceg}}}}}EjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{ik}}}}}}}}{{{Ef{h}}D`g{Ch{Eh}}}{{Ef{h}}}{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{ce}}}}}}}}{{{Ef{{En{cegikmoAaAcAe}}}}D`Ak{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{AgAi}}}}}}}}{{{Ef{{En{ce}}}}D`k{Ch{Eh}}}{{Ef{{En{ce}}}}}EjEj{{l{{Db{D`}}}}}Eb{{Fb{}{{F`{{En{gi}}}}}}}}{{ce}{{Aj{FfB`}}}{{l{j}}}{{l{j}}}}{D`Fd}{{{Ef{{En{cegikmoAaAcAeAg}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{ceg}}}}E`}{{Ef{{En{cegi}}}}}EjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikm}}}}E`}{{Ef{{En{cegikmo}}}}}EjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAa}}}}E`}{{Ef{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAc}}}}E`}{{Ef{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{ce}}}}E`}{{Ef{{En{ceg}}}}}EjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmo}}}}E`}{{Ef{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj}{{{Ef{h}}E`}{{Ef{{En{c}}}}}Ej}{{{Ef{{En{cegi}}}}E`}{{Ef{{En{cegik}}}}}EjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAe}}}}E`}{{Ef{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBaBc}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegik}}}}E`}{{Ef{{En{cegikm}}}}}EjEjEjEjEjEj}{{{Ef{{En{c}}}}E`}{{Ef{{En{ce}}}}}EjEj}{{{Ef{{En{c}}}}E`}{{Ef{{En{c}}}}}Ej}{{{Ef{{En{cegikmoAaAcAe}}}}E`}{{Ef{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegi}}}}E`}{{Ef{{En{cegi}}}}}EjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{ceg}}}}E`}{{Ef{{En{ceg}}}}}EjEjEj}{{{Ef{{En{cegikmoAaAcAeAg}}}}E`}{{Ef{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{ce}}}}E`}{{Ef{{En{ce}}}}}EjEj}{{{Ef{{En{cegikmoAaAc}}}}E`}{{Ef{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAa}}}}E`}{{Ef{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj}{{{Ef{{En{cegikm}}}}E`}{{Ef{{En{cegikm}}}}}EjEjEjEjEjEj}{{{Ef{{En{cegik}}}}E`}{{Ef{{En{cegik}}}}}EjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{h}}E`}{{Ef{h}}}}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}E`}{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj}{{{Ef{{En{cegikmo}}}}E`}{{Ef{{En{cegikmo}}}}}EjEjEjEjEjEjEj}{{{Ef{{En{c}}}}D`eg{Ch{Eh}}}{{Ef{{En{c}}}}}Ej{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmo}}}}D`AaAc{Ch{Eh}}}{{Ef{{En{cegikmo}}}}}EjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}D`BaBc{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAo}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{ceg}}}}D`ik{Ch{Eh}}}{{Ef{{En{ceg}}}}}EjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAeAgAi}}}}D`AkAm{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAi}}}}}EjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}D`AmAo{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAk}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAe}}}}D`AgAi{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAe}}}}}EjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegik}}}}D`mo{Ch{Eh}}}{{Ef{{En{cegik}}}}}EjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAc}}}}D`AeAg{Ch{Eh}}}{{Ef{{En{cegikmoAaAc}}}}}EjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}D`BcBe{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAkAmAoBa}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAeAg}}}}D`AiAk{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAg}}}}}EjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{h}}D`ce{Ch{Eh}}}{{Ef{h}}}{{l{{Db{D`}}}}}Eb}{{{Ef{{En{ce}}}}D`gi{Ch{Eh}}}{{Ef{{En{ce}}}}}EjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAa}}}}D`AcAe{Ch{Eh}}}{{Ef{{En{cegikmoAa}}}}}EjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegi}}}}D`km{Ch{Eh}}}{{Ef{{En{cegi}}}}}EjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}D`AoBa{Ch{Eh}}}{{Ef{{En{cegikmoAaAcAeAgAiAkAm}}}}}EjEjEjEjEjEjEjEjEjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{{{Ef{{En{cegikm}}}}D`oAa{Ch{Eh}}}{{Ef{{En{cegikm}}}}}EjEjEjEjEjEj{{l{{Db{D`}}}}}Eb}{ce{}{}}{c{{Af{e}}}{}{}}00000000000{cAn{}}00000222222{{{Fj{c}}e}h{FlFn}{GjGl}}``33{{}Gn}{Ehj}{Gn{{Aj{jB`}}}}{cc{}}7{c{{Ah{e}}}{}{}}4{{GnD`e}c{}{{Dn{}{{Dl{c}}}}}}{Gn{{Aj{EhB`}}}}998:","c":[],"p":[[5,"Bash",13],[5,"Path",438],[5,"CmdOut",13],[1,"unit"],[5,"String",439],[10,"Into",440],[5,"Formatter",441],[8,"Result",441],[6,"BashErr",13],[5,"Error",441],[6,"Result",442],[5,"Request",443],[8,"Result",444],[1,"bool"],[5,"TypeId",445],[5,"AnyErr",65],[1,"u8"],[1,"slice"],[1,"u64"],[5,"Command",446],[5,"GlobalLogBuilder",80],[5,"GlobalLog",80],[5,"PathBuf",438],[5,"ClapLogLevelArgs",80],[5,"ArgMatches",447],[8,"Error",448],[5,"Id",449],[6,"Option",450],[5,"Level",451],[5,"Regex",452],[5,"Meter",453],[1,"str"],[6,"Cow",454],[1,"u16"],[5,"Response",455],[5,"Span",456],[5,"HeaderMap",457],[17,"Output"],[10,"FnOnce",458],[5,"RedisScriptInvoker",147],[10,"ToRedisArgs",459],[5,"RedisConn",147],[5,"RedisBatch",147],[5,"Duration",460],[10,"FromRedisValue",459],[10,"Future",461],[1,"tuple"],[17,"Item"],[10,"IntoIterator",462],[5,"RedisScript",147],[5,"Redis",147],[10,"RedisJsonConsume",147],[5,"RedisJson",147],[10,"Serialize",463],[10,"Deserialize",464],[10,"Debug",441],[6,"Value",459],[8,"RedisResult",459],[10,"Hasher",465],[5,"Vec",466],[10,"Sized",467],[10,"RedisWrite",459],[5,"TimeRecorder",421]],"b":[[33,"impl-Debug-for-BashErr"],[34,"impl-Display-for-BashErr"],[69,"impl-Display-for-AnyErr"],[70,"impl-Debug-for-AnyErr"],[169,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[170,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[171,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[172,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[173,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[174,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[175,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[176,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[177,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[178,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[179,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[180,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[181,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[182,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[183,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[184,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[185,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[186,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[187,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[188,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[189,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[190,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[191,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[192,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[193,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[194,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[195,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[196,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[197,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[198,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[199,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[200,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[201,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[202,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[213,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[214,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[215,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[216,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[217,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[218,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[219,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[220,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[221,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[222,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[223,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[224,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[225,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[226,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[227,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[228,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[229,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[232,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[233,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[234,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(R,)%3E"],[235,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[236,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[237,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[238,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[239,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[240,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[241,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[242,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[243,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[244,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[245,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[246,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[247,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[248,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[259,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[260,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[261,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[262,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[263,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[264,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[265,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[266,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[267,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[268,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[269,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[270,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[271,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[272,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[273,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[274,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[275,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[291,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[292,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[293,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[294,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[295,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[296,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[297,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[298,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[299,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[300,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[301,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[302,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[303,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[304,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[305,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[306,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[307,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[308,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[309,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[310,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[311,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[312,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[313,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[314,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[315,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[316,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[317,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[318,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[319,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[320,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[321,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[322,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[323,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[324,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[325,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[326,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[327,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[328,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[329,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[330,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[331,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[332,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[333,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[334,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[335,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[336,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[337,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[338,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[339,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[340,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[341,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[344,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[345,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[346,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[347,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[348,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[349,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[350,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[351,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[352,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[353,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[354,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[355,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[356,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[357,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[358,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[359,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[360,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[361,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[362,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[363,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[364,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[365,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[366,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[367,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[368,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[369,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[370,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[371,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"],[372,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[373,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[374,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[375,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[376,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[377,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[378,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,)%3E"],[379,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G)%3E"],[380,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O)%3E"],[381,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C)%3E"],[382,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E"],[383,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M)%3E"],[384,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E"],[385,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E)%3E"],[386,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E"],[387,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N,+O,+P)%3E"],[388,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E"],[389,"impl-RedisBatch%3C\'a,+\'b,+\'c%3E"],[390,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B)%3E"],[391,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H)%3E"],[392,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D)%3E"],[393,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L,+M,+N)%3E"],[394,"impl-RedisBatch%3C\'a,+\'b,+\'c,+(A,+B,+C,+D,+E,+F)%3E"]]}]\ ]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); diff --git a/rust_ref/doc/src/bitbazaar/log/global_log/builder.rs.html b/rust_ref/doc/src/bitbazaar/log/global_log/builder.rs.html index a45d5e6d..9b48450a 100644 --- a/rust_ref/doc/src/bitbazaar/log/global_log/builder.rs.html +++ b/rust_ref/doc/src/bitbazaar/log/global_log/builder.rs.html @@ -254,7 +254,6 @@

    Files

    252 253 254 -255
    use std::path::PathBuf;
     
     use tracing::Level;
    @@ -317,7 +316,7 @@ 

    Files

    pub shared: SharedOpts, } -#[cfg(feature = "opentelemetry")] +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] pub struct OtlpConf { #[cfg(feature = "opentelemetry-grpc")] /// The localhost port the open telemetry collector is running on and accepting grpc connections: @@ -335,7 +334,7 @@

    Files

    /// The global log builder. See the [`GlobalLog`] struct for more information. #[derive(Default)] pub struct GlobalLogBuilder { - pub outputs: Vec<Output>, + pub(crate) outputs: Vec<Output>, } impl GlobalLogBuilder { @@ -403,8 +402,7 @@

    Files

    self } - #[cfg(feature = "opentelemetry")] - #[cfg(feature = "opentelemetry-grpc")] + #[cfg(feature = "opentelemetry-grpc")] /// Write to an open telemetry provider via grpc. This works with the tokio runtime. /// /// Arguments: @@ -428,8 +426,7 @@

    Files

    self } - #[cfg(feature = "opentelemetry")] - #[cfg(feature = "opentelemetry-http")] + #[cfg(feature = "opentelemetry-http")] /// Write to an open telemetry provider via http. This works with wasm! /// /// Arguments: @@ -480,7 +477,7 @@

    Files

    Output::Stdout(conf) => &mut conf.shared, Output::File(conf) => &mut conf.shared, Output::Custom(conf) => &mut conf.shared, - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] Output::Otlp(conf) => &mut conf.shared, }) } else { @@ -495,17 +492,18 @@

    Files

    Stdout(StdoutConf), File(FileConf), Custom(CustomConf), - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] Otlp(OtlpConf), } impl Output { - pub fn shared_opts(&self) -> &SharedOpts { + #[allow(dead_code)] + pub fn shared_opts(&self) -> &SharedOpts { match self { Output::Stdout(conf) => &conf.shared, Output::File(conf) => &conf.shared, Output::Custom(conf) => &conf.shared, - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] Output::Otlp(conf) => &conf.shared, } } diff --git a/rust_ref/doc/src/bitbazaar/log/global_log/global_fns.rs.html b/rust_ref/doc/src/bitbazaar/log/global_log/global_fns.rs.html index dd6a83d7..66d2e0c1 100644 --- a/rust_ref/doc/src/bitbazaar/log/global_log/global_fns.rs.html +++ b/rust_ref/doc/src/bitbazaar/log/global_log/global_fns.rs.html @@ -81,7 +81,7 @@

    Files

    super::exceptions::record_exception_inner(message, stacktrace, "Err"); } -#[cfg(feature = "opentelemetry")] +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] /// Returns a new [`opentelemetry::metrics::Meter`] with the provided name and default configuration. /// /// A [opentelemetry::metrics::Meter] should be scoped at most to a single application or crate. The @@ -96,7 +96,7 @@

    Files

    get_global()?.meter(name) } -#[cfg(feature = "opentelemetry")] +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] /// Connect this program's span to the trace that is represented by the provided HTTP headers. /// E.g. connect an axum handler's trace/span to the nginx trace/span. pub fn set_span_parent_from_http_headers( @@ -106,7 +106,7 @@

    Files

    get_global()?.set_span_parent_from_http_headers(span, headers) } -#[cfg(feature = "opentelemetry")] +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] /// Set the response headers from the current span context. So downstream services can continue the current trace. pub fn set_response_headers_from_ctx<B>(response: &mut http::Response<B>) -> Result<(), AnyErr> { get_global()?.set_response_headers_from_ctx(response) diff --git a/rust_ref/doc/src/bitbazaar/log/global_log/mod.rs.html b/rust_ref/doc/src/bitbazaar/log/global_log/mod.rs.html index 7f2aeba8..7ac0c8c4 100644 --- a/rust_ref/doc/src/bitbazaar/log/global_log/mod.rs.html +++ b/rust_ref/doc/src/bitbazaar/log/global_log/mod.rs.html @@ -10,14 +10,16 @@

    Files

    8 9 10 +11
    mod builder;
     mod event_formatter;
     mod exceptions;
     pub mod global_fns;
    -#[cfg(feature = "opentelemetry")]
    +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))]
     mod http_headers;
     mod out;
     mod setup;
     
    +pub use builder::GlobalLogBuilder;
     pub use out::GlobalLog;
     
    \ No newline at end of file diff --git a/rust_ref/doc/src/bitbazaar/log/global_log/out.rs.html b/rust_ref/doc/src/bitbazaar/log/global_log/out.rs.html index 71aa49af..713dc3b4 100644 --- a/rust_ref/doc/src/bitbazaar/log/global_log/out.rs.html +++ b/rust_ref/doc/src/bitbazaar/log/global_log/out.rs.html @@ -232,11 +232,11 @@

    Files

    /// When made global these are hoisted into a static lazy var. pub(crate) _guards: Vec<tracing_appender::non_blocking::WorkerGuard>, - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] pub(crate) otlp_providers: OtlpProviders, } -#[cfg(feature = "opentelemetry")] +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] pub struct OtlpProviders { pub logger_provider: Option<opentelemetry_sdk::logs::LoggerProvider>, pub tracer_provider: Option<opentelemetry_sdk::trace::TracerProvider>, @@ -276,7 +276,7 @@

    Files

    } } - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] /// See [`super::global_fns::meter`]` pub fn meter( &self, @@ -287,7 +287,7 @@

    Files

    Ok(self.otlp_providers.meter_provider.meter(name)) } - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] /// See [`super::global_fns::set_span_parent_from_http_headers`]` pub fn set_span_parent_from_http_headers( &self, @@ -306,7 +306,7 @@

    Files

    Ok(()) } - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] /// See [`super::global_fns::set_response_headers_from_ctx`]` pub fn set_response_headers_from_ctx<B>( &self, @@ -337,7 +337,7 @@

    Files

    /// See [`super::global_fns::flush`]` pub fn flush(&self) -> Result<(), AnyErr> { - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] { if let Some(prov) = &self.otlp_providers.logger_provider { prov.force_flush(); @@ -355,7 +355,7 @@

    Files

    /// See [`super::global_fns::shutdown`]` pub fn shutdown(&mut self) -> Result<(), AnyErr> { - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] { if let Some(prov) = &mut self.otlp_providers.logger_provider { prov.shutdown(); diff --git a/rust_ref/doc/src/bitbazaar/log/global_log/setup.rs.html b/rust_ref/doc/src/bitbazaar/log/global_log/setup.rs.html index b3ac3f85..0f3d970f 100644 --- a/rust_ref/doc/src/bitbazaar/log/global_log/setup.rs.html +++ b/rust_ref/doc/src/bitbazaar/log/global_log/setup.rs.html @@ -416,6 +416,12 @@

    Files

    414 415 416 +417 +418 +419 +420 +421 +422
    use tracing::{Dispatch, Level, Metadata, Subscriber};
     use tracing_subscriber::{filter::FilterFn, layer::SubscriberExt, registry::LookupSpan, Layer};
     
    @@ -448,7 +454,7 @@ 

    Files

    // Configure the program to automatically log panics as an error event on the current span: super::exceptions::auto_trace_panics(); - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] // If opentelemetry being used, error_stacks should have color turned off, this would break text in external viewers outside terminals: error_stack::Report::set_color_mode(error_stack::fmt::ColorMode::None); @@ -459,13 +465,14 @@

    Files

    .filter_map(|output| output.shared_opts().loc_matcher.clone()) .collect::<Vec<_>>(); - #[cfg(feature = "opentelemetry")] - use super::out::OtlpProviders; - #[cfg(feature = "opentelemetry")] - let mut otlp_providers = OtlpProviders { - logger_provider: None, - tracer_provider: None, - meter_provider: opentelemetry_sdk::metrics::MeterProvider::default(), + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] + let mut otlp_providers = { + use super::out::OtlpProviders; + OtlpProviders { + logger_provider: None, + tracer_provider: None, + meter_provider: opentelemetry_sdk::metrics::MeterProvider::default(), + } }; let mut out_layers = vec![]; @@ -566,10 +573,10 @@

    Files

    )? ); } - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] super::builder::Output::Otlp(otlp) => { use opentelemetry::global::set_text_map_propagator; - use opentelemetry_otlp::{new_exporter, new_pipeline, WithExportConfig}; + use opentelemetry_otlp::new_pipeline; use opentelemetry_sdk::{ logs as sdklogs, propagation::{ @@ -578,7 +585,8 @@

    Files

    resource, trace as sdktrace, }; - // Theoretically both features could be enabled, so create an array to be able to double initiate two layers (both grpc and http) + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] + // Theoretically both features could be enabled, so create an array to be able to double initiate two layers (both grpc and http) // makes compiler happy and isn't hacky! let mut exporters: Vec<( opentelemetry_otlp::LogExporterBuilder, @@ -589,6 +597,8 @@

    Files

    #[cfg(feature = "opentelemetry-grpc")] #[allow(unused_variables)] if let Some(port) = otlp.grpc_port { + use opentelemetry_otlp::{new_exporter, WithExportConfig}; + if !crate::misc::is_tcp_port_listening("localhost", port)? { return Err(anyerr!("Can't connect to open telemetry collector on local port {}. Are you sure it's running?", port)); } @@ -603,6 +613,8 @@

    Files

    #[cfg(feature = "opentelemetry-http")] if let Some(endpoint) = otlp.http_endpoint { + use opentelemetry_otlp::{new_exporter, WithExportConfig}; + let get_exporter = || new_exporter().http().with_endpoint(&endpoint); exporters.push(( get_exporter().into(), @@ -700,7 +712,7 @@

    Files

    dispatch: Some(dispatch), #[cfg(not(target_arch = "wasm32"))] _guards: guards, - #[cfg(feature = "opentelemetry")] + #[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))] otlp_providers, }) } diff --git a/rust_ref/doc/src/bitbazaar/log/mod.rs.html b/rust_ref/doc/src/bitbazaar/log/mod.rs.html index 317d29b9..9f4eb656 100644 --- a/rust_ref/doc/src/bitbazaar/log/mod.rs.html +++ b/rust_ref/doc/src/bitbazaar/log/mod.rs.html @@ -538,18 +538,25 @@

    Files

    536 537 538 +539 +540 +541 +542 +543 +544 +545
    #[cfg(feature = "clap")]
     mod clap_log_level_args;
     #[cfg(test)]
     mod diff_file_log;
     mod global_log;
     mod macros;
    -#[cfg(feature = "opentelemetry")]
    +#[cfg(any(feature = "opentelemetry-grpc", feature = "opentelemetry-http"))]
     mod ot_tracing_bridge;
     
     #[cfg(feature = "clap")]
     pub use clap_log_level_args::ClapLogLevelArgs;
    -pub use global_log::{global_fns::*, GlobalLog};
    +pub use global_log::{global_fns::*, GlobalLog, GlobalLogBuilder};
     
     #[cfg(test)]
     mod tests {
    @@ -636,7 +643,8 @@ 

    Files

    Ok(()) } - #[rstest] + #[cfg(feature = "log-filter")] + #[rstest] // No matchers on either targets, so picked up by both targets: #[case::both(None, vec!["with_matcher DEBUG LOG1", "no_matcher DEBUG LOG1", "with_matcher DEBUG LOG2", "no_matcher DEBUG LOG2"])] // Matcher matches on first target, so no matcher target should ignore that log, i.e. one each: @@ -837,13 +845,26 @@

    Files

    Ok(()) } - #[cfg(feature = "opentelemetry")] + #[cfg(feature = "opentelemetry-grpc")] + #[rstest] + #[tokio::test(flavor = "multi_thread")] + async fn test_otlp_grpc() -> Result<(), AnyErr> { + _inner_test_opentelemetry(GlobalLog::builder().otlp_grpc(4317, "rust-test", "0.1.0")).await + } + + #[cfg(feature = "opentelemetry-http")] #[rstest] - // Testing both as grpc and http: - #[case::use_http(false)] - #[case::use_http(true)] #[tokio::test(flavor = "multi_thread")] - async fn test_opentelemetry(#[case] use_http: bool) -> Result<(), AnyErr> { + async fn test_otlp_http() -> Result<(), AnyErr> { + _inner_test_opentelemetry(GlobalLog::builder().otlp_http( + "http://localhost:4318", + "rust-test", + "0.1.0", + )) + .await + } + + async fn _inner_test_opentelemetry(builder: GlobalLogBuilder) -> Result<(), AnyErr> { use std::path::PathBuf; use crate::misc::in_ci; @@ -861,13 +882,6 @@

    Files

    .len(); } - let mut builder = GlobalLog::builder(); - // Testing both grpc and http: - if use_http { - builder = builder.otlp_http("http://localhost:4318", "rust-test", "0.1.0"); - } else { - builder = builder.otlp_grpc(4317, "rust-test", "0.1.0"); - } let log = builder.level_from(Level::DEBUG)?.build()?; log.with_tmp_global(|| { diff --git a/rust_ref/doc/trait.impl/core/default/trait.Default.js b/rust_ref/doc/trait.impl/core/default/trait.Default.js index a9b3cfbd..ff0ee983 100644 --- a/rust_ref/doc/trait.impl/core/default/trait.Default.js +++ b/rust_ref/doc/trait.impl/core/default/trait.Default.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl Default for Bash"],["impl Default for AnyErr"],["impl Default for TimeRecorder"]] +"bitbazaar":[["impl Default for Bash"],["impl Default for AnyErr"],["impl Default for GlobalLogBuilder"],["impl Default for TimeRecorder"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust_ref/doc/trait.impl/core/marker/trait.Freeze.js b/rust_ref/doc/trait.impl/core/marker/trait.Freeze.js index 4fb54ac3..db9f819b 100644 --- a/rust_ref/doc/trait.impl/core/marker/trait.Freeze.js +++ b/rust_ref/doc/trait.impl/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl Freeze for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Freeze for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Freeze for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Freeze for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Freeze for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Freeze for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Freeze for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Freeze for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Freeze for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Freeze for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Freeze for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Freeze for RedisBatch<'a, 'b, 'c, ReturnType>",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Freeze for RedisJson<T>
    where\n T: Freeze,
    ",1,["bitbazaar::redis::json::RedisJson"]]] +"bitbazaar":[["impl Freeze for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Freeze for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Freeze for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Freeze for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Freeze for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Freeze for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Freeze for GlobalLogBuilder",1,["bitbazaar::log::global_log::builder::GlobalLogBuilder"]],["impl Freeze for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Freeze for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Freeze for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Freeze for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Freeze for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Freeze for RedisBatch<'a, 'b, 'c, ReturnType>",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Freeze for RedisJson<T>
    where\n T: Freeze,
    ",1,["bitbazaar::redis::json::RedisJson"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust_ref/doc/trait.impl/core/marker/trait.Send.js b/rust_ref/doc/trait.impl/core/marker/trait.Send.js index 6671dccc..9c501a4e 100644 --- a/rust_ref/doc/trait.impl/core/marker/trait.Send.js +++ b/rust_ref/doc/trait.impl/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl Send for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Send for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Send for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Send for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Send for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Send for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Send for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Send for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Send for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Send for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Send for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Send for RedisBatch<'a, 'b, 'c, ReturnType>
    where\n ReturnType: Send,
    ",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Send for RedisJson<T>
    where\n T: Send,
    ",1,["bitbazaar::redis::json::RedisJson"]]] +"bitbazaar":[["impl Send for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Send for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Send for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Send for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Send for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Send for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Send for GlobalLogBuilder",1,["bitbazaar::log::global_log::builder::GlobalLogBuilder"]],["impl Send for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Send for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Send for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Send for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Send for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Send for RedisBatch<'a, 'b, 'c, ReturnType>
    where\n ReturnType: Send,
    ",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Send for RedisJson<T>
    where\n T: Send,
    ",1,["bitbazaar::redis::json::RedisJson"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust_ref/doc/trait.impl/core/marker/trait.Sync.js b/rust_ref/doc/trait.impl/core/marker/trait.Sync.js index d9983bbc..e57de0b3 100644 --- a/rust_ref/doc/trait.impl/core/marker/trait.Sync.js +++ b/rust_ref/doc/trait.impl/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl Sync for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Sync for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Sync for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Sync for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Sync for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Sync for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Sync for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Sync for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Sync for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Sync for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Sync for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Sync for RedisBatch<'a, 'b, 'c, ReturnType>
    where\n ReturnType: Sync,
    ",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Sync for RedisJson<T>
    where\n T: Sync,
    ",1,["bitbazaar::redis::json::RedisJson"]]] +"bitbazaar":[["impl Sync for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Sync for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Sync for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Sync for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Sync for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Sync for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Sync for GlobalLogBuilder",1,["bitbazaar::log::global_log::builder::GlobalLogBuilder"]],["impl Sync for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Sync for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Sync for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Sync for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Sync for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Sync for RedisBatch<'a, 'b, 'c, ReturnType>
    where\n ReturnType: Sync,
    ",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Sync for RedisJson<T>
    where\n T: Sync,
    ",1,["bitbazaar::redis::json::RedisJson"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust_ref/doc/trait.impl/core/marker/trait.Unpin.js b/rust_ref/doc/trait.impl/core/marker/trait.Unpin.js index 376790cf..2464ac6f 100644 --- a/rust_ref/doc/trait.impl/core/marker/trait.Unpin.js +++ b/rust_ref/doc/trait.impl/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl Unpin for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Unpin for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Unpin for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Unpin for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Unpin for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Unpin for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Unpin for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Unpin for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Unpin for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Unpin for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Unpin for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Unpin for RedisBatch<'a, 'b, 'c, ReturnType>
    where\n ReturnType: Unpin,
    ",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Unpin for RedisJson<T>
    where\n T: Unpin,
    ",1,["bitbazaar::redis::json::RedisJson"]]] +"bitbazaar":[["impl Unpin for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl Unpin for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl Unpin for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl Unpin for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl Unpin for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl Unpin for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl Unpin for GlobalLogBuilder",1,["bitbazaar::log::global_log::builder::GlobalLogBuilder"]],["impl Unpin for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl Unpin for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl Unpin for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl<'a> Unpin for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> Unpin for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType> Unpin for RedisBatch<'a, 'b, 'c, ReturnType>
    where\n ReturnType: Unpin,
    ",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> Unpin for RedisJson<T>
    where\n T: Unpin,
    ",1,["bitbazaar::redis::json::RedisJson"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 854ba3ba..604a257f 100644 --- a/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl !RefUnwindSafe for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl !RefUnwindSafe for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl !RefUnwindSafe for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl RefUnwindSafe for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl RefUnwindSafe for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl RefUnwindSafe for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl RefUnwindSafe for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl RefUnwindSafe for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl RefUnwindSafe for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl<'a> !RefUnwindSafe for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> RefUnwindSafe for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType = ()> !RefUnwindSafe for RedisBatch<'a, 'b, 'c, ReturnType>",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> RefUnwindSafe for RedisJson<T>
    where\n T: RefUnwindSafe,
    ",1,["bitbazaar::redis::json::RedisJson"]]] +"bitbazaar":[["impl !RefUnwindSafe for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl !RefUnwindSafe for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl !RefUnwindSafe for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl RefUnwindSafe for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl RefUnwindSafe for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl RefUnwindSafe for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl RefUnwindSafe for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl RefUnwindSafe for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl RefUnwindSafe for GlobalLogBuilder",1,["bitbazaar::log::global_log::builder::GlobalLogBuilder"]],["impl RefUnwindSafe for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl<'a> !RefUnwindSafe for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> RefUnwindSafe for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType = ()> !RefUnwindSafe for RedisBatch<'a, 'b, 'c, ReturnType>",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> RefUnwindSafe for RedisJson<T>
    where\n T: RefUnwindSafe,
    ",1,["bitbazaar::redis::json::RedisJson"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index 6d1725e2..c4ef016a 100644 --- a/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/rust_ref/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bitbazaar":[["impl !UnwindSafe for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl !UnwindSafe for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl !UnwindSafe for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl UnwindSafe for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl UnwindSafe for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl UnwindSafe for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl UnwindSafe for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl UnwindSafe for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl UnwindSafe for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl<'a> !UnwindSafe for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> UnwindSafe for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType = ()> !UnwindSafe for RedisBatch<'a, 'b, 'c, ReturnType>",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> UnwindSafe for RedisJson<T>
    where\n T: UnwindSafe,
    ",1,["bitbazaar::redis::json::RedisJson"]]] +"bitbazaar":[["impl !UnwindSafe for GlobalLog",1,["bitbazaar::log::global_log::out::GlobalLog"]],["impl !UnwindSafe for Redis",1,["bitbazaar::redis::wrapper::Redis"]],["impl !UnwindSafe for TimeRecorder",1,["bitbazaar::timing::recorder::TimeRecorder"]],["impl UnwindSafe for BashErr",1,["bitbazaar::cli::errs::BashErr"]],["impl UnwindSafe for Bash",1,["bitbazaar::cli::bash::Bash"]],["impl UnwindSafe for CmdOut",1,["bitbazaar::cli::cmd_out::CmdOut"]],["impl UnwindSafe for AnyErr",1,["bitbazaar::errors::any::AnyErr"]],["impl UnwindSafe for ClapLogLevelArgs",1,["bitbazaar::log::clap_log_level_args::ClapLogLevelArgs"]],["impl UnwindSafe for GlobalLogBuilder",1,["bitbazaar::log::global_log::builder::GlobalLogBuilder"]],["impl UnwindSafe for RedisScript",1,["bitbazaar::redis::script::RedisScript"]],["impl<'a> !UnwindSafe for RedisConn<'a>",1,["bitbazaar::redis::conn::RedisConn"]],["impl<'a> UnwindSafe for RedisScriptInvoker<'a>",1,["bitbazaar::redis::script::RedisScriptInvoker"]],["impl<'a, 'b, 'c, ReturnType = ()> !UnwindSafe for RedisBatch<'a, 'b, 'c, ReturnType>",1,["bitbazaar::redis::batch::RedisBatch"]],["impl<T> UnwindSafe for RedisJson<T>
    where\n T: UnwindSafe,
    ",1,["bitbazaar::redis::json::RedisJson"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index 9ba669f0..2c8436bb 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"BitBazaar","text":"

    An assortment of publicly available cross-language utilities useful to my projects.

    "},{"location":"#python","title":"Python","text":"

    You can install BitBazaar via pip from PyPI:

    pip install bitbazaar\n
    "},{"location":"#javascript","title":"Javascript","text":"

    You can install BitBazaar via npm:

    npm install bitbazaar\n
    "},{"location":"#rust-backed-python-library","title":"Rust-backed Python library","text":"

    You can install BitBazaar via pip from PyPI:

    pip install bitbazaar_rs\n

    Binaries are available for:

    • Linux: x86_64, aarch64, i686, armv7, ppc64le, s390x, musl-x86_64 & musl-aarch64
    • MacOS: x86_64, aarch64
    • Windows: x86_64, aarch64, i686

    If your platform isn't supported, file an issue.

    "},{"location":"#rust","title":"Rust","text":"

    You can install BitBazaar via crates.io:

    # Cargo.toml\n\n[dependencies]\nbitbazaar = \"0.0.35\"\n
    "},{"location":"#usage","title":"Usage","text":"

    Please see the documentation for details.

    "},{"location":"#contributing","title":"Contributing","text":"

    Contributions are very welcome. To learn more, see the Contributor Guide.

    "},{"location":"#license","title":"License","text":"

    Distributed under the terms of the MIT license, BitBazaar is free and open source software.

    "},{"location":"#issues","title":"Issues","text":"

    If you encounter any problems, please file an issue along with a detailed description.

    "},{"location":"CODE_OF_CONDUCT/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"CODE_OF_CONDUCT/#our-pledge","title":"Our Pledge","text":"

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    "},{"location":"CODE_OF_CONDUCT/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"CODE_OF_CONDUCT/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    "},{"location":"CODE_OF_CONDUCT/#scope","title":"Scope","text":"

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    "},{"location":"CODE_OF_CONDUCT/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at zakstucke@gmail.com. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    "},{"location":"CODE_OF_CONDUCT/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    "},{"location":"CODE_OF_CONDUCT/#1-correction","title":"1. Correction","text":"

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    "},{"location":"CODE_OF_CONDUCT/#2-warning","title":"2. Warning","text":"

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    "},{"location":"CODE_OF_CONDUCT/#3-temporary-ban","title":"3. Temporary Ban","text":"

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    "},{"location":"CODE_OF_CONDUCT/#4-permanent-ban","title":"4. Permanent Ban","text":"

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    "},{"location":"CODE_OF_CONDUCT/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    "},{"location":"CONTRIBUTING/","title":"Contributor Guide","text":"

    Thank you for your interest in improving this project.

    This project is open-source under the MIT license and welcomes contributions in the form of bug reports, feature requests, and pull requests.

    Here is a list of important resources for contributors:

    • Source Code
    • Documentation
    • Issue Tracker
    • Code of Conduct
    "},{"location":"CONTRIBUTING/#how-to-report-a-bug","title":"How to report a bug","text":"

    Report bugs on the Issue Tracker.

    When filing an issue, make sure to answer these questions:

    • Which operating system and core package versions are you using? (the applicable of rust/python/node etc)
    • Which version of this project are you using?
    • What did you do?
    • What did you expect to see?
    • What did you see instead?

    The best way to get your bug fixed is to provide a test case, and/or steps to reproduce the issue.

    "},{"location":"CONTRIBUTING/#how-to-request-a-feature","title":"How to request a feature","text":"

    Request features on the Issue Tracker.

    "},{"location":"CONTRIBUTING/#how-to-set-up-your-development-environment","title":"How to set up your development environment","text":"
    • Clone the repo: git clone https://github.com/zakstucke/bitbazaar
    • Install pipx
    • ./dev_scripts/initial_setup.sh initial_setup
    "},{"location":"CONTRIBUTING/#python","title":"Python","text":"
    • Make sure Python 3.11+ is installed
    • Install PDM
    "},{"location":"CONTRIBUTING/#js","title":"JS:","text":"
    • Install node 20 or greater
    • Install npx globally
    "},{"location":"CONTRIBUTING/#rust-backed-python-library","title":"Rust-backed Python library","text":"
    • Make sure Python 3.11+ is installed
    • Install rust
    "},{"location":"CONTRIBUTING/#rust","title":"Rust:","text":"
    • Install rust
    "},{"location":"CONTRIBUTING/#running-tests","title":"Running tests","text":"

    Checkout scripts in ./dev_scripts/ for how the system can be run, test.sh in particular. Run the full test suite with ./dev_scripts/test.sh all

    "},{"location":"CONTRIBUTING/#how-to-submit-changes","title":"How to submit changes","text":"

    Open a pull request to submit changes to this project.

    Your pull request needs to meet the following guidelines for acceptance:

    • ./dev_scripts/test.sh all passes without failures or warnings.
    • Include unit tests. This project maintains 100% code coverage.
    • If your changes add functionality, update the documentation accordingly.

    Feel free to submit early, though\u2014we can always iterate on this.

    It is recommended to open an issue before starting work on anything. This will allow a chance to talk it over with the owners and validate your approach.

    "},{"location":"LICENSE/","title":"LICENSE","text":"

    MIT License

    Copyright \u00a9 2024 Zachary Stucke

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    "},{"location":"py_ref/","title":"bitbazaar","text":"

    BitBazaar.

    "},{"location":"py_ref/SUMMARY/","title":"SUMMARY","text":"
    • bitbazaar
      • log
      • misc
      • testing
    "},{"location":"py_ref/log/","title":"log","text":"

    Global tracing implementation for open telemetry, console and file sinks.

    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog","title":"GlobalLog(service_name, service_version, console=None, otlp=None, file=None)","text":"

    Initialize logs, traces/spans and metrics for a project.

    Logging: normal .debug()/.info()/.warn() etc methods available.

    Tracing/spans: .span() can be used to create a new span, or as a decorator to wrap functions.

    Metrics: .get_meter() can be used.

    Auto-instrumentation: self.meter_provider/tracer_provider/logger_provider are exposed from the instance to allow interaction with auto instrumentation libraries.

    If open telemetry used, is opinionated in the fact it should be speaking to a local collector via grpc insecurely on localhost with no headers, only the port can be configured. The collector itself should be post-processing speaking to the outside world, to minimise tracing's impact on this program's performance.

    Source code in py/bitbazaar/log/_global_log.py
    def __init__(\n    self,\n    service_name: str,\n    service_version: str,\n    console: ConsoleSink | None = None,\n    otlp: OLTPSink | None = None,\n    file: FileSink | None = None,\n):\n    \"\"\"Initialize logs, traces/spans and metrics for a project.\n\n    Logging: normal `.debug()/.info()/.warn()` etc methods available.\n\n    Tracing/spans: `.span()` can be used to create a new span, or as a decorator to wrap functions.\n\n    Metrics: `.get_meter()` can be used.\n\n    Auto-instrumentation: `self.meter_provider/tracer_provider/logger_provider` are exposed from the instance to allow interaction with auto instrumentation libraries.\n\n    If open telemetry used, is opinionated in the fact it should be speaking to a local collector via grpc insecurely on localhost with no headers, only the port can be configured.\n    The collector itself should be post-processing speaking to the outside world, to minimise tracing's impact on this program's performance.\n    \"\"\"\n    (\n        self.meter_provider,\n        self.tracer_provider,\n        self.logger_provider,\n        self.file_handler,\n    ) = prepare_providers(\n        {\n            \"service_name\": service_name,\n            \"service_version\": service_version,\n            \"console\": console,\n            \"otlp\": otlp,\n            \"file\": file,\n        }\n    )\n    self.tracer = trace.get_tracer(\"GlobalLog\")\n\n    # Register as the global logger:\n    global _LOG\n    _LOG = self\n
    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog.flush","title":"flush()","text":"

    Force all logs/spans through, useful when testing.

    Source code in py/bitbazaar/log/_global_log.py
    def flush(self) -> None:\n    \"\"\"Force all logs/spans through, useful when testing.\"\"\"\n    self.tracer_provider.force_flush()\n    self.logger_provider.force_flush()\n    self.meter_provider.force_flush()\n    if self.file_handler:\n        self.file_handler.flush()\n
    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog.shutdown","title":"shutdown()","text":"

    Shuts/closes everything down.

    Source code in py/bitbazaar/log/_global_log.py
    def shutdown(self) -> None:\n    \"\"\"Shuts/closes everything down.\"\"\"\n    self.tracer_provider.shutdown()\n    self.logger_provider.shutdown()\n    self.meter_provider.shutdown()\n    if self.file_handler:\n        self.file_handler.close()\n
    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog.span","title":"span(name, context=None, kind=SpanKind.INTERNAL, attributes=None, links=None, start_time=None, record_exception=True, set_status_on_exception=True, end_on_exit=True)","text":"

    Context manager for creating a new span and set it as the current span in this tracer's context.

    Exiting the context manager will call the span's end method, as well as return the current span to its previous value by returning to the previous context.

    Example::

    with tracer.start_as_current_span(\"one\") as parent:\n    parent.add_event(\"parent's event\")\n    with tracer.start_as_current_span(\"two\") as child:\n        child.add_event(\"child's event\")\n        trace.get_current_span()  # returns child\n    trace.get_current_span()      # returns parent\ntrace.get_current_span()          # returns previously active span\n

    This is a convenience method for creating spans attached to the tracer's context. Applications that need more control over the span lifetime should use :meth:start_span instead. For example::

    with tracer.start_as_current_span(name) as span:\n    do_work()\n

    is equivalent to::

    span = tracer.start_span(name)\nwith opentelemetry.trace.use_span(span, end_on_exit=True):\n    do_work()\n

    This can also be used as a decorator::

    @tracer.start_as_current_span(\"name\")\ndef function():\n    ...\n\nfunction()\n

    Parameters:

    Name Type Description Default name str

    The name of the span to be created.

    required context Context | None

    An optional Context containing the span's parent. Defaults to the global context.

    None kind SpanKind

    The span's kind (relationship to parent). Note that is meaningful even if there is no parent.

    INTERNAL attributes Attributes

    The span's attributes.

    None links _Links

    Links span to other spans

    None start_time int | None

    Sets the start time of a span

    None record_exception bool

    Whether to record any exceptions raised within the context as error event on the span.

    True set_status_on_exception bool

    Only relevant if the returned span is used in a with/context manager. Defines whether the span status will be automatically set to ERROR when an uncaught exception is raised in the span with block. The span status won't be set by this mechanism if it was previously set manually.

    True end_on_exit bool

    Whether to end the span automatically when leaving the context manager.

    True

    Yields:

    Type Description

    The newly-created span.

    Source code in py/bitbazaar/log/_global_log.py
    def span(\n    self,\n    name: str,\n    context: Context | None = None,\n    kind: SpanKind = SpanKind.INTERNAL,\n    attributes: Attributes = None,\n    links: _Links = None,\n    start_time: int | None = None,\n    record_exception: bool = True,\n    set_status_on_exception: bool = True,\n    end_on_exit: bool = True,\n):\n    \"\"\"Context manager for creating a new span and set it as the current span in this tracer's context.\n\n    Exiting the context manager will call the span's end method,\n    as well as return the current span to its previous value by\n    returning to the previous context.\n\n    Example::\n\n        with tracer.start_as_current_span(\"one\") as parent:\n            parent.add_event(\"parent's event\")\n            with tracer.start_as_current_span(\"two\") as child:\n                child.add_event(\"child's event\")\n                trace.get_current_span()  # returns child\n            trace.get_current_span()      # returns parent\n        trace.get_current_span()          # returns previously active span\n\n    This is a convenience method for creating spans attached to the\n    tracer's context. Applications that need more control over the span\n    lifetime should use :meth:`start_span` instead. For example::\n\n        with tracer.start_as_current_span(name) as span:\n            do_work()\n\n    is equivalent to::\n\n        span = tracer.start_span(name)\n        with opentelemetry.trace.use_span(span, end_on_exit=True):\n            do_work()\n\n    This can also be used as a decorator::\n\n        @tracer.start_as_current_span(\"name\")\n        def function():\n            ...\n\n        function()\n\n    Args:\n        name: The name of the span to be created.\n        context: An optional Context containing the span's parent. Defaults to the\n            global context.\n        kind: The span's kind (relationship to parent). Note that is\n            meaningful even if there is no parent.\n        attributes: The span's attributes.\n        links: Links span to other spans\n        start_time: Sets the start time of a span\n        record_exception: Whether to record any exceptions raised within the\n            context as error event on the span.\n        set_status_on_exception: Only relevant if the returned span is used\n            in a with/context manager. Defines whether the span status will\n            be automatically set to ERROR when an uncaught exception is\n            raised in the span with block. The span status won't be set by\n            this mechanism if it was previously set manually.\n        end_on_exit: Whether to end the span automatically when leaving the\n            context manager.\n\n    Yields:\n        The newly-created span.\n    \"\"\"\n    return self.tracer.start_as_current_span(\n        name,\n        context,\n        kind,\n        attributes,\n        links,\n        start_time,\n        record_exception,\n        set_status_on_exception,\n        end_on_exit,\n    )\n
    "},{"location":"py_ref/misc/","title":"misc","text":"

    Miscellaneous utility functions for BitBazaar.

    "},{"location":"py_ref/misc/#py.bitbazaar.misc.copy_sig","title":"copy_sig(f)","text":"

    Keep e.g. a class's init signature when subclassing.

    From: https://github.com/python/typing/issues/769#issuecomment-903760354

    Source code in py/bitbazaar/misc/__init__.py
    def copy_sig(f: _T) -> tp.Callable[[tp.Any], _T]:\n    \"\"\"Keep e.g. a class's __init__ signature when subclassing.\n\n    From: https://github.com/python/typing/issues/769#issuecomment-903760354\n    \"\"\"\n    return lambda x: x\n
    "},{"location":"py_ref/misc/#py.bitbazaar.misc.in_ci","title":"in_ci()","text":"

    Returns true if it looks like the program is running from a CI service, e.g. Github Actions.

    Source code in py/bitbazaar/misc/__init__.py
    def in_ci() -> bool:\n    \"\"\"Returns true if it looks like the program is running from a CI service, e.g. Github Actions.\"\"\"\n    return any([var in os.environ for var in _CI_ENV_VARS])\n
    "},{"location":"py_ref/misc/#py.bitbazaar.misc.is_tcp_port_listening","title":"is_tcp_port_listening(host, port)","text":"

    Check if something is listening on a certain tcp port or not.

    Source code in py/bitbazaar/misc/__init__.py
    def is_tcp_port_listening(\n    host: str, port: int\n) -> bool:  # pragma: no cover (is covered but not in CI)\n    \"\"\"Check if something is listening on a certain tcp port or not.\"\"\"\n    try:\n        # Create a TCP socket\n        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        s.settimeout(1)  # Set timeout to 1 second\n\n        # Attempt to establish a connection to the port\n        s.connect((host, port))\n\n        # If connection is successful, something is listening on the port\n        s.close()\n        return True\n    except OSError:\n        return False\n
    "},{"location":"py_ref/testing/","title":"testing","text":"

    Useful downstream testing utilities.

    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager","title":"TmpFileManager()","text":"

    A context manager for managing temporary files and directories.

    Usage: with TmpFileManager() as manager: file_path = manager.tmpfile(content=\"Hello, temporary file!\") dir_path = manager.tmp_dir()

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def __init__(self):\n    self.root_dir = tempfile.mkdtemp()\n
    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager.cleanup","title":"cleanup()","text":"

    Clean up created temporary files and directories.

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def cleanup(self):\n    \"\"\"Clean up created temporary files and directories.\"\"\"\n    shutil.rmtree(self.root_dir)\n
    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager.tmpdir","title":"tmpdir(parent=None, name=None)","text":"

    Create a temporary directory.

    Parameters: - parent: Optional directory to create the temporary directory in. Otherwise will be placed in root.

    Returns: - The path to the created temporary directory.

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def tmpdir(\n    self, parent: tp.Optional[str] = None, name: tp.Optional[str] = None\n) -> pathlib.Path:\n    \"\"\"Create a temporary directory.\n\n    Parameters:\n    - parent: Optional directory to create the temporary directory in. Otherwise will be placed in root.\n\n    Returns:\n    - The path to the created temporary directory.\n    \"\"\"\n    if parent is None:\n        parent = self.root_dir\n\n    final_path = pathlib.Path(os.path.join(parent, str(uuid.uuid4()) if name is None else name))\n    os.mkdir(final_path)\n\n    self.dirs_created += 1\n    return final_path\n
    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager.tmpfile","title":"tmpfile(content, suffix=None, parent=None, full_name=None)","text":"

    Create a temporary file.

    Parameters: - content: The content to write to the temporary file. - suffix: Optional suffix to append to the temporary file. Otherwise will be created with tempfile. - parent: Optional directory to create the temporary file in. Otherwise will be placed in root. - full_name: Optional full name of the temporary file, overrides suffix. Otherwise will be created with tempfile.

    Returns: - The path to the created temporary file.

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def tmpfile(\n    self,\n    content: str,\n    suffix: tp.Optional[str] = None,\n    parent: tp.Optional[tp.Union[str, pathlib.Path]] = None,\n    full_name: tp.Optional[str] = None,\n) -> pathlib.Path:\n    \"\"\"Create a temporary file.\n\n    Parameters:\n    - content: The content to write to the temporary file.\n    - suffix: Optional suffix to append to the temporary file. Otherwise will be created with tempfile.\n    - parent: Optional directory to create the temporary file in. Otherwise will be placed in root.\n    - full_name: Optional full name of the temporary file, overrides suffix. Otherwise will be created with tempfile.\n\n    Returns:\n    - The path to the created temporary file.\n    \"\"\"\n    if parent is None:\n        parent = self.root_dir\n\n    filename: str\n    if full_name is not None:\n        filename = full_name\n    elif suffix is not None:\n        filename = str(uuid.uuid4()) + suffix\n    else:\n        filename = str(uuid.uuid4())\n\n    final_path = pathlib.Path(os.path.join(parent, filename))\n\n    with open(final_path, \"w\") as file:\n        file.write(content)\n\n    self.files_created += 1\n\n    return final_path\n
    "},{"location":"py_rust_ref/","title":"bitbazaar_rs","text":""},{"location":"py_rust_ref/#py_rust.python.bitbazaar_rs.hello","title":"hello()","text":"

    Returns Hello, World!

    Returns:

    Name Type Description str str

    Hello, World!

    Source code in py_rust/python/bitbazaar_rs/__init__.py
    from importlib.metadata import version\n\n__version__ = version(\"bitbazaar_rs\")\n\n__all__ = [\"__version__\"]\n\n# Import the rust modules and top level fns:\n
    "},{"location":"py_rust_ref/SUMMARY/","title":"SUMMARY","text":"
    • bitbazaar_rs
      • utils
    "},{"location":"py_rust_ref/utils/","title":"utils","text":""},{"location":"py_rust_ref/utils/#py_rust.python.bitbazaar_rs.utils.add","title":"add(a, b)","text":"

    Add two numbers.

    Parameters:

    Name Type Description Default a float

    First number.

    required b float

    Second number.

    required

    Returns:

    Type Description float

    Sum of the two numbers.

    Source code in py_rust/python/bitbazaar_rs/utils.pyi
    def add(a: float, b: float) -> float:\n    \"\"\"Add two numbers.\n\n    Args:\n        a: First number.\n        b: Second number.\n\n    Returns:\n        Sum of the two numbers.\n    \"\"\"\n    ...\n
    "},{"location":"rust_ref/doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7/","title":"SourceSerif4 LICENSE 3bb119e13b1258b7","text":"

    Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name \u2018Source\u2019. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.

    This Font Software is licensed under the SIL Open Font License, Version 1.1.

    This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL

    "},{"location":"rust_ref/doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7/#sil-open-font-license-version-11-26-february-2007","title":"SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007","text":"

    PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.

    The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.

    DEFINITIONS \"Font Software\" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.

    \"Reserved Font Name\" refers to any names specified as such after the copyright statement(s).

    \"Original Version\" refers to the collection of Font Software components as distributed by the Copyright Holder(s).

    \"Modified Version\" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.

    \"Author\" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.

    PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:

    1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.

    2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.

    3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.

    4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.

    5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.

    TERMINATION This license becomes null and void if any of the above conditions are not met.

    DISCLAIMER THE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"BitBazaar","text":"

    An assortment of publicly available cross-language utilities useful to my projects.

    "},{"location":"#python","title":"Python","text":"

    You can install BitBazaar via pip from PyPI:

    pip install bitbazaar\n
    "},{"location":"#javascript","title":"Javascript","text":"

    You can install BitBazaar via npm:

    npm install bitbazaar\n
    "},{"location":"#rust-backed-python-library","title":"Rust-backed Python library","text":"

    You can install BitBazaar via pip from PyPI:

    pip install bitbazaar_rs\n

    Binaries are available for:

    • Linux: x86_64, aarch64, i686, armv7, ppc64le, s390x, musl-x86_64 & musl-aarch64
    • MacOS: x86_64, aarch64
    • Windows: x86_64, aarch64, i686

    If your platform isn't supported, file an issue.

    "},{"location":"#rust","title":"Rust","text":"

    You can install BitBazaar via crates.io:

    # Cargo.toml\n\n[dependencies]\nbitbazaar = \"0.0.36\"\n
    "},{"location":"#usage","title":"Usage","text":"

    Please see the documentation for details.

    "},{"location":"#contributing","title":"Contributing","text":"

    Contributions are very welcome. To learn more, see the Contributor Guide.

    "},{"location":"#license","title":"License","text":"

    Distributed under the terms of the MIT license, BitBazaar is free and open source software.

    "},{"location":"#issues","title":"Issues","text":"

    If you encounter any problems, please file an issue along with a detailed description.

    "},{"location":"CODE_OF_CONDUCT/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"CODE_OF_CONDUCT/#our-pledge","title":"Our Pledge","text":"

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    "},{"location":"CODE_OF_CONDUCT/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"CODE_OF_CONDUCT/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    "},{"location":"CODE_OF_CONDUCT/#scope","title":"Scope","text":"

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    "},{"location":"CODE_OF_CONDUCT/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at zakstucke@gmail.com. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    "},{"location":"CODE_OF_CONDUCT/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    "},{"location":"CODE_OF_CONDUCT/#1-correction","title":"1. Correction","text":"

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    "},{"location":"CODE_OF_CONDUCT/#2-warning","title":"2. Warning","text":"

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    "},{"location":"CODE_OF_CONDUCT/#3-temporary-ban","title":"3. Temporary Ban","text":"

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    "},{"location":"CODE_OF_CONDUCT/#4-permanent-ban","title":"4. Permanent Ban","text":"

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    "},{"location":"CODE_OF_CONDUCT/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    "},{"location":"CONTRIBUTING/","title":"Contributor Guide","text":"

    Thank you for your interest in improving this project.

    This project is open-source under the MIT license and welcomes contributions in the form of bug reports, feature requests, and pull requests.

    Here is a list of important resources for contributors:

    • Source Code
    • Documentation
    • Issue Tracker
    • Code of Conduct
    "},{"location":"CONTRIBUTING/#how-to-report-a-bug","title":"How to report a bug","text":"

    Report bugs on the Issue Tracker.

    When filing an issue, make sure to answer these questions:

    • Which operating system and core package versions are you using? (the applicable of rust/python/node etc)
    • Which version of this project are you using?
    • What did you do?
    • What did you expect to see?
    • What did you see instead?

    The best way to get your bug fixed is to provide a test case, and/or steps to reproduce the issue.

    "},{"location":"CONTRIBUTING/#how-to-request-a-feature","title":"How to request a feature","text":"

    Request features on the Issue Tracker.

    "},{"location":"CONTRIBUTING/#how-to-set-up-your-development-environment","title":"How to set up your development environment","text":"
    • Clone the repo: git clone https://github.com/zakstucke/bitbazaar
    • Install pipx
    • ./dev_scripts/initial_setup.sh initial_setup
    "},{"location":"CONTRIBUTING/#python","title":"Python","text":"
    • Make sure Python 3.11+ is installed
    • Install PDM
    "},{"location":"CONTRIBUTING/#js","title":"JS:","text":"
    • Install node 20 or greater
    • Install npx globally
    "},{"location":"CONTRIBUTING/#rust-backed-python-library","title":"Rust-backed Python library","text":"
    • Make sure Python 3.11+ is installed
    • Install rust
    "},{"location":"CONTRIBUTING/#rust","title":"Rust:","text":"
    • Install rust
    "},{"location":"CONTRIBUTING/#running-tests","title":"Running tests","text":"

    Checkout scripts in ./dev_scripts/ for how the system can be run, test.sh in particular. Run the full test suite with ./dev_scripts/test.sh all

    "},{"location":"CONTRIBUTING/#how-to-submit-changes","title":"How to submit changes","text":"

    Open a pull request to submit changes to this project.

    Your pull request needs to meet the following guidelines for acceptance:

    • ./dev_scripts/test.sh all passes without failures or warnings.
    • Include unit tests. This project maintains 100% code coverage.
    • If your changes add functionality, update the documentation accordingly.

    Feel free to submit early, though\u2014we can always iterate on this.

    It is recommended to open an issue before starting work on anything. This will allow a chance to talk it over with the owners and validate your approach.

    "},{"location":"LICENSE/","title":"LICENSE","text":"

    MIT License

    Copyright \u00a9 2024 Zachary Stucke

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    "},{"location":"py_ref/","title":"bitbazaar","text":"

    BitBazaar.

    "},{"location":"py_ref/SUMMARY/","title":"SUMMARY","text":"
    • bitbazaar
      • log
      • misc
      • testing
    "},{"location":"py_ref/log/","title":"log","text":"

    Global tracing implementation for open telemetry, console and file sinks.

    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog","title":"GlobalLog(service_name, service_version, console=None, otlp=None, file=None)","text":"

    Initialize logs, traces/spans and metrics for a project.

    Logging: normal .debug()/.info()/.warn() etc methods available.

    Tracing/spans: .span() can be used to create a new span, or as a decorator to wrap functions.

    Metrics: .get_meter() can be used.

    Auto-instrumentation: self.meter_provider/tracer_provider/logger_provider are exposed from the instance to allow interaction with auto instrumentation libraries.

    If open telemetry used, is opinionated in the fact it should be speaking to a local collector via grpc insecurely on localhost with no headers, only the port can be configured. The collector itself should be post-processing speaking to the outside world, to minimise tracing's impact on this program's performance.

    Source code in py/bitbazaar/log/_global_log.py
    def __init__(\n    self,\n    service_name: str,\n    service_version: str,\n    console: ConsoleSink | None = None,\n    otlp: OLTPSink | None = None,\n    file: FileSink | None = None,\n):\n    \"\"\"Initialize logs, traces/spans and metrics for a project.\n\n    Logging: normal `.debug()/.info()/.warn()` etc methods available.\n\n    Tracing/spans: `.span()` can be used to create a new span, or as a decorator to wrap functions.\n\n    Metrics: `.get_meter()` can be used.\n\n    Auto-instrumentation: `self.meter_provider/tracer_provider/logger_provider` are exposed from the instance to allow interaction with auto instrumentation libraries.\n\n    If open telemetry used, is opinionated in the fact it should be speaking to a local collector via grpc insecurely on localhost with no headers, only the port can be configured.\n    The collector itself should be post-processing speaking to the outside world, to minimise tracing's impact on this program's performance.\n    \"\"\"\n    (\n        self.meter_provider,\n        self.tracer_provider,\n        self.logger_provider,\n        self.file_handler,\n    ) = prepare_providers(\n        {\n            \"service_name\": service_name,\n            \"service_version\": service_version,\n            \"console\": console,\n            \"otlp\": otlp,\n            \"file\": file,\n        }\n    )\n    self.tracer = trace.get_tracer(\"GlobalLog\")\n\n    # Register as the global logger:\n    global _LOG\n    _LOG = self\n
    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog.flush","title":"flush()","text":"

    Force all logs/spans through, useful when testing.

    Source code in py/bitbazaar/log/_global_log.py
    def flush(self) -> None:\n    \"\"\"Force all logs/spans through, useful when testing.\"\"\"\n    self.tracer_provider.force_flush()\n    self.logger_provider.force_flush()\n    self.meter_provider.force_flush()\n    if self.file_handler:\n        self.file_handler.flush()\n
    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog.shutdown","title":"shutdown()","text":"

    Shuts/closes everything down.

    Source code in py/bitbazaar/log/_global_log.py
    def shutdown(self) -> None:\n    \"\"\"Shuts/closes everything down.\"\"\"\n    self.tracer_provider.shutdown()\n    self.logger_provider.shutdown()\n    self.meter_provider.shutdown()\n    if self.file_handler:\n        self.file_handler.close()\n
    "},{"location":"py_ref/log/#py.bitbazaar.log.GlobalLog.span","title":"span(name, context=None, kind=SpanKind.INTERNAL, attributes=None, links=None, start_time=None, record_exception=True, set_status_on_exception=True, end_on_exit=True)","text":"

    Context manager for creating a new span and set it as the current span in this tracer's context.

    Exiting the context manager will call the span's end method, as well as return the current span to its previous value by returning to the previous context.

    Example::

    with tracer.start_as_current_span(\"one\") as parent:\n    parent.add_event(\"parent's event\")\n    with tracer.start_as_current_span(\"two\") as child:\n        child.add_event(\"child's event\")\n        trace.get_current_span()  # returns child\n    trace.get_current_span()      # returns parent\ntrace.get_current_span()          # returns previously active span\n

    This is a convenience method for creating spans attached to the tracer's context. Applications that need more control over the span lifetime should use :meth:start_span instead. For example::

    with tracer.start_as_current_span(name) as span:\n    do_work()\n

    is equivalent to::

    span = tracer.start_span(name)\nwith opentelemetry.trace.use_span(span, end_on_exit=True):\n    do_work()\n

    This can also be used as a decorator::

    @tracer.start_as_current_span(\"name\")\ndef function():\n    ...\n\nfunction()\n

    Parameters:

    Name Type Description Default name str

    The name of the span to be created.

    required context Context | None

    An optional Context containing the span's parent. Defaults to the global context.

    None kind SpanKind

    The span's kind (relationship to parent). Note that is meaningful even if there is no parent.

    INTERNAL attributes Attributes

    The span's attributes.

    None links _Links

    Links span to other spans

    None start_time int | None

    Sets the start time of a span

    None record_exception bool

    Whether to record any exceptions raised within the context as error event on the span.

    True set_status_on_exception bool

    Only relevant if the returned span is used in a with/context manager. Defines whether the span status will be automatically set to ERROR when an uncaught exception is raised in the span with block. The span status won't be set by this mechanism if it was previously set manually.

    True end_on_exit bool

    Whether to end the span automatically when leaving the context manager.

    True

    Yields:

    Type Description

    The newly-created span.

    Source code in py/bitbazaar/log/_global_log.py
    def span(\n    self,\n    name: str,\n    context: Context | None = None,\n    kind: SpanKind = SpanKind.INTERNAL,\n    attributes: Attributes = None,\n    links: _Links = None,\n    start_time: int | None = None,\n    record_exception: bool = True,\n    set_status_on_exception: bool = True,\n    end_on_exit: bool = True,\n):\n    \"\"\"Context manager for creating a new span and set it as the current span in this tracer's context.\n\n    Exiting the context manager will call the span's end method,\n    as well as return the current span to its previous value by\n    returning to the previous context.\n\n    Example::\n\n        with tracer.start_as_current_span(\"one\") as parent:\n            parent.add_event(\"parent's event\")\n            with tracer.start_as_current_span(\"two\") as child:\n                child.add_event(\"child's event\")\n                trace.get_current_span()  # returns child\n            trace.get_current_span()      # returns parent\n        trace.get_current_span()          # returns previously active span\n\n    This is a convenience method for creating spans attached to the\n    tracer's context. Applications that need more control over the span\n    lifetime should use :meth:`start_span` instead. For example::\n\n        with tracer.start_as_current_span(name) as span:\n            do_work()\n\n    is equivalent to::\n\n        span = tracer.start_span(name)\n        with opentelemetry.trace.use_span(span, end_on_exit=True):\n            do_work()\n\n    This can also be used as a decorator::\n\n        @tracer.start_as_current_span(\"name\")\n        def function():\n            ...\n\n        function()\n\n    Args:\n        name: The name of the span to be created.\n        context: An optional Context containing the span's parent. Defaults to the\n            global context.\n        kind: The span's kind (relationship to parent). Note that is\n            meaningful even if there is no parent.\n        attributes: The span's attributes.\n        links: Links span to other spans\n        start_time: Sets the start time of a span\n        record_exception: Whether to record any exceptions raised within the\n            context as error event on the span.\n        set_status_on_exception: Only relevant if the returned span is used\n            in a with/context manager. Defines whether the span status will\n            be automatically set to ERROR when an uncaught exception is\n            raised in the span with block. The span status won't be set by\n            this mechanism if it was previously set manually.\n        end_on_exit: Whether to end the span automatically when leaving the\n            context manager.\n\n    Yields:\n        The newly-created span.\n    \"\"\"\n    return self.tracer.start_as_current_span(\n        name,\n        context,\n        kind,\n        attributes,\n        links,\n        start_time,\n        record_exception,\n        set_status_on_exception,\n        end_on_exit,\n    )\n
    "},{"location":"py_ref/misc/","title":"misc","text":"

    Miscellaneous utility functions for BitBazaar.

    "},{"location":"py_ref/misc/#py.bitbazaar.misc.copy_sig","title":"copy_sig(f)","text":"

    Keep e.g. a class's init signature when subclassing.

    From: https://github.com/python/typing/issues/769#issuecomment-903760354

    Source code in py/bitbazaar/misc/__init__.py
    def copy_sig(f: _T) -> tp.Callable[[tp.Any], _T]:\n    \"\"\"Keep e.g. a class's __init__ signature when subclassing.\n\n    From: https://github.com/python/typing/issues/769#issuecomment-903760354\n    \"\"\"\n    return lambda x: x\n
    "},{"location":"py_ref/misc/#py.bitbazaar.misc.in_ci","title":"in_ci()","text":"

    Returns true if it looks like the program is running from a CI service, e.g. Github Actions.

    Source code in py/bitbazaar/misc/__init__.py
    def in_ci() -> bool:\n    \"\"\"Returns true if it looks like the program is running from a CI service, e.g. Github Actions.\"\"\"\n    return any([var in os.environ for var in _CI_ENV_VARS])\n
    "},{"location":"py_ref/misc/#py.bitbazaar.misc.is_tcp_port_listening","title":"is_tcp_port_listening(host, port)","text":"

    Check if something is listening on a certain tcp port or not.

    Source code in py/bitbazaar/misc/__init__.py
    def is_tcp_port_listening(\n    host: str, port: int\n) -> bool:  # pragma: no cover (is covered but not in CI)\n    \"\"\"Check if something is listening on a certain tcp port or not.\"\"\"\n    try:\n        # Create a TCP socket\n        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        s.settimeout(1)  # Set timeout to 1 second\n\n        # Attempt to establish a connection to the port\n        s.connect((host, port))\n\n        # If connection is successful, something is listening on the port\n        s.close()\n        return True\n    except OSError:\n        return False\n
    "},{"location":"py_ref/testing/","title":"testing","text":"

    Useful downstream testing utilities.

    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager","title":"TmpFileManager()","text":"

    A context manager for managing temporary files and directories.

    Usage: with TmpFileManager() as manager: file_path = manager.tmpfile(content=\"Hello, temporary file!\") dir_path = manager.tmp_dir()

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def __init__(self):\n    self.root_dir = tempfile.mkdtemp()\n
    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager.cleanup","title":"cleanup()","text":"

    Clean up created temporary files and directories.

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def cleanup(self):\n    \"\"\"Clean up created temporary files and directories.\"\"\"\n    shutil.rmtree(self.root_dir)\n
    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager.tmpdir","title":"tmpdir(parent=None, name=None)","text":"

    Create a temporary directory.

    Parameters: - parent: Optional directory to create the temporary directory in. Otherwise will be placed in root.

    Returns: - The path to the created temporary directory.

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def tmpdir(\n    self, parent: tp.Optional[str] = None, name: tp.Optional[str] = None\n) -> pathlib.Path:\n    \"\"\"Create a temporary directory.\n\n    Parameters:\n    - parent: Optional directory to create the temporary directory in. Otherwise will be placed in root.\n\n    Returns:\n    - The path to the created temporary directory.\n    \"\"\"\n    if parent is None:\n        parent = self.root_dir\n\n    final_path = pathlib.Path(os.path.join(parent, str(uuid.uuid4()) if name is None else name))\n    os.mkdir(final_path)\n\n    self.dirs_created += 1\n    return final_path\n
    "},{"location":"py_ref/testing/#py.bitbazaar.testing.TmpFileManager.tmpfile","title":"tmpfile(content, suffix=None, parent=None, full_name=None)","text":"

    Create a temporary file.

    Parameters: - content: The content to write to the temporary file. - suffix: Optional suffix to append to the temporary file. Otherwise will be created with tempfile. - parent: Optional directory to create the temporary file in. Otherwise will be placed in root. - full_name: Optional full name of the temporary file, overrides suffix. Otherwise will be created with tempfile.

    Returns: - The path to the created temporary file.

    Source code in py/bitbazaar/testing/_tmp_file_manager.py
    def tmpfile(\n    self,\n    content: str,\n    suffix: tp.Optional[str] = None,\n    parent: tp.Optional[tp.Union[str, pathlib.Path]] = None,\n    full_name: tp.Optional[str] = None,\n) -> pathlib.Path:\n    \"\"\"Create a temporary file.\n\n    Parameters:\n    - content: The content to write to the temporary file.\n    - suffix: Optional suffix to append to the temporary file. Otherwise will be created with tempfile.\n    - parent: Optional directory to create the temporary file in. Otherwise will be placed in root.\n    - full_name: Optional full name of the temporary file, overrides suffix. Otherwise will be created with tempfile.\n\n    Returns:\n    - The path to the created temporary file.\n    \"\"\"\n    if parent is None:\n        parent = self.root_dir\n\n    filename: str\n    if full_name is not None:\n        filename = full_name\n    elif suffix is not None:\n        filename = str(uuid.uuid4()) + suffix\n    else:\n        filename = str(uuid.uuid4())\n\n    final_path = pathlib.Path(os.path.join(parent, filename))\n\n    with open(final_path, \"w\") as file:\n        file.write(content)\n\n    self.files_created += 1\n\n    return final_path\n
    "},{"location":"py_rust_ref/","title":"bitbazaar_rs","text":""},{"location":"py_rust_ref/#py_rust.python.bitbazaar_rs.hello","title":"hello()","text":"

    Returns Hello, World!

    Returns:

    Name Type Description str str

    Hello, World!

    Source code in py_rust/python/bitbazaar_rs/__init__.py
    from importlib.metadata import version\n\n__version__ = version(\"bitbazaar_rs\")\n\n__all__ = [\"__version__\"]\n\n# Import the rust modules and top level fns:\n
    "},{"location":"py_rust_ref/SUMMARY/","title":"SUMMARY","text":"
    • bitbazaar_rs
      • utils
    "},{"location":"py_rust_ref/utils/","title":"utils","text":""},{"location":"py_rust_ref/utils/#py_rust.python.bitbazaar_rs.utils.add","title":"add(a, b)","text":"

    Add two numbers.

    Parameters:

    Name Type Description Default a float

    First number.

    required b float

    Second number.

    required

    Returns:

    Type Description float

    Sum of the two numbers.

    Source code in py_rust/python/bitbazaar_rs/utils.pyi
    def add(a: float, b: float) -> float:\n    \"\"\"Add two numbers.\n\n    Args:\n        a: First number.\n        b: Second number.\n\n    Returns:\n        Sum of the two numbers.\n    \"\"\"\n    ...\n
    "},{"location":"rust_ref/doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7/","title":"SourceSerif4 LICENSE 3bb119e13b1258b7","text":"

    Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name \u2018Source\u2019. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.

    This Font Software is licensed under the SIL Open Font License, Version 1.1.

    This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL

    "},{"location":"rust_ref/doc/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7/#sil-open-font-license-version-11-26-february-2007","title":"SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007","text":"

    PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.

    The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.

    DEFINITIONS \"Font Software\" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.

    \"Reserved Font Name\" refers to any names specified as such after the copyright statement(s).

    \"Original Version\" refers to the collection of Font Software components as distributed by the Copyright Holder(s).

    \"Modified Version\" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.

    \"Author\" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.

    PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:

    1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.

    2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.

    3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.

    4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.

    5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.

    TERMINATION This license becomes null and void if any of the above conditions are not met.

    DISCLAIMER THE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

    "}]} \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 821d83b5..3fea0764 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ