              vt: dgesvd.vt,
                            }
                        }
                    }
                }
            }
            _ => {
                unimplemented!()
            }
        }
    }

    /// Cholesky Decomposition
    ///
    /// # Examples
    /// ```
    /// extern crate peroxide;
    /// use peroxide::fuga::*;
    ///
    /// fn main() {
    ///     let a = ml_matrix("1 2;2 5");
    ///     #[cfg(feature = "O3")]
    ///     {
    ///         let u = a.cholesky(Upper);
    ///         let l = a.cholesky(Lower);
    ///
    ///         assert_eq!(u, ml_matrix("1 2;0 1"));
    ///         assert_eq!(l, ml_matrix("1 0;2 1"));
    ///     }
    ///     a.print();
    /// }
    /// ```
    fn cholesky(&self, uplo: UPLO) -> Matrix {
        match () {
            #[cfg(feature = "O3")]
            () => {
                if !self.is_symmetric() {
                    panic!("Cholesky Error: Matrix is not symmetric!");
                }
                let dpotrf = lapack_dpotrf(self, uplo);
                match dpotrf {
                    None => panic!("Cholesky Error: Not symmetric or not positive definite."),
                    Some(x) => {
                        match x.status {
                            POSITIVE_STATUS::Failed(i) => panic!("Cholesky Error: the leading minor of order {} is not positive definite", i),
                            POSITIVE_STATUS::Success => {
                                match uplo {
                                    UPLO::Upper => x.get_U().unwrap(),
                                    UPLO::Lower => x.get_L().unwrap()
                                }
                            }
                        }
                    }
                }
            }
            _ => {
                unimplemented!()
            }
        }
    }

    /// Reduced Row Echelon Form
    ///
    /// Implementation of [RosettaCode](https://rosettacode.org/wiki/Reduced_row_echelon_form)
    fn rref(&self) -> Matrix {
        let mut lead = 0usize;
        let mut result = self.clone();
        for r in 0..self.row {
            if self.col <= lead {
                break;
            }
            let mut i = r;
            while result[(i, lead)] == 0f64 {
                i += 1;
                if self.row == i {
                    i = r;
                    lead += 1;
                    if self.col == lead {
                        break;
                    }
                }
            }
            unsafe {
                result.swap(i, r, Row);
            }
            let tmp = result[(r, lead)];
            if tmp != 0f64 {
                unsafe {
                    result.row_mut(r).iter_mut().for_each(|t| *(*t) /= tmp);
                }
            }
            for j in 0..result.row {
                if j != r {
                    let tmp1 = result.row(r).mul_scalar(result[(j, lead)]);
                    let tmp2 = result.row(j).sub_vec(&tmp1);
                    result.subs_row(j, &tmp2);
                }
            }
            lead += 1;
        }
        result
    }

    /// Determinant
    ///
    /// # Examples
    /// ```
    /// #[macro_use]
    /// extern crate peroxide;
    /// use peroxide::fuga::*;
    ///
    /// fn main() {
    ///     let a = matrix!(1;4;1, 2, 2, Row);
    ///     assert_eq!(a.det(), -2f64);
    /// }
    /// ```
    fn det(&self) -> f64 {
        assert_eq!(self.row, self.col);
        match () {
            #


__all__ = ["model"]

from icevision.imports import *
from icevision.models.torchvision.faster_rcnn.backbones import (
    resnet_fpn_configs as resnet_fpn,
)
from icevision.models.torchvision.utils import *
from icevision.models.torchvision.backbone_config import TorchvisionBackboneConfig

from torchvision.models.detection.faster_rcnn import (
    fasterrcnn_resnet50_fpn,
    FasterRCNN,
    FastRCNNPredictor,
)

def model(
    num_classes: int,
    backbone: Optional[TorchvisionBackboneConfig] = None,
    remove_internal_transforms: bool = True,
    **faster_rcnn_kwargs
) -> nn.Module:
    """FasterRCNN model implemented by torchvision.

    # Arguments
        num_classes: Number of classes.
        backbone: Backbone model to use. Defaults to a resnet50_fpn model.
        remove_internal_transforms: The torchvision model internally applies transforms
        like resizing and normalization, but we already do this at the `Dataset` level,
        so it's safe to remove those internal transforms.
        pretrained: Argument passed to `fastercnn_resnet50_fpn` if `backbone is None`.
        By default it is set to True: this is generally used when training a new model (transfer learning).
        `pretrained = False`  is used during inference (prediction) for cases where the users have their own pretrained weights.
        **faster_rcnn_kwargs: Keyword arguments that internally are going to be passed to
        `torchvision.models.detection.faster_rcnn.FastRCNN`.

    # Returns
        A Pytorch `nn.Module`.
    """
    if backbone is None:
        model = fasterrcnn_resnet50_fpn(
            pretrained=True, pretrained_backbone=True, **faster_rcnn_kwargs
        )

        in_features = model.roi_heads.box_predictor.cls_score.in_features
        model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)

        resnet_fpn.patch_param_groups(model.backbone)
    else:
        model = FasterRCNN(
            backbone.backbone, num_classes=num_classes, **faster_rcnn_kwargs
        )

    patch_rcnn_param_groups(model=model)

    if remove_internal_transforms:
        remove_internal_model_transforms(model)

    return model


from django.test import TestCase
import pytest

from django_dynamic_fixture.models_test import *
from django_dynamic_fixture.ddf import *
from django_dynamic_fixture.fixture_algorithms.sequential_fixture import SequentialDataFixture

data_fixture = SequentialDataFixture()

class DDFTestCase(TestCase):
    def setUp(self):
        self.ddf = DynamicFixture(data_fixture)

class CopyTest(DDFTestCase):
    def test_it_should_copy_from_model_fields(self):
        instance = self.ddf.get(ModelForCopy, int_a=Copier('int_b'), int_b=3)
        assert instance.int_a == 3

    def test_simple_scenario(self):
        instance = self.ddf.get(ModelForCopy, int_b=Copier('int_a'))
        assert instance.int_b == instance.int_a

    def test_order_of_attributes_must_be_superfluous(self):
        instance = self.ddf.get(ModelForCopy, int_a=Copier('int_b'))
        assert instance.int_a == instance.int_b

    def test_it_should_deal_with_multiple_copiers(self):
        instance = self.ddf.get(ModelForCopy, int_a=Copier('int_b'), int_c=Copier('int_d'))
        assert instance.int_a == instance.int_b
        assert instance.int_c == instance.int_d

    def test_multiple_copiers_can_depend_of_one_field(self):
        instance = self.ddf.get(ModelForCopy, int_a=Copier('int_c'), int_b=Copier('int_c'))
        assert instance.int_a == instance.int_c
        assert instance.int_b == instance.int_c

    def test_it_should_deal_with_dependent_copiers(self):
        instance = self.ddf.get(ModelForCopy, int_a=Copier('int_b'), int_b=Copier('int_c'))
        assert instance.int_a == instance.int_b
        assert instance.int_b == instance.int_c

    def test_it_should_deal_with_relationships(self):
        instance = self.ddf.get(ModelForCopy, int_a=Copier('e.int_e'))
        assert instance.int_a == instance.e.int_e

        instance = self.ddf.get(ModelForCopy, int_a=Copier('e.int_e'), e=DynamicFixture(data_fixture, int_e=5))
        assert instance.int_a == 5

    def test_it_should_raise_a_bad_data_error_if_value_is_invalid(self):
        with pytest.raises(BadDataError):
            self.ddf.get(ModelForCopy, int_a=Copier('int_b'), int_b=None)

    def test_it_should_raise_a_invalid_configuration_error_if_expression_is_bugged(self):
        with pytest.raises(InvalidConfigurationError):
            self.ddf.get(ModelForCopy, int_a=Copier('invalid_field'))
        with pytest.raises(InvalidConfigurationError):
            self.ddf.get(ModelForCopy, int_a=Copier('int_b.invalid_field'))

    def test_it_should_raise_a_invalid_configuration_error_if_copier_has_cyclic_dependency(self):
        with pytest.raises(InvalidConfigurationError):
            self.ddf.get(ModelForCopy, int_a=Copier('int_b'), int_b=Copier('int_a'))

    def test_it_must_copy_generated_data_mask_too(self):
        import re
        instance = self.ddf.get(ModelWithStrings, string=Mask('- _ #'), text=Copier('string'))
        assert re.match(r'[A-Z]{1} [a-z]{1} [0-9]{1}', instance.string)
        assert re.match(r'[A-Z]{1} [a-z]{1} [0-9]{1}', instance.text)


          this.isLoggedInSource.next(true);
          }
          return res;
        });
  }
}
import { Characteristic as C, getCharacteristic } from '../../constants';
import { booleanOption, choiceOption, numberOption, rollOption } from '../../utils/modifierUtils';
import { D6 } from '../dice';
import DiceValue from '../diceValue';
import type WeaponProfile from '../weaponProfile';
import BaseModifier from './BaseModifier';
import Bonus from './Bonus';

export default class ConditionalBonus extends BaseModifier {
  ['constructor']: typeof ConditionalBonus;
  on: number;
  bonus: DiceValue;
  unmodified: boolean;
  bonusToCharacteristic: C;

  constructor({ characteristic, on = 6, bonus = 1, unmodified = true, bonusToCharacteristic }) {
    super({ characteristic });
    this.on = Number(on);
    this.bonus = DiceValue.parse(bonus);
    this.unmodified = Boolean(unmodified);

    const c = getCharacteristic(bonusToCharacteristic);
    // @ts-ignore
    if (!this.constructor.availableBonusToCharacteristics.includes(c)) {
      throw new Error(
        // @ts-ignore
        `Invalid 'bonusToCharacteristic' provided to ${this.constructor.name} (${characteristic})`,
      );
    }
    this.bonusToCharacteristic = c;
  }

  static get displayName() {
    return 'Conditional Bonus';
  }

  static get description() {
    return `{unmodified} rolls of {on} for {characteristic} result in a bonus
    of {bonus} to {bonusToCharacteristic}`;
  }

  static get availableCharacteristics() {
    return [C.TO_HIT, C.TO_WOUND];
  }

  static get availableBonusToCharacteristics() {
    return [C.TO_WOUND, C.REND, C.DAMAGE];
  }

  static get options() {
    return {
      ...super.options,
      on: rollOption({ defaultVal: 6 }),
      bonus: numberOption({ defaultVal: 1, allowDice: true }),
      unmodified: booleanOption({ defaultVal: true }),
      bonusToCharacteristic: choiceOption({ items: this.availableBonusToCharacteristics }),
    };
  }

  resolve(owner: WeaponProfile) {
    let numHits = D6.getProbability(this.on);
    const rerollModifier = owner.modifiers.getRerollModifier(this.characteristic);
    if (rerollModifier) {
      numHits += rerollModifier.numRerolls(owner) * D6.getProbability(this.on);
    }
    return numHits;
  }

  getAsBonusModifier() {
    return new Bonus({ characteristic: this.bonusToCharacteristic, bonus: this.bonus });
  }
}
import { IPeersService, NotificationType } from './peersService'
import { PeerRequest } from './types'

type PeerContainer = {
  peers: string[]
}

//This function seems to signal the need for an abstraction, but it may be added later in a refactor
export function removePeerAndNotify<T extends PeerContainer>(
  containers: Record<string, T>,
  containerId: string,
  peerId: string,
  notificationType: NotificationType,
  containerKey: string,
  peersService?: IPeersService,
  deleteIfEmpty: boolean = true
): T {
  const container = containers[containerId]
  if (container) {
    const index = container.peers.indexOf(peerId)
    if (index !== -1) {
      container.peers.splice(index, 1)

      peersService?.notifyPeersById(container.peers, notificationType, {
        id: peerId,
        userId: peer


20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22currentColor%22%20aria-hidden%3D%22true%22%20data-slot%3D%22icon%22%3E%20%20%3Cpath%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20d%3D%22M19.5%2014.25v-2.625a3.375%203.375%200%200%200-3.375-3.375h-1.5A1.125%201.125%200%200%201%2013.5%207.125v-1.5a3.375%203.375%200%200%200-3.375-3.375H8.25m0%2012.75h7.5m-7.5%203H12M10.5%202.25H5.625c-.621%200-1.125.504-1.125%201.125v17.25c0%20.621.504%201.125%201.125%201.125h12.75c.621%200%201.125-.504%201.125-1.125V11.25a9%209%200%200%200-9-9Z%22%2F%3E%3C%2Fsvg%3E');
    -webkit-mask: var(--hero-document-text);
    mask: var(--hero-document-text);
    mask-repeat: no-repeat;
    background-color: currentColor;
    vertical-align: middle;
    display: inline-block;
    width: 1.5rem;
    height: 1.5rem;
  }
  .hero-exclamation-triangle {
    --hero-exclamation-triangle: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22currentColor%22%20aria-hidden%3D%22true%22%20data-slot%3D%22icon%22%3E%20%20%3Cpath%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20d%3D%22M12%209v3.75m-9.303%203.376c-.866%201.5.217%203.374%201.948%203.374h14.71c1.73%200%202.813-1.874%201.948-3.374L13.949%203.378c-.866-1.5-3.032-1.5-3.898%200L2.697%2016.126ZM12%2015.75h.007v.008H12v-.008Z%22%2F%3E%3C%2Fsvg%3E');
    -webkit-mask: var(--hero-exclamation-triangle);
    mask: var(--hero-exclamation-triangle);
    mask-repeat: no-repeat;
    background-color: currentColor;
    vertical-align: middle;
    display: inline-block;
    width: 1.5rem;
    height: 1.5rem;
  }
  .hero-eye {
    --hero-eye: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22currentColor%22%20aria-hidden%


l]+j], pivot++;
			}
		}
	}

	//---- feedforward the state layer ----//
	{
		int l=wind_layer+1;
		for(int t=0;t<sequence_length;t++)
		{
			U_INT pivot=nodes_dim[l]*t;
			FeatScore *features=feat_rec[l-1]+t*feat_dim[l-1];
			for (int j=0;j<nodes_dim[l];j++)
			{
				double *weights=layer_weight[l-1]+j*feat_dim[l-1];
				double sumover=AffineOut(features,weights,feat_dim[l-1]);
				feat_orig[l][pivot+j]=(FeatScore)sumover;
				feat_rec[l][pivot+j]=(FeatScore)sumover;
			}
		}
	}
}

//------------ back propagation function -------------//
void DeepCNF_Seq::BackPropagate(
	U_INT * feat_dim, FeatScore ** feat_orig, FeatScore ** feat_rec,           //-> input/output for feature dimension
	double ** layer_weight, double ** layer_grad,                            //-> output for gradient
	int sequence_length, int tot_layer, int * nodes_dim, int * windows_dim)  //-> input for layer and window dimension
{
	int wind_layer=tot_layer-2;
	//------- propagate state layer error -------//
	{
		int l=wind_layer+1;
		//-> init
		for(U_INT k=0;k<nodes_dim[l]*feat_dim[l-1];k++)layer_grad[l-1][k]=0;
		//-> calculate
		for(int t=0;t<sequence_length;t++)
		{
			U_INT pivot=nodes_dim[l]*t;
			FeatScore *features=feat_rec[l-1]+t*feat_dim[l-1];
			//--> calculate gradient
			for (int j=0;j<nodes_dim[l];j++)
			{
				FeatScore cur_error=feat_orig[l][pivot+j];        //-> final error should be put here !!
				double *grad=layer_grad[l-1]+j*feat_dim[l-1];
				for(U_INT k=0;k<feat_dim[l-1];k++)grad[k]+=cur_error*features[k];
			}
			//--> calculate expanded error
			vector <FeatScore> tmp_rec(feat_dim[l-1],0.0);
			for (int j=0;j<nodes_dim[l];j++)
			{
				FeatScore cur_error=feat_orig[l][pivot+j];
				double *weight=layer_weight[l-1]+j*feat_dim[l-1];
				for(U_INT k=0;k<feat_dim[l-1];k++)tmp_rec[k]+=(FeatScore)cur_error*weight[k]*GateDiff(features[k]);
			}
			for(U_INT k=0;k<feat_dim[l-1];k++)features[k]=tmp_rec[k];
		}
	}

	//--------- propagate from N to 1 layers ------------//
	for(int l=wind_layer;l>=1;l--)
	{
		// ------------- merge feat_rec to feat_orig to combine all the error ------------//
		//-> init
		for(U_INT k=0;k<nodes_dim[l]*sequence_length;k++)feat_orig[l][k]=0;
		for(U_INT k=0;k<nodes_dim[l]*feat_dim[l-1];k++)layer_grad[l-1][k]=0;
		//-> consider windows to calculate the expanded features at the current layer
		if(l<wind_layer) //--> for 1 to N-1 layers, considering windows
		{
			for(int t=0;t<sequence_length;t++)
			{
				U_INT pivot=feat_dim[l]*t;
				for(int i=0; i< 2*windows_dim[l]+1; i++)
				{
					int offs


/*
 * This file is part of brisk-menu.
 *
 * Copyright © 2016-2018 Brisk Menu Developers
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#include "util.h"

#include <stdlib.h>

BRISK_BEGIN_PEDANTIC
#include "entry-button.h"
#include "menu-private.h"
#include <string.h>
BRISK_END_PEDANTIC

/**
 * Compute a score for the given entry based on the input term.
 */
__brisk_pure__ static gint brisk_get_entry_score(BriskItem *item, const gchar *term)
{
        gint score = 0;
        autofree(gchar) *name = NULL;
        char *find = NULL;

        name = g_ascii_strdown(brisk_item_get_name(item), -1);
        if (g_str_equal(name, term)) {
                score += 100;
        } else if (g_str_has_prefix(name, term)) {
                score += 50;
        }

        find = strstr(name, term);
        if (find) {
                score += 20 + (int)strlen(find);
        }

        score += strcmp(name, term);

        return score;
}

__brisk_pure__ gint brisk_menu_window_sort(BriskMenuWindow *self, BriskItem *itemA,
                                           BriskItem *itemB)
{
        autofree(gchar) *nameA = NULL;
        autofree(gchar) *nameB = NULL;
        gint sc1 = -1, sc2 = -1;

        /* Handle normal searching */
        if (self->search_term) {
                sc1 = brisk_get_entry_score(itemA, self->search_term);
                sc2 = brisk_get_entry_score(itemB, self->search_term);
                return (sc1 > sc2) - (sc1 - sc2);
        }

        if (!self->active_section) {
                goto basic_sort;
        }

        sc1 = brisk_section_get_sort_order(self->active_section, itemB);
        sc2 = brisk_section_get_sort_order(self->active_section, itemA);

        /* Negative score means the section doesn't support custom ordering */
        if (sc1 >= 0 || sc2 >= 0) {
                /* Sort based on the sections understanding */
                return (sc1 > sc2) - (sc1 - sc2);
        }

basic_sort:
        /* Ensure we compare lower case only */
        nameA = g_ascii_strdown(brisk_item_get_display_name(itemA), -1);
        nameB = g_ascii_strdown(brisk_item_get_display_name(itemB), -1);

        return g_strcmp0(nameA, nameB);
}

/*
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
 *
 * Local variables:
 * c-basic-offset: 8
 * tab-width: 8
 * indent-tabs-mode: nil
 * End:
 *
 * vi: set shiftwidth=8 tabstop=8 expandtab:
 * :indentSize=8:tabSize=8:noTabs=true:
 */


    int _ => null,
    double _ => null,
  });
}
''');
  }

  Future<void> test_override() async {
    await assertDiagnostics(
      '''
void f(MyClass i) {
  (switch (i.runtimeType) {
    const (MyClass) => null,
    _ => null,
  });
}

class MyClass {
  @override
  Type get runtimeType => int;
}
''',
      [lint(31, 13)],
    );
  }

  Future<void> test_runtimeType() async {
    await assertDiagnostics(
      '''
void f(num i) {
  (switch (i.runtimeType) {
    const (int) => null,
    const (double) => null,
    _ => null,
  });
}
''',
      [lint(27, 13)],
    );
  }

  Future<void> test_runtimeTypeToString() async {
    await assertDiagnostics(
      '''
void f(num n) {
  (switch (n.runtimeType.toString()) {
    'int' => null,
    _ => null,
  });
}
''',
      [lint(27, 24)],
    );
  }

  Future<void> test_runtimeTypeToString_insideClass() async {
    await assertDiagnostics(
      '''
class A {
  void m() {
    (switch (runtimeType.toString()) {
      'A' => null,
      _ => null,
    });
  }
}
''',
      [lint(36, 22)],
    );
  }

  Future<void> test_runtimeTypeToString_insideClass_override() async {
    await assertDiagnostics(
      '''
class A {
  void m() {
    (switch (runtimeType.toString()) {
      'A' => null,
      _ => null,
    });
  }

  @override
  MyType get runtimeType => const MyType();
}

class MyType implements Type {
  const MyType();

  @override
  String toString() {
    return 'MyType';
  }
}
''',
      [lint(36, 22)],
    );
  }

  Future<void> test_runtimeTypeToString_noCall() async {
    await assertNoDiagnostics('''
void f(num n) {
  (switch (n.runtimeType.toString) {
    function => null,
    _ => null,
  });
}

void function() {}
''');
  }

  Future<void> test_runtimeTypeToString_noCall_insideClass() async {
    await assertNoDiagnostics('''
class A {
  void m() {
    (switch (runtimeType.toString) {
      function => null,
      _ => null,
    });
  }
}

void function() {}
''');
  }

  Future<void> test_stringAddition() async {
    await assertDiagnostics(
      r'''
void f(Type t) {
  (switch ('type: ' + t.toString()) {
    'type: int' => null,
    _ => null,
  });
}
''',
      [lint(28, 23)],
    );
  }

  Future<void> test_stringInterpolation() async {
    await assertDiagnostics(
      r'''
void f(Type t) {
  (switch ('type: $t') {
    'type: int' => null,
    _ => null,
  });
}
''',
      [lint(28, 10)],
    );
  }

  Future<void> test_stringInterpolation_innerConditionalResult() async {
    await assertDiagnostics(
      r'''
void f(Type t) {
  (switch ('type: ${1 == 1 ? '$t' : 'other'}') {
    'type: int' => null,
    _ => null,
  });
}
''',
      [lint(28, 34)],
    );
  }

  Future<void> test_stringInterpolation_innerInterpolation() async {
    await assertDiagnostics(
      r'''
void f(Type t)


会在词法环境变量中出现。我们来看一个简单例子，以了解其效果：

```jsx
const object1 = {
  property1: 42
};

object1[Symbol.unscopables] = {
  property1: true
};

with (object1) {
  console.log(property1);
  // expected output: Error: property1 is not defined
}
```

*注：在微前端环境下，通常需要对一些全局变量与属性进行更全面的梳理，此处可以参考 qiankun 的实现 [https://github.com/umijs/qiankun/blob/dbbc9acdb0733b3ab28e0470c969d65b57653ff0/src/sandbox/proxySandbox.ts#L255](https://github.com/umijs/qiankun/blob/dbbc9acdb0733b3ab28e0470c969d65b57653ff0/src/sandbox/proxySandbox.ts#L255)*

### 结合微前端框架 qiankun 介绍两类沙箱实现

微前端框架 qiankun 中一共存在三类沙箱，基于 Proxy 实现方式不同以及是否支持多实例，可以分为两类：

1. 支持子应用单实例沙箱（LegacySandbox）
2. 支持子应用多实例沙箱（ProxySandbox）

当我们只针对全局运行环境进行代理赋值记录，而不从中取值，那么这样的沙箱只是作为我们记录变化的一种手段，而实际操作仍在主应用运行环境中对 window 进行了读写，因此这类沙箱也只能支持单实例模式，qiankun 在实现上将其命名为 LegacySandbox。

我们先假设我们的沙箱实现上包含这几个变量（此处以 qiankun 实现为例）：

```jsx
/** 沙箱期间新增的全局变量 */
private addedPropsMapInSandbox = new Map<PropertyKey, any>();

/** 沙箱期间更新的全局变量 */
private modifiedPropsOriginalValueMapInSandbox = new Map<PropertyKey, any>();

/** 持续记录更新的(新增和修改的)全局变量的 map，用于在任意时刻做 snapshot */
private currentUpdatedPropsValueMap = new Map<PropertyKey, any>();
```

这类沙箱的激活与卸载思路可以通过如下两个函数代码解释。首先是激活函数，当沙箱被激活时，我们通过曾经记录好的更新过的全局变量（也可以称为快照）来还原子应用所需要的沙箱环境（即上下文）：

```tsx
active() {
  if (!this.sandboxRunning) {
    this.currentUpdatedPropsValueMap.forEach(
       (v, p) => this.setWindowProp(p, v)
    );
  }

  this.sandboxRunning = true;
}
```

等到需要卸载时，沙箱需要做两件事，一是将子应用运行时


fieldToCheck: string
}

export default (options: Options): Hook => {
  return async (context: HookContext): Promise<HookContext> => {

    const q = await context.service.Model.findById(context.id)

    //console.log(q)
    //console.log(q._id)
    console.log(context.params.user)

    if(!context.params.user._id.equals(q[options.fieldToCheck])){
      throw new Forbidden()
    }

    //console.log(q[options.fieldToCheck] == context.params.user._id)

    return context;
  };
};
import axios from 'axios'
import type { AxiosInstance } from 'axios'

import { ElLoading } from 'element-plus'
import { ILoadingInstance } from 'element-plus/lib/el-loading/src/loading.type'

import type { MyRequestInterceptors, MyRequestConfig } from './type'

const DEFAULT_LOADING = true

class MyRequest {
  instance: AxiosInstance
  interceptors?: MyRequestInterceptors
  showLoading: boolean
  loading?: ILoadingInstance

  constructor(config: MyRequestConfig) {
    // 创建 axios 实例
    this.instance = axios.create(config)
    // 保存信息
    this.interceptors = config.interceptors
    this.showLoading = config.showLoading ?? DEFAULT_LOADING

    // 使用 config 拦截器
    this.instance.interceptors.request.use(
      this.interceptors?.requestInterceptor,
      this.interceptors?.requestInterceptorCatch
    )
    this.instance.interceptors.response.use(
      this.interceptors?.responseInterceptor,
      this.interceptors?.responseInterceptorCatch
    )

    // 使用全局拦截器
    this.instance.interceptors.request.use(
      (config) => {
        // 添加 loading
        if (this.showLoading) {
          this.loading = ElLoading.service({
            lock: true,
            text: '正在请求数据...',
            background: 'rgba(0, 0, 0, 0.5)'
          })
        }
        return config
      },
      (err) => {
        return err
      }
    )

    this.instance.interceptors.response.use(
      (res) => {
        // 移除loading
        setTimeout(() => {
          this.loading?.close()
        }, 1000)

        const data = res.data
        // console.log(res)
        if (data.returnCode === '-1001') {
          console.log('请求失败')
        } else {
          return data
        }
      },
      (err) => {
        // 移除loading
        this.loading?.close()

        switch (err.response.status) {
          case 404:
            console.log('404 错误')
            break
          default:
            console.log('出现错误，请求失败')
        }
        return err
      }
    )
  }

  request<T>(config: MyRequestConfig<T>): Promise<T> {
    return new Promise((resolve, reject) => {
      if (config.interceptors?.requestInterceptor) {
        config = config.interceptors.requestInterceptor(config)
      }
      if (config.showLoading === false) {
        this.showLoading = config.showLoading
      }
      this.instance
        .request<any, T>(config)
        .then((res) => {
          // 1 单个请求对响应数据的处理
          if (config.interceptors?.responseInterceptor) {
            res = config.interceptors.responseInterceptor(res)
          }

          // 2 重置 showLoading 避免印象下一次请求
          this.showLoading = DEFA


using System.Text;

namespace Grauenwolf.TravellerTools.Characters;

public class Person
{
    public int ApparentAge { get; set; }

    public string Characteristics
    {
        get
        {
            var result = new StringBuilder();
            result.Append($"STR {Strength.Value} ({StrengthDM}) ");
            result.Append($"DEX {Dexterity.Value} ({DexterityDM}) ");
            result.Append($"END {Endurance.Value} ({EnduranceDM}) ");
            result.Append($"INT {Intellect.Value} ({IntellectDM}) ");
            result.Append($"EDU {Education.Value} ({EducationDM}) ");
            result.Append($"SOC {SocialStanding.Value} ({SocialStandingDM}) ");

            //TODO: Add secondary stats
            //result.Append($"TER {Ter.Value} ({EducationDM}) ");

            return result.ToString().Trim();
        }
    }

    public EHex Dexterity { get; set; }
    public int DexterityDM => Tables.DMCalc(Dexterity);


from django.shortcuts import render
from django.db.models import Case, When
from django.contrib.auth.models import User
from musicbeats.models import Song
from musicbeats.models import Watchlater

def index(request):
    song = Song.objects.all()[0:3]

    if request.user.is_authenticated:
        wl = Watchlater.objects.filter(user=request.user)
        ids = []
        for i in wl:
            ids.append(i.video_id)

        preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(ids)])
        watch = Song.objects.filter(song_id__in=ids).order_by(preserved)
        watch = reversed(watch)

    else:
        watch = Song.objects.all()[0:3]

    return render(request, 'index.htm', {'song': song, 'watch': watch})


] = "蛇颈龙的肉",
		[178431] = "礼品",
		[24616] = "石质长椅",
		[180479] = "火盆",
		[148739] = "木椅",
		[24627] = "木椅",
		[149031] = "岗哨火盆",
		[176384] = "木椅",
		[177408] = "篝火",
		[178432] = "礼品",
		[176808] = "营火",
		[180480] = "火盆",
		[148740] = "木椅",
		[175271] = "黑铁符文(矮人)",
		[176863] = "营火",
		[176385] = "木椅",
		[177409] = "火盆",
		[178433] = "礼品",
		[21065] = "码头",
		[173032] = "火焰",
		[148741] = "木椅",
		[22664] = "木椅",
		[111203] = "矮人营火",
		[176386] = "木椅",
		[177410] = "火盆",
		[178434] = "长袜",
		[24486] = "木椅",
		[32842] = "木椅",
		[148742] = "木椅",
		[3835] = "火堆余烬",
		[142979] = "熏肉架",
		[176387] = "木椅",
		[177411] = "火盆",
		[178435] = "长袜",
		[177292] = "火盆",
		[181541] = "瘟疫裂隙",
		[148743] = "木椅",
		[69282] = "营火",
		[61065] = "木椅",
		[176388] = "木椅",
		[18087] = "营火",
		[178436] = "长袜",
		[18343] = "营火",
		[176896] = "篝火",
		[148744] = "木椅",
		[176898] = "火坑",
		[61080] = "木椅",
		[176389] = "营火",
		[177413] = "火盆",
		[178437] = "花冠",
		[175467] = "古德曼杂货店",
		[32849] = "铁砧",
		[148745] = "木椅",
		[180583] = "暮光石板碎片",
		[19879] = "红色灵魂宝石",
		[176390] = "营火",
		[48457] = "小木凳",
		[178438] = "灯光",
		[19569] = "风险投资公司控制区边界",
		[32843] = "木椅",
		[181510] = "瘟疫裂隙",
		[1838] = "营火",
		[113569] = "盗贼区",
		[176945] = "莫沙彻营地",
		[50505] = "雷霆崖咨询处",


BLANK_FORM;
}

export function getEventFormForEventCategoryId<EventCategoryType extends EventCategoryFormData>(
  eventCategoryId: string | undefined | null,
  convention: ConventionForEventCategoryForms<EventCategoryType>,
): CommonFormFieldsFragment {
  return getFormDataForEventCategoryId(eventCategoryId, convention, (eventCategory) => eventCategory.event_form);
}

export function getProposalFormForEventCategoryId<EventCategoryType extends EventCategoryFormData>(
  eventCategoryId: string | undefined | null,
  convention: ConventionForEventCategoryForms<EventCategoryType>,
): CommonFormFieldsFragment {
  return getFormDataForEventCategoryId(
    eventCategoryId,
    convention,
    (eventCategory) => eventCategory.event_proposal_form,
  );
}
import BaseManager from "./BaseManager";
import CommandChannel from "../controller/CommandChannel";

export default class HitManager extends BaseManager{
    // private  _heroList:Array<any>;
    // private  _bulletGroupList:Array.<BaseBulletGroup>;
    // private  _enemyList:Array.<Enemy>
    public constructor(channel:CommandChannel){
        super(channel);
        // _bulletGroupList = new Array.<BaseBulletGroup>;
    }

    public init():void{
        // Laya.timer.loop(30,this,this.update);
        // _heroList = this.channel.postCommand(ConstName.ROLE_CONTROLLER,ConstName.ROLE_GET_HERO_LIST) as Array.<Hero>;
        // _enemyList = this.channel.postCommand(ConstName.ROLE_CONTROLLER,ConstName.ROLE_GET_ENEMY_LIST) as Array.<Enemy>;
        // for each(var hero:Role in _heroList) {
        //     _bulletGroupList.push(hero.bulletGroup);
        // }
    }

    /**
     *检测碰撞主循环
     *需要特别注意，性能
     *随时进行优化
     */
    private  update():void {
        // var attackRect:Rectangle;
        // var hitRect:Rectangle;

        // for each(var bulletGroup:BaseBulletGroup in _bulletGroupList) {
        //     var bulletList:Array.<BulletAnimation> = bulletGroup.bulletList;
        //     for each(var bullet:BulletAnimation in bulletList) {
        //         attackRect = bullet.getGraphicBounds(true);
        //         attackRect.x = bullet.x;
        //         attackRect.y = bullet.y;
        //         for each(var enemy:Enemy in _enemyList) {
        //             if(!enemy.isDie){
        //                 hitRect = enemy.gameAni.getGraphicBounds(true);
        //                 hitRect.x = enemy.gameAni.x;
        //                 hitRect.y = enemy.gameAni.y;
        //                 if(attackRect.intersection(hitRect)) {
        //                     enemy.beHurted();
        //                 }
        //             }
        //         }
        //     }
        // }
    }
} 'use strict';
// Create a function that can reverse a string, which is passed as the parameter
// Use it on this reversed string to check it!

let toBeReversed: string = `.eslaf eb t'ndluow ecnetnes siht ,dehctiws erew eslaf dna eurt fo sgninaem eht fI`;

function reverseString(toBeReversed) {
    let splitString = toBeReversed.split('');
    let  reverseArray = splitString.reverse();
    let joinArray = reverseArray.join('');
    return joinArray;
}

console.log(reverseString(toBeReversed));

// Step 1. Use the split() method to return a new array

// Step 2. Use the reverse() method to reverse the new created array

// Step 3. Use the join() method to join all elements of the array into a string

//Step 4. Return the reversed stringimport { Cat } from './


72 "echo32.c" 1
	mov    [SHA3_S+240],    edi
# 0 "" 2
# 572 "echo32.c" 1
	mov    [SHA3_S+240+4],  esp
# 0 "" 2
# 572 "echo32.c" 1
	mov    [SHA3_S+240+8],  ebp
# 0 "" 2
# 572 "echo32.c" 1
	mov    [SHA3_S+240+12], esi
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm0, [SHA3_S+16*9]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm1, [SHA3_S+16*9+8]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm2, [SHA3_S+16*13]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm3, [SHA3_S+16*13+8]
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*13],   mm0
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*13+8], mm1
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*9],   mm2
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*9+8], mm3
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm0, [SHA3_S+16*5]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm1, [SHA3_S+16*5+8]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm2, [SHA3_S+16*13]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm3, [SHA3_S+16*13+8]
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*13],   mm0
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*13+8], mm1
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*5],   mm2
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*5+8], mm3
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm0, [SHA3_S+16*1]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm1, [SHA3_S+16*1+8]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm2, [SHA3_S+16*13]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm3, [SHA3_S+16*13+8]
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*13],   mm0
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*13+8], mm1
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*1],   mm2
# 0 "" 2
# 573 "echo32.c" 1
	movq  [SHA3_S+16*1+8], mm3
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm0, [SHA3_S+16*2]
# 0 "" 2
# 573 "echo32.c" 1
	movq  mm1, [SHA3_S+16*2+8]


//
//     Generated by class-dump 3.5 (64 bit).
//
//     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2015 by Steve Nygard.
//

#import <objc/NSObject.h>

#import <CloudKitDaemon/NSURLSessionDataDelegate-Protocol.h>
#import <CloudKitDaemon/NSURLSessionDelegate-Protocol.h>
#import <CloudKitDaemon/NSURLSessionTaskDelegatePrivate-Protocol.h>

@class NSMutableDictionary, NSString;
@protocol OS_dispatch_queue;

__attribute__((visibility("hidden")))
@interface CKDURLSessionPool : NSObject <NSURLSessionDelegate, NSURLSessionTaskDelegatePrivate, NSURLSessionDataDelegate>
{
    NSMutableDictionary *_delegateByTaskDescription;
    NSMutableDictionary *_sessionByIdentifier;
    NSMutableDictionary *_ephemeralSessionByName;
    NSMutableDictionary *_sessionConfigurationReferenceByName;
    NSMutableDictionary *_sessionConfigurationReferenceByIdentifier;
    NSObject<OS_dispatch_queue> *_queue;
    int _backgroundSessionConnectionPoolLimit;
    int _networkdNotifyToken;
}

+ (id)backgroundSessionConnectionPoolName;
+ (id)sharedURLSessionPool;
- (void).cxx_destruct;
- (void)URLSession:(id)arg1 task:(id)arg2 _conditionalRequirementsChanged:(_Bool)arg3;
- (void)URLSession:(id)arg1 _taskIsWaitingForConnection:(id)arg2;
- (void)URLSession:(id)arg1 task:(id)arg2 _willSendRequestForEstablishedConnection:(id)arg3 completionHandler:(CDUnknownBlockType)arg4;
- (void)URLSession:(id)arg1 task:(id)arg2 didCompleteWithError:(id)arg3;
- (void)URLSession:(id)arg1 task:(id)arg2 didSendBodyData:(long long)arg3 totalBytesSent:(long long)arg4 totalBytesExpectedToSend:(long long)arg5;
- (void)URLSession:(id)arg1 task:(id)arg2 needNewBodyStream:(CDUnknownBlockType)arg3;
- (void)URLSession:(id)arg1 dataTask:(id)arg2 didReceiveData:(id)arg3;
- (void)URLSession:(id)arg1 dataTask:(id)arg2 didReceiveResponse:(id)arg3 completionHandler:(CDUnknownBlockType)arg4;
- (void)URLSession:(id)arg1 task:(id)arg2 willPerformHTTPRedirection:(id)arg3 newRequest:(id)arg4 completionHandler:(CDUnknownBlockType)arg5;
- (void)URLSession:(id)arg1 didReceiveChallenge:(id)arg2 completionHandler:(CDUnknownBlockType)arg3;
- (void)URLSession:(id)arg1 didBecomeInvalidWithError:(id)arg2;
- (void)_performAsyncOnDelegateOfSession:(id)arg1 task:(id)arg2 fromSelector:(SEL)arg3 block:(CDUnknownBlockType)arg4;
- (void)invalidateDataTask:(id)arg1;
- (id)dataTaskWithTaskDescription:(id)arg1 configuration:(id)arg2 configurationName:(id)arg3 request:(id)arg4 delegate:(id)arg5;
- (id)_URLSessionWithConfiguration:(id)arg1 configurationName:(id)arg2 forDelegate:(id)arg3;
- (void)checkinSessionConfiguration:(id)arg1 withName:(id)arg2;
- (void)setSessionConfiguration:(id)arg1 forName:(id)arg2;
- (id)checkoutSessionConfigurationWithName:(id)arg1;
@property(readonly, nonatomic) int backgroundSessionConnectionPoolLimit;
- (void)_updateBackgroundSessionConnectionPoolLimit;
- (void)dealloc;
- (id)init;

// Remaining properties
@property(readonly, copy) NSString *debugDescription;
@property(readonly, copy) NSString *description;
@property(readonly) unsigned long long hash;
@property(readonly) Class superclass;

@end


namespace PlumbBuddy;

sealed class ReadOnlyMemoryOfByteStream :
    Stream
{
    public ReadOnlyMemoryOfByteStream(ReadOnlyMemory<byte> readOnlyMemoryOfBytes) =>
        this.readOnlyMemoryOfBytes = readOnlyMemoryOfBytes;

    long position;
    readonly ReadOnlyMemory<byte> readOnlyMemoryOfBytes;

    public override bool CanRead =>
        true;

    public override bool CanSeek =>
        true;

    public override bool CanWrite =>
        false;

    public override long Length =>
        readOnlyMemoryOfBytes.Length;

    public override long Position
    {
        get => position;
        set
        {
            ArgumentOutOfRangeException.ThrowIfNegative(value, nameof(value));
            ArgumentOutOfRangeException.ThrowIfGreaterThan(value, readOnlyMemoryOfBytes.Length, nameof(value));
            position = value;
        }
    }

    public override void Flush()
    {
        // no op
    }

    public override int Read(byte[] buffer, int offset, int count)
    {
        ArgumentNullException.ThrowIfNull(buffer);
        ArgumentOutOfRangeException.ThrowIfLessThan(offset, 0);
        ArgumentOutOfRangeException.ThrowIfLessThan(count, 0);
        if (buffer.Length - offset < count)
            throw new Argum


I* _GetControllerCountJMS586_20) ();
typedef BOOL(WINAPI* _GetSmartInfoJMS586_20) (int index, unsigned char port, UNION_SMART_ATTRIBUTE* attribute, UNION_SMART_THRESHOLD* threshold);
typedef BOOL(WINAPI* _GetIdentifyInfoJMS586_20) (int index, unsigned char port, UNION_IDENTIFY_DEVICE* identify);

typedef BOOL(WINAPI* _GetNVMePortInfoJMS586_20) (int index, unsigned char port, NVME_PORT_20* nvmePort);
typedef BOOL(WINAPI* _GetNVMeSmartInfoJMS586_20) (int index, unsigned char port, UNION_SMART_ATTRIBUTE* smartInfo);

// JMicron JMS586_New API
typedef DWORD(WINAPI* _GetDllVersionJMS586_40) (PBYTE major, PBYTE minor, PBYTE revision, PBYTE release);
typedef int(WINAPI* _GetControllerCountJMS586_40) ();
typedef BOOL(WINAPI* _GetSmartInfoJMS586_40) (BYTE index, unsigned char port, UNION_SMART_ATTRIBUTE* attribute, UNION_SMART_THRESHOLD* threshold);
typedef BOOL(WINAPI* _GetIdentifyInfoJMS586_40) (BYTE index, unsigned char port, UNION_IDENTIFY_DEVICE* identify);

typedef BOOL(WINAPI* _GetNVMePortInfoJMS586_40) (BYTE index, unsigned char port, NVME_PORT_40* nvmePort);
typedef BOOL(WINAPI* _GetNVMeSmartInfoJMS586_40) (BYTE index, unsigned char port, UNION_SMART_ATTRIBUTE* smartInfo);
typedef BOOL(WINAPI* _GetNVMeIdInfoJMS586_40) (BYTE index, unsigned char port, NVME_ID* nvmeId);
typedef BOOL(WINAPI* _ControllerSerialNum2IdJMS586_40) (BYTE csn, BYTE* cid);


/*
 * Copyright (c) 2013 Patrick Kelsey. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/mman.h>

void
shm_path(struct shmfd *shmfd, char *path, size_t size)
{
	panic("shm_path() is not implemented\n");
}


#3
	pop {r3, pc}
_0224E296:
	bl GF_AssertFail
	mov r0, #0
	pop {r3, pc}
	.balign 4, 0
	thumb_func_end ov02_0224E26C

	thumb_func_start ov02_0224E2A0
ov02_0224E2A0: ; 0x0224E2A0
	push {r3, lr}
	cmp r0, #3
	bhi _0224E2CA
	add r0, r0, r0
	add r0, pc
	ldrh r0, [r0, #6]
	lsl r0, r0, #0x10
	asr r0, r0, #0x10
	add pc, r0
_0224E2B2: ; jump table
	.short _0224E2BA - _0224E2B2 - 2 ; case 0
	.short _0224E2BE - _0224E2B2 - 2 ; case 1
	.short _0224E2C2 - _0224E2B2 - 2 ; case 2
	.short _0224E2C6 - _0224E2B2 - 2 ; case 3
_0224E2BA:
	mov r0, #1
	pop {r3, pc}
_0224E2BE:
	mov r0, #0
	pop {r3, pc}
_0224E2C2:
	mov r0, #3
	pop {r3, pc}
_0224E2C6:
	mov r0, #2
	pop {r3, pc}
_0224E2CA:
	bl GF_AssertFail
	mov r0, #0
	pop {r3, pc}
	.balign 4, 0
	thumb_func_end ov02_0224E2A0

	thumb_func_start ov02_0224E2D4
ov02_0224E2D4: ; 0x0224E2D4
	push {r3, lr}
	sub r0, #0xc
	cmp r0, #3
	bhi _0224E300
	add r0, r0, r0
	add r0, pc
	ldrh r0, [r0, #6]
	lsl r0, r0, #0x10
	asr r0, r0, #0x10
	add pc, r0
_0224E2E8: ; jump table
	.short _0224E2F0 - _0224E2E8 - 2 ; case 0
	.short _0224E2F4 - _0224E2E8 - 2 ; case 1
	.short _0224E2F8 - _0224E2E8 - 2 ; case 2
	.short _0224E2FC - _0224E2E8 - 2 ; case 3
_0224E2F0:
	mov r0, #0xd
	pop {r3, pc}
_0224E2F4:
	mov r0, #0xc
	pop {r3, pc}
_0224E2F8:
	mov r0, #0xf
	pop {r3, pc}
_0224E2FC:
	mov r0, #0xe
	pop {r3, pc}
_0224E300:
	bl GF_AssertFail
	mov r0, #0
	pop {r3, pc}
	thumb_func_end ov02_0224E2D4

	thumb_func_start ov02_0224E308
ov02_0224E308: ; 0x0224E308
	ldr r1, _0224E318 ; =0x00000165
	cmp r0, r1
	bne _0224E312
	mov r0, #1
	bx lr
_0224E312:
	mov r0, #0
	bx lr
	nop
_0224E318: .word 0x00000165
	thumb_func_end ov02_0224E308


具体步骤
*需要对原示例库中各个笔记文件、脚本文件、插件设置中的路径进行替换 。也就是要替换路径的，是在上两个步骤中移动的 *

#### 上两个步骤中，共移动了
- **88-Template 目录**
> [!blank]
		> - 88-Template 目录下的文件到 Z-120 BTE Homepage 目录内
			> - 88-Template\\EnablepluginList 目录下的文件到 Z-610 目录内
			> - 88-Template\\tp 目录下的文件到 Z-200 目录内
			> - 88-Template\\script 目录下的文件到 Z-300 目录内
			> - 88-Template\\ReactJS 目录下的文件到 Z-400 目录内
- **60-Canvas 目录**下的文件（夹） Z-120 BTE CanvasHome 目录内，子目录保持了不变
- **99-Attachment 目录**，整个移动到了 Y-000 目录
- **其它数据文件夹**（50-Iinbox暂时按照数据文件夹处理），全部整个移动到 X-110_BTE 目录内，成为了它的子目录，原目录名称保持必变
> [!blank]
			> - 00-Tips目录，移动到了 X-110_BTE 目录下，成为了 `X-000/X-100/X-110_BTE/00-Tips`
			> - 10-Help目录，移动到了 X-110_BTE 目录下，成为了 `X-000/X-100/X-110_BTE/10-Help`
			> - 20-Diary目录，移动到了 X-110_BTE 目录下，成为了 `X-000/X-100/X-110_BTE/20-Diary`
			> - 30-Reading目录，移动到了 X-110_BTE 目录下，成为了 `X-000/X-100/X-110_BTE/30-Reading`
			> - 40-Booknote目录，移动到了 X-110_BTE 目录下，成为了 `X-000/X-100/X-110_BTE/40-Booknote`
			> - 50-Inbox目录，移动到了 X-110_BTE 目录下，成为了 `X-000/X-100/X-110_BTE/50-Inbox`
			> - 77-Example目录，移动到了 X-110_BTE 目录下，成为了 `X-000


   return;
    }

    API(FreeDhKey)(&handle->dh);
    tr_free(handle->private_key);
    tr_free(handle);
}

bool tr_dh_make_key(tr_dh_ctx_t raw_handle, size_t private_key_length UNUSED, uint8_t* public_key, size_t* public_key_length)
{
    TR_ASSERT(raw_handle != NULL);
    TR_ASSERT(public_key != NULL);

    struct tr_dh_ctx* handle = raw_handle;
    word32 my_private_key_length;
    word32 my_public_key_length;
    tr_lock* rng_lock = get_rng_lock();

    if (handle->private_key == NULL)
    {
        handle->private_key = tr_malloc(handle->key_length);
    }

    tr_lockLock(rng_lock);

    if (!check_result(API(DhGenerateKeyPair)(&handle->dh, get_rng(), handle->private_key, &my_private_key_length, public_key,
        &my_public_key_length)))
    {
        tr_lockUnlock(rng_lock);
        return false;
    }

    tr_lockUnlock(rng_lock);

    tr_dh_align_key(public_key, my_public_key_length, handle->key_length);

    handle->private_key_length = my_private_key_length;

    if (public_key_length != NULL)
    {
        *public_key_length = handle->key_length;
    }

    return true;
}

tr_dh_secret_t tr_dh_agree(tr_dh_ctx_t raw_handle, uint8_t const* other_public_key, size_t other_public_key_length)
{
    TR_ASSERT(raw_handle != NULL);
    TR_ASSERT(other_public_key != NULL);

    struct tr_dh_ctx* handle = raw_handle;
    struct tr_dh_secret* ret;
    word32 my_secret_key_length;

    ret = tr_dh_secret_new(handle->key_length);

    if (check_result(API(DhAgree)(&handle->dh, ret->key, &my_secret_key_length, handle->private_key, handle->private_key_length,
        other_public_key, other_public_key_length)))
    {
        tr_dh_secret_align(ret, my_secret_key_length);
    }
    else
    {
        tr_dh_secret_free(ret);
        ret = NULL;
    }

    return ret;
}

/***
****
***/

bool tr_rand_buffer(void* buffer, size_t length)
{
    TR_ASSERT(buffer != NULL);

    bool ret;
    tr_lock* rng_lock = get_rng_lock();

    tr_lockLock(rng_lock);
    ret = check_result(API(RNG_GenerateBlock)(get_rng(), buffer, length));
    tr_lockUnlock(rng_lock);

    return ret;
}


016.333-.031.156-.141.307-.443.307-.292 0-.458-.167-.458-.411v-.443H14.87v.349c0 1.01.792 1.318 1.651 1.318.823 0 1.495-.276 1.604-1.042.063-.396.016-.641 0-.75-.182-.948-1.911-1.234-2.031-1.755a.626.626 0 010-.245c.026-.151.135-.307.411-.307.26 0 .427.167.427.411v.276h1.13v-.318c0-.995-.885-1.146-1.526-1.146-.813 0-1.469.255-1.589 1.005-.031.198-.031.385.01.615.188.943 1.792 1.203 2.021 1.802zm3.849.61c.323 0 .411-.214.443-.333.016-.047.016-.125.016-.172v-3.375h1.161v3.286c0 .089 0 .26-.016.302-.073.859-.75 1.135-1.589 1.135s-1.51-.276-1.589-1.135c0-.042-.016-.214-.016-.302v-3.286h1.161v3.375c0 .063 0 .125.016.172 0 .12.094.333.411.333zm9.537-.047c.339 0 .443-.214.474-.333.016-.047.016-.125.016-.167v-.661h-.474v-.672h1.62v1.224c0 .094 0 .151-.016.307-.078.839-.797 1.13-1.604 1.13-.813 0-1.526-.292-1.604-1.13-.016-.156-.016-.214-.016-.307v-1.927c0-.073.016-.229.016-.302.104-.859.792-1.135 1.604-1.135.807 0 1.51.276 1.604 1.135.016.135.016.302.016.302v.156h-1.146v-.26s0-.109-.016-.172c-.016-.104-.109-.333-.458-.333-.339 0-.427.214-.458.333-.016.063-.016.141-.016.219v2.094c0 .057 0 .12.016.167 0 .12.12.333.443.333z"/></svg>';
  static const String samsung_pay =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path fill="currentColor" d="M31.969 14.271c-.177-5.104-1.516-9.214-4.542-11.458S19.854-.208 14.141.063c-2.599.125-4.938.464-6.839 1.224-1.958.786-3.474 1.896-4.583 3.438C.49 7.824-.198 12.506.047 17.897c.234 5.12 1.557 9.172 4.62 11.38 3.047 2.198 7.995 2.896 13.214 2.672 5.063-.214 9.177-1.552 11.38-4.62 2.198-3.063 2.896-7.578 2.708-13.057zM8.802 19.693h-.661v-1.417h.661c1.26 0 2.182-.974 2.182-2.182a2.181 2.181 0 00-2.182-2.182h-2.13a.174.174 0 00-.167.125v7.734H5.13v-7.734c0-.849.693-1.542 1.542-1.542h2.13c1.99 0 3.635 1.615 3.635 3.599 0 1.99-1.536 3.599-3.635 3.599zm1


Implement more rigorous chaos testing of all data center functions including the full removal of each of our core data center facilities

Thorough auditing of all core data centers and a plan to reaudit to ensure they comply with our standards

Logging and analytics disaster recovery plan that ensures no logs are dropped even in the case of a failure of all our core facilities

As I said earlier, I am sorry and embarrassed for this incident and the pain that it caused our customers and our team. We have the right systems and procedures in place to be able to withstand even the cascading string of failures we saw at our data center provider, but we need to be more rigorous about enforcing that they are followed and tested for unknown dependencies. This will have my full attention and the attention of a large portion of our team through the balance of the year. And the pain from the last couple of days will make us better.

7 min read

The CloudFlare London office hosts weekly internal Tech Talks (with free lunch picked by the speaker). My recent one was an explanation of the latest version of TLS, 1.3, how it works and why it's faster and safer.

You can watch the complete talk below or just read my summarized transcript.

Update: you might want to watch my more recent and extended 33c3 talk instead.

The Q&A session is open! Send us your questions about TLS 1.3 at tls13@cloudflare.com or leave them in the Disqus comments below and I'll answer them in an upcoming blog post.

.post-content iframe { margin: 0; }

Summarized transcript

			<svg width="16" height="16" viewBox="0 0 24 24">
				<path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path>
			</svg>

	<figure class


if not blob or not os.path.exists(blob):
                logger.warning(f"Path {blob} does not exist or is not defined.")
                continue

            # Artifact title is basename or user defined
            blob_name = item.get("title") or os.path.basename(blob)

            # If it's a directory, we need to compress
            cleanup_blob = False
            if os.path.isdir(blob):
                blob = oras.utils.make_targz(blob)
                cleanup_blob = True

            # Create a new layer from the blob
            layer = oras.oci.NewLayer(blob, media_type, is_dir=cleanup_blob)
            logger.debug(f"Preparing layer {layer}")

            # Update annotations with title we will need for extraction
            annots.update({oras.defaults.annotation_title: blob_name})
            layer["annotations"] = annots

            # update the manifest with the new layer
            manifest["layers"].append(layer)

            # Upload the blob layer
            logger.info(f"Uploading {blob} to {container.uri}")
            response = self.upload_blob(blob, container, layer)
            self._check_200_response(response)

            # Do we need to cleanup a temporary targz?
            if cleanup_blob and os.path.exists(blob):
                os.remove(blob)

        # Prepare manifest and config (add your custom annotations here)
        manifest["annotations"] = {}
        conf, config_file = oras.oci.ManifestConfig()
        conf["annotations"] = {}

        # Config is just another layer blob!
        response = self.upload_blob(config_file, container, conf)
        self._check_200_response(response)

        # Final upload of the manifest
        manifest["config"] = conf
        self._check_200_response(self.upload_manifest(manifest, container))
        print(f"Successfully pushed {container}")
        return response
```

And here is an example of how you might assemble your artifacts and use the
function above to get a client and push! 🎉

```python
from datetime import datetime
import oras.utils

def push(uri, root):
    """
    Given an ORAS identifier, save artifacts to it.
    """
    oras_cli = get_oras_client()

    # Create lookup of archives - relative path and mediatype
    archives = []
    now = datetime.now()

    # Using os.listdir assumes we have single files at the base of our root.
    for filename in os.listdir(root):

        # use some logic here to derive the mediaType
        media_type = "application/x-org.dinosaur.tool.datatype"

        # Add some custom annotations!
        size = os.path.getsize(os.path.join(root, filename))  # bytes
        annotations = {"creationTime": str(now), "size": str(size)}
        archives.append(
            {
                "path": filename,
                "title": filename,
                "media_type": media_type,
                "annotations": annotations,
             }
         )

    # Push should be relative to cache context
    with oras.utils.workdir(root):
        oras_cli.push(uri, archives)
```

</details>

<details>

<summary>Example of basic artifact attachment</summary>

We are assuming an `derived-artifact.txt` in the present working directory and that there's already a `localhost:5000/dinosaur/artifact:v1` artifact present in the registry. Here is an example of how to [attach](https://oras.land/docs/concepts/reftypes/) a derived artifact to the existing artifact.

```python
import oras.client
import oras.oci

client = oras.client.OrasClient(insecure=True)

manifest = client.remote.get_manifest("localhost:5000/dinosaur/artifact:v1")
subject = oras.oci.Subject.from_manifest(manifest)

client.push(files=["derived-artifact.txt"], target="localhost:5000/dinosaur/artifact:v1-derived", subject=subject)
Successfully pushed


                rb.ContactList = null;
                    }
                }
            }

            for (index = 0, length = world.BodyList.Count; index < length; index++) {
                Physics2D.Body rb = world.BodyList[index];

                if (clonedPhysics.ContainsKey(rb.BodyId)) {
                    BodyClone2D rbClone = clonedPhysics[rb.BodyId];

                    if (rbClone.contactEdgeClone != null) {
                        rb.ContactList = rbClone.contactEdgeClone.Restore(true, contactDic, contactEdgeDic);
                    }
                }
            }

            islandClone.Restore(world.Island, contactDic);
            toiClone.Restore(world._input);

            TreeNode<FixtureProxy>[] treeNodes = ((DynamicTreeBroadPhase)world.ContactManager.BroadPhase)._tree._nodes;
            for (index = 0, length = treeNodes.Length; index < length; index++) {
                TreeNode<FixtureProxy> tn = treeNodes[index];

                poolTreeFixtureProxy.GiveBack(tn);
            }

            dynamicTreeClone.Restore((DynamicTreeBroadPhase)world.ContactManager.BroadPhase);

            world._worldHasNewFixture = this._worldHasNewFixture;

            Body._bodyIdCounter = bodyCounter;
            Fixture._fixtureIdCounter = fixtureCounter;
        }

    }

}


Paths,
            { it: Path -> it.toString().endsWith(".class") }) {
            reloadClasses()
        }
        fileWatcher.start()
    }

    private fun reloadClasses() {
        SwingUtilities.invokeLater {
            generateSequence(0) { it + 1 }
                .take(10)   // max number of attempts
                .firstOrNull { attempt ->
                    try {
                        reloadClasses(drawFrameClassName)
                        true // Success, stop trying
                    } catch (e: ClassToReloadException) {
                        println("Class needs reload: ${e.className}")
                        false // Continue trying
                    } catch (e: Exception) {
                        println("❌ Failed to reload classes: ${e.message}")
                        e.printStackTrace()
                        true // Fatal error, stop trying
                    }
                }
        }
    }

    private fun reloadClasses(drawFrameClassName: String) {
        val changedClasses = hotReloadClassLoader.changedClasses()
        if (changedClasses.isEmpty()) {
            return
        }

        println("🔥 Reloading changed classes: ${changedClasses.size}")
        // for debugging purposes
        //println("Changed classes:\n${changedClasses.joinToString("\n")}")

        // Create a NEW classloader for hot reload.
        // We can't redefine classes in the same classloader!
        hotReloadClassLoader = HotReloadClassLoader(watchPaths)

        // Set the current thread's context classloader temporarily
        val originalClassLoader = Thread.currentThread().contextClassLoader
        try {
            Thread.currentThread().contextClassLoader = hotReloadClassLoader

            if (drawFrameClassName.contains("\$\$Lambda/")) {
                println("❌ Lambda detected: use `Drawing` instance instead of lambda!")
                return
            }

            // Try to reload the DrawFrame with the new classloader
            // We MUST load it with the new classloader even if it hasn't changed,
            // so it can access updated dependencies
            val drawFrameClass = try {
                hotReloadClassLoader.loadClass(drawFrameClassName)
            } catch (e: Exception) {
                println("❌ Could not load DrawFrame class $drawFrameClassName with new classloader: ${e.message}")
                null
            }

            if (drawFrameClass != null && DrawFrame::class.java.isAssignableFrom(drawFrameClass)) {
                try {
                    // Try to create new instance with single arg constructor
                    val constructor = drawFrameClass.getDeclaredConstructor(Gartvas::class.java)
                    constructor.isAccessible = true
                    val newDrawFrame = constructor.newInstance(gartvas) as DrawFrame

                    wv.reload(newDrawFrame)

                    println("✅ Successfully hot-reloaded: $drawFrameClassName at ${LocalDateTime.now()}")
                } catch (e: Exception) {
                    println("❌ Could not create new instance of $drawFrameClassName: ${e.message}")
                    e.printStackTrace()
                }
            } else {
                println("⚠ No compatible DrawFrame found: $drawFrameClass")
            }
        } finally {
            Thread.currentThread().contextClassLoader = originalClassLoader
        }
    }

    /**
     * Cleanup resources when shutting down hot reload
     */
    fun shutdown() {
        fileWatcher.stop()
        hotReloadClassLoader.clearCache()
        println("🔥 Hot reload stopped")
    }

}
package dev.oblac.gart.pixels

import dev.oblac.gart.Gartmap
import dev.oblac.gart.MemPixels
import dev.ob


默认账号密码是？**

答：管理员账号密码是：admin123 / admin123

**5. 后台管理提示演示账号权限不足 怎么办？**

答： 将演示账号变为管理员即可。修改role为3.

# 开发文档

## 功能介绍

- 服务管理：管理系统可以录入、修改和查询服务的基本信息，如名称、价格、适用人群、备注等。
- 类型管理：系统可以管理服务的类型信息，包括类型的名称等。
- 评论管理：管理和浏览整个网站的评论信息。
- 医生管理：管理和浏览整个网站的医生信息。
- 用户管理：管理和浏览网站的用户信息，可以新增、编辑和删除用户。
- 统计分析：系统可以根据服务的活动数据和用户参与度进行统计和分析，帮助管理员了解整个系统的状况。
- 消息管理：服务管理员可以在系统上发布消息，整个网站的用户都能收到。
- 广告管理：服务管理员可以在系统上发布广告消息，然后在详情页面右侧展示。
- 意见反馈：服务管理员可以在后台查看浏览用户提交的意见反馈信息。
- 系统信息：管理员可以查看系统的基本信息，包括系统名称、服务器信息、内存信息、cpu信息、软件信息等。
- 注册登录：用户通过注册和登录后，才能使用网站。
- 门户浏览：用户进入首页后，可以浏览服务列表信息，包括最新、最热。
- 热门推荐：基于协同过滤推荐算法的热门推荐。
- 用户中心：包括用户基本资料修改、用户基本信息、密码、收藏点赞等。
- 我的预约：包括我购买的服务的预约信息。
- 意见反馈：包括用户提交意见反馈的入口页面。
- 模糊搜索：顶部搜索功能，支持模糊搜索服务信息。
- 服务评论：详情页下侧用户可以评论服务。

## 开发环境

- 后端： Java 1.8 + SpringBoot + MyBatis
- 前端： Javascript + Vue
- 数据库：MySQL 5.7
- 开发平台：Idea 2021 + vscode
- 运行环境：Windows 10/11

## 关键技术

- 前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、antd
- 后端技术栈 SpringBoot、MyBatis、Maven

### 后端技术

#### Springboot框架

Spring Boot是一款开箱即用框架，提供各种默认配置来简化项目配置。让我们的Spring应用变的更轻量化、更快的入门。 在主程序执行main函数就可以运行。你也可以打包你的应用为jar并通过使用java -jar来运行你的Web应用。它遵循"约定优先于配置"的原则， 使用SpringBoot只需很少的配置，大部分的时候直接使用默认的配置即可。同时可以与Spring Cloud的微服务无缝结合。

优点：
- 使编码变得简单： 推荐使用注解。
- 使配置变得简单： 自动配置、快速集


/*
 * (C) Copyright 2014  Angelo Dureghello <angelo@sysam.it>
 *
 * SPDX-License-Identifier:	GPL-2.0+
 *
 */

#ifndef __IMMAP_5307__
#define __IMMAP_5307__

#define MMAP_SIM	(CONFIG_SYS_MBAR + 0x00000000)
#define MMAP_INTC	(CONFIG_SYS_MBAR + 0x00000040)
#define MMAP_CSM	(CONFIG_SYS_MBAR + 0x00000080)
#define MMAP_DRAMC	(CONFIG_SYS_MBAR + 0x00000100)
#define MMAP_DTMR0	(CONFIG_SYS_MBAR + 0x00000140)
#define MMAP_DTMR1	(CONFIG_SYS_MBAR + 0x00000180)
#define MMAP_UART0	(CONFIG_SYS_MBAR + 0x000001C0)
#define MMAP_UART1	(CONFIG_SYS_MBAR + 0x00000200)
#define MMAP_GPIO	(CONFIG_SYS_MBAR + 0x00000244)

typedef struct sim {
	u8  rsr;
	u8  sypcr;
	u8  swivr;
	u8  swsr;
	u16 par;
	u8  irqpar;
	u8  res1;
	u8  pllcr;
	u8  res2;
	u16 res3;
	u8  mpark;
	u8  res4;
	u16 res5;
	u32 res6;
} sim_t;

typedef struct intctrl {
	u32 ipr;
	u32 imr;
	u16 res7;
	u8  res8;
	u8  avr;
	u8  icr0;
	u8  icr1;
	u8  icr2;
	u8  icr3;
	u8  icr4;
	u8  icr5;
	u8  icr6;
	u8  icr7;
	u8  icr8;
	u8  icr9;
	u16 res9;
} intctrl_t;

typedef struct csm {
	u16 csar0;      /* Chip-select Address */
	u16 res1;
	u32 csmr0;      /* Chip-select Mask */
	u16 res2;
	u16 cscr0;      /* Chip-select Control */
	u16 csar1;
	u16 res3;
	u32 csmr1;
	u16 res4;
	u16 cscr1;
	u16 csar2;
	u16 res5;
	u32 csmr2;
	u16 res6;
	u16 cscr2;
	u16 csar3;
	u16 res7;
	u32 csmr3;
	u16 res8;
	u16 cscr3;
	u16 csar4;
	u16 res9;
	u32 csmr4;
	u16 res10;
	u16 cscr4;
	u16 csar5;
	u16 res11;
	u32 csmr5;
	u16 res12;
	u16 cscr5;
	u16 csar6;
	u16 res13;
	u32 csmr6;
	u16 res14;
	u16 cscr6;
	u16 csar7;
	u16 res15;
	u32 csmr7;
	u16 res16;
	u16 cscr7;
} csm_t;

typedef struct sdramctrl {
	u16 dcr;
	u16 res1;
	u32 res2;
	u32 dacr0;
	u32 dmr0;
	u32 dacr1;
	u32 dmr1;
} sdramctrl_t;

typedef struct gpio {
	u16 paddr;
	u16 res1;
	u16 padat;
	u16 res2;
} gpio_t;

#endif				/* __IMMAP_5307__ */


Provider.get_global_provider",
                return_value=set_mocked_m365_provider(),
            ),
            mock.patch(
                "prowler.providers.m365.lib.powershell.m365_powershell.M365PowerShell.connect_exchange_online"
            ),
            mock.patch(
                "prowler.providers.m365.services.exchange.exchange_mailbox_policy_additional_storage_restricted.exchange_mailbox_policy_additional_storage_restricted.exchange_client",
                new=exchange_client,
            ),
        ):
            from prowler.providers.m365.services.exchange.exchange_mailbox_policy_additional_storage_restricted.exchange_mailbox_policy_additional_storage_restricted import (
                exchange_mailbox_policy_additional_storage_restricted,
            )

            check = exchange_mailbox_policy_additional_storage_restricted()
            result = check.execute()
            assert len(result) == 0


_swig_i_0)))
	return swig_r
}

func (arg1 SwigcptrSfContextSettings) SetSRgbCapable(arg2 int) {
	_swig_i_0 := arg1
	_swig_i_1 := arg2
	C._wrap_sfContextSettings_sRgbCapable_set_window_109cb4eaa6fbedb8(C.uintptr_t(_swig_i_0), C.swig_intgo(_swig_i_1))
}

func (arg1 SwigcptrSfContextSettings) GetSRgbCapable() (_swig_ret int) {
	var swig_r int
	_swig_i_0 := arg1
	swig_r = (int)(C._wrap_sfContextSettings_sRgbCapable_get_window_109cb4eaa6fbedb8(C.uintptr_t(_swig_i_0)))
	return swig_r
}

func NewSfContextSettings() (_swig_ret SfContextSettings) {
	var swig_r SfContextSettings
	swig_r = (SfContextSettings)(SwigcptrSfContextSettings(C._wrap_new_sfContextSettings_window_109cb4eaa6fbedb8()))
	return swig_r
}

func DeleteSfContextSettings(arg1 SfContextSettings) {
	_swig_i_0 := arg1.Swigcptr()
	C._wrap_delete_sfContextSettings_window_109cb4eaa6fbedb8(C.uintptr_t(_swig_i_0))
}

type SfContextSettings interface {
	Swigcptr() uintptr
	SwigIsSfContextSettings()
	SetDepthBits(arg2 uint)
	GetDepthBits() (_swig_ret uint)
	SetStencilBits(arg2 uint)
	GetStencilBits() (_swig_ret uint)
	SetAntialiasingLevel(arg2 uint)
	GetAntialiasingLevel() (_swig_ret uint)
	SetMajorVersion(arg2 uint)
	GetMajorVersion() (_swig_ret uint)
	SetMinorVersion(arg2 uint)
	GetMinorVersion() (_swig_ret uint)
	SetAttributeFlags(arg2 uint)
	GetAttributeFlags() (_swig_ret uint)
	SetSRgbCapable(arg2 int)
	GetSRgbCapable() (_swig_ret int)
}

func SfWindow_create(arg1 SfVideoMode, arg2 string, arg3 uint, arg4 SfContextSettings) (_swig_ret Struct_SS_sfWindow) {
	var swig_r Struct_SS_sfWindow
	_swig_i_0 := arg1.Swigcptr()
	_swig_i_1 := arg2
	_swig_i_2 := arg3
	_swig_i_3 := arg4.Swigcptr()
	swig_r = (Struct_SS_sfWindow)(SwigcptrStruct_SS_sfWindow(C._wrap_sfWindow_create_window_109cb4eaa6fbedb8(C.uintptr_t(_swig_i_0), *(*C.swig_type_6)(unsafe.Pointer(&_swig_i_1)), C.swig_intgo(_swig_i_2), C.uintptr_t(_swig_i_3))))
	if Swig_escape_always_false {
		Swig_escape_val = arg2
	}
	return swig_r
}

func SfWindow_createUnicode(arg1 SfVideoMode, arg2 *uint, arg3 uint, arg4 SfContextSettings) (_swig_ret Struct_SS_sfWindow) {
	var swig_r Struct_SS_sfWindow
	_swig_i_0 := arg1.Swigcptr()
	_swig_i_1 := arg2
	_swig_i_2 := arg3
	_swig_i_3 :=


./../../../../allclasses-noframe.html">All Classes

  SUMMARY: NESTED | FIELD | CONSTR | METHOD

DETAIL: FIELD | CONSTR | METHOD

br.gov.jfrj.siga.ex

Class SigaExProperties

java.lang.Object
  br.gov.jfrj.siga.model.prop.ext.ModeloPropriedade
      br.gov.jfrj.siga.ex.SigaExProperties

public class SigaExProperties
extends ModeloPropriedade

<map name="umlmap140"><area shape="rect" coords="6,504,116,523" href="http://www.yworks.com/" alt=""><area shape="rect" coords="104,138,245,165" href="#" alt=""><area shape="rect" coords="10,166,181,183" href="#instance" alt=""><area shape="rect" coords="10,184,133,201" href="#SigaExProperties()" alt=""><area shape="rect" coords="10,202,148,218" href="#getAmbiente()" alt=""><area shape="rect" coords="10,218,330,235" href="#getAnoInicioAcronimoNoCodigoDoDocumento()" alt=""><area shape="rect" coords="10,235,241,252" href="#getAssinaturaCodebasePath()" alt=""><area shape="rect" coords="10,252,231,268" href="#getAssinaturaDecodificador()" alt=""><area shape="rect" coords="10,268,266,285" href="#getAssinaturaMessagesURLPath()" alt=""><area shape="rect" coords="10,285,235,302" href="#getAssinaturaPorlicyUrlPath()" alt=""><area shape="rect" coords="10,302,224,318" href="#getConversorHTMLFactory()" alt=""><area shape="rect" coords="10,318,252,335" href="#getEnderecoAutenticidadeDocs()" alt=""><area shape="rect" coords="10,335,236,352" href="#getExtensaoConversorHTML()" alt=""><area shape="rect" coords="10,352,219,369" href="#getIdModInternoImportado()" alt=""><area shape="rect" coords="10,369,140,385" href="#getIdModPA()" alt=""><area shape="rect" coords="10,385,179,402" href="#getMontadorQuery()" alt=""><


, "Are you sure you want to deconstruct these |cffffff<<1>>|r items?", 2)
SAS(SI_DECONSTRUCTACTIONNAME_CONFIRMMULTIPLE3, "Are you sure you want to fillet these |cffffff<<1>>|r fish?", 0)
SAS(SI_DECONSTRUCTACTIONNAME_CONFIRMSTACK0, "Select how many times to refine <<t:1>>:", 2)
SAS(SI_DECONSTRUCTACTIONNAME_CONFIRMSTACK1, "Select how many times to extract <<t:1>>:", 2)
SAS(SI_DECONSTRUCTACTIONNAME_PERFORMFULLSTACK1, "Extract All", 2)
SAS(SI_DECONSTRUCTACTIONNAME_PERFORMMULTIPLE0, "Refine Multiple", 3)
SAS(SI_DECONSTRUCTACTIONNAME_PERFORMMULTIPLE1, "Extract Multiple", 3)
SAS(SI_DECONSTRUCTACTIONNAME_PERFORMMULTIPLE2, "Deconstruct Multiple", 3)
SAS(SI_DECONSTRUCTACTIONNAME_PERFORMMULTIPLE3, "Fillet Multiple", 1)
SAS(SI_DEFAULTSOULGEMCHOICE0, "|t16:16:EsoUI/Art/currency/currency_gold.dds|t Gold Purchased", 0)
SAS(SI_DEFAULTSOULGEMCHOICE1, "|t16:16:EsoUI/Art/currency/currency_crown.dds|t Crown Purchased", 0)
SAS(SI_DELETE_CHARACTER, "Delete <<X:1>>", 1)
SAS(SI_DELETE_CHARACTER_CONFIRMATION_BUTTON, "Delete", 0)
SAS(SI_DELETE_CHARACTER_CONFIRMATION_TEXT, "DELETE", 0)
SAS(SI_DELETE_CHARACTER_DIALOG_GAMEPAD_CONTINUE, "Continue", 0)
SAS(SI_DELETE_CHARACTER_DIALOG_GAMEPAD_TEXT, "You can delete <<1>> more <<1[/character/characters]>>.\n\n|cff9633Deleting a character with items from the Crown Store or gained via redemption codes will cause those items to be lost from your account.|r\n\nIf you wish to keep these items please visit the nearest bank vendor to store the items.\n\nCollectibles such as Mounts, Pets, Costumes and Account Upgrades will not be lost.\n\nNormal items equipped on the character and in the character's inventory will be destroyed.", 1)
SAS(SI_DELETE_CHARACTER_DIALOG_GAMEPAD_TITLE, "Delete Character", 0)
SAS(SI_DELETE_CHARACTER_DIALOG_TEXT, "|cff0000Deleting a character with items from the Crown Store or items gained via redemption codes in its inventory will cause those items to be lost from your account.|r \n\nCollectibles such as Mounts, Pets, Costumes and Account Upgrades will not be lost. Normal items equipped on the character and in the character's inventory will also be destroyed. If you wish to keep these items, please visit the nearest bank vendor to store the items.\n\nYou can currently delete |cFFFFFF<<4>>|r <<4[/character/characters]>>.  Additional deletions will become available over time.\n\nAre you sure you want to delete |cFFFFFF<<1>>|r? To confirm, type |cFFFFFF<<2>>|r below and click the <<3>> button.", 3)
SAS(SI_DELETE_CHARACTER_DISABLED_GAMEPAD_TEXT, "You cannot delete any characters at this time.\n\nDeletions become available over time.


dy = y_dest;
		}
		canvas.drawBitmap(pixels, 0, width, dx, dy, width, height, false, null);
	}

	public void getPixels(int[] pixels, int offset, int stride,
						  int x, int y, int width, int height) {
		Bitmap b = image.getBitmap();
		int w = Math.min(width, b.getWidth() - x);
		int h = Math.min(height, b.getHeight() - y);
		b.getPixels(pixels, offset, stride, x, y, w, h);
	}

	public Bitmap getBitmap() {
		return image.getBitmap();
	}

	void flush(Image image, int x, int y, int width, int height) {
		rect.set(x, y, x + width, y + height);
		canvas.drawBitmap(image.getBitmap(), rect, rect, null);
	}

	@Override
	public synchronized void drawFigure(com.vodafone.v10.graphics.j3d.Figure figure,
										int x, int y,
										com.vodafone.v10.graphics.j3d.FigureLayout layout,
										com.vodafone.v10.graphics.j3d.Effect3D effect) {
		com.vodafone.v10.graphics.j3d.RenderProxy.drawFigure(this, figure, x, y, layout, effect);
	}

	@Override
	public synchronized void drawFigure(com.motorola.graphics.j3d.Figure figure,
										int x, int y,
										com.motorola.graphics.j3d.FigureLayout layout,
										com.motorola.graphics.j3d.Effect3D effect) {
		com.motorola.graphics.j3d.RenderProxy.drawFigure(this, figure, x, y, layout, effect);
	}

	@Override
	public void drawCommandList(Texture[] textures, int x, int y, FigureLayout layout, Effect3D effect, int[] commandlist) {
		com.jblend.graphics.j3d.RenderProxy.drawCommandList(this, textures, x, y, layout, effect, commandlist);
	}

	@Override
	public void drawCommandList(Texture texture, int x, int y, FigureLayout layout, Effect3D effect, int[] commandlist) {
		com.jblend.graphics.j3d.RenderProxy.drawCommandList(this, texture, x, y, layout, effect, commandlist);
	}

	@Override
	public void drawFigure(com.jblend.graphics.j3d.Figure figure,
										int x, int y,
										com.jblend.graphics.j3d.FigureLayout layout,
										com.jblend.graphics.j3d.Effect3D effect) {
		com.jblend.graphics.j3d.RenderProxy.drawFigure(this, figure, x, y, layout, effect);
	}

	@Override
	public void flush() {
		com.jblend.graphics.j3d.RenderProxy.flush(this);
	}

	@Override
	public void renderFigure(Figure figure, int x, int y, FigureLayout layout, Effect3D effect) {
		com.jblend.graphics.j3d.RenderProxy.renderFigure(this, figure, x, y, layout, effect);
	}

	@Override
	public void renderPrimitives(Texture texture, int x, int y, FigureLayout layout, Effect3D effect, int command, int numPrimitives, int[] vertexCoords, int[] normals, int[] textureCoords, int[] colors) {
		com.jblend.graphics.j3d.RenderProxy.renderPrimitives(this, texture, x, y, layout, effect, command, numPrimitives, vertexCoords, normals, textureCoords, colors);
	}
}
/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:
 *
 */
/**
 * \file
 * \brief Target platform dependent Java module for Symbian.
 */

package javax.microedition.m3g;

import javax.microed


import os
from tqdm import tqdm
import subprocess

def split_pcap_files():
    splitter = "/root/ShieldGPT/pcap_tool/splitter"
    flow_packet_num_dict = {
        "BROWSING": 60,
        "CHAT": 100,
        "AUDIO": 100,
        "VIDEO": 200,
        "FILE-TRANSFER": 300,
        "MAIL": 300,
        "P2P": 150,
        "VOIP": 100,
    }
    for label in flow_packet_num_dict.keys():
        filenames = list(filter(lambda x: x.endswith(".pcap") and x.startswith(label),
                        os.listdir("/mnt/ssd1/ISCXTor2016/Tor"))) # only consider Tor traffic, ignore NonTor
        filenames = [f"/mnt/ssd1/ISCXTor2016/Tor/{x}" for x in filenames]
        for filename in tqdm(filenames):
            dir_name = os.path.join("/mnt/ssd1/ISCXTor2016/flows", label)
            os.makedirs(dir_name, exist_ok=True)
            flow_prefix = os.path.basename(filename)[:-len(".pcap")]
            with open(os.path.join("/mnt/ssd1/ISCXTor2016/flows", f"{flow_prefix}.log"), "w") as f:
                subprocess.run(f"{splitter} -i '{filename}' -o '{dir_name}' -p {flow_prefix}- -f five_tuple -l {flow_packet_num_dict[label]}",
                            shell=True, stdout=f, stderr=subprocess.STDOUT)

if __name__ == "__main__":
    split_pcap_files()


ine-height:24px;text-align:left}.mdui-dialog>.mdui-dialog-title{padding:24px 24px 20px 24px}.mdui-dialog-content{box-sizing:border-box;padding:24px;overflow-y:auto;font-size:15px;line-height:1.5;color:rgba(0,0,0,.7)}.mdui-dialog-content>.mdui-dialog-title{padding-bottom:20px}.mdui-dialog-title+.mdui-dialog-content{padding-top:0}.mdui-dialog-actions{box-sizing:border-box;padding:8px;text-align:right}.mdui-dialog-actions .mdui-btn{min-width:64px;margin-left:8px;color:#e91e63}.mdui-dialog-actions .mdui-btn:first-child{margin-left:0}.mdui-dialog-content>.mdui-dialog-actions{padding-top:32px;margin:0 -24px -24px -24px}.mdui-dialog-actions-stacked{padding:8px 0 8px 0}.mdui-dialog-actions-stacked .mdui-btn{width:100%;height:48px;margin:0;line-height:48px!important;text-align:right;border-radius:0}.mdui-theme-accent-amber .mdui-dialog-actions .mdui-btn{color:#ffc107}.mdui-theme-accent-blue .mdui-dialog-actions .mdui-btn{color:#2196f3}.mdui-theme-accent-cyan .mdui-dialog-actions .mdui-btn{color:#00bcd4}.mdui-theme-accent-deep-orange .mdui-dialog-actions .mdui-btn{color:#ff5722}.mdui-theme-accent-deep-purple .mdui-dialog-actions .mdui-btn{color:#673ab7}.mdui-theme-accent-green .mdui-dialog-actions .mdui-btn{color:#4caf50}.mdui-theme-accent-indigo .mdui-dialog-actions .mdui-btn{color:#3f51b5}.mdui-theme-accent-light-blue .mdui-dialog-actions .mdui-btn{color:#03a9f4}.mdui-theme-accent-light-green .mdui-dialog-actions .mdui-btn{color:#8bc34a}.mdui-theme-accent-lime .mdui-dialog-actions .mdui-btn{color:#cddc39}.mdui-theme-accent-orange .mdui-dialog-actions .mdui-btn{color:#ff9800}.mdui-theme-accent-pink .mdui-dialog-actions .mdui-btn{color:#e91e63}.mdui-theme-accent-purple .mdui-dialog-actions .mdui-btn{color:#9c27b0}.mdui-theme-accent-red .mdui-dialog-actions .mdui-btn{color:#f44336}.mdui-theme-accent-teal .mdui-dialog-actions .mdui-btn{color:#009688}.mdui-theme-accent-yellow .mdui-dialog-actions .mdui-btn{color:#ffeb3b}.mdui-theme-layout-dark .mdui-dialog{color:#fff;background-color:#424242}.mdui-theme-layout-dark .mdui-dialog-content{color:rgba(255,255,255,.7)}.mdui-theme-layout-dark .mdui-dialog-scrollbar::-webkit-scrollbar{width:8px;height:8px;background:0 0}.mdui-theme-layout-dark .mdui-dialog-scrollbar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.3)}.mdui-dialog-alert{max-width:448px}.mdui-dialog-confirm{max-width:448px}.mdui-dialog-prompt{max-width:448px}.mdui-dialog-prompt .mdui


+label:hover~label,.j-pro .j-ratings input:checked+label,.j-pro .j-ratings input:checked+label~label{color:#4099ff}.j-unit .checkbox-fade{display:block;margin-top:20px}.j-forms{-webkit-box-shadow:none;box-shadow:none;border:1px solid rgba(0,0,0,.15)}.j-forms button i{margin-right:0}.j-forms .checkbox-fade{margin-top:10px}.j-forms .checkbox-fade .disabled-view{opacity:.5;cursor:not-allowed}.j-forms .link{color:#4099ff;border-bottom:none;text-transform:capitalize;margin-bottom:15px}.j-forms .label{margin-bottom:15px}.j-forms .btn-primary:disabled{background-color:#d6d6d6;border-color:#d6d6d6}.j-forms .radio-toggle,.j-forms .checkbox-toggle,.j-forms .inline-group .radio-toggle,.j-forms .inline-group .checkbox-toggle{padding:9px 0 8px 0}.j-forms .header{background-color:#4099ff;border-top:1px solid #4099ff;-webkit-box-shadow:none;box-shadow:none}.j-forms .divider-text span{color:#222}.j-forms .widget .addon,.j-forms .widget .addon-btn{background-color:#4099ff;color:#fff}.j-forms .widget .addon:hover,.j-forms .widget .addon:focus,.j-forms .widget .addon-btn:hover,.j-forms .widget .addon-btn:focus{background-color:#5aa7ff}.j-forms .widget .addon:hover i,.j-forms .widget .addon:focus i,.j-forms .widget .addon-btn:hover i,.j-forms .widget .addon-btn:focus i{color:#fff}.j-forms .widget .addon i,.j-forms .widget .addon-btn i{color:#fff}.j-forms .footer{background-color:#fff;border-top:1px dashed #1abc9c;padding:20px 25px;position:inherit}.j-forms .footer button{float:right;margin-bottom:0}.j-forms .stepper .stepper-arrow{background-color:#4099ff}.j-forms .stepper .stepper-arrow:hover{background-color:#5aa7ff}.j-forms .stepper .stepper-arrow.up:after{border-bottom:7px solid #fff}.j-forms .stepper .stepper-arrow.down:after{border-top:7px solid #fff}.popup-menu{padding:0}.popup-menu .popup-list{background:#4099ff;border-radius:0}.popup-menu .popup-list>ul>li{-webkit-transition:all ease-in .3s;transition:all ease-in .3s;color:#fff;border-left:none;cursor:pointer}.popup-menu .popup-list>ul>li:hover{background-color:#384c5f;color:#fff}.j-tabs-container .j-tabs-label,.j-tabs-container input[type=radio]:checked+.j-tabs-label{border-top:4px solid #4099ff}.pop-up-logo img{margin-top:10px;margin-left:80px}.popup-list-open .popup-list-wrapper{z-index:99}.span4 label{color:#222!important}.pop-up-wrapper{margin-left:0!important}@media only screen and (max-width:480px){.j-forms,.j-pro{border:none;background-color:#fff}.j-forms .footer,.j-forms .j-footer,.j-pro .footer,.j-pro .j-footer{border-top:none}.j-forms .footer button,.j-forms .j-footer button,.j-pro .footer button,.j-pro .j-footer button{margin:5px}.j-forms .j-content,.j-pro .j-content{padding:0}.j-forms .


;
extern const int    _pcre_utf8_table3[];
extern const uschar _pcre_utf8_table4[];

extern const int    _pcre_utf8_table1_size;

extern const char   _pcre_utt_names[];
extern const ucp_type_table _pcre_utt[];
extern const int _pcre_utt_size;

extern const uschar _pcre_default_tables[];

extern const uschar _pcre_OP_lengths[];

/* Internal shared functions. These are functions that are used by more than
one of the exported public functions. They have to be "external" in the C
sense, but are not part of the PCRE public API. */

extern BOOL         _pcre_is_newline(const uschar *, int, const uschar *,
                      int *, BOOL);
extern int          _pcre_ord2utf8(int, uschar *);
extern real_pcre   *_pcre_try_flipped(const real_pcre *, real_pcre *,
                      const pcre_study_data *, pcre_study_data *);
extern int          _pcre_ucp_findprop(const unsigned int, int *, int *);
extern unsigned int _pcre_ucp_othercase(const unsigned int);
extern int          _pcre_valid_utf8(const uschar *, int);
extern BOOL         _pcre_was_newline(const uschar *, int, const uschar *,
                      int *, BOOL);
extern BOOL         _pcre_xclass(int, const uschar *);

#endif

/* End of pcre_internal.h */


ge:get/get.dart';
import 'package:media_kit/media_kit.dart';
import 'package:miru_app/controllers/application_controller.dart';
import 'package:miru_app/utils/log.dart';
import 'package:miru_app/utils/miru_directory.dart';
import 'package:miru_app/utils/request.dart';
import 'package:miru_app/views/pages/debug_page.dart';
import 'package:miru_app/views/pages/main_page.dart';
import 'package:miru_app/router/router.dart';
import 'package:miru_app/utils/extension.dart';
import 'package:miru_app/utils/i18n.dart';
import 'package:miru_app/utils/miru_storage.dart';
import 'package:miru_app/utils/application.dart';
import 'package:miru_app/views/widgets/platform_widget.dart';
import 'package:window_manager/window_manager.dart';

void main(List<String> args) async {
  runZonedGuarded(() async {
    FlutterError.onError = (FlutterErrorDetails details) {
      logger.severe("", details.exception, details.stack);
    };

    WidgetsFlutterBinding.ensureInitialized();

    // 多窗口
    if (args.firstOrNull == 'multi_window') {
      final windowId = int.parse(args[1]);
      final arguments = args[2].isEmpty
          ? const {}
          : jsonDecode(args[2]) as Map<String, dynamic>;

      Map windows = {
        "debug": ExtensionDebugWindow(
          windowController: WindowController.fromWindowId(windowId),
        ),
      };
      runApp(windows[arguments["name"]]);
      return;
    }

    // 主窗口
    await MiruDirectory.ensureInitialized();
    await MiruStorage.ensureInitialized();
    MiruLog.ensureInitialized();
    await ApplicationUtils.ensureInitialized();
    await MiruRequest.ensureInitialized();
    ExtensionUtils.ensureInitialized();
    MediaKit.ensureInitialized();

    if (!Platform.isAndroid) {
      await windowManager.ensureInitialized();
      final sizeArr = MiruStorage.getSetting(SettingKey.windowSize).split(",");
      final size = Size(double.parse(sizeArr[0]), double.parse(sizeArr[1]));
      WindowOptions windowOptions = WindowOptions(
        size: size,
        center: true,
        skipTaskbar: false,
        titleBarStyle: TitleBarStyle.hidden,
      );
      windowManager.waitUntilReadyToShow(windowOptions, () async {
        final position = MiruStorage.getSetting(SettingKey.windowPosition);
        if (position != null) {
          final offsetArr = position.split(",");
          final offset = Offset(
            double.parse(offsetArr[0]),
            double.parse(offsetArr[1]),
          );
          await windowManager.setPosition(
            offset,
          );
        }
        await windowManager.show();
        await windowManager.focus();
      });
    }

    if (Platform.isAndroid) {
      SystemUiOverlayStyle style = const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarIconBrightness: Brightness.dark,
      );
      SystemChrome.setSystemUIOverlayStyle(style);
    }

    runApp(const MainApp());
  }, (error, stack) {
    logger.severe("", error, stack);
  });
}

class MainApp extends StatefulWidget {
  const MainApp({super.key});

  @override
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  late ApplicationController c;

  @override
  void init


ul>

Целочислени:

mod(<var>x</var>; <var>y</var>) - остатък от деление;

gcd(<var>x</var>; <var>y</var>; <var>z</var>…) - най-голям общ делител;

lcm(<var>x</var>; <var>y</var>; <var>z</var>…) - най-малко общо кратно;

Агрегатни и интерполационни:

min(<var>x</var>; <var>y</var>; <var>z</var>…) - минимум на множество стойности;

max(<var>x</var>; <var>y</var>; <var>z</var>…) - максимум на множество стойности;<br

sum(<var>x</var>; <var>y</var>; <var>z</var>…) - сума на множество стойности = <var>x</var> + <var>y</var> + <var>z</var>…;

sumsq(<var>x</var>; <var>y</var>; <var>z</var>…) - сума от квадратите = <var>x</var>² + <var>y</var>² + <var>z</var>²…;

srss(<var>x</var>; <var>y</var>; <var>z</var>…) - корен квадратен от сумата на квадратите = sqrt(<var>x</var>² + <var>y</var>² + <var>z</var>²…);

average(<var>x</var>; <var>y</var>; <var>z</var>…) - средно аритметично от множество стойности = (<var>x</var> + <var>y</var> + <var>z</var>…)/<var>n</var>;

product(<var>x</var>; <var>y</var>; <var>z</var>…) - произведение на множество стойности = <var>x</var>·<var>y</var>·<var>z</var>…;

mean(<var>x</var>; <var>y</var>; <var>z</var>…) - средно геометрично  = n-th root(<var>x</var>·<var>y</var>·<var>z</var>…);

take(<var>n</var>; <var>a</var>; <var>b</var>; <var>c</var>…) - връща n-тия елемент от списъка

line(<var>x</var>; <var>a</var>; <var>b</var>; <var>c</var>…) - линейна интерполация;


jects/tree2.png'

const textures = {
  grass1,
  grass2,
  mud1,
  mud2,
  sand1,
  sand2,
  rock1,
  rock2,
  tree1,
  tree2,
}

export const getTexture = (type: string, id: number) => {
  const textureId = (type + id) as keyof typeof textures

  return textures[textureId] || grass1
}
import axios from 'axios'
//
// function VerifyToken(response) {
//   if (response.status == 401) {
//     setTimeout(() => {
//       const origin = window.location.origin
//       window.location.href = origin + "/login"
//     }, 500)
//     return {
//       status: response.status,
//       data: {
//         msg: '身份信息过期，请重新登录',
//         suc: 0,
//         data: null,
//       },
//     }
//   }
//   return response
// }
//
// const headers = {}
//
// // axios config 添加请求拦截
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
// axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// axios.defaults.withCredentials = true
// const AxiosRequest = {
//   request: 0,
//   success: 0,
//   error: 0
// }
// const cancelToken = axios.CancelToken
//
// // 保存需要取消的请求
// const cancelMap = new Map()
//
// // 如果设置了cancelToken，autoCancel不会生效
// // config.autoCancel为true或function，会将cancelToken的方法返回的cancel函数添加到cancelMap中
// // config.autoCancel为function，会将按照函数来计算k值，且autoCancel方法不应该返回null,undefined等值
//
// axios.interceptors.request.use(function (config: any) {
//   AxiosRequest.request++
//   config.headers = Object.assign(config.headers || {}, headers)
//   // fix ie get 请求来自缓存
//   if (config.method === 'get') {
//     if (Object.prototype.hasOwnProperty.call(config, 'params')) {
//       config.params._timestamp_str = Date.now()
//     } else {
//       config.params = {
//         _timestamp_str: Date.now()
//       }
//     }
//   }
//   if (config.autoCancel && !Object.prototype.hasOwnProperty.call(config, 'cancelToken')) {
//     let k = config.url
//     if (typeof config.autoCancel === 'function') {
//       k = config.autoCancel(k) || k
//     }
//     if (cancelMap.has(k) && typeof cancelMap.get(k) === 'function') {
//       cancelMap.get(k)()
//     }
//     config.cancelToken = new cancelToken(cancel => {
//       cancelMap.set(k, cancel)
//     })
//   }
//   return config
// }, function (error) {
//   console.log('request error', error)
//   AxiosRequest.error++
//   return Promise.reject(error)
// })
//
// axios.interceptors.response.use(function (response: any) {
//   const {config} = response
//   if (config.autoCancel && !Object.prototype.hasOwnProperty.call(config, 'cancelToken')) {
//     let k = config.url
//     if (typeof config.autoCancel === 'function') {
//       k = config.autoCancel(k) || k
//     }
//     // 请求成功删除cancelMap中对应的元素
//     cancelMap.delete(k)
//   }
//   AxiosRequest.success++
//   //如果请求response的status为401时(Token过期)，则跳至登录页
//   return VerifyToken(response)
// }, function (error) {
//   AxiosRequest.error++
//   console.log('response error', error)
//   // 对于 cancel


48z"],
    "circle-right": [512, 512, [61838, "arrow-alt-circle-right"], "f35a", "M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm395.3 11.3l-112 112c-4.6 4.6-11.5 5.9-17.4 3.5s-9.9-8.3-9.9-14.8l0-64-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-64c0-6.5 3.9-12.3 9.9-14.8s12.9-1.1 17.4 3.5l112 112c6.2 6.2 6.2 16.4 0 22.6z"],
    "plane-circle-check": [640, 512, [], "e555", "M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z"],
    "face-rolling-eyes": [512, 512, [128580, "meh-rolling-eyes"], "f5a5", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 368l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm32-144c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C208.5 175.6 224 198 224 224zm128 64c-35.3 0-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C400.5 175.6 416 198 416 224c0 35.3-28.7 64-64 64z"],
    "object-group": [576, 512, [], "f247", "M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7


toggle {
    background: none;
    border: none;
    padding: 0.5rem;
    cursor: pointer;
    color: var(--text-primary);
    font-size: 1.25rem;
    border-radius: 4px;
    transition: all 0.2s ease;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  #theme-toggle:hover {
    background-color: var(--bg-interactive);
  }

  #theme-toggle:active {
    background-color: var(--bg-secondary);
  }

  /* Show/hide icons based on theme */
  [data-theme="dark"] .light-icon,
  :root:not([data-theme="dark"]) .dark-icon {
    display: none;
  }

  /* GitHub Star Button */
  .github-star {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 1rem;
    color: white;
    text-decoration: none;
    background: linear-gradient(
      135deg,
      var(--spike-blue),
      var(--spike-dark-green)
    );
    border-radius: 20px;
    transition: all 0.2s ease;
    font-size: 0.875rem;
    white-space: nowrap;
  }

  .github-star:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 8px rgba(var(--spike-blue-rgb), 0.3);
  }

  .github-star i {
    font-size: 1.1rem;
    animation: starBounce 2s infinite;
    color: #ffd700;
    text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
  }

  @keyframes starBounce {
    0%,
    100% {
      transform: scale(1);
    }
    50% {
      transform: scale(1.2);
    }
  }

  .github-star span {
    white-space: nowrap;
  }

  @media (max-width: 768px) {
    .github-star span {
      display: none;
    }

    .github-star {
      padding: 0.5rem;
    }
  }
</style>

<script>
  // Theme toggle functionality
  document.addEventListener("DOMContentLoaded", () => {
    const themeToggle = document.getElementById("theme-toggle");

    // Function to set theme
    function setTheme(theme) {
      document.documentElement.setAttribute("data-theme", theme);
      localStorage.setItem("theme", theme);

      // Update banner image based on theme
      const bannerImage = document.getElementById("banner-image");
      if (bannerImage) {
        bannerImage.src = theme === "dark"
          ? "/assets/spike-banner-dark-thin.png"
          : "/assets/spike-banner-light-thin.png";
      }
    }

    // Initialize theme
    const savedTheme = localStorage.getItem("theme");
    setTheme(savedTheme ? savedTheme : "dark");
    // Discard system theme changes; the landing page is always dark, so
    // it's better to transition to a dark-by-default theme.
    // } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
    //   setTheme("dark");
    // }

    // Toggle theme on button click
    themeToggle.addEventListener("click", () => {
      const currentTheme = document.documentElement.getAttribute("data-theme");
      const newTheme = currentTheme === "dark" ? "light" : "dark";
      setTheme(newTheme);
    });

    // Discard system-theme changes.
    // window
    //   .matchMedia("(prefers-color-scheme: dark)")
    //   .addEventListener


ippy warnings
 - <csr-id-81ab5914e7d08740eb9371c9b718f13f0419c23f/> enable `ring` feature for `async-nats`
 - <csr-id-bd50166619b8810ccdc2bcd80c33ff80d94bc909/> address clippy warnings
 - <csr-id-4e0313ae4cfb5cbb2d3fa0320c662466a7082c0e/> generate changelogs after 1.0.1 release
 - <csr-id-0f03f1f91210a4ed3fa64a4b07aebe8e56627ea6/> updated with newest features
 - <csr-id-5957fce86a928c7398370547d0f43c9498185441/> address clippy warnings
 - <csr-id-8c93b0edbf37f1d0b40e065acfafc89af936a425/> bump to 0.4.0
 - <csr-id-902a17ec9bd73e6bf4dc08dca109d7e11765e6e4/> mark `LinkConfig` `non_exhaustive`
 - <csr-id-fd69df40f24ca565ace0f8c97a0c47a89db575a4/> Excises vestigal remains of wasmbus-rpc
   There were some parts of the core crate that we no longer use,
   especially now that we don't require claims signing anymore. This
   removes them and bumps the core crate in preparation for 1.0
 - <csr-id-859663e775f5505ec8fd7ee2bbb2ada73faae0e2/> remove unused braces
 - <csr-id-3d7b64321686139e2e266ff7c69f094bcfac1f6d/> bump to 0.3
 - <csr-id-6b369d49cd37a87dca1f92f31c4d4d3e33dec501/> use `&str` directly
 - <csr-id-435300a5d5461860ad5f9abaf2f85cdb6ca3f900/> relax type bounds
 - <csr-id-56e48aaac4a3e11f2f5e98ff2fa136ce9bb2235c/> remove wasmbus rpc client
 - <csr-id-b9770de23b8d3b0fa1adffddb94236403d7e1d3f/> bump `provider-sdk` to 0.2.0
 - <csr-id-cb0bcab822cb4290c673051ec1dd98d034a61546/> add descriptions to crates
 - <csr-id-3ffbd3ae2770a2bb7ef2d5635489e2725b3d9daa/> replace error field name with err
 - <csr-id-0023f7e86d5a40a534f623b7220743f27871549e/> reduce verbosity of instrumented functions
 - <csr-id-7b9ad7b57edd06c1c62833965041634811df47eb/> fix format

### New Features

 - <csr-id-fa875b259c57774c44840dd3a42fbdce8f6c0ef8/> name the provider's NATS connection
 - <csr-id-4b24e27a68cfc5fe43a993d1d9b542daf0818021/> add initialize_host_data fn
 - <csr-id-a2f3ad5e63fa6d333bb86d73464319cb35e83f32/> support for receiving config updates
 - <csr-id-c2bb9cb5e2ba1c6b055f6726e86ffc95dab90d2c/> set NATS queue group
 - <csr-id-9cb1b784fe7a8892d73bdb40d1172b1879fcd932/> upgrade `wrpc`, `async-nats`, `wasmtime`
 - <csr-id-757c8e06c053030d9c6b39e67cebb4f27786624f/> add Context::link_name
   This commit adds a utility method `link_name` to the `Context` struct
   made available to providers to make it a bit easier to retrieve the


   /// let mut treemap2 = Treemap::create();
    ///
    /// treemap2.add(u64::MAX);
    /// treemap2.add(35);
    ///
    /// let treemap3 = treemap1.andnot(&treemap2);
    ///
    /// assert_eq!(treemap3.cardinality(), 1);
    /// assert!(treemap3.contains(15));
    /// assert!(!treemap3.contains(u64::MAX));
    /// assert!(!treemap3.contains(35));
    /// ```
    pub fn andnot(&self, other: &Self) -> Self {
        let mut treemap = Treemap::create();

        for (key, bitmap) in &self.map {
            if let Some(other_bitmap) = other.map.get(key) {
                treemap.map.insert(*key, bitmap.andnot(other_bitmap));
            }
        }

        treemap
    }

    /// Computes the difference between two treemaps and stores the result
    /// in the current treemap.
    ///
    /// # Examples
    ///
    /// ```
    /// use std::u32;
    /// use std::u64;
    /// use croaring::Treemap;
    ///
    /// let mut treemap1 = Treemap::create();
    ///
    /// treemap1.add(15);
    /// treemap1.add(25);
    /// treemap1.add(u64::MAX - 10);
    ///
    /// let mut treemap2 = Treemap::create();
    ///
    /// treemap2.add(25);
    /// treemap2.add(35);
    ///
    /// treemap1.andnot_inplace(&treemap2);
    ///
    /// assert_eq!(treemap1.cardinality(), 2);
    /// assert!(treemap1.contains(15));
    /// assert!(treemap1.contains(u64::MAX - 10));
    /// assert!(!treemap1.contains(u64::MAX));
    /// assert!(!treemap1.contains(35));
    ///
    /// let mut treemap3 = Treemap::create();
    /// treemap3.add(15);
    /// let treemap4 = Treemap::create();
    /// treemap3.andnot_inplace(&treemap4);
    /// assert_eq!(treemap3.cardinality(), 1);
    /// assert!(treemap3.contains(15));
    /// ```
    pub fn andnot_inplace(&mut self, other: &Self) {
        for (key, bitmap) in &mut self.map {
            if let Some(other_bitmap) = other.map.get(key) {
                bitmap.andnot_inplace(other_bitmap);
            }
        }
    }

    /// Returns a vector containing all of the integers stored in the Treemap
    /// in a sorted order.
    ///
    /// ```
    /// use std::u64;
    /// use croaring::Treemap;
    ///
    /// let mut treemap = Treemap::create();
    /// treemap.add(25);
    /// treemap.add(15);
    /// treemap.add(u64::MAX);
    ///
    /// assert_eq!(treemap.to_vec(), [15, 25, u64::MAX]);
    /// ```
    pub fn to_vec(&self) -> Vec<u64> {
        let treemap_size = self.cardinality();

        let mut buffer: Vec<u64> = Vec::with_capacity(treemap_size as usize);

        for (key, bitmap) in &self.map {
            bitmap.iter().for_each(|bit| buffer.push(util::join(*key, bit)));
        }

        buffer
    }

    /// Creates a new treemap from a slice of u64 integers
    ///
    /// # Examples
    ///
    /// ```
    /// use std::u64;
    /// use croaring::Treemap;
    ///
    /// let elements = vec![1, 2