ARM_CKCTL) & 0x00ff0000
	orr	r3, r3, #IO_ADDRESS(ARM_CKCTL) & 0x0000ff00

	tst	r0, #1 << 4			@ want lock mode?
	beq	newck				@ nope
	bic	r0, r0, #1 << 4			@ else clear lock bit
	strh	r0, [r2]			@ set dpll into bypass mode
	orr	r0, r0, #1 << 4			@ set lock bit again

newck:
	strh	r1, [r3]			@ write new ckctl value
	strh	r0, [r2]			@ write new dpll value

	mov	r4, #0x0700			@ let the clocks settle
	orr	r4, r4, #0x00ff
delay:	sub	r4, r4, #1
	cmp	r4, #0
	bne	delay

lock:	ldrh	r4, [r2], #0			@ read back dpll value
	tst	r0, #1 << 4			@ want lock mode?
	beq	out				@ nope
	tst	r4, #1 << 0			@ dpll rate locked?
	beq	lock				@ try again

out:
	ldmfd	sp!, {r0 - r12, pc}		@ restore regs and return
ENTRY(sram_reprogram_clock_sz)
	.word	. - sram_reprogram_clock


    .    .    .    .  .   sete	%r9b
# CHECK-NEXT: [0,1]     DeER .    .    .    .    .  .   movzbl	%al, %eax
# CHECK-NEXT: [0,2]     D=eER.    .    .    .    .  .   shll	$2, %eax
# CHECK-NEXT: [0,3]     D==eeeER  .    .    .    .  .   imull	%ecx, %eax
# CHECK-NEXT: [0,4]     .D====eER .    .    .    .  .   cmpl	$1025, %eax
# CHECK-NEXT: [1,0]     .D=====eER.    .    .    .  .   sete	%r9b
# CHECK-NEXT: [1,1]     .D====eE-R.    .    .    .  .   movzbl	%al, %eax
# CHECK-NEXT: [1,2]     .D=====eER.    .    .    .  .   shll	$2, %eax
# CHECK-NEXT: [1,3]     . D=====eeeER  .    .    .  .   imull	%ecx, %eax
# CHECK-NEXT: [1,4]     . D========eER .    .    .  .   cmpl	$1025, %eax
# CHECK-NEXT: [2,0]     . D=========eER.    .    .  .   sete	%r9b
# CHECK-NEXT: [2,1]     . D========eE-R.    .    .  .   movzbl	%al, %eax
# CHECK-NEXT: [2,2]     .  D========eER.    .    .  .   shll	$2, %eax
# CHECK-NEXT: [2,3]     .  D=========eeeER  .    .  .   imull	%ecx, %eax
# CHECK-NEXT: [2,4]     .  D============eER .    .  .   cmpl	$1025, %eax
# CHECK-NEXT: [3,0]     .  D=============eER.    .  .   sete	%r9b
# CHECK-NEXT: [3,1]     .   D===========eE-R.    .  .   movzbl	%al, %eax
# CHECK-NEXT: [3,2]     .   D============eER.    .  .   shll	$2, %eax
# CHECK-NEXT: [3,3]     .   D=============eeeER  .  .   imull	%ecx, %eax
# CHECK-NEXT: [3,4]     .   D================eER .  .   cmpl	$1025, %eax
# CHECK-NEXT: [4,0]     .    D================eER.  .   sete	%r9b
# CHECK-NEXT: [4,1]     .    D===============eE-R.  .   movzbl	%al, %eax
# CHECK-NEXT: [4,2]     .    D================eER.  .   shll	$2, %eax
# CHECK-NEXT: [4,3]     .    D=================eeeER.   imull	%ecx, %eax
# CHECK-NEXT: [4,4]     .    .D===================eER   cmpl	$1025, %eax

# CHECK:      Average Wait times (based on the timeline view):
# CHECK-NEXT: [0]: Executions
# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage

# CHECK:            [0]    [1]    [2]    [3]
# CHECK-NEXT: 0.     5     9.6    0.2    0.0       sete	%r9b
# CHECK-NEXT: 1.     5     8.6    0.2    0.8       movzbl	%al, %eax
# CHECK-NEXT: 2.     5     9.4    0.0    0.0       shll	$2, %eax
# CHECK-NEXT: 3.     5     10.2   0.0    0.0       imull	%ecx, %eax
# CHECK-NEXT: 4.


on-anchor" data-target-cell="annotated-cell-6" data-target-annotation="1" onclick="event.preventDefault();">1  group_by (event_category) |>
2  summarize(avg_outage_length = mean(duration), total_occurences = n()) |>
3  arrange(avg_outage_length |> desc(), total_occurences)

<button title="Copy to Clipboard" class="code-copy-button"></button>

1

Exclusively looking at event_category.

2

Finding average duration (mean), and including occurrences for comparison.

3

Ordering from longest to shortest average outage length.


 { 0xff, 0xaa, 0x69, 0x88, 0xb5 });
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x1F, 0x04, 0x00 });
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 设置带宽256Hz
        /// Set bandwidth of 256Hz
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bandWidth256_Click(object sender, EventArgs e)
        {
            if (JY901.IsOpen() == false)
            {
                return;
            }
            try
            {
                // 解锁寄存器并发送命令   Unlock the register and send the command
                JY901.UnlockReg();
                JY901.SetBandWidth(0x00);
                // 下面两行与上面等价,推荐使用上面的    Equivalent to above
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x69, 0x88, 0xb5 });
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x1F, 0x00, 0x00 });
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 开始磁场校准
        /// Start magnetic field calibration
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void startFieldCalibrationButton_Click(object sender, EventArgs e)
        {
            if (JY901.IsOpen() == false)
            {
                return;
            }
            try
            {
                // 解锁寄存器并发送命令   Unlock the register and send the command
                JY901.UnlockReg();
                JY901.StartFieldCalibration();
                // 下面两行与上面等价,推荐使用上面的    Equivalent to above
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x69, 0x88, 0xb5 });
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x01, 0x07, 0x00 });
                MessageBox.Show("开始磁场校准,请绕传感器XYZ三轴各转一圈,转完以后点击【结束磁场校准】");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 结束磁场校准
        /// End magnetic field calibration
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void endFieldCalibrationButton_Click(object sender, EventArgs e)
        {
            if (JY901.IsOpen() == false)
            {
                return;
            }
            try
            {
                // 解锁寄存器并发送命令   Unlock the register and send the command
                JY901.UnlockReg();
                JY901.EndFieldCalibration();
                // 下面两行与上面等价,推荐使用上面的    Equivalent to above
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x69, 0x88, 0xb5 });
                //JY901.SendProtocolData(new byte[] { 0xff, 0xaa, 0x01, 0x00, 0x00 });
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}


: flex;
      flex-direction: row;
      align-items: center;
      justify-content: flex-start;
      user-select: none;
      position: relative;
      width: 100%;
      z-index: 0;
      text-align: right;
      bottom: auto;
      height: 32px;
      min-width: 48px;
      line-height: 32px;
      background-color: #fafafa;
      font-size: 12px;
      overflow: hidden;
      transition: opacity 0.3s; }
      .free-media .free-media-controls .free-media-controls-panel .free-media-play,
      .free-media .free-media-controls .free-media-controls-panel .free-media-mute,
      .free-media .free-media-controls .free-media-controls-panel .free-media-fullscreen {
        display: flex;
        box-sizing: border-box;
        width: 32px;
        height: 32px;
        flex: 0 0 auto;
        align-items: flex-start;
        justify-content: center; }
        .free-media .free-media-controls .free-media-controls-panel .free-media-play i,
        .free-media .free-media-controls .free-media-controls-panel .free-media-mute i,
        .free-media .free-media-controls .free-media-controls-panel .free-media-fullscreen i {
          font-size: 17px; }
      .free-media .free-media-controls .free-media-controls-panel .free-media-current-time {
        position: relative;
        user-select: none;
        display: flex;
        cursor: default;
        height: 32px;
        flex: 0 0 auto;
        padding: 0; }
        .free-media .free-media-controls .free-media-controls-panel .free-media-current-time:after {
          content: '/';
          padding: 0 5px; }
      .free-media .free-media-controls .free-media-controls-panel .free-media-timeline,
      .free-media .free-media-controls .free-media-controls-panel .free-media-volume {
        display: flex;
        flex: 1 1 auto;
        min-width: 25px;
        padding: 0; }
      .free-media .free-media-controls .free-media-controls-panel .free-media-timeline {
        position: relative;
        margin: 0 3px 0 18px; }
        .free-media .free-media-controls .free-media-controls-panel .free-media-timeline .free-media-canplay {
          position: absolute;
          top: 0;
          left: 0;
          width: 100%;
          height: 100%; }
      .free-media .free-media-controls .free-media-controls-panel .free-media-volume {
        max-width: 70px;
        flex: 1 1.9 auto;
        margin: 0 12px 0 0; }
      .free-media .free-media-controls .free-media-controls-panel .free-media-remaining-time {
        user-select: none;
        display: flex;
        cursor: default;
        height: 32px;
        padding-right: 5px;
        color: #5a5a5a; }

/*# sourceMappingURL=media.component.css.map */
$card-prefix: bm-Card;
.#{$card-prefix} {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  background-color: $cardBg;
  @include boxShad


d{width:var(--mobile-left-sidebar-width-pinned, 320px)}body.is-tablet .workspace-drawer.mod-right.is-pinned{width:var(--mobile-right-sidebar-width-pinned, 320px)}/*!
/* @settings

name: Baseline
id: baseline-style
settings:
	-
		id: info
		title: Get started
		type: heading
		level: 1
		collapsed: false
	-
		id: migrate
		title: Migrate from other themes
		type: info-text
		level: 1
		markdown: true
		description: Seamlessly **migrate your existing Style Settings** from supported themes. ↗[](https://aaaaalexis.github.io/obsidian-baseline/migration/)
	-
		id: marketplace
		title: Community style presets
		type: info-text
		level: 1
		markdown: true
		description: Discover and share Style Settings presets in **Baseline Marketplace**. ↗[](https://aaaaalexis.github.io/obsidian-baseline/marketplace/)
	-
		id: missing-font
		title: Extended language support
		title.zh-TW: 擴充語言支援
		title.zh: 扩展语言支持
		title.jp: 拡張言語サポート
		title.ru: Расширенная языковая поддержка
		type: info-text
		level: 1
		markdown: true
		description: Heading font missing glyphs? Download the **extended font CSS snippet**. ↗[](https://github.com/aaaaalexis/obsidian-baseline/blob/main/snippets/baseline-extension-font.css)
		description.zh-TW: 標題出現缺字？請點此下載擴充字型 CSS 片段。[](https://github.com/aaaaalexis/obsidian-baseline/blob/main/snippets/baseline-extension-font.css)
		description.zh: 标题字体缺字？请下载**扩展字体 CSS 代码片段**[](https://github.com/aaaaalexis/obsidian-baseline/blob/main/snippets/baseline-extension-font-cn.css)
		description.jp: 見出しフォントが文字化け？拡張フォントCSSスニペットをダウンロード。[](https://github.com/aaaaalexis/obsidian-baseline/blob/main/snippets/baseline-extension-font-jp.css)
		description.ru: Проблемы со шрифтом заголовков? Скачайте CSS с расширенным шрифтом.[](https://github.com/aaaaalexis/obsidian-baseline/blob/main/snippets/baseline-extension-font.css)

	-
		id: colors
		title: Colors
		type: heading
		level: 1
		collapsed: true
	-
		id: accented-interface
		title: Interface accent
		description: Use accent color for active state and buttons
		type: class-toggle
		default: false
	-
		id: color-scheme-light
		title: Light mode color scheme
		type: class-select
		allowEmpty: false
		default: default-light
		options:
			-
				label: Obsidian
				value: default-light
			-
				label: Admin
				value: admin-light
			-
				label: Atom
				value: atom-light
			-
				label: Ayu
				value: ayu-light
			-
				label: Catppuccin
				value: catppuccin-light
			-
				label: Everforest
				value: everforest-light
			-
				label: Flexoki
				value: flexoki-light
			-
				label: Gruvbox
				value: gruvbox-light
			-
				label: Latte
				value: latte-light
			-
				label: macOS
				value: macos-light
			-


范畴论通常被称为“数学的数学”，因为它不研究特定的数学对象（如数字、集合、群、空间），而是研究这些对象所形成的“结构类型”（即范畴）以及在这些结构类型之间保持结构的“映射”（即函子）。

#### 6.2.1 关注普适模式而非特定实例

范畴论的核心思想是识别和形式化在各种数学领域中反复出现的普适构造和模式。例如：

- **积 (Product)**：在集合论中有笛卡尔积，在类型论中有积类型，在拓扑学中有积空间，在范畴论中抽象为“积对象”这一普适概念。
- **对偶性 (Duality)**：如线性代数中的向量空间与其对偶空间，逻辑中的德摩根定律，范畴论中的“对偶范畴”和伴随函子提供了对偶性的普适框架。
这种抽象能力使得范畴论可以揭示不同数学结构之间的深层联系。

#### 6.2.2 作为桥接不同数学分支的语言

由于其高度的抽象性和普适性，范畴论可以作为一种元语言，用来精确地表达和比较不同数学分支中的概念和定理。这对于AI而言至关重要，因为它可能需要整合来自统计学、逻辑学、几何学等不同领域的思想。范畴论提供了一种统一的方式来谈论这些领域中的“结构”和“过程”。 (`cat_AI02.md` 1.1, 1.2)

### 6.3 核心贡献1：组合性 (Compositionality)

组合性是指能够通过组合简单的、行为良好定义的组件来构建复杂的系统，并且复杂系统的行为可以从其组件的行为和组合方式中推断出来。这是工程学的基本原则，对于构建可理解、可预测、可扩展的AI系统至关重要。

#### 6.3.1 AI系统模块化设计的数学基础

- **范畴论的态射组合**: 范畴论的核心就是态射的组合。如果AI组件被建模为态射（例如，一个处理模块将其输入类型对象映射到输出类型对象），那么组件的顺序应用就直接对应于态射的组合。这种组合是结合的，并且有单位元（恒等态射），为模块化设计提供了坚实的代数基础。
- **接口作为对象**: 在范畴论的视角下，模块的接口（输入/输出类型


t a=fM[t.type]&&s!==Ro&&s!==No?i8(e,t,r):lM(e,t,n,r,s,o);return i===gd&&o8(t)?a8(a):i===Q7?u8(a):l8(a)}const a8=e=>(t,n,i)=>{const r=ES(i[n+1],ES(i.max,1/0)),s=SS(t,e),o=SS(r,e);return s&&o?s+" – "+o:o?"< "+o:"≥ "+s},ES=(e,t)=>e??t,u8=e=>(t,n)=>n?e(t):null,l8=e=>t=>e(t),SS=(e,t)=>Number.isFinite(e)?t(e):null;function c8(e){const t=e.domain(),n=t.length-1;let i=+t[0],r=+xe(t),s=r-i;if(e.type===Gp){const o=n?s/n:.1;i-=o,r+=o,s=r-i}return o=>(o-i)/s}function f8(e,t,n,i){const r=i||t.type;return K(n)&&V7(r)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),!n&&r===Ro?e.timeFormat("%A, %d %B %Y, %X"):!n&&r===No?e.utcFormat("%A, %d %B %Y, %X UTC"):hM(e,t,5,null,n,i,!0)}function pM(e,t,n){n=n||{};const i=Math.max(3,n.maxlen||7),r=f8(e,t,n.format,n.formatType);if(h1(t.type)){const s=dM(t).slice(1).map(r),o=s.length;return`${o} boundar${o===1?"y":"ies"}: ${s.join(", ")}`}else if(nu(t.type)){const s=t.domain(),o=s.length,a=o>i?s.slice(0,i-2).map(r).join(", ")+", ending with "+s.slice(-1).map(r):s.map(r).join(", ");return`${o} value${o===1?"":"s"}: ${a}`}else{const s=t.domain();return`values from ${r(s[0])} to ${r(xe(s))}`}}let gM=0;function d8(){gM=0}const nh="p_";function Hv(e){return e&&e.gradient}function mM(e,t,n){const i=e.gradient;let r=e.id,s=i==="radial"?nh:"";return r||(r=e.id="gradient_"+gM++,i==="radial"?(e.x1=Ni(e.x1,.5),e.y1=Ni(e.y1,.5),e.r1=Ni(e.r1,0),e.x2=Ni(e.x2,.5),e.y2=Ni(e.y2,.5),e.r2=Ni(e.r2,.5),s=nh):(e.x1=Ni(e.x1,0),e.y1=Ni(e.y1,0),e.x2=Ni(e.x2,1),e.y2=Ni(e.y2,0))),t[r]=e,"url("+(n||"")+"#"+s+r+")"}function Ni(e,t){return e??t}function yM(e,t){var n=[],i;return i={gradient:"linear",x1:e?e[0]:0,y1:e?e[1]:0,x2:t?t[0]:1,y2:t?t[1]:0,stops:n,stop:function(r,s){return n.push({offset:r,color:s}),i}}}const _S={basis:{curve


ession这种模式通常是保存在内存中，而且服务从**单服务到多服务会面临的session共享问题**，随着用户量的增多，开销就会越大。而JWT不是这样的，只需要服务端生成token，客户端保存这个token，每次请求携带这个token，服务端认证解析就可。

### 构成
第一部分我们称它为头部（header),第二部分我们称其为载荷（payload)，第三部分是签证（signature)。详情请见[官网](https://jwt.io/introduction/)

简单说一下

#### header
是一个Json对象，描述JWT的元数据，通常是下面这样子的：
```json
{
    "alg": "HS256",
    "typ": "JWT"
}
```
上面代码中，alg属性表示签名的算法（algorithm），默认是 HMAC SHA256（写成 HS256）；typ属性表示这个令牌（token）的类型（type），JWT 令牌统一写为JWT。最后，将上面的 JSON 对象使用 Base64URL 算法转成字符串。

#### payload
Payload部分也是一个Json对象，用来存放实际需要传输的数据，JWT官方规定了下面几个官方的字段供选用。

- iss (issuer)：签发人
- exp (expiration time)：过期时间
- sub (subject)：主题
- aud (audience)：受众
- nbf (Not Before)：生效时间
- iat (Issued At)：签发时间
- jti (JWT ID)：编号

也可以定义私有属性

#### signature
Signature部分是对前面的两部分的数据进行签名，防止数据篡改。

首先需要定义一个秘钥，这个秘钥只有服务器才知道，不能泄露给用户，然后使用Header中指定的签名算法(默认情况是HMAC SHA256)，算出签名以后将Header、Payload、Signature三部分拼成一个字符串，每个部分用.分割开来，就可以返给用户了。

## 在项目中如何写

### JwtTokenUtil
这里是使用guns搭建的项目，自带的工具类，我就不详细赘述了，主要是一下我们的业务逻辑，以及如何使用。

### AuthController
> sb-gateway-auth-AuthController

能请求到AuthContoroller，说明两种情况：
1. 你没有携带token
2. 你token过期了

而这个业务处理，是为了生成token

```java
    @ApiOperation(value = "获取token接口", notes = "每调用一次，就会随机生成一串token", response = ResponseData.class)
    @Request


* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de                             *
*                                                                                *
**************************************************************************************************/

// subroutine
//
// input arguments:
// r4   <- alpha
// r5   <- beta
// r6   <- C
// r7   <- ldc*sizeof(float)
//
// output arguments:

#if MACRO_LEVEL>=1
	.macro INNER_SCALE_AB_4X4_LIB lc_zero
#else
	.align 3
99: // 0
	.word 0
	.word 0
//	.p2align 4,,15
#if defined(OS_LINUX)
	.type inner_scale_ab_4x4_lib, %function
inner_scale_ab_4x4_lib:
#elif defined(OS_MAC)
_inner_scale_ab_4x4_lib:
#endif
#endif

	flds		s8, [r4, #0] // alpha
	flds		s9, [r5, #0] // beta

#if MACRO_LEVEL>=2
	flds		s10, \lc_zero // 0.0
#else
	flds		s10, 99b // 0.0
#endif

	vmul.f32	q4, q4, d4[0]
	vmul.f32	q5, q5, d4[0]
	vmul.f32	q6, q6, d4[0]
	fcmpes		s9, s10
	vmul.f32	q7, q7, d4[0]
	fmstat

	beq		0f // end

	vld1.64		{d0, d1}, [r6], r7
	vld1.64		{d2, d3}, [r6], r7
	vmla.f32	q4, q0, d4[1]
	vmla.f32	q5, q1, d4[1]
	vld1.64		{d0, d1}, [r6], r7
	vld1.64		{d2, d3}, [r6], r7
	vmla.f32	q6, q0, d4[1]
	vmla.f32	q7, q1, d4[1]

0:

#if MACRO_LEVEL>=1
	.endm
#else
	mov		pc, lr // return

#if defined(OS_LINUX)
	.size	inner_scale_ab_4x4_lib, .-inner_scale_ab_4x4_lib
#endif
#endif

// subroutine
//
// input arguments:
// r4   <- D
// r5   <- ldd*sizeof(float)
//
// output arguments:

#if MACRO_LEVEL>=1
	.macro INNER_STORE_4X4_LIB
#else
//	.p2align 4,,15
#if defined(OS_LINUX)
	.type inner_store_4x4_lib, %function
inner_store_4x4_lib:
#elif defined(OS_MAC)
_inner_store_4x4_lib4:
#endif
#endif

	vst1.64		{d8, d9}, [r4], r5
	vst1.64		{d10, d11}, [r4], r5
	vst1.64		{d12, d13}, [r4], r5
	vst1.64		{d14, d15}, [r4], r5

#if MACRO_LEVEL>=1
	.endm
#else
	mov		pc, lr // return

#if defined(OS_LINUX)
	.size	inner_store_4x4_lib, .-inner_store_4x4_lib
#endif
#endif

	.align 3
99: // 0
	.word 0
	.word 0

//                                 r0        r1             r2         r3         sp+0          sp+4       sp+8     sp+12      sp+16
// void kernel_dgemm_nt_4x4_lib44cc(int kmax, double *alpha, double *A, double *B, double *beta, double *C, int ldc, double *D, int ldd)

//	.p2align 4,,15
#if defined(OS_LINUX)
	.global	kernel_sgemm_nt_4x4_lib44cc
	.type	kernel_sgemm_nt_4x4_lib44cc, %function
kernel_sgemm_nt_4x4_lib44cc:
#elif defined(OS_MAC)
	.global	kernel_sgemm_nt_4x4_lib44cc
_kernel_sgemm_nt_4x4_lib44cc:
#endif

	PROLOGUE

	// zero accumulation registers
	vldr	d8, 99b
	vldr	d9, 99b
	vmov	q5, q4
	vmov	q6, q4
	vmov	q7, q4

	// call inner kernel dgemm nt
	mov		r4, r0 // kmax
	mov		r5, r2 // A
	mov		r6, r3 // B

#if MACRO_LEVEL>=2
	INNER_KERNEL_GEMM_ADD_NT_4X4_LIB4
#else
#if defined(OS_LINUX)
	bl	inner_kernel_gemm_add_nt_4x4_lib4
#elif defined(OS_MAC)
	bl	_inner_kernel_gemm_add_nt_4x4_lib4
#endif
#endif

	// call inner blend for generic alpha and beta
	mov		r4, r1 // alpha
	ldr		r5, [fp, #0] // beta
	ldr		r6, [fp, #4] // C
	ldr		r7, [fp, #8] // ldc
	lsl		r7, r7, #2 // ldc*sizeof(float)

#if MA


  cTabhead_onMessage(_c, &Context(_c)->cTabhead_Qv3nZexf, 0, m, &cTabhead_Qv3nZexf_sendMessage);
  cMsg_HDlcRQrY_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_uga0ojk6, 0, m, &cVar_uga0ojk6_sendMessage);
  cMsg_d5XQvj99_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_i4LXdtzU, 0, m, &cTabhead_i4LXdtzU_sendMessage);
  cMsg_fuBJ9j2u_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_oVb07qDv, 0, m, &cVar_oVb07qDv_sendMessage);
  cMsg_G1hkdePX_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_EGTKdSEC, 0, m, &cTabhead_EGTKdSEC_sendMessage);
  cMsg_aNNQXAd4_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_3Bib75vr, 0, m, &cVar_3Bib75vr_sendMessage);
  cMsg_F9NwKrgF_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_pUQtyXyC, 0, m, &cTabhead_pUQtyXyC_sendMessage);
  cMsg_5hTJNFYr_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_AOZ7W5JW, 0, m, &cVar_AOZ7W5JW_sendMessage);
  cMsg_Y35G74gi_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_pxb3aKdC, 0, m, &cTabhead_pxb3aKdC_sendMessage);
  cMsg_qsEt4WPH_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_VtODd3Mt, 0, m, &cVar_VtODd3Mt_sendMessage);
  cMsg_Jdfy9G90_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_ySUZDvWF, 0, m, &cTabhead_ySUZDvWF_sendMessage);
  cMsg_TZY9t5aJ_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_TtMEGLm8, 0, m, &cVar_TtMEGLm8_sendMessage);
  cMsg_77G3puPH_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_0M64l0Gh, 0, m, &cTabhead_0M64l0Gh_sendMessage);
  cMsg_TriIo9CI_sendMessage(_c, 0, m);
  cVar_onMessage(_c, &Context(_c)->cVar_W84iPXbj, 0, m, &cVar_W84iPXbj_sendMessage);
  cMsg_BFWqdNSG_sendMessage(_c, 0, m);
  cTabhead_onMessage(_c, &Context(_c)->cTabhead_NE3H1yLp, 0, m, &cTabhead_NE3H1yLp_sendMessage);
  cVar_onMessage(_c, &Context(_c)->cVar_ftMlP82l, 0, m, &cVar_ftMlP82l_sendMessage);
  cMsg_Mz3Cn5fZ_sendMessage(_c, 0, m);
}

void Heavy_Simple_OSC::cReceive_zm7vvp0k_sendMessage(HeavyC


ate set { fuelConsumption = value; }
    }

    public decimal FuelAmount
    {
        get { return fuelAmount; }
        private set { fuelAmount = value; }
    }

    public string Model
    {
        get { return model; }
        private set { model = value; }
    }

    public bool Drive(int distance)
    {
        if(distance * FuelConsumption <= FuelAmount)
        {
            FuelAmount -= FuelConsumption * distance;
            DistanceTravelled += distance;
            return true;
        }

        return false;
    }

    public override string ToString()
    {
        return $"{Model} {FuelAmount:F2} {DistanceTravelled}";
    }
}


 {
      await ref.read(mangaServiceProvider).updateManga(manga.copyWith(favorite: !manga.favorite));
    } catch (error, stackTrace) {
      handlerError(error, stackTrace);
    }
  }
}

@freezed
class MangaChapter with _$MangaChapter {
  const factory MangaChapter({
    required DatabaseChapter chapter,
    required DatabaseDownload? download,
    required bool downloaded,
    required bool enabled,
    required double? downloadPercent,
  }) = _MangaChapter;
}

@freezed
class MangaState with _$MangaState {
  const factory MangaState({
    required Source source,
    required DatabaseManga manga,
    required List<MangaChapter> chapters,
  }) = _MangaState;
}
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:tsukuyomi/core/core.dart';
import 'package:tsukuyomi_list/tsukuyomi_list.dart';

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

  @override
  State<DebugListCaseAnchorAddAnchorMulti> createState() => _DebugListCaseAnchorAddAnchorMultiState();
}

class _DebugListCaseAnchorAddAnchorMultiState extends State<DebugListCaseAnchorAddAnchorMulti> {
  int step = 0;
  final random = Random(2147483647);
  final itemKeys = List.generate(10, (index) => index);
  final itemHeights = List.generate(10, (index) => 100.0);
  final controller = TsukuyomiListController();

  Widget builder() {
    return Directionality(
      textDirection: TextDirection.ltr,
      child: TsukuyomiList.builder(
        debugMask: true,
        itemKeys: itemKeys,
        itemBuilder: (context, index) => SizedBox(height: itemHeights[index], child: Placeholder(child: Text('${itemKeys[index]}'))),
        controller: controller,
        anchor: 0.5,
        initialScrollIndex: 9,
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    void insertItem() {
      final anchorIndex = itemKeys.indexOf(5);
      itemKeys.insertAll(anchorIndex + 1, List.generate(100, (index) => itemKeys.length + index));
      itemHeights.insertAll(anchorIndex + 1, List.generate(100, (index) => 300.0 + random.nextInt(100)));
      itemKeys.insertAll(anchorIndex, List.generate(100, (index) => itemKeys.length + index));
      itemHeights.insertAll(anchorIndex, List.generate(100, (index) => 300.0 + random.nextInt(100)));
    }

    return TsukuyomiScaffold(
      body: Center(
        child: SizedBox(
          height: 600.0,
          child: builder(),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          final _ = switch (++step) {
            1 => await controller.slideViewport(-1.0 / 6),
            2 => insertItem(),
            3 => insertItem(),
            4 => insertItem(),
            5 => insertItem(),
            6 => insertItem(),
            7 => insertItem(),
            8 => insertItem(),
            9 => insertItem(),
            _ => --step,
          };
          setState(() {});
        },
        shape: const CircleBorder(),
        child: Text('$step'),
      ),
    );
  }
}
void main() {
  //TODO:convert a map to a list
  //example 1
  Map<int, String> nameCollection23 = {0: "app


支持传递函数名的字符串、函数句柄以及函数本身三种类型
            var callbacks = {
                // 选择文件的回调
                selectFileCallback: function(selectFiles){
                    utils.each(selectFiles,function(file){
                        var tmp = {};
                        tmp.id = file.index;
                        tmp.data = {};
                        postConfig.push(tmp);
                    });
                    selectedImageCount += selectFiles.length;
                    if(selectedImageCount) baidu.g("upload").style.display = "";
                    dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮
                },
                // 删除文件的回调
                deleteFileCallback: function(delFiles){
                    for(var i = 0,len = delFiles.length;i<len;i++){
                        var index = delFiles[i].index;
                        postConfig.splice(index,1);
                    }
                    selectedImageCount -= delFiles.length;
                    if (!selectedImageCount) {
                        baidu.g("upload").style.display = "none";
                        dialog.buttons[0].setDisabled(false);         //没有选择图片时重新点亮按钮
                    }
                },

                // 单个文件上传完成的回调
                uploadCompleteCallback: function(data){
                    try{
                        var info = eval("(" + data.info + ")");
                        info && imageUrls.push(info);
                        selectedImageCount--;
                    }catch(e){}

                },
                // 单个文件上传失败的回调,
                uploadErrorCallback: function (data){
                    if(!data.info){
                        alert(lang.netError);
                    }
                    //console && console.log(data);
                },
                // 全部上传完成时的回调
                allCompleteCallback: function(){
                    dialog.buttons[0].setDisabled(false);    //上传完毕后点亮按钮
                },
                // 文件超出限制的最大体积时的回调
                //exceedFileCallback: 'exceedFileCallback',
                // 开始上传某个文件时的回调
                startUploadCallback: function(){
                    var config = postConfig.shift();
                    //也可以在这里更改
                    //if(config.id==2){ //设置第三张图片的对应参数
                    //     config.data={"myParam":"value"}
                    // }
                    flashObj.addCustomizedParams(config.id,config.data);
                }
            };

            initSavePath();

            imageUploader.init(flashOptions,callbacks);
            $G("upload").onclick = function () {

                if ( !savePathComplete ) {
                    alert('请等待保存目录就绪!')
                    return;
                }
                /**
                 * 接口imageUploader.setPostParams()可以在提交时设置本次上传提交的参数（包括所有图片）
                 * 参数为json对象{"key1":"value1","key2":"value2"}，其中key即为向后台post提交的name，value即为值。
                 * 其中有一个特殊的保留key值为action，若设置，可以更改本次提交的处理地址
                 */
                var postParams = {
                    "dir":baidu.g("savePath").value
                };
                imageUploader.setPostParams(postParams);
                flashObj.upload();
                this.style.display = "none";
                $G("savePath").


"""
Scrapper for downloading prison break
series from an open server and putting them in a designated folder.
"""
import os
import subprocess

import requests as req
from bs4 import BeautifulSoup as bs

BASE_URL = "http://dl.funsaber.net/serial/Prison%20Break/season%20"

def download_files(links, idx):
    for link in links:
        subprocess.call(
            ["aria2c", "-s", "16", "-x", "16", "-d", "season" + str(idx), link]
        )

def main():
    for i in range(1, 5):
        r = req.get(BASE_URL + str(i) + "/1080/")
        soup = bs(r.text, "html.parser")
        link_ = []
        for link in soup.find_all("a"):
            if ".mkv" in link.get("href"):
                link_.append(BASE_URL + str(i) + "/1080/" + link.get("href"))
        if not os.path.exists("season" + str(i)):
            os.makedirs("season" + str(i))
        download_files(link_, i)

if __name__ == "__main__":
    main()


#region Disclaimer/License Info

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

// sBlog.Net

// sBlog.Net is a minimalistic blog engine software.

// Homepage: http://sblogproject.net
// Github: http://github.com/karthik25/sBlog.Net

// This project is licensed under the BSD license.
// See the License.txt file for more information.

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

#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using sBlog.Net.Domain.Entities;
using sBlog.Net.Domain.Interfaces;
using System.ComponentModel;
using sBlog.Net.Areas.Admin.Models;
using sBlog.Net.Models;
using sBlog.Net.Controllers;
using sBlog.Net.FluentExtensions;

namespace sBlog.Net.Areas.Admin.Controllers
{
    public class TagAdminController : BlogController
    {
        private readonly ITag _tagRepository;

        private readonly int _itemsPerPage;

        public TagAdminController(ITag tagRepository, ISettings settingsRepository)
            : base(settingsRepository)
        {
            _tagRepository = tagRepository;
            ExpectedMasterName = string.Empty;

            _itemsPerPage = settingsRepository.ManageItemsPerPage;

            IsAdminController = true;
        }

        [Authorize]
        public ActionResult ManageTags([DefaultValue(1)] int page)
        {
            if (!User.IsInRole("SuperAdmin") && !User.IsInRole("Admin"))
            {
                return RedirectToAction("Index", "Home", new { Area = "" });
            }

            var allTags = _tagRepository.GetAllTags();
            var tagModel = new AdminTagsViewModel
            {
                Tags = allTags.Skip((page - 1) * _itemsPerPage).Take(_itemsPerPage).ToList(),
                PagingInfo = new PagingInformation


e5acb2,
  danger-200: $theme-red-fe8c98,
  danger-300: $theme-red-ff7878,
  danger-400: $theme-red-f16674,
  danger-500: $theme-red-fc6574,
  danger-600: $theme-red-ef5262,
  danger-700: $theme-red-f34b5c,
  danger-800: $theme-red-f33346,
  danger-900: $theme-red-fe2e2e,
  danger-1000: $theme-red-312325,
);

// Define a map for border colors
$sparrow-border-colors: (
  primary-100: $theme-blue-9CDCFE,
  primary-200: $theme-blue-1193F0,
  primary-300: $theme-blue-3670F7,
  primary-400: $theme-blue-0B5ED7,

  secondary-100: $theme-grey-ffffff,
  secondary-110: $theme-grey-F5F5F5,
  secondary-150: $theme-grey-e5e5e5,
  secondary-170: $theme-grey-C4CBDA,
  secondary-180: $theme-grey-B6B5B5,
  secondary-200: $theme-grey-8A9299,
  secondary-290: $theme-grey-484848,
  secondary-300: $theme-grey-45494D,
  secondary-400: $theme-grey-313233,
  secondary-500: $theme-grey-272727,
  secondary-530: $theme-grey-19191A,
  secondary-550: $theme-grey-1A1A1A,
  secondary-600: $theme-grey-212222,
  secondary-700: $theme-grey-161617,
  secondary-800: $theme-grey-151515,
  secondary-900: $theme-grey-000000,
  secondary-1000: $theme-grey-CCCCCC,
  secondary-1100: $theme-grey-2B343D,

  tertiary-100: $theme-violet-676A80,
  tertiary-190: $theme-violet-37394E,
  tertiary-300: $theme-violet-2A2C3C,
  tertiary-400: $theme-violet-22232E,
  tertiary-500: $theme-violet-272831,
  tertiary-600: $theme-violet-2E2F3D,
  tertiary-700: $theme-violet-1c1d27,
  tertiary-750: $theme-violet-1C1D2B,

  danger-100: $theme-red-e5acb2,
  danger-200: $theme-red-fe8c98,
  danger-300: $theme-red-ff7878,
  danger-400: $theme-red-f16674,
  danger-500: $theme-red-fc6574,
  danger-600: $theme-red-ef5262,
  danger-700: $theme-red-f34b5c,
  danger-800: $theme-red-f33346,
  danger-900: $theme-red-fe2e2e,
  danger-1000: $theme-red-312325,
);

// Generate utility classes
@each $size, $value in $sparrow-font-sizes {
  .sparrow-fs-#{$size} {
    font-size: $value;
  }

  .text-fs-#{$size} {
    font-size: $value;
  }

  .text-fs-#{$size}-important {
    font-size: $value !important;
  }
}

@each $radius, $value in $sparrow-border-radius {
  .border-radius-#{$radius} {
    border-radius: $value;
  }
}

@each $color, $value in $sparrow-text-colors {
  .text-#{$color}


td::string monomerKETClass(const std::string& class_name)
    {
        auto mclass = class_name;
        if (class_name == kMonomerClassAA)
            return kMonomerClassAminoAcid;

        if (mclass == kMonomerClassdAA)
            return kMonomerClassDAminoAcid;

        if (mclass == kMonomerClassRNA || mclass == kMonomerClassDNA || mclass.find(kMonomerClassMOD) == 0 || mclass.find(kMonomerClassXLINK) == 0)
            return mclass;

        for (auto it = mclass.begin(); it < mclass.end(); ++it)
            *it = static_cast<char>(it > mclass.begin() ? std::tolower(*it) : std::toupper(*it));

        return mclass;
    }

    std::string monomerHELMClass(const std::string& class_name)
    {
        if (isAminoAcidClass(class_name))
            return kMonomerClassPEPTIDE;
        if (isNucleicClass(class_name))
            return kMonomerClassRNA;
        return kMonomerClassCHEM;
    }

}

#ifdef _MSC_VER
#pragma warning(pop)
#endif
/****************************************************************************
 * Copyright (C) from 2009 to Present EPAM Systems.
 *
 * This file is part of Indigo toolkit.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ***************************************************************************/

#include "layout/molecule_cleaner_2d.h"
#include "base_cpp/cancellation_handler.h"
#include "base_cpp/profiling.h"
#include "graph/biconnected_decomposer.h"
#include "molecule/molecule.h"
#include <algorithm>
#include <set>
#include <vector>

using namespace indigo;

// IMPL_ERROR(MoleculeCleaner2d, "MoleculeCleaner2d");

MoleculeCleaner2d::MoleculeCleaner2d(BaseMolecule& mol, bool use_biconnected_decompose) : _mol(mol)
{
    if (_isZero())
        return;
    vertex_size = _mol.vertexEnd();
    //    printf("%d\n", vertex_count);
    //    printf("%d\n", component_count);
    _initComponents(use_biconnected_decompose);

    if (is_trivial)
        return;

    _initAdjMatrix();
    _calcTargetLen();
    _initCommonComp();
    _initCommonBiconnectedComp();

    /*if (use_biconnected_decompose) {
        printf("%d components\n", component_count);
        for (int i = 0; i < component_count; i++) {
            printf("%d: ", i);
            for (int v = _mol.vertexBegin(); v != _mol.vertexEnd(); v = _mol.vertexNext(v)) if (in[i][v]) printf("%d, ", v);
            printf("|| ");
            printf("%d: ", definiting_points[i].size());
            for (int j = 0; j < definiting_points[i].size(); j++) printf("%d, ", definiting_points[i][j]);
            printf("\n");
        }

        for (int v = _mol.vertexBegin(); v != _mol.vertexEnd(); v = _mol.vertexNext(v)) {
            printf("%d = ", v);
            for (int j = 0; j


/**********************************************************************
  Copyright(c) 2011-2013 Intel Corporation All rights reserved.

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * 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.
    * Neither the name of Intel Corporation nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 THE COPYRIGHT
  OWNER 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 <stdio.h>
#include <stdlib.h>
#include "raid.h"
#include "types.h"

#define TEST_SOURCES 16
#define TEST_LEN     16*1024

int main(int argc, char *argv[])
{
	int i, j, should_pass, should_fail;
	void *buffs[TEST_SOURCES + 1];

	printf("XOR example\n");
	for (i = 0; i < TEST_SOURCES + 1; i++) {
		void *buf;
		if (posix_memalign(&buf, 32, TEST_LEN)) {
			printf("alloc error: Fail");
			return 1;
		}
		buffs[i] = buf;
	}

	printf("Make random data\n");
	for (i = 0; i < TEST_SOURCES + 1; i++)
		for (j = 0; j < TEST_LEN; j++)
			((char *)buffs[i])[j] = rand();

	printf("Generate xor parity\n");
	xor_gen(TEST_SOURCES + 1, TEST_LEN, buffs);

	printf("Check parity: ");
	should_pass = xor_check(TEST_SOURCES + 1, TEST_LEN, buffs);
	printf("%s\n", should_pass == 0 ? "Pass" : "Fail");

	printf("Find corruption: ");
	((char *)buffs[TEST_SOURCES / 2])[TEST_LEN / 2] ^= 1;	// flip one bit
	should_fail = xor_check(TEST_SOURCES + 1, TEST_LEN, buffs);	//recheck
	printf("%s\n", should_fail != 0 ? "Pass" : "Fail");

	return 0;
}


ObjectHandler', io);
  var paths = Uri.parse(path).pathSegments;
  Expect.equals('io', paths.first);
  return JSON.decode(
      io.invoke(m, [paths.sublist(1), [], []]).reflectee);
}

String getServicePath(obj) {
  var io = currentMirrorSystem().findLibrary(const Symbol('dart.io'));
  var m = MirrorSystem.getSymbol('_getServicePath', io);
  return io.invoke(m, [obj]).reflectee;
}

Future testHttpServer1() {
  return HttpServer.bind('localhost', 0).then((server) {
    var path = getServicePath(server);
    var map = lookupServiceObject(path);
    Expect.equals(map['type'], 'HttpServer');
    Expect.equals(map['id'], path);
    Expect.equals(map['address'], 'localhost');
    Expect.equals(map['port'], server.port);
    Expect.equals(map['closed'], false);
    Expect.listEquals(map['idle'], []);
    Expect.listEquals(map['active'], []);
    var socket = map['socket'];
    Expect.equals(socket['type'], '@Socket');
    Expect.equals(socket['kind'], 'Listening');
    // Validate owner back-ref.
    socket = lookupServiceObject(socket['id']);
    Expect.equals(socket['owner']['id'], path);
    return server.close();
  });
}

Future testHttpServerConnection1() {
  return HttpServer.bind('localhost', 0).then((server) {
    server.listen((request) {
      var map = lookupServiceObject(getServicePath(server));
      Expect.listEquals(map['idle'], []);
      Expect.equals(map['active'].length, 1);
      var active = map['active'].first;
      Expect.equals(active['type'], '@HttpServerConnection');
      var path = active['id'];
      map = lookupServiceObject(path);
      Expect.equals(map['type'], 'HttpServerConnection');
      var socket = map['socket'];
      Expect.equals(socket['type'], '@Socket');
      Expect.equals(socket['kind'], 'Normal');
      // Validate owner back-ref.
      socket = lookupServiceObject(socket['id']);
      Expect.equals(socket['owner']['id'], path);
      request.response.close();
    });
    var client = new HttpClient();
    return client.get('localhost', server.port, '/')
        .then((request) => request.close())
        .then((response) => response.drain())
        .then((_) {
          // The connection should be idle now.
          var map = lookupServiceObject(getServicePath(server));
          Expect.equals(map['idle'].length, 1);
          Expect.listEquals(map['active'], []);
          return server.close();
        });

  });
}

void main() {
  final tests = [
    testHttpServer1(),
    testHttpServerConnection1(),
  ];

  asyncStart();
  // Run one test at a time.
  Future.forEach(tests, (f) => f)
      .then((_) {
        asyncEnd();
      });
}
// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io';

import "package:async_helper/async_helper.dart";
import "package:expect/expect.dart";

void testFromUri() {
  asyncStart();
  Directory originalWorkingDirectory = Directory.current;
  Directory.systemTemp.createTemp('dart_file').then((temp) {
    File target = new File(temp.path + '/target');
    target.createSync();

    String linkname = temp.path + '/from_uri';
    Uri linkUri = new Uri.file(lin


.gid1" overflow="visible"><path d="M480,-100 Q371,-100 279,-46 Q188,8 134,100 Q80,192 80,301 Q80,409 134,501 Q188,593 279,646 Q371,700 480,700 Q588,700 680,646 Q772,592 826,500 Q880,409 880,301 Q880,192 826,100 Q772,8 680,-46 Q588,-100 480,-100 Z M480,-15 Q565,-15 637,27 Q710,70 752,142 Q795,215 795,301 Q795,386 752,458 Q710,530 637,572 Q565,615 480,615 Q394,615 322,572 Q250,530 207,458 Q165,386 165,301 Q165,215 207,142 Q250,70 322,27 Q394,-15 480,-15 Z M707,342 L707,257 L253,257 L253,342 Z M523,73 L438,73 L437,527 L523,527 Z" /></symbol><use x="0" y="0" xlink:href="#OBSERVED/AVAR-1/250.gid1" /></svg>
    <svg version="1.1" viewBox="0 -200 960 1200"><symbol id="OBSERVED/AVAR-1/300.gid1" overflow="visible"><path d="M480,-100 Q371,-100 279,-46 Q188,8 134,100 Q80,192 80,301 Q80,409 134,501 Q188,593 279,646 Q371,700 480,700 Q588,700 680,646 Q772,592 826,500 Q880,409 880,301 Q880,192 826,100 Q772,8 680,-46 Q588,-100 480,-100 Z M480,-15 Q565,-15 637,27 Q710,70 752,142 Q795,215 795,301 Q795,386 752,458 Q710,530 637,572 Q565,615 480,615 Q394,615 322,572 Q250,530 207,458 Q165,386 165,301 Q165,215 207,142 Q250,70 322,27 Q394,-15 480,-15 Z M707,342 L707,257 L253,257 L253,342 Z M523,73 L438,73 L437,527 L523,527 Z" /></symbol><use x="0" y="0" xlink:href="#OBSERVED/AVAR-1/300.gid1" /></svg>
    <svg version="1.1" viewBox="0 -200 960 1200"><symbol id="OBSERVED/AVAR-1/350.gid1" overflow="visible"><path d="M480,-100 Q371,-100 279,-46 Q188,8 134,100 Q80,192 80,301 Q80,409 134,501 Q188,593 279,646 Q371,700 480,700 Q588,700 680,646 Q772,592 826,500 Q880,409 880,301 Q880,192 826,100 Q772,8 680,-46 Q588,-100 480,-100 Z M480,-15 Q565,-15 637,27 Q710,70 752,142 Q795,215 795,301 Q795,386 752,458 Q710,530 637,572 Q565,615 480,615 Q394,615 322,572 Q250,530 207,458 Q165,386 165,301 Q165,215 207,142 Q250,70 322,27 Q394,-15 480,-15 Z M707,342 L707,257 L253,257 L253,342 Z M523,73 L438,73 L437,527 L523,527 Z" /></symbol><use x="0" y="0" xlink:href="#OBSERVED/AVAR-1/350.gid1" /></svg>
    <svg version="1.1" viewBox="0 -200 960 1200"><symbol id="OBSERVED/AVAR-1/400.gid1" overflow="visible"><path d="M480,-100 Q371,-100 279,-46 Q188,8 134,100 Q80,


import itertools
import pandas as pd

def generate_variants(finish, color_atr, attributes, categories):
    """
    Generate all possible combinations of product variants based on given attribute lists.
    """
    category_lists = {
        'Finish': finish,
        'Color': color_atr,
        'Attributes': attributes,
        'Sizes': categories.get('sizes', []),
        'Voltages': categories.get('voltages', []),
        'Angles': categories.get('angles', []),
        'Temperatures': categories.get('temperatures', []),
        'Numbers': categories.get('numbers', []),
        'Words': categories.get('words', []),
        'Others': categories.get('others', [])
    }

    # Remove empty lists to avoid unnecessary combinations
    valid_categories = {key: values for key, values in category_lists.items() if values}

    # Generate all possible combinations
    all_combinations = list(itertools.product(*valid_categories.values()))

    # Convert combinations into a list of dictionaries for DataFrame
    variant_data = [dict(zip(valid_categories.keys(), combination)) for combination in all_combinations]

    return variant_data

def save_variants_to_excel(variants, output_file):
    """
    Save the generated variants to an Excel file.
    """
    df = pd.DataFrame(variants)
    df.to_excel(output_file, index=False)
    print(f"Variants saved to {output_file}")

# Example Data (Replace with actual scraped data)
finish = ["Matte", "Glossy"]
color_atr = ["Red", "Blue"]
attributes = ["Waterproof", "Scratch-resistant"]
categories = {
    'sizes': ["Small", "Medium", "Large"],
    'voltages': ["110V", "220V"],
    'angles': ["45°", "90°"],
    'temperatures': ["Hot", "Cold"],
    'numbers': ["One", "Two"],
    'words': ["Lightweight", "Durable"],
    'others': ["Special Edition"]
}

# Generate and save variants
variants = generate_variants(finish, color_atr, attributes, categories)
save_variants_to_excel(variants, "product_variants.xlsx")


enantBucket)
			defer stopFunc()

			now := time.Now()

			// write a batch for now
			batch := local.NewWriteBatch()
			testutil.AddRecordsToBatch(batch, table.name, 0, 10)
			require.NoError(t, table.write(user.InjectOrgID(context.Background(), userID), now, batch.(*local.BoltWriteBatch).Writes[table.name]))

			// handover indexes from the table
			require.NoError(t, table.HandoverIndexesToShipper(true))
			require.Len(t, table.dbs, 0)
			require.Len(t, table.dbSnapshots, 0)

			// check that shipper has the data we handed over
			indexShipper := table.indexShipper.(*mockIndexShipper)
			require.Len(t, indexShipper.addedIndexes[table.name], 1)

			testutil.VerifyIndexes(t, userID, []index.Query{{TableName: table.name}},
				func(ctx context.Context, _ string, callback func(b *bbolt.DB) error) error {
					return indexShipper.ForEach(ctx, table.name, "", func(_ bool, index shipperindex.Index) error {
						return callback(index.(*IndexFile).GetBoltDB())
					})
				},
				0, 10)

			// write a batch to another shard
			batch = local.NewWriteBatch()
			testutil.AddRecordsToBatch(batch, table.name, 10, 10)
			require.NoError(t, table.write(user.InjectOrgID(context.Background(), userID), now.Add(ShardDBsByDuration), batch.(*local.BoltWriteBatch).Writes[table.name]))

			// handover indexes from the table
			require.NoError(t, table.HandoverIndexesToShipper(true))
			require.Len(t, table.dbs, 0)
			require.Len(t, table.dbSnapshots, 0)

			// check that shipper got the new data we handed over
			require.Len(t, indexShipper.addedIndexes[table.name], 2)
			testutil.VerifyIndexes(t, userID, []index.Query{{TableName: table.name}},
				func(ctx context.Context, _ string, callback func(b *bbolt.DB) error) error {
					return indexShipper.ForEach(ctx, table.name, "", func(_ bool, index shipperindex.Index) error {
						return callback(index.(*IndexFile).GetBoltDB())
					})
				},
				0, 20)
		})
	}
}

func Test_LoadBoltDBsFromDir(t *testing.T) {
	indexPath := t.TempDir()

	// setup some dbs with a snapshot file.
	tablePath := testutil.SetupDBsAtPath(t, filepath.Join(indexPath, "test-table"), map[string]testutil.DBConfig{
		"db1": {
			DBRecords: testutil.DBRecords{
				Start:      0,
				NumRecords: 10,
			},
		},
		"db1" + TempFileSuffix: { // a snapshot file which should be ignored.
			DBRecords: testutil.DBRecords{
				Start:      0,
				NumRecords: 10,
			},
		},
		"db2": {
			DBRecords: testutil.DBRecords{
				Start:      10,
				NumRecords: 10,
			},
		},
	}, nil)

	// create a boltdb file without bucket which should get removed
	db, err := local.OpenBoltdbFile(filepath.Join(tablePath, "no-bucket"))
	require.NoError(t, err)
	require.NoError(t, db.Close())

	// try loading the dbs
	dbs, err := loadBoltDBsFromDir(tablePath, newTableManagerMetrics(nil))
	require.NoError(t, err)

	// check that we have just 2 dbs
	require.Len(t, dbs, 2)
	require.NotNil(t, dbs["db1"])
	require.NotNil(t, dbs["db


8 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z"></path></svg>','fa-solid-toilet-paper-slash': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512" width="25" height="20"><path d="M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z"></path></svg>','fa-solid-toilet-paper': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="22.5" height="20"><path d="M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z"></path></svg>','fa-solid-toilet': '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" width="15" height="20"><path d="M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.


width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3E newline %3C/title%3E%3Cg fill=%22%23fff%22%3E%3Cpath d=%22M17 4v6H7V6l-6 5 6 5v-4h12V4z%22/%3E%3C/g%3E%3C/svg%3E")}.oo-ui-image-progressive.oo-ui-icon-newline,.mw-ui-icon-newline-progressive:before{background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3E newline %3C/title%3E%3Cg fill=%22%2336c%22%3E%3Cpath d=%22M17 4v6H7V6l-6 5 6 5v-4h12V4z%22/%3E%3C/g%3E%3C/svg%3E")}.oo-ui-icon-noWikiText,.mw-ui-icon-noWikiText:before{background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3E no WikiText %3C/title%3E%3Cpath d=%22M16 3v2h1v10l2 2V3zM9 5V3H5l2 2zM1 1 0 2l1 1v14h3v-2H3V5l2 2v10h4v-2H7V9l6 6h-2v2h4l3 3 1-1zm12 10 2 2V3h-4v2h2z%22/%3E%3C/svg%3E")}.oo-ui-image-invert.oo-ui-icon-noWikiText,.mw-ui-icon-noWikiText-invert:before{background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3E no WikiText %3C/title%3E%3Cg fill=%22%23fff%22%3E%3Cpath d=%22M16 3v2h1v10l2 2V3zM9 5V3H5l2 2zM1 1 0 2l1 1v14h3v-2H3V5l2 2v10h4v-2H7V9l6 6h-2v2h4l3 3 1-1zm12 10 2 2V3h-4v2h2z%22/%3E%3C/g%3E%3C/svg%3E")}.oo-ui-image-progressive.oo-ui-icon-noWikiText,.mw-ui-icon-noWikiText-progressive:before{background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3E no WikiText %3C/title%3E%3Cg fill=%22%2336c%22%3E%3Cpath d=%22M16 3v2h1v10l2 2V3zM9 5V3H5l2 2zM1 1 0 2l1 1v14h3v-2H3V5l2 2v10h4v-2H7V9l6 6h-2v2h4l3 3 1-1zm12 10 2 2V3h-4v2h2z%22/%3E%3C/g%3E%3C


-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
  test %I% %E%
  @bug 6315717
  @summary presses buttons in all permutations and verifies modifiers
  @author Andrei Dmitriev : area=awt.mouse
  @run main ModifierPermutation
 */
//package modifierpermutation;

/*
The test will try to press-release every button present on the mouse in different order.
Here are some abbreviations:
 BUTTON1 press = P1
 BUTTON2 press = P2 etc.
 BUTTON1 release = R1
 BUTTON2 release = R2 etc.
Only sequences alike below are possible : <P1, P2, R2, R1>.
Sequences like <P1, P2, R1, R2> will not be covered by this test due to its probable complexity.
 */

import java.awt.*;
import sun.awt.SunToolkit;
import java.awt.event.*;
import java.util.Arrays;

public class ModifierPermutation {
    static boolean failed = false;
    final static int BUTTONSNUMBER = MouseInfo.getNumberOfButtons();

/*
 * Because of some problems with BUTTONx_MASK
 * (they are not ordered. Instead, their values are: 16 8 4)
 * We have to use array [1..n] and make every permutation on its
 * containment. After each permutation, make the same thing with
 * array of buttons and array of expected modifiers.
 */
    static SunToolkit st = (SunToolkit)(Toolkit.getDefaultToolkit());
    //all button masks
    static int [] mouseButtons = new int [BUTTONSNUMBER]; //BUTTONx_MASK
    static int [] mouseButtonsDown = new int [BUTTONSNUMBER]; //BUTTONx_DOWN_MASK

    //used to store mouse buttons sequences to press/to release
    static int [] affectedButtonsToPressRelease;
//    static int [] buttonsToRelease;
//    static int [] modifiersToVerifyOnPressRelease;

    static Robot robot;
    static CheckingAdapter adapterTest1;
    static Frame f;

    static {
        for (int i = 0; i < BUTTONSNUMBER; i++){
            mouseButtons[i] = InputEvent.getMaskForButton(i+1); //then change first three elements here to BUTTONx_MASK
            mouseButtonsDown[i] = InputEvent.getMaskForButton(i+1);
        }
        //mouseButtons initially has following values : 16 8 4.
/*        mouseButtons[0] = InputEvent.BUTTON1_MASK;
        mouseButtons[1] = InputEvent.BUTTON2_MASK;
        mouseButtons[2] = InputEvent.BUTTON3_MASK;
 */
    }

    public static void main(String s[]){
        init();

        try {
            robot = new Robot();
        } catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("Test failed.", e);
        }
        robot.delay(500);
        robot.mouseMove(f.getLocationOnScreen().x + f.getWidth()/2, f.getLocationOnScreen().y + f.getHeight()/2);
        robot.delay(500);
        //Top limit is the factorial of the number of existing buttons
        for (int k = 0; k < factorial(mouseButtons.length)-1; k++){
            //now we will press 2 up to maximum buttons and release them in different order and listen for
            // PRESSED events and check it's ExModifiers
            for (int buttonsToPressNumber = 2; buttonsToPressNumber <= BUTTONSNUMBER; buttonsToPressNumber++ ){
                System.out.println(">>>");

                //Now get the slice of affected buttons
                affectedButtonsToPressRelease = Arrays.copyOf(mouseButtons, buttonsToPressNumber);
//                modifiersToVerifyOnPressRelease = Arrays.copyOf(mouseButtons, buttonsToPressNumber);

                //Now press all these buttons in the order as they are in array affectedButtonsToPressRelease
                //And release all these buttons in back order.

                dumpArray("Affected Buttons ", affectedButtonsToPressRelease);
                pr


 parfaite",
[52158] = "Pierre de nuit du gardien parfaite",
[52159] = "Pierre de nuit intemporelle parfaite",
[52160] = "Pierre de nuit du défenseur parfaite",
[52161] = "Pierre de nuit changeante parfaite",
[52162] = "Pierre de nuit souveraine parfaite",
[52163] = "Alicite cassée parfaite",
[52164] = "Alicite rapide parfaite",
[52165] = "Alicite mystique parfaite",
[52166] = "Alicite lisse parfaite",
[52167] = "Alicite subtile parfaite",
[52168] = "Zéphyrite rigide parfaite",
[52169] = "Zéphyrite orageuse parfaite",
[52170] = "Zéphyrite étincelante parfaite",
[52171] = "Zéphyrite solide parfaite",
[52172] = "Cornaline précise parfaite",
[52173] = "Cornaline brillante parfaite",
[52174] = "Cornaline miroitante parfaite",
[52175] = "Cornaline délicate parfaite",
[52176] = "Cornaline soutenue parfaite",
[52177] = "Cornaline",
[52178] = "Zéphyrite",
[52179] = "Alicite",
[52180] = "Pierre de nuit",
[52181] = "Hessonite",
[52182] = "Jaspe",
[52183] = "Minerai de pyrite",
[52184] = "Minerai de fer noir",
[52185] = "Minerai d'élémentium",
[52186] = "Barre d'élémentium",
[52187] = "Barre de fer noir",
[52188] = "Monture de joaillier",
[52189] = "Sapta élémentaire",
[52190] = "Rubis du feu d'enfer",
[52191] = "Saphir océan",
[52192] = "Emeraude de rêve",
[52193] = "Topaze de braise",
[52194] = "Oeil de démon",
[52195] = "Ambréine",
[52196] = "Oeil de chimère",
[52197] = "Figurine de panthère démoniaque",
[52198] = "Steak de groin-tempête frais",
[52199] = "Figurine de panthère démoniaque",
[52200] = "Rênes de destrier de la mort cramoisi",
[52201] = "Faveur de Muradin",
[52202] = "Sapta élémentaire",
[52203] = "Oeil de démon fiable",
[52204] = "Topaze de braise adepte",
[52205] = "Topaze de braise artistique",
[52206] = "Rubis du feu d'enfer soutenu",
[52207] = "Rubis du feu d'enfer brillant",
[52208] = "Topaze de braise téméraire",
[52209] = "Topaze de braise mortelle",
[52210] = "Oeil de démon de défenseur",
[52211] = "Topaze de braise adroite",
[52212] = "Rubis du feu d'enfer délicat",
[52213] = "Oeil de démon gravé",
[52214] = "Topaze de braise féroce",
[52215] = "Topaze de braise raffinée",
[52216] = "Rubis du feu d'enfer miroitant",
[52217] = "Oeil de démon voilé",
[52218] = "Emeraude de rêve énergique",
[52219] = "Ambréine cassée",


.m_unread_marker == ((int)JPEG_MARKER.RST0 + ((desired + 2) & 7)))
                    {
                        /* one of the next two expected restarts */
                        action = 3;
                    }
                    else if (cinfo.m_unread_marker == ((int)JPEG_MARKER.RST0 + ((desired - 1) & 7)) ||
                        cinfo.m_unread_marker == ((int)JPEG_MARKER.RST0 + ((desired - 2) & 7)))
                    {
                        /* a prior restart, so advance */
                        action = 2;
                    }
                    else
                    {
                        /* desired restart or too far away */
                        action = 1;
                    }
                }

                cinfo.TRACEMS(4, J_MESSAGE_CODE.JTRC_RECOVERY_ACTION, cinfo.m_unread_marker, action);

                switch (action)
                {
                    case 1:
                        /* Discard marker and let entropy decoder resume processing. */
                        cinfo.m_unread_marker = 0;
                        return true;
                    case 2:
                        /* Scan to the next marker, and repeat the decision loop. */
                        if (!cinfo.m_marker.next_marker())
                            return false;
                        break;
                    case 3:
                        /* Return without advancing past this marker. */
                        /* Entropy decoder will be forced to process an empty segment. */
                        return true;
                }
            }
        }

        /// <summary>
        /// Terminate source - called by jpeg_finish_decompress
        /// after all data has been read.  Often a no-op.
        /// </summary>
        /// <remarks>NB: <b>not</b> called by jpeg_abort or jpeg_destroy; surrounding
        /// application must deal with any cleanup that should happen even
        /// for error exit.</remarks>
        public virtual void term_source()
        {
        }

        /// <summary>
        /// Reads two bytes interpreted as an unsigned 16-bit integer.
        /// </summary>
        /// <param name="V">The result.</param>
        /// <returns><c>true</c> if operation succeed; otherwise, <c>false</c></returns>
        public virtual bool GetTwoBytes(out int V)
        {
            if (!MakeByteAvailable())


S_XAX_SLOT));
            DOLOG(2, LOG_CLEANCALL, {
                char disas_arg[MAX_OPND_DIS_SZ];
                opnd_disassemble_to_buffer(dcontext, arg, disas_arg,
                                           BUFFER_SIZE_ELEMENTS(disas_arg));
                LOG(THREAD, LOG_CLEANCALL, 2,
                    "CLEANCALL: passing arg %s using spill reg %s to callee " PFX " "
                    "requires extra spills, consider using a different register.\n",
                    disas_arg, reg_names[ci->spill_reg], ci->start);
            });
            restored_spill_reg = true;
        }
    }

    LOG(THREAD, LOG_CLEANCALL, 2,
        "CLEANCALL: inlining clean call " PFX ", passing arg via reg %s.\n", ci->start,
        reg_names[regparm]);
    if (opnd_is_immed_int(arg)) {
        PRE(ilist, where, INSTR_CREATE_mov_imm(dcontext, opnd_create_reg(regparm), arg));
    } else {
        PRE(ilist, where, INSTR_CREATE_mov_ld(dcontext, opnd_create_reg(regparm), arg));
    }

    /* Put the unprotected_context_t pointer back in spill_reg if we needed to
     * restore the app value.
     */
    if (restored_spill_reg) {
        insert_get_mcontext_base(dcontext, ilist, where, ci->spill_reg);
    }

#ifndef X64
    ASSERT(!cci->reg_skip[0]);
    /* Move xax to the scratch slot of the local.  We only allow at most one
     * local stack access, so the callee either does not use the argument, or
     * the local stack access is the arg.
     */
    LOG(THREAD, LOG_CLEANCALL, 2,
        "CLEANCALL: inlining clean call " PFX ", passing arg via slot.\n", ci->start);
    PRE(ilist, where,
        INSTR_CREATE_mov_st(dcontext, callee_info_slot_opnd(ci, SLOT_LOCAL, 0),
                            opnd_create_reg(DR_REG_XAX)));
#endif
}

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


ntrollers into m_tag
		{
			int index = 0;
			int i;
			for (i = 0; i < colWorld.getCollisionObjectArray().size(); i++) {
				CollisionObject collisionObject = colWorld.getCollisionObjectArray().get(i);
				collisionObject.setIslandTag(index);
				collisionObject.setCompanionId(-1);
				collisionObject.setHitFraction(1f);
				index++;
			}
		}
		// do the union find

		findUnions(dispatcher, colWorld);
	}

	/**
	 * Store island activation state.
	 *
	 * @param colWorld the col world
	 */
	public void storeIslandActivationState(final CollisionWorld colWorld) {
		// put the islandId ('find' value) into m_tag
		{
			int index = 0;
			int i;
			for (i = 0; i < colWorld.getCollisionObjectArray().size(); i++) {
				CollisionObject collisionObject = colWorld.getCollisionObjectArray().get(i);
				if (!collisionObject.isStaticOrKinematicObject()) {
					collisionObject.setIslandTag(unionFind.find(index));
					collisionObject.setCompanionId(-1);
				} else {
					collisionObject.setIslandTag(-1);
					collisionObject.setCompanionId(-2);
				}
				index++;
			}
		}
	}

	/**
	 * Builds the islands.
	 *
	 * @param dispatcher the dispatcher
	 * @param collisionObjects the collision objects
	 */
	public void buildIslands(final Dispatcher dispatcher, final List<CollisionObject> collisionObjects) {
		islandmanifold.clear();

		// we are going to sort the unionfind array, and store the element id in
		// the size
		// afterwards, we clean unionfind, to make sure no-one uses it anymore

		getUnionFind().sortIslands();
		int numElem = getUnionFind().getNumElements();

		int endIslandIndex = 1;
		int startIslandIndex;

		// update the sleeping state for bodies, if all are sleeping
		for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex) {
			int islandId = getUnionFind().getElement(startIslandIndex).id;
			for (endIslandIndex = startIslandIndex + 1; endIslandIndex < numElem
					&& getUnionFind().getElement(endIslandIndex).id == islandId; endIslandIndex++) {}

			// int numSleeping = 0;

			boolean allSleeping = true;

			int idx;
			for (idx = startIslandIndex; idx < endIslandIndex; idx++) {
				int i = getUnionFind().getElement(idx).sz;

				CollisionObject colObj0 = collisionObjects.get(i);
				if (colObj0.getIslandTag() != islandId && colObj0.getIslandTag() != -1) {
					// System.err.println("error in island management\n");
				}

				assert colObj0.getIslandTag() == islandId || colObj0.getIslandTag() == -1;
				if (colObj0.getIslandTag() == islandId) {
					if (colObj0.getActivationState() == CollisionObject.ACTIVE_TAG) { allSleeping = false; }
					if (colObj0.getActivationState() == CollisionObject.DISABLE_DEACTIVATION) { allSleeping = false; }
				}
			}

			if (allSleeping) {
				// int idx;
				for (idx = startIslandIndex; idx < endIslandIndex; idx++) {
					int i = getUnionFind().getElement(idx).sz;
					CollisionObject colObj0 = collisionObjects.get(i);
					if (colObj0.getIslandTag() != islandId && colObj0.getIslandTag() != -1) {
						// System.err.println("error in island management\n");
					}

					assert colObj0.getIslandTag() == islandId || colObj0.getIslandTag() == -1;

					if (colObj0.getIslandTag() == islandId) {
						colObj0.setActivationState(CollisionObject.ISLAND_SLEEPING);
					}
				}
			} else {

				// int idx;
				for (idx = startIs


urn true
  end
  if (#words <= 0) then
    nocost = not nocost
  else
    nocost = (words[1] == '1')
  end
  Spring.Echo('LuaRules nocost is ' .. ((nocost and 'enabled') or 'disabled'))
  return true
end

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

function gadget:Initialize()
  -- Only for synced
  if ((not gadgetHandler:IsSyncedCode()) or
      (Script.GetName() ~= 'LuaRules')) then
    gadgetHandler:RemoveGadget()
    return
  end
  local cmd, help

  cmd  = "nc"
  help = " [0|1]:  reversible nocost  (requires cheating)"
  gadgetHandler:AddChatAction(cmd, NoCost, help)
  Script.AddActionFallback(cmd .. ' ', help)
end

function gadget:Shutdown()
  gadgetHandler:RemoveChatAction('nocost')
end

function gadget:UnitCreated(unitID, unitDefID, unitTeam)
  if (nocost) then
    Spring.SetUnitCosts(unitID, {
      buildTime  = 1,
      metalCost  = 1,
      energyCost = 1
    })
  end
end

function gadget:UnitFinished(unitID, unitDefID, unitTeam)
  if (nocost) then
    local ud = UnitDefs[unitDefID]
    if (ud) then
      Spring.SetUnitCosts(unitID, {
        buildTime  = ud.buildTime,
        metalCost  = ud.metalCost,
        energyCost = ud.energyCost
      })
    end
  end
end

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------


Ribbon--RibbonPage:focus {
  outline: none;
}

QxRibbon--RibbonPage {
  background-color: #404244;
}

/*RibbonGroup*/

QxRibbon--RibbonGroup {
  background-color: #404244;
  border: 0px;
}

QxRibbon--RibbonGroup QAbstractButton {
  background-color: #404244;
  padding: 0px;
}

/*RibbonGroupOptionButton*/

QxRibbon--RibbonGroupOptionButton {
  border: 1px solid transparent;
  background-color: #404244;
  padding: 0px;
}

QxRibbon--RibbonGroupOptionButton:focus {
  color: #ffffff;
  border: 1px solid #456DA4;
  background-color: #456DA4;
}

QxRibbon--RibbonGroupOptionButton:pressed,
QxRibbon--RibbonGroupOptionButton:checked {
  border: 1px solid #456DA4;
  background-color: #456DA4;
}

QxRibbon--RibbonGroupOptionButton:hover {
  color: #ffffff;
  border: 1px solid #595b5d;
  background-color: #595b5d;
}

QxRibbon--RibbonGroupOptionButton {
  qproperty-icon: url(:/qxribbon/res/lighter/group_option.png);
}

/*RibbonGallery*/

QxRibbon--RibbonGallery {
  border: 1px solid #303030;
  background-color: transparent;
}

/*RibbonGalleryGroup*/

QxRibbon--RibbonGalleryGroup {
  show-decoration-selected: 1;
  background-color: transparent;
  border: 1px solid #303030;
}

QxRibbon--RibbonGalleryGroup::item:selected {
  color: #ffffff;
  background-color: #456DA4;
}

QxRibbon--RibbonGalleryGroup::item:hover {
  border: 1px solid #303030;
  background-color: #595b5d;
}

/*RibbonGalleryViewport*/

QxRibbon--RibbonGalleryViewport {
  background-color: #404244;
}

/*RibbonButtonGroup*/

QxRibbon--RibbonButtonGroup {
  background-color: transparent;
}

QxRibbon--RibbonButtonGroup QAbstractButton,
QxRibbon--RibbonButtonGroup QMenu {
  background-color: #404244;
}

QxRibbon--RibbonStackedWidget QxRibbon--RibbonButtonGroup QAbstractButton {
  background-color: #404244;
}

QxRibbon--RibbonButtonGroup QAbstractButton {
  padding: 0px;
}

QxRibbon--RibbonGroup > QxRibbon--RibbonButtonGroup {
  border: 1pt solid #303030;
}

QxRibbon--RibbonButtonGroup#qx_RibbonButtonGroup QLineEdit {
  background-color: #404244;
}

/*RibbonQuickAccessBar*/

QWidget#qx_RibbonQuickAccessBar QLabel {
  background-color: transparent;
}

QxRibbon--RibbonQuickAccessBar {
  background-color: transparent;
}

QxRibbon--RibbonQuickAccessBar {
  border: none;
  background: transparent;
}

QxRibbon--RibbonQuickAccessBar QToolButton {
  width: 20px;
  height: 20px;
}

QxRibbon--RibbonQuickAccessBar QAbstractButton {
  padding: 0px;
}

QxRibbon--RibbonQuickAccessButton {
  width: 22px;
  qproperty-i


annot get xcb connection\n");
	#endif // SWALLOW_PATCH
	checkotherwm();
	#if XRESOURCES_PATCH || XRDB_PATCH
	XrmInitialize();
	load_xresources();
	#endif // XRESOURCES_PATCH | XRDB_PATCH
	#if COOL_AUTOSTART_PATCH
	autostart_exec();
	#endif // COOL_AUTOSTART_PATCH
	setup();
#ifdef __OpenBSD__
	#if SWALLOW_PATCH
	if (pledge("stdio rpath proc exec ps", NULL) == -1)
	#else
	if (pledge("stdio rpath proc exec", NULL) == -1)
	#endif // SWALLOW_PATCH
		die("pledge");
#endif /* __OpenBSD__ */
	scan();
	#if AUTOSTART_PATCH
	runautostart();
	#endif
	run();
	cleanup();
	XCloseDisplay(dpy);
	#if RESTARTSIG_PATCH
	if (restart)
		execvp(argv[0], argv);
	#endif // RESTARTSIG_PATCH
	return EXIT_SUCCESS;
}


 SPACING SCALE (8pt grid) === */
    --space-xs: 4px;      /* 0.25rem */
    --space-sm: 8px;      /* 0.5rem */
    --space-md: 16px;     /* 1rem */
    --space-lg: 24px;     /* 1.5rem */
    --space-xl: 32px;     /* 2rem */
    --space-2xl: 48px;    /* 3rem */
    --space-3xl: 64px;    /* 4rem */

    /* === TYPOGRAPHY SCALE === */
    --font-size-xs: 0.75rem;    /* 12px */
    --font-size-sm: 0.875rem;   /* 14px */
    --font-size-base: 1rem;     /* 16px */
    --font-size-lg: 1.125rem;   /* 18px */
    --font-size-xl: 1.25rem;    /* 20px */
    --font-size-2xl: 1.5rem;    /* 24px */
    --font-size-3xl: 1.875rem;  /* 30px */
    --font-size-4xl: 2.25rem;   /* 36px */

    --font-weight-normal: 400;
    --font-weight-medium: 500;
    --font-weight-semibold: 600;
    --font-weight-bold: 700;

    --line-height-tight: 1.25;
    --line-height-normal: 1.5;
    --line-height-relaxed: 1.75;

    /* === COLOR SYSTEM === */
    --primary-50: #f0f4ff;
    --primary-100: #e0e7ff;
    --primary-500: #667eea;
    --primary-600: #5a67d8;
    --primary-700: #4c51bf;
    --primary-900: #2d3748;

    --secondary-50: #f0fdfa;
    --secondary-100: #ccfbf1;
    --secondary-500: #14b8a6;
    --secondary-600: #0d9488;
    --secondary-700: #0f766e;

    --success-50: #f0fdf4;
    --success-500: #22c55e;
    --success-600: #16a34a;

    --warning-50: #fffbeb;
    --warning-500: #f59e0b;
    --warning-600: #d97706;

    --error-50: #fef2f2;
    --error-500: #ef4444;
    --error-600: #dc2626;

    --gray-50: #f9fafb;
    --gray-100: #f3f4f6;
    --gray-200: #e5e7eb;
    --gray-300: #d1d5db;
    --gray-400: #9ca3af;
    --gray-500: #6b7280;
    --gray-600: #4b5563;
    --gray-700: #374151;
    --gray-800: #1f2937;
    --gray-900: #111827;

    /* === GRADIENTS === */
    --primary-gradient: linear-gradient(135deg, var(--primary-500) 0%, var(--primary-700) 100%);
    --secondary-gradient: linear-gradient(135deg, var(--secondary-500) 0%, var(--secondary-600) 100%);
    --success-gradient: linear-gradient(135deg, var(--success-500) 0%, var(--success-600) 100%);
    --warning-gradient: linear-gradient(135deg, var(--warning-500) 0%, var(--warning-600) 100%);
    --error-gradient: linear-gradient(135deg, var(--error-500) 0%, var(--error-600) 100%);

    /* === SEMANTIC COLORS === */
    --text-primary: var(--gray-900);
    --text-secondary: var(--gray-600);
    --text-mute


(const MachineBasicBlock *MBB,
                                       ArrayRef<SlotIndex> Defs,
                                       const SlotIndexes &Indexes) {
  const MachineFunction &MF = *MBB->getParent();
  BitVector DefBlocks(MF.getNumBlockIDs());
  for (SlotIndex I : Defs)
    DefBlocks.set(Indexes.getMBBFromIndex(I)->getNumber());

  SetVector<unsigned> PredQueue;
  PredQueue.insert(MBB->getNumber());
  for (unsigned i = 0; i != PredQueue.size(); ++i) {
    unsigned BN = PredQueue[i];
    if (DefBlocks[BN])
      return true;
    const MachineBasicBlock *B = MF.getBlockNumbered(BN);
    for (const MachineBasicBlock *P : B->predecessors())
      PredQueue.insert(P->getNumber());
  }
  return false;
}
//===- ShrinkWrap.cpp - Compute safe point for prolog/epilog insertion ----===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This pass looks for safe point where the prologue and epilogue can be
// inserted.
// The safe point for the prologue (resp. epilogue) is called Save
// (resp. Restore).
// A point is safe for prologue (resp. epilogue) if and only if
// it 1) dominates (resp. post-dominates) all the frame related operations and
// between 2) two executions of the Save (resp. Restore) point there is an
// execution of the Restore (resp. Save) point.
//
// For instance, the following points are safe:
// for (int i = 0; i < 10; ++i) {
//   Save
//   ...
//   Restore
// }
// Indeed, the execution looks like Save -> Restore -> Save -> Restore ...
// And the following points are not:
// for (int i = 0; i < 10; ++i) {
//   Save
//   ...
// }
// for (int i = 0; i < 10; ++i) {
//   ...
//   Restore
// }
// Indeed, the execution looks like Save -> Save -> ... -> Restore -> Restore.
//
// This pass also ensures that the safe points are 3) cheaper than the regular
// entry and exits blocks.
//
// Property #1 is ensured via the use of MachineDominatorTree and
// MachinePostDominatorTree.
// Property #2 is ensured via property #1 and MachineLoopInfo, i.e., both
// points must be in the same loop.
// Property #3 is ensured via the MachineBlockFrequencyInfo.
//
// If this pass found points matching all these properties, then
// MachineFrameInfo is updated with this information.
//
//===----------------------------------------------------------------------===//

#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/CFG.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
#include "llvm/CodeGen/MachinePostDominators.h"
#include "llvm/CodeGen/RegisterClassInfo.h"
#include "llvm/CodeGen/RegisterScavenging.h"
#include "


�告"

            val intent = Intent(Intent.ACTION_SEND).apply {
                type = "image/png"
                putExtra(Intent.EXTRA_STREAM, uri)
                putExtra(Intent.EXTRA_TEXT, shareText)
                addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            }

            val chooserIntent =
                Intent.createChooser(intent, getString(R.string.analysis_share_title))

            // 为Intent Chooser中的所有可能的接收应用授予URI权限
            val packageManager = requireContext().packageManager
            val resInfoList = packageManager.queryIntentActivities(intent, 0)

            for (resolveInfo in resInfoList) {
                val packageName = resolveInfo.activityInfo.packageName
                requireContext().grantUriPermission(
                    packageName,
                    uri,
                    Intent.FLAG_GRANT_READ_URI_PERMISSION
                )
            }

            startActivity(chooserIntent)

        } catch (e: Exception) {
            Logger.e("分享图片失败", e)
            ToastUtils.error(getString(R.string.analysis_share_failed))
        }
    }

    /**
     * 获取应用logo的base64编码
     */
    private fun getAppLogoBase64(): String {
        return try {
            // 获取应用logo drawable
            val drawable = requireContext().getDrawable(R.mipmap.ic_launcher)
            if (drawable != null) {
                // 转换为bitmap
                val bitmap = if (drawable is android.graphics.drawable.BitmapDrawable) {
                    drawable.bitmap
                } else {
                    val width = drawable.intrinsicWidth.takeIf { it > 0 } ?: 48
                    val height = drawable.intrinsicHeight.takeIf { it > 0 } ?: 48
                    val bitmap = createBitmap(width, height)

                    val canvas = Canvas(bitmap)
                    drawable.setBounds(0, 0, canvas.width, canvas.height)
                    drawable.draw(canvas)
                    bitmap
                }

                // 转换为base64
                val outputStream = ByteArrayOutputStream()
                bitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, outputStream)
                val byteArray = outputStream.toByteArray()
                "data:image/png;base64," + Base64.encodeToString(byteArray, Base64.NO_WRAP)
            } else {
                "" // 如果获取失败，返回空字符串
            }
        } catch (e: Exception) {
            Logger.e("获取应用logo失败", e)
            "" // 出错时返回空字符串
        }
    }

    /**
     * 将AI生成的内容转换为HTML
     */
    private fun convertToHtml(content: String): String {
        val appName = getString(R.string.app_name)
        val logoBase64 = getAppLogoBase64()

        return """
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">

            <meta name="color-scheme" content="light dark">
            <style>

                :root {

                    --text-primary: #1f2937;          /* 浅色主文本（更稳的深灰） */
                    --text-secondary: #6b7280;        /* 浅色次文本 */
                }
                @media (prefers-color-scheme: dark) {
                    :root {

                        --text-primary: #e5e7eb;      /* 深色主文本（近 Gray-200） */
                        --text-secondary: #9ca3af;    /* 深色次文本（Gray-400） */
                    }


Id: 615015,
        symptoms: 'Sudden vision loss, eye pain, and redness.',
        diagnosis: 'Glaucoma',
        doctorInfo: 'Dr. Nancy Wilson - Specialized in Ophthalmology',
      ),
      PatientRecord(
        recordId: 16,
        patientId: 615016,
        symptoms: 'Episodes of unconsciousness and muscle spasms.',
        diagnosis: 'Epilepsy',
        doctorInfo: 'Dr. Alice Brown - Specialized in Neurology',
      ),
      PatientRecord(
        recordId: 17,
        patientId: 615017,
        symptoms:
            'Painful urination, lower abdominal pain, and frequent urge to urinate.',
        diagnosis: 'Urinary Tract Infection (UTI)',
        doctorInfo: 'Dr. Linda Martinez - Specialized in Psychiatry',
      ),
      PatientRecord(
        recordId: 18,
        patientId: 615018,
        symptoms:
            'Persistent dry mouth, difficulty swallowing, and joint pain.',
        diagnosis: "Sjogren's Syndrome",
        doctorInfo: 'Dr. Mary Jones - Specialized in Rheumatology',
      ),
      PatientRecord(
        recordId: 19,
        patientId: 615019,
        symptoms: 'Loss of balance, dizziness, and vision problems.',
        diagnosis: 'Multiple Sclerosis',
        doctorInfo: 'Dr. Alice Brown - Specialized in Neurology',
      ),
      PatientRecord(
        recordId: 20,
        patientId: 615020,
        symptoms: 'Persistent cough with blood, chest pain, and weight loss.',
        diagnosis: 'Tuberculosis',
        doctorInfo: 'Dr. John Smith - Specialized in Pulmonology',
      ),
    ];
  }

  @override
  void dispose() {
    isLoadingNotifier.dispose();
    super.dispose();
  }
}

class PatientRecord {
  PatientRecord({
    required this.recordId,
    required this.patientId,
    required this.symptoms,
    required this.diagnosis,
    required this.doctorInfo,
  });

  final int recordId;
  final int patientId;
  final String symptoms;
  final String diagnosis;
  final String doctorInfo;

  Map<String, dynamic> toJson() {
    return {
      'recordId': recordId,
      'patientId': patientId,
      'symptoms': symptoms,
      'diagnosis': diagnosis,
      'doctorInfo': doctorInfo,
    };
  }

  Object? operator [](Object? value) {
    switch (value) {
      case 'RecordID':
        return recordId;
      case 'PatientID':
        return patientId;
      case 'Symptoms':
        return symptoms;
      case 'Diagnosis':
        return diagnosis;
      case 'DoctorInfo':
        return doctorInfo;
      default:
        throw ArgumentError('Invalid property: $value');
    }
  }
}

class PatientDataSource extends DataGridSource {
  PatientDataSource({
    required this.patient,
    required this.isWebOrDesktop,
    required this.model,
  }) {
    _columns = _obtainColumns();
    _buildDataGridRows();
  }

  List<GridColumn> _columns = [];

  List<PatientRecord> patient;

  bool isWebOrDesktop;

  SampleModel model;

  List<DataGridRow> _patientData = [];

  @override
  List<DataGridRow> get rows => _patientData;

  @override
  DataGridRowAdapter buildRow(DataGridRow row) {
    return DataGridRowAdapter(
      cells: row.getCells().map<Widget>((e) {
        final columnAlignment =
            e.columnName == 'PatientID' || e.columnName == 'RecordID'
            ? Alignment.center
            : Alignment.centerLeft;
        return Container(
          alignment: columnAlignment,
          padding: const EdgeInsets.all(8.0),
          child: Text(e.value == null ? '' : e.value.toString()),
        );
      }).toList(),
    );
  }

  void _buildDataGridRows() {
    _patientData = patient.map<


.617-6.1055l35-35c3.2578-3.2773 5.0898-7.7148 5.0898-12.336 0-4.625-1.832-9.0586-5.0898-12.34l-35-35c-4.5078-3.8555-10.66-5.1719-16.348-3.4883-5.6875 1.6797-10.137 6.1289-11.816 11.816-1.6836 5.6914-0.37109 11.844 3.4883 16.348l5.0742 5.0742h-27.824v-69.824h87.5v35c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h35v157.5z"})),cog:w.exports.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},w.exports.createElement("path",{d:"M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2


| '{}')
}

export const storeLists = (lists: any) => {
  localStorage.setItem('LISTS', JSON.stringify(lists))
}
export class Student {
  // tslint:disable-next-line:variable-name
  private _id: number;
  // tslint:disable-next-line:variable-name
  private _name: string;
  // tslint:disable-next-line:variable-name
  private _gender: number;
  // tslint:disable-next-line:variable-name
  private _point: number;

  constructor(name: string, gender: number, point: number) {
    this._name = name;
    this._gender = gender;
    this._point = point;
  }

  get id(): number {
    return this._id;
  }

  set id(value: number) {
    this._id = value;
  }

  get name(): string {
    return this._name;
  }

  set name(value: string) {
    this._name = value;
  }

  get gender(): number {
    return this._gender;
  }

  set gender(value: number) {
    this._gender = value;
  }

  get point(): number {
    return this._point;
  }

  set point(value: number) {
    this._point = value;
  }

}
export class LabelAndLink {
Label: string;
HasLink: boolean;
constructor(
          label: string,
          hasLink: boolean){
            this.Label = label;
            this.HasLink = hasLink;
          }
}
namespace Vorlesung {
    export let abschluss = "Master";
    let note = 1.7;
    export let name = "Lorenz";
    let today = 2015;
    let birth = 1982;
    export let age = today - birth;
}

console.log(Vorlesung.name);
console.log(Vorlesung.age);import { Pipe, PipeTransform, ChangeDetectorRef, NgZone } from '@angular/core';

@Pipe({
  name: 'debounce',
  pure: false
})
export class DebouncePipe implements PipeTransform {

  private currentValue: any = null;
  private transformValue: any = null;
  private timeoutHandle: number = -1;

  constructor(
    public changeDetector: ChangeDetectorRef,
    private zone: NgZone,
  ) {}

  transform(value: any, debounceTime?: number): any {
    if (this.currentValue == null) {
      this.currentValue = value;
      return value;
    }
    if (this.currentValue === value) {
      // there is no value that needs debouncing at this point
      clearTimeout(this.timeoutHandle);
      return value;
    }
    if (this.transformValue !== value) {
      // there is a new value that needs to be debounced
      this.transformValue = value;
      clearTimeout(this.timeoutHandle);
      this.timeoutHandle = window.setTimeout(() => {
        this.zone.run(() => {
          this.currentValue = this.transformValue;
          this.transformValue = null;
          this.changeDetector.markForCheck();
        });
      }, typeof debounceTime === 'number' ? debounceTime : 500);
    }
    return this.currentValue;
  }

}

import {DataHandlerFactory} from "../data/data_handler_factory";
import {GrantHandlerProvider} from "../granttype/grant_handler_provider";
import {ClientCredentialFetcherProvider} from "../fetcher/clientcredential/client_credential_fetcher_provider";
import {Request} from "../models/request";
import {InvalidClient, InvalidRequest, OAuthError, UnsupportedGrantType} from "../exceptions/oauth_error";

/**
	 * This class has two properties: A status code and JSON string as the result
	 * of issuing a token.
	 *
	 * @author Yoichiro Tanaka
	 */
export class TokenEndpointResponse {

  private _code: number
  private _body: string

  /**
   * Initialize this instance with arguments passed.


CALL R3 2 1
  LOADK R4 K35 ["ReplyCountInner"]
  SETTABLEKS R4 R3 K5 ["Name"]
  LOADK R4 K6 [""]
  SETTABLEKS R4 R3 K7 ["Text"]
  GETIMPORT R4 K37 [Color3.fromHex]
  LOADK R5 K38 ["#008BDB"]
  CALL R4 1 1
  SETTABLEKS R4 R3 K12 ["BackgroundColor3"]
  GETIMPORT R4 K15 [UDim2.fromScale]
  LOADK R5 K39 [0.85]
  LOADK R6 K39 [0.85]
  CALL R4 2 1
  SETTABLEKS R4 R3 K18 ["Size"]
  GETIMPORT R4 K23 [Vector2.new]
  LOADK R5 K20 [0.5]
  LOADK R6 K20 [0.5]
  CALL R4 2 1
  SETTABLEKS R4 R3 K24 ["AnchorPoint"]
  GETIMPORT R4 K15 [UDim2.fromScale]
  LOADK R5 K20 [0.5]
  LOADK R6 K20 [0.5]
  CALL R4 2 1
  SETTABLEKS R4 R3 K21 ["Position"]
  GETIMPORT R4 K2 [Instance.new]
  LOADK R5 K3 ["TextLabel"]
  MOVE R6 R3
  CALL R4 2 1
  LOADK R5 K40 ["ReplyCountText"]
  SETTABLEKS R5 R4 K5 ["Name"]
  LOADN R5 1
  SETTABLEKS R5 R4 K8 ["BackgroundTransparency"]
  LOADK R6 K41 ["+%*"]
  GETTABLEKS R9 R0 K4 ["ReplyCount"]
  FASTCALL1 TOSTRING R9 [+2]
  GETIMPORT R8 K43 [tostring]
  CALL R8 1 1
  NAMECALL R6 R6 K44 ["format"]
  CALL R6 2 1
  MOVE R5 R6
  SETTABLEKS R5 R4 K7 ["Text"]
  GETIMPORT R5 K11 [Color3.fromRGB]
  LOADN R6 255
  LOADN R7 255
  LOADN R8 255
  CALL R5 3 1
  SETTABLEKS R5 R4 K45 ["TextColor3"]
  GETIMPORT R5 K48 [Enum.Font.SourceSansBold]
  SETTABLEKS R5 R4 K46 ["Font"]
  LOADB R5 1
  SETTABLEKS R5 R4 K49 ["TextScaled"]
  GETIMPORT R5 K23 [Vector2.new]
  LOADK R6 K20 [0.5]
  LOADK R7 K20 [0.5]
  CALL R5 2 1
  SETTABLEKS R5 R4 K24 ["AnchorPoint"]
  GETIMPORT R5 K15 [UDim2.fromScale]
  LOADK R6 K20 [0.5]
  LOADK R7 K20 [0.5]
  CALL R5 2 1
  SETTABLEKS R5 R4 K21 ["Position"]
  GETIMPORT R5 K15 [UDim2.fromScale]
  LOADK R6 K50 [0.6]
  LOADK R7 K50 [0.6]
  CALL R5 2 1
  SETTABLEKS R5 R4 K18 ["Size"]
  GETIMPORT R5 K2 [Instance.new]
  LOADK R6 K31 ["UICorner"]
  MOVE R7 R3
  CALL R5 2 1
  MOVE R2 R5
  GETIMPORT R5 K33 [UDim.new]
  LOADN R6 1
  LOADN R7 0
  CALL R5 2 1
  SETTABLEKS R5 R2 K34 ["CornerRadius"]
  RETURN R1 1

PROTO_15:
  LOADK R5 K0 ["ReplyCount"]
  LOADB R6 1
  NAMECALL R3 R1 K1 ["FindFirstChild"]
  CALL R3 3 1
  JUMPIFEQKNIL R3 [+2]
  LOADB R2 0 +1
  LOADB R2 1
  GETTABLEKS R3 R0 K0 ["ReplyCount"]
  JUMPIFNOTEQKN R3 K2 [0] [+


tance > gr.shortestDistance(chair.offset)) {
          _distance = gr.shortestDistance(chair.offset);
          index = _newGrs.indexOf(gr);
        }
      }
      if (index != -1) _newGrs[index].addChild(chair.offset, true);
    }

    setState(() => this._groups = _newGrs);
  }

  itemDragUpdate(model.Object object) {
    model.Group _g = _groups.firstWhere(
        (g) => g.allChild().indexWhere((o) => o.id == object.id) != -1,
        orElse: () => null);
    if (_g != null) {
      if (_dragAvailable == null) {
        _dataCircleDrag = _g.circleData;
      }
      if (_g.tables.length > 1)
        _g.hideLine(
            object.id,
            object.type() == EObject.Table &&
                Utils.distance(_dataCircleDrag['center'], object.offset) >
                    _dataCircleDrag['r'] * 1.5);
    }

    setState(() => this._dragAvailable = object.offset);
  }

  itemDragEnd(model.Object object) {
    setState(() => this._dragAvailable = null);
    model.Group _g = _groups.firstWhere(
        (g) => g.allChild().indexWhere((o) => o.id == object.id) != -1,
        orElse: () => null);
    if (_g != null) {
      if (_g.hideId != null) {
        model.Table _table =
            _g.tables.firstWhere((f) => f.id == _g.hideId, orElse: () => null);
        if (_table != null) {
          removeObject(_g.hideId);
          _g.hideId = null;
          _groups.add(
              model.Group(_groups.length.toString())..addChild(_table.offset));
        }
      }
      _g.updateChild(object, object.offset);
    }
    modeToSingle();
    _updateName();
  }

  itemLongPressUpdate(String id, Offset delta) {
    if (_mode == EMode.Group) {
      for (model.Group g in _groups) {
        List<model.Object> objects = g.allChild();
        int index = objects.indexWhere((t) => t.id == id);
        if (index != -1) {
          setState(() {
            objects.forEach((o) {
              o.offset += delta;
            });
          });
        }
      }
    }
  }

  itemLongPressUp() {
    bool existDup = true;
    List<model.Group> _newGr = _groups;
    while (existDup) {
      existDup = false;
      int index = -1;

      List<model.Group> _tempGr = [];
      for (int i = 0; i < _newGr.length; i++) {
        if (i != index) {
          model.Group _g = model.Group(_newGr[i].name);
          _newGr[i].tables.forEach((t) => _g.addChild(t.offset));
          _newGr[i].chairs.forEach((t) => _g.addChild(t.offset, true));

          if (!existDup) {
            for (int j = i + 1; j < _newGr.length; j++) {
              Map _mi = _newGr[i].circleData;
              Map _mj = _newGr[j].circleData;
              Rect _recti = Rect.fromCircle(
                  center: _mi['center'], radius: _mi['r'] * 0.6);
              Rect _rectj = Rect.fromCircle(
                  center: _mj['center'], radius: _mj['r'] * 0.6);
              if (isDuplication(_recti, _rectj) ||
                  isDuplication(_rectj, _recti)) {
                index = j;
                existDup = true;
                break;
              }
            }

            if (index != -1) {
              _newGr[index].tables.forEach((t) => _g.addChild(t.offset));
              _newGr[index].chairs.forEach((t) => _g.addChild(t.offset, true));
            }
          }
          _tempGr.add(_g);


00000002;
      onChanged();
      return this;
    }

    private com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest
        targetSslProxiesSetSslCertificatesRequestResource_;
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest,
            com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest.Builder,
            com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequestOrBuilder>
        targetSslProxiesSetSslCertificatesRequestResourceBuilder_;

    /**
     *
     *
     *

     * The body resource for this request
     *

     *
     *
     * .google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest target_ssl_proxies_set_ssl_certificates_request_resource = 147940797 [(.google.api.field_behavior) = REQUIRED];
     *
     *
     * @return Whether the targetSslProxiesSetSslCertificatesRequestResource field is set.
     */
    public boolean hasTargetSslProxiesSetSslCertificatesRequestResource() {
      return ((bitField0_ & 0x00000004) != 0);
    }

    /**
     *
     *
     *

     * The body resource for this request
     *

     *
     *
     * .google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest target_ssl_proxies_set_ssl_certificates_request_resource = 147940797 [(.google.api.field_behavior) = REQUIRED];
     *
     *
     * @return The targetSslProxiesSetSslCertificatesRequestResource.
     */
    public com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest
        getTargetSslProxiesSetSslCertificatesRequestResource() {
      if (targetSslProxiesSetSslCertificatesRequestResourceBuilder_ == null) {
        return targetSslProxiesSetSslCertificatesRequestResource_ == null
            ? com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest
                .getDefaultInstance()
            : targetSslProxiesSetSslCertificatesRequestResource_;
      } else {
        return targetSslProxiesSetSslCertificatesRequestResourceBuilder_.getMessage();
      }
    }

    /**
     *
     *
     *

     * The body resource for this request
     *

     *
     *
     * .google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest target_ssl_proxies_set_ssl_certificates_request_resource = 147940797 [(.google.api.field_behavior) = REQUIRED];
     *
     */
    public Builder setTargetSslProxiesSetSslCertificatesRequestResource(
        com.google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest value) {
      if (targetSslProxiesSetSslCertificatesRequestResourceBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        targetSslProxiesSetSslCertificatesRequestResource_ = value;
      } else {
        targetSslProxiesSetSslCertificatesRequestResourceBuilder_.setMessage(value);
      }
      bitField0_ |= 0x00000004;
      onChanged();
      return this;
    }

    /**
     *
     *
     *

     * The body resource for this request
     *

     *
     *
     * .google.cloud.compute.v1.TargetSslProxiesSetSslCertificatesRequest target_ssl_proxies_set_ssl_certificates_request